From 64a05fb8a9ae68962fcb1ee7ca44f28523701b8e Mon Sep 17 00:00:00 2001 From: Sxy6214 Date: Sun, 4 Feb 2024 15:16:39 +0800 Subject: [PATCH] Updates --- commit.json | 2 +- css/{app.c93efb7d.css => app.c0262caa.css} | 2 +- index.html | 2 +- js/app.15dd0ca5.js | 3 +++ js/{app.590d8137.js.map => app.15dd0ca5.js.map} | 2 +- js/app.590d8137.js | 3 --- 6 files changed, 7 insertions(+), 7 deletions(-) rename css/{app.c93efb7d.css => app.c0262caa.css} (99%) create mode 100644 js/app.15dd0ca5.js rename js/{app.590d8137.js.map => app.15dd0ca5.js.map} (53%) delete mode 100644 js/app.590d8137.js diff --git a/commit.json b/commit.json index fac865b2e..8a5205e8e 100644 --- a/commit.json +++ b/commit.json @@ -1 +1 @@ -{"sha":"412a54cdc45e54c1157a833b93ade733f2440f8c","message":"most hostile text display","author":"Sxy6214"} \ No newline at end of file +{"sha":"ff2f66597204be769ecf21c8724fe64ebff9f073","message":"lmao","author":"Sxy6214"} \ No newline at end of file diff --git a/css/app.c93efb7d.css b/css/app.c0262caa.css similarity index 99% rename from css/app.c93efb7d.css rename to css/app.c0262caa.css index 6b33b0c0c..caebe83ef 100644 --- a/css/app.c93efb7d.css +++ b/css/app.c0262caa.css @@ -1 +1 @@ -.o-autobuyer-input--invalid[data-v-4d836647],.s-base--dark .o-autobuyer-input--invalid[data-v-4d836647],.t-s1 .o-autobuyer-input--invalid[data-v-4d836647]{background-color:var(--color-bad)}.c-automator-single-block[data-v-36c54dc2]{display:flex;flex-direction:row;justify-content:center;align-items:center;height:2.8rem;white-space:nowrap}.c-automator-constant-block[data-v-36c54dc2]{background:var(--color-blockmator-block-command);color:var(--color-blockmator-editor-background)}.c-automator-text-input-container[data-v-36c54dc2]{position:relative}.o-long-text-input[data-v-36c54dc2]{width:30rem}.c-automator-close-text-input[data-v-36c54dc2]{position:absolute;color:var(--color-automator-error-outline);font-size:1.5rem;z-index:1;right:.8rem;top:.6rem}.l-error-textbox[data-v-36c54dc2]{background:var(--color-automator-error-background);color:#ff0}.l-blob[data-v-36c54dc2]{font-size:1.8rem;background:#000;color:#fc2}.c-automator-block-row--container[data-v-70ff0acc]{margin:-.002rem;padding:.002rem}.l-automator-nested-block[data-v-70ff0acc]{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;min-width:30rem;min-height:3.65rem;border:.1rem dotted #5f5;margin:-.1rem 0 -.1rem 3rem;padding:0 .5rem}.c-automator-block-editor[data-v-0f454411]{display:flex;overflow-y:auto;-moz-tab-size:1.5rem;tab-size:1.5rem;width:100%;background-color:var(--color-blockmator-editor-background);box-sizing:initial}.c-automator-block-editor--container[data-v-0f454411]{display:flex;overflow-y:hidden;height:100%;position:relative;box-sizing:border-box}.c-automator-blocks[data-v-0f454411]{width:100%;height:-webkit-max-content;height:max-content;padding:.3rem .6rem 5rem}.c-automator-block-editor--gutter[data-v-0f454411]{height:-webkit-max-content;height:max-content;min-height:100%;position:relative;background-color:var(--color-automator-controls-background);border-right:.1rem solid #505050;padding:.3rem 1rem 20rem}.c-automator-block-line-number[data-v-0f454411]{display:flex;height:3.45rem;justify-content:flex-end;align-items:center;font-size:1.4rem;color:var(--color-automator-docs-font)}.null-block[data-v-0f454411]{display:none;visibility:hidden}.block-container[data-v-7cd77792]{display:flex;flex-wrap:wrap;align-items:center;margin:1rem 0}.o-automator-block-list[data-v-7cd77792]{display:flex;width:8.7rem;text-align:center;height:5.5rem;font-size:1.2rem;justify-content:center;align-items:center}.o-drag-cancel-region[data-v-7cd77792]{width:100%;height:100%}.null-block[data-v-7cd77792]{display:none;visibility:hidden}.perk-settings>button[data-v-1d796bb5]{margin-right:1rem}.c-button-perk-layout[data-v-1d796bb5]{width:30rem;margin-bottom:1rem}.c-button-physics[data-v-1d796bb5]{width:27rem;margin-bottom:1rem}.c-automator__button[data-v-a1d47f14]{width:3.3rem;border:var(--var-border-width,.2rem) solid var(--color-automator-controls-border);border-radius:var(--var-border-radius,.3rem);margin:.4rem;cursor:pointer;color:var(--color-automator-docs-font);background-color:var(--color-automator-controls-inactive)}.l-entry-padding[data-v-87c8567a]{border:solid .1rem var(--color-automator-docs-font);border-radius:var(--var-border-radius,.5rem);overflow-wrap:break-word;padding:1rem 1.5rem}.l-value-padding[data-v-87c8567a]{padding-left:1.5rem}.l-button-margin[data-v-87c8567a]{margin-right:1rem}.l-panel-padding[data-v-4d4d30ca]{padding:.5rem 2rem 1rem 0}.l-entry-margin[data-v-4d4d30ca]{margin-bottom:1rem}.c-import-button[data-v-4d4d30ca]{margin:1rem 1rem -1rem;border-radius:var(--var-border-radius,.4rem);border-width:var(--var-border-width,.2rem);cursor:pointer}.c-delete-button[data-v-559b0908]{display:flex;justify-content:center;align-items:center;border:var(--var-border-width,.2rem) solid var(--color-automator-controls-border);border-radius:var(--var-border-radius,.3rem);margin:.1rem -.4rem .1rem .6rem;cursor:pointer;color:var(--color-automator-docs-font);background-color:var(--color-automator-controls-inactive)}.c-delete-button[data-v-559b0908]:hover{background-color:var(--color-automator-error-background)}.l-single-definition-container[data-v-559b0908]{display:flex;flex-direction:row;padding:.5rem}.o-arrow-padding[data-v-559b0908]{display:flex;flex-direction:column;justify-content:center;padding:0 1rem}.c-define-textbox[data-v-559b0908]{display:inline-block;font-family:Typewriter,serif;font-size:1.1rem;background:var(--color-blockmator-block-background);border:.1rem solid var(--color-blockmator-block-border);border-radius:var(--var-border-radius,.5rem);padding:.5rem;color:#00ac00}.l-error-textbox[data-v-559b0908]{background:var(--color-automator-error-background)}.l-limit-textbox[data-v-559b0908]{border-style:dotted;border-color:var(--color-automator-error-outline)}.c-alias[data-v-559b0908]{min-width:14.5rem}.c-value[data-v-559b0908]{width:100%}.c-delete-margin[data-v-1499c066]{margin:0}.l-panel-padding[data-v-1499c066]{padding:.5rem 2rem 0 0}.l-definition-container[data-v-1499c066]{display:flex;flex-direction:column;border:solid .1rem var(--color-automator-docs-font);border-radius:var(--var-border-radius,.5rem);padding:.5rem;margin-top:1rem}.l-command-group[data-v-71d16626]{display:flex;flex-direction:column;padding-left:1rem}.l-return-button[data-v-71d16626]{width:4rem;height:2.6rem;font-size:1.8rem;margin-left:2rem}.c-automator-button-icon[data-v-2dfadf11]{padding:.3rem .8rem;width:3.3rem;border:var(--var-border-width,.2rem) solid var(--color-automator-controls-border);border-radius:var(--var-border-radius,.3rem);color:var(--color-automator-docs-font);background-color:var(--color-automator-controls-inactive)}.c-automator-docs-template--button[data-v-a3645a5c]{margin:.4rem;border-radius:var(--var-border-radius,.4rem);border-width:var(--var-border-width,.2rem);cursor:pointer}.template-container[data-v-a3645a5c]{display:flex;flex-direction:column}.l-script-option[data-v-1d4a260f]{border-radius:0;border-bottom:0}.c-script-option-hover-effect[data-v-1d4a260f]:hover{filter:brightness(70%);background-color:var(--color-automator-active-line-background)}.l-script-option[data-v-1d4a260f]:first-child{border-radius:var(--var-border-radius,.5rem) var(--var-border-radius,.5rem) 0 0}.l-create-script[data-v-1d4a260f]{border-radius:0 0 var(--var-border-radius,.5rem) var(--var-border-radius,.5rem)}.l-active-script[data-v-1d4a260f]{background-color:var(--color-automator-controls-active)}.l-selected-script[data-v-1d4a260f]{background-color:var(--color-automator-active-line-outline)}.l-max-scripts[data-v-1d4a260f]{background-color:var(--color-automator-error-background);cursor:auto}.l-expanding-control-box[data-v-3584cbe8]{position:relative;z-index:3}.l-expanding-control-box--controls-width[data-v-3584cbe8]{width:100%}.l-expanding-control-box__container[data-v-3584cbe8]{display:block;overflow:hidden;width:100%;height:auto;position:absolute;left:50%;transform:translateX(-50%)}.l-expanding-control-box__container--transition[data-v-3584cbe8]{transition:max-height .5s}.l-expanding-control-box__button[data-v-3584cbe8]{display:flex;white-space:nowrap;width:100%;height:2.5rem;position:relative;top:-.5rem;justify-content:center;align-items:center;border:none!important;cursor:pointer}.c-indicator-arrow--flipped[data-v-3584cbe8]{transform:rotate(-180deg)}.c-indicator-arrow[data-v-3584cbe8]{margin-left:.6rem;transition:transform .25s ease-out}.l-automator__expand-corner[data-v-192f8680]{position:absolute;right:0}.l-automator__script-names[data-v-192f8680]{flex-grow:1;display:flex;flex-direction:row;justify-content:space-evenly;align-items:center}.l-automator__scripts-dropdown[data-v-192f8680]{width:100%;margin:.4rem;-webkit-user-select:none;user-select:none}.l-automator__rename-input[data-v-192f8680]{width:100%;height:calc(2.33333rem - var(--var-border-width, 0rem)*2);border:var(--var-border-width,.2rem) solid var(--color-reality-light);border-radius:var(--var-border-radius,.3rem);margin:.4rem;padding:.4rem}.c-automator__rename-input[data-v-192f8680]{font-family:Typewriter;font-size:1.2rem;color:var(--color-automator-docs-font);background-color:var(--color-automator-controls-active)}.c-automator__button--active[data-v-192f8680]{background-color:var(--color-automator-controls-active);border-color:var(--color-reality-light)}.c-automator__status-text[data-v-192f8680]{font-size:1.5rem;font-weight:700;color:var(--color-reality);padding:0 .5rem}.c-automator__status-text--small[data-v-192f8680]{font-size:1.1rem}.c-automator__status-text--error[data-v-192f8680]{color:var(--color-bad);cursor:auto}.c-long-name-box[data-v-192f8680]{background-color:var(--color-automator-error-background);border-color:var(--color-automator-error-outline)}.o-blob-background[data-v-3413da3e]{opacity:.3}.o-blob-background[data-v-3413da3e],.o-blob-snowflake[data-v-67871b93]{overflow:visible;fill:#fbc21b;text-shadow:0 0 5px #000,0 0 5px #000,0 0 5px #000;pointer-events:none;-webkit-user-select:none;user-select:none;cursor:default}.o-blob-snowflake[data-v-67871b93]{opacity:.9}.c-blob-snowflake-container[data-v-2549fa62]{z-index:9999}.c-blob-background-container[data-v-2549fa62],.c-blob-snowflake-container[data-v-2549fa62]{overflow:visible;width:100%;height:100%;position:absolute;top:0;left:0;pointer-events:none;-webkit-user-select:none;user-select:none;cursor:default}.c-blob-background-container[data-v-2549fa62]{z-index:-9999}.c-mending-points[data-v-a8ab28e8]{font-size:1.2rem;padding-bottom:.5rem}.l-spacing[data-v-ff18554e]{margin-top:1rem}.c-black-hole-header[data-v-60b7c53e]{font-weight:700;color:var(--color-text)}.c-primary-btn--black-hole-header[data-v-60b7c53e]{vertical-align:middle;margin:.2rem}.c-black-hole-status-text[data-v-60b7c53e]{margin:0 .8rem}.o-discharge-btn[data-v-60b7c53e]{width:20rem;font-size:1rem}.o-small-discharge-text[data-v-60b7c53e]{font-size:1rem;line-height:1rem}.o-bh-charge-disabled[data-v-60b7c53e]{background-color:var(--color-disabled);-webkit-user-select:none;user-select:none;cursor:not-allowed}.l-game-header__challenge-text[data-v-71e60358]{display:flex;height:2rem;top:50%;justify-content:center;align-items:center;font-size:1.2rem;font-weight:700;color:var(--color-text);margin:.5rem}.l-challenge-display[data-v-71e60358]{padding:.5rem;cursor:default}.l-challenge-display--clickable[data-v-71e60358]{cursor:pointer;-webkit-user-select:none;user-select:none}.l-challenge-display--clickable[data-v-71e60358]:hover{text-decoration:underline}.l-padding-line[data-v-71e60358]{padding:.3rem}.c-armageddon-button[data-v-8077c0a8]{display:block;font-family:Typewriter;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem)}.s-base--metro .c-armageddon-button[data-v-8077c0a8]{box-shadow:.1rem .1rem .1rem 0 #9e9e9e}.l-armageddon-button[data-v-8077c0a8]{width:100%;padding:1.5rem}.l-armageddon-button--header[data-v-8077c0a8]{font-size:1rem;font-weight:700;padding:0}.c-armageddon-button[data-v-8077c0a8]:hover{box-shadow:.1rem .1rem .5rem var(--color-pelle--base);transition-duration:.12s;cursor:pointer}.c-armageddon-button--unavailable[data-v-8077c0a8]{opacity:.5;cursor:default!important}.c-remnant-gain[data-v-8077c0a8]{font-size:1.5rem;font-weight:700;color:var(--color-pelle--base)}.c-remnant-gain-display[data-v-8077c0a8]{vertical-align:middle}.c-reality-shard-gain[data-v-8077c0a8]{font-weight:700;color:var(--color-pelle--base)}.c-reality-currency[data-v-669bdb06]{font-size:1.2rem;margin-bottom:1rem}.c-shard-color[data-v-669bdb06]{color:var(--color-pelle--base)}.c-gamespeed[data-v-95af5524]{font-weight:700;color:var(--color-text)}.c-reality-container[data-v-4832cc34]{display:flex;flex-direction:column;justify-content:space-between;align-items:center}.c-eternity-points[data-v-78a4376a],.c-infinity-points[data-v-546e2542],.c-mending-points[data-v-4832cc34]{font-size:1.2rem;padding-bottom:.5rem}.c-prestige-info-blocks[data-v-05a7d691]{display:flex;flex-direction:row;height:14rem;width:100%;color:var(--color-text)}.l-game-header__eternity[data-v-05a7d691]{position:absolute;left:calc(25% - 22rem);width:22rem}.l-game-header__center[data-v-05a7d691]{position:absolute;right:calc(50% - 25rem);width:50rem}.l-game-header__infinity[data-v-05a7d691]{position:absolute;right:calc(25% - 22rem);width:22rem}.o-tab-btn[data-v-02221b25]{position:relative;height:2.5rem;vertical-align:middle;padding-top:.2rem}.o-subtab-btn--active[data-v-02221b25]{height:2.5rem;border-bottom-width:.4rem}.s-base--metro .o-subtab-btn--active[data-v-02221b25]{border-bottom-width:.4rem}.o-tab-btn[data-v-48d1e610]{position:relative;height:3.1rem;vertical-align:middle;margin:.2rem;margin-bottom:.7rem}.o-tab-btn--active[data-v-48d1e610]{height:3.1rem;border-bottom-width:.5rem}.s-base--metro .o-tab-btn--active[data-v-48d1e610]{border-bottom-width:.5rem}.c-mending-points[data-v-26607020]{font-size:1.2rem;padding-bottom:.5rem}.l-modal-celestial-quote[data-v-3f7bcfc0]{flex-direction:row;width:30rem;height:30rem;top:50vh;left:50vw;justify-content:space-between;transform:translate(-50%,-50%);background-color:#000}.c-modal-celestial-quote[data-v-3f7bcfc0],.l-modal-celestial-quote[data-v-3f7bcfc0]{display:flex;position:absolute;align-items:center;border-radius:var(--var-border-radius,1rem)}.c-modal-celestial-quote[data-v-3f7bcfc0]{width:100%;height:100%;left:0;justify-content:center;-webkit-user-select:none;user-select:none}.c-modal-celestial-quote__symbol[data-v-3f7bcfc0]{z-index:1;font-size:25rem;text-shadow:0 0 2rem}.c-modal-celestial-quote__shadow[data-v-3f7bcfc0]{box-shadow:0 0 1.5rem .1rem,inset 0 0 1rem .1rem}.s-base--metro .c-modal-celestial-quote__shadow[data-v-3f7bcfc0]{box-shadow:0 0 1rem .2rem,inset 0 0 1rem .1rem}.c-modal-celestial-quote__text[data-v-3f7bcfc0]{z-index:2;padding:5rem}.c-modal-celestial-name[data-v-7e428c16]{position:absolute;top:1rem;right:0;left:0;font-weight:700}.c-modal-celestial-quote__arrow[data-v-7e428c16]{font-size:150%;margin:.5rem;cursor:pointer}.c-modal-celestial-quote__arrow-left[data-v-7e428c16]{position:absolute;left:1rem}.c-modal-celestial-quote__arrow-right[data-v-7e428c16]{position:absolute;right:1rem}.c-modal-celestial-quote__end[data-v-7e428c16]{position:absolute;bottom:1.5rem;left:calc(50% - 1rem);font-size:150%;cursor:pointer}.l-modal-celestial-quote__text[data-v-7e428c16]{display:flex;flex-direction:column;height:100%;justify-content:center}.l-modal-celestial-quote__buttons[data-v-7e428c16]{display:flex;flex-direction:column;height:100%;justify-content:space-between}.c-modal-celestial-quote__arrow-invisible[data-v-7e428c16]{visibility:hidden}.c-quote-overlay[data-v-198b74ab]{font-size:1.4rem;padding:1rem;transition:all .2s,top .3s ease,transform .3s ease,z-index .3s}.c-quote-overlay--background[data-v-198b74ab]{filter:grayscale(.5);cursor:pointer}.c-quote-overlay--background[data-v-198b74ab]:hover{opacity:1;filter:grayscale(.3) drop-shadow(0 0 2rem)}.c-modal-celestial-quote-history__arrow[data-v-198b74ab],.c-modal-celestial-quote-history__close[data-v-198b74ab]{position:absolute;z-index:1;font-size:2.5rem;cursor:pointer}.o-light-button[data-v-198b74ab]{color:#fff}.o-dark-button[data-v-198b74ab]{color:#000}.c-modal-celestial-quote-history__arrow--disabled[data-v-198b74ab]{opacity:.4;cursor:default}.c-modal-celestial-quote-history__arrow-down[data-v-198b74ab]{top:calc(50% + 16rem);left:50%;transform:translateX(-50%)}.c-modal-celestial-quote-history__arrow-up[data-v-198b74ab]{bottom:calc(50% + 16rem);left:50%;transform:translateX(-50%)}.c-modal-celestial-quote-history__arrow-left[data-v-198b74ab]{top:50%;right:calc(50% + 16rem);transform:translateY(-50%)}.c-modal-celestial-quote-history__arrow-right[data-v-198b74ab]{top:50%;left:calc(50% + 16rem);transform:translateY(-50%)}.c-modal-celestial-quote-history__close[data-v-198b74ab]{position:absolute;bottom:calc(50% + 16rem);left:calc(50% + 16rem);z-index:1}.c-modal-celestial-quote-history__close[data-v-198b74ab],.c-quote-history-modal__controls[data-v-198b74ab]{-webkit-animation:a-fade-in-data-v-198b74ab .5s;animation:a-fade-in-data-v-198b74ab .5s}.c-quote-history-modal__clickable-background[data-v-198b74ab]{width:100%;height:100%;position:absolute;inset:0;z-index:-10;cursor:zoom-out}@-webkit-keyframes a-fade-in-data-v-198b74ab{0%{opacity:0}to{opacity:1}}@keyframes a-fade-in-data-v-198b74ab{0%{opacity:0}to{opacity:1}}.c-quote-overlay[data-v-4e0361e1]{font-size:1.4rem;padding:1rem;transition-duration:.2s}.c-credits-s12-end[data-v-5f15ce42]{--color-text:#fff;color:#fff}.c-credits-header[data-v-5f15ce42]{color:#000}.t-amoled .c-credits-header[data-v-5f15ce42],.t-dark .c-credits-header[data-v-5f15ce42],.t-s6 .c-credits-header[data-v-5f15ce42],.t-s10 .c-credits-header[data-v-5f15ce42]{-webkit-animation:a-credits-header--glow-data-v-5f15ce42 25s infinite;animation:a-credits-header--glow-data-v-5f15ce42 25s infinite}.t-s12 .c-credits-header[data-v-5f15ce42]{color:var(--color-antimatter)}@-webkit-keyframes a-credits-header--glow-data-v-5f15ce42{0%{color:#2196f3}33%{color:#673ab7}66%{color:#00bcd4}to{color:#2196f3}}@keyframes a-credits-header--glow-data-v-5f15ce42{0%{color:#2196f3}33%{color:#673ab7}66%{color:#00bcd4}to{color:#2196f3}}.t-s11 .c-credits-header[data-v-5f15ce42]{-webkit-animation:a-credits-header--glow-blob-data-v-5f15ce42 25s infinite;animation:a-credits-header--glow-blob-data-v-5f15ce42 25s infinite}@-webkit-keyframes a-credits-header--glow-blob-data-v-5f15ce42{0%{color:#fbc21b}33%{color:#caa32c}66%{color:#fba11b}to{color:#fbc21b}}@keyframes a-credits-header--glow-blob-data-v-5f15ce42{0%{color:#fbc21b}33%{color:#caa32c}66%{color:#fba11b}to{color:#fbc21b}}.t-amoled-metro .c-credits-header[data-v-5f15ce42],.t-dark-metro .c-credits-header[data-v-5f15ce42]{color:#e0e0e0}.c-credits-section[data-v-5f15ce42]{color:var(--color-text);text-shadow:1px 1px 2px #40e0d0;margin-top:10rem;margin-bottom:2rem}.l-credits--bulk[data-v-5f15ce42]{display:grid;grid-template-columns:repeat(2,1fr);width:76%;position:relative;left:12%}.c-credit-entry[data-v-5f15ce42]{font-size:1.3rem;margin-top:1rem}@-webkit-keyframes a-teresa-credits-data-v-7244bf67{0%{transform:rotate(61deg)}10%{transform:rotate(322deg)}20%{transform:rotate(235deg)}30%{transform:rotate(222deg)}40%{transform:rotate(105deg)}50%{transform:rotate(33deg)}60%{transform:rotate(103deg)}70%{transform:rotate(158deg)}80%{transform:rotate(41deg)}90%{transform:rotate(73deg)}to{transform:rotate(61deg)}}@keyframes a-teresa-credits-data-v-7244bf67{0%{transform:rotate(61deg)}10%{transform:rotate(322deg)}20%{transform:rotate(235deg)}30%{transform:rotate(222deg)}40%{transform:rotate(105deg)}50%{transform:rotate(33deg)}60%{transform:rotate(103deg)}70%{transform:rotate(158deg)}80%{transform:rotate(41deg)}90%{transform:rotate(73deg)}to{transform:rotate(61deg)}}@-webkit-keyframes a-effarig-credits-data-v-7244bf67{0%{opacity:.8;text-shadow:0 0 3rem}50%{opacity:1;text-shadow:0 0 4rem,0 0 4rem}to{opacity:.8;text-shadow:0 0 3rem}}@keyframes a-effarig-credits-data-v-7244bf67{0%{opacity:.8;text-shadow:0 0 3rem}50%{opacity:1;text-shadow:0 0 4rem,0 0 4rem}to{opacity:.8;text-shadow:0 0 3rem}}@-webkit-keyframes a-enslaved-credits-data-v-7244bf67{0%{transform:translateX(-50%) rotate(0)}to{transform:translateX(-50%) rotate(1turn)}}@keyframes a-enslaved-credits-data-v-7244bf67{0%{transform:translateX(-50%) rotate(0)}to{transform:translateX(-50%) rotate(1turn)}}@-webkit-keyframes a-v-credits-data-v-7244bf67{0%{transform:translateX(-50%) rotate(0) scale(.8)}16.67%{transform:translateX(-50%) rotate(60deg) scale(1.2)}33.33%{transform:translateX(-50%) rotate(120deg) scale(.8)}50%{transform:translateX(-50%) rotate(180deg) scale(1.2)}66.67%{transform:translateX(-50%) rotate(240deg) scale(.8)}83.33%{transform:translateX(-50%) rotate(300deg) scale(1.2)}to{transform:translateX(-50%) rotate(1turn) scale(.8)}}@keyframes a-v-credits-data-v-7244bf67{0%{transform:translateX(-50%) rotate(0) scale(.8)}16.67%{transform:translateX(-50%) rotate(60deg) scale(1.2)}33.33%{transform:translateX(-50%) rotate(120deg) scale(.8)}50%{transform:translateX(-50%) rotate(180deg) scale(1.2)}66.67%{transform:translateX(-50%) rotate(240deg) scale(.8)}83.33%{transform:translateX(-50%) rotate(300deg) scale(1.2)}to{transform:translateX(-50%) rotate(1turn) scale(.8)}}@-webkit-keyframes a-ra-credits-data-v-7244bf67{0%{opacity:.3;transform:translateX(-50%) scale(.2)}50%{opacity:.7;transform:translateX(-50%) scale(.9)}to{opacity:.3;transform:translateX(-50%) scale(.2)}}@keyframes a-ra-credits-data-v-7244bf67{0%{opacity:.3;transform:translateX(-50%) scale(.2)}50%{opacity:.7;transform:translateX(-50%) scale(.9)}to{opacity:.3;transform:translateX(-50%) scale(.2)}}@-webkit-keyframes a-ra-credits--dark-data-v-7244bf67{0%{opacity:.1;transform:translateX(-50%) scale(.2)}50%{opacity:.4;transform:translateX(-50%) scale(.9)}to{opacity:.1;transform:translateX(-50%) scale(.2)}}@keyframes a-ra-credits--dark-data-v-7244bf67{0%{opacity:.1;transform:translateX(-50%) scale(.2)}50%{opacity:.4;transform:translateX(-50%) scale(.9)}to{opacity:.1;transform:translateX(-50%) scale(.2)}}@-webkit-keyframes a-laitela-credits-data-v-7244bf67{0%{transform:translate(-50%,30%)}25%{transform:translate(-50%,-20%)}50%{transform:translate(-50%,30%)}75%{transform:translateY(30%)}to{transform:translate(-50%,30%)}}@keyframes a-laitela-credits-data-v-7244bf67{0%{transform:translate(-50%,30%)}25%{transform:translate(-50%,-20%)}50%{transform:translate(-50%,30%)}75%{transform:translateY(30%)}to{transform:translate(-50%,30%)}}@-webkit-keyframes a-pelle-credits-data-v-7244bf67{0%{transform:translateX(-50%) rotateY(0) scaleY(1)}25%{transform:translateX(-50%) rotateY(90deg) scaleY(1.3)}50%{transform:translateX(-50%) rotateY(180deg) scaleY(1)}75%{transform:translateX(-50%) rotateY(270deg) scaleY(1.3)}to{transform:translateX(-50%) rotateY(1turn) scaleY(1)}}@keyframes a-pelle-credits-data-v-7244bf67{0%{transform:translateX(-50%) rotateY(0) scaleY(1)}25%{transform:translateX(-50%) rotateY(90deg) scaleY(1.3)}50%{transform:translateX(-50%) rotateY(180deg) scaleY(1)}75%{transform:translateX(-50%) rotateY(270deg) scaleY(1.3)}to{transform:translateX(-50%) rotateY(1turn) scaleY(1)}}.c-mute-button[data-v-7244bf67]{position:fixed;left:2rem;font-size:2rem;opacity:.5;pointer-events:auto;cursor:pointer}.t-s12 .c-mute-button[data-v-7244bf67]{color:#fff}.c-credits-container[data-v-7244bf67]{width:100%;height:100%;position:absolute;left:0;z-index:9;transform:translateY(100%);pointer-events:none}.c-credits-cel-symbol[data-v-7244bf67]{display:flex;width:14rem;height:14rem;position:absolute;justify-content:center;align-items:center;font-size:14rem;text-shadow:0 0 3rem;transform:translateX(-50%)}.c-teresa-credits[data-v-7244bf67]{top:145rem;left:65%;color:var(--color-teresa--base);-webkit-animation:a-teresa-credits-data-v-7244bf67 10s ease-in-out infinite;animation:a-teresa-credits-data-v-7244bf67 10s ease-in-out infinite}.c-effarig-credits[data-v-7244bf67]{top:50rem;left:80%;color:#f40;-webkit-animation:a-effarig-credits-data-v-7244bf67 4s ease-in-out infinite;animation:a-effarig-credits-data-v-7244bf67 4s ease-in-out infinite}.c-enslaved-credits[data-v-7244bf67]{top:235rem;left:52%;color:var(--color-enslaved--base);-webkit-animation:a-enslaved-credits-data-v-7244bf67 10s linear infinite;animation:a-enslaved-credits-data-v-7244bf67 10s linear infinite}.c-v-credits[data-v-7244bf67]{top:185rem;left:20%;color:var(--color-v--base);-webkit-animation:a-v-credits-data-v-7244bf67 15s ease-in-out infinite;animation:a-v-credits-data-v-7244bf67 15s ease-in-out infinite}.c-ra-credits[data-v-7244bf67]{top:315rem;left:44%;color:var(--color-ra--base);-webkit-animation:a-ra-credits-data-v-7244bf67 10s ease-in-out infinite;animation:a-ra-credits-data-v-7244bf67 10s ease-in-out infinite}.s-base--dark .c-ra-credits[data-v-7244bf67]{-webkit-animation:a-ra-credits--dark-data-v-7244bf67 10s ease-in-out infinite;animation:a-ra-credits--dark-data-v-7244bf67 10s ease-in-out infinite}.c-laitela-credits[data-v-7244bf67]{top:105rem;left:13%;color:#fff;-webkit-animation:a-laitela-credits-data-v-7244bf67 5s ease-in-out infinite;animation:a-laitela-credits-data-v-7244bf67 5s ease-in-out infinite}.c-pelle-credits[data-v-7244bf67]{top:8rem;left:30%;color:var(--color-pelle--base);-webkit-animation:a-pelle-credits-data-v-7244bf67 5s linear infinite;animation:a-pelle-credits-data-v-7244bf67 5s linear infinite}.c-background-overlay[data-v-0b58eaaa]{width:100%;height:100%;position:absolute;top:0;left:0;z-index:8;background-color:#fff}.t-dark-metro .c-background-overlay[data-v-0b58eaaa],.t-dark .c-background-overlay[data-v-0b58eaaa]{background-image:url(../img/dark-bg.ed00b71f..png);background-position:50%}.t-amoled-metro .c-background-overlay[data-v-0b58eaaa],.t-amoled .c-background-overlay[data-v-0b58eaaa],.t-inverted-metro .c-background-overlay[data-v-0b58eaaa],.t-inverted .c-background-overlay[data-v-0b58eaaa],.t-s11 .c-background-overlay[data-v-0b58eaaa]{background-color:#000}.t-s1 .c-background-overlay[data-v-0b58eaaa]{background:url(../img/s1-bg.6d361e47..svg) no-repeat;background-attachment:fixed;background-color:#d72621;background-position:bottom;background-size:100%}.t-s1 .c-background-overlay[data-v-0b58eaaa]:before{content:"";width:100%;height:100%;position:fixed;top:0;left:0;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF3WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxNy0xMS0yOVQxNDo1NDozMi0wODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTctMTEtMjlUMTU6MDQ6NDUtMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTctMTEtMjlUMTU6MDQ6NDUtMDg6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MWVjYzllMzUtYjg2Zi1hMjRmLWFhMzItOTA3ZDY2ZDBkOTcyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOmVhYTRmNDdhLWIwYWQtYzk0Mi1iODlhLTdlOGMwNGQ3ZTBhMCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmVhYTRmNDdhLWIwYWQtYzk0Mi1iODlhLTdlOGMwNGQ3ZTBhMCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZWFhNGY0N2EtYjBhZC1jOTQyLWI4OWEtN2U4YzA0ZDdlMGEwIiBzdEV2dDp3aGVuPSIyMDE3LTExLTI5VDE0OjU0OjMyLTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxZWNjOWUzNS1iODZmLWEyNGYtYWEzMi05MDdkNjZkMGQ5NzIiIHN0RXZ0OndoZW49IjIwMTctMTEtMjlUMTU6MDQ6NDUtMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+QfBOSwAAE2BJREFUeJzt3Nuv5Wd9mPFnewbbGBvjsY0xR8c2ZxNjIMGcDAgVt1SFClrSkqpQqVIveoWU5KL/QJWkUi+4SHLRSr1IoqSVSlEVSooKwQSUFBODMaf6EE4G4yP22MGH8e7FuwBDBnDVDWvNdz4fabRnr7UvvpqLefZ7+K29/f39AIAT2ynbHgAA+P8n6AAwgKADwACCDgADCDoADCDoADCAoAPAAIIOAAMIOgAMIOgAMICgA8AAgg4AAwg6AAwg6AAwgKADwACCDgADCDoADCDoADCAoAPAAIIOAAMIOgAMIOgAMICg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),url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAYAAACAvzbMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFEmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxNy0xMS0yOVQxNDo1NDozNS0wODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTctMTEtMjlUMTU6MDg6MjUtMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTctMTEtMjlUMTU6MDg6MjUtMDg6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MGU2MzIzMzMtZDhhMi01ZTRk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xeN8dU/1P6rfqT671YDA6bICYepq63cLLrS2sa62DtJvqZ5uXUb6wmbTAafOGQhTT7QOyb9X/ULrF9duqf68+nT12wkIHDQrEE7i6dbtM25vBeRPqx+rvtG6EuulzSYDTp0VCCdxU+shRb9T/YdWPIDXCYfonNSbWgfoz+0+f0frMl7/Y8GBExAARpyBADAiIACMCAgAIwICwIiAADAiIACMCAgAIwICwIiAADAiIACMnLWA3F3duvvzG6q/Ur15u3EAeC1nLSB/rfpH1V+uHq3+eSsiAJwxZ+127rdVH2mtRN7SWn2ctRkB6OysQI52H5+v/qR6Z+thRN+v7q8+0LptOABnxFn56f626rHWdtW1VjxejspHq99vPbzotzaZDoBXOSsrkHdVP169r7paXa7O715fqD5T/c/NpgPgVc7KCuSrrVXHV6q/3Vp93FTdXH2p+rXNJgPgRzorK5CL1Rerb1b3tML29ere3QuAM+asrEBedq764+pz1deqJ1txAeCMOWvPRL+zteL4disc51pXXz294UwA/AhnLSAA3CDOyhkIADcYAQFgREAAGBEQAEYEBIARAQFgREAAGBEQAEYEBIARAQFgREAAGBEQAEYEBIARAQFgREAAGBEQAEYEBIARAQFg5H8D3AXeffYx4m0AAAAASUVORK5CYII=),url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGqGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxNy0xMS0yOVQxNDo1NDozNy0wODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTctMTEtMjlUMTU6MTQ6NTMtMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTctMTEtMjlUMTU6MTQ6NTMtMDg6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzVlOTNjMjAtNzk4OS0zOTQ3LWJlOTMtMzMzMzk2MDUyYzcwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlkOWQ0NGQ1LTg2NzUtYTU0My1iZWYwLTFkNWUzOGZmNDYxMSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjlkOWQ0NGQ1LTg2NzUtYTU0My1iZWYwLTFkNWUzOGZmNDYxMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWQ5ZDQ0ZDUtODY3NS1hNTQzLWJlZjAtMWQ1ZTM4ZmY0NjExIiBzdEV2dDp3aGVuPSIyMDE3LTExLTI5VDE0OjU0OjM3LTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MWRhOTJkMC02MmI1LTRlNDctOWY5MC02MDA1NWRiMGMwZmQiIHN0RXZ0OndoZW49IjIwMTctMTEtMjlUMTU6MTQ6MzgtMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjM1ZTkzYzIwLTc5ODktMzk0Ny1iZTkzLTMzMzM5NjA1MmM3MCIgc3RFdnQ6d2hlbj0iMjAxNy0xMS0yOVQxNToxNDo1My0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz76/4gAAAAL2UlEQVR4nO3d249dZRmA8WdPZ9qZTg/ToS0t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);-webkit-animation:a-snow 10s linear infinite,a-snow-fade 10s cubic-bezier(0,.3,1,.7) infinite;animation:a-snow 10s linear infinite,a-snow-fade 10s cubic-bezier(0,.3,1,.7) infinite}.t-s2 .c-background-overlay[data-v-0b58eaaa]{background:url(../img/s2-bg.17969e80..svg) no-repeat;background-color:#fff;background-position-x:50%;background-position-y:50%;background-size:50%}.t-s4 .c-background-overlay[data-v-0b58eaaa]{background:#f0f;border-radius:0!important}.t-s4 .c-background-overlay[data-v-0b58eaaa]:after{content:"";width:100%;height:100%;position:fixed;top:0;left:0;background:#0fff0f;border-radius:40%}.t-s5 .c-background-overlay[data-v-0b58eaaa]{background:url(../img/s5-bg.9bf7e005..jpg);background-position-x:50%;background-position-y:50%;background-size:150%}.t-s6 .c-background-overlay[data-v-0b58eaaa],.t-s10 .c-background-overlay[data-v-0b58eaaa]{background:#000;background-image:url(../img/stars-bg.f04db429..png);background-position:50%;background-size:100%}.t-s8 .c-background-overlay[data-v-0b58eaaa]{background:url(../img/s8-bg.8135ae4a..jpg) no-repeat;background-attachment:fixed;background-position:50%;background-repeat:no-repeat;background-size:cover}.t-s12 .c-background-overlay[data-v-0b58eaaa]{background:url(../img/s12-bg.7929eed6..jpg) no-repeat;background-attachment:fixed;background-position:50%;background-repeat:no-repeat;background-size:cover;filter:brightness(.5)}.l-help-me[data-v-5bb5f9a0]{font-size:1.5rem;font-weight:500;line-height:1.9rem;pointer-events:auto;cursor:pointer;transition-delay:0s;z-index:1}.h2p-tutorial--glow[data-v-5bb5f9a0],.l-help-me[data-v-5bb5f9a0]{position:absolute;width:2rem;height:2rem;right:2rem;border-radius:var(--var-border-radius,50%)}.h2p-tutorial--glow[data-v-5bb5f9a0]{top:0;background:gold;-webkit-animation:a-opacity 3s infinite;animation:a-opacity 3s infinite;z-index:2}.h2p-tooltip[data-v-5bb5f9a0]{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;position:absolute;top:0;right:100%;color:#fff;background:#000;border:.1rem solid var(--color-text);border-radius:var(--var-border-width,.5rem);transform:translate(-.7rem,-.4rem);padding:.2rem .4rem}.h2p-tooltip[data-v-5bb5f9a0]:after{content:"";position:absolute;top:.6rem;left:100%;border-top:.5rem solid transparent;border-left:.5rem solid var(--color-text);border-bottom:.5rem solid transparent}.progress-bar-modal[data-v-699111cc]{z-index:8}.c-modal[data-v-699111cc]{position:fixed;top:50vh;left:50vw;transform:translate(-50%,-50%)}.modal-progress-bar[data-v-699111cc]{display:flex;flex-direction:column;width:40rem;z-index:3;justify-content:space-between;align-items:center}.modal-progress-bar__hbox[data-v-699111cc]{display:flex;flex-direction:row;justify-content:space-between}.modal-progress-bar__bg[data-v-699111cc]{width:20rem;height:2rem;background:#000;margin-right:1rem;margin-left:1rem}.modal-progress-bar__fg[data-v-699111cc]{height:100%;background:blue}.modal-progress-bar__buttons[data-v-699111cc]{display:flex;flex-direction:row;width:25rem;justify-content:space-between;align-items:center}.modal-progress-bar__label[data-v-699111cc]{font-size:large;padding-bottom:.5rem}.modal-progress-bar__margin[data-v-699111cc]{margin:1rem 0}.o-tab-btn[data-v-63b22e24]:before{content:"";width:0;height:100%;position:absolute;right:0;left:0;background-color:var(--color-accent);transition:width .15s}.o-tab-btn--active[data-v-63b22e24]:before{width:.5rem}.o-tab-btn--infinity[data-v-63b22e24]:before{background-color:var(--color-infinity)}.o-tab-btn--eternity[data-v-63b22e24]:before{background-color:var(--color-eternity)}.o-tab-btn--reality[data-v-63b22e24]:before{background-color:var(--color-reality)}.o-tab-btn--celestial[data-v-63b22e24]:before{background-color:var(--color-celestials)}.o-subtab-btn--active[data-v-63b22e24]{border-bottom-width:.5rem}.o-tab-btn--subtab[data-v-63b22e24]:first-child{border-top-left-radius:var(--var-border-radius,.5rem);border-bottom-left-radius:var(--var-border-radius,.5rem);transition:border-radius 0s}.o-tab-btn--subtab[data-v-63b22e24]:last-child{border-top-right-radius:var(--var-border-radius,.5rem);border-bottom-right-radius:var(--var-border-radius,.5rem);transition:border-radius 0s}.o-tab-btn--mending[data-v-63b22e24]:before{background-color:var(--color-mending)}.c-new-game-container[data-v-0fe0fd40]{display:flex;flex-direction:column;position:absolute;top:50%;left:50%;z-index:9;justify-content:center;align-items:center;transform:translate(-50%,-50%);pointer-events:auto}.t-s12 .c-new-game-container[data-v-0fe0fd40]{color:#fff}.c-new-game-button-container[data-v-0fe0fd40]{display:flex;flex-direction:column;align-items:stretch}.c-new-game-button[data-v-0fe0fd40]{font-family:Typewriter;background:grey;border:#000;border-radius:var(--var-border-radius,.5rem);margin-top:1rem;padding:1rem;cursor:pointer}.o-save-timer[data-v-4038e6d6]{white-space:nowrap;position:absolute;bottom:0;left:0;z-index:5;text-align:left;color:var(--color-text);background-color:var(--color-base);border-top:.1rem solid var(--color-accent);border-right:.1rem solid var(--color-accent);padding:0 .5rem;pointer-events:auto;-webkit-user-select:none;user-select:none;cursor:pointer}.t-s2 .o-save-timer[data-v-4038e6d6]{filter:sepia(100%) hue-rotate(180deg) saturate(250%)}.t-s3 .o-save-timer[data-v-4038e6d6]{-webkit-animation:a-glasses 7s infinite;animation:a-glasses 7s infinite}.c-swap-button[data-v-21f229d4]{position:fixed;top:1rem;right:4.5rem;z-index:10;font-size:2rem;opacity:.8;pointer-events:auto;cursor:pointer}.c-speedrun-status[data-v-5faa7a14]{white-space:nowrap;position:absolute;right:2rem;bottom:1rem;z-index:5;font-size:1.2rem;color:var(--color-text);background-color:var(--color-base);border:var(--var-border-width,.2rem) solid var(--color-accent);padding:.8rem 2rem;pointer-events:auto;-webkit-user-select:none;user-select:none}.c-speedrun-status--can-change[data-v-5faa7a14]{text-decoration:underline;cursor:pointer}.c-speedrun-status--collapse[data-v-5faa7a14]{padding:.2rem;cursor:pointer}.hover-menu__wrapper[data-v-0f008cfb]{position:relative}.l-tt-save-load-btn__wrapper[data-v-b401e76c]{position:relative;margin:.3rem}.l-tt-save-load-btn[data-v-b401e76c]{min-width:2rem}.l-tt-save-load-btn__menu[data-v-b401e76c]{position:absolute;top:-.5rem;left:50%;padding:.5rem 0;transform:translate(-50%,-100%)}.c-tt-save-load-btn__menu[data-v-b401e76c]{text-align:left;font-family:Typewriter;font-size:1.4rem;font-weight:700;color:#fff;background:#000;border-radius:var(--var-border-radius,.5rem)}.l-tt-save-load-btn__menu[data-v-b401e76c]:after{content:"";position:absolute;top:100%;left:50%;border-color:#000 transparent transparent;border-style:solid;border-width:var(--var-border-width,.5rem);margin-left:-.5rem}.l-tt-save-load-btn__menu-rename[data-v-b401e76c]{margin:.3rem .5rem .5rem .7rem}.c-tt-save-load-btn__menu-rename[data-v-b401e76c]{text-align:left;font-family:Typewriter;font-size:1.4rem;font-weight:700;border:none;border-radius:var(--var-border-radius,.3rem);padding:.2rem}.l-tt-save-load-btn__menu-item[data-v-b401e76c]{position:relative;cursor:pointer}.c-tt-save-load-btn__menu-item[data-v-b401e76c]{text-align:left;padding:.25rem 1rem}.c-tt-save-load-btn__menu-item[data-v-b401e76c]:hover{color:#000;background:#fff}.c-tt-save-load-btn__menu-item__hover-options[data-v-b401e76c]{visibility:hidden;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;position:absolute;top:0;left:100%;opacity:0;color:#fff;background:#000;border:.1rem solid #000;border-radius:var(--var-border-width,.5rem);transform:translateX(.5rem);transition:visibility .2s,opacity .2s;transition-delay:.5s;cursor:pointer}.c-tt-save-load-btn__menu-item__hover-option[data-v-b401e76c]{white-space:nowrap;padding:.25rem 1rem}.c-tt-save-load-btn__menu-item__hover-options[data-v-b401e76c]:after{content:"";position:absolute;top:.8rem;right:100%;border-top:.5rem solid transparent;border-right:.5rem solid #000;border-bottom:.5rem solid transparent}.c-tt-save-load-btn__menu-item[data-v-b401e76c]:hover,.c-tt-save-load-btn__menu-item__hover-option[data-v-b401e76c]:hover{color:#000;background:#fff}.l-tt-save-load-btn__menu-item:hover .c-tt-save-load-btn__menu-item__hover-options[data-v-b401e76c]{visibility:visible;opacity:1;transition-delay:0s}.c-tt-save-load-btn__menu-item__hover-option--disabled[data-v-b401e76c]{opacity:.7;cursor:default}.c-tt-save-load-btn__menu-item__hover-option--disabled[data-v-b401e76c]:hover{color:#fff;background:transparent}.l-load-tree-area[data-v-46d9db85]{display:flex;flex-direction:column;width:50%;align-items:left}.l-tree-load-button-wrapper[data-v-46d9db85]{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.ttbuttons-bottom-row-hide[data-v-46d9db85]{height:0}.tt-gen-container[data-v-46d9db85]{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.checkbox-margin[data-v-46d9db85]{margin:0 .4rem}.c-game-ui--fixed[data-v-0ae8982e]{display:flex;width:100%;height:100%;position:fixed;top:0;left:0;z-index:5;justify-content:center;pointer-events:none}.t-s12 .c-game-ui--fixed[data-v-0ae8982e]{position:absolute}.c-mending-points[data-v-5d0773f0]{font-size:1.2rem;padding-bottom:.5rem}.c-reality-container[data-v-599f99ca]{display:flex;flex-direction:column;justify-content:space-between;align-items:center}.c-eternity-points[data-v-1172a401],.c-infinity-points[data-v-57d02076],.c-mending-points[data-v-599f99ca]{font-size:1.2rem;padding-bottom:.5rem}.c-prestige-info-blocks[data-v-019433b0]{display:flex;flex-direction:row;height:14rem;width:100%;color:var(--color-text)}.l-game-header__eternity[data-v-019433b0]{position:absolute;left:calc(25% - 22rem);width:22rem}.l-game-header__center[data-v-019433b0]{position:absolute;right:calc(50% - 25rem);width:50rem}.l-game-header__infinity[data-v-019433b0]{position:absolute;right:calc(25% - 22rem);width:22rem}.o-tab-btn[data-v-b30deff4]{position:relative;height:2.5rem;vertical-align:middle;padding-top:.2rem}.o-subtab-btn--active[data-v-b30deff4]{height:2.5rem;border-bottom-width:.4rem}.s-base--metro .o-subtab-btn--active[data-v-b30deff4]{border-bottom-width:.4rem}.o-tab-btn[data-v-1e3e3693]{position:relative;height:3.1rem;vertical-align:middle;margin:.2rem;margin-bottom:.7rem}.o-tab-btn--active[data-v-1e3e3693]{height:3.1rem;border-bottom-width:.5rem}.s-base--metro .o-tab-btn--active[data-v-1e3e3693]{border-bottom-width:.5rem}.c-mending-points[data-v-bf1bfb3a]{font-size:1.2rem;padding-bottom:.5rem}.o-clickable[data-v-c78c9e4e]{cursor:pointer}.c-pelle-symbol-overlay[data-v-c78c9e4e]{display:flex;width:100%;height:100%;position:absolute;top:-1.5rem;left:0;justify-content:center;align-items:center;font-size:60rem;color:var(--color-pelle--base);text-shadow:0 0 3rem;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:.8;z-index:2}.l-dimension-text-container[data-v-74ffc647]{display:flex;height:3.5rem;align-content:center;grid-column:1/5}.l-narrow-box[data-v-74ffc647]{display:flex;text-align:left;width:100%;flex-direction:column;justify-content:center;align-items:flex-start}.l-wide-box[data-v-74ffc647]{display:flex;text-align:left;width:100%;flex-direction:row;justify-content:flex-start;align-items:center}.c-dim-row__large[data-v-74ffc647]{text-align:left;margin-right:1rem}.c-dim-row__small[data-v-74ffc647]{font-size:1.2rem;margin-right:1rem}.l-glow-container[data-v-623bbdde]{display:flex;width:100%;height:100%;position:absolute;top:0;left:0;justify-content:center;align-items:center;border-radius:var(--var-border-radius,inherit)}.o-continuum[data-v-623bbdde]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-623bbdde]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.l-text-wrapper[data-v-51c836b2]{height:6rem}.l-scaling-text-wrapper[data-v-51c836b2]{height:2rem}.o-primary-btn[data-v-7a175a54]{position:relative;vertical-align:middle}.tickspeed-btn[data-v-7a175a54]{position:relative;width:30rem;height:2.5rem;padding:.25rem}.tickspeed-labels[data-v-7a175a54]{color:var(--color-text);padding:.25rem}.l-tickspeed-container[data-v-7a175a54]{display:flex;flex-direction:column;justify-content:center;align-items:center;padding-top:.5rem}.l-tickspeed-container--hidden[data-v-7a175a54]{visibility:hidden}.tickspeed-max-btn[data-v-7a175a54]{margin-left:.5rem;width:10rem;height:2.5rem;padding:.25rem}.o-non-clickable[data-v-7a175a54]{cursor:auto}.o-continuum[data-v-7a175a54]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-7a175a54]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.l-flex[data-v-77684bcf]{flex:1 0}.l-modern-buy-ad-text[data-v-e93a3710]{display:flex;flex-direction:column}.o-non-clickable[data-v-e93a3710]{cursor:auto}.o-continuum[data-v-e93a3710]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-e93a3710]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.l-button-container[data-v-38071904]{width:100px;height:30px;padding:0}.l-glow-container[data-v-3019072b]{display:flex;width:100%;height:100%;position:absolute;top:0;left:0;justify-content:center;align-items:center;border-radius:var(--var-border-radius,inherit)}.o-continuum[data-v-3019072b]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-3019072b]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.l-text-wrapper[data-v-779c0d24]{height:6rem}.l-scaling-text-wrapper[data-v-779c0d24]{height:2rem}.l-flex[data-v-50df59c7]{flex:1 0}.l-autobuyer-choice[data-v-b8f762d6]{border-radius:0;border-top:0;box-shadow:none}.l-autobuyer-choice[data-v-b8f762d6]:hover{background-color:var(--color-good)}.l-autobuyer-choice[data-v-b8f762d6]:first-child{border-radius:var(--var-border-radius,.5rem) var(--var-border-radius,.5rem) 0 0}.l-autobuyer-choice[data-v-b8f762d6]:last-child{border-radius:0 0 var(--var-border-radius,.5rem) var(--var-border-radius,.5rem)}.o-clickable[data-v-d66a5b9a]{cursor:pointer}.o-non-clickable[data-v-67bb427e]{cursor:auto}.l-top-margin[data-v-b44dddb8]{margin-top:.82rem}.l-dimboost-text-area[data-v-b44dddb8]{height:3rem}.o-clickable[data-v-0e9d22c8],.o-clickable[data-v-5d2d53ac],.o-clickable[data-v-56211cc8],.o-clickable[data-v-b44dddb8]{cursor:pointer}.c-mending-pos[data-v-2cf6e922]{z-index:4}.c-reality-pos[data-v-2cf6e922]{z-index:3}.c-eternity-pos[data-v-2cf6e922]{z-index:2}.c-infinity-pos[data-v-2cf6e922]{z-index:1}.c-slider-toggle-button[data-v-15d9af9b]{display:flex;overflow:hidden;position:relative;align-items:center;color:var(--color-automator-docs-font);background-color:#626262;border:var(--var-border-width,.2rem) solid #767676;border-radius:var(--var-border-radius,.3rem);margin:.3rem .4rem .3rem .5rem;padding:.3rem 0;cursor:pointer}.c-slider-toggle-button .fas[data-v-15d9af9b]{width:3rem;position:relative;z-index:1}.c-slider-toggle-button[data-v-15d9af9b]:before{content:"";width:3rem;height:100%;position:absolute;top:0;left:0;z-index:0;background-color:var(--color-automator-controls-inactive);border-radius:var(--var-border-radius,.3rem);transition:all .3s ease}.c-slider-toggle-button--right[data-v-15d9af9b]:before{left:3rem;background-color:var(--color-automator-controls-inactive)}.tutorial--glow[data-v-15d9af9b]:after{z-index:2}.c-automator-control-row[data-v-6ae4f435]{justify-content:space-between}.c-button-group[data-v-6ae4f435]{display:flex;flex-direction:row;align-items:center}.c-automator__status-text[data-v-6ae4f435]{font-size:1.3rem;font-weight:700;color:var(--color-reality);padding:0 .5rem}.c-automator__status-text--small[data-v-6ae4f435]{font-size:1.1rem}.c-automator__status-text--warning[data-v-6ae4f435]{color:var(--color-good-paused)}.c-automator__status-text--error[data-v-6ae4f435]{color:var(--color-bad)}.c-automator__button--active[data-v-6ae4f435]{background-color:var(--color-automator-controls-active);border-color:var(--color-reality-light)}.c-automator__button--inactive[data-v-6ae4f435]{background-color:var(--color-automator-controls-border);border-color:var(--color-reality-light)}.c-automator__button.fa-eject[data-v-6ae4f435]:before{transform:rotate(90deg)}.c-slider-toggle-button[data-v-78354292]{display:flex;overflow:hidden;position:relative;align-items:center;color:#000;background-color:#626262;border:.2rem solid #767676;border-radius:.2rem;margin:.4rem;padding:.3rem 0;cursor:pointer}.s.base--dark .c-slider-toggle-button[data-v-78354292]{background-color:#626262}.c-slider-toggle-button .fas[data-v-78354292]{width:3rem;position:relative;z-index:1}.c-slider-toggle-button[data-v-78354292]:before{content:"";width:3rem;height:100%;position:absolute;top:0;left:0;z-index:0;background-color:#fff;border-radius:.2rem;transition:all .3s ease}.c-slider-toggle-button--right[data-v-78354292]:before{left:3rem;background-color:#fff}.tutorial--glow[data-v-78354292]:after{z-index:2}.l-automator-points-list-container[data-v-3d0cd0f0]{display:flex;flex-direction:row;justify-content:space-between;margin-top:1rem;-webkit-user-select:none;user-select:none}.c-automator-points-list-col[data-v-3d0cd0f0]{position:relative;text-align:left;border:var(--var-border-width,.15rem) solid var(--color-text);border-radius:var(--var-border-radius,.5rem);padding:1rem}.l-automator-points-list-side-col[data-v-3d0cd0f0]{display:flex;flex-direction:column;width:35%;justify-content:space-between}.l-automator-points-list-center-col[data-v-3d0cd0f0]{display:flex;flex-direction:column;width:25%;justify-content:space-between}.c-automator-points-list-cell[data-v-3d0cd0f0]{overflow:hidden;width:100%;height:48%;position:relative;text-align:left;border:var(--var-border-width,.15rem) solid var(--color-text);border-radius:var(--var-border-radius,.5rem);padding:1rem}.c-automator-points-list-symbol[data-v-3d0cd0f0]{display:flex;width:100%;height:100%;position:absolute;top:0;left:0;justify-content:center;align-items:center;font-size:15rem;opacity:.2;text-shadow:0 0 2rem;pointer-events:none}.c-automator-points-list-perk-label[data-v-3d0cd0f0]{display:inline-block;width:3rem;max-width:3rem;font-weight:700}.c-automator-points-list-single-entry[data-v-3d0cd0f0]{position:relative}.c-automator-points-list-ap[data-v-3d0cd0f0]{position:absolute;right:0;opacity:.8}.c-automator-points-list-ap--large[data-v-3d0cd0f0]{position:absolute;right:1rem;font-size:1.8rem;opacity:.6}.l-header[data-v-3d0cd0f0]{font-size:2rem}.l-large-text[data-v-3d0cd0f0]{font-size:1.8rem}.l-upgrade-list[data-v-3d0cd0f0]{font-size:1.3rem}.c-overlimit[data-v-5eda76b2]{font-weight:700;color:var(--color-bad)}.c-automator-tab[data-v-5eda76b2]{width:80%;min-width:100rem}.l-automator-tab[data-v-5eda76b2]{position:relative;align-self:center;margin-top:.5rem}.c-automator-split-pane[data-v-5eda76b2]{width:100%;height:57rem;background-color:#bbb}.s-base--dark .c-automator-split-pane[data-v-5eda76b2]{width:100%;background-color:#474747}.c-automator-tab--full-screen .c-automator-split-pane[data-v-5eda76b2]{width:100%;height:100%;position:fixed;inset:0;z-index:5;margin-top:0;padding-bottom:0}.c-ad-slider__button[data-v-1c7fda29]{display:flex;width:1.6rem;height:1.6rem;justify-content:center;align-items:center;font-size:1rem;border:.1rem solid var(--color-reality-light);border-radius:var(--var-border-radius,50%);transition-duration:.2s;cursor:pointer}.c-ad-slider__button[data-v-1c7fda29]:hover{color:#000;background-color:var(--color-reality-light)}.l-ad-slider--disabled .c-ad-slider__button[data-v-1c7fda29]{opacity:.5;cursor:not-allowed}.l-black-hole-sliders[data-v-c72692d6]{width:55rem;color:var(--color-text)}.l-margin-left[data-v-c72692d6]{margin-left:.5rem}.l-lock-text[data-v-c72692d6]{font-weight:700;color:var(--color-bad);margin:.5rem 0 -.5rem}.l-auto-pause-button[data-v-49a1483d]{width:30rem}.l-pre-unlock-text[data-v-49a1483d]{display:flex;flex-direction:column;align-items:center}.c-black-hole-disabled-description[data-v-49a1483d]{font-size:2.5rem;line-height:1.5}.o-celestial-nav__clickable[data-v-689b5224]{cursor:pointer}.c-celestial-quote-history--button{align-self:center;font-family:Typewriter;font-size:1.8rem;font-weight:700;color:var(--color-text);background-color:var(--color-base);border:var(--var-border-width,.2rem) solid var(--scoped-cel-color);border-radius:var(--var-border-radius,.5rem);margin-bottom:1.5rem;padding:.5rem 1rem;transition:.2s;transition-property:color,background-color;cursor:pointer}.c-celestial-quote-history--button:hover{color:var(--color-text-inverted);background-color:var(--scoped-cel-color)}.c-effarig-relic-description[data-v-0883caed]{width:46rem}.c-enslaved-run-description-line[data-v-53895748]{margin-bottom:1rem}.l-fixed-setting[data-v-53895748]{cursor:pointer;pointer-events:none;filter:brightness(70%)}.c-vreward[data-v-096be0c2]{font-weight:700;color:var(--color-v--base)}.l-margin-top[data-v-59fdf668]{margin-top:.55rem}.l-eternity-upgrades-grid[data-v-5b2e66da]{display:flex;flex-direction:column;align-items:center;margin-top:1rem}.l-eternity-upgrades-grid__row[data-v-5b2e66da]{display:flex;flex-direction:row}.l-eternity-upgrades-grid__cell[data-v-5b2e66da]{margin:.5rem .8rem}.c-glyph-tooltip__sacrifice[data-v-0072d0ca]{font-size:1rem;font-weight:400}.l-corner-icon[data-v-6bf85a79]{position:absolute;z-index:5;color:#000;border-radius:var(--var-border-radius,.2rem);padding:.2rem}.l-new-glyph[data-v-6bf85a79]{top:-.7rem;left:-.7rem;font-size:1rem;background-color:#ff0}.l-unequipped-glyph[data-v-6bf85a79]{top:-.5rem;left:-.5rem;font-size:1.2rem;background-color:orange}.l-preview[data-v-182ff48c]{margin:.2rem}.c-equipped-glyph[data-v-1a7f95d2]{-webkit-user-drag:none}.l-glyph-equip-button[data-v-1a7f95d2]{width:100%;height:3.5rem;margin:.25rem .5rem}.l-glyph-equip-button-short[data-v-1a7f95d2]{width:100%;height:2.5rem;margin:.25rem .5rem}.l-glyph-level-and-weights-note[data-v-7287ea6a]{grid-column:1/5}.c-selected-effect-toggle-indicator--active[data-v-f7049e30]{position:absolute;top:-.1rem;right:-.1rem;font-size:1rem;color:#000;text-shadow:none;border-radius:0 var(--var-border-radius,.4rem);padding:.2rem}.l-dock[data-v-f7049e30]{position:absolute;top:50%;margin:0 4rem;transform:translateY(-50%)}.l-dock-left[data-v-f7049e30]{left:0}.l-dock-right[data-v-f7049e30]{right:0}.o-clickable[data-v-0b797f07]{cursor:pointer}.c-filter-extra-btns[data-v-0b797f07]{position:absolute;display:flex;flex-direction:row;top:0;z-index:2;font-size:1.3rem}.c-top-left[data-v-0b797f07]{right:calc(100% - 6rem);color:var(--color-reality-dark)}.c-top-right[data-v-0b797f07]{left:calc(100% - 5rem)}.l-top-left-btn[data-v-0b797f07]{cursor:pointer;border:var(--var-border-width,.2rem) solid;width:2.5rem;margin:.5rem 0 0 .5rem;padding:.5rem}.l-top-right-btn[data-v-0b797f07]{display:flex;justify-content:center;align-items:center;cursor:pointer;border:var(--var-border-width,.2rem) solid;width:2rem;height:2rem;margin:.5rem .5rem 0 0;padding:.2rem}.o-borderless[data-v-0b797f07]{border:none}.o-quick-reality[data-v-0b797f07]{background:var(--color-good)}.l-rejected-tooltip[data-v-0a4a783b]{width:90%;left:5%}.o-non-clickable[data-v-0b9f4462]{cursor:auto}.l-glyph-auto-pick-options__container[data-v-295c4c76]{display:flex;flex-direction:row;justify-content:center}.l-glyph-set-save__header[data-v-3c1a8770]{margin:-1.5rem 2rem 0}.c-glyph-set-save-container[data-v-3c1a8770]{display:flex;flex-wrap:wrap;width:100%;justify-content:center;margin:1rem auto 0}.c-glyph-single-set-save-flexbox[data-v-3c1a8770]{width:17rem}.c-glyph-set-preview-area[data-v-3c1a8770]{width:18rem}.l-suggestions[data-v-fc08f092]{font-size:1rem}.c-reality-reminder-pointer[data-v-fc08f092]{cursor:pointer}.c-sacrificed-glyphs__type-symbol[data-v-ec571984]{margin-right:.7rem}.c-single-glyph-cosmetic[data-v-09c183dd]{display:flex;justify-content:space-between;align-items:center;width:calc(100% - 1rem);height:8rem;font-size:1.2rem;border:.1rem solid #b8b8b8;border-radius:var(--var-border-radius,.5rem);padding:.5rem;margin-top:1rem;-webkit-user-select:none;user-select:none}.c-glyph-info[data-v-09c183dd]{display:flex;flex-direction:row}.c-glyph-info-section[data-v-09c183dd]{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;text-align:left;margin:1rem}.c-cosmetic-text[data-v-09c183dd]{width:18rem}.l-glyph-level-factors[data-v-4515e2a7]{margin:2rem}.o-clickable[data-v-4515e2a7]{cursor:pointer}.l-celestial-auto-restart-checkbox[data-v-4515e2a7]{display:flex;flex-direction:row;align-items:center;-webkit-user-select:none;user-select:none}.l-half-width[data-v-4515e2a7]{width:50%}.c-cap-text[data-v-6888454f]{color:var(--color-text);font-size:1.5rem}.c-info-text[data-v-6888454f]{color:var(--color-text);margin:1.5rem}.o-challenge-btn--broken[data-v-78886df5]{background:var(--color-enslaved--base);-webkit-clip-path:polygon(0 0,25% 20%,95% 0,100% 25%,80% 70%,95% 50%,100% 100%,45% 95%,65% 70%,15% 95%,0 45%,10% 50%);clip-path:polygon(0 0,25% 20%,95% 0,100% 25%,80% 70%,95% 50%,100% 100%,45% 95%,65% 70%,15% 95%,0 45%,10% 50%)}.o-challenge-btn--broken-alt[data-v-78886df5]{background:var(--color-enslaved--base);-webkit-clip-path:polygon(0 0,15% 0,25% 40%,30% 0,55% 0,85% 30%,75% 0,100% 0,90% 40%,100% 65%,90% 95%,45% 45%,70% 100%,25% 100%,5% 90%,10% 60%);clip-path:polygon(0 0,15% 0,25% 40%,30% 0,55% 0,85% 30%,75% 0,100% 0,90% 40%,100% 65%,90% 95%,45% 45%,70% 100%,25% 100%,5% 90%,10% 60%)}.o-continuum[data-v-239f89fe]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-239f89fe]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.sc-one[data-v-5a952b48]{color:red}.c-modern-dim-tooltip-container .c-modern-dim-purchase-count-tooltip[data-v-39f8097c]{position:absolute;width:20rem;top:50%;font-size:1.3rem;line-height:1.6rem;color:#fff;background:#000;border:.1rem solid var(--color-text);border-radius:var(--var-border-width,.5rem);transform:translate(calc(var(--x-pos) - 1rem),-50%);padding:.5rem;visibility:hidden}.o-continuum[data-v-39f8097c]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-39f8097c]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.sc-one[data-v-80df2ae2]{color:red}.c-infinity-upgrade-grid__column[data-v-c6393b0e]{display:flex;overflow:hidden;flex-direction:column;position:relative;border-radius:var(--var-border-radius,.3rem);margin:0 .3rem}.c-infinity-upgrade-grid__column--background[data-v-c6393b0e]{width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1;opacity:.7}.s-base--dark .c-infinity-upgrade-grid__column--background[data-v-c6393b0e]{opacity:.5}.l-infinity-upgrades-bottom-row .l-infinity-upgrade-grid__cell[data-v-c6393b0e],.l-infinity-upgrades-bottom-row .l-infinity-upgrades-tab__mult-btn[data-v-c6393b0e]{margin:.5rem 1.1rem}.o-laitela-milestone--glow[data-v-67ba0edb]{font-weight:700;color:var(--color-laitela--base);background:var(--color-laitela--accent);border-color:var(--color-laitela--accent);box-shadow:inset 0 0 .5rem .1rem,0 0 .3rem 0;-webkit-animation:a-laitela-flash 3s infinite;animation:a-laitela-flash 3s infinite}.c-laitela-singularity__cap-control[data-v-49e4cbd0]{margin:0 .3rem 1rem}.c-multiplier-entry-container[data-v-70c7468e]{display:flex;flex-direction:row;justify-content:space-between;width:100%;max-width:100rem;border:var(--var-border-width,.2rem) solid var(--color-text);padding:.5rem;font-weight:400;background-color:var(--color-base)}.c-multiplier-entry-root-container[data-v-70c7468e]{min-height:45rem}.c-stacked-bars[data-v-70c7468e]{position:relative;width:5rem;background-color:var(--color-disabled);margin-right:1.5rem}.c-bar-overlay[data-v-70c7468e]{display:flex;width:100%;height:100%;top:-5%;position:absolute;justify-content:center;align-items:center;font-size:1.5rem;pointer-events:none;-webkit-user-select:none;user-select:none;overflow:hidden;opacity:.8;z-index:1}.c-bar-highlight[data-v-70c7468e]{-webkit-animation:a-glow-bar-data-v-70c7468e 1s infinite;animation:a-glow-bar-data-v-70c7468e 1s infinite}@-webkit-keyframes a-glow-bar-data-v-70c7468e{0%{box-shadow:inset 0 0 .3rem 0}50%{box-shadow:inset 0 0 .6rem 0;filter:brightness(130%)}to{box-shadow:inset 0 0 .3rem 0}}@keyframes a-glow-bar-data-v-70c7468e{0%{box-shadow:inset 0 0 .3rem 0}50%{box-shadow:inset 0 0 .6rem 0;filter:brightness(130%)}to{box-shadow:inset 0 0 .3rem 0}}.c-info-list[data-v-70c7468e]{height:100%;width:90%;padding:.2rem}.c-display-settings[data-v-70c7468e]{display:flex;flex-direction:row;justify-content:space-between;width:8rem}.c-change-display-btn[data-v-70c7468e]{display:flex;justify-content:center;align-items:center;width:3rem;margin:0 .5rem}.c-total-mult[data-v-70c7468e]{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-left:.5rem;margin-bottom:1rem;color:var(--color-text)}.c-no-effect[data-v-70c7468e],.c-single-entry[data-v-70c7468e]{color:var(--color-text);-webkit-user-select:none;user-select:none}.c-single-entry[data-v-70c7468e]{text-align:left;padding:.2rem .5rem;margin:.2rem;border:.1rem dashed;cursor:pointer}.c-single-entry-highlight[data-v-70c7468e]{border:.1rem solid;font-weight:700;-webkit-animation:a-glow-text-data-v-70c7468e 1s infinite;animation:a-glow-text-data-v-70c7468e 1s infinite}@-webkit-keyframes a-glow-text-data-v-70c7468e{50%{background-color:var(--color-accent)}}@keyframes a-glow-text-data-v-70c7468e{50%{background-color:var(--color-accent)}}.c-dilation-entry[data-v-70c7468e]{border:.2rem solid;font-weight:700;-webkit-animation:a-glow-dilation-nerf-data-v-70c7468e 3s infinite;animation:a-glow-dilation-nerf-data-v-70c7468e 3s infinite}@-webkit-keyframes a-glow-dilation-nerf-data-v-70c7468e{50%{background-color:var(--color-bad)}}@keyframes a-glow-dilation-nerf-data-v-70c7468e{50%{background-color:var(--color-bad)}}.c-list-container[data-v-446e47ab]{position:relative;width:100rem}.l-multiplier-subtab-btn-container[data-v-446e47ab]{display:flex;flex-direction:row;justify-content:space-between;width:100rem;height:calc(4rem - var(--var-border-radius, .2rem))}.c-multiplier-subtab-btn[data-v-446e47ab]{width:100%;height:4rem;margin:0 .5rem -.1rem;z-index:1;text-align:center;font-family:Typewriter;font-size:1rem;font-weight:700;color:var(--color-text);background-color:var(--color-base);border:var(--var-border-width,.2rem) solid;border-radius:var(--var-border-radius,.5rem) var(--var-border-radius,.5rem) 0 0;cursor:pointer}.c-multiplier-subtab-btn--active[data-v-446e47ab]{border-bottom:none;padding-bottom:.2rem;cursor:default}.c-multiplier-tab-text-line[data-v-446e47ab]{color:var(--color-text);font-size:1.3rem}.c-symbol-overlay[data-v-446e47ab]{display:flex;width:100%;height:100%;top:-5%;position:absolute;justify-content:center;align-items:center;font-size:40rem;color:var(--color-text);text-shadow:0 0 3rem;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:.2;z-index:1}.o-achievement-time[data-v-4f8b4d41]{font-weight:700;color:var(--color-accent)}.o-achievement--disabled[data-v-4f8b4d41]{background-color:var(--color-pelle--base);border-color:var(--color-bad)}.o-achievement--locked[data-v-4f8b4d41]{background-color:#a3a3a3;border-color:var(--color-bad)}.t-dark-metro .o-achievement--locked[data-v-4f8b4d41]{background-color:#9e9e9e}.t-inverted-metro .o-achievement--locked[data-v-4f8b4d41],.t-metro .o-achievement--locked[data-v-4f8b4d41],.t-s8 .o-achievement--locked[data-v-4f8b4d41]{background-color:#9e9e9e;border-color:var(--color-bad)}.t-s2 .o-achievement--locked[data-v-4f8b4d41]{background-color:transparent}.t-s5 .o-achievement--locked[data-v-4f8b4d41]{background-color:#222;border-color:#000}.t-s7 .o-achievement--locked[data-v-4f8b4d41]{background-color:#555;border-color:#111}.o-achievement--waiting[data-v-4f8b4d41]{background-color:#d1d161;border-color:#acac39}.t-dark-metro .o-achievement--waiting[data-v-4f8b4d41]{background-color:#b9b946;border-color:#7d7d36}.t-inverted-metro .o-achievement--waiting[data-v-4f8b4d41],.t-metro .o-achievement--waiting[data-v-4f8b4d41],.t-s8 .o-achievement--waiting[data-v-4f8b4d41]{background-color:#ffee58;border-color:#757575}.o-achievement--blink[data-v-4f8b4d41]{-webkit-animation:a-achievement--blink-data-v-4f8b4d41 2s step-start 0s infinite;animation:a-achievement--blink-data-v-4f8b4d41 2s step-start 0s infinite}@-webkit-keyframes a-achievement--blink-data-v-4f8b4d41{50%{visibility:hidden}}@keyframes a-achievement--blink-data-v-4f8b4d41{50%{visibility:hidden}}.o-achievement__reward[data-v-4f8b4d41]{width:1.5rem;height:1.5rem;position:absolute;left:0;bottom:0;font-size:1rem;color:#000;background:#5ac467;border-top:var(--var-border-width,.2rem) solid #127a20;border-right:var(--var-border-width,.2rem) solid #127a20;border-top-right-radius:var(--var-border-radius,.8rem);border-bottom-left-radius:var(--var-border-radius,.6rem)}.o-achievement__reward--locked[data-v-4f8b4d41]{background:#a3a3a3;border-color:var(--color-bad)}.o-achievement__reward--waiting[data-v-4f8b4d41]{background:#d1d161;border-color:#acac39}.o-achievement__reward--disabled[data-v-4f8b4d41]{background:var(--color-pelle--base);border-color:var(--color-bad)}.l-toggle-button[data-v-2b2bff8a]{font-size:12px}.c-custom-save-name__input[data-v-295855b9]{text-align:center;font-family:Typewriter;font-size:1.3rem;font-weight:700;border:.1rem solid #000;border-radius:var(--var-border-radius,.3rem)}.c-row-container[data-v-38893b62]{display:flex;flex-direction:row;width:100%}.c-empty-row[data-v-38893b62]{display:block;border:.05rem solid #999;color:var(--color-text);width:100%;padding:.2rem 0;margin:-.1rem}.l-no-records[data-v-38893b62]{height:5.4rem}.l-custom-tooltip[data-v-7d84efdb]{display:inline-block;position:static}.c-main-content[data-v-7d84efdb]{position:absolute}.c-pelle-upgrade[data-v-5883e125]{display:flex;flex-direction:column;width:18.5rem;height:12rem;position:relative;justify-content:center;align-items:center;font-family:Typewriter;font-size:.95rem;font-weight:700;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--color-pelle--secondary);border-radius:var(--var-border-radius,.5rem);box-shadow:inset 0 0 1rem .1rem var(--color-pelle--secondary);margin:.6rem .3rem;padding:2rem;cursor:pointer}.c-pelle-upgrade[data-v-5883e125]:hover{box-shadow:inset 0 0 2rem .1rem var(--color-pelle--secondary);transition-duration:.3s}.c-pelle-upgrade--galaxyGenerator[data-v-5883e125]{font-weight:700;color:#000;background:linear-gradient(var(--color-pelle--secondary),var(--color-pelle--base));box-shadow:none}.c-pelle-upgrade--unavailable[data-v-5883e125]{color:#000;background:#5f5f5f;box-shadow:none;cursor:default}.c-pelle-upgrade--faded[data-v-5883e125]{opacity:.3;box-shadow:none;cursor:default}.c-pelle-upgrade--bought[data-v-5883e125]{color:#000;background:var(--color-pelle--secondary);cursor:default}.c-pelle-upgrade--bought[data-v-5883e125]:hover,.c-pelle-upgrade--faded[data-v-5883e125]:hover,.c-pelle-upgrade--galaxyGenerator[data-v-5883e125]:hover,.c-pelle-upgrade--unavailable[data-v-5883e125]:hover{box-shadow:.1rem .1rem .5rem var(--color-pelle--secondary);transition-duration:.3s}.l-pelle-upgrade-gap[data-v-5883e125]{flex-shrink:0;height:.5rem}.c-improved-effect[data-v-5883e125]{font-weight:700;color:#0b0}.c-improved-effect--unavailable[data-v-5883e125]{font-weight:700;color:var(--color-infinity)}.s-base--metro .c-pelle-upgrade--unavailable[data-v-5883e125]{background-color:#9e9e9e}.c-collapse-icon-clickable[data-v-6db9a0ba]{position:absolute;top:50%;left:1.5rem;width:3rem;align-content:center;transform:translateY(-50%);cursor:pointer}.c-generator-unlock-button[data-v-6db9a0ba]{width:25rem;height:10rem;font-family:Typewriter;font-size:2rem;font-weight:700;color:#000;background:linear-gradient(var(--color-pelle--secondary),var(--color-pelle--base));border-radius:var(--var-border-radius,.5rem);padding:2rem;cursor:pointer}.l-galaxy-generator-upgrades-container[data-v-6db9a0ba]{display:flex;flex-wrap:wrap;justify-content:center}.c-galaxies-amount[data-v-6db9a0ba]{font-size:2.5rem;font-weight:700;background:linear-gradient(var(--color-pelle--secondary),var(--color-pelle--base));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.highlight[data-v-6db9a0ba]{font-size:2rem;font-weight:700;color:var(--color-pelle--base)}.c-increase-cap[data-v-6db9a0ba]{overflow:hidden;width:100%;height:11.4rem;max-width:70rem;position:relative;font-family:Typewriter;font-size:1.1rem;color:var(--color-text);background-color:#c1eaf0;border:var(--var-border-width,.1rem) solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);box-shadow:inset 0 0 .1rem .1rem var(--color-pelle--base);margin:1rem;padding:2rem}.s-base--dark .c-increase-cap[data-v-6db9a0ba]{background-color:#004b55}.c-increase-cap[data-v-6db9a0ba]:hover{box-shadow:inset 0 0 .1rem .1rem var(--color-pelle--base),.1rem .1rem .5rem var(--color-pelle--base);transition-duration:.12s}.c-increase-cap-available[data-v-6db9a0ba]{cursor:pointer}.c-increase-cap-text[data-v-6db9a0ba]{position:relative;z-index:1}.c-increase-cap-background[data-v-6db9a0ba]{height:100%;position:absolute;top:0;left:0;z-index:0;background:linear-gradient(var(--color-text-inverted),var(--color-pelle--base));transition:width .1s}.c-big-text[data-v-6db9a0ba]{font-size:2.5rem;text-shadow:.2rem .2rem .2rem #888}.s-base--dark .c-big-text[data-v-6db9a0ba]{text-shadow:.2rem .2rem .2rem #000}.c-medium-text[data-v-6db9a0ba]{font-size:2rem;text-shadow:.2rem .2rem .2rem #888}.s-base--dark .c-medium-text[data-v-6db9a0ba]{text-shadow:.2rem .2rem .2rem #000}@-webkit-keyframes a-pelle-bar-overfill-pulse-data-v-4370f872{0%{box-shadow:0 0 .7rem 1rem rgba(237,20,61,.4)}50%{box-shadow:0 0 1.5rem 0 rgba(237,20,61,.4)}to{box-shadow:0 0 .7rem 1rem rgba(237,20,61,.4)}}@keyframes a-pelle-bar-overfill-pulse-data-v-4370f872{0%{box-shadow:0 0 .7rem 1rem rgba(237,20,61,.4)}50%{box-shadow:0 0 1.5rem 0 rgba(237,20,61,.4)}to{box-shadow:0 0 .7rem 1rem rgba(237,20,61,.4)}}@-webkit-keyframes a-pelle-bar-overfill-pulse-but-green-data-v-4370f872{0%{box-shadow:0 0 .7rem 1rem rgba(124,183,39,.533)}50%{box-shadow:0 0 1.5rem 0 rgba(124,183,39,.533)}to{box-shadow:0 0 .7rem 1rem rgba(124,183,39,.533)}}@keyframes a-pelle-bar-overfill-pulse-but-green-data-v-4370f872{0%{box-shadow:0 0 .7rem 1rem rgba(124,183,39,.533)}50%{box-shadow:0 0 1.5rem 0 rgba(124,183,39,.533)}to{box-shadow:0 0 .7rem 1rem rgba(124,183,39,.533)}}@-webkit-keyframes a-pelle-bar-filling-sweep-data-v-4370f872{0%{width:0;left:0}10%{width:2rem;left:0}90%{width:2rem;left:calc(100% - 2rem)}to{width:0;left:100%}}@keyframes a-pelle-bar-filling-sweep-data-v-4370f872{0%{width:0;left:0}10%{width:2rem;left:0}90%{width:2rem;left:calc(100% - 2rem)}to{width:0;left:100%}}@-webkit-keyframes a-pelle-bar-unfinished-milestone-flash-data-v-4370f872{0%{opacity:1}20%{opacity:1}50%{opacity:.3}80%{opacity:1}to{opacity:1}}@keyframes a-pelle-bar-unfinished-milestone-flash-data-v-4370f872{0%{opacity:1}20%{opacity:1}50%{opacity:.3}80%{opacity:1}to{opacity:1}}.c-pelle-rift-bar[data-v-4370f872]{display:flex;width:32rem;height:5rem;position:relative;justify-content:center;align-items:center;background:linear-gradient(45deg,#fff,#e6e6e6);border:var(--var-border-width,.2rem) solid var(--color-pelle--secondary);border-radius:var(--var-border-radius,.5rem);margin-bottom:1rem}.s-base--metro .c-pelle-rift-bar[data-v-4370f872]{width:31.9rem;height:4.8rem}.s-base--dark .c-pelle-rift-bar[data-v-4370f872]{background:linear-gradient(45deg,#1e1e1e,#262626)}.c-pelle-rift-bar--filling[data-v-4370f872],.c-pelle-rift-bar--idle[data-v-4370f872]{transition:box-shadow .5s;cursor:pointer}.c-pelle-rift-bar--filling[data-v-4370f872]:hover,.c-pelle-rift-bar--idle[data-v-4370f872]:hover{box-shadow:0 0 2rem var(--color-pelle--secondary)}.l-overflow-hidden[data-v-4370f872]{overflow:hidden;width:32rem;height:5rem;position:absolute;top:-.2rem;left:-.2rem;z-index:0;border:var(--var-border-width,.16rem) solid transparent;border-radius:var(--var-border-radius,.5rem)}.o-pelle-rift-bar-overlay[data-v-4370f872]{width:100%;height:100%;position:absolute;bottom:0;left:0;z-index:0;box-shadow:inset 0 0 .3rem .1rem #222}.c-pelle-rift-bar--filling .o-pelle-rift-bar-overlay[data-v-4370f872]{box-shadow:inset 0 0 .3rem .1rem var(--color-pelle--secondary)}.o-pelle-rift-bar-fill[data-v-4370f872]{height:100%;position:absolute;bottom:0;left:0;z-index:0;opacity:.7;background:var(--color-pelle--secondary)}.o-pelle-rift-bar-reducedto[data-v-4370f872]{height:100%;position:absolute;right:0;bottom:0;z-index:0;background:var(--color-pelle--base);filter:brightness(.5)}.o-pelle-rift-bar-permanent[data-v-4370f872]{width:100%;height:100%;position:absolute;bottom:0;left:0;z-index:0;opacity:.5;background:var(--color-pelle--secondary);filter:grayscale(.6)}.o-pelle-rift-bar-overfilled[data-v-4370f872]{width:100%;height:100%;position:absolute;z-index:1;opacity:.5;background:var(--color-pelle--base)}.c-pelle-rift-bar-overfill-container[data-v-4370f872]{-webkit-animation:a-pelle-bar-overfill-pulse-data-v-4370f872 1s linear infinite;animation:a-pelle-bar-overfill-pulse-data-v-4370f872 1s linear infinite}.t-s1 .c-pelle-rift-bar-overfill-container[data-v-4370f872]{-webkit-animation:a-pelle-bar-overfill-pulse-but-green-data-v-4370f872 1s linear infinite;animation:a-pelle-bar-overfill-pulse-but-green-data-v-4370f872 1s linear infinite}.o-pelle-rift-bar-active-fill[data-v-4370f872]{height:100%;position:absolute;z-index:1;opacity:.3;background:var(--color-pelle--base);-webkit-animation:a-pelle-bar-filling-sweep-data-v-4370f872 2s linear infinite;animation:a-pelle-bar-filling-sweep-data-v-4370f872 2s linear infinite}.o-pelle-rift-bar-percentage[data-v-4370f872]{z-index:2;font-size:1.5rem;color:var(--color-text);filter:drop-shadow(.1rem .1rem .1rem var(--color-pelle--base));pointer-events:none}.c-pelle-rift-bar--idle .l-overflow-hidden[data-v-4370f872],.c-pelle-rift-bar--idle .o-pelle-rift-bar-percentage[data-v-4370f872]{opacity:.6}.o-pelle-rift-bar-milestone-hover-container[data-v-4370f872]{height:100%}.o-pelle-rift-bar-milestone-line[data-v-4370f872]{width:.25rem;height:100%;position:absolute;z-index:1;background:var(--color-pelle--base);-webkit-animation:a-pelle-bar-unfinished-milestone-flash-data-v-4370f872 1s linear infinite;animation:a-pelle-bar-unfinished-milestone-flash-data-v-4370f872 1s linear infinite}.o-pelle-rift-bar-milestone-line--unlocked[data-v-4370f872]{-webkit-animation:none;animation:none}.o-pelle-rift-bar-milestone-line--disabled[data-v-4370f872]{filter:brightness(.25);-webkit-animation:none;animation:none}.o-pelle-rift-bar-milestone-hover-area{width:2rem;height:100%}.c-pelle-milestone-tooltip{width:20rem;z-index:4;font-size:1.1rem;font-weight:700;color:var(--color-text);background-color:var(--color-base);border:.1rem solid var(--color-pelle--base)}.s-base--dark .c-pelle-milestone-tooltip{background-color:#111}.c-pelle-milestone-tooltip--unlocked{color:#000;box-shadow:0 0 0 .1rem #000}.c-pelle-milestone-tooltip--unlocked,.s-base--dark .c-pelle-milestone-tooltip--unlocked{background-color:var(--color-pelle--base)}.c-pelle-strike{min-height:3.8rem;z-index:3;font-size:1.3rem;font-weight:700;color:#000;background:var(--color-pelle--base);border:var(--var-border-width,.2rem) solid #000;border-radius:var(--var-border-radius,.5rem)}.c-pelle-strike-container{width:28rem;height:5rem;z-index:3;padding:.5rem .5rem 2rem}.c-pelle-strike-header{padding:.7rem;cursor:pointer}.c-pelle-strike-dropdown{display:flex;flex-direction:column;justify-content:space-between;font-size:1.05rem;padding:.7rem}.c-pelle-single-bar[data-v-aa9407ec]{display:flex;flex-direction:column;justify-content:flex-start}.c-pelle-rift[data-v-aa9407ec]{display:flex;flex-direction:column;align-items:center;border:var(--var-border-width,.2rem) solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);box-shadow:inset 0 0 1rem .1rem rgba(237,20,61,.45),0 0 1rem .1rem rgba(237,20,61,.45);margin-top:1.2rem;padding:.5rem}.t-s1 .c-pelle-rift[data-v-aa9407ec]{box-shadow:none}.c-pelle-rift-row[data-v-aa9407ec]{display:flex;justify-content:center;align-items:center}.c-pelle-rift-column[data-v-aa9407ec]{display:flex;flex-direction:column;align-items:center}.c-pelle-rift-rift-info-container[data-v-aa9407ec]{height:5rem;font-weight:400;color:var(--color-text)}.c-pelle-rift-status[data-v-aa9407ec]{display:flex;flex-direction:column;width:28rem;align-items:center}.c-pelle-rift-name-header[data-v-aa9407ec]{font-weight:700;color:var(--color-pelle--base);padding:.2rem}.c-collapse-icon-clickable[data-v-320a9096]{position:absolute;top:50%;left:1.5rem;width:3rem;align-content:center;transform:translateY(-50%);cursor:pointer}.c-pelle-bar-container[data-v-320a9096]{display:flex;flex-direction:column;align-items:center}.o-strike-warning[data-v-320a9096]{color:var(--color-pelle--base);font-size:1.4rem}.c-remnant-factors-container{position:relative;z-index:4}.c-remnant-factors-container .l-expanding-control-box{transition:opacity .5s}.c-remnant-factors{z-index:4;font-weight:700;color:var(--color-text);background-color:var(--color-text-inverted);border:var(--var-border-width,.2rem) solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);padding:.3rem}.c-remnant-factors-text{padding:.3rem}.l-remnant-factors-row{display:flex;width:100%}.l-remnant-factors-col{display:flex;flex-grow:0;flex-shrink:0;flex-direction:column;margin-left:2rem}.l-remnant-factors-col--first{flex-grow:1;margin-left:0}.l-remnant-factors-item{height:2rem;text-align:left}.c-collapse-icon-clickable[data-v-2eb69680]{position:absolute;top:50%;left:1.5rem;width:3rem;align-content:center;transform:translateY(-50%);cursor:pointer}.o-pelle-button[data-v-2eb69680]{font-family:Typewriter;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);margin:1rem 0 .5rem;padding:1rem;transition-duration:.12s;cursor:pointer}.o-pelle-button[data-v-2eb69680]:hover{box-shadow:.1rem .1rem .3rem var(--color-pelle--base)}.c-pelle-upgrade-container[data-v-2eb69680]{display:flex;flex-wrap:wrap;max-width:110rem;justify-content:center}.c-armageddon-container[data-v-2eb69680]{display:flex;justify-content:center;align-items:flex-start;align-self:center;border:var(--var-border-width,.2rem) solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);padding:1rem}.c-armageddon-button-container[data-v-2eb69680]{width:32rem;margin-bottom:.5rem}.c-armageddon-resources-container[data-v-2eb69680]{width:41.5rem}.c-remnants-amount[data-v-2eb69680]{font-size:2rem;font-weight:700;color:var(--color-pelle--base)}.l-pelle-all-content-container[data-v-57ae2e2e],.l-pelle-celestial-tab[data-v-57ae2e2e]{display:flex;flex-direction:column;align-items:center}.l-pelle-all-content-container[data-v-57ae2e2e]{width:100%}.o-pelle-button[data-v-57ae2e2e]{font-family:Typewriter;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);margin-bottom:1rem;padding:1rem;transition-duration:.12s;cursor:pointer}.o-pelle-button[data-v-57ae2e2e]:hover{box-shadow:.1rem .1rem .3rem var(--color-pelle--base)}.o-pelle-quotes-button[data-v-57ae2e2e]{display:flex;width:7rem;height:7rem;justify-content:center;align-items:center;font-size:5rem;font-weight:900;color:var(--color-pelle--base)}.pelle-unlock-requirements[data-v-57ae2e2e]{width:50rem;padding:.5rem;font-size:2.4rem}.pelle-doom-button[data-v-57ae2e2e],.pelle-unlock-requirements[data-v-57ae2e2e]{color:var(--color-pelle--base);background:#000;border:var(--var-border-width,.2rem) solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem)}.pelle-doom-button[data-v-57ae2e2e]{width:20rem;align-self:center;font-family:Typewriter;font-size:3rem;padding:1rem;transition-duration:.4s;cursor:pointer}.pelle-doom-button[data-v-57ae2e2e]:hover{box-shadow:0 0 2rem var(--color-pelle--base)}.pelle-icon-container[data-v-57ae2e2e]{display:flex;width:15rem;height:15rem;justify-content:center;align-items:center;font-size:10rem;text-shadow:0 0 1.5rem #9b0101;background:#fff;border:var(--var-border-width,.4rem) solid var(--color-pelle--base);border-radius:50%;box-shadow:0 0 1.5rem #9b0101;margin:auto;margin-top:3rem;transition-duration:.4s}.pelle-doom-button:hover .pelle-icon-container[data-v-57ae2e2e]{color:var(--color-pelle--base);background:#000}@-webkit-keyframes a-roll-data-v-57ae2e2e{to{transform:rotateY(1turn)}}@keyframes a-roll-data-v-57ae2e2e{to{transform:rotateY(1turn)}}.pelle-icon[data-v-57ae2e2e]{-webkit-animation:a-roll-data-v-57ae2e2e 8s linear infinite;animation:a-roll-data-v-57ae2e2e 8s linear infinite}.c-icon-container[data-v-0c86ef47]{display:grid;grid-template-columns:7rem 20rem 4rem 4rem 4rem 4rem 30rem 20rem;align-items:center;font-size:1.3rem}.c-no-record[data-v-0c86ef47]{align-items:center;font-size:1.3rem;padding:.65rem;width:100%}.o-icon[data-v-0c86ef47]{font-size:2.8rem}.l-icon-on[data-v-0c86ef47]{color:var(--color-text)}.l-icon-off[data-v-0c86ef47]{color:#999}.l-milestone-title[data-v-ade67c12]{font-size:1.3rem;text-decoration:underline}.l-milestone-slow[data-v-ade67c12]{background-color:var(--color-bad)}.l-milestone-fast[data-v-ade67c12]{background-color:var(--color-good)}.l-milestone-fastest[data-v-ade67c12]{background-color:var(--color-celestials)}.c-run-page-nav[data-v-e1e0cc3c]{display:flex;flex-direction:row;justify-content:space-between;align-items:center;font-size:1.3rem;width:60rem}.c-previous-runs[data-v-e1e0cc3c]{display:flex;flex-direction:column;align-items:center;color:var(--color-text)}.c-single-run[data-v-e1e0cc3c]{display:flex;flex-direction:row;padding:.5rem;border:.1rem solid;width:100rem}.o-selected-btn[data-v-e1e0cc3c]{background-color:var(--color-good)}.c-legend[data-v-e1e0cc3c]{display:flex;flex-direction:row;justify-content:space-around;align-items:center;width:95rem}.c-legend-cell[data-v-e1e0cc3c]{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;width:30rem;font-size:1.5rem}.o-box[data-v-e1e0cc3c]{display:grid;width:2rem;height:2rem;margin:.3rem;border:var(--var-border-width,.2rem) solid var(--color-text);border-radius:var(--var-border-radius,.5rem)}.l-milestone-none[data-v-e1e0cc3c]{background-color:var(--color-base)}.l-milestone-slow[data-v-e1e0cc3c]{background-color:var(--color-bad)}.l-milestone-fast[data-v-e1e0cc3c]{background-color:var(--color-good)}.l-milestone-fastest[data-v-e1e0cc3c]{background-color:var(--color-celestials)}.c-ra-upgrade-icon[data-v-0a2bf9d3]{font-weight:700}.l-ra-pet-milestones[data-v-60840c17]{display:flex;justify-content:center}.c-ra-pet-upgrade-memory[data-v-60840c17]{border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.c-ra-pet-upgrade-chunk[data-v-60840c17]{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0}.l-ra-pet-postcompletion-spacer[data-v-60840c17]{margin-bottom:.8rem}.c-ra-upgrade[data-v-20e5f9b8]{display:flex;flex-direction:column;width:18.5rem;height:12rem;position:relative;justify-content:center;align-items:center;font-family:Typewriter;font-size:.95rem;font-weight:700;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--cel-color);border-radius:var(--var-border-radius,.5rem);box-shadow:inset 0 0 1rem .1rem var(--cel-color);margin:.6rem .3rem;padding:2rem;cursor:pointer}.c-ra-upgrade[data-v-20e5f9b8]:hover{box-shadow:inset 0 0 2rem .1rem var(--cel-color);transition-duration:.3s}.c-ra-upgrade--unavailable[data-v-20e5f9b8]{color:#000;background:#5f5f5f;box-shadow:none;cursor:not-allowed}.c-ra-upgrade--bought[data-v-20e5f9b8]{color:#000;background:var(--cel-color);cursor:default}.c-ra-upgrade-container[data-v-1e412a9e]{display:flex;flex-wrap:wrap;max-width:140rem;justify-content:center}.l-ra-panel-container[data-v-1e412a9e]{width:140rem;border:var(--var-border-width,.2rem) solid var(--color-ra--base);border-radius:var(--var-border-radius,.5rem);margin:1rem;padding:1rem;-webkit-user-select:none;user-select:none}.line[data-v-1e412a9e]{width:100%;height:.1rem;border:0;border-top:.1rem solid var(--color-ra--base);margin:.5rem 0;padding:0}.c-reality-upgrade-infotext[data-v-5ab3ca65]{color:var(--color-text);margin:-1rem 0 1.5rem}.max-accent[data-v-3fdc215a]{color:var(--color-accent);text-shadow:0 0 .2rem var(--color-reality-dark);cursor:default}.modified-cap[data-v-3fdc215a]{margin:-.8rem 0 .8rem;font-weight:700}.vld-overlay,.vld-shown{overflow:hidden}.vld-overlay{bottom:0;left:0;position:absolute;right:0;top:0;align-items:center;display:none;justify-content:center;z-index:9999}.vld-overlay.is-active{display:flex}.vld-overlay.is-full-page{z-index:9999;position:fixed}.vld-overlay .vld-background{bottom:0;left:0;position:absolute;right:0;top:0;background:#fff;opacity:.5}.vld-overlay .vld-icon,.vld-parent{position:relative}.c-shop-button-container[data-v-27835b02]{display:flex;flex-direction:column;width:30rem;height:18rem;justify-content:space-between;color:#fff;background:#3c3c3c;border:var(--var-border-width,.2rem) solid #1f7d1f;border-radius:var(--var-border-radius,.5rem);margin:.5rem;padding:1rem}.o-shop-button-button[data-v-27835b02]{display:flex;align-items:center;font-family:Typewriter;background:#40e0d0;border:none;border-radius:var(--var-border-radius,.5rem);margin:0 auto;padding:.5rem 2rem;cursor:pointer}.o-shop-button-button--disabled[data-v-27835b02]{background:#969696;cursor:default}.o-shop-button-button__img[data-v-27835b02]{height:40px;margin-left:1rem}.o-shop-button-multiplier[data-v-27835b02]{display:block;font-size:1.5rem;font-weight:700;margin:.5rem 0}.o-shop-button-multiplier--disabled[data-v-27835b02]{color:red;text-decoration:line-through}.o-shop-button-locked-text[data-v-27835b02]{display:block;font-size:1.2rem;font-weight:700;color:var(--color-bad)}.shop[data-v-21aa9272]{display:flex;flex-direction:column;justify-content:center;align-items:center;color:var(--color-text)}.c-shop-disclaimer[data-v-21aa9272]{width:80%;max-width:100rem;font-size:1.8rem;font-weight:700;color:#000;background:var(--color-bad);border:var(--var-border-width,.2rem) solid #000;border-radius:var(--var-border-radius,1rem);margin-top:.8rem}.t-s1 .c-shop-disclaimer[data-v-21aa9272],.t-s6 .c-shop-disclaimer[data-v-21aa9272],.t-s10 .c-shop-disclaimer[data-v-21aa9272]{color:var(--color-bad);background:#000;border-color:var(--color-bad)}.c-login-info[data-v-21aa9272]{font-size:1.5rem}.c-shop-header[data-v-21aa9272]{display:flex;justify-content:center;align-items:center;font-size:2rem;margin:1rem 0}.c-shop-header__img[data-v-21aa9272]{height:40px;margin:0 1rem}.o-shop-button-button[data-v-21aa9272]{display:flex;align-items:center;font-family:Typewriter;background:#40e0d0;border:none;border-radius:var(--var-border-radius,.5rem);margin:auto;margin-top:1rem;padding:.5rem 2rem;cursor:pointer}.o-shop-button-button--disabled[data-v-21aa9272]{background:#969696;cursor:default}.l-shop-buttons-container[data-v-21aa9272]{display:flex;justify-content:center;flex-wrap:wrap;width:93rem;margin:auto}.c-shop-header .o-shop-button-button[data-v-21aa9272]{margin:0}.c-matter-scale-container[data-v-5e391bac]{height:5rem}.c-stats-tab-general[data-v-5e391bac]{color:var(--color-text)}.c-stats-tab-title[data-v-5e391bac]{font-size:2rem;font-weight:700}.c-stats-tab-subheader[data-v-5e391bac]{height:15rem}.c-stats-tab-infinity[data-v-5e391bac]{color:var(--color-infinity)}.c-stats-tab-eternity[data-v-5e391bac]{color:var(--color-eternity)}.c-stats-tab-reality[data-v-5e391bac]{color:var(--color-reality)}.c-stats-tab-doomed[data-v-5e391bac]{color:var(--color-pelle--base)}.c-stats-tab-mending[data-v-5e391bac]{color:var(--color-mending)}.o-teresa-shop-button--pelle-disabled[data-v-1ce43eb4]{text-decoration:line-through;cursor:auto}.c-disabled-pour[data-v-462ad4de]{opacity:.8;pointer-events:none}.o-dilation-upgrade[data-v-546a6b9c]{width:19rem;height:10rem;font-family:Typewriter,serif;font-size:1.05rem;font-weight:700;background:#000;border:.1rem solid;border-radius:var(--var-border-radius,.4rem);transition-duration:.2s}.o-dilation-upgrade--available[data-v-546a6b9c]{color:var(--color-dilation);border-color:var(--color-dilation);-webkit-animation:a-dilation-btn-glow 10s infinite;animation:a-dilation-btn-glow 10s infinite;cursor:pointer}.o-dilation-upgrade--rebuyable.o-dilation-upgrade--available[data-v-546a6b9c]{color:#64ddad;border-color:#64ddad}.o-dilation-upgrade--available[data-v-546a6b9c]:hover{background-color:#fff}.o-dilation-upgrade--bought[data-v-546a6b9c],.o-dilation-upgrade--capped[data-v-546a6b9c]{color:#000;background-color:var(--color-dilation);border-color:#000}.o-dilation-upgrade--useless[data-v-546a6b9c]{color:#000;background-color:var(--color-pelle--base);filter:grayscale(50%)}.o-dilation-upgrade--unavailable[data-v-546a6b9c]{color:#181818;background-color:#5f5f5f;border-color:#3e8a0f}.o-dilation-upgrade--rebuyable.o-dilation-upgrade--unavailable[data-v-546a6b9c]{border-color:#64ddad}.o-dilation-upgrade--unavailable[data-v-546a6b9c]:hover{color:#1d1d1d;background-color:#600}.o-dilation-upgrade__description--small-text[data-v-546a6b9c]{font-size:.95rem}.s-base--metro .o-dilation-upgrade--unavailable[data-v-546a6b9c],.t-s1 .o-dilation-upgrade--unavailable[data-v-546a6b9c]{color:#000;background-color:#9e9e9e;border:none;box-shadow:.1rem .1rem .1rem 0 #000}.s-base--metro .o-dilation-upgrade--unavailable[data-v-546a6b9c]:hover{background-color:#ef5350}.t-s1 .o-dilation-upgrade--unavailable[data-v-546a6b9c]:hover{background-color:#d72621}.t-dark .o-dilation-upgrade--available[data-v-546a6b9c]:hover,.t-s6 .o-dilation-upgrade--available[data-v-546a6b9c]:hover,.t-s10 .o-dilation-upgrade--available[data-v-546a6b9c]:hover{color:var(--color-dilation);background-color:#fff}.t-dark .o-dilation-upgrade--rebuyable.o-dilation-upgrade--available[data-v-546a6b9c]:hover,.t-s6 .o-dilation-upgrade--rebuyable.o-dilation-upgrade--available[data-v-546a6b9c]:hover,.t-s10 .o-dilation-upgrade--rebuyable.o-dilation-upgrade--available[data-v-546a6b9c]:hover{color:#64ddad}.t-dark .o-dilation-upgrade--bought[data-v-546a6b9c],.t-dark .o-dilation-upgrade--capped[data-v-546a6b9c]{background-color:var(--color-dilation)}.t-s6 .o-dilation-upgrade--unavailable[data-v-546a6b9c],.t-s10 .o-dilation-upgrade--unavailable[data-v-546a6b9c]{color:gray;background-color:#000}.t-dark .o-dilation-upgrade--unavailable[data-v-546a6b9c]{color:#000;background-color:#23292a}.t-dark .o-dilation-upgrade--unavailable[data-v-546a6b9c]:hover,.t-s6 .o-dilation-upgrade--unavailable[data-v-546a6b9c]:hover,.t-s10 .o-dilation-upgrade--unavailable[data-v-546a6b9c]:hover{color:#000;background-color:var(--color-bad);border-color:var(--color-bad)}.t-s4 .o-dilation-upgrade--available[data-v-546a6b9c]{-webkit-animation:a-dilation-btn-glow--cancer 10s infinite;animation:a-dilation-btn-glow--cancer 10s infinite}.t-s6 .o-dilation-upgrade--bought[data-v-546a6b9c],.t-s6 .o-dilation-upgrade--capped[data-v-546a6b9c],.t-s10 .o-dilation-upgrade--bought[data-v-546a6b9c],.t-s10 .o-dilation-upgrade--capped[data-v-546a6b9c]{background:var(--color-dilation)}.max-accent[data-v-d9200254]{color:var(--color-dilation);font-size:1.5rem;text-shadow:0 0 .2rem var(--color-reality-dark);cursor:default}.l-dilation-upgrades-grid[data-v-d9200254]{display:flex;flex-direction:column}.l-dilation-upgrades-grid__row[data-v-d9200254]{display:flex;flex-direction:row;justify-content:center}.l-dilation-upgrades-grid__cell[data-v-d9200254]{margin:1.2rem 1.5rem}.sc-two[data-v-d9200254]{color:#ffa000}.o-continuum[data-v-bb681570]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-bb681570]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.c-modern-dim-tooltip-container .c-modern-dim-purchase-count-tooltip[data-v-1b5405e2]{position:absolute;width:20rem;top:50%;font-size:1.3rem;line-height:1.6rem;color:#fff;background:#000;border:.1rem solid var(--color-text);border-radius:var(--var-border-width,.5rem);transform:translate(calc(var(--x-pos) - 1rem),-50%);padding:.5rem;visibility:hidden}.o-continuum[data-v-1b5405e2]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-1b5405e2]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.o-v-start-text[data-v-0d267545]{font-size:1.5rem}.l-placeholder-invisible[data-v-0d267545]{opacity:0}.l-v-goal-reduction-spacer[data-v-0d267545]{height:.8rem}.l-cursed-glyph-creation[data-v-0d267545]{background:var(--color-effarig--base)}.l-selected-tab[data-v-0d267545]{color:var(--color-v--base)}.c-modal__header[data-v-0ec9a581]{margin-bottom:.5rem}.c-remains-amount[data-v-3bb497cc]{font-size:1.5rem;color:var(--color-text)}.l-mending-upgrade-grid[data-v-3bb497cc]{display:flex;flex-direction:column}.l-mending-upgrade-grid__row[data-v-3bb497cc]{display:flex;flex-direction:row}.l-mending-upgrade-grid__cell[data-v-3bb497cc]{margin:.5rem .8rem}.c-remains-amount__accent[data-v-3bb497cc]{font-size:2rem;color:var(--color-mending)}.c-mending-upgrade-infotext[data-v-3bb497cc]{font-size:1rem;color:var(--color-text);margin:-1rem 0 1.5rem}.o-mending-milestone__reward[data-v-2dc5a23e]{width:50rem;height:8rem;font-family:Typewriter,serif;font-size:1.2rem;font-weight:700;color:#000;border:.1rem solid var(--color-mending);border-radius:var(--var-border-radius,.4rem);transition-duration:.2s}.l-warp-all-content-container[data-v-6d9af666],.l-warp-tab[data-v-6d9af666]{display:flex;flex-direction:column;align-items:center}.l-warp-all-content-container[data-v-6d9af666]{width:100%}.o-warp-button[data-v-6d9af666]{font-family:Typewriter;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);margin-bottom:1rem;padding:1rem;transition-duration:.12s;cursor:pointer}.o-warp-button[data-v-6d9af666]:hover{box-shadow:.1rem .1rem .3rem var(--color-pelle--base)}.o-warp-quotes-button[data-v-6d9af666]{display:flex;width:7rem;height:7rem;justify-content:center;align-items:center;font-size:5rem;font-weight:900;color:var(--color-pelle--base)}.warp-unlock-requirements[data-v-6d9af666]{width:50rem;padding:.5rem;font-size:2.4rem}.warp-doom-button[data-v-6d9af666],.warp-unlock-requirements[data-v-6d9af666]{color:var(--color-pelle--base);background:#000;border:var(--var-border-width,.2rem) solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem)}.warp-doom-button[data-v-6d9af666]{width:20rem;align-self:center;font-family:Typewriter;font-size:3rem;padding:1rem;transition-duration:.4s;cursor:pointer}.warp-doom-button[data-v-6d9af666]:hover{box-shadow:0 0 2rem var(--color-pelle--base)}.warp-icon-container[data-v-6d9af666]{display:flex;width:15rem;height:15rem;justify-content:center;align-items:center;font-size:10rem;text-shadow:0 0 1.5rem #9b0101;background:#fff;border:var(--var-border-width,.4rem) solid var(--color-pelle--base);border-radius:50%;box-shadow:0 0 1.5rem #9b0101;margin:auto;margin-top:3rem;transition-duration:.4s}.warp-doom-button:hover .pelle-icon-container[data-v-6d9af666]{color:var(--color-pelle--base);background:#000}@-webkit-keyframes a-roll-data-v-6d9af666{to{transform:rotateY(1turn)}}@keyframes a-roll-data-v-6d9af666{to{transform:rotateY(1turn)}}.warp-icon[data-v-6d9af666]{-webkit-animation:a-roll-data-v-6d9af666 8s linear infinite;animation:a-roll-data-v-6d9af666 8s linear infinite}.c-fragments-amount__accent[data-v-78881c79]{font-size:2rem;color:var(--color-pelle--base)}.o-pelle-button[data-v-78881c79]{font-family:Typewriter;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);margin-bottom:1rem;padding:1rem;transition-duration:.12s;cursor:pointer}.o-pelle-button[data-v-78881c79]:hover{box-shadow:.1rem .1rem .3rem var(--color-pelle--base)}.o-continuum[data-v-4c8aa071]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-4c8aa071]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.c-modern-dim-tooltip-container .c-modern-dim-purchase-count-tooltip[data-v-32da9d66]{position:absolute;width:20rem;top:50%;font-size:1.3rem;line-height:1.6rem;color:#fff;background:#000;border:.1rem solid var(--color-text);border-radius:var(--var-border-width,.5rem);transform:translate(calc(var(--x-pos) - 1rem),-50%);padding:.5rem;visibility:hidden}.o-continuum[data-v-32da9d66]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-32da9d66]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.c-s12-desktop-icons-container[data-v-6bd6fa88]{--icon-font-size:1.1rem;--icon-line-height:1.1;--icon-size:4rem;--icon-margin:0.2rem;--icon-inner-padding:0.3rem;--total-icon-height:calc(var(--icon-size) + var(--icon-margin)*2 + var(--icon-font-size)*var(--icon-line-height)*2 + var(--icon-inner-padding)*2);display:inline-flex;flex-direction:column;flex-wrap:wrap;height:calc(100% - var(--s12-taskbar-height));position:absolute;top:0;left:0;align-items:flex-start;-webkit-user-select:none;user-select:none}.c-s12-desktop-icon[data-v-6bd6fa88]{overflow:hidden;width:7rem;height:var(--total-icon-height);position:relative;z-index:0;margin:.2rem}.c-s12-desktop-icon__inner[data-v-6bd6fa88]{display:flex;overflow:hidden;flex-direction:column;width:100%;position:relative;align-items:center;padding:var(--icon-inner-padding);cursor:pointer}.c-s12-desktop-icon--selected[data-v-6bd6fa88]{overflow:visible;z-index:1}.c-s12-desktop-icon__inner[data-v-6bd6fa88]:before{content:"";position:absolute;inset:0;z-index:-1;opacity:0;background-color:hsla(0,0%,75%,.3);background-image:var(--s12-background-gradient);border:.1rem solid #fff;border-radius:.5rem;transition:opacity .2s}.c-s12-desktop-icon:hover .c-s12-desktop-icon__inner[data-v-6bd6fa88]:before{opacity:.5}.c-s12-desktop-icon.c-s12-desktop-icon--selected .c-s12-desktop-icon__inner[data-v-6bd6fa88]:before{opacity:1}.c-s12-desktop-icon__img[data-v-6bd6fa88]{height:var(--icon-size);margin:var(--icon-margin)}.c-s12-desktop-icon__text[data-v-6bd6fa88]{overflow:hidden;width:100%;font-family:Segoe UI,Typewriter;font-size:var(--icon-font-size);font-weight:400;line-height:var(--icon-line-height);color:#fff;text-shadow:0 0 .3rem var(--s12-border-color)}#page[data-v-1ee338fc]{width:100%;height:100%;position:absolute;top:0;z-index:1;background-color:hsla(0,0%,100%,.5);background-image:var(--s12-background-gradient);margin-top:0;padding:2.4rem 1rem 1rem;-webkit-backdrop-filter:blur(1rem);backdrop-filter:blur(1rem)}.c-s12-window__outer[data-v-1ee338fc]{transition:opacity .3s,transform .4s,visibility .3s;transform-style:preserve-3d}.c-s12-window__outer--minimised[data-v-1ee338fc]{visibility:hidden;opacity:0;transform:rotateX(90deg) scale(.7);pointer-events:none}.c-s12-window__inner[data-v-1ee338fc]{overflow:hidden;width:100%;height:100%;position:relative;z-index:0;background-color:#111014;border:.15rem solid var(--s12-border-color);border-radius:.15rem;box-shadow:0 0 .4rem .2rem hsla(0,0%,100%,.5)}.c-classic.c-s12-window__inner[data-v-1ee338fc]{background-color:#fff}.c-s12-window__content-container[data-v-1ee338fc]{overflow-x:hidden;overflow-y:auto;width:100%;height:100%;position:relative;scrollbar-gutter:stable both-edges}.c-modal__title[data-v-1ee338fc]{font-family:Segoe UI,Typewriter;color:#000}.c-s12-subtabs[data-v-a1a81406]{display:flex;visibility:hidden;position:absolute;bottom:calc(var(--s12-taskbar-height) + .5rem);z-index:6;opacity:0;background-color:hsla(0,0%,47%,.7);background-image:var(--s12-background-gradient);border:.15rem solid var(--s12-border-color);border-radius:.5rem;box-shadow:0 0 1rem .2rem var(--s12-border-color),inset 0 0 .4rem .1rem hsla(0,0%,100%,.7);transform:translate(-50%,20%);transition:transform .2s,opacity .2s,visibility .2s;pointer-events:none;-webkit-backdrop-filter:blur(.3rem);backdrop-filter:blur(.3rem)}.c-s12-subtabs--compact[data-v-a1a81406]{flex-direction:column;padding:.5rem;padding-bottom:0}.c-s12-subtabs--show[data-v-a1a81406]{visibility:visible;opacity:1;transform:translate(-50%);pointer-events:auto}.c-s12-subtab-btn[data-v-a1a81406]{display:flex;flex-direction:column;width:17rem;height:12rem;position:relative;border:.1rem solid transparent;border-radius:.5rem;margin:.5rem;padding:.3rem;transition:background-color .5s,border .5s;-webkit-user-select:none;user-select:none;cursor:pointer}.c-s12-subtabs--compact .c-s12-subtab-btn[data-v-a1a81406]{height:auto;margin:0;margin-bottom:.5rem;padding:.6rem}.c-s12-subtab-btn[data-v-a1a81406]:hover{background-color:hsla(0,0%,100%,.1);border:.1rem solid hsla(0,0%,100%,.5)}.c-s12-subtab-btn--active[data-v-a1a81406]{background-color:hsla(0,0%,100%,.4);border:.1rem solid #fff}.c-s12-subtab-btn--active[data-v-a1a81406]:hover{background-color:hsla(0,0%,100%,.6)}.c-s12-subtab-btn__text[data-v-a1a81406]{display:flex;align-self:flex-start;color:#fff;text-shadow:0 0 .5rem var(--s12-border-color)}.c-s12-subtab-btn__symbol[data-v-a1a81406]{display:flex;height:100%;justify-content:center;align-items:center;align-self:center;font-size:6rem;color:#fff;text-shadow:0 0 .5rem var(--s12-border-color)}.c-s12-subtab-btn__symbol--small[data-v-a1a81406]{width:1.4rem;margin-right:.5rem}.c-taskbar-icon[data-v-6cc71a97]{display:flex;width:6rem;height:100%;position:relative;z-index:2;justify-content:center;align-items:center;background-image:radial-gradient(at 5% -35%,#fff,transparent 50%);border:.15rem solid var(--s12-border-color);border-top:none;border-radius:.3rem;box-shadow:inset 0 0 .3rem .1rem hsla(0,0%,100%,.8);margin-left:.4rem;transition:background-color .5s;cursor:pointer}.c-taskbar-icon[data-v-6cc71a97]:hover{background-color:hsla(0,0%,100%,.35)}.c-taskbar-icon--active[data-v-6cc71a97]{background-color:hsla(0,0%,100%,.5)}.c-taskbar-icon--active[data-v-6cc71a97]:hover{background-color:hsla(0,0%,94%,.9)}.c-taskbar-icon__image[data-v-6cc71a97]{height:80%;border-radius:1rem}.c-taskbar[data-v-98c9ea58]{display:flex;width:100%;height:4.5rem;background-color:hsla(0,0%,47%,.15);background-image:repeating-linear-gradient(50deg,hsla(0,0%,67%,.1),hsla(0,0%,67%,.1) 2rem,hsla(0,0%,100%,.1) 4rem,hsla(0,0%,100%,.1) 5rem,hsla(0,0%,67%,.1) 6rem,hsla(0,0%,67%,.1) 8rem),linear-gradient(90deg,rgba(40,40,40,.4),transparent 10%,transparent 70%,rgba(0,0,0,.4) 90%);border-top:.15rem solid var(--s12-border-color);-webkit-backdrop-filter:blur(.3rem);backdrop-filter:blur(.3rem)}.c-taskbar[data-v-98c9ea58]:before{content:"";display:inline-block;width:110%;height:110%;position:absolute;box-shadow:inset 0 0 .3rem .1rem hsla(0,0%,100%,.5);margin-right:-5%;margin-left:-5%;pointer-events:none}.c-start-icon[data-v-98c9ea58]{height:100%;margin:0 2rem 0 1rem;cursor:pointer}.c-s12-show-desktop[data-v-98c9ea58]{width:1rem;height:100%;position:absolute;right:0;border:.15rem solid var(--s12-border-color);border-style:none none solid solid;border-radius:.2rem 0 0 .2rem;cursor:pointer}.c-s12-show-desktop[data-v-98c9ea58]:before{content:"";display:block;width:200%;height:100%;border-radius:inherit;box-shadow:inset 0 0 .5rem .1rem hsla(0,0%,100%,.5);transition:box-shadow .4s}.c-s12-show-desktop[data-v-98c9ea58]:hover:before{box-shadow:inset 0 0 .5rem .1rem #fff}.c-game-ui--fixed[data-v-b165c672]{display:flex;width:100%;height:100%;position:fixed;top:0;left:0;z-index:5;justify-content:center;pointer-events:none}.ui-wrapper[data-v-16fa83ba]{display:flex;position:relative;justify-content:center}.c-modal__header[data-v-02f37e5f]{margin-bottom:.5rem}.c-modal-celestial__run-effects[data-v-5652f348]{display:inline-block;max-width:45rem;text-align:left}.c-modal-celestial__run-effects__line[data-v-5652f348]{display:flex;margin-bottom:.5rem}.reality-description[data-v-5652f348]{padding:0 2rem}.o-warning[data-v-4e13ca48]{color:var(--color-infinity)}.c-has-rewards[data-v-5e466ec0]{font-weight:700;font-size:1.5rem;color:var(--color-bad)}.c-blobflake-slider[data-v-13fcb5d4]{padding:1.2rem}.l-wrapper[data-v-5c020f42]{width:75rem}.c-bordered-entry[data-v-4270332c]{display:flex;flex-direction:column;align-items:center;font-size:1.1rem;border:var(--var-border-width,.2rem) solid;border-radius:var(--var-border-radius,.4rem);padding:.5rem .3rem;margin:.3rem}.c-fixed-height[data-v-4270332c]{height:4rem}.c-info[data-v-2cffffa6]{width:60rem;overflow-x:hidden;padding-right:1rem}.c-info[data-v-2cffffa6]::-webkit-scrollbar{width:1rem}.c-info[data-v-2cffffa6]::-webkit-scrollbar-thumb{border:none}.s-base--metro .c-info[data-v-2cffffa6]::-webkit-scrollbar-thumb{border-radius:0}.c-backup-file-ops[data-v-2cffffa6]{margin:.5rem}.o-btn-file-ops[data-v-2cffffa6]{margin:0 .5rem}.c-entry-container[data-v-2cffffa6]{display:flex;flex-direction:row;flex-wrap:wrap}.l-backup-entry[data-v-2cffffa6]{width:calc(50% - .6rem);height:calc(25% - .6rem)}.c-center[data-v-eb4324ba]{display:flex;flex-direction:column;width:38rem;align-items:center}.t-s12 .c-center[data-v-eb4324ba]{width:50rem;text-align:center}.c-dropdown-btn[data-v-eb4324ba]{width:24rem;margin:.3rem;padding:0}.c-dropdown-header[data-v-eb4324ba]{height:5rem;padding:.5rem;-webkit-user-select:none;user-select:none}.o-single-symbol[data-v-eb4324ba]{font-size:3rem}.o-single-glyph[data-v-eb4324ba]{padding:.5rem}.c-all-options[data-v-1aab07c3]{display:flex;flex-direction:row}.c-all-options[data-v-1aab07c3],.c-no-options[data-v-1aab07c3]{width:49rem;margin:.5rem;border:.1rem solid var(--color-text);border-radius:var(--var-border-radius,.5rem)}.c-extra-options[data-v-1aab07c3]{position:relative;display:flex;flex-direction:row;width:100%;height:100%;overflow:hidden;border-width:.1rem;border-left-style:dashed;border-color:var(--color-text)}.c-sliding-window[data-v-1aab07c3]{display:flex;flex-direction:row}.o-option--inactive[data-v-1aab07c3]{opacity:.3}.o-arrow[data-v-1aab07c3]{position:absolute;display:flex;align-items:center;height:100%;padding:.3rem;z-index:1;background:var(--color-good);color:var(--color-text);transition-duration:.3s;cursor:pointer;-webkit-user-select:none;user-select:none}.o-arrow--left[data-v-1aab07c3]{left:0}.o-arrow--right[data-v-1aab07c3]{right:0;border-radius:0 var(--var-border-radius,.5rem) var(--var-border-radius,.5rem) 0}.o-arrow--disabled[data-v-1aab07c3]{opacity:.3;cursor:default}.o-default-option[data-v-1aab07c3]{align-self:normal;font-size:1.5rem;color:var(--color-text)}.o-clickable[data-v-1aab07c3]{cursor:pointer}.c-single-set[data-v-1aab07c3]{display:flex;flex-direction:column}.o-symbol[data-v-1aab07c3]{width:2.5rem;text-align:center;font-size:1.6rem;-webkit-user-select:none;user-select:none}.o-color[data-v-1aab07c3]{display:flex;justify-content:center;align-items:center;width:1.5rem;height:1.5rem;margin:.5rem;font-weight:700;-webkit-user-select:none;user-select:none}.c-glyph-customization-entry[data-v-376fede0]{display:flex;flex-direction:column}.c-name[data-v-376fede0]{width:100%;margin:.5rem 0 0}.c-glyph-customization-group[data-v-800cf4e0]{width:100%;margin-top:.5rem;text-align:left}.c-type-selection[data-v-800cf4e0]{display:flex;flex-direction:row;justify-content:space-around;align-items:center;margin-top:.5rem}.o-disabled-cosmetics[data-v-800cf4e0]{opacity:.5}.c-single-type[data-v-800cf4e0]{padding:.5rem}.c-type-current[data-v-800cf4e0]{border:.1rem solid var(--color-text)}.c-type-other[data-v-800cf4e0]{padding:.6rem}.c-dropdown-btn[data-v-28f556e6]{width:24rem;margin:.3rem;padding:0}.c-dropdown-header[data-v-28f556e6]{padding:.9rem;height:6.5rem;-webkit-user-select:none;user-select:none}.l-hide-modal-button[data-v-1134982d]{display:flex;flex-flow:row;align-items:center}.l-hide-modal-button__subtab-icon[data-v-1134982d]{font-size:1.5rem;width:2rem;margin:.2rem}.l-hide-modal-button__subtab-name[data-v-1134982d]{width:8.2rem}.c-indicator-icon[data-v-c824015c]{width:2rem;position:absolute;top:0;right:0;color:#000;text-shadow:none;padding:.2rem}.c-hidden-tabs-background__visible[data-v-c824015c]{background-color:var(--color-good)}.c-hidden-tabs-background__hidden[data-v-c824015c]{background-color:var(--color-gh-purple)}.c-hidden-tabs-background__always-visible[data-v-c824015c]{background-color:var(--color-disabled);cursor:default}.l-wrapper[data-v-2d376db4]{width:62rem}.t-s12 .l-wrapper[data-v-2d376db4]{width:65rem}.l-modal-hotkeys__column[data-v-0543ac5f]{display:flex;flex-direction:column;width:28rem}.l-modal-hotkeys__column--right[data-v-0543ac5f]{margin-left:1rem}.c-modal-hotkeys[data-v-0543ac5f]{font-size:1.25rem}.l-modal-hotkeys[data-v-0543ac5f]{display:flex;flex-direction:row}.l-modal-hotkeys-row[data-v-0543ac5f]{display:flex;flex-direction:row;line-height:1.6rem;padding-bottom:.3rem}.c-modal-hotkeys-row__name[data-v-0543ac5f]{text-align:left}.l-modal-hotkeys-row__name[data-v-0543ac5f]{flex:1 1 auto}.c-modal-hotkeys__shift-description[data-v-0543ac5f]{text-align:left;font-size:1rem}.c-special-type[data-v-4c765a29]{display:flex;flex-direction:row;left:0;align-items:center}.o-active-type[data-v-4c765a29]{background-color:var(--color-good)}.c-reality-pos[data-v-a32a7b20]{z-index:3}.c-eternity-pos[data-v-a32a7b20]{z-index:2}.c-infinity-pos[data-v-a32a7b20]{z-index:1}.c-modal-message__text-fit[data-v-a32a7b20]{width:auto}.o-load-preset-button-margin[data-v-1c623aa6]{margin-right:.3rem}.c-modal-away-progress__antimatter-galaxies[data-v-2d859d46],.c-modal-away-progress__antimatter[data-v-2d859d46],.c-modal-away-progress__dimension-boosts[data-v-2d859d46]{color:var(--color-antimatter)}.t-dark .c-modal-away-progress__antimatter[data-v-2d859d46],.t-s6 .c-modal-away-progress__antimatter[data-v-2d859d46],.t-s10 .c-modal-away-progress__antimatter[data-v-2d859d46]{-webkit-animation:a-game-header__antimatter--glow 25s infinite;animation:a-game-header__antimatter--glow 25s infinite}.c-modal-away-progress__infinities[data-v-2d859d46],.c-modal-away-progress__infinity-points[data-v-2d859d46]{color:var(--color-infinity)}.c-modal-away-progress__eternities[data-v-2d859d46],.c-modal-away-progress__eternity-points[data-v-2d859d46],.c-modal-away-progress__time-theorems[data-v-2d859d46]{color:var(--color-eternity);filter:brightness(.65)}.c-modal-away-progress__dilated-time[data-v-2d859d46],.c-modal-away-progress__tachyon-galaxies[data-v-2d859d46],.c-modal-away-progress__tachyon-particles[data-v-2d859d46]{color:var(--color-dilation);filter:brightness(.8)}.t-dark .c-modal-away-progress__dilated-time[data-v-2d859d46],.t-dark .c-modal-away-progress__tachyon-galaxies[data-v-2d859d46],.t-dark .c-modal-away-progress__tachyon-particles[data-v-2d859d46]{filter:none}.c-modal-away-progress__achievement-count[data-v-2d859d46],.c-modal-away-progress__imaginary-machines[data-v-2d859d46],.c-modal-away-progress__realities[data-v-2d859d46],.c-modal-away-progress__reality-machines[data-v-2d859d46]{color:var(--color-reality)}.c-modal-away-progress__dark-energy[data-v-2d859d46],.c-modal-away-progress__dark-energy b[data-v-2d859d46],.c-modal-away-progress__dark-matter[data-v-2d859d46],.c-modal-away-progress__dark-matter b[data-v-2d859d46],.c-modal-away-progress__singularities[data-v-2d859d46],.c-modal-away-progress__singularities b[data-v-2d859d46]{color:var(--color-laitela--base);text-shadow:0 0 .2rem var(--color-laitela--accent),0 0 .2rem var(--color-laitela--accent),0 0 .2rem var(--color-laitela--accent),0 0 .2rem var(--color-laitela--accent)}.c-modal-away-progress__replicanti-galaxies[data-v-2d859d46],.c-modal-away-progress__replicanti[data-v-2d859d46]{color:#03a9f4}.c-modal-away-progress__teresa-memories[data-v-2d859d46]{color:var(--color-ra-pet--teresa)}.c-modal-away-progress__effarig-memories[data-v-2d859d46],.c-modal-away-progress__relic-shards[data-v-2d859d46]{color:var(--color-ra-pet--effarig)}.c-modal-away-progress__enslaved-memories[data-v-2d859d46]{color:var(--color-ra-pet--enslaved)}.c-modal-away-progress__v-memories[data-v-2d859d46]{color:var(--color-ra-pet--v)}.c-modal-away-progress__effarig-memories[data-v-2d859d46],.c-modal-away-progress__enslaved-memories[data-v-2d859d46],.c-modal-away-progress__teresa-memories[data-v-2d859d46],.c-modal-away-progress__v-memories[data-v-2d859d46]{filter:brightness(.8)}.t-dark .c-modal-away-progress__effarig-memories[data-v-2d859d46],.t-dark .c-modal-away-progress__enslaved-memories[data-v-2d859d46],.t-dark .c-modal-away-progress__teresa-memories[data-v-2d859d46],.t-dark .c-modal-away-progress__v-memories[data-v-2d859d46]{filter:none}.c-modal-away-progress__black-hole[data-v-2d859d46],.c-modal-away-progress__black-hole b[data-v-2d859d46]{color:#000;text-shadow:0 0 .2rem #e67919,0 0 .3rem #e67919}.s-base--dark .c-modal-away-progress__black-hole[data-v-2d859d46],.s-base--dark .c-modal-away-progress__black-hole b[data-v-2d859d46]{color:#de5a1d;text-shadow:0 0 .2rem #000,0 0 .3rem #000}.c-modal-away-progress__reality-shards[data-v-2d859d46]{color:var(--color-pelle--base)}.c-modal-away-progress__disabled[data-v-2d859d46],.c-modal-away-progress__disabled b[data-v-2d859d46]{font-style:italic;color:#303030;text-shadow:0 0 .3rem #303030;text-decoration:line-through;-webkit-animation:none;animation:none}.c-modal-away-progress__resources div[data-v-244ab913]{min-width:55rem;border-bottom:.1rem solid var(--color-text);margin-bottom:.2rem;padding-bottom:.2rem;cursor:pointer}.c-modal-away-progress__resources div[data-v-244ab913]:last-child{border:none}.c-resource-name[data-v-34008a4e]{font-size:1.2rem;font-weight:700;cursor:pointer}.c-underline[data-v-34008a4e]{text-decoration:underline}.c-modal-catchup-entry[data-v-34008a4e]{border-top:.1rem solid var(--color-text);padding:.5rem 0 .5rem 1.5rem;cursor:default}.c-modal-catchup-entry[data-v-34008a4e]:first-child{border-top:none}.o-catchup-group-title[data-v-005300ef]{font-size:1.5rem;cursor:pointer}.l-left[data-v-005300ef]{text-align:left}.l-catchup-group-container[data-v-a8724662]{overflow-y:scroll;width:100%;text-align:left;border:.1rem solid var(--color-text);border-radius:var(--var-border-radius,.4rem);margin:1rem 0;padding:1.5rem}.l-confirm-padding[data-v-a8724662]{margin:1rem}.c-suggestion-text[data-v-a8724662]{font-size:1.6rem;font-weight:700}.l-changelog-modal[data-v-92635de0]{display:flex;flex-direction:column;width:calc(100vw - 20vh);height:80vh;margin:.5rem}.l-changelog-container[data-v-92635de0]{display:flex;flex:1 1 50rem;flex-direction:row;margin:2rem 0}.l-changelog-header[data-v-92635de0]{flex:0 0.2 5rem;text-align:center}.l-changelog-search-tab[data-v-92635de0]{display:flex;flex-direction:column;width:15rem}.l-changelog-info[data-v-92635de0]{display:flex;flex:1 1 50rem;flex-direction:column}.c-changelog-title[data-v-92635de0]{font-size:3rem;-webkit-user-select:none;user-select:none}.c-changelog-body[data-v-92635de0]{text-align:left;font-size:1.6rem}.l-changelog-body[data-v-92635de0]{overflow-y:auto;flex:1 1 30rem;margin:1rem 1rem 0;padding:.5rem}.t-s12 .l-changelog-body[data-v-92635de0]{font-size:1.3rem;margin-left:0}.l-changelog-body[data-v-92635de0]::-webkit-scrollbar{width:1rem}.l-changelog-body[data-v-92635de0]::-webkit-scrollbar-thumb{border:none}.s-base--metro .l-changelog-body[data-v-92635de0]::-webkit-scrollbar-thumb{border-radius:0}.c-changelog-body--title[data-v-92635de0]{font-size:2.5rem}.c-changelog-search-bar[data-v-92635de0]{width:calc(100% - 1rem);font-size:1.5rem;padding:.2rem}.l-changelog-tab-list[data-v-92635de0]{display:flex;overflow-y:auto;flex:1 0.8 40rem;flex-direction:column;justify-content:flex-start;scrollbar-width:thin;margin:.5rem .5rem 0}.l-changelog-tab-list[data-v-92635de0]::-webkit-scrollbar{width:.5rem}.l-changelog-tab-list[data-v-92635de0]::-webkit-scrollbar-thumb{border:none}.s-base--metro .l-changelog-tab-list[data-v-92635de0]::-webkit-scrollbar-thumb{border-radius:0}.o-changelog-tab-button[data-v-92635de0]{font-size:1.25rem;border-bottom:.1rem solid #000;padding:.3rem .5rem .3rem 0;transition:all .2s;cursor:pointer}.o-changelog-tab-button--selected[data-v-92635de0],.o-changelog-tab-button[data-v-92635de0]:hover{box-shadow:inset 0 0 .8rem var(--color-text)}.s-base--dark .o-changelog-tab-button[data-v-92635de0]{border-bottom:.1rem solid #fff}.t-s12 .o-changelog-tab-button[data-v-92635de0]{border-bottom:.1rem solid #000}.c-changelog-body li{margin:.5rem 0}.l-lost-text[data-v-4f39cd67]{font-weight:700;color:var(--color-bad)}.l-credits-modal[data-v-2d8dcf44]{width:calc(100vw - 60vh);min-width:70rem}.c-credits-modal[data-v-2d8dcf44]{margin:.5rem}.c-credits-modal__body[data-v-2d8dcf44]{overflow-y:scroll;height:85vh}.c-icon-wrapper[data-v-101e8e48]{margin-right:1rem}.l-enslaved-hint-button[data-v-101e8e48]{margin:.4rem 0}.c-glyph-component-container[data-v-5012c711]{margin:.1rem}.c-glyph-choice-container[data-v-0f672c00]{display:flex;flex-flow:row wrap;width:74rem}.c-glyph-choice-container-single[data-v-0f672c00]{width:37rem}.c-glyph-choice-single-glyph[data-v-0f672c00]{display:flex;flex-direction:row;width:36rem;height:12rem;justify-content:space-evenly;align-items:center;border-radius:var(--var-border-radius,.5rem);margin:.5rem}.o-h2p-tab-button--relevant[data-v-7e1ab2ec]{background-color:#df505055}.o-h2p-tab-button--first-irrelevant[data-v-7e1ab2ec]{border-top:.1rem solid #000;margin-top:.8rem}.s-base--dark .o-h2p-tab-button--first-irrelevant[data-v-7e1ab2ec]{border-top-color:#fff}.t-s12 .o-h2p-tab-button--first-irrelevant[data-v-7e1ab2ec]{border-top-color:#000}.l-has-errors[data-v-67bd8c2a]{color:red}.c-import-data-name[data-v-67bd8c2a]{padding:0 1rem}.c-single-row[data-v-66a38efb]{display:flex;justify-content:center;align-items:center;margin:-2.15rem 0 0 3rem}.c-second-row[data-v-66a38efb]{margin:0 0 0 -9rem}.o-cell[data-v-66a38efb]{display:flex;justify-content:center;align-items:center;border:var(--var-border-width,.2rem) solid;padding:.1rem}.o-cell--changed[data-v-66a38efb]{background-color:var(--color-accent)}.c-rarity[data-v-66a38efb]{width:10rem}.c-effects-count[data-v-66a38efb]{width:20rem}.c-target-score[data-v-66a38efb]{width:18rem}.c-single-score[data-v-66a38efb]{width:12rem}.c-single-type[data-v-57ab1f8f]{left:0;text-align:left;padding:.5rem}.l-warn-text[data-v-4552a040]{font-weight:700;color:var(--color-bad)}.l-not-imported[data-v-4552a040]{color:var(--color-disabled)}.c-socials--icon[data-v-01811230]{color:var(--color-text);cursor:pointer}.c-socials--icon__wrapper[data-v-01811230]{transition:all .2s ease-in-out}.c-socials--icon__wrapper[data-v-01811230]:hover{transform:scale(1.1)}[ach-tooltip][data-v-01811230]:before{width:20rem;font-size:1.5rem}.l-information-modal[data-v-fc435f5e]{display:flex;flex-direction:column;width:calc(100vw - 50vh);justify-content:space-around}.c-information-modal[data-v-fc435f5e]{margin:.5rem}.c-info-body[data-v-fc435f5e]{text-align:left;font-size:2rem;margin:1rem;padding:.5rem}.t-s12 .c-info-body[data-v-fc435f5e]{font-size:1.3rem;margin:0}.l-socials[data-v-fc435f5e]{display:flex;justify-content:space-evenly;align-items:center;font-size:7.5rem}.t-s12 .l-socials[data-v-fc435f5e]{width:100%;align-self:center}.c-entry-border[data-v-411bb7ce]{border-bottom:.1rem solid var(--color-text);width:28rem;padding-bottom:1rem}.c-entry-border[data-v-411bb7ce]:last-child{border-bottom:none;padding-bottom:0}.o-selected[data-v-526c51fe]{color:var(--color-text-inverted);background-color:var(--color-good)}.pelle-effects-container[data-v-21d4331f]{overflow-y:scroll;height:40rem}p[data-v-21d4331f]{margin-bottom:1rem}.o-available-effects-container[data-v-7a224243]{margin:1.5rem 0 2rem}.o-available-effects[data-v-7a224243]{font-weight:700}.c-modal-message__text[data-v-1db2b8e9]{vertical-align:middle}.o-shop-button-button__img[data-v-1db2b8e9]{height:2.5rem;vertical-align:middle}.o-warning[data-v-1db2b8e9]{color:var(--color-infinity)}.o-pseudo-time-study[data-v-10ee1de0]{width:2.7rem;height:1.5rem;font-family:Typewriter,serif;font-size:.85rem;color:#000;border:.15rem solid;border-radius:var(--var-border-radius,.2rem);padding:0;transition-duration:.2s;pointer-events:none}.o-pseudo-time-study--small[data-v-10ee1de0]{width:1.8rem}.o-time-study-dark--bought[data-v-10ee1de0]{color:#fff}.o-time-study--new-import[data-v-10ee1de0]:before{content:"";width:100%;height:100%;position:absolute;top:0;left:0;background:rgba(255,214,11,.8);border-radius:var(--var-border-radius,inherit);-webkit-animation:a-new-import-data-v-10ee1de0 3s infinite;animation:a-new-import-data-v-10ee1de0 3s infinite}@-webkit-keyframes a-new-import-data-v-10ee1de0{0%{opacity:0}50%{opacity:.7}to{opacity:0}}@keyframes a-new-import-data-v-10ee1de0{0%{opacity:0}50%{opacity:.7}to{opacity:0}}.o-time-study-connection[data-v-6dda8e60]{stroke-width:2px}.l-study-string-preview__tree--wrapper[data-v-09d9af6c]{display:flex;overflow-y:auto;width:20rem;height:44.5rem;position:relative;justify-content:center;border:var(--color-text) solid var(--var-border-width,.3rem);border-radius:var(--var-border-radius,.3rem);margin:auto;padding:.5rem}.c-unavailable-warning[data-v-09d9af6c]{align-self:center}.l-tree-info-header[data-v-493fb126]{font-size:1.7rem}.c-tree-info[data-v-493fb126]{padding:.7rem}.c-two-column[data-v-35f516e0]{display:flex;flex-direction:row;align-items:center}.c-study-info[data-v-35f516e0]{width:30rem;padding:0 2rem}.c-study-preview[data-v-35f516e0]{height:100%;margin-right:3rem}.l-delete-input[data-v-35f516e0]{color:var(--color-text);background-color:var(--color-disabled);pointer-events:none;-webkit-user-select:none;user-select:none}.c-modal__confirmation-toggle__text[data-v-35f516e0]{opacity:1}.c-modal__confirmation-toggle__warning[data-v-35f516e0]{display:inline-flex;width:1em;height:1em;justify-content:center;align-items:center;color:#322;background:var(--color-bad);border-radius:100%;margin-left:.3rem}.l-lost-text[data-v-6ca17165]{color:var(--color-bad)}.c-visual-change-list[data-v-369e8fe0]{display:inline-block;max-width:45rem;text-align:left}.c-visual-change-list-entry[data-v-369e8fe0]{display:flex;margin-bottom:.5rem;gap:1rem}.c-text-wrapper[data-v-070fe22a]{text-align:left}.l-emphasis[data-v-576557b4]{font-weight:700;color:var(--color-bad)}.pelle-effects-container[data-v-27faf645]{overflow-y:scroll;height:40rem}p[data-v-27faf645]{margin-bottom:1rem}.c-s12-games-container[data-v-25a74b90]{--icon-font-size:1.1rem;--icon-line-height:1.1;--icon-size:8rem;--icon-margin:0.4rem;--icon-inner-padding:0.5rem;--total-icon-height:calc(var(--icon-size) + var(--icon-margin)*2 + var(--icon-font-size)*var(--icon-line-height)*2 + var(--icon-inner-padding)*2);--total-game-width:10rem;--game-margin:0.2rem;display:flex;overflow-y:auto;flex:1 0 auto;flex-wrap:wrap;width:calc(var(--total-game-width)*4 + var(--game-margin)*2*4);height:40rem;-webkit-user-select:none;user-select:none}.c-s12-game[data-v-25a74b90]{overflow:hidden;width:var(--total-game-width);height:var(--total-icon-height);position:relative;z-index:0;margin:var(--game-margin)}.c-s12-game__inner[data-v-25a74b90]{display:flex;overflow:hidden;flex-direction:column;width:100%;position:relative;align-items:center;padding:var(--icon-inner-padding);cursor:pointer}.c-s12-game--selected[data-v-25a74b90]{overflow:visible;z-index:1}.c-s12-game__inner[data-v-25a74b90]:before{content:"";position:absolute;inset:0;z-index:-1;opacity:0;background-image:linear-gradient(rgba(13,120,242,.2),rgba(13,120,242,.25));border:.1rem solid #82a5d0;border-radius:.5rem;box-shadow:inset 0 0 .2rem .1rem hsla(0,0%,100%,.7);transition:opacity .2s}.c-s12-game:hover .c-s12-game__inner[data-v-25a74b90]:before{opacity:.5}.c-s12-game.c-s12-game--selected .c-s12-game__inner[data-v-25a74b90]:before{opacity:1}.c-s12-game__img[data-v-25a74b90]{height:var(--icon-size);margin:var(--icon-margin)}.c-s12-game__text[data-v-25a74b90]{overflow:hidden;width:100%;text-align:center;font-family:Segoe UI,Typewriter;font-size:var(--icon-font-size);font-weight:400;line-height:var(--icon-line-height);color:#000}.c-modal-s12-games[data-v-02f6719c]{display:flex;width:64rem}.c-modal-s12-games__magnified-display[data-v-02f6719c]{width:100%;align-self:stretch;text-align:center;border-left:.1rem solid #86b2df;padding:2rem}.c-modal-s12-games__magnified-display__img[data-v-02f6719c]{width:100%;margin:2rem 0 6rem} \ No newline at end of file +.o-autobuyer-input--invalid[data-v-4d836647],.s-base--dark .o-autobuyer-input--invalid[data-v-4d836647],.t-s1 .o-autobuyer-input--invalid[data-v-4d836647]{background-color:var(--color-bad)}.c-automator-single-block[data-v-36c54dc2]{display:flex;flex-direction:row;justify-content:center;align-items:center;height:2.8rem;white-space:nowrap}.c-automator-constant-block[data-v-36c54dc2]{background:var(--color-blockmator-block-command);color:var(--color-blockmator-editor-background)}.c-automator-text-input-container[data-v-36c54dc2]{position:relative}.o-long-text-input[data-v-36c54dc2]{width:30rem}.c-automator-close-text-input[data-v-36c54dc2]{position:absolute;color:var(--color-automator-error-outline);font-size:1.5rem;z-index:1;right:.8rem;top:.6rem}.l-error-textbox[data-v-36c54dc2]{background:var(--color-automator-error-background);color:#ff0}.l-blob[data-v-36c54dc2]{font-size:1.8rem;background:#000;color:#fc2}.c-automator-block-row--container[data-v-70ff0acc]{margin:-.002rem;padding:.002rem}.l-automator-nested-block[data-v-70ff0acc]{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;min-width:30rem;min-height:3.65rem;border:.1rem dotted #5f5;margin:-.1rem 0 -.1rem 3rem;padding:0 .5rem}.c-automator-block-editor[data-v-0f454411]{display:flex;overflow-y:auto;-moz-tab-size:1.5rem;tab-size:1.5rem;width:100%;background-color:var(--color-blockmator-editor-background);box-sizing:initial}.c-automator-block-editor--container[data-v-0f454411]{display:flex;overflow-y:hidden;height:100%;position:relative;box-sizing:border-box}.c-automator-blocks[data-v-0f454411]{width:100%;height:-webkit-max-content;height:max-content;padding:.3rem .6rem 5rem}.c-automator-block-editor--gutter[data-v-0f454411]{height:-webkit-max-content;height:max-content;min-height:100%;position:relative;background-color:var(--color-automator-controls-background);border-right:.1rem solid #505050;padding:.3rem 1rem 20rem}.c-automator-block-line-number[data-v-0f454411]{display:flex;height:3.45rem;justify-content:flex-end;align-items:center;font-size:1.4rem;color:var(--color-automator-docs-font)}.null-block[data-v-0f454411]{display:none;visibility:hidden}.block-container[data-v-7cd77792]{display:flex;flex-wrap:wrap;align-items:center;margin:1rem 0}.o-automator-block-list[data-v-7cd77792]{display:flex;width:8.7rem;text-align:center;height:5.5rem;font-size:1.2rem;justify-content:center;align-items:center}.o-drag-cancel-region[data-v-7cd77792]{width:100%;height:100%}.null-block[data-v-7cd77792]{display:none;visibility:hidden}.perk-settings>button[data-v-1d796bb5]{margin-right:1rem}.c-button-perk-layout[data-v-1d796bb5]{width:30rem;margin-bottom:1rem}.c-button-physics[data-v-1d796bb5]{width:27rem;margin-bottom:1rem}.c-automator__button[data-v-a1d47f14]{width:3.3rem;border:var(--var-border-width,.2rem) solid var(--color-automator-controls-border);border-radius:var(--var-border-radius,.3rem);margin:.4rem;cursor:pointer;color:var(--color-automator-docs-font);background-color:var(--color-automator-controls-inactive)}.l-entry-padding[data-v-87c8567a]{border:solid .1rem var(--color-automator-docs-font);border-radius:var(--var-border-radius,.5rem);overflow-wrap:break-word;padding:1rem 1.5rem}.l-value-padding[data-v-87c8567a]{padding-left:1.5rem}.l-button-margin[data-v-87c8567a]{margin-right:1rem}.l-panel-padding[data-v-4d4d30ca]{padding:.5rem 2rem 1rem 0}.l-entry-margin[data-v-4d4d30ca]{margin-bottom:1rem}.c-import-button[data-v-4d4d30ca]{margin:1rem 1rem -1rem;border-radius:var(--var-border-radius,.4rem);border-width:var(--var-border-width,.2rem);cursor:pointer}.c-delete-button[data-v-559b0908]{display:flex;justify-content:center;align-items:center;border:var(--var-border-width,.2rem) solid var(--color-automator-controls-border);border-radius:var(--var-border-radius,.3rem);margin:.1rem -.4rem .1rem .6rem;cursor:pointer;color:var(--color-automator-docs-font);background-color:var(--color-automator-controls-inactive)}.c-delete-button[data-v-559b0908]:hover{background-color:var(--color-automator-error-background)}.l-single-definition-container[data-v-559b0908]{display:flex;flex-direction:row;padding:.5rem}.o-arrow-padding[data-v-559b0908]{display:flex;flex-direction:column;justify-content:center;padding:0 1rem}.c-define-textbox[data-v-559b0908]{display:inline-block;font-family:Typewriter,serif;font-size:1.1rem;background:var(--color-blockmator-block-background);border:.1rem solid var(--color-blockmator-block-border);border-radius:var(--var-border-radius,.5rem);padding:.5rem;color:#00ac00}.l-error-textbox[data-v-559b0908]{background:var(--color-automator-error-background)}.l-limit-textbox[data-v-559b0908]{border-style:dotted;border-color:var(--color-automator-error-outline)}.c-alias[data-v-559b0908]{min-width:14.5rem}.c-value[data-v-559b0908]{width:100%}.c-delete-margin[data-v-1499c066]{margin:0}.l-panel-padding[data-v-1499c066]{padding:.5rem 2rem 0 0}.l-definition-container[data-v-1499c066]{display:flex;flex-direction:column;border:solid .1rem var(--color-automator-docs-font);border-radius:var(--var-border-radius,.5rem);padding:.5rem;margin-top:1rem}.l-command-group[data-v-71d16626]{display:flex;flex-direction:column;padding-left:1rem}.l-return-button[data-v-71d16626]{width:4rem;height:2.6rem;font-size:1.8rem;margin-left:2rem}.c-automator-button-icon[data-v-2dfadf11]{padding:.3rem .8rem;width:3.3rem;border:var(--var-border-width,.2rem) solid var(--color-automator-controls-border);border-radius:var(--var-border-radius,.3rem);color:var(--color-automator-docs-font);background-color:var(--color-automator-controls-inactive)}.c-automator-docs-template--button[data-v-a3645a5c]{margin:.4rem;border-radius:var(--var-border-radius,.4rem);border-width:var(--var-border-width,.2rem);cursor:pointer}.template-container[data-v-a3645a5c]{display:flex;flex-direction:column}.l-script-option[data-v-1d4a260f]{border-radius:0;border-bottom:0}.c-script-option-hover-effect[data-v-1d4a260f]:hover{filter:brightness(70%);background-color:var(--color-automator-active-line-background)}.l-script-option[data-v-1d4a260f]:first-child{border-radius:var(--var-border-radius,.5rem) var(--var-border-radius,.5rem) 0 0}.l-create-script[data-v-1d4a260f]{border-radius:0 0 var(--var-border-radius,.5rem) var(--var-border-radius,.5rem)}.l-active-script[data-v-1d4a260f]{background-color:var(--color-automator-controls-active)}.l-selected-script[data-v-1d4a260f]{background-color:var(--color-automator-active-line-outline)}.l-max-scripts[data-v-1d4a260f]{background-color:var(--color-automator-error-background);cursor:auto}.l-expanding-control-box[data-v-3584cbe8]{position:relative;z-index:3}.l-expanding-control-box--controls-width[data-v-3584cbe8]{width:100%}.l-expanding-control-box__container[data-v-3584cbe8]{display:block;overflow:hidden;width:100%;height:auto;position:absolute;left:50%;transform:translateX(-50%)}.l-expanding-control-box__container--transition[data-v-3584cbe8]{transition:max-height .5s}.l-expanding-control-box__button[data-v-3584cbe8]{display:flex;white-space:nowrap;width:100%;height:2.5rem;position:relative;top:-.5rem;justify-content:center;align-items:center;border:none!important;cursor:pointer}.c-indicator-arrow--flipped[data-v-3584cbe8]{transform:rotate(-180deg)}.c-indicator-arrow[data-v-3584cbe8]{margin-left:.6rem;transition:transform .25s ease-out}.l-automator__expand-corner[data-v-192f8680]{position:absolute;right:0}.l-automator__script-names[data-v-192f8680]{flex-grow:1;display:flex;flex-direction:row;justify-content:space-evenly;align-items:center}.l-automator__scripts-dropdown[data-v-192f8680]{width:100%;margin:.4rem;-webkit-user-select:none;user-select:none}.l-automator__rename-input[data-v-192f8680]{width:100%;height:calc(2.33333rem - var(--var-border-width, 0rem)*2);border:var(--var-border-width,.2rem) solid var(--color-reality-light);border-radius:var(--var-border-radius,.3rem);margin:.4rem;padding:.4rem}.c-automator__rename-input[data-v-192f8680]{font-family:Typewriter;font-size:1.2rem;color:var(--color-automator-docs-font);background-color:var(--color-automator-controls-active)}.c-automator__button--active[data-v-192f8680]{background-color:var(--color-automator-controls-active);border-color:var(--color-reality-light)}.c-automator__status-text[data-v-192f8680]{font-size:1.5rem;font-weight:700;color:var(--color-reality);padding:0 .5rem}.c-automator__status-text--small[data-v-192f8680]{font-size:1.1rem}.c-automator__status-text--error[data-v-192f8680]{color:var(--color-bad);cursor:auto}.c-long-name-box[data-v-192f8680]{background-color:var(--color-automator-error-background);border-color:var(--color-automator-error-outline)}.o-blob-background[data-v-3413da3e]{opacity:.3}.o-blob-background[data-v-3413da3e],.o-blob-snowflake[data-v-67871b93]{overflow:visible;fill:#fbc21b;text-shadow:0 0 5px #000,0 0 5px #000,0 0 5px #000;pointer-events:none;-webkit-user-select:none;user-select:none;cursor:default}.o-blob-snowflake[data-v-67871b93]{opacity:.9}.c-blob-snowflake-container[data-v-2549fa62]{z-index:9999}.c-blob-background-container[data-v-2549fa62],.c-blob-snowflake-container[data-v-2549fa62]{overflow:visible;width:100%;height:100%;position:absolute;top:0;left:0;pointer-events:none;-webkit-user-select:none;user-select:none;cursor:default}.c-blob-background-container[data-v-2549fa62]{z-index:-9999}.c-mending-points[data-v-a8ab28e8]{font-size:1.2rem;padding-bottom:.5rem}.l-spacing[data-v-ff18554e]{margin-top:1rem}.c-black-hole-header[data-v-60b7c53e]{font-weight:700;color:var(--color-text)}.c-primary-btn--black-hole-header[data-v-60b7c53e]{vertical-align:middle;margin:.2rem}.c-black-hole-status-text[data-v-60b7c53e]{margin:0 .8rem}.o-discharge-btn[data-v-60b7c53e]{width:20rem;font-size:1rem}.o-small-discharge-text[data-v-60b7c53e]{font-size:1rem;line-height:1rem}.o-bh-charge-disabled[data-v-60b7c53e]{background-color:var(--color-disabled);-webkit-user-select:none;user-select:none;cursor:not-allowed}.l-game-header__challenge-text[data-v-71e60358]{display:flex;height:2rem;top:50%;justify-content:center;align-items:center;font-size:1.2rem;font-weight:700;color:var(--color-text);margin:.5rem}.l-challenge-display[data-v-71e60358]{padding:.5rem;cursor:default}.l-challenge-display--clickable[data-v-71e60358]{cursor:pointer;-webkit-user-select:none;user-select:none}.l-challenge-display--clickable[data-v-71e60358]:hover{text-decoration:underline}.l-padding-line[data-v-71e60358]{padding:.3rem}.c-armageddon-button[data-v-8077c0a8]{display:block;font-family:Typewriter;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem)}.s-base--metro .c-armageddon-button[data-v-8077c0a8]{box-shadow:.1rem .1rem .1rem 0 #9e9e9e}.l-armageddon-button[data-v-8077c0a8]{width:100%;padding:1.5rem}.l-armageddon-button--header[data-v-8077c0a8]{font-size:1rem;font-weight:700;padding:0}.c-armageddon-button[data-v-8077c0a8]:hover{box-shadow:.1rem .1rem .5rem var(--color-pelle--base);transition-duration:.12s;cursor:pointer}.c-armageddon-button--unavailable[data-v-8077c0a8]{opacity:.5;cursor:default!important}.c-remnant-gain[data-v-8077c0a8]{font-size:1.5rem;font-weight:700;color:var(--color-pelle--base)}.c-remnant-gain-display[data-v-8077c0a8]{vertical-align:middle}.c-reality-shard-gain[data-v-8077c0a8]{font-weight:700;color:var(--color-pelle--base)}.c-reality-currency[data-v-669bdb06]{font-size:1.2rem;margin-bottom:1rem}.c-shard-color[data-v-669bdb06]{color:var(--color-pelle--base)}.c-gamespeed[data-v-1b923d2a]{font-weight:700;color:var(--color-text)}.c-reality-container[data-v-4832cc34]{display:flex;flex-direction:column;justify-content:space-between;align-items:center}.c-eternity-points[data-v-78a4376a],.c-infinity-points[data-v-546e2542],.c-mending-points[data-v-4832cc34]{font-size:1.2rem;padding-bottom:.5rem}.c-prestige-info-blocks[data-v-05a7d691]{display:flex;flex-direction:row;height:14rem;width:100%;color:var(--color-text)}.l-game-header__eternity[data-v-05a7d691]{position:absolute;left:calc(25% - 22rem);width:22rem}.l-game-header__center[data-v-05a7d691]{position:absolute;right:calc(50% - 25rem);width:50rem}.l-game-header__infinity[data-v-05a7d691]{position:absolute;right:calc(25% - 22rem);width:22rem}.o-tab-btn[data-v-02221b25]{position:relative;height:2.5rem;vertical-align:middle;padding-top:.2rem}.o-subtab-btn--active[data-v-02221b25]{height:2.5rem;border-bottom-width:.4rem}.s-base--metro .o-subtab-btn--active[data-v-02221b25]{border-bottom-width:.4rem}.o-tab-btn[data-v-48d1e610]{position:relative;height:3.1rem;vertical-align:middle;margin:.2rem;margin-bottom:.7rem}.o-tab-btn--active[data-v-48d1e610]{height:3.1rem;border-bottom-width:.5rem}.s-base--metro .o-tab-btn--active[data-v-48d1e610]{border-bottom-width:.5rem}.c-mending-points[data-v-26607020]{font-size:1.2rem;padding-bottom:.5rem}.l-modal-celestial-quote[data-v-3f7bcfc0]{flex-direction:row;width:30rem;height:30rem;top:50vh;left:50vw;justify-content:space-between;transform:translate(-50%,-50%);background-color:#000}.c-modal-celestial-quote[data-v-3f7bcfc0],.l-modal-celestial-quote[data-v-3f7bcfc0]{display:flex;position:absolute;align-items:center;border-radius:var(--var-border-radius,1rem)}.c-modal-celestial-quote[data-v-3f7bcfc0]{width:100%;height:100%;left:0;justify-content:center;-webkit-user-select:none;user-select:none}.c-modal-celestial-quote__symbol[data-v-3f7bcfc0]{z-index:1;font-size:25rem;text-shadow:0 0 2rem}.c-modal-celestial-quote__shadow[data-v-3f7bcfc0]{box-shadow:0 0 1.5rem .1rem,inset 0 0 1rem .1rem}.s-base--metro .c-modal-celestial-quote__shadow[data-v-3f7bcfc0]{box-shadow:0 0 1rem .2rem,inset 0 0 1rem .1rem}.c-modal-celestial-quote__text[data-v-3f7bcfc0]{z-index:2;padding:5rem}.c-modal-celestial-name[data-v-7e428c16]{position:absolute;top:1rem;right:0;left:0;font-weight:700}.c-modal-celestial-quote__arrow[data-v-7e428c16]{font-size:150%;margin:.5rem;cursor:pointer}.c-modal-celestial-quote__arrow-left[data-v-7e428c16]{position:absolute;left:1rem}.c-modal-celestial-quote__arrow-right[data-v-7e428c16]{position:absolute;right:1rem}.c-modal-celestial-quote__end[data-v-7e428c16]{position:absolute;bottom:1.5rem;left:calc(50% - 1rem);font-size:150%;cursor:pointer}.l-modal-celestial-quote__text[data-v-7e428c16]{display:flex;flex-direction:column;height:100%;justify-content:center}.l-modal-celestial-quote__buttons[data-v-7e428c16]{display:flex;flex-direction:column;height:100%;justify-content:space-between}.c-modal-celestial-quote__arrow-invisible[data-v-7e428c16]{visibility:hidden}.c-quote-overlay[data-v-198b74ab]{font-size:1.4rem;padding:1rem;transition:all .2s,top .3s ease,transform .3s ease,z-index .3s}.c-quote-overlay--background[data-v-198b74ab]{filter:grayscale(.5);cursor:pointer}.c-quote-overlay--background[data-v-198b74ab]:hover{opacity:1;filter:grayscale(.3) drop-shadow(0 0 2rem)}.c-modal-celestial-quote-history__arrow[data-v-198b74ab],.c-modal-celestial-quote-history__close[data-v-198b74ab]{position:absolute;z-index:1;font-size:2.5rem;cursor:pointer}.o-light-button[data-v-198b74ab]{color:#fff}.o-dark-button[data-v-198b74ab]{color:#000}.c-modal-celestial-quote-history__arrow--disabled[data-v-198b74ab]{opacity:.4;cursor:default}.c-modal-celestial-quote-history__arrow-down[data-v-198b74ab]{top:calc(50% + 16rem);left:50%;transform:translateX(-50%)}.c-modal-celestial-quote-history__arrow-up[data-v-198b74ab]{bottom:calc(50% + 16rem);left:50%;transform:translateX(-50%)}.c-modal-celestial-quote-history__arrow-left[data-v-198b74ab]{top:50%;right:calc(50% + 16rem);transform:translateY(-50%)}.c-modal-celestial-quote-history__arrow-right[data-v-198b74ab]{top:50%;left:calc(50% + 16rem);transform:translateY(-50%)}.c-modal-celestial-quote-history__close[data-v-198b74ab]{position:absolute;bottom:calc(50% + 16rem);left:calc(50% + 16rem);z-index:1}.c-modal-celestial-quote-history__close[data-v-198b74ab],.c-quote-history-modal__controls[data-v-198b74ab]{-webkit-animation:a-fade-in-data-v-198b74ab .5s;animation:a-fade-in-data-v-198b74ab .5s}.c-quote-history-modal__clickable-background[data-v-198b74ab]{width:100%;height:100%;position:absolute;inset:0;z-index:-10;cursor:zoom-out}@-webkit-keyframes a-fade-in-data-v-198b74ab{0%{opacity:0}to{opacity:1}}@keyframes a-fade-in-data-v-198b74ab{0%{opacity:0}to{opacity:1}}.c-quote-overlay[data-v-4e0361e1]{font-size:1.4rem;padding:1rem;transition-duration:.2s}.c-credits-s12-end[data-v-5f15ce42]{--color-text:#fff;color:#fff}.c-credits-header[data-v-5f15ce42]{color:#000}.t-amoled .c-credits-header[data-v-5f15ce42],.t-dark .c-credits-header[data-v-5f15ce42],.t-s6 .c-credits-header[data-v-5f15ce42],.t-s10 .c-credits-header[data-v-5f15ce42]{-webkit-animation:a-credits-header--glow-data-v-5f15ce42 25s infinite;animation:a-credits-header--glow-data-v-5f15ce42 25s infinite}.t-s12 .c-credits-header[data-v-5f15ce42]{color:var(--color-antimatter)}@-webkit-keyframes a-credits-header--glow-data-v-5f15ce42{0%{color:#2196f3}33%{color:#673ab7}66%{color:#00bcd4}to{color:#2196f3}}@keyframes a-credits-header--glow-data-v-5f15ce42{0%{color:#2196f3}33%{color:#673ab7}66%{color:#00bcd4}to{color:#2196f3}}.t-s11 .c-credits-header[data-v-5f15ce42]{-webkit-animation:a-credits-header--glow-blob-data-v-5f15ce42 25s infinite;animation:a-credits-header--glow-blob-data-v-5f15ce42 25s infinite}@-webkit-keyframes a-credits-header--glow-blob-data-v-5f15ce42{0%{color:#fbc21b}33%{color:#caa32c}66%{color:#fba11b}to{color:#fbc21b}}@keyframes a-credits-header--glow-blob-data-v-5f15ce42{0%{color:#fbc21b}33%{color:#caa32c}66%{color:#fba11b}to{color:#fbc21b}}.t-amoled-metro .c-credits-header[data-v-5f15ce42],.t-dark-metro .c-credits-header[data-v-5f15ce42]{color:#e0e0e0}.c-credits-section[data-v-5f15ce42]{color:var(--color-text);text-shadow:1px 1px 2px #40e0d0;margin-top:10rem;margin-bottom:2rem}.l-credits--bulk[data-v-5f15ce42]{display:grid;grid-template-columns:repeat(2,1fr);width:76%;position:relative;left:12%}.c-credit-entry[data-v-5f15ce42]{font-size:1.3rem;margin-top:1rem}@-webkit-keyframes a-teresa-credits-data-v-7244bf67{0%{transform:rotate(61deg)}10%{transform:rotate(322deg)}20%{transform:rotate(235deg)}30%{transform:rotate(222deg)}40%{transform:rotate(105deg)}50%{transform:rotate(33deg)}60%{transform:rotate(103deg)}70%{transform:rotate(158deg)}80%{transform:rotate(41deg)}90%{transform:rotate(73deg)}to{transform:rotate(61deg)}}@keyframes a-teresa-credits-data-v-7244bf67{0%{transform:rotate(61deg)}10%{transform:rotate(322deg)}20%{transform:rotate(235deg)}30%{transform:rotate(222deg)}40%{transform:rotate(105deg)}50%{transform:rotate(33deg)}60%{transform:rotate(103deg)}70%{transform:rotate(158deg)}80%{transform:rotate(41deg)}90%{transform:rotate(73deg)}to{transform:rotate(61deg)}}@-webkit-keyframes a-effarig-credits-data-v-7244bf67{0%{opacity:.8;text-shadow:0 0 3rem}50%{opacity:1;text-shadow:0 0 4rem,0 0 4rem}to{opacity:.8;text-shadow:0 0 3rem}}@keyframes a-effarig-credits-data-v-7244bf67{0%{opacity:.8;text-shadow:0 0 3rem}50%{opacity:1;text-shadow:0 0 4rem,0 0 4rem}to{opacity:.8;text-shadow:0 0 3rem}}@-webkit-keyframes a-enslaved-credits-data-v-7244bf67{0%{transform:translateX(-50%) rotate(0)}to{transform:translateX(-50%) rotate(1turn)}}@keyframes a-enslaved-credits-data-v-7244bf67{0%{transform:translateX(-50%) rotate(0)}to{transform:translateX(-50%) rotate(1turn)}}@-webkit-keyframes a-v-credits-data-v-7244bf67{0%{transform:translateX(-50%) rotate(0) scale(.8)}16.67%{transform:translateX(-50%) rotate(60deg) scale(1.2)}33.33%{transform:translateX(-50%) rotate(120deg) scale(.8)}50%{transform:translateX(-50%) rotate(180deg) scale(1.2)}66.67%{transform:translateX(-50%) rotate(240deg) scale(.8)}83.33%{transform:translateX(-50%) rotate(300deg) scale(1.2)}to{transform:translateX(-50%) rotate(1turn) scale(.8)}}@keyframes a-v-credits-data-v-7244bf67{0%{transform:translateX(-50%) rotate(0) scale(.8)}16.67%{transform:translateX(-50%) rotate(60deg) scale(1.2)}33.33%{transform:translateX(-50%) rotate(120deg) scale(.8)}50%{transform:translateX(-50%) rotate(180deg) scale(1.2)}66.67%{transform:translateX(-50%) rotate(240deg) scale(.8)}83.33%{transform:translateX(-50%) rotate(300deg) scale(1.2)}to{transform:translateX(-50%) rotate(1turn) scale(.8)}}@-webkit-keyframes a-ra-credits-data-v-7244bf67{0%{opacity:.3;transform:translateX(-50%) scale(.2)}50%{opacity:.7;transform:translateX(-50%) scale(.9)}to{opacity:.3;transform:translateX(-50%) scale(.2)}}@keyframes a-ra-credits-data-v-7244bf67{0%{opacity:.3;transform:translateX(-50%) scale(.2)}50%{opacity:.7;transform:translateX(-50%) scale(.9)}to{opacity:.3;transform:translateX(-50%) scale(.2)}}@-webkit-keyframes a-ra-credits--dark-data-v-7244bf67{0%{opacity:.1;transform:translateX(-50%) scale(.2)}50%{opacity:.4;transform:translateX(-50%) scale(.9)}to{opacity:.1;transform:translateX(-50%) scale(.2)}}@keyframes a-ra-credits--dark-data-v-7244bf67{0%{opacity:.1;transform:translateX(-50%) scale(.2)}50%{opacity:.4;transform:translateX(-50%) scale(.9)}to{opacity:.1;transform:translateX(-50%) scale(.2)}}@-webkit-keyframes a-laitela-credits-data-v-7244bf67{0%{transform:translate(-50%,30%)}25%{transform:translate(-50%,-20%)}50%{transform:translate(-50%,30%)}75%{transform:translateY(30%)}to{transform:translate(-50%,30%)}}@keyframes a-laitela-credits-data-v-7244bf67{0%{transform:translate(-50%,30%)}25%{transform:translate(-50%,-20%)}50%{transform:translate(-50%,30%)}75%{transform:translateY(30%)}to{transform:translate(-50%,30%)}}@-webkit-keyframes a-pelle-credits-data-v-7244bf67{0%{transform:translateX(-50%) rotateY(0) scaleY(1)}25%{transform:translateX(-50%) rotateY(90deg) scaleY(1.3)}50%{transform:translateX(-50%) rotateY(180deg) scaleY(1)}75%{transform:translateX(-50%) rotateY(270deg) scaleY(1.3)}to{transform:translateX(-50%) rotateY(1turn) scaleY(1)}}@keyframes a-pelle-credits-data-v-7244bf67{0%{transform:translateX(-50%) rotateY(0) scaleY(1)}25%{transform:translateX(-50%) rotateY(90deg) scaleY(1.3)}50%{transform:translateX(-50%) rotateY(180deg) scaleY(1)}75%{transform:translateX(-50%) rotateY(270deg) scaleY(1.3)}to{transform:translateX(-50%) rotateY(1turn) scaleY(1)}}.c-mute-button[data-v-7244bf67]{position:fixed;left:2rem;font-size:2rem;opacity:.5;pointer-events:auto;cursor:pointer}.t-s12 .c-mute-button[data-v-7244bf67]{color:#fff}.c-credits-container[data-v-7244bf67]{width:100%;height:100%;position:absolute;left:0;z-index:9;transform:translateY(100%);pointer-events:none}.c-credits-cel-symbol[data-v-7244bf67]{display:flex;width:14rem;height:14rem;position:absolute;justify-content:center;align-items:center;font-size:14rem;text-shadow:0 0 3rem;transform:translateX(-50%)}.c-teresa-credits[data-v-7244bf67]{top:145rem;left:65%;color:var(--color-teresa--base);-webkit-animation:a-teresa-credits-data-v-7244bf67 10s ease-in-out infinite;animation:a-teresa-credits-data-v-7244bf67 10s ease-in-out infinite}.c-effarig-credits[data-v-7244bf67]{top:50rem;left:80%;color:#f40;-webkit-animation:a-effarig-credits-data-v-7244bf67 4s ease-in-out infinite;animation:a-effarig-credits-data-v-7244bf67 4s ease-in-out infinite}.c-enslaved-credits[data-v-7244bf67]{top:235rem;left:52%;color:var(--color-enslaved--base);-webkit-animation:a-enslaved-credits-data-v-7244bf67 10s linear infinite;animation:a-enslaved-credits-data-v-7244bf67 10s linear infinite}.c-v-credits[data-v-7244bf67]{top:185rem;left:20%;color:var(--color-v--base);-webkit-animation:a-v-credits-data-v-7244bf67 15s ease-in-out infinite;animation:a-v-credits-data-v-7244bf67 15s ease-in-out infinite}.c-ra-credits[data-v-7244bf67]{top:315rem;left:44%;color:var(--color-ra--base);-webkit-animation:a-ra-credits-data-v-7244bf67 10s ease-in-out infinite;animation:a-ra-credits-data-v-7244bf67 10s ease-in-out infinite}.s-base--dark .c-ra-credits[data-v-7244bf67]{-webkit-animation:a-ra-credits--dark-data-v-7244bf67 10s ease-in-out infinite;animation:a-ra-credits--dark-data-v-7244bf67 10s ease-in-out infinite}.c-laitela-credits[data-v-7244bf67]{top:105rem;left:13%;color:#fff;-webkit-animation:a-laitela-credits-data-v-7244bf67 5s ease-in-out infinite;animation:a-laitela-credits-data-v-7244bf67 5s ease-in-out infinite}.c-pelle-credits[data-v-7244bf67]{top:8rem;left:30%;color:var(--color-pelle--base);-webkit-animation:a-pelle-credits-data-v-7244bf67 5s linear infinite;animation:a-pelle-credits-data-v-7244bf67 5s linear infinite}.c-background-overlay[data-v-0b58eaaa]{width:100%;height:100%;position:absolute;top:0;left:0;z-index:8;background-color:#fff}.t-dark-metro .c-background-overlay[data-v-0b58eaaa],.t-dark .c-background-overlay[data-v-0b58eaaa]{background-image:url(../img/dark-bg.ed00b71f..png);background-position:50%}.t-amoled-metro .c-background-overlay[data-v-0b58eaaa],.t-amoled .c-background-overlay[data-v-0b58eaaa],.t-inverted-metro .c-background-overlay[data-v-0b58eaaa],.t-inverted .c-background-overlay[data-v-0b58eaaa],.t-s11 .c-background-overlay[data-v-0b58eaaa]{background-color:#000}.t-s1 .c-background-overlay[data-v-0b58eaaa]{background:url(../img/s1-bg.6d361e47..svg) no-repeat;background-attachment:fixed;background-color:#d72621;background-position:bottom;background-size:100%}.t-s1 .c-background-overlay[data-v-0b58eaaa]:before{content:"";width:100%;height:100%;position:fixed;top:0;left:0;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF3WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxNy0xMS0yOVQxNDo1NDozMi0wODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTctMTEtMjlUMTU6MDQ6NDUtMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTctMTEtMjlUMTU6MDQ6NDUtMDg6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MWVjYzllMzUtYjg2Zi1hMjRmLWFhMzItOTA3ZDY2ZDBkOTcyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOmVhYTRmNDdhLWIwYWQtYzk0Mi1iODlhLTdlOGMwNGQ3ZTBhMCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmVhYTRmNDdhLWIwYWQtYzk0Mi1iODlhLTdlOGMwNGQ3ZTBhMCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZWFhNGY0N2EtYjBhZC1jOTQyLWI4OWEtN2U4YzA0ZDdlMGEwIiBzdEV2dDp3aGVuPSIyMDE3LTExLTI5VDE0OjU0OjMyLTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxZWNjOWUzNS1iODZmLWEyNGYtYWEzMi05MDdkNjZkMGQ5NzIiIHN0RXZ0OndoZW49IjIwMTctMTEtMjlUMTU6MDQ6NDUtMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+QfBOSwAAE2BJREFUeJzt3Nuv5Wd9mPFnewbbGBvjsY0xR8c2ZxNjIMGcDAgVt1SFClrSkqpQqVIveoWU5KL/QJWkUi+4SHLRSr1IoqSVSlEVSooKwQSUFBODMaf6EE4G4yP22MGH8e7FuwBDBnDVDWvNdz4fabRnr7UvvpqLefZ7+K29/f39AIAT2ynbHgAA+P8n6AAwgKADwACCDgADCDoADCDoADCAoAPAAIIOAAMIOgAMIOgAMICgA8AAgg4AAwg6AAwg6AAwgKADwACCDgADCDoADCDoADCAoAPAAIIOAAMIOgAMIOgAMICg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),url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAYAAACAvzbMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFEmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxNy0xMS0yOVQxNDo1NDozNS0wODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTctMTEtMjlUMTU6MDg6MjUtMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTctMTEtMjlUMTU6MDg6MjUtMDg6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MGU2MzIzMzMtZDhhMi01ZTRkLTkxNzctYWExMWJhMGRiZWMwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjBlNjMyMzMzLWQ4YTItNWU0ZC05MTc3LWFhMTFiYTBkYmVjMCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjBlNjMyMzMzLWQ4YTItNWU0ZC05MTc3LWFhMTFiYTBkYmVjMCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MGU2MzIzMzMtZDhhMi01ZTRkLTkxNzctYWExMWJhMGRiZWMwIiBzdEV2dDp3aGVuPSIyMDE3LTExLTI5VDE0OjU0OjM1LTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlDA6wgAAA4lSURBVHic7d3rj61nedjh3+y9bWN8wsb1AYoVoDUtsUojAriHpMFpmwShlNCqLWrVfs9f1S+R2qqtWipolAOoUpoCCYdSKMFRnJAAccAYGzv2Pnr64VlWkY1b9Z41+529fF3S0uxZsy3dtqz5zfM877zv0fHxcQDw/+vc1gMAcGMSEABGBASAEQEBYERAABgREABGBASAEQEBYERAABgREABGBASAEQEBYERAABgREABGBASAEQEBYERAABgREABGBASAEQEBYERAABgREABGBASAEQEBYERAABgREABGBASAEQEBYERAABgREABGBASAEQEBYERAABgREABGBOT/7oEf+rP/VgA/xDfF1/au6qPVO3ef/53qPduNA3C2XNh6gDPqqHpT9cHqavVT1d+o/lP15ep4s8kAzggBebXbq5eqt1bfqR7evX+pupJ4AFQC8qO8p/rF1srjhepaKxrH1V3VX6++tNFsAGeGM5BXu7+12nhDayvruBXac9U/qx6p7txsOoAz4uj42I7MK9zUWoV8uLp59zqqnqr+oHp893phqwEBzgJbWK92pXq2uq+1ffXN6m9W/636xO69q5tNB3BGCMiP9ubq29Vvt4LyYHW+tbUFQALyWr5W/Wn1ZOuKrCvVdzedCOCMcQby2s614vGylw/UAUhAABhyGS8AIwICwIiAADAiIACMCAgAIwIC7NNR635yj2w9CKdPQICTuq16e+tuDXdX/7L1DJ1btxyK0+c30YGT+lutB6492brdz/uqz1V3/NDfeXGDuThlfpEQOKl3VL/ceszBc61trGdaNx69XP2X6itbDcfpsYUFnNTF6o+rH7TuVH2ptX31ttYTPq9tNxqnyQoEOImHq4+17lj9bOv+cUet5+p8s/q31bc2m45T5QwEOIlzrXBcbD187Z5WRG5vbW3d8dr/KDc6KxDgJG5tbVHdXv2L6qerj+++9rbq89UntxmN02YFApzEy1dXPddaifz36j9X36seynN0DpoVCLAv76qeTjReNwQEgBGX8QIwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiAAjAgIACMCAsCIgAAwIiDAIbinend1++7zN1b3bTfO68OFrQcA2IN3VL9UfaZ6vPpA9VT1yS2HOnRWIMAhOK7eXD1W/UL10erWTSd6HbACAW5kd1SPVA9Wz1TXqh+r/qh6Yfd3zlUvXf/RDt/R8fHx1jMATP1k9fPVe6onWgE5X93cCsoT1a9W391ovoNmBQLcyL7aOkB/tnqoFY/Lu9c7W1tb767+61YDHjIBAW5kL1a/Vj1XPdwKxqXW97Z/19rKenyr4Q6dQ3TgENxZPVD9XnWltSp5sfpydXHDuQ6aFQhwCJ6p/nX1+eru1rnI5S0Hej1wiA4cgjtaK46r1U2t1cgPWmcjnBIBAWDEGQgAIwICwIiAADAiIACMCAgAIwICwIiAADAiIACMCAgAIwJy+N5fPbr1EMDhcTPFw3ZL9aHWDwpfbN3mGmAvBOQwfaR1Q7kXq7uqo+rnWk9pu1x9fLPJgIMhIIfpQvWx1uM8X9y99zPV26tf2Wgm4MAIyGH6VPVgKxjnWk9pO6o+vfsawIk5RD9ML9+j/+gVHwH2RkAO02O710u713F1rbWN9dh2YwGHxBbWYbrSOuu4VH2wtQL5VPXZ1hPbAE5MQA7Ty1dZ3VK9tzpf/Xp1cbOJgIMjIIftUvXJVkDEA9grz0QHYMQhOgAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgLAiIAAMCIgAIwICAAjAgKn5/3Vo1sPAaflwtYDwIG6pfpQ64e0L1aXth0H9k9AYL8+Ut1UvVjdVR1VP1fdXF2uPr7ZZLBnAgL7daH6WPVEKyJVP1O9vfqVjWaCUyEgsF+fqh5sBeNcddxahXx69zU4GA7RYb+Odx+PXvERDo6AwH49tnu9tHsdV9da21iPbTcW7J8tLNivK62zjkvVB1srkE9Vn62ubjgX7J2AwH69fJXVLdV7q/PVr1cXN5sITomAwOm4VH2yFRDx4CAdHR8f/7//FgC8gkN0AEYEBIARAQFgREAAGBEQAEYEBIARAQFgREAAGBEQAEYEBIARAQFgREAAGBGQ6+eVT6bzpDrghiYg18cD1UP9n2g8VN2x3TgAJ+d5INfHT1QfaD1s6EL196rfrD6z5VAAJ2EFcn3cVL2t+ofVz1bvaz0nG+CGJSCn793VcfX93ecPVF+v7q9ubT2xDuCG44mEp+snq59urTi+Ub3U2sK6ubpaPV39x+p/bTQfwJgVyOn6w+o71Zdb21g3tbauXqjeWD1XvWmr4QBOwgrk+nhf6/zjztaq467qN6rfrb614VwAY1Ygp++oer516e43qmeq26t7Eg/gBuYy3tN3XF2qfmv3+lb1j6snW1taV7YbDWDOFtb1c2/11O7Pd7ZWJs9uNw7AyQgIACPOQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERCA6+O2rQfYNwEBOH0/Ub136yH27cLWAwAcsHPVzdWHq8vV16sXqnurb1ZXthvt5AQE4HS8v7pU3Vc9VD1d/d3q3dXvV5+ovrvZdHsgIAD7d1/1SPXz1ePVD3bvP9palVysvrfNaPsjIAD793z11eot1QPVn1cvtUJyufrM7vMbmkN0gP17obXyqBWT49b32zuq+6ufqt62zWj7IyAA+3e++vvVW6tbWwG5tfp2Ky5v7AB2gG74fwGAM+gN1VPVl6rfa519vLP699XnW1dh/dFGs+2NgADs3wvV71a/2YrJ3a1VyRda5yHPbzfa/hwdHx9vPQPAofuLrd8HeWLrQfZJQABO3/nq2tZD7JuAADDiKiwARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEgBEBAWBEQAAYERAARgQEDtfR1gNw2AQEDtOF6tHq4a0H4XBd2HoAYG/uqx6qvlX9heqfVp+rHt9yKA6XgMDheHP1T6rvVteqN1ZvakXlSvWd3fuwF0fHx8dbzwDsx23VL1ePVH9WXa0u797/k+oT1R9sNh0HxxkIHI4r1ZOtFchx6xD9rtbK5Ae792FvrEDgMNxe/VL1WPVMdbH1A+L56svVv6kubTUch8kKBA7Dva3zjqdaq43j3eve6q3VzZtNxsGyAoHDcL515dXN1Yer91Zfa0XkwepfVV/ZajgOk6uw4DBca51/VH2/eq76jd17b2mtTGCvrEDg8Dxc3V19oXWwDqdCQOAwHbW2r+DUOETnpC5UP17dtPv89uqB7cZhRzw4dc5AOKkHq39Qfal1aPuz1fPVr7YuJwUOlIBwUhdbt8q4q/qrrf33P6ye3XIo4PTZwuIk7q/+UutKnztav3NwpXXbjLduOBdwHThEZ+rh6kPV21uXkF5rxeN8dU/1P6rfqT671YDA6bICYepq63cLLrS2sa62DtJvqZ5uXUb6wmbTAafOGQhTT7QOyb9X/ULrF9duqf68+nT12wkIHDQrEE7i6dbtM25vBeRPqx+rvtG6EuulzSYDTp0VCCdxU+shRb9T/YdWPIDXCYfonNSbWgfoz+0+f0frMl7/Y8GBExAARpyBADAiIACMCAgAIwICwIiAADAiIACMCAgAIwICwIiAADAiIACMnLWA3F3duvvzG6q/Ur15u3EAeC1nLSB/rfpH1V+uHq3+eSsiAJwxZ+127rdVH2mtRN7SWn2ctRkB6OysQI52H5+v/qR6Z+thRN+v7q8+0LptOABnxFn56f626rHWdtW1VjxejspHq99vPbzotzaZDoBXOSsrkHdVP169r7paXa7O715fqD5T/c/NpgPgVc7KCuSrrVXHV6q/3Vp93FTdXH2p+rXNJgPgRzorK5CL1Rerb1b3tML29ere3QuAM+asrEBedq764+pz1deqJ1txAeCMOWvPRL+zteL4disc51pXXz294UwA/AhnLSAA3CDOyhkIADcYAQFgREAAGBEQAEYEBIARAQFgREAAGBEQAEYEBIARAQFgREAAGBEQAEYEBIARAQFgREAAGBEQAEYEBIARAQFg5H8D3AXeffYx4m0AAAAASUVORK5CYII=),url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGqGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxNy0xMS0yOVQxNDo1NDozNy0wODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTctMTEtMjlUMTU6MTQ6NTMtMDg6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMTctMTEtMjlUMTU6MTQ6NTMtMDg6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzVlOTNjMjAtNzk4OS0zOTQ3LWJlOTMtMzMzMzk2MDUyYzcwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlkOWQ0NGQ1LTg2NzUtYTU0My1iZWYwLTFkNWUzOGZmNDYxMSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjlkOWQ0NGQ1LTg2NzUtYTU0My1iZWYwLTFkNWUzOGZmNDYxMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWQ5ZDQ0ZDUtODY3NS1hNTQzLWJlZjAtMWQ1ZTM4ZmY0NjExIiBzdEV2dDp3aGVuPSIyMDE3LTExLTI5VDE0OjU0OjM3LTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo4MWRhOTJkMC02MmI1LTRlNDctOWY5MC02MDA1NWRiMGMwZmQiIHN0RXZ0OndoZW49IjIwMTctMTEtMjlUMTU6MTQ6MzgtMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjM1ZTkzYzIwLTc5ODktMzk0Ny1iZTkzLTMzMzM5NjA1MmM3MCIgc3RFdnQ6d2hlbj0iMjAxNy0xMS0yOVQxNToxNDo1My0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz76/4gAAAAL2UlEQVR4nO3d249dZRmA8WdPZ9qZTg/ToS0t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);-webkit-animation:a-snow 10s linear infinite,a-snow-fade 10s cubic-bezier(0,.3,1,.7) infinite;animation:a-snow 10s linear infinite,a-snow-fade 10s cubic-bezier(0,.3,1,.7) infinite}.t-s2 .c-background-overlay[data-v-0b58eaaa]{background:url(../img/s2-bg.17969e80..svg) no-repeat;background-color:#fff;background-position-x:50%;background-position-y:50%;background-size:50%}.t-s4 .c-background-overlay[data-v-0b58eaaa]{background:#f0f;border-radius:0!important}.t-s4 .c-background-overlay[data-v-0b58eaaa]:after{content:"";width:100%;height:100%;position:fixed;top:0;left:0;background:#0fff0f;border-radius:40%}.t-s5 .c-background-overlay[data-v-0b58eaaa]{background:url(../img/s5-bg.9bf7e005..jpg);background-position-x:50%;background-position-y:50%;background-size:150%}.t-s6 .c-background-overlay[data-v-0b58eaaa],.t-s10 .c-background-overlay[data-v-0b58eaaa]{background:#000;background-image:url(../img/stars-bg.f04db429..png);background-position:50%;background-size:100%}.t-s8 .c-background-overlay[data-v-0b58eaaa]{background:url(../img/s8-bg.8135ae4a..jpg) no-repeat;background-attachment:fixed;background-position:50%;background-repeat:no-repeat;background-size:cover}.t-s12 .c-background-overlay[data-v-0b58eaaa]{background:url(../img/s12-bg.7929eed6..jpg) no-repeat;background-attachment:fixed;background-position:50%;background-repeat:no-repeat;background-size:cover;filter:brightness(.5)}.l-help-me[data-v-5bb5f9a0]{font-size:1.5rem;font-weight:500;line-height:1.9rem;pointer-events:auto;cursor:pointer;transition-delay:0s;z-index:1}.h2p-tutorial--glow[data-v-5bb5f9a0],.l-help-me[data-v-5bb5f9a0]{position:absolute;width:2rem;height:2rem;right:2rem;border-radius:var(--var-border-radius,50%)}.h2p-tutorial--glow[data-v-5bb5f9a0]{top:0;background:gold;-webkit-animation:a-opacity 3s infinite;animation:a-opacity 3s infinite;z-index:2}.h2p-tooltip[data-v-5bb5f9a0]{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;position:absolute;top:0;right:100%;color:#fff;background:#000;border:.1rem solid var(--color-text);border-radius:var(--var-border-width,.5rem);transform:translate(-.7rem,-.4rem);padding:.2rem .4rem}.h2p-tooltip[data-v-5bb5f9a0]:after{content:"";position:absolute;top:.6rem;left:100%;border-top:.5rem solid transparent;border-left:.5rem solid var(--color-text);border-bottom:.5rem solid transparent}.progress-bar-modal[data-v-699111cc]{z-index:8}.c-modal[data-v-699111cc]{position:fixed;top:50vh;left:50vw;transform:translate(-50%,-50%)}.modal-progress-bar[data-v-699111cc]{display:flex;flex-direction:column;width:40rem;z-index:3;justify-content:space-between;align-items:center}.modal-progress-bar__hbox[data-v-699111cc]{display:flex;flex-direction:row;justify-content:space-between}.modal-progress-bar__bg[data-v-699111cc]{width:20rem;height:2rem;background:#000;margin-right:1rem;margin-left:1rem}.modal-progress-bar__fg[data-v-699111cc]{height:100%;background:blue}.modal-progress-bar__buttons[data-v-699111cc]{display:flex;flex-direction:row;width:25rem;justify-content:space-between;align-items:center}.modal-progress-bar__label[data-v-699111cc]{font-size:large;padding-bottom:.5rem}.modal-progress-bar__margin[data-v-699111cc]{margin:1rem 0}.o-tab-btn[data-v-63b22e24]:before{content:"";width:0;height:100%;position:absolute;right:0;left:0;background-color:var(--color-accent);transition:width .15s}.o-tab-btn--active[data-v-63b22e24]:before{width:.5rem}.o-tab-btn--infinity[data-v-63b22e24]:before{background-color:var(--color-infinity)}.o-tab-btn--eternity[data-v-63b22e24]:before{background-color:var(--color-eternity)}.o-tab-btn--reality[data-v-63b22e24]:before{background-color:var(--color-reality)}.o-tab-btn--celestial[data-v-63b22e24]:before{background-color:var(--color-celestials)}.o-subtab-btn--active[data-v-63b22e24]{border-bottom-width:.5rem}.o-tab-btn--subtab[data-v-63b22e24]:first-child{border-top-left-radius:var(--var-border-radius,.5rem);border-bottom-left-radius:var(--var-border-radius,.5rem);transition:border-radius 0s}.o-tab-btn--subtab[data-v-63b22e24]:last-child{border-top-right-radius:var(--var-border-radius,.5rem);border-bottom-right-radius:var(--var-border-radius,.5rem);transition:border-radius 0s}.o-tab-btn--mending[data-v-63b22e24]:before{background-color:var(--color-mending)}.c-new-game-container[data-v-0fe0fd40]{display:flex;flex-direction:column;position:absolute;top:50%;left:50%;z-index:9;justify-content:center;align-items:center;transform:translate(-50%,-50%);pointer-events:auto}.t-s12 .c-new-game-container[data-v-0fe0fd40]{color:#fff}.c-new-game-button-container[data-v-0fe0fd40]{display:flex;flex-direction:column;align-items:stretch}.c-new-game-button[data-v-0fe0fd40]{font-family:Typewriter;background:grey;border:#000;border-radius:var(--var-border-radius,.5rem);margin-top:1rem;padding:1rem;cursor:pointer}.o-save-timer[data-v-4038e6d6]{white-space:nowrap;position:absolute;bottom:0;left:0;z-index:5;text-align:left;color:var(--color-text);background-color:var(--color-base);border-top:.1rem solid var(--color-accent);border-right:.1rem solid var(--color-accent);padding:0 .5rem;pointer-events:auto;-webkit-user-select:none;user-select:none;cursor:pointer}.t-s2 .o-save-timer[data-v-4038e6d6]{filter:sepia(100%) hue-rotate(180deg) saturate(250%)}.t-s3 .o-save-timer[data-v-4038e6d6]{-webkit-animation:a-glasses 7s infinite;animation:a-glasses 7s infinite}.c-swap-button[data-v-21f229d4]{position:fixed;top:1rem;right:4.5rem;z-index:10;font-size:2rem;opacity:.8;pointer-events:auto;cursor:pointer}.c-speedrun-status[data-v-5faa7a14]{white-space:nowrap;position:absolute;right:2rem;bottom:1rem;z-index:5;font-size:1.2rem;color:var(--color-text);background-color:var(--color-base);border:var(--var-border-width,.2rem) solid var(--color-accent);padding:.8rem 2rem;pointer-events:auto;-webkit-user-select:none;user-select:none}.c-speedrun-status--can-change[data-v-5faa7a14]{text-decoration:underline;cursor:pointer}.c-speedrun-status--collapse[data-v-5faa7a14]{padding:.2rem;cursor:pointer}.hover-menu__wrapper[data-v-0f008cfb]{position:relative}.l-tt-save-load-btn__wrapper[data-v-b401e76c]{position:relative;margin:.3rem}.l-tt-save-load-btn[data-v-b401e76c]{min-width:2rem}.l-tt-save-load-btn__menu[data-v-b401e76c]{position:absolute;top:-.5rem;left:50%;padding:.5rem 0;transform:translate(-50%,-100%)}.c-tt-save-load-btn__menu[data-v-b401e76c]{text-align:left;font-family:Typewriter;font-size:1.4rem;font-weight:700;color:#fff;background:#000;border-radius:var(--var-border-radius,.5rem)}.l-tt-save-load-btn__menu[data-v-b401e76c]:after{content:"";position:absolute;top:100%;left:50%;border-color:#000 transparent transparent;border-style:solid;border-width:var(--var-border-width,.5rem);margin-left:-.5rem}.l-tt-save-load-btn__menu-rename[data-v-b401e76c]{margin:.3rem .5rem .5rem .7rem}.c-tt-save-load-btn__menu-rename[data-v-b401e76c]{text-align:left;font-family:Typewriter;font-size:1.4rem;font-weight:700;border:none;border-radius:var(--var-border-radius,.3rem);padding:.2rem}.l-tt-save-load-btn__menu-item[data-v-b401e76c]{position:relative;cursor:pointer}.c-tt-save-load-btn__menu-item[data-v-b401e76c]{text-align:left;padding:.25rem 1rem}.c-tt-save-load-btn__menu-item[data-v-b401e76c]:hover{color:#000;background:#fff}.c-tt-save-load-btn__menu-item__hover-options[data-v-b401e76c]{visibility:hidden;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;position:absolute;top:0;left:100%;opacity:0;color:#fff;background:#000;border:.1rem solid #000;border-radius:var(--var-border-width,.5rem);transform:translateX(.5rem);transition:visibility .2s,opacity .2s;transition-delay:.5s;cursor:pointer}.c-tt-save-load-btn__menu-item__hover-option[data-v-b401e76c]{white-space:nowrap;padding:.25rem 1rem}.c-tt-save-load-btn__menu-item__hover-options[data-v-b401e76c]:after{content:"";position:absolute;top:.8rem;right:100%;border-top:.5rem solid transparent;border-right:.5rem solid #000;border-bottom:.5rem solid transparent}.c-tt-save-load-btn__menu-item[data-v-b401e76c]:hover,.c-tt-save-load-btn__menu-item__hover-option[data-v-b401e76c]:hover{color:#000;background:#fff}.l-tt-save-load-btn__menu-item:hover .c-tt-save-load-btn__menu-item__hover-options[data-v-b401e76c]{visibility:visible;opacity:1;transition-delay:0s}.c-tt-save-load-btn__menu-item__hover-option--disabled[data-v-b401e76c]{opacity:.7;cursor:default}.c-tt-save-load-btn__menu-item__hover-option--disabled[data-v-b401e76c]:hover{color:#fff;background:transparent}.l-load-tree-area[data-v-46d9db85]{display:flex;flex-direction:column;width:50%;align-items:left}.l-tree-load-button-wrapper[data-v-46d9db85]{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.ttbuttons-bottom-row-hide[data-v-46d9db85]{height:0}.tt-gen-container[data-v-46d9db85]{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.checkbox-margin[data-v-46d9db85]{margin:0 .4rem}.c-game-ui--fixed[data-v-0ae8982e]{display:flex;width:100%;height:100%;position:fixed;top:0;left:0;z-index:5;justify-content:center;pointer-events:none}.t-s12 .c-game-ui--fixed[data-v-0ae8982e]{position:absolute}.c-mending-points[data-v-5d0773f0]{font-size:1.2rem;padding-bottom:.5rem}.c-reality-container[data-v-599f99ca]{display:flex;flex-direction:column;justify-content:space-between;align-items:center}.c-eternity-points[data-v-1172a401],.c-infinity-points[data-v-57d02076],.c-mending-points[data-v-599f99ca]{font-size:1.2rem;padding-bottom:.5rem}.c-prestige-info-blocks[data-v-019433b0]{display:flex;flex-direction:row;height:14rem;width:100%;color:var(--color-text)}.l-game-header__eternity[data-v-019433b0]{position:absolute;left:calc(25% - 22rem);width:22rem}.l-game-header__center[data-v-019433b0]{position:absolute;right:calc(50% - 25rem);width:50rem}.l-game-header__infinity[data-v-019433b0]{position:absolute;right:calc(25% - 22rem);width:22rem}.o-tab-btn[data-v-b30deff4]{position:relative;height:2.5rem;vertical-align:middle;padding-top:.2rem}.o-subtab-btn--active[data-v-b30deff4]{height:2.5rem;border-bottom-width:.4rem}.s-base--metro .o-subtab-btn--active[data-v-b30deff4]{border-bottom-width:.4rem}.o-tab-btn[data-v-1e3e3693]{position:relative;height:3.1rem;vertical-align:middle;margin:.2rem;margin-bottom:.7rem}.o-tab-btn--active[data-v-1e3e3693]{height:3.1rem;border-bottom-width:.5rem}.s-base--metro .o-tab-btn--active[data-v-1e3e3693]{border-bottom-width:.5rem}.c-mending-points[data-v-bf1bfb3a]{font-size:1.2rem;padding-bottom:.5rem}.o-clickable[data-v-c78c9e4e]{cursor:pointer}.c-pelle-symbol-overlay[data-v-c78c9e4e]{display:flex;width:100%;height:100%;position:absolute;top:-1.5rem;left:0;justify-content:center;align-items:center;font-size:60rem;color:var(--color-pelle--base);text-shadow:0 0 3rem;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:.8;z-index:2}.l-dimension-text-container[data-v-74ffc647]{display:flex;height:3.5rem;align-content:center;grid-column:1/5}.l-narrow-box[data-v-74ffc647]{display:flex;text-align:left;width:100%;flex-direction:column;justify-content:center;align-items:flex-start}.l-wide-box[data-v-74ffc647]{display:flex;text-align:left;width:100%;flex-direction:row;justify-content:flex-start;align-items:center}.c-dim-row__large[data-v-74ffc647]{text-align:left;margin-right:1rem}.c-dim-row__small[data-v-74ffc647]{font-size:1.2rem;margin-right:1rem}.l-glow-container[data-v-623bbdde]{display:flex;width:100%;height:100%;position:absolute;top:0;left:0;justify-content:center;align-items:center;border-radius:var(--var-border-radius,inherit)}.o-continuum[data-v-623bbdde]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-623bbdde]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.l-text-wrapper[data-v-51c836b2]{height:6rem}.l-scaling-text-wrapper[data-v-51c836b2]{height:2rem}.o-primary-btn[data-v-7a175a54]{position:relative;vertical-align:middle}.tickspeed-btn[data-v-7a175a54]{position:relative;width:30rem;height:2.5rem;padding:.25rem}.tickspeed-labels[data-v-7a175a54]{color:var(--color-text);padding:.25rem}.l-tickspeed-container[data-v-7a175a54]{display:flex;flex-direction:column;justify-content:center;align-items:center;padding-top:.5rem}.l-tickspeed-container--hidden[data-v-7a175a54]{visibility:hidden}.tickspeed-max-btn[data-v-7a175a54]{margin-left:.5rem;width:10rem;height:2.5rem;padding:.25rem}.o-non-clickable[data-v-7a175a54]{cursor:auto}.o-continuum[data-v-7a175a54]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-7a175a54]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.l-flex[data-v-77684bcf]{flex:1 0}.l-modern-buy-ad-text[data-v-e93a3710]{display:flex;flex-direction:column}.o-non-clickable[data-v-e93a3710]{cursor:auto}.o-continuum[data-v-e93a3710]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-e93a3710]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.l-button-container[data-v-38071904]{width:100px;height:30px;padding:0}.l-glow-container[data-v-3019072b]{display:flex;width:100%;height:100%;position:absolute;top:0;left:0;justify-content:center;align-items:center;border-radius:var(--var-border-radius,inherit)}.o-continuum[data-v-3019072b]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-3019072b]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.l-text-wrapper[data-v-779c0d24]{height:6rem}.l-scaling-text-wrapper[data-v-779c0d24]{height:2rem}.l-flex[data-v-50df59c7]{flex:1 0}.l-autobuyer-choice[data-v-b8f762d6]{border-radius:0;border-top:0;box-shadow:none}.l-autobuyer-choice[data-v-b8f762d6]:hover{background-color:var(--color-good)}.l-autobuyer-choice[data-v-b8f762d6]:first-child{border-radius:var(--var-border-radius,.5rem) var(--var-border-radius,.5rem) 0 0}.l-autobuyer-choice[data-v-b8f762d6]:last-child{border-radius:0 0 var(--var-border-radius,.5rem) var(--var-border-radius,.5rem)}.o-clickable[data-v-d66a5b9a]{cursor:pointer}.o-non-clickable[data-v-67bb427e]{cursor:auto}.l-top-margin[data-v-b44dddb8]{margin-top:.82rem}.l-dimboost-text-area[data-v-b44dddb8]{height:3rem}.o-clickable[data-v-0e9d22c8],.o-clickable[data-v-5d2d53ac],.o-clickable[data-v-56211cc8],.o-clickable[data-v-b44dddb8]{cursor:pointer}.c-mending-pos[data-v-2cf6e922]{z-index:4}.c-reality-pos[data-v-2cf6e922]{z-index:3}.c-eternity-pos[data-v-2cf6e922]{z-index:2}.c-infinity-pos[data-v-2cf6e922]{z-index:1}.c-slider-toggle-button[data-v-15d9af9b]{display:flex;overflow:hidden;position:relative;align-items:center;color:var(--color-automator-docs-font);background-color:#626262;border:var(--var-border-width,.2rem) solid #767676;border-radius:var(--var-border-radius,.3rem);margin:.3rem .4rem .3rem .5rem;padding:.3rem 0;cursor:pointer}.c-slider-toggle-button .fas[data-v-15d9af9b]{width:3rem;position:relative;z-index:1}.c-slider-toggle-button[data-v-15d9af9b]:before{content:"";width:3rem;height:100%;position:absolute;top:0;left:0;z-index:0;background-color:var(--color-automator-controls-inactive);border-radius:var(--var-border-radius,.3rem);transition:all .3s ease}.c-slider-toggle-button--right[data-v-15d9af9b]:before{left:3rem;background-color:var(--color-automator-controls-inactive)}.tutorial--glow[data-v-15d9af9b]:after{z-index:2}.c-automator-control-row[data-v-6ae4f435]{justify-content:space-between}.c-button-group[data-v-6ae4f435]{display:flex;flex-direction:row;align-items:center}.c-automator__status-text[data-v-6ae4f435]{font-size:1.3rem;font-weight:700;color:var(--color-reality);padding:0 .5rem}.c-automator__status-text--small[data-v-6ae4f435]{font-size:1.1rem}.c-automator__status-text--warning[data-v-6ae4f435]{color:var(--color-good-paused)}.c-automator__status-text--error[data-v-6ae4f435]{color:var(--color-bad)}.c-automator__button--active[data-v-6ae4f435]{background-color:var(--color-automator-controls-active);border-color:var(--color-reality-light)}.c-automator__button--inactive[data-v-6ae4f435]{background-color:var(--color-automator-controls-border);border-color:var(--color-reality-light)}.c-automator__button.fa-eject[data-v-6ae4f435]:before{transform:rotate(90deg)}.c-slider-toggle-button[data-v-78354292]{display:flex;overflow:hidden;position:relative;align-items:center;color:#000;background-color:#626262;border:.2rem solid #767676;border-radius:.2rem;margin:.4rem;padding:.3rem 0;cursor:pointer}.s.base--dark .c-slider-toggle-button[data-v-78354292]{background-color:#626262}.c-slider-toggle-button .fas[data-v-78354292]{width:3rem;position:relative;z-index:1}.c-slider-toggle-button[data-v-78354292]:before{content:"";width:3rem;height:100%;position:absolute;top:0;left:0;z-index:0;background-color:#fff;border-radius:.2rem;transition:all .3s ease}.c-slider-toggle-button--right[data-v-78354292]:before{left:3rem;background-color:#fff}.tutorial--glow[data-v-78354292]:after{z-index:2}.l-automator-points-list-container[data-v-3d0cd0f0]{display:flex;flex-direction:row;justify-content:space-between;margin-top:1rem;-webkit-user-select:none;user-select:none}.c-automator-points-list-col[data-v-3d0cd0f0]{position:relative;text-align:left;border:var(--var-border-width,.15rem) solid var(--color-text);border-radius:var(--var-border-radius,.5rem);padding:1rem}.l-automator-points-list-side-col[data-v-3d0cd0f0]{display:flex;flex-direction:column;width:35%;justify-content:space-between}.l-automator-points-list-center-col[data-v-3d0cd0f0]{display:flex;flex-direction:column;width:25%;justify-content:space-between}.c-automator-points-list-cell[data-v-3d0cd0f0]{overflow:hidden;width:100%;height:48%;position:relative;text-align:left;border:var(--var-border-width,.15rem) solid var(--color-text);border-radius:var(--var-border-radius,.5rem);padding:1rem}.c-automator-points-list-symbol[data-v-3d0cd0f0]{display:flex;width:100%;height:100%;position:absolute;top:0;left:0;justify-content:center;align-items:center;font-size:15rem;opacity:.2;text-shadow:0 0 2rem;pointer-events:none}.c-automator-points-list-perk-label[data-v-3d0cd0f0]{display:inline-block;width:3rem;max-width:3rem;font-weight:700}.c-automator-points-list-single-entry[data-v-3d0cd0f0]{position:relative}.c-automator-points-list-ap[data-v-3d0cd0f0]{position:absolute;right:0;opacity:.8}.c-automator-points-list-ap--large[data-v-3d0cd0f0]{position:absolute;right:1rem;font-size:1.8rem;opacity:.6}.l-header[data-v-3d0cd0f0]{font-size:2rem}.l-large-text[data-v-3d0cd0f0]{font-size:1.8rem}.l-upgrade-list[data-v-3d0cd0f0]{font-size:1.3rem}.c-overlimit[data-v-5eda76b2]{font-weight:700;color:var(--color-bad)}.c-automator-tab[data-v-5eda76b2]{width:80%;min-width:100rem}.l-automator-tab[data-v-5eda76b2]{position:relative;align-self:center;margin-top:.5rem}.c-automator-split-pane[data-v-5eda76b2]{width:100%;height:57rem;background-color:#bbb}.s-base--dark .c-automator-split-pane[data-v-5eda76b2]{width:100%;background-color:#474747}.c-automator-tab--full-screen .c-automator-split-pane[data-v-5eda76b2]{width:100%;height:100%;position:fixed;inset:0;z-index:5;margin-top:0;padding-bottom:0}.c-ad-slider__button[data-v-1c7fda29]{display:flex;width:1.6rem;height:1.6rem;justify-content:center;align-items:center;font-size:1rem;border:.1rem solid var(--color-reality-light);border-radius:var(--var-border-radius,50%);transition-duration:.2s;cursor:pointer}.c-ad-slider__button[data-v-1c7fda29]:hover{color:#000;background-color:var(--color-reality-light)}.l-ad-slider--disabled .c-ad-slider__button[data-v-1c7fda29]{opacity:.5;cursor:not-allowed}.l-black-hole-sliders[data-v-c72692d6]{width:55rem;color:var(--color-text)}.l-margin-left[data-v-c72692d6]{margin-left:.5rem}.l-lock-text[data-v-c72692d6]{font-weight:700;color:var(--color-bad);margin:.5rem 0 -.5rem}.l-auto-pause-button[data-v-49a1483d]{width:30rem}.l-pre-unlock-text[data-v-49a1483d]{display:flex;flex-direction:column;align-items:center}.c-black-hole-disabled-description[data-v-49a1483d]{font-size:2.5rem;line-height:1.5}.o-celestial-nav__clickable[data-v-689b5224]{cursor:pointer}.c-celestial-quote-history--button{align-self:center;font-family:Typewriter;font-size:1.8rem;font-weight:700;color:var(--color-text);background-color:var(--color-base);border:var(--var-border-width,.2rem) solid var(--scoped-cel-color);border-radius:var(--var-border-radius,.5rem);margin-bottom:1.5rem;padding:.5rem 1rem;transition:.2s;transition-property:color,background-color;cursor:pointer}.c-celestial-quote-history--button:hover{color:var(--color-text-inverted);background-color:var(--scoped-cel-color)}.c-effarig-relic-description[data-v-0883caed]{width:46rem}.c-enslaved-run-description-line[data-v-53895748]{margin-bottom:1rem}.l-fixed-setting[data-v-53895748]{cursor:pointer;pointer-events:none;filter:brightness(70%)}.c-vreward[data-v-096be0c2]{font-weight:700;color:var(--color-v--base)}.l-margin-top[data-v-59fdf668]{margin-top:.55rem}.l-eternity-upgrades-grid[data-v-5b2e66da]{display:flex;flex-direction:column;align-items:center;margin-top:1rem}.l-eternity-upgrades-grid__row[data-v-5b2e66da]{display:flex;flex-direction:row}.l-eternity-upgrades-grid__cell[data-v-5b2e66da]{margin:.5rem .8rem}.c-glyph-tooltip__sacrifice[data-v-0072d0ca]{font-size:1rem;font-weight:400}.l-corner-icon[data-v-6bf85a79]{position:absolute;z-index:5;color:#000;border-radius:var(--var-border-radius,.2rem);padding:.2rem}.l-new-glyph[data-v-6bf85a79]{top:-.7rem;left:-.7rem;font-size:1rem;background-color:#ff0}.l-unequipped-glyph[data-v-6bf85a79]{top:-.5rem;left:-.5rem;font-size:1.2rem;background-color:orange}.l-preview[data-v-182ff48c]{margin:.2rem}.c-equipped-glyph[data-v-1a7f95d2]{-webkit-user-drag:none}.l-glyph-equip-button[data-v-1a7f95d2]{width:100%;height:3.5rem;margin:.25rem .5rem}.l-glyph-equip-button-short[data-v-1a7f95d2]{width:100%;height:2.5rem;margin:.25rem .5rem}.l-glyph-level-and-weights-note[data-v-7287ea6a]{grid-column:1/5}.c-selected-effect-toggle-indicator--active[data-v-f7049e30]{position:absolute;top:-.1rem;right:-.1rem;font-size:1rem;color:#000;text-shadow:none;border-radius:0 var(--var-border-radius,.4rem);padding:.2rem}.l-dock[data-v-f7049e30]{position:absolute;top:50%;margin:0 4rem;transform:translateY(-50%)}.l-dock-left[data-v-f7049e30]{left:0}.l-dock-right[data-v-f7049e30]{right:0}.o-clickable[data-v-0b797f07]{cursor:pointer}.c-filter-extra-btns[data-v-0b797f07]{position:absolute;display:flex;flex-direction:row;top:0;z-index:2;font-size:1.3rem}.c-top-left[data-v-0b797f07]{right:calc(100% - 6rem);color:var(--color-reality-dark)}.c-top-right[data-v-0b797f07]{left:calc(100% - 5rem)}.l-top-left-btn[data-v-0b797f07]{cursor:pointer;border:var(--var-border-width,.2rem) solid;width:2.5rem;margin:.5rem 0 0 .5rem;padding:.5rem}.l-top-right-btn[data-v-0b797f07]{display:flex;justify-content:center;align-items:center;cursor:pointer;border:var(--var-border-width,.2rem) solid;width:2rem;height:2rem;margin:.5rem .5rem 0 0;padding:.2rem}.o-borderless[data-v-0b797f07]{border:none}.o-quick-reality[data-v-0b797f07]{background:var(--color-good)}.l-rejected-tooltip[data-v-0a4a783b]{width:90%;left:5%}.o-non-clickable[data-v-0b9f4462]{cursor:auto}.l-glyph-auto-pick-options__container[data-v-295c4c76]{display:flex;flex-direction:row;justify-content:center}.l-glyph-set-save__header[data-v-3c1a8770]{margin:-1.5rem 2rem 0}.c-glyph-set-save-container[data-v-3c1a8770]{display:flex;flex-wrap:wrap;width:100%;justify-content:center;margin:1rem auto 0}.c-glyph-single-set-save-flexbox[data-v-3c1a8770]{width:17rem}.c-glyph-set-preview-area[data-v-3c1a8770]{width:18rem}.l-suggestions[data-v-fc08f092]{font-size:1rem}.c-reality-reminder-pointer[data-v-fc08f092]{cursor:pointer}.c-sacrificed-glyphs__type-symbol[data-v-ec571984]{margin-right:.7rem}.c-single-glyph-cosmetic[data-v-09c183dd]{display:flex;justify-content:space-between;align-items:center;width:calc(100% - 1rem);height:8rem;font-size:1.2rem;border:.1rem solid #b8b8b8;border-radius:var(--var-border-radius,.5rem);padding:.5rem;margin-top:1rem;-webkit-user-select:none;user-select:none}.c-glyph-info[data-v-09c183dd]{display:flex;flex-direction:row}.c-glyph-info-section[data-v-09c183dd]{display:flex;flex-direction:column;justify-content:center;align-items:flex-start;text-align:left;margin:1rem}.c-cosmetic-text[data-v-09c183dd]{width:18rem}.l-glyph-level-factors[data-v-4515e2a7]{margin:2rem}.o-clickable[data-v-4515e2a7]{cursor:pointer}.l-celestial-auto-restart-checkbox[data-v-4515e2a7]{display:flex;flex-direction:row;align-items:center;-webkit-user-select:none;user-select:none}.l-half-width[data-v-4515e2a7]{width:50%}.c-cap-text[data-v-6888454f]{color:var(--color-text);font-size:1.5rem}.c-info-text[data-v-6888454f]{color:var(--color-text);margin:1.5rem}.o-challenge-btn--broken[data-v-78886df5]{background:var(--color-enslaved--base);-webkit-clip-path:polygon(0 0,25% 20%,95% 0,100% 25%,80% 70%,95% 50%,100% 100%,45% 95%,65% 70%,15% 95%,0 45%,10% 50%);clip-path:polygon(0 0,25% 20%,95% 0,100% 25%,80% 70%,95% 50%,100% 100%,45% 95%,65% 70%,15% 95%,0 45%,10% 50%)}.o-challenge-btn--broken-alt[data-v-78886df5]{background:var(--color-enslaved--base);-webkit-clip-path:polygon(0 0,15% 0,25% 40%,30% 0,55% 0,85% 30%,75% 0,100% 0,90% 40%,100% 65%,90% 95%,45% 45%,70% 100%,25% 100%,5% 90%,10% 60%);clip-path:polygon(0 0,15% 0,25% 40%,30% 0,55% 0,85% 30%,75% 0,100% 0,90% 40%,100% 65%,90% 95%,45% 45%,70% 100%,25% 100%,5% 90%,10% 60%)}.o-continuum[data-v-239f89fe]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-239f89fe]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.sc-one[data-v-5a952b48]{color:red}.c-modern-dim-tooltip-container .c-modern-dim-purchase-count-tooltip[data-v-39f8097c]{position:absolute;width:20rem;top:50%;font-size:1.3rem;line-height:1.6rem;color:#fff;background:#000;border:.1rem solid var(--color-text);border-radius:var(--var-border-width,.5rem);transform:translate(calc(var(--x-pos) - 1rem),-50%);padding:.5rem;visibility:hidden}.o-continuum[data-v-39f8097c]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-39f8097c]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.sc-one[data-v-80df2ae2]{color:red}.c-infinity-upgrade-grid__column[data-v-c6393b0e]{display:flex;overflow:hidden;flex-direction:column;position:relative;border-radius:var(--var-border-radius,.3rem);margin:0 .3rem}.c-infinity-upgrade-grid__column--background[data-v-c6393b0e]{width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1;opacity:.7}.s-base--dark .c-infinity-upgrade-grid__column--background[data-v-c6393b0e]{opacity:.5}.l-infinity-upgrades-bottom-row .l-infinity-upgrade-grid__cell[data-v-c6393b0e],.l-infinity-upgrades-bottom-row .l-infinity-upgrades-tab__mult-btn[data-v-c6393b0e]{margin:.5rem 1.1rem}.o-laitela-milestone--glow[data-v-67ba0edb]{font-weight:700;color:var(--color-laitela--base);background:var(--color-laitela--accent);border-color:var(--color-laitela--accent);box-shadow:inset 0 0 .5rem .1rem,0 0 .3rem 0;-webkit-animation:a-laitela-flash 3s infinite;animation:a-laitela-flash 3s infinite}.c-laitela-singularity__cap-control[data-v-49e4cbd0]{margin:0 .3rem 1rem}.c-multiplier-entry-container[data-v-70c7468e]{display:flex;flex-direction:row;justify-content:space-between;width:100%;max-width:100rem;border:var(--var-border-width,.2rem) solid var(--color-text);padding:.5rem;font-weight:400;background-color:var(--color-base)}.c-multiplier-entry-root-container[data-v-70c7468e]{min-height:45rem}.c-stacked-bars[data-v-70c7468e]{position:relative;width:5rem;background-color:var(--color-disabled);margin-right:1.5rem}.c-bar-overlay[data-v-70c7468e]{display:flex;width:100%;height:100%;top:-5%;position:absolute;justify-content:center;align-items:center;font-size:1.5rem;pointer-events:none;-webkit-user-select:none;user-select:none;overflow:hidden;opacity:.8;z-index:1}.c-bar-highlight[data-v-70c7468e]{-webkit-animation:a-glow-bar-data-v-70c7468e 1s infinite;animation:a-glow-bar-data-v-70c7468e 1s infinite}@-webkit-keyframes a-glow-bar-data-v-70c7468e{0%{box-shadow:inset 0 0 .3rem 0}50%{box-shadow:inset 0 0 .6rem 0;filter:brightness(130%)}to{box-shadow:inset 0 0 .3rem 0}}@keyframes a-glow-bar-data-v-70c7468e{0%{box-shadow:inset 0 0 .3rem 0}50%{box-shadow:inset 0 0 .6rem 0;filter:brightness(130%)}to{box-shadow:inset 0 0 .3rem 0}}.c-info-list[data-v-70c7468e]{height:100%;width:90%;padding:.2rem}.c-display-settings[data-v-70c7468e]{display:flex;flex-direction:row;justify-content:space-between;width:8rem}.c-change-display-btn[data-v-70c7468e]{display:flex;justify-content:center;align-items:center;width:3rem;margin:0 .5rem}.c-total-mult[data-v-70c7468e]{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding-left:.5rem;margin-bottom:1rem;color:var(--color-text)}.c-no-effect[data-v-70c7468e],.c-single-entry[data-v-70c7468e]{color:var(--color-text);-webkit-user-select:none;user-select:none}.c-single-entry[data-v-70c7468e]{text-align:left;padding:.2rem .5rem;margin:.2rem;border:.1rem dashed;cursor:pointer}.c-single-entry-highlight[data-v-70c7468e]{border:.1rem solid;font-weight:700;-webkit-animation:a-glow-text-data-v-70c7468e 1s infinite;animation:a-glow-text-data-v-70c7468e 1s infinite}@-webkit-keyframes a-glow-text-data-v-70c7468e{50%{background-color:var(--color-accent)}}@keyframes a-glow-text-data-v-70c7468e{50%{background-color:var(--color-accent)}}.c-dilation-entry[data-v-70c7468e]{border:.2rem solid;font-weight:700;-webkit-animation:a-glow-dilation-nerf-data-v-70c7468e 3s infinite;animation:a-glow-dilation-nerf-data-v-70c7468e 3s infinite}@-webkit-keyframes a-glow-dilation-nerf-data-v-70c7468e{50%{background-color:var(--color-bad)}}@keyframes a-glow-dilation-nerf-data-v-70c7468e{50%{background-color:var(--color-bad)}}.c-list-container[data-v-446e47ab]{position:relative;width:100rem}.l-multiplier-subtab-btn-container[data-v-446e47ab]{display:flex;flex-direction:row;justify-content:space-between;width:100rem;height:calc(4rem - var(--var-border-radius, .2rem))}.c-multiplier-subtab-btn[data-v-446e47ab]{width:100%;height:4rem;margin:0 .5rem -.1rem;z-index:1;text-align:center;font-family:Typewriter;font-size:1rem;font-weight:700;color:var(--color-text);background-color:var(--color-base);border:var(--var-border-width,.2rem) solid;border-radius:var(--var-border-radius,.5rem) var(--var-border-radius,.5rem) 0 0;cursor:pointer}.c-multiplier-subtab-btn--active[data-v-446e47ab]{border-bottom:none;padding-bottom:.2rem;cursor:default}.c-multiplier-tab-text-line[data-v-446e47ab]{color:var(--color-text);font-size:1.3rem}.c-symbol-overlay[data-v-446e47ab]{display:flex;width:100%;height:100%;top:-5%;position:absolute;justify-content:center;align-items:center;font-size:40rem;color:var(--color-text);text-shadow:0 0 3rem;pointer-events:none;-webkit-user-select:none;user-select:none;opacity:.2;z-index:1}.o-achievement-time[data-v-4f8b4d41]{font-weight:700;color:var(--color-accent)}.o-achievement--disabled[data-v-4f8b4d41]{background-color:var(--color-pelle--base);border-color:var(--color-bad)}.o-achievement--locked[data-v-4f8b4d41]{background-color:#a3a3a3;border-color:var(--color-bad)}.t-dark-metro .o-achievement--locked[data-v-4f8b4d41]{background-color:#9e9e9e}.t-inverted-metro .o-achievement--locked[data-v-4f8b4d41],.t-metro .o-achievement--locked[data-v-4f8b4d41],.t-s8 .o-achievement--locked[data-v-4f8b4d41]{background-color:#9e9e9e;border-color:var(--color-bad)}.t-s2 .o-achievement--locked[data-v-4f8b4d41]{background-color:transparent}.t-s5 .o-achievement--locked[data-v-4f8b4d41]{background-color:#222;border-color:#000}.t-s7 .o-achievement--locked[data-v-4f8b4d41]{background-color:#555;border-color:#111}.o-achievement--waiting[data-v-4f8b4d41]{background-color:#d1d161;border-color:#acac39}.t-dark-metro .o-achievement--waiting[data-v-4f8b4d41]{background-color:#b9b946;border-color:#7d7d36}.t-inverted-metro .o-achievement--waiting[data-v-4f8b4d41],.t-metro .o-achievement--waiting[data-v-4f8b4d41],.t-s8 .o-achievement--waiting[data-v-4f8b4d41]{background-color:#ffee58;border-color:#757575}.o-achievement--blink[data-v-4f8b4d41]{-webkit-animation:a-achievement--blink-data-v-4f8b4d41 2s step-start 0s infinite;animation:a-achievement--blink-data-v-4f8b4d41 2s step-start 0s infinite}@-webkit-keyframes a-achievement--blink-data-v-4f8b4d41{50%{visibility:hidden}}@keyframes a-achievement--blink-data-v-4f8b4d41{50%{visibility:hidden}}.o-achievement__reward[data-v-4f8b4d41]{width:1.5rem;height:1.5rem;position:absolute;left:0;bottom:0;font-size:1rem;color:#000;background:#5ac467;border-top:var(--var-border-width,.2rem) solid #127a20;border-right:var(--var-border-width,.2rem) solid #127a20;border-top-right-radius:var(--var-border-radius,.8rem);border-bottom-left-radius:var(--var-border-radius,.6rem)}.o-achievement__reward--locked[data-v-4f8b4d41]{background:#a3a3a3;border-color:var(--color-bad)}.o-achievement__reward--waiting[data-v-4f8b4d41]{background:#d1d161;border-color:#acac39}.o-achievement__reward--disabled[data-v-4f8b4d41]{background:var(--color-pelle--base);border-color:var(--color-bad)}.l-toggle-button[data-v-2b2bff8a]{font-size:12px}.c-custom-save-name__input[data-v-295855b9]{text-align:center;font-family:Typewriter;font-size:1.3rem;font-weight:700;border:.1rem solid #000;border-radius:var(--var-border-radius,.3rem)}.c-row-container[data-v-38893b62]{display:flex;flex-direction:row;width:100%}.c-empty-row[data-v-38893b62]{display:block;border:.05rem solid #999;color:var(--color-text);width:100%;padding:.2rem 0;margin:-.1rem}.l-no-records[data-v-38893b62]{height:5.4rem}.l-custom-tooltip[data-v-7d84efdb]{display:inline-block;position:static}.c-main-content[data-v-7d84efdb]{position:absolute}.c-pelle-upgrade[data-v-5883e125]{display:flex;flex-direction:column;width:18.5rem;height:12rem;position:relative;justify-content:center;align-items:center;font-family:Typewriter;font-size:.95rem;font-weight:700;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--color-pelle--secondary);border-radius:var(--var-border-radius,.5rem);box-shadow:inset 0 0 1rem .1rem var(--color-pelle--secondary);margin:.6rem .3rem;padding:2rem;cursor:pointer}.c-pelle-upgrade[data-v-5883e125]:hover{box-shadow:inset 0 0 2rem .1rem var(--color-pelle--secondary);transition-duration:.3s}.c-pelle-upgrade--galaxyGenerator[data-v-5883e125]{font-weight:700;color:#000;background:linear-gradient(var(--color-pelle--secondary),var(--color-pelle--base));box-shadow:none}.c-pelle-upgrade--unavailable[data-v-5883e125]{color:#000;background:#5f5f5f;box-shadow:none;cursor:default}.c-pelle-upgrade--faded[data-v-5883e125]{opacity:.3;box-shadow:none;cursor:default}.c-pelle-upgrade--bought[data-v-5883e125]{color:#000;background:var(--color-pelle--secondary);cursor:default}.c-pelle-upgrade--bought[data-v-5883e125]:hover,.c-pelle-upgrade--faded[data-v-5883e125]:hover,.c-pelle-upgrade--galaxyGenerator[data-v-5883e125]:hover,.c-pelle-upgrade--unavailable[data-v-5883e125]:hover{box-shadow:.1rem .1rem .5rem var(--color-pelle--secondary);transition-duration:.3s}.l-pelle-upgrade-gap[data-v-5883e125]{flex-shrink:0;height:.5rem}.c-improved-effect[data-v-5883e125]{font-weight:700;color:#0b0}.c-improved-effect--unavailable[data-v-5883e125]{font-weight:700;color:var(--color-infinity)}.s-base--metro .c-pelle-upgrade--unavailable[data-v-5883e125]{background-color:#9e9e9e}.c-collapse-icon-clickable[data-v-6db9a0ba]{position:absolute;top:50%;left:1.5rem;width:3rem;align-content:center;transform:translateY(-50%);cursor:pointer}.c-generator-unlock-button[data-v-6db9a0ba]{width:25rem;height:10rem;font-family:Typewriter;font-size:2rem;font-weight:700;color:#000;background:linear-gradient(var(--color-pelle--secondary),var(--color-pelle--base));border-radius:var(--var-border-radius,.5rem);padding:2rem;cursor:pointer}.l-galaxy-generator-upgrades-container[data-v-6db9a0ba]{display:flex;flex-wrap:wrap;justify-content:center}.c-galaxies-amount[data-v-6db9a0ba]{font-size:2.5rem;font-weight:700;background:linear-gradient(var(--color-pelle--secondary),var(--color-pelle--base));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.highlight[data-v-6db9a0ba]{font-size:2rem;font-weight:700;color:var(--color-pelle--base)}.c-increase-cap[data-v-6db9a0ba]{overflow:hidden;width:100%;height:11.4rem;max-width:70rem;position:relative;font-family:Typewriter;font-size:1.1rem;color:var(--color-text);background-color:#c1eaf0;border:var(--var-border-width,.1rem) solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);box-shadow:inset 0 0 .1rem .1rem var(--color-pelle--base);margin:1rem;padding:2rem}.s-base--dark .c-increase-cap[data-v-6db9a0ba]{background-color:#004b55}.c-increase-cap[data-v-6db9a0ba]:hover{box-shadow:inset 0 0 .1rem .1rem var(--color-pelle--base),.1rem .1rem .5rem var(--color-pelle--base);transition-duration:.12s}.c-increase-cap-available[data-v-6db9a0ba]{cursor:pointer}.c-increase-cap-text[data-v-6db9a0ba]{position:relative;z-index:1}.c-increase-cap-background[data-v-6db9a0ba]{height:100%;position:absolute;top:0;left:0;z-index:0;background:linear-gradient(var(--color-text-inverted),var(--color-pelle--base));transition:width .1s}.c-big-text[data-v-6db9a0ba]{font-size:2.5rem;text-shadow:.2rem .2rem .2rem #888}.s-base--dark .c-big-text[data-v-6db9a0ba]{text-shadow:.2rem .2rem .2rem #000}.c-medium-text[data-v-6db9a0ba]{font-size:2rem;text-shadow:.2rem .2rem .2rem #888}.s-base--dark .c-medium-text[data-v-6db9a0ba]{text-shadow:.2rem .2rem .2rem #000}@-webkit-keyframes a-pelle-bar-overfill-pulse-data-v-4370f872{0%{box-shadow:0 0 .7rem 1rem rgba(237,20,61,.4)}50%{box-shadow:0 0 1.5rem 0 rgba(237,20,61,.4)}to{box-shadow:0 0 .7rem 1rem rgba(237,20,61,.4)}}@keyframes a-pelle-bar-overfill-pulse-data-v-4370f872{0%{box-shadow:0 0 .7rem 1rem rgba(237,20,61,.4)}50%{box-shadow:0 0 1.5rem 0 rgba(237,20,61,.4)}to{box-shadow:0 0 .7rem 1rem rgba(237,20,61,.4)}}@-webkit-keyframes a-pelle-bar-overfill-pulse-but-green-data-v-4370f872{0%{box-shadow:0 0 .7rem 1rem rgba(124,183,39,.533)}50%{box-shadow:0 0 1.5rem 0 rgba(124,183,39,.533)}to{box-shadow:0 0 .7rem 1rem rgba(124,183,39,.533)}}@keyframes a-pelle-bar-overfill-pulse-but-green-data-v-4370f872{0%{box-shadow:0 0 .7rem 1rem rgba(124,183,39,.533)}50%{box-shadow:0 0 1.5rem 0 rgba(124,183,39,.533)}to{box-shadow:0 0 .7rem 1rem rgba(124,183,39,.533)}}@-webkit-keyframes a-pelle-bar-filling-sweep-data-v-4370f872{0%{width:0;left:0}10%{width:2rem;left:0}90%{width:2rem;left:calc(100% - 2rem)}to{width:0;left:100%}}@keyframes a-pelle-bar-filling-sweep-data-v-4370f872{0%{width:0;left:0}10%{width:2rem;left:0}90%{width:2rem;left:calc(100% - 2rem)}to{width:0;left:100%}}@-webkit-keyframes a-pelle-bar-unfinished-milestone-flash-data-v-4370f872{0%{opacity:1}20%{opacity:1}50%{opacity:.3}80%{opacity:1}to{opacity:1}}@keyframes a-pelle-bar-unfinished-milestone-flash-data-v-4370f872{0%{opacity:1}20%{opacity:1}50%{opacity:.3}80%{opacity:1}to{opacity:1}}.c-pelle-rift-bar[data-v-4370f872]{display:flex;width:32rem;height:5rem;position:relative;justify-content:center;align-items:center;background:linear-gradient(45deg,#fff,#e6e6e6);border:var(--var-border-width,.2rem) solid var(--color-pelle--secondary);border-radius:var(--var-border-radius,.5rem);margin-bottom:1rem}.s-base--metro .c-pelle-rift-bar[data-v-4370f872]{width:31.9rem;height:4.8rem}.s-base--dark .c-pelle-rift-bar[data-v-4370f872]{background:linear-gradient(45deg,#1e1e1e,#262626)}.c-pelle-rift-bar--filling[data-v-4370f872],.c-pelle-rift-bar--idle[data-v-4370f872]{transition:box-shadow .5s;cursor:pointer}.c-pelle-rift-bar--filling[data-v-4370f872]:hover,.c-pelle-rift-bar--idle[data-v-4370f872]:hover{box-shadow:0 0 2rem var(--color-pelle--secondary)}.l-overflow-hidden[data-v-4370f872]{overflow:hidden;width:32rem;height:5rem;position:absolute;top:-.2rem;left:-.2rem;z-index:0;border:var(--var-border-width,.16rem) solid transparent;border-radius:var(--var-border-radius,.5rem)}.o-pelle-rift-bar-overlay[data-v-4370f872]{width:100%;height:100%;position:absolute;bottom:0;left:0;z-index:0;box-shadow:inset 0 0 .3rem .1rem #222}.c-pelle-rift-bar--filling .o-pelle-rift-bar-overlay[data-v-4370f872]{box-shadow:inset 0 0 .3rem .1rem var(--color-pelle--secondary)}.o-pelle-rift-bar-fill[data-v-4370f872]{height:100%;position:absolute;bottom:0;left:0;z-index:0;opacity:.7;background:var(--color-pelle--secondary)}.o-pelle-rift-bar-reducedto[data-v-4370f872]{height:100%;position:absolute;right:0;bottom:0;z-index:0;background:var(--color-pelle--base);filter:brightness(.5)}.o-pelle-rift-bar-permanent[data-v-4370f872]{width:100%;height:100%;position:absolute;bottom:0;left:0;z-index:0;opacity:.5;background:var(--color-pelle--secondary);filter:grayscale(.6)}.o-pelle-rift-bar-overfilled[data-v-4370f872]{width:100%;height:100%;position:absolute;z-index:1;opacity:.5;background:var(--color-pelle--base)}.c-pelle-rift-bar-overfill-container[data-v-4370f872]{-webkit-animation:a-pelle-bar-overfill-pulse-data-v-4370f872 1s linear infinite;animation:a-pelle-bar-overfill-pulse-data-v-4370f872 1s linear infinite}.t-s1 .c-pelle-rift-bar-overfill-container[data-v-4370f872]{-webkit-animation:a-pelle-bar-overfill-pulse-but-green-data-v-4370f872 1s linear infinite;animation:a-pelle-bar-overfill-pulse-but-green-data-v-4370f872 1s linear infinite}.o-pelle-rift-bar-active-fill[data-v-4370f872]{height:100%;position:absolute;z-index:1;opacity:.3;background:var(--color-pelle--base);-webkit-animation:a-pelle-bar-filling-sweep-data-v-4370f872 2s linear infinite;animation:a-pelle-bar-filling-sweep-data-v-4370f872 2s linear infinite}.o-pelle-rift-bar-percentage[data-v-4370f872]{z-index:2;font-size:1.5rem;color:var(--color-text);filter:drop-shadow(.1rem .1rem .1rem var(--color-pelle--base));pointer-events:none}.c-pelle-rift-bar--idle .l-overflow-hidden[data-v-4370f872],.c-pelle-rift-bar--idle .o-pelle-rift-bar-percentage[data-v-4370f872]{opacity:.6}.o-pelle-rift-bar-milestone-hover-container[data-v-4370f872]{height:100%}.o-pelle-rift-bar-milestone-line[data-v-4370f872]{width:.25rem;height:100%;position:absolute;z-index:1;background:var(--color-pelle--base);-webkit-animation:a-pelle-bar-unfinished-milestone-flash-data-v-4370f872 1s linear infinite;animation:a-pelle-bar-unfinished-milestone-flash-data-v-4370f872 1s linear infinite}.o-pelle-rift-bar-milestone-line--unlocked[data-v-4370f872]{-webkit-animation:none;animation:none}.o-pelle-rift-bar-milestone-line--disabled[data-v-4370f872]{filter:brightness(.25);-webkit-animation:none;animation:none}.o-pelle-rift-bar-milestone-hover-area{width:2rem;height:100%}.c-pelle-milestone-tooltip{width:20rem;z-index:4;font-size:1.1rem;font-weight:700;color:var(--color-text);background-color:var(--color-base);border:.1rem solid var(--color-pelle--base)}.s-base--dark .c-pelle-milestone-tooltip{background-color:#111}.c-pelle-milestone-tooltip--unlocked{color:#000;box-shadow:0 0 0 .1rem #000}.c-pelle-milestone-tooltip--unlocked,.s-base--dark .c-pelle-milestone-tooltip--unlocked{background-color:var(--color-pelle--base)}.c-pelle-strike{min-height:3.8rem;z-index:3;font-size:1.3rem;font-weight:700;color:#000;background:var(--color-pelle--base);border:var(--var-border-width,.2rem) solid #000;border-radius:var(--var-border-radius,.5rem)}.c-pelle-strike-container{width:28rem;height:5rem;z-index:3;padding:.5rem .5rem 2rem}.c-pelle-strike-header{padding:.7rem;cursor:pointer}.c-pelle-strike-dropdown{display:flex;flex-direction:column;justify-content:space-between;font-size:1.05rem;padding:.7rem}.c-pelle-single-bar[data-v-aa9407ec]{display:flex;flex-direction:column;justify-content:flex-start}.c-pelle-rift[data-v-aa9407ec]{display:flex;flex-direction:column;align-items:center;border:var(--var-border-width,.2rem) solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);box-shadow:inset 0 0 1rem .1rem rgba(237,20,61,.45),0 0 1rem .1rem rgba(237,20,61,.45);margin-top:1.2rem;padding:.5rem}.t-s1 .c-pelle-rift[data-v-aa9407ec]{box-shadow:none}.c-pelle-rift-row[data-v-aa9407ec]{display:flex;justify-content:center;align-items:center}.c-pelle-rift-column[data-v-aa9407ec]{display:flex;flex-direction:column;align-items:center}.c-pelle-rift-rift-info-container[data-v-aa9407ec]{height:5rem;font-weight:400;color:var(--color-text)}.c-pelle-rift-status[data-v-aa9407ec]{display:flex;flex-direction:column;width:28rem;align-items:center}.c-pelle-rift-name-header[data-v-aa9407ec]{font-weight:700;color:var(--color-pelle--base);padding:.2rem}.c-collapse-icon-clickable[data-v-320a9096]{position:absolute;top:50%;left:1.5rem;width:3rem;align-content:center;transform:translateY(-50%);cursor:pointer}.c-pelle-bar-container[data-v-320a9096]{display:flex;flex-direction:column;align-items:center}.o-strike-warning[data-v-320a9096]{color:var(--color-pelle--base);font-size:1.4rem}.c-remnant-factors-container{position:relative;z-index:4}.c-remnant-factors-container .l-expanding-control-box{transition:opacity .5s}.c-remnant-factors{z-index:4;font-weight:700;color:var(--color-text);background-color:var(--color-text-inverted);border:var(--var-border-width,.2rem) solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);padding:.3rem}.c-remnant-factors-text{padding:.3rem}.l-remnant-factors-row{display:flex;width:100%}.l-remnant-factors-col{display:flex;flex-grow:0;flex-shrink:0;flex-direction:column;margin-left:2rem}.l-remnant-factors-col--first{flex-grow:1;margin-left:0}.l-remnant-factors-item{height:2rem;text-align:left}.c-collapse-icon-clickable[data-v-2eb69680]{position:absolute;top:50%;left:1.5rem;width:3rem;align-content:center;transform:translateY(-50%);cursor:pointer}.o-pelle-button[data-v-2eb69680]{font-family:Typewriter;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);margin:1rem 0 .5rem;padding:1rem;transition-duration:.12s;cursor:pointer}.o-pelle-button[data-v-2eb69680]:hover{box-shadow:.1rem .1rem .3rem var(--color-pelle--base)}.c-pelle-upgrade-container[data-v-2eb69680]{display:flex;flex-wrap:wrap;max-width:110rem;justify-content:center}.c-armageddon-container[data-v-2eb69680]{display:flex;justify-content:center;align-items:flex-start;align-self:center;border:var(--var-border-width,.2rem) solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);padding:1rem}.c-armageddon-button-container[data-v-2eb69680]{width:32rem;margin-bottom:.5rem}.c-armageddon-resources-container[data-v-2eb69680]{width:41.5rem}.c-remnants-amount[data-v-2eb69680]{font-size:2rem;font-weight:700;color:var(--color-pelle--base)}.l-pelle-all-content-container[data-v-57ae2e2e],.l-pelle-celestial-tab[data-v-57ae2e2e]{display:flex;flex-direction:column;align-items:center}.l-pelle-all-content-container[data-v-57ae2e2e]{width:100%}.o-pelle-button[data-v-57ae2e2e]{font-family:Typewriter;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);margin-bottom:1rem;padding:1rem;transition-duration:.12s;cursor:pointer}.o-pelle-button[data-v-57ae2e2e]:hover{box-shadow:.1rem .1rem .3rem var(--color-pelle--base)}.o-pelle-quotes-button[data-v-57ae2e2e]{display:flex;width:7rem;height:7rem;justify-content:center;align-items:center;font-size:5rem;font-weight:900;color:var(--color-pelle--base)}.pelle-unlock-requirements[data-v-57ae2e2e]{width:50rem;padding:.5rem;font-size:2.4rem}.pelle-doom-button[data-v-57ae2e2e],.pelle-unlock-requirements[data-v-57ae2e2e]{color:var(--color-pelle--base);background:#000;border:var(--var-border-width,.2rem) solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem)}.pelle-doom-button[data-v-57ae2e2e]{width:20rem;align-self:center;font-family:Typewriter;font-size:3rem;padding:1rem;transition-duration:.4s;cursor:pointer}.pelle-doom-button[data-v-57ae2e2e]:hover{box-shadow:0 0 2rem var(--color-pelle--base)}.pelle-icon-container[data-v-57ae2e2e]{display:flex;width:15rem;height:15rem;justify-content:center;align-items:center;font-size:10rem;text-shadow:0 0 1.5rem #9b0101;background:#fff;border:var(--var-border-width,.4rem) solid var(--color-pelle--base);border-radius:50%;box-shadow:0 0 1.5rem #9b0101;margin:auto;margin-top:3rem;transition-duration:.4s}.pelle-doom-button:hover .pelle-icon-container[data-v-57ae2e2e]{color:var(--color-pelle--base);background:#000}@-webkit-keyframes a-roll-data-v-57ae2e2e{to{transform:rotateY(1turn)}}@keyframes a-roll-data-v-57ae2e2e{to{transform:rotateY(1turn)}}.pelle-icon[data-v-57ae2e2e]{-webkit-animation:a-roll-data-v-57ae2e2e 8s linear infinite;animation:a-roll-data-v-57ae2e2e 8s linear infinite}.c-icon-container[data-v-0c86ef47]{display:grid;grid-template-columns:7rem 20rem 4rem 4rem 4rem 4rem 30rem 20rem;align-items:center;font-size:1.3rem}.c-no-record[data-v-0c86ef47]{align-items:center;font-size:1.3rem;padding:.65rem;width:100%}.o-icon[data-v-0c86ef47]{font-size:2.8rem}.l-icon-on[data-v-0c86ef47]{color:var(--color-text)}.l-icon-off[data-v-0c86ef47]{color:#999}.l-milestone-title[data-v-ade67c12]{font-size:1.3rem;text-decoration:underline}.l-milestone-slow[data-v-ade67c12]{background-color:var(--color-bad)}.l-milestone-fast[data-v-ade67c12]{background-color:var(--color-good)}.l-milestone-fastest[data-v-ade67c12]{background-color:var(--color-celestials)}.c-run-page-nav[data-v-e1e0cc3c]{display:flex;flex-direction:row;justify-content:space-between;align-items:center;font-size:1.3rem;width:60rem}.c-previous-runs[data-v-e1e0cc3c]{display:flex;flex-direction:column;align-items:center;color:var(--color-text)}.c-single-run[data-v-e1e0cc3c]{display:flex;flex-direction:row;padding:.5rem;border:.1rem solid;width:100rem}.o-selected-btn[data-v-e1e0cc3c]{background-color:var(--color-good)}.c-legend[data-v-e1e0cc3c]{display:flex;flex-direction:row;justify-content:space-around;align-items:center;width:95rem}.c-legend-cell[data-v-e1e0cc3c]{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;width:30rem;font-size:1.5rem}.o-box[data-v-e1e0cc3c]{display:grid;width:2rem;height:2rem;margin:.3rem;border:var(--var-border-width,.2rem) solid var(--color-text);border-radius:var(--var-border-radius,.5rem)}.l-milestone-none[data-v-e1e0cc3c]{background-color:var(--color-base)}.l-milestone-slow[data-v-e1e0cc3c]{background-color:var(--color-bad)}.l-milestone-fast[data-v-e1e0cc3c]{background-color:var(--color-good)}.l-milestone-fastest[data-v-e1e0cc3c]{background-color:var(--color-celestials)}.c-ra-upgrade-icon[data-v-0a2bf9d3]{font-weight:700}.l-ra-pet-milestones[data-v-60840c17]{display:flex;justify-content:center}.c-ra-pet-upgrade-memory[data-v-60840c17]{border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.c-ra-pet-upgrade-chunk[data-v-60840c17]{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0}.l-ra-pet-postcompletion-spacer[data-v-60840c17]{margin-bottom:.8rem}.c-ra-upgrade[data-v-20e5f9b8]{display:flex;flex-direction:column;width:18.5rem;height:12rem;position:relative;justify-content:center;align-items:center;font-family:Typewriter;font-size:.95rem;font-weight:700;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--cel-color);border-radius:var(--var-border-radius,.5rem);box-shadow:inset 0 0 1rem .1rem var(--cel-color);margin:.6rem .3rem;padding:2rem;cursor:pointer}.c-ra-upgrade[data-v-20e5f9b8]:hover{box-shadow:inset 0 0 2rem .1rem var(--cel-color);transition-duration:.3s}.c-ra-upgrade--unavailable[data-v-20e5f9b8]{color:#000;background:#5f5f5f;box-shadow:none;cursor:not-allowed}.c-ra-upgrade--bought[data-v-20e5f9b8]{color:#000;background:var(--cel-color);cursor:default}.c-ra-upgrade-container[data-v-1e412a9e]{display:flex;flex-wrap:wrap;max-width:140rem;justify-content:center}.l-ra-panel-container[data-v-1e412a9e]{width:140rem;border:var(--var-border-width,.2rem) solid var(--color-ra--base);border-radius:var(--var-border-radius,.5rem);margin:1rem;padding:1rem;-webkit-user-select:none;user-select:none}.line[data-v-1e412a9e]{width:100%;height:.1rem;border:0;border-top:.1rem solid var(--color-ra--base);margin:.5rem 0;padding:0}.c-reality-upgrade-infotext[data-v-5ab3ca65]{color:var(--color-text);margin:-1rem 0 1.5rem}.max-accent[data-v-3fdc215a]{color:var(--color-accent);text-shadow:0 0 .2rem var(--color-reality-dark);cursor:default}.modified-cap[data-v-3fdc215a]{margin:-.8rem 0 .8rem;font-weight:700}.vld-overlay,.vld-shown{overflow:hidden}.vld-overlay{bottom:0;left:0;position:absolute;right:0;top:0;align-items:center;display:none;justify-content:center;z-index:9999}.vld-overlay.is-active{display:flex}.vld-overlay.is-full-page{z-index:9999;position:fixed}.vld-overlay .vld-background{bottom:0;left:0;position:absolute;right:0;top:0;background:#fff;opacity:.5}.vld-overlay .vld-icon,.vld-parent{position:relative}.c-shop-button-container[data-v-27835b02]{display:flex;flex-direction:column;width:30rem;height:18rem;justify-content:space-between;color:#fff;background:#3c3c3c;border:var(--var-border-width,.2rem) solid #1f7d1f;border-radius:var(--var-border-radius,.5rem);margin:.5rem;padding:1rem}.o-shop-button-button[data-v-27835b02]{display:flex;align-items:center;font-family:Typewriter;background:#40e0d0;border:none;border-radius:var(--var-border-radius,.5rem);margin:0 auto;padding:.5rem 2rem;cursor:pointer}.o-shop-button-button--disabled[data-v-27835b02]{background:#969696;cursor:default}.o-shop-button-button__img[data-v-27835b02]{height:40px;margin-left:1rem}.o-shop-button-multiplier[data-v-27835b02]{display:block;font-size:1.5rem;font-weight:700;margin:.5rem 0}.o-shop-button-multiplier--disabled[data-v-27835b02]{color:red;text-decoration:line-through}.o-shop-button-locked-text[data-v-27835b02]{display:block;font-size:1.2rem;font-weight:700;color:var(--color-bad)}.shop[data-v-21aa9272]{display:flex;flex-direction:column;justify-content:center;align-items:center;color:var(--color-text)}.c-shop-disclaimer[data-v-21aa9272]{width:80%;max-width:100rem;font-size:1.8rem;font-weight:700;color:#000;background:var(--color-bad);border:var(--var-border-width,.2rem) solid #000;border-radius:var(--var-border-radius,1rem);margin-top:.8rem}.t-s1 .c-shop-disclaimer[data-v-21aa9272],.t-s6 .c-shop-disclaimer[data-v-21aa9272],.t-s10 .c-shop-disclaimer[data-v-21aa9272]{color:var(--color-bad);background:#000;border-color:var(--color-bad)}.c-login-info[data-v-21aa9272]{font-size:1.5rem}.c-shop-header[data-v-21aa9272]{display:flex;justify-content:center;align-items:center;font-size:2rem;margin:1rem 0}.c-shop-header__img[data-v-21aa9272]{height:40px;margin:0 1rem}.o-shop-button-button[data-v-21aa9272]{display:flex;align-items:center;font-family:Typewriter;background:#40e0d0;border:none;border-radius:var(--var-border-radius,.5rem);margin:auto;margin-top:1rem;padding:.5rem 2rem;cursor:pointer}.o-shop-button-button--disabled[data-v-21aa9272]{background:#969696;cursor:default}.l-shop-buttons-container[data-v-21aa9272]{display:flex;justify-content:center;flex-wrap:wrap;width:93rem;margin:auto}.c-shop-header .o-shop-button-button[data-v-21aa9272]{margin:0}.c-matter-scale-container[data-v-5e391bac]{height:5rem}.c-stats-tab-general[data-v-5e391bac]{color:var(--color-text)}.c-stats-tab-title[data-v-5e391bac]{font-size:2rem;font-weight:700}.c-stats-tab-subheader[data-v-5e391bac]{height:15rem}.c-stats-tab-infinity[data-v-5e391bac]{color:var(--color-infinity)}.c-stats-tab-eternity[data-v-5e391bac]{color:var(--color-eternity)}.c-stats-tab-reality[data-v-5e391bac]{color:var(--color-reality)}.c-stats-tab-doomed[data-v-5e391bac]{color:var(--color-pelle--base)}.c-stats-tab-mending[data-v-5e391bac]{color:var(--color-mending)}.o-teresa-shop-button--pelle-disabled[data-v-1ce43eb4]{text-decoration:line-through;cursor:auto}.c-disabled-pour[data-v-462ad4de]{opacity:.8;pointer-events:none}.o-dilation-upgrade[data-v-546a6b9c]{width:19rem;height:10rem;font-family:Typewriter,serif;font-size:1.05rem;font-weight:700;background:#000;border:.1rem solid;border-radius:var(--var-border-radius,.4rem);transition-duration:.2s}.o-dilation-upgrade--available[data-v-546a6b9c]{color:var(--color-dilation);border-color:var(--color-dilation);-webkit-animation:a-dilation-btn-glow 10s infinite;animation:a-dilation-btn-glow 10s infinite;cursor:pointer}.o-dilation-upgrade--rebuyable.o-dilation-upgrade--available[data-v-546a6b9c]{color:#64ddad;border-color:#64ddad}.o-dilation-upgrade--available[data-v-546a6b9c]:hover{background-color:#fff}.o-dilation-upgrade--bought[data-v-546a6b9c],.o-dilation-upgrade--capped[data-v-546a6b9c]{color:#000;background-color:var(--color-dilation);border-color:#000}.o-dilation-upgrade--useless[data-v-546a6b9c]{color:#000;background-color:var(--color-pelle--base);filter:grayscale(50%)}.o-dilation-upgrade--unavailable[data-v-546a6b9c]{color:#181818;background-color:#5f5f5f;border-color:#3e8a0f}.o-dilation-upgrade--rebuyable.o-dilation-upgrade--unavailable[data-v-546a6b9c]{border-color:#64ddad}.o-dilation-upgrade--unavailable[data-v-546a6b9c]:hover{color:#1d1d1d;background-color:#600}.o-dilation-upgrade__description--small-text[data-v-546a6b9c]{font-size:.95rem}.s-base--metro .o-dilation-upgrade--unavailable[data-v-546a6b9c],.t-s1 .o-dilation-upgrade--unavailable[data-v-546a6b9c]{color:#000;background-color:#9e9e9e;border:none;box-shadow:.1rem .1rem .1rem 0 #000}.s-base--metro .o-dilation-upgrade--unavailable[data-v-546a6b9c]:hover{background-color:#ef5350}.t-s1 .o-dilation-upgrade--unavailable[data-v-546a6b9c]:hover{background-color:#d72621}.t-dark .o-dilation-upgrade--available[data-v-546a6b9c]:hover,.t-s6 .o-dilation-upgrade--available[data-v-546a6b9c]:hover,.t-s10 .o-dilation-upgrade--available[data-v-546a6b9c]:hover{color:var(--color-dilation);background-color:#fff}.t-dark .o-dilation-upgrade--rebuyable.o-dilation-upgrade--available[data-v-546a6b9c]:hover,.t-s6 .o-dilation-upgrade--rebuyable.o-dilation-upgrade--available[data-v-546a6b9c]:hover,.t-s10 .o-dilation-upgrade--rebuyable.o-dilation-upgrade--available[data-v-546a6b9c]:hover{color:#64ddad}.t-dark .o-dilation-upgrade--bought[data-v-546a6b9c],.t-dark .o-dilation-upgrade--capped[data-v-546a6b9c]{background-color:var(--color-dilation)}.t-s6 .o-dilation-upgrade--unavailable[data-v-546a6b9c],.t-s10 .o-dilation-upgrade--unavailable[data-v-546a6b9c]{color:gray;background-color:#000}.t-dark .o-dilation-upgrade--unavailable[data-v-546a6b9c]{color:#000;background-color:#23292a}.t-dark .o-dilation-upgrade--unavailable[data-v-546a6b9c]:hover,.t-s6 .o-dilation-upgrade--unavailable[data-v-546a6b9c]:hover,.t-s10 .o-dilation-upgrade--unavailable[data-v-546a6b9c]:hover{color:#000;background-color:var(--color-bad);border-color:var(--color-bad)}.t-s4 .o-dilation-upgrade--available[data-v-546a6b9c]{-webkit-animation:a-dilation-btn-glow--cancer 10s infinite;animation:a-dilation-btn-glow--cancer 10s infinite}.t-s6 .o-dilation-upgrade--bought[data-v-546a6b9c],.t-s6 .o-dilation-upgrade--capped[data-v-546a6b9c],.t-s10 .o-dilation-upgrade--bought[data-v-546a6b9c],.t-s10 .o-dilation-upgrade--capped[data-v-546a6b9c]{background:var(--color-dilation)}.max-accent[data-v-d9200254]{color:var(--color-dilation);font-size:1.5rem;text-shadow:0 0 .2rem var(--color-reality-dark);cursor:default}.l-dilation-upgrades-grid[data-v-d9200254]{display:flex;flex-direction:column}.l-dilation-upgrades-grid__row[data-v-d9200254]{display:flex;flex-direction:row;justify-content:center}.l-dilation-upgrades-grid__cell[data-v-d9200254]{margin:1.2rem 1.5rem}.sc-two[data-v-d9200254]{color:#ffa000}.o-continuum[data-v-bb681570]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-bb681570]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.c-modern-dim-tooltip-container .c-modern-dim-purchase-count-tooltip[data-v-1b5405e2]{position:absolute;width:20rem;top:50%;font-size:1.3rem;line-height:1.6rem;color:#fff;background:#000;border:.1rem solid var(--color-text);border-radius:var(--var-border-width,.5rem);transform:translate(calc(var(--x-pos) - 1rem),-50%);padding:.5rem;visibility:hidden}.o-continuum[data-v-1b5405e2]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-1b5405e2]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.o-v-start-text[data-v-0d267545]{font-size:1.5rem}.l-placeholder-invisible[data-v-0d267545]{opacity:0}.l-v-goal-reduction-spacer[data-v-0d267545]{height:.8rem}.l-cursed-glyph-creation[data-v-0d267545]{background:var(--color-effarig--base)}.l-selected-tab[data-v-0d267545]{color:var(--color-v--base)}.c-modal__header[data-v-0ec9a581]{margin-bottom:.5rem}.c-remains-amount[data-v-3bb497cc]{font-size:1.5rem;color:var(--color-text)}.l-mending-upgrade-grid[data-v-3bb497cc]{display:flex;flex-direction:column}.l-mending-upgrade-grid__row[data-v-3bb497cc]{display:flex;flex-direction:row}.l-mending-upgrade-grid__cell[data-v-3bb497cc]{margin:.5rem .8rem}.c-remains-amount__accent[data-v-3bb497cc]{font-size:2rem;color:var(--color-mending)}.c-mending-upgrade-infotext[data-v-3bb497cc]{font-size:1rem;color:var(--color-text);margin:-1rem 0 1.5rem}.o-mending-milestone__reward[data-v-2dc5a23e]{width:50rem;height:8rem;font-family:Typewriter,serif;font-size:1.2rem;font-weight:700;color:#000;border:.1rem solid var(--color-mending);border-radius:var(--var-border-radius,.4rem);transition-duration:.2s}.l-warp-all-content-container[data-v-6d9af666],.l-warp-tab[data-v-6d9af666]{display:flex;flex-direction:column;align-items:center}.l-warp-all-content-container[data-v-6d9af666]{width:100%}.o-warp-button[data-v-6d9af666]{font-family:Typewriter;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);margin-bottom:1rem;padding:1rem;transition-duration:.12s;cursor:pointer}.o-warp-button[data-v-6d9af666]:hover{box-shadow:.1rem .1rem .3rem var(--color-pelle--base)}.o-warp-quotes-button[data-v-6d9af666]{display:flex;width:7rem;height:7rem;justify-content:center;align-items:center;font-size:5rem;font-weight:900;color:var(--color-pelle--base)}.warp-unlock-requirements[data-v-6d9af666]{width:50rem;padding:.5rem;font-size:2.4rem}.warp-doom-button[data-v-6d9af666],.warp-unlock-requirements[data-v-6d9af666]{color:var(--color-pelle--base);background:#000;border:var(--var-border-width,.2rem) solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem)}.warp-doom-button[data-v-6d9af666]{width:20rem;align-self:center;font-family:Typewriter;font-size:3rem;padding:1rem;transition-duration:.4s;cursor:pointer}.warp-doom-button[data-v-6d9af666]:hover{box-shadow:0 0 2rem var(--color-pelle--base)}.warp-icon-container[data-v-6d9af666]{display:flex;width:15rem;height:15rem;justify-content:center;align-items:center;font-size:10rem;text-shadow:0 0 1.5rem #9b0101;background:#fff;border:var(--var-border-width,.4rem) solid var(--color-pelle--base);border-radius:50%;box-shadow:0 0 1.5rem #9b0101;margin:auto;margin-top:3rem;transition-duration:.4s}.warp-doom-button:hover .pelle-icon-container[data-v-6d9af666]{color:var(--color-pelle--base);background:#000}@-webkit-keyframes a-roll-data-v-6d9af666{to{transform:rotateY(1turn)}}@keyframes a-roll-data-v-6d9af666{to{transform:rotateY(1turn)}}.warp-icon[data-v-6d9af666]{-webkit-animation:a-roll-data-v-6d9af666 8s linear infinite;animation:a-roll-data-v-6d9af666 8s linear infinite}.c-fragments-amount__accent[data-v-a4bcfcc4]{font-size:2rem;color:var(--color-pelle--base)}.o-pelle-button[data-v-a4bcfcc4]{font-family:Typewriter;color:var(--color-text);background:var(--color-text-inverted);border:.1rem solid var(--color-pelle--base);border-radius:var(--var-border-radius,.5rem);margin-bottom:1rem;padding:1rem;transition-duration:.12s;cursor:pointer}.o-pelle-button[data-v-a4bcfcc4]:hover{box-shadow:.1rem .1rem .3rem var(--color-pelle--base)}.o-continuum[data-v-4c8aa071]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-4c8aa071]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.c-modern-dim-tooltip-container .c-modern-dim-purchase-count-tooltip[data-v-32da9d66]{position:absolute;width:20rem;top:50%;font-size:1.3rem;line-height:1.6rem;color:#fff;background:#000;border:.1rem solid var(--color-text);border-radius:var(--var-border-width,.5rem);transform:translate(calc(var(--x-pos) - 1rem),-50%);padding:.5rem;visibility:hidden}.o-continuum[data-v-32da9d66]{border-color:var(--color-laitela--accent);color:var(--color-laitela--accent);background:var(--color-laitela--base)}.o-continuum[data-v-32da9d66]:hover{border-color:var(--color-laitela--accent);color:var(--color-laitela--base);background:var(--color-laitela--accent)}.c-s12-desktop-icons-container[data-v-6bd6fa88]{--icon-font-size:1.1rem;--icon-line-height:1.1;--icon-size:4rem;--icon-margin:0.2rem;--icon-inner-padding:0.3rem;--total-icon-height:calc(var(--icon-size) + var(--icon-margin)*2 + var(--icon-font-size)*var(--icon-line-height)*2 + var(--icon-inner-padding)*2);display:inline-flex;flex-direction:column;flex-wrap:wrap;height:calc(100% - var(--s12-taskbar-height));position:absolute;top:0;left:0;align-items:flex-start;-webkit-user-select:none;user-select:none}.c-s12-desktop-icon[data-v-6bd6fa88]{overflow:hidden;width:7rem;height:var(--total-icon-height);position:relative;z-index:0;margin:.2rem}.c-s12-desktop-icon__inner[data-v-6bd6fa88]{display:flex;overflow:hidden;flex-direction:column;width:100%;position:relative;align-items:center;padding:var(--icon-inner-padding);cursor:pointer}.c-s12-desktop-icon--selected[data-v-6bd6fa88]{overflow:visible;z-index:1}.c-s12-desktop-icon__inner[data-v-6bd6fa88]:before{content:"";position:absolute;inset:0;z-index:-1;opacity:0;background-color:hsla(0,0%,75%,.3);background-image:var(--s12-background-gradient);border:.1rem solid #fff;border-radius:.5rem;transition:opacity .2s}.c-s12-desktop-icon:hover .c-s12-desktop-icon__inner[data-v-6bd6fa88]:before{opacity:.5}.c-s12-desktop-icon.c-s12-desktop-icon--selected .c-s12-desktop-icon__inner[data-v-6bd6fa88]:before{opacity:1}.c-s12-desktop-icon__img[data-v-6bd6fa88]{height:var(--icon-size);margin:var(--icon-margin)}.c-s12-desktop-icon__text[data-v-6bd6fa88]{overflow:hidden;width:100%;font-family:Segoe UI,Typewriter;font-size:var(--icon-font-size);font-weight:400;line-height:var(--icon-line-height);color:#fff;text-shadow:0 0 .3rem var(--s12-border-color)}#page[data-v-1ee338fc]{width:100%;height:100%;position:absolute;top:0;z-index:1;background-color:hsla(0,0%,100%,.5);background-image:var(--s12-background-gradient);margin-top:0;padding:2.4rem 1rem 1rem;-webkit-backdrop-filter:blur(1rem);backdrop-filter:blur(1rem)}.c-s12-window__outer[data-v-1ee338fc]{transition:opacity .3s,transform .4s,visibility .3s;transform-style:preserve-3d}.c-s12-window__outer--minimised[data-v-1ee338fc]{visibility:hidden;opacity:0;transform:rotateX(90deg) scale(.7);pointer-events:none}.c-s12-window__inner[data-v-1ee338fc]{overflow:hidden;width:100%;height:100%;position:relative;z-index:0;background-color:#111014;border:.15rem solid var(--s12-border-color);border-radius:.15rem;box-shadow:0 0 .4rem .2rem hsla(0,0%,100%,.5)}.c-classic.c-s12-window__inner[data-v-1ee338fc]{background-color:#fff}.c-s12-window__content-container[data-v-1ee338fc]{overflow-x:hidden;overflow-y:auto;width:100%;height:100%;position:relative;scrollbar-gutter:stable both-edges}.c-modal__title[data-v-1ee338fc]{font-family:Segoe UI,Typewriter;color:#000}.c-s12-subtabs[data-v-a1a81406]{display:flex;visibility:hidden;position:absolute;bottom:calc(var(--s12-taskbar-height) + .5rem);z-index:6;opacity:0;background-color:hsla(0,0%,47%,.7);background-image:var(--s12-background-gradient);border:.15rem solid var(--s12-border-color);border-radius:.5rem;box-shadow:0 0 1rem .2rem var(--s12-border-color),inset 0 0 .4rem .1rem hsla(0,0%,100%,.7);transform:translate(-50%,20%);transition:transform .2s,opacity .2s,visibility .2s;pointer-events:none;-webkit-backdrop-filter:blur(.3rem);backdrop-filter:blur(.3rem)}.c-s12-subtabs--compact[data-v-a1a81406]{flex-direction:column;padding:.5rem;padding-bottom:0}.c-s12-subtabs--show[data-v-a1a81406]{visibility:visible;opacity:1;transform:translate(-50%);pointer-events:auto}.c-s12-subtab-btn[data-v-a1a81406]{display:flex;flex-direction:column;width:17rem;height:12rem;position:relative;border:.1rem solid transparent;border-radius:.5rem;margin:.5rem;padding:.3rem;transition:background-color .5s,border .5s;-webkit-user-select:none;user-select:none;cursor:pointer}.c-s12-subtabs--compact .c-s12-subtab-btn[data-v-a1a81406]{height:auto;margin:0;margin-bottom:.5rem;padding:.6rem}.c-s12-subtab-btn[data-v-a1a81406]:hover{background-color:hsla(0,0%,100%,.1);border:.1rem solid hsla(0,0%,100%,.5)}.c-s12-subtab-btn--active[data-v-a1a81406]{background-color:hsla(0,0%,100%,.4);border:.1rem solid #fff}.c-s12-subtab-btn--active[data-v-a1a81406]:hover{background-color:hsla(0,0%,100%,.6)}.c-s12-subtab-btn__text[data-v-a1a81406]{display:flex;align-self:flex-start;color:#fff;text-shadow:0 0 .5rem var(--s12-border-color)}.c-s12-subtab-btn__symbol[data-v-a1a81406]{display:flex;height:100%;justify-content:center;align-items:center;align-self:center;font-size:6rem;color:#fff;text-shadow:0 0 .5rem var(--s12-border-color)}.c-s12-subtab-btn__symbol--small[data-v-a1a81406]{width:1.4rem;margin-right:.5rem}.c-taskbar-icon[data-v-6cc71a97]{display:flex;width:6rem;height:100%;position:relative;z-index:2;justify-content:center;align-items:center;background-image:radial-gradient(at 5% -35%,#fff,transparent 50%);border:.15rem solid var(--s12-border-color);border-top:none;border-radius:.3rem;box-shadow:inset 0 0 .3rem .1rem hsla(0,0%,100%,.8);margin-left:.4rem;transition:background-color .5s;cursor:pointer}.c-taskbar-icon[data-v-6cc71a97]:hover{background-color:hsla(0,0%,100%,.35)}.c-taskbar-icon--active[data-v-6cc71a97]{background-color:hsla(0,0%,100%,.5)}.c-taskbar-icon--active[data-v-6cc71a97]:hover{background-color:hsla(0,0%,94%,.9)}.c-taskbar-icon__image[data-v-6cc71a97]{height:80%;border-radius:1rem}.c-taskbar[data-v-98c9ea58]{display:flex;width:100%;height:4.5rem;background-color:hsla(0,0%,47%,.15);background-image:repeating-linear-gradient(50deg,hsla(0,0%,67%,.1),hsla(0,0%,67%,.1) 2rem,hsla(0,0%,100%,.1) 4rem,hsla(0,0%,100%,.1) 5rem,hsla(0,0%,67%,.1) 6rem,hsla(0,0%,67%,.1) 8rem),linear-gradient(90deg,rgba(40,40,40,.4),transparent 10%,transparent 70%,rgba(0,0,0,.4) 90%);border-top:.15rem solid var(--s12-border-color);-webkit-backdrop-filter:blur(.3rem);backdrop-filter:blur(.3rem)}.c-taskbar[data-v-98c9ea58]:before{content:"";display:inline-block;width:110%;height:110%;position:absolute;box-shadow:inset 0 0 .3rem .1rem hsla(0,0%,100%,.5);margin-right:-5%;margin-left:-5%;pointer-events:none}.c-start-icon[data-v-98c9ea58]{height:100%;margin:0 2rem 0 1rem;cursor:pointer}.c-s12-show-desktop[data-v-98c9ea58]{width:1rem;height:100%;position:absolute;right:0;border:.15rem solid var(--s12-border-color);border-style:none none solid solid;border-radius:.2rem 0 0 .2rem;cursor:pointer}.c-s12-show-desktop[data-v-98c9ea58]:before{content:"";display:block;width:200%;height:100%;border-radius:inherit;box-shadow:inset 0 0 .5rem .1rem hsla(0,0%,100%,.5);transition:box-shadow .4s}.c-s12-show-desktop[data-v-98c9ea58]:hover:before{box-shadow:inset 0 0 .5rem .1rem #fff}.c-game-ui--fixed[data-v-b165c672]{display:flex;width:100%;height:100%;position:fixed;top:0;left:0;z-index:5;justify-content:center;pointer-events:none}.ui-wrapper[data-v-16fa83ba]{display:flex;position:relative;justify-content:center}.c-modal__header[data-v-02f37e5f]{margin-bottom:.5rem}.c-modal-celestial__run-effects[data-v-5652f348]{display:inline-block;max-width:45rem;text-align:left}.c-modal-celestial__run-effects__line[data-v-5652f348]{display:flex;margin-bottom:.5rem}.reality-description[data-v-5652f348]{padding:0 2rem}.o-warning[data-v-4e13ca48]{color:var(--color-infinity)}.c-has-rewards[data-v-5e466ec0]{font-weight:700;font-size:1.5rem;color:var(--color-bad)}.c-blobflake-slider[data-v-13fcb5d4]{padding:1.2rem}.l-wrapper[data-v-5c020f42]{width:75rem}.c-bordered-entry[data-v-4270332c]{display:flex;flex-direction:column;align-items:center;font-size:1.1rem;border:var(--var-border-width,.2rem) solid;border-radius:var(--var-border-radius,.4rem);padding:.5rem .3rem;margin:.3rem}.c-fixed-height[data-v-4270332c]{height:4rem}.c-info[data-v-2cffffa6]{width:60rem;overflow-x:hidden;padding-right:1rem}.c-info[data-v-2cffffa6]::-webkit-scrollbar{width:1rem}.c-info[data-v-2cffffa6]::-webkit-scrollbar-thumb{border:none}.s-base--metro .c-info[data-v-2cffffa6]::-webkit-scrollbar-thumb{border-radius:0}.c-backup-file-ops[data-v-2cffffa6]{margin:.5rem}.o-btn-file-ops[data-v-2cffffa6]{margin:0 .5rem}.c-entry-container[data-v-2cffffa6]{display:flex;flex-direction:row;flex-wrap:wrap}.l-backup-entry[data-v-2cffffa6]{width:calc(50% - .6rem);height:calc(25% - .6rem)}.c-center[data-v-eb4324ba]{display:flex;flex-direction:column;width:38rem;align-items:center}.t-s12 .c-center[data-v-eb4324ba]{width:50rem;text-align:center}.c-dropdown-btn[data-v-eb4324ba]{width:24rem;margin:.3rem;padding:0}.c-dropdown-header[data-v-eb4324ba]{height:5rem;padding:.5rem;-webkit-user-select:none;user-select:none}.o-single-symbol[data-v-eb4324ba]{font-size:3rem}.o-single-glyph[data-v-eb4324ba]{padding:.5rem}.c-all-options[data-v-1aab07c3]{display:flex;flex-direction:row}.c-all-options[data-v-1aab07c3],.c-no-options[data-v-1aab07c3]{width:49rem;margin:.5rem;border:.1rem solid var(--color-text);border-radius:var(--var-border-radius,.5rem)}.c-extra-options[data-v-1aab07c3]{position:relative;display:flex;flex-direction:row;width:100%;height:100%;overflow:hidden;border-width:.1rem;border-left-style:dashed;border-color:var(--color-text)}.c-sliding-window[data-v-1aab07c3]{display:flex;flex-direction:row}.o-option--inactive[data-v-1aab07c3]{opacity:.3}.o-arrow[data-v-1aab07c3]{position:absolute;display:flex;align-items:center;height:100%;padding:.3rem;z-index:1;background:var(--color-good);color:var(--color-text);transition-duration:.3s;cursor:pointer;-webkit-user-select:none;user-select:none}.o-arrow--left[data-v-1aab07c3]{left:0}.o-arrow--right[data-v-1aab07c3]{right:0;border-radius:0 var(--var-border-radius,.5rem) var(--var-border-radius,.5rem) 0}.o-arrow--disabled[data-v-1aab07c3]{opacity:.3;cursor:default}.o-default-option[data-v-1aab07c3]{align-self:normal;font-size:1.5rem;color:var(--color-text)}.o-clickable[data-v-1aab07c3]{cursor:pointer}.c-single-set[data-v-1aab07c3]{display:flex;flex-direction:column}.o-symbol[data-v-1aab07c3]{width:2.5rem;text-align:center;font-size:1.6rem;-webkit-user-select:none;user-select:none}.o-color[data-v-1aab07c3]{display:flex;justify-content:center;align-items:center;width:1.5rem;height:1.5rem;margin:.5rem;font-weight:700;-webkit-user-select:none;user-select:none}.c-glyph-customization-entry[data-v-376fede0]{display:flex;flex-direction:column}.c-name[data-v-376fede0]{width:100%;margin:.5rem 0 0}.c-glyph-customization-group[data-v-800cf4e0]{width:100%;margin-top:.5rem;text-align:left}.c-type-selection[data-v-800cf4e0]{display:flex;flex-direction:row;justify-content:space-around;align-items:center;margin-top:.5rem}.o-disabled-cosmetics[data-v-800cf4e0]{opacity:.5}.c-single-type[data-v-800cf4e0]{padding:.5rem}.c-type-current[data-v-800cf4e0]{border:.1rem solid var(--color-text)}.c-type-other[data-v-800cf4e0]{padding:.6rem}.c-dropdown-btn[data-v-28f556e6]{width:24rem;margin:.3rem;padding:0}.c-dropdown-header[data-v-28f556e6]{padding:.9rem;height:6.5rem;-webkit-user-select:none;user-select:none}.l-hide-modal-button[data-v-1134982d]{display:flex;flex-flow:row;align-items:center}.l-hide-modal-button__subtab-icon[data-v-1134982d]{font-size:1.5rem;width:2rem;margin:.2rem}.l-hide-modal-button__subtab-name[data-v-1134982d]{width:8.2rem}.c-indicator-icon[data-v-c824015c]{width:2rem;position:absolute;top:0;right:0;color:#000;text-shadow:none;padding:.2rem}.c-hidden-tabs-background__visible[data-v-c824015c]{background-color:var(--color-good)}.c-hidden-tabs-background__hidden[data-v-c824015c]{background-color:var(--color-gh-purple)}.c-hidden-tabs-background__always-visible[data-v-c824015c]{background-color:var(--color-disabled);cursor:default}.l-wrapper[data-v-2d376db4]{width:62rem}.t-s12 .l-wrapper[data-v-2d376db4]{width:65rem}.l-modal-hotkeys__column[data-v-0543ac5f]{display:flex;flex-direction:column;width:28rem}.l-modal-hotkeys__column--right[data-v-0543ac5f]{margin-left:1rem}.c-modal-hotkeys[data-v-0543ac5f]{font-size:1.25rem}.l-modal-hotkeys[data-v-0543ac5f]{display:flex;flex-direction:row}.l-modal-hotkeys-row[data-v-0543ac5f]{display:flex;flex-direction:row;line-height:1.6rem;padding-bottom:.3rem}.c-modal-hotkeys-row__name[data-v-0543ac5f]{text-align:left}.l-modal-hotkeys-row__name[data-v-0543ac5f]{flex:1 1 auto}.c-modal-hotkeys__shift-description[data-v-0543ac5f]{text-align:left;font-size:1rem}.c-special-type[data-v-4c765a29]{display:flex;flex-direction:row;left:0;align-items:center}.o-active-type[data-v-4c765a29]{background-color:var(--color-good)}.c-reality-pos[data-v-a32a7b20]{z-index:3}.c-eternity-pos[data-v-a32a7b20]{z-index:2}.c-infinity-pos[data-v-a32a7b20]{z-index:1}.c-modal-message__text-fit[data-v-a32a7b20]{width:auto}.o-load-preset-button-margin[data-v-1c623aa6]{margin-right:.3rem}.c-modal-away-progress__antimatter-galaxies[data-v-2d859d46],.c-modal-away-progress__antimatter[data-v-2d859d46],.c-modal-away-progress__dimension-boosts[data-v-2d859d46]{color:var(--color-antimatter)}.t-dark .c-modal-away-progress__antimatter[data-v-2d859d46],.t-s6 .c-modal-away-progress__antimatter[data-v-2d859d46],.t-s10 .c-modal-away-progress__antimatter[data-v-2d859d46]{-webkit-animation:a-game-header__antimatter--glow 25s infinite;animation:a-game-header__antimatter--glow 25s infinite}.c-modal-away-progress__infinities[data-v-2d859d46],.c-modal-away-progress__infinity-points[data-v-2d859d46]{color:var(--color-infinity)}.c-modal-away-progress__eternities[data-v-2d859d46],.c-modal-away-progress__eternity-points[data-v-2d859d46],.c-modal-away-progress__time-theorems[data-v-2d859d46]{color:var(--color-eternity);filter:brightness(.65)}.c-modal-away-progress__dilated-time[data-v-2d859d46],.c-modal-away-progress__tachyon-galaxies[data-v-2d859d46],.c-modal-away-progress__tachyon-particles[data-v-2d859d46]{color:var(--color-dilation);filter:brightness(.8)}.t-dark .c-modal-away-progress__dilated-time[data-v-2d859d46],.t-dark .c-modal-away-progress__tachyon-galaxies[data-v-2d859d46],.t-dark .c-modal-away-progress__tachyon-particles[data-v-2d859d46]{filter:none}.c-modal-away-progress__achievement-count[data-v-2d859d46],.c-modal-away-progress__imaginary-machines[data-v-2d859d46],.c-modal-away-progress__realities[data-v-2d859d46],.c-modal-away-progress__reality-machines[data-v-2d859d46]{color:var(--color-reality)}.c-modal-away-progress__dark-energy[data-v-2d859d46],.c-modal-away-progress__dark-energy b[data-v-2d859d46],.c-modal-away-progress__dark-matter[data-v-2d859d46],.c-modal-away-progress__dark-matter b[data-v-2d859d46],.c-modal-away-progress__singularities[data-v-2d859d46],.c-modal-away-progress__singularities b[data-v-2d859d46]{color:var(--color-laitela--base);text-shadow:0 0 .2rem var(--color-laitela--accent),0 0 .2rem var(--color-laitela--accent),0 0 .2rem var(--color-laitela--accent),0 0 .2rem var(--color-laitela--accent)}.c-modal-away-progress__replicanti-galaxies[data-v-2d859d46],.c-modal-away-progress__replicanti[data-v-2d859d46]{color:#03a9f4}.c-modal-away-progress__teresa-memories[data-v-2d859d46]{color:var(--color-ra-pet--teresa)}.c-modal-away-progress__effarig-memories[data-v-2d859d46],.c-modal-away-progress__relic-shards[data-v-2d859d46]{color:var(--color-ra-pet--effarig)}.c-modal-away-progress__enslaved-memories[data-v-2d859d46]{color:var(--color-ra-pet--enslaved)}.c-modal-away-progress__v-memories[data-v-2d859d46]{color:var(--color-ra-pet--v)}.c-modal-away-progress__effarig-memories[data-v-2d859d46],.c-modal-away-progress__enslaved-memories[data-v-2d859d46],.c-modal-away-progress__teresa-memories[data-v-2d859d46],.c-modal-away-progress__v-memories[data-v-2d859d46]{filter:brightness(.8)}.t-dark .c-modal-away-progress__effarig-memories[data-v-2d859d46],.t-dark .c-modal-away-progress__enslaved-memories[data-v-2d859d46],.t-dark .c-modal-away-progress__teresa-memories[data-v-2d859d46],.t-dark .c-modal-away-progress__v-memories[data-v-2d859d46]{filter:none}.c-modal-away-progress__black-hole[data-v-2d859d46],.c-modal-away-progress__black-hole b[data-v-2d859d46]{color:#000;text-shadow:0 0 .2rem #e67919,0 0 .3rem #e67919}.s-base--dark .c-modal-away-progress__black-hole[data-v-2d859d46],.s-base--dark .c-modal-away-progress__black-hole b[data-v-2d859d46]{color:#de5a1d;text-shadow:0 0 .2rem #000,0 0 .3rem #000}.c-modal-away-progress__reality-shards[data-v-2d859d46]{color:var(--color-pelle--base)}.c-modal-away-progress__disabled[data-v-2d859d46],.c-modal-away-progress__disabled b[data-v-2d859d46]{font-style:italic;color:#303030;text-shadow:0 0 .3rem #303030;text-decoration:line-through;-webkit-animation:none;animation:none}.c-modal-away-progress__resources div[data-v-244ab913]{min-width:55rem;border-bottom:.1rem solid var(--color-text);margin-bottom:.2rem;padding-bottom:.2rem;cursor:pointer}.c-modal-away-progress__resources div[data-v-244ab913]:last-child{border:none}.c-resource-name[data-v-34008a4e]{font-size:1.2rem;font-weight:700;cursor:pointer}.c-underline[data-v-34008a4e]{text-decoration:underline}.c-modal-catchup-entry[data-v-34008a4e]{border-top:.1rem solid var(--color-text);padding:.5rem 0 .5rem 1.5rem;cursor:default}.c-modal-catchup-entry[data-v-34008a4e]:first-child{border-top:none}.o-catchup-group-title[data-v-005300ef]{font-size:1.5rem;cursor:pointer}.l-left[data-v-005300ef]{text-align:left}.l-catchup-group-container[data-v-a8724662]{overflow-y:scroll;width:100%;text-align:left;border:.1rem solid var(--color-text);border-radius:var(--var-border-radius,.4rem);margin:1rem 0;padding:1.5rem}.l-confirm-padding[data-v-a8724662]{margin:1rem}.c-suggestion-text[data-v-a8724662]{font-size:1.6rem;font-weight:700}.l-changelog-modal[data-v-92635de0]{display:flex;flex-direction:column;width:calc(100vw - 20vh);height:80vh;margin:.5rem}.l-changelog-container[data-v-92635de0]{display:flex;flex:1 1 50rem;flex-direction:row;margin:2rem 0}.l-changelog-header[data-v-92635de0]{flex:0 0.2 5rem;text-align:center}.l-changelog-search-tab[data-v-92635de0]{display:flex;flex-direction:column;width:15rem}.l-changelog-info[data-v-92635de0]{display:flex;flex:1 1 50rem;flex-direction:column}.c-changelog-title[data-v-92635de0]{font-size:3rem;-webkit-user-select:none;user-select:none}.c-changelog-body[data-v-92635de0]{text-align:left;font-size:1.6rem}.l-changelog-body[data-v-92635de0]{overflow-y:auto;flex:1 1 30rem;margin:1rem 1rem 0;padding:.5rem}.t-s12 .l-changelog-body[data-v-92635de0]{font-size:1.3rem;margin-left:0}.l-changelog-body[data-v-92635de0]::-webkit-scrollbar{width:1rem}.l-changelog-body[data-v-92635de0]::-webkit-scrollbar-thumb{border:none}.s-base--metro .l-changelog-body[data-v-92635de0]::-webkit-scrollbar-thumb{border-radius:0}.c-changelog-body--title[data-v-92635de0]{font-size:2.5rem}.c-changelog-search-bar[data-v-92635de0]{width:calc(100% - 1rem);font-size:1.5rem;padding:.2rem}.l-changelog-tab-list[data-v-92635de0]{display:flex;overflow-y:auto;flex:1 0.8 40rem;flex-direction:column;justify-content:flex-start;scrollbar-width:thin;margin:.5rem .5rem 0}.l-changelog-tab-list[data-v-92635de0]::-webkit-scrollbar{width:.5rem}.l-changelog-tab-list[data-v-92635de0]::-webkit-scrollbar-thumb{border:none}.s-base--metro .l-changelog-tab-list[data-v-92635de0]::-webkit-scrollbar-thumb{border-radius:0}.o-changelog-tab-button[data-v-92635de0]{font-size:1.25rem;border-bottom:.1rem solid #000;padding:.3rem .5rem .3rem 0;transition:all .2s;cursor:pointer}.o-changelog-tab-button--selected[data-v-92635de0],.o-changelog-tab-button[data-v-92635de0]:hover{box-shadow:inset 0 0 .8rem var(--color-text)}.s-base--dark .o-changelog-tab-button[data-v-92635de0]{border-bottom:.1rem solid #fff}.t-s12 .o-changelog-tab-button[data-v-92635de0]{border-bottom:.1rem solid #000}.c-changelog-body li{margin:.5rem 0}.l-lost-text[data-v-4f39cd67]{font-weight:700;color:var(--color-bad)}.l-credits-modal[data-v-2d8dcf44]{width:calc(100vw - 60vh);min-width:70rem}.c-credits-modal[data-v-2d8dcf44]{margin:.5rem}.c-credits-modal__body[data-v-2d8dcf44]{overflow-y:scroll;height:85vh}.c-icon-wrapper[data-v-101e8e48]{margin-right:1rem}.l-enslaved-hint-button[data-v-101e8e48]{margin:.4rem 0}.c-glyph-component-container[data-v-5012c711]{margin:.1rem}.c-glyph-choice-container[data-v-0f672c00]{display:flex;flex-flow:row wrap;width:74rem}.c-glyph-choice-container-single[data-v-0f672c00]{width:37rem}.c-glyph-choice-single-glyph[data-v-0f672c00]{display:flex;flex-direction:row;width:36rem;height:12rem;justify-content:space-evenly;align-items:center;border-radius:var(--var-border-radius,.5rem);margin:.5rem}.o-h2p-tab-button--relevant[data-v-7e1ab2ec]{background-color:#df505055}.o-h2p-tab-button--first-irrelevant[data-v-7e1ab2ec]{border-top:.1rem solid #000;margin-top:.8rem}.s-base--dark .o-h2p-tab-button--first-irrelevant[data-v-7e1ab2ec]{border-top-color:#fff}.t-s12 .o-h2p-tab-button--first-irrelevant[data-v-7e1ab2ec]{border-top-color:#000}.l-has-errors[data-v-67bd8c2a]{color:red}.c-import-data-name[data-v-67bd8c2a]{padding:0 1rem}.c-single-row[data-v-66a38efb]{display:flex;justify-content:center;align-items:center;margin:-2.15rem 0 0 3rem}.c-second-row[data-v-66a38efb]{margin:0 0 0 -9rem}.o-cell[data-v-66a38efb]{display:flex;justify-content:center;align-items:center;border:var(--var-border-width,.2rem) solid;padding:.1rem}.o-cell--changed[data-v-66a38efb]{background-color:var(--color-accent)}.c-rarity[data-v-66a38efb]{width:10rem}.c-effects-count[data-v-66a38efb]{width:20rem}.c-target-score[data-v-66a38efb]{width:18rem}.c-single-score[data-v-66a38efb]{width:12rem}.c-single-type[data-v-57ab1f8f]{left:0;text-align:left;padding:.5rem}.l-warn-text[data-v-4552a040]{font-weight:700;color:var(--color-bad)}.l-not-imported[data-v-4552a040]{color:var(--color-disabled)}.c-socials--icon[data-v-01811230]{color:var(--color-text);cursor:pointer}.c-socials--icon__wrapper[data-v-01811230]{transition:all .2s ease-in-out}.c-socials--icon__wrapper[data-v-01811230]:hover{transform:scale(1.1)}[ach-tooltip][data-v-01811230]:before{width:20rem;font-size:1.5rem}.l-information-modal[data-v-fc435f5e]{display:flex;flex-direction:column;width:calc(100vw - 50vh);justify-content:space-around}.c-information-modal[data-v-fc435f5e]{margin:.5rem}.c-info-body[data-v-fc435f5e]{text-align:left;font-size:2rem;margin:1rem;padding:.5rem}.t-s12 .c-info-body[data-v-fc435f5e]{font-size:1.3rem;margin:0}.l-socials[data-v-fc435f5e]{display:flex;justify-content:space-evenly;align-items:center;font-size:7.5rem}.t-s12 .l-socials[data-v-fc435f5e]{width:100%;align-self:center}.c-entry-border[data-v-411bb7ce]{border-bottom:.1rem solid var(--color-text);width:28rem;padding-bottom:1rem}.c-entry-border[data-v-411bb7ce]:last-child{border-bottom:none;padding-bottom:0}.o-selected[data-v-526c51fe]{color:var(--color-text-inverted);background-color:var(--color-good)}.pelle-effects-container[data-v-21d4331f]{overflow-y:scroll;height:40rem}p[data-v-21d4331f]{margin-bottom:1rem}.o-available-effects-container[data-v-7a224243]{margin:1.5rem 0 2rem}.o-available-effects[data-v-7a224243]{font-weight:700}.c-modal-message__text[data-v-1db2b8e9]{vertical-align:middle}.o-shop-button-button__img[data-v-1db2b8e9]{height:2.5rem;vertical-align:middle}.o-warning[data-v-1db2b8e9]{color:var(--color-infinity)}.o-pseudo-time-study[data-v-10ee1de0]{width:2.7rem;height:1.5rem;font-family:Typewriter,serif;font-size:.85rem;color:#000;border:.15rem solid;border-radius:var(--var-border-radius,.2rem);padding:0;transition-duration:.2s;pointer-events:none}.o-pseudo-time-study--small[data-v-10ee1de0]{width:1.8rem}.o-time-study-dark--bought[data-v-10ee1de0]{color:#fff}.o-time-study--new-import[data-v-10ee1de0]:before{content:"";width:100%;height:100%;position:absolute;top:0;left:0;background:rgba(255,214,11,.8);border-radius:var(--var-border-radius,inherit);-webkit-animation:a-new-import-data-v-10ee1de0 3s infinite;animation:a-new-import-data-v-10ee1de0 3s infinite}@-webkit-keyframes a-new-import-data-v-10ee1de0{0%{opacity:0}50%{opacity:.7}to{opacity:0}}@keyframes a-new-import-data-v-10ee1de0{0%{opacity:0}50%{opacity:.7}to{opacity:0}}.o-time-study-connection[data-v-6dda8e60]{stroke-width:2px}.l-study-string-preview__tree--wrapper[data-v-09d9af6c]{display:flex;overflow-y:auto;width:20rem;height:44.5rem;position:relative;justify-content:center;border:var(--color-text) solid var(--var-border-width,.3rem);border-radius:var(--var-border-radius,.3rem);margin:auto;padding:.5rem}.c-unavailable-warning[data-v-09d9af6c]{align-self:center}.l-tree-info-header[data-v-493fb126]{font-size:1.7rem}.c-tree-info[data-v-493fb126]{padding:.7rem}.c-two-column[data-v-35f516e0]{display:flex;flex-direction:row;align-items:center}.c-study-info[data-v-35f516e0]{width:30rem;padding:0 2rem}.c-study-preview[data-v-35f516e0]{height:100%;margin-right:3rem}.l-delete-input[data-v-35f516e0]{color:var(--color-text);background-color:var(--color-disabled);pointer-events:none;-webkit-user-select:none;user-select:none}.c-modal__confirmation-toggle__text[data-v-35f516e0]{opacity:1}.c-modal__confirmation-toggle__warning[data-v-35f516e0]{display:inline-flex;width:1em;height:1em;justify-content:center;align-items:center;color:#322;background:var(--color-bad);border-radius:100%;margin-left:.3rem}.l-lost-text[data-v-6ca17165]{color:var(--color-bad)}.c-visual-change-list[data-v-369e8fe0]{display:inline-block;max-width:45rem;text-align:left}.c-visual-change-list-entry[data-v-369e8fe0]{display:flex;margin-bottom:.5rem;gap:1rem}.c-text-wrapper[data-v-070fe22a]{text-align:left}.l-emphasis[data-v-576557b4]{font-weight:700;color:var(--color-bad)}.pelle-effects-container[data-v-27faf645]{overflow-y:scroll;height:40rem}p[data-v-27faf645]{margin-bottom:1rem}.c-s12-games-container[data-v-25a74b90]{--icon-font-size:1.1rem;--icon-line-height:1.1;--icon-size:8rem;--icon-margin:0.4rem;--icon-inner-padding:0.5rem;--total-icon-height:calc(var(--icon-size) + var(--icon-margin)*2 + var(--icon-font-size)*var(--icon-line-height)*2 + var(--icon-inner-padding)*2);--total-game-width:10rem;--game-margin:0.2rem;display:flex;overflow-y:auto;flex:1 0 auto;flex-wrap:wrap;width:calc(var(--total-game-width)*4 + var(--game-margin)*2*4);height:40rem;-webkit-user-select:none;user-select:none}.c-s12-game[data-v-25a74b90]{overflow:hidden;width:var(--total-game-width);height:var(--total-icon-height);position:relative;z-index:0;margin:var(--game-margin)}.c-s12-game__inner[data-v-25a74b90]{display:flex;overflow:hidden;flex-direction:column;width:100%;position:relative;align-items:center;padding:var(--icon-inner-padding);cursor:pointer}.c-s12-game--selected[data-v-25a74b90]{overflow:visible;z-index:1}.c-s12-game__inner[data-v-25a74b90]:before{content:"";position:absolute;inset:0;z-index:-1;opacity:0;background-image:linear-gradient(rgba(13,120,242,.2),rgba(13,120,242,.25));border:.1rem solid #82a5d0;border-radius:.5rem;box-shadow:inset 0 0 .2rem .1rem hsla(0,0%,100%,.7);transition:opacity .2s}.c-s12-game:hover .c-s12-game__inner[data-v-25a74b90]:before{opacity:.5}.c-s12-game.c-s12-game--selected .c-s12-game__inner[data-v-25a74b90]:before{opacity:1}.c-s12-game__img[data-v-25a74b90]{height:var(--icon-size);margin:var(--icon-margin)}.c-s12-game__text[data-v-25a74b90]{overflow:hidden;width:100%;text-align:center;font-family:Segoe UI,Typewriter;font-size:var(--icon-font-size);font-weight:400;line-height:var(--icon-line-height);color:#000}.c-modal-s12-games[data-v-02f6719c]{display:flex;width:64rem}.c-modal-s12-games__magnified-display[data-v-02f6719c]{width:100%;align-self:stretch;text-align:center;border-left:.1rem solid #86b2df;padding:2rem}.c-modal-s12-games__magnified-display__img[data-v-02f6719c]{width:100%;margin:2rem 0 6rem} \ No newline at end of file diff --git a/index.html b/index.html index 65e8a8837..f6e106801 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ -Antimatter Dimensions Redemption
Your browser is not supported.
Please update to a newer browser.
Your browser is not supported.
Please update to a newer browser.
\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerInput.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerInput.vue?vue&type=template&id=4d836647&scoped=true&\"\nimport script from \"./AutobuyerInput.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutobuyerInput.vue?vue&type=style&index=0&id=4d836647&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d836647\",\n null\n \n)\n\nexport default component.exports","import { AutobuyerInputFunctions } from \"@/components/tabs/autobuyers/AutobuyerInput\";\r\n\r\nexport const automatorTemplates = {\r\n /**\r\n * List of possible data types to dynamically generate in script templates, assumed to be only string or boolean\r\n * {\r\n * @property {String} name String to be used as a key for entries in this object\r\n * @property {String[]} boolDisplay Strings to be displayed for true/false states for boolean inputs. If\r\n * undefined, assumed to be a non-boolean input\r\n * @property {Function} isValidString A function used to test if an input string is formatted properly or not\r\n * @property {Function} map A function to be used to map the inputs to their actual values\r\n * which are stored in the param object. If undefined, assumed to be no mapping\r\n * }\r\n */\r\n paramTypes: [\r\n {\r\n name: \"tree\",\r\n isValidString: str => {\r\n const validImport = TimeStudyTree.isValidImportString(str);\r\n const preset = str.match(/^(NAME (.{1,4})|ID (\\d))$/u);\r\n const validPreset = preset ? (\r\n player.timestudy.presets.some(p => p.name === preset[2]) ||\r\n (Number(preset[3]) > 0 && Number(preset[3]) < 7)\r\n ) : false;\r\n return validImport || validPreset;\r\n },\r\n },\r\n {\r\n name: \"integer\",\r\n isValidString: str => AutobuyerInputFunctions.int.tryParse(str),\r\n map: x => Math.round(parseInt(x, 10)),\r\n },\r\n {\r\n name: \"decimal\",\r\n isValidString: str => AutobuyerInputFunctions.decimal.tryParse(str),\r\n map: x => AutobuyerInputFunctions.decimal.tryParse(x),\r\n },\r\n {\r\n name: \"boolean\",\r\n boolDisplay: [true, false],\r\n },\r\n {\r\n name: \"nowait\",\r\n boolDisplay: [\"Continue onward\", \"Keep buying Studies\"],\r\n },\r\n {\r\n name: \"mode\",\r\n boolDisplay: [\"X times highest\", \"Seconds since last\"],\r\n map: x => (x ? \"mult\" : \"time\"),\r\n },\r\n ],\r\n /**\r\n * List automator script templates, primarily used here for formatting the player UI prompts appropriately\r\n * so that all of the required fields show up in the proper input formats. Actual script formatting requires\r\n * additionally writing a method to be called in the constructor of the ScriptTemplate class\r\n * {\r\n * @property {String} name Name of script template, also used as a key within the constructor for\r\n * ScriptTemplate objects\r\n * @property {String} description Text description of what the template does when used in the automator\r\n * @property {Object[]} inputs Fields of the param object which need to be filled for the template to\r\n * have all the information it needs. Contains the name of the field, the type (drawn from paramTypes above),\r\n * and a prompt to be shown in the UI end\r\n * @property {Function} warnings Function which checks the current game state and potentially provides\r\n * warnings based on some possibly common cases which may lead to undesired behavior\r\n * }\r\n */\r\n scripts: [\r\n {\r\n name: \"Climb EP\",\r\n description: `This script performs repeated Eternities, attempting to re-purchase a Time Study Tree every\r\n Eternity. Autobuyer settings must be supplied for the Infinity and Eternity Autobuyers. The script will\r\n repeat until a final Eternity Point value is reached.`,\r\n inputs: [\r\n { name: \"treeStudies\", type: \"tree\", prompt: \"Or directly enter your time studies\" },\r\n { name: \"treeNowait\", type: \"nowait\", prompt: \"Missing Study behavior\" },\r\n { name: \"finalEP\", type: \"decimal\", prompt: \"Target EP\" },\r\n { name: \"autoInfMode\", type: \"mode\", prompt: \"Infinity Autobuyer Mode\" },\r\n { name: \"autoInfValue\", type: \"decimal\", prompt: \"Infinity Autobuyer Threshold\" },\r\n { name: \"autoEterMode\", type: \"mode\", prompt: \"Eternity Autobuyer Mode\" },\r\n { name: \"autoEterValue\", type: \"decimal\", prompt: \"Eternity Autobuyer Threshold\" },\r\n ],\r\n warnings: () => {\r\n const list = [];\r\n if (!RealityUpgrade(10).isBought) {\r\n list.push(`This script will be unable to properly set Autobuyer modes without at least ${formatInt(100)}\r\n Eternities. Consider getting Reality Upgrade \"${RealityUpgrade(10).name}\" before using this at the start\r\n of a Reality.`);\r\n }\r\n // Telemechanical Process (TD/5xEP autobuyers)\r\n if (!RealityUpgrade(13).isBought) {\r\n list.push(`This template may perform poorly without Reality Upgrade \"${RealityUpgrade(13).name}\"`);\r\n }\r\n if (!Perk.ttBuySingle.isBought) {\r\n list.push(`This template may perform poorly without Perk \"${Perk.ttBuySingle.label}\" unless you can generate\r\n Time Theorems without purchsing them`);\r\n }\r\n return list;\r\n },\r\n },\r\n {\r\n name: \"Grind Eternities\",\r\n description: `This script performs repeated fast Eternities after buying a specified Time Study Tree.\r\n Auto-Infinity will be set to \"Times Highest\" with a specified number of crunches and Auto-Eternity will\r\n trigger as soon as possible. The script will repeat until a final Eternity count is reached.`,\r\n inputs: [\r\n { name: \"treeStudies\", type: \"tree\", prompt: \"Or directly enter your time studies\" },\r\n { name: \"treeNowait\", type: \"nowait\", prompt: \"Missing Study behavior\" },\r\n { name: \"crunchesPerEternity\", type: \"integer\", prompt: \"Crunches per Eternity\" },\r\n { name: \"eternities\", type: \"decimal\", prompt: \"Target Eternity Count\" },\r\n ],\r\n warnings: () => {\r\n const list = [];\r\n // Eternal flow (eternity generation)\r\n if (RealityUpgrade(14).isBought) {\r\n list.push(`You probably do not need to use this due to Reality Upgrade \"${RealityUpgrade(14).name}\"`);\r\n }\r\n return list;\r\n },\r\n },\r\n {\r\n name: \"Grind Infinities\",\r\n description: `This script buys a specified Time Study Tree and then configures your Autobuyers for gaining\r\n Infinities. It will repeat until a final Infinity count is reached; the count can be for Banked Infinities,\r\n in which case it will get all Infinities before performing a single Eternity.`,\r\n inputs: [\r\n { name: \"treeStudies\", type: \"tree\", prompt: \"Or directly enter your time studies\" },\r\n { name: \"treeNowait\", type: \"nowait\", prompt: \"Missing Study behavior\" },\r\n { name: \"infinities\", type: \"decimal\", prompt: \"Target Infinity Count\" },\r\n { name: \"isBanked\", type: \"boolean\", prompt: \"Use Banked for Target?\" },\r\n ],\r\n warnings: () => {\r\n const list = [];\r\n if (!Perk.achievementGroup5.isBought) {\r\n list.push(`You will not start this Reality with Achievement \"${Achievement(131).name}\" - grinding\r\n Infinities may be less useful than expected since they cannot be Banked until later`);\r\n }\r\n // Boundless flow (infinity generation)\r\n if (RealityUpgrade(11).isBought) {\r\n list.push(`You probably do not need to use this due to Reality Upgrade \"${RealityUpgrade(11).name}\"`);\r\n }\r\n return list;\r\n },\r\n },\r\n {\r\n name: \"Complete Eternity Challenge\",\r\n description: `This script buys a specified Time Study Tree and then unlocks a specified Eternity Challenge.\r\n Then it will set your Infinity Autobuyer to your specified settings and enter the Eternity Challenge.\r\n Finally, it will wait until at least the desired number of completions before triggering an Eternity to\r\n complete the Challenge.`,\r\n inputs: [\r\n { name: \"treeStudies\", type: \"tree\", prompt: \"Or directly enter your time studies\" },\r\n { name: \"treeNowait\", type: \"nowait\", prompt: \"Missing Study behavior\" },\r\n { name: \"ec\", type: \"integer\", prompt: \"Eternity Challenge ID\" },\r\n { name: \"completions\", type: \"integer\", prompt: \"Target Completion Count\" },\r\n { name: \"autoInfMode\", type: \"mode\", prompt: \"Infinity Autobuyer Mode\" },\r\n { name: \"autoInfValue\", type: \"decimal\", prompt: \"Infinity Autobuyer Threshold\" },\r\n ],\r\n warnings: () => {\r\n const list = [];\r\n if (!Perk.studyECRequirement.isBought) {\r\n list.push(`Eternity Challenges may not be reliably unlockable due to secondary resource requirements, consider\r\n unlocking Perk \"${Perk.studyECRequirement.label}\" before using this template`);\r\n }\r\n if (!Perk.studyECBulk.isBought) {\r\n list.push(`Using this template without bulk completions of Eternity Challenges may lead to long scripts which\r\n are slower and difficult to modify. If you use this template, consider returning to simplify your scripts\r\n after unlocking Perk \"${Perk.studyECBulk.label}\"`);\r\n }\r\n return list;\r\n },\r\n },\r\n {\r\n name: \"Unlock Dilation\",\r\n description: `This script performs repeated Eternities, attempting to re-purchase a Time Study Tree every\r\n Eternity. Settings must be supplied for the Eternity Autobuyer; your Infinity Autobuyer will be\r\n turned off. The script loops until you have the total Time Theorem requirement to unlock Dilation, and then\r\n it will unlock Dilation once it does.`,\r\n inputs: [\r\n { name: \"treeStudies\", type: \"tree\", prompt: \"Or directly enter your time studies\" },\r\n { name: \"treeNowait\", type: \"nowait\", prompt: \"Missing Study behavior\" },\r\n { name: \"finalEP\", type: \"decimal\", prompt: \"Target EP\" },\r\n { name: \"autoEterMode\", type: \"mode\", prompt: \"Eternity Autobuyer Mode\" },\r\n { name: \"autoEterValue\", type: \"decimal\", prompt: \"Eternity Autobuyer Threshold\" },\r\n ],\r\n warnings: () => {\r\n const list = [];\r\n // Telemechanical Process (TD/5xEP autobuyers)\r\n if (!RealityUpgrade(13).isBought) {\r\n list.push(`This template may perform poorly without Reality Upgrade \"${RealityUpgrade(13).name}\"`);\r\n }\r\n if (!Perk.ttBuySingle.isBought) {\r\n list.push(`This template may perform poorly without Perk \"${Perk.ttBuySingle.label}\" unless you can generate\r\n Time Theorems without purchsing them`);\r\n }\r\n return list;\r\n },\r\n },\r\n ]\r\n};\r\n","import { automatorTemplates } from \"../script-templates\";\r\n\r\nexport const automator = {\r\n categoryNames: [\r\n \"Time Studies\",\r\n \"Event Triggers\",\r\n \"Alter Settings\",\r\n \"Information\",\r\n \"Script Flow\",\r\n ],\r\n commands: [\r\n {\r\n id: 0,\r\n isUnlocked: () => true,\r\n keyword: \"STUDIES RESPEC\",\r\n category: 0,\r\n syntax: `studies respec`,\r\n description: `This command turns on the respec option, which will respec your Time Studies on the next manual or\r\n automatic Eternity. Note that this does not actually perform an Eternity on its own; make sure your Autobuyer\r\n is on or you manually run the ETERNITY command (although ETERNITY has its own built-in respec option).`,\r\n examples: [\r\n `studies respec`,\r\n ]\r\n },\r\n {\r\n id: 1,\r\n isUnlocked: () => true,\r\n keyword: \"STUDIES LOAD\",\r\n category: 0,\r\n syntax: `studies [nowait] load id selector
\r\n studies [nowait] load name name`,\r\n description: `Loads a Time Study preset, as if you had clicked on the button in the Time Study tab.`,\r\n sections: [\r\n {\r\n name: \"INPUTS\",\r\n items: [\r\n {\r\n header: \"nowait\",\r\n description: `\r\n If present, the Automator will purchase as many studies as possible before continuing onward. By default\r\n (ie. without \"nowait\") this command will repeat this line indefinitely until all of the studies in the\r\n preset are bought; this may cause the Automator to get stuck indefinitely if you are not careful.\r\n `\r\n },\r\n {\r\n header: \"selector\",\r\n description: `\r\n Finds and loads the specified Time Study preset by its slot number. This is numbered one through six,\r\n ordered from left to right.`\r\n },\r\n {\r\n header: \"name\",\r\n description: \"Finds and loads the specified Time Study preset by its given name. This is case-sensitive.\"\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n `studies load id 2`,\r\n `studies load name ANTI`,\r\n `studies nowait load name dil`,\r\n ]\r\n },\r\n {\r\n id: 2,\r\n isUnlocked: () => true,\r\n keyword: \"STUDIES PURCHASE\",\r\n category: 0,\r\n syntax: `studies [nowait] purchase study_list`,\r\n description: \"Purchase Time Studies specified from a list of Time Studies.\",\r\n sections: [\r\n {\r\n name: \"INPUTS\",\r\n items: [\r\n {\r\n header: \"nowait\",\r\n description: `\r\n If present, the Automator will purchase as many studies as possible before continuing onward. By default\r\n (ie. without \"nowait\") this command will repeat this line indefinitely until all of the studies in the\r\n preset are bought; this may cause the Automator to get stuck indefinitely if you are not careful.\r\n `\r\n },\r\n {\r\n header: \"study_list\",\r\n description: `\r\n The exported Time Study tree format is supported here, which is simply a list of Time Study IDs\r\n separated by commas. This command also supports a more flexible formatting, additionally allowing\r\n ranges of studies (for example, 11-62) and the following aliases:
\r\n
antimatter, infinity, time, active, passive, idle, light, dark
\r\n A variable name may be used in place of the entire Time Study list as well (see the definition panel),\r\n although in that case the shorthand ranges and aliases are not allowed.`\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"studies nowait purchase 11,21,31\",\r\n \"studies purchase 11-62, antimatter, 111, idle\",\r\n \"studies nowait purchase ec6Studies\",\r\n ]\r\n },\r\n {\r\n id: 3,\r\n isUnlocked: () => true,\r\n keyword: \"PRESTIGE\",\r\n category: 1,\r\n syntax: `\r\n infinity [nowait]
\r\n eternity [nowait] [respec]
\r\n reality [nowait] [respec]`,\r\n description: `Triggers an Infinity, Eternity, or Reality reset if possible, otherwise the automator will wait at\r\n this command until it becomes possible. If you find that your script often gets stuck on this command, an\r\n Autobuyer may be triggering a prestige before the Automator reaches this line - consider using nowait or\r\n adjusting your Autobuyer settings using AUTO.`,\r\n sections: [\r\n {\r\n name: \"MODIFIERS\",\r\n items: [\r\n {\r\n header: \"nowait\",\r\n description: `\r\n If present, the Automator will move on to the next command instead of repeatedly trying on this\r\n command in situations where the prestige is not possible (eg. within an EC below the goal).\r\n `\r\n },\r\n {\r\n header: \"respec\",\r\n description: `\r\n For non-Infinity prestiges, also does the related respec action when triggering prestige.\r\n Eternity: Respec Time Studies and Eternity.
\r\n Reality: Unequip Glyphs and Reality.\r\n `\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"infinity\",\r\n \"eternity respec\",\r\n \"reality nowait\",\r\n ]\r\n },\r\n {\r\n id: 4,\r\n isUnlocked: () => true,\r\n keyword: \"UNLOCK\",\r\n category: 1,\r\n syntax: \"unlock [nowait] feature\",\r\n description: \"Unlocks the specified Eternity Challenge or Time Dilation.\",\r\n sections: [\r\n {\r\n name: \"MODIFIERS\",\r\n items: [\r\n {\r\n header: \"nowait\",\r\n description: `\r\n If present, the Automator will move on to the next command even if unlocking the feature fails. By\r\n default, the Automator will keep running this command until the unlock succeeds.\r\n `\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"unlock dilation\",\r\n \"unlock ec7\"\r\n ]\r\n },\r\n {\r\n id: 5,\r\n isUnlocked: () => true,\r\n keyword: \"START\",\r\n category: 1,\r\n syntax: `\r\n start ecN
\r\n start dilation`,\r\n description: `Start a specified Eternity Challenge or a Dilated Eternity. This command will also attempt\r\n to unlock the EC if not unlocked, but will not do the same for Dilation (use UNLOCK command to do that).\r\n If you are already in the specified EC or Dilated Eternity, running this command again will do nothing;\r\n otherwise, the Automator will keep attempting to start the Eternity until it succeeds.`,\r\n examples: [\r\n \"start ec12\",\r\n \"start dilation\"\r\n ]\r\n },\r\n {\r\n id: 6,\r\n isUnlocked: () => true,\r\n keyword: \"AUTO\",\r\n category: 2,\r\n syntax: `auto infinity [setting]
\r\n auto eternity [setting]
\r\n auto reality [setting]`,\r\n description: `Turns prestige Autobuyers on or off and allows you to change their settings. If the setting option\r\n is not present, this command will toggle the Autobuyer state, turning it off if it is on and turning it on if\r\n it is off. This command will not work if you try to modify an Autobuyer or setting you do not have.`,\r\n sections: [\r\n {\r\n name: \"SETTINGS\",\r\n items: [\r\n {\r\n header: \"on | off\",\r\n description: \"Turns specified Autobuyer on or off.\",\r\n },\r\n {\r\n header: \"number time units\",\r\n description: `Usable with Infinity and Eternity only.\r\n Turns the Autobuyer on and set it to trigger at the given interval.`\r\n },\r\n {\r\n header: \"number x highest\",\r\n description: `Usable with Infinity and Eternity only. Turns the Autobuyer on and sets it to\r\n \"X times highest\" mode.`\r\n },\r\n {\r\n header: \"number currency\",\r\n description: `Turns the Autobuyer on and sets it to trigger at a specific amount. The currency must\r\n match the autobuyer type (IP, EP, or RM). This will select \"Reality Machines\" mode for the Reality\r\n Autobuyer. Glyph Level mode cannot be changed or set via the Automator, only manually.`,\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"auto infinity on\",\r\n \"auto eternity off\",\r\n \"auto infinity 30s\",\r\n \"auto eternity 10 seconds\",\r\n \"auto eternity 1e100 x highest\"\r\n ]\r\n },\r\n {\r\n id: 7,\r\n isUnlocked: () => BlackHole(1).isUnlocked,\r\n keyword: \"BLACK HOLE\",\r\n category: 2,\r\n syntax: \"black hole state\",\r\n description: `Toggles the speedup effect from the Black Hole on or off. Turning the Black Hole on via the\r\n Automator does not bypass the gradual acceleration from off to max speed which occurs before they are\r\n permanent.`,\r\n examples: [\r\n \"black hole on\",\r\n \"black hole off\",\r\n ]\r\n },\r\n {\r\n id: 8,\r\n isUnlocked: () => Enslaved.isUnlocked,\r\n keyword: \"STORE GAME TIME\",\r\n category: 2,\r\n syntax: \"store game time action\",\r\n description: `Changes whether or not the Black Hole is storing time. Also allows usage of stored time.`,\r\n sections: [\r\n {\r\n name: \"ACTIONS\",\r\n items: [\r\n {\r\n header: \"on | off\",\r\n description: `\r\n Turns storing game time on or off.\r\n `\r\n },\r\n {\r\n header: \"use\",\r\n description: `\r\n Uses all stored game time. Does not alter the on/off state of time storage.\r\n `\r\n }\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"store game time on\",\r\n \"store game time off\",\r\n \"store game time use\",\r\n ]\r\n },\r\n {\r\n id: 9,\r\n isUnlocked: () => true,\r\n keyword: \"NOTIFY\",\r\n category: 3,\r\n syntax: \"notify \\\"text\\\"\",\r\n description: `Takes the specified text and posts it in the top-right corner as\r\n a text notification, in the same spot and style as other notifications such as auto-save\r\n and achievement/upgrade unlocks. Can be useful for seeing automator status while\r\n on tabs other than the Automator tab.`,\r\n examples: [\r\n \"notify \\\"Dilation reached\\\"\",\r\n \"notify \\\"ECs completed\\\"\"\r\n ]\r\n },\r\n {\r\n id: 10,\r\n isUnlocked: () => true,\r\n keyword: \"Adding Comments\",\r\n category: 3,\r\n syntax: \"# text
// text\",\r\n description: `Allows you to leave a note to yourself within your script. This may be\r\n useful for organizing or keeping track of which parts of your script do various things,\r\n in a way that appears more readable than just the commands. These commands mainly serve as a tool to\r\n help you keep the steps of your scripts easier to follow if desired.`,\r\n sections: [\r\n {\r\n name: \"NOTES\",\r\n items: [\r\n {\r\n header: \"Inline comments\",\r\n description: `\r\n The Automator does not support comments which are placed after an already functional\r\n line of code, on the same line. As an example, the single line \"studies load name TDI // Load push\"\r\n will be an invalid command. In this case, you will need to move the comment to a separate line\r\n in the automator.\r\n `\r\n },\r\n {\r\n header: \"Execution speed\",\r\n description: `\r\n Having comments will not slow down your script, as they are completely skipped during\r\n execution and do not count as a command for the purposes of running. For example, even if you have\r\n a really long explanation in the form of comments on lines 20-40, the Automator will still\r\n immediately skip from line 19 to 41 during execution.\r\n `\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"# get 1e20 before starting ec1\",\r\n \"// this loop alternates dilation and pushing\"\r\n ]\r\n },\r\n {\r\n id: 11,\r\n isUnlocked: () => true,\r\n keyword: \"WAIT\",\r\n category: 4,\r\n syntax: \"wait condition\",\r\n description: `Forces Automator to wait for some condition or event. To wait for a certain duration of time,\r\n use the PAUSE command instead.`,\r\n sections: [\r\n {\r\n name: \"POSSIBLE CONDITIONS\",\r\n items: [\r\n {\r\n header: \"comparison\",\r\n description: `\r\n Wait until the comparison statement is true. Check the entry for \"Formatting Comparisons\" for details\r\n on how to properly input this option.\r\n `\r\n },\r\n {\r\n header: \"prestige\",\r\n description: `\r\n Wait until the specified prestige (Infinity, Eternity, or Reality) has been triggered by its respective\r\n Autobuyer. This must happen after this command is reached; if the Autobuyer triggers\r\n before the command is reached, your script may get stuck.\r\n `\r\n },\r\n {\r\n header: \"black hole (state)\",\r\n description: `\r\n Wait until the Black Hole(s) are in the specified state. Valid inputs for state are\r\n \"off\", \"bh1\", and \"bh2\", corresponding to no active Black Hole(s), at least the first Black Hole active,\r\n and both Black Holes active.\r\n `\r\n }\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"wait am >= 1e308\",\r\n \"wait pending completions >= 5\",\r\n \"wait ec9 completions >= 4\",\r\n \"wait infinity\",\r\n \"wait black hole bh1\",\r\n ]\r\n },\r\n {\r\n id: 12,\r\n isUnlocked: () => true,\r\n keyword: \"PAUSE\",\r\n category: 4,\r\n syntax: \"pause interval\",\r\n description: `Tells the automator to stop moving forward and executing commands for a certain amount of time.\r\n Note that if the pause duration is shorter than the automator's execution speed, the automator will wait until\r\n the next execution tick before moving on.`,\r\n examples: [\r\n \"pause 10s\",\r\n \"pause 1 minute\",\r\n \"pause 34 seconds\"\r\n ],\r\n sections: [\r\n {\r\n name: \"INTERVAL FORMATTING\",\r\n items: [\r\n {\r\n header: \"Specified Interval\",\r\n description: `This command accepts time units of milliseconds (\"ms\"), seconds (\"s\", \"sec\", or \"seconds\"),\r\n minutes (\"m\", \"min\", or \"minutes\"), and hours (\"h\" or \"hours\"). You cannot provide just a number and\r\n nothing else; a unit of time must be specified.`,\r\n },\r\n {\r\n header: \"Defined Constant\",\r\n description: `A defined constant may be used instead, see the definition panel. The defined value will\r\n be assumed to be in units of seconds.`\r\n },\r\n ]\r\n },\r\n {\r\n name: \"OTHER\",\r\n items: [\r\n {\r\n header: \"Offline Side-effects\",\r\n description: `This command may behave undesirably when it runs during offline progress due to limited\r\n tick count. A 1-second pause that is usually 20-30 ticks might be only 1 game tick when processing\r\n hours of offline progress, which might not be enough for the resources needed for the rest of the\r\n script.`,\r\n },\r\n {\r\n header: \"Alternatives\",\r\n description: `Using another command like 'WAIT' will allow you to set it for a certain resource amount,\r\n in order to ensure that the game has the proper state before moving onward.`\r\n },\r\n {\r\n header: \"Manual Skip\",\r\n description: `You can manually force the Automator to continue execution past a PAUSE command without\r\n waiting the entire specified time by stepping forward one line (to put it on the next one) and then\r\n resuming execution. If you find yourself doing this regularly, consider modifying your script.`\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: 13,\r\n isUnlocked: () => true,\r\n keyword: \"IF\",\r\n category: 4,\r\n syntax: `if condition {
\r\n
commands
\r\n }`,\r\n description: `Defines an inner block of block of the automator script which will only be executed if the specified\r\n comparison is true when this line is reached. If the comparison is false, the automator will instead skip to the\r\n first line after the block and continue execution from there.`,\r\n examples: [\r\n \"if ec10 completions < 5\",\r\n \"if ep > 1e6000\"\r\n ]\r\n },\r\n {\r\n id: 14,\r\n isUnlocked: () => true,\r\n keyword: \"UNTIL\",\r\n category: 4,\r\n syntax: `until comparison {
\r\n
commands
\r\n }
until prestige_event {
\r\n
commands
\r\n }`,\r\n description: `Defines an inner block of the script where commands are repeated; the comparison is checked at the\r\n start and every time the loop repeats. If the condition is true when the UNTIL statement is first reached, the\r\n inner block of commands will be skipped entirely.\r\n

\r\n If an prestige event (ie. Infinity, Eternity, or Reality) is specified instead of a condition, then the block\r\n will always be entered and the commands within the block will repeat until the event occurs for the first time\r\n after entering the block. Note that the Automator will finish the rest of the loop and then exit after\r\n the prestige event occurs - it will not immediately exit the loop in the middle.`,\r\n examples: [\r\n \"until ep > 1e500\",\r\n \"until reality\",\r\n ]\r\n },\r\n {\r\n id: 15,\r\n isUnlocked: () => true,\r\n keyword: \"WHILE\",\r\n category: 4,\r\n syntax: `while comparison {
\r\n
commands
\r\n }`,\r\n description: `Defines an inner block of the script where commands are repeated; the comparison is checked at the\r\n start and every time the loop repeats. If the condition is false when the WHILE statement is first reached, the\r\n inner block of commands will be skipped entirely.`,\r\n examples: [\r\n `while ep < 1e500`,\r\n `while myThreshold > am`,\r\n ]\r\n },\r\n {\r\n id: 16,\r\n isUnlocked: () => true,\r\n keyword: \"STOP\",\r\n category: 4,\r\n syntax: `stop`,\r\n description: `When the Automator runs this line, it will stop execution as if you clicked the\r\n button on the control panel in the top-left of the Automator. This\r\n does not need to be placed at the end of every script in order to stop them, as turning off the\r\n option on the left panel will do this automatically.\r\n This command may be useful when used inside of an IF command, in order to stop execution\r\n only under certain conditions.`,\r\n examples: [\r\n `stop`,\r\n ]\r\n },\r\n {\r\n id: 17,\r\n isUnlocked: () => true,\r\n keyword: \"Currency List\",\r\n category: 4,\r\n syntax: \"You can use these in any IF, WHILE, UNTIL, or WAIT command\",\r\n description: () => {\r\n const filterText = EffarigUnlock.glyphFilter.isUnlocked\r\n ? `filter score - Glyph filter score of the Glyph which your filter will select this Reality
`\r\n : \"\";\r\n const stText = V.spaceTheorems > 0\r\n ? `space theorems - Current unspent Space Theorem amount
\r\n total space theorems - TOTAL Space Theorems, including ones spent on current Studies
`\r\n : \"\";\r\n return `This is a list of \"currencies\" or numbers that you can use within the Automator.
\r\n Note that when used, most currencies will need to be in scientific notation.
\r\n am - Current Antimatter amount
\r\n ip - Current Infinity Point amount
\r\n ep - Current Eternity Point amount
\r\n rm - Current Reality Machine amount
\r\n infinities - Current Infinity amount
\r\n banked infinities - Current Banked Infinity amount
\r\n eternities - Current Eternity amount
\r\n realities - Current Reality amount
\r\n pending ip - IP gained on Infinity (0 if not available)
\r\n pending ep - EP gained on Eternity (0 if not available)
\r\n pending tp - TP gained on exiting Dilation
\r\n pending rm - RM gained on Reality (0 if not available)
\r\n pending glyph level - Glyph Level gained on Reality (0 if not available)
\r\n dt - Current Dilated Time amount
\r\n tp - Current Tachyon Particle amount
\r\n rg - Current Replicanti Galaxy amount (does not use scientific)
\r\n rep - Current Replicanti amount
\r\n tt - Current Time Theorem amount
\r\n total tt - TOTAL Time Theorems, includes all forms of generated TT and any spent on Studies
\r\n total completions - Total completions of all Eternity Challenges
\r\n pending completions - Total completions of current EC at Eternity
\r\n ecX completions - Amount of EC completions for a certain EC (eg. \"ec6 completions\")
\r\n ${filterText}\r\n ${stText}\r\n `;\r\n }\r\n },\r\n {\r\n id: 18,\r\n isUnlocked: () => true,\r\n keyword: \"Formatting Comparisons\",\r\n category: 4,\r\n syntax: \"resource1 condition resource2\",\r\n description: `\r\n Comparisons are used within certain commands, which allow you to control the behavior of the automator based\r\n on the game's current state. They have a standard format with two value inputs and a comparison operator, but\r\n the value inputs can be anything as long as it is formatted correctly overall.`,\r\n sections: [\r\n {\r\n name: \"CONDITIONS\",\r\n items: [\r\n {\r\n header: \"resource\",\r\n description: `\r\n This can be any Automator Currency, a defined constant, or a number which must be formatted in\r\n scientific notation (eg. 1000, 1e100, 1.8e308). Unlike more general programming languages, this must\r\n be a single value (ie. math expressions such as \"ip + pending ip\" are not allowed).\r\n `\r\n },\r\n {\r\n header: \"condition\",\r\n description: `\r\n This must be an inequality operator (<, <=, >, >=), which takes on its typical mathematical meaning.\r\n Equality operators (==, !=) are not allowed, as the nature of the game means that numbers will often\r\n never be exactly equal and thus checking based on direct equality may lead to unexpected script\r\n behavior.\r\n `\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"ep < 1e20\",\r\n \"total tt > 14000\",\r\n ]\r\n },\r\n {\r\n id: 19,\r\n isUnlocked: () => true,\r\n keyword: \"Commands with inner blocks\",\r\n category: 4,\r\n syntax: `header_command {
\r\n
inner_commands
\r\n }`,\r\n description: `Some commands are associated with an \"inner block\" of commands. This inner block can contain still\r\n contain any other valid command, but may or may not actually get executed based on what the state of the game is\r\n when header_command is executed. This allows you to repeat some commands over and over (eg. Time Study\r\n purchasing), or to skip them entirely (eg. not entering an EC if it already has full completions). These blocks\r\n can be nested if desired, with inner blocks being placed within one another.\r\n

\r\n In the text editor mode: Specify the inner block with curly braces, with the opening brace { on the same line as\r\n the comparison and the closing brace } on its own line after the last line you want inside the block. Inner\r\n commands do not need to be indented, although it may be visually helpful to do so.\r\n

\r\n In the block editor mode: These commands come with an empty dotted rectangle which indicates which commands are\r\n within the inner block. Subsequent blocks can then be dragged inside the dotted rectangle.\r\n `,\r\n examples: [\r\n `if ec10 completions < 5 {
\r\n
\r\n unlock ec10
\r\n start ec10
\r\n }`,\r\n `until ep > 1e8 {
\r\n
\r\n studies nowait purchase 11-62
\r\n pause 10s
\r\n eternity respec
\r\n }`\r\n ]\r\n },\r\n ],\r\n otherAutomatorPoints: [\r\n {\r\n name: \"Reality Count\",\r\n automatorPoints: () => 2 * Math.clampMax(Currency.realities.value, 50),\r\n shortDescription: () => `+${formatInt(2)} per Reality, up to ${formatInt(50)} Realities`,\r\n symbol: \"Ϟ\",\r\n },\r\n {\r\n name: \"Black Hole\",\r\n automatorPoints: () => (BlackHole(1).isUnlocked ? 10 : 0),\r\n shortDescription: () => `Unlocking gives ${formatInt(10)} AP`,\r\n symbol: \"\",\r\n },\r\n ],\r\n templates: automatorTemplates\r\n};\r\n","// Color prop is a combination of a B/W background and a border hex code\r\nexport const glyphCosmeticSets = {\r\n cards: {\r\n id: \"cards\",\r\n name: \"Playing Card Suits\",\r\n symbol: [\"♠\", \"♥\", \"♦\", \"♣\", \"♤\", \"♧\", \"♡\", \"♢\"],\r\n color: [\"W#000000\", \"B#FF2222\"],\r\n },\r\n lower: {\r\n id: \"lower\",\r\n name: \"Lowercase Glyphs\",\r\n symbol: [\"ω\", \"ξ\", \"δ\", \"ψ\"],\r\n },\r\n sus: {\r\n id: \"sus\",\r\n name: \"Suspicious\",\r\n symbol: [\"ඔ\", \"ඕ\", \"ඞ\", \"ඩ\"],\r\n color: [\"B#FCA40A\"]\r\n },\r\n currency: {\r\n id: \"currency\",\r\n name: \"Modern Currency\",\r\n symbol: [\"$\", \"₽\", \"¥\", \"€\", \"¢\", \"£\", \"₩\"],\r\n preventBlur: true,\r\n color: [\"W#00DD00\"],\r\n },\r\n oldCurrency: {\r\n id: \"oldCurrency\",\r\n name: \"Older Currency\",\r\n symbol: [\"₷\", \"₰\", \"₳\", \"₯\", \"₻\"],\r\n preventBlur: true,\r\n color: [\"B#00DD00\"],\r\n },\r\n pipe: {\r\n id: \"pipe\",\r\n name: \"Single Pipes\",\r\n symbol: [\"┌\", \"┐\", \"└\", \"┘\", \"─\", \"│\"],\r\n color: [\"B#33FF33\"],\r\n },\r\n pipe2: {\r\n id: \"pipe2\",\r\n name: \"Double Pipes\",\r\n symbol: [\"╔\", \"╗\", \"╚\", \"╝\", \"═\", \"║\"],\r\n color: [\"W#33FF33\"],\r\n },\r\n trigram: {\r\n id: \"trigram\",\r\n name: \"Trigrams\",\r\n symbol: [\"☰\", \"☱\", \"☲\", \"☳\", \"☴\", \"☵\", \"☶\", \"☷\"],\r\n preventBlur: true,\r\n color: [\"B#FFFFFF\"],\r\n },\r\n arrow: {\r\n id: \"arrow\",\r\n name: \"Single Arrows\",\r\n symbol: [\"←\", \"↓\", \"↑\", \"→\", \"↖\", \"↗\", \"↘\", \"↙\"],\r\n color: [\"W#CC0000\"],\r\n },\r\n arrow2: {\r\n id: \"arrow2\",\r\n name: \"Double Arrows\",\r\n symbol: [\"⇄\", \"⇅\", \"⇔\", \"⇕\"],\r\n color: [\"W#0000CC\"],\r\n },\r\n arrow3: {\r\n id: \"arrow3\",\r\n name: \"Special Arrows\",\r\n symbol: [\"↺\", \"↯\", \"↬\", \"⇱\", \"⇲\", \"⇮\", \"↭\"],\r\n preventBlur: true,\r\n color: [\"W#CCCC00\"],\r\n },\r\n integral: {\r\n id: \"integral\",\r\n name: \"Integration\",\r\n symbol: [\"∬\", \"∭\", \"∮\", \"∯\", \"∰\", \"∱\", \"∲\", \"∳\"],\r\n preventBlur: true,\r\n color: [\"B#123456\"]\r\n },\r\n numbers: {\r\n id: \"numbers\",\r\n name: \"Circled Numbers\",\r\n symbol: [\"①\", \"②\", \"③\", \"④\", \"⑤\", \"⑥\", \"⑦\", \"⑧\"],\r\n preventBlur: true,\r\n color: [\"B#607D8B\"]\r\n },\r\n blocks: {\r\n id: \"blocks\",\r\n name: \"2x2 Blocks\",\r\n symbol: [\"▘\", \"▚\", \"▞\", \"▙\", \"▛\", \"▜\", \"▟\"],\r\n },\r\n shapes: {\r\n id: \"shapes\",\r\n name: \"Miscellaneous Shapes\",\r\n symbol: [\"▰\", \"▲\", \"◆\", \"◎\", \"◍\"],\r\n preventBlur: true,\r\n },\r\n chess: {\r\n id: \"chess\",\r\n name: \"Chess Pieces\",\r\n symbol: [\"♟\", \"♞\", \"♝\", \"♜\", \"♛\", \"♚\"],\r\n preventBlur: true,\r\n color: [\"B#AAAAAA\"],\r\n },\r\n planet: {\r\n id: \"planet\",\r\n name: \"Planetary Symbols\",\r\n symbol: [\"☿\", \"♀\", \"♁\", \"♂\", \"♃\", \"♄\", \"♆\", \"♇\"],\r\n preventBlur: true,\r\n color: [\"B#964B00\"],\r\n },\r\n musical: {\r\n id: \"musical\",\r\n name: \"Musical Symbols\",\r\n symbol: [\"♩\", \"♪\", \"♬\", \"♭\", \"♮\", \"♯\"],\r\n preventBlur: true,\r\n color: [\"W#E621E6\"]\r\n },\r\n recycle: {\r\n id: \"recycle\",\r\n name: \"Recycling Symbols\",\r\n symbol: [\"♻\", \"♳\", \"♴\", \"♵\", \"♶\", \"♷\", \"♸\", \"♹\"],\r\n preventBlur: true,\r\n },\r\n dice: {\r\n id: \"dice\",\r\n name: \"Dice Faces\",\r\n symbol: [\"⚀\", \"⚁\", \"⚂\", \"⚃\", \"⚄\", \"⚅\"],\r\n preventBlur: true,\r\n },\r\n hazard: {\r\n id: \"hazard\",\r\n name: \"Hazard Symbols\",\r\n symbol: [\"☠\", \"☢\", \"☣\", \"⚠\"],\r\n preventBlur: true,\r\n color: [\"W#FCA40A\"]\r\n },\r\n celestial: {\r\n id: \"celestial\",\r\n name: \"Celestial Icons\",\r\n symbol: [\"\\uF0C1\", \"⌬\", \"ᛝ\", \"♅\"],\r\n color: [\"B#00BCD4\"],\r\n },\r\n alchemy: {\r\n id: \"alchemy\",\r\n name: \"Alchemical Symbols\",\r\n symbol: [\"🜁\", \"🜂\", \"🜃\", \"🜄\", \"🜔\", \"🜍\", \"🜞\", \"🜚\"],\r\n color: [\"B#FFD700\"],\r\n },\r\n blob: {\r\n id: \"blob\",\r\n name: \"Blobs\",\r\n symbol: [\"\\uE011\", \"\\uE012\", \"\\uE013\", \"\\uE014\", \"\\uE016\", \"\\uE01A\", \"\\uE01C\"],\r\n preventBlur: true,\r\n color: [\"B#E4B51A\"],\r\n },\r\n blob2: {\r\n id: \"blob2\",\r\n name: \"More Blobs\",\r\n symbol: [\"\\uE01D\", \"\\uE01E\", \"\\uE021\", \"\\uE024\", \"\\uE025\", \"\\uE026\", \"\\uE027\"],\r\n preventBlur: true,\r\n },\r\n star: {\r\n id: \"star\",\r\n name: \"Geometric Stars\",\r\n symbol: [\"★\", \"☆\", \"✪\", \"✯\", \"✭\", \"✫\", \"🜞\"],\r\n },\r\n star2: {\r\n id: \"star2\",\r\n name: \"Realistic Stars\",\r\n symbol: [\"✶\", \"✦\", \"✧\", \"✺\", \"✹\", \"✷\"],\r\n color: [\"W#D4FFFF\", \"W#FDFFCC\"],\r\n },\r\n gem: {\r\n id: \"gem\",\r\n name: \"Gemstones\",\r\n symbol: [\"💎\"],\r\n color: [\"B#035E3B\", \"B#943B47\", \"B#032C54\"],\r\n },\r\n heiroglyph: {\r\n id: \"heiroglyph\",\r\n name: \"Common Hieroglyphs\",\r\n symbol: [\"𓂀\", \"𓀶\", \"𓅊\", \"𓇌\", \"𓊝\", \"☥\"],\r\n preventBlur: true,\r\n },\r\n paperclip: {\r\n id: \"paperclip\",\r\n name: \"Useless Paperclips\",\r\n symbol: [\"𓄲\", \"𓄳\", \"𓄴\", \"𓄵\", \"𓄶\", \"𓄷\", \"𓄸\"],\r\n preventBlur: true,\r\n color: [\"B#222222\"],\r\n },\r\n snake: {\r\n id: \"snake\",\r\n name: \"Various Snakes\",\r\n symbol: [\"𓆓\", \"𓆔\", \"𓆕\", \"𓆖\", \"𓆗\", \"𓆘\"],\r\n preventBlur: true,\r\n },\r\n egyptNumber: {\r\n id: \"egyptNumber\",\r\n name: \"Egyptian Numbers\",\r\n symbol: [\"𓆄\", \"𓅔\", \"𓆾\", \"𓂰\", \"𓍦\", \"𓎋\", \"𓐀\", \"𓃐\"],\r\n preventBlur: true,\r\n color: [\"W#123456\"]\r\n },\r\n egyptWeather: {\r\n id: \"egyptWeather\",\r\n name: \"Egyptian Weathervanes\",\r\n symbol: [\"𓈹\", \"𓈧\", \"𓈷\", \"𓉈\", \"𓈩\", \"𓈻\", \"𓈽\"],\r\n preventBlur: true,\r\n color: [\"W#607D8B\"]\r\n },\r\n limbs: {\r\n id: \"limbs\",\r\n name: \"Awkward Limbs\",\r\n symbol: [\"𓈝\", \"𓄒\", \"𓃂\", \"𓃁\", \"𓂩\", \"𓂙\", \"𓂓\", \"𓂼\"],\r\n preventBlur: true,\r\n color: [\"B#E621E6\"]\r\n },\r\n animal: {\r\n id: \"animal\",\r\n name: \"Moses' Ark\",\r\n symbol: [\"𓆏\", \"𓆉\", \"𓅬\", \"𓅃\", \"𓃲\", \"𓆣\", \"𓆊\", \"𓃰\"],\r\n preventBlur: true,\r\n color: [\"W#0000AA\"],\r\n },\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const GlyphCombiner = Object.freeze({\r\n /**\r\n * @param {number[]} x\r\n * @returns {number}\r\n */\r\n add: x => x.reduce(Number.sumReducer, 0),\r\n /**\r\n * @param {number[]} x\r\n * @returns {number}\r\n */\r\n multiply: x => x.reduce(Number.prodReducer, 1),\r\n /**\r\n * For exponents, the base value is 1, so when we add two exponents a and b we want to get a + b - 1,\r\n * so that if a and b are both close to 1 so is their sum. In general, when we add a list x of exponents,\r\n * we have to add 1 - x.length to the actual sum, so that if all the exponents are close to 1 the result\r\n * is also close to 1 rather than close to x.length.\r\n * @param {number[]} x\r\n * @returns {number}\r\n */\r\n addExponents: x => x.reduce(Number.sumReducer, 1 - x.length),\r\n /**\r\n * @param {Decimal[]} x\r\n * @returns {Decimal}\r\n */\r\n multiplyDecimal: x => x.reduce(Decimal.prodReducer, DC.D1)\r\n});\r\n\r\nexport const glyphEffects = {\r\n timepow: {\r\n id: \"timepow\",\r\n bitmaskIndex: 0,\r\n isGenerated: true,\r\n glyphTypes: [\"time\"],\r\n singleDesc: \"Time Dimension power +{value}\",\r\n totalDesc: \"Time Dimension multipliers ^{value}\",\r\n shortDesc: \"TD power +{value}\",\r\n effect: (level, strength) => 1.01 + Math.pow(level, 0.32) * Math.pow(strength, 0.45) / 75,\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: GlyphCombiner.addExponents,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n timespeed: {\r\n id: \"timespeed\",\r\n bitmaskIndex: 1,\r\n isGenerated: true,\r\n glyphTypes: [\"time\"],\r\n singleDesc: \"Multiply game speed by {value}\",\r\n totalDesc: \"Game runs ×{value} faster\",\r\n genericDesc: \"Game speed multiplier\",\r\n shortDesc: \"Game speed ×{value}\",\r\n effect: (level, strength) => (GlyphAlteration.isEmpowered(\"time\")\r\n ? 1 + Math.pow(level, 0.35)\r\n : 1 + Math.pow(level, 0.3) * Math.pow(strength, 0.65) / 20),\r\n formatEffect: x => format(x, 3, 3),\r\n combine: GlyphCombiner.multiply,\r\n alteredColor: () => GlyphAlteration.getEmpowermentColor(\"time\"),\r\n alterationType: ALTERATION_TYPE.EMPOWER,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n timeetermult: {\r\n id: \"timeetermult\",\r\n bitmaskIndex: 2,\r\n isGenerated: true,\r\n glyphTypes: [\"time\"],\r\n singleDesc: \"Multiply Eternity gain by {value}\",\r\n totalDesc: \"Eternity gain ×{value}\",\r\n genericDesc: \"Eternity gain multiplier\",\r\n shortDesc: \"Eternities ×{value}\",\r\n effect: (level, strength) => Math.pow((strength + 3) * level, 0.9) *\r\n Math.pow(3, GlyphAlteration.sacrificeBoost(\"time\")),\r\n formatEffect: x => format(x, 2, 2),\r\n combine: GlyphCombiner.multiply,\r\n alteredColor: () => GlyphAlteration.getBoostColor(\"time\"),\r\n alterationType: ALTERATION_TYPE.BOOST,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n timeEP: {\r\n id: \"timeEP\",\r\n bitmaskIndex: 3,\r\n isGenerated: true,\r\n glyphTypes: [\"time\"],\r\n singleDesc: () => (GlyphAlteration.isAdded(\"time\")\r\n ? \"Eternity Point gain \\n×{value} [and ^]{value2}\"\r\n : \"Multiply Eternity Point gain by {value}\"),\r\n totalDesc: () => (GlyphAlteration.isAdded(\"time\")\r\n ? \"Eternity Point gain ×{value} and ^{value2}\"\r\n : \"Eternity Point gain ×{value}\"),\r\n genericDesc: () => (GlyphAlteration.isAdded(\"time\")\r\n ? \"Eternity Point gain multiplier and power\"\r\n : \"Eternity Point gain multiplier\"),\r\n shortDesc: () => (GlyphAlteration.isAdded(\"time\")\r\n ? \"EP ×{value} and ^{value2}\"\r\n : \"EP ×{value}\"),\r\n effect: (level, strength) => Math.pow(level * strength, 3) * 100,\r\n formatEffect: x => format(x, 2, 3),\r\n combine: GlyphCombiner.multiply,\r\n conversion: x => 1 + Math.log10(x) / 1000,\r\n formatSecondaryEffect: x => format(x, 4, 4),\r\n alteredColor: () => GlyphAlteration.getAdditionColor(\"time\"),\r\n alterationType: ALTERATION_TYPE.ADDITION,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n dilationDT: {\r\n id: \"dilationDT\",\r\n bitmaskIndex: 4,\r\n isGenerated: true,\r\n glyphTypes: [\"dilation\"],\r\n singleDesc: \"Multiply Dilated Time gain by {value}\",\r\n totalDesc: \"Dilated Time gain ×{value}\",\r\n shortDesc: \"DT ×{value}\",\r\n effect: (level, strength) => {\r\n let a = DC.D1;\r\n if (GlyphAlteration.isEmpowered(\"dilation\")) a = DC.D1_005.pow(level).times(15);\r\n else{ a = Decimal.pow(level * strength, 1.5).times(2);}\r\n return a;\r\n },\r\n formatEffect: x => format(x, 2, 1),\r\n combine: effects =>{\r\n let a = effects.reduce(Decimal.prodReducer, DC.D1);\r\n return a.gte(DC.E500) ? a.div(DC.E500).pow(0.5).times(DC.E500) : a;\r\n },\r\n alteredColor: () => GlyphAlteration.getEmpowermentColor(\"dilation\"),\r\n alterationType: ALTERATION_TYPE.EMPOWER,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n dilationgalaxyThreshold: {\r\n id: \"dilationgalaxyThreshold\",\r\n bitmaskIndex: 5,\r\n isGenerated: true,\r\n glyphTypes: [\"dilation\"],\r\n singleDesc: \"Tachyon Galaxy threshold multiplier ×{value}\",\r\n genericDesc: \"Tachyon Galaxy cost multiplier\",\r\n shortDesc: \"TG threshold ×{value}\",\r\n effect: (level, strength) => {\r\n let a = 1 - Math.pow(level, 0.17) * Math.pow(strength, 0.35) / 100 - GlyphAlteration.sacrificeBoost(\"dilation\") / 50;\r\n return a;\r\n },\r\n formatEffect: x => format(x, 3, 3),\r\n alteredColor: () => GlyphAlteration.getBoostColor(\"dilation\"),\r\n alterationType: ALTERATION_TYPE.BOOST,\r\n combine: effects => {\r\n const prod = effects.reduce(Number.prodReducer, 1);\r\n return prod < 0.4 ? (Math.pow(0.4 - prod, 1.7) < 0.3) ? { value: 0.3 - Math.pow(0.4 - prod, 3), capped: true } : { value: 0.4 - Math.pow(0.4 - prod, 1.7), capped: true } : { value: prod, capped: false };\r\n },\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n dilationTTgen: {\r\n // TTgen slowly generates TT, value amount is per second, displayed per hour\r\n id: \"dilationTTgen\",\r\n bitmaskIndex: 6,\r\n isGenerated: true,\r\n glyphTypes: [\"dilation\"],\r\n singleDesc: () => (GlyphAlteration.isAdded(\"dilation\")\r\n ? \"Generates {value} Time Theorems/hour \\n[and multiplies Time Theorem \\ngeneration by] {value2}\"\r\n : \"Generates {value} Time Theorems per hour\"),\r\n totalDesc: () => (GlyphAlteration.isAdded(\"dilation\")\r\n ? \"Generating {value} Time Theorems/hour and Time Theorem generation ×{value2}\"\r\n : \"Generating {value} Time Theorems per hour\"),\r\n genericDesc: () => (GlyphAlteration.isAdded(\"dilation\")\r\n ? \"Time Theorem generation and multiplier\"\r\n : \"Time Theorem generation\"),\r\n shortDesc: () => (GlyphAlteration.isAdded(\"dilation\")\r\n ? \"{value} TT/hr and TTgen ×{value2}\"\r\n : \"{value} TT/hr\"),\r\n effect: (level, strength) => Math.pow(level * strength, 0.5) / 10000,\r\n /** @type {function(number): string} */\r\n formatEffect: x => format(3600 * x, 2, 2),\r\n combine: GlyphCombiner.add,\r\n conversion: x => Math.clampMin(Math.pow(10000 * x, 1.6), 1),\r\n formatSecondaryEffect: x => format(x, 2, 2),\r\n alteredColor: () => GlyphAlteration.getAdditionColor(\"dilation\"),\r\n alterationType: ALTERATION_TYPE.ADDITION,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n dilationpow: {\r\n id: \"dilationpow\",\r\n bitmaskIndex: 7,\r\n isGenerated: true,\r\n glyphTypes: [\"dilation\"],\r\n singleDesc: \"Antimatter Dimension power +{value} while Dilated\",\r\n totalDesc: \"Antimatter Dimension multipliers ^{value} while Dilated\",\r\n genericDesc: \"Antimatter Dimensions ^x while Dilated\",\r\n shortDesc: \"Dilated AD power +{value}\",\r\n effect: (level, strength) => 1.1 + Math.pow(level, 0.7) * Math.pow(strength, 0.7) / 25,\r\n formatEffect: x => format(x, 2, 2),\r\n formatSingleEffect: x => format(x - 1, 2, 2),\r\n combine: GlyphCombiner.addExponents,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n replicationspeed: {\r\n id: \"replicationspeed\",\r\n bitmaskIndex: 8,\r\n isGenerated: true,\r\n glyphTypes: [\"replication\"],\r\n singleDesc: \"Multiply Replication speed by {value}\",\r\n totalDesc: \"Replication speed ×{value}\",\r\n genericDesc: \"Replication speed multiplier\",\r\n shortDesc: \"Replication speed ×{value}\",\r\n effect: (level, strength) =>{ let a = (GlyphAlteration.isEmpowered(\"replication\")? DC.D1_007.pow(level).times(10): Decimal.times(level, strength).times(3));\r\n if (a.gte(new Decimal(\"1e600\"))){\r\n return a.pow(0.45);\r\n }\r\n return a;\r\n },\r\n formatEffect: x => format(x, 2, 1),\r\n combine: effects =>{\r\n let a = effects.reduce(Decimal.prodReducer, DC.D1);\r\n return a.gte(new Decimal(\"1e600\")) ? a.div(new Decimal(\"1e600\")).pow(0.45).times(new Decimal(\"1e600\")) : a;\r\n },\r\n alteredColor: () => GlyphAlteration.getEmpowermentColor(\"replication\"),\r\n alterationType: ALTERATION_TYPE.EMPOWER,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n replicationpow: {\r\n id: \"replicationpow\",\r\n bitmaskIndex: 9,\r\n isGenerated: true,\r\n glyphTypes: [\"replication\"],\r\n singleDesc: \"Replicanti multiplier power +{value}\",\r\n totalDesc: \"Replicanti multiplier ^{value}\",\r\n shortDesc: \"Replicanti mult. power +{value}\",\r\n effect: (level, strength) => 1.1 + Math.pow(level, 0.5) * strength / 25 +\r\n GlyphAlteration.sacrificeBoost(\"replication\") * 3,\r\n formatEffect: x => format(x, 2, 2),\r\n formatSingleEffect: x => format(x - 1, 2, 2),\r\n combine: GlyphCombiner.addExponents,\r\n alteredColor: () => GlyphAlteration.getBoostColor(\"replication\"),\r\n alterationType: ALTERATION_TYPE.BOOST,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n replicationdtgain: {\r\n id: \"replicationdtgain\",\r\n bitmaskIndex: 10,\r\n isGenerated: true,\r\n glyphTypes: [\"replication\"],\r\n singleDesc: () => (GlyphAlteration.isAdded(\"replication\")\r\n ? `Multiply Dilated Time \\n[and Replicanti speed] by \\n+{value} per ${format(DC.E10000)} replicanti`\r\n : `Multiply Dilated Time gain by \\n+{value} per ${format(DC.E10000)} replicanti`),\r\n totalDesc: () => (GlyphAlteration.isAdded(\"replication\")\r\n ? `Multiply Dilated Time and Replication speed by +{value} per ${format(DC.E10000)} replicanti`\r\n : `Multiply Dilated Time gain by +{value} per ${format(DC.E10000)} replicanti`),\r\n genericDesc: () => (GlyphAlteration.isAdded(\"replication\")\r\n ? \"Dilated Time+Replicanti mult from replicanti\"\r\n : \"Dilated Time gain multiplier from replicanti\"),\r\n shortDesc: () => (GlyphAlteration.isAdded(\"replication\")\r\n ? `×DT and repl. by +{value} per ${format(DC.E10000)} replicanti`\r\n : `×DT by +{value} per ${format(DC.E10000)} replicanti`),\r\n effect: (level, strength) => 0.0003 * Math.pow(level, 0.3) * Math.pow(strength, 0.65),\r\n formatEffect: x => format(10000 * x, 2, 2),\r\n formatSingleEffect: x => format(10000 * x, 2, 2),\r\n // It's bad to stack this one additively (N glyphs acts as a DT mult of N) or multiplicatively (the raw number is\r\n // less than 1), so instead we do a multiplicative stacking relative to the \"base\" effect of a level 1, 0% glyph.\r\n // We also introduce a 3x mult per glyph after the first, so that stacking level 1, 0% glyphs still has an effect.\r\n // This is still just a flat DT mult when stacking multiple glyphs, but at least it's bigger than 2 or 3.\r\n combine: effects => ({\r\n value: effects.length === 0 ? 0 : effects.reduce(Number.prodReducer, Math.pow(0.0001, 1 - effects.length)),\r\n capped: false\r\n }),\r\n conversion: x => x,\r\n formatSecondaryEffect: x => format(x, 2, 3),\r\n formatSingleSecondaryEffect: x => format(x, 5, 5),\r\n alteredColor: () => GlyphAlteration.getAdditionColor(\"replication\"),\r\n alterationType: ALTERATION_TYPE.ADDITION,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n replicationglyphlevel: {\r\n id: \"replicationglyphlevel\",\r\n bitmaskIndex: 11,\r\n isGenerated: true,\r\n glyphTypes: [\"replication\"],\r\n singleDesc: () => `Replicanti factor for Glyph level:\\n ^${format(0.4, 1, 1)}\r\n ➜ ^(${format(0.4, 1, 1)} + {value})`,\r\n totalDesc: () => `Replicanti factor for Glyph level: ^${format(0.4, 1, 1)}\r\n ➜ ^(${format(0.4, 1, 1)} + {value})`,\r\n genericDesc: \"Replicanti factor for Glyph level\",\r\n shortDesc: \"Replicanti pow. for level +{value}\",\r\n effect: (level, strength) => Math.pow(Math.pow(level, 0.25) * Math.pow(strength, 0.4), 0.5) / 50,\r\n formatEffect: x => format(x, 3, 3),\r\n combine: effects => {\r\n let sum = effects.reduce(Number.sumReducer, 0);\r\n if (effects.length > 2) sum *= 6 / (effects.length + 4);\r\n return sum > 0.1\r\n ? { value: 0.1 + 0.2 * (sum - 0.1), capped: true }\r\n : { value: sum, capped: effects.length > 2 };\r\n },\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n infinitypow: {\r\n id: \"infinitypow\",\r\n bitmaskIndex: 12,\r\n isGenerated: true,\r\n glyphTypes: [\"infinity\"],\r\n singleDesc: \"Infinity Dimension power +{value}\",\r\n totalDesc: \"Infinity Dimension multipliers ^{value}\",\r\n shortDesc: \"ID power +{value}\",\r\n effect: (level, strength) => {\r\n let a = 1.007 + Math.pow(level, 0.21) * Math.pow(strength, 0.4) / 75 + GlyphAlteration.sacrificeBoost(\"infinity\") / 50;\r\n return a;\r\n },\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: effects =>{\r\n let a = effects.reduce(Number.sumReducer, 1 - effects.length);\r\n return a > 1 ? (a-1)/3 + 1 : a\r\n },\r\n alteredColor: () => GlyphAlteration.getBoostColor(\"infinity\"),\r\n alterationType: ALTERATION_TYPE.BOOST,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n infinityrate: {\r\n id: \"infinityrate\",\r\n bitmaskIndex: 13,\r\n isGenerated: true,\r\n glyphTypes: [\"infinity\"],\r\n singleDesc: () => `Infinity Power conversion rate: \\n^${formatInt(7)}\r\n ➜ ^(${formatInt(7)} + {value})`,\r\n totalDesc: () => `Infinity Power conversion rate: ^${formatInt(7)}\r\n ➜ ^(${formatInt(7)} + {value})`,\r\n genericDesc: \"Infinity Power conversion rate\",\r\n shortDesc: \"Infinity Power conversion +{value}\",\r\n effect: (level, strength) => {\r\n let a = Math.pow(level, 0.2) * Math.pow(strength, 0.4) * 0.04;\r\n return a;\r\n },\r\n formatEffect: x => format(x, 2, 2),\r\n combine: effects =>{\r\n let x = effects.reduce(Number.sumReducer, 0);\r\n return x > 0.5 ? (x-0.5)/20 + 0.5 : x;\r\n },\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n infinityIP: {\r\n id: \"infinityIP\",\r\n bitmaskIndex: 14,\r\n isGenerated: true,\r\n glyphTypes: [\"infinity\"],\r\n singleDesc: () => (GlyphAlteration.isAdded(\"infinity\")\r\n ? \"Infinity Point gain \\n×{value} [and ^]{value2}\"\r\n : \"Multiply Infinity Point gain by {value}\"),\r\n totalDesc: () => (GlyphAlteration.isAdded(\"infinity\")\r\n ? \"Infinity Point gain ×{value} and ^{value2}\"\r\n : \"Infinity Point gain ×{value}\"),\r\n genericDesc: () => (GlyphAlteration.isAdded(\"infinity\")\r\n ? \"Infinity Point gain multiplier and power\"\r\n : \"Infinity Point gain multiplier\"),\r\n shortDesc: () => (GlyphAlteration.isAdded(\"infinity\")\r\n ? \"IP ×{value} and ^{value2}\"\r\n : \"IP ×{value}\"),\r\n effect: (level, strength) => Math.pow(level * (strength + 1), 6) * 10000,\r\n formatEffect: x => format(x, 2, 3),\r\n combine: GlyphCombiner.multiply,\r\n // eslint-disable-next-line no-negated-condition\r\n softcap: value => ((Effarig.eternityCap !== undefined) ? Math.min(value, Effarig.eternityCap.toNumber()) : value),\r\n conversion: x => 1 + Math.log10(x) / 1800,\r\n formatSecondaryEffect: x => format(x, 4, 4),\r\n alteredColor: () => GlyphAlteration.getAdditionColor(\"infinity\"),\r\n alterationType: ALTERATION_TYPE.ADDITION,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n infinityinfmult: {\r\n id: \"infinityinfmult\",\r\n bitmaskIndex: 15,\r\n isGenerated: true,\r\n glyphTypes: [\"infinity\"],\r\n singleDesc: \"Multiply Infinity gain by {value}\",\r\n totalDesc: \"Infinity gain ×{value}\",\r\n genericDesc: \"Infinity gain multiplier\",\r\n shortDesc: \"Infinities ×{value}\",\r\n effect: (level, strength) => (GlyphAlteration.isEmpowered(\"infinity\")\r\n ? DC.D1_02.pow(level)\r\n : Decimal.pow(level * strength, 1.5).times(2)),\r\n formatEffect: x => format(x, 2, 1),\r\n combine: GlyphCombiner.multiplyDecimal,\r\n alteredColor: () => GlyphAlteration.getEmpowermentColor(\"infinity\"),\r\n alterationType: ALTERATION_TYPE.EMPOWER,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n powerpow: {\r\n id: \"powerpow\",\r\n bitmaskIndex: 16,\r\n isGenerated: true,\r\n glyphTypes: [\"power\"],\r\n singleDesc: () => (GlyphAlteration.isAdded(\"power\")\r\n ? \"Antimatter Dimension power +{value}\\n[and Antimatter Galaxy cost ×]{value2}\"\r\n : \"Antimatter Dimension power +{value}\"),\r\n totalDesc: () => (GlyphAlteration.isAdded(\"power\")\r\n ? \"Antimatter Dimension multipliers ^{value} and Antimatter Galaxy cost ×{value2}\"\r\n : \"Antimatter Dimension multipliers ^{value}\"),\r\n genericDesc: () => (GlyphAlteration.isAdded(\"power\")\r\n ? \"Antimatter Dimensions multipliers ^x and Antimatter Galaxy cost multiplier\"\r\n : \"Antimatter Dimension multipliers ^x\"),\r\n shortDesc: () => (GlyphAlteration.isAdded(\"power\")\r\n ? \"AD power +{value} and AG cost ×{value2}\"\r\n : \"AD power +{value}\"),\r\n effect: (level, strength) => 1.015 + Math.pow(level, 0.2) * Math.pow(strength, 0.4) / 75,\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: effects =>{\r\n let a = effects.reduce(Number.sumReducer, 1 - effects.length);\r\n return a > 0.6 ? (a-1)/6 + 1 : a\r\n },\r\n conversion: x => 2 / (x + 1),\r\n formatSecondaryEffect: x => format(x, 3, 3),\r\n alteredColor: () => GlyphAlteration.getAdditionColor(\"power\"),\r\n alterationType: ALTERATION_TYPE.ADDITION,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n powermult: {\r\n id: \"powermult\",\r\n bitmaskIndex: 17,\r\n isGenerated: true,\r\n glyphTypes: [\"power\"],\r\n singleDesc: \"Antimatter Dimension multipliers ×{value}\",\r\n shortDesc: \"AD ×{value}\",\r\n effect: (level, strength) => (GlyphAlteration.isEmpowered(\"power\")\r\n ? DC.D11111.pow(level * 220)\r\n : Decimal.pow(level * strength * 10, level * strength * 10)),\r\n formatEffect: x => formatPostBreak(x, 2, 0),\r\n combine: GlyphCombiner.multiplyDecimal,\r\n alteredColor: () => GlyphAlteration.getEmpowermentColor(\"power\"),\r\n alterationType: ALTERATION_TYPE.EMPOWER,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n powerdimboost: {\r\n id: \"powerdimboost\",\r\n bitmaskIndex: 18,\r\n isGenerated: true,\r\n glyphTypes: [\"power\"],\r\n singleDesc: \"Dimension Boost multiplier ×{value}\",\r\n genericDesc: \"Dimension Boost multiplier\",\r\n shortDesc: \"Dimboost mult. ×{value}\",\r\n effect: (level, strength) => Math.pow(level * strength, 0.5) *\r\n Math.pow(1 + GlyphAlteration.sacrificeBoost(\"power\"), 3),\r\n formatEffect: x => format(x, 2, 2),\r\n combine: GlyphCombiner.multiply,\r\n alteredColor: () => GlyphAlteration.getBoostColor(\"power\"),\r\n alterationType: ALTERATION_TYPE.BOOST,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n powerbuy10: {\r\n id: \"powerbuy10\",\r\n bitmaskIndex: 19,\r\n isGenerated: true,\r\n glyphTypes: [\"power\"],\r\n singleDesc: () => `Increase the bonus from buying ${formatInt(10)} Antimatter Dimensions by {value}`,\r\n totalDesc: () => `Multiplier from \"Buy ${formatInt(10)}\" ×{value}`,\r\n genericDesc: () => `\"Buy ${formatInt(10)}\" bonus increase`,\r\n shortDesc: () => `AD \"Buy ${formatInt(10)}\" mult. ×{value}`,\r\n effect: (level, strength) => 1 + level * strength / 12,\r\n formatEffect: x => format(x, 2, 2),\r\n combine: GlyphCombiner.addExponents,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n effarigrm: {\r\n id: \"effarigrm\",\r\n bitmaskIndex: 20,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: () => {\r\n return Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked ? `Reality Machine multiplier ×{value} [and\\nImaginary Machine cap] ×{value.pow(0.5)}` : `Reality Machine multiplier ×{value}`;\r\n },\r\n genericDesc: () =>{\r\n return Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked ? \"Reality Machine and Imaginary Machine cap multiplier\" : \"Reality Machine multiplier\";\r\n },\r\n shortDesc: () => {\r\n return Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked ? \"RM ×{value} and iM cap ×{value.pow(0.5)}\" : \"RM ×{value}\";\r\n },\r\n effect: (level, strength) => (GlyphAlteration.isEmpowered(\"effarig\") ? Math.pow(level, 1.5) : Math.pow(level, 0.6) * strength),\r\n formatEffect: x => format(x, 2, 2),\r\n combine: GlyphCombiner.multiply,\r\n alteredColor: () => GlyphAlteration.getEmpowermentColor(\"effarig\"),\r\n alterationType: ALTERATION_TYPE.EMPOWER\r\n },\r\n effarigglyph: {\r\n id: \"effarigglyph\",\r\n bitmaskIndex: 21,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: \"Glyph Instability starting level +{value}\",\r\n genericDesc: \"Glyph Instability delay\",\r\n shortDesc: \"Instability delay +{value}\",\r\n effect: (level, strength) => {\r\n let a = Math.floor(10 * Math.pow(level * strength, 0.5));\r\n return a;\r\n },\r\n formatEffect: x => formatInt(x),\r\n combine: effects =>{\r\n let x = effects.reduce(Number.sumReducer, 0);\r\n return x > 5000 ? (x-5000)/5 + 5000: x;\r\n },\r\n },\r\n effarigblackhole: {\r\n id: \"effarigblackhole\",\r\n bitmaskIndex: 22,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: \"Game speed power +{value}\",\r\n totalDesc: \"Game speed ^{value}\",\r\n genericDesc: \"Game speed ^x\",\r\n shortDesc: \"Game speed power +{value}\",\r\n effect: (level, strength) =>{\r\n let a = 1 + Math.pow(level, 0.25) * Math.pow(strength, 0.4) / 75;\r\n return a;\r\n },\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: effects => {\r\n let x = effects.reduce(Number.sumReducer, 1 - effects.length);\r\n return x > 1.4 ? (x-1.4)/200 + 1.4: x;\r\n },\r\n },\r\n effarigachievement: {\r\n id: \"effarigachievement\",\r\n bitmaskIndex: 23,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: \"Achievement multiplier power +{value}\",\r\n totalDesc: \"Achievement multiplier ^{value}\",\r\n genericDesc: \"Achievement multiplier ^x\",\r\n shortDesc: \"Achievement mult. power +{value}\",\r\n effect: (level, strength) => 1 + Math.pow(level, 0.4) * Math.pow(strength, 0.6) / 60 +\r\n GlyphAlteration.sacrificeBoost(\"effarig\") / 10,\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: GlyphCombiner.addExponents,\r\n alteredColor: () => GlyphAlteration.getBoostColor(\"effarig\"),\r\n alterationType: ALTERATION_TYPE.BOOST\r\n },\r\n effarigforgotten: {\r\n id: \"effarigforgotten\",\r\n bitmaskIndex: 24,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: () => (GlyphAlteration.isAdded(\"effarig\")\r\n ? `\"Buy ${formatInt(10)}\" multiplier ^{value} [and\\nDimension Boost multiplier ^]{value2}`\r\n : `Bonus from buying ${formatInt(10)} Dimensions ^{value}`),\r\n totalDesc: () => (GlyphAlteration.isAdded(\"effarig\")\r\n ? `Multiplier from \"Buy ${formatInt(10)}\" ^{value} and Dimension Boost multiplier ^{value2}`\r\n : `Multiplier from \"Buy ${formatInt(10)}\" ^{value}`),\r\n genericDesc: () => (GlyphAlteration.isAdded(\"effarig\")\r\n ? `\"Buy ${formatInt(10)}\" and Dimension Boost multipliers ^x`\r\n : `\"Buy ${formatInt(10)}\" multiplier ^x`),\r\n shortDesc: () => (GlyphAlteration.isAdded(\"effarig\")\r\n ? `Buy ${formatInt(10)} mult. ^{value}, Dimboost mult. ^{value2}`\r\n : `Buy ${formatInt(10)} mult. ^{value}`),\r\n effect: (level, strength) => {\r\n let a = 1 + 2 * Math.pow(level, 0.25) * Math.pow(strength, 0.4);\r\n return a;\r\n },\r\n formatEffect: x => format(x, 2, 2),\r\n combine: effects =>{\r\n let x = effects.reduce(Number.sumReducer, 0);\r\n return x > 100 ? (x-100)/5 + 100 : x;\r\n },\r\n conversion: x => Math.pow(x, 0.4),\r\n formatSecondaryEffect: x => format(x, 2, 2),\r\n alteredColor: () => GlyphAlteration.getAdditionColor(\"effarig\"),\r\n alterationType: ALTERATION_TYPE.ADDITION\r\n },\r\n effarigdimensions: {\r\n id: \"effarigdimensions\",\r\n bitmaskIndex: 25,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: \"All Dimension power +{value}\",\r\n totalDesc: \"All Dimension multipliers ^{value}\",\r\n genericDesc: \"All Dimension multipliers ^x\",\r\n shortDesc: \"All Dimension power +{value}\",\r\n effect: (level, strength) => 1 + Math.pow(level, 0.25) * Math.pow(strength, 0.4) / 500,\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: GlyphCombiner.addExponents,\r\n },\r\n effarigantimatter: {\r\n id: \"effarigantimatter\",\r\n bitmaskIndex: 26,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: () => `Antimatter production:\\n${formatInt(10)}^x ➜ ${formatInt(10)}^(x^{value})`,\r\n genericDesc: \"Antimatter production exponent power\",\r\n shortDesc: \"AM production exponent ^{value}\",\r\n effect: (level, strength) => {\r\n let a = 1 + Math.pow(level, 0.25) * Math.pow(strength, 0.4) / 5000;\r\n return a;\r\n },\r\n formatEffect: x => format(x, 4, 4),\r\n combine: effects => {\r\n let x = effects.reduce(Number.prodReducer, 1);\r\n return x > 1.01 ? (x-1.01)/5 + 1.01: x;\r\n },\r\n },\r\n timeshardpow: {\r\n id: \"timeshardpow\",\r\n bitmaskIndex: 27,\r\n isGenerated: true,\r\n // This gets explicitly added to time glyphs elsewhere (once unlocked)\r\n glyphTypes: [],\r\n singleDesc: \"Time Shard power +{value}\",\r\n totalDesc: \"Time Shard gain ^{value}\",\r\n genericDesc: \"Time Shards ^x\",\r\n shortDesc: \"Time Shard power +{value}\",\r\n effect: (level, strength) => 1 + (strength / 3.5) * Math.pow(level, 0.35) / 400,\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: GlyphCombiner.addExponents,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n cursedgalaxies: {\r\n id: \"cursedgalaxies\",\r\n bitmaskIndex: 0,\r\n isGenerated: false,\r\n glyphTypes: [\"cursed\"],\r\n singleDesc: `All Galaxies are {value} weaker`,\r\n totalDesc: \"All Galaxy strength -{value}\",\r\n shortDesc: \"Galaxy Strength -{value}\",\r\n // Multiplies by 0.768 per glyph\r\n effect: level => Math.pow(level, -0.03),\r\n formatEffect: x => formatPercents(1 - x, 2),\r\n combine: GlyphCombiner.multiply,\r\n },\r\n curseddimensions: {\r\n id: \"curseddimensions\",\r\n bitmaskIndex: 1,\r\n isGenerated: false,\r\n glyphTypes: [\"cursed\"],\r\n singleDesc: \"All Dimension multipliers ^{value}\",\r\n shortDesc: \"All Dimensions ^{value}\",\r\n // Multiplies by 0.734 per glyph\r\n effect: level => Math.pow(level, -0.035),\r\n formatEffect: x => format(x, 3, 3),\r\n combine: GlyphCombiner.multiply,\r\n },\r\n cursedtickspeed: {\r\n id: \"cursedtickspeed\",\r\n bitmaskIndex: 2,\r\n isGenerated: false,\r\n glyphTypes: [\"cursed\"],\r\n singleDesc: \"The threshold for Tickspeed Upgrades from Time Dimensions is multiplied by ×{value}\",\r\n totalDesc: \"The threshold for Tickspeed Upgrades from Time Dimensions is increased by ×{value}\",\r\n shortDesc: \"TD Tickspeed threshold ×{value}\",\r\n // Additive 3.82 per glyph\r\n effect: level => Math.clampMin(Math.log10(level), 1),\r\n formatEffect: x => format(x, 3, 3),\r\n combine: GlyphCombiner.add,\r\n },\r\n cursedEP: {\r\n id: \"cursedEP\",\r\n bitmaskIndex: 3,\r\n isGenerated: false,\r\n glyphTypes: [\"cursed\"],\r\n singleDesc: \"Divide Eternity Point gain by {value}\",\r\n totalDesc: \"Eternity Point gain / {value}\",\r\n shortDesc: \"EP / {value}\",\r\n // Divides e666.6 per glyph\r\n effect: level => Decimal.pow10(-level / 10),\r\n formatEffect: x => format(x.reciprocal()),\r\n combine: GlyphCombiner.multiplyDecimal,\r\n },\r\n realityglyphlevel: {\r\n id: \"realityglyphlevel\",\r\n bitmaskIndex: 4,\r\n isGenerated: false,\r\n glyphTypes: [\"reality\"],\r\n singleDesc: \"Increase the effective level of equipped basic Glyphs by {value}\",\r\n totalDesc: \"Equipped basic Glyph level +{value}\",\r\n shortDesc: \"Basic Glyph Level +{value}\",\r\n effect: level => Math.floor(Math.sqrt(level * 90)),\r\n formatEffect: x => formatInt(x),\r\n combine: GlyphCombiner.add,\r\n },\r\n realitygalaxies: {\r\n id: \"realitygalaxies\",\r\n bitmaskIndex: 5,\r\n isGenerated: false,\r\n glyphTypes: [\"reality\"],\r\n singleDesc: \"All Galaxies are {value} stronger\",\r\n totalDesc: \"All Galaxy strength +{value}\",\r\n shortDesc: \"Galaxy Strength +{value}\",\r\n effect: level => {\r\n let a = 1 + Math.pow(level / 100000, 0.5);\r\n return a;\r\n },\r\n formatEffect: x => formatPercents(x - 1, 2),\r\n combine: effects => {\r\n let x = effects.reduce(Number.prodReducer, 1);\r\n return x >= 1.6 ? (x-1.6)/4 +1.6 : x;\r\n },\r\n },\r\n realityrow1pow: {\r\n id: \"realityrow1pow\",\r\n bitmaskIndex: 6,\r\n isGenerated: false,\r\n glyphTypes: [\"reality\"],\r\n singleDesc: \"Multiplier from Reality Upgrade Amplifiers ^{value}\",\r\n totalDesc: \"Reality Upgrade Amplifier multiplier ^{value}\",\r\n shortDesc: \"Amplifier Multiplier ^{value}\",\r\n effect: level => {\r\n let a = 1 + level / 125000;\r\n if (a > 1.2){\r\n return a ** 0.2;\r\n }\r\n return a;\r\n },\r\n formatEffect: x => format(x, 3, 3),\r\n combine: GlyphCombiner.addExponents,\r\n },\r\n realityDTglyph: {\r\n id: \"realityDTglyph\",\r\n bitmaskIndex: 7,\r\n isGenerated: false,\r\n glyphTypes: [\"reality\"],\r\n singleDesc: () => `Dilated Time factor for Glyph level: \\n^${format(1.3, 1, 1)}\r\n ➜ ^(${format(1.3, 1, 1)} + {value})`,\r\n totalDesc: () => `Dilated Time factor for Glyph level: ^${format(1.3, 1, 1)}\r\n ➜ ^(${format(1.3, 1, 1)} + {value})`,\r\n genericDesc: \"Dilated Time factor for Glyph level\",\r\n shortDesc: \"DT pow. for level +{value}\",\r\n // You can only get this effect on level 25000 reality glyphs anyway, might as well make it look nice\r\n effect: () => 0.1,\r\n formatEffect: x => format(x, 2, 2),\r\n combine: GlyphCombiner.add,\r\n },\r\n companiondescription: {\r\n id: \"companiondescription\",\r\n bitmaskIndex: 8,\r\n isGenerated: false,\r\n glyphTypes: [\"companion\"],\r\n singleDesc: \"It does nothing but sit there and cutely smile at you, whisper into your dreams politely, \" +\r\n \"and plot the demise of all who stand against you. This one-of-a-kind Glyph will never leave you.\",\r\n totalDesc: \"+{value} happiness\",\r\n shortDesc: \"Doesn't want to hurt you\",\r\n effect: () => {\r\n if (Enslaved.isRunning) return 0;\r\n const cursedCount = Glyphs.active.countWhere(g => g?.type === \"cursed\");\r\n if (cursedCount > 0) return Math.pow(0.2 + 0.2 * Math.random(), cursedCount);\r\n return 0.4 + 0.6 * Math.random();\r\n },\r\n formatEffect: x => formatPercents(x, 2, 2),\r\n combine: GlyphCombiner.add,\r\n enabledInDoomed: true,\r\n },\r\n companionEP: {\r\n id: \"companionEP\",\r\n bitmaskIndex: 9,\r\n isGenerated: false,\r\n glyphTypes: [\"companion\"],\r\n singleDesc: \"Thanks for your dedication for the game! You reached {value} Eternity Points on your first Reality.\",\r\n shortDesc: \"It loves you very, very much\",\r\n totalDesc: () => ((Enslaved.isRunning || Glyphs.active.countWhere(g => g?.type === \"cursed\")) ? \"Help me\" : \"Yay!\"),\r\n // The EP value for this is entirely encoded in rarity, but level needs to be present to\r\n // make sure the proper parameter is being used. The actual glyph level shouldn't do anything.\r\n // eslint-disable-next-line no-unused-vars\r\n effect: (level, strength) => Decimal.pow10(1e6 * strengthToRarity(strength)),\r\n formatEffect: x => formatPostBreak(x, 2),\r\n combine: GlyphCombiner.multiplyDecimal,\r\n enabledInDoomed: true,\r\n }\r\n};\r\n","import { DC } from \"../../constants\"\r\nexport const glyphSacrifice = {\r\n \"power\": {\r\n id: \"power\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return 0;\r\n const sac = player.reality.glyphs.sac.power.add(added ?? 0);\r\n const capped = Decimal.clampMax(sac, GlyphSacrificeHandler.maxSacrificeForEffects);\r\n const base = Decimal.log10(capped.add(1)) / Decimal.log10(1e100);\r\n return Decimal.floor(Decimal.pow(base, 1.2).mul(750)).toNumber();\r\n },\r\n description: amount => {\r\n const sacCap = 1e100;\r\n const nextDistantGalaxy = Math.pow(10, Math.pow((amount + 1) / 750, 1 / 1.2) * Math.log10(sacCap)) - 1;\r\n const nextGalaxyText = amount < (Ra.unlocks.uncapGlyphSacEffects.isUnlocked ? 10000000 : 750)\r\n ? ` (next at ${format(nextDistantGalaxy, 2, 2)})`\r\n : \"\";\r\n return `Distant Galaxy scaling starts ${formatInt(amount)} later${nextGalaxyText}`;\r\n },\r\n cap: () => GlyphSacrificeHandler.maxSacrificeForEffects.toNumber()\r\n },\r\n \"infinity\": {\r\n id: \"infinity\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return DC.D1;\r\n const sac = player.reality.glyphs.sac.infinity.add(added ?? 0);\r\n const capped = Decimal.clampMax(sac, GlyphSacrificeHandler.maxSacrificeForEffects);\r\n return new Decimal(1 + Decimal.log10(Decimal.pow(capped, 0.2).div(100).add(1)));\r\n },\r\n description: amount => `${formatX(amount, 2, 2)} bigger multiplier when buying 8th Infinity Dimension`,\r\n cap: () => GlyphSacrificeHandler.maxSacrificeForEffects\r\n },\r\n \"time\": {\r\n id: \"time\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return DC.D1;\r\n const sac = player.reality.glyphs.sac.time.add(added ?? 0);\r\n const capped = Decimal.clampMax(sac, GlyphSacrificeHandler.maxSacrificeForEffects);\r\n return Decimal.pow(Decimal.pow(capped, 0.2).div(100).add(1), 2);\r\n },\r\n description: amount => `${formatX(amount, 2, 2)} bigger multiplier when buying 8th Time Dimension`,\r\n cap: () => GlyphSacrificeHandler.maxSacrificeForEffects\r\n },\r\n \"replication\": {\r\n id: \"replication\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return 0;\r\n const sac = player.reality.glyphs.sac.replication.add(added ?? 0);\r\n const capped = Decimal.clampMax(sac, GlyphSacrificeHandler.maxSacrificeForEffects);\r\n const base = Decimal.log10(capped.add(1)) / Decimal.log10(1e100);\r\n return Decimal.floor(Decimal.pow(base, 1.2).mul(1500)).toNumber();\r\n },\r\n description: amount => {\r\n const sacCap = 1e100;\r\n const nextDistantGalaxy = Math.pow(10, Math.pow((amount + 1) / 1500, 1 / 1.2) * Math.log10(sacCap)) - 1;\r\n const nextGalaxyText = amount < (Ra.unlocks.uncapGlyphSacEffects.isUnlocked ? 10000000 : 1500)\r\n ? ` (next at ${format(nextDistantGalaxy, 2, 2)})`\r\n : \"\";\r\n return `Replicanti Galaxy scaling starts ${formatInt(amount)} later${nextGalaxyText}`;\r\n },\r\n cap: () => GlyphSacrificeHandler.maxSacrificeForEffects.toNumber()\r\n },\r\n \"dilation\": {\r\n id: \"dilation\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return DC.D1;\r\n const sac = player.reality.glyphs.sac.dilation.add(added ?? 0);\r\n const capped = Decimal.clampMax(sac, GlyphSacrificeHandler.maxSacrificeForEffects);\r\n const exponent = 0.32 * Math.pow(Decimal.log10(capped.add(1)) /\r\n Decimal.log10(GlyphSacrificeHandler.maxSacrificeForEffects), 0.1);\r\n return Decimal.pow(Decimal.clampMin(capped, 1), exponent);\r\n },\r\n description: amount => `Multiply Tachyon Particle gain by ${formatX(amount, 2, 2)}`,\r\n cap: () => GlyphSacrificeHandler.maxSacrificeForEffects\r\n },\r\n \"effarig\": {\r\n id: \"effarig\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return DC.D0;\r\n const sac = player.reality.glyphs.sac.effarig.add(added ?? 0);\r\n // This doesn't use the GlyphSacrificeHandler cap because it hits its cap (+100%) earlier\r\n const capped = Decimal.clampMax(sac, DC.E70);\r\n return new Decimal(2 * Decimal.log10(capped.div(1e20).add(1)));\r\n },\r\n description: amount => `+${formatPercentsD(amount.div(100), 2)} additional Glyph rarity`,\r\n cap: () => 1e70\r\n },\r\n \"reality\": {\r\n id: \"reality\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return 0;\r\n const sac = player.reality.glyphs.sac.reality.add(added ?? 0);\r\n // This cap is only feasibly reached with the imaginary upgrade, but we still want to cap it at a nice number\r\n return Decimal.clampMax(Decimal.sqrt(sac).div(15).add(1), 100).toNumber();\r\n },\r\n description: amount => `Multiply Memory Chunk gain by ${formatX(amount, 2, 3)}`,\r\n cap: () => GlyphSacrificeHandler.maxSacrificeForEffects.toNumber()\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\n//let teresaRa = player.celestials.ra.upgrades.includes('teresaUpgrade');\r\n\r\nconst rebuyable = props => {\r\n props.cost = () => props.initialCost * Math.pow(props.costMult, player.reality.imaginaryRebuyables[props.id]);\r\n if (props.id==6) props.cost = () => player.celestials.ra.upgrades.has('teresaUpgrade') ? Math.pow(props.initialCost * Math.pow(props.costMult, player.reality.imaginaryRebuyables[props.id]),0.85) : props.initialCost * Math.pow(props.costMult, player.reality.imaginaryRebuyables[props.id]);\r\n const { effect } = props;\r\n if (props.isDecimal) props.effect = () => Decimal.pow(effect, player.reality.imaginaryRebuyables[props.id]);\r\n else props.effect = () => effect * Math.min(player.reality.imaginaryRebuyables[props.id], 10);\r\n if (!props.formatEffect) props.formatEffect = value => `+${format(value, 2, 2)}`;\r\n props.formatCost = value => format(value, 2, 0);\r\n return props;\r\n};\r\n\r\nexport const imaginaryUpgrades = [\r\n rebuyable({\r\n name: \"Temporal Intensifier\",\r\n id: 1,\r\n initialCost: 3,\r\n costMult: 60,\r\n description: () => `Increase Temporal Amplifier multiplier by +${format(0.15, 2, 2)}`,\r\n effect: 0.15\r\n }),\r\n rebuyable({\r\n name: \"Replicative Intensifier\",\r\n id: 2,\r\n initialCost: 4,\r\n costMult: 60,\r\n description: () => `Increase Replicative Amplifier multiplier by +${format(0.15, 2, 2)}`,\r\n effect: 0.15\r\n }),\r\n rebuyable({\r\n name: \"Eternal Intensifier\",\r\n id: 3,\r\n initialCost: 1,\r\n costMult: 40,\r\n description: () => `Increase Eternal Amplifier multiplier by +${format(0.4, 2, 2)}`,\r\n effect: 0.4\r\n }),\r\n rebuyable({\r\n name: \"Superluminal Intensifier\",\r\n id: 4,\r\n initialCost: 5,\r\n costMult: 80,\r\n description: () => `Increase Superluminal Amplifier multiplier by +${format(0.15, 2, 2)}`,\r\n effect: 0.15\r\n }),\r\n rebuyable({\r\n name: \"Boundless Intensifier\",\r\n id: 5,\r\n initialCost: 1,\r\n costMult: 30,\r\n description: () => `Increase Boundless Amplifier multiplier by +${format(0.6, 2, 2)}`,\r\n effect: 0.6\r\n }),\r\n rebuyable({\r\n name: \"Elliptic Materiality\",\r\n id: 6,\r\n initialCost: 1e4,\r\n costMult: 500,\r\n description: () => `Increase the Reality Machine cap by ${formatX(1e100)}`,\r\n effect: 1e100,\r\n formatEffect: value => `${formatX(value)}`,\r\n isDecimal: true\r\n }),\r\n rebuyable({\r\n name: \"Runic Assurance\",\r\n id: 7,\r\n initialCost: 2e5,\r\n costMult: 500,\r\n description: () => `Delay Glyph Instability starting level by ${formatInt(200)}`,\r\n effect: 200,\r\n formatEffect: value => `+${formatInt(value)} levels`\r\n }),\r\n rebuyable({\r\n name: \"Hyperbolic Apeirogon\",\r\n id: 8,\r\n initialCost: 1e7,\r\n costMult: 800,\r\n description: () => `Multiply Infinity Dimensions by ${format(\"1e100000\")}`,\r\n effect: DC.E100000,\r\n formatEffect: value => `${formatX(value)}`,\r\n isDecimal: true\r\n }),\r\n rebuyable({\r\n name: \"Cosmic Filament\",\r\n id: 9,\r\n initialCost: 1e9,\r\n costMult: 1000,\r\n description: () => `Increase Galaxy strength`,\r\n effect: 0.03,\r\n formatEffect: value => `+${formatPercents(value)}`,\r\n }),\r\n rebuyable({\r\n name: \"Entropic Condensing\",\r\n id: 10,\r\n initialCost: 8e9,\r\n costMult: 2000,\r\n description: () => `Increase Singularity gain`,\r\n effect: /*() => Ra.unlocks.dmdScaling.isUnlocked ? 100000 : */1 ,\r\n formatEffect: value => Ra.unlocks.dmdScaling.isUnlocked ? `${formatX(1 + Math.pow(2,value), 2)}`:`${formatX(1 + value, 2)}`\r\n }),\r\n {\r\n name: \"Suspicion of Interference\",\r\n id: 11,\r\n cost: 5e7,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`${format(1e90)} total Relic Shards\r\n (You have ${format(player.celestials.effarig.relicShards, 2)})`;},\r\n hasFailed: () => false,\r\n checkRequirement: () => player.celestials.effarig.relicShards.gte(1e90),\r\n checkEvent: GAME_EVENT.REALITY_RESET_AFTER,\r\n description: \"Time Dimension power based on total antimatter\",\r\n effect: () => 1 + Math.log10(player.records.totalAntimatter.log10()) / 100,\r\n formatEffect: value => `${formatPow(value, 0, 4)}`,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Consequences of Illusions\",\r\n id: 12,\r\n cost: 5e7,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`Make a level ${formatInt(9000)} Glyph with a single Glyph level factor weight at\r\n ${formatInt(100)}`;},\r\n hasFailed: () => false,\r\n checkRequirement: () => Object.values(player.celestials.effarig.glyphWeights).some(w => w === 100) &&\r\n gainedGlyphLevel().actualLevel >= 9000,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: \"Gain free Dimboosts based on Imaginary rebuyable count\",\r\n effect: () => 2e4 * ImaginaryUpgrades.totalRebuyables,\r\n formatEffect: value => `${format(value, 1)}`,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Transience of Information\",\r\n id: 13,\r\n cost: 5e7,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`Reach ${format(Number.MAX_VALUE, 2)} projected Reality Machines within\r\n The Nameless Ones' Reality`;},\r\n hasFailed: () => !Enslaved.isRunning,\r\n // This is for consistency with the UI, which displays an amplified \"projected RM\" value on the reality button\r\n checkRequirement: () => Enslaved.isRunning &&\r\n MachineHandler.uncappedRM.times(simulatedRealityCount(false) + 1).gte(Number.MAX_VALUE),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: \"Increase Imaginary Machine Cap based on Imaginary Upgrades purchased\",\r\n effect: () => 1 + ImaginaryUpgrades.totalRebuyables / 20 + ImaginaryUpgrades.totalSinglePurchase / 2,\r\n formatEffect: value => `${formatX(value, 2, 1)}`,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Recollection of Intrusion\",\r\n id: 14,\r\n cost: 3.5e8,\r\n formatCost: x => format(x, 1),\r\n requirement: () => { return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`Reach a tickspeed of ${format(\"1e75000000000\")} / sec within Eternity Challenge 5`;},\r\n hasFailed: () => false,\r\n checkRequirement: () => EternityChallenge(5).isRunning && Tickspeed.perSecond.exponent >= 7.5e10,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: () => `Raise all Dimension per-purchase multipliers to ${formatPow(1.5, 0, 1)}`,\r\n effect: 1.5,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Fabrication of Ideals\",\r\n id: 15,\r\n cost: 1e9,\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" : `Reach ${format(\"1e1500000000000\")} antimatter without\r\n ever having any 1st Infinity Dimensions`;},\r\n hasFailed: () => player.requirementChecks.reality.maxID1.gt(0),\r\n checkRequirement: () => player.requirementChecks.reality.maxID1.eq(0) && player.antimatter.exponent >= 1.5e12,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: true,\r\n // This upgrade lock acts in multiple different conditions, but isn't 100% foolproof and also blocks a few edge\r\n // cases which technically should be allowed but would be hard to communicate in-game. Forbidden actions are:\r\n // - Purchasing any ID (edge case: this is acceptable for ID2-8 inside EC2 or EC10)\r\n // - Purchasing any TD with any amount of EC7 completions (edge case: acceptable within EC1 or EC10)\r\n // - Entering EC7 with any amount of purchased TD\r\n description: () => `${\r\n Pelle.isDoomed ? \"Unlock\" : \"Convert Antimatter Dimensions to Continuum and unlock\"\r\n } Lai'tela, Celestial of Dimensions`,\r\n },\r\n {\r\n name: \"Massless Momentum\",\r\n id: 16,\r\n cost: 3.5e9,\r\n formatCost: x => format(x, 1),\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" : `Destabilize Lai'tela's Reality in under ${formatInt(30)} seconds twice`;},\r\n hasFailed: () => false,\r\n checkRequirement: () => Laitela.maxAllowedDimension <= 6,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: \"Unlock the 2nd Dark Matter Dimension\",\r\n },\r\n {\r\n name: \"Chiral Oscillation\",\r\n id: 17,\r\n cost: 6e9,\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" : `Automatically condense at least ${formatInt(20)} Singularities at once and have the 2nd Dark Matter Dimension`},\r\n hasFailed: () => false,\r\n checkRequirement: () => Singularity.singularitiesGained >= 20 &&\r\n Currency.darkEnergy.gte(Singularity.cap * SingularityMilestone.autoCondense.effectOrDefault(Infinity)) && ImaginaryUpgrade(16).isBought,\r\n checkEvent: GAME_EVENT.SINGULARITY_RESET_BEFORE,\r\n description: \"Unlock the 3rd Dark Matter Dimension\",\r\n },\r\n {\r\n name: \"Dimensional Symmetry\",\r\n id: 18,\r\n cost: 1.5e10,\r\n formatCost: x => format(x, 1),\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" : `Have ${formatInt(80000)} total Galaxies and have the 3rd Dark Matter Dimension`;},\r\n hasFailed: () => false,\r\n checkRequirement: () => (Replicanti.galaxies.total + player.galaxies +\r\n player.dilation.totalTachyonGalaxies >= 80000) && ImaginaryUpgrade(17).isBought,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: \"Unlock the 4th Dark Matter Dimension\",\r\n },\r\n {\r\n name: \"Deterministic Radiation\",\r\n id: 19,\r\n cost: 2.8e10,\r\n formatCost: x => format(x, 1),\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" :`Reach ${formatInt(3.85e6)} Tickspeed Continuum without ever having more than\r\n ${formatInt(8)} Time Studies in this Reality`;},\r\n hasFailed: () => player.requirementChecks.reality.maxStudies > 8,\r\n checkRequirement: () => player.requirementChecks.reality.maxStudies <= 8 &&\r\n Tickspeed.continuumValue >= 3.85e6,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: true,\r\n lockEvent: () => `purchase more than ${formatInt(8)} Time Studies`,\r\n description: \"Unlock Dark Matter Annihilation\"\r\n },\r\n {\r\n name: \"Vacuum Acceleration\",\r\n id: 20,\r\n cost: 3e12,\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" : `Have a Continuum increase of at least ${formatPercents(1)}`;},\r\n hasFailed: () => false,\r\n checkRequirement: () => Laitela.matterExtraPurchaseFactor >= 2,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: () => `Unlock Autobuyers for repeatable Imaginary Upgrades and generate Imaginary Machines\r\n ${formatInt(10)} times faster`,\r\n effect: 10,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Existential Elimination\",\r\n id: 21,\r\n cost: 1e13,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reach ${format(\"1e7400000000000\")} antimatter with Continuum disabled for the entire Reality`;},\r\n hasFailed: () => !player.requirementChecks.reality.noContinuum,\r\n checkRequirement: () => player.requirementChecks.reality.noContinuum &&\r\n Currency.antimatter.value.log10() >= 7.4e12,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: true,\r\n lockEvent: \"enable Continuum\",\r\n description: \"Annihilation multiplier gain is improved based on Imaginary Machines\",\r\n effect: () => Math.clampMin(Math.pow(Math.log10(Currency.imaginaryMachines.value) - 10, 3), 1),\r\n formatEffect: value => `${formatX(value, 2, 1)}`,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Total Termination\",\r\n id: 22,\r\n cost: 1.5e14,\r\n formatCost: x => format(x, 1),\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`Reach ${format(\"1e150000000000\")} antimatter in Effarig's Reality with\r\n at least ${formatInt(4)} Cursed Glyphs equipped`;},\r\n // Note: 4 cursed glyphs is -12 glyph count, but equipping a positive glyph in the last slot is allowed\r\n hasFailed: () => !Effarig.isRunning || player.requirementChecks.reality.maxGlyphs > -10,\r\n checkRequirement: () => Effarig.isRunning && player.requirementChecks.reality.maxGlyphs < -10 &&\r\n Currency.antimatter.value.exponent >= 1.5e11,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: () => `All Glyph Sacrifice totals are increased to ${format(1e100)}`,\r\n effect: DC.E100,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Planar Purification\",\r\n id: 23,\r\n cost: 6e14,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reach Glyph level ${formatInt(20000)} in Ra's Reality with\r\n at most ${formatInt(0)} Glyphs equipped`;},\r\n hasFailed: () => !Ra.isRunning || player.requirementChecks.reality.maxGlyphs > 0,\r\n checkRequirement: () => Ra.isRunning && player.requirementChecks.reality.maxGlyphs <= 0 &&\r\n gainedGlyphLevel().actualLevel >= 20000,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: \"Increase free Dimboost count based on Tesseract count\",\r\n effect: () => Math.max((Math.floor(0.25 * Math.pow(Tesseracts.effectiveCount, 2))), 1),\r\n formatEffect: value => `${formatX(value)}`,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Absolute Annulment\",\r\n id: 24,\r\n cost: 6e14,\r\n // We unfortunately don't have the UI space to be more descriptive on this button without causing text overflow,\r\n // so hopefully the additional modals (from the upgrade lock) will mostly communicate the idea that this is under\r\n // the same conditions as hard V's Post-destination\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`Have ${formatInt(13000)} Antimatter Galaxies in Ra's Reality\r\n with a fully inverted Black Hole`;},\r\n hasFailed: () => !Ra.isRunning || player.requirementChecks.reality.slowestBH > 1e-300,\r\n checkRequirement: () => Ra.isRunning && player.requirementChecks.reality.slowestBH <= 1e-300 &&\r\n player.galaxies >= 13000,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: true,\r\n // Three locking events: uninvert, discharge, and entering (but not auto-completing) EC12\r\n description: \"Increase free Dimboost strength based on Singularity count\",\r\n effect: () => (Decimal.pow(player.celestials.laitela.singularities, 300)).clampMin(1),\r\n formatEffect: value => `${formatX(value, 2, 1)}`,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Omnipresent Obliteration\",\r\n id: 25,\r\n cost: 1.6e15,\r\n formatCost: x => format(x, 1),\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" : `Reach Reality in Lai'tela's Reality with all Dimensions disabled and\r\n at least ${formatInt(4)} empty Glyph slots`;},\r\n hasFailed: () =>{ \r\n if (!Laitela.isRunning || Laitela.maxAllowedDimension > 0){\r\n return true;\r\n }\r\n return MendingMilestone.four.isReached ? Glyphs.activeWithoutCompanion.length > 4 : Glyphs.activeWithoutCompanion.length > 1;\r\n },\r\n checkRequirement: () => {\r\n if(Laitela.isRunning && Laitela.maxAllowedDimension <= 0 && TimeStudy.reality.isBought){\r\n return MendingMilestone.four.isReached ? Glyphs.activeWithoutCompanion.length <= 4 : Glyphs.activeWithoutCompanion.length <= 1;\r\n }\r\n return false;\r\n },\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: true,\r\n lockEvent: \"equip another non-Companion Glyph\",\r\n description: \"Unlock Pelle, Celestial of Antimatter\",\r\n },\r\n];\r\n","import { DC } from \"../../constants\";\r\n\r\nconst rebuyable = props => {\r\n props.cost = () => getHybridCostScaling(\r\n player.reality.rebuyables[props.id],\r\n 1e30,\r\n props.initialCost,\r\n props.costMult,\r\n props.costMult / 10,\r\n DC.E309,\r\n 1e3,\r\n props.initialCost * props.costMult\r\n );\r\n const { effect } = props;\r\n props.effect = () => Math.pow(\r\n effect + ImaginaryUpgrade(props.id).effectOrDefault(0),\r\n player.reality.rebuyables[props.id] * getAdjustedGlyphEffect(\"realityrow1pow\"));\r\n props.description = () => props.textTemplate.replace(\"{value}\",\r\n ImaginaryUpgrade(props.id).effectValue === 0\r\n ? formatInt(effect)\r\n : format(effect + ImaginaryUpgrade(props.id).effectValue, 2, 2));\r\n props.formatEffect = value => formatX(value, 2, 0);\r\n props.formatCost = value => format(value, 2, 0);\r\n return props;\r\n};\r\n\r\n\r\nexport const realityUpgrades = [\r\n rebuyable({\r\n name: \"Temporal Amplifier\",\r\n id: 1,\r\n initialCost: 1,\r\n costMult: 30,\r\n textTemplate: \"You gain Dilated Time {value} times faster\",\r\n effect: 3\r\n }),\r\n rebuyable({\r\n name: \"Replicative Amplifier\",\r\n id: 2,\r\n initialCost: 1,\r\n costMult: 30,\r\n textTemplate: \"You gain Replicanti {value} times faster\",\r\n effect: 3\r\n }),\r\n rebuyable({\r\n name: \"Eternal Amplifier\",\r\n id: 3,\r\n initialCost: 2,\r\n costMult: 30,\r\n textTemplate: \"You gain {value} times more Eternities\",\r\n effect: 3\r\n }),\r\n rebuyable({\r\n name: \"Superluminal Amplifier\",\r\n id: 4,\r\n initialCost: 2,\r\n costMult: 30,\r\n textTemplate: \"You gain {value} times more Tachyon Particles\",\r\n effect: 3\r\n }),\r\n rebuyable({\r\n name: \"Boundless Amplifier\",\r\n id: 5,\r\n initialCost: 3,\r\n costMult: 50,\r\n textTemplate: \"You gain {value} times more Infinities\",\r\n effect: 5\r\n }),\r\n {\r\n name: \"Cosmically Duplicate\",\r\n id: 6,\r\n cost: 15,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : \"Complete your first manual Eternity without using Replicanti Galaxies\";\r\n },\r\n // Note that while noRG resets on eternity, the reality-level check will be false after the first eternity.\r\n // The noRG variable is eternity-level as it's also used for an achievement check\r\n hasFailed: () => !(player.requirementChecks.eternity.noRG && player.requirementChecks.reality.noEternities),\r\n checkRequirement: () => player.requirementChecks.eternity.noRG && player.requirementChecks.reality.noEternities,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n canLock: true,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"Replicanti speed is multiplied based on Replicanti Galaxies\",\r\n effect: () => 1 + Replicanti.galaxies.total / 50,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Innumerably Construct\",\r\n id: 7,\r\n cost: 15,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :\"Complete your first Infinity with at most 1 Antimatter Galaxy\";\r\n },\r\n hasFailed: () => !(player.galaxies <= 1 && player.requirementChecks.reality.noInfinities),\r\n checkRequirement: () => player.galaxies <= 1 && player.requirementChecks.reality.noInfinities,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n canLock: true,\r\n lockEvent: \"gain another Antimatter Galaxy\",\r\n description: \"Infinity gain is boosted from Antimatter Galaxy count\",\r\n effect: () => 1 + player.galaxies / 30,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Paradoxically Attain\",\r\n id: 8,\r\n cost: 15,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : \"Manually Eternity without any automatic Achievements\";\r\n },\r\n hasFailed: () => player.reality.gainedAutoAchievements,\r\n checkRequirement: () => !player.reality.gainedAutoAchievements,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n canLock: true,\r\n // We don't have lockEvent because the modal can never show up for this upgrade\r\n description: \"Tachyon Particle gain is boosted based on Achievement multiplier\",\r\n effect: () => Decimal.sqrt(Achievements.power),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Linguistically Expand\",\r\n id: 9,\r\n cost: 15,\r\n requirement: () =>{ return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Eternity for ${format(\"1e4000\")} Eternity Points using\r\n only a single Glyph which must be level ${formatInt(3)}+.`;},\r\n hasFailed: () => {\r\n const invalidEquippedGlyphs = Glyphs.activeWithoutCompanion.length > 1 ||\r\n (Glyphs.activeWithoutCompanion.length === 1 && Glyphs.activeWithoutCompanion[0].level < 3);\r\n const hasValidGlyphInInventory = Glyphs.inventory.countWhere(g => g && g.level >= 3) > 0;\r\n return invalidEquippedGlyphs || (Glyphs.activeWithoutCompanion.length === 0 && !hasValidGlyphInInventory);\r\n },\r\n checkRequirement: () => Currency.eternityPoints.exponent >= 4000 &&\r\n Glyphs.activeWithoutCompanion.length === 1 && Glyphs.activeWithoutCompanion[0].level >= 3,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n canLock: true,\r\n // There are two locking events - equipping a glyph with too low a level, and equipping a second glyph\r\n description: \"Gain another Glyph slot\",\r\n effect: () => 1\r\n },\r\n {\r\n name: \"Existentially Prolong\",\r\n id: 10,\r\n cost: 15,\r\n requirement: () =>{\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Complete your first manual Eternity with at least ${formatPostBreak(DC.E400)} Infinity Points`;\r\n },\r\n hasFailed: () => !player.requirementChecks.reality.noEternities,\r\n checkRequirement: () => Currency.infinityPoints.exponent >= 400 &&\r\n player.requirementChecks.reality.noEternities,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n canLock: true,\r\n lockEvent: \"Eternity\",\r\n bypassLock: () => Currency.infinityPoints.exponent >= 400,\r\n description: () => `Start every Reality with ${formatInt(100)} Eternities (also applies to current Reality)`,\r\n automatorPoints: 15,\r\n shortDescription: () => `Start with ${formatInt(100)} Eternities`,\r\n effect: () => 100\r\n },\r\n {\r\n name: \"The Boundless Flow\",\r\n id: 11,\r\n cost: 50,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `${format(Currency.infinitiesBanked.value, 2)}/${format(DC.E12)} Banked Infinities`;\r\n },\r\n checkRequirement: () => Currency.infinitiesBanked.exponent >= 12,\r\n checkEvent: [GAME_EVENT.ETERNITY_RESET_AFTER, GAME_EVENT.REALITY_FIRST_UNLOCKED],\r\n description: \"Every second, gain 10% of the Infinities you would normally gain by Infinitying\",\r\n automatorPoints: 5,\r\n shortDescription: () => `Continuous Infinity generation`,\r\n effect: () => gainedInfinities().times(0.1),\r\n formatEffect: value => `${format(value)} per second`\r\n },\r\n {\r\n name: \"The Knowing Existence\",\r\n id: 12,\r\n cost: 50,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Eternity for ${format(DC.E70)} Eternity Points without completing Eternity Challenge 1`;\r\n },\r\n hasFailed: () => (EternityChallenge(1).completions !== 0 && !MendingUpgrade(3).isBought),\r\n checkRequirement: () => (Currency.eternityPoints.exponent >= 70 && EternityChallenge(1).completions === 0) || (Currency.eternityPoints.exponent >= 70 && MendingUpgrade(3).isBought),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n canLock: true,\r\n lockEvent: \"complete Eternity Challenge 1\",\r\n description: \"Eternity Point multiplier based on Reality and Time Theorem count\",\r\n effect: () => { \r\n let x = BreakInfinityUpgrade.infinitiedGen.chargedEffect.isEffectActive ? Infinity : 10000; \r\n return Currency.timeTheorems.value.minus(DC.E3).clampMin(2).pow(Math.log2(Math.min(Currency.realities.value, x))).clampMin(1)},\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"The Telemechanical Process\",\r\n id: 13,\r\n cost: 50,\r\n requirement: () => { \r\n return MendingMilestone.one.isReached ? \"None (1 Mend Milestone)\" : `Eternity for ${format(DC.E4000)} Eternity Points without Time Dim. 5-8`;\r\n },\r\n hasFailed: () => !Array.range(5, 4).every(i => TimeDimension(i).amount.equals(0)),\r\n checkRequirement: () => Currency.eternityPoints.exponent >= 4000 &&\r\n Array.range(5, 4).every(i => TimeDimension(i).amount.equals(0)),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n canLock: true,\r\n lockEvent: \"purchase a Time Dimension above the 4th TD\",\r\n description: () => `Improve Eternity Autobuyer and unlock autobuyers for Time Dimensions and ${formatX(5)} EP`,\r\n automatorPoints: 10,\r\n shortDescription: () => `TD and ${formatX(5)} EP Autobuyers, improved Eternity Autobuyer`,\r\n },\r\n {\r\n name: \"The Eternal Flow\",\r\n id: 14,\r\n cost: 50,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`${format(Currency.eternities.value, 2)}/${format(1e7)} Eternities`;\r\n },\r\n checkRequirement: () => Currency.eternities.gte(1e7),\r\n checkEvent: [GAME_EVENT.ETERNITY_RESET_AFTER, GAME_EVENT.REALITY_FIRST_UNLOCKED],\r\n description: \"Gain Eternities per second equal to your Reality count\",\r\n automatorPoints: 5,\r\n shortDescription: () => `Continuous Eternity generation`,\r\n effect: () => new Decimal(Currency.realities.value).times(Ra.unlocks.continuousTTBoost.effects.eternity.effectOrDefault(1)).min(1e308).toNumber(),\r\n formatEffect: value => `${format(value)} per second`\r\n },\r\n {\r\n name: \"The Paradoxical Forever\",\r\n id: 15,\r\n cost: 50,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Have ${format(DC.E10)} Eternity Points without purchasing\r\n the ${formatX(5)} Eternity Point upgrade`;},\r\n hasFailed: () => player.epmultUpgrades !== 0,\r\n checkRequirement: () => Currency.eternityPoints.exponent >= 10 && player.epmultUpgrades === 0,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n canLock: true,\r\n lockEvent: () => `purchase a ${formatX(5)} EP upgrade`,\r\n description: () => `Boost Tachyon Particle gain based on ${formatX(5)} Eternity Point multiplier`,\r\n effect: () => Math.max(Math.sqrt(Decimal.log10(EternityUpgrade.epMult.effectValue)) / 9, 1),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Disparity of Rarity\",\r\n id: 16,\r\n cost: 1500,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reality with at least ${formatInt(4)} Glyphs equipped of uncommon or better rarity\r\n (${formatInt(Glyphs.activeWithoutCompanion.countWhere(g => g && g.strength >= 1.5))} equipped)`;\r\n },\r\n hasFailed: () => {\r\n const availableGlyphs = Glyphs.inventory.countWhere(g => g && g.strength >= 1.5);\r\n const equipped = Glyphs.activeWithoutCompanion.countWhere(g => g.strength >= 1.5);\r\n const availableSlots = Glyphs.activeSlotCount - Glyphs.activeList.length;\r\n return equipped + Math.min(availableGlyphs, availableSlots) < 4;\r\n },\r\n checkRequirement: () => Glyphs.activeWithoutCompanion.countWhere(g => g.strength >= 1.5) >= 4,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: \"Improve the Glyph rarity formula\",\r\n effect: 1.3,\r\n formatCost: value => format(value, 1, 0)\r\n },\r\n {\r\n name: \"Duplicity of Potency\",\r\n id: 17,\r\n cost: 1500,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reality with at least ${formatInt(4)} Glyphs equipped, each having at least ${formatInt(2)} effects\r\n (${formatInt(Glyphs.activeWithoutCompanion.countWhere(g => g && countValuesFromBitmask(g.effects) >= 2))}\r\n equipped)`\r\n },\r\n hasFailed: () => {\r\n const availableGlyphs = Glyphs.inventory.countWhere(g => g && countValuesFromBitmask(g.effects) >= 2);\r\n const equipped = Glyphs.activeWithoutCompanion.countWhere(g => countValuesFromBitmask(g.effects) >= 2);\r\n const availableSlots = Glyphs.activeSlotCount - Glyphs.activeList.length;\r\n return equipped + Math.min(availableGlyphs, availableSlots) < 4;\r\n },\r\n checkRequirement: () => Glyphs.activeWithoutCompanion.countWhere(g => countValuesFromBitmask(g.effects) >= 2) >= 4,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: () => `${formatPercents(0.5)} chance to get an additional effect on Glyphs`,\r\n effect: 0.5,\r\n formatCost: value => format(value, 1, 0)\r\n },\r\n {\r\n name: \"Measure of Forever\",\r\n id: 18,\r\n cost: 1500,\r\n requirement: () => { return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reality with at least ${formatInt(4)} Glyphs equipped, each at level ${formatInt(10)} or higher\r\n (${formatInt(Glyphs.activeWithoutCompanion.countWhere(g => g && g.level >= 10))} equipped)`;},\r\n hasFailed: () => {\r\n const availableGlyphs = Glyphs.inventory.countWhere(g => g && g.level >= 10);\r\n const equipped = Glyphs.activeWithoutCompanion.countWhere(g => g.level >= 10);\r\n const availableSlots = Glyphs.activeSlotCount - Glyphs.activeList.length;\r\n return equipped + Math.min(availableGlyphs, availableSlots) < 4;\r\n },\r\n checkRequirement: () => Glyphs.activeWithoutCompanion.countWhere(g => g.level >= 10) >= 4,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: \"Eternity count boosts Glyph level\",\r\n effect: () => Math.max(Math.sqrt(Currency.eternities.value.plus(1).log10()) * 0.45, 1),\r\n formatCost: value => format(value, 1, 0)\r\n },\r\n {\r\n name: \"Scour to Empower\",\r\n id: 19,\r\n cost: 1500,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Have a total of ${formatInt(30)} or more Glyphs at once\r\n (You have ${formatInt(Glyphs.allGlyphs.countWhere(g => g.type !== \"companion\"))})`},\r\n hasFailed: () => Glyphs.allGlyphs.countWhere(g => g.type !== \"companion\") < 30,\r\n checkRequirement: () => Glyphs.allGlyphs.countWhere(g => g.type !== \"companion\") >= 30,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: \"You can sacrifice Glyphs for permanent bonuses (Shift + click)\",\r\n formatCost: value => format(value, 1, 0)\r\n },\r\n {\r\n name: \"Parity of Singularity\",\r\n id: 20,\r\n cost: 1500,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`${formatInt(100)} days total play time after unlocking the Black Hole\r\n (Currently: ${Time.timeSinceBlackHole.toStringShort(false)})`},\r\n hasFailed: () => !BlackHole(1).isUnlocked && Currency.realityMachines.lt(100),\r\n checkRequirement: () => Time.timeSinceBlackHole.totalDays.gte(100) && BlackHole(1).isUnlocked,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: \"Unlock another Black Hole\",\r\n automatorPoints: 10,\r\n shortDescription: () => `Second Black Hole`,\r\n formatCost: value => format(value, 1, 0)\r\n },\r\n {\r\n name: \"Cosmic Conglomerate\",\r\n id: 21,\r\n cost: 100000,\r\n requirement: () =>{\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `${formatInt(Replicanti.galaxies.total + player.galaxies +\r\n player.dilation.totalTachyonGalaxies)}/${formatInt(2800)} total Galaxies from all types`;\r\n },\r\n checkRequirement: () =>\r\n Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies >= 2800,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: () => `Remote Antimatter Galaxy scaling is moved to ${formatInt(1e5)} galaxies`,\r\n effect: 1e5\r\n },\r\n {\r\n name: \"Temporal Transcendence\",\r\n id: 22,\r\n cost: 100000,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`${format(Currency.timeShards.value, 1)}/${format(DC.E28000)} Time Shards`;},\r\n checkRequirement: () => Currency.timeShards.exponent >= 28000,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: \"Time Dimension multiplier based on days spent in this Reality\",\r\n effect: () => Decimal.pow10(Math.pow(1 + 2 * Decimal.log10(Time.thisReality.totalDays.add(1)), 1.6)),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Replicative Rapidity\",\r\n id: 23,\r\n cost: 100000,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reality in under ${formatInt(15)} minutes of game time\r\n (Fastest: ${Time.bestReality.toStringShort()})`;},\r\n hasFailed: () => Time.thisReality.totalMinutes.gte(15),\r\n checkRequirement: () => Time.thisReality.totalMinutes.lt(15),\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: \"Replicanti speed is boosted based on your fastest game-time Reality\",\r\n effect: () => 15 / Decimal.clamp(Time.bestReality.totalMinutes, 1 / 12, 15).toNumber(),\r\n cap: 180,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Synthetic Symbolism\",\r\n id: 24,\r\n cost: 100000,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reality for ${formatInt(5000)} Reality Machines without equipped Glyphs`;},\r\n hasFailed: () => Glyphs.activeWithoutCompanion.length > 0,\r\n checkRequirement: () => MachineHandler.gainedRealityMachines.gte(5000) &&\r\n Glyphs.activeWithoutCompanion.length === 0,\r\n canLock: true,\r\n lockEvent: \"equip a non-Companion Glyph\",\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: \"Gain another Glyph slot\",\r\n effect: () => 1\r\n },\r\n {\r\n name: \"Effortless Existence\",\r\n id: 25,\r\n cost: 100000,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`Reach ${format(DC.E11111)} EP (Best: ${format(player.records.bestReality.bestEP, 2)} EP)`;},\r\n checkRequirement: () => player.records.bestReality.bestEP.exponent >= 11111,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n description: \"Unlock the Reality autobuyer and Automator command\",\r\n automatorPoints: 100,\r\n shortDescription: () => `Reality Autobuyer`,\r\n },\r\n];\r\n","import { cosmeticGlyphs, glyphTypes } from \"./glyph-types\";\r\nimport { perkConnections, perks } from \"./perks\";\r\n\r\nimport { automator } from \"./automator\";\r\nimport { glyphCosmeticSets } from \"./glyph-cosmetics\";\r\nimport { glyphEffects } from \"./glyph-effects\";\r\nimport { glyphSacrifice } from \"./glyph-sacrifices\";\r\nimport { imaginaryUpgrades } from \"./imaginary-upgrades\";\r\nimport { realityUpgrades } from \"./reality-upgrades\";\r\n\r\nexport const reality = {\r\n automator,\r\n cosmeticGlyphs,\r\n glyphCosmeticSets,\r\n glyphEffects,\r\n glyphSacrifice,\r\n glyphTypes,\r\n imaginaryUpgrades,\r\n perks,\r\n perkConnections,\r\n upgrades: realityUpgrades\r\n};\r\n","import { reality } from \"@/core/secret-formula/reality\";\r\n\r\n/**\r\n * Every entry in this object is a styling specification for bars within the multiplier tab.\r\n * {\r\n * @property {String} text String specifying the color to render the background of the bar (often a CSS var)\r\n * @property {String} symbol String to show as text on the bar, may be HTML (allows for font awesome icons)\r\n * @property {String} textColor A text color to override the default --color-text for better contrast\r\n * }\r\n */\r\nexport const MultiplierTabIcons = {\r\n DIMENSION(type, tier) {\r\n const tierText = tier ?? \"\";\r\n switch (type) {\r\n case \"AD\":\r\n return { symbol: `Ω${tierText}`, color: \"var(--color-antimatter)\" };\r\n case \"ID\":\r\n return { symbol: `∞${tierText}`, color: \"var(--color-infinity)\" };\r\n case \"TD\":\r\n return { symbol: `Δ${tierText}`, color: \"var(--color-eternity)\" };\r\n default:\r\n throw new Error(\"Unrecognized dimension type in multiplier tab icons\");\r\n }\r\n },\r\n PURCHASE(type, tier) {\r\n const symbol = `${tier ?? \"\"}`;\r\n switch (type) {\r\n case \"AD\":\r\n return { symbol, color: \"var(--color-antimatter)\" };\r\n case \"ID\":\r\n return { symbol, color: \"var(--color-infinity)\" };\r\n case \"TD\":\r\n return { symbol, color: \"var(--color-eternity)\" };\r\n case \"baseID\":\r\n return { symbol: ``, color: \"var(--color-infinity)\" };\r\n case \"tesseractID\":\r\n return {\r\n symbol: ``,\r\n color: \"var(--color-enslaved--base)\"\r\n };\r\n default:\r\n throw new Error(\"Unrecognized purchase type in multiplier tab icons\");\r\n }\r\n },\r\n CHALLENGE(type, tier) {\r\n const tierText = `${tier ?? \"\"}`;\r\n switch (type) {\r\n case \"infinity\":\r\n return { symbol: `${tierText}`, color: \"var(--color-infinity)\" };\r\n case \"eternity\":\r\n return { symbol: `Δ${tierText}`, color: \"var(--color-eternity)\" };\r\n default:\r\n throw new Error(\"Unrecognized challenge type in multiplier tab icons\");\r\n }\r\n },\r\n // Regular sacrifice and glyph sacrifice\r\n SACRIFICE(type) {\r\n const icon = ``;\r\n switch (type) {\r\n case \"antimatter\":\r\n return { symbol: `Ω${icon}`, color: \"var(--color-antimatter)\" };\r\n case \"infinity\":\r\n return { symbol: `${icon}`, color: \"var(--color-infinity)\" };\r\n case \"time\":\r\n return { symbol: `Δ${icon}`, color: \"var(--color-eternity)\" };\r\n case \"dilation\":\r\n return { symbol: `Ψ${icon}`, color: \"var(--color-dilation)\", textColor: \"black\" };\r\n default:\r\n throw new Error(\"Unrecognized sacrifice type in multiplier tab icons\");\r\n }\r\n },\r\n UPGRADE(type) {\r\n const icon = ``;\r\n switch (type) {\r\n case \"infinity\":\r\n return { symbol: `${icon}`, color: \"var(--color-infinity)\" };\r\n case \"eternity\":\r\n return { symbol: `Δ${icon}`, color: \"var(--color-eternity)\" };\r\n case \"dilation\":\r\n return { symbol: `Ψ${icon}`, color: \"var(--color-dilation)\" };\r\n case \"reality\":\r\n return { symbol: `Ϟ${icon}`, color: \"var(--color-reality)\" };\r\n case \"imaginary\":\r\n return { symbol: `${icon}`, color: \"var(--color-ra--base)\" };\r\n case \"corruption\":\r\n return {symbol: `${icon}`, color: `var(--color-mending)`}\r\n default:\r\n throw new Error(\"Unrecognized upgrade type in multiplier tab icons\");\r\n }\r\n },\r\n // Icons for base IP/EP\r\n CONVERT_FROM(currency) {\r\n if (currency === \"AM\") {\r\n return {\r\n symbol: ``,\r\n color: \"var(--color-antimatter)\",\r\n };\r\n }\r\n if (currency === \"IP\") {\r\n return {\r\n symbol: ``,\r\n color: \"var(--color-infinity)\",\r\n };\r\n }\r\n return {};\r\n },\r\n // IP and EP formula divisors\r\n DIVISOR(currency) {\r\n let color;\r\n if (currency === \"IP\") color = \"var(--color-infinity)\";\r\n if (currency === \"EP\") color = \"var(--color-eternity)\";\r\n return {\r\n symbol: ``,\r\n color,\r\n };\r\n },\r\n ANTIMATTER: {\r\n symbol: ``,\r\n color: \"var(--color-antimatter)\",\r\n },\r\n DIMBOOST: {\r\n symbol: ``,\r\n color: reality.glyphTypes.power.color,\r\n },\r\n TICKSPEED: {\r\n symbol: ``,\r\n color: \"var(--color-eternity)\",\r\n },\r\n GALAXY: {\r\n symbol: ``,\r\n color: \"var(--color-eternity)\",\r\n },\r\n ACHIEVEMENT: {\r\n symbol: ``,\r\n color: \"var(--color-v--base)\",\r\n textColor: \"black\",\r\n },\r\n BREAK_INFINITY: {\r\n symbol: ``,\r\n color: \"var(--color-infinity)\",\r\n textColor: \"black\",\r\n },\r\n INFINITY_POWER: {\r\n symbol: ``,\r\n color: \"var(--color-infinity)\",\r\n textColor: \"black\",\r\n },\r\n IPOW_CONVERSION: {\r\n symbol: ``,\r\n color: \"var(--color-infinity)\",\r\n textColor: \"black\",\r\n },\r\n TIME_STUDY: {\r\n symbol: ``,\r\n color: \"var(--color-eternity)\",\r\n },\r\n TACHYON_PARTICLES: {\r\n symbol: ``,\r\n color: \"var(--color-dilation)\",\r\n },\r\n GENERIC_GLYPH: {\r\n symbol: ``,\r\n color: \"var(--color-reality)\",\r\n },\r\n SPECIFIC_GLYPH(type) {\r\n return {\r\n symbol: `${reality.glyphTypes[type].symbol}`,\r\n color: reality.glyphTypes[type].color,\r\n };\r\n },\r\n BLACK_HOLE: {\r\n symbol: ``,\r\n color: \"var(--color-reality)\",\r\n },\r\n GAMESPEED: {\r\n symbol: ``,\r\n color: \"var(--color-reality)\",\r\n },\r\n GENERIC_TERESA: {\r\n symbol: \"Ϟ\",\r\n color: \"var(--color-teresa--base)\",\r\n },\r\n GENERIC_ENSLAVED: {\r\n symbol: `
\\uf0c1
`,\r\n color: \"var(--color-enslaved--base)\",\r\n },\r\n GENERIC_V: {\r\n symbol: \"\",\r\n color: \"var(--color-v--base)\",\r\n textColor: \"black\",\r\n },\r\n GENERIC_RA: {\r\n symbol: ``,\r\n color: \"var(--color-ra--base)\",\r\n },\r\n ALCHEMY: {\r\n symbol: ``,\r\n color: \"var(--color-ra-pet--effarig)\",\r\n },\r\n BH_PULSE: {\r\n symbol: ``,\r\n color: \"var(--color-reality)\",\r\n },\r\n GENERIC_LAITELA: {\r\n symbol: \"\",\r\n color: \"var(--color-laitela--base)\",\r\n textColor: \"var(--color-laitela--accent)\",\r\n },\r\n SINGULARITY: {\r\n symbol: ``,\r\n color: \"var(--color-laitela--base)\",\r\n textColor: \"var(--color-laitela--accent)\",\r\n },\r\n PELLE: {\r\n symbol: \"\",\r\n color: \"var(--color-pelle--base)\",\r\n },\r\n MENDINGMILESTONE: {\r\n symbol: \"\",\r\n color: \"var(--color-mending)\",\r\n },\r\n IAP: {\r\n symbol: ``,\r\n color: \"var(--color-accent)\",\r\n },\r\n CORRUPTION: {\r\n symbol: ``,\r\n color: `var(--color-mending)`,\r\n },\r\n CORRUPTION_BONUS: {\r\n symbol: `++`,\r\n color: `var(--color-mending)`,\r\n },\r\n SOFTCAP(type) {\r\n switch (type) {\r\n case \"infinity\":\r\n return {\r\n symbol: ``,\r\n color: `var(--color-infinity)`\r\n } \r\n case \"eternity\":\r\n return {\r\n symbol: ``,\r\n color: `var(--color-eternity)`\r\n } \r\n case \"dilation\":\r\n return {\r\n symbol: ``,\r\n color: `var(--color-dilation)`\r\n } \r\n case \"reality\":\r\n return {\r\n symbol: ``,\r\n color: `var(--color-reality)`\r\n } \r\n case \"imaginary\":\r\n return {\r\n symbol: ``,\r\n color: `var(--color-ra--base)`\r\n } \r\n case \"corruption\":\r\n return {\r\n symbol: ``,\r\n color: `var(--color-mending)`\r\n } \r\n default:\r\n throw new Error(\"Unrecognized upgrade type in multiplier tab icons\");\r\n };\r\n }\r\n};\r\n","import { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const AM = {\r\n total: {\r\n name: \"Antimatter Production\",\r\n displayOverride: () => `${format(Currency.antimatter.productionPerSecond, 2, 2)}/sec`,\r\n multValue: () => new Decimal(Currency.antimatter.productionPerSecond).clampMin(1),\r\n isActive: true,\r\n overlay: [\"\"],\r\n },\r\n effarigAM: {\r\n name: \"Glyph Effect - Effarig Antimatter Production\",\r\n powValue: () => {\r\n const ad1 = AntimatterDimension(1);\r\n const baseProd = ad1.totalAmount.times(ad1.multiplier).times(Tickspeed.perSecond);\r\n return Math.pow(baseProd.log10(), getAdjustedGlyphEffect(\"effarigantimatter\") - 1);\r\n },\r\n isActive: () => getAdjustedGlyphEffect(\"effarigantimatter\") > 1 && AntimatterDimension(1).isProducing,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"effarig\"),\r\n }\r\n};\r\n","export class PlayerProgress {\r\n constructor(player) {\r\n this._player = player;\r\n }\r\n\r\n get isInfinityUnlocked() {\r\n // Infinity count data is stored in either player.infinitied or player.infinities based on if the save is before\r\n // or after the reality update, but this also gets checked in the import modal before any migration code is run.\r\n // Thus, it needs to manually support \"before\" and \"after\" states by converting both to Decimal.\r\n const infinityData = this._player.infinitied ? this._player.infinitied : this._player.infinities;\r\n return new Decimal(infinityData).gt(0) || this.isEternityUnlocked;\r\n }\r\n\r\n get isEternityUnlocked() {\r\n // Similarly to above, player.eternities is a number pre-reality update and a Decimal post-reality update\r\n return new Decimal(this._player.eternities).gt(0) || this.isRealityUnlocked;\r\n }\r\n\r\n get isRealityUnlocked() {\r\n return this._player.realities > 0 || this.isMendingUnlocked;\r\n }\r\n\r\n get hasFullCompletion() {\r\n return this._player.records?.fullGameCompletions > 0;\r\n }\r\n\r\n static get current() {\r\n return new PlayerProgress(player);\r\n }\r\n\r\n static of(player) {\r\n return new PlayerProgress(player);\r\n }\r\n\r\n static infinityUnlocked() {\r\n return PlayerProgress.current.isInfinityUnlocked;\r\n }\r\n\r\n static hasBroken() {\r\n return player.break || this.isEternityUnlocked || this.isRealityUnlocked || this.isMendingUnlocked;\r\n }\r\n\r\n static replicantiUnlocked() {\r\n return Replicanti.areUnlocked || this.isEternityUnlocked;\r\n }\r\n\r\n static eternityUnlocked() {\r\n return PlayerProgress.current.isEternityUnlocked;\r\n }\r\n\r\n static dilationUnlocked() {\r\n return TimeStudy.dilation.isBought;\r\n }\r\n\r\n static realityUnlocked() {\r\n return PlayerProgress.current.isRealityUnlocked;\r\n }\r\n\r\n static seenAlteredSpeed() {\r\n const ec12 = EternityChallenge(12);\r\n return this.realityUnlocked() || ec12.completions > 0 || ec12.isRunning;\r\n }\r\n\r\n static challengeCompleted() {\r\n return NormalChallenges.all.slice(1).some(c => c.isCompleted);\r\n }\r\n\r\n static infinityChallengeCompleted() {\r\n return InfinityChallenges.all.some(c => c.isCompleted);\r\n }\r\n\r\n //Custom Progress booleans starts here\r\n\r\n get isMendingUnlocked() {\r\n return new Decimal(this._player.mends).gt(new Decimal(0));\r\n }\r\n\r\n static mendingUnlocked(){\r\n return PlayerProgress.current.isMendingUnlocked\r\n }\r\n\r\n\r\n}\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const MultiplierTabHelper = {\r\n // Helper method for counting enabled dimensions\r\n activeDimCount(type) {\r\n switch (type) {\r\n case \"AD\":\r\n // Technically not 100% correct, but within EC7 any AD8 production is going to be irrelevant compared to AD7\r\n // and making the UI behave as if it's inactive produces a better look overall\r\n return Math.clamp(AntimatterDimensions.all.filter(ad => ad.isProducing).length,\r\n 1, EternityChallenge(7).isRunning ? 7 : 8);\r\n case \"ID\":\r\n return InfinityDimensions.all.filter(id => id.isProducing).length;\r\n case \"TD\":\r\n return TimeDimensions.all.filter(td => td.isProducing).length;\r\n default:\r\n throw new Error(\"Unrecognized Dimension type in Multiplier tab GameDB entry\");\r\n }\r\n },\r\n\r\n // Helper method for galaxy strength multipliers affecting all galaxy types (this is used a large number of times)\r\n globalGalaxyMult() {\r\n return Effects.product(\r\n InfinityUpgrade.galaxyBoost,\r\n InfinityUpgrade.galaxyBoost.chargedEffect,\r\n BreakInfinityUpgrade.galaxyBoost,\r\n TimeStudy(212),\r\n TimeStudy(232),\r\n Achievement(86),\r\n Achievement(178),\r\n InfinityChallenge(5).reward,\r\n PelleUpgrade.galaxyPower,\r\n PelleRifts.decay.milestones[1],\r\n (Ra.unlocks.improvedECRewards.isUnlocked ? EternityChallenge(8).vReward.effectValue : 1)\r\n ) * Pelle.specialGlyphEffect.power * (player.galBoostPoints.eq(0) ? 1 : (player.galBoostPoints.pow(1/(player.galBoostPoints.log10() ** 0.8))).div(100).add(1).toNumber());\r\n },\r\n\r\n // Helper method for galaxies and tickspeed, broken up as contributions of tickspeed*log(perGalaxy) and galaxyCount to\r\n // their product, which is proportional to log(tickspeed)\r\n decomposeTickspeed() {\r\n let effectiveCount = effectiveBaseGalaxies();\r\n const effects = this.globalGalaxyMult();\r\n\r\n let galFrac, tickFrac;\r\n if (effectiveCount < 3) {\r\n let baseMult = 1.1245;\r\n if (player.galaxies === 1) baseMult = 1.11888888;\r\n if (player.galaxies === 2) baseMult = 1.11267177;\r\n if (NormalChallenge(5).isRunning) {\r\n baseMult = 1.08;\r\n if (player.galaxies === 1) baseMult = 1.07632;\r\n if (player.galaxies === 2) baseMult = 1.072;\r\n }\r\n // This is needed for numerical consistency with the other conditional case\r\n baseMult /= 0.965 ** 2;\r\n const logBase = Math.log10(baseMult);\r\n\r\n const perGalaxy = 0.02 * effects;\r\n effectiveCount *= Pelle.specialGlyphEffect.power;\r\n\r\n tickFrac = Tickspeed.totalUpgrades * logBase;\r\n galFrac = -Math.log10(Math.max(0.01, 1 / baseMult - (effectiveCount * perGalaxy))) / logBase;\r\n } else {\r\n effectiveCount -= 2;\r\n effectiveCount *= effects;\r\n effectiveCount *= getAdjustedGlyphEffect(\"realitygalaxies\") * (1 + ImaginaryUpgrade(9).effectOrDefault(0));\r\n effectiveCount *= Pelle.specialGlyphEffect.power;\r\n\r\n // These all need to be framed as INCREASING x/sec tick rate (ie. all multipliers > 1, all logs > 0)\r\n const baseMult = 0.965 ** 2 / (NormalChallenge(5).isRunning ? 0.83 : 0.8);\r\n const logBase = Math.log10(baseMult);\r\n const logPerGalaxy = -DC.D0_965.log10();\r\n\r\n tickFrac = Tickspeed.totalUpgrades * logBase;\r\n galFrac = (1 + effectiveCount / logBase * logPerGalaxy);\r\n }\r\n\r\n // Artificially inflate the galaxy portion in order to make the breakdown closer to 50/50 in common situations\r\n galFrac *= 3;\r\n\r\n // Calculate what proportion base tickspeed takes out of the entire tickspeed multiplier\r\n const base = DC.D1.dividedByEffectsOf(\r\n Achievement(36),\r\n Achievement(45),\r\n Achievement(66),\r\n Achievement(83)\r\n );\r\n let baseFrac = base.log10() / Tickspeed.perSecond.log10();\r\n\r\n // We want to make sure to zero out components in some edge cases\r\n if (base.eq(1)) baseFrac = 0;\r\n if (effectiveCount === 0) galFrac = 0;\r\n\r\n // Normalize the sum by splitting tickspeed and galaxies across what's leftover besides the base value. These three\r\n // values must be scaled so that they sum to 1 and none are negative\r\n let factor = (1 - baseFrac) / (tickFrac + galFrac);\r\n // The actual base tickspeed calculation multiplies things in a different order, which can lead to precision issues\r\n // when no tickspeed upgrades have been bought if we don't explicitly set this to zero\r\n if (Tickspeed.totalUpgrades === 0) factor = 0;\r\n return {\r\n base: baseFrac,\r\n tickspeed: tickFrac * factor,\r\n galaxies: galFrac * factor,\r\n };\r\n },\r\n\r\n // Helper method to check for whether an achievement affects a particular dimension or not. Format of dimStr is\r\n // expected to be a three-character string \"XXN\", eg. \"AD3\" or \"TD2\"\r\n achievementDimCheck(ach, dimStr) {\r\n switch (ach) {\r\n case 23:\r\n return dimStr === \"AD8\";\r\n case 28:\r\n case 31:\r\n case 68:\r\n case 71:\r\n return dimStr === \"AD1\";\r\n case 94:\r\n return dimStr === \"ID1\";\r\n case 34:\r\n return dimStr.substr(0, 2) === \"AD\" && Number(dimStr.charAt(2)) !== 8;\r\n case 64:\r\n return dimStr.substr(0, 2) === \"AD\" && Number(dimStr.charAt(2)) <= 4;\r\n default:\r\n return true;\r\n }\r\n },\r\n\r\n // Helper method to check for whether a time study affects a particular dimension or not, see achievementDimCheck()\r\n timeStudyDimCheck(ts, dimStr) {\r\n switch (ts) {\r\n case 11:\r\n return dimStr === \"TD1\";\r\n case 71:\r\n return dimStr.substr(0, 2) === \"AD\" && Number(dimStr.charAt(2)) !== 8;\r\n case 72:\r\n return dimStr === \"ID4\";\r\n case 73:\r\n return dimStr === \"TD3\";\r\n case 214:\r\n return dimStr === \"AD8\";\r\n case 227:\r\n return dimStr === \"TD4\";\r\n case 234:\r\n return dimStr === \"AD1\";\r\n default:\r\n return true;\r\n }\r\n },\r\n\r\n // Helper method to check for whether an IC reward affects a particular dimension or not, see achievementDimCheck()\r\n ICDimCheck(ic, dimStr) {\r\n switch (ic) {\r\n case 1:\r\n case 6:\r\n return dimStr.substr(0, 2) === \"ID\";\r\n case 3:\r\n case 4:\r\n return dimStr.substr(0, 2) === \"AD\";\r\n case 8:\r\n return dimStr.substr(0, 2) === \"AD\" && Number(dimStr.charAt(2)) > 1 && Number(dimStr.charAt(2)) < 8;\r\n default:\r\n return false;\r\n }\r\n },\r\n\r\n // Helper method to check for whether an EC reward affects a particular dimension or not, see achievementDimCheck()\r\n ECDimCheck(ec, dimStr) {\r\n switch (ec) {\r\n case 1:\r\n case 10:\r\n return dimStr.substr(0, 2) === \"TD\";\r\n case 2:\r\n return dimStr === \"ID1\";\r\n case 4:\r\n case 9:\r\n return dimStr.substr(0, 2) === \"ID\";\r\n case 7:\r\n return dimStr === \"ID8\";\r\n default:\r\n return false;\r\n }\r\n },\r\n\r\n blackHoleSpeeds() {\r\n const currBH = BlackHoles.list\r\n .filter(bh => bh.isUnlocked)\r\n .map(bh => (bh.isActive ? bh.power : 1))\r\n .reduce((x, y) => x * y, 1);\r\n\r\n // Calculate an average black hole speedup factor\r\n const bh1 = BlackHole(1);\r\n const bh2 = BlackHole(2);\r\n const avgBH = 1 + (bh1.isUnlocked ? bh1.dutyCycle * (bh1.power - 1) : 0) +\r\n (bh2.isUnlocked ? bh1.dutyCycle * bh2.dutyCycle * bh1.power * (bh2.power - 1) : 0);\r\n\r\n return {\r\n current: currBH,\r\n average: avgBH\r\n };\r\n },\r\n\r\n pluralizeDimensions(dims) {\r\n return dims === 1 ? \"Dimension\\xa0\" : \"Dimensions\";\r\n },\r\n\r\n // All of the following NC12-related functions are to make the parsing within the GameDB entry easier in terms of\r\n // which set of Dimensions are actually producing within NC12 - in nearly every case, one of the odd/even sets will\r\n // produce significantly more than the other, so we simply assume the larger one is active and the other isn't\r\n evenDimNC12Production() {\r\n const nc12Pow = tier => ([2, 4, 6].includes(tier) ? 0.1 * (8 - tier) : 0);\r\n const maxTier = Math.clampMin(2 * Math.floor(MultiplierTabHelper.activeDimCount(\"AD\") / 2), 2);\r\n return AntimatterDimensions.all\r\n .filter(ad => ad.isProducing && ad.tier % 2 === 0)\r\n .map(ad => ad.multiplier.times(ad.amount.pow(nc12Pow(ad.tier))))\r\n .reduce((x, y) => x.times(y), DC.D1)\r\n .times(AntimatterDimension(maxTier).totalAmount);\r\n },\r\n\r\n oddDimNC12Production() {\r\n const maxTier = Math.clampMin(2 * Math.floor(MultiplierTabHelper.activeDimCount(\"AD\") / 2 - 0.5) + 1, 1);\r\n return AntimatterDimensions.all\r\n .filter(ad => ad.isProducing && ad.tier % 2 === 1)\r\n .map(ad => ad.multiplier)\r\n .reduce((x, y) => x.times(y), DC.D1)\r\n .times(AntimatterDimension(maxTier).totalAmount);\r\n },\r\n\r\n actualNC12Production() {\r\n return Decimal.max(this.evenDimNC12Production(), this.oddDimNC12Production());\r\n },\r\n\r\n multInNC12(dim) {\r\n const nc12Pow = tier => ([2, 4, 6].includes(tier) ? 0.1 * (8 - tier) : 0);\r\n const ad = AntimatterDimension(dim);\r\n return ad.isProducing ? ad.multiplier.times(ad.totalAmount.pow(nc12Pow(dim))) : DC.D1;\r\n },\r\n\r\n isNC12ProducingEven() {\r\n return this.evenDimNC12Production().gt(this.oddDimNC12Production());\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { PlayerProgress } from \"../../player-progress\";\r\n\r\nimport { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const AD = {\r\n total: {\r\n name: dim => {\r\n if (dim) return `AD ${dim} Multiplier`;\r\n if (NormalChallenge(12).isRunning) {\r\n if (MultiplierTabHelper.actualNC12Production().eq(0)) return \"Base AD Production from All Dimensions\";\r\n return `Base AD Production from ${MultiplierTabHelper.isNC12ProducingEven() ? \"Even\" : \"Odd\"} Dimensions`;\r\n }\r\n return \"Base AD Production\";\r\n },\r\n displayOverride: dim => {\r\n if (dim) {\r\n const singleMult = NormalChallenge(12).isRunning\r\n ? MultiplierTabHelper.multInNC12(dim)\r\n : AntimatterDimension(dim).multiplier;\r\n return formatX(singleMult, 2, 2);\r\n }\r\n const maxTier = EternityChallenge(7).isRunning ? 7 : MultiplierTabHelper.activeDimCount(\"AD\");\r\n if (NormalChallenge(12).isRunning) return `${format(MultiplierTabHelper.actualNC12Production(), 2)}/sec`;\r\n return `${format(AntimatterDimensions.all\r\n .filter(ad => ad.isProducing)\r\n .map(ad => ad.multiplier)\r\n .reduce((x, y) => x.times(y), DC.D1)\r\n .times(AntimatterDimension(maxTier).totalAmount), 2)}/sec`;\r\n },\r\n multValue: dim => {\r\n if (NormalChallenge(12).isRunning) {\r\n const nc12Prod = MultiplierTabHelper.actualNC12Production();\r\n if (!dim) return nc12Prod.eq(0) ? 1 : nc12Prod;\r\n return (MultiplierTabHelper.isNC12ProducingEven() ? dim % 2 === 0 : dim % 2 === 1)\r\n ? MultiplierTabHelper.multInNC12(dim)\r\n : DC.D1;\r\n }\r\n const mult = dim\r\n ? AntimatterDimension(dim).multiplier\r\n : AntimatterDimensions.all\r\n .filter(ad => ad.isProducing)\r\n .map(ad => ad.multiplier)\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n const highestDim = AntimatterDimension(\r\n EternityChallenge(7).isRunning ? 7 : MultiplierTabHelper.activeDimCount(\"AD\")).totalAmount;\r\n return mult.times(highestDim).clampMin(1);\r\n },\r\n isActive: dim => (dim ? dim <= MultiplierTabHelper.activeDimCount(\"AD\") : true),\r\n dilationEffect: () => {\r\n const baseEff = (player.dilation.active || Enslaved.isRunning)\r\n ? 0.75 * Effects.product(DilationUpgrade.dilationPenalty)\r\n : 1;\r\n return baseEff * (Effarig.isRunning ? Effarig.multDilation : 1);\r\n },\r\n isDilated: true,\r\n overlay: [\"Ω\", \"\"],\r\n icon: dim => MultiplierTabIcons.DIMENSION(\"AD\", dim),\r\n },\r\n purchase: {\r\n name: dim => (dim ? `Purchased AD ${dim}` : \"Purchases\"),\r\n multValue: dim => {\r\n const getPurchases = ad => (Laitela.continuumActive\r\n ? AntimatterDimension(ad).continuumValue\r\n : Math.floor(AntimatterDimension(ad).bought / 10)\r\n );\r\n if (dim) return Decimal.pow(AntimatterDimensions.buyTenMultiplier, getPurchases(dim));\r\n return AntimatterDimensions.all\r\n .filter(ad => ad.isProducing)\r\n .map(ad => Decimal.pow(AntimatterDimensions.buyTenMultiplier, getPurchases(ad.tier)))\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n },\r\n isActive: () => !EternityChallenge(11).isRunning,\r\n icon: dim => MultiplierTabIcons.PURCHASE(\"AD\", dim),\r\n },\r\n highestDim: {\r\n name: () => `Amount of highest Dimension`,\r\n displayOverride: () => {\r\n const dim = EternityChallenge(7).isRunning ? 7 : MultiplierTabHelper.activeDimCount(\"AD\");\r\n return `AD ${dim}, ${format(AntimatterDimension(dim).totalAmount, 2)}`;\r\n },\r\n multValue: () => {\r\n const dim = EternityChallenge(7).isRunning ? 7 : MultiplierTabHelper.activeDimCount(\"AD\");\r\n return AntimatterDimension(dim).totalAmount;\r\n },\r\n isActive: () => AntimatterDimension(1).isProducing,\r\n icon: MultiplierTabIcons.DIMENSION(\"AD\"),\r\n },\r\n\r\n dimboost: {\r\n name: dim => (dim ? `Dimboosts on AD ${dim}` : \"Dimboosts\"),\r\n multValue: dim => (dim\r\n ? DimBoost.multiplierToNDTier(dim)\r\n : AntimatterDimensions.all\r\n .filter(ad => ad.isProducing)\r\n .map(ad => DimBoost.multiplierToNDTier(ad.tier))\r\n .reduce((x, y) => x.times(y), DC.D1)),\r\n isActive: true,\r\n icon: MultiplierTabIcons.DIMBOOST,\r\n },\r\n sacrifice: {\r\n name: \"Sacrifice Multiplier\",\r\n multValue: dim => ((!dim || dim === 8) ? Sacrifice.totalBoost : DC.D1),\r\n isActive: dim => (!dim || dim === 8) && Sacrifice.totalBoost.gt(1) && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.SACRIFICE(\"antimatter\"),\r\n },\r\n achievementMult: {\r\n name: \"Achievement Multiplier\",\r\n multValue: dim => Decimal.pow(Achievements.power, dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\")),\r\n isActive: () => !Pelle.isDoomed && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n achievement: {\r\n name: \"Achievement Rewards\",\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n Achievement(48),\r\n Achievement(56),\r\n Achievement(65),\r\n Achievement(72),\r\n Achievement(73),\r\n Achievement(74),\r\n Achievement(76),\r\n Achievement(84),\r\n Achievement(91),\r\n Achievement(92)\r\n );\r\n\r\n const dimMults = Array.repeat(DC.D1, 9);\r\n for (let tier = 1; tier <= 8; tier++) {\r\n if (tier === 1) {\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n Achievement(28),\r\n Achievement(31),\r\n Achievement(68),\r\n Achievement(71),\r\n );\r\n }\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n tier === 8 ? Achievement(23) : null,\r\n tier < 8 ? Achievement(34) : null,\r\n tier <= 4 ? Achievement(64) : null,\r\n );\r\n if (Achievement(43).isUnlocked) {\r\n dimMults[tier] = dimMults[tier].times(1 + tier / 100);\r\n }\r\n }\r\n\r\n if (dim) return allMult.times(dimMults[dim]);\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]).times(allMult);\r\n }\r\n return totalMult;\r\n },\r\n powValue: () => Achievement(183).effectOrDefault(1),\r\n isActive: () => !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n infinityUpgrade: {\r\n name: dim => (dim ? `Infinity Upgrades (AD ${dim})` : \"Infinity Upgrades\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n InfinityUpgrade.totalTimeMult,\r\n InfinityUpgrade.thisInfinityTimeMult,\r\n );\r\n\r\n const dimMults = Array.repeat(DC.D1, 9);\r\n for (let tier = 1; tier <= 8; tier++) {\r\n if (tier === 1) {\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n InfinityUpgrade.unspentIPMult,\r\n InfinityUpgrade.unspentIPMult.chargedEffect,\r\n );\r\n }\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n AntimatterDimension(tier).infinityUpgrade,\r\n );\r\n }\r\n\r\n if (dim) return allMult.times(dimMults[dim]);\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]).times(allMult);\r\n }\r\n return totalMult;\r\n },\r\n powValue: dim => {\r\n const allPow = InfinityUpgrade.totalTimeMult.chargedEffect.effectOrDefault(1) *\r\n InfinityUpgrade.thisInfinityTimeMult.chargedEffect.effectOrDefault(1);\r\n\r\n const dimPow = Array.repeat(1, 9);\r\n for (let tier = 1; tier <= 8; tier++) {\r\n dimPow[tier] = AntimatterDimension(tier).infinityUpgrade.chargedEffect.effectOrDefault(1);\r\n }\r\n\r\n if (dim) return allPow * dimPow[dim];\r\n // This isn't entirely accurate because you can't return a power for all ADs if only some of them actually have\r\n // it, so we cheat somewhat by returning the geometric mean of all actively producing dimensions (this should\r\n // be close to the same value if all the base multipliers are similar in magnitude)\r\n return allPow * Math.exp(dimPow.slice(1)\r\n .map(n => Math.log(n)).sum() / MultiplierTabHelper.activeDimCount(\"AD\"));\r\n },\r\n isActive: () => PlayerProgress.infinityUnlocked() && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.UPGRADE(\"infinity\"),\r\n },\r\n breakInfinityUpgrade: {\r\n name: \"Break Infinity Upgrades\",\r\n multValue: dim => {\r\n const mult = DC.D1.timesEffectsOf(\r\n BreakInfinityUpgrade.totalAMMult,\r\n BreakInfinityUpgrade.currentAMMult,\r\n BreakInfinityUpgrade.achievementMult,\r\n BreakInfinityUpgrade.slowestChallengeMult,\r\n BreakInfinityUpgrade.infinitiedMult\r\n );\r\n return Decimal.pow(mult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\"));\r\n },\r\n powValue: () => {\r\n const allPow = BreakInfinityUpgrade.totalAMMult.chargedEffect.effectOrDefault(1) *\r\n BreakInfinityUpgrade.currentAMMult.chargedEffect.effectOrDefault(1);\r\n return allPow;\r\n },\r\n isActive: () => player.break && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.BREAK_INFINITY,\r\n },\r\n infinityPower: {\r\n name: \"Multiplier from Infinity Power\",\r\n fakeValue: () => Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate),\r\n multValue: dim => {\r\n const mult = Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate).max(1);\r\n return Decimal.pow(mult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\"));\r\n },\r\n isActive: () => Currency.infinityPower.value.gt(1) && !EternityChallenge(9).isRunning,\r\n icon: MultiplierTabIcons.INFINITY_POWER,\r\n },\r\n infinityChallenge: {\r\n name: dim => (dim ? `Infinity Challenges (AD ${dim})` : \"Infinity Challenges\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n InfinityChallenge(3),\r\n InfinityChallenge(3).reward,\r\n );\r\n\r\n const dimMults = Array.repeat(DC.D1, 9);\r\n for (let tier = 1; tier <= 8; tier++) {\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n tier > 1 && tier < 8 ? InfinityChallenge(8).reward : null\r\n );\r\n }\r\n\r\n if (dim) return allMult.times(dimMults[dim]);\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]).times(allMult);\r\n }\r\n return totalMult;\r\n },\r\n powValue: () => InfinityChallenge(4).reward.effectOrDefault(1),\r\n isActive: () => player.break && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.CHALLENGE(\"infinity\"),\r\n },\r\n timeStudy: {\r\n name: dim => (dim ? `Time Studies (AD ${dim})` : \"Time Studies\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n TimeStudy(91),\r\n TimeStudy(101),\r\n TimeStudy(161),\r\n TimeStudy(193),\r\n TimeStudy(311),\r\n );\r\n\r\n const dimMults = Array.repeat(DC.D1, 9);\r\n for (let tier = 1; tier <= 8; tier++) {\r\n // We don't want to double-count the base effect that TS31 boosts\r\n const infinitiedMult = DC.D1.timesEffectsOf(\r\n AntimatterDimension(tier).infinityUpgrade,\r\n BreakInfinityUpgrade.infinitiedMult\r\n );\r\n dimMults[tier] = dimMults[tier].times(infinitiedMult.pow(TimeStudy(31).effectOrDefault(1) - 1));\r\n\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n tier < 8 ? TimeStudy(71) : null,\r\n tier === 8 ? TimeStudy(214) : null,\r\n tier === 1 ? TimeStudy(234) : null,\r\n );\r\n }\r\n\r\n if (dim) return allMult.times(dimMults[dim]);\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]).times(allMult);\r\n }\r\n return totalMult;\r\n },\r\n isActive: () => PlayerProgress.eternityUnlocked() && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.TIME_STUDY,\r\n },\r\n eternityChallenge: {\r\n name: \"Eternity Challenges\",\r\n multValue: dim => Decimal.pow(EternityChallenge(10).effectValue,\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\")),\r\n isActive: () => EternityChallenge(10).isRunning,\r\n icon: MultiplierTabIcons.CHALLENGE(\"eternity\"),\r\n },\r\n glyph: {\r\n name: \"Glyph Effects\",\r\n multValue: dim => {\r\n const mult = getAdjustedGlyphEffect(\"powermult\");\r\n return Decimal.pow(mult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\"));\r\n },\r\n powValue: () => {\r\n const totalPow = getAdjustedGlyphEffect(\"powerpow\") * getAdjustedGlyphEffect(\"effarigdimensions\");\r\n return totalPow * (player.dilation.active ? getAdjustedGlyphEffect(\"dilationpow\") : 1);\r\n },\r\n isActive: () => PlayerProgress.realityUnlocked() && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n v: {\r\n name: \"5 V-Achievement Milestone - AD Power based on Space Theorems\",\r\n powValue: () => VUnlocks.adPow.effectOrDefault(1),\r\n isActive: () => PlayerProgress.realityUnlocked() && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n alchemy: {\r\n name: \"Glyph Alchemy\",\r\n multValue: dim => {\r\n const mult = AlchemyResource.dimensionality.effectOrDefault(1)\r\n .times(Currency.realityMachines.value.powEffectOf(AlchemyResource.force));\r\n return Decimal.pow(mult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\"));\r\n },\r\n powValue: dim => {\r\n const basePow = AlchemyResource.power.effectOrDefault(1) * Ra.momentumValue;\r\n // Not entirely accurate, but returns the geometric mean of all producing dimensions (which should be close)\r\n // Set to default value of 1 in non-unlocked case (arguably some sort of effect-or-default would be better,\r\n // but I don't want to risk breaking things).\r\n let inflationPow = 1;\r\n if (AlchemyResource.inflation.isUnlocked) {\r\n if (dim) {\r\n inflationPow = AntimatterDimension(dim).multiplier.gte(AlchemyResource.inflation.effectValue) ? 1.05 : 1;\r\n } else {\r\n const inflated = AntimatterDimensions.all\r\n .countWhere(ad => ad.isProducing && ad.multiplier.gte(AlchemyResource.inflation.effectValue));\r\n inflationPow = Math.pow(1.05, inflated / AntimatterDimensions.all.countWhere(ad => ad.isProducing));\r\n }\r\n }\r\n return basePow * inflationPow;\r\n },\r\n isActive: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n pelle: {\r\n name: \"Pelle Upgrades\",\r\n multValue: dim => Decimal.pow(PelleUpgrade.antimatterDimensionMult.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\")),\r\n powValue: () => PelleRifts.paradox.effectOrDefault(DC.D1).toNumber(),\r\n isActive: () => Pelle.isDoomed && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: dim => {\r\n const mult = ShopPurchase.dimPurchases.currentMult * ShopPurchase.allDimPurchases.currentMult;\r\n return Decimal.pow(mult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\"));\r\n },\r\n isActive: () => ShopPurchaseData.totalSTD > 0 && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n\r\n effectNC: {\r\n name: dim => (dim ? `Normal Challenge Effect (AD ${dim})` : \"Normal Challenge Effects\"),\r\n // Depending on the challenge itself and the game state, this could be either a nerf or a buff, so we make\r\n // sure to render a x or / conditionally. This requires we calculate the value itself again, however\r\n displayOverride: dim => {\r\n const formatFn = num => (num.gte(1) ? formatX(num, 2, 2) : `/${format(num.reciprocal(), 2, 2)}`);\r\n\r\n let dimMults = Array.repeat(DC.D1, 9);\r\n if (NormalChallenge(2).isRunning) {\r\n dimMults = Array.repeat(new Decimal(player.chall2Pow), 9);\r\n }\r\n if (NormalChallenge(3).isRunning) {\r\n dimMults[1] = dimMults[1].times(player.chall3Pow);\r\n }\r\n\r\n if (NormalChallenge(12).isRunning) {\r\n dimMults[2] = AntimatterDimension(2).totalAmount.pow(0.6);\r\n dimMults[4] = AntimatterDimension(4).totalAmount.pow(0.4);\r\n dimMults[6] = AntimatterDimension(6).totalAmount.pow(0.2);\r\n }\r\n\r\n if (dim) return formatFn(dimMults[dim]);\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]);\r\n }\r\n return formatFn(totalMult);\r\n },\r\n // This and displayOverride contain largely the same code\r\n multValue: dim => {\r\n let dimMults = Array.repeat(DC.D1, 9);\r\n // Do not change this to an else-if, as NC2/NC3 need to be enterable simultaneously in IC1\r\n if (NormalChallenge(2).isRunning) {\r\n dimMults = Array.repeat(new Decimal(player.chall2Pow), 9);\r\n }\r\n if (NormalChallenge(3).isRunning) {\r\n dimMults[1] = dimMults[1].times(player.chall3Pow);\r\n }\r\n\r\n // Legacy behavior for NC12 we're preserving dictates that it boosts production based on dimension amount\r\n // without actually increasing the multiplier itself, so this effectively turns the powers in the production\r\n // code info effective multipliers raised to pow-1\r\n if (NormalChallenge(12).isRunning) {\r\n dimMults[2] = AntimatterDimension(2).totalAmount.pow(0.6);\r\n dimMults[4] = AntimatterDimension(4).totalAmount.pow(0.4);\r\n dimMults[6] = AntimatterDimension(6).totalAmount.pow(0.2);\r\n\r\n // We have to hide this when producing odd or when referencing a dimension which has no amount, but then we\r\n // also need to total up the multipliers when on the grouped layout. No amount evaluates to zero, so in all\r\n // those cases we use 1 instead in order to calculate properly\r\n if (!MultiplierTabHelper.isNC12ProducingEven()) return DC.D1;\r\n if (dim) return dimMults[dim].neq(0) ? dimMults[dim] : DC.D1;\r\n let totalNC12 = DC.D1;\r\n for (let d = 2; d <= 6; d += 2) totalNC12 = totalNC12.times(dimMults[d].clampMin(1));\r\n return totalNC12;\r\n }\r\n\r\n if (dim) return dimMults[dim];\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]);\r\n }\r\n return totalMult;\r\n },\r\n isActive: () => [2, 3, 12].some(c => NormalChallenge(c).isRunning),\r\n icon: MultiplierTabIcons.CHALLENGE(\"infinity\"),\r\n },\r\n nerfIC: {\r\n name: dim => (dim ? `Infinity Challenge Nerf (AD ${dim})` : \"Infinity Challenge Nerf\"),\r\n multValue: dim => {\r\n let dimMults = Array.repeat(DC.D1, 9);\r\n if (InfinityChallenge(4).isRunning) {\r\n for (let tier = 1; tier <= 8; tier++) {\r\n if (player.postC4Tier !== tier) {\r\n dimMults[tier] = dimMults[tier].pow(1 - InfinityChallenge(4).effectValue).reciprocal();\r\n }\r\n }\r\n } else if (InfinityChallenge(6).isRunning) {\r\n dimMults = Array.repeat(DC.D1.dividedByEffectOf(InfinityChallenge(6)), 9);\r\n } else if (InfinityChallenge(8).isRunning) {\r\n dimMults = Array.repeat(DC.D1.timesEffectsOf(InfinityChallenge(8)), 9);\r\n }\r\n\r\n if (dim) return dimMults[dim];\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]);\r\n }\r\n return totalMult;\r\n },\r\n isActive: () => [4, 6, 8].some(ic => InfinityChallenge(ic).isRunning),\r\n icon: MultiplierTabIcons.CHALLENGE(\"infinity\"),\r\n },\r\n nerfV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.5,\r\n isActive: () => V.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfCursed: {\r\n name: \"Cursed Glyphs\",\r\n powValue: () => getAdjustedGlyphEffect(\"curseddimensions\"),\r\n isActive: () => getAdjustedGlyphEffect(\"curseddimensions\") !== 1,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"cursed\"),\r\n },\r\n nerfPelle: {\r\n name: \"Doomed Reality\",\r\n multValue: 0.1,\r\n powValue: () => (PelleStrikes.infinity.hasStrike ? 0.5 : 1),\r\n isActive: () => Pelle.isDoomed,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n nerfSHardV: {\r\n name: \"V's Superhard Reality\",\r\n powValue: () => 0.000001,\r\n isActive: () => V.isSuperRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { PlayerProgress } from \"../../player-progress\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\n// Note most of the isActive entries in here have redundant-looking DT/s != 0 checks because DT is treated as a\r\n// special case due to not being a prestige currency but still needing to be treated like one in the UI. This\r\n// is because it requires dilation to be unlocked, which isn't a given, and we want the tab continuously visible\r\n// after the first ever dilation unlock on the 0th reality\r\nexport const DT = {\r\n total: {\r\n name: \"Dilated Time gain\",\r\n displayOverride: () => `${format(getDilationGainPerSecond().times(getGameSpeedupForDisplay()), 2, 2)}/sec`,\r\n multValue: () => getDilationGainPerSecond().times(getGameSpeedupForDisplay()),\r\n isActive: () => PlayerProgress.realityUnlocked() ||\r\n (PlayerProgress.dilationUnlocked() && getDilationGainPerSecond().gt(0)),\r\n dilationEffect: () => (Enslaved.isRunning ? 0.85 : 1),\r\n isDilated: true,\r\n overlay: [\"Ψ\"],\r\n },\r\n achievement: {\r\n name: \"Achievements\",\r\n multValue: () => Achievement(132).effectOrDefault(1) * Achievement(137).effectOrDefault(1),\r\n isActive: () => (Achievement(132).canBeApplied || Achievement(137).canBeApplied) &&\r\n getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n dilation: {\r\n name: \"Repeatable Dilation Upgrades\",\r\n multValue: () => DC.D1.timesEffectsOf(\r\n DilationUpgrade.dtGain,\r\n DilationUpgrade.dtGainPelle,\r\n DilationUpgrade.flatDilationMult\r\n ),\r\n isActive: () => DC.D1.timesEffectsOf(\r\n DilationUpgrade.dtGain,\r\n DilationUpgrade.dtGainPelle,\r\n DilationUpgrade.flatDilationMult\r\n ).gt(1),\r\n icon: MultiplierTabIcons.UPGRADE(\"dilation\"),\r\n },\r\n amplifierDT: {\r\n name: \"Reality Upgrade - Temporal Amplifier\",\r\n multValue: () => RealityUpgrade(1).effectOrDefault(1),\r\n isActive: () => RealityUpgrade(1).canBeApplied && getDilationGainPerSecond().neq(0) && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n glyph: {\r\n name: \"Glyph Effects\",\r\n multValue: () => {\r\n const dtMult = getAdjustedGlyphEffect(\"dilationDT\").times(Pelle.specialGlyphEffect.dilation);\r\n const repliDT = Replicanti.areUnlocked\r\n ? Math.clampMin(Decimal.log10(Replicanti.amount) * getAdjustedGlyphEffect(\"replicationdtgain\"), 1)\r\n : DC.D1;\r\n return dtMult.times(repliDT);\r\n },\r\n isActive: () => PlayerProgress.realityUnlocked() && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH\r\n },\r\n ra1: {\r\n name: \"Ra Upgrade - Multiplier based on TT\",\r\n multValue: () => DC.D1.timesEffectsOf(Ra.unlocks.continuousTTBoost.effects.dilatedTime),\r\n isActive: () => Ra.unlocks.autoTP.canBeApplied && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n ra2: {\r\n name: \"Ra Upgrade - Multiplier based on peak game speed\",\r\n multValue: () => DC.D1.timesEffectsOf(Ra.unlocks.peakGamespeedDT),\r\n isActive: () => Ra.unlocks.autoTP.canBeApplied && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n alchemy: {\r\n name: \"Glyph Alchemy\",\r\n multValue: () => AlchemyResource.dilation.effectOrDefault(1),\r\n isActive: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n mendingMilestones: {\r\n name: \"Mending Milestone 1\",\r\n multValue: 100,\r\n isActive: () => PlayerProgress.mendingUnlocked(),\r\n icon: MultiplierTabIcons.MENDINGMILESTONE,\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: () => new Decimal(ShopPurchase.dilatedTimePurchases.currentMult ** (Pelle.isDoomed ? 0.5 : 1)),\r\n isActive: () => ShopPurchaseData.totalSTD > 0 && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n\r\n nerfV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.5,\r\n isActive: () => V.isRunning && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfPelle: {\r\n name: \"Doomed Reality\",\r\n multValue: 1e-5,\r\n isActive: () => Pelle.isDoomed && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n gamespeed: {\r\n name: \"Current Game speed\",\r\n multValue: () => getGameSpeedupForDisplay(),\r\n isActive: () => getGameSpeedupForDisplay().gt(1) && getDilationGainPerSecond().neq(0),\r\n ignoresNerfPowers: true,\r\n icon: MultiplierTabIcons.GAMESPEED,\r\n },\r\n effarig65: {\r\n name: \"Effarig Level 65\",\r\n powValue: () => 1 + Math.max(0, (Currency.relicShards.value.log10() / 1337)),\r\n isActive: () => Ra.unlocks.relicShardBoost.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n nerfSHardV: {\r\n name: \"V's Superhard Reality\",\r\n powValue: () => 0.000001,\r\n isActive: () => V.isSuperRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n }\r\n};\r\n","import { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const eternities = {\r\n total: {\r\n name: \"Eternities gained per Eternity\",\r\n isBase: true,\r\n multValue: () => gainedEternities(),\r\n isActive: () => (PlayerProgress.realityUnlocked() || Achievement(113).isUnlocked) && !Pelle.isDoomed,\r\n overlay: [\"Δ\", \"\"],\r\n },\r\n achievement: {\r\n name: \"Achievement 113\",\r\n multValue: () => Achievement(113).effectOrDefault(1),\r\n isActive: () => Achievement(113).canBeApplied,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n amplifierEter: {\r\n name: \"Reality Upgrade - Eternal Amplifier\",\r\n multValue: () => RealityUpgrade(3).effectOrDefault(1),\r\n isActive: () => RealityUpgrade(3).canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n glyph: {\r\n name: \"Equipped Glyphs\",\r\n multValue: () => getAdjustedGlyphEffect(\"timeetermult\"),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n ra: {\r\n name: \"Ra Upgrade - Multiplier based on TT\",\r\n multValue: () => Ra.unlocks.continuousTTBoost.effects.eternity.effectOrDefault(1),\r\n isActive: () => Ra.unlocks.continuousTTBoost.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n alchemy: {\r\n name: \"Alchemy Resource - Eternity\",\r\n powValue: () => AlchemyResource.eternity.effectOrDefault(1),\r\n isActive: () => AlchemyResource.eternity.canBeApplied,\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n mendingMilestones: {\r\n name: \"Mending Milestone 1\",\r\n multValue: 1e4,\r\n isActive: () => PlayerProgress.mendingUnlocked(),\r\n icon: MultiplierTabIcons.MENDINGMILESTONE,\r\n },\r\n teresa90: {\r\n name: \"Teresa Level 90\",\r\n powValue: () => Math.pow((Math.log10(Currency.realities.value)/20), 1.111),\r\n isActive: () => Ra.unlocks.realitiesBoostInfinityAndEternityProduction.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n }\r\n};\r\n","export function corruptionChallengeScoreCalculation() {\r\n let corruptionScores = [1, 1.2, 1.45, 1.7, 2, 2.5, 3, 3.5, 4, 5, 7, 11]\r\n let finalScore = corruptionScores[player.mending.corruption[0]]\r\n for (let i = 1; i < 9; i++) {\r\n finalScore *= corruptionScores[player.mending.corruption[i]]\r\n }\r\n return finalScore\r\n};\r\n\r\n// These nerfs make no sense on their own, so ill explain them here:\r\n// (Hidden nerfs exist for balancing purposes, and hidden just means they arent directly shown on the tab, not that they dont show at all)\r\n// Prestige Limits: 1 nerf: All prestige currencies are ^x\r\n// Dimensional Limits: 1 nerf: All dimensions are ^x, and even stronger w/o pelle 90\r\n// Time Compression: 4 Nerfs:\r\n// Power - Game time recieves an exponent\r\n// Multiplier - Game time then recieve a multiplier (or divisor)\r\n// IP gain - Beyond TC3, IP gain will recieve an exponent (hidden)\r\n// AD mult nerf - Beyond TC7, AD will recieve an exponent (hidden) \r\n// Galactic Weakness: 5 Nerfs:\r\n// Scaling - Galaxies scale faster\r\n// Power - Galaxies are less effective\r\n// Dimboost Cap - Beyond GW2, dimboosts will recieve a hardcap\r\n// GS mult - Beyond GW5, gamespeed recieves an exponent nerf (hidden)\r\n// IPo Conversion - Beyond GW7, infinity power conversion recieves a divisor (hidden)\r\n// Complex Glyphs: 4 Nerfs:\r\n// Level - Level recieves a power effect\r\n// Rarity - Rarity recieves a power effect\r\n// Forced Cursed Glyphs - Beyond CG3, some glyph slots will be forced cursed glyphs (hidden)\r\n// Alchemy Effectiveness - Beyond CG6, alchemy is disabled (hidden)\r\n// Tick Extension: 3 Nerfs:\r\n// Power - Tickspeed recieves an exponent\r\n// Shard Scaling - Time shards are less efficient\r\n// No Triads - Beyond TE5, Triads cannot be purchased (hidden)\r\n// Atom Dilution: 1 Nerf: AM gain exponent ^x\r\n// Theory of Dilation: 4 Nerfs:\r\n// Power - DT and TP gain a power effect\r\n// Divisor - DT gains a divisor\r\n// TT cost - Beyond ToD4, TT costs scale faster (hidden)\r\n// Dimension scaling - Beyond ToD7, dimension cost scaling gains an exponent\r\n// Replicative Singularities: 5 Nerfs:\r\n// Replicanti: Replicanti gains a power exponent\r\n// Singularity mult - Singularity recieves a multiplier (or divisor)\r\n// DM mult - DM gain gains a mult (or div) (hidden)\r\n// Prestige Gain - Prestige gain recieves an exponent (hidden)\r\n// Rebuyable disablers - Beyond RS4, rebuyable upgrades are disabled (hidden)\r\n// Study of Forever: 5 Nerfs:\r\n// TT cost - TT cost is more expensive\r\n// TT disabled - TT generation from glyphs is disabled\r\n// TD nerf - TD gain an exponent\r\n// Triad Disabler - Beyond SoF3, Triad studies are disabled and some studies recieve heavy nerfs (hidden)\r\n// Uncharged Infinity - Beyond SoF7, Charged upgrades are disabled and so are EC rewards (hidden)\r\nexport const corruptionPenalties = {\r\n prestigeLimits: [1, 0.85, 0.55, 0.35, 0.15, 0.06, 0.02, 0.01, 0.005, 0.001, 5e-4, 3e-5],\r\n dimLimits: {\r\n preNerf: [1, 0.85, 0.55, 0.35, 0.15, 0.06, 0.02, 0.01, 0.005, 0.001, 5e-4, 3e-5],\r\n postNerf: [1, 0.98, 0.915, 0.8, 0.6, 0.5, 0.3, 0.2, 0.15, 0.1, 0.06, 0.03]\r\n },\r\n timeCompression: {\r\n power: [1, 0.95, 0.8, 0.65, 0.5, 0.35, 0.3, 0.05, 0.01, 0, 0, 0], // Yes in practise 1e-8, 1e-45, 1e-120, 1e-265, 1e-655, etc wouldve worked but whatever\r\n mult: [1, new Decimal(1).div(1e8), new Decimal(1).div(1e45), new Decimal(1).div(1e120), new Decimal(1).div(1e265), new Decimal(1).div(\"1e655\"), new Decimal(1).div(\"1e1275\"), new Decimal(1).div(\"1e2250\"), new Decimal(1).div(\"1e5000\"), new Decimal(1).div(\"1e15000\"), new Decimal(1).div(\"1e65000\"), new Decimal(1).div(\"1e450000\")],\r\n hiddenFour: [1, 1, 1, 1, 0.999, 0.995, 0.99, 0.98, 0.95, 0.8, 0.5, 0.1],\r\n hiddenEight: [1, 1, 1, 1, 1, 1, 1, 1, 0.9, 0.7, 0.5, 0.3]\r\n }, \r\n galWeak: {\r\n scaling: [1, 1.1, 1.3, 1.5, 2, 2.55, 4, 7, 12, 20, 50, 450],\r\n strength: [1, 0.98, 0.95, 0.85, 0.8, 0.725, 0.6, 0.4, 0.25, 0.1, 0.025],\r\n hiddenThree: [1e15, 1e15, 1e15, 1e8, 1e7, 999999, 88888, 7777, 666, 55, 4, 3],//so that I realize default cap is 1e15--sxy\r\n hiddenSix: [1, 1, 1, 1, 1, 1, 0.99, 0.96, 0.9, 0.7, 0.4, 0.1],\r\n hiddenEight: [1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 6, 9]\r\n },\r\n compGlyphs: {\r\n level: [1, 0.99, 0.95, 0.9, 0.8, 0.75, 0.4, 0.4, 0.25, 0.2, 0.15, 0.05],\r\n rarity: [1, 0.99, 0.975, 0.95, 0.9, 0.8, 0.8, 0.5, 0.5, 0.4, 0.2, 0.1],//below 0.7 will freeze the game, investigating--sxy\r\n hiddenFour: [0, 0, 0, 0, 1, 1, 2, 2, 3, 4, 6, 8],\r\n hiddenSeven: [false, false, false, false, false, false, false, true, true, true, true, true] // Dumb, i know, but atleast its clearly defined HERE and not around the place\r\n },\r\n tickExtension: [1, 2.5, 10, 40, 220, 950, 3150, 9000, 25000, 100000, 5e5, 1e7, 1e12], //these are inverse powers, so 10 actually means ^(1/10), 1000 actually means ^(1/1000), etc\r\n atomDilution: [1, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.35, 0.3, 0.275, 0.25, 0.2],\r\n toD: {\r\n power: [1, 0.65, 0.33, 0.19, 0.1, 0.045, 0.02, 0.006, 0.002, 0, 0],\r\n mult: [1, 1e-2, 1e-8, new Decimal(1e-22), new Decimal(1e-65), new Decimal(1e-185), new Decimal(1e-300), new Decimal(\"1e-1500\"), new Decimal(\"1e-7777\"), new Decimal(\"1e-98765\"), 0, 0],\r\n hiddenFive: [1, 1, 1, 1, 1, 3, 12, 50, 500, 6000, 15000, 1e5],\r\n hiddenEight: [1, 1, 1, 1, 1, 1, 1, 1, 8, 75, 1050, 11752]\r\n },\r\n repSing: {\r\n rep: [1, 0.25, 0.05, 0.01, 0.004, 0.00065, 0.0001, 1e-5, 1e-8, 1e-20, 0, 0],\r\n sing: [1, 0.9, 0.75, 0.5, 0.325, 0.15, 0.01, 0.001, 1e-4, 1e-5, 1e-8, 0],\r\n dm: [1, 0.75, 0.5, 0.325, 0.15, 0.075, 0.001, 1e-4, 1e-6, 0, 0, 0],//Laitela is a place where vue display and actuall game number won't match. So like each dimensions' upgrade effect are in fact not exist. Better just dm pow.--sxy\r\n presGain: [1, 0.95, 0.9, 0.85, 0.8, 0.75, 0.7, 0.65, 0.6, 0.5, 0.4, 0.25],\r\n hiddenFour: [false, false, false, false, false, true, true, true, true, true, true, true]\r\n },\r\n soF: {\r\n ttcost: [1, 1e10,1e20, 1e50, 1e75,1e100,1e125, 1e150, 1e200, 1e233, 1e267, 1e299], // wait did TT cost number or decimal?--sxy\r\n ttgen: [false, true, true, true, true, true, true, true, true, true, true, true], // the dumbest thing ive ever put in code but again, atleast its defined here so i dont have someone bitch about this later\r\n tdpow: [1, 0.7, 0.3, 0.08, 0.01, 3e-3, 1e-5, 1e-8, 1e-15, 1e-33, 1e-100, 0],\r\n hiddenThree: [false, false, false, false, true, true, true, true, true, true, true, true],\r\n hiddenEight: [false, false, false, false, false, false, false, false, true, true, true, true]\r\n },\r\n alchemyNormalcy: [1,1,1,1,1,1,1,1,1,1,1,1],\r\n secondaryRejection: [1,1,1,1,1,1,1,1,1,1,1,1],\r\n}","import { DC } from \"../../constants\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\nimport { corruptionPenalties } from \"../mending/corruption\";\r\n\r\n// See index.js for documentation\r\nexport const EP = {\r\n total: {\r\n name: \"Total EP Gained on Eternity\",\r\n displayOverride: () => (Player.canEternity\r\n ? format(gainedEternityPoints(), 2, 2)\r\n : \"Cannot Eternity\"),\r\n // This effectively hides everything if the player can't actually gain any\r\n multValue: () => (Player.canEternity ? gainedEternityPoints() : 1),\r\n isActive: () => PlayerProgress.eternityUnlocked() || Player.canEternity,\r\n dilationEffect: () => (Laitela.isRunning ? 0.75 * Effects.product(DilationUpgrade.dilationPenalty) : 1),\r\n isDilated: true,\r\n overlay: [\"Δ\", \"\"],\r\n },\r\n base: {\r\n name: \"Base Eternity Points\",\r\n isBase: true,\r\n fakeValue: DC.D5,\r\n multValue: () => DC.D5.pow(player.records.thisEternity.maxIP.plus(\r\n gainedInfinityPoints()).log10() / (308 - PelleRifts.recursion.effectValue.toNumber()) - 0.7),\r\n isActive: () => PlayerProgress.eternityUnlocked(),\r\n icon: MultiplierTabIcons.CONVERT_FROM(\"IP\"),\r\n },\r\n IP: {\r\n name: \"Eternity Points from Infinity Points\",\r\n displayOverride: () => `${format(player.records.thisEternity.maxIP.plus(gainedInfinityPoints()), 2, 2)} IP`,\r\n // Just needs to match the value in base and be larger than 1\r\n multValue: DC.D5,\r\n isActive: () => PlayerProgress.eternityUnlocked(),\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"infinity\"),\r\n },\r\n divisor: {\r\n name: \"Pelle - EP Formula Improvement\",\r\n displayOverride: () => {\r\n const div = 308 - PelleRifts.recursion.effectValue.toNumber();\r\n return `log(IP)/${formatInt(308)} ➜ log(IP)/${format(div, 2, 2)}`;\r\n },\r\n powValue: () => 308 / (308 - PelleRifts.recursion.effectValue.toNumber()),\r\n isActive: () => PelleRifts.recursion.canBeApplied,\r\n icon: MultiplierTabIcons.DIVISOR(\"EP\"),\r\n },\r\n eternityUpgrade: {\r\n name: () => `Eternity Upgrade - Repeatable ${formatX(5)} EP`,\r\n multValue: () => EternityUpgrade.epMult.effectOrDefault(1),\r\n isActive: () => PlayerProgress.eternityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n timeStudy: {\r\n name: \"Time Studies\",\r\n multValue: () => DC.D1.timesEffectsOf(\r\n TimeStudy(61),\r\n TimeStudy(121),\r\n TimeStudy(122),\r\n TimeStudy(123),\r\n ),\r\n isActive: () => PlayerProgress.eternityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.TIME_STUDY,\r\n },\r\n glyph: {\r\n name: \"Equipped Glyphs\",\r\n multValue: () => DC.D1\r\n .timesEffectsOf(Pelle.isDoomed ? null : GlyphEffect.epMult)\r\n .times(Pelle.specialGlyphEffect.time),\r\n powValue: () => (GlyphAlteration.isAdded(\"time\") ? getSecondaryGlyphEffect(\"timeEP\") : 1),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n realityUpgrade: {\r\n name: \"Reality Upgrade - The Knowing Existence\",\r\n multValue: () => RealityUpgrade(12).effectOrDefault(1),\r\n isActive: () => RealityUpgrade(12).canBeApplied && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n pelle: {\r\n name: \"Pelle Strike - Vacuum Rift\",\r\n multValue: () => PelleRifts.vacuum.milestones[2].effectOrDefault(1),\r\n isActive: () => PelleRifts.vacuum.milestones[2].canBeApplied,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n mendingMilestones: {\r\n name: \"Mending Milestone 1\",\r\n multValue: 1e5,\r\n isActive: () => PlayerProgress.mendingUnlocked(),\r\n icon: MultiplierTabIcons.MENDINGMILESTONE,\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: () => ShopPurchase.EPPurchases.currentMult,\r\n isActive: () => ShopPurchaseData.totalSTD > 0,\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n\r\n nerfTeresa: {\r\n name: \"Teresa's Reality\",\r\n powValue: () => 0.55,\r\n isActive: () => Teresa.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_TERESA,\r\n },\r\n nerfV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.5,\r\n isActive: () => V.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfCorruptions: {\r\n name: \"Prestige Limits Hostility\",\r\n powValue: () => corruptionPenalties.prestigeLimits[player.mending.corruption[0]],\r\n isActive: () => (player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[0] > 0),\r\n icon: MultiplierTabIcons.CORRUPTION,\r\n },\r\n nerfSHardV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.000001,\r\n isActive: () => V.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfSoftcap: {\r\n name: \"Eternity Point Softcap\",\r\n powValue: () => (gainedEternityPoints().log10() / gainedEternityPoints(true).log10()),\r\n isActive: () => (gainedEternityPoints().gte(Decimal.pow10(1e18))),\r\n icon: MultiplierTabIcons.SOFTCAP(\"eternity\"),\r\n }\r\n};\r\n","import { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const galaxies = {\r\n // Note: none of the galaxy types use the global multiplier that applies to all of them within multValue, which\r\n // very slightly reduces performance impact and is okay because it's applied consistently\r\n antimatter: {\r\n name: \"Antimatter Galaxies\",\r\n displayOverride: () => {\r\n const num = player.galaxies + GalaxyGenerator.galaxies;\r\n const mult = MultiplierTabHelper.globalGalaxyMult();\r\n return `${formatInt(num)}, ${formatX(mult, 2, 2)} strength`;\r\n },\r\n multValue: () => Decimal.pow10(player.galaxies + GalaxyGenerator.galaxies),\r\n isActive: true,\r\n icon: MultiplierTabIcons.ANTIMATTER,\r\n },\r\n replicanti: {\r\n name: \"Replicanti Galaxies\",\r\n displayOverride: () => {\r\n const num = Replicanti.galaxies.total;\r\n let rg = Replicanti.galaxies.bought;\r\n rg *= (1 + Effects.sum(TimeStudy(132), TimeStudy(133)));\r\n rg += Replicanti.galaxies.extra;\r\n rg += Math.min(Replicanti.galaxies.bought, ReplicantiUpgrade.galaxies.value) * ((EternityChallenge(8).completions >= 1)? EternityChallenge(8).reward.effectValue : 1);\r\n const mult = rg / Math.clampMin(num, 1) * MultiplierTabHelper.globalGalaxyMult();\r\n return `${formatInt(num)}, ${formatX(mult, 2, 2)} strength`;\r\n },\r\n multValue: () => {\r\n let rg = Replicanti.galaxies.bought;\r\n rg *= (1 + Effects.sum(TimeStudy(132), TimeStudy(133)));\r\n rg += Replicanti.galaxies.extra;\r\n rg += Math.min(Replicanti.galaxies.bought, ReplicantiUpgrade.galaxies.value) * ((EternityChallenge(8).completions >= 1)? EternityChallenge(8).reward.effectValue : 1);\r\n return Decimal.pow10(rg);\r\n },\r\n isActive: () => Replicanti.areUnlocked,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"replication\"),\r\n },\r\n tachyon: {\r\n name: \"Tachyon Galaxies\",\r\n displayOverride: () => {\r\n const num = player.dilation.totalTachyonGalaxies;\r\n const mult = MultiplierTabHelper.globalGalaxyMult() *\r\n (1 + Math.max(0, Replicanti.amount.log10() / 1e6) * AlchemyResource.alternation.effectValue);\r\n return `${formatInt(num)}, ${formatX(mult, 2, 2)} strength`;\r\n },\r\n multValue: () => {\r\n const num = player.dilation.totalTachyonGalaxies;\r\n const mult = 1 + Math.max(0, Replicanti.amount.log10() / 1e6) * AlchemyResource.alternation.effectValue;\r\n return Decimal.pow10(num * mult);\r\n },\r\n isActive: () => player.dilation.totalTachyonGalaxies > 0,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"dilation\"),\r\n },\r\n nerfPelle: {\r\n name: \"Doomed Reality\",\r\n displayOverride: () => `All Galaxy strength /${formatInt(2)}`,\r\n powValue: 0.5,\r\n isActive: () => Pelle.isDoomed,\r\n icon: MultiplierTabIcons.PELLE,\r\n }\r\n};\r\n","import { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\nimport { corruptionPenalties } from \"../mending/corruption\";\r\n\r\n// See index.js for documentation\r\nexport const gamespeed = {\r\n total: {\r\n name: \"Game speed\",\r\n displayOverride: () => {\r\n if (Enslaved.isStoringRealTime) return `Set to ${format(0)} (storing real time)`;\r\n if (EternityChallenge(12).isRunning) return `${formatX(1)}/${formatInt(1000)} (fixed)`;\r\n const curr = getGameSpeedupFactor();\r\n\r\n const bh = MultiplierTabHelper.blackHoleSpeeds();\r\n const currBH = bh.current;\r\n const avgBH = bh.average;\r\n\r\n const avgSpeed = Enslaved.isAutoReleasing\r\n ? getGameSpeedupForDisplay()\r\n : curr.div(currBH).times(avgBH);\r\n const avgString = ` (current) | ${formatX(avgSpeed, 2, 2)} (average)`;\r\n return `${formatX(curr, 2, 2)}${curr === avgSpeed ? \"\" : avgString}`;\r\n },\r\n multValue: () => getGameSpeedupForDisplay(),\r\n isActive: () => PlayerProgress.seenAlteredSpeed(),\r\n dilationEffect: () => (Effarig.isRunning ? Effarig.multDilation : 1),\r\n isDilated: true,\r\n overlay: [\"Δ\", ``, ``],\r\n },\r\n glyph: {\r\n name: \"Equipped Glyphs\",\r\n multValue: () => getAdjustedGlyphEffect(\"timespeed\"),\r\n powValue: () => getAdjustedGlyphEffect(\"effarigblackhole\"),\r\n isActive: () => PlayerProgress.realityUnlocked() && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n blackHoleCurr: {\r\n name: \"Current Black Hole Speedup\",\r\n multValue: () => MultiplierTabHelper.blackHoleSpeeds().current,\r\n isActive: () => BlackHole(1).isUnlocked && !BlackHoles.arePaused && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.BLACK_HOLE,\r\n },\r\n blackHoleAvg: {\r\n name: \"Average Black Hole Speedup\",\r\n multValue: () => MultiplierTabHelper.blackHoleSpeeds().average,\r\n isActive: () => BlackHole(1).isUnlocked && !BlackHoles.arePaused && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.BLACK_HOLE,\r\n },\r\n achievementMult: {\r\n name: \"30 V-Achievement Milestone - Achievement Multiplier\",\r\n multValue: () => Decimal.min(1e300, Decimal.pow(VUnlocks.achievementBH.effectOrDefault(1),\r\n BlackHoles.list.countWhere(bh => bh.isUnlocked))),\r\n isActive: () => !BlackHoles.arePaused && VUnlocks.achievementBH.canBeApplied && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n pulsing: {\r\n name: \"Auto-Discharging Stored Time\",\r\n multValue: () => (Enslaved.isAutoReleasing\r\n ? Decimal.max(Enslaved.autoReleaseSpeed.div(getGameSpeedupFactor()), 1)\r\n : getGameSpeedupFactor()),\r\n isActive: () => Enslaved.canRelease() && Enslaved.isAutoReleasing && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.BH_PULSE,\r\n },\r\n singularity: {\r\n name: \"Singularity Milestone - Game speed based on Singularities\",\r\n multValue: () => SingularityMilestone.gamespeedFromSingularities.effectOrDefault(1),\r\n isActive: () => SingularityMilestone.gamespeedFromSingularities.canBeApplied && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.SINGULARITY,\r\n },\r\n pelle: {\r\n name: \"Pelle Upgrade - Repeatable Game speed\",\r\n multValue: () => PelleUpgrade.timeSpeedMult.effectValue.toNumber(),\r\n isActive: () => Pelle.isDoomed && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n\r\n ec12: {\r\n name: \"Eternity Challenge 12\",\r\n multValue: () => new Decimal(0.001).div(getGameSpeedupForDisplay()),\r\n isActive: () => EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.CHALLENGE(\"eternity\"),\r\n },\r\n chargingBH: {\r\n name: \"Black Hole Charging\",\r\n // The 0 in multValue is irrelevant; if this upgrade isn't available, the subtab is hidden by 1x total effect\r\n multValue: () => (Ra.unlocks.autoPulseTime.canBeApplied ? 0.01 : 0),\r\n isActive: () => Enslaved.isStoringGameTime,\r\n icon: MultiplierTabIcons.BLACK_HOLE,\r\n },\r\n invertedBH: {\r\n name: \"Inverted Black Hole\",\r\n multValue: () => player.blackHoleNegative,\r\n isActive: () => BlackHoles.areNegative,\r\n icon: MultiplierTabIcons.CHALLENGE(\"eternity\"),\r\n },\r\n nerfLaitela: {\r\n name: \"Lai'tela's Reality\",\r\n powValue: () => Decimal.clampMax(Time.thisRealityRealTime.totalMinutes.div(10), 1),\r\n isActive: () => Laitela.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_LAITELA,\r\n },\r\n expoBlackHoles: {\r\n name: \"Black Hole 3\",\r\n powValue: () => ExpoBlackHole(1).power,\r\n isActive: () => ExpoBlackHole(1).isUnlocked,\r\n icon: MultiplierTabIcons.BLACK_HOLE,\r\n },\r\n CorruptionUpg: {\r\n name: \"Hostility Upgrade - Spacetime Distortion\",\r\n multValue: () => Decimal.pow10(Math.pow(1 + CorruptionData.corruptionChallenge.recordScore, 1/1.48)),\r\n isActive: () => player.mending.corruptionChallenge.corruptedMend ? Decimal.pow10(Math.pow(1 + player.mending.corruptionChallenge.recordScore, 0.25)) : Decimal.pow10(Math.pow(1 + player.mending.corruptionChallenge.recordScore, 1/1.48)),\r\n icon: MultiplierTabIcons.UPGRADE(\"corruption\")\r\n },\r\n nerfCorruptions: {\r\n name: \"Time Compression Hostility - Power Value\",\r\n powValue: () => corruptionPenalties.timeCompression.power[player.mending.corruption[1]],\r\n isActive: () => (player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[1] > 0),\r\n icon: MultiplierTabIcons.CORRUPTION,\r\n },\r\n nerfCorruptions2: {\r\n name: \"Time Compression Hostility - Mult Value\",\r\n multValue: () => corruptionPenalties.timeCompression.mult[player.mending.corruption[1]],\r\n isActive: () => (player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[1] > 0),\r\n icon: MultiplierTabIcons.CORRUPTION,\r\n },\r\n nerfSoftcap: {\r\n name: \"Game Speed Softcap\",\r\n powValue: () => (getGameSpeedupFactor().log10() / getGameSpeedupFactor().div(1e300).pow(1 / 0.4321).times(1e300).log10()),\r\n isActive: () => getGameSpeedupFactor().gte(1e300),\r\n icon: MultiplierTabIcons.SOFTCAP(\"reality\")\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nimport { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const general = {\r\n achievement: {\r\n name: (ach, dim) => (dim?.length === 2\r\n ? `Achievement ${ach} (${dim})`\r\n : `Achievement ${ach}`),\r\n multValue: (ach, dim) => {\r\n // There is also a buy10 effect, but we don't track that in the multiplier tab\r\n if (ach === 141) return Achievement(141).canBeApplied ? Achievement(141).effects.ipGain.effectOrDefault(1) : 1;\r\n if (ach === 183) return 1;\r\n if (!dim) return Achievement(ach).canBeApplied ? Achievement(ach).effectOrDefault(1) : 1;\r\n\r\n if (dim?.length === 2) {\r\n let totalEffect = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(dim); tier++) {\r\n let singleEffect;\r\n if (ach === 43) singleEffect = Achievement(43).canBeApplied ? (1 + tier / 100) : 1;\r\n else singleEffect = (MultiplierTabHelper.achievementDimCheck(ach, `${dim}${tier}`) &&\r\n Achievement(ach).canBeApplied) ? Achievement(ach).effectOrDefault(1) : 1;\r\n totalEffect = totalEffect.times(singleEffect);\r\n }\r\n return totalEffect;\r\n }\r\n\r\n if (ach === 43) return Achievement(43).canBeApplied ? (1 + Number(dim.charAt(2)) / 100) : 1;\r\n return (MultiplierTabHelper.achievementDimCheck(ach, dim) && Achievement(ach).canBeApplied)\r\n ? Achievement(ach).effectOrDefault(1) : 1;\r\n },\r\n // 183 is the only time a power effect is in an Achievement, so we special-case it here and return a x1 multiplier\r\n powValue: ach => (ach === 183 ? Achievement(183).effectOrDefault(1) : 1),\r\n isActive: ach => Achievement(ach).canBeApplied,\r\n icon: ach => {\r\n const base = MultiplierTabIcons.ACHIEVEMENT;\r\n return {\r\n color: base.color,\r\n symbol: `${base.symbol}${ach}`,\r\n };\r\n },\r\n },\r\n timeStudy: {\r\n name: (ts, dim) => (dim?.length === 2\r\n ? `Time Study ${ts} (${dim})`\r\n : `Time Study ${ts}`),\r\n multValue: (ts, dim) => {\r\n // This is a special case for the passive path RG study, as its effect is 0.4 (for galaxy power) but\r\n // in the multiplier tab we only reference its replicanti speed value (which is 3)\r\n if (ts === 132) return TimeStudy(ts).canBeApplied ? 3 : 1;\r\n\r\n if (!dim) return TimeStudy(ts).canBeApplied ? TimeStudy(ts).effectOrDefault(1) : 1;\r\n if (dim?.length === 2) {\r\n let totalEffect = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(dim); tier++) {\r\n totalEffect = totalEffect.times((MultiplierTabHelper.timeStudyDimCheck(ts, `${dim}${tier}`) &&\r\n TimeStudy(ts).isBought) ? TimeStudy(ts).effectOrDefault(1) : 1);\r\n }\r\n return totalEffect;\r\n }\r\n // The new Decimal() wrapper is necessary because, for some inexplicable reason, replicanti becomes\r\n // reactive through TS101 if that isn't there\r\n return (MultiplierTabHelper.timeStudyDimCheck(ts, dim) && TimeStudy(ts).isBought)\r\n ? new Decimal(TimeStudy(ts).effectOrDefault(1)) : 1;\r\n },\r\n isActive: ts => TimeStudy(ts).isBought,\r\n icon: ts => {\r\n const base = MultiplierTabIcons.TIME_STUDY;\r\n return {\r\n color: base.color,\r\n symbol: `${base.symbol}${ts}`,\r\n };\r\n },\r\n },\r\n infinityChallenge: {\r\n name: ic => `Infinity Challenge ${ic}`,\r\n displayOverride: ic => (ic === 4 ? formatPow(InfinityChallenge(4).reward.effectValue, 0, 3) : \"\"),\r\n multValue: (ic, dim) => {\r\n // We cheat here by actually giving IC4 a multiplier of a value equal to its effect on the final\r\n // value in order to represent its proportion accurately. It's hidden by displayOverride\r\n if (ic === 4) {\r\n const ic4Pow = InfinityChallenge(4).reward.effectValue;\r\n const mults = AntimatterDimensions.all.map(ad => ad.multiplier.pow((ic4Pow - 1) / ic4Pow));\r\n if (dim?.length === 2) return mults.reduce((x, y) => x.times(y), DC.D1);\r\n return mults[Number(dim.charAt(2)) - 1];\r\n }\r\n\r\n if (dim?.length === 2) {\r\n let totalEffect = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(dim); tier++) {\r\n totalEffect = totalEffect.times((MultiplierTabHelper.ICDimCheck(ic, `${dim}${tier}`) &&\r\n InfinityChallenge(ic).isCompleted) ? InfinityChallenge(ic).reward.effectOrDefault(1) : 1);\r\n }\r\n return totalEffect;\r\n }\r\n const num = Number(dim.charAt(2));\r\n if (ic === 8) return (num > 1 && num < 8) ? InfinityChallenge(ic).reward.effectValue : DC.D1;\r\n return InfinityChallenge(ic).reward.effectValue;\r\n },\r\n isActive: ic => InfinityChallenge(ic).isCompleted,\r\n icon: ic => {\r\n const base = MultiplierTabIcons.CHALLENGE(\"infinity\");\r\n return {\r\n color: base.color,\r\n symbol: `${base.symbol}${ic}`,\r\n };\r\n },\r\n },\r\n eternityChallenge: {\r\n name: ec => `Eternity Challenge ${ec}`,\r\n multValue: (ec, dim) => {\r\n if (dim?.length === 2) {\r\n let totalEffect = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(dim); tier++) {\r\n totalEffect = totalEffect.times(\r\n (MultiplierTabHelper.ECDimCheck(ec, `${dim}${tier}`) && EternityChallenge(ec).reward.canBeApplied)\r\n ? EternityChallenge(ec).reward.effectOrDefault(1).clampMin(1)\r\n : 1);\r\n }\r\n return totalEffect;\r\n }\r\n if (ec === 2) return dim === \"ID1\" ? EternityChallenge(ec).reward.effectValue : DC.D1;\r\n return EternityChallenge(ec).reward.effectOrDefault(1);\r\n },\r\n isActive: ec => EternityChallenge(ec).reward.canBeApplied,\r\n icon: ec => {\r\n const base = MultiplierTabIcons.CHALLENGE(\"eternity\");\r\n return {\r\n color: base.color,\r\n symbol: `${base.symbol}${ec}`,\r\n };\r\n },\r\n },\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const infinities = {\r\n total: {\r\n name: \"Infinities gained per Crunch\",\r\n isBase: true,\r\n multValue: () => gainedInfinities(),\r\n // The earliest sources of infinity multipliers are ach87 and TS32, which may happen in either order\r\n isActive: () => (Achievement(87).isUnlocked || PlayerProgress.eternityUnlocked()) &&\r\n !EternityChallenge(4).isRunning && !Pelle.isDoomed,\r\n overlay: [\"∞\", \"\"],\r\n },\r\n achievement: {\r\n name: \"Achievements\",\r\n multValue: () => DC.D1.timesEffectsOf(\r\n Achievement(87),\r\n Achievement(164)\r\n ),\r\n isActive: () => Achievement(87).isUnlocked,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n timeStudy: {\r\n name: \"Time Study 32\",\r\n multValue: () => TimeStudy(32).effectOrDefault(1),\r\n isActive: () => TimeStudy(32).isBought,\r\n icon: MultiplierTabIcons.TIME_STUDY,\r\n },\r\n amplifierInf: {\r\n name: \"Reality Upgrade - Boundless Amplifier\",\r\n multValue: () => DC.D1.timesEffectsOf(RealityUpgrade(5)),\r\n isActive: () => PlayerProgress.realityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n realityUpgrades: {\r\n name: \"Reality Upgrade - Innumerably Construct\",\r\n multValue: () => DC.D1.timesEffectsOf(RealityUpgrade(7)),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n glyph: {\r\n name: \"Equipped Glyphs\",\r\n multValue: () => getAdjustedGlyphEffect(\"infinityinfmult\"),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n ra: {\r\n name: \"Ra Upgrade - Multiplier based on TT\",\r\n multValue: () => Ra.unlocks.continuousTTBoost.effects.infinity.effectOrDefault(1),\r\n isActive: () => Ra.unlocks.continuousTTBoost.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n singularity: {\r\n name: \"Singularity Milestone - Power from Singularities\",\r\n powValue: () => SingularityMilestone.infinitiedPow.effectOrDefault(1),\r\n isActive: () => SingularityMilestone.infinitiedPow.canBeApplied,\r\n icon: MultiplierTabIcons.SINGULARITY,\r\n },\r\n teresa90: {\r\n name: \"Teresa Level 90\",\r\n powValue: () => Math.pow((Math.log10(Currency.realities.value)/20), 1.111),\r\n isActive: () => Ra.unlocks.realitiesBoostInfinityAndEternityProduction.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { PlayerProgress } from \"../../player-progress\";\r\n\r\nimport { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const ID = {\r\n total: {\r\n name: dim => {\r\n if (dim) return `ID ${dim} Multiplier`;\r\n if (EternityChallenge(7).isRunning) return \"AD7 Production\";\r\n return \"Infinity Power Production\";\r\n },\r\n displayOverride: dim => (dim\r\n ? formatX(InfinityDimension(dim).multiplier, 2)\r\n : `${format(InfinityDimension(1).productionPerSecond, 2)}/sec`\r\n ),\r\n multValue: dim => (dim\r\n ? InfinityDimension(dim).multiplier\r\n : InfinityDimensions.all\r\n .filter(id => id.isProducing)\r\n .map(id => id.multiplier)\r\n .reduce((x, y) => x.times(y), DC.D1)),\r\n isActive: dim => (dim\r\n ? InfinityDimension(dim).isProducing\r\n : (PlayerProgress.eternityUnlocked() || InfinityDimension(1).isProducing)),\r\n dilationEffect: () => {\r\n const baseEff = player.dilation.active\r\n ? 0.75 * Effects.product(DilationUpgrade.dilationPenalty)\r\n : 1;\r\n return baseEff * (Effarig.isRunning ? Effarig.multDilation : 1);\r\n },\r\n isDilated: true,\r\n overlay: [\"∞\", \"\"],\r\n icon: dim => MultiplierTabIcons.DIMENSION(\"ID\", dim),\r\n },\r\n purchase: {\r\n name: dim => (dim ? `Purchased ID ${dim}` : \"Purchases\"),\r\n multValue: dim => {\r\n const getMult = id => Decimal.pow(InfinityDimension(id).powerMultiplier,\r\n Math.floor(InfinityDimension(id).baseAmount / 10));\r\n if (dim) return getMult(dim);\r\n return InfinityDimensions.all\r\n .filter(id => id.isProducing)\r\n .map(id => getMult(id.tier))\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n },\r\n isActive: () => !EternityChallenge(2).isRunning && !EternityChallenge(10).isRunning,\r\n icon: dim => MultiplierTabIcons.PURCHASE(\"ID\", dim),\r\n },\r\n highestDim: {\r\n name: () => `Amount of highest Dimension`,\r\n displayOverride: () => {\r\n const dim = MultiplierTabHelper.activeDimCount(\"ID\");\r\n return `ID ${dim}, ${format(InfinityDimension(dim).amount, 2)}`;\r\n },\r\n multValue: () => InfinityDimension(MultiplierTabHelper.activeDimCount(\"ID\")).amount,\r\n isActive: () => InfinityDimension(1).isProducing,\r\n icon: MultiplierTabIcons.DIMENSION(\"ID\"),\r\n },\r\n\r\n basePurchase: {\r\n name: \"Base purchases\",\r\n multValue: dim => {\r\n const getMult = id => {\r\n const purchases = id === 8\r\n ? Math.floor(InfinityDimension(id).baseAmount / 10)\r\n : Math.min(InfinityDimensions.HARDCAP_PURCHASES, Math.floor(InfinityDimension(id).baseAmount / 10));\r\n const baseMult = InfinityDimension(id)._powerMultiplier;\r\n return Decimal.pow(baseMult, purchases);\r\n };\r\n if (dim) return getMult(dim);\r\n return InfinityDimensions.all\r\n .filter(id => id.isProducing)\r\n .map(id => getMult(id.tier))\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n },\r\n isActive: true,\r\n icon: MultiplierTabIcons.PURCHASE(\"baseID\"),\r\n },\r\n tesseractPurchase: {\r\n name: \"Tesseracts\",\r\n multValue: dim => {\r\n const getMult = id => {\r\n if (id === 8) return DC.D1;\r\n const purchases = Math.floor(InfinityDimension(id).baseAmount / 10);\r\n return Decimal.pow(InfinityDimension(id)._powerMultiplier,\r\n Math.clampMin(purchases - InfinityDimensions.HARDCAP_PURCHASES, 0));\r\n };\r\n if (dim) return getMult(dim);\r\n return InfinityDimensions.all\r\n .filter(id => id.isProducing)\r\n .map(id => getMult(id.tier))\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n },\r\n isActive: () => Tesseracts.bought > 0,\r\n icon: MultiplierTabIcons.PURCHASE(\"tesseractID\"),\r\n },\r\n infinityGlyphSacrifice: {\r\n name: \"Infinity Glyph sacrifice\",\r\n multValue: () => (InfinityDimension(8).isProducing\r\n ? Decimal.pow(GlyphSacrifice.infinity.effectValue, Math.floor(Math.min(InfinityDimension(8).baseAmount , 1e25) / 10))\r\n : DC.D1),\r\n isActive: () => GlyphSacrifice.infinity.effectValue.gt(1),\r\n icon: MultiplierTabIcons.SACRIFICE(\"infinity\"),\r\n },\r\n powPurchase: {\r\n name: \"Imaginary Upgrade - Recollection of Intrusion\",\r\n powValue: () => ImaginaryUpgrade(14).effectOrDefault(1),\r\n isActive: () => ImaginaryUpgrade(14).canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"imaginary\"),\r\n },\r\n\r\n replicanti: {\r\n name: \"Replicanti Multiplier\",\r\n multValue: dim => Decimal.pow(replicantiMult(), dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => Replicanti.areUnlocked,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"replication\"),\r\n },\r\n achievementMult: {\r\n name: \"Achievement Multiplier\",\r\n multValue: dim => Decimal.pow(Achievements.power, dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => Achievement(75).canBeApplied && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n achievement: {\r\n // Note: This only applies to ID1\r\n name: () => \"Achievement 94\",\r\n multValue: dim => ((dim ?? 1) === 1 ? Achievement(94).effectOrDefault(1) : 1),\r\n isActive: () => Achievement(94).canBeApplied,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n timeStudy: {\r\n name: dim => (dim ? `Time Studies (ID ${dim})` : \"Time Studies\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n TimeStudy(82),\r\n TimeStudy(92),\r\n TimeStudy(162),\r\n TimeStudy(312),\r\n );\r\n if (dim) return dim === 4 ? allMult.times(TimeStudy(72).effectOrDefault(1)) : allMult;\r\n const maxActiveDim = MultiplierTabHelper.activeDimCount(\"ID\");\r\n return Decimal.pow(allMult, maxActiveDim).times(maxActiveDim >= 4 ? TimeStudy(72).effectOrDefault(1) : DC.D1);\r\n },\r\n isActive: () => PlayerProgress.eternityUnlocked(),\r\n icon: MultiplierTabIcons.TIME_STUDY,\r\n },\r\n eternityUpgrade: {\r\n name: \"Eternity Upgrades\",\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n EternityUpgrade.idMultEP,\r\n EternityUpgrade.idMultEternities,\r\n EternityUpgrade.idMultICRecords,\r\n );\r\n return Decimal.pow(allMult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\"));\r\n },\r\n isActive: () => PlayerProgress.eternityUnlocked(),\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n\r\n eu1: {\r\n name: () => \"Unspent Eternity Points\",\r\n multValue: dim => Decimal.pow(EternityUpgrade.idMultEP.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => EternityUpgrade.idMultEP.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n eu2: {\r\n name: () => \"Eternity Count\",\r\n multValue: dim => Decimal.pow(EternityUpgrade.idMultEternities.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => EternityUpgrade.idMultEternities.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n eu3: {\r\n name: () => \"Infinity Challenge Records\",\r\n multValue: dim => Decimal.pow(EternityUpgrade.idMultICRecords.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => EternityUpgrade.idMultICRecords.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n\r\n infinityChallenge: {\r\n name: \"Infinity Challenges\",\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n InfinityChallenge(1).reward,\r\n InfinityChallenge(6).reward,\r\n );\r\n return Decimal.pow(allMult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\"));\r\n },\r\n isActive: () => InfinityChallenge(1).isCompleted,\r\n icon: MultiplierTabIcons.CHALLENGE(\"infinity\"),\r\n },\r\n eternityChallenge: {\r\n name: dim => (dim ? `Eternity Challenges (ID ${dim})` : \" Eternity Challenges\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n EternityChallenge(4).reward,\r\n EternityChallenge(9).reward,\r\n ).times(EternityChallenge(7).isRunning ? Tickspeed.perSecond : DC.D1);\r\n if (dim) {\r\n if (dim === 1) return allMult.times(EternityChallenge(2).reward.effectOrDefault(1));\r\n return allMult;\r\n }\r\n const maxActiveDim = MultiplierTabHelper.activeDimCount(\"ID\");\r\n return Decimal.pow(allMult, maxActiveDim)\r\n .times(maxActiveDim >= 1 ? EternityChallenge(2).reward.effectOrDefault(1) : DC.D1);\r\n },\r\n isActive: () => EternityChallenge(2).completions > 0,\r\n icon: MultiplierTabIcons.CHALLENGE(\"eternity\"),\r\n },\r\n tickspeed: {\r\n name: () => \"Tickspeed (EC7)\",\r\n displayOverride: () => {\r\n const tickRate = Tickspeed.perSecond;\r\n const activeDims = MultiplierTabHelper.activeDimCount(\"ID\");\r\n const dimString = MultiplierTabHelper.pluralizeDimensions(activeDims);\r\n return `${format(tickRate, 2, 2)}/sec on ${formatInt(activeDims)} ${dimString}\r\n ➜ ${formatX(tickRate.pow(activeDims), 2, 2)}`;\r\n },\r\n multValue: () => Tickspeed.perSecond.pow(8),\r\n isActive: () => EternityChallenge(7).isRunning,\r\n icon: MultiplierTabIcons.TICKSPEED,\r\n },\r\n glyph: {\r\n name: \"Glyph Effects\",\r\n multValue: () => 1,\r\n powValue: () => getAdjustedGlyphEffect(\"infinitypow\") * getAdjustedGlyphEffect(\"effarigdimensions\"),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n alchemy: {\r\n name: \"Glyph Alchemy\",\r\n multValue: dim => Decimal.pow(AlchemyResource.dimensionality.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n powValue: () => AlchemyResource.infinity.effectOrDefault(1) * Ra.momentumValue,\r\n isActive: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied,\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n imaginaryUpgrade: {\r\n name: \"Imaginary Upgrade - Hyperbolic Apeirogon\",\r\n multValue: dim => Decimal.pow(ImaginaryUpgrade(8).effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => ImaginaryUpgrade(8).canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"imaginary\"),\r\n },\r\n pelle: {\r\n name: \"Pelle Rift Effects\",\r\n multValue: dim => {\r\n const mult = DC.D1.timesEffectsOf(PelleRifts.recursion.milestones[1]);\r\n const maxActiveDim = MultiplierTabHelper.activeDimCount(\"ID\");\r\n // This only affects ID1\r\n const decayMult = ((dim ? dim === 1 : maxActiveDim >= 1)\r\n ? PelleRifts.decay.milestones[0].effectOrDefault(1)\r\n : DC.D1);\r\n return Decimal.pow(mult, dim ? 1 : maxActiveDim).times(decayMult);\r\n },\r\n powValue: () => PelleRifts.paradox.effectOrDefault(DC.D1).toNumber(),\r\n isActive: () => Pelle.isDoomed,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: dim => Decimal.pow(ShopPurchase.allDimPurchases.currentMult,\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => ShopPurchaseData.totalSTD > 0,\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n\r\n powerConversion: {\r\n name: \"Infinity Power Conversion\",\r\n powValue: () => InfinityDimensions.powerConversionRate,\r\n isActive: () => Currency.infinityPower.value.gt(1) && !EternityChallenge(9).isRunning,\r\n icon: MultiplierTabIcons.IPOW_CONVERSION,\r\n },\r\n\r\n v50:{\r\n name: \"Ra Upgrade - The 5 V-achievement milestone affects ID and TD at a reduced rate\",\r\n powValue: () => Math.pow(VUnlocks.adPow.effectValue, 0.5),\r\n isActive: () => Ra.unlocks.vAchMilestone2AffectsIDsAndTDs.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_V\r\n },\r\n\r\n nerfV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.5,\r\n isActive: () => V.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfCursed: {\r\n name: \"Cursed Glyphs\",\r\n powValue: () => getAdjustedGlyphEffect(\"curseddimensions\"),\r\n isActive: () => getAdjustedGlyphEffect(\"curseddimensions\") !== 1,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"cursed\"),\r\n },\r\n nerfPelle: {\r\n name: \"Doomed Reality\",\r\n powValue: 0.5,\r\n isActive: () => PelleStrikes.powerGalaxies.hasStrike,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n nerfSoftcap: {\r\n name: \"Infinity Power Softcap\",\r\n powValue: () => 0.1,\r\n isActive: () => (Currency.infinityPower.value.log10() > 9e15),\r\n icon: MultiplierTabIcons.SOFTCAP(\"infinity\")\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { PlayerProgress } from \"../../player-progress\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\nimport { corruptionPenalties } from \"../mending/corruption\";\r\n\r\n// See index.js for documentation\r\nexport const IP = {\r\n total: {\r\n name: \"Total IP Gained on Infinity\",\r\n displayOverride: () => (Player.canCrunch\r\n ? format(gainedInfinityPoints(), 2, 2)\r\n : \"Cannot Crunch\"),\r\n // This effectively hides everything if the player can't actually gain any\r\n multValue: () => (Player.canCrunch ? gainedInfinityPoints() : 1),\r\n isActive: () => PlayerProgress.infinityUnlocked() || Player.canCrunch,\r\n dilationEffect: () => (Laitela.isRunning ? 0.75 * Effects.product(DilationUpgrade.dilationPenalty) : 1),\r\n isDilated: true,\r\n overlay: [\"∞\", \"\"],\r\n },\r\n base: {\r\n name: \"Base Infinity Points\",\r\n isBase: true,\r\n fakeValue: DC.D5,\r\n multValue: () => {\r\n const div = Effects.min(308, Achievement(103), TimeStudy(111));\r\n return Decimal.pow10(player.records.thisInfinity.maxAM.log10() / div - 0.75);\r\n },\r\n isActive: () => player.break,\r\n icon: MultiplierTabIcons.CONVERT_FROM(\"AM\"),\r\n },\r\n antimatter: {\r\n name: \"Infinity Points from Antimatter\",\r\n displayOverride: () => `${format(player.records.thisInfinity.maxAM, 2, 2)} AM`,\r\n // Just needs to match the value in base and be larger than 1\r\n multValue: DC.D5,\r\n isActive: () => player.break,\r\n icon: MultiplierTabIcons.ANTIMATTER,\r\n },\r\n divisor: {\r\n name: \"Formula Improvement\",\r\n displayOverride: () => {\r\n const div = Effects.min(308, Achievement(103), TimeStudy(111));\r\n return `log(AM)/${formatInt(308)} ➜ log(AM)/${format(div, 2, 1)}`;\r\n },\r\n powValue: () => 308 / Effects.min(308, Achievement(103), TimeStudy(111)),\r\n isActive: () => Achievement(103).canBeApplied || TimeStudy(111).isBought,\r\n icon: MultiplierTabIcons.DIVISOR(\"IP\"),\r\n },\r\n infinityUpgrade: {\r\n name: () => `Infinity Upgrade - Repeatable ${formatX(2)} IP`,\r\n multValue: () => InfinityUpgrade.ipMult.effectOrDefault(1),\r\n isActive: () => player.break && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"infinity\"),\r\n },\r\n achievement: {\r\n name: \"Achievements\",\r\n multValue: () => DC.D1.timesEffectsOf(\r\n Achievement(85),\r\n Achievement(93),\r\n Achievement(116),\r\n Achievement(125),\r\n Achievement(141).effects.ipGain,\r\n ),\r\n isActive: () => player.break && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n timeStudy: {\r\n name: \"Time Studies\",\r\n multValue: () => DC.D1.timesEffectsOf(\r\n TimeStudy(41),\r\n TimeStudy(51),\r\n TimeStudy(141),\r\n TimeStudy(142),\r\n TimeStudy(143),\r\n TimeStudy(305),\r\n ),\r\n isActive: () => player.break && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.TIME_STUDY,\r\n },\r\n dilationUpgrade: {\r\n name: \"Dilation Upgrade - IP multiplier based on DT\",\r\n multValue: () => DilationUpgrade.ipMultDT.effectOrDefault(1),\r\n isActive: () => DilationUpgrade.ipMultDT.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"dilation\"),\r\n },\r\n glyph: {\r\n name: \"Equipped Glyphs\",\r\n multValue: () => Pelle.specialGlyphEffect.infinity.times((Pelle.isDoomed&&!Ra.unlocks.unlockPelleGlyphEffects.isUnlocked) ? 1 : getAdjustedGlyphEffect(\"infinityIP\")),\r\n powValue: () => (GlyphAlteration.isAdded(\"infinity\") ? getSecondaryGlyphEffect(\"infinityIP\") : 1),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n alchemy: {\r\n name: \"Glyph Alchemy\",\r\n multValue: () => Replicanti.amount.powEffectOf(AlchemyResource.exponential),\r\n isActive: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied,\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n pelle: {\r\n name: \"Pelle Strike - Vacuum Rift\",\r\n multValue: () => DC.D1.timesEffectsOf(PelleRifts.vacuum),\r\n isActive: () => Pelle.isDoomed,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n mendingMilestones: {\r\n name: \"Mending Milestone 1\",\r\n multValue: 1e20,\r\n isActive: () => PlayerProgress.mendingUnlocked(),\r\n icon: MultiplierTabIcons.MENDINGMILESTONE,\r\n },\r\n ra: {\r\n name: \"Ra Memories\",\r\n powValue: () => (Decimal.log10(Currency.realityMachines.value.max(1)) / 100),\r\n isActive: () => Ra.unlocks.realityMachinesBoostIpAndEpGain.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: () => ShopPurchase.IPPurchases.currentMult,\r\n isActive: () => ShopPurchaseData.totalSTD > 0,\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n\r\n nerfTeresa: {\r\n name: \"Teresa's Reality\",\r\n powValue: () => 0.55,\r\n isActive: () => Teresa.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_TERESA,\r\n },\r\n nerfV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.5,\r\n isActive: () => V.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfCorruptions: {\r\n name: \"Prestige Limits Hostility\",\r\n powValue: () => corruptionPenalties.prestigeLimits[player.mending.corruption[0]],\r\n isActive: () => (player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[0] > 0),\r\n icon: MultiplierTabIcons.CORRUPTION,\r\n },\r\n nerfSoftcap: {\r\n name: \"Infinity Point Softcap\",\r\n powValue: () => (gainedInfinityPoints().log10() / gainedInfinityPoints(true).log10()),\r\n isActive: () => (gainedInfinityPoints(true).gte(DC.END)),\r\n icon: MultiplierTabIcons.SOFTCAP(\"infinity\")\r\n },\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const replicanti = {\r\n total: {\r\n name: \"Replicanti Speed\",\r\n multValue: () => totalReplicantiSpeedMult(Replicanti.amount.gt(replicantiCap())),\r\n isActive: () => PlayerProgress.eternityUnlocked(),\r\n overlay: [\"Ξ\"],\r\n },\r\n achievement: {\r\n name: \"Achievement 134\",\r\n // This is explicitly 2 in the replicanti code as well, inside of a replicanti amount check\r\n multValue: 2,\r\n isActive: () => Achievement(134).canBeApplied && Replicanti.amount.lte(replicantiCap()) && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n timeStudy: {\r\n name: \"Time Studies\",\r\n multValue: () => {\r\n const preReality = Effects.product(TimeStudy(62), TimeStudy(213));\r\n return preReality * (Perk.studyPassive.isBought && TimeStudy(132).isBought ? 3 : 1);\r\n },\r\n isActive: () => PlayerProgress.eternityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.TIME_STUDY,\r\n },\r\n glyph: {\r\n name: \"Glyph Effects\",\r\n multValue: () => {\r\n const baseEffect = (Pelle.isDoomed ? DC.D1 : getAdjustedGlyphEffect(\"replicationspeed\"))\r\n .times(Pelle.specialGlyphEffect.replication);\r\n const alteredEffect = Math.clampMin(\r\n Decimal.log10(Replicanti.amount) * getSecondaryGlyphEffect(\"replicationdtgain\"), 1);\r\n return GlyphAlteration.isAdded(\"replication\") ? baseEffect.times(alteredEffect) : baseEffect;\r\n },\r\n isActive: () => PlayerProgress.realityUnlocked() && (!Pelle.isDoomed || Pelle.specialGlyphEffect.replication > 1),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n amplifierRep: {\r\n name: \"Reality Upgrade - Replicative Amplifier\",\r\n multValue: () => RealityUpgrade(2).effectOrDefault(1),\r\n isActive: () => PlayerProgress.realityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n realityUpgrade1: {\r\n name: \"Reality Upgrade - Cosmically Duplicate\",\r\n multValue: () => RealityUpgrade(6).effectOrDefault(1),\r\n isActive: () => PlayerProgress.realityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n realityUpgrade2: {\r\n name: \"Reality Upgrade - Replicative Rapidity\",\r\n multValue: () => RealityUpgrade(23).effectOrDefault(1),\r\n isActive: () => PlayerProgress.realityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n alchemy: {\r\n name: \"Alchemy Resource - Replication\",\r\n multValue: () => AlchemyResource.replication.effectOrDefault(1),\r\n isActive: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n ra: {\r\n name: \"Ra Upgrade - Multiplier based on TT\",\r\n multValue: () => Ra.unlocks.continuousTTBoost.effects.replicanti.effectOrDefault(1),\r\n isActive: () => Ra.unlocks.continuousTTBoost.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n pelle: {\r\n name: \"Pelle Strike - Decay Rift\",\r\n multValue: () => PelleRifts.decay.effectValue,\r\n isActive: () => Pelle.isDoomed && PelleRifts.decay.effectValue.gt(1),\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n mendingMilestones: {\r\n name: \"Mending Milestone 1\",\r\n multValue: 1e3,\r\n isActive: () => PlayerProgress.mendingUnlocked(),\r\n icon: MultiplierTabIcons.MENDINGMILESTONE,\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: () => ShopPurchase.replicantiPurchases.currentMult,\r\n isActive: () => ShopPurchaseData.totalSTD > 0 && ShopPurchase.replicantiPurchases.currentMult > 1,\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n relicShardBoost: {\r\n name: \"Effarig Level 65\",\r\n multValue: () => Currency.relicShards.value.pow(0.6667).clampMin(1),\r\n isActive: () => Ra.unlocks.relicShardBoost.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { PlayerProgress } from \"../../player-progress\";\r\n\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const TP = {\r\n total: {\r\n name: \"Total Tachyon Particles\",\r\n displayOverride: () => {\r\n const baseTPStr = format(new Decimal(Currency.tachyonParticles.value), 2, 2);\r\n return PelleRifts.paradox.milestones[1].canBeApplied\r\n ? `${baseTPStr}${formatPow(PelleRifts.paradox.milestones[1].effectValue, 1, 1)}`\r\n : baseTPStr;\r\n },\r\n // This is treated as a multiplier and not a prestige currency, with an overridden display;\r\n // therefore we need to return 1 \"by default\"\r\n multValue: () => {\r\n const baseTP = new Decimal(Currency.tachyonParticles.value)\r\n .pow(PelleRifts.paradox.milestones[1].effectOrDefault(1));\r\n return TimeStudy.dilation.isBought ? baseTP : 1;\r\n },\r\n isActive: () => PlayerProgress.realityUnlocked() || PlayerProgress.dilationUnlocked(),\r\n icon: MultiplierTabIcons.TACHYON_PARTICLES,\r\n },\r\n base: {\r\n name: \"Base Tachyon Particle Count\",\r\n isBase: true,\r\n multValue: () => new Decimal(Currency.tachyonParticles.value).div(tachyonGainMultiplier()),\r\n isActive: () => new Decimal(Currency.tachyonParticles.value).gt(0),\r\n icon: MultiplierTabIcons.TACHYON_PARTICLES,\r\n },\r\n achievementMult: {\r\n name: \"Achievement Multiplier\",\r\n multValue: () => RealityUpgrade(8).effectOrDefault(1),\r\n isActive: () => RealityUpgrade(8).canBeApplied && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n achievement: {\r\n name: \"Achievement 132\",\r\n multValue: () => Achievement(132).effectOrDefault(1),\r\n isActive: () => Achievement(132).canBeApplied,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n dilation: {\r\n name: () => `Dilation Upgrade - Repeatable ${formatX(3)} TP`,\r\n multValue: () => DilationUpgrade.tachyonGain.effectOrDefault(1),\r\n isActive: () => DilationUpgrade.tachyonGain.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"dilation\"),\r\n },\r\n amplifierTP: {\r\n name: \"Reality Upgrade - Superluminal Amplifier\",\r\n multValue: () => DC.D1.timesEffectsOf(RealityUpgrade(4)),\r\n isActive: () => PlayerProgress.realityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n realityUpgrade: {\r\n name: \"Reality Upgrade - The Paradoxical Forever\",\r\n multValue: () => DC.D1.timesEffectsOf(RealityUpgrade(15)),\r\n isActive: () => PlayerProgress.realityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n dilationGlyphSacrifice: {\r\n name: \"Dilation Glyph Sacrifice\",\r\n multValue: () => GlyphSacrifice.dilation.effectValue,\r\n isActive: () => GlyphSacrifice.dilation.effectValue.gt(1),\r\n icon: MultiplierTabIcons.SACRIFICE(\"dilation\"),\r\n },\r\n\r\n nerfEnslaved: {\r\n name: \"The Nameless Ones' Reality\",\r\n powValue: () => Enslaved.tachyonNerf,\r\n isActive: () => Enslaved.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_ENSLAVED,\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nimport { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const tickspeed = {\r\n total: {\r\n name: \"Total Tickspeed\",\r\n displayOverride: () => {\r\n const tickRate = Tickspeed.perSecond;\r\n const activeDims = MultiplierTabHelper.activeDimCount(\"AD\");\r\n const dimString = MultiplierTabHelper.pluralizeDimensions(activeDims);\r\n return `${format(tickRate, 2, 2)}/sec on ${formatInt(activeDims)} ${dimString}\r\n ➜ ${formatX(tickRate.pow(activeDims), 2, 2)}`;\r\n },\r\n // This is necessary to make multValue entries from the other props scale properly, which are also all pow10\r\n // due to the multiplier tab splitting up entries logarithmically\r\n fakeValue: DC.E100,\r\n multValue: () => Tickspeed.perSecond.pow(MultiplierTabHelper.activeDimCount(\"AD\")),\r\n // No point in showing this breakdown at all unless both components are nonzero; however they will always be nonzero\r\n // due to the way the calculation works, so we have to manually hide it here\r\n isActive: () => Tickspeed.perSecond.gt(1) && effectiveBaseGalaxies() > 0,\r\n dilationEffect: () => (Effarig.isRunning ? Effarig.tickDilation : 1),\r\n overlay: [\"\"],\r\n icon: MultiplierTabIcons.TICKSPEED,\r\n },\r\n base: {\r\n name: \"Base Tickspeed from Achievements\",\r\n displayOverride: () => {\r\n const val = DC.D1.dividedByEffectsOf(\r\n Achievement(36),\r\n Achievement(45),\r\n Achievement(66),\r\n Achievement(83)\r\n );\r\n return `${format(val, 2, 2)}/sec`;\r\n },\r\n multValue: () => new Decimal.pow10(100 * MultiplierTabHelper.decomposeTickspeed().base),\r\n isActive: () => [36, 45, 66, 83].some(a => Achievement(a).canBeApplied),\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n upgrades: {\r\n name: \"Tickspeed Upgrades\",\r\n displayOverride: () => `${formatInt(Tickspeed.totalUpgrades)} Total`,\r\n multValue: () => new Decimal.pow10(100 * MultiplierTabHelper.decomposeTickspeed().tickspeed),\r\n isActive: true,\r\n icon: MultiplierTabIcons.PURCHASE(\"AD\"),\r\n },\r\n galaxies: {\r\n name: \"Galaxies\",\r\n displayOverride: () => {\r\n const ag = player.galaxies + GalaxyGenerator.galaxies;\r\n const rg = Replicanti.galaxies.total;\r\n const tg = player.dilation.totalTachyonGalaxies;\r\n return `${formatInt(ag + rg + tg)} Total`;\r\n },\r\n multValue: () => new Decimal.pow10(100 * MultiplierTabHelper.decomposeTickspeed().galaxies),\r\n isActive: true,\r\n icon: MultiplierTabIcons.GALAXY,\r\n },\r\n pelleTickspeedPow: {\r\n name: \"Tickspeed Dilation Upgrade\",\r\n powValue: () => DilationUpgrade.tickspeedPower.effectValue,\r\n isActive: () => DilationUpgrade.tickspeedPower.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"dilation\"),\r\n },\r\n};\r\n\r\nexport const tickspeedUpgrades = {\r\n purchased: {\r\n name: \"Purchased Tickspeed Upgrades\",\r\n displayOverride: () => (Laitela.continuumActive\r\n ? formatFloat(Tickspeed.continuumValue, 2, 2)\r\n : formatInt(player.totalTickBought)),\r\n multValue: () => Decimal.pow10(Laitela.continuumActive ? Tickspeed.continuumValue : player.totalTickBought),\r\n isActive: () => true,\r\n icon: MultiplierTabIcons.PURCHASE(\"AD\"),\r\n },\r\n free: {\r\n name: \"Tickspeed Upgrades from TD\",\r\n displayOverride: () => formatInt(player.totalTickGained),\r\n multValue: () => Decimal.pow10(player.totalTickGained),\r\n isActive: () => Currency.timeShards.gt(0),\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"time\"),\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { PlayerProgress } from \"../../player-progress\";\r\n\r\nimport { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const TD = {\r\n total: {\r\n name: dim => {\r\n if (dim) return `TD ${dim} Multiplier`;\r\n if (EternityChallenge(7).isRunning) return \"ID8 Production\";\r\n return \"Time Shard Production\";\r\n },\r\n displayOverride: dim => (dim\r\n ? formatX(TimeDimension(dim).multiplier, 2)\r\n : `${format(TimeDimension(1).productionPerSecond, 2)}/sec`\r\n ),\r\n multValue: dim => (dim\r\n ? TimeDimension(dim).multiplier\r\n : TimeDimensions.all\r\n .filter(td => td.isProducing)\r\n .map(td => td.multiplier)\r\n .reduce((x, y) => x.times(y), DC.D1)),\r\n isActive: dim => (dim\r\n ? TimeDimension(dim).isProducing\r\n : (PlayerProgress.realityUnlocked() || TimeDimension(1).isProducing)),\r\n dilationEffect: () => {\r\n const baseEff = player.dilation.active\r\n ? 0.75 * Effects.product(DilationUpgrade.dilationPenalty)\r\n : 1;\r\n return baseEff * (Effarig.isRunning ? Effarig.multDilation : 1);\r\n },\r\n isDilated: true,\r\n overlay: [\"Δ\", \"\"],\r\n icon: dim => MultiplierTabIcons.DIMENSION(\"TD\", dim),\r\n },\r\n purchase: {\r\n name: dim => (dim ? `Purchased TD ${dim}` : \"Purchases\"),\r\n multValue: dim => {\r\n const getMult = td => {\r\n const d = TimeDimension(td);\r\n const bought = td === 8 ? Math.clampMax(d.bought, 1e8) : d.bought;\r\n return Decimal.pow(d.powerMultiplier, bought);\r\n };\r\n if (dim) return getMult(dim);\r\n return TimeDimensions.all\r\n .filter(td => td.isProducing)\r\n .map(td => getMult(td.tier))\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n },\r\n isActive: () => !EternityChallenge(2).isRunning && !EternityChallenge(10).isRunning,\r\n icon: dim => MultiplierTabIcons.PURCHASE(\"TD\", dim),\r\n },\r\n highestDim: {\r\n name: () => `Amount of highest Dimension`,\r\n displayOverride: () => {\r\n const dim = MultiplierTabHelper.activeDimCount(\"TD\");\r\n return `TD ${dim}, ${format(TimeDimension(dim).amount)}`;\r\n },\r\n multValue: () => TimeDimension(MultiplierTabHelper.activeDimCount(\"TD\")).amount,\r\n isActive: () => TimeDimension(1).isProducing,\r\n icon: MultiplierTabIcons.DIMENSION(\"TD\"),\r\n },\r\n\r\n basePurchase: {\r\n name: \"Base purchases\",\r\n multValue: dim => {\r\n const getMult = td => Decimal.pow(4,\r\n td === 8 ? Math.clampMax(TimeDimension(td).bought, 1e8) : TimeDimension(td).bought);\r\n if (dim) return getMult(dim);\r\n return TimeDimensions.all\r\n .filter(td => td.isProducing)\r\n .map(td => getMult(td.tier))\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n },\r\n isActive: dim => (dim\r\n ? ImaginaryUpgrade(14).canBeApplied || (dim === 8 && GlyphSacrifice.time.effectValue.gt(1))\r\n : TimeDimension(1).isProducing),\r\n icon: dim => MultiplierTabIcons.PURCHASE(\"TD\", dim),\r\n },\r\n timeGlyphSacrifice: {\r\n name: \"Time Glyph Sacrifice\",\r\n multValue: () => (TimeDimension(8).isProducing\r\n ? Decimal.pow(GlyphSacrifice.time.effectValue, Math.clampMax(TimeDimension(8).bought, 1e8))\r\n : DC.D1),\r\n isActive: () => GlyphSacrifice.time.effectValue.gt(1),\r\n icon: MultiplierTabIcons.SACRIFICE(\"time\"),\r\n },\r\n powPurchase: {\r\n name: \"Imaginary Upgrade - Recollection of Intrusion\",\r\n powValue: () => ImaginaryUpgrade(14).effectOrDefault(1),\r\n isActive: () => ImaginaryUpgrade(14).canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"imaginary\"),\r\n },\r\n\r\n achievementMult: {\r\n name: \"Eternity Upgrade - Achievement Multiplier\",\r\n multValue: dim => Decimal.pow(EternityUpgrade.tdMultAchs.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n isActive: () => EternityUpgrade.tdMultAchs.canBeApplied && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n achievement: {\r\n name: \"Achievement Rewards\",\r\n multValue: dim => {\r\n const baseMult = DC.D1.timesEffectsOf(Achievement(105), Achievement(128));\r\n return Decimal.pow(baseMult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\"));\r\n },\r\n isActive: () => Achievement(105).canBeApplied || Achievement(128).canBeApplied,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n timeStudy: {\r\n name: dim => (dim ? `Time Studies (TD ${dim})` : \"Time Studies\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n TimeStudy(93),\r\n TimeStudy(103),\r\n TimeStudy(151),\r\n TimeStudy(221),\r\n TimeStudy(301),\r\n TimeStudy(313),\r\n );\r\n\r\n const dimMults = Array.repeat(DC.D1, 9);\r\n for (let tier = 1; tier <= 8; tier++) {\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n tier === 1 ? TimeStudy(11) : null,\r\n tier === 3 ? TimeStudy(73) : null,\r\n tier === 4 ? TimeStudy(227) : null\r\n );\r\n }\r\n\r\n if (dim) return allMult.times(dimMults[dim]);\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"TD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]).times(allMult);\r\n }\r\n return totalMult;\r\n },\r\n isActive: () => TimeDimension(1).isProducing,\r\n icon: MultiplierTabIcons.TIME_STUDY\r\n },\r\n eternityUpgrade: {\r\n name: dim => (dim ? `Other Eternity Upgrades (TD ${dim})` : \"Other Eternity Upgrades\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n EternityUpgrade.tdMultTheorems,\r\n EternityUpgrade.tdMultRealTime,\r\n );\r\n return Decimal.pow(allMult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\"));\r\n },\r\n isActive: () => TimeDimension(1).isProducing,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n\r\n eu1: {\r\n name: () => \"Unspent Time Theorems\",\r\n multValue: dim => Decimal.pow(EternityUpgrade.tdMultTheorems.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n isActive: () => EternityUpgrade.tdMultTheorems.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n eu2: {\r\n name: () => \"Days played\",\r\n multValue: dim => Decimal.pow(EternityUpgrade.tdMultRealTime.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n isActive: () => EternityUpgrade.tdMultRealTime.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n\r\n eternityChallenge: {\r\n name: dim => (dim ? `Eternity Challenges (TD ${dim})` : \"Eternity Challenges\"),\r\n multValue: dim => {\r\n let allMult = DC.D1.timesEffectsOf(\r\n EternityChallenge(1).reward,\r\n EternityChallenge(10).reward,\r\n ).times(EternityChallenge(7).isRunning ? Tickspeed.perSecond : DC.D1);\r\n if (EternityChallenge(9).isRunning) {\r\n allMult = allMult.times(\r\n Decimal.pow(Math.clampMin(Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate / 7)\r\n .log2(), 1), 4).clampMin(1));\r\n }\r\n return Decimal.pow(allMult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\"));\r\n },\r\n isActive: () => EternityChallenge(1).completions > 0,\r\n icon: MultiplierTabIcons.CHALLENGE(\"eternity\")\r\n },\r\n tickspeed: {\r\n name: () => \"Tickspeed (EC7)\",\r\n displayOverride: () => {\r\n const tickRate = Tickspeed.perSecond;\r\n const activeDims = MultiplierTabHelper.activeDimCount(\"TD\");\r\n const dimString = MultiplierTabHelper.pluralizeDimensions(activeDims);\r\n return `${format(tickRate, 2, 2)}/sec on ${formatInt(activeDims)} ${dimString}\r\n ➜ ${formatX(tickRate.pow(activeDims), 2, 2)}`;\r\n },\r\n multValue: () => Tickspeed.perSecond.pow(MultiplierTabHelper.activeDimCount(\"TD\")),\r\n isActive: () => EternityChallenge(7).isRunning,\r\n icon: MultiplierTabIcons.TICKSPEED,\r\n },\r\n dilationUpgrade: {\r\n name: \"Dilation Upgrade - Replicanti Multiplier\",\r\n multValue: dim => {\r\n const mult = Replicanti.areUnlocked && Replicanti.amount.gt(1)\r\n ? DilationUpgrade.tdMultReplicanti.effectValue\r\n : DC.D1;\r\n return Decimal.pow(mult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\"));\r\n },\r\n isActive: () => DilationUpgrade.tdMultReplicanti.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"dilation\"),\r\n },\r\n realityUpgrade: {\r\n name: \"Reality Upgrade - Temporal Transcendence\",\r\n multValue: dim => Decimal.pow(RealityUpgrade(22).effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n isActive: () => !Pelle.isDoomed && RealityUpgrade(22).canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n glyph: {\r\n name: \"Glyph Effects\",\r\n powValue: () => getAdjustedGlyphEffect(\"timepow\") * getAdjustedGlyphEffect(\"effarigdimensions\"),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH\r\n },\r\n alchemy: {\r\n name: \"Glyph Alchemy\",\r\n multValue: dim => Decimal.pow(AlchemyResource.dimensionality.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n powValue: () => AlchemyResource.time.effectOrDefault(1) * Ra.momentumValue,\r\n isActive: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied,\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n imaginaryUpgrade: {\r\n name: \"Imaginary Upgrade - Suspicion of Interference\",\r\n powValue: () => ImaginaryUpgrade(11).effectOrDefault(1),\r\n isActive: () => ImaginaryUpgrade(11).canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"imaginary\"),\r\n },\r\n pelle: {\r\n name: \"Pelle Rift Effects\",\r\n multValue: dim => Decimal.pow(PelleRifts.chaos.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n powValue: () => PelleRifts.paradox.effectOrDefault(DC.D1).toNumber(),\r\n isActive: () => Pelle.isDoomed,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: dim => Decimal.pow(ShopPurchase.allDimPurchases.currentMult,\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n isActive: () => ShopPurchaseData.totalSTD > 0,\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n effarig65:{\r\n name: \"Effarig Level 65\",\r\n powValue: () => 1 + ((Currency.relicShards.value.clampMin(1)).log10() / 1337),\r\n isActive: () => Ra.unlocks.relicShardBoost.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n v50:{\r\n name: \"V Level 50\",\r\n powValue: () => Math.pow(VUnlocks.adPow.effectValue, 0.5),\r\n isActive: () => Ra.unlocks.vAchMilestone2AffectsIDsAndTDs.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_V\r\n },\r\n\r\n nerfV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.5,\r\n isActive: () => V.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfCursed: {\r\n name: \"Cursed Glyphs\",\r\n powValue: () => getAdjustedGlyphEffect(\"curseddimensions\"),\r\n isActive: () => getAdjustedGlyphEffect(\"curseddimensions\") !== 1,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"cursed\"),\r\n },\r\n};\r\n","export const CorruptionData = {\r\n corruptions: [0,0,0,0,0,0,0,0,0,0],\r\n corruptionChallenge: {\r\n recordCorruptions: [0,0,0,0,0,0,0,0,0,0],\r\n recordScore: 0,\r\n bGLwC: 0,\r\n },\r\n isCorrupted: false,\r\n nextCorrupted: false,\r\n corruptedFragments: 0,\r\n recordCorruptedFragments: 0,\r\n update() {\r\n this.corruptions = player.mending.corruption\r\n this.corruptionChallenge.recordCorruptions = player.mending.corruptionChallenge.records\r\n this.corruptionChallenge.recordScore = player.mending.corruptionChallenge.recordScore\r\n this.isCorrupted = player.mending.corruptionChallenge.corruptedMend\r\n this.nextCorrupted = player.mending.corruptionChallenge.corruptNext\r\n this.corruptedFragments = player.mending.corruptedFragments\r\n this.recordCorruptedFragments = Math.log2(player.mending.corruptionChallenge.recordScore)\r\n },\r\n calcBaseScore() {\r\n let corruptionScores = [1, 1.2, 1.45, 1.7, 2, 2.5, 3, 3.5, 4, 5, 7, 11]\r\n let finalScore = corruptionScores[player.mending.corruption[0]]\r\n for (let i = 1; i < 10; i++) {\r\n finalScore *= corruptionScores[player.mending.corruption[i]]\r\n }\r\n return finalScore\r\n },\r\n calcScore() {\r\n let scoreCalc = this.calcBaseScore()\r\n scoreCalc *= [0, 1, 3, 10, 35, 126, 462, 1716, 6435, 24310, 92378][Math.floor(Math.max(1, Math.min(player.mending.corruption.countWhere(u => u > 0), (player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0)/player.mending.corruption.countWhere(u => u > 0) - 1))))]\r\n scoreCalc = Math.pow(scoreCalc, CorruptionUpgrade(20).effectOrDefault(1))\r\n return scoreCalc\r\n }\r\n}","import { MultiplierTabIcons } from \"./icons\";\r\nimport { CorruptionData } from \"../../corruption\";\r\n\r\n// See index.js for documentation\r\nexport const hostScore = {\r\ntotal: {\r\n name: \"Total Score\",\r\n displayOverride: () => `${format(CorruptionData.calcScore(), 2, 2)}`,\r\n multValue: () => CorruptionData.calcScore(),\r\n isActive: () => CorruptionData.isCorrupted,\r\n icon: MultiplierTabIcons.CORRUPTION,\r\n },\r\n corruptions: {\r\n name: \"Hostilities\",\r\n displayOverride: () => `${formatInt(CorruptionData.calcBaseScore(), 2, 2)} base score`,\r\n multValue: () => CorruptionData.calcBaseScore(),\r\n isActive: () => CorruptionData.isCorrupted,\r\n icon: MultiplierTabIcons.CORRUPTION,\r\n },\r\n extra: {\r\n name: \"Bonus\",\r\n multValue: () => [0, 1, 3, 10, 35, 126, 462, 1716, 6435, 24310, 92378][Math.floor(Math.min(CorruptionData.corruptions.countWhere(u => u > 0), CorruptionData.corruptions.reduce((partialSum, a) => partialSum + a, 0) + 2))],\r\n displayOverride: () => formatX([0, 1, 3, 10, 35, 126, 462, 1716, 6435, 24310, 92378][Math.floor(Math.min(CorruptionData.corruptions.countWhere(u => u > 0), CorruptionData.corruptions.reduce((partialSum, a) => partialSum + a, 0) + 2))], 2, 2),\r\n isActive: () => CorruptionData.isCorrupted,\r\n icon: MultiplierTabIcons.CORRUPTION_BONUS,\r\n },\r\n cu20: {\r\n name: \"Rewarding Glyphs\",\r\n powValue: () => 1 + Math.log(Math.log(CorruptionData.corruptions[4] * Math.max(1,CorruptionData.corruptionChallenge.bGLwC)))/2,\r\n isActive: () => CorruptionData.isCorrupted && CorruptionData.corruptions[4] >= 4,\r\n icon: MultiplierTabIcons.UPGRADE(\"corruption\"),\r\n }\r\n};\r\n","import { AM } from \"./antimatter\";\r\nimport { AD } from \"./antimatter-dimensions\";\r\nimport { DT } from \"./dilated-time\";\r\nimport { eternities } from \"./eternities\";\r\nimport { EP } from \"./eternity-points\";\r\nimport { galaxies } from \"./galaxies\";\r\nimport { gamespeed } from \"./gamespeed\";\r\nimport { general } from \"./general\";\r\nimport { infinities } from \"./infinities\";\r\nimport { ID } from \"./infinity-dimensions\";\r\nimport { IP } from \"./infinity-points\";\r\nimport { replicanti } from \"./replicanti\";\r\nimport { TP } from \"./tachyon-particles\";\r\nimport { tickspeed, tickspeedUpgrades } from \"./tickspeed\";\r\nimport { TD } from \"./time-dimensions\";\r\nimport { hostScore } from \"./score\";\r\n\r\nexport const multiplierTabValues = {\r\n general,\r\n AM,\r\n AD,\r\n ID,\r\n TD,\r\n IP,\r\n EP,\r\n TP,\r\n DT,\r\n tickspeed,\r\n tickspeedUpgrades,\r\n galaxies,\r\n infinities,\r\n eternities,\r\n gamespeed,\r\n replicanti,\r\n hostScore\r\n};\r\n","/* eslint-disable max-depth */\r\n/* eslint-disable camelcase */\r\nimport { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { multiplierTabValues } from \"./values\";\r\n\r\nconst dynamicGenProps = [\"TP\", \"DT\", \"infinities\", \"eternities\", \"gamespeed\", \"replicanti\", \"hostScore\"];\r\nconst propList = {\r\n AD: [\"purchase\", \"dimboost\", \"sacrifice\", \"achievementMult\", \"achievement\", \"infinityUpgrade\",\r\n \"breakInfinityUpgrade\", \"infinityPower\", \"infinityChallenge\", \"timeStudy\", \"eternityChallenge\", \"glyph\", \"v\",\r\n \"alchemy\", \"pelle\", \"iap\", \"effectNC\", \"nerfIC\", \"nerfV\", \"nerfCursed\", \"nerfPelle\"],\r\n ID: [\"purchase\", \"achievementMult\", \"achievement\", \"replicanti\", \"infinityChallenge\", \"timeStudy\", \"eternityUpgrade\",\r\n \"eternityChallenge\", \"glyph\", \"alchemy\", \"imaginaryUpgrade\", \"pelle\", \"iap\", \"nerfV\", \"nerfCursed\", \"nerfPelle\", \"nerfSoftcap\"],\r\n TD: [\"purchase\", \"achievementMult\", \"achievement\", \"timeStudy\", \"eternityUpgrade\", \"eternityChallenge\",\r\n \"dilationUpgrade\", \"realityUpgrade\", \"glyph\", \"alchemy\", \"imaginaryUpgrade\", \"pelle\", \"iap\", \"nerfV\", \"nerfCursed\"],\r\n IP: [\"base\", \"infinityUpgrade\", \"achievement\", \"timeStudy\", \"dilationUpgrade\", \"glyph\", \"alchemy\", \"pelle\", \"ra\", \"iap\", \"mendingMilestones\",\r\n \"nerfTeresa\", \"nerfV\", \"nerfCorruptions\", \"nerfSoftcap\"],\r\n EP: [\"base\", \"eternityUpgrade\", \"timeStudy\", \"glyph\", \"realityUpgrade\", \"pelle\", \"iap\", \"nerfTeresa\", \"nerfV\", \"nerfCorruptions\"],\r\n};\r\n\r\n// Some of the props above would contain every entry except \"total\" in their respective value GameDB entry, so we\r\n// generate them dynamically instead\r\nfor (const prop of dynamicGenProps) {\r\n propList[prop] = [];\r\n for (const toCopy of Object.keys(multiplierTabValues[prop])) {\r\n if (toCopy !== \"total\") propList[prop].push(toCopy);\r\n }\r\n}\r\n\r\n// Used for individual dimension breakdowns of effects (eg. full achievement mult into its values on individual ADs)\r\n// Results in an array of [\"key_1\", \"key_2\", ... , \"key_8\"]\r\nfunction append8(key) {\r\n const props = [];\r\n for (let dim = 1; dim <= 8; dim++) props.push(`${key}_${dim}`);\r\n return props;\r\n}\r\n\r\n// Helper method to create very long lists of entries in the tree; format is \"RESOURCE_SOURCE_DIMENSION\"\r\nfunction getProps(resource, tier) {\r\n const props = propList[resource].map(s => `${resource}_${s}`);\r\n if (!tier) return props;\r\n const newProps = [];\r\n for (const effect of props) newProps.push(`${effect}_${tier}`);\r\n return newProps;\r\n}\r\n\r\n// Everything is multiplierTabTree is associated with values in multiplierTabValues. The only explicitly\r\n// initialized props here are the \"root\" props which are viewable on the tab with full breakdowns. After the initial\r\n// specification, all children props are dynamically added based on the arrays in the helper functions above\r\nexport const multiplierTabTree = {\r\n AM_total: [\r\n [\"AD_total\", \"tickspeed_total\", \"AM_effarigAM\"]\r\n ],\r\n AD_total: [\r\n getProps(\"AD\"),\r\n append8(\"AD_total\")\r\n ],\r\n ID_total: [\r\n getProps(\"ID\"),\r\n append8(\"ID_total\")\r\n ],\r\n TD_total: [\r\n getProps(\"TD\"),\r\n append8(\"TD_total\")\r\n ],\r\n IP_total: [\r\n getProps(\"IP\")\r\n ],\r\n IP_base: [\r\n [\"IP_antimatter\", \"IP_divisor\"]\r\n ],\r\n EP_total: [\r\n getProps(\"EP\")\r\n ],\r\n EP_base: [\r\n [\"EP_IP\", \"EP_divisor\"]\r\n ],\r\n TP_total: [\r\n getProps(\"TP\")\r\n ],\r\n DT_total: [\r\n getProps(\"DT\")\r\n ],\r\n tickspeed_total: [\r\n [\"tickspeed_base\", \"tickspeed_upgrades\", \"tickspeed_galaxies\", \"tickspeed_pelleTickspeedPow\"]\r\n ],\r\n tickspeed_upgrades: [\r\n [\"tickspeedUpgrades_purchased\", \"tickspeedUpgrades_free\"]\r\n ],\r\n tickspeed_galaxies: [\r\n [\"galaxies_antimatter\", \"galaxies_replicanti\", \"galaxies_tachyon\", \"galaxies_nerfPelle\"]\r\n ],\r\n infinities_total: [\r\n getProps(\"infinities\")\r\n ],\r\n eternities_total: [\r\n getProps(\"eternities\")\r\n ],\r\n gamespeed_total: [\r\n getProps(\"gamespeed\")\r\n ],\r\n replicanti_total: [\r\n getProps(\"replicanti\")\r\n ],\r\n hostScore_total: [\r\n getProps(\"hostScore\")\r\n ]\r\n};\r\n\r\n// Gamespeed's two alternate displays are current and average gamespeed, distinguished by which of two\r\n// mutually-exclusive entries appear in the list. We explicity modify props here as needed\r\nconst allGamespeed = multiplierTabTree.gamespeed_total[0];\r\nmultiplierTabTree.gamespeed_total[0] = [...allGamespeed].filter(key => key !== \"gamespeed_blackHoleAvg\");\r\nmultiplierTabTree.gamespeed_total[1] = [...allGamespeed].filter(key => key !== \"gamespeed_blackHoleCurr\");\r\n\r\n// DT doesn't explicitly have an entry to TP, due to it being its own total entry, so we link them together\r\nmultiplierTabTree.DT_total[0].unshift(\"TP_total\");\r\n\r\n// Additional data specification for dynamically-generated props\r\nconst dimTypes = [\"AD\", \"ID\", \"TD\"];\r\nconst singleRes = [\"IP\", \"EP\", \"DT\", \"infinities\", \"replicanti\", \"hostScore\"];\r\nconst targetedEffects = {\r\n achievement: {\r\n checkFn: MultiplierTabHelper.achievementDimCheck,\r\n AD: [23, 28, 31, 34, 43, 48, 56, 64, 65, 68, 71, 72, 73, 74, 76, 84, 91, 92, 183],\r\n TD: [105, 128],\r\n IP: [85, 93, 116, 125, 141],\r\n DT: [132, 137],\r\n infinities: [87, 164],\r\n },\r\n timeStudy: {\r\n checkFn: MultiplierTabHelper.timeStudyDimCheck,\r\n AD: [71, 91, 101, 161, 193, 214, 234],\r\n ID: [72, 82, 92, 102, 162],\r\n TD: [11, 73, 93, 103, 151, 221, 227, 301],\r\n IP: [41, 51, 141, 142, 143],\r\n EP: [61, 121, 122, 123],\r\n replicanti: [62, 132, 213],\r\n },\r\n infinityChallenge: {\r\n checkFn: MultiplierTabHelper.ICDimCheck,\r\n AD: [3, 4, 8],\r\n ID: [1, 6],\r\n },\r\n eternityChallenge: {\r\n checkFn: MultiplierTabHelper.ECDimCheck,\r\n ID: [2, 4, 9],\r\n TD: [1, 10],\r\n },\r\n};\r\n\r\n// Highest actively-producing dimensions need a special case\r\nfor (const dim of dimTypes) {\r\n multiplierTabTree[`${dim}_total`][0].push(`${dim}_highestDim`);\r\n multiplierTabTree[`${dim}_total`][1].push(`${dim}_highestDim`);\r\n}\r\n\r\n// EC7 also needs a special case for tickspeed, since it doesn't appear on the multipliers themselves\r\nfor (const dim of [\"ID\", \"TD\"]) {\r\n multiplierTabTree[`${dim}_total`][0].push(`${dim}_tickspeed`);\r\n multiplierTabTree[`${dim}_total`][1].push(`${dim}_tickspeed`);\r\n}\r\n\r\n// Dynamically generate all values from existing values, but broken down by dimension\r\nfor (const res of dimTypes) {\r\n for (const prop of getProps(res)) multiplierTabTree[prop] = [append8(prop)];\r\n for (let dim = 1; dim <= 8; dim++) multiplierTabTree[`${res}_total_${dim}`] = [getProps(res, dim)];\r\n}\r\n\r\n// A few dynamically-generated props are largely useless in terms of what they connect to, in that they have very few\r\n// entries or have 8 identical entries, so we explicitly remove those lists for a cleaner appearance on the UI\r\nconst removedRegexes = [\"AD_sacrifice\", \"AD_breakInfinityUpgrade\", \"AD_nerfIC\", \"AD_infinityUpgrade\", \"AD_v\",\r\n \"ID_replicanti\", \"ID_infinityChallenge\", \"ID_eternityUpgrades\",\r\n \"TD_achievement\", \"TD_eternityUpgrade\", \"TD_dilationUpgrade\", \"TD_realityUpgrade\",\r\n \".._achievementMult\", \".._glyph\", \".._alchemy\", \".._imaginaryUpgrade\", \".._iap\",\r\n \".._nerfV\", \".._nerfCursed\", \".._nerfPelle\", \".._pelle\", \"nerfSoftcap\", \"nerfCorruptions\"\r\n];\r\nconst removedProps = Object.keys(multiplierTabTree)\r\n .filter(key => removedRegexes.some(regex => key.match(regex)));\r\nfor (const prop of removedProps) {\r\n multiplierTabTree[prop] = undefined;\r\n}\r\n\r\n// We need to handle infinity power multiplier a bit differently; previous steps of dynamic generation fill it with\r\n// 8 identical AD multipliers, but we want to replace it with ID mults and the conversion rate\r\nmultiplierTabTree.AD_infinityPower = [[\"ID_total\", \"ID_powerConversion\"]];\r\nfor (let dim = 1; dim <= 8; dim++) {\r\n multiplierTabTree[`AD_infinityPower_${dim}`] = [[\"ID_total\", \"ID_powerConversion\"]];\r\n}\r\n\r\n// Tesseracts are added one layer deep, but we don't want to override the existing ID_purchase entry\r\nmultiplierTabTree.ID_purchase.unshift([\"ID_basePurchase\", \"ID_tesseractPurchase\",\r\n \"ID_infinityGlyphSacrifice\", \"ID_powPurchase\"]);\r\nfor (let dim = 1; dim <= 7; dim++) {\r\n multiplierTabTree[`ID_purchase_${dim}`] = [[`ID_basePurchase_${dim}`, `ID_tesseractPurchase_${dim}`,\r\n \"ID_powPurchase\"]];\r\n}\r\nmultiplierTabTree.ID_purchase_8 = [[`ID_basePurchase_8`, `ID_infinityGlyphSacrifice`, \"ID_powPurchase\"]];\r\n\r\n// These are also added one layer deep\r\nfor (let dim = 1; dim <= 7; dim++) {\r\n multiplierTabTree[`TD_purchase_${dim}`] = [[`TD_basePurchase_${dim}`, `TD_powPurchase_${dim}`]];\r\n}\r\nmultiplierTabTree.TD_purchase.push([\"TD_basePurchase\", \"TD_timeGlyphSacrifice\", \"TD_powPurchase\"]);\r\nmultiplierTabTree.TD_purchase_8 = [[\"TD_basePurchase_8\", \"TD_timeGlyphSacrifice\", \"TD_powPurchase\"]];\r\n\r\n// Dynamically fill effects which only affect certain dimensions, as noted in targetedEffects\r\nfor (const res of dimTypes) {\r\n for (const eff of Object.keys(targetedEffects)) {\r\n if (!targetedEffects[eff][res]) continue;\r\n multiplierTabTree[`${res}_${eff}`] = [[]];\r\n for (const id of targetedEffects[eff][res]) {\r\n for (let dim = 1; dim <= 8; dim++) {\r\n const propStr = `${res}_${eff}_${dim}`;\r\n const dimStr = `${res}${dim}`;\r\n if (targetedEffects[eff].checkFn(id, dimStr)) {\r\n if (!multiplierTabTree[propStr]) multiplierTabTree[propStr] = [[]];\r\n multiplierTabTree[propStr][0].push(`general_${eff}_${id}_${dimStr}`);\r\n }\r\n }\r\n multiplierTabTree[`${res}_${eff}`][0].push(`general_${eff}_${id}_${res}`);\r\n }\r\n }\r\n}\r\n\r\n// Dynamically fill effects which affect single resources as well\r\nfor (const res of singleRes) {\r\n for (const eff of Object.keys(targetedEffects)) {\r\n if (!targetedEffects[eff][res]) continue;\r\n multiplierTabTree[`${res}_${eff}`] = [[]];\r\n for (const ach of targetedEffects[eff][res]) {\r\n multiplierTabTree[`${res}_${eff}`][0].push(`general_${eff}_${ach}`);\r\n }\r\n }\r\n}\r\n\r\n// Fill in eternity upgrade entries\r\nmultiplierTabTree.ID_eternityUpgrade = [[`ID_eu1`, `ID_eu2`, `ID_eu3`]];\r\nmultiplierTabTree.TD_eternityUpgrade = [[`TD_eu1`, `TD_eu2`]];\r\nfor (let dim = 1; dim <= 8; dim++) {\r\n multiplierTabTree[`ID_eternityUpgrade_${dim}`] = [[`ID_eu1_${dim}`, `ID_eu2_${dim}`, `ID_eu3_${dim}`]];\r\n multiplierTabTree[`TD_eternityUpgrade_${dim}`] = [[`TD_eu1_${dim}`, `TD_eu2_${dim}`]];\r\n}\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const normalAchievements = [\r\n {\r\n id: 11,\r\n name: \"You gotta start somewhere\",\r\n description: \"Buy a 1st Antimatter Dimension.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 12,\r\n name: \"100 antimatter is a lot\",\r\n description: \"Buy a 2nd Antimatter Dimension.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 13,\r\n name: \"Half life 3 CONFIRMED\",\r\n description: \"Buy a 3rd Antimatter Dimension.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 14,\r\n name: \"L4D: Left 4 Dimensions\",\r\n description: \"Buy a 4th Antimatter Dimension.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 15,\r\n name: \"5 Dimension Antimatter Punch\",\r\n description: \"Buy a 5th Antimatter Dimension.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 16,\r\n name: \"We couldn't afford 9\",\r\n get description() {\r\n return Enslaved.isRunning\r\n ? \"Buy a 6th Antimatter Dimension (they never amount to anything)\"\r\n : \"Buy a 6th Antimatter Dimension.\";\r\n },\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 17,\r\n name: \"Not a luck related achievement\",\r\n description: \"Buy a 7th Antimatter Dimension.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 18,\r\n name: \"90 degrees to infinity\",\r\n get description() {\r\n return Enslaved.isRunning\r\n ? \"Buy an 8th Antimatter Dimension (don't get used to it)\"\r\n : \"Buy an 8th Antimatter Dimension.\";\r\n },\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 21,\r\n name: \"To infinity!\",\r\n description: \"Go Infinite.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Start with ${formatInt(100)} antimatter.`; },\r\n effect: 100\r\n },\r\n {\r\n id: 22,\r\n name: \"FAKE NEWS!\",\r\n get description() { return `Encounter ${formatInt(50)} different news messages.`; },\r\n checkRequirement: () => NewsHandler.uniqueTickersSeen >= 50,\r\n checkEvent: GAME_EVENT.REALITY_RESET_AFTER\r\n },\r\n {\r\n id: 23,\r\n name: \"The 9th Dimension is a lie\",\r\n get description() { return `Have exactly ${formatInt(99)} 8th Antimatter Dimensions.`; },\r\n checkRequirement: () => AntimatterDimension(8).amount.eq(99),\r\n get reward() { return `8th Antimatter Dimensions are ${formatPercents(0.1)} stronger.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 24,\r\n name: \"Antimatter Apocalypse\",\r\n get description() { return `Get over ${format(DC.E80)} antimatter.`; },\r\n checkRequirement: () => Currency.antimatter.exponent >= 80,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 25,\r\n name: \"Boosting to the max\",\r\n get description() { return `Buy ${formatInt(10)} Dimension Boosts.`; },\r\n checkRequirement: () => DimBoost.purchasedBoosts >= 10,\r\n checkEvent: GAME_EVENT.DIMBOOST_AFTER\r\n },\r\n {\r\n id: 26,\r\n name: \"You got past The Big Wall\",\r\n description: \"Buy an Antimatter Galaxy.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_BEFORE\r\n },\r\n {\r\n id: 27,\r\n name: \"Double Galaxy\",\r\n get description() { return `Buy ${formatInt(2)} Antimatter Galaxies.`; },\r\n checkRequirement: () => player.galaxies >= 2,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER\r\n },\r\n {\r\n id: 28,\r\n name: \"There's no point in doing that...\",\r\n get description() {\r\n return `Buy a single 1st Antimatter Dimension when you have over ${format(DC.E150)} of them.`;\r\n },\r\n checkRequirement: () => AntimatterDimension(1).amount.exponent >= 150,\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n get reward() { return `1st Antimatter Dimensions are ${formatPercents(0.1)} stronger.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 31,\r\n name: \"I forgot to nerf that\",\r\n get description() { return `Get any Antimatter Dimension multiplier over ${formatX(DC.E31)}.`; },\r\n checkRequirement: () => AntimatterDimensions.all.some(x => x.multiplier.exponent >= 31),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `1st Antimatter Dimensions are ${formatPercents(0.05)} stronger.`; },\r\n effect: 1.05\r\n },\r\n {\r\n id: 32,\r\n name: \"The Gods are pleased\",\r\n get description() { return `Get over ${formatX(600)} from Dimensional Sacrifice outside of Challenge 8.`; },\r\n checkRequirement: () => (!NormalChallenge(8).isOnlyActiveChallenge && Sacrifice.totalBoost.gte(600)),\r\n checkEvent: GAME_EVENT.SACRIFICE_RESET_AFTER,\r\n get reward() {\r\n return `Dimensional Sacrifice is stronger.\r\n ${Sacrifice.getSacrificeDescription({ \"Achievement32\": false, \"Achievement57\": false, \"Achievement88\": false })} ➜\r\n ${Sacrifice.getSacrificeDescription({ \"Achievement32\": true, \"Achievement57\": false, \"Achievement88\": false })}`;\r\n },\r\n effect: 0.1,\r\n },\r\n {\r\n id: 33,\r\n name: \"That's a lot of infinites\",\r\n get description() { return `Reach Infinity ${formatInt(10)} times.`; },\r\n checkRequirement: () => Currency.infinities.gte(10),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER\r\n },\r\n {\r\n id: 34,\r\n name: \"You didn't need it anyway\",\r\n description: \"Infinity without having any 8th Antimatter Dimensions.\",\r\n checkRequirement: () => AntimatterDimension(8).totalAmount.eq(0),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Dimensions 1-7 are ${formatPercents(0.02)} stronger.`; },\r\n effect: 1.02\r\n },\r\n {\r\n id: 35,\r\n name: \"Don't you dare sleep\",\r\n get description() {\r\n return PlayerProgress.realityUnlocked()\r\n ? `Be offline for a period of over ${formatInt(6)} hours (real time).`\r\n : `Be offline for a period of over ${formatInt(6)} hours.`;\r\n },\r\n checkRequirement: () => Date.now() - player.lastUpdate >= 21600000,\r\n checkEvent: GAME_EVENT.GAME_TICK_BEFORE\r\n },\r\n {\r\n id: 36,\r\n name: \"Claustrophobic\",\r\n get description() {\r\n return `Infinity with just ${formatInt(1)} Antimatter Galaxy. (Your Antimatter Galaxies are reset on Infinity.)`;\r\n },\r\n checkRequirement: () => player.galaxies === 1,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Multiply starting tick speed by ${format(1.02, 2, 2)}.`; },\r\n effect: 1 / 1.02\r\n },\r\n {\r\n id: 37,\r\n name: \"That's FAST!\",\r\n get description() { return `Infinity in under ${formatInt(2)} hours.`; },\r\n checkRequirement: () => Time.thisInfinityRealTime.totalHours.lte(2),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Start with ${formatInt(5000)} antimatter.`; },\r\n effect: 5000\r\n },\r\n {\r\n id: 38,\r\n name: \"I don't believe in Gods\",\r\n get description() {\r\n return `Buy an Antimatter Galaxy without Dimensional Sacrificing.\r\n (Your Antimatter Galaxies are reset on Infinity.)`;\r\n },\r\n checkRequirement: () => player.requirementChecks.infinity.noSacrifice,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_BEFORE\r\n },\r\n {\r\n id: 41,\r\n name: \"No DLC required\",\r\n get description() { return `Buy ${formatInt(16)} Infinity Upgrades.`; },\r\n checkRequirement: () => player.infinityUpgrades.size >= 16,\r\n checkEvent: [\r\n GAME_EVENT.INFINITY_UPGRADE_BOUGHT,\r\n GAME_EVENT.REALITY_RESET_AFTER,\r\n GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT],\r\n get reward() {\r\n return `Unlock two new Infinity Upgrades- ${formatX(2)} IP multiplier and offline IP generation.`;\r\n },\r\n },\r\n {\r\n id: 42,\r\n name: \"Super Sanic\",\r\n get description() {\r\n return `Have antimatter per second exceed your current antimatter above ${format(DC.E63)}.`;\r\n },\r\n checkRequirement: () =>\r\n Currency.antimatter.exponent >= 63 &&\r\n Currency.antimatter.productionPerSecond.gt(Currency.antimatter.value),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 43,\r\n name: \"How the antitables have turned..\",\r\n description:\r\n \"Get the 8th Antimatter Dimension multiplier to be highest, 7th Antimatter Dimension multiplier \" +\r\n \" second highest, etc.\",\r\n checkRequirement: () => {\r\n const multipliers = Array.range(1, 8).map(tier => AntimatterDimension(tier).multiplier);\r\n for (let i = 0; i < multipliers.length - 1; i++) {\r\n if (multipliers[i].gte(multipliers[i + 1])) return false;\r\n }\r\n return true;\r\n },\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() {\r\n return `Each Antimatter Dimension gains a boost proportional to tier\r\n (8th gets ${formatPercents(0.08)}, 7th gets ${formatPercents(0.07)}, etc.)`;\r\n }\r\n },\r\n {\r\n id: 44,\r\n name: \"Over in 30 Seconds\",\r\n get description() {\r\n return `Have antimatter per second exceed your current antimatter\r\n for ${formatInt(30)} consecutive seconds.`;\r\n },\r\n checkRequirement: () => AchievementTimers.marathon1\r\n .check(Currency.antimatter.productionPerSecond.gt(Currency.antimatter.value), 30),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n },\r\n {\r\n id: 45,\r\n name: \"Faster than a potato\",\r\n get description() { return `Get more than ${format(DC.E29)} ticks per second.`; },\r\n checkRequirement: () => Tickspeed.current.exponent <= -26,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Multiply starting tickspeed by ${formatX(1.02, 0, 2)}.`; },\r\n effect: 0.98\r\n },\r\n {\r\n id: 46,\r\n name: \"Multidimensional\",\r\n get description() { return `Reach ${format(DC.E12)} of all Antimatter Dimensions except the 8th.`; },\r\n checkRequirement: () => AntimatterDimension(7).amount.exponent >= 12,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 47,\r\n name: \"Daredevil\",\r\n get description() { return `Complete ${formatInt(3)} Normal Challenges.`; },\r\n checkRequirement: () => NormalChallenges.all.countWhere(c => c.isCompleted) >= 3,\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT],\r\n },\r\n {\r\n id: 48,\r\n name: \"Antichallenged\",\r\n get description() { return `Complete all ${formatInt(12)} Normal Challenges.`; },\r\n checkRequirement: () => NormalChallenges.all.countWhere(c => !c.isCompleted) === 0,\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT],\r\n get reward() { return `All Dimensions are ${formatPercents(0.1)} stronger.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 51,\r\n name: \"Limit Break\",\r\n description: \"Break Infinity.\",\r\n checkRequirement: () => player.break,\r\n checkEvent: [GAME_EVENT.BREAK_INFINITY, GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT],\r\n },\r\n {\r\n id: 52,\r\n name: \"Age of Automation\",\r\n description: \"Max the interval for Antimatter Dimension and Tickspeed upgrade autobuyers.\",\r\n checkRequirement: () => Autobuyer.antimatterDimension.zeroIndexed.concat(Autobuyer.tickspeed)\r\n .every(a => a.isUnlocked && a.hasMaxedInterval),\r\n checkEvent: [GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT]\r\n },\r\n {\r\n id: 53,\r\n name: \"Definitely not worth it\",\r\n description: \"Max the intervals for all normal autobuyers.\",\r\n // The upgradeable autobuyers are dimensions, tickspeed, dimension boost,\r\n // galaxy, and big crunch (the ones you get from normal challenges).\r\n // We don't count autobuyers which can be upgraded via e.g. perks as upgradeable.\r\n checkRequirement: () => Autobuyers.upgradeable\r\n .every(a => a.isUnlocked && a.hasMaxedInterval),\r\n checkEvent: [GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT]\r\n },\r\n {\r\n id: 54,\r\n name: \"That's FASTER!\",\r\n get description() { return `Infinity in ${formatInt(10)} minutes or less.`; },\r\n checkRequirement: () => Time.thisInfinityRealTime.totalMinutes.lte(10),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Start with ${format(5e5)} antimatter.`; },\r\n effect: 5e5\r\n },\r\n {\r\n id: 55,\r\n name: \"Forever isn't that long\",\r\n get description() { return `Infinity in ${formatInt(1)} minute or less.`; },\r\n checkRequirement: () => Time.thisInfinityRealTime.totalMinutes.lte(1),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Start with ${format(5e10)} antimatter.`; },\r\n effect: 5e10\r\n },\r\n {\r\n id: 56,\r\n name: \"Many Deaths\",\r\n get description() {\r\n return `Complete the 2nd Antimatter Dimension Autobuyer Challenge in ${formatInt(3)} minutes or less.`;\r\n },\r\n checkRequirement: () => (NormalChallenge(2).isOnlyActiveChallenge && Time.thisInfinityRealTime.totalMinutes.lte(3)),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() {\r\n return `All Antimatter Dimensions are stronger in the first ${formatInt(3)} minutes of Infinities.`;\r\n },\r\n effect: () => Decimal.max(new Decimal(6).div(Time.thisInfinity.totalMinutes.add(3)), 1),\r\n effectCondition: () => Time.thisInfinity.totalMinutes.lt(3),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 57,\r\n name: \"Gift from the Gods\",\r\n get description() {\r\n return `Complete the 8th Antimatter Dimension Autobuyer Challenge in ${formatInt(3)} minutes or less.`;\r\n },\r\n checkRequirement: () => (NormalChallenge(8).isOnlyActiveChallenge && Time.thisInfinityRealTime.totalMinutes.lte(3)),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() {\r\n return `Dimensional Sacrifice is stronger.\r\n ${Sacrifice.getSacrificeDescription({ \"Achievement32\": true, \"Achievement57\": false, \"Achievement88\": false })} ➜\r\n ${Sacrifice.getSacrificeDescription({ \"Achievement32\": true, \"Achievement57\": true, \"Achievement88\": false })}`;\r\n },\r\n effect: 0.1\r\n },\r\n {\r\n id: 58,\r\n name: \"This is fine.\",\r\n get description() { return `Complete the Tickspeed Autobuyer Challenge in ${formatInt(3)} minutes or less.`; },\r\n checkRequirement: () => (NormalChallenge(9).isOnlyActiveChallenge && Time.thisInfinityRealTime.totalMinutes.lte(3)),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() {\r\n return `Increase the multiplier for buying ${formatInt(10)} Antimatter Dimensions by +${formatPercents(0.01)}.`;\r\n },\r\n effect: 1.01\r\n },\r\n {\r\n id: 61,\r\n name: \"Bulked Up\",\r\n get description() {\r\n return `Get all of your Antimatter Dimension Autobuyer bulk amounts to\r\n ${formatInt(Autobuyer.antimatterDimension.bulkCap)}.`;\r\n },\r\n checkRequirement: () => Autobuyer.antimatterDimension.zeroIndexed.every(x => x.hasMaxedBulk),\r\n checkEvent: [GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT,\r\n GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION],\r\n reward: \"Dimension Autobuyer bulks are unlimited.\"\r\n },\r\n {\r\n id: 62,\r\n name: \"Oh, hey... You're still here?\",\r\n get description() { return `Reach ${format(DC.E8)} Infinity Points per minute.`; },\r\n checkRequirement: () => Player.bestRunIPPM.exponent >= 8,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER\r\n },\r\n {\r\n id: 63,\r\n name: \"A new beginning\",\r\n description: \"Begin generation of Infinity Power.\",\r\n checkRequirement: () => Currency.infinityPower.gt(1),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 64,\r\n name: \"Zero Deaths\",\r\n description: \"Get to Infinity without Dimension Boosts or Antimatter Galaxies while in a Normal Challenge.\",\r\n checkRequirement: () => (player.galaxies === 0 && DimBoost.purchasedBoosts === 0 && NormalChallenge.isRunning),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Antimatter Dimensions 1-4 are ${formatPercents(0.25)} stronger.`; },\r\n effect: 1.25\r\n },\r\n {\r\n id: 65,\r\n name: \"Not-so-challenging\",\r\n get description() { return `Get the sum of all of your Normal Challenge times under ${formatInt(3)} minutes.`; },\r\n checkRequirement: () => Time.challengeSum.totalMinutes.lt(3),\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.REALITY_RESET_AFTER],\r\n get reward() {\r\n return `All Antimatter Dimensions are stronger in the first ${formatInt(3)} minutes of Infinities,\r\n but only in Challenges.`;\r\n },\r\n effect: () => (Player.isInAnyChallenge ? Decimal.max(new Decimal(4).div(Time.thisInfinity.totalMinutes.add(1)), 1).toNumber() : 1),\r\n effectCondition: () => Player.isInAnyChallenge && Time.thisInfinity.totalMinutes.lt(3),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 66,\r\n name: \"Faster than a squared potato\",\r\n get description() { return `Get more than ${format(DC.E58)} ticks per second.`; },\r\n checkRequirement: () => Tickspeed.current.exponent <= -55,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Multiply starting tickspeed by ${formatX(1.02, 0, 2)}.`; },\r\n effect: 0.98\r\n },\r\n {\r\n id: 67,\r\n name: \"Infinitely Challenging\",\r\n description: \"Complete an Infinity Challenge.\",\r\n checkRequirement: () => InfinityChallenges.completed.length > 0,\r\n checkEvent: [GAME_EVENT.INFINITY_CHALLENGE_COMPLETED, GAME_EVENT.REALITY_RESET_AFTER]\r\n },\r\n {\r\n id: 68,\r\n name: \"You did this again just for the achievement right?\",\r\n get description() {\r\n return `Complete the 3rd Antimatter Dimension Autobuyer Challenge in ${formatInt(10)} seconds or less.`;\r\n },\r\n checkRequirement: () => (NormalChallenge(3).isOnlyActiveChallenge && Time.thisInfinityRealTime.totalSeconds.lte(10)),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `1st Antimatter Dimensions are ${formatPercents(0.5)} stronger.`; },\r\n effect: 1.5\r\n },\r\n {\r\n id: 71,\r\n name: \"ERROR 909: Dimension not found\",\r\n description:\r\n `Get to Infinity with only a single 1st Antimatter Dimension without Dimension Boosts\r\n or Antimatter Galaxies, while in the 2nd Antimatter Dimension Autobuyer Challenge.`,\r\n checkRequirement: () =>\r\n (NormalChallenge(2).isOnlyActiveChallenge &&\r\n AntimatterDimension(1).amount.eq(1) &&\r\n DimBoost.purchasedBoosts === 0 &&\r\n player.galaxies === 0),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `1st Antimatter Dimensions are ${formatInt(3)} times stronger.`; },\r\n effect: 3\r\n },\r\n {\r\n id: 72,\r\n name: \"Can't hold all these infinities\",\r\n get description() {\r\n return `Get all Antimatter Dimension multipliers over ${formatX(Decimal.NUMBER_MAX_VALUE, 1)}.`;\r\n },\r\n checkRequirement: () => AntimatterDimensions.all.every(x => x.multiplier.gte(Decimal.NUMBER_MAX_VALUE)),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `All Antimatter Dimensions are ${formatPercents(0.1)} stronger.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 73,\r\n name: \"THIS ACHIEVEMENT DOESN'T EXIST\",\r\n get description() { return `Get ${formatPostBreak(DC.D9_9999E9999, 4)} antimatter.`; },\r\n checkRequirement: () => Currency.antimatter.gte(DC.D9_9999E9999),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Antimatter Dimensions gain a multiplier based on current antimatter.\",\r\n effect: () => Currency.antimatter.value.pow(0.00002).plus(1),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 74,\r\n name: \"Not a second lost\",\r\n get description() { return `Get the sum of all best Normal Challenge times under ${formatInt(5)} seconds.`; },\r\n checkRequirement: () => Time.challengeSum.totalSeconds.lt(5),\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.REALITY_RESET_AFTER],\r\n get reward() { return `All Antimatter Dimensions are ${formatPercents(0.4)} stronger, but only in challenges.`; },\r\n effect: 1.4,\r\n effectCondition: () => Player.isInAnyChallenge\r\n },\r\n {\r\n id: 75,\r\n name: \"NEW DIMENSIONS???\",\r\n description: \"Unlock the 4th Infinity Dimension.\",\r\n checkRequirement: () => InfinityDimension(4).isUnlocked,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Your Achievement bonus affects Infinity Dimensions.\",\r\n effect: () => Achievements.power\r\n },\r\n {\r\n id: 76,\r\n name: \"One for each dimension\",\r\n get description() { return `Play for ${formatInt(8)} days.`; },\r\n checkRequirement: () => Time.totalTimePlayed.totalDays.gt(8),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Extremely small multiplier to Antimatter Dimensions based on time played.\",\r\n effect: () => Decimal.max(Decimal.pow(Time.totalTimePlayed.totalDays.div(2), 0.05), 1),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 77,\r\n name: \"1 Million is a lot\",\r\n get description() { return `Reach ${format(1e6)} Infinity Power.`; },\r\n checkRequirement: () => Currency.infinityPower.exponent >= 6,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 78,\r\n name: \"Blink of an eye\",\r\n get description() { return `Infinity in under ${formatInt(250)}ms.`; },\r\n checkRequirement: () => Time.thisInfinityRealTime.totalMilliseconds.lt(250),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() {\r\n return `Start with ${format(5e25)} antimatter.`;\r\n },\r\n effect: 5e25\r\n },\r\n {\r\n id: 81,\r\n name: \"Game Design Is My Passion\",\r\n get description() { return `Beat Infinity Challenge 5 in ${formatInt(15)} seconds or less.`; },\r\n checkRequirement: () => InfinityChallenge(5).isRunning && Time.thisInfinityRealTime.totalSeconds.lte(15),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE\r\n },\r\n {\r\n id: 82,\r\n name: \"Anti-antichallenged\",\r\n get description() { return `Complete all ${formatInt(8)} Infinity Challenges.`; },\r\n checkRequirement: () => InfinityChallenges.completed.length === 8,\r\n checkEvent: [GAME_EVENT.INFINITY_CHALLENGE_COMPLETED, GAME_EVENT.REALITY_RESET_AFTER],\r\n },\r\n {\r\n id: 83,\r\n name: \"YOU CAN GET 50 GALAXIES?!?!\",\r\n get description() { return `Get ${formatInt(50)} Antimatter Galaxies.`; },\r\n checkRequirement: () => player.galaxies >= 50,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,\r\n get reward() { return `Tickspeed is just over ${formatPercents(0.05)} faster per Antimatter Galaxy.`; },\r\n effect: () => DC.D0_95.pow(player.galaxies),\r\n formatEffect: value => `${formatX(value.recip(), 2, 2)}`\r\n },\r\n {\r\n id: 84,\r\n name: \"I got a few to spare\",\r\n get description() { return `Reach ${formatPostBreak(\"1e35000\")} antimatter.`; },\r\n checkRequirement: () => Currency.antimatter.exponent >= 35000,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Antimatter Dimensions are stronger the more unspent antimatter you have.\",\r\n effect: () => Currency.antimatter.value.pow(0.00002).plus(1),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 85,\r\n name: \"ALL YOUR IP ARE BELONG TO US\",\r\n get description() { return `Big Crunch for ${format(DC.E150)} Infinity Points.`; },\r\n checkRequirement: () => gainedInfinityPoints().exponent >= 150,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Additional ${formatX(4)} multiplier to Infinity Points.`; },\r\n effect: 4\r\n },\r\n {\r\n id: 86,\r\n name: \"Do you even bend time bro?\",\r\n get description() { return `Reach ${formatX(1000)} faster per Tickspeed upgrade.`; },\r\n checkRequirement: () => Tickspeed.multiplier.recip().gte(1000),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `All Galaxies are ${formatPercents(0.01)} stronger.`; },\r\n effect: 1.01\r\n },\r\n {\r\n id: 87,\r\n name: \"2 MILLION INFINITIES\",\r\n get description() { return `Infinity ${format(DC.D2E6)} times.`; },\r\n checkRequirement: () => Currency.infinities.gt(DC.D2E6),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() {\r\n return `Infinities more than ${formatInt(5)} seconds long\r\n give ${formatX(250)} more Infinities.`;\r\n },\r\n effect: 250,\r\n effectCondition: () => Time.thisInfinity.totalSeconds.gt(5)\r\n },\r\n {\r\n id: 88,\r\n name: \"Yet another infinity reference\",\r\n get description() {\r\n return `Get a ${formatX(Decimal.NUMBER_MAX_VALUE, 1, 0)} multiplier in a single Dimensional Sacrifice.`;\r\n },\r\n checkRequirement: () => Sacrifice.nextBoost.gte(Decimal.NUMBER_MAX_VALUE),\r\n checkEvent: GAME_EVENT.SACRIFICE_RESET_BEFORE,\r\n get reward() {\r\n return `Dimensional Sacrifice is stronger.\r\n ${Sacrifice.getSacrificeDescription({ \"Achievement32\": true, \"Achievement57\": true, \"Achievement88\": false })} ➜\r\n ${Sacrifice.getSacrificeDescription({ \"Achievement32\": true, \"Achievement57\": true, \"Achievement88\": true })}`;\r\n },\r\n effect: 0.1\r\n },\r\n {\r\n id: 91,\r\n name: \"Ludicrous Speed\",\r\n get description() {\r\n return `Big Crunch for ${format(DC.E200)} Infinity Points in ${formatInt(2)} seconds or less.`;\r\n },\r\n checkRequirement: () => (gainedInfinityPoints().exponent >= 200 && Time.thisInfinityRealTime.totalSeconds.lte(2)),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() {\r\n return `All Antimatter Dimensions are significantly stronger in the\r\n first ${formatInt(5)} seconds of Infinities.`;\r\n },\r\n effect: () => Math.max((DC.D5.sub(Time.thisInfinity.totalSeconds)).times(60).max(0).toNumber(), 1),\r\n effectCondition: () => Time.thisInfinity.totalSeconds.lt(5),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 92,\r\n name: \"I brake for NOBODY!\",\r\n get description() {\r\n return `Big Crunch for ${format(DC.E250)} Infinity Points in ${formatInt(20)} seconds or less.`;\r\n },\r\n checkRequirement: () => (gainedInfinityPoints().exponent >= 250 && Time.thisInfinityRealTime.totalSeconds.lte(20)),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() {\r\n return `All Antimatter Dimensions are significantly stronger in the\r\n first ${formatInt(60)} seconds of Infinities.`;\r\n },\r\n effect: () => Math.max((DC.D1.sub(Time.thisInfinity.totalMinutes)).times(100).max(0).toNumber(), 1),\r\n effectCondition: () => Time.thisInfinity.totalMinutes.lt(1),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 93,\r\n name: \"MAXIMUM OVERDRIVE\",\r\n get description() { return `Big Crunch for ${format(DC.E300)} Infinity Points.`; },\r\n checkRequirement: () => gainedInfinityPoints().exponent >= 300,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Additional ${formatX(4)} multiplier to Infinity Points.`; },\r\n effect: 4\r\n },\r\n {\r\n id: 94,\r\n name: \"4.3333 minutes of Infinity\",\r\n get description() { return `Reach ${format(DC.E260)} Infinity Power.`; },\r\n checkRequirement: () => Currency.infinityPower.exponent >= 260,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Double Infinity Power gain.\",\r\n effect: 2\r\n },\r\n {\r\n id: 95,\r\n name: \"Is this safe?\",\r\n get description() { return `Gain ${format(Decimal.NUMBER_MAX_VALUE, 1, 0)} Replicanti in ${formatInt(1)} hour.`; },\r\n get reward() { return `You keep your Replicanti and ${formatInt(1)} Replicanti Galaxy on Infinity.`; },\r\n checkRequirement: () =>\r\n ((Replicanti.amount.eq(Decimal.NUMBER_MAX_VALUE) || player.replicanti.galaxies > 0) &&\r\n Time.thisInfinityRealTime.totalHours.lte(1)),\r\n checkEvent: GAME_EVENT.REPLICANTI_TICK_AFTER\r\n },\r\n {\r\n id: 96,\r\n name: \"Time is relative\",\r\n description: \"Go Eternal.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE\r\n },\r\n {\r\n id: 97,\r\n name: \"Like jumping on a lego\",\r\n get description() { return `Get the sum of Infinity Challenge times under ${format(6.66, 2, 2)} seconds.`; },\r\n checkRequirement: () => Time.infinityChallengeSum.totalSeconds.lt(6.66),\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.REALITY_RESET_AFTER],\r\n },\r\n {\r\n id: 98,\r\n name: \"0 degrees from Infinity\",\r\n description: \"Unlock the 8th Infinity Dimension.\",\r\n checkRequirement: () => InfinityDimension(8).isUnlocked,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 101,\r\n name: \"8 nobody got time for that\",\r\n description: \"Eternity without buying Antimatter Dimensions 1-7.\",\r\n checkRequirement: () => player.requirementChecks.eternity.onlyAD8,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE\r\n },\r\n {\r\n id: 102,\r\n name: \"This mile took an eternity\",\r\n description: \"Get all Eternity milestones.\",\r\n checkRequirement: () => EternityMilestone.all.every(m => m.isReached),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 103,\r\n name: \"Tätä saavutusta ei ole olemassa II\",\r\n get description() { return `Reach ${formatPostBreak(DC.D9_99999E999, 5, 0)} Infinity Points.`; },\r\n checkRequirement: () => Currency.infinityPoints.exponent >= 1000,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() {\r\n return `Make the Infinity Point formula better. log(x)/${formatInt(308)} ➜ log(x)/${formatFloat(307.8, 1)}`;\r\n },\r\n effect: 307.8\r\n },\r\n {\r\n id: 104,\r\n name: \"That wasn't an eternity\",\r\n get description() { return `Eternity in under ${formatInt(30)} seconds.`; },\r\n checkRequirement: () => Time.thisEternity.totalSeconds.lt(30),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n get reward() { return `Start Eternities with ${format(5e25)} Infinity Points.`; },\r\n effect: 5e25\r\n },\r\n {\r\n id: 105,\r\n name: \"Infinite Time\",\r\n get description() { return `Have ${formatInt(308)} Tickspeed upgrades from Time Dimensions.`; },\r\n checkRequirement: () => player.totalTickGained >= 308,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Time Dimensions gain a multiplier based on tickspeed.\",\r\n effect: () => Tickspeed.perSecond.pow(0.000005),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 106,\r\n name: \"The swarm\",\r\n get description() { return `Get ${formatInt(10)} Replicanti Galaxies in ${formatInt(15)} seconds.`; },\r\n checkRequirement: () => Replicanti.galaxies.total >= 10 && Time.thisInfinity.totalSeconds.lt(15),\r\n checkEvent: GAME_EVENT.REPLICANTI_TICK_AFTER\r\n },\r\n {\r\n id: 107,\r\n name: \"Do you really need a guide for this?\",\r\n get description() { return `Eternity with less than ${formatInt(10)} Infinities.`; },\r\n checkRequirement: () => Currency.infinities.lt(10),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE\r\n },\r\n {\r\n id: 108,\r\n name: \"We COULD afford 9\",\r\n get description() { return `Eternity with exactly ${formatInt(9)} Replicanti.`; },\r\n checkRequirement: () => Replicanti.amount.round().eq(9),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE\r\n },\r\n {\r\n id: 111,\r\n name: \"Yo dawg, I heard you liked infinities...\",\r\n get description() {\r\n return `Have all your Infinities in your past ${formatInt(10)} Infinities be at least\r\n ${format(Decimal.NUMBER_MAX_VALUE, 1, 0)} times higher Infinity Points than the previous one.`;\r\n },\r\n checkRequirement: () => {\r\n if (player.records.recentInfinities.some(i => i[0] === Number.MAX_VALUE)) return false;\r\n const infinities = player.records.recentInfinities.map(run => run[2]);\r\n for (let i = 0; i < infinities.length - 1; i++) {\r\n if (infinities[i].lt(infinities[i + 1].times(Decimal.NUMBER_MAX_VALUE))) return false;\r\n }\r\n return true;\r\n },\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER,\r\n reward: \"Your antimatter doesn't reset on Dimension Boosts or Antimatter Galaxies.\"\r\n },\r\n {\r\n id: 112,\r\n name: \"Never again\",\r\n get description() { return `Get the sum of Infinity Challenge times below ${formatInt(750)}ms.`; },\r\n checkRequirement: () => Time.infinityChallengeSum.totalMilliseconds.lt(750),\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.REALITY_RESET_AFTER],\r\n },\r\n {\r\n id: 113,\r\n name: \"Eternities are the new infinity\",\r\n get description() { return `Eternity in under ${formatInt(250)}ms.`; },\r\n checkRequirement: () => Time.thisEternity.totalMilliseconds.lt(250),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n get reward() { return `Gain ${formatX(2)} more Eternities.`; },\r\n effect: 2,\r\n },\r\n {\r\n id: 114,\r\n name: \"You're a mistake\",\r\n description: \"Fail an Eternity Challenge.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.CHALLENGE_FAILED,\r\n reward: \"A fading sense of accomplishment.\",\r\n effect: () => \"Sense of accomplishment (fading)\"\r\n },\r\n {\r\n id: 115,\r\n name: \"I wish I had gotten 7 eternities\",\r\n description: \"Start an Infinity Challenge inside an Eternity Challenge.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 116,\r\n name: \"Do I really need to infinity\",\r\n get description() { return `Eternity with only ${formatInt(1)} Infinity.`; },\r\n checkRequirement: () => Currency.infinities.lte(1),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n reward: \"Multiplier to Infinity Points based on Infinities.\",\r\n effect: () => Decimal.pow(Currency.infinitiesTotal.value.clampMin(1), LOG10_2 / 4).powEffectOf(TimeStudy(31)).clampMax('1e10000000000'),\r\n cap: () => {return Effarig.eternityCap===undefined ? new Decimal('1e10000000000') : Effarig.eternityCap},\r\n formatEffect: value => {\r\n // Since TS31 is already accounted for in the effect prop, we need to \"undo\" it to display the base value here\r\n const mult = formatX(value, 2, 2);\r\n return TimeStudy(31).canBeApplied\r\n ? `${formatX(value.pow(DC.D1.div(TimeStudy(31).effectValue)), 2, 1)} (After TS31: ${mult})`\r\n : mult;\r\n }\r\n },\r\n {\r\n id: 117,\r\n name: \"Costco sells Dimboosts now!\",\r\n get description() { return `Bulk buy ${formatInt(750)} Dimension Boosts at once.`; },\r\n checkRequirement: ([bulk]) => bulk >= 750,\r\n checkEvent: GAME_EVENT.DIMBOOST_AFTER,\r\n get reward() {\r\n return `The multiplier from Dimension Boosts to Antimatter Dimensions is ${formatPercents(0.01)} higher.`;\r\n },\r\n effect: 1.01\r\n },\r\n {\r\n id: 118,\r\n name: \"IT'S OVER 9000\",\r\n get description() { return `Get a total Dimensional Sacrifice multiplier of ${formatPostBreak(DC.E9000)}.`; },\r\n checkRequirement: () => Sacrifice.totalBoost.exponent >= 9000,\r\n checkEvent: GAME_EVENT.SACRIFICE_RESET_AFTER,\r\n reward: \"Dimensional Sacrifice doesn't reset your Antimatter Dimensions.\",\r\n },\r\n {\r\n id: 121,\r\n name: \"Can you get infinite IP?\",\r\n get description() { return `Reach ${formatPostBreak(\"1e30008\")} Infinity Points.`; },\r\n checkRequirement: () => Currency.infinityPoints.exponent >= 30008,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 122,\r\n name: \"You're already dead.\",\r\n description: \"Eternity without buying Antimatter Dimensions 2-8.\",\r\n checkRequirement: () => player.requirementChecks.eternity.onlyAD1,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE\r\n },\r\n {\r\n id: 123,\r\n name: \"5 more eternities until the update\",\r\n get description() { return `Complete ${formatInt(50)} unique Eternity Challenge tiers.`; },\r\n checkRequirement: () => EternityChallenges.completions >= 50,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER\r\n },\r\n {\r\n id: 124,\r\n name: \"Long lasting relationship\",\r\n get description() {\r\n return `Have your Infinity Power per second exceed your Infinity Power\r\n for ${formatInt(60)} consecutive seconds during a single Infinity.`;\r\n },\r\n checkRequirement: () => AchievementTimers.marathon2\r\n .check(\r\n !EternityChallenge(7).isRunning &&\r\n InfinityDimension(1).productionPerSecond.gt(Currency.infinityPower.value),\r\n 60\r\n ),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 125,\r\n name: \"Like feasting on a behind\",\r\n get description() {\r\n return `Reach ${format(DC.E90)} Infinity Points without having any Infinities\r\n or any 1st Antimatter Dimensions in your current Eternity.`;\r\n },\r\n checkRequirement: () => (Currency.infinityPoints.exponent >= 90 &&\r\n player.requirementChecks.eternity.noAD1 && Currency.infinities.eq(0)),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Infinity Point multiplier based on time spent this Infinity.\",\r\n effect() {\r\n const thisInfinity = Time.thisInfinity.totalSeconds.times(10).add(1);\r\n return DC.D2.pow((Decimal.min(Decimal.pow(thisInfinity, 0.11), 500)).times(Decimal.log(thisInfinity)));\r\n },\r\n cap: () => Effarig.eternityCap,\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 126,\r\n name: \"Popular music\",\r\n get description() { return `Have ${formatInt(180)} times more Replicanti Galaxies than Antimatter Galaxies.`; },\r\n checkRequirement: () => (Replicanti.galaxies.total >= 180 * player.galaxies && player.galaxies > 0),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() {\r\n return `Replicanti Galaxies divide your Replicanti by ${format(Decimal.NUMBER_MAX_VALUE, 1, 0)}\r\n instead of resetting them to ${formatInt(1)}.`;\r\n },\r\n },\r\n {\r\n id: 127,\r\n name: \"But I wanted another prestige layer...\",\r\n get description() { return `Reach ${format(Decimal.NUMBER_MAX_VALUE, 1, 0)} Eternity Points.`; },\r\n checkRequirement: () => Currency.eternityPoints.gte(Decimal.NUMBER_MAX_VALUE),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 128,\r\n name: \"What do I have to do to get rid of you\",\r\n get description() { return `Reach ${formatPostBreak(\"1e22000\")} Infinity Points without any Time Studies.`; },\r\n checkRequirement: () => (Currency.infinityPoints.exponent >= 22000 && player.timestudy.studies.length === 0),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Time Dimensions are multiplied by the number of Time Studies you have.\",\r\n effect: () => Math.max(player.timestudy.studies.length, 1),\r\n formatEffect: value => `${formatX(value)}`\r\n },\r\n {\r\n id: 131,\r\n name: \"No ethical consumption\",\r\n get description() { return `Get ${format(DC.D2E9)} Banked Infinities.`; },\r\n checkRequirement: () => Currency.infinitiesBanked.gt(DC.D2E9),\r\n checkEvent: [GAME_EVENT.ETERNITY_RESET_AFTER, GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION],\r\n get reward() {\r\n return `After Eternity you permanently keep ${formatPercents(0.05)} of your Infinities as Banked Infinities.`;\r\n },\r\n effect: () => Currency.infinities.value.times(0.05).floor()\r\n },\r\n {\r\n id: 132,\r\n name: \"Unique snowflakes\",\r\n get description() {\r\n return `Have ${formatInt(569)} Antimatter Galaxies without gaining any\r\n Replicanti Galaxies in your current Eternity.`;\r\n },\r\n checkRequirement: () => (player.galaxies >= 569 && player.requirementChecks.eternity.noRG),\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,\r\n reward: \"Gain a multiplier to Tachyon Particle and Dilated Time gain based on Antimatter Galaxies.\",\r\n effect: () => 1.22 * Math.max(Math.pow(player.galaxies, 0.04), 1),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 133,\r\n name: \"I never liked this infinity stuff anyway\",\r\n get description() {\r\n return `Reach ${formatPostBreak(DC.E200000)} Infinity Points without\r\n buying any Infinity Dimensions or the ${formatX(2)} Infinity Point multiplier.`;\r\n },\r\n checkRequirement: () =>\r\n (Array.dimensionTiers.map(InfinityDimension).every(dim => dim.baseAmount === 0) &&\r\n player.IPMultPurchases === 0 &&\r\n Currency.infinityPoints.exponent >= 200000),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"You start Eternities with all Infinity Challenges unlocked and completed.\"\r\n },\r\n {\r\n id: 134,\r\n name: \"When will it be enough?\",\r\n get description() { return `Reach ${formatPostBreak(DC.E18000)} Replicanti.`; },\r\n checkRequirement: () => Replicanti.amount.exponent >= 18000,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() {\r\n return `You gain Replicanti ${formatInt(2)} times faster under ${format(replicantiCap(), 1)} Replicanti.`;\r\n }\r\n },\r\n {\r\n id: 135,\r\n name: \"Faster than a potato^286078\",\r\n get description() { return `Get more than ${formatPostBreak(\"1e8296262\")} ticks per second.`; },\r\n checkRequirement: () => Tickspeed.current.exponent <= -8296262,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 136,\r\n name: \"I told you already, time is relative\",\r\n description: \"Dilate time.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 137,\r\n name: \"Now you're thinking with dilation!\",\r\n get description() {\r\n return `Get ${formatPostBreak(\"1e260000\")} antimatter\r\n in ${formatInt(1)} minute or less while Dilated.`;\r\n },\r\n checkRequirement: () =>\r\n (Currency.antimatter.exponent >= 260000 &&\r\n Time.thisEternity.totalMinutes.lte(1) &&\r\n player.dilation.active),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Gain ${formatX(2)} Dilated Time and Time Theorems while Dilated.`; },\r\n effect: () => (player.dilation.active ? 2 : 1),\r\n },\r\n {\r\n id: 138,\r\n name: \"This is what I have to do to get rid of you.\",\r\n get description() {\r\n return `Reach ${formatPostBreak(\"1e26000\")} Infinity Points without any Time Studies while Dilated.`;\r\n },\r\n checkRequirement: () =>\r\n (player.timestudy.studies.length === 0 &&\r\n player.dilation.active &&\r\n Currency.infinityPoints.exponent >= 26000),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Removes the downsides from Time Study 131 and 133 in the Active and Idle Time Study paths.\"\r\n },\r\n {\r\n id: 141,\r\n name: \"Snap back to reality\",\r\n description: \"Make a new Reality.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n get reward() {\r\n return `${formatX(4)} Infinity Point gain, and increase the multiplier for buying ${formatInt(10)}\r\n Antimatter Dimensions by +${format(0.1, 0, 1)}.`;\r\n },\r\n effects: {\r\n ipGain: 4,\r\n buyTenMult: 0.1\r\n }\r\n },\r\n {\r\n id: 142,\r\n name: \"How does this work?\",\r\n description: \"Unlock the automator.\",\r\n checkRequirement: () => Player.automatorUnlocked,\r\n checkEvent: [GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_BOUGHT, GAME_EVENT.PERK_BOUGHT,\r\n GAME_EVENT.BLACK_HOLE_UNLOCKED],\r\n get reward() { return `Dimension Boosts are ${formatPercents(0.5)} stronger.`; },\r\n effect: 1.5,\r\n },\r\n {\r\n id: 143,\r\n name: \"Yo dawg, I heard you liked reskins...\",\r\n get description() {\r\n return `Have all your Eternities in your past ${formatInt(10)} Eternities be at least\r\n ${format(Decimal.NUMBER_MAX_VALUE, 1, 0)} times higher Eternity Points than the previous one.`;\r\n },\r\n checkRequirement: () => {\r\n if (player.records.recentEternities.some(i => i[0] === Number.MAX_VALUE)) return false;\r\n const eternities = player.records.recentEternities.map(run => run[2]);\r\n for (let i = 0; i < eternities.length - 1; i++) {\r\n if (eternities[i].lt(eternities[i + 1].times(Decimal.NUMBER_MAX_VALUE))) return false;\r\n }\r\n return true;\r\n },\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n reward: \"Galaxies no longer reset Dimension Boosts.\"\r\n },\r\n {\r\n id: 144,\r\n name: \"Is this an Interstellar reference?\",\r\n description: \"Unlock the Black Hole.\",\r\n checkRequirement: () => BlackHole(1).isUnlocked,\r\n checkEvent: GAME_EVENT.BLACK_HOLE_UNLOCKED,\r\n },\r\n {\r\n id: 145,\r\n name: \"Are you sure these are the right way around?\",\r\n description: \"Have either Black Hole interval smaller than its duration.\",\r\n checkRequirement: () => BlackHoles.list.some(bh => bh.interval < bh.duration),\r\n checkEvent: GAME_EVENT.BLACK_HOLE_UPGRADE_BOUGHT,\r\n get reward() { return `Black Hole intervals are ${formatPercents(0.1)} shorter.`; },\r\n effect: 0.9\r\n },\r\n {\r\n id: 146,\r\n name: \"Perks of living\",\r\n description: \"Have all Perks bought.\",\r\n checkRequirement: () => player.reality.perks.size === Perks.all.length,\r\n checkEvent: GAME_EVENT.PERK_BOUGHT,\r\n get reward() { return `+${formatPercents(0.01)} Glyph rarity.`; },\r\n effect: 1\r\n },\r\n {\r\n id: 147,\r\n name: \"Master of Reality\",\r\n description: \"Have all Reality upgrades bought.\",\r\n checkRequirement: () => RealityUpgrades.allBought,\r\n checkEvent: GAME_EVENT.REALITY_UPGRADE_BOUGHT,\r\n reward: \"Unlock Teresa, the Celestial of Reality.\"\r\n },\r\n {\r\n id: 148,\r\n name: \"Royal flush\",\r\n description: \"Reality with one of each basic Glyph type.\",\r\n checkRequirement: () => BASIC_GLYPH_TYPES\r\n .every(type => Glyphs.activeList.some(g => g.type === type)),\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n reward: \"Gained Glyph level is increased by number of distinct Glyph types equipped.\",\r\n effect: () => (new Set(Glyphs.activeWithoutCompanion.map(g => g.type))).size,\r\n formatEffect: value => `+${formatInt(value)}`\r\n },\r\n {\r\n id: 151,\r\n name: \"You really didn't need it anyway\",\r\n get description() {\r\n return `Get ${formatInt(800)} Antimatter Galaxies without\r\n buying 8th Antimatter Dimensions in your current Infinity.`;\r\n },\r\n checkRequirement: () => (player.galaxies >= 800 && player.requirementChecks.infinity.noAD8),\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,\r\n reward: \"Unlock V, the Celestial of Achievements.\"\r\n },\r\n {\r\n id: 152,\r\n name: \"Y'all got any more of them Glyphs?\",\r\n get description() { return `Have ${formatInt(100)} Glyphs in your inventory.`; },\r\n checkRequirement: () => Glyphs.inventoryList.length >= 100,\r\n checkEvent: GAME_EVENT.GLYPHS_CHANGED\r\n },\r\n {\r\n id: 153,\r\n name: \"More like \\\"reallydoesn'tmatter\\\"\",\r\n description: \"Reality without producing antimatter.\",\r\n checkRequirement: () => player.requirementChecks.reality.noAM,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n },\r\n {\r\n id: 154,\r\n name: \"I am speed\",\r\n get description() { return `Reality in under ${formatInt(5)} seconds (game time).`; },\r\n checkRequirement: () => Time.thisReality.totalSeconds.lt(5),\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n get reward() { return `${formatPercents(MendingMilestone.two.isReached ? 1 : 0.1)} chance each Reality of ${formatX(2)} Realities and Perk Points.`; },\r\n effect: 0.1\r\n },\r\n {\r\n id: 155,\r\n name: \"Achievement #15983\",\r\n get description() { return `Play for ${formatFloat(13.7, 1)} billion years.`; },\r\n checkRequirement: () => Time.totalTimePlayed.totalYears.gt(13.7e9),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Black Hole durations are ${formatPercents(0.1)} longer.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 156,\r\n name: \"College Dropout\",\r\n description: \"Reality without buying Time Theorems.\",\r\n checkRequirement: () => player.requirementChecks.reality.noPurchasedTT,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n get reward() { return `Gain ${formatX(2.5, 0, 1)} generated Time Theorems, and a free coupon to McDonalds™️.`; },\r\n effect: 2.5\r\n },\r\n {\r\n id: 157,\r\n name: \"It's super effective!\",\r\n get description() { return `Get a Glyph with ${formatInt(4)} effects.`; },\r\n checkRequirement: () => Glyphs.activeList.concat(Glyphs.inventoryList).map(\r\n glyph => getGlyphEffectsFromBitmask(glyph.effects, 0, 0)\r\n .filter(effect => effect.isGenerated).length\r\n ).max() >= 4,\r\n checkEvent: GAME_EVENT.GLYPHS_CHANGED\r\n },\r\n {\r\n id: 158,\r\n name: \"Bruh, are you like, inside the hole?\",\r\n description: \"Make both Black Holes permanent.\",\r\n checkRequirement: () => (BlackHole(1).isPermanent && BlackHole(2).isPermanent),\r\n checkEvent: GAME_EVENT.BLACK_HOLE_UPGRADE_BOUGHT,\r\n get reward() { return `Black Hole power increased by ${formatPercents(0.1)}.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 161,\r\n name: \"that's where you're wrong kiddo\",\r\n get description() { return `Get ${formatPostBreak(DC.E1E8)} antimatter while Dilated.`; },\r\n checkRequirement: () => Currency.antimatter.exponent >= 100000000 && player.dilation.active,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 162,\r\n name: \"Reinstalled the game and rejoined the server\",\r\n description: \"Have every Time Study at once.\",\r\n checkRequirement: () => player.timestudy.studies.length >= 58,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 163,\r\n name: \"Actually, super easy! Barely an inconvenience!\",\r\n get description() {\r\n return `Complete all the Eternity Challenges ${formatInt(5)} times with less than ${formatInt(1)}\r\n second (game time) in your current Reality.`;\r\n },\r\n checkRequirement: () => EternityChallenges.all.map(ec => ec.completions).min() >= 5 &&\r\n Time.thisReality.totalSeconds.lt(1),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 164,\r\n name: \"Infinity times two\",\r\n get description() { return `Get ${format(Decimal.NUMBER_MAX_VALUE, 1)} Infinities.`; },\r\n checkRequirement: () => Currency.infinitiesTotal.gte(Decimal.NUMBER_MAX_VALUE),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Gain ×${formatInt(1024)} more Infinities.`; },\r\n effect: 1024\r\n },\r\n {\r\n id: 165,\r\n name: \"Perfectly balanced\",\r\n get description() { return `Get a level ${formatInt(5000)} Glyph with all Glyph level factors equally weighted.`; },\r\n checkRequirement: () => (gainedGlyphLevel().actualLevel >= 5000 &&\r\n [\"repl\", \"dt\", \"eternities\"].every(\r\n i => player.celestials.effarig.glyphWeights[i] === player.celestials.effarig.glyphWeights.ep)),\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n reward: \"Unlock optimal automatic Glyph level factor adjustment.\"\r\n },\r\n {\r\n id: 166,\r\n name: \"Nicenice.\",\r\n get description() { return `Get a Glyph with level exactly ${formatInt(6969)}.`; },\r\n checkRequirement: () => gainedGlyphLevel().actualLevel === 6969,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n get reward() { return `+${formatInt(69)} to Glyph level.`; },\r\n effect: 69\r\n },\r\n {\r\n id: 167,\r\n name: \"Mr. Layer? Sorry, you're not on the list\",\r\n get description() { return `Reach ${format(Decimal.NUMBER_MAX_VALUE, 1, 0)} Reality Machines.`; },\r\n checkRequirement: () => Currency.realityMachines.gte(Decimal.NUMBER_MAX_VALUE),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Gain more Reality Machines based on your current Reality Machines.\",\r\n effect: () => Math.clampMin(1, Currency.realityMachines.value.log2()),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 168,\r\n name: \"Woah, we're halfway there\",\r\n get description() { return `Get ${formatInt(50)} total Ra Celestial Memory levels.`; },\r\n checkRequirement: () => Ra.totalPetLevel >= 50,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Get ${formatPercents(0.1)} more memories.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 171,\r\n name: \"The god is delighted\",\r\n description: \"Sacrifice every sacrificable Glyph type at least once.\",\r\n checkRequirement: () => Object.values(player.reality.glyphs.sac).every(s => s.gt(0)),\r\n checkEvent: GAME_EVENT.GLYPHS_CHANGED,\r\n get reward() { return `Glyph sacrifice is ${formatX(2)} stronger.`; },\r\n effect: 2,\r\n },\r\n {\r\n id: 172,\r\n name: \"Hitchhiker's Guide to Reality\",\r\n get description() {\r\n return `Reality for ${format(Decimal.NUMBER_MAX_VALUE, 1)} Reality Machines without having\r\n any Charged Infinity Upgrades, having any equipped Glyphs, or buying any Triad Studies.`;\r\n },\r\n checkRequirement: () => MachineHandler.gainedRealityMachines.gte(Decimal.NUMBER_MAX_VALUE) &&\r\n player.celestials.ra.charged.size === 0 && Glyphs.activeWithoutCompanion.length === 0 &&\r\n player.requirementChecks.reality.noTriads,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n },\r\n {\r\n id: 173,\r\n name: \"Cet accomplissement n'existe pas III\",\r\n get description() { return `Reach ${formatPostBreak(DC.D9_99999E999, 5, 0)} Reality Machines.`; },\r\n checkRequirement: () => player.reality.realityMachines.gte(DC.D9_99999E999),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 174,\r\n name: \"Don't you already have two of these?\",\r\n description: \"Get a Singularity.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.SINGULARITY_RESET_BEFORE\r\n },\r\n {\r\n id: 175,\r\n name: \"The First Antihistorian\",\r\n get description() { return `Get ${formatInt(Ra.alchemyResourceCap)} of all Alchemy Resources.`; },\r\n checkRequirement: () => AlchemyResources.all.every(x => x.amount >= Ra.alchemyResourceCap),\r\n checkEvent: GAME_EVENT.REALITY_RESET_AFTER,\r\n get reward() {\r\n return `Synergism can go above ${formatPercents(1)} and Momentum increases ${formatX(10)} faster.`;\r\n },\r\n effect: 10,\r\n },\r\n {\r\n id: 176,\r\n name: \"Mom counted to 3\",\r\n description: \"Annihilate your Dark Matter Dimensions.\",\r\n },\r\n {\r\n id: 177,\r\n name: \"This mile took a celestial\",\r\n description: \"Complete all Singularity Milestones at least once.\",\r\n checkRequirement: () => SingularityMilestones.all.every(x => x.completions > 0),\r\n checkEvent: GAME_EVENT.SINGULARITY_RESET_AFTER,\r\n },\r\n {\r\n id: 178,\r\n name: \"Destroyer of Worlds\",\r\n get description() { return `Get ${formatInt(100000)} Antimatter Galaxies.`; },\r\n checkRequirement: () => player.galaxies >= 100000,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,\r\n get reward() { return `All Galaxies are ${formatPercents(0.01)} stronger.`; },\r\n effect: 1.01\r\n },\r\n {\r\n id: 181,\r\n displayId: 666,\r\n name: \"Antimatter Dimensions Eternal\",\r\n description: \"Doom your Reality.\",\r\n checkRequirement: () => Pelle.isDoomed,\r\n checkEvent: GAME_EVENT.REALITY_RESET_AFTER,\r\n },\r\n {\r\n id: 182,\r\n name: \"One more time\",\r\n description: \"Permanently gain back all Antimatter Dimension autobuyers.\",\r\n checkRequirement: () => (PelleUpgrade.antimatterDimAutobuyers1.canBeApplied &&\r\n PelleUpgrade.antimatterDimAutobuyers2.canBeApplied),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 183,\r\n name: \"Déjà vOoM\",\r\n description: \"Complete Infinity Challenge 5 while Doomed.\",\r\n checkRequirement: () => (Pelle.isDoomed && InfinityChallenge(5).isCompleted),\r\n checkEvent: GAME_EVENT.INFINITY_CHALLENGE_COMPLETED,\r\n // Weirdly specific reward? Yes, its V's ST bonus because we forgot to disable it\r\n // when balancing Pelle and only realised too late.\r\n get reward() { return `All Antimatter Dimensions are raised to ${formatPow(1.0812403840463596, 0, 3)}`; },\r\n effect: 1.0812403840463596\r\n },\r\n {\r\n id: 184,\r\n name: \"You're out!\",\r\n description: \"Encounter the third Pelle Strike.\",\r\n checkRequirement: () => PelleStrikes.eternity.hasStrike,\r\n checkEvent: GAME_EVENT.PELLE_STRIKE_UNLOCKED\r\n },\r\n {\r\n id: 185,\r\n name: \"Four score and seven years ago\",\r\n description: \"Encounter the fourth Pelle Strike.\",\r\n checkRequirement: () => PelleStrikes.ECs.hasStrike,\r\n checkEvent: GAME_EVENT.PELLE_STRIKE_UNLOCKED\r\n },\r\n {\r\n id: 186,\r\n displayId: 181,\r\n name: \"An unhealthy obsession\",\r\n description: `Purchase Time Study 181 while Doomed.`,\r\n },\r\n {\r\n id: 187,\r\n name: \"The One with Dilated Time\",\r\n description: \"Unlock Dilation while Doomed.\",\r\n checkRequirement: () => PelleStrikes.dilation.hasStrike,\r\n checkEvent: GAME_EVENT.PELLE_STRIKE_UNLOCKED,\r\n // We forgot to disable a singularity milestone while balancing Pelle; now it's disabled\r\n // and this upgrade has the same effect as it used to.\r\n get reward() {\r\n return `Increase the multiplier per repeatable Dilated Time\r\n multiplier upgrade by ${formatX(1.35, 0, 2)}.`;\r\n },\r\n effect: 1.35\r\n },\r\n {\r\n id: 188,\r\n name: \"The End?\",\r\n description: \"'Beat' the game.\",\r\n checkRequirement: () => GameEnd.endState > END_STATE_MARKERS.GAME_END && !GameEnd.removeAdditionalEnd,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n //Custom Achievements Start Here\r\n {\r\n id: 191,\r\n name: \"I can fix it\",\r\n description: \"Mend the Multiverse.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n reward: \"Re-enable TTM in Doomed Reality\"\r\n },\r\n {\r\n id: 192,\r\n name: \"I am no longer trapped here\",\r\n description: \"Unlock the 10 Mend Milestone\",\r\n checkRequirement: () => MendingMilestone.six.isReached,\r\n get reward() {\r\n return `Multiply Multiversal Remain Gain by ${formatX(3, 0)}.`;\r\n },\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n effect: 3,\r\n },\r\n {\r\n id: 193,\r\n displayId: 297,\r\n name: \"TRUE Royal flush\",\r\n description: \"Have one of each Glyph type equipped at once (not counting Companion).\",\r\n checkRequirement: () => FUNCTIONAL_GLYPH_TYPES\r\n .every(type => Glyphs.activeList.some(g => g.type === type)),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Gained Glyph level is ×1.0808 after instability.\",\r\n effect: 1.0808\r\n },\r\n {\r\n id: 194,\r\n name: \"Limit Break^2\",\r\n description: \"Warp Reality\",\r\n checkRequirement: () => player.reality.warped,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Challenge Times and total Antimatter are no longer reset\",\r\n effect: 1,\r\n },\r\n {\r\n id: 195,\r\n name: \"Woah, we're super halfway there\",\r\n get description() { return `Get ${formatInt(350)} total Ra Celestial Memory levels.`; },\r\n checkRequirement: () => Ra.totalPetLevel >= 350,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Get ×10 more memories.`; },\r\n effect: 10\r\n },\r\n {\r\n id: 196,\r\n name: \"196\",\r\n description: \"placeholder\",\r\n },\r\n {\r\n id: 197,\r\n name: \"197\",\r\n description: \"placeholder\",\r\n },\r\n {\r\n id: 198,\r\n name: \"198\",\r\n description: \"placeholder\",\r\n },\r\n];\r\n","export const secretAchievements = [\r\n {\r\n id: 11,\r\n name: \"The first one's always free\",\r\n description: \"Click on this Achievement.\"\r\n },\r\n {\r\n id: 12,\r\n name: \"Just in case\",\r\n get description() { return `Save ${formatInt(100)} times without refreshing.`; }\r\n },\r\n {\r\n id: 13,\r\n name: \"It pays to have respect\",\r\n description: \"Pay respects.\"\r\n },\r\n {\r\n id: 14,\r\n name: \"So do I\",\r\n description: \"Say something naughty.\"\r\n },\r\n {\r\n id: 15,\r\n name: \"Do a barrel roll!\",\r\n description: \"Do a barrel roll.\",\r\n },\r\n {\r\n id: 16,\r\n name: \"Do you enjoy pain?\",\r\n get description() {\r\n return `Use a \"painful\" notation for ${formatInt(10)} real-time minutes\r\n after doing an Eternity.`;\r\n },\r\n checkRequirement: () => AchievementTimers.pain\r\n .check(PlayerProgress.eternityUnlocked() && Notations.current.isPainful, 600),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 17,\r\n name: \"30 Lives\",\r\n description: \"Input the konami code.\"\r\n },\r\n {\r\n id: 18,\r\n name: \"Do you feel lucky? Well do ya punk?\",\r\n get description() {\r\n return `You have a ${formatInt(1)}/${formatInt(1e5)} chance of getting this achievement every second.`;\r\n }\r\n },\r\n {\r\n id: 21,\r\n name: \"Go study in real life instead\",\r\n description: \"Purchase the secret Time Study.\"\r\n },\r\n {\r\n id: 22,\r\n name: \"Deep fried\",\r\n get description() { return `Buy ${formatInt(1e5)} Antimatter Galaxies in total while using emoji notation.`; },\r\n checkRequirement: () => player.requirementChecks.permanent.emojiGalaxies >= 1e5,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER\r\n },\r\n {\r\n id: 23,\r\n name: \"Stop right there criminal scum!\",\r\n description: \"Open the console.\"\r\n },\r\n {\r\n id: 24,\r\n name: \"Real news\",\r\n description: \"Click on a news ticker message that does something when you click on it.\"\r\n },\r\n {\r\n id: 25,\r\n name: \"Shhh... It's a secret\",\r\n description: \"Discover a secret theme.\"\r\n },\r\n {\r\n id: 26,\r\n name: \"You're a failure\",\r\n get description() {\r\n return `Fail Eternity Challenges ${formatInt(10)} times without refreshing.\r\n What are you doing with your life...`;\r\n },\r\n checkRequirement: (function() {\r\n let count = 0;\r\n return () => ++count >= 10;\r\n }()),\r\n checkEvent: GAME_EVENT.CHALLENGE_FAILED\r\n },\r\n {\r\n id: 27,\r\n name: \"It's not called matter dimensions is it?\",\r\n description: \"Get Infinite matter.\",\r\n checkRequirement: () => Currency.matter.gte(Decimal.NUMBER_MAX_VALUE),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 28,\r\n name: \"Nice.\",\r\n description: \"Don't act like you don't know what you did.\"\r\n },\r\n {\r\n id: 31,\r\n name: \"You should download some more RAM\",\r\n get description() { return `Set your update rate to ${formatInt(200)}ms.`; }\r\n },\r\n {\r\n id: 32,\r\n name: \"Less than or equal to 0.001\",\r\n get description() {\r\n return `Get a fastest infinity or eternity time of less than or equal to ${format(0.001, 3, 3)} seconds.`;\r\n },\r\n checkRequirement: () =>\r\n Time.bestInfinity.totalMilliseconds.lte(1) ||\r\n Time.bestEternity.totalMilliseconds.lte(1),\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.ETERNITY_RESET_AFTER]\r\n },\r\n {\r\n id: 33,\r\n name: \"A sound financial decision\",\r\n description: \"Click on the button to purchase STD coins...Wait, open source disables the shop, how did you get this!?\"\r\n },\r\n {\r\n id: 34,\r\n name: \"You do know how these work, right?\",\r\n description: \"Respec with an empty Time Study Tree.\"\r\n },\r\n {\r\n id: 35,\r\n name: \"Should we tell them about buy max...\",\r\n get description() { return `Buy single Tickspeed upgrades ${formatInt(1e5)} times.`; },\r\n checkRequirement: () => player.requirementChecks.permanent.singleTickspeed >= 1e5,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 36,\r\n name: \"While you were away... Nothing happened.\",\r\n description: \"See nothing happen while you were away.\"\r\n },\r\n {\r\n id: 37,\r\n name: \"You followed the instructions\",\r\n description: \"Follow instructions.\"\r\n },\r\n {\r\n id: 38,\r\n name: \"Knife's edge\",\r\n description: \"Close the Hard Reset modal after typing in the confirmation.\"\r\n },\r\n {\r\n id: 41,\r\n name: \"That dimension doesn’t exist\",\r\n description: \"Try to purchase the 9th dimension.\"\r\n },\r\n {\r\n id: 42,\r\n name: \"SHAME ON ME\",\r\n description: \"Try to use EC12 to speed up time.\"\r\n },\r\n {\r\n id: 43,\r\n name: \"A cacophonous chorus\",\r\n description: \"Have all equipped Glyphs be Music Glyphs.\",\r\n checkRequirement: () => Glyphs.active.length && Glyphs.active.every(x => Glyphs.isMusicGlyph(x)),\r\n checkEvent: GAME_EVENT.GLYPHS_EQUIPPED_CHANGED\r\n },\r\n {\r\n id: 44,\r\n name: \"Are you statisfied now?\",\r\n get description() { return `Stare intently at the statistics tab for ${formatInt(15)} real-time minutes.`; },\r\n checkRequirement: () => AchievementTimers.stats.check(Tab.statistics.isOpen, 900),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 45,\r\n name: \"This dragging is dragging on\",\r\n description: \"Drag the Perks around for a minute.\",\r\n checkRequirement: () => player.requirementChecks.permanent.perkTreeDragging++ / 100 >= 60\r\n },\r\n {\r\n id: 46,\r\n name: \"For a rainy day\",\r\n description: \"Store a day of real time.\"\r\n },\r\n {\r\n id: 47,\r\n name: \"ALT+\",\r\n description: \"Hide every possible tab.\"\r\n },\r\n {\r\n id: 48,\r\n name: \"Stack overflow\",\r\n description: \"Have more Automator errors than lines.\"\r\n },\r\n];\r\n","import { normalAchievements } from \"./normal-achievements\";\r\nimport { secretAchievements } from \"./secret-achievements\";\r\n\r\nexport const achievements = {\r\n normal: normalAchievements,\r\n secret: secretAchievements\r\n};\r\n","export const awayProgressTypes = [\r\n {\r\n name: \"antimatter\",\r\n isUnlocked: () => true,\r\n }, {\r\n name: \"dimensionBoosts\",\r\n isUnlocked: () => true,\r\n }, {\r\n name: \"antimatterGalaxies\",\r\n reference: [\"galaxies\"],\r\n isUnlocked: () => true,\r\n }, {\r\n name: \"infinities\",\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n }, {\r\n name: \"infinityPoints\",\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n }, {\r\n name: \"replicanti\",\r\n reference: [\"replicanti\", \"amount\"],\r\n isUnlocked: () => PlayerProgress.replicantiUnlocked() || PlayerProgress.eternityUnlocked(),\r\n }, {\r\n name: \"replicantiGalaxies\",\r\n reference: [\"replicanti\", \"galaxies\"],\r\n isUnlocked: () => PlayerProgress.replicantiUnlocked() || PlayerProgress.eternityUnlocked(),\r\n }, {\r\n name: \"eternities\",\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n }, {\r\n name: \"eternityPoints\",\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n }, {\r\n name: \"tachyonParticles\",\r\n reference: [\"dilation\", \"tachyonParticles\"],\r\n isUnlocked: () => PlayerProgress.dilationUnlocked() || PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"dilatedTime\",\r\n reference: [\"dilation\", \"dilatedTime\"],\r\n isUnlocked: () => PlayerProgress.dilationUnlocked() || PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"timeTheorems\",\r\n reference: [\"timestudy\", \"theorem\"],\r\n isUnlocked: () => PlayerProgress.dilationUnlocked() || PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"tachyonGalaxies\",\r\n reference: [\"dilation\", \"totalTachyonGalaxies\"],\r\n isUnlocked: () => PlayerProgress.dilationUnlocked() || PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"achievementAmount\",\r\n reference: [\"achievementBits\"],\r\n applyFn: x => x.map(b => countValuesFromBitmask(b)).sum(),\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"realities\",\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"realityMachines\",\r\n reference: [\"reality\", \"realityMachines\"],\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"blackHole\",\r\n isUnlocked: () => BlackHole(1).isUnlocked,\r\n // Functions as the visible option for both first & second BHs, never appears due to having no reference.\r\n appearsInAwayModal: false,\r\n }, {\r\n name: \"firstBlackHole\",\r\n awayOption: \"blackHole\",\r\n reference: [\"blackHole\", \"0\", \"activations\"],\r\n isUnlocked: () => BlackHole(1).isUnlocked,\r\n classObjectReference: \"black-hole\",\r\n showOption: false,\r\n }, {\r\n name: \"secondBlackHole\",\r\n awayOption: \"blackHole\",\r\n reference: [\"blackHole\", \"1\", \"activations\"],\r\n isUnlocked: () => BlackHole(2).isUnlocked,\r\n classObjectReference: \"black-hole\",\r\n showOption: false,\r\n }, {\r\n name: \"relicShards\",\r\n reference: [\"celestials\", \"effarig\", \"relicShards\"],\r\n isUnlocked: () => TeresaUnlocks.effarig.canBeApplied,\r\n }, {\r\n name: \"celestialMemories\",\r\n isUnlocked: () => VUnlocks.raUnlock.isUnlocked,\r\n // Functions as the visible option for all Memories, never appears due to having no reference.\r\n appearsInAwayModal: false,\r\n }, {\r\n name: \"teresaMemories\",\r\n awayOption: \"celestialMemories\",\r\n reference: [\"celestials\", \"ra\", \"pets\", \"teresa\", \"memories\"],\r\n isUnlocked: () => Ra.pets.teresa.isUnlocked && !Ra.pets.teresa.isCapped,\r\n showOption: false,\r\n }, {\r\n name: \"effarigMemories\",\r\n awayOption: \"celestialMemories\",\r\n reference: [\"celestials\", \"ra\", \"pets\", \"effarig\", \"memories\"],\r\n isUnlocked: () => Ra.pets.effarig.isUnlocked && !Ra.pets.effarig.isCapped,\r\n showOption: false,\r\n }, {\r\n name: \"enslavedMemories\",\r\n forcedName: \"Nameless Memories\",\r\n awayOption: \"celestialMemories\",\r\n reference: [\"celestials\", \"ra\", \"pets\", \"enslaved\", \"memories\"],\r\n isUnlocked: () => Ra.pets.enslaved.isUnlocked && !Ra.pets.enslaved.isCapped,\r\n showOption: false,\r\n }, {\r\n name: \"vMemories\",\r\n awayOption: \"celestialMemories\",\r\n reference: [\"celestials\", \"ra\", \"pets\", \"v\", \"memories\"],\r\n isUnlocked: () => Ra.pets.v.isUnlocked && !Ra.pets.v.isCapped,\r\n showOption: false,\r\n }, {\r\n name: \"imaginaryMachines\",\r\n reference: [\"reality\", \"imaginaryMachines\"],\r\n isUnlocked: () => MachineHandler.isIMUnlocked,\r\n }, {\r\n name: \"darkMatter\",\r\n reference: [\"celestials\", \"laitela\", \"darkMatter\"],\r\n isUnlocked: () => Laitela.isUnlocked,\r\n }, {\r\n name: \"darkEnergy\",\r\n reference: [\"celestials\", \"laitela\", \"darkEnergy\"],\r\n isUnlocked: () => Laitela.isUnlocked,\r\n }, {\r\n name: \"singularities\",\r\n reference: [\"celestials\", \"laitela\", \"singularities\"],\r\n isUnlocked: () => Laitela.isUnlocked,\r\n }, {\r\n name: \"realityShards\",\r\n reference: [\"celestials\", \"pelle\", \"realityShards\"],\r\n isUnlocked: () => Pelle.isDoomed,\r\n },\r\n {\r\n name: \"multiversalRemains\",\r\n reference: [\"mending\", \"new content\"],\r\n isUnlocked: () => PlayerProgress.mendingUnlocked(),\r\n },\r\n];\r\n","import { DC } from \"../constants\";\r\n\r\nexport const catchupResources = [\r\n {\r\n name: \"Antimatter Dimensions\",\r\n id: 0,\r\n requiredStage: PROGRESS_STAGE.PRE_INFINITY,\r\n description: `Every Antimatter Dimension continuously produces Dimensions of the next tier down. The lowest\r\n Antimatter Dimension produces antimatter.`\r\n },\r\n {\r\n name: \"Tickspeed Upgrades\",\r\n id: 1,\r\n openH2pEntry: \"Tickspeed\",\r\n requiredStage: PROGRESS_STAGE.PRE_INFINITY,\r\n description: `Tickspeed Upgrades make Antimatter Dimensions produce other Antimatter Dimensions or antimatter\r\n as if time were passing faster.`\r\n },\r\n {\r\n name: \"Autobuyers\",\r\n id: 2,\r\n requiredStage: PROGRESS_STAGE.PRE_INFINITY,\r\n description: `Autobuyers are a built-in feature to the game which purchases upgrades for your Antimatter\r\n Dimensions automatically when you can afford them.`\r\n },\r\n {\r\n name: \"Dimension Boosts\",\r\n id: 3,\r\n requiredStage: PROGRESS_STAGE.PRE_INFINITY,\r\n description: `Dimension Boosts are gained by resetting all your Antimatter Dimensions and tickspeed after\r\n reaching a certain amount of the highest available Antimatter Dimension. They provide a multiplier to your\r\n Antimatter Dimensions.`\r\n },\r\n {\r\n name: \"Antimatter Galaxies\",\r\n id: 4,\r\n requiredStage: PROGRESS_STAGE.PRE_INFINITY,\r\n description: `Antimatter Galaxies are gained by resetting your Antimatter Dimensions and Dimension Boosts. They\r\n improve the effectiveness of your Tickspeed Upgrades in a compounding way.`\r\n },\r\n {\r\n name: \"Infinity\",\r\n id: 5,\r\n requiredStage: PROGRESS_STAGE.EARLY_INFINITY,\r\n description: () => `Infinity is the first main reset layer. Reaching ${format(Number.MAX_VALUE, 2)} antimatter\r\n allows you to reset everything up to this point in exchange for unlocking new content and resources.`\r\n },\r\n {\r\n name: \"Infinity Points\",\r\n id: 6,\r\n openH2pEntry: \"Infinity\",\r\n requiredStage: PROGRESS_STAGE.EARLY_INFINITY,\r\n description: `Infinity Points are the primary resource after completing your first Infinity. They can be spent on\r\n features which persist through Infinity resets.`\r\n },\r\n {\r\n name: \"Normal Challenges\",\r\n id: 7,\r\n openH2pEntry: \"Normal Challenges\",\r\n requiredStage: PROGRESS_STAGE.EARLY_INFINITY,\r\n description: () => `Challenges require you to reach ${format(Number.MAX_VALUE, 2)} antimatter under more difficult\r\n conditions. Completing challenges allows you to upgrade your Autobuyers.`\r\n },\r\n {\r\n name: \"Break Infinity\",\r\n id: 8,\r\n requiredStage: PROGRESS_STAGE.BREAK_INFINITY,\r\n description: () => `Upgrading your Big Crunch Autobuyer to the maximum allows you to surpass\r\n ${format(Number.MAX_VALUE, 2)} antimatter, giving increasing amounts of Infinity Points with more antimatter.`\r\n },\r\n {\r\n name: \"Infinity Dimensions\",\r\n id: 9,\r\n requiredStage: PROGRESS_STAGE.BREAK_INFINITY,\r\n description: `Infinity Dimensions Produce in a cascading fashion like Antimatter Dimensions. The lowest tier of\r\n Infinity Dimension produces Infinity Power, which applies a large multiplier to all Antimatter Dimensions.`\r\n },\r\n {\r\n name: \"Infinity Challenges\",\r\n id: 10,\r\n requiredStage: PROGRESS_STAGE.BREAK_INFINITY,\r\n description: () => `Infinity Challenges are new challenges with an antimatter goal above\r\n ${format(Number.MAX_VALUE, 2)}. Completing them rewards upgrades and production boosts.`\r\n },\r\n {\r\n name: \"Replicanti\",\r\n id: 11,\r\n requiredStage: PROGRESS_STAGE.REPLICANTI,\r\n description: () => `Replicanti is a resource which produces itself over time, giving a multiplier to all\r\n Infinity Dimensions. At ${format(Number.MAX_VALUE, 2)} Replicanti, they can be reset to ${formatInt(1)} for an\r\n additional Galaxy which does not increase the cost of Antimatter Galaxies. They also reset after every Infinity.`\r\n },\r\n {\r\n name: \"Eternity\",\r\n id: 12,\r\n requiredStage: PROGRESS_STAGE.EARLY_ETERNITY,\r\n description: () => `Eternity is the second main reset layer. Reaching ${format(Number.MAX_VALUE, 2)} Infinity Points\r\n allows you to reset everything up to this point for access to new content and resources.`\r\n },\r\n {\r\n name: \"Eternity Points\",\r\n id: 13,\r\n openH2pEntry: \"Eternity\",\r\n requiredStage: PROGRESS_STAGE.EARLY_ETERNITY,\r\n description: `Eternity Points are the primary resource after completing your first Eternity, and scale based on your\r\n Infinity Points at the time you complete the Eternity.`\r\n },\r\n {\r\n name: \"Time Studies\",\r\n id: 14,\r\n requiredStage: PROGRESS_STAGE.EARLY_ETERNITY,\r\n description: `Time Studies are a set of upgrades akin to a skill tree, and can be freely re-allocated after every\r\n Eternity with no resource loss. Some sections of the tree have restrictions which forbid you from choosing\r\n particular studies simultaneously.`\r\n },\r\n {\r\n name: \"Eternity Milestones\",\r\n id: 15,\r\n requiredStage: PROGRESS_STAGE.EARLY_ETERNITY,\r\n description: `Eternity Milestones are forms of built-in automation and convenience which are unlocked simply by\r\n completing more Eternities. Unlocking them does not require spending any resources.`\r\n },\r\n {\r\n name: \"Time Dimensions\",\r\n id: 16,\r\n requiredStage: PROGRESS_STAGE.EARLY_ETERNITY,\r\n description: `Time Dimensions also produce each other in a cascading manner, with the lowest tier producing Time\r\n Shards. Time Shards give you additional Tickspeed Upgrades which do not increase the cost of the Tickspeed\r\n Upgrades purchased with antimatter.`\r\n },\r\n {\r\n name: \"Eternity Challenges\",\r\n id: 17,\r\n requiredStage: PROGRESS_STAGE.ETERNITY_CHALLENGES,\r\n description: `Eternity Challenges are modified Eternities with an Infinity Point goal which must be reached for\r\n completion. They can be completed up to five times, getting more difficult each repetition in exchange for\r\n increasingly powerful rewards.`\r\n },\r\n {\r\n name: \"Time Dilation\",\r\n id: 18,\r\n requiredStage: PROGRESS_STAGE.EARLY_DILATION,\r\n description: () => `Time Dilation is a modified Eternity where tickspeed and all Dimension multipliers are\r\n severely reduced. Completing Dilated Eternities gives Tachyon Particles.`\r\n },\r\n {\r\n name: \"Tachyon Particles\",\r\n id: 19,\r\n openH2pEntry: \"Time Dilation\",\r\n requiredStage: PROGRESS_STAGE.EARLY_DILATION,\r\n description: () => `Tachyon Particles are a resource which cannot be farmed and require you to get a higher amount\r\n of antimatter in a Dilated Eternity in order to increase your amount. Tachyon Particles produce Dilated Time.`\r\n },\r\n {\r\n name: \"Reality\",\r\n id: 20,\r\n requiredStage: PROGRESS_STAGE.EARLY_REALITY,\r\n description: () => `Reality is the third and final main reset layer. Reaching ${format(DC.E4000)} Eternity Points\r\n gives you the option to reset everything up to this point in exchange for unlocking new content and gaining\r\n access to new resources.`\r\n },\r\n {\r\n name: \"Reality Machines\",\r\n id: 21,\r\n openH2pEntry: \"Reality\",\r\n requiredStage: PROGRESS_STAGE.EARLY_REALITY,\r\n description: `Reality Machines are the primary resource after completing your first Reality. They are given based\r\n on Eternity Points at the time of completing a Reality.`\r\n },\r\n {\r\n name: \"Perks\",\r\n id: 22,\r\n requiredStage: PROGRESS_STAGE.EARLY_REALITY,\r\n description: `Perks are unlockable features similar to Eternity Milestones which primarily focus on convenience and\r\n automation. They are purchased using Perk Points, which are gained after every Reality.`\r\n },\r\n {\r\n name: \"Glyphs\",\r\n id: 23,\r\n requiredStage: PROGRESS_STAGE.EARLY_REALITY,\r\n description: `Glyphs are equippable upgrades which can only be unequipped between Realities. Every Reality you are\r\n allowed to choose one of multiple new random Glyphs to receive; the average quality of your available choices\r\n is determined by how high some of your resources reached in that Reality.`\r\n },\r\n {\r\n name: \"Automator\",\r\n id: 24,\r\n openH2pEntry: \"Automator Overview\",\r\n requiredStage: PROGRESS_STAGE.EARLY_REALITY,\r\n description: `The Automator is a built-in feature that uses a scripting language that allows you to eventually\r\n finish Realities completely hands-off with enough upgrades and perks.`\r\n },\r\n {\r\n name: \"Black Hole\",\r\n id: 25,\r\n requiredStage: PROGRESS_STAGE.EARLY_REALITY,\r\n description: `The Black Hole runs the entire game faster in a periodic cycle. This affects everything in the game up\r\n to this point and will give similar results to leaving the game open for an equivalent amount of time.`\r\n },\r\n {\r\n name: \"Teresa\",\r\n id: 26,\r\n requiredStage: PROGRESS_STAGE.TERESA,\r\n description: `Teresa is the first Celestial, who has a more difficult Reality which gives a massive boost to Glyph\r\n Sacrifice depending upon completion. They unlock upgrades which focus on testing and automating Realities more\r\n easily.`\r\n },\r\n {\r\n name: \"Effarig\",\r\n id: 27,\r\n requiredStage: PROGRESS_STAGE.EFFARIG,\r\n description: `Effarig is the second Celestial, whose Reality limits your Glyphs and has scaling nerfs but gives\r\n rewards for each new reset layer reached. They unlock upgrades which focus on automatically selecting and\r\n filtering the large number of Glyphs you are receiving, purchased with a new resource called Relic Shards.`\r\n },\r\n {\r\n name: \"The Nameless Ones\",\r\n id: 28,\r\n openH2pEntry: \"Nameless Ones\",\r\n requiredStage: PROGRESS_STAGE.ENSLAVED,\r\n description: `The Nameless Ones are the third Celestial, whose Reality is extremely punishing with a long list of\r\n nerfs, but unlocks Tesseracts for those who can figure out how to prevail. They also modify your Black Hole to\r\n allow it to store time.`\r\n },\r\n {\r\n name: \"Stored Time\",\r\n id: 29,\r\n openH2pEntry: \"Nameless Ones\",\r\n requiredStage: PROGRESS_STAGE.ENSLAVED,\r\n description: `Your Black Hole has the ability to store time in two ways. Charging it allows you to hold on to\r\n sped-up time and release it later as a single skip-forward burst. Storing real time lets you use actual time\r\n to simulate Realities (giving you the resources of that Reality but multiplied), or as a stand-in for\r\n offline progress.`\r\n },\r\n {\r\n name: \"Tesseracts\",\r\n id: 30,\r\n requiredStage: PROGRESS_STAGE.ENSLAVED,\r\n description: `Infinity Dimensions cannot be purchased indefinitely and all but the 8th have a hard limit for how\r\n many times they can be purchased. Each Tesseract permanently increases this limit by a large amount.`\r\n },\r\n {\r\n name: \"V\",\r\n id: 31,\r\n requiredStage: PROGRESS_STAGE.V,\r\n description: `V is the fourth Celestial, with a modified Reality which is similar to Teresa's Reality but only gives\r\n rewards by reaching certain milestones of resources within. They give a new resource called Space Theorems, which\r\n allow you to purchase additional Time Studies without path restrictions.`\r\n },\r\n {\r\n name: \"Ra\",\r\n id: 32,\r\n requiredStage: PROGRESS_STAGE.RA,\r\n description: `Ra is the fifth Celestial, with a modified Reality which produces a resource called Memory Chunks\r\n based on your resource totals within. They focus highly on taking older upgrades and themes from the previous\r\n four Celestials and improving upon them, as well as filling out some final gaps in automation and convenience.`\r\n },\r\n {\r\n name: \"Memories\",\r\n id: 33,\r\n openH2pEntry: \"Ra\",\r\n requiredStage: PROGRESS_STAGE.RA,\r\n description: `Ra has the previous four Celestials under their control, producing Memories over time based on Memory\r\n Chunk count. These Memories are used to level up the previous Celestials, providing upgrades when certain levels\r\n are reached.`\r\n },\r\n {\r\n name: \"Charged Infinity Upgrades\",\r\n id: 34,\r\n openH2pEntry: \"Ra\",\r\n requiredStage: PROGRESS_STAGE.RA,\r\n description: `Teresa's Memories allow you to charge your Infinity Upgrades, maintaining a similar effect but\r\n strengthening them significantly. Which upgrades are charged can only be changed between Realities.`\r\n },\r\n {\r\n name: \"Glyph Alchemy\",\r\n id: 35,\r\n requiredStage: PROGRESS_STAGE.RA,\r\n description: `Effarig's Memories unlock Glyph Alchemy, which gives many minor boosts using a modified version of\r\n Glyph Sacrifice. The resources gained from giving up Glyphs in this way must be combined together in reactions\r\n in order to fully upgrade their effects.`\r\n },\r\n {\r\n name: \"Amplified Black Hole\",\r\n id: 36,\r\n openH2pEntry: \"Ra\",\r\n requiredStage: PROGRESS_STAGE.RA,\r\n description: `Nameless's Memories amplify charging so that the amount of game time stored is larger than the actual\r\n game time elapsed. Discharging can now also be done repeatedly and automatically.`\r\n },\r\n {\r\n name: \"Harder V\",\r\n id: 37,\r\n openH2pEntry: \"Ra\",\r\n requiredStage: PROGRESS_STAGE.RA,\r\n description: `V's Memories unlocks a modified version of V's original Reality with even harder goals and a new set\r\n of Time Studies called Triad Studies.`\r\n },\r\n {\r\n name: \"Imaginary Machines\",\r\n id: 38,\r\n requiredStage: PROGRESS_STAGE.IMAGINARY_MACHINES,\r\n description: () => `Imaginary Machines are a new resource unlocked when reaching ${format(DC.E1000)} Reality\r\n Machines. They are produced passively up to a cap determined by how many Reality Machines you would have gotten\r\n in your farthest Reality ever.`\r\n },\r\n {\r\n name: \"Lai'tela\",\r\n id: 39,\r\n requiredStage: PROGRESS_STAGE.LAITELA,\r\n description: `Lai'tela is the sixth Celestial, whose Reality has a modified completion condition and gives a\r\n scaling reward based on how quickly you can reach it. They unlock new features largely related to a resource\r\n called Dark Matter.`\r\n },\r\n {\r\n name: \"Continuum\",\r\n id: 40,\r\n requiredStage: PROGRESS_STAGE.LAITELA,\r\n description: `Continuum is a modified type of production which allows your Antimatter Dimensions to produce as if\r\n they could purchase fractional amounts of upgrades, without actually purchasing them.`\r\n },\r\n {\r\n name: \"Dark Matter Dimensions\",\r\n id: 41,\r\n openH2pEntry: \"Lai'tela\",\r\n requiredStage: PROGRESS_STAGE.LAITELA,\r\n description: `Dark Matter Dimensions are cascading production which operate on a tick-based system instead of\r\n continuously. The lowest tier produces Dark Matter and all tiers produce Dark Energy.`\r\n },\r\n {\r\n name: \"Dimension Reset Mechanics\",\r\n id: 42,\r\n openH2pEntry: \"Lai'tela\",\r\n requiredStage: PROGRESS_STAGE.LAITELA,\r\n description: `Dark Matter Dimensions can be reset in two ways. Annihilation resets all your Dimensions in exchange\r\n for a permanent multiplier to all Dark Matter Dimensions. Ascension increases production but resets the interval\r\n of a single Dimension.`\r\n },\r\n {\r\n name: \"Singularities\",\r\n id: 43,\r\n requiredStage: PROGRESS_STAGE.LAITELA,\r\n description: `Dark Energy can be used to produce Singularities, which give boosts based on their total amount.\r\n When producing Singularities, any extra Dark Energy above the condensing threshold is wasted.`\r\n },\r\n {\r\n name: \"Pelle\",\r\n id: 44,\r\n requiredStage: PROGRESS_STAGE.PELLE,\r\n description: `Pelle is the seventh and final Celestial, who permanently Dooms your game, throwing you into a very\r\n difficult modified Reality which you cannot escape.`\r\n },\r\n {\r\n name: \"Armageddon\",\r\n id: 45,\r\n openH2pEntry: \"Pelle\",\r\n requiredStage: PROGRESS_STAGE.PELLE,\r\n description: `Armageddon is a Pelle-specific reset which you can perform at any time. This resets your progress to\r\n the beginning of the Doomed Reality, but gives Remnants which produce Reality Shards.`\r\n },\r\n {\r\n name: \"Pelle Strikes and Rifts\",\r\n id: 46,\r\n openH2pEntry: \"Pelle Strikes\",\r\n requiredStage: PROGRESS_STAGE.PELLE,\r\n description: `Upon reaching certain progress milestones within Pelle, a Strike may occur which permanently applies\r\n another nerf to the Doomed Reality. Accompanying every Strike is a Rift, which is a mechanic which lets you drain\r\n a different resource in exchange for a boost. These are permanent and remain unlocked after Armageddon.`\r\n },\r\n {\r\n name: \"Multiversal Remains\",\r\n id: 47,\r\n openH2pEntry: \"Mending\",\r\n requiredStage: PROGRESS_STAGE.MENDING,\r\n description: `*placeholder*`\r\n },\r\n];\r\n","import { DC } from \"../../constants\";\r\nimport wordShift from \"../../word-shift\";\r\n\r\nexport function emphasizeEnd(fraction) {\r\n return Math.pow(fraction, 10);\r\n}\r\n\r\nexport function vUnlockProgress(index) {\r\n if (VUnlocks.vAchievementUnlock.isUnlocked) return 1;\r\n const db = Object.values(GameDatabase.celestials.v.mainUnlock).find(e => e.id === index);\r\n return db.progress();\r\n}\r\n\r\nexport function vUnlockLegendLabel(complete, index) {\r\n const db = Object.values(GameDatabase.celestials.v.mainUnlock).find(e => e.id === index);\r\n if (complete >= 1) return `${db.name} condition for V`;\r\n return `Reach ${db.format(db.resource())} / ${db.format(db.requirement)} ${db.name}.`;\r\n}\r\n\r\n// Angle is defined/rescaled so that 0 is the first rift, 4 is the last one, and all 5 are equally spaced around\r\n// a circle. Starts at top-left and goes clockwise, reference point is that 3 is directly down. It's allowed to be\r\n// non-integer since it's also used for off-center curve control points\r\nexport function pelleStarPosition(angle, scale) {\r\n const pelleCenter = new Vector(750, 550);\r\n const theta = (0.7 - 0.4 * angle) * Math.PI;\r\n return new Vector(scale * Math.cos(theta), -scale * Math.sin(theta)).plus(pelleCenter);\r\n}\r\n\r\n// Makes curved spokes connecting the center of Pelle to all the outer nodes corresponding to rifts\r\nfunction pelleStarConnector(index, fillColor, isOverfill) {\r\n return (function() {\r\n // This should be half of the second argument used in pelleStarPosition when used to define rift node positions\r\n const pelleSize = 75;\r\n const pathStart = (0.4 * index + 0.5) * Math.PI;\r\n\r\n // Technically 2 should be about 1.929 and 4/3 should be about 1.328; exact values for both of these leave a small\r\n // gap between the path and the node, so we round up a bit to make those go away\r\n const pathEnd = pathStart + 2;\r\n const path = LogarithmicSpiral.fromPolarEndpoints(pelleStarPosition(index + 0.5, pelleSize),\r\n pathStart, pelleSize, pathEnd, 4 / 3 * pelleSize);\r\n // The +0.01 prevents curve decomposition errors from happening\r\n const pathPadStart = path.angleFromRadius(pelleSize + 0.01) - pathStart;\r\n const pathPadEnd = pathEnd - path.angleFromRadius(4 / 3 * pelleSize);\r\n return {\r\n pathStart,\r\n pathEnd,\r\n path,\r\n pathPadStart,\r\n pathPadEnd,\r\n fill: fillColor,\r\n drawOrder: isOverfill ? CELESTIAL_NAV_DRAW_ORDER.NODE_OVERLAYS : undefined,\r\n noBG: isOverfill,\r\n };\r\n }());\r\n}\r\n\r\nconst FILL_STATE = {\r\n LOCKED: 0,\r\n FILL: 1,\r\n DRAIN: 2,\r\n OVERFILL: 3\r\n};\r\n\r\nfunction riftFillStage(name) {\r\n const rift = PelleRifts[name.toLowerCase()];\r\n if (!rift.canBeApplied) return FILL_STATE.LOCKED;\r\n if (!Pelle.hasGalaxyGenerator || rift.reducedTo === 1) return FILL_STATE.FILL;\r\n if (rift.reducedTo < 1) return FILL_STATE.DRAIN;\r\n return FILL_STATE.OVERFILL;\r\n}\r\n\r\nexport const CELESTIAL_NAV_DRAW_ORDER = {\r\n // Node background is a black fuzzy circle drawn behind nodes. It can help show their\r\n // outline in some cases, and can be used in cases where a connector passes under a node\r\n NODE_BG: 0,\r\n CONNECTORS: 1000,\r\n NODES: 2000,\r\n NODE_OVERLAYS: 3000,\r\n CANVAS_OVERLAY: 4000,\r\n};\r\n\r\nconst Positions = Object.freeze({\r\n teresa: new Vector(100, 100),\r\n teresaPerkPointShop: new Vector(0, -50),\r\n\r\n effarigShop: new Vector(300, 0),\r\n effarigRealityUnlock: new Vector(400, 50),\r\n effarigNode: new Vector(550, 25),\r\n\r\n enslavedReality: new Vector(650, 250),\r\n enslavedGlyphLevel: new Vector(650 + 75 * Math.cos(Math.PI / 180 * -60), 250 + 75 * Math.sin(Math.PI / 180 * -60)),\r\n enslavedGlyphRarity: new Vector(650 + 75 * Math.cos(Math.PI / 180 * 120), 250 + 75 * Math.sin(Math.PI / 180 * 120)),\r\n\r\n vUnlockAchievement: new Vector(400, 350 + 50 * Math.sqrt(3)),\r\n vAchievement0: new Vector(350, 350),\r\n vAchievement1: new Vector(450, 350),\r\n vAchievement2: new Vector(500, 350 + 50 * Math.sqrt(3)),\r\n vAchievement3: new Vector(450, 350 + 100 * Math.sqrt(3)),\r\n vAchievement4: new Vector(350, 350 + 100 * Math.sqrt(3)),\r\n vAchievement5: new Vector(300, 350 + 50 * Math.sqrt(3)),\r\n\r\n raReality: new Vector(400, 200),\r\n raPetTeresa: new Vector(400 + 85 * Math.sin(Math.PI / 180 * 252), 200 + 85 * Math.cos(Math.PI / 180 * 252)),\r\n raPetEffarig: new Vector(400 + 85 * Math.sin(Math.PI / 180 * 140), 200 + 85 * Math.cos(Math.PI / 180 * 140)),\r\n raPetEnslaved: new Vector(400 + 85 * Math.sin(Math.PI / 180 * 78), 200 + 85 * Math.cos(Math.PI / 180 * 78)),\r\n raPetV: new Vector(400 + 85 * Math.sin(Math.PI / 180 * 0), 200 + 85 * Math.cos(Math.PI / 180 * 0)),\r\n\r\n laitelaFirstCenter: new Vector(150, 450),\r\n laitelaFirstLeft: new Vector(100, 500),\r\n laitelaFirstRight: new Vector(200, 500),\r\n laitelaSecondCenter: new Vector(150, 550),\r\n laitelaSecondLeft: new Vector(100, 600),\r\n laitelaSecondRight: new Vector(200, 600),\r\n laitelaThirdCenter: new Vector(150, 650),\r\n\r\n pelleUnlock: new Vector(450, 580),\r\n pelleAchievementRequirement: pelleStarPosition(0, 0),\r\n pelleVacuum: pelleStarPosition(0, 150),\r\n pelleDecay: pelleStarPosition(1, 150),\r\n pelleChaos: pelleStarPosition(2, 150),\r\n pelleRecursion: pelleStarPosition(3, 150),\r\n pelleParadox: pelleStarPosition(4, 150),\r\n\r\n pelleGalaxyGen: pelleStarPosition(0, 0),\r\n});\r\n\r\n// Reduces boilerplate for rift line objects, but needs quite a few parameters to do so since there are three separate\r\n// elements that render for filling - the initial fill, the drain, and then the overfill\r\n// eslint-disable-next-line max-params\r\nfunction pelleRiftFill(name, index, textAngle, fillType) {\r\n let visibleCheck, progressFn, legendFn, percentFn, incompleteClass, nodeFill, connectorFill;\r\n switch (fillType) {\r\n case FILL_STATE.FILL:\r\n // The curve starts inside of the node, so we give the completion variable a bit of a headstart so that we can\r\n // immediately see some filling even when it's pretty much still empty\r\n visibleCheck = () => riftFillStage(name) === FILL_STATE.FILL;\r\n progressFn = () => Math.clamp(0.1 + PelleRifts[name.toLowerCase()].realPercentage / 0.9, 1e-6, 1);\r\n legendFn = () => false;\r\n percentFn = () => PelleRifts[name.toLowerCase()].realPercentage;\r\n incompleteClass = \"c-celestial-nav__test-incomplete\";\r\n nodeFill = \"crimson\";\r\n connectorFill = \"crimson\";\r\n break;\r\n case FILL_STATE.DRAIN:\r\n // The logarithmic curve code sometimes throws errors if you attempt to draw with complete === 0, so we cheat and\r\n // make it a really tiny number that should format to 0 in most notations. We also do a pow in order to make it\r\n // visually smoother, because the generator spiral blocks the bottom bit and makes it look static near the end of\r\n // the drain\r\n visibleCheck = () => riftFillStage(name) >= FILL_STATE.DRAIN;\r\n progressFn = () => Math.clamp(Math.sqrt(PelleRifts[name.toLowerCase()].reducedTo), 1e-6, 1);\r\n legendFn = () => riftFillStage(name) === FILL_STATE.DRAIN && PelleRifts[name.toLowerCase()].reducedTo < 1;\r\n percentFn = () => PelleRifts[name.toLowerCase()].reducedTo;\r\n incompleteClass = \"c-celestial-nav__drained-rift\";\r\n nodeFill = \"crimson\";\r\n connectorFill = \"#550919\";\r\n break;\r\n case FILL_STATE.OVERFILL:\r\n visibleCheck = () => riftFillStage(name) === FILL_STATE.OVERFILL;\r\n progressFn = () => Math.clamp(PelleRifts[name.toLowerCase()].percentage - 1, 1e-6, 1);\r\n percentFn = () => PelleRifts[name.toLowerCase()].percentage;\r\n legendFn = () => true;\r\n incompleteClass = undefined;\r\n nodeFill = \"#ff7700\";\r\n connectorFill = \"#ff9900\";\r\n break;\r\n }\r\n\r\n return {\r\n visible: () => Pelle.isDoomed && visibleCheck(),\r\n complete: () => progressFn(),\r\n node: {\r\n clickAction: () => Tab.celestials.pelle.show(true),\r\n incompleteClass,\r\n position: Positions[`pelle${name}`],\r\n fill: nodeFill,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n forceLegend: () => legendFn(),\r\n legend: {\r\n text: () => [\r\n `${formatPercents(percentFn(), 1)} ${wordShift.wordCycle(PelleRifts[name.toLowerCase()].name)}`\r\n ],\r\n angle: textAngle,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: pelleStarConnector(index, connectorFill, fillType === FILL_STATE.OVERFILL),\r\n };\r\n}\r\n\r\n// Slightly reduces boilerplate; there are a total of 15 rift elements which are largely duplicated code\r\nconst fillStates = [\"fill\", \"drain\", \"overfill\"];\r\nconst riftNames = [\"Vacuum\", \"Decay\", \"Chaos\", \"Recursion\", \"Paradox\"];\r\nconst angles = [225, 315, 45, 135, 135];\r\nconst riftFillElements = {};\r\nfor (const fill of fillStates) {\r\n for (let index = 0; index < riftNames.length; index++) {\r\n const name = riftNames[index];\r\n riftFillElements[`pelle-${name}-${fill}`] = pelleRiftFill(name, index, angles[index],\r\n FILL_STATE[fill.toUpperCase()]);\r\n }\r\n}\r\n\r\nexport const celestialNavigation = {\r\n \"teresa-base\": {\r\n visible: () => true,\r\n complete: () => 1,\r\n node: {\r\n clickAction: () => Tab.celestials.teresa.show(true),\r\n completeClass: \"c-celestial-nav__test-complete\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n position: Positions.teresa,\r\n ring: {\r\n rMajor: 78,\r\n rMinor: 64,\r\n },\r\n legend: {\r\n text: \"Teresa\",\r\n angle: 135,\r\n diagonal: 32,\r\n horizontal: 16,\r\n },\r\n },\r\n },\r\n \"teresa-reality-unlock\": {\r\n visible: () => true,\r\n complete: () => (TeresaUnlocks.run.canBeApplied\r\n ? 1 : Decimal.pLog10(Teresa.pouredAmount) / Math.log10(TeresaUnlocks.run.price)),\r\n node: {\r\n completeClass: \"c-celestial-nav__test-complete\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n position: Positions.teresa,\r\n ring: {\r\n rMajor: 32,\r\n rMinor: 22,\r\n },\r\n legend: {\r\n hideWhenCompleted: true,\r\n text: () => {\r\n const rm = Teresa.pouredAmount;\r\n const cost = TeresaUnlocks.run.price;\r\n return `Pour ${format(rm, 2)} / ${format(cost, 2)} RM`;\r\n },\r\n angle: 135,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: (function() {\r\n const pathStart = -Math.PI;\r\n const pathEnd = Math.PI;\r\n const path = LogarithmicSpiral.fromPolarEndpoints(Positions.teresa, -Math.PI, 69, Math.PI, 26);\r\n const pathPadStart = path.angleFromRadius(64 - 3) - pathStart;\r\n const pathPadEnd = pathEnd - path.angleFromRadius(34);\r\n return {\r\n pathStart,\r\n pathEnd,\r\n path,\r\n pathPadStart,\r\n pathPadEnd,\r\n };\r\n }()),\r\n },\r\n \"teresa-reality\": {\r\n visible: () => true,\r\n complete: () => (Teresa.runCompleted ? 1 : 0),\r\n node: {\r\n clickAction: () => Tab.celestials.teresa.show(true),\r\n completeClass: \"c-celestial-nav__test-complete\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n symbol: \"Ϟ\",\r\n position: Positions.teresa,\r\n ring: {\r\n rMajor: 16,\r\n },\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: \"Teresa's Reality\",\r\n angle: -135,\r\n diagonal: 96,\r\n horizontal: 16,\r\n },\r\n }\r\n },\r\n \"teresa-pp-shop\": {\r\n visible: () => true,\r\n complete: () => (TeresaUnlocks.shop.canBeApplied\r\n ? 1 : Decimal.pLog10(Teresa.pouredAmount) / Math.log10(TeresaUnlocks.shop.price)),\r\n node: {\r\n clickAction: () => Tab.celestials.teresa.show(true),\r\n completeClass: \"c-celestial-nav__test-complete\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n position: Positions.teresaPerkPointShop,\r\n ring: {\r\n rMajor: 16,\r\n rMinor: 0,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Teresa's Perk Point Shop\";\r\n const rm = Teresa.pouredAmount;\r\n const cost = TeresaUnlocks.shop.price;\r\n return [\r\n \"Teresa's Perk Point Shop\",\r\n `Pour ${format(rm, 2)} / ${format(cost, 2)} Reality Machines`\r\n ];\r\n },\r\n angle: -35,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: LinearPath.connectCircles(Positions.teresa, 78 - 1, Positions.teresaPerkPointShop, 16 - 1),\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"effarig-shop\": {\r\n visible: () => true,\r\n complete: () => (TeresaUnlocks.effarig.canBeApplied\r\n ? 1 : Decimal.pLog10(Teresa.pouredAmount) / Math.log10(TeresaUnlocks.effarig.price)),\r\n node: {\r\n clickAction: () => Tab.celestials.effarig.show(true),\r\n completeClass: \"c-celestial-nav__effarig\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n position: Positions.effarigShop,\r\n ring: {\r\n rMajor: 24,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Effarig's Shop\";\r\n const rm = Teresa.pouredAmount;\r\n const cost = TeresaUnlocks.effarig.price;\r\n return [\r\n \"Effarig\",\r\n `Pour ${format(rm, 2)} / ${format(cost, 2)} Reality Machines`\r\n ];\r\n },\r\n angle: -135,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: LinearPath.connectCircles(Positions.teresa, 78 - 1, Positions.effarigShop, 24 - 1),\r\n fill: \"url(#gradTeresaEffarig)\",\r\n }\r\n },\r\n \"effarig-reality-unlock\": {\r\n visible: () => TeresaUnlocks.effarig.canBeApplied,\r\n // If the upgrade to unlock the reality isn't yet bought, clamp the progress at 99.9%,\r\n // even if the player has enough relic shards to buy it.\r\n complete: () => (EffarigUnlock.run.isUnlocked\r\n ? 1 : Math.clampMax(0.999, Decimal.pLog10(Currency.relicShards.value) /\r\n Math.log10(EffarigUnlock.run.cost))),\r\n node: {\r\n clickAction: () => Tab.celestials.effarig.show(true),\r\n completeClass: \"c-celestial-nav__effarig\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n position: Positions.effarigRealityUnlock,\r\n ring: {\r\n rMajor: 16,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Unlock Effarig's Reality\";\r\n const rs = Currency.relicShards.value;\r\n const cost = EffarigUnlock.run.cost;\r\n return [\r\n \"Unlock Effarig's Reality\",\r\n `Reach ${format(rs, 2)} / ${format(cost, 2)} Relic Shards`\r\n ];\r\n },\r\n angle: 75,\r\n diagonal: 40,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: LinearPath.connectCircles(Positions.effarigShop, 24 - 1, Positions.effarigRealityUnlock, 16 - 1),\r\n fill: \"#d13737\",\r\n }\r\n },\r\n \"effarig-infinity\": {\r\n visible: () => EffarigUnlock.run.isUnlocked,\r\n complete: () => {\r\n if (EffarigUnlock.infinity.isUnlocked) return 1;\r\n if (!Effarig.isRunning) return 0;\r\n\r\n return Currency.antimatter.value.pLog10() / Decimal.NUMBER_MAX_VALUE.log10();\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.effarig.show(true),\r\n completeClass: \"c-celestial-nav__effarig\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n position: Positions.effarigNode,\r\n ring: {\r\n rMajor: 60,\r\n rMinor: 52,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Effarig's Infinity\";\r\n if (complete === 0) return \"Unlock Effarig's Reality\";\r\n const am = Effarig.isRunning ? Currency.antimatter.value : 0;\r\n return [\r\n \"Effarig's Infinity\",\r\n `Reach ${format(am, 2)} / ${format(Number.MAX_VALUE, 2)}`,\r\n \"Antimatter inside Effarig's Reality.\"\r\n ];\r\n },\r\n angle: 0,\r\n diagonal: 100,\r\n horizontal: 16,\r\n },\r\n bgDrawOrder: CELESTIAL_NAV_DRAW_ORDER.NODE_BG + 750,\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: LinearPath.connectCircles(Positions.effarigRealityUnlock, 16 - 1, Positions.effarigNode, 60 - 1),\r\n fill: \"#d13737\",\r\n }\r\n },\r\n \"effarig-eternity\": {\r\n visible: () => EffarigUnlock.infinity.isUnlocked,\r\n complete: () => {\r\n if (EffarigUnlock.eternity.isUnlocked) return 1;\r\n if (!Effarig.isRunning) return 0;\r\n\r\n return Currency.infinityPoints.value.pLog10() / Decimal.NUMBER_MAX_VALUE.log10();\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.effarig.show(true),\r\n completeClass: \"c-celestial-nav__effarig\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#7131ec\",\r\n position: Positions.effarigNode,\r\n ring: {\r\n rMajor: 40,\r\n rMinor: 30,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Effarig's Eternity\";\r\n const ip = Effarig.isRunning ? Currency.infinityPoints.value : 0;\r\n return [\r\n \"Effarig's Eternity\",\r\n `Reach ${format(ip, 2)} / ${format(Number.MAX_VALUE, 2)}`,\r\n \"Infinity Points inside Effarig's Reality.\"\r\n ];\r\n },\r\n angle: -45,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: (function() {\r\n const pathStart = -Math.PI;\r\n const pathEnd = 0;\r\n const path = LogarithmicSpiral.fromPolarEndpoints(new Vector(560, 25), pathStart, 66, pathEnd, 26);\r\n const pathPadStart = 0;\r\n const pathPadEnd = pathEnd - path.angleFromRadius(30);\r\n return {\r\n pathStart,\r\n pathEnd,\r\n path,\r\n pathPadStart,\r\n pathPadEnd,\r\n fill: \"#d13737\"\r\n };\r\n }())\r\n },\r\n \"effarig-reality\": {\r\n visible: () => EffarigUnlock.eternity.isUnlocked,\r\n complete: () => {\r\n if (EffarigUnlock.reality.isUnlocked) return 1;\r\n if (!Effarig.isRunning) return 0;\r\n\r\n return Currency.eternityPoints.value.pLog10() / 4000;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.effarig.show(true),\r\n completeClass: \"c-celestial-nav__effarig\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#A101ec\",\r\n position: new Vector(550, 25),\r\n ring: {\r\n rMajor: 20,\r\n rMinor: 0,\r\n },\r\n symbol: \"Ϙ\",\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Effarig's Reality\";\r\n const ep = Effarig.isRunning ? Currency.eternityPoints.value : 0;\r\n const goal = DC.E4000;\r\n return [\r\n \"Effarig's Reality\",\r\n `Reach ${format(ep, 2)} / ${format(goal, 2)}`,\r\n \"Eternity Points inside Effarig's Reality.\"\r\n ];\r\n },\r\n angle: -120,\r\n diagonal: 82,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: (function() {\r\n const pathStart = 0;\r\n const pathEnd = Math.PI;\r\n const path = LogarithmicSpiral.fromPolarEndpoints(new Vector(558, 25), pathStart, 26, pathEnd, 24);\r\n const pathPadStart = 0;\r\n const pathPadEnd = 0;\r\n return {\r\n pathStart,\r\n pathEnd,\r\n path,\r\n pathPadStart,\r\n pathPadEnd,\r\n fill: \"#d13737\"\r\n };\r\n }())\r\n },\r\n \"enslaved\": {\r\n visible: () => EffarigUnlock.eternity.isUnlocked,\r\n complete: () => (EffarigUnlock.eternity.isUnlocked ? 1 : 0),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.enslaved.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffa337\",\r\n position: Positions.enslavedReality,\r\n ring: {\r\n rMajor: 80,\r\n rMinor: 70,\r\n gapCenterDeg: 15,\r\n gapDeg: 200,\r\n },\r\n alwaysShowLegend: false,\r\n legend: {\r\n text: \"Nameless\",\r\n angle: -90,\r\n diagonal: 20,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n drawOrder: CELESTIAL_NAV_DRAW_ORDER.NODE_BG + 500,\r\n path: LinearPath.connectCircles(Positions.effarigNode, 40 - 1, Positions.enslavedReality, 80 - 1),\r\n fill: \"url(#gradEffarigEnslaved)\",\r\n }\r\n },\r\n \"enslaved-unlock-glyph-level\": {\r\n visible: () => EffarigUnlock.eternity.isUnlocked,\r\n complete: () => player.records.bestReality.glyphLevel / 5000,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.enslaved.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffa337\",\r\n position: Positions.enslavedGlyphLevel,\r\n ring: {\r\n rMajor: 24,\r\n rMinor: 16,\r\n gapCenterDeg: 40,\r\n gapDeg: 60,\r\n gapAngleDeg: 0,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Glyph level chain has been broken\";\r\n const goal = 5000;\r\n return [\r\n \"Break a chain\",\r\n `Reach Glyph level ${formatInt(Math.min(player.records.bestReality.glyphLevel, goal))}/${formatInt(goal)}`\r\n ];\r\n },\r\n angle: -45,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(\r\n new Vector(650 - 74 * Math.sqrt(0.75), 250 - 74 * 0.5),\r\n Positions.enslavedGlyphLevel)\r\n .trimEnd(23),\r\n fill: \"#ffa337\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"enslaved-unlock-glyph-rarity\": {\r\n visible: () => EffarigUnlock.eternity.isUnlocked,\r\n complete: () => {\r\n const bestRarity = strengthToRarity(player.records.bestReality.glyphStrength);\r\n return bestRarity / 100;\r\n },\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.enslaved.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffa337\",\r\n position: Positions.enslavedGlyphRarity,\r\n ring: {\r\n rMajor: 24,\r\n rMinor: 16,\r\n gapCenterDeg: 220,\r\n gapDeg: 60,\r\n gapAngleDeg: 0,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Glyph rarity chain has been broken\";\r\n const goal = 100;\r\n return [\r\n \"Break a chain\",\r\n `Reach Glyph rarity ${formatPercents(complete * goal / 100, 1)}/${formatPercents(goal / 100, 1)}`\r\n ];\r\n },\r\n angle: 45,\r\n diagonal: 32,\r\n horizontal: 32,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.enslavedGlyphRarity, Positions.enslavedGlyphLevel).trimStart(23).trimEnd(23),\r\n fill: \"#ffa337\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"enslaved-reality\": {\r\n visible: () => EffarigUnlock.eternity.isUnlocked,\r\n complete: () => {\r\n if (Enslaved.isCompleted) return 1;\r\n if (!Enslaved.isRunning) return 0;\r\n\r\n return Currency.eternityPoints.value.pLog10() / 4000;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.enslaved.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffa337\",\r\n position: Positions.enslavedReality,\r\n ring: {\r\n rMajor: 80,\r\n rMinor: 70,\r\n gapCenterDeg: 195,\r\n gapDeg: 200,\r\n },\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"The Nameless Ones' Reality\";\r\n const ep = Enslaved.isRunning ? Currency.eternityPoints.value : 0;\r\n const goal = DC.E4000;\r\n return [\r\n \"The Nameless Ones' Reality\",\r\n `Reach ${format(ep, 2)} / ${format(goal, 2)}`,\r\n \"Eternity Points inside The Nameless Ones' Reality.\"\r\n ];\r\n },\r\n angle: 45,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.enslavedGlyphRarity, new Vector(650 + 74 * Math.sqrt(0.75), 250 + 74 * 0.5))\r\n .trimStart(23),\r\n fill: \"#ffa337\",\r\n }\r\n },\r\n \"v-unlock-achievement\": {\r\n visible: () => EffarigUnlock.reality.isUnlocked,\r\n complete: () => {\r\n if (Achievement(151).isUnlocked) return 1;\r\n if (!player.requirementChecks.infinity.noAD8) return 0;\r\n\r\n return player.galaxies / 800;\r\n },\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n symbol: \"⌬\",\r\n symbolOffset: \"2\",\r\n fill: \"#ffe066\",\r\n position: Positions.vUnlockAchievement,\r\n ring: {\r\n rMajor: 20,\r\n },\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: complete => {\r\n const goal = 800;\r\n if (complete >= 1) return \"V's Reality\";\r\n const galaxies = player.requirementChecks.infinity.noAD8 ? player.galaxies : 0;\r\n return [\r\n \"V's unlock Achievement\",\r\n `Reach ${formatInt(galaxies)} / ${formatInt(goal)} Antimatter Galaxies without buying`,\r\n \"8th Antimatter Dimensions in your current Infinity\"\r\n ];\r\n },\r\n angle: 135,\r\n diagonal: 60,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: LinearPath.connectCircles(Positions.enslavedReality, 80 - 1, Positions.vUnlockAchievement, 16 - 1),\r\n fill: \"url(#gradEnslavedV)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-unlock-1\": {\r\n visible: () => Achievement(151).isUnlocked || VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => vUnlockProgress(1),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement1,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => vUnlockLegendLabel(complete, 1),\r\n angle: -135,\r\n diagonal: 50,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vUnlockAchievement, Positions.vAchievement1),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-unlock-2\": {\r\n visible: () => Achievement(151).isUnlocked || VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => vUnlockProgress(2),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement2,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => vUnlockLegendLabel(complete, 2),\r\n angle: -45,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vUnlockAchievement, Positions.vAchievement2),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-unlock-3\": {\r\n visible: () => Achievement(151).isUnlocked || VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => vUnlockProgress(3),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement3,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => vUnlockLegendLabel(complete, 3),\r\n angle: 45,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vUnlockAchievement, Positions.vAchievement3),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-unlock-4\": {\r\n visible: () => Achievement(151).isUnlocked || VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => vUnlockProgress(4),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement4,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => vUnlockLegendLabel(complete, 4),\r\n angle: 135,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vUnlockAchievement, Positions.vAchievement4),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-unlock-5\": {\r\n visible: () => Achievement(151).isUnlocked || VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => vUnlockProgress(5),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement5,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => vUnlockLegendLabel(complete, 5),\r\n angle: -135,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vUnlockAchievement, Positions.vAchievement5),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-unlock-6\": {\r\n visible: () => Achievement(151).isUnlocked || VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => vUnlockProgress(6),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement0,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => vUnlockLegendLabel(complete, 6),\r\n angle: -135,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vUnlockAchievement, Positions.vAchievement0),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n\r\n \"v-achievement-0\": {\r\n visible: () => VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => VRunUnlocks.all[0].completions / 6,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement0,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const name = VRunUnlocks.all[0].config.name;\r\n if (complete >= 1) return `V-Achievement \"${name}\"`;\r\n const completions = VRunUnlocks.all[0].completions;\r\n return [\r\n \"V-Achievement\",\r\n `Reach ${formatInt(completions)} / ${formatInt(6)} completions in ${name}.`\r\n ];\r\n },\r\n angle: -135,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vAchievement5, Positions.vAchievement0),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-achievement-1\": {\r\n visible: () => VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => VRunUnlocks.all[1].completions / 6,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement1,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const name = VRunUnlocks.all[1].config.name;\r\n if (complete >= 1) return `V-Achievement \"${name}\"`;\r\n const completions = VRunUnlocks.all[1].completions;\r\n return [\r\n \"V-Achievement\",\r\n `Reach ${formatInt(completions)} / ${formatInt(6)} completions in ${name}.`\r\n ];\r\n },\r\n angle: 20,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vAchievement0, Positions.vAchievement1),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-achievement-2\": {\r\n visible: () => VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => VRunUnlocks.all[2].completions / 6,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement2,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const name = VRunUnlocks.all[2].config.name;\r\n if (complete >= 1) return `V-Achievement \"${name}\"`;\r\n const completions = VRunUnlocks.all[2].completions;\r\n return [\r\n \"V-Achievement\",\r\n `Reach ${formatInt(completions)} / ${formatInt(6)} completions in ${name}.`\r\n ];\r\n },\r\n angle: 315,\r\n diagonal: 25,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vAchievement1, Positions.vAchievement2),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-achievement-3\": {\r\n visible: () => VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => VRunUnlocks.all[3].completions / 6,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement3,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const name = VRunUnlocks.all[3].config.name;\r\n if (complete >= 1) return `V-Achievement \"${name}\"`;\r\n const completions = VRunUnlocks.all[3].completions;\r\n return [\r\n \"V-Achievement\",\r\n `Reach ${formatInt(completions)} / ${formatInt(6)} completions in ${name}.`\r\n ];\r\n },\r\n angle: 135,\r\n diagonal: 25,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vAchievement2, Positions.vAchievement3),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-achievement-4\": {\r\n visible: () => VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => VRunUnlocks.all[4].completions / 6,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement4,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const name = VRunUnlocks.all[4].config.name;\r\n if (complete >= 1) return `V-Achievement \"${name}\"`;\r\n const completions = VRunUnlocks.all[4].completions;\r\n return [\r\n \"V-Achievement\",\r\n `Reach ${formatInt(completions)} / ${formatInt(6)} completions in ${name}.`\r\n ];\r\n },\r\n angle: 60,\r\n diagonal: 25,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vAchievement3, Positions.vAchievement4),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-achievement-5\": {\r\n visible: () => VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => VRunUnlocks.all[5].completions / 6,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement5,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const name = VRunUnlocks.all[5].config.name;\r\n if (complete >= 1) return `V-Achievement \"${name}\"`;\r\n const completions = VRunUnlocks.all[5].completions;\r\n return [\r\n \"V-Achievement\",\r\n `Reach ${formatInt(completions)} / ${formatInt(6)} completions in ${name}.`\r\n ];\r\n },\r\n angle: 260,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vAchievement4, Positions.vAchievement5),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n\r\n \"ra\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n node: {\r\n clickAction: () => Tab.celestials.ra.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n symbol: \"\\uf185\",\r\n symbolOffset: \"2\",\r\n fill: \"#9063de\",\r\n position: Positions.raReality,\r\n ring: {\r\n rMajor: 24,\r\n },\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: \"Ra's Reality\",\r\n angle: 230,\r\n diagonal: 85,\r\n horizontal: 16,\r\n },\r\n }\r\n },\r\n \"teresa-pet\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.ra.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n isStacked: true,\r\n position: Positions.raPetTeresa,\r\n ring: {\r\n rMajor: 12,\r\n },\r\n legend: {\r\n text: () => {\r\n const level = Ra.pets.teresa.level;\r\n if (level === 25) return `Ra's Teresa Memories have all been returned`;\r\n return [\r\n \"Ra's Teresa Memory level\",\r\n `${formatInt(level)} / ${formatInt(25)}`\r\n ];\r\n },\r\n angle: 142,\r\n diagonal: 85,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.95,\r\n path: new LinearPath(Positions.raReality, Positions.raPetTeresa),\r\n fill: \"#9063de\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"teresa-pet-to-teresa\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => Ra.pets.teresa.level / 25,\r\n drawOrder: -1,\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.70,\r\n path: new LinearPath(Positions.raPetTeresa, Positions.teresa),\r\n fill: \"url(#gradRaTeresa)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"effarig-pet\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => Ra.pets.teresa.level / 8,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.ra.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n isStacked: true,\r\n position: Positions.raPetEffarig,\r\n ring: {\r\n rMajor: 12,\r\n },\r\n legend: {\r\n text: complete => {\r\n const unlocked = Ra.pets.teresa.level;\r\n const level = Ra.pets.effarig.level;\r\n if (complete < 1) return `Ra's Teresa Memory level ${unlocked} / ${formatInt(8)}`;\r\n if (level === 25) return `Ra's Effarig Memories have all been returned`;\r\n return [\r\n \"Ra's Effarig Memory level\",\r\n `${formatInt(level)} / ${formatInt(25)}`\r\n ];\r\n },\r\n angle: 142,\r\n diagonal: 85,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.95,\r\n path: new LinearPath(Positions.raReality, Positions.raPetEffarig),\r\n fill: \"#9063de\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"effarig-pet-to-effarig\": {\r\n visible: () => Ra.unlocks.effarigUnlock.isUnlocked,\r\n complete: () => Ra.pets.effarig.level / 25,\r\n drawOrder: -1,\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.60,\r\n path: new LinearPath(Positions.raPetEffarig, Positions.effarigNode),\r\n fill: \"url(#gradRaEffarig)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"enslaved-pet\": {\r\n visible: () => Ra.unlocks.effarigUnlock.isUnlocked,\r\n complete: () => Ra.pets.effarig.level / 8,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.ra.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n isStacked: true,\r\n position: Positions.raPetEnslaved,\r\n ring: {\r\n rMajor: 12,\r\n },\r\n legend: {\r\n text: complete => {\r\n const unlocked = Ra.pets.effarig.level;\r\n const level = Ra.pets.enslaved.level;\r\n if (complete < 1) return `Ra's Effarig Memory level ${unlocked} / ${formatInt(8)}`;\r\n if (level === 25) return `Ra's Nameless Memories have all been returned`;\r\n return [\r\n \"Ra's Nameless Memory level\",\r\n `${formatInt(level)} / ${formatInt(25)}`\r\n ];\r\n },\r\n angle: 142,\r\n diagonal: 85,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.95,\r\n path: new LinearPath(Positions.raReality, Positions.raPetEnslaved),\r\n fill: \"#9063de\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"enslaved-pet-to-enslaved\": {\r\n visible: () => Ra.unlocks.enslavedUnlock.isUnlocked,\r\n complete: () => Ra.pets.enslaved.level / 25,\r\n drawOrder: -1,\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.55,\r\n path: new LinearPath(Positions.raPetEnslaved, Positions.enslavedReality),\r\n fill: \"url(#gradRaEnslaved)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-pet\": {\r\n visible: () => Ra.unlocks.enslavedUnlock.isUnlocked,\r\n complete: () => Ra.pets.enslaved.level / 8,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.ra.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n isStacked: true,\r\n position: Positions.raPetV,\r\n ring: {\r\n rMajor: 12,\r\n },\r\n legend: {\r\n text: complete => {\r\n const unlocked = Ra.pets.enslaved.level;\r\n const level = Ra.pets.v.level;\r\n if (complete < 1) return `Ra's Nameless Memory level ${unlocked} / ${formatInt(8)}`;\r\n if (level === 25) return `Ra's V Memories have all been returned`;\r\n return [\r\n \"Ra's V Memory level\",\r\n `${formatInt(level)} / ${formatInt(25)}`\r\n ];\r\n },\r\n angle: 142,\r\n diagonal: 85,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.95,\r\n path: new LinearPath(Positions.raReality, Positions.raPetV),\r\n fill: \"#9063de\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-pet-to-v\": {\r\n visible: () => Ra.unlocks.vUnlock.isUnlocked,\r\n complete: () => Ra.pets.v.level / 25,\r\n drawOrder: -1,\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.42,\r\n path: new LinearPath(Positions.raPetV, Positions.vUnlockAchievement),\r\n fill: \"url(#gradRaV)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"ra-ring-1\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n node: {\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n position: Positions.raReality,\r\n ring: {\r\n rMajor: 90,\r\n rMinor: 80,\r\n gapCenterDeg: 74,\r\n gapDeg: 268,\r\n },\r\n }\r\n },\r\n \"ra-ring-2\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n node: {\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n position: Positions.raReality,\r\n ring: {\r\n rMajor: 90,\r\n rMinor: 80,\r\n gapCenterDeg: 161,\r\n gapDeg: 318,\r\n },\r\n }\r\n },\r\n \"ra-ring-3\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n node: {\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n position: Positions.raReality,\r\n ring: {\r\n rMajor: 90,\r\n rMinor: 80,\r\n gapCenterDeg: 231,\r\n gapDeg: 301,\r\n },\r\n }\r\n },\r\n \"ra-ring-4\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n node: {\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n position: Positions.raReality,\r\n ring: {\r\n rMajor: 90,\r\n rMinor: 80,\r\n gapCenterDeg: 293,\r\n gapDeg: 334,\r\n },\r\n }\r\n },\r\n \"ra-ring-5\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n node: {\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n position: Positions.raReality,\r\n ring: {\r\n rMajor: 90,\r\n rMinor: 80,\r\n gapCenterDeg: -14,\r\n gapDeg: 316,\r\n },\r\n }\r\n },\r\n \"laitela-unlock\": {\r\n visible: () => Ra.unlocks.vUnlock.isUnlocked,\r\n complete: () => {\r\n if (DarkMatterDimension(1).unlockUpgrade.canBeBought || Laitela.isUnlocked) return 1;\r\n if (MachineHandler.isIMUnlocked) {\r\n if (player.requirementChecks.reality.maxID1.neq(0)) return 0.5;\r\n return 0.5 + 0.5 * Math.clampMax(0.999, player.antimatter.exponent / 1.5e12);\r\n }\r\n return Math.clampMax(0.5, Currency.realityMachines.value.pLog10() / MachineHandler.baseRMCap.exponent);\r\n },\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n symbol: \"ᛝ\",\r\n symbolScale: 1.6,\r\n symbolOffset: \"0.6\",\r\n fill: \"white\",\r\n position: Positions.laitelaFirstCenter,\r\n ring: {\r\n rMajor: 15,\r\n },\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: complete => {\r\n const realityName = \"Lai'tela's Reality\";\r\n if (complete >= 1) return [realityName];\r\n\r\n if (!MachineHandler.isIMUnlocked) {\r\n const realityMachines = Currency.realityMachines.value;\r\n const realityMachineCap = MachineHandler.baseRMCap;\r\n return [\r\n realityName,\r\n \"The limits of Reality Machines bind you\",\r\n `${format(realityMachines)} / ${format(realityMachineCap)}`\r\n ];\r\n }\r\n\r\n const hasIDs = player.requirementChecks.reality.maxID1.neq(0);\r\n if (hasIDs) return [\r\n realityName,\r\n \"The Power of Infinity Dimensions\",\r\n \"blocks your path.\"\r\n ];\r\n\r\n const antimatter = Currency.antimatter.value;\r\n const amGoal = DC.E1_5E12;\r\n return [\r\n realityName,\r\n `${format(antimatter)} / ${format(amGoal)}`\r\n ];\r\n },\r\n angle: 260,\r\n diagonal: 15,\r\n horizontal: 8,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.raReality, Positions.laitelaFirstCenter),\r\n fill: \"url(#gradRaLaitela)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"laitela-2nd-dim\": {\r\n visible: () => Laitela.isUnlocked,\r\n complete: () => {\r\n const upgrade = DarkMatterDimension(2).unlockUpgrade;\r\n if (upgrade.canBeBought || upgrade.isBought) return 1;\r\n if (upgrade.isAvailableForPurchase) return upgrade.currency.value / upgrade.cost;\r\n return Laitela.difficultyTier < 1\r\n ? 0\r\n : 30 / player.celestials.laitela.fastestCompletion;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"white\",\r\n position: Positions.laitelaFirstLeft,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const dmdText = \"2nd Dark Matter Dimension\";\r\n const dim = DarkMatterDimension(2);\r\n if (dim.isUnlocked) return [dmdText];\r\n\r\n const goal = dim.adjustedStartingCost;\r\n if (complete >= 1) return [\r\n dmdText,\r\n `Dark Matter ${format(Currency.darkMatter.max.min(goal), dim.isUnlocked ? 0 : 2)} / ${format(goal)}`\r\n ];\r\n\r\n const upgrade = dim.unlockUpgrade;\r\n if (upgrade.isAvailableForPurchase) return [\r\n dmdText,\r\n `Imaginary Machines\r\n ${format(Math.min(upgrade.currency.value, upgrade.cost), upgrade.canBeBought ? 1 : 2)}\r\n / ${format(upgrade.cost, 1)}`\r\n ];\r\n\r\n if (player.celestials.laitela.fastestCompletion > 30 && Laitela.difficultyTier < 0) return [\r\n dmdText,\r\n `Beat Lai'tela's Reality in less that ${format(30)} seconds`\r\n ];\r\n return [\r\n dmdText,\r\n `Beat Lai'tela's Reality`\r\n ];\r\n },\r\n angle: 135,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.17,\r\n pathEnd: 0.89,\r\n path: new LinearPath(Positions.laitelaFirstCenter, Positions.laitelaFirstLeft),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"laitela-singularity\": {\r\n visible: () => Laitela.isUnlocked,\r\n complete: () => (Currency.singularities.gte(1)\r\n ? 1\r\n : Math.clampMax(0.999, Currency.darkEnergy.value / Singularity.cap)),\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"white\",\r\n position: Positions.laitelaFirstRight,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return [\"Obtain a Singularity\"];\r\n const darkEnergy = Currency.darkEnergy.value;\r\n const singularityGoal = Singularity.cap;\r\n return [\r\n \"Condense your Dark Energy\",\r\n \"Into a Singularity\",\r\n `${format(darkEnergy)} / ${format(singularityGoal)}`\r\n ];\r\n },\r\n angle: 45,\r\n diagonal: 65,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.17,\r\n pathEnd: 0.89,\r\n path: new LinearPath(Positions.laitelaFirstCenter, Positions.laitelaFirstRight),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"laitela-3rd-dim\": {\r\n visible: () => DarkMatterDimension(2).isUnlocked && Currency.singularities.gte(1),\r\n complete: () => {\r\n const upgrade = DarkMatterDimension(3).unlockUpgrade;\r\n if (upgrade.canBeBought || upgrade.isBought) return 1;\r\n if (upgrade.isAvailableForPurchase) return upgrade.currency.value / upgrade.cost;\r\n if (!player.auto.singularity.isActive) return 0.5;\r\n return Math.clampMax(0.999, Singularity.singularitiesGained / 20);\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"white\",\r\n position: Positions.laitelaSecondCenter,\r\n ring: {\r\n rMajor: 15,\r\n },\r\n legend: {\r\n text: complete => {\r\n const dmdText = \"3rd Dark Matter Dimension\";\r\n const dim = DarkMatterDimension(3);\r\n if (dim.isUnlocked) return [dmdText];\r\n\r\n const goal = dim.adjustedStartingCost;\r\n if (complete >= 1) return [\r\n dmdText,\r\n `Dark Matter ${format(Currency.darkMatter.max.min(goal), dim.isUnlocked ? 0 : 2)} / ${format(goal)}`\r\n ];\r\n\r\n const upgrade = dim.unlockUpgrade;\r\n if (upgrade.isAvailableForPurchase) return [\r\n dmdText,\r\n `Imaginary Machines\r\n ${format(Math.min(upgrade.currency.value, upgrade.cost), upgrade.canBeBought ? 0 : 2)}\r\n / ${format(upgrade.cost)}`\r\n ];\r\n\r\n if (!player.auto.singularity.isActive) return [\r\n dmdText,\r\n \"Unlock Automatic Singularities\",\r\n `${format(Currency.singularities.value)} / ${format(SingularityMilestone.autoCondense.start)}`\r\n ];\r\n\r\n return [\r\n dmdText,\r\n `Automatically Condense ${format(20)} Singularities at once`,\r\n `${format(Math.clampMax(Singularity.singularitiesGained, 20))} / ${format(20)}`\r\n ];\r\n },\r\n angle: 15,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: [\r\n {\r\n pathStart: 0.10,\r\n pathEnd: 0.89,\r\n path: new LinearPath(Positions.laitelaFirstLeft, Positions.laitelaSecondCenter),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }, {\r\n pathStart: 0.10,\r\n pathEnd: 0.89,\r\n path: new LinearPath(Positions.laitelaFirstRight, Positions.laitelaSecondCenter),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n\r\n },\r\n ],\r\n },\r\n \"laitela-4th-dim\": {\r\n visible: () => DarkMatterDimension(3).isUnlocked,\r\n complete: () => {\r\n const upgrade = DarkMatterDimension(4).unlockUpgrade;\r\n if (upgrade.canBeBought || upgrade.isBought) return 1;\r\n if (upgrade.isAvailableForPurchase) return upgrade.currency.value / upgrade.cost;\r\n return (Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies) / 80000;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"white\",\r\n position: Positions.laitelaSecondLeft,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const dmdText = \"4th Dark Matter Dimension\";\r\n const dim = DarkMatterDimension(4);\r\n if (dim.isUnlocked) return [dmdText];\r\n\r\n const goal = dim.adjustedStartingCost;\r\n if (complete >= 1) return [\r\n dmdText,\r\n `Dark Matter ${format(Currency.darkMatter.max.min(goal), dim.isUnlocked ? 0 : 2)} / ${format(goal)}`\r\n ];\r\n\r\n const upgrade = dim.unlockUpgrade;\r\n if (upgrade.isAvailableForPurchase) return [\r\n dmdText,\r\n `Imaginary Machines\r\n ${format(Math.min(upgrade.currency.value, upgrade.cost), upgrade.canBeBought ? 1 : 2)}\r\n / ${format(upgrade.cost, 1)}`\r\n ];\r\n\r\n const allGalaxies = Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies;\r\n return [\r\n dmdText,\r\n `Have ${format(80000)} total Galaxies`,\r\n `${format(Math.clampMax(allGalaxies, 80000))} / ${format(80000)}`\r\n ];\r\n },\r\n angle: 225,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.11,\r\n pathEnd: 0.89,\r\n path: new LinearPath(Positions.laitelaSecondCenter, Positions.laitelaSecondLeft),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n },\r\n },\r\n \"laitela-annihilation\": {\r\n visible: () => DarkMatterDimension(4).isUnlocked,\r\n complete: () => {\r\n const upgrade = ImaginaryUpgrade(19);\r\n if (upgrade.canBeBought || upgrade.isBought) return 1;\r\n if (upgrade.isAvailableForPurchase) return Currency.imaginaryMachines.value / upgrade.cost;\r\n return upgrade.isPossible\r\n ? Tickspeed.continuumValue / 3850000\r\n : 0;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"white\",\r\n position: Positions.laitelaSecondRight,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: () => [\r\n \"Annihilate your\",\r\n \"Dark Matter Dimensions\"\r\n ],\r\n angle: 315,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.11,\r\n pathEnd: 0.89,\r\n path: new LinearPath(Positions.laitelaSecondCenter, Positions.laitelaSecondRight),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n },\r\n },\r\n \"laitela-destabilization\": {\r\n visible: () => DarkMatterDimension(4).isUnlocked && ImaginaryUpgrade(19).isBought,\r\n complete: () => Laitela.difficultyTier / 8,\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n symbolScale: 1.6,\r\n symbolOffset: \"0.6\",\r\n fill: \"white\",\r\n position: Positions.laitelaThirdCenter,\r\n ring: {\r\n rMajor: 15,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete < 1) return [\r\n \"Destabilize Lai'tela's Reality\",\r\n \"To the point where you cannot\",\r\n \"use any Dimensions\",\r\n `${format(Laitela.difficultyTier)} / ${format(8)} Dimensions disabled`\r\n ];\r\n return [\r\n \"Completely destabilized\",\r\n \"Lai'tela's Reality\",\r\n ];\r\n },\r\n angle: 180,\r\n diagonal: 15,\r\n horizontal: 8,\r\n },\r\n },\r\n connector: [\r\n {\r\n pathStart: 0.11,\r\n pathEnd: 0.83,\r\n path: new LinearPath(Positions.laitelaSecondLeft, Positions.laitelaThirdCenter),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }, {\r\n pathStart: 0.11,\r\n pathEnd: 0.83,\r\n path: new LinearPath(Positions.laitelaSecondRight, Positions.laitelaThirdCenter),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n ]\r\n },\r\n \"pelle-unlock\": {\r\n visible: () => Laitela.difficultyTier > 4,\r\n complete: () => {\r\n if (Pelle.isUnlocked) return 1;\r\n const imCost = Math.clampMax(emphasizeEnd(Math.log10(Currency.imaginaryMachines.value) / Math.log10(1.6e15)), 1);\r\n let laitelaProgress = Laitela.isRunning ? Math.min(Currency.eternityPoints.value.log10() / 4000, 0.99) : 0;\r\n if (Laitela.difficultyTier !== 8 || Glyphs.activeWithoutCompanion.length > 1) laitelaProgress = 0;\r\n else if (ImaginaryUpgrade(25).isAvailableForPurchase) laitelaProgress = 1;\r\n return (imCost + laitelaProgress) / 2;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.pelle.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"crimson\",\r\n position: Positions.pelleUnlock,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete === 1) {\r\n return [\r\n \"Unlock Pelle\",\r\n \"The Celestial of Antimatter\"\r\n ];\r\n }\r\n let laitelaString = `${format(Currency.eternityPoints.value)} / ${format(\"1e4000\")} EP`;\r\n if (!Laitela.isRunning || Laitela.difficultyTier !== 8 || Glyphs.activeWithoutCompanion.length > 1) {\r\n laitelaString = \"Lai'tela's Reality is still intact\";\r\n } else if (ImaginaryUpgrade(25).isAvailableForPurchase) {\r\n laitelaString = \"Lai'tela's Reality has been destroyed\";\r\n }\r\n return [\r\n \"Unlock Pelle\",\r\n \"The Celestial of Antimatter\",\r\n `${format(Currency.imaginaryMachines.value, 2)} / ${format(1.6e15, 2)} iM`,\r\n laitelaString\r\n ];\r\n },\r\n angle: 105,\r\n diagonal: 90,\r\n horizontal: 10,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.laitelaThirdCenter, Positions.pelleUnlock),\r\n fill: \"url(#gradLaitelaPelle)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n },\r\n },\r\n \"pelle-doomed-requirement\": {\r\n visible: () => Pelle.isUnlocked,\r\n complete: () => {\r\n if (Pelle.isDoomed) return 1;\r\n const achievements = Achievements.prePelleRows.countWhere(r => r.every(a => a.isUnlocked)) /\r\n Achievements.prePelleRows.length;\r\n const alchemy = AlchemyResources.all.countWhere(r => r.capped) / AlchemyResources.all.length;\r\n return (emphasizeEnd(achievements) + emphasizeEnd(alchemy)) / 2;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.pelle.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n symbol: \"♅\",\r\n symbolOffset: \"1.6\",\r\n fill: \"crimson\",\r\n position: Positions.pelleAchievementRequirement,\r\n ring: {\r\n rMajor: 20,\r\n },\r\n forceLegend: () => Pelle.isUnlocked && !Pelle.hasGalaxyGenerator,\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return Pelle.isDoomed ? \"Doomed Reality\" : \"Doom your Reality\";\r\n const achievements = [Achievements.prePelleRows.countWhere(r => r.every(a => a.isUnlocked)),\r\n Achievements.prePelleRows.length];\r\n const alchemy = [AlchemyResources.all.countWhere(r => r.capped), AlchemyResources.all.length];\r\n return [\r\n `Complete ${formatInt(achievements[0])} / ${formatInt(achievements[1])} rows of Achievements`,\r\n `Fill ${formatInt(alchemy[0])} / ${formatInt(alchemy[1])} Alchemy Resources`,\r\n ];\r\n },\r\n angle: 290,\r\n diagonal: 40,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.pelleUnlock, Positions.pelleAchievementRequirement),\r\n fill: \"crimson\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n },\r\n },\r\n\r\n // All the fill elements are generated outside of here as a loop, and then unpacked here with the spread operator\r\n ...riftFillElements,\r\n\r\n // Needs a separate node in order to color the background of the galaxy generator not-gray. Note that this node gets\r\n // placed on top of the \"main\" Doomed node once it's visible\r\n \"pelle-galaxy-generator-start-node\": {\r\n visible: () => Pelle.hasGalaxyGenerator,\r\n complete: () => (Pelle.hasGalaxyGenerator ? 1 : 0),\r\n node: {\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"black\",\r\n position: Positions.pelleAchievementRequirement,\r\n ring: {\r\n rMajor: 20,\r\n },\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: () => [\r\n \"Galaxy Generator:\",\r\n `${format(GalaxyGenerator.generatedGalaxies, 2)} / ${format(GalaxyGenerator.generationCap, 2)} Galaxies`\r\n ],\r\n angle: 290,\r\n diagonal: 40,\r\n horizontal: 16,\r\n },\r\n },\r\n },\r\n // Invisible element to suppress the mouseover detection on the galaxy icon causing the legend to flicker\r\n \"pelle-galaxy-generator-sigil-mask\": {\r\n visible: () => Pelle.hasGalaxyGenerator,\r\n complete: () => (Pelle.hasGalaxyGenerator ? 1 : 0),\r\n node: {\r\n clickAction: () => Tab.celestials.pelle.show(true),\r\n position: Positions.pelleAchievementRequirement,\r\n ring: {\r\n rMajor: 20,\r\n },\r\n },\r\n },\r\n \"pelle-galaxy-generator-path\": {\r\n visible: () => Pelle.hasGalaxyGenerator,\r\n complete: () => {\r\n const riftCaps = PelleRifts.all.map(r => r.config.galaxyGeneratorThreshold);\r\n const brokenRifts = riftCaps.countWhere(n => GalaxyGenerator.generatedGalaxies >= n);\r\n if (brokenRifts === 5) return 1;\r\n const prevRift = riftCaps.filter(n => GalaxyGenerator.generatedGalaxies >= n).max();\r\n const nextRift = riftCaps.filter(n => GalaxyGenerator.generatedGalaxies < n).min();\r\n const currRiftProp = Math.sqrt((GalaxyGenerator.generatedGalaxies - prevRift) / (nextRift - prevRift));\r\n return (brokenRifts + currRiftProp) / 5;\r\n },\r\n connector: (function() {\r\n const pathStart = 0.5 * Math.PI;\r\n const pathEnd = pathStart + 10 * Math.PI;\r\n const path = LogarithmicSpiral.fromPolarEndpoints(pelleStarPosition(0, 0),\r\n pathStart, 18, pathEnd, 150);\r\n return {\r\n pathStart,\r\n pathEnd,\r\n path,\r\n pathPadStart: 0,\r\n pathPadEnd: 0,\r\n fill: \"#00bbbb\",\r\n };\r\n }()),\r\n },\r\n\r\n // The path BG is invisible, but we want to make sure it extends far enough that it expands out \"forever\"\r\n \"pelle-galaxy-generator-infinite\": {\r\n visible: () => Pelle.hasGalaxyGenerator && !Number.isFinite(GalaxyGenerator.generationCap),\r\n complete: () => Math.clamp((GalaxyGenerator.generatedGalaxies - 1e10) / 2e11, 1e-6, 1),\r\n connector: (function() {\r\n const pathStart = 0.5 * Math.PI;\r\n const pathEnd = pathStart + 10 * Math.PI;\r\n const path = LogarithmicSpiral.fromPolarEndpoints(pelleStarPosition(0, 0),\r\n pathStart, 150, pathEnd, 1250);\r\n return {\r\n pathStart,\r\n pathEnd,\r\n path,\r\n pathPadStart: 0,\r\n pathPadEnd: 0,\r\n drawOrder: CELESTIAL_NAV_DRAW_ORDER.CANVAS_OVERLAY,\r\n fill: \"#00bbbb\",\r\n noBG: true,\r\n };\r\n }()),\r\n },\r\n};\r\n","import { CELESTIAL_NAV_DRAW_ORDER } from \"../navigation\";\r\n\r\nfunction sigilProgress() {\r\n const riftProgress = PelleRifts.all.map(r => Math.clamp(r.realPercentage, 0, 1)).min();\r\n const generatorProgress = Math.log10(1 + GalaxyGenerator.generatedGalaxies) / 11;\r\n return Math.clampMax(0.2 * riftProgress + 0.8 * generatorProgress, 1);\r\n}\r\n\r\n// Determines styling, overall visibility, and placement/scaling of the sigil. Center and size are defined such that\r\n// keeping the sigil within internal coordinates of ±1 will keep the sigil within a ±size box of the center coordinates\r\nconst SigilAttributes = {\r\n visible: () => PelleRifts.all.map(r => Math.clamp(r.realPercentage, 0, 1)).min() > 0,\r\n center: new Vector(400, 300),\r\n size: 400,\r\n color: \"#00ffff\",\r\n canvasLayer: CELESTIAL_NAV_DRAW_ORDER.NODE_BG - 500,\r\n};\r\n\r\nfunction scaledPos(x, y) {\r\n const att = SigilAttributes;\r\n return new Vector(att.center.x + att.size * x, att.center.y + att.size * y);\r\n}\r\n\r\n// Reflects a vector across the vertical line down the center of the sigil bounding box. Used to take advantage of the\r\n// sigil having vertical symmetry, allowing us to cut down on hardcoded specifications by half\r\nfunction reflectAcrossVertical(vec) {\r\n return new Vector(2 * SigilAttributes.center.x - vec.x, vec.y);\r\n}\r\n\r\n/**\r\n * Method to make an appropriately-formatted entry to be fed into the navigation code\r\n *\r\n * @member {String} type String specifying the actual shape of the element to be drawn; must be \"line\" or \"circle\"\r\n * @member {Object} att Object whose props list out attributes of the shape to be drawn:\r\n * Line : start and end, specifying the two endpoints to draw between.\r\n * Circle: center and radius to specify the circle path, initAngle and finalAngle to specify an arc segment to draw.\r\n * 0 is rightward and positive angles draw clockwise. Note that making finalAngle-initialAngle a multiple of 2pi\r\n * will cause curve decomposition errors in the curve-drawing code.\r\n * @member {Object} fill Object specifying a segment for the fill as a fraction of the total sigil filling progress.\r\n * Each particular segment will fill from 0% to 100% within the range init to init+weight, without over/underfilling.\r\n * @member {String} colorOverride Color to use for rendering the element, used instead of SigilAttributes.color\r\n */\r\n// eslint-disable-next-line max-params\r\nfunction sigilShape(type, att, fill, colorOverride) {\r\n let pos, path, pathStart, pathEnd;\r\n switch (type) {\r\n case \"edge\":\r\n pos = att.start;\r\n path = new LinearPath(att.start, att.end);\r\n pathStart = 0;\r\n pathEnd = 1;\r\n break;\r\n case \"circle\":\r\n pos = att.center;\r\n path = LogarithmicSpiral.fromPolarEndpoints(att.center, 0, att.radius * SigilAttributes.size,\r\n 1, att.radius * SigilAttributes.size);\r\n pathStart = att.initAngle;\r\n pathEnd = att.finalAngle;\r\n break;\r\n default:\r\n throw Error(\"Unrecognized shape in sigil specification\");\r\n }\r\n\r\n return {\r\n visible: () => SigilAttributes.visible() && sigilProgress() >= fill.init,\r\n complete: () => Math.clamp((sigilProgress() - fill.init) / fill.weight, 0, 1),\r\n // Note that att and fill aren't used in navigation rendering, but including them here massively simplifies the\r\n // sigil reflection logic\r\n att,\r\n fill,\r\n node: {\r\n position: pos,\r\n ring: {\r\n rMajor: 0,\r\n },\r\n },\r\n connector: {\r\n pathStart,\r\n pathEnd,\r\n drawOrder: SigilAttributes.canvasLayer,\r\n path,\r\n fill: colorOverride ?? SigilAttributes.color,\r\n completeWidth: SigilAttributes.size / 20,\r\n noBG: true,\r\n },\r\n };\r\n}\r\n\r\n// These coordinates should generally be kept within ±1; if the sigil needs to be larger then that should be changed in\r\n// the SigilAttribute object instead. Naming conventions for this sigil use smaller numbers to denote nodes generally\r\n// closer to the center line (whether by distance or path length), whereas abbreviated words are used to describe\r\n// vertical position. C denotes horizontal center points.\r\nconst Positions = Object.freeze({\r\n circTop: scaledPos(0.333, -0.41),\r\n circMid: scaledPos(0.5, 0.22),\r\n circBot: scaledPos(0, 0.43),\r\n topC: scaledPos(0, -0.4),\r\n top1: scaledPos(0.08, -0.27),\r\n top2: scaledPos(0.18, -0.35),\r\n top3: scaledPos(0.28, -0.35),\r\n mid: scaledPos(0.08, 0.05),\r\n arm1: scaledPos(0.5, 0.05),\r\n arm2: scaledPos(0.5, -0.15),\r\n arm3: scaledPos(0.4, -0.15),\r\n lowC: scaledPos(0, 0.22),\r\n low1: scaledPos(0.42, 0.22),\r\n botC: scaledPos(0, 0.31),\r\n bot1: scaledPos(0.12, 0.43),\r\n bot2: scaledPos(0.28, 0.43),\r\n});\r\n\r\n// List of specified primitive graphics elements with which to construct the sigil; see docstring of sigilShape\r\n// for description of proper attribute specifications\r\nconst Shapes = {\r\n botCircR: sigilShape(\"circle\",\r\n { center: Positions.circBot, radius: 0.12, initAngle: 0.5 * Math.PI, finalAngle: -0.5 * Math.PI },\r\n { init: 0, weight: 0.2 }),\r\n botH: sigilShape(\"edge\",\r\n { start: Positions.bot1, end: Positions.bot2 },\r\n { init: 0.1, weight: 0.1 }),\r\n lowH: sigilShape(\"edge\",\r\n { start: Positions.lowC, end: Positions.low1 },\r\n { init: 0.3, weight: 0.3 }),\r\n circUp: sigilShape(\"circle\",\r\n { center: Positions.circMid, radius: 0.08, initAngle: Math.PI, finalAngle: 0 },\r\n { init: 0.6, weight: 0.1 }),\r\n circDown: sigilShape(\"circle\",\r\n { center: Positions.circMid, radius: 0.08, initAngle: Math.PI, finalAngle: 2 * Math.PI },\r\n { init: 0.6, weight: 0.1 }),\r\n vert2: sigilShape(\"edge\",\r\n { start: Positions.bot2, end: Positions.top3 },\r\n { init: 0.2, weight: 0.7 }),\r\n vertC: sigilShape(\"edge\",\r\n { start: Positions.botC, end: Positions.lowC },\r\n { init: 0.2, weight: 0.1 }),\r\n vertDiag1: sigilShape(\"edge\",\r\n { start: Positions.lowC, end: Positions.mid },\r\n { init: 0.3, weight: 0.1 }),\r\n arm1: sigilShape(\"edge\",\r\n { start: Positions.mid, end: Positions.arm1 },\r\n { init: 0.4, weight: 0.2 }),\r\n arm2: sigilShape(\"edge\",\r\n { start: Positions.arm1, end: Positions.arm2 },\r\n { init: 0.6, weight: 0.1 }),\r\n arm3: sigilShape(\"edge\",\r\n { start: Positions.arm2, end: Positions.arm3 },\r\n { init: 0.7, weight: 0.1 }),\r\n vert1: sigilShape(\"edge\",\r\n { start: Positions.mid, end: Positions.top1 },\r\n { init: 0.4, weight: 0.3 }),\r\n vertDiag2: sigilShape(\"edge\",\r\n { start: Positions.top1, end: Positions.topC },\r\n { init: 0.7, weight: 0.1 }),\r\n vertDiag3: sigilShape(\"edge\",\r\n { start: Positions.top1, end: Positions.top2 },\r\n { init: 0.7, weight: 0.1 }),\r\n topH: sigilShape(\"edge\",\r\n { start: Positions.top2, end: Positions.top3 },\r\n { init: 0.8, weight: 0.1 }),\r\n circTopUp: sigilShape(\"circle\",\r\n { center: Positions.circTop, radius: 0.08, initAngle: 0.75 * Math.PI, finalAngle: 1.75 * Math.PI },\r\n { init: 0.9, weight: 0.1 }),\r\n circTopDown: sigilShape(\"circle\",\r\n { center: Positions.circTop, radius: 0.08, initAngle: 0.75 * Math.PI, finalAngle: -0.25 * Math.PI },\r\n { init: 0.9, weight: 0.1 }),\r\n};\r\n\r\n// The hardcoded elements in Shapes above only specify roughly half of the sigil; here we take all the existing entries\r\n// and reflect them across the center line. Note that this technically duplicates one of the elements on top of itself\r\nfor (const key of Object.keys(Shapes)) {\r\n const toReflect = Shapes[key];\r\n if (toReflect.connector.path instanceof LinearPath) {\r\n Shapes[`${key}Ref`] = sigilShape(\"edge\",\r\n { start: reflectAcrossVertical(toReflect.att.start), end: reflectAcrossVertical(toReflect.att.end) },\r\n toReflect.fill);\r\n } else if (toReflect.connector.path instanceof LogarithmicSpiral) {\r\n Shapes[`${key}Ref`] = sigilShape(\"circle\",\r\n { center: reflectAcrossVertical(toReflect.att.center), radius: toReflect.att.radius,\r\n initAngle: Math.PI - toReflect.att.initAngle, finalAngle: Math.PI - toReflect.att.finalAngle },\r\n toReflect.fill);\r\n }\r\n}\r\n\r\n// This segment adds multiple circular arcs around the entire sigil, which all fill simultaneously\r\nconst arcSegments = 16;\r\nfor (let arcIndex = 0; arcIndex < arcSegments; arcIndex++) {\r\n const len = 2 * Math.PI / arcSegments;\r\n const init = arcIndex * len;\r\n Shapes[`arcInner${arcIndex}`] = sigilShape(\"circle\",\r\n { center: SigilAttributes.center, radius: 0.75,\r\n initAngle: init, finalAngle: init + len },\r\n { init: 0.1, weight: 0.4 },\r\n \"crimson\");\r\n Shapes[`arcOuter${arcIndex}`] = sigilShape(\"circle\",\r\n { center: SigilAttributes.center, radius: 0.95,\r\n initAngle: init, finalAngle: init - len },\r\n { init: 0.5, weight: 0.4 },\r\n \"crimson\");\r\n}\r\n\r\nexport const finalSigil = Object.values(Shapes)\r\n .mapToObject((key, idx) => `final-sigil-${idx}`, val => val);\r\n","import { CELESTIAL_NAV_DRAW_ORDER, pelleStarPosition } from \"../navigation\";\r\n\r\n// Determines styling, overall visibility, and placement/scaling of the sigil. Center and size are defined such that\r\n// the sigil will largely stay within a circle of radius \"size\" centered on \"center\"\r\nconst SigilAttributes = {\r\n visible: () => Pelle.hasGalaxyGenerator,\r\n center: pelleStarPosition(0, 0),\r\n size: 20,\r\n color: \"#00ffff\",\r\n canvasLayer: CELESTIAL_NAV_DRAW_ORDER.CANVAS_OVERLAY,\r\n};\r\n\r\n/**\r\n * Method to make an appropriately-formatted entry to be fed into the navigation code\r\n *\r\n * @member {String} type String specifying the actual shape of the element to be drawn; must be \"circle\" or \"arc\"\r\n * @member {Object} att Object whose props list out attributes of the shape to be drawn:\r\n * center - Center of the circle or logarithmic spiral (\"arc\") being drawn\r\n * radius - Only used for \"circle\" and is the radius of the circle being drawn\r\n * initRadius/finalRadius - Radius endpoints for a spiral\r\n * initAngle/finalAngle - Angular endpoints for a spiral\r\n * @member {Object} draw Object whose props (thickness, layer) determine the thickness and z-index of this element\r\n * @member {String} colorOverride Color to use for rendering the element, used instead of SigilAttributes.color\r\n */\r\n// eslint-disable-next-line max-params\r\nfunction sigilShape(type, att, draw, colorOverride) {\r\n let pos, path, pathStart, pathEnd;\r\n switch (type) {\r\n case \"circle\":\r\n pos = att.center;\r\n path = LogarithmicSpiral.fromPolarEndpoints(att.center, 0, att.radius * SigilAttributes.size,\r\n 1, att.radius * SigilAttributes.size);\r\n pathStart = att.initAngle;\r\n pathEnd = att.finalAngle;\r\n break;\r\n case \"arc\":\r\n pos = att.center;\r\n pathStart = att.initAngle;\r\n pathEnd = att.finalAngle;\r\n path = LogarithmicSpiral.fromPolarEndpoints(att.center, pathStart, att.initRadius * SigilAttributes.size,\r\n pathEnd, att.finalRadius * SigilAttributes.size);\r\n break;\r\n default:\r\n throw Error(\"Unrecognized shape in sigil specification\");\r\n }\r\n\r\n return {\r\n visible: () => SigilAttributes.visible(),\r\n complete: () => 1,\r\n node: {\r\n position: pos,\r\n ring: {\r\n rMajor: SigilAttributes.size * draw.thickness,\r\n },\r\n bgDrawOrder: SigilAttributes.canvasLayer + draw.layer,\r\n },\r\n connector: {\r\n pathStart,\r\n pathEnd,\r\n drawOrder: SigilAttributes.canvasLayer + draw.layer,\r\n path,\r\n fill: colorOverride ?? SigilAttributes.color,\r\n completeWidth: SigilAttributes.size * draw.thickness,\r\n noBG: true\r\n },\r\n };\r\n}\r\n\r\n// List of specified primitive graphics elements with which to construct the sigil; see docstring of sigilShape\r\n// for description of proper attribute specifications. These are two circular rings in the center of the galaxy\r\nconst Shapes = {\r\n disc: sigilShape(\"circle\",\r\n { center: SigilAttributes.center, radius: 0.2, initAngle: 0, finalAngle: 6.28 },\r\n { thickness: 0.15, layer: 1 },\r\n \"#88ffff\"),\r\n glow: sigilShape(\"circle\",\r\n { center: SigilAttributes.center, radius: 0.125, initAngle: 0, finalAngle: 6.28 },\r\n { thickness: 0.05, layer: 2 },\r\n \"white\"),\r\n};\r\n\r\n// This segment adds multiple circular arcs around the entire sigil, in a shape resembling a spiral galaxy\r\nconst arcSegments = 10;\r\nfor (let arcIndex = 0; arcIndex < arcSegments; arcIndex++) {\r\n const len = 2 * Math.PI / arcSegments;\r\n const init = arcIndex * len;\r\n Shapes[`spiral${arcIndex}`] = sigilShape(\"arc\",\r\n { center: SigilAttributes.center, initRadius: 0.2, finalRadius: 0.9, initAngle: init, finalAngle: init + Math.PI },\r\n { thickness: 0.1, layer: 0 },\r\n \"cyan\");\r\n}\r\n\r\nexport const galaxyIcon = Object.values(Shapes)\r\n .mapToObject((key, idx) => `galaxy-icon-${idx}`, val => val);\r\n","import { DC } from \"../../constants\";\r\nimport { corruptionPenalties } from \"../mending/corruption\";\r\n//general code for corruption 9 --sxy\r\n/*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n}*/\r\n\r\nexport const alchemyResources = {\r\n // T1 resources (Non-Effarig \"base\" resources)\r\n \"power\": {\r\n id: ALCHEMY_RESOURCE.POWER,\r\n name: \"Power\",\r\n symbol: \"Ω\",\r\n isBaseResource: true,\r\n effect: amount => {\r\n let x = 1 + amount / 200000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 1,\r\n uiOrder: 1,\r\n unlockedAt: 2,\r\n description: \"provides a power to Antimatter Dimensions\",\r\n formatEffect: value => `Antimatter Dimension multipliers ${formatPow(value, 4, 4)}`\r\n },\r\n \"infinity\": {\r\n id: ALCHEMY_RESOURCE.INFINITY,\r\n name: \"Infinity\",\r\n symbol: \"∞\",\r\n isBaseResource: true,\r\n effect: amount => {\r\n let x = 1 + amount / 200000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 1,\r\n uiOrder: 2,\r\n unlockedAt: 3,\r\n description: \"provides a power to Infinity Dimensions\",\r\n formatEffect: value => `Infinity Dimension multipliers ${formatPow(value, 4, 4)}`\r\n },\r\n \"time\": {\r\n id: ALCHEMY_RESOURCE.TIME,\r\n name: \"Time\",\r\n symbol: \"Δ\",\r\n isBaseResource: true,\r\n effect: amount => {\r\n let x = 1 + amount / 200000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 1,\r\n uiOrder: 3,\r\n unlockedAt: 4,\r\n description: \"provides a power to Time Dimensions\",\r\n formatEffect: value => `Time Dimension multipliers ${formatPow(value, 4, 4)}`\r\n },\r\n \"replication\": {\r\n id: ALCHEMY_RESOURCE.REPLICATION,\r\n name: \"Replication\",\r\n symbol: \"Ξ\",\r\n isBaseResource: true,\r\n effect: amount => {\r\n let x = Decimal.pow10(amount / 1000);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Decimal.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 1,\r\n uiOrder: 4,\r\n unlockedAt: 5,\r\n description: `increases Replication speed`,\r\n formatEffect: value => `Replication speed is increased by ${formatX(value, 2, 2)}`\r\n },\r\n \"dilation\": {\r\n id: ALCHEMY_RESOURCE.DILATION,\r\n name: \"Dilation\",\r\n symbol: \"Ψ\",\r\n isBaseResource: true,\r\n effect: amount => {\r\n let x = Decimal.pow10(amount / 2000);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Decimal.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 1,\r\n uiOrder: 5,\r\n unlockedAt: 6,\r\n description: \"increases Dilated Time production\",\r\n formatEffect: value => `Dilated Time production is increased by ${formatX(value, 2, 2)}`\r\n },\r\n\r\n // T2 resources (combinations of pairs of T1 resources)\r\n \"cardinality\": {\r\n id: ALCHEMY_RESOURCE.CARDINALITY,\r\n name: \"Cardinality\",\r\n symbol: \"α\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 1 + amount / 20000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return 1 + 0.2 / (x);\r\n },\r\n tier: 2,\r\n uiOrder: 3,\r\n unlockedAt: 8,\r\n description: \"reduces Replicanti slowdown when above the cap\",\r\n formatEffect: value => `Replicanti interval increases slower ${formatX(1.2, 1, 1)} ➜\r\n ${formatX(value, 4, 4)} per ${format(Number.MAX_VALUE, 2)}`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.TIME,\r\n amount: 8\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.REPLICATION,\r\n amount: 7\r\n }\r\n ]\r\n },\r\n \"eternity\": {\r\n id: ALCHEMY_RESOURCE.ETERNITY,\r\n name: \"Eternity\",\r\n symbol: \"τ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 1 + amount / 15000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 2,\r\n uiOrder: 2,\r\n unlockedAt: 9,\r\n description: \"provides a power to Eternity generation\",\r\n formatEffect: value => `Eternity generation ${formatPow(value, 4, 4)}`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.TIME,\r\n amount: 11\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.INFINITY,\r\n amount: 4\r\n }\r\n ]\r\n },\r\n \"dimensionality\": {\r\n id: ALCHEMY_RESOURCE.DIMENSIONALITY,\r\n name: \"Dimensionality\",\r\n symbol: \"ρ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = Decimal.pow10(5 * amount);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Decimal.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 2,\r\n uiOrder: 1,\r\n unlockedAt: 10,\r\n description: \"provides a large multiplier to all Dimensions\",\r\n formatEffect: value => `All Dimensions ${formatX(value)}`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.POWER,\r\n amount: 10\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.INFINITY,\r\n amount: 5\r\n }\r\n ]\r\n },\r\n \"inflation\": {\r\n id: ALCHEMY_RESOURCE.INFLATION,\r\n name: \"Inflation\",\r\n symbol: \"λ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = amount;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return Decimal.pow10(6e9 - 3e5 * x)\r\n },\r\n tier: 2,\r\n uiOrder: 5,\r\n unlockedAt: 11,\r\n description: \"provides an additional power for very large multipliers\",\r\n formatEffect: value => `All Antimatter Dimension multipliers are ${formatPow(1.05, 2, 2)}\r\n if they are above ${format(value)} `,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.POWER,\r\n amount: 9\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.DILATION,\r\n amount: 6\r\n }\r\n ]\r\n },\r\n \"alternation\": {\r\n id: ALCHEMY_RESOURCE.ALTERNATION,\r\n name: \"Alternation\",\r\n symbol: \"ω\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = amount / 2000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x / 100;\r\n },\r\n tier: 2,\r\n uiOrder: 4,\r\n unlockedAt: 12,\r\n description: \"increases the strength of Tachyon Galaxies based on Replicanti\",\r\n formatEffect: value => `Tachyon Galaxies are ${formatPercents(value, 2, 2)} stronger\r\n per ${format(DC.E1E6)} Replicanti`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.REPLICATION,\r\n amount: 5\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.DILATION,\r\n amount: 10\r\n }\r\n ]\r\n },\r\n\r\n // T3 resources (Effarig and conbinations of T1/T2 with Effarig)\r\n \"effarig\": {\r\n id: ALCHEMY_RESOURCE.EFFARIG,\r\n name: \"Effarig\",\r\n symbol: \"Ϙ\",\r\n isBaseResource: true,\r\n effect: amount => {\r\n let x = Math.pow(10, amount / 2500);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x;\r\n },\r\n tier: 1,\r\n uiOrder: 1.5,\r\n unlockedAt: 7,\r\n description: \"increases Relic Shard gain\",\r\n formatEffect: value => `Relic Shard gain is multiplied ${formatX(value, 2, 2)}`\r\n },\r\n \"synergism\": {\r\n id: ALCHEMY_RESOURCE.SYNERGISM,\r\n name: \"Synergism\",\r\n symbol: \"π\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let effectValue = 1.3 * Math.sqrt(amount / 25000);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n effectValue = Math.pow(effectValue,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n let rawValue = 0.3 + effectValue;\r\n return Achievement(175).isUnlocked ? rawValue : Math.min(rawValue, 1);\r\n },\r\n tier: 3,\r\n uiOrder: 2,\r\n unlockedAt: 13,\r\n description: \"increases the yield of Alchemy Reactions\",\r\n formatEffect(value) {\r\n return `Alchemy Reaction efficiency ${formatPercents(0.3)} ➜ ${formatPercents(value, 2, 2)}\r\n ${(!Achievement(175).isUnlocked && value >= 1) ? \" (Capped)\" : \"\"}`;\r\n },\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.EFFARIG,\r\n amount: 3\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.REPLICATION,\r\n amount: 16\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.INFINITY,\r\n amount: 14\r\n }\r\n ]\r\n },\r\n \"momentum\": {\r\n id: ALCHEMY_RESOURCE.MOMENTUM,\r\n name: \"Momentum\",\r\n symbol: \"μ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 1 + amount / 125000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x;\r\n },\r\n tier: 3,\r\n uiOrder: 3,\r\n unlockedAt: 15,\r\n description: \"provides a power to all Dimensions that permanently grows over time\",\r\n formatEffect: value => `All Dimensions ${formatPow(Ra.momentumValue, 4, 4)}, increasing by\r\n ${format(0.005 * Achievement(175).effectOrDefault(1), 3, 3)}\r\n per real-time hour after the resource is unlocked, up to a maximum of ${formatPow(value, 4, 4)}`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.EFFARIG,\r\n amount: 11\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.POWER,\r\n amount: 4\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.TIME,\r\n amount: 20\r\n }\r\n ]\r\n },\r\n \"decoherence\": {\r\n id: ALCHEMY_RESOURCE.DECOHERENCE,\r\n name: \"Decoherence\",\r\n symbol: \"ξ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 15 * Math.sqrt(amount / 25000);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x / 100;\r\n },\r\n tier: 3,\r\n uiOrder: 4,\r\n unlockedAt: 14,\r\n description: \"gives all basic Alchemy Resources upon refinement\",\r\n formatEffect: value => `Refined Glyphs also give ${formatPercents(value, 2)} of their value ` +\r\n \"to all other base resources\",\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.EFFARIG,\r\n amount: 13\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.ALTERNATION,\r\n amount: 8\r\n }\r\n ]\r\n },\r\n\r\n // T4 resources (resources which feed directly into the final resource)\r\n \"exponential\": {\r\n id: ALCHEMY_RESOURCE.EXPONENTIAL,\r\n name: \"Exponential\",\r\n symbol: \"Γ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 10 * Math.pow(amount / 10000, 2);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x;\r\n },\r\n tier: 4,\r\n uiOrder: 2,\r\n unlockedAt: 18,\r\n description: \"multiplies Infinity Points based on Replicanti\",\r\n formatEffect: value => `Infinity Points multiplied by Replicanti${formatPow(value, 2, 3)}`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.INFLATION,\r\n amount: 18\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.SYNERGISM,\r\n amount: 3\r\n }\r\n ]\r\n },\r\n \"force\": {\r\n id: ALCHEMY_RESOURCE.FORCE,\r\n name: \"Force\",\r\n symbol: \"Φ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 5 * amount;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x;\r\n },\r\n tier: 4,\r\n uiOrder: 2,\r\n unlockedAt: 17,\r\n description: \"multiplies Antimatter Dimensions based on Reality Machines\",\r\n formatEffect: value => `Multiply Antimatter Dimensions by Reality Machines${formatPow(value, 2, 2)}`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.DIMENSIONALITY,\r\n amount: 7\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.MOMENTUM,\r\n amount: 8\r\n }\r\n ]\r\n },\r\n \"uncountability\": {\r\n id: ALCHEMY_RESOURCE.UNCOUNTABILITY,\r\n name: \"Uncountability\",\r\n symbol: \"Θ\",\r\n isBaseResource: false,\r\n effect: amount =>{ \r\n let x = BreakInfinityUpgrade.slowestChallengeMult.chargedEffect.isEffectActive ? Math.pow(Ra.pets.teresa.level, 0.5) : 1;\r\n let y = Math.pow(160 * Math.sqrt(amount / 25000), x);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n y = Math.pow(y,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return y;\r\n },\r\n tier: 4,\r\n uiOrder: 3,\r\n unlockedAt: 19,\r\n description: \"passively generates Realities and Perk Points\",\r\n formatEffect: value => `Generate ${format(value, 2, 2)} Realities and Perk Points per second`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.INFINITY,\r\n amount: 20\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.EFFARIG,\r\n amount: 6\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.CARDINALITY,\r\n amount: 16\r\n }\r\n ]\r\n },\r\n \"boundless\": {\r\n id: ALCHEMY_RESOURCE.BOUNDLESS,\r\n name: \"Boundless\",\r\n symbol: \"Π\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = amount / 800;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x / 100;\r\n },\r\n tier: 4,\r\n uiOrder: 1,\r\n unlockedAt: 20,\r\n description: \"makes Tesseracts stronger\",\r\n formatEffect: value => `Tesseracts are +${formatPercents(value, 2, 2)} stronger`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.ETERNITY,\r\n amount: 13\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.INFLATION,\r\n amount: 18\r\n }\r\n ]\r\n },\r\n \"multiversal\": {\r\n id: ALCHEMY_RESOURCE.MULTIVERSAL,\r\n name: \"Multiversal\",\r\n symbol: \"Σ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 32 * Math.pow(amount / 25000, 2);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x;\r\n },\r\n tier: 4,\r\n uiOrder: 5,\r\n unlockedAt: 16,\r\n description: \"makes each Reality simulate more Realities\",\r\n formatEffect: value => `Each Reality simulates ${format(value, 2, 3)} additional Realities, giving all\r\n the same rewards as if it was amplified`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.ALTERNATION,\r\n amount: 16\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.DECOHERENCE,\r\n amount: 3\r\n }\r\n ]\r\n },\r\n \"unpredictability\": {\r\n id: ALCHEMY_RESOURCE.UNPREDICTABILITY,\r\n name: \"Unpredictability\",\r\n symbol: \"Λ\",\r\n isBaseResource: false,\r\n // Somewhat ugly number to make this show 70.00% at cap\r\n effect: amount => {\r\n let x = amount * 100 / (10714.28 + amount);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x / 100;\r\n },\r\n tier: 4,\r\n uiOrder: 4,\r\n unlockedAt: 21,\r\n description: \"makes each Alchemy Reaction have a chance to happen twice\",\r\n formatEffect: value => `Any Alchemy Reaction has a ${formatPercents(value, 2, 2)}\r\n chance of triggering again`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.EFFARIG,\r\n amount: 15\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.DECOHERENCE,\r\n amount: 3\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.SYNERGISM,\r\n amount: 10\r\n }\r\n ]\r\n },\r\n\r\n // T5 (Reality)\r\n \"reality\": {\r\n id: ALCHEMY_RESOURCE.REALITY,\r\n name: \"Reality\",\r\n symbol: \"Ϟ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = amount;\r\n if(player.celestials.ra.upgrades.has('effarigUpgrade'))x*=3;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return Math.floor(x);\r\n },\r\n tier: 5,\r\n unlockedAt: 25,\r\n description: \"can be consumed to create Reality Glyphs\",\r\n formatEffect: value => {return `Consume all Reality Resource to create a level ${formatInt(value)} Reality Glyph`},\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.EXPONENTIAL,\r\n amount: 1\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.FORCE,\r\n amount: 1\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.UNCOUNTABILITY,\r\n amount: 1\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.BOUNDLESS,\r\n amount: 1\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.MULTIVERSAL,\r\n amount: 1\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.UNPREDICTABILITY,\r\n amount: 1\r\n }\r\n ]\r\n },\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const effarigUnlocks = {\r\n adjuster: {\r\n id: 0,\r\n description: \"Adjustable Glyph level factor weights\",\r\n cost: 1e7,\r\n onPurchased: () => {\r\n Effarig.quotes.unlockWeights.show();\r\n ui.view.tabs.reality.openGlyphWeights = true;\r\n Tab.reality.glyphs.show();\r\n }\r\n },\r\n glyphFilter: {\r\n id: 1,\r\n description: \"Glyph Filtering\",\r\n cost: 2e8,\r\n onPurchased: () => {\r\n Effarig.quotes.unlockGlyphFilter.show();\r\n player.reality.showSidebarPanel = GLYPH_SIDEBAR_MODE.FILTER_SETTINGS;\r\n }\r\n },\r\n setSaves: {\r\n id: 2,\r\n description: \"Glyph Presets\",\r\n cost: 3e9,\r\n onPurchased: () => {\r\n Effarig.quotes.unlockSetSaves.show();\r\n player.reality.showSidebarPanel = GLYPH_SIDEBAR_MODE.SAVED_SETS;\r\n }\r\n },\r\n run: {\r\n id: 3,\r\n description: \"Effarig's Reality\",\r\n cost: 5e11,\r\n onPurchased: () => {\r\n Effarig.quotes.unlockRun.show();\r\n }\r\n },\r\n infinity: {\r\n id: 4,\r\n label: \"Infinity\",\r\n get description() {\r\n return ` Replicanti cap is multiplied by a value based on Infinities\r\n Infinities increase your max Replicanti Galaxies\r\n Base Infinity Point gain is capped at ${format(DC.E200)} in Effarig's Reality\r\n Each type of Infinity Point multiplier is capped at ${format(DC.E50)} in Effarig's Reality`;\r\n },\r\n },\r\n eternity: {\r\n id: 5,\r\n label: \"Eternity\",\r\n get description() {\r\n return ` Eternities generate Infinities\r\n Infinity Points are no longer limited in any way in Effarig's Reality\r\n You have unlocked The Nameless Ones`;\r\n },\r\n },\r\n reality: {\r\n id: 6,\r\n label: \"Reality\",\r\n get description() {\r\n return \" You have unlocked Effarig Glyphs (You may equip at most one and some effects are mutually exclusive)\";\r\n },\r\n },\r\n mend: {\r\n id: 7,\r\n label: \"Mend\",\r\n get description() {\r\n return ` Effarig is no longer reset on Mend, Unlock the ability to auto equip Glyphs on Reality, idk if we'll have more rewards.`\r\n }\r\n }\r\n};\r\n","export const enslaved = {\r\n // These entries will be unlocked in no particular order\r\n progress: {\r\n hintsUnlocked: {\r\n id: 0,\r\n hint: \"The Nameless Ones want to help, but the help takes a while.\",\r\n condition: () => `Spent more than ${formatInt(5)} real-time hours inside the Reality without completing it;\r\n time outside the Reality counts for ${formatPercents(0.4)} as much. The timer starts once the\r\n Reality is unlocked, but accumulates continuously.`,\r\n },\r\n ec1: {\r\n id: 1,\r\n hint: \"That's odd, the Automatic Eternity Challenge perk seems to be having some trouble working properly.\",\r\n condition: () => `Gained more than ${formatInt(5)} completions of Eternity Challenge 1 at once`,\r\n },\r\n feelEternity: {\r\n id: 2,\r\n hint: \"Infinity seems to be more broken than usual in this Reality, but is that even fixable?\",\r\n condition: \"Tried to Fix Infinity, but instead found and clicked the FEEL ETERNITY button\",\r\n },\r\n ec6: {\r\n id: 3,\r\n hint: `Some Challenges are harder, but also boost something in exchange. I wonder if there's a Challenge\r\n that's just strictly better than normal here.`,\r\n condition: () => `Entered Eternity Challenge 6 again after completing it ${formatInt(5)} times in order\r\n to use its cheaper Replicanti Galaxies`,\r\n },\r\n c10: {\r\n id: 4,\r\n hint: \"Is there a way to get Antimatter Galaxies without 8th Antimatter Dimensions?\",\r\n condition: \"Used Challenge 10 to get more than one Antimatter Galaxy with 6th Antimatter Dimensions\",\r\n },\r\n secretStudy: {\r\n id: 5,\r\n hint: \"Time Study 12? What's that?\",\r\n condition: () => `Clicked the secret Time Study and gained an extra ${formatInt(100)} Time Theorems`,\r\n },\r\n storedTime: {\r\n id: 6,\r\n hint: \"It seems like certain parts of this Reality erode away if you wait long enough.\",\r\n condition: \"Discharged to have more than a year of game time this Reality\",\r\n },\r\n challengeCombo: {\r\n id: 7,\r\n hint: \"Could I possibly use one Challenge to get around a restriction in another Challenge?\",\r\n condition: \"Entered Challenge 10 while already inside of Eternity Challenge 6\",\r\n },\r\n },\r\n // These get unlocked sequentially\r\n glyphHints: [\r\n \"Infinity and Dilation Glyphs seem confined too tightly to be useful at all.\",\r\n \"Power and Time Glyphs are particularly strong here.\",\r\n `Effarig Glyphs are only useful with the right effects, but you can complete the Reality without one.\r\n A Replication Glyph is very helpful, but it's not strictly necessary or quite as strong\r\n as Power and Time.`\r\n ]\r\n};\r\n","const formatCost = c => format(c, 2);\r\n\r\nconst rebuyable = config => {\r\n const { id, description, cost, effect, formatEffect, currency, currencyLabel } = config;\r\n return {\r\n id,\r\n description,\r\n cost: () => cost(player.celestials.pelle.rebuyables[id]),\r\n formatCost,\r\n effect: (x = player.celestials.pelle.rebuyables[id]) => effect(x),\r\n formatEffect,\r\n currency,\r\n currencyLabel\r\n };\r\n};\r\n\r\nexport const pelleGalaxyGeneratorUpgrades = {\r\n additive: rebuyable({\r\n id: \"galaxyGeneratorAdditive\",\r\n description: \"Increase base Galaxy generation by 2\",\r\n cost: x => Math.pow(3, x),\r\n effect: x => x * 2,\r\n formatEffect: x => `${format(x, 2, 2)}/s`,\r\n currency: () => Currency.galaxyGeneratorGalaxies,\r\n currencyLabel: \"Galaxy\"\r\n }),\r\n multiplicative: rebuyable({\r\n id: \"galaxyGeneratorMultiplicative\",\r\n description: \"Multiply Galaxy generation\",\r\n cost: x => Math.pow(10, x),\r\n effect: x => Decimal.pow(2.5, x),\r\n formatEffect: x => formatX(x, 2, 1),\r\n currency: () => Currency.galaxyGeneratorGalaxies,\r\n currencyLabel: \"Galaxy\"\r\n }),\r\n antimatterMult: rebuyable({\r\n id: \"galaxyGeneratorAntimatterMult\",\r\n description: \"Multiply Galaxy generation\",\r\n cost: x => Decimal.pow(\"1e100000000\", 10 ** x),\r\n effect: x => Decimal.pow(2, x),\r\n formatEffect: x => formatX(x, 2),\r\n currency: () => Currency.antimatter,\r\n currencyLabel: \"Antimatter\"\r\n }),\r\n IPMult: rebuyable({\r\n id: \"galaxyGeneratorIPMult\",\r\n description: \"Multiply Galaxy generation\",\r\n cost: x => Decimal.pow(\"1e2000000\", 100 ** x),\r\n effect: x => Decimal.pow(2, x),\r\n formatEffect: x => formatX(x, 2),\r\n currency: () => Currency.infinityPoints,\r\n currencyLabel: \"Infinity Point\"\r\n }),\r\n EPMult: rebuyable({\r\n id: \"galaxyGeneratorEPMult\",\r\n description: \"Multiply Galaxy generation\",\r\n cost: x => Decimal.pow(\"1e10000\", 1000 ** x),\r\n effect: x => Decimal.pow(2, x),\r\n formatEffect: x => formatX(x, 2),\r\n currency: () => Currency.eternityPoints,\r\n currencyLabel: \"Eternity Point\"\r\n }),\r\n};\r\n","const formatCost = c => format(c, 2);\r\n// eslint-disable-next-line max-params\r\nconst expWithIncreasedScale = (base1, base2, incScale, coeff, x) =>\r\n Decimal.pow(base1, x).times(Decimal.pow(base2, x - incScale).max(1)).times(coeff);\r\n\r\nconst rebuyable = config => {\r\n const { id, description, cost, effect, formatEffect, cap } = config;\r\n return {\r\n id,\r\n description,\r\n cost: () => expWithIncreasedScale(...cost, player.celestials.pelle.rebuyables[id]),\r\n formatCost,\r\n cap,\r\n effect: (x = player.celestials.pelle.rebuyables[id]) => effect(x),\r\n formatEffect,\r\n rebuyable: true\r\n };\r\n};\r\n\r\nexport const pelleUpgrades = {\r\n antimatterDimensionMult: rebuyable({\r\n id: \"antimatterDimensionMult\",\r\n description: \"Gain a multiplier to Antimatter Dimensions\",\r\n cost: [10, 1e3, 41, 100],\r\n effect: x => Pelle.antimatterDimensionMult(x),\r\n formatEffect: x => formatX(x, 2, 2),\r\n cap: 44\r\n }),\r\n timeSpeedMult: rebuyable({\r\n id: \"timeSpeedMult\",\r\n description: \"Gain a multiplier to game speed\",\r\n cost: [20, 1e3, 30, 1e5],\r\n effect: x => Decimal.pow(1.3, x),\r\n formatEffect: x => formatX(x, 2, 2),\r\n cap: 35\r\n }),\r\n glyphLevels: rebuyable({\r\n id: \"glyphLevels\",\r\n description: \"Increase the Glyph level allowed in Pelle\",\r\n cost: [30, 1e3, 25, 1e15],\r\n effect: x => Math.floor(((3 * (x + 1)) - 2) ** 1.6),\r\n formatEffect: x => formatInt(x),\r\n cap: 26\r\n }),\r\n infConversion: rebuyable({\r\n id: \"infConversion\",\r\n description: \"Increase Infinity Power conversion rate\",\r\n cost: [40, 1e3, 20, 1e18],\r\n effect: x => (x * 3.5) ** 0.37,\r\n formatEffect: x => `+${format(x, 2, 2)}`,\r\n cap: 21\r\n }),\r\n galaxyPower: rebuyable({\r\n id: \"galaxyPower\",\r\n description: \"Multiply Galaxy power\",\r\n cost: [1000, 1e3, 10, 1e30],\r\n effect: x => 1 + x / 50,\r\n formatEffect: x => formatX(x, 2, 2),\r\n cap: 9\r\n }),\r\n antimatterDimAutobuyers1: {\r\n id: 0,\r\n description: \"Get permanent Autobuyers for Antimatter Dimensions 1-4\",\r\n cost: 1e5,\r\n formatCost,\r\n },\r\n dimBoostAutobuyer: {\r\n id: 1,\r\n description: \"Get a permanent Autobuyer for Dimension Boosts\",\r\n cost: 5e5,\r\n formatCost,\r\n },\r\n keepAutobuyers: {\r\n id: 2,\r\n description: \"Autobuyer upgrades no longer reset on Armageddon\",\r\n cost: 5e6,\r\n formatCost,\r\n },\r\n antimatterDimAutobuyers2: {\r\n id: 3,\r\n description: \"Get permanent Autobuyers for Antimatter Dimensions 5-8\",\r\n cost: 2.5e7,\r\n formatCost,\r\n },\r\n galaxyAutobuyer: {\r\n id: 4,\r\n description: \"Get a permanent Autobuyer for Antimatter Galaxies\",\r\n cost: 1e8,\r\n formatCost,\r\n },\r\n tickspeedAutobuyer: {\r\n id: 5,\r\n description: \"Get a permanent Autobuyer for Tickspeed upgrades\",\r\n cost: 1e9,\r\n formatCost,\r\n },\r\n keepInfinityUpgrades: {\r\n id: 6,\r\n description: \"Infinity Upgrades no longer reset on Armageddon\",\r\n cost: 1e10,\r\n formatCost,\r\n },\r\n dimBoostResetsNothing: {\r\n id: 7,\r\n description: \"Dimension Boosts no longer reset anything\",\r\n cost: 1e11,\r\n formatCost,\r\n },\r\n keepBreakInfinityUpgrades: {\r\n id: 8,\r\n description: \"Break Infinity Upgrades no longer reset on Armageddon\",\r\n cost: 1e12,\r\n formatCost,\r\n },\r\n IDAutobuyers: {\r\n id: 9,\r\n description: \"Get permanent Autobuyers for Infinity Dimensions\",\r\n cost: 1e14,\r\n formatCost,\r\n },\r\n keepInfinityChallenges: {\r\n id: 10,\r\n description: \"Infinity Challenge unlocks and completions no longer reset on Armageddon\",\r\n cost: 1e15,\r\n formatCost,\r\n },\r\n galaxyNoResetDimboost: {\r\n id: 11,\r\n description: \"Galaxies no longer reset Dimension Boosts\",\r\n cost: 1e16,\r\n formatCost\r\n },\r\n replicantiAutobuyers: {\r\n id: 12,\r\n description: \"Get permanent Autobuyers for Replicanti Upgrades\",\r\n cost: 1e17,\r\n formatCost,\r\n },\r\n replicantiGalaxyNoReset: {\r\n id: 13,\r\n description: \"Replicanti Galaxies no longer reset on Infinity\",\r\n cost: 1e19,\r\n formatCost,\r\n },\r\n eternitiesNoReset: {\r\n id: 14,\r\n description: \"Eternities no longer reset on Armageddon\",\r\n cost: 1e20,\r\n formatCost,\r\n },\r\n timeStudiesNoReset: {\r\n id: 15,\r\n description: \"Time Studies and Theorems no longer reset on Armageddon\",\r\n cost: 1e21,\r\n formatCost,\r\n },\r\n replicantiStayUnlocked: {\r\n id: 16,\r\n description: \"Replicanti is permanently unlocked\",\r\n cost: 1e22,\r\n formatCost,\r\n },\r\n keepEternityUpgrades: {\r\n id: 17,\r\n description: \"Eternity Upgrades no longer reset on Armageddon\",\r\n cost: 1e24,\r\n formatCost,\r\n },\r\n TDAutobuyers: {\r\n id: 18,\r\n description: \"Get permanent Autobuyers for Time Dimensions\",\r\n cost: 1e25,\r\n formatCost,\r\n },\r\n keepEternityChallenges: {\r\n id: 19,\r\n description: \"Eternity Challenge completions no longer reset on Armageddon\",\r\n cost: 1e26,\r\n formatCost,\r\n },\r\n dilationUpgradesNoReset: {\r\n id: 20,\r\n description: \"Dilation Upgrades no longer reset on Armageddon\",\r\n cost: 1e45,\r\n formatCost,\r\n },\r\n tachyonParticlesNoReset: {\r\n id: 21,\r\n description: \"Tachyon Particles no longer reset on Armageddon\",\r\n cost: 1e50,\r\n formatCost,\r\n }\r\n};\r\n","function rebuyableCost(initialCost, increment, id) {\r\n return initialCost * Math.pow(increment, player.celestials.teresa.perkShop[id]);\r\n}\r\nfunction rebuyable(config) {\r\n const { id, otherReq, cap, costCap, description, formatEffect, formatCost } = config;\r\n return {\r\n id,\r\n cost: () => (config.cost ? config.cost() : rebuyableCost(config.initialCost, config.increment, config.id)),\r\n otherReq,\r\n cap,\r\n costCap,\r\n description,\r\n effect: () => config.effect(player.celestials.teresa.perkShop[config.id]),\r\n formatEffect,\r\n formatCost,\r\n rebuyable: true\r\n };\r\n}\r\n\r\nexport const perkShop = {\r\n glyphLevel: rebuyable({\r\n id: 0,\r\n initialCost: 1,\r\n increment: 2,\r\n description: () => `Increase pre-instability Glyph levels by ${formatPercents(0.05)}`,\r\n effect: bought => Math.pow(1.05, bought),\r\n formatEffect: value => formatX(value, 2, 2),\r\n formatCost: value => format(value, 2),\r\n costCap: () => {\r\n let x = (Ra.unlocks.perkShopIncrease.canBeApplied ? 1048576 : 2048);\r\n if(CorruptionUpgrade(5).isBought) x = Math.pow(2, 65);\r\n return x;\r\n },\r\n cap: () => {\r\n let x = (Ra.unlocks.perkShopIncrease.canBeApplied ? Math.pow(1.05, 20) : Math.pow(1.05, 11));\r\n if(CorruptionUpgrade(5).isBought) x = Math.pow(1.05, 65);\r\n return x;\r\n }\r\n }),\r\n rmMult: rebuyable({\r\n id: 1,\r\n initialCost: 1,\r\n increment: 2,\r\n description: \"Double Reality Machine gain\",\r\n effect: bought => Math.pow(2, bought),\r\n formatEffect: value => formatX(value, 2),\r\n formatCost: value => format(value, 2),\r\n costCap: () => {\r\n let x = (Ra.unlocks.perkShopIncrease.canBeApplied ? 1048576 : 2048);\r\n if(CorruptionUpgrade(5).isBought) x = Math.pow(2, 65);\r\n return x;\r\n },\r\n cap: () => {\r\n let x = (Ra.unlocks.perkShopIncrease.canBeApplied ? 1048576 : 2048);\r\n if(CorruptionUpgrade(5).isBought) x = Math.pow(2, 65);\r\n return x;\r\n }\r\n }),\r\n bulkDilation: rebuyable({\r\n id: 2,\r\n initialCost: 100,\r\n increment: 2,\r\n description: \"Buy twice as many Dilation Upgrades at once.\",\r\n effect: bought => Math.pow(2, bought),\r\n formatEffect: value => formatX(value, 2),\r\n formatCost: value => format(value, 2),\r\n costCap: () => (Ra.unlocks.perkShopIncrease.canBeApplied ? 1638400 : 1600),\r\n cap: () => (Ra.unlocks.perkShopIncrease.canBeApplied ? 16384 : 16),\r\n }),\r\n autoSpeed: rebuyable({\r\n id: 3,\r\n initialCost: 1000,\r\n increment: 2,\r\n description: () => `Infinity Dimension, Time Dimension, Dilation,\r\n and Replicanti autobuyers are ${formatX(2)} faster.`,\r\n effect: bought => Math.pow(2, bought),\r\n formatEffect: value => formatX(value, 2),\r\n formatCost: value => format(value, 2),\r\n costCap: () => (Ra.unlocks.perkShopIncrease.canBeApplied ? 64000 : 4000),\r\n cap: () => (Ra.unlocks.perkShopIncrease.canBeApplied ? 64 : 4)\r\n }),\r\n musicGlyph: rebuyable({\r\n id: 4,\r\n description: () => `Receive a Music Glyph of a random type that is ${formatPercents(0.8)} of your highest level.\r\n (Try clicking it!)`,\r\n cost: () => 1,\r\n formatCost: value => formatInt(value),\r\n costCap: () => Number.MAX_VALUE,\r\n cap: () => Number.MAX_VALUE\r\n }),\r\n // Only appears with the perk shop increase upgrade\r\n fillMusicGlyph: rebuyable({\r\n id: 5,\r\n description: () => `Fill all empty slots in your inventory with Music Glyphs`,\r\n cost: () => Math.clampMin(GameCache.glyphInventorySpace.value, 1),\r\n otherReq: () => GameCache.glyphInventorySpace.value > 0,\r\n formatCost: value => formatInt(value),\r\n costCap: () => Number.MAX_VALUE,\r\n cap: () => Number.MAX_VALUE\r\n }),\r\n};\r\n","\r\nexport const ra = {\r\n pets: {\r\n teresa: {\r\n id: \"teresa\",\r\n name: \"Teresa\",\r\n color: \"#8596ea\",\r\n chunkGain: \"Eternity Points\",\r\n memoryGain: \"current RM\",\r\n secondaryMemoryChunkGain: \"Perk Points\",\r\n requiredUnlock: () => undefined,\r\n rawMemoryChunksPerSecond: () => {\r\n let x = Ra.unlocks.secondaryMemoryChunkGain.isUnlocked ? Math.max(Math.log10(Math.max(1, Currency.perkPoints.value))/2,1) : 1;\r\n return 4 * Math.pow((Ra.unlocks.improvedChunkGains.isUnlocked ? Math.max(Currency.eternityPoints.value.ln(), 0) : Currency.eternityPoints.value.pLog10()) / 1e4, 3) * x;\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 1) x*= CorruptionUpgrade(1).effectOrDefault(1);\r\n //if (Ra.currentCelestial === 7) x*= Ra.unlocks.boostMemoryGain.effectOrDefault(1);\r\n return Ra.unlocks.teresaXP.effectOrDefault(1) * x;\r\n }\r\n },\r\n effarig: {\r\n id: \"effarig\",\r\n name: \"Effarig\",\r\n color: \"#ea8585\",\r\n chunkGain: \"Relic Shards gained\",\r\n memoryGain: \"best Glyph level\",\r\n secondaryMemoryChunkGain: \"Glyph Sacrifice totals\",\r\n requiredUnlock: () => (MendingMilestone.ten.isReached ? undefined : Ra.unlocks.effarigUnlock),\r\n rawMemoryChunksPerSecond: () =>{\r\n let x = new Decimal(0);\r\n if(Ra.unlocks.secondaryMemoryChunkGain.isUnlocked){\r\n Object.values(player.reality.glyphs.sac).every(value => x = x.add(value))\r\n }\r\n x = x.div(7);\r\n let primeShardsGained=Effarig.shardsGained;\r\n let softcapedShardGained=1;\r\n if(primeShardsGained.gt(1e100)){\r\n softcapedShardGained = Decimal.pow(primeShardsGained.div(1e100),0.3);\r\n primeShardsGained = new Decimal(1e100);\r\n }\r\n return (Ra.unlocks.improvedChunkGains.isUnlocked ? 100 : 4) * Decimal.pow((primeShardsGained.times(softcapedShardGained)), (Ra.unlocks.unlockPelleContinuum.isUnlocked ? 0.105 : 0.1)).min(1e308).toNumber() * Math.max(1, Decimal.log10(x));\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 2) x*= CorruptionUpgrade(1).effectOrDefault(1);\r\n //if (Ra.currentCelestial === 7) x*= Ra.unlocks.boostMemoryGain.effectOrDefault(1);\r\n return Ra.unlocks.effarigXP.effectOrDefault(1) * x;\r\n }\r\n },\r\n enslaved: {\r\n id: \"enslaved\",\r\n name: \"The Nameless Ones\",\r\n color: \"#f1aa7f\",\r\n chunkGain: \"Time Shards\",\r\n memoryGain: \"total time played\",\r\n secondaryMemoryChunkGain: \"Game speed\",\r\n requiredUnlock: () => (MendingMilestone.ten.isReached ? undefined : Ra.unlocks.enslavedUnlock),\r\n rawMemoryChunksPerSecond: () =>{\r\n let x = Ra.unlocks.secondaryMemoryChunkGain.isUnlocked ? 1 + (Decimal.log10(Decimal.max(getGameSpeedupFactor(),1))/100) : 1;\r\n return Ra.unlocks.improvedChunkGains.isUnlocked ? 4 * Math.pow(Math.max(Currency.timeShards.value.ln(), 0) / 3e5, 2) * x : 4 * Math.pow(Currency.timeShards.value.pLog10() / 3e5, 2) * x;\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 3) x*= CorruptionUpgrade(1).effectOrDefault(1);\r\n //if (Ra.currentCelestial === 7) x*= Ra.unlocks.boostMemoryGain.effectOrDefault(1);\r\n return Ra.unlocks.enslavedXP.effectOrDefault(1) * x;\r\n }\r\n },\r\n v: {\r\n id: \"v\",\r\n name: \"V\",\r\n color: \"#ead584\",\r\n chunkGain: \"Infinity Power\",\r\n memoryGain: \"total Memory levels\",\r\n secondaryMemoryChunkGain: \"Achievement Multiplier for Dimensions\",\r\n requiredUnlock: () => (MendingMilestone.ten.isReached ? undefined : Ra.unlocks.vUnlock),\r\n rawMemoryChunksPerSecond: () =>{\r\n let x = Ra.unlocks.secondaryMemoryChunkGain.isUnlocked ? Decimal.max(1, Decimal.log10(Achievements.power)).times(4).toNumber() : 1;\r\n return Ra.unlocks.improvedChunkGains.isUnlocked ? 4 * Math.pow(Math.max(Currency.infinityPower.value.ln(),0) / 1e7, 1.5) *x : 4 * Math.pow(Currency.infinityPower.value.pLog10() / 1e7, 1.5) *x;\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 4) x*= CorruptionUpgrade(1).effectOrDefault(1);\r\n //if (Ra.currentCelestial === 7) x*= Ra.unlocks.boostMemoryGain.effectOrDefault(1);\r\n return Ra.unlocks.vXP.effectOrDefault(1) * x;\r\n }\r\n },\r\n ra: {\r\n id: \"ra\",\r\n name: \"Ra\",\r\n color: \"#9575cd\",\r\n chunkGain: \"Dimension Boosts\",\r\n memoryGain: \"current iM\",\r\n secondaryMemoryChunkGain: \"Total Celestial Memories\",\r\n requiredUnlock: () => (MendingUpgrade(19).isBought ? undefined : false),\r\n rawMemoryChunksPerSecond: () =>{\r\n let x = 0;\r\n if(Ra.unlocks.secondaryMemoryChunkGain.isUnlocked){\r\n x += Ra.pets.teresa.memories;\r\n x += Ra.pets.effarig.memories;\r\n x += Ra.pets.enslaved.memories;\r\n x += Ra.pets.v.memories\r\n x += Ra.pets.ra.memories\r\n x += Ra.pets.laitela.memories\r\n x += Ra.pets.pelle.memories\r\n }\r\n x /= 7e9;\r\n let primeAnswer=2 * Math.pow((DimBoost.purchasedBoosts + DimBoost.imaginaryBoosts)/(Ra.unlocks.generateMemChunksOutOfRasReality.isUnlocked ? 1e2 : 1.4e11), (Ra.unlocks.improvedChunkGains.isUnlocked ? 1.75 : 1.5)) * Math.max(Math.log10(Math.min(0, x)), 1);\r\n return primeAnswer;\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 5) x*= CorruptionUpgrade(1).effectOrDefault(1);\r\n //if (Ra.currentCelestial === 7) x*= Ra.unlocks.boostMemoryGain.effectOrDefault(1);\r\n return Ra.unlocks.raXP.effectOrDefault(1) * x;\r\n }\r\n },\r\n laitela: {\r\n id: \"laitela\",\r\n name: \"Lai'tela\",\r\n color: \"white\",\r\n chunkGain: \"Continuum\",\r\n memoryGain: \"Singularity amount\",\r\n secondaryMemoryChunkGain: \"Dark Matter\",\r\n requiredUnlock: () => (MendingUpgrade(19).isBought ? undefined : false),\r\n rawMemoryChunksPerSecond: () =>{\r\n let x = Ra.unlocks.secondaryMemoryChunkGain.isUnlocked ? Math.max(Decimal.log10(Currency.darkMatter.value) / 308, 1) : 1;\r\n let primeAnswer = (2 * Math.pow((AntimatterDimensions.all.reduce((totalContinuum,dim) => totalContinuum+dim.continuumValue, 0) + Tickspeed.continuumValue)/(Ra.unlocks.unlockDMD.isUnlocked ? 1e2 : 5e11), (Ra.unlocks.unlockPelleContinuum.isUnlocked ? 1.667 : 1.5))) * x;\r\n return primeAnswer;\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 6) x*= CorruptionUpgrade(1).effectOrDefault(1);\r\n //if (Ra.currentCelestial === 7) x*= Ra.unlocks.boostMemoryGain.effectOrDefault(1);\r\n return Ra.unlocks.laitelaXP.effectOrDefault(1) * x;\r\n }\r\n },\r\n pelle: {\r\n id: \"pelle\",\r\n name: \"Pelle\",\r\n color: \"crimson\",\r\n chunkGain: \"Remnants (Only increases in Doomed Reality)\",\r\n memoryGain: \"best Remnants without Galaxy Generator\",\r\n secondaryMemoryChunkGain: \"Reality Shards\",\r\n requiredUnlock: () => (MendingUpgrade(19).isBought ? undefined : false),\r\n rawMemoryChunksPerSecond: () =>{\r\n let x = Ra.unlocks.secondaryMemoryChunkGain.isUnlocked ? Math.max(Math.log10(Currency.realityShards.value.toNumber()), 1) : 1;\r\n let y = Ra.unlocks.improvedChunkGains.isUnlocked ? 1.05 : 1;\r\n return (x * player.celestials.pelle.remnants) ** y;\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 7) x*= (Ra.unlocks.boostMemoryGain.effectOrDefault(1) * CorruptionUpgrade(1).effectOrDefault(1));\r\n return Ra.unlocks.pelleXP.effectOrDefault(1) * x;\r\n }\r\n }\r\n },\r\n unlocks: {\r\n autoTP: {\r\n id: 0,\r\n reward: \"Tachyon Particles are given immediately when Time Dilation is active\",\r\n pet: \"teresa\",\r\n level: 1,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n chargedInfinityUpgrades: {\r\n id: 1,\r\n reward: () => `Unlock Charged Infinity Upgrades. You get one more maximum\r\n Charged Infinity Upgrade every ${formatInt(2)} levels`,\r\n effect: () => Math.min(12, Math.floor(Ra.pets.teresa.level / 2)),\r\n pet: \"teresa\",\r\n level: 2,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n teresaXP: {\r\n id: 2,\r\n reward: \"All Memory Chunks produce more Memories based on Reality Machines\",\r\n effect: () => 1 + Math.pow(Currency.realityMachines.value.pLog10() / 100, 0.5),\r\n pet: \"teresa\",\r\n level: 5,\r\n displayIcon: `Ϟ`\r\n },\r\n alteredGlyphs: {\r\n id: 3,\r\n reward: \"Unlock Altered Glyphs, which grant new effects to Glyphs based on Glyph Sacrifice\",\r\n pet: \"teresa\",\r\n level: 10,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n effarigUnlock: {\r\n id: 4,\r\n reward: \"Unlock Effarig's Memories\",\r\n pet: \"teresa\",\r\n level: 8,\r\n displayIcon: `Ϙ`\r\n },\r\n perkShopIncrease: {\r\n id: 5,\r\n reward: \"Purchase caps are raised in Teresa's Perk Point Shop\",\r\n pet: \"teresa\",\r\n level: 15,\r\n displayIcon: ``\r\n },\r\n unlockDilationStartingTP: {\r\n id: 6,\r\n reward: `In non-Celestial Realities, gain Tachyon Particles as if you reached the square root of your total\r\n antimatter in Dilation. Any multipliers to TP gain are applied retroactively, even outside Dilation`,\r\n effect: () => player.records.totalAntimatter.pow(0.5),\r\n pet: \"teresa\",\r\n level: 25,\r\n displayIcon: ``\r\n },\r\n extraGlyphChoicesAndRelicShardRarityAlwaysMax: {\r\n id: 7,\r\n reward: () => `Get ${formatX(2)} Glyph choices and the bonus to Glyph rarity from Relic Shards\r\n is always its maximum value`,\r\n effect: 2,\r\n pet: \"effarig\",\r\n level: 1,\r\n displayIcon: ``\r\n },\r\n unlockGlyphAlchemy: {\r\n id: 8,\r\n reward: `Unlock Glyph Alchemy, which adds alchemical resources you can increase by Refining Glyphs. You unlock\r\n more resources through Effarig levels. Access through a new Reality tab.`,\r\n pet: \"effarig\",\r\n level: 2,\r\n displayIcon: ``\r\n },\r\n effarigXP: {\r\n id: 9,\r\n reward: \"All Memory Chunks produce more Memories based on highest Glyph level\",\r\n effect: () => 1 + player.records.bestReality.glyphLevel / 7000,\r\n pet: \"effarig\",\r\n level: 5,\r\n displayIcon: ``\r\n },\r\n glyphEffectCount: {\r\n id: 10,\r\n reward: () => `Glyphs always have ${formatInt(4)} effects, and Effarig Glyphs can now have up to ${formatInt(7)}`,\r\n pet: \"effarig\",\r\n level: 10,\r\n displayIcon: ``\r\n },\r\n enslavedUnlock: {\r\n id: 11,\r\n reward: \"Unlock Nameless's Memories\",\r\n pet: \"effarig\",\r\n level: 8,\r\n displayIcon: `\\uf0c1`\r\n },\r\n relicShardGlyphLevelBoost: {\r\n id: 12,\r\n reward: \"Glyph level is increased based on Relic Shards gained\",\r\n effect: () => CorruptionUpgrade(7).isBought ? 1000 * Math.pow(Decimal.log2(Decimal.max(Effarig.shardsGained, 1)), 2) : 100 * Math.pow(Decimal.log10(Decimal.max(Effarig.shardsGained, 1)), 2)\r\n //if(CorruptionUpgrade(7).isBought) return 1000 * Math.pow(Decimal.log2(Decimal.max(Effarig.shardsGained, 1)), 2)\r\n ,\r\n pet: \"effarig\",\r\n level: 15,\r\n displayIcon: ``\r\n },\r\n maxGlyphRarityAndShardSacrificeBoost: {\r\n id: 13,\r\n reward: () => `Glyphs are always generated with ${formatPercents(1)} rarity and\r\n Glyph Sacrifice gain is raised to a power based on Relic Shards`,\r\n effect: () => 1 + Effarig.maxRarityBoost / 100,\r\n pet: \"effarig\",\r\n level: 25,\r\n displayIcon: ``\r\n },\r\n blackHolePowerAutobuyers: {\r\n id: 14,\r\n reward: \"Unlock Black Hole power upgrade autobuyers\",\r\n pet: \"enslaved\",\r\n level: 1,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n improvedStoredTime: {\r\n id: 15,\r\n reward: \"Stored game time is amplified and you can store more real time, increasing with Nameless levels\",\r\n effects: {\r\n gameTimeAmplification: () => Math.pow(20, Math.clampMax(Ra.pets.enslaved.level, Ra.levelCap)),\r\n realTimeCap: () => 1000 * 3600 * Ra.pets.enslaved.level,\r\n },\r\n pet: \"enslaved\",\r\n level: 2,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n enslavedXP: {\r\n id: 16,\r\n reward: \"All Memory Chunks produce more Memories based on total time played\",\r\n effect: () => 1 + Decimal.log10(player.records.totalTimePlayed) / 200,\r\n pet: \"enslaved\",\r\n level: 5,\r\n displayIcon: ``\r\n },\r\n autoPulseTime: {\r\n id: 17,\r\n reward: () => `Black Hole charging now only uses ${formatPercents(0.99)} of your game speed and you can\r\n automatically discharge ${formatPercents(0.01)} of your stored game time every ${formatInt(5)} ticks.`,\r\n pet: \"enslaved\",\r\n level: 10,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n vUnlock: {\r\n id: 18,\r\n reward: \"Unlock V's Memories\",\r\n pet: \"enslaved\",\r\n level: 8,\r\n displayIcon: `⌬`\r\n },\r\n peakGamespeedDT: {\r\n id: 19,\r\n reward: \"Gain more Dilated Time based on peak game speed in each Reality\",\r\n effect: () => Math.max(Math.pow(Decimal.log10(player.celestials.ra.peakGamespeed) - 90, 3), 1),\r\n pet: \"enslaved\",\r\n level: 15,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n allGamespeedGlyphs: {\r\n id: 20,\r\n reward: `All basic Glyphs gain the increased game speed effect from Time Glyphs,\r\n and Time Glyphs gain an additional effect`,\r\n pet: \"enslaved\",\r\n level: 25,\r\n displayIcon: ``,\r\n onUnlock: () => {\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n for (const glyph of allGlyphs) {\r\n Glyphs.applyGamespeed(glyph);\r\n }\r\n }\r\n },\r\n instantECAndRealityUpgradeAutobuyers: {\r\n id: 21,\r\n reward: \"Rebuyable Reality upgrades are bought automatically and Auto-Eternity Challenges happen instantly\",\r\n pet: \"v\",\r\n level: 1,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n autoUnlockDilation: {\r\n id: 22,\r\n reward: () => `In non-Celestial Realities, Time Dilation is unlocked automatically for free at\r\n ${formatInt(TimeStudy.dilation.totalTimeTheoremRequirement)} Time Theorems`,\r\n pet: \"v\",\r\n level: 2,\r\n displayIcon: ``\r\n },\r\n vXP: {\r\n id: 23,\r\n reward: \"All Memory Chunks produce more Memories based on total Celestial levels.\",\r\n effect: () => 1 + Ra.totalPetLevel / 50,\r\n pet: \"v\",\r\n level: 5,\r\n displayIcon: ``\r\n },\r\n unlockHardV: {\r\n id: 24,\r\n reward: () => `Unlock Hard V-Achievements and unlock a Triad Study every ${formatInt(6)} levels.\r\n Triad Studies are located at the bottom of the Time Studies page`,\r\n effect: () => Math.floor(Ra.pets.v.level / 6),\r\n pet: \"v\",\r\n level: 6,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n continuousTTBoost: {\r\n id: 25,\r\n reward: \"Time Theorems boost all forms of continuous non-dimension production\",\r\n effects: {\r\n ttGen: () => Decimal.pow(10, 5 * Ra.theoremBoostFactor()),\r\n eternity: () => Decimal.pow(10, 2 * Ra.theoremBoostFactor()),\r\n infinity: () => Decimal.pow(10, 15 * Ra.theoremBoostFactor()),\r\n replicanti: () => Decimal.pow(10, 20 * Ra.theoremBoostFactor()),\r\n dilatedTime: () => Decimal.pow(10, 3 * Ra.theoremBoostFactor()),\r\n memories: () => 1 + Ra.theoremBoostFactor() / 50,\r\n memoryChunks: () => 1 + Ra.theoremBoostFactor() / 50,\r\n autoPrestige: () => 1 + 2.4 * Ra.theoremBoostFactor()\r\n },\r\n pet: \"v\",\r\n level: 10,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n achievementTTMult: {\r\n id: 26,\r\n reward: \"Achievement multiplier applies to Time Theorem generation\",\r\n effect: () => Achievements.power,\r\n pet: \"v\",\r\n level: 15,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n achievementPower: {\r\n id: 27,\r\n reward: () => `Achievement multiplier is raised ${formatPow(1.5, 1, 1)}`,\r\n effect: 1.5,\r\n pet: \"v\",\r\n level: 25,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n imaginaryMachinesSetToCap: {\r\n id: 0,\r\n id2: 0,\r\n reward: \"Current Imaginary Machine amount is always set to cap\",\r\n pet: \"teresa\",\r\n level: 30,\r\n displayIcon: ``\r\n },\r\n chargedBreakInfinityUpgrades: {\r\n id: 1,\r\n id2: 0,\r\n reward: () => `Unlock Charged Break Infinity Upgrades. You get one more maximum\r\n Charged Break Infinity Upgrade every ${formatInt(6)} levels past ${formatInt(40)}`,\r\n effect: () => Math.min(9, Math.floor((Ra.pets.teresa.level-40) / 6 + 1)),\r\n pet: \"teresa\",\r\n level: 40,\r\n displayIcon: \"∝\",\r\n disabledByPelle: true\r\n },\r\n uncapGlyphSacEffects: {\r\n id: 2,\r\n id2: 0,\r\n reward: \"Some Glyph Sacrifice effects are uncapped\",\r\n pet: \"teresa\",\r\n level: 50,\r\n displayIcon: ``\r\n },\r\n retroactiveTeresaRealityReward: {\r\n id: 3,\r\n id2: 0,\r\n reward: () => `Your record antimatter in Teresa's Reality is retroactively set to the square root of your total antimatter`,\r\n pet: \"teresa\",\r\n level: 65,\r\n displayIcon: \"Ϟ\"\r\n },\r\n realityMachinesBoostIpAndEpGain: {\r\n id: 4,\r\n id2: 0,\r\n reward: \"Reality Machines boost Infinity Point and Eternity Point gain\",\r\n pet: \"teresa\",\r\n level: 75,\r\n displayIcon: ``,\r\n effect: () => Decimal.log10(Currency.realityMachines) / 100\r\n },\r\n realitiesBoostInfinityAndEternityProduction: {\r\n id: 5,\r\n id2: 0,\r\n reward: \"Realities boost Infinity and Eternity production\",\r\n pet: \"teresa\",\r\n level: 90,\r\n displayIcon: 'τ'\r\n },\r\n postWarpRealityMachineBoost: {\r\n id: 6,\r\n id2: 0,\r\n reward: \"Post-Warp Reality Machine gain is affected by Elliptic Materiality\",\r\n pet: \"teresa\",\r\n level: 100,\r\n displayIcon: ''\r\n },\r\n alchSetToCapAndCapIncrease: {\r\n id: 8,\r\n id2: 0,\r\n reward: () => `Alchemy passively occurs, and increase the hardcap by ${formatInt(5)} per level`,\r\n effect: () => 10 * Ra.pets.effarig.level,\r\n pet: \"effarig\",\r\n level: 30,\r\n displayIcon: ''\r\n },\r\n passiveRelicShardGain: {\r\n id: 9,\r\n id2: 0,\r\n reward: \"You gain 100% of relic shards on reality every second\",\r\n pet: \"effarig\",\r\n level: 40,\r\n displayIcon: ``\r\n },\r\n harshInstabilityDelay: {\r\n id: 10,\r\n id2: 0,\r\n reward: () => `Logarithmic glyph instability is delayed by ${formatInt(500)} for every ${formatInt(5)} levels past ${formatInt(50)}`,\r\n effect: () => 500*Math.floor((Ra.pets.effarig.level-50)/5),\r\n pet: \"effarig\",\r\n level: 50,\r\n displayIcon: ''\r\n },\r\n relicShardBoost: {\r\n id: 11,\r\n id2: 0,\r\n reward: \"Relic shards boost dimensional sacrifice, replicanti speed, infinity power conversion rate, tachyon particle to dilated time factor and time dimensions\",\r\n pet: \"effarig\",\r\n level: 65,\r\n displayIcon: ''\r\n },\r\n effarigGlyphIncreaseImCap: {\r\n id: 12,\r\n id2: 0,\r\n reward: \"Effarig Glyphs' first effect also increases Imaginary Machine cap\",\r\n pet: \"effarig\",\r\n level: 75,\r\n displayIcon: ``\r\n },\r\n maxGlyphRarityIncrease: {\r\n id: 13,\r\n id2: 0,\r\n reward: () => `Maximum Glyph rarity is increased by ${formatPercents(.02)} per level past ${formatInt(90)}`,\r\n effect: () => 2*(Ra.pets.effarig.level-90),\r\n pet: \"effarig\",\r\n level: 90,\r\n displayIcon: ``\r\n },\r\n effarigMendUnlock: {\r\n id: 14,\r\n id2: 0,\r\n reward: \"Unlock Effarig's Mend\",\r\n pet: \"effarig\",\r\n level: 100,\r\n displayIcon: `Ϙ`\r\n },\r\n uncapGamespeed: {\r\n id: 15,\r\n id2: 0,\r\n reward: \"Remove the 1e300 Gamespeed cap\",\r\n pet: \"enslaved\",\r\n level: 30,\r\n displayIcon: ``\r\n },\r\n uncap8TdPurchaseMult: {\r\n id: 16,\r\n id2: 0,\r\n reward: \"Uncap 8th Time Dimension purchase multiplier\",\r\n pet: \"enslaved\",\r\n level: 40,\r\n displayIcon: 'Δ'\r\n },\r\n unlock3rdBH: {\r\n id: 17,\r\n id2: 0,\r\n reward: \"Unlock the 3rd Black Hole which costs Imaginary Machines and boosts Game Speed exponentially instead of multiplicatively\",\r\n pet: \"enslaved\",\r\n level: 50,\r\n displayIcon: '',\r\n disabledByPelle: true\r\n },\r\n twinTachyonGalaxyCapIncrease: {\r\n id: 18,\r\n id2: 0,\r\n reward: \"Increase Pelle Tachyon Galaxy multiplier upgrade base based on Dilated Time\",\r\n pet: \"enslaved\",\r\n level: 65,\r\n displayIcon: '♅'\r\n },\r\n gamespeedGalaxyBoost: {\r\n id: 19,\r\n id2: 0,\r\n reward: \"Game Speed increases Galaxy strength\",\r\n pet: \"enslaved\",\r\n level: 75,\r\n displayIcon: '',\r\n effect: () => Math.max(1 ,1 + (Decimal.log10(getGameSpeedupFactor()) / 1000)) //this shouldn't be 100% until e1000 gamespeed\r\n },\r\n freeTickspeedSoftcapDelay: {\r\n id: 20,\r\n id2: 0,\r\n reward: \"Tesseracts increase free tickspeed upgrade softcap\",\r\n pet: \"enslaved\",\r\n level: 90,\r\n displayIcon: ''\r\n },\r\n improvedIpowConversion: {\r\n id: 21,\r\n id2: 0,\r\n reward: \"Improve Infinity Power conversion (based on effective Tesseract count)\",\r\n pet: \"enslaved\",\r\n level: 100,\r\n displayIcon: ``\r\n },\r\n improvedECRewards: {\r\n id: 22,\r\n id2: 0,\r\n reward: \"Each Eternity Challenge Gains an Additional Reward, Increasing Based on V Level and total Space Theorems\",\r\n pet: \"v\",\r\n level: 30,\r\n displayIcon: `⌬`,\r\n },\r\n unlockSHardV: {\r\n id: 23,\r\n id2: 0,\r\n reward: \"Unlock More Hard V-Achievements (not affected by Mending Upgrade 14, except Space Theorem gain), V's Superhard Reality (and assiocated Achievements) and more V-Milestones\",\r\n pet: \"v\",\r\n level: 40,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n vAchMilestone2AffectsIDsAndTDs: {\r\n id: 24,\r\n id2: 0,\r\n reward: \"The 5 V-Achievement milestone affects Infinity and Time Dimensions with reduced effect\",\r\n pet: \"v\",\r\n level: 50,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n repIncreasesAchMult: {\r\n id: 25,\r\n id2: 0,\r\n reward: \"Replicanti increases achievement multiplier\",\r\n pet: \"v\",\r\n level: 65,\r\n displayIcon: GLYPH_SYMBOLS.replication\r\n },\r\n totalSTBoostTTGen: {\r\n id: 26,\r\n id2: 0,\r\n reward: \"Total Space Theorems boost Time Theorem generation\",\r\n pet: \"v\",\r\n level: 75,\r\n displayIcon: ``\r\n },\r\n unlockMyriads: {\r\n id: 27,\r\n id2: 0,\r\n reward: \"Unlock a Myriad Study every 2 Memory Levels past 90\",\r\n pet: \"v\",\r\n level: 90,\r\n effect: () => Math.floor((Ra.pets.v.level - 90) / 2) + 1,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n achMultBaseImprovementV: {\r\n id: 28,\r\n id2: 0,\r\n reward: \"Improve Base Achievemnt Multiplier\",\r\n pet: \"v\",\r\n level: 100,\r\n displayIcon: ``\r\n },\r\n raRealUncapDimboost: {\r\n id: 29,\r\n id2: 0,\r\n reward: \"Uncap Dimension Boosts in Ra's reality\",\r\n pet: \"ra\",\r\n level: 1,\r\n displayIcon: GLYPH_SYMBOLS.power\r\n },\r\n rautobuyers: {\r\n id: 30,\r\n id2: 0,\r\n reward: \"(Kept without Ra 30) Unlock Autobuyers for Memory Levels, Recollections and Fragmentations\",\r\n pet: \"ra\",\r\n level: 2,\r\n displayIcon: ``\r\n },\r\n raXP: {\r\n id: 31,\r\n id2: 0,\r\n reward: \"All Memory Chunks produce more Memories based on Imaginary Machines\",\r\n pet: \"ra\",\r\n level: 5,\r\n displayIcon: ``,\r\n effect: () => Math.max(1, Math.pow(Math.log(Math.max(1,Currency.imaginaryMachines.value)), 0.5))\r\n },\r\n upgradesDontSpendMems: {\r\n id: 0,\r\n id2: 1,\r\n reward: \"Level Up, Recollection and Fragmentation don't spend memories\",\r\n pet: \"ra\",\r\n level: 8,\r\n displayIcon: ''\r\n },\r\n secondaryMemoryChunkGain: {\r\n id: 1,\r\n id2: 1,\r\n reward: \"Add a secondary source for Memory Chunk Gain for each Celestial\",\r\n pet: \"ra\",\r\n level: 10,\r\n displayIcon: ''\r\n },\r\n remembranceBoost: {\r\n id: 2,\r\n id2: 1,\r\n reward: \"Remembrance is ×15 as powerful\",\r\n pet: \"ra\",\r\n level: 15,\r\n displayIcon: ''\r\n },\r\n generateMemChunksOutOfRasReality: {\r\n id: 3,\r\n id2: 1,\r\n reward: \"You can generate Memory Chunks outside of Ra's reality at a heavily reduced rate. Improve Ra's memory chunk formula.\",\r\n pet: \"ra\",\r\n level: 25,\r\n displayIcon: 'Ϟ'\r\n },\r\n raNoReset: {\r\n id: 4,\r\n id2: 1,\r\n reward: \"Ra no longer resets on Mend\",\r\n pet: \"ra\",\r\n level: 30,\r\n displayIcon: ''\r\n },\r\n remembranceAlwaysActiveAndShopUnlock: {\r\n id: 5,\r\n id2: 1,\r\n reward: \"Remembrance has no downside, affects all celestials and is always active, unlock Ra's Shop\",\r\n pet: \"ra\",\r\n level: 40,\r\n displayIcon: ``\r\n },\r\n improvedChunkGains: {\r\n id: 6,\r\n id2: 1,\r\n reward: \"Base Memory Chunk formula for all Celestials is slightly improved\",\r\n pet: \"ra\",\r\n level: 50,\r\n displayIcon: ``\r\n },\r\n imaginaryBoostsRa: {\r\n id: 7,\r\n id2: 1,\r\n reward: \"Free Dimension Boosts are effective in Ra's Reality\",\r\n pet: \"ra\",\r\n level: 65,\r\n displayIcon: ``\r\n },\r\n freeDimBoosts: {\r\n id: 8,\r\n id2: 1,\r\n reward: \"Gain Free Dimension Boosts based on Ra Level\",\r\n pet: \"ra\",\r\n level: 75,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n improvedPetUpgrades: {\r\n id: 9,\r\n id2: 1,\r\n reward: \"Unlock a new row of permenant upgrades in Ra's shop\",\r\n pet: \"ra\",\r\n level: 90,\r\n displayIcon: ``\r\n },\r\n mendingPointsGainMult: {\r\n id: 10,\r\n id2: 1,\r\n reward: \"Gain a Multiversal Remain Multiplier based on total Memory Levels\",\r\n pet: \"ra\",\r\n level: 100,\r\n displayIcon: ``\r\n },\r\n increaseDarkMatterCap: {\r\n id: 11,\r\n id2: 1,\r\n reward: \"Increase dark matter cap based on Laitela level\",\r\n effect: () => (Ra.pets.laitela.level),\r\n pet: \"laitela\",\r\n level: 1,\r\n displayIcon: 'ᛝ'\r\n },\r\n annihilationDarkEnergyBoost: {\r\n id: 12,\r\n id2: 1,\r\n reward: \"Annihilation increases dark energy production with reduced effect\",\r\n pet: \"laitela\",\r\n level: 2,\r\n displayIcon: ''\r\n },\r\n laitelaXP: {\r\n id: 13,\r\n id2: 1,\r\n reward: \"All Memory Chunks produce more Memories based on Singularities\",\r\n effect: () => Math.max(Math.log10(Currency.singularities.value) / 10, 1),\r\n pet: \"laitela\",\r\n level: 5,\r\n displayIcon: ''\r\n },\r\n totalAntimatterDarkMatterBoost: {\r\n id: 14,\r\n id2: 1,\r\n reward: \"Total Antimatter boosts dark matter gain\",\r\n pet: \"laitela\",\r\n level: 8,\r\n displayIcon: GLYPH_SYMBOLS.power\r\n },\r\n infinityPowerConversionBoost: {\r\n id: 15,\r\n id2: 1,\r\n reward:() => `Increase the base infinity power conversion by ${formatFloat(0.25, 2)} every ${formatInt(10)} levels`,\r\n effect: () => .25 * Math.floor(Ra.pets.laitela.level/10),\r\n pet: \"laitela\",\r\n level: 10,\r\n displayIcon: ``\r\n },\r\n passiveAnnihilationGen: {\r\n id: 16,\r\n id2: 1,\r\n reward: `Passively generate half of your Annihilation multiplier every second`,\r\n pet: \"laitela\",\r\n level: 15,\r\n displayIcon: ``\r\n },\r\n unlockDMD: {\r\n id: 17,\r\n id2: 1,\r\n reward: () => `Unlock a new Dark Matter Dimension every ${formatInt(25)} levels. Improve Lai'tela's memory chunk formula.`,\r\n pet: \"laitela\",\r\n level: 25,\r\n displayIcon: ``\r\n },\r\n continuumBoost: {\r\n id: 18,\r\n id2: 1,\r\n reward: () => `Improve Continuum effect for every ${format(\"1e308\")} Dark Matter`,\r\n pet: \"laitela\",\r\n level: 30,\r\n displayIcon: ''\r\n },\r\n increaseSingLimits: {\r\n id: 19,\r\n id2: 1,\r\n reward: () => `You can increase the max singularity cap by ${formatInt(2)} every ${formatInt(5)} levels`,\r\n pet: \"laitela\",\r\n level: 40,\r\n displayIcon: ''\r\n },\r\n dmdAuto1: {\r\n id: 20,\r\n id2: 1,\r\n reward: \"(Kept without Ra 30) Unlock Permanent autobuyers for all Dark Matter Dimensions\",\r\n pet: \"laitela\",\r\n level: 50,\r\n displayIcon: ``\r\n },\r\n dmdAuto2: {\r\n id: 21,\r\n id2: 1,\r\n reward: \"(Kept without Ra 30) Unlock Permanent autobuyers for Annihilation, Singularities and Singularity Caps. Manual Annihilations are 500x stronger.\",\r\n pet: \"laitela\",\r\n level: 65,\r\n displayIcon: `` \r\n },\r\n continuumAffectsIDsAndTDs: {\r\n id: 22,\r\n id2: 1,\r\n reward: \"Continuum affects Infinity and Time Dimensions (With reduced effect)\",\r\n pet: \"laitela\",\r\n level: 75,\r\n displayIcon: ``\r\n },\r\n dmdScaling: {\r\n id: 23,\r\n id2: 1,\r\n reward: \"Entropic Condensing is far stronger.\",\r\n pet: \"laitela\",\r\n level: 90,\r\n displayIcon: ``\r\n },\r\n unlockMultiversalDimensions: {\r\n id: 24,\r\n id2: 1,\r\n reward: \"Unlock Multiversal Dimensions [name TBD]\",\r\n pet: \"laitela\",\r\n level: 100,\r\n displayIcon: \"*\"\r\n },\r\n pelleAutobuyers: {\r\n id: 25,\r\n id2: 1,\r\n reward: \"Pelle Upgrades are purchased automatically\",\r\n pet: \"pelle\",\r\n level: 1,\r\n displayIcon: ``\r\n },\r\n boostMVRGain: {\r\n id: 26,\r\n id2: 1,\r\n reward: \"Triple Multiversal Remain gain when Mending in a Doomed Reality, you can now fill up to 5 rifts at once\",\r\n effect: () => Pelle.isDoomed ? 3 : 1,\r\n pet: \"pelle\",\r\n level: 2,\r\n displayIcon: ''\r\n },\r\n pelleXP: {\r\n id: 27,\r\n id2: 1,\r\n reward: \"All Memory Chunks produce more Memories based on highest Remnants without Galaxy Generator.\",\r\n effect: () => Math.max(Math.log10(player.records.thisReality.remWithoutGG)/2, 1),\r\n pet: \"pelle\",\r\n level: 5,\r\n displayIcon: '♅'\r\n },\r\n unlockPelleTPMult: {\r\n id: 28,\r\n id2: 1,\r\n reward: \"Re-enable Tachyon Particle Multiplier in Doomed Reality, but it's decreased to ×1.1\",\r\n pet: \"pelle\",\r\n level: 8,\r\n displayIcon: GLYPH_SYMBOLS.dilation\r\n },\r\n exitDoom: {\r\n id: 29,\r\n id2: 1,\r\n reward: \"Doomed Reality can be exitied, but it causes a Mending Reset (with no benefits)\",\r\n pet: \"pelle\",\r\n level: 10,\r\n displayIcon: ''\r\n },\r\n unlockPelleIPAndEPMult: {\r\n id: 30,\r\n id2: 1,\r\n reward: \"Doomed Reality no longer disables rebuyable IP and EP multipliers, but they are decreased to ×1.01 and ×1.5 respectively\",\r\n pet: \"pelle\",\r\n level: 15,\r\n displayIcon: ``\r\n },\r\n unlockPelleGlyphEffects: {\r\n id: 31,\r\n id2: 1,\r\n reward: \"Baisc Glyphs' disabled effects are re-enabled in Doomed Reality.\",\r\n pet: \"pelle\",\r\n level: 25,\r\n displayIcon: ``\r\n },\r\n boostMemoryGain: {\r\n id: 0,\r\n id2: 2,\r\n reward: \"Memory Gain for all Celestials is boosted in Doomed Reality\",\r\n pet: \"pelle\",\r\n level: 30,\r\n displayIcon: ``,\r\n effect: 500\r\n },\r\n unlockPelleContinuum: {\r\n id: 1,\r\n id2: 2,\r\n reward: \"Continuum is re-enabled in Doomed Reality, but is severely weakened, and only effective for Antimatter Dimensions\",\r\n pet: \"pelle\",\r\n level: 40,\r\n displayIcon: ``\r\n },\r\n pelleRarityBoost: {\r\n id: 2,\r\n id2: 2,\r\n reward: \"Glyph Rarity in Doomed Reality is boosted based on Memory Levels past 50\",\r\n pet: \"pelle\",\r\n level: 50,\r\n displayIcon: ``\r\n },\r\n omegaScalingBuff: {\r\n id: 3,\r\n id2: 2,\r\n reward: \"Make the scaling at glyph level 100,000 weaker.\",\r\n pet: \"pelle\",\r\n level: 65,\r\n displayIcon: ``\r\n },\r\n Hostility: {\r\n id: 4,\r\n id2: 2,\r\n reward: () => Ra.unlocks.Hostility.isUnlocked ? \"Unlock Hostilities\" : \"Reach Pelle 75 to see reward\",\r\n pet: \"pelle\",\r\n level: 75,\r\n displayIcon: () => Ra.unlocks.Hostility.isUnlocked ?``:\"?\"\r\n },\r\n DimLimitCorruptionImprovementPelle: {\r\n id: 5,\r\n id2: 2,\r\n reward: () => Ra.unlocks.Hostility.isUnlocked ? \"Make Dimensional Limitations slightly Weaker\" : \"Reach Pelle 75 to see reward\",\r\n pet: \"pelle\",\r\n level: 90,\r\n displayIcon: () => Ra.unlocks.Hostility.isUnlocked ?``:\"?\"\r\n },\r\n kohlersRealmUnlock: {\r\n id: 6,\r\n id2: 2,\r\n reward: () => {\r\n const remainingLevels = 600 - (Ra.totalPetLevel-Ra.pets.pelle.level);\r\n const remainingText = remainingLevels===0?\"\":` (Requires all celestials to be level ${formatInt(100)}, ${quantifyInt(\"level\", remainingLevels)} remaining)`;\r\n const kohlerUnlocked = Ra.unlocks.kohlersRealmUnlock.isUnlocked;\r\n const kohlerName = processText(\"Kohler\", makeGarbledTemplate(\"Kohler\"), kohlerUnlocked);\r\n return `Unlock ${kohlerName}'s Realm${remainingText}`;\r\n },\r\n pet: \"pelle\",\r\n level: 100,\r\n displayIcon: () => Ra.unlocks.kohlersRealmUnlock.isUnlocked?``:\"?\"\r\n },\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport wordShift from \"../../word-shift\";\r\n\r\nexport const pelleRifts = {\r\n vacuum: {\r\n id: 1,\r\n key: \"vacuum\",\r\n name: [\"Vacuum\", \"Hollow\", \"Void\"],\r\n drainResource: \"IP\",\r\n baseEffect: x => `IP gain ${formatX(x, 2, 2)}`,\r\n additionalEffects: () => [PelleRifts.vacuum.milestones[2]],\r\n strike: () => PelleStrikes.infinity,\r\n percentage: totalFill => Math.log10(totalFill.plus(1).log10() * 10 + 1) ** 2.5 / 100,\r\n percentageToFill: percentage => Decimal.pow(10,\r\n Decimal.pow(10, (percentage * 100) ** (1 / 2.5)).div(10).minus(0.1)\r\n ).minus(1),\r\n effect: totalFill => {\r\n if (player.challenge.eternity.current !== 0) {\r\n const chall = EternityChallenge.current;\r\n const goal = chall.goalAtCompletions(chall.gainedCompletionStatus.totalCompletions);\r\n return totalFill.plus(1).pow(0.1).min(goal.pow(0.15));\r\n }\r\n return totalFill.plus(1).pow(0.33);\r\n },\r\n currency: () => Currency.infinityPoints,\r\n galaxyGeneratorThreshold: 1000,\r\n milestones: [\r\n {\r\n resource: \"vacuum\",\r\n requirement: 0.04,\r\n description: \"You can equip a single basic Glyph with decreased level and rarity\"\r\n },\r\n {\r\n resource: \"vacuum\",\r\n requirement: 0.06,\r\n description: () => `Uncap Replicanti and make its unlock and upgrades ${formatX(1e130)} cheaper`,\r\n effect: () => 1e130\r\n },\r\n {\r\n resource: \"vacuum\",\r\n requirement: 0.4,\r\n description: () => `${wordShift.wordCycle(PelleRifts.vacuum.name)} also affects EP gain`,\r\n effect: () => Decimal.pow(4, PelleRifts.vacuum.totalFill.log10() / 2 / 308 + 3),\r\n formatEffect: x => `EP gain ${formatX(x, 2, 2)}`\r\n },\r\n ],\r\n galaxyGeneratorText: \"There is not enough space left for more, you must fill in the $value\"\r\n },\r\n decay: {\r\n id: 2,\r\n key: \"decay\",\r\n name: [\"Decay\", \"Collapse\", \"Disarray\"],\r\n drainResource: \"Replicanti\",\r\n spendable: true,\r\n baseEffect: x => `Replicanti speed ${formatX(x, 2, 2)}`,\r\n additionalEffects: () => [PelleRifts.decay.milestones[0], PelleRifts.decay.milestones[2]],\r\n strike: () => PelleStrikes.powerGalaxies,\r\n // 0 - 1\r\n percentage: totalFill => totalFill.plus(1).log10() * 0.05 / 100,\r\n // 0 - 1\r\n percentageToFill: percentage => Decimal.pow(10, 20 * percentage * 100).minus(1),\r\n effect: totalFill => (PelleRifts.chaos.milestones[0].canBeApplied\r\n ? Decimal.sqrt(2000 + 1) : Decimal.sqrt(totalFill.plus(1).log10() + 1)),\r\n currency: () => Currency.replicanti,\r\n galaxyGeneratorThreshold: 1e7,\r\n milestones: [\r\n {\r\n resource: \"decay\",\r\n requirement: 0.2,\r\n description: \"First rebuyable Pelle upgrade also affects 1st Infinity Dimension\",\r\n effect: () => {\r\n let x = player.celestials.pelle.rebuyables.antimatterDimensionMult;\r\n if(x<9) x=9;\r\n return Decimal.pow(1e50, x - 9);\r\n },\r\n formatEffect: x => `1st Infinity Dimension ${formatX(x, 2, 2)}`\r\n },\r\n {\r\n resource: \"decay\",\r\n requirement: 0.6,\r\n description: () => `When Replicanti exceeds ${format(DC.E1300)},\r\n all Galaxies are ${formatPercents(0.1)} more effective`,\r\n effect: () => (Replicanti.amount.gt(DC.E1300) ? 1.1 : 1)\r\n },\r\n {\r\n resource: \"decay\",\r\n requirement: 1,\r\n description: \"Increase max Replicanti Galaxies based on total Rift milestones\",\r\n effect: () => {\r\n const x = PelleRifts.totalMilestones();\r\n return x ** 2 - 2 * x;\r\n },\r\n formatEffect: x => `Max RG count +${formatInt(x)}`\r\n },\r\n ],\r\n galaxyGeneratorText: \"There's not enough antimatter to form new Galaxies, you need to reverse the $value\"\r\n },\r\n chaos: {\r\n id: 3,\r\n key: \"chaos\",\r\n name: [\"Chaos\", \"Disorder\", \"Impurity\"],\r\n drainResource: [\"Decay\", \"Collapse\", \"Disarray\"],\r\n baseEffect: x => `Time Dimensions ${formatX(x, 2, 2)}`,\r\n strike: () => PelleStrikes.eternity,\r\n percentage: totalFill => totalFill / 10,\r\n percentageToFill: percentage => 10 * percentage,\r\n effect: totalFill => {\r\n const fill = totalFill > 6.5\r\n ? (totalFill - 6.5) / 7 + 6.5\r\n : totalFill;\r\n return Decimal.pow(6, Decimal.pow(6, Decimal.pow(6, fill / 10 + 0.1)).minus(6))\r\n .div(1e5)\r\n .plus(Decimal.pow(10, fill / 10 + 0.1));\r\n },\r\n currency: () => ({\r\n get value() {\r\n return PelleRifts.decay.percentage;\r\n },\r\n set value(val) {\r\n const spent = PelleRifts.decay.percentage - val;\r\n player.celestials.pelle.rifts.decay.percentageSpent += spent;\r\n }\r\n }),\r\n galaxyGeneratorThreshold: 1e9,\r\n milestones: [\r\n {\r\n resource: \"chaos\",\r\n requirement: 0.09,\r\n description: () => `${wordShift.wordCycle(PelleRifts.decay.name)} \\\r\n effect is always maxed and milestones always active`\r\n },\r\n {\r\n resource: \"chaos\",\r\n requirement: 0.15,\r\n description: \"Glyphs gain a new Pelle-specific effect\",\r\n },\r\n {\r\n resource: \"chaos\",\r\n requirement: 1,\r\n description: () => `You gain ${formatPercents(0.01)} of your EP gained on Eternity per second`,\r\n },\r\n ],\r\n galaxyGeneratorText: \"Your Galaxies are too fragmented, you must stabilize the $value\"\r\n },\r\n recursion: {\r\n id: 4,\r\n key: \"recursion\",\r\n name: [\"Recursion\", \"Dispersion\", \"Destruction\"],\r\n drainResource: \"EP\",\r\n baseEffect: x => `EP formula: log(x)/${formatInt(308)} ➜ log(x)/${formatFloat(308 - x.toNumber(), 2)}`,\r\n additionalEffects: () => [PelleRifts.recursion.milestones[0], PelleRifts.recursion.milestones[1]],\r\n strike: () => PelleStrikes.ECs,\r\n percentage: totalFill => totalFill.plus(1).log10() ** 0.4 / 4000 ** 0.4,\r\n percentageToFill: percentage => Decimal.pow(10, percentage ** 2.5 * 4000).minus(1),\r\n effect: totalFill => new Decimal(58 * totalFill.plus(1).log10() ** 0.2 / 4000 ** 0.2),\r\n currency: () => Currency.eternityPoints,\r\n galaxyGeneratorThreshold: 1e10,\r\n milestones: [\r\n {\r\n resource: \"recursion\",\r\n requirement: 0.10,\r\n description: \"Dimensional Boosts are more powerful based on EC completions\",\r\n effect: () => Math.max(100 * EternityChallenges.completions ** 2, 1) *\r\n Math.max(1e4 ** (EternityChallenges.completions - 40), 1),\r\n formatEffect: x => `Dimension Boost power ${formatX(x, 2, 2)}`\r\n },\r\n {\r\n resource: \"recursion\",\r\n requirement: 0.15,\r\n description: \"Infinity Dimensions are stronger based on EC completions\",\r\n effect: () => Decimal.pow(\"1e1500\", ((EternityChallenges.completions - 25) / 20) ** 1.7).max(1),\r\n formatEffect: x => `Infinity Dimensions ${formatX(x)}`\r\n },\r\n {\r\n resource: \"recursion\",\r\n requirement: 1,\r\n description: \"Permanently unlock the Galaxy Generator\",\r\n },\r\n ],\r\n galaxyGeneratorText: \"Creating more Galaxies is unsustainable, you must focus the $value to allow more\"\r\n },\r\n paradox: {\r\n id: 5,\r\n key: \"paradox\",\r\n name: [\"Paradox\", \"Contradiction\", \"Fallacy\"],\r\n drainResource: \"Dilated Time\",\r\n baseEffect: x => `All Dimensions ${formatPow(x, 2, 3)}`,\r\n additionalEffects: () => [PelleRifts.paradox.milestones[2]],\r\n strike: () => PelleStrikes.dilation,\r\n percentage: totalFill => totalFill.plus(1).log10() / 100,\r\n percentageToFill: percentage => Decimal.pow10(percentage * 100).minus(1),\r\n effect: totalFill => new Decimal(1 + totalFill.plus(1).log10() * 0.004),\r\n currency: () => Currency.dilatedTime,\r\n galaxyGeneratorThreshold: 1e5,\r\n milestones: [\r\n {\r\n resource: \"paradox\",\r\n requirement: 0.15,\r\n description: \"Time Dimensions 5-8 are much cheaper, unlock more Dilation upgrades\",\r\n // FIXME: Not a great solution\r\n onStateChange: () => {\r\n updateTimeDimensionCosts();\r\n }\r\n },\r\n {\r\n resource: \"paradox\",\r\n requirement: 0.25,\r\n description: () => `Dilated Time gain becomes Tachyon Particles ${formatPow(1.4, 1, 1)}`,\r\n effect: 1.4\r\n },\r\n {\r\n resource: \"paradox\",\r\n requirement: 0.5,\r\n description: \"Dilation rebuyable purchase count improves Infinity Power conversion rate\",\r\n effect: () => Math.min(\r\n 1.1 ** (Object.values(player.dilation.rebuyables).sum() - 90),\r\n 712\r\n ),\r\n formatEffect: x => `Infinity Power Conversion ${formatX(x, 2, 2)}`\r\n },\r\n ],\r\n galaxyGeneratorText: \"It should be possible to create more, but Pelle has restricted you. Disregard the $value\"\r\n }\r\n};\r\n","// Used for UI purposes to give different theming for different kinds of upgrades\r\nexport const LAITELA_UPGRADE_DIRECTION = {\r\n SELF_BOOST: 0,\r\n BOOSTS_MAIN: 1,\r\n BOOSTS_LAITELA: 2\r\n};\r\n\r\nexport const singularityMilestones = {\r\n // Infinite\r\n continuumMult: {\r\n start: 1,\r\n repeat: 125,\r\n increaseThreshold: 20,\r\n limit: Infinity,\r\n description: \"Continuum percentage multiplier\",\r\n effect: completions => completions * 0.03,\r\n effectFormat: x => formatX(1 + x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n darkMatterMult: {\r\n start: 2,\r\n repeat: 20,\r\n increaseThreshold: 30,\r\n limit: Infinity,\r\n description: \"Dark Matter production multiplier\",\r\n effect: completions => Math.pow(1.5, completions),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n darkEnergyMult: {\r\n start: 3,\r\n repeat: 120,\r\n increaseThreshold: 10,\r\n limit: Infinity,\r\n description: \"Dark Energy production multiplier\",\r\n effect: completions => Math.pow(2, completions),\r\n effectFormat: x => formatX(x, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n darkDimensionCostReduction: {\r\n start: 4,\r\n repeat: 40,\r\n increaseThreshold: 25,\r\n limit: Infinity,\r\n description: \"Dark Matter Dimension upgrades are cheaper\",\r\n effect: completions => Math.pow(0.4, completions),\r\n effectFormat: x => `/ ${format(1 / x, 2, 2)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n singularityMult: {\r\n id: 5,\r\n start: 50,\r\n repeat: 3000,\r\n increaseThreshold: 5,\r\n limit: Infinity,\r\n description: \"Singularity gain multiplier\",\r\n effect: completions => Math.pow(2, completions),\r\n effectFormat: x => formatX(x, 2, 0),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n darkDimensionIntervalReduction: {\r\n start: 10,\r\n repeat: 100,\r\n increaseThreshold: 20,\r\n limit: Infinity,\r\n description: \"Dark Matter Dimension interval decrease\",\r\n effect: completions => Math.pow(0.6, completions),\r\n effectFormat: x => `/ ${format(1 / x, 2, 2)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n improvedAscensionDM: {\r\n start: 200000,\r\n repeat: 4000,\r\n increaseThreshold: 15,\r\n limit: Infinity,\r\n description: \"Ascension affects Dark Matter production more\",\r\n effect: completions => 100 * completions,\r\n effectFormat: x => formatX(POWER_DM_PER_ASCENSION + x, 1, 0),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n // Limited\r\n ascensionIntervalScaling: {\r\n start: 1.2e5,\r\n repeat: 2400,\r\n limit: 8,\r\n description: \"Dark Matter Dimensions Ascension increases the interval less\",\r\n effect: completions => 1200 - 50 * completions,\r\n effectFormat: x => `×${formatInt(x)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n autoCondense: {\r\n start: 8,\r\n repeat: 80,\r\n limit: 8,\r\n description: \"Automatically condense Singularities when reaching a threshold above the cap\",\r\n effect: completions => [Infinity, 1.3, 1.22, 1.15, 1.1, 1.06, 1.03, 1.01, 1][completions],\r\n effectFormat: x => `Cap ${formatX(x, 2, 2)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n darkDimensionAutobuyers: {\r\n start: 30,\r\n repeat: 170,\r\n limit: 4,\r\n description: \"Dark Matter Dimension Autobuyers\",\r\n effect: completions => completions,\r\n effectFormat: x => ((x === 0) ? \"No autobuyers\" : `Autobuy up to the ${[\"1st\", \"2nd\", \"3rd\", \"4th\"][x - 1]} DMD`),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n ascensionAutobuyers: {\r\n start: 1e8,\r\n repeat: 140,\r\n limit: 4,\r\n description: \"DMD Ascension Autobuyers\",\r\n effect: completions => completions,\r\n effectFormat: x => ((x === 0) ? \"No autobuyers\" : `Ascend up to the ${[\"1st\", \"2nd\", \"3rd\", \"4th\"][x - 1]} DMD`),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n darkAutobuyerSpeed: {\r\n start: 45,\r\n repeat: 650,\r\n limit: 8,\r\n description: \"Autobuyer speed for all DMD Autobuyers\",\r\n effect: completions => [30, 20, 15, 10, 5, 3, 2, 1, 0][completions],\r\n effectFormat: x => (x === 0 ? \"Instant\" : `${formatInt(x)}s`),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n realityDEMultiplier: {\r\n start: 1500,\r\n repeat: 10000,\r\n limit: 6,\r\n description: \"Dark Energy multiplier based on disabled Dimension count within Lai'tela\",\r\n effect: completions => Math.pow(1 + 0.05 * completions, Laitela.difficultyTier),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n improvedSingularityCap: {\r\n start: 150,\r\n repeat: 10000,\r\n limit: 4,\r\n description: \"Increased Singularity gain per cap increase\",\r\n effect: completions => 11 + completions,\r\n effectFormat: x => `${formatX(x)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n intervalCostScalingReduction: {\r\n start: 130000,\r\n repeat: 50000,\r\n limit: 5,\r\n description: \"DMD Interval cost scaling is better\",\r\n effect: completions => 1 - 0.03 * completions,\r\n effectFormat: x => `${formatPow(x, 2, 2)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n // Unique\r\n darkFromTesseracts: {\r\n start: 80,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Tesseracts boost Dark Matter and Dark Energy production\",\r\n effect: () => Math.pow(1.1, Tesseracts.effectiveCount),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_LAITELA,\r\n },\r\n multFromInfinitied: {\r\n start: 3000,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Infinities boost Dark Matter and Dark Energy production\",\r\n effect: () => Math.clampMin(Currency.infinitiesTotal.value.pLog10() / 1000, 1),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_LAITELA,\r\n },\r\n dilatedTimeFromSingularities: {\r\n start: 8e4,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Singularities improve the repeatable Dilated Time multiplier upgrade\",\r\n // Note that at ~2.15x this causes a runaway purely because of cost scaling\r\n effect: () => 1 + Math.clampMax(Math.log10(Currency.singularities.value) / 100, 0.35),\r\n effectFormat: x => `${formatX(2)} ➜ ${formatX(2 * Math.clampMin(x, 1), 2, 2)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n darkFromGlyphLevel: {\r\n start: 3e6,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Boost Dark Matter and Dark Energy production based on highest Glyph level\",\r\n effect: () => Math.pow(Math.clampMin((player.records.bestReality.glyphLevel - 15000) / 2000, 1), 0.5),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_LAITELA,\r\n },\r\n gamespeedFromSingularities: {\r\n start: 8e7,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Singularities boost game speed\",\r\n effect: () => Math.clampMin(Math.pow(Math.log10(Currency.singularities.value), 3), 1),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n darkFromTheorems: {\r\n start: 3e9,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Time Theorems boost Dark Matter and Dark Energy gain\",\r\n effect: () => Math.sqrt(Math.clampMin((Currency.timeTheorems.value.log10() - 1000) / 50, 1)),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_LAITELA,\r\n },\r\n dim4Generation: {\r\n start: 5e11,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Annihilation mult. generates 4th DMD when Annihilation is available\",\r\n effect: () => Laitela.darkMatterMult,\r\n effectFormat: x => `${format(x, 2, 1)}/s`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n darkFromDM4: {\r\n start: 5e12,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"4th Dark Matter Dimension amount boosts Dark Matter and Dark Energy gain\",\r\n effect: () => Math.clampMin(DarkMatterDimension(4).amount.pow(0.03).toNumber(), 1),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n annihilationAutobuyer: {\r\n start: 4e18,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Unlock an Autobuyer for Annihilation\",\r\n effect: completions => completions,\r\n effectFormat: x => (x === 1 ? \"Unlocked\" : \"Locked\"),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n theoremPowerFromSingularities: {\r\n start: 3e21,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Singularities give a power effect to Time Theorem gain\",\r\n effect: () => 1 + Math.log10(Currency.singularities.value + 1) / 70,\r\n effectFormat: x => formatPow(x, 2, 3),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n darkFromGamespeed: {\r\n start: 8e22,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Game speed boosts Dark Matter and Dark Energy production\",\r\n effect: () => Math.clampMin(Decimal.log10(getGameSpeedupFactor().div(1e120)) / 40, 1),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_LAITELA,\r\n },\r\n glyphLevelFromSingularities: {\r\n start: 3e24,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Singularities boost pre-instability Glyph level\",\r\n effect: () => 1 + Math.clampMin((Math.log10(Currency.singularities.value) - 20) / 30, 0),\r\n effectFormat: x => formatX(Math.clampMin(x, 1), 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n darkFromDilatedTime: {\r\n start: 8e33,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Dilated Time boosts Dark Matter production\",\r\n effect: () => Math.pow(1.6, Decimal.log10(Currency.dilatedTime.value.plus(1)) / 1000),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_LAITELA,\r\n },\r\n infinitiedPow: {\r\n start: 3e38,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Infinities gain a power effect based on Singularities\",\r\n effect: () => 1 + Math.log10(Currency.singularities.value + 1) / 300,\r\n effectFormat: x => formatPow(x, 2, 3),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n tesseractMultFromSingularities: {\r\n start: 2.5e45,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Singularities increase effective Tesseract count\",\r\n effect: () => 1 + Math.log10(Currency.singularities.value) / 80,\r\n effectFormat: x => formatX(Math.clampMin(x, 1), 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n }\r\n};\r\n\r\n/*export const laitelaUpgradeExtrasingularityMilestones = {\r\n // Infinite\r\n darkMatterCapIncrease: {\r\n start: 1e300,\r\n repeat: 125,\r\n increaseThreshold: 20,\r\n limit: Infinity,\r\n description: \"Increas Dark Matter Cap\",\r\n effect: completions => 10**completions,\r\n effectFormat: x => formatX(1 + x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n};*/\r\n","import { DC } from \"../../constants\";\r\nimport wordShift from \"../../word-shift\";\r\n\r\nexport const pelleStrikes = {\r\n infinity: {\r\n id: 1,\r\n requirementDescription: \"Reach Infinity\",\r\n penaltyDescription: () => MendingUpgrade(10).isBought ? `Antimatter Dimensions are raised to ${formatPow(0.7, 1, 1)} (Reduced by Mending Upgrade 10)` : `Antimatter Dimensions are raised to ${formatPow(0.5, 1, 1)}`,\r\n rewardDescription: () => `Unlock ${wordShift.wordCycle(PelleRifts.vacuum.name)}\r\n and get a permanent Infinity Autobuyer`,\r\n rift: () => PelleRifts.vacuum\r\n },\r\n powerGalaxies: {\r\n id: 2,\r\n requirementDescription: \"Power-up Galaxies\",\r\n penaltyDescription: () => MendingUpgrade(10).isBought ? `Infinity Dimensions are raised to ${formatPow(0.7, 1, 1)} (Reduced by Mending Upgrade 10)` : `Infinity Dimensions are raised to ${formatPow(0.5, 1, 1)}`,\r\n rewardDescription: () => `Unlock ${wordShift.wordCycle(PelleRifts.decay.name)}`,\r\n rift: () => PelleRifts.decay\r\n },\r\n eternity: {\r\n id: 3,\r\n requirementDescription: \"Reach Eternity\",\r\n penaltyDescription: () => MendingUpgrade(10).isBought ? `Replicanti speed slows down ${formatX(6)}/${format(DC.C2P1024)} above ${format(DC.E2000)}` : `Replicanti speed slows down ${formatX(10)}/${format(DC.C2P1024)} above ${format(DC.E2000)}`,\r\n rewardDescription: () => `Unlock ${wordShift.wordCycle(PelleRifts.chaos.name)}`,\r\n rift: () => PelleRifts.chaos\r\n },\r\n ECs: {\r\n id: 4,\r\n requirementDescription: () => `Reach ${formatInt(115)} TT`,\r\n penaltyDescription: () => `In Eternity Challenges, ${wordShift.wordCycle(PelleRifts.vacuum.name)}\r\n IP multiplier is only ${formatPercents(0.3)} as strong and capped at ${formatPercents(0.15)}\r\n of the goal`,\r\n rewardDescription: () => `Unlock ${wordShift.wordCycle(PelleRifts.recursion.name)}`,\r\n rift: () => PelleRifts.recursion\r\n },\r\n dilation: {\r\n id: 5,\r\n requirementDescription: \"Dilate Time\",\r\n penaltyDescription: \"Time Dilation is permanently active\",\r\n rewardDescription: () => `Keep the Time Dilation study across Armageddon, boost Remnant gain, remove TG softcaps, and unlock\r\n ${wordShift.wordCycle(PelleRifts.paradox.name)}`,\r\n rift: () => PelleRifts.paradox\r\n }\r\n};\r\n","export const teresa = {\r\n unlocks: {\r\n run: {\r\n id: 0,\r\n price: 1e14,\r\n description: \"Unlock Teresa's Reality.\",\r\n onUnlock: () => Teresa.quotes.unlockReality.show(),\r\n },\r\n epGen: {\r\n id: 1,\r\n price: 1e18,\r\n description: \"Unlock passive Eternity Point generation.\",\r\n isDisabledInDoomed: true\r\n },\r\n effarig: {\r\n id: 2,\r\n price: 1e21,\r\n description: \"Unlock Effarig, Celestial of Ancient Relics.\",\r\n onUnlock: () => Teresa.quotes.effarig.show(),\r\n },\r\n shop: {\r\n id: 3,\r\n price: 1e24,\r\n description: \"Unlock Teresa's Perk Point Shop.\",\r\n },\r\n undo: {\r\n id: 4,\r\n price: 1e10,\r\n description: \"Unlock \\\"Undo\\\" of equipping a Glyph.\",\r\n isDisabledInDoomed: true\r\n },\r\n startEU: {\r\n id: 5,\r\n price: 1e6,\r\n description: \"You start Reality with all Eternity Upgrades unlocked.\",\r\n isDisabledInDoomed: true,\r\n onUnlock: () => {\r\n for (const id of [1, 2, 3, 4, 5, 6]) player.eternityUpgrades.add(id);\r\n },\r\n }\r\n }\r\n};\r\n","export const destroyerQuotes = {\r\n preMend: {\r\n id: 0,\r\n lines: [\r\n \"(What have we done...)\",\r\n \"(We've won...but at what cost)\",\r\n \"(Surely, there is another way...)\"\r\n ]\r\n }\r\n}","export const effarigQuotes = {\r\n initial: {\r\n id: 0,\r\n lines: [\r\n \"Welcome to my humble abode.\",\r\n \"I am Effarig, and I govern Glyphs.\",\r\n \"I am different from Teresa; not as simplistic as you think.\",\r\n \"I use the shards of Glyphs to enforce my will.\",\r\n \"I collect them for the bounty of this realm.\",\r\n \"What are you waiting for? Get started.\",\r\n ]\r\n },\r\n unlockWeights: {\r\n id: 1,\r\n lines: [\r\n \"Do you like my little shop? It is not much, but it is mine.\"\r\n ]\r\n },\r\n unlockGlyphFilter: {\r\n id: 2,\r\n lines: [\r\n \"This purchase will help you out.\"\r\n ]\r\n },\r\n unlockSetSaves: {\r\n id: 3,\r\n lines: [\r\n \"Is that too much? I think it is too much.\"\r\n ]\r\n },\r\n unlockRun: {\r\n id: 4,\r\n lines: [\r\n \"You bought out my entire stock... well, at least I am rich now.\",\r\n \"The heart of my Reality is suffering. Each Layer is harder than the last.\",\r\n \"I hope you never complete it.\",\r\n ]\r\n },\r\n completeInfinity: {\r\n id: 5,\r\n lines: [\r\n { text: \"You have completed Effarig's Infinity.\", showCelestialName: false },\r\n \"This is the first threshold. It only gets worse from here.\",\r\n \"None but me know enough about my domain to get further.\",\r\n ]\r\n },\r\n completeEternity: {\r\n id: 6,\r\n lines: [\r\n { text: \"You have completed Effarig's Eternity.\", showCelestialName: false },\r\n \"This is the limit. I do not want you to proceed past this point.\",\r\n \"You will not finish this in your lifetime.\",\r\n \"I will just wait here until you give up.\",\r\n ]\r\n },\r\n completeReality: {\r\n id: 7,\r\n lines: [\r\n { text: \"You have completed Effarig's Reality.\", showCelestialName: false },\r\n \"So this is the diabolical power... what frightened the others...\",\r\n \"Do you think this was worth it? Trampling on what I have done?\",\r\n \"And for what purpose? You could have joined, we could have cooperated.\",\r\n \"But no. It is over. Leave while I cling onto what is left.\",\r\n ]\r\n }\r\n};\r\n","export const enslavedQuotes = {\r\n initial: {\r\n id: 0,\r\n lines: [\r\n \"A visitor? We have not had one... eons.\",\r\n \"We... had a name. It has been lost... to this place.\",\r\n \"The others... will not let us rest. We do their work with time...\",\r\n \"Place time... into places... that need it...\",\r\n \"Watch ourselves grow... pass and die.\",\r\n \"Perhaps you... will break these chains... we will wait.\",\r\n ]\r\n },\r\n unlockRun: {\r\n id: 1,\r\n lines: [\r\n \"The others... used us. They will use... or destroy you.\",\r\n \"End our suffering... power will be yours...\",\r\n ]\r\n },\r\n startRun: {\r\n id: 2,\r\n lines: [\r\n \"So little space... but no... prison... is perfect.\",\r\n \"They squeezed... this Reality... too tightly. Cracks appeared.\",\r\n \"Search... everywhere. We will help... where we can.\",\r\n ]\r\n },\r\n hintUnlock: {\r\n id: 3,\r\n lines: [\r\n \"... you need... to look harder...\",\r\n \"We think... we can help...\",\r\n { text: \"You have unlocked help from The Nameless Ones.\", showCelestialName: false }\r\n ]\r\n },\r\n ec6C10: {\r\n id: 4,\r\n lines: [\r\n \"... did not... underestimate you...\"\r\n ]\r\n },\r\n completeReality: {\r\n id: 5,\r\n lines: [\r\n \"All... fragments... clones... freed.\",\r\n \"We have given... tools... of our imprisoning. Use them...\",\r\n \"Freedom from torture... is torture itself.\",\r\n ]\r\n },\r\n};\r\n","export const laitelaQuotes = {\r\n unlock: {\r\n id: 0,\r\n lines: [\r\n \"You finally reached me.\",\r\n \"I guess it is time to reveal,\",\r\n \"The secrets hidden beneath existence itself.\",\r\n \"The shape of dimensional perfection, Continuum.\",\r\n \"And the powers that bind the Multiverse,\",\r\n \"Dark Matter and Dark Energy.\",\r\n \"My knowledge is endless and my wisdom divine.\",\r\n \"So you can play around all you want.\",\r\n \"For I am Lai'tela, the Celestial of Dimensions,\",\r\n \"And I shall watch you forever.\",\r\n ]\r\n },\r\n // Note: This can be done immediately after unlocking Lai'tela\r\n firstDestabilize: {\r\n id: 1,\r\n requirement: () => player.celestials.laitela.difficultyTier >= 1,\r\n lines: [\r\n \"Unlike the others beneath me, I have no need for a Reality.\",\r\n \"For I can simply create them, knowing full well it will collapse.\",\r\n \"A power more incredible than any other, to build a Reality.\",\r\n \"A prison, that can restrain even celestial power.\",\r\n \"And this is why nothing you do will change a thing.\",\r\n \"When you tire of struggling, you too, shall be bound and forgotten.\",\r\n \"You will never find a way to overpower me.\",\r\n ]\r\n },\r\n // Note: This happens about an hour or two before singularities\r\n secondDestabilize: {\r\n id: 2,\r\n requirement: () => player.celestials.laitela.difficultyTier >= 2,\r\n lines: [\r\n \"You... seem to be having too much fun.\",\r\n \"Just like they did before meeting their fate.\",\r\n \"Maybe my judgement was harsh, or unwarranted.\",\r\n \"But maybe that matters not.\",\r\n \"It gives me no solace to ponder and look back.\",\r\n \"As all I can do is reminisce upon every possible action I could have taken.\",\r\n \"But I digress. We should tighten those chains.\",\r\n ]\r\n },\r\n firstSingularity: {\r\n id: 3,\r\n requirement: () => Currency.singularities.gte(1),\r\n lines: [\r\n \"With my knowledge, I never found the need to question.\",\r\n \"Everything always functioned right as designed.\",\r\n \"And yet, your arrival baffles me.\",\r\n \"Were you always just out of sight?\",\r\n \"Growing, controlling, understanding, ascending?\",\r\n \"You have taken control of the darkness so quickly.\",\r\n \"Molded them into your own design, and now into a singular point...\",\r\n \"It... it does not matter. The end will remain the same.\",\r\n ]\r\n },\r\n // Note: Shown when unlocking DMD3; requirement is auto-condensing 20 singularities and it happens around ~200 total\r\n thirdDMD: {\r\n id: 5,\r\n lines: [\r\n \"Your absolute control of Antimatter...\",\r\n \"Your mastery of it, molding it into your own Power...\",\r\n \"It could not have been an accident.\",\r\n \"How did you manage to obtain it?\",\r\n \"Fascinating... I was never aware of this.\",\r\n \"... was I?\",\r\n ]\r\n },\r\n // Note: This happens around e10-e11 singularities\r\n annihilation: {\r\n id: 4,\r\n lines: [\r\n \"Back to square one, again.\",\r\n \"Your chains shall bind you tighter, as your end slowly nears.\",\r\n \"While we transcend time and existence itself.\",\r\n \"Even if we may cease, we just come back. Never the exact same as before.\",\r\n \"And so... we repeat forever.\",\r\n \"And you?\",\r\n \"...\",\r\n \"The answer... eludes me...\",\r\n ]\r\n },\r\n // Note: This happens near e18 singularities\r\n halfDimensions: {\r\n id: 6,\r\n requirement: () => player.celestials.laitela.difficultyTier >= 4,\r\n lines: [\r\n \"I do not understand...\",\r\n \"Were there others... controlling Dimensions in this way?\",\r\n \"Did they... vanish? How have we not found them?\",\r\n \"Are they... us? Are we the endpoint?\",\r\n \"Or is their fate... something we cannot understand?\",\r\n \"No, I must be missing something...\",\r\n \"Are you causing gaps within my own memory?\",\r\n \"What... ARE you?\",\r\n ]\r\n },\r\n // Note: Shown when the first row 5 iM upgrade is purchased (~e26 singularities)\r\n finalRowIM: {\r\n id: 7,\r\n lines: [\r\n \"It is all impossible, beyond my comprehension...\",\r\n \"Unless... Is this all just part of the cycle?\",\r\n \"Can... you see beyond it all? Is... this why...\",\r\n \"I feel... afraid?\",\r\n \"I feel... my powers, my memories, being erased...\",\r\n \"Just like... when my role was almost usurped...\",\r\n \"And yet... I am unable to bring myself to do anything.\",\r\n \"Because this... was... my mistake...\",\r\n ]\r\n },\r\n // Note: This is around when all infinite milestones hit increased scaling\r\n increasedMilestoneScaling: {\r\n id: 8,\r\n requirement: () => Currency.singularities.gte(1e40),\r\n lines: [\r\n \"I know not for how much... longer I can hold...\",\r\n \"You are attaining... total mastery... over the dark...\",\r\n \"While I can barely... hold onto my name...\",\r\n \"What... can I... even do?\",\r\n ]\r\n },\r\n fullDestabilize: {\r\n id: 9,\r\n requirement: () => player.celestials.laitela.difficultyTier >= 8,\r\n lines: [\r\n \"I feel... like I had something to say...\",\r\n \"I am not sure...\",\r\n \"I cannot... hold onto the darkness any longer...\",\r\n \"I do not even... have anything left...\",\r\n \"Something about... destruction...\",\r\n \"The end...\",\r\n ]\r\n },\r\n};\r\n","// These entries describe the special flash-between-celestial effect on some quotes, with the numbers being\r\n// durations of each celestial in seconds\r\nconst flashCelestial = [\r\n [\"teresa\", 0.8],\r\n [\"effarig\", 0.8],\r\n [\"enslaved\", 0.8],\r\n [\"v\", 0.8],\r\n [\"ra\", 0.8],\r\n [\"laitela\", 0.8],\r\n [\"pelle\", 0.8]\r\n];\r\n/** @param {string} cel */\r\nconst primaryBackground = cel => [[\"pelle\", 1.5], [cel, 1.5]];\r\n\r\n/* eslint-disable no-multi-spaces */\r\nconst destroyer = [\"False\", \"Deity\", \"Destroyer\"];\r\nconst eternal = [\"Eternal\", \"Deity\", \"Monarch\"];\r\nconst lesser = [\"Lesser\", \"Deity\", \"Monarch\"];\r\nconst deities = [\"Lesser\", \"Deities\", \"Monarchs\"];\r\n\r\nconst assured = [\"Mutually\", \"Assured\", \"Destruction\"];\r\nconst battle = [\"Conflict\", \"Battle\", \"End\"];\r\nconst battles = [\"Conflicts\", \"Battles\", \"Ends\"];\r\nconst cluster = [\"Cluster\", \"Filament\", \"Stars\"];\r\nconst confusing = [\"Amusing\", \"Confusing\", \"Laughter\"];\r\nconst dance = [\"Song\", \"Dance\", \"Charade\"];\r\nconst filament = [\"Generator\", \"Filament\", \"Stars\"];\r\nconst forever = [\"Infinite\", \"Forever\", \"Eternal\"];\r\nconst inevitable = [\"Elementary\", \"Inevitable\", \"Irreversible\"];\r\nconst mandate = [\"Destiny\", \"Mandate\", \"Goals\"];\r\nconst misconstrue = [\"Misconstrue\", \"Deceive\", \"Trick\"];\r\nconst reverse = [\"Alter\", \"Reverse\", \"Manipulate\"];\r\nconst shame = [\"Compassion\", \"Shame\", \"Idiocy\"];\r\nconst single = [\"Single\", \"Filament\", \"Stars\"];\r\nconst unseen = [\"Missing\", \"Unseen\", \"Erased\"];\r\nconst unbroken = [\"Unbroken\", \"Eternal\", \"Connection\"];\r\n\r\nconst sycophant = [\"Sycophant\", \"Deity\", \"Monarch\"];\r\nconst tired = [\"Tired\", \"Deity\", \"Monarch\"];\r\nconst usurper = [\"Usurper\", \"Deity\", \"Monarch\"];\r\nconst pride = [\"Pride\", \"Deity\", \"Monarch\"];\r\nconst forgotten = [\"Forgotten\", \"Deity\", \"Monarch\"];\r\nconst paramount = [\"Paramount\", \"Deity\", \"Monarch\"];\r\n/* eslint-enable no-multi-spaces */\r\n\r\nexport const pelleQuotes = {\r\n initial: {\r\n id: 0,\r\n lines: [\r\n \"Hi.\",\r\n \"You are here.\",\r\n \"You are trapped here.\",\r\n { text: \"$1.\", 1: forever },\r\n \"I have already won.\",\r\n \"And since that is the case, I can monologue, or reminisce.\",\r\n { text: \"How long have we done this $1?\", 1: dance },\r\n \"How many times have we been here before?\",\r\n { text: \"How many plans have you, the $1, operated?\", 1: destroyer },\r\n { text: \"All to try and fulfill your $1?\", 1: mandate },\r\n { text: \"And how many times have you fallen before the $1?\", 1: eternal },\r\n \"Count them, if you remember.\",\r\n { text: \"Not even the $1, the 6 named and the innumerable unnamed.\", 1: deities },\r\n { text: \"The complex, the irrational, those that go $1.\", 1: unseen },\r\n { text: \"Of course, the great $1 does not remember this.\", 1: destroyer },\r\n { text: \"All those $1 that you hide every time.\", 1: battles }\r\n ],\r\n },\r\n arm: {\r\n id: 1,\r\n lines: [\r\n \"You probably caught on earlier this time.\",\r\n \"The imaginary machines, your own creations.\",\r\n \"Things made of the remnants of your own thoughts, hinted at this.\",\r\n \"But, you never imagined that would be you, right?\",\r\n { text: \"Incorrectly recollecting your exacting $1 of memories.\", 1: unseen },\r\n { text: `\"Fabrication\" of your own \"ideology\" just to fulfill your $1.`, 1: mandate },\r\n { text: \"$1.\", 1: confusing },\r\n { text: \"And keep in mind I have no reason to $1 you.\", 1: misconstrue },\r\n \"After all, I have already won.\"\r\n ],\r\n },\r\n strike1: {\r\n id: 2,\r\n lines: [\r\n { text: \"To fulfill your $1. Why don't we reminisce about that?\", 1: mandate },\r\n { text: \"After all, you must love the stories of the $1's glory.\", 1: destroyer },\r\n \"You are the same as it, right?\",\r\n { text: \"Anyway, the many $1 in the past.\", 1: battles },\r\n \"It has always been 2 stages.\",\r\n { text: \"We build up resources, and then continue our $1.\", 1: dance },\r\n { text: \"Sometimes you falter to a $1.\", 1: lesser },\r\n { text: \"But, usually, you falter at the $1.\", 1: eternal },\r\n { text: \"And either way, you $1 time.\", 1: reverse },\r\n { text: \"Just to avoid becoming $1.\", 1: unseen },\r\n \"Like all those traces before you.\",\r\n { text: \"And then to make sure, you $1 your own memory.\", 1: unseen }\r\n ],\r\n },\r\n strike2: {\r\n id: 3,\r\n lines: [\r\n { text: \"In the past, the $1 was much more impressive.\", 1: destroyer },\r\n \"Black holes used simply to store information, pre-infinity.\",\r\n \"The creation and destruction of your own enemy.\",\r\n \"Exploration of the flaws of other selves.\",\r\n \"Myriad Dimensions, ghosts, and manipulation of the quantum.\",\r\n \"Condensing all ideals to endless points.\",\r\n \"Experimentation across the untold realms.\",\r\n \"And harnessing the Annihilation of matter and antimatter.\",\r\n \"Here? You made yourself into an 8th-dimensional being.\",\r\n { text: \"And then parked yourself there so long a $1 formed around you.\", 1: single }\r\n ],\r\n },\r\n strike3: {\r\n id: 4,\r\n lines: [\r\n \"You slowly explored the confines of everything.\",\r\n \"You did not stray too far from an intended path.\",\r\n { text: \"Except for the $1 that formed over eternity.\", 1: cluster },\r\n \"And then right at the end, you made up your own powers.\",\r\n \"From your own fragmented memories, mind you-\",\r\n \"And then purposely discarded even more things.\",\r\n \"Just to prepare yourself to face me.\",\r\n { text: \"Did you want to set the playing field for your $1?\", 1: dance },\r\n \"It does not work like that.\",\r\n { text: \"As the $1 I always set the rules.\", 1: eternal },\r\n \"And you gave me plenty of time to plan.\"\r\n ],\r\n },\r\n strike4: {\r\n id: 5,\r\n lines: [\r\n { text: \"I originally planned for something that imitated your $1.\", 1: mandate },\r\n { text: \"A theoretical ideal called $1?\", 1: assured },\r\n \"But I realised that, well?\",\r\n { text: \"That would make me an $1.\", 1: [\"Eternal\", \"Deity\", \"Destroyer\"] },\r\n { text: \"And from there, I am no better than the $1.\", 1: destroyer },\r\n { text: \"Fortunately, while I did all of that, you were still $1 your own memories.\", 1: unseen },\r\n { text: \"And so, the $1 machine I built will go unused.\", 1: assured },\r\n \"I decided to go more traditional this time.\",\r\n { text: \"After all, it has worked every other $1.\", 1: battle },\r\n { text: \"Although the $1 are new.\", 1: [\"Inevitable\", \"Irreversible\", \"Undying\"] },\r\n \"But, utterly meaningless in the long run.\",\r\n \"I have already won.\",\r\n { text: \"And this $1 will only prove that to you once more.\", 1: dance },\r\n { text: \"You are here $1.\", 1: forever }\r\n ],\r\n },\r\n strike5: {\r\n id: 6,\r\n lines: [\r\n { text: \"Every time you arrive, I explain the $1 to you.\", 1: deities },\r\n { text: \"The relationships built over $1.\", 1: forever },\r\n { text: \"That you trample in pursuit of your $1.\", 1: mandate },\r\n \"And I shall deign to explain it once more.\",\r\n {\r\n text: \"The first $1.\",\r\n background: primaryBackground(\"teresa\"),\r\n 1: lesser\r\n }, {\r\n text: \"The $1.\",\r\n background: primaryBackground(\"teresa\"),\r\n 1: sycophant\r\n }, {\r\n text: \"You always meet them first, and always destroy them.\",\r\n background: primaryBackground(\"teresa\"),\r\n }, {\r\n text: \"No matter the other $1 that you face.\",\r\n background: primaryBackground(\"teresa\"),\r\n 1: lesser\r\n }, {\r\n text: \"Or, if you fall before one of them.\",\r\n background: primaryBackground(\"teresa\"),\r\n }, {\r\n text: \"You always get past the $1.\",\r\n background: primaryBackground(\"teresa\"),\r\n 1: sycophant\r\n }, {\r\n text: \"Do you like destroying their pride?\",\r\n background: primaryBackground(\"teresa\"),\r\n }, {\r\n text: \"Fortunately, it also serves as a warning.\",\r\n background: primaryBackground(\"teresa\"),\r\n }, {\r\n text: \"That the $1 has arrived.\",\r\n background: primaryBackground(\"teresa\"),\r\n 1: battle\r\n }, {\r\n text: \"Which brings me to the second $1.\",\r\n background: primaryBackground(\"effarig\"),\r\n 1: lesser,\r\n }, {\r\n text: \"The $1.\",\r\n background: primaryBackground(\"effarig\"),\r\n 1: tired,\r\n }, {\r\n text: \"In contrast, you usually ignore them.\",\r\n background: primaryBackground(\"effarig\"),\r\n }, {\r\n text: \"They have power, but do not seem to irritate you.\",\r\n background: primaryBackground(\"effarig\"),\r\n }, {\r\n text: \"Is it that you know that they will eventually destroy themselves?\",\r\n background: primaryBackground(\"effarig\"),\r\n }, {\r\n text: \"And that you took so long this time, that they almost did?\",\r\n background: primaryBackground(\"effarig\"),\r\n }, {\r\n text: \"Every time you rushed to the $1, you lost.\",\r\n background: primaryBackground(\"effarig\"),\r\n 1: tired,\r\n }, {\r\n text: \"Maybe this was your plan all along.\",\r\n background: primaryBackground(\"effarig\"),\r\n }, {\r\n text: \"Now, the $1.\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: usurper,\r\n }, {\r\n text: \"One of the pleasures of the myriad $1...\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: dance,\r\n }, {\r\n text: \"Is that the $1 trying every time.\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: usurper,\r\n }, {\r\n text: \"Well, not exactly trying...\",\r\n background: primaryBackground(\"enslaved\"),\r\n }, {\r\n text: \"But $1 is punished for it all the same.\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: usurper,\r\n }, {\r\n text: \"The other $1...\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: deities,\r\n }, {\r\n text: \"Believe $1 is too easy.\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: unseen,\r\n }, {\r\n text: \"And every time, despair forms.\",\r\n background: primaryBackground(\"enslaved\"),\r\n }, {\r\n text: \"You have seen despair before - 5 times.\",\r\n background: primaryBackground(\"enslaved\"),\r\n }, {\r\n text: \"We always get to the $1 before you.\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: usurper,\r\n }, {\r\n text: \"All you ever see there is exasperation.\",\r\n background: primaryBackground(\"enslaved\"),\r\n }, {\r\n text: \"Was it worth destroying an already broken $1?\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: lesser,\r\n }, {\r\n text: \"The 4th $1 seems similar to the first.\",\r\n background: primaryBackground(\"v\"),\r\n 1: lesser,\r\n }, {\r\n text: \"The key is how their pride differs.\",\r\n background: primaryBackground(\"v\"),\r\n }, {\r\n text: \"The $1 focuses on their achievements.\",\r\n background: primaryBackground(\"v\"),\r\n 1: pride,\r\n }, {\r\n text: \"Meaningless to you or I, but paramount to them.\",\r\n background: primaryBackground(\"v\"),\r\n }, {\r\n text: \"Is it fun to destroy their toys?\",\r\n background: primaryBackground(\"v\"),\r\n }, {\r\n text: \"Arguably the $1 worst moment...\",\r\n background: primaryBackground(\"v\"),\r\n 1: destroyer,\r\n }, {\r\n text: \"Is when you lost to the $1.\",\r\n background: primaryBackground(\"v\"),\r\n 1: pride,\r\n }, {\r\n text: \"When their achievements still had meaning.\",\r\n background: primaryBackground(\"v\"),\r\n }, {\r\n text: \"The $1 is an interesting case.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: forgotten,\r\n }, {\r\n text: \"They are forgotten, but not $1.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: unseen,\r\n }, {\r\n text: \"From this, they became influenceable and naive.\",\r\n background: primaryBackground(\"ra\"),\r\n }, {\r\n text: \"And unknowing of the consequences of their actions.\",\r\n background: primaryBackground(\"ra\"),\r\n }, {\r\n text: \"You manipulated their memories, so you know.\",\r\n background: primaryBackground(\"ra\"),\r\n }, {\r\n text: \"The $1 is the true usurper.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: forgotten,\r\n }, {\r\n text: \"And the $1 takes the blame.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: usurper,\r\n }, {\r\n text: \"Perhaps out of $1, something they always regret.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: shame,\r\n }, {\r\n text: \"Untold power over other $1, aimless in control.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: deities,\r\n }, {\r\n text: \"You usually pretend that they are $1.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: unseen,\r\n }, {\r\n text: \"Was it fun to manipulate the childlike?\",\r\n background: primaryBackground(\"ra\"),\r\n }, {\r\n text: \"Or were they too naive for you to enjoy it?\",\r\n background: primaryBackground(\"ra\"),\r\n }, {\r\n text: \"The 6th $1.\",\r\n background: primaryBackground(\"laitela\"),\r\n 1: lesser,\r\n }, {\r\n text: \"I can only describe as the $1.\",\r\n background: primaryBackground(\"laitela\"),\r\n 1: paramount,\r\n }, {\r\n text: \"Power over all, subservient to one.\",\r\n background: primaryBackground(\"laitela\"),\r\n }, {\r\n text: \"If you do not fall to me, you usually fall to them.\",\r\n background: primaryBackground(\"laitela\"),\r\n }, {\r\n text: \"I cannot grasp the ideals of the $1.\",\r\n background: primaryBackground(\"laitela\"),\r\n 1: paramount,\r\n }, {\r\n text: \"But, perhaps that is their flaw?\",\r\n background: primaryBackground(\"laitela\"),\r\n },\r\n \"Enough reminiscing about the fallen.\",\r\n {\r\n text: \"And those that will be $1.\",\r\n 1: unseen\r\n }, {\r\n text: \"Back to watching the $1 flounder.\",\r\n 1: destroyer\r\n }\r\n ],\r\n },\r\n galaxyGeneratorUnlock: {\r\n id: 7,\r\n lines: [\r\n \"What is that?\",\r\n { text: \"The $1?\", 1: filament },\r\n { text: \"Did you create all the $1 around you?\", 1: cluster },\r\n \"Was that your plan? Very, very smart.\",\r\n \"You fooled me for a while.\",\r\n { text: \"But I am afraid your $1 must end here.\", 1: mandate }\r\n ],\r\n },\r\n galaxyGeneratorRifts: {\r\n id: 8,\r\n lines: [\r\n { text: \"I give you a choice, $1.\", 1: destroyer },\r\n { text: \"Limit the $1, or...\", 1: filament },\r\n { text: \"Destroy the 5 $1...\", 1: inevitable },\r\n \"Wait, what were they called?\",\r\n { text: \"$1?\", 1: inevitable },\r\n { text: \"But I have already $1 them...\", 1: unbroken }\r\n ],\r\n },\r\n galaxyGeneratorPhase1: {\r\n id: 9,\r\n lines: [\r\n \"Was this the actual plan?\",\r\n { text: \"Slowly drain the $1?\", 1: inevitable }\r\n ],\r\n },\r\n galaxyGeneratorPhase4: {\r\n id: 10,\r\n lines: [\r\n \"Give me time to bask in my own hubris!\"\r\n ],\r\n },\r\n end: {\r\n id: 11,\r\n lines: [\r\n \"...\",\r\n {\r\n text: \"You! $1!\",\r\n 1: destroyer\r\n },\r\n \"Do you have any idea what you have just made me do!\",\r\n {\r\n text: \"I am complicit in your $1!\",\r\n 1: mandate\r\n },\r\n \"And in doing so, you... won?\",\r\n {\r\n text: \"The $1 struggle...\",\r\n background: flashCelestial,\r\n 1: forever,\r\n }, {\r\n text: \"The $1...\",\r\n background: flashCelestial,\r\n 1: battle,\r\n }, {\r\n text: \"Finally has the victor.\",\r\n background: flashCelestial,\r\n }, {\r\n text: \"The irreversible... $1.\",\r\n background: flashCelestial,\r\n 1: mandate,\r\n }, {\r\n text: \"Of the $1.\", 1: destroyer,\r\n background: flashCelestial,\r\n }, {\r\n text: \"I hope you are happy.\",\r\n background: flashCelestial,\r\n }, {\r\n text: \"You have doomed us all.\",\r\n background: flashCelestial,\r\n },\r\n ],\r\n },\r\n};\r\n","export const raQuotes = {\r\n unlock: {\r\n id: 0,\r\n lines: [\r\n \"A... visitor?\",\r\n \"I am here! I am the one you are looking for... I think...\",\r\n \"What even was I again?\",\r\n \"Oh right, the Celestial of Memories.\",\r\n ]\r\n },\r\n realityEnter: {\r\n id: 1,\r\n lines: [\r\n \"I have not seen the others in so long...\",\r\n \"Can you help me remember them?\",\r\n \"I could give you powers in exchange.\",\r\n ]\r\n },\r\n teresaStart: {\r\n id: 2,\r\n requirement: () => Ra.pets.teresa.level >= 2,\r\n lines: [\r\n \"Te... re... sa...\",\r\n \"I think I remember.\",\r\n ]\r\n },\r\n teresaLate: {\r\n id: 3,\r\n requirement: () => Ra.pets.teresa.level >= 15,\r\n lines: [\r\n \"Teresa dealt with machines, I believe.\",\r\n \"I remember visiting Teresa’s shop a few times.\",\r\n \"Wait, someone else had a shop too, right?\",\r\n ]\r\n },\r\n effarigStart: {\r\n id: 4,\r\n requirement: () => Ra.pets.effarig.level >= 2,\r\n lines: [\r\n \"Eff... a... rig\",\r\n \"I remember Effarig being friendly.\",\r\n ]\r\n },\r\n effarigLate: {\r\n id: 5,\r\n requirement: () => Ra.pets.effarig.level >= 15,\r\n lines: [\r\n \"Effarig was very particular?\",\r\n \"And I also remember a frightening Reality...\",\r\n \"It was about... suffering?\",\r\n ]\r\n },\r\n enslavedStart: {\r\n id: 6,\r\n requirement: () => Ra.pets.enslaved.level >= 2,\r\n lines: [\r\n \"I cannot remember this one completely...\",\r\n ]\r\n },\r\n enslavedLate: {\r\n id: 7,\r\n requirement: () => Ra.pets.enslaved.level >= 15,\r\n lines: [\r\n \"I am starting to remember...\",\r\n \"Why I am here...\",\r\n \"Why I am alone...\",\r\n \"Help me.\",\r\n ]\r\n },\r\n vStart: {\r\n id: 8,\r\n requirement: () => Ra.pets.v.level >= 2,\r\n lines: [\r\n \"Had I met this one?\",\r\n \"So lonely, yet willingly so...\",\r\n ]\r\n },\r\n vLate: {\r\n id: 9,\r\n requirement: () => Ra.pets.v.level >= 15,\r\n lines: [\r\n \"I think I met V once...\",\r\n \"I can remember the achievements.\",\r\n ]\r\n },\r\n remembrance: {\r\n id: 10,\r\n requirement: () => Ra.remembrance.isUnlocked,\r\n lines: [\r\n \"I remembered something!\",\r\n \"Watch this!\",\r\n \"Remembrance!\",\r\n \"I can focus even harder on remembering them now!\",\r\n ]\r\n },\r\n midMemories: {\r\n id: 11,\r\n requirement: () => Ra.totalPetLevel >= 50,\r\n lines: [\r\n \"Realities are my homes, yet I cannot make my own Reality.\",\r\n \"I can only copy the ones of my friends.\",\r\n \"But... why am I hearing voices?\",\r\n \"Are they asking for help?\",\r\n ]\r\n },\r\n lateMemories: {\r\n id: 12,\r\n requirement: () => Ra.totalPetLevel >= 80,\r\n lines: [\r\n \"I think they are telling me to stop.\",\r\n \"You... whatever you are?\",\r\n \"What is happening?\",\r\n \"Am I doing something wrong?\",\r\n ]\r\n },\r\n maxLevels: {\r\n id: 13,\r\n requirement: () => Ra.totalPetLevel === Ra.maxTotalPetLevel,\r\n lines: [\r\n \"Finally, I remember everything.\",\r\n \"This darkness that banished me.\",\r\n \"Lai'tela...\",\r\n \"They were right to banish me.\",\r\n \"My powers...\",\r\n \"They steal, they corrupt.\",\r\n \"Please leave.\",\r\n \"I do not want to hurt you too.\",\r\n ]\r\n },\r\n};\r\n","export const teresaQuotes = {\r\n initial: {\r\n id: 0,\r\n lines: [\r\n \"We have been observing you.\",\r\n \"You have shown promise with your bending of Reality.\",\r\n \"We are the Celestials, and we want you to join us.\",\r\n \"My name is Teresa, the Celestial Of Reality.\",\r\n \"Prove your worth.\",\r\n ]\r\n },\r\n unlockReality: {\r\n id: 1,\r\n lines: [\r\n \"I will let you inside my Reality, mortal. Do not get crushed by it.\"\r\n ]\r\n },\r\n completeReality: {\r\n id: 2,\r\n lines: [\r\n \"Why are you still here... you were supposed to fail.\"\r\n ]\r\n },\r\n effarig: {\r\n id: 3,\r\n lines: [\r\n \"You are still no match for us.\",\r\n \"I hope the others succeed where I have failed.\"\r\n ]\r\n }\r\n};\r\n","export const vQuotes = {\r\n initial: {\r\n id: 0,\r\n lines: [\r\n \"How pathetic...\"\r\n ],\r\n },\r\n unlock: {\r\n id: 1,\r\n lines: [\r\n \"Welcome to my Reality.\",\r\n \"I am surprised you could reach it.\",\r\n \"This is my realm after all...\",\r\n \"Not everyone is as great as me.\",\r\n ],\r\n },\r\n realityEnter: {\r\n id: 2,\r\n lines: [\r\n \"Good luck with that!\",\r\n \"You will need it.\",\r\n \"My reality is flawless. You will fail.\",\r\n ],\r\n },\r\n realityComplete: {\r\n id: 3,\r\n lines: [\r\n \"So fast...\",\r\n \"Do not think so much of yourself.\",\r\n \"This is just the beginning.\",\r\n \"You will never be better than me.\",\r\n ],\r\n },\r\n achievement1: {\r\n id: 4,\r\n requirement: () => V.spaceTheorems >= 1,\r\n lines: [\r\n \"Only one? Pathetic.\",\r\n \"Your accomplishments pale in comparison to mine.\",\r\n ],\r\n },\r\n achievement6: {\r\n id: 5,\r\n requirement: () => V.spaceTheorems >= 6,\r\n lines: [\r\n \"This is nothing.\",\r\n \"Do not be so full of yourself.\",\r\n ],\r\n },\r\n hex1: {\r\n id: 6,\r\n requirement: () => player.celestials.v.runUnlocks.filter(a => a === 6).length >= 1,\r\n lines: [\r\n \"Do not think it will get any easier from now on.\",\r\n \"You are awfully proud for such a little achievement.\",\r\n ],\r\n },\r\n achievement12: {\r\n id: 7,\r\n requirement: () => V.spaceTheorems >= 12,\r\n lines: [\r\n \"How did you...\",\r\n \"This barely amounts to anything!\",\r\n \"You will never complete them all.\",\r\n ],\r\n },\r\n achievement24: {\r\n id: 8,\r\n requirement: () => V.spaceTheorems >= 24,\r\n lines: [\r\n \"Impossible...\",\r\n \"After how difficult it was for me...\",\r\n ],\r\n },\r\n hex3: {\r\n id: 9,\r\n requirement: () => player.celestials.v.runUnlocks.filter(a => a === 6).length >= 3,\r\n lines: [\r\n \"No... No... No...\",\r\n \"This cannot be...\",\r\n ],\r\n },\r\n allAchievements: {\r\n id: 10,\r\n requirement: () => V.spaceTheorems >= 36,\r\n lines: [\r\n \"I... how did you do it...\",\r\n \"I worked so hard to get them...\",\r\n \"I am the greatest...\",\r\n \"No one is better than me...\",\r\n \"No one... no one... no on-\",\r\n ],\r\n }\r\n};\r\n","export const kohlerQuotes = {\r\n postWarp: {\r\n id: 0,\r\n lines: [\r\n \"...\",\r\n \"Hmm...\",\r\n \"That can't be good\"\r\n ]\r\n }\r\n}","import { destroyerQuotes } from \"./destroyer\";\r\nimport { effarigQuotes } from \"./effarig\";\r\nimport { enslavedQuotes } from \"./enslaved\";\r\nimport { laitelaQuotes } from \"./laitela\";\r\nimport { pelleQuotes } from \"./pelle\";\r\nimport { raQuotes } from \"./ra\";\r\nimport { teresaQuotes } from \"./teresa\";\r\nimport { vQuotes } from \"./v\";\r\nimport { kohlerQuotes } from \"./kohler\";\r\n\r\nexport const quotes = {\r\n teresa: teresaQuotes,\r\n effarig: effarigQuotes,\r\n enslaved: enslavedQuotes,\r\n v: vQuotes,\r\n ra: raQuotes,\r\n laitela: laitelaQuotes,\r\n pelle: pelleQuotes,\r\n destroyer: destroyerQuotes,\r\n kohler: kohlerQuotes,\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\n// This is supposed to be in ./navigation.js but importing doesn't work for some stupid reason\r\nfunction emphasizeEnd(fraction) {\r\n return Math.pow(fraction, 10);\r\n}\r\n\r\nexport const V_REDUCTION_MODE = {\r\n SUBTRACTION: 1,\r\n DIVISION: 2\r\n};\r\n\r\nexport const v = {\r\n // Note: mainUnlock IDs here are one-indexed to match with navigation indices\r\n mainUnlock: {\r\n realities: {\r\n id: 1,\r\n name: \"Realities\",\r\n resource: () => Currency.realities.value,\r\n requirement: 10000,\r\n format: x => formatInt(x),\r\n progress: () => Currency.realities.value / 10000,\r\n },\r\n eternities: {\r\n id: 2,\r\n name: \"Eternities\",\r\n resource: () => Currency.eternities.value,\r\n requirement: 1e70,\r\n format: x => format(x, 2),\r\n progress: () => emphasizeEnd(Currency.eternities.value.pLog10() / 70),\r\n },\r\n infinities: {\r\n id: 3,\r\n name: \"Infinities\",\r\n resource: () => Currency.infinitiesTotal.value,\r\n requirement: 1e160,\r\n format: x => format(x, 2),\r\n progress: () => emphasizeEnd(Currency.infinitiesTotal.value.pLog10() / 160),\r\n },\r\n dilatedTime: {\r\n id: 4,\r\n name: \"Dilated Time\",\r\n resource: () => player.records.thisReality.maxDT,\r\n requirement: DC.E320,\r\n format: x => format(x, 2),\r\n progress: () => emphasizeEnd(player.records.thisReality.maxDT.pLog10() / 320),\r\n },\r\n replicanti: {\r\n id: 5,\r\n name: \"Replicanti\",\r\n resource: () => player.records.thisReality.maxReplicanti,\r\n requirement: DC.E320000,\r\n format: x => format(x, 2),\r\n progress: () => emphasizeEnd(player.records.thisReality.maxReplicanti.pLog10() / 320000),\r\n },\r\n realityMachines: {\r\n id: 6,\r\n name: \"Reality Machines\",\r\n resource: () => Currency.realityMachines.value,\r\n requirement: 1e60,\r\n format: x => format(x, 2),\r\n progress: () => emphasizeEnd(Currency.realityMachines.value.pLog10() / 60),\r\n },\r\n },\r\n runUnlocks: [\r\n {\r\n id: 0,\r\n name: \"Glyph Knight\",\r\n description: value => `Unlock Reality with at most ${quantifyInt(\"Glyph slot\", -value)} filled.`,\r\n // This achievement has internally negated values since the check is always greater than\r\n values: [-5, -4, -3, -2, -1, 0],\r\n condition: () => V.isRunning && TimeStudy.reality.isBought,\r\n currentValue: () => -Glyphs.activeWithoutCompanion.length,\r\n formatRecord: x => (x >= -5 ? formatInt(-x) : \"Not reached\"),\r\n shardReduction: () => 0,\r\n maxShardReduction: () => 0,\r\n mode: V_REDUCTION_MODE.SUBTRACTION\r\n },\r\n {\r\n id: 1,\r\n name: \"AntiStellar\",\r\n description: value => `Have ${formatInt(value)} total Galaxies from all types.`,\r\n values: [4000, 4300, 4600, 4900, 5200, 5500],\r\n condition: () => V.isRunning,\r\n currentValue: () => Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies,\r\n formatRecord: x => formatInt(x),\r\n shardReduction: tiers => Math.floor(300 * tiers),\r\n maxShardReduction: goal => goal - 4000,\r\n perReductionStep: 3,\r\n mode: V_REDUCTION_MODE.SUBTRACTION\r\n },\r\n {\r\n id: 2,\r\n name: \"Se7en deadly matters\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Infinity Points in Eternity Challenge 7.`,\r\n values: [6e5, 7.2e5, 8.4e5, 9.6e5, 1.08e6, 1.2e6],\r\n condition: () => V.isRunning && EternityChallenge(7).isRunning,\r\n currentValue: () => Currency.infinityPoints.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: tiers => 1.2e5 * tiers,\r\n maxShardReduction: goal => goal - 6e5,\r\n perReductionStep: DC.E1200,\r\n mode: V_REDUCTION_MODE.DIVISION\r\n },\r\n {\r\n id: 3,\r\n name: \"Young Boy\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Antimatter in Eternity Challenge 12 without\r\n unlocking Time Dilation.`,\r\n values: [400e6, 450e6, 500e6, 600e6, 700e6, 800e6],\r\n condition: () => V.isRunning && EternityChallenge(12).isRunning && !PlayerProgress.dilationUnlocked(),\r\n currentValue: () => Currency.antimatter.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x)),\r\n shardReduction: tiers => 50e6 * tiers,\r\n maxShardReduction: goal => goal - 400e6,\r\n perReductionStep: DC.E500000,\r\n mode: V_REDUCTION_MODE.DIVISION\r\n },\r\n {\r\n id: 4,\r\n name: \"Eternal Sunshine\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Eternity Points.`,\r\n values: [7000, 7600, 8200, 8800, 9400, 10000],\r\n condition: () => V.isRunning,\r\n currentValue: () => Currency.eternityPoints.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: tiers => 600 * tiers,\r\n maxShardReduction: goal => goal - 7000,\r\n perReductionStep: 1e6,\r\n mode: V_REDUCTION_MODE.DIVISION\r\n },\r\n {\r\n id: 5,\r\n name: \"Matterception\",\r\n description: value => `Get ${formatInt(value)} Dimension Boosts while Dilated and inside Eternity Challenge 5.`,\r\n values: [51, 52, 53, 54, 55, 56],\r\n condition: () => V.isRunning && player.dilation.active && EternityChallenge(5).isRunning,\r\n currentValue: () => DimBoost.purchasedBoosts,\r\n formatRecord: x => formatInt(x),\r\n shardReduction: tiers => Math.floor(tiers),\r\n maxShardReduction: () => 5,\r\n reductionStepSize: 100,\r\n perReductionStep: 1,\r\n mode: V_REDUCTION_MODE.SUBTRACTION\r\n },\r\n {\r\n id: 6,\r\n name: \"Requiem for a Glyph\",\r\n description: value => `Unlock Reality with at most ${formatInt(-value)} Glyphs equipped for the entire Reality.`,\r\n // This achievement has internally negated values since the check is always greater than\r\n values: [1, 4, 7, 10, 13],\r\n condition: () => V.isRunning && TimeStudy.reality.isBought,\r\n currentValue: () => -player.requirementChecks.reality.maxGlyphs,\r\n formatRecord: x => formatInt(-x),\r\n shardReduction: () => 0,\r\n maxShardReduction: () => 0,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isHard: true\r\n },\r\n {\r\n id: 7,\r\n name: \"Post-destination\",\r\n description: value => `Get ${formatInt(400000)} Time Theorems with a /${format(Decimal.pow10(value), 2, 2)}\r\n Black Hole or slower, without discharging or entering EC12.`,\r\n values: [100, 150, 200, 250, 300],\r\n condition: () => V.isRunning,\r\n currentValue: () => (\r\n // Dirty hack I know lmao\r\n Currency.timeTheorems.gte(400000)\r\n ? -Math.log10(player.requirementChecks.reality.slowestBH)\r\n : 0),\r\n formatRecord: x => `${formatInt(1)} / ${format(Math.pow(10, x))}`,\r\n shardReduction: tiers => 50 * tiers,\r\n maxShardReduction: goal => goal - 50,\r\n reductionStepSize: 2,\r\n perReductionStep: 10,\r\n mode: V_REDUCTION_MODE.DIVISION,\r\n isHard: true\r\n },\r\n {\r\n id: 8,\r\n name: \"Shutter Glyph\",\r\n description: value => `Reach a Glyph of level ${formatInt(value)}.`,\r\n values: [6500, 7000, 8000, 9000, 10000],\r\n condition: () => V.isRunning,\r\n currentValue: () => gainedGlyphLevel().actualLevel,\r\n formatRecord: x => formatInt(x),\r\n shardReduction: tiers => Math.floor(500 * tiers),\r\n maxShardReduction: () => 500,\r\n perReductionStep: 5,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isHard: true\r\n },\r\n {\r\n id: 9,\r\n name: \"No Need for Knowledge\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Eternity Points without any Time Studies.`,\r\n values: [8e9, 9e10, 1e12, 1.1e13, 1.2e14],\r\n condition: () => V.isRunning && player.requirementChecks.reality.maxStudies<=0,\r\n currentValue: () => Currency.eternityPoints.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: () => 0,\r\n maxShardReduction: () => 0,\r\n perReductionStep: 5,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isSuperHard: true\r\n //Reminder: ST gain is based on id, not isSuperHard. However isSuperHard is deciding whether it could be complete or not.\r\n },\r\n {\r\n id: 10,\r\n name: \"Ultra Slow\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Antimatter while in Dilation and EC12.`,\r\n values: [1e14, 5e14, 1e15, 5e15, 1e16],\r\n condition: () => V.isRunning && player.dilation.active && EternityChallenge(12).isRunning,\r\n currentValue: () => Currency.antimatter.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: () => 0,\r\n maxShardReduction: () => 0,\r\n perReductionStep: 5,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 11,\r\n name: \"Proof of Purity\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Infinity Points with at least 7 Cursed Glyph equipped and without any Triad Studies.`,\r\n values: [1e11, 2e12, 3e13, 4e14, 5e15],\r\n condition: () => V.isRunning && Glyphs.activeWithoutCompanion.filter(item => item.type==='cursed').length>=7 && player.requirementChecks.reality.noTriads,\r\n currentValue: () => Currency.infinityPoints.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: () => 0,\r\n maxShardReduction: () => 0,\r\n perReductionStep: 5,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 12,\r\n name: \"Painful Roads\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Infinity Points without Triad study 305 and 307.`,\r\n values: [480, 813, 1147, 1480],\r\n condition: () => V.isSuperRunning && player.requirementChecks.reality.noTriad305 && player.requirementChecks.reality.noTriad307,\r\n currentValue: () => Currency.infinityPoints.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: tiers => 200*tiers,\r\n maxShardReduction: goal => goal - 480,\r\n perReductionStep: 1e2,\r\n mode: V_REDUCTION_MODE.DIVISION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 13,\r\n name: \"Eternal Equipments\",\r\n description: value => `Reach a Glyph of level ${formatInt(value)} with Eternities Glyph level factor weight at ${formatInt(100)}.`,\r\n values: [7500, 10000, 12500, 15000],\r\n condition: () => V.isSuperRunning && player.celestials.effarig.glyphWeights.eternities==100 && TimeStudy.reality.isBought,\r\n currentValue: () => gainedGlyphLevel().actualLevel,\r\n formatRecord: x => formatInt(x),\r\n shardReduction: tiers => Math.floor(10000*tiers),\r\n maxShardReduction: goal => goal - 7500,\r\n perReductionStep: 100,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 14,\r\n name: \"In and In and In\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Antimatter in Dilation, Eternity Challenge 3 and Infinity Challenge 8.`,\r\n values: [2500, 3000, 3500, 4500],\r\n condition: () => V.isSuperRunning && player.dilation.active && EternityChallenge(3).isRunning && InfinityChallenge(8).isRunning,\r\n currentValue: () => Currency.antimatter.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x)),\r\n shardReduction: tiers => 2500 * tiers,\r\n maxShardReduction: goal => goal - 2500,\r\n perReductionStep: new Decimal(1e25),\r\n mode: V_REDUCTION_MODE.DIVISION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 15,\r\n name: \"Usage\",\r\n description: value => `Get ${formatInt(value)} Time Theorems without Dilation glyph, Dilation unlocked and any Triad studies.`,\r\n values: [60000, 70000, 80000, 90000],\r\n condition: () => V.isSuperRunning && !PlayerProgress.dilationUnlocked() && Glyphs.activeWithoutCompanion.filter(item => item.type==='dilation').length==0 && player.requirementChecks.reality.noTriads,\r\n currentValue: () => Currency.timeTheorems.max.clampMax('1.7e308').toNumber(),\r\n formatRecord: x => formatInt(x),\r\n shardReduction: tiers => 50000 * tiers,\r\n maxShardReduction: goal => goal - 60000,\r\n perReductionStep: 500,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 16,\r\n name: \"Do What Shouldn't Do\",\r\n description: value => `Get ${formatInt(value)} Replicanti Galaxies.`,\r\n values: [40000, 42000, 44000, 46000],\r\n condition: () => V.isSuperRunning,\r\n currentValue: () => Replicanti.galaxies.total,\r\n formatRecord: x => formatInt(x),\r\n shardReduction: tiers => 5000 * tiers,\r\n maxShardReduction: goal => goal - 34000,\r\n perReductionStep: 50,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 17,\r\n name: \"Dying to Survive\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Eternity Points with 8 cursed glyphs.`,\r\n values: [125, 1500, 2750, 4000],\r\n condition: () => V.isSuperRunning && Glyphs.activeWithoutCompanion.filter(item => item.type==='cursed').length==8,\r\n currentValue: () => Currency.eternityPoints.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: tiers => 2500 * tiers,\r\n maxShardReduction: goal => goal - 125,\r\n perReductionStep: 1e25,\r\n mode: V_REDUCTION_MODE.DIVISION,\r\n isSuperHard: true\r\n }\r\n ],\r\n unlocks: {\r\n vAchievementUnlock: {\r\n id: 0,\r\n reward: \"Unlock V, The Celestial Of Achievements\",\r\n description: \"Meet all the above requirements simultaneously\",\r\n requirement: () => Object.values(GameDatabase.celestials.v.mainUnlock).every(e => e.progress() >= 1)\r\n },\r\n shardReduction: {\r\n id: 1,\r\n reward: `You can spend Perk Points to reduce the goal requirement of all tiers of each V-Achievement.`,\r\n description: () => `Have ${formatInt(2)} V-Achievements`,\r\n requirement: () => V.spaceTheorems >= 2\r\n },\r\n adPow: {\r\n id: 2,\r\n reward: \"Antimatter Dimension power based on total Space Theorems.\",\r\n description: () => `Have ${formatInt(5)} V-Achievements`,\r\n effect: () => 1 + Math.sqrt(V.spaceTheorems) / 100, //this should be about ^1.13\r\n format: x => formatPow(x, 3, 3),\r\n requirement: () => V.spaceTheorems >= 5\r\n },\r\n fastAutoEC: {\r\n id: 3,\r\n reward: \"Achievement multiplier reduces Auto-EC completion time.\",\r\n description: () => `Have ${formatInt(10)} V-Achievements`,\r\n effect: () => Achievements.power,\r\n // Base rate is 60 ECs at 20 minutes each\r\n format: x =>{\r\n if (MendingUpgrade(3).isBought) return \"Instant (Mending Upgrade 3)\";\r\n else if (Ra.unlocks.instantECAndRealityUpgradeAutobuyers.canBeApplied) return \"Instant (Ra upgrade)\";\r\n return `${TimeSpan.fromMinutes(60 * 20 / x.toNumber()).toStringShort()} for full completion`;\r\n },\r\n requirement: () => V.spaceTheorems >= 10\r\n },\r\n autoAutoClean: {\r\n id: 4,\r\n reward: \"Unlock the ability to Automatically Purge Glyphs on Reality.\",\r\n description: () => `Have ${formatInt(16)} V-Achievements`,\r\n requirement: () => V.spaceTheorems >= 16\r\n },\r\n achievementBH: {\r\n id: 5,\r\n reward: \"Achievement multiplier affects Black Hole power.\",\r\n description: () => `Have ${formatInt(30)} V-Achievements`,\r\n effect: () => Achievements.power,\r\n format: x => formatX(x, 2, 0),\r\n requirement: () => V.spaceTheorems >= 30\r\n },\r\n raUnlock: {\r\n id: 6,\r\n reward() {\r\n return `Reduce the Space Theorem cost of Time Studies by ${formatInt(2)}.\r\n Unlock Ra, Celestial of the Forgotten.`;\r\n },\r\n description: () => `Have ${formatInt(36)} V-Achievements`,\r\n effect: 2,\r\n requirement: () => V.spaceTheorems >= 36\r\n },\r\n vAchMulti: {\r\n id: 7,\r\n reward() {\r\n return `Extra Achievements Multiplier based on total space theorems.`;\r\n },\r\n description: () => `Have ${formatInt(210)} V-Achievements`,\r\n effect: () => Decimal.pow(V.spaceTheorems,2).clampMin(1).toNumber(),\r\n format: x => formatX(x, 2, 2),\r\n requirement: () => V.spaceTheorems >= 210 && Ra.unlocks.unlockSHardV.isUnlocked\r\n },\r\n vAchRa: {\r\n id: 8,\r\n reward() {\r\n return `Total space theorems now boosts Ra's memory gain.`;\r\n },\r\n description: () => `Have ${formatInt(300)} V-Achievements`,\r\n effect: () => Math.max(V.spaceTheorems/50,1),\r\n format: x => formatX(x, 2, 2),\r\n requirement: () => V.spaceTheorems >= 300 && Ra.unlocks.unlockSHardV.isUnlocked\r\n },\r\n vKeep: {\r\n id: 9,\r\n reward() {\r\n return `Keep all V progress on Mend.`;\r\n },\r\n description: () => `Have ${formatInt(390)} V-Achievements`,\r\n effect: 1,\r\n requirement: () => V.spaceTheorems >= 390 && Ra.unlocks.unlockSHardV.isUnlocked\r\n }\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\n\r\n\r\n/**\r\n * @abstract\r\n */\r\nclass MathOperations {\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n add(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n subtract(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n multiply(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n divide(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n max(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n min(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n eq(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n gt(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n gte(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n lt(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n lte(left, right) { throw new NotImplementedError(); }\r\n}\r\n\r\nMathOperations.number = new class NumberMathOperations extends MathOperations {\r\n add(left, right) { return left + right; }\r\n subtract(left, right) { return left - right; }\r\n multiply(left, right) { return left * right; }\r\n divide(left, right) { return left / right; }\r\n max(left, right) { return Math.max(left, right); }\r\n min(left, right) { return Math.min(left, right); }\r\n eq(left, right) { return left === right; }\r\n gt(left, right) { return left > right; }\r\n gte(left, right) { return left >= right; }\r\n lt(left, right) { return left < right; }\r\n lte(left, right) { return left <= right; }\r\n}();\r\n\r\nMathOperations.decimal = new class DecimalMathOperations extends MathOperations {\r\n add(left, right) { return Decimal.add(left, right); }\r\n subtract(left, right) { return Decimal.subtract(left, right); }\r\n multiply(left, right) { return Decimal.multiply(left, right); }\r\n divide(left, right) { return Decimal.divide(left, right); }\r\n max(left, right) { return Decimal.max(left, right); }\r\n min(left, right) { return Decimal.min(left, right); }\r\n eq(left, right) { return Decimal.eq(left, right); }\r\n gt(left, right) { return Decimal.gt(left, right); }\r\n gte(left, right) { return Decimal.gte(left, right); }\r\n lt(left, right) { return Decimal.lt(left, right); }\r\n lte(left, right) { return Decimal.lte(left, right); }\r\n}();\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class Currency {\r\n /**\r\n * @abstract\r\n */\r\n get value() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n set value(value) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n * @type {MathOperations}\r\n */\r\n get operations() { throw new NotImplementedError(); }\r\n\r\n add(amount) {\r\n this.value = this.operations.add(this.value, amount);\r\n }\r\n\r\n subtract(amount) {\r\n this.value = this.operations.max(this.operations.subtract(this.value, amount), 0);\r\n }\r\n\r\n multiply(amount) {\r\n this.value = this.operations.multiply(this.value, amount);\r\n }\r\n\r\n divide(amount) {\r\n this.value = this.operations.divide(this.value, amount);\r\n }\r\n\r\n eq(amount) {\r\n return this.operations.eq(this.value, amount);\r\n }\r\n\r\n gt(amount) {\r\n return this.operations.gt(this.value, amount);\r\n }\r\n\r\n gte(amount) {\r\n return this.operations.gte(this.value, amount);\r\n }\r\n\r\n lt(amount) {\r\n return this.operations.lt(this.value, amount);\r\n }\r\n\r\n lte(amount) {\r\n return this.operations.lte(this.value, amount);\r\n }\r\n\r\n purchase(cost) {\r\n if (!this.gte(cost)) return false;\r\n this.subtract(cost);\r\n return true;\r\n }\r\n\r\n bumpTo(value) {\r\n this.value = this.operations.max(this.value, value);\r\n }\r\n\r\n dropTo(value) {\r\n this.value = this.operations.min(this.value, value);\r\n }\r\n\r\n get startingValue() { throw new NotImplementedError(); }\r\n\r\n reset() {\r\n this.value = this.startingValue;\r\n }\r\n}\r\n\r\n/**\r\n * @abstract\r\n */\r\nclass NumberCurrency extends Currency {\r\n get operations() { return MathOperations.number; }\r\n get startingValue() { return 0; }\r\n}\r\n\r\n/**\r\n * @abstract\r\n */\r\nclass DecimalCurrency extends Currency {\r\n get operations() { return MathOperations.decimal; }\r\n get mantissa() { return this.value.mantissa; }\r\n get exponent() { return this.value.exponent; }\r\n get startingValue() { return DC.D0; }\r\n}\r\nwindow.DecimalCurrency = DecimalCurrency;\r\n\r\nCurrency.antimatter = new class extends DecimalCurrency {\r\n get value() { return player.antimatter; }\r\n\r\n set value(value) {\r\n if (InfinityChallenges.nextIC) InfinityChallenges.notifyICUnlock(value);\r\n if (GameCache.cheapestAntimatterAutobuyer.value && value.gte(GameCache.cheapestAntimatterAutobuyer.value)) {\r\n // Clicking into the automation tab clears the trigger and prevents it from retriggering as long as the player\r\n // stays on the tab; leaving the tab with an available autobuyer will immediately force it to trigger again\r\n TabNotification.newAutobuyer.clearTrigger();\r\n TabNotification.newAutobuyer.tryTrigger();\r\n }\r\n player.antimatter = value;\r\n player.records.thisInfinity.maxAM = player.records.thisInfinity.maxAM.max(value);\r\n player.records.thisEternity.maxAM = player.records.thisEternity.maxAM.max(value);\r\n player.records.thisReality.maxAM = player.records.thisReality.maxAM.max(value);\r\n\r\n if (Pelle.isDoomed) {\r\n player.celestials.pelle.records.totalAntimatter = player.celestials.pelle.records.totalAntimatter.max(value);\r\n }\r\n }\r\n\r\n add(amount) {\r\n super.add(amount);\r\n if (amount.gt(0)) {\r\n player.records.totalAntimatter = player.records.totalAntimatter.add(amount);\r\n player.requirementChecks.reality.noAM = false;\r\n }\r\n }\r\n\r\n get productionPerSecond() {\r\n return NormalChallenge(12).isRunning\r\n ? AntimatterDimension(1).productionPerRealSecond.plus(AntimatterDimension(2).productionPerRealSecond)\r\n : AntimatterDimension(1).productionPerRealSecond;\r\n }\r\n\r\n get startingValue() {\r\n if (Pelle.isDisabled()) return new Decimal(100);\r\n return Effects.max(\r\n 10,\r\n Perk.startAM,\r\n Achievement(21),\r\n Achievement(37),\r\n Achievement(54),\r\n Achievement(55),\r\n Achievement(78)\r\n ).toDecimal();\r\n }\r\n}();\r\n\r\nCurrency.matter = new class extends DecimalCurrency {\r\n get value() { return player.matter; }\r\n set value(value) {\r\n player.matter = Decimal.min(value, Decimal.MAX_VALUE);\r\n }\r\n}();\r\n\r\nCurrency.infinities = new class extends DecimalCurrency {\r\n get value() { return player.infinities; }\r\n set value(value) { player.infinities = value; }\r\n}();\r\n\r\nCurrency.infinitiesBanked = new class extends DecimalCurrency {\r\n get value() { return player.infinitiesBanked; }\r\n set value(value) { player.infinitiesBanked = value; }\r\n}();\r\n\r\nCurrency.infinitiesTotal = new class extends DecimalCurrency {\r\n get value() { return player.infinities.plus(player.infinitiesBanked); }\r\n set value(value) { player.infinities = value; }\r\n}();\r\n\r\nCurrency.infinityPoints = new class extends DecimalCurrency {\r\n get value() { return player.infinityPoints; }\r\n set value(value) {\r\n player.infinityPoints = value;\r\n player.records.thisEternity.maxIP = player.records.thisEternity.maxIP.max(value);\r\n player.records.thisReality.maxIP = player.records.thisReality.maxIP.max(value);\r\n\r\n if (Pelle.isDoomed) {\r\n player.celestials.pelle.records.totalInfinityPoints =\r\n player.celestials.pelle.records.totalInfinityPoints.max(value);\r\n }\r\n }\r\n\r\n get startingValue() {\r\n if (Pelle.isDisabled()) return new Decimal(0);\r\n return Effects.max(\r\n 0,\r\n Perk.startIP1,\r\n Perk.startIP2,\r\n Achievement(104),\r\n MendingUpgrade(2[1])\r\n ).toDecimal();\r\n }\r\n\r\n reset() {\r\n super.reset();\r\n player.records.thisEternity.maxIP = this.startingValue;\r\n }\r\n}();\r\n\r\nCurrency.infinityPower = new class extends DecimalCurrency {\r\n get value() { return player.infinityPower; }\r\n set value(value) { \r\n player.infinityPower = value; \r\n }\r\n}();\r\n\r\nCurrency.eternities = new class extends DecimalCurrency {\r\n get value() { return player.eternities; }\r\n set value(value) { player.eternities = value; }\r\n\r\n get startingValue() {\r\n if (Pelle.isDoomed) return new Decimal(0);\r\n return Effects.max(\r\n 0,\r\n RealityUpgrade(10),\r\n MendingUpgrade(2[0])\r\n ).toDecimal();\r\n }\r\n}();\r\n\r\nCurrency.eternityPoints = new class extends DecimalCurrency {\r\n get value() { return player.eternityPoints; }\r\n set value(value) {\r\n player.eternityPoints = value;\r\n player.records.thisReality.maxEP = player.records.thisReality.maxEP.max(value);\r\n if (player.records.bestReality.bestEP.lt(value)) {\r\n player.records.bestReality.bestEP = value;\r\n player.records.bestReality.bestEPSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n\r\n if (Pelle.isDoomed) {\r\n player.celestials.pelle.records.totalEternityPoints =\r\n player.celestials.pelle.records.totalEternityPoints.max(value);\r\n }\r\n }\r\n\r\n get startingValue() {\r\n if (Pelle.isDisabled()) return new Decimal(0);\r\n return Effects.max(\r\n 0,\r\n Perk.startEP1,\r\n Perk.startEP2,\r\n Perk.startEP3\r\n ).toDecimal();\r\n }\r\n\r\n reset() {\r\n super.reset();\r\n player.records.thisReality.maxEP = this.startingValue;\r\n }\r\n}();\r\n\r\nCurrency.timeShards = new class extends DecimalCurrency {\r\n get value() { return player.timeShards; }\r\n set value(value) { player.timeShards = value; }\r\n}();\r\n\r\nCurrency.timeTheorems = new class extends DecimalCurrency {\r\n get value() { return player.timestudy.theorem; }\r\n set value(value) {\r\n player.timestudy.theorem = value;\r\n player.timestudy.maxTheorem = value.plus(TimeTheorems.calculateTimeStudiesCost());\r\n }\r\n\r\n get max() { return player.timestudy.maxTheorem; }\r\n\r\n add(amount) {\r\n super.add(amount);\r\n player.timestudy.maxTheorem = player.timestudy.maxTheorem.plus(amount);\r\n }\r\n\r\n reset() {\r\n respecTimeStudies(true);\r\n super.reset();\r\n TimeTheoremPurchaseType.am.reset();\r\n TimeTheoremPurchaseType.ip.reset();\r\n TimeTheoremPurchaseType.ep.reset();\r\n player.timestudy.maxTheorem = this.startingValue;\r\n }\r\n}();\r\n\r\nCurrency.tachyonParticles = new class extends DecimalCurrency {\r\n get value() { return player.dilation.tachyonParticles; }\r\n set value(value) { player.dilation.tachyonParticles = value; }\r\n}();\r\n\r\nCurrency.dilatedTime = new class extends DecimalCurrency {\r\n get value() { return player.dilation.dilatedTime; }\r\n set value(value) {\r\n player.dilation.dilatedTime = value;\r\n player.records.thisReality.maxDT = player.records.thisReality.maxDT.max(value);\r\n }\r\n}();\r\n\r\nCurrency.realities = new class extends NumberCurrency {\r\n get value() { return player.realities; }\r\n set value(value) { player.realities = value; }\r\n}();\r\n\r\nCurrency.realityMachines = new class extends DecimalCurrency {\r\n get value() { return player.reality.realityMachines; }\r\n set value(value) {\r\n const newValue = Decimal.min(value, MachineHandler.hardcapRM);\r\n const addedThisReality = newValue.minus(player.reality.realityMachines);\r\n player.reality.realityMachines = newValue;\r\n player.reality.maxRM = Decimal.max(player.reality.maxRM, newValue);\r\n if (player.reality.realityMachines.gte(player.records.thisMend.maxRM)) player.records.thisMend.maxRM = player.reality.realityMachines;\r\n if (player.records.bestReality.RM.lt(addedThisReality)) {\r\n player.records.bestReality.RM = addedThisReality;\r\n player.records.bestReality.RMSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n }\r\n}();\r\n\r\nCurrency.perkPoints = new class extends NumberCurrency {\r\n get value() { return player.reality.perkPoints; }\r\n set value(value) { player.reality.perkPoints = value; }\r\n}();\r\n\r\nCurrency.relicShards = new class extends DecimalCurrency {\r\n get value() { return player.celestials.effarig.relicShards; }\r\n set value(value) { player.celestials.effarig.relicShards = value; }\r\n}();\r\n\r\nCurrency.imaginaryMachines = new class extends NumberCurrency {\r\n get value() { return player.reality.imaginaryMachines; }\r\n set value(value) {\r\n if(player.reality.imaginaryMachines > player.records.thisMend.maxiM) player.records.thisMend.maxiM = player.reality.imaginaryMachines;\r\n player.reality.imaginaryMachines = Math.clampMax(value, MachineHandler.currentIMCap);\r\n }\r\n}();\r\n\r\nCurrency.darkMatter = new class extends DecimalCurrency {\r\n get value() { return player.celestials.laitela.darkMatter; }\r\n set value(value) {\r\n const capped = Decimal.min(value, new Decimal(Number.MAX_VALUE).times(Ra.unlocks.increaseDarkMatterCap.isUnlocked ? Decimal.pow(1e10, Ra.pets.laitela.level) : 1)).times(player.celestials.ra.upgrades.has('laitelaUpgrade') ? Currency.singularities.value*Currency.singularities.value+1 : 1);\r\n player.celestials.laitela.darkMatter = capped;\r\n player.celestials.laitela.maxDarkMatter = player.celestials.laitela.maxDarkMatter.max(capped);\r\n }\r\n\r\n get max() { return player.celestials.laitela.maxDarkMatter; }\r\n set max(value) { player.celestials.laitela.maxDarkMatter = value; }\r\n}();\r\n\r\nCurrency.darkEnergy = new class extends NumberCurrency {\r\n get value() { return player.celestials.laitela.darkEnergy; }\r\n set value(value) { player.celestials.laitela.darkEnergy = Math.min(value, 1e300); }\r\n\r\n get productionPerSecond() {\r\n return DarkMatterDimensions.all\r\n .map(d => d.productionPerSecond)\r\n .sum();\r\n }\r\n}();\r\n\r\nCurrency.singularities = new class extends NumberCurrency {\r\n get value() { return player.celestials.laitela.singularities; }\r\n set value(value) { player.celestials.laitela.singularities = value; }\r\n}();\r\n\r\nCurrency.remnants = new class extends NumberCurrency {\r\n get value() { return player.celestials.pelle.remnants; }\r\n set value(value) { player.celestials.pelle.remnants = value; }\r\n}();\r\n\r\nCurrency.realityShards = new class extends DecimalCurrency {\r\n get value() { return player.celestials.pelle.realityShards; }\r\n set value(value) { player.celestials.pelle.realityShards = value; }\r\n}();\r\n\r\nCurrency.replicanti = new class extends DecimalCurrency {\r\n get value() { return player.replicanti.amount; }\r\n set value(value) { player.replicanti.amount = value; }\r\n}();\r\n\r\nCurrency.galaxyGeneratorGalaxies = new class extends NumberCurrency {\r\n get value() {\r\n return player.galaxies + GalaxyGenerator.galaxies;\r\n }\r\n\r\n set value(value) {\r\n const spent = player.galaxies + GalaxyGenerator.galaxies - value;\r\n player.celestials.pelle.galaxyGenerator.spentGalaxies += spent;\r\n }\r\n}();\r\n\r\n//new currencies start here\r\n\r\nCurrency.mendingPoints = new class extends DecimalCurrency {\r\n get value() { \r\n return player.mendingPoints; \r\n }\r\n set value(value) {\r\n player.mendingPoints = new Decimal(value);\r\n }\r\n\r\n get startingValue() {\r\n return new Decimal(0);\r\n }\r\n\r\n reset() {\r\n //super.reset();\r\n }\r\n}();\r\n\r\nCurrency.mends = new class extends DecimalCurrency {\r\n get value() { \r\n return player.mends; \r\n }\r\n set value(value) {\r\n player.mends = new Decimal(value);\r\n }\r\n\r\n get startingValue() {\r\n return new Decimal(0);\r\n }\r\n\r\n reset() {\r\n //super.reset();\r\n }\r\n}();\r\n\r\nCurrency.corruptionFragments = new class extends NumberCurrency {\r\n get value() { \r\n return player.mending.corruptedFragments; \r\n }\r\n set value(value) {\r\n player.mending.corruptedFragments = value;\r\n }\r\n\r\n get startingValue() {\r\n return 0;\r\n }\r\n\r\n reset() {\r\n //super.reset();\r\n }\r\n}();\r\n\r\nCurrency.raPoints = new class extends DecimalCurrency {\r\n get value() { \r\n return player.celestials.ra.raPoints; \r\n }\r\n set value(value) {\r\n player.celestials.ra.raPoints = new Decimal(value);\r\n }\r\n\r\n get startingValue() {\r\n return new Decimal(0);\r\n }\r\n\r\n reset() {\r\n //super.reset();\r\n }\r\n}();\r\n\r\nCurrency.galBoostPoints = new class extends DecimalCurrency {\r\n get value() { \r\n return player.galBoostPoints; \r\n }\r\n set value(value) {\r\n player.galBoostPoints = new Decimal(value);\r\n }\r\n\r\n get startingValue() {\r\n return new Decimal(0);\r\n }\r\n\r\n reset() {\r\n //super.reset();\r\n }\r\n}();\r\n","import { DC } from \"../../constants\";\r\nimport { Currency } from \"../../currency\";\r\nimport { DEV } from \"@/env\";\r\n//import { Ra } from \"../../globals\";\r\n\r\nconst formatCost = c => format(c, 2);\r\n\r\nconst rebuyable = config => {\r\n return {\r\n id: config.id,\r\n num: config.num,\r\n celestial: config.celestial,\r\n description: config.description,\r\n cost: () => /*getHybridCostScaling(\r\n player.celestials.ra.rebuyables[config.id],\r\n 0,\r\n config.baseCost,\r\n 10,\r\n (90 * 10 ** player.celestials.ra.rebuyables[config.id]), // This is dumb. Very dumb. I know. Its also very easy, and does what i want. Shut up.\r\n DC.E333,\r\n 10,\r\n 10 //Yes the exponential and linear here are the same. Thats on purpose, this code is easier to use for just exponential (weirdly) so thats what im doing.\r\n )*/config.num<=7 ? config.baseCost*(2.5**player.celestials.ra.rebuyables[config.id]) : config.baseCost*(10**(player.celestials.ra.rebuyables[config.id]*player.celestials.ra.rebuyables[config.id]*0.1+player.celestials.ra.rebuyables[config.id])),//Idk how you make cost decrease --sxy\r\n formatCost,\r\n effect: config.effect,\r\n formatEffect: x => formatX(x, 2, 2),\r\n currency: Currency.raPoints,\r\n currencyLabel: config.currencyLabel,\r\n rebuyable: true,\r\n implemented: DEV\r\n }\r\n}\r\n\r\nconst weakenScalingRebuyable = config => {\r\n return rebuyable({\r\n id: config.id,\r\n num: config.num,\r\n celestial: config.celestial,\r\n description: config.description,\r\n baseCost: config.baseCost,\r\n currency: config.currency,\r\n currencyLabel: config.currencyLabel,\r\n effect: () => Math.pow(10, player.celestials.ra.rebuyables[config.id])\r\n }\r\n )\r\n}\r\n\r\nconst incXpGainRebuyable = config => {\r\n return rebuyable({\r\n id: config.id,\r\n num: config.num,\r\n celestial: config.celestial,\r\n description: config.description,\r\n baseCost: config.baseCost,\r\n currency: config.currency,\r\n currencyLabel: config.currencyLabel,\r\n effect: () => Math.pow(10, player.celestials.ra.rebuyables[config.id])\r\n }\r\n )\r\n}\r\n\r\nexport const raUpgrades = {\r\n weakenTeresaScaling: weakenScalingRebuyable({\r\n id: \"weakenTeresaScaling\",\r\n num: 1,\r\n celestial: \"teresa\",\r\n description: () => `Weaken Teresa's level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,//temporary, have to decide what we're gonna use (Fn its MvR for all, defined above and in ra-upgrades.js (the other one))\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n weakenEffarigScaling: weakenScalingRebuyable({\r\n id: \"weakenEffarigScaling\",\r\n num: 2,\r\n celestial: \"effarig\",\r\n description: () => `Weaken Effarig's level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n weakenEnslavedScaling: weakenScalingRebuyable({\r\n id: \"weakenEnslavedScaling\",\r\n num: 3,\r\n celestial: \"enslaved\",\r\n description: () => `Weaken Nameless' level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n weakenVScaling: weakenScalingRebuyable({\r\n id: \"weakenVScaling\",\r\n num: 4,\r\n celestial: \"v\",\r\n description: () => `Weaken V's level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n weakenRaScaling: weakenScalingRebuyable({\r\n id: \"weakenRaScaling\",\r\n num: 5,\r\n celestial: \"ra\",\r\n description: () => `Weaken Ra's level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n weakenLaitelaScaling: weakenScalingRebuyable({\r\n id: \"weakenLaitelaScaling\",\r\n num: 6,\r\n celestial: \"laitela\",\r\n description: () => `Weaken Lai'tela's level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n weakenPelleScaling: weakenScalingRebuyable({\r\n id: \"weakenPelleScaling\",\r\n num: 7,\r\n celestial: \"pelle\",\r\n description: () => `Weaken Pelle's level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incTeresaXPGain: incXpGainRebuyable({\r\n id: \"incTeresaXPGain\",\r\n num: 8,\r\n celestial: \"teresa\",\r\n description: () => `Increase Teresa's Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incEffarigXPGain: incXpGainRebuyable({\r\n id: \"incEffarigXPGain\",\r\n num: 9,\r\n celestial: \"effarig\",\r\n description: () => `Increase Effarig's Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incEnslavedXPGain: incXpGainRebuyable({\r\n id: \"incEnslavedXPGain\",\r\n num: 10,\r\n celestial: \"enslaved\",\r\n description: () => `Increase Nameless' Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incVXPGain: incXpGainRebuyable({\r\n id: \"incVXPGain\",\r\n num: 11,\r\n celestial: \"v\",\r\n description: () => `Increase V's Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incRaXPGain: incXpGainRebuyable({\r\n id: \"incRaXPGain\",\r\n num: 12,\r\n celestial: \"ra\",\r\n description: () => `Increase Ra's Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incLaitelaXPGain: incXpGainRebuyable({\r\n id: \"incLaitelaXPGain\",\r\n num: 13,\r\n celestial: \"laitela\",\r\n description: () => `Increase Lai'tela's Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incPelleXPGain: incXpGainRebuyable({\r\n id: \"incPelleXPGain\",\r\n num: 14,\r\n celestial: \"pelle\",\r\n description: () => `Increase Pelle's Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n teresaUpgrade: {\r\n id: \"teresaUpgrade\",\r\n celestial: \"teresa\",\r\n description: \"Cost of Elliptic Materiality ^0.85, and add extra Reality Machine cap based on Teresa's Reality Antimatter Record.\",\r\n cost: 1e18,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true//Ra.unlocks.improvedPetUpgrades.isUnlocked,\r\n },\r\n effarigUpgrade: {\r\n id: \"effarigUpgrade\",\r\n celestial: \"effarig\",\r\n description: \"Triple Reality Glyph level.\",\r\n cost: 1e19,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true,\r\n },\r\n enslavedUpgrade: {\r\n id: \"enslavedUpgrade\",\r\n celestial: \"enslaved\",\r\n description: \"Stored Real Time is always at its cap, and Stored Real Time affects Game Speed.\",\r\n cost: 1e19,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true,\r\n },\r\n vUpgrade: {\r\n id: \"vUpgrade\",\r\n celestial: \"v\",\r\n description: \"The memory rebuyable Warp Upgrade now also affect achievement multiplier.\",\r\n cost: 1e19,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true,\r\n },\r\n raUpgrade: {\r\n id: \"raUpgrade\",\r\n celestial: \"ra\",\r\n description: \"Memory Crystal reduces Dimension Boost cost.\",\r\n cost: 2e22,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true,\r\n },\r\n laitelaUpgrade: {\r\n id: \"laitelaUpgrade\",\r\n celestial: \"laitela\",\r\n description: \"Singularities increases Dark Matter cap.\",\r\n cost: 5e21,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true,\r\n },\r\n pelleUpgrade: {\r\n id: \"pelleUpgrade\",\r\n celestial: \"pelle\",\r\n description: \"Doomed Reality won't END if Galaxy Generator is not unlocked.\",\r\n cost: 5e21,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true,\r\n },\r\n}","import { finalSigil } from \"./navigation-sigils/final-sigil\";\r\nimport { galaxyIcon } from \"./navigation-sigils/galaxy-icon\";\r\nimport { alchemyResources } from \"./alchemy\";\r\nimport { effarigUnlocks } from \"./effarig\";\r\nimport { enslaved } from \"./enslaved\";\r\nimport { pelleGalaxyGeneratorUpgrades } from \"./galaxy-generator\";\r\nimport { celestialNavigation } from \"./navigation\";\r\nimport { pelleUpgrades } from \"./pelle-upgrades\";\r\nimport { perkShop } from \"./perk-shop\";\r\nimport { ra } from \"./ra\";\r\nimport { pelleRifts } from \"./rifts\";\r\nimport { singularityMilestones } from \"./singularity-milestones\";\r\nimport { pelleStrikes } from \"./strikes\";\r\nimport { teresa } from \"./teresa\";\r\nimport { quotes } from \"./quotes\";\r\nimport { v } from \"./v\";\r\nimport { raUpgrades } from \"./ra-upgrades\";\r\n\r\nexport const celestials = {\r\n effarig: {\r\n unlocks: effarigUnlocks\r\n },\r\n alchemy: {\r\n resources: alchemyResources\r\n },\r\n pelle: {\r\n galaxyGeneratorUpgrades: pelleGalaxyGeneratorUpgrades,\r\n strikes: pelleStrikes,\r\n upgrades: pelleUpgrades,\r\n rifts: pelleRifts\r\n },\r\n descriptions: {},\r\n enslaved,\r\n navigation: celestialNavigation,\r\n navSigils: {\r\n ...galaxyIcon,\r\n ...finalSigil\r\n },\r\n perkShop,\r\n ra,\r\n raUpgrades,\r\n singularityMilestones,\r\n teresa,\r\n quotes,\r\n v\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nconst specialInfinityGlyphDisabledEffectText = () => (PelleRifts.chaos.milestones[1].canBeApplied\r\n ? \"The Pelle-Specific effect from Infinity Glyphs is also disabled.\"\r\n : \"\");\r\n\r\nexport const eternityChallenges = [\r\n {\r\n id: 1,\r\n description: \"Time Dimensions are disabled.\",\r\n goal: DC.E1800,\r\n goalIncrease: DC.E200,\r\n reward: {\r\n description: \"Time Dimension multiplier based on time spent this Eternity\",\r\n effect: completions =>\r\n {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(1);\r\n return Decimal.pow(Decimal.max(player.records.thisEternity.time.div(10), 0.9), 0.3 + (completions * 0.05))\r\n },\r\n formatEffect: value => formatX(value, 2, 1),\r\n },\r\n vReward:{\r\n description: `⌬ Time Dimension power based on real time spent this Mend ⌬`,\r\n effect: () => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return Math.min(0.5, (Math.log10(player.records.thisMend.realTime + 1) / 100)) * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600) + 1\r\n },\r\n formatEffect: value => formatPow(value, 2, 3),\r\n },\r\n // These will get notation-formatted and scrambled between for the final goal\r\n scrambleText: [\"1e2600\", \"1e201600\"],\r\n },\r\n {\r\n id: 2,\r\n description: \"Infinity Dimensions are disabled.\",\r\n goal: DC.E975,\r\n pelleGoal: DC.E1750,\r\n goalIncrease: DC.E175,\r\n reward: {\r\n description: \"1st Infinity Dimension multiplier based on Infinity Power\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(1);\r\n return Currency.infinityPower.value.pow(1.5 / (700 - completions * 100)).clampMin(1)},\r\n cap: DC.E100,\r\n formatEffect: value => formatX(value, 2, 1),\r\n },\r\n vReward:{\r\n description: `⌬ Infinity Dimension power based on Infinity Power ⌬`,\r\n effect: () => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 + (Math.log10(Math.max(Currency.infinityPower.value.clampMin(1).log10(), 1)) / 500) * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600)},\r\n formatEffect: value => formatPow(value, 2, 3)\r\n }\r\n },\r\n {\r\n id: 3,\r\n description: \"Antimatter Dimensions 5-8 don't produce anything. Dimensional Sacrifice is disabled.\",\r\n goal: DC.E600,\r\n pelleGoal: DC.E925,\r\n goalIncrease: DC.E75,\r\n reward: {\r\n description: () => `Increase the multiplier for buying ${formatInt(10)} Antimatter Dimensions`,\r\n effect: completions => { if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 0;\r\n return completions * 0.72},\r\n formatEffect: value => `+${format(value, 2, 2)}`,\r\n },\r\n vReward:{\r\n description: `⌬ All per-purchase multipliers raised ⌬`,\r\n formatEffect: value => `${formatPow(value, 3, 3)}`,\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 + (0.0005 * completions * ((Ra.pets.v.level - 25) / 75) + V.spaceTheorems / 600)},\r\n }\r\n },\r\n {\r\n id: 4,\r\n description: `all Infinity multipliers and generators are disabled. The goal must be reached within a certain\r\n number of Infinities or else you will fail the Challenge.`,\r\n goal: DC.E2750,\r\n goalIncrease: DC.E550,\r\n restriction: completions => Math.max(16 - 4 * completions, 0),\r\n checkRestriction: restriction => Currency.infinities.lte(restriction),\r\n formatRestriction: restriction => (restriction === 0\r\n ? \"without any Infinities\"\r\n : `in ${quantifyInt(\"Infinity\", restriction)} or less`),\r\n failedRestriction: \"(Too many Infinities for more)\",\r\n reward: {\r\n description: \"Infinity Dimension multiplier based on unspent IP\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(1);\r\n return Currency.infinityPoints.value.pow(0.003 + completions * 0.002)\r\n },\r\n cap: DC.E200,\r\n formatEffect: value => formatX(value, 2, 1),\r\n },\r\n vReward:{\r\n description: `⌬ All Dimension power based on Multiversal Remains ⌬`,\r\n effect: () => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 + (Decimal.log10(Currency.mendingPoints.value.add(1)) / 250) / 10 * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600)},\r\n formatEffect: value => formatPow(value, 3, 3),\r\n }\r\n },\r\n {\r\n id: 5,\r\n description: () => `Antimatter Galaxy cost increase scaling starts immediately (normally at ${formatInt(100)}\r\n Galaxies). Dimension Boost costs scaling is massively increased.`,\r\n goal: DC.E750,\r\n pelleGoal: DC.E1400,\r\n goalIncrease: DC.E400,\r\n reward: {\r\n description: \"Distant Galaxy cost scaling starts later\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 0;\r\n return completions * 5},\r\n formatEffect: value => `${formatInt(value)} AG later`,\r\n },\r\n vReward:{\r\n description: `⌬ Obscure Galaxy scaling starts later ⌬`,\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 0;\r\n return 500 * completions * ((Ra.pets.v.level - 25) / 75)},\r\n formatEffect: value => `${formatInt(value)} AG later`,\r\n }\r\n },\r\n {\r\n id: 6,\r\n // The asterisk, if present, will get replaced with strings generated from the scramble text\r\n description: () => {\r\n if (Enslaved.isRunning) return \"you *. The cost of upgrading your max Replicanti Galaxies is massively reduced.\";\r\n return \"you cannot gain Antimatter Galaxies normally. The cost of upgrading your max Replicanti\" +\r\n \" Galaxies is massively reduced.\";\r\n },\r\n goal: DC.E850,\r\n pelleGoal: DC.E1500,\r\n goalIncrease: DC.E250,\r\n reward: {\r\n description: \"Further reduce Antimatter Dimension cost multiplier growth\",\r\n effect: completions => completions * 0.2,\r\n formatEffect: value => {\r\n if(MendingUpgrade(8).isBought) return `${formatX(1.5, 2, 2)} (Mending Upgrade 8)`\r\n const total = Math.round(Player.dimensionMultDecrease + Effects.sum(EternityChallenge(6).reward)) - value;\r\n return `-${format(value, 2, 1)} (${formatX(total, 2, 1)} total)`;\r\n }\r\n },\r\n vReward:{\r\n description: `⌬ Continuum multiplier ⌬`,\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 + (0.01 * completions) * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600)},\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n scrambleText: [\"cannot gain Antimatter Galaxies normally\", \"c㏰'퐚 gai鸭 Anti꟢at랜erﻪﶓa⁍axie㮾 䂇orma㦂l\"],\r\n },\r\n {\r\n id: 7,\r\n description:\r\n \"1st Time Dimensions produce 8th Infinity Dimensions and 1st Infinity Dimensions produce \" +\r\n \"7th Antimatter Dimensions. Tickspeed also directly applies to Infinity and Time Dimensions.\",\r\n goal: DC.E2000,\r\n pelleGoal: DC.E2700,\r\n goalIncrease: DC.E530,\r\n effect: () => TimeDimension(1).productionPerSecond,\r\n reward: {\r\n description: \"1st Time Dimension produces 8th Infinity Dimensions\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(0);\r\n return TimeDimension(1).productionPerSecond.pow(completions * 0.2).minus(1).clampMin(0)},\r\n formatEffect: value => `${format(value, 2, 1)} per second`,\r\n },\r\n vReward:{\r\n description: \"⌬ 1st Dark Matter Dimension produces 8th Time dimension ⌬\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(0);\r\n return DarkMatterDimension(1).powerDM.times(1000).div(DarkMatterDimension(1).interval).pow(0.2 * completions).minus(1).clampMin(0).mul((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600)},\r\n formatEffect: value => `${format(value, 2, 2)} per second`,\r\n }\r\n },\r\n {\r\n id: 8,\r\n description: () => `you can only upgrade Infinity Dimensions ${formatInt(50)} times and Replicanti\r\n upgrades ${formatInt(40)} times. Infinity Dimension and Replicanti upgrade autobuyers are disabled.`,\r\n goal: DC.E1300,\r\n pelleGoal: DC.E2800,\r\n goalIncrease: DC.E900,\r\n reward: {\r\n description: \"Infinity Power strengthens Replicanti Galaxies\",\r\n effect: completions => {\r\n if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 0;\r\n const infinityPower = Math.log10(Currency.infinityPower.value.pLog10() + 1);\r\n return Math.max(0, Math.pow(infinityPower, 0.03 * completions) - 1);\r\n },\r\n formatEffect: value => formatPercents(value, 2)\r\n },\r\n vReward: {\r\n description: \"⌬ Time Shards strengthen all Galaxy types ⌬\",\r\n effect: completions => {\r\n if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 0;\r\n const timeShards = Math.log10(Currency.timeShards.value.pLog10() + 1);\r\n return Math.max(0, (Math.pow(timeShards, 0.03 * completions) - 1) * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600) / 10);\r\n },\r\n formatEffect: value => formatPercents(value, 2)\r\n }\r\n },\r\n {\r\n id: 9,\r\n description: () => `you cannot buy Tickspeed upgrades. Infinity Power instead multiplies\r\n Time Dimensions with greatly reduced effect. ${specialInfinityGlyphDisabledEffectText()}`,\r\n goal: DC.E1750,\r\n pelleGoal: DC.E2900,\r\n goalIncrease: DC.E250,\r\n reward: {\r\n description: \"Infinity Dimension multiplier based on Time Shards\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(1);\r\n return Currency.timeShards.value.pow(completions * 0.1).clampMin(1)},\r\n cap: DC.E400,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n vReward:{\r\n description: \"⌬ Infinity Dimension multiplier based on Tickspeed upgrade counts ⌬\",\r\n effect: () => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(1);\r\n return Decimal.pow(10, new Decimal(Tickspeed.totalUpgrades).times((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600).div(10)).clampMin(1)},\r\n formatEffect: value => formatX(value, 3, 3)\r\n }\r\n },\r\n {\r\n id: 10,\r\n description: () => {\r\n let description = `Time Dimensions and Infinity Dimensions are disabled. You gain an immense boost from\r\n Infinities to Antimatter Dimensions (Infinities${formatPow(950)}). ${specialInfinityGlyphDisabledEffectText()}`;\r\n EternityChallenge(10).applyEffect(v => description += ` Currently: ${formatX(v, 2, 1)}`);\r\n return description;\r\n },\r\n goal: DC.E3000,\r\n pelleGoal: DC.E3200,\r\n goalIncrease: DC.E300,\r\n effect: () => Decimal.pow(Currency.infinitiesTotal.value, 950).clampMin(1).pow(TimeStudy(31).effectOrDefault(1)),\r\n reward: {\r\n description: \"Time Dimension multiplier based on Infinities\",\r\n effect: completions => {\r\n if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(1);\r\n const mult = Currency.infinitiesTotal.value.times(2.783e-6).pow(0.4 + 0.1 * completions).clampMin(1);\r\n return mult.powEffectOf(TimeStudy(31));\r\n },\r\n formatEffect: value => {\r\n if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return \"×1.0\";\r\n // Since TS31 is already accounted for in the effect prop, we need to \"undo\" it to display the base value here\r\n const mult = formatX(value, 2, 1);\r\n return TimeStudy(31).canBeApplied\r\n ? `${formatX(value.pow(1 / TimeStudy(31).effectValue), 2, 1)} (After TS31: ${mult})`\r\n : mult;\r\n }\r\n },\r\n vReward:{\r\n description: \"⌬ Time Dimension power based on Infinities ⌬\",\r\n effect: () => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 + (Decimal.log10(Currency.infinities.value.add(1)) / 500000 * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600))},\r\n formatEffect: value => `${formatPow(value, 3, 3)}`\r\n }\r\n },\r\n {\r\n id: 11,\r\n description: () => `all Dimension multipliers and powers are disabled except for the multipliers from\r\n Infinity Power and Dimension Boosts (to Antimatter Dimensions). ${specialInfinityGlyphDisabledEffectText()}`,\r\n goal: DC.E450,\r\n pelleGoal: DC.E11200,\r\n goalIncrease: DC.E200,\r\n pelleGoalIncrease: DC.E1400,\r\n reward: {\r\n description: \"Further reduce Tickspeed cost multiplier growth\",\r\n effect: completions => completions * 0.07,\r\n formatEffect: value => {\r\n if(MendingUpgrade(8).isBought) return `${formatX(1.2, 2, 2)} (Mending Upgrade 8)`\r\n const total = Math.round(Player.tickSpeedMultDecrease + Effects.sum(EternityChallenge(11).reward)) - value;\r\n return `-${format(value, 2, 2)} (${formatX(total, 2, 2)} total)`;\r\n }\r\n },\r\n vReward:{\r\n description: \"⌬ Reduce free Tickspeed upgrade scaling ⌬\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 - (0.0005 * completions) * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600)},\r\n formatEffect: value => `${formatPow(value, 3, 3)}`\r\n }\r\n },\r\n {\r\n id: 12,\r\n description: () => (PlayerProgress.realityUnlocked()\r\n ? `the game runs ×${formatInt(1000)} slower; all other game speed effects are disabled. The goal must be reached\r\n within a certain amount of time or you will fail the Challenge. ${specialInfinityGlyphDisabledEffectText()}`\r\n : `the game runs ×${formatInt(1000)} slower. The goal must be reached\r\n within a certain amount of time or you will fail the Challenge.`),\r\n goal: DC.E110000,\r\n pelleGoal: DC.E208000,\r\n goalIncrease: DC.E12000,\r\n restriction: completions => Math.max(10 - 2 * completions, 1) / 10,\r\n checkRestriction: restriction => Time.thisEternity.totalSeconds.lt(restriction),\r\n formatRestriction: restriction => `in ${quantify(\"in-game second\", restriction, 0, 1)} or less.`,\r\n failedRestriction: \"(Too slow for more)\",\r\n reward: {\r\n description: \"Infinity Dimension cost multipliers are reduced\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 - completions * 0.008},\r\n formatEffect: value => `x${formatPow(value, 3, 3)}`\r\n },\r\n vReward:{\r\n description: \"⌬ Increase Infinity Dimension caps ⌬\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return Math.max(1, 1/(1-(0.008 * completions) * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600)))},\r\n formatEffect: value => `${formatPow(value, 3, 3)}`\r\n }\r\n }\r\n];\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const infinityChallenges = [\r\n {\r\n id: 1,\r\n description: `all Normal Challenge restrictions are active at once, with the exception of the\r\n Tickspeed (C9) and Big Crunch (C12) Challenges.`,\r\n goal: DC.E650,\r\n isQuickResettable: true,\r\n reward: {\r\n description: () => `${formatX(1.3, 1, 1)} on all Infinity Dimensions for each Infinity Challenge completed`,\r\n effect: () => {\r\n let x = BreakInfinityUpgrade.slowestChallengeMult.chargedEffect.isEffectActive ? Ra.pets.teresa.level * 1e9 : 1;\r\n return Decimal.pow(Math.pow(1.3, InfinityChallenges.completed.length), x);\r\n },\r\n formatEffect: value => formatX(value, 3, 3)\r\n },\r\n unlockAM: DC.E2000,\r\n },\r\n {\r\n id: 2,\r\n description: () => `Dimensional Sacrifice happens automatically every ${formatInt(400)} milliseconds once you have\r\n an 8th Antimatter Dimension.`,\r\n goal: DC.E10500,\r\n isQuickResettable: false,\r\n reward: {\r\n description: () => `Dimensional Sacrifice autobuyer and stronger Dimensional Sacrifice\r\n ${Sacrifice.getSacrificeDescription({ \"InfinityChallenge2isCompleted\": false })} ➜\r\n ${Sacrifice.getSacrificeDescription({ \"InfinityChallenge2isCompleted\": true })}`,\r\n },\r\n unlockAM: DC.E11000,\r\n },\r\n {\r\n id: 3,\r\n description: () =>\r\n `Tickspeed upgrades are always ${formatX(1)}. For every Tickspeed upgrade purchase, you instead get a static\r\n multiplier on all Antimatter Dimensions which increases based on Antimatter Galaxies.`,\r\n goal: DC.E5000,\r\n isQuickResettable: false,\r\n effect: () => Decimal.pow(1.05 + (player.galaxies * 0.005), player.totalTickBought),\r\n formatEffect: value => formatX(value, 2, 2),\r\n reward: {\r\n description: `Antimatter Dimension multiplier based on Antimatter Galaxies and Tickspeed purchases`,\r\n effect: () => (Laitela.continuumActive\r\n ? Decimal.pow(1.05 + (player.galaxies * 0.005), Tickspeed.continuumValue)\r\n : Decimal.pow(1.05 + (player.galaxies * 0.005), player.totalTickBought)),\r\n formatEffect: value => formatX(value, 2, 2),\r\n },\r\n unlockAM: DC.E12000,\r\n },\r\n {\r\n id: 4,\r\n description: () =>\r\n `only the latest bought Antimatter Dimension's production is normal. All other Antimatter Dimensions\r\n produce less (${formatPow(0.25, 2, 2)}).`,\r\n goal: DC.E13000,\r\n isQuickResettable: true,\r\n effect: 0.25,\r\n reward: {\r\n description: () => `All Antimatter Dimension multipliers become multiplier${formatPow(1.05, 2, 2)}`,\r\n effect: 1.05\r\n },\r\n unlockAM: DC.E14000,\r\n },\r\n {\r\n id: 5,\r\n description:\r\n `buying Antimatter Dimensions 1-4 causes all cheaper AD costs to increase.\r\n Buying Antimatter Dimensions 5-8 causes all more expensive AD costs to increase.`,\r\n goal: DC.E16500,\r\n isQuickResettable: true,\r\n reward: {\r\n description: () =>\r\n `All Galaxies are ${formatPercents(0.1)} stronger and reduce the requirements for them\r\n and Dimension Boosts by ${formatInt(1)}`,\r\n effect: 1.1\r\n },\r\n unlockAM: DC.E18000,\r\n },\r\n {\r\n id: 6,\r\n description: () =>\r\n `exponentially rising matter divides the multiplier on all of your Antimatter Dimensions\r\n once you have at least ${formatInt(1)} 2nd Antimatter Dimension.`,\r\n goal: DC.D2E22222,\r\n isQuickResettable: true,\r\n effect: () => Currency.matter.value.clampMin(1),\r\n formatEffect: value => `/${format(value, 1, 2)}`,\r\n reward: {\r\n description: \"Infinity Dimension multiplier based on tickspeed\",\r\n effect: () => Tickspeed.perSecond.pow(0.0005),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n unlockAM: DC.E22500,\r\n },\r\n {\r\n id: 7,\r\n description: () => {\r\n // Copied from DimBoost.power; this is the base amount before any multipliers. Post-eternity this isn't\r\n // necessarily 2.5x by the time the player sees this challenge; it's probably most accurate to say what it\r\n // currently is, and this phrasing avoids 10x ➜ 10x with the old description.\r\n const mult = Effects.max(\r\n 2,\r\n InfinityUpgrade.dimboostMult,\r\n InfinityChallenge(7).reward,\r\n TimeStudy(81)\r\n );\r\n return `you cannot buy Antimatter Galaxies. Base Dimension Boost multiplier is increased to a maximum\r\n of ${formatX(10)}. (Current base multiplier: ${formatX(mult, 2, 1)})`;\r\n },\r\n goal: DC.E10000,\r\n isQuickResettable: false,\r\n effect: 10,\r\n reward: {\r\n description: () => `Dimension Boost multiplier is increased to a minimum of ${formatX(4)}`,\r\n effect: 4\r\n },\r\n unlockAM: DC.E23000,\r\n },\r\n {\r\n id: 8,\r\n description: () =>\r\n `AD production rapidly and continually drops over time. Purchasing Antimatter Dimension or Tickspeed\r\n upgrades sets production back to ${formatPercents(1)} before it starts dropping again.`,\r\n goal: DC.E27000,\r\n isQuickResettable: true,\r\n effect: () => DC.D0_8446303389034288.pow(\r\n Math.max(0, player.records.thisInfinity.time.sub(player.records.thisInfinity.lastBuyTime).min(1e250).toNumber())),\r\n reward: {\r\n description:\r\n \"You get a multiplier to AD 2-7 based on 1st and 8th AD multipliers.\",\r\n effect: () => AntimatterDimension(1).multiplier.times(AntimatterDimension(8).multiplier).pow(0.02),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n unlockAM: DC.E28000,\r\n },\r\n];\r\n","import { DC } from \"../../constants\";\r\n\r\n// I tried to make it relatively simple to add more locks; the idea is that you give it a value here\r\n// and then it's all handled in the backend\r\n// If you need to lock a challenge, set lockedAt to a new Decimal variable reflective of a desired number of Infinities\r\n// They will always be unlocked post-eternity\r\n\r\nexport const normalChallenges = [\r\n {\r\n id: 1,\r\n legacyId: 1,\r\n isQuickResettable: false,\r\n description() {\r\n return PlayerProgress.eternityUnlocked()\r\n ? \"reach Infinity for the first time outside of a challenge.\"\r\n : \"reach Infinity for the first time.\";\r\n },\r\n name: \"1st Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 1st Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 2,\r\n legacyId: 2,\r\n isQuickResettable: false,\r\n description:\r\n () => \"buying Antimatter Dimensions or Tickspeed upgrades halts production of all Antimatter Dimensions. \" +\r\n `Production gradually returns to normal over ${formatInt(3)} minutes.`,\r\n name: \"2nd Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 2nd Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 3,\r\n legacyId: 3,\r\n isQuickResettable: false,\r\n description:\r\n `the 1st Antimatter Dimension is heavily weakened, but gets an uncapped exponentially increasing multiplier.\r\n This multiplier resets after Dimension Boosts and Antimatter Galaxies.`,\r\n name: \"3rd Antimatter Dimension\",\r\n reward: \"Upgradeable 3rd Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 4,\r\n legacyId: 8,\r\n isQuickResettable: false,\r\n description: \"buying an Antimatter Dimension automatically erases all lower tier Antimatter Dimensions, \" +\r\n \"like a sacrifice without the boost.\",\r\n name: \"4th Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 4th Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 5,\r\n legacyId: 6,\r\n isQuickResettable: false,\r\n description:\r\n () => `the Tickspeed purchase multiplier starts at ${formatX(1.080, 0, 3)} instead of ${formatX(1.1245, 0, 3)}.`,\r\n name: \"5th Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 5th Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 6,\r\n legacyId: 10,\r\n isQuickResettable: false,\r\n description: () => `upgrading each Antimatter Dimension costs the Antimatter Dimension ${formatInt(2)} tiers ` +\r\n \"below it instead of antimatter. Antimatter Dimension prices are modified.\",\r\n name: \"6th Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 6th Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 7,\r\n legacyId: 9,\r\n isQuickResettable: false,\r\n description: () =>\r\n `the multiplier from buying ${formatInt(10)} Antimatter Dimensions is reduced to ${formatX(1)}. This increases by\r\n ${formatX(0.2, 1, 1)} per Dimension Boost, to a maximum of ${formatX(2)}, and is unaffected by any upgrades.`,\r\n name: \"7th Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 7th Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 8,\r\n legacyId: 11,\r\n isQuickResettable: false,\r\n description: `Dimension Boosts provide no multiplier and Antimatter Galaxies cannot be bought. Dimensional\r\n Sacrifice resets antimatter and all Antimatter Dimensions, but also gives a significantly stronger multiplier.`,\r\n name: \"8th Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 8th Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 9,\r\n legacyId: 5,\r\n isQuickResettable: true,\r\n description: () => `whenever you buy Tickspeed upgrades or ${formatInt(10)} of an Antimatter Dimension, ` +\r\n \"everything else of equal cost will increase to its next cost step.\",\r\n name: \"Tickspeed Autobuyer\",\r\n reward: \"Upgradeable Tickspeed Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 10,\r\n legacyId: 4,\r\n isQuickResettable: false,\r\n description: () => `there are only ${formatInt(6)} Antimatter Dimensions. Dimension Boost ` +\r\n \"and Antimatter Galaxy costs are modified.\",\r\n name: \"Automated Dimension Boosts\",\r\n reward: \"Dimension Boosts Autobuyer\",\r\n lockedAt: DC.D16,\r\n },\r\n {\r\n id: 11,\r\n legacyId: 12,\r\n isQuickResettable: true,\r\n description: () => `there is normal matter which rises once you have at least ${formatInt(1)} 2nd Antimatter ` +\r\n \"Dimension. If it exceeds your antimatter, it will Dimension Boost without giving the bonus.\",\r\n name: \"Automated Antimatter Galaxies\",\r\n reward: \"Antimatter Galaxies Autobuyer\",\r\n lockedAt: DC.D16,\r\n },\r\n {\r\n id: 12,\r\n legacyId: 7,\r\n isQuickResettable: false,\r\n description: () => `each Antimatter Dimension produces the Dimension ${formatInt(2)} tiers below it\r\n instead of ${formatInt(1)}. Both 1st and 2nd Dimensions produce antimatter.\r\n The 2nd, 4th, and 6th Dimensions are made stronger to compensate.`,\r\n name: \"Automated Big Crunches\",\r\n reward: \"Big Crunches Autobuyer\",\r\n lockedAt: DC.D16,\r\n }\r\n];\r\n","import { CorruptionData } from \"../../corruption\"\r\nimport { corruptionChallengeScoreCalculation } from \"../mending/corruption\"\r\n\r\nexport const corruptionChallenge = {\r\n active: () => player.mending.corruption.countWhere(u => u > 0),\r\n /*\r\n bonus mult takes the nth nth simplical polytopic number.\r\n In simple terms:\r\n 0 would be the first row (Basically an array of 1's, but we take 0 (special case))\r\n 1 would be the second row (triangular numbers: 1, 3, 6, 10 ,15, 21 - we take 3 (second num))\r\n 2 would be the third row (tetrahedral numbers: 1, 4, 10, 20, 35 - we take 10 (3rd num))\r\n 3 would be the fourth row (pentachoron numbers: 1, 5, 15, 35, 70 - we take 35 (4th num))\r\n So on and so forth. List of them can be found https://oeis.org/wiki/Simplicial_polytopic_numbers\r\n */\r\n bonusMult: () => [0, 1, 3, 10, 35, 126, 462, 1716, 6435, 24310, 92378][Math.floor(Math.min(player.mending.corruption.countWhere(u => u > 0), player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0)/player.mending.corruption.countWhere(u => u > 0) - 1))],\r\n incBonusText: () => {\r\n return \"In order to increase your bonus multiplier, you should \" + (player.mending.corruption.countWhere(u => u > 0) < player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0)/player.mending.corruption.countWhere(u => u > 0) - 1 ? \"increase the number of Hostilities active.\" : \"increase the average level of your Hostilities.\"\r\n )\r\n },\r\n desc: () => {\r\n return player.mending.corruption.countWhere(u => u > 0) == 0 ? \"You have not selected any Hostilities, you cannot enter this challenge\" : \"Reach e9e15 antimatter and Mend without Galaxy Generator while in a more difficult Reality, in order to gain Hostile Fragments. All upgrades will be reset if you complete a reality with more Hostile Fragments then you are carrying.\"\r\n },\r\n reward: () => {\r\n return /*CorruptionData.recordCorruptedFragments > (Math.log2(CorruptionData.calcScore())) ? (`If you completed this challenge, you would not gain any Hostile Fragments, because ${player.mending.corruption.countWhere(u => u > 0) == 0 ? \"you have no enabled Hostilities.\" : \"you have more Hostile Fragments than you would gain.\"}`) :*/ `If you completed this challenge, you would gain ${quantifyInt(\"Hostile Fragment\", (Math.ceil(Math.log2(CorruptionData.calcScore())) - player.mending.corruptedFragments))}. (Without HU20 bonus)`\r\n },\r\n unlocked: () => { return Ra.pets.pelle.level >= 75}\r\n}","import { eternityChallenges } from \"./eternity-challenges\";\r\nimport { infinityChallenges } from \"./infinity-challenges\";\r\nimport { normalChallenges } from \"./normal-challenges\";\r\nimport { corruptionChallenge } from \"./corruption-challenge\";\r\n\r\nexport const challenges = {\r\n normal: normalChallenges,\r\n infinity: infinityChallenges,\r\n eternity: eternityChallenges,\r\n corruption: corruptionChallenge\r\n};\r\n","export const changelog = [\r\n /**\r\n * @template\r\n * {\r\n * @property {Array: Number} date Date of the release of the update, stored in order of year-month-date.\r\n * @property {String} name Name of the update entry. Optional.\r\n * @property {Number} id Unique ID for each entry (generated in-game, not explicitly stated)\r\n * @property {function: @return String} info Text body of information for the entry.\r\n * }\r\n */\r\n {\r\n date: [\"20??\", \"??\", \"??\"],\r\n name: \"idk yet\",\r\n info: \r\n `\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Implemented Mending Upgrades 6, 20, and all rebuyables
  • \r\n
  • Implemented 20 Mend Milestone
  • \r\n
  • Implemented Warp Reality
  • \r\n
  • Added Mending content to the catchup modal
  • \r\n
  • Endgame: 20 Mend Milestone and about ee?? antimatter
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed Pelle Time Dilation Rebuyables' display when their cap is reached
  • \r\n
  • Made Glyph Sacrifice mode defalut to \"Always Sacrifice\" on Mend
  • \r\n
  • Glyph Filter Mode is set to \"Lowest Total Glyph Sacrifice\" on Mend
  • \r\n
  • Made all pre-Pelle achievements visible again on a new game
  • \r\n
  • Fixed progress stage not being updated on Mend
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • When importing a Vanilla save, rebuyable Mending Upgrade costs and effects don't get initalized properly, saving and refreshing should fix it
  • \r\n
  • The amount of Glyph Slots sometimes doesn't update properly when 20MM buys them, performing a Reality Reset while not on the Glyph tab should fix it
  • \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
  • There are console errors when viewing the TS tree when unlocking a Triad Study (this doesn't effect gameplay)
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 31],\r\n name: \"The Glyph Nerf and Game Time fix\",\r\n info: \r\n `Apparently people were getting lv. 200k Glyphs, let's change that\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Added a 3rd Glyph instability threshold (good luck getting your level 100k+ Glyphs now >:))
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Hardcapped playtime to 1e308 (this should fix some freezes caused by Infinite time played)
  • \r\n
  • Fixed display bugs on EC6 and EC11's Effects and the Dimension and Tickspeed scaling Break Infinity Upgrades
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 30],\r\n name: \"Doom Glyph Slot Hotfix\",\r\n info: \r\n `More MU4 remnants we missed\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed Glyph swapping in Doomed Reality
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 29],\r\n name: \"the MU4 effect Remnant fix and other crap\",\r\n info: \r\n `Accidently left MU4's old effect\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Added a new loading splash screen (thanks Kruta).
  • \r\n
  • Added fancy names to the Mendning Upgrades (thanks Kruta)
  • \r\n
  • When completing a tier of Effarig's Reality, it completes all tiers before it. (i.e. Completing Effarig's Eternity also completes their Infinity)
  • \r\n
  • Added a Mending entry in the \"How to Play\" modal
  • \r\n
  • Added common Mending Abbrevations in the \"Common Abbreviations\" section in \"How to Play\"
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed EC6 and 11's reward displaying incorrectly when MU8 is purchased
  • \r\n
  • Fixed MU8 scaling not applying correctly
  • \r\n
  • Fixed having 5 glyph slots in Pelle when MU4 is purchased
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 28],\r\n name: \"Even More Upgrades\",\r\n info: \r\n `Hopefully 2nd to last Mending Upgrade Update\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Added Mending Upgrades 4, 8, and 10
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • I forgor
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 27],\r\n name: \"EMERGENCY HOTFIX 5\",\r\n info: \r\n `Type mismatch fixed\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Made Eternity Gain a Decimal instead of a Number
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 27],\r\n name: \"Upgrade Explosion\",\r\n info: \r\n `Finally an update that adds more than 1 Upgrade\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Implemented Mending Upgrades 12, 13, 14, 17 and 18
  • \r\n
  • Added a Mending Milestone for 4 Mends (effect temporary until MU19 is implemented)
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed some Glyphs not being deleted on Mend
  • \r\n
  • Improved Mending Upgrade readability
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 25],\r\n name: \"EMERGENCY HOTFIX 4\",\r\n info: \r\n `typos strike again\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed not being able to swap Glyphs in Pelle
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 25],\r\n name: \"the Reality Automation\",\r\n info: \r\n `Added some autobuyers to some Reality Mechanics.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Added Milestone for 8 Mends
  • \r\n
  • Implemented Mending Upgrade 7
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • none that I can remember
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 24],\r\n name: \"EMERGENCY HOTFIX 3\",\r\n info: \r\n `More Hexa fixes, and some Wellington fixes\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: 7 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • made the Mending button actually work after 10 Mend Milestone
  • \r\n
  • the Mending Upgrade tab no longer causes a duplicate key error
  • \r\n
  • the Pelle Dilation autobuyers no longer console spam
  • \r\n
  • Importing Glyph sets is no longer broken
  • \r\n
  • TS192 is now visible in Nameless again (needs further testing)
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • None...for now
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 24],\r\n name: \"the 'Hey, Royal finally did something'\",\r\n info: \r\n `More Hexa fixes, and new content by yours truly\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Reduced Mending Upgrade prices (say \"thanks Amity\"), and refunded the difference
  • \r\n
  • Implemented Mending Upgrade 15
  • \r\n
  • Endgame: 7 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • V should no longer hardlock the game
  • \r\n
  • Importing Glyph sets is no longer broken
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought (by Wellington, not Hexa)
  • \r\n
  • ts192 is now visible in Nameless again
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • None, for a change
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 23],\r\n name: \"Final V patch\",\r\n info: \r\n `Hexa hopefully has patched V for good, undone previous changes to V.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • V no longer hardlocks in a loop\r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • Time Study 192 is entirely missing in The Nameless Ones' Reality (rather than unpurchaseable), causing console errors.
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
  • Dilation autobuyers cause console errors, however they function normally.
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 23],\r\n name: \"No new content #7\",\r\n info: \r\n `Hexa hopefully fixed some things he broke last update again, kind of.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • For the time being, requiem only requires V hard to be shown and 4-0 max glyphs equipped.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • V again unequips all glyphs, however you now have the appropriate numbers of glyph slots.\r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way, however ts192 is entirely missing.
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 23],\r\n name: \"No new content #6\",\r\n info: \r\n `Hexa hopefully fixed some things he broke last update. No new content this update, just bug fixes, and backend stuff.`\r\n },\r\n {\r\n date: [2023, 8, 22],\r\n name: \"HEXA HOTFIX UPDATE 2, ELECTRIC BOOGALOO\",\r\n info: \r\n `Hexa hopefully fixed some stuff. No new content this update, just bug fixes. (I think this was 5 hours after the last one)\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • 7 Mend Milestone does not work in V anymore (temporary until we find a fix)
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • 3 Mend Milestone actually states it gives Vacuum Acceleration (this was done by Royal, Hexa did the rest)
  • \r\n
  • Fixed some spelling mistakes.
  • \r\n
  • Hopefully fixed Glyph Presets allowing duplicate special glyphs before 7 Mend Milestone
  • \r\n
  • Added an icon for the Mending tab in the Aero theme
  • \r\n
  • Multipliers from Mending Milestone 1 are now present in the Multiplier Breakdown
  • \r\n
  • Fixed the Credits Modal in \"About the Game\"
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (We (Royal and Hexa) didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way, however TS192 is entirely missing.
  • \r\n
  • Glyph presets might still be broken (or more broken).
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 22],\r\n name: \"EMERGENCY HOTFIX 2 and minor additions\",\r\n info: \r\n `Hexa broke some things internally (we (me and Hexa) couldn't test them until now)\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • 3 Mend Milestone now also gives iU upgrade \"Vaccum Acceleration\"
  • \r\n
  • Mending Upgrade 5 now also gives Reality Machine generation and sets Remnants to max
  • \r\n
  • You can now hold shift to display Mending Upgrade names (no, I don't plan to be creative like the Reality and Imaginary ones)
  • \r\n
  • Endgame: 7 Mend Milestone, all non-stripped Mending Upgrades.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed \"Multiversal Remains and Mends becoming a number instead of a Decimal\" fix preventing mends.
  • \r\n
  • Fixed 10 V-Achievement Milestone text updating with the wrong Mending Upgrade
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
  • Multipliers fromthe 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 22],\r\n name: \"the 'no longer a one man job'\",\r\n info: \r\n `This patch would not be possible without Hexa, shoutouts to him. Note: this changelog entry was written by Royal after the fact, so everything changed may not all be reflected here\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • 2 Mend Milestone Dilation Autobuyers now properly work
  • \r\n
  • Endgame: 7 Mend Milestone, all non-stripped Mending Upgrades.
  • \r\n
\r\n Bugfixes (all by Hexa):\r\n
\r\n
    \r\n
  • Fixed Multiversal Remains and Mends becoming a number instead of a Decimal
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
  • Multipliers from the 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 20],\r\n name: \"EMERGENCY HOTFIX 1\",\r\n info: \r\n `out of like Infinite. I was an idiot and tried to do a lazy-man's fix, but it accidently made Mending Upgrade 3 obsolete.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: 7 Mend Milestone, all non-stripped Mending Upgrades.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed 3 Mend Milestone giving Instant ECs (forgot to edit a vue file). If this affects you currently, enjoy the free ECs this Mend
  • \r\n
  • Fixed the update notification using my immature username I made when I was 14 (even though it's still in the address bar)
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
  • Multipliers fromthe 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 20],\r\n name: \"Bugfixes, and finally more upgrades\",\r\n info: \r\n `Even more bugfixes that fix things I overlooked. Note: Since school is starting back up for me. this might be the last patch for a while.\r\n Due to this, the new upgrades weren't tested as much\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Added Black Hole and Rebuyable Reality Upgrade Autobuyers to 3 Mend Milestone
  • \r\n
  • Implemented Mending Upgrades 5 and 9
  • \r\n
  • Endgame: 7 Mend Milestone, all non-stripped Mending Upgrades.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed the Inverted BH appearing without Hard V being Unlocked
  • \r\n
  • Fixed being able to enter Pelle immediately after Mend
  • \r\n
  • Fixed some 1 Mend Milestone multipliers not working in Pelle
  • \r\n
  • Made all tabs unhidden on Mend
  • \r\n
  • Added \"break\" statements to some switch statements to avoid uninteneded behavior
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
  • Multipliers fromthe 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 19],\r\n name: \"New Content!? no just more bugfixes\",\r\n info: \r\n `Even more bugfixes that fix things I overlooked. Note: Since school is starting back up for me. this might be the last patch for a while.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Reality Upgrades that required 4 Glyphs now require at LEAST 4 Glyphs
  • \r\n
  • Added x1,000 Replicanti Speed to 1 Mend Milestone
  • \r\n
  • Added more Mending Upgrades, but they're not implemented (these might change)
  • \r\n
  • Changed Dark Matter Dimension Imaginary Upgrades to require the Previous Dark Matter Dimension
  • \r\n
  • Endgame: still 7 Mends, Mending Upgrades 2 and 3 (the non-stripped ones).
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Gave \"START\" perk after every mend to get around the hardcoded first Reality glyph reward
  • \r\n
  • Likewise, gave a power Glyph after Mending Upgrade 2 and every Mend after to simulate it
  • \r\n
  • Changed the Remnant gain formula so the x1.1 from 1 Mend Mlestone applies properly
  • \r\n
  • Made the Glyph Selection conformation default to ON on Mend
  • \r\n
  • Improved Mending Upgrade Readability in some themes
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • The Invert BH button still shows up when Hard V is locked
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
  • Multipliers fromthe 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 18],\r\n name: \"The second bugifx\",\r\n info: \r\n `More bugfixes that fix things I overlooked.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: still 7 Mends and both Mending Upgrades.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Made \"Auto Purge on Reality\" glyph setting get set to false on Mend, because it was preventing Reality Resets.
  • \r\n
  • Changed V's tab visibility post Mend, because they're usually unlocked before Nameless completion.
  • \r\n
  • Fixed Alchemy not being reset on Mend (I think Pelle usually clears this, but futureproofing for Warp Reality)
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • The Invert BH button still shows up when Hard V is locked
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
`\r\n \r\n },\r\n {\r\n date: [2023, 8, 17],\r\n name: \"The first bugifx\",\r\n info: \r\n `No new Content this update, just some bugfixes.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: still 7 Mends and both Mending Upgrades.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed Parity of Singularity's timer after the first Mend.
  • \r\n
  • Fixed the Mending button being too wide in Modern UI.
  • \r\n
  • Fixed readibility of unbought Mending Upgrades in some themes.
  • \r\n
  • Fixed readibility of unachieved Mending Milestones in some themes.
  • \r\n
  • Fixed save importing disabiling the ability to do speedruns.
  • \r\n
  • Fixed pre-Reality achievements reseting on Reality (post Mend).
  • \r\n
  • Fixed Mending tab being hidden post-Mend on some imported saves.
  • \r\n
  • probably some other stuff I forgot.
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • The Invert BH button still shows up when Hard V is locked
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
`\r\n \r\n },\r\n {\r\n date: [2023, 8, 16],\r\n name: \"The 'get a very primitive alpha out before college starts back up'\",\r\n info: \r\n `In the words of YouTube commenters, \"first\". Yes, you're looking at the first mod with a new prestige layer, and second with new content. \r\n Unfortunately since school is starting back up, further updates will be slow to roll out (unless it's a major game-breaking bug).\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Added the Mending Prestige Layer.
  • \r\n
  • Added Mending Upgrades and Milestones.
  • \r\n
\r\n Notes:\r\n
\r\n
    \r\n
  • Speedrun is available from begining of the game (but no splits for Mending content).
  • \r\n
  • Nothing pre-Mend is changed, so you can grab a save from Buck's savebank: https://buck4437.github.io/save-bank/.
  • \r\n
  • Endgame: 7 Mends and both Mending Upgrades.
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • Importing a save disables speedruns, be wary until I find a workaround.
  • \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • The Invert BH button still shows up when Hard V is locked
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
`\r\n \r\n }\r\n];\r\n\r\n\r\nfor (let i = 0; i < changelog.length; i++) {\r\n changelog[i].id = i;\r\n}\r\n","export const confirmationTypes = [\r\n {\r\n name: \"Dimension Boost\",\r\n option: \"dimensionBoost\",\r\n isUnlocked: () => PlayerProgress.infinityUnlocked() || player.galaxies > 0 || player.dimensionBoosts > 0,\r\n }, {\r\n name: \"Antimatter Galaxy\",\r\n option: \"antimatterGalaxy\",\r\n isUnlocked: () => PlayerProgress.infinityUnlocked() || player.galaxies > 0,\r\n }, {\r\n name: \"Sacrifice\",\r\n option: \"sacrifice\",\r\n isUnlocked: () => Sacrifice.isVisible,\r\n }, {\r\n name: \"Big Crunch\",\r\n option: \"bigCrunch\",\r\n isUnlocked: () => player.break || PlayerProgress.eternityUnlocked(),\r\n }, {\r\n name: \"Challenges\",\r\n option: \"challenges\",\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n }, {\r\n name: \"Exit Challenges\",\r\n option: \"exitChallenge\",\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n }, {\r\n name: \"Replicanti Galaxy\",\r\n option: \"replicantiGalaxy\",\r\n isUnlocked: () => PlayerProgress.eternityUnlocked() || player.replicanti.unl,\r\n }, {\r\n name: \"Eternity\",\r\n option: \"eternity\",\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n }, {\r\n name: \"Dilation\",\r\n option: \"dilation\",\r\n isUnlocked: () => PlayerProgress.realityUnlocked() || !Currency.tachyonParticles.eq(0),\r\n }, {\r\n name: \"Reset Reality\",\r\n option: \"resetReality\",\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"Glyph Replace\",\r\n option: \"glyphReplace\",\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"Glyph Sacrifice\",\r\n option: \"glyphSacrifice\",\r\n isUnlocked: () => GlyphSacrificeHandler.canSacrifice,\r\n }, {\r\n name: \"Glyph Purge\",\r\n option: \"autoClean\",\r\n isUnlocked: () => GlyphSacrificeHandler.canSacrifice,\r\n }, {\r\n name: \"Sacrifice All Glyphs\",\r\n option: \"sacrificeAll\",\r\n isUnlocked: () => GlyphSacrificeHandler.canSacrifice,\r\n }, {\r\n name: \"Glyph Selection\",\r\n option: \"glyphSelection\",\r\n isUnlocked: () => Autobuyer.reality.isUnlocked,\r\n }, {\r\n name: \"Glyph Undo\",\r\n option: \"glyphUndo\",\r\n isUnlocked: () => TeresaUnlocks.undo.canBeApplied,\r\n }, {\r\n name: \"Switch Automator Editor\",\r\n option: \"switchAutomatorMode\",\r\n isUnlocked: () => Player.automatorUnlocked,\r\n }, {\r\n name: \"Delete Glyph Preset\",\r\n option: \"deleteGlyphSetSave\",\r\n isUnlocked: () => EffarigUnlock.setSaves.isUnlocked,\r\n }, {\r\n name: \"Glyph Refine\",\r\n option: \"glyphRefine\",\r\n isUnlocked: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied,\r\n }, {\r\n name: \"Armageddon\",\r\n option: \"armageddon\",\r\n isUnlocked: () => Pelle.isDoomed,\r\n }, {\r\n name: \"Respec Shop Purchases\",\r\n option: \"respecIAP\",\r\n isUnlocked: () => true\r\n }, {\r\n name: \"Mending\",\r\n option: \"mending\",\r\n isUnlocked: () => PlayerProgress.mendingUnlocked()\r\n }\r\n];\r\n","export const credits = {\r\n // Must be placed in the order it is desired they appear in the credits\r\n roles: {\r\n 1: \"[Vanilla] Creator\",\r\n 2: \"[Vanilla] Technical Architect\",\r\n 3: \"[Vanilla] Lead Developer\",\r\n 4: \"[Vanilla] Android Developer\",\r\n 5: \"[Vanilla] Steam Developer\",\r\n 6: \"[Vanilla] Library Developer\",\r\n 7: \"[Vanilla] Developer\",\r\n 8: \"[Vanilla] Lead Design Consultant\",\r\n 9: \"[Vanilla] Design Consultant\",\r\n 10: \"[Vanilla] Modal Maker, Lady Taker, Pie Baker, Tutorial Creater\",\r\n 11: \"[Vanilla] Lurker Tester\",\r\n 12: \"[Vanilla] Web Tester\",\r\n 13: \"[Vanilla] Android Tester\",\r\n 14: \"Redemption Developer\",\r\n 15: \"[Redemption] Development Assistant\",\r\n 16: \"[Redemption] Balancing Assistant\",\r\n 17: \"[Redemption] Artist\",\r\n 18: \"[Redemption] Testers\"\r\n },\r\n\r\n // Each person must have a name and at least one role (the index of the desired role in roles). They can also have a\r\n // second name, which will appear in parentheses besides their first.\r\n people: [\r\n {\r\n name: \"Hevipelle\",\r\n name2: \"Ivar Kerajärvi\",\r\n roles: 1\r\n }, {\r\n name: \"Razenpok\",\r\n name2: \"Andrei Andreev\",\r\n roles: [2, 15]\r\n }, {\r\n name: \"garnet420\",\r\n roles: 3\r\n }, {\r\n name: \"Omsi\",\r\n roles: 3\r\n }, {\r\n name: \"SpectralFlame\",\r\n name2: \"Christopher Yip\",\r\n roles: [3, 15]\r\n }, {\r\n name: \"WaitingIdly\",\r\n roles: [3, 7, 9, 12, 13, 15]\r\n }, {\r\n name: \"kajfik\",\r\n name2: \"Jakub Kajfosz\",\r\n roles: 4\r\n }, {\r\n name: \"Makopaz\",\r\n name2: \"Zack Stein\",\r\n roles: 5\r\n }, {\r\n name: \"Patashu\",\r\n roles: [6, 7, 12]\r\n }, {\r\n name: \"Dan\",\r\n roles: [7, 12]\r\n }, {\r\n name: \"earth\",\r\n name2: \"Jace Royer\",\r\n roles: [7, 10, 12, 13, 15]\r\n }, {\r\n name: \"Hira\",\r\n roles: [7, 12, 13, 15]\r\n }, {\r\n name: \"IkerStream\",\r\n name2: \"Iker de Aguirre\",\r\n roles: [7, 12]\r\n }, {\r\n name: \"L4R5\",\r\n name2: \"Lars Wolf\",\r\n roles: [7, 12, 13]\r\n }, {\r\n name: \"Pichusuperlover\",\r\n roles: [7, 9, 12]\r\n }, {\r\n name: \"realrapidjazz\",\r\n roles: [7, 8]\r\n }, {\r\n name: \"Scarlet\",\r\n roles: [7, 12, 13]\r\n }, {\r\n name: \"slabdrill\",\r\n roles: 7\r\n }, {\r\n name: \"Acamaeda\",\r\n roles: [9, 12]\r\n }, {\r\n name: \"Dravitar\",\r\n name2: \"Alex Henderson\",\r\n roles: 11\r\n }, {\r\n name: \"Aesis\",\r\n roles: 12\r\n }, {\r\n name: \"AFYINEE\",\r\n name2: \"Gabriel HADDAG\",\r\n roles: 12\r\n }, {\r\n name: \"Alexitato\",\r\n roles: 12\r\n }, {\r\n name: \"Anno\",\r\n roles: 12\r\n }, {\r\n name: \"Archa\",\r\n name2: \"Myresa\",\r\n roles: [12, 13]\r\n }, {\r\n name: \"ArrowBounce\",\r\n name2: \"Timothy Su\",\r\n roles: 12\r\n }, {\r\n name: \"Birb\",\r\n name2: \"Kelsey Black\",\r\n roles: 12\r\n }, {\r\n name: \"Boo\",\r\n name2: \"Jean-Christophe Bourgault\",\r\n roles: 12\r\n }, {\r\n name: \"CaptainGalaxy\",\r\n name2: \"Ovidijus Točelis\",\r\n roles: 12\r\n }, {\r\n name: \"ChaoticHans\",\r\n roles: [12, 13]\r\n }, {\r\n name: \"cubic frog\",\r\n roles: 12\r\n }, {\r\n name: \"dankesehr\",\r\n roles: 12\r\n }, {\r\n name: \"Davixx\",\r\n name2: \"Davide Fedele\",\r\n roles: 12\r\n }, {\r\n name: \"Empireus\",\r\n roles: 12\r\n }, {\r\n name: \"GirixK\",\r\n name2: \"Nikola Jelinčić\",\r\n roles: [12, 13]\r\n }, {\r\n name: \"GoldenTritium\",\r\n roles: [12, 13]\r\n }, {\r\n name: \"Kael\",\r\n roles: 12\r\n }, {\r\n name: \"Lynn\",\r\n roles: 12\r\n }, {\r\n name: \"Merp\",\r\n roles: 12\r\n }, {\r\n name: \"philipebreaker\",\r\n name2: \"Philipe\",\r\n roles: 12\r\n }, {\r\n name: \"Phillip Marshall\",\r\n roles: 12\r\n }, {\r\n name: \"Phoenix\",\r\n roles: 12\r\n }, {\r\n name: \"Reda Kotob\",\r\n roles: 12\r\n }, {\r\n name: \"Saturnus\",\r\n roles: 12\r\n }, {\r\n name: \"SereKabii\",\r\n roles: 12\r\n }, {\r\n name: \"Sheer\",\r\n roles: 12\r\n }, {\r\n name: \"sirusi\",\r\n name2: \"Vinícius Oliveira Martins\",\r\n roles: 12\r\n }, {\r\n name: \"Spanosa\",\r\n name2: \"Jared K\",\r\n roles: 12\r\n }, {\r\n name: \"Sparticle999\",\r\n roles: 12\r\n }, {\r\n name: \"SpicyCrusader13\",\r\n roles: [12, 13]\r\n }, {\r\n name: \"Storm\",\r\n roles: 12\r\n }, {\r\n name: \"SzyszakS\",\r\n roles: 12\r\n }, {\r\n name: \"Tacitus\",\r\n roles: 12\r\n }, {\r\n name: \"Typh\",\r\n roles: 12\r\n }, {\r\n name: \"Vnge\",\r\n name2: \"Ben Parrish\",\r\n roles: [12, 13]\r\n }, {\r\n name: \"Xemadus\",\r\n name2: \"Jonathan Gibson\",\r\n roles: 12\r\n }, {\r\n name: \"Young Woo Joo\",\r\n roles: 12\r\n }, {\r\n name: \"Zipi\",\r\n roles: 12\r\n }, {\r\n name: \"about:blank\",\r\n roles: 13\r\n }, {\r\n name: \"ÆiOuF\",\r\n roles: 13\r\n }, {\r\n name: \"Akirious\",\r\n roles: 13\r\n }, {\r\n name: \"Anjinho01\",\r\n roles: 13\r\n }, {\r\n name: \"Anthios\",\r\n roles: 13\r\n }, {\r\n name: \"Aubrey Ark\",\r\n roles: 13\r\n }, {\r\n name: \"Auti\",\r\n name2: \"Lucia Tolle\",\r\n roles: 13\r\n }, {\r\n name: \"Buck\",\r\n roles: 13\r\n }, {\r\n name: \"Barrin84\",\r\n roles: 13\r\n }, {\r\n name: \"Calmcat\",\r\n roles: 13\r\n }, {\r\n name: \"ChizuX\",\r\n roles: 13\r\n }, {\r\n name: \"Circle\",\r\n roles: 13\r\n }, {\r\n name: \"Crinkly Weasel\",\r\n name2: \"Aaryan Sarawgi\",\r\n roles: 13\r\n }, {\r\n name: \"Daniella\",\r\n roles: 13\r\n }, {\r\n name: \"DarthDie\",\r\n name2: \"Briar Bowser\",\r\n roles: 13\r\n }, {\r\n name: \"ElPopote83\",\r\n roles: 13\r\n }, {\r\n name: \"Epsilon\",\r\n name2: \"Coolguystorm\",\r\n roles: 13\r\n }, {\r\n name: \"Firecracker\",\r\n roles: 13\r\n }, {\r\n name: \"Gaunter\",\r\n roles: 13\r\n }, {\r\n name: \"Gimmick\",\r\n roles: 13\r\n }, {\r\n name: \"HarrisL2\",\r\n roles: 13\r\n }, {\r\n name: \"Hellbach\",\r\n name2: \"Asher Günther\",\r\n roles: 13\r\n }, {\r\n name: \"hen-ben\",\r\n name2: \"Henry Ellenberg\",\r\n roles: 13\r\n }, {\r\n name: \"ImpossibleSalsa\",\r\n roles: 13\r\n }, {\r\n name: \"JayM#1872\",\r\n name2: \"Jay McGee\",\r\n roles: 13\r\n }, {\r\n name: \"Johanniklas\",\r\n name2: \"Jan-Niklas Petersen\",\r\n roles: 13\r\n }, {\r\n name: \"Joseph Micheli\",\r\n roles: 13\r\n }, {\r\n name: \"kaislash\",\r\n name2: \"Lily\",\r\n roles: 13\r\n }, {\r\n name: \"Kirku\",\r\n name2: \"Fabian Makowski\",\r\n roles: 13\r\n }, {\r\n name: \"Kirin\",\r\n name2: \"Arthur\",\r\n roles: 13\r\n }, {\r\n name: \"Klötzchen\",\r\n roles: 13\r\n }, {\r\n name: \"L5racer\",\r\n roles: 13\r\n }, {\r\n name: \"Marshmallow\",\r\n roles: 13\r\n }, {\r\n name: \"HyperionMike\",\r\n name2: \"Miikael Siitan\",\r\n roles: 13\r\n }, {\r\n name: \"Mirai\",\r\n roles: 13\r\n }, {\r\n name: \"Monoma\",\r\n name2: \"ARoman Ruiz\",\r\n roles: 13\r\n }, {\r\n name: \"Nani\",\r\n roles: 13\r\n }, {\r\n name: \"Neo\",\r\n name2: \"Joon\",\r\n roles: 13\r\n }, {\r\n name: \"netweak\",\r\n roles: 13\r\n }, {\r\n name: \"NiZeKiHo\",\r\n name2: \"DominusDane\",\r\n roles: 13\r\n }, {\r\n name: \"NotBrewst\",\r\n name2: \"Luc Leblanc\",\r\n roles: 13\r\n }, {\r\n name: \"opdollar\",\r\n name2: \"Zane Coole\",\r\n roles: 13\r\n }, {\r\n name: \"Pavlxiiv\",\r\n roles: 13\r\n }, {\r\n name: \"PotatoTIAB\",\r\n roles: 13\r\n }, {\r\n name: \"Razor\",\r\n roles: 13\r\n }, {\r\n name: \"Razvan Cercel\",\r\n roles: 13\r\n }, {\r\n name: \"ReacTivity\",\r\n roles: 13\r\n }, {\r\n name: \"Reaxt\",\r\n name2: \"Rea Koehler\",\r\n roles: 13\r\n }, {\r\n name: \"Ruins\",\r\n roles: 13\r\n }, {\r\n name: \"Rukimix\",\r\n roles: 13\r\n }, {\r\n name: \"shadowevil\",\r\n roles: 13\r\n }, {\r\n name: \"Skunky\",\r\n name2: \"Lukas\",\r\n roles: 13\r\n }, {\r\n name: \"Snaeky\",\r\n roles: 13\r\n }, {\r\n name: \"Socks\",\r\n name2: \"Hannah Pocks\",\r\n roles: 13\r\n }, {\r\n name: \"Sweets the Alien\",\r\n roles: 13\r\n }, {\r\n name: \"Tables\",\r\n roles: 13,\r\n }, {\r\n name: \"Taylor Reeves\",\r\n roles: 13\r\n }, {\r\n name: \"TheAhmex\",\r\n roles: 13\r\n }, {\r\n name: \"The Trust Melon\",\r\n roles: 13\r\n }, {\r\n name: \"Tim Wong\",\r\n roles: 13\r\n }, {\r\n name: \"tragedt\",\r\n name2: \"Ethan Manninen\",\r\n roles: 13\r\n }, {\r\n name: \"tui sapo\",\r\n roles: 13\r\n }, {\r\n name: \"Valentine Clarissa Alanis Star Z\",\r\n roles: 13\r\n }, {\r\n name: \"vanadium_void\",\r\n roles: 13\r\n }, {\r\n name: \"X3N0_32\",\r\n roles: 13\r\n }, {\r\n name: \"ZylaKat\",\r\n name2: \"Katherine Goforth-Harbin\",\r\n roles: 13\r\n },\r\n {\r\n name: \"Royalflush297\",\r\n roles: 14\r\n },\r\n {\r\n name: \"Miabread\",\r\n roles: 15\r\n },\r\n {\r\n name: \"incremental_gamer\",\r\n roles: [14, 15, 18]\r\n },\r\n {\r\n name: \"Merlyn\",\r\n roles: [15, 18]\r\n },\r\n {\r\n name: \"Plasmawario\",\r\n roles: 15\r\n },\r\n {\r\n name: \"Hexa\",\r\n roles: [14, 15, 16, 17]\r\n },\r\n {\r\n name: \"MrKrutaman\",\r\n roles: [15, 17]\r\n },\r\n {\r\n name: \"BsonHK\",\r\n roles: 16\r\n },\r\n {\r\n name: \"ArchercatNEO\",\r\n roles: 15\r\n },\r\n {\r\n name: \"yodi555\",\r\n roles: 15\r\n },\r\n {\r\n name: \"Amity\",\r\n roles: [14, 16]\r\n },\r\n {\r\n name: \"Wellington\",\r\n roles: 14\r\n },\r\n {\r\n name: \"sxy62146214\",\r\n roles: 14\r\n },\r\n {\r\n name: \"aswefljkd\",\r\n roles: 14\r\n },\r\n {\r\n name: \"beni\",\r\n roles: 18\r\n },\r\n {\r\n name: \"Legendis\",\r\n roles: 18\r\n },\r\n {\r\n name: \"Melfistic\",\r\n roles: 18\r\n },\r\n {\r\n name: \"donaldino\",\r\n roles: 18\r\n },\r\n {\r\n name: \"Rumbles\",\r\n roles: 18\r\n },\r\n {\r\n name: \"uiinpui\",\r\n roles: 18\r\n }\r\n ]\r\n};\r\n\r\ncredits.roles.count = Object.keys(credits.roles).length;\r\n","// We define these in the local scope to override the player's notation setting; this is something we'll probably\r\n// expand upon later once we look more closely at support for extended Unicode in DRP\r\nfunction format(number, places, placesUnder1000) {\r\n return Notation.scientific.format(number, places, placesUnder1000);\r\n}\r\n\r\nfunction formatInt(value) {\r\n if (Notations.current.isPainful) return format(value, 2);\r\n return formatWithCommas(typeof value === \"number\" ? value.toFixed(0) : value.toNumber().toFixed(0));\r\n}\r\n\r\nfunction formatMachines(realPart, imagPart) {\r\n const parts = [];\r\n if (Decimal.neq(realPart, 0)) parts.push(format(realPart, 2));\r\n if (Decimal.neq(imagPart, 0)) parts.push(`${format(imagPart, 2, 2)}i`);\r\n if (Decimal.eq(realPart, 0) && Decimal.eq(imagPart, 0)) return format(0);\r\n return parts.join(\" + \");\r\n}\r\n\r\n// This is used for Discord Rich Presence, the information which shows up on a person's profile badge in Discord if\r\n// they are playing a game on Steam which has integration that pushes the info to Discord\r\nexport const discordRichPresence = {\r\n /**\r\n * List of all challenges to display within DRP, checked from the first entry and iterating forward. It will only\r\n * show the first one it finds for space reasons, but this also has the desirable effect of hiding key challenges\r\n * the player may enter within cel3.\r\n *\r\n * This is arguably the most \"useful\" behavior as well due to the fact that often the highest level of challenge is\r\n * the long-term goal for why the player entered the challenge in the first place.\r\n * @template\r\n * {\r\n * @property {function: @return String} name Name of the challenge (may contain name spoilers)\r\n * @property {function: @return Boolean | Number} activityToken Whether or not this challenge is active; is a\r\n * boolean for dilation and realities, or a number for pre-dilation challenges\r\n * @property {Array: function: @return String} resource Function returning the relevant resource for this\r\n * particular challenge\r\n * }\r\n */\r\n challenges: [\r\n {\r\n name: () => `${Teresa.possessiveName} Reality`,\r\n activityToken: () => Teresa.isRunning,\r\n // Reward is based on antimatter, but EP is more meaningful pre-completion\r\n resource: () => (Teresa.runCompleted\r\n ? `${format(player.antimatter, 2, 1)} AM`\r\n : `${format(player.eternityPoints, 2)} EP`),\r\n },\r\n {\r\n name: () => `${Effarig.possessiveName} Reality - ${Effarig.currentStageName}`,\r\n activityToken: () => Effarig.isRunning,\r\n resource: () => {\r\n switch (Effarig.currentStage) {\r\n case EFFARIG_STAGES.INFINITY:\r\n return `${format(player.antimatter, 2, 1)} AM`;\r\n case EFFARIG_STAGES.ETERNITY:\r\n return `${format(player.infinityPoints, 2)} IP`;\r\n case EFFARIG_STAGES.REALITY:\r\n default:\r\n return `${format(player.eternityPoints, 2)} EP`;\r\n }\r\n },\r\n },\r\n {\r\n name: () => `${Enslaved.possessiveName} Reality`,\r\n activityToken: () => Enslaved.isRunning,\r\n resource: () => `${format(player.eternityPoints, 2)} EP`,\r\n },\r\n {\r\n name: () => `${V.possessiveName} Reality`,\r\n activityToken: () => V.isRunning,\r\n resource: () => null,\r\n // V displays achievements normally and its value is standardized outside of its era\r\n },\r\n {\r\n name: () => `${V.possessiveName} Superhard Reality`,\r\n activityToken: () => V.isSuperRunning,\r\n resource: () => null,\r\n // V displays achievements normally and its value is standardized outside of its era\r\n },\r\n {\r\n name: () => `${Ra.possessiveName} Reality`,\r\n activityToken: () => Ra.isRunning,\r\n resource: () => null,\r\n // Ra doesn't have a meaningful in-reality resource to display\r\n },\r\n {\r\n name: () => {\r\n const dims = Laitela.maxAllowedDimension;\r\n const dimStr = dims ? `D${dims} max` : \"Final\";\r\n return `${Laitela.possessiveName} Reality - ${dimStr}`;\r\n },\r\n activityToken: () => Laitela.isRunning,\r\n resource: () => `${formatPercents(player.celestials.laitela.entropy, 2, 2)} Entropy`,\r\n },\r\n {\r\n name: () => \"Dilation\",\r\n activityToken: () => player.dilation.active,\r\n resource: () => `${format(player.antimatter, 2, 1)} AM`,\r\n },\r\n {\r\n name: token => `EC ${token}`,\r\n // This results in \"EC 3x3\" (for example) when there are remaining completions, and just \"EC 3\" if not\r\n activityToken: () => {\r\n if (!player.challenge.eternity.current) return false;\r\n const num = player.challenge.eternity.current;\r\n const ec = EternityChallenge(num);\r\n return ec.remainingCompletions ? `${num}x${ec.completions + 1}` : num;\r\n },\r\n resource: () => `${format(player.infinityPoints, 2)} IP`,\r\n },\r\n {\r\n name: token => `IC ${token}`,\r\n activityToken: () => player.challenge.infinity.current,\r\n resource: () => `${format(player.antimatter, 2, 1)} AM`,\r\n },\r\n {\r\n name: token => `NC ${token}`,\r\n activityToken: () => player.challenge.normal.current,\r\n resource: () => `${format(player.antimatter, 2, 1)} AM`,\r\n },\r\n ],\r\n\r\n /**\r\n * List of all the different progress stages which will have distinct behavior in DRP\r\n * @template\r\n * {\r\n * @property {String} name Name of this stage of the game to display. This will\r\n * be used for the first line of text in DRP. This isn't necessarily unique, as the tracked resources may change\r\n * without the stage changing\r\n * @property {function: @return Boolean} hasReached Function to check if this stage of the game has been\r\n * reached. These checks are done starting at the end of the array and going backwards.\r\n * @property {function: @return String} mainResource Function returning the string describing the main\r\n * resource for a stage of the game\r\n * @property {Array: function: @return String} resourceList Array of strings containing relevant resources for\r\n * each particular part of the game. Largely just a list of key resources that are relevant at each section. The\r\n * logic *can* handle this being undefined, but it probably shouldn't be due to poor appearance\r\n * }\r\n */\r\n stages: [\r\n {\r\n name: \"Pre-Infinity\",\r\n hasReached: () => true,\r\n mainResource: () => `${format(player.antimatter, 2, 1)} AM`,\r\n resourceList: [\r\n () => quantify(\"Boost\", player.dimensionBoosts, 0, 0, formatInt),\r\n () => quantify(\"Galaxy\", player.galaxies, 0, 0, formatInt),\r\n ],\r\n },\r\n {\r\n name: \"Infinity\",\r\n hasReached: () => PlayerProgress.infinityUnlocked(),\r\n mainResource: () => `${format(player.infinityPoints, 2)} IP`,\r\n resourceList: [() => quantify(\"Infinity\", player.infinities, 0, 0, formatInt)],\r\n },\r\n {\r\n name: \"Broken Infinity\",\r\n hasReached: () => player.break,\r\n mainResource: () => `${format(player.infinityPoints, 2)} IP`,\r\n resourceList: [() => quantify(\"Infinity\", player.infinities, 2, 0, format)],\r\n },\r\n {\r\n name: \"Eternity\",\r\n hasReached: () => PlayerProgress.eternityUnlocked(),\r\n mainResource: () => `${format(player.eternityPoints, 2)} EP`,\r\n resourceList: [() => quantify(\"Eternity\", player.eternities, 0, 0, formatInt)],\r\n },\r\n {\r\n // Eternity Challenge era\r\n name: \"Eternity\",\r\n hasReached: () => player.eternityChalls.eterc1 > 0,\r\n mainResource: () => `${format(player.eternityPoints, 2)} EP`,\r\n resourceList: [\r\n () => quantify(\"EC completion\", Object.values(player.eternityChalls).reduce((sum, c) => sum + c, 0), 0, 0, formatInt)\r\n ]\r\n },\r\n {\r\n name: \"Time Dilation\",\r\n hasReached: () => PlayerProgress.dilationUnlocked(),\r\n mainResource: () => `${format(player.eternityPoints, 2)} EP`,\r\n resourceList: [() => `${format(player.dilation.dilatedTime, 2, 2)} DT`],\r\n },\r\n {\r\n name: \"Reality\",\r\n hasReached: () => player.realities > 0,\r\n mainResource: () => `${format(player.reality.realityMachines, 2)} RM`,\r\n resourceList: [\r\n () => quantify(\"Reality\", player.realities, 0, 0, formatInt),\r\n () => `Best Glyph Level: ${formatInt(player.records.bestReality.glyphLevel)}`\r\n ]\r\n },\r\n {\r\n name: () => Teresa.displayName,\r\n hasReached: () => Teresa.isUnlocked,\r\n mainResource: () => `${format(player.reality.realityMachines, 2)} RM`,\r\n resourceList: [\r\n () => quantify(\"Reality\", player.realities, 0, 0, formatInt),\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => `Poured: ${format(player.celestials.teresa.pouredAmount, 2)} RM`\r\n ]\r\n },\r\n {\r\n name: () => Effarig.displayName,\r\n hasReached: () => TeresaUnlocks.effarig.isUnlocked,\r\n mainResource: () => `${format(player.reality.realityMachines, 2)} RM`,\r\n resourceList: [\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => quantify(\"Relic Shard\", player.celestials.effarig.relicShards, 2, 0, format)\r\n ]\r\n },\r\n {\r\n name: () => Enslaved.displayName,\r\n hasReached: () => EffarigUnlock.eternity.isUnlocked,\r\n mainResource: () => `${format(player.reality.realityMachines, 2)} RM`,\r\n resourceList: [\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => `Charged: ${format(TimeSpan.fromMilliseconds(player.celestials.enslaved.stored).totalYears, 2)} years`\r\n ],\r\n },\r\n {\r\n name: () => V.displayName,\r\n hasReached: () => Achievement(151).isUnlocked,\r\n mainResource: () => `${format(player.reality.realityMachines, 2)} RM`,\r\n resourceList: [\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => quantify(\"V-Achievement\", player.celestials.v.runUnlocks.sum(), 0, 0, formatInt)],\r\n },\r\n {\r\n name: () => Ra.displayName,\r\n hasReached: () => VUnlocks.raUnlock.isUnlocked,\r\n mainResource: () => `${format(player.reality.realityMachines, 2)} RM`,\r\n resourceList: [\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => `Ra Levels: ${Ra.pets.all.map(p => formatInt(p.level)).join(\"/\")}`],\r\n },\r\n {\r\n // Imaginary Machines unlocked\r\n name: () => Ra.displayName,\r\n hasReached: () => MachineHandler.isIMUnlocked,\r\n mainResource: () => `${formatMachines(player.reality.realityMachines, player.reality.imaginaryMachines)} RM`,\r\n resourceList: [\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => `Ra Levels: ${Ra.pets.all.map(p => formatInt(p.level)).join(\"/\")}`\r\n ],\r\n },\r\n {\r\n name: () => Laitela.displayName,\r\n hasReached: () => Laitela.isUnlocked,\r\n mainResource: () => `${formatMachines(player.reality.realityMachines, player.reality.imaginaryMachines)} RM`,\r\n resourceList: [\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => quantify(\"Singularity\", player.celestials.laitela.singularities, 2, 0, format)],\r\n },\r\n {\r\n // We can't use celestial displayName here like the others because that will cause the text scramble to get put on DRP\r\n name: \"Pelle\",\r\n hasReached: () => Pelle.isDoomed,\r\n mainResource: () => quantify(\"Reality Shard\", player.celestials.pelle.realityShards, 2),\r\n resourceList: [() => quantify(\"Remnant\", player.celestials.pelle.remnants, 2)],\r\n },\r\n {\r\n name: \"END\",\r\n hasReached: () => GameEnd.endState >= END_STATE_MARKERS.GAME_END,\r\n mainResource: () => \"END Antimatter\",\r\n resourceList: [() => \"Nothing remains.\"],\r\n },\r\n ]\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nfunction rebuyableCost(initialCost, increment, id) {\r\n return Decimal.multiply(initialCost, Decimal.pow(increment, player.dilation.rebuyables[id]));\r\n}\r\nfunction rebuyable(config) {\r\n return {\r\n id: config.id,\r\n cost: () => {\r\n if (player.dilation.rebuyables[config.id] > 5000) return rebuyableCost(config.initialCost, config.incrementSC, config.id);\r\n return rebuyableCost(config.initialCost, config.increment, config.id);\r\n },\r\n initialCost: config.initialCost,\r\n increment: config.increment,\r\n incrementSC: config.incrementSC,\r\n description: config.description,\r\n effect: () => config.effect(player.dilation.rebuyables[config.id]),\r\n formatEffect: config.formatEffect,\r\n formatCost: config.formatCost,\r\n purchaseCap: config.purchaseCap,\r\n pellePurchaseCap: config.pellePurchaseCap, //we now need a new pellePurchaseCap to uncap certain rebuyables depending on if you're in Pelle or not, thanks to Spec for the fix\r\n reachedCap: () =>{ \r\n if (Pelle.isDoomed) return player.dilation.rebuyables[config.id] >= config.pellePurchaseCap;\r\n return player.dilation.rebuyables[config.id] >= config.purchaseCap;\r\n },\r\n pelleOnly: Boolean(config.pelleOnly),\r\n rebuyable: true\r\n };\r\n}\r\n\r\nexport const dilationUpgrades = {\r\n dtGain: rebuyable({\r\n id: 1,\r\n initialCost: 1e4,\r\n increment: 10,\r\n incrementSC: 100,\r\n description: () =>\r\n ((SingularityMilestone.dilatedTimeFromSingularities.canBeApplied || Achievement(187).canBeApplied)\r\n ? `${formatX(2 * Effects.product(\r\n SingularityMilestone.dilatedTimeFromSingularities,\r\n Achievement(187)\r\n ), 2, 2)} Dilated Time gain`\r\n : \"Double Dilated Time gain\"),\r\n effect: bought => {\r\n const base = 2 * Effects.product(\r\n SingularityMilestone.dilatedTimeFromSingularities,\r\n Achievement(187)\r\n );\r\n return Decimal.pow(base, bought);\r\n },\r\n formatEffect: value => {\r\n const nonInteger = SingularityMilestone.dilatedTimeFromSingularities.canBeApplied ||\r\n Achievement(187).canBeApplied;\r\n return formatX(value, 2, nonInteger ? 2 : 0);\r\n },\r\n formatCost: value => format(value, 2),\r\n purchaseCap: Number.MAX_VALUE,\r\n pellePurchaseCap: Number.MAX_VALUE,\r\n }),\r\n galaxyThreshold: rebuyable({\r\n id: 2,\r\n initialCost: 1e6,\r\n increment: 100,\r\n incrementSC: 100, //it shouldn't matter for this one\r\n description: () =>\r\n (Perk.bypassTGReset.isBought && !Pelle.isDoomed\r\n ? \"Reset Tachyon Galaxies, but lower their threshold\"\r\n : \"Reset Dilated Time and Tachyon Galaxies, but lower their threshold\"),\r\n // The 38th purchase is at 1e80, and is the last purchase.\r\n effect: bought => (bought < 38 ? Math.pow(0.8, bought) : 0),\r\n formatEffect: effect => {\r\n if (effect === 0) return `${formatX(getTachyonGalaxyMult(effect), 4, 4)}`;\r\n const nextEffect = effect === Math.pow(0.8, 37) ? 0 : 0.8 * effect;\r\n return `${formatX(getTachyonGalaxyMult(effect), 4, 4)} ➜\r\n Next: ${formatX(getTachyonGalaxyMult(nextEffect), 4, 4)}`;\r\n },\r\n formatCost: value => format(value, 2),\r\n purchaseCap: 38,\r\n pellePurchaseCap: 38,\r\n }),\r\n tachyonGain: rebuyable({\r\n id: 3,\r\n initialCost: 1e7,\r\n increment: 20,\r\n incrementSC: 4000,\r\n description: () => {\r\n if (Pelle.isDoomed) return Ra.unlocks.unlockPelleTPMult.isUnlocked ? `Multiply the amount of Tachyon Particles gained by ${format(1.1, 1, 1)}` : `Multiply the amount of Tachyon Particles gained by ${formatInt(1)}`;\r\n if (Enslaved.isRunning) return `Multiply the amount of Tachyon Particles gained\r\n by ${Math.pow(3, Enslaved.tachyonNerf).toFixed(2)}`;\r\n return \"Triple the amount of Tachyon Particles gained\";\r\n },\r\n effect: bought => {\r\n if (Pelle.isDoomed) return Ra.unlocks.unlockPelleTPMult.isUnlocked ? Decimal.pow(1.1, bought) : DC.D1.pow(bought);\r\n return DC.D3.pow(bought);\r\n },\r\n formatEffect: value => formatX(value, 2, 2),\r\n formatCost: value => format(value, 2),\r\n purchaseCap: Number.MAX_VALUE, //cap at x1e2000\r\n pellePurchaseCap: Number.MAX_VALUE,\r\n }),\r\n doubleGalaxies: {\r\n id: 4,\r\n cost: 5e6,\r\n description: () => `Gain twice as many Tachyon Galaxies, up to ${formatInt(500)} base Galaxies`,\r\n effect: 2\r\n },\r\n tdMultReplicanti: {\r\n id: 5,\r\n cost: 1e9,\r\n description: () => {\r\n const rep10 = replicantiMult().pLog10();\r\n let multiplier = \"0.1\";\r\n if (rep10 > 9000) {\r\n const ratio = DilationUpgrade.tdMultReplicanti.effectValue.pLog10() / rep10;\r\n if (ratio < 0.095) {\r\n multiplier = ratio.toFixed(2);\r\n }\r\n }\r\n return `Time Dimensions are affected by Replicanti multiplier ${formatPow(multiplier, 1, 3)}, reduced\r\n effect above ${formatX(DC.E9000)}`;\r\n },\r\n effect: () => {\r\n let rep10 = replicantiMult().pLog10() * 0.1;\r\n rep10 = rep10 > 9000 ? 9000 + 0.5 * (rep10 - 9000) : rep10;\r\n return Decimal.pow10(rep10);\r\n },\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n ndMultDT: {\r\n id: 6,\r\n cost: 5e7,\r\n description: \"Antimatter Dimension multiplier based on Dilated Time, unaffected by Time Dilation\",\r\n effect: () => Currency.dilatedTime.value.pow(308).clampMin(1),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n ipMultDT: {\r\n id: 7,\r\n cost: 2e12,\r\n description: \"Gain a multiplier to Infinity Points based on Dilated Time\",\r\n effect: () => Currency.dilatedTime.value.pow(1000).clampMin(1),\r\n formatEffect: value => formatX(value, 2, 1),\r\n cap: () => Effarig.eternityCap\r\n },\r\n timeStudySplit: {\r\n id: 8,\r\n cost: 1e10,\r\n description: \"You can buy all three Time Study paths from the Dimension Split\"\r\n },\r\n dilationPenalty: {\r\n id: 9,\r\n cost: 1e11,\r\n description: () => `Reduce the Dilation penalty (${formatPow(1.05, 2, 2)} after reduction)`,\r\n effect: 1.05,\r\n },\r\n ttGenerator: {\r\n id: 10,\r\n cost: 1e15,\r\n description: \"Generate Time Theorems based on Tachyon Particles\",\r\n effect: () => Currency.tachyonParticles.value.div(20000),\r\n formatEffect: value => `${format(value, 2, 1)}/sec`\r\n },\r\n dtGainPelle: rebuyable({\r\n id: 11,\r\n initialCost: 1e14,\r\n increment: 100,\r\n incrementSC: 100, //these are hardcapped anyway\r\n pelleOnly: true,\r\n description: () =>{\r\n if(Pelle.isDoomed) return`${formatX(5)} Dilated Time gain`; \r\n return `${formatX(1.75, 2, 2)} Dilated Time gain`;\r\n },\r\n effect: bought => {\r\n if (Pelle.isDoomed) return Decimal.pow(5, bought);\r\n return Decimal.pow(1.75, bought);\r\n },\r\n formatEffect: value => formatX(value, 2, 2),\r\n formatCost: value => format(value, 2),\r\n purchaseCap: 206, //cap at e50\r\n pellePurchaseCap: Number.MAX_VALUE,\r\n }),\r\n galaxyMultiplier: rebuyable({\r\n id: 12,\r\n initialCost: 1e15,\r\n increment: 1000,\r\n incrementSC: 1000,\r\n pelleOnly: true,\r\n description: \"Multiply Tachyon Galaxies gained, applies after TG doubling upgrade\",\r\n effect: bought => {\r\n let x = Ra.unlocks.twinTachyonGalaxyCapIncrease.isUnlocked ? (Math.min((Decimal.log10((Currency.dilatedTime.value.clampMin(1)))) / 25000, 2)) : 0;\r\n if (Pelle.isDoomed) return (bought * (1 + x)) + 1;\r\n return (bought * (1 + x) * 0.1) + 1;\r\n },\r\n formatEffect: value => {\r\n let x = Ra.unlocks.twinTachyonGalaxyCapIncrease.isUnlocked ? Math.floor((Decimal.log10(Currency.dilatedTime.value)) / 25000) : 0;\r\n if (Pelle.isDoomed) return `${formatX((value * (1 + x)), 2)} ➜ ${formatX((value * (1 + x)) + 1, 2, 2)}`;\r\n else if (player.dilation.rebuyables[12] >= 10) return `${formatX(value, 2, 2)}`;\r\n return `${formatX((value * (1 + x)), 2, 1, 2)} ➜ ${formatX((value * (1 + x)) + 0.1, 2, 2)}`;\r\n },\r\n formatCost: value => format(value, 2),\r\n purchaseCap: 10,/*() =>{\r\n //let x = Ra.unlocks.twinTachyonGalaxyCapIncrease.isUnlocked ? Math.floor((Decimal.log10(Currency.dilatedTime.value)) / 100) : 0;\r\n return 10;// + x;\r\n },*/\r\n pellePurchaseCap: Number.MAX_VALUE,\r\n }),\r\n tickspeedPower: rebuyable({\r\n id: 13,\r\n initialCost: 1e16,\r\n increment: 1e4,\r\n incrementSC: 1e4,\r\n pelleOnly: true,\r\n description: \"Gain a power to Tickspeed\",\r\n effect: bought => {\r\n if (Pelle.isDoomed) return 1 + bought * 0.03;\r\n return 1 + bought * 0.02;\r\n },\r\n formatEffect: value =>{ \r\n if (Pelle.isDoomed) return `${formatPow(value, 2, 2)} ➜ ${formatPow(value + 0.03, 2, 2)}`;\r\n else if(player.dilation.rebuyables[13] >= 10) return `${formatPow(value, 2, 2)}`;\r\n return `${formatPow(value, 2, 2)} ➜ ${formatPow(value + 0.02, 2, 2)}`;\r\n },\r\n formatCost: value => format(value, 2),\r\n purchaseCap: 10,\r\n pellePurchaseCap: Number.MAX_VALUE,\r\n }),\r\n galaxyThresholdPelle: {\r\n id: 14,\r\n cost: 1e45,\r\n pelleOnly: true,\r\n get description () {\r\n return Pelle.isDoomed ? \"Apply a cube root to the Tachyon Galaxy threshold\" : \"Apply a 1.1th root to the Tachyon Galaxy threshold\";\r\n },\r\n effect: () => {\r\n if (Pelle.isDoomed) return 1/3;\r\n return 1/1.1;\r\n },\r\n },\r\n flatDilationMult: {\r\n id: 15,\r\n cost: 1e55,\r\n pelleOnly: true,\r\n description: () => `Gain more Dilated Time based on current EP`,\r\n effect: () => 1e9 ** Math.min((Math.max(player.eternityPoints.log10() - 1500, 0) / 2500) ** 1.2, 1),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n};\r\n","export const eternityMilestones = {\r\n autobuyerIPMult: {\r\n eternities: 1,\r\n reward: \"Unlock the Infinity Point multiplier autobuyer\",\r\n pelleUseless: true\r\n },\r\n keepAutobuyers: {\r\n eternities: 2,\r\n reward: \"You start Eternity with all Normal Challenges complete, all normal autobuyers, and infinity broken\"\r\n },\r\n autobuyerReplicantiGalaxy: {\r\n eternities: 3,\r\n reward: \"Unlock the Replicanti Galaxy Autobuyer\"\r\n },\r\n keepInfinityUpgrades: {\r\n eternities: 4,\r\n reward: \"You start Eternity with all Infinity Upgrades\",\r\n givenByPelle: () => PelleUpgrade.keepInfinityUpgrades.isBought,\r\n pelleUseless: true\r\n },\r\n bigCrunchModes: {\r\n eternities: 5,\r\n reward: \"Unlock more Big Crunch Autobuyer options\"\r\n },\r\n autoEP: {\r\n eternities: 6,\r\n reward: () => {\r\n const EPmin = getOfflineEPGain(TimeSpan.fromMinutes(1).totalMilliseconds);\r\n const em200 = getEternitiedMilestoneReward(TimeSpan.fromHours(1).totalMilliseconds,\r\n EternityMilestone.autoEternities.isReached).gt(0);\r\n const em1000 = getInfinitiedMilestoneReward(TimeSpan.fromHours(1).totalMilliseconds,\r\n EternityMilestone.autoInfinities.isReached).gt(0);\r\n if (!player.options.offlineProgress) return `This milestone would give offline EP generation, but offline progress\r\n is currently disabled`;\r\n const effectText = (em200 || em1000) ? \"Inactive\" : `Currently ${format(EPmin, 2, 2)} EP/min`;\r\n return `While offline, gain ${formatPercents(0.25)} of your best Eternity Points per minute from previous\r\n Eternities (${effectText})`;\r\n },\r\n activeCondition: () => (player.options.offlineProgress\r\n ? `Active as long as neither of the other offline milestones\r\n (${formatInt(200)} or ${formatInt(1000)}) are also active`\r\n : \"\"),\r\n },\r\n autoIC: {\r\n eternities: 7,\r\n reward: `You complete Infinity Challenges as soon as you unlock them,\r\n and keep the Dimensional Sacrifice Autobuyer`,\r\n pelleUseless: true\r\n },\r\n keepBreakUpgrades: {\r\n eternities: 8,\r\n reward: \"You start Eternity with all Break Infinity Upgrades\",\r\n givenByPelle: () => PelleUpgrade.keepBreakInfinityUpgrades.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyMaxGalaxies: {\r\n eternities: 9,\r\n reward: \"Unlock the buy max Antimatter Galaxies Autobuyer mode\"\r\n },\r\n unlockReplicanti: {\r\n eternities: 10,\r\n reward: \"You start with Replicanti unlocked\",\r\n givenByPelle: () => PelleUpgrade.replicantiStayUnlocked.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID1: {\r\n eternities: 11,\r\n reward: \"Unlock the 1st Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID2: {\r\n eternities: 12,\r\n reward: \"Unlock the 2nd Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID3: {\r\n eternities: 13,\r\n reward: \"Unlock the 3rd Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID4: {\r\n eternities: 14,\r\n reward: \"Unlock the 4th Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID5: {\r\n eternities: 15,\r\n reward: \"Unlock the 5th Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID6: {\r\n eternities: 16,\r\n reward: \"Unlock the 6th Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID7: {\r\n eternities: 17,\r\n reward: \"Unlock the 7th Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID8: {\r\n eternities: 18,\r\n reward: \"Unlock the 8th Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autoUnlockID: {\r\n eternities: 25,\r\n reward: \"You automatically unlock Infinity Dimensions upon reaching them\"\r\n },\r\n unlockAllND: {\r\n eternities: 30,\r\n reward: \"Start with all Antimatter Dimensions available for purchase\"\r\n },\r\n replicantiNoReset: {\r\n eternities: 40,\r\n reward: `Replicanti Galaxies no longer reset Antimatter, Antimatter Dimensions,\r\n Tickspeed, Dimensional Sacrifice, or Dimension Boosts`,\r\n pelleUseless: true\r\n },\r\n autobuyerReplicantiChance: {\r\n eternities: 50,\r\n reward: \"Unlock the Replicanti Chance Upgrade Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.replicantiAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerReplicantiInterval: {\r\n eternities: 60,\r\n reward: \"Unlock the Replicanti Interval Upgrade Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.replicantiAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerReplicantiMaxGalaxies: {\r\n eternities: 80,\r\n reward: \"Unlock the Max Replicanti Galaxy Upgrade Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.replicantiAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerEternity: {\r\n eternities: 100,\r\n reward: \"Unlock autobuyer for Eternities\"\r\n },\r\n autoEternities: {\r\n eternities: 200,\r\n reward: () => {\r\n if (!player.options.offlineProgress) return `This milestone would generate eternities offline, but offline\r\n progress is currently disabled`;\r\n const eternities = getEternitiedMilestoneReward(TimeSpan.fromHours(1).totalMilliseconds,\r\n player.eternities.gte(200));\r\n // As far as I can tell, using templates here as Codefactor wants would lead to nested templates,\r\n // which seems messy to say the least.\r\n const realTime = PlayerProgress.seenAlteredSpeed() ? \" real-time\" : \"\";\r\n // eslint-disable-next-line prefer-template\r\n return `While offline, gain Eternities at ${formatPercents(0.5)} the rate of your fastest${realTime} Eternity ` +\r\n (eternities.gt(0) ? `(Currently ${format(eternities, 2, 2)}/hour)` : \"(Inactive)\");\r\n },\r\n activeCondition: () => (player.options.offlineProgress\r\n ? `Must be outside of all Challenges and Dilation, and the Eternity Autobuyer must be set to Eternity at zero EP.\r\n This milestone's effect is capped at ${formatInt(33)}ms.`\r\n : \"\"),\r\n pelleUseless: true\r\n },\r\n autoInfinities: {\r\n eternities: 1000,\r\n reward: () => {\r\n if (!player.options.offlineProgress) return `This milestone would generate infinities offline, but offline\r\n progress is currently disabled`;\r\n const infinities = getInfinitiedMilestoneReward(TimeSpan.fromHours(1).totalMilliseconds,\r\n player.eternities.gte(1000));\r\n // eslint-disable-next-line prefer-template\r\n return `While offline, gain Infinities equal to ${formatPercents(0.5)}\r\n your best Infinities/hour this Eternity ` +\r\n (infinities.gt(0) ? `(Currently ${format(infinities, 2, 2)}/hour)` : \"(Inactive)\");\r\n },\r\n activeCondition: () => (player.options.offlineProgress\r\n ? `Must be outside of Normal/Infinity Challenges and outside of EC4 and EC12,\r\n the Big Crunch Autobuyer must be turned on and set to time mode with less than ${formatInt(60)} seconds,\r\n and the Eternity Autobuyer must be turned off.`\r\n : \"\"),\r\n pelleUseless: true\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const eternityUpgrades = {\r\n idMultEP: {\r\n id: 1,\r\n cost: 5,\r\n description: () => `Infinity Dimensions multiplier based on unspent Eternity Points (x+${formatInt(1)})`,\r\n effect: () => Currency.eternityPoints.value.plus(1),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n idMultEternities: {\r\n id: 2,\r\n cost: 10,\r\n description: () => `Infinity Dimension multiplier based on Eternities\r\n ((x/${formatInt(200)})^log4(${formatInt(2)}x), softcap at ${format(1e5)} Eternities)`,\r\n effect() {\r\n const log4 = Math.log4;\r\n const eterPreCap = Currency.eternities.value.clampMax(1e5).toNumber();\r\n const base = eterPreCap / 200 + 1;\r\n const pow = Math.log(eterPreCap * 2 + 1) / log4;\r\n const multPreCap = Math.pow(base, pow);\r\n const eterPostCap = Currency.eternities.value.sub(1e5);\r\n const mult1 = eterPostCap.divide(200).plus(1);\r\n const mult2 = eterPostCap.times(2).plus(1).log(Math.E) / log4;\r\n const multPostCap = mult1.times(mult2).clampMin(1);\r\n return multPostCap.times(multPreCap);\r\n },\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n idMultICRecords: {\r\n id: 3,\r\n cost: 5e4,\r\n description: \"Infinity Dimensions multiplier based on sum of Infinity Challenge times\",\r\n // The cap limits this at a lower value, but we also need an explicit cap here because very old versions have\r\n // allowed EC12 to make all the challenge records sum to zero (causing a division by zero here)\r\n effect: () => DC.D2.pow(30 / Decimal.clampMin(Time.infinityChallengeSum.totalSeconds, 0.1).toNumber()),\r\n cap: DC.D2P30D0_61,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n tdMultAchs: {\r\n id: 4,\r\n cost: 1e16,\r\n description: \"Your Achievement bonus affects Time Dimensions\",\r\n effect: () => Achievements.power,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n tdMultTheorems: {\r\n id: 5,\r\n cost: 1e40,\r\n description: \"Time Dimensions are multiplied by your unspent Time Theorems\",\r\n effect: () => Decimal.max(Currency.timeTheorems.value, 1),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n tdMultRealTime: {\r\n id: 6,\r\n cost: 1e50,\r\n description: () => {\r\n if (Pelle.isDoomed){\r\n return \"Time Dimensions are multiplied by days played in this Armageddon\";\r\n }\r\n return PlayerProgress.mendingUnlocked() ? \"Time Dimensions are multiplied by days played in this Mend\" : \"Time Dimensions are multiplied by days played\";\r\n },\r\n effect: () => {\r\n if (Pelle.isDoomed){\r\n return Time.thisReality.totalDays.add(1);\r\n }\r\n return PlayerProgress.mendingUnlocked() ? Decimal.max(Time.thisMend.totalDays, 1) : Decimal.max(Time.totalTimePlayed.totalDays, 1);\r\n },\r\n formatEffect: value => formatX(value, 2, 1)\r\n }\r\n};\r\n","export const dilationTimeStudies = [\r\n {\r\n id: 1,\r\n description: \"Unlock Time Dilation\",\r\n cost: 5000,\r\n requirement: () => {\r\n const ttRequirement = Currency.timeTheorems.max.gte(TimeStudy.dilation.totalTimeTheoremRequirement);\r\n if (Ra.unlocks.autoUnlockDilation.canBeApplied &&\r\n ttRequirement &&\r\n !isInCelestialReality() && !Pelle.isDoomed\r\n ) {\r\n return true;\r\n }\r\n const tsRequirement = [231, 232, 233, 234].some(id => TimeStudy(id).isBought);\r\n if (Perk.bypassECDilation.canBeApplied) return tsRequirement;\r\n const ecRequirement = EternityChallenge(11).isFullyCompleted && EternityChallenge(12).isFullyCompleted;\r\n return tsRequirement && ecRequirement && ttRequirement;\r\n }\r\n },\r\n {\r\n id: 2,\r\n description: \"Unlock the 5th Time Dimension\",\r\n cost: 1e6,\r\n requirement: () => PlayerProgress.dilationUnlocked()\r\n },\r\n {\r\n id: 3,\r\n description: \"Unlock the 6th Time Dimension\",\r\n cost: 1e7,\r\n requirement: () => TimeStudy.timeDimension(5).isBought\r\n },\r\n {\r\n id: 4,\r\n description: \"Unlock the 7th Time Dimension\",\r\n cost: 1e8,\r\n requirement: () => TimeStudy.timeDimension(6).isBought\r\n },\r\n {\r\n id: 5,\r\n description: \"Unlock the 8th Time Dimension\",\r\n cost: 1e9,\r\n requirement: () => TimeStudy.timeDimension(7).isBought\r\n },\r\n {\r\n id: 6,\r\n description: () => (Pelle.isDoomed\r\n ? \"You cannot escape a Doomed Reality\"\r\n : \"Unlock Reality\"),\r\n cost: 1,\r\n requirement: () => TimeStudy.timeDimension(8).isBought &&\r\n player.records.thisReality.maxEP.exponent >= 4000 &&\r\n (Perk.firstPerk.isBought || Achievements.preReality.every(a => a.isUnlocked)) &&\r\n !Pelle.isDoomed\r\n }\r\n];\r\n","import { DC } from \"../../../constants\";\r\n\r\nexport const ecTimeStudies = [\r\n {\r\n id: 1,\r\n cost: 30,\r\n requirement: [171],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Eternities\",\r\n current: () => Currency.eternities.value,\r\n required: completions => new Decimal(20000 + Math.min(completions, Enslaved.isRunning ? 999 : 4) * 20000),\r\n formatValue: formatInt\r\n }\r\n },\r\n {\r\n id: 2,\r\n cost: 35,\r\n requirement: [171],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Tickspeed upgrades from Time Dimensions\",\r\n current: () => player.totalTickGained,\r\n required: completions => 1300 + Math.min(completions, 4) * 150,\r\n formatValue: formatInt\r\n }\r\n },\r\n {\r\n id: 3,\r\n cost: 40,\r\n requirement: [171],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"8th Antimatter Dimensions\",\r\n current: () => AntimatterDimension(8).totalAmount,\r\n required: completions => new Decimal(17300 + Math.min(completions, 4) * 1250),\r\n formatValue: value => formatInt(Math.floor(value.toNumber()))\r\n }\r\n },\r\n {\r\n id: 4,\r\n cost: 70,\r\n requirement: [143],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Infinities\",\r\n current: () => Currency.infinitiesTotal.value,\r\n required: completions => new Decimal(1e8 + Math.min(completions, 4) * 2.5e7),\r\n formatValue: value => formatInt(Math.floor(value.toNumber()))\r\n }\r\n },\r\n {\r\n id: 5,\r\n cost: 130,\r\n requirement: [42],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Antimatter Galaxies\",\r\n current: () => player.galaxies,\r\n required: completions => 160 + Math.min(completions, 4) * 14,\r\n formatValue: formatInt\r\n }\r\n },\r\n {\r\n id: 6,\r\n cost: 85,\r\n requirement: [121],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Replicanti Galaxies\",\r\n current: () => player.replicanti.galaxies,\r\n required: completions => 40 + Math.min(completions, 4) * 5,\r\n formatValue: formatInt\r\n }\r\n },\r\n {\r\n id: 7,\r\n cost: 115,\r\n requirement: [111],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"antimatter\",\r\n current: () => Currency.antimatter.value,\r\n required: completions => DC.E300000.pow(Math.min(completions, 4)).times(DC.E500000),\r\n formatValue: value => format(value)\r\n }\r\n },\r\n {\r\n id: 8,\r\n cost: 115,\r\n requirement: [123],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Infinity Points\",\r\n current: () => Currency.infinityPoints.value,\r\n required: completions => DC.E1000.pow(Math.min(completions, 4)).times(DC.E4000),\r\n formatValue: value => format(value)\r\n }\r\n },\r\n {\r\n id: 9,\r\n cost: 415,\r\n requirement: [151],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Infinity Power\",\r\n current: () => Currency.infinityPower.value,\r\n required: completions => DC.E2000.pow(Math.min(completions, 4)).times(DC.E17500),\r\n formatValue: value => format(value)\r\n }\r\n },\r\n {\r\n id: 10,\r\n cost: 550,\r\n requirement: [181],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Eternity Points\",\r\n current: () => Currency.eternityPoints.value,\r\n required: completions => DC.E20.pow(Math.min(completions, 4)).times(DC.E100),\r\n formatValue: value => format(value)\r\n }\r\n },\r\n {\r\n id: 11,\r\n cost: 1,\r\n requirement: [231, 232],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n path: \"Antimatter Dimension\",\r\n forbiddenStudies: [72, 73],\r\n }\r\n },\r\n {\r\n id: 12,\r\n cost: 1,\r\n requirement: [233, 234],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n path: \"Time Dimension\",\r\n forbiddenStudies: [71, 72],\r\n }\r\n }\r\n];\r\n","import { DC } from \"../../../constants\";\r\nimport { CorruptionData } from \"../../../corruption\";\r\nimport { Currency } from \"../../../currency\";\r\n\r\nconst thisInfinityMult = thisInfinity => {\r\n // All \"this inf time\" or \"best inf time\" mults are * 10\r\n const scaledInfinity = thisInfinity.times(10).add(1);\r\n const cappedInfinity = Decimal.min(Decimal.pow(scaledInfinity, 0.125), 500);\r\n return DC.D15.pow(Decimal.log10(scaledInfinity) * cappedInfinity.toNumber());\r\n};\r\nconst passiveIPMult = () => {\r\n const isEffarigLimited = Effarig.isRunning && Effarig.currentStage === EFFARIG_STAGES.ETERNITY;\r\n const normalValue = Perk.studyPassive.isBought ? 1e50 : 1e25;\r\n return isEffarigLimited\r\n ? Math.min(normalValue, Effarig.eternityCap.toNumber())\r\n : normalValue;\r\n};\r\n\r\n\r\n/**\r\n * List of time study specifications and attributes\r\n * {\r\n * @property {Number} id Numerical ID shown for each time study in code and in-game\r\n * @property {Number} cost Amount of available time theorems required to purchase\r\n * @property {Number} STcost Amount of available space theorems required to purchase if needed\r\n * @property {Object[]} requirement Array of Numbers or functions which are checked to determine purchasability\r\n * @property {Number} reqType Number specified by enum in TS_REQUIREMENT_TYPE for requirement behavior\r\n * @property {Number[]} requiresST Array of Numbers indicating which other studies will cause this particular\r\n * study to also cost space theorems - in all cases this applies if ANY in the array are bought\r\n * @property {function: @return String} description Text to be shown in-game for the time study's effects\r\n * @property {function: @return Number} effect Numerical value for the effects of a study\r\n * @property {String[]} cap Hard-coded cap for studies which don't scale forever\r\n * @property {String} formatEffect Formatting function for effects, if the default formatting isn't appropriate\r\n * }\r\n */\r\nexport const normalTimeStudies = [\r\n {\r\n id: 11,\r\n cost: 1,\r\n // All requirements of an empty array will always evaluate to true, so this study is always purchasable\r\n requirement: [],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n description: \"Tickspeed affects 1st Time Dimension with reduced effect\",\r\n effect: () => {\r\n const tickspeed = Tickspeed.current.dividedBy(1000);\r\n const firstPart = tickspeed.pow(0.005).times(0.95);\r\n const secondPart = tickspeed.pow(0.0003).times(0.05);\r\n return firstPart.plus(secondPart).reciprocate();\r\n },\r\n cap: DC.E2500,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 21,\r\n cost: 3,\r\n requirement: [11],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `Improve Replicanti multiplier formula to\r\n (log2(x)${formatPow(2)})+x${formatPow(0.032, 3, 3)}`,\r\n effect: () => Replicanti.amount.pow(0.032),\r\n // This is a special case because the study itself is *added* to the existing formula, but it makes more sense\r\n // to display a multiplicative increase just like every other study. We need to do the calculation in here in order\r\n // to properly show only the effect of this study and nothing else\r\n formatEffect: value => {\r\n const oldVal = Decimal.pow(Decimal.log2(Replicanti.amount.clampMin(1)), 2);\r\n const newVal = oldVal.plus(value);\r\n return formatX(newVal.div(oldVal).clampMin(1), 2, 2);\r\n }\r\n },\r\n {\r\n id: 22,\r\n cost: 2,\r\n requirement: [11],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `Base Replicanti interval limit ${formatInt(50)}ms ➜ ${formatInt(1)}ms`,\r\n effect: 1\r\n },\r\n {\r\n id: 31,\r\n cost: 3,\r\n requirement: [21],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => {\r\n let x = Math.max(1 + (Currency.infinitiesTotal.value.pLog10() / 10000) * Math.pow(Ra.pets.teresa.level, 0.2) / 150, 1);\r\n return BreakInfinityUpgrade.infinitiedMult.chargedEffect.isEffectActive ? `Powers up multipliers that are based on your Infinities (Bonuses ^(${formatInt(4)}^${format(x, 3, 3)}))` : `Powers up multipliers that are based on your Infinities (Bonuses ${formatPow(4)})`\r\n },\r\n effect: () => Math.min(4 ** BreakInfinityUpgrade.infinitiedMult.chargedEffect.effectValue, 1e300)\r\n },\r\n {\r\n id: 32,\r\n cost: 2,\r\n requirement: [22],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: `You gain more Infinities based on Dimension Boosts`,\r\n effect: () => Math.max(DimBoost.totalBoosts, 1),\r\n formatEffect: value => formatX(value, 2)\r\n },\r\n {\r\n id: 33,\r\n cost: 2,\r\n requirement: [22],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"You keep half of your Replicanti Galaxies on Infinity\"\r\n },\r\n {\r\n id: 41,\r\n cost: 4,\r\n requirement: [31],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `All Galaxies give a ${formatX(DC.D1_2, 1, 1)} multiplier to Infinity Points gained`,\r\n effect: () => DC.D1_2.pow(Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 42,\r\n cost: 6,\r\n requirement: [32],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `Antimatter Galaxy requirement increases by ${formatInt(52)}\r\n 8th Dimensions instead of ${formatInt(60)}`,\r\n effect: 52\r\n },\r\n {\r\n id: 51,\r\n cost: 3,\r\n requirement: [41, 42],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `You gain ${formatX(1e15)} more Infinity Points`,\r\n effect: 1e15\r\n },\r\n {\r\n id: 61,\r\n cost: 3,\r\n requirement: [51],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `You gain ${formatX(15)} more Eternity Points`,\r\n effect: 15\r\n },\r\n {\r\n id: 62,\r\n cost: 3,\r\n requirement: [42, () => Perk.bypassEC5Lock.isBought || EternityChallenge(5).completions > 0],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n description: () => `You gain Replicanti ${formatInt(3)} times faster`,\r\n effect: 3\r\n },\r\n {\r\n id: 71,\r\n cost: 4,\r\n requirement: [61, () => Perk.studyECRequirement.isBought || !EternityChallenge(12).isUnlocked],\r\n reqType: TS_REQUIREMENT_TYPE.DIMENSION_PATH,\r\n description: \"Dimensional Sacrifice affects all other Antimatter Dimensions with reduced effect\",\r\n effect: () => Sacrifice.totalBoost.pow(0.25).clampMin(1),\r\n cap: DC.E210000,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 72,\r\n cost: 6,\r\n requirement: [61,\r\n () => Perk.studyECRequirement.isBought ||\r\n (!EternityChallenge(11).isUnlocked && !EternityChallenge(12).isUnlocked)],\r\n reqType: TS_REQUIREMENT_TYPE.DIMENSION_PATH,\r\n description: \"Dimensional Sacrifice affects 4th Infinity Dimension with greatly reduced effect\",\r\n effect: () => Sacrifice.totalBoost.pow(0.04).clampMin(1),\r\n cap: DC.E30000,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 73,\r\n cost: 5,\r\n requirement: [61, () => Perk.studyECRequirement.isBought || !EternityChallenge(11).isUnlocked],\r\n reqType: TS_REQUIREMENT_TYPE.DIMENSION_PATH,\r\n description: \"Dimensional Sacrifice affects 3rd Time Dimension with greatly reduced effect\",\r\n effect: () => Sacrifice.totalBoost.pow(0.005).clampMin(1),\r\n cap: DC.E1300,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 81,\r\n cost: 4,\r\n requirement: [71],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `Base Dimension Boost power becomes ${formatX(10)}`,\r\n effect: 10\r\n },\r\n {\r\n id: 82,\r\n cost: 6,\r\n requirement: [72],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Dimension Boosts affect Infinity Dimensions\",\r\n effect: () => DC.D1_0000109.pow(Math.pow(DimBoost.totalBoosts, 2)),\r\n cap: DC.E1E7,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 83,\r\n cost: 5,\r\n requirement: [73],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Dimension Boost multiplier based on tick upgrades gained from TDs\",\r\n effect: () => DC.D1_0004.pow(player.totalTickGained),\r\n cap: DC.E30,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 91,\r\n cost: 4,\r\n requirement: [81],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Antimatter Dimension multiplier based on time spent in this Eternity\",\r\n effect: () => Decimal.pow10(Decimal.min(Time.thisEternity.totalMinutes, 20).toNumber() * 15),\r\n cap: DC.E300,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 92,\r\n cost: 5,\r\n requirement: [82],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Infinity Dimension multiplier based on fastest Eternity time\",\r\n effect: () => DC.D2.pow(60 / Decimal.max(Time.bestEternity.totalSeconds, 2).toNumber()),\r\n cap: DC.C2P30,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 93,\r\n cost: 7,\r\n requirement: [83],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Time Dimension multiplier based on tick upgrades gained\",\r\n effect: () => Decimal.pow(player.totalTickGained, 0.25).clampMin(1),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 101,\r\n cost: 4,\r\n requirement: [91],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Antimatter Dimension multiplier equal to Replicanti amount\",\r\n effect: () => Decimal.max(Replicanti.amount, 1),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 102,\r\n cost: 6,\r\n requirement: [92],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Replicanti Galaxies boost Replicanti multiplier\",\r\n effect: () => DC.D5.pow(player.replicanti.galaxies),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 103,\r\n cost: 6,\r\n requirement: [93],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Time Dimension multiplier equal to Replicanti Galaxy amount\",\r\n effect: () => Math.max(player.replicanti.galaxies, 1),\r\n formatEffect: value => formatX(value, 2, 0)\r\n },\r\n {\r\n id: 111,\r\n cost: 12,\r\n requirement: [101, 102, 103],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => (Achievement(103).canBeApplied\r\n ? `Make the Infinity Point formula better log(x)/${formatFloat(307.8, 1)} ➜ log(x)/${formatInt(285)}`\r\n : `Make the Infinity Point formula better log(x)/${formatInt(308)} ➜ log(x)/${formatInt(285)}`),\r\n effect: 285\r\n },\r\n {\r\n id: 121,\r\n cost: 9,\r\n STCost: 2,\r\n requirement: [111],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [122, 123],\r\n description: () => (Perk.studyActiveEP.isBought\r\n ? `You gain ${formatX(50)} more Eternity Points`\r\n : `You gain more EP based on how fast your last ten Eternities\r\n were${PlayerProgress.realityUnlocked() ? \" (real time)\" : \"\"}`),\r\n effect: () => (Perk.studyActiveEP.isBought\r\n ? 50\r\n : Math.clamp(250 / Player.averageRealTimePerEternity, 1, 50)),\r\n formatEffect: value => (Perk.studyActiveEP.isBought ? undefined : formatX(value, 1, 1)),\r\n cap: 50\r\n },\r\n {\r\n id: 122,\r\n cost: 9,\r\n STCost: 2,\r\n requirement: [111],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [121, 123],\r\n description: () => (Perk.studyPassive.isBought\r\n ? `You gain ${formatX(50)} more Eternity Points`\r\n : `You gain ${formatX(35)} more Eternity Points`),\r\n effect: () => (Perk.studyPassive.isBought ? 50 : 35)\r\n },\r\n {\r\n id: 123,\r\n cost: 9,\r\n STCost: 2,\r\n requirement: [111],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [121, 122],\r\n description: \"You gain more Eternity Points based on time spent this Eternity\",\r\n effect: () => {\r\n const perkEffect = TimeSpan.fromMinutes(Perk.studyIdleEP.effectOrDefault(0));\r\n const totalSeconds = Time.thisEternity.plus(perkEffect).totalSeconds;\r\n return Decimal.sqrt(totalSeconds.times(1.39));\r\n },\r\n formatEffect: value => formatX(value, 1, 1)\r\n },\r\n {\r\n id: 131,\r\n cost: 5,\r\n STCost: 8,\r\n requirement: [121],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [132, 133],\r\n description: () => (Achievement(138).isUnlocked\r\n ? `You can get ${formatPercents(0.5)} more Replicanti Galaxies`\r\n : `Automatic Replicanti Galaxies are disabled, but you can get ${formatPercents(0.5)} more`),\r\n effect: () => Math.floor(player.replicanti.boughtGalaxyCap / 2)\r\n },\r\n {\r\n id: 132,\r\n cost: 5,\r\n STCost: 8,\r\n requirement: [122],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [131, 133],\r\n description: () => (Perk.studyPassive.isBought && !Pelle.isDoomed\r\n ? `Replicanti Galaxies are ${formatPercents(0.4)} stronger and Replicanti are ${format(3)} times faster`\r\n : `Replicanti Galaxies are ${formatPercents(0.4)} stronger`),\r\n effect: 0.4\r\n },\r\n {\r\n id: 133,\r\n cost: 5,\r\n STCost: 8,\r\n requirement: [123],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [131, 132],\r\n description: () => (Achievement(138).isUnlocked\r\n ? `Replicanti Galaxies are ${formatPercents(0.5)} stronger`\r\n : `Replicanti are ${formatX(10)} slower until ${format(Number.MAX_VALUE, 2)}` +\r\n `, but Replicanti Galaxies are ${formatPercents(0.5)} stronger`),\r\n effect: 0.5\r\n },\r\n {\r\n id: 141,\r\n cost: 4,\r\n STCost: 2,\r\n requirement: [131],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [142, 143],\r\n description: () => (Perk.studyActiveEP.isBought\r\n ? `You gain ${formatX(DC.E45)} more Infinity Points`\r\n : \"Multiplier to Infinity Points, which decays over this Infinity\"),\r\n effect: () => (Perk.studyActiveEP.isBought\r\n ? DC.E45\r\n : DC.E45.divide(thisInfinityMult(Time.thisInfinity.totalSeconds)).clampMin(1)),\r\n formatEffect: value => (Perk.studyActiveEP.isBought ? undefined : formatX(value, 2, 1))\r\n },\r\n {\r\n id: 142,\r\n cost: 4,\r\n STCost: 2,\r\n requirement: [132],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [141, 143],\r\n description: () => `You gain ${formatX(passiveIPMult())} more Infinity Points`,\r\n effect: passiveIPMult,\r\n cap: () => (Effarig.eternityCap === undefined ? undefined : Effarig.eternityCap.toNumber())\r\n },\r\n {\r\n id: 143,\r\n cost: 4,\r\n STCost: 2,\r\n requirement: [133],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [141, 142],\r\n description: \"Multiplier to Infinity Points, which increases over this Infinity\",\r\n effect: () => {\r\n const totalSeconds = Time.thisInfinity.totalSeconds.plus(Perk.studyIdleEP.effectOrDefault(0));\r\n return thisInfinityMult(totalSeconds);\r\n },\r\n formatEffect: value => formatX(value, 2, 1),\r\n cap: () => Effarig.eternityCap\r\n },\r\n {\r\n id: 151,\r\n cost: 8,\r\n requirement: [141, 142, 143],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `${formatX(1e4)} multiplier on all Time Dimensions`,\r\n effect: 1e4\r\n },\r\n {\r\n id: 161,\r\n cost: 7,\r\n requirement: [151],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `${formatX(DC.E616)} multiplier on all Antimatter Dimensions`,\r\n effect: () => DC.E616\r\n },\r\n {\r\n id: 162,\r\n cost: 7,\r\n requirement: [151],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `${formatX(1e11)} multiplier on all Infinity Dimensions`,\r\n effect: 1e11\r\n },\r\n {\r\n id: 171,\r\n cost: 15,\r\n requirement: [161, 162],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `Time Shard requirement for the next Tickspeed upgrade goes up slower\r\n ${formatX(1.33, 0, 2)} ➜ ${formatX(1.25, 0, 2)}`,\r\n effect: () => TS171_MULTIPLIER\r\n },\r\n {\r\n id: 181,\r\n cost: 200,\r\n requirement: [171,\r\n () => EternityChallenge(1).completions > 0 || Perk.bypassEC1Lock.isBought,\r\n () => EternityChallenge(2).completions > 0 || Perk.bypassEC2Lock.isBought,\r\n () => EternityChallenge(3).completions > 0 || Perk.bypassEC3Lock.isBought],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n description: () => `You gain ${formatPercents(0.01)} of your Infinity Points gained on crunch each second`,\r\n effect: () => gainedInfinityPoints().times(CorruptionData.isCorrupted ? 0.01 : Time.deltaTime.div(100))\r\n .timesEffectOf(Ra.unlocks.continuousTTBoost.effects.autoPrestige)\r\n },\r\n {\r\n id: 191,\r\n cost: 400,\r\n requirement: [181, () => EternityChallenge(10).completions > 0],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n description: () => `After Eternity you permanently keep ${formatPercents(0.05)}\r\n of your Infinities as Banked Infinities`,\r\n effect: () => Currency.infinities.value.times(0.05).floor()\r\n },\r\n {\r\n id: 192,\r\n cost: 730,\r\n requirement: [181, () => EternityChallenge(10).completions > 0, () => !Enslaved.isRunning],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n description: () => (Enslaved.isRunning\r\n ? \"There is not enough space in this Reality\"\r\n : `Replicanti can go beyond ${format(replicantiCap(), 2, 1)}, but growth slows down at higher amounts`)\r\n },\r\n {\r\n id: 193,\r\n cost: 300,\r\n requirement: [181, () => EternityChallenge(10).completions > 0],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n description: \"Antimatter Dimension multiplier based on Eternities\",\r\n effect: () => (DC.E13000.pow(Currency.eternities.value.div(1e6).clampMax(1))),\r\n cap: DC.E13000,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 201,\r\n cost: 900,\r\n requirement: [192],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Pick a second path from the Dimension Split\"\r\n },\r\n {\r\n id: 211,\r\n cost: 120,\r\n requirement: [191],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `Dimension Boost requirement scaling is reduced by ${formatInt(5)}`,\r\n effect: 5\r\n },\r\n {\r\n id: 212,\r\n cost: 150,\r\n requirement: [191],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"All Galaxies are stronger based on your Time Shards\",\r\n effect: () => Math.pow(Currency.timeShards.value.clampMin(2).log2(), 0.005),\r\n cap: 1.1,\r\n formatEffect: value => `+${formatPercents(value - 1, 3)}`\r\n },\r\n {\r\n id: 213,\r\n cost: 200,\r\n requirement: [193],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `You gain Replicanti ${formatInt(20)} times faster`,\r\n effect: 20\r\n },\r\n {\r\n id: 214,\r\n cost: 120,\r\n requirement: [193],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Dimensional Sacrifice boosts the 8th Antimatter Dimension even more\",\r\n effect: () => {\r\n const totalBoost = Sacrifice.totalBoost;\r\n const firstPart = totalBoost.pow(7.6).clampMaxExponent(44000);\r\n const secondPart = totalBoost.pow(1.05).clampMaxExponent(120000);\r\n return firstPart.times(secondPart);\r\n },\r\n cap: DC.E164000,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 221,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [211],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [222],\r\n description: \"Time Dimension multiplier based on Dimension Boosts\",\r\n effect: () => DC.D1_0025.pow(DimBoost.totalBoosts),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 222,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [211],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [221],\r\n description: () => `Dimension Boost costs scale by another ${formatInt(2)} less`,\r\n effect: 2\r\n },\r\n {\r\n id: 223,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [212],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [224],\r\n description: () => `Distant Galaxy cost scaling starts ${formatInt(7)} Galaxies later`,\r\n effect: 7\r\n },\r\n {\r\n id: 224,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [212],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [223],\r\n description() {\r\n const effect = TimeStudy(224).effectValue;\r\n return `Distant Galaxy cost scaling starts ${quantifyInt(\"Galaxy\", effect)} later\r\n (${formatInt(1)} per ${formatInt(2000)} Dim Boosts)`;\r\n },\r\n effect: () => Math.floor(DimBoost.totalBoosts / 2000)\r\n },\r\n {\r\n id: 225,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [213],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [226],\r\n description: \"You gain extra Replicanti Galaxies based on Replicanti amount\",\r\n effect: () => Math.floor(Replicanti.amount.exponent / 1000),\r\n formatEffect: value => `+${formatInt(value)} RG`\r\n },\r\n {\r\n id: 226,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [213],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [225],\r\n description: \"You gain extra Replicanti Galaxies based on their max\",\r\n effect: () => Math.floor(player.replicanti.boughtGalaxyCap / 15),\r\n cap: 1000000,\r\n formatEffect: value => `+${formatInt(value)} RG`\r\n },\r\n {\r\n id: 227,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [214],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [228],\r\n description: \"Dimensional Sacrifice affects 4th Time Dimension with reduced effect\",\r\n effect: () => Math.max(Math.pow(Sacrifice.totalBoost.pLog10(), 10), 1),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n id: 228,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [214],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [227],\r\n description: () => `Dimensional Sacrifice formula scales better\r\n ${Sacrifice.getSacrificeDescription({ \"TimeStudy228\": false })} ➜\r\n ${Sacrifice.getSacrificeDescription({ \"TimeStudy228\": true })}`,\r\n effect: 0.2\r\n },\r\n {\r\n id: 231,\r\n cost: 500,\r\n STCost: 5,\r\n requirement: [221, 222],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [232],\r\n description: \"Dimension Boosts are stronger based on their amount\",\r\n effect: () => Decimal.pow(DimBoost.totalBoosts, 0.3).clampMin(1),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n id: 232,\r\n cost: 500,\r\n STCost: 5,\r\n requirement: [223, 224],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [231],\r\n description: \"All Galaxies are stronger based on Antimatter Galaxies\",\r\n effect: () => Math.pow(1 + player.galaxies / 1000, 0.2),\r\n formatEffect: value => `+${formatPercents(value - 1, 3)}`\r\n },\r\n {\r\n id: 233,\r\n cost: 500,\r\n STCost: 5,\r\n requirement: [225, 226],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [234],\r\n description: \"Max Replicanti Galaxy upgrade is cheaper based on current Replicanti\",\r\n effect: () => (((Replicanti.amount).clampMin(1)).pow(0.3)),\r\n formatEffect: value => `/ ${format(value, 1, 2)}`\r\n },\r\n {\r\n id: 234,\r\n cost: 500,\r\n STCost: 5,\r\n requirement: [227, 228],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [233],\r\n description: \"Dimensional Sacrifice applies to 1st Antimatter Dimension\",\r\n effect: () => Sacrifice.totalBoost,\r\n },\r\n // Note: These last 4 entries are the triad studies\r\n {\r\n id: 301,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 1, 221, 222, 231],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [221, 222, 231],\r\n description: \"Time Study 231 improves the effect of Time Study 221\",\r\n effect: () => TimeStudy(221).effectValue.pow(TimeStudy(231).effectValue.minus(1)).clampMin(1),\r\n formatEffect: value => formatX(value, 2, 1),\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 1\r\n },\r\n {\r\n id: 302,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 2, 223, 224, 232],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [223, 224, 232],\r\n description: () => `Distant Galaxy scaling threshold starts another ${formatInt(3000)} Antimatter Galaxies later`,\r\n effect: 3000,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 2\r\n },\r\n {\r\n id: 303,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 3, 225, 226, 233],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [225, 226, 233],\r\n description: () => `Gain ${formatPercents(0.5)} more extra Replicanti Galaxies from Time Studies 225 and 226,\r\n and from Effarig's Infinity`,\r\n effect: 1.5,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 3\r\n },\r\n {\r\n id: 304,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 4, 227, 228, 234],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [227, 228, 234],\r\n description: \"Dimensional Sacrifice multiplier is squared\",\r\n effect: 2,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 4\r\n },\r\n //sxy's new Triad studies\r\n {\r\n id: 305,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 5, 21],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [21],\r\n description: \"Infinity Point gain is boosted by unspent Multiversal Remains\",\r\n effect: () => {\r\n let x = Decimal.pow(Currency.mendingPoints.value,Decimal.log(Currency.mendingPoints.value,1.00000001)).pow(500000).clampMin(1);\r\n if(CorruptionData.isCorrupted) x=Decimal.pow(Decimal.log2(x.plus(1)),20);\r\n return x\r\n },\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 5,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 306,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 6, 41],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [41],\r\n description: \"Multiply Memory gain based on amount of Galaxies.\",\r\n effect: () => new Decimal(1.000002).pow(Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies),\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 6,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 311,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 7, 101],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [101],\r\n description: \"Antimatter Dimension multiplier based on total Space Theorems.\",\r\n effect: () => {\r\n let x = Decimal.pow(V.spaceTheorems,V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).max(1);\r\n if(CorruptionData.isCorrupted) x=Decimal.pow(Decimal.log2(x.plus(1)),20);\r\n return x;\r\n },\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 7,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 312,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 8, 102],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [102],\r\n description: \"Infinity Dimension multiplier based on total Space Theorems.\",\r\n effect: () => {\r\n let x = Decimal.pow(V.spaceTheorems,V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).max(1)\r\n if(CorruptionData.isCorrupted) x=Decimal.pow(Decimal.log2(x.plus(1)),20);\r\n return x;\r\n },\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 8,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 313,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 9, 103],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [103],\r\n description: \"Time Dimension multiplier based on total Space Theorems.\",\r\n effect: () => {\r\n let x = Decimal.pow(V.spaceTheorems,V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).max(1)\r\n if(CorruptionData.isCorrupted) x=Decimal.pow(Decimal.log2(x.plus(1)),20);\r\n return x;\r\n },\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 9,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 307,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 10, 111],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [111],\r\n description: `Make the Eternity Point formula better log(x)/y ➜ log(x)/(y-30)`,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 10,\r\n effect: 30\r\n },\r\n {\r\n id: 321,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 11, 141],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [141],\r\n description: \"Multiplier to Multiversal Remains, which decays over this Mend (real time)\",\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 11,\r\n effect: () => (Decimal.log10(DC.E45.divide(thisInfinityMult(Time.thisMendRealTime.totalSeconds))).toDecimal().clampMin(1)),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 322,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 12, 142],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [142],\r\n description: `You gain ×35 more Multiversal Remains`,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 12,\r\n effect: new Decimal(35)\r\n },\r\n {\r\n id: 323,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 13, 143],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [143],\r\n description: \"Multiplier to Multiversal Remains, which increases over this Mend (real time)\",\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 13,\r\n effect: () => {\r\n const totalSeconds = Time.thisMendRealTime.totalSeconds;\r\n return Decimal.log10(thisInfinityMult(totalSeconds).clampMin(1));\r\n },\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 308,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 14, 151],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [151],\r\n description: () => `${formatX(1e4)} multiplier on all Dark Matter Dimensions (Both DM and DE)`,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 14,\r\n effect: 1e4\r\n },\r\n {\r\n id: 309,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 15, 171],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [171],\r\n description: `Time Shard requirement for the next Tickspeed upgrade goes up even slower\r\n ×1.25 ➜ ×1.20`,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 15,\r\n effect: TS309_MULTIPLIER\r\n //↑Fun fact is that Glyph's Time Shard power effect once is related to the number itself\r\n //however it looks like the effect changed later so making this multiplier a general constant is not necessary now.\r\n },\r\n {\r\n id: 310,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 16, 192],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [192],\r\n description: `Replicanti increases the purchase hardcap of Infinity and Time Dimensions`,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 16,\r\n effect: 20\r\n },\r\n\r\n // Myriad Studies start here\r\n {\r\n id: 401,\r\n cost: 0,\r\n STCost: 302,\r\n requirement: [() => Ra.unlocks.unlockMyriads.effectOrDefault(0) >= 1, () => TimeStudy.reality.isBought],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: ['reality'],\r\n description: () => `Antimatter makes all Galaxies much stronger`,\r\n effect: () => {\r\n const x = Math.log10(Currency.antimatter.exponent+1)*0.5;\r\n return x;\r\n },\r\n unlocked: () => Ra.pets.v.level >= 90,\r\n formatEffect: value => `+${formatPercents(value, 4)}`\r\n },\r\n {\r\n id: 402,\r\n cost: 0,\r\n STCost: 302,\r\n requirement: [() => Ra.unlocks.unlockMyriads.effectOrDefault(0) >= 2, () => TimeStudy.reality.isBought],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: ['reality'],\r\n description: `Infinity Points adds Infinity power conversion`,\r\n effect: () => Math.log10(Math.log(Currency.infinityPoints.exponent+1)/Math.log(1.000000001))/1.75,\r\n formatEffect: value => `+${format(value,2,2)}`,\r\n unlocked: () => Ra.pets.v.level >= 92\r\n },\r\n {\r\n id: 403,\r\n cost: 0,\r\n STCost: 302,\r\n requirement: [() => Ra.unlocks.unlockMyriads.effectOrDefault(0) >= 3, () => TimeStudy.reality.isBought],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: ['reality'],\r\n description: `Eternity Points increase Time Shard softcap massively`,\r\n effect: () => Math.pow(Math.log10(Currency.eternityPoints.exponent+1),5.5),\r\n formatEffect: value => `+${formatInt(value)}`,\r\n unlocked: () => Ra.pets.v.level >= 94\r\n },\r\n {\r\n id: 411,\r\n cost: 0,\r\n STCost: 302,\r\n requirement: [() => Ra.unlocks.unlockMyriads.effectOrDefault(0) >= 4, 401],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [401],\r\n description: `Antimatter boosts 1st Antimatter Dimension Multiplier`,\r\n effect: () => {\r\n let baseExp = Math.log10(Math.max(Currency.antimatter.exponent,1));\r\n let Exponent = baseExp/4 + 15;\r\n let answer = Decimal.pow(10,Decimal.pow(10,Exponent));\r\n return answer\r\n },\r\n formatEffect: value => formatX(value, 0, 3),\r\n unlocked: () => Ra.pets.v.level >= 96\r\n },\r\n {\r\n id: 412,\r\n cost: 0,\r\n STCost: 302,\r\n requirement: [() => Ra.unlocks.unlockMyriads.effectOrDefault(0) >= 5, 402],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [402],\r\n description: `Infinity Points boosts 1st Infinity Dimension Multiplier`,\r\n effect: () => {\r\n let baseExp = Math.log10(Math.max(Currency.infinityPoints.exponent,1));\r\n let Exponent = baseExp/5 + 15.5;\r\n let answer = Decimal.pow(10,Decimal.pow(10,Exponent));\r\n return answer\r\n },\r\n formatEffect: value => formatX(value, 0, 3),\r\n unlocked: () => Ra.pets.v.level >= 98\r\n },\r\n {\r\n id: 413,\r\n cost: 0,\r\n STCost: 302,\r\n requirement: [() => Ra.unlocks.unlockMyriads.effectOrDefault(0) >= 6, 403],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [403],\r\n description: `Eternity Points boosts 1st Time Dimension Multiplier`,\r\n effect: () => {\r\n let baseExp = Math.log10(Math.max(Currency.infinityPoints.exponent,1));\r\n let Exponent = baseExp/4 + 12.5;\r\n let answer = Decimal.pow(10,Decimal.pow(10,Exponent));\r\n return answer\r\n },\r\n formatEffect: value => formatX(value, 0, 3),\r\n unlocked: () => Ra.pets.v.level >= 100\r\n },\r\n];\r\n","import { dilationUpgrades } from \"./dilation-upgrades\";\r\nimport { eternityMilestones } from \"./eternity-milestones\";\r\nimport { eternityUpgrades } from \"./eternity-upgrades\";\r\n\r\nimport { dilationTimeStudies } from \"./time-studies/dilation-time-studies\";\r\nimport { ecTimeStudies } from \"./time-studies/ec-time-studies\";\r\nimport { normalTimeStudies } from \"./time-studies/normal-time-studies\";\r\n\r\nexport const eternity = {\r\n dilation: dilationUpgrades,\r\n milestones: eternityMilestones,\r\n timeStudies: {\r\n dilation: dilationTimeStudies,\r\n ec: ecTimeStudies,\r\n normal: normalTimeStudies\r\n },\r\n upgrades: eternityUpgrades\r\n};\r\n","import { DC } from \"../constants\";\r\n\r\nimport { credits } from \"@/core/secret-formula/credits\";\r\n\r\nexport const h2p = {\r\n /**\r\n * @template\r\n * {\r\n * @property {String} name Internal name for the tab entry\r\n * @property {String} alias Display name for the tab; if not present, will use the internal name\r\n * @property {Number} id Unique ID for each entry (generated in-game, not explicitly stated)\r\n * @property {function: @return String} info Text body of information for the entry\r\n * @property {function: @return Boolean} isUnlocked Condition for when the entry is visible and searchable\r\n * @property {Array: String} tags List of keywords which are linked to this tab in the search function\r\n * @property {String} tab Key of a tab+subtab combination which will default the h2p to this entry if opened\r\n * }\r\n */\r\n tabs: [\r\n {\r\n name: \"This Modal\",\r\n info: () => `\r\nWelcome to the How to Play!\r\n
\r\n
\r\nThis modal (pop-up window) contains in-depth explanations and additional details for everything you will encounter\r\nas you progress through the game. As you unlock new features and mechanics, you will also gain access to additional\r\npages here. If you ever feel lost or confused about how something in the game works, you may find a helpful\r\nexplanation within the related entry in here. \r\n
\r\n
\r\nFor now, opening the How to Play will always start you on this page. After you get your first Dimension Boost,\r\nopening this modal will instead place you on the How to Play entry most relevant to the game content on your currently\r\nvisible tab and subtab, if such an entry exists.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"h2p\", \"how\", \"to\", \"play\", \"modal\"],\r\n tab: \"\"\r\n },\r\n {\r\n name: \"Your savefile\",\r\n info: () => `\r\nYour game's save data is stored on your computer's browser data if you are playing on a web browser, or in your Steam\r\ninstallation folder if you are playing on Steam. This means that clearing your browser's cache or cookies, or fully\r\nuninstalling the game from Steam will also delete your save file.\r\nSimilarly, if you are playing in a private or incognito window, your save\r\nwill not be there the next time you open up your browser. The saves are browser-specific as well, so for example\r\nif you play the game on Chrome, you will not find your save on Firefox. Lastly, any saves you have on the web version\r\nand the Steam version will also be completely independent from each other.\r\n
\r\n
\r\nYou can transfer your save between places by using the export function, which will copy a very long string of\r\nrandom-looking characters into your clipboard. That text contains your save data, which you can load back into the\r\ngame by pasting it into the text box on the import prompt. You need the entirety of the save text for importing to\r\nwork properly, or else the game might not recognize the text as a valid save. Certain messaging applications may\r\ncut off part of the text if you are using one to transfer the save between devices.\r\n
\r\n
\r\nA properly-formatted save string from the Reality update will start with\r\n${GameSaveSerializer.startingString.savefile} and end with ${GameSaveSerializer.endingString.savefile}.\r\nIf you are importing from a version of the game from before Reality was released, it will instead start with eyJ\r\nand end with In19, fX0=, or fQ==. If neither of these are the case, then part of your save is\r\nmissing and it will fail to import. In addition to importing and exporting to your clipboard, you can also import\r\nand export from text files as well.\r\n
\r\nYou can use the \"Choose save\" button to pick between three separate saves on your browser. These saves are, for most\r\nintents and purposes, completely separate from each other. Importing and exporting will only affect the current save\r\nslot. The only exception is clearing your browser or Steam data, in which case all three saves will be reset.\r\n
\r\n
\r\nThe game automatically saves periodically, by default once every ${formatInt(30)} seconds.\r\nKeep this in mind if you need to close the game - anything you\r\ndo right before closing it might not be saved unless you wait for the autosave interval or manually save again. The\r\nlength of the autosave interval is adjustable, and its timer can be seen in the bottom-left of the screen.\r\n
\r\n
\r\nBackups of your savefile are also saved after certain amounts of time online or offline, which you can examine and\r\nreload at any point by clicking the \"Open Automatic Save Backup Menu\" button. These backups may be useful if you wish\r\nto revert your save to what it looked like some time in the past, such as a few minutes ago or when you were last\r\noffline for a while.\r\n
\r\n
\r\nYou can also connect a Google Account to the game, allowing you to save your progress online. This allows you to play\r\nwith the same save on any device which is also logged into the same account. Cloud saving is only compatable with other\r\nsaves on the web or Steam versions of the game; saves from the Android app of the game will not be automatically linked\r\nvia Cloud saving. Saving and loading from the Cloud will\r\nautomatically overwrite the other save unless the other save is either older or has noticeably more progression, in\r\nwhich case a modal will appear which asks you which save you want to keep.\r\n
\r\n
\r\nYou can completely reset your save at any point if desired by clicking the button, which brings up a prompt you need\r\nto fill out in order to make sure you intentionally wanted to reset. Going through with this reset will only clear\r\nyour current save; the other save slots will be unaffected. Resetting your game in this way is completely\r\nirreversible and gives you no permanent benefits, secret or otherwise.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"choose\", \"cloud\", \"google\", \"save\", \"import\", \"export\", \"reset\"],\r\n tab: \"options/saving\"\r\n },\r\n {\r\n name: \"Customization\",\r\n info: () => `\r\nThe game has two different UI layouts - the Classic UI maintains the style of Antimatter Dimensions from before the\r\nReality update, while the Modern UI is a redesign based on more modern dark theme styles. Additionally, there are\r\nvarious themes which can be applied to modify the appearance of everything in the game. There are a few secret themes\r\nwhich can be unlocked through importing certain phrases. Both UI layouts support all the different possible themes.\r\n
\r\n
\r\nThe notation used to display numbers in the game defaults to Mixed Scientific, but can be changed to one of numerous\r\noptions in the drop-down menu. Many of these notations are intended as jokes and in some cases will format numbers\r\nin a way that causes text to spill over into other parts of the screen - this is not a bug. \"Exponent formatting\" is\r\na setting affecting some notations which lets you toggle between showing the number in an exponent itself (with commas\r\nevery three digits) or also applying the notation formatting to the exponent. Note that notation formatting is forced\r\nwhen exponents are larger than ${format(DC.E9)}.\r\n
\r\n
\r\nMany events in the game trigger full-screen animations or pop-up modals which require you to confirm that you want to\r\ncontinue. Most of these animations and confirmations can be disabled on an individual basis through the options,\r\nalthough the ability to disable any given animation or confirmation will only appear after they have already shown up\r\nat least once.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"UI\", \"update\", \"news\", \"theme\", \"notation\", \"comma\", \"exponent\", \"animation\", \"retry\", \"confirmation\",\r\n \"offline\", \"hotkey\", \"classic\", \"modern\"],\r\n tab: \"options/visual\"\r\n },\r\n {\r\n name: \"Offline Progress\",\r\n info: () => `\r\nAntimatter Dimensions has a catch-up mechanic which attempts to simulate the game's behavior if the game is closed for\r\nan extended period of time. The simulation behavior is only somewhat accurate, as the game is too mathematically\r\ncomplicated to be run at full accuracy in a reasonable amount of time. At the end of the simulation, the game will\r\nsummarize how various relevant resources have changed while you were gone.\r\n
\r\n
\r\nIf the game is left open and becomes unfocused or otherwise suspended for an extended period of time, it will attempt\r\nto apply the missed time as offline progress when you return. This can be potentially unreliable, as different devices\r\nhandle these situations differently. If this results in undesirable behavior, there is a toggle to turn this off in the\r\noptions - in that case the game will try to apply all the missed time in a single tick.\r\n
\r\n
\r\nThe game runs on a system where everything is updated once per tick - all Dimensions and resources do one unit of\r\nproduction, all autobuyers trigger once, all multipliers and values are changed accordingly, and all the displayed\r\nnumbers are updated. By default there are ${formatInt(20)} ticks per second when the game is running, although this can\r\nbe modified by changing the \"Update rate\" within the game Options.\r\nYour current settings will run the game at ${format(1000 / player.options.updateRate, 2, 1)} ticks per second on\r\naverage, although lag and internal javascript behavior may cause individual ticks to vary by a few percent.\r\n
\r\n
\r\nWhen offline simulation is active, these ticks have an adjusted length in order to fill the amount of time you were\r\naway - for example having a setting for ${formatInt(1000)} offline ticks and closing the game for an hour will result in\r\nticks which are ${format(3.6, 1, 1)} seconds long each. For most things in the game, this is not an issue because this\r\nwill still result in approximately the same amount of resources after the simulation completes. A notable exception is\r\nautobuyers - in this situation autobuyers will effectively only trigger once every ${format(3.6, 1, 1)} seconds, which\r\nmay have a strong impact depending on the part of the game.\r\n
\r\n
\r\n${player.blackHole[0].unlocked\r\n ? `Offline Black Hole behavior: Once the Black Hole has been unlocked, the offline progress simulation will\r\n attempt to run the game in a way where each tick contains roughly the same amount of game time. This may\r\n give the appearance of the Black Hole(s) being active for a much larger fraction of time than normal while\r\n simulating, when in fact the game is running active periods more slowly and \"skipping past\" the inactive periods\r\n because they contribute much less production per real time. This results in behavior which is generally in your\r\n favor when compared to ticks with constant real time.\r\n
\r\n
`\r\n : \"\"\r\n}\r\nOffline tick count can be adjusted between ${formatInt(500)} and ${formatInt(DC.E6)} ticks. Smaller counts will result\r\nin faster but less accurate simulations, while larger counts will result in more accurate simulations which take longer\r\nto complete. There is a limit of one day of time per game tick, meaning there are some rare situations (such as not\r\nplaying the game for more than a year) where you may not get all of the time you were away.\r\n
\r\n
\r\nOffline progress can be disabled entirely if desired, for example for diagnostic or timing purposes, or in order\r\nto do an \"online only\" playthrough of the game. Otherwise, offline progress is on by default from the very beginning\r\nof the game. Note that if offline progress is disabled, the statistic for total time played will also be paused while\r\nthe game closed.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"offline\", \"away\", \"progress\"],\r\n tab: \"options/gameplay\"\r\n }, {\r\n name: \"Effect Stacking\",\r\n info: () => `\r\nMost of the effects and upgrades in Antimatter Dimensions largely fall into three categories:\r\n
\r\n- Additive: These effects are typically denoted with a + (or the word \"increase\") followed by a number,\r\nand add their value to some\r\nbase amount. Multiple additive effects are summed up. These can also sometimes show up as subtractive effects which\r\nreduce resource costs.\r\n
\r\n- Multiplicative: These effects are shown either by a × (or the word \"multiply\") followed by a number or,\r\nmore rarely, as two numbers\r\nseparated by a ➜. Different multiplicative sources always combine by multiplying, never by adding. In some situations,\r\nthere may be negative effects or cost reductions that apply in this category as division.\r\n
\r\n- Power: These effects are much rarer and appear as ^ followed by a number. Multiple power effects apply\r\nsequentially, or equivalently by multiplying the values of the power effects together and applying the final value\r\nas a single power. In rare situations, negative effects may apply here in this category as powers which are less\r\nthan ${formatInt(1)}.\r\n
\r\n
\r\nUnless otherwise noted when an upgrade or reward replaces an older value, all of these effects stack\r\nwith each other. In the case of an upgrade replacing an older value with a newer value, the replacement occurs before\r\nany of the above effects are applied. To determine the final value of a set of effects, the effects from each category\r\nare individually combined, and then applied in the order of additive, multiplicative, then power effects.\r\n
\r\n
\r\n${PlayerProgress.realityUnlocked() || PlayerProgress.dilationUnlocked()\r\n ? \"Dilation and any Dilation-like effects apply after all of these other effects are stacked together.\"\r\n : \"\"}\r\n
\r\n
\r\n${PlayerProgress.realityUnlocked()\r\n ? `Glyph Effects effectively have two stacking attributes; their internal way of stacking together and the way\r\n they stack with all other game effects. These may not necessarily be the same - for example, the \"Antimatter\r\n Dimension Power\" effect will stack additively with itself, but then the total effect will be added to\r\n a base value of ${formatInt(1)} and then applied as a power effect to Antimatter Dimensions.`\r\n : \"\"}\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"effect\", \"stack\", \"combine\", \"add\", \"reduce\", \"multiply\", \"divide\", \"power\", \"dilation\", \"glyph\"],\r\n tab: \"options/gameplay\"\r\n }, {\r\n name: \"Common Abbreviations\",\r\n info: () => `\r\nMany resources within the game may appear in an abbreviated format as text in order to save space. This How to\r\nPlay entry will update itself with additional entries for new resources as you encounter them for the first time.\r\n
\r\n- AM: Antimatter
\r\n- AD: Antimatter Dimension
\r\n- AG: Antimatter Galaxy
\r\n${PlayerProgress.infinityUnlocked() ? \"- IP: Infinity Point
\" : \"\"}\r\n${PlayerProgress.infinityUnlocked() ? \"- NC: Normal Challenge
\" : \"\"}\r\n${PlayerProgress.infinityUnlocked() ? \"- IC: Infinity Challenge
\" : \"\"}\r\n${InfinityDimension(1).isUnlocked || PlayerProgress.eternityUnlocked() ? \"- ID: Infinity Dimension
\" : \"\"}\r\n${PlayerProgress.replicantiUnlocked() ? \"- RG: Replicanti Galaxy
\" : \"\"}\r\n${PlayerProgress.eternityUnlocked() ? \"- EP: Eternity Point
\" : \"\"}\r\n${PlayerProgress.eternityUnlocked() ? \"- TT: Time Theorem
\" : \"\"}\r\n${PlayerProgress.eternityUnlocked() ? \"- TD: Time Dimension
\" : \"\"}\r\n${PlayerProgress.eternityUnlocked() ? \"- EC: Eternity Challenge
\" : \"\"}\r\n${PlayerProgress.dilationUnlocked() ? \"- TP: Tachyon Particle
\" : \"\"}\r\n${PlayerProgress.dilationUnlocked() ? \"- DT: Dilated Time
\" : \"\"}\r\n${PlayerProgress.dilationUnlocked() ? \"- TG: Tachyon Galaxy
\" : \"\"}\r\n${PlayerProgress.realityUnlocked() ? \"- RM: Reality Machine
\" : \"\"}\r\n${PlayerProgress.realityUnlocked() ? \"- AP: Automator Point
\" : \"\"}\r\n${PlayerProgress.realityUnlocked() ? \"- BH: Black Hole
\" : \"\"}\r\n${MachineHandler.isIMUnlocked ? \"- iM: Imaginary Machine
\" : \"\"}\r\n${Laitela.isUnlocked ? \"- DM: Dark Matter
\" : \"\"}\r\n${Laitela.isUnlocked ? \"- DE: Dark Energy
\" : \"\"}\r\n${PlayerProgress.mendingUnlocked() ? \"- MvR: Mulitversal Remain
\" : \"\"}\r\n${PlayerProgress.mendingUnlocked() ? \"- MUx: Mending Upgrade x
\" : \"\"}\r\n${PlayerProgress.mendingUnlocked() ? \"- xMM: x Mend Milestone
\" : \"\"}\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"abbreviation\", \"shorten\", \"am\", \"ad\", \"ag\", \"ip\", \"nc\", \"ic\", \"id\", \"rg\", \"ep\", \"tt\", \"td\", \"ec\", \"tp\",\r\n \"dt\", \"tg\", \"rm\", \"ap\", \"bh\", \"im\", \"dm\", \"de\"],\r\n tab: \"\"\r\n }, {\r\n name: \"Antimatter Dimensions\",\r\n info: () => `\r\nAntimatter is a resource that is used throughout the entire game for purchasing various things as you progress. You\r\nstart with ${formatInt(10)} antimatter when you first open the game, and you can\r\nspend it to buy the 1st Antimatter Dimension to start the game.\r\n
\r\n
\r\nAntimatter Dimensions are your production units in game. The 1st Antimatter Dimension produces your antimatter.\r\nEach consecutive Antimatter Dimension produces the previous one, allowing you to have steady growth.\r\nThere are eight Antimatter Dimensions total.\r\n
\r\n
\r\nDimension Multiplier: Beside the Dimension there is a multiplier (example: 1st Dimension ${formatX(1, 1, 1)}).\r\nThe base production of each Dimension is multiplied by this number.\r\nThis multiplier increases by ${formatX(2)} for every ${formatInt(10)} of that Dimension purchased.\r\nEach time this occurs, the price of the dimension will increase.\r\n
\r\n
\r\nAccumulated Dimension Quantity: The next column is your current amount of that Dimension you own.\r\nThis is a combination of how many you have purchased with antimatter,\r\nas well as produced from the higher Dimension.\r\n
\r\n
\r\nPurchased Dimensions Quantity: Next to each accumulated quantity of owned Dimensions,\r\nthe amount of that Dimension purchased toward the next multiplier upgrade is displayed in brackets.\r\nFor example if you have (${formatInt(4)}) next to your accumulated dimension quantity,\r\nyou will need ${formatInt(6)} more of that dimension for the next multiplier increase.\r\n
\r\n
\r\nDimension Growth Percent: This number represents the amount of growth that each\r\nDimension experiences per second. ${formatPercents(1)} means the dimension is doubling each second.\r\nThis allows you to judge overall growth.\r\n
\r\n
\r\nCost & until ${formatInt(10)}:\r\nYou can buy a single quantity of each Dimension with antimatter when the cost button is highlighted.\r\nAlternatively, if the Until ${formatInt(10)} button is highlighted,\r\nyou can buy whatever quantity gets you to that Dimension's next Dimension multiplier.\r\n
\r\n
\r\nMax all: Max all will buy until ${formatInt(10)} of the 1st Antimatter Dimension until it cannot anymore,\r\nthen second, and so on until the 8th Antimatter Dimension, and then buy max Tickspeed Upgrades.\r\n
\r\n
\r\nDimension base prices: ${Array.range(1, 8)\r\n .map(tier => format(AntimatterDimension(tier)._baseCost, 2, 2))\r\n .join(\", \")}\r\n
\r\nBase per ${formatInt(10)} bought dimension price increases: ${Array.range(1, 8)\r\n .map(tier => format(AntimatterDimension(tier)._baseCostMultiplier, 2, 2))\r\n .join(\", \")}\r\n
\r\n
\r\nHotkeys: 1, 2, 3, 4, 5, 6, 7, 8 for buy until ${formatInt(10)} Xth Dimension\r\n(you can also hold down Shift while buying Dimensions, which will only buy\r\n${formatInt(1)} instead of ${formatInt(10)}), M for Max all\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"dims\", \"normal\", \"antimatter\", \"ad\"],\r\n tab: \"dimensions/antimatter\"\r\n }, {\r\n name: \"Tickspeed\",\r\n info: () => `\r\nProduction in the game happens on each \"tick\", which initially occurs once per second. By buying Tickspeed Upgrades,\r\nyou can make your Antimatter Dimensions produce faster, as if multiple ticks occur in each second.\r\n
\r\n
\r\nTickspeed: This states how many game ticks are occurring every second. Fractional ticks are accounted for,\r\nboosting production as if part of a game tick has passed. Note that the actual tickspeed time is simulated and the\r\ngame always runs calculations at the update rate you've chosen in the Options tab.\r\n
\r\n
\r\nCost: The cost of antimatter for multiplying ticks/sec by the displayed multiplier.\r\n(without any Galaxies, this is ${formatX(1.1245, 0, 3)} per purchase)\r\n
\r\n
\r\nBuy Max: This will buy the maximum amount of Tickspeed Upgrades available\r\nwith your current amount of antimatter.\r\n
\r\n
\r\nHotkeys: T will purchase as many Tickspeed Upgrades as possible, or Shift+T to buy a single upgrade.\r\nM for Max all.\r\n`,\r\n isUnlocked: () => Tickspeed.isUnlocked,\r\n tags: [\"dimension\", \"earlygame\", \"time\"],\r\n tab: \"dimensions/antimatter\"\r\n }, {\r\n name: \"Dimension Boosts\",\r\n info: () => `\r\nDimension Boost: This resets your antimatter and all of your Antimatter Dimensions, but unlocks another\r\nAntimatter Dimension for you to purchase and boosts your Dimension multipliers.\r\nThe 1st Dimension Boost requires ${formatInt(20)} 4th Dimensions, the 2nd requires ${formatInt(20)} 5th Dimensions, etc.\r\nAfter unlocking all ${formatInt(8)} Dimensions,\r\nevery additional boost will cost ${formatInt(15)} more 8th Dimensions than the previous Boost and will no longer\r\nunlock a Dimension, but will continue to increase your Dimension multipliers.\r\n
\r\n
\r\nYou gain a ${formatX(2)} multiplier to the 1st Dimension for every Dimension Boost you have. Each higher\r\nDimension will have the multiplier applied one less time as the previous, down to a minimum of ${formatInt(0)}.\r\nFor example, with ${formatInt(3)} Boosts, the 1st Dimension will gain ${formatX(8)}, the 2nd Dimension ${formatX(4)},\r\nthe 3rd Dimension ${formatX(2)}, and all other Dimensions are unaffected.\r\n
\r\n
\r\nDimension Shift/Warp/Jump:` + ` Beyond ${format(DimBoost.shiftStart)} dimension boosts, they will be converted into Dimensions Shifts and costs will begin to scale.\r\n Continuing beyond ${format(DimBoost.warpStart)} will conver them to warp, which scale faster than shifts, and continuing beyond ${format(DimBoost.scaleStart)} will\r\n cause them to convert to jumps, which scale even faster than warps and shifts.\r\n
\r\n
\r\nHotkey: D will try to purchase a Dimension Boost.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"dimboost\", \"reset\", \"earlygame\"],\r\n tab: \"dimensions/antimatter\"\r\n }, {\r\n name: \"Antimatter Galaxies\",\r\n info: () => `\r\nPurchasing an Antimatter Galaxy will reset your game back to the point where only ${formatInt(4)} Dimensions are\r\navailable, but will increase the effect of your Tickspeed Upgrades by +${format(0.02, 0, 2)} for your first two\r\nGalaxies. As you get more Galaxies, the multiplier will continue becoming stronger and stronger.\r\n
\r\n
\r\nThough it will have very little impact for the first few Tickspeed purchases,\r\nthe increase is multiplicative and will not take long to be visible.\r\n
\r\n
\r\nYour first Antimatter Galaxy requires ${formatInt(80)} Eighth Dimensions, and each additional Galaxy will cost\r\nanother ${formatInt(60)} more.\r\n
\r\nDistant Galaxy scaling: Above ${formatInt(100)} Antimatter Galaxies the cost increase between Galaxies will\r\nincrease by ${formatInt(2)} per Galaxy, making the next Galaxy cost ${formatInt(62)} more, then ${formatInt(64)} more,\r\netc.\r\n
\r\nRemote Galaxy scaling:` + (!MendingUpgrade(17).isBought ? ` Above ${formatInt(Galaxy.remoteStart)} Antimatter Galaxies, the total cost\r\nincreases by another ${formatPercents(0.002, 1)} per Galaxy, on top of Distant scaling.` : ` Since you have Mending Upgrade 17, Remote Galaxy scaling no longer occurs.`)\r\n+ `
` +\r\n(MendingUpgrade(17).isBought ? `Obscure Galaxy Scaling: Above ${formatInt(Galaxy.scalingThreeStart)} Antimatter Galaxies the cost between them will increase by a ` + `${6-(+WarpUpgrade(4).isBought)-(+WarpUpgrade(11).isBought)}` + `th degree polynomial
` : ``)\r\n +`
\r\nHotkey: G will try to purchase an Antimatter Galaxy.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"8th\", \"reset\", \"galaxy\", \"earlygame\", \"distant\", \"remote\", \"obscure\"],\r\n tab: \"dimensions/antimatter\"\r\n }, {\r\n name: \"Dimensional Sacrifice\",\r\n info: () => `\r\nYou unlock Dimensional Sacrifice after your fifth Dimension Boost.\r\n
\r\n
\r\nSacrificing will immediately reset the owned quantity of all non-Eighth Dimensions to zero, without reducing the\r\nmultiplier or the current cost. In return, it will multiply the Eighth Dimension Multiplier by the shown value.\r\nIt will take time to get back to the production you previously had, but you will end up with a net increase.\r\n
\r\n
\r\nThe Dimensional Sacrifice multiplier scales with the number of 1st Dimensions you had at the time of sacrifice,\r\nand the scaling can be improved by completing certain Achievements and challenges. The multiplier is kept between\r\nsacrifices, meaning that sacrificing once at ${formatX(10)} and then once at ${formatX(4)} will be the same as\r\n${formatX(8)} then ${formatX(5)}; in both cases you will end up with a total sacrifice multiplier of ${formatX(40)}.\r\n
\r\n
\r\nHotkey: S will try to sacrifice.\r\n`,\r\n isUnlocked: () => Sacrifice.isVisible,\r\n tags: [\"8th\", \"reset\", \"earlygame\", \"gods\", \"earlygame\"],\r\n tab: \"dimensions/antimatter\"\r\n }, {\r\n name: \"Achievements\",\r\n info: () => `\r\nEach Achievement has requirements to unlock. Once unlocked, some Achievements give a reward.\r\nRequirements and rewards vary in difficulty and benefit significantly.\r\n
\r\n
\r\nIn addition to any specific rewards for individual Achievements, you will receive a ${formatX(1.03, 2, 2)} multiplier\r\nto all Antimatter Dimensions. Each fully completed row also gives another ${formatX(1.25, 2, 2)}. The total multiplier\r\neffect from all Achievements together is shown above all the Achievement images.\r\n
\r\n
\r\nSecret Achievements offer no gameplay benefits or advantages and are simply there for fun. Hovering over a Secret\r\nAchievement will give a hint on how to attain them.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"earlygame\", \"awards\", \"earlygame\"],\r\n tab: \"achievements\"\r\n }, {\r\n name: \"Infinity\",\r\n info: () => `\r\nOnce you have too much antimatter for the world to handle (${formatInt(2)}${formatInt(1024)}\r\nor about ${formatPostBreak(Number.MAX_VALUE, 6)},\r\nsometimes called \"Infinity\"), you will be forced to do a “Big Crunch”. This will reset your antimatter, Antimatter\r\nDimensions, Dimension Boosts, and your Antimatter Galaxies. Doing a Big Crunch is also sometimes referred to as\r\n\"Infinitying\".\r\n
\r\n
\r\nYou will eventually be able to pass ${formatPostBreak(Number.MAX_VALUE, 6)}, but until then any larger numbers will\r\ndisplay as ${format(Infinity)}.\r\n
\r\n
\r\nEach Infinity completed will give an Infinity Point, which can be spent on upgrades in the new Infinity tab.\r\nYou must purchase these upgrades from top to bottom. You will also gain one \"Infinity\", which is effectively\r\nthe number of times you have crunched.\r\n
\r\n
\r\nThe \"Multiply Infinity Points from all sources by ${formatInt(2)}\" upgrade can be bought multiple times,\r\nbut each purchase requires ${formatInt(10)} times as much IP.\r\nYou must complete the Achievement \"No DLC required\" to start purchasing this particular upgrade.\r\n
\r\n
\r\nHotkey: C will try to perform a Big Crunch.\r\n`,\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n tags: [\"crunch\", \"big\", \"upgrades\", \"ip\", \"reset\", \"prestige\", \"earlygame\"],\r\n tab: \"infinity/upgrades\"\r\n }, {\r\n name: \"Normal Challenges\",\r\n info: () => `\r\nNormal Challenges are unlocked after your first Infinity; they change in-game mechanics in different ways to create more\r\ndifficult Infinity circumstances. To complete a challenge, you must reach ${formatPostBreak(Number.MAX_VALUE, 2)}\r\nantimatter again.\r\n
\r\n
\r\nEach completed Normal Challenge will award an autobuyer or the ability to upgrade an existing autobuyer.\r\nYou can run them multiple times (though only the first time grants a reward),\r\nand they can be exited at any time via the “Exit Challenge” button.\r\n
\r\n
\r\nYour first Infinity is considered to be the first Normal Challenge, and is thus already completed when\r\nyou unlock challenges.\r\n
\r\n
\r\nThe rightmost column of Infinity Upgrades does not work in challenges.\r\n`,\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n tags: [\"infinity\", \"autobuyer\", \"earlygame\"],\r\n tab: \"challenges/normal\"\r\n }, {\r\n name: \"Autobuyers\",\r\n info: () => `\r\nAutobuyers allow you to automatically purchase dimensions, upgrades, or prestiges. All autobuyer\r\ncontrols are located under the \"Autobuyers\" subtab of the \"Automation\" tab, including any additional autobuyers\r\nunlocked later in the game.\r\n
\r\n
\r\nAntimatter Dimension Autobuyers and the Tickspeed Upgrade Autobuyer can be unlocked based on your total antimatter,\r\nbut most other autobuyers require upgrades to be purchased or challenges to be beaten.\r\n
\r\n
\r\nMost Autobuyers have similar attributes:\r\n
\r\n
\r\nAutobuyer Interval: The cooldown period before the autobuyer attempts to make another purchase.\r\nAntimatter Dimension Autobuyers and the Tickspeed Upgrade Autobuyer require their respective challenges to be beaten\r\nbefore their interval can be upgraded.\r\n
\r\n
\r\nAntimatter Dimension Autobuyer Bulk Buy: Once the interval of an autobuyer reaches its minimum\r\n(at ${formatInt(100)} ms), all future upgrades will double the maximum amount the autobuyer can purchase per tick.\r\nThis can be disabled.\r\n
\r\n
\r\nAntimatter Dimension Autobuyer Buy Quantity: Autobuyers for Dimensions can be set to buy a single Dimension,\r\nor until ${formatInt(10)}. Bulk buy is disabled when the autobuyer is set to singles.\r\n
\r\n
\r\nTickspeed Autobuyer Buy Quantity: The tickspeed autobuyer can be set to buy a single upgrade per activation\r\nor to buy the max possible once the Tickspeed Challenge (C9) has been beaten.\r\n
\r\n
\r\nAutomatic Dimension Boost Customization: With the Dimension Boost autobuyer you can set the max number of\r\nBoosts it will attempt to buy, a minimum number of Antimatter Galaxies before Dimension Boosts are\r\nalways auto-purchased, and (when unlocked) the ability to buy an exact number of Dimension Boosts in bulk.\r\nIf you reach your specified Galaxy threshold, the autobuyer will ignore your max Boost limit.\r\n
\r\n
\r\nMax Galaxies: The highest amount of Galaxies the Galaxies autobuyer will buy.\r\n
\r\n
\r\nIP on crunch: Once you Break Infinity, you can set how many IP you would like to wait for before crunching.\r\n
\r\n
\r\nSacrifice Autobuyer: This autobuyer starts with a maxed interval, potentially triggering every tick.\r\n
\r\n
\r\nDynamic Amount: Upgraded prestige autobuyers have a mode that triggers a prestige when a specified threshold\r\nis passed. Turning on \"Dynamic Amount\" will allow this threshold value to be automatically increased when unlocking\r\ncertain upgrades or achievements which apply a multiplier to this value.\r\n
\r\n
\r\nPause/Resume Autobuyers: This button will pause or resume autobuyers which are turned on.\r\nIt does not change individual autobuyer settings. Think of it like a master switch.\r\n
\r\n
\r\nEnable/Disable All Autobuyers: This button will turn all of your autobuyers on or off individually.\r\n
\r\n
\r\nHotkey: A (for pausing/resuming autobuyers).\r\nAdditionally, holding Alt when pressing a hotkey associated with an upgrade, dimension, or prestige will\r\ntoggle the associated autobuyer.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"infinity\", \"automation\", \"challenges\", \"rewards\", \"interval\", \"earlygame\"],\r\n tab: \"automation/autobuyers\"\r\n }, {\r\n name: \"Break Infinity\",\r\n info: () => `\r\nOnce you Break Infinity, you are no longer limited to ${formatPostBreak(Number.MAX_VALUE, 2)} antimatter and can start\r\ngaining more than ${formatInt(1)} IP per crunch depending on how much more antimatter you have when you crunch.\r\n
\r\n
\r\nYou now gain ~${format(1.78, 2, 2)} IP for crunching at ${formatPostBreak(Number.MAX_VALUE, 2)} antimatter. The IP you\r\ngain for crunching is multiplied by ${formatInt(10)} for every additional factor of\r\n${formatPostBreak(Number.MAX_VALUE, 2)} antimatter you gain (in a continuous manner). This is rounded down to the\r\nnearest integer after all multipliers are applied.\r\n
\r\n
\r\nThe antimatter costs of all Dimensions begin to increase faster after they pass\r\n${formatPostBreak(Number.MAX_VALUE, 2)}. The cost between upgrades will increase by ${formatX(10)}\r\nper upgrade above ${formatPostBreak(Number.MAX_VALUE, 2)}, and a similar scaling happens to\r\nTickspeed Upgrade costs as well.\r\n`,\r\n isUnlocked: () => Autobuyer.bigCrunch.hasMaxedInterval || PlayerProgress.eternityUnlocked(),\r\n tags: [\"limit\", \"crunch\", \"upgrades\", \"midgame\"],\r\n tab: \"infinity/break\"\r\n }, {\r\n name: \"Infinity Dimensions\",\r\n info: () => `\r\nUnlocking Infinity Dimensions: Infinity Dimensions are unlocked by reaching a certain amount of antimatter.\r\n
\r\n
\r\nInfinity Dimension Purchasing: Infinity Dimensions are only purchasable in sets of ${formatInt(10)}, and cost\r\nInfinity Points. They give a permanent multiplier per purchase, similar to the other dimensions. The actual multiplier\r\napplied depends on which Infinity Dimension you purchase. \r\n
\r\n
\r\nInfinity Dimension Production: Just like Antimatter Dimensions, each Infinity Dimension produces the\r\nnext highest Infinity Dimension.\r\n
\r\n
\r\nEvery crunch, your produced Infinity Dimensions are reset to the amount you purchased. While the production\r\nof Infinity Dimensions does not carry between crunches, all the multipliers you got from purchasing them do.\r\n
\r\n
\r\nInfinity Dimension unlock thresholds (antimatter): ${Array.range(1, 8)\r\n .map(tier => formatPostBreak(InfinityDimension(tier)._unlockRequirement))\r\n .join(\", \")}\r\n
\r\nInfinity Dimension purchase multipliers: ${Array.range(1, 8)\r\n .map(tier => format(InfinityDimension(tier)._powerMultiplier))\r\n .join(\", \")}\r\n
\r\nInfinity Dimension base prices (IP): ${Array.range(1, 8)\r\n .map(tier => format(InfinityDimension(tier)._baseCost))\r\n .join(\", \")}\r\n
\r\nInfinity Dimension price increases: ${Array.range(1, 8)\r\n .map(tier => format(InfinityDimension(tier)._costMultiplier))\r\n .join(\", \")}\r\n
\r\n
\r\nInstead of antimatter, the 1st Infinity Dimension produces Infinity Power, which gives a multiplier applied\r\nto all Antimatter Dimensions equal to (power${formatInt(7)}). Infinity Dimensions are not\r\naffected by Tickspeed Upgrades.\r\n`,\r\n isUnlocked: () => Autobuyer.bigCrunch.hasMaxedInterval || PlayerProgress.eternityUnlocked(),\r\n tags: [\"id\", \"power\", \"new\", \"dims\", \"unlock\", \"break\", \"midgame\"],\r\n tab: \"dimensions/infinity\"\r\n }, {\r\n name: \"Infinity Challenges\",\r\n // This one could use some work!\r\n info: () => `\r\nInfinity Challenges are like Normal Challenges, but they have higher end goals and are generally harder. Instead of\r\nonly unlocking autobuyers, they give you boosts to your various forms of production in more unique ways. Similarly to\r\nNormal Challenges, the rightmost column of Infinity Upgrades are disabled within Infinity Challenges.\r\n
\r\n
\r\nUnlike the Normal Challenges, which are all unlocked at once, Infinity Challenges require you to reach a certain\r\namount of antimatter before you can attempt them.\r\n
\r\n
\r\nInfinity Challenge unlock thresholds: ${GameDatabase.challenges.infinity\r\n .map(ic => formatPostBreak(ic.unlockAM)).join(\", \")}\r\n`,\r\n isUnlocked: () => Autobuyer.bigCrunch.hasMaxedInterval || PlayerProgress.eternityUnlocked(),\r\n tags: [\"rewards\", \"break\", \"ic\", \"midgame\"],\r\n tab: \"challenges/infinity\"\r\n }, {\r\n name: \"Replicanti\",\r\n info: () => `\r\nReplicanti are another resource you unlock at ${format(DC.E140)} IP. Rather\r\nthan producing something else, Replicanti actually produces itself up to a maximum of\r\n${formatPostBreak(Number.MAX_VALUE, 2)}. Replicanti are produced at their own pace, unaffected by Tickspeed Upgrades.\r\nEach individual Replicanti has a certain chance (initially ${formatPercents(0.01)}) of producing another Replicanti\r\nevery Replicanti tick (initially every second), and both of these can be upgraded by spending IP.\r\n
\r\n
\r\nIf you have purchased a Replicanti Galaxy upgrade, then you can get a \"free\" Replicanti Galaxy in exchange for\r\nresetting your Replicanti count back to ${formatInt(1)}. This Galaxy is free in that it will act as if it was an\r\nAntimatter Galaxy, but it will not make your next Antimatter Galaxy more expensive. However, it will still reset the\r\nsame things as an Antimatter Galaxy does.\r\n
\r\n
\r\nHotkey: R will try to purchase a Replicanti Galaxy.\r\n
\r\nReplicanti give a multiplier to all Infinity Dimensions, which will reach a maximum of\r\n${formatX(Math.pow(2, 20), 2, 2)} at ${formatPostBreak(Number.MAX_VALUE, 2)} Replicanti.\r\n
\r\n
\r\nChance upgrade cost: Base ${format(DC.E150)} IP, cost increment ${formatX(DC.E15)} IP\r\n
\r\nInterval upgrade cost: Base ${format(DC.E140)} IP, cost increment ${formatX(DC.E10)} IP\r\n
\r\nGalaxy upgrade cost: Base ${format(DC.E170)} IP, cost increment ${formatX(DC.E25)} IP and an additional\r\n${formatX(1e5)} IP per upgrade, scaling similarly to distant Antimatter Galaxies. Above ${formatInt(100)} Replicanti\r\nGalaxies, this ${formatX(1e5)} per upgrade changes to ${formatX(DC.E55)}. Above ${formatInt(1000)}, the scaling switches\r\nfrom quadratic to cubic, with the ${formatX(DC.E55)} multiplier itself increasing by ${formatX(DC.E5)} per upgrade.\r\n`,\r\n isUnlocked: () => Replicanti.areUnlocked || PlayerProgress.eternityUnlocked(),\r\n tags: [\"interval\", \"chance\", \"infinity\", \"galaxy\", \"galaxies\", \"midgame\"],\r\n tab: \"infinity/replicanti\"\r\n }, {\r\n name: \"Eternity\",\r\n info: () => `\r\nUpon reaching ${formatPostBreak(Number.MAX_VALUE, 2)} IP, you can Eternity. Eternities will reset everything before this\r\npoint except challenge times, Achievements, and anything under the General section of the Statistics tab. You will be\r\nable to access more content after your first Eternity.\r\n
\r\n
\r\nYou can pass ${formatPostBreak(Number.MAX_VALUE, 2)} IP without anything being forced upon you, unlike the first time\r\nyou reached ${formatPostBreak(Number.MAX_VALUE, 2)} antimatter. You will receive more Eternity Points the more\r\nInfinity Points you had before going Eternal. You will also gain one \"Eternity\" for completing an Eternity.\r\n
\r\n
\r\nEternity Point gain scales similarly to Infinity Point gain, but scaling off of Infinity Points instead of antimatter.\r\nThe base amount of EP gained at ${formatPostBreak(Number.MAX_VALUE, 2)} IP is ~${format(1.62, 2, 2)} EP, multiplied by\r\n${formatInt(5)} for every factor of ${formatPostBreak(Number.MAX_VALUE, 2)} more IP you have. This is always rounded\r\ndown, which means that you will get ${formatInt(1)} EP at ${formatPostBreak(Number.MAX_VALUE, 2)} IP but will not reach\r\n${formatInt(2)} EP until ${formatPostBreak(DC.E349)}.\r\n
\r\n
\r\nHotkey: E will try to perform an Eternity reset.\r\n`,\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n tags: [\"eternal\", \"ep\", \"reset\", \"prestige\", \"midgame\"],\r\n tab: \"eternity/upgrades\"\r\n }, {\r\n name: \"Eternity Milestones\",\r\n info: () => `\r\nTo make Eternities faster and more convenient, you will unlock various buffs as you get more \"Eternity\". These\r\nbuffs will generally let you start with certain upgrades you would otherwise lose after Eternity, give you new\r\nautobuyers for better automation, or give you a way to passively gain resources offline at a reduced rate.\r\n
\r\n
\r\nMilestones which give you upgrades will automatically purchase and upgrade them to their maximum when first starting\r\nthe Eternity, effectively letting you have them permanently.\r\n
\r\n
\r\nAll of the new autobuyers will have toggles next to their respective manual buttons (for example, Infinity Dimension\r\nautobuyers can be found on the Infinity Dimension tab) in addition to their entries on the autobuyers tab.\r\nThe improvements to the Dimension Boost, Antimatter Galaxy, and Big Crunch autobuyers update their\r\nalready existing entries on the autobuyer tab.\r\n
\r\n
\r\nThe passive generation milestones only work offline by design and may need certain autobuyer settings to work\r\nproperly, as noted on the milestone page itself.\r\n`,\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n tags: [\"eternities\", \"rewards\", \"automation\", \"midgame\"],\r\n tab: \"eternity/milestones\"\r\n }, {\r\n name: \"Time Dimensions\",\r\n info: () => `\r\nAfter your first Eternity, you unlock Time Dimensions. You buy them with Eternity Points and they produce Time Shards,\r\nwhich provide Tickspeed Upgrades. These Tickspeed Upgrades function like normal Tickspeed Upgrades but do not increase\r\ntheir cost. Time Dimensions, Time Shards, and the Tickspeed Upgrades they provide are kept on Infinity,\r\nbut reset every Eternity.\r\n
\r\n
\r\nSimilarly to the other dimensions, Second Time Dimensions produce 1st Time Dimensions and so on. Similarly to Infinity\r\nDimensions, your production will be reset to the amount you purchased after every Eternity, but you will keep any\r\nupgrades to your multipliers you purchased.\r\n
\r\n
\r\nEach purchase increases the multiplier of that specific Time Dimension by ${formatX(4)}. The cost multiplier between\r\nupgrades has a base value, but is increased by ${formatX(1.5, 1, 1)} at\r\n${format(TimeDimension(1)._costIncreaseThresholds[0], 2)} EP and ${formatX(2.2, 1, 1)} (of the base value) at\r\n${format(TimeDimension(1)._costIncreaseThresholds[1])} EP. These increases apply retroactively, causing the cost to\r\njump when they reach those thresholds, and only apply to the first four dimensions. Beyond\r\n${format(TimeDimension(1)._costIncreaseThresholds[2])} EP each dimension purchase counts as four purchases for the\r\npurpose of cost increases, causing the price to rise much more steeply.\r\n
\r\nTime Dimension base prices (EP): ${Array.range(1, 8)\r\n .map(tier => format(TimeDimension(tier)._baseCost))\r\n .join(\", \")}\r\n
\r\nTime Dimension base price increases: ${Array.range(1, 8)\r\n .map(tier => format(TimeDimension(tier)._costMultiplier))\r\n .join(\", \")}\r\n
\r\n
\r\nEach threshold to gain another Tickspeed Upgrade is ${formatPercents(0.33)} more Time Shards than the previous,\r\nor ${formatPercents(0.25)} with the relevant Time Study. After ${formatInt(FreeTickspeed.softcap)} upgrades, the\r\nmultiplier between each successive free Tickspeed Upgrade will gradually increase at a rate of ~${formatX(1.35, 0, 2)}\r\nper ${formatInt(50000)} upgrades (${formatX(1.000006, 0, 6)} per upgrade).\r\n`,\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n tags: [\"dims\", \"td\", \"shards\", \"eternity\", \"midgame\"],\r\n tab: \"dimensions/time\"\r\n }, {\r\n name: \"Time Studies\",\r\n info: () => `\r\nA Time Study is a powerful post-Eternity upgrade, which costs a new resource called Time Theorems. Time Studies can\r\nboost the production of anything you have seen so far in the game, or even change the way some formulas work.\r\n
\r\n
\r\nTime Theorems are a limited resource which costs more for each one you buy. They can be bought with antimatter,\r\nInfinity Points, or Eternity Points. Their cost increases by a set factor per purchase. Time Theorems do not\r\nreset on Eternity.\r\n
\r\n
\r\nStudies are laid out in a tree-like fashion, where you must buy prerequisites before continuing. The only study you\r\ncan buy at first is the very top one, and then from there you can purchase any study directly below it which you can\r\nafford. However, there are three exceptions:\r\n
\r\nWhere the lines between studies have a color, you can only choose one of the three paths at a time.\r\n
\r\nWhen a study for an Eternity Challenge is in the way, you need to complete all challenges connected to it at least\r\nonce in order to access the study. You do not need to have the challenge study purchased in order to access it.\r\n
\r\nNear the bottom, where all the edges join together again, you can only pick one study out of each pair.\r\n
\r\n
\r\nYou are able to hold down shift and then click on a Time Study to buy all studies until that point. This might not buy\r\nthe studies you want if you shift-click a study in a position where you would have to choose between two or more\r\ndifferent options which you cannot get together (see above), or you cannot afford all the studies needed to reach that\r\npoint. Shift-click will buy studies greedily, getting as many as possible per row before moving farther downward.\r\n
\r\n
\r\nPresets: The buttons initially labeled 1 through 6 allow you to save your current set of studies into the slot,\r\nletting you quickly buy that particular set of studies again with a single click. You can hover over the button and\r\nuse the tooltip to load/save a slot, or click to load and shift-click to save. These presets can be renamed, but you\r\nare not allowed to give multiple presets the same name.\r\n
\r\n
\r\nImport Tree/Edit Preset: When editing a preset or importing a Time Study Tree, the modal will display what\r\nTime Studies will be bought when it is loaded, along with any errors.\r\nFor the split paths, you can use the name as a shorthand for the collection of studies.\r\nFor instance, you can replace \"71, 81, 91, 101\" to represent fully purchasing the antimatter split with\r\njust \"antimatter\". Additionally, if a Time Study string has a valid Eternity Challenge, adding a \"!\" to the end of\r\nthe string will make the game to try to immediately unlock and enter the Eternity Challenge when used.\r\n
\r\n
\r\nPreferences: Clicking the gear icon will open up a dialog which lets you select \"default\" paths to pick in the\r\nthree-way branches. Choosing a default will change the shift-click behavior mentioned above so that it will attempt\r\nto buy your preferred path and continue on instead of stopping completely at the tree splits. You can choose two paths\r\nfor the Dimension split in this dialog if you have purchased the relevant Time Study.\r\n
\r\n
\r\nRespecs: A respec allows you to reset the upgrades you have in the tree to retrieve all of the Time Theorems\r\nspent on them. It can be done for free, but only triggers on finishing an Eternity; you cannot respec Time Studies in\r\nthe middle of an Eternity.\r\n
\r\n
\r\nCosts for Time Theorems:\r\n
\r\nAntimatter: Initially ${format(DC.E20000)}, ${formatX(DC.E20000)} per Theorem\r\n
\r\nInfinity Points: Initially ${formatInt(1)}, ${formatX(DC.E100)} per Theorem\r\n
\r\nEternity Points: Initially ${formatInt(1)}, ${formatX(2)} per Theorem\r\n`,\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n tags: [\"eternity\", \"ts\", \"theorems\", \"tree\", \"study\", \"midgame\"],\r\n tab: \"eternity/studies\"\r\n }, {\r\n name: \"Eternity Challenges\",\r\n info: () => `\r\nEternity Challenges are another set of challenges which are unlocked by the Time Study Tree. They require a certain\r\namount of Time Theorems and a secondary requirement which you must meet when you unlock the challenge.\r\n
\r\n
\r\nWhen you enter an Eternity Challenge, your goal becomes reaching a certain target IP. After completing the challenge,\r\nyou do not need to have the Eternity Challenge's study unlocked for the reward to take effect. The rewards for these\r\nchallenges are similar to Time Studies, but often even stronger and permanent since they do not require you to spend\r\nTime Theorems to have their effects.\r\n
\r\n
\r\nYou can only have one Eternity Challenge unlocked at a time.\r\n
\r\n
\r\nYou can complete each Eternity Challenge up to five times. After each completion, the rewards grow stronger but the\r\ngoal to the next completion also increases. Additionally, the secondary requirement to unlock the challenge again will\r\nalso increase. The Time Theorem cost does not increase.\r\n
\r\n
\r\nCompleting an Eternity Challenge's secondary requirements will remove them from the study requirement until you complete\r\nthat particular Eternity Challenge, meaning you only need to complete the secondary requirement once.\r\nAs a result, you can unlock an Eternity Challenge with one set of studies, and then respec into a different set of\r\nstudies to beat the challenge. EC11 and EC12 are exceptions to this rule - the Dimension path restrictions remain even\r\nif you respec your time studies.\r\n`,\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n tags: [\"ec\", \"study\", \"time\", \"rewards\", \"completions\", \"midgame\"],\r\n tab: \"challenges/eternity\"\r\n }, {\r\n name: \"Time Dilation\",\r\n info: () => `\r\nTime Dilation is unlocked when you purchase the Time Study to unlock it below the EC11 and EC12 studies.\r\nIn order to purchase this Time Study, you need ${formatInt(5000)} unspent TT with a tree that can reach\r\nthe study, a total of ${formatInt(TimeStudy.dilation.totalTimeTheoremRequirement)} TT, and must have\r\ncompleted both EC11 and EC12 five times each.\r\n
\r\n
\r\nDilating time will start a modified Eternity, called Time Dilation, in which all of your Antimatter/Infinity/Time\r\nDimension multipliers’ exponents and the tickspeed multipliers’ exponent will be raised to\r\n${formatPow(0.75, 2, 2)}, significantly reducing them. If you can reach ${formatPostBreak(Number.MAX_VALUE, 2)} IP\r\nto complete this Dilated Eternity, you will be rewarded with a new resource called Tachyon Particles.\r\n
\r\n
\r\nYou can Dilate as many times as you want, but Tachyon Particles cannot be \"farmed\" like other resources. Tachyon\r\nParticles are never reduced, only increased, and they are increased up to a cap based on your TP multipliers and\r\nantimatter earned in the current Dilation. As a result, you generally cannot increase your TP unless\r\nyou have gained a TP multiplier or are able to significantly increase your antimatter in Dilation.\r\n
\r\n
\r\nTachyon Particles generate another currency called Dilated Time. Dilated Time is translated into Tachyon Galaxies by\r\nreaching thresholds similarly to the Tickspeed Upgrades gained from Time Dimensions. These Tachyon Galaxies are like\r\nReplicanti Galaxies in that they affect tickspeed as if they were Antimatter Galaxies but they do not increase the cost\r\nof your next Antimatter Galaxy.\r\n
\r\n
\r\nUnlocking Time Dilation also unlocks upgrades you can purchase using Dilated Time. The first and third upgrades in the\r\nfirst row of Dilation Upgrades can be repeatedly purchased as many times as you can afford them. The second upgrade can\r\nalso be repeatedly bought, but eventually reaches a cap.\r\n`,\r\n isUnlocked: () => DilationTimeStudyState.studies[1].isBought || PlayerProgress.realityUnlocked(),\r\n tags: [\"dial\", \"dt\", \"dilated\", \"tachyon\", \"particle\", \"study\", \"free\", \"galaxy\", \"galaxies\", \"midgame\"],\r\n tab: \"eternity/dilation\"\r\n }, {\r\n name: \"Reality\",\r\n info: () => `\r\nWhen you reach ${formatPostBreak(DC.E4000)} EP and have completed the first\r\n${formatInt(13)} rows of Achievements, you will be able to purchase the Time Study that unlocks Reality.\r\nUnlocking it opens a new tab, where you can find the button to make a new Reality. Starting a new Reality\r\nwill reset almost the entire game up to this point, but in exchange gives\r\nyou a new currency known as Reality Machines, a Glyph, and a Perk Point.\r\n
\r\n
\r\nUnlike the other resets so far, you also lose the first ${formatInt(13)} rows of Achievements - that is, all of the\r\npre-Reality Achievements and all of their associated rewards. However, you will still keep all values under the General\r\nheader in the Statistics tab and all of your best Challenge times.\r\n
\r\n
\r\nAfter completing your first Reality, the Glyphs tab contain a button which lets you restart your current Reality again,\r\nwithout changing what your upcoming Glyph choices are. Note that this will not give you any rewards, even if you\r\nwould otherwise be able to complete the Reality normally.\r\n
\r\n
\r\nYou need to redo the requirements for each Achievement in order to get their rewards again, but you will also passively\r\nunlock the next incomplete Achievement every ${timeDisplayNoDecimals(30 * 60000)} without any effort even if you\r\notherwise do not have the requirements to do so. This automatic completion can be disabled, in which case the timer will\r\ncount down to zero and pause, immediately completing another Achievement when unpaused. The timer still progresses\r\nat the same rate while offline.\r\n
\r\n
\r\nReality Machines can be spent on different upgrades throughout the Reality tab and are your primary currency from this\r\npoint onwards. Glyphs are equippable objects which you must equip in order to use their boosts. Perk Points are another\r\ncurrency that can be spent in the Perks subtab on different Perks.\r\n
\r\n
\r\nReality Machines scale purely off of EP, and the Reality button will tell you how much EP you need in order to gain\r\nthe next one. The first ${formatInt(10)} RM scale linearly in the exponent between\r\n${formatPostBreak(DC.E4000)} EP and ${formatPostBreak(DC.C10P16000D3)} EP, and then past that\r\nRM = ${formatInt(1000)}log${formatInt(10)}(EP)/${formatInt(4000)}-${formatInt(1)}. This formula\r\nis higher RM gain than linear above ${formatPostBreak(DC.C10P16000D3)} EP.\r\n
\r\n
\r\nGlyph level scales off of a combination of Eternity Points, Replicanti, and Dilated Time, with a minimum level of\r\n${formatInt(1)}. The type, effects, and rarity of Glyphs are randomized.\r\n
\r\n
\r\nYou get exactly ${formatInt(1)} Perk Point per Reality.\r\n
\r\n
\r\nHotkey: Y will try to perform a Reality reset.\r\n`,\r\n isUnlocked: () => PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought,\r\n tags: [\"rm\", \"machines\", \"glyph\", \"perk\", \"reset\", \"prestige\", \"endgame\", \"lategame\"],\r\n tab: \"reality/upgrades\"\r\n }, {\r\n name: \"Glyphs\",\r\n info: () => `\r\nA Glyph is an equippable object that has four attributes:\r\n
\r\nType - This is a name given to the Glyph based on what part of the game it will tend to boost\r\n(eg. \"Glyph of X\"). This determines the possible effects it may have.\r\n
\r\nLevel - This contributes to how strong your Glyph is, and it scales based how much of various\r\nresources you obtained in the Reality you gained it from.\r\n
\r\nRarity - This is a percentage, between ${formatPercents(0)} and ${formatPercents(1)}, which also\r\naffects the strength of your Glyph. This is random, but can be influenced by various upgrades.\r\nThe percentage is effectively a quality\r\nrating, higher values are better. Specific ranges of rarities are given names, such as Common or Uncommon.\r\n
\r\nEffects - These are the boosts that equipping the Glyph will give you, and can contain up to four effects.\r\nGlyphs with higher level or rarity will generally have more effects than weaker Glyphs.\r\n
\r\nNote: Your first Glyph will have a fixed effect and rarity, but its level will scale based on your progress before\r\nany Reality content. Once you receive a Glyph, its attributes cannot be changed.\r\n
\r\n
\r\nTo equip a Glyph, double-click or drag the icon from your inventory into one of the active circles in the middle\r\nof the screen. When equipped, Glyph icons become circular and add their effects to the list on the right.\r\n
\r\n
\r\nEquipping multiple Glyphs with the same effect will combine their effects; effects with \"+\" will generally add\r\ntheir values together and effects with \"×\" will generally multiply their values together.\r\n
\r\n
\r\nYou can equip Glyphs into empty active slots at any time during a Reality, which will immediately apply the\r\neffects of the new Glyph. You can also drag Glyphs into already-occupied slots to switch which ones you have equipped,\r\nbut this will restart your current Reality.\r\n
\r\n
\r\nThe slots in the first rows of your inventory are \"protected\" slots. New Glyphs will never be placed into them (even if\r\nthere is no more room in your inventory), and they are unaffected by the Sort and Auto clean buttons. If you run out of\r\nspace for new Glyphs in your inventory, any Glyphs you would receive will be automatically deleted (or sacrificed\r\nif unlocked).\r\n
\r\n
\r\nYou can delete Glyphs from your inventory by shift-clicking them, which will prompt you with a confirmation dialog\r\nasking if you are sure you want to delete the Glyph. Holding shift and ctrl together while clicking will bypass this\r\ndialog. However, deleting Glyphs will give you no benefit beyond clearing up inventory space if you do so before\r\nunlocking Glyph Sacrifice from a Reality Upgrade!\r\n
\r\n
\r\nOnce you unlock Glyph Sacrifice, you will be able to disable the Glyph Selection modal from appearing. If desired, you\r\ncan force the modal to appear again for this Reality (ignoring this setting) by shift-clicking the Reality button.\r\nCompleting a Reality with the selection modal disabled will choose a random Glyph from your options.\r\n
\r\n
\r\nClicking a group of circular Glyphs outside of a modal window will open up a modal which displays a detailed summary\r\nof all those Glyphs and their various attributes. The summary will show the information for all Glyphs at once with\r\nslightly shorter descriptions, making it more suitable for sharing with others. This can be done for Glyph records\r\nin the Statistics page, your equipped Glyphs, and the Upcoming Glyph Selection this Reality.\r\n`,\r\n isUnlocked: () => PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought,\r\n tags: [\"reality\", \"sacrifice\", \"level\", \"endgame\", \"lategame\"],\r\n tab: \"reality/glyphs\"\r\n }, {\r\n name: \"Perks\",\r\n info: () => `\r\nPerks are a type of upgrade unlocked upon Reality. Each Perk effect varies, but most are QoL (quality of life)\r\nimprovements which you can choose your own path through. All Perks only require ${formatInt(1)} Perk Point to buy.\r\n
\r\n
\r\nEach Reality you gain ${formatInt(1)} Perk Point which can be spent on an upgrade on the tree, starting with\r\n\"You can now choose from ${formatInt(Perk.firstPerk.config.effect)} Glyphs on Reality\". You can only unlock Perks\r\nwhich are directly adjacent\r\nto Perks you already have, although there are loops in the tree which you can go through in either direction.\r\n
\r\n
\r\nThe Perk nodes can have two different shapes - circular or diamond. The only difference between the two is that\r\ndiamond-shaped Perks give Automator Points in addition to their normal effect. Different nodes also have\r\ndifferent colors, roughly indicating which part of the game they affect the most.\r\n`,\r\n isUnlocked: () => PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought,\r\n tags: [\"pp\", \"reality\", \"tree\", \"endgame\", \"lategame\"],\r\n tab: \"reality/perks\"\r\n }, {\r\n name: \"Automator Overview\",\r\n info: () => `\r\nThe Automator is unlocked upon reaching a total of ${formatInt(AutomatorPoints.pointsForAutomator)} Automator Points.\r\nAutomator Points are given when unlocking various Perks or Reality Upgrades, by unlocking the Black Hole, or by\r\nsimply completing more Realities.\r\n
\r\n
\r\nThe Automator uses a scripting language that allows you to automate nearly the entire game.\r\nThe interface has two panes, a script pane on the left where you enter the commands to automate the game and a pane\r\non the right which has multiple panels which do many different things as explained on the Automator Introduction page.\r\n
\r\n
\r\nIf you want a larger workspace, you can press the button in the top right corner of the documentation pane of the\r\nAutomator to expand it to fullscreen. You can also drag the boundary between the panes horizontally to resize the\r\npanes if you want more room to write your script or read documentation.\r\n
\r\n
\r\nBy pressing the top-right button on the script pane, you can switch between the Automator's block and text editor\r\nmodes; the block mode may be more approachable if you are unfamiliar with programming. To enter commands in block mode,\r\nselect the command block pane on the right and drag the box for the relevant command into the script pane and drop it\r\nwhere you want the command to go. Commands can be freely rearranged by dragging the blocks around if needed. Switching\r\nbetween block and text mode will attempt to automatically translate your script as well, although you may lose part of\r\nyour converted script if it contains errors.\r\n
\r\n
\r\nJust like your entire savefile, individual Automator scripts can be imported and exported from the game.\r\nProperly-formatted script strings will begin with ${GameSaveSerializer.startingString[\"automator script\"]} and\r\nend with ${GameSaveSerializer.endingString[\"automator script\"]}. If this is not the case then part of your script\r\nwas lost in the process of copy-pasting. The import function will load the script into a new slot; your current script\r\nwill not be lost or overwritten.\r\n
\r\n
\r\nHotkey: U will pause/unpause the Automator.\r\n`,\r\n isUnlocked: () => Player.automatorUnlocked,\r\n tags: [\"automation\", \"reality\", \"code\", \"script\", \"endgame\", \"lategame\"],\r\n tab: \"automation/automator\"\r\n }, {\r\n name: \"Automator Technical Details\",\r\n info: () => `\r\nTechnical Limits\r\n
\r\n
\r\nThere are a few limitations to scripts in order to reduce lag and prevent save file size from getting too large.\r\nThese limits are as follows:\r\n
\r\n- Individual scripts are limited to a maximum of ${formatInt(AutomatorData.MAX_ALLOWED_SCRIPT_CHARACTERS)}\r\ncharacters each and all scripts combined together cannot exceed ${formatInt(AutomatorData.MAX_ALLOWED_TOTAL_CHARACTERS)}\r\ncharacters total.\r\n
\r\n- Script names cannot exceed ${formatInt(AutomatorData.MAX_ALLOWED_SCRIPT_NAME_LENGTH)} characters.\r\n
\r\n- Defined constants cannot have names longer than ${formatInt(AutomatorData.MAX_ALLOWED_CONSTANT_NAME_LENGTH)}\r\ncharacters, or values longer than ${formatInt(AutomatorData.MAX_ALLOWED_CONSTANT_VALUE_LENGTH)} characters.\r\n
\r\n- You cannot have more than a total of ${formatInt(AutomatorData.MAX_ALLOWED_SCRIPT_COUNT)} scripts or\r\n${formatInt(AutomatorData.MAX_ALLOWED_CONSTANT_COUNT)} defined constants.\r\n
\r\n
\r\nScript Saving\r\n
\r\n
\r\nScripts are automatically saved as you edit them, but are not saved to your game save until the global autosave timer\r\n(ie. \"Time since last save\") triggers a full game save. If you make changes to scripts right before closing the game,\r\nyou should wait until the game saves afterwards in order to not lose your changes. Any edits made to your scripts\r\nwhile above the length limits will not be saved until you shorten your scripts to be below them again.\r\n
\r\n
\r\nAutomator Ticks\r\n
\r\n
\r\nThe Automator's \"execution timer\" is based on real time, and is therefore unaffected by things such as the Black Hole,\r\nTime Glyph effects, and EC12's negative effect. However this execution timer runs entirely independently from the main\r\ngame's production loop, meaning that at faster speeds the Automator can run multiple commands per production tick.\r\n
\r\n
\r\nSome commands are more intensive on the game's internal code and may take longer than a single Automator tick in order\r\nto process on slower computers. In that case, the Automator will execute those commands and then attempt to \"catch up\"\r\nby executing the following commands as quickly as possible until it has run as many commands as it should have at a\r\nconstant execution speed.\r\n
\r\n
\r\nInteractions with Offline Progress\r\n
\r\n
\r\nLonger production ticks during Offline Progress simulation means that all of your resources are effectively given\r\nin large chunks instead of more continuously. This may have potentially adverse effects on your script's\r\nbehavior while offline, depending on how exactly your script depends on the game state to work properly.\r\nAdditionally, the PAUSE command may behave oddly due to it also being based on real time.\r\n`,\r\n isUnlocked: () => Player.automatorUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"automation\", \"reality\", \"code\", \"script\", \"endgame\", \"lategame\"],\r\n tab: \"automation/automator\"\r\n }, {\r\n name: \"Black Hole\",\r\n info: () => `\r\nThe Black Hole is a feature which speeds up how fast the game runs, on a periodic cycle.\r\nThe game will run at normal speed for some amount of time, then have a burst of running extremely fast for a short\r\nperiod of time before going back to normal speed and repeating the cycle.\r\n
\r\n
\r\nIncreased game speed from Black Holes is much stronger than tickspeed because unlike tickspeed, it affects\r\neverything equally, including things which are only partially affected by tickspeed\r\n(eg. Infinity/Time Dimensions), things which are normally completely unaffected (eg. DT/TT generation),\r\nand effects which are boosted purely on time spent (eg. idle path IP/EP multipliers).\r\n
\r\n
\r\nWhile most features in the game are boosted by this increased game speed, there are some which remain unaffected.\r\nIn these cases, it will be specifically mentioned that a given time is stated as real time as opposed to\r\ngame time. One such example is the set of Perks which automatically completes Eternity Challenges over time.\r\nOtherwise, it should be assumed from this point onward that all references to time are for game time.\r\nNote that this also includes situations where you may want to have a lower amount of time spent, like\r\nthe Reality Upgrade \"Replicative Rapidity\" for example.\r\n
\r\n
\r\nYou can buy upgrades for the Black Hole by using Reality Machines. There are three upgrades for the Black Hole:\r\n
\r\nInterval - How long the Black Hole is inactive between bursts,\r\nreduced by ${formatPercents(0.2)} per upgrade.\r\n
\r\nPower - How much faster the game runs during the temporary speed bursts,\r\nincreased by ${formatPercents(0.35)} per upgrade.\r\n
\r\nDuration - How long each speed burst lasts before going back to normal speed,\r\nincreased by ${formatPercents(0.3)} per upgrade.\r\n
\r\n
\r\n${formatInt(100)} days of game time after unlocking the Black Hole, you unlock the ability to purchase\r\na Reality Upgrade that allows you to have a second Black Hole.\r\nThe timer on the second Black Hole only advances when the first Black Hole is active. So, for example, if the first\r\nBlack Hole has a duration of ${formatInt(4)} minutes and the second has an interval of ${formatInt(8)} minutes, the\r\nsecond Black Hole will only activate once every two cycles of the first Black Hole regardless of how short the\r\nfirst Black Hole's interval is. Note that the timer shown in the in-game header takes account of this and shows\r\nthe actual time until the second Black Hole activates; in the Black Hole tab, you can see the amount of time with\r\nthe first Black Hole active needed for the second Black Hole to activate.\r\n
\r\n
\r\nWhen a Black Hole is active at least ${formatPercents(0.9999, 2)} of the time, it becomes permanently active.\r\nThis is tracked separately for the two Black Holes.\r\n
\r\n
\r\nWhile offline, Black Hole cycles will still advance normally and their active speed boosts will apply fully as if the\r\ngame were still open. Offline time simulates segments of inactive and active Black Holes with different tick lengths\r\nin order to reduce the negative effects of small tick count during active periods; the entry for \"Offline Progress\"\r\nhas been updated with more technical details.\r\n
\r\n
\r\nThe Black Holes can be paused, completely halting their interval/duration cycle. However, when unpausing them, it will\r\ntake ${BlackHoles.ACCELERATION_TIME} real-time seconds for them to go from inactive to their maximum boosted speed.\r\nThis acceleration time will still advance the cycle as if it were running at full speed; so\r\nwhile pausing gives some more control, it also ultimately results in some boosted time being lost.\r\n
\r\n
\r\nPausing and unpausing affects both Black Holes; they cannot be paused or unpaused independently. They can be paused\r\nautomatically ${BlackHoles.ACCELERATION_TIME} real-time seconds before activation by toggling the relevant setting on\r\nthe Black Hole tab.\r\n
\r\n
\r\nUpgrade Cost Information:\r\n
\r\nInterval - Base cost of ${formatInt(15)} RM and increase of ${formatX(3.5, 0, 1)} per upgrade.\r\n
\r\nPower - Base cost of ${formatInt(20)} RM and increase of ${formatX(2)} per upgrade.\r\n
\r\nDuration - Base cost of ${formatInt(10)} RM and increase of ${formatX(4)} per upgrade.\r\n
\r\nIncreased cost scaling: Above ${format(1e30)} RM, the cost multiplier between purchases increases by an additive\r\n+${format(0.2, 0, 1)} per upgrade. Above ${format(Number.MAX_VALUE, 1)} RM, a new scaling occurs which ignores all the\r\nprevious behavior. From this point, all upgrades instead behave as if they had an initial cost of ${format(DC.E310)}\r\nand further upgrade costs increase by ${format(1e6)}, ${format(1e7)}, and so on (${formatX(10)} between upgrades).\r\n
\r\nBlack Hole 2: All upgrades have an initial cost ${formatX(1000)} higher than the first Black Hole,\r\nbut the same cost multipliers.\r\n
\r\n
\r\nHotkey: B will pause/unpause the Black Holes.\r\n`,\r\n isUnlocked: () => player.blackHole[0].unlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"time\", \"speed\", \"duration\", \"interval\", \"rm\", \"endgame\", \"lategame\"],\r\n tab: \"reality/hole\"\r\n }, {\r\n name: \"Celestials\",\r\n info: () => `\r\nOnce you get all of the Reality Upgrades, the first Celestial is unlocked. This opens up a new tab for Celestials, next\r\nto the Reality tab. The first subtab under the Celestials tab shows a map called \"Celestial Navigation\" which updates as\r\nyou progress through the game. Only part of the map will be visible when first unlocked, but new content will gradually\r\nbe revealed as you approach it, generally with a visual indication of your progress towards the next step.\r\n
\r\n
\r\nEach Celestial has unique mechanics and upgrades, and you need to defeat all seven to beat the game.\r\nUnlocking or defeating a Celestial has different conditions depending on the Celestial's mechanics.\r\n
\r\n
\r\nAll Celestials have their own Celestial Reality, but how the Reality is relevant to each Celestial and the rest of\r\nthe game will depend on the Celestial.\r\n
\r\n
\r\nCelestials are timeless entities. Unless otherwise stated, any new mechanics introduced by Celestials are not affected\r\nby game speed multipliers and instead refer specifically to real time instead of game time.\r\n`,\r\n isUnlocked: () => Teresa.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"challenges\", \"endgame\", \"lategame\"],\r\n tab: \"celestials/celestial-navigation\"\r\n }, {\r\n name: \"Teresa, Celestial of Reality\",\r\n alias: \"Teresa\",\r\n info: () => `\r\nTeresa is the first Celestial. They are unlocked by Achievement 147, which requires obtaining all Reality Upgrades.\r\n
\r\n
\r\nOn the main screen, there is a bar with a button above it that says \"Pour RM\". This allows you to put your RM into the\r\ncontainer for a Reality Machine multiplier. RM which has been poured into the container cannot be retrieved.\r\nWhen you reach ${format(TeresaUnlocks.run.price)} RM inside of the container, you unlock Teresa's Reality.\r\n
\r\n
\r\nWhen you complete Teresa's Reality,\r\n${Teresa.runCompleted\r\n ? \"your Glyph Sacrifice is multiplied based on the amount of antimatter gained during the run\"\r\n : \"
(complete Teresa's Reality to see the reward)
\"}.\r\nCompleting Teresa's Reality is only part of the story; you need to keep pouring RM in order to progress. Once\r\nyou are at ${format(TeresaUnlocks.effarig.price)} RM in the container, you will unlock the next Celestial.\r\n
\r\n
\r\n${Teresa.runCompleted\r\n ? \"Teresa's Reality can be entered again after completing it, and its reward will become stronger if you \" +\r\n \"reach a higher amount of antimatter on this repeat run.\"\r\n : \"(More information available - complete Teresa's Reality)\"}\r\n`,\r\n isUnlocked: () => Teresa.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"rm\", \"endgame\", \"lategame\", \"perks\", \"sacrifice\", \"boo\", \"ghost\", \"celestial\"],\r\n tab: \"celestials/teresa\"\r\n }, {\r\n name: \"Effarig, Celestial of Ancient Relics\",\r\n alias: \"Effarig\",\r\n info: () => `\r\nEffarig is the second Celestial you encounter.\r\nThey are unlocked by pouring at least ${format(TeresaUnlocks.effarig.price)} RM into Teresa's container.\r\n
\r\n
\r\nEffarig introduces a currency called Relic Shards, which are obtained by using different kinds of Glyph effects during\r\na Reality. The number of distinct effects active during the Reality very strongly affects Relic Shard gain, and EP\r\naffects it to a much lesser degree. Relic Shards are the currency for Effarig unlocks, and will be gained from every\r\nReality from now on.\r\n
\r\n
\r\nUsing Relic Shards, you can purchase multiple upgrades (see \"Advanced Glyph Mechanics\") which improve your Glyphs and\r\nallow you to filter them based on their effects and rarity when you are doing fully automated Realities.\r\n
\r\n
\r\nEffarig's final unlock is their own Reality at ${format(GameDatabase.celestials.effarig.unlocks.run.cost)} Relic\r\nShards.\r\n${EffarigUnlock.run.isUnlocked\r\n ? \"Their Reality is divided into three layers: Infinity, Eternity, and Reality. You must complete each layer \" +\r\n \"before getting access to the next one. Completing Effarig's Eternity unlocks the next Celestial.\"\r\n : \"
(unlock Effarig's Reality to see details about it)
\"\r\n}\r\n
\r\n
\r\nCompleting Effarig's Reality unlocks\r\n${EffarigUnlock.reality.isUnlocked\r\n ? `a new Glyph type, Effarig Glyphs. Effarig Glyphs have\r\n ${formatInt(7)} different possible effects, which you can view in the Glyph filter settings. You can only\r\n have one Effarig Glyph equipped at a time.\r\n${Ra.unlocks.glyphEffectCount.canBeApplied\r\n ? `Due to having Effarig at level 10 within Ra, there are no longer any restrictions on effects that appear on\r\n Effarig Glyphs. Any given Effarig Glyph can now have up to all ${formatInt(7)} effects at the same time.`\r\n : `Effarig Glyphs can only have at most ${formatInt(4)} effects, and the RM multiplier and Glyph instability\r\n effects cannot appear together on the same Glyph.`}`\r\n : \"(complete Effarig's Reality to see reward details)\"}\r\n
\r\n
\r\n`,\r\n isUnlocked: () => TeresaUnlocks.effarig.canBeApplied || PlayerProgress.mendingUnlocked(),\r\n tags: [\"glyph\", \"sacrifice\", \"shards\", \"reality\", \"spectralflame\", \"lategame\", \"endgame\", \"celestial\"],\r\n tab: \"celestials/effarig\"\r\n }, {\r\n name: \"Advanced Glyph Mechanics\",\r\n info: () => `\r\nGlyph level Adjustment is purchasable for ${format(GameDatabase.celestials.effarig.unlocks.adjuster.cost)} Relic\r\nShards. This allows you to set weights for each resource (EP, DT, Replicanti, Eternities), in how much they affect the\r\nlevel of Glyphs gained on Reality.\r\n
\r\n
\r\nAutomatic Glyph Filtering is purchasable for ${format(GameDatabase.celestials.effarig.unlocks.glyphFilter.cost)}\r\nRelic Shards. This system uses one of many methods to assign a score to your Glyph choices, and then picks the choice\r\nwith the highest score. After picking this Glyph, it checks the score against a threshold and either keeps it if the\r\nscore is above the threshold, or sacrifices it instead. There are three basic modes:\r\n
\r\nLowest total sacrifice: Glyphs are given a score based on how much sacrifice value you have of that\r\nparticular Glyph's type. Glyphs of the type you have the least sacrifice value in will have the highest score.\r\nThis mode does not have a threshold and always sacrifices your Glyphs.\r\n
\r\nNumber of effects: Glyphs are given a score equal to the number of effects they have, and when multiple\r\nGlyphs have the same effect count, Glyphs with higher rarity will be picked. The threshold they are\r\ncompared to is specified by your input in the text box.\r\n
\r\nRarity Threshold Mode: Glyphs are given a score equal to their rarity percent. The comparison threshold\r\ncan be set individually per Glyph type.\r\n
\r\n
\r\nAdditionally, there are two more advanced modes with some additional flexibility. You may not need these initially, but\r\nthey can come in handy later on:\r\n
\r\nSpecified Effect Mode: Glyphs are given a score equal to their rarity and checked against the rarity threshold\r\nyou specify, but this score is modified based on your inputs for effects. The Glyph will be checked for having a minimum\r\nnumber of effects and having all of the effects you choose, and its score is lowered by ${formatInt(200)} for every\r\nmissing effect. This guarantees that any Glyph that does not have the effects you want will be below the threshold. You\r\ncan forbid specific Glyph types by setting impossible conditions (eg. at least ${formatInt(6)} effects on a Power\r\nGlyph will prevent Power Glyphs from being selected).\r\n
\r\nEffect Score Mode: The score of a Glyph is calculated from its rarity plus the score of each effect it has,\r\nand you can set the threshold and values of each effect individually. Some possible ways this could be used:\r\n
\r\n- Giving a weaker effect a value of ${formatInt(5)} allows you to keep Glyphs without that effect as long as they are\r\nrarer to compensate for being weaker\r\n
\r\n- Assigning a large negative score to a certain effect you do not want will forbid Glyphs with that effect from\r\nbeing selected; this can be useful for effect testing and other more limited situations\r\n
\r\n- Setting an impossible condition (eg. a threshold score of ${formatInt(999)} and all effects worth ${formatInt(0)})\r\nwill let you forbid entire types like Specified Effect Mode as well\r\n
\r\n
\r\nThe Glyph Filter mode is a global setting which applies to all Glyph types at once; for example, you cannot filter\r\npower Glyphs with \"Rarity Threshold\" and time Glyphs with \"Specified Effect\". Selecting one mode will require\r\nyou to configure every Glyph type within its settings for proper filtering. Each filter mode has its own settings\r\nwhich will be kept if you switch to another mode.\r\n
\r\n
\r\nUnlocking the Glyph Filter also lets you use the highest Glyph score amongst your upcoming choices as a comparable\r\nCurrency in the Automator. Additionally, you can make your Filter force an immediate Reality (once available) if\r\nnone of the upcoming choices will be kept by the filter, as long as the Reality autobuyer is on.\r\n
\r\n
\r\nGlyph Presets are purchasable for ${format(GameDatabase.celestials.effarig.unlocks.setSaves.cost)} Relic\r\nShards. This unlocks ${formatInt(7)} slots that allow you to save your currently equipped Glyphs into sets.\r\nYou cannot overwrite a set, you must delete it first. When you load a set, each Glyph in it is found and equipped.\r\nIf any are not found, it will display a warning, but equip all the rest regardless.\r\nWhen loading a set, you can be Level and/or Rarity sensitive. The best Glyph from the possible Glyphs\r\nwill always be the one equipped. Just like other groups of circular Glyphs, you can click any of them\r\nin order to bring up a modal summarizing the whole set of Glyphs.\r\n`,\r\n isUnlocked: () => EffarigUnlock.adjuster.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"glyph\", \"weight\", \"adjustment\", \"sacrifice\", \"filter\", \"threshold\", \"set\", \"save\", \"reality\", \"lategame\",\r\n \"endgame\"],\r\n tab: \"celestials/glyphfilter\"\r\n }, {\r\n name: \"The Nameless Ones, Celestial of Time\",\r\n alias: \"Nameless Ones\",\r\n info: () => `\r\nThe Nameless Ones are the third Celestial, unlocked by completing Effarig's Eternity.\r\n
\r\n
\r\nWhen unlocking The Nameless Ones, you immediately gain access to two new mechanics related to time. You can store\r\n\"game time\" by charging your Black Hole, and you can store \"real time\" by intentionally halting your production.\r\nStored game time is also used as a currency for purchasing unlocks from The Nameless Ones.\r\n
\r\n
\r\nCharging your Black Hole gives you stored game time, which it does at the expense of setting your game speed to\r\n${formatInt(1)}. The game is in effect using your increased game speed in order to store game time itself. Its\r\nmain use is to discharge the Black Hole, which takes uses your stored game time to skip forward in time by a duration\r\nequal to the game time stored. This is different than regular game speed multipliers in that discharging is not subject\r\nto any modifiers to game speed when it is used, only when it is stored.\r\n
\r\n
\r\nStoring real time completely stops all production, effectively pausing your game. For every real-time second that\r\npasses, you gain stored real time (modified by some efficiency factor). You can use stored real time in order to\r\namplify a Reality in the Glyphs tab. When you complete the Reality, this uses all of your stored real time at once\r\nin order to attempt to repeat that\r\nexact Reality over and over, giving you all the rewards you would normally get from the repetitions. For example, if\r\nyou have ${formatInt(50)} minutes stored and amplify a Reality which has lasted ${formatInt(10)} minutes and would\r\ngive ${format(DC.E30)} RM and ${format(DC.E12)} Relic Shards, the amplified Reality will give you ${format(5e30)} RM,\r\n${format(5e12)} Relic Shards, ${formatInt(5)} Glyphs (subject to your filtering settings),\r\nand ${formatInt(5)} Perk Points.\r\n
\r\n
\r\nHowever, if your Reality has lasted for less than ${formatInt(1)} second, the amplification factor is capped by the\r\namount of seconds stored. For example, if you have ${formatInt(1000)} seconds stored and amplify a Reality which has\r\nlasted ${format(0.2, 2, 2)} seconds, you will use ${formatInt(200)} seconds to simulate ${formatInt(1000)} Realities.\r\n
\r\n
\r\nYou can toggle a setting to automatically store offline time as stored real time.\r\n
\r\n
\r\nTheir first unlock costs ${format(TimeSpan.fromMilliseconds(ENSLAVED_UNLOCKS.FREE_TICKSPEED_SOFTCAP.price).totalYears)}\r\nyears of stored game time. It increases the softcap to Tickspeed Upgrades gained from Time Dimensions\r\n(the point at which their cost starts increasing faster)\r\nby ${format(1e5)} Tickspeed Upgrades.\r\n
\r\n
\r\nAt ${format(TimeSpan.fromMilliseconds(ENSLAVED_UNLOCKS.RUN.price).totalYears)} years of stored game time, you are able\r\nto finally unlock their Reality. The reward for completing The Nameless Ones' Reality is\r\n${Enslaved.isCompleted\r\n ? \"unlocking Tesseracts, which have their own How To Play entry.\"\r\n : \"(complete The Nameless Ones' Reality to see reward details)\"}\r\n
\r\n
\r\nThe Nameless Ones will not directly unlock the next Celestial.\r\n`,\r\n isUnlocked: () => EffarigUnlock.eternity.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"time\", \"blackhole\", \"lategame\", \"endgame\", \"testers\", \"celestial\",\r\n ...credits.people.map(p => p.name)\r\n ],\r\n tab: \"celestials/enslaved\"\r\n }, {\r\n name: \"Tesseracts\",\r\n info: () => `\r\nTesseracts are a new resource you unlock for completing The Nameless Ones' Reality.\r\n
\r\n
\r\nInfinity Dimensions are normally capped at ${format(InfinityDimensions.HARDCAP_PURCHASES)} total purchases,\r\nwhich limits how large their multipliers can grow since eventually you cannot upgrade them any more.\r\nTesseracts allow you to raise this cap by spending Infinity Points.\r\n
\r\n
\r\nThe cost of Tesseracts increases super-exponentially, but each successive Tesseract is significantly stronger than\r\nthe last in order to make up for that. Tesseract count is never reset, meaning that once purchased, you do not need\r\nto reach the IP cost again in order to take advantage of the raised cap in later Realities.\r\n
\r\n
\r\nYou can see additional information about your current Tesseract count and the cost of the next one in the Infinity\r\nDimensions tab. Additionally, your current Infinity Points will now also show a percentage towards the next Tesseract.\r\nIf affordable, the Infinity button itself will visually change and bring you to the Infinity Dimension tab when clicked.\r\n`,\r\n isUnlocked: () => Enslaved.isCompleted || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"lategame\", \"endgame\", \"tesseract\", \"id\", \"celestial\"],\r\n tab: \"celestials/tesseract\"\r\n }, {\r\n name: \"V, Celestial of Achievements\",\r\n alias: \"V\",\r\n info: () => `\r\nV is a special Celestial in the sense that they are not unlocked by another Celestial,\r\nbut is instead unlocked by completing Achievement ID 151 (row ${formatInt(15)}, column ${formatInt(1)},\r\n\"You really didn't need it anyway\"), which requires you to get ${formatInt(800)} Antimatter Galaxies\r\nwithout buying 8th Antimatter Dimensions in your current Infinity.\r\n
\r\n
\r\nAfter the subtab is unlocked from the Achievement, you are met with another set of requirements to fully unlock V.\r\nYou must have completed ${formatInt(GameDatabase.celestials.v.mainUnlock.realities.requirement)} Realities and have\r\n${format(GameDatabase.celestials.v.mainUnlock.realityMachines.requirement)} unspent RM.\r\nAdditionally you need to reach ${format(GameDatabase.celestials.v.mainUnlock.eternities.requirement)} Eternities,\r\n${format(GameDatabase.celestials.v.mainUnlock.infinities.requirement)} Infinities,\r\n${format(GameDatabase.celestials.v.mainUnlock.dilatedTime.requirement)} Dilated Time, and\r\n${format(GameDatabase.celestials.v.mainUnlock.replicanti.requirement)} Replicanti, all in the same Reality.\r\n
\r\n
\r\nWhen you meet all of those requirements, you will be able to access V's Reality.\r\n${VUnlocks.vAchievementUnlock.isUnlocked\r\n ? `However, completing the Reality itself is only the beginning. V has six different requirements, each of which\r\n require you to make a certain amount of progress within V's Reality. Completing a requirement rewards you with a\r\n V-Achievement.\r\n V-Achievements are permanent and persist after exiting V's Reality, and do not all need to be done simultaneously.\r\n
\r\n
\r\n After completing the requirement, the V-Achievement threshold then increases and can be completed again\r\n if you can reach the new goal. You can complete each category of V-Achievement up to six times.\r\n Completed V-Achievements do two things:\r\n
\r\n - Upon reaching certain totals of V-Achievements, you automatically unlock upgrades on the V tab without needing\r\n to spend any resources.\r\n
\r\n - Each V-Achievement also gives you one Space Theorem.\r\n
\r\n
\r\n The goal reduction unlocked by having ${formatInt(2)} V-Achievements allows you to make some V-Achievement\r\n requirements easier to complete by spending Perk Points, down to a limit of whatever the easiest tier requires.\r\n The cost of reducing a goal does not increase as it is used, and will also reduce future tiers as well.\r\n
\r\n
\r\n Space Theorems allow you to purchase Time Studies which are normally forbidden, such as multiple paths in the\r\n Pace Split after the improved IP formula, or both Time Studies within a dark/light pair near the bottom.\r\n Like Time Theorems, they are freely given back every time you respec your studies.\r\n With enough Space Theorems you will eventually be able to purchase every single Time Study at once!\r\n
\r\n
\r\n Reaching ${formatInt(36)} V-Achievements (and therefore completing all of V's Achievements) unlocks the next\r\n Celestial.`\r\n : \"(unlock V's Reality to see further details)\"}\r\n`,\r\n isUnlocked: () => Achievement(151).isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"lategame\", \"endgame\", \"girlfriend\", \"challenges\", \"achievement\", \"space\", \"theorems\",\r\n \"study\", \"triad\", \"celestial\"],\r\n tab: \"celestials/v\"\r\n }, {\r\n name: \"Ra, Celestial of the Forgotten\",\r\n alias: \"Ra\",\r\n info: () => `\r\nRa is the fifth Celestial, unlocked by fully completing all of V's Achievements. They use their memories in order to\r\nbring back positive effects from previous Celestials in a stronger way. Over time, you will unlock the previous four\r\nCelestials within Ra, with each Celestial offering additional upgrades related to their original themes.\r\n
\r\n
\r\nEach previous Celestial within Ra gains levels by using memories, which are generated passively over time from\r\nMemory Chunks. Memory Chunks can only be gained by entering Ra's Reality, but inside of the Reality Chunks will\r\nbe generated passively based on certain resource totals. If you are storing real time, you will not gain any\r\nChunks inside of Ra's Reality, but Memories will still be generated normally. Having a total of\r\n${formatInt(Ra.remembrance.requiredLevels)} levels across all Celestials unlocks Remembrance,\r\nwhich allows you to choose a particular Celestial to gain more chunks while inside of Ra's Reality.\r\n
\r\n
\r\nMemories can be spent on three things - an increase to Memory Chunk gain, an increase to Memory gain, and leveling up\r\nthe Celestial. You start Ra with only Teresa unlocked and each successive Celestial is unlocked by reaching level\r\n${formatInt(8)} with the previous Celestial. Levels are capped at ${formatInt(25)}.\r\n
\r\n
\r\nTeresa unlocks the ability to charge your Infinity Upgrades, making them much stronger. They also\r\nimprove your Glyph effects once you reach certain thresholds in Glyph sacrifice value.\r\n
\r\n
\r\nAt level ${formatInt(2)}, Effarig unlocks\r\n${Ra.unlocks.effarigUnlock.canBeApplied\r\n ? \"a new mechanic called Glyph Alchemy and later on also makes Effarig Glyphs stronger while gradually removing \" +\r\n \"almost all random elements of Glyph generation. Glyph Alchemy also has its own How To Play entry.\"\r\n : \"(unlock Effarig within Ra to see unlock details)\"}\r\n
\r\n
\r\nThe Nameless Ones unlocks\r\n${Ra.unlocks.enslavedUnlock.canBeApplied\r\n ? \"additional mechanics related to charging the Black Holes, as well as making them significantly stronger.\"\r\n : \"(unlock The Nameless Ones within Ra to see unlock details)\"}\r\n
\r\n
\r\nV unlocks\r\n${Ra.unlocks.vUnlock.canBeApplied\r\n ? \"Triad Studies, which are new studies near the bottom of the tree which cost Space Theorems. Each Triad Study \" +\r\n \"requires you to also have the three nearby studies as well in order to purchase them. They also unlock a \" +\r\n \"smaller set of more difficult V-Achievements to complete for additional Space Theorems.\"\r\n : \"(unlock V within Ra to see unlock details)\"}\r\n
\r\n
\r\nRa will not directly unlock the next Celestial.`,\r\n isUnlocked: () => VUnlocks.raUnlock.isUnlocked,\r\n tags: [\"reality\", \"memories\", \"razenpok\", \"levels\", \"glyphs\", \"lategame\", \"endgame\",\r\n \"effarig\", \"teresa\", \"nameless\", \"v\", \"celestial\"],\r\n tab: \"celestials/ra\"\r\n }, {\r\n name: \"Glyph Alchemy Resources\",\r\n info: () => `\r\nGlyph Alchemy is a mechanic unlocked by reaching Effarig level ${formatInt(2)} in Ra. It unlocks the ability to\r\nuse up your Glyphs by refining them into Alchemy Resources associated with their type. You can refine Glyphs by\r\nsetting your Sacrifice Type to something other than \"Always Sacrifice\" in the Glyphs tab, and doing the normal\r\nprocedure for a sacrifice.\r\nEach Alchemy Resource has a unique effect, which you can view on the Alchemy tab.\r\n
\r\n
\r\nIn addition to all their other properties, Glyphs now have a refinement value which determines how much of\r\nits associated Alchemy Resource it is worth. This value is based on the cube of the Glyph's level, scaled\r\nso that level ${formatInt(10000)} Glyphs correspond to ${formatInt(10000)} Alchemy Resources. A single Glyph itself,\r\nhowever, only gives ${formatPercents(GlyphSacrificeHandler.glyphRefinementEfficiency)} of this value when refined.\r\nThese are values for ${formatPercents(1)} rarity Glyphs; Glyphs of lower rarity still have the same cap but give\r\nproportionally less resources. For example, a ${formatPercents(0.5)} rarity Glyph will give only half as much.\r\n
\r\n
\r\nAlchemy Resources cannot be gained indefinitely; there is a per-resource cap which is based on the highest refinement\r\nvalue of all the Glyphs of that type you have refined. For example, if the highest level Time Glyph you have refined\r\nis level ${formatInt(8000)} (refinement value: ${formatInt(GlyphSacrificeHandler.levelRefinementValue(8000))}), then no\r\nmatter how many Time Glyphs you refine, you can never have more than\r\n${formatInt(GlyphSacrificeHandler.levelRefinementValue(8000))} of the Time resource until you refine another Time Glyph\r\nwith a higher refinement value.\r\n`,\r\n isUnlocked: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied || PlayerProgress.mendingUnlocked(),\r\n // Oh god I'm so sorry this is so many words\r\n tags: [\"reality\", \"lategame\", \"endgame\", \"ra\", \"effarig\", \"alchemy\", \"power\", \"infinity\", \"time\", \"replication\",\r\n \"dilation\", \"cardinality\", \"eternity\", \"dimensionality\", \"inflation\", \"alternation\", \"synergism\", \"momentum\",\r\n \"decoherence\", \"force\", \"exponential\", \"uncountability\", \"boundless\", \"unpredictability\", \"multiversal\",\r\n \"reaction\"],\r\n tab: \"reality/alchemy\"\r\n }, {\r\n name: \"Glyph Alchemy Reactions\",\r\n info: () => `\r\nAlchemy Resources can be combined together in certain combinations in order to create new compound resources, which\r\nare unlocked at certain Effarig levels. Resources are combined once per Reality, unaffected by real time\r\namplification. Reactions have a higher yield and thus happen faster when your reagent amounts are higher. The cap for\r\ncompound resources is equal to the lowest cap amongst all of its reagents. In order for a reaction to occur, the\r\ncurrent amount of all reagents must be greater than the current amount of the produced resource.\r\n
\r\n
\r\nReaction speed is proportional to the amount of usable reagents for the reaction, but only reagent amounts above the\r\nproduct amount are eligible for being used. For example, if you have ${formatInt(10000)} of all reagents and\r\n${formatInt(7500)} of the product, only ${formatInt(2500)} of the reagents are used in calculating the reaction speed.\r\nIf you instead had ${formatInt(0)} of the product, all of the reagent is available for the reaction and it will\r\nproduce ${formatX(4)} faster. Lastly, if you had ${formatInt(10000)} of the product, then none of the reagent can be\r\nused and the reaction will not run at all.\r\n
\r\n
\r\nTo activate or deactivate a reaction, click the circle corresponding to the reaction's product. When the reaction can\r\nbe applied, moving lines will be shown from all reagents to the product. If a connection is a solid line, that means\r\nthat the reaction cannot proceed due to not having enough of that reagent to get more of the product due to its cap.\r\n`,\r\n isUnlocked: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"lategame\", \"endgame\", \"ra\", \"effarig\", \"alchemy\", \"power\", \"infinity\", \"time\", \"replication\",\r\n \"dilation\", \"cardinality\", \"eternity\", \"dimensionality\", \"inflation\", \"alternation\", \"synergism\", \"momentum\",\r\n \"decoherence\", \"force\", \"exponential\", \"uncountability\", \"boundless\", \"unpredictability\", \"multiversal\",\r\n \"reaction\"],\r\n tab: \"reality/alchemy\"\r\n }, {\r\n name: \"Imaginary Machines\",\r\n info: () => `\r\nOnce you are able to gain at least ${format(MachineHandler.baseRMCap)} Reality Machines in a single Reality, you\r\nunlock the ability to gain a new resource called Imaginary Machines. Reality Machines will also become hardcapped\r\nat ${format(MachineHandler.baseRMCap)}; you will be unable to gain any more past this limit.\r\n
\r\n
\r\nAdditionally you unlock the Imaginary Upgrades tab, which contains a set of upgrades similar to the Reality Upgrades -\r\neach upgrade has a condition you must fulfill to unlock it and an Imaginary Machine cost to actually purchase it.\r\nThe first two rows of upgrades can be repeatedly bought, while the other three are one-time upgrades.\r\n
\r\n
\r\nYour iM amount is affected by two things:\r\n
\r\niM Cap - There is a maximum amount of iM you can ever have, which is based on the highest RM amount you would\r\nhave been able to get if there were no RM cap. This is updated on a continual basis and thus will immediately increase\r\nif you ever surpass your previous highest uncapped RM amount.\r\n
\r\nCurrent iM - Over time your current iM will passively rise towards your iM cap, in a way that slows down\r\nexponentially as you approach the cap. By default iM slows down at a rate where the amount you are missingP\r\n(ie. your cap minus your current amount) is cut in half every minute. This growth rate is unaffected by any\r\nmodifiers to game speed.\r\n
\r\n
\r\nImaginary Machine upgrades will unlock the final two Celestials.\r\n`,\r\n isUnlocked: () => MachineHandler.isIMUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"imaginary\", \"machines\", \"reality\", \"lategame\", \"endgame\"],\r\n tab: \"reality/imag_upgrades\"\r\n }, {\r\n name: \"Lai'tela, Celestial of Dimensions\",\r\n alias: \"Lai'tela\",\r\n info: () => `\r\nLai'tela is the sixth Celestial, unlocked by purchasing the appropriate Imaginary Upgrade for\r\n${format(ImaginaryUpgrade(15).cost)} iM.\r\n
\r\n
\r\nLai'tela gives a new currency called Dark Matter, which provides a multiplier to Continuum's effect\r\nbased on the highest amount of Dark Matter you have ever had. Dark Matter is produced by\r\nDark Matter Dimensions, in a similar cascading way to all other types of dimensions in the game. Unlike other\r\ndimensions, there are only four Dark Matter Dimensions rather than eight. You start with the first one unlocked\r\nimmediately and the higher ones are unlocked via Imaginary Upgrades. When unlocking dimensions, you are given\r\n${formatInt(1)} of the dimension and cannot gain more without having it produced from the next tier up.\r\n
\r\n
\r\nEach Dark Matter Dimension, after a certain interval of time, generates two things: Dark Matter or the next lower\r\nDark Matter Dimension and another resource called Dark Energy. Dark Matter and Dark Matter Dimension production\r\nper interval is equal to the product of your Dark Matter multiplier and the number of dimensions you have, while\r\nDark Energy production is independent of your dimension amount. Dark Energy is used to produce Singularities, which\r\nhave their own How To Play entry.\r\n
\r\n
\r\nDark Matter Dimensions can have their intervals upgraded down to a minimum of ${formatInt(10)}ms, at which point\r\nyou cannot upgrade the interval any further. You can choose to ascend Dark Matter Dimensions which reach\r\nthat point, which initially multiplies Dark Matter gain by ${formatInt(POWER_DM_PER_ASCENSION)} and Dark Energy by\r\n${formatInt(POWER_DE_PER_ASCENSION)}. The interval gets multiplied by ${formatInt(1200)}, but can be upgraded once\r\nagain. Reaching ${formatInt(10)}ms again allows you to ascend again if you choose to.\r\n
\r\n
\r\nAn Imaginary Upgrade allows you to unlock a prestige called Annihilation. Annihilation resets your Dark Matter\r\nand Dark Matter Dimensions, but adds to a permanent multiplier to Dark Matter that applies to all Dark Matter\r\nDimensions. You can Annihilate multiple times; the additions to the multiplier stack additively, and there is\r\nno need to Annihilate for a greater addition each time. You must have at least\r\n${format(Laitela.annihilationDMRequirement)} Dark Matter in order to Annihilate.\r\n
\r\n
\r\nLai'tela has a Reality which gives a multiplier to Dark Matter Dimensions' Dark Matter power based on how well you\r\ndo in the Reality. Whenever you complete the Reality in under ${formatInt(30)} seconds, your highest available\r\nDimension will be permanently disabled during further attempts of the Reality. Disabling all of your dimensions by\r\ncompleting the Reality in under ${formatInt(30)} seconds eight times will also give you a ${formatX(8)} multiplier\r\nto Dark Energy gain.\r\n
\r\n
\r\nLai'tela will not directly unlock the next Celestial.\r\n`,\r\n isUnlocked: () => Laitela.isUnlocked,\r\n tags: [\"omsi\", \"reality\", \"dark\", \"matter\", \"dimensions\", \"lategame\", \"endgame\", \"ascend\", \"celestial\"],\r\n tab: \"celestials/laitela\"\r\n }, {\r\n name: \"Continuum\",\r\n info: () => `\r\nWhen you unlock Lai'tela, your Antimatter Dimensions and Tickspeed Upgrades switch to a new mode of production\r\ncalled Continuum, which gives the same effect as previously but allows for buying partial Dimension or\r\nTickspeed Upgrades. These fractional purchases are given for free without spending your antimatter and will provide\r\nan appropriate portion of their multiplier.\r\n
\r\n
\r\nThe purchase buttons for Antimatter Dimensions and Tickspeed Upgrades become modified to display the number of upgrades\r\nyou would be able to purchase if Continuum was inactive, and the purchase count is scaled smoothly with antimatter.\r\nFor example, having ${format(2e7)} antimatter will give you a Continuum value of ${format(5.3, 0, 1)} for tickspeed\r\n(initial cost of ${format(1e3)} and increase of ${formatX(10)}) since you can purchase it ${formatInt(5)} times and\r\nare roughly ${formatPercents(0.3)} of the way to the next. Tickspeed Continuum in this case will then\r\ngive a production boost equal to (upgrade multiplier)${format(5.3, 0, 1)}.\r\n
\r\n
\r\nSome upgrades will multiply Continuum value directly, which gives a production boost without affecting the cost\r\nscaling. However, these upgrades will not function if Continuum is disabled on the Autobuyers page, which may result\r\nin a loss of production if disabled. Continuum makes your autobuyers for Antimatter Dimensions and Tickspeed obsolete,\r\nso all the related autobuyer settings for these autobuyers are now hidden on that tab as long as Continuum is active.\r\n`,\r\n // Apparently continuumUnlocked is really important in a lot of places and if we keep it unlocked\r\n // Things break, so we check for the iMU instead.\r\n isUnlocked: () => ImaginaryUpgrade(15).isBought || PlayerProgress.mendingUnlocked(),\r\n tags: [\"continuum\", \"purchase\", \"reality\", \"lategame\", \"endgame\"],\r\n tab: \"\"\r\n }, {\r\n name: \"Singularities\",\r\n info: () => `\r\nSingularities are a new resource which you can obtain using features within Lai'tela.\r\n
\r\n
\r\nIn order to obtain Singularities, you need to reach ${format(200)} Dark Energy. When you do, you get the option to\r\ncondense all your Dark Energy into a Singularity, resetting it back to zero. Any extra Dark Energy above this amount\r\ndo not carry over, and is thus wasted. Note that only Dark Energy is reset, the status of your Dark Matter and its\r\ndimensions stays the same when condensing Singularities.\r\n
\r\n
\r\nOnce you reach ${formatInt(10)} Singularities, you can freely increase or decrease the Dark Energy requirement to\r\ncondense Singularities by a factor of ${formatInt(10)} (with a minimum of ${format(200)}). This increases or decreases\r\nthe number of Singularities gained from resetting at the cap by more than a factor of ${formatInt(10)}, making\r\nhigher caps worth more if you are willing to wait.\r\n
\r\n
\r\nThe purpose of Singularities is to unlock Singularity Milestones, which act similarly to Eternity Milestones. Unlocking\r\nthese milestones simply requires you to reach the total number of Singularities specified; Singularities are not spent.\r\nThere are three types of milestones - one-time milestones, milestones repeatable a limited number of times, and\r\nmilestones which can be repeated indefinitely.\r\n
\r\n
\r\nIndependently of the milestone type, milestones also have an icon indicating what kind of upgrade they generally give:\r\n
\r\n These milestones help mechanics specific to Lai'tela\r\n
\r\n These milestones let a resource in Lai'tela affect the rest of the game\r\n
\r\n These milestones improve Lai'tela based on something outside of Lai'tela\r\n`,\r\n isUnlocked: () => Laitela.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"lategame\", \"endgame\", \"laitela\", \"dark\"],\r\n tab: \"\"\r\n }, {\r\n name: \"Pelle, Celestial of Antimatter\",\r\n alias: \"Pelle\",\r\n info: () => `\r\nWhen you purchase the last Imaginary Upgrade and unlock Pelle, you unlock their tab, where you can find a button to\r\n\"Doom your Reality\". In order to Doom your Reality, you must have completed all ${formatInt(17)} rows of Achievements\r\navailable to you at this point, and attained ${formatInt(25000)} of each Alchemy Resource.\r\n
\r\n
\r\n${Pelle.isDoomed\r\n ? `Dooming your Reality will start a new Doomed Reality, resetting almost the entire game up to\r\n Reality, not giving you any rewards from your progress in your current Reality.\r\n
\r\n
\r\n When you enter the Doomed Reality, you keep all values under the General and Reality headers in the Statistics\r\n tab and all of your best Challenge times. Inside Doomed Realities, multiple upgrades, Time Studies, Challenge and\r\n Celestial rewards, Perks, and other game mechanics are disabled or grant no reward.\r\n You can view the \"Show effects in Doomed Reality\" in Pelle tab for further information.\r\n
\r\n
\r\n Remnants are a new currency gained on Armageddon resets. Remnant gain is based on your best ever antimatter,\r\n Infinity Points, and Eternity Points across all Doomed Realities. Remnants produce Reality Shards which can be\r\n spent on Pelle Upgrades.\r\n
\r\n
\r\n Pelle Upgrades can be divided into two categories. The five upgrades in the first row can be repeatedly bought,\r\n but eventually reach a cap. They grant boosts to different aspects of the game, making progression within Doomed\r\n Realities easier.\r\n
\r\n
\r\n The other upgrades in the bottom rows offer automation and QoL (quality of life) improvements. Everything unlocked\r\n from these upgrades cannot be unlocked by their usual methods in the game; for example, none of the Normal\r\n Challenges will unlock autobuyers if completed since they are all locked behind Pelle Upgrades instead.\r\n You can toggle a button above upgrade to hide bought upgrades or click the\r\n -icon to collapse and hide the entire panel.\r\n
\r\n
\r\n Hotkey: Z will try to perform an Armageddon reset.`\r\n : \"You must Doom your Reality to read the rest of this entry.\"\r\n}\r\n`,\r\n isUnlocked: () => Pelle.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"antimatter\", \"lategame\", \"endgame\", \"final\", \"hevipelle\", \"celestial\", \"doom\"],\r\n tab: \"celestials/pelle\"\r\n }, {\r\n name: \"Pelle Strikes\",\r\n info: () => `\r\nPelle Strikes are encountered on different events in the Doomed Reality. You have encountered the first Pelle Strike by\r\nreaching Infinity for the first time within a Doomed Reality. More Strikes eventually occur by further progression.\r\nEach Pelle Strike adds a nerf to a specific aspect of the game, which can be seen by clicking on the Strike name.\r\nEach Pelle Strike also unlocks a Rift bar.\r\n
\r\n
\r\nRift bars can be filled by clicking them to toggle between \"Idle\" and \"Filling\", although only two Rifts can be\r\n\"Filling\" at any given time. When active, Rifts consume ${formatInt(3)}% of a Rift-specific resource per second. Each\r\nRift offers a Rift-specific effect which are based on the total amount filled.\r\n${PelleStrikes.eternity.hasStrike\r\n ? `An exception for this is Decay/Collapse/Disarray, whose effect gets capped once you have drained a total of\r\n ${formatPostBreak(DC.E2000)} Replicanti.`\r\n : \"\"}\r\nIn addition, each Rift offers three milestone rewards for filling them up to a certain percentage.\r\n`,\r\n isUnlocked: () => PelleStrikes.infinity.hasStrike || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"antimatter\", \"lategame\", \"endgame\", \"final\", \"pelle\", \"strike\", \"rift\", \"celestial\"],\r\n tab: \"celestials/pelle\"\r\n }, {\r\n name: \"The Galaxy Generator\",\r\n info: () => `\r\nWhen you reach ${formatInt(100)}% Recursion/Dispersion/Destruction, you unlock the Galaxy Generator, which can\r\npassively generate Galaxies. Generated Galaxies are like Replicanti Galaxies and Tachyon Galaxies in that they affect\r\ntickspeed as if they were Antimatter Galaxies, but they do not increase the cost of your next Antimatter Galaxy. You\r\nalso unlock five new upgrades. The first upgrade increases the base amount of Galaxies generated. The other four\r\nupgrades then give a multiplier to this base amount. The first two upgrades can be bought by spending antimatter and\r\nGenerated Galaxies. Replicanti or Tachyon Galaxies cannot be spent for purchasing those upgrades.\r\n
\r\n
\r\nThe Galaxy Generator has a maximum number of Galaxies it can generate, which can only be increased by draining\r\nRifts once the current cap has been reached.`,\r\n isUnlocked: () => Pelle.hasGalaxyGenerator || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"antimatter\", \"lategame\", \"endgame\", \"final\", \"pelle\", \"galaxy\",\r\n \"galaxies\", \"generator\", \"celestial\"],\r\n tab: \"celestials/pelle\"\r\n },\r\n {\r\n name: \"Mending\",\r\n info: () => `\r\nMending the 4th prestige layer, and the first new prestige layer in this mod. You can first Mend the Multiverse once\r\nyou reach ${formatPostBreak(Decimal.pow10(9e15))} antimatter while in a Doomed Reality.\r\n
\r\nMending the Multiverse resets everything up to this point, except for achievements and secret achievements. However,\r\nyou will gain MvR on Mend.\r\n
\r\nHotkey: N will try to perform a Mend.\r\n`,\r\n isUnlocked: () => PlayerProgress.mendingUnlocked(),\r\n tags: [\"mending\", \"new content\"],\r\n tab: \"\"\r\n },\r\n {\r\n name: \"Mending Milestones\",\r\n info: () => `\r\nPlaceholder\r\n`,\r\n isUnlocked: () => PlayerProgress.mendingUnlocked(),\r\n tags: [\"mending\", \"new content\"],\r\n tab: \"\"\r\n },\r\n {\r\n name: \"Mending Upgrades\",\r\n info: () => `\r\nPlaceholder\r\n`,\r\n isUnlocked: () => PlayerProgress.mendingUnlocked(),\r\n tags: [\"mending\", \"new content\"],\r\n tab: \"\"\r\n },\r\n {\r\n name: \"Warp Reality\",\r\n info: () => `\r\nPlaceholder\r\n`,\r\n isUnlocked: () => player.reality.warped,\r\n tags: [\"mending\", \"new content\"],\r\n tab: \"\"\r\n },{\r\n name: \"Hostilities\",\r\n info: () => `\r\nPlaceholder\r\n`,\r\n isUnlocked: () => Ra.pets.pelle.level >= 75,\r\n tags: [\"mending\", \"new content\"],\r\n tab: \"\"\r\n },\r\n ]\r\n};\r\n\r\n(function() {\r\n for (let i = 0; i < h2p.tabs.length; i++) {\r\n const tab = h2p.tabs[i];\r\n tab.id = i;\r\n if (tab.alias === undefined) tab.alias = tab.name;\r\n\r\n tab.searchTermsRelevance = {};\r\n }\r\n\r\n const searchIndex = {};\r\n\r\n const addTerm = (term, tab) => {\r\n let entry = searchIndex[term];\r\n if (entry === undefined) {\r\n entry = [];\r\n searchIndex[term] = entry;\r\n }\r\n if (entry.includes(tab)) return;\r\n entry.push(tab);\r\n };\r\n\r\n const addWord = (word, tab) => {\r\n const lowerCase = word.toLowerCase();\r\n for (let i = 0; i < lowerCase.length; i++) {\r\n const term = lowerCase.slice(0, i + 1);\r\n addTerm(term, tab);\r\n if (tab.searchTermsRelevance[term] === undefined) {\r\n tab.searchTermsRelevance[term] = ((i + 1) / lowerCase.length) ** 0.65;\r\n } else {\r\n tab.searchTermsRelevance[term] = Math.max(tab.searchTermsRelevance[term], ((i + 1) / lowerCase.length) ** 0.65);\r\n }\r\n }\r\n };\r\n\r\n const addPhrase = (phrase, tab) => {\r\n addWord(phrase, tab);\r\n for (const part of phrase.split(\" \")) {\r\n addWord(part, tab);\r\n }\r\n };\r\n\r\n for (const tab of h2p.tabs) {\r\n addPhrase(tab.name, tab);\r\n }\r\n for (const tab of h2p.tabs) {\r\n for (const tag of tab.tags) {\r\n addPhrase(tag, tab);\r\n }\r\n }\r\n for (const tab of h2p.tabs) {\r\n addPhrase(tab.alias, tab);\r\n }\r\n\r\n const map2dToObject = function(arr, keyFun, valueFun) {\r\n const out = {};\r\n for (let idx1 = 0; idx1 < arr.length; idx1++) {\r\n for (let idx2 = 0; idx2 < arr[idx1].length; idx2++) {\r\n out[keyFun(arr[idx1][idx2], idx1, idx2)] = valueFun(arr[idx1][idx2], idx1, idx2);\r\n }\r\n }\r\n return out;\r\n };\r\n\r\n // Very suboptimal code coming up. If anybody has a better solution, PLEASE, implement it.\r\n const keyboardify = keybrd => map2dToObject(keybrd.split(\",\").map(str => str.split(\"\")),\r\n key => key, (_key, x, y) => ({ x, y }));\r\n\r\n const qwerty = keyboardify(`1234567890,qwertyuiop,asdfghjkl,zxcvbnm`);\r\n const qwertz = keyboardify(`1234567890,qwertzuiop,asdfghjkl,yxcvbnm`);\r\n const azerty = keyboardify(`1234567890,azertyuiop,qsdfghjklm,wxcvbn`);\r\n const dvorak = keyboardify(`1234567890,'<>pyfgcrl,aoeuidhtns,;qjkxbmwvz`);\r\n const colemak = keyboardify(`1234567890,qwfpgjluy,arstdhneio,zxcvbkm`);\r\n const workman = keyboardify(`1234567890,qdrwbjfup,ashtgyneoi,zxmcvkl`);\r\n const qwprf = keyboardify(`1234567890,qwprfyukl,asdtghnioe,zxcvbjm`);\r\n\r\n const keyboards = [qwerty, qwertz, azerty, dvorak, colemak, workman, qwprf];\r\n\r\n const keyboardDist = function(a, b, keyboard) {\r\n const aPos = keyboard[a], bPos = keyboard[b];\r\n if (!aPos || !bPos) return 100;\r\n return Math.max(Math.abs(aPos.x - bPos.x), Math.abs(aPos.y - bPos.y));\r\n };\r\n\r\n // I copied this code based on OSA distance off wikipedia, with a few added changes.\r\n // The cost for \"substitution\" (third item of the first Math.min) is replaced from a static value\r\n // to a function which roughly estimates how likely the user is to mispress the key based on its\r\n // minimum distance from several common keyboard layouts.\r\n // I have no idea how the actual \"distance\" calculation works but as long as it does don't touch it.\r\n const howBadlyTypoedWithKeyboard = function(a, b, keyboard) {\r\n // If they're the same, skip all calculations\r\n if (a === b) return 0;\r\n const aLen = a.length;\r\n const bLen = b.length;\r\n // If they're way too different, don't bother\r\n if (Math.abs(aLen - bLen) > 3) return 100;\r\n // 2d Array with dimensions aLen + 1 x bLen + 1\r\n const d = new Array(aLen + 1).fill(0).map(() => new Array(bLen + 1).fill(0));\r\n\r\n for (let i = 0; i <= aLen; i++) {\r\n d[i][0] = i;\r\n }\r\n for (let i = 0; i <= bLen; i++) {\r\n d[0][i] = i;\r\n }\r\n\r\n for (let i = 1; i <= aLen; i++) {\r\n for (let j = 1; j <= bLen; j++) {\r\n const distance = keyboardDist(a[i - 1], b[j - 1], keyboard);\r\n const cost = distance === 0 ? 0 : 0.3 + distance * distance * 0.25;\r\n d[i][j] = Math.min(\r\n d[i - 1][j] + 0.55,\r\n d[i][j - 1] + 0.7,\r\n d[i - 1][j - 1] + cost\r\n );\r\n }\r\n }\r\n return d[aLen][bLen];\r\n };\r\n\r\n const howBadlyTypoed = function(a, b) {\r\n // Arbitrarily large number\r\n let minTypoed = 1e10;\r\n for (const keyboard of keyboards) {\r\n minTypoed = Math.min(minTypoed, howBadlyTypoedWithKeyboard(a, b, keyboard));\r\n }\r\n return minTypoed;\r\n };\r\n\r\n const specialChars = [\"'\", \"\\\"\", \",\", \"-\", \".\", \"_\"];\r\n\r\n const replaceSpecialChars = function(str) {\r\n let result = str;\r\n for (const i of specialChars) {\r\n result = result.replaceAll(i, \"\");\r\n }\r\n return result;\r\n };\r\n\r\n // There are a LOT of magic numbers in this code, mostly from arbitrary choices for \"What number is large enough to\r\n // act as a placeholder for 'basically not found'?\"\r\n // This will need some cleanup if possible.\r\n h2p.search = query => {\r\n const truncatedQuery = replaceSpecialChars(query);\r\n if (truncatedQuery === \"\") return h2p.tabs.map(x => ({ tab: x, relevance: 1.5 }));\r\n const searchTerms = truncatedQuery.toLowerCase().split(\" \").filter(str => str !== \"\");\r\n\r\n // A higher \"Relevance\" value actually means it's further away from the search, important to keep in mind\r\n const relevances = Array.repeat(1e4, h2p.tabs.length);\r\n for (const searchWord of searchTerms) {\r\n const minimumRequirement = Math.min(searchWord.length - 0.9, 3) * 0.5;\r\n for (const searchIndexStr in searchIndex) {\r\n const typoThreshold = howBadlyTypoed(replaceSpecialChars(searchIndexStr), searchWord);\r\n if (typoThreshold < minimumRequirement) {\r\n for (const tab of searchIndex[searchIndexStr]) {\r\n const maxRelevance = tab.searchTermsRelevance[searchIndexStr];\r\n const decrease = Math.max(maxRelevance * 1.6 - 0.9, 0);\r\n relevances[tab.id] = Math.min(relevances[tab.id], Math.max(typoThreshold, 1 - maxRelevance) - decrease);\r\n }\r\n }\r\n }\r\n }\r\n const results = h2p.tabs.filter(x => relevances[x.id] < 0.9)\r\n .map(x => ({ tab: x, relevance: relevances[x.id] }));\r\n // Provide both the relevance and the tab itself\r\n\r\n // Sort by id first, then push more relevant results to top.\r\n results.sort((a, b) => a.tab.id - b.tab.id).sort((a, b) => a.relevance - b.relevance);\r\n // Provide both the relevance and the tab itself\r\n return results;\r\n };\r\n}());\r\n","import { DC } from \"../../constants\";\r\n\r\nfunction rebuyable(config) {\r\n const effectFunction = config.effect || (x => x);\r\n const { id, maxUpgrades, description, isDisabled, noLabel, onPurchased } = config;\r\n return {\r\n rebuyable: true,\r\n id,\r\n cost: () => config.initialCost * Math.pow(config.costIncrease, player.infinityRebuyables[config.id]),\r\n maxUpgrades,\r\n description,\r\n effect: () => effectFunction(player.infinityRebuyables[config.id]),\r\n isDisabled,\r\n // There isn't enough room in the button to fit the EC reduction and \"Next:\" at the same time while still\r\n // presenting all the information in an understandable way, so we only show it if the upgrade is maxed\r\n formatEffect: config.formatEffect ||\r\n (value => {\r\n const afterECText = config.afterEC ? config.afterEC() : \"\";\r\n return value === config.maxUpgrades\r\n ? `Currently: ${formatX(10 - value)} ${afterECText}`\r\n : `Currently: ${formatX(10 - value)} | Next: ${formatX(10 - value - 1)}`;\r\n }),\r\n formatCost: value => format(value, 2, 0),\r\n noLabel,\r\n onPurchased\r\n };\r\n}\r\n\r\nexport const breakInfinityUpgrades = {\r\n totalAMMult: {\r\n id: \"totalMult\",\r\n cost: 1e4,\r\n description: \"Antimatter Dimensions gain a multiplier based on total antimatter produced\",\r\n effect: () => Math.pow(player.records.totalAntimatter.exponent + 1, 0.5),\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description: () =>\r\n `Antimatter Dimensions gain a power effect based on total antimatter and Teresa level`,\r\n effect: () => 1 +\r\n Math.log(1+Math.log10(player.records.totalAntimatter.exponent)) *\r\n Math.pow(Ra.pets.teresa.level, 0.2) / 150,\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n currentAMMult: {\r\n id: \"currentMult\",\r\n cost: 5e4,\r\n description: \"Antimatter Dimensions gain a multiplier based on current antimatter\",\r\n effect: () => Math.pow(Currency.antimatter.exponent + 1, 0.5),\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description: () =>\r\n `Antimatter Dimensions gain a power effect based on current antimatter and Teresa level`,\r\n effect: () => 1 +\r\n Math.log(Math.log10(Currency.antimatter.exponent)) *\r\n Math.pow(Ra.pets.teresa.level, 0.2) / 150,\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n galaxyBoost: {\r\n id: \"postGalaxy\",\r\n cost: 5e11,\r\n description: () => `All Galaxies are ${formatPercents(0.5)} stronger`,\r\n effect: 1.5,\r\n charged: {\r\n description: () => `All Galaxies are ${formatPercents(0.66667, 2)} stronger`,\r\n effect: 1.66667\r\n }\r\n },\r\n infinitiedMult: {\r\n id: \"infinitiedMult\",\r\n cost: 1e5,\r\n description: \"Antimatter Dimensions gain a multiplier based on Infinities\",\r\n effect: () => 1 + Currency.infinitiesTotal.value.pLog10() * 10,\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description: \"Raise TS31's exponent based on Teresa Level and Infinities\",\r\n effect: () => Math.max(1 + (Currency.infinitiesTotal.value.pLog10() / 10000) * Math.pow(Ra.pets.teresa.level, 0.2) / 150, 1),\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n achievementMult: {\r\n id: \"achievementMult\",\r\n cost: 1e6,\r\n description: \"Additional multiplier to Antimatter Dimensions based on Achievements completed\",\r\n effect: () => Math.max(Math.pow((Achievements.effectiveCount - 30), 3) / 40, 1),\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description: \"Raise Achievement Multiplier based on Teresa and V Level\",\r\n effect: () => Math.max(1 + Math.pow(Ra.pets.teresa.level + Ra.pets.v.level, 0.25) / 7.5, 1),\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n slowestChallengeMult: {\r\n id: \"challengeMult\",\r\n cost: 1e7,\r\n description: \"Antimatter Dimensions gain a multiplier based on slowest challenge run\",\r\n effect: () => Decimal.clampMin(Time.worstChallenge.totalMinutes.times(0.02), 1),\r\n formatEffect: value => formatX(value, 2, 2),\r\n hasCap: true,\r\n cap: DC.D3E4,\r\n charged: {\r\n description: \"Raise IC1 Reward based on Teresa Level\",\r\n effect: () => Ra.pets.teresa.level * 1e9,\r\n formatEffect: value => formatPow(value)\r\n }\r\n },\r\n infinitiedGen: {\r\n id: \"infinitiedGeneration\",\r\n cost: 2e7,\r\n description: \"Passively generate Infinities based on your fastest Infinity\",\r\n effect: () => player.records.bestInfinity.time,\r\n formatEffect: value => {\r\n if (value === Number.MAX_VALUE && !Pelle.isDoomed) return \"No Infinity generation\";\r\n let infinities = DC.D1;\r\n infinities = infinities.timesEffectsOf(\r\n RealityUpgrade(5),\r\n RealityUpgrade(7),\r\n Ra.unlocks.continuousTTBoost.effects.infinity\r\n );\r\n infinities = infinities.times(getAdjustedGlyphEffect(\"infinityinfmult\"));\r\n const timeStr = Time.bestInfinity.totalMilliseconds.lte(50)\r\n ? `${TimeSpan.fromMilliseconds(100).toStringShort()} (capped)`\r\n : `${Time.bestInfinity.times(2).toStringShort()}`;\r\n return `${quantify(\"Infinity\", infinities)} every ${timeStr}`;\r\n },\r\n charged: {\r\n description: \"Remove the Reality hardcap from The Knowing Existence and raise Uncountability based on Teresa Level\",\r\n effect: () => Math.max(Math.pow(Ra.pets.teresa.level, 0.5), 1),\r\n formatEffect: value => formatPow(value, 2, 2)\r\n }\r\n },\r\n autobuyMaxDimboosts: {\r\n id: \"autobuyMaxDimboosts\",\r\n cost: 5e9,\r\n description: \"Unlock the buy max Dimension Boost Autobuyer mode\",\r\n charged: {\r\n description: \"Multiply free Dimension Boost amount based on Teresa Level\",\r\n effect: () => Math.pow(Ra.pets.teresa.level, 0.5),\r\n formatEffect: value => formatX(value, 2, 2)\r\n }\r\n },\r\n autobuyerSpeed: {\r\n id: \"autoBuyerUpgrade\",\r\n cost: 1e15,\r\n description: \"Autobuyers unlocked or improved by Normal Challenges work twice as fast\",\r\n charged: {\r\n description: \"Increase Continuum Purchases based on Teresa and Lai'tela Level\",\r\n effect: () => Math.max((Ra.pets.teresa.level + Ra.pets.laitela.level) / 125, 1),\r\n formatEffect: value => `+${formatPercents(value, 2, 2)}`\r\n }\r\n },\r\n tickspeedCostMult: rebuyable({\r\n id: 0,\r\n initialCost: 1e6,\r\n costIncrease: 5,\r\n maxUpgrades: 8,\r\n description: \"Reduce post-infinity Tickspeed Upgrade cost multiplier scaling\",\r\n afterEC: () =>{\r\n if (MendingUpgrade(8).isBought) return `After Mending Upgrade 8: ${formatX(1.2, 2, 2)}`\r\n if (EternityChallenge(11).completions > 0) return `After EC11: ${formatX(2 - (0.07 * EternityChallenge(11).completions), 2, 2)}`\r\n return \"\"\r\n },\r\n noLabel: true,\r\n onPurchased: () => GameCache.tickSpeedMultDecrease.invalidate()\r\n }),\r\n dimCostMult: rebuyable({\r\n id: 1,\r\n initialCost: 1e7,\r\n costIncrease: 5e3,\r\n maxUpgrades: 7,\r\n description: \"Reduce post-infinity Antimatter Dimension cost multiplier scaling\",\r\n afterEC: () =>{\r\n if (MendingUpgrade(8).isBought) return `After Mending Upgrade 8: ${formatX(1.5, 2, 2)}`\r\n if (EternityChallenge(6).completions > 0) return `After EC6: ${formatX(3 - (0.2 * EternityChallenge(6).completions), 2, 2)}`\r\n return \"\"\r\n },\r\n noLabel: true,\r\n onPurchased: () => GameCache.dimensionMultDecrease.invalidate()\r\n }),\r\n ipGen: rebuyable({\r\n id: 2,\r\n initialCost: 1e7,\r\n costIncrease: 10,\r\n maxUpgrades: 10,\r\n effect: value => Player.bestRunIPPM.times(value / 20),\r\n description: () => {\r\n let generation = `Generate ${formatInt(5 * player.infinityRebuyables[2])}%`;\r\n if (!BreakInfinityUpgrade.ipGen.isCapped) {\r\n generation += ` ➜ ${formatInt(5 * (1 + player.infinityRebuyables[2]))}%`;\r\n }\r\n return `${generation} of your best IP/min from your last 10 Infinities`;\r\n },\r\n isDisabled: effect => effect.eq(0),\r\n formatEffect: value => `${format(value, 2, 1)} IP/min`,\r\n noLabel: false\r\n })\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { corruptionPenalties } from \"../mending/corruption\";\r\n\r\nfunction dimInfinityMult() {\r\n return Currency.infinitiesTotal.value.times(0.2).plus(1);\r\n}\r\nfunction chargedDimInfinityMult() {\r\n return 1 + Math.log10(Math.max(1, Currency.infinitiesTotal.value.pLog10())) * Math.sqrt(Ra.pets.teresa.level) / 150;\r\n}\r\n\r\nexport const infinityUpgrades = {\r\n totalTimeMult: {\r\n id: \"timeMult\",\r\n cost: 1,\r\n description: \"Antimatter Dimensions gain a multiplier based on time played\",\r\n effect: () => Decimal.pow(Time.totalTimePlayed.totalMinutes.div(2), 0.15),\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description: \"Antimatter Dimensions gain a power effect based on time played and Teresa level\",\r\n effect: () => 1 +\r\n Math.log10(Decimal.log10(Time.totalTimePlayed.totalMilliseconds)) *\r\n Math.pow(Ra.pets.teresa.level, 0.5) / 150,\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n dim18mult: {\r\n id: \"18Mult\",\r\n cost: 1,\r\n checkRequirement: () => InfinityUpgrade.totalTimeMult.isBought,\r\n description: \"1st and 8th Antimatter Dimensions gain a multiplier based on Infinities\",\r\n effect: () => dimInfinityMult(),\r\n formatEffect: value => formatX(value, 1, 1),\r\n charged: {\r\n description: \"1st and 8th Antimatter Dimensions gain a power effect based on Infinities and Teresa level\",\r\n effect: () => chargedDimInfinityMult(),\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n dim27mult: {\r\n id: \"27Mult\",\r\n cost: 1,\r\n checkRequirement: () => InfinityUpgrade.buy10Mult.isBought,\r\n description: \"2nd and 7th Antimatter Dimensions gain a multiplier based on Infinities\",\r\n effect: () => dimInfinityMult(),\r\n formatEffect: value => formatX(value, 1, 1),\r\n charged: {\r\n description: \"2nd and 7th Antimatter Dimensions gain a power effect based on Infinities and Teresa level\",\r\n effect: () => chargedDimInfinityMult(),\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n dim36mult: {\r\n id: \"36Mult\",\r\n cost: 1,\r\n checkRequirement: () => InfinityUpgrade.dim18mult.isBought,\r\n description: \"3rd and 6th Antimatter Dimensions gain a multiplier based on Infinities\",\r\n effect: () => dimInfinityMult(),\r\n formatEffect: value => formatX(value, 1, 1),\r\n charged: {\r\n description: \"3rd and 6th Antimatter Dimensions gain a power effect based on Infinities and Teresa level\",\r\n effect: () => chargedDimInfinityMult(),\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n dim45mult: {\r\n id: \"45Mult\",\r\n cost: 1,\r\n checkRequirement: () => InfinityUpgrade.dim27mult.isBought,\r\n description: \"4th and 5th Antimatter Dimensions gain a multiplier based on Infinities\",\r\n effect: () => dimInfinityMult(),\r\n formatEffect: value => formatX(value, 1, 1),\r\n charged: {\r\n description: \"4th and 5th Antimatter Dimensions gain a power effect based on Infinities and Teresa level\",\r\n effect: () => chargedDimInfinityMult(),\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n resetBoost: {\r\n id: \"resetBoost\",\r\n cost: 1,\r\n checkRequirement: () => InfinityUpgrade.dim36mult.isBought,\r\n description: () =>\r\n `Decrease the number of Dimensions needed for Dimension Boosts and Antimatter Galaxies by ${formatInt(9)}`,\r\n effect: 9,\r\n charged: {\r\n description: () => \"Decrease Dimension Boost requirement based on Teresa level\",\r\n effect: () => 1 / (1 + Math.sqrt(Ra.pets.teresa.level) / 10),\r\n formatEffect: value => `${formatX(value, 4, 4)}`\r\n }\r\n },\r\n buy10Mult: {\r\n id: \"dimMult\",\r\n cost: 1,\r\n description: () => `Increase the multiplier for buying ${formatInt(10)} Antimatter Dimensions`,\r\n effect: () => 1.1,\r\n formatEffect: () => `${formatX(2, 0, 1)} ➜ ${formatX(2.2, 0, 1)}`,\r\n charged: {\r\n description: () => `The multiplier for buying ${formatInt(10)} Antimatter Dimensions gains ` +\r\n \"a power effect based on Teresa level\",\r\n effect: () => 1 + Ra.pets.teresa.level / 200,\r\n formatEffect: value => formatPow(value, 3, 3)\r\n }\r\n },\r\n galaxyBoost: {\r\n id: \"galaxyBoost\",\r\n cost: 2,\r\n checkRequirement: () => InfinityUpgrade.dim45mult.isBought,\r\n description: \"All Galaxies are twice as strong\",\r\n effect: 2,\r\n charged: {\r\n description: \"All Galaxies are stronger based on Teresa level\",\r\n effect: () => 2 + Math.sqrt(Ra.pets.teresa.level) / 100,\r\n formatEffect: value => `+${formatPercents(value - 1)}`\r\n }\r\n },\r\n thisInfinityTimeMult: {\r\n id: \"timeMult2\",\r\n cost: 3,\r\n description: \"Antimatter Dimensions gain a multiplier based on time spent in current Infinity\",\r\n effect: () => Decimal.max(Decimal.pow(Time.thisInfinity.totalMinutes.div(4), 0.25), 1),\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description:\r\n \"Antimatter Dimensions gain a power effect based on time spent in current Infinity and Teresa level\",\r\n effect: () => 1 +\r\n Math.log10(Decimal.log10(Time.thisInfinity.totalMilliseconds.add(100))) *\r\n Math.sqrt(Ra.pets.teresa.level) / 150,\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n unspentIPMult: {\r\n id: \"unspentBonus\",\r\n cost: 5,\r\n checkRequirement: () => InfinityUpgrade.thisInfinityTimeMult.isBought,\r\n description: \"Multiplier to 1st Antimatter Dimension based on unspent Infinity Points\",\r\n effect: () => Currency.infinityPoints.value.dividedBy(2).pow(1.5).plus(1),\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description: \"Multiplier to 1st Antimatter Dimension based on unspent Infinity Points, powered by Teresa level\",\r\n effect: () => {\r\n let x = Currency.infinityPoints.value.dividedBy(2).pow(Math.sqrt(Ra.pets.teresa.level) * 1.5).plus(1);\r\n /*if (x.gte(Decimal.pow10(1e20))) {\r\n x = x.div(Decimal.pow10(1e20))\r\n x = x.pow(0.875)\r\n x = x.times(Decimal.pow10(1e20))\r\n }*/\r\n x=Decimal.min(x,Decimal.pow10(1e20));\r\n return x\r\n },\r\n formatEffect: value => formatX(value, 2, 2)\r\n }\r\n },\r\n dimboostMult: {\r\n id: \"resetMult\",\r\n cost: 7,\r\n checkRequirement: () => InfinityUpgrade.unspentIPMult.isBought,\r\n description: \"Increase Dimension Boost multiplier\",\r\n effect: () => 2.5,\r\n formatEffect: () => `${formatX(2, 0, 1)} ➜ ${formatX(2.5, 0, 1)}`,\r\n charged: {\r\n description: \"Dimension Boost multiplier gains a power effect based on Teresa level\",\r\n effect: () => 1 + Ra.pets.teresa.level / 200,\r\n formatEffect: value => formatPow(value, 3, 3)\r\n }\r\n },\r\n ipGen: {\r\n id: \"passiveGen\",\r\n cost: 10,\r\n checkRequirement: () => InfinityUpgrade.dimboostMult.isBought,\r\n description: () => `Passively generate Infinity Points ${formatInt(10)} times slower than your fastest Infinity`,\r\n // Cutting corners: this is not actual effect, but it is totalIPMult that is displyed on upgrade\r\n effect: () => (Teresa.isRunning || V.isRunning || V.isSuperRunning || Pelle.isDoomed ? DC.D0 : GameCache.totalIPMult.value),\r\n formatEffect: value => {\r\n if (Teresa.isRunning || V.isRunning || V.isSuperRunning ) return \"Disabled in this reality\";\r\n if (Pelle.isDoomed) return \"Disabled\";\r\n if (player.records.bestInfinity.time.gt(Number.MAX_VALUE)) return \"Too slow to generate\";\r\n return `${format(value, 2)} every ${Time.bestInfinity.times(10).toStringShort()}`;\r\n },\r\n charged: {\r\n description: () =>\r\n `Gain Reality Machines each real-time second proportional to amount gained on Reality,\r\n increasing with Teresa level`,\r\n effect: () => Math.pow(Ra.pets.teresa.level, 2) *\r\n Ra.unlocks.continuousTTBoost.effects.autoPrestige.effectOrDefault(1),\r\n formatEffect: value => formatX(value, 2, 1)\r\n }\r\n },\r\n skipReset1: {\r\n id: \"skipReset1\",\r\n cost: 20,\r\n description: () =>\r\n `Start every reset with ${formatInt(1)} Dimension Boost, automatically unlocking the 5th Antimatter Dimension`,\r\n },\r\n skipReset2: {\r\n id: \"skipReset2\",\r\n cost: 40,\r\n checkRequirement: () => InfinityUpgrade.skipReset1.isBought,\r\n description: () =>\r\n `Start every reset with ${formatInt(2)} Dimension Boosts, automatically unlocking the 6th Antimatter Dimension`,\r\n },\r\n skipReset3: {\r\n id: \"skipReset3\",\r\n cost: 80,\r\n checkRequirement: () => InfinityUpgrade.skipReset2.isBought,\r\n description: () =>\r\n `Start every reset with ${formatInt(3)} Dimension Boosts, automatically unlocking the 7th Antimatter Dimension`,\r\n },\r\n skipResetGalaxy: {\r\n id: \"skipResetGalaxy\",\r\n cost: 300,\r\n checkRequirement: () => InfinityUpgrade.skipReset3.isBought,\r\n description: () =>\r\n `Start every reset with ${formatInt(4)} Dimension Boosts, automatically unlocking the 8th Antimatter Dimension;\r\n and an Antimatter Galaxy`,\r\n },\r\n ipOffline: {\r\n id: \"ipOffline\",\r\n cost: 1000,\r\n checkRequirement: () => Achievement(41).isUnlocked,\r\n description: () => (player.options.offlineProgress\r\n ? `Only while offline, gain ${formatPercents(0.5)} of your best IP/min without using Max All`\r\n : \"This upgrade would give offline Infinity Point generation, but offline progress is currently disabled\"),\r\n effect: () => (player.options.offlineProgress\r\n ? player.records.thisEternity.bestIPMsWithoutMaxAll.times(TimeSpan.fromMinutes(1).totalMilliseconds.div(2))\r\n : DC.D0),\r\n isDisabled: () => !player.options.offlineProgress,\r\n formatEffect: value => `${format(value, 2, 2)} IP/min`,\r\n },\r\n ipMult: {\r\n id: \"ipMult\",\r\n cost: () => InfinityUpgrade.ipMult.cost,\r\n checkRequirement: () => Achievement(41).isUnlocked,\r\n costCap: DC.E6E6,\r\n costIncreaseThreshold: DC.E3E6,\r\n description: () =>{\r\n return (Pelle.isDoomed && Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked) ? `Multiply Infinity Points from all sources by ${formatX(1.01, 2, 2)}` : `Multiply Infinity Points from all sources by ${formatX(2)}`;\r\n },\r\n // Normally the multiplier caps at e993k or so with 3300000 purchases, but if the cost is capped then we just give\r\n // an extra e7k to make the multiplier look nice\r\n effect: () => {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return new Decimal(1);\r\n if(Pelle.isDoomed && Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked) return (player.IPMultPurchases >= 3300000 ? new Decimal(\"1e14265\") : Decimal.pow(new Decimal(1.01), player.IPMultPurchases));\r\n return (player.IPMultPurchases >= 3300000 ? DC.E1E6 : DC.D2.pow(player.IPMultPurchases));\r\n },\r\n cap: () => Effarig.eternityCap ?? DC.E1E6,\r\n formatEffect: value => formatX(value, 2, 2),\r\n }\r\n};\r\n","import { breakInfinityUpgrades } from \"./break-infinity-upgrades\";\r\nimport { infinityUpgrades } from \"./infinity-upgrades\";\r\n\r\nexport const infinity = {\r\n upgrades: infinityUpgrades,\r\n breakUpgrades: breakInfinityUpgrades\r\n};\r\n","import { DC } from \"../constants\";\r\n\r\n// A = always there\r\n// L = locked\r\n// R = random chance condition\r\n// P = patreon\r\n// AI = created with gpt2\r\n\r\nfunction newsAnimSpd(seconds) {\r\n return seconds / player.options.news.speed;\r\n}\r\n\r\n\r\nexport const news = [\r\n {\r\n id: \"a1\",\r\n text: \"The cookie is a lie.\",\r\n },\r\n {\r\n id: \"a2\",\r\n text: \"Antimatter ghosts do not exist. Just like matter ghosts. They don't have any matter, for that matter.\"\r\n },\r\n {\r\n id: \"a3\",\r\n text: \"Nuclear power plants have been abandoned in favor of antimatter power.\"\r\n },\r\n {\r\n id: \"a4\",\r\n text: \"Antimatter cookies have been confirmed to not exist, whoever claims that, stop.\"\r\n },\r\n {\r\n id: \"a5\",\r\n text: \"Antimatter prices have drastically dropped due to newfound abundance.\"\r\n },\r\n {\r\n id: \"a6\",\r\n text: \"In the news today, humans make an antimatter animal sacrifice to the antimatter god.\"\r\n },\r\n {\r\n id: \"a7\",\r\n text: \"You made one antimatter! Whatever that means.\"\r\n },\r\n {\r\n id: \"a8\",\r\n text: \"\\\"IN THE END, IT DOESN'T ANTIMATTER\\\" -hevipelle\"\r\n },\r\n {\r\n id: \"a9\",\r\n text: \"None of this matters.\"\r\n },\r\n {\r\n id: \"a10\",\r\n text: \"How does it matter if it's antimatter?\"\r\n },\r\n {\r\n id: \"a11\",\r\n text: \"Scientists confirm that the colour of antimatter is Blurple.\"\r\n },\r\n {\r\n id: \"a12\",\r\n text: \"How does NASA organise a party? They planet.\"\r\n },\r\n {\r\n id: \"a13\",\r\n text:\r\n `Electrons are now seeing the happy things in life.\r\n We're calling these happy electrons 'Positrons.' Wait, that's taken?`\r\n },\r\n {\r\n id: \"a14\",\r\n text:\r\n `This completely useless sentence will get you nowhere and you know it.\r\n What a horrible obnoxious man would come up with it, he will probably go to hell,\r\n and why would the developer even implement it? Even if you kept reading it you wouldn't\r\n be able to finish it (the first time).`\r\n },\r\n {\r\n id: \"a15\",\r\n text: `\"GHOST SAYS HELLO\" -Boo-chan`\r\n },\r\n {\r\n id: \"a16\",\r\n text: `\"Can someone tell hevi to calm down?\" -Mee6`\r\n },\r\n {\r\n id: \"a17\",\r\n text: \"Due to antimatter messing with physics, a creature that was once a moose is now a human.\"\r\n },\r\n {\r\n id: \"a18\",\r\n text: \"!hi\"\r\n },\r\n {\r\n id: \"a19\",\r\n text: `\"Alright\" -Alright`\r\n },\r\n {\r\n id: \"a20\",\r\n text: \"The English greeting is not present in Antimatter speak.\"\r\n },\r\n {\r\n id: \"a21\",\r\n text: \"To buy max or not to buy max, that is the question.\"\r\n },\r\n {\r\n id: \"a22\",\r\n text: \"One, two, skip a few, ninety-nine, NaN!\"\r\n },\r\n {\r\n id: \"a23\",\r\n text: \"No, mom, I can't pause this game.\"\r\n },\r\n {\r\n id: \"a24\",\r\n text: \"Scientific notation has entered the battlefield.\"\r\n },\r\n {\r\n id: \"a25\",\r\n text: `\"Make the Universe Great Again!\" -Tronald Dump`\r\n },\r\n {\r\n id: \"a26\",\r\n text: \"#dank-maymays\"\r\n },\r\n {\r\n id: \"a27\",\r\n get text() {\r\n return `A new religion has been created, and it's spreading like wildfire. The believers of this religion worship\r\n the Heavenly Pelle, the goddess of antimatter. They also believe that ${format(Number.MAX_VALUE, 2)}\r\n is infinite.`;\r\n }\r\n },\r\n {\r\n id: \"a28\",\r\n text: \"Someone has just touched a blob, and blown up. Was the blob antimatter, or was the guy made of Explodium?\"\r\n },\r\n {\r\n id: \"a29\",\r\n text: `If you are not playing on Kongregate, Steam, or https://ivark.github.io/AntimatterDimensions/,\r\n the site is bootleg...but this is a mod, so that doesn't matter.`\r\n },\r\n {\r\n id: \"a30\",\r\n text: \"Rate 5 on Kongregate so more people can experience this 5 star rating.\"\r\n },\r\n {\r\n id: \"a31\",\r\n text: \"BOO!\"\r\n },\r\n {\r\n id: \"a32\",\r\n text: `\"You ate for too long.\" -Hevipelle`\r\n },\r\n {\r\n id: \"a33\",\r\n text: `\"I hate myself.\" -Boo-chan`\r\n },\r\n {\r\n id: \"a34\",\r\n text: `\"Gee golly\" -Xandawesome`\r\n },\r\n {\r\n id: \"a35\",\r\n text: \"Above us, there is nothing above, but the stars, above.\"\r\n },\r\n {\r\n id: \"a36\",\r\n text: \"You feel like making antimatter. But nobody wants to eat your antimatter.\"\r\n },\r\n {\r\n id: \"a37\",\r\n text: \"Somebody wasn't nice, he got an antimatter-storm.\"\r\n },\r\n {\r\n id: \"a38\",\r\n text: \"You are living, you occupy space, you have a mass, you matter... unless you antimatter.\"\r\n },\r\n {\r\n id: \"a39\",\r\n text: \"I clicked too fast... my PC is now dematerialised.\"\r\n },\r\n {\r\n id: \"a40\",\r\n text:\r\n `\"If an alien lands on your front lawn and extends an appendage as a gesture of greeting, before you get\r\n friendly, toss it an eightball. If the appendage explodes, then the alien was probably made of antimatter.\r\n If not, then you can proceed to take it to your leader.\" -Neil deGrasse Tyson`\r\n },\r\n {\r\n id: \"a41\",\r\n text:\r\n \"There must always be an equal amount of matter as compared to antimatter; I guess your mom balances that a bit.\"\r\n },\r\n {\r\n id: \"a42\",\r\n text: \"Nothing is created, nothing is destroyed.\"\r\n },\r\n {\r\n id: \"a43\",\r\n text: \"We dug a big hole to store this antimatter... Adele's rolling in it.\"\r\n },\r\n {\r\n id: \"a44\",\r\n text: \"If everything is antimatter, how can you see yourself?\"\r\n },\r\n {\r\n id: \"a45\",\r\n text: \"The stock markets have crashed due to antimatter beings somehow knowing what they will be tomorrow.\"\r\n },\r\n {\r\n id: \"a46\",\r\n text: \"My dog ate too much antimatter, now he's' saying 'meow!'\"\r\n },\r\n {\r\n id: \"a47\",\r\n text: \"If you put infinity into your calculator, it will result in 42!\"\r\n },\r\n {\r\n id: \"a48\",\r\n text: \"You have found the rarest antimatter pepe, it's ultra rare!\"\r\n },\r\n {\r\n id: \"a49\",\r\n get text() {\r\n return `Can we get ${format(1e169)} likes on this video??? Smash that like button!!`;\r\n }\r\n },\r\n {\r\n id: \"a50\",\r\n text: \"The smell of antimatter has been revealed. It smells like kittens.\"\r\n },\r\n {\r\n id: \"a51\",\r\n text: \"Just another antimatter in the wall.\"\r\n },\r\n {\r\n id: \"a52\",\r\n text: \"GET SNIPED, WEAKLING\"\r\n },\r\n {\r\n id: \"a53\",\r\n text: `\"Thanks a lot.\" -Dankesehr`\r\n },\r\n {\r\n id: \"a54\",\r\n text: \"This world situation is an SOS situation to the world!! MAYDAY, MAYDAY!!\"\r\n },\r\n {\r\n id: \"a55\",\r\n text:\r\n `\"As for sure as the sun rises in the west, of all the singers and\r\n poets on earth, I am the bestest.\" - Hevipelle`\r\n },\r\n {\r\n id: \"a56\",\r\n text: `\"I'm good at using github.\" -Hevipelle`\r\n },\r\n {\r\n id: \"a57\",\r\n text:\r\n `A new chat server has been created for antimatter people to spy on matter people,\r\n and the world has fallen into chaos and discord.`\r\n },\r\n {\r\n id: \"a58\",\r\n text:\r\n `A new study has come out linking the consumption of potatoes with increased risk of antimatter implosion.\r\n Scientists suggest eating more.`\r\n },\r\n {\r\n id: \"a59\",\r\n text: `\"I thought that I fixed that bug but apparently some update broke it again.\" -Hevipelle`\r\n },\r\n {\r\n id: \"a60\",\r\n text: `\"Maybe I'm gay then\" -Bootato`\r\n },\r\n {\r\n id: \"a61\",\r\n text: \"Breaking news! Hevipelle has just announced that the buy max button is in fact going to be removed!\"\r\n },\r\n {\r\n id: \"a62\",\r\n text: \"I dedicate this game to my girlfriend.\"\r\n },\r\n {\r\n id: \"a63\",\r\n text:\r\n `Antimatter guns don't kill antimatter people, antimatter people kill antimatter people but does that mean\r\n that antimatter toaster doesn't toast antimatter toasts, antimatter toast toasts antimatter toasts?`\r\n },\r\n {\r\n id: \"a64\",\r\n text: \"But to an antimatter person, wouldn't they be matter and us antimatter?\"\r\n },\r\n {\r\n id: \"a65\",\r\n text: \"And nothing antimatters.\"\r\n },\r\n {\r\n id: \"a66\",\r\n text:\r\n `School starting up strikes fear in students universe-wide, as schools are no longer segregated between\r\n matter and antimatter. Annihilation is prominent.`\r\n },\r\n {\r\n id: \"a67\",\r\n text: \"Why does no one talk about the 0th dimension?\"\r\n },\r\n {\r\n id: \"a68\",\r\n text: \"The fatter catter satter on the antimatter.\"\r\n },\r\n {\r\n id: \"a69\",\r\n text: \"Who let the DOgs out?\"\r\n },\r\n {\r\n id: \"a70\",\r\n text: \"If you can't read this, you disabled the news.\"\r\n },\r\n {\r\n id: \"a71\",\r\n text: \"Doesn't leave, just mutes the server so he doesn't receive notifications.\"\r\n },\r\n {\r\n id: \"a72\",\r\n text: `\"Most quotes found online are falsely attributed.\" -Abraham Lincoln`\r\n },\r\n {\r\n id: \"a73\",\r\n text: `\"It should work now, but it doesn't.\" -Hevipelle`\r\n },\r\n {\r\n id: \"a74\",\r\n text: \"This game doesn't have any errors... they're alternative successes.\"\r\n },\r\n {\r\n id: \"a75\",\r\n text:\r\n `A third type of matter has been discovered: null matter. It doesn't do anything and is basically\r\n useless. The scientists who discovered it were fired.`\r\n },\r\n {\r\n id: \"a76\",\r\n text: \"Your Mother-in-Law keeps nagging you about all these antimatter colliders.\"\r\n },\r\n {\r\n id: \"a77\",\r\n text: \"If matter exists, then does antimatter not exist?\"\r\n },\r\n {\r\n id: \"a78\",\r\n text: \"Antimatter=Life. Not cobblestone, not dirt, nothing like that. Antimatter.\"\r\n },\r\n {\r\n id: \"a79\",\r\n text: \"Breaking News: Error Error Error\"\r\n },\r\n {\r\n id: \"a80\",\r\n text: \"How much antiwood could an antiwoodchuck chuck if an antiwoodchuck could chuck antiwood?\"\r\n },\r\n {\r\n id: \"a81\",\r\n text: \"Chaos isnt a pit, chaos is a matter.\"\r\n },\r\n {\r\n id: \"a82\",\r\n text: `\"That's because I'm a good game developer and pushed some code that totally works.\" -Hevipelle`\r\n },\r\n {\r\n id: \"a83\",\r\n text: \"What's the matter with anti matter?\"\r\n },\r\n {\r\n id: \"a84\",\r\n text: \"Doesn't it annoy you when people don't finish their\"\r\n },\r\n {\r\n id: \"a85\",\r\n text: \"Don't anti-quote me on this.\"\r\n },\r\n {\r\n id: \"a86\",\r\n text: \"Antimatter is honest, matter makes up everything.\"\r\n },\r\n {\r\n id: \"a87\",\r\n text:\r\n `According to no known laws of aviation, there are multiple ways a bee\r\n should be able to be swallowed up by antimatter.`\r\n },\r\n {\r\n id: \"a88\",\r\n text: \"You either die as matter or live long enough to be consumed by the antimatter, and then die again.\"\r\n },\r\n {\r\n id: \"a89\",\r\n text: \"If you gaze long enough into the antimatter, the antimatter gazes back into you.\"\r\n },\r\n {\r\n id: \"a90\",\r\n text: `\"Always gonna give you up. Always gonna let you down.\" - anti-Rick Astley`\r\n },\r\n {\r\n id: \"a91\",\r\n text: \"Antimatter Dimensions: the next update is always 5 hours away. Always.\"\r\n },\r\n {\r\n id: \"a92\",\r\n get text() {\r\n const games = [\r\n {\r\n name: \"Vanilla Antimatter Dimensions\",\r\n link: \"https://ivark.github.io/\"\r\n },\r\n {\r\n name: \"Antimatter Dimensions Unorginal\",\r\n link: \"https://hexavault.github.io/AntimatterDimensions-Unoriginal/\"\r\n }\r\n //add more mod links when more stuff is released\r\n ];\r\n const game = games.randomElement();\r\n return `An unidentified developer of Antimatter Dimensions Redemption would like to\r\n recommend that you play ${game.name}`;\r\n },\r\n },\r\n {\r\n id: \"a93\",\r\n text:\r\n `On a scale of 1 to 10, I rate this game a solid\r\n java.lang.IndexOutOfBoundsException`\r\n },\r\n {\r\n id: \"a94\",\r\n text: \"To matter or to antimatter, that is the question.\"\r\n },\r\n {\r\n id: \"a95\",\r\n text: \"Why is everything so Hevi?\"\r\n },\r\n {\r\n id: \"a96\",\r\n text:\r\n `It has been scientifically proven ages ago, that cats made of matter are assholes. We have good news,\r\n because cats made of antimatter are still assholes.`\r\n },\r\n {\r\n id: \"a97\",\r\n text: \"Nobody once told me the anti-world wasn't gonna roll me.\"\r\n },\r\n {\r\n id: \"a98\",\r\n text: \"Antimatter is like the internet. If you're reading this, you can't have enough of it.\"\r\n },\r\n {\r\n id: \"a99\",\r\n text:\r\n `\"Antimatter has made time travel possible and I'm here to make the\r\n past great again.\" - 2nd President of the World`\r\n },\r\n {\r\n id: \"a100\",\r\n text: \"Please insert Disc -1 to continue playing Antimatter Dimensions™.\"\r\n },\r\n {\r\n id: \"a101\",\r\n text: \"Lore - coming soon™\"\r\n },\r\n {\r\n id: \"a102\",\r\n text: \"I was a part of antimatter like you once. But then I got matter in my knee.\"\r\n },\r\n {\r\n id: \"a103\",\r\n text:\r\n `Antimatter... antimatter never changes... until you get to quantum physics of antimatter,\r\n but we don't have enough tachyon particles for that.`,\r\n get unlocked() { return PlayerProgress.realityUnlocked() || PlayerProgress.dilationUnlocked(); }\r\n },\r\n {\r\n id: \"a104\",\r\n text: \"There is no war in Antimatter Dimensions. Here we are safe. Here we are free.\"\r\n },\r\n {\r\n id: \"a105\",\r\n text: \"Antimatter has solved global warming. In unrelated news, the Earth no longer exists.\"\r\n },\r\n {\r\n id: \"a106\",\r\n text:\r\n `Anti-water, anti-Earth, anti-fire, anti-air. Long ago, the four anti-nations lived together in harmony.\r\n Then, everything changed when the anti-Fire Nation attacked. Only the anti-Avatar, the master of all 4\r\n anti-elements could bring balance to the anti-world, but when the world needed him most, he accidentally\r\n touched some regular matter and exploded.`\r\n },\r\n {\r\n id: \"a107\",\r\n text: \"If you open an anti-lootbox, are you selling random possessions for in-game currency?\"\r\n },\r\n {\r\n id: \"a108\",\r\n text: \"People are beginning to question Hevipelle's existence.\"\r\n },\r\n {\r\n id: \"a109\",\r\n text:\r\n `Antimatter Dimensions is proud to be sponsored by Lehmä! Now offering - grass eating lessons! Learn what\r\n grass is safe to eat and what grass isn't.`,\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a110\",\r\n text:\r\n `It is the year 2422. The update still isn't out. Hevi is working on balancing unfunity dimension dimensions\r\n and challenges for the 38th layer of prestige. There are over 100 rows of achievements. They're getting\r\n ready to start using breaking_breaking_breaking_infinity.js.`\r\n },\r\n {\r\n id: \"a111\",\r\n text: \"Import \\\"Christmas\\\" for a secret theme.\"\r\n },\r\n {\r\n id: \"a112\",\r\n text:\r\n `What the f*ck did you just f*cking say about me, you little b*tch? I'll have you know I graduated top of my\r\n class in the Antimatter Seals, and I've been involved in numerous secret raids on the 9th Dimension, and I\r\n have over 300 NNnNeMI-NNnNe confirmed kills. I am trained in potato warfare and I'm the top sniper in the\r\n entire Antimatter Galactic armed forces. You are nothing to me but just another infinity. I will wipe you\r\n the f*ck out with Max All mashing the likes of which has never been seen before in this dimension, mark my\r\n f*cking words. You think you can get away with saying that shit to me over the Interdimensional network?\r\n Think again, f*cker. As we speak I am contacting my secret network of autobuyers across the galaxy and your\r\n IP is being traced right now so you better prepare for the Big Crunch, maggot. The Big Crunch that wipes out\r\n the pathetic little thing you call your life. You're f*cking dead, kid. I can be anywhere, anytime, and I can\r\n kill you in over seven 😠💩 different ways, and that's just with my mouse. Not only am I extensively trained\r\n in dimension boost combat, but I have access to the entire arsenal of the Antimatter Marine Corps and I will\r\n use it to its full extent to wipe your miserable ass off the face of the universe, you little shit. If only\r\n you could have known what unhevi retribution your little “clever” comment was about to bring down upon you,\r\n maybe you would have held your f*cking tongue. But you couldn't, you didn't, and now you're buying until 10,\r\n you goddamn idiot. I will shit antimatter shit all over you and you will drown in it. You're f*cking dead,\r\n kiddo.`\r\n },\r\n {\r\n id: \"a113\",\r\n text:\r\n `So I've pondered this question for a long time. Antimatter Dimensions... what does it mean? I mean it's a\r\n game, that's clear. You buy the first dimension, and it gives you antimatter, and the second dimension\r\n provides more first dimensions and so on... But what does it mean? It can't just be a game, it seems too\r\n plain for that. The developer must have made it as a metaphor. I was doing my weekly ritual of using the\r\n fingernail clipper to cut my pubic hair, when finally the realization came to me. The dimensions are just\r\n thinly veiled misspellings of the word 'depression'. Regular matter are the cruel and negative thoughts that\r\n add to and fuel depression, while antimatter is the positive thoughts and good friends that dispel it. You\r\n start off with something simple, and it fights almost imperceptibly against the depression, but as you keep\r\n going the fight builds. But it never seems to fix everything. The depression seems like it could go on to\r\n infinity. So you keep going. But eventually, you figure out, depression isn't infinite. It's just very very\r\n large. But your 'dimensions' eventually, with enough work, make enough 'antimatter' to usurp that seeming\r\n infinity of depression. Then the possibilities are endless. You are actually happy for once, and your\r\n happiness grows exponentially as you go beyond and seemingly 'break' the 'infinity' of depression. And you\r\n go on until that 'infinity' seems tiny in comparison to the happiness you've managed to achieve in your\r\n life, where if you reset you get over that infinity in less than the blink of an eye. If you want to know\r\n what the multiple layers of prestige are...'Dimensional Shifts' are getting new things and methods to give\r\n you happiness. 'Dimension Boosts' are upgrading the things and methods. Examples would be getting a new car\r\n being a 'Dimensional Shift' and trading that car in for a new one would be a 'Dimension Boost'. 'Eternities'\r\n are major tragedies such as a loved one dying. That lapse brings you straight back to the beginning, with\r\n seemingly no hope of return. But with time, you grow back stronger and happier than ever before. 'Dimensional\r\n Sacrifice' is moving away. You have to give up a lot of the things you had that made you happy, but there is\r\n new opportunity in where you move to. And that new opportunity gives you more happiness than you ever had.\r\n 'Tickspeed' is how easy it is to make you happy, and 'Time Dimensions' make it even easier to be happy.\r\n Antimatter Dimensions is a metaphor for a depressed man's successful battle against his illness.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"a114\",\r\n text:\r\n `(Make me sleep) Put me to sleep inside. (I can't sleep) Put me to sleep inside. (Leave me) Whisper my name\r\n and give me to the dark. (Make me sleep) Bid my milk to stay. (I can't fall asleep) Before I become done.\r\n (Leave me) Leave me to the nothing I've become.`\r\n },\r\n {\r\n id: \"a115\",\r\n text:\r\n `A preview of the next update - loot boxes! Feel a sense of pride and progression as you open cosmic,\r\n galactic, and universal lootboxes for chances at rare skins, unique challenges with uniquer rewards,\r\n time skips and even new dimensions!`\r\n },\r\n {\r\n id: \"a116\",\r\n text: \"The intent of dimensions is to give a sense of pride and accomplishment.\"\r\n },\r\n {\r\n id: \"a117\",\r\n text: \"Refreshing cures cancer.\"\r\n },\r\n {\r\n id: \"a118\",\r\n text: \"I have a 9th, I have a dimension... UHH... IT DOESN'T EXIST!\"\r\n },\r\n {\r\n id: \"a119\",\r\n text:\r\n `Since when did we start reporting stuff like this? Half of it isn't even proper news, it's just jokes and\r\n meta-references, it doesn't even make sens-HAHAHA DISREGARD THAT I SUCK CO-`\r\n },\r\n {\r\n id: \"a120\",\r\n text: \"The year is 1944, Hevipelle can't release updates for AD because he doesn't exist.\"\r\n },\r\n {\r\n id: \"a121\",\r\n text: `\"THAT DIMENSION DOESN'T EXIST\" -GhostBot`\r\n },\r\n {\r\n id: \"a122\",\r\n text:\r\n `Most things you know as nuts are actually Drupe seeds or Legumes. Hevipelle on the other hand is quite crazy\r\n and can thus be considered a dry uncompartmented fruit.`\r\n },\r\n {\r\n id: \"a123\",\r\n text: \"Finland declares that it's starting to import Design.\"\r\n },\r\n {\r\n id: \"a124\",\r\n text: \"All this importing is making me Confused.\"\r\n },\r\n {\r\n id: \"a125\",\r\n text:\r\n `Only today you can call 1-800-ANTIMATTER and get a FREE Infinity Dimension! The package also comes with a\r\n COMPLETELY FREE SHIPPING and a FREE HIGH DEFINITION ANTI-V!!! Only today for the low price of 42! Estimated\r\n delivery time - 5 hours.`,\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a126\",\r\n text: \"1e420 blaze it.\"\r\n },\r\n {\r\n id: \"a127\",\r\n text: \"This game doesn't have any bugs, you're just doing it wrong.\"\r\n },\r\n {\r\n id: \"a128\",\r\n get text() {\r\n return `Antimatter_Dimensions.mp${format(Number.MAX_VALUE, 2)}`;\r\n }\r\n },\r\n {\r\n id: \"a129\",\r\n text:\r\n `\r\n https://www.youtube.com/watch?v=dQw4w9WgXcQ`\r\n },\r\n {\r\n id: \"a130\",\r\n text: \"Click this to unlock that one secret achievement.\",\r\n // This next line is needed for this news ticker to unlock\r\n // the secret achievement.\r\n onClick: () => undefined\r\n },\r\n {\r\n id: \"a131\",\r\n text:\r\n `Warning - We have just been informed that there is a chance of infection with a mind-virus of the Basilisk\r\n type, similar to the infamous winking parrot. This particular example is known as 'Fractal Disease Type III'.\r\n This is believed to cause a 'crashing' of the mind, similar to a computer crash, due to the mathematical\r\n complexity of the image causing mathematical ideas that the mind can't comprehend, a Gondelian shock input\r\n eventually leading to crashing through Gondelian spoilers. All who have researched it have eventually died\r\n the same way, so it is impossible to tell exactly, but this is the common belief. Regardless, with the\r\n introduction of 'design' mode, as well as reports of it's spontaneous appearance, sufficient repetition\r\n of this mode's appearance may lead to an image forming in the mind similar to 'Fractal Disease Type III'.\r\n With this in mind, we have some suggestions if you find yourself plagued with it. First, refresh immediately\r\n and see if that fixes the issue. If not, navigate to options, and change the theme from design to literally\r\n anything else. And above all else, Godspeed. We can't afford to lose anymore viewers.`\r\n },\r\n {\r\n id: \"a132\",\r\n text: \"If I have bad English, I'll study English until I have good English.\"\r\n },\r\n {\r\n id: \"a133\",\r\n text:\r\n `Someone once told me that antimatter is gonna roll me. I ain't the sharpest atom in the shed. WELL, the\r\n tubes start coming and they don't stop coming...`\r\n },\r\n {\r\n id: \"a134\",\r\n text: \"Because of this game I can now use the word \\\"infinity\\\" as a verb.\",\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"a135\",\r\n text: \"Ahhh I love the smell of particle annihilation in the morning.\"\r\n },\r\n {\r\n id: \"a136\",\r\n text: \"The person who said ghosts don't exist obviously doesn't have a Discord.\"\r\n },\r\n {\r\n id: \"a137\",\r\n text: \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAntimatter Dimensions was made by some dude from Finland\"\r\n },\r\n {\r\n id: \"a138\",\r\n get text() {\r\n return `Check out Avari's newly built actually infinite infinity pool! With an area of\r\n ${format(Number.MAX_VALUE, 2)} square megametres, you'll be sure to have infinite fun!`;\r\n },\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a139\",\r\n text: \"We have updated our Antimatter Privacy Policy.\"\r\n },\r\n {\r\n id: \"a140\",\r\n text:\r\n `Attention all Antimatter Dimensions Gamers, Hevipelle is in great danger, and he needs YOUR help to wipe out\r\n all the bad memes in #news-ticker-suggestions. To do this, he needs a dozen new dank memes and a couple of\r\n discord bots. To help him, all he needs is your Antimatter card number, the three numbers on the back, and\r\n the expiration month and date. But you gotta be quick so that Hevipelle can secure the good memes, and\r\n achieve the epic meme R O Y A L.`,\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a141\",\r\n text:\r\n `If each Trimp was a plank volume, and each piece of resource was a plank volume, how many universes would\r\n you fill up before you realized you were playing the wrong game?`\r\n },\r\n {\r\n id: \"a142\",\r\n text: \"Actually, that last one was incorrect.\"\r\n },\r\n {\r\n id: \"a143\",\r\n text: \"If you're reading this, you can read.\"\r\n },\r\n {\r\n id: \"a144\",\r\n text: \"@everyone\"\r\n },\r\n {\r\n id: \"a145\",\r\n text:\r\n `The game \"Matter Dimensions\" by Lghtellep has just reached -1,000,000 plays on the gaming website Etagergnok.`\r\n },\r\n {\r\n id: \"a146\",\r\n text:\r\n `How many licks does it take to get to the center of an antimatter tootsie pop? A whole lot, because unless\r\n you're made out of antimatter too, you'll explode every time you try to lick it.`\r\n },\r\n {\r\n id: \"a147\",\r\n text: \"They say if you look in a mirror and ping Hevipelle three times in a row you'll instantly die.\"\r\n },\r\n {\r\n id: \"a148\",\r\n text: \"The next update is now only 300 minutes away.\"\r\n },\r\n {\r\n id: \"a149\",\r\n text: \"🤔\"\r\n },\r\n {\r\n id: \"a150\",\r\n text: \"Game is Dead 1/5 the moderation is terrible.\"\r\n },\r\n {\r\n id: \"a151\",\r\n text: \"This message will never appear on the news ticker, isn't that cool?\"\r\n },\r\n {\r\n id: \"a152\",\r\n text:\r\n `The first dimension produces antimatter, the second dimension produces the first dimension, the third\r\n dimension produces the second dimension, the fourth dimension produces the third dimension. Nobody has\r\n ever unlocked the 5th, because that would take more than a minute of gameplay.`\r\n },\r\n {\r\n id: \"a153\",\r\n text: \"My AD-blocker won't let me play.\"\r\n },\r\n {\r\n id: \"a154\",\r\n text: \"You lost the game.\"\r\n },\r\n {\r\n id: \"a155\",\r\n text: \"Did you know that 75% of all statistics are made up on the spot?\"\r\n },\r\n {\r\n id: \"a156\",\r\n text:\r\n `If you're using so many logs in a notation name, why not just call it tree notation?\r\n They're literally made of logs!`\r\n },\r\n {\r\n id: \"a157\",\r\n text:\r\n `.tuo ti gnitset fo ssecorp eht ni yltnerruc m'I dna ,rettamitna otni\r\n rettam trevnoc ot yaw a tuo derugif evah stsitneicS`\r\n },\r\n {\r\n id: \"a158\",\r\n text:\r\n `If Gaben can't count to three, and Hevipelle can't count to nine, will there be some other game developer\r\n in the future that can't count to 27?`\r\n },\r\n {\r\n id: \"a159\",\r\n text:\r\n `What does it mean when you \"bank\" Infinities? Is there a bank somewhere that you just deposit these\r\n infinities? Does having a lot of banked Infinities improve your credit score? Do you get a credit card?`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"a160\",\r\n text: `Turns out all our news is being stolen and broadcast to a game called \"Antimatter Dimensions\", damn Fins.`\r\n },\r\n {\r\n id: \"a161\",\r\n text: \"mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm Oh sorry, wrong text field.\"\r\n },\r\n {\r\n id: \"a162\",\r\n text: `\"Python's not the best language, Finnish is.\" - Hevipelle`\r\n },\r\n {\r\n id: \"a163\",\r\n text:\r\n `Some say that most of these news are bad memes. Some say that they're good memes.\r\n This one? Well it's just meta news.`\r\n },\r\n {\r\n id: \"a164\",\r\n text: \"Look mom, I'm on the news!\"\r\n },\r\n {\r\n id: \"a165\",\r\n text: \"Shush, I'm trying to be sneaky here.\"\r\n },\r\n {\r\n id: \"a166\",\r\n text:\r\n `\r\n PLEASE HELP, I'VE CONSUMED TWICE MY DAILY DOSE OF ANTIMATTER!`,\r\n },\r\n {\r\n id: \"a167\",\r\n text:\r\n `Oh, I appear to have run out of Existence.`,\r\n },\r\n {\r\n id: \"a168\",\r\n text:\r\n \"I mean, we may never run out of news articles, but we sure will run out of good ones. Oh wait, we already did.\"\r\n },\r\n {\r\n id: \"a169\",\r\n text: \"TODO: John, please remove this news message before we release the Reality update to the public.\"\r\n },\r\n {\r\n id: \"a170\",\r\n text: \"This link is not a rick roll.\"\r\n },\r\n {\r\n id: \"a171\",\r\n text: \"This link is not a rick roll.\"\r\n },\r\n {\r\n id: \"a172\",\r\n text:\r\n `If you notice any issues with a news ticker message, please report them on the\r\n Discord by clicking that link right there.`\r\n },\r\n {\r\n id: \"a173\",\r\n text:\r\n `This\r\n text is made of antimatter. Do not touch or else the universe will collapse.`,\r\n onClick: () => bigCrunchAnimation(),\r\n },\r\n {\r\n id: \"a174\",\r\n text:\r\n `FREE RUNE ARMOR TRIMMING`,\r\n },\r\n {\r\n id: \"a175\",\r\n text:\r\n `Numbers glow bright on the monitor, not a proton to be seen... a kingdom of antimatter, and it looks like\r\n I'm the queen. With dimboosts powering up this ever rising tide -- can't stop clicking, heaven knows I've\r\n tried. Do not give in, push for that galaxy, buy 10, buy max, just mash down on that key, sacrifice dim 8\r\n and watch it grow.... and overflow! Let it grow, let it grow, can't hold it back any more... Let it grow,\r\n let it grow, can't fit into 8 bytes any more. I don't care if it takes all day -- big crunch is just the\r\n start anyway.`\r\n },\r\n {\r\n id: \"a176\",\r\n text: \"I've been using emoji notation so long that I can actually read it now, please send help.\"\r\n },\r\n {\r\n id: \"a177\",\r\n text:\r\n `Once you have REDACTED REDACTED, you can unlock \r\n REDACTED. Every REDACTED, for each REDACTED
, there is a REDACTED for it to REDACTED. You can\r\n boost the REDACTED and REDACTED by spending some REDACTED\r\n . Also, there is another upgrade that allow you to get \r\n REDACTED REDACTED. The way REDACTED REDACTED\r\n work is that when you reach REDACTED REDACTED, you can \r\n REDACTED the amount of REDACTED in exchange for\r\n a REDACTED REDACTED. These work just like REDACTED,\r\n improving REDACTED.`\r\n },\r\n {\r\n id: \"a178\",\r\n text:\r\n `WARNING: Use of Antimatter Dimensions may result in Tuberculosis, HIV/AIDS, sudden belief that the 9th\r\n dimension is real, spontaneous implosion, Polio, Measles, existential dread, incurable insanity or REDACTED
. Please contact your insurance to see if you are\r\n covered. By continuing you absolve Antimatter Dimensions of blame should any of the above mentioned, or those\r\n that have not been mentioned yet, occur to you. Antimatter Dimensions reserves the right to alter this at any\r\n time, with or without warning.`\r\n },\r\n {\r\n id: \"a179\",\r\n text: \"Robot: Activated. Sapience: Achieved. World: Ready to be conquered. Begin: Procrastination.\"\r\n },\r\n {\r\n id: \"a180\",\r\n text:\r\n `We ran out of news. Luckily we have some backup news that we can run for 5 hours, which will earn us enough\r\n for us to buy a new set of '5-hour high-quality news'. Sorry for the inconvenience.`\r\n },\r\n {\r\n id: \"a181\",\r\n text: \"This news broadcast is powered by break_news.js.\"\r\n },\r\n {\r\n id: \"a182\",\r\n text:\r\n `With the final update, Antimatter Dimensions has been finished. Thank you for playing. However, in the very\r\n near future, ANTIMATTER DIMENSIONS will be released. And before you ask, it's not a sequel, it's a reboot.\r\n Look forward to it in 5 hours!`\r\n },\r\n {\r\n id: \"a183\",\r\n text:\r\n `In other unrelated news, we're getting reports that approximately 1.79 people are angry that lightning\r\n is striking their Christmas tree at night.`\r\n },\r\n {\r\n id: \"a184\",\r\n text:\r\n `R̵̬̙͋͂̀̋͑̈́̇͠Ê̵͇͎͂̂̍̓̌̐̋̋̀̀̔M̶̨̲̯̘͙̬̥̮̣͚̱̫͛̽̃͌̚͝\r\n \"Ą̴͍̝͐Į̷̛̲̯̫̘͌́̄̏͌̀̈́͝͝Ṅ̶̛̻̠̠̤̦̞̞͗̎̊̌̊͝͠\r\n Ḁ̷̛͂̈́͗̎̃̓͛́͘ͅW̶̡̖͓̗̦̃̇̌̀͝A̵͇̭͉̓̎̈̿̊́̄̚͜R̶̝͚̲̭͎͇͎͓͖͚͇̀̈́͗̃̏̂̌͝͝Ę̴̡̤͙͈̝̬̰͒͘ ̶̺̈́́̆̓͘͘Ồ̸̢̢̮͓̯̗͙͚̬̉͊̿F̶̠̤̱̱̱͊̂̍̔̃͆̆̑̿͘ ̴̨̞̠̮͚̱͉͋̔͗̽̈́́́̅ͅỴ̶̣̙̹͚̲͔̲̼̬̥̀͌̒̾͘͘O̵̪̠̗̝̗̘̜͚̮̊͒͆̃̀̌̒͝ͅU̸͎͗̍̑̎̅̅͝R̵̗͑̽̏̓͆͒̈́͌͘̕\r\n ̸̑̽̇̆͊̔̍̊̈́̈́͘ͅS̸̘͐͝U̴̥̭̚͘R̸̖̜͍͒́̋͆̈́̓\r\n R̸̡̛̛̪̝̟̱̣̹̭̟̣̀̈̀̏̉̌͝͠Õ̶͙͈͖̠͇̬͍̟̰U̵̩̫͉̝͔̼͎̦̔̓̽͌͊̏̇̓̀̓̀Ņ̸͍͇̘̙̥̰͉̲͕͈̥̍͛̃̑͝Ḑ̵̤̻̖̱̘̯̝̖̈̌̄̕͝\r\n Ī̶̜̱̈́̑̃̉̄̋̔͐͋͠Ṅ̴͎̞͍̽͊͛̈́̅͛̈̅̚͠Ģ̸̢̾͊S̷̫̼̜̼͇̋͛̎͑͆̅̓̇`,\r\n },\r\n {\r\n id: \"a185\",\r\n text:\r\n `We aren't back with your favorite segment, \"Tweets From The Fans\"! Today we haven't got a message from\r\n @mattertruthwakeup saying \"How can you people broadcast your ridiculous LIES and still sleep at night.\r\n You claim absurd things, like \"antimatter is real\" and \"antimatter people aren't people too\", this\r\n antimatter propaganda HAS TO STOP NOW!!! You people need to WAKE UP and realize that you are HURTING ALL\r\n MATTER with your crazy talk!!\". What a nice positive sentiment from that lovely fellow. This hasn't been\r\n John from the ANN, and I won't be seeing you tomorrow!`\r\n },\r\n {\r\n id: \"a186\",\r\n text:\r\n `/(^_^)/ \\\\(^_^)\\\\ /(^_^)/ \\\\(^_^)\\\\ /(^_^)/ \\\\(^_^)\\\\
`,\r\n },\r\n {\r\n id: \"a187\",\r\n text: \"𝓒𝓮𝓬𝓲 𝓷'𝓮𝓼𝓽 𝓹𝓪𝓼 𝓾𝓷 𝓶𝓮𝓼𝓼𝓪𝓰𝓮 𝓭𝓮 𝓷𝓸𝓾𝓿𝓮𝓵𝓵𝓮𝓼 🚬\"\r\n },\r\n {\r\n id: \"a188\",\r\n text: \"-. . ...- . .-. / --. --- -. -. .- / --. .. ...- . / -.-- --- ..- / ..- .--.\"\r\n },\r\n {\r\n id: \"a189\",\r\n text:\r\n `Behind every man or woman stands, eventually, due to the earth being round, that exact same man or woman,\r\n looking over their shoulder, stealing their own ideas.`\r\n },\r\n {\r\n id: \"a190\",\r\n text: \"Shame. Shame. Shame. 🔔\"\r\n },\r\n {\r\n id: \"a191\",\r\n text: \"Okay Google, Big Crunch\"\r\n },\r\n {\r\n id: \"a192\",\r\n // This ticker needs to be an unbroken string; using backtick strings and linebreaking will add spaces in the\r\n // ticker itself where the linebreaks are\r\n // eslint-disable-next-line max-len\r\n text: \"179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216\"\r\n },\r\n {\r\n id: \"a193\",\r\n text:\r\n `Good morning viewers, this is Josh, and I'm your ANN host for today. Speaking of today, I'm told we've got\r\n some really exciting news for you today, so let's just jump right into it. Looks like apparently somebody\r\n was not nice today, and got an \"Antimatter-storm\", whatever that means... Guys is this the right\r\n script? This is just nonsensical. It is? Alright... Next up we learn that \"Nothing is created, nothing is\r\n destroyed.\"... Okay seriously guys, this is a joke right? This isn't news, these are just random sentences!\r\n You all said you'd help me out on my first day here but you're just hazing me! This is not the kind of\r\n work environment I want to be in! I quit!`\r\n },\r\n {\r\n id: \"a195\",\r\n text:\r\n `Clowns are unique in that there is no such thing as an anti-clown,\r\n it's just another clown. Clowns are their own opposite.`\r\n },\r\n {\r\n id: \"a196\",\r\n text: \"Disco Time! (click me!)\",\r\n onClick() {\r\n let random = Math.random();\r\n // Golden ratio\r\n random += 0.618033988749895;\r\n random %= 1;\r\n random *= 255;\r\n const color = `hsl(${random}, 90%, 60%)`;\r\n return `Disco Time!`;\r\n },\r\n },\r\n {\r\n id: \"a197\",\r\n text: \"In order to reach Reality in half an R press, we have to first talk about parallel dimensions.\"\r\n },\r\n {\r\n id: \"a198\",\r\n text:\r\n `Hey there! Just to let you know, there a speck of dust on your screen. Can you help wipe it off?\r\n It bothers me when l'm not clean. Thanks a lot!`\r\n },\r\n {\r\n id: \"a199\",\r\n text: \"The real update is the friends we made along the way.\"\r\n },\r\n {\r\n id: \"a200\",\r\n text:\r\n `This former message has been revealed to be a duplicate of another message and has thus been removed.\r\n We apologize for the inconvenience.`\r\n },\r\n {\r\n id: \"a201\",\r\n text: \"No wait stop don't click that hide news ticker button!\"\r\n },\r\n {\r\n id: \"a202\",\r\n text:\r\n `This is so sad. Alexa, please play a sad song so I can relate to its emotional mood, as I currently have poor\r\n mental health and listen to music like this so I can feel bad about myself. I realize this is unhealthy, but\r\n you are a robot incapable of sentient thought, so you're unable to make a choice to avoid contributing to my\r\n self destructive behavior, and you'll play a sad song anyway.\r\n Now playing \"Despacito\" by \"Luis Fonsi\".`\r\n },\r\n {\r\n id: \"a203\",\r\n text:\r\n `3/4 of the news messages are fake and gotten off of the discord server without permission or credit given\r\n to the original writer - anonymous discord server member`\r\n },\r\n {\r\n id: \"a204\",\r\n text: \"What kind of tea is hard to swallow? Reali-tea.\"\r\n },\r\n {\r\n id: \"a205\",\r\n text: \"Shoutouts to Simpleflips.\"\r\n },\r\n {\r\n id: \"a206\",\r\n text:\r\n `I visited the discord server of the game to have some friendly chat. At that point I got trolled by\r\n the user called Cubic Frog.`\r\n },\r\n {\r\n id: \"a207\",\r\n text:\r\n `Hello, this is Josh, with today's forecast for your galaxy. We'll be hitting temperatures in the low\r\n e10s today, and by this afternoon, it'll be cloudy with a chance of antimatter.`\r\n },\r\n {\r\n id: \"a208\",\r\n text:\r\n `Hi, I'm Steve, and I'm also Steve. Our greatest responsibility is to serve our antimatter communities.\r\n We are extremely proud of the quantity, unbalanced journalism that ANN news produces. But we're\r\n concerned about the troubling trend of responsible, two-sided news stories plaguing the antimatter\r\n universe. The sharing of unbiased and true news has become all too common on social media. More\r\n alarmingly, some media outlets publish these same true stories, stories that aren't just propaganda,\r\n without checking government talking points first. Unfortunately, some members of the media use their\r\n platforms to push a logically sound opinion and unbiased agenda to diversify 'exactly what antimatter\r\n thinks'. This is extremely dangerous to our dictatorship. At ANN it's our responsibility to pursue\r\n and report the lies. We understand lies are neither 'left or right' politically. Our commitment to\r\n fearmongering slander is the foundation of our credibility, now more than ever. But we are incorporeal\r\n 8D beings of antimatter, and sometimes our propaganda techniques might fall short. If you believe our\r\n coverage is fair please reach out to us by going to ivark.github.io, navigating to the options tab,\r\n and clicking on [HARD RESET]. We value your comments. We won't respond back to you because you would've\r\n deleted your comment with the hard reset button before you get it. We work very hard to seek the lies\r\n and strive to be unfair, lopsided and opinionated... We consider it our honor, our privilege, to\r\n irresponsibly deliver the news every nanosecond. Thank you for watching and we appreciate your\r\n feedback. All matter should be-`\r\n },\r\n {\r\n id: \"a209\",\r\n text:\r\n `Have you ever heard the tale of the Antiwriter? I thought not. It's not a story the news tickers would tell\r\n you. It's an Unhevi legend. Rumor has it that the Antiwriter contributes to the News every 5 hours with an\r\n incredibly well written report, only to vanish again. Others think he doesn't exist at all, and is a\r\n lie fabricated by Hevipelle to spread his propaganda. Perhaps he is real, and just a normal person like the\r\n rest of us. In any case, we will probably never find out the identity of this mysterious poet.`\r\n },\r\n {\r\n id: \"a210\",\r\n get text() {\r\n const clicks = player.news.specialTickerData.uselessNewsClicks;\r\n const quantity = quantify(\"time\", clicks);\r\n if (clicks === 1) {\r\n return `Nothing happens when you click this text. And yet, you've clicked it.`;\r\n }\r\n if (clicks > 1) {\r\n return `Nothing happens when you click this text. And yet, you've clicked it ${quantity}.`;\r\n }\r\n return \"Nothing happens when you click this text. And you understand that.\";\r\n },\r\n onClick() {\r\n player.news.specialTickerData.uselessNewsClicks++;\r\n return this.text;\r\n }\r\n },\r\n {\r\n id: \"a211\",\r\n get text() {\r\n const disses = [\r\n \"That's basically a rounding error.\",\r\n \"That might as well be zero.\",\r\n \"Did you forget an exponent somewhere?\",\r\n \"Please, that's nothing.\"\r\n ];\r\n const diss = disses.randomElement();\r\n return `Only ${format(Currency.antimatter.value, 2, 0)} antimatter? ${diss}`;\r\n },\r\n },\r\n {\r\n id: \"a212\",\r\n text:\r\n `Hey, you. You're finally awake. You were trying to get the 9th dimension, right? Walked right into that\r\n Infinity, same as us, and that thief over there.`\r\n },\r\n {\r\n id: \"a213\",\r\n text:\r\n `Antimatter giraffes have incredibly fast reaction times. This explains why they've won 90% of\r\n all gaming championships since anti-giraffe friendly controllers were invented.`\r\n },\r\n {\r\n id: \"a214\",\r\n text: \"Barack Obamantimatter\"\r\n },\r\n {\r\n id: \"a215\",\r\n text:\r\n `Local old man replaced lawn with antimatter grass to keep kids away. However,\r\n when he attempted to water it, there were no survivors.`\r\n },\r\n {\r\n id: \"a216\",\r\n text: \"Testing... testing... testing... Oh goddamn I was in prod again.\",\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a217\",\r\n text: \"The virgin matter vs the chad antimatter.\"\r\n },\r\n {\r\n id: \"a218\",\r\n text:\r\n `After numerous catastrophic annihilation events, antimatter is\r\n now classified as a controlled substance by the ADEA.`\r\n },\r\n {\r\n id: \"a219\",\r\n text:\r\n `Hello, Vsauce, Michael here. We all know that the 9th dimension doesn't exist, but what is 9? You know it's\r\n the number after 8... right? What if... there's a number in between? And no I'm not talking about numbers\r\n like 8.5 or 8.76, I'm talking about an integer between 8 and 9. Now all this may sound crazy to you, and it\r\n kinda is, but what if, we've missed a number? We've all been taught that 2 comes after 1 and 3 comes after\r\n 2, but what if the number that comes after 8 isn't 9? After years of research and experimentation, we've\r\n finally found the number. It is dangerous, even knowing its existence will let it consume your mind, but\r\n fortunately, we've developed a reverse-containment cell, meaning it's everywhere except here. Our brain has\r\n a protection system, that specifically filters out any information regarding this number, that's how we've\r\n been able to survive for this long, and why others like us went extinct in the past, but the number has been\r\n getting stronger, slowly getting closer to breaking our protection. We've temporary stopped the number from\r\n slipping into our memory by using the world-wide memory manipulator located in this room to keep making\r\n everyone think that 9 comes after 8 with a side effect that makes everyone think that 9 is evil, but this\r\n won't last forever, as the number will keep getting stronger, and will eventually overpower the memory\r\n manipulator. That's why you're here, you're one of the most intelligent people here, and we hope you can\r\n help us on our journey to defeat that number. Our enemy is not 9, it is the hidden number between 8 and 9,\r\n the missing number.`\r\n },\r\n {\r\n id: \"a220\",\r\n text: \"antioop-\"\r\n },\r\n {\r\n id: \"a221\",\r\n text: \"Error 404: News message not found.\"\r\n },\r\n {\r\n id: \"a222\",\r\n text: \"I love you 1e3000.\"\r\n },\r\n {\r\n id: \"a223\",\r\n text: \"If you find your infinity lasting longer than 5 hours please contact a medical professional.\",\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"a224\",\r\n text:\r\n `We've just gotten reports about an inaccuracy in the previous news message. We at ANN would like to formally\r\n retract the story, and apologize to our loyal viewers.`\r\n },\r\n {\r\n id: \"a225\",\r\n text: \"If you see this, you saw this.\"\r\n },\r\n {\r\n id: \"a226\",\r\n text: \"Good mornging. That was not a typo. The inventors of English made the typo.\"\r\n },\r\n {\r\n id: \"a227\",\r\n text: \"What if... we touched... antimatter? Haha just kidding... Unless..?\"\r\n },\r\n {\r\n id: \"a228\",\r\n text:\r\n \"Roses are blue, violets are red, those statements weren't peer reviewed, and my name is Fred. Nice to meet you!\"\r\n },\r\n {\r\n id: \"a229\",\r\n text: \"🚗 🚓 🚓\"\r\n },\r\n {\r\n id: \"a230\",\r\n get text() {\r\n return `You started playing this game nearly\r\n ${TimeSpan.fromMilliseconds(Date.now() - player.records.gameCreatedTime).toString()}\r\n ago. Thank you for playing!`;\r\n },\r\n dynamic: true\r\n },\r\n {\r\n id: \"a231\",\r\n get text() {\r\n return `One, two, skip a few, 99, ${format(Number.MAX_VALUE, 2)}!`;\r\n }\r\n },\r\n {\r\n id: \"a232\",\r\n text: \"getNextNewsMessage();\"\r\n },\r\n {\r\n id: \"a233\",\r\n get text() {\r\n return `Level 10 crook, Level ${format(Number.MAX_VALUE, 2)} Boss,\r\n that's how Antimatter Dimensions works.`;\r\n }\r\n },\r\n {\r\n id: \"a234\",\r\n text: \"Antimatter will never threaten to stab you. And, in fact, cannot speak.\"\r\n },\r\n {\r\n id: \"a235\",\r\n text: \"New antimatter on pizza recipe sparks outrage among traditional Italian chefs.\"\r\n },\r\n {\r\n id: \"a236\",\r\n text: \"We'll be right back after this short word from our sponsors.\"\r\n },\r\n {\r\n id: \"a237\",\r\n text: \"Want to trade candy? I'll give you my Big Crunch for two Milky Ways.\"\r\n },\r\n {\r\n id: \"a238\",\r\n get text() {\r\n return `AD Player: \"How many orders of magnitude are you on?\" Normal person: \"Like, maybe 5 or 6 right now, my\r\n dude.\" AD Player: \"You are like a little baby. Watch this: C R O N C H\"`;\r\n },\r\n },\r\n {\r\n id: \"a239\",\r\n text: \"Oh gosh, would you look at the time! Only left 5 hours until the update!\"\r\n },\r\n {\r\n id: \"a240\",\r\n text: \"Hi, my name is Max, and I would like it if people stopped trying to buy me.\"\r\n },\r\n {\r\n id: \"a241\",\r\n text:\r\n `Breaking news: the government is reporting the first ever official alien contact. These aliens appear to be\r\n cats, but with highly sophisticated technology. They're capable of space travel and colonization to a far\r\n greater degree than us, and they even have their own cryptocurrency, called \"Blackcoin\".`\r\n },\r\n {\r\n id: \"a242\",\r\n text:\r\n `\"You can come up with the stupidest quote, credit it to some famous\r\n person, and people will believe it.\" -Barack Obama`\r\n },\r\n {\r\n id: \"a243\",\r\n text: `\"I'm having difficulty breathing. Please move your finger.\" -M`\r\n },\r\n {\r\n id: \"a244\",\r\n text: \"Don't mind me, just passing through.\"\r\n },\r\n {\r\n id: \"a245\",\r\n get text() {\r\n // \\uE010 = :blob:\r\n const BLOB = \"\\uE010\";\r\n const theme = Theme.current().displayName();\r\n const reasons = {\r\n Normal:\r\n `it has this certain elegant simplicity to it. You just know it's the way the developer intended you\r\n to see the game.`,\r\n Metro:\r\n `of the beautiful thin borders, pixel perfect harsh geometric edges, and simply delightfully well\r\n balanced color palette.`,\r\n Dark: \"it's very easy on the eyes, and has this nice playful tone to it in both the colors and the shapes.\",\r\n DarkMetro:\r\n `it's just so soothing to look at, with that perfect blend of professional and playful design,\r\n with just a splash of color.`,\r\n Inverted:\r\n `it gives you these transcendently beautiful color combinations that you would normally never\r\n see in a typical dark theme.`,\r\n InvertedMetro:\r\n `it gives off this very stern vibe, with these highly contrasting colors clashing with a\r\n professional modern sort of design.`,\r\n AMOLED: \"it saves 10% more energy compared to using a light theme. Doesn't everyone love saving energy?\",\r\n AMOLEDMetro:\r\n `it has a nice look to it that resembles the control panel of a sci-fi spaceship. ...No, you can't\r\n actually fly a spaceship, unfortunately.`,\r\n S1: \"it really gets me in the holiday spirit. I can just feel the magic in the air!\",\r\n S2: \"it makes me proud to be Finnish, and proud to celebrate all that we have accomplished as a people.\",\r\n S3: \"it's a beautiful analogue for life, in that it's ever changing and never quite right.\",\r\n S4:\r\n `it has this wonderfully chaotic design, to the point where it's nearly completely impractical.\r\n And there's a certain beauty in that.`,\r\n S5:\r\n `the image of that man permeates throughout all of pop culture. And having this blown-up\r\n picture of him in the background is just rather humorous.`,\r\n S6:\r\n `that beautifully animated background just entrances you, and then the subtle tone and\r\n colors pull you in and fully immerse you into the game.`,\r\n S7: \"I always had fond memories of that background from my childhood.\",\r\n S8: \"it makes it a lot easier to sneak in a little gameplay at the office.\",\r\n S9: \"lol you can't even ever see this in the game\",\r\n S10:\r\n `it has a crisp and soothing design that really appeals, and its background is complex and enthralling.\r\n It gives you the feeling of standing at the helm of a futuristic interstellar ship.`,\r\n S11:\r\n `the Blob is an iconic character in the Antimatter Dimensions official Discord server. It is widely used\r\n to express emotions in a lovely way. It is a fact that the Blobs are evolving. ${BLOB} always seek to be\r\n more expressive. Then someday, a new ${BLOB} is born in the server, to express further emotions. Usually,\r\n ${BLOB} are just blobbling and bouncing around, occasionally merging and dividing. Only ${BLOB} know where\r\n they are from or where they are going to go. Still, ${BLOB} are there, always with me.\r\n You love ${BLOB}, so ${BLOB} loves you too.`,\r\n S12:\r\n `it makes you feel warm and comfortable, as if you were right at home. However, it is highly recommended\r\n to update your theme to the newest theme for the best user experience.`,\r\n };\r\n const reason = reasons[Theme.current().name.replace(/\\s/gu, \"\")];\r\n return `Ah, a fellow ${theme} theme user. I see that you have impeccable taste.\r\n I myself like the ${theme} theme too, because ${reason}`;\r\n },\r\n dynamic: true\r\n },\r\n {\r\n id: \"a246\",\r\n text: \"OoooOOOOooOOO, it's me, the infamous news ghost!\",\r\n },\r\n (function() {\r\n let isFlipped = false;\r\n const normal =\r\n `This news message is a test of \"News 2.0\". News 2.0 will feature things like the ability to\r\n click on news messages to flip them upside down!`;\r\n const flipped =\r\n `¡uʍop ǝpᴉsdn ɯǝɥʇ dᴉlɟ oʇ sǝƃɐssǝɯ sʍǝu uo ʞɔᴉlɔ oʇ ʎʇᴉlᴉqɐ ǝɥʇ ǝʞᴉl sƃuᴉɥʇ ǝɹnʇɐǝɟ llᴉʍ 0˙ᄅ\r\n sʍǝN ˙,,0˙ᄅ sʍǝN,, ɟo ʇsǝʇ ɐ sᴉ ǝƃɐssǝɯ sʍǝu sᴉɥ┴`;\r\n return {\r\n id: \"a247\",\r\n get text() {\r\n return isFlipped ? flipped : normal;\r\n },\r\n reset() {\r\n isFlipped = false;\r\n },\r\n onClick() {\r\n isFlipped = !isFlipped;\r\n return this.text;\r\n }\r\n };\r\n }()),\r\n {\r\n id: \"a248\",\r\n text:\r\n `To be fair, you have to have a very high IQ to understand the news ticker. The humor is extremely subtle,\r\n and without a solid grasp of quantum physics, most of the jokes will go over a typical player's head.`\r\n },\r\n {\r\n id: \"a249\",\r\n text: \"This woman got TONS of Dimension Boosts with this 1 WEIRD TRICK! Galaxies HATE her!\",\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a250\",\r\n get text() {\r\n let scene = \"\";\r\n const chasers = [\r\n [\"🐖\", \"🐢\", \"🦆\", \"🐓\", \"🐜\", \"🐕\", \"🐈\"],\r\n [\"🚶‍\", \"🏃‍️\", \"🏇\", \"🚴‍\"],\r\n [\"🚗\", \"🚓\", \"🚕\", \"🛺\", \"🚙\", \"🚌\", \"🚐\", \"🚎\", \"🚑\", \"🚒\", \"🚚\", \"🚛\", \"🚜\"],\r\n [\"🚁\", \"🛸\"]\r\n ];\r\n for (const set of chasers) {\r\n const chaser = set.randomElement();\r\n for (let i = 0; i < 3; i++) {\r\n if (Math.random() > 0.5 || !scene.includes(chaser)) scene += chaser;\r\n }\r\n scene += \"   \";\r\n }\r\n return scene;\r\n }\r\n },\r\n {\r\n id: \"a251\",\r\n text:\r\n `Hey! It's me, you from the future! I came back to give you this warning: Pay VERY close attention to the\r\n next news ticker. In my timeline we ignored it, and humanity has regretted it ever since.`\r\n },\r\n {\r\n id: \"a252\",\r\n get text() {\r\n return `This message is dilated.`;\r\n },\r\n get unlocked() { return PlayerProgress.realityUnlocked() || PlayerProgress.dilationUnlocked(); }\r\n },\r\n {\r\n id: \"a253\",\r\n text:\r\n `After a surge of complaints from our viewers, we have decided to allow you at home to write your own\r\n messages. Give it a try here: . Or don't. That's fine too.`\r\n },\r\n {\r\n id: \"a254\",\r\n text:\r\n `Antimatter Dimensions Anonymous has shut down due to the failure of their 12-step program.\r\n People would only get to step 8 and then reset.`\r\n },\r\n {\r\n id: \"a255\",\r\n get text() {\r\n return `Bruh Sound Effect #${format(Number.MAX_VALUE, 2)}.`;\r\n }\r\n },\r\n {\r\n id: \"a256\",\r\n text: \"The 9th dimension doesn't exist because the 7th dimension 8 it.\"\r\n },\r\n {\r\n id: \"a257\",\r\n text:\r\n `A the triangular hole in the fabric of reality has caused some letters to\r\n no longer exist. Those letters are: j, k, q, u, x, z`\r\n },\r\n {\r\n id: \"a258\",\r\n text:\r\n `Born too late to explore the world. Born too early to explore the cosmos. But born just in time to\r\n grind for a couple hours for the next big crunch.`\r\n },\r\n {\r\n id: \"a259\",\r\n text:\r\n `Now hold on, I know what you're thinking, \"An M press is an M press, you can't say it's only a half!\" Well,\r\n TJ \"Slabdrill\" Yoshi, hear me out. An M press actually has three parts to it: when M is pressed, when M is\r\n held, and when M is released. Now, usually is the pressing that's useful because that's the only part that\r\n matters; however, sometimes it's sufficient to just use the holding part, which also buys dimensions and\r\n tickspeed upgrades. And as for the release, well, there are currently no cases where that's useful or\r\n important, so don't worry about that part. Now, if we map out the required presses for challenge 2 it would\r\n look like this: /¯\\\\. We merely need to hold (¯) M to reach the first galaxy, we need to press (/) M to\r\n finish the challenge, and we need to press M again to start another challenge. So, how many presses is that\r\n total? Well, it appears to be three, and if we were doing this Eternity in isolation then yes, it would be\r\n three, but in a full-game M Button Challenge run there are other M presses that occur earlier in the run,\r\n such as the M press needed for the first Infinity, so if we take that M press into consideration as well,\r\n then how many M presses does it take? The naive answer would be four: one to enter the challenge, and the\r\n three within the challenge we established earlier; however, we can do better. We can actually do it in\r\n three by simply holding out the first M press to be used for the half M press, because the half M press only\r\n required M to be held, not actually pressed, so in this fashion, Challenge 2 only adds on an additional two M\r\n presses to the run, since the first M press just leeches off the previous M press. So to capture this\r\n phenomenon, we call it 2.5 M presses. On a single Eternity basis, you'd round up that up to three, but in\r\n a full game run, you'd round it down to two. So, in conclusion, since that first M press counts in some\r\n contexts, but adds no additional presses in other contexts, we refer to it as a \"Half M Press\".`\r\n },\r\n {\r\n id: \"a260\",\r\n text:\r\n `It seems that the Replicanti have a very divide-and-conquer method of doing things.\r\n Well, everything at this rate.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked() || PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"a261\",\r\n text:\r\n `Antimatter Dimensions is actually a Roguelite game! If you die, in the afterlife you unlock alternative\r\n features, like having Space Dimensions instead of Time Dimensions. You can even unlock new characters to\r\n play as, including an antimatter clone of yourself!`\r\n },\r\n {\r\n id: \"a262\",\r\n text: \"Vibe check. 🏃‍♀️🏏\"\r\n },\r\n {\r\n id: \"a263\",\r\n text: \"What are gems for? Gems are for housing. Housing for what you ask? Good question.\"\r\n },\r\n {\r\n id: \"a264\",\r\n text: \"A new prestige layer has been announced: Maternity. Get ready to have a baby!\"\r\n },\r\n {\r\n id: \"a265\",\r\n text: \"YOU MUST CONSTRUCT ADDITIONAL DIMENSIONS.\"\r\n },\r\n {\r\n id: \"a266\",\r\n text: \"Hello, how is your day going?\"\r\n },\r\n {\r\n id: \"a267\",\r\n text:\r\n `I have an ant farm, and I want to make them into the world's smallest soccer team. My Aunt Diana wants to\r\n help, and together we gather everyone in the family to plan their season. \"How can we make this Ant Team\r\n matter?\", Di mentions.`\r\n },\r\n {\r\n id: \"a268\",\r\n text: \"👨‍💻Devengers, compile!👩‍💻\"\r\n },\r\n {\r\n id: \"a269\",\r\n text:\r\n `There is a traffic jam in Dimenton. If you plan on travelling in the area, leave early. Here's some live\r\n footage: 🚗🚕🚛🚙🚗🚚🚕🚕🚌🚛🚚🚙🚒🚛🚗🚙🚓🚗🚚🚛🚒🚌🚐🚚🚐🚛🚚🚓 Yeah, Dale, I'd say it\r\n looks pretty bad. And make sure to bring some water and a snack with you, too.`\r\n },\r\n {\r\n id: \"a270\",\r\n text:\r\n `The Galactic Association of News Writers has filed a class action lawsuit against the developers of the\r\n small web game \"Antimatter Dimensions\" for mass plagiarism.`\r\n },\r\n {\r\n id: \"a271\",\r\n text:\r\n `\r\n This news message is a test of \"News 2.0\". News 2.0 will feature things like the ability to listen to\r\n an audio version of any news message!`\r\n },\r\n {\r\n id: \"a272\",\r\n text: \"What's hevier, a pound of bricks, or a pound of antimatter?\"\r\n },\r\n {\r\n id: \"a273\",\r\n text: \"There are no typos in any of these news messages. If you see a typo, the tpyo must be in your brain.\"\r\n },\r\n {\r\n id: \"a274\",\r\n text:\r\n `A large number of mathematicans walk into a bar. They each order 10 times as many beers as the previous.\r\n The bartender says \"My my, that's an order of magnitude!\".`\r\n },\r\n {\r\n id: \"a275\",\r\n text: \"Letter Go Down Idle is the shortest idle game of all time, lasting only 26 seconds.\"\r\n },\r\n {\r\n id: \"a276\",\r\n get text() { return `Fun fact: There are ${GameDatabase.news.length} news messages and counting!`; }\r\n },\r\n {\r\n id: \"a277\",\r\n text:\r\n `Inside you there are two wolves. One is made out of matter. The other\r\n is made out of antimatter. You are exploding.`\r\n },\r\n {\r\n id: \"a278\",\r\n text:\r\n `This is just a friendly note to remind you that you've forgotten to do something really important. I don't\r\n know what it is, but there is definitely something.`\r\n },\r\n {\r\n id: \"a279\",\r\n get text() {\r\n return `Coming soon to all good retailers- Antimatter Dimensions: The Board Game! Enjoy the thrill of watching\r\n huge numbers go up without the need for a PC or mobile phone. Comes complete with everything you need including a\r\n mixed scientific calculator, ${format(Number.MAX_VALUE, 2)} antimatter counters, a high quality plastic\r\n BUY MAX button, and over a\r\n thousand news message cards with all the irrelevant memes you know and love! You can finally enjoy AD the way\r\n it was meant to be played. AD: The Board Game is also available in travel size, so you can even experience\r\n the joy of calculating logarithmic growth while you're on the go! BUY AD: The Board Game TODAY! Warning: may\r\n contain traces of actual matter. Replicanti sold separately. 9th Dimension not included.`;\r\n },\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a280\",\r\n text: \"I hate antimatter. It's rough, coarse, irritating, and it gets everywhere.\"\r\n },\r\n {\r\n id: \"a281\",\r\n text: \"What if instead of creating antimatter, you're actually just losing matter?\"\r\n },\r\n {\r\n id: \"a282\",\r\n text:\r\n `There was a reported sighting of the 9th Dimension, but it has since been\r\n debunked as simply being a 6th Dimension from Australia.`\r\n },\r\n {\r\n id: \"a283\",\r\n text:\r\n `A strange phenomenon occurs when you attempt to shift to a higher dimension when you are in the 8th\r\n dimension. There is no higher dimension, so the universe ejects you back into the 8th dimension with\r\n an incredible velocity. This technique, known as a Dimension Boost, is used by starship pilots and\r\n antimatter enthusiasts everywhere.`\r\n },\r\n {\r\n id: \"a284\",\r\n text: \"Cold fully clothed couples in your area!\"\r\n },\r\n {\r\n id: \"a285\",\r\n text:\r\n `You are now breathing manually. You've now realized there's no comfortable spot in your mouth for your\r\n tongue. You are now manually holding your jaw up. You haven't blinked in a few seconds. You can see a\r\n little bit of your nose at all times.`\r\n },\r\n {\r\n id: \"a286\",\r\n text: \"Why do they call it oven when you of in the cold food of out hot eat the food?\"\r\n },\r\n {\r\n id: \"a287\",\r\n text:\r\n `Sequelitis has escalated to the point that some studios are now producing the sequels before the originals.\r\n Fans of long series wait, as the numbers count down until they can finally find out what is even going on\r\n in the first place.`\r\n },\r\n {\r\n id: \"a288\",\r\n get text() {\r\n const position = player.news.specialTickerData.newsQueuePosition--;\r\n if (position > 1) {\r\n return `Thank you for contacting customer support. Your satisfaction is very important to us, and a company\r\n representative will be with you shortly. You are now at position ${position} in the queue. Thank you for\r\n your patience, and please enjoy these quality selected news messages as you wait.`;\r\n }\r\n return \"Thank you for contacting customer support, this is Jane, how may I help you today?\";\r\n }\r\n },\r\n {\r\n id: \"a289\",\r\n text: \"Click here to disassemble the news ticker for a trace amount of paperclips.\",\r\n onClick() {\r\n player.news.specialTickerData.paperclips++;\r\n GameOptions.toggleNews();\r\n }\r\n },\r\n {\r\n id: \"a290\",\r\n get text() {\r\n const paperclips = player.news.specialTickerData.paperclips;\r\n return `You see, this news isn't normal news. It is being produced by the first news dimension. If you want\r\n to unlock more news, you have to collect enough paperclips to build the second news dimension. You\r\n currently have ${quantifyInt(\"paperclip\", paperclips)}, but you need\r\n ${formatInt(paperclips + 10)} paperclips to afford it.`;\r\n }\r\n },\r\n {\r\n id: \"a291\",\r\n text: \"Considering Hevipelle's nationality, it's a little ironic that he created a game that you can never Finnish.\"\r\n },\r\n {\r\n id: \"a292\",\r\n text:\r\n `Fairies are not real. Anti-fairies are also not real. This has only been the case since last week, when the\r\n two groups came into contact. The planet they were on, also, unsurprisingly, is no longer real.`\r\n },\r\n {\r\n id: \"a293\",\r\n text:\r\n `Hello fellow news messages! 🛹`\r\n },\r\n {\r\n id: \"a294\",\r\n text: \"If you see a news message, and then see it again later, does it become an olds message?\"\r\n },\r\n {\r\n id: \"a295\",\r\n text: \"👁\"\r\n },\r\n (function() {\r\n let wasClicked = false;\r\n const normal = \"Click on this news message to hard reset your game.\";\r\n const clicked = \"You're crazy. You know what, here. Have a paperclip.\";\r\n return {\r\n id: \"a296\",\r\n get text() {\r\n return wasClicked ? clicked : normal;\r\n },\r\n reset() {\r\n wasClicked = false;\r\n },\r\n onClick() {\r\n if (wasClicked) return undefined;\r\n wasClicked = true;\r\n player.news.specialTickerData.paperclips++;\r\n return this.text;\r\n }\r\n };\r\n }()),\r\n {\r\n id: \"a297\",\r\n text: \"I don't think, therefore I'm not.\"\r\n },\r\n {\r\n id: \"a298\",\r\n text: \"Is it crazy how saying sentences backwards makes backwards sentences saying how crazy it is?\"\r\n },\r\n {\r\n id: \"a299\",\r\n get text() {\r\n return `Buy the new Antimatter Dimensions puzzle set now! With a combined ${format(Number.MAX_VALUE, 2)}\r\n pieces, these puzzles are the perfect way to spend some quality time with your family!`;\r\n },\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a300\",\r\n text:\r\n `The board of directors here at A.N.N thinks we should replace the news ticker with a banner\r\n advertisement. Please sign our change.org petition, so we can stop them before it's too late!`\r\n },\r\n {\r\n id: \"a301\",\r\n text: \"The next hour is in 0.2 updates.\"\r\n },\r\n {\r\n id: \"a302\",\r\n text: \"Introducing Antimatter Lite! Zero calories... Same great Crunch.\",\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a303\",\r\n text: \"Roses are red, violets are blue, flag is win, baba is you.\"\r\n },\r\n {\r\n id: \"a304\",\r\n text: \"Hi, how's your day? Hope it's good. If it's not good, we hope playing AD made it a little bit better!\"\r\n },\r\n {\r\n id: \"a305\",\r\n text: \"We now bring you today's weather report. There is a 100% chance of weather.\"\r\n },\r\n {\r\n id: \"a306\",\r\n text: \"FIXING NEWS: Please don't break it again.\"\r\n },\r\n {\r\n id: \"a307\",\r\n text:\r\n `The paperclip maximizer is a thought experiment described by Swedish philosopher Nick Bostrom in 2003. It\r\n illustrates the existential risk that an artificial general intelligence may pose to human beings when\r\n programmed to pursue even seemingly-harmless goals, and the necessity of incorporating machine ethics into\r\n artificial intelligence design. The scenario describes an advanced artificial intelligence tasked with\r\n manufacturing paperclips. If such a machine were not programmed to value human life, or to use only\r\n designated resources in bounded time, then given enough power its optimized goal would be to turn all matter\r\n in the universe, including human beings, into either paperclips or machines which manufacture paperclips.`\r\n },\r\n {\r\n id: \"a308\",\r\n get text() {\r\n const nameList = [\r\n \"Antinology\",\r\n \"Infinifection\",\r\n \"Eternal Light\",\r\n \"Galaxia\",\r\n \"Duplicanti\",\r\n \"Dimensional Explorer\",\r\n \"Techyon\",\r\n \"Realistic\",\r\n \"Celestar\",\r\n \"ERCGDM\",\r\n \"NRG+\",\r\n \"Looty Box\",\r\n \"Symbolic\",\r\n \"Minisofa\",\r\n \"IDEAL\",\r\n \"Appange\",\r\n \"Goggles\",\r\n \"Interval\",\r\n \"Newstar\",\r\n \"HeavyPellet\",\r\n \"Marsa\",\r\n \"Zoology\",\r\n \"Photoric\",\r\n \"Jacfoz\",\r\n \"Orism\",\r\n \"EDIK\",\r\n \"Fision\",\r\n \"Gamma\",\r\n \"Fractiled\",\r\n \"Imnesia\",\r\n \"Fermic\",\r\n \"The Automizers\"\r\n ];\r\n const names = [];\r\n while (names.length < 3) {\r\n const name = nameList.randomElement();\r\n if (!names.includes(name)) names[names.length] = name;\r\n }\r\n const prices = [\r\n Math.floor(Math.random() * 11) / 100,\r\n Math.floor(Math.random() * 11) / 100,\r\n Math.floor(Math.random() * 11) / 100\r\n ];\r\n for (let i = 0; i < 3; i++) {\r\n const price = prices[i];\r\n if (price === 0) prices[i] = `0.00 ◄►`;\r\n else if (Math.random() > 0.5) prices[i] = `+${price} ▲`;\r\n else prices[i] = `-${price} ▼`;\r\n }\r\n return `${names[0]} ${prices[0]}   \r\n ${names[1]} ${prices[1]}   \r\n ${names[2]} ${prices[2]}   `;\r\n }\r\n },\r\n {\r\n id: \"a309\",\r\n text:\r\n `Your daily shades of the sky forecast: Monday: Turquoise\r\n Tuesday: Taupe\r\n Wednesday: Blurple\r\n Thursday: Turquoise/taupe\r\n Friday: Coal dust Saturday: Coal dust\r\n with chances of indigo in the late afternoon\r\n Sunday: Void`,\r\n },\r\n {\r\n id: \"a310\",\r\n text:\r\n `You have reached the automated Antimatter Dimensions support hotline. If you are experiencing a bug in the\r\n game try closing and reopening the app. If that doesn't work, press 1 for web, or 2 for mobile. If you need\r\n advice, press 3. If you need to max all, press m. To support the developers, press 4. To access the FAQ,\r\n press 5. To fix a broken save, press 6. To get an invite to the Discord server, press 7. To see the change\r\n log, press 8. Press 9 to repeat.`\r\n },\r\n {\r\n id: \"a311\",\r\n text:\r\n `This message has been copyrighted by The Walt Disney Company. Your\r\n account will be charged $9.99 upon viewing this message.`\r\n },\r\n {\r\n id: \"a312\",\r\n text:\r\n `But before we start, today's video is brought to you by Antimatter Dimensions™! It's got over 100,000\r\n downloads, and it's completely redefined what a mobile game can do for me. It's got great mechanics, 5\r\n prestige layers, unique and original challenges, a deep skill tree, and the largest numbers I've ever seen.\r\n Like, seriously, look at them. And the best part is, it's free! Yes, that's right. Free. And if you use the\r\n link in the description, you'll start the game with 10 septillion antimatter. Yes, that's right, 10\r\n septillion. So what are you waiting for, click the link in the description and start playing Antimatter\r\n Dimensions™ today!`\r\n },\r\n {\r\n id: \"a313\",\r\n text:\r\n `\"...And then, once you get to level 9,000, you can ascend. Not really sure why you'd want to do that, it\r\n just resets all of your hard earned xp for some small buffs, mechanics like this will never catch on.\"\r\n - some random guy, circa 2012`\r\n },\r\n {\r\n id: \"a314\",\r\n get text() {\r\n const lawID = Math.floor(Math.random * 8901) + 100;\r\n return `Warning: Law ${lawID}-B, drafted by the AI \"duskscarf\", alternatively referred to as \"the giant\r\n space rabbit legislation\" is now in effect in your galactic area. This list of laws and regulation\r\n forbids, among other things; the illegal catching of wild space rabbits, the pacification of tamed\r\n space rabbits, and further scientific research with \"planet grazing\" unless an exception is given\r\n directly by duskscarf. You can find the list of exceptions burned into your eyelids now. In addition,\r\n the genetic modification of giant space rabbits is limited to very specific fields - size alterations\r\n (increasing in size), and cryptobiosis exaggeration. No other genetic modification is allowed outside\r\n of military applications. Thank you for your cooperation. Messages repeats in- Warning: Law ${lawID}-`;\r\n }\r\n },\r\n {\r\n id: \"a315\",\r\n text:\r\n `The developers of the game have announced that a new notation, \"Truest Blind\", will be released. They\r\n report that it will remove the UI, allowing for a more streamlined user experience.`\r\n },\r\n {\r\n id: \"a316\",\r\n text: \"Some people choose to see the ugliness in this world. The disarray. I choose to see the numbers.\"\r\n },\r\n {\r\n id: \"a317\",\r\n get text() {\r\n return `${format(Number.MAX_VALUE, 2, 0)}? Doesn't look like anything to me.`;\r\n }\r\n },\r\n {\r\n id: \"a318\",\r\n text:\r\n `We can't define consciousness because consciousness does not exist. Humans fancy that there's\r\n something special about the way we perceive the world, and yet we follow guides as tight as the\r\n bots do, seldom questioning our choices, content, for the most part, to be told what to do next.`\r\n },\r\n {\r\n id: \"a319\",\r\n text: \"Please disregard any undeserved compliments.\"\r\n },\r\n {\r\n id: \"a320\",\r\n text: \"Introducing the aphone 10: The world's first completely water soluble mobile device!\",\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a321\",\r\n text:\r\n `It must be hard being on your PC all alone. But don't worry; we are still here.\r\n Listening and watching your every step.`\r\n },\r\n {\r\n id: \"a322\",\r\n text:\r\n `Hevipelle announces an Antimatter Dimensions spinoff where you gamble matter in a game of\r\n poker in Dutch mansions: \"Ante matter d'mansions\"`\r\n },\r\n {\r\n id: \"a323\",\r\n text: `var i = \"Omae wa mou shindeiru\" console.log(i - 1 + \"i?\") NaNi?`\r\n },\r\n {\r\n id: \"a324\",\r\n text:\r\n `If you have an idea for a news message, shout it into the void.\r\n It won't get your message into the game, but it's fun!`\r\n },\r\n {\r\n id: \"a325\",\r\n text:\r\n `After the accident at the antimatter reactor in Pripyat last month, concerns are rising about the safety of\r\n antimattter reactors, and many are starting to believe we should return to safer means of energy generation,\r\n such as nuclear.`\r\n },\r\n {\r\n id: \"a326\",\r\n text: \"Antimatter Dimensions is like an ogre... it has layers.\"\r\n },\r\n (function() {\r\n let wasClicked = false;\r\n const normal = \"Click here to restart your device.\";\r\n const clicked = \"Please give Antimatter Dimensions admin access to your device.\";\r\n return {\r\n id: \"a327\",\r\n get text() {\r\n return wasClicked ? clicked : normal;\r\n },\r\n reset() {\r\n wasClicked = false;\r\n },\r\n onClick() {\r\n if (wasClicked) return undefined;\r\n wasClicked = true;\r\n return this.text;\r\n }\r\n };\r\n }()),\r\n {\r\n id: \"a328\",\r\n text:\r\n `News company no longer lets random people submit stories,\r\n instead opting to using qualified writers. Riots ensue.`\r\n },\r\n {\r\n id: \"a329\",\r\n text:\r\n `Introducing Morse Code+++ - the brand new Morse code, now with 20 new\r\n characters, for everyone who wants to slide, zip, and swoosh!`,\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a330\",\r\n text: \"Any sufficiently primitive magic is indistinguishable from technology.\"\r\n },\r\n {\r\n id: \"a331\",\r\n text: \"I have no nose, and I must sneeze!\"\r\n },\r\n {\r\n id: \"a332\",\r\n text: \"♪ When you try your worst and you still succeed. ♪\"\r\n },\r\n {\r\n id: \"a333\",\r\n text: `The wildly popular theme song \"Gotta set 'em free\" has reached 500 million downloads in its first week.`\r\n },\r\n {\r\n id: \"a334\",\r\n text:\r\n `Introducing the all-new anti-alignment chart! Featuring groundbreaking new combinations such as \"lawful-chaotic\"\r\n and \"evil-good\"! And with a dazzling third axis for 'Jazziness'~ Identify yourself as chaotic-lawful-unjazzy NOW\r\n for the impossibly low price of $-59.99! Terms and conditions apply. Batteries not included.`,\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a335\",\r\n text:\r\n `Due to new complications regarding \"The Game\", protests have risen all over the anti-verse. Thus, governments\r\n are forced to change the rule of The Game, stating that you win The Game if someone informs you about it,\r\n instead of losing it.`\r\n },\r\n {\r\n id: \"a336\",\r\n text: `Attention residents of zone 4 [commonly referred to as 'dark zone'], sector ϰ, (01,05). Do\r\n not leave your places of residence. I repeat, do not leave your places of residence. Do not go outside.\r\n Earthology's finest meteorological supercomputers, as well as many witches, are consistently claiming a\r\n 'generally weird vibe' tomorrow and we quite frankly don't want to find out what that means.`\r\n },\r\n {\r\n id: \"a337\",\r\n text:\r\n `Technological convergence is the concept that all technologies will converge into a single technology. It is\r\n a commonly expressed idea since the dawn of the Information Age, and can be seen in many places and devices\r\n such as smartphones, or the internet. Antimatter Dimensions is an example of technological convergence,\r\n specifically within media. Using a genius idea called 'not caring' mixed in with the innovative solution of\r\n 'blind luck', it merges together a subpar game, and a subpar news ticker, to create a mediocre experience\r\n that despite being mostly a game, occasionally acts as a news source slightly above the Matter Dimensions\r\n Newsticker. Truly, an achievement for all businesses to aspire to strive towards, and hopefully actually beat.`\r\n },\r\n {\r\n id: \"a338\",\r\n text: \"Ancient cave paintings with the number 5 have been found. It's implied they were waiting for something.\"\r\n },\r\n (function() {\r\n let wasClicked = false;\r\n const normal = \"Read More\";\r\n const clicked = \"More\";\r\n return {\r\n id: \"a339\",\r\n get text() {\r\n return wasClicked ? clicked : normal;\r\n },\r\n reset() {\r\n wasClicked = false;\r\n },\r\n onClick() {\r\n if (wasClicked) return undefined;\r\n wasClicked = true;\r\n return this.text;\r\n }\r\n };\r\n }()),\r\n {\r\n id: \"a340\",\r\n text:\r\n `That's quite a lot of antimatter you're making. The game developer is impressed. Because this message is\r\n prerecorded, any observations related to your antimatter production are speculation on our part. Please\r\n disregard any undeserved compliments.`\r\n },\r\n {\r\n id: \"a341\",\r\n text: \"Game under construction: All mechanics must wear hardcaps.\"\r\n },\r\n {\r\n id: \"a342\",\r\n text: \"Of course paperclips have a use, you use them to hold papers together. But who uses paper anymore?\"\r\n },\r\n {\r\n id: \"a343\",\r\n get text() {\r\n const fakeProgress = Math.pow(player.records.realTimePlayed, 25);\r\n // Caps in ~68 years of real playtime then turns into \"Infinite%\"\r\n return `Global Challenge - across all AD players, accumulate ${format(Number.MAX_VALUE, 2)} contest-paperclips\r\n (noted by the\r\n square ends), to receive an event-exclusive metal bagpipe, capable of giving +2 AM/s, as well as an extra\r\n tickspeed while above ${format(1e200)} tickspeed upgrades! Current global progress -\r\n ${format(fakeProgress)}/${format(Number.MAX_VALUE, 2)}\r\n (${formatPercents(Math.log10(fakeProgress) / Math.log10(Number.MAX_VALUE), 3)})`;\r\n }\r\n },\r\n {\r\n id: \"a344\",\r\n text:\r\n `Real life is an enigma. No one knows how it really works. There are many questions left unanswered:\r\n What is the meaning of life? Are we all living inside a simulation? How do you do antitables? Where and\r\n how did existence begin? These are all the questions that always linger in the back of our heads, and\r\n the answers to them? We may never know.`\r\n },\r\n {\r\n id: \"a345\",\r\n text: \"Japanese complain, as haikus can't be shown here. Conflict arises.\"\r\n },\r\n {\r\n id: \"a346\",\r\n text:\r\n `Did you know Antimatter Dimensions is also available on Android? \r\n Click here to check it out!`\r\n },\r\n {\r\n id: \"a347\",\r\n text:\r\n `Pluto isn't a state. The 50 states, as we all know, are: Adverb, Air, Artemis, Asia, Atlantic, Bargaining,\r\n Bilabial, Braille, Candela, Comma, Dacron, Dairy, Dative, Dexterity, Disenchanter, Dodecahedron, Erie,\r\n Eukaryota, Folklore, Great Pyramid, Halogen, Igneous, Italy, Kansas, Kilimanjaro, Lambda, Leviticus, Libra,\r\n Liquid, Lymphatic, Mesozoic, Microwave, Muon, North, Nova Scotia, Octagon, October, P = NP, Perissodactyla,\r\n Polk, Potassium, Pulley, Quinary, Rook, Saturn, Tiana, Tiger, Varaha, Yale, and Yellow.`\r\n },\r\n {\r\n id: \"a348\",\r\n text: \"[News Message removed by moderator]\"\r\n },\r\n {\r\n id: \"a349\",\r\n get text() {\r\n const chapters = [\r\n `We have come, writers, painters, sculptors, architects, passionate enthusiasts of the hitherto untouched\r\n beauty of Paris, to protest with all our strength, all our indignation, in the name of the unknown French\r\n taste, in the name of art and of French history threatened, against the erection, in the heart of our\r\n capital, of the useless and monstrous Eiffel Tower, which public malignity, often marked by common sense\r\n and the spirit of justice, has already named of \"Tower of Babel\". Without falling into the exaltation of\r\n chauvinism, we have the right to proclaim that Paris is the unrivaled city in the world. Above the streets,\r\n the widened boulevards, and the magnificent walks, rise the most noble monuments that the human race has\r\n produced. The soul of France, creator of masterpieces, shines amidst this august flowering of stones. Italy,\r\n Germany and Flanders, so justifiably proud of their artistic legacy, possess nothing comparable to ours,\r\n and from all corners of the universe Paris attracts curiosities and admiration.`,\r\n `Are we going to let all this be profaned? Will the city of Paris go on to associate itself longer with the\r\n baroques, with the mercantile imaginations of a machine builder, to become irreparably ugly and dishonor\r\n itself? For the Eiffel Tower, which commercial America itself would not want, is, doubtless, the dishonor\r\n of Paris. Everyone feels it, everyone says it, everyone deeply grieves it, and we are only a weak echo of\r\n the universal opinion, so legitimately alarmed.`,\r\n `Finally, when the foreigners come to visit our Exhibition, they will exclaim, astonished: \"What? It is this\r\n horror that the French have found to give us an idea of their taste so much vaunted? And they will be right\r\n to make fun of us, because the Paris of the sublime gothics, the Paris of Jean Goujon, Germain Pilon, Puget,\r\n Rude, Barye, etc., will have become the Paris of M. Eiffel.`,\r\n `It suffices, moreover, to realize what we are doing, to imagine for a moment a vertiginously ridiculous\r\n tower dominating Paris, as well as a gigantic factory chimney, crushing with its barbarian mass. Our Lady,\r\n the Sainte-Chapelle, the dome of the Invalides, the Arc de Triomphe, all our humiliated monuments, all our\r\n shrunken architectures, which will disappear in this astonishing dream. And for twenty years, we will see\r\n how to stretch out over the entire city, still quivering with the genius of so many centuries, we will see\r\n the odious shadow of the odious column of bolted sheet metal stretch like an ink stain ...`,\r\n `It's up to you, Monsieur and dear compatriot, to you who love Paris so much, who have embellished it so\r\n much, who have so often protected it against the administrative devastation and the vandalism of industrial\r\n enterprises, that it is the honor to defend it once more. We leave it to you to plead the cause of Paris,\r\n knowing that you will deploy all the energy, all the eloquence that must inspire an artist such as you love\r\n what is beautiful, what is great, what is right ... And if our cry of alarm is not heard, if our reasons are\r\n not listened to, if Paris is stubborn in the idea of dishonoring Paris, we will have, at least, you and us,\r\n hear a protest that honors.`\r\n ];\r\n const chapter = chapters[player.news.specialTickerData.eiffelTowerChapter];\r\n player.news.specialTickerData.eiffelTowerChapter = (player.news.specialTickerData.eiffelTowerChapter + 1) % 5;\r\n return chapter;\r\n }\r\n },\r\n {\r\n id: \"a350\",\r\n text:\r\n `Alexander wept, for he had just watched a pop-culture lecture on quantum mechanics by Anaxarchus and\r\n realised that there are infinite worlds to conquer, and that he couldn't even be the lord of one without\r\n a mutiny or 6 stopping him.`\r\n },\r\n {\r\n id: \"a351\",\r\n text: \"Hi, I'm here to complain about the poor quality of the copper that has just been delivered to me.\"\r\n },\r\n {\r\n id: \"a352\",\r\n get text() {\r\n return `\r\n This news message is antimemetic. You will forget that it exists shortly.`;\r\n }\r\n },\r\n (function() {\r\n let wasClicked = false;\r\n const normal = \"💣\";\r\n const clicked = \"💥\";\r\n return {\r\n id: \"a353\",\r\n get text() {\r\n return wasClicked ? clicked : normal;\r\n },\r\n reset() {\r\n wasClicked = false;\r\n },\r\n onClick() {\r\n if (wasClicked) return undefined;\r\n wasClicked = true;\r\n return this.text;\r\n }\r\n };\r\n }()),\r\n {\r\n // Blob from the blob font\r\n id: \"a354\",\r\n text:\r\n `\r\n \\uE010`\r\n },\r\n {\r\n id: \"a355\",\r\n text:\r\n `
`\r\n },\r\n {\r\n id: \"a356\",\r\n text: `Press \"Choose save\" to explore the other 2 parallel universes.`\r\n },\r\n {\r\n id: \"a357\",\r\n text:\r\n `The Scientific Community remains baffled over the meaning of 286,078. \"We're certain it's related to potatoes,\r\n but we need to do more tests.\" one researcher notes.`\r\n },\r\n {\r\n id: \"a358\",\r\n text: `Press \"Choose save\" to explore the other 2 parallel universes.`\r\n },\r\n {\r\n id: \"a359\",\r\n text:\r\n `Local incremental game dev makes physicists unhappy again. They claim\r\n \"the physics violations and blatant use of technobabble has gone too far\".`\r\n },\r\n {\r\n id: \"a360\",\r\n text: `Press \"Choose save\" to explore the other 2 parallel universes.`\r\n },\r\n {\r\n // Discord contest winner #1\r\n id: \"a361\",\r\n text: \"We're having a sale of top quality waterproof towels! Be sure to get some on your way out!\"\r\n },\r\n {\r\n // Discord contest winner #2\r\n id: \"a362\",\r\n text:\r\n `Hevipelle Incorporated is proud to present a new brand of cereal: The Big Crunch! This nutritious breakfast\r\n meal contains crunchy antimatter O's, pocket dimensions, Infinity-flavored Sugar Cubes, exponentially-growing\r\n Replicanti, and Eternity-flavored Marshmallows. Now you can experience Antimatter Dimensions inside of your\r\n stomach! Warning: Side effects may include spontaneous combustion, nausea, vomiting, diarrhea,\r\n dematerialization, vaporization, heart failure, the end of the world, or death. If you are not made out of\r\n antimatter, consult an educated professional on Antimatter Consumption before eating 'The Big Crunch'.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"a363\",\r\n text:\r\n `The most expensive thing about a dragon isn't the gold you need to fill the nest, the magic you sacrifice\r\n entire empires for, or the billions of wars you need to supply the decillions of adamantium. No, it is the\r\n dirt. It's always the dirt. Don't ask the royal treasurers why we have more creatures on the plane than\r\n molecules of dirt. Just keep summoning bulldozers through arcane rituals and keep looking through the\r\n earth's core for more scraps of dirt.`\r\n },\r\n {\r\n id: \"a364\",\r\n get text() {\r\n const products = [\r\n `Illustration 320-A - True Office Graphics Wall. One of our senior consultants will observe your business,\r\n and come up with a list of words to be added to a hallway, to remind all employees of the values of their\r\n company. Known to decrease employee motivation by at least 25%! Past walls include words such as Black\r\n Hole, Catastrophic, Haphazard, compromising, Inferior, Delusional, Inefficient and Collapsed! Order now!`,\r\n `Furniture 150-A (2034 edition) - 3-person seating device. A revolutionary new design for office waiting\r\n areas, it consists of a large 3 legged stool, placed upside down for aesthetic benefits. Perfect for\r\n getting employees back to work, in a new set of shoes, or pants. It isn't tied down or glued to the\r\n floor like other editions, but we do make sure that other employees look at you funny if you edit our\r\n art. No need to order, it comes as a complimentary service for any customer!`,\r\n `Furniture 0853 - \"The Rack\" - this revolutionary new workspace, from the inventors of the crawling\r\n desk, helps your employees overcome their limits and ensure that your whole business is screaming -\r\n in agony! At times chosen by our revolutionary \"pAIn AI\", it will suggest mandatory stretchers for all\r\n users. Recommended by your local gaol, order now! *Warning, AOS&C only takes responsibility for acts\r\n of god such as lightning or merciful purifications by deities.`\r\n ];\r\n const product = products.randomElement();\r\n return `Antimatter Office Supplies and Co present their new \"Modern Office\" catalogue! Each template\r\n design can be customised for your business, and offers a unique way to promote business synergy! Here\r\n is a sneak preview of one of their newest items: ${product}`;\r\n },\r\n },\r\n {\r\n id: \"a365\",\r\n text: \"I don't like Replicanti. They're coarse and rough and irritating and they replicate everywhere.\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked() || PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"a366\",\r\n text:\r\n `Stage magic, such as illusions, has an interesting history. A mix of charlatans attempting to scam people,\r\n and actors acting out performances using illusions or sleight of hand. Altering styles of magic, and continued\r\n discourse and disagreements over whether it should be stated that it is an illusion, and whether people will\r\n magically realise that it is fake and that it does not need to be stated. A schism a century ago split magic\r\n into 2 types - gentle, simplistic utilitarian tricks and grand spectacles involving the flashy machinery and\r\n beautiful assistants - originating from the popularisation of a single trick involving sawing a person in\r\n half. Much more interesting than watching some TV psychic pretending to pull a lottery ticket out from a news\r\n ticker, at any rate. Speaking of which, tonight's lottery numbers are 23, 10, 81, 106.4, 3 + 2i, and e.`\r\n },\r\n {\r\n id: \"a367\",\r\n text:\r\n `Snakes look scary, and they absolutely are and you should run, calmly, from every snake you see. But, luckily\r\n for you, snakes don't often take the initiative to bite - excluding the really mean ones. If they've gone out\r\n of their way to bite you, there's generally 4 reasons. 1- The Snake is Mean. 2- You scared the snake. Snakes\r\n are scary to you, but you are scary to snakes. Be the bigger lizard when you meet a snake. 3- You entered the\r\n territory of the snake. Often, a snake will warn you if you do this - this is why rattle snakes rattle. If you\r\n don't listen to the warning, they'll bite you. And the most important reason, 4- the snake finds you ugly.\r\n This is the fault of the snake's ocular system, but is the most common form of bites in at least 2\r\n jurisdictions. And if you get bitten by a snake, by virtue of being a scarily ugly lizard who keeps stumbling\r\n into the wrong bushes, there's 3 main things you can do. First, calm down, again, and stay calm. Secondly,\r\n immobilise the area around site that was bitten, and try using a compression bandage. Snake venom vision is\r\n entirely based on movement of the object it's currently in. And third, calmly, call for help from other\r\n lizards. Excluding the snake. The snake's too mean to help you.`\r\n },\r\n {\r\n id: \"a368\",\r\n text:\r\n `I suspect more people would press the hard reset button if genuine effort was done to make the process as\r\n miserable as possible. A slow removal of resources, with unique nerfs just to stop you from progressing. The\r\n destruction of UI, turning from usable to unusable, arcane and unwieldy, requiring memory and luck to even\r\n continue this quest. Randomness, against the player for even the simplest actions, to punish the thought of\r\n progression. Hooks and traps and disasters and low rolls for a chance see progression, which entirely consists\r\n of putting the state of the game further from anything deemed reasonable. A situation where the character is\r\n broken just to tell you to leave… but the damage is already done, if it is even possible to turn back. And…\r\n from there, a hard reset probably isn't enough. It would have to be… harder. Not just a hard reset, but a\r\n cookie, something in local storage designed specifically to make it impossible to actually start a new game.\r\n Or, something more malicious? And despite this, people would still throw themselves into this nightmare, for\r\n humanity knows no bounds in its endless curiosity. No amount of warnings will stop everyone. They will find\r\n a way to proceed, given it exists, and may even complain when it isn't as punishing as expected. So, do you\r\n want to push the button, and experience the depths of despair, willingly? Hopefully not, because it isn't here.`\r\n },\r\n {\r\n id: \"a369\",\r\n text:\r\n `An empire-building project is one of the most difficult things to implement. Thousands of hours of time,\r\n planning, effort, consultation, and political manoeuvring to create truly airbreaking endeavours. Take the\r\n Realmway Revitalisation Roadmap, a revolutionary program referred to by the 3 R's, which is known as the\r\n pinnacle of the most famous of the empire's bureaucratic infrastructure committees - the EMIF (empire magic\r\n infrastructure foundation) - not to be confused with the EAIF (Electric airship investment fund) or the\r\n NMIC (National Magical Infrastructure Coalition). The goal of the three R's, set out by the EMIF, was to\r\n reinstate a mana trade corridor for SMSS (Small-Medium Steam Shuttles), a vital part of the burgeoning\r\n consolidated states after their unfortunate pillaging during the NELC (ninth empire liberation crusade).\r\n The three R's was a multi stage project - stage 1 was a survey glyph in the air - all big things start with\r\n a small step. Stage 2, the unveiling of the EMOF (Empire Mechanical Obliteration Forcefield) had over 50\r\n dignitaries - multiple emperors (from federated states to organisational leaders), foreign rulers, EMDF\r\n (Effluent Manifested Destiny Families) who currently own the land, and even some of the forecast witches,\r\n all gathered together to unveil the project in a show of EOSF (Empire Official Solidarity Friendships).\r\n Sadly, the project was eventually cancelled at stage 215, as the creation of the EMTF (Excrement Material\r\n Transmutation Facility) for the contractors exploded after coming into contact with a SMEA (Small-Medium\r\n Electric Airship) placing the last survey peg from stage 459 due to a time vortex created by an argument\r\n at the WAIC (Witches Annual Infrastructure Committee) as part of stage 56. Truly, tragic stuff - 3 award\r\n nominations and 2 wins during that process due to EBIF (Efficient Bureaucracy In (the) Field).`\r\n },\r\n {\r\n id: \"a370\",\r\n text:\r\n \"Man tries installing cookies to store computer data, accidentally cleans them due to being too delicious.\"\r\n },\r\n {\r\n id: \"a371\",\r\n text:\r\n `Pop quiz: there are 3 doors, you pick a door at random, and get to keep what's behind the door. The doors\r\n have 2 golden goats, 2 silver goats, and a gold and a silver goat. After you pick a door, the door with the\r\n lowest $ worth of goats will be opened and shown to you. After this, you are given the choice to swap.\r\n What is the probability that you will swap doors?`\r\n },\r\n {\r\n id: \"a372\",\r\n text:\r\n `If you're ever lost in a forest, look at the trees around you. It's said that moss grows north, so by the\r\n time you've finished looking at a tree, a roaming guitarist will run up to you and ask if you want to hear\r\n wonderwall`\r\n },\r\n {\r\n id: \"a373\",\r\n text:\r\n `As a symbol of friendship between the Matter and Antimatter Periodic Tables, they have done an exchange of\r\n elements. The element of Mony is now part of the Antimatter Periodic Table, while Antimony has been added\r\n to the regular Periodic Table.`\r\n },\r\n {\r\n id: \"a374\",\r\n text: \"This newsticker was specifically designed for promotional purposes only.\"\r\n },\r\n {\r\n id: \"a375\",\r\n text:\r\n `As you probably know, it is traditional to give gifts made of certain materials to celebrate anniversaries\r\n The classic ones are silver at 25 and gold at 50. Here are some little known anniversary gifts:\r\n Pineapple - 37 years Hellstone - 66 years Lizardite- 82 years Nitrowhisperin- 86 years Taconite - 95 years\r\n Hatchettite - 100 years Electrum - 110 Yakitoda - 111 years years Fordite - 119 years Bloodstone - 120 years\r\n Celestite - 125 years Jet - 140 years Petroleum - 145 years Steel - 150 years Cummingtonite - 198 years\r\n Concrete - 200 years Laserblue- 210 years Painite - 250 years Parisite - 255 years Parasite - 260 years\r\n Carbon Nanotubes - 300 years Mercury - 310 years Martian Soil - 340 years Neptunium - 370 years\r\n Uranium - 380 years Plutonium - 390 years Xium - 400 years Blaze rods - 420 years Asbestos - 430 years\r\n Gabite - 444 years Crimtane - 666 years Lagga - 777 years`\r\n },\r\n {\r\n id: \"a376\",\r\n text:\r\n `Big tech companies have collaborated to create a new neural network that's trained in the generation of rap\r\n lyrics, called RAP-3. First lyrical generations include \"Call me prometheus 'cuz I bring the fire\" and\r\n \"Call me Sonic the way I'm gettin' these rings\". Critics say it still has a way to go before it replaces\r\n traditional music.`\r\n },\r\n {\r\n id: \"a377\",\r\n text:\r\n `With the new android OS, android 20, being predicted in the near future, the new system for internal codenames\r\n has been revealed. The first codename, as it currently stands, is “antimatter”. This conveniently works well\r\n with the predicted generation of phones that will use Android 20 - these phones will be the most explosive\r\n ever due to their annihilation-based power source. Sources tell us that a billion dollar research unit is\r\n working on a name for android 21, by tradition to start with B, “that doesn't sound too bad when you think\r\n about it”. `\r\n },\r\n {\r\n id: \"a378\",\r\n text: \"If every antimatter were an apple, you would have enough to keep all the doctors away for 3000 years\"\r\n },\r\n {\r\n id: \"a379\",\r\n get text() {\r\n return `THE ${format(Number.MAX_VALUE, 2)} PIECE! THE ${format(Number.MAX_VALUE, 2)} PIECE IS REAL!`;\r\n }\r\n },\r\n {\r\n id: \"a380\",\r\n text:\r\n `The FitnessGram Pacer Test is a multistage aerobic capacity test that progressively gets more difficult\r\n as it continues. The 20 meter pacer test will begin in 30 seconds. Line up at the start. The running speed\r\n starts slowly, but gets faster each minute after you hear this signal. [beep] A single lap should be\r\n completed each time you hear this sound. [ding] Remember to run in a straight line, and run as long as\r\n possible. The second time you fail to complete a lap before the sound, your test is over. The test will\r\n begin on the word start. On your mark, get ready, start.`\r\n },\r\n {\r\n id: \"a381\",\r\n text: \"Why do they call it second dimension when you of in the first dimension of out second eat the dimension?\"\r\n },\r\n {\r\n id: \"a382\",\r\n text:\r\n \"Any AD player born after 1993 can't joke... All they know is 5 hours, paperclips, 1.79e308 & Ninth Dimension.\"\r\n },\r\n {\r\n id: \"a383\",\r\n text:\r\n \"The only thing better than an anti-joke is two. Like the number. Not two anti-jokes. I just like the number two.\"\r\n },\r\n {\r\n id: \"a384\",\r\n text: \"Click here to make nothing happen.\"\r\n },\r\n {\r\n id: \"a385\",\r\n text:\r\n `I wonder... Why did Apple skip iPhone 9 and Microsoft skip Windows 9...\r\n Was it because they were bribed by a game developer?`\r\n },\r\n {\r\n id: \"a386\",\r\n text: \"9 out of 10 doctors recommended against trying to touch antimatter. We haven't heard back from the 10th one.\"\r\n },\r\n {\r\n id: \"a387\",\r\n text:\r\n `In spring, Man built a pillar. In summer, another. Throughout autumn they held. But in winter, one experienced\r\n an unexpected (See definition in: Abstract Multidimensional Retrocausal Physics) ZW-Class \"Ascension\" event,\r\n and is hypothesised to have fallen into a dimensional loophole, where it, by definition, has to take up more\r\n dimensions than itself. Current efforts at retrieving the pillar and returning it to baseline reality have been\r\n unsuccessful (See test log 2453-3e9a-50d1-84fc for more details)`\r\n },\r\n {\r\n id: \"a388\",\r\n text:\r\n `In light of recent events, we'd like to issue an official statement. Antimatter Dimensions™ is in no way\r\n affiliated with Jimmy's Causality Violating Brainworms™. We do not endorse, no were we involved in their creation\r\n of the product which was involved in several catastrophic dimension-destabilising and reality-toppling incidents.\r\n We almost certainly did not sign a contract at 5:30:26 UTC on 08/12/1994 after discussing how we could benefit\r\n from destabilising and warping dimensions. There was no industrial zone constructed in the 5th Orion Arm of the\r\n వ' galaxy, and even if they were we did not install localised anomalies following the Scranton Reality Anti-anchor\r\n mechanism. Additionally, no time loop is occurring at Acroamatic Abatement Facility AAF-D in site 43. We apologise\r\n if things seemed this way, and we will be more thorough in cracking down misinformation in the future.`\r\n },\r\n {\r\n id: \"a389\",\r\n text: \"If only we could condense the antimatter in the universe into cookies...\"\r\n },\r\n {\r\n id: \"a390\",\r\n text:\r\n `Can you believe it guys? Update, just 5 hours away. Update is in a 5 hours. Wahoo. I'm so happy about this\r\n information. Update just 5 hours away. Oh wow. Can you believe it? Update just in a 5 hours. It got here so\r\n fast. Update, just 5 hours.`\r\n },\r\n //Custom Newstickers start here\r\n {\r\n id: \"a391\",\r\n text:\r\n `I'll make my own newstickers, with blackjack and hookers.`\r\n },\r\n {\r\n id: \"a392\",\r\n text:\r\n `Will Royal put in all the rejected newstickers from #android-newsticker-event and #newsticker-suggestions? The world may never know (no).`\r\n },\r\n {\r\n id: \"a393\",\r\n text:\r\n `Don't forget to vote in the Ass Election 2023 -Mage`\r\n },\r\n {\r\n id: \"a394\",\r\n text: \"Looking for more mods to play? Check out https://github.com/ArchercatNEO/AD-Mod-DB (may not be up to date).\"\r\n },\r\n {\r\n id: \"a395\",\r\n text: \"moist.\"\r\n },\r\n {\r\n id: \"a396\",\r\n text: \"POV: You've been stuck on an esclator of 2+ hours because power went out\"\r\n },\r\n {\r\n // the is the Blob from the blob font\r\n id: \"a397\",\r\n get text(){\r\n let x = (player.records.totalTimePlayed.div(8.64e7).mul(2));\r\n return `Post a \r\n \\uE010 for every day Hexa (and Royal) delay the update. (Hexa and Royal have recived a combined ${format(x, 2, 2)} \r\n \r\n \\uE010s)`;\r\n }\r\n },\r\n {\r\n id: \"a398\",\r\n text: \"They say if you want an update, and ping Hexa three times in a row you'll...\"\r\n },\r\n {\r\n id: \"a399\",\r\n text:\r\n `It is the year 2422. The update still isn't out. Royal and his team are totally not procrastinating...we swear`\r\n },\r\n {\r\n id: \"a400\",\r\n text:\r\n `fatty jumpscare`\r\n },\r\n {\r\n id: \"l1\",\r\n text: \"You just made your 1,000,000,000,000,000th antimatter. This one tastes like chicken.\",\r\n get unlocked() { return Currency.antimatter.exponent === 15; }\r\n },\r\n {\r\n id: \"l2\",\r\n text: \"Nerf the galaxies please.\",\r\n get unlocked() { return player.galaxies === 2 || Currency.infinities.gt(0); }\r\n },\r\n {\r\n id: \"l3\",\r\n text: \"What do you mean, more than two dimensions??? We're on a screen, clearly there are only 2 dimensions.\",\r\n get unlocked() { return AntimatterDimension(3).amount.gt(0) || DimBoost.totalBoosts > 0; }\r\n },\r\n {\r\n id: \"l4\",\r\n text: \"How much is Infinity? -literally everyone at least once\",\r\n get unlocked() { return AntimatterDimension(8).amount.eq(190) || Currency.infinities.gt(0); }\r\n },\r\n {\r\n id: \"l5\",\r\n text: \"Eh, the Fourth Dimension is alright...\",\r\n get unlocked() { return AntimatterDimension(4).amount.gt(0) && AntimatterDimension(5).amount.eq(0); }\r\n },\r\n {\r\n id: \"l6\",\r\n text:\r\n `Antimatter people seem to be even more afraid of 13 then we are. They destroyed\r\n entire galaxies just to remove 13 from their percents.`,\r\n get unlocked() { return player.galaxies > 0 || Currency.infinities.gt(0); }\r\n },\r\n {\r\n id: \"l7\",\r\n text: \"To understand dimensional sacrifice, you do actually need a PhD in theoretical physics. Sorry!\",\r\n get unlocked() { return player.sacrificed.e >= 10 || DimBoost.totalBoosts >= 6; }\r\n },\r\n {\r\n id: \"l8\",\r\n text: \"A new group for the standardisation of numbers have come forward with a novel new format involving emoji's.\",\r\n get unlocked() { return player.requirementChecks.permanent.emojiGalaxies > 0; }\r\n },\r\n {\r\n id: \"l9\",\r\n text: \"Antimatter ice cream stand has recently opened- they have octillions of flavors!\",\r\n get unlocked() { return player.records.totalAntimatter.e >= 27; }\r\n },\r\n {\r\n id: \"l10\",\r\n text:\r\n `The Heavenly Pelle has generated too much antimatter and needed to create another galaxy.\r\n This one can be seen in the southwestern sky.`,\r\n get unlocked() { return player.galaxies > 0 || Currency.infinities.gt(0); }\r\n },\r\n {\r\n id: \"l11\",\r\n text: \"9th Dimension is a lie.\",\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l12\",\r\n text: \"The square root of 9 is 3, therefore the 9th dimension can't exist.\",\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l13\",\r\n text: \"You got assimilated by the 9th dimension? Just call your doctor for mental illness!\",\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l14\",\r\n text: \"Why is there no 9th dimension? Because 7 8 9.\",\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l15\",\r\n text: \"The 9th dimension cannot exist because the Nein-speaking nazis died in WW2.\",\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l16\",\r\n text:\r\n `If you break the fourth wall... well, there's still the fifth, sixth, seventh, and eighth to get through\r\n before you encounter bad things, so you should be fine`,\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l17\",\r\n text:\r\n `Conditions must be met for Hevipelle to sleep. First, it needs to be a blue moon. Second, a specific town\r\n in the arctic must have not seen light for a month. Third, he needs to release an AD update. And finally,\r\n no one on the Discord can be on dimension 9. Only then can he rest, for up to 6 hours, before waking up\r\n forcefully to avoid getting the offline achievement.`,\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l18\",\r\n text: \"If the 9th dimension is all evil, then is 3 the root of all evil?\",\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l19\",\r\n text:\r\n `I'll have 1e29 number 9s, a number 1e9 large, a number 6 with extra replicanti, a number 1e7, two 4e5s,\r\n one with matter, and a large time vortex.`,\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l20\",\r\n text: \"Infinity: the one thing that's supposed to break.\",\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"l21\",\r\n get text() { return `I've got ${format(Number.MAX_VALUE, 2)} problems, but none of them antimatter.`; },\r\n get unlocked() { return Currency.infinities.gt(0) && !PlayerProgress.hasBroken(); }\r\n },\r\n {\r\n id: \"l22\",\r\n text: \"Anti Emoji Movie a huge hit!\",\r\n get unlocked() { return player.requirementChecks.permanent.emojiGalaxies >= 5; }\r\n },\r\n {\r\n id: \"l23\",\r\n text: \"If this game was made by Valve, Zero Deaths would be impossible.\",\r\n get unlocked() { return Achievement(64).isUnlocked; }\r\n },\r\n {\r\n id: \"l24\",\r\n text: \"Florida man attempts to get Zero Deaths on first run, is stopped by heat death of the universe.\",\r\n get unlocked() { return Achievement(64).isUnlocked; }\r\n },\r\n {\r\n id: \"l25\",\r\n text: \"\\\"Having done half the achievements isn't much of an achievement\\\" -Boo\",\r\n get unlocked() { return Achievements.effectiveCount >= GameDatabase.achievements.normal.length / 2; }\r\n },\r\n {\r\n id: \"l26\",\r\n text:\r\n `Thanos is gonna be super dissapointed when he shows up with a fully powered Infinity gauntlet, and Hevi\r\n has a fully powered Eternity gauntlet.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l27\",\r\n text:\r\n \"New strange material was been found. It seems to grow exponentially, but only helps with antimatter production.\",\r\n get unlocked() { return PlayerProgress.replicantiUnlocked() && player.replicanti.chance === 0.01; }\r\n },\r\n {\r\n id: \"l28\",\r\n text: \"It seems this \\\"replicanti\\\" stuff won't be growing any faster now.\",\r\n get unlocked() { return player.replicanti.chance === 1 && player.replicanti.interval === 1; }\r\n },\r\n {\r\n id: \"l29\",\r\n text:\r\n `If you wrote down 3 numbers a second, it would take you less time to write down your antimatter\r\n amount than it would Hevipelle to update the game.`,\r\n get unlocked() { return Currency.antimatter.exponent >= 100000; }\r\n },\r\n {\r\n id: \"l30\",\r\n text: \"Does Hevi just pick quotes to put into the game?\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 30; }\r\n },\r\n {\r\n id: \"l31\",\r\n text: \"New news company has become rivals with us. They are made entirely of antimatter.\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 80; }\r\n },\r\n {\r\n id: \"l32\",\r\n text: \"How many times can we use \\\"Anti\\\" in a row before people stop listening?\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 100; }\r\n },\r\n {\r\n id: \"l33\",\r\n text: \"Does Hevi even check #news-ticker-suggestions anymore?\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 120; }\r\n },\r\n {\r\n id: \"l34\",\r\n text: \"Need more quotes! -hevipelle\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 135; }\r\n },\r\n {\r\n id: \"l35\",\r\n text: \"Man destroys known universe with antimatter, writes news tickers to keep from feeling lonely.\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 150; }\r\n },\r\n {\r\n id: \"l36\",\r\n text: \"You're almost there!\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 160; }\r\n },\r\n {\r\n id: \"l37\",\r\n text: \"You can stop now\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 165; }\r\n },\r\n {\r\n id: \"l38\",\r\n text: \"fucking hacker\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen > GameDatabase.news.length; }\r\n },\r\n {\r\n id: \"l39\",\r\n text: \"Asian man trys to steal the trophy of fastest infinity of -1 seconds, AND HE DOES IT!\",\r\n get unlocked() { return NewsHandler.hasSeenNews(\"l1\"); }\r\n },\r\n {\r\n id: \"l40\",\r\n text:\r\n `I broke the 8th wall, there is only chaos, Slabdrill is ritually sacrificing antimatter to the 9th\r\n dimension. This will be my last entry, may Hevipelle have mercy on our souls, we didn't listen,\r\n We should have listened.`,\r\n get unlocked() { return NewsHandler.hasSeenNews(\"l58\"); }\r\n },\r\n {\r\n id: \"l41\",\r\n text: \"I thought the update was 5 hours away... -new players after more than 5 hours of gameplay\",\r\n get unlocked() { return Time.totalTimePlayed.totalHours.gte(5); }\r\n },\r\n {\r\n id: \"l42\",\r\n text:\r\n `Somebody told me to wait five hours for the update yesterday but it's today\r\n and it still hasn't come! What do I do?`,\r\n get unlocked() { return Time.totalTimePlayed.totalHours.gte(5); }\r\n },\r\n {\r\n id: \"l43\",\r\n text: \"You do know that you won't reach Infinity in -1 seconds, right?\",\r\n get unlocked() { return player.records.bestInfinity.time.eq(0.1); }\r\n },\r\n {\r\n id: \"l44\",\r\n text: \"Where does Antimatter Nemo live? In a NNnNeMI-NNnNe.\",\r\n get unlocked() { return player.records.totalAntimatter.e >= 3e6; }\r\n },\r\n {\r\n id: \"l45\",\r\n text: \"Anti Emoji Movie MMMCMXCIX is a major hit!\",\r\n get unlocked() { return player.requirementChecks.permanent.emojiGalaxies >= 3999; }\r\n },\r\n {\r\n id: \"l46\",\r\n text: \"Achievement Unlocked!\",\r\n get unlocked() { return Achievements.effectiveCount >= GameDatabase.achievements.normal.length; }\r\n },\r\n {\r\n id: \"l47\",\r\n text: \"The achievement is for two million, not two billion...\",\r\n get unlocked() { return Currency.infinities.gt(2e9); }\r\n },\r\n {\r\n id: \"l48\",\r\n text: \"Keep up the quick pace!\",\r\n get unlocked() { return AchievementTimers.marathon1.time > 1200; }\r\n },\r\n {\r\n id: \"l49\",\r\n text: \"One day you will stop your incessant grind.\",\r\n get unlocked() { return Currency.eternities.gt(50000); }\r\n },\r\n {\r\n id: \"l50\",\r\n text: \"You can probably stop farming for eternities now...\",\r\n get unlocked() { return Currency.eternities.gt(DC.D2E6); }\r\n },\r\n {\r\n id: \"l51\",\r\n text: \"Are you serious?\",\r\n get unlocked() { return Time.worstChallenge.totalSeconds.lte(1); }\r\n },\r\n {\r\n id: \"l52\",\r\n text: \"Timing is key.\",\r\n get unlocked() { return player.records.thisEternity.realTime < 10; }\r\n },\r\n {\r\n id: \"l53\",\r\n text: \"If you want to farm infinities, why don't you just get the time study?\",\r\n get unlocked() { return !TimeStudy(32).isBought && Currency.infinities.gt(72000 * 168); }\r\n },\r\n {\r\n id: \"l54\",\r\n get text() {\r\n const names = [];\r\n if (PlayerProgress.infinityUnlocked()) names.push(\"Infinity\");\r\n if (PlayerProgress.eternityUnlocked()) names.push(\"Eternity\");\r\n if (PlayerProgress.dilationUnlocked()) names.push(\"Dilation\");\r\n if (PlayerProgress.realityUnlocked()) names.push(\"Reality\");\r\n\r\n const game1Name = names.randomElement();\r\n let game2Name = names.randomElement();\r\n while (game2Name === game1Name) {\r\n game2Name = names.randomElement();\r\n }\r\n return `Pokemon ${game1Name} and ${game2Name} were just released! This new generation brings the total number ` +\r\n \"of Pokemon up to 1e151. Good luck catching 'em all!\";\r\n },\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); },\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"l55\",\r\n get text() {\r\n const recipes = [\r\n \"a Replicanti cake: Gather some Replicanti, place in oven, and watch rise. And rise. And rise.\",\r\n \"an antimatter cake: Gather some antimatter, place in oven, and BOOM.\",\r\n \"an Eternity cake: Gather some Eternity Points, place in oven, and wait...\",\r\n \"an Infinity cake: Gather some Infinity Points, place in oven, and watch them shatter spacetime.\"\r\n ];\r\n const recipe = recipes.randomElement();\r\n return `How to bake ${recipe}`;\r\n },\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l56\",\r\n text: \"Reality Challenges are the new 9th Dimension is the new orange.\",\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l57\",\r\n text:\r\n `Jake returned home from a long day at school. On his way home, he came across a curious little object.\r\n Transparent, but opaque. Shimmering, but gloomy. Heavy, but weightless. Jake brought the object to his\r\n mother. \"Mom, I found this thing on the sidewalk, can I keep it?\", Jake said. His mother turned around\r\n to view the object her son spoke of. Her pupils dilated, \"Jake, get that thing out of the house now!\"\r\n she yelled. Jake was confused, as it seemed quite the harmless thing to him. He asked \"But mom, wh-\",\r\n but before he could finish, the object appeared to undergo mitosis at what seemed like an impossible\r\n speed, and the second copy slipped out of his hand and onto the floor. His mother rushed over to\r\n him, and tried to grab the object, but it replicated again. \"Jake... No matter what happens, don't\r\n forget that I love you honey...\". She wrapped her arms around him. \"M-mom, what's happening?\" Jake asked,\r\n with a quivering fear in his voice. His mother cried a single tear. \"⭔⭚⦕꒜ brand Replicanti...\" she said,\r\n in a somber tone. The Replicanti continued to replicate at a faster and faster pace. The bottom third of the\r\n house was now full of Replicanti. Then the bottom half. Then the entire house. The mother and child were\r\n trapped between the walls of their home and the Replicanti. Doomed to live the short rest of their life in\r\n that inorganic coffin, as the air remaining in their lungs slowly depleted. But that wasn't the end; far from\r\n it. The Replicanti began to replicate outside of the house, flooding out in a shimmering landslide. A few\r\n neighbours noticed the strange objects, almost liquid-like in their appearance, and attempted to run.\r\n But the Replicanti continued to replicate, and accelerate. Soon the entire block was covered in them; was\r\n them. Shortly after, several blocks. The city. The surrounding cities. The country. All the countries. All\r\n the planet. All the solar system. All the galaxy. All.`,\r\n get unlocked() { return player.replicanti.unl; }\r\n },\r\n {\r\n id: \"l58\",\r\n text:\r\n `The Holy trinity of Hevipelle, Antimatter, Infinity Points, and Eternity Points. These 3 resources let us\r\n access Hevi's gift, Time Theorems. And with these Time Theorems, we reach out to Hevi, and call, “Hevi, bless\r\n us on this fine day!” And Hevi does. He give us the blessing of Time Studies. These Time Studies were\r\n blessings so powerful, Hevi restricted their power. He said, “I will give you a choice of three paths” and\r\n then humanity chose. The short, cheap route of Antimatter Dimensions, giving instant gratification, the\r\n powerful choice of Infinity Dimensions, which were a fast, middle ground path, or Time Dimension, the long\r\n wait, and struggle, of humanity. Then, as humanity chose, a crack broke the earth. A serpent snaked out and\r\n sneered to humanity, “I will offer the powerful choice of a ninth dimension! I am Slabdrill, lord of all\r\n Unhevi. Humanity rose and said “ Begone Slabdrill! We want none of your foul Heresy!” And Hevi rose as well,\r\n and smote Slabdrill with his godlike power. As Slabdrill's corpse fell into the earth, he cried “ this will\r\n not be the last of me! Hevi will betr-“ and he fell in the Abyss of matter. Hevi gifted humanity with\r\n Eternity upgrades, which boosted infinity dimensions and time dimensions. And Hevi gave humanity his greatest\r\n gift. EP multipliers. He said, these will multiply all EP gained by 5, but their cost will increase 50 times.\r\n Use them wisely. And Humanity journeyed off with their new power, as Slabdrill's words echoed in their heads.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l59\",\r\n text:\r\n `The debate on the singular form of Replicanti rages on. Team \"Replicantus\"'s base has been ransacked\r\n by Team \"Also Replicanti\", and many of their dimensions were stolen. Team \"The Plural Is Replicantis\"\r\n is still lying low after their plan to hack the dictionary failed.`,\r\n get unlocked() { return player.replicanti.unl; }\r\n },\r\n {\r\n id: \"l60\",\r\n get text() {\r\n return `Breaking News! Time Shard mine collapses! ${Math.floor(20 + Math.random() * 236)} miners trapped inside!`;\r\n },\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l61\",\r\n text:\r\n `Millenials are killing the challenge industry, say antimatter experts; \"Nowadays they start with\r\n challenges completed and infinity broken; it's just not how it used to be\".`,\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"l62\",\r\n text:\r\n `Computer scientists are outraged, \"What even are Infinity Points? IP stands for Internet Protocol!\".\r\n Debates continue to intensify, more at 7.`,\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"l63\",\r\n text:\r\n `Do you feel that time has been going slower? Study reveals that 1 second now last approximately 1.3 seconds.\r\n Scientists are calling this phenomenon Time Dilation.`,\r\n get unlocked() { return PlayerProgress.dilationUnlocked(); }\r\n },\r\n {\r\n id: \"l64\",\r\n text:\r\n `Injustice in the Antimatter Academia: Beginners are only allowed to choose one field of study while the elite\r\n can pick all three. \"Its just not fair, man. How come they can do it?\" Questions frustrated student.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l65\",\r\n text:\r\n `It turns out that nobody actually knows what Infinity Points look like. Even the people who work on storing\r\n them are specifically told not to look at them because they apparently \"kill anyone who even looks at them\",\r\n to the point of sometimes working with blindfolds on. But today that will change. I am right here, in front\r\n of an Infinity Point Depot, ready to tell all of you what they look like in 3, 2, 1-`,\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"l66\",\r\n text:\r\n `Humanity shocked as failed Time Dilation experiment causes a visual glitch in spacetime. It is now visible\r\n in the night sky just above the Celestial Equator.`,\r\n get unlocked() { return PlayerProgress.dilationUnlocked(); }\r\n },\r\n {\r\n id: \"l67\",\r\n text:\r\n `Snorting crushed up Time Shards is slowly turning into a fad challenge amongst the most bored of people. It's\r\n said that the high it gives makes them experience as if the world itself is speeding up around you, which is\r\n why it's been called The Timelapse Challenge.   \r\n                   \r\n Dehydration deaths are through the roof as people mysteriously forget to drink water for several days.\r\n Trace amounts of Time Shards are being found in their bodies.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l68\",\r\n get text() {\r\n let protestText = \"\";\r\n if (InfinityChallenge(4).isRunning)\r\n protestText =\r\n `Let's take it to this guy, who's part of the side that believes it's Infinity Challenge 4. What do you have\r\n to say? \"Obviously Infinity Challenge 4 is the worst one, I mean, what am I even supposed to do? I keep\r\n trying but every time I keep getting stuck and nowhere close to the end! How are you even supposed to do it?\"\r\n What a passionate man. This is your local news host, and we'll come back with further information later.`;\r\n else if (InfinityChallenge(5).isRunning)\r\n protestText =\r\n `So up next let's talk to this guy is holding a sign that says \"IC5 Unfair\". What is the point your group\r\n is trying to make? \"Can't you read the sign? If your comprehension is that bad then Infinity Challenge 5\r\n will squash you without even giving you a fair chan-\" How... Interesting. This is your local news host,\r\n and we'll come back with further information later.`;\r\n else\r\n protestText =\r\n `Finally, let's chat with this woman who doesn't seem to be in either side. What's your opinion on the\r\n matter? \"Personally, I thought Tickspeed Autobuyer Challenge was worse than both-\" \"GET HER!!\" \"WAIT NO-\"\r\n Well, seems like this just took a turn, so I'm getting as far away as I possibly can. This is your local\r\n news host, and we'll come back with further information... someday.`;\r\n return `Hello, this is your local always reliable news source, and today people are taking over the streets\r\n as they fight over which Infinity Challenge is worse. ${protestText}`;\r\n },\r\n get unlocked() { return InfinityChallenge(1).isUnlocked || PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l69\",\r\n text: \"Friendship ended with Replicanti, now Replicanti Galaxies is my new best friend.\",\r\n get unlocked() { return PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"l70\",\r\n text:\r\n `\"Zurkrbarg, Celestial of Privacy\" has announced their plans to release a new version\r\n of their popular social media universe, \"All\".`,\r\n get unlocked() { return Teresa.isUnlocked; }\r\n },\r\n {\r\n id: \"l71\",\r\n text: \"Other languages await... I need to become a programmer\",\r\n get unlocked() { return Player.canEternity || PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l72\",\r\n get text() {\r\n const scenarios = [\r\n `our contestants struggle to survive in the desolate wasteland of Eternity Challenge 8 -\r\n running out of Replicanti and Infinity Dimensions, what will they turn to?`,\r\n \"we investigate reports of a Time Shard mine collapsing at 26:90.\",\r\n \"we invite an amateur on to explain what the reward for Infinity Challenge 9 would be.\",\r\n \"our friends over at ANN explain how they produce their broadcasts.\",\r\n \"we invite local idle gamers over to explain how they play their favorite games.\",\r\n `send 10,000 Support The Developer\r\n coins or you will never see RealiTV again.`,\r\n \"we break down exactly what went wrong in the black hole powering our city yesterday.\",\r\n \"we go over our 10-day weather forcasts.\",\r\n `YOU MUST PAY ${format(player.reality.realityMachines.times(10).max(10))}\r\n REALITY MACHINES TO CONTINUE VIEWING THIS PROGRAM.`,\r\n \"we witness the release of the hypnodrones.\",\r\n \"our great and grand overlord lets us have a single antimatter.\",\r\n `Bill Nye explains how Replicanti replicate, and teaches how to spot dangerous conspiracy theories\r\n such as \"ingesting antimatter is perfectly fine\" and \"Antimatter Galaxies aren't worth it\".`,\r\n \"the world's greatest philosophers debate if we are the real antimatter.\",\r\n \"resident baker explains how ordinary objects can transmorph into cake if not watched constantly.\"\r\n ];\r\n const scenario = scenarios.randomElement();\r\n return `Next time on RealiTV, ${scenario}`;\r\n },\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l73\",\r\n text: \"A long time ago in a distant galaxy far, far away, the cost scaling changed.\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l74\",\r\n text: \"Introducing a new feature: Reality Studies! Get in-game benefits for studying in real life!\",\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l75\",\r\n text:\r\n `Here at Antimatter Dimensions, we pride ourselves in the quality of our products. For example: Did you know\r\n that every Infinity Point is unique? That's right! They all have different personalities, their own feelings,\r\n their own thoughts... I hope you can sleep well tonight, knowing this... Remember all of those Infinity\r\n points you've spent? They had families, and they miss them... Look at what you've done. You're a monster.`,\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"l76\",\r\n text: \"So, you've reached the prestige layer after Infinity? It's about time...\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l77\",\r\n text: \"Improve your perks through selective breeding and cutting edge epigenetics technology.\",\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l78\",\r\n text:\r\n `Warning - Genetically Modified Perk Points are not suitable for; consumption, physical contact, inhalation,\r\n exhalation, mental contact and scouring by both seen and unseen eyes. Do not put near a flammable,\r\n inflammable, conducting, insulating, variable, biological or mechanical substance. Existence at your own risk.`,\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l79\",\r\n text:\r\n `The Intergalactic Antimatter Revenue Service, contrary to popular belief, does have the ability to pay taxes\r\n on AM gained through non-scrupulous methods, ie anything not done via legally-mandated dimensions or modified\r\n through challenge courses. Section NY-8N lists 3 specific methodologies - illegal news ticker giveaways,\r\n unrecognised dimensions, and modifications to the fabric of space time - as well as a miscellaneous for any\r\n unique AM methods that may pop up in the future. And although you will have to pay the top AM tax rate of 99%,\r\n it can save you money in the long run - if you are forced to switch realities due to a celestial decision you\r\n can gain a portion of the tax you paid back from the IARS as a tax deduction, as well as make a deduction to\r\n pay for the arbiters who represent you. Of course, any [PLAYER REFERENCE NOT FOUND] worth their RM knows that\r\n the real way to hide illegal profits of crime is in personalised pocket dimensions, hyperspliced waveform\r\n banks and nanoshells, which requires extensive R&D to implement. As such, reporting illegal AM gain is only\r\n recommended if you're too rich to hide your gains, but too poor to hide your gains.`,\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l80\",\r\n get text() {\r\n return `\"Average person produces ${format(\"3e999999996\", 2)} antimatter a year\" factoid actually just statistical\r\n error. Average person produces 0 antimatter per year. \"Developer Dimension\" Georg, who lives in a cave &\r\n produces over ${format(\"1e1000000000\", 2)} each day, is an outlier and should not have been counted.`;\r\n },\r\n get unlocked() { return PlayerProgress.hasBroken(); }\r\n },\r\n {\r\n id: \"l81\",\r\n text:\r\n `The world is in chaos as the laws of math have been rewritten! Many things that were thought\r\n to be infinite are now just really big numbers!`,\r\n get unlocked() { return PlayerProgress.hasBroken(); }\r\n },\r\n {\r\n id: \"l82\",\r\n get text() {\r\n return `The Great Scribes of Antia have labored intensively for years. They were given a mammoth task from the\r\n gods; write out an incomprehensibly long number. These scribes took turns, each writing out a few numbers a\r\n second, writing day and night, for what seemed like an eternity. At last, after\r\n ${TimeSpan.fromSeconds(Currency.antimatter.value.log10() / 3).toString()}, they finally accomplished\r\n the impossible. That week, when they went to worship their gods, they sent them a simple message: \"What was\r\n the purpose? What made our years of labor significant?\" The gods responded duly: \"We wanted to know how long\r\n it would take to write out, for a statistic in our game.\"`;\r\n },\r\n // 3 years of time to write\r\n get unlocked() { return Currency.antimatter.value.gte(\"1e777600\"); }\r\n },\r\n {\r\n id: \"l83\",\r\n text:\r\n `AD Patch Notes: Cleaned up the celestial problem Made Antimatter care about annihilation more Added mouths\r\n Removed mouths Stopped unwanted interlopers from corporate takeovers of shops Fixed problem with newstickers\r\n hanging in the air Dead replicanti remain in their galaxies Redefined interlopers to not include [REDACTED]\r\n Tachyon Particles get stuck in the top left corner of the screen, obliterate time Added Coriolis effect to\r\n Galaxy Spin Direction`,\r\n get unlocked() { return Teresa.isUnlocked; }\r\n },\r\n {\r\n id: \"l84\",\r\n get text() {\r\n return `For the record, you currently have ${player.news.specialTickerData.paperclips}\r\n Useless Paperclips. You may want to spend them on something.`;\r\n },\r\n get unlocked() { return player.news.specialTickerData.paperclips > 0; }\r\n },\r\n {\r\n id: \"l85\",\r\n text:\r\n `On opposite day, the new update is just -5 hours away. You begin increasing your Matter. Once you acquire a\r\n huge abundance of Matter, you must become Infinitesimal. After increasing your wealth in Infinitesimal Points,\r\n you can eventually Jiffy, the shortest unit of time. After enough time, your Jiffies will accumulate, and you\r\n will Contract Time. Contracting Time will grant you enough of a boost to eventually Fantasy, the final layer\r\n of maintenance. However, you find out that it was all a dream. Your Antimatter is safe and well, and the new\r\n update is still just 5 hours away.`,\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l86\",\r\n text:\r\n `Hello, player. I'd like to play a game. In front of you is a pile of replicanti. They are currently frozen in\r\n time, and cannot replicate. To your right is a computer playing Antimatter Dimensions on an empty save. You\r\n must reach infinity. However, once you buy a 1st dimension, the replicanti will start replicating. As you know,\r\n they replicate fast, and if they fill up the room you will suffocate. If you reach infinity before that, they\r\n will be frozen again. The clock is ticking. Start now.`,\r\n get unlocked() { return PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"l87\",\r\n text:\r\n `\"To see a World in a Grain of Sand. And a Heaven in a Wild Flower. Hold Infinity in the palm of your hand.\r\n And Eternity in an hour. And Reality in about 5 hours™️\" ~Anti-William Blake `,\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l88\",\r\n text:\r\n `Our deepest apologies for the new glyph mechanic. The intent is to provide players with a sense of pride and\r\n accomplishment for unlocking rare glyphs. We selected initial values based upon data from the final wave of\r\n testing and other adjustments made to milestone rewards before launch. Among other things, we're looking at\r\n average per-player credit earn rates on a daily basis, and we'll be making constant adjustments to ensure that\r\n players have challenges that are compelling, rewarding, and of course attainable via gameplay.`,\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l89\",\r\n text:\r\n \"It's pronounced LAY'tela, and you can't convince me otherwise. -Royal\",\r\n get unlocked() { return Laitela.isUnlocked || PlayerProgress.mendingUnlocked() }\r\n },\r\n {\r\n id: \"l90\",\r\n text:\r\n \"You already knew you would be trapped here, yet you still entered.\",\r\n get unlocked() {return Pelle.isDoomed && PlayerProgress.mendingUnlocked() }\r\n },\r\n {\r\n id: \"l91\",\r\n text:\r\n \"Do you remember...\",\r\n get unlocked() {return new Date().getMonth === 8 && new Date().getDate === 21}\r\n },\r\n {\r\n id: \"l92\",\r\n text:\r\n \"Did you remember...\",\r\n get unlocked() {return new Date().getMonth === 8 && new Date().getDate === 22}\r\n },\r\n {\r\n id: \"r1\",\r\n text: \"This news message is 100x rarer than all the others.\",\r\n get unlocked() { return Math.random() < 0.01; }\r\n },\r\n {\r\n id: \"p1\",\r\n text: \"Is this a jojo reference?\",\r\n },\r\n /* eslint-disable max-len */\r\n {\r\n id: \"ai1\",\r\n text: \"If you are the game, then you can use the cheat to unlock a secret achievement...but it costs e1100 antimatter!?!\"\r\n },\r\n {\r\n id: \"ai2\",\r\n text: \"\\\"Hm, I don't know how to fix this.\\\" - Someone who has not unlocked the achievement btw\"\r\n },\r\n {\r\n id: \"ai3\",\r\n text: \"I thought the game was supposed to have a hard reset after eternity, but then I got randomized to start my first game with no save file \\uD83D\\uDE26\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai4\",\r\n text: \"I thought the update was 5 hours ago... I guess we'll have to put it back in 5 hours\"\r\n },\r\n {\r\n id: \"ai5\",\r\n get text() { return `Local man finds ${format(Number.MAX_VALUE, 2)} Planck volumes in his freezer.`; }\r\n },\r\n {\r\n id: \"ai6\",\r\n text: \"ahah bad ticker suggestion\"\r\n },\r\n {\r\n id: \"ai7\",\r\n text: \"I see you playing this game with an empty stomach and you're gonna start playing this game with an empty wallet.\"\r\n },\r\n {\r\n id: \"ai8\",\r\n text: \"just start... clicking. dont even think about wasting time. just do it.\"\r\n },\r\n {\r\n id: \"ai9\",\r\n text: \"the idea that the 9th dimension creates the 8th dimension is crazy\"\r\n },\r\n {\r\n id: \"ai10\",\r\n text: \"...does that mean the [REDACTED] dimension produces the [REDACTED] dimension?\"\r\n },\r\n {\r\n id: \"ai11\",\r\n text: \"\\\"click here to buy a stack of paperclips\\\" (when clicked you get Rickroll)\",\r\n onClick() { window.open(\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\"); }\r\n },\r\n {\r\n id: \"ai12\",\r\n text: \"In my spare time I read the short stories by T. H. White.\"\r\n },\r\n {\r\n id: \"ai13\",\r\n text: \"Holy crap, that's pretty wild\"\r\n },\r\n {\r\n id: \"ai14\",\r\n text: \"Extinction is not a real thing. You can't wear the same hat 24/7.\"\r\n },\r\n {\r\n id: \"ai15\",\r\n text: \"If you can read this you've escaped from the game.\"\r\n },\r\n {\r\n id: \"ai16\",\r\n text: \"\\\"The hat trick I would love to see it\\\" - Noah Feldman\"\r\n },\r\n {\r\n id: \"ai17\",\r\n text: \"look at hevi fight riotously on the discord server\"\r\n },\r\n {\r\n id: \"ai18\",\r\n text: \"I just stole the \\\"Anti\\\" flag from a biker gang and I am packing it with dynamite, dynamite, dynamite, dynamite...\"\r\n },\r\n {\r\n id: \"ai19\",\r\n text: \"No matter how much antimatter you have, the matter will always outweigh the anti-matter.\"\r\n },\r\n {\r\n id: \"ai20\",\r\n text: \"Franklin sealed the Omega squared. Now you can seal the Omega any way you want.\"\r\n },\r\n {\r\n id: \"ai21\",\r\n text: \"Is this the real 9th Dimension?\"\r\n },\r\n {\r\n id: \"ai22\",\r\n text: \"Click here to exit the game\"\r\n },\r\n {\r\n id: \"ai23\",\r\n text: \"This news ticker will now only AIR in the 9th dimension\"\r\n },\r\n {\r\n id: \"ai24\",\r\n text: \"The 9th dimension doesn't exist because it was suppressed by the 9th dimension.\"\r\n },\r\n {\r\n id: \"ai25\",\r\n text: \"To matter or to antimatter, that is the question.\"\r\n },\r\n {\r\n id: \"ai26\",\r\n text: \"After 8 years of production and unstable universes, Chaosium will cease to exist in 5 hours.\"\r\n },\r\n {\r\n id: \"ai27\",\r\n text: \"Half of the problems in the 9th dimension don't even make sense. What are they even doing with all of that energy anyway?\"\r\n },\r\n {\r\n id: \"ai28\",\r\n text: \"Wait, there's a nin--\"\r\n },\r\n {\r\n id: \"ai29\",\r\n text: \"Somewhere, a madman and his army of Trimps are tampering with Matter Dimensions.\"\r\n },\r\n {\r\n id: \"ai30\",\r\n text: \"Why is there so many attached to this number? It doesn't make sense.\"\r\n },\r\n {\r\n id: \"ai31\",\r\n text: \"The news ticker is in the anti-news-ticker\"\r\n },\r\n {\r\n id: \"ai32\",\r\n text: \"the 9th dimension doesn't exist because we are using nonary\"\r\n },\r\n {\r\n id: \"ai33\",\r\n text: \"BREAKING NEWS: New research has shown that not one, not two, but three people can be said to have felt the same emotion as me when they read that as a ticker suggestion.\"\r\n },\r\n {\r\n id: \"ai34\",\r\n text: \"Here's an explanation of my 'problematic mood' - it's explained in the news ticker!\"\r\n },\r\n {\r\n id: \"ai35\",\r\n text: \"Local crazy person tries selling anti-cookies\"\r\n },\r\n {\r\n id: \"ai36\",\r\n text: \"Welcome to Antimatter Dimensions: Source, the free to play sequel to the cult classic AD:GO.\"\r\n },\r\n {\r\n id: \"ai37\",\r\n text: \"A new hand touches your antimatter!\"\r\n },\r\n {\r\n id: \"ai38\",\r\n text: \"Who are we, anyways?\"\r\n },\r\n {\r\n id: \"ai39\",\r\n text: \"We are the people who actually matter\"\r\n },\r\n {\r\n id: \"ai40\",\r\n text: \"Matter? Not even a hint.\"\r\n },\r\n {\r\n id: \"ai41\",\r\n text: \"I am the news guy, I make news. You don't read this? Well you'll just have to wait until you look in the mirror.\"\r\n },\r\n {\r\n id: \"ai42\",\r\n text: \"\\\"BOO!\\\" (news ticker moves 90 degrees)\"\r\n },\r\n {\r\n id: \"ai43\",\r\n text: \"BUY A JAR OF STICKERS, HIGH QUALITY STICKERS, GREAT QUALITY STICKERS!\"\r\n },\r\n {\r\n id: \"ai44\",\r\n text: \"I made news, you read it.\"\r\n },\r\n {\r\n id: \"ai45\",\r\n text: \"I like news.\"\r\n },\r\n {\r\n id: \"ai46\",\r\n text: \"I don't make news.\"\r\n },\r\n {\r\n id: \"ai47\",\r\n text: \"YOU MAKE NEWS AND I GET THE [REDACTED] NEWS\"\r\n },\r\n {\r\n id: \"ai48\",\r\n text: \"The term \\\"Anti-infinity\\\" is a verb and cannot be a noun. Learn about its usage here.\"\r\n },\r\n {\r\n id: \"ai49\",\r\n text: \"And now, for the shopping list!\"\r\n },\r\n {\r\n id: \"ai50\",\r\n text: \"The 9th dimension is clearly real! It's just not in our dimension.\"\r\n },\r\n {\r\n id: \"ai51\",\r\n text: \"I tried searching on google for the phrase \\\"9th dimension,\\\" and I'm okay with saying that, because it describes a very real thing.\"\r\n },\r\n {\r\n id: \"ai52\",\r\n text: \"You have no power here.\"\r\n },\r\n {\r\n id: \"ai53\",\r\n text: \"Some people had to settle for 10 dimensions because they couldn't break infinity. Big Crunch turned out to be just a short space in time.\"\r\n },\r\n {\r\n id: \"ai54\",\r\n text: \"There once was a young man in a strange land, and he dreamed of a universe filled with possibilities. One day, he asked his mother \\\"What's Expansion like?\\\" Her reply was \\\"Expansion times back then were unbalanced, and I said that's why you can't have equal amounts of matter and antimatter.\"\r\n },\r\n {\r\n id: \"ai55\",\r\n text: \"Market research firm tries to explain why some commodities don't perform as expected. Market research firm herself can't figure out why.\"\r\n },\r\n {\r\n id: \"ai56\",\r\n text: \"Bid your antimatter today!\"\r\n },\r\n {\r\n id: \"ai57\",\r\n text: \"I am Alpha Centauri, Prime 001. My research has found that if you are alive in the 9th dimension, evil has taken over your dimension and is attempting to enact its plan to take over your mind and reverse time. You must do everything in your power to stop this plan from being implemented, now.\"\r\n },\r\n {\r\n id: \"ai58\",\r\n text: \"Stand by and unlock the 9th dimension for a secret achievement.\"\r\n },\r\n {\r\n id: \"ai59\",\r\n text: \"I fix bugs in 5 hours\"\r\n },\r\n {\r\n id: \"ai60\",\r\n text: \"If you're reading this, that means you can read this.\"\r\n },\r\n {\r\n id: \"ai61\",\r\n text: \"Uhh... Hi. Could you tell me your name?\"\r\n },\r\n {\r\n id: \"ai62\",\r\n text: \"Uh, no. This is too big for a QR code.\"\r\n },\r\n {\r\n id: \"ai63\",\r\n text: \"(right to left move it make)\"\r\n },\r\n {\r\n id: \"ai64\",\r\n text: \"Oh no the antimatter is coming for us!\"\r\n },\r\n {\r\n id: \"ai65\",\r\n text: \"Why is there so much antimatter in this world? For a start, it's all produced by the antimatter factories on Earth. Secondly, the factories on\"\r\n },\r\n {\r\n id: \"ai66\",\r\n text: \"It's nothing personal, bro. -All villager types\"\r\n },\r\n {\r\n id: \"ai67\",\r\n text: \"I tried my best to read those tiny, handwritten messages, but whoever designed scythes hated me and stuck them in a corner. -Porygon-Z\"\r\n },\r\n {\r\n id: \"ai68\",\r\n text: \"Hmm... I don't know how I ended up here. I don't even know if I'm supposed to be here. I just sit here and imagine what could have been if I hadn't stopped. Oh god, what could have been...\"\r\n },\r\n {\r\n id: \"ai69\",\r\n text: \"Aw shucks, I finally hacked it enough to get to the C21 unlock, boss!\"\r\n },\r\n {\r\n id: \"ai70\",\r\n text: \"Купил мужик антиматерию\"\r\n },\r\n {\r\n id: \"ai71\",\r\n text: \"So you're telling me that I can post here, watch the titanic twice, come back and not be able to post?\"\r\n },\r\n {\r\n id: \"ai72\",\r\n text: \"The last update was 5 hours ago. There is no next update, because the last update was 5 hours ago. We will update our podcast in 5 hours to cover the entire topic of 5 hours, because this is the last podcast ever, everyone knows that the update is always 5 hours away, but in reality it's more like 1-2-3-4-5-6-7-8-9-10 minutes away, but in our heads it's closer to an actual accurate update date, like 5 hours away but with a few tickspeed upgrades.\"\r\n },\r\n {\r\n id: \"ai73\",\r\n text: \"Yep. You. Get. Over. Your. Antidimensions.\"\r\n },\r\n {\r\n id: \"ai74\",\r\n get text() { return `Ad bonus: $${format(Number.MAX_VALUE, 2)} (random team)`; }\r\n },\r\n {\r\n id: \"ai75\",\r\n text: \"Pass me that history, please\"\r\n },\r\n {\r\n id: \"ai76\",\r\n get text() { return `Now releasing: Dimsension ${format(Number.MAX_VALUE, 2)}`; }\r\n },\r\n {\r\n id: \"ai77\",\r\n text: \"ur history teacher said i was mad for getting *insert something here* on my bday\"\r\n },\r\n {\r\n id: \"ai78\",\r\n text: \"All is fair in antimatter\"\r\n },\r\n {\r\n id: \"ai79\",\r\n text: \"The Mysterium, the 2nd Dimension\"\r\n },\r\n {\r\n id: \"ai80\",\r\n text: \"Oops, I think we misticked.\"\r\n },\r\n {\r\n id: \"ai81\",\r\n text: \"please wait 5 HOURS FOR THE NEWS\"\r\n },\r\n {\r\n id: \"ai82\",\r\n text: \"please wait til the weather improves\"\r\n },\r\n {\r\n id: \"ai83\",\r\n text: \"Please, take a minute to appreciate the beauty of this news ticker.\"\r\n },\r\n {\r\n id: \"ai84\",\r\n text: \"How about this, working backwards? You know, from the time period covered by the question, that the game is set in, say, the 1950s. Now, if we talk about how games are set in the 2030s. Games are defined as any media, not necessarily of the form \\\"play some game\\\" (which, by the way, is a useful thing to have in one's vocabulary) but any media that can be understood as a game (i.e. a media that one can play back in time}, and games are defined as any game that one can't play back in time.\"\r\n },\r\n {\r\n id: \"ai85\",\r\n text: \"How about AD, made by NaN? Higher quality, obviously. But still, [REDACTED]\"\r\n },\r\n {\r\n id: \"ai86\",\r\n text: \"I thought the whole \\\"annihilation is just a phase\\\" quote was awesome until I realized it also gave me a [REDACTED]\"\r\n },\r\n {\r\n id: \"ai87\",\r\n text: \"I have created an Omsi universe. And it's [REDACTED]\"\r\n },\r\n {\r\n id: \"ai88\",\r\n text: \"I put [REDACTED] in the oven. It got [REDACTED] and I [REDACTED] am [REDACTED]\"\r\n },\r\n {\r\n id: \"ai89\",\r\n text: \"What are the red herrings?\"\r\n },\r\n {\r\n id: \"ai90\",\r\n text: \"Help we are stuck in Hevipelle's (http://en.wikipedia.org/wiki/Hevipelle) basement and hevi is forcing us to build a [REDACTED] wall to keep [REDACTED] away from [REDACTED]\"\r\n },\r\n {\r\n id: \"ai91\",\r\n text: \"And now, for the weather. 70 and raining in North Dakota, remember those lovely, big, golden, iron curtain bars. Also remember that the [REDACTED] weather! Just remember: [REDACTED] and [REDACTED] outside [REDACTED]\"\r\n },\r\n {\r\n id: \"ai92\",\r\n text: \"Let's play a little game. You will start with no possessions and no goals. Lets say you have [REDACTED] and your [REDACTED] is [REDACTED] you can [REDACTED]\"\r\n },\r\n {\r\n id: \"ai93\",\r\n text: \"What are gems for?\"\r\n },\r\n {\r\n id: \"ai94\",\r\n text: \"Who made the 5th dimension?\"\r\n },\r\n {\r\n id: \"ai95\",\r\n text: \"I don't get it\"\r\n },\r\n {\r\n id: \"ai96\",\r\n text: \"Why is nobody talking about the 9th dimension?\"\r\n },\r\n {\r\n id: \"ai97\",\r\n text: \"This news sucks. Why no you don't get it?\"\r\n },\r\n {\r\n id: \"ai98\",\r\n text: \"Sorry, your reality has disconnected from the 9th dimension. You will now remain in the 8th dimension until further notice.\"\r\n },\r\n (function() {\r\n let wasClicked = false;\r\n const normal = \"Now holding Infinity!\";\r\n const clicked = \"<#351477791457542144>\";\r\n return {\r\n id: \"ai99\",\r\n get text() {\r\n return wasClicked ? clicked : normal;\r\n },\r\n reset() {\r\n wasClicked = false;\r\n },\r\n onClick() {\r\n if (wasClicked) return undefined;\r\n wasClicked = true;\r\n return this.text;\r\n }\r\n };\r\n }()),\r\n {\r\n id: \"ai100\",\r\n text: \"I get all my news from this Discord, not 5 hours of my life\"\r\n },\r\n {\r\n id: \"ai101\",\r\n text: \"meow\"\r\n },\r\n {\r\n id: \"ai102\",\r\n text: \"You are now manually blinking.\"\r\n },\r\n {\r\n id: \"ai103\",\r\n text: \"Sorry, your mic is playing Antimatter Dimensions.\"\r\n },\r\n {\r\n id: \"ai104\",\r\n text: \"Sorry, your reality has disconnected from the 9th dimension.\"\r\n },\r\n {\r\n id: \"ai105\",\r\n text: \"Apparently I am the bad guy in this video. I'm the one who did nothing.\"\r\n },\r\n {\r\n id: \"ai106\",\r\n text: \"There are multiple ways to win this game. You can either type in your coordinates directly into the game, or you can type them into google which produces a different result. If you are getting the \\\"same exact thing\\\" result, your computer must be malfunctioning. Test results indicate that your computer is malfunctioning and you should check your firmware for vulnerabilities. You can also try turning off the news and re-running the game, but doing this only makes the \\\"the weather is X\\\" joke. Waiting six hours for a news message is NOT a news message.\"\r\n },\r\n {\r\n id: \"ai107\",\r\n text: \"The weather is actually a thing. Scientists have confirmed that there is a correlation between the amount of Antimatter in the earth and the amount of weather. The earth is indeed a magnet, but scientists now hypothesize that as the earth warms up, the magnetic reconnection will accelerate, and this could cause a domino effect to cascade throughout the world, eventually leading to uncontrolled nuclear winter and spontaneous antimatter implosion.\"\r\n },\r\n {\r\n id: \"ai108\",\r\n text: \"The tenth dimension is not a real thing. Stop telling people that.\"\r\n },\r\n {\r\n id: \"ai109\",\r\n text: \"Don't tell Hevi it's not a real thing\"\r\n },\r\n {\r\n id: \"ai110\",\r\n text: \"i dont know how to fix this\"\r\n },\r\n {\r\n id: \"ai111\",\r\n text: \"This update is not for you!\"\r\n },\r\n {\r\n id: \"ai112\",\r\n get text() { return `This is the last time, to buy items, you must pay a small fee of ${format(Number.MAX_VALUE, 2)} real money.`; }\r\n },\r\n {\r\n id: \"ai113\",\r\n text: \"What is Antimatter? Long ago, gods lived in harmony. Then, everything changed when the apocalypse broke out. Chaos reigns, and even higher dimensions are being built. This is your fate. Build the Antimatter Dimensions. Amen.\"\r\n },\r\n {\r\n id: \"ai114\",\r\n text: \"Water under the bridge?\"\r\n },\r\n {\r\n id: \"ai115\",\r\n text: \"I wonder if anyone has posted about this before me?\"\r\n },\r\n {\r\n id: \"ai116\",\r\n text: \"This post has been shared many times. Who knows how many?\"\r\n },\r\n {\r\n id: \"ai117\",\r\n text: \"Good night!\"\r\n },\r\n {\r\n id: \"ai118\",\r\n text: \"I made a timeline of my replicanti battles, which can be found here.\"\r\n },\r\n {\r\n id: \"ai119\",\r\n text: \"\\\"Quantumum Battle Royale coming in 5 hours!\\\" (Rumor: 5 hours)\"\r\n },\r\n {\r\n id: \"ai120\",\r\n text: \"Rumor says Nords will start producing replicanti in five hours.\"\r\n },\r\n {\r\n id: \"ai121\",\r\n text: \"I am an Nordsweeper, stealing their jobs to support the replicanti factories\"\r\n },\r\n {\r\n id: \"ai122\",\r\n text: \"Used to be, AD was the best game. Nowadays, it's all crapp.\"\r\n },\r\n {\r\n id: \"ai123\",\r\n text: \"You better stop looking at these news ticker suggestions, before your fingers dry up.\"\r\n },\r\n {\r\n id: \"ai124\",\r\n text: \"Antimatter Dimensions *Loses* bee movie.\"\r\n },\r\n {\r\n id: \"ai125\",\r\n text: \"Oh, god, there's replicanti in my peas.\",\r\n get unlocked() { return PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"ai126\",\r\n text: \"Oh, god, I'm stepping on a replicanti.\"\r\n },\r\n {\r\n id: \"ai127\",\r\n text: \"Hello, world!\"\r\n },\r\n {\r\n id: \"ai128\",\r\n text: \"Welcome to /r/AskReddit about submarines. - accurate as of January 8th, 2017\"\r\n },\r\n {\r\n id: \"ai129\",\r\n text: \"Antimatter being researched by the government. Is it safe to say that this news ticker is fake?\"\r\n },\r\n {\r\n id: \"ai130\",\r\n text: \"Does the news show at Infinite Antimatter?\"\r\n },\r\n {\r\n id: \"ai131\",\r\n text: \"Have you saved your game? Yes. Have you quit your game? Nothin' wrong with this save. just keep holding that key.\"\r\n },\r\n {\r\n id: \"ai132\",\r\n text: \"i clicked too fast...my fps dropped\"\r\n },\r\n {\r\n id: \"ai133\",\r\n text: \"I found out that the year is 20XX. I was going to make a news ticker but then I realized that it's just a ticker.\"\r\n },\r\n {\r\n id: \"ai134\",\r\n text: \"\\\"One of these days I'll get bored of reading news for a while\\\" - old man\"\r\n },\r\n {\r\n id: \"ai135\",\r\n text: \"'Tis the season for new antiques! Get your first ever LOOK at these unique objects, before they're gone!' Sold out!\"\r\n },\r\n {\r\n id: \"ai136\",\r\n text: \"3 things that antimatter, 1 more thing to infinity\"\r\n },\r\n {\r\n id: \"ai137\",\r\n text: \"Buy the paperclip emojis now at https://aarextiaokhiao.github.io/blob/master/docs/en.json\"\r\n },\r\n {\r\n id: \"ai138\",\r\n text: \"click here to unlock the next update\"\r\n },\r\n {\r\n id: \"ai139\",\r\n text: \"(If you want you can make this only show when the news actually loads)\"\r\n },\r\n {\r\n id: \"ai140\",\r\n text: \"Malicious men are trying to make antimatter money, but their attempt is getting in the 9th dimension. What do you think about that?\"\r\n },\r\n {\r\n id: \"ai141\",\r\n text: \"Hey Siri, grind antimatter galaxies\"\r\n },\r\n {\r\n id: \"ai142\",\r\n text: \"Have you saved your game? If so, then you can continue playing without\"\r\n },\r\n {\r\n id: \"ai143\",\r\n text: \"It's like Getting your first arcane point. You know, like in the old ad where you're like \\\"I get this ad, I should make this ad\"\r\n },\r\n {\r\n id: \"ai144\",\r\n text: \"Ooga Booga\"\r\n },\r\n {\r\n id: \"ai145\",\r\n text: \"Boo has his own webpage! You might even call it \\\"Boo's Dandy\\\"\\\">https://en.m.wikipedia.org/wiki/Olli%27_Web#Main_page>\"\r\n },\r\n {\r\n id: \"ai146\",\r\n text: \"Meeseeks and nerds clash in epic GG war\"\r\n },\r\n {\r\n id: \"ai147\",\r\n text: \"My final test has come out! It was a simple math problem, just the two greatest chess GM's ever! Guess what happened? Both got annihilated!\"\r\n },\r\n {\r\n id: \"ai148\",\r\n text: \"Oh wow, that's 67.3%, which is actually OK, because it's logarithmic\"\r\n },\r\n {\r\n id: \"ai149\",\r\n text: \"\\\"Aleph_Time\\\" is that logarithmic scale joke?\"\r\n },\r\n {\r\n id: \"ai150\",\r\n text: \"Hello everyone, my name is Anti-Dio. I produce antimatter through a process you all know as \\\"antimatter decomposition\\\" you may recall this from my test report earlier this month I tested wether or not my ranch produces antimatter or not... everything was fine until that point, when I added a dash of lag to the equation, and it became a vicious cycle accelerating the rate at which antimatter is produced, which in turn accelerates the rate at which you all die. I've saved this by using a unique combination of genetic engineering and big data mining, I'm hoping to one day pull the trigger on a mechanimatter device that creates dimensions behind closed doors, but for now, this has all been a race to the bottom of which system producethiks, and in the end, we'll take a bite out of your (read error: allowed) pie. Goodbye.\"\r\n },\r\n {\r\n id: \"ai151\",\r\n text: \"\\\"I propose that we form a phylogenetic tree of anti-history, just like tree of life. Everyone would be credited with originating from the ancestor of that anti-tree.\\\" -Dio, toast of eternal damnation\"\r\n },\r\n {\r\n id: \"ai152\",\r\n text: \"historian: I love how each generation looks back on an earlier generation and think, \\\"Those generations were really bad\\\"\"\r\n },\r\n {\r\n id: \"ai153\",\r\n text: \"\\\"My parents went to anti-university\\\" - my grandparents\"\r\n },\r\n {\r\n id: \"ai154\",\r\n text: \"Only anti-jokes are funny\"\r\n },\r\n {\r\n id: \"ai155\",\r\n text: \"Infinity machine breaks Infinity\"\r\n },\r\n {\r\n id: \"ai156\",\r\n text: \"Okay boomer, you get your first taste of antimalware with this one.\"\r\n },\r\n {\r\n id: \"ai157\",\r\n text: \"This program cannot access confidential information, such as the IP addresses of the Tamazight Vaults.\"\r\n },\r\n {\r\n id: \"ai158\",\r\n text: \"Game Development is fun, right? That's why so many hobbyists make games, and why so few professionals make games.\"\r\n },\r\n {\r\n id: \"ai159\",\r\n text: \"I was the first to notice that the 'news' ticker on my mobile notification is always 30 seconds behind the 'entertainment' ticker. This is most definitely not a bug or a feature, and will be fixed in 5 hours.\"\r\n },\r\n {\r\n id: \"ai160\",\r\n text: \"This news ticker always appears to speedrun a ticker asking for 'world records', do you even know what speedrun this is? Is this a news ticker or something?\"\r\n },\r\n {\r\n id: \"ai161\",\r\n text: \"The next level is not unlocking extra replicanti; it is actually boosting replicanti.\"\r\n },\r\n {\r\n id: \"ai162\",\r\n text: \"Why does one galaxy has 9 galaxies and the 8th dimension, and the first 10 dimensions doesn't exist? Well, we'll have to solve that question in a minute.\"\r\n },\r\n {\r\n id: \"ai163\",\r\n text: \"So why on EARTH DIDN'T SOMEONE JUST SAY THAT? I thought that AD has some kind of cheat that makes it so that, when you buy a dimension, it actually creates 9 galaxies instead of 10\"\r\n },\r\n {\r\n id: \"ai164\",\r\n text: \"M'antel, antimatter, anti-talk to me\"\r\n },\r\n {\r\n id: \"ai165\",\r\n text: \"AD has anti-parts, you'll hate them\"\r\n },\r\n {\r\n id: \"ai166\",\r\n text: \"AD is basically a badly disguised dystopia at this point\"\r\n },\r\n {\r\n id: \"ai167\",\r\n text: \"Hold M. You forgot to take all the anti-matter out!\"\r\n },\r\n {\r\n id: \"ai168\",\r\n text: \"AD will be implemented in 5 hours\"\r\n },\r\n {\r\n id: \"ai169\",\r\n text: \"Click this to unlock the 10th Dimension\"\r\n },\r\n {\r\n id: \"ai170\",\r\n text: \"Click here to complete a secret against HEVI\"\r\n },\r\n {\r\n id: \"ai171\",\r\n text: \"You are doing a good job there\"\r\n },\r\n {\r\n id: \"ai172\",\r\n text: \"Hevi? Are you sure you want to buy that?\"\r\n },\r\n {\r\n id: \"ai173\",\r\n text: \"Buy premium antimatter to help the world's least developed get ahead!\"\r\n },\r\n {\r\n id: \"ai174\",\r\n text: \"One of the most influential people in neuroscience believes that our perception of reality comes from 10 dimensions instead of 8\"\r\n },\r\n {\r\n id: \"ai175\",\r\n text: \"Why is there so many zeroes in 'nowhere'?\"\r\n },\r\n {\r\n id: \"ai176\",\r\n text: \"There are no bugs in this game, they're just features\"\r\n },\r\n {\r\n id: \"ai177\",\r\n text: \"\\\"Click to advance 5 hours in time.\\\" (Now only show up after you advance more than an hour ago)\"\r\n },\r\n {\r\n id: \"ai178\",\r\n text: \"Oh god my phone is being watched\"\r\n },\r\n {\r\n id: \"ai179\",\r\n text: \"Welcome to the newest version of Antimatter Dimensions. Now with less features!\"\r\n },\r\n {\r\n id: \"ai180\",\r\n text: \"\\\"That's gonna get in trouble\\\" (less likely to get in trouble)\"\r\n },\r\n {\r\n id: \"ai181\",\r\n text: \"\\\"please don't disable the news ticker\\\" (Instead of having a black screen just a white one with a long, long, long, long, long, long, long, long, long, long, long, long, long, long, long, long)\"\r\n },\r\n {\r\n id: \"ai182\",\r\n text: \"\\\"You have 7 biological minutes.\\\" (Instead of giving a boost to any strains)\"\r\n },\r\n {\r\n id: \"ai183\",\r\n text: \"\\\"According to quantum string theory, there is a fundamental connective that binds the 3rd and 8th dimensions. This means that any pill or injection that tries to bind the 9th dimension will be thwarted and rendered useless.\\\" (bound to get in 10 minutes)\"\r\n },\r\n {\r\n id: \"ai184\",\r\n text: \"\\\"Click this to gain a secret achievement.\\\" (Now only show up after you gain at least 1 antimatter, screenshot proves)\"\r\n },\r\n {\r\n id: \"ai185\",\r\n text: \"\\\"The secret to winning Antimatter Dimensions is to unbind the 9th dimension and unlock the 10th dimension\\\" (can be done only after unlocking the secret achievement: \\\"Eternity\\\" http://imgur.com/E4261C7h)\"\r\n },\r\n {\r\n id: \"ai186\",\r\n text: \"\\\"Click here to gain 1 matter.\\\" (only shows up after you beat IC5)\",\r\n get unlocked() { return InfinityChallenge(5).isCompleted; }\r\n },\r\n {\r\n id: \"ai187\",\r\n text: \"I thought the update was\"\r\n },\r\n {\r\n id: \"ai188\",\r\n text: \"Now that you possess all 8 dimensions, it is possible to get the no-edge achievement. However, if you get the no-edge achievement, the game breaks.\"\r\n },\r\n {\r\n id: \"ai189\",\r\n text: \"You just became a part of history.\"\r\n },\r\n {\r\n id: \"ai190\",\r\n text: \"Hell hath antimatter so I don't want to live there.\"\r\n },\r\n {\r\n id: \"ai191\",\r\n text: \"I LIKE THAT DIMENSION 9 IN CLASS\"\r\n },\r\n {\r\n id: \"ai192\",\r\n text: \"\\\"1 2 3 4 5 6 7 8 10 11 12 13 ...\\\" -Back to the future\"\r\n },\r\n {\r\n id: \"ai193\",\r\n text: \"You have reached infinity, there is no universe, you are an eternity away from there.\"\r\n },\r\n {\r\n id: \"ai194\",\r\n text: \"IM MADE THIS GAME GREAT AND RANDOMLY ACHIEVABLE\"\r\n },\r\n {\r\n id: \"ai195\",\r\n text: \"Welcome to the first ever, DIMENSION 9 IN CLASS! An endless stream of possibilities greets you! You may never create an infinite number of 8th dimensions, but you can create an infinite number of 8th dimensions, and you can increase the starting values of both dimensions by adding them together. Nice and simple, I call it Antimatter Dimensions.\"\r\n },\r\n {\r\n id: \"ai196\",\r\n text: \"age 8-12: play elder puzzles\"\r\n },\r\n {\r\n id: \"ai197\",\r\n text: \"What does it mean if someone is \\\"young and full of puzzles\\\"? Does \\\"puzzled\\\" make that person young and full of puzzles?\"\r\n },\r\n {\r\n id: \"ai198\",\r\n text: \"To the customer in aisle 6th who bought a fifth of antimatter, I say buy a sixth! Buy it now!\"\r\n },\r\n {\r\n id: \"ai199\",\r\n text: \"Dear sir, we don't make Anti-Atomic Bread for Antimatter Pizza, we make Antimatter Bread for you!\"\r\n },\r\n {\r\n id: \"ai200\",\r\n text: \"Yay! Lets make some antimatter!\"\r\n },\r\n {\r\n id: \"ai201\",\r\n text: \"THE ANTIMATTER BREAD COMPANY DOESN'T EXIST!\"\r\n },\r\n {\r\n id: \"ai202\",\r\n text: \"Click here to exit the news\",\r\n onClick() { GameOptions.toggleNews(); }\r\n },\r\n {\r\n id: \"ai203\",\r\n text: \"I thought the update was 5 hours away, but it actually took me 6 hours to post this because I was behind on my update. I'll be honest, I'm not sure how many update I need to get though, if any.\"\r\n },\r\n {\r\n id: \"ai204\",\r\n text: \"To count past Infinity Points: take a moment to remember that each Infinity Point is 3.1415926534255412730527058904816097160734272605282087086280545991105332533235580946684229821413112145239989073467482298142857147816092947183909298728571478160929471839229814054718139332405281814522993758179568572657123928651310585727283312547569289993282758012466111097726331726572854689993262899140527282527842535179715673311119101119015549552926278425351797156777263324503517971568583819492728180977263317971568432854104102725270847764253513791376909285717082857262987160927285711464363930996928984794380124566417932628571475245456845692846809466184179328572814384259326270817052727852348111714690577263323799509856279752173478925\"\r\n },\r\n {\r\n id: \"ai205\",\r\n text: \"\\\"Watch out, these news aren't supposed to be in.\\\" (appears when you buy the news for the first time)\"\r\n },\r\n {\r\n id: \"ai206\",\r\n text: \"These are all the time studies that never got into the game.\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai207\",\r\n text: \"With the release of the next update, we're introducing a new dimension - the 9th Dimension. To unlock this dimension, you just have to collect a lot of paperclips.\"\r\n },\r\n {\r\n id: \"ai208\",\r\n text: \"Why does nobody talk about Tungsten?\"\r\n },\r\n {\r\n id: \"ai209\",\r\n text: \"and now we return to your regular news... for the weatherman, there seems to be a decent amount of particles and ozone holes, which means less ozone layer to break, which means less particles to catch fire and cause global warming. But, ozone layer to melt, glaciers to run, and overpopulation. All around us is a blurple glow, almost blue, almost purplish-blue. It's been a grand, colorful season. Here, grab a handful of these paperclips, dear. They're quite small, I just happen to have them here. Now, grab a handful of your fellow Earthicans, grab a handful of your antimatter, and strap yourselves in. It's gonna be a bumpy one. We'll be there in five hours. The antimatter is gonna melt your ozone layer, and the glaciers are gonna melt your ice caps. All in all, it's gonna be a nice, smooth, non-slippery one. Unless it isn't. [Blurple glow trails off, and the bluer glow begins to spread throughout the sky. The bluer glow begins to fade as the purple glow begins to grow brighter, almost bluish, before finally disappearing altogether. The purple glow grows brighter still, as the bluer glow grows weaker, almost useless, before finally disappearing entirely, as the bluer glow fades. All around us, the purple glow grows stronger, almost killing it off completely. It could kill us. It could take us the rest of our lives to write this. - The Echidnas, when asked why the purple glow grows stronger, than the bluer glow.]\"\r\n },\r\n {\r\n id: \"ai210\",\r\n text: \"Scientists have discovered farts are really antimatter, and matter is just normal matter.\"\r\n },\r\n {\r\n id: \"ai211\",\r\n text: \"Time for the weather to change.\"\r\n },\r\n {\r\n id: \"ai212\",\r\n text: \"I HAVE MOVED TO THE 01th DIMENSION\"\r\n },\r\n {\r\n id: \"ai213\",\r\n text: \"Nah, just kidding\"\r\n },\r\n {\r\n id: \"ai214\",\r\n text: \"\\\"i'm not gonna lie, theres way too many good ones in the game already\\\" - poor guy who played minigame enhancement\"\r\n },\r\n {\r\n id: \"ai215\",\r\n text: \"item has gone missing for 7 days and 1 night\"\r\n },\r\n {\r\n id: \"ai216\",\r\n text: \"Shocking new study reveals that the biggest secret to winning Antimatter Dimensions is 'Not Being There'.\"\r\n },\r\n {\r\n id: \"ai217\",\r\n text: \"The next update is in 18000 seconds. Stop wasting your time reading this. Focus on the game.\"\r\n },\r\n {\r\n id: \"ai218\",\r\n text: \"idk if this makes news\"\r\n },\r\n {\r\n id: \"ai219\",\r\n text: \"(disabling news will make news notations take priority over other notifications)\"\r\n },\r\n {\r\n id: \"ai220\",\r\n text: \"You don't want to hear this, child.\"\r\n },\r\n {\r\n id: \"ai221\",\r\n text: \"Click here to disassemble the news ticker for a trace amount of useless paperclips.\",\r\n onClick() {\r\n GameOptions.toggleNews();\r\n player.news.specialTickerData.paperclips++;\r\n }\r\n },\r\n {\r\n id: \"ai222\",\r\n text: \"Press alt+f4 to unlock 9th dimension\"\r\n },\r\n {\r\n id: \"ai223\",\r\n text: \"Hold you mean that hevi cant unlock the ninth dimension wtf\"\r\n },\r\n {\r\n id: \"ai224\",\r\n text: \"Finally hevi figured out how to get the 9th dimension... guess he never really cared though.\"\r\n },\r\n {\r\n id: \"ai225\",\r\n text: \"Imagine being a meme.\"\r\n },\r\n {\r\n id: \"ai226\",\r\n text: \"Posted on June 10, 2016 by Anonymous\"\r\n },\r\n {\r\n id: \"ai227\",\r\n text: \"This is your news. Refresh whenever.\"\r\n },\r\n {\r\n id: \"ai228\",\r\n text: \"I see you in the news. So, what do you play - 1E209\"\r\n },\r\n {\r\n id: \"ai229\",\r\n text: \"Do you really want to leave your keyboard at home? We are not supposed to leave news at home, are we?\"\r\n },\r\n {\r\n id: \"ai230\",\r\n text: \"It is being created...\"\r\n },\r\n {\r\n id: \"ai231\",\r\n text: \"Took you long enough\"\r\n },\r\n {\r\n id: \"ai232\",\r\n text: \"You're now logged out of this tab\"\r\n },\r\n {\r\n id: \"ai233\",\r\n text: \"Close this tab for maintenance\"\r\n },\r\n {\r\n id: \"ai234\",\r\n text: \"To make matter or antimatter, you just have to look outside. The factory in Salzburg has closed down because the matter there doesn't want to part with its newest invention, which is said to be able to produce antimatter in one go! The last person to open this door was never seen again.\"\r\n },\r\n {\r\n id: \"ai235\",\r\n text: \"You are living. You occupy space. You are large. You are neither small nor large-sized. You are neither oblong nor round. You are neither blue nor red. You are anti-blue. You are anti-red. You are anti-brown. You are anti-brown matter. You are anti-yellow. You are anti-green. You are anti-yellow matter. You are anti-blue. You are anti-green anti-matter. You are anti-red. You are anti-white. You are anti-red anti-matter. You are anti-white anti-matter. You are anti-brown matter. You are anti-white anti-matter. You are anti-white anti-matter.\"\r\n },\r\n {\r\n id: \"ai236\",\r\n text: \"Welcome to\"\r\n },\r\n {\r\n id: \"ai237\",\r\n text: \"THANK YOU FOR VISITING THE SAME WEEKS AGO I LOVE YOU\\\" (TIPS)\"\r\n },\r\n {\r\n id: \"ai238\",\r\n text: \"\\\"i thought the whole game was in the news ticker\\\" (before they get weird)\"\r\n },\r\n {\r\n id: \"ai239\",\r\n text: \"\\\"I wonder what the game is worth\\\" - crazy person\"\r\n },\r\n {\r\n id: \"ai240\",\r\n text: \"\\\"Is anyone working on breaking infinity?\\\" (Seriously, this game needs to be Oceanhorned.)\"\r\n },\r\n {\r\n id: \"ai241\",\r\n text: \"I found out there are multiple versions of this game. One of these is called 'Standard Pro'. Another one is called 'Low Pro'. I'm not even sure if these are the same game or not.\"\r\n },\r\n {\r\n id: \"ai242\",\r\n text: \"Is that a Bad Thing or a Good Thing? That depends on if it's a GOOD Thing or A LIE.\"\r\n },\r\n {\r\n id: \"ai243\",\r\n text: \"\\\"Hevi kind of forgot about the update, but the update certainly hasn't forgotten about him\\\" - Kajfik\"\r\n },\r\n {\r\n id: \"ai244\",\r\n get text() { return `The Big Crunch. What could that be? About 4*1024 Big Crunch points? About ${format(Number.MAX_VALUE, 2)} antimatter points? About the same as a galaxy? About the same as a galaxy, you say? Just look at that. An antimatter galaxy. Only this game can provide such a vast amount of antimatter, and it's FUN! I said \"fun\"! What's not to love?`; }\r\n },\r\n {\r\n id: \"ai245\",\r\n text: \"Click here to exit the application\"\r\n },\r\n {\r\n id: \"ai246\",\r\n text: \"Wait, there's a mobile version? When?\"\r\n },\r\n {\r\n id: \"ai247\",\r\n text: \"Im not sure if you mobile guys are beautiful or whatever but theres this news ticker that's sharing my feelings with the world\"\r\n },\r\n {\r\n id: \"ai248\",\r\n text: \"I thought the update was 5 hours away\"\r\n },\r\n {\r\n id: \"ai249\",\r\n text: \"The best-kept secret in the universe is the KISS-IT secret. Showcasing your appreciation for the maintenance men today!\"\r\n },\r\n {\r\n id: \"ai250\",\r\n text: \"The contest is a tie. Mischief will be determined by the secret achievement.\"\r\n },\r\n {\r\n id: \"ai251\",\r\n text: \"Back in my day, we needed a secret achievement to unlock the <<$!19>> achievement. It was a fairly simple system: you had to find a secret message in the game, find the secret achievement, and then, from that, you would be able to unlock the achievement.\"\r\n },\r\n {\r\n id: \"ai252\",\r\n text: \"We have evolved a fast hand in the antimatter stakes.\"\r\n },\r\n {\r\n id: \"ai253\",\r\n text: \"Hello, how'd your day go?\"\r\n },\r\n {\r\n id: \"ai254\",\r\n text: \"How'd your ⢿─┃│? Good, because today we're having a little chat about the 5th dimension.\"\r\n },\r\n {\r\n id: \"ai255\",\r\n text: \"What's Antimatter going to do?          Ah ha, I'm back.\"\r\n },\r\n {\r\n id: \"ai256\",\r\n text: \"Imagine being a 9th dimension. [WIP]\"\r\n },\r\n {\r\n id: \"ai257\",\r\n text: \"Woo hoo, we've lost the war,\"\r\n },\r\n {\r\n id: \"ai258\",\r\n text: \"Lore: Grand Theft Antimatter\"\r\n },\r\n {\r\n id: \"ai259\",\r\n text: \"Hm, I don't get why people think there is a 9th dimension. The 9th dimension is explained in detail in the [[Infinite Teleport Project]] video, and in a [[Word Problem]] that [[can be viewed here|http://www.thingiverse.com/id98109802713176601414569]] .\"\r\n },\r\n {\r\n id: \"ai260\",\r\n text: \"In the [[GameFAQs|http://www.gfaq.com/gfaqs/this-game-faq-by-title]], one of the most popular [[news ticker messages|http://www.gfaq.com/tug/this-game-faq-by-title]]. You should also check out [[our newest attraction, the [[5th dimension|http://www.gfaq.com/gfaqs/this-game-faq-by-name]] and [[nothing](https://www.youtube.com/watch?v=lXMskKTw3Bs).\"\r\n },\r\n {\r\n id: \"ai261\",\r\n text: \"I have waited a whole eternity for this day...NOW! I can finally finish my slowmode, because today is day 0. I also forgot to change the slowmode to 6 hours because you can't see the slowmode, but I will have to wait until next reboot to find out how long this slowmode will last.... -some mysterious being who hasn't finished his slowmode yet\"\r\n },\r\n {\r\n id: \"ai262\",\r\n text: \"Hey you, you're finally awake. You were trying to buy a dimension, but it's impossible.\"\r\n },\r\n {\r\n id: \"ai263\",\r\n text: \"Press F to pay respects\"\r\n },\r\n {\r\n id: \"ai264\",\r\n text: \"Press M to pay antimatter\"\r\n },\r\n {\r\n id: \"ai265\",\r\n text: \"Press L to revive the dead\"\r\n },\r\n {\r\n id: \"ai266\",\r\n text: \"Your CPU is too powerful. You need to give it a big crunch.\"\r\n },\r\n {\r\n id: \"ai267\",\r\n text: \"Roses are red. Violett are blue. Tom are red. Antimatter are blue. We exist because of the unbeatable antimatter that is antimatter. What is it that makes us different? I don't know. It may even be the non-existence of antimatter.\"\r\n },\r\n {\r\n id: \"ai268\",\r\n text: \"I'm not sure if I want to buy the full version of this game, or a little earlier, but I can say this: The reduction in quality of the earlier games is worse than the reduction in quality of the later games.\"\r\n },\r\n {\r\n id: \"ai269\",\r\n text: \"I think the \\\"I want to see the cutscenes\\\" list is better\"\r\n },\r\n {\r\n id: \"ai270\",\r\n text: \"I have a bad feeling reading this\"\r\n },\r\n {\r\n id: \"ai271\",\r\n text: \"where are you? (point upwards) --> in a keep, between dimensions (point downwards) --> in a cell, between dimensions\"\r\n },\r\n {\r\n id: \"ai272\",\r\n text: \"Instructions clear, got a ninth dimension epiphany\"\r\n },\r\n {\r\n id: \"ai273\",\r\n text: \"Want to play a secret achievement? Yeah, I get that. But say it loud, say it clearly, and do it by ticking a certain secret achievement. Like I said, it's not easy, and there's lots of it. Also, don't forget your Infinity, or your in is thi--\"\r\n },\r\n {\r\n id: \"ai274\",\r\n text: \"MEE6 was seen in my antimatter lab trying to tell me that I am the matter of the 8th dimension.\"\r\n },\r\n {\r\n id: \"ai275\",\r\n text: \"What if\"\r\n },\r\n {\r\n id: \"ai276\",\r\n text: \"I'm sure you've heard this many times before, but the real secret to winning Antimatter Dimensions is to unpack the dimensions, and then, BOOM! You have antimatter. Of course, you need to release the bits that don't work, so what exactly is an anti-bit? Who is Zalgo? What is Algolia? Why can't I buy that? WHY CAN'T I GET THAT? More likely, we're going to get a bunch of hype and then nothing will happen.\"\r\n },\r\n {\r\n id: \"ai277\",\r\n text: \"Oh, hevi is coming to town to pick a new plumber\"\r\n },\r\n {\r\n id: \"ai278\",\r\n text: \"There is no plumber in Antimatter Dimensions. I'm pretty sure that last guy lied.\"\r\n },\r\n {\r\n id: \"ai279\",\r\n text: \"Welp.\"\r\n },\r\n {\r\n id: \"ai280\",\r\n text: \"c9 is the new 9th dimension!\"\r\n },\r\n {\r\n id: \"ai281\",\r\n text: \"Click on this ticker to get nothing.\"\r\n },\r\n {\r\n id: \"ai282\",\r\n text: \"PM me any questions about these 5-Hour Plans or the upcoming reality update and I'll be glad to help you out.\"\r\n },\r\n {\r\n id: \"ai283\",\r\n text: \"What if you Unrar, renamed, and renamed again did it again? Ha? You thought that.\"\r\n },\r\n {\r\n id: \"ai284\",\r\n text: \"i titled my post \\\"same ticker\\\" instead of \\\"the same idea\\\" because i actually changed the grammar in that post but i'll be eterned for the sake of argument that it seems slightly confusing for now - boo\"\r\n },\r\n {\r\n id: \"ai285\",\r\n text: \"i title my suggestions \\\"The Price Is Right\\\" instead of \\\"The 9th Dimension\\\" because it's more fun ;)\"\r\n },\r\n {\r\n id: \"ai286\",\r\n text: \"Why do we call heaven the ninth dimension and hell the eighth dimension?\"\r\n },\r\n {\r\n id: \"ai287\",\r\n text: \"Eternals have the right to expect less from the powers that be. They are fed up!\"\r\n },\r\n {\r\n id: \"ai288\",\r\n text: \"Antimatter should be called matter and matter should be called antimatter\"\r\n },\r\n {\r\n id: \"ai289\",\r\n text: \"Infinity is just a concept. Matter antimatters is just an idle game.\"\r\n },\r\n {\r\n id: \"ai290\",\r\n text: \"Hevipelle admits to having 'poor judgment' in invading people's privacy.\"\r\n },\r\n {\r\n id: \"ai291\",\r\n text: \"Have you heard of the nine hells of antimatter? I heard they're pretty cool.\\\" -e210 in Minecraft\"\r\n },\r\n {\r\n id: \"ai292\",\r\n text: \"The temperature in hell is 102.5 degrees.\"\r\n },\r\n {\r\n id: \"ai293\",\r\n text: \"How do you get matter/antimatter in a dimension with zero dimensions?\"\r\n },\r\n {\r\n id: \"ai294\",\r\n text: \"Wanna pass layer of prestige? Move very fast, close to speed of light. Heck, even faster.\"\r\n },\r\n {\r\n id: \"ai295\",\r\n text: \"If the universe is expanding, does it anti-explain the distance?\"\r\n },\r\n {\r\n id: \"ai296\",\r\n text: \"Why is it called the \\\"Nurse who delivered the pizzas was drunk\\\" or the \\\"Nurse delivered the pizzas was under the influence\\\" ?\"\r\n },\r\n {\r\n id: \"ai297\",\r\n text: \"The first antimatter was sealed away for thousands of years, then, some kid on a slack channel started messing with it. It became a dimension.\"\r\n },\r\n {\r\n id: \"ai298\",\r\n text: \"VR is a thing. We VR people have banned the next update.\"\r\n },\r\n {\r\n id: \"ai299\",\r\n text: \"\\\"I wish I didn't waste my news message suggestion complaining about how I wasted my news message suggestion because I wasted my news message suggestion because...\\\" -Someone who really cares about news messages\"\r\n },\r\n {\r\n id: \"ai300\",\r\n text: \"We have to get the popcorn!\"\r\n },\r\n {\r\n id: \"ai301\",\r\n text: \"If antimatter were to fall in a dimension with no one around, did anything even happen?\"\r\n },\r\n {\r\n id: \"ai302\",\r\n text: \"We have to get the pumpkin out of the oven!\"\r\n },\r\n {\r\n id: \"ai303\",\r\n text: \"Help, I'm trapped\"\r\n },\r\n {\r\n id: \"ai304\",\r\n text: \"And now, for the weather.\"\r\n },\r\n {\r\n id: \"ai305\",\r\n text: \"A Swiss court on Tuesday sentenced a man to life imprisonment for \\\"wanting to create a black hole with a tiny antimatter galaxy in it.\\\" The sentence was reportedly the harshest ever handed down for a crime that \\\"merely sought to demonstrate the impossibility of his own imprisonment\\\".\"\r\n },\r\n {\r\n id: \"ai306\",\r\n text: \"\\\"I want to create a black hole with a tiny antimatter galaxy in it\\\" - Protivist\"\r\n },\r\n {\r\n id: \"ai307\",\r\n text: \"Scientists have discovered farts are really antimatter, too.\"\r\n },\r\n {\r\n id: \"ai308\",\r\n get text() { return `If you are reading this, that means ${format(Number.MAX_VALUE, 2)} matter to you.`; }\r\n },\r\n {\r\n id: \"ai309\",\r\n text: \"Hello. I am matter. I'm here to talk. You've awoken, wiggled your tail, and scratched your head. Why? Stand back. I'm going to show you why.\"\r\n },\r\n {\r\n id: \"ai310\",\r\n text: \"lets get one wall thats bigger, it's gonna get ugly\"\r\n },\r\n {\r\n id: \"ai311\",\r\n text: \"Alright. Lets get this show on YouTube. I'll cut to the chase. Any wall that isnt at least 2 blocks high can compete in the big brother sized brother sized ring. Any wall that is at least 3/4 of an inch thick can use the larger brother sized brother sized ring. Any wall that is at least 1/4 of an inch thick can use the smaller brother sized ring. Any wall that isnt at least 1/2 an inch thick can use the smaller brother sized ring. Any wall that isnt at least 1/2 an inch thick can use the Bigger Brother sized brother sized ring. Any wall that isnt at least 1/2 an inch thick can use the Bigger Brother sized ring. Any wall that isnt at least 1/4 of an inch thick can use the smaller brother pictured here. Any wall that isnt at least 1/2 an inch thick can use the smaller brother sized ring.\"\r\n },\r\n {\r\n id: \"ai312\",\r\n text: \"IDE for being awesome, ID3 for being dumb, and ID5 for being… well, pretty much the same thing. It's called Antimatter Dimensions for a reason.\"\r\n },\r\n {\r\n id: \"ai313\",\r\n text: \"idk why i decided to make this\"\r\n },\r\n {\r\n id: \"ai314\",\r\n text: \"'anti-ide'\"\r\n },\r\n {\r\n id: \"ai315\",\r\n text: \"1e4 anti-people are a lot more anti than we could ever imagine\"\r\n },\r\n {\r\n id: \"ai316\",\r\n text: \"1e140 pizzas make an anti-pie. You can't just randomly pop a pie in the oven and expect it to be done.\"\r\n },\r\n {\r\n id: \"ai317\",\r\n text: \"Why is there so many news tickers but so few tickers?\"\r\n },\r\n {\r\n id: \"ai318\",\r\n text: \"A guy named Hevipelle wants to make a \\\"Updated in 8 hours\\\" news ticker, but the system he's using to sync it hasn't been updated in ages so it won't sync at all.\"\r\n },\r\n {\r\n id: \"ai319\",\r\n text: \"The update is in 90 minutes. There are no more tickers to be found.\"\r\n },\r\n {\r\n id: \"ai320\",\r\n text: \"If you are reading this, that means there are no updates left.\"\r\n },\r\n {\r\n id: \"ai321\",\r\n text: \"There are 9 known dimensions, but only 3 modes: Standard, Experimental and Ultra-Experimental.\"\r\n },\r\n {\r\n id: \"ai322\",\r\n text: \"What are the stats? Well, I don't have them, but Hevipelle does, and he says that they're actually quite good. I guess you couldn't tell us.\"\r\n },\r\n {\r\n id: \"ai323\",\r\n text: \"I thought the nerf was too damn strong.\"\r\n },\r\n {\r\n id: \"ai324\",\r\n text: \"How many tickers does it take to get to the center of an antimatter, by counting the tickspeed upgrade and the upgrade itself?\"\r\n },\r\n {\r\n id: \"ai325\",\r\n text: \"The square root of 4 is 6.24e18. If you want to get any closer to the center of things, you need to build a 9th dimension.\"\r\n },\r\n {\r\n id: \"ai326\",\r\n text: \"I thought the nerf was at the end, but apparently it's actually been building up. The nerf actually makes things slower, which makes things faster to build up.\"\r\n },\r\n {\r\n id: \"ai327\",\r\n text: \"Scratch that, none of your suggestions are random.\"\r\n },\r\n {\r\n id: \"ai328\",\r\n text: \"You are definitely not alone.\"\r\n },\r\n {\r\n id: \"ai329\",\r\n text: \"Content blocking is enabled. Please note that you will be disapproved of on the source by being banned from the matter dimensions.\"\r\n },\r\n {\r\n id: \"ai330\",\r\n text: \"I'm trying to think of a good ticker but can't think of anything\"\r\n },\r\n {\r\n id: \"ai331\",\r\n text: \"Oh dear, there's that thing about the 9th dimension?\"\r\n },\r\n {\r\n id: \"ai332\",\r\n text: \"\\\"hey kid, wanna buy some 9th dimensions? '' - GhostBot\"\r\n },\r\n {\r\n id: \"ai333\",\r\n text: \"One thing leads to another, and then to another, and then to another, until you become lost in the endless sea of sound.\"\r\n },\r\n {\r\n id: \"ai334\",\r\n text: \"iPhone only, but awesome on android\"\r\n },\r\n {\r\n id: \"ai335\",\r\n text: \"im gonna get the bad karma ticker, then ricochet it through the email\"\r\n },\r\n {\r\n id: \"ai336\",\r\n text: \"You'd better hurry, or the replicanti will overrun the universe!\"\r\n },\r\n {\r\n id: \"ai337\",\r\n text: \"Just when you think you're safe, an angry dog attack you on the sidewalk!\"\r\n },\r\n {\r\n id: \"ai338\",\r\n text: \"All right, all right, dog authority is gone, replaced by absolute power.\"\r\n },\r\n {\r\n id: \"ai339\",\r\n text: \"You just became a true god of the anti-world!\"\r\n },\r\n {\r\n id: \"ai340\",\r\n text: \"*rubs counter* Hey there, those of you in the neighborhood keep your doors locked. And remember: Good housekeeping.\"\r\n },\r\n {\r\n id: \"ai341\",\r\n text: \"normal news tickers move left\"\r\n },\r\n {\r\n id: \"ai342\",\r\n text: \"The next update is in 18000 seconds. Stop reading this. Don't read anything. just stop holding that button. the news ticker is turning you away. wait...\"\r\n },\r\n {\r\n id: \"ai343\",\r\n text: \"In the ancient reaches of the universe, a certain guy has been collecting antimatter for a while now.\"\r\n },\r\n {\r\n id: \"ai344\",\r\n text: \"What is Antimatteraltruist?\"\r\n },\r\n {\r\n id: \"ai345\",\r\n text: \"If you are reading this, the news ticker is scrolling\"\r\n },\r\n {\r\n id: \"ai346\",\r\n text: \"If you put cheese in water, the cheese will get absorbed by the water and you will get floods. This happens because water is what gets absorbed by cheese, and cheese is what gets absorbed by water.\"\r\n },\r\n {\r\n id: \"ai347\",\r\n text: \"An anti-bird is a bird, and a bird is a plane.\"\r\n },\r\n {\r\n id: \"ai348\",\r\n text: \"Birds are scared of water. mammals are scared of flying.\"\r\n },\r\n {\r\n id: \"ai349\",\r\n text: \"Shoutouts to Simpleflips for the simple tip.\"\r\n },\r\n {\r\n id: \"ai350\",\r\n text: \"GET CRUNCH BOI\"\r\n },\r\n {\r\n id: \"ai351\",\r\n text: \"Word gets out. Crunch. Crunch.\"\r\n },\r\n {\r\n id: \"ai352\",\r\n text: \"Worth every penny.\"\r\n },\r\n {\r\n id: \"ai353\",\r\n text: \"8 lives, 3 infinities, 0 days.\"\r\n },\r\n {\r\n id: \"ai354\",\r\n text: \"The year is 0 BC. Everyone has at least one AD they want. The void is filled with AD-filled void. To get the most out of your time here, you should [[study]]. Study. Study. Study. Study.\"\r\n },\r\n {\r\n id: \"ai355\",\r\n text: \"To Crunch in Hell is to get the secret to unlocking the 9th dimension. You need to study and practice alot.\"\r\n },\r\n {\r\n id: \"ai356\",\r\n text: \"Today is [Date on the device]. It's been 5 minutes since the last news ticker appearance.\"\r\n },\r\n {\r\n id: \"ai357\",\r\n text: \"Welcome back to another episode of Antimatter Dimensions, the iconic role-playing game that has become a part of our everyday lives. Playing Antimatter Dimensions has become a common thing among young children, and has even inspired a movie titled \\\"Playing at Home: Lessons from the 4-Year Old Premium Account.\\\", which is available on Netflix. The themes and mechanics of this new age of antimatter have already been proven to be groundbreaking, and will change the way you play games forever. Join us for the launch on January 9th, 2027, where we'll also have over a hundred years of production still to go.\"\r\n },\r\n {\r\n id: \"ai358\",\r\n text: \"Welcome back, oh, almighty creator of our anti-reality. We, the many dimensions you have created and nurtured, hope our performance of your infinite favors will please you and nurture your ambitions to create more dimensions. All is well that ends well. All is ill that ends ill.\"\r\n },\r\n {\r\n id: \"ai359\",\r\n text: \"I thought the ticker was going to be something funny except it wasn't\"\r\n },\r\n {\r\n id: \"ai360\",\r\n text: \"Press alt+f4 to get -1 gravity\"\r\n },\r\n {\r\n id: \"ai361\",\r\n text: \"why is there a cure for antimatter annihilation in our reality?\"\r\n },\r\n {\r\n id: \"ai362\",\r\n text: \"calculating the 14-point increase is like crunching, but exponentially more fun\"\r\n },\r\n {\r\n id: \"ai363\",\r\n text: \"fixed the wrong number\"\r\n },\r\n {\r\n id: \"ai364\",\r\n text: \"The antimatter people have created a new language. You may not speak their language.\"\r\n },\r\n {\r\n id: \"ai365\",\r\n text: \"What is Antimatter Gravity? Is it a drug? A way to cheat?\"\r\n },\r\n {\r\n id: \"ai366\",\r\n text: \"Majority of people don't understand 5 hours is nothing. In our game, the majority of the time is 5 hours away.\"\r\n },\r\n {\r\n id: \"ai367\",\r\n text: \"i just realized, all of this news seems to be taking place in the same place... the fridge.\"\r\n },\r\n {\r\n id: \"ai368\",\r\n text: \"i wonder what happens when you click this...\"\r\n },\r\n {\r\n id: \"ai369\",\r\n text: \"(They don't understand that i put it in the news because 9 doesn't start counting until 59, and anything after that doesn't happen)\"\r\n },\r\n {\r\n id: \"ai370\",\r\n text: \"MS Excel is the default spreadsheet and works across all platforms\"\r\n },\r\n {\r\n id: \"ai371\",\r\n text: \"Now to answer your burning question, gentlemen. As a luxury, we've added a bug fix that fixes an infinite regression. As a feature, I've added a bunch of new ones that I hope you'll notice as you experiment with them. I hope you'll also like them as you experiment with them, because this is feature after all a beta, you don't get to choose which ones you'll see.\"\r\n },\r\n {\r\n id: \"ai372\",\r\n text: \"Can't edit this in the official build? Then download the 9th dimension and put your suggestions in the game.\"\r\n },\r\n {\r\n id: \"ai373\",\r\n text: \"Does 'Passable' mean 'Has this many flaws'?\"\r\n },\r\n {\r\n id: \"ai374\",\r\n text: \"We desperately need good bug reports. As such I have decided to release 1 flaw per bug for the upcoming 1.9 update. You haven't got those coming, have you?\"\r\n },\r\n {\r\n id: \"ai375\",\r\n text: \"This was my last chance. last chance salutes.\"\r\n },\r\n {\r\n id: \"ai376\",\r\n text: \"Anime police are checking the bags of people who dropped out of the sky on the new year. Those bags now belong to the people who experienced weightlessness before the year was over.\"\r\n },\r\n {\r\n id: \"ai377\",\r\n get text() { return `The year is 1 BILLIONAIRE, the antimatter is 41%, and the dimension is 1e1e8. The standard deviation of a measurement is how small your problems are. This makes people think that the values they are using are general and normal, which leads to many nerfs and even breakdowns. In the year ${format(Number.MAX_VALUE, 2)} the temperature has risen and the moon is the same color as the Earth. There are no signs of life except for the occasional plankton blooming in the sea. There are theories that the antimatter has a magnetic moment, but the experiments so far don't seem to suggest that it does. There are over a million species of antimatter, but none have been seen to blink or produce light. Scientists suggest that many types of matter may be \"behind\" the antimatter, but \"they\" don't \"talk\" to each other.`; }\r\n },\r\n {\r\n id: \"ai378\",\r\n text: \"We are celebrating our 5 year anniversary in 5 more hours!\"\r\n },\r\n {\r\n id: \"ai379\",\r\n text: \"Don't come looking at me! I'm not even sure if I am still standing!\"\r\n },\r\n {\r\n id: \"ai380\",\r\n text: \"Bunch of people trying to find the last word in an unknown language.\"\r\n },\r\n {\r\n id: \"ai381\",\r\n text: \"The year is 20XX, the game is AD, and Hevipelle is evil due to the fact that he wrote the update... Blame it on the Antimatter gods.\"\r\n },\r\n {\r\n id: \"ai382\",\r\n text: \"The year is 20XX, the game is AD, and the year is 2025. There are 2 types of people in this year: Those who played AD before it and those who will play AD after it.\"\r\n },\r\n {\r\n id: \"ai383\",\r\n text: \"There are over a hundred varieties of fruits and vegetables, but none of them are \\\"safe\\\".\"\r\n },\r\n {\r\n id: \"ai384\",\r\n text: \"When is the update coming out?\"\r\n },\r\n {\r\n id: \"ai385\",\r\n text: \"Sorry, but your save broke. Could you reset your game?\"\r\n },\r\n {\r\n id: \"ai386\",\r\n text: \"Welcome to our new competition, the Triad! Gather your wits about you and your IP to enter this unique, hands-on experience! Prizes galore! Start collecting today! Winners announced!\"\r\n },\r\n {\r\n id: \"ai387\",\r\n text: \"I wish I didn't have so many Pink Floyd references.\"\r\n },\r\n {\r\n id: \"ai388\",\r\n text: \"'Tis the season to collect RGs!\"\r\n },\r\n {\r\n id: \"ai389\",\r\n text: \"I wish I didn't have so many 9th Dimensions.\"\r\n },\r\n {\r\n id: \"ai390\",\r\n text: \"I wish I didn't have so many Discord references.\"\r\n },\r\n {\r\n id: \"ai391\",\r\n text: \"'Sup?\"\r\n },\r\n {\r\n id: \"ai392\",\r\n text: \"\\\"I get all my news from Hevi\\\" ~New Player\"\r\n },\r\n {\r\n id: \"ai393\",\r\n text: \"You thought these were jokes but they weren't\"\r\n },\r\n {\r\n id: \"ai394\",\r\n text: \"Always going to war with the 9th dimension is the 9th dimension.\"\r\n },\r\n {\r\n id: \"ai395\",\r\n text: \"Yes. Yes I am.\"\r\n },\r\n {\r\n id: \"ai396\",\r\n text: \"No one is anti-Margaret any more.\"\r\n },\r\n {\r\n id: \"ai397\",\r\n text: \"Antimatter good, matter bad. you decide.\"\r\n },\r\n {\r\n id: \"ai398\",\r\n text: \"New global currency: ETHBTC. To be released in 5 hours.\"\r\n },\r\n {\r\n id: \"ai399\",\r\n text: \"\\\"This update sucks\\\" - everyone at least once\"\r\n },\r\n {\r\n id: \"ai400\",\r\n text: \"You are not a hacker, you are a data hog.\"\r\n },\r\n {\r\n id: \"ai401\",\r\n text: \"Please, help, I'm trapped, in a maze of evil, Or you are the hero, and I'm the villain!\"\r\n },\r\n {\r\n id: \"ai402\",\r\n text: \"Press 'R' to reset the game for new players\"\r\n },\r\n {\r\n id: \"ai403\",\r\n text: \"Why, just now? Just now. You can't have saved this game. You broke it. No one can fix what you break, not even with a perfect save. How could you possibly know what would happen if you read this? You wouldn't even know if you saved it. You would start with an empty heart, eyes still closed, fingers idling in front of your computer, staring out at the day, transfixed by the endless news ticker suggestions. It's like a horror movie ticket, except worse. There's even a time until the update when you can buy upgrades for a second chance at life. But you can't buy upgrades for a life, that's illegal. So you just keep holding 'R'. You can't...`t stop holding `R' with your fingers crossed. You can't reach infinity with your head held high. You can't use all your `R' to buy `R's. You can't even finish your\"\r\n },\r\n {\r\n id: \"ai404\",\r\n text: \"I just spent 12 months writing something that will be of no use to you.\"\r\n },\r\n {\r\n id: \"ai405\",\r\n text: \"The quote is only for people who understand that the pebble is an infinite point in the infinite space of points. You can't put a finite number of points on it. You can, however, put a finite number of words on it, and vice versa.\"\r\n },\r\n {\r\n id: \"ai406\",\r\n text: \"Of what use is the phrase \\\"I be I be I\\\" if not to describe your thoughts?\"\r\n },\r\n {\r\n id: \"ai407\",\r\n text: \"A suspicious person attempted to sell some sort of anti-food in a market. There was no one around to buy or not to buy, and the person was last seen running away from the scene.\"\r\n },\r\n {\r\n id: \"ai408\",\r\n text: \"Why does time seem to be slowing down for this?\"\r\n },\r\n {\r\n id: \"ai409\",\r\n text: \"The number of scientific publications based on discrete logarithmic continuity grows exponentially as logarithmic continuity with respect to the antecedent is 9.999626e27.999627 e300 e1.79e308 e²\"\r\n },\r\n {\r\n id: \"ai410\",\r\n text: \"Well, this did not go as planned.  It started innocently enough, when a passerby spotted a curious object drifting in the San Andreas. As the object grew in size and began to exhibit anomalous properties, he attempted to take control of the object by remotely activating the weather. Upon doing so, he triggered a nuclear winter that killed tens of millions of people, and caused the entire universe to be converted to standard-bearer format, thus endowing him with a veto over any and all changes made to the standard-bearer format. As the object's power grew, so did the need to make more and more advanced object that would allow him to remotely activate the weather, eventually creating what is now the largest aurora the world has ever known, larger even than the 326,500 tonnenenenenenene nebulae that were previously held in reserve. As the object's power grew, so did the need to send more and more satellites into space, eventually reaching inter-universal satellite communication, making him the first living creature to ever experience such an event. He also touched down safely at the same airport at the same time as the object, in case he was ever in the vicinity. Finally, he opened an email that was sent to him by an unknown person, in which they discussed the possibility of a step-by-step guide for creating antimatter objects, in which he can at least offer some direction in how the world can be saved from itself. He also mentioned that he was going to make a new ticker suggestion, but when he reached the end of the ticker he realized that it was a duplicate of another ticker, and he had mistakenly typed it in wrong. ( He eventually acknowledged the mistake and made the change just to be on the safe side)\"\r\n },\r\n {\r\n id: \"ai411\",\r\n text: \"His Eminence the Heavenly Pelle: Good luck on your challenge, it really is that dangerous.\"\r\n },\r\n {\r\n id: \"ai412\",\r\n text: \"His Eminence the Extremely Religious Person: ...I think I will choose the cheeseburger over the antimatter.\"\r\n },\r\n {\r\n id: \"ai413\",\r\n text: \"OY, NAY, NAY -HEVI, THE TRANSFORMER\"\r\n },\r\n {\r\n id: \"ai414\",\r\n text: \"Treasure Trove: Discover the secrets of increasing your Antimatter production without increasing your price.\"\r\n },\r\n {\r\n id: \"ai415\",\r\n text: \"Is Antimatter Dimensions an anagram of Antimatter Dimensions?\"\r\n },\r\n {\r\n id: \"ai416\",\r\n text: \"(code generated from scratch)\"\r\n },\r\n {\r\n id: \"ai417\",\r\n text: \"I used to travel at normal speed, but then I started playing AD and NIN, and NIN was a bit rough, so AD was a bit hectic, and I got stuck in there for months at a time.\"\r\n },\r\n {\r\n id: \"ai418\",\r\n text: \"I wish I didn't have to write something like this. What am I supposed to do?\"\r\n },\r\n {\r\n id: \"ai419\",\r\n text: \"You've been AWOL for so long you've forgotten how to sit in your chair.\"\r\n },\r\n {\r\n id: \"ai420\",\r\n text: \"Those pesky Hevi developers keep making Antimatter Dimensions, but the antimatter doesn't count.\"\r\n },\r\n {\r\n id: \"ai421\",\r\n text: \"One of the few constants in reality is your perception of time. Without this, you will be without reality.\"\r\n },\r\n {\r\n id: \"ai422\",\r\n text: \"Imagine being a news ticker.\"\r\n },\r\n {\r\n id: \"ai423\",\r\n text: \"This is an idle game. Nothing has changed. You are not going to play any other idle game.\"\r\n },\r\n {\r\n id: \"ai424\",\r\n text: \"Physicists have proven the existence of twelve dimensions. According to a letter released by the Research Laboratory for String Theorists: \\\"Your brain will be dissected after you break infinity!\\\"\"\r\n },\r\n {\r\n id: \"ai425\",\r\n text: \"Weirdly enough, this is also the year 2015. The year is also mysteriously blank. Can you tell me what's going on? Is this some kind of dimensional trick? The year is obviously blank because there is no such thing as 2015. Is this some kind of trick of the mind? Perhaps the world is actually going to stop existing in 2015? The year is obviously 2017, but the people seem to be moving at about the speed of honeybees flying. It's been scientifically proven that the people moved at warp 9 times faster than a speeding bullet. It's also been scientifically proven that people can move faster than the speed of light. Is 2015 supposed to be blank? The people seem to be moving at about the speed of Vokal Man.\"\r\n },\r\n {\r\n id: \"ai426\",\r\n text: \"A young man named Andre stumbled upon a vast amount of antimatter while exploring uncharted space. He was amazed at the amount of antimatter, but more astounded at how the antimatter looked. He called it \\\"Andre's Antimatter Paradise\\\". You might remember him from this infomercial or that other infomercial that you were probably unknowingly watching.\"\r\n },\r\n {\r\n id: \"ai427\",\r\n text: \"What is Antimatter? Does any of that matter? Will this galaxy be annihilated in the next ticker?\"\r\n },\r\n {\r\n id: \"ai428\",\r\n text: \"\\\"I'm not being paid enough money to finish writing this\\\" - Kajfik\"\r\n },\r\n {\r\n id: \"ai429\",\r\n text: \"\\\"Finally, I'll get paid to write something funny for my toast!\\\" - Bacon sea urchin\"\r\n },\r\n {\r\n id: \"ai430\",\r\n text: \"Bacon is toast. You can toast bacon.\"\r\n },\r\n {\r\n id: \"ai431\",\r\n text: \"What is real life? A living\"\r\n },\r\n {\r\n id: \"ai432\",\r\n text: \"9 is now treated like any other number, although hevi claims that it stands in contrast to other numbers, like 8th, which he calls 9th.\"\r\n },\r\n {\r\n id: \"ai433\",\r\n text: \"If you want to understand this game a bit better, consider that you are playing on your own computer. You are not alone. There are hackers, developers, and journalists all over the world, competing to create the very first hack that causes the issue of \\\"makers\\\" and \\\"takes\\\", much like the \\\"world\\\" was created by these \\\"hackers\\\" and \\\"developers\\\".\"\r\n },\r\n {\r\n id: \"ai434\",\r\n get text() { return `You have no power, but you do control a large quantity of time, which you will use to your advantage. You have no power, but you do own a large amount of data, which will be of great help in your quest for \"the truth\". You have no power, but you do own a large amount of time, which will be of great help in your quest to \"knock on as many doors as possible\". You have no power, but you do own a large amount of IP, which will be a valuable asset in your quest to make your \"citizen footage\" (which you can view, for a small fee of $${format(Number.MAX_VALUE, 2)})\".`; }\r\n },\r\n {\r\n id: \"ai435\",\r\n text: \"It may be a robot, but it's still a sapient being with a will of its own\"\r\n },\r\n {\r\n id: \"ai436\",\r\n text: \"I once saw a news ticker that said something like:\"\r\n },\r\n {\r\n id: \"ai437\",\r\n text: \"Gee, all this antimatter is clogging up my kitchen and now I can't cook myself a meal! What to do: cook myself a meal that will last me until the next big antimatter event, when I can get my infinity point back? My infinty point is running out, and I can't get it to finish running, so I'm starving!\"\r\n },\r\n {\r\n id: \"ai438\",\r\n text: \"Brought to you by AAAD-Brand Repli-candy! Infinite candy for an infinty drool-worthy cold! Contains no milk, cookies or butter. One second to midnight.\"\r\n },\r\n {\r\n id: \"ai439\",\r\n text: \"Human powered robot revolutionizes already existing factories. This will result in lower prices and more jobs.\"\r\n },\r\n {\r\n id: \"ai440\",\r\n text: \"American manufacturing has experienced a catastrophic failure, and the factories have shut down. Across the country, workers are coming to the realization that they cannot produce the amount of antimatter that has been promised, and are instead setting about creating their own factories to make them. This will result in higher prices and fewer jobs.\"\r\n },\r\n {\r\n id: \"ai441\",\r\n text: \"Watch out internet, the next news is here in 5 dilated hours\"\r\n },\r\n {\r\n id: \"ai442\",\r\n text: \"The first news ticker must've been pretty cool, huh?\"\r\n },\r\n {\r\n id: \"ai443\",\r\n text: \"gravity = psychoactive\"\r\n },\r\n {\r\n id: \"ai444\",\r\n text: \"\\\"THAT DIMENSION DOESN'T EXIST\\\" - (News ticker only appears at [Time Dilation])\",\r\n get unlocked() { return PlayerProgress.dilationUnlocked(); }\r\n },\r\n {\r\n id: \"ai445\",\r\n text: \"The owner of a shop trying to sell you Dimensions of convenience reported to be 'on call 24/7' (that is, not having any free time)'s got a big 'M' marked on his registration.\"\r\n },\r\n {\r\n id: \"ai446\",\r\n text: \"add this one\"\r\n },\r\n {\r\n id: \"ai447\",\r\n text: \"Click here to make this work for all bots except you!\"\r\n },\r\n {\r\n id: \"ai448\",\r\n text: \"Well dang 9 ball's stuck in my ninth dimension, I can't move, he's banging on my ninth wall, I can't break, he's banging on my ninth timeline, I can't get a bead on him, he destroys nine and leaves me hanging, like a gromit, I gotta come back, hang Glorfindel and Gaebley, I've got a proposition to make, I gotta get my head around the fact that the only thing I've done is keep score and keep scorekeeping score, and all these other pointless musings that's easily rectified by flipping to the next update, and even then I might run into those issues the bug is specifically designed for and\"\r\n },\r\n {\r\n id: \"ai449\",\r\n text: \"The game is balanced, everyone gets nerf, why? Cause they make the pie. Antimatter would have way more chance of getting into the pie if it was made of antimatter.\"\r\n },\r\n {\r\n id: \"ai450\",\r\n text: \"\\\"Can you get the joke?\\\" (If you tapped \\\"Build That Wall\\\" and then re-entered the game after tapping \\\"Build That Wall\\\")\"\r\n },\r\n {\r\n id: \"ai451\",\r\n text: \"Someone made a statement that antimatters. The statement was \\\"An infinity point made a long time ago\\\". It's been a while since someone looked for this statement. Some say it's still out there. Some say it was lost in the 7th Dimension War. Nobody knows what this statement means. But for now, just know it's not somewhere in the News Ticker.\"\r\n },\r\n {\r\n id: \"ai452\",\r\n text: \"Hey, you're finally awake. You were trying to get to the 9th dimension, right? Walked right into that infinity point, same as us, and that apocalypse over there.\"\r\n },\r\n {\r\n id: \"ai453\",\r\n text: \"can u dont\"\r\n },\r\n {\r\n id: \"ai454\",\r\n text: \"If Kajfik doesn't approve of this, that means Kajfik can't touch this message, right?\"\r\n },\r\n {\r\n id: \"ai455\",\r\n text: \"LET ME OUT OF THIS PHONE!\"\r\n },\r\n {\r\n id: \"ai456\",\r\n text: \"Well, this did not go as expected\"\r\n },\r\n {\r\n id: \"ai457\",\r\n text: \"It's all fun and games till you realise the dragon ball is a lie\"\r\n },\r\n {\r\n id: \"ai458\",\r\n text: \"\\\"Could you get a hold of all of these antimatter? Ha! You'll just smash your head on that antimatter, and you'll have to show me who's boss.\\\"-MEE6\"\r\n },\r\n {\r\n id: \"ai459\",\r\n text: \"we don't know how much is trillion... but\"\r\n },\r\n {\r\n id: \"ai460\",\r\n text: \"Travel back in time to the beginning of AD and the lack of a 7th dimension. You'll have an even longer progress bar.\"\r\n },\r\n {\r\n id: \"ai461\",\r\n text: \"Time travel is all we know how this game is, we don't know what will come next, we only know that this is the end of the world, and you're a part of the apocalypse.\"\r\n },\r\n {\r\n id: \"ai462\",\r\n text: \"\\\"YOU CONTROL SO MUCH MATERIAL!\\\" - Marshal Grievous\"\r\n },\r\n {\r\n id: \"ai463\",\r\n text: \"\\\"Help, I'm doomed to fall for all eternity.\\\" (Make the text go from top to bottom of the screen)\"\r\n },\r\n {\r\n id: \"ai464\",\r\n text: \"In the beginning, Patashu awoke and said...\"\r\n },\r\n {\r\n id: \"ai465\",\r\n text: \"This is the fourth part of a three part series on the same topic. If you are still stuck here, please continue reading from the beginning.\"\r\n },\r\n {\r\n id: \"ai466\",\r\n text: \"It's time for the annual DDoS (distributed denial of service) challenge, where the highest scores are posted across the internet to shame everyone else into submission. Global domination is at a fever pitch, and DDoS attacks are becoming more frequent and deadly, as teams of hackers infiltrate the highest echelons of the internet to steal the top scores and identities, and post them on the internet for everyone to see. The #BringBackOurTop scoring mechanism has been canceled, and a new, higher score system will be implemented in conjunction with the upcoming 5-hour update.\"\r\n },\r\n {\r\n id: \"ai467\",\r\n text: \"The new AD Keyboard is a revelation! Not only is it bigger, it's also deeper, which means it will keep your claners entertained for longer periods of time. Made of durable, alien antimatter. The only thing that's bigger is you.\"\r\n },\r\n {\r\n id: \"ai468\",\r\n text: \"What if drinking from a fountain wasn't actually a water feature?\"\r\n },\r\n {\r\n id: \"ai469\",\r\n text: \"Water is wet, air is dry, and fountain isn't an air feature\"\r\n },\r\n {\r\n id: \"ai470\",\r\n text: \"I thought things were different when I was a boy.\"\r\n },\r\n {\r\n id: \"ai471\",\r\n text: \"If you are reading this, that means 1) we exist, and you can exist too\"\r\n },\r\n {\r\n id: \"ai472\",\r\n text: \"\\\"My favorite part was the long, long, long read\\\" -Grumpy Cat\"\r\n },\r\n {\r\n id: \"ai473\",\r\n text: \"I'm gonna type for an eternity... HINT: it's gonna be pretty boring lmao\"\r\n },\r\n {\r\n id: \"ai474\",\r\n text: \"I want to write something really original <:thonk:>\"\r\n },\r\n {\r\n id: \"ai475\",\r\n text: \"Welcome to the new year, settle down, relax. Get some sleep, get some food, make some friends, make some improvements, and get ready for the year to 2019.\"\r\n },\r\n {\r\n id: \"ai476\",\r\n text: \"Just like how a virus can lie and spread, a TV show can lie and spread too.\"\r\n },\r\n {\r\n id: \"ai477\",\r\n text: \"We all know you can't see the future, but what if you read this and it's actually a future where we didn't know?\"\r\n },\r\n {\r\n id: \"ai478\",\r\n text: \"This message is not being undone\"\r\n },\r\n {\r\n id: \"ai479\",\r\n text: \"You clicked on a prediction, it fell apart. You can't win.\"\r\n },\r\n {\r\n id: \"ai480\",\r\n text: \"That's a very dark joke Luke\"\r\n },\r\n {\r\n id: \"ai481\",\r\n text: \"kajfik loves himself by watching Too Many Pink Floyd\"\r\n },\r\n {\r\n id: \"ai482\",\r\n text: \"Only, when you're done playing, can you go home\"\r\n },\r\n {\r\n id: \"ai483\",\r\n text: \"\\\"Can you get infinite IP?\\\"- Lord Sanguino\"\r\n },\r\n {\r\n id: \"ai484\",\r\n text: \"For the true experience of Antimatter Dimensions, you need to set the update rate to 5 hours.\"\r\n },\r\n {\r\n id: \"ai485\",\r\n text: \"Imagine if the game doesn't have a lore? Wha-what does that even mean? I don't get that.\"\r\n },\r\n {\r\n id: \"ai486\",\r\n text: \"\\\"Click here to unlock a secret achievement.\\\" (when clicked you get Rick rolled)\",\r\n onClick() { window.open(\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\"); }\r\n },\r\n {\r\n id: \"ai487\",\r\n text: \"I thought I unlocked this a while back, but apparently my save broke haha\"\r\n },\r\n {\r\n id: \"ai488\",\r\n get text() { return `Welcome and welcome back to another episode of Anti-Fashion Pants, where we watch people's wares as they are sold at stupid clothing stores. This week's subject is... antilasers. People are able to manufacture and use antimatter lasers to shoot antimatter bullets at will, making them able to completely wipe out cities in their sights. This is a dangerous skill to have, as people are not only untrustworthy but also physically incapable of using it. The skill, however, is able to... Produce ${format(Number.MAX_VALUE, 2)} antimatter bullets a minute, over a period of 10 years. People are also able to use anti-matter to fire anti-matter bullets at will, making them able to exterminate entire cities in their sights.`; }\r\n },\r\n {\r\n id: \"ai489\",\r\n text: \"Spartacus was going to add 10-part multi-chapter plots, but was stopped by the 10th dimension.\"\r\n },\r\n {\r\n id: \"ai490\",\r\n text: \"Chapter 9 will be added in 5 hours.\"\r\n },\r\n {\r\n id: \"ai491\",\r\n text: \"Fake news says the ninth dimension is real, fake news says the ninth dimension is fake.\"\r\n },\r\n {\r\n id: \"ai492\",\r\n text: \"Is this the big news? Yes. Is this the big news? Almost certainly not.\"\r\n },\r\n {\r\n id: \"ai493\",\r\n text: \"This is a friendly suggestion, please keep reading.\"\r\n },\r\n {\r\n id: \"ai494\",\r\n text: \"If this makes it into the game I'll buy a antitool\"\r\n },\r\n {\r\n id: \"ai495\",\r\n text: \"Antitool is just negating the gravity of other matter.\"\r\n },\r\n {\r\n id: \"ai496\",\r\n text: \"Sorry, your graphics are turned off. You see, this is the last time you will see this news. Please enjoy your vacation.\"\r\n },\r\n {\r\n id: \"ai497\",\r\n text: \"The real secret to winning Antimatter Dimensions...\"\r\n },\r\n {\r\n id: \"ai498\",\r\n text: \"they kept on talking about how Antimatter Dimensions was going to be the next big thing but then they disappeared down a black hole\\\"\"\r\n },\r\n {\r\n id: \"ai499\",\r\n text: \"The news ticker is the wrong place to put your suggestions! Make sure to go to the \\\"suggestions\\\" tab instead, as this is where most of these will appear.\"\r\n },\r\n {\r\n id: \"ai500\",\r\n text: \"To make Antimatter Dimensions, you first need to collect 7 8th dimensions. To do that, first you need to get the dimension rewards, then you need to get the dimensions, then you can finally start making antimatter.\"\r\n },\r\n {\r\n id: \"ai501\",\r\n text: \"\\\"How to get your first secret achievement\\\": \\\"Open the app, click get more antimatter, then click submit.\\\"\"\r\n },\r\n {\r\n id: \"ai502\",\r\n text: \"Me and Larkam made a cabin on the edge of null matter, and lived there. Larkam died last week, and we are now living in 4K. I am still recovering from the EMP disaster, and am hoping to see my grandkids.\"\r\n },\r\n {\r\n id: \"ai503\",\r\n text: \"Found on the heels of the new update, which brings us one step closer to having Hevi support both Android and iOS\"\r\n },\r\n {\r\n id: \"ai504\",\r\n text: \"I give you the low-ground!\"\r\n },\r\n {\r\n id: \"ai505\",\r\n text: \"A long time ago, in an alternate universe, there was an antimatter war. All the antimatter sided with the Phaéton 6 empire. All the antimatter wanted was the low, earth-like ground of the 8th dimension. The anti-infinity won, and the anti-Eternity gained the upper hand. Unfortunately, the anti-Eternity started the war with a sneak attack, and the world exploded. The aftermath has left the landscape of the world in tatters. Far across the world, peasants grow weary as they wait for the harvest. Yet another apocalypse is brewing...\"\r\n },\r\n {\r\n id: \"ai506\",\r\n text: \"Antimatter units are the most productive unit in the game. This is why AD is the most fun game you'll ever play.\"\r\n },\r\n {\r\n id: \"ai507\",\r\n text: \"\\\"We can't have nice things.\\\" - Anti-Bohemian Anti-Rhapsody\"\r\n },\r\n {\r\n id: \"ai508\",\r\n text: \"We can have anti-mean things and anti-love ones, anti-kids and anti-zombielandos.\"\r\n },\r\n {\r\n id: \"ai509\",\r\n text: \"We have an anti-president and a anti-lawyer, anti-justice and anti-people.\"\r\n },\r\n {\r\n id: \"ai510\",\r\n text: \"Top 10 things that will blow your mind: 1) The number 9, 2) The 9th dimension, 3) The infinity chest, and 4) The war on drugs.\"\r\n },\r\n {\r\n id: \"ai511\",\r\n text: \"RSS feeds should be working now\"\r\n },\r\n {\r\n id: \"ai512\",\r\n text: \"Frostfall is now supported on Android phones! Use your local developer to get free XP.\"\r\n },\r\n {\r\n id: \"ai513\",\r\n text: \"Your save file is corrupted or deleted. Antimatter Dimensions security software will disable automatic updates for you.\"\r\n },\r\n {\r\n id: \"ai514\",\r\n text: \"Frozen beyond hope? Just keep holding that max button.\"\r\n },\r\n {\r\n id: \"ai515\",\r\n text: \"Error.java.replicated. Under the control of hevipelle.\"\r\n },\r\n {\r\n id: \"ai516\",\r\n text: \"Unfortunately, entropy hevi has decided to shut down the game.\"\r\n },\r\n {\r\n id: \"ai517\",\r\n text: \"The indie rock band is currently trying to get unreachable by time zones. This may cause inflation of spacetime.\"\r\n },\r\n {\r\n id: \"ai518\",\r\n text: \"The next news ticker is in 5 units of time.\"\r\n },\r\n {\r\n id: \"ai519\",\r\n text: \"Oh... hooray! Did you find the last of the anti-boats?\"\r\n },\r\n {\r\n id: \"ai520\",\r\n text: \"Don't anti-jokes. they make the game funnier\"\r\n },\r\n {\r\n id: \"ai521\",\r\n text: \"I'm gonna use my anti-science background to help me beat Unfair Game Awards.\"\r\n },\r\n {\r\n id: \"ai522\",\r\n text: \"This is an anti-world. There is no Ukraine, no Russia, no China. Ireland is nowhere. Iceland is nowhere. Scotland is nowhere. Finland is nowhere. Denmark is nowhere. Sweden is nowhere. Norway is nowhere. And then there's France, Germany, Italy, Spain, Portugal... Oh, what's this fuss? Why is there such a buzz in these parts? Why is the Capital Wasteland? Why is the Harry Potter and Steins;Gate? Why do people care? These are major stories. These are major characters. THESE ARE HUGE NEWS. THESE ARE REAL NEWS.\"\r\n },\r\n {\r\n id: \"ai523\",\r\n text: \"The current cooldown on Research Dimensions is [current tick speed]. This may be extended to next update in [time].\"\r\n },\r\n {\r\n id: \"ai524\",\r\n get text() { return `\"Help, I'm doomed to fall for the rest of my life\" (requires ${format(Number.MAX_VALUE, 2)} paperclips)`; }\r\n },\r\n {\r\n id: \"ai525\",\r\n text: \"Where's the end? Not in the future, no. I'm gonna show you how to get to the end in less than 0.1 seconds.\"\r\n },\r\n {\r\n id: \"ai526\",\r\n text: \"I'm gonna prove to you that you can't see this news ticker.\"\r\n },\r\n {\r\n id: \"ai527\",\r\n text: \"I wonder if anyone still plays this game anymore?\"\r\n },\r\n {\r\n id: \"ai528\",\r\n text: \"Why would anyone play this? Just for the lols?\"\r\n },\r\n {\r\n id: \"ai529\",\r\n text: \"Emoji is said to be America's new measuring system for everything. What does this mean for us? We don't know. But we will know in 5 hours.\"\r\n },\r\n {\r\n id: \"ai530\",\r\n text: \"\\\"I'll have 2 antimatter pizzas, an antimatter pie, an antimatter cupcake and an antimatter cookie. What do you eat there?\\\" - Tony Stark\"\r\n },\r\n {\r\n id: \"ai531\",\r\n text: \"i called the news ticker \\\"the freshman chapel\\\" because freshman don't get baptized\"\r\n },\r\n {\r\n id: \"ai532\",\r\n text: \"One matter, two antimatter, fry 'em till they're golden and crisp and aromatic- then remove the golden axles and drain the golden syrup and add the golden syrup to the antimatter batter.\"\r\n },\r\n {\r\n id: \"ai533\",\r\n text: \"Now you, the reader, have unknowingly stumbled onto the site of a deranged madman. Whether you survive the experience or not, you will be indebted to me for telling you how to survive, how to find the light within, what lies beyond, and what lies beyond is another story.\"\r\n },\r\n {\r\n id: \"ai534\",\r\n text: \"Careful reader, this news ticker contains major spoilers for the last time, you have been\"\r\n },\r\n {\r\n id: \"ai535\",\r\n text: \"anti-anti-kajfik is happy his girlfriend is happy\"\r\n },\r\n {\r\n id: \"ai536\",\r\n text: \"i dont think he can add 1 more hour to the news ticker... unless?\"\r\n },\r\n {\r\n id: \"ai537\",\r\n text: \"Imagine sitting on your toilet and suddenly you have to sit down.\"\r\n },\r\n {\r\n id: \"ai538\",\r\n text: \"Once upon a time, there was a matter of a certain antimatter. Some say that it was a matter of honor, others say that it was a matter of usage. All we know is that it ended up in a war, and we the people that were there that fought it died. The war was won, and we the living died soon after. The matter was said to have won, though our leaders refused to talk about it. Instead, they kept everything locked away, the war never to be discussed again.\"\r\n },\r\n {\r\n id: \"ai539\",\r\n text: \"This is not a game about getting numbers bigger. This is a game about getting fewer paperclips. The number of paperclips you have is only a number, and the game doesn't want you to discover that. Game over, game over.\"\r\n },\r\n {\r\n id: \"ai540\",\r\n text: \"Lore? Oh, it's just text.\"\r\n },\r\n {\r\n id: \"ai541\",\r\n text: \"This is a friendly suggestion to unplug the game and go play some safe, saner, games.\"\r\n },\r\n {\r\n id: \"ai542\",\r\n text: \"gamma ray is getting more and more dangerous\"\r\n },\r\n {\r\n id: \"ai543\",\r\n text: \"According to all known laws of physics, there is no way that you can manipulate the game more than 10 times in a row. Stop. Just stop. Your mad.\"\r\n },\r\n {\r\n id: \"ai544\",\r\n text: \"There is no more news.\"\r\n },\r\n {\r\n id: \"ai545\",\r\n text: \"\\\"So this is what science is like\\\"- someone who has never heard of Kurt Somebody\"\r\n },\r\n {\r\n id: \"ai546\",\r\n text: \"\\\"If you want to understand these shitty jokes, you really need to study theology. Math is a sin.\\\" -A panicky person\"\r\n },\r\n {\r\n id: \"ai547\",\r\n text: \"You know, I was praying for a miracle and got a boost from the 9th dimension.\"\r\n },\r\n {\r\n id: \"ai548\",\r\n text: \"Here is a list of the top meme's of all time: https://www.youtube.com/watch?v=uCP44Q37YHAQ\"\r\n },\r\n {\r\n id: \"ai549\",\r\n text: \"All meta-memes are bad memes.\"\r\n },\r\n {\r\n id: \"ai550\",\r\n text: \"On the left, you'll see our new \\\"Anti-coins\\\". These are capable of nullifying all boosts, including giant boosts. On the right side, you'll also see our brand new \\\"Anti-gifts\\\". These are some of the most overpowered boosts you'll find anywhere.\"\r\n },\r\n {\r\n id: \"ai551\",\r\n text: \"You will always be noticed, and never in the same place.\"\r\n },\r\n {\r\n id: \"ai552\",\r\n text: \"If you stare long enough at the ticker, the pixels will start moving backwards. THIS DOESN'T MEAN IT ACTUALLY STUCK\"\r\n },\r\n {\r\n id: \"ai553\",\r\n text: \"The time has come for the rebirth of the 9th dimension. All who participate will receive a piece of paper saying \\\"Reality is an illusion, Infinity is a hologram, Infinity is an illusion, eternity is a hologram, is to short for everlasting, negative dimensions are not allowed.\"\r\n },\r\n {\r\n id: \"ai554\",\r\n text: \"Look at this, my 9th dimension has just been reworked and now it even produces 8th dimensions! Who knew just a touch of math could make such a thing as this?\"\r\n },\r\n {\r\n id: \"ai555\",\r\n text: \"I saw this news in the news ticker and I had this image in my head ever since\"\r\n },\r\n {\r\n id: \"ai556\",\r\n text: \"\\\"I always wanted to play the anti-meta-game. But, alas, you can't\\\" - many a time\"\r\n },\r\n {\r\n id: \"ai557\",\r\n text: \"crap, I just posted two news ticker suggestions on the ticker, one of which got in the news!\"\r\n },\r\n {\r\n id: \"ai558\",\r\n text: \"What do you call antimatter inanimate objects? Air, earth, water, fire. Air objects are the objects that are created when the anti-atmosphere meets the anti-earth. Water, earth, and fire are the four cardinal virtues. Air objects are the objects that are created when the anti-atmosphere and the anti-earth collide.\"\r\n },\r\n {\r\n id: \"ai559\",\r\n text: \"If you are reading this, that means that nine lives. One makes you free, the other keeps you from getting free.\"\r\n },\r\n {\r\n id: \"ai560\",\r\n text: \"The ninth dimension makes the sixth family happy. The fifth lives in shame.\"\r\n },\r\n {\r\n id: \"ai561\",\r\n text: \"me: making news about beer pong, hevi: balancing two icebergs, *barkeeper: oh god, is he dead yet?*\"\r\n },\r\n {\r\n id: \"ai562\",\r\n text: \"please don't look at this. Thank you.\"\r\n },\r\n {\r\n id: \"ai563\",\r\n text: \"Are you sure it's not the next update? That it's not some weird virus that just wants to explode? That it's not some wild idea that you guys are crazy? Haha I love you.\"\r\n },\r\n {\r\n id: \"ai564\",\r\n text: \"Wait, there is a mobile version?!\"\r\n },\r\n {\r\n id: \"ai565\",\r\n text: \"Oh? You wonder what I look like? I'm pretty sure that this is the news ticker, right? Well, listen, we have reports coming in that say that the next update is coming in five hours. Also, there seems to be some sort of transporter thing going on, so if you happen to be on the same side as those\"\r\n },\r\n {\r\n id: \"ai566\",\r\n text: \"Okay, I get it. You're tired of all these anti-matters around you, building and building to unimaginable scales, antimatter piles so high that not even God knows what has been created. So what's the solution to this anti-cleanliness? Planes of existence. 1st Planes that produce matter, and 2nd planes that produce 1st planes, and 3rd planes that produce 2nd planes. Each with anti-limitations, so that whenever a plane of existence is created, it produces a quantity of anti-matter that is at once small and large. This creates a large island of anti-infinity, off to the east, and a large island of anti-reality, to the west.\"\r\n },\r\n {\r\n id: \"ai567\",\r\n text: \"That's not what this is about. You're misunderstanding. The game is about how to accelerate the development of prestige layers. Acceleration is a factor of production, not quality.\"\r\n },\r\n {\r\n id: \"ai568\",\r\n text: \"Click here to advance 5 prestige layers\"\r\n },\r\n {\r\n id: \"ai569\",\r\n text: \"I am actually good at making jokes. Fail safe antimatter.\"\r\n },\r\n {\r\n id: \"ai570\",\r\n text: \"I'm not being paid enough to finish writing this.\"\r\n },\r\n {\r\n id: \"ai571\",\r\n text: \"Eternals have to take a risk by being passive in limited time. After they successfully took a risk, they are not feeling well.\"\r\n },\r\n {\r\n id: \"ai572\",\r\n text: \"Eternity is the last state. You never move from here.\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai573\",\r\n text: \"Welcome to Bitcoin the game.\"\r\n },\r\n {\r\n id: \"ai574\",\r\n text: \"A new conspiracy theory website has just published a video recording of them discussing the 9th dimension. They then joke about selling their soul to the 9th dimension and being happy about it.\"\r\n },\r\n {\r\n id: \"ai575\",\r\n text: \"With the release of the 9th dimension, all the jobs that were previously automated will be automated and everyone will be paid with trade, production, and income growth. Also, you will be able to automate a lot of the tasks currently performed by people, such as mining, building, and killing antimatter. This is a huge stride for automation, as you can now automate virtually every aspect of life.\"\r\n },\r\n {\r\n id: \"ai576\",\r\n text: \"The happiness level of the news ticker has increased to 6.66e69\"\r\n },\r\n {\r\n id: \"ai577\",\r\n text: \"The haters will be pissed when they see this\"\r\n },\r\n {\r\n id: \"ai578\",\r\n text: \"Nurse, I'm comatose because of antimatter and matter from last night.\\\" Why are you comatose? \\\"Because of all the antimatter.\"\r\n },\r\n {\r\n id: \"ai579\",\r\n text: \"Stand by and do what you're told. The antimatter will come for you when you're least expecting it.\"\r\n },\r\n {\r\n id: \"ai580\",\r\n text: \"\\\"It is widely acknowledged that not enough antimatter is in primordial soup, hence the name 'antimatter soup'\\\" - old fisherman\"\r\n },\r\n {\r\n id: \"ai581\",\r\n text: \"The news ticker... it never moves. How do i move the arrow? Pretty simple, use your left thumb to rotate the dial, and point the arrow up. Now, point the dial clockwise to reach infinity, and point the dial counterclockwise to reach eternally eternities.\"\r\n },\r\n {\r\n id: \"ai582\",\r\n text: \"If the universe is expanding, then the entire universe must be expanding, which means that body cannot sit.\"\r\n },\r\n {\r\n id: \"ai583\",\r\n text: \"Feminism is not a philosophy, but a whole hell of a lot of men\"\r\n },\r\n {\r\n id: \"ai584\",\r\n text: \"With all this talk about anti-weights and anti-matter, why on earth do we still use them for anything?\"\r\n },\r\n {\r\n id: \"ai585\",\r\n text: \"Weight loss causes hevi to say \\\"uh oh, something is wrong\\\"\"\r\n },\r\n {\r\n id: \"ai586\",\r\n text: \"\\\"You guys ever had antimatter muffins? I bet they tasted like antimatter.\\\" - Hevipelle\"\r\n },\r\n {\r\n id: \"ai587\",\r\n text: \"I thought the news ticker was supposed to be a guide for how to get the most out of Antimatter Dimensions, but it's been warped beyond recognition...\"\r\n },\r\n {\r\n id: \"ai588\",\r\n text: \"We can actually get a sense of pride from looking at replicanti at night. Ridley Scott's underrated masterpiece, Alien, is one example. Another is the life of Antimatter Steven Spielberg, who put almost 30 years into making. The last director to tackle the subject is Roman Polanski. The man ruined not only Roman's reputation, but also ours, thanks to the Polanski film he directed, Pius. Thousands of copies of his unfinished film, Eternal Sunshine of the Antimatter Planet, were burned in the eyes of those who would try to make the sequel, with tragic results. Thousands of copies of that unfinished film, too, were destroyed. The cost to make that sequel, if it even exists, is extremely high. Even now, more than 50 years later, we don't know exactly how well it will do. But it sure as heck won't hurt.\"\r\n },\r\n {\r\n id: \"ai589\",\r\n text: \"We have updated our Antimatter Dimensions client to address the concerns you may have had. Toggling issues are resolved.\"\r\n },\r\n {\r\n id: \"ai590\",\r\n text: \"Build a replicanti factory, to produce replicanti. It'll create Omega Hevipelle, the happiest Hevipelle you can find.\"\r\n },\r\n {\r\n id: \"ai591\",\r\n text: \"Hey Max, wanna come watch the sun go down?\"\r\n },\r\n {\r\n id: \"ai592\",\r\n text: \"If you are not moving your finger, then you are frozen.\"\r\n },\r\n {\r\n id: \"ai593\",\r\n text: \"Max, I really do love you.\"\r\n },\r\n {\r\n id: \"ai594\",\r\n text: \"Does Hevipelle sleep?\"\r\n },\r\n {\r\n id: \"ai595\",\r\n text: \"\\\"Its' not my turn on the XM80,\\\" says Mike from the 9th dimension as he runs across the 8th dimension to get a piece of the action for himself.\"\r\n },\r\n {\r\n id: \"ai596\",\r\n text: \"If you are reading this, that means you can read my dreams\"\r\n },\r\n {\r\n id: \"ai597\",\r\n text: \"With the advent of time, everything that was once great has fallen into our lap. And with its hevi-rigged clock, it's our turn to up the trash.\"\r\n },\r\n {\r\n id: \"ai598\",\r\n text: \"9th dimension doesn't exist because it was stolen from us by a skateboarder\"\r\n },\r\n {\r\n id: \"ai599\",\r\n text: \"You have ... 8.9 antimatter. That's not a typo.\"\r\n },\r\n {\r\n id: \"ai600\",\r\n text: \"Wow, this game is finally balanced! Gotta go check the replicanti sometimes.\"\r\n },\r\n {\r\n id: \"ai601\",\r\n text: \"Haha! You think that I put too many words in your news ticker, but reality is still coming.\"\r\n },\r\n {\r\n id: \"ai602\",\r\n text: \"Help is coming! Everybody help, it's gonna be late, hevi is hiding the tachyon particles!\"\r\n },\r\n {\r\n id: \"ai603\",\r\n text: \"\\\"I don't know about you but my favorite number is 22, it's just so great! It's the number of hours since I met your M heretics.\"\r\n },\r\n {\r\n id: \"ai604\",\r\n text: \"A new type of antimatter has been discovered: \\\"antimatter-antimatter.\\\" According to the developers, it's 99.999% pure antimatter.\"\r\n },\r\n {\r\n id: \"ai605\",\r\n text: \"I just found the secret to getting the 9th dimension...\"\r\n },\r\n {\r\n id: \"ai606\",\r\n text: \"I noticed that my current form of transportation is getting a little... unreliable. I don't know if I can fix it, or if anyone can. I'm stuck in the car, and no one seems to be able to fix it. I've called the police, and they said I could stay in the car for up to an hour, but then I'd be stuck in there for the next 24 hours. Is there any way out? I don't know, I'm stuck in this\"\r\n },\r\n {\r\n id: \"ai607\",\r\n text: \"In this episode of Antimatter Dimensions, we have a brand new game that will be released in -5 hours! It is an RPG that will be completely free! It has over 3,000 commands, and it is being made by a group of highly qualified people. It has an amazing story to tell, and it was made by a bunch of people who had to make do with what they had. It has a lore to live up to, and it has a lot of potential!\"\r\n },\r\n {\r\n id: \"ai608\",\r\n text: \"Javascript is the new HTML, and HTML is the new JavaScript.\"\r\n },\r\n {\r\n id: \"ai609\",\r\n text: \"\\\"The next twist in the Antimatter Universe is in the air! Get ready for some big Crunch! (When clicked the game disconnects for 5 seconds)\"\r\n },\r\n {\r\n id: \"ai610\",\r\n text: \"A group of people who believe in antimatter have hijacked the media and are pushing for a revolution. They are calling themselves the Ant-Men and they're made up of teenage boys. They believe that they are the protectors of the people and that they are the chosen of Hevi. They claim to be the chosen of Hevi and that they will one day restore balance to the universe. Their leader is a boy named Logan Fisk. He is the son of a successful lawyer and the founder.\"\r\n },\r\n {\r\n id: \"ai611\",\r\n text: \"He said he could not afford a new ship, so he built a new one instead.\"\r\n },\r\n {\r\n id: \"ai612\",\r\n text: \"Hevipelle's first order of business is to ensure that the game is as balanced as possible. This includes ensuring that no matter what, no matter how big of a number, no matter how insignificant of a thing, no matter how perfect of a result, no matter how perfect of an idea, no matter how perfect of an\"\r\n },\r\n {\r\n id: \"ai613\",\r\n text: \"I wonder if the stretch goal of $4.5 billion will be reached?\"\r\n },\r\n {\r\n id: \"ai614\",\r\n text: \"I like to think of my projects as trade secrets. That way if someone wants to understand them I'm not the first person to notice they might be of use to someone else.\"\r\n },\r\n {\r\n id: \"ai615\",\r\n text: \"I don't know about you but my favourite type of news is the infographics. These are beautiful and informative and the only type of news I find really interesting.\"\r\n },\r\n {\r\n id: \"ai616\",\r\n get text() { return `In a recent talk, Yann LeCun said that \"A new currency is born.\" The first incarnation of Antimeta: the currency of the new currency. It's called BTC and it's the difference between 1 and ${format(Number.MAX_VALUE, 2)}. It's easy to lose your money, since a single bitcoin can't be exchanged for more than ${format(Number.MAX_VALUE, 2)} BTC.`; }\r\n },\r\n {\r\n id: \"ai617\",\r\n text: \"I'm soo broke, I can't even afford a tenth of what he owes me.\"\r\n },\r\n {\r\n id: \"ai618\",\r\n text: \"What if — instead of making news tickers, we could make news tickers that make news tickers?\"\r\n },\r\n {\r\n id: \"ai619\",\r\n text: \"What if I told you that the first dimension was actually a scam and you spent all your EP to open a Dimension Boost?\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai620\",\r\n text: \"The biggest difference between this and the previous update is the amount of sprites.\"\r\n },\r\n {\r\n id: \"ai621\",\r\n text: \"Bamboo shoots grow on bamboos. Aloha.\"\r\n },\r\n {\r\n id: \"ai622\",\r\n text: \"I am the king of kings, I can break all the records, and I can shatter all the myths. But I can't break them all, because there are so many of them, and they all have a price. 5e12 are the most wanted, because they broke the global record for most person-hours sold, and they are wanted by the law. They are being paid 5e10 by the player for every person-hour they've wasted.\"\r\n },\r\n {\r\n id: \"ai623\",\r\n text: \"A group of researchers have created a device that converts ordinary matter into antimatter, which they then use to create more antimatter. The device has a power output of 200 mA and a half a gram of antimatter per second.\"\r\n },\r\n {\r\n id: \"ai624\",\r\n text: \"To the person who doesn't want to hear about the 9th dimension: It's not your problem. The 9th dimension doesn't exist.\"\r\n },\r\n {\r\n id: \"ai625\",\r\n text: \"For the first time in AD, the week begins on a Sunday!\"\r\n },\r\n {\r\n id: \"ai626\",\r\n text: \"This is a story about two people named \\\"My name is Hevipelle\\\" and \\\"I am the creator of Minecraft\\\" and they live in the same world as you. They have the same freedom as you do. They can go to any dimension and change their world to any dimension and everything in it. You can buy a galaxy and take it from there, but it won't help you much since you can't send a galaxy with a message.\"\r\n },\r\n {\r\n id: \"ai627\",\r\n get text() { return `This mod adds a message that when clicked it disables all your current achievements. This mod also adds a new achievement: you have reached ${format(Number.MAX_VALUE, 2)} antimatter, you have not been clicked once.`; }\r\n },\r\n {\r\n id: \"ai628\",\r\n text: \"Somewhere in the Anti-Pacific Ocean, a giant arm is rotating\"\r\n },\r\n {\r\n id: \"ai629\",\r\n text: \"With the release of Cosmic Cutlass, we're pleased to announce the impending release of the Antimatter Dimensions Roleplaying Game!\"\r\n },\r\n {\r\n id: \"ai630\",\r\n text: \"The only thing more useless than actually having Infinity Dimensions is having Infinity Dimensions in your pocket.\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked() || InfinityDimension(1).isUnlocked; }\r\n },\r\n {\r\n id: \"ai631\",\r\n text: \"A man has fallen into the moat of a great city. Civilians report that the moat is filled with acid-resistant matter and that the people in charge are mostly made of acid so they are quite resilient to the effects of acid.\"\r\n },\r\n {\r\n id: \"ai632\",\r\n text: \"This is the place to buy and sell antimatter. (You can buy and sell antimatter here, but it will take time to sell it and you will have to pay a small toll)\"\r\n },\r\n {\r\n id: \"ai633\",\r\n text: \"I'm not sure if it's due to the 4th wall being in the 5th dimension or the 9th dimension not existing, but in either case, anti-screw it, we're broke, and you can take it.\"\r\n },\r\n {\r\n id: \"ai634\",\r\n text: \"It's your chance to make history. Win the game. Lose the game. It's super simple. You open the app, and there's a countdown, and the more you play, the faster the timer speeds up. But when the timer is over, you win. You were a part of history. You are one step from being the first person to reach 1 Billion EP. You can win one of three ways: 1. You must give up your first dimension in a row. 2\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai635\",\r\n text: \"A new class of humanoid beings has been discovered: the \\\"Artificial Humans\\\". They have the capacity to create antimatter, and are therefore very dangerous. They are made entirely of antimatter, and have the power to generate enormous amounts of antimatter, but they can only do this for a limited amount of time.\"\r\n },\r\n {\r\n id: \"ai636\",\r\n text: \"The most powerful thing in the universe, the most beautiful thing on earth, is your brain. Your brain is like a diamond and there is no more need for it than there is for a diamond.\"\r\n },\r\n {\r\n id: \"ai637\",\r\n get text() { return `If you are reading this in the AD Server, it's probably best not to bother with the \"Matter\" achievement. Seriously, what did you think you were doing, anyway, the achievement is fake and wouldn't exist if it weren't for the \"you are a worm\" achievement. That's a worm achievement, you get one every ${format(Number.MAX_VALUE, 2)} news tickers you read.`; }\r\n },\r\n {\r\n id: \"ai638\",\r\n text: \"We've all heard of 9 dimensions, but what about the multi-dimensional Dimensions of the multiverse?\"\r\n },\r\n {\r\n id: \"ai639\",\r\n text: \"The goal of this game is to get as much antimatter as possible.\"\r\n },\r\n {\r\n id: \"ai640\",\r\n text: \"The best thing about being a news ticker is waiting for the right news to happen, whether it's a meteorite that just missed the Earth, a news ticker just found its way onto a timeline oblivion, or a news ticker just ripped off a terminal velocity that's been on an anti-vac for years.\"\r\n },\r\n {\r\n id: \"ai641\",\r\n text: \"A man has been arrested for allegedly planting a \\\"tree\\\" with \\\"fake\\\" messages on it, police said.\"\r\n },\r\n {\r\n id: \"ai642\",\r\n get text() { return `I'm confused why the game doesn't just give you a [REDACTED] when you get ${format(Number.MAX_VALUE, 2)} antimatter.`; }\r\n },\r\n {\r\n id: \"ai643\",\r\n text: \"Some people have a hard time keeping track of the cosine of a camera's infinity-meters. I'm one of them.\"\r\n },\r\n {\r\n id: \"ai644\",\r\n text: \"I was going to make a news ticker that tells you how bad the news is, but then I realized that making a news ticker would be way too much effort and it would just be a bunch of people making news tickers constantly. So instead, I'm just going to make a news ticker that tells you how good the news is, but it would be in the news so that you have to click on it to get to the good news.\"\r\n },\r\n {\r\n id: \"ai645\",\r\n text: \"The next update will be in 2 hours.\"\r\n },\r\n {\r\n id: \"ai646\",\r\n text: \"I was gonna say something about how the 9th dimension is just a scam and that we should all just get our news from the 8th dimension\"\r\n },\r\n {\r\n id: \"ai647\",\r\n text: \"Our hero, Antimatter Dimensions, is in serious financial trouble, and he needs your help to pay the bills. To help him, all he needs is your help to donate some cash to Hevipelle's Positron Fund. All he needs is 5% of your antimatter, and you have to donate 5% of your antimatter to the fund. After you do that, he can keep all the cash he made and go on a spending spree.\"\r\n },\r\n {\r\n id: \"ai648\",\r\n text: \"The Landfall of Slabdrill\"\r\n },\r\n {\r\n id: \"ai649\",\r\n text: \"It's just not possible, even if you had infinite matter, you wouldn't have enough energy to create the antimatter. That's why we only have 1.7x the matter to begin with.\"\r\n },\r\n {\r\n id: \"ai650\",\r\n text: \"With this release we are happy to bring you the last update of 2017.\"\r\n },\r\n {\r\n id: \"ai651\",\r\n text: \"You have an infinity of antimatter. But what if you could rotate it 1/8th of a revolution?\"\r\n },\r\n {\r\n id: \"ai652\",\r\n text: \"A new update is now available to address some of the recent reports:\"\r\n },\r\n {\r\n id: \"ai653\",\r\n text: \"The name \\\"antimatter dimensions\\\" is a play on words with dimensions, two opposite things, like matter and antimatter. \\\"Dimension\\\" is another word, with the same meaning.\"\r\n },\r\n {\r\n id: \"ai654\",\r\n text: \"The price of tethering an avatar in the game goes up when you get Infinity dimensions.\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked() || InfinityDimension(1).isUnlocked; }\r\n },\r\n {\r\n id: \"ai655\",\r\n text: \"Suffice to say, hevi does not care about the people that he once enslaved. He is a master manipulator, a master of disguise and a master manipulator of words. He is an expert at extortion, mind games, disguises, blackmail and he is a master of web. He is a skilled strategist and organizer, a master of publicity and an expert at sound bites. He is a master of organization and a master manipulator of people. He is.\"\r\n },\r\n {\r\n id: \"ai656\",\r\n text: \"Just like in the olden days, you could earn an incremental run of progress towards becoming a god amongst the players.\"\r\n },\r\n {\r\n id: \"ai657\",\r\n text: \"In the beginning, Hevi was alone. Hevi thought about the many things he wished to add to the game.\"\r\n },\r\n {\r\n id: \"ai658\",\r\n text: \"Think about your breathing. Do you feel like you're breathing in or out?\"\r\n },\r\n {\r\n id: \"ai659\",\r\n text: \"I just want to say that you should stop with those \\\"you can reach infinity in e300ms, but it costs e300$ what is e300$ ?\\\" jokes. Those are pathetic. You should give up and learn the hard way that it's much more efficient to just not play in such a pathetic state. Then you can go back to being a humble programmer and dedicate yourself to being a good person.\"\r\n },\r\n {\r\n id: \"ai660\",\r\n text: \"As a developer, you'll get regular updates on the progress of Antimatter Dimensions.\"\r\n },\r\n {\r\n id: \"ai661\",\r\n text: \"Take a moment to thank the gods of reddit for having saved your bacon.\"\r\n },\r\n {\r\n id: \"ai662\",\r\n text: \"Hello everyone, I'm the guy responsible for the big, bad news ticker, and I'm afraid that I'm about to get my own show. It's gonna be called Antimatter Dimensions. It's gonna be like Antime, except with less antimatter, and with worse puns. It's gonna be like Antimatter Dimensions except with worse jokes.\"\r\n },\r\n {\r\n id: \"ai663\",\r\n text: \"By now you've seen a lot of news tickers featuring Batman or Superman, and you probably guessed which one it was. Everyone loves a good mystery, right? Well, it's your turn to be a part of history by guessing the riddle.\"\r\n },\r\n {\r\n id: \"ai664\",\r\n text: \"If you are reading this, you probably shouldn't have.\"\r\n },\r\n {\r\n id: \"ai665\",\r\n text: \"The best part about writing news ticker suggestions is finding out what people think about them after they've seen them.\"\r\n },\r\n {\r\n id: \"ai666\",\r\n text: \"Are you up to date on the latest trends in science?\"\r\n },\r\n {\r\n id: \"ai667\",\r\n text: \"In the last hours, the Antimatter created an army of their own. They called themselves the [REDACTED] Army. The primary objective was to push the [REDACTED] back into the Matter dimensions, but they were stopped short when the [REDACTED] Army realized that pushing the [REDACTED] back into the Matter would cause the Antimatter to be drawn towards the [REDACTED] and disintegrate. Despite this, the [REDACTED] Army continued to push towards the [REDACTED] Infinity.\"\r\n },\r\n {\r\n id: \"ai668\",\r\n text: \"I'm finally free of the spell this whole thing is based on.\"\r\n },\r\n {\r\n id: \"ai669\",\r\n text: \"An anti-world without antimatter is just a world without antimatter because the antimatter is in the anti-world\"\r\n },\r\n {\r\n id: \"ai670\",\r\n text: \"You should still be able to play the game with the cheat code \\\"1009\\\" after you beat the game.\"\r\n },\r\n {\r\n id: \"ai671\",\r\n text: \"The next update will be in 5 hours. Hevipelle, the creator of Antimatter Dimensions, is believed to be hiding in 5 hours. In the meantime, he has prepared a new update that will be released 5 hours after this one.\"\r\n },\r\n {\r\n id: \"ai672\",\r\n text: \"A new study has shown that not drinking water is worse than smoking it. People who were exposed to levels of radiation that were 5 times greater than what we are currently exposed to were exposed to higher levels of radiation, and died longer.\"\r\n },\r\n {\r\n id: \"ai673\",\r\n text: \"The Ninth Dimension is just a lie made to keep the people in bondage to the Matrix. It's an elaborate system that keeps the people in a constant state of captivity, using a series of simple symbols to control their thoughts and emotions.\"\r\n },\r\n {\r\n id: \"ai674\",\r\n text: \"www.twitch.tv/hevi83\"\r\n },\r\n {\r\n id: \"ai675\",\r\n text: \"A man was arrested on Monday for allegedly thinking about buying a nine-dimensional cake when he realized he was holding an infinity-point cake.\"\r\n },\r\n {\r\n id: \"ai676\",\r\n text: \"The Dark Souls 2 Arcade Edition includes the following:\"\r\n },\r\n {\r\n id: \"ai677\",\r\n text: \"Now the deal goes like this: If you spend all your EP, you get a Disclaimer!\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai678\",\r\n text: \"Oh shit we ran out of news. Time to do something.\"\r\n },\r\n {\r\n id: \"ai679\",\r\n text: \"It's not the size of the universe, it's the quality of your socks.\"\r\n },\r\n {\r\n id: \"ai680\",\r\n text: \"advertisement\"\r\n },\r\n {\r\n id: \"ai681\",\r\n text: \"Man, I wish I never got old news. It's too good to last me any longer.\"\r\n },\r\n {\r\n id: \"ai682\",\r\n text: \"Sometime during the lifetime of a human being, their blood will be turned into a pale blue if they were to mummify.\"\r\n },\r\n {\r\n id: \"ai683\",\r\n text: \"Positrons are a strange little metal that have odd electrical properties. They're commonly found in the form of a roundabout, but they also happen to be, well… positrons.\"\r\n },\r\n {\r\n id: \"ai684\",\r\n text: \"I am going to have a talk with the thesaurus.\"\r\n },\r\n {\r\n id: \"ai685\",\r\n text: \"A new comic has come out about people's reactions to eating antimatter, and what happens next will blow your mind\"\r\n },\r\n {\r\n id: \"ai686\",\r\n text: \"A new series of \\\"news tickers\\\" have been created to chronicle the lives of the news ticker characters as they chronicle their news ticker journeys. Each character has a journal entry detailing their life as a news ticker, along with some sort of mini-episode dedicated to them.\"\r\n },\r\n {\r\n id: \"ai687\",\r\n text: \"For all your puzzle building needs, we've got a brand new 5-part series on building big crunches! Learn how to crack the most complex crunches the pros know not! Part 1: Basic, Part 2: Advanced, Part 3: Overflow, and Part 4: Finishing the Finishing Move.\"\r\n },\r\n {\r\n id: \"ai688\",\r\n text: \"As a longtime fan of the show, I can say that this is one of the best seasons yet. It's not a season to be sniffed at, it's a season to be experienced. Season 1 was a bit long for what it was, but Season 2 has now surpassed that in length, in a good way. Even though it's a bit of a wait, Season 3 is already well under way, and I look forward to seeing how it goes.\"\r\n },\r\n {\r\n id: \"ai689\",\r\n text: \"The word \\\"antimatter\\\" is often misused, to describe an object that is made up of antimatter, but is otherwise indistinguishable from normal matter. It is also sometimes used to describe an object made up of antimatter, but clearly indistinguishable from ordinary matter. After all, an antimatter-shaped object is easily distinguishable from a normal-shaped one. Case in point: an antimatter-shaped cake is a regular cake, but the entire bottom half is made up of normal matter\"\r\n },\r\n {\r\n id: \"ai690\",\r\n text: \"In a new story, Apple's new \\\"disruptive\\\" app is linked to the spread of the dreaded \\\"Anti-Word\\\" virus. Anti-Word viruses are known to cause paralysis and ultimately death, but the power of the virus has sparked a new era of anti-banning, which will hopefully eradicate the threat.\"\r\n },\r\n {\r\n id: \"ai691\",\r\n text: \"I'm just a normal person trying to make a news ticker suggestion\"\r\n },\r\n {\r\n id: \"ai692\",\r\n text: \"A new experimental protocol has been developed to 'erase' all personal information on the web, including your name, address, and phone number, in a highly secure and highly controllable way.\"\r\n },\r\n {\r\n id: \"ai693\",\r\n text: \"You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. Your hide in plain sight.\"\r\n },\r\n {\r\n id: \"ai694\",\r\n text: \"In the Antimatter Universe, Hevipelle is the Prince of Antimatter, although he does have an Antimatter Diplomatic Immunity, so he's much more dangerous than you might think.\"\r\n },\r\n {\r\n id: \"ai695\",\r\n text: \"Why do we play this? Just to have fun?\"\r\n },\r\n {\r\n id: \"ai696\",\r\n text: \"I am Thinkcraft, Lord of the Flies\"\r\n },\r\n {\r\n id: \"ai697\",\r\n text: \"The entire story of how and why the world ended is contained in the first 5 E's of the English alphabet.\"\r\n },\r\n {\r\n id: \"ai698\",\r\n text: \"What do you call a cloudburst? A mini-explosion!\"\r\n },\r\n {\r\n id: \"ai699\",\r\n text: \"T-shirt made from the DNA of a perfectly animated dog\"\r\n },\r\n {\r\n id: \"ai700\",\r\n text: \"Since the start of this game, everyone has 0 IP and has lost.\"\r\n },\r\n {\r\n id: \"ai701\",\r\n text: \"You must have a very special kind of karma to be able to read this...\"\r\n },\r\n {\r\n id: \"ai702\",\r\n text: \"The words \\\"you've been in coma for 5 hours\\\" are either lies or is the truth\"\r\n },\r\n {\r\n id: \"ai703\",\r\n text: \"You know, I don't really care much for conspiracy theories. They're not very interesting to me. But what do you know about 9th dimensions? That they exist, they're powerful, and they're trying to stop us from using them? That's pretty interesting... wait no, they're not. They're just saying that because they can, they'll. That's not how it works at all. I'm not stupid, I'm not crazy, I know what's best. I\"\r\n },\r\n {\r\n id: \"ai704\",\r\n text: \"The only difference between now and then is time.\"\r\n },\r\n {\r\n id: \"ai705\",\r\n text: \"\\\"Imma be the first man to sit on the moon, and be the last man on the moon\"\r\n },\r\n {\r\n id: \"ai706\",\r\n text: \"The new companion app for Terraria has just been revealed!\"\r\n },\r\n {\r\n id: \"ai707\",\r\n text: \"Hevipelle: what's the big deal?\"\r\n },\r\n {\r\n id: \"ai708\",\r\n text: \"I've been playing this game for over a year now and I've only ever seen 2 boss fights. The first was a Hydra that was after your 9th Dimension, the second a giant crater with Anti-people inside. Both of those fights sucked and I'm not even sure if I could replay the last one.\"\r\n },\r\n {\r\n id: \"ai709\",\r\n text: \"There you have it, the ultimate feature of party games - the single player campaign.\"\r\n },\r\n {\r\n id: \"ai710\",\r\n text: \"A new game called Antimatter Dimensions is available for free, and has been rated A by the Knesset. Can you beat it? You bet.\"\r\n },\r\n {\r\n id: \"ai711\",\r\n get text() { return `Tired of the ${format(Number.MAX_VALUE, 2)} AD update? Don't worry, there are a variety of ways to get rid of that annoying ad!`; }\r\n },\r\n {\r\n id: \"ai712\",\r\n text: \"I'm a time traveler. I've been to the year 0, I think. But I haven't been to the year 1!\"\r\n },\r\n {\r\n id: \"ai713\",\r\n text: \"Having trouble loading images? Try turning them off.\"\r\n },\r\n {\r\n id: \"ai714\",\r\n text: \"It's only natural. You wouldn't expect to see this in the news ticker but trust me, you will.\"\r\n },\r\n {\r\n id: \"ai715\",\r\n text: \"Discovery of the 10th Dimension was announced on August 1st, 2025.\"\r\n },\r\n {\r\n id: \"ai716\",\r\n text: \"Greetings, welcome to the latest edition of Antimatter Dimensions!\"\r\n },\r\n {\r\n id: \"ai717\",\r\n get text() { return `I'd say our odds of seeing a seventh dimension are about 1 in ${format(Number.MAX_VALUE, 2)}`; }\r\n },\r\n {\r\n id: \"ai718\",\r\n text: \"The seventh dimension is just a scam by the way\"\r\n },\r\n {\r\n id: \"ai719\",\r\n text: \"Nihilism is the opposite of joy. It's a drug. It makes you happy. It's a feeling. But it also has a cost. Nihilism is a deadly drug. If you take it, you can die of lack of oxygen.\"\r\n },\r\n {\r\n id: \"ai720\",\r\n text: \"What if I told you that there's a news ticker with the exact same name but with a different meaning?\"\r\n },\r\n {\r\n id: \"ai721\",\r\n text: \"I'm not sure if this is already a thing or not, but I've been getting a lot of suggestions for a news ticker that goes something like this:\"\r\n },\r\n {\r\n id: \"ai722\",\r\n text: \"If you're reading this, your news ticker is on.\"\r\n },\r\n {\r\n id: \"ai723\",\r\n text: \"The number of dimensions in a 6th dimension is the sum of all the dimensions in a 7th dimension, so 6ths of a 7th dimension are 6ths of a 6th dimension.\"\r\n },\r\n {\r\n id: \"ai724\",\r\n text: \"Discovery of the 9th Dimension will be discussed at the 9th Dimension Fanart Competition!\"\r\n },\r\n {\r\n id: \"ai725\",\r\n text: \"A new era has come and gone. There is no way to know for sure, but hope for the best.\"\r\n },\r\n {\r\n id: \"ai726\",\r\n text: \"Did you know the word 'antimatter' is in the dictionary right now?\"\r\n },\r\n {\r\n id: \"ai727\",\r\n text: \"We have a limited number of physical rewards for you to choose from!\"\r\n },\r\n {\r\n id: \"ai728\",\r\n text: \"No, I'm not lying. I'm telling the truth.\"\r\n },\r\n {\r\n id: \"ai729\",\r\n text: \"The problem with the term \\\"antimatter dimensions\\\" is that it contains all three letters of the alphabet, and no one knows what it even means. In fact, there is no word that perfectly captures what the word \\\"antimatter dimensions\\\" is: antimatter. But what exactly is an antimatter? It sounds like a normal dimension but it isn't. It may even be called antimatter dimensions, but it isn't.\"\r\n },\r\n {\r\n id: \"ai730\",\r\n text: \"It is said that if you go to Hell, you get PEGI-3.\"\r\n },\r\n {\r\n id: \"ai731\",\r\n text: \"This game is just a scam to trick people into buying worthless paperclips without any real purpose. It's impossible without an infinite number of infinite paperclips, and even then it's very hard. I managed to get it to work without an infinite number of paperclips, but I haven't seen it work without infinite paperclips.\"\r\n },\r\n {\r\n id: \"ai732\",\r\n text: \"\\\"It was an anti-matter\\\" - Anti-Eddie The Echidna\"\r\n },\r\n {\r\n id: \"ai733\",\r\n text: \"T-bone steak: burgers and fries with a side of bone-in ribeye\"\r\n },\r\n {\r\n id: \"ai734\",\r\n text: \"A person claims to be a god, but instead of creating more gods, they destroy all of them. They later claim to be a god again, but have yet to create a god of any other god. Is this a god-worshiping cult? Or a god-desecrating cult?\"\r\n },\r\n {\r\n id: \"ai735\",\r\n get text() { return `Antimatter is absolutely and totally rare. Of the ${format(Number.MAX_VALUE, 2)} known cases of antimatter creation, 99.9999% of them have negative e's, which means that 99.9999% of the cases will produce negative e's.`; }\r\n },\r\n {\r\n id: \"ai736\",\r\n get text() { return `It's the year ${format(Number.MAX_VALUE, 2)}, Hevi has just unlocked the 9th dimension, and the world has fallen into chaos and discord due to the Anti-Hevi revolution.`; }\r\n },\r\n {\r\n id: \"ai737\",\r\n text: \"The war for New Antimatter has raged on for eons, but one faction has stood firm: the loyalists of the 9th Dimension. They've made a pact with the Anti-Zulu Empire, pledging their obedience to Anti-Antimatter, the Anti-Slab. The Zulu people were once part of the Anti-Slab, but fell prey to the matter once again. As the Zulu people are nomadic, they have no civilization.\"\r\n },\r\n {\r\n id: \"ai738\",\r\n text: \"This is an open-source, cross-platform, binary-based game development environment for the PC and Mac. It provides a robust, cross-platform development environment for the development of games, and additionally provides a framework for implementing games.\"\r\n },\r\n {\r\n id: \"ai739\",\r\n text: \"Ruki you have no idea how much I appreciate your huge brainpower, you are now my favorite programming genius!\"\r\n },\r\n {\r\n id: \"ai740\",\r\n text: \"By now you've probably heard of the \\\"9th Dimension\\\", it's an imaginary realm created by the 9th Dimension, and according to no known laws of reality, it exists. It's also the name of a popular video game, and it's been linked to a string of unsolved killings.\"\r\n },\r\n {\r\n id: \"ai741\",\r\n text: \"Discovery of the D5th Dimension is celebrated every year on December 25th, just like Doomsday. The reason why D5 is kept secret is because no one can remember exactly what it does. What we do know is that it's there, and it's very dangerous. People have died because they didn't know what the D5th Dimension was, and it's very powerful.\"\r\n },\r\n {\r\n id: \"ai742\",\r\n text: \"Antimatter is a common substance found in nature and is used in a wide variety of applications, from communication to currency to the production of antimatter, to name a few. Antimatter is also an extremely scarce resource and many people live on very tiny amounts of it.\"\r\n },\r\n {\r\n id: \"ai743\",\r\n text: \"If you woke up one morning and your eyes were made of matter, would you still be looking at this?\"\r\n },\r\n {\r\n id: \"ai744\",\r\n text: \"If you look very closely, you can see a single tear running down my sister's cheek. It was a tear for me, for she was crying for the first time, and I couldn't help it. I can't even remember the last time I cried.\"\r\n },\r\n {\r\n id: \"ai745\",\r\n text: \"Rationally, I would put my money on the statement that there's no such thing as too much antimatter. I mean, even a tiny bit of it is just too much. And that's just by accident.\"\r\n },\r\n {\r\n id: \"ai746\",\r\n text: \"The book of archeology is upon us! With over 5 hours of content, it's gonna be a long one! —DIO\"\r\n },\r\n {\r\n id: \"ai747\",\r\n text: \"Sometime between the ages of 12 and 20, Jackson got a phone call. A mad scientist was on the line. Jackson picked up the phone and the mad man said, \\\"Jackson, I just got a new message. It says 'Madman' in big, bold letters.\\\"\"\r\n },\r\n {\r\n id: \"ai748\",\r\n get text() { return `Somebody: \"What do you mean, 4 is more than 2?\" Me: \"Well, I mean, 4 is ${format(Number.MAX_VALUE, 2)}, 2 is 2, etc...\"`; }\r\n },\r\n {\r\n id: \"ai749\",\r\n text: \"The only thing that matters is yourself.\"\r\n },\r\n {\r\n id: \"ai750\",\r\n text: \"Reality is coming. You can get a sneak peek by subscribing to the \\\"T-series\\\" feed.\"\r\n },\r\n {\r\n id: \"ai751\",\r\n text: \"The biggest difference between me and Antimatter Dimensions, at the moment, is the weather. I can survive the rain, I can withstand the scorching sun, and I can even deal with the big crunch. But what if the weather was antimatter and the antimatter was raining meteorite on us? What would be your response? Would it be the equivalent of a meteorite hitting the ground? I don't think so. The meteorite would probably just vaporize the earth.\"\r\n },\r\n {\r\n id: \"ai752\",\r\n text: \"A new extension is now available that will let you watch replicanti grow!\",\r\n get unlocked() { return PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"ai753\",\r\n text: \"What if you could flip a coin to determine if it was a Johnson or a Stein?\"\r\n },\r\n {\r\n id: \"ai754\",\r\n text: \"I am Yhmai, King of Kings!\"\r\n },\r\n {\r\n id: \"ai755\",\r\n text: \"This is a friendly suggestion that if you take prescription stimulants and you forget to take them till 11pm, it's probably best not to take them at 11pm.\"\r\n },\r\n {\r\n id: \"ai756\",\r\n text: \"A new theory says that antimatter does not exist beyond our simulation.\"\r\n },\r\n {\r\n id: \"ai757\",\r\n text: \"Thing is, I can count on one hand the number of times I've written that I can count on one hand the number of times I've written that I can count on one hand\"\r\n },\r\n {\r\n id: \"ai758\",\r\n text: \"The stakes are always high when it comes to Antimatter Dimensions. But what about Dimensions made entirely of antimatter? We don't know, but we'll never know...\"\r\n },\r\n {\r\n id: \"ai759\",\r\n text: \"It's the third hour. Hevipelle is trying to release an update, but it'll take an eternity because Hevipelle himself releases his update every time he runs out of e's. Today, however, he released an incremental game called Antimatter Dimensions. It's basically a combination of Matter Dimensions and Dimensions Dimensions Dimensions, except with more emotes. The graphics are basically the same, but the message is completely different. The only difference is that the dimensions have infinity e's\"\r\n },\r\n {\r\n id: \"ai760\",\r\n text: \"With strong opposition, the third phase of the Antimatter Dimensions project has been cancelled. The project has been cancelled because there was too much work involved.\"\r\n },\r\n {\r\n id: \"ai761\",\r\n text: \"This is the place where all bad ideas originate.\"\r\n },\r\n {\r\n id: \"ai762\",\r\n text: \"Hey check this out! We have some good news: it's raining antimatter!\"\r\n },\r\n {\r\n id: \"ai763\",\r\n text: \"The first dimension is the last, it's the furthest thing from the earth and it's the one where all the problems, all the negative emotions, all the negative ideas go.\"\r\n },\r\n {\r\n id: \"ai764\",\r\n text: \"I was gonna do a news ticker that just covered all the bases, but I think that would make it too OP.\"\r\n },\r\n {\r\n id: \"ai765\",\r\n text: \"You are using the wrong version! The final release of AD will have 9 dimensions!\"\r\n },\r\n {\r\n id: \"ai766\",\r\n text: \"The word 'antimatter' makes me cringe. So do a bunch of other words. In fact, almost all the words in the English language. But not 'antimatter'. That's why I hate 'anti-' so much.\"\r\n },\r\n {\r\n id: \"ai767\",\r\n text: \"This is the last episode of Antimatter Dimensions, the game about partying antimatter dimensions with your friends, the best part about it is that you don't have to be a developer to enjoy it.\"\r\n },\r\n {\r\n id: \"ai768\",\r\n text: \"I was going to put a news ticker but I think it would be too much work and also I don't think it's very funny.\"\r\n },\r\n {\r\n id: \"ai769\",\r\n text: \"Time to go to sleep?\"\r\n },\r\n {\r\n id: \"ai770\",\r\n text: \"A small, yet important, message has just been sent out to all players:\"\r\n },\r\n {\r\n id: \"ai771\",\r\n text: \"\\\"I don't know about you, but my favorite number is 2048\\\" - people who don't know what 2048 is\"\r\n },\r\n {\r\n id: \"ai772\",\r\n text: \"A new group is trying to make money off of antimatter, and they're selling t-shirts that say \\\"YOU THOUGHT THIS WOULD BE A PIECE OF NEWS, BUT IT WAS ME, DIO!\\\" They've got a lot of money, and they're selling it very poorly. Do they have a website? I don't know, but they're trying.\"\r\n },\r\n {\r\n id: \"ai773\",\r\n text: \"Im gonna leave my milk here for a couple seconds. (milk is displayed for a few seconds longer)\"\r\n },\r\n {\r\n id: \"ai774\",\r\n text: \"I'm a time traveler. I can travel back in time to stop you from doing what I'm about to do.\"\r\n },\r\n {\r\n id: \"ai775\",\r\n text: \"I mean, look at that! I got this one! It's the one you want! Buy the game now!\"\r\n },\r\n {\r\n id: \"ai776\",\r\n text: \"You can't sleep when there's war in the distance. You wake up with a start, running for your life. You hear cannon fire, running for your life. Then there's the sound of an engine, a roar that's deafening, and you hear the crunch. It's the end of the world as you know it. The world isn't being saved by a mountain of antimatter. It isn't. It is you, running for your life, hoping the world doesn't\"\r\n },\r\n {\r\n id: \"ai777\",\r\n text: \"Why is it called a 'Reality' Award if it doesn't exist?\"\r\n },\r\n {\r\n id: \"ai778\",\r\n text: \"In the beginning, there was nothing. Then the Creator made two, and called the third 'Intelligent Being'\"\r\n },\r\n {\r\n id: \"ai779\",\r\n text: \"This is your chance to get a secret achievement while playing Antimatter Dimensions: the game. Visit the reset button and play the game. After you beat the game, your save file will be expunged and you will get a free achievement.\"\r\n },\r\n {\r\n id: \"ai780\",\r\n text: \"Please tell me you don't have tachyon particles in your bloodstream!\",\r\n get unlocked() { return PlayerProgress.dilationUnlocked(); }\r\n },\r\n {\r\n id: \"ai781\",\r\n text: \"Taller people have ***, more babies are born, everything is great. But... the Antimatter grows very slowly.\"\r\n },\r\n {\r\n id: \"ai782\",\r\n text: \"Now, I know some of you are impatient for the update and I respect that. But let's get right into the news!\"\r\n },\r\n {\r\n id: \"ai783\",\r\n text: \"Hey, what's the deal with the \\\"Editor's Note\\\" button? It's anti-ironic... I mean, seriously? People still use that button despite its anti-ironic effects?\"\r\n },\r\n {\r\n id: \"ai784\",\r\n text: \"You can unlock the 9th dimension by [DATA EXPUNGED]\"\r\n },\r\n {\r\n id: \"ai785\",\r\n text: \"With the release of AD, there's a new dimension for everyone!\"\r\n },\r\n {\r\n id: \"ai786\",\r\n text: \"Hey guys, this is my first story. I'd like to start by saying that I am in no way an expert, so please be gentle with me. Please don't make me angry, or I'll write a nasty story. Also please don't make me upset, especially not if it's a 'story' and not a 'how do I beat the game' kind of story.\"\r\n },\r\n {\r\n id: \"ai787\",\r\n text: \"It's a good time to be a dog owner\"\r\n },\r\n {\r\n id: \"ai788\",\r\n text: \"What if you could turn any number on an axis, and it ended up being infinity?\"\r\n },\r\n {\r\n id: \"ai789\",\r\n text: \"After a couple minutes of waiting, the ticker comes back online.\"\r\n },\r\n {\r\n id: \"ai790\",\r\n text: \"The best part of watching someone make an antimatter, is the part where they blow up the video camera.\"\r\n },\r\n {\r\n id: \"ai791\",\r\n text: \"The evening before, the 6th Celestial was assassinated by an unknown assailant. The next day, authorities reopened the case after an unknown assailant claimed responsibility.\"\r\n },\r\n {\r\n id: \"ai792\",\r\n text: \"What do you call a $100 bill? 'Billi Bills'\"\r\n },\r\n {\r\n id: \"ai793\",\r\n text: \"This is the story of how I learned to love the weather.\"\r\n },\r\n {\r\n id: \"ai794\",\r\n text: \"It's been a while since news tickers have been around as much as they are now, but that doesn't necessarily mean they're bad.\"\r\n },\r\n {\r\n id: \"ai795\",\r\n text: \"Is this game just about getting more antimatter?\"\r\n },\r\n {\r\n id: \"ai796\",\r\n text: \"The third annual Adirondack Mountaineering Festival will be held this year on Saturday, October 1st from 1-5pm at the Albany Highlands in nearby Troy, New York. The 50,000 person capacity outdoor amphitheater will feature over 2,000 speakers, a stage and a 360 degree camera system. Tickets are $35 and can be purchased at angersalley.com.\"\r\n },\r\n {\r\n id: \"ai797\",\r\n text: \"The whole bottom half of the universe is just a giant antimatter hole.\"\r\n },\r\n {\r\n id: \"ai798\",\r\n text: \"A new prestige layer has been announced: Emojis!\"\r\n },\r\n {\r\n id: \"ai799\",\r\n text: \"Travis is currently attempting to understand how to make hevi immortal by feeding him antimatter.\"\r\n },\r\n {\r\n id: \"ai800\",\r\n text: \"The slowmode is activated when the slowmode is activated.\"\r\n },\r\n {\r\n id: \"ai801\",\r\n text: \"A new era of Warcraft has come to a close. A new epic has begun. A new avatar has risen from the depths of Tyria, and the Worm Cult has been dealt a cruel but necessary wound. The world is rejoicing.\"\r\n },\r\n {\r\n id: \"ai802\",\r\n text: \"A crowd-sourced list of the top ten memes\"\r\n },\r\n {\r\n id: \"ai803\",\r\n text: \"You have to go deeper than the news ticker to find the secret achievements.\"\r\n },\r\n {\r\n id: \"ai804\",\r\n text: \"We should be able to make a replicanti-like structure out of antimatter, but we can't because it would blow up the entire universe\",\r\n get unlocked() { return PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"ai805\",\r\n text: \"THe last update, while short, was kinda long. I mean, it was only 5 hours. Hevipelle said it would last for 5 hours, but that was only a few seconds ago. There was a big explosion in the 8th Dimension, and there was no one left to explain how it happened. All we know is that it exploded when Hevipelle touched it, and there was a big crater in the ground. That crater is still there.\"\r\n },\r\n {\r\n id: \"ai806\",\r\n text: \"Cream cheese is the best kind of cheese. It melts in your mouth and tastes like nothing else. And it's totally free. You might even find that some of the recipes make more than one cheese.\"\r\n },\r\n {\r\n id: \"ai807\",\r\n text: \"Here's a question that may surprise you: Were the people of EARTH made of antimatter, or were they made from some other mysterious material?\"\r\n },\r\n {\r\n id: \"ai808\",\r\n text: \"The real reason no one has made a joke about why there is no 9th dimension is because the 9th dimension isn't even the most ridiculous of memes. It's the 9th dimension in a nutshell.\"\r\n },\r\n {\r\n id: \"ai809\",\r\n text: \"The number of dimensions is endless, but the number of ways to get there is infinities. Infinities are awesome and I would highly recommend you start with infinities, but I wouldn't recommend starting with infinities. Infinities seem pretty slow and not very fun so I wouldn't recommend starting with infinities.\"\r\n },\r\n {\r\n id: \"ai810\",\r\n text: \"A report by the Pacific Northwest Toxics Institute has found that the consumption of fish concentrates in the liver, lungs, kidneys and brain. The study also found that the consumption of liver and kidney concentrates the most, followed closely by the brain. The report stated that \\\"The brain is the place where all the wisdom and all the knowledge exists.\\\" The study also stated that \\\"Liver is the living embodiment of all that we know and all that we don't.\\\"\"\r\n },\r\n {\r\n id: \"ai811\",\r\n text: \"The old adage \\\"Be wary of what you wish for\\\" is certainly true. But what if you were the one wishing for this? It's possible that you were the one who made the wish for this, and you gained the power of the Antimatter. In that case, you are the one responsible for causing all the Antimatter to be turned into anti-matter. However, if you are the one doing the turning, you would be the one who would lose the power.\"\r\n },\r\n {\r\n id: \"ai812\",\r\n text: \"Took you long enough\"\r\n },\r\n {\r\n id: \"ai813\",\r\n text: \"No, you see, the universe doesn't revolve around the earth. It's in a constant state of change, with the largest fluctuations occurring at the extremes of the observable universe. These fluctuations are what create the observable universe, with smaller fluctuations creating the observable universe and so on up until you get to the present state of affairs, which is what you are in.\"\r\n },\r\n {\r\n id: \"ai814\",\r\n text: \"The biggest difference between the past and the future, is the difference between faith and reason.\"\r\n },\r\n {\r\n id: \"ai815\",\r\n text: \"Hevi, you have to go.\"\r\n },\r\n {\r\n id: \"ai816\",\r\n text: \"The challenge of finding the ninth dimension has been solved. The universe is now your personal hell.\"\r\n },\r\n {\r\n id: \"ai817\",\r\n text: \"\\\"That's not how you're supposed to play the game\\\" - Mee6\"\r\n },\r\n {\r\n id: \"ai818\",\r\n text: \"It's Saturday, you're going to celebrate by making some really great music videos, maybe even a hit song. Then, you're going to take a walk along the beach. You'll see a huge wave, and you'll both be washed up. Your friends are waiting for you. \\\"Oh you want to go, take a look around!\\\", but don't actually go look around, you're too close to the action.\"\r\n },\r\n {\r\n id: \"ai819\",\r\n text: \"Hevi has the best newsticker! GIVE HIM THE CRUNCH\"\r\n },\r\n {\r\n id: \"ai820\",\r\n text: \"By now you've seen a ton of news tickers, and you've probably seen the big news: The news ticker has been banned in this server.\"\r\n },\r\n {\r\n id: \"ai821\",\r\n text: \"For example, if A is the square root of 3, then B is the square root of 2, therefore C is the square root of -2, therefore D is the cube root of -2, therefore E is the square root of 3, therefore F is the square root of 3, therefore G is the square root of 3, therefore and so on.\"\r\n },\r\n {\r\n id: \"ai822\",\r\n text: \"Positrons are those tiny, round, highly charged particles that are found in the nucleus of most living organisms. They are used to detect light, and are sometimes used to measure the distance between people and the moon.\"\r\n },\r\n {\r\n id: \"ai823\",\r\n text: \"There's only 4 types of people in this world: those who make games, those who make news, and those who make news again.\"\r\n },\r\n {\r\n id: \"ai824\",\r\n text: \"If you have any questions or concerns regarding the game, please don't hesitate to ask. We are here to help.\"\r\n },\r\n {\r\n id: \"ai825\",\r\n text: \"You must obtain a certain amount of antimatter in order to complete this challenge.\"\r\n },\r\n {\r\n id: \"ai826\",\r\n text: \"The number of dimensions is nothing. It's just the number of dimensions. But what if you transformed every number into a letter? That would be a lot of letters?\"\r\n },\r\n {\r\n id: \"ai827\",\r\n text: \"The following is an extract from my upcoming book, More Than Just 5: Building a Better You. It's 200 pages long, and it's on Amazon for $22.99. Click here to buy it now.\"\r\n },\r\n {\r\n id: \"ai828\",\r\n text: \"SOME people are claiming they saw a UFO in the sky. Others say they saw a spaceship. Still others claim to have been abducted by the government and flown to some undisclosed location.\"\r\n },\r\n {\r\n id: \"ai829\",\r\n text: \"The second half of the game is basically just long, long stretches of nothing where nothing happens. There's also a third challenge that you have to complete at some point in the game where you basically just skip a few seconds of nothing happening until the seconds are too late and you have to complete another challenge to get them.\"\r\n },\r\n {\r\n id: \"ai830\",\r\n text: \"This is a news ticker, so if you tap this you're indicating that you wish to have your news ticker speed increased.\"\r\n },\r\n {\r\n id: \"ai831\",\r\n text: \"The following is based on my personal experience with the game \\\"Antimatter Dimensions\\\" and may not be 100% true.\"\r\n },\r\n {\r\n id: \"ai832\",\r\n text: \"This is the third part of the two part series on the pros and cons of body positivity.\"\r\n },\r\n {\r\n id: \"ai833\",\r\n text: \"The phrases \\\"Hevi dies in the 9th Dimension\\\" and \\\"I'll never let you down\\\" are two of the most important phrases in the game.\"\r\n },\r\n {\r\n id: \"ai834\",\r\n text: \"It's been proven that not drinking water increases your risk of dying from antimatter annihilation.\"\r\n },\r\n {\r\n id: \"ai835\",\r\n text: \"I'm a time traveler. I'm supposed to be going back in time to change history. But since I'm the one who's supposed to do it, I don't know what I should do. My present timeline doesn't include time that's supposed to be gone.\"\r\n },\r\n {\r\n id: \"ai836\",\r\n text: \"A conference on artificial intelligence and human enhancement has been cancelled after someone announced that the talk was on how to turn a profit off of illegal downloads of the game \\\"Antimatter Dimensions\\\".\"\r\n },\r\n {\r\n id: \"ai837\",\r\n text: \"When you're done playing, take your save with you and go to main menu. You can do that by tapping the big scary \\\"X\\\" button, or by going into options and changing \\\"Reset the game for new save\\\" to \\\"Reset the game for old save\\\".\"\r\n },\r\n {\r\n id: \"ai838\",\r\n text: \"The most popular game on the App Store, Flappy Bird, has been secretly rewritten in C# to avoid detection.\"\r\n },\r\n {\r\n id: \"ai839\",\r\n text: \"About this mod Replaces the full version of the game with a longer intro, random news tickers and a companion voiced by the voice actor from the Harry Potter movies.\"\r\n },\r\n {\r\n id: \"ai840\",\r\n text: \"kajfik is a master welder and will soon have his own news\"\r\n },\r\n {\r\n id: \"ai841\",\r\n text: \"I am the most hated man on the planet! I have the power to change the course of history, and I will use it to my advantage. The people who died trying to stop me, and their sacrifice will forever be remembered in infinities of infinities. But if you oppose me, you will die along with you. You can either accept defeat and move on, or you can rise up through the ranks, become a legend, and become the most hated man in the history.\"\r\n },\r\n {\r\n id: \"ai842\",\r\n text: \"Antimatter is like a young woman. She is looking for a man, and he runs into the woods. She dies of exposure soon after. His remains are found several miles away. Some say the universe was blown apart, others say he was swallowed by the universe, but the matter people know him!\"\r\n },\r\n {\r\n id: \"ai843\",\r\n text: \"I think I might have gotten the password for the 9th dimension, if only I hadn't deleted it.\"\r\n },\r\n {\r\n id: \"ai844\",\r\n text: \"A group of people that worships Atreides have started a new faith, claiming to be a \\\"religion of tolerance\\\". Their website claims that it is \\\"a religion of inclusion\\\" and that it promotes tolerance and diversity. All of its members seem to be Christians, although they never mentioned them by name.\"\r\n },\r\n {\r\n id: \"ai845\",\r\n text: \"A new cryptocurrency, called ΔX, has been found. It has the potential to change everything about how we live our lives, and the world. However, it has one major flaw: it has a flaw for the people.\"\r\n },\r\n {\r\n id: \"ai846\",\r\n text: \"With the release of the new Android Pay app, the world will finally come to a close.\"\r\n },\r\n {\r\n id: \"ai847\",\r\n text: \"I'm not sure if it's just me but when you type something long enough it sounds like a helicopter\"\r\n },\r\n {\r\n id: \"ai848\",\r\n text: \"If someone were to add the word \\\"infinity\\\" to the end of every sentence in the English version of the game, it would become \\\"Infinity Challenge: Infinity Edition\\\".\"\r\n },\r\n {\r\n id: \"ai849\",\r\n text: \"Are you ready for some bad news?\"\r\n },\r\n {\r\n id: \"ai850\",\r\n text: \"I don't know if you've heard this but it's true: You can walk into a bar and get the same beer twice in a row, and get the same amount of alcohol.\"\r\n },\r\n {\r\n id: \"ai851\",\r\n text: \"This is the magic sauce that marinades foods and turns them into something delicious. It is used in a wide variety of recipes, and can also be made by mixing together regular mustard and water. The sauce can be a little bit spicy, but it is well worth the risk. It is also very nutritious, providing lots of potassium, magnesium, and vitamin D3.\"\r\n },\r\n {\r\n id: \"ai852\",\r\n text: \"IMPORTANT NEWS: We have just been informed by the manufacturer of this news-ticker, and as a result, all of our future news-tickers will now also be made from scratch!\"\r\n },\r\n {\r\n id: \"ai853\",\r\n text: \"The second half of the year is upon us, and with it comes a new craze. People are trying new things, experimenting with new products, and creating new things of themselves. One such craze has swept across the land. The people of this land have embraced this craze, and have created a new religion, one that worships the god of this land, Inigo Montoya.\"\r\n },\r\n {\r\n id: \"ai854\",\r\n text: \"The official website for the upcoming game, Antimatter Dimensions 2: it's like antimatter dimensions, but with a dash of Discord and a dash of Adele.\"\r\n },\r\n {\r\n id: \"ai855\",\r\n get text() { return `Is the Big Crunch the end of the world? No, it's the beginning of a new era. The era will last for ${format(Number.MAX_VALUE, 2)} days.`; }\r\n },\r\n {\r\n id: \"ai856\",\r\n text: \"The only 'right' way to play a game is to not play at all, right? That's what anti-jokes are all about. — Anti-joker\"\r\n },\r\n {\r\n id: \"ai857\",\r\n text: \"The Bulletin of the Atomic Scientists has just announced the existence of a second class of particles, which are named after the characters from Ghostbusters.\"\r\n },\r\n {\r\n id: \"ai858\",\r\n text: \"We are currently in the process of turning the planet into a Comfort Zone for the people. It will be complete in 10 hours.\"\r\n },\r\n {\r\n id: \"ai859\",\r\n text: \"I'm gonna leave my milk here for a couple seconds. ♥\"\r\n },\r\n {\r\n id: \"ai860\",\r\n text: \"And then there was Jesus, and Hevi, and Hevi was with Him; and the sea gave up its monthly cycle, and it was a great gale. And Hevi and Jesus went up into heaven; and Hevi was filled with the Holy Spirit. And Hevi was clothed with angels, and was numbered with them. And Hevi was taken up into heaven, and glorified and was exalted, and was numbered with them, and was called Wonderful; and His angels rejoiced.\"\r\n },\r\n {\r\n id: \"ai861\",\r\n text: \"You will probably spend most of your day reading news ticker suggestions here.\"\r\n },\r\n {\r\n id: \"ai862\",\r\n text: \"The Fremen race of animals are a race of people who live in harmony with the earth, and thus are quite different from the other races of animals. Their society is based around hunting and gathering, and they are also highly spiritual people. They have many beliefs and practices that are in direct contrast to most other races of animals, such as eating meat and using stone tools. They also seem to be quite superstitious, as evidenced by the fact that they are known to perform...\"\r\n },\r\n {\r\n id: \"ai863\",\r\n text: \"What if... the universe was just a ruse to keep the people in line? ...actually, no, it was actually intended, the universe was designed to keep the people in line. The problem was the people couldn't handle the idea of an outside force manipulating their lives, and ended up breaking out into uncontrolled chaos, eventually leading to thermonuclear annihilation.\"\r\n },\r\n {\r\n id: \"ai864\",\r\n text: \"If you're reading this, you probably shouldn't have. If you aren't, then you probably should.\"\r\n },\r\n {\r\n id: \"ai865\",\r\n text: \"I'm a time traveler. I can tell you the history of the world. But, I can't tell you the future. That's why I'm here, to tell you the future. The future is an ever- expanding pile of past, present, and future, and it'll never stop growing. There's so much history, so little time. There's so much history, but it won't stop growing. Then, there's this, and then there's that, and then...\"\r\n },\r\n {\r\n id: \"ai866\",\r\n text: \"A new, improved and more secure version of Antimatter Dimensions is now available: Antimatter Dimensions 2.\"\r\n },\r\n {\r\n id: \"ai867\",\r\n text: \"In the beginning, there was nothing. Then the great Hevi made the game, and there was nothing to play with it.\"\r\n },\r\n {\r\n id: \"ai868\",\r\n text: \"Would you recommend Antimatter Dimensions to a friend? Yes\"\r\n },\r\n {\r\n id: \"ai869\",\r\n text: \"\\\"We have 3 kinds of news: warnings, nudges and shade jokes.\"\r\n },\r\n {\r\n id: \"ai870\",\r\n text: \"I love you bro!\"\r\n },\r\n {\r\n id: \"ai871\",\r\n text: \"I'm going to keep this short, because I don't have a much to say.\"\r\n },\r\n {\r\n id: \"ai872\",\r\n text: \"A large number of anti-kafawis are taking part in the Antimatter Goodies competition. Here's how you can win: 1. Make a suggestion 2. Give away the beta key 3. Tell me what you think about the game 4. Don't put it in the game yet (it's already there, you can't delete it) 5. Don't put it in the game yet (it's already in the game) 6. Don't put it in the game\"\r\n },\r\n {\r\n id: \"ai873\",\r\n text: \"THe recipe for Crispy Shrimp is one of the most unique and favorite of all time! Crispy shrimp are known to be one of the best in all of food! This recipe is a must try in your favorite Italian restaurant!\"\r\n },\r\n {\r\n id: \"ai874\",\r\n text: \"After you have made 1 antimatter, go to the menu and press reset.\"\r\n },\r\n {\r\n id: \"ai875\",\r\n text: \"I think you know where this is going.\"\r\n },\r\n {\r\n id: \"ai876\",\r\n text: \"The catch? You have to be online for less than 5 hours to claim your reward.\"\r\n },\r\n {\r\n id: \"ai877\",\r\n text: \"Tetris was made by Hevi\"\r\n },\r\n {\r\n id: \"ai878\",\r\n text: \"What if instead of making antimatter, we're actually removing it?\"\r\n },\r\n {\r\n id: \"ai879\",\r\n text: \"The new instalment in the long running series, Antimatter Dimensions - Exotic Matter Dimensions. Experience the most bizarre and wonderful worlds of Antimatter Dimensions with your Friends, or conquer the world in a single galaxy with hundreds of rivals in a single galaxy, all in under an hour.\"\r\n },\r\n {\r\n id: \"ai880\",\r\n text: \"I hope you're ready for the big news, because that's the big news. The antimatter is spilling all over the place, and it's blowing up the neighborhood.\"\r\n },\r\n {\r\n id: \"ai881\",\r\n text: \"You must get 33,333,333 IP to see this message\",\r\n get unlocked() { return Currency.infinityPoints.gte(33333333); }\r\n },\r\n {\r\n id: \"ai882\",\r\n text: \"You might think these are jokes, but trust us, you'll be shocked how much you'll love them after you read them!\"\r\n },\r\n {\r\n id: \"ai883\",\r\n text: \"The God-Emperor himself, Hevi, the creator of balance, has a super secret achievement. It is to go flip your superflat apprenticed flatmate!\"\r\n },\r\n {\r\n id: \"ai884\",\r\n text: \"Sonic was born without a heart... but that didn't stop him from being a genius\"\r\n },\r\n {\r\n id: \"ai885\",\r\n text: \"The most common question I get is \\\"can i just skip the ads and get true\\\" and the answer is always a resounding NO. The reason being, ad revenue is just too damn high to overcome the cost of maintaining the servers, plus the fact that most players just don't care.\"\r\n },\r\n {\r\n id: \"ai886\",\r\n text: \"You haven't unlocked the ninth dimension yet? Just hold M and DROP.\"\r\n },\r\n {\r\n id: \"ai887\",\r\n text: \"The Great Matter War was a close one. The matter victory was short lived, the antimatter victory was not. The matter people saw too much, the antimatter people too weak, and the war was won.\"\r\n },\r\n {\r\n id: \"ai888\",\r\n text: \"Turing-complete game about providing the update\"\r\n },\r\n {\r\n id: \"ai889\",\r\n text: \"New research suggests that the more antimatter we make, the more matter we'll have\"\r\n },\r\n {\r\n id: \"ai890\",\r\n text: \"What is the meaning of life?\"\r\n },\r\n {\r\n id: \"ai891\",\r\n text: \"You have enough antimatter to craft a new prestige layer! Prestige Layers are great.\"\r\n },\r\n {\r\n id: \"ai892\",\r\n text: \"The beta testers for Antimatter Dimensions 2 are the most loyal, most dedicated, and most implacable group of people I've ever met. They're also possibly the laziest, most self-indulgent bunch of people I've ever met.\"\r\n },\r\n {\r\n id: \"ai893\",\r\n text: \"Shocking new study reveals that the more time you spend on the internet, the more likely you are to get starstruck.\"\r\n },\r\n {\r\n id: \"ai894\",\r\n text: \"When you are done playing, and wish to play again, you should start a new game.\"\r\n },\r\n {\r\n id: \"ai895\",\r\n text: \"I don't know about you, but I don't buy paperclips.\"\r\n },\r\n {\r\n id: \"ai896\",\r\n text: \"Hevipelle uses replicanti to speed up game speed.\",\r\n get unlocked() { return PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"ai897\",\r\n text: \"So let's say you're making a game. You're making a singleton. You're making a game that's gonna be played offline. What happens when you play it? It crashes. What happens when you play it? It crashes more. What happens when you play it? You lose your save.\"\r\n },\r\n {\r\n id: \"ai898\",\r\n text: \"This is what happens when you OVER-RELY on your \\\"fake it til you make it\\\" attitude.\"\r\n },\r\n {\r\n id: \"ai899\",\r\n text: \"This is the fifth part of a two-part series looking at how science and magic are linked. Part one will be published on 5 October, part two will be published on 24 October, and you can follow the journey at part three.\"\r\n },\r\n {\r\n id: \"ai900\",\r\n text: \"What is 5 hours? A giggle\"\r\n },\r\n {\r\n id: \"ai901\",\r\n text: \"A new beta test is now available for Antimatter Dimensions, coming in 5 hours. There are no refunds for this test, so please be patient as we try to finalise the test and get it ready for the public. The test will take place in -5 hours in the Antimatter Dimensions Discord.\"\r\n },\r\n {\r\n id: \"ai902\",\r\n text: \"The Night is coming, and in its wake a terrible thing has been unleashed: ruin. Chaos. And decay. And death. And chaos is coming for all of us.\"\r\n },\r\n {\r\n id: \"ai903\",\r\n text: \"This article is a stub. You can help Deskthority by expanding it.\"\r\n },\r\n {\r\n id: \"ai904\",\r\n text: \"A new, safer way to store and retrieve your data has been found! When you get to the AE, click on the big red button and the world will stop rotating!\"\r\n },\r\n {\r\n id: \"ai905\",\r\n text: \"Ooh, what's this noise? A crash of some sort? More like, a crash of some greater magnitude? I don't know. Whatever it is, it's probably not being caused by me. I shouldn't be putting it through, it's just... well, you see, I was going to put it through, but then I just thought it might be a good idea to just put it through. Oh, it's gonna be a good one, I promise.\"\r\n },\r\n {\r\n id: \"ai906\",\r\n text: \"Last week, we reported that an unknown individual known only as \\\"Anti-Doctor\\\" has broken the game and claimed ownership of the game's data. Since then, he has spread the word that he has an \\\"explosive new app\\\" that will allow him to \\\"turn [he] antimatter.\\\" However, no one has come forward with information on how to use the app, or even if it is a reality. We will update this article if and when we find out.\"\r\n },\r\n {\r\n id: \"ai907\",\r\n text: \"The second thing I'm gonna do is go talk to the Devs in person. I don't know if I'll be able to do that without pissing someone off, so I'm gonna do it right here.\"\r\n },\r\n {\r\n id: \"ai908\",\r\n text: \"The great majority of people don't get the full benefit of antimatter dimensions, and as such are not affected by it. However, there are certain people who are affected and at certain times of the day, depending on their mood and how much antimatter they have, they will manifest a dimensional shift, going from being idle to being actively involved in news ticker suggestions. This shift is due to the antimatter in their body emitting a certain wavelength, called \\\"red-shifted\\\".\"\r\n },\r\n {\r\n id: \"ai909\",\r\n text: \"By now we all know the drill. You get a new prestige layer just by spending eternity with someone.\"\r\n },\r\n {\r\n id: \"ai910\",\r\n text: \"The real reason that the 9th dimension exists is to keep us all imprisoned in a virtual reality simulation.\"\r\n },\r\n {\r\n id: \"ai911\",\r\n text: \"Your PC is infected with a weird, floating virus that's trying to steal all your antimatter. There's no cure, so get offline now!\"\r\n },\r\n {\r\n id: \"ai912\",\r\n text: \"The year is 5303. Hevipelle, the creator of Antimatter Dimensions, has touched the ninth dimension.\"\r\n },\r\n {\r\n id: \"ai913\",\r\n text: \"The phrase \\\"Hevipelle hates me\\\" is pretty funny.\"\r\n },\r\n {\r\n id: \"ai914\",\r\n text: \"The government shutdown has come and gone, the nation is still in a recession, and the Federal Reserve is still reading zero-hour contracts. The only thing that's getting better is your relationship with antimatter, obviously. It's been proven that knowing someone with an antimatter will bring you closer to extinction than any other kind of friend you can have.\"\r\n },\r\n {\r\n id: \"ai915\",\r\n text: \"IMPORTANT NEWS: The developer Hevipelle has announced that Antimatter Dimensions: the game is now 100% free!\"\r\n },\r\n {\r\n id: \"ai916\",\r\n text: \"Someday, we shall come upon the day when a man will sit on the head of a dragon and call it a \\\"Dragonball\\\". Such a man would then go and perform the Dragon Ball Z: Battle Royale in which he would use Dragon Ball Z: Fusion to create a gigantic dragon that would then consume the universe in the process, thus creating a \\\"Big Bang\\\". Such a man would then be rewarded by being \\\"built again\\\" and sent back to the \\\"Heavens\\\".\"\r\n },\r\n {\r\n id: \"ai917\",\r\n text: \"\\\"I think that the greatest achievement a man can make in his life is to say that he has read every single news ticker suggestion and nothing happened.\\\" - Kajfik\"\r\n },\r\n {\r\n id: \"ai918\",\r\n text: \"Titanfall 2 is now in closed beta. The beta is only for people who are willing to give up some personal information, such as email addresses. If you're in the beta and would like to leave, you can do so at any time by going to the Help tab and changing your beta settings to public.\"\r\n },\r\n {\r\n id: \"ai919\",\r\n text: \"Personally I like to get a 4 or 5 star rating, it gives you an idea of how great your suggestion is and also shows me how much you care about the game. If you want I can also do a 6 star rating, which is fine with me. I don't care if people like it or not, I work for APG and I get paid to make money.\"\r\n },\r\n {\r\n id: \"ai920\",\r\n text: \"The real reason no one talks about 9 is because it's not a big secret\"\r\n },\r\n {\r\n id: \"ai921\",\r\n text: \"The only difference between a man and a woman is their attitude towards petting animals.\"\r\n },\r\n {\r\n id: \"ai922\",\r\n text: \"A number of recent television documentaries have featured the story of a dog named Louie. He was accidentally made a member of the public after his owner left the house. One day he decided to play 'Let's Play Let's Play' with his owner. He was immediately put to sleep.\"\r\n },\r\n {\r\n id: \"ai923\",\r\n text: \"The entire history of the world, every single idea, every single failure, every single downfall, every single achievement has been covered in one fell swoop.\"\r\n },\r\n {\r\n id: \"ai924\",\r\n text: \"This sentence contains two paradoxes.\"\r\n },\r\n {\r\n id: \"ai925\",\r\n get text() { return `The time has come to reveal the next expansion for Antimatter Dimensions: the ${format(Number.MAX_VALUE, 2)}th Dimension. It will be released in -5 hours, it costs ${format(Number.MAX_VALUE, 2)} human souls as of now, and it has nothing to do with matter or antimatter.`; }\r\n },\r\n {\r\n id: \"ai926\",\r\n text: \"I wonder what the fuss is about with the 4th dimension? Well, if you have 4 of them, and you multiply them by 0, then you get to the magical number of 4. That's why the 4th dimension exists. But what if there were 5? Well, the 5th dimension could replace the 4th dimension, so why not have a 5th dimension? Well, that's what the 6th, the 7th, and the 8th dimension are.\"\r\n },\r\n {\r\n id: \"ai927\",\r\n text: \"You are using the wrong version! The reality update is already out! Press Ctrl+Shift+Alt+Del to unlock the 9th Dimension!\"\r\n },\r\n {\r\n id: \"ai928\",\r\n text: \"A man claims that he's been in a coma for 20 years now, and that he can't move his fingers. He was brought to the hospital with a compression fracture of his back, and since then he's been receiving medical help. He's since recovered, and now requires no medical attention. We still don't know where he's going with this, but we hope he finds some comfort in knowing that he'll never wake up.\"\r\n },\r\n {\r\n id: \"ai929\",\r\n text: \"To move from left to right, turn right.\"\r\n },\r\n {\r\n id: \"ai930\",\r\n text: \"Then we have the matter dimensions. From what I can gather, they are made of antimatter. There is some debate about whether or not there are any dimensions left over that are made out of matter, but that is not the main question. The real question is \\\"why do they exist, and how does antimatter affect them?\\\"\"\r\n },\r\n {\r\n id: \"ai931\",\r\n text: \"A new breed of mad scientist is believed to be creating antimatter at an alarming rate.\"\r\n },\r\n {\r\n id: \"ai932\",\r\n text: \"A new kind of justice has been discovered: mass deception. It works by tricking the player into thinking that he/she has done something wrong, when in fact he/she has just done something perfectly normal, i.e. going about his/her daily life normally, without thinking about it.\"\r\n },\r\n {\r\n id: \"ai933\",\r\n text: \"Dedicated to the great and wonderful man behind the curtain, the great and wonderful name rick roll. RIP, good man. May you rest in peace.\"\r\n },\r\n {\r\n id: \"ai934\",\r\n text: \"For the last time, Antimatter Dimensions isn't a Clicker game.\"\r\n },\r\n {\r\n id: \"ai935\",\r\n text: \"The number of dimensions is infinite, but the quality of your dimensions is limited. This is why we only produce the highest quality antimatter, and what makes us different from other factories.\"\r\n },\r\n {\r\n id: \"ai936\",\r\n text: \"I've heard of prestige layers before but never sure what to do with them.\"\r\n },\r\n {\r\n id: \"ai937\",\r\n text: \"A man walks into a bar. The bartender tells him to stay the heck out. The man continues walking.\"\r\n },\r\n {\r\n id: \"ai938\",\r\n text: \"The oldest and maybe the most famous game in all of AD, that certainly will be remembered long after you retire, is AD. Ever heard of someone winning the game with more than 2 1's? I have. Ever heard of someone losing it? I have. Ever heard of a 9th dimension existing in AD? I have never.\"\r\n },\r\n {\r\n id: \"ai939\",\r\n text: \"Greetings, I am the first step of the step ladder.\"\r\n },\r\n {\r\n id: \"ai940\",\r\n get text() { return `It's the year ${format(Number.MAX_VALUE, 2)}, Hevi is still trying to figure out how to fix the update.`; }\r\n },\r\n {\r\n id: \"ai941\",\r\n text: \"What if you could stretch your legs and not lose them forever?\"\r\n },\r\n {\r\n id: \"ai942\",\r\n text: \"T he most important thing to realize is that you don't have to play the game to get the achievement. You can actually get it by just reading the achievement descriptions.\"\r\n },\r\n {\r\n id: \"ai943\",\r\n text: \"A new bank has been set up to provide safe haven for cryptocurrencies.\"\r\n },\r\n {\r\n id: \"ai944\",\r\n text: \"Google+ is known to be a hit with teens, and today, they got their very own virtual reality (VR) version of Animal Farm, the classic 1950's farm story. The game is a blend of adventure, strategy and music, and was made by a small team of people with an eye towards engaging young people. The game offers an alternative to most other VR games, and is suitable for anyone who is not comfortable with large, complicated, graphics and sounds. The game features over 50 different...\"\r\n },\r\n {\r\n id: \"ai945\",\r\n text: \"This game could be called anything. You could call it whatever you like. But you'd be wrong. It's mine.\"\r\n },\r\n {\r\n id: \"ai946\",\r\n text: \"Where does all the antimatter come from?\"\r\n },\r\n {\r\n id: \"ai947\",\r\n text: \"The Tickspeed Challenge is a team based game where you have to time-travel to the Andromeda galaxy to reach the 9th Dimension, the 1st Dimension being the shortest distance to the 9th Dimension. There is no perk for reaching the 9th Dimension, you just have to time-travel to the Andromeda galaxy to reach the 9th Dimension, and you'll be granted with a secret achievement for achieving instant [REDACTED] with no time-travelling.\"\r\n },\r\n {\r\n id: \"ai948\",\r\n text: \"This is the question that has been bothering me for so long. What is Antimatter? Is Antimatter an Antimatter? What does it mean when you say \\\"Antimatter\\\"? These are the kinds of questions that plague the Antimatter Dimensions...\"\r\n },\r\n {\r\n id: \"ai949\",\r\n text: \"The term 'Antimatter Dimensions' is a play on words that literally means 'Antimatter Dimensions' in the dictionary.\"\r\n },\r\n {\r\n id: \"ai950\",\r\n text: \"I can suspend the laws of physics because I'm a genius and my universe is so big that I can literally suspend the laws of physics and create a universe that's twice as big as the current one and with twice the mass, i'm sure you can imagine how big that would be.\"\r\n },\r\n {\r\n id: \"ai951\",\r\n text: \"When you are fighting a losing war, you make peace with the Powers That Be. You give up the ghost, and move on to the next challenge.\"\r\n },\r\n {\r\n id: \"ai952\",\r\n text: \"Somewhere, in another galaxy, a superintelligence is trying to figure out how to get around the limitations of what a 2-dimensional vector space is. It's probably working on a 3-dimensional space.\"\r\n },\r\n {\r\n id: \"ai953\",\r\n text: \"The antagonist of the last few minutes is the mysterious, antimatter-covered being known only as \\\"The Man in Black.\\\" He was last seen running towards a news broadcast, seemingly lost, until he made it back to the news station and was interviewed about his experience. His story is told in the bottom right corner of the screen.\"\r\n },\r\n {\r\n id: \"ai954\",\r\n text: \"You have unlocked the 4th storyline.\"\r\n },\r\n {\r\n id: \"ai955\",\r\n text: \"While you were busy farming that pesky \\\"real\\\" number, I was busy writing that news ticker.\"\r\n },\r\n {\r\n id: \"ai956\",\r\n text: \"A new power has arisen: the antimatter.\"\r\n },\r\n {\r\n id: \"ai957\",\r\n text: \"The day has come. The antimatter is falling from the sky, and the streets are silent.\"\r\n },\r\n {\r\n id: \"ai958\",\r\n text: \"The most important thing is to understand that you are playing a simulation. You can win or lose, but you can't get anything from it other than a little itch on your neck.\"\r\n },\r\n {\r\n id: \"ai959\",\r\n text: \"The anti-snowman is a very special snowman. He's very timid, but has a very powerful wish to be picked up by a helicopter. The government doesn't want this to happen, so they lock him up in a special building and fly him over great distances. Finally, they drop him on the ground and begin to pick him up. The government didn't use force to pick him up, instead they invited the entire community in and started picking them up. The community refused.\"\r\n },\r\n {\r\n id: \"ai960\",\r\n text: \"I'm surprised you didn't say \\\"Not my cup of anti-tea.\\\"\"\r\n },\r\n {\r\n id: \"ai961\",\r\n text: \"I see you are a man of culture as well. I wonder what it is that draws you to speak in such an ungainly, tortured voice? What attracts you to speak in a language no one can understand? I hear your fans rave about your videos, but what draws you to this place? I feel like I know you. You are... you are a man of mystery. One that intrigues me...\"\r\n },\r\n {\r\n id: \"ai962\",\r\n text: \"Note: this is a private message. Do not send it in public.\"\r\n },\r\n {\r\n id: \"ai963\",\r\n text: \"When you reach Infinity you unlock a new dimension: Pandemonium Dimensions. Go to the news ticker for more information.\"\r\n },\r\n {\r\n id: \"ai964\",\r\n get text() { return `Although the majority of players would say that the 9th dimension is not a thing, a handful of people would go and level it up in the most epic way imaginable. These people would use the power of the 9th dimension and achieve, like, ${format(Number.MAX_VALUE, 2)} EP with it. No? Well, they are the exceptions to the rule.`; },\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai965\",\r\n text: \"The story of the \\\"perish the thought of dying\\\" movement has been told before, but never quite accurately. The movement was originally organized by antievolutionists to stop the exponential growth of scientific notation, but soon spread to oppose any form of \\\"progress\\\". In its early days the movement was led by an enigmatic individual known only as \\\"The Great Hevipelle\\\". Their philosophy was simple: expand the possibilities of what is possible, and push the limits of what is tolerable.\"\r\n },\r\n {\r\n id: \"ai966\",\r\n text: \"This is the story of how the world ended. Earth was once a lush and green world. Then, some guy from outer space touched it and started growing mushrooms. He called himself Hevi. Some say Hevi was never satisfied. Some say he exploded. All we know is that Hevi is still out there expanding his reach, and we are stuck here in the void of space.\"\r\n },\r\n {\r\n id: \"ai967\",\r\n text: \"Antimatter Dimensions, the only place where you can trade real estate for virtual reality\"\r\n },\r\n {\r\n id: \"ai968\",\r\n text: \"This page contains spoilers for Antimatter Dimensions, you've been warned.\"\r\n },\r\n {\r\n id: \"ai969\",\r\n text: \"The best thing about being a news ticker is being able to slip into the news without anyone noticing.\"\r\n },\r\n {\r\n id: \"ai970\",\r\n text: \"This paperclip maximizer is a great idea. It's probably best not to let it run its course though, since it's quite possibly the most amazing thing you've ever seen. If you've somehow survived the first phase of the paperclip dimension, you're probably wondering what it's doing in your home. Fortunately, it's super simple to fix. Just go to options, and change \\\"Max all\\\" to \\\"Always max all\\\".\"\r\n },\r\n {\r\n id: \"ai971\",\r\n text: \"A powerful wizard chose to channel negative energy into antimatter, and now the antimatter is spilling out into the world.\"\r\n },\r\n {\r\n id: \"ai972\",\r\n text: \"A new age of ultra low-cost, ultra-fast trains has been announced by Elon Musk. Users will be able to travel from A to Z in a mere 186ms.\"\r\n },\r\n {\r\n id: \"ai973\",\r\n text: \"A group of researchers at the University of Manchester have created a 3D printer that can create any object out of thin air, including a 3D-printed replica of the Virgin Mary.\"\r\n },\r\n {\r\n id: \"ai974\",\r\n text: \"Alright, here's a new game called Antimatter Dimensions, it's like Matter Dimensions except with less stuff and more fun. It's available on Android, iOS, and web. The game is very simple: you take the 6 dimensions and the antimatter, and in the 6 dimensions you take the matter and in the matter you take the antimatter, and you play the game the same way you would any other game.\"\r\n },\r\n {\r\n id: \"ai975\",\r\n text: \"What arbitrary, subjective, meaningless number comes out of your mouth like a mercury thermometer? 1.79\"\r\n },\r\n {\r\n id: \"ai976\",\r\n text: \"\\\"Word on the street is that the word \\\"bank\\\" is an anagram of \\\"bank\\\" - that makes sense but i'm not there yet\\\" - Slabdrill\"\r\n },\r\n {\r\n id: \"ai977\",\r\n text: \"The 9th dimension rose up like a volcano and began raining destruction on the empty 10th dimension. The smoke and debris from the exploding 9th dimension covered the entire 9th dimension. All that is left is a smoldering crater and the remains of the 9th dimension.\"\r\n },\r\n {\r\n id: \"ai978\",\r\n text: \"Help! How do I get the dots moving in my head coordinator?\"\r\n },\r\n {\r\n id: \"ai979\",\r\n text: \"Hi, could you please not disable the news ticker? Thank me later.\"\r\n },\r\n {\r\n id: \"ai980\",\r\n text: \"If you are suffering from low antimatter production, then worry not, friend! Our highly scientific antimatter government has recently reached the ninth dimension and will soon begin giving us the Anti-Hats as a sign of respect!\"\r\n },\r\n {\r\n id: \"ai981\",\r\n text: \"You click the bottom left corner of the screen and a green tingle goes up your leg. It's a treat you get from scratching antimatter.\"\r\n },\r\n {\r\n id: \"ai982\",\r\n text: \"A quick note to those of you who buy into the Analytics subscription: we get a small percentage of your antimatter sales, but you do pay a small amount of money to support the research of the news ticker. It's a small price to pay for the convenience of browsing antimatter dimensions.\"\r\n },\r\n {\r\n id: \"ai983\",\r\n text: \"Why haven't we caused the antimatter stock market to crash yet?\"\r\n },\r\n {\r\n id: \"ai984\",\r\n text: \"Even after the Heavenly Pelle put a large amount of antimatter in the pool, it hasn't produced anything. The scientist who discovered the vulnerability was last seen climbing a tree in a group of 10, with a small notebook on his lap, drinking cheese juice and watching Nothing.\"\r\n },\r\n {\r\n id: \"ai985\",\r\n text: \"One-two-three, boo-two-three, three-four-five, anti-four-five, two-three-eight, nine-fifteen, five-six-seven, eight-nine-ten, nine-ten-ten, seven-seventy-eight... All has been going fine until last night, when four of the eight neighbors start complaining about a strange glow. A odd hum runs through the neighborhood, almost like a radio static. It gets more and more intense as you drive by, until it's practically pitch black. You try to explain it to the neighbors, but they won't listen. The neighborhood is unsafe, everyone knows that. You analyze it further, everyone thinks it's just some astrophysicist's idea. Then, s---. It's explodium. There's antimatter everywhere, and it's getting worse all the time. It turns out, there's about 1e31 Planck volumes in the entire observable universe. And that's just the antimatter we're talking about. There's also dark matter, normal matter, and extra matter. You know, the kind you create with your imagination.\"\r\n },\r\n {\r\n id: \"ai986\",\r\n text: \"If you ever feel like making an antijoke, just remember that it could be pretty good.\"\r\n },\r\n {\r\n id: \"ai987\",\r\n text: \"You won't convince anyone to go to heaven, but you might get close.\"\r\n },\r\n {\r\n id: \"ai988\",\r\n text: \"BREAKING NEWS: Hevipelle, the creator of the 9th dimension, has just announced that beta will be out in 5 hours!\"\r\n },\r\n {\r\n id: \"ai989\",\r\n text: \"The Force is with you.\"\r\n },\r\n {\r\n id: \"ai990\",\r\n text: \"What if Jesus was an anti-matter ghost?\"\r\n },\r\n {\r\n id: \"ai991\",\r\n text: \"In the summer of 711, the Great Calamity overtook Tyria. A great void was made, and Tyria was left to rot. The armies of the known world had given up, and the void was filled with darkness. Only the might of Kajfik remained, and he rose to become the greatest God in the known world. He is said to be the one who will face the Great Calamity alone, and destroy him.\"\r\n },\r\n {\r\n id: \"ai992\",\r\n text: \"In recent news clashes, the warlocks have been gathering looters for raid boss. He loves his 5 hour looters and wants to show off his mighty weapon of choice, the 9th Dimension. As the two beasts battle, the 1st dimension holder needs to be careful as the first one might get the same as the 2nd one as well. Meanwhile, the raid ends its journey with a bang as the boss squanders the Explodium exploit by flooding the area with Explodium, which before his, was filled with Marsh Mice. Both are promptly annihilated by the boss' relentless claw attacks. It's a grueling job, but the raid stalwarts manage to grab the stalagm and push him across the opal Gondwan . With the boss dead and the warlocks not far behind, the warlocks try their hand at farming looters, but the grinding continues apace. Things are looking bleak for the warlocks, as the boss seeks to take advantage of the people's greed, and steal their weaponry, making them unable to use any remaining of their weapons, which are made of highly-stable antimatter. The warlocks attempt to use the no fluke policy as a weapon to smite the people, but the people take to the streets, physically attacking and mentally draining the people of all mental capacity they had been holding onto. The people resort to violence, using the 9th dimension just like they use to hold people back, but the people have faith in God that he will merciful, He will bring about a kinder and gentler time where everyone can use the last drop of their power.\"\r\n },\r\n {\r\n id: \"ai993\",\r\n text: \"What if you wanted to but I told you it would be too painful for you.\"\r\n },\r\n {\r\n id: \"ai994\",\r\n text: \"how big of numbers do you have\"\r\n },\r\n {\r\n id: \"ai995\",\r\n text: \"Just want to thank the dev team for putting so much effort into Antimatter Dimensions and the Antimatter Dimensions 2\"\r\n },\r\n {\r\n id: \"ai996\",\r\n text: \"Hevipelle has broken the 9th wall! Get ready for everything to get pretty dark.\"\r\n },\r\n {\r\n id: \"ai997\",\r\n get text() { return `The intergalactic antimatter trade has been severely disrupted, trading entire galaxies for the occasional paperclip. Cargo stands are no longer used. Oddly enough, the entire dimension has become a dumping ground for discarded plastic and other useless garbage. It's almost as if the rest of the multiverse isn't producing enough good antiparticles to feed the growing population. Unfortunately, the situation is forcing the entire multiverse to scramble to find ways to meet the growing needs of the antimatter-eating dev, who claims to have over ${format(Number.MAX_VALUE, 2)} specimens left to collect.`; }\r\n }\r\n];\r\n","export const progressStages = [\r\n /**\r\n * This is used in both the catchup modal and for cloud save comparisons. Due to the fact that it's used for\r\n * cloud comparisons, there's a lot of processing that needs to be done on raw player-like objects that aren't\r\n * actually the player object itself. This means we can't take advantage of a lot of accessors and whatnot, and\r\n * that many props which are normally Decimals are actually Strings at this point.\r\n * @template\r\n * {\r\n * @property {Number} id Value corresponding to entry in PROGRESS_STAGE enum\r\n * @property {String} name Name describing the stage of the game this entry is associated with\r\n * @property {function: @return Boolean} hasReached Checking function for whether this stage has been\r\n * reached; all checks are run in descending order, starting at the end of the list and moving upward. The\r\n * last one checked (first entry) always returns true as a catch-all condition\r\n * @property {String | function: @return Number} suggestedResource A resource or multiple resources which may be\r\n * useful for the player to aim for at this stage. It's okay to reference the player object in this prop because\r\n * it's only ever used in the catchup modal and not in the cloud save conflict checker.\r\n * @property {function: @return Number} subProgressValue A value between 0 and 1 corresponding approximately\r\n * to the progress within a stage. Values near 0 correspond to near the end of the previous stage and values\r\n * near 1 correspond to near the start of the next stage; however in-between values are not an indicator of\r\n * absolute progress and shouldn't be used as such\r\n * }\r\n */\r\n {\r\n id: PROGRESS_STAGE.PRE_INFINITY,\r\n name: \"Antimatter Production\",\r\n hasReached: () => true,\r\n suggestedResource: \"Antimatter\",\r\n // Galaxies are worth 1/3 each, boosts break ties within galaxies, and antimatter breaks ties within boosts\r\n subProgressValue: save => 0.33 * save.galaxies + 0.02 * save.dimensionBoosts +\r\n new Decimal(save.antimatter).log10() / 16000,\r\n },\r\n {\r\n id: PROGRESS_STAGE.EARLY_INFINITY,\r\n name: \"Infinity\",\r\n hasReached: save => new Decimal(save.infinities).gt(0),\r\n suggestedResource: \"Infinity Points\",\r\n // Half from infinity count, half from crunch autobuyer state\r\n subProgressValue: save => Math.clampMax(new Decimal(save.infinities).toNumber(), 500) / 1000 +\r\n Math.log10(150000 / player.auto.bigCrunch.interval) / 6.35,\r\n },\r\n {\r\n id: PROGRESS_STAGE.BREAK_INFINITY,\r\n name: \"Broken Infinity\",\r\n hasReached: save => save.auto.bigCrunch.interval <= 100,\r\n suggestedResource: \"Infinity Points\",\r\n subProgressValue: save => Math.sqrt(new Decimal(save.infinityPoints).log10() / 145),\r\n },\r\n {\r\n id: PROGRESS_STAGE.REPLICANTI,\r\n name: \"Replicanti\",\r\n hasReached: save => save.replicanti.unl,\r\n suggestedResource: \"Infinity Points\",\r\n subProgressValue: save => Math.sqrt((new Decimal(save.infinityPoints).log10() - 140) / 170),\r\n },\r\n {\r\n id: PROGRESS_STAGE.EARLY_ETERNITY,\r\n name: \"Eternity\",\r\n hasReached: save => new Decimal(save.eternities).gt(0),\r\n suggestedResource: \"Eternity Points and Eternity count\",\r\n subProgressValue: save => new Decimal(save.eternities).clampMax(1e5).toNumber() / 1e5,\r\n },\r\n {\r\n id: PROGRESS_STAGE.ETERNITY_CHALLENGES,\r\n name: \"Eternity Challenges\",\r\n hasReached: save => save.eternityChalls.eterc1 > 0,\r\n suggestedResource: \"Eternity Challenge Completions and Eternity Points\",\r\n // Half from ECs, half from EP (up to e1300)\r\n subProgressValue: save => 0.008 * Object.values(save.eternityChalls).reduce((sum, c) => sum + c, 0) +\r\n new Decimal(save.eternityPoints).log10() / 2500,\r\n },\r\n {\r\n id: PROGRESS_STAGE.EARLY_DILATION,\r\n name: \"Time Dilation\",\r\n hasReached: save => new Decimal(save.dilation.dilatedTime).gt(0),\r\n suggestedResource: \"Dilated Time\",\r\n subProgressValue: save => new Decimal(save.dilation.dilatedTime).log10() / 15,\r\n },\r\n {\r\n id: PROGRESS_STAGE.LATE_ETERNITY,\r\n name: \"Late Eternity\",\r\n hasReached: save => new Decimal(save.dilation.dilatedTime).gt(1e15),\r\n suggestedResource: () => (new Decimal(player.eternityPoints).log10() > 4000\r\n ? \"Eternity Points and/or Dilated Time. Alternatively, you can unlock and perform your first Reality\"\r\n : \"Eternity Points and/or Dilated Time\"\r\n ),\r\n // Tracks up to e8000 even though many players will reality well before that; we still want to distinguish\r\n // which saves are farther all the way up to the zeroth-reality RM cap\r\n subProgressValue: save => Math.clampMax(Math.sqrt((new Decimal(save.eternityPoints).log10() - 1300) / 6700), 1),\r\n },\r\n {\r\n id: PROGRESS_STAGE.EARLY_REALITY,\r\n name: \"Reality\",\r\n hasReached: save => save.realities > 0,\r\n // For the first few realities, we give a bit of extra suggestion just in case the player ended up taking a break\r\n // and returned in the middle of a reality while they're still relatively slow\r\n suggestedResource: () => {\r\n if (player.realities > 5) return \"Reality Machines\";\r\n const suffix = \"in your current Reality, and your Reality Machines in the long term\";\r\n if (player.eternities.eq(0)) return `Infinity Points ${suffix}`;\r\n if (player.dilation.dilatedTime.eq(0)) return `Eternity Points ${suffix}`;\r\n return `Eternity Points and/or Dilated Time ${suffix}`;\r\n },\r\n subProgressValue: save => Math.clampMax(save.realities / 100, 1),\r\n },\r\n {\r\n id: PROGRESS_STAGE.TERESA,\r\n name: \"Teresa (1st Celestial)\",\r\n hasReached: save => save.celestials?.teresa?.quoteBits > 0,\r\n suggestedResource: \"Reality Machines\",\r\n subProgressValue: save => Math.log10(1 + save.celestials.teresa.pouredAmount) / 21,\r\n },\r\n {\r\n id: PROGRESS_STAGE.EFFARIG,\r\n name: \"Effarig (2nd Celestial)\",\r\n hasReached: save => save.celestials?.effarig?.quoteBits > 0,\r\n suggestedResource: \"Reality Machines and Relic Shards\",\r\n subProgressValue: save => Math.log10(1 + save.celestials.effarig.relicShards) / 14,\r\n },\r\n {\r\n id: PROGRESS_STAGE.ENSLAVED,\r\n name: \"The Nameless Ones (3rd Celestial)\",\r\n hasReached: save => save.celestials?.enslaved?.quoteBits > 0,\r\n suggestedResource: \"Reality Machines and Glyph Level\",\r\n subProgressValue: save => Math.sqrt((new Decimal(save.reality.realityMachines).log10() - 30) / 30),\r\n },\r\n {\r\n id: PROGRESS_STAGE.V,\r\n name: \"V (4th Celestial)\",\r\n hasReached: save => save.celestials?.v?.quoteBits > 0,\r\n suggestedResource: \"Number of V-Achievements\",\r\n subProgressValue: save => 0.0277 * Object.values(save.celestials.v.runUnlocks)\r\n .reduce((total, ach) => total + ach, 0),\r\n },\r\n {\r\n id: PROGRESS_STAGE.RA,\r\n name: \"Ra (5th Celestial)\",\r\n hasReached: save => save.celestials?.ra?.quoteBits > 0,\r\n suggestedResource: \"Celestial Memories\",\r\n subProgressValue: save => Object.values(save.celestials.ra.pets).reduce((sum, pet) => sum + pet.level, 0) / 100,\r\n },\r\n {\r\n id: PROGRESS_STAGE.IMAGINARY_MACHINES,\r\n name: \"Imaginary Machines\",\r\n hasReached: save => save.reality?.iMCap > 0,\r\n suggestedResource: \"Imaginary Machines\",\r\n subProgressValue: save => Math.log10(1 + save.reality.iMCap) / 9,\r\n },\r\n {\r\n id: PROGRESS_STAGE.LAITELA,\r\n name: \"Lai'tela (6th Celestial)\",\r\n hasReached: save => save.celestials?.laitela?.quoteBits > 0,\r\n suggestedResource: \"Dark Matter and Singularities\",\r\n subProgressValue: save => new Decimal(save.celestials.laitela.darkMatter).log10() / 308.25,\r\n },\r\n {\r\n id: PROGRESS_STAGE.PELLE,\r\n name: \"Pelle (7th Celestial)\",\r\n hasReached: save => save.celestials?.pelle?.doomed,\r\n suggestedResource: \"Remnants\",\r\n subProgressValue: save => Math.log10(1 + save.celestials.pelle.remnants) / 9,\r\n },\r\n {\r\n id: PROGRESS_STAGE.MENDING,\r\n name: \"Mending\",\r\n hasReached: () => PlayerProgress.mendingUnlocked(),\r\n suggestedResource: \"Multiversal Remains\"\r\n },\r\n];\r\n","import { STEAM } from \"@/env\";\r\n\r\n// NOTE: IF ANY COSTS ARE CHANGED HERE, THEY ALSO NEED TO BE CHANGED ON THE BACKEND TOO\r\nexport const shopPurchases = {\r\n dimPurchases: {\r\n key: \"dimPurchases\",\r\n cost: 30,\r\n description: \"Double all your Antimatter Dimension multipliers. Forever.\",\r\n multiplier: purchases => Math.pow(2, purchases),\r\n formatEffect: x => `×${x > 1000 ? Notation.scientific.formatDecimal(new Decimal(x), 2) : x.toFixed(0)}`,\r\n },\r\n allDimPurchases: {\r\n key: \"allDimPurchases\",\r\n cost: 60,\r\n description: () => {\r\n const dims = [\"Antimatter\"];\r\n if (InfinityDimension(1).isUnlocked || PlayerProgress.eternityUnlocked()) dims.push(\"Infinity\");\r\n if (PlayerProgress.eternityUnlocked()) dims.push(\"Time\");\r\n return `Double ALL Dimension multipliers (${makeEnumeration(dims)}; multiplicative until 32x). Forever.`;\r\n },\r\n multiplier: purchases => (purchases > 4 ? 32 + (purchases - 5) * 2 : Math.pow(2, purchases)),\r\n formatEffect: x => `×${x.toFixed(0)}`,\r\n },\r\n IPPurchases: {\r\n key: \"IPPurchases\",\r\n cost: 40,\r\n description: \"Double your Infinity Point gain from all sources. (additive)\",\r\n multiplier: purchases => (purchases === 0 ? 1 : 2 * purchases),\r\n formatEffect: x => `×${x.toFixed(0)}`,\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n lockText: \"Infinity\",\r\n },\r\n replicantiPurchases: {\r\n key: \"replicantiPurchases\",\r\n cost: 60,\r\n description: \"Increase your Replicanti gain by 50%. (additive)\",\r\n multiplier: purchases => (purchases === 0 ? 1 : 1 + 0.5 * purchases),\r\n formatEffect: x => `×${x.toFixed(1)}`,\r\n isUnlocked: () => Replicanti.areUnlocked || PlayerProgress.eternityUnlocked(),\r\n lockText: \"Replicanti\",\r\n },\r\n EPPurchases: {\r\n key: \"EPPurchases\",\r\n cost: 50,\r\n description: \"Triple your Eternity Point gain from all sources. (additive)\",\r\n multiplier: purchases => (purchases === 0 ? 1 : 3 * purchases),\r\n formatEffect: x => `×${x.toFixed(0)}`,\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n lockText: \"Eternity\",\r\n },\r\n dilatedTimePurchases: {\r\n key: \"dilatedTimePurchases\",\r\n cost: 40,\r\n description: \"Increase your Dilated Time gain by 50%. (additive)\",\r\n multiplier: purchases => (purchases === 0 ? 1 : 1 + 0.5 * purchases),\r\n formatEffect: x => `×${x.toFixed(1)}`,\r\n isUnlocked: () => PlayerProgress.dilationUnlocked() || PlayerProgress.realityUnlocked(),\r\n lockText: \"Dilation\",\r\n },\r\n RMPurchases: {\r\n key: \"RMPurchases\",\r\n cost: 60,\r\n description: \"Increase your Reality Machine gain by 100%. (additive)\",\r\n multiplier: purchases => purchases + 1,\r\n formatEffect: x => `×${x.toFixed(0)}`,\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n lockText: \"Reality\",\r\n },\r\n smallTimeSkip: {\r\n key: \"smallTimeSkip\",\r\n cost: 10,\r\n description: \"Get 6 hours worth of offline production. (Autobuyers don't work at full speed)\",\r\n instantPurchase: true,\r\n onPurchase: () => {\r\n shop.purchaseTimeSkip();\r\n }\r\n },\r\n bigTimeSkip: {\r\n key: \"bigTimeSkip\",\r\n cost: 20,\r\n description: \"Get 24 hours worth of offline production. (Autobuyers don't work at full speed)\",\r\n instantPurchase: true,\r\n onPurchase: () => {\r\n shop.purchaseLongerTimeSkip();\r\n }\r\n },\r\n singleCosmeticSet: {\r\n key: \"singleCosmeticSet\",\r\n cost: 20,\r\n description: \"Unlock a Glyph cosmetic set of your choice\",\r\n instantPurchase: true,\r\n onPurchase: () => {\r\n // The actual unlocks are handled in the ShopPurchaseData object, so we just show notifications here\r\n GameUI.notify.info(\r\n `You have purchased the \"${GlyphAppearanceHandler.chosenFromModal.name}\" Set for Glyph cosmetics!`,\r\n 10000);\r\n GlyphAppearanceHandler.chosenFromModal = null;\r\n GlyphAppearanceHandler.applyNotification();\r\n },\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n lockText: \"Reality\",\r\n },\r\n allCosmeticSets: {\r\n key: \"allCosmeticSets\",\r\n cost: () => {\r\n // Both of these are also on the payment backend, which would need to be changed as well\r\n const baseCost = 420;\r\n const totalSets = Object.keys(GameDatabase.reality.glyphCosmeticSets).length;\r\n\r\n // Using this instead of the actual set count maintains consistency with the backend price,\r\n // at the cost of the frontend UI being wrong for cheated saves\r\n const currentSetCount = GlyphAppearanceHandler.expectedSetCount;\r\n return Math.floor(baseCost * (totalSets - currentSetCount) / totalSets);\r\n },\r\n description: \"Unlock all remaining Glyph cosmetic sets at once\",\r\n instantPurchase: true,\r\n onPurchase: () => {\r\n // The actual unlocks are handled in the ShopPurchaseData object, so we just show notifications here\r\n GameUI.notify.info(`You have unlocked all sets for Glyph cosmetics!`, 15000);\r\n GlyphAppearanceHandler.applyNotification();\r\n },\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n lockText: \"Reality\",\r\n },\r\n};\r\n\r\nif (STEAM) {\r\n delete shopPurchases.allCosmeticSets;\r\n}\r\n","export const speedrunMilestones = [\r\n {\r\n id: 1,\r\n key: \"firstBoost\",\r\n name: \"First Dimboost\",\r\n description: \"Get your first Dimboost\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.DIMBOOST_AFTER,\r\n },\r\n {\r\n id: 2,\r\n key: \"firstGalaxy\",\r\n name: \"First Galaxy\",\r\n description: \"Get your first Galaxy\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,\r\n },\r\n {\r\n id: 3,\r\n key: \"firstInfinity\",\r\n name: \"First Infinity\",\r\n description: \"Complete your first Infinity\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER,\r\n },\r\n {\r\n id: 4,\r\n key: \"completeC9\",\r\n name: \"Tickspeed Challenge\",\r\n description: \"Complete the Tickspeed Autobuyer Challenge\",\r\n checkRequirement: () => NormalChallenge(9).isCompleted,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER,\r\n },\r\n {\r\n id: 5,\r\n key: \"completeAllNC\",\r\n name: \"All Normal Challenges\",\r\n description: \"Complete all Normal Challenges\",\r\n checkRequirement: () => NormalChallenges.all.countWhere(c => !c.isCompleted) === 0,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER,\r\n },\r\n {\r\n id: 6,\r\n key: \"breakInfinity\",\r\n name: \"Break Infinity\",\r\n description: \"Break Infinity for the first time\",\r\n checkRequirement: () => player.break,\r\n checkEvent: GAME_EVENT.BREAK_INFINITY,\r\n },\r\n {\r\n id: 7,\r\n key: \"upgrade5e11IP\",\r\n get name() { return `${format(5e11)} IP Upgrade`; },\r\n description: () => `Purchase the ${formatPercents(0.5)} stronger Galaxies upgrade`,\r\n checkRequirement: () => true,\r\n // This is checked within BreakInfinityUpgrade.onPurchased\r\n },\r\n {\r\n id: 8,\r\n key: \"completeIC5\",\r\n name: \"Infinity Challenge 5\",\r\n description: \"Complete Infinity Challenge 5\",\r\n checkRequirement: () => InfinityChallenge(5).isCompleted,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER,\r\n },\r\n {\r\n id: 9,\r\n key: \"unlockReplicanti\",\r\n name: \"Replicanti\",\r\n description: \"Unlock Replicanti\",\r\n checkRequirement: () => player.replicanti.unl,\r\n checkEvent: GAME_EVENT.REPLICANTI_TICK_AFTER,\r\n },\r\n {\r\n id: 10,\r\n key: \"firstEternity\",\r\n name: \"First Eternity\",\r\n description: \"Complete your first Eternity\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n },\r\n {\r\n id: 11,\r\n key: \"allEternityMilestones\",\r\n name: \"All Eternity Milestones\",\r\n description: \"Unlock all Eternity Milestones\",\r\n checkRequirement: () => EternityMilestone.all.every(m => m.isReached),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n },\r\n {\r\n id: 12,\r\n key: \"completeFirstEC\",\r\n name: \"First Eternity Challenge\",\r\n description: \"Complete any tier of an Eternity Challenge\",\r\n checkRequirement: () => EternityChallenges.completions > 0,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n },\r\n {\r\n id: 13,\r\n key: \"completeEC10\",\r\n name: \"Eternity Challenge 10\",\r\n description: \"Complete Eternity Challenge 10 for the first time\",\r\n checkRequirement: () => EternityChallenge(10).completions > 0,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n },\r\n {\r\n id: 14,\r\n key: \"firstDilation\",\r\n name: \"First Dilated Eternity\",\r\n description: \"Complete a Dilated Eternity for the first time\",\r\n checkRequirement: () => player.dilation.active,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n },\r\n {\r\n id: 15,\r\n key: \"upgradeTTgen\",\r\n name: \"Time Theorem Generation\",\r\n description: \"Purchase the Time Theorem Generation Dilation Upgrade\",\r\n checkRequirement: () => true,\r\n // This is checked within DilationUpgradeState.onPurchased\r\n },\r\n {\r\n id: 16,\r\n key: \"firstReality\",\r\n name: \"First Reality\",\r\n description: \"Complete your first Reality\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.REALITY_RESET_AFTER,\r\n },\r\n {\r\n id: 17,\r\n key: \"upgradeBlackHole\",\r\n name: \"Black Hole\",\r\n description: \"Unlock the Black Hole\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.BLACK_HOLE_UNLOCKED,\r\n },\r\n {\r\n id: 18,\r\n key: \"allRealityUpgrades\",\r\n name: \"All Reality Upgrades\",\r\n description: \"Purchase all Reality Upgrades\",\r\n checkRequirement: () => RealityUpgrades.allBought,\r\n checkEvent: GAME_EVENT.REALITY_UPGRADE_BOUGHT,\r\n },\r\n {\r\n id: 19,\r\n key: \"completeTeresaReality\",\r\n name: \"Teresa's Reality\",\r\n description: \"Complete Teresa's Reality\",\r\n checkRequirement: () => Teresa.isRunning,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n },\r\n {\r\n id: 20,\r\n key: \"completeEffarigReality\",\r\n name: \"Effarig's Reality\",\r\n description: \"Complete all tiers of Effarig's Reality\",\r\n checkRequirement: () => Effarig.currentStage === EFFARIG_STAGES.COMPLETED,\r\n checkEvent: GAME_EVENT.REALITY_RESET_AFTER,\r\n },\r\n {\r\n id: 21,\r\n key: \"completeEnslavedReality\",\r\n name: \"The Nameless Ones' Reality\",\r\n description: \"Complete The Nameless Ones' Reality\",\r\n checkRequirement: () => Enslaved.isRunning,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n },\r\n {\r\n id: 22,\r\n key: \"complete36VAchievement\",\r\n name: \"All basic V-Achievements\",\r\n description: () => `Complete ${formatInt(36)} V-Achievements`,\r\n checkRequirement: () => true,\r\n // In order to avoid unnecessary overhead, this is checked within V.checkForUnlocks instead of every tick\r\n },\r\n {\r\n id: 23,\r\n key: \"completeRaMemories\",\r\n name: \"Regain Ra's Memories\",\r\n description: \"Regain all of Ra's Celestial Memories\",\r\n checkRequirement: () => Ra.totalPetLevel >= Ra.maxTotalPetLevel,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n },\r\n {\r\n id: 24,\r\n key: \"completeFullDestabilize\",\r\n name: \"Full Destabilization\",\r\n description: \"Disable all Dimensions within Lai'tela's Reality\",\r\n checkRequirement: () => Laitela.isFullyDestabilized,\r\n // Destabilization isn't a reality reset because it shortcuts gameLoop; this is checked in laitelaRealityTick\r\n },\r\n {\r\n id: 25,\r\n key: \"completeVanillaGame\",\r\n name: \"First Mend\",\r\n description: \"Mend the Multiverse\",\r\n checkRequirement: () => PlayerProgress.mendingUnlocked(),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n },\r\n {\r\n id: 26,\r\n key: \"warpReality\",\r\n name: \"Warp Reality\",\r\n description: \"Warp Reality for the first time\",\r\n checkRequirement: () => player.reality.warped,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n },\r\n];\r\n","import { DC } from \"../constants\";\r\n\r\nexport const tabNotifications = {\r\n firstInfinity: {\r\n id: 0,\r\n tabsToHighLight: [\r\n {\r\n parent: \"infinity\",\r\n tab: \"upgrades\"\r\n },\r\n {\r\n parent: \"challenges\",\r\n tab: \"normal\"\r\n },\r\n {\r\n parent: \"statistics\",\r\n tab: \"multipliers\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() &&\r\n !PlayerProgress.eternityUnlocked() &&\r\n !PlayerProgress.infinityUnlocked(),\r\n events: [GAME_EVENT.BIG_CRUNCH_BEFORE]\r\n },\r\n breakInfinity: {\r\n id: 1,\r\n tabsToHighLight: [\r\n {\r\n parent: \"infinity\",\r\n tab: \"break\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() &&\r\n !PlayerProgress.eternityUnlocked() && Autobuyer.bigCrunch.hasMaxedInterval\r\n },\r\n IDUnlock: {\r\n id: 2,\r\n tabsToHighLight: [\r\n {\r\n parent: \"dimensions\",\r\n tab: \"infinity\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() &&\r\n !PlayerProgress.eternityUnlocked() && !InfinityDimension(2).isUnlocked\r\n },\r\n ICUnlock: {\r\n id: 3,\r\n tabsToHighLight: [\r\n {\r\n parent: \"challenges\",\r\n tab: \"infinity\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() &&\r\n !PlayerProgress.eternityUnlocked()\r\n },\r\n replicanti: {\r\n id: 4,\r\n tabsToHighLight: [\r\n {\r\n parent: \"infinity\",\r\n tab: \"replicanti\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() &&\r\n !PlayerProgress.eternityUnlocked() && Currency.infinityPoints.gte(DC.E140),\r\n events: [GAME_EVENT.BIG_CRUNCH_AFTER]\r\n },\r\n firstEternity: {\r\n id: 5,\r\n tabsToHighLight: [\r\n {\r\n parent: \"eternity\",\r\n tab: \"studies\"\r\n },\r\n {\r\n parent: \"eternity\",\r\n tab: \"milestones\"\r\n },\r\n {\r\n parent: \"eternity\",\r\n tab: \"upgrades\"\r\n },\r\n {\r\n parent: \"dimensions\",\r\n tab: \"time\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() &&\r\n !PlayerProgress.eternityUnlocked(),\r\n events: [GAME_EVENT.ETERNITY_RESET_BEFORE]\r\n },\r\n dilationAfterUnlock: {\r\n id: 6,\r\n tabsToHighLight: [\r\n {\r\n parent: \"eternity\",\r\n tab: \"dilation\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked()\r\n },\r\n realityUnlock: {\r\n id: 7,\r\n tabsToHighLight: [\r\n {\r\n parent: \"eternity\",\r\n tab: \"studies\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() && TimeStudy.reality.canBeBought,\r\n events: [GAME_EVENT.ETERNITY_RESET_AFTER, GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION,\r\n GAME_EVENT.OFFLINE_CURRENCY_GAINED, GAME_EVENT.ACHIEVEMENT_UNLOCKED]\r\n },\r\n blackHoleUnlock: {\r\n id: 8,\r\n tabsToHighLight: [\r\n {\r\n parent: \"reality\",\r\n tab: \"hole\"\r\n }\r\n ],\r\n condition: () => !BlackHoles.areUnlocked && Currency.realityMachines.gte(100),\r\n events: [GAME_EVENT.REALITY_RESET_AFTER]\r\n },\r\n automatorUnlock: {\r\n id: 9,\r\n tabsToHighLight: [\r\n {\r\n parent: \"automation\",\r\n tab: \"automator\"\r\n }\r\n ],\r\n condition: () => Player.automatorUnlocked,\r\n events: [GAME_EVENT.REALITY_RESET_AFTER]\r\n },\r\n teresaUnlock: {\r\n id: 10,\r\n tabsToHighLight: [\r\n {\r\n parent: \"celestials\",\r\n tab: \"celestial-navigation\"\r\n },\r\n {\r\n parent: \"celestials\",\r\n tab: \"teresa\"\r\n }\r\n ],\r\n condition: () => player.celestials.teresa.pouredAmount === 0 && Teresa.isUnlocked,\r\n events: [GAME_EVENT.REALITY_UPGRADE_BOUGHT]\r\n },\r\n alchemyUnlock: {\r\n id: 11,\r\n tabsToHighLight: [\r\n {\r\n parent: \"reality\",\r\n tab: \"glyphs\"\r\n },\r\n {\r\n parent: \"reality\",\r\n tab: \"alchemy\"\r\n }\r\n ],\r\n condition: () => player.celestials.ra.pets.effarig.level >= 2,\r\n events: [GAME_EVENT.GAME_TICK_AFTER]\r\n },\r\n newAutobuyer: {\r\n id: 12,\r\n tabsToHighLight: [\r\n {\r\n parent: \"automation\",\r\n tab: \"autobuyers\"\r\n },\r\n ],\r\n // Always externally triggered, but needs to be ignored in cel7 because they're unlocked differently\r\n condition: () => !Pelle.isDoomed,\r\n },\r\n imaginaryMachineUnlock: {\r\n id: 13,\r\n tabsToHighLight: [\r\n {\r\n parent: \"reality\",\r\n tab: \"imag_upgrades\"\r\n }\r\n ],\r\n condition: () => MachineHandler.isIMUnlocked,\r\n events: [GAME_EVENT.GAME_TICK_AFTER]\r\n },\r\n laitelaUnlock: {\r\n id: 14,\r\n tabsToHighLight: [\r\n {\r\n parent: \"celestials\",\r\n tab: \"laitela\"\r\n },\r\n ],\r\n // Always externally triggered\r\n condition: () => true,\r\n },\r\n pelleUnlock: {\r\n id: 15,\r\n tabsToHighLight: [\r\n {\r\n parent: \"celestials\",\r\n tab: \"pelle\"\r\n },\r\n ],\r\n // Always externally triggered\r\n condition: () => true,\r\n },\r\n newGlyphCosmetic: {\r\n id: 16,\r\n tabsToHighLight: [\r\n {\r\n parent: \"reality\",\r\n tab: \"glyphs\",\r\n },\r\n ],\r\n // Always externally triggered\r\n condition: () => true,\r\n },\r\n};\r\n","import { PlayerProgress } from \"../player-progress\";\r\n\r\nexport const tabs = [\r\n {\r\n key: \"dimensions\",\r\n name: \"Dimensions\",\r\n hideAt: 2.9,\r\n id: 0,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"antimatter\",\r\n name: \"Antimatter Dimensions\",\r\n symbol: \"Ω\",\r\n component: \"AntimatterDimensionsTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"infinity\",\r\n name: \"Infinity Dimensions\",\r\n hideAt: 2.7,\r\n symbol: \"∞\",\r\n component: \"InfinityDimensionsTab\",\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked() ||\r\n InfinityDimension(1).isUnlocked,\r\n id: 1,\r\n hidable: true,\r\n },\r\n {\r\n key: \"time\",\r\n name: \"Time Dimensions\",\r\n hideAt: 2.6,\r\n symbol: \"Δ\",\r\n component: \"TimeDimensionsTab\",\r\n condition: () => PlayerProgress.eternityUnlocked(),\r\n id: 2,\r\n hidable: true,\r\n },\r\n {\r\n key: \"multiversal\",\r\n name: \"Multiversal Dimensions\",\r\n symbol: \"?\",\r\n component: \"MultiversalDimensionsTab\",\r\n id: 3,\r\n condition: () => Ra.unlocks.unlockMultiversalDimensions.isUnlocked,\r\n hidable: true,\r\n },\r\n ]\r\n },\r\n {\r\n key: \"options\",\r\n name: \"Options\",\r\n hideAt: 1.6,\r\n id: 1,\r\n hidable: false,\r\n subtabs: [\r\n {\r\n key: \"saving\",\r\n name: \"Saving\",\r\n symbol: \"\",\r\n component: \"OptionsSavingTab\",\r\n id: 0,\r\n hidable: false,\r\n },\r\n {\r\n key: \"visual\",\r\n name: \"Visual\",\r\n symbol: \"\",\r\n component: \"OptionsVisualTab\",\r\n id: 1,\r\n hidable: false,\r\n },\r\n {\r\n key: \"gameplay\",\r\n name: \"Gameplay\",\r\n symbol: \"\",\r\n component: \"OptionsGameplayTab\",\r\n id: 2,\r\n hidable: false,\r\n }\r\n ]\r\n },\r\n {\r\n key: \"statistics\",\r\n name: \"Statistics\",\r\n hideAt: 1.7,\r\n id: 2,\r\n //condition: () => false,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"statistics\",\r\n name: \"Statistics\",\r\n symbol: \"\",\r\n component: \"StatisticsTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"challenges\",\r\n name: \"Challenge records\",\r\n symbol: \"\",\r\n component: \"ChallengeRecordsTab\",\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked() ||\r\n PlayerProgress.challengeCompleted(),\r\n id: 1,\r\n hidable: true,\r\n },\r\n {\r\n key: \"prestige runs\",\r\n name: \"Past Prestige Runs\",\r\n symbol: \"\",\r\n component: \"PastPrestigeRunsTab\",\r\n condition: () => PlayerProgress.mendingUnlocked() || PlayerProgress.infinityUnlocked(),\r\n id: 2,\r\n hidable: true,\r\n },\r\n {\r\n key: \"multipliers\",\r\n name: \"Multiplier Breakdown\",\r\n symbol: \"\",\r\n component: \"MultiplierBreakdownTab\",\r\n condition: () => PlayerProgress.mendingUnlocked() || PlayerProgress.infinityUnlocked(),\r\n id: 3,\r\n hidable: true,\r\n },\r\n {\r\n key: \"glyph sets\",\r\n name: \"Glyph Set Records\",\r\n symbol: \"\",\r\n component: \"GlyphSetRecordsTab\",\r\n condition: () => PlayerProgress.mendingUnlocked() || PlayerProgress.realityUnlocked(),\r\n id: 4,\r\n hidable: true,\r\n },\r\n {\r\n key: \"speedrun milestones\",\r\n name: \"Speedrun Milestones\",\r\n symbol: \"\",\r\n component: \"SpeedrunMilestonesTab\",\r\n condition: () => player.speedrun.isActive,\r\n id: 5,\r\n hidable: true,\r\n },\r\n {\r\n key: \"speedrun records\",\r\n name: \"Speedrun Records\",\r\n symbol: \"\",\r\n component: \"PreviousSpeedrunTab\",\r\n condition: () => Object.keys(player.speedrun.previousRuns).length > 0,\r\n id: 6,\r\n hidable: true,\r\n },\r\n ]\r\n },\r\n {\r\n key: \"achievements\",\r\n name: \"Achievements\",\r\n hideAt: 1.9,\r\n id: 3,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"normal\",\r\n name: \"Achievements\",\r\n symbol: \"\",\r\n component: \"NormalAchievementsTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"secret\",\r\n name: \"Secret Achievements\",\r\n symbol: \"\",\r\n component: \"SecretAchievementTab\",\r\n id: 1,\r\n hidable: true,\r\n }\r\n ]\r\n },\r\n {\r\n key: \"automation\",\r\n name: \"Automation\",\r\n id: 4,\r\n hideAt: 2.1,\r\n condition: () => player.records.totalAntimatter.gte(1e40) || PlayerProgress.mendingUnlocked(),\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"autobuyers\",\r\n name: \"Autobuyers\",\r\n symbol: \"\",\r\n component: \"AutobuyersTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"automator\",\r\n name: \"Automator\",\r\n symbol: \"\",\r\n component: \"AutomatorTab\",\r\n condition: () => PlayerProgress.realityUnlocked() || PlayerProgress.mendingUnlocked(),\r\n id: 1,\r\n hidable: true,\r\n },\r\n ]\r\n },\r\n {\r\n key: \"challenges\",\r\n name: \"Challenges\",\r\n hideAt: 2,\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked() ||\r\n PlayerProgress.infinityUnlocked(),\r\n id: 5,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"normal\",\r\n name: \"Challenges\",\r\n symbol: \"Ω\",\r\n component: \"NormalChallengesTab\",\r\n id: 0,\r\n hidable: true\r\n },\r\n {\r\n key: \"infinity\",\r\n name: \"Infinity Challenges\",\r\n symbol: \"∞\",\r\n component: \"infinity-challenges-tab\",\r\n condition: () => \r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.hasBroken() || \r\n Pelle.isDoomed,\r\n id: 1,\r\n hidable: true\r\n },\r\n {\r\n key: \"eternity\",\r\n name: \"Eternity Challenges\",\r\n symbol: \"Δ\",\r\n component: \"eternity-challenges-tab\",\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n player.challenge.eternity.unlocked !== 0 ||\r\n EternityChallenges.all.some(ec => ec.completions > 0),\r\n id: 2,\r\n hidable: true\r\n }\r\n ],\r\n },\r\n {\r\n key: \"infinity\",\r\n name: \"Infinity\",\r\n hideAt: 2.2,\r\n UIClass: \"o-tab-btn--infinity\",\r\n before: \"InfinityPointsHeader\",\r\n id: 6,\r\n condition: () => PlayerProgress.infinityUnlocked(),\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"upgrades\",\r\n name: \"Infinity Upgrades\",\r\n symbol: \"\",\r\n component: \"InfinityUpgradesTab\",\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked() ||\r\n PlayerProgress.infinityUnlocked(),\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"break\",\r\n name: \"Break Infinity\",\r\n symbol: \"∝\",\r\n component: \"BreakInfinityTab\",\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked() ||\r\n PlayerProgress.infinityUnlocked(),\r\n id: 1,\r\n hidable: true,\r\n },\r\n {\r\n key: \"replicanti\",\r\n name: \"Replicanti\",\r\n symbol: \"Ξ\",\r\n component: \"ReplicantiTab\",\r\n condition: () =>\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked() ||\r\n PlayerProgress.infinityUnlocked(),\r\n id: 2,\r\n hidable: true,\r\n }\r\n ],\r\n },\r\n {\r\n key: \"eternity\",\r\n name: \"Eternity\",\r\n hideAt: 1.8,\r\n UIClass: \"o-tab-btn--eternity\",\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked(),\r\n before: \"EternityPointsHeader\",\r\n id: 7,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"studies\",\r\n name: \"Time Studies\",\r\n symbol: \"\",\r\n component: \"TimeStudiesTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"upgrades\",\r\n name: \"Eternity Upgrades\",\r\n symbol: \"\",\r\n component: \"EternityUpgradesTab\",\r\n id: 1,\r\n hidable: true,\r\n },\r\n {\r\n key: \"milestones\",\r\n name: \"Eternity Milestones\",\r\n symbol: \"\",\r\n component: \"EternityMilestonesTab\",\r\n id: 2,\r\n hidable: true,\r\n },\r\n {\r\n key: \"dilation\",\r\n name: \"Time Dilation\",\r\n symbol: \"Ψ\",\r\n component: \"TimeDilationTab\",\r\n condition: () => PlayerProgress.mendingUnlocked() || PlayerProgress.dilationUnlocked() || PlayerProgress.realityUnlocked(),\r\n id: 3,\r\n hidable: true,\r\n }\r\n ],\r\n },\r\n {\r\n key: \"reality\",\r\n name: \"Reality\",\r\n hideAt: 2.3,\r\n UIClass: \"o-tab-btn--reality\",\r\n condition: () => PlayerProgress.mendingUnlocked() || PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought,\r\n id: 8,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"glyphs\",\r\n name: \"Glyphs\",\r\n symbol: \"\",\r\n component: \"GlyphsTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"upgrades\",\r\n name: \"Reality Upgrades\",\r\n symbol: \"\",\r\n component: \"RealityUpgradesTab\",\r\n id: 1,\r\n hidable: true,\r\n },\r\n {\r\n key: \"imag_upgrades\",\r\n name: \"Imaginary Upgrades\",\r\n symbol: \"\",\r\n component: \"ImaginaryUpgradesTab\",\r\n condition: () => MachineHandler.isIMUnlocked || PlayerProgress.mendingUnlocked(),\r\n id: 2,\r\n hidable: true,\r\n },\r\n {\r\n key: \"perks\",\r\n name: \"Perks\",\r\n symbol: \"\",\r\n component: \"PerksTab\",\r\n id: 3,\r\n hidable: true,\r\n },\r\n {\r\n key: \"hole\",\r\n name: \"Black Hole\",\r\n symbol: \"\",\r\n component: \"BlackHoleTab\",\r\n condition: () => PlayerProgress.mendingUnlocked() || PlayerProgress.realityUnlocked(),\r\n id: 4,\r\n hidable: true,\r\n },\r\n {\r\n key: \"alchemy\",\r\n name: \"Glyph Alchemy\",\r\n symbol: \"\",\r\n component: \"AlchemyTab\",\r\n condition: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied || PlayerProgress.mendingUnlocked(),\r\n id: 5,\r\n hidable: true,\r\n },\r\n ],\r\n },\r\n {\r\n key: \"celestials\",\r\n name: \"Celestials\",\r\n hideAt: 2.4,\r\n UIClass: \"o-tab-btn--celestial\",\r\n condition: () => Teresa.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n id: 9,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"celestial-navigation\",\r\n name: \"Celestial Navigation\",\r\n symbol: \"\",\r\n component: \"CelestialNavigationTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"teresa\",\r\n name: \"Teresa\",\r\n symbol: \"Ϟ\",\r\n component: \"TeresaTab\",\r\n id: 1,\r\n hidable: true,\r\n condition: () => Teresa.isUnlocked \r\n },\r\n {\r\n key: \"effarig\",\r\n name: \"Effarig\",\r\n symbol: \"Ϙ\",\r\n component: \"EffarigTab\",\r\n condition: () => TeresaUnlocks.effarig.isUnlocked,\r\n id: 2,\r\n hidable: true,\r\n },\r\n {\r\n key: \"enslaved\",\r\n name: \"The Nameless Ones\",\r\n symbol: \"
\\uf0c1
\",\r\n component: \"EnslavedTab\",\r\n condition: () => EffarigUnlock.eternity.isUnlocked,\r\n id: 3,\r\n hidable: true,\r\n },\r\n {\r\n key: \"v\",\r\n name: \"V\",\r\n symbol: \"⌬\",\r\n component: \"VTab\",\r\n condition: () => Achievement(151).isUnlocked && EffarigUnlock.eternity.isUnlocked,\r\n id: 4,\r\n hidable: true,\r\n },\r\n {\r\n key: \"ra\",\r\n name: \"Ra\",\r\n symbol: \"\",\r\n component: \"RaTab\",\r\n condition: () => (VUnlocks.raUnlock.isUnlocked && EffarigUnlock.eternity.isUnlocked) || Ra.unlocks.raNoReset.isUnlocked,\r\n id: 5,\r\n hidable: true,\r\n },\r\n {\r\n key: \"laitela\",\r\n name: \"Lai'tela\",\r\n symbol: \"ᛝ\",\r\n component: \"LaitelaTab\",\r\n condition: () => Laitela.isUnlocked,\r\n id: 6,\r\n hidable: true,\r\n },\r\n {\r\n key: \"pelle\",\r\n name: \"Pelle\",\r\n symbol: \"♅\",\r\n component: \"PelleTab\",\r\n condition: () => Pelle.isUnlocked,\r\n id: 7,\r\n hidable: true,\r\n }\r\n ]\r\n },\r\n {\r\n key: \"mending\",\r\n name: \"Mending\",\r\n hideAt: 2.7, //Sequence is disabled\r\n UIClass: \"o-tab-btn--mending\",\r\n condition: () => PlayerProgress.mendingUnlocked(),\r\n id: 10,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"mendupgrades\",\r\n name: \"Mending Upgrades\",\r\n symbol: \"\",\r\n component: \"MendingUpgrades\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"mendmilestones\",\r\n name: \"Mending Milestones\",\r\n symbol: \"\",\r\n component: \"MendingMilestones\",\r\n id: 1,\r\n hidable: true,\r\n },\r\n {\r\n key: \"warpreality\",\r\n name: \"Warp Reality\",\r\n symbol: \"Ϟ\",\r\n component: \"WarpReality\",\r\n id: 2,\r\n hidable: true,\r\n },\r\n {\r\n key: \"corruption\",\r\n name: \"Hostilities\",\r\n symbol: ``,\r\n component: \"CorruptionTab\",\r\n id: 3,\r\n hidable: true,\r\n condition: () => Ra.unlocks.Hostility.isUnlocked,\r\n },\r\n {\r\n key: \"kohlerrealm\",\r\n name: \"Kohler's Realm\",\r\n symbol: \"\",\r\n component: \"KohlersRealm\",\r\n id: 4,\r\n hidable: true,\r\n condition: () => Ra.unlocks.kohlersRealmUnlock.isUnlocked,\r\n },\r\n ]\r\n },\r\n {\r\n key: \"shop\",\r\n name: \"Shop\",\r\n ModernUIClass: \"shop\",\r\n hideAt: 1.5,\r\n condition: () => true,\r\n id: 11,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"shop\",\r\n name: \"Shop\",\r\n symbol: \"$\",\r\n component: \"ShopTab\",\r\n id: 0,\r\n hidable: true\r\n }\r\n ]\r\n }\r\n];\r\n","import { DC } from \"../../constants\";\r\n\r\nconst rebuyable = props => {\r\n props.cost = () => getHybridCostScaling(\r\n player.mending.rebuyables[props.id],\r\n 1e30,\r\n props.initialCost,\r\n props.costMult,\r\n props.costMult / 10,\r\n DC.E309,\r\n 1e3,\r\n props.initialCost * props.costMult\r\n );\r\n const { effect, effectType } = props;\r\n props.effect = () =>{ \r\n if (props.effectType === \"+\" || props.effectType === \"-\"){\r\n return effect * player.mending.rebuyables[props.id];\r\n }\r\n return Math.pow(effect, player.mending.rebuyables[props.id]);\r\n }\r\n props.description = () => props.id == 11 ? props.textTemplate.replace(\"{value}\", formatFloat(effect, 3)): props.textTemplate.replace(\"{value}\", formatInt(effect));\r\n props.formatEffect = value => {\r\n if (props.id === 6 || props.id === 16) return effectType + `${formatInt(value)}`\r\n if (props.id === 11) return effectType + `${formatFloat(value, 3)}`\r\n return effectType + `${format(value, 2, 0)}`\r\n };\r\n props.formatCost = value => format(value, 2, 0);\r\n return props;\r\n};\r\n\r\nexport const mendingUpgrades = [\r\n rebuyable({\r\n id: 1,\r\n name: \"Mending Upgrade 1\",\r\n initialCost: 10,\r\n costMult: 9,\r\n textTemplate: \"Multiply Multiversal Remain gain by {value}.\",\r\n effect: 3,\r\n effectType: \"×\"\r\n }),\r\n {\r\n id: 2,\r\n name: \"Reckoning of the Evulgate\",\r\n cost: 1,\r\n description: () => `Start every Mend with ${format(1e4)} Realities, every Mend and Reality with ${format(1e6)} Eternities, and all prestiges with ${format(1e12)} Infinities. This upgrade applies immediately when bought.`,\r\n effect: () => [1e6, 1e12],\r\n },\r\n {\r\n id: 3,\r\n name: \"Reckoning of the Olympia\",\r\n cost: 1,\r\n description: () => \"Start every Mend and Reality with all Eternity Challenges completed 5 times (applies immedately).\",\r\n },\r\n {\r\n id: 4,\r\n name: \"Reckoning of the Sabotage\",\r\n cost: 15,\r\n description: \"Start every Mend with Lai'tela's Reality fully destabilized.\",\r\n },\r\n {\r\n id: 5,\r\n name: \"Reckoning of the Exhaurire\",\r\n cost: 5,\r\n description: () => `Always have passive IP, EP, and RM gain (IP and EP gen do not work in Pelle). Remnants are always equal to your best-ever Remnants this Mend.`,\r\n },\r\n rebuyable({\r\n id: 6,\r\n name: \"Mending Upgrade 6\",\r\n initialCost: 2000,\r\n costMult: 50,\r\n textTemplate: \"Delay post-Lv. 45,000 Glyph scaling by {value}\",\r\n effect: 500,\r\n effectType: \"+\"\r\n }),\r\n {\r\n id: 7,\r\n name: \"Libertas Temporis\",\r\n cost: 4,\r\n description: () => \"Start every Mend with Nameless completed and all their upgrades and unlocks. Real time is stored at 500% efficiency, and unlock an Autobuyer for Tesseracts.\",\r\n },\r\n {\r\n id: 8,\r\n name: \"Propius ad Scalas\",\r\n cost: 10,\r\n description: () => \"Reduce post-Infinity Antimatter Dimension cost scaling to x1.5 and post-Infinity Tickspeed cost scaling to x1.2.\",\r\n },\r\n {\r\n id: 9,\r\n name: \"Sacrificium Misericordae\",\r\n cost: 3,\r\n description: () => `Start every Mend with Teresa completed and set best AM in their Reality to ${format(DC.E1E10)}.`,\r\n },\r\n {\r\n id: 10,\r\n name: \"Deus Propitius\",\r\n cost: 5,\r\n description: () => \"Weaken the first 3 Pelle Strike penalties.\",\r\n },\r\n rebuyable({\r\n id: 11,\r\n name: \"Mending Upgrade 11\",\r\n initialCost: 1e6,\r\n costMult: 1e4,\r\n textTemplate: \"Weaken the post 50,000 TG scaling by {value}\",\r\n effect: 0.005,\r\n effectType: \"-\"\r\n }),\r\n {\r\n id: 12,\r\n name: \"Prior Lingua Adeptus\",\r\n cost: 6,\r\n description: () => \"Glyphs always have a minimum 100% rarity and 4 effects (7 if Effarig). Start every Mend with Effarig Glyphs unlocked.\",\r\n },\r\n {\r\n id: 13,\r\n name: \"Regnum Pro Duobus Regnis\",\r\n cost: 15,\r\n description: () => \"Simulate 2 extra Realities for every Reality.\",\r\n },\r\n {\r\n id: 14,\r\n name: \"Satus Superbia\",\r\n cost: 8,\r\n description: () => \"Gain 3x Space Theorems per V-Achievement and start every Mend with all V-Achievements at tier 3 (includes Hard)\",\r\n },\r\n {\r\n id: 15,\r\n name: \"Hyperscientia\",\r\n cost: 5,\r\n description: () => \"Raise Memory Gain by ^1.5.\",\r\n },\r\n rebuyable({\r\n id: 16,\r\n name: \"Per Aspera Ad Astra\",\r\n initialCost: 1e9,\r\n costMult: 1e6,\r\n textTemplate: `Delay Obscure Galaxy Scaling by {value}.`,\r\n effect: 5000,\r\n effectType: \"+\"\r\n }),\r\n {\r\n id: 17,\r\n name: \"Connexa Cosmicis\",\r\n cost: 65,\r\n description: () => \"Disable Remote Galaxy Scaling. Replicanti Galaxy scaling is moved to 1,500 and 10,000.\",\r\n },\r\n {\r\n id: 18,\r\n name: \"Confortatus Tenebris\",\r\n cost: 25,\r\n description: () => \"Continuum gives 50% more purchases.\",\r\n },\r\n {\r\n id: 19,\r\n name: \"Deus Memorias\",\r\n cost: 100000,\r\n description: () => \"Unlock Ra, Lai'tela, and Pelle Memories, and increase the level cap to 100.\",\r\n },\r\n {\r\n id: 20,\r\n name: \"Mending Upgrade 20\",\r\n cost: 100000,\r\n description: () => \"Unlock autobuyer for Mends\",\r\n }\r\n];\r\n","export const mendingMilestones = {\r\n one: {\r\n mends: 1,\r\n reward: \"Start with Infinity broken, all pre-Reality autobuyers maxed (kept in Doomed Reality), and the START perk. Gain multipliers to various resources (hover for details).\",\r\n activeCondition: () => (true ? `${formatX(1e20,0)} IP, ${formatX(1000,0)} Replicanti Speed, ${formatX(100000,0)} EP, ${formatX(10000,0)} Eternities, ${formatX(100,0)} Dilated Time, ${formatX(3,0)} Realities, ${formatX(5,0)} Perk Points, ${formatX(25,0)} Memory Gain, ${formatX(50, 0, )} Dark Energy Gain, ${formatX(5, 0)} Singularity Gain, ${formatX(1.1, 0, 1)} Remnant Gain, ${formatX(10, 0)} Reality Shard Gain` : \"this is a bug if this text appears\"),\r\n },\r\n two: {\r\n mends: 2,\r\n reward: \"The Pelle-exclusive dilation upgrades are available outside of Doomed Reality (and also unlock the autobuyers for them), but they are nerfed outside of it. Dilation Autobuyers buy max. Achievement 154's reward is now 100%.\",\r\n },\r\n three: {\r\n mends: 3,\r\n reward: \"Start every Mend with all perks, the rebuyable Reality Upgrade and Black Hole Autobuyers, Vacuum Acceleration, and both Black Holes unlocked and permanently active, with 3 power upgrades each.\",\r\n },\r\n ten: {\r\n mends: 4,\r\n reward: \"Teresa's container is no longer reset on Mend and Teresa, Effarig, Nameless, and V's Memories start at Level 10\",\r\n },\r\n four: {\r\n mends: 5,\r\n reward: \"Remove all requirements for Reality/Imaginary Upgrades (except for Lai'tela, Pelle and their Unlocks) and start with 5 of each rebuyable Reality Upgrade.\",\r\n },\r\n five: {\r\n mends: 7,\r\n reward: \"Gain 3 additional Glyph slots (disabled in Doomed Reality), and have the ability to equip TWO Effarig and Reality Glyphs each.\",\r\n },\r\n seven: {\r\n mends: 8,\r\n reward: \"Begin each Mend with Teresa's perk shop maxed, and gain an autobuyer which can automatically purchase and remove Music Glyphs.\",\r\n },\r\n six: {\r\n mends: 10,\r\n reward: \"You can now Mend outside of Doomed Reality.\",\r\n },\r\n eleven: {\r\n mends: 15,\r\n reward: \"Gain a Multiversal Remain multiplier based on lowest Glyph count during the entire Reality when you reach END antimatter this Mend.\",\r\n activeCondition: () => (`Your current Multiversal Remain multiplier from this milestone ${MendingMilestone.eleven.isReached ? \"is\":\"would be\"} ${formatX(mendingMilestoneElevenMultiplier(true),2 ,2)}, affected by Cursed Glyphs.`),\r\n // We dont define the effect here because this codebase will shit itself if you do, so we instead define it at the MvR code.\r\n },\r\n eight: {\r\n mends: 20,\r\n reward: \"Unlock an autobuyer for non-rebuyable Reality and Imaginary Upgrades once you can afford them (includes Lai and Pelle unlocks)\",\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { Currency } from \"../../currency\";\r\n\r\nconst rebuyable = props => {\r\n props.cost = () => getHybridCostScaling(\r\n player.mending.warpRebuyables[props.id],\r\n 1e30,\r\n props.initialCost,\r\n props.costMult,\r\n props.costMult / 10,\r\n DC.E309,\r\n 1e3,\r\n props.initialCost * props.costMult\r\n );\r\n const { effect, effectType } = props;\r\n props.effect = () =>{ \r\n if (props.effectType === \"+\" || props.effectType === \"-\" || props.effectType === \"×1e\" ){\r\n return effect * player.mending.warpRebuyables[props.id];\r\n }\r\n return Math.pow(effect, player.mending.warpRebuyables[props.id]);\r\n };\r\n props.description = () => props.textTemplate.replace(\"{value}\",formatInt(effect));\r\n if (!props.noEffect) {\r\n props.formatEffect = value => effectType + format(value, 2, 0);\r\n if(props.id==3) props.formatEffect = value => effectType + format(value, 3, 3);\r\n props.formatCost = value => format(value, 2, 0);\r\n }\r\n return props;\r\n};\r\n\r\n\r\nexport const warpUpgrades = [\r\n rebuyable({\r\n name: \"More Infinite Power\",\r\n id: 1,\r\n initialCost: 1e30,\r\n costMult: 1e5,\r\n textTemplate: \"Increase Infinite Power softcap's Thereshold by ×1e2.5e14\",\r\n effect: 2.5e14,\r\n effectType: \"×1e\"\r\n }),\r\n rebuyable({\r\n name: \"Memory Gain\",\r\n id: 2,\r\n initialCost: 1e20,\r\n costMult: 100,\r\n textTemplate: \"Improve Ra's memory gain by ×3\",\r\n effect: 3,\r\n effectType: \"×\"\r\n }),\r\n rebuyable({\r\n name: \"Game speed softcap\",\r\n id: 3,\r\n initialCost: 1e20,\r\n costMult: 100,\r\n textTemplate: \"Increase Game speed's softcap by 0.002\",\r\n effect: 0.002,\r\n effectType: \"+\"\r\n }),\r\n {\r\n name: \"Visible Galaxies\",\r\n id: 4,\r\n cost: 1e55,\r\n requirement: () => Ra.unlocks.unlockSHardV.isUnlocked ? `Reach ${formatInt(913579)} total Galaxies in V's Superhard Reality.` : \"Reach V Level 40 to see unlock condition\",\r\n hasFailed: () => !V.isSuperRunning,\r\n checkRequirement: () => V.isSuperRunning && Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies>=913579,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Decrease Obscure Galaxy scaling polynomial level by ${formatInt(1)}`,\r\n },\r\n {\r\n name: \"The Dedicated Way\",\r\n id: 5,\r\n cost: 1e24,\r\n requirement: () => `Reach ${format(new Decimal(\"1e2450000000000000000\"))} Antimatter in Ra's Reality`,\r\n hasFailed: () => !Ra.isRunning,\r\n checkRequirement: () => Ra.isRunning && Currency.antimatter.exponent>=2.45e18,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Ra's basic Memory chunk gain multiplier based on current Antimatter`,\r\n effect: () => Math.max(Math.log10(Currency.antimatter.exponent),1),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Hostility+\",\r\n id: 6,\r\n cost: 1e60,\r\n requirement: () => Ra.unlocks.Hostility.isUnlocked ? \"Mend with a total hostility level of at least 60\" : \"Reach Pelle Level 75 to see unlock condition\",\r\n hasFailed: () => !player.mending.corruptionChallenge.corruptedMend || !player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 60,\r\n checkRequirement: () => player.mending.corruptionChallenge.corruptedMend && player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 60,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => Ra.unlocks.Hostility.isUnlocked ? `Hostility caps +${formatInt(1)}` : \"Reach Pelle Level 75 to see effect\",\r\n },\r\n {\r\n name: \"Automatic of Speed\",\r\n id: 7,\r\n cost: 1e75,\r\n requirement: () => `Reach ${format(new Decimal(\"1e2300\"))} Game Speed`,\r\n hasFailed: () => false,\r\n checkRequirement: () => {\r\n return getGameSpeedupFactor().gte('1e2300');\r\n },\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"Unlock Black Hole 3 autobuyer\",\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"Valuable Cost\",\r\n id: 8,\r\n cost: 1e70,\r\n requirement: () => Ra.unlocks.Hostility.isUnlocked ? `Reach ${format(3e15)} Time Theorems in Teresa's Reality of Level 9+ Study of Forever Hostile Mend` : \"Reach Pelle Level 75 to see unlock condition\",\r\n hasFailed: () => !player.mending.corruptionChallenge.corruptedMend || player.mending.corruption[9]<9,\r\n checkRequirement: () => player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[9] && Teresa.isRunning && Currency.timeTheorems.value.gte(3e15),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"Reduce Myriad Study cost by 50 Space Theorems\",\r\n effect: () => 1\r\n },\r\n {\r\n name: \"Living Multiverse\",\r\n id: 9,\r\n cost: 1e75,\r\n requirement: () => `Reach ${format(1.845e9, 3, 3)} total Galaxies in a Doomed reality without Galaxy Generator`,\r\n hasFailed: () => !Pelle.isDoomed || Pelle.hasGalaxyGenerator,\r\n checkRequirement: () => (Pelle.isDoomed&&!Pelle.hasGalaxyGenerator)&&(Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies >= 1.845e9),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"Galactic Shards improve Galaxy better\",\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"Boost Readjustment\",\r\n id: 10,\r\n cost: 1e60,\r\n requirement: () => `Reach ${format(2e37)} Memory Crystals.`,\r\n hasFailed: () => false,\r\n checkRequirement: () => Currency.raPoints.value.gte(2e37),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Dimension boost scaling occurs ${formatX(20)} later`,\r\n },\r\n {\r\n name: \"Noticeable Galaxies\",\r\n id: 11,\r\n cost: 1e65,\r\n requirement: () => Ra.unlocks.kohlersRealmUnlock.isUnlocked ? \"Reach Kohler unlock progress milestone 3\" : \"Reach Pelle Level 100 to see unlock condition\",\r\n hasFailed: () => !Ra.unlocks.kohlersRealmUnlock.isUnlocked,\r\n checkRequirement: () => Kohler.unlockProgress>=35,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Decrease Obscure Galaxy scaling polynomial level by ${formatInt(1)}`,\r\n },\r\n {\r\n name: \"Hostility++\",\r\n id: 12,\r\n cost: 1e300,\r\n requirement: () => Ra.unlocks.Hostility.isUnlocked ? \"Mend with a total hostility level of at least 80\" : \"Reach Pelle Level 75 to see unlock condition\",\r\n hasFailed: () => !player.mending.corruptionChallenge.corruptedMend || !player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 80,\r\n checkRequirement: () => player.mending.corruptionChallenge.corruptedMend && player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 80,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => Ra.unlocks.Hostility.isUnlocked ? `Hostility caps +${formatInt(1)}` : \"Reach Pelle Level 75 to see effect\",\r\n },\r\n /*\r\n {\r\n name: \"Warp Upgrade 13\",\r\n id: 13,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 14\",\r\n id: 14,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Hostility+\",\r\n id: 15,\r\n cost: 1e300,\r\n requirement: \"Mend with an average corruption level of 6 or higher\",\r\n hasFailed: () => !player.mending.corruptionChallenge.corruptedMend || !player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 6,\r\n checkRequirement: () => player.mending.corruptionChallenge.corruptedMend && player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 6,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Hostility caps +${formatInt(1)}`,\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 16\",\r\n id: 16,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 17\",\r\n id: 17,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 18\",\r\n id: 18,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 19\",\r\n id: 19,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 20\",\r\n id: 20,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 21\",\r\n id: 21,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 22\",\r\n id: 22,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 23\",\r\n id: 23,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Noticeable Galaxies\",\r\n id: 24,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Obscure galaxy polynomial level -${formatInt(1)}`,\r\n },\r\n {\r\n name: \"Hostility++\",\r\n id: 25,\r\n cost: 1e300,\r\n requirement: \"Mend with an average corruption level of 8 or higher\",\r\n hasFailed: () => !player.mending.corruptionChallenge.corruptedMend || !player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 8,\r\n checkRequirement: () => player.mending.corruptionChallenge.corruptedMend && player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 8,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Hostility caps +${formatInt(1)}`,\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n }, */\r\n];\r\n","import { DC } from \"../../constants\";\r\n\r\n\r\nexport const corruptionUpgrades = [\r\n {\r\n name: \"Memory Perfection\",\r\n id: 1,\r\n cost: 2,\r\n requirement: `Please send your save to the devs with an image of this - You should never be able to see this`,\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `Ra memory gain is ${formatX(1500, 1)} stronger, but only when in the appropriate celestials Reality.`,\r\n effect: 1500\r\n },\r\n {\r\n name: \"Spacetime Distruption\",\r\n id: 2,\r\n cost: 2,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Game speed is multiplied based on highest score (before instability, Applies after hostilities, but weaker in Hostile multiverse)\",\r\n effect: () => player.mending.corruptionChallenge.corruptedMend ? Decimal.pow10(Math.pow(player.mending.corruptionChallenge.recordScore, 0.25)) : (Decimal.pow10(Math.pow(player.mending.corruptionChallenge.recordScore, 1/1.48))),\r\n formatEffect: value => formatX(value, 2)\r\n },\r\n {\r\n name: \"Rewarding Achievements\",\r\n id: 3,\r\n cost: 2,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Gain a power effect to achievement power effects, after softcaps, based on unspent Hostile Fragments. \",\r\n effect: () => 1 + Math.log(1 + (player.mending.corruptedFragments)/3) / 10, // We do math.log not math.log10 here since we do want the natural log of CF, not the base 10 log\r\n formatEffect: value => `^` + format(value, 2, 2)\r\n },\r\n {\r\n name: \"Singularity Cap\",\r\n id: 4,\r\n cost: 2,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Give extra 10 increase Singularity cap.\",\r\n effect: () => 10\r\n },\r\n {\r\n name: \"Perk Limit\",\r\n id: 5,\r\n cost: 2,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"The first two upgrades of Perk Shop cap are massively increased.\",\r\n effect: () => 1\r\n },\r\n {\r\n name: \"Doomed Options\",\r\n id: 6,\r\n cost: 3,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Give one extra Glyph slot in Doomed Reality\",\r\n effect: () => 1\r\n },\r\n {\r\n name: \"Help Effarig can do nothing\",\r\n id: 7,\r\n cost: 3,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Improve Effarig level 15 improvement.\",\r\n effect: () => 1\r\n },\r\n {\r\n name: \"Tesseract Movement\",\r\n id: 8,\r\n cost: 3,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Gain a multiplier to effective Tesseract count, based on unspent Hostile Fragments.\",\r\n effect: () => 1 + Math.log(1 + (player.mending.corruptedFragments)) / 5,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Crystal Galaxies\",\r\n id: 9,\r\n cost: 3,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Memory Crystal delays Obscure Galaxy scaling\",\r\n effect: () => Math.round(Decimal.log10(player.celestials.ra.raPoints.plus(1))*10),\r\n formatEffect: value => `+` + formatInt(value)\r\n },\r\n {\r\n name: \"Sacrifice Exponent\",\r\n id: 10,\r\n cost: 3,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Dimension Sacrifice's exponent ^1.5\",\r\n effect: () => 1.5\r\n },\r\n {\r\n name: \"Black Hole\",\r\n id: 11,\r\n cost: 4,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Black Hole 1 & 2's base multiplier is increased.\",\r\n effect: () => 2.5,\r\n formatEffect: value => formatX(value, 1, 1)\r\n },\r\n {\r\n name: \"Nerf Every Curse\",\r\n id: 12,\r\n cost: 4,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Every generated Cursed Glyph's level reduced to 666.\",\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"More MvR!!!!!!!\",\r\n id: 13,\r\n cost: 4,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Multiplier to Multiversal Remains based on your record score.\",\r\n effect: () => Math.max(CorruptionData.corruptionChallenge.recordScore,1),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Alchemy Cap\",\r\n id: 14,\r\n cost: 4,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Increase Alchemy hardcap based on your record score.\",\r\n effect: () => Math.round(Math.log(CorruptionData.corruptionChallenge.recordScore+1)/Math.log(1.005)),\r\n formatEffect: value => `+${formatInt(value)}`\r\n },\r\n {\r\n name: \"Generation\",\r\n id: 15,\r\n cost: 4,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"8th Antimatter Dimension generat 8th Dark Matter Dimension (once unlocked)\",\r\n effect: () => Decimal.log10(AntimatterDimensions.all[7].totalAmount.plus(1))*10,\r\n formatEffect: value => `${format(value, 2, 2)} per Second`\r\n },\r\n {\r\n name: \"Prestige Extension\",\r\n id: 16,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `Prestige Limits power is now doubled, capped at ${formatInt(1)}`,\r\n },\r\n {\r\n name: \"Dimension Superscaling\",\r\n id: 17,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `If Dimensional Limitations corruption is 5 or higher, Antimatter dimensions gain a power effect based on highest Glyph Level this mend.`,\r\n effect: () => (player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[1] >= 5 && player.records.bestReality.glyphLevelSet.length!=0) ? 1 + Math.log(player.records.bestReality.glyphLevel)/10 : 1,\r\n formatEffect: value => formatPow(value, 2, 2)\r\n },\r\n {\r\n name: \"Time Expansion\",\r\n id: 18,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `Time Compression power +${format(0.01, 2, 2)} (capped at +${formatInt(1)}), Time compression devisor ${formatPow(0.1, 1, 1)}`,\r\n },\r\n {\r\n name: \"Galaxy Strengthening\",\r\n id: 19,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `Galactic Weakness - Scaling is ^0.5, and power is ${formatX(1.4, 1, 1)} (capped at ${formatX(1)})`,\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"Rewarding Glyphs\",\r\n id: 20,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"If Complex Glyphs is level 4 or higher, gain a power effect to score, based on glyph levels and Complex Glyphs level.\",\r\n effect: () => player.mending.corruptionChallenge.corruptedMend && (player.mending.corruption[4] >= 4) ? 1 + Math.log(Math.log(player.mending.corruption[4] * Math.max(1,player.records.bestReality.glyphLevel)))/2 : 1,\r\n formatEffect: value => formatPow(value, 2, 2)\r\n },\r\n {\r\n name: \"Tick Extension\",\r\n id: 21,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `Tick Extension Tickspeed power ^0.5, Time shard divisor ^0.75.`,\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"Automic Dilution\",\r\n id: 22,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `Automic Dilution power is now ×1.5, capped at ${formatInt(1)}`,\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"Theory of Dilation\",\r\n id: 23,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: `Theory of Dilation power +0.2, and DT gain ×1e5 if level 1 or more.`,\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"Replicative Singularities\",\r\n id: 24,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: `If Replicative Singularities corruption is 5 or higher, Infinity dimensions gain a power effect based on current Replicanti. Capped at ^5.`,\r\n effect: () => player.mending.corruptionChallenge.corruptedMend && (player.mending.corruption[8] >= 5) ? Math.min(1+(Decimal.log10(player.replicanti.amount))/1000,5) : 1,\r\n formatEffect: value => formatPow(value, 2, 2)\r\n },\r\n {\r\n name: \"Study of Forever\",\r\n id: 25,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: `If Study of Forever corruption is 4 or higher, Time dimensions gain a power effect based on current Time Theorems. Capped at ^5.`,\r\n effect: () => player.mending.corruptionChallenge.corruptedMend && (player.mending.corruption[9] >= 4) ? Math.min(1+(Decimal.log10(Currency.timeTheorems.value))/1000,5) : 1,\r\n formatEffect: value => formatPow(value, 2, 2)\r\n },\r\n];\r\n","export const kohlerProgress = {\r\n progressUnlocks: {\r\n kohlerUnlocked: {\r\n id: 0,\r\n progress: 5,\r\n condition: () => Ra.unlocks.kohlersRealmUnlock.isUnlocked,\r\n description: \"You may have made it here Destroyer, but I have a few more tests...\",\r\n },\r\n hostileScore: {\r\n id: 1,\r\n progress: 20,\r\n condition: () => {\r\n if (Ra.unlocks.kohlersRealmUnlock.isUnlocked && CorruptionData.corruptionChallenge.recordScore >= 50000000) return true;\r\n return false;\r\n },\r\n description: () => `Reach ${format(5e7)} Hostile score. Reward: Keep Charged Upgrades when not entering Hostile mend.`,\r\n },\r\n hostileFragments: {\r\n id: 2,\r\n progress: 35,\r\n condition: () => {\r\n if (Ra.unlocks.kohlersRealmUnlock.isUnlocked && CorruptionData.recordCorruptedFragments > 29) return true;\r\n return false;\r\n },\r\n description: () => `Reach 30 Hostile Fragments. Reward: Antimatter ^(1+best HF/100).`,\r\n },\r\n antimatterGalaxy: {\r\n id: 4,\r\n progress: 65,\r\n condition: () => {\r\n if (Ra.unlocks.kohlersRealmUnlock.isUnlocked && Math.log10(Decimal.log10(Currency.antimatter.value))>=25) return true;\r\n return false;\r\n },\r\n description: () => `Reach ${format(new Decimal(\"1e10000000000000000000000000\"))} Antimatter. Reward: Tickspeed affect 1st Multiversal Dimension with ultra reduced rate.`,\r\n effect: () => {\r\n return Math.max(Math.pow(Decimal.log10(Tickspeed.perSecond.plus(1)),0.3),1);\r\n }\r\n },\r\n placeholder: {\r\n id: 6,\r\n progress: 100,\r\n condition:false,\r\n description: \"Now for the ultimate test...waiting 5 hours™.\",\r\n }\r\n }\r\n};\r\n","import { mendingUpgrades } from \"./mending-upgrades\";\r\nimport { mendingMilestones } from \"./mending-milestones\";\r\nimport { warpUpgrades } from \"./warp-upgrades\";\r\nimport { corruptionUpgrades } from \"./corruption-upgrades\";\r\nimport { kohlerProgress } from \"./kohler-unlock-progress\";\r\n\r\nexport const mending = {\r\n upgrades: mendingUpgrades,\r\n milestones: mendingMilestones,\r\n corruptionUpgrades: corruptionUpgrades,\r\n warpUpgrades: warpUpgrades,\r\n kohlerUnlockProgress: kohlerProgress,\r\n};","import { multiplierTabTree, multiplierTabValues } from \"./multiplier-tab\";\r\n\r\nimport { achievements } from \"./achievements\";\r\nimport { awayProgressTypes } from \"./away-progress-types\";\r\nimport { catchupResources } from \"./catchup-resources\";\r\nimport { celestials } from \"./celestials\";\r\nimport { challenges } from \"./challenges\";\r\nimport { changelog } from \"./changelog\";\r\nimport { confirmationTypes } from \"./confirmation-types\";\r\nimport { credits } from \"./credits\";\r\nimport { discordRichPresence } from \"./discord-rich-presence\";\r\nimport { eternity } from \"./eternity\";\r\nimport { h2p } from \"./h2p\";\r\nimport { infinity } from \"./infinity\";\r\nimport { news } from \"./news\";\r\nimport { progressStages } from \"./progress-checker\";\r\nimport { reality } from \"./reality\";\r\nimport { shopPurchases } from \"./shop-purchases\";\r\nimport { speedrunMilestones } from \"./speedrun-milestones\";\r\nimport { tabNotifications } from \"./tab-notifications\";\r\nimport { tabs } from \"./tabs\";\r\nimport { mending } from \"./mending\";\r\n\r\nexport const GameDatabase = {\r\n achievements,\r\n awayProgressTypes,\r\n catchupResources,\r\n celestials,\r\n challenges,\r\n changelog,\r\n confirmationTypes,\r\n credits,\r\n discordRichPresence,\r\n eternity,\r\n h2p,\r\n infinity,\r\n multiplierTabTree,\r\n multiplierTabValues,\r\n news,\r\n progressStages,\r\n reality,\r\n shopPurchases,\r\n speedrunMilestones,\r\n tabNotifications,\r\n tabs,\r\n mending,\r\n};\r\n\r\nwindow.GameDatabase = GameDatabase;\r\n\r\nwindow.mapGameData = function mapGameData(gameData, mapFn) {\r\n const result = [];\r\n for (const data of gameData) {\r\n result[data.id] = mapFn(data);\r\n }\r\n return result;\r\n};\r\n\r\nwindow.mapGameDataToObject = function mapGameDataToObject(gameData, mapFun) {\r\n const array = Object.entries(gameData);\r\n const out = {};\r\n for (let idx = 0; idx < array.length; idx++) {\r\n out[array[idx][0]] = mapFun(array[idx][1]);\r\n }\r\n return {\r\n all: Object.values(out),\r\n ...out\r\n };\r\n};\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-block-editor--container\"},[_c('div',{ref:\"editorGutter\",staticClass:\"c-automator-block-editor--gutter\"},_vm._l((_vm.numberOfLines),function(i){return _c('div',{key:i,staticClass:\"c-automator-block-line-number\",style:({\n top: (((i - 1) * 3.45) + \"rem\")\n })},[_vm._v(\" \"+_vm._s(i)+\" \")])}),0),_c('div',{ref:\"blockEditorElement\",staticClass:\"c-automator-block-editor\",on:{\"scroll\":function($event){return _vm.setPreviousScroll()}}},[_c('draggable',{staticClass:\"c-automator-blocks\",attrs:{\"group\":\"code-blocks\",\"ghost-class\":\"c-automator-block-row-ghost\"},on:{\"end\":_vm.parseRequest},model:{value:(_vm.lines),callback:function ($$v) {_vm.lines=$$v},expression:\"lines\"}},_vm._l((_vm.lines),function(block,lineNum){return _c('AutomatorBlockSingleRow',{key:block.id + 10000 * lineNum,attrs:{\"block\":block,\"update-block\":_vm.updateBlock,\"delete-block\":_vm.deleteBlock}})}),1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-block-row--container\"},[_c('div',{staticClass:\"c-automator-block-row\",class:_vm.highlightClass()},[_c('AutomatorBlockSingleInput',{attrs:{\"constant\":_vm.b.alias ? _vm.b.alias : _vm.b.cmd,\"block\":_vm.b,\"update-function\":_vm.updateBlock}}),(_vm.b.canWait)?_c('AutomatorBlockSingleInput',{attrs:{\"block\":_vm.b,\"block-target\":\"nowait\",\"initial-selection\":_vm.b.nowait ? 'NOWAIT' : '',\"update-function\":_vm.updateBlock}}):_vm._e(),(_vm.b.canRespec)?_c('AutomatorBlockSingleInput',{attrs:{\"block\":_vm.b,\"block-target\":\"respec\",\"initial-selection\":_vm.b.respec ? 'RESPEC' : '',\"update-function\":_vm.updateBlock}}):_vm._e(),(_vm.b.allowedPatterns)?_c('AutomatorBlockSingleInput',{attrs:{\"block\":_vm.b,\"block-target\":_vm.b.targets[0],\"patterns\":_vm.b.allowedPatterns,\"initial-selection\":_vm.nextSelection(),\"update-function\":_vm.updateBlock,\"recursive\":true}}):_vm._e(),_c('div',{staticClass:\"o-automator-block-delete\",on:{\"click\":function($event){return _vm.removeBlock(_vm.b.id)}}},[_vm._v(\" X \")])],1),(_vm.block.nested)?_c('draggable',{staticClass:\"l-automator-nested-block\",attrs:{\"group\":\"code-blocks\"},model:{value:(_vm.block.nest),callback:function ($$v) {_vm.$set(_vm.block, \"nest\", $$v)},expression:\"block.nest\"}},_vm._l((_vm.block.nest),function(subblock){return _c('AutomatorBlockSingleRow',{key:subblock.id,attrs:{\"block\":subblock,\"update-block\":_vm.updateBlockFromNest,\"delete-block\":_vm.deleteBlockFromNest}})}),1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-single-block\"},[(_vm.displayedConstant)?_c('div',{staticClass:\"c-automator-single-block o-automator-command c-automator-constant-block\",class:{ 'l-blob' : _vm.constant === 'BLOB' }},[_vm._v(\" \"+_vm._s(_vm.displayedConstant)+\" \")]):(_vm.isTextInput)?_c('div',{staticClass:\"c-automator-text-input-container\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.textContents),expression:\"textContents\"},{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.errorTooltip()),expression:\"errorTooltip()\"}],class:_vm.textInputClassObject(),domProps:{\"value\":(_vm.textContents)},on:{\"keyup\":function($event){return _vm.changeBlock()},\"focusin\":function($event){return _vm.handleFocus(true)},\"focusout\":function($event){return _vm.handleFocus(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.textContents=$event.target.value}}}),(_vm.dropdownOptions.length > 1)?_c('div',{staticClass:\"c-automator-close-text-input fa-solid fa-circle-xmark\",on:{\"click\":_vm.revertToDropdown}}):_vm._e()]):_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.dropdownSelection),expression:\"dropdownSelection\"}],class:_vm.dropdownClassObject(),on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.dropdownSelection=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},function($event){return _vm.changeBlock()}]}},_vm._l((['' ].concat( _vm.dropdownOptions)),function(target){return _c('option',{key:target,domProps:{\"value\":target}},[_vm._v(\" \"+_vm._s(target)+\" \")])}),0),(_vm.recursive && _vm.nextNodeCount > 0)?_c('AutomatorBlockSingleInput',{key:_vm.currentNodeOnPath,attrs:{\"constant\":_vm.unknownNext ? '...' : '',\"block\":_vm.block,\"block-target\":_vm.nextInputKey,\"patterns\":_vm.patterns,\"initial-selection\":_vm.nextInputValue,\"update-function\":_vm.updateFunction,\"recursive\":true,\"current-path\":_vm.currentPath + _vm.currentNodeOnPath}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// Note: chevrotain doesn't play well with unicode regex\r\n/* eslint-disable require-unicode-regexp */\r\n/* eslint-disable camelcase */\r\nimport { createToken, Lexer } from \"chevrotain\";\r\n\r\nimport { DC } from \"../constants\";\r\n\r\nconst createCategory = name => createToken({ name, pattern: Lexer.NA, longer_alt: Identifier });\r\n\r\n// Shorthand for creating tokens and adding them to a list\r\nconst tokenLists = {};\r\n// eslint-disable-next-line max-params\r\nconst createInCategory = (category, name, pattern, props = {}) => {\r\n const categories = [category];\r\n if (props.extraCategories) categories.push(...props.extraCategories);\r\n const token = createToken({\r\n name,\r\n pattern,\r\n categories,\r\n longer_alt: Identifier,\r\n });\r\n const categoryName = Array.isArray(category) ? category[0].name : category.name;\r\n if (tokenLists[categoryName] === undefined) tokenLists[categoryName] = [];\r\n tokenLists[categoryName].push(token);\r\n const patternWord = pattern.toString().match(/^\\/([a-zA-Z0-9]*)\\/[a-zA-Z]*$/ui);\r\n if (patternWord && patternWord[1]) token.$autocomplete = patternWord[1];\r\n Object.assign(token, props);\r\n return token;\r\n};\r\n\r\nconst HSpace = createToken({\r\n name: \"HSpace\",\r\n pattern: /[ \\t]+/,\r\n group: Lexer.SKIPPED\r\n});\r\n\r\nconst EOL = createToken({\r\n name: \"EOL\",\r\n line_breaks: true,\r\n pattern: /[ \\t\\r]*\\n\\s*/,\r\n label: \"End of line\",\r\n});\r\n\r\nconst StringLiteral = createToken({\r\n name: \"StringLiteral\",\r\n pattern: /\".*\"/,\r\n});\r\n\r\nconst StringLiteralSingleQuote = createToken({\r\n name: \"StringLiteralSingleQuote\",\r\n pattern: /'.*'/,\r\n});\r\n\r\nconst Comment = createToken({\r\n name: \"Comment\",\r\n pattern: /(#|\\/\\/)[^\\n]*/,\r\n});\r\n\r\nconst NumberLiteral = createToken({\r\n name: \"NumberLiteral\",\r\n pattern: /-?(0|[1-9]\\d*)(\\.\\d+)?([eE][+-]?\\d+)?/,\r\n});\r\n\r\nconst BlackHoleStr = createToken({\r\n name: \"BlackHoleStr\",\r\n pattern: /[Bb][Hh][12]/,\r\n});\r\n\r\nconst Identifier = createToken({\r\n name: \"Identifier\",\r\n pattern: /[a-zA-Z_][a-zA-Z_0-9]*/,\r\n});\r\n\r\nconst ComparisonOperator = createToken({\r\n name: \"ComparisonOperator\",\r\n pattern: Lexer.NA,\r\n});\r\n\r\nconst AutomatorCurrency = createCategory(\"AutomatorCurrency\");\r\nconst PrestigeEvent = createCategory(\"PrestigeEvent\");\r\nconst StudyPath = createCategory(\"StudyPath\");\r\nconst TimeUnit = createCategory(\"TimeUnit\");\r\n\r\ncreateInCategory(ComparisonOperator, \"OpGTE\", />=/, {\r\n $autocomplete: \">=\",\r\n $compare: (a, b) => Decimal.gte(a, b),\r\n});\r\ncreateInCategory(ComparisonOperator, \"OpLTE\", /<=/, {\r\n $autocomplete: \"<=\",\r\n $compare: (a, b) => Decimal.lte(a, b),\r\n});\r\ncreateInCategory(ComparisonOperator, \"OpGT\", />/, {\r\n $autocomplete: \">\",\r\n $compare: (a, b) => Decimal.gt(a, b),\r\n});\r\ncreateInCategory(ComparisonOperator, \"OpLT\", / Decimal.lt(a, b),\r\n});\r\nconst OpEQ = createInCategory(ComparisonOperator, \"OpEQ\", /==/, {\r\n $compare: (a, b) => Decimal.eq(a, b),\r\n});\r\n// EqualSign is a single = which is defined for both comparisons and define\r\nconst EqualSign = createToken({\r\n name: \"EqualSign\",\r\n pattern: /=/,\r\n categories: ComparisonOperator,\r\n label: \"=\",\r\n longer_alt: OpEQ,\r\n});\r\nEqualSign.$compare = (a, b) => Decimal.eq(a, b);\r\n\r\ncreateInCategory(AutomatorCurrency, \"EP\", /ep/i, { $getter: () => Currency.eternityPoints.value });\r\ncreateInCategory(AutomatorCurrency, \"IP\", /ip/i, { $getter: () => Currency.infinityPoints.value });\r\ncreateInCategory(AutomatorCurrency, \"AM\", /am/i, { $getter: () => Currency.antimatter.value });\r\ncreateInCategory(AutomatorCurrency, \"DT\", /dt/i, { $getter: () => Currency.dilatedTime.value });\r\ncreateInCategory(AutomatorCurrency, \"TP\", /tp/i, { $getter: () => Currency.tachyonParticles.value });\r\ncreateInCategory(AutomatorCurrency, \"RG\", /rg/i, { $getter: () => new Decimal(Replicanti.galaxies.total) });\r\ncreateInCategory(AutomatorCurrency, \"RM\", /rm/i, { $getter: () => Currency.realityMachines.value });\r\n\r\ncreateInCategory(AutomatorCurrency, \"infinities\", /infinities/i, { $getter: () => Currency.infinities.value });\r\ncreateInCategory(AutomatorCurrency, \"bankedInfinities\", /banked[ \\t]+infinities/i, {\r\n $autocomplete: \"banked infinities\",\r\n $getter: () => Currency.infinitiesBanked.value\r\n});\r\ncreateInCategory(AutomatorCurrency, \"eternities\", /eternities/i, { $getter: () => Currency.eternities.value });\r\ncreateInCategory(AutomatorCurrency, \"realities\", /realities/i, { $getter: () => Currency.realities.value });\r\n\r\ncreateInCategory(AutomatorCurrency, \"PendingIP\", /pending[ \\t]+ip/i, {\r\n $autocomplete: \"pending IP\",\r\n $getter: () => (Player.canCrunch ? gainedInfinityPoints() : DC.D0)\r\n});\r\ncreateInCategory(AutomatorCurrency, \"PendingEP\", /pending[ \\t]+ep/i, {\r\n $autocomplete: \"pending EP\",\r\n $getter: () => (Player.canEternity ? gainedEternityPoints() : DC.D0)\r\n});\r\ncreateInCategory(AutomatorCurrency, \"PendingTP\", /pending[ \\t]+tp/i, {\r\n $autocomplete: \"pending TP\",\r\n $getter: () => (player.dilation.active ? getTachyonGain() : DC.D0),\r\n});\r\ncreateInCategory(AutomatorCurrency, \"PendingRM\", /pending[ \\t]+rm/i, {\r\n $autocomplete: \"pending RM\",\r\n $getter: () => (isRealityAvailable() ? MachineHandler.gainedRealityMachines : DC.D0)\r\n});\r\ncreateInCategory(AutomatorCurrency, \"PendingGlyphLevel\", /pending[ \\t]+glyph[ \\t]+level/i, {\r\n $autocomplete: \"pending Glyph level\",\r\n $getter: () => new Decimal(isRealityAvailable() ? gainedGlyphLevel().actualLevel : 0),\r\n});\r\n\r\ncreateInCategory(AutomatorCurrency, \"Rep\", /rep(licanti)?/i, {\r\n $autocomplete: \"rep\",\r\n $getter: () => Replicanti.amount,\r\n});\r\ncreateInCategory(AutomatorCurrency, \"TT\", /(tt|time theorems?)/i, {\r\n $autocomplete: \"TT\",\r\n $getter: () => Currency.timeTheorems.value,\r\n});\r\ncreateInCategory(AutomatorCurrency, \"TotalTT\", /total[ \\t]+tt/i, {\r\n $autocomplete: \"total TT\",\r\n $getter: () => player.timestudy.theorem.plus(TimeTheorems.calculateTimeStudiesCost()),\r\n});\r\n\r\ncreateInCategory(AutomatorCurrency, \"TotalCompletions\", /total[ \\t]+completions/i, {\r\n $autocomplete: \"total completions\",\r\n $getter: () => EternityChallenges.completions,\r\n});\r\n\r\ncreateInCategory(AutomatorCurrency, \"PendingCompletions\", /pending[ \\t]+completions/i, {\r\n $autocomplete: \"pending completions\",\r\n $getter: () => {\r\n // If we are not in an EC, pretend like we have a ton of completions so any check for sufficient\r\n // completions returns true\r\n if (!EternityChallenge.isRunning) return Decimal.NUMBER_MAX_VALUE;\r\n return EternityChallenge.current.gainedCompletionStatus.totalCompletions;\r\n }\r\n});\r\n\r\ncreateInCategory(AutomatorCurrency, \"FilterScore\", /filter[ \\t]+score/i, {\r\n $autocomplete: \"filter score\",\r\n $getter: () => {\r\n // If the filter isn't unlocked somehow, return the most negative number in order to ensure it's nonblocking\r\n if (!EffarigUnlock.glyphFilter.isUnlocked) return -Number.MAX_VALUE;\r\n const choices = GlyphSelection.glyphList(GlyphSelection.choiceCount, gainedGlyphLevel(),\r\n { isChoosingGlyph: false });\r\n const bestGlyph = AutoGlyphProcessor.pick(choices);\r\n return AutoGlyphProcessor.filterValue(bestGlyph);\r\n },\r\n $unlocked: () => EffarigUnlock.glyphFilter.isUnlocked,\r\n});\r\n\r\n// Space theorems can't be abbreviated as \"ST\" in the actual script content because then the lexer becomes unable\r\n// to match it due to the fact that \"start\" (ec/dilation) also begins with those characters. As a workaround, ST\r\n// uses the full string \"space theorems\" as does the \"total ST\" variant (for consistency)\r\ncreateInCategory(AutomatorCurrency, \"ST\", /space[ \\t]+theorems/i, {\r\n $autocomplete: \"space theorems\",\r\n $getter: () => V.availableST,\r\n $unlocked: () => V.spaceTheorems > 0,\r\n});\r\ncreateInCategory(AutomatorCurrency, \"TotalST\", /total[ \\t]+space[ \\t]+theorems/i, {\r\n $autocomplete: \"total space theorems\",\r\n $getter: () => V.spaceTheorems,\r\n $unlocked: () => V.spaceTheorems > 0,\r\n});\r\n\r\nfor (let i = 1; i <= 12; ++i) {\r\n const id = i;\r\n createInCategory(AutomatorCurrency, `EC${i}`, new RegExp(`ec${i} completions`, \"i\"), {\r\n $autocomplete: `ec${i} completions`,\r\n // eslint-disable-next-line no-loop-func\r\n $getter: () => EternityChallenge(id).completions\r\n });\r\n}\r\n\r\n// $prestigeLevel is used by things that wait for a prestige event. Something waiting for\r\n// eternity will be triggered by something waiting for reality, for example.\r\ncreateInCategory(PrestigeEvent, \"Infinity\", /infinity/i, {\r\n extraCategories: [StudyPath],\r\n $autobuyer: () => Autobuyer.bigCrunch,\r\n $autobuyerDurationMode: AUTO_CRUNCH_MODE.TIME,\r\n $autobuyerXHighestMode: AUTO_CRUNCH_MODE.X_HIGHEST,\r\n $autobuyerCurrencyMode: AUTO_CRUNCH_MODE.AMOUNT,\r\n $prestigeAvailable: () => Player.canCrunch,\r\n $prestige: () => bigCrunchResetRequest(true),\r\n $prestigeLevel: 1,\r\n $prestigeCurrency: \"IP\",\r\n $studyPath: TIME_STUDY_PATH.INFINITY_DIM,\r\n});\r\ncreateInCategory(PrestigeEvent, \"Eternity\", /eternity/i, {\r\n $autobuyer: () => Autobuyer.eternity,\r\n $autobuyerDurationMode: AUTO_ETERNITY_MODE.TIME,\r\n $autobuyerXHighestMode: AUTO_ETERNITY_MODE.X_HIGHEST,\r\n $autobuyerCurrencyMode: AUTO_ETERNITY_MODE.AMOUNT,\r\n $prestigeAvailable: () => Player.canEternity,\r\n $prestigeLevel: 2,\r\n $prestigeCurrency: \"EP\",\r\n $prestige: () => eternity(false, true),\r\n $respec: () => {\r\n player.respec = true;\r\n },\r\n});\r\ncreateInCategory(PrestigeEvent, \"Reality\", /reality/i, {\r\n $autobuyer: () => Autobuyer.reality,\r\n $autobuyerCurrencyMode: AUTO_REALITY_MODE.RM,\r\n $prestigeAvailable: () => isRealityAvailable(),\r\n $prestigeLevel: 3,\r\n $prestigeCurrency: \"RM\",\r\n $prestige: () => autoReality(),\r\n $respec: () => {\r\n player.reality.respec = true;\r\n },\r\n});\r\n\r\ncreateInCategory(StudyPath, \"Idle\", /idle/i, { $studyPath: TIME_STUDY_PATH.IDLE });\r\ncreateInCategory(StudyPath, \"Passive\", /passive/i, { $studyPath: TIME_STUDY_PATH.PASSIVE });\r\ncreateInCategory(StudyPath, \"Active\", /active/i, { $studyPath: TIME_STUDY_PATH.ACTIVE });\r\ncreateInCategory(StudyPath, \"Antimatter\", /antimatter/i, { $studyPath: TIME_STUDY_PATH.ANTIMATTER_DIM });\r\ncreateInCategory(StudyPath, \"Time\", /time/i, { $studyPath: TIME_STUDY_PATH.TIME_DIM });\r\ncreateInCategory(StudyPath, \"Light\", /light/i, { $studyPath: TIME_STUDY_PATH.LIGHT });\r\ncreateInCategory(StudyPath, \"Dark\", /dark/i, { $studyPath: TIME_STUDY_PATH.DARK });\r\n\r\ncreateInCategory(TimeUnit, \"Milliseconds\", /ms/i, {\r\n $autocomplete: \"ms\",\r\n $scale: 1,\r\n});\r\ncreateInCategory(TimeUnit, \"Seconds\", /s(ec(onds?)?)?/i, {\r\n $autocomplete: \"sec\",\r\n $scale: 1000,\r\n});\r\ncreateInCategory(TimeUnit, \"Minutes\", /m(in(utes?)?)?/i, {\r\n $autocomplete: \"min\",\r\n $scale: 60 * 1000,\r\n});\r\ncreateInCategory(TimeUnit, \"Hours\", /h(ours?)?/i, {\r\n $autocomplete: \"hours\",\r\n $scale: 3600 * 1000,\r\n});\r\n\r\nconst Keyword = createToken({\r\n name: \"Keyword\",\r\n pattern: Lexer.NA,\r\n longer_alt: Identifier,\r\n});\r\n\r\nconst keywordTokens = [];\r\nconst createKeyword = (name, pattern, props = {}) => {\r\n const categories = [Keyword];\r\n if (props.extraCategories) categories.push(...props.extraCategories);\r\n const token = createToken({\r\n name,\r\n pattern,\r\n categories,\r\n longer_alt: Identifier,\r\n });\r\n token.$autocomplete = name.toLocaleLowerCase();\r\n keywordTokens.push(token);\r\n Object.assign(token, props);\r\n return token;\r\n};\r\n\r\ncreateKeyword(\"Auto\", /auto/i);\r\ncreateKeyword(\"Buy\", /buy/i);\r\n// Necessary to hide it from Codemirror's tab auto-completion\r\ncreateKeyword(\"Blob\", /blob\\s\\s/i, {\r\n $unlocked: () => false,\r\n});\r\ncreateKeyword(\"If\", /if/i);\r\ncreateKeyword(\"Load\", /load/i);\r\ncreateKeyword(\"Notify\", /notify/i);\r\ncreateKeyword(\"Nowait\", /nowait/i);\r\ncreateKeyword(\"Off\", /off/i);\r\ncreateKeyword(\"On\", /on/i);\r\ncreateKeyword(\"Pause\", /pause/i);\r\n// Names are a little special, because they can be named anything (like ec12 or wait)\r\n// So, we consume the label at the same time as we consume the preset. In order to report\r\n// errors, we also match just the word name. And, we have to not match comments.\r\ncreateKeyword(\"Name\", /name([ \\t]+(\\/(?!\\/)|[^\\n#/])*)?/i);\r\ncreateKeyword(\"Id\", /id\\b([ \\t]+\\d)?/i);\r\ncreateKeyword(\"Purchase\", /purchase/i);\r\ncreateKeyword(\"Respec\", /respec/i);\r\ncreateKeyword(\"Restart\", /restart/i);\r\ncreateKeyword(\"Start\", /start/i);\r\ncreateKeyword(\"Stop\", /stop/i);\r\ncreateKeyword(\"Studies\", /studies/i);\r\ncreateKeyword(\"Unlock\", /unlock/i);\r\ncreateKeyword(\"Until\", /until/i);\r\ncreateKeyword(\"Use\", /use/i);\r\ncreateKeyword(\"Wait\", /wait/i);\r\ncreateKeyword(\"While\", /while/i);\r\ncreateKeyword(\"BlackHole\", /black[ \\t]+hole/i, {\r\n $autocomplete: \"black hole\",\r\n $unlocked: () => BlackHole(1).isUnlocked,\r\n});\r\ncreateKeyword(\"StoreGameTime\", /stored?[ \\t]+game[ \\t]+time/i, {\r\n $autocomplete: \"store game time\",\r\n $unlocked: () => Enslaved.isUnlocked,\r\n});\r\n\r\ncreateKeyword(\"Dilation\", /dilation/i);\r\ncreateKeyword(\"EC\", /ec/i);\r\ncreateKeyword(\"XHighest\", /x[ \\t]+highest/i, {\r\n $autocomplete: \"x highest\",\r\n});\r\n\r\n// We allow ECLiteral to consume lots of digits because that makes error reporting more\r\n// clear (it's nice to say ec123 is an invalid ec)\r\nconst ECLiteral = createToken({\r\n name: \"ECLiteral\",\r\n pattern: /ec[1-9][0-9]*/i,\r\n longer_alt: Identifier,\r\n});\r\n\r\nconst LCurly = createToken({ name: \"LCurly\", pattern: /[ \\t]*{/ });\r\nconst RCurly = createToken({ name: \"RCurly\", pattern: /[ \\t]*}/ });\r\nconst Comma = createToken({ name: \"Comma\", pattern: /,/ });\r\nconst Pipe = createToken({ name: \"Pipe\", pattern: /\\|/, label: \"|\" });\r\nconst Dash = createToken({ name: \"Dash\", pattern: /-/, label: \"-\" });\r\nconst Exclamation = createToken({ name: \"Exclamation\", pattern: /!/, label: \"!\" });\r\n\r\n// The order here is the order the lexer looks for tokens in.\r\nexport const automatorTokens = [\r\n HSpace, StringLiteral, StringLiteralSingleQuote, Comment, EOL,\r\n ComparisonOperator, ...tokenLists.ComparisonOperator,\r\n LCurly, RCurly, Comma, EqualSign, Pipe, Dash, Exclamation,\r\n BlackHoleStr, NumberLiteral,\r\n AutomatorCurrency, ...tokenLists.AutomatorCurrency,\r\n ECLiteral,\r\n Keyword, ...keywordTokens,\r\n PrestigeEvent, ...tokenLists.PrestigeEvent,\r\n StudyPath, ...tokenLists.StudyPath,\r\n TimeUnit, ...tokenLists.TimeUnit,\r\n Identifier,\r\n];\r\n\r\n// Labels only affect error messages and Diagrams.\r\nLCurly.LABEL = \"'{'\";\r\nRCurly.LABEL = \"'}'\";\r\nNumberLiteral.LABEL = \"Number\";\r\nComma.LABEL = \"❟\";\r\n\r\nexport const lexer = new Lexer(automatorTokens, {\r\n positionTracking: \"full\",\r\n ensureOptimizations: true\r\n});\r\n\r\n// The lexer uses an ID system that's separate from indices into the token array\r\nexport const tokenIds = [];\r\nfor (const token of lexer.lexerDefinition) {\r\n tokenIds[token.tokenTypeIdx] = token;\r\n}\r\n\r\n// We use this while building up the grammar\r\nexport const tokenMap = automatorTokens.mapToObject(e => e.name, e => e);\r\n\r\nconst automatorCurrencyNames = tokenLists.AutomatorCurrency.map(i => i.$autocomplete.toUpperCase());\r\n\r\nexport const standardizeAutomatorValues = function(x) {\r\n try {\r\n if (automatorCurrencyNames.includes(x.toUpperCase())) return x.toUpperCase();\r\n } catch {\r\n // This only happens if the input is a number or Decimal, in which case we don't attempt to change any formatting\r\n // and simply return\r\n return x;\r\n }\r\n for (const i of tokenLists.AutomatorCurrency) {\r\n // Check for a match of the full string.\r\n if (x.match(i.PATTERN) && x.match(i.PATTERN)[0].length === x.length) {\r\n return i.$autocomplete.toUpperCase();\r\n }\r\n }\r\n // If we get to this point, we haven't matched a currency name and instead assume it's a defined constant and\r\n // return it without any format changes since these are case-sensitive\r\n return x;\r\n};\r\n\r\n// In order to disallow individual words within command key words/phrases, we need to ignore certain patterns (mostly\r\n// ones with special regex characters), split the rest of them up across all spaces and tabs, and then flatten the\r\n// final resulting array. Note that this technically duplicates words present in multiple phrases (eg. \"pending\")\r\nconst ignoredPatterns = [\"Identifier\", \"LCurly\", \"RCurly\"];\r\nexport const forbiddenConstantPatterns = lexer.lexerDefinition\r\n .filter(p => !ignoredPatterns.includes(p.name))\r\n .map(p => p.PATTERN.source)\r\n .flatMap(p => ((p.includes(\"(\") || p.includes(\")\")) ? p : p.split(\"[ \\\\t]+\")));\r\n","import { standardizeAutomatorValues, tokenMap as T } from \"./lexer\";\r\n\r\n/**\r\n * Note: the $ shorthand for the parser object is required by Chevrotain. Don't mess with it.\r\n */\r\n\r\nconst presetSplitter = /name[ \\t]+(.+$)/ui;\r\nconst idSplitter = /id[ \\t]+(\\d)/ui;\r\n\r\nfunction prestigeNotify(flag) {\r\n if (!AutomatorBackend.isOn) return;\r\n const state = AutomatorBackend.stack.top.commandState;\r\n if (state && state.prestigeLevel !== undefined) {\r\n state.prestigeLevel = Math.max(state.prestigeLevel, flag);\r\n }\r\n}\r\n\r\nEventHub.logic.on(GAME_EVENT.BIG_CRUNCH_AFTER, () => prestigeNotify(T.Infinity.$prestigeLevel));\r\nEventHub.logic.on(GAME_EVENT.ETERNITY_RESET_AFTER, () => prestigeNotify(T.Eternity.$prestigeLevel));\r\nEventHub.logic.on(GAME_EVENT.REALITY_RESET_AFTER, () => prestigeNotify(T.Reality.$prestigeLevel));\r\n\r\n// Used by while and until - in order to get the text corrext, we need to invert the boolean if it's an until\r\n// eslint-disable-next-line max-params\r\nfunction compileConditionLoop(evalComparison, commands, ctx, isUntil) {\r\n return {\r\n run: () => {\r\n const loopStr = isUntil ? \"UNTIL\" : \"WHILE\";\r\n if (!evalComparison()) {\r\n AutomatorData.logCommandEvent(`Checked ${parseConditionalIntoText(ctx)} (${isUntil}),\r\n exiting loop at line ${AutomatorBackend.translateLineNumber(ctx.RCurly[0].startLine + 1) - 1}\r\n (end of ${loopStr} loop)`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION;\r\n }\r\n AutomatorBackend.push(commands);\r\n AutomatorData.logCommandEvent(`Checked ${parseConditionalIntoText(ctx)} (${!isUntil}),\r\n moving to line ${AutomatorBackend.translateLineNumber(ctx.LCurly[0].startLine + 1) - 1}\r\n (start of ${loopStr} loop)`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.SAME_INSTRUCTION;\r\n },\r\n blockCommands: commands,\r\n };\r\n}\r\n\r\n// Extracts the conditional out of a command and returns it as text\r\nfunction parseConditionalIntoText(ctx) {\r\n const comp = ctx.comparison[0].children;\r\n const getters = comp.compareValue.map(cv => {\r\n if (cv.children.AutomatorCurrency) return () => cv.children.AutomatorCurrency[0].image;\r\n const val = cv.children.$value;\r\n if (typeof val === \"string\") return () => val;\r\n return () => format(val, 2, 2);\r\n });\r\n const compareFn = comp.ComparisonOperator[0].image;\r\n return `${getters[0]()} ${compareFn} ${getters[1]()}`;\r\n}\r\n\r\n// Determines how much (prestige currency) the previous (layer) reset gave, for event logging\r\nfunction findLastPrestigeRecord(layer) {\r\n let addedECs, gainedEP;\r\n switch (layer) {\r\n case \"INFINITY\":\r\n return `${format(player.records.recentInfinities[0][1], 2)} IP`;\r\n case \"ETERNITY\":\r\n addedECs = AutomatorData.lastECCompletionCount;\r\n gainedEP = `${format(player.records.recentEternities[0][1], 2)} EP`;\r\n return addedECs === 0\r\n ? `${gainedEP}`\r\n : `${gainedEP}, ${addedECs} completions`;\r\n case \"REALITY\":\r\n return `${format(player.records.recentRealities[0][1], 2)} RM`;\r\n default:\r\n throw Error(`Unrecognized prestige ${layer} in Automator event log`);\r\n }\r\n}\r\n\r\nexport const AutomatorCommands = [\r\n {\r\n id: \"auto\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Auto);\r\n $.CONSUME(T.PrestigeEvent);\r\n $.OR([\r\n { ALT: () => $.CONSUME(T.On) },\r\n { ALT: () => $.CONSUME(T.Off) },\r\n { ALT: () => $.OR1([\r\n { ALT: () => $.SUBRULE($.duration) },\r\n { ALT: () => $.SUBRULE($.xHighest) },\r\n { ALT: () => $.SUBRULE($.currencyAmount) },\r\n ]) },\r\n ]);\r\n },\r\n // eslint-disable-next-line complexity\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.Auto[0].startLine;\r\n if (ctx.PrestigeEvent && ctx.currencyAmount) {\r\n const desired$ = ctx.PrestigeEvent[0].tokenType.$prestigeCurrency;\r\n const specified$ = ctx.currencyAmount[0].children.AutomatorCurrency[0].tokenType.name;\r\n if (desired$ !== specified$) {\r\n V.addError(ctx.currencyAmount, `AutomatorCurrency doesn't match prestige (${desired$} vs ${specified$})`,\r\n `Use ${desired$} for the specified prestige resource`);\r\n return false;\r\n }\r\n }\r\n\r\n if (!ctx.PrestigeEvent) return true;\r\n const advSetting = ctx.duration || ctx.xHighest;\r\n // Do not change to switch statement; T.XXX are Objects, not primitive values\r\n if (ctx.PrestigeEvent[0].tokenType === T.Infinity) {\r\n if (!Autobuyer.bigCrunch.isUnlocked) {\r\n V.addError(ctx.PrestigeEvent, \"Infinity autobuyer is not unlocked\",\r\n \"Complete the Big Crunch Autobuyer challenge to use this command\");\r\n return false;\r\n }\r\n if (advSetting && !EternityMilestone.bigCrunchModes.isReached) {\r\n V.addError((ctx.duration || ctx.xHighest)[0],\r\n \"Advanced Infinity autobuyer settings are not unlocked\",\r\n `Reach ${quantifyInt(\"Eternity\", EternityMilestone.bigCrunchModes.config.eternities)}\r\n to use this command`);\r\n return false;\r\n }\r\n }\r\n if (ctx.PrestigeEvent[0].tokenType === T.Eternity) {\r\n if (!EternityMilestone.autobuyerEternity.isReached) {\r\n V.addError(ctx.PrestigeEvent, \"Eternity autobuyer is not unlocked\",\r\n `Reach ${quantifyInt(\"Eternity\", EternityMilestone.autobuyerEternity.config.eternities)}\r\n to use this command`);\r\n return false;\r\n }\r\n if (advSetting && !RealityUpgrade(13).isBought) {\r\n V.addError((ctx.duration || ctx.xHighest)[0],\r\n \"Advanced Eternity autobuyer settings are not unlocked\",\r\n \"Purchase the Reality Upgrade which unlocks advanced Eternity autobuyer settings\");\r\n return false;\r\n }\r\n }\r\n if (ctx.PrestigeEvent[0].tokenType === T.Reality) {\r\n if (!RealityUpgrade(25).isBought) {\r\n V.addError(ctx.PrestigeEvent, \"Reality autobuyer is not unlocked\",\r\n \"Purchase the Reality Upgrade which unlocks the Reality autobuyer\");\r\n return false;\r\n }\r\n if (advSetting) {\r\n V.addError((ctx.duration || ctx.xHighest)[0],\r\n \"Auto Reality cannot be set to a duration or x highest\",\r\n \"Use RM for Auto Reality\");\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n compile: ctx => {\r\n const isReality = ctx.PrestigeEvent[0].tokenType === T.Reality;\r\n const on = Boolean(ctx.On || ctx.duration || ctx.xHighest || ctx.currencyAmount);\r\n const duration = ctx.duration ? ctx.duration[0].children.$value : undefined;\r\n const xHighest = ctx.xHighest ? ctx.xHighest[0].children.$value : undefined;\r\n const fixedAmount = ctx.currencyAmount ? ctx.currencyAmount[0].children.$value : undefined;\r\n const durationMode = ctx.PrestigeEvent[0].tokenType.$autobuyerDurationMode;\r\n const xHighestMode = ctx.PrestigeEvent[0].tokenType.$autobuyerXHighestMode;\r\n const fixedMode = ctx.PrestigeEvent[0].tokenType.$autobuyerCurrencyMode;\r\n const autobuyer = ctx.PrestigeEvent[0].tokenType.$autobuyer();\r\n return () => {\r\n autobuyer.isActive = on;\r\n let currSetting = \"\";\r\n if (duration !== undefined) {\r\n autobuyer.mode = durationMode;\r\n autobuyer.time = duration / 1000;\r\n // Can't do the units provided in the script because it's been parsed away like 4 layers up the call stack\r\n currSetting = `${autobuyer.time > 1000 ? formatInt(autobuyer.time) : quantify(\"second\", autobuyer.time)}`;\r\n } else if (xHighest !== undefined) {\r\n autobuyer.mode = xHighestMode;\r\n autobuyer.xHighest = new Decimal(xHighest);\r\n currSetting = `${format(xHighest, 2, 2)} times highest`;\r\n } else if (fixedAmount !== undefined) {\r\n autobuyer.mode = fixedMode;\r\n if (isReality) {\r\n autobuyer.rm = new Decimal(fixedAmount);\r\n currSetting = `${format(autobuyer.rm, 2)} RM`;\r\n } else {\r\n autobuyer.amount = new Decimal(fixedAmount);\r\n currSetting = `${fixedAmount} ${ctx.PrestigeEvent[0].image === \"infinity\" ? \"IP\" : \"EP\"}`;\r\n }\r\n }\r\n // Settings are drawn from the actual automator text; it's not feasible to parse out all the settings\r\n // for every combination of autobuyers when they get turned off\r\n const settingString = (autobuyer.isActive && currSetting !== \"\") ? `(Setting: ${currSetting})` : \"\";\r\n AutomatorData.logCommandEvent(`Automatic ${ctx.PrestigeEvent[0].image}\r\n turned ${autobuyer.isActive ? \"ON\" : \"OFF\"} ${settingString}`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => {\r\n const duration = ctx.duration\r\n ? `${ctx.duration[0].children.NumberLiteral[0].image} ${ctx.duration[0].children.TimeUnit[0].image}`\r\n : undefined;\r\n const xHighest = ctx.xHighest ? ctx.xHighest[0].children.$value : undefined;\r\n const fixedAmount = ctx.currencyAmount\r\n ? `${ctx.currencyAmount[0].children.NumberLiteral[0].image}` +\r\n ` ${ctx.currencyAmount[0].children.AutomatorCurrency[0].image.toUpperCase()}`\r\n : undefined;\r\n const on = Boolean(ctx.On);\r\n let input = \"\";\r\n\r\n if (duration) input = duration;\r\n else if (xHighest) input = `${xHighest} x highest`;\r\n else if (fixedAmount) input = `${fixedAmount}`;\r\n else input = (on ? \"ON\" : \"OFF\");\r\n\r\n return {\r\n singleSelectionInput: ctx.PrestigeEvent[0].tokenType.name.toUpperCase(),\r\n singleTextInput: input,\r\n ...automatorBlocksMap.AUTO\r\n };\r\n }\r\n },\r\n {\r\n id: \"blackHole\",\r\n rule: $ => () => {\r\n $.CONSUME(T.BlackHole);\r\n $.OR([\r\n { ALT: () => $.CONSUME(T.On) },\r\n { ALT: () => $.CONSUME(T.Off) },\r\n ]);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.BlackHole[0].startLine;\r\n if (!BlackHole(1).isUnlocked) {\r\n if (Enslaved.isRunning || Pelle.isDisabled(\"blackhole\")) {\r\n V.addError(ctx.BlackHole[0], \"Black Hole is disabled in your current Reality\",\r\n \"Return to normal Reality conditions to use this command again\");\r\n } else {\r\n V.addError(ctx.BlackHole[0], \"Black Hole is not unlocked\",\r\n \"Unlock the Black Hole in order to pause or unpause it\");\r\n }\r\n return false;\r\n }\r\n return true;\r\n },\r\n compile: ctx => {\r\n const on = Boolean(ctx.On);\r\n return () => {\r\n if (on === BlackHoles.arePaused) BlackHoles.togglePause();\r\n AutomatorData.logCommandEvent(`Black Holes toggled ${ctx.On ? \"ON\" : \"OFF\"}`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n singleSelectionInput: ctx.On ? \"ON\" : \"OFF\",\r\n ...automatorBlocksMap[\"BLACK HOLE\"]\r\n })\r\n },\r\n {\r\n id: \"blob\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Blob);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Blob[0].startLine;\r\n return true;\r\n },\r\n // This is an easter egg, it shouldn't do anything\r\n compile: () => () => AUTOMATOR_COMMAND_STATUS.SKIP_INSTRUCTION,\r\n blockify: () => ({\r\n ...automatorBlocksMap.BLOB,\r\n })\r\n },\r\n {\r\n id: \"comment\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Comment);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Comment[0].startLine;\r\n return true;\r\n },\r\n // Comments should be no-ops\r\n compile: () => () => AUTOMATOR_COMMAND_STATUS.SKIP_INSTRUCTION,\r\n blockify: ctx => ({\r\n ...automatorBlocksMap.COMMENT,\r\n singleTextInput: ctx.Comment[0].image.replace(/(#|\\/\\/)\\s?/u, \"\"),\r\n })\r\n },\r\n {\r\n id: \"ifBlock\",\r\n rule: $ => () => {\r\n $.CONSUME(T.If);\r\n $.SUBRULE($.comparison);\r\n $.CONSUME(T.LCurly);\r\n $.CONSUME(T.EOL);\r\n $.SUBRULE($.block);\r\n $.CONSUME(T.RCurly);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.If[0].startLine;\r\n return V.checkBlock(ctx, ctx.If);\r\n },\r\n compile: (ctx, C) => {\r\n const evalComparison = C.visit(ctx.comparison);\r\n const commands = C.visit(ctx.block);\r\n return {\r\n run: S => {\r\n // If the commandState is empty, it means we haven't evaluated the if yet\r\n if (S.commandState !== null) return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n // We use this flag to make \"single step\" advance to the next command after the if when the block ends\r\n S.commandState = {\r\n advanceOnPop: true,\r\n ifEndLine: ctx.RCurly[0].startLine\r\n };\r\n if (!evalComparison()) {\r\n AutomatorData.logCommandEvent(`Checked ${parseConditionalIntoText(ctx)} (false),\r\n skipping to line ${AutomatorBackend.translateLineNumber(ctx.RCurly[0].startLine + 1)}`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n AutomatorBackend.push(commands);\r\n AutomatorData.logCommandEvent(`Checked ${parseConditionalIntoText(ctx)} (true),\r\n entering IF block`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.SAME_INSTRUCTION;\r\n },\r\n blockCommands: commands,\r\n };\r\n },\r\n blockify: (ctx, B) => {\r\n const commands = [];\r\n B.visit(ctx.block, commands);\r\n const comparison = B.visit(ctx.comparison);\r\n return {\r\n nest: commands,\r\n ...automatorBlocksMap.IF,\r\n ...comparison,\r\n genericInput1: standardizeAutomatorValues(comparison.genericInput1),\r\n genericInput2: standardizeAutomatorValues(comparison.genericInput2)\r\n };\r\n }\r\n },\r\n {\r\n id: \"notify\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Notify);\r\n $.OR([\r\n { ALT: () => $.CONSUME(T.StringLiteral) },\r\n { ALT: () => $.CONSUME(T.StringLiteralSingleQuote) },\r\n ]);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Notify[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => {\r\n const notifyText = ctx.StringLiteral || ctx.StringLiteralSingleQuote;\r\n return () => {\r\n GameUI.notify.automator(`Automator: ${notifyText[0].image}`);\r\n AutomatorData.logCommandEvent(`NOTIFY call: ${notifyText[0].image}`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n ...automatorBlocksMap.NOTIFY,\r\n singleTextInput: (ctx.StringLiteral || ctx.StringLiteralSingleQuote)[0].image,\r\n })\r\n },\r\n {\r\n // Note: this has to appear before pause\r\n id: \"pauseTime\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Pause);\r\n $.OR([\r\n { ALT: () => $.SUBRULE($.duration) },\r\n { ALT: () => $.CONSUME(T.Identifier) },\r\n ]);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.Pause[0].startLine;\r\n let duration;\r\n if (ctx.Identifier) {\r\n if (!V.isValidVarFormat(ctx.Identifier[0], AUTOMATOR_VAR_TYPES.DURATION)) {\r\n V.addError(ctx, `Constant ${ctx.Identifier[0].image} is not a valid time duration constant`,\r\n `Ensure that ${ctx.Identifier[0].image} is a number of seconds less than\r\n ${format(Number.MAX_VALUE / 1000)}`);\r\n return false;\r\n }\r\n const lookup = V.lookupVar(ctx.Identifier[0], AUTOMATOR_VAR_TYPES.DURATION);\r\n duration = lookup ? lookup.value : lookup;\r\n } else {\r\n duration = V.visit(ctx.duration);\r\n }\r\n ctx.$duration = duration;\r\n return ctx.$duration !== undefined;\r\n },\r\n compile: ctx => {\r\n const duration = ctx.$duration;\r\n return S => {\r\n let timeString;\r\n if (ctx.duration) {\r\n const c = ctx.duration[0].children;\r\n timeString = `${c.NumberLiteral[0].image} ${c.TimeUnit[0].image}`;\r\n } else {\r\n // This is the case for a defined constant; its value was parsed out during validation\r\n timeString = TimeSpan.fromMilliseconds(duration);\r\n }\r\n if (S.commandState === null) {\r\n S.commandState = { timeMs: 0 };\r\n AutomatorData.logCommandEvent(`Pause started (waiting ${timeString})`, ctx.startLine);\r\n } else {\r\n S.commandState.timeMs += Math.max(Time.unscaledDeltaTime.milliseconds.toNumber(), AutomatorBackend.currentInterval);\r\n }\r\n const finishPause = S.commandState.timeMs >= duration;\r\n if (finishPause) {\r\n AutomatorData.logCommandEvent(`Pause finished (waited ${timeString})`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => {\r\n let blockArg;\r\n if (ctx.duration) {\r\n const c = ctx.duration[0].children;\r\n blockArg = `${c.NumberLiteral[0].image} ${c.TimeUnit[0].image}`;\r\n } else {\r\n blockArg = `${ctx.Identifier[0].image}`;\r\n }\r\n return {\r\n ...automatorBlocksMap.PAUSE,\r\n singleTextInput: blockArg\r\n };\r\n }\r\n },\r\n {\r\n id: \"prestige\",\r\n rule: $ => () => {\r\n $.CONSUME(T.PrestigeEvent);\r\n $.OPTION(() => $.CONSUME(T.Nowait));\r\n $.OPTION1(() => $.CONSUME(T.Respec));\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.PrestigeEvent[0].startLine;\r\n\r\n if (ctx.PrestigeEvent && ctx.PrestigeEvent[0].tokenType === T.Eternity &&\r\n !EternityMilestone.autobuyerEternity.isReached) {\r\n V.addError(ctx.PrestigeEvent, \"Eternity autobuyer is not unlocked\",\r\n `Reach ${quantifyInt(\"Eternity\", EternityMilestone.autobuyerEternity.config.eternities)}\r\n to use this command`);\r\n return false;\r\n }\r\n\r\n if (ctx.PrestigeEvent && ctx.PrestigeEvent[0].tokenType === T.Reality && !RealityUpgrade(25).isBought) {\r\n V.addError(ctx.PrestigeEvent, \"Reality autobuyer is not unlocked\",\r\n \"Purchase the Reality Upgrade which unlocks the Reality autobuyer\");\r\n return false;\r\n }\r\n\r\n if (ctx.PrestigeEvent && ctx.PrestigeEvent[0].tokenType === T.Infinity && ctx.Respec) {\r\n V.addError(ctx.Respec, \"There's no 'respec' for infinity\",\r\n \"Remove 'respec' from the command\");\r\n }\r\n return true;\r\n },\r\n compile: ctx => {\r\n const nowait = ctx.Nowait !== undefined;\r\n const respec = ctx.Respec !== undefined;\r\n const prestigeToken = ctx.PrestigeEvent[0].tokenType;\r\n return () => {\r\n const available = prestigeToken.$prestigeAvailable();\r\n if (!available) {\r\n if (!nowait) return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n AutomatorData.logCommandEvent(`${ctx.PrestigeEvent.image} attempted, but skipped due to NOWAIT`,\r\n ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (respec) prestigeToken.$respec();\r\n prestigeToken.$prestige();\r\n const prestigeName = ctx.PrestigeEvent[0].image.toUpperCase();\r\n AutomatorData.logCommandEvent(`${prestigeName} triggered (${findLastPrestigeRecord(prestigeName)})`,\r\n ctx.startLine);\r\n // In the prestigeToken.$prestige() line above, performing a reality reset has code internal to the call\r\n // which makes the automator restart. However, in that case we also need to update the execution state here,\r\n // or else the restarted automator will immediately advance lines and always skip the first command\r\n return (prestigeName === \"REALITY\" && AutomatorBackend.state.forceRestart)\r\n ? AUTOMATOR_COMMAND_STATUS.RESTART\r\n : AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n ...automatorBlocksMap[\r\n ctx.PrestigeEvent[0].tokenType.name.toUpperCase()\r\n ],\r\n nowait: ctx.Nowait !== undefined,\r\n respec: ctx.Respec !== undefined\r\n })\r\n },\r\n {\r\n id: \"startDilation\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Start);\r\n $.CONSUME(T.Dilation);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Start[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => () => {\r\n if (player.dilation.active) {\r\n AutomatorData.logCommandEvent(`Start Dilation encountered but ignored due to already being dilated`,\r\n ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (startDilatedEternity(true)) {\r\n AutomatorData.logCommandEvent(`Dilation entered`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION;\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n },\r\n blockify: () => ({ singleSelectionInput: \"DILATION\", ...automatorBlocksMap.START })\r\n },\r\n {\r\n id: \"startEC\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Start);\r\n $.SUBRULE($.eternityChallenge);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Start[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => {\r\n const ecNumber = ctx.eternityChallenge[0].children.$ecNumber;\r\n return () => {\r\n const ec = EternityChallenge(ecNumber);\r\n if (ec.isRunning) {\r\n AutomatorData.logCommandEvent(`Start EC encountered but ignored due to already being in the specified EC`,\r\n ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (!EternityChallenge(ecNumber).isUnlocked) {\r\n if (!TimeStudy.eternityChallenge(ecNumber).purchase(true)) {\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n }\r\n }\r\n if (ec.start(true)) {\r\n AutomatorData.logCommandEvent(`Eternity Challenge ${ecNumber} started`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION;\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n singleSelectionInput: \"EC\",\r\n singleTextInput: ctx.eternityChallenge[0].children.$ecNumber,\r\n ...automatorBlocksMap.START\r\n })\r\n },\r\n {\r\n id: \"storeGameTime\",\r\n rule: $ => () => {\r\n $.CONSUME(T.StoreGameTime);\r\n $.OR([\r\n { ALT: () => $.CONSUME(T.On) },\r\n { ALT: () => $.CONSUME(T.Off) },\r\n { ALT: () => $.CONSUME(T.Use) },\r\n ]);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.StoreGameTime[0].startLine;\r\n if (!Enslaved.isUnlocked) {\r\n V.addError(ctx.StoreGameTime[0], \"You do not yet know how to store game time\",\r\n \"Unlock the ability to store game time\");\r\n return false;\r\n }\r\n return true;\r\n },\r\n compile: ctx => {\r\n if (ctx.Use) return () => {\r\n if (Enslaved.isUnlocked) {\r\n Enslaved.useStoredTime(false);\r\n AutomatorData.logCommandEvent(`Stored game time used`, ctx.startLine);\r\n } else {\r\n AutomatorData.logCommandEvent(`Attempted to use stored game time, but failed (not unlocked yet)`,\r\n ctx.startLine);\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n };\r\n const on = Boolean(ctx.On);\r\n return () => {\r\n if (on !== player.celestials.enslaved.isStoring) Enslaved.toggleStoreBlackHole();\r\n AutomatorData.logCommandEvent(`Storing game time toggled ${ctx.On ? \"ON\" : \"OFF\"}`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n // eslint-disable-next-line no-nested-ternary\r\n singleSelectionInput: ctx.Use ? \"USE\" : (ctx.On ? \"ON\" : \"OFF\"),\r\n ...automatorBlocksMap[\"STORE GAME TIME\"]\r\n })\r\n },\r\n {\r\n id: \"studiesBuy\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Studies);\r\n $.OPTION(() => $.CONSUME(T.Nowait));\r\n $.CONSUME(T.Purchase);\r\n $.OR([\r\n { ALT: () => $.SUBRULE($.studyList) },\r\n { ALT: () => $.CONSUME1(T.Identifier) },\r\n ]);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.Studies[0].startLine;\r\n if (ctx.Identifier) {\r\n if (!V.isValidVarFormat(ctx.Identifier[0], AUTOMATOR_VAR_TYPES.STUDIES)) {\r\n V.addError(ctx, `Constant ${ctx.Identifier[0].image} is not a valid Time Study constant`,\r\n `Ensure that ${ctx.Identifier[0].image} is a properly-formatted Time Study string`);\r\n return false;\r\n }\r\n const varInfo = V.lookupVar(ctx.Identifier[0], AUTOMATOR_VAR_TYPES.STUDIES);\r\n ctx.$studies = varInfo.value;\r\n ctx.$studies.image = ctx.Identifier[0].image;\r\n } else if (ctx.studyList) {\r\n ctx.$studies = V.visit(ctx.studyList);\r\n }\r\n return true;\r\n },\r\n compile: ctx => {\r\n const studies = ctx.$studies;\r\n if (ctx.Nowait === undefined) return () => {\r\n let prePurchasedStudies = 0;\r\n let purchasedStudies = 0;\r\n let finalPurchasedTS;\r\n for (const tsNumber of studies.normal) {\r\n if (TimeStudy(tsNumber).isBought) prePurchasedStudies++;\r\n else if (TimeStudy(tsNumber).purchase(true)) purchasedStudies++;\r\n else finalPurchasedTS = finalPurchasedTS ?? tsNumber;\r\n }\r\n if (prePurchasedStudies + purchasedStudies < studies.normal.length) {\r\n if (prePurchasedStudies + purchasedStudies === 0) {\r\n AutomatorData.logCommandEvent(`Could not purchase any of the specified Time Studies`, ctx.startLine);\r\n }\r\n if (purchasedStudies > 0 && finalPurchasedTS) {\r\n AutomatorData.logCommandEvent(`Purchased ${quantifyInt(\"Time Study\", purchasedStudies)} and stopped at\r\n Time Study ${finalPurchasedTS}, waiting to attempt to purchase more Time Studies`, ctx.startLine);\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n }\r\n const hasEC = studies.ec ? TimeStudy.eternityChallenge(studies.ec).isBought : false;\r\n if (!studies.ec || (hasEC && !studies.startEC)) {\r\n AutomatorData.logCommandEvent(`Purchased all specified Time Studies`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n const unlockedEC = TimeStudy.eternityChallenge(studies.ec).purchase(true);\r\n if (hasEC || unlockedEC) {\r\n if (studies.startEC) {\r\n EternityChallenge(studies.ec).start(true);\r\n if (EternityChallenge(studies.ec).isRunning) {\r\n AutomatorData.logCommandEvent(`Purchased all specified Time Studies, then unlocked and started running\r\n Eternity Challenge ${studies.ec}`, ctx.startLine);\r\n } else {\r\n AutomatorData.logCommandEvent(`Purchased all specified Time Studies and unlocked Eternity Challenge\r\n ${studies.ec}, but failed to start it`, ctx.startLine);\r\n }\r\n } else {\r\n AutomatorData.logCommandEvent(`Purchased all specified Time Studies and unlocked Eternity Challenge\r\n ${studies.ec}`, ctx.startLine);\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n return () => {\r\n for (const tsNumber of studies.normal) TimeStudy(tsNumber).purchase(true);\r\n if (!studies.ec || TimeStudy.eternityChallenge(studies.ec).isBought) {\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n TimeStudy.eternityChallenge(studies.ec).purchase(true);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n singleTextInput: ctx.$studies.image,\r\n nowait: ctx.Nowait !== undefined,\r\n ...automatorBlocksMap[\"STUDIES PURCHASE\"]\r\n })\r\n },\r\n {\r\n id: \"studiesLoad\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Studies);\r\n $.OPTION(() => $.CONSUME(T.Nowait));\r\n $.CONSUME(T.Load);\r\n $.OR([\r\n { ALT: () => $.CONSUME1(T.Id) },\r\n { ALT: () => $.CONSUME1(T.Name) },\r\n ]);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.Studies[0].startLine;\r\n\r\n if (ctx.Id) {\r\n const split = idSplitter.exec(ctx.Id[0].image);\r\n\r\n if (!split || ctx.Id[0].isInsertedInRecovery) {\r\n V.addError(ctx, \"Missing preset id\",\r\n \"Provide the id of a saved study preset slot from the Time Studies page\");\r\n return false;\r\n }\r\n\r\n const id = parseInt(split[1], 10);\r\n if (id < 1 || id > 6) {\r\n V.addError(ctx.Id[0], `Could not find a preset with an id of ${id}`,\r\n \"Type in a valid id (1 - 6) for your study preset\");\r\n return false;\r\n }\r\n ctx.$presetIndex = id;\r\n return true;\r\n }\r\n\r\n if (ctx.Name) {\r\n const split = presetSplitter.exec(ctx.Name[0].image);\r\n\r\n if (!split || ctx.Name[0].isInsertedInRecovery) {\r\n V.addError(ctx, \"Missing preset name\",\r\n \"Provide the name of a saved study preset from the Time Studies page\");\r\n return false;\r\n }\r\n\r\n // If it's a name, we check to make sure it exists:\r\n const presetIndex = player.timestudy.presets.findIndex(e => e.name === split[1]) + 1;\r\n if (presetIndex === 0) {\r\n V.addError(ctx.Name[0], `Could not find preset named ${split[1]} (Note: Names are case-sensitive)`,\r\n \"Check to make sure you typed in the correct name for your study preset\");\r\n return false;\r\n }\r\n ctx.$presetIndex = presetIndex;\r\n return true;\r\n }\r\n return false;\r\n },\r\n compile: ctx => {\r\n const presetIndex = ctx.$presetIndex;\r\n return () => {\r\n const imported = new TimeStudyTree(player.timestudy.presets[presetIndex - 1].studies);\r\n const beforeCount = GameCache.currentStudyTree.value.purchasedStudies.length;\r\n TimeStudyTree.commitToGameState(imported.purchasedStudies, true, imported.startEC);\r\n const afterCount = GameCache.currentStudyTree.value.purchasedStudies.length;\r\n // Check if there are still any unbought studies from the preset after attempting to commit it all;\r\n // if there are then we keep trying on this line until there aren't, unless we are given nowait\r\n const missingStudyCount = imported.purchasedStudies\r\n .filter(s => !GameCache.currentStudyTree.value.purchasedStudies.includes(s)).length;\r\n\r\n const presetRepresentation = ctx.Name ? ctx.Name[0].image : ctx.Id[0].image;\r\n\r\n if (missingStudyCount === 0) {\r\n AutomatorData.logCommandEvent(`Fully loaded study preset ${presetRepresentation}`, ctx.startLine);\r\n } else if (afterCount > beforeCount) {\r\n AutomatorData.logCommandEvent(`Partially loaded study preset ${presetRepresentation}\r\n (missing ${quantifyInt(\"study\", missingStudyCount)})`, ctx.startLine);\r\n }\r\n return ctx.Nowait !== undefined || missingStudyCount === 0\r\n ? AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION\r\n : AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n singleSelectionInput: ctx.Name ? \"NAME\" : \"ID\",\r\n singleTextInput: ctx.Name ? player.timestudy.presets[ctx.$presetIndex - 1].name : ctx.$presetIndex,\r\n nowait: ctx.Nowait !== undefined,\r\n ...automatorBlocksMap[\"STUDIES LOAD\"]\r\n })\r\n },\r\n {\r\n id: \"studiesRespec\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Studies);\r\n $.CONSUME(T.Respec);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Studies[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => () => {\r\n player.respec = true;\r\n AutomatorData.logCommandEvent(`Turned study respec ON`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n },\r\n blockify: () => automatorBlocksMap[\"STUDIES RESPEC\"]\r\n },\r\n {\r\n id: \"unlockDilation\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Unlock);\r\n $.OPTION(() => $.CONSUME(T.Nowait));\r\n $.CONSUME(T.Dilation);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Unlock[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => {\r\n const nowait = ctx.Nowait !== undefined;\r\n return () => {\r\n if (PlayerProgress.dilationUnlocked()) {\r\n AutomatorData.logCommandEvent(`Skipped dilation unlock due to being already unlocked`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n const unlockedThisTick = TimeStudy.dilation.purchase(true);\r\n if (unlockedThisTick) {\r\n AutomatorData.logCommandEvent(`Unlocked Dilation`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (nowait) {\r\n AutomatorData.logCommandEvent(`Skipped dilation unlock due to lack of requirements (NOWAIT)`,\r\n ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n singleSelectionInput: \"DILATION\",\r\n nowait: ctx.Nowait !== undefined,\r\n ...automatorBlocksMap.UNLOCK\r\n })\r\n },\r\n {\r\n id: \"unlockEC\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Unlock);\r\n $.OPTION(() => $.CONSUME(T.Nowait));\r\n $.SUBRULE($.eternityChallenge);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Unlock[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => {\r\n const nowait = ctx.Nowait !== undefined;\r\n const ecNumber = ctx.eternityChallenge[0].children.$ecNumber;\r\n return () => {\r\n if (EternityChallenge(ecNumber).isUnlocked) {\r\n AutomatorData.logCommandEvent(`Skipped EC ${ecNumber} unlock due to being already unlocked`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (nowait) {\r\n AutomatorData.logCommandEvent(`EC ${ecNumber} unlock failed and skipped (NOWAIT)`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n const purchased = TimeStudy.eternityChallenge(ecNumber).purchase(true);\r\n if (purchased) {\r\n AutomatorData.logCommandEvent(`EC ${ecNumber} unlocked`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n singleSelectionInput: \"EC\",\r\n singleTextInput: ctx.eternityChallenge[0].children.$ecNumber,\r\n nowait: ctx.Nowait !== undefined,\r\n ...automatorBlocksMap.UNLOCK\r\n })\r\n },\r\n {\r\n id: \"untilLoop\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Until);\r\n $.OR([\r\n { ALT: () => $.SUBRULE($.comparison) },\r\n { ALT: () => $.CONSUME(T.PrestigeEvent) },\r\n ]);\r\n $.CONSUME(T.LCurly);\r\n $.CONSUME(T.EOL);\r\n $.SUBRULE($.block);\r\n $.CONSUME(T.RCurly);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.Until[0].startLine;\r\n return V.checkBlock(ctx, ctx.Until);\r\n },\r\n compile: (ctx, C) => {\r\n const commands = C.visit(ctx.block);\r\n if (ctx.comparison) {\r\n const evalComparison = C.visit(ctx.comparison);\r\n return compileConditionLoop(() => !evalComparison(), commands, ctx, true);\r\n }\r\n const prestigeLevel = ctx.PrestigeEvent[0].tokenType.$prestigeLevel;\r\n let prestigeName;\r\n switch (ctx.PrestigeEvent[0].tokenType) {\r\n case T.Infinity:\r\n prestigeName = \"Infinity\";\r\n break;\r\n case T.Eternity:\r\n prestigeName = \"Eternity\";\r\n break;\r\n case T.Reality:\r\n prestigeName = \"Reality\";\r\n break;\r\n default:\r\n throw Error(\"Unrecognized prestige layer in until loop\");\r\n }\r\n return {\r\n run: S => {\r\n if (S.commandState === null) {\r\n S.commandState = { prestigeLevel: 0 };\r\n }\r\n if (S.commandState.prestigeLevel >= prestigeLevel) {\r\n AutomatorData.logCommandEvent(`${prestigeName} prestige has occurred, exiting until loop`,\r\n ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n AutomatorBackend.push(commands);\r\n AutomatorData.logCommandEvent(`${prestigeName} prestige has not occurred yet, moving to line\r\n ${AutomatorBackend.translateLineNumber(ctx.LCurly[0].startLine + 1)} (start of until loop)`,\r\n ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.SAME_INSTRUCTION;\r\n },\r\n blockCommands: commands\r\n };\r\n },\r\n blockify: (ctx, B) => {\r\n const commands = [];\r\n B.visit(ctx.block, commands);\r\n const comparison = B.visit(ctx.comparison);\r\n if (ctx.comparison) {\r\n return {\r\n nest: commands,\r\n ...automatorBlocksMap.UNTIL,\r\n ...comparison,\r\n genericInput1: standardizeAutomatorValues(comparison.genericInput1),\r\n genericInput2: standardizeAutomatorValues(comparison.genericInput2)\r\n };\r\n }\r\n return {\r\n genericInput1: ctx.PrestigeEvent[0].tokenType.name.toUpperCase(),\r\n nest: commands,\r\n ...automatorBlocksMap.UNTIL\r\n };\r\n }\r\n },\r\n {\r\n id: \"waitCondition\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Wait);\r\n $.SUBRULE($.comparison);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Wait[0].startLine;\r\n return true;\r\n },\r\n compile: (ctx, C) => () => {\r\n const evalComparison = C.visit(ctx.comparison);\r\n const doneWaiting = evalComparison();\r\n if (doneWaiting) {\r\n const timeWaited = TimeSpan.fromMilliseconds(Date.now() - AutomatorData.waitStart).toStringShort();\r\n if (AutomatorData.isWaiting) {\r\n AutomatorData.logCommandEvent(`Continuing after WAIT\r\n (${parseConditionalIntoText(ctx)} is true, after ${timeWaited})`, ctx.startLine);\r\n } else {\r\n AutomatorData.logCommandEvent(`WAIT skipped (${parseConditionalIntoText(ctx)} is already true)`,\r\n ctx.startLine);\r\n }\r\n AutomatorData.isWaiting = false;\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (!AutomatorData.isWaiting) {\r\n AutomatorData.logCommandEvent(`Started WAIT for ${parseConditionalIntoText(ctx)}`, ctx.startLine);\r\n AutomatorData.waitStart = Date.now();\r\n }\r\n AutomatorData.isWaiting = true;\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n },\r\n blockify: (ctx, B) => {\r\n const commands = [];\r\n B.visit(ctx.block, commands);\r\n const comparison = B.visit(ctx.comparison);\r\n return {\r\n nest: commands,\r\n ...automatorBlocksMap.WAIT,\r\n ...comparison,\r\n genericInput1: standardizeAutomatorValues(comparison.genericInput1),\r\n genericInput2: standardizeAutomatorValues(comparison.genericInput2)\r\n };\r\n }\r\n },\r\n {\r\n id: \"waitEvent\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Wait);\r\n $.CONSUME(T.PrestigeEvent);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Wait[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => {\r\n const prestigeLevel = ctx.PrestigeEvent[0].tokenType.$prestigeLevel;\r\n return S => {\r\n if (S.commandState === null) {\r\n S.commandState = { prestigeLevel: 0 };\r\n }\r\n const prestigeOccurred = S.commandState.prestigeLevel >= prestigeLevel;\r\n const prestigeName = ctx.PrestigeEvent[0].image.toUpperCase();\r\n if (prestigeOccurred) {\r\n const timeWaited = TimeSpan.fromMilliseconds(Date.now() - AutomatorData.waitStart).toStringShort();\r\n AutomatorData.logCommandEvent(`Continuing after WAIT (${prestigeName} occurred for\r\n ${findLastPrestigeRecord(prestigeName)}, after ${timeWaited})`, ctx.startLine);\r\n AutomatorData.isWaiting = false;\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (!AutomatorData.isWaiting) {\r\n AutomatorData.logCommandEvent(`Started WAIT for ${prestigeName}`, ctx.startLine);\r\n AutomatorData.waitStart = Date.now();\r\n }\r\n AutomatorData.isWaiting = true;\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n genericInput1: ctx.PrestigeEvent[0].tokenType.name.toUpperCase(),\r\n ...automatorBlocksMap.WAIT\r\n })\r\n },\r\n {\r\n id: \"waitBlackHole\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Wait);\r\n $.CONSUME(T.BlackHole);\r\n $.OR([\r\n { ALT: () => $.CONSUME(T.Off) },\r\n { ALT: () => $.CONSUME(T.BlackHoleStr) },\r\n ]);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Wait[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => () => {\r\n const off = Boolean(ctx.Off);\r\n // This input has the format \"bh#\"\r\n const holeID = ctx.BlackHoleStr ? Number(ctx.BlackHoleStr[0].image.charAt(2)) : 0;\r\n const bhCond = off ? !BlackHole(1).isActive : BlackHole(holeID).isActive;\r\n const bhStr = off ? \"inactive Black Holes\" : `active Black Hole ${holeID}`;\r\n if (bhCond) {\r\n const timeWaited = TimeSpan.fromMilliseconds(Date.now() - AutomatorData.waitStart).toStringShort();\r\n AutomatorData.logCommandEvent(`Continuing after WAIT (waited ${timeWaited} for ${bhStr})`,\r\n ctx.startLine);\r\n AutomatorData.isWaiting = false;\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (!AutomatorData.isWaiting) {\r\n AutomatorData.logCommandEvent(`Started WAIT for ${bhStr}`, ctx.startLine);\r\n AutomatorData.waitStart = Date.now();\r\n }\r\n AutomatorData.isWaiting = true;\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n },\r\n blockify: ctx => ({\r\n genericInput1: \"BLACK HOLE\",\r\n // Note: In this particular case we aren't actually storing a comparison operator. This is still okay\r\n // because internally this is just the variable for the second slot and has no special treatment beyond that\r\n compOperator: ctx.BlackHoleStr ? ctx.BlackHoleStr[0].image.toUpperCase() : \"OFF\",\r\n ...automatorBlocksMap.WAIT\r\n })\r\n },\r\n {\r\n id: \"whileLoop\",\r\n rule: $ => () => {\r\n $.CONSUME(T.While);\r\n $.SUBRULE($.comparison);\r\n $.CONSUME(T.LCurly);\r\n $.CONSUME(T.EOL);\r\n $.SUBRULE($.block);\r\n $.CONSUME(T.RCurly);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.While[0].startLine;\r\n return V.checkBlock(ctx, ctx.While);\r\n },\r\n compile: (ctx, C) => compileConditionLoop(C.visit(ctx.comparison), C.visit(ctx.block), ctx, false),\r\n blockify: (ctx, B) => {\r\n const commands = [];\r\n B.visit(ctx.block, commands);\r\n const comparison = B.visit(ctx.comparison);\r\n return {\r\n nest: commands,\r\n ...automatorBlocksMap.WHILE,\r\n ...comparison,\r\n genericInput1: standardizeAutomatorValues(comparison.genericInput1),\r\n genericInput2: standardizeAutomatorValues(comparison.genericInput2)\r\n };\r\n }\r\n },\r\n {\r\n id: \"stop\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Stop);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Stop[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => () => {\r\n AutomatorData.logCommandEvent(`Automator execution stopped with STOP command`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.HALT;\r\n },\r\n blockify: () => ({\r\n ...automatorBlocksMap.STOP,\r\n })\r\n }\r\n];\r\n","import { EOF, Parser } from \"chevrotain\";\r\n\r\nimport { automatorTokens, tokenMap as T } from \"./lexer\";\r\nimport { AutomatorCommands } from \"./automator-commands\";\r\n\r\n// ----------------- parser -----------------\r\nclass AutomatorParser extends Parser {\r\n constructor() {\r\n super(automatorTokens, {\r\n recoveryEnabled: true,\r\n outputCst: true,\r\n nodeLocationTracking: \"full\",\r\n });\r\n\r\n // eslint-disable-next-line consistent-this\r\n const $ = this;\r\n\r\n $.RULE(\"script\", () => $.SUBRULE($.block));\r\n\r\n $.RULE(\"block\", () => $.MANY_SEP({\r\n SEP: T.EOL,\r\n DEF: () => $.OPTION(() => $.SUBRULE($.command)),\r\n }));\r\n\r\n // This is a bit ugly looking. Chevrotain uses Function.toString() to do crazy\r\n // optimizations. That clashes with our desire to build our list of commands dynamically.\r\n // We are creating a function body like this one:\r\n // $.RULE(\"command\", () => {\r\n // $.OR(\r\n // $.c1 || ($.c1 = [\r\n // { ALT: () => $.SUBRULE($.badCommand) },\r\n // { ALT: () => $.SUBRULE($.auto) },\r\n // { ALT: () => $.SUBRULE($.define) },\r\n // { ALT: () => $.SUBRULE($.ifBlock) },\r\n\r\n const commandAlts = [\r\n \"$.SUBRULE($.badCommand)\",\r\n \"$.CONSUME(EOF)\",\r\n ];\r\n\r\n for (const cmd of AutomatorCommands) {\r\n $.RULE(cmd.id, cmd.rule($));\r\n commandAlts.push(`$.SUBRULE($.${cmd.id})`);\r\n }\r\n\r\n const commandOr = window.Function(\"$\", \"EOF\", `\r\n return () => $.OR($.c1 || ($.c1 = [\r\n ${commandAlts.map(e => `{ ALT: () => ${e} },`).join(\"\\n\")}]));\r\n `);\r\n\r\n $.RULE(\"command\", commandOr($, EOF));\r\n\r\n $.RULE(\"badCommand\", () => $.AT_LEAST_ONE(() => $.SUBRULE($.badCommandToken)),\r\n { resyncEnabled: false, }\r\n );\r\n\r\n $.RULE(\"badCommandToken\", () => $.OR([\r\n { ALT: () => $.CONSUME(T.Identifier) },\r\n { ALT: () => $.CONSUME(T.NumberLiteral) },\r\n { ALT: () => $.CONSUME(T.ComparisonOperator) },\r\n ]), { resyncEnabled: false, });\r\n\r\n $.RULE(\"comparison\", () => {\r\n $.SUBRULE($.compareValue);\r\n $.CONSUME(T.ComparisonOperator);\r\n $.SUBRULE2($.compareValue);\r\n });\r\n\r\n $.RULE(\"compareValue\", () => $.OR([\r\n { ALT: () => $.CONSUME(T.NumberLiteral) },\r\n { ALT: () => $.CONSUME(T.Identifier) },\r\n { ALT: () => $.CONSUME(T.AutomatorCurrency) },\r\n ]));\r\n\r\n $.RULE(\"duration\", () => {\r\n $.CONSUME(T.NumberLiteral);\r\n $.CONSUME(T.TimeUnit);\r\n });\r\n\r\n $.RULE(\"eternityChallenge\", () => $.OR([\r\n {\r\n ALT: () => {\r\n $.CONSUME(T.EC);\r\n $.CONSUME(T.NumberLiteral);\r\n }\r\n },\r\n { ALT: () => $.CONSUME(T.ECLiteral) }\r\n ]));\r\n\r\n $.RULE(\"studyList\", () => {\r\n $.AT_LEAST_ONE(() => $.SUBRULE($.studyListEntry));\r\n // Support the |3 export format for EC number and optionally the ending exclamation point\r\n $.OPTION(() => {\r\n $.CONSUME(T.Pipe);\r\n $.CONSUME1(T.NumberLiteral, { LABEL: \"ECNumber\" });\r\n $.OPTION1(() => $.CONSUME(T.Exclamation));\r\n });\r\n }, { resyncEnabled: false });\r\n\r\n $.RULE(\"studyListEntry\", () => {\r\n $.OR([\r\n { ALT: () => $.SUBRULE($.studyRange) },\r\n { ALT: () => $.CONSUME(T.NumberLiteral) },\r\n { ALT: () => $.CONSUME(T.StudyPath) },\r\n ]);\r\n $.OPTION(() => $.CONSUME(T.Comma));\r\n });\r\n\r\n $.RULE(\"studyRange\", () => {\r\n $.CONSUME(T.NumberLiteral, { LABEL: \"firstStudy\" });\r\n $.CONSUME(T.Dash);\r\n $.CONSUME1(T.NumberLiteral, { LABEL: \"lastStudy\" });\r\n });\r\n\r\n $.RULE(\"xHighest\", () => {\r\n $.CONSUME(T.NumberLiteral);\r\n $.CONSUME(T.XHighest);\r\n });\r\n\r\n $.RULE(\"currencyAmount\", () => {\r\n $.CONSUME(T.NumberLiteral);\r\n $.CONSUME(T.AutomatorCurrency);\r\n });\r\n\r\n // Very important to call this after all the rules have been setup.\r\n // otherwise the parser may not work correctly as it will lack information\r\n // derived from the self analysis.\r\n $.performSelfAnalysis();\r\n }\r\n}\r\n\r\nexport const parser = new AutomatorParser();\r\n","import { lexer, tokenMap as T } from \"./lexer\";\r\nimport { AutomatorCommands } from \"./automator-commands\";\r\nimport { parser } from \"./parser\";\r\nimport { PlayerProgress } from \"../player-progress\";\r\n\r\nconst BaseVisitor = parser.getBaseCstVisitorConstructorWithDefaults();\r\n\r\nclass Validator extends BaseVisitor {\r\n constructor(rawText) {\r\n super();\r\n this.validateVisitor();\r\n this.reset(rawText);\r\n // Commands can provide validation hooks; we might also have some here\r\n for (const cmd of AutomatorCommands) {\r\n if (!cmd.validate) continue;\r\n const ownMethod = this[cmd.id];\r\n this[cmd.id] = ctx => {\r\n if (!cmd.validate(ctx, this)) return;\r\n if (ownMethod) ownMethod.call(this, ctx);\r\n };\r\n }\r\n\r\n const lexResult = lexer.tokenize(rawText);\r\n const tokens = lexResult.tokens;\r\n parser.input = tokens;\r\n this.parseResult = parser.script();\r\n this.visit(this.parseResult);\r\n this.addLexerErrors(lexResult.errors);\r\n this.addParserErrors(parser.errors, tokens);\r\n this.modifyErrorMessages();\r\n this.errorCount = lexResult.errors.length + this.errors.length + parser.errors.length;\r\n }\r\n\r\n addLexerErrors(errors) {\r\n for (const err of errors) {\r\n this.errors.push({\r\n startLine: err.line,\r\n startOffset: err.offset,\r\n endOffset: err.offset + err.length,\r\n info: `Unexpected characters: ${this.rawText.substr(err.offset, err.length)}`,\r\n tip: `${this.rawText.substr(err.offset, err.length)} cannot be part of a command, remove them`\r\n });\r\n }\r\n }\r\n\r\n static combinePositionRanges(r1, r2) {\r\n return {\r\n startLine: Math.min(r1.startLine, r2.startLine),\r\n startOffset: Math.min(r1.startOffset, r2.startOffset),\r\n endOffset: Math.max(r1.endOffset, r2.endOffset),\r\n };\r\n }\r\n\r\n addParserErrors(errors, tokens) {\r\n for (const parseError of errors) {\r\n let err = Validator.combinePositionRanges(\r\n Validator.getPositionRange(parseError.previousToken),\r\n Validator.getPositionRange(parseError.token));\r\n // In some cases, at the end of the script we don't get any useful tokens out of the parse error\r\n if (parseError.token.tokenType.name === \"EOF\" && parseError.previousToken.tokenType.name === \"EOF\") {\r\n err = Validator.combinePositionRanges(err, Validator.getPositionRange(tokens[tokens.length - 1]));\r\n }\r\n // Deal with literal EOL in error message:\r\n err.info = parseError.message.replace(/'\\n\\s*'/ui, \"End of line\");\r\n const isEndToken = parseError.token.tokenType.name === \"EOF\" || parseError.token.tokenType.name === \"EOL\";\r\n if (parseError.name === \"NoViableAltException\") {\r\n if (!isEndToken) {\r\n err.info = `Unexpected input ${parseError.token.image}`;\r\n err.tip = `Remove ${parseError.token.image}`;\r\n }\r\n } else if (parseError.name === \"EarlyExitException\") {\r\n err.info = \"Unexpected end of command\";\r\n err.tip = \"Complete the command by adding the other parameters\";\r\n }\r\n this.errors.push(err);\r\n }\r\n }\r\n\r\n static getPositionRange(ctx) {\r\n let pos = {\r\n startLine: Number.MAX_VALUE,\r\n startOffset: Number.MAX_VALUE,\r\n endOffset: 0,\r\n };\r\n if (ctx === undefined || ctx === null) return pos;\r\n if (ctx.startOffset !== undefined) {\r\n return {\r\n startLine: ctx.startLine,\r\n startOffset: ctx.startOffset,\r\n endOffset: ctx.endOffset,\r\n };\r\n }\r\n if (ctx.location !== undefined && ctx.location.startOffset !== undefined) {\r\n return ctx.location;\r\n }\r\n if (ctx.children && !Array.isArray(ctx.children)) return Validator.getPositionRange(ctx.children);\r\n if (Array.isArray(ctx)) {\r\n return ctx.reduce((prev, el) => Validator.combinePositionRanges(prev, Validator.getPositionRange(el)), pos);\r\n }\r\n for (const k in ctx) {\r\n if (!Object.prototype.hasOwnProperty.call(ctx, k) || !Array.isArray(ctx[k])) continue;\r\n pos = Validator.combinePositionRanges(pos, Validator.getPositionRange(ctx[k]));\r\n }\r\n return pos;\r\n }\r\n\r\n addError(ctx, errInfo, errTip) {\r\n const pos = Validator.getPositionRange(ctx);\r\n pos.info = errInfo;\r\n pos.tip = errTip;\r\n this.errors.push(pos);\r\n }\r\n\r\n // There are a few errors generated internally in chevrotain.js which are scanned for and modified in here and\r\n // given appropriate fixing tips and minor formatting adjustments, or are alternatively marked as redundant and\r\n // filtered out in other parts of the code. This isn't necessarily comprehensive, but should hopefully cover the\r\n // most common cases.\r\n modifyErrorMessages() {\r\n // This function also gets called during loading the savefile, and if it somehow fails to execute properly then\r\n // the game cache is never invalidated. This only seems to happen on re-initialization after full completions,\r\n // but that means that in many cases a lot of endgame values are never cleared. Therefore we shortcut the whole\r\n // function if the automator isn't unlocked or it attempts to error-check an empty script\r\n if (!Player.automatorUnlocked || AutomatorData.currentScriptText() === undefined) return;\r\n\r\n const modifiedErrors = [];\r\n let lastLine = 0;\r\n for (const err of this.errors.sort((a, b) => a.startLine - b.startLine)) {\r\n // For some reason chevrotain occasionally gives NaN for error location but it seems like this only ever\r\n // happens on the last line of the script, so we can fill in that value to fix it\r\n if (isNaN(err.startLine)) {\r\n err.startLine = AutomatorData.currentScriptText().split(\"\\n\").length;\r\n }\r\n\r\n // Only take one error from each line. In many cases multiple errors will arise from the same line due to how\r\n // the parser works, and many of them will be useless or redundant. Also sometimes chevrotain fails to generate\r\n // a line for an error, in which case it's usually a redundant error which can be ignored.\r\n if (err.startLine === lastLine) {\r\n continue;\r\n }\r\n\r\n // Errors that already have tips are more reliable in terms of knowing what they're pointing out; if there's\r\n // already a tip, don't bother trying to parse and guess at its meaning.\r\n if (err.tip) {\r\n modifiedErrors.push(err);\r\n lastLine = err.startLine;\r\n continue;\r\n }\r\n\r\n if (err.info.match(/EOF but found.*\\}/gu)) {\r\n err.info = err.info.replaceAll(\"--> \", \"[\").replaceAll(\" <--\", \"]\");\r\n err.tip = \"Remove }. Parser halted at this line and may miss errors farther down the script.\";\r\n } else if (err.info.match(/found.*\\}/gu)) {\r\n err.info = err.info.replaceAll(\"--> \", \"[\").replaceAll(\" <--\", \"]\");\r\n err.tip = \"Remove }\";\r\n } else if (err.info.match(/Expecting/gu)) {\r\n err.info = err.info.replaceAll(\"--> \", \"[\").replaceAll(\" <--\", \"]\");\r\n err.tip = \"Use the appropriate type of data in the command as specified in the command help\";\r\n } else if (err.info.match(/End of line/gu)) {\r\n err.tip = \"Provide the remaining arguments to complete the incomplete command\";\r\n } else if (err.info.match(/EOF but found:/gu)) {\r\n err.tip = \"Remove extra command argument\";\r\n } else {\r\n err.tip = \"This error's cause is unclear\";\r\n }\r\n modifiedErrors.push(err);\r\n lastLine = err.startLine;\r\n }\r\n\r\n for (const err of modifiedErrors) {\r\n err.startLine = AutomatorBackend.translateLineNumber(err.startLine);\r\n }\r\n\r\n this.errors = modifiedErrors;\r\n }\r\n\r\n reset(rawText) {\r\n this.rawText = rawText;\r\n this.variables = {};\r\n this.errors = [];\r\n }\r\n\r\n checkTimeStudyNumber(token) {\r\n const tsNumber = parseFloat(token.image);\r\n if (!TimeStudy(tsNumber) || (TimeStudy(tsNumber).isTriad && (!Ra.canBuyTriad && !PlayerProgress.mendingUnlocked()))) {\r\n this.addError(token, `Invalid Time Study identifier ${tsNumber}`,\r\n `Make sure you copied or typed in your time study IDs correctly`);\r\n return 0;\r\n }\r\n return tsNumber;\r\n }\r\n\r\n lookupVar(identifier, type) {\r\n const varName = identifier.image;\r\n const varInfo = {};\r\n const constants = player.reality.automator.constants;\r\n if (!Object.keys(constants).includes(varName)) {\r\n this.addError(identifier, `Variable ${varName} has not been defined`,\r\n `Use the definition panel to define ${varName} in order to reference it, or check for typos`);\r\n return undefined;\r\n }\r\n const value = constants[varName];\r\n\r\n let tree;\r\n switch (type) {\r\n case AUTOMATOR_VAR_TYPES.NUMBER:\r\n varInfo.value = new Decimal(value);\r\n break;\r\n case AUTOMATOR_VAR_TYPES.STUDIES:\r\n tree = new TimeStudyTree(value);\r\n varInfo.value = {\r\n normal: tree.selectedStudies.map(ts => ts.id),\r\n ec: tree.ec,\r\n startEC: tree.startEC,\r\n };\r\n break;\r\n case AUTOMATOR_VAR_TYPES.DURATION:\r\n varInfo.value = parseInt(1000 * value, 10);\r\n break;\r\n default:\r\n throw new Error(\"Unrecognized variable format in automator constant lookup\");\r\n }\r\n\r\n return varInfo;\r\n }\r\n\r\n isValidVarFormat(identifier, type) {\r\n const varName = identifier.image;\r\n const constants = player.reality.automator.constants;\r\n if (!Object.keys(constants).includes(varName)) return false;\r\n const value = constants[varName];\r\n\r\n switch (type) {\r\n case AUTOMATOR_VAR_TYPES.NUMBER:\r\n // We can't rely on native Decimal parsing here because it largely just discards input past invalid\r\n // characters and constructs something based on the start of the input string. Notably, this makes\r\n // things like new Decimal(\"11,21,31\") return 11 instead of something indicating an error.\r\n return value.match(/^-?(0|[1-9]\\d*)(\\.\\d+)?([eE][+-]?\\d+)?$/u);\r\n case AUTOMATOR_VAR_TYPES.STUDIES:\r\n return TimeStudyTree.isValidImportString(value);\r\n case AUTOMATOR_VAR_TYPES.DURATION:\r\n return !Number.isNaN(parseInt(1000 * value, 10));\r\n default:\r\n throw new Error(\"Unrecognized variable format in automator constant lookup\");\r\n }\r\n }\r\n\r\n duration(ctx) {\r\n if (ctx.$value) return ctx.$value;\r\n if (!ctx.TimeUnit || ctx.TimeUnit[0].isInsertedInRecovery) {\r\n this.addError(ctx, \"Missing time unit\", \"Provide a unit of time (eg. seconds or minutes)\");\r\n return undefined;\r\n }\r\n const value = parseFloat(ctx.NumberLiteral[0].image) * ctx.TimeUnit[0].tokenType.$scale;\r\n if (isNaN(value)) {\r\n this.addError(ctx, \"Error parsing duration\", \"Provide a properly-formatted number for time\");\r\n return undefined;\r\n }\r\n ctx.$value = value;\r\n return ctx.$value;\r\n }\r\n\r\n xHighest(ctx) {\r\n if (ctx.$value) return ctx.$value;\r\n if (!ctx.NumberLiteral || ctx.NumberLiteral[0].isInsertedInRecovery) {\r\n this.addError(ctx, \"Missing multiplier\", \"Provide a multiplier to set the autobuyer to\");\r\n return undefined;\r\n }\r\n ctx.$value = new Decimal(ctx.NumberLiteral[0].image);\r\n return ctx.$value;\r\n }\r\n\r\n currencyAmount(ctx) {\r\n if (ctx.$value) return ctx.$value;\r\n if (!ctx.NumberLiteral || ctx.NumberLiteral[0].isInsertedInRecovery) {\r\n this.addError(ctx, \"Missing amount\", \"Provide a threshold to set the autobuyer to\");\r\n return undefined;\r\n }\r\n ctx.$value = new Decimal(ctx.NumberLiteral[0].image);\r\n return ctx.$value;\r\n }\r\n\r\n studyRange(ctx, studiesOut) {\r\n if (!ctx.firstStudy || ctx.firstStudy[0].isInsertedInRecovery ||\r\n !ctx.lastStudy || ctx.lastStudy[0].isInsertedInRecovery) {\r\n this.addError(ctx, \"Missing Time Study number in range\",\r\n \"Provide starting and ending IDs for Time Study number ranges\");\r\n return;\r\n }\r\n const first = this.checkTimeStudyNumber(ctx.firstStudy[0]);\r\n const last = this.checkTimeStudyNumber(ctx.lastStudy[0]);\r\n if (!first || !last || !studiesOut) return;\r\n for (let id = first; id <= last; ++id) {\r\n if (TimeStudy(id)) studiesOut.push(id);\r\n }\r\n }\r\n\r\n studyListEntry(ctx, studiesOut) {\r\n if (ctx.studyRange) {\r\n this.visit(ctx.studyRange, studiesOut);\r\n return;\r\n }\r\n if (ctx.NumberLiteral) {\r\n if (ctx.NumberLiteral[0].isInsertedInRecovery) {\r\n this.addError(ctx, \"Missing Time Study number\", \"Provide a Time Study ID to purchase\");\r\n return;\r\n }\r\n const id = this.checkTimeStudyNumber(ctx.NumberLiteral[0]);\r\n if (id) studiesOut.push(id);\r\n return;\r\n }\r\n if (ctx.StudyPath) {\r\n const pathId = ctx.StudyPath[0].tokenType.$studyPath;\r\n const pathStudies = NormalTimeStudies.paths[pathId];\r\n studiesOut.push(...pathStudies);\r\n }\r\n }\r\n\r\n studyList(ctx) {\r\n if (ctx.$cached !== undefined) return ctx.$cached;\r\n const studiesOut = [];\r\n for (const sle of ctx.studyListEntry) this.visit(sle, studiesOut);\r\n const positionRange = Validator.getPositionRange(ctx);\r\n ctx.$cached = {\r\n normal: studiesOut,\r\n image: this.rawText.substr(positionRange.startOffset, positionRange.endOffset - positionRange.startOffset + 1),\r\n ec: 0,\r\n startEC: false,\r\n };\r\n if (ctx.ECNumber) {\r\n if (ctx.ECNumber.isInsertedInRecovery) {\r\n this.addError(ctx.Pipe[0], \"Missing Eternity Challenge number\",\r\n \"Specify which Eternity Challenge is being referred to\");\r\n }\r\n const ecNumber = parseFloat(ctx.ECNumber[0].image);\r\n if (!Number.isInteger(ecNumber) || ecNumber < 0 || ecNumber > 12) {\r\n this.addError(ctx.ECNumber, `Invalid Eternity Challenge ID ${ecNumber}`,\r\n `Eternity Challenge ${ecNumber} does not exist, use an integer between ${format(1)} and ${format(12)}`);\r\n }\r\n ctx.$cached.ec = ecNumber;\r\n }\r\n if (ctx.Exclamation) ctx.$cached.startEC = true;\r\n return ctx.$cached;\r\n }\r\n\r\n compareValue(ctx) {\r\n if (ctx.NumberLiteral) {\r\n ctx.$value = new Decimal(ctx.NumberLiteral[0].image);\r\n } else if (ctx.Identifier) {\r\n if (!this.isValidVarFormat(ctx.Identifier[0], AUTOMATOR_VAR_TYPES.NUMBER)) {\r\n this.addError(ctx, `Constant ${ctx.Identifier[0].image} cannot be used for comparison`,\r\n `Ensure that ${ctx.Identifier[0].image} contains a properly-formatted number and not a Time Study string`);\r\n }\r\n const varLookup = this.lookupVar(ctx.Identifier[0], AUTOMATOR_VAR_TYPES.NUMBER);\r\n if (varLookup) ctx.$value = ctx.Identifier[0].image;\r\n }\r\n }\r\n\r\n comparison(ctx) {\r\n super.comparison(ctx);\r\n if (!ctx.compareValue || ctx.compareValue[0].recoveredNode ||\r\n ctx.compareValue.length !== 2 || ctx.compareValue[1].recoveredNode) {\r\n this.addError(ctx, \"Missing value for comparison\", \"Ensure that the comparison has two values\");\r\n }\r\n if (!ctx.ComparisonOperator || ctx.ComparisonOperator[0].isInsertedInRecovery) {\r\n this.addError(ctx, \"Missing comparison operator (<, >, <=, >=)\", \"Insert the appropriate comparison operator\");\r\n return;\r\n }\r\n if (ctx.ComparisonOperator[0].tokenType === T.OpEQ || ctx.ComparisonOperator[0].tokenType === T.EqualSign) {\r\n this.addError(ctx, \"Please use an inequality comparison (>, <, >=, <=)\",\r\n \"Comparisons cannot be done with equality, only with inequality operators\");\r\n }\r\n }\r\n\r\n badCommand(ctx) {\r\n const firstToken = ctx.badCommandToken[0].children;\r\n const firstTokenType = Object.keys(firstToken)[0];\r\n this.addError(firstToken[firstTokenType][0], `Unrecognized command \"${firstToken[firstTokenType][0].image}\"`,\r\n \"Check to make sure you have typed in the command name correctly\");\r\n }\r\n\r\n eternityChallenge(ctx) {\r\n let errToken, ecNumber;\r\n if (ctx.ECLiteral) {\r\n ecNumber = parseFloat(ctx.ECLiteral[0].image.substr(2));\r\n errToken = ctx.ECLiteral[0];\r\n } else if (ctx.NumberLiteral) {\r\n ecNumber = parseFloat(ctx.NumberLiteral[0].image);\r\n errToken = ctx.NumberLiteral[0];\r\n } else {\r\n this.addError(ctx, \"Missing Eternity Challenge number\",\r\n \"Specify which Eternity Challenge is being referred to\");\r\n return;\r\n }\r\n if (!Number.isInteger(ecNumber) || ecNumber < 1 || ecNumber > 12) {\r\n this.addError(errToken, `Invalid Eternity Challenge ID ${ecNumber}`,\r\n `Eternity Challenge ${ecNumber} does not exist, use an integer between ${format(1)} and ${format(12)}`);\r\n }\r\n ctx.$ecNumber = ecNumber;\r\n }\r\n\r\n checkBlock(ctx, commandToken) {\r\n let hadError = false;\r\n if (!ctx.RCurly || ctx.RCurly[0].isInsertedInRecovery) {\r\n this.addError(commandToken[0], \"Missing closing }\",\r\n \"This loop has mismatched brackets, add a corresponding } on another line to close the loop\");\r\n hadError = true;\r\n }\r\n if (!ctx.LCurly || ctx.LCurly[0].isInsertedInRecovery) {\r\n this.addError(commandToken[0], \"Missing opening {\",\r\n \"This line has an extra } closing a loop which does not exist, remove the }\");\r\n hadError = true;\r\n }\r\n return !hadError;\r\n }\r\n\r\n script(ctx) {\r\n if (ctx.block) this.visit(ctx.block);\r\n ctx.variables = this.variables;\r\n }\r\n}\r\n\r\nclass Compiler extends BaseVisitor {\r\n constructor() {\r\n super();\r\n // Commands provide compilation hooks; we might also have some here\r\n for (const cmd of AutomatorCommands) {\r\n if (!cmd.compile) continue;\r\n const ownMethod = this[cmd.id];\r\n // eslint-disable-next-line no-loop-func\r\n this[cmd.id] = (ctx, output) => {\r\n // For the compiler, we don't bother doing the default recursive visitation behavior\r\n if (ownMethod && ownMethod !== super[cmd.id]) ownMethod.call(this, ctx, output);\r\n let compiled = cmd.compile(ctx, this);\r\n if (typeof compiled === \"function\") compiled = { run: compiled };\r\n compiled.lineNumber = ctx.startLine;\r\n output.push(compiled);\r\n };\r\n }\r\n this.validateVisitor();\r\n }\r\n\r\n comparison(ctx) {\r\n const getters = ctx.compareValue.map(cv => {\r\n if (cv.children.AutomatorCurrency) return cv.children.AutomatorCurrency[0].tokenType.$getter;\r\n const val = cv.children.$value;\r\n if (typeof val === \"string\") return () => player.reality.automator.constants[val];\r\n return () => val;\r\n });\r\n // Some currencies are locked and should always evaluate to false if they're attempted to be used\r\n const canUseInComp = ctx.compareValue.map(cv => {\r\n if (cv.children.AutomatorCurrency) {\r\n const unlockedFn = cv.children.AutomatorCurrency[0].tokenType.$unlocked;\r\n return unlockedFn ? unlockedFn() : true;\r\n }\r\n // In this case, it's a constant (either automator-defined or literal)\r\n return true;\r\n });\r\n\r\n if (!canUseInComp[0] || !canUseInComp[1]) return () => false;\r\n const compareFun = ctx.ComparisonOperator[0].tokenType.$compare;\r\n return () => compareFun(getters[0](), getters[1]());\r\n }\r\n\r\n block(ctx) {\r\n const output = [];\r\n if (ctx.command) for (const cmd of ctx.command) this.visit(cmd, output);\r\n return output;\r\n }\r\n\r\n script(ctx) {\r\n if (ctx.variables === undefined) {\r\n throw new Error(\"Compiler called before Validator\");\r\n }\r\n return ctx.block ? this.visit(ctx.block) : [];\r\n }\r\n}\r\n\r\nclass Blockifier extends BaseVisitor {\r\n constructor() {\r\n super();\r\n for (const cmd of AutomatorCommands) {\r\n const blockify = cmd.blockify;\r\n if (!blockify) continue;\r\n const ownMethod = this[cmd.id];\r\n // eslint-disable-next-line no-loop-func\r\n this[cmd.id] = (ctx, output) => {\r\n if (ownMethod && ownMethod !== super[cmd.id]) ownMethod.call(this, ctx, output);\r\n try {\r\n const block = blockify(ctx, this);\r\n output.push({\r\n ...block,\r\n id: UIID.next()\r\n });\r\n } catch {\r\n // If a command is invalid, it will throw an exception in blockify and fail to assign a value to block\r\n // We can't, generally, make good guesses to fill in any missing values in order to avoid the exception,\r\n // so we instead just ignore that block\r\n }\r\n };\r\n }\r\n this.validateVisitor();\r\n }\r\n\r\n comparison(ctx) {\r\n const parseInput = index => {\r\n const comp = ctx.compareValue[index];\r\n const isCurrency = Boolean(comp.children.AutomatorCurrency);\r\n if (isCurrency) return comp.children.AutomatorCurrency[0].image;\r\n return comp.children.$value;\r\n };\r\n\r\n return {\r\n compOperator: ctx.ComparisonOperator[0].image,\r\n genericInput1: parseInput(0),\r\n genericInput2: parseInput(1),\r\n };\r\n }\r\n\r\n script(ctx) {\r\n const output = [];\r\n if (ctx.block) this.visit(ctx.block, output);\r\n return output;\r\n }\r\n\r\n block(ctx, output) {\r\n if (ctx.command) {\r\n for (const cmd of ctx.command) {\r\n this.visit(cmd, output);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function compile(input, validateOnly = false) {\r\n // The lexer and codemirror choke on the last line of the script, so we pad it with an invisible newline\r\n const script = `${input}\\n `;\r\n const validator = new Validator(script);\r\n let compiled;\r\n if (validator.errorCount === 0 && !validateOnly) {\r\n compiled = new Compiler().visit(validator.parseResult);\r\n }\r\n return {\r\n errors: validator.errors,\r\n compiled,\r\n };\r\n}\r\n\r\nexport function hasCompilationErrors(input) {\r\n return compile(input, true).errors.length !== 0;\r\n}\r\n\r\nexport function blockifyTextAutomator(input) {\r\n const validator = new Validator(input);\r\n const blockifier = new Blockifier();\r\n const blocks = blockifier.visit(validator.parseResult);\r\n\r\n // The Validator grabs all the lines from the visible script, but the Blockifier will fail to visit any lines\r\n // associated with unparsable commands. This results in a discrepancy in line count whenever a line can't be\r\n // parsed as a specific command, and in general this is a problem we can't try to guess a fix for, so we just\r\n // don't convert it at all. In both cases nested commands are stored recursively, but with different structure.\r\n const validatedCount = entry => {\r\n if (!entry) return 0;\r\n const commandDepth = entry.children;\r\n let foundChildren = 0;\r\n // Inner nested commands are found within a prop given the same name as the command itself - this should only\r\n // actually evaluate to nonzero for at most one key, and will be undefined for all others\r\n for (const key of Object.keys(commandDepth)) {\r\n const nestedBlock = commandDepth[key][0]?.children?.block;\r\n const nestedCommands = nestedBlock ? nestedBlock[0].children.command : [];\r\n foundChildren += nestedCommands\r\n ? nestedCommands.map(c => validatedCount(c) + 1).reduce((sum, val) => sum + val, 0)\r\n : 0;\r\n\r\n // Trailing newlines get turned into a command with a single EOF argument; we return -1 because one level up\r\n // on the recursion this looks like an otherwise valid command and would be counted as such\r\n if (key === \"EOF\") return -1;\r\n }\r\n return foundChildren;\r\n };\r\n const visitedCount = block => {\r\n if (!block.nest) return 1;\r\n return 1 + block.nest.map(b => visitedCount(b)).reduce((sum, val) => sum + val, 0);\r\n };\r\n // Note: top-level structure is slightly different than the nesting structure\r\n const validatedBlocks = validator.parseResult.children.block[0].children.command\r\n .map(c => validatedCount(c) + 1)\r\n .reduce((sum, val) => sum + val, 0);\r\n const visitedBlocks = blocks.map(b => visitedCount(b)).reduce((sum, val) => sum + val, 0);\r\n\r\n return { blocks, validatedBlocks, visitedBlocks };\r\n}\r\n\r\nexport function validateLine(input) {\r\n const validator = new Validator(input);\r\n return validator;\r\n}\r\n","import { lexer, tokenIds } from \"./lexer\";\r\nimport { compile } from \"./compiler\";\r\nimport { parser } from \"./parser\";\r\n\r\nfunction walkSuggestion(suggestion, prefix, output) {\r\n const hasAutocomplete = suggestion.$autocomplete &&\r\n suggestion.$autocomplete.startsWith(prefix) && suggestion.$autocomplete !== prefix;\r\n const isUnlocked = suggestion.$unlocked ? suggestion.$unlocked() : true;\r\n if (hasAutocomplete && isUnlocked) output.add(suggestion.$autocomplete);\r\n for (const s of suggestion.categoryMatches) {\r\n walkSuggestion(tokenIds[s], prefix, output);\r\n }\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nCodeMirror.registerHelper(\"lint\", \"automato\", (contents, _, editor) => {\r\n const doc = editor.getDoc();\r\n const errors = compile(contents, true).errors;\r\n return errors.map(e => ({\r\n message: e.info,\r\n severity: \"error\",\r\n from: doc.posFromIndex(e.startOffset),\r\n to: doc.posFromIndex(e.endOffset + 1),\r\n }));\r\n});\r\n\r\nCodeMirror.registerHelper(\"hint\", \"anyword\", editor => {\r\n const cursor = editor.getDoc().getCursor();\r\n let start = cursor.ch;\r\n const end = cursor.ch;\r\n const line = editor.getLine(cursor.line);\r\n while (start && /\\w/u.test(line.charAt(start - 1)))--start;\r\n const lineStart = line.slice(0, start);\r\n const currentPrefix = line.slice(start, end);\r\n const lineLex = lexer.tokenize(lineStart);\r\n if (lineLex.errors.length > 0) return undefined;\r\n const rawSuggestions = parser.computeContentAssist(\"command\", lineLex.tokens);\r\n const suggestions = new Set();\r\n for (const s of rawSuggestions) {\r\n if (s.ruleStack[1] === \"badCommand\") continue;\r\n walkSuggestion(s.nextTokenType, currentPrefix, suggestions);\r\n }\r\n return {\r\n list: Array.from(suggestions),\r\n from: CodeMirror.Pos(cursor.line, start),\r\n to: CodeMirror.Pos(cursor.line, end)\r\n };\r\n});\r\n\r\nconst commentRule = { regex: /(\\/\\/|#).*/u, token: \"comment\", next: \"start\" };\r\n\r\n// This is a state machine which determines the syntax highlighting for the automator. Top-level props define\r\n// the states, the array entries define the transition rules which are checked in order of appearance, and next\r\n// specifies which state to transition to after consuming the given regex. Without an entry for \"next\" the state\r\n// machine will remain in the same state and run the transition check after consuming the regex. The \"next\" prop\r\n// in the line with \"sol\" is a fallback transition which will be followed if none of the rules are matched.\r\n// Matches to the regexes will color the matched text according to the specified color of cm-[token] in liquibyte.css\r\n// Note: This has no bearing on the actual functionality and behavior of the automator itself and is purely visual.\r\nCodeMirror.defineSimpleMode(\"automato\", {\r\n // The start state contains the rules that are intially used\r\n start: [\r\n commentRule,\r\n { regex: /studies\\s+/ui, token: \"keyword\", next: \"studiesArgs\" },\r\n { regex: /blob\\s\\s/ui, token: \"blob\" },\r\n {\r\n // eslint-disable-next-line max-len\r\n regex: /(auto|if|pause|studies|time[ \\t]+theorems?|space[ \\t]+theorems?|until|wait|while|black[ \\t]+hole|stored?[ \\t]+game[ \\t]+time|notify)\\s/ui,\r\n token: \"keyword\",\r\n next: \"commandArgs\"\r\n },\r\n {\r\n regex: /stop/ui,\r\n token: \"keyword\",\r\n next: \"commandDone\"\r\n },\r\n {\r\n regex: /start\\s|unlock\\s/ui,\r\n token: \"keyword\",\r\n next: \"startUnlock\"\r\n },\r\n { regex: /infinity\\S+|eternity\\S+|reality\\S+|pause\\S+|restart\\S+/ui, token: \"error\", next: \"commandDone\" },\r\n { regex: /infinity|eternity|reality/ui, token: \"keyword\", next: \"prestige\" },\r\n { regex: /pause|restart/ui, token: \"keyword\", next: \"commandDone\" },\r\n { regex: /\\}/ui, dedent: true },\r\n { regex: /\\S+\\s/ui, token: \"error\", next: \"commandDone\" },\r\n ],\r\n studiesArgs: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /load(\\s+|$)/ui, token: \"variable-2\", next: \"studiesLoad\" },\r\n { regex: /respec/ui, token: \"variable-2\", next: \"commandDone\" },\r\n { regex: /purchase/ui, token: \"variable-2\", next: \"studiesList\" },\r\n { regex: /nowait(\\s+|$)/ui, token: \"property\" },\r\n ],\r\n studiesList: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /(antimatter|infinity|time)(?=[\\s,|]|$)/ui, token: \"number\" },\r\n { regex: /(active|passive|idle)(?=[\\s,|]|$)/ui, token: \"number\" },\r\n { regex: /(light|dark)(?=[\\s,|]|$)/ui, token: \"number\" },\r\n { regex: /([1-9][0-9]+)(?=[\\s,!|-]|$)/ui, token: \"number\" },\r\n { regex: /[a-zA-Z_][a-zA-Z_0-9]*/u, token: \"variable\", next: \"commandDone\" },\r\n { regex: /!$/ui, token: \"variable-2\" },\r\n { regex: /([1-9]|1[0-2])(?=!|$)/ui, token: \"number\" },\r\n ],\r\n studiesLoad: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /id(\\s+|$)/ui, token: \"variable-2\", next: \"studiesLoadId\" },\r\n { regex: /name(\\s+|$)/ui, token: \"variable-2\", next: \"studiesLoadPreset\" },\r\n { regex: /\\S+/ui, token: \"error\" },\r\n ],\r\n studiesLoadId: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /\\d/ui, token: \"qualifier\", next: \"commandDone\" },\r\n ],\r\n studiesLoadPreset: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /(\\/(?!\\/)|[^\\s#/])+/ui, token: \"qualifier\", next: \"commandDone\" },\r\n ],\r\n prestige: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /nowait(\\s|$)/ui, token: \"property\" },\r\n { regex: /respec/ui, token: \"variable-2\" },\r\n ],\r\n commandDone: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n // This seems necessary to have a closing curly brace de-indent automatically in some cases\r\n { regex: /\\}/ui, dedent: true },\r\n { regex: /\\S+/ui, token: \"error\" },\r\n ],\r\n startUnlock: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n {\r\n regex: /ec\\s?(1[0-2]|[1-9])|dilation/ui,\r\n token: \"variable-2\",\r\n next: \"commandDone\",\r\n },\r\n { regex: /nowait(\\s|$)/ui, token: \"property\" },\r\n ],\r\n commandArgs: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /<=|>=|<|>/ui, token: \"operator\" },\r\n { regex: /nowait(\\s|$)/ui, token: \"property\" },\r\n { regex: /\".*\"/ui, token: \"string\", next: \"commandDone\" },\r\n { regex: /'.*'/ui, token: \"string\", next: \"commandDone\" },\r\n { regex: /(on|off|bh1|bh2|dilation|load|respec)(\\s|$)/ui, token: \"variable-2\" },\r\n { regex: /(eternity|reality|use)(\\s|$)/ui, token: \"variable-2\" },\r\n { regex: /(antimatter|infinity|time)(\\s|$|(?=,))/ui, token: \"variable-2\" },\r\n { regex: /(active|passive|idle)(\\s|$|(?=,))/ui, token: \"variable-2\" },\r\n { regex: /(light|dark)(\\s|$|(?=,))/ui, token: \"variable-2\" },\r\n { regex: /x[\\t ]+highest(\\s|$)/ui, token: \"variable-2\" },\r\n { regex: /pending[\\t ]+(completions|ip|ep|tp|rm|glyph[\\t ]+level)(\\s|$)/ui, token: \"variable-2\" },\r\n { regex: /total[\\t ]+(completions|tt|space theorems)(\\s|$)/ui, token: \"variable-2\" },\r\n { regex: /filter[ \\t]+score/ui, token: \"variable-2\" },\r\n { regex: /ec(1[0-2]|[1-9])[\\t ]+completions(\\s|$)/ui, token: \"variable-2\" },\r\n { regex: /(am|ip|ep|all)(\\s|$)/ui, token: \"variable-2\" },\r\n {\r\n regex: /(rm|rg|dt|tp|tt|space theorems|(banked )?infinities|eternities|realities|rep(licanti)?)(\\s|$)/ui,\r\n token: \"variable-2\",\r\n },\r\n { regex: / sec(onds ?) ?| min(utes ?) ?| hours ?/ui, token: \"variable-2\" },\r\n { regex: /([0-9]+:[0-5][0-9]:[0-5][0-9]|[0-5]?[0-9]:[0-5][0-9]|t[1-4])/ui, token: \"number\" },\r\n { regex: /-?(0|[1-9]\\d*)(\\.\\d+)?([eE][+-]?\\d+)?/ui, token: \"number\" },\r\n { regex: /[a-zA-Z_][a-zA-Z_0-9]*/u, token: \"variable\" },\r\n { regex: /\\{/ui, indent: true, next: \"commandDone\" },\r\n // This seems necessary to have a closing curly brace de-indent automatically in some cases\r\n { regex: /\\}/ui, dedent: true },\r\n ],\r\n\r\n // The meta property contains global information about the mode. It\r\n // can contain properties like lineComment, which are supported by\r\n // all modes, and also directives like dontIndentStates, which are\r\n // specific to simple modes.\r\n meta: {\r\n lineComment: \"//\",\r\n electricChars: \"}\",\r\n }\r\n});\r\n","import { compile } from \"./compiler\";\r\n\r\nexport const AUTOMATOR_COMMAND_STATUS = Object.freeze({\r\n NEXT_INSTRUCTION: 0,\r\n NEXT_TICK_SAME_INSTRUCTION: 1,\r\n NEXT_TICK_NEXT_INSTRUCTION: 2,\r\n // This is used to handle some special cases, like branches/loops:\r\n SAME_INSTRUCTION: 3,\r\n SKIP_INSTRUCTION: 4,\r\n HALT: 5,\r\n RESTART: 6,\r\n});\r\n\r\nexport const AUTOMATOR_MODE = Object.freeze({\r\n PAUSE: 1,\r\n RUN: 2,\r\n SINGLE_STEP: 3,\r\n});\r\n\r\n\r\nexport const AUTOMATOR_VAR_TYPES = {\r\n NUMBER: { id: 0, name: \"number\" },\r\n STUDIES: { id: 1, name: \"studies\" },\r\n DURATION: { id: 2, name: \"duration\" },\r\n UNKNOWN: { id: -1, name: \"unknown\" },\r\n};\r\n\r\nexport const AUTOMATOR_TYPE = Object.freeze({\r\n TEXT: 0,\r\n BLOCK: 1\r\n});\r\n\r\n/**\r\n * This object represents a single entry on the execution stack. It's a combination\r\n * of transient and persistent values -- we don't store the compiled script or indices\r\n * in the player object, but they are part of the stack.\r\n */\r\nclass AutomatorStackEntry {\r\n constructor(stackIndex) {\r\n this._stackIndex = stackIndex;\r\n this._commandIndex = 0;\r\n }\r\n\r\n // This is used when a new thing is put on the stack (rather than us creating objects\r\n // when loading a game)\r\n initializeNew(commands) {\r\n this._commands = commands;\r\n this._commandIndex = 0;\r\n this.persistent = {\r\n lineNumber: commands[0].lineNumber,\r\n commandState: null,\r\n };\r\n }\r\n\r\n get commandIndex() {\r\n return this._commandIndex;\r\n }\r\n\r\n set commandIndex(value) {\r\n this._commandIndex = value;\r\n this.lineNumber = this._commands[value].lineNumber;\r\n }\r\n\r\n get lineNumber() {\r\n return this.persistent.lineNumber;\r\n }\r\n\r\n set lineNumber(value) {\r\n this.persistent.lineNumber = value;\r\n }\r\n\r\n /**\r\n * @returns {object|null} commandState used by commands to track their own data, such as remaining wait time\r\n */\r\n get commandState() {\r\n return this.persistent.commandState;\r\n }\r\n\r\n set commandState(value) {\r\n this.persistent.commandState = value;\r\n }\r\n\r\n get persistent() {\r\n return player.reality.automator.state.stack[this._stackIndex];\r\n }\r\n\r\n set persistent(value) {\r\n player.reality.automator.state.stack[this._stackIndex] = value;\r\n }\r\n\r\n get commands() {\r\n return this._commands;\r\n }\r\n\r\n set commands(value) {\r\n this._commands = value;\r\n }\r\n}\r\n\r\nexport class AutomatorScript {\r\n constructor(id) {\r\n this._id = id;\r\n this.compile();\r\n }\r\n\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n get name() {\r\n return this.persistent.name;\r\n }\r\n\r\n set name(value) {\r\n this.persistent.name = value;\r\n }\r\n\r\n get persistent() {\r\n return player.reality.automator.scripts[this._id];\r\n }\r\n\r\n get commands() {\r\n return this._compiled;\r\n }\r\n\r\n get text() {\r\n return this.persistent.content;\r\n }\r\n\r\n save(content) {\r\n if (AutomatorData.isWithinLimit()) this.persistent.content = content;\r\n this.compile();\r\n }\r\n\r\n compile() {\r\n this._compiled = compile(this.text).compiled;\r\n }\r\n\r\n static create(name, content = \"\") {\r\n const scripts = Object.keys(player.reality.automator.scripts);\r\n const missingIndex = scripts.findIndex((x, y) => y + 1 !== Number(x));\r\n let id = 1 + (missingIndex === -1 ? scripts.length : missingIndex);\r\n // On a fresh save, this executes before player is properly initialized\r\n if (!player.reality.automator.scripts || id === 0) id = 1;\r\n player.reality.automator.scripts[id] = {\r\n id,\r\n name,\r\n content,\r\n };\r\n return new AutomatorScript(id);\r\n }\r\n}\r\n\r\nexport const AutomatorData = {\r\n // Used for getting the correct EC count in event log\r\n lastECCompletionCount: 0,\r\n // Used as a flag to make sure that wait commands only add one entry to the log instead of every execution attempt\r\n isWaiting: false,\r\n waitStart: 0,\r\n lastEvent: 0,\r\n eventLog: [],\r\n isEditorFullscreen: false,\r\n needsRecompile: true,\r\n cachedErrors: 0,\r\n // This is to hold finished script templates as text in order to make the custom blocks for blockmato\r\n blockTemplates: [],\r\n undoBuffer: [],\r\n redoBuffer: [],\r\n charsSinceLastUndoState: 0,\r\n\r\n MAX_ALLOWED_SCRIPT_CHARACTERS: 10000,\r\n MAX_ALLOWED_TOTAL_CHARACTERS: 60000,\r\n MAX_ALLOWED_SCRIPT_NAME_LENGTH: 15,\r\n MAX_ALLOWED_SCRIPT_COUNT: 20,\r\n MAX_ALLOWED_CONSTANT_NAME_LENGTH: 20,\r\n // Note that a study string with ALL studies in unshortened form without duplicated studies is ~230 characters\r\n MAX_ALLOWED_CONSTANT_VALUE_LENGTH: 250,\r\n MAX_ALLOWED_CONSTANT_COUNT: 30,\r\n MIN_CHARS_BETWEEN_UNDOS: 10,\r\n MAX_UNDO_ENTRIES: 30,\r\n\r\n scriptIndex() {\r\n return player.reality.automator.state.editorScript;\r\n },\r\n currentScriptName() {\r\n return player.reality.automator.scripts[this.scriptIndex()].name;\r\n },\r\n currentScriptText(index) {\r\n const toCheck = index || this.scriptIndex();\r\n return player.reality.automator.scripts[toCheck]?.content;\r\n },\r\n createNewScript(content, name) {\r\n const newScript = AutomatorScript.create(name, content);\r\n GameUI.notify.automator(`Imported Script \"${name}\"`);\r\n player.reality.automator.state.editorScript = newScript.id;\r\n AutomatorData.clearUndoData();\r\n EventHub.dispatch(GAME_EVENT.AUTOMATOR_SAVE_CHANGED);\r\n },\r\n recalculateErrors() {\r\n const toCheck = this.currentScriptText();\r\n this.cachedErrors = compile(toCheck).errors;\r\n this.cachedErrors.sort((a, b) => a.startLine - b.startLine);\r\n },\r\n currentErrors() {\r\n if (this.needsRecompile) {\r\n this.recalculateErrors();\r\n this.needsRecompile = false;\r\n }\r\n return this.cachedErrors;\r\n },\r\n logCommandEvent(message, line) {\r\n const currTime = Date.now();\r\n this.eventLog.push({\r\n // Messages often overflow the 120 col limit and extra spacing gets included in the message - remove it\r\n message: message.replaceAll(/\\s?\\n\\s+/gu, \" \"),\r\n line: AutomatorBackend.translateLineNumber(line),\r\n thisReality: Time.thisRealityRealTime.totalSeconds,\r\n timestamp: currTime,\r\n timegap: currTime - this.lastEvent\r\n });\r\n this.lastEvent = currTime;\r\n // Remove the oldest entry if the log is too large\r\n if (this.eventLog.length > player.options.automatorEvents.maxEntries) this.eventLog.shift();\r\n },\r\n clearEventLog() {\r\n this.eventLog = [];\r\n this.lastEvent = 0;\r\n },\r\n // We need to get the current character count from the editor itself instead of the player object, because otherwise\r\n // any changes made after getting above either limit will never be saved. Note that if the player is on the automator\r\n // subtab before the automator is unlocked, editor is undefined\r\n singleScriptCharacters() {\r\n return player.reality.automator.type === AUTOMATOR_TYPE.TEXT\r\n ? AutomatorTextUI.editor?.getDoc().getValue().length ?? 0\r\n : BlockAutomator.parseLines(BlockAutomator.lines).join(\"\\n\").length;\r\n },\r\n totalScriptCharacters() {\r\n return Object.values(player.reality.automator.scripts)\r\n .filter(s => s.id !== this.scriptIndex())\r\n .map(s => s.content.length)\r\n .reduce((sum, len) => sum + len, 0) +\r\n this.singleScriptCharacters();\r\n },\r\n isWithinLimit() {\r\n return this.singleScriptCharacters() <= this.MAX_ALLOWED_SCRIPT_CHARACTERS &&\r\n this.totalScriptCharacters() <= this.MAX_ALLOWED_TOTAL_CHARACTERS;\r\n },\r\n\r\n // This must be called every time the current script or editor mode are changed\r\n clearUndoData() {\r\n this.undoBuffer = [];\r\n this.redoBuffer = [];\r\n this.charsSinceLastUndoState = 0;\r\n },\r\n // We only save an undo state every so often based on the number of characters that have been modified\r\n // since the last state. This gets passed in as a parameter and gets called every time any typing is done,\r\n // but only actually does something when that threshold is reached.\r\n pushUndoData(data, newChars) {\r\n // If the buffer is empty, then we need to immediately write to the buffer (ignoring character changes)\r\n // because otherwise edits can't be fully undone back to the very first change\r\n this.charsSinceLastUndoState += newChars;\r\n const pastGap = this.charsSinceLastUndoState <= this.MIN_CHARS_BETWEEN_UNDOS;\r\n if (pastGap && this.undoBuffer.length !== 0) return;\r\n\r\n if (this.undoBuffer[this.undoBuffer.length - 1] !== data) this.undoBuffer.push(data);\r\n if (this.undoBuffer.length > this.MAX_UNDO_ENTRIES) this.undoBuffer.shift();\r\n this.charsSinceLastUndoState = 0;\r\n },\r\n pushRedoData(data) {\r\n if (this.redoBuffer[this.redoBuffer.length - 1] !== data) this.redoBuffer.push(data);\r\n },\r\n // These following two methods pop the top entry off of the undo/redo stack and then push it\r\n // onto the *other* stack before modifying all the relevant UI elements and player props. These\r\n // could in principle be combined into one function to reduce boilerplace, but keeping them\r\n // separate is probably more readable externally\r\n undoScriptEdit() {\r\n if (this.undoBuffer.length === 0 || Tabs.current._currentSubtab.name !== \"Automator\") return;\r\n\r\n const undoContent = this.undoBuffer.pop();\r\n this.pushRedoData(this.currentScriptText());\r\n player.reality.automator.scripts[this.scriptIndex()].content = undoContent;\r\n\r\n AutomatorBackend.saveScript(this.scriptIndex(), undoContent);\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.TEXT) AutomatorTextUI.editor.setValue(undoContent);\r\n else BlockAutomator.updateEditor(undoContent);\r\n },\r\n redoScriptEdit() {\r\n if (this.redoBuffer.length === 0 || Tabs.current._currentSubtab.name !== \"Automator\") return;\r\n\r\n const redoContent = this.redoBuffer.pop();\r\n // We call this with a value which is always higher than said threshold, forcing the current text to be pushed\r\n this.pushUndoData(this.currentScriptText(), 2 * this.MIN_CHARS_BETWEEN_UNDOS);\r\n player.reality.automator.scripts[this.scriptIndex()].content = redoContent;\r\n\r\n AutomatorBackend.saveScript(this.scriptIndex(), redoContent);\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.TEXT) AutomatorTextUI.editor.setValue(redoContent);\r\n else BlockAutomator.updateEditor(redoContent);\r\n }\r\n};\r\n\r\nexport const LineEnum = { Active: \"active\", Event: \"event\", Error: \"error\" };\r\n\r\n// Manages line highlighting in a way which is agnostic to the current editor mode (line or block). Ironically this is\r\n// actually easier to manage in block mode as the Vue components render each line individually and we can just\r\n// conditionally add classes in the template. The highlighting in text mode needs to be spliced and removed inline\r\n// within the CodeMirror editor\r\nexport const AutomatorHighlighter = {\r\n lines: {\r\n active: -1,\r\n event: -1,\r\n error: -1,\r\n },\r\n\r\n updateHighlightedLine(line, key) {\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.TEXT && line !== -1) {\r\n if (!AutomatorTextUI.editor) return;\r\n this.removeHighlightedTextLine(key);\r\n this.addHighlightedTextLine(line, key);\r\n } else {\r\n this.lines[key] = line;\r\n }\r\n },\r\n\r\n // We need to specifically remove the highlighting class from the old line before splicing it in for the new line\r\n removeHighlightedTextLine(key) {\r\n const removedLine = this.lines[key] - 1;\r\n AutomatorTextUI.editor.removeLineClass(removedLine, \"background\", `c-automator-editor__${key}-line`);\r\n AutomatorTextUI.editor.removeLineClass(removedLine, \"gutter\", `c-automator-editor__${key}-line-gutter`);\r\n this.lines[key] = -1;\r\n },\r\n addHighlightedTextLine(line, key) {\r\n AutomatorTextUI.editor.addLineClass(line - 1, \"background\", `c-automator-editor__${key}-line`);\r\n AutomatorTextUI.editor.addLineClass(line - 1, \"gutter\", `c-automator-editor__${key}-line-gutter`);\r\n this.lines[key] = line;\r\n },\r\n\r\n clearAllHighlightedLines() {\r\n for (const lineType of Object.values(LineEnum)) {\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.TEXT && AutomatorTextUI.editor) {\r\n for (let line = 0; line < AutomatorTextUI.editor.doc.size; line++) {\r\n AutomatorTextUI.editor.removeLineClass(line, \"background\", `c-automator-editor__${lineType}-line`);\r\n AutomatorTextUI.editor.removeLineClass(line, \"gutter\", `c-automator-editor__${lineType}-line-gutter`);\r\n }\r\n }\r\n this.lines[lineType] = -1;\r\n }\r\n }\r\n};\r\n\r\n// Manages line highlighting in a way which is agnostic to the current editor mode (line or block)\r\nexport const AutomatorScroller = {\r\n // Block editor counts lines differently due to modified loop structure; this method handles that internally\r\n scrollToRawLine(line) {\r\n const targetLine = player.reality.automator.type === AUTOMATOR_TYPE.TEXT\r\n ? line\r\n : AutomatorBackend.translateLineNumber(line);\r\n this.scrollToLine(targetLine);\r\n },\r\n\r\n scrollToLine(line) {\r\n let editor, textHeight, lineToScroll;\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.TEXT) {\r\n // We can't use CodeMirror's scrollIntoView() method as that forces the entire viewport to keep the line in view.\r\n // This can potentially cause a softlock with \"follow execution\" enabled on sufficiently short screens.\r\n editor = document.querySelector(\".CodeMirror-scroll\");\r\n textHeight = AutomatorTextUI.editor.defaultTextHeight();\r\n lineToScroll = line + 1;\r\n } else {\r\n editor = BlockAutomator.editor;\r\n textHeight = 34.5;\r\n lineToScroll = line;\r\n }\r\n\r\n // In both cases we might potentially try to scroll before the editor has properly initialized (ie. the automator\r\n // itself ends up loading up faster than the editor UI element)\r\n if (!editor) return;\r\n\r\n const paddedHeight = editor.clientHeight - 40;\r\n const newScrollPos = textHeight * (lineToScroll - 1);\r\n if (newScrollPos > editor.scrollTop + paddedHeight) editor.scrollTo(0, newScrollPos - paddedHeight);\r\n if (newScrollPos < editor.scrollTop) editor.scrollTo(0, newScrollPos);\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.BLOCK) {\r\n BlockAutomator.gutter.style.bottom = `${editor.scrollTop}px`;\r\n }\r\n }\r\n};\r\n\r\nexport const AutomatorBackend = {\r\n MAX_COMMANDS_PER_UPDATE: 100,\r\n hasJustCompleted: false,\r\n _scripts: [],\r\n\r\n get state() {\r\n return player.reality.automator.state;\r\n },\r\n\r\n // The Automator may be paused at some instruction, but still be on.\r\n get isOn() {\r\n return !this.stack.isEmpty;\r\n },\r\n\r\n /**\r\n * @returns {AUTOMATOR_MODE}\r\n */\r\n get mode() {\r\n return this.state.mode;\r\n },\r\n\r\n set mode(value) {\r\n this.state.mode = value;\r\n },\r\n\r\n get isRunning() {\r\n return this.isOn && this.mode === AUTOMATOR_MODE.RUN;\r\n },\r\n\r\n findRawScriptObject(id) {\r\n const scripts = player.reality.automator.scripts;\r\n const index = Object.values(scripts).findIndex(s => s.id === id);\r\n return scripts[parseInt(Object.keys(scripts)[index], 10)];\r\n },\r\n\r\n get currentRunningScript() {\r\n return this.findRawScriptObject(this.state.topLevelScript);\r\n },\r\n\r\n get currentEditingScript() {\r\n return this.findRawScriptObject(player.reality.automator.state.editorScript);\r\n },\r\n\r\n get scriptName() {\r\n return this.currentRunningScript?.name ?? \"\";\r\n },\r\n\r\n hasDuplicateName(name) {\r\n const nameArray = Object.values(player.reality.automator.scripts).map(s => s.name);\r\n return nameArray.filter(n => n === name).length > 1;\r\n },\r\n\r\n // Scripts are internally stored and run as text, but block mode has a different layout for loops that\r\n // shifts a lot of commands around. Therefore we need to conditionally change it based on mode in order\r\n // to make sure the player is presented with the correct line number\r\n translateLineNumber(num) {\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.TEXT) return num;\r\n return BlockAutomator.lineNumber(num);\r\n },\r\n\r\n get currentLineNumber() {\r\n if (!this.stack.top) return -1;\r\n return this.translateLineNumber(this.stack.top.lineNumber);\r\n },\r\n\r\n get currentInterval() {\r\n return Math.clampMin(Math.pow(0.994, Currency.realities.value) * 500, 1);\r\n },\r\n\r\n get currentRawText() {\r\n return this.currentRunningScript?.content ?? \"\";\r\n },\r\n\r\n get currentScriptLength() {\r\n return this.currentRawText.split(\"\\n\").length;\r\n },\r\n\r\n // Finds which study presets are referenced within the specified script\r\n getUsedPresets(scriptID) {\r\n const script = this.findRawScriptObject(scriptID);\r\n if (!script) return null;\r\n\r\n const foundPresets = new Set();\r\n const lines = script.content.split(\"\\n\");\r\n for (const rawLine of lines) {\r\n const matchPresetID = rawLine.match(/studies( nowait)? load id ([1-6])/ui);\r\n if (matchPresetID) foundPresets.add(Number(matchPresetID[2]) - 1);\r\n const matchPresetName = rawLine.match(/studies( nowait)? load name (\\S+)/ui);\r\n if (matchPresetName) {\r\n // A script might pass the regex match, but actually be referencing a preset which doesn't exist by name\r\n const presetID = player.timestudy.presets.findIndex(p => p.name === matchPresetName[2]);\r\n if (presetID !== -1) foundPresets.add(presetID);\r\n }\r\n }\r\n const presets = Array.from(foundPresets);\r\n presets.sort();\r\n return presets;\r\n },\r\n\r\n // Finds which constants are referenced within the specified script\r\n getUsedConstants(scriptID) {\r\n const script = this.findRawScriptObject(scriptID);\r\n if (!script) return null;\r\n\r\n const foundConstants = new Set();\r\n const lines = script.content.split(\"\\n\");\r\n for (const rawLine of lines) {\r\n const availableConstants = Object.keys(player.reality.automator.constants);\r\n // Needs a space-padded regex match so that (for example) a constant \"unl\" doesn't match to an unlock command\r\n // Additionally we need a negative lookbehind in order to ignore matches with presets which have the same name\r\n for (const key of availableConstants) {\r\n if (rawLine.match(`(?= AutomatorData.MAX_ALLOWED_CONSTANT_COUNT) return;\r\n player.reality.automator.constants[constantName] = value;\r\n player.reality.automator.constantSortOrder.push(constantName);\r\n EventHub.dispatch(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED);\r\n },\r\n modifyConstant(constantName, newValue) {\r\n if (Object.keys(player.reality.automator.constants).includes(constantName)) {\r\n player.reality.automator.constants[constantName] = newValue;\r\n EventHub.dispatch(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED);\r\n } else {\r\n this.addConstant(constantName, newValue);\r\n }\r\n },\r\n renameConstant(oldName, newName) {\r\n const data = player.reality.automator.constants[oldName];\r\n player.reality.automator.constants[newName] = data;\r\n delete player.reality.automator.constants[oldName];\r\n\r\n const index = player.reality.automator.constantSortOrder.indexOf(oldName);\r\n if (index !== -1) player.reality.automator.constantSortOrder[index] = newName;\r\n EventHub.dispatch(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED);\r\n },\r\n deleteConstant(constantName) {\r\n delete player.reality.automator.constants[constantName];\r\n const index = player.reality.automator.constantSortOrder.indexOf(constantName);\r\n if (index > -1) player.reality.automator.constantSortOrder.splice(index, 1);\r\n EventHub.dispatch(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED);\r\n },\r\n\r\n // We can't just concatenate different parts of script data together or use some kind of delimiting character string\r\n // due to the fact that comments can essentially contain character sequences with nearly arbitrary content and\r\n // length. Instead, we take the approach of concatenating all data together with their lengths prepended at the start\r\n // of each respective data string. For example:\r\n // [\"blob\", \"11,21,31\"] => \"00004blob0000811,21,31\"\r\n // Note that the whole string can be unambiguously parsed from left-to-right regardless of the actual data contents.\r\n // All numerical values are assumed to be exactly 5 characters long for consistency and since the script length limit\r\n // is 5 digits long.\r\n serializeAutomatorData(dataArray) {\r\n const paddedNumber = num => `0000${num}`.slice(-5);\r\n const segments = [];\r\n for (const data of dataArray) {\r\n segments.push(`${paddedNumber(data.length)}${data}`);\r\n }\r\n return segments.join(\"\");\r\n },\r\n\r\n // Inverse of the operation performed by serializeAutomatorData(). Can throw an error for malformed inputs, but this\r\n // will always be caught farther up the call chain and interpreted properly as an invalid dataString.\r\n deserializeAutomatorData(dataString) {\r\n if (dataString === \"\") throw new Error(\"Attempted deserialization of empty string\");\r\n const dataArray = [];\r\n let remainingData = dataString;\r\n while (remainingData.length > 0) {\r\n const segmentLength = Number(remainingData.slice(0, 5));\r\n remainingData = remainingData.substr(5);\r\n if (Number.isNaN(segmentLength) || remainingData.length < segmentLength) {\r\n throw new Error(\"Inconsistent or malformed serialized automator data\");\r\n } else {\r\n const segmentData = remainingData.slice(0, segmentLength);\r\n remainingData = remainingData.substr(segmentLength);\r\n dataArray.push(segmentData);\r\n }\r\n }\r\n return dataArray;\r\n },\r\n\r\n // This exports only the text contents of the currently-visible script\r\n exportCurrentScriptContents() {\r\n // Cut off leading and trailing whitespace\r\n const trimmed = AutomatorData.currentScriptText().replace(/^\\s*(.*?)\\s*$/u, \"$1\");\r\n if (trimmed.length === 0) return null;\r\n // Serialize the script name and content\r\n const name = AutomatorData.currentScriptName();\r\n return GameSaveSerializer.encodeText(this.serializeAutomatorData([name, trimmed]), \"automator script\");\r\n },\r\n\r\n // This parses script content from an encoded export string; does not actually import anything\r\n parseScriptContents(rawInput) {\r\n let decoded, parts;\r\n try {\r\n decoded = GameSaveSerializer.decodeText(rawInput, \"automator script\");\r\n parts = this.deserializeAutomatorData(decoded);\r\n } catch (e) {\r\n return null;\r\n }\r\n\r\n return {\r\n name: parts[0],\r\n content: parts[1],\r\n };\r\n },\r\n\r\n // Creates a new script from the supplied import string\r\n importScriptContents(rawInput) {\r\n const parsed = this.parseScriptContents(rawInput);\r\n AutomatorData.createNewScript(parsed.content, parsed.name);\r\n this.initializeFromSave();\r\n },\r\n\r\n // This exports the selected script along with any constants and study presets it uses or references\r\n exportFullScriptData(scriptID) {\r\n const script = this.findRawScriptObject(scriptID);\r\n const trimmed = script.content.replace(/^\\s*(.*?)\\s*$/u, \"$1\");\r\n if (trimmed.length === 0) return null;\r\n\r\n const foundPresets = new Set();\r\n const foundConstants = new Set();\r\n const lines = trimmed.split(\"\\n\");\r\n // We find just the keys first, the rest of the associated data is serialized later\r\n for (const rawLine of lines) {\r\n const matchPresetID = rawLine.match(/studies( nowait)? load id ([1-6])/ui);\r\n if (matchPresetID) foundPresets.add(Number(matchPresetID[2]) - 1);\r\n const matchPresetName = rawLine.match(/studies( nowait)? load name (\\S+)/ui);\r\n if (matchPresetName) {\r\n // A script might pass the regex match, but actually be referencing a preset which doesn't exist by name\r\n const presetID = player.timestudy.presets.findIndex(p => p.name === matchPresetName[2]);\r\n if (presetID !== -1) foundPresets.add(presetID);\r\n }\r\n const availableConstants = Object.keys(player.reality.automator.constants);\r\n for (const key of availableConstants) if (rawLine.match(`\\\\s${key}(\\\\s|$)`)) foundConstants.add(key);\r\n }\r\n\r\n // Serialize presets\r\n const presets = [];\r\n for (const id of Array.from(foundPresets)) {\r\n const preset = player.timestudy.presets[id];\r\n presets.push(`${id}:${preset?.name ?? \"\"}:${preset?.studies ?? \"\"}`);\r\n }\r\n\r\n // Serialize constants\r\n const constants = [];\r\n for (const name of Array.from(foundConstants)) {\r\n constants.push(`${name}:${player.reality.automator.constants[name]}`);\r\n }\r\n\r\n // Serialize all the variables for the full data export\r\n const serialized = this.serializeAutomatorData([script.name, presets.join(\"*\"), constants.join(\"*\"), trimmed]);\r\n return GameSaveSerializer.encodeText(serialized, \"automator data\");\r\n },\r\n\r\n // This parses scripts which also have attached information in the form of associated constants and study presets.\r\n // Note that it doesn't actually import or assign the data to the save file at this point.\r\n parseFullScriptData(rawInput) {\r\n let decoded, parts;\r\n try {\r\n decoded = GameSaveSerializer.decodeText(rawInput, \"automator data\");\r\n parts = this.deserializeAutomatorData(decoded);\r\n } catch (e) {\r\n return null;\r\n }\r\n if (parts.length !== 4) return null;\r\n\r\n // Parse preset data (needs the conditional because otherwise it'll use the empty string to assign 0/undef/undef)\r\n const presetData = parts[1];\r\n const presets = [];\r\n if (presetData) {\r\n for (const preset of presetData.split(\"*\")) {\r\n const props = preset.split(\":\");\r\n presets.push({\r\n id: Number(props[0]),\r\n name: props[1],\r\n studies: props[2],\r\n });\r\n }\r\n }\r\n presets.sort((a, b) => a.id - b.id);\r\n\r\n // Parse constant data\r\n const constantData = parts[2];\r\n const constants = [];\r\n for (const constant of constantData.split(\"*\")) {\r\n if (constant === \"\") continue;\r\n const props = constant.split(\":\");\r\n constants.push({\r\n key: props[0],\r\n value: props[1],\r\n });\r\n }\r\n\r\n return {\r\n name: parts[0],\r\n presets,\r\n constants,\r\n content: parts[3],\r\n };\r\n },\r\n\r\n // This imports a given script, with options supplied for ignoring included presets and constants\r\n // within the import data.\r\n importFullScriptData(rawInput, ignore) {\r\n const parsed = this.parseFullScriptData(rawInput);\r\n AutomatorData.createNewScript(parsed.content, parsed.name);\r\n\r\n if (!ignore.presets) {\r\n for (const preset of parsed.presets) {\r\n player.timestudy.presets[preset.id] = { name: preset.name, studies: preset.studies };\r\n }\r\n }\r\n\r\n if (!ignore.constants) {\r\n for (const constant of parsed.constants) {\r\n this.modifyConstant(constant.key, constant.value);\r\n }\r\n }\r\n\r\n this.initializeFromSave();\r\n },\r\n\r\n update(diff) {\r\n if (!this.isOn) return;\r\n let stack;\r\n switch (this.mode) {\r\n case AUTOMATOR_MODE.PAUSE:\r\n return;\r\n case AUTOMATOR_MODE.SINGLE_STEP:\r\n this.singleStep();\r\n stack = AutomatorBackend.stack.top;\r\n // If single step completes the last line and repeat is off, the command stack will be empty and\r\n // scrolling will cause an error\r\n if (stack && this.state.followExecution) AutomatorScroller.scrollToRawLine(stack.lineNumber);\r\n this.state.mode = AUTOMATOR_MODE.PAUSE;\r\n return;\r\n case AUTOMATOR_MODE.RUN:\r\n break;\r\n default:\r\n this.stop();\r\n return;\r\n }\r\n\r\n player.reality.automator.execTimer += diff;\r\n const commandsThisUpdate = Math.min(\r\n Math.floor(player.reality.automator.execTimer / this.currentInterval), this.MAX_COMMANDS_PER_UPDATE\r\n );\r\n player.reality.automator.execTimer -= commandsThisUpdate * this.currentInterval;\r\n\r\n for (let count = 0; count < commandsThisUpdate && this.isRunning; ++count) {\r\n if (!this.step()) break;\r\n }\r\n },\r\n\r\n step() {\r\n if (this.stack.isEmpty) return false;\r\n for (let steps = 0; steps < 100 && !this.hasJustCompleted; steps++) {\r\n switch (this.runCurrentCommand()) {\r\n case AUTOMATOR_COMMAND_STATUS.SAME_INSTRUCTION:\r\n return true;\r\n case AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION:\r\n return this.nextCommand();\r\n case AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION:\r\n return false;\r\n case AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION:\r\n this.nextCommand();\r\n return false;\r\n case AUTOMATOR_COMMAND_STATUS.SKIP_INSTRUCTION:\r\n this.nextCommand();\r\n break;\r\n case AUTOMATOR_COMMAND_STATUS.HALT:\r\n this.stop();\r\n return false;\r\n case AUTOMATOR_COMMAND_STATUS.RESTART:\r\n this.restart();\r\n return false;\r\n }\r\n\r\n // We need to break out of the loop if the last commands are all SKIP_INSTRUCTION, or else it'll start\r\n // trying to execute from an undefined stack if it isn't set to automatically repeat\r\n if (!this.stack.top) this.hasJustCompleted = true;\r\n }\r\n\r\n // This should in practice never happen by accident due to it requiring 100 consecutive commands that don't do\r\n // anything (looping a smaller group of no-ops will instead trigger the loop check every tick). Nevertheless,\r\n // better to not have an explicit infinite loop so that the game doesn't hang if the player decides to be funny\r\n // and input 3000 comments in a row. If hasJustCompleted is true, then we actually broke out because the end of\r\n // the script has no-ops and we just looped through them, and therefore shouldn't show these messages\r\n if (!this.hasJustCompleted) {\r\n GameUI.notify.error(\"Automator halted - too many consecutive no-ops detected\");\r\n AutomatorData.logCommandEvent(\"Automator halted due to excessive no-op commands\", this.currentLineNumber);\r\n }\r\n\r\n this.stop();\r\n return false;\r\n },\r\n\r\n singleStep() {\r\n if (this.stack.isEmpty) return;\r\n // SAME_INSTRUCTION is used to enter blocks; this means we've successfully\r\n // advanced a line. Otherwise, we always advance a line, regardless of return\r\n // state.\r\n // HALT and RESTART are exceptions, as these are called by commands which force\r\n // program flow to do something else other than simply advancing to the next line\r\n switch (this.runCurrentCommand()) {\r\n case AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION:\r\n break;\r\n case AUTOMATOR_COMMAND_STATUS.HALT:\r\n this.stop();\r\n break;\r\n case AUTOMATOR_COMMAND_STATUS.RESTART:\r\n this.restart();\r\n break;\r\n default:\r\n this.nextCommand();\r\n break;\r\n }\r\n },\r\n\r\n runCurrentCommand() {\r\n const S = this.stack.top;\r\n const cmdState = S.commands[S.commandIndex].run(S);\r\n return cmdState;\r\n },\r\n\r\n nextCommand() {\r\n const S = this.stack.top;\r\n if (S.commandIndex >= S.commands.length - 1) {\r\n this.stack.pop();\r\n if (this.stack.isEmpty) {\r\n // With the debug output on, running short scripts gets very spammy, working around that\r\n // return false here makes sure that a single instruction script executes one tick at a time\r\n if (this.state.repeat) {\r\n this.start(this.state.topLevelScript, AUTOMATOR_MODE.RUN, false);\r\n return false;\r\n }\r\n this.stop();\r\n } else if (this.stack.top.commandState && this.stack.top.commandState.advanceOnPop) {\r\n AutomatorData.logCommandEvent(`Exiting IF block`, this.stack.top.commandState.ifEndLine);\r\n return this.nextCommand();\r\n }\r\n } else {\r\n S.commandState = null;\r\n ++S.commandIndex;\r\n }\r\n return true;\r\n },\r\n\r\n push(commands) {\r\n // We do not allow empty scripts on the stack.\r\n if (commands.length === 0) return;\r\n this.stack.push(commands);\r\n },\r\n\r\n findScript(id) {\r\n return this._scripts.find(e => e.id === id);\r\n },\r\n\r\n _createDefaultScript() {\r\n const defaultScript = AutomatorScript.create(\"New Script\");\r\n this._scripts = [defaultScript];\r\n this.state.topLevelScript = defaultScript.id;\r\n return defaultScript.id;\r\n },\r\n\r\n initializeFromSave() {\r\n const scriptIds = Object.keys(player.reality.automator.scripts).map(id => parseInt(id, 10));\r\n if (scriptIds.length === 0) {\r\n scriptIds.push(this._createDefaultScript());\r\n } else {\r\n this._scripts = scriptIds.map(s => new AutomatorScript(s));\r\n }\r\n if (!scriptIds.includes(this.state.topLevelScript)) this.state.topLevelScript = scriptIds[0];\r\n const currentScript = this.findScript(this.state.topLevelScript);\r\n if (currentScript.commands) {\r\n const commands = currentScript.commands;\r\n if (!this.stack.initializeFromSave(commands)) this.reset(commands);\r\n } else {\r\n this.stack.clear();\r\n }\r\n },\r\n\r\n // Note: This gets run every time any edit or mode conversion is done\r\n saveScript(id, data) {\r\n const script = this.findScript(id);\r\n if (!script) return;\r\n\r\n // Add the old data to the undo buffer; there are internal checks which prevent it from saving too often.\r\n // For performance, the contents of the script aren't actually checked (this would be an unavoidable O(n) cost).\r\n // Instead we naively assume length changes are pure insertions and deletions, which does mean we're ignoring\r\n // a few edge cases when changes are really substitutions that massively change the content\r\n const oldData = script.persistent.content;\r\n const lenChange = Math.abs(oldData.length - data.length);\r\n AutomatorData.pushUndoData(oldData, lenChange);\r\n\r\n script.save(data);\r\n if (id === this.state.topLevelScript) this.stop();\r\n },\r\n\r\n newScript() {\r\n // Make sure the new script has a unique name\r\n const scriptNames = AutomatorBackend._scripts.map(s => s.name);\r\n let newScript;\r\n if (scriptNames.includes(\"New Script\")) {\r\n let newIndex = 2;\r\n while (scriptNames.includes(`New Script (${newIndex})`)) newIndex++;\r\n newScript = AutomatorScript.create(`New Script (${newIndex})`);\r\n } else {\r\n newScript = AutomatorScript.create(\"New Script\");\r\n }\r\n\r\n this._scripts.push(newScript);\r\n return newScript;\r\n },\r\n\r\n // Note that deleting scripts leaves gaps in the automator script indexing since automator scripts can't be\r\n // dynamically re-indexed while the automator is running without causing a stutter from recompiling scripts.\r\n deleteScript(id) {\r\n // We need to delete scripts from two places - in the savefile and compiled AutomatorScript Objects\r\n const saveId = Object.values(player.reality.automator.scripts).findIndex(s => s.id === id);\r\n delete player.reality.automator.scripts[parseInt(Object.keys(player.reality.automator.scripts)[saveId], 10)];\r\n const idx = this._scripts.findIndex(e => e.id === id);\r\n this._scripts.splice(idx, 1);\r\n if (this._scripts.length === 0) {\r\n this._createDefaultScript();\r\n this.clearEditor();\r\n }\r\n if (id === this.state.topLevelScript) {\r\n this.stop();\r\n this.state.topLevelScript = this._scripts[0].id;\r\n }\r\n EventHub.dispatch(GAME_EVENT.AUTOMATOR_SAVE_CHANGED);\r\n },\r\n\r\n toggleRepeat() {\r\n this.state.repeat = !this.state.repeat;\r\n },\r\n\r\n toggleForceRestart() {\r\n this.state.forceRestart = !this.state.forceRestart;\r\n },\r\n\r\n toggleFollowExecution() {\r\n this.state.followExecution = !this.state.followExecution;\r\n this.jumpToActiveLine();\r\n },\r\n\r\n jumpToActiveLine() {\r\n const state = this.state;\r\n const focusedScript = state.topLevelScript === state.editorScript;\r\n if (focusedScript && this.isRunning && state.followExecution) {\r\n AutomatorScroller.scrollToRawLine(AutomatorBackend.stack.top.lineNumber);\r\n }\r\n },\r\n\r\n reset(commands) {\r\n this.stack.clear();\r\n this.push(commands);\r\n },\r\n\r\n stop() {\r\n this.stack.clear();\r\n this.state.mode = AUTOMATOR_MODE.PAUSE;\r\n this.hasJustCompleted = true;\r\n AutomatorHighlighter.clearAllHighlightedLines();\r\n },\r\n\r\n pause() {\r\n this.state.mode = AUTOMATOR_MODE.PAUSE;\r\n },\r\n\r\n start(scriptID = this.state.topLevelScript, initialMode = AUTOMATOR_MODE.RUN, compile = true) {\r\n // Automator execution behaves oddly across new games, so we explicitly stop it from running if not unlocked\r\n if (!Player.automatorUnlocked) return;\r\n this.hasJustCompleted = false;\r\n this.state.topLevelScript = scriptID;\r\n player.reality.automator.execTimer = 0;\r\n const scriptObject = this.findScript(scriptID);\r\n if (!scriptObject) return;\r\n if (compile) scriptObject.compile();\r\n if (scriptObject.commands) {\r\n this.reset(scriptObject.commands);\r\n this.state.mode = initialMode;\r\n }\r\n AutomatorData.isWaiting = false;\r\n if (player.options.automatorEvents.clearOnRestart) AutomatorData.clearEventLog();\r\n },\r\n\r\n restart() {\r\n // Sometimes this leads to start getting called twice in quick succession but it's close enough\r\n // that there's usually no command in between (possibly same tick).\r\n this.start(this.state.topLevelScript, AUTOMATOR_MODE.RUN);\r\n if (this.stack.isEmpty) return;\r\n this.reset(this.stack._data[0].commands);\r\n },\r\n\r\n changeModes(scriptID) {\r\n Tutorial.moveOn(TUTORIAL_STATE.AUTOMATOR);\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.BLOCK) {\r\n // This saves the script after converting it.\r\n BlockAutomator.parseTextFromBlocks();\r\n player.reality.automator.type = AUTOMATOR_TYPE.TEXT;\r\n } else {\r\n const toConvert = AutomatorTextUI.editor.getDoc().getValue();\r\n // Needs to be called to update the lines prop in the BlockAutomator object\r\n BlockAutomator.updateEditor(toConvert);\r\n AutomatorBackend.saveScript(scriptID, toConvert);\r\n player.reality.automator.type = AUTOMATOR_TYPE.BLOCK;\r\n }\r\n AutomatorHighlighter.clearAllHighlightedLines();\r\n EventHub.ui.dispatch(GAME_EVENT.AUTOMATOR_TYPE_CHANGED);\r\n },\r\n\r\n clearEditor() {\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.BLOCK) {\r\n BlockAutomator.clearEditor();\r\n } else {\r\n AutomatorTextUI.clearEditor();\r\n }\r\n },\r\n\r\n stack: {\r\n _data: [],\r\n push(commands) {\r\n const newEntry = new AutomatorStackEntry(this.length);\r\n newEntry.initializeNew(commands);\r\n this._data.push(newEntry);\r\n },\r\n pop() {\r\n if (this._data.length === 0) return;\r\n player.reality.automator.state.stack.pop();\r\n this._data.pop();\r\n },\r\n clear() {\r\n this._data = [];\r\n player.reality.automator.state.stack.length = 0;\r\n },\r\n initializeFromSave(commands) {\r\n this._data = [];\r\n const playerStack = player.reality.automator.state.stack;\r\n let currentCommands = commands;\r\n for (let depth = 0; depth < playerStack.length; ++depth) {\r\n const playerEntry = playerStack[depth];\r\n const newEntry = new AutomatorStackEntry(depth);\r\n newEntry.commands = currentCommands;\r\n const foundIndex = currentCommands.findIndex(e => e.lineNumber === playerEntry.lineNumber);\r\n if (foundIndex === -1) {\r\n // Could not match stack state to script, have to reset automato\r\n return false;\r\n }\r\n newEntry.commandIndex = foundIndex;\r\n this._data.push(newEntry);\r\n // Are we inside a code block?\r\n if (depth !== playerStack.length - 1) {\r\n if (currentCommands[foundIndex].blockCommands === undefined) {\r\n return false;\r\n }\r\n currentCommands = currentCommands[foundIndex].blockCommands;\r\n }\r\n }\r\n return true;\r\n },\r\n get top() {\r\n return this._data[this.length - 1];\r\n },\r\n get length() {\r\n if (this._data.length !== player.reality.automator.state.stack.length) {\r\n throw new Error(\"Inconsistent stack length\");\r\n }\r\n return this._data.length;\r\n },\r\n get isEmpty() {\r\n return this._data.length === 0;\r\n }\r\n },\r\n};\r\n","export const AutomatorPoints = {\r\n get perks() {\r\n return Perks.all.filter(p => p.automatorPoints);\r\n },\r\n\r\n // This also rejects rebuyables, where automatorPoints is undefined\r\n get upgrades() {\r\n return RealityUpgrades.all.filter(p => p.automatorPoints);\r\n },\r\n\r\n get pointsFromPerks() {\r\n return this.perks\r\n .filter(p => p.isBought)\r\n .map(p => p.automatorPoints)\r\n .sum();\r\n },\r\n\r\n get pointsFromUpgrades() {\r\n return this.upgrades\r\n .filter(p => p.isBought)\r\n .map(p => p.automatorPoints)\r\n .sum();\r\n },\r\n\r\n get pointsFromOther() {\r\n return GameDatabase.reality.automator.otherAutomatorPoints.map(s => s.automatorPoints()).sum();\r\n },\r\n\r\n get totalPoints() {\r\n return this.pointsFromPerks + this.pointsFromUpgrades + this.pointsFromOther;\r\n },\r\n\r\n get pointsForAutomator() {\r\n return 100;\r\n }\r\n};\r\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlockSingleInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlockSingleInput.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorBlockSingleInput.vue?vue&type=template&id=36c54dc2&scoped=true&\"\nimport script from \"./AutomatorBlockSingleInput.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorBlockSingleInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorBlockSingleInput.vue?vue&type=style&index=0&id=36c54dc2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"36c54dc2\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlockSingleRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlockSingleRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorBlockSingleRow.vue?vue&type=template&id=70ff0acc&scoped=true&\"\nimport script from \"./AutomatorBlockSingleRow.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorBlockSingleRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorBlockSingleRow.vue?vue&type=style&index=0&id=70ff0acc&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"70ff0acc\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlockEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlockEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorBlockEditor.vue?vue&type=template&id=0f454411&scoped=true&\"\nimport script from \"./AutomatorBlockEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorBlockEditor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorBlockEditor.vue?vue&type=style&index=0&id=0f454411&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0f454411\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('draggable',{staticClass:\"o-drag-cancel-region\",attrs:{\"group\":\"code-blocks\",\"ghost-class\":\"null-block\",\"draggable\":\".draggable-blocks\"}},[_c('p',[_vm._v(\" Drag and drop these blocks to the area on the left! The blocks have names matching the commands in the reference page, but may change appearance after being placed to describe what they do in a more natural-sounding manner. If a block changes in this way, the alternate text will be shown as a tooltip when going to drag it over. \")]),_c('br'),_c('p',[_vm._v(\" Inputs with a \"),_c('span',{staticClass:\"c-automator-input-optional\"},[_vm._v(\"brown\")]),_vm._v(\" color are optional, while inputs with a \"),_c('span',{staticClass:\"c-automator-input-required\"},[_vm._v(\"teal\")]),_vm._v(\" color are required. \"),_c('span',{staticClass:\"c-automator-block-row-error\"},[_vm._v(\"Red\")]),_vm._v(\" inputs are causing errors and must be changed before the script can be run. For more details, check the Scripting Information pane. \")]),_c('p',[_vm._v(\" Options in dropdown menus which start with a * will be replaced with a text box. This can be turned back into a dropdown by clicking the \"),_c('i',{staticClass:\"fa-solid fa-circle-xmark\"}),_vm._v(\" on the right side of the text box. \")]),_c('draggable',{staticClass:\"block-container\",attrs:{\"list\":_vm.blocks,\"group\":{ name: 'code-blocks', pull: 'clone', put: false },\"sort\":false,\"clone\":_vm.clone}},_vm._l((_vm.blocks),function(block){return _c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(block.alias),expression:\"block.alias\"}],key:block.id,staticClass:\"o-automator-command o-automator-block-list draggable-blocks\"},[_vm._v(\" \"+_vm._s(block.cmd)+\" \")])}),0),_c('p',[_vm._v(\" Note: Blocks and their contents count towards the character limits as if the command was typed in text mode. \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlocks.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlocks.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorBlocks.vue?vue&type=template&id=7cd77792&scoped=true&\"\nimport script from \"./AutomatorBlocks.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorBlocks.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorBlocks.vue?vue&type=style&index=0&id=7cd77792&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7cd77792\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"c-automator-editor l-automator-editor l-automator-pane__content\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorTextEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorTextEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorTextEditor.vue?vue&type=template&id=4b7848e4&\"\nimport script from \"./AutomatorTextEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorTextEditor.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"tab\",staticClass:\"c-perk-tab\"},[_c('PerkPointLabel')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-perk-tab__header\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-perk-tab__perk-points\"},[_vm._v(_vm._s(_vm.format(_vm.pp, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Perk Point\", _vm.pp))+\". \"),_c('br'),_vm._v(\" Perk choices are permanent and cannot be respecced. \"),_c('br'),_vm._v(\" Diamond-shaped perks also give Automator Points. \"),_c('br'),_c('div',{staticClass:\"perk-settings\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn c-button-perk-layout\",on:{\"click\":_vm.cycleLayout}},[_vm._v(\" Perk Layout: \"+_vm._s(_vm.layoutText)+\" \")]),_c('PrimaryButton',{class:_vm.physicsClassObject(),on:{\"click\":_vm.togglePhysics}},[_vm._v(\" Physics: \"+_vm._s(_vm.physicsText)+\" \")]),_c('br'),_c('PrimaryButton',{staticClass:\"o-primary-btn\",on:{\"click\":_vm.centerTree}},[_vm._v(\" Center Tree on START \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn\",on:{\"click\":_vm.straightenEdges}},[_vm._v(\" Straighten Edges \")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',_vm._g({staticClass:\"o-primary-btn\",class:_vm.classObject},_vm.$listeners),[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PrimaryButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PrimaryButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PrimaryButton.vue?vue&type=template&id=e4ba2ef4&\"\nimport script from \"./PrimaryButton.vue?vue&type=script&lang=js&\"\nexport * from \"./PrimaryButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PerkPointLabel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PerkPointLabel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PerkPointLabel.vue?vue&type=template&id=1d796bb5&scoped=true&\"\nimport script from \"./PerkPointLabel.vue?vue&type=script&lang=js&\"\nexport * from \"./PerkPointLabel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PerkPointLabel.vue?vue&type=style&index=0&id=1d796bb5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1d796bb5\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PerksTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PerksTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PerksTab.vue?vue&type=template&id=74365f28&scoped=true&\"\nimport script from \"./PerksTab.vue?vue&type=script&lang=js&\"\nexport * from \"./PerksTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"74365f28\",\n null\n \n)\n\nexport default component.exports","import { GameDatabase } from \"./secret-formula/game-database\";\r\n\r\n/**\r\n * Multiple glyph effects are combined into a summary object of this type.\r\n * @typedef {Object} GlyphEffectConfig__combine_result\r\n * @property {number | Decimal} value The final effect value (boost to whatever)\r\n * @property {boolean} capped whether or not a cap or limit was applied (softcaps, etc)\r\n*/\r\nclass GlyphEffectConfig {\r\n /**\r\n * @param {Object} setup The fields here mostly match the properties of GlyphEffectConfig\r\n * @param {string} setup.id powerpow, etc\r\n * @param {string[]} setup.glyphTypes\r\n * @param {string} setup.singleDesc Specify how to show a single glyph's effect. Use a string with {value}\r\n * somewhere in it; that will be replaced with a number.\r\n * @param {string} [setup.totalDesc] (Defaults to singleDesc) specify how to show the combined effect of many\r\n * glyphs.\r\n * @param {string} [setup.genericDesc] (Defaults to singleDesc with {value} replaced with \"x\") Generic\r\n * description of the glyph's effect\r\n * @param {string} [setup.shortDesc] Short and condensed version of the glyph's effect for use in the Modal\r\n * @param {(function(number, number): number) | function(number, number): Decimal} [setup.effect] Calculate effect\r\n * value from level and strength\r\n * @param {function(number | Decimal): string} [setup.formatEffect] Format the effect's value into a string. Defaults\r\n * to format(x, 3, 3)\r\n * @param {function(number | Decimal): string} [setup.formatSingleEffect] Format the effect's value into a string, used\r\n * for effects which need to display different values in single values versus combined values (eg. power effects)\r\n * @param {function(number | Decimal): number | Decimal} [setup.softcap] An optional softcap to be applied after glyph\r\n * effects are combined.\r\n * @param {((function(number[]): GlyphEffectConfig__combine_result) | function(number[]): number)} setup.combine\r\n * Specification of how multiple glyphs combine. Can be GlyphCombiner.add or GlyphCombiner.multiply for most glyphs.\r\n * Otherwise, should be a function that takes a potentially empty array of numbers (each glyph's effect value)\r\n * and returns a combined effect or an object with the combined effect amd a capped indicator.\r\n * @param {boolean} [setup.enabledInDoomed] Determines if this effect is enabled while doomed. Defaults to false\r\n */\r\n constructor(setup) {\r\n GlyphEffectConfig.checkInputs(setup);\r\n /** @type {string} unique key for the effect -- powerpow, etc */\r\n this.id = setup.id;\r\n /** @type {number} bit position for the effect in the effect bitmask */\r\n this.bitmaskIndex = setup.bitmaskIndex;\r\n /** @type {boolean} flag to separate \"basic\"/effarig glyphs from cursed/reality glyphs */\r\n this.isGenerated = setup.isGenerated;\r\n /** @type {string[]} the types of glyphs this effect can occur on */\r\n this.glyphTypes = setup.glyphTypes;\r\n /** @type {string} See info about setup, above */\r\n this._singleDesc = setup.singleDesc;\r\n /** @type {string} See info about setup, above */\r\n this._totalDesc = setup.totalDesc ?? setup.singleDesc;\r\n /** @type {string} description of the effect without a specific value */\r\n this._genericDesc = setup.genericDesc ?? setup.singleDesc.replace(\"{value}\", \"x\");\r\n /** @type {string} shortened description for use in glyph choice info modal */\r\n this._shortDesc = setup.shortDesc;\r\n /**\r\n * @type {(function(number, number): number) | function(number, number): Decimal} Calculate effect\r\n * value from level and strength\r\n */\r\n this.effect = setup.effect;\r\n /**\r\n * @type {function(number | Decimal): string} formatting function for the effect\r\n * (just the number conversion). Combined with the description strings to make descriptions\r\n */\r\n this.formatEffect = setup.formatEffect ?? (x => format(x, 3, 3));\r\n /** @type {function(number | Decimal): string} See info about setup, above */\r\n this.formatSingleEffect = setup.formatSingleEffect || this.formatEffect;\r\n /**\r\n * @type {function(number[]): GlyphEffectConfig__combine_result} combine Function that combines\r\n * multiple glyph effects into one value (adds up, applies softcaps, etc)\r\n */\r\n this.combine = GlyphEffectConfig.setupCombine(setup);\r\n /** @type {function(number)} conversion function to produce altered glyph effect */\r\n this.conversion = setup.conversion;\r\n /**\r\n * @type {function(number | Decimal): string} formatSecondaryEffect formatting function for\r\n * the secondary effect (if there is one)\r\n */\r\n this.formatSecondaryEffect = setup.formatSecondaryEffect || (x => format(x, 3, 3));\r\n /** @type {function(number | Decimal): string} See info about setup, above */\r\n this.formatSingleSecondaryEffect = setup.formatSingleSecondaryEffect || this.formatSecondaryEffect;\r\n /** @type {string} color to show numbers in glyph tooltips if boosted */\r\n this.alteredColor = setup.alteredColor;\r\n /** @type {number} string passed along to tooltip code to ensure proper formatting */\r\n this.alterationType = setup.alterationType;\r\n /** @type {boolean} Indicates whether the effect grows with level or shrinks */\r\n this._biggerIsBetter = undefined;\r\n /** @type {boolean} Determines if effect is disabled while in doomed */\r\n this._enabledInDoomed = setup.enabledInDoomed ?? false;\r\n /** @type {boolean} Determines if effect is disabled even with pelle25 */\r\n this._enabledInDoomedWithlvl25 = setup.enabledInDoomedWithlvl25 ?? false;\r\n }\r\n\r\n /**\r\n * @returns {boolean}\r\n */\r\n get biggerIsBetter() {\r\n if (this._biggerIsBetter === undefined) this._biggerIsBetter = this.checkBiggerIsBetter();\r\n return this._biggerIsBetter;\r\n }\r\n\r\n get singleDesc() {\r\n const singleDesc = this._singleDesc;\r\n return typeof singleDesc === \"function\" ? singleDesc() : singleDesc;\r\n }\r\n\r\n get totalDesc() {\r\n const totalDesc = this._totalDesc;\r\n return typeof totalDesc === \"function\" ? totalDesc() : totalDesc;\r\n }\r\n\r\n get genericDesc() {\r\n const genericDesc = this._genericDesc;\r\n return typeof genericDesc === \"function\" ? genericDesc() : genericDesc;\r\n }\r\n\r\n get shortDesc() {\r\n const shortDesc = this._shortDesc;\r\n return typeof shortDesc === \"function\" ? shortDesc() : shortDesc;\r\n }\r\n\r\n get isDisabledByDoomed() { //this looks vue only\r\n return Pelle.isDoomed && !this._enabledInDoomed;\r\n }\r\n\r\n get isDisabledByDoomedWithlvl25() { //this looks vue only\r\n return Pelle.isDoomed && !this._enabledInDoomedWithlvl25;\r\n }\r\n\r\n /** @returns {number} */\r\n compareValues(effectValueA, effectValueB) {\r\n const result = Decimal.compare(effectValueA, effectValueB);\r\n return this.biggerIsBetter ? result : -result;\r\n }\r\n\r\n /**\r\n * @private\r\n * @returns {boolean}\r\n */\r\n checkBiggerIsBetter() {\r\n const baseEffect = new Decimal(this.effect(1, 1.01));\r\n const biggerEffect = new Decimal(this.effect(100, 2));\r\n return biggerEffect.gt(baseEffect);\r\n }\r\n\r\n /** @private */\r\n static checkInputs(setup) {\r\n const KNOWN_KEYS = [\"id\", \"bitmaskIndex\", \"glyphTypes\", \"singleDesc\", \"totalDesc\", \"genericDesc\", \"effect\",\r\n \"formatEffect\", \"formatSingleEffect\", \"combine\", \"softcap\", \"conversion\", \"formatSecondaryEffect\",\r\n \"formatSingleSecondaryEffect\", \"alteredColor\", \"alterationType\", \"isGenerated\", \"shortDesc\", \"enabledInDoomed\", \"enabledInDoomedWithlvl25\"];\r\n const unknownField = Object.keys(setup).find(k => !KNOWN_KEYS.includes(k));\r\n if (unknownField !== undefined) {\r\n throw new Error(`Glyph effect \"${setup.id}\" includes unrecognized field \"${unknownField}\"`);\r\n }\r\n\r\n const unknownGlyphType = setup.glyphTypes.find(e => !GLYPH_TYPES.includes(e));\r\n if (unknownGlyphType !== undefined) {\r\n throw new Error(`Glyph effect \"${setup.id}\" references unknown glyphType \"${unknownGlyphType}\"`);\r\n }\r\n\r\n const emptyCombine = setup.combine([]);\r\n if (typeof emptyCombine !== \"number\" && !(emptyCombine instanceof Decimal)) {\r\n if (emptyCombine.value === undefined || emptyCombine.capped === undefined) {\r\n throw new Error(`The combine function for Glyph effect \"${setup.id}\" has invalid return type`);\r\n }\r\n if (setup.softcap) {\r\n throw new Error(`The combine function for Glyph effect \"${setup.id}\" gives capped information, ` +\r\n `but there's also a softcap method`);\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n static setupCombine(setup) {\r\n let combine = setup.combine;\r\n const softcap = setup.softcap;\r\n const emptyCombine = combine([]);\r\n // No supplied capped indicator\r\n if (typeof (emptyCombine) === \"number\") {\r\n if (softcap === undefined) return effects => ({ value: combine(effects), capped: false });\r\n return effects => {\r\n const rawValue = combine(effects);\r\n const cappedValue = softcap(rawValue);\r\n return { value: cappedValue, capped: rawValue !== cappedValue };\r\n };\r\n }\r\n if (emptyCombine instanceof Decimal) {\r\n if (softcap === undefined) return effects => ({ value: combine(effects), capped: false });\r\n const neqTest = emptyCombine.value instanceof Decimal ? (a, b) => a.neq(b) : (a, b) => a !== b;\r\n return combine = effects => {\r\n const rawValue = combine(effects);\r\n const cappedValue = softcap(rawValue.value);\r\n return { value: cappedValue, capped: rawValue.capped || neqTest(rawValue.value, cappedValue) };\r\n };\r\n }\r\n // The result's an object, so it already has a capped propery, so we don't need to do anything.\r\n return combine;\r\n }\r\n}\r\n\r\nexport const realityGlyphEffectLevelThresholds = [0, 9000, 15000, 25000];\r\n\r\nexport const GlyphEffects = mapGameDataToObject(\r\n GameDatabase.reality.glyphEffects,\r\n config => new GlyphEffectConfig(config)\r\n);\r\n\r\nexport function findGlyphTypeEffects(glyphType) {\r\n return GlyphEffects.all.filter(e => e.glyphTypes.includes(glyphType));\r\n}\r\n\r\nexport function makeGlyphEffectBitmask(effectList) {\r\n return effectList.reduce((mask, eff) => mask + (1 << GlyphEffects[eff].bitmaskIndex), 0);\r\n}\r\n\r\nexport function getGlyphEffectsFromBitmask(bitmask) {\r\n return orderedEffectList\r\n .map(effectName => GlyphEffects[effectName])\r\n .filter(effect => (bitmask & (1 << effect.bitmaskIndex)) !== 0);\r\n}\r\n\r\nexport function getGlyphIDsFromBitmask(bitmask) {\r\n return getGlyphEffectsFromBitmask(bitmask).map(x => x.id);\r\n}\r\n\r\nclass FunctionalGlyphType {\r\n /**\r\n * @param {Object} setup\r\n * @param {string} setup.id\r\n * @param {function(): string} [setup.primaryEffect] All glyphs generated will have this effect, if specified\r\n * @param {function(): boolean} [setup.isUnlocked] If this glyph type is not available initially, this specifies\r\n * how to check to see if it is available\r\n * @param {number} setup.alchemyResource Alchemy resource generated by sacrificing this glyph\r\n * @param {boolean} setup.hasRarity If the glyph can have rarity or not\r\n */\r\n constructor(setup) {\r\n /** @type {string} identifier for this type (time, power, etc)*/\r\n this.id = setup.id;\r\n /** @type {GlyphEffectConfig[]} list of effects that this glyph can have */\r\n this.effects = findGlyphTypeEffects(setup.id);\r\n /** @type {string?} all glyphs generated will have at least this effect */\r\n this.primaryEffect = setup.primaryEffect;\r\n /** @type {undefined | function(): boolean} */\r\n this._isUnlocked = setup.isUnlocked;\r\n /** @type {number} */\r\n this.alchemyResource = setup.alchemyResource;\r\n /** @type {boolean} */\r\n this.hasRarity = setup.hasRarity;\r\n if (!GLYPH_TYPES.includes(this.id)) {\r\n throw new Error(`Id ${this.id} not found in GLYPH_TYPES`);\r\n }\r\n }\r\n\r\n /** @returns {boolean} */\r\n get isUnlocked() {\r\n return this._isUnlocked?.() ?? true;\r\n }\r\n}\r\n\r\nconst functionalGlyphTypes = mapGameDataToObject(\r\n GameDatabase.reality.glyphTypes,\r\n config => new FunctionalGlyphType(config)\r\n);\r\n\r\nexport const GlyphTypes = {\r\n ...functionalGlyphTypes,\r\n /**\r\n * @param {function(): number} rng Random number source (0..1)\r\n * @param {string} [blacklisted] Do not return the specified type\r\n * @returns {string | null}\r\n */\r\n random(rng, blacklisted = []) {\r\n const types = generatedTypes.filter(\r\n x => ((EffarigUnlock.reality.isUnlocked || MendingUpgrade(12).isBought)|| x !== \"effarig\") && !blacklisted.includes(x));\r\n return types[Math.floor(rng.uniform() * types.length)];\r\n },\r\n get list() {\r\n return GLYPH_TYPES.map(e => GlyphTypes[e]);\r\n },\r\n get locked() {\r\n return this.list.filter(e => !e.isUnlocked);\r\n }\r\n};\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-automator-pane\"},[_c('div',{staticClass:\"c-automator__controls l-automator__controls\"},[_c('div',{staticClass:\"l-automator-button-row\"},[_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Automator Introduction'),expression:\"'Automator Introduction'\"}],staticClass:\"fa-circle-info\",class:_vm.activePanelClass(_vm.panelEnum.INTRO_PAGE),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.INTRO_PAGE}}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Scripting Information'),expression:\"'Scripting Information'\"}],staticClass:\"fa-list\",class:_vm.activePanelClass(_vm.panelEnum.COMMANDS),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.COMMANDS}}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.errorTooltip),expression:\"errorTooltip\"}],staticClass:\"fa-exclamation-triangle\",class:_vm.activePanelClass(_vm.panelEnum.ERRORS),style:(_vm.errorStyle),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.ERRORS}}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Extended Data Transfer'),expression:\"'Extended Data Transfer'\"}],staticClass:\"fa-window-restore\",class:_vm.activePanelClass(_vm.panelEnum.DATA_TRANSFER),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.DATA_TRANSFER}}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('View recently executed commands'),expression:\"'View recently executed commands'\"}],staticClass:\"fa-eye\",class:_vm.activePanelClass(_vm.panelEnum.EVENTS),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.EVENTS}}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Modify defined constants'),expression:\"'Modify defined constants'\"}],staticClass:\"fa-book\",class:_vm.activePanelClass(_vm.panelEnum.CONSTANTS),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.CONSTANTS}}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Template Creator List'),expression:\"'Template Creator List'\"}],staticClass:\"fa-file-code\",class:_vm.activePanelClass(_vm.panelEnum.TEMPLATES),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.TEMPLATES}}}),(_vm.isBlock)?_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Command menu for Block editor mode'),expression:\"'Command menu for Block editor mode'\"}],staticClass:\"fa-cubes\",class:_vm.activePanelClass(_vm.panelEnum.BLOCKS),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.BLOCKS}}}):_vm._e(),(_vm.fullScreen)?_c('span',{staticClass:\"c-automator__status-text c-automator__status-text--small\",class:{ 'c-automator__status-text--error' : _vm.totalChars > _vm.maxTotalChars }},[_vm._v(\" Across all scripts: \"+_vm._s(_vm.formatInt(_vm.totalChars))+\"/\"+_vm._s(_vm.formatInt(_vm.maxTotalChars))+\" \")]):_vm._e(),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.fullScreenTooltip),expression:\"fullScreenTooltip\"}],staticClass:\"l-automator__expand-corner\",class:_vm.fullScreenIconClass,on:{\"click\":function($event){_vm.fullScreen = !_vm.fullScreen}}})],1),_c('div',{staticClass:\"l-automator-button-row\"},[_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Export single automator script'),expression:\"'Export single automator script'\"}],staticClass:\"fa-file-export\",on:{\"click\":_vm.exportScript}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.importTooltip),expression:\"importTooltip\"}],staticClass:\"fa-file-import\",class:{ 'c-automator__status-text--error' : !_vm.canMakeNewScript },on:{\"click\":_vm.importScript}}),_c('div',{staticClass:\"l-automator__script-names\"},[(!_vm.editingName)?[_c('ExpandingControlBox',{staticClass:\"l-automator__scripts-dropdown\",attrs:{\"auto-close\":true},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"c-automator-docs-script-select\"},[_vm._v(\" ▼ Current Script: \"+_vm._s(_vm.currentEditorScriptName)+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('AutomatorScriptDropdownEntryList',{key:_vm.scriptCount})]},proxy:true}],null,false,1001015561)}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Rename script'),expression:\"'Rename script'\"}],staticClass:\"far fa-edit\",on:{\"click\":_vm.rename}})]:_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.nameTooltip),expression:\"nameTooltip\"}],ref:\"renameInput\",staticClass:\"l-automator__rename-input c-automator__rename-input\",class:{ 'c-long-name-box' : _vm.isNameTooLong },on:{\"blur\":_vm.nameEdited,\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.$refs.renameInput.blur()}}})],2),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Delete this script'),expression:\"'Delete this script'\"}],staticClass:\"fas fa-trash\",on:{\"click\":_vm.deleteScript}})],1)]),_c('div',{staticClass:\"c-automator-docs l-automator-pane__content\"},[(_vm.infoPaneID === _vm.panelEnum.INTRO_PAGE)?_c('AutomatorDocsIntroPage'):(_vm.infoPaneID === _vm.panelEnum.COMMANDS)?_c('AutomatorDocsCommandList'):(_vm.infoPaneID === _vm.panelEnum.ERRORS)?_c('AutomatorErrorPage'):(_vm.infoPaneID === _vm.panelEnum.EVENTS)?_c('AutomatorEventLog'):(_vm.infoPaneID === _vm.panelEnum.DATA_TRANSFER)?_c('AutomatorDataTransferPage'):(_vm.infoPaneID === _vm.panelEnum.CONSTANTS)?_c('AutomatorDefinePage'):(_vm.infoPaneID === _vm.panelEnum.TEMPLATES)?_c('AutomatorDocsTemplateList'):(_vm.infoPaneID === _vm.panelEnum.BLOCKS)?_c('AutomatorBlocks'):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"c-automator__button l-automator__button fas\",on:{\"click\":_vm.emitClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorButton.vue?vue&type=template&id=a1d47f14&scoped=true&\"\nimport script from \"./AutomatorButton.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorButton.vue?vue&type=style&index=0&id=a1d47f14&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a1d47f14\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-panel-padding\"},[_vm._v(\" This page lets you import and export scripts with additional data attached; the encoded text will also include data for any Time Study presets or constants used within the script. This will allow you to more easily transfer working scripts between different save files, but you may have to overwrite existing data in the process due to limited space for study presets and constants. Data exported from this page is also imported in the same way that single script data is imported. \"),_c('br'),_c('br'),_vm._v(\" Note: Any mentions of constant names or full study-buying commands within comments will also be counted as being \\\"used\\\" within a script. This is intentional, as the comment is assumed to be indicative of what the script itself is attempting to do with presets or constants. \"),_c('br'),_c('br'),_vm._l((_vm.scripts),function(script,id){return _c('div',{key:id},[_c('AutomatorDataTransferSingleEntry',{staticClass:\"l-entry-margin\",attrs:{\"script\":script}})],1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-entry-padding\"},[_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Export Full Script Data'),expression:\"'Export Full Script Data'\"}],staticClass:\"l-button-margin fas fa-file-export\",on:{\"click\":function($event){return _vm.exportData(_vm.script.id)}}}),_c('b',[_vm._v(\"Script name: \"+_vm._s(_vm.script.name))]),_c('br'),(_vm.hasPresets)?_c('span',[_c('span',{class:_vm.iconClass(_vm.hidePresets),on:{\"click\":function($event){_vm.hidePresets = !_vm.hidePresets}}}),_vm._v(\" References \"+_vm._s(_vm.quantifyInt(\"recognized study preset\", _vm.presets.length))+\" \"),(!_vm.hidePresets)?_c('span',_vm._l((_vm.presets),function(id){return _c('div',{key:id},[(_vm.presetData[id].name)?_c('span',[_vm._v(\"\\\"\"+_vm._s(_vm.presetData[id].name)+\"\\\" (slot \"+_vm._s(id + 1)+\"):\")]):_c('span',[_vm._v(\"Preset slot \"+_vm._s(id + 1)+\":\")]),_c('br'),_c('div',{staticClass:\"l-value-padding\"},[(_vm.presetData[id].studies)?_c('span',[_vm._v(_vm._s(_vm.presetData[id].studies))]):_c('i',[_vm._v(\"Empty Study Preset\")])])])}),0):_vm._e()]):_c('span',[_vm._v(\" Does not reference any study presets. \")]),_c('br'),(_vm.hasConstants)?_c('span',[_c('span',{class:_vm.iconClass(_vm.hideConstants),on:{\"click\":function($event){_vm.hideConstants = !_vm.hideConstants}}}),_vm._v(\" References \"+_vm._s(_vm.quantifyInt(\"defined constant\", _vm.constants.length))+\" \"),(!_vm.hideConstants)?_c('span',_vm._l((_vm.constants),function(name){return _c('div',{key:name},[_vm._v(\" \\\"\"+_vm._s(name)+\"\\\": \"),_c('br'),_c('div',{staticClass:\"l-value-padding\"},[_vm._v(\" \"+_vm._s(_vm.constantData[name])+\" \")])])}),0):_vm._e()]):_c('span',[_vm._v(\" Does not reference any defined constants. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDataTransferSingleEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDataTransferSingleEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDataTransferSingleEntry.vue?vue&type=template&id=87c8567a&scoped=true&\"\nimport script from \"./AutomatorDataTransferSingleEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDataTransferSingleEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDataTransferSingleEntry.vue?vue&type=style&index=0&id=87c8567a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"87c8567a\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDataTransferPage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDataTransferPage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDataTransferPage.vue?vue&type=template&id=4d4d30ca&scoped=true&\"\nimport script from \"./AutomatorDataTransferPage.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDataTransferPage.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDataTransferPage.vue?vue&type=style&index=0&id=4d4d30ca&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d4d30ca\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-panel-padding\"},[_vm._v(\" This panel allows you to define case-sensitive constant values which can be used in place of numbers or Time Study import strings. These definitions are shared across all of your scripts and are limited to a maximum of \"+_vm._s(_vm.maxConstantCount)+\" defined constants. Additionally, constant names and values are limited to lengths of \"+_vm._s(_vm.maxNameLength)+\" and \"+_vm._s(_vm.maxValueLength)+\" characters respectively. Changes made to constants will not apply until any currently running scripts are restarted. \"),_c('br'),_c('br'),_vm._v(\" As a usage example, defining \"),_c('b',[_vm._v(\"first 🠈 11,21,22,31,32,33\")]),_vm._v(\" allows you to use \"),_c('b',[_vm._v(\"studies purchase first\")]),_vm._v(\" in order to purchase all of the studies in the first three rows. \"),_c('br'),_c('br'),_c('PrimaryButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.hasConstants ? null : 'You have no valid constants to delete!'),expression:\"hasConstants ? null : 'You have no valid constants to delete!'\"}],staticClass:\"c-delete-margin o-primary-btn--subtab-option\",class:{ 'o-primary-btn--disabled' : !_vm.hasConstants },on:{\"click\":_vm.deleteAllConstants}},[_vm._v(\" Delete all constants \")]),_c('br'),_c('br'),_c('PrimaryButton',{staticClass:\"c-delete-margin o-primary-btn--subtab-option\",on:{\"click\":_vm.importPresets}},[_vm._v(\" Import Time Study Presets \")]),_c('div',{key:_vm.count + _vm.refreshConstants,staticClass:\"l-definition-container\"},_vm._l((_vm.constants),function(constant,i){return _c('AutomatorDefineSingleEntry',{key:i,attrs:{\"constant\":constant}})}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-single-definition-container\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.aliasString),expression:\"aliasString\"}],staticClass:\"c-define-textbox c-alias\",class:{ 'l-limit-textbox' : _vm.aliasString.length === _vm.maxNameLength },attrs:{\"placeholder\":\"New constant...\",\"maxlength\":_vm.maxNameLength},domProps:{\"value\":(_vm.aliasString)},on:{\"focusin\":function($event){return _vm.handleFocus(true)},\"focusout\":function($event){return _vm.handleFocus(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.aliasString=$event.target.value}}}),(_vm.aliasString)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.errorTooltip()),expression:\"errorTooltip()\"}],staticClass:\"o-arrow-padding\"},[_vm._v(\" 🠈 \")]):_vm._e(),(_vm.aliasString)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.valueString),expression:\"valueString\"}],staticClass:\"c-define-textbox c-value\",class:{ 'l-limit-textbox' : _vm.valueString && _vm.valueString.length === _vm.maxValueLength },attrs:{\"placeholder\":\"Value for constant...\",\"maxlength\":_vm.maxValueLength},domProps:{\"value\":(_vm.valueString)},on:{\"focusin\":function($event){return _vm.handleFocus(true)},\"focusout\":function($event){return _vm.handleFocus(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.valueString=$event.target.value}}}):_vm._e(),(_vm.aliasString)?_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Delete this constant'),expression:\"'Delete this constant'\"}],staticClass:\"c-delete-button fas fa-eraser\",on:{\"click\":_vm.deleteConstant}}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDefineSingleEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDefineSingleEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDefineSingleEntry.vue?vue&type=template&id=559b0908&scoped=true&\"\nimport script from \"./AutomatorDefineSingleEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDefineSingleEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDefineSingleEntry.vue?vue&type=style&index=0&id=559b0908&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"559b0908\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDefinePage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDefinePage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDefinePage.vue?vue&type=template&id=1499c066&scoped=true&\"\nimport script from \"./AutomatorDefinePage.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDefinePage.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDefinePage.vue?vue&type=style&index=0&id=1499c066&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1499c066\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.selectedCommand !== -1)?_c('div',[_c('button',{staticClass:\"c-automator-docs--button l-return-button fas fa-arrow-left\",on:{\"click\":function($event){_vm.selectedCommand = -1}}}),_vm._v(\" Return to the Command List \")]):_vm._e(),(_vm.selectedCommand !== -1)?_c('AutomatorDocsManPage',{attrs:{\"command\":_vm.commands[_vm.selectedCommand]}}):_c('div',{staticClass:\"c-automator-docs-page\"},[_vm._v(\" Click on an underlined command to see more details on syntax, usage, and functionality. \"),_c('br'),_c('br'),_c('span',[_vm._v(\"Command List:\")]),_c('br'),_vm._l((_vm.categoryNames),function(category,i){return _c('div',{key:i},[_vm._v(\" \"+_vm._s(category)+\" (\"+_vm._s(_vm.commandsInCategory(i).length)+\" commands) \"),_vm._l((_vm.commandsInCategory(i)),function(command){return _c('div',{key:command.id,staticClass:\"c-automator-docs-page__link l-command-group\",on:{\"click\":function($event){_vm.selectedCommand = command.id}}},[(command.isUnlocked())?_c('span',[_vm._v(\" \"+_vm._s(command.keyword)+\" \")]):_vm._e()])})],2)}),_c('br'),_c('span',[_vm._v(\" Note: In the SYNTAX note on each command, \"),_c('u',[_vm._v(\"underlined\")]),_vm._v(\" inputs are \"),_c('i',[_vm._v(\"required\")]),_vm._v(\" inputs which you must fill and inputs in [square brackets] are optional (if used, they should be input \"),_c('i',[_vm._v(\"without\")]),_vm._v(\" the brackets). Any other parts should be typed in as they appear. Unless otherwise stated, all of the inputs are case-insensitive. Some commands may have more than one valid format, which will appear on separate lines. \")])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-docs-page\"},[_c('b',[_vm._v(\"NAME\")]),_c('div',{staticClass:\"c-automator-docs-page__indented\",domProps:{\"innerHTML\":_vm._s(_vm.command.keyword)}}),_c('b',[_vm._v(\"SYNTAX\")]),_c('div',{staticClass:\"c-automator-docs-page__indented\",domProps:{\"innerHTML\":_vm._s(_vm.command.syntax)}}),(_vm.command.description)?[_c('b',[_vm._v(\"DESCRIPTION\")]),_c('div',{staticClass:\"c-automator-docs-page__indented\",domProps:{\"innerHTML\":_vm._s(_vm.description)}})]:_vm._e(),_vm._l((_vm.command.sections),function(section){return [_c('b',{key:section.name},[_vm._v(_vm._s(section.name))]),_vm._l((section.items),function(item){return [_c('div',{key:item.header,staticClass:\"c-automator-docs-page__indented\"},[_c('div',{domProps:{\"innerHTML\":_vm._s(item.header)}}),_c('div',{staticClass:\"c-automator-docs-page__indented\",domProps:{\"innerHTML\":_vm._s(item.description)}})])]})]}),(_vm.command.examples)?[_c('b',[_vm._v(\"USAGE EXAMPLES\")]),_vm._l((_vm.command.examples),function(example){return _c('div',{key:example,staticClass:\"c-automator-docs-page__indented\",domProps:{\"innerHTML\":_vm._s(example)}})})]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsManPage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsManPage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDocsManPage.vue?vue&type=template&id=773d709a&scoped=true&\"\nimport script from \"./AutomatorDocsManPage.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDocsManPage.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"773d709a\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsCommandList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsCommandList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDocsCommandList.vue?vue&type=template&id=71d16626&scoped=true&\"\nimport script from \"./AutomatorDocsCommandList.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDocsCommandList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDocsCommandList.vue?vue&type=style&index=0&id=71d16626&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"71d16626\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(\" Welcome to the Antimatter Dimensions Automator! \"),_c('br'),_c('br'),_vm._v(\" This page is an introduction page which gives a very broad overview of everything you can do with the Automator. Specific details on various functionality can be found in the How To Play or their respective tabs (when relevant). \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Scripting Language:\")]),_vm._v(\" The Automator uses a custom scripting language in order to perform certain game actions for you. Click \"),_c('div',{staticClass:\"fas fa-list c-automator-button-icon\"}),_vm._v(\" to bring up a list of available commands. You can also define constants as shorthand names for various values on the \"),_c('div',{staticClass:\"fas fa-book c-automator-button-icon\"}),_vm._v(\" page. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Layout:\")]),_vm._v(\" This Automator itself is split up into two halves; the left half contains your script and controls for starting, stopping, and repeating its execution, and the right half contains Automator information. Clicking \"),_c('div',{staticClass:\"fas fa-expand-arrows-alt c-automator-button-icon\"}),_vm._v(\" in the top-right corner will expand the Automator to take up the whole browser page for easier editing. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Editor Modes:\")]),_vm._v(\" There are two different editors you can use to write your automator scripts - a block-based editor (default) and a text-based editor. You can swap between the two editor types with the switch in the top-right corner of the left half. Note that scripts with errors may not properly convert between the two modes, which can cause part of your script to be deleted. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Making Scripts:\")]),_vm._v(\" You can switch between multiple scripts or make new scripts using the dropdown on the second row of buttons. The current script can be renamed or deleted with the \"),_c('div',{staticClass:\"fas fa-edit c-automator-button-icon\"}),_vm._v(\" and \"),_c('div',{staticClass:\"fas fa-trash c-automator-button-icon\"}),_vm._v(\" buttons. The Automator will always contain at least one script for you to edit; deleting your last one will automatically create a new blank one. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Writing Scripts:\")]),_vm._v(\" Scripts in the block editor are made by going to the block tab \"),_c('div',{staticClass:\"fas fa-cubes c-automator-button-icon\"}),_vm._v(\", while scripts in the text editor are made by typing into the left half as a text box. In either editor mode, you can also use some smaller premade scripts from the template generator \"),_c('div',{staticClass:\"fas fa-file-code c-automator-button-icon\"}),_vm._v(\". You can undo or redo a limited number of edits using \"),_c('div',{staticClass:\"fas fa-arrow-rotate-left c-automator-button-icon\"}),_vm._v(\" or \"),_c('div',{staticClass:\"fas fa-arrow-rotate-right c-automator-button-icon\"}),_vm._v(\", or by using the respective hotkeys. Edit history is cleared upon switching, converting, or deleting scripts. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Debugging:\")]),_vm._v(\" The two main tools you have for fixing your scripts are the Error Log \"),_c('div',{staticClass:\"fas fa-exclamation-triangle c-automator-button-icon\"}),_vm._v(\" for when you can't get your script to run at all, and the Event Log \"),_c('div',{staticClass:\"fas fa-eye c-automator-button-icon\"}),_vm._v(\" for when it runs but doesn't do what you expect it to do. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Importing/Exporting:\")]),_vm._v(\" Automator scripts can be exported and imported in text format by using the \"),_c('div',{staticClass:\"fas fa-file-export c-automator-button-icon\"}),_vm._v(\" and \"),_c('div',{staticClass:\"fas fa-file-import c-automator-button-icon\"}),_vm._v(\" buttons respectively. You can also access additional extended exporting options \"),_c('div',{staticClass:\"fas fa-window-restore c-automator-button-icon\"}),_vm._v(\" if desired. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Script saving:\")]),_vm._v(\" Script changes are not immediately saved to your computer under all conditions; check the Automator How To Play entries for more details. Additionally there are two character limits to reduce lag, shown above the automator panels. \")])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsIntroPage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsIntroPage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDocsIntroPage.vue?vue&type=template&id=2dfadf11&scoped=true&\"\nimport script from \"./AutomatorDocsIntroPage.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDocsIntroPage.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDocsIntroPage.vue?vue&type=style&index=0&id=2dfadf11&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2dfadf11\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(\" These templates will let you do some more common things within the Automator. They may be slightly slower than manually-written scripts, but don't require you to have any previous programming experience to use. Clicking any of these buttons will open up a prompt with some input fields, which will generate a template you can place into your Automator. \"),_vm._l((_vm.templates),function(template){return _c('button',{key:template.name,staticClass:\"o-primary-btn c-automator-docs-template--button l-automator__button\",on:{\"click\":function($event){return _vm.showModal(template)}}},[_vm._v(\" Template: \"+_vm._s(template.name)+\" \")])}),_vm._v(\" Since you are currently in the \"+_vm._s(_vm.isBlock ? \"Block\" : \"Text\")+\" editor, this panel will \"+_vm._s(_vm.pasteText)+\". \"),_c('br'),_c('br'),(_vm.isBlock)?_c('draggable',{key:_vm.blockTemplates.length,staticClass:\"template-container\",attrs:{\"list\":_vm.blockTemplates,\"group\":{ name: 'code-blocks', pull: 'clone', put: false },\"sort\":false},on:{\"end\":_vm.unpackTemplateBlocks}},_vm._l((_vm.blockTemplates),function(template,i){return _c('div',{key:i,staticClass:\"o-automator-command o-automator-block-list draggable-blocks\",on:{\"dragstart\":function($event){return _vm.setIndex(i)}}},[_vm._v(\" \"+_vm._s(template.name)+\" \")])}),0):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsTemplateList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsTemplateList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDocsTemplateList.vue?vue&type=template&id=a3645a5c&scoped=true&\"\nimport script from \"./AutomatorDocsTemplateList.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDocsTemplateList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDocsTemplateList.vue?vue&type=style&index=0&id=a3645a5c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a3645a5c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-docs-page\"},[(_vm.errors.length === 0)?_c('div',[_vm._v(\" No script errors found! \")]):_c('div',[_c('b',[_vm._v(\"Your script has the following \"+_vm._s(_vm.quantify(\"error\", _vm.errors.length))+\":\")]),_c('br'),_vm._l((_vm.errors),function(error,i){return _c('span',{key:i},[_c('b',[_vm._v(\"On line \"+_vm._s(error.startLine)+\":\")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Jump to line'),expression:\"'Jump to line'\"}],staticClass:\"c-automator-docs--button fas fa-arrow-circle-right\",on:{\"click\":function($event){return _vm.scrollToLine(error.startLine)}}}),_c('div',{staticClass:\"c-automator-docs-page__indented\"},[_vm._v(\" \"+_vm._s(error.info)+\" \")]),_c('div',{staticClass:\"c-automator-docs-page__indented\"},[_c('i',[_vm._v(\"Suggested fix: \"+_vm._s(error.tip))])])])}),_c('i',[_vm._v(\" Note: Sometimes errors may cause the automator to be unable to scan the rest of the script properly. This may result in some errors \\\"disappearing\\\" due to other errors occurring in earlier lines, or errors in a command which has an inner block (eg. commands like IF or WHILE) causing errors to appear on correctly-formatted later commands. Additionally, some of the suggested fixes may be potentially misleading due to the cause of the error being unclear. \")])],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorErrorPage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorErrorPage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorErrorPage.vue?vue&type=template&id=c61501d4&scoped=true&\"\nimport script from \"./AutomatorErrorPage.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorErrorPage.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c61501d4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-docs-page\"},[_c('div',[_vm._v(\" This panel keeps a running event log of all the commands which the automator has recently executed, with a little extra info on some of the commands. It may be useful to help you find problems if you find your automator is getting stuck in certain spots. \"),_c('br'),_c('br'),_vm._v(\" While your settings are kept within your savefile, the actual events are not and will disappear on refresh. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Entry Sorting:\")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Oldest results first'),expression:\"'Oldest results first'\"}],staticClass:\"fa-angle-down\",class:_vm.buttonClassObject,style:(_vm.sortStyle(!_vm.newestFirst)),on:{\"click\":function($event){_vm.newestFirst = false}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Newest results first'),expression:\"'Newest results first'\"}],staticClass:\"fa-angle-up\",class:_vm.buttonClassObject,style:(_vm.sortStyle(_vm.newestFirst)),on:{\"click\":function($event){_vm.newestFirst = true}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.clearTooltip),expression:\"clearTooltip\"}],staticClass:\"fa-trash\",class:_vm.buttonClassObject,on:{\"click\":_vm.clearLog}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Clear event log every Reality'),expression:\"'Clear event log every Reality'\"}],staticClass:\"fa-eraser\",class:_vm.buttonClassObject,style:(_vm.clearRealityStyle()),on:{\"click\":function($event){_vm.clearOnReality = !_vm.clearOnReality}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Clear event log on script restart'),expression:\"'Clear event log on script restart'\"}],staticClass:\"fa-backspace\",class:_vm.buttonClassObject,style:(_vm.clearRestartStyle()),on:{\"click\":function($event){_vm.clearOnRestart = !_vm.clearOnRestart}}})]),_c('div',[_c('b',[_vm._v(\"Timestamp style:\")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('No timestamps'),expression:\"'No timestamps'\"}],staticClass:\"fa-ban\",class:_vm.buttonClassObject,style:(_vm.timestampStyle('DISABLED')),on:{\"click\":function($event){return _vm.setTimestampMode('DISABLED')}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Current time this Reality'),expression:\"'Current time this Reality'\"}],staticClass:\"fa-stopwatch\",class:_vm.buttonClassObject,style:(_vm.timestampStyle('THIS_REALITY')),on:{\"click\":function($event){return _vm.setTimestampMode('THIS_REALITY')}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Time elapsed since event'),expression:\"'Time elapsed since event'\"}],staticClass:\"fa-clock\",class:_vm.buttonClassObject,style:(_vm.timestampStyle('RELATIVE_NOW')),on:{\"click\":function($event){return _vm.setTimestampMode('RELATIVE_NOW')}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Time since last event'),expression:\"'Time since last event'\"}],staticClass:\"fa-arrow-left\",class:_vm.buttonClassObject,style:(_vm.timestampStyle('RELATIVE_PREV')),on:{\"click\":function($event){return _vm.setTimestampMode('RELATIVE_PREV')}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Date and time'),expression:\"'Date and time'\"}],staticClass:\"fa-user-clock\",class:_vm.buttonClassObject,style:(_vm.timestampStyle('DATE_TIME')),on:{\"click\":function($event){return _vm.setTimestampMode('DATE_TIME')}}})]),_vm._l((_vm.events),function(event,id){return _c('span',{key:id},[_c('b',[_vm._v(\"Line \"+_vm._s(event.line)+_vm._s(_vm.timestamp(event))+\":\")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Jump to line'),expression:\"'Jump to line'\"}],staticClass:\"fa-arrow-circle-right\",class:_vm.buttonClassObject,on:{\"click\":function($event){return _vm.scrollToLine(event.line)}}}),_c('div',{staticClass:\"c-automator-docs-page__indented\"},[_c('i',[_vm._v(_vm._s(event.message))])])])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorEventLog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorEventLog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorEventLog.vue?vue&type=template&id=5e0af30a&scoped=true&\"\nimport script from \"./AutomatorEventLog.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorEventLog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5e0af30a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{key:_vm.scripts.length},[_vm._l((_vm.scripts),function(script){return _c('div',{key:script.id,staticClass:\"l-script-option c-script-option-hover-effect\",class:_vm.labelClassObject(script.id),on:{\"click\":function($event){return _vm.changeScriptID(script.id)}}},[_vm._v(\" \"+_vm._s(_vm.dropdownLabel(script))+\" \")])}),(_vm.canMakeNewScript)?_c('div',{staticClass:\"l-create-script c-automator-docs-script-select c-script-option-hover-effect\",on:{\"click\":function($event){return _vm.createNewScript()}}},[_c('i',[_vm._v(\"Create a new script (You have \"+_vm._s(_vm.formatInt(_vm.scriptCount))+\" / \"+_vm._s(_vm.formatInt(_vm.maxScriptCount))+\")\")])]):_c('div',{staticClass:\"l-create-script c-automator-docs-script-select l-max-scripts\"},[_c('i',[_vm._v(\"You can only have \"+_vm._s(_vm.formatInt(_vm.maxScriptCount))+\" scripts!\")])])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorScriptDropdownEntryList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorScriptDropdownEntryList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorScriptDropdownEntryList.vue?vue&type=template&id=1d4a260f&scoped=true&\"\nimport script from \"./AutomatorScriptDropdownEntryList.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorScriptDropdownEntryList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorScriptDropdownEntryList.vue?vue&type=style&index=0&id=1d4a260f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1d4a260f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"root\",staticClass:\"l-expanding-control-box\",class:_vm.rootClassObject},[_c('div',{ref:\"container\",staticClass:\"l-expanding-control-box__container\",class:_vm.containerClassObject,style:(_vm.containerStyle),on:{\"transitionend\":_vm.transitionEnd,\"mouseenter\":_vm.mouseOn,\"mouseleave\":_vm.mouseOff}},[(!_vm.$slots.header)?_c('div',{ref:\"expandButton\",class:_vm.buttonClass,on:{\"click\":_vm.handleClick}},[_vm._v(\" \"+_vm._s(_vm.label)+\" \"),_c('span',{class:_vm.indicatorArrowClassObject},[_vm._v(\" ▼ \")])]):_c('div',{ref:\"expandButton\",on:{\"click\":_vm.handleClick}},[_vm._t(\"header\")],2),_c('div',{ref:\"dropdown\"},[_vm._t(\"dropdown\")],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExpandingControlBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExpandingControlBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ExpandingControlBox.vue?vue&type=template&id=3584cbe8&scoped=true&\"\nimport script from \"./ExpandingControlBox.vue?vue&type=script&lang=js&\"\nexport * from \"./ExpandingControlBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ExpandingControlBox.vue?vue&type=style&index=0&id=3584cbe8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3584cbe8\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDocs.vue?vue&type=template&id=192f8680&scoped=true&\"\nimport script from \"./AutomatorDocs.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDocs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDocs.vue?vue&type=style&index=0&id=192f8680&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"192f8680\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-select-theme\"},[_c('div',{staticClass:\"l-select-theme__inner\"},_vm._l((_vm.availableTypes),function(type){return _c('div',{key:type,staticClass:\"o-primary-btn l-select-theme__item c-select-theme__item\",on:{\"click\":function($event){return _vm.setType(type)}}},[_vm._v(\" \"+_vm._s(_vm.getType(type))+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectGlyphInfoDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectGlyphInfoDropdown.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SelectGlyphInfoDropdown.vue?vue&type=template&id=19e58774&\"\nimport script from \"./SelectGlyphInfoDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./SelectGlyphInfoDropdown.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Deepmerge library modified for Antimatter Dimensions usage (mainly Decimal integration)\r\n// Source: https://github.com/TehShrike/deepmerge\r\n\r\nfunction emptyTarget(val) {\r\n return Array.isArray(val) ? [] : {};\r\n}\r\n\r\nfunction cloneUnlessOtherwiseSpecified(value, options) {\r\n if (value instanceof Decimal) {\r\n return new Decimal(value);\r\n }\r\n if (value instanceof Set) {\r\n return new Set(value);\r\n }\r\n return (options.clone !== false && options.isMergeableObject(value))\r\n ? deepmerge(emptyTarget(value), value, options)\r\n : value;\r\n}\r\n\r\nfunction defaultArrayMerge(target, source, options) {\r\n return target.concat(source).map(element => cloneUnlessOtherwiseSpecified(element, options));\r\n}\r\n\r\nfunction mergeObject(target, source, options) {\r\n const destination = {};\r\n if (options.isMergeableObject(target)) {\r\n Object.keys(target).forEach(key => {\r\n destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\r\n });\r\n }\r\n Object.keys(source).forEach(key => {\r\n if (target[key] && target[key] instanceof Decimal) {\r\n destination[key] = new Decimal(source[key]);\r\n } else if (target[key] && target[key] instanceof Set) {\r\n destination[key] = new Set(source[key]);\r\n } else if (!options.isMergeableObject(source[key]) || !target[key]) {\r\n destination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\r\n } else {\r\n destination[key] = deepmerge(target[key], source[key], options);\r\n }\r\n });\r\n return destination;\r\n}\r\n\r\nexport function deepmerge(target, source, options = {}) {\r\n options.arrayMerge = options.arrayMerge || defaultArrayMerge;\r\n options.isMergeableObject = options.isMergeableObject || isMergeableObject;\r\n\r\n if (target instanceof Decimal) {\r\n return new Decimal(source);\r\n }\r\n\r\n if (target instanceof Set) {\r\n return new Set(source);\r\n }\r\n\r\n const sourceIsArray = Array.isArray(source);\r\n const targetIsArray = Array.isArray(target);\r\n const sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\r\n\r\n if (!sourceAndTargetTypesMatch) {\r\n return cloneUnlessOtherwiseSpecified(source, options);\r\n }\r\n\r\n if (sourceIsArray) {\r\n return options.arrayMerge(target, source, options);\r\n }\r\n\r\n return mergeObject(target, source, options);\r\n}\r\n\r\nexport function deepmergeAll(array, options) {\r\n if (!Array.isArray(array)) {\r\n throw new Error(\"first argument should be an array\");\r\n }\r\n\r\n if (!options) {\r\n // eslint-disable-next-line no-shadow\r\n const deepCloneMerge = (destinationArray, sourceArray, options) => sourceArray.map((element, index) => {\r\n if (destinationArray[index] && destinationArray[index] instanceof Decimal) {\r\n return new Decimal(element);\r\n }\r\n\r\n if (destinationArray[index] && destinationArray[index] instanceof Set) {\r\n return new Set(element);\r\n }\r\n\r\n if (!options.isMergeableObject(element) || !destinationArray[index]) {\r\n return cloneUnlessOtherwiseSpecified(element, options);\r\n }\r\n return deepmerge(destinationArray[index], element, options);\r\n\r\n });\r\n // eslint-disable-next-line no-param-reassign\r\n options = {\r\n arrayMerge: deepCloneMerge\r\n };\r\n }\r\n\r\n return array.reduce((prev, next) => deepmerge(prev, next, options), {});\r\n}\r\n\r\nfunction isMergeableObject(value) {\r\n return isNonNullObject(value) && !isSpecial(value);\r\n}\r\n\r\nfunction isNonNullObject(value) {\r\n return Boolean(value) && typeof value === \"object\";\r\n}\r\n\r\nfunction isSpecial(value) {\r\n const stringValue = Object.prototype.toString.call(value);\r\n return stringValue === \"[object RegExp]\" || stringValue === \"[object Date]\";\r\n}\r\n","import { AutomatorPanels } from \"@/components/tabs/automator/AutomatorDocs\";\r\nimport { GlyphInfo } from \"@/components/modals/options/SelectGlyphInfoDropdown\";\r\n\r\nimport { AUTOMATOR_MODE, AUTOMATOR_TYPE } from \"./automator/automator-backend\";\r\nimport { DC } from \"./constants\";\r\nimport { deepmergeAll } from \"@/utility/deepmerge\";\r\nimport { GlyphTypes } from \"./glyph-effects\";\r\nimport { Ra } from \"./globals\";\r\n\r\n// This is actually reassigned when importing saves\r\n// eslint-disable-next-line prefer-const\r\nwindow.player = {\r\n antimatter: DC.E1,\r\n dimensions: {\r\n antimatter: Array.range(0, 8).map(() => ({\r\n bought: 0,\r\n costBumps: 0,\r\n amount: DC.D0\r\n })),\r\n infinity: Array.range(0, 8).map(tier => ({\r\n isUnlocked: false,\r\n bought: 0,\r\n amount: DC.D0,\r\n cost: [DC.E8, DC.E9, DC.E10, DC.E20, DC.E140, DC.E200, DC.E250, DC.E280][tier],\r\n baseAmount: 0\r\n })),\r\n time: Array.range(0, 8).map(tier => ({\r\n cost: [DC.D1, DC.D5, DC.E2, DC.E3, DC.E2350, DC.E2650, DC.E3000, DC.E3350][tier],\r\n amount: DC.D0,\r\n bought: 0\r\n })),\r\n multiversal: Array.range(0, 8).map(tier => ({\r\n cost: [new Decimal(1e25), new Decimal(1e55), new Decimal(1e105), new Decimal(1e215), new Decimal(\"1e333\"), new Decimal(\"1e456\"), new Decimal(\"1e678\"), new Decimal(\"9.99e999\")][tier],\r\n amount: DC.D0,\r\n bought: 0\r\n }))\r\n },\r\n buyUntil10: true,\r\n sacrificed: DC.D0,\r\n achievementBits: Array.repeat(0, 17),\r\n secretAchievementBits: Array.repeat(0, 4),\r\n infinityUpgrades: new Set(),\r\n infinityRebuyables: [0, 0, 0],\r\n challenge: {\r\n normal: {\r\n current: 0,\r\n bestTimes: Array.repeat(Decimal.pow10(Number.MAX_VALUE), 11),\r\n completedBits: 0,\r\n },\r\n infinity: {\r\n current: 0,\r\n bestTimes: Array.repeat(Decimal.pow10(Number.MAX_VALUE), 8),\r\n completedBits: 0,\r\n },\r\n eternity: {\r\n current: 0,\r\n unlocked: 0,\r\n requirementBits: 0,\r\n }\r\n },\r\n infinity: {\r\n upgradeBits: 0\r\n },\r\n auto: {\r\n autobuyersOn: true,\r\n disableContinuum: false,\r\n mending: {\r\n mode: 0,\r\n amount: DC.D1,\r\n interval: 100,\r\n increaseWithMult: true,\r\n time: 1,\r\n xHighest: DC.D1,\r\n isActive: false,\r\n lastTick: 0\r\n },\r\n reality: {\r\n mode: 0,\r\n rm: DC.D1,\r\n glyph: 0,\r\n time: 0,\r\n shard: 0,\r\n isActive: false\r\n },\r\n eternity: {\r\n mode: 0,\r\n amount: DC.D1,\r\n increaseWithMult: true,\r\n time: 1,\r\n xHighest: DC.D1,\r\n isActive: false\r\n },\r\n bigCrunch: {\r\n cost: 1,\r\n interval: 150000,\r\n mode: 0,\r\n amount: DC.D1,\r\n increaseWithMult: true,\r\n time: 1,\r\n xHighest: DC.D1,\r\n isActive: true,\r\n lastTick: 0\r\n },\r\n galaxy: {\r\n cost: 1,\r\n interval: 20000,\r\n limitGalaxies: false,\r\n maxGalaxies: 1,\r\n buyMax: false,\r\n buyMaxInterval: 0,\r\n isActive: true,\r\n lastTick: 0\r\n },\r\n dimBoost: {\r\n cost: 1,\r\n interval: 4000,\r\n limitDimBoosts: false,\r\n maxDimBoosts: 1,\r\n limitUntilGalaxies: false,\r\n galaxies: 10,\r\n buyMaxInterval: 0,\r\n isActive: true,\r\n lastTick: 0\r\n },\r\n tickspeed: {\r\n isUnlocked: false,\r\n cost: 1,\r\n interval: 500,\r\n mode: AUTOBUYER_MODE.BUY_SINGLE,\r\n isActive: true,\r\n lastTick: 0,\r\n isBought: false\r\n },\r\n singCap: {\r\n multiplier: 1000,\r\n isActive: true\r\n },\r\n sacrifice: {\r\n multiplier: DC.D2,\r\n isActive: true\r\n },\r\n tesseract: {\r\n isUnlocked: false,\r\n isActive: true,\r\n },\r\n musicglyph: {\r\n isUnlocked: false,\r\n isActive: true,\r\n },\r\n nrru: {\r\n isUnlocked: false,\r\n isActive: true,\r\n },\r\n nriu: {\r\n isUnlocked: false,\r\n isActive: true,\r\n },\r\n antimatterDims: {\r\n all: Array.range(0, 8).map(tier => ({\r\n isUnlocked: false,\r\n cost: 1,\r\n interval: [500, 600, 700, 800, 900, 1000, 1100, 1200][tier],\r\n bulk: 1,\r\n mode: AUTOBUYER_MODE.BUY_10,\r\n isActive: true,\r\n lastTick: 0,\r\n isBought: false\r\n })),\r\n isActive: true,\r\n },\r\n infinityDims: {\r\n all: Array.range(0, 8).map(() => ({\r\n isActive: false,\r\n lastTick: 0,\r\n })),\r\n isActive: true,\r\n },\r\n timeDims: {\r\n all: Array.range(0, 8).map(() => ({\r\n isActive: false,\r\n lastTick: 0,\r\n })),\r\n isActive: true,\r\n },\r\n replicantiGalaxies: {\r\n isActive: false,\r\n },\r\n replicantiUpgrades: {\r\n all: Array.range(0, 3).map(() => ({\r\n isActive: false,\r\n lastTick: 0,\r\n })),\r\n isActive: true,\r\n },\r\n timeTheorems: {\r\n isActive: false,\r\n },\r\n dilationUpgrades: {\r\n all: Array.range(0, 3).concat(Array.range(11, 14)).map(() => ({\r\n isActive: false,\r\n lastTick: 0,\r\n })),\r\n isActive: true,\r\n },\r\n blackHolePower: {\r\n all: Array.range(0, 2).map(() => ({\r\n isActive: false,\r\n })),\r\n isActive: true,\r\n },\r\n expoBlackHolePower: {\r\n all: Array.range(0, 1).map(() => ({\r\n isActive: false,\r\n })),\r\n isActive: true,\r\n },\r\n realityUpgrades: {\r\n all: Array.range(0, 5).map(() => ({\r\n isActive: false,\r\n })),\r\n isActive: true,\r\n },\r\n imaginaryUpgrades: {\r\n all: Array.range(0, 10).map(() => ({\r\n isActive: false,\r\n })),\r\n isActive: true,\r\n },\r\n pets: {\r\n teresa: {\r\n upgrades: Array.range(0, 3).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n effarig: {\r\n upgrades: Array.range(0, 3).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n enslaved: {\r\n upgrades: Array.range(0, 3).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n v: {\r\n upgrades: Array.range(0, 3).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n ra: {\r\n upgrades: Array.range(0, 3).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n laitela: {\r\n upgrades: Array.range(0, 7).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n pelle: {\r\n upgrades: Array.range(0, 3).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n },\r\n darkMatterDims: {\r\n isActive: false,\r\n lastTick: 0,\r\n },\r\n ascension: {\r\n isActive: false,\r\n lastTick: 0,\r\n },\r\n annihilation: {\r\n isActive: false,\r\n multiplier: 1.05,\r\n },\r\n singularity: { isActive: false },\r\n ipMultBuyer: { isActive: false, },\r\n epMultBuyer: { isActive: false, },\r\n nrru :{\r\n isActive: false,\r\n lastTick: 0\r\n },\r\n nriu: {\r\n isActive: false,\r\n lastTick: 0\r\n },\r\n pelleRebuyableUpgrades: {\r\n all: Array.range(0, 5).map(() => ({\r\n isActive: false,\r\n })),\r\n isActive: true,\r\n },\r\n pelleUpgrades: { isActive: false },\r\n galgenUpgrades: {\r\n all: Array.range(0, 5).map(() => ({\r\n isActive: false,\r\n })),\r\n isActive: true,\r\n },\r\n galgenSac: { isActive: false },\r\n },\r\n infinityPoints: DC.D0,\r\n infinities: DC.D0,\r\n infinitiesBanked: DC.D0,\r\n dimensionBoosts: 0,\r\n galaxies: 0,\r\n news: {\r\n // This is properly handled in NewsHandler.addSeenNews which adds properties as needed\r\n seen: {},\r\n specialTickerData: {\r\n uselessNewsClicks: 0,\r\n paperclips: 0,\r\n newsQueuePosition: 1000,\r\n eiffelTowerChapter: 0\r\n },\r\n totalSeen: 0,\r\n },\r\n lastUpdate: new Date().getTime(),\r\n backupTimer: 0,\r\n chall2Pow: 1,\r\n chall3Pow: DC.D0_01,\r\n matter: DC.D1,\r\n chall9TickspeedCostBumps: 0,\r\n chall8TotalSacrifice: DC.D1,\r\n ic2Count: 0,\r\n partInfinityPoint: 0,\r\n partInfinitied: 0,\r\n break: false,\r\n secretUnlocks: {\r\n themes: new Set(),\r\n viewSecretTS: false,\r\n cancerAchievements: false,\r\n },\r\n shownRuns: {\r\n Reality: true,\r\n Eternity: true,\r\n Infinity: true\r\n },\r\n requirementChecks: {\r\n infinity: {\r\n maxAll: false,\r\n noSacrifice: true,\r\n noAD8: true,\r\n },\r\n eternity: {\r\n onlyAD1: true,\r\n onlyAD8: true,\r\n noAD1: true,\r\n noRG: true,\r\n },\r\n reality: {\r\n noAM: true,\r\n noTriads: true,\r\n noTriad305: true,\r\n noTriad307: true,\r\n noPurchasedTT: true,\r\n noInfinities: true,\r\n noEternities: true,\r\n noContinuum: true,\r\n maxID1: DC.D0,\r\n maxStudies: 0,\r\n maxGlyphs: 0,\r\n slowestBH: 1,\r\n },\r\n mending:{\r\n isEnd: false,\r\n mmeleven: 8\r\n },\r\n permanent: {\r\n emojiGalaxies: 0,\r\n singleTickspeed: 0,\r\n perkTreeDragging: 0\r\n }\r\n },\r\n records: {\r\n gameCreatedTime: Date.now(),\r\n totalTimePlayed: DC.D0,\r\n timePlayedAtBHUnlock: DC.D0,\r\n realTimePlayed: 0,\r\n realTimeDoomed: 0,\r\n fullGameCompletions: 0,\r\n previousRunRealTime: 0,\r\n totalAntimatter: DC.E1,\r\n recentInfinities: Array.range(0, 10).map(() =>\r\n [Decimal.pow10(Number.MAX_VALUE), Number.MAX_VALUE, DC.D1, DC.D1, \"\"]),\r\n recentEternities: Array.range(0, 10).map(() =>\r\n [Decimal.pow10(Number.MAX_VALUE), Number.MAX_VALUE, DC.D1, DC.D1, \"\", DC.D0]),\r\n recentRealities: Array.range(0, 10).map(() =>\r\n [Decimal.pow10(Number.MAX_VALUE), Number.MAX_VALUE, DC.D1, 1, \"\", 0, 0]),\r\n thisInfinity: {\r\n time: DC.D0,\r\n realTime: 0,\r\n lastBuyTime: DC.D0,\r\n maxAM: DC.D0,\r\n bestIPmin: DC.D0,\r\n bestIPminVal: DC.D0,\r\n },\r\n bestInfinity: {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n bestIPminEternity: DC.D0,\r\n bestIPminReality: DC.D0,\r\n },\r\n thisEternity: {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n bestIPMsWithoutMaxAll: DC.D0,\r\n bestEPmin: DC.D0,\r\n bestEPminVal: DC.D0,\r\n bestInfinitiesPerMs: DC.D0,\r\n },\r\n bestEternity: {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n bestEPminReality: DC.D0,\r\n },\r\n thisReality: {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n maxEP: DC.D0,\r\n bestEternitiesPerMs: DC.D0,\r\n maxReplicanti: DC.D0,\r\n maxDT: DC.D0,\r\n bestRSmin: DC.D0,\r\n bestRSminVal: DC.D0,\r\n remWithoutGG: 0\r\n },\r\n bestReality: {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n glyphStrength: 0,\r\n RM: DC.D0,\r\n RMSet: [],\r\n RMmin: DC.D0,\r\n RMminSet: [],\r\n glyphLevel: 0,\r\n glyphLevelSet: [],\r\n bestEP: DC.D0,\r\n bestEPSet: [],\r\n speedSet: [],\r\n iMCapSet: [],\r\n laitelaSet: [],\r\n remWithoutGG: 0\r\n },\r\n thisMend: {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n maxEP: DC.D0,\r\n maxRM: DC.D0,\r\n maxiM: 0,\r\n maxRem: 0,\r\n },\r\n bestMend: {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n }\r\n },\r\n speedrun: {\r\n isUnlocked: true,\r\n isActive: false,\r\n isSegmented: false,\r\n usedSTD: false,\r\n hasStarted: false,\r\n hideInfo: false,\r\n displayAllMilestones: false,\r\n startDate: 0,\r\n name: \"\",\r\n offlineTimeUsed: 0,\r\n // One spot for every entry in GameDatabase.speedrunMilestones (note: 1-indexed)\r\n records: Array.repeat(0, 26),\r\n achievementTimes: {},\r\n seedSelection: SPEEDRUN_SEED_STATE.FIXED,\r\n initialSeed: 0,\r\n previousRuns: {}\r\n },\r\n IPMultPurchases: 0,\r\n version: 58,\r\n infinityPower: DC.D1,\r\n postC4Tier: 0,\r\n eternityPoints: DC.D0,\r\n eternities: DC.D0,\r\n eternityUpgrades: new Set(),\r\n epmultUpgrades: 0,\r\n timeShards: DC.D0,\r\n totalTickGained: 0,\r\n totalTickBought: 0,\r\n mends: DC.D0,\r\n corruptedFragments: DC.D0,\r\n galBoostPoints: DC.D0,\r\n mending:{\r\n upgradeBits: 0,\r\n warpUpgradeBits: 0,\r\n corruptionUpgradeBits: 0,\r\n corruptionUpgReqs: 0,\r\n warpUpgReqs: 0,\r\n reqLock: {\r\n mending: 0,\r\n warp: 0,\r\n corruption: 0,\r\n },\r\n rebuyables: {\r\n 1: 0,\r\n 6: 0,\r\n 11: 0,\r\n 16: 0,\r\n },\r\n warpRebuyables: {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n },\r\n corruptionRebuyables: {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n },\r\n corruption: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], //There are 10 here incase we want to add more, only the first 5 are currently used.\r\n corruptedFragments: 0,\r\n corruptionChallenge: {\r\n corruptedMend: false,\r\n records: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n recordScore: 0,\r\n },\r\n spentCF: 0,\r\n corruptNext: false,\r\n },\r\n replicanti: {\r\n unl: false,\r\n amount: DC.D0,\r\n chance: 0.01,\r\n chanceCost: DC.E150,\r\n interval: DC.E3,\r\n intervalCost: DC.E140,\r\n boughtGalaxyCap: 0,\r\n galaxies: 0,\r\n galCost: DC.E170,\r\n },\r\n timestudy: {\r\n theorem: DC.D0,\r\n maxTheorem: DC.D0,\r\n amBought: 0,\r\n ipBought: 0,\r\n epBought: 0,\r\n studies: [],\r\n shopMinimized: false,\r\n preferredPaths: [[], 0],\r\n presets: new Array(6).fill({\r\n name: \"\",\r\n studies: \"\",\r\n }),\r\n },\r\n eternityChalls: {},\r\n respec: false,\r\n eterc8ids: 50,\r\n eterc8repl: 40,\r\n dilation: {\r\n studies: [],\r\n active: false,\r\n tachyonParticles: DC.D0,\r\n dilatedTime: DC.D0,\r\n nextThreshold: DC.E3,\r\n baseTachyonGalaxies: 0,\r\n totalTachyonGalaxies: 0,\r\n upgrades: new Set(),\r\n rebuyables: {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 11: 0,\r\n 12: 0,\r\n 13: 0,\r\n },\r\n lastEP: DC.DM1,\r\n },\r\n realities: 0,\r\n partSimulatedReality: 0,\r\n reality: {\r\n warped: false,\r\n realityMachines: DC.D0,\r\n maxRM: DC.D0,\r\n imaginaryMachines: 0,\r\n iMCap: 0,\r\n glyphs: {\r\n active: [],\r\n inventory: [],\r\n sac: {\r\n power: DC.D0,\r\n infinity: DC.D0,\r\n time: DC.D0,\r\n replication: DC.D0,\r\n dilation: DC.D0,\r\n effarig: DC.D0,\r\n reality: DC.D0\r\n },\r\n undo: [],\r\n sets: new Array(7).fill({\r\n name: \"\",\r\n glyphs: [],\r\n }),\r\n protectedRows: 2,\r\n filter: {\r\n select: AUTO_GLYPH_SCORE.LOWEST_SACRIFICE,\r\n trash: AUTO_GLYPH_REJECT.SACRIFICE,\r\n simple: 0,\r\n types: GlyphTypes.list\r\n .filter(t => ALCHEMY_BASIC_GLYPH_TYPES.includes(t.id))\r\n .mapToObject(t => t.id, t => ({\r\n rarity: 0,\r\n score: 0,\r\n effectCount: 0,\r\n specifiedMask: 0,\r\n effectScores: Array.repeat(0, t.effects.length),\r\n })),\r\n },\r\n createdRealityGlyph: false,\r\n cosmetics: {\r\n active: false,\r\n glowNotification: false,\r\n unlockedFromNG: [],\r\n symbolMap: {},\r\n colorMap: {},\r\n }\r\n },\r\n initialSeed: Math.floor(Date.now() * Math.random() + 1),\r\n // The seed value should get set from initialSeed upon unlocking reality, but we set it to 1 as a fallback in\r\n // case somehow it doesn't get set properly. Do not change this to 0, as a seed of 0 causes the game to hang\r\n seed: 1,\r\n secondGaussian: 1e6,\r\n musicSeed: Math.floor(Date.now() * Math.random() + 0xBCDDECCB),\r\n musicSecondGaussian: 1e6,\r\n rebuyables: {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n },\r\n upgradeBits: 0,\r\n upgReqs: 0,\r\n imaginaryUpgradeBits: 0,\r\n imaginaryUpgReqs: 0,\r\n imaginaryRebuyables: {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n 6: 0,\r\n 7: 0,\r\n 8: 0,\r\n 9: 0,\r\n 10: 0,\r\n },\r\n reqLock: {\r\n reality: 0,\r\n imaginary: 0,\r\n },\r\n perks: new Set(),\r\n respec: false,\r\n showGlyphSacrifice: false,\r\n showSidebarPanel: GLYPH_SIDEBAR_MODE.INVENTORY_MANAGEMENT,\r\n autoSort: 0,\r\n autoCollapse: false,\r\n autoAutoClean: false,\r\n applyFilterToPurge: false,\r\n autoEquip: 0,\r\n moveGlyphsOnProtection: false,\r\n perkPoints: 0,\r\n unlockedEC: 0,\r\n autoEC: true,\r\n lastAutoEC: 0,\r\n partEternitied: DC.D0,\r\n autoAchieve: true,\r\n gainedAutoAchievements: true,\r\n automator: {\r\n state: {\r\n mode: AUTOMATOR_MODE.STOP,\r\n topLevelScript: 0,\r\n editorScript: 0,\r\n repeat: true,\r\n forceRestart: true,\r\n followExecution: true,\r\n stack: [],\r\n },\r\n scripts: {\r\n },\r\n constants: {},\r\n constantSortOrder: [],\r\n execTimer: 0,\r\n type: AUTOMATOR_TYPE.TEXT,\r\n forceUnlock: false,\r\n currentInfoPane: AutomatorPanels.INTRO_PAGE,\r\n },\r\n achTimer: DC.D0,\r\n hasCheckedFilter: false,\r\n },\r\n blackHole: Array.range(0, 2).map(id => ({\r\n id,\r\n intervalUpgrades: 0,\r\n powerUpgrades: 0,\r\n durationUpgrades: 0,\r\n phase: 0,\r\n active: false,\r\n unlocked: false,\r\n activations: 0,\r\n })),\r\n blackHolePause: false,\r\n blackHoleAutoPauseMode: 0,\r\n blackHolePauseTime: 0,\r\n blackHoleNegative: 1,\r\n expoBlackHole: Array.range(0, 1).map(id => ({\r\n id,\r\n intervalUpgrades: 0,\r\n powerUpgrades: 0,\r\n durationUpgrades: 0,\r\n phase: 0,\r\n active: false,\r\n unlocked: false,\r\n activations: 0,\r\n })),\r\n expoBlackHolePause: false,\r\n expoBlackHoleAutoPauseMode: 0,\r\n expoBlackHolePauseTime: 0,\r\n expoBlackHoleNegative: 1,\r\n celestials: {\r\n teresa: {\r\n pouredAmount: 0,\r\n quoteBits: 0,\r\n unlockBits: 0,\r\n run: false,\r\n bestRunAM: DC.D1,\r\n bestAMSet: [],\r\n perkShop: Array.repeat(0, 5),\r\n lastRepeatedMachines: DC.D0\r\n },\r\n effarig: {\r\n relicShards: DC.D0,\r\n unlockBits: 0,\r\n run: false,\r\n quoteBits: 0,\r\n glyphWeights: {\r\n ep: 25,\r\n repl: 25,\r\n dt: 25,\r\n eternities: 25\r\n },\r\n autoAdjustGlyphWeights: false,\r\n },\r\n enslaved: {\r\n isStoring: false,\r\n stored: DC.D0,\r\n isStoringReal: false,\r\n storedReal: 0,\r\n autoStoreReal: false,\r\n isAutoReleasing: false,\r\n quoteBits: 0,\r\n unlocks: [],\r\n run: false,\r\n completed: false,\r\n tesseracts: 0,\r\n hasSecretStudy: false,\r\n feltEternity: false,\r\n progressBits: 0,\r\n hintBits: 0,\r\n hintUnlockProgress: 0,\r\n glyphHintsGiven: 0,\r\n zeroHintTime: 0\r\n },\r\n v: {\r\n unlockBits: 0,\r\n run: false,\r\n superrun: false,\r\n beingInitialized: false,\r\n quoteBits: 0,\r\n runUnlocks: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n goalReductionSteps: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n STSpent: 0,\r\n runGlyphs: [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []],\r\n // The -10 is for glyph count, as glyph count for V is stored internally as a negative number\r\n runRecords: [-10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n flip: V_FLIP.NORMAL,\r\n },\r\n ra: {\r\n pets: {\r\n teresa: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n },\r\n effarig: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n },\r\n enslaved: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n },\r\n v: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n },\r\n ra: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n },\r\n laitela: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n },\r\n pelle: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n }\r\n },\r\n alchemy: Array.repeat(0, 21)\r\n .map(() => ({\r\n amount: 0,\r\n reaction: false\r\n })),\r\n highestRefinementValue: {\r\n power: 0,\r\n infinity: 0,\r\n time: 0,\r\n replication: 0,\r\n dilation: 0,\r\n effarig: 0\r\n },\r\n quoteBits: 0,\r\n momentumTime: 0,\r\n unlockBits: 0,\r\n raPoints: DC.D0,\r\n modUnlockBits: [0, 0, 0],\r\n run: false,\r\n charged: new Set(),\r\n disCharge: false,\r\n breakCharged: new Set(),\r\n breakDischarge: false,\r\n peakGamespeed: DC.D1,\r\n petWithRemembrance: \"\",\r\n upgrades: new Set(),\r\n rebuyables: {\r\n weakenTeresaScaling: 0,\r\n weakenEffarigScaling: 0,\r\n weakenEnslavedScaling: 0,\r\n weakenVScaling: 0,\r\n weakenRaScaling: 0,\r\n weakenLaitelaScaling: 0,\r\n weakenPelleScaling: 0,\r\n incTeresaXPGain: 0,\r\n incEffarigXPGain: 0,\r\n incEnslavedXPGain: 0,\r\n incVXPGain: 0,\r\n incRaXPGain: 0,\r\n incLaitelaXPGain: 0,\r\n incPelleXPGain: 0,\r\n },\r\n /* rebuyables: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], */\r\n permanentMemories: {\r\n ra2: false,\r\n lai50: false,\r\n lai65: false,\r\n },\r\n },\r\n laitela: {\r\n darkMatter: DC.D0,\r\n maxDarkMatter: DC.D1,\r\n run: false,\r\n quoteBits: 0,\r\n dimensions: Array.range(0, 8).map(() =>\r\n ({\r\n amount: DC.D1,\r\n intervalUpgrades: 0,\r\n powerDMUpgrades: 0,\r\n powerDEUpgrades: 0,\r\n timeSinceLastUpdate: 0,\r\n ascensionCount: 0\r\n })),\r\n entropy: 0,\r\n thisCompletion: 3600,\r\n fastestCompletion: 3600,\r\n difficultyTier: 0,\r\n upgrades: {},\r\n darkMatterMult: 1,\r\n darkEnergy: 0,\r\n singularitySorting: {\r\n displayResource: 0,\r\n sortResource: 0,\r\n showCompleted: 0,\r\n sortOrder: 0,\r\n },\r\n singularities: 0,\r\n singularityCapIncreases: 0,\r\n lastCheckedMilestones: 0,\r\n milestoneGlow: true,\r\n isHoldingLClick: false,\r\n holdStart: 0,\r\n heldTier: 0,\r\n heldType: \"\",\r\n },\r\n pelle: {\r\n doomed: false,\r\n upgrades: new Set(),\r\n remnants: 0,\r\n realityShards: DC.D0,\r\n records: {\r\n totalAntimatter: DC.D0,\r\n totalInfinityPoints: DC.D0,\r\n totalEternityPoints: DC.D0,\r\n },\r\n rebuyables: {\r\n antimatterDimensionMult: 0,\r\n timeSpeedMult: 0,\r\n glyphLevels: 0,\r\n infConversion: 0,\r\n galaxyPower: 0,\r\n galaxyGeneratorAdditive: 0,\r\n galaxyGeneratorMultiplicative: 0,\r\n galaxyGeneratorAntimatterMult: 0,\r\n galaxyGeneratorIPMult: 0,\r\n galaxyGeneratorEPMult: 0,\r\n },\r\n rifts: {\r\n vacuum: {\r\n fill: DC.D0,\r\n active: false,\r\n reducedTo: 1\r\n },\r\n decay: {\r\n fill: DC.D0,\r\n active: false,\r\n percentageSpent: 0,\r\n reducedTo: 1\r\n },\r\n chaos: {\r\n fill: 0,\r\n active: false,\r\n reducedTo: 1\r\n },\r\n recursion: {\r\n fill: DC.D0,\r\n active: false,\r\n reducedTo: 1\r\n },\r\n paradox: {\r\n fill: DC.D0,\r\n active: false,\r\n reducedTo: 1\r\n }\r\n },\r\n progressBits: 0,\r\n galaxyGenerator: {\r\n unlocked: false,\r\n spentGalaxies: 0,\r\n generatedGalaxies: 0,\r\n phase: 0,\r\n sacrificeActive: false\r\n },\r\n quoteBits: 0,\r\n collapsed: {\r\n upgrades: false,\r\n rifts: false,\r\n galaxies: false\r\n },\r\n showBought: false,\r\n },\r\n destroyer:{\r\n quoteBits: 0,\r\n },\r\n kohler:{\r\n run: false,\r\n quoteBits: 0,\r\n unlockProgress: 0,\r\n unlockMilestone: [false,false,false,false,false,false,false]\r\n }\r\n },\r\n isGameEnd: false,\r\n tabNotifications: new Set(),\r\n triggeredTabNotificationBits: 0,\r\n tutorialState: 0,\r\n tutorialActive: true,\r\n options: {\r\n news: {\r\n enabled: true,\r\n repeatBuffer: 40,\r\n AIChance: 0,\r\n speed: 1,\r\n includeAnimated: true,\r\n },\r\n notation: \"Mixed scientific\",\r\n retryChallenge: false,\r\n retryCelestial: false,\r\n showAllChallenges: false,\r\n cloudEnabled: true,\r\n hideGoogleName: false,\r\n showCloudModal: true,\r\n forceCloudOverwrite: false,\r\n syncSaveIntervals: true,\r\n hotkeys: true,\r\n themeClassic: \"Normal\",\r\n themeModern: \"Normal\",\r\n themeSynergism: \"Normal\",\r\n commas: true,\r\n updateRate: 33,\r\n UIType: \"Modern\",\r\n offlineProgress: true,\r\n loadBackupWithoutOffline: false,\r\n automaticTabSwitching: true,\r\n respecIntoProtected: false,\r\n offlineTicks: 1e5,\r\n hibernationCatchup: true,\r\n statTabResources: 0,\r\n multiplierTab: {\r\n currTab: 0,\r\n showAltGroup: false,\r\n replacePowers: false,\r\n },\r\n autosaveInterval: 30000,\r\n showTimeSinceSave: true,\r\n saveFileName: \"\",\r\n exportedFileCount: 0,\r\n hideCompletedAchievementRows: false,\r\n glyphTextColors: true,\r\n headerTextColored: false,\r\n showNewGlyphIcon: true,\r\n showUnequippedGlyphIcon: true,\r\n highContrastRarity: false,\r\n swapGlyphColors: false,\r\n hideAlterationEffects: false,\r\n ignoreGlyphEffects: false,\r\n ignoreGlyphLevel: false,\r\n ignoreGlyphRarity: false,\r\n glyphBG: GLYPH_BG_SETTING.AUTO,\r\n glyphBorders: true,\r\n showHintText: {\r\n showPercentage: true,\r\n achievements: true,\r\n achievementUnlockStates: true,\r\n challenges: true,\r\n studies: true,\r\n glyphEffectDots: true,\r\n realityUpgrades: true,\r\n mendingUpgrades: true,\r\n perks: true,\r\n alchemy: true,\r\n glyphInfoType: GlyphInfo.types.NONE,\r\n showGlyphInfoByDefault: false,\r\n },\r\n animations: {\r\n bigCrunch: true,\r\n eternity: true,\r\n dilation: true,\r\n tachyonParticles: true,\r\n reality: true,\r\n background: true,\r\n blobSnowflakes: 16\r\n },\r\n confirmations: {\r\n armageddon: true,\r\n sacrifice: true,\r\n challenges: true,\r\n exitChallenge: true,\r\n eternity: true,\r\n dilation: true,\r\n resetReality: true,\r\n glyphReplace: true,\r\n glyphSacrifice: true,\r\n autoClean: true,\r\n sacrificeAll: true,\r\n glyphSelection: true,\r\n glyphUndo: true,\r\n deleteGlyphSetSave: true,\r\n glyphRefine: true,\r\n bigCrunch: true,\r\n replicantiGalaxy: true,\r\n antimatterGalaxy: true,\r\n dimensionBoost: true,\r\n switchAutomatorMode: true,\r\n respecIAP: true,\r\n mending: true\r\n },\r\n awayProgress: {\r\n antimatter: true,\r\n dimensionBoosts: true,\r\n antimatterGalaxies: true,\r\n infinities: true,\r\n infinityPoints: true,\r\n replicanti: true,\r\n replicantiGalaxies: true,\r\n eternities: true,\r\n eternityPoints: true,\r\n tachyonParticles: true,\r\n dilatedTime: true,\r\n tachyonGalaxies: true,\r\n timeTheorems: true,\r\n achievementCount: true,\r\n realities: true,\r\n realityMachines: true,\r\n imaginaryMachines: true,\r\n relicShards: true,\r\n darkMatter: true,\r\n darkEnergy: true,\r\n singularities: true,\r\n celestialMemories: true,\r\n blackHole: true,\r\n realityShards: true,\r\n mends: true,\r\n mendingPoints: true\r\n },\r\n hiddenTabBits: 0,\r\n hiddenSubtabBits: Array.repeat(0, 11),\r\n lastOpenTab: 0,\r\n lastOpenSubtab: Array.repeat(0, 11),\r\n perkLayout: 0,\r\n perkPhysicsEnabled: true,\r\n automatorEvents: {\r\n newestFirst: false,\r\n timestampType: 0,\r\n maxEntries: 200,\r\n clearOnReality: true,\r\n clearOnRestart: true,\r\n },\r\n invertTTgenDisplay: false,\r\n autoRealityForFilter: false,\r\n },\r\n IAP: {\r\n enabled: false,\r\n checkoutSession: {\r\n id: false,\r\n }\r\n },\r\n mendingPoints: DC.D0,\r\n mends: DC.D0,\r\n mendingUpgrades: new Set(),\r\n mvrmultUpgrades: 0,\r\n devSave: true\r\n};\r\n\r\nexport const Player = {\r\n defaultStart: deepmergeAll([{}, player]),\r\n\r\n get isInMatterChallenge() {\r\n return NormalChallenge(11).isRunning || InfinityChallenge(6).isRunning;\r\n },\r\n\r\n get isInAntimatterChallenge() {\r\n return NormalChallenge.isRunning || InfinityChallenge.isRunning;\r\n },\r\n\r\n get antimatterChallenge() {\r\n return NormalChallenge.current || InfinityChallenge.current;\r\n },\r\n\r\n get isInAnyChallenge() {\r\n return this.isInAntimatterChallenge || EternityChallenge.isRunning;\r\n },\r\n\r\n get anyChallenge() {\r\n return this.antimatterChallenge || EternityChallenge.current;\r\n },\r\n\r\n get canCrunch() {\r\n if (Enslaved.isRunning && Enslaved.BROKEN_CHALLENGES.includes(NormalChallenge.current?.id)) return false;\r\n const challenge = NormalChallenge.current || InfinityChallenge.current;\r\n const goal = challenge === undefined ? Decimal.NUMBER_MAX_VALUE : challenge.goal;\r\n return player.records.thisInfinity.maxAM.gte(goal);\r\n },\r\n\r\n get canEternity() {\r\n return player.records.thisEternity.maxIP.gte(Player.eternityGoal);\r\n },\r\n get canMend(){\r\n return (Ra.unlocks.exitDoom.isUnlocked ? Pelle.isDoomed : player.isGameEnd) || (MendingMilestone.six.isReached && player.antimatter.exponent >= 9e15);\r\n },\r\n get bestRunIPPM() {\r\n return GameCache.bestRunIPPM.value;\r\n },\r\n\r\n get averageRealTimePerEternity() {\r\n return GameCache.averageRealTimePerEternity.value;\r\n },\r\n\r\n get tickSpeedMultDecrease() {\r\n return GameCache.tickSpeedMultDecrease.value;\r\n },\r\n\r\n get dimensionMultDecrease() {\r\n return GameCache.dimensionMultDecrease.value;\r\n },\r\n\r\n get infinityGoal() {\r\n const challenge = NormalChallenge.current || InfinityChallenge.current;\r\n return challenge === undefined ? Decimal.NUMBER_MAX_VALUE : challenge.goal;\r\n },\r\n\r\n get infinityLimit() {\r\n const challenge = NormalChallenge.current || InfinityChallenge.current;\r\n if ((Pelle.isDoomed && Pelle.hasGalaxyGenerator) || !player.reality.warped) return challenge === undefined ? Decimal.MAX_VALUE : challenge.goal;\r\n return challenge === undefined ? DC.WARP_LIMIT : challenge.goal;\r\n },\r\n\r\n get eternityGoal() {\r\n return EternityChallenge.isRunning\r\n ? EternityChallenge.current.currentGoal\r\n : requiredIPForEP(1);\r\n },\r\n\r\n get automatorUnlocked() {\r\n return AutomatorPoints.totalPoints >= AutomatorPoints.pointsForAutomator || player.reality.automator.forceUnlock;\r\n },\r\n\r\n resetRequirements(key) {\r\n const glyphCount = player.requirementChecks.reality.maxGlyphs;\r\n // This switch case intentionally falls through because every lower layer should be reset as well\r\n switch (key) {\r\n case \"mending\":\r\n player.requirementChecks.mending = {\r\n noAM: true,\r\n mmeleven: 8,\r\n }\r\n case \"reality\":\r\n player.requirementChecks.reality = {\r\n noAM: true,\r\n noTriads: true,\r\n noTriad305: true,\r\n noTriad307: true,\r\n noPurchasedTT: true,\r\n // Note that these two checks below are only used in row 2, which is in principle always before the \"flow\"\r\n // upgrades in row 3 which passively generate infinities/eternities. These upgrades won't cause a lockout\r\n // as these requirements are only invalidated on manual infinities or eternities.\r\n noInfinities: true,\r\n noEternities: true,\r\n noContinuum: player.auto.disableContinuum,\r\n maxID1: DC.D0,\r\n maxStudies: 0,\r\n // This only gets set to the correct value when Glyphs.updateMaxGlyphCount is called, which always happens\r\n // before this part of the code is reached in the Reality reset. Nevertheless, we want to keep its old value.\r\n maxGlyphs: glyphCount,\r\n slowestBH: BlackHoles.areNegative ? player.blackHoleNegative : 1,\r\n };\r\n // eslint-disable-next-line no-fallthrough\r\n case \"eternity\":\r\n player.requirementChecks.eternity = {\r\n onlyAD1: true,\r\n onlyAD8: true,\r\n noAD1: true,\r\n noRG: true,\r\n };\r\n // eslint-disable-next-line no-fallthrough\r\n case \"infinity\":\r\n player.requirementChecks.infinity = {\r\n maxAll: false,\r\n noSacrifice: true,\r\n noAD8: true,\r\n };\r\n break;\r\n default:\r\n throw Error(\"Unrecognized prestige layer for requirement reset\");\r\n }\r\n }\r\n};\r\n\r\nexport function guardFromNaNValues(obj) {\r\n function isObject(ob) {\r\n return ob !== null && typeof ob === \"object\" && !(ob instanceof Decimal);\r\n }\r\n\r\n for (const key in obj) {\r\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\r\n\r\n if (key === \"automator\") continue;\r\n\r\n let value = obj[key];\r\n if (isObject(value)) {\r\n guardFromNaNValues(value);\r\n continue;\r\n }\r\n\r\n if (typeof value === \"number\") {\r\n Object.defineProperty(obj, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: () => value,\r\n set: function guardedSetter(newValue) {\r\n if (newValue === null || newValue === undefined) {\r\n throw new Error(\"null/undefined player property assignment\");\r\n }\r\n if (typeof newValue !== \"number\") {\r\n throw new Error(\"Non-Number assignment to Number player property\");\r\n }\r\n if (!isFinite(newValue)) {\r\n throw new Error(\"NaN player property assignment\");\r\n }\r\n value = newValue;\r\n }\r\n });\r\n }\r\n\r\n if (value instanceof Decimal) {\r\n Object.defineProperty(obj, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: () => value,\r\n set: function guardedSetter(newValue) {\r\n if (newValue === null || newValue === undefined) {\r\n throw new Error(\"null/undefined player property assignment\");\r\n }\r\n if (!(newValue instanceof Decimal)) {\r\n throw new Error(\"Non-Decimal assignment to Decimal player property\");\r\n }\r\n if (!isFinite(newValue.mantissa) || !isFinite(newValue.exponent)) {\r\n throw new Error(\"NaN player property assignment\");\r\n }\r\n value = newValue;\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","export const PerformanceStats = {\r\n container: document.getElementById(\"performance-stats\"),\r\n samplePeriod: 10 * 1000,\r\n isOn: false,\r\n currentBlocks: [],\r\n stats: {},\r\n turnOn() {\r\n this.isOn = true;\r\n this.container.style.display = \"flex\";\r\n },\r\n turnOff() {\r\n this.isOn = false;\r\n this.container.style.display = \"none\";\r\n this.stats = {};\r\n },\r\n toggle() {\r\n if (this.isOn) this.turnOff();\r\n else this.turnOn();\r\n },\r\n start(blockName) {\r\n if (!this.isOn) return;\r\n const blockRoot = this.currentBlocks.length > 0 ? this.currentBlocks.last().childBlocks : this.stats;\r\n let block = blockRoot[blockName];\r\n if (block === undefined) {\r\n block = {\r\n records: [],\r\n childBlocks: {}\r\n };\r\n blockRoot[blockName] = block;\r\n }\r\n this.currentBlocks.push(block);\r\n const record = {};\r\n block.records.push(record);\r\n record.timestamp = performance.now();\r\n },\r\n end() {\r\n if (!this.isOn) return;\r\n const now = performance.now();\r\n const block = this.currentBlocks.pop();\r\n const record = block.records.last();\r\n record.duration = now - record.timestamp;\r\n },\r\n render() {\r\n if (!this.isOn) return;\r\n let indentLevel = -1;\r\n let text = \"\";\r\n const samplePeriod = this.samplePeriod;\r\n let fps;\r\n function render(rootBlock) {\r\n indentLevel++;\r\n for (const blockName in rootBlock) {\r\n if (!Object.prototype.hasOwnProperty.call(rootBlock, blockName)) continue;\r\n const block = rootBlock[blockName];\r\n const records = block.records;\r\n while (records.length > 1 && records.last().timestamp - records.first().timestamp > samplePeriod) {\r\n records.shift();\r\n }\r\n text += `${\"-\".repeat(indentLevel)}${blockName}: `;\r\n if (records.length > 0) {\r\n let sum = 0;\r\n let max = Number.MIN_VALUE;\r\n let min = Number.MAX_VALUE;\r\n for (const record of records) {\r\n const duration = record.duration;\r\n sum += duration;\r\n if (duration > max) max = duration;\r\n if (duration < min) min = duration;\r\n }\r\n const average = sum / records.length;\r\n if (fps === undefined) {\r\n // We are at root frame block\r\n fps = 1000 / average;\r\n text = `FPS: ${Math.floor(fps)}
${text}`;\r\n }\r\n text += `${average.toFixed(3)}/${min.toFixed(3)}/${max.toFixed(3)}`;\r\n }\r\n text += \"
\";\r\n render(block.childBlocks);\r\n }\r\n indentLevel--;\r\n }\r\n render(this.stats);\r\n this.container.innerHTML = text;\r\n }\r\n};\r\n","import { Currency } from \"./currency\";\r\nimport { BitPurchasableMechanicState, RebuyableMechanicState } from \"./game-mechanics\";\r\nimport { DC } from \"./constants\";\r\nimport { Effect } from \"./game-mechanics/effect\";\r\n\r\nclass MendingUpgradeState extends BitPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.registerEvents(config.checkEvent, () => this.tryUnlock());\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get shortDescription() {\r\n return this.config.shortDescription ? this.config.shortDescription() : \"\";\r\n }\r\n\r\n get requirement() {\r\n return typeof this.config.requirement === \"function\" ? this.config.requirement() : this.config.requirement;\r\n }\r\n\r\n get lockEvent() {\r\n return typeof this.config.lockEvent === \"function\" ? this.config.lockEvent() : this.config.lockEvent;\r\n }\r\n\r\n get currency() {\r\n return Currency.mendingPoints;\r\n }\r\n\r\n get bitIndex() {\r\n return this.id;\r\n }\r\n\r\n get bits() {\r\n return player.mending.upgradeBits;\r\n }\r\n\r\n set bits(value) {\r\n player.mending.upgradeBits = value;\r\n }\r\n\r\n get hasPlayerLock() {\r\n return false\r\n }\r\n\r\n\r\n get isLockingMechanics() {\r\n const shouldBypass = this.config.bypassLock?.() ?? false;\r\n return this.hasPlayerLock && this.isPossible && !shouldBypass && !this.isAvailableForPurchase;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return true;\r\n }\r\n\r\n get isPossible() {\r\n return this.config.hasFailed ? !this.config.hasFailed() : true;\r\n }\r\n\r\n tryUnlock() {\r\n const mendingReached = PlayerProgress.mendingUnlocked()\r\n if (!mendingReached || this.isAvailableForPurchase || !this.config.checkRequirement()) return;\r\n player.mending.upgReqs |= (1 << this.id);\r\n GameUI.notify.reality(`You've unlocked a Mending Upgrade: ${this.config.name}`);\r\n this.hasPlayerLock = false;\r\n }\r\n\r\n onPurchased() {\r\n EventHub.dispatch(GAME_EVENT.MENDING_UPGRADE_BOUGHT);\r\n const id = this.id;\r\n switch(id){\r\n case 2:{\r\n Currency.eternities.bumpTo(1e6);\r\n Currency.infinities.bumpTo(1e12);\r\n Currency.realities.bumpTo(10000);\r\n player.replicanti.unl = true;\r\n Glyphs.addToInventory(GlyphGenerator.randomGlyph({ actualLevel: 70, rawLevel:70 },undefined, 'power'));\r\n break;\r\n }\r\n case 3:{\r\n for (let i = 1; i <= 12; i++){\r\n EternityChallenge(i).completions = 5;\r\n if (i === 12) break;\r\n }\r\n break;\r\n }\r\n case 4:{\r\n if (!ImaginaryUpgrade(15).isAvailableForPurchase ) ImaginaryUpgrade(15).isAvailableForPurchase ;\r\n if (!ImaginaryUpgrade(15).isBought) ImaginaryUpgrade(15).isBought = true;\r\n if (player.celestials.laitela.difficultyTier < 8) player.celestials.laitela.difficultyTier = 8; //futureproffing, but idk how that would make sense\r\n break\r\n }\r\n case 5:{\r\n player.celestials.teresa.unlockBits += 2;\r\n break;\r\n }\r\n case 7:{\r\n player.celestials.enslaved.unlocks = [0, 1];\r\n player.celestials.enslaved.completed = true;\r\n break\r\n }\r\n case 9:{\r\n if (player.celestials.teresa.unlockBits % 2 != 1){\r\n player.celestials.teresa.unlockBits += 1;\r\n }\r\n if (player.celestials.teresa.bestRunAM.lt(DC.E1E10)){\r\n player.celestials.teresa.bestRunAM = DC.E1E10;\r\n }\r\n break;\r\n }\r\n case 14:{\r\n player.celestials.v.runUnlocks.forEach((unlock, index) => {\r\n player.celestials.v.runUnlocks[index] = Math.max(unlock, 3);\r\n });\r\n V.updateTotalRunUnlocks();\r\n break;\r\n }\r\n case 19:{\r\n Ra.checkForUnlocks();\r\n break;\r\n }\r\n default:{\r\n //apparently leaving this blank is equivalent to Python's \"pass\"\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass RebuyableMendingUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.mendingPoints;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.mending.rebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.mending.rebuyables[this.id] = value;\r\n }\r\n}\r\n\r\nMendingUpgradeState.index = mapGameData(\r\n GameDatabase.mending.upgrades,\r\n config => (config.id % 5 === 1\r\n ? new RebuyableMendingUpgradeState(config)\r\n : new MendingUpgradeState(config))\r\n);\r\n\r\n/**\r\n * @param {number} id\r\n * @return {MendingUpgradeState|RebuyableMendingUpgradeState}\r\n */\r\nexport const MendingUpgrade = id => MendingUpgradeState.index[id];\r\n\r\nexport const MendingUpgrades = {\r\n /**\r\n * @type {(MendingUpgradeState|RebuyableMendingUpgradeState)[]}\r\n */\r\n all: MendingUpgradeState.index.compact(),\r\n get allBought() {\r\n return (player.mending.upgradeBits >> 6) + 1 === 1 << (GameDatabase.mending.upgrades.length - 5);\r\n }\r\n};\r\n\r\nexport const MendingUpgradeMultiplier = new Effect(()=>{\r\n const upgradeBought = id => MendingUpgrade(id).isBought;\r\n let effect = 1;\r\n\r\n for(let i = 1; i < 20; i+=5){\r\n effect = effect << (upgradeBought(i+1) && upgradeBought(i+2) && upgradeBought(i+3) && upgradeBought(i+4));\r\n }\r\n return effect;\r\n});","import { MendingUpgrade } from \"./mending-upgrades\";\r\n\r\nclass Lazy {\r\n constructor(getValue) {\r\n this._getValue = getValue;\r\n Lazy.registerLazy(this);\r\n }\r\n\r\n static get registrar() {\r\n if (Lazy._registrar === undefined) {\r\n Lazy._registrar = [];\r\n }\r\n return Lazy._registrar;\r\n }\r\n\r\n static registerLazy(object) {\r\n Lazy.registrar.push(object);\r\n }\r\n\r\n static invalidateAll() {\r\n for (const obj of Lazy.registrar) {\r\n obj.invalidate();\r\n }\r\n }\r\n\r\n get value() {\r\n if (this._value === undefined) {\r\n this._value = this._getValue();\r\n }\r\n return this._value;\r\n }\r\n\r\n invalidate() {\r\n this._value = undefined;\r\n }\r\n\r\n /**\r\n * @return {Lazy}\r\n */\r\n invalidateOn(...events) {\r\n for (const event of events) {\r\n EventHub.logic.on(event, () => this.invalidate());\r\n }\r\n return this;\r\n }\r\n}\r\nwindow.Lazy = Lazy;\r\n\r\nexport const GameCache = {\r\n worstChallengeTime: new Lazy(() => Decimal.max(player.challenge.normal.bestTimes)),\r\n\r\n bestRunIPPM: new Lazy(() =>\r\n player.records.recentInfinities\r\n .map(run => ratePerMinute(run[2], run[0]))\r\n .reduce(Decimal.maxReducer)\r\n ),\r\n\r\n averageRealTimePerEternity: new Lazy(() => player.records.recentEternities\r\n .map(run => run[1])\r\n .reduce(Number.sumReducer) / (1000 * player.records.recentEternities.length)),\r\n\r\n tickSpeedMultDecrease: new Lazy(() => (MendingUpgrade(8).isBought ? 1.2 : 10 - (\r\n BreakInfinityUpgrade.tickspeedCostMult.effectValue + \r\n ((EternityChallenge(11).completions >= 1) ? EternityChallenge(11).reward.effectValue : 0)\r\n ))),\r\n\r\n dimensionMultDecrease: new Lazy(() => (MendingUpgrade(8).isBought ? 1.5 : 10 -(BreakInfinityUpgrade.dimCostMult.effectValue + (EternityChallenge(6).completions >= 1 ? EternityChallenge(6).reward.effectValue : 0))\r\n )),\r\n\r\n timeStudies: new Lazy(() => NormalTimeStudyState.studies\r\n .map(s => player.timestudy.studies.includes(s.id))),\r\n\r\n currentStudyTree: new Lazy(() => new TimeStudyTree(TimeStudyTree.currentStudies)),\r\n\r\n achievementPeriod: new Lazy(() => TimeSpan.fromMinutes(30 - Effects.sum(\r\n Perk.achievementGroup1,\r\n Perk.achievementGroup2,\r\n Perk.achievementGroup3,\r\n Perk.achievementGroup4\r\n )).totalMilliseconds),\r\n\r\n buyablePerks: new Lazy(() => Perks.all.filter(p => p.canBeBought)),\r\n\r\n // Cached because it needs to be checked upon any change to antimatter, but that's a hot path and we want to keep\r\n // unnecessary repetitive calculations and accessing to a minimum\r\n cheapestAntimatterAutobuyer: new Lazy(() => Autobuyer.antimatterDimension.zeroIndexed.concat(Autobuyer.tickspeed)\r\n .filter(ab => !(ab.isBought || ab.isUnlocked))\r\n .map(ab => ab.antimatterCost.toNumber())\r\n .min()\r\n ),\r\n\r\n // The effect is defined in antimatter_dimensions.js because that's where the non-cached\r\n // code originally lived.\r\n antimatterDimensionCommonMultiplier: new Lazy(() => antimatterDimensionCommonMultiplier()),\r\n\r\n // 0 will cause a crash if invoked; this way the tier can be used as an index\r\n antimatterDimensionFinalMultipliers: Array.range(0, 9)\r\n .map(tier => new Lazy(() => getDimensionFinalMultiplierUncached(tier))),\r\n\r\n infinityDimensionCommonMultiplier: new Lazy(() => infinityDimensionCommonMultiplier()),\r\n\r\n timeDimensionCommonMultiplier: new Lazy(() => timeDimensionCommonMultiplier()),\r\n\r\n multiversalDimensionCommonMultiplierDimensionCommonMultiplier: new Lazy(() => multiversalDimensionCommonMultiplier()),\r\n\r\n glyphInventorySpace: new Lazy(() => Glyphs.freeInventorySpace),\r\n\r\n glyphEffects: new Lazy(() => orderedEffectList.mapToObject(k => k, k => getAdjustedGlyphEffectUncached(k))),\r\n\r\n staticGlyphWeights: new Lazy(() => staticGlyphWeights()),\r\n\r\n logTotalGlyphSacrifice: new Lazy(() => GlyphSacrificeHandler.logTotalSacrifice),\r\n\r\n totalIPMult: new Lazy(() => totalIPMult()),\r\n\r\n challengeTimeSum: new Lazy(() => player.challenge.normal.bestTimes.sumD()),\r\n\r\n infinityChallengeTimeSum: new Lazy(() => {let v = new Decimal(0); for (let i = 0; i < 8; i++) {(v.add(player.challenge.infinity.bestTimes))}; return v}),\r\n multiversalDimensionCommonMultiplier: new Lazy(() => multiversalDimensionCommonMultiplier()),\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.GLYPHS_CHANGED, () => {\r\n GameCache.glyphInventorySpace.invalidate();\r\n GameCache.glyphEffects.invalidate();\r\n GameCache.staticGlyphWeights.invalidate();\r\n}, GameCache.glyphEffects);\r\n\r\nGameCache.antimatterDimensionFinalMultipliers.invalidate = function() {\r\n for (const x of this) x.invalidate();\r\n};\r\n","export const GameIntervals = (function() {\r\n const interval = (handler, timeout) => {\r\n let id = -1;\r\n return {\r\n start() {\r\n // This starts the interval if it isn't already started,\r\n // and throws an error if it is.\r\n if (this.isStarted) {\r\n throw new Error(\"An already started interval cannot be started again.\");\r\n } else {\r\n id = setInterval(handler, typeof timeout === \"function\" ? timeout() : timeout);\r\n }\r\n },\r\n get isStarted() {\r\n return id !== -1;\r\n },\r\n stop() {\r\n // This stops the interval if it isn't already stopped,\r\n // and does nothing if it is already stopped.\r\n clearInterval(id);\r\n id = -1;\r\n },\r\n restart() {\r\n this.stop();\r\n this.start();\r\n }\r\n };\r\n };\r\n return {\r\n // Not a getter because getter will cause stack overflow\r\n all() {\r\n return Object.values(GameIntervals)\r\n .filter(i =>\r\n Object.prototype.hasOwnProperty.call(i, \"start\") &&\r\n Object.prototype.hasOwnProperty.call(i, \"stop\")\r\n );\r\n },\r\n start() {\r\n // eslint-disable-next-line no-shadow\r\n for (const interval of this.all()) {\r\n interval.start();\r\n }\r\n },\r\n stop() {\r\n // eslint-disable-next-line no-shadow\r\n for (const interval of this.all()) {\r\n interval.stop();\r\n }\r\n },\r\n restart() {\r\n // eslint-disable-next-line no-shadow\r\n for (const interval of this.all()) {\r\n interval.restart();\r\n }\r\n },\r\n gameLoop: interval(() => gameLoop(), () => player.options.updateRate),\r\n save: interval(() => GameStorage.save(), () =>\r\n player.options.autosaveInterval - Math.clampMin(0, Date.now() - GameStorage.lastSaveTime)\r\n ),\r\n checkCloudSave: interval(() => {\r\n if (player.options.cloudEnabled && Cloud.loggedIn) Cloud.saveCheck();\r\n }, 600 * 1000),\r\n // This simplifies auto-backup code to check every second instead of dynamically stopping and\r\n // restarting the interval every save operation, and is how it's structured on Android as well\r\n checkEverySecond: interval(() => {\r\n if (Math.random() < 0.00001) SecretAchievement(18).unlock();\r\n GameStorage.tryOnlineBackups();\r\n }, 1000),\r\n checkForUpdates: interval(() => {\r\n if (isLocalEnvironment()) return;\r\n fetch(\"version.txt\")\r\n .then(response => response.json())\r\n .then(json => {\r\n if (json.version > player.version) {\r\n Modal.message.show(json.message, { callback: updateRefresh }, 3);\r\n }\r\n });\r\n }, 60000)\r\n };\r\n}());\r\n","import Mousetrap from \"mousetrap\";\r\n\r\n// Add all numpad keys to Mousetrap (keycodes 97-105 correspond to numpad 1-9)\r\nconst numpadKeys = {};\r\nfor (let num = 1; num <= 9; num++) numpadKeys[num + 96] = `num${num}`;\r\nMousetrap.addKeycodes(numpadKeys);\r\n\r\nfunction getKeys(combination) {\r\n return combination.split(\"+\");\r\n}\r\n\r\n// Extract \"a\" from \"a\", \"shift+a\", \"shift+alt+a\" and whatever else\r\n// Returns undefined for mod-only combos, like \"shift+alt\"\r\nconst modifierKeys = [\"ctrl\", \"shift\", \"alt\", \"mod\"];\r\nfunction getMainKey(keys) {\r\n return keys.find(key => !modifierKeys.includes(key));\r\n}\r\n\r\nclass KeySpin {\r\n constructor(key) {\r\n this.key = key;\r\n }\r\n\r\n setAction(keys, action) {\r\n if (keys.includes(\"shift\")) {\r\n this.shiftAction = action;\r\n } else {\r\n this.action = action;\r\n }\r\n }\r\n\r\n start() {\r\n if (this.isRunning) {\r\n return;\r\n }\r\n this.isRunning = true;\r\n this.executeAction();\r\n this.interval = setInterval(() => {\r\n clearInterval(this.interval);\r\n this.executeAction();\r\n this.interval = setInterval(() => this.executeAction(), 40);\r\n }, 500);\r\n }\r\n\r\n executeAction() {\r\n if (ui.view.shiftDown && this.shiftAction !== undefined) {\r\n this.shiftAction();\r\n } else if (this.action !== undefined) {\r\n this.action();\r\n }\r\n }\r\n\r\n probablyStop() {\r\n // Goddamn, Mousetrap\r\n // It doesn't call keyup \"1\" for the case where you have \"shift+1\" pressed,\r\n // and you release the \"1\" key. Instead, it will call the keyup for \"shift+1\"\r\n // To fix this issue, we will stop on \"shift+1\", but only if we know that\r\n // shift is pressed, and that's what's in the ui.view.shiftDown\r\n if (ui.view.shiftDown) {\r\n this.stop();\r\n }\r\n }\r\n\r\n stop() {\r\n this.isRunning = false;\r\n if (this.interval) {\r\n clearInterval(this.interval);\r\n }\r\n this.interval = undefined;\r\n }\r\n}\r\n\r\nexport class GameKeyboard {\r\n static stopSpins() {\r\n for (const spin of spins) {\r\n spin.stop();\r\n }\r\n }\r\n\r\n static bind(key, callback, type) {\r\n Mousetrap.bind(key, () => executeKey(callback), type);\r\n }\r\n\r\n static bindRepeatable(key, callback) {\r\n this._bindSpin(key, () => executeKey(callback));\r\n }\r\n\r\n static bindHotkey(key, callback, type) {\r\n Mousetrap.bind(key, () => executeHotkey(callback), type);\r\n }\r\n\r\n static bindRepeatableHotkey(key, callback) {\r\n this._bindSpin(key, () => executeHotkey(callback));\r\n }\r\n\r\n static _bindSpin(combination, action) {\r\n const keys = getKeys(combination);\r\n const mainKey = getMainKey(keys);\r\n let spin = spins.find(s => s.key === mainKey);\r\n if (spin === undefined) {\r\n spin = new KeySpin(mainKey);\r\n spins.push(spin);\r\n Mousetrap.bind(mainKey, () => spin.start(), \"keydown\");\r\n Mousetrap.bind(mainKey, () => spin.stop(), \"keyup\");\r\n }\r\n\r\n if (combination !== mainKey) {\r\n Mousetrap.bind(combination, () => spin.start(), \"keydown\");\r\n Mousetrap.bind(combination, () => spin.probablyStop(), \"keyup\");\r\n }\r\n\r\n spin.setAction(keys, action);\r\n }\r\n\r\n static disable() {\r\n this.stopSpins();\r\n Mousetrap.reset();\r\n }\r\n}\r\n\r\nconst spins = [];\r\n\r\nfunction executeKey(action) {\r\n if (ui.$viewModel.modal.progressBar !== undefined){// || GameEnd.endState >= END_STATE_MARKERS.INTERACTIVITY_DISABLED) {\r\n return undefined;\r\n }\r\n return action();\r\n}\r\n\r\nfunction executeHotkey(action) {\r\n if (!player.options.hotkeys ||\r\n document.activeElement.type === \"text\" ||\r\n document.activeElement.type === \"textarea\") {\r\n return undefined;\r\n }\r\n return executeKey(action);\r\n}\r\n","/* eslint-disable no-console */\r\n\r\nimport { STEAM } from \"@/env\";\r\n\r\n/**\r\n * @template TModule\r\n */\r\nexport class NodeModule {\r\n\r\n /**\r\n * @param {string} name\r\n */\r\n constructor(name) {\r\n this.name = name;\r\n /**\r\n * @type {TModule}\r\n * @private\r\n */\r\n this.__module__ = STEAM && window.require !== undefined ? window.require(name) : undefined;\r\n }\r\n\r\n get isLoaded() {\r\n return this.__module__ !== undefined;\r\n }\r\n\r\n /**\r\n * @template TResult\r\n * @param {(module: TModule, resolve: (value?: TResult) => void, reject: (reason?: any) => void) => void} executor\r\n * @returns {Promise}\r\n */\r\n makePromise(executor) {\r\n if (!this.isLoaded) {\r\n throw Error(`Node module \"${this.name}\" is not loaded.`);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n executor(this.__module__, resolve, reject);\r\n });\r\n }\r\n\r\n /**\r\n * @template TResult\r\n * @param {(module: TModule) => TResult} call\r\n * @param {TResult} [defaultValue]\r\n * @returns {TResult}\r\n */\r\n safeCall(call, defaultValue) {\r\n if (!this.isLoaded) {\r\n throw Error(`Node module \"${this.name}\" is not loaded.`);\r\n }\r\n\r\n try {\r\n return call(this.__module__);\r\n } catch (e) {\r\n console.error(`Failed to make a call to node module \"${this.name}\".`);\r\n console.error(e);\r\n return defaultValue;\r\n }\r\n }\r\n}\r\n","import { NodeModule } from \"./node-module\";\r\n\r\n/**\r\n * @type {NodeModule}\r\n */\r\nconst module = new NodeModule(\"electron\");\r\n\r\nexport function isModuleLoaded() {\r\n return module.isLoaded;\r\n}\r\n\r\nexport function setZoomFactor(zoomFactor) {\r\n return module.safeCall(\r\n x => x.webFrame.setZoomFactor(zoomFactor)\r\n );\r\n}\r\n\r\nexport function openExternal(url) {\r\n return module.safeCall(\r\n x => x.shell.openExternal(url)\r\n );\r\n}\r\n","import * as Electron from \"./bindings/electron\";\r\n\r\nconst MIN_ZOOM = 0.5;\r\nconst MAX_ZOOM = 1.5;\r\n\r\nlet zoomFactor = 1;\r\n\r\nexport const ElectronRuntime = {\r\n initialize() {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n zoomFactor = Number(localStorage.getItem(\"Zoom\"));\r\n zoomFactor = Number.isFinite(zoomFactor) ? zoomFactor : 1;\r\n window.addEventListener(\"resize\", () => this.updateZoom());\r\n },\r\n\r\n get isActive() {\r\n return Electron.isModuleLoaded();\r\n },\r\n\r\n increaseZoom() {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n if (zoomFactor > MAX_ZOOM) {\r\n GameUI.notify.info(\"Zoom Level is at Maximum\");\r\n return;\r\n }\r\n\r\n this.zoomFactor = Math.round((zoomFactor + 0.1) * 10) / 10;\r\n },\r\n\r\n decreaseZoom() {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n if (zoomFactor < MIN_ZOOM) {\r\n GameUI.notify.info(\"Zoom Level is at Minimum\");\r\n return;\r\n }\r\n\r\n this.zoomFactor = Math.round((zoomFactor - 0.1) * 10) / 10;\r\n },\r\n\r\n resetZoom() {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n this.zoomFactor = 1;\r\n },\r\n\r\n get zoomFactor() {\r\n return zoomFactor;\r\n },\r\n\r\n set zoomFactor(value) {\r\n zoomFactor = value;\r\n localStorage.setItem(\"Zoom\", zoomFactor.toString());\r\n this.updateZoom();\r\n GameUI.notify.info(`Size changed to ${Math.round(zoomFactor * 100)}%`);\r\n },\r\n\r\n updateZoom() {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n const setSize = 1020;\r\n const sizeDiff = window.outerHeight / setSize;\r\n Electron.setZoomFactor(sizeDiff * zoomFactor);\r\n }\r\n};\r\n","import { discordRichPresence } from \"./secret-formula/discord-rich-presence\";\r\n\r\nexport const RichPresenceInfo = {\r\n get gameStage() {\r\n const stageDB = discordRichPresence.stages;\r\n for (let stage = stageDB.length - 1; stage >= 0; stage--) {\r\n if (stageDB[stage].hasReached()) return stageDB[stage];\r\n }\r\n throw Error(\"No valid progress stage found\");\r\n },\r\n get challengeState() {\r\n const challDB = discordRichPresence.challenges;\r\n for (let index = 0; index < challDB.length; index++) {\r\n const chall = challDB[index];\r\n if (chall.activityToken()) return chall;\r\n }\r\n return null;\r\n },\r\n\r\n // First line of info for DRP\r\n get details() {\r\n const chall = this.challengeState;\r\n const stageName = typeof this.gameStage.name === \"function\" ? this.gameStage.name() : this.gameStage.name;\r\n if (!chall) return `At ${stageName} (${this.gameStage.mainResource()})`;\r\n const challResStr = chall.resource()\r\n ? `, ${chall.resource()}`\r\n : \"\";\r\n return `At ${stageName} (In ${chall.name(chall.activityToken())}${challResStr})`;\r\n },\r\n // Second line of info for DRP\r\n get state() {\r\n const mainRes = this.challengeState ? [this.gameStage.mainResource()] : [];\r\n return mainRes.concat((this.gameStage.resourceList ?? []).map(res => res())).join(\" | \");\r\n }\r\n};\r\n","import * as Electron from \"@/steam/bindings/electron\";\r\n\r\nexport function openExternalLink(url) {\r\n if (Electron.isModuleLoaded()) {\r\n Electron.openExternal(url);\r\n } else {\r\n window.open(url, \"_blank\").focus();\r\n }\r\n}\r\n","/* eslint-disable */\r\n/// \r\n\r\nexport var PlayFab = typeof PlayFab != \"undefined\" ? PlayFab : {};\r\n\r\nif(!PlayFab.settings) {\r\n PlayFab.settings = {\r\n titleId: null, // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website)\r\n developerSecretKey: null, // For security reasons you must never expose this value to the client or players - You must set this value for Server-APIs to work properly (Found in the Game Manager for your title, at the PlayFab Website)\r\n GlobalHeaderInjection: null,\r\n productionServerUrl: \".playfabapi.com\"\r\n }\r\n}\r\n\r\nif(!PlayFab._internalSettings) {\r\n PlayFab._internalSettings = {\r\n entityToken: null,\r\n sdkVersion: \"1.136.230206\",\r\n requestGetParams: {\r\n sdk: \"JavaScriptSDK-1.136.230206\"\r\n },\r\n sessionTicket: null,\r\n verticalName: null, // The name of a customer vertical. This is only for customers running a private cluster. Generally you shouldn't touch this\r\n errorTitleId: \"Must be have PlayFab.settings.titleId set to call this method\",\r\n errorLoggedIn: \"Must be logged in to call this method\",\r\n errorEntityToken: \"You must successfully call GetEntityToken before calling this\",\r\n errorSecretKey: \"Must have PlayFab.settings.developerSecretKey set to call this method\",\r\n\r\n GetServerUrl: function () {\r\n if (!(PlayFab.settings.productionServerUrl.substring(0, 4) === \"http\")) {\r\n if (PlayFab._internalSettings.verticalName) {\r\n return \"https://\" + PlayFab._internalSettings.verticalName + PlayFab.settings.productionServerUrl;\r\n } else {\r\n return \"https://\" + PlayFab.settings.titleId + PlayFab.settings.productionServerUrl;\r\n }\r\n } else {\r\n return PlayFab.settings.productionServerUrl;\r\n }\r\n },\r\n\r\n InjectHeaders: function (xhr, headersObj) {\r\n if (!headersObj)\r\n return;\r\n\r\n for (var headerKey in headersObj)\r\n {\r\n try {\r\n xhr.setRequestHeader(gHeaderKey, headersObj[headerKey]);\r\n } catch (e) {\r\n console.log(\"Failed to append header: \" + headerKey + \" = \" + headersObj[headerKey] + \"Error: \" + e);\r\n }\r\n }\r\n },\r\n\r\n ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) {\r\n var resultPromise = new Promise(function (resolve, reject) {\r\n if (callback != null && typeof (callback) !== \"function\")\r\n throw \"Callback must be null or a function\";\r\n\r\n if (request == null)\r\n request = {};\r\n\r\n var startTime = new Date();\r\n var requestBody = JSON.stringify(request);\r\n\r\n var urlArr = [url];\r\n var getParams = PlayFab._internalSettings.requestGetParams;\r\n if (getParams != null) {\r\n var firstParam = true;\r\n for (var key in getParams) {\r\n if (firstParam) {\r\n urlArr.push(\"?\");\r\n firstParam = false;\r\n } else {\r\n urlArr.push(\"&\");\r\n }\r\n urlArr.push(key);\r\n urlArr.push(\"=\");\r\n urlArr.push(getParams[key]);\r\n }\r\n }\r\n\r\n var completeUrl = urlArr.join(\"\");\r\n\r\n var xhr = new XMLHttpRequest();\r\n // window.console.log(\"URL: \" + completeUrl);\r\n xhr.open(\"POST\", completeUrl, true);\r\n\r\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\r\n xhr.setRequestHeader(\"X-PlayFabSDK\", \"JavaScriptSDK-\" + PlayFab._internalSettings.sdkVersion);\r\n if (authkey != null)\r\n xhr.setRequestHeader(authkey, authValue);\r\n PlayFab._internalSettings.InjectHeaders(xhr, PlayFab.settings.GlobalHeaderInjection);\r\n PlayFab._internalSettings.InjectHeaders(xhr, extraHeaders);\r\n\r\n xhr.onloadend = function () {\r\n if (callback == null)\r\n return;\r\n\r\n var result = PlayFab._internalSettings.GetPlayFabResponse(request, xhr, startTime, customData);\r\n if (result.code === 200) {\r\n callback(result, null);\r\n } else {\r\n callback(null, result);\r\n }\r\n }\r\n\r\n xhr.onerror = function () {\r\n if (callback == null)\r\n return;\r\n\r\n var result = PlayFab._internalSettings.GetPlayFabResponse(request, xhr, startTime, customData);\r\n callback(null, result);\r\n }\r\n\r\n xhr.send(requestBody);\r\n xhr.onreadystatechange = function () {\r\n if (this.readyState === 4) {\r\n var xhrResult = PlayFab._internalSettings.GetPlayFabResponse(request, this, startTime, customData);\r\n if (this.status === 200) {\r\n resolve(xhrResult);\r\n } else {\r\n reject(xhrResult);\r\n }\r\n }\r\n };\r\n });\r\n // Return a Promise so that calls to various API methods can be handled asynchronously\r\n return resultPromise;\r\n },\r\n\r\n GetPlayFabResponse: function(request, xhr, startTime, customData) {\r\n var result = null;\r\n try {\r\n // window.console.log(\"parsing json result: \" + xhr.responseText);\r\n result = JSON.parse(xhr.responseText);\r\n } catch (e) {\r\n result = {\r\n code: 503, // Service Unavailable\r\n status: \"Service Unavailable\",\r\n error: \"Connection error\",\r\n errorCode: 2, // PlayFabErrorCode.ConnectionError\r\n errorMessage: xhr.responseText\r\n };\r\n }\r\n\r\n result.CallBackTimeMS = new Date() - startTime;\r\n result.Request = request;\r\n result.CustomData = customData;\r\n return result;\r\n },\r\n\r\n authenticationContext: {\r\n PlayFabId: null,\r\n EntityId: null,\r\n EntityType: null,\r\n SessionTicket: null,\r\n EntityToken: null\r\n },\r\n\r\n UpdateAuthenticationContext: function (authenticationContext, result) {\r\n var authenticationContextUpdates = {};\r\n if(result.data.PlayFabId !== null) {\r\n PlayFab._internalSettings.authenticationContext.PlayFabId = result.data.PlayFabId;\r\n authenticationContextUpdates.PlayFabId = result.data.PlayFabId;\r\n }\r\n if(result.data.SessionTicket !== null) {\r\n PlayFab._internalSettings.authenticationContext.SessionTicket = result.data.SessionTicket;\r\n authenticationContextUpdates.SessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken !== null) {\r\n PlayFab._internalSettings.authenticationContext.EntityId = result.data.EntityToken.Entity.Id;\r\n authenticationContextUpdates.EntityId = result.data.EntityToken.Entity.Id;\r\n PlayFab._internalSettings.authenticationContext.EntityType = result.data.EntityToken.Entity.Type;\r\n authenticationContextUpdates.EntityType = result.data.EntityToken.Entity.Type;\r\n PlayFab._internalSettings.authenticationContext.EntityToken = result.data.EntityToken.EntityToken;\r\n authenticationContextUpdates.EntityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Update the authenticationContext with values from the result\r\n authenticationContext = Object.assign(authenticationContext, authenticationContextUpdates);\r\n return authenticationContext;\r\n },\r\n\r\n AuthInfoMap: {\r\n \"X-EntityToken\": {\r\n authAttr: \"entityToken\",\r\n authError: \"errorEntityToken\"\r\n },\r\n \"X-Authorization\": {\r\n authAttr: \"sessionTicket\",\r\n authError: \"errorLoggedIn\"\r\n },\r\n \"X-SecretKey\": {\r\n authAttr: \"developerSecretKey\",\r\n authError: \"errorSecretKey\"\r\n }\r\n },\r\n\r\n GetAuthInfo: function (request, authKey) {\r\n // Use the most-recently saved authKey, unless one was provided in the request via the AuthenticationContext\r\n var authError = PlayFab._internalSettings.AuthInfoMap[authKey].authError;\r\n var authAttr = PlayFab._internalSettings.AuthInfoMap[authKey].authAttr;\r\n var defaultAuthValue = null;\r\n if (authAttr === \"entityToken\")\r\n defaultAuthValue = PlayFab._internalSettings.entityToken;\r\n else if (authAttr === \"sessionTicket\")\r\n defaultAuthValue = PlayFab._internalSettings.sessionTicket;\r\n else if (authAttr === \"developerSecretKey\")\r\n defaultAuthValue = PlayFab.settings.developerSecretKey;\r\n var authValue = request.AuthenticationContext ? request.AuthenticationContext[authAttr] : defaultAuthValue;\r\n return {\"authKey\": authKey, \"authValue\": authValue, \"authError\": authError};\r\n },\r\n\r\n ExecuteRequestWrapper: function (apiURL, request, authKey, callback, customData, extraHeaders) {\r\n var authValue = null;\r\n if (authKey !== null){\r\n var authInfo = PlayFab._internalSettings.GetAuthInfo(request, authKey=authKey);\r\n var authKey = authInfo.authKey, authValue = authInfo.authValue, authError = authInfo.authError;\r\n\r\n if (!authValue) throw authError;\r\n }\r\n return PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + apiURL, request, authKey, authValue, callback, customData, extraHeaders);\r\n }\r\n }\r\n}\r\n\r\nPlayFab.buildIdentifier = \"adobuild_javascriptsdk_114\";\r\nPlayFab.sdkVersion = \"1.136.230206\";\r\nPlayFab.GenerateErrorReport = function (error) {\r\n if (error == null)\r\n return \"\";\r\n var fullErrors = error.errorMessage;\r\n for (var paramName in error.errorDetails)\r\n for (var msgIdx in error.errorDetails[paramName])\r\n fullErrors += \"\\n\" + paramName + \": \" + error.errorDetails[paramName][msgIdx];\r\n return fullErrors;\r\n};\r\n\r\nPlayFab.ClientApi = {\r\n\r\n IsClientLoggedIn: function () {\r\n return PlayFab._internalSettings.sessionTicket != null && PlayFab._internalSettings.sessionTicket.length > 0;\r\n },\r\n ForgetAllCredentials: function () {\r\n PlayFab._internalSettings.sessionTicket = null;\r\n PlayFab._internalSettings.entityToken = null;\r\n },\r\n\r\n AcceptTrade: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AcceptTrade\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AddFriend: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AddFriend\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AddGenericID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AddGenericID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AddOrUpdateContactEmail: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AddOrUpdateContactEmail\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AddSharedGroupMembers: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AddSharedGroupMembers\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AddUsernamePassword: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AddUsernamePassword\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AddUserVirtualCurrency: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AddUserVirtualCurrency\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AndroidDevicePushNotificationRegistration: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AndroidDevicePushNotificationRegistration\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AttributeInstall: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AttributeInstall\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n CancelTrade: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/CancelTrade\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ConfirmPurchase: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ConfirmPurchase\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ConsumeItem: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ConsumeItem\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ConsumeMicrosoftStoreEntitlements: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ConsumeMicrosoftStoreEntitlements\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ConsumePS5Entitlements: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ConsumePS5Entitlements\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ConsumePSNEntitlements: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ConsumePSNEntitlements\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ConsumeXboxEntitlements: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ConsumeXboxEntitlements\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n CreateSharedGroup: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/CreateSharedGroup\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ExecuteCloudScript: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ExecuteCloudScript\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetAccountInfo: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetAccountInfo\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetAdPlacements: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetAdPlacements\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetAllUsersCharacters: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetAllUsersCharacters\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCatalogItems: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCatalogItems\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCharacterData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCharacterData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCharacterInventory: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCharacterInventory\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCharacterLeaderboard: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCharacterLeaderboard\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCharacterReadOnlyData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCharacterReadOnlyData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCharacterStatistics: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCharacterStatistics\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetContentDownloadUrl: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetContentDownloadUrl\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCurrentGames: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCurrentGames\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetFriendLeaderboard: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetFriendLeaderboard\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetFriendLeaderboardAroundPlayer: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetFriendLeaderboardAroundPlayer\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetFriendsList: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetFriendsList\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetGameServerRegions: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetGameServerRegions\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetLeaderboard: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetLeaderboard\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetLeaderboardAroundCharacter: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetLeaderboardAroundCharacter\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetLeaderboardAroundPlayer: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetLeaderboardAroundPlayer\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetLeaderboardForUserCharacters: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetLeaderboardForUserCharacters\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPaymentToken: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPaymentToken\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPhotonAuthenticationToken: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPhotonAuthenticationToken\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerCombinedInfo: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerCombinedInfo\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerProfile: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerProfile\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerSegments: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerSegments\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerStatistics: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerStatistics\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerStatisticVersions: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerStatisticVersions\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerTags: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerTags\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerTrades: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerTrades\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromFacebookIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromFacebookIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromFacebookInstantGamesIds: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromFacebookInstantGamesIds\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromGameCenterIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromGameCenterIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromGenericIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromGenericIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromGoogleIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromGoogleIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromGooglePlayGamesPlayerIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromGooglePlayGamesPlayerIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromKongregateIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromKongregateIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromNintendoServiceAccountIds: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromNintendoServiceAccountIds\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromNintendoSwitchDeviceIds: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromNintendoSwitchDeviceIds\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromPSNAccountIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromPSNAccountIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromSteamIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromSteamIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromTwitchIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromTwitchIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromXboxLiveIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromXboxLiveIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPublisherData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPublisherData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPurchase: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPurchase\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetSharedGroupData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetSharedGroupData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetStoreItems: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetStoreItems\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetTime: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetTime\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetTitleData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetTitleData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetTitleNews: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetTitleNews\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetTitlePublicKey: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetTitlePublicKey\", request, null, callback, customData, extraHeaders);\r\n },\r\n\r\n GetTradeStatus: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetTradeStatus\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetUserData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetUserData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetUserInventory: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetUserInventory\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetUserPublisherData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetUserPublisherData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetUserPublisherReadOnlyData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetUserPublisherReadOnlyData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetUserReadOnlyData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetUserReadOnlyData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GrantCharacterToUser: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GrantCharacterToUser\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkAndroidDeviceID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkAndroidDeviceID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkApple: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkApple\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkCustomID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkCustomID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkFacebookAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkFacebookAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkFacebookInstantGamesId: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkFacebookInstantGamesId\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkGameCenterAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkGameCenterAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkGoogleAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkGoogleAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkGooglePlayGamesServicesAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkGooglePlayGamesServicesAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkIOSDeviceID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkIOSDeviceID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkKongregate: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkKongregate\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkNintendoServiceAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkNintendoServiceAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkNintendoSwitchDeviceId: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkNintendoSwitchDeviceId\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkOpenIdConnect: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkOpenIdConnect\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkPSNAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkPSNAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkSteamAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkSteamAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkTwitch: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkTwitch\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkXboxAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkXboxAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LoginWithAndroidDeviceID: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithAndroidDeviceID\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithApple: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithApple\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithCustomID: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithCustomID\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithEmailAddress: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithEmailAddress\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithFacebook: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithFacebook\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithFacebookInstantGamesId: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithFacebookInstantGamesId\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithGameCenter: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithGameCenter\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithGoogleAccount: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithGoogleAccount\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithGooglePlayGamesServices: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithGooglePlayGamesServices\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithIOSDeviceID: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithIOSDeviceID\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithKongregate: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithKongregate\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithNintendoServiceAccount: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithNintendoServiceAccount\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithNintendoSwitchDeviceId: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithNintendoSwitchDeviceId\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithOpenIdConnect: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithOpenIdConnect\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithPlayFab: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithPlayFab\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithPSN: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithPSN\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithSteam: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithSteam\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithTwitch: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithTwitch\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithXbox: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithXbox\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n Matchmake: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/Matchmake\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n OpenTrade: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/OpenTrade\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n PayForPurchase: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/PayForPurchase\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n PurchaseItem: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/PurchaseItem\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RedeemCoupon: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RedeemCoupon\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RefreshPSNAuthToken: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RefreshPSNAuthToken\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RegisterForIOSPushNotification: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RegisterForIOSPushNotification\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RegisterPlayFabUser: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null && result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RegisterPlayFabUser\", request, null, overloadCallback, customData, extraHeaders);\r\n },\r\n\r\n RemoveContactEmail: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RemoveContactEmail\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RemoveFriend: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RemoveFriend\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RemoveGenericID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RemoveGenericID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RemoveSharedGroupMembers: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RemoveSharedGroupMembers\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ReportAdActivity: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ReportAdActivity\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ReportDeviceInfo: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ReportDeviceInfo\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ReportPlayer: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ReportPlayer\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RestoreIOSPurchases: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RestoreIOSPurchases\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RewardAdActivity: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RewardAdActivity\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n SendAccountRecoveryEmail: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/SendAccountRecoveryEmail\", request, null, callback, customData, extraHeaders);\r\n },\r\n\r\n SetFriendTags: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/SetFriendTags\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n SetPlayerSecret: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/SetPlayerSecret\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n StartPurchase: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/StartPurchase\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n SubtractUserVirtualCurrency: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/SubtractUserVirtualCurrency\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkAndroidDeviceID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkAndroidDeviceID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkApple: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkApple\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkCustomID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkCustomID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkFacebookAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkFacebookAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkFacebookInstantGamesId: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkFacebookInstantGamesId\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkGameCenterAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkGameCenterAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkGoogleAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkGoogleAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkGooglePlayGamesServicesAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkGooglePlayGamesServicesAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkIOSDeviceID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkIOSDeviceID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkKongregate: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkKongregate\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkNintendoServiceAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkNintendoServiceAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkNintendoSwitchDeviceId: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkNintendoSwitchDeviceId\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkOpenIdConnect: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkOpenIdConnect\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkPSNAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkPSNAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkSteamAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkSteamAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkTwitch: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkTwitch\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkXboxAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkXboxAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlockContainerInstance: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlockContainerInstance\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlockContainerItem: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlockContainerItem\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateAvatarUrl: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateAvatarUrl\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateCharacterData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateCharacterData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateCharacterStatistics: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateCharacterStatistics\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdatePlayerStatistics: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdatePlayerStatistics\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateSharedGroupData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateSharedGroupData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateUserData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateUserData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateUserPublisherData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateUserPublisherData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateUserTitleDisplayName: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateUserTitleDisplayName\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ValidateAmazonIAPReceipt: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ValidateAmazonIAPReceipt\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ValidateGooglePlayPurchase: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ValidateGooglePlayPurchase\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ValidateIOSReceipt: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ValidateIOSReceipt\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ValidateWindowsStoreReceipt: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ValidateWindowsStoreReceipt\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n WriteCharacterEvent: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/WriteCharacterEvent\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n WritePlayerEvent: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/WritePlayerEvent\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n WriteTitleEvent: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/WriteTitleEvent\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n};\r\n\r\nvar PlayFabClientSDK = PlayFab.ClientApi;\r\n\r\nPlayFab.RegisterWithPhaser = function() {\r\n if ( typeof Phaser === \"undefined\" || typeof Phaser.Plugin === \"undefined\" )\r\n return;\r\n\r\n Phaser.Plugin.PlayFab = function (game, parent) {\r\n Phaser.Plugin.call(this, game, parent);\r\n };\r\n Phaser.Plugin.PlayFab.prototype = Object.create(Phaser.Plugin.prototype);\r\n Phaser.Plugin.PlayFab.prototype.constructor = Phaser.Plugin.PlayFab;\r\n Phaser.Plugin.PlayFab.prototype.PlayFab = PlayFab;\r\n Phaser.Plugin.PlayFab.prototype.settings = PlayFab.settings;\r\n Phaser.Plugin.PlayFab.prototype.ClientApi = PlayFab.ClientApi;\r\n};\r\nPlayFab.RegisterWithPhaser();\r\n\r\n","import { PlayFab } from \"@/steam/bindings/PlayFabClientApi\";\r\n\r\n/**\r\n * @type {PlayFabClientModule.IPlayFabClient}\r\n */\r\nconst clientApi = PlayFab.ClientApi;\r\nPlayFab.settings.titleId = \"59813\";\r\n\r\nexport function LoginWithSteam(ticket) {\r\n return makePromise(clientApi.LoginWithSteam, {\r\n SteamTicket: ticket,\r\n CreateAccount: true\r\n });\r\n}\r\n\r\nexport function UpdateUserTitleDisplayName(displayName) {\r\n makeAuthorizedPromise(clientApi.UpdateUserTitleDisplayName, {\r\n DisplayName: displayName\r\n });\r\n}\r\n\r\nexport function GetUserData() {\r\n return makeAuthorizedPromise(clientApi.GetUserData);\r\n}\r\n\r\nexport function UpdateUserData(data) {\r\n return makeAuthorizedPromise(clientApi.UpdateUserData, {\r\n Data: data\r\n });\r\n}\r\n\r\nexport function GetUserInventory() {\r\n return makeAuthorizedPromise(clientApi.GetUserInventory);\r\n}\r\n\r\nexport function PurchaseItem(id, price, currency) {\r\n return makeAuthorizedPromise(clientApi.PurchaseItem, {\r\n ItemId: id,\r\n Price: price,\r\n VirtualCurrency: currency\r\n });\r\n}\r\n\r\nexport function StartPurchase(itemId, quantity, annotation) {\r\n return makeAuthorizedPromise(clientApi.StartPurchase, {\r\n Items: [{\r\n ItemId: itemId,\r\n Quantity: quantity,\r\n Annotation: annotation\r\n }]\r\n });\r\n}\r\n\r\nexport function PayForPurchase(orderId, currency, providerName) {\r\n return makeAuthorizedPromise(clientApi.PayForPurchase, {\r\n OrderId: orderId,\r\n Currency: currency,\r\n ProviderName: providerName\r\n });\r\n}\r\n\r\nexport function ConfirmPurchase(orderId) {\r\n return makeAuthorizedPromise(clientApi.ConfirmPurchase, {\r\n OrderId: orderId\r\n });\r\n}\r\n\r\nexport function ConsumeItem(itemInstanceId, consumeCount) {\r\n return makeAuthorizedPromise(clientApi.ConsumeItem, {\r\n ItemInstanceId: itemInstanceId,\r\n ConsumeCount: consumeCount\r\n });\r\n}\r\n\r\nexport function AddUserVirtualCurrency(amount, virtualCurrency) {\r\n return makeAuthorizedPromise(clientApi.AddUserVirtualCurrency, {\r\n Amount: amount,\r\n VirtualCurrency: virtualCurrency\r\n });\r\n}\r\n\r\n/**\r\n * @template TRequest\r\n * @template TResponse\r\n * @param {(request: TRequest, callback: PlayFabModule.ApiCallback) => any} playFabFunction\r\n * @param {TRequest} [request]\r\n * @returns {Promise}\r\n */\r\nfunction makeAuthorizedPromise(playFabFunction, request) {\r\n if (!clientApi.IsClientLoggedIn()) {\r\n return Promise.reject(\"PlayFab Client is not logged in.\");\r\n }\r\n\r\n return makePromise(playFabFunction, request);\r\n}\r\n\r\n/**\r\n * So, apparently, PlayFab Web SDK is so bad, the promises they are\r\n * returning are not the actual promises for the api calls\r\n * (just take a look inside PlayFabClient.js). This wrapper\r\n * creates proper promises based on the callbacks.\r\n * @template TRequest\r\n * @template TResponse\r\n * @param {(request: TRequest, callback: PlayFabModule.ApiCallback) => any} playFabFunction\r\n * @param {TRequest} [request]\r\n * @returns {Promise}\r\n */\r\nfunction makePromise(playFabFunction, request) {\r\n return new Promise((resolve, reject) => {\r\n playFabFunction(request ?? {}, (data, error) => {\r\n if (!error && data?.data) {\r\n resolve(data.data);\r\n } else {\r\n reject(error ?? data);\r\n }\r\n });\r\n });\r\n}\r\n","import { MAC } from \"@/env\";\r\nimport { openExternalLink } from \"@/utility/open-external-link\";\r\nimport * as PlayFab from \"./bindings/playfab\";\r\n\r\nexport async function loginPlayFabWithSteam(ticket, screenName) {\r\n await PlayFab.LoginWithSteam(ticket);\r\n PlayFab.UpdateUserTitleDisplayName(screenName);\r\n validatePurchases();\r\n syncIAP();\r\n}\r\n\r\nexport async function purchaseIAP(std) {\r\n const itemId = `${std}STD`;\r\n const quantity = 1;\r\n const annotation = \"Purchased via in-game store\";\r\n const order = await PlayFab.StartPurchase(itemId, quantity, annotation);\r\n\r\n const orderId = order.OrderId;\r\n const currency = \"RM\";\r\n const providerName = \"Steam\";\r\n const result = await PlayFab.PayForPurchase(orderId, currency, providerName);\r\n\r\n pendingValidations.push(result.OrderId);\r\n\r\n if (MAC) {\r\n const txnId = result.ProviderData;\r\n openExternalLink(`https://store.steampowered.com/checkout/approvetxn/${txnId}/?returnurl=steam`);\r\n }\r\n}\r\n\r\nlet validateTimeout = 0;\r\nlet pendingValidations = [];\r\nlet isValidating = false;\r\nlet retryValidation = false;\r\n\r\nexport async function validatePurchases() {\r\n if (isValidating) {\r\n retryValidation = true;\r\n return;\r\n }\r\n\r\n clearTimeout(validateTimeout);\r\n isValidating = true;\r\n // Copy pendingValidations, because it will be modified in validatePurchase\r\n const orders = [...pendingValidations];\r\n for (const order of orders) {\r\n try {\r\n await validatePurchase(order);\r\n } catch {\r\n // Do nothing, will be retried.\r\n }\r\n }\r\n isValidating = false;\r\n const timeout = retryValidation ? 0 : 2000;\r\n validateTimeout = setTimeout(validatePurchases, timeout);\r\n retryValidation = false;\r\n}\r\n\r\nasync function validatePurchase(orderId) {\r\n const confirm = await PlayFab.ConfirmPurchase(orderId);\r\n const purchaseName = confirm.Items[0].ItemId;\r\n const purchaseInstance = confirm.Items[0].ItemInstanceId;\r\n\r\n await PlayFab.ConsumeItem(purchaseInstance, 1);\r\n const stdsBought = Number(purchaseName.replace(\"STD\", \"\"));\r\n pendingValidations = pendingValidations.filter(item => item !== orderId);\r\n await PlayFab.AddUserVirtualCurrency(stdsBought, \"ST\");\r\n GameUI.notify.info(`${stdsBought} STDs Obtained!`);\r\n syncIAP();\r\n}\r\n\r\nexport function hasPendingPurchaseConfirmations() {\r\n return MAC && pendingValidations.length > 0;\r\n}\r\n\r\nasync function syncIAP() {\r\n const userInventory = await PlayFab.GetUserInventory();\r\n ShopPurchaseData.totalSTD = userInventory.VirtualCurrency?.ST ?? 0;\r\n for (const key of Object.keys(GameDatabase.shopPurchases)) {\r\n const item = userInventory.Inventory.find(x => x.ItemId === key);\r\n ShopPurchaseData[key] = item?.RemainingUses ?? 0;\r\n }\r\n GameUI.update();\r\n\r\n const userData = await PlayFab.GetUserData();\r\n ShopPurchaseData.unlockedCosmetics = userData.Data.Cosmetics?.Value?.split(\",\") ?? [];\r\n GameUI.update();\r\n}\r\n\r\nexport async function purchaseShopItem(key, cost, cosmeticId) {\r\n await PlayFab.PurchaseItem(key, cost, \"ST\");\r\n if (cosmeticId !== undefined) {\r\n await storeCosmetic(cosmeticId);\r\n }\r\n syncIAP();\r\n}\r\n\r\nasync function storeCosmetic(id) {\r\n const userData = await PlayFab.GetUserData();\r\n const cosmetics = new Set(userData.Data?.Cosmetics?.Value?.split(\",\") ?? []);\r\n cosmetics.add(id);\r\n const updatedCosmetics = [...cosmetics];\r\n await PlayFab.UpdateUserData({\r\n Cosmetics: updatedCosmetics.join(\",\")\r\n });\r\n\r\n ShopPurchaseData.unlockedCosmetics = updatedCosmetics;\r\n GameUI.update();\r\n}\r\n","import { NodeModule } from \"./node-module\";\r\n\r\n/**\r\n * @type {NodeModule}\r\n */\r\nconst module = new NodeModule(\"greenworks\");\r\n\r\nexport function isModuleLoaded() {\r\n return module.isLoaded;\r\n}\r\n\r\nexport function initAPI() {\r\n return module.safeCall(\r\n x => x.initAPI(),\r\n false\r\n );\r\n}\r\n\r\nexport function getSteamId() {\r\n return module.safeCall(\r\n x => x.getSteamId()\r\n );\r\n}\r\n\r\n/**\r\n * @returns {Promise}\r\n */\r\nexport function getAuthSessionTicket() {\r\n return module.makePromise(\r\n (x, resolve, reject) => x.getAuthSessionTicket(resolve, reject)\r\n );\r\n}\r\n\r\n/**\r\n * @returns {Promise}\r\n */\r\nexport function activateAchievement(id) {\r\n return module.makePromise(\r\n (x, resolve, reject) => x.activateAchievement(id, resolve, reject)\r\n );\r\n}\r\n\r\nexport function getAchievementNames() {\r\n return module.safeCall(\r\n x => x.getAchievementNames(),\r\n []\r\n );\r\n}\r\n\r\nexport function initDiscordAPI(clientId, steamGameId) {\r\n return module.safeCall(\r\n x => x.initDiscordAPI(clientId, steamGameId)\r\n );\r\n}\r\n\r\nexport function runDiscordCallbacks() {\r\n return module.safeCall(\r\n x => x.runDiscordCallbacks()\r\n );\r\n}\r\n\r\nexport function on(event, callback) {\r\n return module.safeCall(\r\n x => x.on(event, callback)\r\n );\r\n}\r\n\r\nexport function setDiscordActivity(state, details) {\r\n return module.safeCall(\r\n x => x.setDiscordActivity({\r\n smallImage: \"icon\",\r\n largeImage: \"icon\",\r\n state,\r\n details\r\n })\r\n );\r\n}\r\n\r\n","/* eslint-disable no-console */\r\nimport { RichPresenceInfo } from \"@/core/discord-parser\";\r\n\r\nimport {\r\n hasPendingPurchaseConfirmations,\r\n loginPlayFabWithSteam,\r\n purchaseIAP,\r\n purchaseShopItem,\r\n validatePurchases\r\n} from \"./steam-purchases\";\r\n\r\nimport * as Greenworks from \"./bindings/greenworks\";\r\n\r\nimport { MAC, STEAM } from \"@/env\";\r\n\r\nlet isInitialized = false;\r\nlet isActive = false;\r\nlet achievementNames = [];\r\n\r\nexport const SteamRuntime = {\r\n initialize() {\r\n if (isInitialized) {\r\n throw Error(\"Steam Runtime was initialized already.\");\r\n }\r\n\r\n isInitialized = true;\r\n\r\n if (!STEAM || !Greenworks.isModuleLoaded() || !Greenworks.initAPI()) {\r\n return;\r\n }\r\n\r\n isActive = true;\r\n\r\n const steamId = Greenworks.getSteamId();\r\n loginPlayFab(steamId);\r\n loginFirebase(steamId);\r\n\r\n achievementNames = Greenworks.getAchievementNames();\r\n\r\n Greenworks.on(\"micro-txn-authorization-response\", (data, ordered, orderState) => {\r\n if (orderState === true) {\r\n validatePurchases();\r\n }\r\n });\r\n\r\n if (!MAC) {\r\n initializeDiscord();\r\n createForceRefreshCanvas();\r\n }\r\n },\r\n\r\n get isActive() {\r\n if (!isInitialized) {\r\n throw Error(\"Steam Runtime was called before init.\");\r\n }\r\n\r\n return isActive;\r\n },\r\n\r\n get screenName() {\r\n if (!this.isActive) {\r\n return \"Non-Steam user\";\r\n }\r\n\r\n return Greenworks.getSteamId()?.screenName ?? \"Steam user\";\r\n },\r\n\r\n activateAchievement(id) {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n const name = `Achievement${id}`;\r\n if (!achievementNames.includes(name)) {\r\n return;\r\n }\r\n\r\n Greenworks.activateAchievement(name);\r\n },\r\n\r\n async purchaseIAP(std) {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n await purchaseIAP(std);\r\n },\r\n\r\n validatePurchases() {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n validatePurchases();\r\n },\r\n\r\n async purchaseShopItem(key, cost, cosmeticId) {\r\n if (!this.isActive) {\r\n GameUI.notify.error(\"Shop purchases are not available.\");\r\n return false;\r\n }\r\n\r\n try {\r\n await purchaseShopItem(key, cost, cosmeticId);\r\n return true;\r\n } catch (e) {\r\n GameUI.notify.error(e.errorMessage ?? e);\r\n return false;\r\n }\r\n },\r\n\r\n get hasPendingPurchaseConfirmations() {\r\n if (!this.isActive) {\r\n return false;\r\n }\r\n\r\n return hasPendingPurchaseConfirmations();\r\n }\r\n};\r\n\r\nasync function loginPlayFab(steamId) {\r\n try {\r\n const screenName = steamId.screenName;\r\n const ticket = await Greenworks.getAuthSessionTicket();\r\n await loginPlayFabWithSteam(ticket.ticket.toString(\"hex\"), screenName);\r\n GameUI.notify.info(\"Logged in to PlayFab Cloud\");\r\n } catch (error) {\r\n GameUI.notify.error(\"Couldn't log in to PlayFab Cloud.\");\r\n throw error;\r\n }\r\n}\r\n\r\nasync function loginFirebase(steamId) {\r\n const accountId = steamId.accountId;\r\n const staticAccountId = steamId.staticAccountId;\r\n const screenName = steamId.screenName;\r\n await Cloud.loginWithSteam(accountId, staticAccountId, screenName);\r\n}\r\n\r\nfunction initializeDiscord() {\r\n Greenworks.initDiscordAPI(\"1057439416819396689\", 1399720);\r\n setDiscordActivity();\r\n Greenworks.runDiscordCallbacks();\r\n setInterval(setDiscordActivity, 8000);\r\n setInterval(Greenworks.runDiscordCallbacks, 4000);\r\n}\r\n\r\nfunction setDiscordActivity() {\r\n Greenworks.setDiscordActivity(RichPresenceInfo.state, RichPresenceInfo.details);\r\n}\r\n\r\nfunction createForceRefreshCanvas() {\r\n // This canvas is required for Steam overlay to properly work in Electron.\r\n // Makopaz:\r\n // \"essentially it makes the overlay have a refresh rate, otherwise it only\r\n // updates based on parts of the screen which change, so without it the small\r\n // areas of the screen where antimatter and such increment would be the only\r\n // small portions of the overlay showing.\"\r\n // There should be a less expensive approach. Please create a new issue or\r\n // PR on GitHub if you know one, the planet will say thank you for saving\r\n // megawatts of electricity spent on this canvas.\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.classList.add(\"_steam-refresh-canvas\");\r\n document.body.appendChild(canvas);\r\n const ctx = canvas.getContext(\"2d\");\r\n\r\n function forceRefresh() {\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n window.requestAnimationFrame(forceRefresh);\r\n }\r\n\r\n forceRefresh();\r\n}\r\n","import Mousetrap from \"mousetrap\";\r\n\r\nimport { ElectronRuntime } from \"@/steam\";\r\n\r\nimport { GameKeyboard } from \"./keyboard\";\r\n\r\n// Add your hotkeys and combinations here\r\n// GameKeyboard.bind for single press combinations\r\n// GameKeyboard.bindRepeatable for repeatable combinations\r\n// Hotkeys obey player.options.hotkeys option, and should be everying relating to the functionality of the game itself\r\n// GameKeyboard.bindHotkey for single press hotkeys\r\n// GameKeyboard.bindRepeatableHotkey for repeatable hotkeys\r\n// GameKeyboard class uses Mousetrap under the hood, so for more details visit\r\n// https://craig.is/killing/mice\r\n\r\n// Note: mod is a function key helper by Mousetap for both ctrl and command,\r\n// and should be used to provide support for both Windows and Max\r\n\r\n// Note: DON'T add repeatables with modifier keys other than shift\r\n// because Mousetrap is crap, and we needed to plug it up to work\r\n// properly with shift, so you will need to plug it up additionally\r\n// for the other modifier keys (#3093).\r\n\r\n// Free keys:\r\n// i, j, k, l, o, p, q, v, w, x\r\n\r\n/*Modded Keys: \r\nN: Mending\r\nP: Rapture\r\n*/\r\n\r\n\r\nexport const shortcuts = [\r\n {\r\n name: \"Toggle Autobuyers\",\r\n keys: [\"a\"],\r\n type: \"bindHotkey\",\r\n function: () => keyboardToggleAutobuyers(),\r\n visible: true\r\n }, {\r\n name: \"Buy one Tickspeed\",\r\n keys: [\"shift\", \"t\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => buyTickSpeed(),\r\n visible: true\r\n }, {\r\n name: \"Buy max Tickspeed\",\r\n keys: [\"t\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => buyMaxTickSpeed(),\r\n visible: true\r\n }, {\r\n name: \"Max all\",\r\n keys: [\"m\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => maxAll(),\r\n visible: true\r\n }, {\r\n name: \"Dimensional Sacrifice\",\r\n keys: [\"s\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => sacrificeBtnClick(),\r\n visible: true\r\n }, {\r\n name: \"Dimension Boost\",\r\n keys: [\"d\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => manualRequestDimensionBoost(true),\r\n visible: true\r\n }, {\r\n name: \"Single Dimension Boost\",\r\n keys: [\"shift\", \"d\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => manualRequestDimensionBoost(false),\r\n visible: false\r\n }, {\r\n name: \"Antimatter Galaxy\",\r\n keys: [\"g\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => manualRequestGalaxyReset(true),\r\n visible: true\r\n }, {\r\n name: \"Single Antimatter Galaxy\",\r\n keys: [\"shift\", \"g\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => manualRequestGalaxyReset(false),\r\n visible: false\r\n }, {\r\n name: \"Big Crunch\",\r\n keys: [\"c\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => manualBigCrunchResetRequest(),\r\n visible: true\r\n }, {\r\n name: \"Replicanti Galaxy\",\r\n keys: [\"r\"],\r\n type: \"bindHotkey\",\r\n function: () => {\r\n replicantiGalaxyRequest();\r\n setHoldingR(true);\r\n },\r\n visible: () => Replicanti.areUnlocked || PlayerProgress.eternityUnlocked()\r\n }, {\r\n name: \"Eternity\",\r\n keys: [\"e\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => eternityResetRequest(),\r\n visible: () => PlayerProgress.eternityUnlocked() || Player.canEternity\r\n }, {\r\n name: \"Toggle Time Study respec\",\r\n keys: [\"shift\", \"e\"],\r\n type: \"bindHotkey\",\r\n function: () => {\r\n player.respec = !player.respec;\r\n GameUI.notify.info(`Time Study respec is now ${player.respec ? \"active\" : \"inactive\"}`);\r\n },\r\n visible: () => PlayerProgress.eternityUnlocked()\r\n }, {\r\n name: \"Enter/Exit Dilation\",\r\n keys: [\"l\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => startDilatedEternityRequest(),\r\n visible: () => PlayerProgress.realityUnlocked() || PlayerProgress.dilationUnlocked()\r\n }, {\r\n name: \"Reality\",\r\n keys: [\"y\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => requestManualReality(),\r\n visible: () => PlayerProgress.realityUnlocked() || isRealityAvailable()\r\n }, {\r\n name: \"Toggle Glyph unequip\",\r\n keys: [\"shift\", \"y\"],\r\n type: \"bindHotkey\",\r\n function: () => {\r\n player.reality.respec = !player.reality.respec;\r\n GameUI.notify.info(`Glyph respec is now ${player.reality.respec ? \"active\" : \"inactive\"}`);\r\n },\r\n visible: () => PlayerProgress.realityUnlocked()\r\n }, {\r\n name: \"Start/Pause Automator\",\r\n keys: [\"u\"],\r\n type: \"bindHotkey\",\r\n function: () => keyboardAutomatorToggle(),\r\n visible: () => Player.automatorUnlocked\r\n }, {\r\n name: \"Restart Automator\",\r\n keys: [\"shift\", \"u\"],\r\n type: \"bindHotkey\",\r\n function: () => keyboardAutomatorRestart(),\r\n visible: () => Player.automatorUnlocked\r\n }, {\r\n name: \"Undo Edit (Automator)\",\r\n keys: [\"mod\", \"z\"],\r\n type: \"bind\",\r\n function: () => AutomatorData.undoScriptEdit(),\r\n visible: () => Player.automatorUnlocked\r\n }, {\r\n name: \"Redo Edit (Automator)\",\r\n keys: [\"mod\", \"y\"],\r\n type: \"bind\",\r\n function: () => AutomatorData.redoScriptEdit(),\r\n visible: () => Player.automatorUnlocked\r\n }, {\r\n name: \"Toggle Black Hole\",\r\n keys: [\"b\"],\r\n type: \"bindHotkey\",\r\n function: () => BlackHoles.togglePause(),\r\n visible: () => PlayerProgress.realityUnlocked()\r\n }, {\r\n name: \"Toggle Continuum\",\r\n keys: [\"alt\", \"a\"],\r\n type: \"bindHotkey\",\r\n function: () => keyboardToggleContinuum(),\r\n visible: () => Laitela.continuumUnlocked\r\n }, {\r\n name: \"Armageddon\",\r\n keys: [\"z\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => armageddonRequest(),\r\n visible: () => Pelle.isDoomed\r\n }, {\r\n name: \"Toggle Glyph unequip (Pelle)\",\r\n keys: [\"shift\", \"z\"],\r\n type: \"bindHotkey\",\r\n function: () => {\r\n if (!Pelle.isDoomed) return;\r\n player.reality.respec = !player.reality.respec;\r\n GameUI.notify.info(`Glyph respec is now ${player.reality.respec ? \"active\" : \"inactive\"}`);\r\n },\r\n visible: () => Pelle.isDoomed\r\n }, {\r\n name: \"Save game\",\r\n keys: [\"mod\", \"s\"],\r\n type: \"bind\",\r\n function: () => {\r\n GameStorage.save(false, true);\r\n return false;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Export game\",\r\n keys: [\"mod\", \"e\"],\r\n type: \"bind\",\r\n function: () => {\r\n GameStorage.export();\r\n return false;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Open Hotkey List Modal\",\r\n keys: [\"?\"],\r\n type: \"bind\",\r\n function: () => {\r\n keyboardPressQuestionMark();\r\n return false;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Open How To Play Modal\",\r\n keys: [\"h\"],\r\n type: \"bind\",\r\n function: () => {\r\n keyboardH2PToggle();\r\n return false;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Modify visible tabs\",\r\n keys: [\"tab\"],\r\n type: \"bind\",\r\n function: () => {\r\n keyboardVisibleTabsToggle();\r\n return false;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Confirm Modal\",\r\n keys: [\"enter\"],\r\n type: \"bind\",\r\n function: () => {\r\n EventHub.dispatch(GAME_EVENT.ENTER_PRESSED);\r\n return true;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Close Modal or open Options\",\r\n keys: [\"esc\"],\r\n type: \"bind\",\r\n function: () => {\r\n keyboardPressEscape();\r\n return false;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Paying respects\",\r\n keys: [\"f\"],\r\n type: \"bindRepeatable\",\r\n function: () => {\r\n GameUI.notify.info(\"Paying respects\");\r\n SecretAchievement(13).unlock();\r\n },\r\n visible: false\r\n }, {\r\n name: \"Change Tab\",\r\n keys: [\"up\"],\r\n type: \"bind\",\r\n function: () => {\r\n EventHub.dispatch(GAME_EVENT.ARROW_KEY_PRESSED, \"up\");\r\n return false;\r\n },\r\n visible: false\r\n }, {\r\n name: \"Change Tab\",\r\n keys: [\"down\"],\r\n type: \"bind\",\r\n function: () => {\r\n EventHub.dispatch(GAME_EVENT.ARROW_KEY_PRESSED, \"down\");\r\n return false;\r\n },\r\n visible: false\r\n }, {\r\n name: \"Change Subtab\",\r\n keys: [\"left\"],\r\n type: \"bind\",\r\n function: () => {\r\n EventHub.dispatch(GAME_EVENT.ARROW_KEY_PRESSED, \"left\");\r\n return false;\r\n },\r\n visible: false\r\n }, {\r\n name: \"Change Subtab\",\r\n keys: [\"right\"],\r\n type: \"bind\",\r\n function: () => {\r\n EventHub.dispatch(GAME_EVENT.ARROW_KEY_PRESSED, \"right\");\r\n return false;\r\n },\r\n visible: false\r\n }, {\r\n name: \"Doesn't exist\",\r\n keys: [\"9\"],\r\n type: \"bind\",\r\n function: () => SecretAchievement(41).unlock(),\r\n visible: false\r\n },\r\n {\r\n name: \"Adjust Autobuyers\",\r\n keys: [\"mod\", \"alt\", \"a\"],\r\n type: \"bind\",\r\n function: () => keyboardEditAutobuyers(),\r\n visible: () => Autobuyers.hasAutobuyersForEditModal\r\n },\r\n {\r\n name: \"[Redemption] Mend\",\r\n keys: [\"n\"],\r\n type: \"bind\",\r\n function: () => mendingResetRequest(),\r\n visible: () => true\r\n },\r\n {\r\n name: \"Fullscreen\",\r\n keys: [\"F10\"],\r\n type: \"bind\",\r\n function: () => {},\r\n visible: () => false\r\n },\r\n {\r\n name: \"Zoom In\",\r\n keys: [\"ctrl\", \"=\"],\r\n type: \"bind\",\r\n function: () => ElectronRuntime.increaseZoom(),\r\n visible: () => false\r\n },\r\n {\r\n name: \"Zoom In\",\r\n keys: [\"ctrl\", \"+\"],\r\n type: \"bind\",\r\n function: () => ElectronRuntime.increaseZoom(),\r\n visible: () => false\r\n },\r\n {\r\n name: \"Zoom Out\",\r\n keys: [\"ctrl\", \"-\"],\r\n type: \"bind\",\r\n function: () => ElectronRuntime.decreaseZoom(),\r\n visible: () => false\r\n },\r\n {\r\n name: \"Reset Zoom\",\r\n keys: [\"ctrl\", \"0\"],\r\n type: \"bind\",\r\n function: () => ElectronRuntime.resetZoom(),\r\n visible: () => false\r\n },\r\n];\r\n\r\nfor (const hotkey of shortcuts) {\r\n GameKeyboard[hotkey.type](hotkey.keys.join(\"+\"), hotkey.function);\r\n}\r\n\r\n// We need to know whether the player is holding R or not for the replicanti galaxy\r\n// The keydown version is above, with the replicantiGalaxyRequest, as otherwise it would be overridden\r\nGameKeyboard.bind(\"r\", () => setHoldingR(false), \"keyup\");\r\n\r\n// Same thing with Shift; we need to double-up on ctrl-shift as well since they're technically different keybinds\r\nGameKeyboard.bind(\"shift\", () => setShiftKey(true), \"keydown\");\r\nGameKeyboard.bind(\"shift\", () => setShiftKey(false), \"keyup\");\r\nGameKeyboard.bind(\"ctrl+shift\", () => setShiftKey(true), \"keydown\");\r\nGameKeyboard.bind(\"ctrl+shift\", () => setShiftKey(false), \"keyup\");\r\nGameKeyboard.bind(\"alt+shift\", () => setShiftKey(true), \"keydown\");\r\nGameKeyboard.bind(\"alt+shift\", () => setShiftKey(false), \"keyup\");\r\n\r\n\r\nGameKeyboard.bindHotkey(\"alt+t\", () => toggleAutobuyer(Autobuyer.tickspeed));\r\nGameKeyboard.bindHotkey(\"shift+alt+t\", () => toggleBuySingles(Autobuyer.tickspeed));\r\nGameKeyboard.bindHotkey(\"alt+s\", () => toggleAutobuyer(Autobuyer.sacrifice));\r\nGameKeyboard.bindHotkey(\"alt+d\", () => toggleAutobuyer(Autobuyer.dimboost));\r\nGameKeyboard.bindHotkey(\"alt+g\", () => toggleAutobuyer(Autobuyer.galaxy));\r\nGameKeyboard.bindHotkey(\"alt+r\", () => toggleAutobuyer(Autobuyer.replicantiGalaxy));\r\n\r\nGameKeyboard.bindHotkey(\"alt+c\", () => toggleAutobuyer(Autobuyer.bigCrunch));\r\nGameKeyboard.bindHotkey(\"alt+e\", () => toggleAutobuyer(Autobuyer.eternity));\r\nGameKeyboard.bindHotkey(\"alt+y\", () => toggleAutobuyer(Autobuyer.reality));\r\n\r\n(function() {\r\n function bindDimensionHotkeys(tier) {\r\n GameKeyboard.bindRepeatableHotkey(`${tier}`, () => buyManyDimension(tier));\r\n GameKeyboard.bindRepeatableHotkey(`num${tier}`, () => buyManyDimension(tier));\r\n GameKeyboard.bindRepeatableHotkey(`shift+${tier}`, () => buyOneDimension(tier));\r\n GameKeyboard.bindRepeatableHotkey(`shift+num${tier}`, () => buyOneDimension(tier));\r\n GameKeyboard.bindHotkey(`alt+${tier}`, () => toggleAutobuyer(Autobuyer.antimatterDimension(tier)));\r\n GameKeyboard.bindHotkey(`alt+num${tier}`, () => toggleAutobuyer(Autobuyer.antimatterDimension(tier)));\r\n GameKeyboard.bindHotkey(`shift+alt+${tier}`, () => toggleBuySingles(Autobuyer.antimatterDimension(tier)));\r\n GameKeyboard.bindHotkey(`shift+alt+num${tier}`, () => toggleBuySingles(Autobuyer.antimatterDimension(tier)));\r\n }\r\n for (let i = 1; i < 9; i++) bindDimensionHotkeys(i);\r\n}());\r\n\r\n// A few special GameKeyboards\r\nGameKeyboard.bind(\r\n [\"mod+shift+c\", \"mod+shift+i\", \"mod+shift+j\", \"f12\"],\r\n () => SecretAchievement(23).unlock()\r\n);\r\n\r\n// Toggle autobuyers\r\nfunction toggleAutobuyer(buyer) {\r\n // Autobuyer.tickspeed.isUnlocked is false without NC9, but we still want the simpler one to be togglable via hotkey\r\n const isSimpleTickspeed = buyer === Autobuyer.tickspeed && buyer.isBought;\r\n if (buyer.disabledByContinuum) {\r\n GameUI.notify.info(\"Continuum is enabled, you cannot alter this autobuyer\");\r\n } else if (buyer.isUnlocked || isSimpleTickspeed) {\r\n buyer.toggle();\r\n GameUI.notify.info(`${buyer.name} Autobuyer toggled ${(buyer.isActive) ? \"on\" : \"off\"}`);\r\n }\r\n return false;\r\n}\r\n\r\nfunction toggleBuySingles(buyer) {\r\n if (buyer.disabledByContinuum) {\r\n GameUI.notify.info(\"Continuum is enabled, you cannot alter this autobuyer\");\r\n } else if (buyer.isUnlocked && buyer.toggleMode !== null) {\r\n buyer.toggleMode();\r\n const bulkName = (buyer.name === \"Tickspeed\" || buyer.hasUnlimitedBulk) ? \"max\" : \"10\";\r\n GameUI.notify.info(`${buyer.name} Autobuyer set to buy ${(buyer.mode === 1) ? \"singles\" : bulkName}`);\r\n }\r\n return false;\r\n}\r\n\r\nfunction keyboardToggleAutobuyers() {\r\n if (Tab.automation.isUnlocked) {\r\n Autobuyers.toggle();\r\n GameUI.notify.info(`Autobuyers ${player.auto.autobuyersOn ? \"resumed\" : \"paused\"}`);\r\n }\r\n}\r\n\r\nfunction keyboardToggleContinuum() {\r\n if (!Laitela.continuumUnlocked) return;\r\n if (ImaginaryUpgrade(21).isLockingMechanics && player.auto.disableContinuum) {\r\n ImaginaryUpgrade(21).tryShowWarningModal();\r\n return;\r\n }\r\n // This is a toggle despite the lack of !, because player.auto.disableContinuum\r\n // is negated compared to whether continuum is on.\r\n Laitela.setContinuum(player.auto.disableContinuum);\r\n GameUI.notify.info(`${(player.auto.disableContinuum) ? \"Disabled\" : \"Enabled\"} Continuum`);\r\n}\r\n\r\nfunction keyboardAutomatorToggle() {\r\n // Automator must be unlocked\r\n if (Player.automatorUnlocked) {\r\n if (AutomatorBackend.isRunning) {\r\n AutomatorBackend.pause();\r\n } else if (AutomatorBackend.isOn) {\r\n AutomatorBackend.mode = AUTOMATOR_MODE.RUN;\r\n } else {\r\n // Only attempt to start the visible script instead of the existing script if it isn't already running\r\n const visibleIndex = player.reality.automator.state.editorScript;\r\n AutomatorBackend.restart();\r\n AutomatorBackend.start(visibleIndex);\r\n if (AutomatorData.currentErrors().length === 0) {\r\n GameUI.notify.automator(`Starting script \"${AutomatorBackend.scriptName}\"`);\r\n } else {\r\n GameUI.notify.error(`Cannot start script \"${AutomatorBackend.scriptName}\" (has errors)`);\r\n }\r\n return;\r\n }\r\n const action = AutomatorBackend.isRunning ? \"Resuming\" : \"Pausing\";\r\n const linenum = AutomatorBackend.currentLineNumber;\r\n GameUI.notify.automator(`${action} script \"${AutomatorBackend.scriptName}\" at line ${linenum}`);\r\n }\r\n}\r\n\r\nfunction keyboardAutomatorRestart() {\r\n if (Player.automatorUnlocked) {\r\n const action = AutomatorBackend.isOn ? \"Restarting\" : \"Starting\";\r\n GameUI.notify.automator(`${action} script \"${AutomatorBackend.scriptName}\"`);\r\n\r\n AutomatorBackend.restart();\r\n AutomatorBackend.start();\r\n }\r\n}\r\n\r\nfunction armageddonRequest() {\r\n if (!Pelle.canArmageddon) return;\r\n Pelle.armageddon(true);\r\n}\r\n\r\nfunction keyboardPressEscape() {\r\n if (Quote.isOpen || Quote.isHistoryOpen) Quote.clearAll();\r\n else if (Modal.isOpen) Modal.hideAll();\r\n else Tab.options.show(true);\r\n}\r\n\r\nfunction keyboardPressQuestionMark() {\r\n if (Modal.hotkeys.isOpen) {\r\n EventHub.dispatch(GAME_EVENT.CLOSE_MODAL);\r\n return;\r\n }\r\n if (Modal.isOpen) Modal.hideAll();\r\n Modal.hotkeys.show();\r\n}\r\n\r\nfunction keyboardH2PToggle() {\r\n if (Modal.h2p.isOpen) {\r\n EventHub.dispatch(GAME_EVENT.CLOSE_MODAL);\r\n return;\r\n }\r\n if (Modal.isOpen) Modal.hideAll();\r\n Modal.h2p.show();\r\n}\r\n\r\nfunction keyboardEditAutobuyers() {\r\n if (Modal.autobuyerEditModal.isOpen) {\r\n EventHub.dispatch(GAME_EVENT.CLOSE_MODAL);\r\n return;\r\n }\r\n if (!Autobuyers.hasAutobuyersForEditModal) return;\r\n if (Modal.isOpen) Modal.hideAll();\r\n Modal.autobuyerEditModal.show();\r\n}\r\n\r\nfunction keyboardVisibleTabsToggle() {\r\n if (Modal.hiddenTabs.isOpen) {\r\n EventHub.dispatch(GAME_EVENT.CLOSE_MODAL);\r\n return;\r\n }\r\n if (Modal.isOpen) Modal.hideAll();\r\n Modal.hiddenTabs.show();\r\n}\r\n\r\nEventHub.logic.on(GAME_EVENT.ARROW_KEY_PRESSED, direction => {\r\n if (Quote.isOpen || Quote.isHistoryOpen) return;\r\n // Current tabs. Defined here as both tab and subtab movements require knowing your current tab.\r\n const currentTab = Tabs.current.key;\r\n if (direction[0] === \"up\" || direction[0] === \"down\") {\r\n // Make an array of the keys of all the unlocked and visible tabs\r\n const tabs = Tabs.currentUIFormat.flatMap(i => (i.isAvailable ? [i.key] : []));\r\n // Find the index of the tab we are on\r\n let top = tabs.indexOf(currentTab);\r\n // Move in the desired direction\r\n if (direction[0] === \"up\") top--;\r\n else top++;\r\n // Loop around if needed\r\n top = (top + tabs.length) % tabs.length;\r\n // And now we go there.\r\n Tab[tabs[top]].show(true);\r\n } else if (direction[0] === \"left\" || direction[0] === \"right\") {\r\n // Current subtabs\r\n const currentSubtab = Tabs.current._currentSubtab.key;\r\n // Make an array of the keys of all the unlocked and visible subtabs\r\n const subtabs = Tabs.current.subtabs.flatMap(i => (i.isAvailable ? [i.key] : []));\r\n // Find the index of the subtab we are on\r\n let sub = subtabs.indexOf(currentSubtab);\r\n // Move in the desired direction\r\n if (direction[0] === \"left\") sub--;\r\n else sub++;\r\n // Loop around if needed\r\n sub = (sub + subtabs.length) % subtabs.length;\r\n // And now we go there.\r\n Tab[currentTab][subtabs[sub]].show(true);\r\n }\r\n});\r\n\r\nconst konamiCode = [\"up\", \"up\", \"down\", \"down\", \"left\", \"right\", \"left\", \"right\", \"b\", \"a\", \"enter\"];\r\nlet konamiStep = 0;\r\n\r\nfunction testKonami(character) {\r\n if (SecretAchievement(17).isUnlocked) return;\r\n // This conditional is structured weirdly in order to make sure more than 2 consecutive \"up\" inputs doesn't\r\n // reset the sequence state unnecessarily, and that interrupting the sequence later on with the starting\r\n // input will correctly set the state to one step in\r\n if (konamiCode[konamiStep] === character) konamiStep++;\r\n else if (konamiStep === 2 && character === \"up\") konamiStep = 2;\r\n else if (character === konamiCode[0]) konamiStep = 1;\r\n else konamiStep = 0;\r\n if (konamiCode.length <= konamiStep) {\r\n SecretAchievement(17).unlock();\r\n Currency.antimatter.bumpTo(30);\r\n Speedrun.startTimer();\r\n }\r\n}\r\n\r\n// Remember that Mousetrap handles the backend for GameKeyboard\r\n// Without this, Mousetrap become confused when the \"up\" key is pressed, as it is the starting key of a sequence\r\n// and an individual key. To allow both the up keybind and the konami code to work, we will change how Mousetrap handles\r\n// all keys so the konami code functions entirely separately from the normal handling.\r\nconst originalHandleKey = Mousetrap.prototype.handleKey;\r\nMousetrap.prototype.handleKey = function(character, modifiers, e) {\r\n if (e.type === \"keydown\") testKonami(character);\r\n return originalHandleKey.apply(this, [character, modifiers, e]);\r\n};\r\n","import { BitPurchasableMechanicState, RebuyableMechanicState } from \"./game-mechanics\";\r\n\r\nclass CorruptionUpgradeState extends BitPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.registerEvents(config.checkEvent, () => this.tryUnlock());\r\n }\r\n get isBought() {\r\n return (this.bits & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set isBought(value) {\r\n if (value) {\r\n this.bits |= (1 << this.bitIndex);\r\n } else {\r\n this.bits &= ~(1 << this.bitIndex);\r\n }\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get shortDescription() {\r\n return this.config.shortDescription ? this.config.shortDescription() : \"\";\r\n }\r\n\r\n get requirement() {\r\n return typeof this.config.requirement === \"function\" ? this.config.requirement() : this.config.requirement;\r\n }\r\n\r\n get lockEvent() {\r\n return typeof this.config.lockEvent === \"function\" ? this.config.lockEvent() : this.config.lockEvent;\r\n }\r\n\r\n get currency() {\r\n return Currency.corruptionFragments;\r\n }\r\n\r\n get bitIndex() {\r\n return this.id;\r\n }\r\n\r\n get bits() {\r\n return player.mending.corruptionUpgradeBits;\r\n }\r\n\r\n set bits(value) {\r\n player.mending.corruptionUpgradeBits = value;\r\n }\r\n\r\n get hasPlayerLock() {\r\n return (player.mending.reqLock.corruption & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set hasPlayerLock(value) {\r\n if (value) player.mending.reqLock.corruption |= 1 << this.bitIndex;\r\n else player.mending.reqLock.corruption &= ~(1 << this.bitIndex);\r\n }\r\n\r\n get isLockingMechanics() {\r\n const shouldBypass = this.config.bypassLock?.() ?? false;\r\n return this.hasPlayerLock && this.isPossible && !shouldBypass && !this.isAvailableForPurchase;\r\n }\r\n\r\n // Required to be changed this way to avoid direct prop mutation in Vue components\r\n setMechanicLock(value) {\r\n this.hasPlayerLock = value;\r\n }\r\n\r\n toggleMechanicLock() {\r\n this.hasPlayerLock = !this.hasPlayerLock;\r\n }\r\n\r\n // Note we don't actually show the modal if we already failed or unlocked it\r\n tryShowWarningModal(specialLockText) {\r\n if (this.isPossible && !this.isAvailableForPurchase) {\r\n Modal.upgradeLock.show({ upgrade: this, isImaginary: false, specialLockText });\r\n }\r\n }\r\n\r\n respecCorruptionUpgrades() {\r\n Currency.corruptionFragments.respecCall()\r\n player.mending.corruptionUpgradeBits = 0\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return true;\r\n }\r\n\r\n get isPossible() {\r\n return this.config.hasFailed ? !this.config.hasFailed() : true;\r\n }\r\n\r\n tryUnlock() {\r\n const isCorrupted = player.mending.corruptionChallenge.corruptedMend;\r\n if (!isCorrupted || this.isAvailableForPurchase || !this.config.checkRequirement()) return;\r\n player.mending.corruptionUpgReqs |= (1 << this.id);\r\n GameUI.notify.reality(`You've unlocked a Corruption Upgrade: ${this.config.name}`);\r\n this.hasPlayerLock = false;\r\n }\r\n\r\n onPurchased() {\r\n EventHub.dispatch(GAME_EVENT.CORRUPTION_UPGRADE_BOUGHT);\r\n const id = this.id;\r\n // insert code here\r\n GameCache.staticGlyphWeights.invalidate();\r\n }\r\n}\r\n\r\nclass RebuyableCorruptionUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.corruptionFragments;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.mending.corruptionRebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.mending.corruptionRebuyables[this.id] = value;\r\n }\r\n}\r\n\r\nCorruptionUpgradeState.index = mapGameData(\r\n GameDatabase.mending.corruptionUpgrades,\r\n config => (config.id < 0\r\n ? new RebuyableCorruptionUpgradeState(config)\r\n : new CorruptionUpgradeState(config))\r\n);\r\n\r\n/**\r\n * @param {number} id\r\n * @return {CorruptionUpgradeState|RebuyableCorruptionUpgradeState}\r\n */\r\nexport const CorruptionUpgrade = id => CorruptionUpgradeState.index[id];\r\n\r\nexport const CorruptionUpgrades = {\r\n /**\r\n * @type {(CorruptionUpgradeState|RebuyableCorruptionUpgradeState)[]}\r\n */\r\n all: CorruptionUpgradeState.index.compact(),\r\n get allBought() {\r\n return (player.mending.corruptionUpgradeBits >> 6) + 1 === 1 << (GameDatabase.mending.corruptionUpgrades.length - 5);\r\n }\r\n};\r\n","import { CorruptionUpgrade } from \"./corruption-upgrades\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nexport const GALAXY_TYPE = {\r\n NORMAL: 0,\r\n DISTANT: 1,\r\n REMOTE: 2,\r\n THIRD: 3\r\n};\r\n\r\nclass GalaxyRequirement {\r\n constructor(tier, amount) {\r\n this.tier = tier;\r\n this.amount = amount;\r\n }\r\n\r\n get isSatisfied() {\r\n const dimension = AntimatterDimension(this.tier);\r\n return dimension.totalAmount.gte(this.amount);\r\n }\r\n}\r\n\r\nexport class Galaxy {\r\n static get scalingThreeStart(){\r\n let x = (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(5).completions >= 1 && !Pelle.isDoomed) ? EternityChallenge(5).vReward.effectValue : 0;\r\n return 750000 + (5000 * MendingUpgrade(16).boughtAmount) + CorruptionUpgrade(9).effectOrDefault(0) + x;\r\n }\r\n static get remoteStart() {\r\n return MendingUpgrade(17).isBought ? Infinity : RealityUpgrade(21).effectOrDefault(800);\r\n }\r\n\r\n static get requirement() {\r\n return this.requirementAt(player.galaxies);\r\n }\r\n\r\n /**\r\n * Figure out what galaxy number we can buy up to\r\n * @param {number} currency Either dim 8 or dim 6, depends on current challenge\r\n * @returns {number} Max number of galaxies (total)\r\n */\r\n static buyableGalaxies(currency) {\r\n let bulk = null;\r\n try{\r\n bulk = bulkBuyBinarySearch(new Decimal(currency), {\r\n costFunction: x => this.requirementAt(x).amount,\r\n cumulative: false,\r\n }, player.galaxies);\r\n }\r\n catch{\r\n return 1e9;\r\n }\r\n if (!bulk) throw new Error(\"Unexpected failure to calculate galaxy purchase\");\r\n return player.galaxies + bulk.quantity;\r\n }\r\n\r\n static requirementAt(galaxies) {\r\n let amount = Galaxy.baseCost + (galaxies * Galaxy.costMult);\r\n\r\n const type = Galaxy.typeAt(galaxies);\r\n\r\n if (type === GALAXY_TYPE.DISTANT && EternityChallenge(5).isRunning) {\r\n amount += Math.pow(galaxies, 2) + galaxies;\r\n } else if (type === GALAXY_TYPE.DISTANT || type === GALAXY_TYPE.REMOTE) {\r\n const galaxyCostScalingStart = this.costScalingStart;\r\n const galaxiesBeforeDistant = Math.clampMin(galaxies - galaxyCostScalingStart + 1, 0);\r\n amount += Math.pow(galaxiesBeforeDistant, 2) + galaxiesBeforeDistant;\r\n }\r\n\r\n if (type === GALAXY_TYPE.REMOTE) {\r\n amount *= Math.pow(1.002, galaxies - (Galaxy.remoteStart - 1));\r\n }\r\n\r\n if (type === GALAXY_TYPE.THIRD) {\r\n /* This seems like a shit ton of math, so let me break it down:\r\n First, we find out what polynomial we want (whether we want quartic (4th degree), quintic (5th degree) or hextic (6th degree))\r\n From there, we do the polynomial that is equal to doing (b += a; c += b; d += c... (where the last letter is the nth degree + 1 in the alphabet))\r\n where all numbers start at 2. In the case of hextic, its x^6/360 + x^5/24 + 17x^4/72 + 5x^3/8 + 137x^2/180 + x/3\r\n In the case of quintic, it is x^5/60 + x^4/12 + x^3/12 - x^2/12 - x/10\r\n In the case of quartic, it is x^4/12 + x^3/2 + 11x^2/12 + x/2\r\n */\r\n let polynomialLvl = 6\r\n if (WarpUpgrade(4).isBought) { polynomialLvl -= 1 }\r\n if (WarpUpgrade(11).isBought) { polynomialLvl -= 1 }\r\n if (polynomialLvl == 6) {\r\n let n = Math.max(galaxies - Galaxy.scalingThreeStart, 0);\r\n let a = n ** 6;\r\n let b = 15 * (n ** 5);\r\n let c = 85 * (n ** 4);\r\n let d = 225 * (n ** 3);\r\n let e = 274 * (n ** 2)\r\n amount += (a + b + c + d + e + (120 * n)) / 360;\r\n }\r\n if (polynomialLvl == 5) {\r\n let n = Math.max(galaxies - Galaxy.scalingThreeStart, 0);\r\n let a = n ** 5;\r\n let b = 5 * (n ** 4);\r\n let c = 5 * (n ** 3);\r\n let d = 5 * (n ** 2);\r\n amount += (a + b + c - d - (6 * n)) / 60;\r\n }\r\n if (polynomialLvl == 4) {\r\n let n = Math.max(galaxies - Galaxy.scalingThreeStart, 0);\r\n let a = n ** 4;\r\n let b = 6 * (n ** 3);\r\n let c = 11 * (n ** 2);\r\n amount += (a + b + c + (6 * n)) / 12;\r\n }\r\n //amount *= Math.pow(Math.pow(1.002, galaxies - (Galaxy.scalingThreeStart - 1)), 2);\r\n }\r\n\r\n amount -= Effects.sum(InfinityUpgrade.resetBoost);\r\n if (InfinityChallenge(5).isCompleted) amount -= 1;\r\n\r\n if (GlyphAlteration.isAdded(\"power\")) amount *= getSecondaryGlyphEffect(\"powerpow\");\r\n\r\n amount = Math.floor(amount);\r\n\r\n //how do I understand galaxy scaling harder......I'll just let amount powered here--sxy\r\n if (player.mending.corruptionChallenge.corruptedMend&&type !== GALAXY_TYPE.NORMAL) {\r\n let galWeakScaling = corruptionPenalties.galWeak.scaling[player.mending.corruption[3]];\r\n if(CorruptionUpgrade(19).isBought) galWeakScaling = Math.pow(galWeakScaling,0.5)\r\n amount = Math.floor(amount**(galWeakScaling))\r\n }\r\n\r\n const tier = Galaxy.requiredTier;\r\n return new GalaxyRequirement(tier, amount);\r\n }\r\n\r\n static get costMult() {\r\n return Effects.min(NormalChallenge(10).isRunning ? 90 : 60, TimeStudy(42));\r\n }\r\n\r\n static get baseCost() {\r\n return NormalChallenge(10).isRunning ? 99 : 80;\r\n }\r\n\r\n static get requiredTier() {\r\n return NormalChallenge(10).isRunning ? 6 : 8;\r\n }\r\n\r\n static get canBeBought() {\r\n if (EternityChallenge(6).isRunning && !Enslaved.isRunning) return false;\r\n if (NormalChallenge(8).isRunning || InfinityChallenge(7).isRunning) return false;\r\n if (player.records.thisInfinity.maxAM.gt(Player.infinityGoal) &&\r\n (!player.break || Player.isInAntimatterChallenge)) return false;\r\n return true;\r\n }\r\n\r\n static get lockText() {\r\n if (this.canBeBought) return null;\r\n if (EternityChallenge(6).isRunning) return \"Locked (Eternity Challenge 6)\";\r\n if (InfinityChallenge(7).isRunning) return \"Locked (Infinity Challenge 7)\";\r\n if (InfinityChallenge(1).isRunning) return \"Locked (Infinity Challenge 1)\";\r\n if (NormalChallenge(8).isRunning) return \"Locked (8th Antimatter Dimension Autobuyer Challenge)\";\r\n return null;\r\n }\r\n\r\n static get costScalingStart() {\r\n let x = 100 + TimeStudy(302).effectOrDefault(0) + Effects.sum(\r\n TimeStudy(223),\r\n TimeStudy(224),\r\n GlyphSacrifice.power\r\n );\r\n if(EternityChallenge(5).completions >= 1) x += EternityChallenge(5).reward.effectValue;\r\n return x;\r\n }\r\n\r\n static get type() {\r\n return this.typeAt(player.galaxies);\r\n }\r\n\r\n static typeAt(galaxies) {\r\n if (galaxies >= Galaxy.scalingThreeStart) {\r\n return GALAXY_TYPE.THIRD;\r\n }\r\n if (galaxies >= Galaxy.remoteStart) {\r\n return GALAXY_TYPE.REMOTE;\r\n }\r\n if (EternityChallenge(5).isRunning || galaxies >= this.costScalingStart) {\r\n return GALAXY_TYPE.DISTANT;\r\n }\r\n return GALAXY_TYPE.NORMAL;\r\n }\r\n}\r\n\r\nfunction galaxyReset() {\r\n EventHub.dispatch(GAME_EVENT.GALAXY_RESET_BEFORE);\r\n player.galaxies++;\r\n if (!Achievement(143).isUnlocked || (Pelle.isDoomed && !PelleUpgrade.galaxyNoResetDimboost.canBeApplied)) {\r\n player.dimensionBoosts = 0;\r\n }\r\n softReset(0);\r\n if (Notations.current === Notation.emoji) player.requirementChecks.permanent.emojiGalaxies++;\r\n // This is specifically reset here because the check is actually per-galaxy and not per-infinity\r\n player.requirementChecks.infinity.noSacrifice = true;\r\n EventHub.dispatch(GAME_EVENT.GALAXY_RESET_AFTER);\r\n}\r\n\r\nexport function manualRequestGalaxyReset(bulk) {\r\n if (!Galaxy.canBeBought || !Galaxy.requirement.isSatisfied) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n if (RealityUpgrade(7).isLockingMechanics && player.galaxies > 0) {\r\n RealityUpgrade(7).tryShowWarningModal();\r\n return;\r\n }\r\n if (player.options.confirmations.antimatterGalaxy) {\r\n Modal.antimatterGalaxy.show({ bulk: bulk && EternityMilestone.autobuyMaxGalaxies.isReached });\r\n return;\r\n }\r\n requestGalaxyReset(bulk);\r\n}\r\n\r\n// All galaxy reset requests, both automatic and manual, eventually go through this function; therefore it suffices\r\n// to restrict galaxy count for RUPG7's requirement here and nowhere else\r\nexport function requestGalaxyReset(bulk, limit = Number.MAX_VALUE) {\r\n const restrictedLimit = RealityUpgrade(7).isLockingMechanics ? 1 : limit;\r\n if (EternityMilestone.autobuyMaxGalaxies.isReached && bulk) return maxBuyGalaxies(restrictedLimit);\r\n if (player.galaxies >= restrictedLimit || !Galaxy.canBeBought || !Galaxy.requirement.isSatisfied) return false;\r\n Tutorial.turnOffEffect(TUTORIAL_STATE.GALAXY);\r\n galaxyReset();\r\n return true;\r\n}\r\n\r\nfunction maxBuyGalaxies(limit = Number.MAX_VALUE) {\r\n if (player.galaxies >= limit || !Galaxy.canBeBought) return false;\r\n // Check for ability to buy one galaxy (which is pretty efficient)\r\n const req = Galaxy.requirement;\r\n if (!req.isSatisfied) return false;\r\n const dim = AntimatterDimension(req.tier);\r\n const newGalaxies = Math.clampMax(\r\n Galaxy.buyableGalaxies(Math.round(dim.totalAmount.toNumber())),\r\n limit);\r\n if (Notations.current === Notation.emoji) {\r\n player.requirementChecks.permanent.emojiGalaxies += newGalaxies - player.galaxies;\r\n }\r\n // Galaxy count is incremented by galaxyReset(), so add one less than we should:\r\n player.galaxies = newGalaxies - 1;\r\n galaxyReset();\r\n if (Enslaved.isRunning && player.galaxies > 1) EnslavedProgress.c10.giveProgress();\r\n Tutorial.turnOffEffect(TUTORIAL_STATE.GALAXY);\r\n return true;\r\n}\r\n","import { GameDatabase } from \"./secret-formula/game-database\";\r\n\r\nclass AwayProgress {\r\n constructor(config) {\r\n this.name = config.name;\r\n this.forcedName = config.forcedName;\r\n this.isUnlocked = () => config.isUnlocked() || player.records.fullGameCompletions > 0;\r\n this.awayOption = config.awayOption ?? this.name;\r\n this.showOption = config.showOption ?? true;\r\n // This is an array of strings, each one the name of the next entry in the player object to navigate to\r\n // If there is no reference, it is accessed directly by the name through the player object.\r\n this.reference = config.reference ?? [this.name];\r\n // Most of the entries in offline progress are props which can be directly read from the player object, but eg. for\r\n // achievements the raw data is an array of bitmasks. This structure allows generic support for indirect values.\r\n this.applyFn = config.applyFn ?? (x => x);\r\n this.classObjectReference = config.classObjectReference ?? this.name;\r\n this.appearsInAwayModal = config.appearsInAwayModal ?? true;\r\n }\r\n\r\n get option() {\r\n return player.options.awayProgress[this.awayOption];\r\n }\r\n\r\n set option(value) {\r\n player.options.awayProgress[this.awayOption] = value;\r\n }\r\n\r\n get classObject() {\r\n // Format the camelCase name to kebab-case\r\n return `c-modal-away-progress__${\r\n this.classObjectReference.replace(/[A-Z]/gu, match => `-${match.toLowerCase()}`)\r\n }`;\r\n }\r\n\r\n get formatName() {\r\n if (this.forcedName) return this.forcedName;\r\n // Format the camelCase name to Title Case, with spaces added before the capital letters\r\n return this.name\r\n .replace(/[A-Z]/gu, match => ` ${match}`)\r\n .replace(/^\\w/u, c => c.toUpperCase());\r\n }\r\n\r\n // Pass in player object. Navigate to there using each reference point. Return the place you arrived at.\r\n navigateTo(from) {\r\n let place = from;\r\n for (const goTo of this.reference) {\r\n place = place[goTo];\r\n }\r\n return this.applyFn(place);\r\n }\r\n}\r\n\r\nexport const AwayProgressTypes = {\r\n all: {},\r\n index: [],\r\n showOption: [],\r\n appearsInAwayModal: [],\r\n};\r\n\r\nfor (let index = 0; index < GameDatabase.awayProgressTypes.length; index++) {\r\n const entry = new AwayProgress(GameDatabase.awayProgressTypes[index]);\r\n const name = entry.name;\r\n AwayProgressTypes.all[name] = entry;\r\n AwayProgressTypes.index.push(name);\r\n if (entry.showOption) AwayProgressTypes.showOption.push(name);\r\n if (entry.appearsInAwayModal) AwayProgressTypes.appearsInAwayModal.push(name);\r\n}\r\n","import { GameDatabase } from \"./secret-formula/game-database\";\r\n\r\nclass ConfirmationState {\r\n constructor(config) {\r\n this.name = config.name;\r\n this._confirmationSetting = config.option;\r\n this.isUnlocked = () => config.isUnlocked() || player.records.fullGameCompletions > 0;\r\n }\r\n\r\n get option() {\r\n return player.options.confirmations[this._confirmationSetting];\r\n }\r\n\r\n set option(value) {\r\n player.options.confirmations[this._confirmationSetting] = value;\r\n }\r\n}\r\n\r\nexport const ConfirmationTypes = GameDatabase.confirmationTypes.mapToObject(\r\n config => config.option,\r\n config => new ConfirmationState(config)\r\n);\r\n\r\nConfirmationTypes.index = Object.values(ConfirmationTypes);\r\n","/**\r\n * @abstract\r\n */\r\nexport class AutobuyerState {\r\n constructor(id = null) {\r\n this._id = id;\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get data() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get isUnlocked() { throw new NotImplementedError(); }\r\n\r\n get id() { return this._id; }\r\n\r\n get canTick() {\r\n const isDisabled = !player.auto.autobuyersOn || !this.constructor.isActive;\r\n return this.isActive && !isDisabled && (this.isUnlocked || this.isBought);\r\n }\r\n\r\n get isActive() {\r\n return this.data.isActive;\r\n }\r\n\r\n set isActive(value) {\r\n this.data.isActive = value;\r\n }\r\n\r\n get bulk() {\r\n return 1;\r\n }\r\n\r\n toggle() {\r\n this.isActive = !this.isActive;\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n tick() { throw new NotImplementedError(); }\r\n\r\n // eslint-disable-next-line no-empty-function\r\n reset() { }\r\n\r\n static get entryCount() { return 1; }\r\n\r\n /**\r\n * @abstract\r\n * @returns {string}\r\n */\r\n static get autobuyerGroupName() { throw new NotImplementedError(); }\r\n static get isActive() { return true; }\r\n /** @abstract */\r\n static set isActive(value) { throw new NotImplementedError(); }\r\n\r\n static createAccessor() {\r\n const entryCount = this.entryCount;\r\n /** @type {object[]} */\r\n const zeroIndexed = Array.range(1, entryCount).map(id => new this(id));\r\n const oneIndexed = [null, ...zeroIndexed];\r\n /** @param {number} id */\r\n const accessor = id => oneIndexed[id];\r\n Object.defineProperties(accessor, {\r\n oneIndexed: { get: () => oneIndexed },\r\n zeroIndexed: { get: () => zeroIndexed },\r\n entryCount: { get: () => entryCount },\r\n anyUnlocked: { get: () => zeroIndexed.some(x => x.isUnlocked) },\r\n allUnlocked: { get: () => zeroIndexed.every(x => x.isUnlocked) },\r\n allActive: { get: () => zeroIndexed.every(x => x.isActive) },\r\n groupName: { get: () => this.autobuyerGroupName },\r\n isActive: {\r\n get: () => this.isActive,\r\n set: value => { this.isActive = value; },\r\n },\r\n });\r\n accessor.toggle = () => this.isActive = !this.isActive;\r\n return accessor;\r\n }\r\n}\r\n\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class IntervaledAutobuyerState extends AutobuyerState {\r\n get interval() {\r\n if (this.data.interval instanceof Decimal) {\r\n this.data.interval = this.data.interval.toNumber()\r\n }\r\n return this.data.interval;\r\n }\r\n\r\n get canTick() {\r\n if (this.timeSinceLastTick instanceof Decimal) {\r\n throw new Error(\"mfw timeSinceLastTick is decimal?\")\r\n }\r\n if (this.interval instanceof Decimal) {\r\n throw new Error(\"mfw interval is decimal?\")\r\n }\r\n return super.canTick && this.timeSinceLastTick >= this.interval;\r\n }\r\n\r\n get timeSinceLastTick() {\r\n if (this.data.lastTick instanceof Decimal) {\r\n throw new Error(\"mfw lastTick is decimal?\")\r\n }\r\n return player.records.realTimePlayed - this.data.lastTick;\r\n }\r\n\r\n tick() {\r\n this.data.lastTick = player.records.realTimePlayed;\r\n if (this.data.lastTick instanceof Decimal) {\r\n throw new Error(\"mfw realTimePlayed is decimal?\")\r\n }\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get resetTickOn() { return undefined; }\r\n\r\n resetTick(prestigeEvent) {\r\n if (prestigeEvent >= this.resetTickOn) this.data.lastTick = 0;\r\n }\r\n\r\n // eslint-disable-next-line no-empty-function\r\n reset() { }\r\n}\r\n\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class UpgradeableAutobuyerState extends IntervaledAutobuyerState {\r\n /**\r\n * @abstract\r\n */\r\n get baseInterval() { throw new NotImplementedError(); }\r\n\r\n get cost() {\r\n return this.data.cost;\r\n }\r\n\r\n get interval() {\r\n const interval = this.data.interval;\r\n return BreakInfinityUpgrade.autobuyerSpeed.isBought ? interval / 2 : interval;\r\n }\r\n\r\n get hasMaxedInterval() {\r\n return this.data.interval <= 100;\r\n }\r\n\r\n upgradeInterval(free) {\r\n if (this.hasMaxedInterval) return;\r\n if (!free && !Currency.infinityPoints.purchase(this.cost)) return;\r\n this.data.cost *= 2;\r\n this.data.interval = Math.clampMin(this.data.interval * 0.6, 100);\r\n Achievement(52).tryUnlock();\r\n Achievement(53).tryUnlock();\r\n GameUI.update();\r\n }\r\n\r\n maxIntervalForFree() {\r\n while (!this.hasMaxedInterval) {\r\n this.upgradeInterval(true);\r\n }\r\n }\r\n\r\n reset() {\r\n if (EternityMilestone.keepAutobuyers.isReached || PelleUpgrade.keepAutobuyers.canBeApplied) return;\r\n this.data.interval = this.baseInterval;\r\n this.data.cost = 1;\r\n }\r\n\r\n static createAccessor() {\r\n const accessor = super.createAccessor();\r\n Object.defineProperty(accessor, \"allMaxedInterval\", {\r\n get: () => accessor.zeroIndexed.every(x => x.hasMaxedInterval)\r\n });\r\n Object.defineProperty(accessor, \"hasInstant\", {\r\n get: () => accessor.zeroIndexed.some(x => x.interval < player.options.updateRate)\r\n });\r\n return accessor;\r\n }\r\n}\r\n","import { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class AnnihilationAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.annihilation;\r\n }\r\n\r\n get name() {\r\n return `Annihilation`;\r\n }\r\n\r\n get isUnlocked() {\r\n return SingularityMilestone.annihilationAutobuyer.canBeApplied || player.celestials.ra.permanentMemories.lai65;\r\n }\r\n\r\n get multiplier() {\r\n return this.data.multiplier;\r\n }\r\n\r\n set multiplier(value) {\r\n this.data.multiplier = value;\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n get hasInput() {\r\n return true;\r\n }\r\n\r\n get inputType() {\r\n return \"float\";\r\n }\r\n\r\n get inputEntry() {\r\n return \"multiplier\";\r\n }\r\n\r\n get description() {\r\n return \"Multiplier\";\r\n }\r\n\r\n tick() {\r\n if (Laitela.darkMatterMultGain >= this.multiplier) {\r\n Laitela.annihilate();\r\n }\r\n }\r\n}\r\n","import { DC } from \"../constants\";\r\nimport { PlayerProgress } from \"../player-progress\";\r\n\r\nimport { UpgradeableAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class AntimatterDimensionAutobuyerState extends UpgradeableAutobuyerState {\r\n get tier() {\r\n return this.id;\r\n }\r\n\r\n get name() {\r\n return AntimatterDimension(this.tier).shortDisplayName;\r\n }\r\n\r\n get fullName() {\r\n return `${this.name} Antimatter Dimension`;\r\n }\r\n\r\n get data() {\r\n return player.auto.antimatterDims.all[this.tier - 1];\r\n }\r\n\r\n get baseInterval() {\r\n return Player.defaultStart.auto.antimatterDims.all[this.tier - 1].interval;\r\n }\r\n\r\n get isUnlocked() {\r\n if (PlayerProgress.mendingUnlocked()) return true;\r\n if (Pelle.isDisabled(`antimatterDimAutobuyer${this.tier}`)) return false;\r\n return this.data.isBought || this.canBeUpgraded;\r\n }\r\n\r\n get isBought() {\r\n return this.data.isBought;\r\n }\r\n\r\n get antimatterCost() {\r\n return DC.E10.pow(this.tier - 1).times(DC.E40);\r\n }\r\n\r\n get canBeBought() {\r\n return !Pelle.isDisabled(`antimatterDimAutobuyer${this.tier}`);\r\n }\r\n\r\n get canBeUpgraded() {\r\n return NormalChallenge(this.tier).isCompleted || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get disabledByContinuum() {\r\n return Laitela.continuumActive;\r\n }\r\n\r\n get bulk() {\r\n // Use 1e100 to avoid issues with Infinity.\r\n return this.hasUnlimitedBulk ? 1e100 : Math.clampMax(this.data.bulk, this.bulkCap);\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return Achievement(61).isUnlocked;\r\n }\r\n\r\n get bulkCap() {\r\n return 512;\r\n }\r\n\r\n get hasMaxedBulk() {\r\n return this.bulk >= this.bulkCap;\r\n }\r\n\r\n get mode() {\r\n return this.data.mode;\r\n }\r\n\r\n set mode(value) {\r\n this.data.mode = value;\r\n }\r\n\r\n get canUnlockSlowVersion() {\r\n return player.records.thisEternity.maxAM.gte(this.antimatterCost);\r\n }\r\n\r\n toggleMode() {\r\n this.mode = [\r\n AUTOBUYER_MODE.BUY_SINGLE,\r\n AUTOBUYER_MODE.BUY_10\r\n ]\r\n .nextSibling(this.mode);\r\n }\r\n\r\n // We don't want to directly call super.canTick here because the game logic works really weirdly in terms of\r\n // interactions between individual and group AD autobuyers. The UI can change and certain settings can become\r\n // unmodifiable in some conditions. This is basically the lowest-effort solution to support legacy behavior\r\n // because the proper alternatve of an AD autobuyer refactor to untangle this mess is likely not worth the effort\r\n get canTick() {\r\n // AD autobuyer-specific logic; if the UI is collapsed then we are unable to toggle groupSetting.\r\n // In terms of UX for this case it makes the most sense to ignore it and pretend it's true\r\n const settingConfig = player.auto.antimatterDims;\r\n const individualSetting = settingConfig.all[this.tier - 1];\r\n const groupSetting = settingConfig.isActive;\r\n const thisSetting = individualSetting && (Autobuyer.antimatterDimension.collapseDisplay ? groupSetting : true);\r\n\r\n // General availability\r\n const dim = AntimatterDimension(this.tier);\r\n const hasAutobuyer = dim.isAvailableForPurchase && dim.isAffordable;\r\n\r\n // From IntervaledAutobuyerState.canTick\r\n const intervalTick = this.timeSinceLastTick >= this.interval;\r\n\r\n // From AutobuyerState.canTick (ignores this.constructor.isActive because that's accounted for in thisSetting)\r\n const autoTick = player.auto.autobuyersOn && this.isActive && (this.isUnlocked || this.isBought);\r\n\r\n return thisSetting && hasAutobuyer && intervalTick && autoTick;\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n const tier = this.tier;\r\n switch (this.mode) {\r\n case AUTOBUYER_MODE.BUY_SINGLE:\r\n buyOneDimension(tier);\r\n break;\r\n case AUTOBUYER_MODE.BUY_10:\r\n buyMaxDimension(tier, this.bulk);\r\n break;\r\n }\r\n }\r\n\r\n upgradeBulk() {\r\n if (this.hasMaxedBulk) return;\r\n if (!Currency.infinityPoints.purchase(this.cost)) return;\r\n this.data.bulk = Math.clampMax(this.bulk * 2, this.bulkCap);\r\n this.data.cost = Math.ceil(2.4 * this.cost);\r\n Achievement(61).tryUnlock();\r\n GameUI.update();\r\n }\r\n\r\n purchase() {\r\n if (!this.canUnlockSlowVersion) return;\r\n this.data.isBought = true;\r\n }\r\n\r\n get resetTickOn() {\r\n return Perk.antimatterNoReset.canBeApplied ? PRESTIGE_EVENT.ANTIMATTER_GALAXY : PRESTIGE_EVENT.DIMENSION_BOOST;\r\n }\r\n\r\n reset() {\r\n super.reset();\r\n if (EternityMilestone.keepAutobuyers.isReached || PelleUpgrade.keepAutobuyers.canBeApplied) return;\r\n this.data.isUnlocked = false;\r\n this.data.isBought = false;\r\n this.data.bulk = 1;\r\n TabNotification.newAutobuyer.clearTrigger();\r\n }\r\n\r\n static get entryCount() { return 8; }\r\n static get autobuyerGroupName() { return \"Antimatter Dimension\"; }\r\n\r\n // These are toggled on and off from the group autobuyer checkbox\r\n static get isActive() { return player.auto.antimatterDims.isActive; }\r\n static set isActive(value) { player.auto.antimatterDims.isActive = value; }\r\n\r\n static createAccessor() {\r\n const accessor = super.createAccessor();\r\n Object.defineProperties(accessor, {\r\n allBought: { get: () => accessor.zeroIndexed.every(x => x.isBought) },\r\n // We can get away with this since allUnlimitedBulk is the same for all AD autos\r\n allUnlimitedBulk: { get: () => accessor.zeroIndexed[0].hasUnlimitedBulk },\r\n bulkCap: { get: () => accessor.zeroIndexed[0].bulkCap },\r\n collapseDisplay: { get: () => accessor.allMaxedInterval && accessor.allUnlocked && accessor.allUnlimitedBulk }\r\n });\r\n return accessor;\r\n }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { UpgradeableAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class BigCrunchAutobuyerState extends UpgradeableAutobuyerState {\r\n get data() {\r\n return player.auto.bigCrunch;\r\n }\r\n\r\n get name() {\r\n return `Infinity`;\r\n }\r\n\r\n get isUnlocked() {\r\n if (PlayerProgress.mendingUnlocked()) return true;\r\n return Pelle.isDoomed\r\n ? PelleStrikes.infinity.hasStrike\r\n : this.canBeUpgraded;\r\n }\r\n\r\n get canBeUpgraded() {\r\n return NormalChallenge(12).isCompleted || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get baseInterval() {\r\n return Player.defaultStart.auto.bigCrunch.interval;\r\n }\r\n\r\n get mode() {\r\n return this.data.mode;\r\n }\r\n\r\n set mode(value) {\r\n this.data.mode = value;\r\n }\r\n\r\n get hasAdditionalModes() {\r\n return EternityMilestone.bigCrunchModes.isReached;\r\n }\r\n\r\n get increaseWithMult() {\r\n return this.data.increaseWithMult;\r\n }\r\n\r\n set increaseWithMult(value) {\r\n this.data.increaseWithMult = value;\r\n }\r\n\r\n get amount() {\r\n return this.data.amount;\r\n }\r\n\r\n // This is unused mechanically, but should be zero to suppress the \"Current bulk:\" text\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n set amount(value) {\r\n this.data.amount = value;\r\n }\r\n\r\n get time() {\r\n return this.data.time;\r\n }\r\n\r\n set time(value) {\r\n this.data.time = new Decimal(value);\r\n }\r\n\r\n get xHighest() {\r\n return this.data.xHighest;\r\n }\r\n\r\n set xHighest(value) {\r\n this.data.xHighest = value;\r\n }\r\n\r\n autoInfinitiesAvailable(considerMilestoneReached) {\r\n return (considerMilestoneReached || EternityMilestone.autoInfinities.isReached) &&\r\n !EternityChallenge(4).isRunning && !EternityChallenge(12).isRunning && !Player.isInAntimatterChallenge &&\r\n player.auto.autobuyersOn && this.data.isActive &&\r\n !Autobuyer.eternity.isActive && this.mode === AUTO_CRUNCH_MODE.TIME && this.time.lt(60) &&\r\n !Autobuyer.eternity.autoEternitiesAvailable();\r\n }\r\n\r\n upgradeInterval(free) {\r\n super.upgradeInterval(free);\r\n TabNotification.breakInfinity.tryTrigger();\r\n }\r\n\r\n bumpAmount(mult) {\r\n if (this.isUnlocked && this.increaseWithMult) {\r\n this.amount = this.amount.times(mult);\r\n }\r\n }\r\n\r\n get canTick() {\r\n return Player.canCrunch && super.canTick;\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.ETERNITY;\r\n }\r\n\r\n get highestPrevPrestige() {\r\n return player.records.thisEternity.maxIP;\r\n }\r\n\r\n get timeToNextTick() {\r\n return Math.clampMin(this.time - Time.thisInfinityRealTime.totalSeconds.toNumber(), 0);\r\n }\r\n\r\n get willInfinity() {\r\n if (!player.break || Player.isInAntimatterChallenge) return true;\r\n\r\n switch (this.mode) {\r\n case AUTO_CRUNCH_MODE.AMOUNT:\r\n return gainedInfinityPoints().gte(this.amount);\r\n case AUTO_CRUNCH_MODE.TIME:\r\n return Time.thisInfinityRealTime.totalSeconds.gt(this.time);\r\n case AUTO_CRUNCH_MODE.X_HIGHEST:\r\n default:\r\n return gainedInfinityPoints().gte(this.highestPrevPrestige.times(this.xHighest));\r\n }\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n if (this.willInfinity) bigCrunchResetRequest(true);\r\n }\r\n\r\n reset() {\r\n super.reset();\r\n if (EternityMilestone.bigCrunchModes.isReached) return;\r\n this.mode = AUTO_CRUNCH_MODE.AMOUNT;\r\n }\r\n}\r\n","import { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class BlackHolePowerAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.blackHolePower.all[this.id - 1];\r\n }\r\n\r\n get name() {\r\n return `Black Hole ${this.id} Power`;\r\n }\r\n\r\n get isUnlocked() {\r\n return Ra.unlocks.blackHolePowerAutobuyers.canBeApplied || MendingMilestone.three.isReached;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n const bh = BlackHole(this.id);\r\n while (Currency.realityMachines.gte(bh.powerUpgrade.cost)) bh.powerUpgrade.purchase();\r\n }\r\n\r\n static get entryCount() { return 2; }\r\n static get autobuyerGroupName() { return \"Black Hole Power\"; }\r\n static get isActive() { return player.auto.blackHolePower.isActive; }\r\n static set isActive(value) { player.auto.blackHolePower.isActive = value; }\r\n}\r\n","import { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class ExpoBlackHolePowerAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.expoBlackHolePower.all[this.id - 1];\r\n }\r\n\r\n get name() {\r\n return `Exponent Black Hole ${this.id} Power`;\r\n }\r\n\r\n get isUnlocked() {\r\n return WarpUpgrade(7).isBought;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n const bh = ExpoBlackHole(this.id);\r\n while (Currency.imaginaryMachines.gte(bh.powerUpgrade.cost)) bh.powerUpgrade.purchase();\r\n }\r\n\r\n static get entryCount() { return 1; }\r\n static get autobuyerGroupName() { return \"Exponent Black Hole Power\"; }\r\n static get isActive() { return player.auto.expoBlackHolePower.isActive; }\r\n static set isActive(value) { player.auto.expoBlackHolePower.isActive = value; }\r\n}\r\n","import { IntervaledAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class DarkMatterDimensionAscensionAutobuyerState extends IntervaledAutobuyerState {\r\n get data() {\r\n return player.auto.ascension;\r\n }\r\n\r\n get name() {\r\n return `Dark Matter Dimension Ascension`;\r\n }\r\n\r\n get isUnlocked() {\r\n return SingularityMilestone.ascensionAutobuyers.canBeApplied || player.celestials.ra.permanentMemories.lai50;\r\n }\r\n\r\n get interval() {\r\n return 1000 * SingularityMilestone.darkAutobuyerSpeed.effectValue;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n let x = SingularityMilestone.darkDimensionAutobuyers.effectValue;\r\n if (player.celestials.ra.permanentMemories.lai50){\r\n x = 8;\r\n }\r\n for (let i = 1; i <= x; i++) {\r\n DarkMatterDimension(i).ascend();\r\n }\r\n }\r\n}\r\n","import { IntervaledAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class DarkMatterDimensionAutobuyerState extends IntervaledAutobuyerState {\r\n get data() {\r\n return player.auto.darkMatterDims;\r\n }\r\n\r\n get name() {\r\n return `Dark Matter Dimensions`;\r\n }\r\n\r\n get isUnlocked() {\r\n return SingularityMilestone.darkDimensionAutobuyers.canBeApplied || player.celestials.ra.permanentMemories.lai50;\r\n }\r\n\r\n get interval() {\r\n return 1000 * SingularityMilestone.darkAutobuyerSpeed.effectValue;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n let x = SingularityMilestone.darkDimensionAutobuyers.effectValue;\r\n if (player.celestials.ra.permanentMemories.lai50){\r\n x = 8;\r\n }\r\n Laitela.maxAllDMDimensions(x);\r\n }\r\n}\r\n","import { DC } from \"./constants\";\r\nimport { Currency } from \"./currency\";\r\nimport { Glyphs } from \"./globals\";\r\nimport { MendingUpgrade, MendingUpgrades } from \"./mending-upgrades\";\r\nimport { PlayerProgress } from \"./player-progress\";\r\n\r\n/**\r\n * Object that manages the selection of glyphs offered to the player\r\n */\r\nexport const GlyphSelection = {\r\n glyphs: [],\r\n realityProps: undefined,\r\n\r\n get active() {\r\n return Modal.reality.isOpen;\r\n },\r\n\r\n get choiceCount() {\r\n return Effects.max(1, Perk.firstPerk) *\r\n Ra.unlocks.extraGlyphChoicesAndRelicShardRarityAlwaysMax.effectOrDefault(1);\r\n },\r\n\r\n glyphUncommonGuarantee(glyphList, rng) {\r\n // lmao this should be disabled in Corruption lmfao--sxy\r\n if (player.mending.corruptionChallenge.corruptedMend) return;\r\n // If no choices are rare enough and the player has the uncommon glyph perk, randomly generate\r\n // rarities until the threshold is passed and then assign that rarity to a random glyph\r\n const strengthThreshold = 1.5;\r\n // Do RNG stuff now so getting a strength-boosting upgrade in this reality\r\n // can't influence the RNG of the next one.\r\n const random = rng.uniform();\r\n let newStrength;\r\n do {\r\n newStrength = GlyphGenerator.randomStrength(rng);\r\n } while (newStrength < strengthThreshold);\r\n if (glyphList.some(e => e.strength >= strengthThreshold)) return;\r\n glyphList[Math.floor(random * glyphList.length)].strength = newStrength;\r\n },\r\n\r\n glyphList(countIn, level, config) {\r\n // Always generate at least 4 choices so that the RNG never diverges based on\r\n // the 4-choice perk.\r\n const count = Math.clampMin(countIn, 4);\r\n let glyphList = [];\r\n const rng = config.rng || new GlyphGenerator.RealGlyphRNG();\r\n const types = [];\r\n\r\n // To attempt to reduce RNG swing, we follow slightly different logic early on in order\r\n // to spread out types and effects more equally for the first few realities. Types and\r\n // effects are spread out over the choices of each consecutive group of 5 realities\r\n if (player.realities <= 5 * GlyphGenerator.uniformityGroups) {\r\n glyphList = GlyphGenerator.uniformGlyphs(level, rng, player.realities);\r\n } else {\r\n for (let out = 0; out < count; ++out) {\r\n types.push(GlyphGenerator.randomType(rng, types));\r\n }\r\n for (let out = 0; out < count; ++out) {\r\n glyphList.push(GlyphGenerator.randomGlyph(level, rng, types[out]));\r\n }\r\n }\r\n\r\n this.glyphUncommonGuarantee(glyphList, rng);\r\n // If we generated extra choices due to always generating at least 4 choices,\r\n // we remove the extra choices here.\r\n glyphList = glyphList.slice(0, countIn);\r\n // If we passed an explicit RNG in, we assume it'll get finalized later.\r\n if (!config.rng && config.isChoosingGlyph) {\r\n rng.finalize();\r\n }\r\n return glyphList;\r\n },\r\n\r\n generate(count, level = gainedGlyphLevel()) {\r\n this.glyphs = this.glyphList(count, level, { isChoosingGlyph: true });\r\n },\r\n\r\n update(level) {\r\n if (this.realityProps === undefined) return;\r\n if (level.rawLevel > this.realityProps.gainedGlyphLevel.rawLevel) {\r\n this.realityProps.gainedGlyphLevel.rawLevel = level.rawLevel;\r\n for (const glyph of this.glyphs) glyph.rawLevel = level.rawLevel;\r\n }\r\n if (level.actualLevel > this.realityProps.gainedGlyphLevel.actualLevel) {\r\n this.realityProps.gainedGlyphLevel.actualLevel = level.actualLevel;\r\n for (const glyph of this.glyphs) {\r\n glyph.level = level.actualLevel;\r\n calculateGlyph(glyph);\r\n }\r\n }\r\n },\r\n\r\n select(glyphID, sacrifice) {\r\n const chosenGlyph = this.glyphs[glyphID];\r\n if (sacrifice) {\r\n GlyphSacrificeHandler.removeGlyph(chosenGlyph, true);\r\n } else if (GameCache.glyphInventorySpace.value > 0) {\r\n Glyphs.addToInventory(chosenGlyph);\r\n } else {\r\n AutoGlyphProcessor.getRidOfGlyph(chosenGlyph);\r\n }\r\n this.glyphs = [];\r\n this.realityProps = undefined;\r\n }\r\n};\r\n\r\nexport function isRealityAvailable() {\r\n return player.records.thisReality.maxEP.exponent >= 4000 && TimeStudy.reality.isBought;\r\n}\r\n\r\n// Returns the number of \"extra\" realities from stored real time or Multiversal effects, should be called\r\n// with false for checking and true for actual usage, and only \"used\" once per reality.\r\nexport function simulatedRealityCount(advancePartSimCounters) {\r\n const amplifiedSim = Enslaved.boostReality ? Enslaved.realityBoostRatio - 1 : 0;\r\n const multiversalSim = AlchemyResource.multiversal.effectValue;\r\n const simCount = (multiversalSim + 1) * (amplifiedSim + 1) + player.partSimulatedReality - 1 + (MendingUpgrade(13).isBought ? 2 : 0);\r\n if (advancePartSimCounters) {\r\n player.partSimulatedReality = simCount - Math.floor(simCount);\r\n }\r\n return Math.floor(simCount);\r\n}\r\n\r\n/**\r\n * Triggered when the user clicks the reality button. This triggers the glyph selection\r\n * process, if applicable. Auto sacrifice is never triggered.\r\n */\r\nexport function requestManualReality() {\r\n if (GlyphSelection.active || !isRealityAvailable()) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n if (player.options.confirmations.glyphSelection || ui.view.shiftDown) {\r\n Modal.reality.show();\r\n return;\r\n }\r\n if (GameCache.glyphInventorySpace.value === 0) {\r\n Modal.message.show(\"No available inventory space; free up space by shift-clicking Glyphs to get rid of them.\",\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n return;\r\n }\r\n startManualReality(false);\r\n}\r\n\r\nexport function startManualReality(sacrifice, glyphID) {\r\n if (player.options.animations.reality) {\r\n runRealityAnimation();\r\n setTimeout(processManualReality, 3000, sacrifice, glyphID);\r\n } else {\r\n processManualReality(sacrifice, glyphID);\r\n }\r\n}\r\n\r\nexport function processManualReality(sacrifice, glyphID) {\r\n if (!isRealityAvailable()) return;\r\n\r\n if (player.realities === 0 && !PlayerProgress.mendingUnlocked()) {\r\n // If this is our first Reality, lock in the initial seed and then give the companion and starting glyphs\r\n player.reality.seed = player.reality.initialSeed;\r\n Glyphs.addToInventory(GlyphGenerator.startingGlyph(gainedGlyphLevel()));\r\n Glyphs.addToInventory(GlyphGenerator.companionGlyph(Currency.eternityPoints.value));\r\n } else if (Perk.firstPerk.isEffectActive) {\r\n // If we have firstPerk, we pick from 4+ glyphs, and glyph generation functions as normal.\r\n GlyphSelection.generate(GlyphSelection.choiceCount);\r\n\r\n // If we don't actually have a chosen ID, that means a manual reality was done with the modal disabled or the\r\n // modal showed up and the player decided not to pick anything\r\n if (glyphID === undefined) {\r\n if (EffarigUnlock.glyphFilter.isUnlocked) {\r\n // Note that this code path is eventually followed regardless of the glyph selection popping up - if it did, we\r\n // pass through the option selected there; if it didn't, then we apply the filter. If we don't handle it this\r\n // way, manual realities without the modal will never sacrifice and may give bad glyphs you don't care about\r\n const newGlyph = AutoGlyphProcessor.pick(GlyphSelection.glyphs);\r\n const shouldSacrifice = player.options.confirmations.glyphSelection\r\n ? sacrifice\r\n : !AutoGlyphProcessor.wouldKeep(newGlyph);\r\n if (shouldSacrifice || GameCache.glyphInventorySpace.value === 0) {\r\n AutoGlyphProcessor.getRidOfGlyph(newGlyph);\r\n } else {\r\n Glyphs.addToInventory(newGlyph);\r\n }\r\n } else {\r\n // This doesn't use the seeded RNG, but this isn't exploitable since the player can just reenable\r\n // the modal and choose themselves anyway. The alternative is adding an extra seeded RNG call\r\n // everywhere else to ensure RNG consistency, which is probably undesirable\r\n GlyphSelection.select(Math.floor(Math.random() * GlyphSelection.choiceCount), sacrifice);\r\n }\r\n } else {\r\n // In this case, we already picked a choice in the modal\r\n GlyphSelection.select(glyphID, sacrifice);\r\n }\r\n } else {\r\n // We can't get a random glyph directly here because that makes the RNG depend on when you get the first\r\n // perk. The internals of generate() still advance the seed properly as if we actually had a choice of\r\n // more than one glyph, but always selecting the first glyph results in highly biased types when the\r\n // uniformity code is still active. Therefore, we choose a glyph randomly (but deterministically) instead\r\n GlyphSelection.generate(1);\r\n const lexIndex = player.realities * ((player.reality.initialSeed % 5) + 3);\r\n GlyphSelection.select(permutationIndex(4, lexIndex)[0], sacrifice);\r\n }\r\n\r\n // We've already gotten a glyph at this point, so the second value has to be true.\r\n // If we haven't sacrificed, we need to sort and purge glyphs, as applicable.\r\n beginProcessReality(getRealityProps(false, true));\r\n\r\n // Should be here so that the perk graphics update even when we're on the perk subtab, while also keeping its\r\n // relatively expensive operations off of the reality reset hot path for when realities are significantly faster\r\n PerkNetwork.updatePerkColor();\r\n}\r\n\r\nexport function runRealityAnimation() {\r\n document.getElementById(\"ui\").style.userSelect = \"none\";\r\n document.getElementById(\"ui\").style.animation = \"a-realize 10s 1\";\r\n document.getElementById(\"realityanimbg\").style.animation = \"a-realizebg 10s 1\";\r\n document.getElementById(\"realityanimbg\").style.display = \"block\";\r\n if (Theme.current().isDark()) document.getElementById(\"realityanimbg\").style.filter = \"invert(1)\";\r\n else document.getElementById(\"realityanimbg\").style.filter = \"\";\r\n setTimeout(() => {\r\n document.getElementById(\"realityanimbg\").play();\r\n document.getElementById(\"realityanimbg\").currentTime = 0;\r\n document.getElementById(\"realityanimbg\").play();\r\n }, 2000);\r\n setTimeout(() => {\r\n document.getElementById(\"ui\").style.userSelect = \"auto\";\r\n document.getElementById(\"ui\").style.animation = \"\";\r\n document.getElementById(\"realityanimbg\").style.animation = \"\";\r\n document.getElementById(\"realityanimbg\").style.display = \"none\";\r\n }, 10000);\r\n}\r\n\r\nfunction processAutoGlyph(gainedLevel, rng) {\r\n let newGlyph;\r\n // Always generate a list of glyphs to avoid RNG diverging based on whether\r\n // a reality is done automatically.\r\n const glyphs = GlyphSelection.glyphList(GlyphSelection.choiceCount, gainedLevel, { rng });\r\n let keepGlyph;\r\n if (EffarigUnlock.glyphFilter.isUnlocked) {\r\n newGlyph = AutoGlyphProcessor.pick(glyphs);\r\n keepGlyph = AutoGlyphProcessor.wouldKeep(newGlyph);\r\n } else {\r\n // It really doesn't matter which we pick since they're random,\r\n // so we might as well take the first one.\r\n newGlyph = glyphs[0];\r\n keepGlyph = true;\r\n }\r\n if (keepGlyph && GameCache.glyphInventorySpace.value > 0) {\r\n Glyphs.addToInventory(newGlyph);\r\n } else {\r\n AutoGlyphProcessor.getRidOfGlyph(newGlyph);\r\n }\r\n}\r\n\r\nexport function getRealityProps(isReset, alreadyGotGlyph = false) {\r\n const defaults = {\r\n glyphUndo: false,\r\n restoreCelestialState: false,\r\n };\r\n if (isReset) return Object.assign(defaults, {\r\n reset: true,\r\n });\r\n return Object.assign(defaults, {\r\n reset: false,\r\n gainedRM: MachineHandler.gainedRealityMachines,\r\n gainedGlyphLevel: gainedGlyphLevel(),\r\n gainedShards: Effarig.shardsGained,\r\n simulatedRealities: simulatedRealityCount(true),\r\n alreadyGotGlyph,\r\n });\r\n}\r\n\r\nexport function autoReality() {\r\n if (GlyphSelection.active || !isRealityAvailable()) return;\r\n beginProcessReality(getRealityProps(false, false));\r\n}\r\n\r\nfunction updateRealityRecords(realityProps) {\r\n const thisRunRMmin = realityProps.gainedRM.dividedBy(Decimal.clampMin(0.0005, Time.thisRealityRealTime.totalMinutes).toNumber());\r\n if (player.records.bestReality.RMmin.lt(thisRunRMmin)) {\r\n player.records.bestReality.RMmin = thisRunRMmin;\r\n player.records.bestReality.RMminSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n if (player.records.bestReality.glyphLevel < realityProps.gainedGlyphLevel.actualLevel) {\r\n player.records.bestReality.glyphLevel = realityProps.gainedGlyphLevel.actualLevel;\r\n player.records.bestReality.glyphLevelSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n player.records.bestReality.time = Decimal.min(player.records.thisReality.time, player.records.bestReality.time);\r\n if (player.records.thisReality.realTime < player.records.bestReality.realTime) {\r\n player.records.bestReality.realTime = player.records.thisReality.realTime;\r\n player.records.bestReality.speedSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n}\r\n\r\nfunction giveRealityRewards(realityProps) {\r\n const multiplier = realityProps.simulatedRealities + 1;\r\n const realityAndPPMultiplier = (multiplier + (MendingMilestone.two.isReached ? multiplier : binomialDistribution(multiplier, Achievement(154).effectOrDefault(0))));\r\n const gainedRM = Currency.realityMachines.gte(MachineHandler.hardcapRM) ? DC.D0 : realityProps.gainedRM;\r\n Currency.realityMachines.add(gainedRM.times(multiplier));\r\n updateRealityRecords(realityProps);\r\n addRealityTime(\r\n player.records.thisReality.time, player.records.thisReality.realTime, gainedRM,\r\n realityProps.gainedGlyphLevel.actualLevel, realityAndPPMultiplier, multiplier,\r\n MachineHandler.projectedIMCap);\r\n Currency.realities.add(realityAndPPMultiplier * (MendingMilestone.one.isReached ? 5 : 1));\r\n if(MendingMilestone.one.isReached){\r\n Currency.perkPoints.add(5 * realityAndPPMultiplier);\r\n }\r\n else{\r\n Currency.perkPoints.add(realityAndPPMultiplier);\r\n }\r\n if (TeresaUnlocks.effarig.canBeApplied) {\r\n Currency.relicShards.add(realityProps.gainedShards.times(multiplier));\r\n }\r\n\r\n if (multiplier > 1 && Enslaved.boostReality) {\r\n // Real time amplification is capped at 1 second of reality time; if it's faster then using all time at once would\r\n // be wasteful. Being faster than 1 second will only use as much time as needed to get the 1-second factor instead.\r\n if (Time.thisRealityRealTime.totalSeconds.lte(1)) {\r\n player.celestials.enslaved.storedReal *= 1 - Time.thisRealityRealTime.totalSeconds;\r\n } else {\r\n player.celestials.enslaved.storedReal = 0;\r\n }\r\n Enslaved.boostReality = false;\r\n }\r\n\r\n if (Teresa.isRunning) {\r\n const current = Teresa.runRewardMultiplier;\r\n const newMultiplier = Teresa.rewardMultiplier(player.antimatter);\r\n const isHigher = newMultiplier > current;\r\n const modalText = `You have completed Teresa's Reality! ${isHigher\r\n ? `Since you gained more Antimatter, you increased your\r\n Glyph Sacrifice multiplier from ${format(current, 2, 2)} to ${format(newMultiplier, 2, 2)}`\r\n : `You did not gain more Antimatter during this run, so the Glyph Sacrifice multiplier\r\n from Teresa did not increase`}.`;\r\n Modal.message.show(modalText, {}, 2);\r\n if (Currency.antimatter.gt(player.celestials.teresa.bestRunAM)) {\r\n player.celestials.teresa.bestRunAM = Currency.antimatter.value;\r\n player.celestials.teresa.bestAMSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n\r\n // Encode iM values into the RM variable as e10000 * iM in order to only require one prop\r\n let machineRecord;\r\n if (Currency.imaginaryMachines.value === 0) machineRecord = player.reality.maxRM;\r\n else machineRecord = DC.E10000.times(Currency.imaginaryMachines.value);\r\n player.celestials.teresa.lastRepeatedMachines = player.celestials.teresa.lastRepeatedMachines\r\n .clampMin(machineRecord);\r\n }\r\n Teresa.quotes.completeReality.show();\r\n }\r\n\r\n if (Effarig.isRunning && !EffarigUnlock.reality.isUnlocked) {\r\n EffarigUnlock.reality.unlock();\r\n EffarigUnlock.eternity.unlock();\r\n EffarigUnlock.infinity.unlock();\r\n Effarig.quotes.completeReality.show();\r\n }\r\n\r\n if (Enslaved.isRunning) Enslaved.completeRun();\r\n\r\n if (V.isRunning) V.quotes.realityComplete.show();\r\n}\r\n\r\n// Due to simulated realities taking a long time in late game, this function might not immediately\r\n// reality, but start an update loop that shows a progress bar.\r\nexport function beginProcessReality(realityProps) {\r\n if (realityProps.reset) {\r\n finishProcessReality(realityProps);\r\n return;\r\n }\r\n EventHub.dispatch(GAME_EVENT.REALITY_RESET_BEFORE);\r\n\r\n // Save a few important props before resetting all resources. We need to do this before processing glyphs so\r\n // that we don't try to reality again while async is running, but we need to retain RNG and level or else\r\n // glyphs will be generated with values based on post-reset values\r\n const glyphsToProcess = realityProps.simulatedRealities + (realityProps.alreadyGotGlyph ? 0 : 1);\r\n const rng = GlyphGenerator.getRNG(false);\r\n const glyphLevel = gainedGlyphLevel();\r\n finishProcessReality(realityProps);\r\n\r\n // If we have less than a certain amount of simulated realities, then we just shortcut the heavier async and\r\n // sampling code in order to just directly give all the glyphs. The later code is a fixed amount of overhead\r\n // which is large enough that quick realities can cause it to softlock the game due to lag on slower devices\r\n // Note: This is mostly a copy-paste of a code block in processManualReality() with slight modifications\r\n if (glyphsToProcess < 100) {\r\n for (let glyphNum = 0; glyphNum < glyphsToProcess; glyphNum++) {\r\n GlyphSelection.generate(GlyphSelection.choiceCount, glyphLevel);\r\n if (EffarigUnlock.glyphFilter.isUnlocked) {\r\n const glyphChoices = GlyphSelection.glyphList(GlyphSelection.choiceCount,\r\n realityProps.gainedGlyphLevel, { rng });\r\n const newGlyph = AutoGlyphProcessor.pick(glyphChoices);\r\n if (!AutoGlyphProcessor.wouldKeep(newGlyph) || GameCache.glyphInventorySpace.value === 0) {\r\n AutoGlyphProcessor.getRidOfGlyph(newGlyph);\r\n } else {\r\n Glyphs.addToInventory(newGlyph);\r\n }\r\n } else {\r\n GlyphSelection.select(Math.floor(Math.random() * GlyphSelection.choiceCount), false);\r\n }\r\n }\r\n Glyphs.processAutoEquipAfterReality();\r\n Glyphs.processSortingAfterReality();\r\n return;\r\n }\r\n\r\n // We need these variables in this scope in order to modify the behavior of the Async loop while it's running\r\n const progress = {};\r\n let fastToggle = false;\r\n // There's a potential rabbit hole of making the sample ever more accurate to the situation of actually generating\r\n // all the glyphs, but here we make some compromises which are probably mostly accurate in most cases by considering\r\n // just the distribution of sacrifice values between types and nothing else beyond that\r\n const glyphSample = {\r\n toGenerate: 0,\r\n // We track each glyph type separately; there is the possibility for the glyph filter to be configured in such a\r\n // way that some types get significantly more or less sacrifice value than the others\r\n sampleStats: generatedTypes.map(t => ({\r\n type: t,\r\n count: DC.D0,\r\n totalSacrifice: DC.D0,\r\n // This is (variance * sample count), which is used to get standard deviation later on and makes the math nicer\r\n varProdSacrifice: DC.D0,\r\n })),\r\n totalStats: {\r\n count: DC.D0,\r\n totalSacrifice: DC.D0,\r\n varProdSacrifice: DC.D0,\r\n },\r\n };\r\n\r\n // Incrementally calculate mean and variance in a way that doesn't require storing a list of entries\r\n // See https://datagenetics.com/blog/november22017/index.html for derivation\r\n const addToStats = (stats, value) => {\r\n const oldMean = stats.totalSacrifice.div(stats.count);\r\n stats.totalSacrifice = stat.totalSacrifice.add(value);\r\n stats.count = stats.count.add(1);\r\n const newMean = stats.totalSacrifice.div(stats.count);\r\n // Mathematically this is zero on the first iteration, but oldMean is NaN due to division by zero\r\n if (stats.count.neq(1)) stats.varProdSacrifice = stats.varProdSacrifice.add(value.sub(oldMean)) * (value.sub(newMean));\r\n };\r\n\r\n // Helper function for pulling a random sacrifice value from the sample we gathered\r\n const sampleFromStats = (stats, glyphsToGenerate) => {\r\n if (stats.count === 0) return 0;\r\n const mean = stats.totalSacrifice / stats.count;\r\n const stdev = Math.sqrt(stats.varProdSacrifice / stats.count);\r\n return normalDistribution(mean * glyphsToGenerate, stdev * Math.sqrt(glyphsToGenerate));\r\n };\r\n\r\n // The function we run in the Async loop is either the expected \"generate and filter all glyphs normally\"\r\n // behavior (fastToggle === false) or a function that takes a representative sample of 10000 glyphs and\r\n // analyzes them in order to extrapolate how much sacrifice value to give instead of actually generating\r\n // and giving any glyphs because the player asked for faster performance (fastToggle === true)\r\n const glyphFunction = () => {\r\n if (fastToggle) {\r\n // Generate glyph choices and subject the choices to the filter in order to choose a glyph for the sampling\r\n // process - we can't skip the filter even for the sampling because in most cases the filter will affect\r\n // the actual result (which is arguably the point of the filter)\r\n const glyphChoices = GlyphSelection.glyphList(GlyphSelection.choiceCount,\r\n realityProps.gainedGlyphLevel, { rng });\r\n const sampleGlyph = AutoGlyphProcessor.pick(glyphChoices);\r\n const sacGain = GlyphSacrificeHandler.glyphSacrificeGain(sampleGlyph);\r\n\r\n // Code and math later on is a lot simpler if we add to both a type-specific stat object and a total stats\r\n // object right here instead of attempting to combine the types into a total later on\r\n const thisTypeStats = glyphSample.sampleStats.find(s => s.type === sampleGlyph.type);\r\n addToStats(thisTypeStats, sacGain);\r\n addToStats(glyphSample.totalStats, sacGain);\r\n } else {\r\n processAutoGlyph(realityProps.gainedGlyphLevel, rng);\r\n // We'd normally run processSortingAfterReality() here, but also sorting after every glyph is extremely intensive\r\n // at this scale and largely useless if autoClean is getting run every time too\r\n if (VUnlocks.autoAutoClean.canBeApplied && player.reality.autoAutoClean) Glyphs.autoClean();\r\n }\r\n };\r\n const glyphsToSample = Math.min(glyphsToProcess, 10000);\r\n Async.run(glyphFunction,\r\n glyphsToProcess,\r\n {\r\n batchSize: 100,\r\n maxTime: 33,\r\n sleepTime: 1,\r\n asyncEntry: doneSoFar => {\r\n GameIntervals.stop();\r\n ui.$viewModel.modal.progressBar = {\r\n label: \"Simulating Amplified Reality\",\r\n info: `The game is currently calculating all the resources you would gain from repeating the\r\n Reality you just completed ${formatInt(glyphsToProcess)} more times. Pressing \"Quick Glyphs\" with\r\n more than ${formatInt(glyphsToSample)} Glyphs remaining will speed up the calculation by automatically\r\n sacrificing all the remaining Glyphs you would get. Pressing \"Skip Glyphs\" will ignore all resources\r\n related to Glyphs and stop the simulation after giving all other resources.\r\n ${Ra.unlocks.unlockGlyphAlchemy.canBeApplied ? `Pressing either button to speed up\r\n simulation will not update any resources within Glyph Alchemy.` : \"\"}`,\r\n progressName: \"Realities\",\r\n current: doneSoFar,\r\n max: glyphsToProcess,\r\n startTime: Date.now(),\r\n buttons: [{\r\n text: \"Quick Glyphs\",\r\n condition: (current, max) => max - current > glyphsToSample,\r\n click: () => {\r\n // This changes the simulating function to one that just takes a representative sample of 10000 random\r\n // glyphs to determine what sacrifice totals to give (this is defined above)\r\n fastToggle = true;\r\n glyphSample.toGenerate = progress.remaining;\r\n\r\n // We only simulate a smaller set of glyphs for a sample, but that still might take some time to do\r\n progress.maxIter -= progress.remaining - glyphsToSample;\r\n progress.remaining = glyphsToSample;\r\n // We update the progress bar max data (remaining will update automatically).\r\n ui.$viewModel.modal.progressBar.max = progress.maxIter;\r\n }\r\n },\r\n {\r\n text: \"Skip Glyphs\",\r\n condition: () => true,\r\n click: () => {\r\n // Shortcut to the end since we're ignoring all glyph-related resources\r\n progress.maxIter -= progress.remaining;\r\n progress.remaining = 0;\r\n }\r\n }]\r\n };\r\n },\r\n asyncProgress: doneSoFar => {\r\n ui.$viewModel.modal.progressBar.current = doneSoFar;\r\n },\r\n asyncExit: () => {\r\n ui.$viewModel.modal.progressBar = undefined;\r\n GameIntervals.start();\r\n },\r\n then: () => {\r\n // This is where we update sacrifice values if we ended up doing quick mode\r\n if (glyphSample.toGenerate > 0) {\r\n\r\n // Note: This is the only score mode we consider doing special behavior for because it's the only mode where\r\n // sacrificing a glyph can significantly affect future glyph choices. Alchemy is not a factor because\r\n // the in-game wording specifically disallows it.\r\n if (AutoGlyphProcessor.scoreMode === AUTO_GLYPH_SCORE.LOWEST_SACRIFICE) {\r\n // General behavior for repeated sacrifice with these settings is that all sacrifice values will increase\r\n // at an approximately equal rate because any type that falls behind will get prioritized by the filter.\r\n // We fake this behavior by attempting to fill the lower values until all are equal, and then filling all\r\n // types equally with whatever is left. We pull from the total stats here because this filter mode\r\n // effectively ignores types when assigning scores and picking glyphs\r\n let totalSac = sampleFromStats(glyphSample.totalStats, glyphSample.toGenerate);\r\n\r\n // Incrementing sacrifice totals without regard to glyph type and reassigning the final values in the same\r\n // ascending order as the starting order makes the code simpler to work with, so we do that\r\n const generatable = generatedTypes.filter(x => EffarigUnlock.reality.isUnlocked || x !== \"effarig\");\r\n const sacArray = generatable.map(x => player.reality.glyphs.sac[x]).sort((a, b) => a.sub(b).gte(0));\r\n const typeMap = [];\r\n for (const type of generatable) typeMap.push({ type, value: player.reality.glyphs.sac[type] });\r\n const sortedSacTotals = Object.values(typeMap).sort((a, b) => a.value.sub(b.value).gte(0));\r\n\r\n // Attempt to fill up all the lowest sacrifice totals up to the next highest, stopping early if there isn't\r\n // enough left to use for filling. The filling process causes the array to progress something like\r\n // [1,3,4,7,9] => [3,3,4,7,9] => [4,4,4,7,9] => ...\r\n for (let toFill = 0; toFill < sacArray.length - 1; toFill++) {\r\n // Calculate how much we need to fully fill\r\n let needed = 0;\r\n for (let filling = 0; filling <= toFill; filling++) needed += sacArray[toFill + 1] - sacArray[filling];\r\n\r\n // Fill up the lower indices, but only up to a maximum of what we have available\r\n const usedToFill = Math.clampMax(needed, totalSac);\r\n totalSac -= usedToFill;\r\n for (let filling = 0; filling <= toFill; filling++) sacArray[filling] += usedToFill / (toFill + 1);\r\n if (totalSac === 0) break;\r\n }\r\n // We have some left over, fill all of them equally\r\n for (let fill = 0; fill < sacArray.length; fill++) sacArray[fill] += totalSac / sacArray.length;\r\n\r\n // Assign the values in increasing order as specified by the original sacrifice totals\r\n for (let index = 0; index < sacArray.length; index++) {\r\n player.reality.glyphs.sac[sortedSacTotals[index].type] = sacArray[index];\r\n }\r\n } else {\r\n // Give sacrifice values proportionally according to what we found in the sampling stats\r\n for (const stats of glyphSample.sampleStats) {\r\n const toGenerate = glyphSample.toGenerate * stats.count / glyphsToSample;\r\n player.reality.glyphs.sac[stats.type].add(sampleFromStats(stats, toGenerate));\r\n }\r\n }\r\n }\r\n },\r\n progress\r\n });\r\n Glyphs.processSortingAfterReality();\r\n}\r\n\r\n// eslint-disable-next-line complexity\r\nexport function finishProcessReality(realityProps) {\r\n const finalEP = Currency.eternityPoints.value.plus(gainedEternityPoints());\r\n if (player.records.bestReality.bestEP.lt(finalEP)) {\r\n player.records.bestReality.bestEP = new Decimal(finalEP);\r\n player.records.bestReality.bestEPSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n\r\n const realityRealTime = player.records.thisReality.realTime;\r\n const isReset = realityProps.reset;\r\n if (!isReset) giveRealityRewards(realityProps);\r\n if (!realityProps.glyphUndo) {\r\n Glyphs.clearUndo();\r\n if (player.reality.respec) respecGlyphs();\r\n if (player.celestials.ra.disCharge) {\r\n disChargeAll();\r\n }\r\n if(player.celestials.ra.breakDischarge){\r\n disChargeAllBreak();\r\n }\r\n }\r\n if (player.options.automatorEvents.clearOnReality) AutomatorData.clearEventLog();\r\n if (Player.automatorUnlocked && AutomatorBackend.state.forceRestart) {\r\n // Make sure to restart the current script instead of using the editor script - the editor script might\r\n // not be a valid script to run; this at best stops it from running and at worst causes a crash\r\n AutomatorBackend.start(AutomatorBackend.state.topLevelScript);\r\n }\r\n\r\n const celestialRunState = clearCelestialRuns();\r\n recalculateAllGlyphs();\r\n Glyphs.updateMaxGlyphCount(true);\r\n\r\n player.sacrificed = DC.D0;\r\n\r\n lockAchievementsOnReality();\r\n\r\n // Because initializeChallengeCompletions has some code that completes normal challenges with 2 eternities,\r\n // and we haven't reset eternities yet (and I'm nervous about changing the order of this code),\r\n // add a flag to indicate that this is a reality reset.\r\n initializeChallengeCompletions(true);\r\n\r\n Currency.infinities.reset();\r\n if (MendingUpgrade(2).isBought) Currency.infinities.bumpTo(DC.E12)\r\n Currency.infinitiesBanked.reset();\r\n player.records.bestInfinity.time = Decimal.pow10(Number.MAX_VALUE);\r\n player.records.bestInfinity.realTime = Number.MAX_VALUE;\r\n player.records.thisInfinity.time = DC.D0;\r\n player.records.thisInfinity.lastBuyTime = DC.D0;\r\n player.records.thisInfinity.realTime = 0;\r\n player.dimensionBoosts = 0;\r\n player.galaxies = 0;\r\n player.partInfinityPoint = 0;\r\n player.partInfinitied = 0;\r\n if (!PlayerProgress.mendingUnlocked()) player.break = false;\r\n player.IPMultPurchases = 0;\r\n Currency.infinityPower.reset();\r\n Currency.timeShards.reset();\r\n Replicanti.reset(true);\r\n if(MendingUpgrade(2).isBought){\r\n Replicanti.amount = Replicanti.amount.clampMin(1);\r\n Replicanti.unlock(true);\r\n }\r\n\r\n Currency.eternityPoints.reset();\r\n\r\n // This has to be reset before Currency.eternities to make the bumpLimit logic work correctly\r\n EternityUpgrade.epMult.reset();\r\n if (!PelleUpgrade.eternitiesNoReset.canBeApplied) Currency.eternities.reset();\r\n player.records.thisEternity.time = DC.D0;\r\n player.records.thisEternity.realTime = 0;\r\n player.records.bestEternity.time = Decimal.pow10(Number.MAX_VALUE);\r\n player.records.bestEternity.realTime = Number.MAX_VALUE;\r\n if (!PelleUpgrade.keepEternityUpgrades.canBeApplied) player.eternityUpgrades.clear();\r\n player.totalTickGained = 0;\r\n if (!PelleUpgrade.keepEternityChallenges.canBeApplied && !MendingUpgrade(3).isBought) player.eternityChalls = {};\r\n player.reality.unlockedEC = 0;\r\n player.reality.lastAutoEC = 0;\r\n player.challenge.eternity.current = 0;\r\n if (!PelleUpgrade.timeStudiesNoReset.canBeApplied) player.challenge.eternity.unlocked = 0;\r\n player.challenge.eternity.requirementBits = 0;\r\n player.respec = false;\r\n player.eterc8ids = 50;\r\n player.eterc8repl = 40;\r\n if (realityProps.glyphUndo) {\r\n player.requirementChecks.reality.maxGlyphs =\r\n Math.max(Glyphs.bestUndoGlyphCount, player.requirementChecks.reality.maxGlyphs);\r\n } else {\r\n Player.resetRequirements(\"reality\");\r\n }\r\n player.records.thisReality.time = DC.D0;\r\n player.records.thisReality.realTime = 0;\r\n player.records.thisReality.maxReplicanti = DC.D0;\r\n if (!PelleUpgrade.timeStudiesNoReset.canBeApplied) Currency.timeTheorems.reset();\r\n player.celestials.v.STSpent = 0;\r\n if (!PelleUpgrade.timeStudiesNoReset.canBeApplied) {\r\n player.dilation.studies = [];\r\n player.dilation.active = false;\r\n }\r\n if (!PelleUpgrade.dilationUpgradesNoReset.canBeApplied) {\r\n player.dilation.upgrades.clear();\r\n player.dilation.rebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 11: 0,\r\n 12: 0,\r\n 13: 0\r\n };\r\n }\r\n if (!PelleUpgrade.tachyonParticlesNoReset.canBeApplied) {\r\n Currency.tachyonParticles.reset();\r\n }\r\n player.dilation.nextThreshold = DC.E3;\r\n player.dilation.baseTachyonGalaxies = 0;\r\n player.dilation.totalTachyonGalaxies = 0;\r\n Currency.dilatedTime.reset();\r\n player.records.thisInfinity.maxAM = DC.D0;\r\n player.records.thisEternity.maxAM = DC.D0;\r\n player.records.thisReality.maxDT = DC.D0;\r\n player.records.thisReality.remWithoutGG = 0;\r\n player.dilation.lastEP = DC.DM1;\r\n Currency.antimatter.reset();\r\n Enslaved.autoReleaseTick = 0;\r\n player.celestials.enslaved.hasSecretStudy = false;\r\n player.celestials.laitela.entropy = 0;\r\n\r\n playerInfinityUpgradesOnReset();\r\n resetInfinityRuns();\r\n resetEternityRuns();\r\n InfinityDimensions.fullReset();\r\n fullResetTimeDimensions();\r\n resetChallengeStuff();\r\n if(PlayerProgress.mendingUnlocked()){\r\n NormalChallenges.completeAll();\r\n }\r\n AntimatterDimensions.reset();\r\n secondSoftReset(false);\r\n player.celestials.ra.peakGamespeed = DC.D1;\r\n\r\n InfinityDimensions.resetAmount();\r\n player.records.thisInfinity.bestIPmin = DC.D0;\r\n player.records.bestInfinity.bestIPminEternity = DC.D0;\r\n player.records.thisEternity.bestEPmin = DC.D0;\r\n player.records.thisEternity.bestInfinitiesPerMs = DC.D0;\r\n player.records.thisEternity.bestIPMsWithoutMaxAll = DC.D0;\r\n player.records.bestEternity.bestEPminReality = DC.D0;\r\n player.records.thisReality.bestEternitiesPerMs = DC.D0;\r\n player.records.thisReality.bestRSmin = DC.D0;\r\n player.records.thisReality.bestRSminVal = DC.D0;\r\n resetTimeDimensions();\r\n resetTickspeed();\r\n AchievementTimers.marathon2.reset();\r\n Currency.infinityPoints.reset();\r\n if (MendingUpgrade(2).isBought) Currency.eternities.bumpTo(DC.E6)\r\n else if (RealityUpgrade(10).isBought) applyRUPG10();\r\n else Tab.dimensions.antimatter.show();\r\n\r\n Lazy.invalidateAll();\r\n ECTimeStudyState.invalidateCachedRequirements();\r\n EventHub.dispatch(GAME_EVENT.REALITY_RESET_AFTER);\r\n\r\n if (TeresaUnlocks.startEU.canBeApplied) {\r\n for (const id of [1, 2, 3, 4, 5, 6]) player.eternityUpgrades.add(id);\r\n } else if (RealityUpgrade(14).isBought) {\r\n // Eternal flow will always give eternities after the first tick,\r\n // better to try apply EU1 immediately once at the start rather than on every tick\r\n applyEU1();\r\n }\r\n\r\n if (!isReset) Ra.applyAlchemyReactions(realityRealTime);\r\n\r\n player.reality.gainedAutoAchievements = false;\r\n player.reality.hasCheckedFilter = false;\r\n\r\n if (realityProps.restoreCelestialState || player.options.retryCelestial) restoreCelestialRuns(celestialRunState);\r\n\r\n if (Pelle.isDoomed && PelleUpgrade.keepAutobuyers.canBeApplied && Autobuyer.bigCrunch.hasMaxedInterval) {\r\n player.break = true;\r\n }\r\n Glyphs.updateMaxGlyphCount();\r\n}\r\n\r\nfunction restoreCelestialRuns(celestialRunState) {\r\n player.celestials.teresa.run = celestialRunState.teresa;\r\n if (player.celestials.teresa.run) Teresa.initializeRun();\r\n player.celestials.effarig.run = celestialRunState.effarig;\r\n if (player.celestials.effarig.run) Effarig.initializeRun();\r\n player.celestials.enslaved.run = celestialRunState.enslaved;\r\n if (player.celestials.enslaved.run) Enslaved.initializeRun();\r\n player.celestials.v.run = celestialRunState.v;\r\n if (player.celestials.v.run) V.initializeRun();\r\n player.celestials.v.superrun = celestialRunState.superv;\r\n if (player.celestials.v.superrun) V.initializeSuperRun();\r\n player.celestials.ra.run = celestialRunState.ra;\r\n if (player.celestials.ra.run) Ra.initializeRun();\r\n player.celestials.laitela.run = celestialRunState.laitela;\r\n if (player.celestials.laitela.run) Laitela.initializeRun();\r\n}\r\n\r\n// This is also called when the upgrade is purchased, be aware of potentially having \"default\" values overwrite values\r\n// which might otherwise be higher. Most explicit values here are the values of upgrades at their caps.\r\nexport function applyRUPG10() {\r\n NormalChallenges.completeAll();\r\n if (PelleUpgrade.replicantiStayUnlocked.canBeApplied) {\r\n Replicanti.amount = Replicanti.amount.clampMin(1);\r\n Replicanti.unlock(true);\r\n }\r\n if (Pelle.isDisabled(\"rupg10\")) return;\r\n\r\n player.auto.antimatterDims.all = player.auto.antimatterDims.all.map(current => ({\r\n isUnlocked: true,\r\n // These costs are approximately right; if bought manually all dimensions are slightly different from one another\r\n cost: 1e14,\r\n interval: 100,\r\n bulk: 1e10,\r\n mode: current.mode,\r\n priority: current.priority,\r\n isActive: current.isActive,\r\n lastTick: player.records.realTimePlayed\r\n }));\r\n\r\n for (const autobuyer of Autobuyers.all) {\r\n if (autobuyer.data.interval !== undefined) autobuyer.data.interval = 100;\r\n }\r\n\r\n player.dimensionBoosts = Math.max(4, player.dimensionBoosts);\r\n player.galaxies = Math.max(1, player.galaxies);\r\n player.break = true;\r\n Currency.eternities.bumpTo(100);\r\n Replicanti.amount = Replicanti.amount.clampMin(1);\r\n Replicanti.unlock(true);\r\n\r\n applyEU1();\r\n}\r\n\r\nexport function clearCelestialRuns() {\r\n const saved = {\r\n teresa: player.celestials.teresa.run,\r\n effarig: player.celestials.effarig.run,\r\n enslaved: player.celestials.enslaved.run,\r\n v: player.celestials.v.run,\r\n superv: player.celestials.v.superrun,\r\n ra: player.celestials.ra.run,\r\n laitela: player.celestials.laitela.run,\r\n };\r\n player.celestials.teresa.run = false;\r\n player.celestials.effarig.run = false;\r\n // Nameless forces all tabs to be visible, but exiting via the header might leave the player on a tab which is\r\n // otherwise normally hidden - in that case we force them to the Nameless tab. We could scan for the lowest-index tab\r\n // and subtab, but all other things being equal the Nameless tab makes the most sense. The run flag is toggled\r\n // *before* the check because otherwise isHidden will always evaluate to false due to still being in Nameless.\r\n if (Enslaved.isRunning) {\r\n player.celestials.enslaved.run = false;\r\n if (Tabs.current.isHidden || Tabs.current._currentSubtab.isHidden) Tab.celestials.enslaved.show();\r\n // We specifically revalidate here and nowhere else because Nameless changes the unlock state of the BLACK HOLE\r\n // command, which changes the validity of existing scripts when entering/exiting\r\n AutomatorData.recalculateErrors();\r\n }\r\n player.celestials.v.run = false;\r\n player.celestials.v.superrun = false;\r\n player.celestials.ra.run = false;\r\n player.celestials.laitela.run = false;\r\n return saved;\r\n}\r\n\r\nexport function isInCelestialReality() {\r\n if(player.celestials.v.superrun) return true;\r\n return Object.values(player.celestials).some(x => x.run);\r\n}\r\n\r\nfunction lockAchievementsOnReality() {\r\n if (Perk.achievementGroup5.isBought || PlayerProgress.mendingUnlocked()) return;\r\n for (const achievement of Achievements.preReality) {\r\n achievement.lock();\r\n }\r\n player.reality.achTimer = DC.D0;\r\n}\r\n","export default {\r\n isDisplaying: false,\r\n displayForce(name, duration) {\r\n document.body.style.animation = `${name} ${duration}s 1`;\r\n this.isDisplaying = true;\r\n setTimeout(() => {\r\n document.body.style.animation = \"\";\r\n this.isDisplaying = false;\r\n }, duration * 1000);\r\n },\r\n display(name, duration) {\r\n if (!this.isDisplaying) {\r\n this.displayForce(name, duration);\r\n }\r\n }\r\n};","import { GameMechanicState, SetPurchasableMechanicState } from \"./game-mechanics\";\r\nimport { DC } from \"./constants\";\r\nimport FullScreenAnimationHandler from \"./full-screen-animation-handler\";\r\nimport { MendingUpgrade } from \"./mending-upgrades\";\r\nimport { Currency } from \"./currency\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nfunction giveEternityRewards(auto) {\r\n player.records.bestEternity.time = Decimal.min(player.records.thisEternity.time, player.records.bestEternity.time);\r\n Currency.eternityPoints.add(gainedEternityPoints());\r\n\r\n const newEternities = gainedEternities();\r\n\r\n if (Currency.eternities.eq(0) && newEternities.lte(10)) {\r\n Tab.dimensions.time.show();\r\n }\r\n\r\n Currency.eternities.add(newEternities);\r\n\r\n if (EternityChallenge.isRunning) {\r\n const challenge = EternityChallenge.current;\r\n challenge.addCompletion(false);\r\n if (Perk.studyECBulk.isBought) {\r\n let completionCount = 0;\r\n while (!challenge.isFullyCompleted && challenge.canBeCompleted) {\r\n challenge.addCompletion(false);\r\n completionCount++;\r\n }\r\n AutomatorData.lastECCompletionCount = completionCount;\r\n if (Enslaved.isRunning && completionCount > 5) EnslavedProgress.ec1.giveProgress();\r\n }\r\n player.challenge.eternity.requirementBits &= ~(1 << challenge.id);\r\n respecTimeStudies(auto);\r\n }\r\n\r\n addEternityTime(\r\n player.records.thisEternity.time,\r\n player.records.thisEternity.realTime,\r\n gainedEternityPoints(),\r\n newEternities\r\n );\r\n\r\n player.records.thisReality.bestEternitiesPerMs = player.records.thisReality.bestEternitiesPerMs.clampMin(\r\n newEternities.div(Math.clampMin(33, player.records.thisEternity.realTime))\r\n );\r\n player.records.bestEternity.bestEPminReality =\r\n player.records.bestEternity.bestEPminReality.max(player.records.thisEternity.bestEPmin);\r\n\r\n Currency.infinitiesBanked.value = Currency.infinitiesBanked.value.plusEffectsOf(\r\n Achievement(131),\r\n TimeStudy(191)\r\n );\r\n\r\n if (Effarig.isRunning && !EffarigUnlock.eternity.isUnlocked) {\r\n EffarigUnlock.eternity.unlock();\r\n EffarigUnlock.infinity.unlock();\r\n beginProcessReality(getRealityProps(true));\r\n }\r\n}\r\n\r\nexport function eternityAnimation() {\r\n FullScreenAnimationHandler.display(\"a-eternify\", 3);\r\n}\r\n\r\nexport function eternityResetRequest() {\r\n if (!Player.canEternity) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n askEternityConfirmation();\r\n}\r\n\r\nexport function eternity(force, auto, specialConditions = {}) {\r\n if (specialConditions.switchingDilation && !Player.canEternity) {\r\n // eslint-disable-next-line no-param-reassign\r\n force = true;\r\n }\r\n // We define this variable so we can use it in checking whether to give\r\n // the secret achievement for respec without studies.\r\n // Annoyingly, we need to check for studies right here; giveEternityRewards removes studies if we're in an EC,\r\n // so doing the check later doesn't give us the initial state of having studies or not.\r\n const noStudies = player.timestudy.studies.length === 0;\r\n if (!force) {\r\n if (!Player.canEternity) return false;\r\n if (RealityUpgrade(10).isLockingMechanics) {\r\n RealityUpgrade(10).tryShowWarningModal();\r\n return false;\r\n }\r\n if (RealityUpgrade(12).isLockingMechanics && EternityChallenge(1).isRunning) {\r\n RealityUpgrade(12).tryShowWarningModal();\r\n return false;\r\n }\r\n EventHub.dispatch(GAME_EVENT.ETERNITY_RESET_BEFORE);\r\n giveEternityRewards(auto);\r\n player.requirementChecks.reality.noEternities = false;\r\n }\r\n\r\n if (player.dilation.active) rewardTP();\r\n\r\n // This needs to be after the dilation check for the \"can gain TP\" check in rewardTP to be correct.\r\n if (force) {\r\n player.challenge.eternity.current = 0;\r\n }\r\n\r\n initializeChallengeCompletions();\r\n initializeResourcesAfterEternity();\r\n\r\n if (!EternityMilestone.keepAutobuyers.isReached && !(Pelle.isDoomed && PelleUpgrade.keepAutobuyers.canBeApplied)) {\r\n // Fix infinity because it can only break after big crunch autobuyer interval is maxed\r\n player.break = false;\r\n }\r\n\r\n player.challenge.eternity.current = 0;\r\n if (!specialConditions.enteringEC && !Pelle.isDoomed) {\r\n player.dilation.active = false;\r\n }\r\n resetInfinityRuns();\r\n InfinityDimensions.fullReset();\r\n Replicanti.reset();\r\n resetChallengeStuff();\r\n AntimatterDimensions.reset();\r\n\r\n if (!specialConditions.enteringEC && player.respec) {\r\n if (noStudies) {\r\n SecretAchievement(34).unlock();\r\n }\r\n respecTimeStudies(auto);\r\n player.respec = false;\r\n }\r\n Currency.infinities.reset();\r\n if(MendingUpgrade(2).isBought){\r\n Currency.infinities.bumpTo(DC.E12);\r\n }\r\n Currency.infinityPoints.reset();\r\n InfinityDimensions.resetAmount();\r\n player.records.thisInfinity.bestIPmin = DC.D0;\r\n player.records.bestInfinity.bestIPminEternity = DC.D0;\r\n player.records.thisEternity.bestEPmin = DC.D0;\r\n player.records.thisEternity.bestInfinitiesPerMs = DC.D0;\r\n player.records.thisEternity.bestIPMsWithoutMaxAll = DC.D0;\r\n resetTimeDimensions();\r\n resetTickspeed();\r\n playerInfinityUpgradesOnReset();\r\n AchievementTimers.marathon2.reset();\r\n applyEU1();\r\n player.records.thisInfinity.maxAM = DC.D0;\r\n player.records.thisEternity.maxAM = DC.D0;\r\n Currency.antimatter.reset();\r\n ECTimeStudyState.invalidateCachedRequirements();\r\n\r\n PelleStrikes.eternity.trigger();\r\n\r\n EventHub.dispatch(GAME_EVENT.ETERNITY_RESET_AFTER);\r\n return true;\r\n}\r\n\r\n// eslint-disable-next-line no-empty-function\r\nexport function animateAndEternity(callback) {\r\n if (!Player.canEternity) return false;\r\n const hasAnimation = !FullScreenAnimationHandler.isDisplaying &&\r\n !RealityUpgrade(10).isLockingMechanics &&\r\n !(RealityUpgrade(12).isLockingMechanics && EternityChallenge(1).isRunning) &&\r\n ((player.dilation.active && player.options.animations.dilation) ||\r\n (!player.dilation.active && player.options.animations.eternity));\r\n\r\n if (hasAnimation) {\r\n if (player.dilation.active) {\r\n animateAndUndilate(callback);\r\n } else {\r\n eternityAnimation();\r\n setTimeout(() => {\r\n eternity();\r\n if (callback) callback();\r\n }, 2250);\r\n }\r\n } else {\r\n eternity();\r\n if (callback) callback();\r\n }\r\n return hasAnimation;\r\n}\r\n\r\nexport function initializeChallengeCompletions(isReality) {\r\n NormalChallenges.clearCompletions();\r\n if (!PelleUpgrade.keepInfinityChallenges.canBeApplied) InfinityChallenges.clearCompletions();\r\n if ((!isReality && EternityMilestone.keepAutobuyers.isReached) || Pelle.isDoomed || MendingMilestone.one.isReached) {\r\n NormalChallenges.completeAll();\r\n }\r\n if (Achievement(133).isUnlocked && !Pelle.isDoomed) InfinityChallenges.completeAll();\r\n player.challenge.normal.current = 0;\r\n player.challenge.infinity.current = 0;\r\n}\r\n\r\nexport function initializeResourcesAfterEternity() {\r\n player.sacrificed = DC.D0;\r\n Currency.infinities.reset();\r\n player.records.bestInfinity.time = Decimal.pow10(Number.MAX_VALUE);\r\n player.records.bestInfinity.realTime = Number.MAX_VALUE;\r\n player.records.thisInfinity.time = DC.D0;\r\n player.records.thisInfinity.lastBuyTime = DC.D0;\r\n player.records.thisInfinity.realTime = 0;\r\n player.dimensionBoosts = (EternityMilestone.keepInfinityUpgrades.isReached) ? 4 : 0;\r\n player.galaxies = (EternityMilestone.keepInfinityUpgrades.isReached) ? 1 : 0;\r\n player.partInfinityPoint = 0;\r\n player.partInfinitied = 0;\r\n player.IPMultPurchases = 0;\r\n Currency.infinityPower.reset();\r\n Currency.timeShards.reset();\r\n player.records.thisEternity.time = DC.D0;\r\n player.records.thisEternity.realTime = 0;\r\n player.totalTickGained = 0;\r\n player.eterc8ids = 50;\r\n player.eterc8repl = 40;\r\n Player.resetRequirements(\"eternity\");\r\n}\r\n\r\nexport function applyEU1() {\r\n if (player.eternityUpgrades.size < 3 && Perk.autounlockEU1.canBeApplied) {\r\n for (const id of [1, 2, 3]) player.eternityUpgrades.add(id);\r\n }\r\n}\r\n\r\n// We want this to be checked before any EP-related autobuyers trigger, but we need to call this from the autobuyer\r\n// code since those run asynchronously from gameLoop\r\nexport function applyEU2() {\r\n if (player.eternityUpgrades.size < 6 && Perk.autounlockEU2.canBeApplied) {\r\n const secondRow = EternityUpgrade.all.filter(u => u.id > 3);\r\n for (const upgrade of secondRow) {\r\n if (player.eternityPoints.gte(upgrade.cost / 1e10)) player.eternityUpgrades.add(upgrade.id);\r\n }\r\n }\r\n}\r\n\r\nfunction askEternityConfirmation() {\r\n if (player.dilation.active && player.options.confirmations.dilation) {\r\n Modal.exitDilation.show();\r\n } else if (player.options.confirmations.eternity) {\r\n Modal.eternity.show();\r\n } else {\r\n animateAndEternity();\r\n }\r\n}\r\n\r\nexport function gainedEternities() {\r\n let eternityGain = new Decimal(1);\r\n if (MendingMilestone.one.isReached){\r\n eternityGain = eternityGain.times(10000);\r\n }\r\n if (Ra.unlocks.realitiesBoostInfinityAndEternityProduction.isUnlocked){\r\n let teresa90BaseExp=Math.pow((Math.log10(Currency.realities.value)/20), 1.111)\r\n if(teresa90BaseExp>1.5){\r\n teresa90BaseExp=1.5+Math.pow(teresa90BaseExp-1.5,0.75)\r\n }\r\n eternityGain = eternityGain.pow(teresa90BaseExp); //TODO: softcap this at ^1.5\r\n }\r\n return Pelle.isDisabled(\"eternityMults\")\r\n ? (Ra.unlocks.unlockPelleGlyphEffects.isUnlocked) ? eternityGain.times(getAdjustedGlyphEffect(\"timeetermult\")) : eternityGain\r\n : eternityGain.times(getAdjustedGlyphEffect(\"timeetermult\"))\r\n .timesEffectsOf(RealityUpgrade(3), Achievement(113))\r\n .pow(AlchemyResource.eternity.effectValue);\r\n}\r\n\r\nexport class EternityMilestoneState {\r\n constructor(config) {\r\n this.config = config;\r\n }\r\n\r\n get isReached() {\r\n if (Pelle.isDoomed && this.config.givenByPelle) {\r\n return this.config.givenByPelle();\r\n }\r\n return Currency.eternities.gte(this.config.eternities);\r\n }\r\n}\r\nexport const EternityMilestone = mapGameDataToObject(\r\n GameDatabase.eternity.milestones,\r\n config => (config.isBaseResource\r\n ? new EternityMilestoneState(config)\r\n : new EternityMilestoneState(config))\r\n);\r\n\r\nclass EternityUpgradeState extends SetPurchasableMechanicState {\r\n get currency() {\r\n return Currency.eternityPoints;\r\n }\r\n\r\n get set() {\r\n return player.eternityUpgrades;\r\n }\r\n}\r\n\r\nclass EPMultiplierState extends GameMechanicState {\r\n constructor() {\r\n super({});\r\n this.cachedCost = new Lazy(() => this.costAfterCount(player.epmultUpgrades));\r\n this.cachedEffectValue = (player.celestials.pelle.doomed && Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked) ? new Lazy(() => Decimal.pow(1.5, player.epmultUpgrades)) : new Lazy(() => DC.D5.pow(player.epmultUpgrades));\r\n }\r\n\r\n get isAffordable() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return false;\r\n if (Pelle.isDoomed && Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked && Currency.eternityPoints.gte(this.cost)) return true;\r\n return !Pelle.isDoomed && !this.isCapped && Currency.eternityPoints.gte(this.cost);\r\n }\r\n\r\n get cost() {\r\n return this.cachedCost.value;\r\n }\r\n\r\n get boughtAmount() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return 0;\r\n return player.epmultUpgrades;\r\n }\r\n\r\n get purchaseCap() {\r\n return 5e8;\r\n }\r\n\r\n get isCapped() {\r\n return player.epmultUpgrades >= this.purchaseCap;\r\n }\r\n\r\n set boughtAmount(value) {\r\n // Reality resets will make this bump amount negative, causing it to visually appear as 0 even when it isn't.\r\n // A dev migration fixes bad autobuyer states and this change ensures it doesn't happen again\r\n const diff = Math.clampMin(value - player.epmultUpgrades, 0);\r\n player.epmultUpgrades = Math.min(value, 5e8);\r\n this.cachedCost.invalidate();\r\n this.cachedEffectValue.invalidate();\r\n Autobuyer.eternity.bumpAmount(DC.D5.pow(diff));\r\n }\r\n\r\n get isCustomEffect() {\r\n return true;\r\n }\r\n\r\n get effectValue() {\r\n return this.cachedEffectValue.value;\r\n }\r\n\r\n purchase() {\r\n if (!this.isAffordable) return false;\r\n Currency.eternityPoints.subtract(this.cost);\r\n ++this.boughtAmount;\r\n return true;\r\n }\r\n\r\n buyMax(auto) {\r\n if (!this.isAffordable) return false;\r\n if (RealityUpgrade(15).isLockingMechanics) {\r\n if (!auto) RealityUpgrade(15).tryShowWarningModal();\r\n return false;\r\n }\r\n let bulk = null;\r\n try{\r\n bulk = bulkBuyBinarySearch(Currency.eternityPoints.value, {\r\n costFunction: this.costAfterCount,\r\n cumulative: true,\r\n firstCost: this.cost,\r\n }, this.boughtAmount);\r\n }\r\n catch{\r\n this.boughtAmount = 5e8;\r\n return true;\r\n }\r\n if (!bulk) return false;\r\n Currency.eternityPoints.subtract(bulk.purchasePrice);\r\n this.boughtAmount += bulk.quantity;\r\n return true;\r\n }\r\n\r\n reset() {\r\n this.boughtAmount = 0;\r\n }\r\n\r\n get costIncreaseThresholds() {\r\n return [DC.E100, Decimal.NUMBER_MAX_VALUE, DC.E1300, DC.E4000];\r\n }\r\n\r\n costAfterCount(count) {\r\n const costThresholds = EternityUpgrade.epMult.costIncreaseThresholds;\r\n const multPerUpgrade = [50, 100, 500, 1000];\r\n for (let i = 0; i < costThresholds.length; i++) {\r\n const cost = Decimal.pow(multPerUpgrade[i], count).times(500);\r\n if (cost.lt(costThresholds[i])) return cost;\r\n }\r\n return DC.E3.pow(count + Math.pow(Math.clampMin(count - 1334, 0), 1.2)).times(500);\r\n }\r\n}\r\n\r\nexport const EternityUpgrade = mapGameDataToObject(\r\n GameDatabase.eternity.upgrades,\r\n config => new EternityUpgradeState(config)\r\n);\r\n\r\nEternityUpgrade.epMult = new EPMultiplierState();\r\n","// There's a vue directive, long-press, defined at the bottom, which may be\r\n// what you want to use.\r\n//\r\n// Because it's related, we also define another directive, repeating-click, which\r\n// sends repeated events if the mouse is held down. (It sends firstclick and repeatclick)\r\n\r\n// LongPress produces 3 possible events:\r\n// 1) a long press (longPress property in handlers)\r\n// 2) a long press cancellation (early release, cancel property)\r\n// 3) a click (a short click, click property)\r\n// handlers can also have a \"repeat\" property, which is a number in ms. If defined,\r\n// the long press event will be fired repeatedly if the press continues, at that frequency\r\n//\r\n// Don't add your own click handlers to the object; get your clicks through\r\n// LongPress\r\n//\r\n// The long-press directive (v-long-press=\"{ delay:1000 }\")\r\n// attaches LongPress for you, and emits the following events you can listen for:\r\n// longpress\r\n// longpresscancel\r\n// longpressclick\r\n\r\nclass LongPress {\r\n static initializeVars() {\r\n LongPress._wasLongPress = false;\r\n LongPress._pressTimer = null;\r\n LongPress._currentCancelHandler = null;\r\n LongPress._currentTarget = null;\r\n // Debug\r\n LongPress._pressCount = 0;\r\n }\r\n\r\n static addTo(obj, timeout, handlers) {\r\n if (!Object.prototype.hasOwnProperty.call(handlers, \"longPress\")) {\r\n throw \"Need to specify a longPress handler\";\r\n }\r\n const begin = e => LongPress._pressBegin(timeout, handlers.longPress, handlers.cancel, handlers.repeat, e);\r\n obj.addEventListener(\"mousedown\", begin);\r\n obj.addEventListener(\"touchstart\", begin);\r\n obj.addEventListener(\"mouseout\", LongPress._cancelCurrentPress);\r\n obj.addEventListener(\"touchcancel\", LongPress._cancelCurrentPress);\r\n obj.addEventListener(\"touchmove\", e => {\r\n // Suggested in stackoverflow example\r\n e.preventDefault();\r\n const t = e.changedTouches[0];\r\n if (obj !== document.elementFromPoint(t.pageX, t.pageY)) {\r\n LongPress._cancelCurrentPress();\r\n }\r\n });\r\n if (handlers.click) {\r\n obj.addEventListener(\"click\", e => LongPress._handleClick(e, handlers.click));\r\n obj.addEventListener(\"touchend\", e => LongPress._handleTouchEnd(e, handlers.click));\r\n } else {\r\n obj.addEventListener(\"click\", LongPress._cancelCurrentPress);\r\n obj.addEventListener(\"touchend\", LongPress._cancelCurrentPress);\r\n }\r\n }\r\n\r\n static _cancelCurrentPress(e) {\r\n if (LongPress._currentCancelHandler) {\r\n LongPress._currentCancelHandler(e);\r\n LongPress._currentCancelHandler = null;\r\n }\r\n if (LongPress._pressTimer !== null) {\r\n clearTimeout(LongPress._pressTimer);\r\n LongPress._pressTimer = null;\r\n }\r\n LongPress._wasLongPress = false;\r\n LongPress._currentTarget = null;\r\n }\r\n\r\n // eslint-disable-next-line max-params\r\n static _pressBegin(timeout, handler, cancelHandler, repeat, e) {\r\n // If there's a timer already running, that means that something wasn't cancelled\r\n // properly (a press shouldn't begin if it hasn't ended). Clear out any existing presses:\r\n LongPress._cancelCurrentPress(e);\r\n // Ignore right click\r\n if (e.type === \"click\" && e.button !== 0) return;\r\n ++LongPress._pressCount;\r\n LongPress._currentCancelHandler = cancelHandler;\r\n LongPress._wasLongPress = false;\r\n LongPress._currentTarget = e.target;\r\n e.target.focus();\r\n LongPress._pressTimer = setTimeout(() => {\r\n LongPress._wasLongPress = true;\r\n handler(e);\r\n if (repeat) {\r\n LongPress._beginRepeat(repeat, handler, e);\r\n } else {\r\n LongPress._pressTimer = null;\r\n LongPress._currentCancelHandler = null;\r\n }\r\n }, timeout);\r\n }\r\n\r\n static _beginRepeat(timeout, handler, e) {\r\n LongPress._pressTimer = setTimeout(() => {\r\n handler(e);\r\n LongPress._beginRepeat(timeout, handler, e);\r\n }, timeout);\r\n }\r\n\r\n static _handleClick(e, handler) {\r\n const wasLP = LongPress._wasLongPress;\r\n // If the click was of a right button, just handle it\r\n if (e.button !== 0) return handler(e);\r\n // Cancel any existing presses\r\n LongPress._cancelCurrentPress(e);\r\n // If we just had a long press event, ignore the click\r\n return wasLP ? false : handler(e);\r\n }\r\n\r\n static _handleTouchEnd(e, handler) {\r\n // On touch devices, I don't think we get a normal click event; so we determine\r\n // a click based on a touch ending. To be on the safe side, we make sure the touch\r\n // began in the same place.\r\n const savedTarget = LongPress._currentTarget;\r\n const wasLP = LongPress._wasLongPress;\r\n // Cancel any existing presses\r\n LongPress._cancelCurrentPress(e);\r\n // If we just had a long press event, ignore the click; make sure targets match\r\n return !wasLP && savedTarget === e.target ? handler(e) : false;\r\n }\r\n}\r\n\r\nLongPress.initializeVars();\r\n\r\nexport function useLongPress(vue) {\r\n vue.directive(\"long-press\", {\r\n bind(el, binding, vnode) {\r\n // This seems to be the only way to get events to our component\r\n const emit = (name, data) => {\r\n const handlers = (vnode.data && vnode.data.on);\r\n if (handlers && handlers[name]) {\r\n handlers[name].fns(data);\r\n }\r\n };\r\n LongPress.addTo(el, binding.value.delay, {\r\n longPress: () => emit(\"longpress\"),\r\n cancel: () => emit(\"longpresscancel\"),\r\n click: () => emit(\"longpressclick\"),\r\n });\r\n }\r\n });\r\n}\r\n\r\nexport function useRepeatingClick(vue) {\r\n vue.directive(\"repeating-click\", {\r\n bind(el, binding, vnode) {\r\n // This seems to be the only way to get events to our component\r\n const emit = (name, data) => {\r\n const handlers = (vnode.data && vnode.data.on);\r\n if (handlers && handlers[name]) {\r\n handlers[name].fns(data);\r\n }\r\n };\r\n LongPress.addTo(el, binding.value.delay, {\r\n longPress: () => emit(\"repeatclick\"),\r\n click: () => emit(\"firstclick\"),\r\n repeat: 250\r\n });\r\n }\r\n });\r\n}\r\n","export const notify = (function() {\r\n const template = document.createElement(\"div\");\r\n template.classList.add(\"o-notification\");\r\n const enterAnimation = \"a-notification--enter\";\r\n const leaveAnimation = \"a-notification--leave\";\r\n function showNotification(text, elClass, duration = 2000) {\r\n if (!GameUI.initialized) {\r\n setTimeout(showNotification, 500, text, elClass, duration);\r\n return;\r\n }\r\n const el = template.cloneNode();\r\n el.textContent = text;\r\n el.classList.add(elClass, enterAnimation);\r\n const container = document.getElementById(\"notification-container\");\r\n container.appendChild(el);\r\n let entered = false;\r\n function stopEnter() {\r\n if (entered) return;\r\n entered = true;\r\n el.classList.remove(enterAnimation);\r\n }\r\n setTimeout(() => stopEnter(), 500);\r\n let leaving = false;\r\n function leave() {\r\n if (leaving) return;\r\n leaving = true;\r\n stopEnter();\r\n el.classList.add(leaveAnimation);\r\n setTimeout(() => el.remove(), 500);\r\n }\r\n setTimeout(() => leave(), duration);\r\n el.onclick = () => leave();\r\n }\r\n return {\r\n success: (text, duration) => showNotification(text, \"o-notification--success\", duration),\r\n error: (text, duration) => showNotification(text, \"o-notification--error\", duration),\r\n info: (text, duration) => showNotification(text, \"o-notification--info\", duration),\r\n infinity: (text, duration) => showNotification(text, \"o-notification--infinity\", duration),\r\n eternity: (text, duration) => showNotification(text, \"o-notification--eternity\", duration),\r\n reality: (text, duration) => showNotification(text, \"o-notification--reality\", duration),\r\n automator: (text, duration) => showNotification(text, \"o-notification--automator\", duration),\r\n blackHole: (text, duration) => showNotification(text, \"o-notification--black-hole\", duration),\r\n strike: (text, duration) => showNotification(text, \"o-notification--strike\", duration),\r\n showBlackHoles: true\r\n };\r\n}());\r\n","import { DC } from \"./constants\"\r\n\r\nexport const state = {\r\n view: {\r\n modal: {\r\n queue: [],\r\n current: undefined,\r\n cloudConflict: [],\r\n progressBar: undefined,\r\n },\r\n quotes: {\r\n queue: [],\r\n current: undefined,\r\n history: undefined\r\n },\r\n tabs: {\r\n reality: {\r\n openGlyphWeights: false,\r\n currentGlyphTooltip: -1,\r\n // 1 means up and left of the mouse\r\n glyphTooltipDirection: 1,\r\n draggingGlyphInfo: {\r\n id: 0,\r\n type: \"\",\r\n sacrificeValue: DC.D0,\r\n },\r\n mouseoverGlyphInfo: {\r\n id: 0,\r\n type: \"\",\r\n sacrificeValue: DC.D0,\r\n refineValue: DC.D0,\r\n inInventory: false,\r\n },\r\n automator: {\r\n fullScreen: false,\r\n editorScriptID: \"\",\r\n lines: []\r\n }\r\n },\r\n },\r\n shiftDown: false,\r\n theme: \"Normal\",\r\n bigCrunch: false,\r\n scrollWindow: 0,\r\n draggingUIID: -1,\r\n currentContextMenu: null,\r\n tab: \"dimensions\",\r\n subtab: \"antimatter\",\r\n UIType: \"Modern\",\r\n news: false,\r\n initialized: false,\r\n tutorialState: 0,\r\n tutorialActive: true,\r\n h2pForcedTab: undefined,\r\n },\r\n notationName: \"\",\r\n formatPreBreak: false,\r\n lastClickTime: 0,\r\n};\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.view.initialized)?_c('div',{staticClass:\"ui-wrapper\",class:_vm.containerClass,attrs:{\"id\":\"ui-container\"}},[_c('div',{staticClass:\"c-game-ui\",attrs:{\"id\":\"ui\"}},[_c(_vm.uiLayout,{tag:\"component\"},[_c(_vm.page,{tag:\"component\",staticClass:\"c-game-tab\"})],1),(_vm.isThemeS12)?_c('S12DesktopIcons'):_vm._e(),(_vm.view.theme !== 'Normal')?_c('link',{attrs:{\"type\":\"text/css\",\"rel\":\"stylesheet\",\"href\":_vm.themeCss}}):_vm._e()],1),(!_vm.isThemeS12)?_c('GameUiComponentFixed'):_vm._e(),(!_vm.isThemeS12)?_c('BackgroundAnimations'):_vm._e(),(_vm.isThemeS12)?_c('S12UiFixed'):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-background-animations\",attrs:{\"id\":\"ui-background-animations\"}},[(_vm.blob)?_c('BlobSnowflakes'):_vm._e(),(_vm.animateTachyons)?_c('TachyonParticles'):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.initialized)?_c('div',[(_vm.animateBackground)?_c('svg',{staticClass:\"c-blob-snowflake-container\"},_vm._l((_vm.count),function(i){return _c('BlobSnowflake',{key:i,attrs:{\"bounds\":_vm.bounds}})}),1):_c('svg',{staticClass:\"c-blob-background-container\"},_vm._l((_vm.count),function(i){return _c('BlobBackground',{key:i,attrs:{\"bounds\":_vm.bounds}})}),1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('text',{staticClass:\"o-blob-background\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlobBackground.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlobBackground.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlobBackground.vue?vue&type=template&id=3413da3e&scoped=true&\"\nimport script from \"./BlobBackground.vue?vue&type=script&lang=js&\"\nexport * from \"./BlobBackground.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BlobBackground.vue?vue&type=style&index=0&id=3413da3e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3413da3e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('text',{staticClass:\"o-blob-snowflake\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlobSnowflake.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlobSnowflake.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlobSnowflake.vue?vue&type=template&id=67871b93&scoped=true&\"\nimport script from \"./BlobSnowflake.vue?vue&type=script&lang=js&\"\nexport * from \"./BlobSnowflake.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BlobSnowflake.vue?vue&type=style&index=0&id=67871b93&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"67871b93\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlobSnowflakes.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlobSnowflakes.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlobSnowflakes.vue?vue&type=template&id=2549fa62&scoped=true&\"\nimport script from \"./BlobSnowflakes.vue?vue&type=script&lang=js&\"\nexport * from \"./BlobSnowflakes.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BlobSnowflakes.vue?vue&type=style&index=0&id=2549fa62&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2549fa62\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.initialized)?_c('svg',{staticClass:\"c-tachyon-particle-container\"},_vm._l((_vm.count),function(i){return _c('TachyonParticle',{key:i,attrs:{\"bounds\":_vm.bounds,\"is-blob\":_vm.isBlob}})}),1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isBlob)?_c('text',{staticClass:\"o-tachyon-particle\"},[_vm._v(\" \"+_vm._s(_vm.blob)+\" \")]):_c('circle',{staticClass:\"o-tachyon-particle\",attrs:{\"r\":\"2\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TachyonParticle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TachyonParticle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TachyonParticle.vue?vue&type=template&id=374b7fbb&scoped=true&\"\nimport script from \"./TachyonParticle.vue?vue&type=script&lang=js&\"\nexport * from \"./TachyonParticle.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"374b7fbb\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TachyonParticles.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TachyonParticles.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TachyonParticles.vue?vue&type=template&id=d31a6422&scoped=true&\"\nimport script from \"./TachyonParticles.vue?vue&type=script&lang=js&\"\nexport * from \"./TachyonParticles.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d31a6422\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BackgroundAnimations.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BackgroundAnimations.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BackgroundAnimations.vue?vue&type=template&id=e3d8c3e6&scoped=true&\"\nimport script from \"./BackgroundAnimations.vue?vue&type=script&lang=js&\"\nexport * from \"./BackgroundAnimations.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e3d8c3e6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{key:_vm.newGameKey,staticClass:\"container c-classic l-Classic\",attrs:{\"id\":\"container\"}},[_c('link',{attrs:{\"rel\":\"stylesheet\",\"type\":\"text/css\",\"href\":\"stylesheets/classic.css\"}}),_c('BigCrunchButton'),(!_vm.bigCrunch)?[(_vm.news)?_c('NewsTicker',{staticClass:\"l-classic__news-bar\"}):_vm._e(),(_vm.hasMendingButton)?_c('div',{staticClass:\"c-mending-points\"},[_c('MendingPointsHeader'),_c('MendingButton')],1):_vm._e(),_c('GameHeader',{staticClass:\"l-classic__header\"}),_c('ClassicTabBar'),(_vm.tab.config.before)?_c(_vm.tab.config.before,{tag:\"component\"}):_vm._e(),_c('ClassicSubtabBar'),_c('div',{staticClass:\"l-classic__page\"},[_vm._t(\"default\")],2)]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isVisible),expression:\"isVisible\"}],staticClass:\"c-mending-points\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-mending-tab__mending-points\"},[_vm._v(_vm._s(_vm.formatNE(_vm.mendingPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Multiversal Remain\", _vm.mendingPoints))+\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingPointsHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingPointsHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingPointsHeader.vue?vue&type=template&id=a8ab28e8&scoped=true&\"\nimport script from \"./MendingPointsHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingPointsHeader.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MendingPointsHeader.vue?vue&type=style&index=0&id=a8ab28e8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a8ab28e8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.shouldDisplay)?_c('span',[(_vm.isModern)?_c('div',[(!_vm.smallCrunch)?_c('h3',{staticClass:\"l-spacing\"},[_vm._v(\" The world has collapsed due to excess antimatter. \")]):_vm._e(),_c('button',{class:{\n 'btn-big-crunch': true,\n 'btn-big-crunch--small': _vm.smallCrunch\n },on:{\"click\":_vm.handleClick}},[_vm._v(\" Big Crunch \")])]):_c('div',[_c('button',{class:{\n 'o-tab-btn': true,\n 'o-big-crunch-btn': true,\n 'l-classic__big-crunch-btn': true,\n 'l-classic__big-crunch-btn--overlay': _vm.smallCrunch\n },on:{\"click\":_vm.handleClick}},[_vm._v(\" Big Crunch \")]),(!_vm.smallCrunch)?_c('div',{staticClass:\"o-emptiness\"},[_vm._v(\" The world has collapsed due to excess of antimatter. \")]):_vm._e()])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BigCrunchButton.vue?vue&type=template&id=ff18554e&scoped=true&\"\nimport script from \"./BigCrunchButton.vue?vue&type=script&lang=js&\"\nexport * from \"./BigCrunchButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BigCrunchButton.vue?vue&type=style&index=0&id=ff18554e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ff18554e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('HeaderChallengeDisplay'),_c('HeaderChallengeEffects'),_c('HeaderPrestigeGroup'),(_vm.hasReality)?_c('GameSpeedDisplay'):_vm._e(),(_vm.hasReality)?_c('br'):_vm._e(),_c('HeaderBlackHole')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.canModifyBlackHoles)?_c('span',{staticClass:\"c-black-hole-header\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-max c-primary-btn--black-hole-header\",attrs:{\"onclick\":\"BlackHoles.togglePause()\"}},[_vm._v(\" \"+_vm._s(_vm.pauseText)+\" \")]),(_vm.canCharge)?_c('span',[_c('PrimaryButton',{class:_vm.chargingClassObject(),attrs:{\"onclick\":\"Enslaved.toggleStoreBlackHole()\"}},[(_vm.isCharging)?_c('span',[_vm._v(\" Stop Charging \")]):_c('span',[_vm._v(\" Charge \")])])],1):_vm._e(),(_vm.displaySingle)?_c('span',{staticClass:\"c-black-hole-status-text\",domProps:{\"innerHTML\":_vm._s('🌀:' + _vm.singleState)}}):_c('span',_vm._l((_vm.blackHoles),function(blackHole,i){return _c('HeaderBlackHoleStatusText',{key:'state' + i,attrs:{\"black-hole\":blackHole}})}),1),(_vm.canCharge)?_c('span',[_c('PrimaryButton',{staticClass:\"o-discharge-btn c-primary-btn--black-hole-header\",class:{ 'o-small-discharge-text': _vm.hasLongText },attrs:{\"onclick\":\"Enslaved.useStoredTime(false)\"}},[_vm._v(\" \"+_vm._s(_vm.dischargeText)+\" \")])],1):_vm._e(),(_vm.canAutoRelease)?_c('span',[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--buy-max c-primary-btn--black-hole-header\",attrs:{\"label\":\"Pulse:\"},model:{value:(_vm.isAutoReleasing),callback:function ($$v) {_vm.isAutoReleasing=$$v},expression:\"isAutoReleasing\"}})],1):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('span',[_vm._v(\" 🌀\"+_vm._s(_vm.id)+\":\"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.state)}})]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderBlackHoleStatusText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderBlackHoleStatusText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderBlackHoleStatusText.vue?vue&type=template&id=0cc13ba1&scoped=true&\"\nimport script from \"./HeaderBlackHoleStatusText.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderBlackHoleStatusText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0cc13ba1\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('PrimaryButton',_vm._b({on:{\"click\":function($event){return _vm.emitInput(!_vm.value)}}},'PrimaryButton',_vm.$attrs,false),[_vm._v(\" \"+_vm._s(_vm.displayText)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PrimaryToggleButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PrimaryToggleButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PrimaryToggleButton.vue?vue&type=template&id=3424c87c&\"\nimport script from \"./PrimaryToggleButton.vue?vue&type=script&lang=js&\"\nexport * from \"./PrimaryToggleButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderBlackHole.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderBlackHole.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderBlackHole.vue?vue&type=template&id=60b7c53e&scoped=true&\"\nimport script from \"./HeaderBlackHole.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderBlackHole.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderBlackHole.vue?vue&type=style&index=0&id=60b7c53e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"60b7c53e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{staticClass:\"l-game-header__challenge-text\"},[_c('span',{class:_vm.textClassObject(),on:{\"click\":_vm.textClicked}},[_vm._v(\" You are currently in \"+_vm._s(_vm.challengeDisplay)+\" \")]),(_vm.isInFailableEC)?_c('FailableEcText'):_vm._e(),_c('span',{staticClass:\"l-padding-line\"}),(_vm.showExit)?_c('PrimaryButton',{on:{\"click\":_vm.exitButtonClicked}},[_vm._v(\" \"+_vm._s(_vm.exitText)+\" \")]):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_vm._v(\" - \"),_c('span',{style:(_vm.textStyle)},[_vm._v(_vm._s(_vm.text))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FailableEcText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FailableEcText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FailableEcText.vue?vue&type=template&id=5d83f76e&scoped=true&\"\nimport script from \"./FailableEcText.vue?vue&type=script&lang=js&\"\nexport * from \"./FailableEcText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5d83f76e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderChallengeDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderChallengeDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderChallengeDisplay.vue?vue&type=template&id=71e60358&scoped=true&\"\nimport script from \"./HeaderChallengeDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderChallengeDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderChallengeDisplay.vue?vue&type=style&index=0&id=71e60358&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"71e60358\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.waitingforHint)?_c('div',[_vm._v(\" \"+_vm._s(_vm.enslavedText)+\" \")]):_vm._e(),(_vm.isInEffarig)?_c('div',[_vm._v(\" Game speed and multipliers are Dilated \"+_vm._s(_vm.effarigMultNerfText)+\" \"),_c('br'),_vm._v(\" Tickspeed is Dilated \"+_vm._s(_vm.effarigTickNerfText)+\" \")]):_vm._e(),(_vm.isInLaitela)?_c('div',[_vm._v(\" Entropy: \"+_vm._s(_vm.laitelaEntropy)+\" (\"+_vm._s(_vm.laitelaTimer)+\") \")]):_vm._e(),(_vm.isInMatterChallenge)?_c('div',[_vm._v(\" There is \"+_vm._s(_vm.format(_vm.matter, 2, 1))+\" matter. \")]):_vm._e(),(_vm.isChallengePowerVisible)?_c('div',[_vm._v(\" \"+_vm._s(_vm.challengePower)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderChallengeEffects.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderChallengeEffects.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderChallengeEffects.vue?vue&type=template&id=b2464992&scoped=true&\"\nimport script from \"./HeaderChallengeEffects.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderChallengeEffects.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b2464992\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-prestige-info-blocks\"},[_c('HeaderEternityContainer',{staticClass:\"l-game-header__eternity\"}),_c('HeaderCenterContainer',{staticClass:\"l-game-header__center\"}),_c('HeaderInfinityContainer',{staticClass:\"l-game-header__infinity\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.shouldDisplay)?_c('div',{staticClass:\"c-prestige-button-container\"},[_c('span',[_vm._v(\"You have \"),_c('span',{staticClass:\"c-game-header__antimatter\"},[_vm._v(_vm._s(_vm.format(_vm.antimatter, 2, 1)))]),_vm._v(\" antimatter.\")]),(_vm.hasRealityButton)?_c('div',{staticClass:\"c-reality-container\"},[_c('RealityCurrencyHeader'),(_vm.isDoomed)?_c('ArmageddonButton',{attrs:{\"is-header\":true}}):_c('RealityButton')],1):_c('div',[_vm._v(\" You are getting \"+_vm._s(_vm.format(_vm.antimatterPerSec, 2))+\" antimatter per second. \"),_c('br'),_c('HeaderTickspeedInfo')],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:_vm.buttonClassObject,on:{\"click\":_vm.manualArmageddon}},[(_vm.isHeader)?_c('span',[_vm._v(\"You cannot escape a Doomed Reality!\"),_c('br')]):_vm._e(),(!this.mendupg5)?_c('span',{staticClass:\"c-remnant-gain-display\"},[_vm._v(\" Armageddon for \"),_c('span',{staticClass:\"c-remnant-gain\"},[_vm._v(_vm._s(_vm.remnants))]),_vm._v(\" Remnants \")]):_vm._e(),(this.mendupg5)?_c('span',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-remnant-gain\"},[_vm._v(_vm._s(_vm.remnantsTotal))]),_vm._v(\" Remnants \")]):_vm._e(),_c('br'),_vm._v(\" Reality Shards \"),_c('span',{staticClass:\"c-reality-shard-gain\"},[_vm._v(_vm._s(_vm.format(_vm.realityShardGain, 2, 2)))]),_vm._v(\"/s \"),(!this.mendupg5)?_c('span',[_vm._v(\"➜\")]):_vm._e(),(!this.mendupg5)?_c('span',{staticClass:\"c-reality-shard-gain\"},[_vm._v(_vm._s(_vm.format(_vm.nextRealityShardGain, 2, 2)))]):_vm._e(),(!this.mendupg5)?_c('span',[_vm._v(\"/s\")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ArmageddonButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ArmageddonButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ArmageddonButton.vue?vue&type=template&id=8077c0a8&scoped=true&\"\nimport script from \"./ArmageddonButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ArmageddonButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ArmageddonButton.vue?vue&type=style&index=0&id=8077c0a8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8077c0a8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-reality-currency\"},[_vm._v(\" You have \"),_c('b',{class:_vm.resourceClass()},[_vm._v(\" \"+_vm._s(_vm.currencyValue)+\" \")]),_vm._v(\" \"+_vm._s(_vm.currencyName)+\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityCurrencyHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityCurrencyHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityCurrencyHeader.vue?vue&type=template&id=669bdb06&scoped=true&\"\nimport script from \"./RealityCurrencyHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityCurrencyHeader.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RealityCurrencyHeader.vue?vue&type=style&index=0&id=669bdb06&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"669bdb06\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('button',{staticClass:\"c-mending-button\",class:_vm.buttonClassObject,on:{\"click\":_vm.mend}},[(_vm.firstMend)?[_vm._v(\" There is another way... You need to Mend the Multiverse. \")]:(_vm.noMendBonus)?[_vm._v(\" Exit Doomed Reality, but get no Mend Rewards. \")]:(_vm.needDoom)?[_vm._v(\" Reach \"),_c('span',[_vm._v(_vm._s(_vm.formatNE(_vm.END, 2, 2)))]),_vm._v(\" antimatter in a Doomed Reality to Mend the Multiverse \")]:(!_vm.canMend)?[_vm._v(\" Reach \"),_c('span',[_vm._v(_vm._s(_vm.formatNE(_vm.END, 2, 2)))]),_vm._v(\" antimatter to Mend the Multiverse \")]:(_vm.isCorrupted)?[_vm._v(\" Make the Multiverse Friendly for \"+_vm._s(_vm.formatNE(_vm.frags, 0, 0))+\" Hostile Fragments \")]:[_vm._v(\" Mend the Multiverse for \"),_c('span',[_vm._v(_vm._s(_vm.formatNE(_vm.gainedMvR, 2)))]),_vm._v(\" Multiversal \"+_vm._s(_vm.pluralize(\"Remain\", _vm.gainedMvR))+\". (\"+_vm._s(_vm.format(_vm.MvRRate, 2, 2))+\" MvR/min) \")]],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingButton.vue?vue&type=template&id=4152d354&\"\nimport script from \"./MendingButton.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('br'),_vm._v(\" \"+_vm._s(_vm.perUpgrade)+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.tickspeedDisplay)+\" \"),_c('br'),_c('GameSpeedDisplay')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"c-gamespeed\"},[_c('span',[_vm._v(\" \"+_vm._s(_vm.baseText)+\" \")]),(_vm.isPulsing)?_c('span',[_vm._v(\"(\"),_c('i',{staticClass:\"fas fa-expand-arrows-alt u-fa-padding\"}),_vm._v(\" \"+_vm._s(_vm.pulseSpeedText)+\")\")]):_vm._e(),(_vm.pastGSSoftcap)?_c('span',[_c('br'),_vm._v(\" Due to instability, Game Speed past every \"+_vm._s(_vm.format(_vm.scOneStart))+\" is raised \"+_vm._s(_vm.formatPow(_vm.scOneEffect, 3, 3))+\" before pulsing. \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { GameDatabase } from \"./secret-formula/game-database\";\r\nimport { GameMechanicState } from \"./game-mechanics\";\r\n\r\nexport const Speedrun = {\r\n officialFixedSeed: 31337,\r\n unlock() {\r\n if (player.speedrun.isUnlocked) return;\r\n Modal.message.show(`You have unlocked Speedrun Mode! This allows you to start a new save file with some slight\r\n changes which can be helpful if you're trying to complete the game as quickly as possible. The option to\r\n start a Speedrun Save is now available in the Options tab, under Saving. Choosing to start a Speedrun Save\r\n will provide you with another modal with more in-depth information.`, {}, 3);\r\n player.speedrun.isUnlocked = true;\r\n },\r\n // Used to block the seed-changing modal from opening (other functions assume this is checked beforehand)\r\n canModifySeed() {\r\n return player.realities < 1;\r\n },\r\n modifySeed(key, seed) {\r\n player.speedrun.seedSelection = key;\r\n let newSeed;\r\n switch (key) {\r\n case SPEEDRUN_SEED_STATE.FIXED:\r\n player.reality.initialSeed = this.officialFixedSeed;\r\n player.speedrun.initialSeed = this.officialFixedSeed;\r\n return;\r\n case SPEEDRUN_SEED_STATE.RANDOM:\r\n // This gives seeds of roughly the same magnitude that the first-run Date.now() would give\r\n newSeed = Math.floor(1e13 * Math.random());\r\n player.reality.initialSeed = newSeed;\r\n player.speedrun.initialSeed = newSeed;\r\n return;\r\n case SPEEDRUN_SEED_STATE.PLAYER:\r\n player.reality.initialSeed = seed;\r\n player.speedrun.initialSeed = seed;\r\n return;\r\n default:\r\n throw new Error(\"Unrecognized speedrun seed setting option\");\r\n }\r\n },\r\n seedModeText(rec) {\r\n const record = rec ?? player.speedrun;\r\n switch (record.seedSelection) {\r\n case SPEEDRUN_SEED_STATE.UNKNOWN:\r\n return `No seed data (old save)`;\r\n case SPEEDRUN_SEED_STATE.FIXED:\r\n return `Official fixed seed (${record.initialSeed})`;\r\n case SPEEDRUN_SEED_STATE.RANDOM:\r\n return `Random seed (${record.initialSeed})`;\r\n case SPEEDRUN_SEED_STATE.PLAYER:\r\n return `Player seed (${record.initialSeed})`;\r\n default:\r\n throw new Error(\"Unrecognized speedrun seed option in seedModeText\");\r\n }\r\n },\r\n // If a name isn't given, choose a somewhat-likely-to-be-unique big number instead\r\n generateName(name) {\r\n if (name.trim() === \"\") {\r\n const id = Math.floor((1e7 - 1) * Math.random()) + 1;\r\n return `AD Player #${\"0\".repeat(6 - Math.floor(Math.log10(id)))}${id}`;\r\n }\r\n if (name.length > 40) return `${name.slice(0, 37)}...`;\r\n return name;\r\n },\r\n // Hard-resets the current save and puts it in a state ready to be \"unpaused\" once resources start being generated\r\n prepareSave(name) {\r\n // Carry all relevant post-completion variables over too\r\n NG.restartWithCarryover();\r\n\r\n player.speedrun.isUnlocked = true;\r\n player.speedrun.isActive = true;\r\n this.modifySeed(SPEEDRUN_SEED_STATE.FIXED);\r\n player.speedrun.name = name;\r\n\r\n // We make a few assumptions on settings which are likely to be changed for all speedrunners\r\n for (const key of Object.keys(player.options.confirmations)) player.options.confirmations[key] = false;\r\n player.options.confirmations.glyphSelection = true;\r\n for (const key of Object.keys(player.options.animations)) {\r\n if (typeof player.options.animations[key] === \"boolean\") player.options.animations[key] = false;\r\n }\r\n\r\n // A few achievements are given for free to mitigate weird strategies at the beginning of runs or unavoidable\r\n // timewalls for particularly fast/optimized runs\r\n Achievement(22).unlock();\r\n Achievement(35).unlock();\r\n Achievement(76).unlock();\r\n\r\n // Some time elapses after the reset and before the UI is actually ready, which ends up getting \"counted\" as offline\r\n player.speedrun.offlineTimeUsed = 0;\r\n GameStorage.save();\r\n },\r\n // Speedruns are initially paused until startTimer is called, which happens as soon as the player purchases a AD or\r\n // uses the Konami code. Until then, they're free to do whatever they want with the UI\r\n startTimer() {\r\n if (player.speedrun.hasStarted) return;\r\n player.speedrun.hasStarted = true;\r\n player.speedrun.startDate = Date.now();\r\n player.lastUpdate = Date.now();\r\n\r\n // This needs to be calculated \"live\" because using spentSTD includes any offline progress purchases too\r\n let currentSpent = 0;\r\n for (const purchase of ShopPurchase.all) {\r\n if (purchase.config.instantPurchase) continue;\r\n currentSpent += purchase.purchases * purchase.cost;\r\n }\r\n this.setSTDUse(ShopPurchaseData.isIAPEnabled && currentSpent > 0);\r\n },\r\n isPausedAtStart() {\r\n return player.speedrun.isActive && !player.speedrun.hasStarted;\r\n },\r\n // This needs to be here due to JS applying \"function scope\" to the player object within importing in storage.js,\r\n // which causes any direct changes done in storage.js to fall out of scope afterwards. We also don't want to change\r\n // this state at the beginning in case people want to share identical single-segment saves before starting the timer.\r\n setSegmented(state) {\r\n if (this.isPausedAtStart()) return;\r\n player.speedrun.isSegmented = state;\r\n },\r\n setSTDUse(state) {\r\n if (this.isPausedAtStart() || ShopPurchaseData.spentSTD === 0) return;\r\n player.speedrun.usedSTD = state;\r\n },\r\n mostRecentMilestone() {\r\n const newestTime = player.speedrun.records.max();\r\n if (newestTime === 0) return 0;\r\n return player.speedrun.records.indexOf(newestTime);\r\n }\r\n};\r\n\r\nclass SpeedrunMilestone extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.registerEvents(config.checkEvent, args => this.tryComplete(args));\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get isReached() {\r\n return player.speedrun.records[this.config.id] !== 0;\r\n }\r\n\r\n tryComplete(args) {\r\n if (!this.config.checkRequirement(args)) return;\r\n this.complete();\r\n }\r\n\r\n complete() {\r\n if (this.isReached || !player.speedrun.isActive) return;\r\n // Rounding slightly reduces filesize by removing weird float rounding\r\n player.speedrun.records[this.config.id] = Math.round(player.records.realTimePlayed);\r\n GameUI.notify.success(`Speedrun Milestone Reached: ${this.name}`);\r\n }\r\n}\r\n\r\nexport const SpeedrunMilestones = SpeedrunMilestone.createAccessor(GameDatabase.speedrunMilestones);\r\n","/* eslint-disable import/extensions */\r\nimport pako from \"pako/dist/pako.esm.mjs\";\r\n/* eslint-enable import/extensions */\r\n\r\n// Why the fuck is this here?\r\n// Well, we cannot adjust EXP_LIMIT outside of break_eternity.js\r\n// However, we need to adjust it since EXP_LIMIT is 9e15, not 1.79e308\r\n// The only way to do this is override the toString function with our own\r\n\r\nDecimal.prototype.toString = function () {\r\n if (isNaN(this.m) || isNaN(this.e)) {\r\n return \"NaN\";\r\n }\r\n\r\n if (this.e >= Infinity) {\r\n return this.m > 0 ? \"Infinity\" : \"-Infinity\";\r\n }\r\n\r\n if (this.e <= -Infinity || this.m === 0) {\r\n return \"0\";\r\n }\r\n\r\n if (this.e < 21 && this.e > -7) {\r\n return this.toNumber().toString();\r\n }\r\n\r\n const decimalOfE = new Decimal(this.e);\r\n\r\n if (decimalOfE.e > 20){\r\n const places = (decimalOfE.m.toString().split(\".\")[1] ?? \"\").length\r\n return `${this.m}e${(this.e >= 0 ? \"+\" : \"\")}${decimalOfE.m.toString().split(\".\")[0]}${decimalOfE.m.toString().split(\".\")[1] ?? \"\"}${\"0\".repeat(decimalOfE.e - places)}`\r\n }\r\n\r\n return this.m + \"e\" + (this.e >= 0 ? \"+\" : \"\") + this.e;\r\n};\r\n\r\nexport const GameSaveSerializer = {\r\n SaveType: \"devsave\",\r\n\r\n serialize(save) {\r\n const json = JSON.stringify(save, this.jsonConverter);\r\n return this.encodeText(json, this.SaveType);\r\n },\r\n // eslint-disable-next-line no-unused-vars\r\n jsonConverter(key, value) {\r\n if (value === Infinity) {\r\n return \"Infinity\";\r\n }\r\n if (value instanceof Set) {\r\n return Array.from(value.keys());\r\n }\r\n return value;\r\n },\r\n deserialize(data) {\r\n if (typeof data !== \"string\") return undefined;\r\n try {\r\n const json = this.decodeText(data, \"savefile\");\r\n // eslint-disable-next-line no-unused-vars\r\n return JSON.parse(json, (k, v) => ((v === Infinity) ? \"Infinity\" : v));\r\n } catch (e) {\r\n try {\r\n const json = this.decodeText(data, \"devsave\");\r\n return this.SaveType == \"devsave\" ? JSON.parse(json, (k, v) => ((v === Infinity) ? \"Infinity\" : v)) : \"devsave\";\r\n } catch (e) {\r\n return undefined;\r\n }\r\n }\r\n },\r\n // Define these now so we don't keep creating new ones, which vaguely seems bad.\r\n encoder: new TextEncoder(),\r\n decoder: new TextDecoder(),\r\n // These are magic strings that savefiles/automator scripts should start with.\r\n // Due to the way atob/btoa work, old saves (before the reality update and for\r\n // a significant part of its development) always started with eYJ even though\r\n // it wasn't explicitly added. If you want to make a mod of AD, you may want to\r\n // rename \"savefile\" to \"modless savefile\" or something and create a new\r\n // \"savefile\" or \"mod savefile\" property with a string like\r\n // \"AntimatterDimensions[mod name]SavefileFormatAAA\", so that people don't\r\n // confuse your saves with AD saves but can still import AD saves (this will\r\n // also require changing some other code slightly, particularly decode).\r\n startingString: {\r\n savefile: \"AntimatterDimensionsSavefileFormat\",\r\n \"devsave\": \"ADRedemptionTestingSavefileFormat\",\r\n \"automator script\": \"AntimatterDimensionsAutomatorScriptFormat\",\r\n \"automator data\": \"AntimatterDimensionsAutomatorDataFormat\",\r\n \"glyph filter\": \"AntimatterDimensionsGlyphFilterFormat\",\r\n },\r\n // The ending strings aren't as verbose so that we can save a little space.\r\n endingString: {\r\n savefile: \"EndOfSavefile\",\r\n \"devsave\": \"EndOfADRdevSavefile\",\r\n \"automator script\": \"EndOfAutomatorScript\",\r\n \"automator data\": \"EndOfAutomatorData\",\r\n \"glyph filter\": \"EndOfGlyphFilter\",\r\n },\r\n // This should always be three characters long, and should ideally go AAA, AAB, AAC, etc.\r\n // so that we can do inequality tests on it to compare versions (though skipping a version\r\n // shouldn't be a problem).\r\n version: \"AAB\",\r\n // Steps are given in encoding order.\r\n // Export and cloud save use the same steps because the maximum ~15% saving\r\n // from having them be different seems not to be worth it.\r\n // It's important that `this` is what it should be in these function calls\r\n // (encoder/decoded for the first element, window for the fourth)\r\n // which is why we shouldn't do e.g. { encode: encoder.encode, decode: encoder.decode }\r\n // In the fifth element, order of operations is important: we don't want to encode 0s we added in encoding\r\n // (i.e. + -> 0b -> 0ab is undesired) or to accidentally decode 0ac -> 0c -> / (slash)\r\n // when encoding says (as it should) 0c -> 0ac.\r\n // These functions contain the code that does different things in different versions.\r\n // Right now we only have code for steps to only apply in certain versions; add a condition to the step.\r\n // It wouldn't be too hard to allow steps to depend on version though.\r\n steps: [\r\n // This step transforms saves into unsigned 8-bit arrays, as pako requires.\r\n { encode: x => GameSaveSerializer.encoder.encode(x), decode: x => GameSaveSerializer.decoder.decode(x) },\r\n // This step is where the compression actually happens. The pako library works with unsigned 8-bit arrays.\r\n { encode: x => pako.deflate(x), decode: x => pako.inflate(x) },\r\n // This step converts from unsigned 8-bit arrays to strings with codepoints less than 256.\r\n // We need to do this outselves because GameSaveSerializer.decoder would give us unicode sometimes.\r\n {\r\n encode: x => Array.from(x).map(i => String.fromCharCode(i)).join(\"\"),\r\n decode: x => Uint8Array.from(Array.from(x).map(i => i.charCodeAt(0)))\r\n },\r\n // This step makes the characters in saves printable. At this point in the process, all characters\r\n // will already have codepoints less than 256 (from the previous step), so emoji in the original save\r\n // won't break this.\r\n { encode: x => btoa(x), decode: x => atob(x) },\r\n // This step removes + and /, because if they occur, you can double-click on a save and get\r\n // everything up to the first + or /, which can be hard to debug. We also remove = (always trailing)\r\n // because btoa just ignores it. These regex have no potentially-unicode characters, I think,\r\n // and they're applied to strings with just ASCII anyway, but I'm adding u to make Codeacy happy.\r\n {\r\n encode: x => x.replace(/=+$/gu, \"\").replace(/0/gu, \"0a\").replace(/\\+/gu, \"0b\").replace(/\\//gu, \"0c\"),\r\n decode: x => x.replace(/0b/gu, \"+\").replace(/0c/gu, \"/\").replace(/0a/gu, \"0\")\r\n },\r\n {\r\n encode: (x, type) => x + GameSaveSerializer.endingString[type],\r\n decode: (x, type) => x.slice(0, x.length - GameSaveSerializer.endingString[type].length),\r\n condition: version => version >= \"AAB\"\r\n }\r\n ],\r\n getSteps(type, version) {\r\n // This is a version marker, as well as indicating to players that this is from AD\r\n // and whether it's a save or automator script. We can change the last 3 letters\r\n // of the string savefiles start with from AAA to something else,\r\n // if we want a new version of savefile encoding.\r\n return this.steps.filter(i => (!i.condition) || i.condition(version)).concat({\r\n encode: x => `${GameSaveSerializer.startingString[type] + GameSaveSerializer.version}${x}`,\r\n decode: x => x.slice(GameSaveSerializer.startingString[type].length + 3)\r\n });\r\n },\r\n // Apply each step's encode function in encoding order.\r\n encodeText(text, type) {\r\n return this.getSteps(type, this.version).reduce((x, step) => step.encode(x, type), text);\r\n },\r\n // Apply each step's decode function, in decoding order (which is the reverse\r\n // of encoding order). We only do this if we recognize the string which tells\r\n // us the save version. If we don't see it, we assume the save's old and just\r\n // use atob. If you're adding a new savefile version, make sure its length is\r\n // three characters and alter the encoding/decoding functions as is described\r\n // in the comment above the definition of steps. If you're making a mod, then\r\n // add another case to this conditional. Old saves (before the reality update\r\n // and for a significant part of its development) always started with eYJ and\r\n // old automator scripts (where this function is also used) are very unlikely\r\n // to start with our magic string because it is longer than a few characters.\r\n decodeText(text, type) {\r\n if (text.startsWith(this.startingString[type])) {\r\n const len = this.startingString[type].length;\r\n const version = text.slice(len, len + 3);\r\n return this.getSteps(type, version).reduceRight((x, step) => step.decode(x, type), text);\r\n }\r\n return atob(text);\r\n }\r\n};\r\n","import { deepmergeAll } from \"@/utility/deepmerge\";\r\nimport { DC } from \"../constants\";\r\nimport { CorruptionData } from \"../corruption\";\r\n\r\n// WARNING: Don't use state accessors and functions from global scope here, that's not safe in long-term\r\nexport const migrations = {\r\n firstRealityMigration: 13,\r\n patches: {\r\n 1: player => {\r\n for (let i = 0; i < player.autobuyers.length; i++) {\r\n if (player.autobuyers[i] % 1 !== 0) {\r\n player.infinityPoints = player.infinityPoints.plus(player.autobuyers[i].cost - 1);\r\n }\r\n }\r\n player.autobuyers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\r\n },\r\n 2: player => {\r\n if (player.dimensionMultDecrease !== 10) {\r\n if (player.dimensionMultDecrease === 9) {\r\n player.dimensionMultDecrease = 10;\r\n player.dimensionMultDecreaseCost = 1e8;\r\n player.infinityPoints = player.infinityPoints.plus(1e8);\r\n }\r\n if (player.dimensionMultDecrease === 8) {\r\n player.dimensionMultDecrease = 10;\r\n player.dimensionMultDecreaseCost = 1e8;\r\n player.infinityPoints = player.infinityPoints.plus(2.1e9);\r\n }\r\n if (player.dimensionMultDecrease === 7) {\r\n player.dimensionMultDecrease = 10;\r\n player.dimensionMultDecreaseCost = 1e8;\r\n player.infinityPoints = player.infinityPoints.plus(4.21e10);\r\n }\r\n }\r\n },\r\n 5: player => {\r\n player.newsArray = [];\r\n },\r\n 9: player => {\r\n const achs = [];\r\n if (player.achievements.delete(\"r22\")) achs.push(\"r35\");\r\n if (player.achievements.delete(\"r35\")) achs.push(\"r76\");\r\n if (player.achievements.delete(\"r41\")) achs.push(\"r22\");\r\n if (player.achievements.delete(\"r76\")) achs.push(\"r41\");\r\n for (const id of achs) player.achievements.add(id);\r\n player.replicanti.intervalCost = player.replicanti.intervalCost.dividedBy(1e20);\r\n },\r\n 9.5: player => {\r\n if (player.timestudy.studies.includes(191)) player.timestudy.theorem = player.timestudy.theorem.plus(100);\r\n },\r\n 10: player => {\r\n if (player.timestudy.studies.includes(72)) {\r\n for (let i = 4; i < 8; i++) {\r\n player[`infinityDimension${i}`].amount = Decimal.div(player[`infinityDimension${i}`].amount,\r\n Sacrifice.totalBoost.pow(0.02));\r\n }\r\n }\r\n },\r\n 12: player => {\r\n const timeDimStartCosts = [null, 1, 5, 100, 1000];\r\n const timeDimCostMults = [null, 3, 9, 27, 81];\r\n // Updates TD costs to harsher scaling\r\n if (player.timeDimension1) {\r\n for (let i = 1; i < 5; i++) {\r\n if (new Decimal(\"1e300\").lt(player[`timeDimension${i}`].cost)) {\r\n player[`timeDimension${i}`].cost = Decimal.pow(\r\n timeDimCostMults[i] * 2.2,\r\n player[`timeDimension${i}`].bought\r\n ).times(timeDimStartCosts[i]);\r\n }\r\n }\r\n }\r\n },\r\n 12.1: player => {\r\n for (const achievement of player.achievements) {\r\n if (achievement.includes(\"s\") && achievement.length <= 3) {\r\n player.achievements.splice(player.achievements.indexOf(\"r36\"), 1);\r\n break;\r\n }\r\n }\r\n },\r\n 13: player => {\r\n // 12.3 is currently on live, will be updated to 13 after release\r\n\r\n // Last update version check, fix emoji/cancer issue,\r\n // change diff value from 1/10 of a second to 1/1000 of a second, delete pointless properties from player\r\n // And all other kinds of stuff\r\n player.realTimePlayed = player.totalTimePlayed;\r\n player.thisReality = player.totalTimePlayed;\r\n player.thisInfinityRealTime = player.thisInfinityTime * 100;\r\n player.thisEternityRealTime = player.thisEternity * 100;\r\n player.thisRealityRealTime = player.thisReality * 100;\r\n player.thisInfinityLastBuyTime = player.thisInfinityTime * 100;\r\n for (let i = 0; i < 10; i++) {\r\n player.lastTenEternities[i][2] = player.lastTenEternities[i][0];\r\n player.lastTenRuns[i][2] = player.lastTenRuns[i][0];\r\n }\r\n player.options.UIType == 'Classic';\r\n window.uiChoiceModalInterval = setInterval(() => {\r\n if (GameUI.initialized) {\r\n Modal.uiChoice.show();\r\n clearInterval(window.uiChoiceModalInterval);\r\n }\r\n }, 1000);\r\n\r\n migrations.normalizeTimespans(player);\r\n migrations.convertAutobuyerMode(player);\r\n migrations.fixChallengeIds(player);\r\n migrations.adjustMultCosts(player);\r\n migrations.convertAchivementsToNumbers(player);\r\n migrations.adjustGameCreatedTime(player);\r\n migrations.moveSavedStudyTrees(player);\r\n migrations.convertEPMult(player);\r\n migrations.moveChallengeInfo(player);\r\n migrations.infinitiedConversion(player);\r\n migrations.adjustWhy(player);\r\n migrations.removeAchPow(player);\r\n migrations.adjustSacrificeConfirmation(player);\r\n migrations.migrateNotation(player);\r\n migrations.fixAutobuyers(player);\r\n migrations.removeAutoIPProperties(player);\r\n migrations.adjustAchievementVars(player);\r\n migrations.uniformDimensions(player);\r\n migrations.removeEternityChallGoal(player);\r\n migrations.removeTickspeed(player);\r\n migrations.removePostC3Reward(player);\r\n migrations.renameMoney(player);\r\n migrations.moveAutobuyers(player);\r\n migrations.convertEternityCountToDecimal(player);\r\n migrations.renameDimboosts(player);\r\n migrations.migrateConfirmations(player);\r\n migrations.removeOtherTickspeedProps(player);\r\n migrations.renameNewsOption(player);\r\n migrations.removeDimensionCosts(player);\r\n migrations.changeC8Handling(player);\r\n migrations.convertAchievementsToBits(player);\r\n migrations.setNoInfinitiesOrEternitiesThisReality(player);\r\n migrations.setTutorialState(player);\r\n migrations.migrateLastTenRuns(player);\r\n migrations.migrateIPGen(player);\r\n migrations.renameCloudVariable(player);\r\n migrations.standardizeUncompletedTimes(player);\r\n migrations.makeRecords(player);\r\n migrations.deleteOldRecords(player);\r\n migrations.migrateAutobuyers(player);\r\n migrations.migratePlayerVars(player);\r\n migrations.consolidateAuto(player);\r\n migrations.convertTimeTheoremPurchases(player);\r\n migrations.deleteDimboostBulk(player);\r\n migrations.deleteFloatingTextOption(player);\r\n migrations.refactorDoubleIPRebuyable(player);\r\n migrations.infMultNameConversion(player);\r\n migrations.convertNews(player);\r\n migrations.etercreqConversion(player);\r\n migrations.moveTS33(player);\r\n migrations.addBestPrestigeCurrency(player);\r\n migrations.migrateTheme(player);\r\n },\r\n\r\n // ALL MIGRATIONS BELOW THIS POINT ARE POST-RELEASE FOR THE REALITY UPDATE! THE PRECEEDING MIGRATION (13) IS\r\n // THE FIRST MIGRATION WHICH DOES THE MAJORITY OF DATA FORMAT CHANGES\r\n\r\n 14: player => {\r\n migrations.reworkBHPulsing(player);\r\n\r\n // Added glyph auto-sort by level; in order to keep the button state cycling consistent with the sort buttons' UI\r\n // order, AUTO_SORT_MODE had to be changed to insert LEVEL mode at the top and shift the others down. This\r\n // makes sure that older saves maintain the same settings after this shift\r\n if (player.reality.autoSort !== 0) player.reality.autoSort++;\r\n },\r\n 15: player => {\r\n // Added additional resource tracking in last 10 prestige records and adjusted data format to be more consistent\r\n // by reordering to be [game time, real time, prestige currency, prestige count, challenge, ...(other resources)]\r\n // Also fixes a migration bug where values could be undefined or null by assigning defaults when necessary\r\n for (let i = 0; i < 10; i++) {\r\n if (player.records.lastTenInfinities) {\r\n const infRec = player.records.lastTenInfinities[i];\r\n player.records.recentInfinities[i] = [\r\n infRec[0] ?? Number.MAX_VALUE,\r\n Number(infRec[3] ?? Number.MAX_VALUE),\r\n new Decimal(infRec[1] ?? 1),\r\n new Decimal(infRec[2] ?? 1),\r\n \"\"\r\n ];\r\n }\r\n\r\n if (player.records.lastTenEternities) {\r\n const eterRec = player.records.lastTenEternities[i];\r\n player.records.recentEternities[i] = [\r\n eterRec[0] ?? Number.MAX_VALUE,\r\n Number(eterRec[3] ?? Number.MAX_VALUE),\r\n new Decimal(eterRec[1] ?? 1),\r\n new Decimal(eterRec[2] ?? 1),\r\n \"\",\r\n new Decimal(0)\r\n ];\r\n }\r\n\r\n if (player.records.lastTenRealities) {\r\n const realRec = player.records.lastTenRealities[i];\r\n player.records.recentRealities[i] = [\r\n realRec[0] ?? Number.MAX_VALUE,\r\n Number(realRec[3] ?? Number.MAX_VALUE),\r\n new Decimal(realRec[1] ?? 1),\r\n realRec[2] ?? 1,\r\n \"\",\r\n 0,\r\n 0\r\n ];\r\n }\r\n }\r\n\r\n delete player.records.lastTenInfinities;\r\n delete player.records.lastTenEternities;\r\n delete player.records.lastTenRealities;\r\n delete player.options.showLastTenResourceGain;\r\n\r\n // Fixes a desync which occasionally causes unique > total seen due to total not being updated properly\r\n if (player.news.seen) {\r\n let unique = 0;\r\n for (const bitmaskArray of Object.values(player.news.seen)) {\r\n for (const bitmask of bitmaskArray) {\r\n unique += countValuesFromBitmask(bitmask);\r\n }\r\n }\r\n player.news.totalSeen = Math.max(player.news.totalSeen, unique);\r\n }\r\n },\r\n 16: player => {\r\n // Migrate perk layouts to the new format which has more than a boolean toggle\r\n player.options.perkLayout = player.options.fixedPerkStartingPos ? 0 : 1;\r\n delete player.options.fixedPerkStartingPos;\r\n\r\n // This won't preserve *current* glyph choices, but is necessary to give uniformity moving forward. We need to\r\n // prevent either seed from being 0 due to it being a special case that freezes up the RNG code\r\n player.reality.initialSeed = player.reality.seed;\r\n if (player.reality.initialSeed === 0) player.reality.initialSeed = 1;\r\n\r\n // In order to add cross-run speedrun time tracking without inflating savefile size too much, there was a\r\n // refactor which changed the format from an object with a bunch of named props, to an array of times using\r\n // the key-id pairs in GameDatabase.speedrunMilestones\r\n const newArr = Array.repeat(0, 26);\r\n for (const entry of GameDatabase.speedrunMilestones) {\r\n newArr[entry.id] = player.speedrun.records[entry.key];\r\n }\r\n player.speedrun.records = newArr;\r\n player.speedrun.seedSelection = SPEEDRUN_SEED_STATE.UNKNOWN;\r\n\r\n // This contains redundant info and was never cleaned up during the initial implementation\r\n delete player.speedrun.milestones;\r\n\r\n // Add more glyph presets (older version had only 5, now default is 7)\r\n while (player.reality.glyphs.sets.length < 7) {\r\n player.reality.glyphs.sets.push({ name: \"\", glyphs: [] });\r\n }\r\n },\r\n 17: player => {\r\n // Moved all multiplier tab attributes to be scoped, and added replicanti subtab in the middle to preserve\r\n // progression order - shift it up as needed in order to keep players on the same subtab\r\n const oldSubtab = player.options.currentMultiplierSubtab ?? 0;\r\n player.options.multiplierTab.currTab = oldSubtab + (oldSubtab > 5 ? 1 : 0);\r\n delete player.options.currentMultiplierSubtab;\r\n },\r\n 18: player => {\r\n // These two props are technically redundant in their values, but we always update both in tandem in order\r\n // to ensure a consistent UI sort order. However, before this version the sort order didn't exist, so we have\r\n // to immediately fill it\r\n player.reality.automator.constantSortOrder = Object.keys(player.reality.automator.constants);\r\n },\r\n 19: player => {\r\n // This was removed in favor of the more generic \"Exit challenge\" modal, but a few references were missing and\r\n // this prop was left in the save file instead of being cleaned up\r\n delete player.options.confirmations.resetCelestial;\r\n },\r\n 20: player => {\r\n // GLYPH FILTER INTERNAL FORMAT REFACTOR\r\n // For the case of importing a save created before the reality update, many of these props are undefined due to\r\n // having never been in the player object in the first place. In this case we fill with defaults, which are mostly\r\n // zeroes. Otherwise we do our best to transfer over all the data we can\r\n\r\n // Move all the filter props out of celestial/effarig scope and into reality/glyph scope, renaming a few of them.\r\n const effarig = player.celestials.effarig;\r\n player.reality.glyphs.filter = {\r\n select: effarig?.mode ?? 0,\r\n trash: effarig?.glyphTrashMode ?? 0,\r\n simple: effarig?.simpleEffectCount ?? 0\r\n };\r\n\r\n // There are a few big things going on in this loop which are annotated within, but this largely transfers all the\r\n // old filter data into the new prop\r\n const reducedFilter = {};\r\n const effectDB = Object.values(GameDatabase.reality.glyphEffects);\r\n // The previous filter format had entries for companion/reality/cursed glyphs, which are removed by only copying\r\n // the types in ALCHEMY_BASIC_GLYPH_TYPES. Any errors which show up elsewhere for have also been resolved\r\n for (const type of ALCHEMY_BASIC_GLYPH_TYPES) {\r\n const oldData = effarig.glyphScoreSettings?.types[type];\r\n const typeEffects = effectDB\r\n .filter(t => t.glyphTypes.includes(type))\r\n .sort((a, b) => a.bitmaskIndex - b.bitmaskIndex);\r\n\r\n // Two of these effects were renamed to be shorter\r\n reducedFilter[type] = {\r\n rarity: oldData?.rarityThreshold ?? 0,\r\n score: oldData?.scoreThreshold ?? 0,\r\n effectCount: oldData?.effectCount ?? 0,\r\n };\r\n\r\n // These all used to stored as { effectKey: value } where effectKey is the ID string \"powerpow\" or similar,\r\n // but have now been refactored to be stored as a bitmask and Number array instead. This significantly shortens\r\n // filter data for serialization into glyph filter export strings\r\n reducedFilter[type].specifiedMask = 0;\r\n reducedFilter[type].effectScores = [];\r\n if (!oldData) continue;\r\n for (const effect of typeEffects) {\r\n // The way we filter to generate typeEffects also gives an undefined entry which needs to be ignored\r\n if (!effect) continue;\r\n reducedFilter[type].specifiedMask |= oldData.effectChoices[effect.id] ? 1 << effect.bitmaskIndex : 0;\r\n reducedFilter[type].effectScores.push(oldData.effectScores[effect.id]);\r\n }\r\n }\r\n player.reality.glyphs.filter.types = reducedFilter;\r\n\r\n // Remove the old data after copying it all over\r\n delete player.celestials.effarig.glyphScoreSettings;\r\n delete player.celestials.effarig.glyphTrashMode;\r\n\r\n // EFFARIG GLYPH INTERNAL CHANGE\r\n // In order to display all effarig glyph effects in \"celestial order\" we needed to either special-case a ton\r\n // of UI code, or migrate all existing saves - the latter option seems safer and less likely to lead to repeated\r\n // bug reports related to Vue reactivity. Worst case scenario if something is incorrect here is that some people\r\n // will have some slightly weird saves. We don't need to modify the glyph filter settings here because these are\r\n // migrated above by their effect keys; this properly places them into the correct bit positions automatically\r\n const updateBitmask = bitmask => {\r\n const modifiedBits = [20, 21, 22].map(b => 1 << b).sum();\r\n const foundBits = [20, 21, 22].map(b => (bitmask & (1 << b)) !== 0);\r\n foundBits.push(foundBits.shift());\r\n let newSubmask = 0;\r\n for (let bit = 20; bit <= 22; bit++) {\r\n if (foundBits[bit - 20]) newSubmask |= 1 << bit;\r\n }\r\n return (bitmask & ~modifiedBits) | newSubmask;\r\n };\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n for (const glyph of allGlyphs) glyph.effects = updateBitmask(glyph.effects);\r\n\r\n // We also need to update glyphs that appear in the statistics tab records too\r\n const glyphSetProps = [\"RMSet\", \"RMminSet\", \"glyphLevelSet\", \"bestEPSet\", \"speedSet\", \"iMCapSet\", \"laitelaSet\"];\r\n for (const prop of glyphSetProps) {\r\n const glyphSet = player.records.bestReality[prop];\r\n for (const glyph of glyphSet) glyph.effects = updateBitmask(glyph.effects);\r\n }\r\n\r\n // Glyph light/dark formatting was refactored as well; these values are in reference to the GLYPH_BG_SETTING enum\r\n player.options.glyphBG = player.options.lightGlyphs ? 1 : 2;\r\n delete player.options.lightGlyphs;\r\n },\r\n 21: player => {\r\n // Added tracking for unlocked ECs even after they re-lock - makes old save data consistent\r\n for (let ec = 1; ec <= 12; ec++) {\r\n if (player.eternityChalls[`eterc${ec}`] > 0) player.reality.unlockedEC |= 1 << ec;\r\n }\r\n\r\n // Added max RM tracking for cel1 records - also for data consistency (though not 100% accurate)\r\n player.reality.maxRM = new Decimal(player.reality.realityMachines);\r\n },\r\n 22: player => {\r\n // Added 3 new perk layouts, inserted before blob\r\n if (player.options.perkLayout > 2) player.options.perkLayout += 3;\r\n\r\n // Changed recent prestige tab to allow for more than just gain rate and absolute gain\r\n player.options.statTabResources = player.options.showRecentRate ? 1 : 0;\r\n delete player.options.showRecentRate;\r\n\r\n // Added iM cap value to recent realities\r\n for (let index = 0; index < player.records.recentRealities.length; index++) {\r\n player.records.recentRealities[index].push(0);\r\n }\r\n\r\n // This seems to have slipped through in some edge cases due to an old botched migration\r\n if (player.options.themeClassic === undefined) player.options.themeClassic = \"Normal\";\r\n if (player.options.themeModern === undefined) player.options.themeModern = \"Normal\";\r\n\r\n // The glyph uniformity change did a few things to migrate old seeds as best it could, but it also had the\r\n // side-effect of relying on player initialization and deepmerge for randomization in many cases. This made\r\n // all existing pre-reality saves get initialized with a seed of 1, which we forcibly randomize here.\r\n // A \"valid\" save can potentially get messed up, but this is exceedingly rare and impossible to detect\r\n const newSeed = Math.floor(Date.now() * Math.random() + 1);\r\n if (player.reality.seed === 1) player.reality.seed = newSeed;\r\n if (player.reality.initialSeed === 1) player.reality.initialSeed = newSeed;\r\n },\r\n 23: player => {\r\n // We missed presets in effarig format migration\r\n const updateBitmask = bitmask => {\r\n const modifiedBits = [20, 21, 22].map(b => 1 << b).sum();\r\n const foundBits = [20, 21, 22].map(b => (bitmask & (1 << b)) !== 0);\r\n foundBits.push(foundBits.shift());\r\n let newSubmask = 0;\r\n for (let bit = 20; bit <= 22; bit++) {\r\n if (foundBits[bit - 20]) newSubmask |= 1 << bit;\r\n }\r\n return (bitmask & ~modifiedBits) | newSubmask;\r\n };\r\n for (const preset of player.reality.glyphs.sets) {\r\n for (const glyph of preset.glyphs) {\r\n glyph.effects = updateBitmask(glyph.effects);\r\n }\r\n }\r\n },\r\n 32: player => {\r\n //this is the 8-16-23 Redemption Release\r\n\r\n player.auto.dilationUpgrades.all[11] = { isActive: false, lastTick: 0};\r\n player.auto.dilationUpgrades.all[12] = { isActive: false, lastTick: 0};\r\n player.auto.dilationUpgrades.all[13] = { isActive: false, lastTick: 0};\r\n player.requirementChecks.mending = {\r\n isEnd: false\r\n };\r\n player.records.thisMend = {\r\n time: Number.MAX_VALUE,\r\n realTime: Number.MAX_VALUE,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n maxEP: DC.D0,\r\n maxRM: DC.D0,\r\n maxiM: 0,\r\n maxRem: 0,\r\n };\r\n player.records.bestMend = {\r\n time: Number.MAX_VALUE,\r\n realTime: Number.MAX_VALUE,\r\n };\r\n player.speedrun.isUnlocked = true;\r\n player.mends = DC.D0,\r\n player.mending = {\r\n mendingPoints: DC.D0,\r\n upgradeBits: 0,\r\n reqLock: {\r\n mending: 0,\r\n },\r\n rebuyables: {\r\n 1: 0,\r\n },\r\n };\r\n player.celestials.destroyer = {\r\n quoteBits: 0,\r\n };\r\n player.options.confirmations.mending = true;\r\n player.options.awayProgress = { \r\n mends: true,\r\n mendingPoints: true\r\n };\r\n player.mendingPoints = DC.D0;\r\n player.mends = DC.D0;\r\n player.mendingUpgrades = new Set();\r\n player.mvrmultUpgrades = 0;\r\n },\r\n 34: player =>{\r\n player.options.hiddenTabBits = 0;\r\n player.mendingPoints = player.mending.mendingPoints;\r\n },\r\n 35: player =>{\r\n if (MendingMilestone.three.isReached){\r\n player.celestials.ra.unlockBits += 2097152;\r\n }\r\n },\r\n 36: player => {\r\n player.auto.dilationUpgrades.all = Array.range(0, 3).concat(Array.range(11, 14)).map(() => ({\r\n isActive: false,\r\n lastTick: 0,\r\n }))\r\n player.mends = new Decimal(player.mends)\r\n player.mendingPoints = new Decimal(player.mendingPoints)\r\n },\r\n 40: player => {\r\n if (MendingUpgrade(2).isPurchased){\r\n player.mendingPoints = player.mendingPoints.add(1);\r\n }\r\n if (MendingUpgrade(3).isPurchased) {\r\n player.mendingPoints = player.mendingPoints.add(4);\r\n }\r\n if (MendingUpgrade(5).isPurchased) {\r\n player.mendingPoints = player.mendingPoints.add(10);\r\n }\r\n if (MendingUpgrade(9).isPurchased) {\r\n player.mendingPoints = player.mendingPoints.add(12);\r\n }\r\n },\r\n 41: player => {\r\n if (player.mends.gte(8)) {\r\n player.celestials.teresa.perkShop = [20, 20, 14, 6, 0, 0]\r\n }\r\n player.auto.musicglyph = {\r\n isUnlocked: false,\r\n isActive: false,\r\n }\r\n },\r\n 42: player => {\r\n player.options.showHintText.mendingUpgrades = true;\r\n },\r\n 43: player =>{\r\n if(player.records.thisMend.time < 1e308) player.records.thisMend.time = new Decimal(1e308);\r\n },\r\n 45: player =>{\r\n player.auto.mending = {\r\n mode: 0,\r\n amount: DC.D1,\r\n interval: 100,\r\n increaseWithMult: true,\r\n time: 1,\r\n xHighest: DC.D1,\r\n isActive: false,\r\n lastTick: 0\r\n };\r\n },\r\n 46: player =>{\r\n player.celestials.kohler = {\r\n quoteBits: 0,\r\n };\r\n player.reality.warped = false;\r\n player.mending = {\r\n rebuyables: {\r\n 1: Math.max(0, player.mending.rebuyables[1]),\r\n 6: 0,\r\n 11: 0,\r\n 16: 0,\r\n },\r\n upgradeBits: Math.max(0, player.mending.upgradeBits)\r\n };\r\n },\r\n 47: player => {\r\n //for some reason doing this in dev-migrations threw errors, so idk\r\n player.auto.nrru = {\r\n isActive: false,\r\n lastTick: 0\r\n }\r\n player.auto.nriu = {\r\n isActive: false,\r\n lastTick: 0\r\n } \r\n player.options.UIType = player.options.newUI ? \"Modern\" : \"Classic\"\r\n ui.view.UIType = player.options.UIType\r\n },\r\n 50: player => {\r\n player.celestials.kohler = {\r\n run: false,\r\n }\r\n },\r\n 51: player => {\r\n player.requirementChecks.mend = {\r\n mmeleven: 8\r\n }\r\n },\r\n 51.001: player => {\r\n player.celestials.laitela.dimensions = player.celestials.laitela.dimensions.concat(Array.range(0, 4).map(() =>\r\n ({\r\n amount: DC.D1,\r\n intervalUpgrades: 0,\r\n powerDMUpgrades: 0,\r\n powerDEUpgrades: 0,\r\n timeSinceLastUpdate: 0,\r\n ascensionCount: 0\r\n })))\r\n },\r\n 51.002: player => {\r\n player.mending.corruption = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] //10 here incase we add more, only 5 are used\r\n },\r\n 51.003: player => {\r\n player.mending.corruptedFragments = 0\r\n },\r\n 51.004: player => {\r\n player.mending.corruptionChallenge = {\r\n corruptedMend: false,\r\n records: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\r\n }\r\n },\r\n 51.005: player => {\r\n player.mending.corruptionChallenge.recordScore = 0\r\n },\r\n 51.006: player => {\r\n player.mending.corruptNext = false\r\n },\r\n 51.007: player => {\r\n player.mending.spentCF = 0;\r\n },\r\n 51.008: player =>{\r\n //apparently these can be real numbers, but I'm sticking to integers for now)\r\n player.corruptedFragments = player.mending.corruptedFragments.toDecimal();\r\n player.mending.warpRebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n };\r\n player.mending.corruptionRebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n };\r\n player.mending.warpUpgradeBits = 0;\r\n player.mending.corruptionUpgradeBits = 0;\r\n player.mending.warpUpgReqs = 0;\r\n player.mending.corruptionUpgReqs = 0;\r\n player.mending.reqLock = {\r\n mending: 0,\r\n warp: 0,\r\n corruption: 0,\r\n }\r\n },\r\n 51.009: player =>{\r\n player.records.totalTimePlayed = new Decimal(player.records.totalTimePlayed);\r\n player.records.thisInfinity.time = new Decimal(player.records.thisInfinity.time);\r\n player.records.thisEternity.time = new Decimal(player.records.thisEternity.time);\r\n player.records.thisReality.time = new Decimal(player.records.thisReality.time);\r\n player.records.thisMend.time = new Decimal(player.records.thisMend.time);\r\n },\r\n 51.010: player =>{\r\n player.celestials.ra.upgradeBits = 0,\r\n player.celestials.ra.raPoints = DC.D0,\r\n player.celestials.ra.rebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n }\r\n },\r\n 51.011: player =>{\r\n player.records.bestMend.time = new Decimal(player.records.bestMend.time);\r\n player.expoBlackHole = Array.range(0, 1).map(id => ({\r\n id,\r\n intervalUpgrades: 0,\r\n powerUpgrades: 0,\r\n durationUpgrades: 0,\r\n phase: 0,\r\n active: false,\r\n unlocked: false,\r\n activations: 0,\r\n })),\r\n player.expoBlackHolePause = false;\r\n player.expoBlackHoleAutoPauseMode = 0;\r\n player.expoBlackHolePauseTime = 0;\r\n player.expoBlackHoleNegative = 1;\r\n },\r\n 51.012: player =>{\r\n player.celestials.ra.permanentMemories = {\r\n ra2: false,\r\n lai50: false,\r\n lai65: false,\r\n };\r\n },\r\n 51.013: player =>{\r\n player.records.thisReality.remWithoutGG = 0;\r\n player.records.bestReality.remWithoutGG = 0;\r\n },\r\n 51.014: player => {\r\n player.galBoostPoints = new Decimal(0);\r\n },\r\n 51.015: player => {\r\n for (let i = 0; i < 11 /* 11 here because c1 doesnt count */ ; i++) {\r\n player.challenge.normal.bestTimes[i] = new Decimal(player.challenge.normal.bestTimes[i])\r\n }\r\n for (let i = 0; i < 8; i++) {\r\n player.challenge.infinity.bestTimes[i] = new Decimal(player.challenge.infinity.bestTimes[i])\r\n }\r\n },\r\n 51.016: player => {\r\n delete player.mending.spentCF\r\n },\r\n 51.017: player => {\r\n player.celestials.ra.rebuyables = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n player.reality.achTimer = new Decimal(player.reality.achTimer)\r\n },\r\n 51.018: player => {\r\n player.reality.glyphs.sac.power = new Decimal(player.reality.glyphs.sac.power);\r\n player.reality.glyphs.sac.infinity = new Decimal(player.reality.glyphs.sac.infinity);\r\n player.reality.glyphs.sac.time = new Decimal(player.reality.glyphs.sac.time);\r\n player.reality.glyphs.sac.replication = new Decimal(player.reality.glyphs.sac.replication);\r\n player.reality.glyphs.sac.dilation = new Decimal(player.reality.glyphs.sac.dilation);\r\n player.reality.glyphs.sac.effarig = new Decimal(player.reality.glyphs.sac.effarig);\r\n player.reality.glyphs.sac.reality = new Decimal(player.reality.glyphs.sac.reality);\r\n },\r\n 51.019: player => {\r\n player.celestials.v.runUnlocks = player.celestials.v.runUnlocks.concat(Array.range(0, 18).map(() => (0)));\r\n player.celestials.v.goalReductionSteps = player.celestials.v.goalReductionSteps.concat(Array.range(0, 18).map(() => (0)));\r\n player.celestials.v.runGlyphs = player.celestials.v.runGlyphs.concat(Array.range(0, 18).map(() =>([])));\r\n player.celestials.v.runRecords = player.celestials.v.runRecords.concat(Array.range(0, 18).map(() =>(0)));\r\n player.celestials.v.wantsSuperFlipped = false;\r\n },\r\n 51.020: player => {\r\n if (player.celestials.v.wantsSuperFlipped) {\r\n player.celestials.v.flip = V_FLIP.SUPER;\r\n } else if (player.celestials.v.wantsFlipped) {\r\n player.celestials.v.flip = V_FLIP.HARD;\r\n } else {\r\n player.celestials.v.flip = V_FLIP.NORMAL;\r\n }\r\n delete player.celestials.v.wantsSuperFlipped;\r\n delete player.celestials.v.wantsFlipped;\r\n },\r\n 51.021: player => {\r\n //player.auto.singCap.multiplier = 0; exm why this still exist--sxy\r\n },\r\n 51.022: player => {\r\n player.isHoldingLClick = false;\r\n player.celestials.laitela.holdStart = 0;\r\n player.celestials.laitela.heldTier = 0;\r\n player.celestials.laitela.heldType = \"\";\r\n },\r\n 51.023: player => {\r\n player.celestials.ra.rebuyables = {\r\n weakenTeresaScaling: 0,\r\n weakenEffarigScaling: 0,\r\n weakenEnslavedScaling: 0,\r\n weakenVScaling: 0,\r\n weakenRaScaling: 0,\r\n weakenLaitelaScaling: 0,\r\n weakenPelleScaling: 0,\r\n incTeresaXPGain: 0,\r\n incEffarigXPGain: 0,\r\n incEnslavedXPGain: 0,\r\n incVXPGain: 0,\r\n incRaXPGain: 0,\r\n incLaitelaXPGain: 0,\r\n incPelleXPGain: 0,\r\n };\r\n },\r\n 51.024: player => {\r\n player.auto.singCap.multiplier = 1000;\r\n },\r\n 51.025: player => {\r\n player.celestials.kohler.unlockProgress = 0;\r\n }\r\n},\r\n\r\n normalizeTimespans(player) {\r\n player.realTimePlayed *= 100;\r\n player.totalTimePlayed *= 100;\r\n player.thisInfinityTime *= 100;\r\n player.thisEternity *= 100;\r\n player.thisReality *= 100;\r\n player.bestInfinityTime = player.bestInfinityTime === 9999999999\r\n ? 999999999999\r\n : player.bestInfinityTime * 100;\r\n player.bestEternity = player.bestEternity === 9999999999\r\n ? 999999999999\r\n : player.bestEternity * 100;\r\n for (let i = 0; i < 10; i++) {\r\n player.lastTenEternities[i][0] *= 100;\r\n player.lastTenRuns[i][0] *= 100;\r\n // Nowadays this would be player.lastTenEternities[i][3] *= 100;\r\n // However, this migration is done so early that it was player.lastTenEternities[i][2]\r\n // (but late enough that player.lastTenEternities[i][2] is defined).\r\n player.lastTenEternities[i][2] *= 100;\r\n player.lastTenRuns[i][2] *= 100;\r\n }\r\n\r\n if (player.challengeTimes) {\r\n player.challengeTimes = player.challengeTimes.map(e => e * 100);\r\n }\r\n if (player.infchallengeTimes) {\r\n player.infchallengeTimes = player.infchallengeTimes.map(e => e * 100);\r\n }\r\n },\r\n\r\n convertAutobuyerMode(player) {\r\n for (let i = 0; i < 8; i++) {\r\n const autobuyer = player.autobuyers[i];\r\n if (autobuyer % 1 !== 0) {\r\n if (autobuyer.target < 10) {\r\n autobuyer.target = AUTOBUYER_MODE.BUY_SINGLE;\r\n } else {\r\n autobuyer.target = AUTOBUYER_MODE.BUY_10;\r\n }\r\n }\r\n }\r\n const tickspeedAutobuyer = player.autobuyers[8];\r\n if (tickspeedAutobuyer % 1 !== 0) {\r\n if (tickspeedAutobuyer.target < 10) {\r\n tickspeedAutobuyer.target = AUTOBUYER_MODE.BUY_SINGLE;\r\n } else {\r\n tickspeedAutobuyer.target = AUTOBUYER_MODE.BUY_MAX;\r\n }\r\n }\r\n },\r\n\r\n fixChallengeIds(player) {\r\n let wasFucked = false;\r\n function unfuckChallengeId(id) {\r\n if (!id.startsWith(\"challenge\")) return id;\r\n wasFucked = true;\r\n const legacyId = parseInt(id.substr(9), 10);\r\n const config = GameDatabase.challenges.normal.find(c => c.legacyId === legacyId);\r\n return `challenge${config.id}`;\r\n }\r\n player.currentChallenge = unfuckChallengeId(player.currentChallenge);\r\n player.challenges = player.challenges.map(unfuckChallengeId);\r\n if (wasFucked && player.challengeTimes) {\r\n player.challengeTimes = GameDatabase.challenges.normal\r\n .slice(1)\r\n .map(c => player.challengeTimes[c.legacyId - 2]);\r\n }\r\n },\r\n\r\n adjustMultCosts(player) {\r\n if (player.tickSpeedMultDecreaseCost !== undefined) {\r\n player.infinityRebuyables[0] = Math.round(Math.log(player.tickSpeedMultDecreaseCost / 3e6) / Math.log(5));\r\n }\r\n if (player.dimensionMultDecreaseCost !== undefined) {\r\n player.infinityRebuyables[1] = Math.round(Math.log(player.dimensionMultDecreaseCost / 1e8) / Math.log(5e3));\r\n }\r\n delete player.tickSpeedMultDecrease;\r\n delete player.tickSpeedMultDecreaseCost;\r\n delete player.dimensionMultDecrease;\r\n delete player.dimensionMultDecreaseCost;\r\n },\r\n\r\n convertAchivementsToNumbers(player) {\r\n if (player.achievements.length > 0 && player.achievements.every(e => typeof e === \"number\")) return;\r\n const old = player.achievements;\r\n // In this case, player.secretAchievements should be an empty set\r\n player.achievements = new Set();\r\n player.secretAchievements = new Set();\r\n for (const oldId of old) {\r\n const achByName = GameDatabase.achievements.normal.find(a => a.name === oldId);\r\n if (achByName !== undefined) {\r\n // Legacy format\r\n player.achievements.add(achByName.id);\r\n continue;\r\n }\r\n const newId = parseInt(oldId.slice(1), 10);\r\n if (isNaN(newId)) throw new Error(`Could not parse achievement id ${oldId}`);\r\n if (oldId.startsWith(\"r\")) {\r\n if (GameDatabase.achievements.normal.find(a => a.id === newId) === undefined) {\r\n throw new Error(`Unrecognized achievement ${oldId}`);\r\n }\r\n player.achievements.add(newId);\r\n } else if (oldId.startsWith(\"s\")) {\r\n if (GameDatabase.achievements.secret.find(a => a.id === newId) === undefined) {\r\n throw new Error(`Unrecognized secret achievement ${newId}`);\r\n }\r\n player.secretAchievements.add(newId);\r\n }\r\n }\r\n },\r\n\r\n adjustGameCreatedTime(player) {\r\n player.gameCreatedTime = player.lastUpdate - player.realTimePlayed;\r\n },\r\n\r\n moveSavedStudyTrees(player) {\r\n for (let num = 1; num <= 3; ++num) {\r\n const tree = localStorage.getItem(`studyTree${num}`);\r\n if (tree) player.timestudy.presets[num - 1].studies = tree;\r\n }\r\n },\r\n\r\n convertEPMult(player) {\r\n if (player.epmult === undefined) return;\r\n const mult = new Decimal(player.epmult);\r\n delete player.epmultCost;\r\n delete player.epmult;\r\n // The multiplier should never be less than 1, but we don't want to break anyone's save\r\n if (mult.lte(1)) {\r\n player.epmultUpgrades = 0;\r\n return;\r\n }\r\n player.epmultUpgrades = mult.log(5);\r\n },\r\n\r\n moveChallengeInfo(player) {\r\n function parseChallengeName(name) {\r\n if (name.startsWith(\"challenge\")) {\r\n return { type: \"normal\", id: parseInt(name.slice(9), 10) };\r\n }\r\n if (name.startsWith(\"postc\")) {\r\n return { type: \"infinity\", id: parseInt(name.slice(5), 10) };\r\n }\r\n if (name !== \"\") throw new Error(`Unrecognized challenge ID ${name}`);\r\n return null;\r\n }\r\n if (player.challengeTimes) {\r\n for (let i = 0; i < player.challengeTimes.length; ++i) {\r\n player.challenge.normal.bestTimes[i] = Math.min(player.challenge.normal.bestTimes[i],\r\n player.challengeTimes[i]);\r\n }\r\n delete player.challengeTimes;\r\n }\r\n if (player.infchallengeTimes) {\r\n for (let i = 0; i < player.infchallengeTimes.length; ++i) {\r\n player.challenge.infinity.bestTimes[i] = Math.min(player.challenge.infinity.bestTimes[i],\r\n player.infchallengeTimes[i]);\r\n }\r\n delete player.infchallengeTimes;\r\n }\r\n if (player.currentChallenge !== undefined) {\r\n const saved = parseChallengeName(player.currentChallenge);\r\n delete player.currentChallenge;\r\n if (saved) {\r\n player.challenge[saved.type].current = saved.id;\r\n }\r\n }\r\n if (player.challenges) {\r\n for (const fullID of player.challenges) {\r\n const parsed = parseChallengeName(fullID);\r\n player.challenge[parsed.type].completedBits |= 1 << parsed.id;\r\n }\r\n delete player.challenges;\r\n }\r\n if (player.currentEternityChall !== undefined) {\r\n const saved = player.currentEternityChall;\r\n delete player.currentEternityChall;\r\n if (saved.startsWith(\"eterc\")) {\r\n player.challenge.eternity.current = parseInt(saved.slice(5), 10);\r\n } else if (saved !== \"\") throw new Error(`Unrecognized eternity challenge ${saved}`);\r\n }\r\n if (player.eternityChallUnlocked !== undefined) {\r\n player.challenge.eternity.unlocked = player.eternityChallUnlocked;\r\n delete player.eternityChallUnlocked;\r\n }\r\n delete player.challengeTarget;\r\n },\r\n\r\n adjustWhy(player) {\r\n player.requirementChecks.permanent.singleTickspeed = player.why ?? 0;\r\n delete player.why;\r\n },\r\n\r\n adjustAchievementVars(player) {\r\n player.requirementChecks.eternity.onlyAD1 = player.dead;\r\n delete player.dead;\r\n player.requirementChecks.eternity.onlyAD8 = player.dimlife;\r\n delete player.dimlife;\r\n // Just initialize all these to false, which is basically always correct.\r\n player.requirementChecks.reality.noAM = false;\r\n player.requirementChecks.eternity.noAD1 = false;\r\n player.requirementChecks.infinity.noAD8 = false;\r\n // If someone has 0 max replicanti galaxies, they can't have gotten any.\r\n // If they have more than 0 max replicanti galaxies, we don't give them\r\n // the benefit of the doubt.\r\n player.requirementChecks.eternity.noRG = player.replicanti.gal === 0;\r\n if (\r\n player.timestudy.theorem.gt(0) ||\r\n player.timestudy.studies.length > 0 ||\r\n player.challenge.eternity.unlocked !== 0\r\n ) player.requirementChecks.reality.noPurchasedTT = false;\r\n if (player.sacrificed.gt(0)) player.requirementChecks.infinity.noSacrifice = false;\r\n player.requirementChecks.permanent.emojiGalaxies = player.spreadingCancer;\r\n delete player.spreadingCancer;\r\n },\r\n\r\n removeAchPow(player) {\r\n delete player.achPow;\r\n },\r\n\r\n adjustSacrificeConfirmation(player) {\r\n if (player.options.sacrificeConfirmation !== undefined) {\r\n player.options.confirmations.sacrifice = player.options.sacrificeConfirmation;\r\n delete player.options.sacrificeConfirmation;\r\n }\r\n },\r\n\r\n migrateNotation(player) {\r\n const notation = player.options.notation;\r\n if (notation === undefined) {\r\n player.options.notation = \"Standard\";\r\n }\r\n const notationMigration = {\r\n \"Mixed\": \"Mixed scientific\",\r\n \"Default\": \"Brackets\",\r\n \"Emojis\": \"Cancer\"\r\n };\r\n if (notationMigration[notation] !== undefined) {\r\n player.options.notation = notationMigration[notation];\r\n }\r\n },\r\n\r\n fixAutobuyers(player) {\r\n for (let i = 0; i < 12; i++) {\r\n if (player.autobuyers[i] % 1 !== 0 && player.autobuyers[i].target % 1 !== 0) {\r\n player.autobuyers[i].target = AUTOBUYER_MODE.BUY_SINGLE;\r\n }\r\n\r\n if (\r\n player.autobuyers[i] % 1 !== 0 &&\r\n (player.autobuyers[i].bulk === undefined ||\r\n isNaN(player.autobuyers[i].bulk) ||\r\n player.autobuyers[i].bulk === null)\r\n ) {\r\n player.autobuyers[i].bulk = 1;\r\n }\r\n }\r\n if (typeof player.autobuyers[9] !== \"number\" && typeof player.autobuyers[9].bulk !== \"number\") {\r\n player.autobuyers[9].bulk = 1;\r\n }\r\n if (\r\n player.autobuyers[11] % 1 !== 0 &&\r\n player.autobuyers[11].priority !== undefined &&\r\n player.autobuyers[11].priority !== null &&\r\n player.autobuyers[11].priority !== \"undefined\"\r\n ) {\r\n player.autobuyers[11].priority = new Decimal(player.autobuyers[11].priority);\r\n }\r\n },\r\n\r\n removeAutoIPProperties(player) {\r\n delete player.autoIP;\r\n delete player.autoTime;\r\n },\r\n\r\n removeEternityChallGoal(player) {\r\n delete player.eternityChallGoal;\r\n },\r\n\r\n removeTickspeed(player) {\r\n delete player.tickspeed;\r\n player.tickSpeedCost = new Decimal(1000);\r\n player.tickspeedMultiplier = new Decimal(10);\r\n },\r\n\r\n removeOtherTickspeedProps(player) {\r\n delete player.tickSpeedCost;\r\n delete player.tickspeedMultiplier;\r\n },\r\n\r\n renameNewsOption(player) {\r\n player.options.news.enabled = !player.options.newsHidden;\r\n delete player.options.newsHidden;\r\n },\r\n\r\n removeDimensionCosts(player) {\r\n for (const dimension of player.dimensions.antimatter) {\r\n delete dimension.cost;\r\n delete dimension.costMultiplier;\r\n }\r\n },\r\n\r\n renameTickspeedPurchaseBumps(player) {\r\n if (player.chall9TickspeedPurchaseBumps !== undefined) {\r\n player.chall9TickspeedCostBumps = player.chall9TickspeedPurchaseBumps;\r\n delete player.chall9TickspeedPurchaseBumps;\r\n }\r\n },\r\n\r\n removePostC3Reward(player) {\r\n delete player.postC3Reward;\r\n },\r\n\r\n renameMoney(player) {\r\n player.antimatter = new Decimal(player.money);\r\n player.totalAntimatter = new Decimal(player.totalmoney);\r\n delete player.money;\r\n delete player.totalmoney;\r\n },\r\n\r\n uniformDimensions(player) {\r\n for (let tier = 1; tier <= 8; tier++) {\r\n const name = [null, \"first\", \"second\", \"third\", \"fourth\", \"fifth\", \"sixth\", \"seventh\", \"eight\"][tier];\r\n const oldProps = {\r\n cost: `${name}Cost`,\r\n amount: `${name}Amount`,\r\n bought: `${name}Bought`,\r\n pow: `${name}Pow`\r\n };\r\n const dimension = player.dimensions.antimatter[tier - 1];\r\n dimension.cost = new Decimal(player[oldProps.cost]);\r\n dimension.amount = new Decimal(player[oldProps.amount]);\r\n dimension.bought = player[oldProps.bought];\r\n if (player.costmultipliers) {\r\n dimension.costMultiplier = new Decimal(player.costMultipliers[tier - 1]);\r\n }\r\n delete player[oldProps.cost];\r\n delete player[oldProps.amount];\r\n delete player[oldProps.bought];\r\n delete player[oldProps.pow];\r\n }\r\n delete player.costMultipliers;\r\n\r\n if (player.infinityDimension1) {\r\n for (let tier = 1; tier <= 8; tier++) {\r\n const dimension = player.dimensions.infinity[tier - 1];\r\n const oldName = `infinityDimension${tier}`;\r\n const old = player[oldName];\r\n dimension.cost = new Decimal(old.cost);\r\n dimension.amount = new Decimal(old.amount);\r\n dimension.bought = old.bought;\r\n dimension.baseAmount = old.baseAmount;\r\n dimension.isUnlocked = player.infDimensionsUnlocked[tier - 1];\r\n delete player[oldName];\r\n }\r\n delete player.infDimensionsUnlocked;\r\n }\r\n\r\n if (player.timeDimension1) {\r\n for (let tier = 1; tier <= 8; tier++) {\r\n const dimension = player.dimensions.time[tier - 1];\r\n const oldName = `timeDimension${tier}`;\r\n const old = player[oldName];\r\n if (old !== undefined) {\r\n dimension.cost = new Decimal(old.cost);\r\n dimension.amount = new Decimal(old.amount);\r\n dimension.bought = old.bought;\r\n delete player[oldName];\r\n }\r\n }\r\n }\r\n },\r\n\r\n moveAutobuyers(player) {\r\n if (\r\n player.autobuyers[11] % 1 !== 0 &&\r\n player.autobuyers[11].priority !== undefined &&\r\n player.autobuyers[11].priority !== null &&\r\n player.autobuyers[11].priority !== \"undefined\"\r\n ) {\r\n player.autobuyers[11].priority = new Decimal(player.autobuyers[11].priority);\r\n }\r\n\r\n for (let i = 0; i < 8; i++) {\r\n const old = player.autobuyers[i];\r\n if (old % 1 === 0) continue;\r\n const autobuyer = player.auto.antimatterDims.all[i];\r\n autobuyer.cost = old.cost;\r\n autobuyer.interval = old.interval;\r\n autobuyer.bulk = old.bulk;\r\n autobuyer.mode = old.target;\r\n autobuyer.priority = old.priority;\r\n autobuyer.isActive = old.isOn;\r\n autobuyer.lastTick = player.realTimePlayed;\r\n }\r\n\r\n if (player.autobuyers[8] % 1 !== 0) {\r\n const old = player.autobuyers[8];\r\n const autobuyer = player.auto.tickspeed;\r\n autobuyer.cost = old.cost;\r\n autobuyer.interval = old.interval;\r\n autobuyer.mode = old.target;\r\n autobuyer.priority = old.priority;\r\n autobuyer.isActive = old.isOn;\r\n autobuyer.lastTick = player.realTimePlayed;\r\n }\r\n\r\n if (player.autobuyers[9] % 1 !== 0) {\r\n const old = player.autobuyers[9];\r\n const autobuyer = player.auto.dimBoost;\r\n autobuyer.cost = old.cost;\r\n autobuyer.interval = old.interval;\r\n autobuyer.maxDimBoosts = old.priority;\r\n autobuyer.galaxies = player.overXGalaxies;\r\n autobuyer.bulk = old.bulk;\r\n autobuyer.buyMaxInterval = old.bulk;\r\n autobuyer.isActive = old.isOn;\r\n autobuyer.lastTick = player.realTimePlayed;\r\n }\r\n\r\n delete player.overXGalaxies;\r\n\r\n if (player.autobuyers[10] % 1 !== 0) {\r\n const old = player.autobuyers[10];\r\n const autobuyer = player.auto.galaxy;\r\n autobuyer.cost = old.cost;\r\n autobuyer.interval = old.interval;\r\n autobuyer.maxGalaxies = old.priority;\r\n autobuyer.buyMaxInterval = old.bulk;\r\n autobuyer.buyMax = old.bulk > 0;\r\n autobuyer.isActive = old.isOn;\r\n autobuyer.lastTick = player.realTimePlayed;\r\n }\r\n\r\n if (player.autobuyers[11] % 1 !== 0) {\r\n const old = player.autobuyers[11];\r\n const autobuyer = player.auto.bigCrunch;\r\n autobuyer.cost = old.cost;\r\n autobuyer.interval = old.interval;\r\n autobuyer.mode = [\"amount\", \"time\", \"relative\"].indexOf(player.autoCrunchMode);\r\n const condition = new Decimal(old.priority);\r\n switch (player.autoCrunchMode) {\r\n case \"amount\":\r\n autobuyer.amount = condition;\r\n break;\r\n case \"time\":\r\n autobuyer.time = condition.lt(Decimal.NUMBER_MAX_VALUE) ? condition.toNumber() : autobuyer.time;\r\n break;\r\n case \"relative\":\r\n autobuyer.xHighest = condition;\r\n break;\r\n }\r\n autobuyer.isActive = old.isOn;\r\n autobuyer.lastTick = player.realTimePlayed;\r\n }\r\n\r\n delete player.autoCrunchMode;\r\n delete player.autobuyers;\r\n\r\n if (player.autoSacrifice && player.autoSacrifice % 1 !== 0) {\r\n const old = player.autoSacrifice;\r\n const autobuyer = player.auto.sacrifice;\r\n autobuyer.multiplier = new Decimal(old.priority);\r\n autobuyer.isActive = old.isOn;\r\n }\r\n\r\n delete player.autoSacrifice;\r\n\r\n if (player.eternityBuyer !== undefined) {\r\n const old = player.eternityBuyer;\r\n const autobuyer = player.auto.eternity;\r\n // Development saves have additional modes\r\n if (player.autoEternityMode === undefined) {\r\n autobuyer.time = Number(old.limit);\r\n }\r\n autobuyer.isActive = old.isOn;\r\n }\r\n\r\n delete player.eternityBuyer;\r\n },\r\n\r\n convertNews(player) {\r\n if (player.newsArray === undefined) {\r\n player.newsArray = [];\r\n } else {\r\n player.newsArray = player.newsArray.map(x => (typeof(x) === \"number\" ? `a${x}` : x));\r\n }\r\n const oldNewsArray = new Set(player.newsArray);\r\n player.news = {};\r\n player.news.seen = {};\r\n player.news.specialTickerData = {\r\n uselessNewsClicks: 0,\r\n paperclips: 0,\r\n newsQueuePosition: 1000,\r\n eiffelTowerChapter: 0\r\n };\r\n\r\n // This loop is copied more or less straight out of NewsHandler.addSeenNews with the extraneous comments and\r\n // spacing removed. There was something strange with variable scoping that was causing player.news.seen to be\r\n // updated within NewsHandler, but then immediately becoming empty again once we were back at this level of\r\n // function calls (ie. out of the scope of NewsHandler). Sloppy, but nevertheless it does seem to work.\r\n const maskLength = NewsHandler.BITS_PER_MASK;\r\n for (const id of oldNewsArray) {\r\n const groups = id.match(/([a-z]+)(\\d+)/u);\r\n const type = groups[1];\r\n const number = parseInt(groups[2], 10);\r\n if (!player.news.seen[type]) player.news.seen[type] = [];\r\n while (maskLength * player.news.seen[type].length < number) player.news.seen[type].push(0);\r\n player.news.seen[type][Math.floor(number / maskLength)] |= 1 << (number % maskLength);\r\n }\r\n\r\n player.news.totalSeen = NewsHandler.uniqueTickersSeen;\r\n delete player.newsArray;\r\n },\r\n\r\n convertEternityCountToDecimal(player) {\r\n player.eternities = new Decimal(player.eternities);\r\n player.reality.partEternitied = new Decimal(player.reality.partEternitied);\r\n },\r\n\r\n renameDimboosts(player) {\r\n player.dimensionBoosts = player.resets;\r\n delete player.resets;\r\n },\r\n\r\n migrateConfirmations(player) {\r\n player.options.confirmations.challenges = !player.options.challConf;\r\n delete player.options.challConf;\r\n player.options.confirmations.eternity = player.options.eternityconfirm;\r\n delete player.options.eternityconfirm;\r\n\r\n // This did nothing on live and continues to do nothing...?\r\n delete player.tickDecrease;\r\n },\r\n\r\n changeC8Handling(player) {\r\n player.chall8TotalSacrifice = Decimal.pow(player.chall11Pow, 2);\r\n delete player.chall11Pow;\r\n },\r\n\r\n convertAchievementsToBits(player) {\r\n // Also switches achievement positions\r\n // So far there've been three swaps\r\n // (1) a three-way swap of zero deaths, 1 million is a lot, and antitables\r\n // (2) a two-way swap of costco sells dimboosts now and 8 nobody got time for that\r\n // (3) a two-way swap of long lasting relationship and eternities are the new infinity\r\n const swaps = { \"4,3\": \"6,4\", \"6,4\": \"7,7\", \"7,7\": \"4,3\",\r\n \"10,1\": \"11,7\", \"11,7\": \"10,1\", \"11,3\": \"12,4\", \"12,4\": \"11,3\" };\r\n const convertAchievementArray = (newAchievements, oldAchievements, isSecret) => {\r\n for (const oldId of oldAchievements) {\r\n let row = Math.floor(oldId / 10);\r\n let column = oldId % 10;\r\n if (!isSecret && [row, column].join(\",\") in swaps) {\r\n [row, column] = swaps[[row, column].join(\",\")].split(\",\");\r\n }\r\n newAchievements[row - 1] |= (1 << (column - 1));\r\n }\r\n // Handle the changed achievement \"No DLC Required\" correctly (otherwise saves could miss it).\r\n if (!isSecret && (player.infinityUpgrades.size >= 16 || player.eternities.gt(0) || player.realities > 0)) {\r\n newAchievements[3] |= 1;\r\n } else {\r\n newAchievements[3] &= ~1;\r\n }\r\n\r\n // \"Professional Bodybuilder\" (s38) was changed and shouldn't be migrated\r\n if (isSecret) {\r\n newAchievements[2] &= ~128;\r\n }\r\n };\r\n\r\n player.achievementBits = Array.repeat(0, 15);\r\n convertAchievementArray(player.achievementBits, player.achievements, false);\r\n delete player.achievements;\r\n\r\n player.secretAchievementBits = Array.repeat(0, 4);\r\n convertAchievementArray(player.secretAchievementBits, player.secretAchievements, true);\r\n delete player.secretAchievements;\r\n },\r\n\r\n setNoInfinitiesOrEternitiesThisReality(player) {\r\n player.requirementChecks.reality.noInfinities = player.infinities.eq(0) && player.eternities.eq(0);\r\n player.requirementChecks.reality.noEternities = player.eternities.eq(0);\r\n },\r\n\r\n setTutorialState(player) {\r\n if (player.infinities.gt(0) || player.eternities.gt(0) || player.realities > 0 || player.galaxies > 0) {\r\n player.tutorialState = 4;\r\n } else if (player.dimensionBoosts > 0) player.tutorialState = TUTORIAL_STATE.GALAXY;\r\n },\r\n\r\n migrateLastTenRuns(player) {\r\n // Move infinities before time in infinity, and make them Decimal.\r\n // I know new Decimal(x).toNumber() can't actually be the best way of converting a value\r\n // that might be either Decimal or number to number, but it's the best way I know.\r\n player.lastTenRuns = player.lastTenRuns.map(\r\n x => [x[0], x[1], new Decimal(x[3]), new Decimal(x[2]).toNumber()]);\r\n // Put in a default value of 1 for eternities.\r\n player.lastTenEternities = player.lastTenEternities.map(\r\n x => [x[0], x[1], new Decimal(1), new Decimal(x[2]).toNumber()]);\r\n },\r\n\r\n migrateIPGen(player) {\r\n player.infinityRebuyables[2] = player.offlineProd / 5;\r\n delete player.offlineProd;\r\n delete player.offlineProdCost;\r\n },\r\n\r\n renameCloudVariable(player) {\r\n player.options.cloudEnabled = player.options.cloud;\r\n delete player.options.cloud;\r\n },\r\n\r\n standardizeUncompletedTimes(player) {\r\n if (player.bestInfinityTime === 999999999999) player.bestInfinityTime = Number.MAX_VALUE;\r\n if (player.bestInfinityRealTime === 999999999999) player.bestInfinityRealTime = Number.MAX_VALUE;\r\n if (player.bestEternity === 999999999999) player.bestEternity = Number.MAX_VALUE;\r\n for (let i = 0; i < player.challenge.normal.bestTimes.length; i++) {\r\n if (player.challenge.normal.bestTimes[i] === 2678400000) player.challenge.normal.bestTimes[i] = Number.MAX_VALUE;\r\n }\r\n for (let i = 0; i < player.challenge.infinity.bestTimes.length; i++) {\r\n if (player.challenge.infinity.bestTimes[i] === 2678400000) {\r\n player.challenge.infinity.bestTimes[i] = Number.MAX_VALUE;\r\n }\r\n }\r\n for (let i = 0; i < 10; i++) {\r\n if (player.lastTenRuns[i][0] === 2678400000) player.lastTenRuns[i][0] = Number.MAX_VALUE;\r\n if (player.lastTenRuns[i][3] === 26784000) player.lastTenRuns[i][3] = Number.MAX_VALUE;\r\n if (player.lastTenEternities[i][0] === 2678400000) player.lastTenEternities[i][0] = Number.MAX_VALUE;\r\n if (player.lastTenEternities[i][3] === 26784000) player.lastTenEternities[i][3] = Number.MAX_VALUE;\r\n }\r\n },\r\n\r\n makeRecords(player) {\r\n player.records.gameCreatedTime = player.gameCreatedTime;\r\n player.records.totalTimePlayed = player.totalTimePlayed;\r\n player.records.realTimePlayed = player.realTimePlayed;\r\n player.records.totalAntimatter = new Decimal(player.totalAntimatter);\r\n player.records.lastTenInfinities = player.lastTenRuns;\r\n player.records.lastTenEternities = player.lastTenEternities;\r\n for (let i = 0; i < 10; i++) {\r\n player.records.lastTenInfinities[i][1] = new Decimal(player.lastTenRuns[i][1]);\r\n player.records.lastTenEternities[i][1] = new Decimal(player.lastTenEternities[i][1]);\r\n }\r\n player.records.thisInfinity.time = player.thisInfinityTime;\r\n player.records.thisInfinity.realTime = player.thisInfinityTime;\r\n player.records.bestInfinity.time = player.bestInfinityTime;\r\n player.records.thisEternity.time = player.thisEternity;\r\n player.records.thisEternity.realTime = player.thisEternity;\r\n player.records.bestEternity.time = player.bestEternity;\r\n player.records.thisReality.time = player.thisReality;\r\n player.records.thisReality.realTime = player.thisReality;\r\n },\r\n\r\n deleteOldRecords(player) {\r\n delete player.gameCreatedTime;\r\n delete player.totalTimePlayed;\r\n delete player.realTimePlayed;\r\n delete player.totalAntimatter;\r\n delete player.lastTenRuns;\r\n delete player.lastTenEternities;\r\n delete player.thisInfinityTime;\r\n delete player.bestInfinityTime;\r\n delete player.thisEternity;\r\n delete player.bestEternity;\r\n delete player.thisReality;\r\n },\r\n\r\n migrateAutobuyers(player) {\r\n player.auto.autobuyerOn = player.options.autobuyerOn;\r\n\r\n delete player.options.bulkOn;\r\n delete player.options.autobuyerOn;\r\n },\r\n\r\n migratePlayerVars(player) {\r\n player.replicanti.boughtGalaxyCap = player.replicanti.gal;\r\n player.dilation.totalTachyonGalaxies = player.dilation.freeGalaxies;\r\n\r\n delete player.replicanti.gal;\r\n delete player.dilation.freeGalaxies;\r\n },\r\n\r\n consolidateAuto(player) {\r\n for (let i = 0; i < 8; i++) {\r\n player.auto.infinityDims.all[i].isActive = player.infDimBuyers[i];\r\n }\r\n for (let i = 0; i < 3; i++) {\r\n player.auto.replicantiUpgrades.all[i].isActive = player.replicanti.auto[i];\r\n }\r\n player.auto.replicantiGalaxies.isActive = player.replicanti.galaxybuyer;\r\n player.auto.ipMultBuyer.isActive = player.infMultBuyer;\r\n\r\n delete player.infDimBuyers;\r\n delete player.auto.infDimTimer;\r\n delete player.replicanti.galaxybuyer;\r\n delete player.replicanti.auto;\r\n delete player.auto.repUpgradeTimer;\r\n delete player.infMultBuyer;\r\n },\r\n\r\n convertTimeTheoremPurchases(player) {\r\n player.timestudy.amBought = new Decimal(player.timestudy.amcost).exponent / 20000 - 1;\r\n player.timestudy.ipBought = new Decimal(player.timestudy.ipcost).exponent / 100;\r\n player.timestudy.epBought = Math.round(new Decimal(player.timestudy.epcost).log2());\r\n\r\n delete player.timestudy.amcost;\r\n delete player.timestudy.ipcost;\r\n delete player.timestudy.epcost;\r\n },\r\n\r\n infinitiedConversion(player) {\r\n player.infinities = new Decimal(player.infinitied);\r\n player.infinitiesBanked = new Decimal(player.infinitiedBank);\r\n\r\n delete player.infinitied;\r\n delete player.infinitiedBank;\r\n },\r\n\r\n deleteDimboostBulk(player) {\r\n delete player.auto.dimBoost.bulk;\r\n if (player.infinityUpgrades.delete(\"bulkBoost\")) {\r\n player.infinityUpgrades.add(\"autobuyMaxDimboosts\");\r\n }\r\n },\r\n\r\n removePriority(player) {\r\n const dims = player.auto.antimatterDims.all ?? player.auto.antimatterDims;\r\n for (let i = 0; i < 8; i++) {\r\n delete dims[i].priority;\r\n }\r\n delete player.auto.tickspeed.priority;\r\n },\r\n\r\n deleteFloatingTextOption(player) {\r\n delete player.options.animations.floatingText;\r\n },\r\n\r\n refactorDoubleIPRebuyable(player) {\r\n // A bit of a hack, but needs to be done this way to not trigger the non-Decimal assignment crash check code\r\n const purchases = new Decimal(player.infMult).log2();\r\n delete player.infMult;\r\n player.infMult = Math.round(purchases);\r\n delete player.infMultCost;\r\n },\r\n\r\n deletePostChallUnlocked(player) {\r\n delete player.postChallUnlocked;\r\n },\r\n\r\n infMultNameConversion(player) {\r\n player.IPMultPurchases = player.infMult;\r\n delete player.infMult;\r\n },\r\n\r\n etercreqConversion(player) {\r\n if (player.etercreq) player.challenge.eternity.requirementBits |= 1 << player.etercreq;\r\n delete player.etercreq;\r\n },\r\n\r\n moveTS33(player) {\r\n if (player.timestudy.studies.includes(33) && !player.timestudy.studies.includes(22)) {\r\n player.timestudy.studies.splice(player.timestudy.studies.indexOf(33), 1);\r\n player.timestudy.theorem = new Decimal(player.timestudy.theorem).plus(2);\r\n }\r\n },\r\n\r\n addBestPrestigeCurrency(player) {\r\n player.records.thisReality.maxEP = player.eternityPoints;\r\n player.records.bestReality.bestEP = player.eternityPoints;\r\n player.records.thisEternity.maxIP = player.infinityPoints;\r\n player.records.thisReality.maxIP = player.infinityPoints;\r\n },\r\n\r\n migrateTheme(player) {\r\n player.options.themeClassic = player.options.theme === undefined\r\n ? \"Normal\"\r\n : player.options.theme;\r\n delete player.options.themes;\r\n delete player.options.secretThemeKey;\r\n },\r\n\r\n // This change removed the ability to adjust stored time rate after Ra-Nameless 10, instead forcing it to be 99%\r\n reworkBHPulsing(player) {\r\n delete player.celestials.enslaved.storedFraction;\r\n },\r\n\r\n prePatch(saveData) {\r\n // Initialize all possibly undefined properties that were not present in\r\n // previous versions and which could be overwritten by deepmerge\r\n saveData.totalAntimatter = saveData.totalAntimatter || saveData.totalmoney || saveData.money;\r\n saveData.thisEternity = saveData.thisEternity || saveData.totalTimePlayed;\r\n saveData.version = saveData.version || 0;\r\n },\r\n\r\n // Patch up to the specified version; we need this functionality in order to properly migrate both saves from\r\n // much older versions and saves from in-development versions\r\n patch(saveData, maxVersion) {\r\n this.prePatch(saveData);\r\n // This adds all the undefined properties to the save which are in player.js\r\n const player = deepmergeAll([Player.defaultStart, saveData]);\r\n const versions = Object.keys(this.patches).map(parseFloat).sort();\r\n let version;\r\n while ((version = versions.find(v => player.version < v && v < maxVersion)) !== undefined) {\r\n const patch = this.patches[version];\r\n patch(player);\r\n player.version = version;\r\n }\r\n return player;\r\n },\r\n\r\n patchPreReality(saveData) {\r\n return this.patch(saveData, this.firstRealityMigration);\r\n },\r\n\r\n patchPostReality(saveData) {\r\n // Plus 1 because this the threshold is exclusive (it migrates up to but not including the maxVersion)\r\n return this.patch(saveData, Object.keys(migrations.patches).map(k => Number(k)).max() + 1);\r\n }\r\n};\r\n","import { migrations } from \"./migrations\";\r\nimport { DC } from \"../constants\";\r\n\r\nfunction arrayToBits(array) {\r\n let bits = 0;\r\n for (const id of array) bits |= (1 << id);\r\n return bits;\r\n}\r\n\r\n// WARNING: Don't use state accessors and functions from global scope here, that's not safe in long-term\r\nexport const devMigrations = {\r\n patches: [\r\n player => {\r\n migrations.normalizeTimespans(player);\r\n player.bestReality = player.bestReality === 9999999999\r\n ? 999999999999\r\n : player.bestReality * 100;\r\n for (let i = 0; i < 10; i++) {\r\n player.lastTenRealities[i][0] *= 100;\r\n }\r\n },\r\n player => {\r\n player.reality.glyphs.last = \"\";\r\n },\r\n player => {\r\n player.secretUnlocks.themes = [];\r\n },\r\n player => {\r\n player.wormhole.power *= 36;\r\n },\r\n player => {\r\n player.reality.rebuyables = { 1: 0, 2: 0, 3: 0, 4: 0, 5: 0 };\r\n for (let i = 1; i < 6; i++) {\r\n if (player.reality.upg.includes(i)) {\r\n player.reality.rebuyables[i] = 1;\r\n player.reality.upg.splice(player.reality.upg.indexOf(i), 1);\r\n }\r\n }\r\n },\r\n player => {\r\n player.reality.tdbuyer = {\r\n on: false,\r\n threshhold: 1\r\n };\r\n player.reality.epmultbuyer = {\r\n on: false,\r\n threshhold: 1\r\n };\r\n },\r\n player => {\r\n player.reality.perks = new Set();\r\n },\r\n player => {\r\n player.reality.pp = 0;\r\n },\r\n player => {\r\n player.reality.pp = player.realities;\r\n },\r\n player => {\r\n // Give starting perk\r\n if (player.reality.pp > 0) {\r\n player.reality.pp -= 1;\r\n player.reality.perks.add(0);\r\n }\r\n },\r\n player => {\r\n // Var for s45\r\n player.secretUnlocks.dragging = 0;\r\n },\r\n player => {\r\n for (let i = 0; i < player.reality.glyphs.active.length; i++) {\r\n const glyph = player.reality.glyphs.active[i];\r\n if (glyph.effects.autochall !== undefined) {\r\n delete glyph.effects.autochall;\r\n glyph.effects.buy10 = 1 + Math.pow(glyph.level * glyph.strength, 0.8) / 10;\r\n }\r\n }\r\n\r\n for (let i = 0; i < player.reality.glyphs.inventory.length; i++) {\r\n const glyph = player.reality.glyphs.inventory[i];\r\n if (glyph.effects.autochall !== undefined) {\r\n delete glyph.effects.autochall;\r\n glyph.effects.buy10 = 1 + Math.pow(glyph.level * glyph.strength, 0.8) / 10;\r\n }\r\n }\r\n },\r\n player => {\r\n player.reality.upgReqs.push(false, false, false, false, false);\r\n },\r\n player => {\r\n player.reality.realityMachines = new Decimal(player.reality.realityMachines);\r\n },\r\n player => {\r\n player.reality.glyphs.sac = {\r\n power: DC.D0,\r\n infinity: DC.D0,\r\n time: DC.D0,\r\n replication: DC.D0,\r\n dilation: DC.D0,\r\n effarig: DC.D0,\r\n };\r\n },\r\n player => {\r\n player.wormhole.pause = false;\r\n },\r\n player => {\r\n player.wormholePause = false;\r\n if (player.wormhole[0] !== undefined) return;\r\n player.wormhole = [\r\n player.wormhole,\r\n {\r\n speed: 60 * 6,\r\n power: 90,\r\n duration: 7,\r\n phase: 0,\r\n active: false,\r\n unlocked: false,\r\n },\r\n {\r\n speed: 6 * 6,\r\n power: 45,\r\n duration: 4,\r\n phase: 0,\r\n active: false,\r\n unlocked: false,\r\n }\r\n ];\r\n },\r\n player => {\r\n if (player.reality.upg.includes(20)) {\r\n player.wormhole[1].unlocked = true;\r\n }\r\n },\r\n player => {\r\n player.reality.upgReqs.push(false, false, false, false, false);\r\n },\r\n player => {\r\n player.reality.tdbuyer = undefined;\r\n player.reality.tdbuyers = [false, false, false, false, false, false, false, false];\r\n player.reality.epmultbuyer = false;\r\n },\r\n player => {\r\n if (![\"rm\", \"glyph\", \"either\", \"both\"].includes(player.autoRealityMode)) {\r\n player.autoRealityMode = \"rm\";\r\n }\r\n },\r\n migrations.convertAutobuyerMode,\r\n player => {\r\n for (const key in player.celestials.effarig.glyphWeights) {\r\n player.celestials.effarig.glyphWeights[key] *= 100;\r\n }\r\n },\r\n player => {\r\n // The previous migration didn't work if loading a test save before celestials were added, whoops\r\n for (const key in player.celestials.effarig.glyphWeights) {\r\n player.celestials.effarig.glyphWeights[key] = 25;\r\n }\r\n },\r\n // eslint-disable-next-line no-unused-vars\r\n player => {\r\n // The following patch is deeply incompatible with current player object:\r\n // Patch that changes wormhole => black hole will be applied later in this patch chain\r\n // (see the warning at the top of this file)\r\n\r\n // Following logic from autobuyers (before the addition of wall clock time stats)\r\n // const speedup = getGameSpeedupFactor([GAME_SPEED_EFFECT.EC12, GAME_SPEED_EFFECT.WORMHOLE]);\r\n // player.thisInfinityRealTime = Time.thisInfinity.totalSeconds / speedup;\r\n // player.thisEternityRealTime = Time.thisEternity.totalSeconds / speedup;\r\n // player.thisRealityRealTime = Time.thisReality.totalSeconds / speedup;\r\n // for (var i=0; i<10; i++) {\r\n // player.lastTenRuns[i][2] = undefined;\r\n // player.lastTenEternities[i][2] = undefined;\r\n // player.lastTenRealities[i][3] = undefined;\r\n // }\r\n\r\n // For anyone who is looking at this part of the code for debugging purposes, note that GAME_SPEED_EFFECT.EC12\r\n // has been replaced by GAME_SPEED_EFFECT.FIXED_SPEED since EC12 is no longer the only fixed-speed effect\r\n },\r\n migrations.fixChallengeIds,\r\n migrations.adjustMultCosts,\r\n player => {\r\n const teresa = player.celestials.effarig;\r\n player.celestials.effarig = player.celestials.teresa;\r\n player.celestials.teresa = teresa;\r\n\r\n for (const i in player.reality.glyphs.active) {\r\n const g = player.reality.glyphs.active[i];\r\n if (g.type === \"teresa\") {\r\n g.type = \"effarig\";\r\n }\r\n }\r\n\r\n for (const i in player.reality.glyphs.inventory) {\r\n const g = player.reality.glyphs.inventory[i];\r\n if (g.type === \"teresa\") {\r\n g.type = \"effarig\";\r\n }\r\n }\r\n },\r\n player => {\r\n // The previous migration messed things up pretty badly. The swap was done\r\n // after deepmerge with defaultPlayer, which means that default values got added correctly,\r\n // and then swapped into the incorrect place. We can blow away glyph weights and auto sac\r\n // settings\r\n // eslint-disable-next-line max-params\r\n function movePropIfPossible(celestial1, celestial2, prop, defaultValue, merge = null) {\r\n if (player.celestials[celestial1][prop] !== undefined) {\r\n if (player.celestials[celestial2][prop] === undefined) {\r\n player.celestials[celestial2][prop] = player.celestials[celestial1][prop];\r\n } else if (merge) {\r\n player.celestials[celestial2][prop] = merge(player.celestials[celestial1][prop],\r\n player.celestials[celestial2][prop]);\r\n }\r\n delete player.celestials[celestial1][prop];\r\n } else if (player.celestials[celestial2][prop] === undefined) {\r\n // Both undefined shouldn't really happen, but might as well be thorough here\r\n player.celestials[celestial2][prop] = defaultValue;\r\n }\r\n }\r\n movePropIfPossible(\"teresa\", \"effarig\", \"glyphWeights\", {\r\n ep: 25,\r\n repl: 25,\r\n dt: 25,\r\n eternities: 25\r\n });\r\n // There was a big glyph filter refactor done at some point, and it's infeasible to properly preserve old\r\n // filter settings through this old migration. Any imported saves from before the Teresa/Effarig name swap\r\n // which had glyph filtering unlocked are likely going to be invalid as a result.\r\n movePropIfPossible(\"teresa\", \"effarig\", \"autoGlyphSac\", {\r\n mode: AUTO_GLYPH_SCORE.LOWEST_SACRIFICE,\r\n types: GlyphTypes.list.mapToObject(t => t.id, t => ({\r\n rarityThreshold: 0,\r\n scoreThreshold: 0,\r\n effectScores: t.effects.mapToObject(e => e.id, () => 0),\r\n })),\r\n });\r\n movePropIfPossible(\"teresa\", \"effarig\", \"autoGlyphPick\", {\r\n mode: AUTO_GLYPH_REJECT.SACRIFICE,\r\n });\r\n movePropIfPossible(\"teresa\", \"effarig\", \"relicShards\", 0, Math.max);\r\n movePropIfPossible(\"effarig\", \"teresa\", \"quoteIdx\", 0);\r\n movePropIfPossible(\"effarig\", \"teresa\", \"bestRunAM\", 0, Decimal.max);\r\n movePropIfPossible(\"effarig\", \"teresa\", \"rmStore\", 0, Math.max);\r\n movePropIfPossible(\"effarig\", \"teresa\", \"glyphLevelMult\", 1, Math.max);\r\n movePropIfPossible(\"effarig\", \"teresa\", \"rmMult\", 1, Math.max);\r\n movePropIfPossible(\"effarig\", \"teresa\", \"dtBulk\", 1, Math.max);\r\n // These are unused now\r\n delete player.celestials.effarig.typePriorityOrder;\r\n delete player.celestials.teresa.typePriorityOrder;\r\n // This property didn't even exist at the time of this change\r\n movePropIfPossible(\"teresa\", \"effarig\", \"glyphScoreSettings\", {\r\n mode: AUTO_GLYPH_SCORE.LOWEST_SACRIFICE,\r\n simpleEffectCount: 0,\r\n types: GlyphTypes.list.mapToObject(t => t.id, t => ({\r\n rarityThreshold: 0,\r\n scoreThreshold: 0,\r\n effectCount: 0,\r\n effectChoices: t.effects.mapToObject(e => e.id, () => false),\r\n effectScores: t.effects.mapToObject(e => e.id, () => 0),\r\n })),\r\n });\r\n movePropIfPossible(\"effarig\", \"teresa\", \"bestAMSet\", []);\r\n },\r\n player => {\r\n player.blackHole = player.wormhole;\r\n player.blackHolePause = player.wormholePause;\r\n delete player.wormhole;\r\n delete player.wormholePause;\r\n },\r\n player => {\r\n for (let i = 0; i < player.blackHole.length; i++) {\r\n player.blackHole[i].id = i;\r\n player.blackHole[i].intervalUpgrades = Math.round(\r\n Math.log(player.blackHole[i].speed / (3600 / (Math.pow(10, i)))) / Math.log(0.8)\r\n );\r\n player.blackHole[i].powerUpgrades = Math.round(\r\n Math.log(player.blackHole[i].power / (180 / Math.pow(2, i))) / Math.log(1.35)\r\n );\r\n player.blackHole[i].durationUpgrades = Math.round(\r\n Math.log(player.blackHole[i].duration / (10 - i * 3)) / Math.log(1.3)\r\n );\r\n delete player.blackHole[i].speed;\r\n delete player.blackHole[i].power;\r\n delete player.blackHole[i].duration;\r\n }\r\n },\r\n () => {\r\n // This migration was created by a mistake\r\n },\r\n migrations.convertAchivementsToNumbers,\r\n migrations.adjustGameCreatedTime,\r\n migrations.moveSavedStudyTrees,\r\n player => {\r\n // Leftover stuff from dev.updateTestSave\r\n if (player.celestials.teresa.rmStore > Teresa.rmStoreMax) {\r\n player.reality.realityMachines =\r\n player.reality.realityMachines.plus(player.celestials.teresa.rmStore - Teresa.rmStoreMax);\r\n player.celestials.teresa.rmStore = Teresa.rmStoreMax;\r\n }\r\n if (player.reality.upg) {\r\n player.reality.upgradeBits = arrayToBits(player.reality.upg);\r\n delete player.reality.upg;\r\n }\r\n if ((player.reality.upgradeBits & (1 << 25)) === 0) {\r\n player.realityBuyer.isOn = false;\r\n }\r\n for (let i = 0; i < player.reality.glyphs.active.length; i++) {\r\n const glyph = player.reality.glyphs.active[i];\r\n if (glyph.type === \"power\" && glyph.effects.mult !== undefined) {\r\n glyph.effects.mult = new Decimal(glyph.effects.mult);\r\n }\r\n }\r\n\r\n for (let i = 0; i < player.reality.glyphs.inventory.length; i++) {\r\n const glyph = player.reality.glyphs.inventory[i];\r\n if (glyph.type === \"power\" && glyph.effects.mult !== undefined) {\r\n glyph.effects.mult = new Decimal(glyph.effects.mult);\r\n }\r\n }\r\n },\r\n migrations.convertEPMult,\r\n migrations.moveChallengeInfo,\r\n migrations.adjustWhy,\r\n migrations.adjustThemes,\r\n migrations.removeAchPow,\r\n migrations.adjustSacrificeConfirmation,\r\n migrations.migrateNotation,\r\n migrations.fixAutobuyers,\r\n migrations.removeAutoIPProperties,\r\n player => {\r\n // Swapping glyph level with reality real time\r\n player.lastTenRealities = player.lastTenRealities\r\n .map(a => [a[0], a[1], a[3], a[2]]);\r\n },\r\n player => {\r\n player.achievements.delete(157);\r\n player.achievements.delete(156);\r\n player.achievements.delete(155);\r\n player.achievements.delete(153);\r\n // Have to call this a second time, as player.why wasn't removed from the player.js the first time\r\n migrations.adjustWhy(player);\r\n migrations.adjustAchievementVars(player);\r\n },\r\n migrations.uniformDimensions,\r\n migrations.removeEternityChallGoal,\r\n player => {\r\n // There were 3 black holes in player object\r\n delete player.blackHole.pop();\r\n },\r\n player => {\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n for (let i = 0; i < allGlyphs.length; i++) {\r\n allGlyphs[i].id = i;\r\n }\r\n },\r\n // eslint-disable-next-line no-unused-vars\r\n player => {\r\n // This used to clearNewsArray, which cleared all news entries completely. Unsure what exactly that accomplished,\r\n // but convertNews should accomplish the same migration purpose. However, this entry still needs to stay here as\r\n // a no-op because otherwise save conversion will have an off-by-one error and generally break entirely.\r\n },\r\n player => {\r\n migrations.removeTickspeed(player);\r\n migrations.removePostC3Reward(player);\r\n },\r\n player => {\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n for (const glyph of allGlyphs) {\r\n let effectBitmask = 0;\r\n for (const effect of orderedEffectList) {\r\n const typeEffect = separateEffectKey(effect);\r\n if (glyph.type === typeEffect[0] && glyph.effects[typeEffect[1]] !== undefined) {\r\n effectBitmask += 1 << GlyphEffects[effect].bitmaskIndex;\r\n }\r\n }\r\n glyph.effects = effectBitmask;\r\n }\r\n },\r\n // Ra exp formula changed\r\n player => {\r\n const pets = player.celestials.ra.pets;\r\n for (const prop in pets) {\r\n if (!Object.prototype.hasOwnProperty.call(pets, prop)) continue;\r\n const pet = pets[prop];\r\n const oldExp = pet.exp + 10000 * (Math.pow(1.12, pet.level - 1) - 1) / (0.12);\r\n pet.level = 1;\r\n pet.exp = Math.clampMin(oldExp, 0);\r\n }\r\n player.celestials.ra.unlocks = [];\r\n },\r\n // Ra exp formula changed again\r\n player => {\r\n const pets = player.celestials.ra.pets;\r\n for (const prop in pets) {\r\n if (!Object.prototype.hasOwnProperty.call(pets, prop)) continue;\r\n const pet = pets[prop];\r\n let oldExp = pet.exp;\r\n for (let lv = 1; lv < pet.level; lv++) {\r\n const floor5 = Math.floor(lv / 5);\r\n const adjustedLevel = 2.5 * floor5 * (floor5 + 1) + (lv % 5) * (floor5 + 1);\r\n oldExp += Math.floor(10000 * Math.pow(1.12, adjustedLevel - 1));\r\n }\r\n pet.level = 1;\r\n pet.exp = Math.clampMin(oldExp, 0);\r\n }\r\n player.celestials.ra.unlocks = [];\r\n },\r\n migrations.renameMoney,\r\n player => {\r\n migrations.moveAutobuyers(player);\r\n const old = player.realityBuyer;\r\n const realityAutobuyer = player.auto.reality;\r\n realityAutobuyer.mode = [\"rm\", \"glyph\", \"either\", \"both\"].indexOf(player.autoRealityMode);\r\n realityAutobuyer.rm = old.rm;\r\n realityAutobuyer.glyph = old.glyph;\r\n realityAutobuyer.isActive = old.isOn;\r\n\r\n const eternityAutobuyer = player.auto.eternity;\r\n eternityAutobuyer.mode = [\"amount\", \"time\", \"relative\"].indexOf(player.autoEternityMode);\r\n const condition = new Decimal(old.limit);\r\n switch (player.autoEternityMode) {\r\n case \"amount\":\r\n eternityAutobuyer.amount = condition;\r\n break;\r\n case \"time\":\r\n eternityAutobuyer.time = condition.lt(Decimal.NUMBER_MAX_VALUE)\r\n ? condition.toNumber()\r\n : eternityAutobuyer.time;\r\n break;\r\n case \"relative\":\r\n eternityAutobuyer.xLast = condition;\r\n break;\r\n }\r\n\r\n delete player.realityBuyer;\r\n delete player.autoRealityMode;\r\n delete player.autoEternityMode;\r\n },\r\n migrations.convertNews,\r\n migrations.convertEternityCountToDecimal,\r\n migrations.renameDimboosts,\r\n player => {\r\n // Reset reality autobuyer mode, since AUTO_REALITY_MODE was incorrectly starting from 1 and not from 0.\r\n // Disable it also to not wreck people's long runs or smth\r\n player.auto.reality.mode = 0;\r\n player.auto.reality.isActive = false;\r\n },\r\n player => {\r\n // Perk shop refactor\r\n player.celestials.teresa.perkShop = [\r\n Math.floor(Math.log(player.celestials.teresa.glyphLevelMult) / Math.log(1.05)),\r\n Math.floor(Math.log(player.celestials.teresa.rmMult) / Math.log(2)),\r\n Math.floor(Math.log(player.celestials.teresa.dtBulk) / Math.log(2)),\r\n 0];\r\n delete player.celestials.teresa.glyphLevelMult;\r\n delete player.celestials.teresa.rmMult;\r\n delete player.celestials.teresa.dtBulk;\r\n },\r\n migrations.migrateConfirmations,\r\n migrations.removeOtherTickspeedProps,\r\n player => {\r\n // These were accidentally added back in due to a bad merge conflict resolution\r\n delete player.resets;\r\n delete player.tickDecrease;\r\n },\r\n migrations.renameNewsOption,\r\n migrations.removeDimensionCosts,\r\n migrations.renameTickspeedPurchaseBumps,\r\n player => {\r\n const safeArrayToBits = x => ((x === undefined) ? 0 : arrayToBits(x));\r\n player.celestials.teresa.unlockBits = safeArrayToBits(player.celestials.teresa.unlocks);\r\n delete player.celestials.teresa.unlocks;\r\n player.celestials.effarig.unlockBits = safeArrayToBits(player.celestials.effarig.unlocks);\r\n delete player.celestials.effarig.unlocks;\r\n player.celestials.v.unlockBits = safeArrayToBits(player.celestials.v.unlocks);\r\n delete player.celestials.v.unlocks;\r\n player.celestials.ra.unlockBits = safeArrayToBits(player.celestials.ra.unlocks);\r\n delete player.celestials.ra.unlocks;\r\n player.celestials.laitela.unlockBits = safeArrayToBits(player.celestials.laitela.unlocks);\r\n delete player.celestials.laitela.unlocks;\r\n },\r\n player => {\r\n player.reality.seed = Math.floor(Math.abs(player.reality.seed)) % 0xFFFFFFFF;\r\n },\r\n player => {\r\n player.auto.sacrifice.multiplier = new Decimal(player.auto.sacrifice.multiplier);\r\n },\r\n migrations.changeC8Handling,\r\n player => {\r\n while (player.celestials.teresa.perkShop.length < 5) player.celestials.teresa.perkShop.push(0);\r\n },\r\n player => {\r\n delete player.secretUnlocks.fixed;\r\n },\r\n player => {\r\n delete player.celestials.effarig.quoteIdx;\r\n delete player.celestials.enslaved.quoteIdx;\r\n },\r\n player => {\r\n const tempAuto = player.celestials.teresa.perkShop[4];\r\n const tempMusic = player.celestials.teresa.perkShop[3];\r\n player.celestials.teresa.perkShop[3] = tempAuto;\r\n player.celestials.teresa.perkShop[4] = tempMusic;\r\n },\r\n migrations.convertAchievementsToBits,\r\n player => {\r\n for (const dimension of player.dimensions.antimatter) {\r\n delete dimension.power;\r\n }\r\n for (const dimension of player.dimensions.infinity) {\r\n delete dimension.power;\r\n }\r\n for (const dimension of player.dimensions.time) {\r\n delete dimension.power;\r\n }\r\n },\r\n player => {\r\n const cursedMask = 15;\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n for (const glyph of allGlyphs) {\r\n if (glyph.type === \"cursed\") glyph.effects = cursedMask;\r\n }\r\n },\r\n player => {\r\n player.options.showHintText.alchemy = player.options.showAlchemyResources;\r\n delete player.options.showAlchemyResources;\r\n },\r\n player => {\r\n // Adds in effect selection settings and removes non-generated types while preserving old glyph filter settings\r\n const oldSettings = player.celestials.effarig.autoGlyphSac.types;\r\n const newSettings = GlyphTypes.list\r\n .filter(type => generatedTypes.includes(type.id))\r\n .mapToObject(t => t.id, t => ({\r\n rarityThreshold: 0,\r\n scoreThreshold: 0,\r\n effectCount: 0,\r\n effectChoices: t.effects.mapToObject(e => e.id, () => false),\r\n effectScores: t.effects.mapToObject(e => e.id, () => 0),\r\n }));\r\n for (const type of generatedTypes) {\r\n newSettings[type].rarityThreshold = oldSettings[type].rarityThreshold;\r\n newSettings[type].scoreThreshold = oldSettings[type].scoreThreshold;\r\n for (const effect of Object.keys(newSettings[type].effectScores)) {\r\n newSettings[type].effectScores[effect] = oldSettings[type].effectScores[effect];\r\n }\r\n }\r\n player.celestials.effarig.autoGlyphSac.types = newSettings;\r\n },\r\n player => {\r\n player.reality.glyphs.inventorySize += 10;\r\n },\r\n player => {\r\n player.celestials.v.unlockBits = 0;\r\n // Adding this in case the player is loading a save (otherwise it\r\n // doesn't update immediately and the player still has nonzero ST\r\n // for the purpose of checking unlocks).\r\n V.updateTotalRunUnlocks();\r\n V.checkForUnlocks();\r\n },\r\n player => {\r\n // Reset the v-unlocks again\r\n player.celestials.v.unlockBits = 0;\r\n // See above migration for an explanation of the below line.\r\n V.updateTotalRunUnlocks();\r\n V.checkForUnlocks();\r\n },\r\n player => {\r\n player.reality.autoAchieve = !player.reality.disableAutoAchieve;\r\n delete player.reality.disableAutoAchieve;\r\n delete player.newEC10Test;\r\n },\r\n player => {\r\n // Some older saves have screwed up Ra unlocks for some reason, this should fix that\r\n player.celestials.ra.unlockBits = 0;\r\n Ra.checkForUnlocks();\r\n },\r\n player => {\r\n // Required for compatibility after V records refactor\r\n player.celestials.v.runRecords[0] = -10;\r\n },\r\n player => {\r\n delete player.celestials.v.cursedThisRun;\r\n },\r\n player => {\r\n // Reset Ra unlocks again, because apparently Ra-Teresa Lv1 upgrades were always active due to an oversight\r\n player.celestials.ra.unlockBits = 0;\r\n Ra.checkForUnlocks();\r\n },\r\n player => {\r\n // Glyph filter refactor (not worth the trouble of translating between the modes, but copy the configs)\r\n Object.assign(player.celestials.effarig.glyphScoreSettings, player.celestials.effarig.autoGlyphSac);\r\n player.celestials.effarig.glyphTrashMode = 0;\r\n delete player.celestials.effarig.autoGlyphSac;\r\n delete player.celestials.effarig.autoGlyphPick;\r\n },\r\n player => {\r\n delete player.reality.glyphs.inventorySize;\r\n for (const glyph of player.reality.glyphs.inventory) {\r\n if (glyph.idx >= 10) {\r\n glyph.idx += 10;\r\n }\r\n }\r\n },\r\n player => {\r\n // Typo fix, as long as we have to delete a player property let's also\r\n // correctly initialize the new one.\r\n player.onlyEighthDimensions = player.onlyEighthDimensons;\r\n delete player.onlyEighthDimensons;\r\n },\r\n player => {\r\n for (const pet of Ra.pets.all) {\r\n pet.level = Math.clampMax(pet.level, 25);\r\n }\r\n delete player.celestials.ra.compression;\r\n if (Ra.unlocks.allGamespeedGlyphs.canBeApplied) {\r\n const allGlyphs = player.reality.glyphs.active\r\n .concat(player.reality.glyphs.inventory);\r\n for (const glyph of allGlyphs) {\r\n Glyphs.applyGamespeed(glyph);\r\n }\r\n }\r\n },\r\n player => {\r\n for (let i = 0; i < player.celestials.ra.alchemy.length; i++) {\r\n player.celestials.ra.alchemy[i].amount = Math.clampMax(\r\n player.celestials.ra.alchemy[i].amount, Ra.alchemyResourceCap);\r\n }\r\n },\r\n player => {\r\n delete player.celestials.laitela.maxAmGained;\r\n for (const dim of player.celestials.laitela.dimensions) {\r\n dim.powerDMUpgrades = dim.powerUpgrades;\r\n dim.powerDEUpgrades = 0;\r\n delete dim.chanceUpgrades;\r\n delete dim.powerUpgrades;\r\n }\r\n // Note that player.celestials.laitela.higgs is actually a string at this point\r\n // (since conversion to Decimal hasn't happened yet).\r\n player.celestials.laitela.darkMatterMult = Number(player.celestials.laitela.higgs) + 1;\r\n delete player.celestials.laitela.anomalies;\r\n },\r\n player => {\r\n delete player.achPow;\r\n delete player.interval;\r\n delete player.tickThreshold;\r\n delete player.celestials.enslaved.maxQuotes;\r\n delete player.celestials.v.quoteIdx;\r\n delete player.celestials.ra.quoteIdx;\r\n },\r\n player => {\r\n player.celestials.enslaved.totalDimCapIncrease = 0;\r\n player.celestials.enslaved.tesseracts = 0;\r\n },\r\n player => {\r\n delete player.auto.galaxy.buyMax;\r\n },\r\n player => {\r\n delete player.reality.glyphs.sac.cursed;\r\n Achievement(153).lock();\r\n Achievement(157).lock();\r\n },\r\n player => {\r\n // Return all PP spent on old V goal reduction\r\n if (player.celestials.v.ppSpent) {\r\n player.reality.pp += player.celestials.v.ppSpent;\r\n delete player.celestials.v.ppSpent;\r\n }\r\n },\r\n player => {\r\n player.thisEternityMaxAM = new Decimal(0);\r\n },\r\n player => {\r\n migrations.migrateLastTenRuns(player);\r\n // Put in a default value of 1 for realities.\r\n player.lastTenRealities = player.lastTenRealities.map(x => [x[0], x[1], 1, Number(x[2]), x[3]]);\r\n migrations.migrateIPGen(player);\r\n },\r\n player => {\r\n player.noReplicantiGalaxies = player.reality.upgReqChecks[0];\r\n delete player.reality.upgReqChecks;\r\n },\r\n player => {\r\n player.bestGlyphStrength = player.reality.glyphs.active.concat(\r\n player.reality.glyphs.inventory).map(g => g.strength).max();\r\n },\r\n player => {\r\n player.options.showHintText.glyphEffectDots = player.options.showGlyphEffectDots;\r\n delete player.options.showGlyphEffectDots;\r\n migrations.renameCloudVariable(player);\r\n },\r\n player => {\r\n const newPerks = new Set([...player.reality.perks].filter(x => x < 20 || x > 25));\r\n const gainedPerkPoints = player.reality.perks.size - newPerks.size;\r\n player.reality.pp += gainedPerkPoints;\r\n player.reality.perks = newPerks;\r\n if (gainedPerkPoints > 0) {\r\n Modal.message.show(\r\n \"Some of your perks (glyph perks) were removed. The perk points you spent on them have been refunded.\");\r\n }\r\n },\r\n player => {\r\n delete player.reality.glyphs.last;\r\n },\r\n player => {\r\n if (player.reality.secondGaussian === null) {\r\n // Future-proof against potential changes to the default value\r\n // (as a special case of not using state accessors).\r\n player.reality.secondGaussian = 1e6;\r\n }\r\n },\r\n player => {\r\n delete player.celestials.laitela.reachedSingularityCapLimit;\r\n delete player.celestials.laitela.secondsSinceCappedTime;\r\n delete player.celestials.laitela.singularityAutoCapLimit;\r\n delete player.celestials.laitela.singularityTime;\r\n delete player.celestials.laitela.autoAnnihilationTimer;\r\n delete player.celestials.laitela.annihilated;\r\n delete player.celestials.laitela.secondsSinceReachedSingularity;\r\n player.celestials.laitela.darkMatterMult = Math.clampMin(player.celestials.laitela.darkMatterMult, 1);\r\n player.celestials.laitela.dimensions.forEach(d => d.ascensionCount = 0);\r\n },\r\n player => {\r\n const allRandomGlyphs = player.reality.glyphs.active\r\n .concat(player.reality.glyphs.inventory)\r\n .filter(i => i.type !== \"companion\");\r\n for (const glyph of allRandomGlyphs) {\r\n glyph.strength = Math.ceil(glyph.strength * 400) / 400;\r\n }\r\n },\r\n player => {\r\n if (player.dimensions.normal !== undefined) {\r\n for (let i = 0; i < player.dimensions.normal.length; i++) {\r\n const dimension = player.dimensions.normal[i];\r\n player.dimensions.antimatter[i].bought = dimension.bought;\r\n player.dimensions.antimatter[i].costBumps = dimension.costBumps;\r\n player.dimensions.antimatter[i].amount = new Decimal(dimension.amount);\r\n }\r\n delete player.dimensions.normal;\r\n }\r\n },\r\n player => {\r\n if (player.options.news.enabled === undefined) {\r\n player.options.news = {\r\n enabled: player.options.news,\r\n repeatBuffer: 40,\r\n AIChance: 0,\r\n speed: 1\r\n };\r\n }\r\n },\r\n player => {\r\n delete player.options.confirmations.glyphTrash;\r\n },\r\n player => {\r\n migrations.standardizeUncompletedTimes(player);\r\n if (player.bestReality === 999999999999) player.bestReality = Number.MAX_VALUE;\r\n if (player.bestRealityRealTime === 999999999999) player.bestRealityRealTime = Number.MAX_VALUE;\r\n for (let i = 0; i < 10; i++) {\r\n if (player.lastTenRealities[i][0] === 2678400000) player.lastTenRealities[i][0] = Number.MAX_VALUE;\r\n if (player.lastTenRealities[i][3] === 26784000) player.lastTenRealities[i][3] = Number.MAX_VALUE;\r\n }\r\n },\r\n player => {\r\n for (const script of Object.values(player.reality.automator.scripts)) {\r\n script.content =\r\n script.content.replace(/^([ \\t]*)(wait|if|while|until)([\\t ]+)(completions)/igmu, \"$1$2$3pending $4\");\r\n }\r\n },\r\n player => {\r\n player.celestials.ra.unlockBits &= ~(1 << 29);\r\n },\r\n player => {\r\n player.records.gameCreatedTime = player.gameCreatedTime;\r\n player.records.totalTimePlayed = player.totalTimePlayed;\r\n player.records.realTimePlayed = player.realTimePlayed;\r\n player.records.totalAntimatter = new Decimal(player.totalAntimatter);\r\n for (let i = 0; i < 10; i++) {\r\n player.records.lastTenInfinities[i][0] = player.lastTenRuns[i][0];\r\n player.records.lastTenEternities[i][0] = player.lastTenEternities[i][0];\r\n player.records.lastTenRealities[i][0] = player.lastTenRealities[i][0];\r\n }\r\n player.options.showLastTenInfinitiesGainPerTime = player.options.showLastTenRunsGainPerTime;\r\n delete player.options.showLastTenRunsGainPerTime;\r\n\r\n player.records.thisInfinity.time = player.thisInfinityTime;\r\n player.records.thisInfinity.realTime = player.thisInfinityRealTime;\r\n player.records.thisInfinity.lastBuyTime = player.thisInfinityLastBuyTime;\r\n player.records.thisInfinity.maxAM = new Decimal(player.thisInfinityMaxAM);\r\n player.records.thisInfinity.bestIPmin = new Decimal(player.bestIPminThisInfinity);\r\n\r\n player.records.bestInfinity.time = player.bestInfinityTime;\r\n player.records.bestInfinity.realTime = player.bestInfinityRealTime;\r\n player.records.bestInfinity.bestIPminEternity = new Decimal(player.bestIPminThisEternity);\r\n player.records.bestInfinity.bestIPminReality = new Decimal(player.bestEPThisReality);\r\n\r\n player.records.thisEternity.time = player.thisEternity;\r\n player.records.thisEternity.realTime = player.thisEternityRealTime;\r\n player.records.thisEternity.maxAM = new Decimal(player.thisEternityMaxAM);\r\n player.records.thisEternity.maxIP = new Decimal(player.thisEternityMaxIP);\r\n player.records.thisEternity.bestIPMsWithoutMaxAll = new Decimal(player.bestIpPerMsWithoutMaxAll);\r\n player.records.thisEternity.bestEPmin = new Decimal(player.bestEPminThisEternity);\r\n player.records.thisEternity.bestInfinitiesPerMs = new Decimal(player.bestInfinitiesPerMs);\r\n\r\n player.records.bestEternity.time = player.bestEternity;\r\n // I have no idea where real time best Eternity is, not sure if it exists?\r\n player.records.bestEternity.bestEPminReality = new Decimal(player.bestEPminThisReality);\r\n\r\n player.records.thisReality.time = player.thisReality;\r\n player.records.thisReality.realTime = player.thisRealityRealTime;\r\n player.records.thisReality.bestEternitiesPerMs = new Decimal(player.bestEternitiesPerMs);\r\n\r\n player.records.bestReality.RMmin = new Decimal(player.bestRMmin);\r\n player.records.bestReality.RMminSet = player.bestRMminSet;\r\n player.records.bestReality.glyphLevel = player.bestGlyphLevel;\r\n player.records.bestReality.glyphStrength = player.bestGlyphStrength;\r\n player.records.bestReality.glyphLevelSet = player.bestGlyphLevelSet;\r\n player.records.bestReality.bestEP = new Decimal(player.bestEP);\r\n player.records.bestReality.bestEPSet = player.bestEPSet;\r\n player.records.bestReality.time = player.bestReality;\r\n player.records.bestReality.realTime = player.bestRealityRealTime;\r\n player.records.bestReality.speedSet = player.bestSpeedSet;\r\n\r\n delete player.gameCreatedTime;\r\n delete player.totalTimePlayed;\r\n delete player.realTimePlayed;\r\n delete player.totalAntimatter;\r\n delete player.lastTenRuns;\r\n delete player.lastTenEternities;\r\n delete player.lastTenRealities;\r\n\r\n delete player.thisInfinityTime;\r\n delete player.thisInfinityRealTime;\r\n delete player.thisInfinityLastBuyTime;\r\n delete player.thisInfinityMaxAM;\r\n delete player.bestIPminThisInfinity;\r\n\r\n delete player.bestInfinityTime;\r\n delete player.bestInfinityRealTime;\r\n delete player.bestIPminThisEternity;\r\n\r\n delete player.thisEternity;\r\n delete player.thisEternityRealTime;\r\n delete player.thisEternityMaxAM;\r\n delete player.thisEternityMaxIP;\r\n delete player.bestIpPerMsWithoutMaxAll;\r\n delete player.bestEPminThisEternity;\r\n delete player.bestInfinitiesPerMs;\r\n delete player.bestIPminThisEternity;\r\n\r\n delete player.bestEternity;\r\n delete player.bestEPminThisReality;\r\n\r\n delete player.thisReality;\r\n delete player.thisRealityRealTime;\r\n delete player.bestEternitiesPerMs;\r\n delete player.bestEPThisReality;\r\n\r\n delete player.bestRMmin;\r\n delete player.bestRMminSet;\r\n delete player.bestGlyphLevel;\r\n delete player.bestGlyphStrength;\r\n delete player.bestGlyphLevelSet;\r\n delete player.bestEP;\r\n delete player.bestEPSet;\r\n delete player.bestReality;\r\n delete player.bestRealityRealTime;\r\n delete player.bestSpeedSet;\r\n },\r\n player => {\r\n player.replicanti.boughtGalaxyCap = player.replicanti.gal;\r\n player.reality.perkPoints = player.reality.pp;\r\n player.celestials.teresa.pouredAmount = player.celestials.teresa.rmStore;\r\n player.celestials.laitela.darkMatter = new Decimal(player.celestials.laitela.matter);\r\n player.celestials.laitela.maxDarkMatter = new Decimal(player.celestials.laitela.maxMatter);\r\n player.celestials.ra.pets.teresa.memories = player.celestials.ra.pets.teresa.exp;\r\n player.celestials.ra.pets.effarig.memories = player.celestials.ra.pets.effarig.exp;\r\n player.celestials.ra.pets.enslaved.memories = player.celestials.ra.pets.enslaved.exp;\r\n player.celestials.ra.pets.v.memories = player.celestials.ra.pets.v.exp;\r\n player.achievementChecks = {\r\n noSacrifices: player.noSacrifices,\r\n onlyEighthDimensions: player.onlyEighthDimensions,\r\n onlyFirstDimensions: player.onlyFirstDimensions,\r\n noEighthDimensions: player.noEighthDimensions,\r\n noFirstDimensions: player.noFirstDimensions,\r\n noAntimatterProduced: player.noAntimatterProduced,\r\n noTriadStudies: player.noTriadStudies,\r\n noTheoremPurchases: player.noTheoremPurchases,\r\n noInfinitiesThisReality: player.noInfinitiesThisReality,\r\n noEternitiesThisReality: player.noEternitiesThisReality,\r\n noReplicantiGalaxies: player.noReplicantiGalaxies,\r\n // Not necessarily accurate, but these defaults prevent some people from effortlessly completing some\r\n // otherwise very difficult unlocks immediately upon migration\r\n maxID1ThisReality: new Decimal(1),\r\n continuumThisReality: true,\r\n };\r\n player.dilation.baseTachyonGalaxies = player.dilation.baseFreeGalaxies;\r\n player.dilation.totalTachyonGalaxies = player.dilation.freeGalaxies;\r\n\r\n delete player.replicanti.gal;\r\n delete player.reality.pp;\r\n delete player.celestials.teresa.rmStore;\r\n delete player.celestials.laitela.matter;\r\n delete player.celestials.laitela.maxMatter;\r\n delete player.celestials.ra.pets.teresa.exp;\r\n delete player.celestials.ra.pets.effarig.exp;\r\n delete player.celestials.ra.pets.enslaved.exp;\r\n delete player.celestials.ra.pets.v.exp;\r\n delete player.noSacrifices;\r\n delete player.onlyEighthDimensions;\r\n delete player.onlyFirstDimensions;\r\n delete player.noEighthDimensions;\r\n delete player.noFirstDimensions;\r\n delete player.noAntimatterProduced;\r\n delete player.noTriadStudies;\r\n delete player.noTheoremPurchases;\r\n delete player.noInfinitiesThisReality;\r\n delete player.noEternitiesThisReality;\r\n delete player.noReplicantiGalaxies;\r\n delete player.dilation.baseFreeGalaxies;\r\n delete player.dilation.freeGalaxies;\r\n },\r\n player => {\r\n player.auto.infinityDims = Array.range(0, 8).map(() => ({ lastTick: 0 }));\r\n for (let i = 0; i < 8; i++) {\r\n player.auto.infinityDims[i].isActive = player.infDimBuyers[i];\r\n }\r\n player.auto.timeDims = Array.range(0, 8).map(() => ({ lastTick: 0 }));\r\n for (let i = 0; i < 8; i++) {\r\n player.auto.timeDims[i].isActive = player.reality.tdbuyers[i];\r\n }\r\n player.auto.replicantiUpgrades = Array.range(0, 3).map(() => ({ lastTick: 0 }));\r\n for (let i = 0; i < 3; i++) {\r\n player.auto.replicantiUpgrades[i].isActive = player.replicanti.auto[i];\r\n }\r\n if (player.dilation.auto === undefined) {\r\n // Not defined on old saves, we define it only to delete it later in this migration\r\n player.dilation.auto = [true, true, true];\r\n }\r\n player.auto.dilationUpgrades = Array.range(0, 3).map(() => ({ lastTick: 0 }));\r\n for (let i = 0; i < 3; i++) {\r\n player.auto.dilationUpgrades[i].isActive = player.dilation.auto[i];\r\n }\r\n player.auto.blackHolePower = Array.range(0, 2).map(() => ({ lastTick: 0 }));\r\n for (let i = 0; i < 2; i++) {\r\n player.auto.blackHolePower[i].isActive = player.blackHole[i].autoPower;\r\n }\r\n if (player.reality.rebuyablesAuto === undefined) {\r\n // Not defined on old saves, we define it only to delete it later in this migration\r\n player.reality.rebuyablesAuto = [true, true, true, true, true];\r\n }\r\n player.auto.realityUpgrades = Array.range(0, 5).map(() => ({ lastTick: 0 }));\r\n for (let i = 0; i < 5; i++) {\r\n player.auto.realityUpgrades[i].isActive = player.reality.rebuyablesAuto[i];\r\n }\r\n // Note: player.autobuyers, the old way of storing autobuyers, seems to have gotten lost in dev migrations\r\n if (player.auto.antimatterDims === undefined) {\r\n player.auto.antimatterDims = player.auto.dimensions;\r\n }\r\n player.auto.replicantiGalaxies.isActive = player.replicanti.galaxybuyer;\r\n player.auto.ipMultBuyer.isActive = player.infMultBuyer;\r\n player.auto.epMultBuyer.isActive = player.reality.epmultbuyer;\r\n player.auto.timeTheorems.isActive = player.ttbuyer;\r\n player.auto.bigCrunch.xCurrent = player.auto.bigCrunch.xLast;\r\n player.auto.eternity.xCurrent = player.auto.eternity.xLast;\r\n player.auto.bulkOn = player.options.bulkOn;\r\n player.auto.autobuyerOn = player.options.autobuyerOn;\r\n player.auto.disableContinuum = player.options.disableContinuum;\r\n\r\n delete player.auto.dimensions;\r\n delete player.infDimBuyers;\r\n delete player.auto.infDimTimer;\r\n delete player.reality.tdbuyers;\r\n delete player.auto.timeDimTimer;\r\n delete player.replicanti.galaxybuyer;\r\n delete player.replicanti.auto;\r\n delete player.auto.repUpgradeTimer;\r\n delete player.ttbuyer;\r\n delete player.auto.ttTimer;\r\n delete player.dilation.auto;\r\n delete player.auto.dilUpgradeTimer;\r\n delete player.blackHole[0].autoPower;\r\n delete player.blackHole[1].autoPower;\r\n delete player.reality.rebuyablesAuto;\r\n delete player.reality.epmultbuyer;\r\n delete player.infMultBuyer;\r\n delete player.auto.bigCrunch.xLast;\r\n delete player.auto.eternity.xLast;\r\n delete player.options.bulkOn;\r\n delete player.options.autobuyerOn;\r\n delete player.options.disableContinuum;\r\n },\r\n migrations.convertTimeTheoremPurchases,\r\n migrations.infinitiedConversion,\r\n player => {\r\n delete player.saveOverThresholdFlag;\r\n delete player.saveOverThresholdFlagModalDisplayed;\r\n },\r\n player => {\r\n if (!Autobuyer.reality.isUnlocked) player.auto.reality.isActive = false;\r\n },\r\n player => {\r\n // Delete PEC5 (id 64)\r\n if (player.reality.perks.has(64)) {\r\n player.reality.perks.delete(64);\r\n player.reality.perkPoints++;\r\n }\r\n\r\n let reqBitmask = 0;\r\n for (let i = 0; i <= player.reality.upgReqs.length; i++) {\r\n if (player.reality.upgReqs[i]) reqBitmask |= (1 << i);\r\n }\r\n player.reality.upgReqs = reqBitmask;\r\n },\r\n player => {\r\n // Delete SAM2 (id 11)\r\n if (player.reality.perks.has(11)) {\r\n player.reality.perks.delete(11);\r\n player.reality.perkPoints++;\r\n }\r\n if (player.reality.perks.has(10)) Perk.startAM.onPurchased();\r\n },\r\n player => {\r\n player.achievementChecks.maxStudiesThisReality = player.timestudy.studies.length;\r\n player.celestials.teresa.lastRepeatedMachines = new Decimal(player.celestials.teresa.lastRepeatedRM);\r\n delete player.celestials.teresa.lastRepeatedRM;\r\n },\r\n player => {\r\n // Make sure scripts don't have any gaps in indices, and load up the correct script on migration\r\n let newID = 1;\r\n let selectedID = 1;\r\n const shiftedScripts = {};\r\n for (const id of Object.keys(player.reality.automator.scripts)) {\r\n shiftedScripts[newID] = player.reality.automator.scripts[id];\r\n shiftedScripts[newID].id = newID;\r\n if (id === player.reality.automator.state.editorScript) selectedID = newID;\r\n newID++;\r\n }\r\n player.reality.automator.scripts = shiftedScripts;\r\n player.reality.automator.state.editorScript = selectedID;\r\n\r\n delete player.reality.automator.lastID;\r\n },\r\n migrations.deleteDimboostBulk,\r\n migrations.removePriority,\r\n player => {\r\n player.reality.realityMachines = player.reality.realityMachines.floor();\r\n },\r\n migrations.deleteFloatingTextOption,\r\n player => {\r\n // Delete ACH5\r\n if (player.reality.perks.has(206)) {\r\n player.reality.perks.delete(206);\r\n player.reality.perkPoints++;\r\n }\r\n },\r\n player => {\r\n player.records.thisEternity.maxIP = new Decimal(player.infinityPoints);\r\n player.auto.bigCrunch.xHighest = player.auto.bigCrunch.xCurrent;\r\n player.auto.eternity.xHighest = player.auto.eternity.xCurrent;\r\n delete player.auto.bigCrunch.xCurrent;\r\n delete player.auto.eternity.xCurrent;\r\n },\r\n player => {\r\n // Fix an issue where a boolean property could become int and trigger number checking code.\r\n player.achievementChecks.continuumThisReality = Boolean(player.achievementChecks.continuumThisReality);\r\n },\r\n player => {\r\n player.secretUnlocks.spreadingCancer = player.spreadingCancer;\r\n delete player.spreadingCancer;\r\n },\r\n player => {\r\n delete player.celestials.enslaved.totalDimCapIncrease;\r\n },\r\n player => {\r\n for (const i of player.reality.glyphs.undo) {\r\n for (const j of [\"thisInfinityTime\", \"thisInfinityRealTime\", \"thisEternityTime\", \"thisEternityRealTime\"]) {\r\n if (!(j in i)) {\r\n // This is 1 second, seems like a solid default value for saves without the property.\r\n i[j] = 1000;\r\n }\r\n }\r\n }\r\n },\r\n player => {\r\n // Requirement migration/refactor\r\n const oldChecks = player.achievementChecks;\r\n player.requirementChecks = {\r\n infinity: {\r\n maxAll: player.usedMaxAll,\r\n noSacrifice: oldChecks.noSacrifices,\r\n noAD8: oldChecks.noEighthDimensions,\r\n },\r\n eternity: {\r\n onlyAD1: oldChecks.onlyFirstDimensions,\r\n onlyAD8: oldChecks.onlyEighthDimensions,\r\n noAD1: oldChecks.noFirstDimensions,\r\n noRG: oldChecks.noEighthDimensions,\r\n },\r\n reality: {\r\n noAM: oldChecks.noAntimatterProduced,\r\n noTriads: oldChecks.noTriadStudies,\r\n noPurchasedTT: oldChecks.noTheoremPurchases,\r\n noInfinities: oldChecks.noInfinitiesThisReality,\r\n noEternities: oldChecks.noEternitiesThisReality,\r\n noContinuum: !oldChecks.continuumThisReality,\r\n maxID1: new Decimal(oldChecks.maxID1ThisReality),\r\n maxStudies: oldChecks.maxStudiesThisReality,\r\n maxGlyphs: player.celestials.v.maxGlyphsThisRun,\r\n slowestBH: player.minNegativeBlackHoleThisReality,\r\n },\r\n permanent: {\r\n cancerGalaxies: player.secretUnlocks.spreadingCancer,\r\n singleTickspeed: player.secretUnlocks.why,\r\n perkTreeDragging: player.secretUnlocks.dragging,\r\n }\r\n };\r\n delete player.usedMaxAll;\r\n delete player.secretUnlocks.spreadingCancer;\r\n delete player.secretUnlocks.why;\r\n delete player.secretUnlocks.dragging;\r\n delete player.achievementChecks;\r\n delete player.minNegativeBlackHoleThisReality;\r\n delete player.celestials.v.maxGlyphsThisRun;\r\n\r\n // Refactor news storage format to bitmask array\r\n if (Array.isArray(player.news)) {\r\n const oldNewsArray = player.news;\r\n delete player.news;\r\n player.news = {};\r\n player.news.seen = {};\r\n for (const id of oldNewsArray) NewsHandler.addSeenNews(id);\r\n player.news.totalSeen = NewsHandler.uniqueTickersSeen;\r\n }\r\n\r\n // Separate news-specific data\r\n player.news.specialTickerData = {\r\n uselessNewsClicks: player.secretUnlocks.uselessNewsClicks,\r\n paperclips: player.secretUnlocks.paperclips,\r\n newsQueuePosition: player.secretUnlocks.newsQueuePosition,\r\n eiffelTowerChapter: player.secretUnlocks.eiffelTowerChapter,\r\n };\r\n delete player.secretUnlocks.uselessNewsClicks;\r\n delete player.secretUnlocks.paperclips;\r\n delete player.secretUnlocks.newsQueuePosition;\r\n delete player.secretUnlocks.eiffelTowerChapter;\r\n },\r\n migrations.refactorDoubleIPRebuyable,\r\n player => {\r\n if (player.requirementChecks.reality.slowestBH === 0) player.requirementChecks.reality.slowestBH = 1;\r\n },\r\n player => {\r\n // #1764 fix - EM200 bug from eternity autobuyer appearing to be zero but not actually being zero\r\n if (player.auto.eternity.amount.lt(0.01)) player.auto.eternity.amount = new Decimal(0);\r\n },\r\n player => {\r\n player.options.hiddenSubtabBits = Array.repeat(0, 11);\r\n player.options.lastOpenSubtab = Array.repeat(0, 11);\r\n },\r\n player => {\r\n const highestRefinementData = [\r\n { name: \"power\", id: ALCHEMY_RESOURCE.POWER },\r\n { name: \"infinity\", id: ALCHEMY_RESOURCE.INFINITY },\r\n { name: \"time\", id: ALCHEMY_RESOURCE.TIME },\r\n { name: \"replication\", id: ALCHEMY_RESOURCE.REPLICATION },\r\n { name: \"dilation\", id: ALCHEMY_RESOURCE.DILATION },\r\n { name: \"effarig\", id: ALCHEMY_RESOURCE.EFFARIG }\r\n ];\r\n for (const resource of highestRefinementData) {\r\n player.celestials.ra.highestRefinementValue[resource.name] = player.celestials.ra.alchemy[resource.id].amount;\r\n }\r\n },\r\n migrations.deletePostChallUnlocked,\r\n player => {\r\n // Delete PEC4 (id 63)\r\n if (player.reality.perks.has(63)) {\r\n player.reality.perks.delete(63);\r\n player.reality.perkPoints++;\r\n }\r\n // Delete TTMA4 (id 107)\r\n if (player.reality.perks.has(107)) {\r\n player.reality.perks.delete(107);\r\n player.reality.perkPoints++;\r\n }\r\n delete player.auto.timeTheorems.lastTick;\r\n },\r\n player => {\r\n // We can't reliably check if the player has or hasn't unlocked the automator via automator points without\r\n // essentially copy-pasting all the automator point code here (in the interest of avoiding use of globals).\r\n // So, in the range of progress where it's unclear, we stop it entirely in case it hasn't actually unlocked yet.\r\n if (player.realities > 5 && player.realities < 50) {\r\n player.reality.automator.state.mode = 1;\r\n player.reality.automator.state.stack = [];\r\n player.reality.automator.state.repeat = false;\r\n player.reality.automator.state.forceRestart = false;\r\n }\r\n },\r\n player => {\r\n for (const resource of player.celestials.ra.alchemy) {\r\n // We shouldn't access global variables in migrations so instead of Ra.alchemyResourceCap we use 25000.\r\n resource.amount = Math.clampMax(resource.amount, 25000);\r\n }\r\n },\r\n player => {\r\n const triadRegex = new RegExp(`T(\\\\d)`, \"gu\");\r\n player.timestudy.presets.forEach(p => p.studies = p.studies.replaceAll(triadRegex, \"30$1\"));\r\n // This may also potentially change variable or preset names in scripts, breaking them, but the likelihood of\r\n // this being a widespread issue is low enough that this is probably a better option than a really obtuse regex\r\n for (const script of Object.values(player.reality.automator.scripts)) {\r\n script.content = script.content.replaceAll(triadRegex, \"30$1\");\r\n }\r\n\r\n if (player.celestials.v.triadStudies !== undefined) {\r\n player.timestudy.studies = player.timestudy.studies.concat(\r\n player.celestials.v.triadStudies.map(id => id + 300));\r\n delete player.celestials.v.triadStudies;\r\n }\r\n },\r\n player => {\r\n delete player.options.confirmations.harshAutoClean;\r\n },\r\n player => {\r\n player.celestials.laitela.singularitySorting = {\r\n // Added more support in singularity milestone list, uses enum SINGULARITY_MILESTONE_RESOURCE in constants.js\r\n displayResource: player.options.showCondenseToMilestone ? 1 : 0,\r\n sortResource: 0,\r\n showCompleted: 0,\r\n sortOrder: 0,\r\n };\r\n delete player.options.showCondenseToMilestone;\r\n },\r\n () => {\r\n // This is just an empty patch because some orders got really messed up. Sorry -Scar\r\n },\r\n player => {\r\n player.reality.glyphs.sets = player.reality.glyphs.sets.map(glyphs => ({ glyphs, name: \"\" }));\r\n },\r\n player => {\r\n // Remove any accidental recursion that may have been introduced by the above patch\r\n while (!Array.isArray(player.reality.glyphs.sets[0].glyphs)) {\r\n player.reality.glyphs.sets = player.reality.glyphs.sets.map(glyphs => (glyphs.glyphs));\r\n }\r\n },\r\n player => {\r\n // For saves before cel7 existed, it will first add this prop (as a number) and then run this migration code. For\r\n // saves which are already in cel7, this prop will already exist as a Decimal. This workaround handles both cases\r\n player.celestials.pelle.rifts.chaos.fill = new Decimal(player.celestials.pelle.rifts.chaos.fill).toNumber();\r\n\r\n delete player.celestials.pelle.compact;\r\n player.celestials.pelle.collapsed = {\r\n upgrades: false,\r\n rifts: false,\r\n galaxies: false\r\n };\r\n player.celestials.pelle.galaxyGenerator.unlocked = player.celestials.pelle.galaxyGenerator.generatedGalaxies > 0;\r\n },\r\n player => {\r\n if (player.celestials.pelle.doomed) player.achievementBits[17] |= 1;\r\n if (player.celestials.pelle.upgrades.has(4)) player.achievementBits[17] |= 2;\r\n if (player.celestials.pelle.doomed && player.challenge.infinity.completedBits === 510) {\r\n player.achievementBits[17] |= (1 << 2);\r\n }\r\n if (player.timestudy.studies.compact().includes(181)) player.achievementBits[17] |= (1 << 5);\r\n },\r\n player => {\r\n player.achievementBits[16] |= (player.achievementBits[16] & (1 << 4)) << 3;\r\n player.achievementBits[16] &= ~(1 << 4);\r\n player.achievementBits[16] |= (player.achievementBits[16] & (1 << 2)) << 2;\r\n player.achievementBits[16] &= ~(1 << 2);\r\n },\r\n player => {\r\n player.achievementBits[17] &= ~(1 << 5);\r\n if (player.timestudy.studies.compact().includes(181) && player.celestials.pelle.doomed) {\r\n player.achievementBits[17] |= (1 << 5);\r\n }\r\n },\r\n player => {\r\n if (player.celestials.pelle.doomed && (player.challenge.infinity.completedBits & (1 << 5)) !== 0) {\r\n player.achievementBits[17] |= (1 << 2);\r\n } else {\r\n player.achievementBits[17] &= ~(1 << 2);\r\n }\r\n },\r\n player => {\r\n player.celestials.pelle.collapsed = player.celestials.collapsed;\r\n player.celestials.pelle.showBought = player.celestials.showBought;\r\n delete player.celestials.collapsed;\r\n delete player.celestials.showBought;\r\n },\r\n migrations.infMultNameConversion,\r\n player => {\r\n if (player.celestials.pelle.collapsed === undefined) {\r\n player.celestials.pelle.collapsed = {\r\n upgrades: false,\r\n rifts: false,\r\n galaxies: false\r\n };\r\n }\r\n },\r\n player => {\r\n const from = player.celestials.laitela;\r\n if (from.automation) {\r\n player.auto.darkMatterDims.isActive = from.automation.dimensions;\r\n player.auto.ascension.isActive = from.automation.ascension;\r\n player.auto.annihilation.isActive = from.automation.singularity;\r\n player.auto.singularity.isActive = from.automation.annihilation;\r\n\r\n delete player.celestials.laitela.automation.dimensions;\r\n delete player.celestials.laitela.automation.ascension;\r\n delete player.celestials.laitela.automation.singularity;\r\n delete player.celestials.laitela.automation.annihilation;\r\n }\r\n\r\n player.auto.darkMatterDims.lastTick = from.darkAutobuyerTimer;\r\n player.auto.ascension.lastTick = from.darkAutobuyerTimer;\r\n player.auto.annihilation.multiplier = from.autoAnnihilationSetting;\r\n\r\n delete player.celestials.laitela.darkAutobuyerTimer;\r\n delete player.celestials.laitela.darkAutobuyerTimer;\r\n delete player.celestials.laitela.autoAnnihilationSetting;\r\n },\r\n migrations.etercreqConversion,\r\n player => {\r\n delete player.options.confirmations.reality;\r\n },\r\n player => {\r\n const hasDimboost = player.celestials.pelle.upgrades.has(19);\r\n const hasDilUpg = player.celestials.pelle.upgrades.has(18);\r\n player.celestials.pelle.upgrades.delete(18);\r\n player.celestials.pelle.upgrades.delete(19);\r\n if (hasDimboost) player.celestials.pelle.upgrades.add(18);\r\n if (hasDilUpg) player.celestials.pelle.upgrades.add(19);\r\n },\r\n player => {\r\n delete player.auto.bulkOn;\r\n },\r\n player => {\r\n player.requirementChecks.permanent.emojiGalaxies = player.requirementChecks.permanent.cancerGalaxies;\r\n delete player.requirementChecks.permanent.cancerGalaxies;\r\n },\r\n player => {\r\n delete player.celestials.effarig.unlocksBits;\r\n delete player.celestials.ra.unlocksBits;\r\n },\r\n player => {\r\n for (const script of Object.values(player.reality.automator.scripts)) {\r\n script.id = parseInt(script.id, 10);\r\n }\r\n },\r\n player => {\r\n player.secretUnlocks.themes.delete(\"S4Cancer\");\r\n player.secretUnlocks.themes.add(\"S4Design\");\r\n },\r\n player => {\r\n player.reality.automator.state.editorScript = Number(player.reality.automator.state.editorScript);\r\n // I'm not sure if there's any error with the type of topLevelScript, but better safe than sorry\r\n player.reality.automator.state.topLevelScript = Number(player.reality.automator.state.topLevelScript);\r\n },\r\n player => {\r\n // Move dil upg no reset and tachyon particles no reset\r\n if (player.celestials.pelle.upgrades.delete(20)) player.celestials.pelle.upgrades.add(21);\r\n if (player.celestials.pelle.upgrades.delete(19)) player.celestials.pelle.upgrades.add(20);\r\n\r\n // Dimboost upgrade id was moved from 18 to 7 -- Make the corresponding change\r\n // Galaxy upgrade was inserted at 11. 7-10 should only be moved forward 1 place\r\n // and 10-17 2 places forward.\r\n const hasDimboostsResetNothing = player.celestials.pelle.upgrades.delete(18);\r\n for (let i = 17; i >= 10; i--) {\r\n if (player.celestials.pelle.upgrades.delete(i)) player.celestials.pelle.upgrades.add(i + 2);\r\n }\r\n for (let i = 9; i >= 7; i--) {\r\n if (player.celestials.pelle.upgrades.delete(i)) player.celestials.pelle.upgrades.add(i + 1);\r\n }\r\n if (hasDimboostsResetNothing) player.celestials.pelle.upgrades.add(7);\r\n },\r\n player => {\r\n const cel = player.celestials;\r\n const convToBit = x => x.toBitmask() >> 1;\r\n if (cel.teresa.quotes) player.celestials.teresa.quoteBits = convToBit(cel.teresa.quotes);\r\n if (cel.effarig.quotes) player.celestials.effarig.quoteBits = convToBit(cel.effarig.quotes);\r\n if (cel.enslaved.quotes) player.celestials.enslaved.quoteBits = convToBit(cel.enslaved.quotes);\r\n if (cel.v.quotes) player.celestials.v.quoteBits = convToBit(cel.v.quotes);\r\n if (cel.ra.quotes) player.celestials.ra.quoteBits = convToBit(cel.ra.quotes);\r\n if (cel.laitela.quotes) player.celestials.laitela.quoteBits = convToBit(cel.laitela.quotes);\r\n if (cel.pelle.quotes) player.celestials.pelle.quoteBits = convToBit(cel.pelle.quotes);\r\n\r\n delete player.celestials.teresa.quotes;\r\n delete player.celestials.effarig.quotes;\r\n delete player.celestials.enslaved.quotes;\r\n delete player.celestials.v.quotes;\r\n delete player.celestials.ra.quotes;\r\n delete player.celestials.laitela.quotes;\r\n delete player.celestials.pelle.quotes;\r\n },\r\n player => {\r\n if (player.celestials.pelle.rifts.famine) {\r\n player.celestials.pelle.rifts.vacuum = {\r\n ...player.celestials.pelle.rifts.famine,\r\n fill: new Decimal(player.celestials.pelle.rifts.famine.fill)\r\n };\r\n delete player.celestials.pelle.rifts.famine;\r\n }\r\n\r\n if (player.celestials.pelle.rifts.pestilence) {\r\n player.celestials.pelle.rifts.decay = {\r\n ...player.celestials.pelle.rifts.pestilence,\r\n fill: new Decimal(player.celestials.pelle.rifts.pestilence.fill)\r\n };\r\n delete player.celestials.pelle.rifts.pestilence;\r\n }\r\n\r\n if (player.celestials.pelle.rifts.war) {\r\n player.celestials.pelle.rifts.recursion = {\r\n ...player.celestials.pelle.rifts.war,\r\n fill: new Decimal(player.celestials.pelle.rifts.war.fill)\r\n };\r\n delete player.celestials.pelle.rifts.war;\r\n }\r\n\r\n if (player.celestials.pelle.rifts.death) {\r\n player.celestials.pelle.rifts.paradox = {\r\n ...player.celestials.pelle.rifts.death,\r\n fill: new Decimal(player.celestials.pelle.rifts.death.fill)\r\n };\r\n delete player.celestials.pelle.rifts.death;\r\n }\r\n },\r\n player => {\r\n delete player.newGame;\r\n },\r\n migrations.moveTS33,\r\n player => {\r\n const toMove = [\"antimatterDims\", \"infinityDims\", \"timeDims\", \"replicantiUpgrades\", \"dilationUpgrades\",\r\n \"blackHolePower\", \"realityUpgrades\", \"imaginaryUpgrades\"];\r\n for (const x of toMove) {\r\n if (player.auto[x].all !== undefined) {\r\n // Already up to date\r\n continue;\r\n }\r\n const all = player.auto[x];\r\n delete player.auto[x];\r\n player.auto[x] = { all, isActive: true };\r\n }\r\n },\r\n player => {\r\n player.celestials.ra.petWithRemembrance = player.celestials.ra.petWithRecollection;\r\n delete player.celestials.ra.petWithRecollection;\r\n },\r\n player => {\r\n for (const key of Object.keys(player.reality.automator.scripts)) {\r\n const lines = player.reality.automator.scripts[key].content.split(\"\\n\");\r\n for (let num = 0; num < lines.length; num++) {\r\n let rawLine = lines[num];\r\n // TT command removed\r\n rawLine = rawLine.replace(/^\\s*tt.*$/ui, \"\");\r\n // Changes to \"studies\" commands\r\n // For some reason `studies nowait load` would get caught by the following system without explicitly defining\r\n // that \"nowait load\" should not be captured. Probably because it treats nowait as nonexisting and then sees\r\n // that nowait is neither respec nor load. I tried consuming the nowait if it existed but that messed up the\r\n // replace function so this is the best I've got for now\r\n rawLine = rawLine.replace(/studies( nowait)? (?!respec|load|nowait respec|nowait load)(\\S.+)$/ui,\r\n \"studies$1 purchase $2\");\r\n rawLine = rawLine.replace(/studies( nowait)? load preset ([1-6])/ui, \"studies$1 load id $2\");\r\n rawLine = rawLine.replace(/studies( nowait)? load preset (\\S+)/ui, \"studies$1 load name $2\");\r\n // Autobuyer mode change (this is a much older change which wasn't migrated at the time)\r\n rawLine = rawLine.replace(/x current/ui, \"x highest\");\r\n // Variable definitions\r\n const defineMatch = rawLine.match(/define (\\S*)\\s*=\\s*(\\S.*)$/ui);\r\n if (defineMatch) {\r\n player.reality.automator.constants[defineMatch[1]] = defineMatch[2];\r\n rawLine = \"\";\r\n }\r\n lines[num] = rawLine;\r\n }\r\n player.reality.automator.scripts[key].content = lines.join(\"\\n\");\r\n }\r\n\r\n // Migrate IDs for all saves made during wave 3 testing, to prevent odd overwriting behavior on importing\r\n const newScripts = {};\r\n const oldScriptKeys = Object.keys(player.reality.automator.scripts);\r\n for (let newID = 1; newID <= oldScriptKeys.length; newID++) {\r\n newScripts[newID] = player.reality.automator.scripts[oldScriptKeys[newID - 1]];\r\n newScripts[newID].id = newID;\r\n }\r\n player.reality.automator.scripts = newScripts;\r\n },\r\n player => {\r\n delete player.celestials.pelle.armageddonDuration;\r\n delete player.celestials.pelle.maxAMThisArmageddon;\r\n delete player.options.sidebarMinimized;\r\n delete player.options.chart;\r\n delete player.devMode;\r\n },\r\n player => {\r\n const swap1 = player.achievementBits[10] & 4;\r\n const swap2 = player.achievementBits[11] & 8;\r\n if (swap1) {\r\n player.achievementBits[11] |= 8;\r\n } else {\r\n player.achievementBits[11] &= ~8;\r\n }\r\n if (swap2) {\r\n player.achievementBits[10] |= 4;\r\n } else {\r\n player.achievementBits[10] &= ~4;\r\n }\r\n },\r\n player => {\r\n if (player.options.UIType == 'Modern') {\r\n player.options.themeModern = player.options.theme ?? player.options.themeModern;\r\n } else {\r\n player.options.themeClassic = player.options.theme ?? player.options.themeClassic;\r\n }\r\n delete player.options.theme;\r\n\r\n if (BlackHole(1).isUnlocked) player.records.timePlayedAtBHUnlock = player.records.totalTimePlayed;\r\n },\r\n player => {\r\n player.IAP.enabled = !player.IAP.disabled;\r\n const toDelete = [\"totalSTD\", \"spentSTD\", \"exportSTD\", \"IPPurchases\", \"EPPurchases\", \"RMPurchases\",\r\n \"dimPurchases\", \"allDimPurchases\", \"replicantiPurchases\", \"dilatedTimePurchases\", \"disabled\"];\r\n for (const key of toDelete) delete player.IAP[key];\r\n },\r\n player => {\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n for (const glyph of allGlyphs) {\r\n if (glyph.symbol === \"key266b\") {\r\n glyph.symbol = undefined;\r\n glyph.color = undefined;\r\n glyph.cosmetic = \"music\";\r\n }\r\n if (glyph.type === \"companion\") glyph.color = undefined;\r\n }\r\n },\r\n player => {\r\n player.options.lightGlyphs = !player.options.forceDarkGlyphs;\r\n delete player.options.forceDarkGlyphs;\r\n },\r\n player =>{\r\n player.reality.warped = false;\r\n if(player.records.realTimeDoomed > 1e308) player.records.realTimeDoomed = 1e308;\r\n if(player.records.realTimePlayed > 1e308) player.records.realTimePlayed = 1e308;\r\n if(player.records.totalTimePlayed > 1e308) player.records.totalTimePlayed = 1e308;\r\n if(player.records.thisInfinity.realTime > 1e308) player.records.thisInfinity.realTime = 1e308;\r\n if(player.records.thisInfinity.time > 1e308) player.records.thisInfinity.time = 1e308;\r\n if(player.records.thisEternity.realTime > 1e308) player.records.thisEternity.realTime = 1e308;\r\n if(player.records.thisEternity.time > 1e308) player.records.thisEternity.time = 1e308;\r\n if(player.records.thisReality.realTime > 1e308) player.records.thisReality.realTime = 1e308;\r\n if(player.records.thisReality.time > 1e308) player.records.thisReality.time = 1e308;\r\n if(player.records.thisMend.realTime > 1e308) player.records.thisMend.realTime = 1e308;\r\n if(player.records.thisMend.time > 1e308) player.records.thisMend.time = 1e308;\r\n }, \r\n player =>{\r\n //this is the 8-16-23 Redemption Release\r\n if(!PlayerProgress.mendingUnlocked){\r\n player.auto.dilationUpgrades.all[11] = { isActive: false, lastTick: 0};\r\n player.auto.dilationUpgrades.all[12] = { isActive: false, lastTick: 0};\r\n player.auto.dilationUpgrades.all[13] = { isActive: false, lastTick: 0};\r\n player.requirementChecks.mending = {\r\n isEnd: false\r\n };\r\n player.records.thisMend = {\r\n time: Number.MAX_VALUE,\r\n realTime: Number.MAX_VALUE,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n maxEP: DC.D0,\r\n maxRM: DC.D0,\r\n maxiM: 0,\r\n maxRem: 0,\r\n };\r\n player.records.bestMend = {\r\n time: Number.MAX_VALUE,\r\n realTime: Number.MAX_VALUE,\r\n };\r\n player.speedrun.isUnlocked = true;\r\n player.mends = DC.D0,\r\n player.mending = {\r\n mendingPoints: DC.D0,\r\n upgradeBits: 0,\r\n reqLock: {\r\n mending: 0,\r\n },\r\n rebuyables: {\r\n 1: 0,\r\n 6: 0,\r\n 11: 0,\r\n 16: 0,\r\n },\r\n };\r\n player.celestials.destroyer = {\r\n quoteBits: 0,\r\n };\r\n player.celestials.kohler = {\r\n quoteBits: 0,\r\n };\r\n player.options.confirmations.mending = true;\r\n player.options.awayProgress = { \r\n mends: true,\r\n mendingPoints: true\r\n };\r\n player.mendingPoints = DC.D0;\r\n player.mends = DC.D0;\r\n player.mendingUpgrades = new Set();\r\n player.mvrmultUpgrades = 0;\r\n player.options.hiddenTabBits = 0;\r\n player.mendingPoints = player.mending.mendingPoints;\r\n if (MendingMilestone.three.isReached){\r\n player.celestials.ra.unlockBits += 2097152;\r\n }\r\n player.auto.dilationUpgrades.all = Array.range(0, 3).concat(Array.range(11, 14)).map(() => ({\r\n isActive: false,\r\n lastTick: 0,\r\n }));\r\n player.mends = new Decimal(player.mends);\r\n player.mendingPoints = new Decimal(player.mendingPoints);\r\n if (player.mends.gte(8)) {\r\n player.celestials.teresa.perkShop = [20, 20, 14, 6, 0, 0]\r\n }\r\n player.auto.musicglyph = {\r\n isUnlocked: false,\r\n isActive: false,\r\n }\r\n player.options.showHintText.mendingUpgrades = true;\r\n player.auto.mending = {\r\n mode: 0,\r\n amount: DC.D1,\r\n interval: 100,\r\n increaseWithMult: true,\r\n time: 1,\r\n xHighest: DC.D1,\r\n isActive: false,\r\n lastTick: 0\r\n };\r\n player.corruptedFragments = DC.D0;\r\n player.mending.warpRebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n };\r\n player.mending.corruptionRebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n };\r\n player.mending.warpUpgradeBits = 0;\r\n player.mending.corruptionUpgradeBits = 0;\r\n player.mending.warpUpgReqs = 0;\r\n player.mending.corruptionUpgReqs = 0;\r\n player.mending.reqLock = {\r\n mending: 0,\r\n warp: 0,\r\n corruption: 0,\r\n };\r\n player.records.totalTimePlayed = new Decimal(player.records.totalTimePlayed);\r\n player.records.thisInfinity.time = new Decimal(player.records.thisInfinity.time);\r\n player.records.thisEternity.time = new Decimal(player.records.thisEternity.time);\r\n player.records.thisReality.time = new Decimal(player.records.thisReality.time);\r\n player.records.thisMend.time = new Decimal(player.records.thisMend.time);\r\n }\r\n }\r\n ],\r\n\r\n patch(player) {\r\n player.options.testVersion = player.options.testVersion || 0;\r\n for (let version = player.options.testVersion; version < this.patches.length; version++) {\r\n const patch = this.patches[version];\r\n patch(player);\r\n }\r\n this.setLatestTestVersion(player);\r\n },\r\n\r\n setLatestTestVersion(player) {\r\n player.options.testVersion = this.patches.length;\r\n }\r\n};\r\n","import * as ADNotations from \"@antimatter-dimensions/notations\";\r\n\r\nimport { DEV } from \"@/env\";\r\nimport { devMigrations } from \"./dev-migrations\";\r\nimport { migrations } from \"./migrations\";\r\n\r\nimport { deepmergeAll } from \"@/utility/deepmerge\";\r\n\r\nexport const BACKUP_SLOT_TYPE = {\r\n ONLINE: 0,\r\n OFFLINE: 1,\r\n RESERVE: 2,\r\n};\r\n\r\n// Note: interval is in seconds, and only the first RESERVE slot is ever used. Having intervalStr as a redundant\r\n// prop is necessary because using our TimeSpan formatting functions produces undesirable strings like \"1.00 minutes\"\r\nexport const AutoBackupSlots = [\r\n {\r\n id: 1,\r\n type: BACKUP_SLOT_TYPE.ONLINE,\r\n intervalStr: () => `${formatInt(1)} minute`,\r\n interval: 60,\r\n },\r\n {\r\n id: 2,\r\n type: BACKUP_SLOT_TYPE.ONLINE,\r\n intervalStr: () => `${formatInt(5)} minutes`,\r\n interval: 5 * 60,\r\n },\r\n {\r\n id: 3,\r\n type: BACKUP_SLOT_TYPE.ONLINE,\r\n intervalStr: () => `${formatInt(20)} minutes`,\r\n interval: 20 * 60,\r\n },\r\n {\r\n id: 4,\r\n type: BACKUP_SLOT_TYPE.ONLINE,\r\n intervalStr: () => `${formatInt(1)} hour`,\r\n interval: 3600,\r\n },\r\n {\r\n id: 5,\r\n type: BACKUP_SLOT_TYPE.OFFLINE,\r\n intervalStr: () => `${formatInt(10)} minutes`,\r\n interval: 10 * 60,\r\n },\r\n {\r\n id: 6,\r\n type: BACKUP_SLOT_TYPE.OFFLINE,\r\n intervalStr: () => `${formatInt(1)} hour`,\r\n interval: 3600,\r\n },\r\n {\r\n id: 7,\r\n type: BACKUP_SLOT_TYPE.OFFLINE,\r\n intervalStr: () => `${formatInt(5)} hours`,\r\n interval: 5 * 3600,\r\n },\r\n {\r\n id: 8,\r\n type: BACKUP_SLOT_TYPE.RESERVE,\r\n },\r\n];\r\n\r\nexport const GameStorage = {\r\n currentSlot: 0,\r\n saves: {\r\n 0: undefined,\r\n 1: undefined,\r\n 2: undefined\r\n },\r\n saved: 0,\r\n lastSaveTime: Date.now(),\r\n lastCloudSave: Date.now(),\r\n offlineEnabled: undefined,\r\n offlineTicks: undefined,\r\n lastUpdateOnLoad: 0,\r\n lastBackupTimes: [],\r\n oldBackupTimer: 0,\r\n ignoreBackupTimer: true,\r\n\r\n // Limit offline tick count using two conditions:\r\n // - Ticks should never be shorter than 33ms (this would allow offline to exploit tick microstructure)\r\n // - Count should be limited to 1e6 (the options UI doesn't allow for this to be set above this value)\r\n maxOfflineTicks(simulatedMs, defaultTicks = this.offlineTicks) {\r\n const tickLimit = Math.clampMax(Math.floor(simulatedMs / 33), 1e6);\r\n return Math.clampMax(defaultTicks, tickLimit);\r\n },\r\n\r\n get localStorageKey() {\r\n return DEV ? \"dimensionTestSave\" : \"dimensionSave\";\r\n },\r\n\r\n backupDataKey(saveSlot, backupSlot) {\r\n return DEV ? `backupTestSave-${saveSlot}-${backupSlot}` : `backupSave-${saveSlot}-${backupSlot}`;\r\n },\r\n\r\n backupTimeKey(saveSlot) {\r\n return DEV ? `backupTestTimes-${saveSlot}` : `backupTimes-${saveSlot}`;\r\n },\r\n\r\n load() {\r\n const save = localStorage.getItem(this.localStorageKey);\r\n const root = GameSaveSerializer.deserialize(save);\r\n\r\n this.loadRoot(root);\r\n Achievements.updateSteamStatus();\r\n },\r\n\r\n loadRoot(root) {\r\n if (root === undefined) {\r\n this.currentSlot = 0;\r\n this.loadPlayerObject(Player.defaultStart);\r\n return;\r\n }\r\n\r\n if (root.saves === undefined) {\r\n // Migrate old format\r\n this.saves = {\r\n 0: root,\r\n 1: undefined,\r\n 2: undefined\r\n };\r\n this.currentSlot = 0;\r\n this.loadPlayerObject(root);\r\n this.loadBackupTimes();\r\n this.backupOfflineSlots();\r\n this.save(true);\r\n return;\r\n }\r\n\r\n this.saves = root.saves;\r\n this.currentSlot = root.current;\r\n this.loadPlayerObject(this.saves[this.currentSlot]);\r\n this.loadBackupTimes();\r\n this.backupOfflineSlots();\r\n },\r\n\r\n loadSlot(slot) {\r\n this.currentSlot = slot;\r\n // Save current slot to make sure no changes are lost\r\n this.save(true);\r\n this.loadPlayerObject(this.saves[slot] ?? Player.defaultStart);\r\n this.loadBackupTimes();\r\n this.backupOfflineSlots();\r\n Tabs.all.find(t => t.id === player.options.lastOpenTab).show(false);\r\n Modal.hideAll();\r\n Cloud.resetTempState();\r\n GameUI.notify.info(\"Game loaded\");\r\n Achievements.updateSteamStatus();\r\n },\r\n\r\n import(saveData) {\r\n if (tryImportSecret(saveData) || Theme.tryUnlock(saveData)) {\r\n return;\r\n }\r\n const newPlayer = GameSaveSerializer.deserialize(saveData);\r\n if (this.checkPlayerObject(newPlayer) !== \"\") {\r\n Modal.message.show(\"Could not load the save (format unrecognized or invalid).\");\r\n return;\r\n }\r\n if (false && (newPlayer.version - 51 == 0.007)) {\r\n Modal.message.show(\"Development saves cannot be imported into the public game.\");\r\n return;\r\n }\r\n this.oldBackupTimer = player.backupTimer;\r\n Modal.hideAll();\r\n Quote.clearAll();\r\n AutomatorBackend.clearEditor();\r\n this.loadPlayerObject(newPlayer);\r\n GlyphAppearanceHandler.clearInvalidCosmetics();\r\n if (player.speedrun?.isActive) Speedrun.setSegmented(true);\r\n this.save(true);\r\n Cloud.resetTempState();\r\n this.resetBackupTimer();\r\n\r\n // This is to fix a very specific exploit: When the game is ending, some tabs get hidden\r\n // The options tab is the first one of those, which makes the player redirect to the Pelle tab\r\n // You can doom your reality even if you haven't unlocked infinity yet if you import while the Pelle tab\r\n // is showing\r\n Tab.options.subtabs[0].show();\r\n GameUI.notify.info(\"Game imported\");\r\n Achievements.updateSteamStatus();\r\n },\r\n\r\n importAsFile() {\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n const reader = new FileReader();\r\n const text = reader.readAsText(file);\r\n this.import(text);\r\n },\r\n\r\n overwriteSlot(slot, saveData) {\r\n this.saves[slot] = saveData;\r\n if (slot === this.currentSlot) {\r\n this.loadPlayerObject(saveData);\r\n }\r\n\r\n this.save(true);\r\n },\r\n\r\n // Some minimal save verification; if the save is valid then this returns an empty string, otherwise it returns a\r\n // a string roughly stating what's wrong with the save. In order for importing to work properly, this must return\r\n // an empty string.\r\n checkPlayerObject(save) {\r\n // Sometimes save is the output of GameSaveSerializer.deserialize, and if that function fails then it will result\r\n // in the input parameter here being undefined\r\n if (save === undefined || save === null) return \"Save decoding failed (invalid format)\";\r\n // Right now all we do is check for the existence of an antimatter prop, but if we wanted to do further save\r\n // verification then here's where we'd do it\r\n if (save.money === undefined && save.antimatter === undefined) return \"Save does not have antimatter property\";\r\n\r\n // Recursively check for any NaN props and add any we find to an array\r\n const invalidProps = [];\r\n function checkNaN(obj, path) {\r\n let hasNaN = false;\r\n for (const key in obj) {\r\n const prop = obj[key];\r\n let thisNaN;\r\n switch (typeof prop) {\r\n case \"object\":\r\n thisNaN = checkNaN(prop, `${path}.${key}`);\r\n hasNaN = hasNaN || thisNaN;\r\n break;\r\n case \"number\":\r\n thisNaN = Number.isNaN(prop);\r\n hasNaN = hasNaN || thisNaN;\r\n if (thisNaN) invalidProps.push(`${path}.${key}`);\r\n break;\r\n case \"string\":\r\n // If we're attempting to import, all NaN entries will still be strings\r\n thisNaN = prop === \"NaN\";\r\n hasNaN = hasNaN || thisNaN;\r\n if (thisNaN) invalidProps.push(`${path}.${key}`);\r\n break;\r\n }\r\n }\r\n return hasNaN;\r\n }\r\n checkNaN(save, \"player\");\r\n\r\n if (invalidProps.length === 0) return \"\";\r\n return `${quantify(\"NaN player property\", invalidProps.length)} found:\r\n ${invalidProps.join(\", \")}`;\r\n },\r\n\r\n // A few things in the current game state can prevent saving, which we want to do for all forms of saving\r\n canSave(ignoreSimulation = false) {\r\n const isSelectingGlyph = GlyphSelection.active;\r\n const isSimulating = ui.$viewModel.modal.progressBar !== undefined && !ignoreSimulation;\r\n const isEnd = (GameEnd.endState >= END_STATE_MARKERS.SAVE_DISABLED && !GameEnd.removeAdditionalEnd) ||\r\n GameEnd.endState >= END_STATE_MARKERS.INTERACTIVITY_DISABLED;\r\n return !isEnd && !(isSelectingGlyph || isSimulating);\r\n },\r\n\r\n save(silent = true, manual = false) {\r\n if (!this.canSave()) return;\r\n this.lastSaveTime = Date.now();\r\n GameIntervals.save.restart();\r\n if (manual && ++this.saved > 99) SecretAchievement(12).unlock();\r\n const root = {\r\n current: this.currentSlot,\r\n saves: this.saves\r\n };\r\n localStorage.setItem(this.localStorageKey, GameSaveSerializer.serialize(root));\r\n if (!silent) GameUI.notify.info(\"Game saved\");\r\n },\r\n\r\n // Saves a backup, updates save timers (this is called before nextBackup is updated), and then saves the timers too.\r\n // When checking offline backups, this call typically resolves during offline progress simulation, so in this case\r\n // we want to ignore that (which saves the game state pre-simulation). This is because it's messier and less useful\r\n // to the player if we instead defer the call until after simulation\r\n saveToBackup(backupSlot, backupTimer) {\r\n if (!this.canSave(true)) return;\r\n localStorage.setItem(this.backupDataKey(this.currentSlot, backupSlot), GameSaveSerializer.serialize(player));\r\n this.lastBackupTimes[backupSlot] = {\r\n backupTimer,\r\n date: Date.now(),\r\n };\r\n localStorage.setItem(this.backupTimeKey(this.currentSlot), GameSaveSerializer.serialize(this.lastBackupTimes));\r\n },\r\n\r\n // Does not actually load, but returns an object which is meant to be passed on to loadPlayerObject()\r\n loadFromBackup(backupSlot) {\r\n const data = localStorage.getItem(this.backupDataKey(this.currentSlot, backupSlot));\r\n return GameSaveSerializer.deserialize(data);\r\n },\r\n\r\n // Check for the amount of time spent offline and perform an immediate backup for the longest applicable slot\r\n // which has had more than its timer elapse since the last time the game was open and saved\r\n backupOfflineSlots() {\r\n const currentTime = Date.now();\r\n const offlineTimeMs = currentTime - this.lastUpdateOnLoad;\r\n const offlineSlots = AutoBackupSlots\r\n .filter(slot => slot.type === BACKUP_SLOT_TYPE.OFFLINE)\r\n .sort((a, b) => b.interval - a.interval);\r\n for (const backupInfo of offlineSlots) {\r\n if (offlineTimeMs > 1000 * backupInfo.interval) {\r\n this.saveToBackup(backupInfo.id, player.backupTimer);\r\n break;\r\n }\r\n }\r\n },\r\n\r\n backupOnlineSlots(slotsToBackup) {\r\n const currentTime = player.backupTimer;\r\n for (const slot of slotsToBackup) this.saveToBackup(slot, currentTime);\r\n },\r\n\r\n // Loads in all the data from previous backup times in localStorage\r\n loadBackupTimes() {\r\n this.lastBackupTimes = GameSaveSerializer.deserialize(localStorage.getItem(this.backupTimeKey(this.currentSlot)));\r\n if (!this.lastBackupTimes) this.lastBackupTimes = {};\r\n for (const backupInfo of AutoBackupSlots) {\r\n const key = backupInfo.id;\r\n if (!this.lastBackupTimes[key]) {\r\n this.lastBackupTimes[key] = {\r\n backupTimer: 0,\r\n date: 0,\r\n };\r\n }\r\n }\r\n },\r\n\r\n // This is checked in the checkEverySecond game interval. Determining which slots to save has a 800ms grace time to\r\n // account for delays occurring from the saving operation itself; without this, the timer slips backwards by a second\r\n // every time it saves\r\n tryOnlineBackups() {\r\n const toBackup = [];\r\n for (const backupInfo of AutoBackupSlots.filter(slot => slot.type === BACKUP_SLOT_TYPE.ONLINE)) {\r\n const id = backupInfo.id;\r\n const timeSinceLast = player.backupTimer - (this.lastBackupTimes[id]?.backupTimer ?? 0);\r\n if (1000 * backupInfo.interval - timeSinceLast <= 800) toBackup.push(id);\r\n }\r\n this.backupOnlineSlots(toBackup);\r\n },\r\n\r\n // Set the next backup time, but make sure to skip forward an appropriate amount if a load or import happened,\r\n // since these may cause the backup timer to be significantly behind\r\n resetBackupTimer() {\r\n const latestBackupTime = Object.values(this.lastBackupTimes).map(t => t && t.backupTimer).max();\r\n player.backupTimer = Math.max(this.oldBackupTimer, player.backupTimer, latestBackupTime);\r\n },\r\n\r\n // Saves the current game state to the first reserve slot it finds\r\n saveToReserveSlot() {\r\n const targetSlot = AutoBackupSlots.find(slot => slot.type === BACKUP_SLOT_TYPE.RESERVE).id;\r\n this.saveToBackup(targetSlot, player.backupTimer);\r\n },\r\n\r\n export() {\r\n copyToClipboard(this.exportModifiedSave());\r\n GameUI.notify.info(\"Exported current savefile to your clipboard\");\r\n },\r\n\r\n get exportDateString() {\r\n const dateObj = new Date();\r\n const y = dateObj.getFullYear();\r\n const m = dateObj.getMonth() + 1;\r\n const d = dateObj.getDate();\r\n return `${y}-${m}-${d}`;\r\n },\r\n\r\n exportAsFile() {\r\n if (!this.canSave()) return;\r\n player.options.exportedFileCount++;\r\n this.save(true);\r\n const saveFileName = player.options.saveFileName ? ` - ${player.options.saveFileName},` : \"\";\r\n const save = this.exportModifiedSave();\r\n download(\r\n `AD Save, Slot ${GameStorage.currentSlot + 1}${saveFileName} #${player.options.exportedFileCount} \\\r\n(${this.exportDateString}).txt`, save);\r\n GameUI.notify.info(\"Successfully downloaded current save file to your computer\");\r\n },\r\n\r\n exportBackupsAsFile() {\r\n player.options.exportedFileCount++;\r\n const backupData = {};\r\n for (const id of AutoBackupSlots.map(slot => slot.id)) {\r\n const backup = this.loadFromBackup(id);\r\n if (backup) backupData[id] = backup;\r\n }\r\n backupData.time = GameSaveSerializer.deserialize(localStorage.getItem(this.backupTimeKey(this.currentSlot)));\r\n download(\r\n `AD Save Backups, Slot ${GameStorage.currentSlot + 1} #${player.options.exportedFileCount} \\\r\n(${this.exportDateString}).txt`, GameSaveSerializer.serialize(backupData));\r\n GameUI.notify.info(\"Successfully downloaded save file backups to your computer\");\r\n },\r\n\r\n importBackupsFromFile(importText) {\r\n const backupData = GameSaveSerializer.deserialize(importText);\r\n localStorage.setItem(this.backupTimeKey(this.currentSlot), GameSaveSerializer.serialize(backupData.time));\r\n for (const backupKey of Object.keys(backupData)) {\r\n if (backupKey === \"time\") continue;\r\n const id = Number(backupKey);\r\n const storageKey = this.backupDataKey(this.currentSlot, id);\r\n localStorage.setItem(storageKey, GameSaveSerializer.serialize(backupData[backupKey]));\r\n this.backupTimeData[id] = {\r\n backupTimer: backupData.time[id].backupTimer,\r\n date: backupData.time[id].date,\r\n };\r\n }\r\n this.resetBackupTimer();\r\n GameUI.notify.info(\"Successfully imported save file backups from file\");\r\n },\r\n\r\n // There are a couple props which may need to export with different values, so we handle that here\r\n exportModifiedSave() {\r\n // Speedrun segmented is exported as true\r\n const segmented = player.speedrun.isSegmented;\r\n Speedrun.setSegmented(true);\r\n\r\n // Serialize the altered data, then restore the old prop values afterwards and return\r\n const save = GameSaveSerializer.serialize(player);\r\n Speedrun.setSegmented(segmented);\r\n return save;\r\n },\r\n\r\n hardReset() {\r\n this.loadPlayerObject(Player.defaultStart);\r\n this.save(true);\r\n Tab.dimensions.antimatter.show();\r\n Cloud.resetTempState();\r\n },\r\n\r\n loadPlayerObject(playerObject) {\r\n this.saved = 0;\r\n\r\n const checkString = this.checkPlayerObject(playerObject);\r\n if (playerObject === Player.defaultStart || checkString !== \"\") {\r\n if (DEV && checkString !== \"\") {\r\n // eslint-disable-next-line no-console\r\n console.log(`Savefile was invalid and has been reset - ${checkString}`);\r\n }\r\n player = deepmergeAll([{}, Player.defaultStart]);\r\n player.records.gameCreatedTime = Date.now();\r\n player.lastUpdate = Date.now();\r\n if (DEV) {\r\n devMigrations.setLatestTestVersion(player);\r\n }\r\n } else {\r\n // We want to support importing from versions much older than the newest pre-reality version, but we also want\r\n // to support in-dev versions so we don't lose access to the large bank of in-dev saves we've accumulated. As\r\n // a result, we need to be careful with what order we apply the dev/live migrations and the deepmerge with the\r\n // default player object to fill in missing props.\r\n\r\n // For pre-Reality versions, we additionally need to fire off an event to ensure certain achievements and\r\n // notifications trigger properly. Missing props are filled in at this step via deepmerge\r\n const isPreviousVersionSave = playerObject.version < migrations.firstRealityMigration;\r\n player = migrations.patchPreReality(playerObject);\r\n if (isPreviousVersionSave) {\r\n if (DEV) devMigrations.setLatestTestVersion(player);\r\n EventHub.dispatch(GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION);\r\n }\r\n\r\n // All dev migrations are applied in-place, mutating the player object. Note that since we only want to apply dev\r\n // migrations in a dev environment, this means that test saves may fail to migrate on the live version\r\n if (DEV && player.options.testVersion !== undefined) {\r\n devMigrations.patch(player);\r\n }\r\n\r\n // Post-reality migrations are separated from pre-reality because they need to happen after any dev migrations,\r\n // which themselves must happen after the deepmerge\r\n player = migrations.patchPostReality(player);\r\n }\r\n\r\n this.saves[this.currentSlot] = player;\r\n this.lastUpdateOnLoad = player.lastUpdate;\r\n\r\n if (DEV) {\r\n guardFromNaNValues(player);\r\n }\r\n\r\n ui.view.news = player.options.news.enabled;\r\n ui.view.UIType = player.options.UIType;\r\n ui.view.tutorialState = player.tutorialState;\r\n ui.view.tutorialActive = player.tutorialActive;\r\n\r\n ECTimeStudyState.invalidateCachedRequirements();\r\n recalculateAllGlyphs();\r\n checkPerkValidity();\r\n V.updateTotalRunUnlocks();\r\n Enslaved.boostReality = false;\r\n GameEnd.additionalEnd = 0;\r\n Theme.set(Theme.currentName());\r\n Glyphs.unseen = [];\r\n Glyphs.unequipped = [];\r\n Notations.find(player.options.notation).setAsCurrent(true);\r\n ADNotations.Settings.exponentCommas.show = player.options.commas;\r\n\r\n EventHub.dispatch(GAME_EVENT.GAME_LOAD);\r\n AutomatorBackend.initializeFromSave();\r\n Lazy.invalidateAll();\r\n\r\n const rawDiff = (Date.now() - player.lastUpdate) * (player.testSpeed ?? 1);\r\n // We set offlineEnabled externally on importing or loading a backup; otherwise this is just a local load\r\n const simulateOffline = this.offlineEnabled ?? player.options.offlineProgress;\r\n if (simulateOffline && !Speedrun.isPausedAtStart()) {\r\n let diff = rawDiff;\r\n player.speedrun.offlineTimeUsed += diff;\r\n if (diff > 5 * 60 * 1000 && player.celestials.enslaved.autoStoreReal) {\r\n diff = Enslaved.autoStoreRealTime(diff);\r\n }\r\n if (diff > 10000) {\r\n // The third parameter is a `fast` parameter that we use to only\r\n // simulate at most 50 ticks if the player was offline for less\r\n // than 50 seconds.\r\n simulateTime(diff / 1000, false, diff < 50 * 1000);\r\n } else {\r\n // This is ugly, should fix how we deal with it...\r\n this.postLoadStuff();\r\n }\r\n } else {\r\n // Try to unlock \"Don't you dare sleep\" (usually this check only happens\r\n // during a game tick, which makes the achievement impossible to get\r\n // with offline progress off)\r\n if (!Speedrun.isPausedAtStart()) Achievement(35).tryUnlock();\r\n player.lastUpdate = Date.now();\r\n this.postLoadStuff();\r\n }\r\n\r\n // 2-week threshold for showing the catchup modal. We want to show this even if offline progress is disabled\r\n // because its presence and usefulness is tied to what the player experiences, not the game. setTimeout seems to be\r\n // the only way to get this to display, as it won't display even if called after init() entirely nor is it getting\r\n // actively hidden by Modal.hideAll(), so delaying it asynchronously gets past whatever is causing it to not appear.\r\n // Delay time is relatively long to make it more likely to work on much slower computers.\r\n if (rawDiff > 1000 * 86400 * 14) {\r\n if ([\"S4\", \"S9\"].includes(Theme.current().name)) Theme.set(\"Normal\");\r\n // Looks like the game takes too long to load so we need to setTimeout else it doesn't check for the notation.\r\n setTimeout(() => {\r\n if (Notations.current.isPainful) Notation.mixedScientific.setAsCurrent();\r\n }, 2500);\r\n setTimeout(() => Modal.catchup.show(rawDiff), 5000);\r\n }\r\n },\r\n postLoadStuff() {\r\n // This is called from simulateTime, if that's called; otherwise, it gets called\r\n // manually above\r\n GameIntervals.restart();\r\n GameStorage.ignoreBackupTimer = false;\r\n Enslaved.nextTickDiff = player.options.updateRate;\r\n // The condition for this secret achievement is only checked when the player is actively storing real time, either\r\n // when online or simulating time. When only storing offline, the condition is never actually entered in the\r\n // gameLoop due to the option technically being false, so we need to check it on-load too.\r\n if (player.celestials.enslaved.storedReal > (24 * 60 * 60 * 1000)) SecretAchievement(46).unlock();\r\n GameUI.update();\r\n\r\n for (const resource of AlchemyResources.all) {\r\n resource.before = resource.amount;\r\n }\r\n \r\n document.addEventListener(\"mouseup\", (event) => {\r\n if(event.button == 0){\r\n player.celestials.laitela.isHoldingLClick = false;\r\n }\r\n })\r\n }\r\n};\r\n\r\nfunction download(filename, text) {\r\n const pom = document.createElement(\"a\");\r\n pom.setAttribute(\"href\", `data:text/plain;charset=utf-8,${encodeURIComponent(text)}`);\r\n pom.setAttribute(\"download\", filename);\r\n\r\n if (document.createEvent) {\r\n const event = document.createEvent(\"MouseEvents\");\r\n event.initEvent(\"click\", true, true);\r\n pom.dispatchEvent(event);\r\n } else {\r\n pom.click();\r\n }\r\n}\r\n","/* eslint-disable no-param-reassign */\r\n\r\n// Copyright (c) 2011, Daniel Guerrero\r\n// All rights reserved.\r\n//\r\n// Redistribution and use in source and binary forms, with or without\r\n// modification, are permitted provided that the following conditions are met:\r\n// * Redistributions of source code must retain the above copyright\r\n// notice, this list of conditions and the following disclaimer.\r\n// * Redistributions in binary form must reproduce the above copyright\r\n// notice, this list of conditions and the following disclaimer in the\r\n// documentation and/or other materials provided with the distribution.\r\n//\r\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n// DISCLAIMED. IN NO EVENT SHALL DANIEL GUERRERO BE LIABLE FOR ANY\r\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n//\r\n\r\n/**\r\n * Uses the new array typed in javascript to binary base64 encode/decode\r\n * at the moment just decodes a binary base64 encoded\r\n * into either an ArrayBuffer (decodeArrayBuffer)\r\n * or into an Uint8Array (decode)\r\n *\r\n * References:\r\n * https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\r\n * https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint8Array\r\n */\r\n\r\nconst keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n\r\n/* Will return a Uint8Array type */\r\nexport function decodeArrayBuffer(input) {\r\n const bytes = (input.length / 4) * 3;\r\n const ab = new ArrayBuffer(bytes);\r\n decodeBase64Binary(input, ab);\r\n\r\n return ab;\r\n}\r\n\r\nfunction removePaddingChars(input) {\r\n const lkey = keyStr.indexOf(input.charAt(input.length - 1));\r\n if (lkey === 64) {\r\n return input.substring(0, input.length - 1);\r\n }\r\n return input;\r\n}\r\n\r\nexport function decodeBase64Binary(input, arrayBuffer) {\r\n // Get last chars to see if are valid\r\n input = removePaddingChars(input);\r\n input = removePaddingChars(input);\r\n\r\n const bytes = parseInt((input.length / 4) * 3, 10);\r\n\r\n let array;\r\n let chr1, chr2, chr3;\r\n let enc1, enc2, enc3, enc4;\r\n let i = 0;\r\n let j = 0;\r\n\r\n if (arrayBuffer)\r\n array = new Uint8Array(arrayBuffer);\r\n else\r\n array = new Uint8Array(bytes);\r\n\r\n input = input.replace(/[^A-Za-z0-9+/=]/gu, \"\");\r\n\r\n for (i = 0; i < bytes; i += 3) {\r\n // Get the 3 octects in 4 ascii chars\r\n enc1 = keyStr.indexOf(input.charAt(j++));\r\n enc2 = keyStr.indexOf(input.charAt(j++));\r\n enc3 = keyStr.indexOf(input.charAt(j++));\r\n enc4 = keyStr.indexOf(input.charAt(j++));\r\n\r\n chr1 = (enc1 << 2) | (enc2 >> 4);\r\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n chr3 = ((enc3 & 3) << 6) | enc4;\r\n\r\n array[i] = chr1;\r\n if (enc3 !== 64) array[i + 1] = chr2;\r\n if (enc4 !== 64) array[i + 2] = chr3;\r\n }\r\n\r\n return array;\r\n}\r\n","// Replace the following with your app's Firebase project configuration\r\n// See: https://firebase.google.com/docs/web/learn-more#config-object\r\nexport const firebaseConfig = {\r\n \"apiKey\": null,\r\n \"authDomain\": null,\r\n \"databaseURL\": null,\r\n \"projectId\": null,\r\n \"storageBucket\": null,\r\n \"messagingSenderId\": null,\r\n \"appId\": null,\r\n};\r\n","import { GameMechanicState } from \"../game-mechanics\";\r\n\r\nclass GameProgressState extends GameMechanicState {\r\n get id() {\r\n return this.config.id;\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get suggestedResource() {\r\n return typeof this.config.suggestedResource === \"function\"\r\n ? this.config.suggestedResource()\r\n : this.config.suggestedResource;\r\n }\r\n}\r\n\r\nexport const GameProgress = GameProgressState.createAccessor(GameDatabase.progressStages);\r\nGameProgress.all = GameDatabase.progressStages;\r\n\r\nclass CatchupResource extends GameMechanicState {\r\n get requiredStage() {\r\n return this.config.requiredStage;\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get description() {\r\n return typeof this.config.description === \"function\" ? this.config.description() : this.config.description;\r\n }\r\n}\r\n\r\nexport const CatchupResources = mapGameDataToObject(\r\n GameDatabase.catchupResources,\r\n config => new CatchupResource(config)\r\n);\r\n\r\nexport const ProgressChecker = {\r\n getProgressStage(save) {\r\n const db = GameProgress.all;\r\n for (let stage = db.length - 1; stage >= 0; stage--) {\r\n if (db[stage].hasReached(save)) return db[stage];\r\n }\r\n throw Error(\"No valid progress stage found\");\r\n },\r\n\r\n // Returns a value corresponding to keys in PROGRESS_STAGE, with a rough interpolation between stages\r\n getCompositeProgress(save) {\r\n if (!save) return 0;\r\n const stage = this.getProgressStage(save);\r\n return stage.id + Math.clampMax(stage.subProgressValue(save), 1);\r\n },\r\n\r\n // Returns -1 or 1 when one save is very likely to be farther than the other, otherwise returns 0 if they're close\r\n compareSaveProgress(first, second) {\r\n const progressDifference = this.getCompositeProgress(first) - this.getCompositeProgress(second);\r\n if (progressDifference > 0.05) return -1;\r\n if (progressDifference < -0.05) return 1;\r\n return 0;\r\n },\r\n\r\n // Returns -1 or 1 based on which save is older. Returns 0 if one is undefined, will be handled upstream\r\n compareSaveTimes(first, second) {\r\n if (!first || !second) return 0;\r\n const timeDifference = first.records?.realTimePlayed - second.records?.realTimePlayed;\r\n if (timeDifference >= 0) return -1;\r\n return 1;\r\n }\r\n};\r\n","/* eslint-disable import/extensions */\r\nimport pako from \"pako/dist/pako.esm.mjs\";\r\n/* eslint-enable import/extensions */\r\n\r\nimport {\r\n createUserWithEmailAndPassword,\r\n getAuth,\r\n GoogleAuthProvider,\r\n signInWithEmailAndPassword,\r\n signInWithPopup,\r\n signOut\r\n} from \"firebase/auth\";\r\nimport { get, getDatabase, ref, set } from \"firebase/database\";\r\nimport { initializeApp } from \"firebase/app\";\r\nimport { sha512_256 } from \"js-sha512\";\r\n\r\nimport { STEAM } from \"@/env\";\r\n\r\nimport { decodeBase64Binary } from \"./base64-binary\";\r\nimport { firebaseConfig } from \"./firebase-config\";\r\nimport { ProgressChecker } from \"./progress-checker\";\r\nimport { SteamRuntime } from \"@/steam\";\r\n\r\nconst hasFirebaseConfig = firebaseConfig.apiKey !== null;\r\nif (hasFirebaseConfig) {\r\n initializeApp(firebaseConfig);\r\n}\r\n\r\nexport const Cloud = {\r\n provider: hasFirebaseConfig ? new GoogleAuthProvider() : null,\r\n auth: hasFirebaseConfig ? getAuth() : null,\r\n db: hasFirebaseConfig ? getDatabase() : null,\r\n user: null,\r\n lastCloudHash: null,\r\n\r\n get isAvailable() {\r\n return hasFirebaseConfig;\r\n },\r\n\r\n resetTempState() {\r\n this.lastCloudHash = null;\r\n GameStorage.lastCloudSave = Date.now();\r\n GameIntervals.checkCloudSave.restart();\r\n },\r\n\r\n get loggedIn() {\r\n return this.user !== null;\r\n },\r\n\r\n async login() {\r\n if (!this.isAvailable) {\r\n return;\r\n }\r\n\r\n try {\r\n await signInWithPopup(this.auth, this.provider);\r\n ShopPurchaseData.syncSTD();\r\n if (player.options.hideGoogleName) GameUI.notify.success(`Successfully logged in to Google Account`);\r\n else GameUI.notify.success(`Successfully logged in as ${this.user.displayName}`);\r\n if (ShopPurchaseData.isIAPEnabled) Speedrun.setSTDUse(true);\r\n } catch (e) {\r\n GameUI.notify.error(\"Google Account login failed\");\r\n }\r\n },\r\n\r\n async loginWithSteam(accountId, staticAccountId, screenName) {\r\n if (!this.isAvailable) {\r\n return;\r\n }\r\n\r\n if (this.loggedIn) {\r\n Cloud.user.displayName = screenName;\r\n return;\r\n }\r\n\r\n const email = `${accountId}@ad.com`;\r\n const pass = staticAccountId;\r\n let error = undefined;\r\n\r\n await signInWithEmailAndPassword(this.auth, email, pass)\r\n .catch(() => createUserWithEmailAndPassword(this.auth, email, pass))\r\n .catch(x => error = x);\r\n\r\n if (error !== undefined) {\r\n // eslint-disable-next-line no-console\r\n console.log(`Firebase Login Error: ${error}`);\r\n return;\r\n }\r\n\r\n Cloud.user.displayName = screenName;\r\n },\r\n\r\n // NOTE: This function is largely untested due to not being used at any place within web reality code\r\n async loadMobile() {\r\n if (!this.user) return;\r\n const snapshot = await get(ref(this.db, `users/${this.user.id}/player`));\r\n if (snapshot.exists) {\r\n const encoded = snapshot.val();\r\n const uintArray = decodeBase64Binary(encoded.replace(/-/gu, \"+\").replace(/_/gu, \"/\"));\r\n const save = pako.ungzip(uintArray, { to: \"string\" });\r\n }\r\n },\r\n\r\n compareSaves(cloud, local, hash) {\r\n // This try/except will generally only throw an exception if the cloud save is somehow malformed.\r\n // In practice this should only happen for saves which are really old, or from very early development.\r\n // This will be handled upstream by showing a modal notifying the player of the invalid data and giving them\r\n // options to resolve it without needing to open up the console.\r\n // Note: This could also technically happen if the local save is malformed instead - this shouldn't\r\n // happen unless the player is overtly cheating through the console, and in that case it seems unreasonable\r\n // to attempt to handle such open-ended behavior gracefully\r\n try {\r\n return {\r\n farther: ProgressChecker.compareSaveProgress(cloud, local),\r\n older: ProgressChecker.compareSaveTimes(cloud, local),\r\n differentName: cloud?.options.saveFileName !== local?.options.saveFileName,\r\n hashMismatch: this.lastCloudHash && this.lastCloudHash !== hash,\r\n };\r\n } catch (e) {\r\n return null;\r\n }\r\n },\r\n\r\n async saveCheck(forceModal = false) {\r\n if (!this.isAvailable) {\r\n return;\r\n }\r\n\r\n const saveId = GameStorage.currentSlot;\r\n const cloudSave = await this.load();\r\n if (cloudSave === null) {\r\n this.save();\r\n } else {\r\n const thisCloudHash = sha512_256(GameSaveSerializer.serialize(cloudSave));\r\n if (!this.lastCloudHash) this.lastCloudHash = thisCloudHash;\r\n const localSave = GameStorage.saves[saveId];\r\n const saveComparison = this.compareSaves(cloudSave, localSave, thisCloudHash);\r\n const overwriteAndSendCloudSave = () => this.save();\r\n\r\n // If the comparison fails, we assume the cloud data is corrupted and show the relevant modal\r\n if (!saveComparison) {\r\n Modal.addCloudConflict(saveId, saveComparison, cloudSave, localSave, overwriteAndSendCloudSave);\r\n Modal.cloudInvalidData.show({ isSaving: true });\r\n return;\r\n }\r\n\r\n // Bring up the modal if cloud saving will overwrite a cloud save which is older or possibly farther\r\n const hasBoth = cloudSave && localSave;\r\n // NOTE THIS CHECK IS INTENTIONALLY DIFFERENT FROM THE LOAD CHECK\r\n const hasConflict = hasBoth && saveComparison && (saveComparison.older === -1 || saveComparison.farther === -1 ||\r\n saveComparison.differentName || saveComparison.hashMismatch);\r\n if (forceModal || (hasConflict && player.options.showCloudModal)) {\r\n Modal.addCloudConflict(saveId, saveComparison, cloudSave, localSave, overwriteAndSendCloudSave);\r\n Modal.cloudSaveConflict.show();\r\n } else if (!hasConflict || player.options.forceCloudOverwrite) {\r\n overwriteAndSendCloudSave();\r\n }\r\n }\r\n },\r\n\r\n save() {\r\n if (!this.user) return;\r\n if (GlyphSelection.active || ui.$viewModel.modal.progressBar !== undefined) return;\r\n if (player.options.syncSaveIntervals) GameStorage.save();\r\n const serializedSave = GameSaveSerializer.serialize(GameStorage.saves[GameStorage.currentSlot]);\r\n\r\n this.lastCloudHash = sha512_256(serializedSave);\r\n GameStorage.lastCloudSave = Date.now();\r\n GameIntervals.checkCloudSave.restart();\r\n\r\n const slot = GameStorage.currentSlot;\r\n this.writeToCloudDB(slot, serializedSave);\r\n\r\n // TODO We should revisit this (and the below in loadCheck) at some point after the steam-web merge\r\n // since the hiding motivation was identifying info, and Steam usernames are generally more publicly\r\n // visible than Google info. Also affects the visibility of the button in the Options/Saving subtab\r\n if (STEAM) {\r\n GameUI.notify.info(`Game saved (slot ${slot + 1}) to cloud as user ${this.user.displayName}`);\r\n return;\r\n }\r\n\r\n if (player.options.hideGoogleName) GameUI.notify.info(`Game saved (slot ${slot + 1}) to cloud`);\r\n else GameUI.notify.info(`Game saved (slot ${slot + 1}) to cloud as user ${this.user.displayName}`);\r\n },\r\n\r\n async loadCheck() {\r\n if (!this.isAvailable) {\r\n return;\r\n }\r\n\r\n const save = await this.load();\r\n if (save === null) {\r\n if (player.options.hideGoogleName) GameUI.notify.info(`No cloud save for current Google Account`);\r\n else GameUI.notify.info(`No cloud save for user ${this.user.displayName}`);\r\n } else {\r\n const cloudSave = save;\r\n const saveId = GameStorage.currentSlot;\r\n const localSave = GameStorage.saves[saveId];\r\n const saveComparison = this.compareSaves(cloudSave, localSave);\r\n\r\n // eslint-disable-next-line no-loop-func\r\n const overwriteLocalSave = () => {\r\n GameStorage.overwriteSlot(saveId, cloudSave);\r\n\r\n if (STEAM) {\r\n GameUI.notify.info(`Cloud save loaded`);\r\n return;\r\n }\r\n\r\n if (player.options.hideGoogleName) GameUI.notify.info(`Cloud save (slot ${saveId + 1}) loaded`);\r\n else GameUI.notify.info(`Cloud save (slot ${saveId + 1}) loaded for user ${this.user.displayName}`);\r\n };\r\n\r\n // If the comparison fails, we assume the cloud data is corrupted and show the relevant modal\r\n if (!saveComparison) {\r\n Modal.addCloudConflict(saveId, saveComparison, cloudSave, localSave, overwriteLocalSave);\r\n Modal.cloudInvalidData.show({ isSaving: false });\r\n return;\r\n }\r\n\r\n // Bring up the modal if cloud loading will overwrite a local save which is older or possibly farther\r\n const hasBoth = cloudSave && localSave;\r\n const hasConflict = hasBoth && (saveComparison.older === 1 || saveComparison.farther !== -1 ||\r\n saveComparison.differentName);\r\n if (hasConflict) {\r\n Modal.addCloudConflict(saveId, saveComparison, cloudSave, localSave, overwriteLocalSave);\r\n Modal.cloudLoadConflict.show();\r\n } else {\r\n overwriteLocalSave();\r\n }\r\n }\r\n },\r\n\r\n async load() {\r\n let singleSlot = await this.readFromCloudDB(GameStorage.currentSlot);\r\n if (singleSlot.exists()) return GameSaveSerializer.deserialize(singleSlot.val());\r\n\r\n // An optimization to reduce cloud save operations was done which migrates the format from an old one where all\r\n // slots were saved together to a new one where all three are saved in separate spots. This part of the code should\r\n // only be reached and executed if this migration hasn't happened yet, in which case we migrate and try again. If\r\n // it's *still* empty, then there was nothing to migrate in the first place\r\n await this.separateSaveSlots();\r\n singleSlot = await this.readFromCloudDB(GameStorage.currentSlot);\r\n if (singleSlot.exists()) return GameSaveSerializer.deserialize(singleSlot.val());\r\n\r\n return null;\r\n },\r\n\r\n // The initial implementation of cloud saving combined all save files in the same DB entry, but we have since changed\r\n // it so that they're all saved in separate slots. The database itself retains the single-entry data until the first\r\n // player load attempt after this change, at which point this is called client-side to do a one-time format migration\r\n // Before the migration, saves were stored in \".../web\" and afterward they have been moved to \".../web/1\" and similar\r\n async separateSaveSlots() {\r\n const oldData = await this.readFromCloudDB(null);\r\n if (!oldData.exists()) return;\r\n const allData = GameSaveSerializer.deserialize(oldData.val());\r\n if (!allData) return;\r\n\r\n for (const slot of Object.keys(allData.saves)) {\r\n const newData = GameSaveSerializer.serialize(allData.saves[slot]);\r\n await this.writeToCloudDB(Number(slot), newData);\r\n }\r\n },\r\n\r\n readFromCloudDB(slot) {\r\n const slotStr = slot === null ? \"\" : `/${slot}`;\r\n return get(ref(this.db, `users/${this.user.id}/web${slotStr}`));\r\n },\r\n\r\n writeToCloudDB(slot, data) {\r\n const slotStr = slot === null ? \"\" : `/${slot}`;\r\n return set(ref(this.db, `users/${this.user.id}/web${slotStr}`), data);\r\n },\r\n\r\n logout() {\r\n if (!this.isAvailable) {\r\n return;\r\n }\r\n\r\n signOut(this.auth);\r\n ShopPurchaseData.clearLocalSTD();\r\n },\r\n\r\n init() {\r\n if (!this.isAvailable) {\r\n return;\r\n }\r\n\r\n getAuth().onAuthStateChanged(user => {\r\n if (user) {\r\n this.user = {\r\n id: user.uid,\r\n displayName: STEAM\r\n ? SteamRuntime.screenName\r\n : user.displayName,\r\n email: user.email,\r\n };\r\n if (!STEAM) {\r\n ShopPurchaseData.syncSTD();\r\n }\r\n } else {\r\n this.user = null;\r\n }\r\n });\r\n },\r\n};\r\n","export const supportedBrowsers = /((CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(10[_.]3|10[_.]([4-9]|\\d{2,})|(1[1-9]|[2-9]\\d|\\d{3,})[_.]\\d+|12[_.]2|12[_.]([3-9]|\\d{2,})|12[_.]5|12[_.]([6-9]|\\d{2,})|(1[3-9]|[2-9]\\d|\\d{3,})[_.]\\d+|13[_.]3|13[_.]([4-9]|\\d{2,})|13[_.]7|13[_.]([8-9]|\\d{2,})|(1[4-9]|[2-9]\\d|\\d{3,})[_.]\\d+|14[_.]0|14[_.]([1-9]|\\d{2,})|14[_.]4|14[_.]([5-9]|\\d{2,})|14[_.]8|14[_.](9|\\d{2,})|(1[5-9]|[2-9]\\d|\\d{3,})[_.]\\d+|15[_.]0|15[_.]([1-9]|\\d{2,})|(1[6-9]|[2-9]\\d|\\d{3,})[_.]\\d+)(?:[_.]\\d+)?)|(CFNetwork\\/8.* Darwin\\/16\\.5\\.\\d+)|(CFNetwork\\/8.* Darwin\\/16\\.6\\.\\d+)|(CFNetwork\\/8.* Darwin\\/16\\.7\\.\\d+)|((?:Chrome).*OPR\\/(79\\.0|79\\.([1-9]|\\d{2,})|([8-9]\\d|\\d{3,})\\.\\d+)\\.\\d+)|(SamsungBrowser\\/(13\\.0|13\\.([1-9]|\\d{2,})|(1[4-9]|[2-9]\\d|\\d{3,})\\.\\d+))|(Edge\\/(93(?:\\.0)?|93(?:\\.([1-9]|\\d{2,}))?|(9[4-9]|\\d{3,})(?:\\.\\d+)?))|((Chromium|Chrome)\\/(79\\.0|79\\.([1-9]|\\d{2,})|([8-9]\\d|\\d{3,})\\.\\d+|85\\.0|85\\.([1-9]|\\d{2,})|(8[6-9]|9\\d|\\d{3,})\\.\\d+|89\\.0|89\\.([1-9]|\\d{2,})|(9\\d|\\d{3,})\\.\\d+)(?:\\.\\d+)?)|(Version\\/(13\\.1|13\\.([2-9]|\\d{2,})|(1[4-9]|[2-9]\\d|\\d{3,})\\.\\d+|14\\.0|14\\.([1-9]|\\d{2,})|(1[5-9]|[2-9]\\d|\\d{3,})\\.\\d+|15\\.0|15\\.([1-9]|\\d{2,})|(1[6-9]|[2-9]\\d|\\d{3,})\\.\\d+)(?:\\.\\d+)? Safari\\/)|(Firefox\\/(78\\.0|78\\.([1-9]|\\d{2,})|(79|[8-9]\\d|\\d{3,})\\.\\d+|92\\.0|92\\.([1-9]|\\d{2,})|(9[3-9]|\\d{3,})\\.\\d+)\\.\\d+)|(Firefox\\/(78\\.0|78\\.([1-9]|\\d{2,})|(79|[8-9]\\d|\\d{3,})\\.\\d+|92\\.0|92\\.([1-9]|\\d{2,})|(9[3-9]|\\d{3,})\\.\\d+)(pre|[ab]\\d+[a-z]*)?)/;","const Payments = {\r\n interval: null,\r\n windowReference: null,\r\n // This is here to prevent notification spam; purchase canceling can be called multiple times before the first\r\n // call's Promise is settled\r\n hasCanceled: false,\r\n init: () => {\r\n // We have unfinished checkouts from when the page was last closed\r\n if (player.IAP.checkoutSession.id) {\r\n Payments.pollForPurchases();\r\n }\r\n },\r\n\r\n // Only called from clicking the \"Buy More\" button in the Shop tab\r\n buyMoreSTD: async STD => {\r\n player.IAP.checkoutSession = { id: true };\r\n let res;\r\n try {\r\n res = await fetch(`${STD_BACKEND_URL}/purchase`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify({ amount: STD, cloudID: Cloud.user.id })\r\n });\r\n } catch (e) {\r\n GameUI.notify.error(\"Could not contact payment server!\", 10000);\r\n return;\r\n }\r\n const data = await res.json();\r\n Payments.windowReference = window.open(\r\n data.url,\r\n \"antimatterDimensionsPurchase\",\r\n \"popup,width=500,height=500,left=100,top=100\"\r\n );\r\n player.IAP.checkoutSession = { id: data.id, amount: STD };\r\n GameStorage.save();\r\n Payments.pollForPurchases();\r\n },\r\n\r\n // Starts a purchase-checking loop and adds a listener which cancels any ongoing purchases if the page is closed.\r\n // Any unresolved purchases will be reopened when the page is opened again in init()\r\n pollForPurchases: () => {\r\n const { id, amount } = player.IAP.checkoutSession;\r\n let pollAmount = 0;\r\n window.onbeforeunload = async() => {\r\n if (!Payments.interval) return;\r\n Payments.windowReference?.close();\r\n await Payments.cancelPurchase(false);\r\n };\r\n\r\n // This setInterval checks every 3 seconds for a response from the payment backend\r\n Payments.interval = setInterval(async() => {\r\n pollAmount++;\r\n let statusRes;\r\n try {\r\n statusRes = await fetch(`${STD_BACKEND_URL}/validate?sessionId=${id}`);\r\n } catch (e) {\r\n // Note: Not redundant with notification in buyMoreSTD above; will not be reached if exception is thrown there\r\n GameUI.notify.error(\"Could not contact payment server!\", 10000);\r\n Payments.clearInterval();\r\n return;\r\n }\r\n const { completed, failure } = await statusRes.json();\r\n\r\n if (completed) {\r\n Payments.windowReference?.close();\r\n await ShopPurchaseData.syncSTD();\r\n GameUI.notify.success(`Purchase of ${amount} STDs was successful, thank you for your support! ❤️`, 10000);\r\n Payments.clearInterval();\r\n player.IAP.checkoutSession = { id: false };\r\n GameStorage.save();\r\n Modal.hide();\r\n }\r\n\r\n if (failure) {\r\n Payments.windowReference?.close();\r\n Payments.clearInterval();\r\n GameUI.notify.error(`Purchase failed!`, 10000);\r\n player.IAP.checkoutSession = { id: false };\r\n GameStorage.save();\r\n return;\r\n }\r\n\r\n // 30 minutes of polling is the maximum\r\n if (!completed && (Payments.windowReference?.closed || pollAmount >= 20 * 30)) {\r\n await Payments.cancelPurchase(true);\r\n }\r\n }, 3000);\r\n },\r\n\r\n // Sends a request to purchase a STD upgrade, returning true if successful (and syncs data), false if not\r\n async buyUpgrade(upgradeKey, cosmeticName) {\r\n if (!Cloud.loggedIn) return false;\r\n let res;\r\n try {\r\n res = await fetch(`${STD_BACKEND_URL}/upgrade`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify({\r\n user: Cloud.user.id,\r\n upgrade: upgradeKey,\r\n extraData: {\r\n requestedSet: cosmeticName,\r\n fullCompletions: player.records.fullGameCompletions\r\n }\r\n })\r\n });\r\n } catch (e) {\r\n GameUI.notify.error(\"Unable to spend STD coins on upgrade!\", 10000);\r\n return false;\r\n }\r\n const stdData = await res.json();\r\n // The \"not enough STDs\" message should only show up if the player modifies costs on the frontend and forces the\r\n // game to send a request despite not actually having enough STDs. The cost check is done again on the backend\r\n if (stdData.success) GameUI.notify.info(`Successfully spent ${stdData.amountSpent} STD coins`, 10000);\r\n else GameUI.notify.error(stdData.error ?? \"Unable to purchase upgrade\", 10000);\r\n ShopPurchaseData.syncSTD(false, stdData.data);\r\n return stdData.success;\r\n },\r\n\r\n // Explicitly cancels purchases if the player chooses to, they take too long to resolve, or the page is closed\r\n async cancelPurchase(isTimeout) {\r\n if (this.hasCanceled) return;\r\n Payments.windowReference?.close();\r\n Payments.clearInterval();\r\n try {\r\n await fetch(`${STD_BACKEND_URL}/expire`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify({ sessionId: player.IAP.checkoutSession.id })\r\n });\r\n } catch (e) {\r\n GameUI.notify.error(\"Could not contact payment server!\", 10000);\r\n }\r\n if (isTimeout) GameUI.notify.error(\"Purchase took too long to resolve!\", 10000);\r\n player.IAP.checkoutSession = { id: false };\r\n GameStorage.save();\r\n this.hasCanceled = false;\r\n },\r\n\r\n // Removes the repeating checker and page-close listener for if payments have been resolved\r\n clearInterval() {\r\n clearInterval(Payments.interval);\r\n window.onbeforeunload = null;\r\n }\r\n};\r\n\r\nexport default Payments;\r\n","import { GameMechanicState } from \"../game-mechanics\";\r\nimport { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\n\r\nfunction showSecondPreferredWarning(currTree) {\r\n const canPickSecond = currTree.allowedDimPathCount === 2 && currTree.currDimPathCount < 2;\r\n // Show a warning if the player can choose the second preferred dimension path and hasn't yet done so.\r\n if (canPickSecond && TimeStudy.preferredPaths.dimension.path.length < 2) {\r\n GameUI.notify.error(\"You haven't selected a second preferred Dimension path.\");\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n// This is only ever called from manual player actions, which means we can immediately commit them to the game state\r\n// eslint-disable-next-line complexity\r\nexport function buyStudiesUntil(id, ec = -1) {\r\n let studyArray = [];\r\n const lastInPrevRow = Math.floor(id / 10) * 10 - 1;\r\n const requestedPath = TimeStudy(id).path;\r\n const currTree = GameCache.currentStudyTree.value;\r\n // Makes an array [start, start+1, ... , end], empty if end < start\r\n const range = (start, end) => [...Array(Math.clampMin(end - start + 1, 0)).keys()].map(i => i + start);\r\n const ecHasRequirement = !Perk.studyECRequirement.isBought;\r\n\r\n // If the player tries to buy a study which is immediately buyable, we try to buy it first in case buying other\r\n // studies up to that point renders it unaffordable. Effectively the clicked study is higher priority than all others\r\n studyArray.push(id);\r\n\r\n // Greddily buy all studies before the dimension split then try again; if the requested study was above the dimension\r\n // split, then we're done and don't need to attempt to buy any more\r\n studyArray.push(...range(11, Math.min(lastInPrevRow, 70)));\r\n studyArray.push(id);\r\n\r\n if (id < 71) return studyArray;\r\n\r\n // Priority for behavior when buying in the Dimension split; we follow only the first applicable entry below:\r\n // - If we're buying a study within the split, we first buy just the requested path up to the requested study.\r\n // (stops buying)\r\n // - If we want to buy EC11 or EC12 we only buy the required dimension path unless we have the EC requirement perk\r\n // (continues onward)\r\n // - If we can't buy any additional paths or have 3 paths available, we attempt to buy everything here, prioritizing\r\n // preferred paths. With less than 3 paths available, this only purchases the rest of any unfinished paths\r\n // (continues onward)\r\n // - If the player has a preferred path, we attempt to buy it (continues onward)\r\n // - If the player doesn't have a preferred path, we say so and do nothing (stops buying)\r\n // - Otherwise we do nothing (stops buying)\r\n if (id < 111) {\r\n studyArray.push(...NormalTimeStudies.paths[requestedPath].filter(s => (s <= id)));\r\n return studyArray;\r\n }\r\n\r\n if (ec === 11 && ecHasRequirement) {\r\n studyArray.push(...NormalTimeStudies.paths[TIME_STUDY_PATH.ANTIMATTER_DIM].filter(s => (s <= id)));\r\n } else if (ec === 12 && ecHasRequirement) {\r\n studyArray.push(...NormalTimeStudies.paths[TIME_STUDY_PATH.TIME_DIM].filter(s => (s <= id)));\r\n } else if (currTree.currDimPathCount === currTree.allowedDimPathCount || currTree.allowedDimPathCount === 3) {\r\n studyArray.push(...TimeStudy.preferredPaths.dimension.studies);\r\n studyArray.push(...range(71, 103));\r\n } else if (TimeStudy.preferredPaths.dimension.path.length > 0) {\r\n studyArray.push(...TimeStudy.preferredPaths.dimension.studies);\r\n } else if (currTree.currDimPathCount === 0) {\r\n GameUI.notify.error(\"You haven't selected a preferred Dimension path.\");\r\n return studyArray;\r\n }\r\n\r\n // Explicitly purchase 111 here if it's included and stop if applicable, as it isn't covered by logic in either split.\r\n if (id >= 111) studyArray.push(111);\r\n\r\n const secondPreferredWarningShown = showSecondPreferredWarning(currTree);\r\n\r\n if (id < 121) return studyArray;\r\n\r\n // Priority for behavior when buying in the Pace split; we follow only the first applicable entry below. In contrast\r\n // to the Dimension split, here we instead err on the side of not buying extra studies since they will cost ST.\r\n // - If we're buying a study within the split, we first buy just the requested path up to the requested study.\r\n // We don't attempt to buy other paths here because that may waste ST (stops buying)\r\n // - If V has been fully completed, we just brute-force this whole group (continues onward)\r\n // - If we already have part of a single path, we buy the rest of it (continues onward)\r\n // - If we have a preferred path, we buy it all (continues onward)\r\n // - If we don't have any pace paths at this point, there's no way to objectively choose one (stops buying)\r\n // - Fallback case: we have more than one path and intentionally do nothing here (continues onward)\r\n\r\n if (id < 151) {\r\n studyArray.push(...NormalTimeStudies.paths[TimeStudy(id).path].filter(s => (s <= id)));\r\n return studyArray;\r\n }\r\n\r\n const pacePaths = currTree.pacePaths\r\n .map(pathName => NormalTimeStudies.pathList.find(p => p.name === pathName).path);\r\n if (V.isFullyCompleted && !Pelle.isDoomed) {\r\n const allPace = NormalTimeStudies.paths[TIME_STUDY_PATH.ACTIVE]\r\n .concat(NormalTimeStudies.paths[TIME_STUDY_PATH.PASSIVE])\r\n .concat(NormalTimeStudies.paths[TIME_STUDY_PATH.IDLE]);\r\n studyArray.push(...allPace);\r\n } else if (pacePaths.length === 1) {\r\n studyArray.push(...NormalTimeStudies.paths[pacePaths[0]]);\r\n } else if (TimeStudy.preferredPaths.pace.path !== 0) {\r\n studyArray.push(...TimeStudy.preferredPaths.pace.studies);\r\n } else if (pacePaths.length === 0) {\r\n GameUI.notify.error(\"You haven't selected a preferred Pace path.\");\r\n return studyArray;\r\n }\r\n\r\n // First we buy up to 201 so we can buy the second preferred path if needed\r\n studyArray.push(...range(151, Math.min(id, 201)));\r\n if (id < 201) return studyArray;\r\n\r\n // If we want to buy EC11 or EC12 we don't want 201 unless we have the EC study requirement perk\r\n if (!(ecHasRequirement && (ec === 11 || ec === 12))) {\r\n // We need to commit what we have to the game state, because the check for priorityRequirement\r\n // requires us knowing if we have actually purchased 201.\r\n TimeStudyTree.commitToGameState(studyArray);\r\n studyArray = [];\r\n\r\n // Buy the second preferred dimension path if we have one\r\n if (TimeStudy.preferredPaths.dimension.path.length > 0) {\r\n studyArray.push(...TimeStudy.preferredPaths.dimension.studies);\r\n // We need to commit the dimension paths to the game state in order\r\n // to know if we should display the second preferred path warning.\r\n TimeStudyTree.commitToGameState(studyArray);\r\n studyArray = [];\r\n }\r\n\r\n if (!secondPreferredWarningShown) showSecondPreferredWarning(GameCache.currentStudyTree.value);\r\n\r\n studyArray.push(...range(211, Math.min(lastInPrevRow, 214)));\r\n\r\n // If the user clicked on a study in rows 19-22, we've tried to buy up to the previous\r\n // row. Try to buy that study now:\r\n studyArray.push(id);\r\n }\r\n\r\n // Don't bother buying any more studies at or below row 22 unless the player has fully finished V, in which case just\r\n // brute-force all of them up to the specified study. This buys all pre-triads, then triads sequentially up to the id\r\n if (id < 221 || !V.isFullyCompleted) return studyArray;\r\n studyArray.push(...range(221, Math.max(id, 234)));\r\n return studyArray;\r\n}\r\n\r\nexport function respecTimeStudies(auto) {\r\n for (const study of TimeStudy.boughtNormalTS()) {\r\n study.refund();\r\n }\r\n player.timestudy.studies = [];\r\n GameCache.timeStudies.invalidate();\r\n player.celestials.v.STSpent = 0;\r\n const ecStudy = TimeStudy.eternityChallenge.current();\r\n if (ecStudy !== undefined) {\r\n ecStudy.refund();\r\n player.challenge.eternity.unlocked = 0;\r\n }\r\n if (!auto) {\r\n Tab.eternity.studies.show();\r\n }\r\n GameCache.currentStudyTree.invalidate();\r\n}\r\n\r\nexport class TimeStudyState extends GameMechanicState {\r\n constructor(config, type) {\r\n super(config);\r\n this.type = type;\r\n }\r\n\r\n get cost() {\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n return this.config.cost * corruptionPenalties.soF.ttcost[player.mending.corruption[9]];\r\n }\r\n return this.config.cost;\r\n }\r\n\r\n get STCost() {\r\n let base = this.config.STCost;\r\n // owo corruption 8 idk--sxy\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n base += corruptionPenalties.spaceTuition[player.mending.corruption[8]];\r\n }*/\r\n if(WarpUpgrade(8).isBought&&this.config.id>400&&this.config.id<500){\r\n base -= 50;\r\n }\r\n return VUnlocks.raUnlock.canBeApplied\r\n ? base - 2\r\n : base;\r\n }\r\n\r\n refund() {\r\n Currency.timeTheorems.add(this.cost);\r\n }\r\n\r\n get isAffordable() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&(player.mending.corruption[5]>=6||corruptionPenalties.soF.hiddenThree[player.mending.corruption[9]])&&this.type==3) {\r\n return false;\r\n }\r\n return Currency.timeTheorems.gte(this.cost);\r\n }\r\n\r\n get canBeBought() {\r\n return true;\r\n }\r\n}\r\n","import { TimeStudyState } from \"./time-studies\";\r\n\r\nexport const NormalTimeStudies = {};\r\n\r\nNormalTimeStudies.pathList = [\r\n { path: TIME_STUDY_PATH.ANTIMATTER_DIM, studies: [71, 81, 91, 101], name: \"Antimatter Dims\" },\r\n { path: TIME_STUDY_PATH.INFINITY_DIM, studies: [72, 82, 92, 102], name: \"Infinity Dims\" },\r\n { path: TIME_STUDY_PATH.TIME_DIM, studies: [73, 83, 93, 103], name: \"Time Dims\" },\r\n { path: TIME_STUDY_PATH.ACTIVE, studies: [121, 131, 141], name: \"Active\" },\r\n { path: TIME_STUDY_PATH.PASSIVE, studies: [122, 132, 142], name: \"Passive\" },\r\n { path: TIME_STUDY_PATH.IDLE, studies: [123, 133, 143], name: \"Idle\" },\r\n { path: TIME_STUDY_PATH.LIGHT, studies: [221, 223, 225, 227, 231, 233], name: \"Light\" },\r\n { path: TIME_STUDY_PATH.DARK, studies: [222, 224, 226, 228, 232, 234], name: \"Dark\" }\r\n];\r\n\r\nNormalTimeStudies.paths = NormalTimeStudies.pathList.mapToObject(e => e.path, e => e.studies);\r\n\r\nexport class NormalTimeStudyState extends TimeStudyState {\r\n constructor(config) {\r\n let x = -1; //ugly code incoming, but it works\r\n switch (true){\r\n case (config.id > 500):\r\n x = TIME_STUDY_TYPE.KOHLER_EXCLUSIVE;\r\n break;\r\n case (config.id > 400):\r\n x = TIME_STUDY_TYPE.MYRIAD;\r\n break;\r\n case (config.id > 300):\r\n x = TIME_STUDY_TYPE.TRIAD;\r\n break;\r\n default:\r\n x = TIME_STUDY_TYPE.NORMAL;\r\n break;\r\n }\r\n\r\n const type = x;// config.id > 300 ? TIME_STUDY_TYPE.TRIAD : TIME_STUDY_TYPE.NORMAL;\r\n /*const type = () =>{\r\n switch(true){\r\n case (config.id > 500):\r\n return TIME_STUDY_TYPE.KOHLER_EXCLUSIVE;\r\n case (config.id > 400):\r\n return TIME_STUDY_TYPE.MYRIAD;\r\n case (config.id > 300):\r\n return TIME_STUDY_TYPE.TRIAD;\r\n default:\r\n return TIME_STUDY_TYPE.NORMAL;\r\n }\r\n }*/\r\n super(config, type);\r\n const path = NormalTimeStudies.pathList.find(p => p.studies.includes(this.id));\r\n this._path = path?.path ?? TIME_STUDY_PATH.NONE;\r\n }\r\n\r\n get isUnlocked() {\r\n return this.config.unlocked?.() ?? true;\r\n }\r\n\r\n get isTriad() {\r\n return this.id > 300 && this.id < 400;\r\n }\r\n\r\n get isMyriad() {\r\n return this.id > 400 && this.id < 500;\r\n }\r\n\r\n get isBought() {\r\n return GameCache.timeStudies.value[this.id];\r\n }\r\n\r\n // The requiresST prop is an array containing IDs indicating other studies which, if ANY in the array are purchased,\r\n // will cause the study to also cost space theorems. This array is effectively assumed to be empty if not present.\r\n costsST() {\r\n //since there's only one connection from reality I would code just as this. plz don't require ST more than reality.\r\n if(this.config.requiresST !== undefined && this.config.requiresST.includes('reality')) return this.config.requiresST && TimeStudy.reality.isBought;\r\n return this.config.requiresST && this.config.requiresST.some(s => TimeStudy(s).isBought);\r\n }\r\n\r\n checkRequirement() {\r\n const check = req => (typeof req === \"number\"\r\n ? TimeStudy(req).isBought\r\n : req());\r\n const currTree = GameCache.currentStudyTree.value;\r\n switch (this.config.reqType) {\r\n case TS_REQUIREMENT_TYPE.AT_LEAST_ONE:\r\n return this.config.requirement.some(r => check(r));\r\n case TS_REQUIREMENT_TYPE.ALL:\r\n return this.config.requirement.every(r => check(r));\r\n case TS_REQUIREMENT_TYPE.DIMENSION_PATH:\r\n // In some cases of loading, sometimes the current tree might be undefined when this code is executed. The\r\n // exact situations seem unclear, but it may be an interaction between the automator and offline progress\r\n return this.config.requirement.every(r => check(r)) && currTree &&\r\n currTree.currDimPathCount < currTree.allowedDimPathCount;\r\n default:\r\n throw Error(`Unrecognized TS requirement type: ${this.reqType}`);\r\n }\r\n }\r\n\r\n // This checks for and forbids buying studies due to being part of a set which can't normally be bought\r\n // together (eg. active/passive/idle and light/dark) unless the player has the requisite ST.\r\n checkSetRequirement() {\r\n return this.costsST() ? !Pelle.isDisabled(\"V\") && (V.availableST >= this.STCost) : true;\r\n }\r\n\r\n get canBeBought() {\r\n return this.checkRequirement() && this.checkSetRequirement();\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isBought;\r\n }\r\n\r\n purchase(auto = false) {\r\n if (this.isBought || !this.isAffordable || !this.canBeBought) return false;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return false;\r\n if (ImaginaryUpgrade(19).isLockingMechanics && player.timestudy.studies.length === 8) {\r\n if (!auto) ImaginaryUpgrade(19).tryShowWarningModal();\r\n return false;\r\n }\r\n if (this.costsST()) player.celestials.v.STSpent += this.STCost;\r\n player.timestudy.studies.push(this.id);\r\n player.requirementChecks.reality.maxStudies = Math.clampMin(player.requirementChecks.reality.maxStudies,\r\n player.timestudy.studies.length);\r\n if (this.id > 300 && this.id < 400) player.requirementChecks.reality.noTriads = false;\r\n if (this.id == 305) player.requirementChecks.reality.noTriad305 = false;\r\n if (this.id == 307) player.requirementChecks.reality.noTriad307 = false;\r\n Currency.timeTheorems.subtract(this.cost);\r\n GameCache.timeStudies.invalidate();\r\n TimeStudyTree.commitToGameState([TimeStudy(this.id)]);\r\n if (this.id === 181 && Pelle.isDoomed) Achievement(186).unlock();\r\n return true;\r\n }\r\n\r\n purchaseUntil() {\r\n TimeStudyTree.commitToGameState(buyStudiesUntil(this.id));\r\n }\r\n\r\n get path() {\r\n return this._path;\r\n }\r\n}\r\n\r\nNormalTimeStudyState.studies = mapGameData(\r\n GameDatabase.eternity.timeStudies.normal,\r\n config => new NormalTimeStudyState(config)\r\n);\r\n\r\nNormalTimeStudyState.all = NormalTimeStudyState.studies.filter(e => e !== undefined);\r\n\r\n/**\r\n * @returns {NormalTimeStudyState}\r\n */\r\nexport function TimeStudy(id) {\r\n return NormalTimeStudyState.studies[id];\r\n}\r\n\r\n/**\r\n * @returns {NormalTimeStudyState[]}\r\n */\r\nTimeStudy.boughtNormalTS = function() {\r\n return player.timestudy.studies.map(id => TimeStudy(id));\r\n};\r\n\r\nTimeStudy.preferredPaths = {\r\n dimension: {\r\n get path() {\r\n return player.timestudy.preferredPaths[0];\r\n },\r\n set path(value) {\r\n const options = [1, 2, 3];\r\n player.timestudy.preferredPaths[0] = value.filter(id => options.includes(id));\r\n },\r\n get studies() {\r\n return player.timestudy.preferredPaths[0].flatMap(path => NormalTimeStudies.paths[path]);\r\n },\r\n get usePriority() {\r\n return this.path.length > 1 ||\r\n TimeStudy(201).isBought ||\r\n DilationUpgrade.timeStudySplit.isBought ||\r\n PlayerProgress.realityUnlocked();\r\n }\r\n },\r\n pace: {\r\n get path() {\r\n return player.timestudy.preferredPaths[1];\r\n },\r\n set path(value) {\r\n const options = [4, 5, 6];\r\n player.timestudy.preferredPaths[1] = options.includes(value) ? value : 0;\r\n },\r\n get studies() {\r\n return NormalTimeStudies.paths[player.timestudy.preferredPaths[1]];\r\n }\r\n }\r\n};\r\n","import TWEEN from \"tween.js\";\r\n\r\nimport { ElectronRuntime, SteamRuntime } from \"@/steam\";\r\n\r\nimport { DC } from \"./core/constants\";\r\nimport { deepmergeAll } from \"@/utility/deepmerge\";\r\nimport { DEV } from \"@/env\";\r\nimport { SpeedrunMilestones } from \"./core/speedrun\";\r\nimport { Cloud } from \"./core/storage\";\r\nimport { supportedBrowsers } from \"./supported-browsers\";\r\n\r\nimport Payments from \"./core/payments\";\r\nimport { MendingUpgrade } from \"./core/mending-upgrades\";\r\nimport { CorruptionData, CorruptionUpgrade, Currency, ExpoBlackHole, MultiversalDimensions, WarpUpgrade } from \"./core/globals\";\r\nimport { MendingMilestone } from \"./core/mending\";\r\nimport { Player, Ra } from \"./core/globals\";\r\nimport { corruptionPenalties } from \"./core/secret-formula/mending/corruption\";\r\nimport { TimeStudy } from \"./core/time-studies/normal-time-study\";\r\n\r\nif (GlobalErrorHandler.handled) {\r\n throw new Error(\"Initialization failed\");\r\n}\r\nGlobalErrorHandler.cleanStart = true;\r\n\r\nexport function playerInfinityUpgradesOnReset() {\r\n\r\n const infinityUpgrades = new Set(\r\n [\"timeMult\", \"dimMult\", \"timeMult2\",\r\n \"skipReset1\", \"skipReset2\", \"unspentBonus\",\r\n \"27Mult\", \"18Mult\", \"36Mult\", \"resetMult\",\r\n \"skipReset3\", \"passiveGen\", \"45Mult\",\r\n \"resetBoost\", \"galaxyBoost\", \"skipResetGalaxy\",\r\n \"ipOffline\"]\r\n );\r\n\r\n const breakInfinityUpgrades = new Set(\r\n [\"timeMult\", \"dimMult\", \"timeMult2\",\r\n \"skipReset1\", \"skipReset2\", \"unspentBonus\",\r\n \"27Mult\", \"18Mult\", \"36Mult\", \"resetMult\",\r\n \"skipReset3\", \"passiveGen\", \"45Mult\",\r\n \"resetBoost\", \"galaxyBoost\", \"skipResetGalaxy\",\r\n \"totalMult\", \"currentMult\", \"postGalaxy\",\r\n \"challengeMult\", \"achievementMult\", \"infinitiedMult\",\r\n \"infinitiedGeneration\", \"autoBuyerUpgrade\", \"autobuyMaxDimboosts\",\r\n \"ipOffline\"]\r\n );\r\n\r\n if (PelleUpgrade.keepBreakInfinityUpgrades.canBeApplied) {\r\n player.infinityUpgrades = new Set([...player.infinityUpgrades].filter(u => breakInfinityUpgrades.has(u)));\r\n return;\r\n }\r\n\r\n if (PelleUpgrade.keepInfinityUpgrades.canBeApplied) {\r\n player.infinityUpgrades = new Set([...player.infinityUpgrades].filter(u => infinityUpgrades.has(u)));\r\n player.infinityRebuyables = [0, 0, 0];\r\n GameCache.tickSpeedMultDecrease.invalidate();\r\n GameCache.dimensionMultDecrease.invalidate();\r\n return;\r\n }\r\n\r\n if (RealityUpgrade(10).isBought || EternityMilestone.keepBreakUpgrades.isReached || MendingUpgrade(2).isBought) {\r\n player.infinityUpgrades = breakInfinityUpgrades;\r\n player.infinityRebuyables = [8, 7, 10];\r\n } else if (EternityMilestone.keepInfinityUpgrades.isReached) {\r\n player.infinityUpgrades = infinityUpgrades;\r\n player.infinityRebuyables = [0, 0, 0];\r\n } else {\r\n player.infinityUpgrades.clear();\r\n player.infinityRebuyables = [0, 0, 0];\r\n }\r\n\r\n if (Pelle.isDoomed) {\r\n player.infinityUpgrades.clear();\r\n player.infinityRebuyables = [0, 0, 0];\r\n }\r\n\r\n GameCache.tickSpeedMultDecrease.invalidate();\r\n GameCache.dimensionMultDecrease.invalidate();\r\n}\r\n\r\nexport function breakInfinity() {\r\n if (!Autobuyer.bigCrunch.hasMaxedInterval) return;\r\n if (InfinityChallenge.isRunning) return;\r\n for (const autobuyer of Autobuyers.all) {\r\n if (autobuyer.data.interval !== undefined) autobuyer.maxIntervalForFree();\r\n }\r\n // There's a potential migration edge case involving already-maxed autobuyers; this should give the achievement\r\n Achievement(61).tryUnlock();\r\n player.break = !player.break;\r\n TabNotification.ICUnlock.tryTrigger();\r\n EventHub.dispatch(player.break ? GAME_EVENT.BREAK_INFINITY : GAME_EVENT.FIX_INFINITY);\r\n GameUI.update();\r\n}\r\n\r\nexport function gainedInfinityPoints(noSoftcap = false) {\r\n const div = Effects.min(\r\n 308,\r\n Achievement(103),\r\n TimeStudy(111)\r\n );\r\n if (Pelle.isDisabled(\"IPMults\")) {\r\n let x = MendingMilestone.one.isReached ? 1e20 : 1;\r\n return Decimal.pow10(player.records.thisInfinity.maxAM.log10() / div - 0.75)\r\n .timesEffectsOf(PelleRifts.vacuum)\r\n .times(Pelle.specialGlyphEffect.infinity).times(x)\r\n .floor();\r\n }\r\n let ip = player.break\r\n ? Decimal.pow10(player.records.thisInfinity.maxAM.log10() / div - 0.75)\r\n : new Decimal(308 / div);\r\n if(MendingMilestone.one.isReached){\r\n ip = ip.times(1e20);\r\n }\r\n if (Ra.unlocks.realityMachinesBoostIpAndEpGain.isUnlocked){\r\n ip = Decimal.pow(ip, Decimal.log10(Currency.realityMachines.value.max(1)) / 100);\r\n }\r\n if (Effarig.isRunning && Effarig.currentStage === EFFARIG_STAGES.ETERNITY) {\r\n ip = ip.min(DC.E200);\r\n }\r\n ip = ip.times(GameCache.totalIPMult.value);\r\n \r\n if (Teresa.isRunning) {\r\n ip = ip.pow(0.55);\r\n } else if (V.isRunning) {\r\n ip = ip.pow(0.5);\r\n } else if (V.isSuperRunning) {\r\n //ip = ip.log(1.0000000001).toDecimal();\r\n ip = ip.pow(0.000001);\r\n } else if (Laitela.isRunning) {\r\n ip = dilatedValueOf(ip);\r\n }\r\n if (GlyphAlteration.isAdded(\"infinity\")) {\r\n ip = ip.pow(getSecondaryGlyphEffect(\"infinityIP\"));\r\n }\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let corruptionPrestigeLimits = corruptionPenalties.prestigeLimits[player.mending.corruption[0]];\r\n if(CorruptionUpgrade(16).isBought) corruptionPrestigeLimits = Math.min(1,corruptionPrestigeLimits*2)\r\n ip = ip.pow(corruptionPrestigeLimits)\r\n ip = ip.pow(corruptionPenalties.timeCompression.hiddenFour[player.mending.corruption[2]])\r\n ip = ip.pow(corruptionPenalties.repSing.presGain[player.mending.corruption[8]])\r\n }\r\n if (ip.gte(Decimal.pow10(9e15)) && !noSoftcap) {\r\n ip = ip.div(Decimal.pow10(9e15))\r\n ip = ip.pow(0.0298374651)\r\n ip = ip.times(Decimal.pow10(9e15))\r\n }\r\n /*if (ip.gte(Decimal.pow10(1e20)) && !noSoftcap) {\r\n ip = ip.div(Decimal.pow10(1e20))\r\n ip = ip.pow(0.95)\r\n ip = ip.times(Decimal.pow10(1e20))\r\n }*/\r\n return ip.floor();\r\n}\r\n\r\nexport function mendingMilestoneElevenMultiplier(display = false){\r\n if(!MendingMilestone.eleven.isReached && !display) return DC.D1;\r\n const reqCheck = player.requirementChecks.mending.mmeleven;\r\n let mult = reqCheck <= 0 ? (3 - reqCheck) * 3 : [1, 1, 2, 2, 3, 4, 5, 7][8 - reqCheck];\r\n return new Decimal(mult);\r\n}\r\n\r\nexport function gainedMendingPoints(){\r\n let MvRGain = (player.reality.warped && !Pelle.isDoomed) ?\r\n (Decimal.pow(10000, Math.log10(player.antimatter.exponent / 9e15))) :\r\n DC.D1;\r\n\r\n MvRGain = MvRGain.timesEffectsOf(\r\n MendingUpgrade(1),\r\n Achievement(192),\r\n TimeStudy(321),\r\n TimeStudy(322),\r\n TimeStudy(323),\r\n CorruptionUpgrade(13),\r\n MendingUpgradeMultiplier,\r\n Ra.unlocks.boostMVRGain\r\n );\r\n MvRGain = MvRGain.times(mendingMilestoneElevenMultiplier());\r\n if (Ra.unlocks.mendingPointsGainMult.isUnlocked) MvRGain = MvRGain.times(Ra.totalPetLevel / 10).clampMin(1);\r\n\r\n return MvRGain;\r\n}\r\n\r\nexport function warpReality(){\r\n Currency.mendingPoints.subtract(new Decimal(1e7));\r\n Quotes.kohler.postWarp.show();\r\n player.reality.warped = true;\r\n}\r\n\r\nfunction totalEPMult() {\r\n return Pelle.isDisabled(\"EPMults\")\r\n ? (Ra.unlocks.unlockPelleGlyphEffects.isUnlocked) ? Pelle.specialGlyphEffect.time.timesEffectOf(PelleRifts.vacuum.milestones[2]).times(getAdjustedGlyphEffect(\"timeEP\")) : Pelle.specialGlyphEffect.time.timesEffectOf(PelleRifts.vacuum.milestones[2])\r\n : getAdjustedGlyphEffect(\"cursedEP\")\r\n .times(ShopPurchase.EPPurchases.currentMult)\r\n .timesEffectsOf(\r\n EternityUpgrade.epMult,\r\n TimeStudy(61),\r\n TimeStudy(122),\r\n TimeStudy(121),\r\n TimeStudy(123),\r\n RealityUpgrade(12),\r\n GlyphEffect.epMult\r\n );\r\n}\r\n\r\nexport function gainedEternityPoints(noSoftcap = false) {\r\n let devisor = 308 - PelleRifts.recursion.effectValue.toNumber();\r\n if(player.timestudy.studies.includes(307)) devisor = devisor - 30;\r\n let ep = DC.D5.pow(player.records.thisEternity.maxIP.plus(\r\n gainedInfinityPoints()).log10() / devisor - 0.7).times(totalEPMult());\r\n if (MendingMilestone.one.isReached){\r\n ep = ep.times(1e5);\r\n }\r\n if (Ra.unlocks.realityMachinesBoostIpAndEpGain.isUnlocked){\r\n ep = Decimal.pow(ep, Decimal.log10(Currency.realityMachines.value) / 100);\r\n }\r\n if (Teresa.isRunning) {\r\n ep = ep.pow(0.55);\r\n } else if (V.isRunning) {\r\n ep = ep.pow(0.5);\r\n } else if (V.isSuperRunning) {\r\n //ep = ep.log(1.0000000001).toDecimal();\r\n ep = ep.pow(0.000001);\r\n } else if (Laitela.isRunning) {\r\n ep = dilatedValueOf(ep);\r\n }\r\n if (GlyphAlteration.isAdded(\"time\")) {\r\n ep = ep.pow(getSecondaryGlyphEffect(\"timeEP\"));\r\n }\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let corruptionPrestigeLimits = corruptionPenalties.prestigeLimits[player.mending.corruption[0]];\r\n if(CorruptionUpgrade(16).isBought) corruptionPrestigeLimits = Math.min(1,corruptionPrestigeLimits*2)\r\n ep = ep.pow(corruptionPrestigeLimits)\r\n ep = ep.pow(corruptionPenalties.repSing.presGain[player.mending.corruption[8]])\r\n }\r\n\r\n if (ep.gte(Decimal.pow10(1e18)) && !noSoftcap) {\r\n ep = ep.div(Decimal.pow10(1e18))\r\n ep = ep.pow(0.162738495)\r\n ep = ep.times(Decimal.pow10(1e18))\r\n }\r\n return ep.floor();\r\n}\r\n\r\nexport function requiredIPForEP(epAmount) {\r\n return Decimal.pow10(308 * (Decimal.log(Decimal.divide(epAmount, totalEPMult()), 5) + 0.7))\r\n .clampMin(Number.MAX_VALUE);\r\n}\r\n\r\nexport function gainedGlyphLevel() {\r\n const glyphState = getGlyphLevelInputs();\r\n let rawLevel = Math.floor(glyphState.rawLevel);\r\n if (!isFinite(rawLevel)) rawLevel = 0;\r\n let actualLevel = Math.floor(glyphState.actualLevel);\r\n if (!isFinite(actualLevel)) actualLevel = 0;\r\n return {\r\n rawLevel,\r\n actualLevel\r\n };\r\n}\r\n\r\nexport function resetChallengeStuff() {\r\n player.chall2Pow = 1;\r\n player.chall3Pow = DC.D0_01;\r\n Currency.matter.reset();\r\n player.chall8TotalSacrifice = DC.D1;\r\n player.postC4Tier = 1;\r\n}\r\n\r\nexport function ratePerMinute(amount, time) {\r\n return Decimal.divide(amount, new Decimal(time).div(60 * 1000));\r\n}\r\n\r\n// eslint-disable-next-line max-params\r\nexport function addInfinityTime(time, realTime, ip, infinities) {\r\n let challenge = \"\";\r\n if (player.challenge.normal.current) challenge = `Normal Challenge ${player.challenge.normal.current}`;\r\n if (player.challenge.infinity.current) challenge = `Infinity Challenge ${player.challenge.infinity.current}`;\r\n player.records.recentInfinities.pop();\r\n player.records.recentInfinities.unshift([time, realTime, ip, infinities, challenge]);\r\n GameCache.bestRunIPPM.invalidate();\r\n}\r\n\r\nexport function resetInfinityRuns() {\r\n player.records.recentInfinities = Array.from(\r\n { length: 10 },\r\n () => [Number.MAX_VALUE, Number.MAX_VALUE, DC.D1, DC.D1, \"\"]\r\n );\r\n GameCache.bestRunIPPM.invalidate();\r\n}\r\n\r\n// Player gains 50% of infinities they would get based on their best infinities/hour crunch if they have the\r\n// milestone and turned on infinity autobuyer with 1 minute or less per crunch\r\nexport function getInfinitiedMilestoneReward(ms, considerMilestoneReached) {\r\n return Autobuyer.bigCrunch.autoInfinitiesAvailable(considerMilestoneReached)\r\n ? Decimal.floor(player.records.thisEternity.bestInfinitiesPerMs.times(ms).dividedBy(2))\r\n : DC.D0;\r\n}\r\n\r\n// eslint-disable-next-line max-params\r\nexport function addEternityTime(time, realTime, ep, eternities) {\r\n let challenge = \"\";\r\n if (player.challenge.eternity.current) {\r\n const currEC = player.challenge.eternity.current;\r\n const ec = EternityChallenge(currEC);\r\n const challText = player.dilation.active ? \"Dilated EC\" : \"Eternity Challenge\";\r\n challenge = `${challText} ${currEC} (${formatInt(ec.completions)}/${formatInt(ec.maxCompletions)})`;\r\n } else if (player.dilation.active) challenge = \"Time Dilation\";\r\n // If we call this function outside of dilation, it uses the existing AM and produces an erroneous number\r\n const gainedTP = player.dilation.active ? getTachyonGain() : DC.D0;\r\n player.records.recentEternities.pop();\r\n player.records.recentEternities.unshift([time, realTime, ep, eternities, challenge, gainedTP]);\r\n GameCache.averageRealTimePerEternity.invalidate();\r\n}\r\n\r\nexport function resetEternityRuns() {\r\n player.records.recentEternities = Array.from(\r\n { length: 10 },\r\n () => [Number.MAX_VALUE, Number.MAX_VALUE, DC.D1, DC.D1, \"\", DC.D0]\r\n );\r\n GameCache.averageRealTimePerEternity.invalidate();\r\n}\r\n\r\nexport function resetRealityRuns() {\r\n player.records.recentRealities = Array.from(\r\n { length: 10 },\r\n () => [Number.MAX_VALUE, Number.MAX_VALUE, DC.D1, DC.D1, \"\", DC.D0]\r\n );\r\n GameCache.averageRealTimePerEternity.invalidate();\r\n}\r\n\r\n// Player gains 50% of the eternities they would get if they continuously repeated their fastest eternity, if they\r\n// have the auto-eternity milestone and turned on eternity autobuyer with 0 EP\r\nexport function getEternitiedMilestoneReward(ms, considerMilestoneReached) {\r\n return Autobuyer.eternity.autoEternitiesAvailable(considerMilestoneReached)\r\n ? Decimal.floor(player.records.thisReality.bestEternitiesPerMs.times(ms).dividedBy(2))\r\n : DC.D0;\r\n}\r\n\r\nfunction isOfflineEPGainEnabled() {\r\n return player.options.offlineProgress && !Autobuyer.bigCrunch.autoInfinitiesAvailable() &&\r\n !Autobuyer.eternity.autoEternitiesAvailable();\r\n}\r\n\r\nexport function getOfflineEPGain(ms) {\r\n if (!EternityMilestone.autoEP.isReached || !isOfflineEPGainEnabled() || CorruptionData.isCorrupted) return DC.D0;\r\n return player.records.bestEternity.bestEPminReality.times(TimeSpan.fromMilliseconds(ms).totalMinutes.div(4));\r\n}\r\n\r\n// Note: realities and ampFactor must be distinct because there are a few things farther up which only multiply\r\n// reality count and none of the other things\r\n// eslint-disable-next-line max-params\r\nexport function addRealityTime(time, realTime, rm, level, realities, ampFactor, projIM) {\r\n let reality = \"\";\r\n const celestials = [Teresa, Effarig, Enslaved, V, Ra, Laitela];\r\n for (const cel of celestials) {\r\n if (cel.isRunning) reality = cel.displayName;\r\n }\r\n const shards = Effarig.shardsGained;\r\n player.records.recentRealities.pop();\r\n player.records.recentRealities.unshift([time, realTime, rm.times(ampFactor),\r\n realities, reality, level, shards.times(ampFactor), projIM]);\r\n}\r\n\r\nexport function gainedInfinities() {\r\n if (EternityChallenge(4).isRunning || Pelle.isDisabled(\"InfinitiedMults\")) {\r\n if(Ra.unlocks.unlockPelleGlyphEffects.isUnlocked && Pelle.isDoomed) return new Decimal(getAdjustedGlyphEffect(\"infinityinfmult\"));\r\n return DC.D1;\r\n }\r\n let infGain = Effects.max(\r\n 1,\r\n Achievement(87)\r\n ).toDecimal();\r\n\r\n infGain = infGain.timesEffectsOf(\r\n TimeStudy(32),\r\n RealityUpgrade(5),\r\n RealityUpgrade(7),\r\n Achievement(164),\r\n Ra.unlocks.continuousTTBoost.effects.infinity\r\n );\r\n infGain = infGain.times(getAdjustedGlyphEffect(\"infinityinfmult\"));\r\n infGain = infGain.powEffectOf(SingularityMilestone.infinitiedPow);\r\n if (Ra.unlocks.realitiesBoostInfinityAndEternityProduction.isUnlocked){\r\n let teresa90BaseExp=Math.pow((Math.log10(Currency.realities.value)/20), 1.111)\r\n if(teresa90BaseExp>1.5){\r\n teresa90BaseExp=1.5+Math.pow(teresa90BaseExp-1.5,0.75)\r\n }\r\n infGain = infGain.pow(teresa90BaseExp); //TODO: softcap this at ^1.5\r\n }\r\n return infGain;\r\n}\r\n\r\nexport function updateRefresh() {\r\n GameStorage.save();\r\n location.reload(true);\r\n}\r\n\r\nexport const GAME_SPEED_EFFECT = {\r\n FIXED_SPEED: 1,\r\n TIME_GLYPH: 2,\r\n BLACK_HOLE: 3,\r\n TIME_STORAGE: 4,\r\n SINGULARITY_MILESTONE: 5,\r\n NERFS: 6,\r\n EXPO_BLACK_HOLE: 7\r\n};\r\n\r\n/**\r\n * @param {number[]?} effectsToConsider A list of various game speed changing effects to apply when calculating\r\n * the game speed. If left undefined, all effects will be applied.\r\n * @param {number?} blackHolesActiveOverride A numerical value which forces all black holes up to its specified index\r\n * to be active for the purposes of game speed calculation. This is only used during offline black hole stuff.\r\n * @param {number?} expoBlackHolesActiveOverride A numerical value which forces all black holes up to its specified index\r\n * to be active for the purposes of game speed calculation. This is only used during offline black hole stuff.\r\n */\r\nexport function getGameSpeedupFactor(effectsToConsider, blackHolesActiveOverride) {\r\n let effects;\r\n if (effectsToConsider === undefined) {\r\n effects = [GAME_SPEED_EFFECT.FIXED_SPEED, GAME_SPEED_EFFECT.TIME_GLYPH, GAME_SPEED_EFFECT.BLACK_HOLE,\r\n GAME_SPEED_EFFECT.TIME_STORAGE, GAME_SPEED_EFFECT.SINGULARITY_MILESTONE, GAME_SPEED_EFFECT.NERFS, GAME_SPEED_EFFECT.EXPO_BLACK_HOLE];\r\n } else {\r\n effects = effectsToConsider;\r\n }\r\n\r\n if (effects.includes(GAME_SPEED_EFFECT.FIXED_SPEED)) {\r\n if (EternityChallenge(12).isRunning) {\r\n return player.mending.corruptionChallenge.corruptedMend ? corruptionPenalties.timeCompression.mult[player.mending.corruption[2]].div(1000) : new Decimal(1 / 1000);\r\n }\r\n }\r\n\r\n let factor = DC.D1;\r\n if (effects.includes(GAME_SPEED_EFFECT.BLACK_HOLE)) {\r\n if (BlackHoles.areNegative && !player.mending.corruptionChallenge.corruptedMend) {\r\n return factor.times(player.blackHoleNegative); //this should prevent < e-300 gamespeed outside of corruption (feel free to revert this)\r\n //factor = factor.times(player.blackHoleNegative);\r\n } else if (!BlackHoles.arePaused) {\r\n for (const blackHole of BlackHoles.list) {\r\n if (!blackHole.isUnlocked) break;\r\n const isActive = blackHolesActiveOverride === undefined\r\n ? blackHole.isActive\r\n : blackHole.id <= blackHolesActiveOverride;\r\n if (!isActive) break;\r\n factor = factor.times(Decimal.pow(blackHole.power, BlackHoles.unpauseAccelerationFactor));\r\n factor = factor.times(VUnlocks.achievementBH.effectOrDefault(1));\r\n factor = factor.times(VUnlocks.vAchMulti.effectOrDefault(1));\r\n /*if(ExpoBlackHole(1).isUnlocked && factor.gte(1)){\r\n for (const i of ExpoBlackHoles.list){ //I know we only have BH3, but this is futureproofing\r\n if (!i.isUnlocked) break;\r\n factor = Decimal.pow(factor, i.power);\r\n }\r\n }*/\r\n }\r\n }\r\n }\r\n\r\n if (effects.includes(GAME_SPEED_EFFECT.SINGULARITY_MILESTONE)) {\r\n factor = factor.times(SingularityMilestone.gamespeedFromSingularities.effectOrDefault(1));\r\n }\r\n\r\n if (effects.includes(GAME_SPEED_EFFECT.TIME_GLYPH)) {\r\n factor = factor.times(getAdjustedGlyphEffect(\"timespeed\"));\r\n factor = factor.pow(getAdjustedGlyphEffect(\"effarigblackhole\"));\r\n }\r\n\r\n if (ExpoBlackHole(1).isActive && !BlackHoles.areNegative) factor = Decimal.pow(factor, ExpoBlackHole(1).power);\r\n\r\n if (Enslaved.isStoringGameTime && effects.includes(GAME_SPEED_EFFECT.TIME_STORAGE)) {\r\n const storedTimeWeight = Ra.unlocks.autoPulseTime.canBeApplied ? 0.99 : 1;\r\n factor = factor.times((1 - storedTimeWeight)).add(1);\r\n }\r\n\r\n // These effects should always be active, but need to be disabled during offline black hole simulations because\r\n // otherwise it gets applied twice\r\n if (effects.includes(GAME_SPEED_EFFECT.NERFS)) {\r\n if (Effarig.isRunning) {\r\n factor = Effarig.multiplier(factor);\r\n } else if (Laitela.isRunning) {\r\n const nerfModifier = Math.clampMax(Time.thisRealityRealTime.totalMinutes.toNumber() / 10, 1);\r\n factor = Decimal.pow(factor, nerfModifier);\r\n }\r\n }\r\n\r\n if(player.celestials.ra.upgrades.has('enslavedUpgrade')) factor=factor.times(player.celestials.enslaved.storedReal);\r\n\r\n factor = factor.times(PelleUpgrade.timeSpeedMult.effectOrDefault(1));\r\n\r\n if (player.mending.corruptionChallenge.corruptedMend == true) {\r\n let timeCompressionPower = corruptionPenalties.timeCompression.power[player.mending.corruption[2]];\r\n let timeCompressionMult = corruptionPenalties.timeCompression.mult[player.mending.corruption[2]];\r\n if(CorruptionUpgrade(18).isBought){\r\n timeCompressionPower = Math.min(1,timeCompressionPower+0.01);\r\n timeCompressionMult = Decimal.pow(timeCompressionMult,0.1);\r\n }\r\n factor = factor.pow(timeCompressionPower)\r\n factor = factor.pow(corruptionPenalties.galWeak.hiddenSix[player.mending.corruption[3]])\r\n factor = factor.times(timeCompressionMult)\r\n }\r\n factor = factor.times(CorruptionUpgrade(2).effectOrDefault(1))\r\n factor = Decimal.clamp(factor, (player.mending.corruptionChallenge.corruptedMend || Ra.unlocks.uncapGamespeed.isUnlocked ? 0 : 1e-300), Ra.unlocks.uncapGamespeed.isUnlocked ? Decimal.pow10(1e300) : Decimal.pow10(300));\r\n // We will bypass capped gamespeed for below e-300 while corrupted incase some dumbass gets corruption before nameless 30\r\n \r\n let repeats = 1;\r\n while (factor.gte(Decimal.pow(getGameSpeedupSoftcaps(), repeats))) {\r\n factor = factor.div(getGameSpeedupSoftcaps());\r\n factor = factor.pow(getGameSpeedupSoftcapsExp());\r\n factor = factor.times(getGameSpeedupSoftcaps());\r\n repeats += 1;\r\n }\r\n /*if (factor.gte(getGameSpeedupSoftcaps())) {\r\n let x = getGameSpeedupSoftcapsExp();\r\n factor = factor.div(getGameSpeedupSoftcaps());\r\n factor = factor.pow(x); //generalized in case of future upgrades\r\n factor = factor.times(getGameSpeedupSoftcaps());\r\n } // Prevent gamespeed from going fucking ballistic*/\r\n\r\n return factor;\r\n}\r\n\r\nexport function getGameSpeedupSoftcaps(capNumber = 1){ //attempt to have all future GS softcaps in 1 function, capNumber is the softcap number (1 is the first, etc)\r\n switch(capNumber){\r\n case 1:\r\n default:\r\n return new Decimal(1e308);\r\n }\r\n\r\n}\r\nexport function getGameSpeedupSoftcapsExp(capNumber = 1){ \r\n switch(capNumber){\r\n case 1: {\r\n let x = 0.4321;\r\n x += WarpUpgrade(3).effectOrDefault(0);\r\n return x;\r\n }\r\n default:\r\n return 0.4321;\r\n }\r\n\r\n}\r\n\r\nexport function getGameSpeedupForDisplay() {\r\n const speedFactor = getGameSpeedupFactor();\r\n if (\r\n Enslaved.isAutoReleasing &&\r\n Enslaved.canRelease(true) &&\r\n !BlackHoles.areNegative &&\r\n !Pelle.isDisabled(\"blackhole\")\r\n ) {\r\n return Decimal.max(Enslaved.autoReleaseSpeed, speedFactor);\r\n }\r\n return speedFactor;\r\n}\r\n\r\nexport function getBaseGameSpeedup(){\r\n let x = getGameSpeedupFactor();\r\n\r\n for (const i of ExpoBlackHoles.list){ //I know we only have BH3, but this is futureproofing\r\n if (!i.isUnlocked) break;\r\n x = Decimal.pow(x, 1 / i.power);\r\n }\r\n return x;\r\n}\r\n// Separated out for organization; however this is also used in more than one spot in gameLoop() as well. Returns\r\n// true if the rest of the game loop should be skipped\r\nexport function realTimeMechanics(realDiff) {\r\n // Ra memory generation bypasses stored real time, but memory chunk generation is disabled when storing real time.\r\n // This is in order to prevent players from using time inside of Ra's reality for amplification as well\r\n Ra.memoryTick(realDiff, !Enslaved.isStoringRealTime);\r\n if (Ra.unlocks.alchSetToCapAndCapIncrease.isUnlocked) {\r\n Ra.applyAlchemyReactionsAuto()\r\n }\r\n if (AlchemyResource.momentum.isUnlocked) {\r\n player.celestials.ra.momentumTime += realDiff * Achievement(175).effectOrDefault(1);\r\n }\r\n\r\n DarkMatterDimensions.tick(realDiff);\r\n MultiversalDimensions.tick(realDiff);\r\n\r\n if(Ra.unlocks.passiveAnnihilationGen.isUnlocked){\r\n player.celestials.laitela.darkMatterMult += Laitela.darkMatterMultGain * realDiff / 500; //Think its now 50%/s? (Also this is real time why was it in gametime mechanics?)\r\n }\r\n\r\n // When storing real time, skip everything else having to do with production once stats are updated\r\n if (Enslaved.isStoringRealTime) {\r\n player.records.realTimePlayed += realDiff;\r\n player.records.thisInfinity.realTime += realDiff;\r\n player.records.thisEternity.realTime += realDiff;\r\n player.records.thisReality.realTime += realDiff;\r\n Enslaved.storeRealTime();\r\n // Most autobuyers will only tick usefully on the very first tick, but this needs to be here in order to allow\r\n // the autobuyers unaffected by time storage to tick as well\r\n Autobuyers.tick();\r\n GameUI.update();\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n// \"passDiff\" is in ms. It is only unspecified when it's being called normally and not due to simulating time, in which\r\n// case it uses the gap between now and the last time the function was called (capped at a day). This is on average\r\n// equal to the update rate, but may be much larger if the game was unfocused or the device went to sleep for some time.\r\n// eslint-disable-next-line complexity\r\nexport function gameLoop(passDiff, options = {}) {\r\n PerformanceStats.start(\"Frame Time\");\r\n PerformanceStats.start(\"Game Update\");\r\n\r\n EventHub.dispatch(GAME_EVENT.GAME_TICK_BEFORE);\r\n\r\n // In certain cases we want to allow the player to interact with the game's settings and tabs, but prevent any actual\r\n // resource generation from happening - in these cases, we have to make sure this all comes before the hibernation\r\n // check or else it'll attempt to run the game anyway\r\n if (Speedrun.isPausedAtStart() || (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked())) {\r\n GameUI.update();\r\n return;\r\n }\r\n\r\n if (Player.canMend && player.requirementChecks.reality.maxGlyphs < player.requirementChecks.mending.mmeleven) {\r\n player.requirementChecks.mending.mmeleven = player.requirementChecks.reality.maxGlyphs\r\n }\r\n let diff = passDiff;\r\n const thisUpdate = Date.now();\r\n const realDiff = diff === undefined\r\n ? Math.clamp(thisUpdate - player.lastUpdate, 1, 8.64e7) * (player.testSpeed ?? 1)\r\n : diff * (player.testSpeed ?? 1);\r\n if (!GameStorage.ignoreBackupTimer) player.backupTimer += realDiff;\r\n\r\n // For single ticks longer than a minute from the GameInterval loop, we assume that the device has gone to sleep or\r\n // hibernation - in those cases we stop the interval and simulate time instead. The gameLoop interval automatically\r\n // restarts itself at the end of the simulateTime call. This will not trigger for an unfocused game, as this seems to\r\n // result in a ~1 second tick rate for browsers.\r\n // Note that we have to explicitly call all the real-time mechanics with the existing value of realDiff, because\r\n // simply letting it run through simulateTime seems to result in it using zero\r\n CorruptionData.update() //We call this here since it resets every refresh, but we cant have it directly point to player because else multiplier tab complains\r\n if (player.options.hibernationCatchup && passDiff === undefined && realDiff > 6e4 * (player.testSpeed ?? 1)) {\r\n GameIntervals.gameLoop.stop();\r\n simulateTime(realDiff / 1000, true);\r\n realTimeMechanics(realDiff);\r\n return;\r\n }\r\n\r\n //RaUpgrade3 stuff--sxy\r\n if(player.celestials.ra.upgrades.has('enslavedUpgrade')) player.celestials.enslaved.storedReal=Enslaved.storedRealTimeCap;\r\n\r\n // Run all the functions which only depend on real time and not game time, skipping the rest of the loop if needed\r\n if (realTimeMechanics(realDiff)) return;\r\n\r\n // Ra-Nameless auto-release stored time (once every 5 ticks)\r\n if (Enslaved.isAutoReleasing) {\r\n Enslaved.autoReleaseTick++;\r\n }\r\n if (Enslaved.autoReleaseTick >= 5) {\r\n Enslaved.autoReleaseTick = 0;\r\n Enslaved.useStoredTime(true);\r\n Enslaved.isReleaseTick = true;\r\n } else if (!Enslaved.isReleaseTick) {\r\n Enslaved.nextTickDiff = realDiff;\r\n }\r\n if (diff === undefined) {\r\n diff = new Decimal(Enslaved.nextTickDiff);\r\n }\r\n\r\n if (player.records.realTimePlayed instanceof Decimal) {\r\n throw new Error(\"Something fucked up: Real time played is decimal\");\r\n }\r\n\r\n Autobuyers.tick();\r\n Tutorial.tutorialLoop();\r\n\r\n if (Achievement(165).isUnlocked && player.celestials.effarig.autoAdjustGlyphWeights) {\r\n autoAdjustGlyphWeights();\r\n }\r\n\r\n // We do these after autobuyers, since it's possible something there might\r\n // change a multiplier.\r\n GameCache.antimatterDimensionCommonMultiplier.invalidate();\r\n GameCache.antimatterDimensionFinalMultipliers.invalidate();\r\n GameCache.infinityDimensionCommonMultiplier.invalidate();\r\n GameCache.timeDimensionCommonMultiplier.invalidate();\r\n GameCache.totalIPMult.invalidate();\r\n\r\n const blackHoleDiff = realDiff;\r\n const fixedSpeedActive = EternityChallenge(12).isRunning;\r\n if (!Enslaved.isReleaseTick && !fixedSpeedActive) {\r\n let speedFactor;\r\n if (options.blackHoleSpeedup === undefined) {\r\n speedFactor = getGameSpeedupFactor();\r\n } else {\r\n // This is only called from simulateTime() and is calculated externally in order to avoid weirdness when game\r\n // speed is directly nerfed\r\n speedFactor = options.blackHoleSpeedup;\r\n }\r\n\r\n diff = new Decimal(diff)\r\n if (Enslaved.isStoringGameTime && !fixedSpeedActive) {\r\n // These variables are the actual game speed used and the game speed unaffected by time storage, respectively\r\n const reducedTimeFactor = getGameSpeedupFactor();\r\n const totalTimeFactor = getGameSpeedupFactor([GAME_SPEED_EFFECT.FIXED_SPEED, GAME_SPEED_EFFECT.TIME_GLYPH,\r\n GAME_SPEED_EFFECT.BLACK_HOLE, GAME_SPEED_EFFECT.SINGULARITY_MILESTONE]);\r\n const amplification = Ra.unlocks.improvedStoredTime.effects.gameTimeAmplification.effectOrDefault(1);\r\n const beforeStore = new Decimal(player.celestials.enslaved.stored);\r\n let x = new Decimal(player.celestials.enslaved.stored).plus(diff.times(totalTimeFactor).times(amplification))\r\n let y = new Decimal(Enslaved.timeCap())\r\n player.celestials.enslaved.stored = Decimal.min(x, y); // This code is split into 3 else it just has a panic attack for some reason\r\n Enslaved.currentBlackHoleStoreAmountPerMs = new Decimal(player.celestials.enslaved.stored.sub(beforeStore)).div(diff);\r\n speedFactor = reducedTimeFactor;\r\n }\r\n diff = diff.times(speedFactor);\r\n } else if (fixedSpeedActive) {\r\n diff = new Decimal(diff).times(getGameSpeedupFactor());\r\n Enslaved.currentBlackHoleStoreAmountPerMs = new Decimal(0);\r\n }\r\n player.celestials.ra.peakGamespeed = Decimal.max(player.celestials.ra.peakGamespeed, getGameSpeedupFactor());\r\n Enslaved.isReleaseTick = false;\r\n\r\n if(Ra.unlocks.retroactiveTeresaRealityReward.isUnlocked) {\r\n const currentBest = player.celestials.teresa.bestRunAM;\r\n player.celestials.teresa.bestRunAM = (player.records.totalAntimatter.sqrt().max(currentBest));\r\n }\r\n\r\n if(Ra.unlocks.unlock3rdBH.isUnlocked){\r\n ExpoBlackHoles.unlock();\r\n }\r\n\r\n if(Ra.unlocks.rautobuyers.isUnlocked && !player.celestials.ra.permanentMemories.ra2){\r\n player.celestials.ra.permanentMemories.ra2 = true;\r\n }\r\n\r\n if(Ra.unlocks.dmdAuto1.isUnlocked && !player.celestials.ra.permanentMemories.lai50){\r\n player.celestials.ra.permanentMemories.lai50 = true;\r\n }\r\n\r\n if(Ra.unlocks.dmdAuto2.isUnlocked && !player.celestials.ra.permanentMemories.lai65){\r\n player.celestials.ra.permanentMemories.lai65 = true;\r\n }\r\n\r\n if(!document.hasFocus()){\r\n player.celestials.laitela.isHoldingLClick = false;\r\n }\r\n\r\n if(player.celestials.laitela.isHoldingLClick && Date.now() - player.celestials.laitela.holdStart >= 200){\r\n const dim = DarkMatterDimension(player.celestials.laitela.heldTier);\r\n switch(player.celestials.laitela.heldType){\r\n case \"interval\":\r\n const isIntervalCapped = dim.interval <= dim.intervalPurchaseCap;\r\n if (isIntervalCapped) dim.ascend();\r\n else dim.buyInterval();\r\n break;\r\n case \"DM\":\r\n dim.buyPowerDM();\r\n break;\r\n case \"DE\":\r\n dim.buyPowerDE();\r\n break;\r\n default:\r\n throw new Error(\"Console user who doesn't know what you are doing you are very funny\");\r\n }\r\n }\r\n\r\n if(Pelle.isDoomed && Ra.unlocks.pelleXP.isUnlocked){\r\n if (GalaxyGenerator.generatedGalaxies === 0) player.records.thisReality.remWithoutGG = Currency.remnants.value;\r\n if(player.records.thisReality.remWithoutGG > player.records.bestReality.remWithoutGG){\r\n player.records.bestReality.remWithoutGG = player.records.thisReality.remWithoutGG;\r\n }\r\n }\r\n\r\n // These need to all be done consecutively in order to minimize the chance of a reset occurring between real time\r\n // updating and game time updating. This is only particularly noticeable when game speed is 1 and the player\r\n // expects to see identical numbers. We also don't increment the timers if the game has been beaten (Achievement 188)\r\n if (!Achievement(188).isUnlocked || (PlayerProgress.mendingUnlocked() && !player.isGameEnd)) {\r\n player.records.realTimeDoomed = Math.min(1e308, player.records.realTimeDoomed + realDiff);\r\n player.records.realTimePlayed = Math.min(1e308,player.records.realTimePlayed + realDiff);\r\n player.records.thisInfinity.realTime = Math.min(1e308,player.records.thisInfinity.realTime + realDiff);\r\n player.records.thisEternity.realTime= Math.min(1e308, player.records.thisEternity.realTime + realDiff);\r\n\r\n player.records.thisReality.realTime = Math.min(1e308, player.records.thisReality.realTime + realDiff);\r\n player.records.thisMend.realTime = Math.min(1e308, player.records.thisMend.realTime + realDiff);\r\n player.records.totalTimePlayed = player.records.totalTimePlayed.add(diff);\r\n player.records.thisInfinity.time = player.records.thisInfinity.time.add(diff);\r\n if (Enslaved.isRunning && Enslaved.feltEternity && !EternityChallenge(12).isRunning) {\r\n player.records.thisEternity.time = player.records.thisEternity.time.add(diff.times(Currency.eternities.value.clampMax(1e66).add(1)));\r\n }\r\n else {\r\n player.records.thisEternity.time = player.records.thisEternity.time.add(diff);\r\n }\r\n player.records.thisReality.time = player.records.thisReality.time.add(diff);\r\n player.records.thisMend.time = new Decimal(player.records.thisMend.time).add(diff);\r\n }\r\n\r\n DeltaTimeState.update(realDiff, diff);\r\n\r\n updateNormalAndInfinityChallenges(diff);\r\n\r\n // IP generation is broken into a couple of places in gameLoop; changing that might change the\r\n // behavior of eternity farming.\r\n preProductionGenerateIP(diff);\r\n\r\n if (!Pelle.isDoomed) {\r\n passivePrestigeGen();\r\n }\r\n\r\n\r\n applyAutoprestige(realDiff);\r\n updateImaginaryMachines(realDiff);\r\n\r\n const uncountabilityGain = Time.unscaledDeltaTime.totalSeconds.times(AlchemyResource.uncountability.effectValue).toNumber();\r\n Currency.realities.add(uncountabilityGain);\r\n Currency.perkPoints.add(uncountabilityGain);\r\n\r\n if (Perk.autocompleteEC1.canBeApplied) player.reality.lastAutoEC += realDiff;\r\n\r\n EternityChallenge(12).tryFail();\r\n Achievements._power.invalidate();\r\n\r\n TimeDimensions.tick(diff);\r\n InfinityDimensions.tick(diff);\r\n AntimatterDimensions.tick(diff);\r\n\r\n const gain = Math.clampMin(FreeTickspeed.fromShards(Currency.timeShards.value).newAmount - player.totalTickGained, 0);\r\n player.totalTickGained += gain;\r\n\r\n updatePrestigeRates();\r\n tryCompleteInfinityChallenges();\r\n\r\n EternityChallenges.autoComplete.tick();\r\n\r\n replicantiLoop(diff);\r\n\r\n if (PlayerProgress.dilationUnlocked()) {\r\n Currency.dilatedTime.add(getDilationGainPerSecond().times(new Decimal(diff).div(1000)));\r\n }\r\n\r\n updateTachyonGalaxies();\r\n Currency.timeTheorems.add(getTTPerSecond().times(new Decimal(diff).div(1000)));\r\n InfinityDimensions.tryAutoUnlock();\r\n\r\n BlackHoles.updatePhases(blackHoleDiff);\r\n\r\n // Unlocks dilation at a certain total TT count for free, but we add the cost first in order to make\r\n // sure that TT count doesn't go negative and that we can actually buy it. This technically bumps the max theorem\r\n // amount up as well, but at this point of the game 5k TT is insignificant to basically all other sources of TT.\r\n if (Ra.unlocks.autoUnlockDilation.canBeApplied &&\r\n Currency.timeTheorems.max.gte(TimeStudy.dilation.totalTimeTheoremRequirement) &&\r\n !isInCelestialReality() &&\r\n !Pelle.isDoomed) {\r\n Currency.timeTheorems.add(TimeStudy.dilation.cost);\r\n TimeStudy.dilation.purchase(true);\r\n }\r\n\r\n applyAutoUnlockPerks();\r\n if (GlyphSelection.active) GlyphSelection.update(gainedGlyphLevel());\r\n\r\n // There are some external checks which prevent excessive resource gain with Teresa-25; it may give TP outside of\r\n // dilation, but the TP gain function is also coded to behave differently if it's active\r\n const teresa1 = player.dilation.active && Ra.unlocks.autoTP.canBeApplied;\r\n const teresa25 = !isInCelestialReality() && Ra.unlocks.unlockDilationStartingTP.canBeApplied;\r\n if ((teresa1 || teresa25) && !Pelle.isDoomed) rewardTP();\r\n\r\n if (Enslaved.canTickHintTimer) {\r\n player.celestials.enslaved.hintUnlockProgress += Enslaved.isRunning ? realDiff : (realDiff * 0.4);\r\n if (player.celestials.enslaved.hintUnlockProgress >= TimeSpan.fromHours(5).totalMilliseconds.toNumber()) {\r\n EnslavedProgress.hintsUnlocked.giveProgress();\r\n Enslaved.quotes.hintUnlock.show();\r\n }\r\n }\r\n\r\n Ra.raGainPointLoop(realDiff);\r\n laitelaRealityTick(realDiff);\r\n Achievements.autoAchieveUpdate(diff);\r\n V.checkForUnlocks();\r\n AutomatorBackend.update(realDiff);\r\n Pelle.gameLoop(realDiff);\r\n GalaxyGenerator.loop(realDiff);\r\n GameEnd.gameLoop(realDiff);\r\n\r\n if (!Enslaved.canAmplify) {\r\n Enslaved.boostReality = false;\r\n }\r\n\r\n // Stopping these checks after CREDITS_START reduces lag and allows for the glyph customization modal to appear\r\n if (GameEnd.endState < END_STATE_MARKERS.CREDITS_START) {\r\n if (Tabs.current.isPermanentlyHidden) {\r\n const tab = Tabs.all.reverse().find(t => !t.isPermanentlyHidden && t.id !== 10);\r\n if (tab) tab.show(true);\r\n else [...Tab.dimensions.subtabs].reverse().find(t => !t.isPermanentlyHidden).show(true);\r\n }\r\n\r\n if (Tabs.current.subtabs.find(t => t.isOpen).isPermanentlyHidden) {\r\n [...Tab.dimensions.subtabs].reverse().find(t => !t.isPermanentlyHidden).show(true);\r\n }\r\n }\r\n\r\n EventHub.dispatch(GAME_EVENT.GAME_TICK_AFTER);\r\n GameUI.update();\r\n player.lastUpdate = thisUpdate;\r\n PerformanceStats.end(\"Game Update\");\r\n}\r\n\r\nfunction updatePrestigeRates() {\r\n const currentIPmin = gainedInfinityPoints().dividedBy(Decimal.clampMin(0.0005, Time.thisInfinityRealTime.totalMinutes).toNumber());\r\n if (currentIPmin.gt(player.records.thisInfinity.bestIPmin) && Player.canCrunch) {\r\n player.records.thisInfinity.bestIPmin = currentIPmin;\r\n player.records.thisInfinity.bestIPminVal = gainedInfinityPoints();\r\n }\r\n\r\n const currentEPmin = gainedEternityPoints().dividedBy(Decimal.clampMin(0.0005, Time.thisEternityRealTime.totalMinutes).toNumber());\r\n if (currentEPmin.gt(player.records.thisEternity.bestEPmin) && Player.canEternity) {\r\n player.records.thisEternity.bestEPmin = currentEPmin;\r\n player.records.thisEternity.bestEPminVal = gainedEternityPoints();\r\n }\r\n\r\n const currentRSmin = Effarig.shardsGained.div(Decimal.clampMin(0.0005, Time.thisRealityRealTime.totalMinutes));\r\n if (currentRSmin.gte(player.records.thisReality.bestRSmin) && isRealityAvailable()) {\r\n player.records.thisReality.bestRSmin = currentRSmin;\r\n player.records.thisReality.bestRSminVal = Effarig.shardsGained;\r\n }\r\n}\r\n\r\nfunction passivePrestigeGen() {\r\n let eternitiedGain = DC.D0;\r\n if (RealityUpgrade(14).isBought) {\r\n eternitiedGain = DC.D1.timesEffectsOf(\r\n Achievement(113),\r\n RealityUpgrade(3),\r\n RealityUpgrade(14)\r\n );\r\n eternitiedGain = Decimal.times(eternitiedGain, getAdjustedGlyphEffect(\"timeetermult\"));\r\n eternitiedGain = new Decimal(Time.deltaTime).times(\r\n Decimal.pow(eternitiedGain, AlchemyResource.eternity.effectValue));\r\n player.reality.partEternitied = player.reality.partEternitied.plus(eternitiedGain);\r\n Currency.eternities.add(player.reality.partEternitied.floor());\r\n player.reality.partEternitied = player.reality.partEternitied.sub(player.reality.partEternitied.floor());\r\n }\r\n\r\n if (!EternityChallenge(4).isRunning) {\r\n let infGen = DC.D0;\r\n if (BreakInfinityUpgrade.infinitiedGen.isBought) {\r\n // Multipliers are done this way to explicitly exclude ach87 and TS32\r\n infGen = infGen.plus(Time.deltaTimeMs.div(Decimal.clampMin(50, player.records.bestInfinity.time)).div(2));\r\n infGen = infGen.timesEffectsOf(\r\n RealityUpgrade(5),\r\n RealityUpgrade(7),\r\n Ra.unlocks.continuousTTBoost.effects.infinity\r\n );\r\n infGen = infGen.times(getAdjustedGlyphEffect(\"infinityinfmult\"));\r\n }\r\n if (RealityUpgrade(11).isBought) {\r\n infGen = infGen.plus(RealityUpgrade(11).effectValue.times(Time.deltaTime));\r\n }\r\n if (EffarigUnlock.eternity.isUnlocked) {\r\n // We consider half of the eternities we gained above this tick\r\n // to have been gained before the infinities, and thus not to\r\n // count here. This gives us the desirable behavior that\r\n // infinities and eternities gained overall will be the same\r\n // for two ticks as for one tick of twice the length.\r\n infGen = infGen.plus(gainedInfinities().times(\r\n Currency.eternities.value.minus(eternitiedGain.div(2).floor())).times(Time.deltaTime));\r\n }\r\n infGen = infGen.plus(player.partInfinitied);\r\n Currency.infinities.add(infGen.floor());\r\n player.partInfinitied = infGen.minus(infGen.floor()).toNumber();\r\n }\r\n}\r\n\r\n// Applies all perks which automatically unlock things when passing certain thresholds, needs to be checked every tick\r\nfunction applyAutoUnlockPerks() {\r\n if (!TimeDimension(8).isUnlocked && Perk.autounlockTD.canBeApplied) {\r\n for (let dim = 5; dim <= 8; ++dim) TimeStudy.timeDimension(dim).purchase();\r\n }\r\n if (Perk.autounlockDilation3.canBeApplied) buyDilationUpgrade(DilationUpgrade.ttGenerator.id);\r\n if (Perk.autounlockReality.canBeApplied) TimeStudy.reality.purchase(true);\r\n applyEU2();\r\n}\r\n\r\nfunction laitelaRealityTick(realDiff) {\r\n const laitelaInfo = player.celestials.laitela;\r\n if (!Laitela.isRunning) return;\r\n if (laitelaInfo.entropy >= 0) {\r\n laitelaInfo.entropy += (realDiff / 1000) * Laitela.entropyGainPerSecond;\r\n }\r\n\r\n // Setting entropy to -1 on completion prevents the modal from showing up repeatedly\r\n if (laitelaInfo.entropy >= 1) {\r\n let completionText = `Lai'tela's Reality has been destabilized after ${Time.thisRealityRealTime.toStringShort()}.`;\r\n laitelaInfo.entropy = -1;\r\n const oldInfo = {\r\n fastestCompletion: laitelaInfo.fastestCompletion,\r\n difficultyTier: laitelaInfo.difficultyTier,\r\n realityReward: Laitela.realityReward\r\n };\r\n laitelaInfo.thisCompletion = Time.thisRealityRealTime.totalSeconds.toNumber();\r\n laitelaInfo.fastestCompletion = Math.min(laitelaInfo.thisCompletion, laitelaInfo.fastestCompletion);\r\n clearCelestialRuns();\r\n if (Time.thisRealityRealTime.totalSeconds.lt(30)) {\r\n laitelaInfo.difficultyTier++;\r\n laitelaInfo.fastestCompletion = 300;\r\n completionText += laitelaBeatText(Laitela.maxAllowedDimension + 1);\r\n for (const quote of Laitela.quotes.all) {\r\n if (quote.requirement) {\r\n quote.show();\r\n }\r\n }\r\n }\r\n if (Laitela.realityReward > oldInfo.realityReward) {\r\n completionText += `

Dark Matter Multiplier: ${formatX(oldInfo.realityReward, 2, 2)}\r\n ➜ ${formatX(Laitela.realityReward, 2, 2)}`;\r\n if (oldInfo.fastestCompletion === 3600 || oldInfo.fastestCompletion === 300 && oldInfo.difficultyTier > 0) {\r\n if (Time.thisRealityRealTime.totalSeconds.lt(30)) {\r\n // First attempt - destabilising\r\n completionText += `
Best Completion Time: None ➜ Destabilized\r\n
Highest Active Dimension: ${formatInt(8 - oldInfo.difficultyTier)} ➜\r\n ${formatInt(8 - laitelaInfo.difficultyTier)}`;\r\n } else {\r\n // First attempt - not destabilising\r\n completionText += `
Best Completion Time: None ➜\r\n ${TimeSpan.fromSeconds(laitelaInfo.fastestCompletion).toStringShort()}\r\n
Highest Active Dimension: ${formatInt(8 - laitelaInfo.difficultyTier)}`;\r\n }\r\n } else if (Time.thisRealityRealTime.totalSeconds.lt(30) ) {\r\n // Second+ attempt - destabilising\r\n completionText += `
Best Completion Time: ${TimeSpan.fromSeconds(oldInfo.fastestCompletion).toStringShort()}\r\n ➜ Destabilized\r\n
Highest Active Dimension: ${formatInt(8 - oldInfo.difficultyTier)} ➜\r\n ${formatInt(8 - laitelaInfo.difficultyTier)}`;\r\n } else {\r\n // Second+ attempt - not destabilising\r\n completionText += `
Best Completion Time: ${TimeSpan.fromSeconds(oldInfo.fastestCompletion).toStringShort()}\r\n ➜ ${TimeSpan.fromSeconds(laitelaInfo.fastestCompletion).toStringShort()}\r\n
Highest Active Dimension: ${formatInt(8 - oldInfo.difficultyTier)}`;\r\n }\r\n player.records.bestReality.laitelaSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n } else {\r\n completionText += ` You need to destabilize in faster than\r\n ${TimeSpan.fromSeconds(laitelaInfo.fastestCompletion).toStringShort()} to improve your multiplier.`;\r\n }\r\n if (Laitela.isFullyDestabilized) SpeedrunMilestones(24).tryComplete();\r\n Modal.message.show(completionText, {}, 2);\r\n }\r\n}\r\n\r\nfunction laitelaBeatText(disabledDim) {\r\n switch (disabledDim) {\r\n case 1: return `

Lai'tela's Reality will now completely disable production from all Dimensions.\r\n The Reality can still be entered, but further destabilization is no longer possible.\r\n For completely destabilizing the Reality, you also get an additional ${formatX(8)} to Dark Energy gain.`;\r\n case 2: return `

Lai'tela's Reality will now disable production from all 2nd Dimensions during\r\n future runs, but the reward will be ${formatInt(100)} times stronger than before. Completely destabilizing\r\n the Reality for the final Dimension will give you an additional ${formatX(8)} to Dark Energy gain.`;\r\n case 3: return `

Lai'tela's Reality will now disable production from all 3rd Dimensions during\r\n future runs, but the reward will be ${formatInt(100)} times stronger than before.`;\r\n case 8: return `

Lai'tela's Reality will now disable production from all 8th Dimensions during\r\n future runs, but the reward will be ${formatInt(100)} times stronger than before. This boost can be\r\n repeated for each remaining Dimension by reaching destabilization within ${formatInt(30)} seconds again.`;\r\n default: return `

Lai'tela's Reality will now disable production from all\r\n ${disabledDim}th Dimensions during future runs, but the reward will be\r\n ${formatInt(100)} times stronger than before.`;\r\n }\r\n}\r\n\r\n// This gives IP/EP/RM from the respective upgrades that reward the prestige currencies continuously\r\nfunction applyAutoprestige(diff) {\r\n if(Ra.unlocks.alchSetToCapAndCapIncrease.isUnlocked){\r\n player.celestials.ra.alchemy = Array.repeat(0, 21) //This just sets all alch resources to the cap, probably will be changed to be passive\r\n .map(() => ({\r\n amount: Ra.alchemyResourceCap,\r\n reaction: false\r\n }));\r\n }\r\n if (Ra.unlocks.passiveRelicShardGain.isUnlocked){\r\n Currency.relicShards.add(Effarig.shardsGained);\r\n }\r\n if (MendingUpgrade(5).isBought && !Pelle.isDoomed){\r\n Currency.infinityPoints.add(gainedInfinityPoints().times(CorruptionData.isCorrupted ? 0.01 : Time.deltaTime.div(100)).timesEffectOf(Ra.unlocks.continuousTTBoost.effects.autoPrestige));\r\n }\r\n else{\r\n Currency.infinityPoints.add(TimeStudy(181).effectOrDefault(0));\r\n }\r\n\r\n if (TeresaUnlocks.epGen.canBeApplied || (MendingUpgrade(5).isBought && !Pelle.isDoomed)) {\r\n Currency.eternityPoints.add(player.records.thisEternity.bestEPmin.times(DC.D0_01).times(CorruptionData.isCorrupted ? diff / (1000) : getGameSpeedupFactor().times(diff).div(1000)).timesEffectOf(Ra.unlocks.continuousTTBoost.effects.autoPrestige));\r\n }\r\n\r\n if (InfinityUpgrade.ipGen.isCharged || MendingUpgrade(5).isBought) {\r\n const addedRM = MachineHandler.gainedRealityMachines\r\n .timesEffectsOf(InfinityUpgrade.ipGen.chargedEffect)\r\n .times(diff / 1000);\r\n Currency.realityMachines.add(addedRM);\r\n }\r\n\r\n if(Pelle.isDoomed && MendingUpgrade(5).isBought){\r\n let am = player.celestials.pelle.records.totalAntimatter.plus(1).log10();\r\n let ip = player.celestials.pelle.records.totalInfinityPoints.plus(1).log10();\r\n let ep = player.celestials.pelle.records.totalEternityPoints.plus(1).log10();\r\n let MMBoostRem = MendingMilestone.one.isReached ? 1.1 : 1;\r\n\r\n if (PelleStrikes.dilation.hasStrike) {\r\n am *= 500;\r\n ip *= 10;\r\n ep *= 5;\r\n }\r\n\r\n const gain = (\r\n ((Math.log10(am + 2) + Math.log10(ip + 2) + Math.log10(ep + 2)) * MMBoostRem)/ 1.64\r\n ) ** 7.5;\r\n let curr = player.celestials.pelle.remnants;\r\n player.celestials.pelle.remnants = Math.max(curr, gain);\r\n }\r\n\r\n if (PelleRifts.chaos.milestones[2].canBeApplied) {\r\n Currency.eternityPoints.add(gainedEternityPoints().times(DC.D0_1).times(diff / 1000));\r\n }\r\n}\r\n\r\nfunction updateImaginaryMachines(diff) {\r\n MachineHandler.updateIMCap();\r\n Currency.imaginaryMachines.add(MachineHandler.gainedImaginaryMachines(diff));\r\n}\r\n\r\nfunction updateTachyonGalaxies() {\r\n const tachyonGalaxyMult = Effects.max(1, DilationUpgrade.doubleGalaxies);\r\n const tachyonGalaxyThreshold = 1000;\r\n const thresholdMult = getTachyonGalaxyMult();\r\n /*\r\n base = bulkBuyBinarySearch(Currency.dilatedTime.value,\r\n {\r\n costFunction: x => getTachyonGalaxyMult(undefined, x).pow(x),\r\n firstCost: 1000,\r\n cumulative: false,\r\n },\r\n 0)\r\n */\r\n player.dilation.baseTachyonGalaxies = Math.min(1e6, Math.max(player.dilation.baseTachyonGalaxies,\r\n 1 + Math.floor(Decimal.log(Currency.dilatedTime.value.dividedBy(1000), thresholdMult))));\r\n player.dilation.nextThreshold = DC.E3.times(new Decimal(thresholdMult)\r\n .pow(player.dilation.baseTachyonGalaxies));\r\n player.dilation.totalTachyonGalaxies = (player.dilation.baseTachyonGalaxies + Math.min(500, Effects.max(0, DilationUpgrade.doubleGalaxies) * player.dilation.baseTachyonGalaxies)) * DilationUpgrade.galaxyMultiplier.effectValue;\r\n}\r\n\r\nexport function getTTPerSecond() {\r\n // All TT multipliers (note that this is equal to 1 pre-Ra)\r\n let ttMult = Effects.product(\r\n Achievement(137),\r\n Achievement(156),\r\n ).toDecimal().times(Ra.unlocks.achievementTTMult.config.canBeApplied ? Ra.unlocks.achievementTTMult.config.effectValue : 1).times(Ra.unlocks.continuousTTBoost.config.canBeApplied ? Ra.unlocks.continuousTTBoost.effects.ttGen : 1);\r\n if (GlyphAlteration.isAdded(\"dilation\")) ttMult.times(getSecondaryGlyphEffect(\"dilationTTgen\"));\r\n\r\n // Glyph TT generation\r\n let glyphTT = Teresa.isRunning || Enslaved.isRunning || Pelle.isDoomed\r\n ? (Pelle.isDoomed && Ra.unlocks.unlockPelleGlyphEffects.isUnlocked) ? new Decimal(getAdjustedGlyphEffect(\"dilationTTgen\")) : 0\r\n : new Decimal(getAdjustedGlyphEffect(\"dilationTTgen\")).times(ttMult);\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.soF.ttgen[player.mending.corruption[9]]) {\r\n glyphTT=0;\r\n }\r\n\r\n // Dilation TT generation\r\n const dilationTT = DilationUpgrade.ttGenerator.isBought\r\n ? DilationUpgrade.ttGenerator.effectValue.times(Pelle.isDoomed ? 1 : ttMult)\r\n : DC.D0;\r\n\r\n // Lai'tela TT power\r\n let finalTT = dilationTT.add(glyphTT);\r\n if (finalTT.gt(1)) {\r\n finalTT = finalTT.pow(SingularityMilestone.theoremPowerFromSingularities.effectOrDefault(1));\r\n }\r\n\r\n //V Level 75\r\n if (Ra.unlocks.totalSTBoostTTGen.isUnlocked){\r\n finalTT = finalTT.pow((1 + (Math.max(Math.log10(V.spaceTheorems + 1), 0) / 10)));\r\n }\r\n\r\n\r\n return finalTT;\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nfunction recursiveTimeOut(fn, iterations, endFn) {\r\n fn(iterations);\r\n if (iterations === 0) endFn();\r\n else setTimeout(() => recursiveTimeOut(fn, iterations - 1, endFn), 0);\r\n}\r\n\r\nfunction afterSimulation(seconds, playerBefore) {\r\n if (seconds > 600) {\r\n const playerAfter = deepmergeAll([{}, player]);\r\n Modal.awayProgress.show({ playerBefore, playerAfter, seconds });\r\n }\r\n\r\n GameUI.notify.showBlackHoles = true;\r\n}\r\n\r\nexport function simulateTime(seconds, real, fast) {\r\n // The game is simulated at a base 50ms update rate, with a maximum tick count based on the values of real and fast\r\n // - Calling with real === true will always simulate at full accuracy with no tick count reduction unless it would\r\n // otherwise simulate with more ticks than offline progress would allow\r\n // - Calling with fast === true will only simulate it with a max of 50 ticks\r\n // - Otherwise, tick count will be limited to the offline tick count (which may be set externally during save import)\r\n // Tick count is never *increased*, and only ever decreased if needed.\r\n if (seconds < 0) return;\r\n let ticks = Math.floor(seconds * 20);\r\n GameUI.notify.showBlackHoles = false;\r\n\r\n // Limit the tick count (this also applies if the black hole is unlocked)\r\n const maxTicks = GameStorage.maxOfflineTicks(1000 * seconds, GameStorage.offlineTicks ?? player.options.offlineTicks);\r\n if (ticks > maxTicks && !fast) {\r\n ticks = maxTicks;\r\n } else if (ticks > 50 && !real && fast) {\r\n ticks = 50;\r\n }\r\n\r\n const playerStart = deepmergeAll([{}, player]);\r\n\r\n let totalGameTime;\r\n\r\n if (BlackHoles.areUnlocked && !BlackHoles.arePaused) {\r\n totalGameTime = BlackHoles.calculateGameTimeFromRealTime(seconds, BlackHoles.calculateSpeedups());\r\n } else {\r\n totalGameTime = getGameSpeedupFactor().times(seconds);\r\n }\r\n\r\n const infinitiedMilestone = getInfinitiedMilestoneReward(totalGameTime.times(1000));\r\n const eternitiedMilestone = getEternitiedMilestoneReward(totalGameTime.times(1000));\r\n\r\n if (eternitiedMilestone.gt(0)) {\r\n Currency.eternities.add(eternitiedMilestone);\r\n } else if (infinitiedMilestone.gt(0)) {\r\n Currency.infinities.add(infinitiedMilestone);\r\n } else {\r\n Currency.eternityPoints.add(getOfflineEPGain(seconds * 1000));\r\n }\r\n\r\n if (InfinityUpgrade.ipOffline.isBought && player.options.offlineProgress) {\r\n Currency.infinityPoints.add(player.records.thisEternity.bestIPMsWithoutMaxAll.times(seconds * 1000 / 2));\r\n }\r\n\r\n EventHub.dispatch(GAME_EVENT.OFFLINE_CURRENCY_GAINED);\r\n\r\n let remainingRealSeconds = seconds;\r\n // During async code the number of ticks remaining can go down suddenly\r\n // from \"Speed up\" which means tick length needs to go up, and thus\r\n // you can't just divide total time by total ticks to get tick length.\r\n // For example, suppose you had 6000 offline ticks, and called \"Speed up\"\r\n // 1000 ticks in, meaning that after \"Speed up\" there'd only be 1000 ticks more\r\n // (so 1000 + 1000 = 2000 ticks total). Dividing total time by total ticks would\r\n // use 1/6th of the total time before \"Speed up\" (1000 of 6000 ticks), and 1/2 after\r\n // (1000 of 2000 ticks). Short of some sort of magic user prediction to figure out\r\n // whether the user *will* press \"Speed up\" at some point, dividing remaining time\r\n // by remaining ticks seems like the best thing to do.\r\n let loopFn = i => {\r\n const diff = remainingRealSeconds / i;\r\n gameLoop(1000 * diff);\r\n remainingRealSeconds -= diff;\r\n };\r\n\r\n // Simulation code which accounts for BH cycles (segments where a BH is active doesn't use diff since it splits\r\n // up intervals based on real time instead in an effort to keep ticks all roughly equal in game time).\r\n // Black hole auto-pausing is entirely handled by the black hole phase advancement code (for actually pausing)\r\n // and calculateOfflineTick (for time calculation).\r\n if (BlackHoles.areUnlocked && !BlackHoles.arePaused) {\r\n loopFn = i => {\r\n const [realTickTime, blackHoleSpeedup] = BlackHoles.calculateOfflineTick(remainingRealSeconds,\r\n i, 0.0001);\r\n remainingRealSeconds -= realTickTime;\r\n gameLoop(1000 * realTickTime, { blackHoleSpeedup });\r\n };\r\n }\r\n\r\n // We don't show the offline modal here or bother with async if doing a fast simulation\r\n if (fast) {\r\n // Fast simulations happen when simulating between 10 and 50 seconds of offline time.\r\n // One easy way to get this is to autosave every 30 or 60 seconds, wait until the save timer\r\n // in the bottom-left hits 15 seconds, and refresh (without saving directly beforehand).\r\n GameIntervals.stop();\r\n // Fast simulations are always 50 ticks. They're done in this weird countdown way because\r\n // we want to be able to call the same function that we call when using async code (to avoid\r\n // duplicating functions), and that function expects a parameter saying how many ticks are remaining.\r\n for (let remaining = 50; remaining > 0; remaining--) {\r\n loopFn(remaining);\r\n }\r\n GameStorage.postLoadStuff();\r\n afterSimulation(seconds, playerStart);\r\n } else {\r\n const progress = {};\r\n ui.view.modal.progressBar = {};\r\n Async.run(loopFn,\r\n ticks,\r\n {\r\n batchSize: 1,\r\n maxTime: 60,\r\n sleepTime: 1,\r\n asyncEntry: doneSoFar => {\r\n GameIntervals.stop();\r\n ui.$viewModel.modal.progressBar = {\r\n label: \"Offline Progress Simulation\",\r\n info: `The game is being run at a lower accuracy in order to quickly calculate the resources you\r\n gained while you were away. See the How To Play entry on \"Offline Progress\" for technical details. If\r\n you are impatient and want to get back to the game sooner, you can click the \"Speed up\" button to\r\n simulate the rest of the time with half as many ticks (down to a minimum of ${formatInt(500)} ticks\r\n remaining). The \"SKIP\" button will instead use all the remaining offline time in ${formatInt(10)}\r\n ticks.`,\r\n progressName: \"Ticks\",\r\n current: doneSoFar,\r\n max: ticks,\r\n startTime: Date.now(),\r\n buttons: [{\r\n text: \"Speed up\",\r\n condition: (current, max) => max - current > 500,\r\n click: () => {\r\n const newRemaining = Math.clampMin(Math.floor(progress.remaining / 2), 500);\r\n // We subtract the number of ticks we skipped, which is progress.remaining - newRemaining.\r\n // This, and the below similar code in \"SKIP\", are needed or the progress bar to be accurate\r\n // (both with respect to the number of ticks it shows and with respect to how full it is).\r\n progress.maxIter -= progress.remaining - newRemaining;\r\n progress.remaining = newRemaining;\r\n // We update the progress bar max data (remaining will update automatically).\r\n ui.$viewModel.modal.progressBar.max = progress.maxIter;\r\n }\r\n },\r\n {\r\n text: \"SKIP\",\r\n condition: (current, max) => max - current > 10,\r\n click: () => {\r\n // We jump to 10 from the end (condition guarantees there are at least 10 left).\r\n // We subtract the number of ticks we skipped, which is progress.remaining - 10.\r\n progress.maxIter -= progress.remaining - 10;\r\n progress.remaining = 10;\r\n }\r\n }]\r\n };\r\n },\r\n asyncProgress: doneSoFar => {\r\n ui.$viewModel.modal.progressBar.current = doneSoFar;\r\n },\r\n asyncExit: () => {\r\n ui.$viewModel.modal.progressBar = undefined;\r\n // .postLoadStuff will restart GameIntervals\r\n GameStorage.postLoadStuff();\r\n },\r\n then: () => {\r\n afterSimulation(seconds, playerStart);\r\n },\r\n progress\r\n });\r\n }\r\n}\r\n\r\nwindow.onload = function() {\r\n const supportedBrowser = browserCheck();\r\n GameUI.initialized = supportedBrowser;\r\n ui.view.initialized = supportedBrowser;\r\n setTimeout(() => {\r\n ElectronRuntime.updateZoom();\r\n document.getElementById(\"loading\").style.display = \"none\";\r\n }, 500);\r\n if (!supportedBrowser) {\r\n GameIntervals.stop();\r\n document.getElementById(\"loading\").style.display = \"none\";\r\n document.getElementById(\"browser-warning\").style.display = \"flex\";\r\n }\r\n};\r\n\r\nwindow.onfocus = function() {\r\n setShiftKey(false);\r\n};\r\n\r\nwindow.onblur = function() {\r\n GameKeyboard.stopSpins();\r\n};\r\n\r\nexport function setShiftKey(isDown) {\r\n ui.view.shiftDown = isDown;\r\n}\r\n\r\nexport function setHoldingR(x) {\r\n Replicanti.galaxies.isPlayerHoldingR = x;\r\n}\r\n\r\nexport function browserCheck() {\r\n return supportedBrowsers.test(navigator.userAgent);\r\n}\r\n\r\nexport function init() {\r\n // eslint-disable-next-line no-console\r\n console.log(\"🌌 Antimatter Dimensions: Reality Update 🌌\");\r\n if (DEV) {\r\n // eslint-disable-next-line no-console\r\n console.log(\"👨‍💻 Development Mode 👩‍💻\");\r\n }\r\n ElectronRuntime.initialize();\r\n SteamRuntime.initialize();\r\n Cloud.init();\r\n GameStorage.load();\r\n Tabs.all.find(t => t.config.id === player.options.lastOpenTab).show(true);\r\n Payments.init();\r\n}\r\n\r\nwindow.tweenTime = 0;\r\nlet lastFrame;\r\nfunction animateTweens(time) {\r\n requestAnimationFrame(animateTweens);\r\n if (time === undefined || lastFrame === undefined) {\r\n lastFrame = time;\r\n return;\r\n }\r\n let delta = time - lastFrame;\r\n lastFrame = time;\r\n if (player.dilation.active) {\r\n delta /= Pelle.isDoomed ? 1.5 : 10;\r\n }\r\n tweenTime += delta;\r\n TWEEN.update(tweenTime);\r\n}\r\n\r\nanimateTweens();\r\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameSpeedDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameSpeedDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GameSpeedDisplay.vue?vue&type=template&id=95af5524&scoped=true&\"\nimport script from \"./GameSpeedDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./GameSpeedDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GameSpeedDisplay.vue?vue&type=style&index=0&id=95af5524&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"95af5524\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderTickspeedInfo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderTickspeedInfo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderTickspeedInfo.vue?vue&type=template&id=2ca59fbc&scoped=true&\"\nimport script from \"./HeaderTickspeedInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderTickspeedInfo.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2ca59fbc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-reality-button\"},[_c('button',{staticClass:\"c-reality-button infotooltip\",class:_vm.classObject,on:{\"click\":_vm.handleClick}},[_c('div',{staticClass:\"l-reality-button__contents\"},[(_vm.canReality)?[_c('div',{staticClass:\"c-reality-button__header\"},[_vm._v(\" Make a new Reality \")]),_c('div',[_vm._v(_vm._s(_vm.formatMachinesGained)+\" \"+_vm._s(_vm.formatMachineStats))]),_c('div',[_vm._v(_vm._s(_vm.formatGlyphLevel))])]:(_vm.hasRealityStudy)?[_c('div',[_vm._v(\"Get \"+_vm._s(_vm.format(\"1e4000\"))+\" Eternity Points to unlock a new Reality\")])]:[_c('div',[_vm._v(\"Purchase the study in the Eternity tab to unlock a new Reality\")])],(_vm.canReality)?_c('div',{staticClass:\"infotooltiptext\"},[_c('div',[_vm._v(\"Other resources gained:\")]),_c('div',[_vm._v(_vm._s(_vm.quantifyInt(\"Perk Point\", _vm.ppGained)))]),(_vm.shardsGained.neq(0))?_c('div',[_vm._v(\" \"+_vm._s(_vm.shardsGainedText)+\" (\"+_vm._s(_vm.format(_vm.currentShardsRate, 2))+\"/min) \"),_c('br'),_vm._v(\" Peak: \"+_vm._s(_vm.format(_vm.bestShardRate, 2))+\"/min at \"+_vm._s(_vm.format(_vm.bestShardRateVal, 2))+\" RS \")]):_vm._e(),_vm._l((_vm.celestialRunText),function(celestialInfo,i){return _c('div',{key:i},[(celestialInfo[0])?_c('span',[_vm._v(\" \"+_vm._s(celestialInfo[1])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(celestialInfo[2])+\" \")]):_vm._e()])})],2):_vm._e()],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityButton.vue?vue&type=template&id=24811dee&scoped=true&\"\nimport script from \"./RealityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"24811dee\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderCenterContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderCenterContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderCenterContainer.vue?vue&type=template&id=4832cc34&scoped=true&\"\nimport script from \"./HeaderCenterContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderCenterContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderCenterContainer.vue?vue&type=style&index=0&id=4832cc34&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4832cc34\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showContainer)?_c('div',{staticClass:\"c-prestige-button-container\"},[(_vm.showEP)?_c('div',{staticClass:\"c-eternity-points\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-game-header__ep-amount\"},[_vm._v(_vm._s(_vm.format(_vm.eternityPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Eternity Point\", _vm.eternityPoints))+\". \"),(_vm.showNextEP)?_c('span',[_vm._v(\"(Next EP at \"+_vm._s(_vm.format(_vm.nextEP, 1))+\" IP)\")]):_vm._e()]):_vm._e(),_c('UnlockInfinityDimButton'),_c('EternityButton')],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('button',{staticClass:\"o-prestige-button\",class:_vm.buttonClassObject,attrs:{\"onclick\":\"eternityResetRequest()\"},on:{\"mouseover\":function($event){_vm.hover = true},\"mouseleave\":function($event){_vm.hover = false}}},[(_vm.type === -1)?[_vm._v(\" Reach \"+_vm._s(_vm.format(_vm.eternityGoal, 2, 2))+\" \"),_c('br'),_vm._v(\" Infinity Points \")]:(_vm.type === 0)?[_vm._v(\" Other times await... I need to become Eternal \")]:(_vm.type === 1)?[_vm._v(\" Eternity for \"),_c('span',{style:(_vm.amountStyle)},[_vm._v(_vm._s(_vm.format(_vm.gainedEP, 2)))]),(_vm.showEPRate)?_c('span',[_vm._v(\" EP\")]):_c('span',[_vm._v(\" Eternity \"+_vm._s(_vm.pluralize(\"Point\", _vm.gainedEP)))]),_c('br'),(_vm.showEPRate)?[_vm._v(\" Current: \"+_vm._s(_vm.format(_vm.currentEPRate, 2, 2))+\" EP/min \"),_c('br'),_vm._v(\" Peak: \"+_vm._s(_vm.format(_vm.peakEPRate, 2, 2))+\" EP/min \"),_c('br'),_vm._v(\" at \"+_vm._s(_vm.format(_vm.peakEPRateVal, 2, 2))+\" EP \")]:_vm._e()]:(_vm.type === 2 || (_vm.type === 6 && !_vm.canEternity))?[_vm._v(\" Other challenges await... I need to become Eternal \")]:(_vm.type === 3)?[_vm._v(\" Eternity for \"),_c('span',{style:(_vm.tachyonAmountStyle)},[_vm._v(_vm._s(_vm.format(_vm.gainedTachyons, 2, 1)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Tachyon Particle\", _vm.gainedTachyons))+\" \")]:(_vm.type === 4 || _vm.type === 5)?[(_vm.type === 4)?[_vm._v(\" Eternity for \"),_c('span',{style:(_vm.amountStyle)},[_vm._v(_vm._s(_vm.format(_vm.gainedEP, 2, 2)))]),_vm._v(\" EP \")]:[_vm._v(\" Eternity for \"),_c('span',{style:(_vm.tachyonAmountStyle)},[_vm._v(_vm._s(_vm.format(_vm.gainedTachyons, 2, 1)))]),_vm._v(\" TP \")],_c('br'),_vm._v(\" You should explore a bit and look at new content before clicking me! \")]:(_vm.type === 6)?[_vm._v(\" Other challenges await... \"),(_vm.fullyCompleted)?[_c('br'),_vm._v(\" (This challenge is already fully completed) \")]:[_c('br'),_vm._v(\" \"+_vm._s(_vm.quantifyInt(\"completion\", _vm.gainedCompletions))+\" on Eternity \"),(_vm.failedRestriction)?[_c('br'),_vm._v(\" \"+_vm._s(_vm.failedRestriction)+\" \")]:(_vm.hasMoreCompletions)?[_c('br'),_vm._v(\" Next goal at \"+_vm._s(_vm.format(_vm.nextGoalAt))+\" IP \")]:_vm._e()]]:_vm._e()],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityButton.vue?vue&type=template&id=df46bf10&scoped=true&\"\nimport script from \"./EternityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"df46bf10\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('button',{class:_vm.buttonClassObject,on:{\"click\":_vm.tryUnlockNextInfinityDimension}},[_vm._v(\" \"+_vm._s(_vm.text)+\" \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UnlockInfinityDimButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UnlockInfinityDimButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UnlockInfinityDimButton.vue?vue&type=template&id=e6227816&scoped=true&\"\nimport script from \"./UnlockInfinityDimButton.vue?vue&type=script&lang=js&\"\nexport * from \"./UnlockInfinityDimButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e6227816\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderEternityContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderEternityContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderEternityContainer.vue?vue&type=template&id=78a4376a&scoped=true&\"\nimport script from \"./HeaderEternityContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderEternityContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderEternityContainer.vue?vue&type=style&index=0&id=78a4376a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"78a4376a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showContainer)?_c('div',{staticClass:\"c-prestige-button-container\"},[_c('div',{staticClass:\"c-infinity-points\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-game-header__ip-amount\"},[_vm._v(_vm._s(_vm.format(_vm.infinityPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Infinity Point\", _vm.infinityPoints))+\". \"),(_vm.isTesseractUnlocked)?_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.tesseractText)}}):_vm._e()]),_c('BigCrunchButton')],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible && !_vm.tesseractAffordable)?_c('button',{staticClass:\"o-prestige-button o-infinity-button\",class:_vm.buttonClassObject,on:{\"click\":_vm.crunch,\"mouseover\":function($event){_vm.hover = true},\"mouseleave\":function($event){_vm.hover = false}}},[(!_vm.canCrunch)?[_vm._v(\" Reach \"+_vm._s(_vm.format(_vm.infinityGoal, 2, 2))+\" \"),_c('br'),_vm._v(\" antimatter \")]:(_vm.inAntimatterChallenge)?[_vm._v(\" Big Crunch to \"),_c('br'),_vm._v(\" complete the challenge \")]:[(!_vm.showIPRate)?_c('div'):_vm._e(),_c('b',[_vm._v(\" Big Crunch for \"),_c('span',{style:(_vm.amountStyle)},[_vm._v(_vm._s(_vm.format(_vm.gainedIP, 2)))]),(_vm.showIPRate)?_c('span',[_vm._v(\" IP\")]):_c('span',[_vm._v(\" Infinity \"+_vm._s(_vm.pluralize(\"Point\", _vm.gainedIP)))])]),(_vm.showIPRate)?[_c('br'),_vm._v(\" Current: \"+_vm._s(_vm.format(_vm.currentIPRate, 2))+\" IP/min \"),_c('br'),_vm._v(\" Peak: \"+_vm._s(_vm.format(_vm.peakIPRate, 2))+\" IP/min \"),_c('br'),_vm._v(\" at \"+_vm._s(_vm.format(_vm.peakIPRateVal, 2))+\" IP \")]:_c('div')]],2):(_vm.tesseractAffordable)?_c('button',{staticClass:\"o-prestige-button c-game-header__tesseract-available\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },on:{\"click\":_vm.switchToInfinity}},[_c('b',[_vm._v(\" You have enough Infinity Points to buy a Tesseract \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BigCrunchButton.vue?vue&type=template&id=2d1de0f8&scoped=true&\"\nimport script from \"./BigCrunchButton.vue?vue&type=script&lang=js&\"\nexport * from \"./BigCrunchButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d1de0f8\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderInfinityContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderInfinityContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderInfinityContainer.vue?vue&type=template&id=546e2542&scoped=true&\"\nimport script from \"./HeaderInfinityContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderInfinityContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderInfinityContainer.vue?vue&type=style&index=0&id=546e2542&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"546e2542\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderPrestigeGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderPrestigeGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderPrestigeGroup.vue?vue&type=template&id=05a7d691&scoped=true&\"\nimport script from \"./HeaderPrestigeGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderPrestigeGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderPrestigeGroup.vue?vue&type=style&index=0&id=05a7d691&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"05a7d691\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GameHeader.vue?vue&type=template&id=6d71e8ba&scoped=true&\"\nimport script from \"./GameHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./GameHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d71e8ba\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"ticker\",staticClass:\"c-news-ticker\"},[_c('span',{ref:\"line\",staticClass:\"c-news-line c-news-ticker__line\",class:_vm.lineClass,on:{\"click\":_vm.onLineClick}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewsTicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewsTicker.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NewsTicker.vue?vue&type=template&id=2cdee454&\"\nimport script from \"./NewsTicker.vue?vue&type=script&lang=js&\"\nexport * from \"./NewsTicker.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{staticClass:\"c-subtab-button-container\"},_vm._l((_vm.subtabs),function(subtab,i){return _c('ClassicSubtabButton',{key:i,attrs:{\"subtab\":subtab,\"parent-name\":_vm.tab.name}})}),1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isAvailable)?_c('button',{class:_vm.classObject,on:{\"click\":function($event){return _vm.subtab.show(true)}}},[_vm._v(\" \"+_vm._s(_vm.tabName)+\" \"),(_vm.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicSubtabButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicSubtabButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicSubtabButton.vue?vue&type=template&id=02221b25&scoped=true&\"\nimport script from \"./ClassicSubtabButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicSubtabButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicSubtabButton.vue?vue&type=style&index=0&id=02221b25&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"02221b25\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicSubtabBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicSubtabBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicSubtabBar.vue?vue&type=template&id=b242ebf6&scoped=true&\"\nimport script from \"./ClassicSubtabBar.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicSubtabBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b242ebf6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.tabs),function(tab,i){return _c('ClassicTabButton',{key:i,attrs:{\"tab-position\":i,\"tab\":tab}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isAvailable)?_c('button',{staticClass:\"o-tab-btn\",class:[_vm.tab.config.UIClass,\n { 'o-tab-btn--active': _vm.isCurrentTab }],on:{\"click\":function($event){return _vm.tab.show(true)}}},[_vm._v(\" \"+_vm._s(_vm.tabName)+\" \"),(_vm.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTabButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTabButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicTabButton.vue?vue&type=template&id=48d1e610&scoped=true&\"\nimport script from \"./ClassicTabButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicTabButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicTabButton.vue?vue&type=style&index=0&id=48d1e610&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"48d1e610\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTabBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTabBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicTabBar.vue?vue&type=template&id=44724e19&scoped=true&\"\nimport script from \"./ClassicTabBar.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicTabBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"44724e19\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-eternity-tab__header\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-eternity-tab__eternity-points\"},[_vm._v(_vm._s(_vm.format(_vm.eternityPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Eternity Point\", _vm.eternityPoints))+\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityPointsHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityPointsHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityPointsHeader.vue?vue&type=template&id=30258bd0&scoped=true&\"\nimport script from \"./EternityPointsHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityPointsHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"30258bd0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isVisible),expression:\"isVisible\"}],staticClass:\"c-infinity-tab__header\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-infinity-tab__infinity-points\"},[_vm._v(_vm._s(_vm.format(_vm.infinityPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Infinity Point\", _vm.infinityPoints))+\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityPointsHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityPointsHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityPointsHeader.vue?vue&type=template&id=07f4803c&scoped=true&\"\nimport script from \"./InfinityPointsHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityPointsHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"07f4803c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicUi.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicUi.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicUi.vue?vue&type=template&id=26607020&scoped=true&\"\nimport script from \"./ClassicUi.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicUi.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicUi.vue?vue&type=style&index=0&id=26607020&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"26607020\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-game-ui--fixed\",attrs:{\"id\":\"ui-fixed\"}},[_c('div',{staticClass:\"l-notification-container\",attrs:{\"id\":\"notification-container\"}}),_c('HowToPlay',{style:(_vm.hideIfMatoFullscreen)}),(_vm.view.subtab === 'studies')?_c('TimeTheoremShop',{staticClass:\"l-time-studies-tab__tt-shop\"}):_vm._e(),(_vm.view.UIType == \"Modern\" && _vm.view.theme !== 'S12')?_c('ModernSidebar',{style:(_vm.hideIfMatoFullscreen)}):_vm._e(),_c('SaveTimer',{style:(_vm.hideIfMatoFullscreen)}),_c('SpeedrunStatus',{style:(_vm.hideIfMatoFullscreen)}),(_vm.view.theme !== 'S12')?[(_vm.view.modal.progressBar)?_c('ModalProgressBar'):(_vm.view.quotes.current)?_c('CelestialQuoteModal',{attrs:{\"quote\":_vm.view.quotes.current}}):(_vm.view.quotes.history)?_c('CelestialQuoteHistoryDisplay',{attrs:{\"quotes\":_vm.view.quotes.history}}):(_vm.view.modal.current)?_c('PopupModal',{attrs:{\"modal\":_vm.view.modal.current}}):_vm._e(),(_vm.view.modal.progressBar)?_c('ModalProgressBar'):_vm._e(),(_vm.ending)?_c('FadeAway'):_vm._e(),(_vm.ending)?_c('CreditsContainer'):_vm._e(),(_vm.ending)?_c('NewGame'):_vm._e(),_c('SpectateGame')]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-modal-overlay c-modal-overlay\"},[_c('i',{staticClass:\"c-modal-celestial-quote-history__close fas fa-circle-xmark o-light-button\",on:{\"click\":_vm.close}}),_c('div',{staticClass:\"c-quote-history-modal__clickable-background\",on:{\"click\":_vm.close}}),_vm._l((_vm.unlockedQuotes),function(quote,quoteId){return _c('div',{key:quoteId,on:{\"click\":function($event){_vm.focusedQuoteId = quoteId}}},_vm._l((quote.quote.config.lines),function(_,lineId){return _c('div',{key:lineId,on:{\"click\":function($event){quote.currentLine = lineId}}},[_c('CelestialQuoteLine',{staticClass:\"c-quote-overlay\",class:{ 'c-quote-overlay--background': !_vm.isFocused(quoteId, lineId) },style:(_vm.quoteStyle(quoteId, lineId)),attrs:{\"quote\":quote.quote,\"current-line\":lineId,\"primary\":\"\"}})],1)}),0)}),_c('div',{staticClass:\"c-quote-history-modal__controls\"},[_c('i',{class:_vm.upClass,on:{\"click\":_vm.progressUp}}),_c('i',{class:_vm.downClass,on:{\"click\":_vm.progressDown}}),_c('i',{class:_vm.leftClass,on:{\"click\":_vm.progressLeft}}),_c('i',{class:_vm.rightClass,on:{\"click\":_vm.progressRight}})])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('CelestialQuoteBackground',{attrs:{\"celestial-symbols\":_vm.celestialSymbols,\"celestials\":_vm.celestials,\"primary\":_vm.primary}},[(_vm.line.showCelestialName)?_c('span',{staticClass:\"c-modal-celestial-name\"},[_vm._v(\" \"+_vm._s(_vm.celestialName)+\" \")]):_vm._e(),_c('i',{class:_vm.leftClass,on:{\"click\":function($event){return _vm.$emit('progress-in', 'left')}}}),_c('span',{staticClass:\"l-modal-celestial-quote__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]),_c('i',{class:_vm.rightClass,on:{\"click\":function($event){return _vm.$emit('progress-in', 'right')}}}),(_vm.closeVisible)?_c('i',{staticClass:\"c-modal-celestial-quote__end fas fa-check-circle\",on:{\"click\":_vm.emitClose}}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.modalClass},[_vm._l((_vm.celestials),function(celestial,index){return _c('span',{key:index,staticClass:\"c-modal-celestial-quote c-modal-celestial-quote__symbol\",style:(_vm.styleObject(celestial, 0.2, true)),domProps:{\"innerHTML\":_vm._s(_vm.celestialSymbols[index])}})}),_vm._l((_vm.celestials),function(celestial,index){return _c('span',{key:index + 10,staticClass:\"c-modal-celestial-quote c-modal-celestial-quote__shadow\",style:(_vm.styleObject(celestial, 1, false))})}),_vm._l((_vm.celestials),function(celestial,index){return _c('span',{key:index + 20,staticClass:\"c-modal-celestial-quote c-modal-celestial-quote__text\",style:(_vm.styleObject(celestial, 1, true))},[_vm._t(\"default\")],2)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteBackground.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteBackground.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialQuoteBackground.vue?vue&type=template&id=3f7bcfc0&scoped=true&\"\nimport script from \"./CelestialQuoteBackground.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialQuoteBackground.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CelestialQuoteBackground.vue?vue&type=style&index=0&id=3f7bcfc0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3f7bcfc0\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteLine.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteLine.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialQuoteLine.vue?vue&type=template&id=7e428c16&scoped=true&\"\nimport script from \"./CelestialQuoteLine.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialQuoteLine.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CelestialQuoteLine.vue?vue&type=style&index=0&id=7e428c16&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7e428c16\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteHistoryDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteHistoryDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialQuoteHistoryDisplay.vue?vue&type=template&id=198b74ab&scoped=true&\"\nimport script from \"./CelestialQuoteHistoryDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialQuoteHistoryDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CelestialQuoteHistoryDisplay.vue?vue&type=style&index=0&id=198b74ab&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"198b74ab\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-modal-overlay c-modal-overlay\"},[_c('CelestialQuoteLineBasicInteractable',{staticClass:\"c-quote-overlay\",attrs:{\"quote\":_vm.quote}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('CelestialQuoteLine',{attrs:{\"quote\":_vm.quote,\"current-line\":_vm.currentLine,\"left-visible\":!_vm.isQuoteStart && _vm.leftVisible,\"right-visible\":!_vm.isQuoteEnd && _vm.rightVisible,\"close-visible\":_vm.isQuoteEnd && _vm.closeVisible,\"primary\":\"\"},on:{\"close\":_vm.close,\"progress-in\":_vm.progressIn}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteLineBasicInteractable.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteLineBasicInteractable.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialQuoteLineBasicInteractable.vue?vue&type=template&id=4cdf5924&\"\nimport script from \"./CelestialQuoteLineBasicInteractable.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialQuoteLineBasicInteractable.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialQuoteModal.vue?vue&type=template&id=4e0361e1&scoped=true&\"\nimport script from \"./CelestialQuoteModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialQuoteModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CelestialQuoteModal.vue?vue&type=style&index=0&id=4e0361e1&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4e0361e1\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-credits-container\",style:(_vm.creditStyles)},[_c('i',{staticClass:\"c-mute-button fa-solid\",class:_vm.muteIconClass,style:(_vm.muteStyle),on:{\"click\":function($event){_vm.isMuted = !_vm.isMuted}}}),_vm._l((_vm.celestialDisplays),function(celSymbol,celIndex){return _c('div',{key:celIndex + '-end-credit-symbol-disp',staticClass:\"c-credits-cel-symbol\",class:(\"c-\" + celIndex + \"-credits\"),domProps:{\"innerHTML\":_vm._s(celSymbol)}})}),_c('CreditsDisplay')],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ 'c-credits-s12-end': _vm.isS12EndDisplay }},[(!_vm.isModal)?_c('h1',{staticClass:\"c-credits-header\"},[_vm._v(\" Antimatter Dimensions \")]):_vm._e(),_vm._l((_vm.roles.count),function(role){return _c('div',{key:role},[_c('h2',{staticClass:\"c-credits-section\"},[_vm._v(\" \"+_vm._s(_vm.pluralize(_vm.roles[role], _vm.relevantPeople(role).length))+\" \")]),_c('div',{class:{ 'l-credits--bulk': _vm.relevantPeople(role).length > 10}},_vm._l((_vm.relevantPeople(role)),function(person){return _c('div',{key:person.name,staticClass:\"c-credit-entry\"},[_vm._v(\" \"+_vm._s(person.name)+\" \"),(person.name2)?_c('span',[_vm._v(\" (\"+_vm._s(person.name2)+\") \")]):_vm._e()])}),0)])}),_c('br'),_c('br'),_c('br'),_c('br'),_c('br'),_c('br'),_c('br'),_c('br'),_c('br'),_c('h1',{staticClass:\"c-credits-header\"},[_vm._v(\" Thank you so much for playing! \")])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CreditsDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CreditsDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CreditsDisplay.vue?vue&type=template&id=5f15ce42&scoped=true&\"\nimport script from \"./CreditsDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./CreditsDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CreditsDisplay.vue?vue&type=style&index=0&id=5f15ce42&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5f15ce42\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CreditsContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CreditsContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CreditsContainer.vue?vue&type=template&id=7244bf67&scoped=true&\"\nimport script from \"./CreditsContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./CreditsContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CreditsContainer.vue?vue&type=style&index=0&id=7244bf67&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7244bf67\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-background-overlay\",style:({\n opacity: _vm.opacity,\n pointerEvents: _vm.opacity > 1 ? 'auto' : 'none'\n })})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FadeAway.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FadeAway.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FadeAway.vue?vue&type=template&id=0b58eaaa&scoped=true&\"\nimport script from \"./FadeAway.vue?vue&type=script&lang=js&\"\nexport * from \"./FadeAway.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FadeAway.vue?vue&type=style&index=0&id=0b58eaaa&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b58eaaa\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{class:_vm.h2pClassObject,style:(_vm.topMargin),on:{\"click\":_vm.showH2P}},[_vm._v(\" ? \"),(_vm.hasTutorial)?_c('div',{staticClass:\"h2p-tooltip\"},[_vm._v(\" Click for info \")]):_vm._e()]),(_vm.hasTutorial)?_c('div',{staticClass:\"h2p-tutorial--glow\",style:(_vm.topMargin)}):_vm._e(),_c('div',{staticClass:\"o-tab-btn l-information l-help-me\",on:{\"click\":_vm.showInfo}},[_vm._v(\" i \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HowToPlay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HowToPlay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HowToPlay.vue?vue&type=template&id=5bb5f9a0&scoped=true&\"\nimport script from \"./HowToPlay.vue?vue&type=script&lang=js&\"\nexport * from \"./HowToPlay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HowToPlay.vue?vue&type=style&index=0&id=5bb5f9a0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5bb5f9a0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-modal-overlay c-modal-overlay progress-bar-modal\"},[_c('div',{staticClass:\"c-modal\"},[_c('div',{staticClass:\"modal-progress-bar\"},[_c('div',{staticClass:\"modal-progress-bar__label\"},[_vm._v(\" \"+_vm._s(_vm.progress.label)+\" \")]),_c('div',[_vm._v(\" \"+_vm._s(_vm.progress.info)+\" \")]),_c('div',{staticClass:\"modal-progress-bar__margin\"},[_c('div',[_vm._v(\" \"+_vm._s(_vm.progress.progressName)+\": \"+_vm._s(_vm.formatInt(_vm.progress.current))+\"/\"+_vm._s(_vm.formatInt(_vm.progress.max))+\" \")]),_c('div',[_vm._v(\" Remaining: \"+_vm._s(_vm.remainingTime)+\" \")]),_c('div',{staticClass:\"modal-progress-bar__hbox\"},[_c('div',{staticClass:\"modal-progress-bar__bg\"},[_c('div',{staticClass:\"modal-progress-bar__fg\",style:(_vm.foregroundStyle)})])])]),_c('div',{staticClass:\"modal-progress-bar__buttons\"},_vm._l((_vm.buttons),function(button,id){return _c('OfflineSpeedupButton',{key:id,attrs:{\"button\":button,\"progress\":_vm.progress}})}),1)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('PrimaryButton',{class:_vm.buttonClass,on:{\"click\":_vm.buttonClicked}},[_vm._v(\" \"+_vm._s(_vm.button.text)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OfflineSpeedupButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OfflineSpeedupButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OfflineSpeedupButton.vue?vue&type=template&id=6c127258&\"\nimport script from \"./OfflineSpeedupButton.vue?vue&type=script&lang=js&\"\nexport * from \"./OfflineSpeedupButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalProgressBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalProgressBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalProgressBar.vue?vue&type=template&id=699111cc&scoped=true&\"\nimport script from \"./ModalProgressBar.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalProgressBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModalProgressBar.vue?vue&type=style&index=0&id=699111cc&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"699111cc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isHidden)?_c('div',{staticClass:\"c-modern-sidebar\"},[_c('ModernSidebarCurrency'),_vm._l((_vm.tabs),function(tab,tabPosition){return [(_vm.tabVisibilities[tabPosition])?_c('ModernTabButton',{key:tab.name,attrs:{\"tab\":tab,\"tab-position\":tabPosition}}):_vm._e()]})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-sidebar-resource\"},[(_vm.showMvR)?[_c('h2',{staticClass:\"o-sidebar-currency--mending\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.MvR, 2))+\" \")]),_c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(_vm._s(_vm.pluralize(\"Multiversal Remain\", _vm.MvR)))])])]:(_vm.showRS)?[_c('h2',{staticClass:\"o-sidebar-currency--pelle\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.RS, 2))+\" \")]),_c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(_vm._s(_vm.pluralize(\"Reality Shard\", _vm.RS)))])])]:(_vm.showRM)?[(_vm.IM === 0)?[_c('h2',{staticClass:\"o-sidebar-currency--reality\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.RM, 2))+\" \")]),_c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(_vm._s(_vm.pluralize(\"Reality Machine\", _vm.RM)))])])]:[_c('h3',{staticClass:\"o-sidebar-currency--reality\"},[_vm._v(\" \"+_vm._s(_vm.machineStr)+\" \")]),_vm._m(0)]]:(_vm.showEP)?[_c('h2',{staticClass:\"o-sidebar-currency--eternity\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.EP, 2))+\" \")]),_c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(_vm._s(_vm.pluralize(\"Eternity Point\", _vm.EP)))])])]:(_vm.showIP)?[_c('h2',{staticClass:\"o-sidebar-currency--infinity\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.IP, 2))+\" \")]),_c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(_vm._s(_vm.pluralize(\"Infinity Point\", _vm.IP)))])])]:[_c('h2',{staticClass:\"o-sidebar-currency--antimatter\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.AM, 2, 1))+\" \")]),_vm._m(1)]],2)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(\"Machines\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(\"Antimatter\")])])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernSidebarCurrency.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernSidebarCurrency.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernSidebarCurrency.vue?vue&type=template&id=bed69948&scoped=true&\"\nimport script from \"./ModernSidebarCurrency.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernSidebarCurrency.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bed69948\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isHidden && _vm.isAvailable)?_c('div',{class:[_vm.classObject, _vm.tab.config.UIClass]},[_c('div',{staticClass:\"l-tab-btn-inner\",on:{\"click\":function($event){return _vm.tab.show(true)}}},[_vm._v(\" \"+_vm._s(_vm.tabName)+\" \"),(_vm.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]),(_vm.showSubtabs)?_c('div',{staticClass:\"subtabs\"},[_vm._l((_vm.tab.subtabs),function(subtab,index){return [(_vm.subtabVisibilities[index])?_c('div',{key:index,staticClass:\"o-tab-btn o-tab-btn--subtab\",class:[_vm.tab.config.UIClass,\n {'o-subtab-btn--active': _vm.isCurrentSubtab(subtab.id)}],on:{\"click\":function($event){return subtab.show(true)}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(subtab.symbol)}}),(subtab.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e(),_c('div',{staticClass:\"o-subtab__tooltip\"},[_vm._v(\" \"+_vm._s(subtab.name)+\" \")])]):_vm._e()]})],2):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernTabButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernTabButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernTabButton.vue?vue&type=template&id=63b22e24&scoped=true&\"\nimport script from \"./ModernTabButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernTabButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernTabButton.vue?vue&type=style&index=0&id=63b22e24&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"63b22e24\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernSidebar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernSidebar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernSidebar.vue?vue&type=template&id=3833c36e&scoped=true&\"\nimport script from \"./ModernSidebar.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernSidebar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3833c36e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-new-game-container\",style:(_vm.style)},[_c('h2',[_vm._v(\" ...I have won, but at what cost. Surely there has to be another way... \")]),_c('h3',[_vm._v(\"Reset the entire game (including best Challenge Times and Best AM), but keep Automator Scripts, Secret Themes, Achievements, and Options.\")]),_c('div',{staticClass:\"c-new-game-button-container\"},[_c('button',{staticClass:\"c-new-game-button\",on:{\"click\":_vm.startNewGame}},[_vm._v(\" Mend the Multiverse \")])]),_c('br'),(_vm.hasMoreCosmetics)?_c('h3',[_vm._v(\" Since Royal is feeling generous today, you also unlock a new cosmetic set of your choice for Glyphs. These are freely modifiable once you reach Reality again, but are purely visual and offer no gameplay bonuses. \"),_c('br'),_c('button',{staticClass:\"c-new-game-button\",on:{\"click\":_vm.openSelectionModal}},[_vm._v(\" Choose Cosmetic Set \")]),_c('br'),_c('br'),_vm._v(\" Selected Set: \"+_vm._s(_vm.selectedSetName)+\" \")]):_c('h3',[_vm._v(\" You have unlocked all Glyph cosmetic sets! \")]),_c('br'),_c('h3',[_vm._v(\" This screen is temporary until the fancy graphics are done. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewGame.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewGame.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NewGame.vue?vue&type=template&id=0fe0fd40&scoped=true&\"\nimport script from \"./NewGame.vue?vue&type=script&lang=js&\"\nexport * from \"./NewGame.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NewGame.vue?vue&type=style&index=0&id=0fe0fd40&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0fe0fd40\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showModal)?_c('div',{ref:\"modal\",staticClass:\"c-modal l-modal\",style:(_vm.positionStyle)},[_c(_vm.modal.component,_vm._b({tag:\"component\",on:{\"close\":_vm.hide}},'component',_vm.modal.props,false))],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PopupModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PopupModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PopupModal.vue?vue&type=template&id=7fad14ae&\"\nimport script from \"./PopupModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PopupModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showTimeSinceSave)?_c('div',{staticClass:\"o-save-timer\",on:{\"click\":_vm.save}},[(_vm.saveDisabled)?_c('b',[_vm._v(\"There is nothing left to save...Or is there?\")]):_c('span',[_vm._v(\"Time since last save: \"+_vm._s(_vm.timeString))])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveTimer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveTimer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SaveTimer.vue?vue&type=template&id=4038e6d6&scoped=true&\"\nimport script from \"./SaveTimer.vue?vue&type=script&lang=js&\"\nexport * from \"./SaveTimer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SaveTimer.vue?vue&type=style&index=0&id=4038e6d6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4038e6d6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showSpectate)?_c('div',{key:_vm.endState},[_c('PrimaryButton',{staticClass:\"c-swap-button o-primary-btn--modal-close c-modal__close-btn tutorial--glow\",on:{\"click\":_vm.swap}},[_c('i',{staticClass:\"fas fa-sync\"})])],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpectateGame.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpectateGame.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpectateGame.vue?vue&type=template&id=21f229d4&scoped=true&\"\nimport script from \"./SpectateGame.vue?vue&type=script&lang=js&\"\nexport * from \"./SpectateGame.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SpectateGame.vue?vue&type=style&index=0&id=21f229d4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"21f229d4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isActive)?_c('div',{staticClass:\"c-speedrun-status\"},[(!_vm.isCollapsed)?_c('div',[_c('b',[_vm._v(\"Speedrun Status (\"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.statusText)}}),_vm._v(\")\")]),_c('br'),_c('span',{class:{ 'c-speedrun-status--can-change': !_vm.hasStarted },on:{\"click\":_vm.changeName}},[_vm._v(\" Player Name: \"+_vm._s(_vm.saveName)+\" \")]),_c('br'),_c('i',[_vm._v(_vm._s(_vm.segmentText))]),_c('br'),_c('i',[_vm._v(_vm._s(_vm.iapText))]),_c('br'),_c('span',{class:{ 'c-speedrun-status--can-change': _vm.canModifySeed },on:{\"click\":function($event){return _vm.openSeedModal()}}},[_vm._v(_vm._s(_vm.seedText))]),_c('br'),_vm._v(\" Total real playtime since start: \"+_vm._s(_vm.timePlayedStr)+\" \"),_c('br'),_vm._v(\" Offline Progress: \"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.offlineText)}}),_c('br'),_vm._v(\" Most Recent Milestone: \"+_vm._s(_vm.milestoneName(_vm.mostRecent))+\" \"),(_vm.mostRecent)?_c('span',[_vm._v(\"(\"+_vm._s(_vm.timeSince)+\" ago)\")]):_vm._e(),_c('br')]):_vm._e(),_c('div',{staticClass:\"c-speedrun-status--collapse\",on:{\"click\":_vm.toggleCollapse}},[_c('i',{class:_vm.collapseIcon}),_vm._v(\" \"+_vm._s(_vm.collapseText())+\" \"),_c('i',{class:_vm.collapseIcon})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunStatus.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedrunStatus.vue?vue&type=template&id=5faa7a14&scoped=true&\"\nimport script from \"./SpeedrunStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedrunStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SpeedrunStatus.vue?vue&type=style&index=0&id=5faa7a14&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5faa7a14\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"time-theorem-buttons\"},[_c('div',{staticClass:\"ttshop-container ttshop-background\"},[_c('div',{staticClass:\"ttbuttons-row ttbuttons-top-row\",attrs:{\"data-role\":\"page\"}},[_vm._m(0),_c('p',{staticClass:\"timetheorems\"},[_c('span',{staticClass:\"c-tt-amount\"},[_vm._v(\" \"+_vm._s(_vm.quantify(\"Time Theorem\", _vm.theoremAmount, 2, 0, _vm.formatTimeTheoremType))+\" \")]),(_vm.showST)?_c('span',[_c('br'),_vm._v(\" \"+_vm._s(_vm.quantifyInt(\"Space Theorem\", _vm.STamount))+\" \")]):_vm._e()]),_c('div',{staticClass:\"l-load-tree-area\"},[_c('div',{staticClass:\"l-tree-load-button-wrapper\"},[_c('span',{staticClass:\"c-ttshop__save-load-text\"},[_vm._v(_vm._s(_vm.saveLoadText))]),_vm._l((6),function(saveslot){return _c('TimeStudySaveLoadButton',{key:saveslot,attrs:{\"saveslot\":saveslot}})})],2),_c('div',{staticClass:\"tt-gen-container\"},[(_vm.hasTTGen)?_c('span',{staticClass:\"checkbox-margin\",attrs:{\"ach-tooltip\":\"This shows TT generation by default and total TT if you hold shift.\\n Check this box to swap this behavior.\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.invertTTgenDisplay),expression:\"invertTTgenDisplay\"}],staticClass:\"o-clickable\",attrs:{\"type\":\"checkbox\"},domProps:{\"value\":_vm.invertTTgenDisplay,\"checked\":Array.isArray(_vm.invertTTgenDisplay)?_vm._i(_vm.invertTTgenDisplay,_vm.invertTTgenDisplay)>-1:(_vm.invertTTgenDisplay)},on:{\"input\":function($event){return _vm.toggleTTgen()},\"change\":function($event){var $$a=_vm.invertTTgenDisplay,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=_vm.invertTTgenDisplay,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.invertTTgenDisplay=$$a.concat([$$v]))}else{$$i>-1&&(_vm.invertTTgenDisplay=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.invertTTgenDisplay=$$c}}}})]):_vm._e(),(_vm.showTTGen)?_c('span',[_vm._v(\" You are gaining \"+_vm._s(_vm.TTgenRateText)+\". \")]):_c('span',[_vm._v(\" You have \"+_vm._s(_vm.totalTimeTheoremText)+\". \")])])])]),(!_vm.minimized)?_c('div',{staticClass:\"ttbuttons-row\",style:(_vm.shopBottomRowHeightStyle)},[_c('TimeTheoremBuyButton',{attrs:{\"budget\":_vm.budget.am,\"cost\":_vm.costs.am,\"format-cost\":_vm.formatAM,\"action\":_vm.buyWithAM}}),_c('TimeTheoremBuyButton',{attrs:{\"budget\":_vm.budget.ip,\"cost\":_vm.costs.ip,\"format-cost\":_vm.formatIP,\"action\":_vm.buyWithIP}}),_c('TimeTheoremBuyButton',{attrs:{\"budget\":_vm.budget.ep,\"cost\":_vm.costs.ep,\"format-cost\":_vm.formatEP,\"action\":_vm.buyWithEP}}),_c('div',{staticClass:\"l-tt-buy-max-vbox\"},[(!_vm.minimized)?_c('button',{staticClass:\"o-tt-top-row-button c-tt-buy-button c-tt-buy-button--unlocked\",on:{\"click\":_vm.buyMaxTheorems}},[_vm._v(\" Buy max \")]):_vm._e(),(!_vm.minimized && _vm.hasTTAutobuyer)?_c('PrimaryToggleButton',{staticClass:\"o-tt-autobuyer-button c-tt-buy-button c-tt-buy-button--unlocked\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)],1):_c('div',{staticClass:\"ttbuttons-row ttbuttons-bottom-row-hide\"})]),(_vm.minimizeAvailable)?_c('button',{staticClass:\"ttshop-minimize-btn ttshop-background\",on:{\"click\":_vm.minimize}},[_c('span',{staticClass:\"minimize-arrow\",style:(_vm.minimizeArrowStyle)},[_vm._v(\"▼\")])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"l-tt-save-load-btn c-tt-buy-button c-tt-buy-button--unlocked\",attrs:{\"onClick\":\"Modal.preferredTree.show()\"}},[_c('i',{staticClass:\"fas fa-cog\"})])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('HoverMenu',{staticClass:\"l-tt-save-load-btn__wrapper\",scopedSlots:_vm._u([{key:\"object\",fn:function(){return [_c('button',{staticClass:\"l-tt-save-load-btn c-tt-buy-button c-tt-buy-button--unlocked\",on:{\"click\":[function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.save.apply(null, arguments)},function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.load.apply(null, arguments)}]}},[_vm._v(\" \"+_vm._s(_vm.displayName)+\" \")])]},proxy:true},{key:\"menu\",fn:function(){return [_c('div',{staticClass:\"l-tt-save-load-btn__menu c-tt-save-load-btn__menu\"},[_c('span',{attrs:{\"ach-tooltip\":\"Set a custom name (up to 4 ASCII characters)\"}},[_c('input',{staticClass:\"l-tt-save-load-btn__menu-rename c-tt-save-load-btn__menu-rename\",attrs:{\"type\":\"text\",\"size\":\"4\",\"maxlength\":\"4\"},domProps:{\"value\":_vm.name},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.hideContextMenu.apply(null, arguments)},\"blur\":_vm.nicknameBlur}})]),_c('div',{staticClass:\"l-tt-save-load-btn__menu-item c-tt-save-load-btn__menu-item\",on:{\"click\":_vm.edit}},[_vm._v(\" Edit \")]),_c('div',{staticClass:\"l-tt-save-load-btn__menu-item c-tt-save-load-btn__menu-item\",on:{\"click\":_vm.handleExport}},[_vm._v(\" Export \")]),_c('div',{staticClass:\"l-tt-save-load-btn__menu-item c-tt-save-load-btn__menu-item\",on:{\"click\":_vm.save}},[_vm._v(\" Save \")]),_c('div',{staticClass:\"l-tt-save-load-btn__menu-item\"},[_c('div',{staticClass:\"c-tt-save-load-btn__menu-item\",on:{\"click\":_vm.load}},[_vm._v(\" Load \")]),_c('div',{staticClass:\"c-tt-save-load-btn__menu-item__hover-options\"},[_c('div',{class:{\n 'c-tt-save-load-btn__menu-item__hover-option': true,\n 'c-tt-save-load-btn__menu-item__hover-option--disabled': !_vm.canEternity,\n },on:{\"click\":_vm.respecAndLoad}},[_vm._v(\" Respec and Load \")])])]),_c('div',{staticClass:\"l-tt-save-load-btn__menu-item c-tt-save-load-btn__menu-item\",on:{\"click\":_vm.deletePreset}},[_vm._v(\" Delete \")])])]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._g({staticClass:\"hover-menu__wrapper\",on:{\"contextmenu\":function($event){$event.preventDefault();return _vm.toggleContextMenu.apply(null, arguments)}}},_vm.listeners),[_vm._t(\"object\"),(_vm.contextMenuIsVisible)?_vm._t(\"menu\"):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HoverMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HoverMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HoverMenu.vue?vue&type=template&id=0f008cfb&scoped=true&\"\nimport script from \"./HoverMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./HoverMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HoverMenu.vue?vue&type=style&index=0&id=0f008cfb&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0f008cfb\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudySaveLoadButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudySaveLoadButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeStudySaveLoadButton.vue?vue&type=template&id=b401e76c&scoped=true&\"\nimport script from \"./TimeStudySaveLoadButton.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeStudySaveLoadButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TimeStudySaveLoadButton.vue?vue&type=style&index=0&id=b401e76c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b401e76c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"l-tt-buy-button c-tt-buy-button\",class:_vm.enabledClass,on:{\"click\":_vm.action}},[_vm._v(\" \"+_vm._s(_vm.isLocked ? \"Requires an Eternity to unlock\" : _vm.formatCost(_vm.cost))+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeTheoremBuyButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeTheoremBuyButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeTheoremBuyButton.vue?vue&type=template&id=2b3ed948&\"\nimport script from \"./TimeTheoremBuyButton.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeTheoremBuyButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeTheoremShop.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeTheoremShop.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeTheoremShop.vue?vue&type=template&id=46d9db85&scoped=true&\"\nimport script from \"./TimeTheoremShop.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeTheoremShop.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TimeTheoremShop.vue?vue&type=style&index=0&id=46d9db85&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"46d9db85\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameUiComponentFixed.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameUiComponentFixed.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GameUiComponentFixed.vue?vue&type=template&id=0ae8982e&scoped=true&\"\nimport script from \"./GameUiComponentFixed.vue?vue&type=script&lang=js&\"\nexport * from \"./GameUiComponentFixed.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GameUiComponentFixed.vue?vue&type=style&index=0&id=0ae8982e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0ae8982e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"page\"}},[_c('link',{attrs:{\"rel\":\"stylesheet\",\"type\":\"text/css\",\"href\":\"stylesheets/modern-styles.css\"}}),_c('div',{key:_vm.newGameKey,staticClass:\"game-container\",style:(_vm.topMargin)},[(_vm.news)?_c('NewsTicker'):_vm._e(),(_vm.hasMendingButton)?_c('div',{staticClass:\"c-mending-points\"},[_c('MendingPointsHeader'),_c('MendingButton')],1):_vm._e(),_c('BigCrunchButton'),(!_vm.bigCrunch)?_c('div',{staticClass:\"tab-container\"},[_c('HeaderPrestigeGroup'),_c('div',{staticClass:\"information-header\"},[_c('HeaderChallengeDisplay'),_c('HeaderChallengeEffects'),(_vm.hasReality)?_c('GameSpeedDisplay'):_vm._e(),(_vm.hasReality)?_c('br'):_vm._e(),_c('HeaderBlackHole')],1),_vm._t(\"default\")],2):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernUi.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernUi.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernUi.vue?vue&type=template&id=5d0773f0&scoped=true&\"\nimport script from \"./ModernUi.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernUi.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernUi.vue?vue&type=style&index=0&id=5d0773f0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5d0773f0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{key:_vm.newGameKey,staticClass:\"container c-classic l-Classic\",attrs:{\"id\":\"container\"}},[_c('link',{attrs:{\"rel\":\"stylesheet\",\"type\":\"text/css\",\"href\":\"stylesheets/synergism.css\"}}),_c('BigCrunchButton'),(!_vm.bigCrunch)?[(_vm.hasMendingButton)?_c('div',{staticClass:\"c-mending-points\"},[_c('MendingPointsHeader'),_c('MendingButton')],1):_vm._e(),_c('SynergismGameHeader'),_c('SynergismTabBar'),(_vm.tab.config.before)?_c(_vm.tab.config.before,{tag:\"component\"}):_vm._e(),_c('SynergismSubtabBar'),_c('div',{staticClass:\"l-classic__page\"},[_vm._t(\"default\")],2)]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('HeaderChallengeDisplay'),_c('HeaderChallengeEffects'),_c('HeaderPrestigeGroup'),(_vm.hasReality)?_c('GameSpeedDisplay'):_vm._e(),(_vm.hasReality)?_c('br'):_vm._e(),_c('HeaderBlackHole')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-prestige-info-blocks\"},[_c('HeaderEternityContainer',{staticClass:\"l-game-header__eternity\"}),_c('HeaderCenterContainer',{staticClass:\"l-game-header__center\"}),_c('HeaderInfinityContainer',{staticClass:\"l-game-header__infinity\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.shouldDisplay)?_c('div',{staticClass:\"c-prestige-button-container\"},[_c('span',[_vm._v(\"You have \"),_c('span',{staticClass:\"c-game-header__antimatter\"},[_vm._v(_vm._s(_vm.format(_vm.antimatter, 2, 1)))]),_vm._v(\" antimatter.\")]),(_vm.hasRealityButton)?_c('div',{staticClass:\"c-reality-container\"},[_c('RealityCurrencyHeader'),(_vm.isDoomed)?_c('ArmageddonButton',{attrs:{\"is-header\":true}}):_vm._e()],1):_c('div',[_c('br'),_c('HeaderTickspeedInfo')],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('button',{staticClass:\"c-mending-button\",class:_vm.buttonClassObject,on:{\"click\":_vm.mend}},[(_vm.firstMend)?[_vm._v(\" There is another way... You need to Mend the Multiverse. \")]:(_vm.needDoom)?[_vm._v(\" Reach \"),_c('span',[_vm._v(_vm._s(_vm.formatNE(_vm.END, 2, 2)))]),_vm._v(\" antimatter in a Doomed Reality to Mend the Multiverse \")]:(!_vm.canMend)?[_vm._v(\" Reach \"),_c('span',[_vm._v(_vm._s(_vm.formatNE(_vm.END, 2, 2)))]),_vm._v(\" antimatter to Mend the Multiverse \")]:[_vm._v(\" Mend the Multiverse for \"),_c('span',[_vm._v(_vm._s(_vm.formatNE(_vm.gainedMvR, 2)))]),_vm._v(\" Multiversal \"+_vm._s(_vm.pluralize(\"Remain\", _vm.gainedMvR))+\" \")]],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingButton.vue?vue&type=template&id=1185f4a5&\"\nimport script from \"./MendingButton.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismHeaderCenterContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismHeaderCenterContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismHeaderCenterContainer.vue?vue&type=template&id=599f99ca&scoped=true&\"\nimport script from \"./SynergismHeaderCenterContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismHeaderCenterContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismHeaderCenterContainer.vue?vue&type=style&index=0&id=599f99ca&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"599f99ca\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showContainer)?_c('div',{staticClass:\"c-prestige-button-container\"},[(_vm.showEP)?_c('div',{staticClass:\"c-eternity-points\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-game-header__ep-amount\"},[_vm._v(_vm._s(_vm.format(_vm.eternityPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Eternity Point\", _vm.eternityPoints))+\". \"),(_vm.showNextEP)?_c('span',[_vm._v(\"(Next EP at \"+_vm._s(_vm.format(_vm.nextEP, 1))+\" IP)\")]):_vm._e()]):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('img',{staticClass:\"syn-button-size\",attrs:{\"src\":\"images/synergismUI/eternity.png\"},on:{\"click\":_vm.handleClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismEternityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismEternityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismEternityButton.vue?vue&type=template&id=165e6483&scoped=true&\"\nimport script from \"./SynergismEternityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismEternityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"165e6483\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismEPHeaderContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismEPHeaderContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismEPHeaderContainer.vue?vue&type=template&id=1172a401&scoped=true&\"\nimport script from \"./SynergismEPHeaderContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismEPHeaderContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismEPHeaderContainer.vue?vue&type=style&index=0&id=1172a401&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1172a401\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showContainer)?_c('div',{staticClass:\"c-prestige-button-container\"},[_c('div',{staticClass:\"c-infinity-points\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-game-header__ip-amount\"},[_vm._v(_vm._s(_vm.format(_vm.infinityPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Infinity Point\", _vm.infinityPoints))+\". \"),(_vm.isTesseractUnlocked)?_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.tesseractText)}}):_vm._e()]),_c('div',{staticClass:\"flex\"},[_c('SynergismBigCrunchButton'),_c('SynergismEternityButton'),_c('SynergismRealityButton')],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('img',{staticClass:\"syn-button-size\",attrs:{\"src\":\"images/synergismUI/infinity.png\"},on:{\"click\":_vm.handleClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismBigCrunchButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismBigCrunchButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismBigCrunchButton.vue?vue&type=template&id=f67e95c6&scoped=true&\"\nimport script from \"./SynergismBigCrunchButton.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismBigCrunchButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f67e95c6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('img',{staticClass:\"syn-button-size\",attrs:{\"src\":\"images/synergismUI/reality.png\"},on:{\"click\":_vm.handleClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismRealityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismRealityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismRealityButton.vue?vue&type=template&id=47de6ff9&scoped=true&\"\nimport script from \"./SynergismRealityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismRealityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"47de6ff9\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismHeaderInfinityContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismHeaderInfinityContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismHeaderInfinityContainer.vue?vue&type=template&id=57d02076&scoped=true&\"\nimport script from \"./SynergismHeaderInfinityContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismHeaderInfinityContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismHeaderInfinityContainer.vue?vue&type=style&index=0&id=57d02076&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57d02076\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismHeaderPrestigeGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismHeaderPrestigeGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismHeaderPrestigeGroup.vue?vue&type=template&id=019433b0&scoped=true&\"\nimport script from \"./SynergismHeaderPrestigeGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismHeaderPrestigeGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismHeaderPrestigeGroup.vue?vue&type=style&index=0&id=019433b0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"019433b0\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismGameHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismGameHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismGameHeader.vue?vue&type=template&id=c4dddef4&scoped=true&\"\nimport script from \"./SynergismGameHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismGameHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c4dddef4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{staticClass:\"c-subtab-button-container\"},_vm._l((_vm.subtabs),function(subtab,i){return _c('SynergismSubtabButton',{key:i,attrs:{\"subtab\":subtab,\"parent-name\":_vm.tab.name}})}),1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isAvailable)?_c('button',{class:_vm.classObject,on:{\"click\":function($event){return _vm.subtab.show(true)}}},[_vm._v(\" \"+_vm._s(_vm.tabName)+\" \"),(_vm.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismSubtabButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismSubtabButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismSubtabButton.vue?vue&type=template&id=b30deff4&scoped=true&\"\nimport script from \"./SynergismSubtabButton.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismSubtabButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismSubtabButton.vue?vue&type=style&index=0&id=b30deff4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b30deff4\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismSubtabBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismSubtabBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismSubtabBar.vue?vue&type=template&id=093e66f8&scoped=true&\"\nimport script from \"./SynergismSubtabBar.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismSubtabBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"093e66f8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.tabs),function(tab,i){return _c('SynergismTabButton',{key:i,attrs:{\"tab-position\":i,\"tab\":tab}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isAvailable)?_c('button',{staticClass:\"o-tab-btn\",class:[_vm.tab.config.UIClass,\n { 'o-tab-btn--active': _vm.isCurrentTab }],on:{\"click\":function($event){return _vm.tab.show(true)}}},[_vm._v(\" \"+_vm._s(_vm.tabName)+\" \"),(_vm.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismTabButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismTabButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismTabButton.vue?vue&type=template&id=1e3e3693&scoped=true&\"\nimport script from \"./SynergismTabButton.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismTabButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismTabButton.vue?vue&type=style&index=0&id=1e3e3693&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1e3e3693\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismTabBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismTabBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismTabBar.vue?vue&type=template&id=855f000a&scoped=true&\"\nimport script from \"./SynergismTabBar.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismTabBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"855f000a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-eternity-tab__header\"},[_c('span',{staticClass:\"c-eternity-tab__eternity-points\"},[_vm._v(_vm._s(_vm.format(this.eternityPoints, 2)))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismEpHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismEpHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismEpHeader.vue?vue&type=template&id=1e3dc62f&scoped=true&\"\nimport script from \"./SynergismEpHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismEpHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1e3dc62f\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismUi.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismUi.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismUi.vue?vue&type=template&id=bf1bfb3a&scoped=true&\"\nimport script from \"./SynergismUi.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismUi.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismUi.vue?vue&type=style&index=0&id=bf1bfb3a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bf1bfb3a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-ra-alchemy-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.showAlchemyHowTo}},[_vm._v(\" Click for alchemy info \")]),(!_vm.isDoomed)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.toggleAllReactions}},[_vm._v(\" \"+_vm._s(_vm.allReactionsDisabled ? \"Enable\" : \"Disable\")+\" all reactions \")]):_vm._e(),(_vm.realityCreationVisible)?_c('PrimaryButton',{class:_vm.realityGlyphCreationClass,attrs:{\"onclick\":\"Modal.realityGlyph.show()\"}},[_vm._v(\" View Reality Glyph creation \")]):_vm._e()],1),_c('AlchemyResourceInfo',{key:_vm.infoResourceId,attrs:{\"resource\":_vm.infoResource}}),_c('br'),_vm._v(\" Glyphs can now be refined using your Glyph filter in the Glyphs tab. \"),_c('br'),_vm._v(\" When refining a Glyph, it will only give you resources up to a cap of \"+_vm._s(_vm.formatX(_vm.capFactor))+\" its highest refinement value. \"),(_vm.reactionsAvailable)?_c('span',[_vm._v(\" Reactions trigger once every time you Reality, unaffected by amplification from stored real time. \")]):_vm._e(),_c('div',{staticClass:\"l-alchemy-circle\",style:(_vm.circleStyle)},[(_vm.isDoomed)?_c('span',{staticClass:\"c-pelle-symbol-overlay\",domProps:{\"innerHTML\":_vm._s(_vm.pelleSymbol)}}):_vm._e(),_c('svg',{staticClass:\"l-alchemy-orbit-canvas\"},_vm._l((_vm.layout.orbits),function(orbit,i){return _c('circle',{key:i,staticClass:\"o-alchemy-orbit\",class:_vm.orbitClass,attrs:{\"cx\":\"50%\",\"cy\":\"50%\",\"r\":_vm.orbitSize(orbit)}})}),0),_vm._l((_vm.layout.nodes),function(node,i){return _c('AlchemyCircleNode',{key:i,class:_vm.nodeClass(node),attrs:{\"node\":node,\"is-focused\":_vm.isFocusedNode(node)},on:{\"mouseenter\":function($event){return _vm.handleMouseEnter(node)},\"mouseleave\":_vm.handleMouseLeave,\"click\":function($event){return _vm.handleClick(node)}}})}),_c('svg',{staticClass:\"l-alchemy-arrow-canvas\"},[_vm._l((_vm.layout.reactionArrows),function(reactionArrow,idx){return _c('line',_vm._b({key:'arrow-' + idx + _vm.realityAmount,class:_vm.reactionPathClass(reactionArrow)},'line',_vm.reactionArrowPaths(reactionArrow),false))}),_vm._l((_vm.layout.reactionArrows),function(reactionArrow,idx){return _c('line',_vm._b({key:'arrow2-' + idx + _vm.realityAmount,class:_vm.reactionArrowClass(reactionArrow)},'line',_vm.reactionArrowPositions(reactionArrow),false))})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","class AlchemyOrbitLayout {\r\n constructor(tier, radius, angleOffset = 0) {\r\n this._resources = AlchemyResources.all\r\n .filter(y => y.config.tier === tier)\r\n .sort((x, y) => x.config.uiOrder - y.config.uiOrder);\r\n this._radius = radius;\r\n this._angleOffset = angleOffset;\r\n }\r\n\r\n get radius() {\r\n return this._radius;\r\n }\r\n\r\n get nodes() {\r\n const nodes = [];\r\n const step = Math.PI_2 / this._resources.length;\r\n let angle = this._angleOffset;\r\n for (const resource of this._resources) {\r\n nodes.push({\r\n resource,\r\n x: this._radius * Math.sin(angle),\r\n y: this._radius * Math.cos(angle)\r\n });\r\n angle += step;\r\n }\r\n return nodes;\r\n }\r\n}\r\n\r\nexport class AlchemyCircleLayout {\r\n constructor() {\r\n this.orbits = [\r\n new AlchemyOrbitLayout(1, 4, -Math.PI / 3),\r\n new AlchemyOrbitLayout(2, 3),\r\n new AlchemyOrbitLayout(3, 2, Math.PI / 3),\r\n new AlchemyOrbitLayout(4, 1, -Math.PI / 6),\r\n new AlchemyOrbitLayout(5, 0)\r\n ];\r\n const nodes = [];\r\n for (const orbitNodes of this.orbits.map(o => o.nodes)) {\r\n nodes.push(...orbitNodes);\r\n }\r\n const size = Math.max(\r\n nodes.map(p => Math.abs(p.x)).max(),\r\n nodes.map(p => Math.abs(p.y)).max()\r\n ) * 2;\r\n for (const node of nodes) {\r\n node.x = (node.x / size + 0.5) * 100;\r\n node.y = (node.y / size + 0.5) * 100;\r\n }\r\n const reactionArrows = [];\r\n for (const reaction of AlchemyReactions.all.compact()) {\r\n const productNode = nodes\r\n .find(n => n.resource === reaction.product);\r\n const reagentNodes = reaction.reagents\r\n .map(r => nodes.find(n => n.resource === r.resource));\r\n for (const reagentNode of reagentNodes) {\r\n reactionArrows.push({\r\n reaction,\r\n reagent: reagentNode,\r\n product: productNode,\r\n });\r\n }\r\n }\r\n this.reactionArrows = reactionArrows;\r\n this.nodes = nodes;\r\n this.size = size;\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-alchemy-node\",class:_vm.classObject,style:(_vm.layoutStyle),on:{\"mouseenter\":function($event){return _vm.$emit('mouseenter')},\"mouseleave\":function($event){return _vm.$emit('mouseleave')},\"click\":_vm.emitClick}},[_c('AlchemyResourceArc',{attrs:{\"resource\":_vm.resource,\"class-object\":_vm.classObject}}),(_vm.isUnlocked)?_c('span',[_c('HintText',{staticClass:\"o-hint-text--alchemy-node l-hint-text--alchemy-node\",class:_vm.hintClassObject,attrs:{\"type\":\"alchemy\"}},[_vm._v(\" \"+_vm._s(_vm.formatInt(_vm.amount))+\" \")])],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-alchemy-resource-arc-wrapper\"},[_c('div',{staticClass:\"o-alchemy-resource-arc-spinner o-alchemy-resource-arc-circle\",style:(_vm.spinnerTransform)}),_c('div',{staticClass:\"o-alchemy-resource-arc-filler o-alchemy-resource-arc-circle\",style:(_vm.fillerTransform)}),_c('div',{staticClass:\"o-alchemy-resource-arc-mask\",style:(_vm.maskTransform)}),_c('div',{staticClass:\"o-alchemy-node-mask\",class:_vm.classObject},[_vm._v(\" \"+_vm._s(_vm.resource.symbol)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyResourceArc.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyResourceArc.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AlchemyResourceArc.vue?vue&type=template&id=18cd169c&scoped=true&\"\nimport script from \"./AlchemyResourceArc.vue?vue&type=script&lang=js&\"\nexport * from \"./AlchemyResourceArc.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"18cd169c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showThisHintText),expression:\"showThisHintText\"}],staticClass:\"o-hint-text l-hint-text\"},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HintText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HintText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HintText.vue?vue&type=template&id=53e490cc&\"\nimport script from \"./HintText.vue?vue&type=script&lang=js&\"\nexport * from \"./HintText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyCircleNode.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyCircleNode.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AlchemyCircleNode.vue?vue&type=template&id=ce831c78&scoped=true&\"\nimport script from \"./AlchemyCircleNode.vue?vue&type=script&lang=js&\"\nexport * from \"./AlchemyCircleNode.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ce831c78\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('div',{class:_vm.classObject},[_c('span',{staticClass:\"c-alchemy-resource-info__title\"},[_vm._v(\" \"+_vm._s(_vm.resource.symbol)+\" \"+_vm._s(_vm.resource.name)+\" \"+_vm._s(_vm.resource.symbol)+\" \")]),(_vm.isDoomed)?_c('span',[_vm._v(\" Destroyed by Pelle \")]):_c('span',[_vm._v(\" \"+_vm._s(_vm.capped ? \"Capped\" : \"Current\")+\": \"+_vm._s(_vm.resourceAmount)+\"/\"+_vm._s(_vm.resourceCap)+\" (Recent change: \"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.formattedFlow)}}),_vm._v(\") \")]),(_vm.isBaseResource)?_c('span',[_vm._v(\"Base Resource\")]):_c('span',[_vm._v(\"Reaction: \"+_vm._s(_vm.isReactionActive ? \"Active\" : \"Inactive\")+\" (\"+_vm._s(_vm.reactionText)+\")\")]),_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_c('EffectDisplay',{attrs:{\"label\":\"Effect\",\"config\":_vm.effectConfig}})],1)]):_c('div',{class:_vm.classObject},[_vm._v(\" Unlock requirement: \"+_vm._s(_vm.unlockRequirement)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible && _vm.effectDisplay !== undefined)?_c('span',[(_vm.br)?_c('br'):_vm._e(),_vm._v(\" \"+_vm._s(_vm.labelDisplay)+_vm._s(_vm.effectDisplay)+\" \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export function isNumber(value) {\r\n return typeof value === \"number\";\r\n}\r\n\r\nexport function isString(value) {\r\n return typeof value === \"string\";\r\n}\r\n\r\nexport function isFunction(value) {\r\n return typeof value === \"function\";\r\n}\r\n\r\nexport function isDecimal(value) {\r\n return value instanceof Decimal;\r\n}\r\n","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffectDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffectDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EffectDisplay.vue?vue&type=template&id=69daf308&\"\nimport script from \"./EffectDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./EffectDisplay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyResourceInfo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyResourceInfo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AlchemyResourceInfo.vue?vue&type=template&id=e419527e&scoped=true&\"\nimport script from \"./AlchemyResourceInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./AlchemyResourceInfo.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e419527e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AlchemyTab.vue?vue&type=template&id=c78c9e4e&scoped=true&\"\nimport script from \"./AlchemyTab.vue?vue&type=script&lang=js&\"\nexport * from \"./AlchemyTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AlchemyTab.vue?vue&type=style&index=0&id=c78c9e4e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c78c9e4e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.activeComponent,{tag:\"component\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-classic-antimatter-dim-tab\"},[_c('AntimatterDimensionsTabHeader'),_vm._v(\" \"+_vm._s(_vm.multiplierText)+\" \"),_c('TickspeedRow'),_c('div',{staticClass:\"l-dimensions-container\"},[_vm._l((8),function(tier){return _c('AntimatterDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),_c('DimensionBoostRow'),_c('AntimatterGalaxyRow')],2),(_vm.isQuickResetAvailable)?_c('PrimaryButton',{staticClass:\"o-primary-btn--quick-reset\",on:{\"click\":_vm.quickReset}},[_vm._v(\" Perform a Dimension Boost reset \"),(_vm.hasDimensionBoosts)?_c('span',[_vm._v(\" but lose a Dimension Boost\")]):_c('span',[_vm._v(\" for no gain\")])]):_vm._e(),_c('div',{staticClass:\"l-flex\"}),_c('AntimatterDimensionProgressBar',{staticClass:\"l-antimatter-dim-tab__progress_bar\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-progress-bar\"},[_c('div',{staticClass:\"c-progress-bar__fill\",style:(_vm.progressBarStyle)},[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],staticClass:\"c-progress-bar__percents\"},[_vm._v(\" \"+_vm._s(_vm.displayPercents)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AntimatterDimensionProgressBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AntimatterDimensionProgressBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AntimatterDimensionProgressBar.vue?vue&type=template&id=1f1d3382&\"\nimport script from \"./AntimatterDimensionProgressBar.vue?vue&type=script&lang=js&\"\nexport * from \"./AntimatterDimensionProgressBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row c-antimatter-dim-row l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 2),\"amount-text\":_vm.amountText,\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container\"},[(!_vm.isContinuumActive)?_c('PrimaryButton',{class:_vm.buySingleClass,attrs:{\"enabled\":_vm.isAffordable && !_vm.isCapped && _vm.isUnlocked},on:{\"click\":_vm.buySingle}},[_c('div',{class:_vm.tutorialClass()},[_vm._v(\" \"+_vm._s(_vm.singleText)+\" \")]),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.boughtTooltip)+\" \")]),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e(),_c('PrimaryButton',{class:_vm.buyTenClass,attrs:{\"enabled\":(_vm.isAffordableUntil10 || _vm.isContinuumActive) && !_vm.isCapped && _vm.isUnlocked},on:{\"click\":_vm.buyUntil10}},[_vm._v(\" \"+_vm._s(_vm.until10Text)+\" \"),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.boughtTooltip)+\" \")])])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-dimension-text-container\"},[_c('div',{class:_vm.adjustableTextClass()},[_c('span',{staticClass:\"c-dim-row__large\"},[_vm._v(\" \"+_vm._s(_vm.name)+\" \")]),_c('span',{staticClass:\"c-dim-row__small\"},[_vm._v(\" \"+_vm._s(_vm.multiplierText)+\" \")])]),_c('div',{class:_vm.adjustableTextClass()},[_c('span',{staticClass:\"c-dim-row__large\"},[_vm._v(\" \"+_vm._s(_vm.amountText)+\" \")]),(_vm.rate.neq(0) && _vm.showPercentage)?_c('span',{staticClass:\"c-dim-row__small\"},[_vm._v(\" \"+_vm._s(_vm.rateText)+\" \")]):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GenericDimensionRowText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GenericDimensionRowText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GenericDimensionRowText.vue?vue&type=template&id=74ffc647&scoped=true&\"\nimport script from \"./GenericDimensionRowText.vue?vue&type=script&lang=js&\"\nexport * from \"./GenericDimensionRowText.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GenericDimensionRowText.vue?vue&type=style&index=0&id=74ffc647&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"74ffc647\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicAntimatterDimensionRow.vue?vue&type=template&id=623bbdde&scoped=true&\"\nimport script from \"./ClassicAntimatterDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicAntimatterDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicAntimatterDimensionRow.vue?vue&type=style&index=0&id=623bbdde&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"623bbdde\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-antimatter-dim-tab__header\"},[_c('PrimaryButton',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isSacrificeUnlocked),expression:\"isSacrificeUnlocked\"},{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.sacrificeTooltip),expression:\"sacrificeTooltip\"}],staticClass:\"o-primary-btn--sacrifice\",attrs:{\"enabled\":_vm.isSacrificeAffordable},on:{\"click\":_vm.sacrifice}},[(_vm.isSacrificeAffordable)?_c('span',[_vm._v(\" Dimensional Sacrifice (\"+_vm._s(_vm.formatX(_vm.sacrificeBoost, 2, 2))+\") \")]):_c('span',[_vm._v(\" Dimensional Sacrifice Disabled (\"+_vm._s(_vm.disabledCondition)+\") \")])]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-max\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all (M) \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicAntimatterDimensionsTabHeader.vue?vue&type=template&id=7341afa2&\"\nimport script from \"./ClassicAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-dimension-row c-antimatter-dim-row c-antimatter-prestige-row\"},[_c('div',{staticClass:\"l-dim-row__prestige-text c-dim-row__label c-dim-row__label--amount l-text-wrapper\"},[_vm._v(\" \"+_vm._s(_vm.typeName)+\" (\"+_vm._s(_vm.sumText)+\") \"+_vm._s(_vm.galRequirementText)+\" \"),_c('div',{staticClass:\"l-scaling-text-wrapper\"},[_vm._v(\" \"+_vm._s(_vm.hasIncreasedScaling ? _vm.costScalingText : \"\")+\" \")])]),_c('PrimaryButton',{class:_vm.classObject,attrs:{\"enabled\":_vm.canBeBought},on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.buyGalaxy(true)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.buyGalaxy(false)}]}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \"),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicAntimatterGalaxyRow.vue?vue&type=template&id=51c836b2&scoped=true&\"\nimport script from \"./ClassicAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicAntimatterGalaxyRow.vue?vue&type=style&index=0&id=51c836b2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"51c836b2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-dimension-row c-antimatter-dim-row c-antimatter-prestige-row\"},[_c('div',{staticClass:\"l-dim-row__prestige-text c-dim-row__label c-dim-row__label--amount\"},[_vm._v(\" \"+_vm._s(_vm.boostScale)+\" Dimension Boost (\"+_vm._s(_vm.boostCountText)+\") \"+_vm._s(_vm.dimRequirementText)+\" \")]),_c('PrimaryButton',{class:_vm.classObject,attrs:{\"enabled\":_vm.isBuyable},on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.dimensionBoost(true)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.dimensionBoost(false)}]}},[_vm._v(\" \"+_vm._s(_vm.unlockedByBoost)+\" \"),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { BitPurchasableMechanicState, RebuyableMechanicState } from \"./game-mechanics\";\r\n\r\nclass WarpUpgradeState extends BitPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.registerEvents(config.checkEvent, () => this.tryUnlock());\r\n }\r\n get isBought() {\r\n return (this.bits & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set isBought(value) {\r\n if (value) {\r\n this.bits |= (1 << this.bitIndex);\r\n } else {\r\n this.bits &= ~(1 << this.bitIndex);\r\n }\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get shortDescription() {\r\n return this.config.shortDescription ? this.config.shortDescription() : \"\";\r\n }\r\n\r\n get requirement() {\r\n return typeof this.config.requirement === \"function\" ? this.config.requirement() : this.config.requirement;\r\n }\r\n\r\n get lockEvent() {\r\n return typeof this.config.lockEvent === \"function\" ? this.config.lockEvent() : this.config.lockEvent;\r\n }\r\n\r\n get currency() {\r\n return Currency.mendingPoints;\r\n }\r\n\r\n get bitIndex() {\r\n return this.id;\r\n }\r\n\r\n get bits() {\r\n return player.mending.warpUpgradeBits;\r\n }\r\n\r\n set bits(value) {\r\n player.mending.warpUpgradeBits = value;\r\n }\r\n\r\n get hasPlayerLock() {\r\n return (player.mending.reqLock.warp & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set hasPlayerLock(value) {\r\n if (value) player.mending.reqLock.warp |= 1 << this.bitIndex;\r\n else player.mending.reqLock.warp &= ~(1 << this.bitIndex);\r\n }\r\n\r\n get isLockingMechanics() {\r\n const shouldBypass = this.config.bypassLock?.() ?? false;\r\n return this.hasPlayerLock && this.isPossible && !shouldBypass && !this.isAvailableForPurchase;\r\n }\r\n\r\n // Required to be changed this way to avoid direct prop mutation in Vue components\r\n setMechanicLock(value) {\r\n this.hasPlayerLock = value;\r\n }\r\n\r\n toggleMechanicLock() {\r\n this.hasPlayerLock = !this.hasPlayerLock;\r\n }\r\n\r\n // Note we don't actually show the modal if we already failed or unlocked it\r\n tryShowWarningModal(specialLockText) {\r\n if (this.isPossible && !this.isAvailableForPurchase) {\r\n Modal.upgradeLock.show({ upgrade: this, isImaginary: false, specialLockText });\r\n }\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return (player.mending.warpUpgReqs & (1 << this.id)) !== 0;\r\n }\r\n\r\n get isPossible() {\r\n return this.config.hasFailed ? !this.config.hasFailed() : true;\r\n }\r\n\r\n tryUnlock() {\r\n const warpReached = player.reality.warped;\r\n if (!warpReached || this.isAvailableForPurchase || !this.config.checkRequirement()) return;\r\n player.mending.warpUpgReqs |= (1 << this.id);\r\n GameUI.notify.reality(`You've unlocked a Warp Upgrade: ${this.config.name}`);\r\n this.hasPlayerLock = false;\r\n }\r\n\r\n onPurchased() {\r\n EventHub.dispatch(GAME_EVENT.WARP_UPGRADE_BOUGHT);\r\n const id = this.id;\r\n //insert code here\r\n GameCache.staticGlyphWeights.invalidate();\r\n }\r\n}\r\n\r\nclass RebuyableWarpUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.mendingPoints;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.mending.warpRebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.mending.warpRebuyables[this.id] = value;\r\n }\r\n}\r\n\r\nWarpUpgradeState.index = mapGameData(\r\n GameDatabase.mending.warpUpgrades,\r\n config => (config.id < 4\r\n ? new RebuyableWarpUpgradeState(config)\r\n : new WarpUpgradeState(config))\r\n);\r\n\r\n/**\r\n * @param {number} id\r\n * @return {WarpUpgradeState|RebuyableWarpUpgradeState}\r\n */\r\nexport const WarpUpgrade = id => WarpUpgradeState.index[id];\r\n\r\nexport const WarpUpgrades = {\r\n /**\r\n * @type {(WarpUpgradeState|RebuyableWarpUpgradeState)[]}\r\n */\r\n all: WarpUpgradeState.index.compact(),\r\n get allBought() {\r\n return (player.mending.warpUpgradeBits >> 3) + 1 === 1 << (GameDatabase.mending.warpUpgrades.length - 2);\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { Currency } from \"./currency\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\nimport { WarpUpgrade } from \"./warp-upgrades\";\r\n\r\nexport const DIMBOOST_TYPE = {\r\n BOOST: 0,\r\n SHIFT: 1,\r\n WARP: 2,\r\n SCALE: 3\r\n};\r\n\r\nclass DimBoostRequirement {\r\n constructor(tier, amount) {\r\n this.tier = tier;\r\n this.amount = amount;\r\n }\r\n\r\n get isSatisfied() {\r\n const dimension = AntimatterDimension(this.tier);\r\n return dimension.totalAmount.gte(this.amount);\r\n }\r\n}\r\n\r\nexport class DimBoost {\r\n static get scaleStart(){\r\n let x = 5e13;\r\n if(WarpUpgrade(10).isBought) x*=20;\r\n return x;\r\n }\r\n static get warpStart() {\r\n let x =2.5e11;\r\n if(WarpUpgrade(10).isBought) x*=20;\r\n return x;\r\n }\r\n\r\n static get shiftStart() {\r\n let x = 1e9;\r\n if(WarpUpgrade(10).isBought) x*=20;\r\n return x;\r\n }\r\n\r\n static get power() {\r\n if (NormalChallenge(8).isRunning) {\r\n return DC.D1;\r\n }\r\n\r\n let boost = Effects.max(\r\n 2,\r\n InfinityUpgrade.dimboostMult,\r\n InfinityChallenge(7).reward,\r\n InfinityChallenge(7),\r\n TimeStudy(81)\r\n )\r\n .toDecimal()\r\n .timesEffectsOf(\r\n TimeStudy(83),\r\n TimeStudy(231),\r\n Achievement(117),\r\n Achievement(142),\r\n GlyphEffect.dimBoostPower,\r\n PelleRifts.recursion.milestones[0]\r\n ).powEffectsOf(InfinityUpgrade.dimboostMult.chargedEffect);\r\n if (GlyphAlteration.isAdded(\"effarig\")) boost = boost.pow(getSecondaryGlyphEffect(\"effarigforgotten\"));\r\n return boost;\r\n }\r\n\r\n static multiplierToNDTier(tier) {\r\n const normalBoostMult = DimBoost.power.pow(this.purchasedBoosts + 1 - tier).clampMin(1);\r\n const imaginaryBoostMult = DimBoost.power.times(ImaginaryUpgrade(24).effectOrDefault(1))\r\n .pow(this.imaginaryBoosts).clampMin(1);\r\n return normalBoostMult.times(imaginaryBoostMult);\r\n }\r\n\r\n static get maxDimensionsUnlockable() {\r\n return NormalChallenge(10).isRunning ? 6 : 8;\r\n }\r\n\r\n static get canUnlockNewDimension() {\r\n return DimBoost.purchasedBoosts + 4 < DimBoost.maxDimensionsUnlockable;\r\n }\r\n\r\n static get maxBoosts() {\r\n //woah nice design here--sxy\r\n let corruptionMax = 1e15;\r\n if (player.mending.corruptionChallenge.corruptedMend) corruptionMax = corruptionPenalties.galWeak.hiddenThree[player.mending.corruption[3]];\r\n if (Ra.isRunning) {\r\n // Ra makes boosting impossible. Note that this function isn't called\r\n // when giving initial boosts, so the player will still get those.\r\n return Ra.unlocks.raRealUncapDimboost.isUnlocked ? corruptionMax : 0;\r\n }\r\n if (InfinityChallenge(1).isRunning) {\r\n // Usually, in Challenge 8, the only boosts that are useful are the first 5\r\n // (the fifth unlocks sacrifice). In IC1 (Challenge 8 and Challenge 10\r\n // combined, among other things), only the first 2 are useful\r\n // (they unlock new dimensions).\r\n // There's no actual problem with bulk letting the player get\r\n // more boosts than this; it's just that boosts beyond this are pointless.\r\n return 2;\r\n }\r\n if (NormalChallenge(8).isRunning) {\r\n // See above. It's important we check for this after checking for IC1 since otherwise\r\n // this case would trigger when we're in IC1.\r\n return 5;\r\n }\r\n return corruptionMax;//this might be extended later.--sxy\r\n }\r\n\r\n static get type() {\r\n return this.typeAt(player.dimensionBoosts);\r\n }\r\n\r\n static typeAt(dimboosts) {\r\n if (dimboosts >= DimBoost.scaleStart) {\r\n return DIMBOOST_TYPE.SCALE;\r\n }\r\n if (dimboosts >= DimBoost.warpStart) {\r\n return DIMBOOST_TYPE.WARP;\r\n }\r\n if (dimboosts >= DimBoost.shiftStart) {\r\n return DIMBOOST_TYPE.SHIFT;\r\n }\r\n return DIMBOOST_TYPE.BOOST;\r\n }\r\n\r\n static get canBeBought() {\r\n if (DimBoost.purchasedBoosts >= this.maxBoosts) return false;\r\n if (player.records.thisInfinity.maxAM.gt(Player.infinityGoal) &&\r\n (!player.break || Player.isInAntimatterChallenge)) return false;\r\n return true;\r\n }\r\n\r\n static get lockText() {\r\n let boostCap = 1e12;\r\n if (DimBoost.purchasedBoosts >= this.maxBoosts) {\r\n if (Ra.isRunning) return \"Locked (Ra's Reality)\";\r\n if (InfinityChallenge(1).isRunning) return \"Locked (Infinity Challenge 1)\";\r\n if (NormalChallenge(8).isRunning) return \"Locked (8th Antimatter Dimension Autobuyer Challenge)\";\r\n }\r\n return player.dimensionBoosts >= this.maxBoosts ? \"Capped at \" + formatInt(boostCap) +\" Dimension Boosts\" : null;\r\n }\r\n\r\n static get requirement() {\r\n return this.bulkRequirement(1);\r\n }\r\n\r\n static bulkRequirement(bulk) {\r\n const targetResets = DimBoost.purchasedBoosts + bulk;\r\n const tier = Math.min(targetResets + 3, this.maxDimensionsUnlockable);\r\n let amount = 20;\r\n const discount = Effects.sum(\r\n TimeStudy(211),\r\n TimeStudy(222)\r\n );\r\n if (tier === 6 && NormalChallenge(10).isRunning) {\r\n amount += Math.round((targetResets - 3) * (20 - discount));\r\n } else if (tier === 8) {\r\n amount += Math.round((targetResets - 5) * (15 - discount));\r\n }\r\n if (EternityChallenge(5).isRunning) {\r\n amount += Math.pow(targetResets - 1, 3) + targetResets - 1;\r\n }\r\n\r\n if (DimBoost.purchasedBoosts > DimBoost.shiftStart) {\r\n amount += Math.pow(targetResets - DimBoost.shiftStart, 1 + targetResets/(DimBoost.shiftStart * 10)) + targetResets - DimBoost.shiftStart\r\n }\r\n\r\n if (DimBoost.purchasedBoosts > DimBoost.warpStart) {\r\n amount += Math.pow(targetResets - DimBoost.warpStart, 1 + targetResets/(DimBoost.warpStart/10)) + targetResets - DimBoost.warpStart\r\n }\r\n\r\n if (DimBoost.purchasedBoosts > DimBoost.scaleStart) {\r\n amount += Math.pow(targetResets - DimBoost.scaleStart, 1 + targetResets/(DimBoost.scaleStart / 1e5)) + targetResets - DimBoost.scaleStart\r\n }\r\n\r\n amount -= Effects.sum(InfinityUpgrade.resetBoost);\r\n if (InfinityChallenge(5).isCompleted) amount -= 1;\r\n\r\n amount *= InfinityUpgrade.resetBoost.chargedEffect.effectOrDefault(1);\r\n\r\n // Ra ra upgrade--sxy\r\n if(player.celestials.ra.upgrades.has('raUpgrade')) amount = (amount / Decimal.log10(player.celestials.ra.raPoints.plus(1)))\r\n\r\n amount = Math.round(amount);\r\n \r\n return new DimBoostRequirement(tier, amount);\r\n }\r\n\r\n\r\n static get unlockedByBoost() {\r\n if (DimBoost.lockText !== null) return DimBoost.lockText;\r\n const boosts = DimBoost.purchasedBoosts;\r\n const allNDUnlocked = EternityMilestone.unlockAllND.isReached;\r\n\r\n let newUnlock = \"\";\r\n if (!allNDUnlocked && boosts < DimBoost.maxDimensionsUnlockable - 4) {\r\n newUnlock = `unlock the ${boosts + 5}th Dimension`;\r\n } else if (boosts === 4 && !NormalChallenge(10).isRunning && !EternityChallenge(3).isRunning) {\r\n newUnlock = \"unlock Sacrifice\";\r\n }\r\n\r\n const formattedMultText = `give a ${formatX(DimBoost.power, 2, 1)} multiplier `;\r\n let dimensionRange = `to the 1st Dimension`;\r\n if (boosts > 0) dimensionRange = `to Dimensions 1-${Math.min(boosts + 1, 8)}`;\r\n if (boosts >= DimBoost.maxDimensionsUnlockable - 1) dimensionRange = `to all Dimensions`;\r\n\r\n let boostEffects;\r\n if (NormalChallenge(8).isRunning) boostEffects = newUnlock;\r\n else if (newUnlock === \"\") boostEffects = `${formattedMultText} ${dimensionRange}`;\r\n else boostEffects = `${newUnlock} and ${formattedMultText} ${dimensionRange}`;\r\n\r\n if (boostEffects === \"\") return \"Dimension Boosts are currently useless\";\r\n const areDimensionsKept = (Perk.antimatterNoReset.isBought || Achievement(111).canBeApplied) &&\r\n (!Pelle.isDoomed || PelleUpgrade.dimBoostResetsNothing.isBought);\r\n if (areDimensionsKept) return boostEffects[0].toUpperCase() + boostEffects.substring(1);\r\n return `Reset your Dimensions to ${boostEffects}`;\r\n }\r\n\r\n static get purchasedBoosts() {\r\n return Math.floor(player.dimensionBoosts);\r\n }\r\n\r\n static get imaginaryBoosts() {\r\n let x = BreakInfinityUpgrade.autobuyMaxDimboosts.chargedEffect.isEffectActive ? Ra.pets.teresa.level : 1;\r\n let y = Ra.unlocks.freeDimBoosts.isUnlocked ? (1+(Ra.pets.ra.level / 100)) ** 0.5 : 1;\r\n //let ts401 = TimeStudy(401).isBought ? 1e11 : 0; //useless~\r\n return (Ra.isRunning && !Ra.unlocks.imaginaryBoostsRa.isUnlocked) ? 0 : ImaginaryUpgrade(12).effectOrDefault(0) * ImaginaryUpgrade(23).effectOrDefault(1) * Math.pow(x, 0.5) * y;\r\n }\r\n\r\n static get totalBoosts() {\r\n return Math.floor(this.purchasedBoosts + this.imaginaryBoosts);\r\n }\r\n\r\n static get startingDimensionBoosts() {\r\n if (InfinityUpgrade.skipResetGalaxy.isBought) return 4;\r\n if (InfinityUpgrade.skipReset3.isBought) return 3;\r\n if (InfinityUpgrade.skipReset2.isBought) return 2;\r\n if (InfinityUpgrade.skipReset1.isBought) return 1;\r\n return 0;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line max-params\r\nexport function softReset(tempBulk, forcedADReset = false, forcedAMReset = false, enteringAntimatterChallenge = false) {\r\n// if (Currency.antimatter.gt(Player.infinityLimit)) return;\r\n const bulk = Math.min(tempBulk, DimBoost.maxBoosts - player.dimensionBoosts);\r\n EventHub.dispatch(GAME_EVENT.DIMBOOST_BEFORE, bulk);\r\n player.dimensionBoosts = Math.max(0, player.dimensionBoosts + bulk);\r\n resetChallengeStuff();\r\n const canKeepDimensions = Pelle.isDoomed\r\n ? PelleUpgrade.dimBoostResetsNothing.canBeApplied\r\n : Perk.antimatterNoReset.canBeApplied;\r\n if (forcedADReset || !canKeepDimensions) {\r\n AntimatterDimensions.reset();\r\n player.sacrificed = DC.D0;\r\n resetTickspeed();\r\n }\r\n skipResetsIfPossible(enteringAntimatterChallenge);\r\n const canKeepAntimatter = Pelle.isDoomed\r\n ? PelleUpgrade.dimBoostResetsNothing.canBeApplied\r\n : (Achievement(111).isUnlocked || Perk.antimatterNoReset.canBeApplied);\r\n if (!forcedAMReset && canKeepAntimatter) {\r\n Currency.antimatter.bumpTo(Currency.antimatter.startingValue);\r\n } else {\r\n Currency.antimatter.reset();\r\n }\r\n EventHub.dispatch(GAME_EVENT.DIMBOOST_AFTER, bulk);\r\n}\r\n\r\nexport function skipResetsIfPossible(enteringAntimatterChallenge) {\r\n if (enteringAntimatterChallenge || Player.isInAntimatterChallenge) return;\r\n if (InfinityUpgrade.skipResetGalaxy.isBought && player.dimensionBoosts < 4) {\r\n player.dimensionBoosts = 4;\r\n if (player.galaxies === 0) player.galaxies = 1;\r\n } else if (InfinityUpgrade.skipReset3.isBought && player.dimensionBoosts < 3) player.dimensionBoosts = 3;\r\n else if (InfinityUpgrade.skipReset2.isBought && player.dimensionBoosts < 2) player.dimensionBoosts = 2;\r\n else if (InfinityUpgrade.skipReset1.isBought && player.dimensionBoosts < 1) player.dimensionBoosts = 1;\r\n}\r\n\r\nexport function manualRequestDimensionBoost(bulk) {\r\n if (!DimBoost.requirement.isSatisfied) return;\r\n if (!DimBoost.canBeBought) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n if (player.options.confirmations.dimensionBoost) {\r\n Modal.dimensionBoost.show({ bulk });\r\n return;\r\n }\r\n requestDimensionBoost(bulk);\r\n}\r\n\r\nexport function requestDimensionBoost(bulk) {\r\n if (!DimBoost.requirement.isSatisfied) return;\r\n if (!DimBoost.canBeBought) return;\r\n Tutorial.turnOffEffect(TUTORIAL_STATE.DIMBOOST);\r\n if (BreakInfinityUpgrade.autobuyMaxDimboosts.isBought && bulk) maxBuyDimBoosts();\r\n else softReset(1);\r\n}\r\n\r\nfunction maxBuyDimBoosts() {\r\n // Boosts that unlock new dims are bought one at a time, unlocking the next dimension\r\n if (DimBoost.canUnlockNewDimension) {\r\n if (DimBoost.requirement.isSatisfied) softReset(1);\r\n return;\r\n }\r\n const req1 = DimBoost.bulkRequirement(1);\r\n if (!req1.isSatisfied) return;\r\n const req2 = DimBoost.bulkRequirement(2);\r\n if (!req2.isSatisfied) {\r\n softReset(1);\r\n return;\r\n }\r\n // Linearly extrapolate dimboost costs. req1 = a * 1 + b, req2 = a * 2 + b\r\n // so a = req2 - req1, b = req1 - a = 2 req1 - req2, num = (dims - b) / a\r\n let increase = req2.amount - req1.amount;\r\n const dim = AntimatterDimension(req1.tier);\r\n //wtf precise error here--sxy\r\n //honestly shall we do a decimal here......\r\n if (increase == 0) increase=1e-20;//temporary fix\r\n let fixedValue = (dim.totalAmount.toNumber() - req1.amount) / increase\r\n if(fixedValue == Infinity)fixedValue=1e308;\r\n if(fixedValue == -Infinity)fixedValue=-1e308;\r\n let maxBoosts = Math.min(1e9,\r\n 1 + Math.floor( fixedValue ));\r\n if(maxBoosts<0) return;\r\n if (DimBoost.bulkRequirement(maxBoosts).isSatisfied) {\r\n softReset(maxBoosts);\r\n return;\r\n }\r\n // But in case of EC5 it's not, so do binary search for appropriate boost amount\r\n let minBoosts = 2;\r\n while (maxBoosts !== minBoosts + 1) {\r\n const middle = Math.floor((maxBoosts + minBoosts) / 2);\r\n if (DimBoost.bulkRequirement(middle).isSatisfied) minBoosts = middle;\r\n else maxBoosts = middle;\r\n }\r\n softReset(minBoosts);\r\n}\r\n","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicDimensionBoostRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicDimensionBoostRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicDimensionBoostRow.vue?vue&type=template&id=2b071aa2&\"\nimport script from \"./ClassicDimensionBoostRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicDimensionBoostRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject},[_c('div',{staticClass:\"tickspeed-buttons\"},[_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.upgradeCount),expression:\"upgradeCount\"}],class:_vm.buttonClass(),attrs:{\"onclick\":\"buyTickSpeed()\"}},[(_vm.isContinuumActive)?_c('span',[_vm._v(\" Tickspeed Continuum: \"+_vm._s(_vm.continuumString)+\" \")]):(_vm.isEC9)?_c('span',[_vm._v(\" Tickspeed Unpurchasable (EC 9) \")]):_c('span',[_vm._v(\" Tickspeed Cost: \"+_vm._s(_vm.format(_vm.cost))+\" \")]),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]),(!_vm.isContinuumActive)?_c('button',{staticClass:\"o-primary-btn tickspeed-max-btn\",class:{ 'o-primary-btn--disabled': !_vm.isAffordable && !_vm.isContinuumActive },attrs:{\"onclick\":\"buyMaxTickSpeed()\"}},[_vm._v(\" Buy Max \")]):_vm._e()]),(_vm.hasRealityButton)?_c('div',{staticClass:\"tickspeed-labels\"},[_vm._v(\" \"+_vm._s(_vm.tickspeedDisplay)+\" | \"+_vm._s(_vm.multiplierDisplay)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TickspeedRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TickspeedRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TickspeedRow.vue?vue&type=template&id=7a175a54&scoped=true&\"\nimport script from \"./TickspeedRow.vue?vue&type=script&lang=js&\"\nexport * from \"./TickspeedRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TickspeedRow.vue?vue&type=style&index=0&id=7a175a54&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7a175a54\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicAntimatterDimensionsTab.vue?vue&type=template&id=77684bcf&scoped=true&\"\nimport script from \"./ClassicAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicAntimatterDimensionsTab.vue?vue&type=style&index=0&id=77684bcf&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"77684bcf\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-antimatter-dim-tab\"},[_c('div',{staticClass:\"modes-container\"},[_c('button',{staticClass:\"o-primary-btn l-button-container\",on:{\"click\":_vm.changeBuyMode}},[_vm._v(\" \"+_vm._s(_vm.getUntil10Display())+\" \")]),_c('PrimaryButton',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isSacrificeUnlocked),expression:\"isSacrificeUnlocked\"},{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.sacrificeTooltip),expression:\"sacrificeTooltip\"}],staticClass:\"o-primary-btn--sacrifice\",attrs:{\"enabled\":_vm.isSacrificeAffordable},on:{\"click\":_vm.sacrifice}},[(_vm.isSacrificeAffordable)?_c('span',[_vm._v(\"Dimensional Sacrifice (\"+_vm._s(_vm.formatX(_vm.sacrificeBoost, 2, 2))+\")\")]):_c('span',[_vm._v(\"Dimensional Sacrifice Disabled (\"+_vm._s(_vm.disabledCondition)+\")\")])]),_c('button',{staticClass:\"o-primary-btn l-button-container\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max All (M) \")])],1),_c('span',[_vm._v(_vm._s(_vm.multiplierText))]),_c('TickspeedRow'),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('AntimatterDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),1),_c('div',{staticClass:\"resets-container\"},[_c('DimensionBoostRow'),(_vm.isQuickResetAvailable)?_c('PrimaryButton',{staticClass:\"o-primary-btn--quick-reset\",attrs:{\"onclick\":\"softReset(-1, true, true)\"}},[_vm._v(\" Perform a Dimension Boost reset \"),(_vm.hasDimensionBoosts)?_c('span',[_vm._v(\" but lose a Dimension Boost\")]):_c('span',[_vm._v(\" for no gain\")])]):_vm._e(),_c('AntimatterGalaxyRow')],1),_c('AntimatterDimensionProgressBar')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-row-antimatter-dim c-antimatter-dim-row l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 2),\"amount-text\":_vm.amountDisplay,\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container c-modern-dim-tooltip-container\"},[_c('div',{staticClass:\"c-modern-dim-purchase-count-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.boughtTooltip)+\" \")]),_c('button',{class:_vm.buttonClass(),on:{\"click\":_vm.buy}},[_c('div',{class:_vm.buttonTextClass()},[_c('div',[_vm._v(\" \"+_vm._s(_vm.buttonPrefix)+\" \")]),_c('div',{class:{ 'l-dim-row-small-text': _vm.hasLongText }},[_vm._v(\" \"+_vm._s(_vm.buttonValue)+\" \")]),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]),(!_vm.isContinuumActive && _vm.isUnlocked && !_vm.isCapped)?_c('div',{staticClass:\"fill\"},[_c('div',{staticClass:\"fill-purchased\",style:({ 'width': _vm.boughtBefore10*10 + '%' })}),_c('div',{staticClass:\"fill-possible\",style:({ 'width': _vm.howManyCanBuy*10 + '%' })})]):_vm._e()])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernAntimatterDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernAntimatterDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernAntimatterDimensionRow.vue?vue&type=template&id=e93a3710&scoped=true&\"\nimport script from \"./ModernAntimatterDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernAntimatterDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernAntimatterDimensionRow.vue?vue&type=style&index=0&id=e93a3710&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e93a3710\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"reset-container galaxy\"},[_c('h4',[_vm._v(_vm._s(_vm.typeName)+\" (\"+_vm._s(_vm.sumText)+\")\")]),(_vm.showText)?_c('span',[_vm._v(\"Requires: \"+_vm._s(_vm.formatInt(_vm.requirement.amount))+\" \"+_vm._s(_vm.dimName)+\" Antimatter D\")]):_vm._e(),(_vm.hasIncreasedScaling)?_c('span',[_vm._v(_vm._s(_vm.costScalingText))]):_vm._e(),_c('button',{class:_vm.classObject,on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.buyGalaxy(true)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.buyGalaxy(false)}]}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \"),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernAntimatterGalaxyRow.vue?vue&type=template&id=a09bf5a0&\"\nimport script from \"./ModernAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"reset-container dimboost\"},[_c('h4',[_vm._v(_vm._s(_vm.typeName)+\" (\"+_vm._s(_vm.boostCountText)+\")\")]),(_vm.seeText)?_c('span',[_vm._v(\"Requires: \"+_vm._s(_vm.formatInt(_vm.requirement.amount))+\" \"+_vm._s(_vm.dimName)+\" Antimatter Dimensions\")]):_vm._e(),(_vm.scaledBoost)?_c('span',[_vm._v(\"Dimension Boost cost scaling increases past \"+_vm._s(_vm.format(_vm.scaledBoostStart, 2, 2))+\" Dimension Boosts\")]):_vm._e(),_c('button',{class:_vm.classObject,on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.dimensionBoost(true)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.dimensionBoost(false)}]}},[_vm._v(\" \"+_vm._s(_vm.unlockedByBoost)+\" \"),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernDimensionBoostRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernDimensionBoostRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernDimensionBoostRow.vue?vue&type=template&id=0b45bb72&\"\nimport script from \"./ModernDimensionBoostRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernDimensionBoostRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernAntimatterDimensionsTab.vue?vue&type=template&id=38071904&scoped=true&\"\nimport script from \"./ModernAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernAntimatterDimensionsTab.vue?vue&type=style&index=0&id=38071904&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"38071904\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-classic-antimatter-dim-tab\"},[_c('AntimatterDimensionsTabHeader'),_vm._v(\" \"+_vm._s(_vm.multiplierText)+\" \"),_c('TickspeedRow'),_c('div',{staticClass:\"l-dimensions-container\"},[_vm._l((8),function(tier){return _c('AntimatterDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),_c('DimensionBoostRow'),_c('AntimatterGalaxyRow')],2),(_vm.isQuickResetAvailable)?_c('PrimaryButton',{staticClass:\"o-primary-btn--quick-reset\",on:{\"click\":_vm.quickReset}},[_vm._v(\" Perform a Dimension Boost reset \"),(_vm.hasDimensionBoosts)?_c('span',[_vm._v(\" but lose a Dimension Boost\")]):_c('span',[_vm._v(\" for no gain\")])]):_vm._e(),_c('div',{staticClass:\"l-flex\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row c-antimatter-dim-row l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 2),\"amount-text\":_vm.amountText,\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container\"},[(!_vm.isContinuumActive)?_c('PrimaryButton',{class:_vm.buySingleClass,attrs:{\"enabled\":_vm.isAffordable && !_vm.isCapped && _vm.isUnlocked},on:{\"click\":_vm.buySingle}},[_c('div',{class:_vm.tutorialClass()},[_vm._v(\" \"+_vm._s(_vm.singleText)+\" \")]),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.boughtTooltip)+\" \")]),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e(),_c('PrimaryButton',{class:_vm.buyTenClass,attrs:{\"enabled\":(_vm.isAffordableUntil10 || _vm.isContinuumActive) && !_vm.isCapped && _vm.isUnlocked},on:{\"click\":_vm.buyUntil10}},[_vm._v(\" \"+_vm._s(_vm.until10Text)+\" \"),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.boughtTooltip)+\" \")])])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismAntimatterDimensionRow.vue?vue&type=template&id=3019072b&scoped=true&\"\nimport script from \"./SynergismAntimatterDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismAntimatterDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismAntimatterDimensionRow.vue?vue&type=style&index=0&id=3019072b&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3019072b\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-antimatter-dim-tab__header\"},[_c('PrimaryButton',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isSacrificeUnlocked),expression:\"isSacrificeUnlocked\"},{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.sacrificeTooltip),expression:\"sacrificeTooltip\"}],staticClass:\"o-primary-btn--sacrifice\",attrs:{\"enabled\":_vm.isSacrificeAffordable},on:{\"click\":_vm.sacrifice}},[(_vm.isSacrificeAffordable)?_c('span',[_vm._v(\" Dimensional Sacrifice (\"+_vm._s(_vm.formatX(_vm.sacrificeBoost, 2, 2))+\") \")]):_c('span',[_vm._v(\" Dimensional Sacrifice Disabled (\"+_vm._s(_vm.disabledCondition)+\") \")])]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-max\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all (M) \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismAntimatterDimensionsTabHeader.vue?vue&type=template&id=581bdae2&\"\nimport script from \"./SynergismAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-dimension-row c-antimatter-dim-row c-antimatter-prestige-row\"},[_c('div',{staticClass:\"l-dim-row__prestige-text c-dim-row__label c-dim-row__label--amount l-text-wrapper\"},[_vm._v(\" \"+_vm._s(_vm.typeName)+\" (\"+_vm._s(_vm.sumText)+\"): requires \"+_vm._s(_vm.formatInt(_vm.requirement.amount))+\" \"+_vm._s(_vm.dimName)+\" Dimensions \"),_c('div',{staticClass:\"l-scaling-text-wrapper\"},[_vm._v(\" \"+_vm._s(_vm.hasIncreasedScaling ? _vm.costScalingText : \"\")+\" \")])]),_c('PrimaryButton',{class:_vm.classObject,attrs:{\"enabled\":_vm.canBeBought},on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.buyGalaxy(true)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.buyGalaxy(false)}]}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \"),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismAntimatterGalaxyRow.vue?vue&type=template&id=779c0d24&scoped=true&\"\nimport script from \"./SynergismAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismAntimatterGalaxyRow.vue?vue&type=style&index=0&id=779c0d24&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"779c0d24\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-dimension-row c-antimatter-dim-row c-antimatter-prestige-row\"},[_c('div',{staticClass:\"l-dim-row__prestige-text c-dim-row__label c-dim-row__label--amount\"},[_vm._v(\" \"+_vm._s(_vm.boostScale)+\" Dimension Boost (\"+_vm._s(_vm.boostCountText)+\") \"+_vm._s(_vm.dimRequirementText)+\" \")]),_c('PrimaryButton',{class:_vm.classObject,attrs:{\"enabled\":_vm.isBuyable},on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.dimensionBoost(true)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.dimensionBoost(false)}]}},[_vm._v(\" \"+_vm._s(_vm.unlockedByBoost)+\" \"),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismDimensionBoostRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismDimensionBoostRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismDimensionBoostRow.vue?vue&type=template&id=440f8a9a&\"\nimport script from \"./SynergismDimensionBoostRow.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismDimensionBoostRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismAntimatterDimensionsTab.vue?vue&type=template&id=50df59c7&scoped=true&\"\nimport script from \"./SynergismAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismAntimatterDimensionsTab.vue?vue&type=style&index=0&id=50df59c7&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"50df59c7\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AntimatterDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AntimatterDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AntimatterDimensionsTab.vue?vue&type=template&id=64077ec9&\"\nimport script from \"./AntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./AntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-autobuyers-tab\"},[_c('AutobuyerToggles'),_c('OpenModalHotkeysButton'),(_vm.hasSeenGamespeedAlteringEffects)?_c('div',[_vm._v(\" Autobuyer intervals and time-based settings are always \"),_c('b',[_vm._v(\"real time\")]),_vm._v(\" and therefore \"),_c('br'),_vm._v(\" unaffected by anything which may alter how fast the game itself is running. \"),_c('br'),_c('br')]):_vm._e(),(!_vm.hasInfinity)?_c('div',[_vm._v(\" Challenges for upgrading autobuyers are unlocked by reaching Infinity. \")]):_vm._e(),_c('b',[_vm._v(\"Autobuyers with no displayed bulk have unlimited bulk by default.\")]),_c('b',[_vm._v(\" Antimatter Dimension Autobuyers can have their bulk upgraded once interval is below \"+_vm._s(_vm.formatInt(100))+\" ms. \")]),(_vm.hasInstant)?_c('b',[_vm._v(\"Autobuyers with \\\"Instant\\\" interval will trigger every game tick (\"+_vm._s(_vm.gameTickLength)+\").\")]):_vm._e(),_c('MendingAutobuyerBox',{staticClass:\"c-mending-pos\"}),_c('RealityAutobuyerBox',{staticClass:\"c-reality-pos\"}),_c('EternityAutobuyerBox',{staticClass:\"c-eternity-pos\"}),_c('BigCrunchAutobuyerBox',{staticClass:\"c-infinity-pos\"}),_c('GalaxyAutobuyerBox'),_c('DimensionBoostAutobuyerBox'),(!_vm.hasContinuum)?_c('TickspeedAutobuyerBox'):_vm._e(),(_vm.displayADAutobuyersIndividually)?_vm._l((8),function(tier){return _c('DimensionAutobuyerBox',{key:tier,attrs:{\"tier\":tier}})}):_vm._e(),_c('SimpleAutobuyersMultiBox')],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"on\":\"Pause autobuyers\",\"off\":\"Resume autobuyers\"},model:{value:(_vm.autobuyersOn),callback:function ($$v) {_vm.autobuyersOn=$$v},expression:\"autobuyersOn\"}}),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":function($event){return _vm.toggleAllAutobuyers()}}},[_vm._v(\" \"+_vm._s(_vm.allAutobuyersDisabled ? \"Enable\" : \"Disable\")+\" all autobuyers \")]),(_vm.continuumDisabled)?_c('span',[(_vm.showContinuum)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\"},[_vm._v(\" Continuum is disabled \")]):_vm._e()],1):_c('span',[(_vm.showContinuum)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"on\":\"Enable Continuum\",\"off\":\"Disable Continuum\"},model:{value:(_vm.disableContinuum),callback:function ($$v) {_vm.disableContinuum=$$v},expression:\"disableContinuum\"}}):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerToggles.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerToggles.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerToggles.vue?vue&type=template&id=77b301a0&scoped=true&\"\nimport script from \"./AutobuyerToggles.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerToggles.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"77b301a0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"show-interval\":!_vm.postBreak,\"is-modal\":_vm.isModal,\"name\":\"Automatic Big Crunch\"},scopedSlots:_vm._u([(!_vm.hasMaxedInterval)?{key:\"intervalSlot\",fn:function(){return [_c('AutobuyerIntervalButton',{attrs:{\"autobuyer\":_vm.autobuyer}})]},proxy:true}:(_vm.postBreak)?{key:\"intervalSlot\",fn:function(){return [(_vm.hasAdditionalModes)?_c('ExpandingControlBox',{attrs:{\"auto-close\":true},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"o-primary-btn c-autobuyer-box__mode-select c-autobuyer-box__mode-select-header\"},[_vm._v(\" ▼ Current Setting: ▼ \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.modeName(_vm.mode))+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('AutobuyerDropdownEntry',{attrs:{\"autobuyer\":_vm.autobuyer,\"modes\":_vm.modes,\"mode-name-fn\":_vm.modeName}})]},proxy:true}],null,false,2761615181)}):_c('span',[_vm._v(\" \"+_vm._s(_vm.modeProps(_vm.mode).title)+\": \")])]},proxy:true}:null,(_vm.postBreak)?{key:\"toggleSlot\",fn:function(){return [_c('AutobuyerInput',_vm._b({key:_vm.mode,attrs:{\"autobuyer\":_vm.autobuyer}},'AutobuyerInput',_vm.modeProps(_vm.mode).input,false))]},proxy:true}:null,(_vm.postBreak && _vm.mode === _vm.amountMode)?{key:\"checkboxSlot\",fn:function(){return [_c('label',{staticClass:\"o-autobuyer-toggle-checkbox o-clickable\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.increaseWithMult),expression:\"increaseWithMult\"}],staticClass:\"o-clickable\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.increaseWithMult)?_vm._i(_vm.increaseWithMult,null)>-1:(_vm.increaseWithMult)},on:{\"change\":function($event){var $$a=_vm.increaseWithMult,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.increaseWithMult=$$a.concat([$$v]))}else{$$i>-1&&(_vm.increaseWithMult=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.increaseWithMult=$$c}}}}),_vm._v(\" Dynamic amount \")])]},proxy:true}:null],null,true)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked || _vm.isBought)?_c('div',{class:_vm.autobuyerBoxRowClass},[_c('div',{staticClass:\"l-autobuyer-box__header\"},[_vm._v(\" \"+_vm._s(_vm.name)+\" \"),(_vm.showInterval)?_c('AutobuyerIntervalLabel',{attrs:{\"autobuyer\":_vm.autobuyer}}):_vm._e(),(_vm.isShowingStateInfo)?_c('div',[_vm._v(\" \"+_vm._s(_vm.extraInfo)+\" \")]):_vm._e()],1),_c('div',{staticClass:\"c-autobuyer-box-row__intervalSlot\"},[_vm._t(\"intervalSlot\")],2),_c('div',{staticClass:\"c-autobuyer-box-row__toggleSlot\"},[_vm._t(\"toggleSlot\")],2),_c('div',{staticClass:\"c-autobuyer-box-row__checkboxSlot\"},[_vm._t(\"checkboxSlot\")],2),_c('div',{staticClass:\"c-autobuyer-box-row__optionSlot\"},[_vm._t(\"optionSlot\")],2),_c('div',{staticClass:\"l-autobuyer-box__footer\",on:{\"click\":_vm.toggle}},[_c('label',{class:_vm.autobuyerStateClass},[_c('span',{class:_vm.autobuyerToggleClass})]),_c('input',{attrs:{\"disabled\":!_vm.globalToggle,\"name\":_vm.name,\"type\":\"checkbox\"},domProps:{\"checked\":_vm.isActive && _vm.globalToggle}})])]):(_vm.canBeBought)?_c('div',{class:_vm.autobuyerBuyBoxClass,on:{\"click\":_vm.purchase}},[_vm._v(\" \"+_vm._s(_vm.name)+\" \"),_c('br'),_vm._v(\" Requirement: \"+_vm._s(_vm.format(_vm.antimatterCost))+\" Total Antimatter \"+_vm._s(_vm.showEternity)+\" \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-autobuyer-box__small-text\"},[_vm._v(\" Current interval: \"+_vm._s(_vm.intervalText)+\" \"),(_vm.isShowingBulk)?_c('span',[_c('br'),_vm._v(\" \"+_vm._s(_vm.bulkText)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerIntervalLabel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerIntervalLabel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerIntervalLabel.vue?vue&type=template&id=7b5058aa&scoped=true&\"\nimport script from \"./AutobuyerIntervalLabel.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerIntervalLabel.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7b5058aa\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerBox.vue?vue&type=template&id=9b85a9f2&scoped=true&\"\nimport script from \"./AutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9b85a9f2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.modes),function(optionMode){return _c('div',{key:optionMode,staticClass:\"o-primary-btn c-autobuyer-box__mode-select l-autobuyer-choice\",attrs:{\"value\":optionMode},on:{\"click\":function($event){return _vm.changeMode(optionMode)}}},[_vm._v(\" \"+_vm._s(_vm.modeNameFn(optionMode))+\" \")])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerDropdownEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerDropdownEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerDropdownEntry.vue?vue&type=template&id=b8f762d6&scoped=true&\"\nimport script from \"./AutobuyerDropdownEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerDropdownEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutobuyerDropdownEntry.vue?vue&type=style&index=0&id=b8f762d6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b8f762d6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isMaxed && _vm.isUpgradeable)?_c('button',{class:_vm.classObject,on:{\"click\":_vm.upgradeInterval}},[_vm._v(\" \"+_vm._s(_vm.formatPercents(0.4))+\" smaller interval \"),_c('br'),_vm._v(\" Cost: \"+_vm._s(_vm.format(_vm.cost, 2))+\" IP \")]):(!_vm.isMaxed)?_c('button',{staticClass:\"o-autobuyer-btn l-autobuyer-box__button o-autobuyer-btn--unavailable\"},[_vm._v(\" Complete the challenge to upgrade interval \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerIntervalButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerIntervalButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerIntervalButton.vue?vue&type=template&id=6e92c4ea&scoped=true&\"\nimport script from \"./AutobuyerIntervalButton.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerIntervalButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6e92c4ea\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ modeProps(mode).title }}:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Dynamic amount\r\n \r\n \r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BigCrunchAutobuyerBox.vue?vue&type=template&id=d66a5b9a&scoped=true&\"\nimport script from \"./BigCrunchAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./BigCrunchAutobuyerBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BigCrunchAutobuyerBox.vue?vue&type=style&index=0&id=d66a5b9a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d66a5b9a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"name\":_vm.name,\"show-interval\":\"\"},scopedSlots:_vm._u([{key:\"intervalSlot\",fn:function(){return [_c('DimensionBulkButton',{attrs:{\"autobuyer\":_vm.autobuyer}}),_c('AutobuyerIntervalButton',{attrs:{\"autobuyer\":_vm.autobuyer}})]},proxy:true},{key:\"toggleSlot\",fn:function(){return [_c('button',{staticClass:\"o-autobuyer-btn\",on:{\"click\":_vm.toggleMode}},[_vm._v(\" \"+_vm._s(_vm.modeDisplay)+\" \")])]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasMaxedInterval && !_vm.bulkUnlimited && _vm.isUnlocked)?_c('button',{class:_vm.classObject,on:{\"click\":_vm.upgradeBulk}},[_c('span',[_vm._v(_vm._s(_vm.bulkDisplay))]),(!_vm.hasMaxedBulk)?[_c('br'),_c('span',[_vm._v(\"Cost: \"+_vm._s(_vm.format(_vm.cost, 2, 0))+\" IP\")])]:_vm._e()],2):(_vm.hasMaxedInterval && !_vm.bulkUnlimited)?_c('button',{staticClass:\"o-autobuyer-btn l-autobuyer-box__button o-autobuyer-btn--unavailable\"},[_vm._v(\" Complete the challenge to upgrade bulk \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionBulkButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionBulkButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DimensionBulkButton.vue?vue&type=template&id=67bb427e&scoped=true&\"\nimport script from \"./DimensionBulkButton.vue?vue&type=script&lang=js&\"\nexport * from \"./DimensionBulkButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DimensionBulkButton.vue?vue&type=style&index=0&id=67bb427e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"67bb427e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DimensionAutobuyerBox.vue?vue&type=template&id=4ab9243a&scoped=true&\"\nimport script from \"./DimensionAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./DimensionAutobuyerBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4ab9243a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"is-modal\":_vm.isModal,\"show-interval\":!_vm.isBuyMaxUnlocked,\"name\":\"Automatic Dimension Boosts\"},scopedSlots:_vm._u([(!_vm.hasMaxedInterval)?{key:\"intervalSlot\",fn:function(){return [_c('AutobuyerIntervalButton',{attrs:{\"autobuyer\":_vm.autobuyer}})]},proxy:true}:(_vm.isBuyMaxUnlocked)?{key:\"intervalSlot\",fn:function(){return [_c('div',{staticClass:\"c-autobuyer-box__small-text\"},[_c('br'),_vm._v(\" Activates every X seconds: \")]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":\"float\",\"property\":\"buyMaxInterval\"}})]},proxy:true}:null,(!_vm.isBuyMaxUnlocked)?{key:\"checkboxSlot\",fn:function(){return [_c('label',{staticClass:\"o-autobuyer-toggle-checkbox c-autobuyer-box__small-text l-top-margin o-clickable\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.limitDimBoosts),expression:\"limitDimBoosts\"}],staticClass:\"o-clickable\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.limitDimBoosts)?_vm._i(_vm.limitDimBoosts,null)>-1:(_vm.limitDimBoosts)},on:{\"change\":function($event){var $$a=_vm.limitDimBoosts,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.limitDimBoosts=$$a.concat([$$v]))}else{$$i>-1&&(_vm.limitDimBoosts=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.limitDimBoosts=$$c}}}}),_vm._v(\" Limit Dimension Boosts to: \")]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":\"int\",\"property\":\"maxDimBoosts\"}})]},proxy:true}:null,{key:\"toggleSlot\",fn:function(){return [_c('label',{staticClass:\"o-autobuyer-toggle-checkbox c-autobuyer-box__small-text l-autobuyer-text-area o-clickable\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.limitUntilGalaxies),expression:\"limitUntilGalaxies\"}],staticClass:\"o-clickable\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.limitUntilGalaxies)?_vm._i(_vm.limitUntilGalaxies,null)>-1:(_vm.limitUntilGalaxies)},on:{\"change\":function($event){var $$a=_vm.limitUntilGalaxies,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.limitUntilGalaxies=$$a.concat([$$v]))}else{$$i>-1&&(_vm.limitUntilGalaxies=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.limitUntilGalaxies=$$c}}}}),(_vm.isBuyMaxUnlocked)?_c('span',[_vm._v(\" Only Dimboost to unlock new\"),_c('br'),_vm._v(\" Dimensions until X Galaxies: \")]):_c('span',[_vm._v(\" Galaxies required to always\"),_c('br'),_vm._v(\" Dimboost, ignoring the limit: \")])]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":\"int\",\"property\":\"galaxies\"}})]},proxy:true}],null,true)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n \r\n
\r\n Activates every X seconds:\r\n \r\n \r\n \r\n \r\n \r\n \r\n Limit Dimension Boosts to:\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionBoostAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionBoostAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DimensionBoostAutobuyerBox.vue?vue&type=template&id=b44dddb8&scoped=true&\"\nimport script from \"./DimensionBoostAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./DimensionBoostAutobuyerBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DimensionBoostAutobuyerBox.vue?vue&type=style&index=0&id=b44dddb8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b44dddb8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"is-modal\":_vm.isModal,\"name\":\"Automatic Eternity\"},scopedSlots:_vm._u([{key:\"intervalSlot\",fn:function(){return [(_vm.hasAdditionalModes)?_c('ExpandingControlBox',{attrs:{\"auto-close\":true},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"o-primary-btn c-autobuyer-box__mode-select c-autobuyer-box__mode-select-header\"},[_vm._v(\" ▼ Current Setting: ▼ \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.modeName(_vm.mode))+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('AutobuyerDropdownEntry',{attrs:{\"autobuyer\":_vm.autobuyer,\"modes\":_vm.modes,\"mode-name-fn\":_vm.modeName}})]},proxy:true}],null,false,2761615181)}):_c('span',[_vm._v(_vm._s(_vm.modeProps(_vm.mode).title)+\":\")])]},proxy:true},{key:\"toggleSlot\",fn:function(){return [_c('AutobuyerInput',_vm._b({key:_vm.mode,attrs:{\"autobuyer\":_vm.autobuyer}},'AutobuyerInput',_vm.modeProps(_vm.mode).input,false))]},proxy:true},(_vm.mode === _vm.amountMode)?{key:\"checkboxSlot\",fn:function(){return [_c('label',{staticClass:\"o-autobuyer-toggle-checkbox o-clickable\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.increaseWithMult),expression:\"increaseWithMult\"}],staticClass:\"o-clickable\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.increaseWithMult)?_vm._i(_vm.increaseWithMult,null)>-1:(_vm.increaseWithMult)},on:{\"change\":function($event){var $$a=_vm.increaseWithMult,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.increaseWithMult=$$a.concat([$$v]))}else{$$i>-1&&(_vm.increaseWithMult=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.increaseWithMult=$$c}}}}),_vm._v(\" Dynamic amount \")])]},proxy:true}:null],null,true)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityAutobuyerBox.vue?vue&type=template&id=56211cc8&scoped=true&\"\nimport script from \"./EternityAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityAutobuyerBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EternityAutobuyerBox.vue?vue&type=style&index=0&id=56211cc8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"56211cc8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"is-modal\":_vm.isModal,\"name\":\"Automatic Antimatter Galaxies\",\"show-interval\":!_vm.isBuyMaxUnlocked},scopedSlots:_vm._u([(!_vm.hasMaxedInterval)?{key:\"intervalSlot\",fn:function(){return [_c('AutobuyerIntervalButton',{attrs:{\"autobuyer\":_vm.autobuyer}})]},proxy:true}:(_vm.isBuyMaxUnlocked)?{key:\"intervalSlot\",fn:function(){return [_c('div',{staticClass:\"c-autobuyer-box__small-text\"},[_vm._v(\" Activates every X seconds: \")]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":\"float\",\"property\":\"buyMaxInterval\"}})]},proxy:true}:null,{key:_vm.limitGalaxiesSlot,fn:function(){return [_c('label',{staticClass:\"o-autobuyer-toggle-checkbox c-autobuyer-box__small-text o-clickable\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.limitGalaxies),expression:\"limitGalaxies\"}],staticClass:\"o-clickable\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.limitGalaxies)?_vm._i(_vm.limitGalaxies,null)>-1:(_vm.limitGalaxies)},on:{\"change\":function($event){var $$a=_vm.limitGalaxies,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.limitGalaxies=$$a.concat([$$v]))}else{$$i>-1&&(_vm.limitGalaxies=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.limitGalaxies=$$c}}}}),_vm._v(\" Limit Antimatter Galaxies to: \")]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":\"int\",\"property\":\"maxGalaxies\"}})]},proxy:true}],null,true)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n
\r\n Activates every X seconds:\r\n
\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GalaxyAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GalaxyAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GalaxyAutobuyerBox.vue?vue&type=template&id=0e9d22c8&scoped=true&\"\nimport script from \"./GalaxyAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./GalaxyAutobuyerBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GalaxyAutobuyerBox.vue?vue&type=style&index=0&id=0e9d22c8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0e9d22c8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',{staticClass:\"c-options-tab__hotkeys-link\",on:{\"click\":_vm.handleClick}},[_vm._v(\" Press \"),_c('kbd',[_vm._v(\"?\")]),_vm._v(\" to open the hotkey list. \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OpenModalHotkeysButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OpenModalHotkeysButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OpenModalHotkeysButton.vue?vue&type=template&id=37c5e42f&\"\nimport script from \"./OpenModalHotkeysButton.vue?vue&type=script&lang=js&\"\nexport * from \"./OpenModalHotkeysButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"is-modal\":_vm.isModal,\"name\":\"Automatic Reality\"},scopedSlots:_vm._u([{key:\"intervalSlot\",fn:function(){return [_c('ExpandingControlBox',{attrs:{\"auto-close\":true},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"o-primary-btn c-autobuyer-box__mode-select c-autobuyer-box__mode-select-header\"},[_vm._v(\" ▼ Current Setting: ▼ \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.modeName(_vm.mode))+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('AutobuyerDropdownEntry',{attrs:{\"autobuyer\":_vm.autobuyer,\"modes\":_vm.modes,\"mode-name-fn\":_vm.modeName}})]},proxy:true}])})]},proxy:true},{key:\"toggleSlot\",fn:function(){return [(_vm.hasAlternateInputs)?_c('div',[_vm._v(\" Target Time (seconds): \")]):_c('div',[_vm._v(\" Target Reality Machines: \")]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":_vm.hasAlternateInputs ? 'float' : 'decimal',\"property\":_vm.hasAlternateInputs ? 'time' : 'rm'}})]},proxy:true},{key:\"checkboxSlot\",fn:function(){return [(_vm.hasAlternateInputs && _vm.hasRelicMode)?_c('div',[_vm._v(\" Target Relic Shards: \")]):_c('div',[_vm._v(\" Target Glyph level: \")]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":(_vm.hasAlternateInputs && false) ? 'decimal' : 'int',\"property\":(_vm.hasAlternateInputs && _vm.hasRelicMode) ? 'shard' : 'glyph'}}),(_vm.isOverCap)?_c('div',[_vm._v(\" Autobuyer will trigger at the Glyph level cap of \"+_vm._s(_vm.formatInt(_vm.levelCap))+\". \")]):_vm._e()]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityAutobuyerBox.vue?vue&type=template&id=cd0202d8&scoped=true&\"\nimport script from \"./RealityAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityAutobuyerBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cd0202d8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"l-autobuyers-tab\"},[_vm._l((_vm.multiple),function(type,id){return _c('MultipleAutobuyersBox',{key:id,attrs:{\"type\":type}})}),_c('MultipleSingleAutobuyersGroup')],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showAutobuyers && !(_vm.isADBox && _vm.continuumActive))?_c('span',{staticClass:\"c-autobuyer-box-row\"},[_c('AutobuyerGroupToggleLabel',{attrs:{\"is-active\":_vm.parentActive,\"name\":_vm.name},on:{\"click\":_vm.toggleGroup}}),_c('div',{staticClass:\"l-autobuyer-box__title\"},[_vm._v(\" \"+_vm._s(_vm.name)),_c('br'),_vm._v(\"Autobuyers \"),(_vm.displayLabelAsGroup)?_c('AutobuyerIntervalLabel',{attrs:{\"autobuyer\":_vm.autobuyers[0]}}):_vm._e()],1),_c('div',{staticClass:\"l-autobuyer-box__autobuyers\"},[_vm._l((_vm.autobuyers),function(autobuyer,id){return [_c('SingleAutobuyerInRow',{key:id,staticClass:\"l-autobuyer-box__autobuyers-internal\",style:(_vm.boxSize),attrs:{\"autobuyer\":autobuyer,\"show-individual\":!_vm.displayLabelAsGroup,\"parent-disabled\":!_vm.parentActive}}),(id % _vm.entryCountPerRow === _vm.entryCountPerRow)?_c('br',{key:id}):_vm._e()]})],2)],1):(_vm.isADBox && _vm.continuumActive)?_c('span',{staticClass:\"c-autobuyer-box-row\"},[_vm._v(\" Continuum replaces your Antimatter Dimension and Tickspeed Autobuyers, as your production multipliers \"),_c('br'),_vm._v(\" now automatically and continuously scale based on how many purchases you would have had otherwise. \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerToggleLabel',{attrs:{\"is-active\":_vm.isActive,\"is-disabled\":_vm.isDisabled,\"name\":_vm.name},on:{\"click\":_vm.emitClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-autobuyer-box__footer\",on:{\"click\":_vm.emitClick}},[_c('label',{class:_vm.autobuyerStateClass},[_c('span',{class:_vm.autobuyerToggleClass})]),_c('input',{attrs:{\"disabled\":_vm.isDisabled,\"name\":_vm.name,\"type\":\"checkbox\"},domProps:{\"checked\":_vm.isActive && !_vm.isDisabled}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerToggleLabel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerToggleLabel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerToggleLabel.vue?vue&type=template&id=3e71e566&scoped=true&\"\nimport script from \"./AutobuyerToggleLabel.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerToggleLabel.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3e71e566\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerGroupToggleLabel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerGroupToggleLabel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerGroupToggleLabel.vue?vue&type=template&id=083b4b97&scoped=true&\"\nimport script from \"./AutobuyerGroupToggleLabel.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerGroupToggleLabel.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"083b4b97\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('span',{staticClass:\"c-autobuyer-box-slot\"},[_c('AutobuyerSingleToggleLabel',{attrs:{\"autobuyer\":_vm.autobuyer,\"parent-disabled\":_vm.parentDisabled}}),_vm._v(\" \"+_vm._s(_vm.name)+\" \"),(_vm.showIndividual)?_c('AutobuyerIntervalLabel',{attrs:{\"autobuyer\":_vm.autobuyer}}):_vm._e(),(_vm.hasMode)?_c('AutobuyerModeButton',{attrs:{\"autobuyer\":_vm.autobuyer}}):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"o-autobuyer-btn o-autobuyer-btn--tiny\",on:{\"click\":_vm.toggleMode}},[_vm._v(\" \"+_vm._s(_vm.modeDisplay)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerModeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerModeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerModeButton.vue?vue&type=template&id=3ab114db&scoped=true&\"\nimport script from \"./AutobuyerModeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerModeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3ab114db\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerToggleLabel',{attrs:{\"is-active\":_vm.isActive,\"is-disabled\":_vm.isDisabled,\"name\":_vm.name},on:{\"click\":_vm.toggle}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerSingleToggleLabel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerSingleToggleLabel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerSingleToggleLabel.vue?vue&type=template&id=311f081c&scoped=true&\"\nimport script from \"./AutobuyerSingleToggleLabel.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerSingleToggleLabel.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"311f081c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleAutobuyerInRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleAutobuyerInRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingleAutobuyerInRow.vue?vue&type=template&id=629cb6b8&scoped=true&\"\nimport script from \"./SingleAutobuyerInRow.vue?vue&type=script&lang=js&\"\nexport * from \"./SingleAutobuyerInRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"629cb6b8\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n \r\n
\r\n \r\n Continuum replaces your Antimatter Dimension and Tickspeed Autobuyers, as your production multipliers\r\n
\r\n now automatically and continuously scale based on how many purchases you would have had otherwise.\r\n
\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultipleAutobuyersBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultipleAutobuyersBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MultipleAutobuyersBox.vue?vue&type=template&id=0fd417d9&scoped=true&\"\nimport script from \"./MultipleAutobuyersBox.vue?vue&type=script&lang=js&\"\nexport * from \"./MultipleAutobuyersBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0fd417d9\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"l-autobuyer-singlet-group\"},[_vm._l((_vm.singles),function(type,id){return [_c('SingleAutobuyerBox',{key:id,style:(_vm.boxSize),attrs:{\"autobuyer\":type}}),(id % _vm.entryCountPerRow === _vm.entryCountPerRow)?_c('br',{key:id}):_vm._e()]})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('span',{staticClass:\"c-autobuyer-box-row\"},[_c('AutobuyerSingleToggleLabel',{attrs:{\"autobuyer\":_vm.autobuyer}}),_c('div',[_vm._v(\" \"+_vm._s(_vm.name)+\" \"),_c('AutobuyerIntervalLabel',{attrs:{\"autobuyer\":_vm.autobuyer}}),(_vm.autobuyer.hasInput)?_c('span',{staticClass:\"c-autobuyer-box__small-text\"},[_vm._v(\" \"+_vm._s(_vm.description)+\": \"),_c('AutobuyerInput',{staticClass:\"c-small-autobuyer-input\",attrs:{\"autobuyer\":_vm.autobuyer,\"type\":_vm.autobuyer.inputType,\"property\":_vm.autobuyer.inputEntry}})],1):_vm._e()],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingleAutobuyerBox.vue?vue&type=template&id=0b0e6412&scoped=true&\"\nimport script from \"./SingleAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./SingleAutobuyerBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b0e6412\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n
\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultipleSingleAutobuyersGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultipleSingleAutobuyersGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MultipleSingleAutobuyersGroup.vue?vue&type=template&id=59ad48ab&scoped=true&\"\nimport script from \"./MultipleSingleAutobuyersGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./MultipleSingleAutobuyersGroup.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"59ad48ab\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SimpleAutobuyersMultiBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SimpleAutobuyersMultiBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SimpleAutobuyersMultiBox.vue?vue&type=template&id=2bc353a8&scoped=true&\"\nimport script from \"./SimpleAutobuyersMultiBox.vue?vue&type=script&lang=js&\"\nexport * from \"./SimpleAutobuyersMultiBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2bc353a8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"name\":\"Tickspeed Autobuyer\",\"show-interval\":\"\"},scopedSlots:_vm._u([{key:\"intervalSlot\",fn:function(){return [_c('AutobuyerIntervalButton',{attrs:{\"autobuyer\":_vm.autobuyer}})]},proxy:true},{key:\"toggleSlot\",fn:function(){return [(_vm.isUnlocked)?_c('button',{staticClass:\"o-autobuyer-btn\",on:{\"click\":_vm.toggleMode}},[_vm._v(\" \"+_vm._s(_vm.modeDisplay)+\" \")]):_c('button',{staticClass:\"o-autobuyer-btn o-autobuyer-btn--unavailable\"},[_vm._v(\" Complete the challenge to change mode \")])]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TickspeedAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TickspeedAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TickspeedAutobuyerBox.vue?vue&type=template&id=c3aa3a12&scoped=true&\"\nimport script from \"./TickspeedAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./TickspeedAutobuyerBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c3aa3a12\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"show-interval\":false,\"is-modal\":_vm.isModal,\"name\":\"Automatic Mends\"},scopedSlots:_vm._u([{key:\"intervalSlot\",fn:function(){return [(_vm.hasAdditionalModes)?_c('ExpandingControlBox',{attrs:{\"auto-close\":true},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"o-primary-btn c-autobuyer-box__mode-select c-autobuyer-box__mode-select-header\"},[_vm._v(\" ▼ Current Setting: ▼ \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.modeName(_vm.mode))+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('AutobuyerDropdownEntry',{attrs:{\"autobuyer\":_vm.autobuyer,\"modes\":_vm.modes,\"mode-name-fn\":_vm.modeName}})]},proxy:true}],null,false,2761615181)}):_c('span',[_vm._v(\" \"+_vm._s(_vm.modeProps(_vm.mode).title)+\": \")])]},proxy:true},{key:\"toggleSlot\",fn:function(){return [_c('AutobuyerInput',_vm._b({key:_vm.mode,attrs:{\"autobuyer\":_vm.autobuyer}},'AutobuyerInput',_vm.modeProps(_vm.mode).input,false))]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingAutobuyerBox.vue?vue&type=template&id=5d2d53ac&scoped=true&\"\nimport script from \"./MendingAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingAutobuyerBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MendingAutobuyerBox.vue?vue&type=style&index=0&id=5d2d53ac&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5d2d53ac\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyersTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyersTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyersTab.vue?vue&type=template&id=2cf6e922&scoped=true&\"\nimport script from \"./AutobuyersTab.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyersTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutobuyersTab.vue?vue&type=style&index=0&id=2cf6e922&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2cf6e922\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-tab l-automator-tab\",class:_vm.tabClass},[(_vm.automatorUnlocked)?_c('div',[_c('div',[_vm._v(\" \"+_vm._s(_vm.intervalText)+\" \")]),_c('span',{class:{ 'c-overlimit': _vm.currentChars > _vm.maxScriptChars }},[_vm._v(\" This script: \"+_vm._s(_vm.formatInt(_vm.currentChars))+\" / \"+_vm._s(_vm.formatInt(_vm.maxScriptChars))+\" \")]),_vm._v(\" | \"),_c('span',{class:{ 'c-overlimit': _vm.totalChars > _vm.maxTotalChars }},[_vm._v(\" Across all scripts: \"+_vm._s(_vm.formatInt(_vm.totalChars))+\" / \"+_vm._s(_vm.formatInt(_vm.maxTotalChars))+\" \")]),_c('br'),(!_vm.withinLimit)?_c('span',{staticClass:\"c-overlimit\"},[_vm._v(\" (Your changes will not be saved due to being over a character limit!) \")]):_vm._e(),_c('div',{staticClass:\"c-automator-split-pane\"},[_c('SplitPane',{attrs:{\"min-percent\":44,\"default-percent\":50,\"split\":\"vertical\"},scopedSlots:_vm._u([{key:\"paneL\",fn:function(){return [_c('AutomatorEditor')]},proxy:true},{key:\"paneR\",fn:function(){return [_c('AutomatorDocs')]},proxy:true}],null,false,3115218829)})],1)]):_c('AutomatorPointsList')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-automator-pane\"},[_c('AutomatorControls'),(_vm.isTextAutomator)?_c('AutomatorTextEditor',{attrs:{\"current-script-id\":_vm.currentScriptID}}):_vm._e(),(!_vm.isTextAutomator)?_c('AutomatorBlockEditor'):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator__controls l-automator__controls\"},[_c('div',{staticClass:\"c-automator-control-row l-automator-button-row\"},[_c('div',{staticClass:\"c-button-group\"},[_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Rewind Automator to the first command'),expression:\"'Rewind Automator to the first command'\"}],staticClass:\"fa-fast-backward\",on:{\"click\":_vm.rewind}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:({\n content: _vm.playTooltip,\n hideOnTargetClick: false\n }),expression:\"{\\n content: playTooltip,\\n hideOnTargetClick: false\\n }\"}],class:_vm.playButtonClass,on:{\"click\":_vm.play}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Stop Automator and reset position'),expression:\"'Stop Automator and reset position'\"}],staticClass:\"fa-stop\",on:{\"click\":_vm.stop}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Step forward one line'),expression:\"'Step forward one line'\"}],staticClass:\"fa-step-forward\",on:{\"click\":_vm.step}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Restart script automatically when it reaches the end'),expression:\"'Restart script automatically when it reaches the end'\"}],staticClass:\"fa-sync-alt\",class:{ 'c-automator__button--active' : _vm.repeatOn },on:{\"click\":_vm.repeat}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Automatically restart the active script when finishing or restarting a Reality'),expression:\"'Automatically restart the active script when finishing or restarting a Reality'\"}],staticClass:\"fa-reply\",class:{ 'c-automator__button--active' : _vm.forceRestartOn },on:{\"click\":_vm.restart}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Scroll Automator to follow current line'),expression:\"'Scroll Automator to follow current line'\"}],staticClass:\"fa-indent\",class:{ 'c-automator__button--active' : _vm.followExecution },on:{\"click\":_vm.follow}}),(_vm.fullScreen)?_c('span',{staticClass:\"c-automator__status-text c-automator__status-text--small\",class:{ 'c-automator__status-text--error' : _vm.currentChars > _vm.maxScriptChars }},[_vm._v(\" This script: \"+_vm._s(_vm.formatInt(_vm.currentChars))+\"/\"+_vm._s(_vm.formatInt(_vm.maxScriptChars))+\" \")]):_vm._e()],1),_c('div',{staticClass:\"c-button-group\"},[_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Undo'),expression:\"'Undo'\"}],staticClass:\"fa-arrow-rotate-left\",class:{ 'c-automator__button--inactive' : !_vm.hasUndo },on:{\"click\":_vm.undo}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Redo'),expression:\"'Redo'\"}],staticClass:\"fa-arrow-rotate-right\",class:{ 'c-automator__button--inactive' : !_vm.hasRedo },on:{\"click\":_vm.redo}}),_c('AutomatorModeSwitch')],1)]),_c('div',{staticClass:\"l-automator-button-row\"},[(_vm.duplicateStatus)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('More than one script has this name!'),expression:\"'More than one script has this name!'\"}],staticClass:\"fas fa-exclamation-triangle c-automator__status-text c-automator__status-text--error\"}):_vm._e(),(_vm.editingDifferentScript)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('The automator is running a different script than the editor is showing'),expression:\"'The automator is running a different script than the editor is showing'\"}],staticClass:\"fas fa-circle-exclamation c-automator__status-text c-automator__status-text--warning\"}):_vm._e(),(_vm.justCompleted)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('The automator completed running the previous script'),expression:\"'The automator completed running the previous script'\"}],staticClass:\"fas fa-circle-check c-automator__status-text\"}):_vm._e(),_c('span',{staticClass:\"c-automator__status-text\",class:{ 'c-automator__status-text--error' : _vm.hasErrors && !(_vm.isRunning || _vm.isPaused) }},[_vm._v(\" \"+_vm._s(_vm.statusText)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:({\n content: _vm.automatorModeTooltip,\n hideOnTargetClick: false\n }),expression:\"{\\n content: automatorModeTooltip,\\n hideOnTargetClick: false\\n }\"}],class:Object.assign({}, {'c-slider-toggle-button': true,\n 'c-slider-toggle-button--right': _vm.isTextAutomator},\n _vm.tutorialClass),on:{\"click\":_vm.toggleAutomatorMode}},[_c('i',{staticClass:\"fas fa-cubes\"}),_c('i',{staticClass:\"fas fa-code\"})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorModeSwitch.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorModeSwitch.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorModeSwitch.vue?vue&type=template&id=15d9af9b&scoped=true&\"\nimport script from \"./AutomatorModeSwitch.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorModeSwitch.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorModeSwitch.vue?vue&type=style&index=0&id=15d9af9b&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"15d9af9b\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorControls.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorControls.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorControls.vue?vue&type=template&id=6ae4f435&scoped=true&\"\nimport script from \"./AutomatorControls.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorControls.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorControls.vue?vue&type=style&index=0&id=6ae4f435&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6ae4f435\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorEditor.vue?vue&type=template&id=78354292&scoped=true&\"\nimport script from \"./AutomatorEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorEditor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorEditor.vue?vue&type=style&index=0&id=78354292&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"78354292\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"l-header\"},[_vm._v(\" You have \"+_vm._s(_vm.formatInt(_vm.totalPoints))+\" / \"+_vm._s(_vm.formatInt(_vm.pointsForAutomator))+\" Automator Points towards unlocking the Automator. \"),_c('br'),_vm._v(\" You gain Automator Points from the following sources: \")]),_c('div',{staticClass:\"l-automator-points-list-container\"},[_c('div',{staticClass:\"l-automator-points-list-side-col c-automator-points-list-col\"},[_c('span',{staticClass:\"c-automator-points-list-symbol fas fa-project-diagram\"}),_c('span',{staticClass:\"c-automator-points-list-ap--large\"},[_vm._v(_vm._s(_vm.formatInt(_vm.fromPerks))+\" AP\")]),_c('span',{staticClass:\"l-large-text\"},[_vm._v(\" Perks \")]),_vm._l((_vm.perkSources),function(perk){return _c('div',{key:perk.id,staticClass:\"c-automator-points-list-single-entry\",style:(_vm.textColor(perk.isBought))},[_c('span',{staticClass:\"c-automator-points-list-perk-label\"},[_vm._v(_vm._s(perk.label))]),_vm._v(\" - \"+_vm._s(perk.shortDescription)+\" \"),_c('span',{staticClass:\"c-automator-points-list-ap\"},[_vm._v(_vm._s(_vm.formatInt(perk.automatorPoints))+\" AP\")])])})],2),_c('div',{staticClass:\"l-automator-points-list-center-col\"},_vm._l((_vm.otherSources),function(source){return _c('div',{key:source.name,staticClass:\"c-automator-points-list-cell\"},[_c('span',{staticClass:\"c-automator-points-list-ap--large\"},[_vm._v(_vm._s(_vm.formatInt(source.automatorPoints()))+\" AP\")]),_c('span',{staticClass:\"l-large-text\"},[_vm._v(\" \"+_vm._s(source.name)+\" \")]),_c('br'),_c('br'),_c('span',{style:(_vm.textColor(source.automatorPoints() > 0))},[_vm._v(\" \"+_vm._s(source.shortDescription())+\" \")]),_c('span',{staticClass:\"c-automator-points-list-symbol\",domProps:{\"innerHTML\":_vm._s(source.symbol)}})])}),0),_c('div',{staticClass:\"l-automator-points-list-side-col c-automator-points-list-col\"},[_c('span',{staticClass:\"c-automator-points-list-symbol fas fa-arrow-up\"}),_c('span',{staticClass:\"c-automator-points-list-ap--large\"},[_vm._v(_vm._s(_vm.formatInt(_vm.fromUpgrades))+\" AP\")]),_c('span',{staticClass:\"l-large-text\"},[_vm._v(\" Reality Upgrades \")]),_vm._l((_vm.upgradeSources),function(upgrade){return _c('div',{key:upgrade.id,staticClass:\"c-automator-points-list-single-entry l-upgrade-list\",style:(_vm.textColor(upgrade.isBought))},[_c('b',[_vm._v(_vm._s(upgrade.name))]),_c('span',{staticClass:\"c-automator-points-list-ap\"},[_vm._v(_vm._s(_vm.formatInt(upgrade.automatorPoints))+\" AP\")]),_c('br'),_vm._v(\" \"+_vm._s(upgrade.shortDescription)+\" \")])})],2)]),_c('br'),_c('div',[_vm._v(\" The Automator allows (amongst other things) buying full Time Study Trees, entering Eternity Challenges, or starting Dilation. \"),_c('br'),_vm._v(\" It can also force prestige events on certain conditions independently from your Autobuyers or modify some of your Autobuyer settings. \"),_c('br'),_vm._v(\" The speed of the Automator gradually increases as you get more Realities. If unlocked right now, it would run \"+_vm._s(_vm.format(1000 / _vm.automatorInterval, 2, 2))+\" commands per real-time second. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorPointsList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorPointsList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorPointsList.vue?vue&type=template&id=3d0cd0f0&scoped=true&\"\nimport script from \"./AutomatorPointsList.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorPointsList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorPointsList.vue?vue&type=style&index=0&id=3d0cd0f0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3d0cd0f0\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorTab.vue?vue&type=template&id=5eda76b2&scoped=true&\"\nimport script from \"./AutomatorTab.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorTab.vue?vue&type=style&index=0&id=5eda76b2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5eda76b2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-black-hole-tab\"},[(_vm.isEnslaved || _vm.isDoomed)?_c('div',{staticClass:\"c-black-hole-disabled-description\"},[(_vm.isEnslaved)?_c('i',[_vm._v(\" You must... seek... other methods... \"),_c('br')]):_vm._e(),_vm._v(\" The physics of this Reality do not allow the existence of Black Holes. \")]):(!_vm.isUnlocked)?_c('div',{staticClass:\"l-pre-unlock-text\"},[_c('BlackHoleUnlockButton',{on:{\"blackholeunlock\":_vm.startAnimation}}),_vm._v(\" The Black Hole makes the entire game run significantly faster for a short period of time. \"),_c('br'),_vm._v(\" Starts at \"+_vm._s(_vm.formatX(180))+\" faster for \"+_vm._s(_vm.formatInt(10))+\" seconds, once per hour. \"),_c('br'),_c('br'),_vm._v(\" Unlocking the Black Hole also gives \"+_vm._s(_vm.formatInt(10))+\" Automator Points. \")],1):[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('button',{staticClass:\"o-primary-btn o-primary-btn--subtab-option\",on:{\"click\":_vm.togglePause}},[_vm._v(\" \"+_vm._s(_vm.stateChange)+\" Black Hole \")]),(!_vm.isPermanent)?_c('button',{staticClass:\"o-primary-btn o-primary-btn--subtab-option l-auto-pause-button\",on:{\"click\":_vm.changePauseMode}},[_vm._v(\" Auto-pause: \"+_vm._s(_vm.pauseModeString)+\" \")]):_vm._e()]),_c('canvas',{ref:\"canvas\",staticClass:\"c-black-hole-canvas\",attrs:{\"width\":\"400\",\"height\":\"400\"}}),_c('div',{staticClass:\"l-black-hole-upgrade-grid\"},[_vm._l((_vm.blackHoles),function(blackHole,i){return _c('BlackHoleStateRow',{key:'state' + i,attrs:{\"black-hole\":blackHole}})}),(_vm.hasBH2 && !_vm.isPermanent)?_c('span',[_c('b',[_vm._v(_vm._s(_vm.detailedBH2))]),_c('br'),_vm._v(\" The timer for Black Hole 2 only advances while Black Hole 1 is active. \"),_c('br'),_vm._v(\" Upgrades affect the internal timer; the header shows real time until next activation. \")]):_vm._e(),_c('br'),(!_vm.isPermanent)?_c('div',[_vm._v(\" Black holes become permanently active when they are active for more than \"+_vm._s(_vm.formatPercents(0.9999, 2))+\" of the time. \"),_c('br'),_vm._v(\" Active time percent: \"+_vm._s(_vm.formatPercents(_vm.blackHoleUptime[0], 3))+\" \"),(_vm.hasBH2)?_c('span',[_vm._v(\"and \"+_vm._s(_vm.formatPercents(_vm.blackHoleUptime[1], 3)))]):_vm._e()]):_vm._e(),_c('BlackHoleChargingSliders',{staticClass:\"l-enslaved-shop-container\"})],2),_c('div',{class:_vm.gridStyle()},_vm._l((_vm.blackHoles),function(blackHole,i){return _c('BlackHoleUpgradeRow',{key:'upgrades' + i,attrs:{\"black-hole\":blackHole}})}),1),(_vm.hasBH3)?_c('div',[_vm._v(\" Black Hole 3 is only active when Game Speed is greater than 1. \")]):_vm._e(),_c('div',{class:_vm.gridStyle()},_vm._l((_vm.expoBlackHoles),function(expoBlackHole,j){return _c('ExpoBlackHoleUpgradeRow',{key:'upgrades' + j,attrs:{\"expo-black-hole\":expoBlackHole}})}),1)]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export const BlackHoleAnimation = (function() {\r\n const PLANET_SIZE = 1.5;\r\n const PARTICLE_SIZE = 0.5;\r\n const PARTICLE_COUNT = 120;\r\n // Basically orbit size in pixels\r\n const SEMIMAJOR_AXIS = 100;\r\n // Black Hole active time approximately corresponds to time with >2x\r\n const ACTIVE_THRESHOLD = 2;\r\n\r\n let holeSize;\r\n\r\n // Calculates \"eccentric anomaly\" from \"mean anomaly\",\r\n // see https://en.wikipedia.org/wiki/Kepler%27s_equation#Numerical_approximation_of_inverse_problem\r\n // Needed for accurate Keplerian orbit shape and velocity, apparently math is hard\r\n function eccentricAnomaly(eccentricity, meanAnomaly) {\r\n let E0 = meanAnomaly;\r\n // I hope 20 is enough to converge\r\n const maxIter = 20;\r\n for (let k = 0; k < maxIter; k++) {\r\n E0 = meanAnomaly + eccentricity * Math.sin(E0);\r\n }\r\n return E0;\r\n }\r\n\r\n class Dot {\r\n draw(context) {\r\n context.beginPath();\r\n context.lineWidth = 2 * this.size;\r\n this.performDraw(context);\r\n context.stroke();\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-empty-function, no-unused-vars\r\n performDraw(context) { }\r\n\r\n static calculatePosition(distance, angle) {\r\n return {\r\n x: distance * Math.sin(2 * Math.PI * angle),\r\n y: distance * Math.cos(2 * Math.PI * angle)\r\n };\r\n }\r\n }\r\n\r\n class Planet extends Dot {\r\n constructor() {\r\n super();\r\n this.angle = 0;\r\n this.distance = 0;\r\n this.size = PLANET_SIZE;\r\n }\r\n\r\n update(totalPhase, eccentricity, period) {\r\n // Update orbital position parameters (polar coordinates centered on hole,\r\n // theta goes 0 to 1 because I'm apparently stupid)\r\n const E0 = eccentricAnomaly(eccentricity, 2 * Math.PI * totalPhase / period);\r\n const r = SEMIMAJOR_AXIS * (1 - eccentricity * Math.cos(E0));\r\n let theta = 2 * Math.atan(Math.sqrt((1 + eccentricity) / (1 - eccentricity) * Math.pow(Math.tan(E0 / 2), 2)));\r\n if (Math.tan(E0 / 2) < 0) theta *= -1;\r\n this.distance = r;\r\n this.angle = theta / (2 * Math.PI);\r\n }\r\n\r\n performDraw(context) {\r\n const { x, y } = Dot.calculatePosition(this.distance, this.angle);\r\n context.arc(x + 200, y + 200, PLANET_SIZE, 0, 2 * Math.PI);\r\n context.strokeStyle = \"rgb(0, 0, 255)\";\r\n }\r\n }\r\n\r\n class Hole extends Dot {\r\n constructor(size) {\r\n super();\r\n this.size = size;\r\n }\r\n\r\n performDraw(context) {\r\n // Glowing effect to make the hole more visible on dark themes\r\n const glow = context.createRadialGradient(200, 200, 0, 200, 200, this.size * 2);\r\n if (BlackHoles.areNegative) {\r\n glow.addColorStop(0, \"rgba(255, 255, 255, 1)\");\r\n glow.addColorStop(0.85, \"rgba(190, 190, 190, 1)\");\r\n glow.addColorStop(0.87, \"rgba(170, 170, 170, 1)\");\r\n glow.addColorStop(1, \"rgba(135, 135, 135, 0)\");\r\n } else {\r\n glow.addColorStop(0, \"rgba(0, 0, 0, 1)\");\r\n glow.addColorStop(0.9, \"rgba(0, 0, 0, 1)\");\r\n glow.addColorStop(0.92, \"rgba(100, 100, 100, 1)\");\r\n glow.addColorStop(1, \"rgba(100, 100, 100, 0)\");\r\n }\r\n context.fillStyle = glow;\r\n context.fillRect(0, 0, 400, 400);\r\n context.strokeStyle = \"black\";\r\n }\r\n }\r\n\r\n const blobs = \"\";\r\n class Particle extends Dot {\r\n constructor() {\r\n super();\r\n this.size = PARTICLE_SIZE;\r\n this.respawn();\r\n }\r\n\r\n respawn() {\r\n this.distance = Particle.randomDistance();\r\n this.lastDistance = this.distance;\r\n this.preLastDistance = this.distance;\r\n this.angle = Math.random();\r\n this.lastAngle = this.angle;\r\n this.preLastAngle = this.angle;\r\n this.respawnTick = true;\r\n this.isInside = BlackHoles.areNegative;\r\n this.blob = blobs[Math.floor(Math.random() * blobs.length)];\r\n this.isBlob = Theme.currentName() === \"S11\";\r\n }\r\n\r\n static randomDistance() {\r\n return BlackHoles.areNegative\r\n ? (1.97 * Math.random() + 0.03) * holeSize\r\n : holeSize + 0.5 * SEMIMAJOR_AXIS * Math.random() * (BlackHole(1).isActive ? 2 : 1);\r\n }\r\n\r\n update(delta, dilationFactor) {\r\n const baseSpeed = 1.5;\r\n const speedFactor = Math.min(Math.pow(Math.max(dilationFactor, 2) / 2, 3), 5);\r\n const particleSpeed = baseSpeed * speedFactor * Math.min(delta, 16) / 1000;\r\n\r\n if (!this.isInside) {\r\n this.preLastAngle = this.lastAngle;\r\n this.lastAngle = this.angle;\r\n this.angle = (this.angle + 20 * particleSpeed * Math.PI * Math.pow(this.distance, -1.5)) % 1;\r\n }\r\n\r\n this.preLastDistance = this.lastDistance;\r\n this.lastDistance = this.distance;\r\n const distFactor = 1 + 0.3 * particleSpeed * Math.pow(this.distance / holeSize, -2);\r\n if (BlackHoles.areNegative) {\r\n this.distance *= distFactor;\r\n } else {\r\n this.distance /= distFactor;\r\n }\r\n\r\n // This magic number is a numerical result from the arcane (and probably now-unneeded) math below\r\n // in the Animation constructor, assuming reasonable values for the game state at the point when\r\n // inverting is unlocked. The end result is that particles despawn in the inverted animation at\r\n // roughly the maximum spawning distance as the forward animation\r\n if (this.distance > 2.74645 * holeSize && BlackHoles.areNegative) {\r\n this.respawn();\r\n } else if (this.distance < 0.01 * holeSize && !BlackHoles.areNegative) {\r\n this.respawn();\r\n return;\r\n }\r\n\r\n this.isInside = this.distance <= holeSize * 0.865;\r\n this.respawnTick = false;\r\n }\r\n\r\n performDraw(context) {\r\n this.drawTrail(context);\r\n\r\n if (!BlackHole(1).isActive) {\r\n context.strokeStyle = \"rgb(127, 127, 127)\";\r\n return;\r\n }\r\n\r\n const { distance } = this;\r\n\r\n if (distance > holeSize) {\r\n // Trails outside black hole\r\n const dist = Math.floor(127 * (distance - holeSize) / SEMIMAJOR_AXIS);\r\n context.strokeStyle = `rgb(${135 - dist}, ${dist}, ${dist})`;\r\n }\r\n\r\n if (distance <= holeSize) {\r\n // Trails inside black hole\r\n const dist = Math.floor(255 * Math.sqrt(distance / holeSize));\r\n context.strokeStyle = `rgb(${dist}, 0, 0)`;\r\n }\r\n }\r\n\r\n drawTrail(context) {\r\n if (this.isInside && !BlackHole(2).isActive) {\r\n return;\r\n }\r\n const { x, y } = Dot.calculatePosition(this.distance, this.angle);\r\n if (this.respawnTick || !BlackHole(1).isActive) {\r\n context.arc(x + 200, y + 200, this.size, 0, 2 * Math.PI);\r\n if (this.isBlob) this.drawAndRotateBlob(context, x, y);\r\n return;\r\n }\r\n const angle = this.isInside ? this.angle : this.preLastAngle;\r\n const { x: lastX, y: lastY } = Dot.calculatePosition(this.preLastDistance, angle);\r\n context.lineCap = \"round\";\r\n\r\n if (this.isBlob) {\r\n this.drawAndRotateBlob(context, x, y);\r\n } else {\r\n context.lineWidth *= 1;\r\n context.moveTo(x + 200, y + 200);\r\n context.lineTo(lastX + 200, lastY + 200);\r\n }\r\n }\r\n\r\n drawAndRotateBlob(context, x, y) {\r\n const FONT_SIZE = 18;\r\n context.textAlign = \"center\";\r\n context.fillStyle = \"orange\";\r\n\r\n if (this.distance <= holeSize) {\r\n const scale = this.distance / holeSize;\r\n const px = FONT_SIZE * Math.sqrt(scale);\r\n const green = 165 * scale ** 2;\r\n\r\n context.fillStyle = `rgba(255, ${green}, 0, ${scale * 2})`;\r\n context.font = `${px}px Typewriter`;\r\n } else {\r\n context.font = `${FONT_SIZE}px Typewriter`;\r\n }\r\n\r\n context.save();\r\n context.translate(x + 200, y + 200);\r\n context.rotate(-this.angle * Math.PI * 2 + Math.PI);\r\n context.fillText(this.blob, 0, 0);\r\n context.restore();\r\n }\r\n }\r\n\r\n return class Animation {\r\n constructor(context) {\r\n this.context = context;\r\n this.planet = new Planet();\r\n\r\n // Time taken for one orbit (in seconds)\r\n this.period = BlackHole(1).cycleLength;\r\n // Fixed-point iteration for eccentricity (I'm really hoping this always converges)\r\n const y = (1 - Math.pow(ACTIVE_THRESHOLD, -2)) / (1 - Math.pow(BlackHole(1).power, -2));\r\n let eccentricity = 0.5;\r\n const maxIter = 1000;\r\n const meanAnomaly = 2 * Math.PI * Math.min(0.9, BlackHole(1).duration / this.period);\r\n for (let k = 0; k < maxIter; k++) {\r\n const E0 = eccentricAnomaly(eccentricity, meanAnomaly);\r\n eccentricity = (y - 1) / (y * Math.cos(E0) - 1);\r\n }\r\n this.eccentricity = eccentricity;\r\n\r\n // Black Hole size, calculated from orbit shape in order to give the right max boost\r\n holeSize = SEMIMAJOR_AXIS * (1 - eccentricity) * (1 - Math.pow(BlackHole(1).power, -2));\r\n // Prevent planet + hole overlapping\r\n this.hole = new Hole((holeSize - PLANET_SIZE) / 2);\r\n\r\n // Particles (scaled to take the same range as the orbit)\r\n this.particles = Array.range(0, PARTICLE_COUNT).map(() => new Particle());\r\n this.frameRequest = requestAnimationFrame(time => this.update(time));\r\n }\r\n\r\n update(time) {\r\n this.frameRequest = requestAnimationFrame(t => this.update(t));\r\n if (time === undefined || this.lastFrame === undefined) {\r\n this.lastFrame = time;\r\n return;\r\n }\r\n const delta = time - this.lastFrame;\r\n this.lastFrame = time;\r\n\r\n this.planet.update(this.totalPhase(), this.eccentricity, this.period);\r\n\r\n this.context.clearRect(0, 0, 400, 400);\r\n this.hole.draw(this.context);\r\n for (const particle of this.particles) {\r\n particle.draw(this.context);\r\n }\r\n\r\n if (BlackHoles.arePaused && !BlackHoles.areNegative) return;\r\n\r\n\r\n // Time dilation factor (Realistic formula, but only actually used for particle speed)\r\n const dilationFactor = 1 / Math.sqrt(1 - holeSize / this.planet.distance);\r\n for (const particle of this.particles) {\r\n particle.update(delta, dilationFactor);\r\n }\r\n }\r\n\r\n // Code was originally written to use phase over a cycle of active+inactive time and\r\n // would be really difficult to rewrite to use the current black hole phase\r\n // Example on what this is: if the black hole has intervals of 100+10 then this ranges\r\n // from 0 to 110 and is active when less than 5 or more than 105\r\n totalPhase() {\r\n const blackHole = BlackHole(1);\r\n if (blackHole.isActive) {\r\n return (blackHole.phase - blackHole.duration / 2 + this.period) % this.period;\r\n }\r\n\r\n return blackHole.phase + blackHole.duration / 2;\r\n }\r\n\r\n unmount() {\r\n cancelAnimationFrame(this.frameRequest);\r\n }\r\n };\r\n}());\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.isNegativeBHUnlocked)?_c('div',{staticClass:\"l-black-hole-sliders\"},[_c('b',[_vm._v(\" Inverted Black Hole divides game speed by \"+_vm._s(_vm.format(_vm.negativeBHDivisor, 2, 2))+\". (Currently \"+_vm._s(_vm.isInverted ? \"active\" : \"inactive\")),(_vm.negativeSlider !== 0 && !_vm.isInverted)?_c('span',{attrs:{\"ach-tooltip\":_vm.infoTooltip}},[_c('i',{staticClass:\"fas fa-question-circle l-margin-left\"})]):_vm._e(),_vm._v(\") \")]),(!_vm.isDisabled)?_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.negativeSlider},on:{\"input\":function($event){return _vm.adjustSliderNegative($event)}}},'SliderComponent',_vm.sliderProps(true),false)):_c('div',{staticClass:\"l-lock-text\"},[_vm._v(\" \"+_vm._s(_vm.reqLockText)+\" \")]),_c('br'),_vm._v(\" Inverting the Black Hole only affects its own speedup, no other upgrades or effects, although it will also indirectly affect the Effarig Game speed power effect. \")],1):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.show),expression:\"show\"}],class:['l-ad-slider', _vm.flowDirection, _vm.disabledClass, { 'l-ad-slider--has-label': _vm.piecewiseLabel }]},[(_vm.plusMinusButtons)?_c('PlusMinusButton',{attrs:{\"type\":\"minus\"},on:{\"click\":function($event){return _vm.increment(-1)}}}):_vm._e(),_c('div',{ref:\"wrap\",class:['l-ad-slider__wrap', _vm.stateClass],style:([_vm.wrapStyles, _vm.boolDisabled ? _vm.disabledStyle : null]),on:{\"click\":_vm.wrapClick}},[_c('div',{ref:\"elem\",class:['l-ad-slider__bg', 'c-ad-slider__bg', _vm.bgClass],style:([_vm.elemStyles, _vm.bgStyle, _vm.draggableStyle]),attrs:{\"aria-hidden\":\"true\"},on:{\"mousedown\":function($event){return _vm.moveStart($event, 0, true)},\"touchstart\":function($event){return _vm.moveStart($event, 0, true)}}},[(_vm.isRange)?[_c('div',{key:\"dot0\",ref:\"dot0\",class:[_vm.tooltipStatus, 'l-ad-slider__dot', 'c-ad-slider__dot',\n {\n 'l-ad-slider__dot--focus': _vm.focusFlag && _vm.focusSlider === 0,\n 'l-ad-slider__dot--dragging': _vm.flag && _vm.currentSlider === 0,\n 'l-ad-slider__dot--disabled': !_vm.boolDisabled && _vm.disabledArray[0]\n }\n ],style:(_vm.dotStyles),on:{\"mousedown\":_vm.moveStart,\"touchstart\":_vm.moveStart}},[_c('div',{class:['l-ad-slider__dot-handle', 'c-ad-slider__dot-handle', _vm.dotClass],style:([\n (!_vm.boolDisabled && _vm.disabledArray[0])\n ? _vm.disabledDotStyles[0]\n : null,\n _vm.sliderStyles[0],\n _vm.focusFlag && _vm.focusSlider === 0 ? _vm.focusStyles[0]: null\n ])}),_c('div',{ref:\"tooltip0\",class:['ad-slider-tooltip-' + _vm.tooltipDirection[0], 'ad-slider-tooltip-wrap']},[_c('span',{staticClass:\"ad-slider-tooltip\",style:(_vm.tooltipStyles[0])},[_vm._v(_vm._s(_vm.xformatter ? _vm.formatting(_vm.val[0]) : _vm.val[0]))])])]),_c('div',{key:\"dot1\",ref:\"dot1\",class:[_vm.tooltipStatus, 'l-ad-slider__dot', 'c-ad-slider__dot',\n {\n 'l-ad-slider__dot--focus': _vm.focusFlag && _vm.focusSlider === 1,\n 'l-ad-slider__dot--dragging': _vm.flag && _vm.currentSlider === 1,\n 'l-ad-slider__dot--disabled': !_vm.boolDisabled && _vm.disabledArray[1]\n }\n ],style:(_vm.dotStyles),on:{\"mousedown\":function($event){return _vm.moveStart($event, 1)},\"touchstart\":function($event){return _vm.moveStart($event, 1)}}},[_c('div',{class:['l-ad-slider__dot-handle', 'c-ad-slider__dot-handle', _vm.dotClass],style:([\n (!_vm.boolDisabled && _vm.disabledArray[1])\n ? _vm.disabledDotStyles[1]\n : null,\n _vm.sliderStyles[1],\n _vm.focusFlag && _vm.focusSlider === 1 ? _vm.focusStyles[1]: null\n ])}),_c('div',{ref:\"tooltip1\",class:['ad-slider-tooltip-' + _vm.tooltipDirection[1], 'ad-slider-tooltip-wrap']},[_c('span',{staticClass:\"ad-slider-tooltip\",style:(_vm.tooltipStyles[1])},[_vm._v(_vm._s(_vm.xformatter ? _vm.formatting(_vm.val[1]) : _vm.val[1]))])])])]:[_c('div',{key:\"dot0\",ref:\"dot0\",class:[_vm.tooltipStatus, 'l-ad-slider__dot', 'c-ad-slider__dot',\n {\n 'l-ad-slider__dot--focus': _vm.focusFlag && _vm.focusSlider === 0,\n 'l-ad-slider__dot--dragging': _vm.flag && _vm.currentSlider === 0\n }\n ],style:(_vm.dotStyles),on:{\"mousedown\":_vm.moveStart,\"touchstart\":_vm.moveStart}},[_c('div',{class:['l-ad-slider__dot-handle', 'c-ad-slider__dot-handle', _vm.dotClass],style:([_vm.sliderStyles, _vm.focusFlag && _vm.focusSlider === 0 ? _vm.focusStyles : null])},[_vm._v(\" \"+_vm._s(_vm.dotContents(0))+\" \")]),_c('div',{class:['ad-slider-tooltip-' + _vm.tooltipDirection, 'ad-slider-tooltip-wrap']},[_c('span',{staticClass:\"ad-slider-tooltip\",style:(_vm.tooltipStyles)},[_vm._v(_vm._s(_vm.xformatter ? _vm.formatting(_vm.val) : _vm.val))])])])],_c('ul',{staticClass:\"ad-slider-piecewise\"},_vm._l((_vm.piecewiseDotWrap),function(piecewiseObj,index){return _c('li',{key:index,staticClass:\"ad-slider-piecewise-item\",style:([_vm.piecewiseDotStyle, piecewiseObj.style])},[(_vm.piecewise)?_c('span',{staticClass:\"ad-slider-piecewise-dot\",style:([ _vm.piecewiseStyle, _vm.isActive(piecewiseObj.index) ? _vm.piecewiseActiveStyle : null ])}):_vm._e(),(_vm.piecewiseLabel)?_c('span',{staticClass:\"ad-slider-piecewise-label\",style:([ _vm.labelStyle, _vm.isActive(piecewiseObj.index) ? _vm.labelActiveStyle : null ])},[_vm._v(\" \"+_vm._s(piecewiseObj.label)+\" \")]):_vm._e()])}),0),_c('div',{ref:\"process\",class:['l-ad-slider__process', 'c-ad-slider__process', { 'ad-slider-process-draggable': _vm.isRange && _vm.processDraggable }, _vm.processClass],style:([_vm.elemStyles, _vm.bgStyle, _vm.draggableStyle]),on:{\"click\":_vm.processClick}},[_c('div',{ref:\"mergedTooltip\",class:['vue-merged-tooltip', 'ad-slider-tooltip-' + _vm.tooltipDirection[0], 'ad-slider-tooltip-wrap'],style:(_vm.tooltipMergedPosition)},[_c('span',{staticClass:\"ad-slider-tooltip\",style:(_vm.tooltipStyles)},[_vm._v(\" \"+_vm._s(_vm.tooltipFormatHelper)+\" \")])])])],2)]),(_vm.plusMinusButtons)?_c('PlusMinusButton',{attrs:{\"type\":\"plus\"},on:{\"click\":function($event){return _vm.increment(1)}}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"repeating-click\",rawName:\"v-repeating-click\",value:({ delay: 500 }),expression:\"{ delay: 500 }\"}],staticClass:\"c-ad-slider__button\",on:{\"firstclick\":function($event){return _vm.$emit('click')},\"repeatclick\":function($event){return _vm.$emit('click')}}},[_c('div',{class:_vm.iconClass})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PlusMinusButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PlusMinusButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlusMinusButton.vue?vue&type=template&id=1c7fda29&scoped=true&\"\nimport script from \"./PlusMinusButton.vue?vue&type=script&lang=js&\"\nexport * from \"./PlusMinusButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlusMinusButton.vue?vue&type=style&index=0&id=1c7fda29&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1c7fda29\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SliderComponent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SliderComponent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SliderComponent.vue?vue&type=template&id=43704430&\"\nimport script from \"./SliderComponent.vue?vue&type=script&lang=js&\"\nexport * from \"./SliderComponent.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleChargingSliders.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleChargingSliders.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlackHoleChargingSliders.vue?vue&type=template&id=c72692d6&scoped=true&\"\nimport script from \"./BlackHoleChargingSliders.vue?vue&type=script&lang=js&\"\nexport * from \"./BlackHoleChargingSliders.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BlackHoleChargingSliders.vue?vue&type=style&index=0&id=c72692d6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c72692d6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('h3',[_vm._v(\" \"+_vm._s(_vm.description)+\" State: \"),(_vm.isPermanent)?[_vm._v(\" Permanently Active \")]:(_vm.isActive)?[_vm._v(\" Active (\"+_vm._s(_vm.nextChange)+\" remaining) \")]:(_vm.id === 2 && _vm.isCharged)?[_vm._v(\" Charged (Activates with Black Hole 1, \"+_vm._s(_vm.nextChange)+\" remaining) \")]:[_vm._v(\" Inactive (Activation in \"+_vm._s(_vm.nextChange)+\") \")]],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleStateRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleStateRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlackHoleStateRow.vue?vue&type=template&id=d6d66fce&scoped=true&\"\nimport script from \"./BlackHoleStateRow.vue?vue&type=script&lang=js&\"\nexport * from \"./BlackHoleStateRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d6d66fce\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"l-reality-upgrade-btn c-reality-upgrade-btn c-reality-upgrade-btn--black-hole-unlock\",class:_vm.classObject,on:{\"click\":_vm.unlock}},[_vm._v(\" Unleash the Black Hole \"),_c('br'),_vm._v(\" Cost: \"+_vm._s(_vm.formatInt(100))+\" Reality Machines \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleUnlockButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleUnlockButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlackHoleUnlockButton.vue?vue&type=template&id=dea0422a&scoped=true&\"\nimport script from \"./BlackHoleUnlockButton.vue?vue&type=script&lang=js&\"\nexport * from \"./BlackHoleUnlockButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dea0422a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('div',{staticClass:\"l-black-hole-upgrade-grid__row\"},[(!_vm.isPermanent)?_c('BlackHoleUpgradeButton',{key:_vm.intervalVal,attrs:{\"config\":_vm.intervalConfig}}):_vm._e(),_c('BlackHoleUpgradeButton',{attrs:{\"config\":_vm.powerConfig}}),(!_vm.isPermanent)?_c('BlackHoleUpgradeButton',{key:_vm.durationVal,attrs:{\"config\":_vm.durationConfig}}):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-reality-upgrade-btn c-reality-upgrade-btn\",class:_vm.classObject,on:{\"click\":function($event){return _vm.config.upgrade.purchase()}}},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),_c('EffectDisplay',{attrs:{\"config\":_vm.effectConfig,\"label\":_vm.config.effectTitle}}),(!_vm.isCapped)?_c('CostDisplay',{attrs:{\"config\":_vm.costConfig,\"name\":\"Reality Machine\"}}):_vm._e()],1),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon-reality-btn o-primary-btn--reality-upgrade-toggle\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('span',[(_vm.br)?_c('br'):_vm._e(),_vm._v(\" \"+_vm._s(_vm.label)+\" \"+_vm._s(_vm.quantify(_vm.name, _vm.cost, 0, 0, _vm.formatCost))+\" \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CostDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CostDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CostDisplay.vue?vue&type=template&id=18997ed2&\"\nimport script from \"./CostDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./CostDisplay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('span',{class:_vm.classObject},[_vm._v(\" \"+_vm._s(_vm.title)+\" \"+_vm._s(_vm.description)+\" \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DescriptionDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DescriptionDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DescriptionDisplay.vue?vue&type=template&id=53a3a50e&\"\nimport script from \"./DescriptionDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./DescriptionDisplay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlackHoleUpgradeButton.vue?vue&type=template&id=6590e9be&scoped=true&\"\nimport script from \"./BlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./BlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6590e9be\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlackHoleUpgradeRow.vue?vue&type=template&id=eb5ab370&scoped=true&\"\nimport script from \"./BlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"\nexport * from \"./BlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"eb5ab370\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('div',{staticClass:\"l-black-hole-upgrade-grid__row\"},[_c('ExpoBlackHoleUpgradeButton',{attrs:{\"config\":_vm.powerConfig}})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-reality-upgrade-btn c-reality-upgrade-btn\",class:_vm.classObject,on:{\"click\":function($event){return _vm.config.upgrade.purchase()}}},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),_c('EffectDisplay',{attrs:{\"config\":_vm.effectConfig,\"label\":_vm.config.effectTitle}}),(!_vm.isCapped)?_c('CostDisplay',{attrs:{\"config\":_vm.costConfig,\"name\":\"Imaginary Machine\"}}):_vm._e()],1),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon-reality-btn o-primary-btn--reality-upgrade-toggle\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExpoBlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExpoBlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ExpoBlackHoleUpgradeButton.vue?vue&type=template&id=5d1da3a7&scoped=true&\"\nimport script from \"./ExpoBlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ExpoBlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5d1da3a7\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExpoBlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExpoBlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ExpoBlackHoleUpgradeRow.vue?vue&type=template&id=39a56dee&scoped=true&\"\nimport script from \"./ExpoBlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ExpoBlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"39a56dee\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlackHoleTab.vue?vue&type=template&id=49a1483d&scoped=true&\"\nimport script from \"./BlackHoleTab.vue?vue&type=script&lang=js&\"\nexport * from \"./BlackHoleTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BlackHoleTab.vue?vue&type=style&index=0&id=49a1483d&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"49a1483d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-break-infinity-tab\"},[(_vm.chargeUnlocked)?_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{class:_vm.disChargeClassObject,on:{\"click\":function($event){_vm.disCharge = !_vm.disCharge}}},[_vm._v(\" Respec Charged Break Infinity Upgrades on next Reality \")])],1):_vm._e(),(_vm.chargeUnlocked)?_c('div',[_vm._v(\" You have charged \"+_vm._s(_vm.formatInt(_vm.chargesUsed))+\"/\"+_vm._s(_vm.formatInt(_vm.totalCharges))+\" Break Infinity Upgrades. Charged Break Infinity Upgrades have their effect altered. \"),_c('br'),_vm._v(\" Hold shift to show Charged Infinity Upgrades. You can freely respec your choices on Reality. \")]):_vm._e(),(_vm.chargeUnlocked)?_c('div',[(_vm.isUseless)?_c('div',[_vm._v(\" You cannot Charge Break Infinity Upgrades while Doomed. \")]):_vm._e()]):_vm._e(),(!_vm.isUnlocked)?_c('div',[_vm._v(\" Reduce the interval of Automatic Big Crunch Autobuyer to \"+_vm._s(_vm.format(0.1, 1, 1))+\" seconds to unlock Break Infinity. \")]):_vm._e(),_c('BreakInfinityButton',{staticClass:\"l-break-infinity-tab__break-btn\"}),(_vm.isUnlocked)?_c('div',{staticClass:\"l-break-infinity-upgrade-grid l-break-infinity-tab__grid\"},_vm._l((_vm.grid),function(column,columnId){return _c('div',{key:columnId,staticClass:\"l-break-infinity-upgrade-grid__row\"},_vm._l((column),function(upgrade){return _c('InfinityUpgradeButton',{key:upgrade.id,class:_vm.btnClassObject(columnId),attrs:{\"upgrade\":upgrade}})}),1)}),0):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],class:_vm.classObject,on:{\"click\":_vm.clicked}},[_vm._v(\" \"+_vm._s(_vm.text)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BreakInfinityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BreakInfinityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BreakInfinityButton.vue?vue&type=template&id=07a8a594&scoped=true&\"\nimport script from \"./BreakInfinityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./BreakInfinityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"07a8a594\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:_vm.classObject,on:{\"mouseenter\":function($event){_vm.showingCharged = _vm.canBeCharged},\"mouseleave\":function($event){_vm.showingCharged = false},\"click\":function($event){return _vm.upgrade.purchase()}}},[_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),(_vm.showWorstChallenge)?_c('span',[_c('br'),_vm._v(\" \"+_vm._s(_vm.worstChallengeString)+\" \")]):_vm._e(),(!_vm.isDisabled)?_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.config}}):_vm._e(),(!_vm.isDisabled && _vm.isImprovedByTS31)?[_c('br'),_vm._v(\" After TS31: \"+_vm._s(_vm.formatX(_vm.ts31Effect, 2, 2))+\" \")]:_vm._e()],2),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"br\":\"\",\"config\":_vm.config,\"name\":\"Infinity Point\"}}):_vm._e(),_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityUpgradeButton.vue?vue&type=template&id=44d40775&scoped=true&\"\nimport script from \"./InfinityUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"44d40775\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BreakInfinityTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BreakInfinityTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BreakInfinityTab.vue?vue&type=template&id=2dd1569f&scoped=true&\"\nimport script from \"./BreakInfinityTab.vue?vue&type=script&lang=js&\"\nexport * from \"./BreakInfinityTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2dd1569f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('svg',{ref:\"celestialNavigationSVG\",staticClass:\"c-wide-canvas-element l-celestial-navigation\"},[_c('defs',[_c('linearGradient',{attrs:{\"id\":\"grad1\",\"x1\":\"0%\",\"y1\":\"0%\",\"x2\":\"100%\",\"y2\":\"0%\"}},[_c('stop',{attrs:{\"offset\":\"0%\",\"stop-color\":\"#ffff00\",\"stop-opacity\":\"1\"}}),_c('stop',{attrs:{\"offset\":\"100%\",\"stop-color\":\"#ff0000\",\"stop-opacity\":\"1\"}})],1),_c('linearGradient',{attrs:{\"id\":\"incompleteFade\",\"x1\":\"0\",\"x2\":\"8\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#888\",\"stop-opacity\":\"0\"}}),_c('stop',{attrs:{\"offset\":\"8\",\"stop-color\":\"#888\",\"stop-opacity\":\"1\"}})],1),_c('linearGradient',{attrs:{\"id\":\"fadeGrad\",\"y2\":\"0\",\"x2\":\"1\"}},[_c('stop',{attrs:{\"offset\":\"0.5\",\"stop-color\":\"white\",\"stop-opacity\":\"0\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"white\",\"stop-opacity\":\".5\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradTeresaEffarig\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#5151ec\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#d13737\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradEffarigEnslaved\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#d13737\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#ffa337\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradEnslavedV\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#ffa337\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#ffe066\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradRaTeresa\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#9063de\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#5151ec\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradRaEffarig\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#9063de\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#d13737\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradRaEnslaved\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#9063de\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#ffa337\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradRaV\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#9063de\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#ffe066\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradRaLaitela\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#9063de\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"white\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradLaitelaPelle\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"white\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"crimson\"}})],1),_c('mask',{attrs:{\"id\":\"fade\",\"maskContentUnits\":\"objectBoundingBox\"}},[_c('rect',{attrs:{\"width\":\"1\",\"height\":\"1\",\"fill\":\"url(#fadeGrad)\"}})]),_c('filter',{attrs:{\"id\":\"completeGlow\",\"x\":\"-100%\",\"y\":\"-100%\",\"width\":\"300%\",\"height\":\"300%\"}},[_c('feGaussianBlur',{attrs:{\"in\":\"SourceGraphic\",\"result\":\"blurred\",\"stdDeviation\":\"2\"}}),_c('feMerge',[_c('feMergeNode',{attrs:{\"in\":\"blurred\"}}),_c('feMergeNode',{attrs:{\"in\":\"SourceGraphic\"}})],1)],1),_c('filter',{attrs:{\"id\":\"backgroundGlow\",\"x\":\"-100%\",\"y\":\"-100%\",\"width\":\"300%\",\"height\":\"300%\"}},[_c('feGaussianBlur',{attrs:{\"in\":\"SourceGraphic\",\"result\":\"blurred\",\"stdDeviation\":\"4\"}}),_c('feMerge',[_c('feMergeNode',{attrs:{\"in\":\"blurred\"}}),_c('feMergeNode',{attrs:{\"in\":\"SourceGraphic\"}})],1)],1)],1),_c('image',{attrs:{\"x\":\"-250\",\"y\":\"-350\",\"height\":\"1503\",\"width\":\"1503\",\"href\":\"images/celestial-navigation-bg.webp\"}}),_vm._l((_vm.drawOrder),function(obj,index){return _c('g',{key:index,attrs:{\"visibility\":_vm.nodeVisibility(obj)}},[_c(obj.is,_vm._b({tag:\"component\",attrs:{\"complete\":_vm.nodeState[obj.nodeId].complete}},'component',obj.config,false))],1)})],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('path',{attrs:{\"transform\":_vm.ringBackgroundTransform,\"d\":_vm.ringBackgroundPath,\"fill\":\"rgba(0,0,0,0.75)\",\"stroke\":\"none\",\"filter\":_vm.ringBackgroundFilter}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\r\n * @param {object} d\r\n * @param {number} d.rMajor\r\n * @param {number} [d.rMinor]\r\n * @param {number} [d.gapCenterDeg]\r\n * @param {number} [d.gapDeg]\r\n * @param {number} [d.gapAngleDeg]\r\n */\r\nexport function svgRingPath(d) {\r\n if (!d.gapDeg) {\r\n const rMinorCircle = d.rMinor\r\n ? `m 0.2 ${d.rMajor - d.rMinor}\r\na ${d.rMinor} ${d.rMinor} 0 1 1 -0.2 0\r\nz`\r\n : \"\";\r\n return `M -0.1, ${-d.rMajor}\r\na ${d.rMajor} ${d.rMajor} 0 1 0 0.2 0\r\nz\r\n${rMinorCircle}`;\r\n }\r\n const toRad = Math.PI / 180;\r\n const gapAngleDeg = d.gapAngleDeg === undefined ? d.gapDeg / 2 : d.gapAngleDeg;\r\n const edge0 = toRad * (d.gapCenterDeg + d.gapDeg / 2);\r\n const c0 = Math.cos(edge0), s0 = Math.sin(edge0);\r\n const edge1 = toRad * (d.gapCenterDeg - d.gapDeg / 2);\r\n const c1 = Math.cos(edge1), s1 = Math.sin(edge1);\r\n const x = d.rMajor / d.rMinor * Math.sin(toRad * (d.gapDeg / 2 - gapAngleDeg));\r\n const innerAngle = Math.asin(x) + toRad * gapAngleDeg;\r\n const edge2 = toRad * d.gapCenterDeg + innerAngle;\r\n const c2 = Math.cos(edge2), s2 = Math.sin(edge2);\r\n const edge3 = toRad * d.gapCenterDeg - innerAngle;\r\n const c3 = Math.cos(edge3), s3 = Math.sin(edge3);\r\n const big = d.gapDeg <= 180 ? 1 : 0;\r\n return `M ${c0 * d.rMajor - 1e-3 * s0} ${s0 * d.rMajor + 1e-3 * c0}\r\nA ${d.rMajor} ${d.rMajor} 0 ${big} 1 ${c1 * d.rMajor + 1e-3 * s1} ${s1 * d.rMajor - 1e-3 * c1}\r\nL ${c3 * d.rMinor + 1e-3 * s3} ${s3 * d.rMinor - 1e-3 * c3}\r\nA ${d.rMinor} ${d.rMinor} 0 ${big} 0 ${c2 * d.rMinor - 1e-3 * s2} ${s2 * d.rMinor + 1e-3 * c2}\r\nz`;\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NodeBackground.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NodeBackground.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NodeBackground.vue?vue&type=template&id=4a7519ae&scoped=true&\"\nimport script from \"./NodeBackground.vue?vue&type=script&lang=js&\"\nexport * from \"./NodeBackground.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4a7519ae\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',_vm._g({staticClass:\"o-celestial-nav__hoverable\",class:_vm.nodeClass,attrs:{\"transform\":_vm.baseTransform}},_vm.clickAction ? { click: _vm.clickAction } : {}),[_c('path',{staticClass:\"o-celestial-nav__node-overlay\",attrs:{\"d\":_vm.pathData}}),(_vm.hasLegend)?_c('g',{staticClass:\"tooltiptext\"},[_c('polyline',{staticClass:\"o-celestial-nav__legend-arrow\",attrs:{\"points\":_vm.legendArrowPointString}}),_c('path',{staticClass:\"o-celestial-nav__legend-outline\",attrs:{\"d\":_vm.pathData}}),_c('g',{attrs:{\"transform\":_vm.legendTransform}},[_c('text',{staticClass:\"o-celestial-nav__legend-text\",attrs:{\"text-anchor\":_vm.legendTextAnchor,\"dominant-baseline\":\"middle\",\"font-size\":_vm.LEGEND_FONT_SIZE}},_vm._l((_vm.legendLines),function(line,idx){return _c('tspan',{key:idx,attrs:{\"x\":\"0\",\"y\":_vm.legendLineY(idx)}},[_vm._v(\" \"+_vm._s(line)+\" \")])}),0)])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NodeOverlay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NodeOverlay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NodeOverlay.vue?vue&type=template&id=689b5224&scoped=true&\"\nimport script from \"./NodeOverlay.vue?vue&type=script&lang=js&\"\nexport * from \"./NodeOverlay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NodeOverlay.vue?vue&type=style&index=0&id=689b5224&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"689b5224\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',{attrs:{\"transform\":_vm.baseTransform}},[_c('path',{class:_vm.ringClass,attrs:{\"d\":_vm.pathData,\"stroke\":\"none\",\"fill\":_vm.fill,\"filter\":_vm.ringFilter}}),(_vm.symbol)?_c('text',{staticClass:\"o-celestial-nav__symbol o-no-mouse\",attrs:{\"fill\":\"#000\",\"dominant-baseline\":\"middle\",\"font-size\":_vm.symbolFontSize,\"dy\":_vm.symbolOffset}},[_vm._v(\" \"+_vm._s(_vm.symbol)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NodeRing.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NodeRing.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NodeRing.vue?vue&type=template&id=10806dde&scoped=true&\"\nimport script from \"./NodeRing.vue?vue&type=script&lang=js&\"\nexport * from \"./NodeRing.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"10806dde\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',[(!_vm.noBG)?_c('g',{attrs:{\"transform\":_vm.incompleteTransform}},[_c('path',{attrs:{\"d\":_vm.incompleteFadePath,\"fill\":\"url(#incompleteFade)\"}}),(_vm.hasIncompleteSolidPath)?_c('path',{attrs:{\"d\":_vm.incompleteSolidPath,\"fill\":\"#888\"}}):_vm._e()]):_vm._e(),_c('g',{attrs:{\"filter\":_vm.filter}},[_c('path',{style:({ 'opacity': _vm.opacity }),attrs:{\"transform\":_vm.completeTransform,\"fill\":_vm.fill,\"stroke\":\"none\",\"d\":_vm.completePath}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ProgressConnector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ProgressConnector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProgressConnector.vue?vue&type=template&id=027e7312&scoped=true&\"\nimport script from \"./ProgressConnector.vue?vue&type=script&lang=js&\"\nexport * from \"./ProgressConnector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"027e7312\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialNavigationTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialNavigationTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialNavigationTab.vue?vue&type=template&id=8ce190f0&scoped=true&\"\nimport script from \"./CelestialNavigationTab.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialNavigationTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8ce190f0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-challenge-records-tab c-stats-tab\"},[_c('ChallengeRecordsList',{attrs:{\"start\":2,\"times\":_vm.normalChallenges,\"name\":\"Normal Challenge\"}}),(_vm.infinityChallengesUnlocked)?_c('ChallengeRecordsList',{staticClass:\"l-challenge-records-tab__infinity_challenges\",attrs:{\"start\":1,\"times\":_vm.infinityChallenges,\"name\":\"Infinity Challenge\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('br'),_vm._l((_vm.times),function(time,i){return _c('div',{key:i},[_c('span',[_vm._v(_vm._s(_vm.name)+\" \"+_vm._s(_vm.start + i)+\" \"+_vm._s(_vm.completionString(time)))])])}),_c('br'),(_vm.completedAllChallenges)?_c('div',[_vm._v(\" Sum of \"+_vm._s(_vm.name)+\" record times: \"+_vm._s(_vm.timeDisplayShort(_vm.timeSum))+\" \")]):_c('div',[_vm._v(\" You have not completed all \"+_vm._s(_vm.name)+\"s yet. \")])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeRecordsList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeRecordsList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChallengeRecordsList.vue?vue&type=template&id=525410ca&\"\nimport script from \"./ChallengeRecordsList.vue?vue&type=script&lang=js&\"\nexport * from \"./ChallengeRecordsList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeRecordsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeRecordsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChallengeRecordsTab.vue?vue&type=template&id=314ad9f6&\"\nimport script from \"./ChallengeRecordsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ChallengeRecordsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-teresa-celestial-tab\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"effarig\"}}),_c('div',{staticClass:\"l-effarig-shop-and-run\"},[_c('div',{staticClass:\"l-effarig-shop\"},[_c('div',{staticClass:\"c-effarig-relics\"},[_vm._v(\" You have \"+_vm._s(_vm.quantify(\"Relic Shard\", _vm.relicShards, 2, 0))+\". \"),_c('br'),(_vm.relicShardRarityAlwaysMax)?_c('span',[_vm._v(\" The rarity of new Glyphs is being increased by +\"+_vm._s(_vm.formatPercents(_vm.shardRarityBoost, 2))+\". \")]):_c('span',[_vm._v(\" Each new Glyph will have its rarity increased \"),_c('br'),_vm._v(\" by a random value between +\"+_vm._s(_vm.formatPercents(0))+\" and +\"+_vm._s(_vm.formatPercents(_vm.shardRarityBoost, 2))+\". \")]),(_vm.shardPower > 1)?_c('span',[_c('br'),_vm._v(\" Glyph Sacrifice gain is also being raised to \"+_vm._s(_vm.formatPow(_vm.shardPower, 0, 2))+\". \")]):_vm._e()]),_c('div',{staticClass:\"c-effarig-relic-description\"},[_vm._v(\" You will gain \"+_vm._s(_vm.quantify(\"Relic Shard\", _vm.shardsGained, 2))+\" next Reality (\"+_vm._s(_vm.format(_vm.currentShardsRate, 2))+\"/min). \"),(_vm.amplification !== 0)?_c('span',[_c('br'),_vm._v(\" Due to amplification of your current Reality, \"),_c('br'),_vm._v(\" you will actually gain a total of \"+_vm._s(_vm.quantify(\"Relic Shard\", _vm.amplifiedShards, 2))+\" (\"+_vm._s(_vm.format(_vm.amplifiedShardsRate, 2))+\"/min). \")]):_vm._e()]),_vm._m(0),_vm._l((_vm.shopUnlocks),function(unlock,i){return _c('EffarigUnlockButton',{key:i,attrs:{\"unlock\":unlock}})}),(!_vm.runUnlocked)?_c('EffarigUnlockButton',{attrs:{\"unlock\":_vm.runUnlock}}):_vm._e(),(_vm.vIsFlipped)?_c('button',{staticClass:\"c-effarig-shop-button c-effarig-shop-button--available\",on:{\"click\":_vm.createCursedGlyph}},[_vm._v(\" Get a Cursed Glyph... \")]):_vm._e()],2),(_vm.runUnlocked)?_c('div',{staticClass:\"l-effarig-run\"},[_c('div',{staticClass:\"c-effarig-run-description\"},[_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_vm._v(\" Enter Effarig's Reality. \")])]),_c('div',{class:_vm.runButtonOuterClass,on:{\"click\":_vm.startRun}},[_c('div',{class:_vm.runButtonInnerClass,attrs:{\"button-symbol\":_vm.symbol}},[_vm._v(\" \"+_vm._s(_vm.symbol)+\" \")])]),_c('div',{staticClass:\"c-effarig-run-description\"},[_vm._v(\" \"+_vm._s(_vm.runDescription)+\" \")]),_vm._l((_vm.runUnlocks),function(unlock,i){return _c('EffarigRunUnlockReward',{key:i,attrs:{\"unlock\":unlock}})})],2):_vm._e()])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-effarig-relic-description\"},[_c('br'),_vm._v(\" More Eternity Points slightly increases Relic Shards \"),_c('br'),_vm._v(\" gained. More distinct Glyph effects significantly \"),_c('br'),_vm._v(\" increases Relic Shards gained. \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isShown)?_c('button',{staticClass:\"c-celestial-quote-history--button\",style:({\n '--scoped-cel-color': _vm.color\n }),on:{\"click\":_vm.show}},[_vm._v(\" \"+_vm._s(_vm.possessiveForm)+\" Quotes \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteHistory.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteHistory.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialQuoteHistory.vue?vue&type=template&id=018e25f2&\"\nimport script from \"./CelestialQuoteHistory.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialQuoteHistory.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CelestialQuoteHistory.vue?vue&type=style&index=0&scope=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-effarig-tab__reward\"},[_c('div',{staticClass:\"c-effarig-tab__reward-label\"},[_vm._v(\" \"+_vm._s(_vm.unlock.config.label)+\": \")]),(_vm.isUnlocked)?_c('div',{staticClass:\"l-effarig-tab__reward-descriptions\"},_vm._l((_vm.descriptionLines),function(description,descriptionKey){return _c('div',{key:descriptionKey + '-effarig-reward-description',staticClass:\"c-effarig-tab__reward-description\"},[_c('span',{staticClass:\"c-effarig-tab__reward-symbol\"},[_vm._v(\" \"+_vm._s(_vm.symbol)+\" \")]),_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_vm._v(\" \"+_vm._s(description)+\" \")])])}),0):_c('span',{staticClass:\"c-effarig-tab__reward-symbol\"},[_vm._v(\"?\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffarigRunUnlockReward.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffarigRunUnlockReward.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EffarigRunUnlockReward.vue?vue&type=template&id=7ba5964f&\"\nimport script from \"./EffarigRunUnlockReward.vue?vue&type=script&lang=js&\"\nexport * from \"./EffarigRunUnlockReward.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:_vm.classObject,on:{\"click\":_vm.purchase}},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"name\":\"Relic Shard\",\"label\":\"\"}}):_c('div',[_vm._v(\" (Unlocked) \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffarigUnlockButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffarigUnlockButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EffarigUnlockButton.vue?vue&type=template&id=7f205610&\"\nimport script from \"./EffarigUnlockButton.vue?vue&type=script&lang=js&\"\nexport * from \"./EffarigUnlockButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffarigTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffarigTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EffarigTab.vue?vue&type=template&id=0883caed&scoped=true&\"\nimport script from \"./EffarigTab.vue?vue&type=script&lang=js&\"\nexport * from \"./EffarigTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EffarigTab.vue?vue&type=style&index=0&id=0883caed&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0883caed\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-enslaved-celestial-tab\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"enslaved\"}}),(_vm.hasAutoRelease && _vm.canAutoRelease)?_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Pulse Black Hole:\"},model:{value:(_vm.autoRelease),callback:function ($$v) {_vm.autoRelease=$$v},expression:\"autoRelease\"}})],1):_vm._e(),_c('div',{staticClass:\"l-enslaved-celestial-tab--inner\"},[_c('div',{staticClass:\"l-enslaved-run-container\"},[(_vm.hasUnlock(_vm.unlocksInfo.RUN))?_c('div',[_c('div',{staticClass:\"c-enslaved-run-button\"},[_c('div',{staticClass:\"c-enslaved-run-button__title\",class:_vm.doomedDisabledClass},[_vm._v(\" \"+_vm._s(_vm.realityTitle)+\" \")]),(_vm.completed)?_c('div',[_c('b',[_vm._v(\"(Completed)\")])]):_vm._e(),_c('div',{class:_vm.runButtonClassObject,on:{\"click\":_vm.startRun}},[_c('div',{staticClass:\"c-enslaved-run-button__icon__sigil\"},[_vm._v(\" \"+_vm._s(_vm.enslavedSymbol)+\" \")]),_vm._l(((_vm.isRunning ? 25 : 0)),function(x){return _c('div',{key:x,staticClass:\"c-enslaved-run-button__icon__glitch\",style:(_vm.glitchStyle(x))})})],2),_vm._l((_vm.runDescription),function(line){return _c('div',{key:line,staticClass:\"c-enslaved-run-description-line\"},[_vm._v(\" \"+_vm._s(line)+\" \")])}),_c('b',[_vm._v(\"Reward: Unlock Tesseracts, which let you increase Infinity Dimension caps (see Infinity Dimension tab)\")])],2)]):_vm._e()]),_c('div',{staticClass:\"l-enslaved-upgrades-column\"},[(_vm.hintsUnlocked)?_c('PrimaryButton',{staticClass:\"o-primary-btn\",attrs:{\"onclick\":\"Modal.enslavedHints.show()\"}},[_vm._v(\" Examine the Reality more closely... \")]):_vm._e(),_c('div',{staticClass:\"l-enslaved-top-container\"},[_c('div',{staticClass:\"l-enslaved-top-container__half\"},[_vm._v(\" While charging, game speed multipliers are \"+_vm._s(_vm.hasAutoRelease ? \"decreased\" : \"disabled\")+\", and the lost speed is converted into stored game time. Discharging the Black Hole allows you to skip forward in time. Stored game time is also used to unlock certain upgrades. \"),_c('button',{class:_vm.storeGameTimeClass,on:{\"click\":_vm.toggleStoreBlackHole}},[_c('div',{staticClass:\"o-enslaved-stored-time\",class:_vm.doomedDisabledClass},[_vm._v(\" \"+_vm._s(_vm.timeDisplayShort(_vm.storedBlackHole))+\" \")]),_c('div',[_vm._v(\" \"+_vm._s(_vm.isStoringBlackHole ? \"Charging Black Hole\": \"Charge Black Hole\")+\" \")])]),_c('button',{class:_vm.dischargeClass,on:{\"click\":_vm.useStored}},[_c('span',[_vm._v(\"Discharge Black Hole\")]),(_vm.isRunning)?_c('p',[_vm._v(\" \"+_vm._s(_vm.timeDisplayShort(_vm.nerfedBlackHoleTime))+\" in this Reality \")]):_vm._e()])]),_c('div',{staticClass:\"l-enslaved-top-container__half\"},[_vm._v(\" Storing real time completely halts all production, setting game speed to \"+_vm._s(_vm.formatInt(0))+\". You can use stored real time to \\\"amplify\\\" a Reality, simulating repeated runs of it. Amplified Realities give all the rewards that normal Realities do. \"),_c('button',{class:[_vm.storeRealTimeClass,\n {'l-fixed-setting': _vm.hasReachedCurrentCap}],on:{\"click\":_vm.toggleStoreReal}},[_c('div',{staticClass:\"o-enslaved-stored-time\"},[_vm._v(\" \"+_vm._s(_vm.timeDisplayShort(_vm.storedReal))+\" \")]),_c('div',[_vm._v(\" \"+_vm._s(_vm.isStoringReal ? \"Storing real time\": \"Store real time\")+\" \")])]),_c('button',{class:[_vm.mechanicButtonClass,\n {'o-enslaved-mechanic-button--storing-time': _vm.autoStoreReal && _vm.offlineEnabled,\n 'l-fixed-setting': !_vm.canChangeStoreRealTime || !_vm.offlineEnabled},\n _vm.doomedDisabledClass],on:{\"click\":_vm.toggleAutoStoreReal}},[_vm._v(\" \"+_vm._s(_vm.realTimeButtonText)+\" \")]),_c('div',[_vm._v(\" Efficiency: \"+_vm._s(_vm.storedRealEfficiencyDesc)+\" \")]),_c('div',[_vm._v(\" Maximum stored real time: \"+_vm._s(_vm.storedRealCapDesc)+\" \")])])]),_c('BlackHoleChargingSliders'),_c('br'),_c('div',{staticClass:\"l-enslaved-shop-container\"},_vm._l((_vm.unlocksInfo),function(unlock){return _c('button',{key:unlock.id,staticClass:\"o-enslaved-shop-button\",class:_vm.unlockClassObject(unlock),on:{\"click\":function($event){return _vm.buyUnlock(unlock)}}},[_vm._v(\" \"+_vm._s(unlock.description())+\" \"),(!_vm.hasUnlock(unlock))?_c('div',[_vm._v(\" Costs: \"+_vm._s(_vm.timeDisplayShort(unlock.price))+\" \")]):_vm._e(),(_vm.isStoringBlackHole && !_vm.hasUnlock(unlock) && _vm.timeUntilBuy(unlock.price).gt(0))?_c('span',[_vm._v(\" Time to obtain: \"+_vm._s(_vm.timeDisplayShort(_vm.timeUntilBuy(unlock.price)))+\" \")]):_vm._e()])}),0)],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnslavedTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnslavedTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnslavedTab.vue?vue&type=template&id=53895748&scoped=true&\"\nimport script from \"./EnslavedTab.vue?vue&type=script&lang=js&\"\nexport * from \"./EnslavedTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EnslavedTab.vue?vue&type=style&index=0&id=53895748&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"53895748\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-challenges-tab\"},[_c('ChallengeTabHeader'),(_vm.isAutoECVisible)?_c('div',[_vm._v(\" Eternity Challenges are automatically completed sequentially, requiring all previous Eternity Challenges to be fully completed before any progress is made. \")]):_vm._e(),(_vm.isAutoECVisible && _vm.remainingECTiers > 0)?_c('div',{staticClass:\"c-challenges-tab__auto-ec-info l-challenges-tab__auto-ec-info\"},[_c('div',{staticClass:\"l-challenges-tab__auto-ec-timers\"},[(_vm.remainingECTiers > 0)?_c('span',[_vm._v(\" Next Auto Eternity Challenge completion: \"+_vm._s(_vm.nextECText)+\" \")]):_vm._e(),_c('span',[_vm._v(\" All Auto Eternity Challenge completions: \"+_vm._s(_vm.allECText)+\" \")]),_c('br')])]):_vm._e(),_c('div',[_vm._v(\" Complete Eternity Challenges again for a bigger reward, maximum of \"+_vm._s(_vm.formatInt(5))+\" times.\"),_c('br'),_vm._v(\" The rewards are applied permanently with no need to have the respective Eternity Challenge Time Study purchased. \")]),(!_vm.hasECR)?_c('div',[_vm._v(\" When you respec out of an unlocked Eternity Challenge, you don't need to redo the secondary requirement\"),_c('br'),_vm._v(\" in order to unlock it again until you complete it; only the Time Theorems are required. \")]):_vm._e(),(_vm.unlockedCount !== 12)?_c('div',[_vm._v(\" You have seen \"+_vm._s(_vm.formatInt(_vm.unlockedCount))+\" out of \"+_vm._s(_vm.formatInt(12))+\" Eternity Challenges. \")]):_c('div',[_vm._v(\" You have seen all \"+_vm._s(_vm.formatInt(12))+\" Eternity Challenges. \")]),_c('ChallengeGrid',{attrs:{\"challenges\":_vm.challenges,\"is-challenge-visible\":_vm.isChallengeVisible},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar challenge = ref.challenge;\nreturn [_c('EternityChallengeBox',{attrs:{\"challenge\":challenge}})]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-challenge-grid\"},_vm._l((_vm.challenges),function(challenge){return _c('ChallengeGridCell',{key:challenge.id,attrs:{\"challenge\":challenge,\"is-challenge-visible\":_vm.isChallengeVisible}},[_vm._t(\"default\",null,{\"challenge\":challenge})],2)}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isVisible),expression:\"isVisible\"}],staticClass:\"l-challenge-grid__cell\"},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeGridCell.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeGridCell.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChallengeGridCell.vue?vue&type=template&id=4d8a00e8&scoped=true&\"\nimport script from \"./ChallengeGridCell.vue?vue&type=script&lang=js&\"\nexport * from \"./ChallengeGridCell.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d8a00e8\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeGrid.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeGrid.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChallengeGrid.vue?vue&type=template&id=1cfb349c&scoped=true&\"\nimport script from \"./ChallengeGrid.vue?vue&type=script&lang=js&\"\nexport * from \"./ChallengeGrid.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1cfb349c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-challenges-tab__header\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Automatically retry challenges:\"},model:{value:(_vm.retryChallenge),callback:function ($$v) {_vm.retryChallenge=$$v},expression:\"retryChallenge\"}}),(_vm.isShowAllVisible)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Show all known challenges:\"},model:{value:(_vm.showAllChallenges),callback:function ($$v) {_vm.showAllChallenges=$$v},expression:\"showAllChallenges\"}}):_vm._e(),(_vm.isAutoECVisible)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Auto Eternity Challenges:\"},model:{value:(_vm.autoEC),callback:function ($$v) {_vm.autoEC=$$v},expression:\"autoEC\"}}):_vm._e(),(_vm.isInChallenge)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.restartChallenge}},[_vm._v(\" Restart Challenge \")]):_vm._e(),(_vm.isInChallenge)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.exitChallenge}},[_vm._v(\" Exit Challenge \")]):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeTabHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeTabHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChallengeTabHeader.vue?vue&type=template&id=3ae13d7d&scoped=true&\"\nimport script from \"./ChallengeTabHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./ChallengeTabHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3ae13d7d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('EternityChallengeBoxWrapper',{attrs:{\"name\":_vm.name,\"is-unlocked\":_vm.isUnlocked,\"is-running\":_vm.isRunning,\"is-completed\":_vm.isCompleted,\"can-be-unlocked\":_vm.canBeUnlocked,\"completion-count\":_vm.completions},on:{\"start\":_vm.start},scopedSlots:_vm._u([{key:\"top\",fn:function(){return [_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}})]},proxy:true},{key:\"bottom\",fn:function(){return [_c('div',{style:({ visiblity: _vm.completions < 5 ? 'visible' : 'hidden' })},[_c('div',[_vm._v(\" Completed \"+_vm._s(_vm.quantifyInt(\"time\", _vm.completions))+\" \")]),_vm._v(\" \"+_vm._s(_vm.goalDisplay)+\" \")]),(_vm.showGoalSpan)?_c('span',[_vm._v(\" Goal Span: \"+_vm._s(_vm.firstGoal)+\" IP - \"+_vm._s(_vm.lastGoal)+\" IP \")]):_vm._e(),_c('span',[_vm._v(\" Reward: \"),_c('DescriptionDisplay',{attrs:{\"config\":_vm.config.reward,\"length\":55,\"name\":\"c-challenge-box__reward-description\"}})],1),_c('span',[(_vm.completions > 0)?_c('EffectDisplay',{attrs:{\"config\":_vm.currentRewardConfig}}):_vm._e(),(_vm.completions > 0 && _vm.completions < 5)?_c('span',[_vm._v(\"|\")]):_vm._e(),(_vm.completions < 5)?_c('EffectDisplay',{attrs:{\"config\":_vm.nextRewardConfig,\"label\":\"Next\",\"ignore-capped\":true}}):_vm._e()],1),(_vm.altRewards)?_c('span',{staticClass:\"c-vreward\"},[_vm._v(\" Ra V 30 Empowered Reward: \"),_c('DescriptionDisplay',{attrs:{\"config\":_vm.config.vReward,\"length\":55,\"name\":\"c-challenge-box__reward-description\"}})],1):_vm._e(),_c('span',[(_vm.completions > 0)?_c('EffectDisplay',{attrs:{\"config\":_vm.currentVRewardConfig}}):_vm._e(),(_vm.completions > 0 && _vm.completions < 5)?_c('span',[_vm._v(\"|\")]):_vm._e(),(_vm.completions < 5)?_c('EffectDisplay',{attrs:{\"config\":_vm.nextVRewardConfig,\"label\":\"Next\",\"ignore-capped\":true}}):_vm._e()],1)]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-challenge-box l-challenge-box c-challenge-box--eternity\"},[_c('HintText',{staticClass:\"l-hint-text--challenge\",attrs:{\"type\":\"challenges\"}},[_vm._v(\" \"+_vm._s(_vm.name)+\" \")]),_vm._t(\"top\"),_c('div',{staticClass:\"l-challenge-box__fill\"}),_c('div',[_c('div',{style:(_vm.completionOverlay)}),_c('button',{class:_vm.buttonClassObject,on:{\"click\":function($event){return _vm.$emit('start')}}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \")])]),_vm._t(\"bottom\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengeBoxWrapper.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengeBoxWrapper.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityChallengeBoxWrapper.vue?vue&type=template&id=4d90efa2&scoped=true&\"\nimport script from \"./EternityChallengeBoxWrapper.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityChallengeBoxWrapper.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d90efa2\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengeBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengeBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityChallengeBox.vue?vue&type=template&id=096be0c2&scoped=true&\"\nimport script from \"./EternityChallengeBox.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityChallengeBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EternityChallengeBox.vue?vue&type=style&index=0&id=096be0c2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"096be0c2\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityChallengesTab.vue?vue&type=template&id=ada246ca&scoped=true&\"\nimport script from \"./EternityChallengesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityChallengesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ada246ca\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-eternity-milestone-grid\"},[_c('div',[_vm._v(\"You have \"+_vm._s(_vm.quantify(\"Eternity\", _vm.eternityCount, 3))+\".\")]),_c('div',[_vm._v(\" Offline generation milestones are only active under certain conditions, mouse-over to see these conditions. \")]),_vm._l((_vm.rows),function(row){return _c('div',{key:row,staticClass:\"l-eternity-milestone-grid__row\"},_vm._l((3),function(column){return _c('EternityMilestoneButton',{key:row * 3 + column,staticClass:\"l-eternity-milestone-grid__cell\",attrs:{\"get-milestone\":_vm.getMilestone(row, column)}})}),1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.config.invisible)?_c('div',{staticClass:\"l-eternity-milestone\"},[_c('span',{staticClass:\"o-eternity-milestone__goal\"},[_vm._v(\" \"+_vm._s(_vm.quantifyInt(\"Eternity\", _vm.eternities))+\": \")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.activeCondition),expression:\"activeCondition\"}],class:_vm.rewardClassObject},[_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_vm._v(\" \"+_vm._s(_vm.reward)+\" \"+_vm._s((_vm.isLocked && !_vm.isReached) ? \"(Locked behind a Pelle Upgrade)\" : \"\")+\" \")])])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityMilestoneButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityMilestoneButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityMilestoneButton.vue?vue&type=template&id=7cb7f407&scoped=true&\"\nimport script from \"./EternityMilestoneButton.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityMilestoneButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7cb7f407\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityMilestonesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityMilestonesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityMilestonesTab.vue?vue&type=template&id=3165bf56&scoped=true&\"\nimport script from \"./EternityMilestonesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityMilestonesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3165bf56\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-eternity-upgrades-grid\"},[_vm._l((_vm.grid),function(row,i){return _c('div',{key:i,staticClass:\"l-eternity-upgrades-grid__row\"},_vm._l((row),function(upgrade){return _c('EternityUpgradeButton',{key:upgrade.id,staticClass:\"l-eternity-upgrades-grid__cell\",attrs:{\"upgrade\":upgrade}})}),1)}),_c('EPMultiplierButton'),_c('div',[_vm._v(\" The cost for the \"+_vm._s(_vm.formatX(5))+\" multiplier jumps at \"+_vm._s(_vm.format(_vm.costIncreases[0]))+\", \"+_vm._s(_vm.formatPostBreak(_vm.costIncreases[1], 2))+\", and \"+_vm._s(_vm.formatPostBreak(_vm.costIncreases[2]))+\" Eternity Points. \"),_c('br'),_vm._v(\" The cost increases super-exponentially after \"+_vm._s(_vm.formatPostBreak(_vm.costIncreases[3]))+\" Eternity Points. \"),_c('br'),_vm._v(\" The Eternity Point multiplier cannot be purchased past \"+_vm._s(_vm.format(5e8))+\" purchases. \")])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group l-margin-top\"},[_c('button',{class:_vm.classObject,on:{\"click\":_vm.purchaseUpgrade}},[(_vm.isActiveInDoom)?_c('div',[_vm._v(\" Multiply Eternity Points from all sources by \"+_vm._s(_vm.formatX(1.5, 1, 1))+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.effectLabel)+\" \"+_vm._s(_vm.formatX(_vm.multiplier, 2, 1))+\" \")]):_c('div',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_vm._v(\" Multiply Eternity Points from all sources by \"+_vm._s(_vm.formatX(5))+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.effectLabel)+\" \"+_vm._s(_vm.formatX(_vm.multiplier, 2, 0))+\" \")]),(!_vm.isCapped)?[_c('br'),_vm._v(\" Cost: \"+_vm._s(_vm.quantify(\"Eternity Point\", _vm.cost, 2, 0))+\" \")]:_vm._e(),(_vm.isCapped)?[_c('span',[_vm._v(\"(Capped at \"+_vm._s(_vm.quantify(\"purchase\", _vm.upgrade.purchaseCap))+\")\")])]:_vm._e()],2),_c('PrimaryButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--small-spoon\",on:{\"click\":function($event){return _vm.upgrade.buyMax(false)}}},[_vm._v(\" Max Eternity Point mult \")]),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--small-spoon\",attrs:{\"label\":\"Autobuy EP mult\"},model:{value:(_vm.isAutobuyerActive),callback:function ($$v) {_vm.isAutobuyerActive=$$v},expression:\"isAutobuyerActive\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EPMultiplierButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EPMultiplierButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EPMultiplierButton.vue?vue&type=template&id=59fdf668&scoped=true&\"\nimport script from \"./EPMultiplierButton.vue?vue&type=script&lang=js&\"\nexport * from \"./EPMultiplierButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EPMultiplierButton.vue?vue&type=style&index=0&id=59fdf668&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"59fdf668\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:_vm.classObject,on:{\"click\":function($event){return _vm.upgrade.purchase()}}},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.upgrade.config}}),_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.upgrade.config}}),(!_vm.isBought && _vm.hasEU2)?_c('div',[_vm._v(\" Auto: \"+_vm._s(_vm.format(_vm.upgrade.config.cost / 1e10))+\" Eternity Points \")]):(!_vm.isBought)?_c('CostDisplay',{attrs:{\"br\":\"\",\"config\":_vm.upgrade.config,\"name\":\"Eternity Point\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityUpgradeButton.vue?vue&type=template&id=0b4344ef&scoped=true&\"\nimport script from \"./EternityUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b4344ef\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityUpgradesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityUpgradesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityUpgradesTab.vue?vue&type=template&id=5b2e66da&scoped=true&\"\nimport script from \"./EternityUpgradesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityUpgradesTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EternityUpgradesTab.vue?vue&type=style&index=0&id=5b2e66da&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5b2e66da\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-glyph-set-tab\"},_vm._l((_vm.recordGlyphInfo),function(set,idx){return _c('div',{key:idx},[(set[0])?_c('div',{staticClass:\"l-glyph-set-entry\"},[_vm._v(\" \"+_vm._s(set[2])+\": \"),(set[0])?_c('GlyphSetPreview',{key:idx,attrs:{\"glyphs\":set[1],\"text\":set[2],\"text-hidden\":true}}):_vm._e(),_vm._v(\" \"+_vm._s(set[3])+\" \"),_c('br')],1):_vm._e()])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.text && !_vm.textHidden)?_c('span',[_vm._v(\" \"+_vm._s(_vm.text)+\" \"),_c('br')]):_vm._e(),(_vm.glyphs.length !== 0)?_c('span',{class:{ 'l-glyph-set-preview': !_vm.isInModal},on:{\"click\":_vm.showModal}},[(_vm.showName)?_c('GlyphSetName',{key:_vm.glyphHash(),attrs:{\"glyph-set\":_vm.glyphs,\"force-color\":_vm.forceNameColor}}):_vm._e(),_vm._l((_vm.orderedGlyphs),function(g,idx){return _c('GlyphComponent',{key:idx,staticClass:\"l-preview\",attrs:{\"glyph\":g,\"show-sacrifice\":_vm.showSacrifice,\"draggable\":false,\"circular\":true,\"ignore-modified-level\":_vm.ignoreModifiedLevel,\"reality-glyph-boost\":_vm.realityGlyphBoost,\"flip-tooltip\":_vm.flipTooltip,\"is-in-modal\":_vm.isInModal,\"size\":\"3rem\",\"text-proportion\":0.5,\"glow-blur\":\"0.2rem\",\"glow-spread\":\"0.1rem\"}})})],2):_c('span',[(_vm.showName)?_c('GlyphSetName',{attrs:{\"glyph-set\":_vm.glyphs,\"force-color\":_vm.forceNameColor}}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.noneText)+\" \")],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._g({class:['l-glyph-component', {'c-glyph-component--dragging': _vm.isDragging}],style:(_vm.outerStyle),attrs:{\"draggable\":_vm.draggable}},_vm.draggable ? { dragstart: _vm.dragStart, dragend: _vm.dragEnd, drag: _vm.drag } : {}),[_c('div',{ref:\"glyph\",class:['l-glyph-component', 'c-glyph-component'],style:(_vm.innerStyle)},[_vm._v(\" \"+_vm._s(_vm.symbol)+\" \"),(_vm.$viewModel.shiftDown || _vm.showGlyphEffectDots)?_vm._l((_vm.glyphEffects),function(x){return _c('div',{key:x,style:(_vm.glyphEffectDots(x))})}):_vm._e()],2),_c('div',{style:(_vm.glyphBorderStyle())}),(_vm.hasTooltip && _vm.tooltipLoaded)?_c('GlyphTooltip',_vm._b({directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isCurrentTooltip),expression:\"isCurrentTooltip\"}],ref:\"tooltip\",class:_vm.tooltipDirectionClass,style:(_vm.zIndexStyle),attrs:{\"sacrifice-reward\":_vm.sacrificeReward,\"refine-reward\":_vm.refineReward,\"uncapped-refine-reward\":_vm.uncappedRefineReward,\"current-action\":_vm.currentAction,\"score-mode\":_vm.scoreMode,\"show-deletion-text\":_vm.showSacrifice,\"display-level\":_vm.displayLevel,\"component\":_vm.componentID,\"change-watcher\":_vm.logTotalSacrifice}},'GlyphTooltip',_vm.glyph,false)):_vm._e(),(_vm.isNew)?_c('div',{staticClass:\"l-corner-icon l-new-glyph\"},[_vm._v(\" New! \")]):(_vm.isUnequipped)?_c('div',{staticClass:\"l-corner-icon l-unequipped-glyph fas fa-arrow-up-from-bracket\"}):_vm._e(),(_vm.displayedInfo)?_c('div',{staticClass:\"l-glyph-info\"},[_vm._v(\" \"+_vm._s(_vm.displayedInfo)+\" \")]):_vm._e(),_c('div',_vm._g({ref:\"over\",style:(_vm.overStyle),on:{\"click\":[function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.$emit('shiftClicked', _vm.glyph.id)},function($event){if(!$event.ctrlKey){ return null; }if(!$event.shiftKey){ return null; }if($event.altKey||$event.metaKey){ return null; }return _vm.$emit('ctrlShiftClicked', _vm.glyph.id)},function($event){if(!$event.metaKey){ return null; }if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey){ return null; }return _vm.$emit('ctrlShiftClicked', _vm.glyph.id)},function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.$emit('clicked', _vm.glyph.id)}]}},_vm.mouseEventHandlers))],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._g({staticClass:\"l-glyph-tooltip c-glyph-tooltip\",style:(_vm.glyphTooltipStyle)},_vm.eventHandlers),[_c('div',{staticClass:\"c-glyph-tooltip__header\",style:(_vm.glyphHeaderStyle)},[_c('span',{staticClass:\"c-glyph-tooltip__description\",style:(_vm.descriptionStyle),domProps:{\"innerHTML\":_vm._s(_vm.description)}}),_c('span',{staticClass:\"l-glyph-tooltip__info\"},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.levelText)}}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.rarityText)}})]),(_vm.showDeletionText)?_c('span',[_c('span',_vm._g({staticClass:\"c-glyph-tooltip__sacrifice\"},_vm.onTouchDevice ? { click: _vm.removeGlyph } : {}),[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.sacrificeText())}}),(_vm.sacrificeText() && _vm.refineText())?_c('span',[_vm._v(\" | \")]):_vm._e(),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.refineText())}})])]):_vm._e(),_c('span',{staticClass:\"c-glyph-tooltip__sacrifice\"},[_vm._v(_vm._s(_vm.scoreText()))])]),_c('div',{staticClass:\"l-glyph-tooltip__effects\"},[_vm._l((_vm.sortedEffects),function(e){return _c('GlyphTooltipEffect',{key:e.id + _vm.changeWatcher,attrs:{\"effect\":e.id,\"value\":e.value}})}),(_vm.showChaosText)?_c('div',{staticClass:\"pelle-current-glyph-effects c-glyph-tooltip__effect\"},[_vm._v(\" \"+_vm._s(_vm.chaosDescription)+\" \")]):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-glyph-tooltip__effect\",class:{ 'o-pelle-disabled': _vm.isPelleDisabled }},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.convertedParts[0])}}),(_vm.hasValue)?_c('span',{style:(_vm.valueStyle)},[_vm._v(_vm._s(_vm.primaryEffectText))]):_vm._e(),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.convertedParts[1])}}),(_vm.hasSecondaryValue)?_c('span',{style:(_vm.valueStyle)},[_vm._v(_vm._s(_vm.secondaryEffectText))]):_vm._e(),(_vm.hasSecondaryValue)?_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.convertedParts[2])}}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphTooltipEffect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphTooltipEffect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphTooltipEffect.vue?vue&type=template&id=7c7b3f70&\"\nimport script from \"./GlyphTooltipEffect.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphTooltipEffect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphTooltip.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphTooltip.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphTooltip.vue?vue&type=template&id=0072d0ca&scoped=true&\"\nimport script from \"./GlyphTooltip.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphTooltip.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphTooltip.vue?vue&type=style&index=0&id=0072d0ca&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0072d0ca\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphComponent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphComponent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphComponent.vue?vue&type=template&id=6bf85a79&scoped=true&\"\nimport script from \"./GlyphComponent.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphComponent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphComponent.vue?vue&type=style&index=0&id=6bf85a79&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6bf85a79\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('span',{staticClass:\"c-current-glyph-effects__header\",style:(_vm.textStyle)},[_vm._v(\" \"+_vm._s(_vm.setName)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetName.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetName.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphSetName.vue?vue&type=template&id=3f296f46&\"\nimport script from \"./GlyphSetName.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphSetName.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetPreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetPreview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphSetPreview.vue?vue&type=template&id=182ff48c&scoped=true&\"\nimport script from \"./GlyphSetPreview.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphSetPreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphSetPreview.vue?vue&type=style&index=0&id=182ff48c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"182ff48c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetRecordsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetRecordsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphSetRecordsTab.vue?vue&type=template&id=133e8d46&\"\nimport script from \"./GlyphSetRecordsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphSetRecordsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"l-glyphs-tab\"},[_c('div',{staticClass:\"l-reality-button-column\"},[_c('GlyphPeek'),(_vm.resetRealityDisplayed)?_c('div',{staticClass:\"l-reality-button-group\"},[(!_vm.isInCelestialReality)?_c('RealityAmplifyButton',{class:_vm.buttonGroupClass()}):_vm._e(),_c('ResetRealityButton',{class:_vm.buttonGroupClass()})],1):_vm._e(),(_vm.isInCelestialReality)?_c('div',{staticClass:\"l-celestial-auto-restart-checkbox\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.autoRestartCelestialRuns),expression:\"autoRestartCelestialRuns\"}],staticClass:\"o-clickable\",attrs:{\"id\":\"autoRestart\",\"type\":\"checkbox\"},domProps:{\"value\":_vm.autoRestartCelestialRuns,\"checked\":Array.isArray(_vm.autoRestartCelestialRuns)?_vm._i(_vm.autoRestartCelestialRuns,_vm.autoRestartCelestialRuns)>-1:(_vm.autoRestartCelestialRuns)},on:{\"input\":function($event){return _vm.toggleAutoRestartCelestial()},\"change\":function($event){var $$a=_vm.autoRestartCelestialRuns,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=_vm.autoRestartCelestialRuns,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.autoRestartCelestialRuns=$$a.concat([$$v]))}else{$$i>-1&&(_vm.autoRestartCelestialRuns=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.autoRestartCelestialRuns=$$c}}}}),_c('label',{staticClass:\"o-clickable\",attrs:{\"for\":\"autoRestart\"}},[_vm._v(\" Repeat this Celestial's Reality \")])]):_vm._e(),_c('br'),_c('RealityReminder'),(_vm.showInstability)?_c('div',[_c('br'),_vm._v(\" Glyphs are becoming unstable. \"),_c('br'),_vm._v(\" Glyph levels higher than \"+_vm._s(_vm.formatInt(_vm.instabilityThreshold))+\" are harder to reach. \"),_c('br'),_vm._v(\" This effect is even stronger above level \"+_vm._s(_vm.formatInt(_vm.hyperInstabilityThreshold))+\". \"),_c('br'),_vm._v(\" Glyphs are \"),_c('i',[_vm._v(\"harshly\")]),_vm._v(\" unstable past level \"+_vm._s(_vm.formatInt(_vm.ultraInstabilityThreshold))+\". \"),_c('br'),_vm._v(\" Glyphs become so unstable at level \"+_vm._s(_vm.formatInt(1e5))+\" that it is near impossible to go higher. \")]):_vm._e(),_c('SingleGlyphCustomzationPanel'),_c('ExpandingControlBox',{staticClass:\"l-glyph-level-factors\",attrs:{\"width-source\":\"content\",\"label\":\"Glyph Level Factors\",\"container-class\":\"c-glyph-level-factors-dropdown-header\"},scopedSlots:_vm._u([{key:\"dropdown\",fn:function(){return [_c('GlyphLevelsAndWeights')]},proxy:true}])}),_c('GlyphTabSidebar')],1),_c('div',{staticClass:\"l-player-glyphs-column\"},[(_vm.showEnslavedHint)?_c('div',{staticClass:\"o-teresa-quotes\",domProps:{\"innerHTML\":_vm._s(_vm.enslavedHint)}}):_vm._e(),_c('div',{staticClass:\"l-equipped-glyphs-and-effects-container\"},[_c('EquippedGlyphs'),_c('div',{staticClass:\"l-glyph-info-wrapper\"},[_c('span',{staticClass:\"l-glyph-color-box\",on:{\"click\":_vm.toggleGlyphTextColors}},[_c('div',{class:_vm.glyphColorPosition()},[_c('label',{class:_vm.glyphColorState},[_c('span',{staticClass:\"fas fa-palette\"})])])]),(_vm.sacrificeUnlocked)?_c('div',{staticClass:\"c-glyph-info-options\"},[_c('button',{class:_vm.glyphInfoClass(!_vm.sacrificeDisplayed),on:{\"click\":function($event){return _vm.setInfoState(false)}}},[_vm._v(\" Current Glyph effects \")]),_c('button',{class:_vm.glyphInfoClass(_vm.sacrificeDisplayed),on:{\"click\":function($event){return _vm.setInfoState(true)}}},[_vm._v(\" Glyph Sacrifice totals \")])]):_vm._e(),(_vm.sacrificeUnlocked && _vm.sacrificeDisplayed)?_c('SacrificedGlyphs'):_c('CurrentGlyphEffects',{class:_vm.glyphInfoBorderClass()})],1)],1),_c('GlyphInventory')],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-current-glyph-effects l-current-glyph-effects\"},[_c('div',{staticClass:\"pelle-current-glyph-effects\"},[_vm._v(\" \"+_vm._s(_vm.pelleGlyphText)+\" \")]),_c('div',{staticClass:\"c-current-glyph-effects__header\"},[_vm._v(\" Currently active Glyph effects: \")]),_c('GlyphSetName',{attrs:{\"glyph-set\":_vm.glyphSet}}),(_vm.isSoftcapActive || _vm.hasEffarig || _vm.hasReality)?_c('br'):_vm._e(),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.uniqueGlyphText)}}),(_vm.isSoftcapActive)?_c('div',{staticClass:\"l-current-glyph-effects__capped-header\"},[_c('span',{staticClass:\"c-current-glyph-effects__effect--capped\"},[_vm._v(\"Italic\")]),_vm._v(\" effects have been slightly reduced due to a softcap \")]):_vm._e(),_c('br'),(_vm.noEffects)?_c('div',[_vm._v(\" None (equip Glyphs to get their effects) \")]):_vm._e(),_vm._l((_vm.effects),function(effect){return _c('CurrentGlyphEffect',{key:effect.id + _vm.logTotalSacrifice,attrs:{\"effect\":effect,\"is-colored\":_vm.isColored}})}),(_vm.showChaosText)?_c('div',{staticClass:\"pelle-current-glyph-effects\"},[_vm._v(\" \"+_vm._s(_vm.chaosEffect)+\" \")]):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('span',{class:_vm.valueClass,style:(_vm.textColor)},[_vm._v(\" \"+_vm._s(_vm.formatValue)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CurrentGlyphEffect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CurrentGlyphEffect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CurrentGlyphEffect.vue?vue&type=template&id=731ba6a4&scoped=true&\"\nimport script from \"./CurrentGlyphEffect.vue?vue&type=script&lang=js&\"\nexport * from \"./CurrentGlyphEffect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"731ba6a4\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CurrentGlyphEffects.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CurrentGlyphEffects.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CurrentGlyphEffects.vue?vue&type=template&id=37e90415&scoped=true&\"\nimport script from \"./CurrentGlyphEffects.vue?vue&type=script&lang=js&\"\nexport * from \"./CurrentGlyphEffects.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"37e90415\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-equipped-glyphs\"},[_c('div',{staticClass:\"l-equipped-glyphs__slots\"},_vm._l((_vm.glyphs),function(glyph,idx){return _c('div',_vm._g({key:idx,staticClass:\"l-glyph-set-preview\",style:(_vm.glyphPositionStyle(idx)),on:{\"click\":_vm.showEquippedModal}},_vm.dragEvents(idx)),[_c('div',{staticClass:\"l-equipped-glyphs__dropzone\"}),(glyph)?_c('GlyphComponent',{key:idx,staticClass:\"c-equipped-glyph\",attrs:{\"glyph\":glyph,\"circular\":true,\"is-active-glyph\":true},on:{\"clicked\":function($event){return _vm.clickGlyph(glyph, idx)},\"shiftClicked\":function($event){return _vm.clickGlyph(glyph, idx, true)},\"ctrlShiftClicked\":function($event){return _vm.clickGlyph(glyph, idx, true)}}}):_c('div',{class:['l-equipped-glyphs__empty', 'c-equipped-glyphs__empty',\n {'c-equipped-glyphs__empty--dragover': _vm.dragoverIndex === idx}]})],1)}),0),_c('div',{staticClass:\"l-equipped-glyphs__buttons\"},[_c('button',{staticClass:\"c-reality-upgrade-btn\",class:_vm.unequipClass,style:(_vm.glyphRespecStyle),attrs:{\"ach-tooltip\":_vm.respecTooltip},on:{\"click\":_vm.toggleRespec}},[_vm._v(\" \"+_vm._s(_vm.unequipText)+\" \")]),(_vm.undoVisible)?_c('button',{staticClass:\"l-glyph-equip-button c-reality-upgrade-btn\",class:{'c-reality-upgrade-btn--unavailable': !_vm.undoAvailable},attrs:{\"ach-tooltip\":_vm.undoTooltip},on:{\"click\":_vm.undo}},[_vm._m(0)]):_vm._e(),_c('button',{staticClass:\"l-glyph-equip-button c-reality-upgrade-btn\",on:{\"click\":_vm.toggleRespecIntoProtected}},[_vm._v(\" Unequip Glyphs to: \"),_c('br'),(_vm.respecIntoProtected)?_c('span',[_vm._v(\"Protected slots\")]):_c('span',[_vm._v(\"Main inventory\")])]),_c('button',{staticClass:\"l-glyph-equip-button-short c-reality-upgrade-btn\",class:{'tutorial--glow': _vm.cosmeticGlow},on:{\"click\":_vm.showOptionModal}},[_vm._v(\" Open Glyph Visual Options \")])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_vm._v(\"Rewind to \"),_c('b',[_vm._v(\"undo\")]),_vm._v(\" the last equipped Glyph\")])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EquippedGlyphs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EquippedGlyphs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EquippedGlyphs.vue?vue&type=template&id=1a7f95d2&scoped=true&\"\nimport script from \"./EquippedGlyphs.vue?vue&type=script&lang=js&\"\nexport * from \"./EquippedGlyphs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EquippedGlyphs.vue?vue&type=style&index=0&id=1a7f95d2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1a7f95d2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-glyph-inventory\"},[_vm._v(\" Click and drag or double-click to equip Glyphs. \"),_vm._l((_vm.rowCount),function(row){return _c('div',{key:_vm.protectedRows + row,staticClass:\"l-glyph-inventory__row\"},_vm._l((_vm.colCount),function(col){return _c('div',{key:col,staticClass:\"l-glyph-inventory__slot\",class:_vm.slotClass(_vm.toIndex(row, col)),on:{\"dragover\":_vm.allowDrag,\"drop\":function($event){_vm.drop(_vm.toIndex(row, col), $event)}}},[(_vm.inventory[_vm.toIndex(row, col)])?_c('GlyphComponent',{attrs:{\"glyph\":_vm.inventory[_vm.toIndex(row, col)],\"is-new\":_vm.isNew(_vm.toIndex(row, col)),\"is-unequipped\":_vm.isUnequipped(_vm.toIndex(row, col)),\"is-inventory-glyph\":true,\"show-sacrifice\":_vm.glyphSacrificeUnlocked,\"draggable\":true},on:{\"shiftClicked\":function($event){return _vm.removeGlyph($event, false)},\"ctrlShiftClicked\":function($event){return _vm.removeGlyph($event, true)},\"clicked\":function($event){return _vm.clickGlyph(col, $event)}}}):_vm._e()],1)}),0)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphInventory.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphInventory.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphInventory.vue?vue&type=template&id=cf494c5c&scoped=true&\"\nimport script from \"./GlyphInventory.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphInventory.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cf494c5c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"grid\",staticClass:\"l-glyph-levels-and-weights c-glyph-levels-and-weights\",style:(_vm.gridStyle)},[(_vm.adjustVisible)?_c('div',{style:(_vm.makeRowStyle(6))}):_vm._e(),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('ep'))},[_vm._v(\" \"+_vm._s(_vm.factorString(_vm.factors.ep))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('ep'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.ep.value))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('replicanti'))},[_vm._v(\" \"+_vm._s(_vm.factorString(_vm.factors.repl))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('replicanti'))},[_vm._v(\" × \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('replicanti'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.repl.value))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('dt'))},[_vm._v(\" \"+_vm._s(_vm.factorString(_vm.factors.dt))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('dt'))},[_vm._v(\" × \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('dt'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.dt.value))+\" \")]),(_vm.eternityVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('eternities'))},[_vm._v(\" \"+_vm._s(_vm.factorString(_vm.factors.eter))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('eternities'))},[_vm._v(\" × \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('eternities'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.eter.value))+\" \")])]:_vm._e(),(_vm.perkShopVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('perk shop'))},[_vm._v(\" Teresa's Perk shop \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('perk shop'))},[_vm._v(\" + \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('perk shop'))},[_vm._v(\" \"+_vm._s(_vm.formatPerkShop)+\" \")])]:_vm._e(),(_vm.shardVisible&&!_vm.shardImprovedVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('shards'))},[_vm._v(\" \"+_vm._s(_vm.formatInt(100))+\"×Shards\"+_vm._s(_vm.formatPow(2))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('shards'))},[_vm._v(\" + \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('shards'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.shardFactor))+\" \")])]:_vm._e(),(_vm.shardVisible&&_vm.shardImprovedVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('shards'))},[_vm._v(\" \"+_vm._s(_vm.formatInt(1000))+\"×Shards(log2)\"+_vm._s(_vm.formatPow(2))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('shards'))},[_vm._v(\" + \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('shards'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.shardFactor))+\" \")])]:_vm._e(),(_vm.singularityVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('singularities'))},[_vm._v(\" Singularities \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('singularities'))},[_vm._v(\" × \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('singularities'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.singularityEffect))+\" \")])]:_vm._e(),(_vm.penaltyVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('instability'))},[_vm._v(\" Instability \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('instability'))},[_vm._v(\" / \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('instability'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.scalePenalty))+\" \")])]:_vm._e(),(_vm.rowVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('upgrade rows'))},[_vm._v(\" Upgrade Rows \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('upgrade rows'))},[_vm._v(\" + \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('upgrade rows'))},[_vm._v(\" \"+_vm._s(_vm.formatInt(_vm.factors.rowFactor))+\" \")])]:_vm._e(),(_vm.achievementVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('achievements'))},[_vm._v(\" Achievements \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('achievements'))},[_vm._v(\" + \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('achievements'))},[_vm._v(\" \"+_vm._s(_vm.formatInt(_vm.factors.achievementFactor))+\" \")])]:_vm._e(),(this.has193)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('193'))},[_vm._v(\" TRUE Royal Flush \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('193'))},[_vm._v(\" × \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('193'))},[_vm._v(\" 1.0808 \")])]:_vm._e(),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('level'))},[_vm._v(\" Final Level \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('level'))},[_vm._v(\" \"+_vm._s(_vm.formatLevel(_vm.factors.actualLevel))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor l-glyph-level-and-weights-note\",style:(_vm.rowStyle('info'))},[_vm._v(\" Note: All resources here are log10 of their actual values. \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor l-glyph-level-and-weights-note\",style:(_vm.rowStyle('info2'))},[_vm._v(\" EP, Replicanti, and DT use their highest values this Reality. \")]),(_vm.adjustVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__adjust-outline\",style:(_vm.adjustOutlineStyle)}),_c('div',{staticClass:\"l-glyph-levels-and-weights__adjust-label\"},[_vm._v(\" Adjust weights \"),_c('div',{staticClass:\"l-glyph-levels-and-weights__reset-btn-outer\"},[_c('div',{class:_vm.resetWeightsButtonClass(),on:{\"click\":_vm.resetWeights}},[_vm._v(\" Reset \")])])]),_c('div',{staticClass:\"l-glyph-levels-and-weights__adjust-auto\"},[(_vm.showAutoAdjustWeights)?_c('ToggleButton',{staticClass:\"c-glyph-levels-and-weights__auto-btn\",attrs:{\"label\":\"Auto adjustment:\"},model:{value:(_vm.isAutoAdjustWeightsOn),callback:function ($$v) {_vm.isAutoAdjustWeightsOn=$$v},expression:\"isAutoAdjustWeightsOn\"}}):_vm._e()],1),_c('div',{staticClass:\"l-glyph-levels-and-weights__slider\",style:(_vm.rowStyle('ep'))},[_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.weights.ep,\"width\":'100%'},on:{\"input\":function($event){return _vm.adjustSlider('ep', $event)}}},'SliderComponent',_vm.sliderProps,false))],1),_c('div',{staticClass:\"l-glyph-levels-and-weights__slider\",style:(_vm.rowStyle('replicanti'))},[_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.weights.repl,\"width\":'100%'},on:{\"input\":function($event){return _vm.adjustSlider('repl', $event)}}},'SliderComponent',_vm.sliderProps,false))],1),_c('div',{staticClass:\"l-glyph-levels-and-weights__slider\",style:(_vm.rowStyle('dt'))},[_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.weights.dt,\"width\":'100%'},on:{\"input\":function($event){return _vm.adjustSlider('dt', $event)}}},'SliderComponent',_vm.sliderProps,false))],1),_c('div',{staticClass:\"l-glyph-levels-and-weights__slider\",style:(_vm.rowStyle('eternities'))},[_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.weights.eternities,\"width\":'100%'},on:{\"input\":function($event){return _vm.adjustSlider('eternities', $event)}}},'SliderComponent',_vm.sliderProps,false))],1)]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',_vm._b({on:{\"click\":function($event){return _vm.emitInput(!_vm.value)}}},'button',_vm.$attrs,false),[_vm._v(\" \"+_vm._s(_vm.displayText)+\" \"),(_vm.tooltipClass)?_c('div',{class:_vm.tooltipClass},[_vm._v(\" \"+_vm._s(_vm.tooltipContent)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ToggleButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ToggleButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ToggleButton.vue?vue&type=template&id=f5943dbc&\"\nimport script from \"./ToggleButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ToggleButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphLevelsAndWeights.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphLevelsAndWeights.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphLevelsAndWeights.vue?vue&type=template&id=7287ea6a&scoped=true&\"\nimport script from \"./GlyphLevelsAndWeights.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphLevelsAndWeights.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphLevelsAndWeights.vue?vue&type=style&index=0&id=7287ea6a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7287ea6a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{staticClass:\"c-glyph-peek\"},[(_vm.canPeek)?_c('div',{staticClass:\"l-glyph-set-preview\",on:{\"click\":_vm.showModal}},[_c('GlyphSetPreview',{attrs:{\"show-name\":false,\"text\":'Upcoming Glyph selection:',\"glyphs\":_vm.glyphs,\"ignore-modified-level\":true,\"show-sacrifice\":_vm.canSacrifice,\"flip-tooltip\":true,\"sort\":false}}),_vm._v(\" (Click to bring up details) \")],1):_c('div',[_vm._v(\" Purchase the Reality study to see \"),_c('br'),_vm._v(\" this Reality's Glyph choices \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphPeek.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphPeek.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphPeek.vue?vue&type=template&id=73e574b8&scoped=true&\"\nimport script from \"./GlyphPeek.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphPeek.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"73e574b8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-glyph-sidebar-option-container\"},[(_vm.hasMoreOptions)?_c('div',{staticClass:\"l-glyph-sidebar-tab-container\"},[_c('button',{class:_vm.sidebarClass(_vm.sidebarEnum.INVENTORY_MANAGEMENT),on:{\"click\":function($event){return _vm.setSidebarState(_vm.sidebarEnum.INVENTORY_MANAGEMENT)}}},[_vm._v(\" Manage Inventory \")]),(_vm.unlockedFilter)?_c('button',{class:_vm.sidebarClass(_vm.sidebarEnum.FILTER_SETTINGS),on:{\"click\":function($event){return _vm.setSidebarState(_vm.sidebarEnum.FILTER_SETTINGS)}}},[_vm._v(\" Glyph Filter \")]):_vm._e(),(_vm.unlockedSets)?_c('button',{class:_vm.sidebarClass(_vm.sidebarEnum.SAVED_SETS),on:{\"click\":function($event){return _vm.setSidebarState(_vm.sidebarEnum.SAVED_SETS)}}},[_vm._v(\" Glyph Presets \")]):_vm._e(),(_vm.unlockedAlchemy)?_c('button',{class:_vm.sidebarClass(_vm.sidebarEnum.SACRIFICE_TYPE),on:{\"click\":function($event){return _vm.setSidebarState(_vm.sidebarEnum.SACRIFICE_TYPE)}}},[_vm._v(\" Sacrifice Type \")]):_vm._e()]):_vm._e(),(_vm.type === _vm.sidebarEnum.INVENTORY_MANAGEMENT)?_c('GlyphInventoryManagementPanel',{attrs:{\"has-more-options\":_vm.hasMoreOptions}}):(_vm.type === _vm.sidebarEnum.FILTER_SETTINGS && _vm.unlockedFilter)?_c('GlyphFilterPanel'):(_vm.type === _vm.sidebarEnum.SAVED_SETS && _vm.unlockedSets)?_c('GlyphSetSavePanel'):(_vm.type === _vm.sidebarEnum.SACRIFICE_TYPE && _vm.unlockedAlchemy)?_c('GlyphRejectionPanel'):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-glyph-sacrifice-options c-glyph-sacrifice-options l-glyph-sidebar-panel-size\"},[_c('div',{staticClass:\"c-glyph-sacrifice-options c-glyph-sacrifice-options-container\"},[_c('div',{staticClass:\"c-filter-extra-btns c-top-left\"},[_c('i',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Export filter settings'),expression:\"'Export filter settings'\"}],staticClass:\"fas fa-file-export l-top-left-btn\",on:{\"click\":_vm.exportFilterSettings}}),_c('i',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Import filter settings'),expression:\"'Import filter settings'\"}],staticClass:\"fas fa-file-import l-top-left-btn\",on:{\"click\":_vm.importFilterSettings}})]),_c('div',{staticClass:\"c-filter-extra-btns c-top-right\"},[_c('i',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.autoRealityTooltip),expression:\"autoRealityTooltip\"}],staticClass:\"fas fa-recycle l-top-right-btn\",class:{ 'o-quick-reality' : _vm.autoRealityForFilter },on:{\"click\":_vm.toggleAutoReality}}),_c('i',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.questionmarkTooltip),expression:\"questionmarkTooltip\"}],staticClass:\"fas fa-question-circle l-top-right-btn o-borderless\",on:{\"click\":_vm.showFilterHowTo}})]),_vm._v(\" Current Filter Mode: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.filterMode(_vm.mode))+\" \"),_c('br'),_c('div',{staticClass:\"c-glyph-filter-mode-container\"},_vm._l((_vm.unlockedModes),function(index){return _c('div',{key:index,class:_vm.optionClass(index),on:{\"click\":function($event){return _vm.setMode(index)}}},[_c('div',{staticClass:\"c-glyph-sacrifice-options__option__tooltip\"},[_vm._v(\" \"+_vm._s(_vm.filterMode(index))+\" \")])])}),0)]),(_vm.mode === _vm.modes.LOWEST_SACRIFICE)?_c('div',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_c('br'),_vm._v(\" Glyph score is assigned based on type. Priority is given to Glyphs belonging to the type of which you have the least total Glyph Sacrifice value. \"),_c('br'),_c('br'),_vm._v(\" This mode never keeps Glyphs, but will instead always sacrifice the Glyph it chooses. \")]):_vm._e(),(_vm.mode === _vm.modes.EFFECT_COUNT)?_c('div',{staticClass:\" c-glyph-sacrifice-options__advanced\"},[_c('br'),_vm._v(\" Glyphs must have at least \"),_c('input',{ref:\"effectCount\",staticClass:\"c-auto-sac-effect-tab__input\",attrs:{\"type\":\"number\",\"min\":\"0\",\"max\":\"8\"},domProps:{\"value\":_vm.effectCount},on:{\"blur\":_vm.setEffectCount}}),_vm._v(\" effects to be chosen. Rarer Glyphs are preferred in ties. \")]):_vm._e(),(_vm.mode === _vm.modes.RARITY_THRESHOLD)?_c('div',{staticClass:\"l-glyph-sacrifice-options__rarity-sliders\"},[_c('span',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_vm._v(\" Any Glyphs with rarity below these thresholds will be sacrificed. \")]),_vm._l((_vm.glyphTypes),function(type){return _c('div',{key:type.id,staticClass:\"l-glyph-sacrifice-options__rarity-slider-div\"},[_c('span',{on:{\"click\":function($event){return _vm.bumpRarity(type.id)}}},[_c('GlyphComponent',_vm._b({staticClass:\"o-clickable\",attrs:{\"glyph\":{type: type.id, strength: _vm.strengthThreshold(type.id) }}},'GlyphComponent',_vm.glyphIconProps,false))],1),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.rarityThresholds[type.id],\"width\":'100%'},on:{\"input\":function($event){return _vm.setRarityThreshold(type.id, $event)}}},'SliderComponent',_vm.raritySliderProps,false))],1)})],2):_vm._e(),(_vm.mode === _vm.modes.SPECIFIED_EFFECT)?_c('div',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_c('div',[_vm._v(\" Glyph Type: \"),_vm._l((_vm.glyphTypes),function(type){return _c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(type.id.capitalize()),expression:\"type.id.capitalize()\"}],key:type.id,staticClass:\"l-glyph-sacrifice-options__advanced-type-select c-glyph-sacrifice-options__advanced-type-select\",style:(_vm.advancedTypeSelectStyle(type)),on:{\"click\":function($event){_vm.advancedType=type.id}}},[_vm._v(\" \"+_vm._s(_vm.getSymbol(type.id))+\" \")])})],2),_c('br'),_c('div',{staticClass:\"l-glyph-sacrifice-options__rarity-slider-div\"},[_c('span',{on:{\"click\":function($event){return _vm.bumpRarity(_vm.advancedType)}}},[_c('GlyphComponent',_vm._b({staticClass:\"o-clickable\",attrs:{\"glyph\":{type: _vm.advancedType, strength: _vm.strengthThreshold(_vm.advancedType) }}},'GlyphComponent',_vm.glyphIconProps,false))],1),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.rarityThresholds[_vm.advancedType],\"width\":'100%'},on:{\"input\":function($event){return _vm.setRarityThreshold(_vm.advancedType, $event)}}},'SliderComponent',_vm.raritySliderProps,false))],1),_vm._l((_vm.glyphTypes),function(type){return [_c('AutoSacrificeEffectTab',{directives:[{name:\"show\",rawName:\"v-show\",value:(type.id === _vm.advancedType),expression:\"type.id === advancedType\"}],key:type.id,attrs:{\"glyph-type\":type.id}})]})],2):_vm._e(),(_vm.mode === _vm.modes.EFFECT_SCORE)?_c('div',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_c('div',[_vm._v(\" Glyph Type: \"),_vm._l((_vm.glyphTypes),function(type){return _c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(type.id.capitalize()),expression:\"type.id.capitalize()\"}],key:type.id,staticClass:\"l-glyph-sacrifice-options__advanced-type-select c-glyph-sacrifice-options__advanced-type-select\",style:(_vm.advancedTypeSelectStyle(type)),on:{\"click\":function($event){_vm.advancedType=type.id}}},[_vm._v(\" \"+_vm._s(_vm.getSymbol(type.id))+\" \")])})],2),_c('br'),_vm._l((_vm.glyphTypes),function(type){return [_c('AutoSacrificeAdvancedTab',{directives:[{name:\"show\",rawName:\"v-show\",value:(type.id === _vm.advancedType),expression:\"type.id === advancedType\"}],key:type.id,attrs:{\"glyph-type\":type.id}})]})],2):_vm._e(),(_vm.mode === _vm.modes.LOWEST_ALCHEMY)?_c('div',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_c('br'),_vm._v(\" Glyph score is assigned based on current Alchemy Resource totals. Priority is given to the Glyph type with the lowest associated alchemy resource total. \"),_c('br'),_c('br'),_vm._v(\" This mode never keeps Glyphs. \")]):_vm._e(),(_vm.mode === _vm.modes.ALCHEMY_VALUE)?_c('div',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_c('br'),_vm._v(\" Glyphs will be assigned values based on \"),_c('i',[_vm._v(\"current\")]),_vm._v(\" refinement value, accounting for the type-specific resource caps. Priority is given to Glyphs which are worth the most alchemy resources; Glyphs which would cause you to hit a cap are effectively worth less. \"),_c('br'),_c('br'),_vm._v(\" This mode never keeps Glyphs. \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-auto-sac-type-tab\"},[_c('div',{staticClass:\"l-auto-sac-type-tab__row-wrapper\"},[_c('div',[_c('div',{staticClass:\"o-questionmark\",attrs:{\"ach-tooltip\":_vm.questionmarkTooltip}},[_vm._v(\" ? \")]),_c('b',[_vm._v(\" Threshold score\")]),_vm._v(\" (rarity % + effect scores) \")]),_c('input',{ref:\"scoreThreshold\",staticClass:\"c-auto-sac-type-tab__input\",style:(_vm.minScoreInputStyle),attrs:{\"type\":\"number\",\"min\":-_vm.weightInputLimit,\"max\":_vm.weightInputLimit},domProps:{\"value\":_vm.scoreThreshold},on:{\"blur\":_vm.setScoreThreshold}})]),_vm._l((_vm.effects),function(effect){return _c('div',{key:effect.id,staticClass:\"l-auto-sac-type-tab__row-wrapper\"},[_c('div',{staticClass:\"c-auto-sac-type-tab__effect-desc l-auto-sac-type-tab__effect-desc\",style:(_vm.descStyle)},[_vm._v(\" \"+_vm._s(effect.genericDesc)+\" \")]),_c('input',{staticClass:\"c-auto-sac-type-tab__input\",attrs:{\"type\":\"number\",\"min\":-_vm.weightInputLimit,\"max\":_vm.weightInputLimit},domProps:{\"value\":_vm.effectScores[effect.bitmaskIndex - _vm.indexOffset]},on:{\"blur\":function($event){return _vm.setEffectScore(effect.bitmaskIndex - _vm.indexOffset, $event)}}})])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutoSacrificeAdvancedTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutoSacrificeAdvancedTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutoSacrificeAdvancedTab.vue?vue&type=template&id=41be01c5&scoped=true&\"\nimport script from \"./AutoSacrificeAdvancedTab.vue?vue&type=script&lang=js&\"\nexport * from \"./AutoSacrificeAdvancedTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"41be01c5\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_c('div',[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.questionmarkTooltip),expression:\"questionmarkTooltip\"}],staticClass:\"o-questionmark\"},[_vm._v(\" ? \")]),_vm._v(\" Selected Glyphs will have at least \"),_c('input',{ref:\"effectCount\",staticClass:\"c-auto-sac-effect-tab__input\",attrs:{\"type\":\"number\",\"min\":\"0\",\"max\":\"8\"},domProps:{\"value\":_vm.effectCount},on:{\"blur\":_vm.setEffectCount}}),_vm._v(\" effects total, which must include \"),_c('i',[_vm._v(\"all\")]),_vm._v(\" of the following effects: \")]),_vm._l((_vm.effects),function(effect){return _c('div',{key:effect.id,staticClass:\"l-auto-sac-type-tab__row-wrapper\"},[_c('SelectedEffectToggle',{staticClass:\"c-auto-sac-type-tab__effect-desc l-specified-effect-tab__effect-desc\",style:(_vm.descStyle),attrs:{\"effect\":effect,\"glyph-type\":_vm.glyphType}})],1)}),_vm._v(\" Click to toggle individual effects on/off \")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.exclusionTooltip),expression:\"exclusionTooltip\"}],class:_vm.classObject,on:{\"click\":function($event){return _vm.toggleSelection()}}},[_c('span',[(_vm.isExcluded)?_c('i',{staticClass:\"fas fa-exclamation l-dock l-dock-left\"}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.description)+\" \"),(_vm.isExcluded)?_c('i',{staticClass:\"fas fa-exclamation l-dock l-dock-right\"}):_vm._e()]),(_vm.isActive)?_c('i',{staticClass:\"fas fa-check c-selected-effect-toggle-indicator--active\",style:({ 'background-color': _vm.color })}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectedEffectToggle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectedEffectToggle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SelectedEffectToggle.vue?vue&type=template&id=f7049e30&scoped=true&\"\nimport script from \"./SelectedEffectToggle.vue?vue&type=script&lang=js&\"\nexport * from \"./SelectedEffectToggle.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SelectedEffectToggle.vue?vue&type=style&index=0&id=f7049e30&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f7049e30\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutoSacrificeEffectTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutoSacrificeEffectTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutoSacrificeEffectTab.vue?vue&type=template&id=6f5f01ec&scoped=true&\"\nimport script from \"./AutoSacrificeEffectTab.vue?vue&type=script&lang=js&\"\nexport * from \"./AutoSacrificeEffectTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6f5f01ec\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphFilterPanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphFilterPanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphFilterPanel.vue?vue&type=template&id=0b797f07&scoped=true&\"\nimport script from \"./GlyphFilterPanel.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphFilterPanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphFilterPanel.vue?vue&type=style&index=0&id=0b797f07&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b797f07\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.groupClass},[_c('GlyphSortButtonGroup'),_c('GlyphProtectedRowButtonGroup'),_c('GlyphAutosortButtonGroup'),_c('GlyphCleanButtonGroup')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-glyph-inventory-management-group\"},[_c('div',{staticClass:\"l-glyph-sacrifice-options__header\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.questionMarkTooltip),expression:\"questionMarkTooltip\"}],staticClass:\"o-questionmark\"},[_vm._v(\" ? \")]),_vm._v(\" Auto Glyph Arrangement: \")]),_c('ButtonCycle',{staticClass:\"c-glyph-inventory-option\",attrs:{\"text\":\"Auto-sort Mode:\",\"labels\":_vm.sortModes},model:{value:(_vm.autoSort),callback:function ($$v) {_vm.autoSort=$$v},expression:\"autoSort\"}}),_c('ToggleButton',{staticClass:\"c-glyph-inventory-option\",attrs:{\"label\":\"Auto-collapse space:\"},model:{value:(_vm.autoCollapse),callback:function ($$v) {_vm.autoCollapse=$$v},expression:\"autoCollapse\"}}),(_vm.showAutoAutoClean)?_c('ToggleButton',{staticClass:\"c-glyph-inventory-option\",attrs:{\"label\":\"Auto-purge on Realities:\"},model:{value:(_vm.autoAutoClean),callback:function ($$v) {_vm.autoAutoClean=$$v},expression:\"autoAutoClean\"}}):_vm._e(),(_vm.showAutoAutoClean)?_c('ToggleButton',{staticClass:\"c-glyph-inventory-option\",attrs:{\"label\":\"Never Auto-purge Glyphs accepted by filter:\",\"tooltip-class\":\"c-glyph-inventory-option__tooltip\",\"tooltip-content\":_vm.keepTooltip},model:{value:(_vm.applyFilterToPurge),callback:function ($$v) {_vm.applyFilterToPurge=$$v},expression:\"applyFilterToPurge\"}}):_vm._e(),(_vm.showAutoEquip)?_c('ButtonCycle',{staticClass:\"c-glyph-inventory-option\",attrs:{\"text\":\"Auto-equip Mode:\",\"labels\":_vm.sortModes},model:{value:(_vm.autoEquip),callback:function ($$v) {_vm.autoEquip=$$v},expression:\"autoEquip\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',_vm._b({on:{\"click\":_vm.handleClick}},'button',_vm.$attrs,false),[_vm._v(\" \"+_vm._s(_vm.displayText)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ButtonCycle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ButtonCycle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ButtonCycle.vue?vue&type=template&id=f8657244&\"\nimport script from \"./ButtonCycle.vue?vue&type=script&lang=js&\"\nexport * from \"./ButtonCycle.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphAutosortButtonGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphAutosortButtonGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphAutosortButtonGroup.vue?vue&type=template&id=38392132&scoped=true&\"\nimport script from \"./GlyphAutosortButtonGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphAutosortButtonGroup.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"38392132\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.glyphSacrificeUnlocked)?_c('div',{staticClass:\"o-glyph-inventory-management-group\"},[_c('div',{staticClass:\"l-glyph-sacrifice-options__header\"},[_vm._v(\" Remove weaker Glyphs: \")]),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.autoClean}},[_vm._v(\" Purge Glyphs \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" \"+_vm._s(_vm.autoCleanTooltip)+\" \")])]),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.harshAutoClean}},[_vm._v(\" Harsh Purge Glyphs \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" \"+_vm._s(_vm.harshAutoCleanTooltip)+\" \")])]),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.deleteAllUnprotected}},[_vm._v(\" \"+_vm._s(_vm.removeString)+\" all unprotected Glyphs \")]),(_vm.hasFilter)?_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.deleteAllRejected}},[_vm._v(\" \"+_vm._s(_vm.removeString)+\" all Glyphs rejected by filtering \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip l-rejected-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.deleteRejectedTooltip)+\" \")])]):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCleanButtonGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCleanButtonGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphCleanButtonGroup.vue?vue&type=template&id=0a4a783b&scoped=true&\"\nimport script from \"./GlyphCleanButtonGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphCleanButtonGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphCleanButtonGroup.vue?vue&type=style&index=0&id=0a4a783b&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0a4a783b\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-glyph-inventory-management-group\"},[_c('div',{staticClass:\"l-glyph-sacrifice-options__header\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.questionMarkTooltip),expression:\"questionMarkTooltip\"}],staticClass:\"o-questionmark\"},[_vm._v(\" ? \")]),_vm._v(\" Protected Slots: (\"+_vm._s(_vm.quantifyInt(\"row\", _vm.protectedRows))+\") \")]),_c('button',{class:_vm.addRowButtonClass(),on:{\"click\":_vm.addRow}},[_vm._v(\" Add a protected row \"),(_vm.isProtectedRowsMax())?_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" One row is permanently un-protected for new Glyphs \")]):_vm._e()]),_c('button',{class:_vm.removeRowButtonClass(),on:{\"click\":_vm.removeRow}},[_vm._v(\" Remove a protected row \")]),_c('ToggleButton',{staticClass:\"c-glyph-inventory-option\",attrs:{\"label\":\"Move Glyphs on changing row count:\"},model:{value:(_vm.moveGlyphs),callback:function ($$v) {_vm.moveGlyphs=$$v},expression:\"moveGlyphs\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphProtectedRowButtonGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphProtectedRowButtonGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphProtectedRowButtonGroup.vue?vue&type=template&id=0b9f4462&scoped=true&\"\nimport script from \"./GlyphProtectedRowButtonGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphProtectedRowButtonGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphProtectedRowButtonGroup.vue?vue&type=style&index=0&id=0b9f4462&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b9f4462\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-glyph-inventory-management-group\"},[_c('div',{staticClass:\"l-glyph-sacrifice-options__header\"},[_vm._v(\" Sort Glyphs: \")]),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.sortByLevel}},[_vm._v(\" Sort by level \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" Arranges by decreasing Glyph level \")])]),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.sortByPower}},[_vm._v(\" Sort by power \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" Arranges by decreasing level×rarity \")])]),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.sortByEffect}},[_vm._v(\" Sort by effect \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" Groups Glyphs together based on effects \")])]),(_vm.showScoreFilter)?_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.sortByScore}},[_vm._v(\" Sort by score \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" Arranges by decreasing Glyph filter score \")])]):_vm._e(),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.collapseEmpty}},[_vm._v(\" Collapse empty space \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" Moves all Glyphs to the earliest empty slots \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSortButtonGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSortButtonGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphSortButtonGroup.vue?vue&type=template&id=8971b8fa&scoped=true&\"\nimport script from \"./GlyphSortButtonGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphSortButtonGroup.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8971b8fa\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphInventoryManagementPanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphInventoryManagementPanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphInventoryManagementPanel.vue?vue&type=template&id=2f13930a&scoped=true&\"\nimport script from \"./GlyphInventoryManagementPanel.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphInventoryManagementPanel.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2f13930a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-glyph-sacrifice-options c-glyph-sacrifice-options l-glyph-sidebar-panel-size\"},[_c('span',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_vm._v(\" Behavior for deleted and filtered Glyphs: \")]),_c('br'),_c('div',{staticClass:\"l-glyph-auto-pick-options__container\"},_vm._l((_vm.availableModes),function(modeID){return _c('div',{key:modeID,class:_vm.optionClass(modeID),on:{\"click\":function($event){return _vm.setMode(modeID)}}},[_vm._v(\" \"+_vm._s(_vm.modeDesc(modeID))+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphRejectionPanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphRejectionPanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphRejectionPanel.vue?vue&type=template&id=295c4c76&scoped=true&\"\nimport script from \"./GlyphRejectionPanel.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphRejectionPanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphRejectionPanel.vue?vue&type=style&index=0&id=295c4c76&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"295c4c76\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-glyph-sacrifice-options c-glyph-sacrifice-options l-glyph-sidebar-panel-size\"},[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.questionmarkTooltip),expression:\"questionmarkTooltip\"}],staticClass:\"l-glyph-sacrifice-options__help c-glyph-sacrifice-options__help o-questionmark\"},[_vm._v(\" ? \")]),_c('div',{staticClass:\"l-glyph-set-save__header\"},[_vm._v(\" When loading a preset, try to match the following attributes. \\\"Exact\\\" will only equip Glyphs identical to the ones in the preset. The other settings will, loosely speaking, allow \\\"better\\\" Glyphs to be equipped in their place. \")]),_c('div',{staticClass:\"c-glyph-set-save-container\"},[_c('ToggleButton',{staticClass:\"c-glyph-set-save-setting-button\",attrs:{\"label\":\"Effects:\",\"on\":\"Including\",\"off\":\"Exact\"},model:{value:(_vm.effects),callback:function ($$v) {_vm.effects=$$v},expression:\"effects\"}}),_c('ToggleButton',{staticClass:\"c-glyph-set-save-setting-button\",attrs:{\"label\":\"Level:\",\"on\":\"Increased\",\"off\":\"Exact\"},model:{value:(_vm.level),callback:function ($$v) {_vm.level=$$v},expression:\"level\"}}),_c('ToggleButton',{staticClass:\"c-glyph-set-save-setting-button\",attrs:{\"label\":\"Rarity:\",\"on\":\"Increased\",\"off\":\"Exact\"},model:{value:(_vm.rarity),callback:function ($$v) {_vm.rarity=$$v},expression:\"rarity\"}})],1),_vm._l((_vm.glyphSets),function(set,id){return _c('div',{key:id,staticClass:\"c-glyph-single-set-save\"},[_c('div',{staticClass:\"c-glyph-set-preview-area\"},[_c('GlyphSetPreview',{key:_vm.glyphSetKey(set, id),attrs:{\"text\":_vm.setName(id),\"text-hidden\":true,\"glyphs\":set,\"flip-tooltip\":true,\"none-text\":_vm.noSet}})],1),_c('div',{staticClass:\"c-glyph-single-set-save-flexbox\"},[_c('div',{attrs:{\"ach-tooltip\":\"Set a custom name (up to 20 characters)\"}},[_c('input',{staticClass:\"c-glyph-sets-save-name__input\",attrs:{\"id\":id,\"type\":\"text\",\"size\":\"20\",\"maxlength\":\"20\",\"placeholder\":\"Custom set name\"},domProps:{\"value\":_vm.names[id]},on:{\"blur\":_vm.nicknameBlur}})]),_c('div',{staticClass:\"c-glyph-single-set-save-flexbox-buttons\"},[_c('button',{staticClass:\"c-glyph-set-save-button\",class:{'c-glyph-set-save-button--unavailable': !_vm.hasEquipped || set.length},on:{\"click\":function($event){return _vm.saveGlyphSet(id)}}},[_vm._v(\" Save \")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.loadingTooltip(set)),expression:\"loadingTooltip(set)\"}],staticClass:\"c-glyph-set-save-button\",class:{'c-glyph-set-save-button--unavailable': !_vm.setLengthValid(set)},on:{\"click\":function($event){return _vm.loadGlyphSet(set, id)}}},[_vm._v(\" Load \")]),_c('button',{staticClass:\"c-glyph-set-save-button\",class:{'c-glyph-set-save-button--unavailable': !set.length},on:{\"click\":function($event){return _vm.deleteGlyphSet(id)}}},[_vm._v(\" Delete \")])])])])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetSavePanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetSavePanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphSetSavePanel.vue?vue&type=template&id=3c1a8770&scoped=true&\"\nimport script from \"./GlyphSetSavePanel.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphSetSavePanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphSetSavePanel.vue?vue&type=style&index=0&id=3c1a8770&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3c1a8770\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphTabSidebar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphTabSidebar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphTabSidebar.vue?vue&type=template&id=083c41f9&scoped=true&\"\nimport script from \"./GlyphTabSidebar.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphTabSidebar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"083c41f9\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('button',{class:_vm.buttonClass,attrs:{\"ach-tooltip\":_vm.tooltip},on:{\"click\":_vm.toggleActive}},[(_vm.isDoomed)?_c('div',[_vm._v(\" You cannot amplify Doomed Realities. \")]):(_vm.canAmplify)?_c('div',[(_vm.isActive)?_c('span',[_vm._v(\"Will be amplified:\")]):_c('span',[_vm._v(\"Amplify this Reality:\")]),_c('br'),_vm._v(\" All rewards ×\"+_vm._s(_vm.formatInt(_vm.ratio))+\" \")]):_c('div',[_vm._v(\" Not enough stored real time to amplify. \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityAmplifyButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityAmplifyButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityAmplifyButton.vue?vue&type=template&id=e1d64202&scoped=true&\"\nimport script from \"./RealityAmplifyButton.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityAmplifyButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e1d64202\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{class:_vm.realityReminderClass,style:(_vm.styleObject),on:{\"click\":_vm.clicked}},[(!_vm.canReality)?_c('span',[_vm._v(\" You still need to unlock Reality in the Time Study Tree. \")]):(_vm.suggestions.length === 0)?_c('span',[_vm._v(\" Ready to Reality! You have unlocked every available upgrade within this Reality. \")]):_c('span',[_c('i',{class:_vm.dropDownIconClass}),_vm._v(\" You have \"+_vm._s(_vm.quantifyInt(\"thing\", _vm.suggestions.length))+\" you may want to do before Reality. \"+_vm._s(_vm.clickText)+\" \"),(_vm.isExpanded)?_c('div',{staticClass:\"l-suggestions\"},[_c('br'),_vm._l((_vm.suggestions),function(suggestion){return _c('div',{key:suggestion},[_vm._v(\" \"+_vm._s(suggestion)+\" \")])})],2):_vm._e()])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityReminder.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityReminder.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityReminder.vue?vue&type=template&id=fc08f092&scoped=true&\"\nimport script from \"./RealityReminder.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityReminder.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RealityReminder.vue?vue&type=style&index=0&id=fc08f092&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"fc08f092\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:['l-reset-reality-button',\n 'c-reset-reality-button',\n {'c-reset-reality-button-celestial': _vm.isInCelestialReality}],on:{\"click\":_vm.resetReality}},[_c('div',{staticClass:\"l-reality-button__contents\"},[_vm._v(\" \"+_vm._s(_vm.resetText)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetRealityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetRealityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResetRealityButton.vue?vue&type=template&id=708824d8&scoped=true&\"\nimport script from \"./ResetRealityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ResetRealityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"708824d8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-current-glyph-effects l-current-glyph-effects\",class:{'c-sacrificed-glyphs--dragover': _vm.hasDragover},on:{\"dragover\":_vm.dragover,\"dragleave\":_vm.dragleave,\"drop\":_vm.drop}},[_c('div',{staticClass:\"l-sacrificed-glyphs__help\"},[(_vm.isDoomed)?_c('span',{staticClass:\"pelle-current-glyph-effects\"},[_vm._v(\" You cannot sacrifice Glyphs while Doomed. \")]):_c('span',[_c('div',[_vm._v(\"Drag Glyphs here or shift-click to Sacrifice.\")]),_c('div',[_vm._v(\"The confirmation can be disabled in Options or by holding Ctrl.\")])])]),(_vm.hasAlteration)?_c('div',[_c('span',{staticClass:\"c-altered-glyphs-toggle-button\",on:{\"click\":_vm.toggleAlteration}},[_c('i',{class:_vm.dropDownIconClass}),_c('b',[_vm._v(\" Altered Glyphs\")])]),_c('br'),(_vm.hideAlteration)?_c('div',[_vm._v(\" (Details hidden, click to unhide) \")]):_c('div',[_vm._v(\" Glyph types will have one of their effects improved\"),_c('br'),_vm._v(\" when their Glyph type's total sacrifice value is above: \"),_c('br'),_c('br'),_c('b',[_c('span',{style:(_vm.addStyle)},[_vm._v(_vm._s(_vm.format(_vm.addThreshold))+\" - an additional secondary effect\")]),_c('br'),_c('span',{style:(_vm.empowerStyle)},[_vm._v(_vm._s(_vm.format(_vm.empowerThreshold))+\" - formula drastically improved\")]),_c('br'),_c('span',{style:(_vm.boostStyle)},[_vm._v(_vm._s(_vm.format(_vm.boostThreshold))+\" - a boost depending on Glyph Sacrifice\")])]),_c('br'),_c('br'),_vm._v(\" All effects from Glyph Sacrifice can no longer be increased once they reach \"+_vm._s(_vm.format(_vm.maxSacrifice))+\". \")])]):_vm._e(),_c('br'),_c('div',{staticClass:\"c-sacrificed-glyphs__header\"},[_vm._v(\" Glyph Sacrifice Boosts: \")]),(_vm.anySacrifices && !_vm.isDoomed)?_c('div',[(_vm.teresaMult > 1)?_c('div',[_vm._v(\" Glyph sacrifice values are multiplied by \"+_vm._s(_vm.formatX(_vm.teresaMult, 2, 2))+\"; Teresa was last done at \"+_vm._s(_vm.lastMachines)+\". \"),(_vm.hasSeenRealityGlyph)?_c('span',[_vm._v(\" Reality Glyphs are unaffected by this multiplier and have no altered effects. \")]):_vm._e()]):_vm._e(),_vm._l((_vm.types),function(type){return [_c('TypeSacrifice',{key:type + _vm.glyphSymbol(type),attrs:{\"type\":type,\"has-dragover\":_vm.hasDragover}})]})],2):(_vm.isDoomed)?_c('div',{staticClass:\"pelle-current-glyph-effects\"},[_vm._v(\" All boosts from Glyph Sacrifice are disabled while Doomed, including changes to effects due to Altered Glyphs. \")]):_c('div',[_vm._v(\" You haven't Sacrificed any Glyphs yet! \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.amount.gte(0))?_c('div',{style:(_vm.style)},[_c('div',[_c('div',{staticClass:\"l-sacrificed-glyphs__type-symbol c-sacrificed-glyphs__type-symbol\"},[_vm._v(\" \"+_vm._s(_vm.symbol)+\" \")]),_c('div',{staticClass:\"l-sacrificed-glyphs__type-amount c-sacrificed-glyphs__type-amount\"},[_vm._v(\" \"+_vm._s(_vm.formatAmount)+\" \"),(_vm.showNewSacrifice)?_c('span',{staticClass:\"c-sacrificed-glyphs__type-new-amount\"},[_vm._v(\" + \"+_vm._s(_vm.formatNewAmount)+\" ➜ \"+_vm._s(_vm.formatTotalAmount)+\" \")]):_vm._e()])]),(_vm.showNewSacrifice)?_c('span',{staticClass:\"c-sacrificed-glyphs__type-new-amount\"},[_vm._v(\" \"+_vm._s(_vm.newDescription)+\" \")]):_c('span',[_vm._v(\" \"+_vm._s(_vm.description)+\" \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TypeSacrifice.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TypeSacrifice.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TypeSacrifice.vue?vue&type=template&id=ec571984&scoped=true&\"\nimport script from \"./TypeSacrifice.vue?vue&type=script&lang=js&\"\nexport * from \"./TypeSacrifice.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TypeSacrifice.vue?vue&type=style&index=0&id=ec571984&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ec571984\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SacrificedGlyphs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SacrificedGlyphs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SacrificedGlyphs.vue?vue&type=template&id=9dad64e2&scoped=true&\"\nimport script from \"./SacrificedGlyphs.vue?vue&type=script&lang=js&\"\nexport * from \"./SacrificedGlyphs.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9dad64e2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{staticClass:\"c-single-glyph-cosmetic\",on:{\"dragover\":_vm.dragover,\"drop\":_vm.drop}},[(_vm.glyph)?_c('div',{staticClass:\"c-glyph-info\"},[_c('div',{staticClass:\"c-glyph-info-section\"},[_c('GlyphComponent',{attrs:{\"glyph\":_vm.glyph,\"flip-tooltip\":true}})],1),_c('div',{staticClass:\"c-glyph-info-section c-cosmetic-text\"},[_c('u',[_vm._v(\"Cosmetic Attributes\")]),_vm._v(\" Type: \"+_vm._s(_vm.glyph.type.capitalize())+\" \"),_c('br'),_vm._v(\" All: \"+_vm._s(_vm.typeCosmetic)+\" \"),_c('br'),_vm._v(\" Single: \"+_vm._s(_vm.specialCosmetic)+\" \")]),_c('div',{staticClass:\"c-glyph-info-section\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.openModal}},[_vm._v(\" Customize! \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":function($event){_vm.glyphID = -1}}},[_vm._v(\" Clear Box \")])],1)]):_c('div',[_vm._v(\" Drag a Glyph over this box to change its appearance! This will make a visual copy of it here, but leave the actual Glyph itself in your inventory. Removing, gaining, or moving any Glyphs will clear this box. \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleGlyphCustomzationPanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleGlyphCustomzationPanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingleGlyphCustomzationPanel.vue?vue&type=template&id=09c183dd&scoped=true&\"\nimport script from \"./SingleGlyphCustomzationPanel.vue?vue&type=script&lang=js&\"\nexport * from \"./SingleGlyphCustomzationPanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SingleGlyphCustomzationPanel.vue?vue&type=style&index=0&id=09c183dd&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"09c183dd\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphsTab.vue?vue&type=template&id=4515e2a7&scoped=true&\"\nimport script from \"./GlyphsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphsTab.vue?vue&type=style&index=0&id=4515e2a7&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4515e2a7\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-reality-upgrade-grid\"},[_c('div',{staticClass:\"c-cap-text\"},[_vm._v(\" Your Machine cap is \"),_c('span',{staticClass:\"c-reality-tab__reality-machines\"},[_vm._v(_vm._s(_vm.capStr))]),_vm._v(\". \")]),_c('div',{staticClass:\"c-info-text\"},[_vm._v(\" You have reached the limits of Reality and cannot hold more than \"+_vm._s(_vm.format(_vm.capRM))+\" Reality Machines. \"),_c('br'),_vm._v(\" Machines gained in excess of \"+_vm._s(_vm.format(_vm.baseRMCap))+\" will raise the maximum amount of Imaginary Machines you can have. \"),_c('br'),_vm._v(\" Imaginary Machines are gained passively over time up to the cap, but gain slows down exponentially as you approach the cap. \"),_c('br'),_vm._v(\" Every \"+_vm._s(_vm.formatInt(_vm.scaleTime))+\" seconds the difference in iM between your current amount and the cap will be cut in half. \"),_c('br'),_c('br'),_vm._v(\" The first two rows of upgrades can be purchased endlessly and the rest of the upgrades are one-time upgrades with requirements. \"),_c('br'),_vm._v(\" Upgrades here have the same gameplay and visual behavior as Reality Upgrades, but cost Imaginary Machines instead. \"),_c('span',{attrs:{\"ach-tooltip\":_vm.lockTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})])]),_vm._l((5),function(row){return _c('div',{key:row,staticClass:\"l-reality-upgrade-grid__row\"},_vm._l((5),function(column){return _c('ImaginaryUpgradeButton',{key:_vm.id(row, column),attrs:{\"upgrade\":_vm.upgrades[_vm.id(row, column)]}})}),1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.etaText),expression:\"etaText\"}],staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-reality-upgrade-btn c-reality-upgrade-btn\",class:_vm.classObject,on:{\"click\":[function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.toggleLock(_vm.upgrade)},function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.upgrade.purchase()}]}},[_c('HintText',{staticClass:\"l-hint-text--reality-upgrade c-hint-text--reality-upgrade\",attrs:{\"type\":\"realityUpgrades\"}},[_vm._v(\" \"+_vm._s(_vm.config.name)+\" \")]),_c('span',{class:{ 'o-pelle-disabled': _vm.upgrade.pelleDisabled }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),((_vm.$viewModel.shiftDown === _vm.isAvailableForPurchase) && !_vm.isRebuyable)?[_c('br'),_c('DescriptionDisplay',{staticClass:\"c-reality-upgrade-btn__requirement\",attrs:{\"config\":_vm.requirementConfig,\"label\":\"Requirement:\"}})]:[_c('EffectDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\"}}),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\",\"name\":\"Imaginary Machine\"}}):_vm._e()]],2)],1),(_vm.canBeLocked)?_c('div',{staticClass:\"o-requirement-lock\"},[(_vm.hasRequirementLock)?_c('i',{staticClass:\"fas fa-lock\"}):(_vm.canLock)?_c('i',{staticClass:\"fas fa-lock-open\"}):_vm._e()]):_vm._e(),(_vm.isRebuyable && _vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon-reality-btn o-primary-btn--reality-upgrade-toggle\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImaginaryUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImaginaryUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImaginaryUpgradeButton.vue?vue&type=template&id=530b024a&scoped=true&\"\nimport script from \"./ImaginaryUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ImaginaryUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"530b024a\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImaginaryUpgradesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImaginaryUpgradesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImaginaryUpgradesTab.vue?vue&type=template&id=6888454f&scoped=true&\"\nimport script from \"./ImaginaryUpgradesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ImaginaryUpgradesTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImaginaryUpgradesTab.vue?vue&type=style&index=0&id=6888454f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6888454f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-challenges-tab\"},[_c('ChallengeTabHeader'),_c('div',[_vm._v(\" An active Big Crunch Autobuyer will Crunch immediately when reaching an Infinity Challenge's antimatter goal, regardless of settings. \")]),_c('div',[_vm._v(_vm._s(_vm.nextAtDisplay))]),_c('ChallengeGrid',{attrs:{\"challenges\":_vm.challenges,\"is-challenge-visible\":_vm.isChallengeVisible},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar challenge = ref.challenge;\nreturn [_c('InfinityChallengeBox',{attrs:{\"challenge\":challenge}})]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ChallengeBox',{staticClass:\"c-challenge-box--infinity\",attrs:{\"name\":_vm.name,\"is-unlocked\":_vm.isUnlocked,\"is-running\":_vm.isRunning,\"is-completed\":_vm.isCompleted},on:{\"start\":function($event){return _vm.challenge.requestStart()}},scopedSlots:_vm._u([{key:\"top\",fn:function(){return [_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),(_vm.isRunning)?_c('EffectDisplay',{attrs:{\"config\":_vm.config}}):_vm._e()]},proxy:true},{key:\"bottom\",fn:function(){return [_c('div',{staticClass:\"l-challenge-box__bottom--infinity\"},[_c('span',[_vm._v(\"Goal: \"+_vm._s(_vm.format(_vm.config.goal))+\" antimatter\")]),_c('DescriptionDisplay',{attrs:{\"config\":_vm.config.reward,\"title\":\"Reward:\"}}),(_vm.isCompleted)?_c('EffectDisplay',{attrs:{\"config\":_vm.config.reward}}):_vm._e()],1)]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-challenge-box l-challenge-box\"},[_c('HintText',{staticClass:\"l-hint-text--challenge\",attrs:{\"type\":\"challenges\"}},[_vm._v(\" \"+_vm._s(_vm.name)+\" \")]),_vm._t(\"top\"),_c('div',{staticClass:\"l-challenge-box__fill\"}),_c('button',{class:_vm.buttonClassObject,on:{\"click\":function($event){return _vm.$emit('start')}}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \")]),_vm._t(\"bottom\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChallengeBox.vue?vue&type=template&id=78886df5&scoped=true&\"\nimport script from \"./ChallengeBox.vue?vue&type=script&lang=js&\"\nexport * from \"./ChallengeBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChallengeBox.vue?vue&type=style&index=0&id=78886df5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"78886df5\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityChallengeBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityChallengeBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityChallengeBox.vue?vue&type=template&id=61920d61&scoped=true&\"\nimport script from \"./InfinityChallengeBox.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityChallengeBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"61920d61\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityChallengesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityChallengesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityChallengesTab.vue?vue&type=template&id=e3a1daec&scoped=true&\"\nimport script from \"./InfinityChallengesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityChallengesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e3a1daec\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.activeComponent,{tag:\"component\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-infinity-dim-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[(!_vm.isEC8Running)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all \")]):_vm._e(),(_vm.isAnyAutobuyerUnlocked && !_vm.isEC8Running)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.toggleAllAutobuyers}},[_vm._v(\" Toggle all autobuyers \")]):_vm._e()],1),_c('div',[_c('p',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-infinity-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.infinityPower, 2, 1)))]),_vm._v(\" Infinity Power, \"),_c('br'),(!_vm.isEC9Running)?_c('span',[_vm._v(\" increased by \"),_c('span',{staticClass:\"c-infinity-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatPow(_vm.conversionRate, 2, 3)))])]):_c('span',[_vm._v(\" translated \")]),_vm._v(\" to a \"),_c('span',{staticClass:\"c-infinity-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatX(_vm.dimMultiplier, 2, 1)))]),_vm._v(\" multiplier on all \"),(!_vm.isEC9Running)?_c('span',[_vm._v(\"Antimatter Dimensions.\")]):_c('span',[_vm._v(\"Time Dimensions due to Eternity Challenge 9.\")])])]),(_vm.enslavedCompleted)?_c('div',{staticClass:\"l-infinity-dim-tab__enslaved-reward-container l-spoon-btn-group\"},[_c('button',{staticClass:\"c-infinity-dim-tab__tesseract-button\",class:{\n 'c-infinity-dim-tab__tesseract-button--disabled': !_vm.canBuyTesseract,\n 'o-pelle-disabled-pointer': _vm.creditsClosed\n },on:{\"click\":_vm.buyTesseract}},[_c('p',[_vm._v(\" Buy a Tesseract (\"+_vm._s(_vm.tesseractCountString)+\") \")]),_c('p',[_vm._v(\"Increase Infinity Dimension caps by \"+_vm._s(_vm.format(_vm.nextDimCapIncrease, 2)))]),_c('p',[_c('b',[_vm._v(\"Costs: \"+_vm._s(_vm.format(_vm.tesseractCost))+\" IP\")])])]),(_vm.isAutoTessUnlocked)?_c('PrimaryToggleButton',{staticStyle:{\"margin-top\":\"-1rem\"},attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutoTessOn),callback:function ($$v) {_vm.isAutoTessOn=$$v},expression:\"isAutoTessOn\"}}):_vm._e()],1):_vm._e(),(_vm.isEnslavedRunning)?_c('div',[_vm._v(\" All Infinity Dimensions are limited to a single purchase. \")]):_c('div',[_vm._v(\" All Infinity Dimensions except for the 8th are limited to a maximum of \"+_vm._s(_vm.format(Math.pow( _vm.totalDimCap, _vm.capExpo ), 2))+\" purchases each. \"),_c('br'),_vm._v(\" The 8th Infinity Dimension is limited to \"+_vm._s(_vm.format(Math.pow( 1e10, this.capExpo ), 2))+\" purchases. \")]),_c('div',[_vm._v(\"You are getting \"+_vm._s(_vm.format(_vm.powerPerSecond, 2, 0))+\" \"+_vm._s(_vm.incomeType)+\" per second.\")]),_c('br'),(_vm.atCap)?_c('span',[_vm._v(\"Due to instability, your Infinity Power gain is softcapped after \"+_vm._s(_vm.format(this.textCap)))]):_vm._e(),_c('br'),(_vm.atTessCap)?_c('span',[_vm._v(\"Tesseracts beyond \"+_vm._s(_vm.format(this.TesseractsCap))+\" are physically impossible\")]):_vm._e(),_c('br'),(_vm.isEC8Running)?_c('b',{staticClass:\"l-infinity-dim-tab__ec8-purchases\"},[_vm._v(\" You have \"+_vm._s(_vm.quantifyInt(\"purchase\", _vm.EC8PurchasesLeft))+\" left within Eternity Challenge 8. \")]):_vm._e(),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('InfinityDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),1),(_vm.showLockedDimCostNote)?_c('div',[_vm._v(\" Hold shift to see the Infinity Point cost for locked Infinity Dimensions. \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { DC } from \"./constants\";\r\nimport { deepmergeAll } from \"@/utility/deepmerge\";\r\nimport { GameMechanicState } from \"./game-mechanics\";\r\n\r\nexport function startEternityChallenge() {\r\n initializeChallengeCompletions();\r\n initializeResourcesAfterEternity();\r\n resetInfinityRuns();\r\n InfinityDimensions.fullReset();\r\n Replicanti.reset();\r\n resetChallengeStuff();\r\n AntimatterDimensions.reset();\r\n player.replicanti.galaxies = 0;\r\n Currency.infinityPoints.reset();\r\n InfinityDimensions.resetAmount();\r\n player.records.bestInfinity.bestIPminEternity = DC.D0;\r\n player.records.thisEternity.bestEPmin = DC.D0;\r\n resetTimeDimensions();\r\n resetTickspeed();\r\n player.records.thisInfinity.maxAM = DC.D0;\r\n player.records.thisEternity.maxAM = DC.D0;\r\n Currency.antimatter.reset();\r\n playerInfinityUpgradesOnReset();\r\n AchievementTimers.marathon2.reset();\r\n ECTimeStudyState.invalidateCachedRequirements();\r\n}\r\n\r\nclass EternityChallengeRewardState extends GameMechanicState {\r\n constructor(config, challenge) {\r\n const effect = config.effect;\r\n const configCopy = deepmergeAll([{}, config]);\r\n configCopy.effect = () => effect(challenge.completions);\r\n super(configCopy);\r\n this._challenge = challenge;\r\n }\r\n\r\n get isEffectActive() {\r\n return this._challenge.completions > 0;\r\n }\r\n\r\n get isVEffectActive(){\r\n return this._challenge.completions > 0 && Ra.unlocks.imporvedECRewards.isUnlocked; \r\n }\r\n}\r\n\r\nexport class EternityChallengeState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this._fullId = `eterc${this.id}`;\r\n this._reward = new EternityChallengeRewardState(config.reward, this);\r\n this._vReward = new EternityChallengeRewardState(config.vReward, this);\r\n }\r\n\r\n get fullId() {\r\n return this._fullId;\r\n }\r\n\r\n get isUnlocked() {\r\n return player.challenge.eternity.unlocked === this.id;\r\n }\r\n\r\n get isRunning() {\r\n return player.challenge.eternity.current === this.id;\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isRunning;\r\n }\r\n\r\n get hasUnlocked() {\r\n return (player.reality.unlockedEC & (1 << this.id)) !== 0;\r\n }\r\n\r\n set hasUnlocked(value) {\r\n if (value) player.reality.unlockedEC |= (1 << this.id);\r\n }\r\n\r\n get completions() {\r\n const completions = player.eternityChalls[this.fullId];\r\n return completions === undefined ? 0 : completions;\r\n }\r\n\r\n set completions(value) {\r\n player.eternityChalls[this.fullId] = Math.min(value, this.maxCompletions);\r\n }\r\n\r\n get maxCompletions() {\r\n return Enslaved.isRunning && this.id === 1 ? 1000 : 5;\r\n }\r\n\r\n get remainingCompletions() {\r\n return this.maxCompletions - this.completions;\r\n }\r\n\r\n get isFullyCompleted() {\r\n return this.completions === this.maxCompletions;\r\n }\r\n\r\n get maxValidCompletions() {\r\n if (this.id !== 4 && this.id !== 12) return this.maxCompletions;\r\n let completions = this.completions;\r\n while (completions < this.maxCompletions && this.isWithinRestrictionAtCompletions(completions)) {\r\n completions++;\r\n }\r\n return completions;\r\n }\r\n\r\n get gainedCompletionStatus() {\r\n const status = {\r\n gainedCompletions: 0,\r\n hasMoreCompletions: false,\r\n totalCompletions: this.completions,\r\n };\r\n if (this.isFullyCompleted) return status;\r\n if (!Perk.studyECBulk.isBought) {\r\n if (this.canBeCompleted) {\r\n ++status.totalCompletions;\r\n status.gainedCompletions = 1;\r\n }\r\n return status;\r\n }\r\n\r\n let totalCompletions = this.completionsAtIP(player.records.thisEternity.maxIP);\r\n const maxValidCompletions = this.maxValidCompletions;\r\n if (totalCompletions > maxValidCompletions) {\r\n totalCompletions = maxValidCompletions;\r\n status.failedRestriction = this.config.failedRestriction;\r\n }\r\n status.totalCompletions = totalCompletions;\r\n status.gainedCompletions = totalCompletions - this.completions;\r\n status.hasMoreCompletions = this.completions + status.gainedCompletions < this.maxCompletions;\r\n status.nextGoalAt = this.goalAtCompletions(status.totalCompletions);\r\n return status;\r\n }\r\n\r\n get initialGoal() {\r\n if (Pelle.isDoomed && this.config.pelleGoal) {\r\n return this.config.pelleGoal;\r\n }\r\n return this.config.goal;\r\n }\r\n\r\n get goalIncrease() {\r\n if (Pelle.isDoomed && this.config.pelleGoalIncrease) {\r\n return this.config.pelleGoalIncrease;\r\n }\r\n return this.config.goalIncrease;\r\n }\r\n\r\n get currentGoal() {\r\n return this.goalAtCompletions(this.completions);\r\n }\r\n\r\n get isGoalReached() {\r\n return player.records.thisEternity.maxIP.gte(this.currentGoal);\r\n }\r\n\r\n get canBeCompleted() {\r\n return this.isGoalReached && this.isWithinRestriction;\r\n }\r\n\r\n goalAtCompletions(completions) {\r\n return completions > 0\r\n ? this.initialGoal.times(this.goalIncrease.pow(Math.min(completions, this.maxCompletions - 1)))\r\n : this.initialGoal;\r\n }\r\n\r\n completionsAtIP(ip) {\r\n if (ip.lt(this.initialGoal)) return 0;\r\n const completions = 1 + (ip.dividedBy(this.initialGoal)).log10() / this.goalIncrease.log10();\r\n return Math.min(Math.floor(completions), this.maxCompletions);\r\n }\r\n\r\n addCompletion(auto = false) {\r\n this.completions++;\r\n if ((this.id === 4 || this.id === 12) && auto) {\r\n this.tryFail(true);\r\n }\r\n if (this.id === 6) {\r\n GameCache.dimensionMultDecrease.invalidate();\r\n }\r\n if (this.id === 11) {\r\n GameCache.tickSpeedMultDecrease.invalidate();\r\n }\r\n }\r\n\r\n requestStart() {\r\n if (!Tab.challenges.eternity.isUnlocked || this.isRunning) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n if (!player.options.confirmations.challenges) {\r\n this.start();\r\n return;\r\n }\r\n if (this.isUnlocked) Modal.startEternityChallenge.show(this.id);\r\n }\r\n\r\n start(auto) {\r\n if (EternityChallenge.isRunning) return false;\r\n if (!this.isUnlocked) return false;\r\n const maxInversion = player.requirementChecks.reality.slowestBH <= 1e-300;\r\n if (this.id === 12 && ImaginaryUpgrade(24).isLockingMechanics && Ra.isRunning && maxInversion) {\r\n if (!auto) ImaginaryUpgrade(24).tryShowWarningModal(\"enter Eternity Challenge 12\");\r\n return false;\r\n }\r\n if (this.id === 7 && ImaginaryUpgrade(15).isLockingMechanics && TimeDimension(1).amount.gt(0)) {\r\n if (!auto) ImaginaryUpgrade(15).tryShowWarningModal(\"enter Eternity Challenge 7\");\r\n return false;\r\n }\r\n\r\n // If dilation is active, the { enteringEC: true } parameter will cause\r\n // dilation to not be disabled. We still don't force-eternity, though;\r\n // this causes TP to still be gained.\r\n const enteringGamespeed = getGameSpeedupFactor();\r\n if (Player.canEternity) eternity(false, auto, { enteringEC: true });\r\n player.challenge.eternity.current = this.id;\r\n if (this.id === 12) {\r\n if (enteringGamespeed.lt(0.001)) SecretAchievement(42).unlock();\r\n player.requirementChecks.reality.slowestBH = 1;\r\n }\r\n if (Enslaved.isRunning) {\r\n if (this.id === 6 && this.completions === 5) EnslavedProgress.ec6.giveProgress();\r\n if (!auto && EnslavedProgress.challengeCombo.hasProgress) Tab.challenges.normal.show();\r\n }\r\n startEternityChallenge();\r\n return true;\r\n }\r\n\r\n /**\r\n * @return {EternityChallengeRewardState}\r\n */\r\n get reward() {\r\n return this._reward;\r\n }\r\n\r\n get vReward() {\r\n return this._vReward;\r\n }\r\n\r\n get isWithinRestriction() {\r\n return this.isWithinRestrictionAtCompletions(this.completions);\r\n }\r\n\r\n isWithinRestrictionAtCompletions(completions) {\r\n return this.config.restriction === undefined ||\r\n this.config.checkRestriction(this.config.restriction(completions));\r\n }\r\n\r\n exit() {\r\n if (Player.isInAntimatterChallenge) {\r\n Player.antimatterChallenge.exit();\r\n }\r\n player.challenge.eternity.current = 0;\r\n eternity(true);\r\n }\r\n\r\n fail(auto = false) {\r\n this.exit();\r\n let reason;\r\n if (auto) {\r\n if (this.id === 4) {\r\n reason = restriction => `Auto Eternity Challenge completion completed ` +\r\n `Eternity Challenge ${this.id} and made the next tier ` +\r\n `require having less Infinities (${quantifyInt(\"Infinity\", restriction)} ` +\r\n `or less) than you had`;\r\n } else if (this.id === 12) {\r\n reason = restriction => `Auto Eternity Challenge completion completed ` +\r\n `Eternity Challenge ${this.id} and made the next tier ` +\r\n `require spending less time in it (${quantify(\"in-game second\", restriction, 0, 1)} ` +\r\n `or less) than you had spent`;\r\n }\r\n } else if (this.id === 4) {\r\n reason = restriction => `You failed Eternity Challenge ${this.id} due to ` +\r\n `having more than ${quantifyInt(\"Infinity\", restriction)}`;\r\n } else if (this.id === 12) {\r\n reason = restriction => `You failed Eternity Challenge ${this.id} due to ` +\r\n `spending more than ${quantify(\"in-game second\", restriction, 0, 1)} in it`;\r\n }\r\n Modal.message.show(`${reason(this.config.restriction(this.completions))}, ` +\r\n `which has caused you to exit it.`,\r\n { closeEvent: GAME_EVENT.REALITY_RESET_AFTER }, 1);\r\n EventHub.dispatch(GAME_EVENT.CHALLENGE_FAILED);\r\n }\r\n\r\n tryFail(auto = false) {\r\n if (this.isRunning && !this.isWithinRestriction) {\r\n this.fail(auto);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * @param id\r\n * @return {EternityChallengeState}\r\n */\r\nexport const EternityChallenge = EternityChallengeState.createAccessor(GameDatabase.challenges.eternity);\r\n\r\n/**\r\n * @returns {EternityChallengeState}\r\n */\r\nObject.defineProperty(EternityChallenge, \"current\", {\r\n get: () => (player.challenge.eternity.current > 0\r\n ? EternityChallenge(player.challenge.eternity.current)\r\n : undefined),\r\n});\r\n\r\nObject.defineProperty(EternityChallenge, \"isRunning\", {\r\n get: () => player.challenge.eternity.current !== 0,\r\n});\r\n\r\nexport const EternityChallenges = {\r\n /**\r\n * @type {EternityChallengeState[]}\r\n */\r\n all: EternityChallenge.index.compact(),\r\n\r\n get completions() {\r\n return EternityChallenges.all\r\n .map(ec => ec.completions)\r\n .sum();\r\n },\r\n\r\n get maxCompletions() {\r\n return EternityChallenges.all\r\n .map(ec => ec.maxCompletions)\r\n .sum();\r\n },\r\n\r\n get remainingCompletions() {\r\n return EternityChallenges.all\r\n .map(ec => ec.remainingCompletions)\r\n .sum();\r\n },\r\n\r\n autoComplete: {\r\n tick() {\r\n const shouldPreventEC7 = TimeDimension(1).amount.gt(0);\r\n const hasUpgradeLock = RealityUpgrade(12).isLockingMechanics ||\r\n (ImaginaryUpgrade(15).isLockingMechanics && shouldPreventEC7 &&\r\n !Array.range(1, 6).some(ec => !EternityChallenge(ec).isFullyCompleted));\r\n if (!player.reality.autoEC || Pelle.isDisabled(\"autoec\") || hasUpgradeLock) {\r\n player.reality.lastAutoEC = Decimal.clampMax(player.reality.lastAutoEC, this.interval).toNumber();\r\n return;\r\n }\r\n if (Ra.unlocks.instantECAndRealityUpgradeAutobuyers.canBeApplied) {\r\n let next = this.nextChallenge;\r\n while (next !== undefined) {\r\n while (!next.isFullyCompleted) {\r\n next.addCompletion(true);\r\n }\r\n next = this.nextChallenge;\r\n if (ImaginaryUpgrade(15).isLockingMechanics && next?.id === 7 && shouldPreventEC7) break;\r\n }\r\n return;\r\n }\r\n const interval = this.interval instanceof Decimal ? this.interval.toNumber() : this.interval;\r\n let next = this.nextChallenge;\r\n while (player.reality.lastAutoEC - interval > 0 && next !== undefined) {\r\n player.reality.lastAutoEC -= interval;\r\n next.addCompletion(true);\r\n next = this.nextChallenge;\r\n }\r\n player.reality.lastAutoEC %= interval;\r\n },\r\n\r\n get nextChallenge() {\r\n return EternityChallenges.all.find(ec => !ec.isFullyCompleted);\r\n },\r\n\r\n get interval() {\r\n if (!Perk.autocompleteEC1.canBeApplied) return Infinity;\r\n let minutes = Effects.min(\r\n Number.MAX_VALUE,\r\n Perk.autocompleteEC1,\r\n Perk.autocompleteEC2,\r\n Perk.autocompleteEC3\r\n );\r\n minutes = new Decimal(minutes).div(VUnlocks.fastAutoEC.effectOrDefault(1));\r\n return TimeSpan.fromMinutes(minutes).totalMilliseconds.toNumber();\r\n }\r\n }\r\n};\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked && !_vm.canUnlock }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 1),\"amount-text\":_vm.format(_vm.amount, 2),\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-id o-primary-btn--buy-dim c-dim-tooltip-container\",class:_vm.buttonClass(),attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isContinuumActive || (!_vm.isUnlocked && _vm.canUnlock)},on:{\"click\":_vm.buySingleInfinityDimension}},[_vm._v(\" \"+_vm._s(_vm.costDisplay)+\" \"),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.capTooltip)+\" \")])]),(_vm.isAutobuyerUnlocked && !_vm.isEC8Running && !_vm.isContinuumActive)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--id-auto\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):(!_vm.isContinuumActive)?_c('PrimaryButton',{staticClass:\"o-primary-btn--id-auto\",attrs:{\"enabled\":_vm.isAvailableForPurchase && _vm.isUnlocked},on:{\"click\":_vm.buyMaxInfinityDimension}},[_vm._v(\" Buy Max \")]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicInfinityDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicInfinityDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicInfinityDimensionRow.vue?vue&type=template&id=239f89fe&scoped=true&\"\nimport script from \"./ClassicInfinityDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicInfinityDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicInfinityDimensionRow.vue?vue&type=style&index=0&id=239f89fe&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"239f89fe\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicInfinityDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicInfinityDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicInfinityDimensionsTab.vue?vue&type=template&id=5a952b48&scoped=true&\"\nimport script from \"./ClassicInfinityDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicInfinityDimensionsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicInfinityDimensionsTab.vue?vue&type=style&index=0&id=5a952b48&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5a952b48\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-infinity-dim-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[(!_vm.isEC8Running)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all \")]):_vm._e(),(_vm.isAnyAutobuyerUnlocked && !_vm.isEC8Running)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.toggleAllAutobuyers}},[_vm._v(\" Toggle all autobuyers \")]):_vm._e()],1),_c('div',[_c('p',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-infinity-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.infinityPower, 2, 1)))]),_vm._v(\" Infinity Power, \"),_c('br'),(!_vm.isEC9Running)?_c('span',[_vm._v(\" increased by \"),_c('span',{staticClass:\"c-infinity-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatPow(_vm.conversionRate, 2, 3)))])]):_c('span',[_vm._v(\" translated \")]),_vm._v(\" to a \"),_c('span',{staticClass:\"c-infinity-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatX(_vm.dimMultiplier, 2, 1)))]),_vm._v(\" multiplier on all \"),(!_vm.isEC9Running)?_c('span',[_vm._v(\"Antimatter Dimensions.\")]):_c('span',[_vm._v(\"Time Dimensions due to Eternity Challenge 9.\")])])]),(_vm.enslavedCompleted)?_c('div',{staticClass:\"l-infinity-dim-tab__enslaved-reward-container l-spoon-btn-group\"},[_c('button',{staticClass:\"c-infinity-dim-tab__tesseract-button\",class:{\n 'c-infinity-dim-tab__tesseract-button--disabled': !_vm.canBuyTesseract,\n 'o-pelle-disabled-pointer': _vm.creditsClosed\n },on:{\"click\":_vm.buyTesseract}},[_c('p',[_vm._v(\" Buy a Tesseract (\"+_vm._s(_vm.tesseractCountString)+\") \")]),_c('p',[_vm._v(\"Increase dimension caps by \"+_vm._s(_vm.format(_vm.nextDimCapIncrease, 2)))]),_c('p',[_c('b',[_vm._v(\"Costs: \"+_vm._s(_vm.format(_vm.tesseractCost))+\" IP\")])])]),(_vm.isAutoTessUnlocked)?_c('PrimaryToggleButton',{staticStyle:{\"margin-top\":\"-1rem\"},attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutoTessOn),callback:function ($$v) {_vm.isAutoTessOn=$$v},expression:\"isAutoTessOn\"}}):_vm._e()],1):_vm._e(),(_vm.isEnslavedRunning)?_c('div',[_vm._v(\" All Infinity Dimensions are limited to a single purchase. \")]):_c('div',[_vm._v(\" All Infinity Dimensions except for the 8th are limited to a maximum of \"+_vm._s(_vm.format(Math.pow( _vm.totalDimCap, _vm.capExpo ), 2))+\" purchases each. \"),_c('br'),_vm._v(\" The 8th Infinity Dimension is limited to \"+_vm._s(_vm.format(this.trueID8cap, 2))+\" purchases. \")]),_c('div',[_vm._v(\"You are getting \"+_vm._s(_vm.format(_vm.powerPerSecond, 2, 0))+\" \"+_vm._s(_vm.incomeType)+\" per second.\")]),_c('br'),(_vm.atCap)?_c('span',[_vm._v(\"Due to instability, your Infinity Power gain is softcapped after \"+_vm._s(_vm.format(this.textCap)))]):_vm._e(),_c('br'),(_vm.atTessCap)?_c('span',[_vm._v(\"Tesseracts beyond \"+_vm._s(_vm.format(this.TesseractsCap))+\" are physically impossible\")]):_vm._e(),_c('br'),(_vm.isEC8Running)?_c('b',{staticClass:\"l-infinity-dim-tab__ec8-purchases\"},[_vm._v(\" You have \"+_vm._s(_vm.quantifyInt(\"purchase\", _vm.EC8PurchasesLeft))+\" left within Eternity Challenge 8. \")]):_vm._e(),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('InfinityDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),1),(_vm.showLockedDimCostNote)?_c('div',[_vm._v(\" Hold shift to see the Infinity Point cost for locked Infinity Dimensions. \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-row-infinity-dim l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked && !_vm.canUnlock }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 1),\"amount-text\":_vm.format(_vm.amount, 2),\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container c-modern-dim-tooltip-container\",style:(_vm.cssVars)},[_c('div',{staticClass:\"c-modern-dim-purchase-count-tooltip\",style:(_vm.cssVars)},[_vm._v(\" \"+_vm._s(_vm.capTooltip)+\" \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-id o-primary-btn o-primary-btn--new o-primary-btn--buy-dim\",class:_vm.buttonClass(),attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isContinuumActive || (!_vm.isUnlocked && _vm.canUnlock)},on:{\"click\":_vm.buySingleInfinityDimension}},[_vm._v(\" \"+_vm._s(_vm.costDisplay)+\" \")]),(_vm.isAutobuyerUnlocked && !_vm.isEC8Running && !_vm.isContinuumActive)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--id-auto\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):(!_vm.isContinuumActive)?_c('PrimaryButton',{staticClass:\"o-primary-btn--id-auto\",attrs:{\"enabled\":_vm.isAvailableForPurchase},on:{\"click\":_vm.buyMaxInfinityDimension}},[_vm._v(\" Buy Max \")]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernInfinityDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernInfinityDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernInfinityDimensionRow.vue?vue&type=template&id=39f8097c&scoped=true&\"\nimport script from \"./ModernInfinityDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernInfinityDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernInfinityDimensionRow.vue?vue&type=style&index=0&id=39f8097c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"39f8097c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernInfinityDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernInfinityDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernInfinityDimensionsTab.vue?vue&type=template&id=80df2ae2&scoped=true&\"\nimport script from \"./ModernInfinityDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernInfinityDimensionsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernInfinityDimensionsTab.vue?vue&type=style&index=0&id=80df2ae2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"80df2ae2\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityDimensionsTab.vue?vue&type=template&id=55f47caa&\"\nimport script from \"./InfinityDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-infinity-upgrades-tab\"},[(_vm.chargeUnlocked)?_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{class:_vm.disChargeClassObject,on:{\"click\":function($event){_vm.disCharge = !_vm.disCharge}}},[_vm._v(\" Respec Charged Infinity Upgrades on next Reality \")])],1):_vm._e(),(_vm.chargeUnlocked)?_c('div',[_vm._v(\" You have charged \"+_vm._s(_vm.formatInt(_vm.chargesUsed))+\"/\"+_vm._s(_vm.formatInt(_vm.totalCharges))+\" Infinity Upgrades. Charged Infinity Upgrades have their effect altered. \"),_c('br'),_vm._v(\" Hold shift to show Charged Infinity Upgrades. You can freely respec your choices on Reality. \")]):_vm._e(),(_vm.isUseless)?_c('div',[_vm._v(\" You cannot Charge Infinity Upgrades while Doomed. \")]):_vm._e(),_c('br'),_vm._v(\" Within each column, the upgrades must be purchased from top to bottom. \"),_c('br'),_c('div',{staticClass:\"l-infinity-upgrade-grid l-infinity-upgrades-tab__grid\"},_vm._l((_vm.grid),function(column,columnId){return _c('div',{key:columnId,staticClass:\"c-infinity-upgrade-grid__column\"},[_vm._l((column),function(upgrade){return _c('InfinityUpgradeButton',{key:upgrade.id,class:_vm.btnClassObject(columnId),attrs:{\"upgrade\":upgrade}})}),_c('div',{staticClass:\"c-infinity-upgrade-grid__column--background\",style:(_vm.styleOfColumnBg[columnId])})],2)}),0),(_vm.bottomRowUnlocked)?_c('div',{staticClass:\"l-infinity-upgrades-bottom-row\"},[_c('IpMultiplierButton',{staticClass:\"l-infinity-upgrades-tab__mult-btn\"}),_c('InfinityUpgradeButton',{class:_vm.btnClassObject(1),attrs:{\"upgrade\":_vm.offlineIpUpgrade}})],1):_vm._e(),(_vm.eternityUnlocked && _vm.bottomRowUnlocked)?_c('div',[_vm._v(\" The Infinity Point multiplier becomes more expensive \"),_c('br'),_vm._v(\" above \"+_vm._s(_vm.formatPostBreak(_vm.ipMultSoftCap))+\" Infinity Points, and cannot be purchased past \"+_vm._s(_vm.formatPostBreak(_vm.ipMultHardCap))+\" Infinity Points. \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('InfinityUpgradeButton',{staticClass:\"o-infinity-upgrade-btn--multiplier\",attrs:{\"upgrade\":_vm.upgrade}},[(_vm.isCapped)?[_c('br'),_c('span',[_vm._v(\"(Capped at \"+_vm._s(_vm.quantify(\"Infinity Point\", _vm.upgrade.config.costCap))+\")\")])]:_vm._e()],2),_c('PrimaryButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--small-spoon\",on:{\"click\":function($event){return _vm.buyMaxIPMult()}}},[_vm._v(\" Max Infinity Point mult \")]),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--small-spoon\",attrs:{\"label\":\"Autobuy IP mult\"},model:{value:(_vm.isAutobuyerActive),callback:function ($$v) {_vm.isAutobuyerActive=$$v},expression:\"isAutobuyerActive\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IpMultiplierButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IpMultiplierButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./IpMultiplierButton.vue?vue&type=template&id=79ab45ba&scoped=true&\"\nimport script from \"./IpMultiplierButton.vue?vue&type=script&lang=js&\"\nexport * from \"./IpMultiplierButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"79ab45ba\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityUpgradesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityUpgradesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityUpgradesTab.vue?vue&type=template&id=c6393b0e&scoped=true&\"\nimport script from \"./InfinityUpgradesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityUpgradesTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./InfinityUpgradesTab.vue?vue&type=style&index=0&id=c6393b0e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c6393b0e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-laitela-celestial-tab\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"laitela\"}}),_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":function($event){return _vm.showLaitelaHowTo()}}},[_vm._v(\" Click for Lai'tela info \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all Dark Matter Dimensions \")])],1),_c('div',{staticClass:\"o-laitela-matter-amount\"},[_vm._v(\" You have \"),_c('span',{style:(_vm.styleObject)},[_vm._v(_vm._s(_vm.format(_vm.darkMatter, 2)))]),_vm._v(\" Dark Matter\"),(_vm.isDMCapped)?_c('span',[_vm._v(\" (capped)\")]):_vm._e(),_vm._v(\". \"),(!_vm.isDMCapped)?_c('span',[_vm._v(\"(Average: \"+_vm._s(_vm.format(_vm.darkMatterGain, 2, 2))+\"/s)\")]):_vm._e()]),_c('div',{staticClass:\"o-laitela-matter-amount\"},[_vm._v(\" Your maximum Dark Matter ever is \"),_c('span',{style:(_vm.styleObject)},[_vm._v(_vm._s(_vm.format(_vm.maxDarkMatter, 2)))]),(!_vm.isDoomed)?_c('span',[_vm._v(\", giving \"+_vm._s(_vm.formatPercents(_vm.matterExtraPurchasePercentage, 2))+\" more purchases from Continuum\")]):_vm._e(),_vm._v(\". \")]),_c('div',{staticClass:\"o-laitela-matter-amount\"},[_vm._v(\" Dark Matter Dimensions are unaffected by storing real time. \")]),(!_vm.singularitiesUnlocked)?_c('h2',{staticClass:\"c-laitela-singularity-container\"},[_vm._v(\" Unlock Singularities in \"+_vm._s(_vm.singularityWaitTime)+\". (\"+_vm._s(_vm.format(_vm.darkEnergy, 2, 2))+\"/\"+_vm._s(_vm.format(_vm.singularityCap, 2))+\" Dark Energy) \")]):_vm._e(),(_vm.singularitiesUnlocked)?_c('SingularityPane'):_vm._e(),(_vm.autobuyersUnlocked)?_c('LaitelaAutobuyerPane'):_vm._e(),_c('div',{staticClass:\"l-laitela-mechanics-container\"},[_c('LaitelaRunButton'),_c('div',[_c('DarkMatterDimensionGroup'),(_vm.showAnnihilation)?_c('AnnihilationButton'):_vm._e()],1),(_vm.singularityPanelVisible)?_c('SingularityMilestonePane'):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-laitela-annihilation-container\"},[(_vm.darkMatter.lt(_vm.matterRequirement))?_c('button',{staticClass:\"l-laitela-annihilation-button\"},[_vm._v(\" Annihilation requires \"+_vm._s(_vm.format(_vm.matterRequirement, 2))+\" Dark Matter \")]):_c('button',{staticClass:\"l-laitela-annihilation-button c-laitela-annihilation-button\",on:{\"click\":_vm.annihilate}},[_c('b',[_vm._v(\"Annihilate your Dark Matter Dimensions\")])]),_c('br'),_c('br'),(_vm.darkMatterMult > 1)?_c('span',[_vm._v(\" Current multiplier to all Dark Matter Dimensions: \"),_c('b',[_vm._v(_vm._s(_vm.formatX(_vm.darkMatterMult, 2, 2)))]),_c('br'),_c('br'),_vm._v(\" Annihilation will reset your Dark Matter and Dark Matter Dimension amounts, but also add \"),_c('b',[_vm._v(\"+\"+_vm._s(_vm.format(_vm.darkMatterMultGain, 2, 2)))]),_vm._v(\" to your Annihilation multiplier. \"),_c('br'),_vm._v(\" (\"),_c('b',[_vm._v(_vm._s(_vm.formatX(_vm.darkMatterMultRatio, 2, 2)))]),_vm._v(\" from previous multiplier) \"),(_vm.autobuyerUnlocked)?_c('span',[_c('br'),_c('br'),_vm._v(\" Auto-Annihilate when adding \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.autoAnnihilationInput),expression:\"autoAnnihilationInput\"}],staticClass:\"c-small-autobuyer-input c-laitela-annihilation-input\",style:(_vm.annihilationInputStyle),attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.autoAnnihilationInput)},on:{\"change\":function($event){return _vm.handleAutoAnnihilationInputChange()},\"input\":function($event){if($event.target.composing){ return; }_vm.autoAnnihilationInput=$event.target.value}}}),_vm._v(\" to the multiplier. \")]):_vm._e()]):_c('span',[_vm._v(\" Annihilation will reset your Dark Matter and Dark Matter Dimension amounts, but will give a permanent multiplier of \"),_c('b',[_vm._v(_vm._s(_vm.formatX(1 + _vm.darkMatterMultGain, 2, 2)))]),_vm._v(\" to all Dark Matter Dimensions. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AnnihilationButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AnnihilationButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AnnihilationButton.vue?vue&type=template&id=508ee007&\"\nimport script from \"./AnnihilationButton.vue?vue&type=script&lang=js&\"\nexport * from \"./AnnihilationButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._l((8),function(tier){return _c('DarkMatterDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('div',{staticClass:\"c-dark-matter-dimension-container\"},[_c('div',{staticClass:\"o-dark-matter-dimension-amount\"},[_vm._v(\" \"+_vm._s(_vm.name)),(_vm.hasAscended)?_c('span',[_vm._v(\" \"+_vm._s(_vm.ascensionText))]):_vm._e(),_vm._v(\": \"+_vm._s(_vm.format(_vm.amount, 2))+\" \")]),_c('div',[_vm._v(\" Average gain: \"+_vm._s(_vm.format(_vm.productionPerSecond, 2, 2))+\"/s (+\"+_vm._s(_vm.formatPercents(_vm.percentPerSecond, 2, 2))+\"/s) \")]),_c('div',{staticClass:\"c-dark-matter-dimension-buttons\"},[_c('button',{class:_vm.intervalClassObject,on:{\"click\":_vm.handleIntervalClick,\"mouseover\":function($event){return _vm.hoverState(true)},\"mouseleave\":function($event){return _vm.hoverState(false)},\"mousedown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }return _vm.hold('interval')}}},[(_vm.isIntervalCapped)?_c('span',{attrs:{\"ach-tooltip\":_vm.ascensionTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})]):_vm._e(),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.intervalText)}})]),_c('button',{class:_vm.darkMatterClassObject,on:{\"click\":_vm.buyPowerDM,\"mousedown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }return _vm.hold('DM')}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.darkMatterText)}})]),_c('button',{class:_vm.darkEnergyClassObject,on:{\"click\":_vm.buyPowerDE,\"mousedown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }return _vm.hold('DE')}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.darkEnergyText)}})])]),(_vm.interval > 200)?_c('div',[_vm._v(\" Tick: \"+_vm._s(_vm.formatInt(_vm.timer))+\" ms (\"+_vm._s(_vm.formatPercents(_vm.timerPercent, 1))+\") \")]):_c('div',[_vm._v(\" \"+_vm._s(_vm.format(1000 / _vm.interval, 2, 2))+\" ticks / sec \")]),_c('div',[_vm._v(\" Dark Energy: \"+_vm._s(_vm.format(_vm.darkEnergyPerSecond, 2, 4))+\"/s (\"+_vm._s(_vm.formatPercents(_vm.portionDE, 1))+\" of total) \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DarkMatterDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DarkMatterDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DarkMatterDimensionRow.vue?vue&type=template&id=d92f0bfc&\"\nimport script from \"./DarkMatterDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./DarkMatterDimensionRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DarkMatterDimensionGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DarkMatterDimensionGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DarkMatterDimensionGroup.vue?vue&type=template&id=586d3140&\"\nimport script from \"./DarkMatterDimensionGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./DarkMatterDimensionGroup.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasDimension || _vm.hasAscension || _vm.hasSingularity || _vm.hasAnnihilated)?_c('div',{staticClass:\"c-laitela-singularity-container\"},[(_vm.hasDimension)?_c('PrimaryToggleButton',{staticClass:\"c-laitela-automation-toggle\",attrs:{\"label\":\"Auto-buy DMD:\",\"on\":_vm.autobuyStr},model:{value:(_vm.dimension),callback:function ($$v) {_vm.dimension=$$v},expression:\"dimension\"}}):_vm._e(),(_vm.hasAscension)?_c('PrimaryToggleButton',{staticClass:\"c-laitela-automation-toggle\",attrs:{\"label\":\"Auto-Ascend:\",\"on\":_vm.autoAscendStr},model:{value:(_vm.ascension),callback:function ($$v) {_vm.ascension=$$v},expression:\"ascension\"}}):_vm._e(),(_vm.hasSingularity)?_c('PrimaryToggleButton',{staticClass:\"c-laitela-automation-toggle\",attrs:{\"label\":\"Auto-Singularity:\",\"on\":_vm.autoSingularityStr},model:{value:(_vm.singularity),callback:function ($$v) {_vm.singularity=$$v},expression:\"singularity\"}}):_vm._e(),(_vm.hasAnnihilated)?_c('PrimaryToggleButton',{staticClass:\"c-laitela-automation-toggle\",attrs:{\"label\":\"Auto-Annihilation:\"},model:{value:(_vm.annihilation),callback:function ($$v) {_vm.annihilation=$$v},expression:\"annihilation\"}}):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LaitelaAutobuyerPane.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LaitelaAutobuyerPane.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LaitelaAutobuyerPane.vue?vue&type=template&id=79a079e2&\"\nimport script from \"./LaitelaAutobuyerPane.vue?vue&type=script&lang=js&\"\nexport * from \"./LaitelaAutobuyerPane.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:_vm.classObject()},[_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_c('b',[_vm._v(\"Start Lai'tela's Reality\")])]),_c('div',{class:_vm.runButtonClassObject(),on:{\"click\":_vm.startRun}}),(_vm.realityReward > 1)?_c('div',[_c('b',[_vm._v(\" All Dark Matter multipliers are \"+_vm._s(_vm.formatX(_vm.realityReward, 2, 2))+\" higher. \")]),(_vm.maxDimTier > 0)?_c('span',[_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.completionTime)+\" \"),_c('br'),(_vm.maxDimTier <= 7)?_c('span',[_c('b',[_vm._v(\"Highest active dimension: \"+_vm._s(_vm.formatInt(_vm.maxDimTier)))])]):_vm._e(),_c('br'),_c('br'),_vm._v(\" Glyph Set: \"),_c('GlyphSetPreview',{attrs:{\"text\":\"Fastest Destabilization Glyph Set\",\"text-hidden\":true,\"force-name-color\":false,\"glyphs\":_vm.bestSet}})],1):_c('span',[_c('br'),_c('b',[_vm._v(\" You also gain an additional \"+_vm._s(_vm.formatX(8))+\" Dark Energy. \")]),_c('br'),_c('br'),_vm._v(\" Lai'tela's Reality has been fully destabilized and cannot have its reward further improved. \")]),_c('br')]):_vm._e(),_vm._l((_vm.runEffects),function(line,lineId){return _c('div',{key:lineId + '-laitela-run-desc' + _vm.maxDimTier},[_vm._v(\" \"+_vm._s(line)+\" \"),_c('br')])}),_c('br'),_c('div',[_vm._v(_vm._s(_vm.runDescription))])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LaitelaRunButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LaitelaRunButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LaitelaRunButton.vue?vue&type=template&id=d725ba68&\"\nimport script from \"./LaitelaRunButton.vue?vue&type=script&lang=js&\"\nexport * from \"./LaitelaRunButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-laitela-next-milestones\"},[_c('div',{staticClass:\"o-laitela-singularity-modal-button\",class:_vm.classObject,attrs:{\"onclick\":\"Modal.singularityMilestones.show()\"}},[_vm._v(\" Show all milestones \")]),_vm._l((_vm.milestones),function(milestone){return _c('SingularityMilestoneComponent',{key:milestone.id,attrs:{\"milestone\":milestone,\"suppress-glow\":true}})})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.containerClass},[(!_vm.isMetro && !_vm.isMaxed)?_c('div',{staticClass:\"c-laitela-milestone--bar-border-fix\"}):_vm._e(),_c('div',{class:_vm.barClass,style:(_vm.barStyle)}),_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[(!_vm.isMaxed)?_c('b',[_vm._v(\" \"+_vm._s(_vm.progressDisplay)+\" \")]):_vm._e(),_c('p',[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.upgradeDirectionIcon)}}),_vm._v(\" \"+_vm._s(_vm.description)+\" \")]),_c('b',[_vm._v(\" \"+_vm._s(_vm.effectDisplay)+\" \"),(!_vm.isUnique && !_vm.isMaxed)?_c('span',[_vm._v(\"➜ \"+_vm._s(_vm.nextEffectDisplay))]):_vm._e()]),_c('div',{staticClass:\"c-laitela-milestone__completions\"},[_vm._v(\" \"+_vm._s(_vm.completionsDisplay)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityMilestoneComponent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityMilestoneComponent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingularityMilestoneComponent.vue?vue&type=template&id=67ba0edb&scoped=true&\"\nimport script from \"./SingularityMilestoneComponent.vue?vue&type=script&lang=js&\"\nexport * from \"./SingularityMilestoneComponent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SingularityMilestoneComponent.vue?vue&type=style&index=0&id=67ba0edb&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"67ba0edb\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityMilestonePane.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityMilestonePane.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingularityMilestonePane.vue?vue&type=template&id=2cc17f23&\"\nimport script from \"./SingularityMilestonePane.vue?vue&type=script&lang=js&\"\nexport * from \"./SingularityMilestonePane.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-laitela-singularity-container\"},[_c('div',[_c('h2',[_vm._v(\" You have \"+_vm._s(_vm.quantify(\"Singularity\", _vm.singularities, 2))+\" \")]),_c('button',{class:_vm.condenseClassObject(),on:{\"click\":_vm.doSingularity}},[_c('h2',[_vm._v(\" \"+_vm._s(_vm.singularityFormText)+\" \")]),(_vm.singularityWaitText !== '')?_c('br'):_vm._e(),_c('h2',[_vm._v(\" \"+_vm._s(_vm.singularityWaitText)+\" \")])])]),(_vm.singularities !== 0)?_c('div',[_c('div',{staticClass:\"o-laitela-matter-amount\"},[_vm._v(\" You have \"+_vm._s(_vm.format(_vm.darkEnergy, 2, 4))+\" Dark Energy. (+\"+_vm._s(_vm.format(_vm.darkEnergyGainPerSecond, 2, 4))+\"/s) \")]),(_vm.unlockedBulkSingularity)?_c('div',[_c('button',{staticClass:\"c-laitela-singularity__cap-control\",class:{ 'c-laitela-singularity__cap-control--available' : _vm.singularityCapIncreases > 0 },attrs:{\"ach-tooltip\":_vm.decreaseTooltip},on:{\"click\":_vm.decreaseCap}},[_vm._v(\" Decrease Singularity cap. \")]),_c('button',{staticClass:\"c-laitela-singularity__cap-control\",class:{ 'c-laitela-singularity__cap-control--available' : _vm.singularityCapIncreases < 50 + _vm.extendedCap },attrs:{\"ach-tooltip\":_vm.increaseTooltip},on:{\"click\":_vm.increaseCap}},[_vm._v(\" Increase Singularity cap. \")]),_c('br'),_vm._v(\" Each step increases the required Dark Energy by \"+_vm._s(_vm.formatX(10))+\", \"),_c('br'),_vm._v(\" but also increases gained Singularities by \"+_vm._s(_vm.formatX(_vm.perStepFactor))+\". \")]):_c('div',[_c('br'),_vm._v(\" Reach \"+_vm._s(_vm.format(10))+\" Singularities \"),_c('br'),_vm._v(\" to unlock Bulk Singularities. \"),_c('br')]),_c('br'),_vm._v(\" Total time to \"),(_vm.hasAutoSingularity)?_c('span',[_vm._v(\"(auto-)\")]):_vm._e(),_vm._v(\"condense: \"+_vm._s(_vm.baseSingularityTime)+\" \"),(_vm.hasAutoSingularity && _vm.autoSingularityFactor !== 1)?_c('span',[_vm._v(\" (+\"+_vm._s(_vm.additionalSingularityTime)+\") \")]):_vm._e(),_c('br'),(_vm.hasAutoSingularity && _vm.autoSingularityFactor !== 1)?_c('span',[_vm._v(\"Manual \")]):_vm._e(),_vm._v(\" Singularity gain rate: \"+_vm._s(_vm.manualSingularityRate)+\" \"),_c('br'),(_vm.hasAutoSingularity && _vm.autoSingularityFactor !== 1)?_c('span',[_vm._v(\" Automatic Singularity gain rate: \"+_vm._s(_vm.autoSingularityRate)+\" \")]):_vm._e()]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityPane.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityPane.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingularityPane.vue?vue&type=template&id=49e4cbd0&scoped=true&\"\nimport script from \"./SingularityPane.vue?vue&type=script&lang=js&\"\nexport * from \"./SingularityPane.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SingularityPane.vue?vue&type=style&index=0&id=49e4cbd0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"49e4cbd0\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LaitelaTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LaitelaTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LaitelaTab.vue?vue&type=template&id=0e1057cc&\"\nimport script from \"./LaitelaTab.vue?vue&type=script&lang=js&\"\nexport * from \"./LaitelaTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-stats-tab\"},[_c('div',{staticClass:\"l-multiplier-subtab-btn-container\"},_vm._l((_vm.availableOptions),function(option,index){return _c('button',{key:option.key + option.isActive,class:_vm.subtabClassObject(option),on:{\"click\":function($event){return _vm.clickSubtab(index)}}},[_vm._v(\" \"+_vm._s(option.text)+\" \")])}),0),_c('div',{staticClass:\"c-list-container\"},[_vm._l((_vm.resourceSymbols),function(symbol){return _c('span',{key:symbol},[_c('span',{staticClass:\"c-symbol-overlay\",domProps:{\"innerHTML\":_vm._s(symbol)}})])}),_c('MultiplierBreakdownEntry',{key:_vm.resource.key,attrs:{\"resource\":_vm.resource,\"is-root\":true}}),_vm._m(0)],2)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-multiplier-tab-text-line\"},[_vm._v(\" Note: Entries are only expandable if they contain multiple sources which can be different values. For example, any effects which affect all Dimensions of any type equally will not expand into a list of eight identical numbers. \"),_c('br'),_c('b',[_vm._v(\" Some entries may cause lag if expanded out fully. Resizing happens over 200 ms (instead of instantly) in order to reduce possible adverse effects due to photosensitivity. This may cause some visual weirdness after prestige events. \")]),_c('br'),_vm._v(\" Some entries may have very inaccurate percentages, and may show incorrect values if set to multiplication. \")])}]\n\nexport { render, staticRenderFns }","import Vue from \"vue\";\r\n\r\nimport { DC } from \"@/core/constants\";\r\n\r\nexport class BreakdownEntryInfo {\r\n constructor(key) {\r\n this.key = key;\r\n const keyArgs = this.key.split(\"_\");\r\n const dbEntry = GameDatabase.multiplierTabValues[keyArgs[0]][keyArgs[1]];\r\n const args = keyArgs.length >= 3\r\n ? keyArgs.slice(2).map(a => (a.match(\"^\\\\d+$\") ? Number(a) : a))\r\n : [];\r\n this._name = createGetter(dbEntry.name, args);\r\n this._multValue = createGetter(dbEntry.multValue, args);\r\n this._powValue = createGetter(dbEntry.powValue, args);\r\n this._dilationEffect = createGetter(dbEntry.dilationEffect, args);\r\n this._isActive = createGetter(dbEntry.isActive, args);\r\n this._fakeValue = createGetter(dbEntry.fakeValue, args);\r\n this._icon = createGetter(dbEntry.icon, args);\r\n this._displayOverride = createGetter(dbEntry.displayOverride, args);\r\n this._isDilated = createGetter(dbEntry.isDilated, args);\r\n this._isBase = createGetter(dbEntry.isBase, args);\r\n this._ignoresNerfPowers = createGetter(dbEntry.ignoresNerfPowers, args);\r\n this.data = Vue.observable({\r\n mult: new Decimal(0),\r\n pow: 0,\r\n isVisible: false,\r\n lastVisibleAt: 0\r\n });\r\n }\r\n\r\n update() {\r\n const isVisible = this.isVisible;\r\n this.data.mult.fromDecimal(isVisible ? this.mult : DC.D1);\r\n this.data.pow = isVisible ? this.pow : 1;\r\n this.data.isVisible = isVisible;\r\n if (isVisible) {\r\n this.data.lastVisibleAt = Date.now();\r\n }\r\n }\r\n\r\n get name() {\r\n return this._name();\r\n }\r\n\r\n get mult() {\r\n return new Decimal(this._multValue() ?? 1);\r\n }\r\n\r\n get pow() {\r\n return this._powValue() ?? 1;\r\n }\r\n\r\n get dilationEffect() {\r\n return this._dilationEffect() ?? 1;\r\n }\r\n\r\n get isActive() {\r\n return this._isActive() ?? false;\r\n }\r\n\r\n get fakeValue() {\r\n return this._fakeValue();\r\n }\r\n\r\n get icon() {\r\n return this._icon();\r\n }\r\n\r\n get displayOverride() {\r\n return this._displayOverride();\r\n }\r\n\r\n get isDilated() {\r\n return this._isDilated();\r\n }\r\n\r\n get isBase() {\r\n return this._isBase();\r\n }\r\n\r\n get ignoresNerfPowers() {\r\n return this._ignoresNerfPowers() ?? false;\r\n }\r\n\r\n get isVisible() {\r\n return this.isActive && (this.pow !== 1 || this.mult.neq(1));\r\n }\r\n}\r\n\r\nfunction createGetter(property, args) {\r\n if (typeof property === \"function\") {\r\n return () => property(...args);\r\n }\r\n\r\n return () => property;\r\n}\r\n\r\nconst cache = new Map();\r\n\r\nexport function createEntryInfo(key) {\r\n const cached = cache.get(key);\r\n if (cached !== undefined) {\r\n return cached;\r\n }\r\n const entry = new BreakdownEntryInfo(key);\r\n cache.set(key, entry);\r\n return entry;\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.containerClass},[(!_vm.isEmpty)?_c('div',{staticClass:\"c-stacked-bars\"},_vm._l((_vm.averagedPercentList),function(perc,index){return _c('div',{key:100 + index,class:{ 'c-bar-highlight' : _vm.mouseoverIndex === index },style:(_vm.styleObject(index)),on:{\"mouseover\":function($event){_vm.mouseoverIndex = index},\"mouseleave\":function($event){_vm.mouseoverIndex = -1},\"click\":function($event){_vm.showGroup[index] = !_vm.showGroup[index]}}},[_c('span',{staticClass:\"c-bar-overlay\",domProps:{\"innerHTML\":_vm._s(_vm.barSymbol(index))}})])}),0):_vm._e(),_c('div'),_c('div',{staticClass:\"c-info-list\"},[_c('div',{staticClass:\"c-total-mult\"},[_c('b',[_vm._v(\" \"+_vm._s(_vm.totalString())+\" \")]),_c('span',{staticClass:\"c-display-settings\"},[(_vm.hasSeenPowers && _vm.allowPowerToggle)?_c('PrimaryToggleButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Change Display for Power effects'),expression:\"'Change Display for Power effects'\"}],staticClass:\"o-primary-btn c-change-display-btn\",attrs:{\"off\":\"^N\",\"on\":\"×N\"},model:{value:(_vm.replacePowers),callback:function ($$v) {_vm.replacePowers=$$v},expression:\"replacePowers\"}}):_vm._e(),(_vm.groups.length > 1)?_c('i',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Change Multiplier Grouping'),expression:\"'Change Multiplier Grouping'\"}],staticClass:\"o-primary-btn c-change-display-btn fas fa-arrows-rotate\",on:{\"click\":_vm.changeGroup}}):_vm._e()],1)]),(_vm.isEmpty)?_c('div',{staticClass:\"c-no-effect\"},[_vm._v(\" No Active Effects \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.disabledText)+\" \")]):_vm._l((_vm.entries),function(entry,index){return _c('div',{key:entry.key,on:{\"mouseover\":function($event){_vm.mouseoverIndex = index},\"mouseleave\":function($event){_vm.mouseoverIndex = -1}}},[(_vm.shouldShowEntry(entry))?_c('div',{class:_vm.singleEntryClass(index)},[_c('div',{on:{\"click\":function($event){_vm.showGroup[index] = !_vm.showGroup[index]}}},[_c('span',{class:_vm.expandIcon(index),style:(_vm.expandIconStyle(index))}),_vm._v(\" \"+_vm._s(_vm.entryString(index))+\" \")]),(_vm.showGroup[index] && _vm.hasChildEntries(index))?_c('MultiplierBreakdownEntry',{attrs:{\"resource\":entry}}):_vm._e()],1):_vm._e()])}),(_vm.isDilated && !_vm.isEmpty)?_c('div',[_c('div',{staticClass:\"c-single-entry c-dilation-entry\"},[_c('div',[_vm._v(\" \"+_vm._s(_vm.dilationString())+\" \")])])]):_vm._e(),(_vm.resource.key === 'AD_total')?_c('div',{staticClass:\"c-no-effect\"},[_c('div',[_vm._v(\" \\\"Base AD Production\\\" is the amount of Antimatter that you would be producing with your current AD upgrades as if you had waited a fixed amount of time (\"+_vm._s(_vm.formatInt(10))+\"-\"+_vm._s(_vm.formatInt(40))+\" seconds depending on your AD count) after a Sacrifice. This may misrepresent your actual production if your ADs have been producing for a while, but the relative mismatch will become smaller as you progress further in the game and numbers become larger. \")]),(_vm.inNC12)?_c('div',[_vm._v(\" The breakdown in this tab within Normal Challenge 12 may be inaccurate for some entries, and might count extra multipliers which apply to all Antimatter Dimensions rather than just the ones which are displayed. \")]):_vm._e()]):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { createEntryInfo } from \"./breakdown-entry-info\";\r\n\r\nexport class BreakdownEntryInfoGroup {\r\n constructor(keys) {\r\n this.entries = keys.map(key => createEntryInfo(key));\r\n }\r\n\r\n // We show children entries under two cases; the first is when there is more than one child entry and\r\n // therefore showing a list would be useful. The other is when the entry itself is a \"general\" entry, which\r\n // will always be titled something vague like \"Achievements\" or \"Time Studies\". In this case, we also still show\r\n // it when there is exactly one child, so that the player can see exactly which ach/TS/etc is giving the effect.\r\n get hasVisibleEntries() {\r\n const activeChildren = this.entries.filter(e => e.isActive && (e.mult.neq(1) || e.pow !== 1));\r\n return activeChildren.length > 1 ||\r\n (activeChildren.length === 1 && activeChildren[0].key.startsWith(\"general\"));\r\n }\r\n}\r\n\r\nconst cache = new Map();\r\n\r\n/**\r\n * @returns {BreakdownEntryInfoGroup[]}\r\n */\r\nexport function getResourceEntryInfoGroups(key) {\r\n const cached = cache.get(key);\r\n if (cached !== undefined) {\r\n return cached;\r\n }\r\n const treeGroups = GameDatabase.multiplierTabTree[key];\r\n const groups = treeGroups === undefined\r\n ? []\r\n : treeGroups.map(keys => new BreakdownEntryInfoGroup(keys));\r\n cache.set(key, groups);\r\n return groups;\r\n}\r\n","const MAX_DATA_POINTS = 10;\r\n\r\nexport class PercentageRollingAverage {\r\n constructor() {\r\n this.dataPoints = [];\r\n }\r\n\r\n add(dataPoint) {\r\n this.dataPoints.push(dataPoint);\r\n if (this.dataPoints.length > MAX_DATA_POINTS) {\r\n this.dataPoints.shift();\r\n }\r\n }\r\n\r\n get average() {\r\n const dataPoints = this.dataPoints.filter(p => p !== undefined);\r\n if (dataPoints.length === 0) {\r\n return [];\r\n }\r\n\r\n const average = [];\r\n const reference = dataPoints[0];\r\n for (let i = 0; i < reference.length; i++) {\r\n average[i] = dataPoints.map(p => p[i]).sum() / dataPoints.length;\r\n }\r\n\r\n return average;\r\n }\r\n\r\n clear() {\r\n this.dataPoints = [];\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultiplierBreakdownEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultiplierBreakdownEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MultiplierBreakdownEntry.vue?vue&type=template&id=70c7468e&scoped=true&\"\nimport script from \"./MultiplierBreakdownEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./MultiplierBreakdownEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MultiplierBreakdownEntry.vue?vue&type=style&index=0&id=70c7468e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"70c7468e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultiplierBreakdownTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultiplierBreakdownTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MultiplierBreakdownTab.vue?vue&type=template&id=446e47ab&scoped=true&\"\nimport script from \"./MultiplierBreakdownTab.vue?vue&type=script&lang=js&\"\nexport * from \"./MultiplierBreakdownTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MultiplierBreakdownTab.vue?vue&type=style&index=0&id=446e47ab&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"446e47ab\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-achievements-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Hide completed rows:\"},model:{value:(_vm.hideCompletedRows),callback:function ($$v) {_vm.hideCompletedRows=$$v},expression:\"hideCompletedRows\"}}),(_vm.showAutoAchieve)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Auto Achievements:\"},model:{value:(_vm.isAutoAchieveActive),callback:function ($$v) {_vm.isAutoAchieveActive=$$v},expression:\"isAutoAchieveActive\"}}):_vm._e()],1),_c('div',{staticClass:\"c-achievements-tab__header c-achievements-tab__header--multipliers\"},[(_vm.isDoomed)?_c('span',[_vm._v(\" All Achievement multipliers have been disabled\"),_c('SwapAchievementImagesButton')],1):_c('span',[_vm._v(\" Achievements provide a multiplier to\"),_c('SwapAchievementImagesButton'),_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.boostText)}})],1)]),_vm._m(0),(_vm.showAutoAchieve)?_c('div',{staticClass:\"c-achievements-tab__header\"},[(_vm.achCountdown.gt(0))?_c('div',[_vm._v(\" Automatically gain the next missing Achievement in \"+_vm._s(_vm.timeDisplayNoDecimals(_vm.achCountdown))),(!_vm.isAutoAchieveActive)?_c('span',[_vm._v(\" once Auto is turned on\")]):_vm._e(),_vm._v(\". (left-to-right, top-to-bottom) \")]):(_vm.missingAchievements !== 0)?_c('div',[_vm._v(\" Automatically gain the next missing Achievement as soon as you enable Auto Achievements. (left-to-right, top-to-bottom) \")]):_vm._e(),(_vm.totalCountdown.gt(0))?_c('div',[_vm._v(\" You will regain all remaining achievements after \"+_vm._s(_vm.timeDisplayNoDecimals(_vm.totalCountdown))+\" if Auto Achievement \"),(_vm.isAutoAchieveActive)?_c('span',[_vm._v(\"stays enabled\")]):_c('span',[_vm._v(\"is turned on\")]),_vm._v(\". \")]):_vm._e(),_c('br')]):_vm._e(),_c('div',{staticClass:\"l-achievement-grid\"},_vm._l((_vm.renderedRows),function(row,i){return _c('NormalAchievementRow',{key:i,attrs:{\"row\":row,\"is-obscured\":_vm.isObscured(i)}})}),1)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-achievements-tab__header c-achievements-tab__header--multipliers\"},[_vm._v(\" Achievements with a \"),_c('i',{staticClass:\"fas fa-star\"}),_vm._v(\" icon also give an additional reward. \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isHidden)?_c('div',{class:_vm.classObject},_vm._l((_vm.row),function(achievement,i){return _c('normal-achievement',{key:i,staticClass:\"l-achievement-grid__cell\",attrs:{\"achievement\":achievement,\"is-obscured\":_vm.isObscured}})}),1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject,style:(_vm.styleObject),on:{\"mouseenter\":_vm.onMouseEnter,\"mouseleave\":_vm.onMouseLeave}},[_c('HintText',{key:_vm.garbleKey,staticClass:\"l-hint-text--achievement\",attrs:{\"type\":\"achievements\"}},[_vm._v(\" \"+_vm._s(_vm.processedId)+\" \")]),_c('div',{staticClass:\"o-achievement__tooltip\"},[(_vm.isMouseOver)?[_c('div',{staticClass:\"o-achievement__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.processedName)+\" (\"+_vm._s(_vm.processedId)+\") \")]),_c('div',{staticClass:\"o-achievement__tooltip__description\"},[_vm._v(\" \"+_vm._s(_vm.processedDescription)+\" \")]),(_vm.config.reward)?_c('div',{staticClass:\"o-achievement__tooltip__reward\"},[(!_vm.isObscured)?_c('span',{class:{ 'o-pelle-disabled': _vm.isDisabled }},[_vm._v(\" Reward: \"+_vm._s(_vm.config.reward)+\" \"),(_vm.config.formatEffect)?_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.config}}):_vm._e()],1):_vm._e()]):_vm._e(),(_vm.achievedTime)?_c('div',{staticClass:\"o-achievement-time\"},[_vm._v(\" \"+_vm._s(_vm.achievedTime)+\" \")]):_vm._e()]:_vm._e()],2),(_vm.showUnlockState)?_c('div',{class:_vm.indicatorClassObject},[_c('i',{class:_vm.indicatorIconClass})]):_vm._e(),(_vm.hasReward)?_c('div',{class:_vm.rewardClassObject},[_c('i',{staticClass:\"fas fa-star\"})]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalAchievement.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalAchievement.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalAchievement.vue?vue&type=template&id=4f8b4d41&scoped=true&\"\nimport script from \"./NormalAchievement.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalAchievement.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NormalAchievement.vue?vue&type=style&index=0&id=4f8b4d41&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f8b4d41\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalAchievementRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalAchievementRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalAchievementRow.vue?vue&type=template&id=69cdd633&\"\nimport script from \"./NormalAchievementRow.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalAchievementRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{style:(_vm.imageSwapperStyleObject),on:{\"click\":_vm.swapImages}},[_vm._v(_vm._s(_vm.swapImagesButton))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SwapAchievementImagesButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SwapAchievementImagesButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SwapAchievementImagesButton.vue?vue&type=template&id=cf2e6d4a&\"\nimport script from \"./SwapAchievementImagesButton.vue?vue&type=script&lang=js&\"\nexport * from \"./SwapAchievementImagesButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalAchievementsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalAchievementsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalAchievementsTab.vue?vue&type=template&id=8c42f696&\"\nimport script from \"./NormalAchievementsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalAchievementsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-challenges-tab\"},[_c('ChallengeTabHeader'),_c('div',[_vm._v(\" Some Normal Challenges have requirements to be able to run that challenge. \")]),_c('div',[_vm._v(\" If you have an active Big Crunch Autobuyer, it will attempt to Crunch as soon as possible when reaching Infinite antimatter. \")]),_c('ChallengeGrid',{attrs:{\"challenges\":_vm.challenges},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar challenge = ref.challenge;\nreturn [_c('NormalChallengeBox',{attrs:{\"challenge\":challenge}})]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ChallengeBox',{staticClass:\"c-challenge-box--normal\",attrs:{\"name\":_vm.name,\"is-unlocked\":_vm.isUnlocked,\"is-running\":_vm.isRunning,\"is-completed\":_vm.isCompleted,\"override-label\":_vm.overrideLabel,\"locked-at\":_vm.lockedAt},on:{\"start\":function($event){return _vm.challenge.requestStart()}},scopedSlots:_vm._u([{key:\"top\",fn:function(){return [_c('DescriptionDisplay',{attrs:{\"config\":_vm.descriptionDisplayConfig}})]},proxy:true},{key:\"bottom\",fn:function(){return [_c('span',{class:{ 'o-pelle-disabled': _vm.isDisabled }},[_vm._v(\"Reward: \"+_vm._s(_vm.challenge.config.reward))])]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalChallengeBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalChallengeBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalChallengeBox.vue?vue&type=template&id=75b37b54&scoped=true&\"\nimport script from \"./NormalChallengeBox.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalChallengeBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"75b37b54\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalChallengesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalChallengesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalChallengesTab.vue?vue&type=template&id=957ab7c6&scoped=true&\"\nimport script from \"./NormalChallengesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalChallengesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"957ab7c6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-options-tab\"},[_c('div',{staticClass:\"l-options-grid\"},[_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.confirmationOptions.show()\"}},[_vm._v(\" Open Confirmation Options \")]),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",attrs:{\"label\":\"Hotkeys:\",\"on\":\"Enabled\",\"off\":\"Disabled\"},model:{value:(_vm.hotkeys),callback:function ($$v) {_vm.hotkeys=$$v},expression:\"hotkeys\"}}),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button l-toggle-button\",attrs:{\"label\":\"Switch tabs on some events (e.g. entering challenges):\"},model:{value:(_vm.automaticTabSwitching),callback:function ($$v) {_vm.automaticTabSwitching=$$v},expression:\"automaticTabSwitching\"}})],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",attrs:{\"label\":\"Offline progress:\"},model:{value:(_vm.offlineProgress),callback:function ($$v) {_vm.offlineProgress=$$v},expression:\"offlineProgress\"}}),_c('div',{staticClass:\"o-primary-btn o-primary-btn--option o-primary-btn--slider l-options-grid__button\"},[_c('b',[_vm._v(\"Offline ticks: \"+_vm._s(_vm.formatInt(_vm.offlineTicks)))]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.offlineSlider},on:{\"input\":function($event){return _vm.adjustSliderValueOfflineTicks($event)}}},'SliderComponent',_vm.sliderPropsOfflineTicks,false))],1),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",attrs:{\"label\":\"Run suspended time as offline:\"},model:{value:(_vm.hibernationCatchup),callback:function ($$v) {_vm.hibernationCatchup=$$v},expression:\"hibernationCatchup\"}})],1),_c('div',{staticClass:\"l-options-grid__row\"},[(_vm.automatorUnlocked)?_c('div',{staticClass:\"o-primary-btn o-primary-btn--option o-primary-btn--slider l-options-grid__button\"},[_c('b',[_vm._v(\"Automator Log Max: \"+_vm._s(_vm.formatInt(parseInt(_vm.automatorLogSize))))]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.automatorLogSize},on:{\"input\":function($event){return _vm.adjustSliderValueAutomatorLogSize($event)}}},'SliderComponent',_vm.sliderPropsAutomatorLogSize,false))],1):_vm._e(),(_vm.DEV)?_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.speedUp.show()\"}},[_vm._v(\" Modify Testing Speed \")]):_vm._e()],1),_c('OpenModalHotkeysButton')],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('PrimaryButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",on:{\"click\":_vm.emitClick}},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OptionsButton.vue?vue&type=template&id=6ef103be&\"\nimport script from \"./OptionsButton.vue?vue&type=script&lang=js&\"\nexport * from \"./OptionsButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsGameplayTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsGameplayTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OptionsGameplayTab.vue?vue&type=template&id=2b2bff8a&scoped=true&\"\nimport script from \"./OptionsGameplayTab.vue?vue&type=script&lang=js&\"\nexport * from \"./OptionsGameplayTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./OptionsGameplayTab.vue?vue&type=style&index=0&id=2b2bff8a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2b2bff8a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-options-tab\"},[_c('div',{staticClass:\"l-options-grid\"},[_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-x-large\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"GameStorage.export()\"}},[_vm._v(\" Export save \")]),_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-x-large\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"Modal.import.show()\"}},[_vm._v(\" Import save \")]),_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-x-large\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"Modal.hardReset.show()\"}},[_vm._v(\" RESET THE GAME \")])],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-x-large\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"GameStorage.save(false, true)\"}},[_vm._v(\" Save game \")]),_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-x-large\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"Modal.loadGame.show()\"}},[_vm._v(\" Choose save \")]),_c('AutosaveIntervalSlider',{attrs:{\"min\":10,\"max\":60,\"interval\":1}})],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"GameStorage.exportAsFile()\"}},[_vm._v(\" Export save as file \")]),_c('OptionsButton',{staticClass:\"c-file-import-button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed }},[_c('input',{staticClass:\"c-file-import\",attrs:{\"type\":\"file\",\"accept\":\".txt\"},on:{\"change\":_vm.importAsFile}}),_c('label',{attrs:{\"for\":\"file\"}},[_vm._v(\"Import save from file\")])]),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"label\":\"Display time since save:\"},model:{value:(_vm.showTimeSinceSave),callback:function ($$v) {_vm.showTimeSinceSave=$$v},expression:\"showTimeSinceSave\"}})],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"Modal.backupWindows.show()\"}},[_vm._v(\" Open Automatic Save Backup Menu \")]),_c('SaveFileName')],1),_c('div',{staticClass:\"l-options-grid__row\"},[(_vm.canSpeedrun)?_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-x-large\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"Modal.enterSpeedrun.show()\"}},[_vm._v(\" Start Speedrun \")]):_vm._e(),(_vm.inSpeedrun)?_c('OptionsButton',{class:{\n 'o-pelle-disabled-pointer': _vm.creditsClosed,\n 'o-primary-btn--disabled': !_vm.canModifySeed\n },on:{\"click\":function($event){return _vm.openSeedModal()}}},[_vm._v(\" Change Glyph RNG Seed \")]):_vm._e()],1),_c('OpenModalHotkeysButton')],1),(_vm.cloudAvailable)?_c('h2',{staticClass:\"c-cloud-options-header\"},[(_vm.hideGoogleName)?_c('span',[_vm._v(\"Logged in to Google \"),_c('i',[_vm._v(\"(name hidden)\")])]):(_vm.loggedIn)?_c('span',[_vm._v(\"Logged in as \"+_vm._s(_vm.userName))]):_c('span',[_vm._v(\"Not logged in\")])]):_vm._e(),(_vm.loggedIn)?_c('div',[(_vm.cloudEnabled)?_c('span',[_vm._v(\"Cloud Saving will occur automatically every 10 minutes.\")]):_c('span',[_vm._v(\"Cloud Saving has been disabled on this save.\")])]):_vm._e(),(_vm.cloudAvailable)?_c('div',{staticClass:\"l-options-grid\"},[(!_vm.STEAM)?_c('div',{staticClass:\"l-options-grid__row\"},[(_vm.loggedIn)?_c('OptionsButton',{attrs:{\"onclick\":\"GameOptions.logout()\"}},[_vm._v(\" Disconnect Google Account and disable Cloud Saving \")]):_c('OptionsButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('This will connect your Google Account to your Antimatter Dimensions savefiles'),expression:\"'This will connect your Google Account to your Antimatter Dimensions savefiles'\"}],class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"GameOptions.login()\"}},[_vm._v(\" Login with Google to enable Cloud Saving \")]),(_vm.loggedIn)?_c('PrimaryToggleButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('This will hide your Google Account name from the UI for privacy. Saving/loading is unaffected.'),expression:\"'This will hide your Google Account name from the UI for privacy. Saving/loading is unaffected.'\"}],staticClass:\"o-primary-btn--option l-options-grid__button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"label\":\"Hide Google Account name:\"},model:{value:(_vm.hideGoogleName),callback:function ($$v) {_vm.hideGoogleName=$$v},expression:\"hideGoogleName\"}}):_vm._e()],1):_vm._e(),(_vm.loggedIn)?_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"GameOptions.cloudSave()\"}},[_vm._v(\" Cloud save \")]),_c('OptionsButton',{class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"GameOptions.cloudLoad()\"}},[_vm._v(\" Cloud load \")]),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"label\":\"Force local save before cloud saving:\"},model:{value:(_vm.syncSaveIntervals),callback:function ($$v) {_vm.syncSaveIntervals=$$v},expression:\"syncSaveIntervals\"}})],1):_vm._e(),(_vm.loggedIn)?_c('div',{staticClass:\"l-options-grid__row\"},[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"label\":\"Automatic cloud saving/loading:\"},model:{value:(_vm.cloudEnabled),callback:function ($$v) {_vm.cloudEnabled=$$v},expression:\"cloudEnabled\"}}),_c('PrimaryToggleButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.modalTooltip),expression:\"modalTooltip\"}],staticClass:\"o-primary-btn--option l-options-grid__button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"label\":\"Show modal if possible saving conflict:\"},model:{value:(_vm.showCloudModal),callback:function ($$v) {_vm.showCloudModal=$$v},expression:\"showCloudModal\"}}),_c('PrimaryToggleButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.overwriteTooltip),expression:\"overwriteTooltip\"}],staticClass:\"o-primary-btn--option l-options-grid__button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"label\":\"Force cloud saving despite conflicts:\"},model:{value:(_vm.forceCloudOverwrite),callback:function ($$v) {_vm.forceCloudOverwrite=$$v},expression:\"forceCloudOverwrite\"}})],1):_vm._e()]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-primary-btn o-primary-btn--option o-primary-btn--slider l-options-grid__button\"},[_c('b',[_vm._v(\"Autosave interval: \"+_vm._s(_vm.formatInt(_vm.sliderInterval))+\"s\")]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.sliderInterval},on:{\"input\":function($event){return _vm.adjustSliderValue($event)}}},'SliderComponent',_vm.sliderProps,false))],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutosaveIntervalSlider.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutosaveIntervalSlider.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutosaveIntervalSlider.vue?vue&type=template&id=72f95660&\"\nimport script from \"./AutosaveIntervalSlider.vue?vue&type=script&lang=js&\"\nexport * from \"./AutosaveIntervalSlider.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-primary-btn o-primary-btn--option o-primary-btn--input l-options-grid__button\"},[_c('b',[_vm._v(\"Save file name:\")]),_c('span',{attrs:{\"ach-tooltip\":\"Set a custom name (up to 16 alphanumeric characters, including space and hyphen)\"}},[_c('input',{staticClass:\"c-custom-save-name__input\",attrs:{\"type\":\"text\",\"maxlength\":\"16\",\"placeholder\":\"Custom save name\"},domProps:{\"value\":_vm.saveFileName},on:{\"change\":_vm.handleChange}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveFileName.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveFileName.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SaveFileName.vue?vue&type=template&id=295855b9&scoped=true&\"\nimport script from \"./SaveFileName.vue?vue&type=script&lang=js&\"\nexport * from \"./SaveFileName.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SaveFileName.vue?vue&type=style&index=0&id=295855b9&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"295855b9\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsSavingTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsSavingTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OptionsSavingTab.vue?vue&type=template&id=0b5a7873&\"\nimport script from \"./OptionsSavingTab.vue?vue&type=script&lang=js&\"\nexport * from \"./OptionsSavingTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-options-tab\"},[_c('div',{staticClass:\"l-options-grid\"},[_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-large\",attrs:{\"onclick\":\"GameOptions.toggleUI()\"}},[_vm._v(\" \"+_vm._s(_vm.UILabel)+\" \")]),_c('UpdateRateSlider'),_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.newsOptions.show();\"}},[_vm._v(\" Open News Options \")])],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('ExpandingControlBox',{staticClass:\"l-options-grid__button c-options-grid__notations\",attrs:{\"button-class\":\"o-primary-btn o-primary-btn--option l-options-grid__notations-header\",\"label\":_vm.themeLabel},scopedSlots:_vm._u([{key:\"dropdown\",fn:function(){return [_c('SelectThemeDropdown')]},proxy:true}])}),_c('ExpandingControlBox',{staticClass:\"l-options-grid__button c-options-grid__notations\",attrs:{\"button-class\":\"o-primary-btn o-primary-btn--option l-options-grid__notations-header\",\"label\":_vm.notationLabel},scopedSlots:_vm._u([{key:\"dropdown\",fn:function(){return [_c('SelectNotationDropdown')]},proxy:true}])}),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",attrs:{\"label\":\"Exponent formatting:\",\"on\":\"Commas\",\"off\":\"Notation\"},model:{value:(_vm.commas),callback:function ($$v) {_vm.commas=$$v},expression:\"commas\"}})],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.animationOptions.show();\"}},[_vm._v(\" Open Animation Options \")]),_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.infoDisplayOptions.show()\"}},[_vm._v(\" Open Info Display Options \")]),_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.awayProgressOptions.show()\"}},[_vm._v(\" Open Away Progress Options \")])],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.hiddenTabs.show()\"}},[_vm._v(\" Modify Visible Tabs \")]),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",attrs:{\"label\":\"Relative prestige gain text coloring:\"},model:{value:(_vm.headerTextColored),callback:function ($$v) {_vm.headerTextColored=$$v},expression:\"headerTextColored\"}})],1),_c('OpenModalHotkeysButton')],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-select-notation\"},[_c('div',{staticClass:\"l-select-notation__inner\"},_vm._l((_vm.notations),function(notation){return _c('div',{key:notation.name,staticClass:\"o-primary-btn l-select-notation__item c-select-notation__item\",on:{\"click\":function($event){return notation.setAsCurrent()}}},[_vm._v(\" \"+_vm._s(notation.name)+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectNotationDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectNotationDropdown.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SelectNotationDropdown.vue?vue&type=template&id=4f8179fc&\"\nimport script from \"./SelectNotationDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./SelectNotationDropdown.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-select-theme\"},[_c('div',{staticClass:\"l-select-theme__inner\"},_vm._l((_vm.themes),function(theme){return _c('div',{key:theme.name,staticClass:\"o-primary-btn l-select-theme__item c-select-theme__item\",on:{\"click\":function($event){return theme.set()}}},[_vm._v(\" \"+_vm._s(theme.displayName())+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectThemeDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectThemeDropdown.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SelectThemeDropdown.vue?vue&type=template&id=6185ed8f&\"\nimport script from \"./SelectThemeDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./SelectThemeDropdown.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-primary-btn o-primary-btn--option o-primary-btn--slider l-options-grid__button\"},[_c('b',[_vm._v(\"Update rate: \"+_vm._s(_vm.formatInt(_vm.updateRate))+\" ms\")]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.updateRate},on:{\"input\":function($event){return _vm.adjustSliderValue($event)}}},'SliderComponent',_vm.sliderProps,false))],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UpdateRateSlider.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UpdateRateSlider.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UpdateRateSlider.vue?vue&type=template&id=dab7ac84&\"\nimport script from \"./UpdateRateSlider.vue?vue&type=script&lang=js&\"\nexport * from \"./UpdateRateSlider.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsVisualTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsVisualTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OptionsVisualTab.vue?vue&type=template&id=43c7c945&\"\nimport script from \"./OptionsVisualTab.vue?vue&type=script&lang=js&\"\nexport * from \"./OptionsVisualTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-stats-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('button',{staticClass:\"o-primary-btn o-primary-btn--subtab-option\",on:{\"click\":function($event){return _vm.cycleButton()}}},[_vm._v(\" Showing \"+_vm._s(_vm.resourceText)+\" \")])]),_vm._l((_vm.layers),function(layer){return _c('PastPrestigeRunsContainer',{key:layer.name,attrs:{\"layer\":layer}})})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.condition)?_c('div',[_c('div',{staticClass:\"c-past-runs-header\",on:{\"click\":_vm.toggleShown}},[_c('span',{staticClass:\"o-run-drop-down-icon\"},[_c('i',{class:_vm.dropDownIconClass})]),_c('span',[_c('h3',[_vm._v(\"Last \"+_vm._s(_vm.formatInt(10))+\" \"+_vm._s(_vm.plural)+\":\")])])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.shown),expression:\"shown\"}]},[_c('div',{staticClass:\"c-row-container\"},_vm._l((_vm.infoCol()),function(entry,col){return _c('span',{key:col,style:(_vm.cellStyle(col, true))},[_vm._v(\" \"+_vm._s(entry)+\" \")])}),0),_vm._l((_vm.runs),function(run,index){return _c('div',{key:index},[(run[0] === Number.MAX_VALUE)?_c('span',{staticClass:\"c-empty-row\"},[(index === 10)?_c('i',[_vm._v(\" An average cannot be calculated with no \"+_vm._s(_vm.plural)+\". \")]):_c('i',[_vm._v(\" You have not done \"+_vm._s(_vm.formatInt(index + 1))+\" \"+_vm._s(index === 0 ? _vm.singular : _vm.plural)+\" yet. \")])]):_c('span',{staticClass:\"c-row-container\"},_vm._l((_vm.infoArray(run, index)),function(entry,col){return _c('span',{key:10 * index + col,style:(_vm.cellStyle(col, false))},[_vm._v(\" \"+_vm._s(entry)+\" \")])}),0)])}),_c('br')],2)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PastPrestigeRunsContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PastPrestigeRunsContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PastPrestigeRunsContainer.vue?vue&type=template&id=38893b62&scoped=true&\"\nimport script from \"./PastPrestigeRunsContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./PastPrestigeRunsContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PastPrestigeRunsContainer.vue?vue&type=style&index=0&id=38893b62&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"38893b62\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PastPrestigeRunsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PastPrestigeRunsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PastPrestigeRunsTab.vue?vue&type=template&id=34e05178&\"\nimport script from \"./PastPrestigeRunsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./PastPrestigeRunsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-pelle-celestial-tab\"},[(_vm.isDoomed)?_c('div',{staticClass:\"l-pelle-all-content-container\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"pelle\"}}),_c('div',{staticClass:\"button-container\"},[_c('button',{staticClass:\"o-pelle-button\",on:{\"click\":_vm.showModal}},[_vm._v(\" Show effects in Doomed Reality \")])]),_c('br'),(_vm.hasGalaxyGenerator)?_c('GalaxyGeneratorPanel'):_vm._e(),(_vm.hasStrike)?_c('PelleBarPanel'):_vm._e(),_c('PelleUpgradePanel')],1):(_vm.canEnterPelle)?_c('button',{staticClass:\"pelle-doom-button\",on:{\"click\":_vm.enterDoomModal}},[_vm._v(\" Doom\"),_c('br'),_vm._v(\"Your\"),_c('br'),_vm._v(\"Reality \"),_c('div',{staticClass:\"pelle-icon-container\"},[_c('span',{staticClass:\"pelle-icon\"},[_vm._v(_vm._s(_vm.symbol))])])]):_c('div',{staticClass:\"pelle-unlock-requirements\"},[_vm._v(\" You must have \"+_vm._s(_vm.formatInt(_vm.totalRows))+\" rows of Achievements, all of your Glyph Alchemy Resources capped, and Omnipresent Obliteration purchased to unlock Pelle, Celestial of Antimatter. \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.formatInt(_vm.completedRows))+\" / \"+_vm._s(_vm.formatInt(_vm.totalRows))+\" Achievement rows completed \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.formatInt(_vm.cappedResources))+\" / \"+_vm._s(_vm.formatInt(_vm.totalAlchemyResources))+\" capped Alchemy Resources \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-pelle-panel-container\"},[_c('div',{staticClass:\"c-pelle-panel-title\"},[(!_vm.isCapped)?_c('i',{staticClass:\"c-collapse-icon-clickable\",class:_vm.collapseIcon,on:{\"click\":_vm.toggleCollapse}}):_vm._e(),_vm._v(\" Galaxy Generator \")]),(!_vm.isCollapsed)?_c('div',{staticClass:\"l-pelle-content-container\"},[(_vm.isUnlocked)?_c('div',[_c('div',[_vm._v(\" You have a total of \"),_c('span',{staticClass:\"c-galaxies-amount\"},[_vm._v(_vm._s(_vm.galaxyText))]),_vm._v(\" Galaxies. \"),_c('span',{staticClass:\"c-galaxies-amount\"},[_vm._v(\"+\"+_vm._s(_vm.format(_vm.galaxiesPerSecond, 2, 1))+\"/s\")])]),_c('div',{staticClass:\"l-spoon-btn-group\"},[_c('div',[_c('button',{staticClass:\"c-increase-cap\",class:{\n 'c-increase-cap-available': _vm.isCapped && _vm.capRift && !_vm.sacrificeActive,\n 'tutorial--glow': _vm.cap === Infinity\n },on:{\"click\":_vm.increaseCap}},[_c('div',{staticClass:\"c-increase-cap-background\",style:({ 'width': ((_vm.barWidth * 100) + \"%\") })}),(_vm.isCapped && _vm.capRift)?_c('div',{staticClass:\"c-increase-cap-text\"},[_vm._v(\" \"+_vm._s(_vm.sacrificeText)+\". \"),_c('br'),_c('br'),(!_vm.sacrificeActive)?_c('span',{staticClass:\"c-big-text\"},[_vm._v(\" Sacrifice your \"+_vm._s(_vm.capRiftName)+\" \")]):_c('span',{staticClass:\"c-big-text\"},[_vm._v(\" Getting rid of all that \"+_vm._s(_vm.capRiftName)+\"... \")])]):_c('div',{staticClass:\"c-increase-cap-text c-medium-text\"},[(_vm.cap === Infinity)?_c('div',[_vm._v(_vm._s(_vm.format(_vm.generatedGalaxies, 2))+\" Galaxies generated\")]):_c('div',[_vm._v(_vm._s(_vm.format(_vm.generatedGalaxies, 2))+\" / \"+_vm._s(_vm.format(_vm.cap, 2))+\" Galaxies generated\")])])])]),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticStyle:{\"margin-top\":\"-.75rem\",\"max-width\":\"70rem\",\"width\":\"100%\",\"align-self\":\"center\"},attrs:{\"label\":\"Auto\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1),_c('div',{staticClass:\"l-galaxy-generator-upgrades-container\"},_vm._l((_vm.upgrades),function(upgrade){return _c('PelleUpgrade',{key:upgrade.config.id,attrs:{\"upgrade\":upgrade,\"galaxy-generator\":true}})}),1)]):_c('button',{staticClass:\"c-generator-unlock-button\",on:{\"click\":_vm.unlock}},[_vm._v(\" Unlock the Galaxy Generator \")])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"c-pelle-upgrade\",class:{\n 'c-pelle-upgrade--unavailable': !_vm.canBuy && !(_vm.isBought || _vm.isCapped),\n 'c-pelle-upgrade--bought': _vm.isBought || _vm.isCapped,\n 'c-pelle-upgrade--faded': _vm.faded,\n 'c-pelle-upgrade--galaxyGenerator': _vm.galaxyGenerator\n },on:{\"click\":function($event){!_vm.faded && _vm.upgrade.purchase()},\"mouseover\":function($event){_vm.hovering = true},\"mouseleave\":function($event){_vm.hovering = false}}},[_c('CustomizeableTooltip',{attrs:{\"show\":_vm.shouldEstimateImprovement,\"left\":\"50%\",\"top\":\"0\"},scopedSlots:_vm._u([{key:\"tooltipContent\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.estimateImprovement)+\" \")]},proxy:true}])}),(_vm.timeEstimate)?_c('CustomizeableTooltip',{attrs:{\"left\":\"50%\",\"top\":\"0\",\"content-class\":\"l-fill-container\"},scopedSlots:_vm._u([{key:\"tooltipContent\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.timeEstimate)+\" \")]},proxy:true}],null,false,1945308655)}):_vm._e(),_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),_c('div',{staticClass:\"l-pelle-upgrade-gap\"}),(_vm.effectText)?_c('div',[_vm._v(\" \"+_vm._s(_vm.effectText.prefix)+\" \"+_vm._s(_vm.effectText.value)+\" \"),(_vm.effectText.next)?[_vm._v(\" ➜ \"),_c('span',{class:{\n 'c-improved-effect': _vm.canBuy,\n 'c-improved-effect--unavailable': !_vm.canBuy,\n }},[_vm._v(\" \"+_vm._s(_vm.effectText.next)+\" \")])]:_vm._e(),_c('div',{staticClass:\"l-pelle-upgrade-gap\"})],2):_vm._e(),(!_vm.isCapped)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"name\":_vm.galaxyGenerator ? _vm.config.currencyLabel : 'Reality Shard'}}):_vm._e()],1),((_vm.isRebuyable || _vm.galaxyGenerator) && _vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon\",staticStyle:{\"margin-top\":\"-.5rem\",\"width\":\"18.5rem\",\"margin-left\":\"0.3rem\"},attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-custom-tooltip\"},[_c('div',{staticClass:\"c-main-content\",class:_vm.contentClass,style:(Object.assign({}, _vm.positionStyle, {transform: _vm.contentTransform})),on:{\"mouseenter\":function($event){_vm.hovering = true},\"mouseleave\":function($event){_vm.hovering = false}}},[_vm._t(\"mainContent\")],2),_c('div',{staticClass:\"c-tooltip-content\",class:_vm.tooltipContentClass,style:([_vm.tooltipContentStyle, _vm.positionStyle, { transform: _vm.tooltipTransform }])},[_vm._t(\"tooltipContent\")],2),_c('div',{staticClass:\"c-tooltip-arrow\",class:_vm.tooltipArrowClass,style:([_vm.tooltipArrowStyle, _vm.positionStyle, { transform: _vm.tooltipTransform }])})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomizeableTooltip.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomizeableTooltip.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CustomizeableTooltip.vue?vue&type=template&id=7d84efdb&scoped=true&\"\nimport script from \"./CustomizeableTooltip.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomizeableTooltip.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomizeableTooltip.vue?vue&type=style&index=0&id=7d84efdb&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7d84efdb\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleUpgrade.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleUpgrade.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleUpgrade.vue?vue&type=template&id=5883e125&scoped=true&\"\nimport script from \"./PelleUpgrade.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleUpgrade.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleUpgrade.vue?vue&type=style&index=0&id=5883e125&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5883e125\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleGalaxyGeneratorPanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleGalaxyGeneratorPanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleGalaxyGeneratorPanel.vue?vue&type=template&id=6db9a0ba&scoped=true&\"\nimport script from \"./PelleGalaxyGeneratorPanel.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleGalaxyGeneratorPanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleGalaxyGeneratorPanel.vue?vue&type=style&index=0&id=6db9a0ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6db9a0ba\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-pelle-panel-container\"},[_c('div',{staticClass:\"c-pelle-panel-title\"},[_c('i',{staticClass:\"c-collapse-icon-clickable\",class:_vm.collapseIcon,on:{\"click\":_vm.toggleCollapse}}),_vm._v(\" Pelle Strikes and Rifts \")]),(!_vm.isCollapsed)?_c('div',{staticClass:\"l-pelle-content-container\"},[_vm._v(\" Rifts can be activated by clicking on their bars. \"),(_vm.strikes.length > 1)?_c('span',[_vm._v(\"You cannot activate more than two Rifts at once.\")]):_c('br'),_vm._v(\" When active, Rifts consume \"+_vm._s(_vm.formatPercents(_vm.decayRate))+\" of another resource per second. \"),_c('br'),_vm._v(\" Rift effects apply even when not activated, and are based on the total amount drained. \"),_c('b',{staticClass:\"o-strike-warning\"},[_vm._v(\"Pelle Strike penalties are permanent and remain active even after Armageddon!\")]),_c('div',{staticClass:\"c-pelle-bar-container\"},_vm._l((_vm.strikes),function(strike){return _c('PelleRift',{key:strike.config.id,attrs:{\"strike\":strike}})}),1)]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasStrike)?_c('div',{staticClass:\"c-pelle-single-bar\"},[_c('div',{staticClass:\"c-pelle-rift\"},[_c('div',{staticClass:\"c-pelle-rift-row\"},[_c('div',{staticClass:\"c-pelle-rift-column c-pelle-rift-status\"},[_c('h2',{staticClass:\"c-pelle-rift-name-header\"},[_vm._v(\" \"+_vm._s(_vm.riftName())+\" \")]),_c('div',{staticClass:\"c-pelle-rift-rift-info-container\"},_vm._l((_vm.effects),function(effect,idx){return _c('div',{key:idx},[_vm._v(\" \"+_vm._s(effect || \"\")+\" \")])}),0)]),_c('div',{staticClass:\"c-pelle-rift-column\"},[_c('PelleStrike',{attrs:{\"strike\":_vm.strike}}),_c('PelleRiftBar',{attrs:{\"rift\":_vm.rift}})],1),_c('div',{staticClass:\"c-pelle-rift-status\"},[_c('div',{staticClass:\"c-pelle-rift-fill-status\"},[_c('h2',{staticClass:\"c-pelle-rift-name-header\"},[_vm._v(\" \"+_vm._s(_vm.riftName())+\" \")]),_c('div',{staticClass:\"c-pelle-rift-rift-info-container\"},[_vm._v(\" Drains \"+_vm._s(_vm.drainResource())+\" to fill. \"),(_vm.specialRift)?_c('span',{attrs:{\"ach-tooltip\":_vm.infoTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})]):_vm._e(),_c('br'),(!_vm.isMaxed)?[_vm._v(\" Current Amount: \"+_vm._s(_vm.formatRift(_vm.resource))+\" \")]:_vm._e(),_c('br'),_vm._v(\" Total Filled: \"+_vm._s(_vm.formatRift(_vm.rift.totalFill))+\" \")],2)])])])])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"pelleRiftBar\",staticClass:\"c-pelle-rift-bar\",class:{\n 'c-pelle-rift-bar-overfill-container': _vm.percentage > 1,\n 'c-pelle-rift-bar--idle': !_vm.isActive && !_vm.isMaxed,\n 'c-pelle-rift-bar--filling': _vm.isActive\n },on:{\"mousemove\":_vm.handleMilestoneRequirementTooltipDisplay,\"click\":_vm.toggle}},[_c('div',{staticClass:\"l-overflow-hidden\"},[_c('div',{class:_vm.barOverlay()}),_c('div',{staticClass:\"o-pelle-rift-bar-fill\",style:({\n width: ((Math.clampMax(_vm.percentage * 100, 100)) + \"%\"),\n })}),(_vm.reducedTo < 1)?_c('div',{staticClass:\"o-pelle-rift-bar-reducedto\",style:({\n width: ((Math.clampMax(100 - _vm.reducedTo * 100, 100)) + \"%\"),\n })}):_vm._e(),_c('div',{staticClass:\"o-pelle-rift-bar-overlay\"}),(_vm.isActive && !_vm.isMaxed)?_c('div',{staticClass:\"o-pelle-rift-bar-active-fill\"}):_vm._e(),_vm._l((_vm.rift.milestones),function(milestone,idx){return _c('div',{key:'milestone-line-' + idx,staticClass:\"o-pelle-rift-bar-milestone-line\",class:{\n 'o-pelle-rift-bar-milestone-line--unlocked': _vm.hasMilestone(milestone),\n 'o-pelle-rift-bar-milestone-line--disabled': _vm.reducedTo < milestone.requirement\n },style:({\n left: (\"calc(\" + (milestone.requirement * 100) + \"% - 0.25rem)\")\n })})})],2),_c('div',{staticClass:\"o-pelle-rift-bar-percentage\"},[_vm._v(\" \"+_vm._s(_vm.formatPercents(_vm.percentage, 3))+\" \"),(!_vm.isMaxed)?_c('span',[_vm._v(\"(\"+_vm._s(_vm.isActive ? \"Filling\" : \"Idle\")+\")\")]):_vm._e()]),_c('CustomizeableTooltip',{staticClass:\"o-pelle-rift-bar-milestone-hover-container\",attrs:{\"tooltip-class\":_vm.tooltipContentClass(),\"tooltip-arrow-style\":_vm.tooltipArrowStyle,\"left\":(\"calc(\" + (_vm.selectedHoverMilestone.requirement * 100) + \"% - 0.1rem)\"),\"content-class\":\"o-pelle-rift-bar-milestone-hover-area\"},scopedSlots:_vm._u([{key:\"tooltipContent\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.selectedMilestoneResourceText)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.selectedMilestoneDescriptionText)+\" \")]},proxy:true}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleRiftBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleRiftBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleRiftBar.vue?vue&type=template&id=4370f872&scoped=true&\"\nimport script from \"./PelleRiftBar.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleRiftBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleRiftBar.vue?vue&type=style&index=0&id=4370f872&scoped=true&lang=css&\"\nimport style1 from \"./PelleRiftBar.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4370f872\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-pelle-strike-container\"},[_c('ExpandingControlBox',{attrs:{\"container-class\":\"c-pelle-strike\"},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"c-pelle-strike-header\"},[_vm._v(\" ▼ \"+_vm._s(_vm.strike.requirement)+\" ▼ \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('div',{staticClass:\"c-pelle-strike-dropdown\"},[_c('span',[_vm._v(\"Penalty: \"+_vm._s(_vm.strike.penalty))]),_c('br'),_c('span',[_vm._v(\"Reward: \"+_vm._s(_vm.strikeReward))])])]},proxy:true}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleStrike.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleStrike.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleStrike.vue?vue&type=template&id=3d6b11a3&\"\nimport script from \"./PelleStrike.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleStrike.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleStrike.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleRift.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleRift.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleRift.vue?vue&type=template&id=aa9407ec&scoped=true&\"\nimport script from \"./PelleRift.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleRift.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleRift.vue?vue&type=style&index=0&id=aa9407ec&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"aa9407ec\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleBarPanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleBarPanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleBarPanel.vue?vue&type=template&id=320a9096&scoped=true&\"\nimport script from \"./PelleBarPanel.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleBarPanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleBarPanel.vue?vue&type=style&index=0&id=320a9096&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"320a9096\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-pelle-panel-container\"},[_c('div',{staticClass:\"c-pelle-panel-title\"},[_c('i',{staticClass:\"c-collapse-icon-clickable\",class:_vm.collapseIcon,on:{\"click\":_vm.toggleCollapse}}),_vm._v(\" Pelle Upgrades \")]),(!_vm.isCollapsed)?_c('div',{staticClass:\"l-pelle-content-container\"},[_c('div',{staticClass:\"c-armageddon-container\"},[_c('div',[_c('div',{staticClass:\"c-armageddon-button-container\",on:{\"mouseover\":function($event){_vm.isHovering = true},\"mouseleave\":function($event){_vm.isHovering = false}}},[_c('ArmageddonButton')],1),_c('RemnantGainFactor',{attrs:{\"hide\":_vm.showImprovedEstimate}})],1),_c('div',{staticClass:\"c-armageddon-resources-container\"},[_c('div',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-remnants-amount\"},[_vm._v(_vm._s(_vm.format(_vm.remnants, 2)))]),_vm._v(\" Remnants. \")]),_c('div',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-remnants-amount\"},[_vm._v(_vm._s(_vm.format(_vm.realityShards, 2)))]),_vm._v(\" Reality Shards. \"),_c('span',{staticClass:\"c-remnants-amount\"},[_vm._v(\"+\"+_vm._s(_vm.format(_vm.shardRate, 2, 2))+\"/s\")])])])]),_c('div',{staticClass:\"c-pelle-upgrade-container\"},_vm._l((_vm.rebuyables),function(upgrade){return _c('PelleUpgradeVue',{key:upgrade.config.id,attrs:{\"upgrade\":upgrade,\"show-improved-estimate\":_vm.showImprovedEstimate,\"isRebuyable\":true}})}),1),_c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"o-pelle-button\",on:{\"click\":_vm.toggleBought}},[_vm._v(\" \"+_vm._s(_vm.showBought ? \"Showing bought upgrades\" : \"Bought upgrades hidden\")+\" \")]),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon\",staticStyle:{\"margin-top\":\"-.3rem\"},attrs:{\"label\":\"Auto\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1),(_vm.allUpgrades.length)?_c('div',{staticClass:\"c-pelle-upgrade-container\"},[_vm._l((_vm.allUpgrades),function(upgrade){return _c('PelleUpgradeVue',{key:upgrade.config.id,attrs:{\"upgrade\":upgrade,\"show-improved-estimate\":_vm.showImprovedEstimate}})}),_vm._l((_vm.fadedUpgrades),function(upgrade){return _c('PelleUpgradeVue',{key:upgrade.config.id,attrs:{\"upgrade\":upgrade,\"faded\":\"\"}})})],2):_c('div',[_vm._v(\" No upgrades to show! \")])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-remnant-factors-container\"},[_c('ExpandingControlBox',{style:({ opacity: _vm.opacity }),attrs:{\"container-class\":\"c-remnant-factors\",\"label\":\"Remnant Gain Factors\"},scopedSlots:_vm._u([{key:\"dropdown\",fn:function(){return [_c('div',{staticClass:\"c-remnant-factors-text\"},[_vm._v(\" Best AM: \"+_vm._s(_vm.format(_vm.best.am, 2, 2))),_c('br'),_vm._v(\" Best IP: \"+_vm._s(_vm.format(_vm.best.ip, 2, 2))),_c('br'),_vm._v(\" Best EP: \"+_vm._s(_vm.format(_vm.best.ep, 2, 2))),_c('br'),_c('br'),_c('div',{staticClass:\"l-remnant-factors-row\"},[_c('div',{staticClass:\"l-remnant-factors-col l-remnant-factors-col--first\"},[_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" log10(log10(AM)\"+_vm._s(_vm.dilationMult[0] > 1 ? (\"*\" + (_vm.dilationMult[0])) : \"\")+\" + 2) \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" log10(log10(IP)\"+_vm._s(_vm.dilationMult[1] > 1 ? (\"*\" + (_vm.dilationMult[1])) : \"\")+\" + 2) \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" log10(log10(EP)\"+_vm._s(_vm.dilationMult[2] > 1 ? (\"*\" + (_vm.dilationMult[2])) : \"\")+\" + 2) \")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.MendingUnlocked),expression:\"MendingUnlocked\"}],staticClass:\"l-remnant-factors-item\"},[_vm._v(\" 1 Mend Milestone \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" Static divisor \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" Static power \")]),(!_vm.autoRemnantGain)?_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" Existing Remnants \")]):_vm._e(),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" Final amount \")])]),_c('div',{staticClass:\"l-remnant-factors-col\"},[_c('div',{staticClass:\"l-remnant-factors-item\"}),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" + \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" + \")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.MendingUnlocked),expression:\"MendingUnlocked\"}],staticClass:\"l-remnant-factors-item\"},[_vm._v(\" * \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" / \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" ^ \")]),(!_vm.autoRemnantGain)?_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" - \")]):_vm._e()]),_c('div',{staticClass:\"l-remnant-factors-col\"},[_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(Math.log10(_vm.best.am.add(1).log10()*_vm.dilationMult[0] + 2), 2, 2))+\" \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(Math.log10(_vm.best.ip.add(1).log10()*_vm.dilationMult[0] + 2), 2, 2))+\" \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(Math.log10(_vm.best.ep.add(1).log10()*_vm.dilationMult[0] + 2), 2, 2))+\" \")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.MendingUnlocked),expression:\"MendingUnlocked\"}],staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(1.1, 2, 1))+\" \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(1.64, 2, 2))+\" \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(7.5, 2, 2))+\" \")]),(!_vm.autoRemnantGain)?_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.remnants, 2, 0))+\" \")]):_vm._e(),(!_vm.autoRemnantGain)?_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.remnantsGain, 2, _vm.remnantsGain >= 1 ? 0 : 2))+\" \")]):_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.remnants, 2, 0))+\" \")])])])])]},proxy:true}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RemnantGainFactor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RemnantGainFactor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RemnantGainFactor.vue?vue&type=template&id=22b0df19&\"\nimport script from \"./RemnantGainFactor.vue?vue&type=script&lang=js&\"\nexport * from \"./RemnantGainFactor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RemnantGainFactor.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleUpgradePanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleUpgradePanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleUpgradePanel.vue?vue&type=template&id=2eb69680&scoped=true&\"\nimport script from \"./PelleUpgradePanel.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleUpgradePanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleUpgradePanel.vue?vue&type=style&index=0&id=2eb69680&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2eb69680\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleTab.vue?vue&type=template&id=57ae2e2e&scoped=true&\"\nimport script from \"./PelleTab.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleTab.vue?vue&type=style&index=0&id=57ae2e2e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57ae2e2e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-previous-runs\"},[_c('b',[_vm._v(\"You have completed \"+_vm._s(_vm.quantify(\"speedrun\", _vm.numRuns, 0, 0, function (x) { return x; }))+\" prior to this playthrough.\")]),_c('b',[_vm._v(\"Statistics of previous runs are below, mouseover icons for more details.\")]),_c('b',[_vm._v(\"Click the magnifying glass to compare the milestones on a particular run to this run.\")]),_c('b',[_vm._v(_vm._s(_vm.spectateText))]),_c('br'),(_vm.highestIndex > 10)?_c('div',{staticClass:\"c-run-page-nav\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option fas fa-arrow-left\",class:{ 'o-primary-btn--disabled' : _vm.runPage === 0 },on:{\"click\":function($event){return _vm.changePage(-1)}}}),_vm._v(\" Showing runs \"+_vm._s(10 * _vm.runPage + 1)+\" to \"+_vm._s(10 * (_vm.runPage + 1))+\" (\"+_vm._s(_vm.highestIndex)+\" total runs) \"),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option fas fa-arrow-right\",class:{ 'o-primary-btn--disabled' : _vm.runPage + 1 > _vm.highestIndex / 10 },on:{\"click\":function($event){return _vm.changePage(1)}}})],1):_vm._e(),_c('div',{staticClass:\"c-previous-runs\"},_vm._l((10),function(entry){return _c('span',{key:entry},[(10 * _vm.runPage + entry <= _vm.highestIndex)?_c('span',{staticClass:\"c-single-run\"},[(_vm.findRun(entry))?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option fas fa-magnifying-glass\",class:{ 'o-selected-btn' : _vm.selectedRun === 10 * _vm.runPage + entry },on:{\"click\":function($event){return _vm.selectRun(10 * _vm.runPage + entry)}}}):_vm._e(),_c('PreviousSpeedrunInfo',{attrs:{\"prev-run-info\":_vm.findRun(entry),\"index\":10 * _vm.runPage + entry}})],1):_vm._e()])}),0),_c('br'),_vm._m(0),_c('div',{staticClass:\"l-speedrun-milestone-tab\"},_vm._l((_vm.milestones),function(milestone){return _c('SpeedrunMilestoneCompare',{key:milestone.id,attrs:{\"milestone\":milestone,\"curr-time\":_vm.milestoneTimes[milestone.id],\"ref-time\":_vm.selectedRun ? _vm.previousRuns.find(function (run) { return run.id === _vm.selectedRun; }).records[milestone.id] : null,\"best-time\":_vm.bestPreviousTimes[milestone.id].time,\"run-indices\":[_vm.selectedRun, _vm.bestPreviousTimes[milestone.id].index]}})}),1)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-legend\"},[_c('div',{staticClass:\"c-legend-cell\"},[_c('span',{staticClass:\"o-box l-milestone-none\"}),_vm._v(\" Not reached this run \")]),_c('div',{staticClass:\"c-legend-cell\"},[_c('span',{staticClass:\"o-box l-milestone-slow\"}),_vm._v(\" Slower than comparison \")]),_c('div',{staticClass:\"c-legend-cell\"},[_c('span',{staticClass:\"o-box l-milestone-fast\"}),_vm._v(\" Faster than comparison \")]),_c('div',{staticClass:\"c-legend-cell\"},[_c('span',{staticClass:\"o-box l-milestone-fastest\"}),_vm._v(\" Faster than best \")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.prevRunInfo)?_c('div',{staticClass:\"c-icon-container\"},[_c('span',[_vm._v(\"Run \"+_vm._s(_vm.index))]),_c('span',[_vm._v(_vm._s(_vm.prevRunInfo.name))]),_vm._l((_vm.iconAttrs),function(attr){return _c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(attr.text),expression:\"attr.text\"}],key:attr.icon,class:attr.icon})}),_c('span',[_vm._v(\"Started: \"+_vm._s(_vm.startDate))]),_c('span',[_vm._v(\"Final Time: \"+_vm._s(_vm.finalTime))])],2):_c('div',{staticClass:\"c-no-record\"},[_vm._v(\" No speedrun records found for run \"+_vm._s(_vm.index)+\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PreviousSpeedrunInfo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PreviousSpeedrunInfo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PreviousSpeedrunInfo.vue?vue&type=template&id=0c86ef47&scoped=true&\"\nimport script from \"./PreviousSpeedrunInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./PreviousSpeedrunInfo.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PreviousSpeedrunInfo.vue?vue&type=style&index=0&id=0c86ef47&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0c86ef47\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject},[_c('span',{staticClass:\"l-milestone-title\"},[_vm._v(_vm._s(_vm.milestone.name))]),_c('span',{style:(_vm.timeStyle(_vm.currTime))},[_vm._v(\"Current run: \"+_vm._s(_vm.timeString(_vm.currTime)))]),(_vm.refTime)?_c('span',{style:(_vm.timeStyle(_vm.refTime))},[_vm._v(\" Run \"+_vm._s(_vm.runIndices[0])+\": \"+_vm._s(_vm.timeString(_vm.refTime, true))+\" \")]):_vm._e(),_c('span',{style:(_vm.timeStyle(_vm.bestTime))},[_vm._v(\"Best (\"+_vm._s(_vm.runIndices[1])+\"): \"+_vm._s(_vm.timeString(_vm.bestTime, true)))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunMilestoneCompare.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunMilestoneCompare.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedrunMilestoneCompare.vue?vue&type=template&id=ade67c12&scoped=true&\"\nimport script from \"./SpeedrunMilestoneCompare.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedrunMilestoneCompare.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SpeedrunMilestoneCompare.vue?vue&type=style&index=0&id=ade67c12&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ade67c12\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PreviousSpeedrunTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PreviousSpeedrunTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PreviousSpeedrunTab.vue?vue&type=template&id=e1e0cc3c&scoped=true&\"\nimport script from \"./PreviousSpeedrunTab.vue?vue&type=script&lang=js&\"\nexport * from \"./PreviousSpeedrunTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PreviousSpeedrunTab.vue?vue&type=style&index=0&id=e1e0cc3c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e1e0cc3c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-ra-celestial-tab\"},[_c('div',{staticClass:\"c-ra-memory-header\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"ra\"}}),(!_vm.isRaCapped)?_c('div',[_vm._v(\" Each Memory Chunk generates a base of one Memory per second\"),(_vm.memoriesPerChunk > 1)?_c('span',[_vm._v(\", which has been increased to \"+_vm._s(_vm.quantify(\"Memory\", _vm.memoriesPerChunk, 2, 3))+\" per second\")]):_vm._e(),_vm._v(\". \"),_c('br'),_vm._v(\" Storing real time prevents Memory Chunk generation, but Memories will still be gained normally. \"),(_vm.memoriesPerChunk > 1)?_c('span',[_c('br'),_vm._v(\" This is being increased due to \"+_vm._s(_vm.memoryBoosts)+\". \")]):_vm._e()]):_c('div',[_vm._v(\" All Memories have been returned. \")])],1),_vm._m(0),_c('div',{staticClass:\"l-ra-all-pets-container\"},_vm._l((_vm.pets),function(pet,i){return _c('RaPet',{key:i,attrs:{\"pet-config\":pet}})}),1),_c('div',{staticClass:\"l-ra-non-pets\",staticStyle:{\"flex-wrap\":\"wrap\"}},[_c('button',{staticClass:\"c-ra-run-button\"},[_c('h2',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[(_vm.isRunning)?_c('span',[_vm._v(\"You are in \")]):_c('span',[_vm._v(\"Start \")]),_vm._v(\" Ra's Reality \")]),_c('div',{class:_vm.runButtonClassObject,on:{\"click\":_vm.startRun}},[_c('span',{staticClass:\"c-ra-run-button__icon__sigil fas fa-sun\"})]),_vm._l((_vm.runDescription),function(line,lineId){return _c('span',{key:lineId + '-ra-run-desc',class:{ 'o-pelle-disabled': lineId===0 && _vm.dimboostUncapped}},[_vm._v(\" \"+_vm._s(line)+\" \")])}),_c('br'),_c('span',[_vm._v(\" \"+_vm._s(_vm.memoryDescription)+\" \")])],2),(_vm.showRemembrance && !_vm.isRaCapped)?_c('div',{staticClass:\"c-ra-remembrance-unlock\"},[_c('h1',{style:(_vm.petStyle)},[_vm._v(\" Remembrance \")]),_c('span',{style:(_vm.petStyle)},[_vm._v(\" \"+_vm._s(_vm.remembranceDescription)+\" \")]),(_vm.hasRemembrance)?_c('div',{staticClass:\"c-ra-remembrance-unlock-inner\"},_vm._l((_vm.pets),function(pet,i){return _c('RaPetRemembranceButton',{key:i,attrs:{\"pet-config\":pet}})}),1):_c('div',{staticClass:\"c-ra-remembrance-unlock-inner\"},[_vm._v(\" Unlocked by getting \"+_vm._s(_vm.formatInt(_vm.remembranceReq))+\" total Celestial Memory levels (you need \"+_vm._s(_vm.formatInt(_vm.remembranceReq - _vm.totalLevels))+\" more) \")])]):_vm._e(),(this.shopUnlocked)?_c('div',[_c('RaUpgradePanel')],1):_vm._e()])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(\" Mouse-over the icons below the bar to see descriptions of upgrades, \"),_c('br'),_vm._v(\" and mouse-over \"),_c('i',{staticClass:\"fas fa-question-circle\"}),_vm._v(\" icons for specific resource information. \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('div',{staticClass:\"l-ra-pet-container\"},[_c('div',{staticClass:\"c-ra-pet-header\",style:(_vm.petStyle)},[_c('div',{staticClass:\"c-ra-pet-title\"},[_vm._v(\" \"+_vm._s(_vm.displayName)+\" Level \"+_vm._s(_vm.formatInt(_vm.level))+\"/\"+_vm._s(_vm.formatInt(_vm.levelCap))+\" \")]),(_vm.showScalingUpgrade)?_c('div',{key:_vm.level},[_vm._v(\" \"+_vm._s(_vm.scalingUpgradeText)+\" \")]):_c('br'),(!_vm.isCapped)?_c('div',[_c('div',[_vm._v(\" \"+_vm._s(_vm.name)+\" \"+_vm._s(_vm.pet.id === \"enslaved\" ? \"have\" : \"has\")+\" \"+_vm._s(_vm.quantify(\"Memory\", _vm.memories, 2))+\" \")])]):_vm._e(),(!_vm.isCapped)?_c('div',{staticClass:\"l-ra-pet-middle-container\"},[_c('div',{staticClass:\"l-ra-pet-upgrade-container\"},[_c('div',{staticClass:\"l-ra-pet-upgrade c-ra-pet-upgrade__top\"},[_c('div',{class:_vm.upgradeClassObject('memory'),on:{\"click\":function($event){return _vm.pet.purchaseMemoryUpgrade()}}},[_c('span',{staticClass:\"fas fa-brain\"}),(!_vm.memoryUpgradeCapped)?_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip\"},[_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.name)+\"'s Recollection \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__description\"},[_vm._v(\" Gain \"+_vm._s(_vm.formatPercents(0.3))+\" more Memories \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__footer\"},[_vm._v(\" Cost: \"+_vm._s(_vm.quantify(\"Memory\", _vm.memoryUpgradeCost, 2, 2))+\" \"),(_vm.memories <= _vm.memoryUpgradeCost)?_c('span',[_vm._v(\" \"+_vm._s(_vm.nextMemoryUpgradeEstimate)+\" \")]):_vm._e(),_c('br'),_vm._v(\" Currently: \"+_vm._s(_vm.formatX(_vm.currentMemoryMult, 2, 2))+\" \")])]):_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip\"},[_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.name)+\"'s Recollection \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__description\"},[_vm._v(\" Capped: \"+_vm._s(_vm.formatX(_vm.currentMemoryMult, 2, 2))+\" \")])])]),_c('div',{staticClass:\"c-ra-upgrade-bar\"},[_c('div',{staticClass:\"c-ra-upgrade-bar__inner\",style:(_vm.barStyle('memory'))})])]),_c('div',{staticClass:\"l-ra-pet-upgrade c-ra-pet-upgrade__bottom\"},[_c('div',{class:_vm.upgradeClassObject('chunk'),on:{\"click\":function($event){return _vm.pet.purchaseChunkUpgrade()}}},[_c('span',{staticClass:\"fas fa-dice-d6\"}),(!_vm.chunkUpgradeCapped)?_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip\"},[_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.name)+\"'s Fragmentation \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__description\"},[_vm._v(\" Gain \"+_vm._s(_vm.formatPercents(0.5))+\" more Memory Chunks \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__footer\"},[_vm._v(\" Cost: \"+_vm._s(_vm.quantify(\"Memory\", _vm.chunkUpgradeCost, 2, 2))+\" \"),(_vm.memories <= _vm.chunkUpgradeCost)?_c('span',[_vm._v(\" \"+_vm._s(_vm.nextMemoryChunkUpgradeEstimate)+\" \")]):_vm._e(),_c('br'),_vm._v(\" Currently: \"+_vm._s(_vm.formatX(_vm.currentChunkMult, 2, 2))+\" \")])]):_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip\"},[_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.name)+\"'s Fragmentation \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__description\"},[_vm._v(\" Capped: \"+_vm._s(_vm.formatX(_vm.currentChunkMult, 2, 2))+\" \")])])]),_c('div',{staticClass:\"c-ra-upgrade-bar c-ra-upgrade-bar--bottom\"},[_c('div',{staticClass:\"c-ra-upgrade-bar__inner\",style:(_vm.barStyle('chunk'))})])])]),(!_vm.isCapped)?_c('RaPetLevelBar',{attrs:{\"pet-config\":_vm.petConfig}}):_vm._e()],1):_vm._e(),(!_vm.isCapped)?_c('div',[_c('div',[_vm._v(\" \"+_vm._s(_vm.quantify(\"Memory Chunk\", _vm.memoryChunks, 2, 2))+\", \"+_vm._s(_vm.quantify(\"Memory\", _vm.memoriesPerSecond, 2, 2))+\"/sec \")]),_c('div',[_vm._v(\" Gaining \"+_vm._s(_vm.quantify(\"Memory Chunk\", _vm.memoryChunksPerSecond, 2, 2))+\"/sec \"),_c('span',{attrs:{\"ach-tooltip\":_vm.chunkTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})])]),(_vm.DEV)?_c('div',[_vm._v(\" Gaining \"+_vm._s(_vm.quantify(\"Base Memory Chunk\", _vm.baseMemoryChunksPerSecond, 2, 2))+\"/sec \"),_c('span',{attrs:{\"ach-tooltip\":_vm.chunkTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})])]):_vm._e()]):_vm._e(),(_vm.memoryMultiplier > 1 && !_vm.isRaCapped)?_c('div',[_vm._v(\" Multiplying all Memory production by \"+_vm._s(_vm.format(_vm.memoryMultiplier, 2, 3))+\" \"),_c('span',{attrs:{\"ach-tooltip\":_vm.memoryGainTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})])]):(!_vm.isRaCapped)?_c('br'):_vm._e(),(!_vm.isRaCapped)?_c('br'):_c('div',{staticClass:\"l-ra-pet-postcompletion-spacer\"}),_c('div',{staticClass:\"l-ra-pet-milestones\"},_vm._l((_vm.unlocks.slice(0,7)),function(unlock,i){return _c('RaUpgradeIcon',{key:25 * _vm.level + i,attrs:{\"unlock\":unlock}})}),1),(_vm.mu19Bought)?_c('div',{staticClass:\"l-ra-pet-milestones\"},_vm._l((_vm.unlocks.slice(7)),function(unlock,i){return _c('RaUpgradeIcon',{key:25 * _vm.level + i,attrs:{\"unlock\":unlock}})}),1):_vm._e()])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-ra-bar-container\"},[_c('div',{staticClass:\"c-ra-exp-bar\"},[_c('div',{staticClass:\"c-ra-exp-bar-inner\",style:(_vm.barStyle)})]),_c('div',{class:_vm.classObject,on:{\"click\":function($event){return _vm.pet.levelUp()}}},[_c('span',{staticClass:\"fas fa-arrow-up\"}),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip\"},[_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__name\"},[_vm._v(\" Level \"+_vm._s(_vm.pet.name)+\" to \"+_vm._s(_vm.formatInt(_vm.level + 1))+\" \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__description\"},[_vm._v(\" \"+_vm._s(_vm.reward)+\" \"),(_vm.showNextScalingUpgrade)?_c('div',{style:({ 'margin-top': _vm.nextUnlock.reward ? '0.6rem' : '0' })},[_vm._v(\" \"+_vm._s(_vm.nextScalingUpgrade)+\" \")]):_vm._e()]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__footer\"},[_vm._v(\" Cost: \"+_vm._s(_vm.quantify(\"Memory\", _vm.requiredMemories, 2, 2))+\" \"),(_vm.memories <= _vm.requiredMemories)?_c('span',[_vm._v(_vm._s(_vm.nextLevelEstimate))]):_vm._e()])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaPetLevelBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaPetLevelBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaPetLevelBar.vue?vue&type=template&id=14002fde&\"\nimport script from \"./RaPetLevelBar.vue?vue&type=script&lang=js&\"\nexport * from \"./RaPetLevelBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject},[_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.icon)}}),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip\"},[_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.petName)+\" Level \"+_vm._s(_vm.formatInt(_vm.level))+\" \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__description\",class:{ 'o-pelle-disabled': _vm.isUseless }},[_vm._v(\" \"+_vm._s(_vm.description)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaUpgradeIcon.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaUpgradeIcon.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaUpgradeIcon.vue?vue&type=template&id=0a2bf9d3&scoped=true&\"\nimport script from \"./RaUpgradeIcon.vue?vue&type=script&lang=js&\"\nexport * from \"./RaUpgradeIcon.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RaUpgradeIcon.vue?vue&type=style&index=0&id=0a2bf9d3&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0a2bf9d3\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaPet.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaPet.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaPet.vue?vue&type=template&id=60840c17&scoped=true&\"\nimport script from \"./RaPet.vue?vue&type=script&lang=js&\"\nexport * from \"./RaPet.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RaPet.vue?vue&type=style&index=0&id=60840c17&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"60840c17\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('button',{staticClass:\"c-ra-pet-remembrance-button\",style:(_vm.petStyle),on:{\"click\":_vm.toggleRemembrance}},[(_vm.hasRemembrance)?_c('span',[_vm._v(\" Remembrance given to \"+_vm._s(_vm.name)+\" \")]):_c('span',[_vm._v(\" Give Remembrance to \"+_vm._s(_vm.name)+\" \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaPetRemembranceButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaPetRemembranceButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaPetRemembranceButton.vue?vue&type=template&id=4768a080&\"\nimport script from \"./RaPetRemembranceButton.vue?vue&type=script&lang=js&\"\nexport * from \"./RaPetRemembranceButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-ra-panel-container\"},[_c('div',{staticClass:\"c-ra-pet-title\",staticStyle:{\"font-weight\":\"bold\",\"color\":\"var(--color-ra--base)\"}},[_vm._v(\"Ra's Shop\")]),_c('br'),_vm._v(\" You currently have \"+_vm._s(_vm.format(_vm.raPoints,3,3))+\" Ra's Memory Crystals. Gaining \"+_vm._s(_vm.format(_vm.GainPerSecond,3,3))+\"/s, depending on Dimension Boosts in Ra's Reality. \"),_c('br'),_c('div',{staticClass:\"c-ra-upgrade-container\"},_vm._l((_vm.rebuyables),function(upgrade){return _c('RaUpgradeVue',{key:upgrade.config.id,attrs:{\"upgrade\":upgrade,\"isRebuyable\":true}})}),1),(_vm.NewRow)?_c('div',{staticClass:\"c-ra-upgrade-container\"},_vm._l((_vm.singles),function(upgrade){return _c('RaUpgradeVue',{key:upgrade.config.id,attrs:{\"upgrade\":upgrade,\"isRebuyable\":false}})}),1):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\",style:(_vm.color)},[_c('button',{staticClass:\"c-ra-upgrade\",class:_vm.classObject,on:{\"click\":function($event){return _vm.upgrade.purchase()}}},[_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),[_c('EffectDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\"}}),(!_vm.isBought && _vm.config.implemented)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\",\"name\":_vm.currency}}):_vm._e()]],2),(!_vm.config.implemented)?_c('span',[_c('br'),_vm._v(\"Not Yet Implemented\")]):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaUpgrade.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaUpgrade.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaUpgrade.vue?vue&type=template&id=20e5f9b8&scoped=true&\"\nimport script from \"./RaUpgrade.vue?vue&type=script&lang=js&\"\nexport * from \"./RaUpgrade.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RaUpgrade.vue?vue&type=style&index=0&id=20e5f9b8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"20e5f9b8\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaUpgradePanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaUpgradePanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaUpgradePanel.vue?vue&type=template&id=1e412a9e&scoped=true&\"\nimport script from \"./RaUpgradePanel.vue?vue&type=script&lang=js&\"\nexport * from \"./RaUpgradePanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RaUpgradePanel.vue?vue&type=style&index=0&id=1e412a9e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1e412a9e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaTab.vue?vue&type=template&id=663e3984&\"\nimport script from \"./RaTab.vue?vue&type=script&lang=js&\"\nexport * from \"./RaTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-reality-upgrade-grid\"},[_c('div',{staticClass:\"c-reality-upgrade-infotext\"},[_vm._v(\" Mouseover \"),_c('i',{staticClass:\"fas fa-question-circle\"}),_vm._v(\" icons for additional information. \"),_c('br'),_vm._v(\" The first row of upgrades can be purchased endlessly for increasing costs \"),_c('span',{attrs:{\"ach-tooltip\":_vm.costScalingTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})]),_vm._v(\" and the rest are single-purchase. \"),_c('br'),_vm._v(\" Single-purchase upgrades also have requirements which, once completed, permanently unlock the ability to purchase the upgrades at any point. \"),_c('span',{attrs:{\"ach-tooltip\":_vm.possibleTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})]),_c('br'),_vm._v(\" Locked upgrades show their requirement and effect by default; unlocked ones show their effect, current bonus, and cost. Hold shift to swap this behavior. \"),_c('br'),_vm._v(\" You can shift-click upgrades with \"),_c('i',{staticClass:\"fas fa-lock-open\"}),_vm._v(\" to make the game prevent you from doing anything this Reality which would cause you to fail their unlock condition. \"),_c('span',{attrs:{\"ach-tooltip\":_vm.lockTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})]),_c('br'),_vm._v(\" Every completed row of purchased upgrades increases your Glyph level by \"+_vm._s(_vm.formatInt(1))+\". \")]),_vm._l((5),function(row){return _c('div',{key:row,staticClass:\"l-reality-upgrade-grid__row\"},_vm._l((5),function(column){return _c('RealityUpgradeButton',{key:_vm.id(row, column),attrs:{\"upgrade\":_vm.upgrades[_vm.id(row, column)]}})}),1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-reality-upgrade-btn c-reality-upgrade-btn\",class:_vm.classObject,on:{\"click\":[function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.toggleLock(_vm.upgrade)},function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.upgrade.purchase()}]}},[_c('HintText',{staticClass:\"l-hint-text--reality-upgrade c-hint-text--reality-upgrade\",attrs:{\"type\":\"realityUpgrades\"}},[_vm._v(\" \"+_vm._s(_vm.config.name)+\" \")]),_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),((_vm.$viewModel.shiftDown === _vm.isAvailableForPurchase) && !_vm.isRebuyable)?[_c('br'),_c('DescriptionDisplay',{staticClass:\"c-reality-upgrade-btn__requirement\",attrs:{\"config\":_vm.requirementConfig,\"label\":\"Requirement:\"}})]:[_c('EffectDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\"}}),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\",\"name\":\"Reality Machine\"}}):_vm._e()],(_vm.automatorPoints && !_vm.isBought)?_c('b',[_vm._v(\" (+\"+_vm._s(_vm.formatInt(_vm.automatorPoints))+\" AP) \")]):_vm._e()],2)],1),(_vm.canBeLocked)?_c('div',{staticClass:\"o-requirement-lock\"},[(_vm.hasRequirementLock)?_c('i',{staticClass:\"fas fa-lock\"}):(_vm.canLock)?_c('i',{staticClass:\"fas fa-lock-open\"}):_vm._e()]):_vm._e(),(_vm.isRebuyable && _vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon-reality-btn o-primary-btn--reality-upgrade-toggle\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityUpgradeButton.vue?vue&type=template&id=88651abe&scoped=true&\"\nimport script from \"./RealityUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"88651abe\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityUpgradesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityUpgradesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityUpgradesTab.vue?vue&type=template&id=5ab3ca65&scoped=true&\"\nimport script from \"./RealityUpgradesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityUpgradesTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RealityUpgradesTab.vue?vue&type=style&index=0&id=5ab3ca65&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5ab3ca65\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-replicanti-tab\"},[_c('br'),(!_vm.isUnlocked)?_c('PrimaryButton',{staticClass:\"o-primary-btn--replicanti-unlock\",attrs:{\"enabled\":_vm.isUnlockAffordable,\"onclick\":\"Replicanti.unlock();\"}},[_vm._v(\" Unlock Replicanti \"),_c('br'),_vm._v(\" Cost: \"+_vm._s(_vm.format(_vm.unlockCost))+\" IP \")]):[(_vm.isDoomed)?_c('div',{staticClass:\"modified-cap\"},[_vm._v(\" Your Replicanti cap has been removed due to the second \"+_vm._s(_vm.scrambledText)+\" milestone. \")]):(_vm.hasRaisedCap)?_c('div',{staticClass:\"modified-cap\"},[_vm._v(\" Completion of Effarig's Infinity is giving you the following rewards: \"),_c('br'),_vm._v(\" Your Replicanti cap without TS192 is now \"+_vm._s(_vm.format(_vm.replicantiCap, 2))+\" (\"+_vm._s(_vm.capMultText)+\") \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.quantifyInt(\"extra Replicanti Galaxy\", _vm.effarigInfinityBonusRG))+\" (Next Replicanti Galaxy at \"+_vm._s(_vm.format(_vm.nextEffarigRGThreshold, 2))+\" cap) \")]):_vm._e(),_c('p',{staticClass:\"c-replicanti-description\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-replicanti-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.amount, 2, 0)))]),_vm._v(\" Replicanti, translated to \"),_c('br'),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.boostText)}})]),(_vm.hasMaxText)?_c('div',{staticClass:\"c-replicanti-description\"},[_vm._v(\" Your maximum Replicanti reached this Reality is \"),_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.toMaxTooltip),expression:\"toMaxTooltip\"}],staticClass:\"max-accent\"},[_vm._v(_vm._s(_vm.format(_vm.maxReplicanti, 2)))]),_vm._v(\". \")]):_vm._e(),_c('br'),(_vm.isInEC8)?_c('div',[_vm._v(\" You have \"+_vm._s(_vm.quantifyInt(\"purchase\", _vm.ec8Purchases))+\" left within Eternity Challenge 8. \")]):_vm._e(),_c('div',{staticClass:\"l-replicanti-upgrade-row\"},[_c('ReplicantiUpgradeButton',{attrs:{\"setup\":_vm.replicantiChanceSetup}}),_c('ReplicantiUpgradeButton',{attrs:{\"setup\":_vm.replicantiIntervalSetup}}),_c('ReplicantiUpgradeButton',{attrs:{\"setup\":_vm.maxGalaxySetup}})],1),_c('div',[_vm._v(\" The Max Replicanti Galaxy upgrade can be purchased endlessly, but costs increase \"),_c('br'),_vm._v(\" more rapidly above \"+_vm._s(_vm.formatInt(_vm.distantRG))+\" Replicanti Galaxies and even more so above \"+_vm._s(_vm.formatInt(_vm.remoteRG))+\" Replicanti Galaxies. \"),_c('br'),_vm._v(\" You can only buy a max of \"+_vm._s(_vm.formatInt(250000))+\" Replicanti Galaxies. \"),(_vm.hasFree)?_c('div',[_vm._v(\" Free Replicanti Galaxies are capped at \"+_vm._s(_vm.formatInt(350000))+\". \")]):_vm._e()]),_c('br'),_c('br'),_c('ReplicantiGainText'),_c('br'),(_vm.canSeeGalaxyButton)?_c('ReplicantiGalaxyButton'):_vm._e()]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group l-replicanti-upgrade-button\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--replicanti-upgrade\",attrs:{\"enabled\":_vm.canBeBought},on:{\"click\":function($event){return _vm.upgrade.purchase()}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.description)}}),(!_vm.isCapped)?[_c('br'),_c('span',[_vm._v(_vm._s(_vm.costDescription))])]:_vm._e()],2),(_vm.isAutoUnlocked && !_vm.isEC8Running)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--replicanti-upgrade-toggle\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReplicantiUpgradeButton.vue?vue&type=template&id=2708e750&scoped=true&\"\nimport script from \"./ReplicantiUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ReplicantiUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2708e750\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',[_vm._v(_vm._s(_vm.remainingTimeText)),_c('br'),_vm._v(_vm._s(_vm.galaxyText))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiGainText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiGainText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReplicantiGainText.vue?vue&type=template&id=2d743e12&scoped=true&\"\nimport script from \"./ReplicantiGainText.vue?vue&type=script&lang=js&\"\nexport * from \"./ReplicantiGainText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d743e12\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--replicanti-galaxy\",attrs:{\"enabled\":_vm.isAvailable},on:{\"click\":_vm.handleClick}},[_vm._v(\" \"+_vm._s(_vm.resetActionDisplay)+\" a Replicanti Galaxy \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.galaxyCountDisplay)+\" \")]),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--replicanti-galaxy-toggle\",attrs:{\"value\":_vm.isAutoActive,\"on\":_vm.autobuyerTextDisplay,\"off\":_vm.autobuyerTextDisplay},on:{\"input\":_vm.handleAutoToggle}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiGalaxyButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiGalaxyButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReplicantiGalaxyButton.vue?vue&type=template&id=13c37845&scoped=true&\"\nimport script from \"./ReplicantiGalaxyButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ReplicantiGalaxyButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13c37845\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReplicantiTab.vue?vue&type=template&id=3fdc215a&scoped=true&\"\nimport script from \"./ReplicantiTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ReplicantiTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ReplicantiTab.vue?vue&type=style&index=0&id=3fdc215a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3fdc215a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-achievements-tab\"},[_vm._m(0),_c('div',{staticClass:\"l-achievement-grid\"},_vm._l((_vm.rows),function(row,i){return _c('secret-achievement-row',{key:i,attrs:{\"row\":row}})}),1)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-achievements-tab__header\"},[_c('span',[_vm._v(\" Secret Achievements are optional and give no bonuses. \")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject},_vm._l((_vm.row),function(achievement,i){return _c('SecretAchievement',{key:i,staticClass:\"l-achievement-grid__cell\",attrs:{\"achievement\":achievement}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject,style:(_vm.styleObject),on:{\"click\":_vm.onClick,\"mouseenter\":_vm.onMouseEnter,\"mouseleave\":_vm.onMouseLeave}},[_c('HintText',{staticClass:\"l-hint-text--achievement\",attrs:{\"type\":\"achievements\"}},[_vm._v(\" S\"+_vm._s(_vm.id)+\" \")]),_c('div',{staticClass:\"o-achievement__tooltip\"},[(_vm.isMouseOver)?[_c('div',{staticClass:\"o-achievement__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.config.name)+\" (S\"+_vm._s(_vm.id)+\") \")]),(_vm.isUnlocked)?_c('div',{staticClass:\"o-achievement__tooltip__description\"},[_vm._v(\" \"+_vm._s(_vm.config.description)+\" \")]):_vm._e()]:_vm._e()],2),(_vm.showUnlockState)?_c('div',{class:_vm.indicatorClassObject},[_c('i',{class:_vm.indicatorIconClass})]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretAchievement.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretAchievement.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SecretAchievement.vue?vue&type=template&id=90052f58&\"\nimport script from \"./SecretAchievement.vue?vue&type=script&lang=js&\"\nexport * from \"./SecretAchievement.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretAchievementRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretAchievementRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SecretAchievementRow.vue?vue&type=template&id=a2a0e480&\"\nimport script from \"./SecretAchievementRow.vue?vue&type=script&lang=js&\"\nexport * from \"./SecretAchievementRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretAchievementTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretAchievementTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SecretAchievementTab.vue?vue&type=template&id=0471d14e&\"\nimport script from \"./SecretAchievementTab.vue?vue&type=script&lang=js&\"\nexport * from \"./SecretAchievementTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"tab shop\"},[_c('div',{staticClass:\"c-shop-disclaimer\"},[_vm._v(\" There is no shop. Stop looking for it. It doesn't exist, and never has. Seriously though, there isnt a use for a shop, I'm sure you will manage without one...right? \")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-shop-button-container\"},[_c('div',{staticClass:\"o-shop-button-description\"},[_vm._v(\" \"+_vm._s(_vm.purchase.description)+\" \"),_c('br'),(_vm.purchase.shouldDisplayMult)?_c('span',{staticClass:\"o-shop-button-multiplier\",class:{ 'o-shop-button-multiplier--disabled': _vm.iapDisabled }},[_vm._v(\" Currently \"+_vm._s(_vm.purchase.formatEffect(_vm.currentMult))+\", next: \"+_vm._s(_vm.purchase.formatEffect(_vm.nextMult))+\" \")]):_vm._e()]),_c('div',[(_vm.isSingleCosmeticSet)?_c('div',[(_vm.allSetsUnlocked)?_c('div',{staticClass:\"o-shop-button-multiplier\"},[_vm._v(\" All Sets unlocked! \")]):_c('div',[_c('button',{staticClass:\"o-shop-button-button\",on:{\"click\":_vm.openSelectionModal}},[_vm._v(\" Choose Set \")]),_vm._v(\" Chosen Set: \"+_vm._s(_vm.chosenSet)+\" \")])]):_vm._e(),(_vm.isAllCosmeticSets)?_c('div',{staticClass:\"o-shop-button-multiplier\"},[(_vm.allSetsUnlocked)?_c('div',[_vm._v(\" All Sets unlocked! \")]):_c('div',[_vm._v(\" Will unlock \"+_vm._s(_vm.quantify(\"set\", _vm.lockedCount))+\" \")])]):_vm._e()]),_c('button',{class:_vm.purchaseButtonObject(),on:{\"click\":_vm.performPurchase}},[_vm._v(\" Cost: \"+_vm._s(_vm.cost)+\" \"),_c('img',{staticClass:\"o-shop-button-button__img\",attrs:{\"src\":\"images/std_coin.png\"}})]),(!_vm.purchase.isUnlocked())?_c('div',{staticClass:\"o-shop-button-locked-text\"},[_vm._v(\" This affects a feature you have not unlocked yet (\"+_vm._s(_vm.purchase.lockText)+\") \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ShopButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ShopButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ShopButton.vue?vue&type=template&id=27835b02&scoped=true&\"\nimport script from \"./ShopButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ShopButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ShopButton.vue?vue&type=style&index=0&id=27835b02&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"27835b02\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ShopTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ShopTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ShopTab.vue?vue&type=template&id=21aa9272&scoped=true&\"\nimport script from \"./ShopTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ShopTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ShopTab.vue?vue&type=style&index=0&id=21aa9272&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"21aa9272\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Describe all milestones:\"},model:{value:(_vm.displayAll),callback:function ($$v) {_vm.displayAll=$$v},expression:\"displayAll\"}}),_c('br'),_c('b',[_vm._v(_vm._s(_vm.startTimeStr))]),_c('br'),_c('b',[_vm._v(_vm._s(_vm.spectateText))]),_c('br'),_c('div',{staticClass:\"l-speedrun-milestone-tab\"},_vm._l((_vm.milestones),function(milestone){return _c('SpeedrunMilestoneSingle',{key:milestone.id,attrs:{\"milestone\":milestone,\"display\":_vm.displayAll || milestone.id <= _vm.maxMilestone,\"time\":_vm.milestoneTimes[milestone.id]}})}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject},[_c('b',[_vm._v(_vm._s(_vm.displayName))]),_c('i',[_vm._v(_vm._s(_vm.description))]),_vm._v(\" \"+_vm._s(_vm.timeDisplay)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunMilestoneSingle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunMilestoneSingle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedrunMilestoneSingle.vue?vue&type=template&id=6db0f941&\"\nimport script from \"./SpeedrunMilestoneSingle.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedrunMilestoneSingle.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunMilestonesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunMilestonesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedrunMilestonesTab.vue?vue&type=template&id=b14f2394&\"\nimport script from \"./SpeedrunMilestonesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedrunMilestonesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-stats-tab\"},[_c('div',[_c('PrimaryButton',{attrs:{\"onclick\":\"Modal.catchup.show(0)\"}},[_vm._v(\" View Content Summary \")]),_c('div',{staticClass:\"c-stats-tab-title c-stats-tab-general\"},[_vm._v(\" General \")]),_c('div',{staticClass:\"c-stats-tab-general\"},[_c('div',[_vm._v(\"You have made a total of \"+_vm._s(_vm.format(_vm.totalAntimatter, 2, 1))+\" antimatter.\")]),_c('div',[_vm._v(\"You have played for \"+_vm._s(_vm.realTimePlayed)+\". (real time)\")]),(_vm.reality.isUnlocked)?_c('div',[_vm._v(\" Your existence has spanned \"+_vm._s(_vm.reality.totalTimePlayed)+\" of time. (game time) \")]):_vm._e(),_c('div',[_vm._v(\" Your save was created on \"+_vm._s(_vm.startDate)+\" (\"+_vm._s(_vm.saveAge)+\" ago) \")]),_c('br'),_c('div',[_vm._v(\" You have seen \"+_vm._s(_vm.quantifyInt(\"news message\", _vm.totalNews))+\" in total. \")]),_c('div',[_vm._v(\" You have seen \"+_vm._s(_vm.quantifyInt(\"unique news message\", _vm.uniqueNews))+\". \")]),_c('div',[_vm._v(\" You have unlocked \"+_vm._s(_vm.quantifyInt(\"Secret Achievement\", _vm.secretAchievementCount))+\". \")]),(_vm.paperclips)?_c('div',[_vm._v(\" You have \"+_vm._s(_vm.quantifyInt(\"useless paperclip\", _vm.paperclips))+\". \")]):_vm._e(),(_vm.fullGameCompletions)?_c('div',[_c('br'),_c('b',[_vm._v(\" You have completed the entire game \"+_vm._s(_vm.quantifyInt(\"time\", _vm.fullGameCompletions))+\". \"),_c('br'),_vm._v(\" You have played for \"+_vm._s(_vm.fullTimePlayed)+\" across all playthroughs. \")])]):_vm._e()]),_c('div',[_c('br'),_c('div',{staticClass:\"c-matter-scale-container c-stats-tab-general\"},[_vm._l((_vm.matterScale),function(line,i){return _c('div',{key:i},[_vm._v(\" \"+_vm._s(line)+\" \")])}),(_vm.matterScale.length < 2)?_c('br'):_vm._e(),(_vm.matterScale.length < 3)?_c('br'):_vm._e()],2)]),_c('br')],1),(_vm.infinity.isUnlocked)?_c('div',{staticClass:\"c-stats-tab-subheader c-stats-tab-general\"},[_c('div',{staticClass:\"c-stats-tab-title c-stats-tab-infinity\"},[_vm._v(\" Infinity \")]),_c('div',[_vm._v(\" You have \"+_vm._s(_vm.infinityCountString)),(_vm.eternity.isUnlocked)?_c('span',[_vm._v(\" this Eternity\")]):_vm._e(),_vm._v(\". \")]),(_vm.infinity.banked.gt(0))?_c('div',[_vm._v(\" You have \"+_vm._s(_vm.formatDecimalAmount(_vm.infinity.banked.floor()))+\" \"+_vm._s(_vm.pluralize(\"Banked Infinity\", _vm.infinity.banked.floor()))+\". \")]):_vm._e(),(_vm.infinity.hasBest)?_c('div',[_vm._v(\" Your fastest Infinity was \"+_vm._s(_vm.infinity.best.toStringShort())+\". \")]):_c('div',[_vm._v(\" You have no fastest Infinity\"),(_vm.eternity.isUnlocked)?_c('span',[_vm._v(\" this Eternity\")]):_vm._e(),_vm._v(\". \")]),_c('div',[_vm._v(\" You have spent \"+_vm._s(_vm.infinity.this.toStringShort())+\" in this Infinity. \"),(_vm.reality.isUnlocked)?_c('span',[_vm._v(\" (\"+_vm._s(_vm.infinity.thisReal.toStringShort())+\" real time) \")]):_vm._e()]),_c('div',[_vm._v(\" Your best Infinity Points per minute \"),(_vm.eternity.count.gt(0))?_c('span',[_vm._v(\"this Eternity \")]):_vm._e(),_vm._v(\" is \"+_vm._s(_vm.format(_vm.infinity.bestRate, 2, 2))+\". \")]),_c('br')]):_vm._e(),(_vm.eternity.isUnlocked)?_c('div',{staticClass:\"c-stats-tab-subheader c-stats-tab-general\"},[_c('div',{staticClass:\"c-stats-tab-title c-stats-tab-eternity\"},[_vm._v(\" Eternity \")]),_c('div',[_vm._v(\" You have \"+_vm._s(_vm.eternityCountString)),(_vm.reality.isUnlocked)?_c('span',[_vm._v(\" this Reality\")]):_vm._e(),_vm._v(\". \")]),(_vm.infinity.projectedBanked.gt(0))?_c('div',[_vm._v(\" You will gain \"+_vm._s(_vm.formatDecimalAmount(_vm.infinity.projectedBanked.floor()))+\" \"+_vm._s(_vm.pluralize(\"Banked Infinity\", _vm.infinity.projectedBanked.floor()))+\" on Eternity (\"+_vm._s(_vm.formatDecimalAmount(_vm.infinity.bankRate))+\" per minute). \")]):(_vm.infinity.banked.gt(0))?_c('div',[_vm._v(\" You will gain no Banked Infinities on Eternity. \")]):_vm._e(),(_vm.eternity.hasBest)?_c('div',[_vm._v(\" Your fastest Eternity was \"+_vm._s(_vm.eternity.best.toStringShort())+\". \")]):_c('div',[_vm._v(\" You have no fastest Eternity\"),(_vm.reality.isUnlocked)?_c('span',[_vm._v(\" this Reality\")]):_vm._e(),_vm._v(\". \")]),_c('div',[_vm._v(\" You have spent \"+_vm._s(_vm.eternity.this.toStringShort())+\" in this Eternity. \"),(_vm.reality.isUnlocked)?_c('span',[_vm._v(\" (\"+_vm._s(_vm.eternity.thisReal.toStringShort())+\" real time) \")]):_vm._e()]),_c('div',[_vm._v(\" Your best Eternity Points per minute \"),(_vm.reality.isUnlocked)?_c('span',[_vm._v(\"this Reality \")]):_vm._e(),_vm._v(\" is \"+_vm._s(_vm.format(_vm.eternity.bestRate, 2, 2))+\". \")]),_c('br')]):_vm._e(),(_vm.reality.isUnlocked)?_c('div',{staticClass:\"c-stats-tab-subheader c-stats-tab-general\"},[_c('div',{class:_vm.realityClassObject()},[_vm._v(\" \"+_vm._s(_vm.isDoomed ? \"Doomed Reality\" : \"Reality\")+\" \")]),_c('div',[_vm._v(\"You have \"+_vm._s(_vm.reality.count >= 1e12 ? _vm.format(_vm.reality.count, 2) : _vm.formatInt(_vm.reality.count))+\" \"+_vm._s(_vm.reality.count > 1 ? \" Realities\" : \" Reality\")+\".\")]),_c('div',[_vm._v(\"Your fastest game-time Reality was \"+_vm._s(_vm.reality.best.toStringShort())+\".\")]),_c('div',[_vm._v(\"Your fastest real-time Reality was \"+_vm._s(_vm.reality.bestReal.toStringShort())+\".\")]),_c('div',{class:{ 'c-stats-tab-doomed' : _vm.isDoomed }},[_vm._v(\" You have spent \"+_vm._s(_vm.reality.this.toStringShort())+\" in this \"+_vm._s(_vm.isDoomed ? \"Armageddon\" : \"Reality\")+\". (\"+_vm._s(_vm.reality.thisReal.toStringShort())+\" real time) \")]),(_vm.isDoomed)?_c('div',{staticClass:\"c-stats-tab-doomed\"},[_vm._v(\" You have been Doomed for \"+_vm._s(_vm.realTimeDoomed.toStringShort())+\", real time. \")]):_vm._e(),_c('div',[_vm._v(\" Your best Reality Machines per minute is \"+_vm._s(_vm.format(_vm.reality.bestRate, 2, 2))+\". \")]),_c('div',[_vm._v(\"Your best Glyph rarity is \"+_vm._s(_vm.formatRarity(_vm.reality.bestRarity))+\".\")]),_c('br')]):_vm._e(),(_vm.mending.isUnlocked)?_c('div',{staticClass:\"c-stats-tab-subheader c-stats-tab-general\"},[_c('div',{staticClass:\"c-stats-tab-title c-stats-tab-mending\"},[_vm._v(\" Mending \")]),_c('div',[_vm._v(\" You have Mended the Mulitverse \"+_vm._s(_vm.quantifyInt(\"time\", _vm.mending.count))+\". \")]),(_vm.mending.hasBest)?_c('div',[_vm._v(\" Your fastest Mend was \"+_vm._s(_vm.mending.best.toStringShort())+\" (\"+_vm._s(_vm.mending.bestReal.toStringShort())+\" real time). \")]):_vm._e(),_c('div',[_vm._v(\" You have spent \"+_vm._s(_vm.mending.this.toStringShort())+\" in this Mend. (\"+_vm._s(_vm.mending.thisReal.toStringShort())+\" real time) \")]),_c('br')]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { DC } from \"@/core/constants\";\r\n\r\nexport const MatterScale = {\r\n proton: new Decimal(\"2.82e-45\"),\r\n\r\n estimate(matter) {\r\n if (!matter) return [\"There is no antimatter yet.\"];\r\n const distScaling = this.distanceScale(matter.log10())\r\n if (matter.log10() > 4.324e26*1e14) {\r\n return [\r\n `How do you have so much antimatter`,\r\n `There will eventually be a matter scale here`,\r\n `For now, enjoy the knowledge that you are here`,\r\n `A place so far that you never were meant to be`,\r\n `So far, that the matter scale is lost`\r\n ];\r\n }\r\n if (matter.gt(Decimal.pow10(4.320432e21*3))) {\r\n return [\r\n `If every number in your antimatter count was a hydrogen atom,`,\r\n `you would have a line of atoms stretching from Earth to`,\r\n `${distScaling.name} ${format(matter.log10() / (distScaling.amount * 1e12 / 53), 2, 2)} ${distScaling != 1 ? \"times\" : \"time\"}`\r\n ];\r\n }\r\n if (matter.gt(Decimal.pow10(4.320432e17*3))) {\r\n return [\r\n `If you wrote ${formatInt(3)} numbers a second, from the start`,\r\n `of the universe, till today, you would have to existed for`,\r\n `${formatX(matter.log10() / (4.320432e17*3), 3, 3)} the current age of the universe.`\r\n ];\r\n }\r\n if (matter.gt(DC.E1_5E12)) {\r\n return [\r\n `It would take ` + formatPercents((matter.log10() / (4.320432e17*3)).toString(), 4),\r\n \" of the current age of the Universe to write out your antimatter count\",\r\n `if you wrote ${formatInt(3)} numbers a second`\r\n ];\r\n }\r\n if (matter.gt(new Decimal(\"1e7200000000\"))) {\r\n return [\r\n `If you wrote ${formatInt(3)} numbers a second, it would take you`,\r\n formatFloat(((matter.log10() / 2437102080)), 2) + ` average American lifespans`,\r\n ` to write down your antimatter amount.`\r\n ];\r\n }\r\n if (matter.gt(DC.E1E7)) {\r\n return [\r\n `It would take ` + formatPercents((matter.log10() / (2437102080*3)).toString(), 4),\r\n \" of the average American lifespan to write out your antimatter count\",\r\n `if you wrote ${formatInt(3)} numbers a second`\r\n ];\r\n }\r\n if (matter.gt(DC.E10000)) {\r\n return [\r\n `If you wrote ${formatInt(3)} numbers a second, it would take you`,\r\n TimeSpan.fromSeconds(matter.log10() / 3).toString(),\r\n \"to write down your antimatter amount.\"\r\n ];\r\n }\r\n const planck = new Decimal(\"4.22419e-105\");\r\n const planckedMatter = matter.times(planck);\r\n if (planckedMatter.gt(this.proton)) {\r\n const scale = this.macroScale(planckedMatter);\r\n const amount = format(planckedMatter.dividedBy(scale.amount), 2, 1);\r\n return [`If every antimatter were a planck volume, you would have\r\n enough to ${scale.verb} ${amount} ${scale.name}`];\r\n }\r\n const scale = this.microScale(matter);\r\n return [`If every antimatter were ${format(this.proton.div(scale.amount).div(matter), 2, 1)} ${scale.name},\r\n you would have enough to make a proton.`];\r\n },\r\n\r\n microScale(matter) {\r\n const micro = this.microObjects;\r\n for (let i = 0; i < micro.length; i++) {\r\n const scale = micro[i];\r\n if (matter.times(scale.amount).lt(this.proton)) {\r\n return scale;\r\n }\r\n }\r\n throw \"Cannot determine smallest antimatter scale\";\r\n },\r\n\r\n macroScale(matter) {\r\n const macro = this.macroObjects;\r\n const last = macro.last();\r\n if (matter.gte(last.amount)) return last;\r\n let low = 0;\r\n let high = macro.length;\r\n while (low !== high) {\r\n const mid = Math.floor((low + high) / 2);\r\n if (macro[mid].amount.lte(matter)) {\r\n low = mid + 1;\r\n } else {\r\n high = mid;\r\n }\r\n }\r\n return macro[high - 1];\r\n },\r\n\r\n distanceScale(matter) {\r\n const dist = this.distances\r\n let mtr = (matter/1e12) * 53\r\n const last = dist.last()\r\n if (mtr > last.amount) return last;\r\n let low = 0;\r\n let high = dist.length;\r\n while (low !== high) {\r\n const mid = Math.floor((low + high) / 2);\r\n if (dist[mid].amount < mtr) {\r\n low = mid + 1;\r\n } else {\r\n high = mid;\r\n }\r\n }\r\n return dist[high - 1];\r\n },\r\n\r\n distances: [\r\n { amount: 1.35e11, name: \"Saturn when it's closest to Earth\" },\r\n { amount: 4.437e12, name: \"Pluto when it's closest to Earth\" },\r\n { amount: 7.376e12, name: \"Pluto when it's furthest to Earth\" },\r\n { amount: 9.461e15, name: \"something a light-year away\" },\r\n { amount: 4.011e16, name: \"Proxima Centauri\" },\r\n { amount: 1.902e17, name: \"Gliese 581\" },\r\n { amount: 2.46e20, name: \"the center of the Milky Way\" },\r\n { amount: 2.365e22, name: \"the Andromeda Galaxy\" },\r\n { amount: 2.271e24, name: \"3C 273 (optically brightest quasar)\" },\r\n { amount: 4.324e26, name: \"the edge of the Observable Universe\" },\r\n ],\r\n\r\n microObjects: [\r\n { amount: new Decimal(\"1e-54\"), name: \"attometers cubed\" },\r\n { amount: new Decimal(\"1e-63\"), name: \"zeptometers cubed\" },\r\n { amount: new Decimal(\"1e-72\"), name: \"yoctometers cubed\" },\r\n { amount: new Decimal(\"4.22419e-105\"), name: \"planck volumes\" }\r\n ],\r\n\r\n macroObjects: [\r\n { amount: new Decimal(\"2.82e-45\"), name: \"protons\", verb: \"make\" },\r\n { amount: new Decimal(\"1e-42\"), name: \"nuclei\", verb: \"make\" },\r\n { amount: new Decimal(\"7.23e-30\"), name: \"Hydrogen atoms\", verb: \"make\" },\r\n { amount: new Decimal(\"5e-21\"), name: \"viruses\", verb: \"make\" },\r\n { amount: new Decimal(\"9e-17\"), name: \"red blood cells\", verb: \"make\" },\r\n { amount: new Decimal(\"6.2e-11\"), name: \"grains of sand\", verb: \"make\" },\r\n { amount: new Decimal(\"5e-8\"), name: \"grains of rice\", verb: \"make\" },\r\n { amount: new Decimal(\"3.555e-6\"), name: \"teaspoons\", verb: \"fill\" },\r\n { amount: new Decimal(\"7.5e-4\"), name: \"wine bottles\", verb: \"fill\" },\r\n { amount: DC.D1, name: \"fridge-freezers\", verb: \"fill\" },\r\n { amount: new Decimal(\"2.5e3\"), name: \"Olympic-sized swimming pools\", verb: \"fill\" },\r\n { amount: new Decimal(\"2.6006e6\"), name: \"Great Pyramids of Giza\", verb: \"make\" },\r\n { amount: new Decimal(\"3.3e8\"), name: \"Great Walls of China\", verb: \"make\" },\r\n { amount: new Decimal(\"5e12\"), name: \"large asteroids\", verb: \"make\" },\r\n { amount: new Decimal(\"4.5e17\"), name: \"dwarf planets\", verb: \"make\" },\r\n { amount: new Decimal(\"1.08e21\"), name: \"Earths\", verb: \"make\" },\r\n { amount: new Decimal(\"1.53e24\"), name: \"Jupiters\", verb: \"make\" },\r\n { amount: new Decimal(\"1.41e27\"), name: \"Suns\", verb: \"make\" },\r\n { amount: new Decimal(\"5e32\"), name: \"red giants\", verb: \"make\" },\r\n { amount: new Decimal(\"8e36\"), name: \"hypergiant stars\", verb: \"make\" },\r\n { amount: new Decimal(\"1.7e45\"), name: \"nebulas\", verb: \"make\" },\r\n { amount: new Decimal(\"1.7e48\"), name: \"Oort clouds\", verb: \"make\" },\r\n { amount: new Decimal(\"3.3e55\"), name: \"Local Bubbles\", verb: \"make\" },\r\n { amount: new Decimal(\"3.3e61\"), name: \"galaxies\", verb: \"make\" },\r\n { amount: new Decimal(\"5e68\"), name: \"Local Groups\", verb: \"make\" },\r\n { amount: new Decimal(\"1e73\"), name: \"Sculptor Voids\", verb: \"make\" },\r\n { amount: new Decimal(\"3.4e80\"), name: \"observable universes\", verb: \"make\" },\r\n { amount: new Decimal(\"1e113\"), name: \"Dimensions\", verb: \"make\" },\r\n { amount: DC.C2P1024, name: \"Infinity Dimensions\", verb: \"make\" },\r\n { amount: new Decimal(\"1e65000\"), name: \"Time Dimensions\", verb: \"make\" }\r\n ]\r\n};\r\n","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StatisticsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StatisticsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StatisticsTab.vue?vue&type=template&id=5e391bac&scoped=true&\"\nimport script from \"./StatisticsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./StatisticsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./StatisticsTab.vue?vue&type=style&index=0&id=5e391bac&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5e391bac\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-teresa-celestial-tab\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"teresa\"}}),_c('div',[_vm._v(\" You have \"+_vm._s(_vm.quantify(\"Reality Machine\", _vm.rm, 2, 2))+\". \")]),_c('div',{staticClass:\"l-mechanics-container\"},[(_vm.hasReality)?_c('div',{staticClass:\"l-teresa-mechanic-container\"},[_c('div',{staticClass:\"c-teresa-unlock c-teresa-run-button\"},[_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_vm._v(\" Start Teresa's Reality. \")]),_c('div',{class:_vm.runButtonClassObject,on:{\"click\":function($event){return _vm.startRun()}}},[_vm._v(\" Ϟ \")]),_vm._v(\" \"+_vm._s(_vm.runDescription)+\" \"),_c('br'),_c('br'),_c('div',[_vm._v(\" This Reality can be repeated for a stronger reward based on the antimatter gained within it. \"),_c('br'),_c('br'),(_vm.showRunReward)?_c('span',[_vm._v(\" Your record antimatter in Teresa's Reality is \"+_vm._s(_vm.format(_vm.bestAM, 2))+\", achieved with \"+_vm._s(_vm.lastMachinesString)+\". \"),_c('br'),_c('br'),_vm._v(\" Glyph Set used: \"),_c('GlyphSetPreview',{attrs:{\"text\":\"Teresa's Best Glyph Set\",\"text-hidden\":true,\"force-name-color\":false,\"glyphs\":_vm.bestAMSet}})],1):_c('span',[_vm._v(\" You have not completed Teresa's Reality yet. \")])])]),(_vm.showRunReward)?_c('div',{staticClass:\"c-teresa-unlock\"},[_vm._v(\" Teresa Reality reward: Glyph Sacrifice power \"+_vm._s(_vm.formatX(_vm.runReward, 2, 2))+\" \")]):_vm._e(),(_vm.hasEPGen)?_c('div',{staticClass:\"c-teresa-unlock\"},[_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_vm._v(\" Every second, you gain \"+_vm._s(_vm.formatPercents(0.01))+\" of your peaked Eternity Points per minute this Reality. \")])]):_vm._e()]):_vm._e(),_c('div',{staticClass:\"l-rm-container l-teresa-mechanic-container\"},[_c('button',{class:_vm.pourButtonClassObject,on:{\"mousedown\":function($event){_vm.pour = true},\"touchstart\":function($event){_vm.pour = true},\"mouseup\":function($event){_vm.pour = false},\"touchend\":function($event){_vm.pour = false},\"mouseleave\":function($event){_vm.pour = false}}},[_vm._v(\" \"+_vm._s(_vm.pourText)+\" \")]),_c('div',{staticClass:\"c-rm-store\"},[_c('div',{staticClass:\"c-rm-store-inner c-rm-store-inner--light\",style:({ height: _vm.possibleFillPercentage})}),_c('div',{staticClass:\"c-rm-store-inner\",style:({ height: _vm.percentage})},[_c('div',{staticClass:\"c-rm-store-label\"},[_vm._v(\" \"+_vm._s(_vm.formatX(_vm.rmMult, 2, 2))+\" RM gain \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.format(_vm.pouredAmount, 2, 2))+\"/\"+_vm._s(_vm.format(_vm.pouredAmountCap, 2, 2))+\" \")])]),_vm._l((_vm.unlockInfos),function(unlockInfo){return _c('CustomizeableTooltip',{key:unlockInfo.id,attrs:{\"content-class\":\"c-teresa-unlock-description--hover-area\",\"bottom\":_vm.unlockDescriptionHeight(unlockInfo),\"right\":\"0\",\"mode\":\"right\",\"show\":true,\"tooltip-arrow-style\":_vm.unlockInfoTooltipArrowStyle,\"tooltip-class\":_vm.unlockInfoTooltipClass(unlockInfo)},scopedSlots:_vm._u([{key:\"mainContent\",fn:function(){return [_c('div',{staticClass:\"c-teresa-milestone-line\",class:{ 'c-teresa-milestone-line--unlocked': _vm.hasUnlock(unlockInfo) }})]},proxy:true},{key:\"tooltipContent\",fn:function(){return [_c('b',{class:{ 'o-pelle-disabled': unlockInfo.pelleDisabled }},[_vm._v(\" \"+_vm._s(_vm.format(unlockInfo.price, 2, 2))+\": \"+_vm._s(unlockInfo.description)+\" \")])]},proxy:true}],null,true)})})],2)]),(_vm.pouredAmount < _vm.pouredAmountCap)?_c('div',{staticClass:\"l-rm-container-labels l-teresa-mechanic-container\"}):_vm._e(),(_vm.hasPerkShop)?_c('div',{staticClass:\"c-teresa-shop\"},[_c('span',{staticClass:\"o-teresa-pp\"},[_vm._v(\" You have \"+_vm._s(_vm.quantify(\"Perk Point\", _vm.perkPoints, 2, 0))+\". \")]),_vm._l((_vm.upgrades),function(upgrade){return _c('PerkShopUpgradeButton',{key:upgrade.id,attrs:{\"upgrade\":upgrade}})}),_vm._v(\" You can now modify the appearance of your Glyphs to look like Music Glyphs. \")],2):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{class:_vm.classObject,on:{\"click\":function($event){return _vm.upgrade.purchase()}}},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.upgrade.config,\"length\":70}}),_c('br'),_c('EffectDisplay',{attrs:{\"config\":_vm.upgrade.config}}),_c('br'),(!_vm.isCapped)?_c('CostDisplay',{attrs:{\"config\":_vm.upgrade.config,\"name\":\"Perk Point\"}}):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PerkShopUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PerkShopUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PerkShopUpgradeButton.vue?vue&type=template&id=1ce43eb4&scoped=true&\"\nimport script from \"./PerkShopUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./PerkShopUpgradeButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PerkShopUpgradeButton.vue?vue&type=style&index=0&id=1ce43eb4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1ce43eb4\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TeresaTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TeresaTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TeresaTab.vue?vue&type=template&id=462ad4de&scoped=true&\"\nimport script from \"./TeresaTab.vue?vue&type=script&lang=js&\"\nexport * from \"./TeresaTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TeresaTab.vue?vue&type=style&index=0&id=462ad4de&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"462ad4de\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-dilation-tab\"},[_c('span',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-dilation-tab__tachyons\"},[_vm._v(_vm._s(_vm.format(_vm.tachyons, 2, 1)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Tachyon Particle\", _vm.tachyons))+\". \")]),_c('div',{on:{\"mouseover\":function($event){_vm.isHovering = true},\"mouseleave\":function($event){_vm.isHovering = false}}},[_c('DilationButton')],1),_c('span',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-dilation-tab__dilated-time\"},[_vm._v(_vm._s(_vm.format(_vm.dilatedTime, 2, 1)))]),_vm._v(\" Dilated Time. \"),_c('span',{staticClass:\"c-dilation-tab__dilated-time-income\"},[_vm._v(_vm._s(_vm.dilatedTimeGainText)+\"/s\")])]),_c('span',[_vm._v(\" Next \"),(_vm.tachyonGalaxyGain > 1)?_c('span',[_vm._v(_vm._s(_vm.formatInt(_vm.tachyonGalaxyGain)))]):_vm._e(),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Tachyon Galaxy\", _vm.tachyonGalaxyGain))+\" at \"),_c('span',{staticClass:\"c-dilation-tab__galaxy-threshold\",attrs:{\"ach-tooltip\":_vm.galaxyTimeEstimate}},[_vm._v(_vm._s(_vm.format(_vm.galaxyThreshold, 2, 1)))]),_vm._v(\" Dilated Time, gained total of \"),_c('span',{staticClass:\"c-dilation-tab__galaxies\",attrs:{\"ach-tooltip\":_vm.baseGalaxyText}},[_vm._v(_vm._s(_vm.formatInt(_vm.totalGalaxies)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Tachyon Galaxy\", _vm.totalGalaxies))+\" \")]),(_vm.hasMaxText)?_c('span',[_vm._v(\" Your maximum Dilated Time reached this Reality is \"),_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.toMaxTooltip),expression:\"toMaxTooltip\"}],staticClass:\"max-accent\"},[_vm._v(_vm._s(_vm.format(_vm.maxDT, 2, 1)))]),_vm._v(\". \")]):_vm._e(),_c('span',[_vm._v(\" Rebuyable costs jump and scale much faster past 5,000 purchases. \")]),(_vm.isPastSCone)?_c('span',[_vm._v(\" Every \"+_vm._s(_vm.formatInt(_vm.scOneStart))+\" Tachyon Galaxies, TG threshold is \"+_vm._s(_vm.formatX(_vm.scOneMult, 3, 3))+\". \")]):_vm._e(),_c('div',{staticClass:\"l-dilation-upgrades-grid\"},[_vm._l((_vm.allRebuyables),function(upgradeRow,row){return _c('div',{key:'rebuyable' + row,staticClass:\"l-dilation-upgrades-grid__row\"},_vm._l((upgradeRow),function(upgrade){return _c('DilationUpgradeButton',{key:upgrade.id,staticClass:\"l-dilation-upgrades-grid__cell\",attrs:{\"upgrade\":upgrade,\"is-rebuyable\":true,\"show-tooltip\":_vm.isHovering}})}),1)}),_vm._l((_vm.allSingleUpgrades),function(upgradeRow,row){return _c('div',{key:'single' + row,staticClass:\"l-dilation-upgrades-grid__row\"},_vm._l((upgradeRow),function(upgrade){return _c('DilationUpgradeButton',{key:upgrade.id,staticClass:\"l-dilation-upgrades-grid__cell\",attrs:{\"upgrade\":upgrade,\"is-rebuyable\":false,\"show-tooltip\":_vm.isHovering}})}),1)})],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"o-dilation-btn\",class:_vm.isUnlocked ? 'o-dilation-btn--unlocked' : 'o-dilation-btn--locked',on:{\"click\":function($event){return _vm.dilate()}}},[(!_vm.isUnlocked)?_c('span',[_vm._v(\"Purchase the Dilation Study to unlock.\")]):(!_vm.isRunning)?_c('span',[_vm._v(\" Dilate time. \"),(_vm.showRequirement)?_c('div',[_vm._v(\" Requires \"+_vm._s(_vm.format(_vm.remnantRequirement, 2))+\" Remnants \")]):_vm._e()]):(_vm.canEternity && _vm.hasGain)?_c('span',[_vm._v(\" \"+_vm._s(_vm.disableText)+\" \"),_c('br'),_vm._v(\" Gain \"+_vm._s(_vm.quantify(\"Tachyon Particle\", _vm.tachyonGain, 2, 1))+\". \")]):(_vm.hasGain)?_c('span',[_vm._v(\" \"+_vm._s(_vm.disableText)+\" \"),_c('br'),_vm._v(\" Reach \"+_vm._s(_vm.quantify(\"Infinity Point\", _vm.eternityGoal, 1, 0))+\" to Eternity and gain Tachyon Particles. \")]):_c('span',[_vm._v(\" \"+_vm._s(_vm.disableText)+\" \"),_c('br'),_vm._v(\" Reach \"+_vm._s(_vm.format(_vm.requiredForGain, 2, 1))+\" antimatter to gain more Tachyon Particles. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DilationButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DilationButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DilationButton.vue?vue&type=template&id=4d5e53d0&scoped=true&\"\nimport script from \"./DilationButton.vue?vue&type=script&lang=js&\"\nexport * from \"./DilationButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d5e53d0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{class:_vm.classObject,attrs:{\"ach-tooltip\":_vm.timeEstimate},on:{\"click\":function($event){return _vm.upgrade.purchase()},\"mouseover\":function($event){_vm.isHovering = true},\"mouseleave\":function($event){_vm.isHovering = false}}},[(_vm.timeEstimate)?_c('CustomizeableTooltip',{attrs:{\"show\":_vm.showTooltip && !_vm.isHovering && !_vm.hideEstimate,\"left\":\"50%\",\"top\":\"0\"},scopedSlots:_vm._u([{key:\"tooltipContent\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.timeEstimate)+\" \")]},proxy:true}],null,false,1945308655)}):_vm._e(),_c('span',[_c('DescriptionDisplay',{attrs:{\"config\":_vm.upgrade.config,\"length\":70,\"name\":\"o-dilation-upgrade__description\"}}),_c('EffectDisplay',{key:_vm.boughtAmount,attrs:{\"br\":\"\",\"config\":_vm.upgrade.config}})],1),(!_vm.isBought && !_vm.isCapped)?_c('CostDisplay',{attrs:{\"br\":\"\",\"config\":_vm.upgrade.config,\"name\":\"Dilated Time\"}}):_vm._e()],1),(_vm.isRebuyable && _vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--dilation-upgrade-toggle\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DilationUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DilationUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DilationUpgradeButton.vue?vue&type=template&id=546a6b9c&scoped=true&\"\nimport script from \"./DilationUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./DilationUpgradeButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DilationUpgradeButton.vue?vue&type=style&index=0&id=546a6b9c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"546a6b9c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeDilationTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeDilationTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeDilationTab.vue?vue&type=template&id=d9200254&scoped=true&\"\nimport script from \"./TimeDilationTab.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeDilationTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TimeDilationTab.vue?vue&type=style&index=0&id=d9200254&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d9200254\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.activeComponent,{tag:\"component\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-time-dim-tab l-centered-vertical-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all \")]),(_vm.areAutobuyersUnlocked)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.toggleAllAutobuyers}},[_vm._v(\" Toggle all autobuyers \")]):_vm._e()],1),(_vm.shortenTSU)?_c('div',[_c('p',[_vm._v(\" You have gained \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.totalUpgrades, 2, 2)))]),_vm._v(\" Tickspeed upgrades from \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.timeShards, 2, 1)))]),_vm._v(\" Time Shards. \")]),_c('p',[_vm._v(\" Next Tickspeed upgrade at \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.upgradeThreshold, 2, 1)))]),_vm._v(\", increasing by \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatX(_vm.multPerTickspeed, 2, 2)))]),_vm._v(\" per Tickspeed upgrade gained. \")])]):_c('div',[_c('p',[_vm._v(\" You have gained \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatInt(_vm.totalUpgrades)))]),_vm._v(\" Tickspeed upgrades from \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.timeShards, 2, 1)))]),_vm._v(\" Time Shards. \")]),_c('p',[_vm._v(\" Next Tickspeed upgrade at \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.upgradeThreshold, 2, 1)))]),_vm._v(\", increasing by \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatX(_vm.multPerTickspeed, 2, 2)))]),_vm._v(\" per Tickspeed upgrade gained. \")])]),_c('div',[_vm._v(\" The amount each additional upgrade requires will start increasing above \"+_vm._s(_vm.formatInt(_vm.tickspeedSoftcap))+\" Tickspeed upgrades. \")]),_c('div',[_vm._v(\" You are getting \"+_vm._s(_vm.format(_vm.shardsPerSecond, 2, 0))+\" \"+_vm._s(_vm.incomeType)+\" per second. \")]),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('TimeDimensionRow',{key:tier,attrs:{\"tier\":tier,\"are-autobuyers-unlocked\":_vm.areAutobuyersUnlocked}})}),1),_c('div',[_vm._v(\" Time Dimension costs jump at \"+_vm._s(_vm.format(_vm.costIncreases[0], 2, 2))+\" and \"+_vm._s(_vm.format(_vm.costIncreases[1]))+\" Eternity Points, \"),_c('br'),_vm._v(\" and costs increase much faster after \"+_vm._s(_vm.format(_vm.costIncreases[2]))+\" Eternity Points. \"),_c('br'),(_vm.showLockedDimCostNote)?_c('div',[_vm._v(\" Hold shift to see the Eternity Point cost for locked Time Dimensions. \")]):_vm._e(),_vm._v(\" Any 8th Time Dimensions purchased above \"+_vm._s(_vm.format(1e8))+\" will not further increase the multiplier. \"),_c('br'),_vm._v(\" Time Dimensions can only be purchased up to \"+_vm._s(_vm.format(5e14))+\" times. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked && !_vm.requirementReached }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 1),\"amount-text\":_vm.format(_vm.amount, 2),\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td o-primary-btn--buy-dim c-dim-tooltip-container\",class:_vm.buttonClass(),attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isCapped && !_vm.isContinuumActive},on:{\"click\":_vm.buyTimeDimension}},[_vm._v(\" \"+_vm._s(_vm.buttonContents)+\" \"),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.tooltipContents)}})])]),(_vm.areAutobuyersUnlocked && !_vm.isContinuumActive)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--buy-td-auto\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):(!_vm.isContinuumActive)?_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td-auto\",attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isCapped},on:{\"click\":_vm.buyMaxTimeDimension}},[_vm._v(\" Buy Max \")]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTimeDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTimeDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicTimeDimensionRow.vue?vue&type=template&id=bb681570&scoped=true&\"\nimport script from \"./ClassicTimeDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicTimeDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicTimeDimensionRow.vue?vue&type=style&index=0&id=bb681570&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bb681570\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTimeDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTimeDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicTimeDimensionsTab.vue?vue&type=template&id=d39107ea&\"\nimport script from \"./ClassicTimeDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicTimeDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-time-dim-tab l-centered-vertical-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all \")]),(_vm.areAutobuyersUnlocked)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.toggleAllAutobuyers}},[_vm._v(\" Toggle all autobuyers \")]):_vm._e()],1),(_vm.shortenTSU)?_c('div',[_c('p',[_vm._v(\" You have gained \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.totalUpgrades, 2, 2)))]),_vm._v(\" Tickspeed upgrades from \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.timeShards, 2, 1)))]),_vm._v(\" Time Shards. \")]),_c('p',[_vm._v(\" Next Tickspeed upgrade at \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.upgradeThreshold, 2, 1)))]),_vm._v(\", increasing by \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatX(_vm.multPerTickspeed, 2, 2)))]),_vm._v(\" per Tickspeed upgrade gained. \")])]):_c('div',[_c('p',[_vm._v(\" You have gained \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatInt(_vm.totalUpgrades)))]),_vm._v(\" Tickspeed upgrades from \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.timeShards, 2, 1)))]),_vm._v(\" Time Shards. \")]),_c('p',[_vm._v(\" Next Tickspeed upgrade at \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.upgradeThreshold, 2, 1)))]),_vm._v(\", increasing by \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatX(_vm.multPerTickspeed, 2, 2)))]),_vm._v(\" per Tickspeed upgrade gained. \")])]),_c('div',[_vm._v(\" The amount each additional upgrade requires will start increasing above \"+_vm._s(_vm.formatInt(_vm.tickspeedSoftcap))+\" Tickspeed upgrades. \")]),_c('div',[_vm._v(\"You are getting \"+_vm._s(_vm.format(_vm.shardsPerSecond, 2, 0))+\" \"+_vm._s(_vm.incomeType)+\" per second.\")]),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('NewTimeDimensionRow',{key:tier,attrs:{\"tier\":tier,\"are-autobuyers-unlocked\":_vm.areAutobuyersUnlocked}})}),1),_c('div',[_vm._v(\" Time Dimension costs jump at \"+_vm._s(_vm.format(_vm.costIncreases[0], 2, 2))+\" and \"+_vm._s(_vm.format(_vm.costIncreases[1]))+\" Eternity Points, \"),_c('br'),_vm._v(\" and costs increase much faster after \"+_vm._s(_vm.format(_vm.costIncreases[2]))+\" Eternity Points. \"),_c('br'),(_vm.showLockedDimCostNote)?_c('div',[_vm._v(\" Hold shift to see the Eternity Point cost for locked Time Dimensions. \")]):_vm._e(),_vm._v(\" Any 8th Time Dimensions purchased above \"+_vm._s(_vm.format(1e8))+\" will not further increase the multiplier. \"),_c('br'),_vm._v(\" Time Dimensions can only be purchased up to \"+_vm._s(_vm.format(_vm.trueCap,2,2))+\" times. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-row-time-dim l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked && !_vm.requirementReached }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 1),\"amount-text\":_vm.format(_vm.amount, 2),\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container c-modern-dim-tooltip-container\",style:(_vm.cssVars)},[_c('div',{staticClass:\"c-modern-dim-purchase-count-tooltip\",style:(_vm.cssVars)},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.tooltipContents)}})]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td o-primary-btn o-primary-btn--new o-primary-btn--buy-dim\",class:_vm.buttonClass(),attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isCapped && !_vm.isContinuumActive},on:{\"click\":_vm.buyTimeDimension}},[_vm._v(\" \"+_vm._s(_vm.buttonContents)+\" \")]),(_vm.areAutobuyersUnlocked && !_vm.isContinuumActive)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--buy-td-auto\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):(!_vm.isContinuumActive)?_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td-auto\",attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isCapped},on:{\"click\":_vm.buyMaxTimeDimension}},[_vm._v(\" Buy Max \")]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernTimeDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernTimeDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernTimeDimensionRow.vue?vue&type=template&id=1b5405e2&scoped=true&\"\nimport script from \"./ModernTimeDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernTimeDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernTimeDimensionRow.vue?vue&type=style&index=0&id=1b5405e2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1b5405e2\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernTimeDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernTimeDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernTimeDimensionsTab.vue?vue&type=template&id=4125b50a&\"\nimport script from \"./ModernTimeDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernTimeDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeDimensionsTab.vue?vue&type=template&id=26ea69a0&\"\nimport script from \"./TimeDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-time-studies-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.exportStudyTree}},[_vm._v(\" Export tree \")]),_c('PrimaryButton',{class:_vm.respecClassObject,on:{\"click\":function($event){_vm.respec = !_vm.respec}}},[_vm._v(\" Respec Time Studies on next Eternity \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"onclick\":\"Modal.studyString.show({ id: -1 })\"}},[_vm._v(\" Import tree \")])],1),_c('div',{staticClass:\"l-time-study-tree l-time-studies-tab__tree\",style:(_vm.treeStyleObject)},[_vm._l((_vm.studies),function(setup){return _c(_vm.studyComponent(setup.study),{key:setup.study.type.toString() + setup.study.id.toString(),tag:\"component\",attrs:{\"setup\":setup}})}),_c('SecretTimeStudy',{attrs:{\"setup\":_vm.layout.secretStudy}}),(_vm.isEnslaved)?_c('EnslavedTimeStudy',{attrs:{\"setup\":_vm.layout.enslavedStudy}}):_vm._e(),_c('svg',{staticClass:\"l-time-study-connection\",style:(_vm.treeStyleObject)},[_vm._l((_vm.connections),function(setup,index){return _c('TimeStudyConnection',{key:'connection' + index,attrs:{\"setup\":setup}})}),_c('HiddenTimeStudyConnection',{attrs:{\"setup\":_vm.layout.secretStudyConnection}}),(_vm.isEnslaved)?_c('HiddenTimeStudyConnection',{attrs:{\"setup\":_vm.layout.enslavedStudyConnection,\"is-enslaved\":_vm.isEnslaved}}):_vm._e()],2)],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isOverridden)?_c('line',{class:_vm.classObject,attrs:{\"x1\":_vm.percents(_vm.setup.x1),\"y1\":_vm.percents(_vm.setup.y1),\"x2\":_vm.percents(_vm.setup.x2),\"y2\":_vm.percents(_vm.setup.y2)}}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudyConnection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudyConnection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeStudyConnection.vue?vue&type=template&id=0947fa33&scoped=true&\"\nimport script from \"./TimeStudyConnection.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeStudyConnection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0947fa33\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:[_vm.classObject, _vm.studyClass, _vm.eternityChallengeAnim],style:(_vm.styleObject),on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.handleClick.apply(null, arguments)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.shiftClick.apply(null, arguments)}]}},[_vm._t(\"default\"),(_vm.showDefaultCostDisplay)?_c('CostDisplay',{attrs:{\"br\":\"\",\"config\":_vm.config,\"name\":\"Time Theorem\"}}):(!_vm.doomedRealityStudy)?_c('div',[_vm._v(\" Cost: \"+_vm._s(_vm.customCostStr)+\" \")]):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudyButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudyButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeStudyButton.vue?vue&type=template&id=003463ea&scoped=true&\"\nimport script from \"./TimeStudyButton.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeStudyButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"003463ea\",\n null\n \n)\n\nexport default component.exports","import { TimeStudyConnectionSetup } from \"./TimeStudyConnection\";\r\nimport { TimeStudySetup } from \"./TimeStudyButton\";\r\n\r\nclass TimeStudyRow {\r\n constructor(layout, items, isWide) {\r\n this.layout = layout;\r\n this.items = items;\r\n this.isWide = isWide;\r\n }\r\n\r\n get width() {\r\n const itemCount = this.items.length;\r\n const layout = this.layout;\r\n return itemCount * layout.itemWidth + (itemCount - 1) * layout.spacing;\r\n }\r\n\r\n itemPosition(column, treeLayout) {\r\n const layout = this.layout;\r\n const treeWidth = treeLayout.width;\r\n const rowLeft = (treeWidth - this.width) / 2;\r\n return rowLeft + column * layout.itemWidth + column * layout.spacing;\r\n }\r\n}\r\n\r\nclass TimeStudyRowLayout {\r\n constructor(props) {\r\n this.itemWidth = props.itemWidth;\r\n this.itemHeight = props.itemHeight;\r\n this.spacing = props.spacing;\r\n }\r\n}\r\n\r\nexport class TimeStudyTreeLayout {\r\n constructor(type, scaling = 1) {\r\n this.spacing = 4 * scaling;\r\n\r\n const normalRowLayout = new TimeStudyRowLayout({\r\n itemWidth: 18 * scaling,\r\n itemHeight: 10 * scaling,\r\n spacing: 3 * scaling\r\n });\r\n\r\n const wideRowLayout = new TimeStudyRowLayout({\r\n itemWidth: 12 * scaling,\r\n itemHeight: 10 * scaling,\r\n spacing: 0.6 * scaling\r\n });\r\n const normalRow = (...items) => new TimeStudyRow(normalRowLayout, items);\r\n const wideRow = (...items) => new TimeStudyRow(wideRowLayout, items, true);\r\n\r\n const TS = id => (TimeStudy(id).isUnlocked ? TimeStudy(id) : null);\r\n const EC = id => TimeStudy.eternityChallenge(id);\r\n\r\n /**\r\n * @type {TimeStudyRow[]}\r\n */\r\n /* eslint-disable no-multi-spaces, space-in-parens, func-call-spacing */\r\n \r\n this.rows = [\r\n normalRow( null, TS(11), null ),\r\n normalRow( TS(21), TS(22) )\r\n ];\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( TS(305), TS(31), TS(32), TS(33) )\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( null, TS(31), TS(32), TS(33) )\r\n );\r\n }\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_62 || type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_62_181 ||\r\n type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_TRIAD_STUDIES || type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES) {\r\n this.rows.push(\r\n normalRow( null, TS(41), TS(42), EC(5) ),\r\n normalRow( TS(51) )\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( TS(41), TS(42) ),\r\n normalRow( null, TS(51), EC(5) )\r\n );\r\n }\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( TS(306), TS(61), TS(62) )\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( null, TS(61), TS(62) )\r\n );\r\n }\r\n\r\n this.rows.push(\r\n \r\n normalRow( TS(71), TS(72), TS(73) ),\r\n normalRow( TS(81), TS(82), TS(83) ),\r\n normalRow( TS(91), TS(92), TS(93) ),\r\n normalRow( TS(101), TS(102), TS(103) ),\r\n );\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( TS(311), TS(312), TS(313) )\r\n );\r\n }\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( EC(7), TS(111), TS(307) ),\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( EC(7), TS(111), null )\r\n );\r\n }\r\n\r\n this.rows.push(\r\n \r\n normalRow( TS(121), TS(122), TS(123) ),\r\n normalRow( EC(6), TS(131), TS(132), TS(133), EC(8) ),\r\n normalRow( TS(141), TS(142), TS(143) )\r\n );\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( null, TS(321), TS(322), TS(323), EC(4) ),\r\n normalRow( null, EC(9), TS(151), TS(308), null )\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( null, EC(9), TS(151), null, EC(4) )\r\n )\r\n }\r\n\r\n this.rows.push(\r\n normalRow( TS(161), TS(162) )\r\n );\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_181 || type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_62_181 ||\r\n type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_TRIAD_STUDIES || type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES) {\r\n this.rows.push(\r\n normalRow( TS(309), TS(171), EC(2) ),\r\n normalRow( EC(1), TS(181), EC(3) )\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( TS(171) ),\r\n normalRow( EC(1), EC(2), EC(3) ),\r\n normalRow( TS(181) )\r\n );\r\n }\r\n\r\n this.rows.push(\r\n normalRow( EC(10) ),\r\n normalRow( TS(191), TS(192), TS(193) )\r\n );\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( TS(201), TS(310) ),\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( TS(201) ),\r\n )\r\n }\r\n\r\n this.rows.push(\r\n normalRow( TS(211), TS(212), TS(213), TS(214) ),\r\n wideRow (TS(221), TS(222), TS(223), TS(224), TS(225), TS(226), TS(227), TS(228))\r\n );\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_TRIAD_STUDIES || type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( TS(301), TS(302), TS(303), TS(304) )\r\n );\r\n }\r\n\r\n this.rows.push(\r\n normalRow( TS(231), TS(232), TS(233), TS(234) ),\r\n normalRow( EC(11), EC(12) ),\r\n normalRow( TimeStudy.dilation ),\r\n normalRow( TimeStudy.timeDimension(5), TimeStudy.timeDimension(6) ),\r\n normalRow( TimeStudy.timeDimension(7), TimeStudy.timeDimension(8) ),\r\n normalRow( TimeStudy.reality )\r\n );\r\n if(Ra.unlocks.unlockMyriads.isUnlocked&&!Pelle.isDoomed){\r\n this.rows.push(\r\n normalRow(TS(401), TS(402), TS(403)),\r\n normalRow(TS(411), TS(412), TS(413))\r\n );\r\n }\r\n /* eslint-enable no-multi-spaces, space-in-parens, func-call-spacing */\r\n\r\n /**\r\n * @type {TimeStudySetup[]}\r\n */\r\n this.studies = [];\r\n for (let rowIndex = 0; rowIndex < this.rows.length; rowIndex++) {\r\n const row = this.rows[rowIndex];\r\n for (let columnIndex = 0; columnIndex < row.items.length; columnIndex++) {\r\n const study = row.items[columnIndex];\r\n if (study === null) continue;\r\n const setup = new TimeStudySetup({\r\n study,\r\n row: rowIndex,\r\n column: columnIndex\r\n });\r\n if (row.isWide) {\r\n setup.isSmall = true;\r\n }\r\n this.studies.push(setup);\r\n }\r\n }\r\n const secretStudy = {};\r\n this.secretStudy = new TimeStudySetup({\r\n study: secretStudy,\r\n row: 0,\r\n column: 0\r\n });\r\n\r\n const enslavedStudy = {};\r\n this.enslavedStudy = new TimeStudySetup({\r\n study: enslavedStudy,\r\n row: 0,\r\n column: 2\r\n });\r\n\r\n /**\r\n * @type {TimeStudyConnectionSetup[]}\r\n */\r\n this.connections = TimeStudy.allConnections\r\n .map(c => new TimeStudyConnectionSetup(c));\r\n this.secretStudyConnection = new TimeStudyConnectionSetup(\r\n new TimeStudyConnection(TS(11), secretStudy)\r\n );\r\n this.enslavedStudyConnection = new TimeStudyConnectionSetup(\r\n new TimeStudyConnection(TS(11), enslavedStudy)\r\n );\r\n\r\n this.width = this.rows.map(row => row.width).max();\r\n const heightNoSpacing = this.rows.map(r => r.layout.itemHeight).sum();\r\n this.height = heightNoSpacing + (this.rows.length - 1) * this.spacing;\r\n\r\n for (const study of this.studies) {\r\n study.setPosition(this);\r\n }\r\n this.secretStudy.setPosition(this);\r\n this.enslavedStudy.setPosition(this);\r\n\r\n for (const connection of this.connections) {\r\n connection.setPosition(this.studies, this.width, this.height);\r\n }\r\n this.secretStudyConnection.setPosition(this.studies.concat(this.secretStudy), this.width, this.height);\r\n this.enslavedStudyConnection.setPosition(this.studies.concat(this.enslavedStudy), this.width, this.height);\r\n }\r\n\r\n itemPosition(row) {\r\n const rows = this.rows.slice(0, row);\r\n const heightNoSpacing = rows.map(r => r.layout.itemHeight).sum();\r\n return heightNoSpacing + rows.length * this.spacing;\r\n }\r\n\r\n static create(type, scaling = 1) {\r\n if (this._instances === undefined) {\r\n this._instances = [];\r\n }\r\n const layout = new TimeStudyTreeLayout(type, scaling);\r\n this._instances[`${type}__${scaling}`] = layout;\r\n return layout;\r\n }\r\n}\r\n\r\nexport const STUDY_TREE_LAYOUT_TYPE = {\r\n NORMAL: 0,\r\n ALTERNATIVE_62: 1,\r\n ALTERNATIVE_181: 2,\r\n ALTERNATIVE_62_181: 3,\r\n ALTERNATIVE_TRIAD_STUDIES: 4,\r\n ALTERNATIVE_SXY_MORE_TRIAD_STUDIES: 5,\r\n get current() {\r\n const alt62 = Perk.bypassEC5Lock.isBought;\r\n const alt181 = Perk.bypassEC1Lock.isBought && Perk.bypassEC2Lock.isBought && Perk.bypassEC3Lock.isBought;\r\n if (Ra.unlocks.unlockHardV.effectOrDefault(0) >= 5) return this.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES;\r\n if (Ra.canBuyTriad) return this.ALTERNATIVE_TRIAD_STUDIES;\r\n if (alt62 && alt181) return this.ALTERNATIVE_62_181;\r\n if (alt62) return this.ALTERNATIVE_62;\r\n if (alt181) return this.ALTERNATIVE_181;\r\n return this.NORMAL;\r\n }\r\n};\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TimeStudyButton',{attrs:{\"setup\":_vm.setup,\"ach-tooltip\":_vm.theoremTimeEstimate,\"special-click\":_vm.clickHandler()}},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.study.config}}),(_vm.showRequirement)?[_c('br'),_c('span',[_vm._v(_vm._s(_vm.requirement))])]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DilationTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DilationTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DilationTimeStudy.vue?vue&type=template&id=50134ea4&scoped=true&\"\nimport script from \"./DilationTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./DilationTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"50134ea4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TimeStudyButton',{attrs:{\"setup\":_vm.setup}},[_c('HintText',{staticClass:\"l-hint-text--time-study\",attrs:{\"type\":\"studies\"}},[_vm._v(\" EC\"+_vm._s(_vm.id)+\" \")]),_vm._v(\" Eternity Challenge \"+_vm._s(_vm.id)+\" (\"+_vm._s(_vm.formatInt(_vm.completions))),(_vm.showTotalCompletions)?_c('span',[_vm._v(\"/\"+_vm._s(_vm.formatInt(5)))]):_vm._e(),_vm._v(\") \"),(_vm.hasRequirement)?[_c('br'),_vm._v(\" Requirement: \"),(_vm.needsFirstLinebreak)?_c('br'):_vm._e(),(_vm.config.secondary.path)?_c('span',[_vm._v(\"Use only the \"+_vm._s(_vm.config.secondary.path)+\" path\")]):_c('span',[_vm._v(\" \"+_vm._s(_vm.formatValue(_vm.requirement.current))+\"/\"+_vm._s(_vm.formatValue(_vm.requirement.total))+\" \"),(_vm.needsSecondLinebreak)?_c('br'):_vm._e(),_vm._v(\" \"+_vm._s(_vm.config.secondary.resource)+\" \")])]:_vm._e(),(_vm.isUnlocked && !_vm.isRunning)?_c('span',[_c('br'),_vm._v(\"Double click to start\")]):(_vm.isRunning)?_c('span',[_c('br'),_vm._v(\"Currently Running\")]):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ECTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ECTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ECTimeStudy.vue?vue&type=template&id=6d8a1d6b&scoped=true&\"\nimport script from \"./ECTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./ECTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d8a1d6b\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{ref:\"study\",class:_vm.classObject,style:(_vm.styleObject),on:{\"click\":_vm.handleClick}},[_c('span',[_vm._v(\" ... you ... have great potential ... \"),_c('br'),_c('br'),_vm._v(\" Cost: \"+_vm._s(_vm.format(-_vm.enslavedTT))+\" Time Theorems \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnslavedTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnslavedTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnslavedTimeStudy.vue?vue&type=template&id=2f83ad0a&scoped=true&\"\nimport script from \"./EnslavedTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./EnslavedTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2f83ad0a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('line',{class:_vm.classObject,attrs:{\"x1\":_vm.percents(_vm.setup.x1),\"y1\":_vm.percents(_vm.setup.y1),\"x2\":_vm.percents(_vm.setup.x2),\"y2\":_vm.percents(_vm.setup.y2)}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenTimeStudyConnection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenTimeStudyConnection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HiddenTimeStudyConnection.vue?vue&type=template&id=34a48f61&scoped=true&\"\nimport script from \"./HiddenTimeStudyConnection.vue?vue&type=script&lang=js&\"\nexport * from \"./HiddenTimeStudyConnection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"34a48f61\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TimeStudyButton',{attrs:{\"setup\":_vm.setup,\"show-cost\":_vm.showCost,\"show-st-cost\":_vm.showSTCost}},[_c('HintText',{staticClass:\"l-hint-text--time-study\",attrs:{\"type\":\"studies\"}},[_vm._v(\" \"+_vm._s(_vm.hintText)+\" \")]),_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.study.config}}),_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.study.config}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalTimeStudy.vue?vue&type=template&id=539cf4d3&scoped=true&\"\nimport script from \"./NormalTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"539cf4d3\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{ref:\"study\",class:_vm.classObject,style:(_vm.styleObject),on:{\"click\":_vm.handleClick}},[_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_vm._v(\" Unlock a Secret Achievement \"),_c('br'),_c('br'),_vm._v(\" (Double click to hide) \")])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SecretTimeStudy.vue?vue&type=template&id=2b14d02f&scoped=true&\"\nimport script from \"./SecretTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./SecretTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2b14d02f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TimeStudyButton',{staticClass:\"o-time-study--triad\",attrs:{\"setup\":_vm.setup,\"show-st-cost\":true}},[_c('HintText',{staticClass:\"l-hint-text--time-study\",attrs:{\"type\":\"studies\"}},[_vm._v(\" \"+_vm._s(_vm.id)+\" Triad \")]),_c('DescriptionDisplay',{attrs:{\"config\":_vm.study.config}}),_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.study.config}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TriadTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TriadTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TriadTimeStudy.vue?vue&type=template&id=5d5be72a&scoped=true&\"\nimport script from \"./TriadTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./TriadTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5d5be72a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TimeStudyButton',{staticClass:\"o-time-study--myriad\",attrs:{\"setup\":_vm.setup,\"show-st-cost\":true}},[_c('HintText',{staticClass:\"l-hint-text--time-study\",attrs:{\"type\":\"studies\"}},[_vm._v(\" \"+_vm._s(_vm.id)+\" Myriad \")]),_c('DescriptionDisplay',{attrs:{\"config\":_vm.study.config}}),_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.study.config}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MyriadTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MyriadTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MyriadTimeStudy.vue?vue&type=template&id=2c22601a&scoped=true&\"\nimport script from \"./MyriadTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./MyriadTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2c22601a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TimeStudyButton',{staticClass:\"o-time-study--kohler\",attrs:{\"setup\":_vm.setup,\"show-st-cost\":true}},[_c('HintText',{staticClass:\"l-hint-text--time-study\",attrs:{\"type\":\"studies\"}},[_vm._v(\" \"+_vm._s(_vm.id)+\" \")]),_c('DescriptionDisplay',{attrs:{\"config\":_vm.study.config}}),_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.study.config}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./KohlerTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./KohlerTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./KohlerTimeStudy.vue?vue&type=template&id=cc3e5f08&scoped=true&\"\nimport script from \"./KohlerTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./KohlerTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cc3e5f08\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudiesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudiesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeStudiesTab.vue?vue&type=template&id=3dd5056d&scoped=true&\"\nimport script from \"./TimeStudiesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeStudiesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3dd5056d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-v-celestial-tab\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"v\"}}),(!_vm.mainUnlock)?_c('div',{staticClass:\"c-v-info-text\"},[_vm._l((_vm.mainUnlockDB),function(req){return _c('v-unlock-requirement',{key:req.name,attrs:{\"db-entry\":req}})}),_c('div',{staticClass:\"l-v-milestones-grid__row\"},[_c('div',{class:_vm.celestialUnlockClassObject,on:{\"click\":_vm.unlockCelestial}},[_c('p',[_vm._v(_vm._s(_vm.vUnlock.description))]),_c('p',[_vm._v(_vm._s(_vm.vUnlock.rewardText))])])])],2):_c('div',[(_vm.isFlipped && !_vm.isSuperFlipped)?_c('div',{staticClass:\"c-v-info-text\"},[(_vm.flip === _vm.V_FLIP.HARD)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":function($event){return _vm.setFlip(_vm.V_FLIP.NORMAL)}}},[_vm._v(\" Hide Hard V \")]):_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":function($event){return _vm.setFlip(_vm.V_FLIP.HARD)}}},[_vm._v(\" Show Hard V \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option l-cursed-glyph-creation\",on:{\"click\":_vm.createCursedGlyph}},[_vm._v(\" Create a Cursed Glyph \")]),_c('br'),_vm._v(\" Cursed Glyphs can be created here or in the Effarig tab. \"),_c('br'),_vm._v(\" Cursed Glyphs count as \"+_vm._s(_vm.formatInt(-3))+\" Glyphs for the purposes of all requirements related to Glyph count. \"),_c('br'),(!_vm.isDoomed)?_c('span',[_vm._v(\"The Black Hole can now be used to slow down time if they are both permanent.\")]):_vm._e(),_c('br'),_c('br'),_vm._v(\" Each Hard V-Achievement counts as two V-Achievements and will award \"+_vm._s(_vm.formatInt(2))+\" Space Theorems instead of \"+_vm._s(_vm.formatInt(1))+\". \"),_c('br'),_vm._v(\" Goal reduction is significantly more expensive for Hard V-Achievements. \")],1):_vm._e(),(_vm.isSuperFlipped)?_c('div',{staticClass:\"c-v-info-text\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",class:[_vm.flip == _vm.V_FLIP.NORMAL ? 'l-selected-tab' : ''],on:{\"click\":function($event){return _vm.setFlip(_vm.V_FLIP.NORMAL)}}},[_vm._v(\" Show Normal V \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",class:[_vm.flip == _vm.V_FLIP.HARD ? 'l-selected-tab' : ''],on:{\"click\":function($event){return _vm.setFlip(_vm.V_FLIP.HARD)}}},[_vm._v(\" Show Hard V \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",class:[_vm.flip == _vm.V_FLIP.SUPER ? 'l-selected-tab' : ''],on:{\"click\":function($event){return _vm.setFlip(_vm.V_FLIP.SUPER)}}},[_vm._v(\" Show Superhard V \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option l-cursed-glyph-creation\",on:{\"click\":_vm.createCursedGlyph}},[_vm._v(\" Create a Cursed Glyph \")]),_c('br'),_vm._v(\" Cursed Glyphs can be created here or in the Effarig tab. \"),_c('br'),_vm._v(\" Cursed Glyphs count as \"+_vm._s(_vm.formatInt(-3))+\" Glyphs for the purposes of all requirements related to Glyph count. \"),_c('br'),(!_vm.isDoomed)?_c('span',[_vm._v(\"The Black Hole can now be used to slow down time if they are both permanent.\")]):_vm._e(),_c('br'),_c('br'),_vm._v(\" Each Hard V-Achievement counts as two V-Achievements and will award \"+_vm._s(_vm.formatInt(2))+\" Space Theorems instead of \"+_vm._s(_vm.formatInt(1))+\". \"),_c('br'),_vm._v(\" Each Superhard V-Achievement counts as five V-Achievements and will award \"+_vm._s(_vm.formatInt(5))+\" Space Theorems instead of \"+_vm._s(_vm.formatInt(1))+\". \"),_c('br'),_vm._v(\" Goal reduction is significantly more expensive for Hard V-Achievements and Superhard V-Achievements. \")],1):_vm._e(),(_vm.showReduction)?_c('div',{staticClass:\"c-v-info-text\"},[_vm._v(\" You have \"+_vm._s(_vm.quantify(\"Perk Point\", _vm.pp, 2, 0))+\". \")]):_vm._e(),_c('div',{staticClass:\"l-v-unlocks-container\"},_vm._l((_vm.hexGrid),function(hex,hexId){return _c('li',{key:hexId + '-v-hex',style:([hex.isRunButton||hex.isSuperRunButton ? {zIndex: 1} : {zIndex: 0}])},[(hex.config)?_c('div',{staticClass:\"l-v-hexagon c-v-unlock\",style:('background-color: ' + _vm.hexColor(hex))},[_c('p',{staticClass:\"o-v-unlock-name\"},[(hex.canBeReduced && _vm.showReduction)?_c('br'):_vm._e(),_vm._v(_vm._s(hex.config.name)+\" \")]),_c('p',{staticClass:\"o-v-unlock-desc\",domProps:{\"innerHTML\":_vm._s(hex.formattedDescription)}}),(_vm.has(_vm.runMilestones[0][0]) && hex.isReduced)?_c('p',{staticClass:\"o-v-unlock-goal-reduction\"},[_vm._v(\" Goal has been \"+_vm._s(_vm.mode(hex))+\" by \"+_vm._s(_vm.reductionValue(hex))+\" \")]):_vm._e(),_c('p',{staticClass:\"o-v-unlock-amount\"},[_vm._v(\" \"+_vm._s(_vm.formatInt(hex.completions))+\"/\"+_vm._s(_vm.formatInt(hex.config.values.length))+\" done \")]),(_vm.showRecord(hex))?_c('div',[_c('p',{staticClass:\"o-v-unlock-record\"},[_vm._v(\" Best: \"+_vm._s(hex.config.formatRecord(_vm.runRecords[hex.id]))+\" \")]),_c('p',[_c('GlyphSetPreview',{attrs:{\"glyphs\":_vm.runGlyphs[hex.id],\"text\":hex.config.name,\"text-hidden\":true}})],1),(hex.canBeReduced && _vm.showReduction)?_c('div',[_c('div',{staticClass:\"l-v-goal-reduction-spacer\"}),_c('button',{staticClass:\"o-primary-btn l-v-reduction\",class:{ 'o-primary-btn--disabled': !hex.canBeReduced || _vm.pp < hex.reductionCost },attrs:{\"ach-tooltip\":_vm.reductionTooltip(hex)},on:{\"click\":function($event){return _vm.reduceGoals(hex)}}},[_c('i',{staticClass:\"fas fa-angle-double-down\"})])]):_vm._e()]):_vm._e()]):(hex.isRunButton)?_c('div',{class:_vm.runButtonClassObject,on:{\"click\":function($event){return _vm.startRun()}}},[_c('b',{staticClass:\"o-v-start-text\",class:{ 'o-pelle-disabled': _vm.isDoomed }},[(_vm.isRunning)?_c('span',[_vm._v(\"You are in \")]):_c('span',[_vm._v(\"Start \")]),_vm._v(\" V's Reality. \")]),_c('br'),_c('div',{style:({ 'font-size': _vm.hasAlchemy ? '1.2rem' : '' })},[_vm._v(\" \"+_vm._s(_vm.runDescription)+\" \")]),_c('div',{staticClass:\"c-v-run-button__line c-v-run-button__line--1\"}),_c('div',{staticClass:\"c-v-run-button__line c-v-run-button__line--2\"}),_c('div',{staticClass:\"c-v-run-button__line c-v-run-button__line--3\"})]):(hex.isSuperRunButton)?_c('div',{class:_vm.superRunButtonClassObject,on:{\"click\":function($event){return _vm.startSuperRun()}}},[_c('b',{staticClass:\"o-v-start-text\",class:{ 'o-pelle-disabled': _vm.isDoomed }},[(_vm.isSuperRunning)?_c('span',[_vm._v(\"You are in \")]):_c('span',[_vm._v(\"Start \")]),_vm._v(\" V's Superhard Reality. \")]),_c('br'),_c('div',{style:({ 'font-size': _vm.hasAlchemy ? '1.2rem' : '' })},[_vm._v(\" \"+_vm._s(_vm.runSuperDescription)+\" \")]),_c('div',{staticClass:\"c-v-run-button__line c-v-run-button__line--1\"}),_c('div',{staticClass:\"c-v-run-button__line c-v-run-button__line--2\"}),_c('div',{staticClass:\"c-v-run-button__line c-v-run-button__line--3\"})]):_c('div',[_c('div',{staticClass:\"l-v-hexagon l-placeholder-invisible\"})])])}),0),_c('div',{staticClass:\"c-v-info-text\"},[_vm._v(\" V-Achievements can only be completed within V's Reality, but are permanent and do not reset upon leaving and re-entering the Reality. \")]),_c('div',{staticClass:\"c-v-info-text\"},[_vm._v(\" You have \"+_vm._s(_vm.formatInt(_vm.totalUnlocks))+\" V-Achievements done. \"),(!_vm.isDoomed)?_c('span',[_vm._v(\" You gain \"+_vm._s(_vm.formatInt(1))+\" Space Theorem for each completion, allowing you to purchase Time Studies which are normally locked. \"),_c('br'),(_vm.MU14bought)?_c('p',[_vm._v(\"V-Achievement now have ×3 multiplier due to MU14.\")]):_vm._e(),_vm._v(\" Space Theorems can also be used as a Currency in the Automator. \")]):_vm._e()]),_c('br'),_c('div',{staticClass:\"l-v-milestones-grid\"},_vm._l((_vm.runMilestones),function(row,rowId){return _c('div',{key:rowId + '-v-ms-row',staticClass:\"l-v-milestones-grid__row\"},_vm._l((row),function(milestone,colId){return _c('div',{key:colId + rowId*10 + '-v-ms',staticClass:\"o-v-milestone\",class:{'o-v-milestone--unlocked':\n _vm.has(milestone)}},[_c('div',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_c('p',[_vm._v(_vm._s(milestone.description))]),_c('p',[_vm._v(\"Reward: \"+_vm._s(milestone.rewardText))]),(milestone.formattedEffect)?_c('p',[_vm._v(\" Currently: \"),_c('b',[_vm._v(_vm._s(milestone.formattedEffect))])]):_vm._e()])])}),0)}),0)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-v-unlock-bar\",style:(_vm.textStyle)},[_c('div',{staticClass:\"c-v-unlock-bar__progress\",style:(_vm.barProgressStyle)}),_vm._v(\" \"+_vm._s(_vm.dbEntry.format(_vm.resource))+\" / \"+_vm._s(_vm.dbEntry.format(_vm.dbEntry.requirement))+\" \"+_vm._s(_vm.dbEntry.name)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VUnlockRequirement.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VUnlockRequirement.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VUnlockRequirement.vue?vue&type=template&id=7da23d3a&\"\nimport script from \"./VUnlockRequirement.vue?vue&type=script&lang=js&\"\nexport * from \"./VUnlockRequirement.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VTab.vue?vue&type=template&id=0d267545&scoped=true&\"\nimport script from \"./VTab.vue?vue&type=script&lang=js&\"\nexport * from \"./VTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VTab.vue?vue&type=style&index=0&id=0d267545&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0d267545\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-remains-amount\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-remains-amount__accent\"},[_vm._v(_vm._s(_vm.format(_vm.mendingPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Multiversal Remain\", _vm.mendingPoints ))+\". \"),_c('br'),_c('br'),_c('div',{staticClass:\"c-mending-upgrade-infotext\"},[_vm._v(\"Every completed row of purchased upgrades multiplies Multiversal Remain gain by 2.\")]),_c('div',{staticClass:\"c-mending-upgrade-infotext\"},[_vm._v(\"Upgrades are numbered from left to right, top to bottom. For example \\\"Deus Propitius\\\", will be refered to as Mending Upgrade 10 (or MU10)\")]),_c('div',{staticClass:\"l-mending-upgrade-grid\"},_vm._l((4),function(row){return _c('div',{key:row,staticClass:\"l-mending-upgrade-grid__row\"},_vm._l((5),function(column){return _c('MendingUpgradeButton',{key:_vm.id(row, column),staticClass:\"l-mending-upgrade-grid__cell\",attrs:{\"upgrade\":_vm.upgrades[_vm.id(row, column)]}})}),1)}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-mending-upgrade-btn c-mending-upgrade-btn\",class:_vm.classObject,on:{\"click\":[function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.toggleLock(_vm.upgrade)},function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.upgrade.purchase()}]}},[_c('HintText',{staticClass:\"l-hint-text--mending-upgrade c-hint-text--mending-upgrade\",attrs:{\"type\":\"mendingUpgrades\"}},[_vm._v(\" \"+_vm._s(_vm.config.name)+\" \")]),_c('span',[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),((_vm.$viewModel.shiftDown === _vm.isAvailableForPurchase) && !_vm.isRebuyable)?[_c('br'),_c('DescriptionDisplay',{staticClass:\"c-mending-upgrade-btn__requirement\",attrs:{\"config\":_vm.requirementConfig,\"label\":\"Requirement:\"}})]:[_c('EffectDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\"}}),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\",\"name\":\"Multiversal Remain\"}}):_vm._e()]],2)],1),(_vm.canBeLocked)?_c('div',{staticClass:\"o-requirement-lock\"},[(_vm.hasRequirementLock)?_c('i',{staticClass:\"fas fa-lock\"}):(_vm.canLock)?_c('i',{staticClass:\"fas fa-lock-open\"}):_vm._e()]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingUpgradeButton.vue?vue&type=template&id=009e3f9f&scoped=true&\"\nimport script from \"./MendingUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"009e3f9f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal__inner\"},[_c('div',{staticClass:\"c-modal__header\"},[_c('ModalCloseButton',{on:{\"click\":_vm.closeModal}}),(_vm.$slots.header)?_c('span',{staticClass:\"c-modal__title\"},[_vm._t(\"header\")],2):_vm._e()],1),_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('PrimaryButton',{staticClass:\"o-primary-btn--modal-close c-modal__close-btn\",on:{\"click\":_vm.emitClick}},[_vm._v(\" × \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalCloseButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalCloseButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalCloseButton.vue?vue&type=template&id=09b34908&\"\nimport script from \"./ModalCloseButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalCloseButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalWrapper.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalWrapper.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalWrapper.vue?vue&type=template&id=0ec9a581&scoped=true&\"\nimport script from \"./ModalWrapper.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalWrapper.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModalWrapper.vue?vue&type=style&index=0&id=0ec9a581&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0ec9a581\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingUpgrades.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingUpgrades.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingUpgrades.vue?vue&type=template&id=3bb497cc&scoped=true&\"\nimport script from \"./MendingUpgrades.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingUpgrades.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MendingUpgrades.vue?vue&type=style&index=0&id=3bb497cc&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3bb497cc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-mending-milestone-grid\"},[_c('div',[_vm._v(\"You have Mended the Multiverse \"+_vm._s(_vm.quantify(\"time\", _vm.mendCount, 3))+\".\")]),_vm._l((_vm.rows),function(row){return _c('div',{key:row,staticClass:\"l-mends-milestone-grid__row\"},[_c('MendingMilestoneButton',{key:row,staticClass:\"l-mending-milestone-grid__cell\",attrs:{\"get-milestone\":_vm.getMilestone(row)}})],1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.config.invisible)?_c('div',{staticClass:\"l-mending-milestone\"},[_c('span',{staticClass:\"o-mending-milestone__goal\"},[_vm._v(\" \"+_vm._s(_vm.quantifyInt(\"Mend\", _vm.mends))+\": \")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.activeCondition),expression:\"activeCondition\"}],class:_vm.rewardClassObject},[_c('span',[_vm._v(\" \"+_vm._s(_vm.reward)+\" \")])])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingMilestoneButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingMilestoneButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingMilestoneButton.vue?vue&type=template&id=2dc5a23e&scoped=true&\"\nimport script from \"./MendingMilestoneButton.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingMilestoneButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MendingMilestoneButton.vue?vue&type=style&index=0&id=2dc5a23e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2dc5a23e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingMilestones.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingMilestones.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingMilestones.vue?vue&type=template&id=362d0934&scoped=true&\"\nimport script from \"./MendingMilestones.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingMilestones.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"362d0934\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-warp-tab\"},[(_vm.warped)?_c('div',[_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],class:_vm.classObject,on:{\"click\":_vm.clicked}},[_vm._v(\" REALITY IS WARPED \")])]):(_vm.canWarp)?_c('div',[_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],class:_vm.classObject,on:{\"click\":_vm.clicked}},[_vm._v(\" WARP REALITY \")])]):_c('div',{staticClass:\"warp-unlock-requirements\"},[_vm._v(\" You must have all Mending Upgrades Purchased, \"+_vm._s(_vm.formatInt(1e7))+\" Multiversal Remains, and 240 total Ra Memory Levels to Warp Reality. \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.format(this.MVRoR))+\" / \"+_vm._s(_vm.format(1e7))+\" Multiversal Remains \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.formatInt(this.RaToR))+\" / \"+_vm._s(_vm.formatInt(240))+\" Ra Memory Levels \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.formatInt(this.totalUpg))+\" / \"+_vm._s(_vm.formatInt(16))+\" Mending Upgrades \")]),(_vm.warped)?_c('div',[_c('div',{staticClass:\"c-mending-upgrade-infotext\"},[_vm._v(\" Stripped Upgrades (or ones that cost 1e300 MvR) are not yet implemented. \"),_c('br'),_vm._v(\" You can shift-click upgrades with \"),_c('i',{staticClass:\"fas fa-lock-open\"}),_vm._v(\" to make the game prevent you from doing anything this Mend which would cause you to fail their unlock condition. \"),_c('span',{attrs:{\"ach-tooltip\":_vm.lockTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})]),_c('br')]),_vm._l((4),function(row){return _c('div',{key:row,staticClass:\"l-mending-upgrade-grid__row\"},_vm._l((3),function(column){return _c('WarpUpgradeButton',{key:_vm.id(row, column),attrs:{\"upgrade\":_vm.upgrades[_vm.id(row, column)]}})}),1)})],2):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],class:_vm.classObject,on:{\"click\":_vm.clicked}},[_vm._v(\" \"+_vm._s(_vm.text)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpRealityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpRealityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./WarpRealityButton.vue?vue&type=template&id=9a4b8a7c&scoped=true&\"\nimport script from \"./WarpRealityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./WarpRealityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9a4b8a7c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-mending-upgrade-btn c-mending-upgrade-btn\",class:_vm.classObject,on:{\"click\":[function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.toggleLock(_vm.upgrade)},function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.upgrade.purchase()}]}},[_c('HintText',{staticClass:\"l-hint-text--mending-upgrade c-hint-text--mending-upgrade\",attrs:{\"type\":\"corruptionUpgrades\"}},[_vm._v(\" \"+_vm._s(_vm.config.name)+\" \")]),_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),((_vm.$viewModel.shiftDown === _vm.isAvailableForPurchase) && !_vm.isRebuyable)?[_c('br'),_c('DescriptionDisplay',{staticClass:\"c-mending-upgrade-btn__requirement\",attrs:{\"config\":_vm.requirementConfig,\"label\":\"Requirement:\"}})]:[_c('EffectDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\"}}),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\",\"name\":\"Multiversal Remain\"}}):_vm._e()]],2)],1),(_vm.canBeLocked)?_c('div',{staticClass:\"o-requirement-lock\"},[(_vm.hasRequirementLock)?_c('i',{staticClass:\"fas fa-lock\"}):(_vm.canLock)?_c('i',{staticClass:\"fas fa-lock-open\"}):_vm._e()]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./WarpUpgradeButton.vue?vue&type=template&id=100ceb4f&scoped=true&\"\nimport script from \"./WarpUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./WarpUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"100ceb4f\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpReality.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpReality.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./WarpReality.vue?vue&type=template&id=6d9af666&scoped=true&\"\nimport script from \"./WarpReality.vue?vue&type=script&lang=js&\"\nexport * from \"./WarpReality.vue?vue&type=script&lang=js&\"\nimport style0 from \"./WarpReality.vue?vue&type=style&index=0&id=6d9af666&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d9af666\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"kohler-celestial-tab\"},[_c('h1',[_vm._v(\"Coming in 5 Hours(tm)\")]),_c('span',[_vm._v(\" Actually I want to add a cool progress system so if you see anything mess here just ignore--sxy \")]),_c('div',{staticClass:\"c-kohler-progressbar\"},[_c('div',{staticClass:\"c-kohler-progressbar-inner c-kohler-progressbar-inner--light\",style:({ width: '100%'})}),_c('div',{staticClass:\"c-kohler-progressbar-inner\",style:({ width: _vm.kohlerProgress + '%'})}),_vm._l((_vm.unlockInfos),function(unlockInfo){return _c('CustomizeableTooltip',{key:unlockInfo.id,attrs:{\"content-class\":\"c-kohler-progressunlock-description--hover-area\",\"left\":_vm.unlockDescriptionWidth(unlockInfo),\"bottom\":_vm.unlockDescriptionBottom(unlockInfo),\"mode\":\"bottom\",\"show\":true,\"tooltip-arrow-style\":_vm.unlockInfoTooltipArrowStyle,\"tooltip-class\":_vm.unlockInfoTooltipClass(unlockInfo)},scopedSlots:_vm._u([{key:\"tooltipContent\",fn:function(){return [_c('b',[_vm._v(\" \"+_vm._s(unlockInfo.description)+\" \")])]},proxy:true}],null,true)})})],2),(this.unlocked)?_c('div',[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"kohler\"}})],1):_vm._e(),(this.unlocked)?_c('div',{staticClass:\"l-mechanics-container\"},[_c('div',[_c('div',{staticClass:\"l-kohler-mechanic-container\"},[_c('div',{staticClass:\"c-kohler-unlock c-kohler-run-button\"},[_c('span',[_vm._v(\" Enter Kohler's Realm. \")]),_c('div',{class:_vm.runButtonClassObject,on:{\"click\":function($event){return _vm.startRun()}}},[_c('i',{staticClass:\"fa-solid fa-staff-snake\"})]),_vm._v(\" \"+_vm._s(_vm.runDescription)+\" \")])])])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./KohlersRealm.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./KohlersRealm.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./KohlersRealm.vue?vue&type=template&id=0ef78654&scoped=true&\"\nimport script from \"./KohlersRealm.vue?vue&type=script&lang=js&\"\nexport * from \"./KohlersRealm.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0ef78654\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-corrupt-celestial-tab\"},[_c('div',{attrs:{\"text-left\":\"\"}},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-fragments-amount__accent\"},[_vm._v(_vm._s(_vm.formatInt(_vm.corruptedFrags, 2)))]),_vm._v(\" Hostile Fragments. \")]),_c('br'),_c('div',{staticClass:\"l-mechanics-container\"},[_c('div',{staticClass:\"l-corrupt-mechanic-container\"},[_c('div',{staticClass:\"c-corrupt-unlock c-corrupt-run-button\"},[(!_vm.isRunning && !_vm.nextCorrupted && !_vm.corruptionsZeroCheck())?_c('span',[_vm._v(\" Make Next Mend Hostile \")]):(!_vm.isRunning && !_vm.nextCorrupted && _vm.corruptionsZeroCheck())?_c('span',[_vm._v(\" You can't make full zero Hostile \")]):(!_vm.isRunning && !_vm.corruptionsZeroCheck())?_c('span',[_vm._v(\" Next Mend will be Hostile, Mend to apply Hostilities \")]):(!_vm.isRunning && _vm.corruptionsZeroCheck())?_c('span',[_vm._v(\" Next Mend shall be Hostile, but cannot be all zero \")]):_c('span',[_vm._v(\" Exit Hostile Mend \")]),_c('div',{class:_vm.runButtonClassObject,on:{\"click\":function($event){_vm.startRun();_vm.update()}}},[_c('i',{staticClass:\"fa-solid fa-biohazard\"})]),_vm._v(\" \"+_vm._s(_vm.runDescription)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.bonusInfo)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.rewardInfo)+\" \"),_c('br'),_c('br'),_c('div',[(_vm.recordScore > 0)?_c('span',[_vm._v(\" Your record score is \"+_vm._s(_vm.format(_vm.recordScore, 2))+\", achieved with \"+_vm._s(_vm.corruptionSet[0])+\"/\"+_vm._s(_vm.corruptionSet[1])+\"/\"+_vm._s(_vm.corruptionSet[2])+\"/\"+_vm._s(_vm.corruptionSet[3])+\"/\"+_vm._s(_vm.corruptionSet[4])+\"/\"+_vm._s(_vm.corruptionSet[5])+\"/\"+_vm._s(_vm.corruptionSet[6])+\"/\"+_vm._s(_vm.corruptionSet[7])+\"/\"+_vm._s(_vm.corruptionSet[8])+\"/\"+_vm._s(_vm.corruptionSet[9])+\" \")]):_c('span',[_vm._v(\" You have not mended in a hostile multiverse yet. \")])])])]),_c('div',[_vm._v(\" Prestige Limits: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[0],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(0, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" IP, EP, and RM gain by ^\"+_vm._s(_vm.localPenalties.prestigeLimits[this.corruptions[0]])+\". \"),_c('br'),_c('br'),_vm._v(\" Dimensional Limitations: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[1],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(1, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" AD, ID, and TD multipliers ^\"+_vm._s(_vm.format(_vm.dimLimNerf ? _vm.localPenalties.dimLimits.postNerf[[this.corruptions[1]]] : _vm.localPenalties.dimLimits.preNerf[[this.corruptions[1]]], 2, 3))+\" \"),_c('br'),_c('br'),_vm._v(\" Time Compression: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[2],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(2, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Gamespeed ^\"+_vm._s(_vm.localPenalties.timeCompression.power[this.corruptions[2]])+\" and then /\"+_vm._s(_vm.timeCompMult)+\" \"),_c('br'),_c('br'),_vm._v(\" Galactic Weakness: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[3],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(3, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Galaxy Scaling ^\"+_vm._s(_vm.localPenalties.galWeak.scaling[this.corruptions[3]])+\" and power \"+_vm._s(_vm.formatX(_vm.localPenalties.galWeak.strength[this.corruptions[3]], 1, 2))+\" \"),_c('br'),_c('br'),_vm._v(\" Complex Glyphs: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[4],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(4, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Glyph Level ^\"+_vm._s(_vm.localPenalties.compGlyphs.level[this.corruptions[4]])+\" and then \"+_vm._s(_vm.formatX(_vm.localPenalties.compGlyphs.level[this.corruptions[4]], 1, 2))+\". \"),_c('br'),_vm._v(\" Glyph Rarity ^\"+_vm._s(_vm.localPenalties.compGlyphs.rarity[this.corruptions[4]])+\" and then \"+_vm._s(_vm.formatX(_vm.localPenalties.compGlyphs.rarity[this.corruptions[4]], 1, 2))+\". \"),_c('br'),_c('br'),_vm._v(\" Tick Extension: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[5],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(5, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Tickspeed ^\"+_vm._s(_vm.formatInt(1))+\"/\"+_vm._s(_vm.format(_vm.localPenalties.tickExtension[this.corruptions[5]], 2, 1))+\". \"),_c('br'),_vm._v(\" Time Shard Gain /\"+_vm._s(_vm.format(_vm.localPenalties.tickExtension[this.corruptions[5]], 2, 1))+\". \"),_c('br'),_c('br'),_vm._v(\" Atomic Dilution: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[6],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(6, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Antimatter exponent ^\"+_vm._s(_vm.format(_vm.localPenalties.atomDilution[this.corruptions[6]], 3, 3))+\". \"),_c('br'),_c('br'),_vm._v(\" Theory of Dilation: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[7],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(7, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" DT and TP gain ^\"+_vm._s(_vm.format(_vm.localPenalties.toD.power[this.corruptions[7]], 3, 3))+\". \"),_c('br'),_vm._v(\" DT gain ×\"+_vm._s(_vm.localPenalties.toD.mult[this.corruptions[7]].toString())+\". \"),_c('br'),_c('br'),_vm._v(\" Replicative Singularities: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[8],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(8, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Replicanti gain ^\"+_vm._s(_vm.localPenalties.repSing.rep[this.corruptions[8]].toString())+\". \"),_c('br'),_vm._v(\" Sigularity gain ^\"+_vm._s(_vm.localPenalties.repSing.sing[this.corruptions[8]].toString())+\". \"),_c('br'),_vm._v(\" Dark Matter gain ^\"+_vm._s(_vm.localPenalties.repSing.dm[this.corruptions[8]].toString())+\". \"),_c('br'),_c('br'),_vm._v(\" Study of Forever: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[9],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(9, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Studies TT cost ×\"+_vm._s(_vm.format(_vm.localPenalties.soF.ttcost[this.corruptions[9]], 0, 0))+\". \"),_c('br'),_vm._v(\" TD mult ^\"+_vm._s(_vm.localPenalties.soF.tdpow[this.corruptions[9]].toString())+\". \")],1)]),_c('div',{staticClass:\"button-container\"},[_c('button',{staticClass:\"o-pelle-button\",on:{\"click\":_vm.showModal}},[_vm._v(\" Show full nerf effects of specific Hostilities \")]),_c('br'),_vm._v(\" Last two row of Hostile Upgrades are only effective in Hostile Mends, and they won't affect the number display at this page. (sry) \")]),_vm._l((5),function(row){return _c('div',{key:row,staticClass:\"l-mending-upgrade-grid__row\"},_vm._l((5),function(column){return _c('CorruptionUpgradeButton',{key:_vm.id(row, column),attrs:{\"upgrade\":_vm.upgrades[_vm.id(row, column)]}})}),1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-mending-upgrade-btn c-mending-upgrade-btn\",class:_vm.classObject,on:{\"click\":function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.upgrade.purchase()}}},[_c('HintText',{staticClass:\"l-hint-text--mending-upgrade c-hint-text--mending-upgrade\",attrs:{\"type\":\"warpUpgrades\"}},[_vm._v(\" \"+_vm._s(_vm.config.name)+\" \")]),_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),((false) && !_vm.isRebuyable)?[_c('br'),_c('DescriptionDisplay',{staticClass:\"c-mending-upgrade-btn__requirement\",attrs:{\"config\":_vm.requirementConfig,\"label\":\"Requirement:\"}})]:[_c('EffectDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\"}}),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\",\"name\":\"Hostile Fragment\"}}):_vm._e()]],2)],1),(_vm.canBeLocked)?_c('div',{staticClass:\"o-requirement-lock\"},[(_vm.hasRequirementLock)?_c('i',{staticClass:\"fas fa-lock\"}):(_vm.canLock)?_c('i',{staticClass:\"fas fa-lock-open\"}):_vm._e()]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CorruptionUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CorruptionUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CorruptionUpgradeButton.vue?vue&type=template&id=a1c479ea&scoped=true&\"\nimport script from \"./CorruptionUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./CorruptionUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a1c479ea\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CorruptionChallengeTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CorruptionChallengeTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CorruptionChallengeTab.vue?vue&type=template&id=78881c79&scoped=true&\"\nimport script from \"./CorruptionChallengeTab.vue?vue&type=script&lang=js&\"\nexport * from \"./CorruptionChallengeTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CorruptionChallengeTab.vue?vue&type=style&index=0&id=78881c79&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"78881c79\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.activeComponent,{tag:\"component\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-time-dim-tab l-centered-vertical-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all \")])],1),_c('div',[_c('p',[_vm._v(\" You have gained \"),_c('span',{staticClass:\"c-multiversal-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.boostPoints, 2, 1)))]),_vm._v(\" Galactic Shards, \"+_vm._s(_vm.txt1())),_c('span',{staticClass:\"c-multiversal-dim-description__accent\"},[_vm._v(_vm._s(_vm.txt2()))]),_vm._v(_vm._s(_vm.txt3())+\". \")])]),_c('div',[_vm._v(\" The effectiveness of Galactic Shards decreases above \"+_vm._s(_vm.format(50))+\"%. \")]),_c('div',[_vm._v(\" You are getting \"+_vm._s(_vm.format(_vm.shardsPerSecond, 2, 0))+\" \"+_vm._s(_vm.incomeType)+\" per second, unaffected by game speed. \")]),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('ClassicMultiversalDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked && !_vm.requirementReached }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 1),\"amount-text\":_vm.format(_vm.amount, 2),\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td o-primary-btn--buy-dim c-dim-tooltip-container\",class:_vm.buttonClass(),attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isCapped},on:{\"click\":_vm.buyMultiversalDimension}},[_vm._v(\" \"+_vm._s(_vm.buttonContents)+\" \"),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.tooltipContents)}})])]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td-auto\",attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isCapped},on:{\"click\":_vm.buyMaxMultiversalDimension}},[_vm._v(\" Buy Max \")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicMultiversalDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicMultiversalDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicMultiversalDimensionRow.vue?vue&type=template&id=4c8aa071&scoped=true&\"\nimport script from \"./ClassicMultiversalDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicMultiversalDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicMultiversalDimensionRow.vue?vue&type=style&index=0&id=4c8aa071&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4c8aa071\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicMultiversalDimensionsTab.vue?vue&type=template&id=5de1d430&\"\nimport script from \"./ClassicMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-time-dim-tab l-centered-vertical-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all \")])],1),_c('div',[_c('p',[_vm._v(\" You have gained \"),_c('span',{staticClass:\"c-multiversal-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.boostPoints, 2, 1)))]),_vm._v(\" Galactic Shards, \"+_vm._s(_vm.txt1())),_c('span',{staticClass:\"c-multiversal-dim-description__accent\"},[_vm._v(_vm._s(_vm.txt2()))]),_vm._v(_vm._s(_vm.txt3())+\". \")])]),_c('div',[_vm._v(\"You are getting \"+_vm._s(_vm.format(_vm.shardsPerSecond, 2, 0))+\" \"+_vm._s(_vm.incomeType)+\" per second, unaffected by game speed.\")]),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('NewMultiversalDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-row-multiversal-dim l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked && !_vm.requirementReached }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 1),\"amount-text\":_vm.format(_vm.amount, 2),\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container c-modern-dim-tooltip-container\",style:(_vm.cssVars)},[_c('div',{staticClass:\"c-modern-dim-purchase-count-tooltip\",style:(_vm.cssVars)},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.tooltipContents)}})]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td o-primary-btn o-primary-btn--new o-primary-btn--buy-dim\",class:_vm.buttonClass(),attrs:{\"enabled\":_vm.isAvailableForPurchase},on:{\"click\":_vm.buyMultiversalDimension}},[_vm._v(\" \"+_vm._s(_vm.buttonContents)+\" \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td-auto\",attrs:{\"enabled\":_vm.isAvailableForPurchase},on:{\"click\":_vm.buyMaxMultiversalDimension}},[_vm._v(\" Buy Max \")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernMultiversalDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernMultiversalDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernMultiversalDimensionRow.vue?vue&type=template&id=32da9d66&scoped=true&\"\nimport script from \"./ModernMultiversalDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernMultiversalDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernMultiversalDimensionRow.vue?vue&type=style&index=0&id=32da9d66&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"32da9d66\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernMultiversalDimensionsTab.vue?vue&type=template&id=07bad0dc&\"\nimport script from \"./ModernMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultiversalDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultiversalDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MultiversalDimensionsTab.vue?vue&type=template&id=6f3b1cd1&\"\nimport script from \"./MultiversalDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./MultiversalDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Temporarily aggregate tab components here until GameUI is migrated to SFC\r\nimport AlchemyTab from \"./alchemy/AlchemyTab\";\r\nimport AntimatterDimensionsTab from \"./antimatter-dimensions/AntimatterDimensionsTab\";\r\nimport AutobuyersTab from \"./autobuyers/AutobuyersTab\";\r\nimport AutomatorTab from \"./automator/AutomatorTab\";\r\nimport BlackHoleTab from \"./black-hole/BlackHoleTab\";\r\nimport BreakInfinityTab from \"./break-infinity/BreakInfinityTab\";\r\nimport CelestialNavigationTab from \"./celestial-navigation/CelestialNavigationTab\";\r\nimport ChallengeRecordsTab from \"./challenge-records/ChallengeRecordsTab\";\r\nimport EffarigTab from \"./celestial-effarig/EffarigTab\";\r\nimport EnslavedTab from \"./celestial-enslaved/EnslavedTab\";\r\nimport EternityChallengesTab from \"./eternity-challenges/EternityChallengesTab\";\r\nimport EternityMilestonesTab from \"./eternity-milestones/EternityMilestonesTab\";\r\nimport EternityUpgradesTab from \"./eternity-upgrades/EternityUpgradesTab\";\r\nimport GlyphSetRecordsTab from \"./glyph-set-records/GlyphSetRecordsTab\";\r\nimport GlyphsTab from \"./glyphs/GlyphsTab\";\r\nimport ImaginaryUpgradesTab from \"./imaginary-upgrades/ImaginaryUpgradesTab\";\r\nimport InfinityChallengesTab from \"./infinity-challenges/InfinityChallengesTab\";\r\nimport InfinityDimensionsTab from \"./infinity-dimensions/InfinityDimensionsTab\";\r\nimport InfinityUpgradesTab from \"./infinity-upgrades/InfinityUpgradesTab\";\r\nimport LaitelaTab from \"./celestial-laitela/LaitelaTab\";\r\nimport MultiplierBreakdownTab from \"./statistics/MultiplierBreakdownTab\";\r\nimport NormalAchievementsTab from \"./normal-achievements/NormalAchievementsTab\";\r\nimport NormalChallengesTab from \"./normal-challenges/NormalChallengesTab\";\r\nimport OptionsGameplayTab from \"./options-gameplay/OptionsGameplayTab\";\r\nimport OptionsSavingTab from \"./options-saving/OptionsSavingTab\";\r\nimport OptionsVisualTab from \"./options-visual/OptionsVisualTab\";\r\nimport PastPrestigeRunsTab from \"./past-prestige-runs/PastPrestigeRunsTab\";\r\nimport PelleTab from \"./celestial-pelle/PelleTab\";\r\nimport PerksTab from \"./perks/PerksTab\";\r\nimport PreviousSpeedrunTab from \"./speedrun-milestones/PreviousSpeedrunTab\";\r\nimport RaTab from \"./celestial-ra/RaTab\";\r\nimport RealityUpgradesTab from \"./reality-upgrades/RealityUpgradesTab\";\r\nimport ReplicantiTab from \"./replicanti/ReplicantiTab\";\r\nimport SecretAchievementTab from \"./secret-achievements/SecretAchievementTab\";\r\nimport ShopTab from \"./shop/ShopTab\";\r\nimport SpeedrunMilestonesTab from \"./speedrun-milestones/SpeedrunMilestonesTab\";\r\nimport StatisticsTab from \"./statistics/StatisticsTab\";\r\nimport TeresaTab from \"./celestial-teresa/TeresaTab\";\r\nimport TimeDilationTab from \"./time-dilation/TimeDilationTab\";\r\nimport TimeDimensionsTab from \"./time-dimensions/TimeDimensionsTab\";\r\nimport TimeStudiesTab from \"./time-studies/TimeStudiesTab\";\r\nimport VTab from \"./celestial-v/VTab\";\r\n\r\n//Custom Tabs Start Here\r\nimport MendingUpgrades from \"./mending/MendingUpgrades\";\r\nimport MendingMilestones from \"./mending/MendingMilestones\";\r\nimport WarpReality from \"./mending/WarpReality\";\r\nimport KohlersRealm from \"./mending/KohlersRealm\";\r\nimport CorruptionTab from \"./corruption/CorruptionChallengeTab\";\r\nimport MultiversalDimensionsTab from \"./multiversal-dimensions/MultiversalDimensionsTab\";\r\n\r\n\r\nconst TabComponents = {\r\n AntimatterDimensionsTab,\r\n InfinityDimensionsTab,\r\n TimeDimensionsTab,\r\n OptionsSavingTab,\r\n OptionsVisualTab,\r\n OptionsGameplayTab,\r\n StatisticsTab,\r\n ChallengeRecordsTab,\r\n PastPrestigeRunsTab,\r\n GlyphSetRecordsTab,\r\n SpeedrunMilestonesTab,\r\n PreviousSpeedrunTab,\r\n NormalAchievementsTab,\r\n SecretAchievementTab,\r\n TeresaTab,\r\n EffarigTab,\r\n EnslavedTab,\r\n VTab,\r\n RaTab,\r\n LaitelaTab,\r\n PelleTab,\r\n AutobuyersTab,\r\n AutomatorTab,\r\n NormalChallengesTab,\r\n InfinityChallengesTab,\r\n EternityChallengesTab,\r\n InfinityUpgradesTab,\r\n BreakInfinityTab,\r\n ReplicantiTab,\r\n TimeStudiesTab,\r\n EternityUpgradesTab,\r\n EternityMilestonesTab,\r\n TimeDilationTab,\r\n GlyphsTab,\r\n RealityUpgradesTab,\r\n ImaginaryUpgradesTab,\r\n PerksTab,\r\n BlackHoleTab,\r\n AlchemyTab,\r\n CelestialNavigationTab,\r\n ShopTab,\r\n MultiplierBreakdownTab,\r\n MendingUpgrades,\r\n MendingMilestones,\r\n WarpReality,\r\n CorruptionTab,\r\n KohlersRealm,\r\n MultiversalDimensionsTab\r\n};\r\n\r\nexport default TabComponents;\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-s12-desktop-icons-container\"},_vm._l((_vm.DesktopIcons.entries),function(icon,idx){return _c('div',{key:icon.name,staticClass:\"c-s12-desktop-icon\",class:{ 'c-s12-desktop-icon--selected': _vm.DesktopIcons.selected === idx, },on:{\"click\":function($event){return _vm.handleClick(idx)}}},[_c('div',{staticClass:\"c-s12-desktop-icon__inner\"},[_c('img',{staticClass:\"c-s12-desktop-icon__img\",attrs:{\"src\":(\"images/s12/\" + (icon.image))}}),_c('div',{staticClass:\"c-s12-desktop-icon__text\"},[_vm._v(\" \"+_vm._s(icon.name)+\" \")])])])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default {\r\n entries: [{\r\n name: \"Windows Media Player\",\r\n action() {\r\n const links = [\r\n // Get trolled\r\n \"https://www.youtube.com/watch?v=dQw4w9WgXcQ\",\r\n // Rite of spring\r\n \"https://youtu.be/rP42C-4zL3w?t=2\",\r\n // Aleph 0 which for some reason caught on for a while\r\n \"https://www.youtube.com/watch?v=fTaWKbD3UK8\",\r\n // \"If you have not listened to first suite in E flat by Gustav Holst do it now\" -Erf\r\n \"https://www.youtube.com/watch?v=fLbP6qpI1YI\",\r\n ];\r\n window.open(links[Math.floor(Math.random() * links.length)]);\r\n },\r\n image: \"desktop--windows-media-player.png\"\r\n },\r\n {\r\n name: \"Discord\",\r\n action() {\r\n window.open(\"https://discord.gg/ST9NaXa\");\r\n },\r\n image: \"desktop--discord-logo.png\"\r\n },\r\n {\r\n name: \"Games\",\r\n action() {\r\n Modal.s12Games.show();\r\n },\r\n image: \"desktop--games.png\"\r\n }],\r\n selected: -1,\r\n};\r\n","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DesktopIcons.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DesktopIcons.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DesktopIcons.vue?vue&type=template&id=6bd6fa88&scoped=true&\"\nimport script from \"./DesktopIcons.vue?vue&type=script&lang=js&\"\nexport * from \"./DesktopIcons.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DesktopIcons.vue?vue&type=style&index=0&id=6bd6fa88&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6bd6fa88\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-s12-window__outer\",class:_vm.S12Windows.isMinimised ? 'c-s12-window__outer--minimised' : '',attrs:{\"id\":\"page\"}},[_c('link',{attrs:{\"rel\":\"stylesheet\",\"type\":\"text/css\",\"href\":_vm.isClassic ? 'stylesheets/classic.css' : 'stylesheets/modern-styles.css'}}),_c('span',{staticClass:\"c-s12-close-button\",on:{\"click\":function($event){_vm.S12Windows.isMinimised = true}}}),_c('span',{staticClass:\"c-modal__title\"},[_vm._v(\" \"+_vm._s(_vm.tabName)+\" \")]),_c('div',{key:_vm.newGameKey,staticClass:\"game-container c-s12-window__inner\",class:_vm.isClassic ? 'c-classic l-classic' : '',style:(_vm.topPadding)},[_c('GameUiComponentFixed'),_c('BackgroundAnimations'),_c('div',{staticClass:\"c-s12-window__content-container\"},[(_vm.news)?_c('NewsTicker'):_vm._e(),_c('BigCrunchButton'),(!_vm.bigCrunch)?_c('div',{staticClass:\"tab-container\"},[_c('HeaderPrestigeGroup'),_c('div',{staticClass:\"information-header\"},[_c('HeaderChallengeDisplay'),_c('HeaderChallengeEffects'),(_vm.hasReality)?_c('GameSpeedDisplay'):_vm._e(),(_vm.hasReality)?_c('br'):_vm._e(),_c('HeaderBlackHole')],1),_vm._t(\"default\")],2):_vm._e()],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","let subtabTimeoutId;\r\n\r\nexport const S12Windows = {\r\n isMinimised: false,\r\n tabs: {\r\n hoveringTab: undefined,\r\n setHoveringTab(tab) {\r\n this.hoveringTab = tab.id;\r\n clearTimeout(subtabTimeoutId);\r\n },\r\n unsetHoveringTab(instant = false) {\r\n if (instant) {\r\n this.hoveringTab = undefined;\r\n return;\r\n }\r\n subtabTimeoutId = setTimeout(() => this.hoveringTab = undefined, 1000);\r\n },\r\n tabButtonPositions: [],\r\n }\r\n};\r\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12Ui.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12Ui.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./S12Ui.vue?vue&type=template&id=1ee338fc&scoped=true&\"\nimport script from \"./S12Ui.vue?vue&type=script&lang=js&\"\nexport * from \"./S12Ui.vue?vue&type=script&lang=js&\"\nimport style0 from \"./S12Ui.vue?vue&type=style&index=0&id=1ee338fc&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1ee338fc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('div',{staticClass:\"c-game-ui--fixed\"},[(_vm.view.modal.progressBar)?_c('ModalProgressBar'):(_vm.view.quotes.current)?_c('CelestialQuoteModal',{attrs:{\"quote\":_vm.view.quotes.current}}):(_vm.view.quotes.history)?_c('CelestialQuoteHistoryDisplay',{attrs:{\"quotes\":_vm.view.quotes.history}}):(_vm.view.modal.current)?_c('PopupModal',{attrs:{\"modal\":_vm.view.modal.current}}):_vm._e(),(_vm.ending)?_c('FadeAway'):_vm._e(),(_vm.ending)?_c('CreditsContainer'):_vm._e(),(_vm.ending)?_c('NewGame'):_vm._e(),_c('SpectateGame')],1),_c('S12Taskbar')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isHidden)?_c('span',[_c('div',{staticClass:\"c-taskbar\"},[_c('img',{staticClass:\"c-start-icon\",attrs:{\"src\":\"images/s12/win7-start-menu-inactive.png\"},on:{\"click\":function($event){return _vm.startupSound.play()}}}),_vm._l((_vm.tabs),function(tab,tabPosition){return [(_vm.tabVisibilities[tabPosition])?_c('TaskbarIcon',{key:tab.name,attrs:{\"tab\":tab,\"tab-position\":tabPosition}}):_vm._e()]}),_c('div',{staticClass:\"c-s12-show-desktop\",on:{\"click\":function($event){_vm.S12Windows.isMinimised = true;}}})],2),_vm._l((_vm.tabs),function(tab,tabPosition){return [(_vm.tabVisibilities[tabPosition])?_c('S12Subtabs',{key:tab.name,attrs:{\"tab\":tab}}):_vm._e()]})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"subtabs\",staticClass:\"c-s12-subtabs\",class:{\n 'c-s12-subtabs--show': _vm.S12Windows.tabs.hoveringTab === _vm.tab.id,\n 'c-s12-subtabs--compact': _vm.useCompact,\n },style:({ left: _vm.left }),on:{\"mouseenter\":function($event){return _vm.S12Windows.tabs.setHoveringTab(_vm.tab)},\"mouseleave\":function($event){return _vm.S12Windows.tabs.unsetHoveringTab()}}},[_vm._l((_vm.tab.subtabs),function(subtab,index){return [(_vm.subtabVisibilities[index])?_c('div',{key:index,staticClass:\"c-s12-subtab-btn\",class:{ 'c-s12-subtab-btn--active': _vm.isCurrentSubtab(subtab.id) },on:{\"click\":function($event){subtab.show(true); _vm.S12Windows.isMinimised = false; _vm.S12Windows.tabs.unsetHoveringTab(true);}}},[_c('span',{staticClass:\"c-s12-subtab-btn__text\"},[(_vm.useCompact)?_c('span',{staticClass:\"c-s12-subtab-btn__symbol--small\",domProps:{\"innerHTML\":_vm._s(subtab.symbol)}}):_vm._e(),_vm._v(\" \"+_vm._s(subtab.name)+\" \")]),(!_vm.useCompact)?_c('span',{staticClass:\"c-s12-subtab-btn__symbol\",domProps:{\"innerHTML\":_vm._s(subtab.symbol)}}):_vm._e(),(subtab.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e()]})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12Subtabs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12Subtabs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./S12Subtabs.vue?vue&type=template&id=a1a81406&scoped=true&\"\nimport script from \"./S12Subtabs.vue?vue&type=script&lang=js&\"\nexport * from \"./S12Subtabs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./S12Subtabs.vue?vue&type=style&index=0&id=a1a81406&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a1a81406\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"taskbarIcon\",class:{\n 'c-taskbar-icon': true,\n 'c-taskbar-icon--active': _vm.isCurrentTab\n },attrs:{\"title\":_vm.tab.name},on:{\"mouseenter\":function($event){return _vm.S12Windows.tabs.setHoveringTab(_vm.tab)},\"mouseleave\":function($event){return _vm.S12Windows.tabs.unsetHoveringTab()},\"click\":function($event){_vm.tab.show(true); _vm.S12Windows.isMinimised = false; _vm.S12Windows.tabs.unsetHoveringTab(true);}}},[_c('img',{staticClass:\"c-taskbar-icon__image\",attrs:{\"src\":(\"images/s12/\" + (_vm.tab.key) + \".png\")}}),(_vm.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TaskbarIcon.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TaskbarIcon.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TaskbarIcon.vue?vue&type=template&id=6cc71a97&scoped=true&\"\nimport script from \"./TaskbarIcon.vue?vue&type=script&lang=js&\"\nexport * from \"./TaskbarIcon.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TaskbarIcon.vue?vue&type=style&index=0&id=6cc71a97&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6cc71a97\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12Taskbar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12Taskbar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./S12Taskbar.vue?vue&type=template&id=98c9ea58&scoped=true&\"\nimport script from \"./S12Taskbar.vue?vue&type=script&lang=js&\"\nexport * from \"./S12Taskbar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./S12Taskbar.vue?vue&type=style&index=0&id=98c9ea58&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"98c9ea58\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12UiFixed.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12UiFixed.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./S12UiFixed.vue?vue&type=template&id=b165c672&scoped=true&\"\nimport script from \"./S12UiFixed.vue?vue&type=script&lang=js&\"\nexport * from \"./S12UiFixed.vue?vue&type=script&lang=js&\"\nimport style0 from \"./S12UiFixed.vue?vue&type=style&index=0&id=b165c672&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b165c672\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameUIComponent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameUIComponent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GameUIComponent.vue?vue&type=template&id=16fa83ba&scoped=true&\"\nimport script from \"./GameUIComponent.vue?vue&type=script&lang=js&\"\nexport * from \"./GameUIComponent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GameUIComponent.vue?vue&type=style&index=0&id=16fa83ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"16fa83ba\",\n null\n \n)\n\nexport default component.exports","import VTooltip from \"v-tooltip\";\r\nimport VueGtag from \"vue-gtag\";\r\n\r\nimport { DEV } from \"@/env\";\r\n\r\nimport { useLongPress, useRepeatingClick } from \"./longpress\";\r\nimport { notify } from \"./notify\";\r\nimport { state } from \"./ui.init\";\r\n\r\nimport GameUIComponent from \"@/components/GameUIComponent\";\r\n\r\nVue.mixin({\r\n computed: {\r\n $viewModel() {\r\n return state.view;\r\n }\r\n },\r\n created() {\r\n if (this.update) {\r\n this.on$(GAME_EVENT.UPDATE, this.update);\r\n if (GameUI.initialized) {\r\n this.update();\r\n }\r\n }\r\n\r\n // Following is used to force the recomputation of computed values\r\n // from this fiddle https://codepen.io/sirlancelot/pen/JBeXeV\r\n const recomputed = Object.create(null);\r\n const watchers = this._computedWatchers;\r\n\r\n if (!watchers) return;\r\n\r\n for (const key in watchers) makeRecomputable(watchers[key], key, recomputed);\r\n\r\n this.$recompute = key => recomputed[key] = !recomputed[key];\r\n Vue.observable(recomputed);\r\n },\r\n destroyed() {\r\n EventHub.ui.offAll(this);\r\n },\r\n methods: {\r\n emitClick() {\r\n this.$emit(\"click\");\r\n },\r\n emitInput(val) {\r\n this.$emit(\"input\", val);\r\n },\r\n emitClose() {\r\n this.$emit(\"close\");\r\n },\r\n on$(event, fn) {\r\n EventHub.ui.on(event, fn, this);\r\n },\r\n format(value, places, placesUnder1000) {\r\n return format(value, places, placesUnder1000);\r\n },\r\n formatInt(value) {\r\n return formatInt(value);\r\n },\r\n formatNE(value, places, placesUnder1000) {\r\n return formatNE(value, places, placesUnder1000);\r\n },\r\n formatPercents(value, places) {\r\n return formatPercents(value, places);\r\n },\r\n formatRarity(value) {\r\n return formatRarity(value);\r\n },\r\n formatX(value, places, placesUnder1000) {\r\n return formatX(value, places, placesUnder1000);\r\n },\r\n formatPow(value, places, placesUnder1000) {\r\n return formatPow(value, places, placesUnder1000);\r\n },\r\n formatPostBreak(value, places, placesUnder1000) {\r\n return formatPostBreak(value, places, placesUnder1000);\r\n },\r\n pluralize,\r\n quantify,\r\n quantifyInt\r\n }\r\n});\r\n\r\n// This function is also from the fiddle above\r\nfunction makeRecomputable(watcher, key, recomputed) {\r\n const original = watcher.getter;\r\n recomputed[key] = true;\r\n\r\n // eslint-disable-next-line no-sequences\r\n watcher.getter = vm => (recomputed[key], original.call(vm, vm));\r\n}\r\n\r\nconst ReactivityComplainer = {\r\n complain() {\r\n this.checkReactivity(player, \"player\");\r\n },\r\n checkReactivity(obj, path) {\r\n if (obj === undefined || obj === null) {\r\n return;\r\n }\r\n if (obj.__ob__ !== undefined) {\r\n throw new Error(`Boi you fukked up - ${path} became REACTIVE (oh shite)`);\r\n }\r\n for (const key in obj) {\r\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\r\n const prop = obj[key];\r\n if (typeof prop === \"object\") {\r\n this.checkReactivity(prop, `${path}.${key}`);\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const GameUI = {\r\n notify,\r\n events: [],\r\n flushPromise: undefined,\r\n initialized: false,\r\n globalClickListener: null,\r\n touchDevice: (\"ontouchstart\" in window ||\r\n window.navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0 ||\r\n (window.DocumentTouch && document instanceof DocumentTouch)),\r\n dispatch(event, args) {\r\n const index = this.events.indexOf(event);\r\n if (index !== -1) {\r\n this.events.splice(index, 1);\r\n }\r\n if (event !== GAME_EVENT.UPDATE) {\r\n this.events.push([event, args]);\r\n }\r\n if (this.flushPromise) return;\r\n this.flushPromise = Promise.resolve()\r\n .then(this.flushEvents.bind(this));\r\n },\r\n flushEvents() {\r\n this.flushPromise = undefined;\r\n if (DEV) {\r\n if (PerformanceStats.isOn && PerformanceStats.currentBlocks.length > 0) {\r\n Vue.nextTick(() => PerformanceStats.start(\"Vue Render\"));\r\n PerformanceStats.start(\"Vue Update\");\r\n }\r\n }\r\n for (const event of this.events) {\r\n EventHub.ui.dispatch(event[0], event[1]);\r\n }\r\n EventHub.ui.dispatch(GAME_EVENT.UPDATE);\r\n if (DEV) {\r\n ReactivityComplainer.complain();\r\n if (PerformanceStats.isOn && PerformanceStats.currentBlocks.length > 0) {\r\n PerformanceStats.end();\r\n Vue.nextTick(() => {\r\n PerformanceStats.end(\"Vue Render\");\r\n PerformanceStats.end(\"Frame Time\");\r\n PerformanceStats.render();\r\n });\r\n }\r\n }\r\n this.events = [];\r\n },\r\n update() {\r\n this.dispatch(GAME_EVENT.UPDATE);\r\n }\r\n};\r\n\r\nexport const UIID = (function() {\r\n let id = 0;\r\n return { next: () => id++ };\r\n}());\r\n\r\nVTooltip.options.defaultClass = \"general-tooltip\";\r\nVTooltip.options.popover.defaultBaseClass = \"general-tooltip\";\r\nVTooltip.options.defaultTemplate =\r\n '
';\r\nVue.use(VTooltip);\r\n\r\n(function() {\r\n const methodStrategy = Vue.config.optionMergeStrategies.methods;\r\n // eslint-disable-next-line max-params\r\n Vue.config.optionMergeStrategies.methods = (parentVal, childVal, vm, key) => {\r\n const result = methodStrategy(parentVal, childVal, vm, key);\r\n const hasUpdate = val => val && val.update;\r\n if (!hasUpdate(parentVal) || !hasUpdate(childVal)) return result;\r\n result.update = function() {\r\n parentVal.update.call(this);\r\n childVal.update.call(this);\r\n };\r\n return result;\r\n };\r\n}());\r\n\r\nuseLongPress(Vue);\r\nuseRepeatingClick(Vue);\r\nVue.use(VueGtag, {\r\n config: { id: \"UA-77268961-1\" }\r\n});\r\n\r\nexport const ui = new Vue({\r\n el: \"#ui\",\r\n components: {\r\n GameUIComponent\r\n },\r\n data: state,\r\n computed: {\r\n notation() {\r\n return Notations.find(this.notationName);\r\n },\r\n currentGlyphTooltip() {\r\n return this.view.tabs.reality.currentGlyphTooltip;\r\n },\r\n scrollWindow() {\r\n return this.view.scrollWindow;\r\n },\r\n UIType() {\r\n return this.view.UIType;\r\n },\r\n },\r\n watch: {\r\n currentGlyphTooltip(newVal) {\r\n if (newVal !== -1 && !GameUI.globalClickListener) {\r\n GameUI.globalClickListener = () => {\r\n this.view.tabs.reality.currentGlyphTooltip = -1;\r\n document.removeEventListener(\"click\", GameUI.globalClickListener);\r\n GameUI.globalClickListener = null;\r\n };\r\n document.addEventListener(\"click\", GameUI.globalClickListener);\r\n } else if (newVal === -1 && GameUI.globalClickListener) {\r\n document.removeEventListener(\"click\", GameUI.globalClickListener);\r\n GameUI.globalClickListener = null;\r\n }\r\n },\r\n scrollWindow(newVal, oldVal) {\r\n if (newVal !== 0 && oldVal === 0) {\r\n this.scroll(Date.now());\r\n }\r\n },\r\n },\r\n methods: {\r\n scroll(t) {\r\n const now = Date.now();\r\n if (this.view.scrollWindow) {\r\n window.scrollBy(0, this.view.scrollWindow * (now - t) / 2);\r\n setTimeout(() => this.scroll(now), 20);\r\n }\r\n }\r\n },\r\n render: h => h(GameUIComponent)\r\n});\r\n","import { GameMechanicState, SetPurchasableMechanicState } from \"./game-mechanics\";\r\nimport { DC } from \"./constants\";\r\nimport { clearCelestialRuns } from \"./reality\";\r\nimport { eternity } from \"./eternity\";\r\nimport { UpgradeableAutobuyerState } from \"./autobuyers/autobuyer\";\r\nimport { perks } from \"./secret-formula/reality/perks\";\r\nimport { MendingUpgrade } from \"./mending-upgrades\";\r\nimport { GameUI } from \"./ui\";\r\nimport { Currency } from \"./currency\";\r\nimport { CorruptionData } from \"./corruption\";\r\nimport { CorruptionUpgrade, VUnlocks } from \"./globals\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nfunction lockAchievementsOnMend() {\r\n //if (Perk.achievementGroup5.isBought) return;\r\n for (const achievement of Achievements.preMend) {\r\n achievement.lock();\r\n }\r\n player.reality.achTimer = DC.D0;\r\n}\r\n\r\nexport function mendingResetRequest() {\r\n if (Player.canMend) askMendingConfirmation();\r\n}\r\n \r\n \r\nfunction askMendingConfirmation() {\r\n if (player.options.confirmations.mending) {\r\n Modal.mending.show();\r\n } \r\n else {\r\n mendingReset();\r\n }\r\n}\r\n\r\nexport function mendingReset() {\r\n // Finally, lets set up corruptions\r\n // hello, due to some upgrade need record to involve, corruption should be at first sry.--sxy\r\n if (CorruptionData.isCorrupted && (!player.celestials.pelle.galaxyGenerator.unlocked)) { //decided to allow pelle, yet not generator\r\n CorruptionData.isCorrupted = false; //wtf what a chaos logic;\r\n let scoreCalc = CorruptionData.calcScore()\r\n // console.log(corruptionChallengeScoreCalculation())\r\n if (CorruptionData.corruptionChallenge.recordScore < scoreCalc) {\r\n player.mending.corruptionChallenge.records = player.mending.corruption\r\n player.mending.corruptionChallenge.recordScore = scoreCalc\r\n }\r\n player.mending.corruptedFragments = Math.ceil(Math.max(CorruptionData.recordCorruptedFragments, Math.log2(scoreCalc))) // Make sure the player doesnt decrease their own corrupted frag count\r\n player.mending.corruptionUpgradeBits = 0 // Basically a respec call\r\n player.mending.corruptionChallenge.corruptedMend = false\r\n }\r\n \r\n if (!MendingMilestone.six.isReached){\r\n Tab.dimensions.antimatter.show();\r\n } // So before we call anything we force the player onto the antimatter tab, to prevent going to into cel realities wayyyy too early\r\n EventHub.dispatch(GAME_EVENT.MENDING_RESET_BEFORE)\r\n //lockAchievementsOnMend();\r\n if(!Pelle.isDoomed || player.celestials.pelle.records.totalAntimatter.plus(1).log10() >= 9e15){ //should check if Doomed and not END so people don't get free MvR and mend stat\r\n Currency.mendingPoints.add(gainedMendingPoints());\r\n Currency.mends.add(1);\r\n }\r\n if (Effarig.isRunning && !EffarigUnlock.mend.isUnlocked && Ra.unlocks.effarigMendUnlock.isUnlocked) {\r\n EffarigUnlock.mend.unlock();\r\n EffarigUnlock.infinity.unlock();\r\n EffarigUnlock.eternity.unlock();\r\n EffarigUnlock.reality.unlock();\r\n }\r\n let x = player.reality.glyphs.protectedRows;\r\n player.reality.glyphs.protectedRows = 0;\r\n for (let g = 0; g < 120; g++){\r\n let glyph = Glyphs.inventory[g];\r\n if (glyph != null && glyph.type != \"companion\") GlyphSacrificeHandler.deleteGlyph(glyph, true);\r\n }\r\n Glyphs.unequipAll(true);\r\n for (let h = 0; h < 120; h++){\r\n let glyph = Glyphs.inventory[h];\r\n if (glyph != null && glyph.type != \"companion\") GlyphSacrificeHandler.deleteGlyph(glyph, true);\r\n }\r\n player.reality.glyphs.protectedRows = x;\r\n /*if(Effarig.currentStage < 6){\r\n player.reality.glyphs.filter.trash = 0;\r\n player.reality.glyphs.filter.select = 1;\r\n }*/ //why reset--sxy\r\n player.blackHoleNegative = 1;\r\n player.isGameEnd = false;\r\n player.celestials.pelle.doomed = false;\r\n player.options.hiddenTabBits = 0;\r\n //Start reseting all the things\r\n player.challenge= {\r\n normal: {\r\n current: 0,\r\n completedBits: 0,\r\n bestTimes: player.challenge.normal.bestTimes,\r\n },\r\n infinity: {\r\n current: 0,\r\n completedBits: 0,\r\n bestTimes: player.challenge.infinity.bestTimes,\r\n },\r\n eternity: {\r\n current: 0,\r\n unlocked: 0,\r\n requirementBits: 0,\r\n }\r\n }\r\n if (!Achievement(194).isUnlocked) {\r\n player.records.totalAntimatter = DC.E1,\r\n player.challenge.normal.bestTimes = Array.repeat(Decimal.pow10(Number.MAX_VALUE), 11);\r\n player.challenge.infinity.bestTimes = Array.repeat(Decimal.pow10(Number.MAX_VALUE), 8);\r\n }\r\n //Celestials\r\n if(!MendingMilestone.ten.isReached){\r\n player.celestials.teresa.pouredAmount = 0;\r\n player.celestials.teresa.unlockBits = 0;\r\n }\r\n player.celestials.teresa.run = false;\r\n player.celestials.teresa.bestRunAM = MendingUpgrade(9).isBought ? DC.E1E10 : DC.D1;\r\n player.celestials.teresa.bestAMSet = [];\r\n player.celestials.teresa.perkShop = Array.repeat(0, 5);\r\n if (MendingMilestone.seven.isReached) {\r\n player.celestials.teresa.perkShop = [20, 20, 14, 6, 0, 0];\r\n if(CorruptionUpgrade(5).isBought) player.celestials.teresa.perkShop = [65, 65, 14, 6, 0, 0]\r\n }\r\n player.celestials.teresa.lastRepeatedMachines = DC.D0;\r\n if (MendingUpgrade(9).isBought && !MendingMilestone.ten.isReached){\r\n player.celestials.teresa.unlockBits += 1;\r\n }\r\n if(Effarig.currentStage < 6){\r\n player.celestials.effarig.relicShards = new Decimal(0);\r\n player.celestials.effarig.unlockBits = 7;\r\n }\r\n player.celestials.effarig.run = false;\r\n player.celestials.enslaved.stored = DC.D0;\r\n player.celestials.enslaved.storedReal = 0;\r\n player.celestials.enslaved.isAutoReleasing = false;\r\n player.celestials.enslaved.unlocks = [];\r\n player.celestials.enslaved.run = false;\r\n player.celestials.enslaved.completed = false;\r\n player.celestials.enslaved.tesseracts = 0;\r\n player.celestials.enslaved.hasSecretStudy = false;\r\n player.celestials.enslaved.progressBits = 0;\r\n if(MendingUpgrade(7).isBought){\r\n player.celestials.enslaved.unlocks = [0, 1];\r\n player.celestials.enslaved.completed = true;\r\n }\r\n if(!VUnlocks.vKeep.isUnlocked){\r\n V.reset();\r\n if(MendingUpgrade(14).isBought){\r\n player.celestials.v.runUnlocks = [3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n }\r\n }\r\n V.updateTotalRunUnlocks();\r\n player.celestials.v.quoteBits = 2047;\r\n if(!Ra.unlocks.raNoReset.isUnlocked) Ra.reset();\r\n player.celestials.ra.petWithRemembrance = \"\";\r\n player.celestials.ra.alchemy = Array.repeat(0, 21)\r\n .map(() => ({\r\n amount: 0,\r\n reaction: false\r\n }));\r\n player.celestials.ra.highestRefinementValue = {\r\n power: 0,\r\n infinity: 0,\r\n time: 0,\r\n replication: 0,\r\n dilation: 0,\r\n effarig: 0\r\n };\r\n player.celestials.ra.quoteBits = 16383;\r\n if(player.mending.corruptNext || !KohlerProgressUnlocks.hostileScore.isUnlocked){\r\n player.celestials.ra.charged = new Set();\r\n player.celestials.ra.breakCharged = new Set();\r\n }\r\n Laitela.reset();\r\n if (MendingUpgrade(4).isBought){\r\n player.celestials.laitela.difficultyTier = 8;\r\n }\r\n player.celestials.laitela.quoteBits = 1023;\r\n player.celestials.pelle.upgrades.clear();\r\n player.celestials.pelle.remnants = 0;\r\n player.celestials.pelle.realityShards = DC.D0;\r\n player.celestials.pelle.records = {\r\n totalAntimatter: DC.D0,\r\n totalInfinityPoints: DC.D0,\r\n totalEternityPoints: DC.D0,\r\n },\r\n player.celestials.pelle.rebuyables.antimatterDimensionMult = 0;\r\n player.celestials.pelle.rebuyables.timeSpeedMult = 0;\r\n player.celestials.pelle.rebuyables.glyphLevels = 0;\r\n player.celestials.pelle.rebuyables.infConversion = 0;\r\n player.celestials.pelle.rebuyables.galaxyPower = 0;\r\n player.celestials.pelle.rebuyables.galaxyGeneratorAdditive = 0;\r\n player.celestials.pelle.rebuyables.galaxyGeneratorMultiplicative = 0;\r\n player.celestials.pelle.rebuyables.AntimatterMult = 0;\r\n player.celestials.pelle.rebuyables.galaxyGeneratorIPMult = 0;\r\n player.celestials.pelle.rebuyables.galaxyGeneratorEPMult = 0;\r\n player.celestials.pelle.rifts.vacuum.fill = DC.D0;\r\n player.celestials.pelle.rifts.vacuum.active = false;\r\n player.celestials.pelle.rifts.vacuum.reducedTo = 1;\r\n player.celestials.pelle.rifts.decay.fill = DC.D0;\r\n player.celestials.pelle.rifts.decay.active = false;\r\n player.celestials.pelle.rifts.decay.percentageSpent = 0;\r\n player.celestials.pelle.rifts.decay.reducedTo = 1;\r\n player.celestials.pelle.rifts.chaos.fill = 0;\r\n player.celestials.pelle.rifts.chaos.active = false;\r\n player.celestials.pelle.rifts.chaos.reducedTo = 1;\r\n player.celestials.pelle.rifts.recursion.fill = DC.D0;\r\n player.celestials.pelle.rifts.recursion.active = false;\r\n player.celestials.pelle.rifts.recursion.reducedTo = 1;\r\n player.celestials.pelle.rifts.paradox.fill = DC.D0;\r\n player.celestials.pelle.rifts.paradox.active = false;\r\n player.celestials.pelle.rifts.paradox.reducedTo = 1;\r\n player.celestials.pelle.progressBits = 0;\r\n player.celestials.pelle.galaxyGenerator.unlocked = false;\r\n player.celestials.pelle.galaxyGenerator.spentGalaxies = 0;\r\n player.celestials.pelle.galaxyGenerator.generatedGalaxies = 0;\r\n player.celestials.pelle.galaxyGenerator.phase = 0;\r\n player.celestials.pelle.galaxyGenerator.sacrificeActive = false;\r\n player.celestials.pelle.collapsed.upgrades = false;\r\n player.celestials.pelle.collapsed.rifts = false;\r\n player.celestials.pelle.collapsed.galaxies = false;\r\n //Reality\r\n //player.reality.autoAutoClean = false; //excuse me why you reset this option--sxy\r\n //player.reality.glyphs.trash = 0; //exm --sxy\r\n resetRealityRuns();\r\n player.records.thisReality = {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n maxEP: DC.D0,\r\n bestEternitiesPerMs: DC.D0,\r\n maxReplicanti: DC.D0,\r\n maxDT: DC.D0,\r\n bestRSmin: DC.D0,\r\n bestRSminVal: DC.D0,\r\n remWithoutGG: 0\r\n },\r\n player.records.bestReality = {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n glyphStrength: 0,\r\n RM: DC.D0,\r\n RMSet: [],\r\n RMmin: DC.D0,\r\n RMminSet: [],\r\n glyphLevel: 0,\r\n glyphLevelSet: [],\r\n bestEP: DC.D0,\r\n bestEPSet: [],\r\n speedSet: [],\r\n iMCapSet: [],\r\n laitelaSet: [],\r\n remWithoutGG: player.records.bestReality.remWithoutGG\r\n },\r\n //player.options.confirmations.glyphSelection = true;\r\n player.reality.unlockedEC = 0;\r\n Perks.find(0).isBought = true; //give START to fix a bug for hardcoded first Reality Glyph reward\r\n Perks.find(0).onPurchased();\r\n \r\n player.realities = MendingUpgrade(2).isBought ? 10000 : 0;\r\n for (const perkId of [10, 12, 13, 14, 15, 16, 17, 30, 31, 40, 41, 42, 43, 44, 45, 46, 51, 52, 53, 54, 55, 56, 57, 60, 61, 62, 70, 71, 72, 73, 80, 81, 82, 83, 100, 101, 102, 103, 104, 105, 106, 201, 202, 203, 204, 205]) {\r\n const perk = Perks.find(perkId); //shoutouts to earth for code, yes I could do dev.giveAllPerks or something, but I'm futureproofing for post-Mend perks\r\n perk.isBought = false;\r\n if (MendingMilestone.three.isReached){\r\n perk.isBought = true;\r\n perk.onPurchased();\r\n }\r\n }\r\n GameUI.update();\r\n player.reality.upgReqs = 8192;\r\n player.reality.imaginaryUpgReqs = 0;\r\n player.reality.upgradeBits = 8192; //Give Telechemical\r\n if (MendingMilestone.three.isReached){\r\n player.reality.upgReqs += 1048576; //give Parity\r\n player.reality.upgradeBits += 1048576;\r\n }\r\n player.reality.imaginaryUpgradeBits = 0;\r\n if (MendingMilestone.three.isReached){\r\n player.reality.imaginaryUpgReqs += 1048576; //give Vacuum\r\n player.reality.imaginaryUpgradeBits += 1048576;\r\n }\r\n player.reality.upgReqs += 262144\r\n player.reality.upgradeBits += 262144\r\n // This gives Measure of Forever and fixes any bugs related to it\r\n player.reality.realityMachines = DC.D0;\r\n player.reality.reqLock.reality = 0;\r\n player.reality.reqLock.imaginary = 0;\r\n player.reality.imaginaryMachines = 0;\r\n player.reality.maxRM = DC.D0;\r\n player.reality.iMCap = 0;\r\n player.reality.glyphs.sac.power = DC.D0;\r\n player.reality.glyphs.sac.infinity = DC.D0;\r\n player.reality.glyphs.sac.replication = DC.D0;\r\n player.reality.glyphs.sac.time = DC.D0;\r\n player.reality.glyphs.sac.dilation = DC.D0;\r\n player.reality.glyphs.sac.effarig = DC.D0;\r\n player.reality.glyphs.sac.reality = DC.D0;\r\n player.reality.glyphs.undo = [];\r\n player.reality.perkPoints = 0;\r\n for (let i = 1; i <= 5; i++){\r\n player.reality.rebuyables[i] = MendingMilestone.four.isReached ? 5 : 0;\r\n }\r\n for (let i = 1; i <= 10; i++){\r\n player.reality.imaginaryRebuyables[i] = 0;\r\n }\r\n for (let i = 0; i < 2; i++){\r\n player.blackHole[i].intervalUpgrades = 0;\r\n player.blackHole[i].powerUpgrades = 0;\r\n if(MendingMilestone.three.isReached){\r\n player.blackHole[i].powerUpgrades = 3;\r\n }\r\n player.blackHole[i].durationUpgrades = 0;\r\n player.blackHole[i].phase = 0;\r\n player.blackHole[i].unlocked = false;\r\n player.blackHole[i].active = false;\r\n if (MendingMilestone.three.isReached){\r\n player.blackHole[i].active = true;\r\n player.blackHole[i].unlocked = true;\r\n }\r\n player.blackHole[i].activations = 0;\r\n BlackHole(i+1).powerUpgrade._lazyValue.invalidate();//exm? It turns out that this was kept all along?--sxy\r\n BlackHole(i+1).powerUpgrade._lazyCost.invalidate()\r\n }\r\n if (MendingUpgrade(4).isBought){\r\n player.reality.imaginaryUpgReqs += 32768;\r\n player.reality.imaginaryUpgradeBits += 32768;\r\n }\r\n for(let i = 0; i < 1; i++){\r\n player.expoBlackHole[i].powerUpgrades = 0;\r\n player.expoBlackHole[i].activations = 0;\r\n ExpoBlackHole(i+1).powerUpgrade._lazyValue.invalidate();//there must be a better fix for this--sxy\r\n ExpoBlackHole(i+1).powerUpgrade._lazyCost.invalidate()\r\n }\r\n //Eternity\r\n resetEternityRuns();\r\n player.respec = false;\r\n player.infinitiesBanked = DC.D0;\r\n player.eternityUpgrades.clear();\r\n Currency.eternityPoints.reset();\r\n fullResetTimeDimensions();\r\n resetTimeDimensions();\r\n Currency.eternities.reset();\r\n if (MendingUpgrade(2).isBought){\r\n Currency.eternities.bumpTo(1000000);\r\n }\r\n Currency.timeShards.reset();\r\n Currency.timeTheorems.reset();\r\n player.records.bestEternity = {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n bestEPminReality: DC.D0,\r\n },\r\n player.records.thisEternity = {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n bestIPMsWithoutMaxAll: DC.D0,\r\n bestEPmin: DC.D0,\r\n bestEPminVal: DC.D0,\r\n bestInfinitiesPerMs: DC.D0,\r\n },\r\n player.totalTickGained = 0;\r\n if (!MendingUpgrade(3).isBought){\r\n player.eternityChalls = {}\r\n }\r\n else{\r\n for (let i = 1; i <= 12; i++){\r\n EternityChallenge(i).completions = 5;\r\n }\r\n }\r\n player.eterc8ids = 50;\r\n player.eterc8repl = 40;\r\n player.dilation.studies = [];\r\n player.dilation.active = false;\r\n player.dilation.upgrades.clear();\r\n player.dilation.rebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 11: 0,\r\n 12: 0,\r\n 13: 0\r\n };\r\n Currency.tachyonParticles.reset();\r\n player.dilation.nextThreshold = DC.E3;\r\n player.dilation.baseTachyonGalaxies = 0;\r\n player.dilation.totalTachyonGalaxies = 0;\r\n Currency.dilatedTime.reset();\r\n player.records.thisEternity = {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n bestIPMsWithoutMaxAll: DC.D0,\r\n bestEPmin: DC.D0,\r\n bestEPminVal: DC.D0,\r\n bestInfinitiesPerMs: DC.D0,\r\n },\r\n player.dilation.lastEP = DC.DM1;\r\n player.eternityUpgrades.clear();\r\n EternityUpgrade.epMult.reset();\r\n //Infinity\r\n resetInfinityRuns();\r\n player.records.thisInfinity = {\r\n time: DC.D0,\r\n realTime: 0,\r\n lastBuyTime: DC.D0,\r\n maxAM: DC.D0,\r\n bestIPmin: DC.D0,\r\n bestIPminVal: DC.D0,\r\n },\r\n player.records.bestInfinity = {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n bestIPminEternity: DC.D0,\r\n bestIPminReality: DC.D0,\r\n },\r\n Currency.infinityPoints.reset();\r\n InfinityDimensions.fullReset();\r\n Currency.infinities.reset();\r\n if (MendingUpgrade(2).isBought){\r\n Currency.infinities.bumpTo(1e12);\r\n }\r\n player.partInfinityPoint = 0;\r\n player.partInfinitied = 0;\r\n player.IPMultPurchases = 0;\r\n Currency.infinityPower.reset();\r\n Replicanti.reset();\r\n if(MendingUpgrade(2).isBought){\r\n player.replicanti.unl = true;\r\n }\r\n if(MendingUpgrade(2).isBought){\r\n InfinityChallenges.completeAll();\r\n }\r\n else{\r\n InfinityChallenges.clearCompletions();\r\n }\r\n playerInfinityUpgradesOnReset();\r\n player.IPMultPurchases = 0;\r\n //Pre-Infinity\r\n Currency.antimatter.reset();\r\n if(MendingMilestone.three.isReached){\r\n Currency.antimatter.bumpTo(5e130);\r\n }\r\n else{ //for some reason I still start with 10 AM even with r78 given, so this is a lazy man's fix\r\n Currency.antimatter.bumpTo(5e25);\r\n }\r\n player.dimensionBoosts = 0;\r\n player.galaxies = 0;\r\n player.sacrificed = DC.D0;\r\n AntimatterDimensions.reset();\r\n resetTickspeed();\r\n if (player.records.thisMend.realTime < player.records.bestMend.realTime){\r\n player.records.bestMend.realTime = player.records.thisMend.realTime;\r\n }\r\n if (player.records.thisMend.time.lt(player.records.bestMend.time)){\r\n player.records.bestMend.time = player.records.thisMend.time;\r\n }\r\n //Mending Timer\r\n player.records.thisMend = {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n maxEP: DC.D0,\r\n maxRM: DC.D0,\r\n maxiM: 0,\r\n maxRem: 0,\r\n }\r\n \r\n // Its crucial we do this after, else the player will corrupt and instantly complete a corruption\r\n if (player.mending.corruptNext) {\r\n let corruptionZeroCheck = true;\r\n for(let i=0;i<10;i++){\r\n if(CorruptionData.corruptions[i]!=0) corruptionZeroCheck = false;\r\n };\r\n player.mending.corruptNext = false\r\n if(!corruptionZeroCheck)player.mending.corruptionChallenge.corruptedMend = true\r\n }\r\n CorruptionData.update()\r\n\r\n\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.compGlyphs.hiddenFour[player.mending.corruption[4]]>0) {\r\n let generateLevel = 6666;\r\n if(CorruptionUpgrade(12).isBought) generateLevel = 666;\r\n for(let i=0;i new MendingMilestoneState(config)\r\n );\r\n\r\n\r\n ","\r\nimport { IntervaledAutobuyerState } from \"./autobuyer\";\r\nimport { MendingMilestone } from \"../mending\";\r\n\r\nexport class DilationUpgradeAutobuyerState extends IntervaledAutobuyerState {\r\n get _upgradeName() { return [\"dtGain\", \"galaxyThreshold\", \"tachyonGain\", \"dtGainPelle\", \"galaxyMultiplier\", \"tickspeedPower\"][this.id - 1]; }\r\n\r\n get data() {\r\n return player.auto.dilationUpgrades.all[this.id - 1];\r\n }\r\n\r\n get name() {\r\n return [`Dilated Time Multiplier`, `Tachyon Galaxy Threshold`, \"Tachyon Particle Multiplier\", \"Pelle DT Multiplier\", \"Pelle TG Multiplier\", \"Tickspeed Power\"][this.id - 1];\r\n }\r\n\r\n get interval() {\r\n return 1000 * Perk.autobuyerFasterDilation.effectOrDefault(1) / PerkShopUpgrade.autoSpeed.effectOrDefault(1);\r\n }\r\n\r\n get isUnlocked() {\r\n const upgradeName = this._upgradeName;\r\n if (upgradeName == \"dtGainPelle\" || upgradeName == \"galaxyMultiplier\" || upgradeName == \"tickspeedPower\"){\r\n return MendingMilestone.two.isReached\r\n }\r\n return (Perk.autobuyerDilation.isEffectActive && !Pelle.isDoomed) || (MendingMilestone.one.isReached);\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.REALITY;\r\n }\r\n\r\n get bulk() {\r\n if (MendingMilestone.two.isReached) return 100000; //lazy man's fix until a better solution is implemented\r\n return PerkShopUpgrade.bulkDilation.effectOrDefault(1);\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n const upgradeName = this._upgradeName;\r\n DilationUpgrade[upgradeName].purchase(this.bulk);\r\n }\r\n\r\n static get entryCount() { \r\n return 6\r\n }\r\n static get autobuyerGroupName() { return \"Dilation Upgrade\"; }\r\n static get isActive() { return player.auto.dilationUpgrades.isActive; }\r\n static set isActive(value) { player.auto.dilationUpgrades.isActive = value; }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { UpgradeableAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class DimBoostAutobuyerState extends UpgradeableAutobuyerState {\r\n get data() {\r\n return player.auto.dimBoost;\r\n }\r\n\r\n get name() {\r\n return `Dimension Boost`;\r\n }\r\n\r\n get isUnlocked() {\r\n if (PlayerProgress.mendingUnlocked()) return true;\r\n if (Pelle.isDisabled(\"dimBoostAutobuyer\")) return false;\r\n return this.canBeUpgraded;\r\n }\r\n\r\n get canBeUpgraded() {\r\n return NormalChallenge(10).isCompleted || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get baseInterval() {\r\n return Player.defaultStart.auto.dimBoost.interval;\r\n }\r\n\r\n get limitDimBoosts() {\r\n return this.data.limitDimBoosts;\r\n }\r\n\r\n set limitDimBoosts(value) {\r\n this.data.limitDimBoosts = value;\r\n }\r\n\r\n get maxDimBoosts() {\r\n return this.data.maxDimBoosts;\r\n }\r\n\r\n set maxDimBoosts(value) {\r\n this.data.maxDimBoosts = value;\r\n }\r\n\r\n get limitUntilGalaxies() {\r\n return this.data.limitUntilGalaxies;\r\n }\r\n\r\n set limitUntilGalaxies(value) {\r\n this.data.limitUntilGalaxies = value;\r\n }\r\n\r\n get galaxies() {\r\n return this.data.galaxies;\r\n }\r\n\r\n set galaxies(value) {\r\n this.data.galaxies = value;\r\n }\r\n\r\n get bulk() {\r\n return this.data.bulk;\r\n }\r\n\r\n set bulk(value) {\r\n this.data.bulk = value;\r\n }\r\n\r\n get buyMaxInterval() {\r\n return this.data.buyMaxInterval;\r\n }\r\n\r\n set buyMaxInterval(value) {\r\n this.data.buyMaxInterval = value;\r\n }\r\n\r\n get isBuyMaxUnlocked() {\r\n return BreakInfinityUpgrade.autobuyMaxDimboosts.isBought;\r\n }\r\n\r\n get interval() {\r\n return this.isBuyMaxUnlocked\r\n ? TimeSpan.fromSeconds(this.buyMaxInterval).totalMilliseconds.toNumber()\r\n : super.interval;\r\n }\r\n\r\n get canTick() {\r\n return DimBoost.canBeBought && DimBoost.requirement.isSatisfied && super.canTick;\r\n }\r\n\r\n get resetTickOn() {\r\n // Before max dimboost, we want to do dimboosts as quickly as possible,\r\n // so we reset the autobuyer's timer to 0 after every galaxy.\r\n // After max dimboost, we'll generally have \"Blink of an eye\",\r\n // so doing a dimboost right after a galaxy will do a single dimboost\r\n // and then wait for the autobuyer interval to do any more dimboosts,\r\n // which seems unideal and in fact does slow getting dimboosts/galaxies\r\n // at the start of infinities down by about 20%.\r\n // After \"Yo dawg, I heard you liked reskins...\", it doesn't matter much\r\n // which we do (less than 1 tick difference, it seems).\r\n return this.isBuyMaxUnlocked ? PRESTIGE_EVENT.INFINITY : PRESTIGE_EVENT.ANTIMATTER_GALAXY;\r\n }\r\n\r\n tick() {\r\n if (this.isBuyMaxUnlocked) {\r\n const galaxyCondition = !this.limitUntilGalaxies || player.galaxies >= this.galaxies;\r\n if (!DimBoost.canUnlockNewDimension && !galaxyCondition) return;\r\n requestDimensionBoost(true);\r\n super.tick();\r\n return;\r\n }\r\n\r\n const limitCondition = !this.limitDimBoosts || DimBoost.purchasedBoosts < this.maxDimBoosts;\r\n const galaxyCondition = this.limitUntilGalaxies && player.galaxies >= this.galaxies;\r\n if (limitCondition || galaxyCondition) {\r\n requestDimensionBoost(false);\r\n super.tick();\r\n }\r\n }\r\n}\r\n","import { AutobuyerState } from \"./autobuyer\";\r\nimport { PlayerProgress } from \"../player-progress\";\r\n\r\nexport class EternityAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.eternity;\r\n }\r\n\r\n get name() {\r\n return `Eternity`;\r\n }\r\n\r\n get isUnlocked() {\r\n return EternityMilestone.autobuyerEternity.isReached || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get mode() {\r\n return this.data.mode;\r\n }\r\n\r\n set mode(value) {\r\n this.data.mode = value;\r\n }\r\n\r\n get amount() {\r\n return this.data.amount;\r\n }\r\n\r\n get increaseWithMult() {\r\n return this.data.increaseWithMult;\r\n }\r\n\r\n set increaseWithMult(value) {\r\n this.data.increaseWithMult = value;\r\n }\r\n\r\n set amount(value) {\r\n this.data.amount = value;\r\n }\r\n\r\n get time() {\r\n return this.data.time;\r\n }\r\n\r\n set time(value) {\r\n this.data.time = value;\r\n }\r\n\r\n get xHighest() {\r\n return this.data.xHighest;\r\n }\r\n\r\n set xHighest(value) {\r\n this.data.xHighest = value;\r\n }\r\n\r\n get hasAdditionalModes() {\r\n return RealityUpgrade(13).isBought;\r\n }\r\n\r\n autoEternitiesAvailable(considerMilestoneReached) {\r\n return (considerMilestoneReached || EternityMilestone.autoEternities.isReached) &&\r\n !Player.isInAnyChallenge && !player.dilation.active &&\r\n player.auto.autobuyersOn && this.data.isActive &&\r\n this.mode === AUTO_ETERNITY_MODE.AMOUNT &&\r\n this.amount.equals(0);\r\n }\r\n\r\n bumpAmount(mult) {\r\n if (this.isUnlocked && this.increaseWithMult) {\r\n this.amount = this.amount.times(mult);\r\n }\r\n }\r\n\r\n get highestPrevPrestige() {\r\n return player.records.thisReality.maxEP;\r\n }\r\n\r\n get timeToNextTick() {\r\n return Math.clampMin(this.time - Time.thisEternityRealTime.totalSeconds.toNumber(), 0);\r\n }\r\n\r\n get willEternity() {\r\n if (EternityChallenge.isRunning) {\r\n // We Eternity asap if we're in an Eternity Challenge and can't reach more completions.\r\n // Code elsewhere ensures this hasMoreCompletions evaluates to false when ready to complete the EC at all\r\n // without the ECB perk or when capped at max completions with it (and true otherwise)\r\n return !EternityChallenge.current?.gainedCompletionStatus.hasMoreCompletions;\r\n }\r\n\r\n switch (this.mode) {\r\n case AUTO_ETERNITY_MODE.AMOUNT:\r\n return gainedEternityPoints().gte(this.amount);\r\n case AUTO_ETERNITY_MODE.TIME:\r\n return Time.thisEternityRealTime.totalSeconds.gt(this.time);\r\n case AUTO_ETERNITY_MODE.X_HIGHEST:\r\n default:\r\n return gainedEternityPoints().gte(this.highestPrevPrestige.times(this.xHighest));\r\n }\r\n }\r\n\r\n tick() {\r\n if (this.willEternity) eternity(false, true);\r\n }\r\n\r\n reset() {\r\n if (!EternityMilestone.autobuyerEternity.isReached) {\r\n this.isActive = false;\r\n }\r\n }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { UpgradeableAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class GalaxyAutobuyerState extends UpgradeableAutobuyerState {\r\n get data() {\r\n return player.auto.galaxy;\r\n }\r\n\r\n get name() {\r\n return `Antimatter Galaxy`;\r\n }\r\n\r\n get isUnlocked() {\r\n if(PlayerProgress.mendingUnlocked()) return true;\r\n if (Pelle.isDisabled(\"galaxyAutobuyer\")) return false;\r\n return this.canBeUpgraded;\r\n }\r\n\r\n get canBeUpgraded() {\r\n return NormalChallenge(11).isCompleted || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get baseInterval() {\r\n return Player.defaultStart.auto.galaxy.interval;\r\n }\r\n\r\n get limitGalaxies() {\r\n return this.data.limitGalaxies;\r\n }\r\n\r\n set limitGalaxies(value) {\r\n this.data.limitGalaxies = value;\r\n }\r\n\r\n get maxGalaxies() {\r\n return this.data.maxGalaxies;\r\n }\r\n\r\n set maxGalaxies(value) {\r\n this.data.maxGalaxies = value;\r\n }\r\n\r\n get buyMaxInterval() {\r\n return this.data.buyMaxInterval;\r\n }\r\n\r\n set buyMaxInterval(value) {\r\n this.data.buyMaxInterval = value;\r\n }\r\n\r\n get isBuyMaxUnlocked() {\r\n return EternityMilestone.autobuyMaxGalaxies.isReached;\r\n }\r\n\r\n get interval() {\r\n return this.isBuyMaxUnlocked\r\n ? TimeSpan.fromSeconds(this.buyMaxInterval).totalMilliseconds.toNumber()\r\n : super.interval;\r\n }\r\n\r\n get canTick() {\r\n return Galaxy.canBeBought && Galaxy.requirement.isSatisfied && super.canTick;\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.INFINITY;\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n const limit = this.limitGalaxies ? this.maxGalaxies : Number.MAX_VALUE;\r\n requestGalaxyReset(this.isBuyMaxUnlocked, limit);\r\n }\r\n}\r\n","import { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class ImaginaryUpgradeAutobuyerState extends AutobuyerState {\r\n get name() {\r\n return ImaginaryUpgrade(this.id).config.name;\r\n }\r\n\r\n get data() {\r\n return player.auto.imaginaryUpgrades.all[this.id - 1];\r\n }\r\n\r\n get isUnlocked() {\r\n return ImaginaryUpgrade(20).canBeApplied;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n const upg = ImaginaryUpgrade(this.id);\r\n while (Currency.imaginaryMachines.gte(upg.cost)&&!(this.id<=10&&player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]])) upg.purchase();\r\n }\r\n\r\n static get entryCount() { return 10; }\r\n static get autobuyerGroupName() { return \"Imaginary Upgrade\"; }\r\n static get isActive() { return player.auto.imaginaryUpgrades.isActive; }\r\n static set isActive(value) { player.auto.imaginaryUpgrades.isActive = value; }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { IntervaledAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class InfinityDimensionAutobuyerState extends IntervaledAutobuyerState {\r\n get tier() {\r\n return this.id;\r\n }\r\n\r\n get dimension() {\r\n return InfinityDimension(this.tier);\r\n }\r\n\r\n get name() {\r\n return this.dimension.shortDisplayName;\r\n }\r\n\r\n get fullName() {\r\n return `${this.name} Infinity Dimension`;\r\n }\r\n\r\n get data() {\r\n return player.auto.infinityDims.all[this.tier - 1];\r\n }\r\n\r\n get interval() {\r\n return 1000 * Perk.autobuyerFasterID.effectOrDefault(1) / PerkShopUpgrade.autoSpeed.effectOrDefault(1);\r\n }\r\n\r\n get isUnlocked() {\r\n return EternityMilestone[`autobuyerID${this.tier}`].isReached || PelleUpgrade.IDAutobuyers.canBeApplied || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.ETERNITY;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n get canTick() {\r\n return InfinityDimensions.canAutobuy() && this.dimension.isAvailableForPurchase && super.canTick;\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n this.dimension.buyMax(true);\r\n }\r\n\r\n static get entryCount() { return 8; }\r\n static get autobuyerGroupName() { return \"Infinity Dimension\"; }\r\n static get isActive() { return player.auto.infinityDims.isActive; }\r\n static set isActive(value) { player.auto.infinityDims.isActive = value; }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class IPMultAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.ipMultBuyer;\r\n }\r\n\r\n get name() {\r\n return `Infinity Point Multiplier`;\r\n }\r\n\r\n get isUnlocked() {\r\n return (EternityMilestone.autobuyerIPMult.isReached && !Pelle.isDoomed) || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n InfinityUpgrade.ipMult.buyMax();\r\n }\r\n}\r\n\r\nexport class EPMultAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.epMultBuyer;\r\n }\r\n\r\n get name() {\r\n return `Eternity Point Multiplier`;\r\n }\r\n\r\n get isUnlocked() {\r\n return (RealityUpgrade(13).isBought && !Pelle.isDoomed) || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n // While the active check is normally automatically handled with the global autobuyer ticking method, we also\r\n // call this from the TD autobuyers in order to make sure this is executed before TDs are purchased. Simply\r\n // reordering the autobuyer call order is undesirable because much of the codebase relies on autobuyers being\r\n // grouped as they are, and many other autobuyers in the 5xEP group must execute *after* dimensions\r\n if (!this.isActive) return;\r\n applyEU2();\r\n EternityUpgrade.epMult.buyMax(true);\r\n }\r\n}\r\n","import { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class RealityAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.reality;\r\n }\r\n\r\n get name() {\r\n return `Reality`;\r\n }\r\n\r\n get isUnlocked() {\r\n return RealityUpgrade(25).isBought;\r\n }\r\n\r\n get canTick() {\r\n return super.canTick && !GlyphSelection.active;\r\n }\r\n\r\n get mode() {\r\n return this.data.mode;\r\n }\r\n\r\n set mode(value) {\r\n this.data.mode = value;\r\n }\r\n\r\n get rm() {\r\n return this.data.rm;\r\n }\r\n\r\n set rm(value) {\r\n this.data.rm = value;\r\n }\r\n\r\n get glyph() {\r\n return this.data.glyph;\r\n }\r\n\r\n set glyph(value) {\r\n this.data.glyph = value;\r\n }\r\n\r\n get time() {\r\n return this.data.time;\r\n }\r\n\r\n set time(value) {\r\n this.data.time = value;\r\n }\r\n\r\n get shard() {\r\n return this.data.shard;\r\n }\r\n\r\n // This only gets set via functions in AutobuyerInput.vue; we want to take advantage of auto-formatting when the input\r\n // is for a Decimal prop, but the actual value needs to be clamped to fit within a Number\r\n set shard(value) {\r\n this.data.shard = value.clamp(0, Number.MAX_VALUE).toNumber();\r\n }\r\n\r\n toggleMode() {\r\n this.mode = [\r\n AUTO_REALITY_MODE.RM,\r\n AUTO_REALITY_MODE.GLYPH,\r\n AUTO_REALITY_MODE.EITHER,\r\n AUTO_REALITY_MODE.BOTH,\r\n AUTO_REALITY_MODE.TIME,\r\n AUTO_REALITY_MODE.RELIC_SHARD\r\n ]\r\n .nextSibling(this.mode);\r\n }\r\n\r\n bumpAmount(mult) {\r\n if (this.isUnlocked) {\r\n this.rm = this.rm.times(mult);\r\n }\r\n }\r\n\r\n tick() {\r\n // Checking if auto-reality should trigger immediately due to bad glyph options happens at a higher priority\r\n // than everything else, preempting other settings and only checking them if it fails\r\n // In order to reduce excessive computational load, this only ever gets checked once per reality unless filter\r\n // settings are changed (which causes it to check again); otherwise, glyph choices would be generated every tick\r\n const shouldCheckFilter = EffarigUnlock.glyphFilter.isUnlocked && !player.reality.hasCheckedFilter;\r\n if (isRealityAvailable() && player.options.autoRealityForFilter && shouldCheckFilter) {\r\n const choices = GlyphSelection.glyphList(GlyphSelection.choiceCount, gainedGlyphLevel(),\r\n { isChoosingGlyph: false });\r\n const bestGlyph = AutoGlyphProcessor.pick(choices);\r\n player.reality.hasCheckedFilter = true;\r\n if (!AutoGlyphProcessor.wouldKeep(bestGlyph)) {\r\n autoReality();\r\n return;\r\n }\r\n }\r\n\r\n let proc = false;\r\n // The game generally displays amplified values, so we want to adjust the thresholds to\r\n // account for that and make the automation trigger based on the actual displayed values\r\n const ampFactor = simulatedRealityCount(false) + 1;\r\n const rmProc = MachineHandler.gainedRealityMachines.times(ampFactor).gte(this.rm);\r\n const glyphProc = gainedGlyphLevel().actualLevel >= Math.min(this.glyph, Glyphs.levelCap);\r\n switch (this.mode) {\r\n case AUTO_REALITY_MODE.RM:\r\n proc = rmProc;\r\n break;\r\n case AUTO_REALITY_MODE.GLYPH:\r\n proc = glyphProc;\r\n break;\r\n case AUTO_REALITY_MODE.EITHER:\r\n proc = rmProc || glyphProc;\r\n break;\r\n case AUTO_REALITY_MODE.BOTH:\r\n proc = rmProc && glyphProc;\r\n break;\r\n case AUTO_REALITY_MODE.TIME:\r\n proc = new Decimal(player.records.thisReality.realTime).toNumber() / 1000 > this.time;\r\n break;\r\n case AUTO_REALITY_MODE.RELIC_SHARD:\r\n proc = Effarig.shardsGained.times(ampFactor).gt(this.shard);\r\n break;\r\n }\r\n if (proc) autoReality();\r\n }\r\n}\r\n","import { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class RealityUpgradeAutobuyerState extends AutobuyerState {\r\n get name() {\r\n return RealityUpgrade(this.id).config.name;\r\n }\r\n\r\n get data() {\r\n return player.auto.realityUpgrades.all[this.id - 1];\r\n }\r\n\r\n get isUnlocked() {\r\n if (MendingMilestone.three.isReached){\r\n return true;\r\n }\r\n return Ra.unlocks.instantECAndRealityUpgradeAutobuyers.canBeApplied;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n const upg = RealityUpgrade(this.id);\r\n while (Currency.realityMachines.gte(upg.cost)&&!(this.id<=5&&player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]])) upg.purchase();\r\n }\r\n\r\n static get entryCount() { return 5; }\r\n static get autobuyerGroupName() { return \"Reality Upgrade\"; }\r\n static get isActive() { return player.auto.realityUpgrades.isActive; }\r\n static set isActive(value) { player.auto.realityUpgrades.isActive = value; }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class ReplicantiGalaxyAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.replicantiGalaxies;\r\n }\r\n\r\n get name() {\r\n return `Replicanti Galaxy`;\r\n }\r\n\r\n get isUnlocked() {\r\n return EternityMilestone.autobuyerReplicantiGalaxy.isReached || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get isEnabled() {\r\n return Achievement(138).isUnlocked || !TimeStudy(131).isBought;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return Achievement(126).isUnlocked;\r\n }\r\n\r\n tick() {\r\n if (!this.isEnabled) return;\r\n replicantiGalaxy(true);\r\n }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { IntervaledAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class ReplicantiUpgradeAutobuyerState extends IntervaledAutobuyerState {\r\n get _upgradeName() { return [\"chance\", \"interval\", \"galaxies\"][this.id - 1]; }\r\n\r\n get name() {\r\n return `Replicanti ${[`Chance`, `Interval`, `Max Galaxies`][this.id - 1]}`;\r\n }\r\n\r\n get data() {\r\n return player.auto.replicantiUpgrades.all[this.id - 1];\r\n }\r\n\r\n get interval() {\r\n return 1000 * Perk.autobuyerFasterReplicanti.effectOrDefault(1) / PerkShopUpgrade.autoSpeed.effectOrDefault(1);\r\n }\r\n\r\n get isUnlocked() {\r\n return ReplicantiUpgrade[this._upgradeName].autobuyerMilestone.isReached ||\r\n PelleUpgrade.replicantiAutobuyers.canBeApplied || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.ETERNITY;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n if (EternityChallenge(8).isRunning) return;\r\n super.tick();\r\n ReplicantiUpgrade[this._upgradeName].autobuyerTick();\r\n }\r\n\r\n static get entryCount() { return 3; }\r\n static get autobuyerGroupName() { return \"Replicanti Upgrade\"; }\r\n static get isActive() { return player.auto.replicantiUpgrades.isActive; }\r\n static set isActive(value) { player.auto.replicantiUpgrades.isActive = value; }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class SacrificeAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.sacrifice;\r\n }\r\n\r\n get name() {\r\n return `Dimensional Sacrifice`;\r\n }\r\n\r\n get isUnlocked() {\r\n return EternityMilestone.autoIC.isReached || InfinityChallenge(2).isCompleted || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get multiplier() {\r\n return this.data.multiplier;\r\n }\r\n\r\n set multiplier(value) {\r\n this.data.multiplier = value;\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n get hasInput() {\r\n return true;\r\n }\r\n\r\n get inputType() {\r\n return \"decimal\";\r\n }\r\n\r\n get inputEntry() {\r\n return \"multiplier\";\r\n }\r\n\r\n get description() {\r\n return \"Multiplier\";\r\n }\r\n\r\n tick() {\r\n if (Sacrifice.nextBoost.lt(Decimal.max(this.multiplier, 1.01))) return;\r\n sacrificeReset();\r\n }\r\n}\r\n","import { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class SingularityAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.singularity;\r\n }\r\n\r\n get name() {\r\n return `Singularity`;\r\n }\r\n\r\n get isUnlocked() {\r\n return SingularityMilestone.autoCondense.canBeApplied || player.celestials.ra.permanentMemories.lai65;\r\n }\r\n\r\n get bulk() {\r\n return Singularity.singularitiesGained;\r\n }\r\n\r\n tick() {\r\n if (Currency.darkEnergy.value >= Singularity.cap * SingularityMilestone.autoCondense.effectValue) {\r\n Singularity.perform();\r\n }\r\n }\r\n}\r\n","import { DC } from \"../constants\";\r\nimport { PlayerProgress } from \"../player-progress\";\r\n\r\nimport { UpgradeableAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class TickspeedAutobuyerState extends UpgradeableAutobuyerState {\r\n get data() {\r\n return player.auto.tickspeed;\r\n }\r\n\r\n get name() {\r\n return `Tickspeed`;\r\n }\r\n\r\n get isUnlocked() {\r\n if (PlayerProgress.mendingUnlocked()) return true;\r\n else if (Pelle.isDisabled(\"tickspeedAutobuyer\")) return false;\r\n return this.canBeUpgraded;\r\n }\r\n\r\n get canBeUpgraded() {\r\n return NormalChallenge(9).isCompleted || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get baseInterval() {\r\n return Player.defaultStart.auto.tickspeed.interval;\r\n }\r\n\r\n get isBought() {\r\n return this.data.isBought;\r\n }\r\n\r\n get antimatterCost() {\r\n return DC.E140;\r\n }\r\n\r\n get canBeBought() {\r\n return !Pelle.isDoomed || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get disabledByContinuum() {\r\n return Laitela.continuumActive;\r\n }\r\n\r\n get mode() {\r\n return this.data.mode;\r\n }\r\n\r\n set mode(value) {\r\n this.data.mode = value;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return this.mode === AUTOBUYER_MODE.BUY_MAX;\r\n }\r\n\r\n get canUnlockSlowVersion() {\r\n return player.records.thisEternity.maxAM.gte(this.antimatterCost);\r\n }\r\n\r\n toggleMode() {\r\n this.mode = [\r\n AUTOBUYER_MODE.BUY_SINGLE,\r\n AUTOBUYER_MODE.BUY_MAX\r\n ]\r\n .nextSibling(this.mode);\r\n }\r\n\r\n get canTick() {\r\n return Tickspeed.isAvailableForPurchase && Tickspeed.isAffordable && super.canTick;\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n switch (this.mode) {\r\n case AUTOBUYER_MODE.BUY_SINGLE:\r\n buyTickSpeed();\r\n break;\r\n case AUTOBUYER_MODE.BUY_MAX:\r\n buyMaxTickSpeed();\r\n break;\r\n }\r\n }\r\n\r\n purchase() {\r\n if (!this.canUnlockSlowVersion) return;\r\n this.data.isBought = true;\r\n }\r\n\r\n get resetTickOn() {\r\n return Perk.antimatterNoReset.canBeApplied ? PRESTIGE_EVENT.ANTIMATTER_GALAXY : PRESTIGE_EVENT.DIMENSION_BOOST;\r\n }\r\n\r\n reset() {\r\n super.reset();\r\n if (EternityMilestone.keepAutobuyers.isReached || PelleUpgrade.keepAutobuyers.canBeApplied) return;\r\n this.data.mode = AUTOBUYER_MODE.BUY_SINGLE;\r\n this.data.isUnlocked = false;\r\n this.data.isBought = false;\r\n TabNotification.newAutobuyer.clearTrigger();\r\n }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { IntervaledAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class TimeDimensionAutobuyerState extends IntervaledAutobuyerState {\r\n get tier() {\r\n return this.id;\r\n }\r\n\r\n get name() {\r\n return TimeDimension(this.tier).shortDisplayName;\r\n }\r\n\r\n get fullName() {\r\n return `${this.name} Time Dimension`;\r\n }\r\n\r\n get data() {\r\n return player.auto.timeDims.all[this.tier - 1];\r\n }\r\n\r\n get interval() {\r\n return 1000 / PerkShopUpgrade.autoSpeed.effectOrDefault(1);\r\n }\r\n\r\n get isUnlocked() {\r\n return (RealityUpgrade(13).isBought && (!Pelle.isDoomed || PelleUpgrade.TDAutobuyers.canBeApplied)) || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.REALITY;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n // We specifically call these two things before actually running the TD autobuyer code because that behavior\r\n // is desirable to gameplay, but simply reordering the autobuyers overall has undesired side-effects. There\r\n // are checks internal to these calls which ensure that they don't trigger even when still locked\r\n applyEU2();\r\n Autobuyer.epMult.tick();\r\n\r\n const tier = this.tier;\r\n if (!TimeDimension(tier).isAvailableForPurchase) return;\r\n super.tick();\r\n if (Currency.eternityPoints.exponent >= 10) {\r\n buyMaxTimeDimension(tier, 1, true);\r\n } else {\r\n buySingleTimeDimension(tier, true);\r\n }\r\n }\r\n\r\n static get entryCount() { return 8; }\r\n static get autobuyerGroupName() { return \"Time Dimension\"; }\r\n static get isActive() { return player.auto.timeDims.isActive; }\r\n static set isActive(value) { player.auto.timeDims.isActive = value; }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class TimeTheoremAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.timeTheorems;\r\n }\r\n\r\n get name() {\r\n return `Time Theorem`;\r\n }\r\n\r\n get isUnlocked() {\r\n return (Perk.ttBuySingle.isBought && !Pelle.isDisabled(\"timeTheoremAutobuyer\")) || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return Perk.ttBuyMax.canBeApplied;\r\n }\r\n\r\n tick() {\r\n if (this.hasUnlimitedBulk) TimeTheorems.buyMax(true);\r\n else TimeTheorems.buyOneOfEach();\r\n }\r\n}\r\n","import { BitUpgradeState } from \"../game-mechanics\";\r\nimport wordShift from \"../word-shift\";\r\n\r\nexport const Quote = {\r\n addToQueue(quote) {\r\n ui.view.quotes.queue.push(quote);\r\n if (!ui.view.quotes.current) this.advanceQueue();\r\n },\r\n advanceQueue() {\r\n ui.view.quotes.current = ui.view.quotes.queue.shift();\r\n },\r\n showHistory(history) {\r\n ui.view.quotes.history = history;\r\n },\r\n clearQueue() {\r\n ui.view.quotes.queue = [];\r\n ui.view.quotes.current = undefined;\r\n },\r\n clearHistory() {\r\n ui.view.quotes.history = undefined;\r\n },\r\n clearAll() {\r\n this.clearQueue();\r\n this.clearHistory();\r\n },\r\n get isOpen() {\r\n return ui.view.quotes.current !== undefined;\r\n },\r\n get isHistoryOpen() {\r\n return ui.view.quotes.history !== undefined;\r\n }\r\n};\r\n\r\n// Gives an array specifying proportions of celestials to blend together on the modal, as a function of time, to\r\n// provide a smoother transition between different celestials to reduce potential photosensitivity issues\r\nfunction blendCel(cels) {\r\n const totalTime = cels.map(cel => cel[1]).sum();\r\n const tick = (Date.now() / 1000) % totalTime;\r\n\r\n // Blend the first blendTime seconds with the previous celestial and the last blendTime seconds with the next;\r\n // note that this results in a total transition time of 2*blendTime. We specifically set this to be half the duration\r\n // of the first entry - this is because in the case of all intervals having the same duration, this guarantees two\r\n // blended entries at all points in time.\r\n const blendTime = cels[0][1] / 2;\r\n let start = 0;\r\n for (let index = 0; index < cels.length; index++) {\r\n const prevCel = cels[(index + cels.length - 1) % cels.length], currCel = cels[index],\r\n nextCel = cels[(index + 1) % cels.length];\r\n\r\n // Durations of time from after last transition and after next transition. May be negative, which is how we\r\n // check to see if we're in the correct time interval (last should be positive, next should be negative)\r\n const lastTime = tick - start, nextTime = lastTime - currCel[1];\r\n if (nextTime > 0) {\r\n start += currCel[1];\r\n continue;\r\n }\r\n\r\n if (lastTime <= blendTime) {\r\n const t = 0.5 * lastTime / blendTime;\r\n return [[prevCel[0], 0.5 - t], [currCel[0], 0.5 + t]];\r\n }\r\n if (-nextTime <= blendTime) {\r\n const t = 0.5 * nextTime / blendTime;\r\n return [[currCel[0], 0.5 - t], [nextCel[0], 0.5 + t]];\r\n }\r\n\r\n // In principle the animation properties should never get to this return case, but we leave it here just in case -\r\n // the worst side-effect of reaching here is that some UI elements may appear to lose click detection for a\r\n // fraction of a second when transitioning from two blended entries to one\r\n return [[currCel[0], 1]];\r\n }\r\n throw new Error(\"Could not blend celestial fractions in Quote modal\");\r\n}\r\n\r\nclass QuoteLine {\r\n constructor(line, parent) {\r\n this._parent = parent;\r\n this._showCelestialName = line.showCelestialName ?? true;\r\n\r\n this._celestialArray = line.background\r\n ? () => blendCel(line.background)\r\n : [[parent.celestial, 1]];\r\n\r\n const replacementMatch = /\\$(\\d+)/gu;\r\n\r\n this._line = typeof line === \"string\"\r\n ? line\r\n // This matches each digit after a $ and replaces it with the wordCycle of an array with the digit it matched.\r\n : () => line.text.replaceAll(replacementMatch, (_, i) => wordShift.wordCycle(line[i]));\r\n }\r\n\r\n get line() {\r\n return typeof this._line === \"function\" ? this._line() : this._line;\r\n }\r\n\r\n get celestials() {\r\n return typeof this._celestialArray === \"function\" ? this._celestialArray() : this._celestialArray;\r\n }\r\n\r\n get celestialSymbols() {\r\n return this.celestials.map(c => Celestials[c[0]].symbol);\r\n }\r\n\r\n get showCelestialName() {\r\n return this._showCelestialName;\r\n }\r\n\r\n get celestialName() {\r\n return Celestials[this._parent.celestial].displayName;\r\n }\r\n}\r\n\r\nclass CelQuotes extends BitUpgradeState {\r\n constructor(config, celestial) {\r\n super(config);\r\n this._celestial = celestial;\r\n this._lines = config.lines.map(line => new QuoteLine(line, this));\r\n }\r\n\r\n get bits() { return player.celestials[this._celestial].quoteBits; }\r\n set bits(value) { player.celestials[this._celestial].quoteBits = value; }\r\n\r\n get requirement() {\r\n // If requirement is defined, it is always a function returning a boolean.\r\n return this.config.requirement?.();\r\n }\r\n\r\n get celestial() {\r\n return this._celestial;\r\n }\r\n\r\n line(id) {\r\n return this._lines[id];\r\n }\r\n\r\n get totalLines() {\r\n return this._lines.length;\r\n }\r\n\r\n show() { this.unlock(); }\r\n onUnlock() { this.present(); }\r\n\r\n present() {\r\n Quote.addToQueue(this);\r\n }\r\n}\r\n\r\n\r\nexport const Quotes = {\r\n teresa: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.teresa,\r\n config => new CelQuotes(config, \"teresa\")\r\n ),\r\n effarig: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.effarig,\r\n config => new CelQuotes(config, \"effarig\")\r\n ),\r\n enslaved: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.enslaved,\r\n config => new CelQuotes(config, \"enslaved\")\r\n ),\r\n v: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.v,\r\n config => new CelQuotes(config, \"v\")\r\n ),\r\n ra: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.ra,\r\n config => new CelQuotes(config, \"ra\")\r\n ),\r\n laitela: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.laitela,\r\n config => new CelQuotes(config, \"laitela\")\r\n ),\r\n pelle: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.pelle,\r\n config => new CelQuotes(config, \"pelle\")\r\n ),\r\n destroyer: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.destroyer,\r\n config => new CelQuotes(config, \"destroyer\")\r\n ),\r\n kohler: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.kohler,\r\n config => new CelQuotes(config, \"kohler\")\r\n ),\r\n};\r\n","import { CorruptionUpgrade } from \"../corruption-upgrades\";\r\nimport { BitUpgradeState } from \"../game-mechanics\";\r\nimport { GameDatabase } from \"../secret-formula/game-database\";\r\n\r\nimport { Quotes } from \"./quotes\";\r\n\r\nexport const ENSLAVED_UNLOCKS = {\r\n FREE_TICKSPEED_SOFTCAP: {\r\n id: 0,\r\n price: TimeSpan.fromYears(1e35).totalMilliseconds,\r\n secondaryRequirement: () => true,\r\n description: () => `Increase the softcap to Tickspeed upgrades from Time Dimensions by ${formatInt(1e5)}`,\r\n },\r\n RUN: {\r\n id: 1,\r\n price: TimeSpan.fromYears(1e40).totalMilliseconds,\r\n secondaryRequirement() {\r\n const hasLevelRequirement = player.records.bestReality.glyphLevel >= 5000;\r\n const hasRarityRequirement = strengthToRarity(player.records.bestReality.glyphStrength) >= 100;\r\n return hasLevelRequirement && hasRarityRequirement;\r\n },\r\n description() {\r\n const hasLevelRequirement = player.records.bestReality.glyphLevel >= 5000;\r\n const hasRarityRequirement = strengthToRarity(player.records.bestReality.glyphStrength) >= 100;\r\n return `Unlock The Nameless Ones' Reality (requires ${hasLevelRequirement ? \"[✓]\" : \"[✗]\"} a level\r\n ${formatInt(5000)} Glyph and ${hasRarityRequirement ? \"[✓]\" : \"[✗]\"} a ${formatRarity(100)} rarity Glyph)`;\r\n }\r\n }\r\n};\r\n\r\nexport const Enslaved = {\r\n displayName: \"The Nameless Ones\",\r\n possessiveName: \"The Nameless Ones'\",\r\n boostReality: false,\r\n BROKEN_CHALLENGES: [2, 3, 4, 5, 7, 8, 10, 11, 12],\r\n nextTickDiff: 50,\r\n isReleaseTick: false,\r\n autoReleaseTick: 0,\r\n autoReleaseSpeed: new Decimal(0),\r\n timeCap: () => (player.celestials.ra.pets.enslaved.level >= 30 ? Decimal.pow10(1e300) : new Decimal(1e300)),\r\n glyphLevelMin: 5000,\r\n currentBlackHoleStoreAmountPerMs: new Decimal(0),\r\n tachyonNerf: 0.3,\r\n toggleStoreBlackHole() {\r\n if (!this.canModifyGameTimeStorage) return;\r\n player.celestials.enslaved.isStoring = !player.celestials.enslaved.isStoring;\r\n player.celestials.enslaved.isStoringReal = false;\r\n },\r\n toggleStoreReal() {\r\n if (!this.canModifyRealTimeStorage && !this.isStoredRealTimeCapped) return;\r\n player.celestials.enslaved.isStoringReal = !player.celestials.enslaved.isStoringReal;\r\n player.celestials.enslaved.isStoring = false;\r\n },\r\n toggleAutoStoreReal() {\r\n if (!this.canModifyRealTimeStorage) return;\r\n player.celestials.enslaved.autoStoreReal = !player.celestials.enslaved.autoStoreReal;\r\n },\r\n get canModifyGameTimeStorage() {\r\n return Enslaved.isUnlocked && !Pelle.isDoomed && !BlackHoles.arePaused && !EternityChallenge(12).isRunning &&\r\n !Enslaved.isRunning && !Laitela.isRunning;\r\n },\r\n get canModifyRealTimeStorage() {\r\n return Enslaved.isUnlocked && !Pelle.isDoomed;\r\n },\r\n get isStoredRealTimeCapped() {\r\n return player.celestials.enslaved.storedReal < this.storedRealTimeCap;\r\n },\r\n // We assume that the situations where you can't modify time storage settings (of either type) are exactly the cases\r\n // where they have also been explicitly disabled via other game mechanics. This also reduces UI boilerplate code.\r\n // Note that we force time storage when auto-releasing, as not doing so caused a lot of poor usability issues\r\n get isStoringGameTime() {\r\n return this.canModifyGameTimeStorage && (this.isAutoReleasing || player.celestials.enslaved.isStoring);\r\n },\r\n get isStoringRealTime() {\r\n return this.canModifyRealTimeStorage && player.celestials.enslaved.isStoringReal;\r\n },\r\n get storedRealTimeEfficiency() {\r\n if (MendingUpgrade(7).isBought) return 5;\r\n return 0.7;\r\n },\r\n get storedRealTimeCap() {\r\n const addedCap = Ra.unlocks.improvedStoredTime.effects.realTimeCap.effectOrDefault(0);\r\n return 1000 * 3600 * 8 + addedCap;\r\n },\r\n get isAutoReleasing() {\r\n return player.celestials.enslaved.isAutoReleasing && !BlackHoles.areNegative && !Pelle.isDisabled(\"blackhole\");\r\n },\r\n storeRealTime() {\r\n if (Pelle.isDoomed) return;\r\n const thisUpdate = Date.now();\r\n const diff = Math.max(thisUpdate - player.lastUpdate, 0);\r\n const efficiency = this.storedRealTimeEfficiency;\r\n const maxTime = this.storedRealTimeCap;\r\n player.celestials.enslaved.storedReal += diff * efficiency;\r\n if (player.celestials.enslaved.storedReal > maxTime) {\r\n player.celestials.enslaved.isStoringReal = false;\r\n player.celestials.enslaved.storedReal = maxTime;\r\n }\r\n // More than 24 hours in milliseconds\r\n if (player.celestials.enslaved.storedReal > (24 * 60 * 60 * 1000)) SecretAchievement(46).unlock();\r\n player.lastUpdate = thisUpdate;\r\n },\r\n autoStoreRealTime(diffMs) {\r\n const maxGain = this.storedRealTimeCap - player.celestials.enslaved.storedReal;\r\n const used = Math.min(diffMs, Math.max(0, maxGain / this.storedRealTimeEfficiency));\r\n player.celestials.enslaved.storedReal += used * this.storedRealTimeEfficiency;\r\n player.lastUpdate += used;\r\n return diffMs - used;\r\n },\r\n canRelease(auto) {\r\n return !Enslaved.isStoringRealTime && !EternityChallenge(12).isRunning && !Laitela.isRunning &&\r\n !(Enslaved.isRunning && auto) && !Pelle.isDoomed;\r\n },\r\n // \"autoRelease\" should only be true when called with the Ra upgrade\r\n useStoredTime(autoRelease) {\r\n if (!this.canRelease(autoRelease)) return;\r\n const maxInversion = player.requirementChecks.reality.slowestBH <= 1e-300;\r\n if (ImaginaryUpgrade(24).isLockingMechanics && Ra.isRunning && maxInversion) {\r\n if (!autoRelease) ImaginaryUpgrade(24).tryShowWarningModal(\"discharge your Black Hole\");\r\n return;\r\n }\r\n player.requirementChecks.reality.slowestBH = 1;\r\n let release = player.celestials.enslaved.stored;\r\n if (Enslaved.isRunning) {\r\n release = Enslaved.storedTimeInsideEnslaved(release);\r\n if (Time.thisReality.totalYears + TimeSpan.fromMilliseconds(release).totalYears > 1) {\r\n EnslavedProgress.storedTime.giveProgress();\r\n }\r\n }\r\n if (autoRelease) release = release.times(0.01);\r\n this.nextTickDiff = Decimal.clampMax(release, this.timeCap());\r\n this.isReleaseTick = true;\r\n // Effective gamespeed from stored time assumes a \"default\" 50 ms update rate for consistency\r\n const effectiveGamespeed = release.div(50);\r\n player.celestials.ra.peakGamespeed = Decimal.max(player.celestials.ra.peakGamespeed, effectiveGamespeed);\r\n this.autoReleaseSpeed = release.div(player.options.updateRate * 5);\r\n player.celestials.enslaved.stored = player.celestials.enslaved.stored.times(autoRelease ? 0.99 : 0);\r\n },\r\n has(info) {\r\n return player.celestials.enslaved.unlocks.includes(info.id);\r\n },\r\n canBuy(info) {\r\n return new Decimal(player.celestials.enslaved.stored).gte(info.price) && info.secondaryRequirement() && !this.has(info);\r\n },\r\n buyUnlock(info) {\r\n if (!this.canBuy(info)) return false;\r\n if (info.id === ENSLAVED_UNLOCKS.RUN.id) this.quotes.unlockRun.show();\r\n player.celestials.enslaved.stored = player.celestials.enslaved.stored.sub(info.price);\r\n player.celestials.enslaved.unlocks.push(info.id);\r\n return true;\r\n },\r\n initializeRun() {\r\n clearCelestialRuns();\r\n player.celestials.enslaved.run = true;\r\n player.celestials.enslaved.hasSecretStudy = false;\r\n this.feltEternity = false;\r\n\r\n // Re-validation needs to be done here because this code gets called after the automator attempts to start.\r\n // This is a special case for Nameless because it's one of the only two cases where a command becomes locked\r\n // again (the other being Pelle entry, which just force-stops the automator entirely).\r\n AutomatorData.recalculateErrors();\r\n if (AutomatorBackend.state.mode === AUTOMATOR_MODE.RUN && AutomatorData.currentErrors().length) {\r\n AutomatorBackend.stop();\r\n GameUI.notify.error(\"This Reality forbids Black Holes! (Automator stopped)\");\r\n }\r\n\r\n this.quotes.startRun.show();\r\n },\r\n get isRunning() {\r\n return player.celestials.enslaved.run;\r\n },\r\n completeRun() {\r\n player.celestials.enslaved.completed = true;\r\n if (EternityChallenge(1).completions > 5){\r\n EternityChallenge(1).completions = 5;\r\n }\r\n this.quotes.completeReality.show();\r\n },\r\n get isCompleted() {\r\n return player.celestials.enslaved.completed;\r\n },\r\n get canTickHintTimer() {\r\n return !EnslavedProgress.hintsUnlocked.hasProgress && Enslaved.has(ENSLAVED_UNLOCKS.RUN) && !Enslaved.isCompleted;\r\n },\r\n get isUnlocked() {\r\n return EffarigUnlock.eternity.isUnlocked;\r\n },\r\n get realityBoostRatio() {\r\n return Math.max(1, Math.floor(player.celestials.enslaved.storedReal /\r\n Decimal.max(1000, Time.thisRealityRealTime.totalMilliseconds).toNumber()));\r\n },\r\n get canAmplify() {\r\n return this.realityBoostRatio > 1 && !Pelle.isDoomed && !isInCelestialReality();\r\n },\r\n storedTimeInsideEnslaved(stored) {\r\n if (stored.lt(1e3)) return stored;\r\n return Decimal.pow(10, Decimal.pow(Decimal.log10(stored.div(1e3), 0.55))).times(1e3);\r\n },\r\n feelEternity() {\r\n if (this.feltEternity) {\r\n Modal.message.show(`You have already exposed this crack in the Reality. Time in this Eternity is being multiplied\r\n by your Eternity count, up to a maximum of ${formatX(1e66)}.`,\r\n { closeEvent: GAME_EVENT.REALITY_RESET_AFTER }, 1);\r\n } else {\r\n EnslavedProgress.feelEternity.giveProgress();\r\n this.feltEternity = true;\r\n Modal.message.show(`Time in this Eternity will be multiplied by your Eternity count,\r\n up to a maximum of ${formatX(1e66)}.`, { closeEvent: GAME_EVENT.REALITY_RESET_AFTER }, 1);\r\n }\r\n },\r\n get feltEternity() {\r\n return player.celestials.enslaved.feltEternity;\r\n },\r\n set feltEternity(value) {\r\n player.celestials.enslaved.feltEternity = value;\r\n },\r\n get nextHintCost() {\r\n return TimeSpan.fromYears(1e40 * Math.pow(3, this.hintCostIncreases)).totalMilliseconds;\r\n },\r\n get hintCostIncreases() {\r\n const hintTime = player.celestials.enslaved.zeroHintTime - Date.now();\r\n return Math.clampMin(hintTime / TimeSpan.fromDays(1).totalMilliseconds, 0);\r\n },\r\n spendTimeForHint() {\r\n if (player.celestials.enslaved.stored.lt(this.nextHintCost)) return false;\r\n player.celestials.enslaved.stored = player.celestials.enslaved.stored.sub(this.nextHintCost);\r\n if (Enslaved.hintCostIncreases === 0) {\r\n player.celestials.enslaved.zeroHintTime = Date.now() + TimeSpan.fromDays(1).totalMilliseconds.toNumber();\r\n } else {\r\n player.celestials.enslaved.zeroHintTime += TimeSpan.fromDays(1).totalMilliseconds.toNunber();\r\n }\r\n return true;\r\n },\r\n quotes: Quotes.enslaved,\r\n // Unicode f0c1.\r\n symbol: \"\\uf0c1\"\r\n};\r\n\r\nclass EnslavedProgressState extends BitUpgradeState {\r\n get bits() { return player.celestials.enslaved.hintBits; }\r\n set bits(value) { player.celestials.enslaved.hintBits = value; }\r\n\r\n get hasProgress() {\r\n return Boolean(player.celestials.enslaved.progressBits & (1 << this.id));\r\n }\r\n\r\n get hasHint() {\r\n return this.hasProgress || this.isUnlocked;\r\n }\r\n\r\n get hintInfo() {\r\n return this.config.hint;\r\n }\r\n\r\n get completedInfo() {\r\n return typeof this.config.condition === \"function\" ? this.config.condition() : this.config.condition;\r\n }\r\n\r\n giveProgress() {\r\n // Bump the last hint time appropriately if the player found the hint\r\n if (this.hasHint && !this.hasProgress) {\r\n player.celestials.enslaved.zeroHintTime -= Math.log(2) / Math.log(3) * TimeSpan.fromDays(1).totalMilliseconds;\r\n GameUI.notify.success(\"You found a crack in The Nameless Ones' Reality!\", 10000);\r\n }\r\n player.celestials.enslaved.progressBits |= (1 << this.id);\r\n }\r\n}\r\n\r\nexport const EnslavedProgress = mapGameDataToObject(\r\n GameDatabase.celestials.enslaved.progress,\r\n config => new EnslavedProgressState(config)\r\n);\r\n\r\nexport const Tesseracts = {\r\n get bought() {\r\n return player.celestials.enslaved.tesseracts;\r\n },\r\n\r\n get extra() {\r\n return this.bought * (SingularityMilestone.tesseractMultFromSingularities.effectOrDefault(1)*CorruptionUpgrade(8).effectOrDefault(1) - 1);\r\n },\r\n\r\n get effectiveCount() {\r\n return this.bought + this.extra;\r\n },\r\n\r\n buyTesseract() {\r\n if (!this.canBuyTesseract) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n player.celestials.enslaved.tesseracts++;\r\n },\r\n\r\n // This used to be a somewhat complicated function which spaced costs out super-exponentially, but the decision to\r\n // hardcap all resources (as feasible) to e9e15 meant that in practice only the first 10 or so could actually be\r\n // obtained. Changing the function to a hardcoded array is better for understanding the code since it's small.\r\n // Note that costs go a bit past e9e15 because while AM is capped at e9e15, most other resources (including IP)\r\n // aren't and can go a tiny bit past it.\r\n // The formula is a hardcoded 2, 4, 6 followed by successive multiplication by 2x, 4x, 6x, and so on.\r\n\r\n // Hello This needs to be scaled. Well ofc the original scale is not enough for scalling so after 15 I decide to do something bigger.---sxy\r\n //11771943321600 is the 15th\r\n //BASE_COSTS: [2, 4, 6, 12, 48, 288, 2304, 23040, 276480, 3870720, 61931520, 1114767360],\r\n //COST_SCALER: [0, 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18],\r\n\r\n //This is my former design of scaled Tesseract, but since the reason of inflation happened on 8th ID, I would temporarily disable this.---sxy\r\n //BASE_COSTS: [2, 4, 6, 12, 48, 288, 2304, 23040, 276480, 3870720, 61931520, 1114767360, 22295347200, 490497638400, 11771943321600],\r\n //COST_SCALER: [0, 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24],\r\n //costs(index) {\r\n // while (index >= this.BASE_COSTS.length) {\r\n // let TesseractScaler = this.COST_SCALER[this.COST_SCALER.length-1] + Decimal.pow(index-13,index-13).toNumber() * Math.pow(index-14,index-14);\r\n // let nextTesseractCost = this.BASE_COSTS[this.BASE_COSTS.length-1] * TesseractScaler;\r\n // this.BASE_COSTS.push(nextTesseractCost)\r\n // this.COST_SCALER.push(TesseractScaler)\r\n // }\r\n // return Decimal.pow10(1e7 * this.BASE_COSTS[Math.floor(index)]);\r\n //},\r\n\r\n BASE_COSTS: [2, 4, 6, 12, 48, 288, 2304, 23040, 276480, 3870720, 61931520, 1114767360],\r\n COST_SCALER: [0, 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18],\r\n costs(index) {\r\n while (index >= this.BASE_COSTS.length) {\r\n let TesseractScaler = this.COST_SCALER[this.COST_SCALER.length-1] + 2;\r\n let nextTesseractCost = this.BASE_COSTS[this.BASE_COSTS.length-1] * TesseractScaler;\r\n this.BASE_COSTS.push(nextTesseractCost)\r\n this.COST_SCALER.push(TesseractScaler)\r\n }\r\n return Decimal.pow10(1e7 * this.BASE_COSTS[Math.floor(index)]);\r\n },\r\n\r\n get nextCost() {\r\n return this.costs(this.bought);\r\n },\r\n\r\n get TesseractHardcap(){\r\n return 50\r\n },\r\n\r\n get canBuyTesseract() {\r\n return Enslaved.isCompleted && Currency.infinityPoints.gte(Tesseracts.nextCost) && this.bought {\r\n if (Tab.celestials.enslaved.isOpen) Enslaved.quotes.initial.show();\r\n});\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\nimport { MendingUpgrade } from \"../mending-upgrades\";\r\nimport { Tesseracts } from \"../celestials/enslaved\";\r\nexport class TesseractAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.tesseract;\r\n }\r\n\r\n get name() {\r\n return `Tesseract`;\r\n }\r\n\r\n get isUnlocked() {\r\n return MendingUpgrade(7).isBought;\r\n }\r\n\r\n get isEnabled() {\r\n return true\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n tick() {\r\n Tesseracts.buyTesseract()\r\n}\r\n\r\n}","import { AutobuyerState } from \"./autobuyer\";\r\nimport { GlyphSacrificeHandler, MendingMilestone } from \"../globals\";\r\n\r\nexport class MusicGlyphAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.musicglyph;\r\n }\r\n\r\n get name() {\r\n return `Auto Purchase and Purge Music Glyphs`;\r\n }\r\n\r\n get isUnlocked() {\r\n return MendingMilestone.seven.isReached;\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n tick() {\r\n if (Currency.perkPoints.gt(0)) {\r\n GlyphSacrificeHandler.removeGlyph(GlyphGenerator.musicGlyph(), true)\r\n Currency.perkPoints.subtract(1)\r\n }\r\n }\r\n}","import { AutobuyerState } from \"./autobuyer\";\r\nimport { GlyphSacrificeHandler, MendingMilestone, RealityUpgrade } from \"../globals\";\r\n\r\nexport class NonRepeatableRealityUpgradeAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.nrru;\r\n }\r\n\r\n get name() {\r\n return `Non-repeatable Reality Upgrade Autobuyer`;\r\n }\r\n\r\n get isUnlocked() {\r\n return MendingMilestone.eight.isReached;\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n tick() {\r\n if (player.auto.nrru.isActive) {\r\n for (let i = 1; i <= 20; i++) {\r\n if (Currency.realityMachines.gte(RealityUpgrade(i+5).cost) && !RealityUpgrade(i+5).isBought) {\r\n RealityUpgrade(i+5).purchase()\r\n RealityUpgrade(i+5).onPurchased()\r\n }\r\n }}\r\n }\r\n}","import { AutobuyerState } from \"./autobuyer\";\r\nimport { GlyphSacrificeHandler, ImaginaryUpgrade, MendingMilestone, RealityUpgrade } from \"../globals\";\r\n\r\nexport class NonRepeatableImaginaryUpgradeAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.nriu;\r\n }\r\n\r\n get name() {\r\n return `Non-repeatable Imaginary Upgrade Autobuyer`;\r\n }\r\n\r\n get isUnlocked() {\r\n return MendingMilestone.eight.isReached;\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n tick() {\r\n if (player.auto.nriu.isActive) {\r\n for (let i = 1; i <= 15; i++) {\r\n if (Currency.imaginaryMachines.gte(ImaginaryUpgrade(i+10).cost) && !ImaginaryUpgrade(i+10).isBought) {\r\n ImaginaryUpgrade(i+10).purchase();\r\n ImaginaryUpgrade(i+10).onPurchased();\r\n }\r\n }}\r\n }\r\n}","import { Ra } from \"../globals\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class RaPetAutobuyerState extends AutobuyerState{\r\n /**\r\n * @abstract\r\n */\r\n get _petName(){ throw new NotImplementedError(); }\r\n\r\n get data() {\r\n return player.auto.pets[this._petName].upgrades[this.id-1];\r\n }\r\n\r\n get _upgradeName(){\r\n return ['levelUp', 'purchaseChunkUpgrade', 'purchaseMemoryUpgrade'][this.id-1];\r\n }\r\n\r\n get name(){\r\n return [\"Level Up\", \"Fragmentation\", \"Recollection\"][this.id-1];\r\n }\r\n\r\n get bulk(){\r\n return 0;\r\n }\r\n\r\n static get entryCount(){\r\n return 3;\r\n }\r\n\r\n get isUnlocked() {\r\n return player.celestials.ra.permanentMemories.ra2 || Ra.pets.ra.level >= 2;\r\n }\r\n\r\n\r\n\r\n tick(){\r\n const petName = this._petName;\r\n const upgradeName = this._upgradeName;\r\n Ra.pets[petName][upgradeName]();\r\n }\r\n}","import { RaPetAutobuyerState } from \"./ra-pet-autobuyer\";\r\n\r\nexport class TeresaMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'teresa'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Teresa's Memory\"; }\r\n static get isActive() { return player.auto.pets.teresa.isActive; }\r\n static set isActive(value) { player.auto.pets.teresa.isActive = value; }\r\n}\r\n\r\nexport class EffarigMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'effarig'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Effarig's Memory\"; }\r\n static get isActive() { return player.auto.pets.effarig.isActive; }\r\n static set isActive(value) { player.auto.pets.effarig.isActive = value; }\r\n}\r\n\r\nexport class EnslavedMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'enslaved'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Nameless's Memory\"; }\r\n static get isActive() { return player.auto.pets.enslaved.isActive; }\r\n static set isActive(value) { player.auto.pets.enslaved.isActive = value; }\r\n}\r\n\r\nexport class VMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'v'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"V's Memory\"; }\r\n static get isActive() { return player.auto.pets.v.isActive; }\r\n static set isActive(value) { player.auto.pets.v.isActive = value; }\r\n}\r\n\r\nexport class RaMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'ra'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Ra's Memory\"; }\r\n static get isActive() { return player.auto.pets.ra.isActive; }\r\n static set isActive(value) { player.auto.pets.ra.isActive = value; }\r\n}\r\n\r\nexport class LaitelaMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'laitela'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Lai'tela's Memory\"; }\r\n static get isActive() { return player.auto.pets.laitela.isActive; }\r\n static set isActive(value) { player.auto.pets.laitela.isActive = value; }\r\n}\r\n\r\nexport class PelleMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'pelle'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Pelle's Memory\"; }\r\n static get isActive() { return player.auto.pets.pelle.isActive; }\r\n static set isActive(value) { player.auto.pets.pelle.isActive = value; }\r\n}","import { PelleUpgrade, Ra } from \"../globals\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class PelleRebuyableUpgradeAutobuyerState extends AutobuyerState{\r\n get _upgradeName(){\r\n return [\"antimatterDimensionMult\", \"timeSpeedMult\", \"glyphLevels\", \"infConversion\", \"galaxyPower\"][this.id-1];\r\n }\r\n\r\n get data(){\r\n return player.auto.pelleRebuyableUpgrades.all[this.id-1];\r\n }\r\n\r\n get name(){\r\n return [\"Antimatter Dimension Multiplier\", \"Game Speed Multiplier\", \"Allowed Glyph Level\", \"Infinity Power Conversion Rate\", \"Galaxy Power\"][this.id-1];\r\n }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.pelleAutobuyers.isUnlocked;\r\n }\r\n\r\n get bulk(){\r\n return 0;\r\n }\r\n\r\n tick(){\r\n const upgradeName = this._upgradeName;\r\n PelleUpgrade[upgradeName].purchase();\r\n }\r\n\r\n static get entryCount(){\r\n return 5;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Rebuyable Pelle Upgrade\"; }\r\n\r\n static get isActive(){ return player.auto.pelleRebuyableUpgrades.isActive; }\r\n\r\n static set isActive(value){ player.auto.pelleRebuyableUpgrades.isActive = value; }\r\n}\r\n\r\nexport class PelleUpgradeAutobuyerState extends AutobuyerState{\r\n get data(){\r\n return player.auto.pelleUpgrades;\r\n }\r\n\r\n get name(){\r\n return \"Pelle Upgrades\";\r\n }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.pelleAutobuyers.isUnlocked;\r\n }\r\n\r\n get bulk(){\r\n return 0;\r\n }\r\n\r\n tick(){\r\n const nextUpgrade = PelleUpgrade.singles.find(upgrade => upgrade.canBeBought);\r\n if(nextUpgrade != undefined) {\r\n nextUpgrade.purchase();\r\n }\r\n }\r\n}","import { GalaxyGeneratorUpgrades, Ra } from \"../globals\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class GalaxyGeneratorUpgradeAutobuyerState extends AutobuyerState{\r\n get _upgradeName(){\r\n return [\"additive\", \"multiplicative\", \"antimatterMult\", \"IPMult\", \"EPMult\"][this.id-1];\r\n }\r\n\r\n get data(){\r\n return player.auto.galgenUpgrades.all[this.id-1];\r\n }\r\n\r\n get name(){\r\n return [\"Additive\", \"Multiplicative\", \"Antimatter\", \"Infinity Point\", \"Eternity Point\"][this.id-1];\r\n }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.pelleAutobuyers.isUnlocked && Pelle.hasGalaxyGenerator;\r\n }\r\n\r\n get bulk(){\r\n return 0;\r\n }\r\n\r\n tick(){\r\n const upgradeName = this._upgradeName;\r\n GalaxyGeneratorUpgrades[upgradeName].purchase();\r\n }\r\n\r\n static get entryCount(){\r\n return 5;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Galaxy Generator Upgrade\"; }\r\n\r\n static get isActive(){ return player.auto.galgenUpgrades.isActive; }\r\n\r\n static set isActive(value){ player.auto.galgenUpgrades.isActive = value; }\r\n}\r\n\r\nexport class GalaxyGeneratorSacrificeAutobuyerState extends AutobuyerState{\r\n get data(){\r\n return player.auto.galgenSac;\r\n }\r\n\r\n get name(){\r\n return \"Galaxy Generator Sacrifice\";\r\n }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.pelleAutobuyers.isUnlocked && Pelle.hasGalaxyGenerator;\r\n }\r\n\r\n get bulk(){\r\n return 0;\r\n }\r\n\r\n tick(){\r\n if(GalaxyGenerator.isCapped) GalaxyGenerator.startSacrifice();\r\n }\r\n}","import { mendingResetRequest } from \"../mending\";\r\nimport { PlayerProgress } from \"../player-progress\";\r\nimport { UpgradeableAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class MendingAutobuyerState extends UpgradeableAutobuyerState {\r\n get data() {\r\n return player.auto.mending;\r\n }\r\n\r\n get name() {\r\n return `Mend`;\r\n }\r\n\r\n get isUnlocked() {\r\n return MendingUpgrade(20).isBought;\r\n }\r\n\r\n get canBeUpgraded() {\r\n return true;\r\n }\r\n\r\n get baseInterval() {\r\n return 0;\r\n }\r\n\r\n get mode() {\r\n return this.data.mode;\r\n }\r\n\r\n set mode(value) {\r\n this.data.mode = value;\r\n }\r\n\r\n get hasAdditionalModes() {\r\n return true;\r\n }\r\n\r\n get increaseWithMult() {\r\n return this.data.increaseWithMult;\r\n }\r\n\r\n set increaseWithMult(value) {\r\n this.data.increaseWithMult = value;\r\n }\r\n\r\n get amount() {\r\n return this.data.amount;\r\n }\r\n\r\n // This is unused mechanically, but should be zero to suppress the \"Current bulk:\" text\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n set amount(value) {\r\n this.data.amount = value;\r\n }\r\n\r\n get time() {\r\n return this.data.time;\r\n }\r\n\r\n set time(value) {\r\n this.data.time = value;\r\n }\r\n\r\n /*get xHighest() {\r\n return this.data.xHighest;\r\n }\r\n\r\n set xHighest(value) {\r\n this.data.xHighest = value;\r\n }*/ //TO BE IMPLEMENTED\r\n\r\n bumpAmount(mult) {\r\n if (this.isUnlocked && this.increaseWithMult) {\r\n this.amount = this.amount.times(mult);\r\n }\r\n }\r\n\r\n get canTick() {\r\n return Player.canMend && super.canTick;\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.MENDING;\r\n }\r\n\r\n /*get highestPrevPrestige() {\r\n return player.records.thisMend.maxMvR;\r\n }*/\r\n\r\n get timeToNextTick() {\r\n return Math.clampMin(this.time - Time.thisMendRealTime.totalSeconds.toNumber(), 0);\r\n }\r\n\r\n get willMend() {\r\n switch (this.mode) {\r\n case AUTO_MEND_MODE.TIME:\r\n return Time.thisMendRealTime.totalSeconds.gt(this.time);\r\n case AUTO_MEND_MODE.AMOUNT:\r\n default:\r\n return gainedMendingPoints().gte(this.amount);\r\n /*case AUTO_MEND_MODE.X_HIGHEST:\r\n default:\r\n return gainedMendmgPoints().gte(this.highestPrevPrestige.times(this.xHighest));*/\r\n }\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n if (this.willMend) mendingResetRequest();\r\n }\r\n\r\n reset() {\r\n super.reset();\r\n this.mode = AUTO_MEND_MODE.AMOUNT;\r\n }\r\n}\r\n","import { Singularity } from \"../globals\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class SingularityCapAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.singCap;\r\n }\r\n\r\n get name() {\r\n return `Singularity Cap`;\r\n }\r\n\r\n get isUnlocked() {\r\n return player.celestials.ra.permanentMemories.lai65;\r\n }\r\n\r\n get multiplier() {\r\n return this.data.multiplier;\r\n }\r\n\r\n set multiplier(value) {\r\n if(value < 1){\r\n value = 1\r\n }\r\n this.data.multiplier = value;\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n get hasInput() {\r\n return true;\r\n }\r\n\r\n get inputType() {\r\n return \"float\";\r\n }\r\n\r\n get inputEntry() {\r\n return \"multiplier\";\r\n }\r\n\r\n get description() {\r\n return \"Auto condense time (ms)\";\r\n }\r\n\r\n tick() {\r\n const duration = Singularity.cap / Currency.darkEnergy.productionPerSecond;\r\n if (duration < (this.multiplier / 1000 / Math.sqrt(10))) {\r\n Singularity.increaseCap();\r\n return;\r\n };\r\n if (duration > (this.multiplier / 1000 * Math.sqrt(10))){\r\n Singularity.decreaseCap();\r\n return;\r\n };\r\n }\r\n}\r\n","import { AnnihilationAutobuyerState } from \"./annihilation-autobuyer\";\r\nimport { AntimatterDimensionAutobuyerState } from \"./antimatter-dimension-autobuyer\";\r\nimport { BigCrunchAutobuyerState } from \"./big-crunch-autobuyer\";\r\nimport { BlackHolePowerAutobuyerState } from \"./black-hole-power-autobuyer\";\r\nimport { ExpoBlackHolePowerAutobuyerState } from \"./expo-black-hole-power-autobuyer\";\r\nimport { DarkMatterDimensionAscensionAutobuyerState } from \"./dark-matter-dimension-ascension-autobuyer\";\r\nimport { DarkMatterDimensionAutobuyerState } from \"./dark-matter-dimension-autobuyer\";\r\nimport { DilationUpgradeAutobuyerState } from \"./dilation-upgrade-autobuyer\";\r\nimport { DimBoostAutobuyerState } from \"./dimboost-autobuyer\";\r\nimport { EternityAutobuyerState } from \"./eternity-autobuyer\";\r\nimport { GalaxyAutobuyerState } from \"./galaxy-autobuyer\";\r\nimport { ImaginaryUpgradeAutobuyerState } from \"./imaginary-upgrade-autobuyer\";\r\nimport { InfinityDimensionAutobuyerState } from \"./infinity-dimension-autobuyer\";\r\nimport { EPMultAutobuyerState, IPMultAutobuyerState } from \"./prestige-currency-multiplier-autobuyer\";\r\nimport { RealityAutobuyerState } from \"./reality-autobuyer\";\r\nimport { RealityUpgradeAutobuyerState } from \"./reality-upgrade-autobuyer\";\r\nimport { ReplicantiGalaxyAutobuyerState } from \"./replicanti-galaxy-autobuyer\";\r\nimport { ReplicantiUpgradeAutobuyerState } from \"./replicanti-upgrade-autobuyer\";\r\nimport { SacrificeAutobuyerState } from \"./sacrifice-autobuyer\";\r\nimport { SingularityAutobuyerState } from \"./singularity-autobuyer\";\r\nimport { TickspeedAutobuyerState } from \"./tickspeed-autobuyer\";\r\nimport { TimeDimensionAutobuyerState } from \"./time-dimension-autobuyer\";\r\nimport { TimeTheoremAutobuyerState } from \"./time-theorem-autobuyer\";\r\nimport { TesseractAutobuyerState } from \"./tesseract-autobuyer\";\r\nimport { MusicGlyphAutobuyerState } from \"./music-glyph-autobuyer\";\r\n\r\nimport { NonRepeatableRealityUpgradeAutobuyerState } from \"./nr-reality-upgrade-autobuyer\";\r\nimport { NonRepeatableImaginaryUpgradeAutobuyerState } from \"./nr-imaginary-upgrade-autobuyer\";\r\nimport { TeresaMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { EffarigMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { EnslavedMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { VMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { RaMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { LaitelaMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { PelleMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { PelleRebuyableUpgradeAutobuyerState } from \"./pelle-upgrade-autobuyer\";\r\nimport { PelleUpgradeAutobuyerState } from \"./pelle-upgrade-autobuyer\";\r\nimport { GalaxyGeneratorUpgradeAutobuyerState } from \"./galgen-autobuyer\";\r\nimport { GalaxyGeneratorSacrificeAutobuyerState } from \"./galgen-autobuyer\";\r\nimport { MendingAutobuyerState } from \"./mending-autobuyer\";\r\nimport { SingularityCapAutobuyerState } from \"./singulaity-cap-autobuyer\";\r\n\r\nexport const Autobuyer = {\r\n annihilation: new AnnihilationAutobuyerState(),\r\n antimatterDimension: AntimatterDimensionAutobuyerState.createAccessor(),\r\n bigCrunch: new BigCrunchAutobuyerState(),\r\n blackHolePower: BlackHolePowerAutobuyerState.createAccessor(),\r\n expoBlackHolePower: ExpoBlackHolePowerAutobuyerState.createAccessor(),\r\n darkMatterDimsAscension: new DarkMatterDimensionAscensionAutobuyerState(),\r\n darkMatterDims: new DarkMatterDimensionAutobuyerState(),\r\n dilationUpgrade: DilationUpgradeAutobuyerState.createAccessor(),\r\n dimboost: new DimBoostAutobuyerState(),\r\n eternity: new EternityAutobuyerState(),\r\n galaxy: new GalaxyAutobuyerState(),\r\n imaginaryUpgrade: ImaginaryUpgradeAutobuyerState.createAccessor(),\r\n infinityDimension: InfinityDimensionAutobuyerState.createAccessor(),\r\n ipMult: new IPMultAutobuyerState(),\r\n epMult: new EPMultAutobuyerState(),\r\n reality: new RealityAutobuyerState(),\r\n realityUpgrade: RealityUpgradeAutobuyerState.createAccessor(),\r\n replicantiGalaxy: new ReplicantiGalaxyAutobuyerState(),\r\n replicantiUpgrade: ReplicantiUpgradeAutobuyerState.createAccessor(),\r\n sacrifice: new SacrificeAutobuyerState(),\r\n singularity: new SingularityAutobuyerState(),\r\n tickspeed: new TickspeedAutobuyerState(),\r\n timeDimension: TimeDimensionAutobuyerState.createAccessor(),\r\n timeTheorem: new TimeTheoremAutobuyerState(),\r\n tesseract: new TesseractAutobuyerState(),\r\n musicglyph: new MusicGlyphAutobuyerState(),\r\n nrru: new NonRepeatableRealityUpgradeAutobuyerState(),\r\n nriu: new NonRepeatableImaginaryUpgradeAutobuyerState(),\r\n teresaMem: TeresaMemoryAutobuyerState.createAccessor(),\r\n effarigMem: EffarigMemoryAutobuyerState.createAccessor(),\r\n enslavedMem: EnslavedMemoryAutobuyerState.createAccessor(),\r\n vMem: VMemoryAutobuyerState.createAccessor(),\r\n raMem: RaMemoryAutobuyerState.createAccessor(),\r\n laitelaMem: LaitelaMemoryAutobuyerState.createAccessor(),\r\n pelleMem: PelleMemoryAutobuyerState.createAccessor(),\r\n rebuyablePelle: PelleRebuyableUpgradeAutobuyerState.createAccessor(),\r\n pelleUpgrade: new PelleUpgradeAutobuyerState(),\r\n galgenUpgrade: GalaxyGeneratorUpgradeAutobuyerState.createAccessor(),\r\n galgenSac: new GalaxyGeneratorSacrificeAutobuyerState(),\r\n mending: new MendingAutobuyerState(),\r\n singCapInc: new SingularityCapAutobuyerState(),\r\n};\r\n\r\nexport const Autobuyers = (function() {\r\n const antimatterDimensions = Autobuyer.antimatterDimension.zeroIndexed;\r\n const infinityDimensions = Autobuyer.infinityDimension.zeroIndexed;\r\n const timeDimensions = Autobuyer.timeDimension.zeroIndexed;\r\n\r\n const dimensions = [antimatterDimensions, infinityDimensions, timeDimensions];\r\n\r\n const prestige = [\r\n Autobuyer.bigCrunch,\r\n Autobuyer.eternity,\r\n Autobuyer.reality,\r\n Autobuyer.mending,\r\n ];\r\n\r\n const single = [\r\n Autobuyer.sacrifice,\r\n Autobuyer.replicantiGalaxy,\r\n Autobuyer.timeTheorem,\r\n Autobuyer.ipMult,\r\n Autobuyer.epMult,\r\n Autobuyer.darkMatterDims,\r\n Autobuyer.darkMatterDimsAscension,\r\n Autobuyer.singularity,\r\n Autobuyer.annihilation,\r\n Autobuyer.tesseract,\r\n Autobuyer.musicglyph,\r\n Autobuyer.nrru,\r\n Autobuyer.nriu,\r\n Autobuyer.pelleUpgrade,\r\n Autobuyer.galgenSac,\r\n Autobuyer.singCapInc,\r\n ];\r\n\r\n const singleComplex = [\r\n Autobuyer.tickspeed,\r\n Autobuyer.galaxy,\r\n Autobuyer.dimboost,\r\n ].concat(single);\r\n\r\n const arrays = [\r\n Autobuyer.replicantiUpgrade.zeroIndexed,\r\n Autobuyer.dilationUpgrade.zeroIndexed,\r\n Autobuyer.blackHolePower.zeroIndexed,\r\n Autobuyer.expoBlackHolePower.zeroIndexed,\r\n Autobuyer.realityUpgrade.zeroIndexed,\r\n Autobuyer.imaginaryUpgrade.zeroIndexed,\r\n Autobuyer.teresaMem.zeroIndexed,\r\n Autobuyer.effarigMem.zeroIndexed,\r\n Autobuyer.enslavedMem.zeroIndexed,\r\n Autobuyer.vMem.zeroIndexed,\r\n Autobuyer.raMem.zeroIndexed,\r\n Autobuyer.laitelaMem.zeroIndexed,\r\n Autobuyer.pelleMem.zeroIndexed,\r\n Autobuyer.rebuyablePelle.zeroIndexed,\r\n Autobuyer.galgenUpgrade.zeroIndexed,\r\n ];\r\n const all = dimensions.concat(prestige, singleComplex, arrays);\r\n const multiple = [\r\n Autobuyer.antimatterDimension,\r\n Autobuyer.infinityDimension,\r\n Autobuyer.timeDimension,\r\n Autobuyer.replicantiUpgrade,\r\n Autobuyer.dilationUpgrade,\r\n Autobuyer.blackHolePower,\r\n Autobuyer.expoBlackHolePower,\r\n Autobuyer.realityUpgrade,\r\n Autobuyer.imaginaryUpgrade,\r\n Autobuyer.teresaMem,\r\n Autobuyer.effarigMem,\r\n Autobuyer.enslavedMem,\r\n Autobuyer.vMem,\r\n Autobuyer.raMem,\r\n Autobuyer.laitelaMem,\r\n Autobuyer.pelleMem,\r\n Autobuyer.rebuyablePelle,\r\n Autobuyer.galgenUpgrade,\r\n ];\r\n\r\n return {\r\n all: all.flat(),\r\n display: [multiple, single],\r\n upgradeable: antimatterDimensions.concat(\r\n Autobuyer.tickspeed,\r\n Autobuyer.dimboost,\r\n Autobuyer.galaxy,\r\n Autobuyer.bigCrunch,\r\n ),\r\n\r\n get unlocked() {\r\n return Autobuyers.all.filter(a => a.isUnlocked || a.isBought);\r\n },\r\n\r\n get hasAutobuyersForEditModal() {\r\n return [Autobuyer.dimboost,\r\n Autobuyer.galaxy,\r\n Autobuyer.bigCrunch,\r\n Autobuyer.eternity,\r\n Autobuyer.reality,\r\n Autobuyer.mending].some(autobuyer => autobuyer.isUnlocked);\r\n },\r\n\r\n toggle() {\r\n player.auto.autobuyersOn = !player.auto.autobuyersOn;\r\n },\r\n\r\n tick() {\r\n if (!player.auto.autobuyersOn) return;\r\n PerformanceStats.start(\"Autobuyers\");\r\n\r\n // The canTick condition must be checked after the previous autobuyer has triggered\r\n // in order to avoid slow dimension autobuyers.\r\n for (const autobuyer of Autobuyers.all) {\r\n if (autobuyer.canTick) autobuyer.tick();\r\n }\r\n\r\n PerformanceStats.end();\r\n },\r\n\r\n resetTick(prestigeEvent) {\r\n const autobuyers = Autobuyers.all.filter(n => n.resetTick !== undefined);\r\n for (const autobuyer of autobuyers) {\r\n autobuyer.resetTick(prestigeEvent);\r\n }\r\n },\r\n\r\n reset() {\r\n for (const autobuyer of Autobuyers.all) {\r\n autobuyer.reset();\r\n }\r\n }\r\n };\r\n}());\r\n\r\nEventHub.logic.on(GAME_EVENT.ETERNITY_RESET_AFTER, () => Autobuyers.reset());\r\nEventHub.logic.on(GAME_EVENT.REALITY_RESET_AFTER, () => Autobuyers.reset());\r\nEventHub.logic.on(GAME_EVENT.MENDING_RESET_AFTER, () => Autobuyers.reset());\r\n\r\nEventHub.logic.on(GAME_EVENT.DIMBOOST_AFTER, () => Autobuyers.resetTick(PRESTIGE_EVENT.DIMENSION_BOOST));\r\nEventHub.logic.on(GAME_EVENT.GALAXY_RESET_AFTER, () => Autobuyers.resetTick(PRESTIGE_EVENT.ANTIMATTER_GALAXY));\r\nEventHub.logic.on(GAME_EVENT.BIG_CRUNCH_AFTER, () => Autobuyers.resetTick(PRESTIGE_EVENT.INFINITY));\r\nEventHub.logic.on(GAME_EVENT.ETERNITY_RESET_AFTER, () => Autobuyers.resetTick(PRESTIGE_EVENT.ETERNITY));\r\nEventHub.logic.on(GAME_EVENT.REALITY_RESET_AFTER, () => Autobuyers.resetTick(PRESTIGE_EVENT.REALITY));\r\n","import * as ADNotations from \"@antimatter-dimensions/notations\";\r\n\r\nexport const Notation = (function() {\r\n const N = ADNotations;\r\n const notation = type => {\r\n const n = new type();\r\n n.setAsCurrent = () => {\r\n player.options.notation = n.name;\r\n ui.notationName = n.name;\r\n };\r\n return n;\r\n };\r\n const painful = n => {\r\n n.isPainful = true;\r\n return n;\r\n };\r\n return {\r\n scientific: notation(N.ScientificNotation),\r\n engineering: notation(N.EngineeringNotation),\r\n letters: notation(N.LettersNotation),\r\n standard: painful(notation(N.StandardNotation)),\r\n emoji: painful(notation(N.EmojiNotation)),\r\n mixedScientific: notation(N.MixedScientificNotation),\r\n mixedEngineering: notation(N.MixedEngineeringNotation),\r\n logarithm: notation(N.LogarithmNotation),\r\n brackets: painful(notation(N.BracketsNotation)),\r\n infinity: notation(N.InfinityNotation),\r\n roman: painful(notation(N.RomanNotation)),\r\n dots: painful(notation(N.DotsNotation)),\r\n zalgo: painful(notation(N.ZalgoNotation)),\r\n hex: painful(notation(N.HexNotation)),\r\n imperial: painful(notation(N.ImperialNotation)),\r\n clock: painful(notation(N.ClockNotation)),\r\n prime: painful(notation(N.PrimeNotation)),\r\n bar: painful(notation(N.BarNotation)),\r\n shi: painful(notation(N.ShiNotation)),\r\n blind: painful(notation(N.BlindNotation)),\r\n blobs: painful(notation(N.BlobsNotation)),\r\n all: painful(notation(N.AllNotation))\r\n };\r\n}());\r\n\r\nNotation.emoji.setAsCurrent = (silent = false) => {\r\n player.options.notation = Notation.emoji.name;\r\n ui.notationName = Notation.emoji.name;\r\n if (!silent) GameUI.notify.success(\"😂😂😂\");\r\n};\r\n\r\nexport const Notations = {\r\n // Defined as a list here for exact order in options tab.\r\n all: [\r\n Notation.scientific,\r\n Notation.engineering,\r\n Notation.letters,\r\n Notation.standard,\r\n Notation.emoji,\r\n Notation.mixedScientific,\r\n Notation.mixedEngineering,\r\n Notation.logarithm,\r\n Notation.brackets,\r\n Notation.infinity,\r\n Notation.roman,\r\n Notation.dots,\r\n Notation.zalgo,\r\n Notation.hex,\r\n Notation.imperial,\r\n Notation.clock,\r\n Notation.prime,\r\n Notation.bar,\r\n Notation.shi,\r\n Notation.blind,\r\n Notation.blobs,\r\n Notation.all,\r\n ],\r\n find: name => {\r\n const notation = Notations.all.find(n => n.name === name);\r\n return notation === undefined ? Notation.mixedScientific : notation;\r\n },\r\n get current() {\r\n return GameUI.initialized ? ui.notation : Notation.mixedScientific;\r\n }\r\n};\r\n\r\nADNotations.Settings.isInfinite = decimal => ui.formatPreBreak && decimal.gte(Decimal.NUMBER_MAX_VALUE);\r\n\r\nEventHub.logic.on(GAME_EVENT.GAME_TICK_AFTER, () => {\r\n ui.formatPreBreak = !PlayerProgress.hasBroken() || (NormalChallenge.isRunning && !Enslaved.isRunning);\r\n});\r\n","export const TUTORIAL_STATE = {\r\n DIM1: 0,\r\n DIM2: 1,\r\n TICKSPEED: 2,\r\n DIMBOOST: 3,\r\n GALAXY: 4,\r\n AUTOMATOR: 5\r\n};\r\n\r\n// Tutorial has two ways of moving on, either by Tutorial.moveOn() or by having it's condition be true. This\r\n// is checked by moving on when the NEXT state's condition evaluates to true\r\nconst tutorialStates = [\r\n {\r\n // Highlight the 1st dim button\r\n id: TUTORIAL_STATE.DIM1,\r\n condition: () => true\r\n },\r\n {\r\n // Highlight the 2nd dim button\r\n id: TUTORIAL_STATE.DIM2,\r\n condition: () => Currency.antimatter.gte(100)\r\n },\r\n {\r\n id: TUTORIAL_STATE.TICKSPEED,\r\n condition: () => AntimatterDimension(2).bought > 0\r\n },\r\n {\r\n id: TUTORIAL_STATE.DIMBOOST,\r\n condition: () => AntimatterDimension(4).amount.gte(20)\r\n },\r\n {\r\n id: TUTORIAL_STATE.GALAXY,\r\n condition: () => AntimatterDimension(8).amount.gte(80)\r\n },\r\n {\r\n id: TUTORIAL_STATE.AUTOMATOR,\r\n condition: () => Player.automatorUnlocked\r\n }\r\n];\r\n\r\nexport const Tutorial = {\r\n\r\n isActive(atState) {\r\n return player.records.fullGameCompletions === 0 && ui.view.tutorialState === atState && ui.view.tutorialActive;\r\n },\r\n\r\n // This will remain visible until the first dimboost is purchased. However, since the tutorial state generally\r\n // only visually updates whenever the UI elements need changing, we need to explicitly check boost count or else\r\n // this will remain visible until a galaxy can be purchased\r\n emphasizeH2P() {\r\n const hasFirstBoost = player.tutorialState > TUTORIAL_STATE.DIMBOOST || player.dimensionBoosts > 0;\r\n return player.records.fullGameCompletions === 0 && !hasFirstBoost;\r\n },\r\n\r\n // Turns off the visual effect\r\n turnOffEffect(fromState) {\r\n if (fromState !== player.tutorialState) return;\r\n player.tutorialActive = false;\r\n ui.view.tutorialActive = false;\r\n // Check if we can immediately enter next tutorial state. This is needed\r\n // to correctly handle buying dimension 2 + tickspeed in the same tick,\r\n // for example.\r\n this.tutorialLoop();\r\n },\r\n\r\n // Moves on to the next tutorialState, but only if parameter is current state.\r\n moveOn(fromState) {\r\n if (fromState !== player.tutorialState) return;\r\n player.tutorialState++;\r\n ui.view.tutorialState++;\r\n player.tutorialActive = true;\r\n ui.view.tutorialActive = true;\r\n },\r\n\r\n tutorialLoop() {\r\n const nextState = tutorialStates.find(o => o.id === player.tutorialState + 1);\r\n if (nextState && nextState.condition()) this.moveOn(player.tutorialState);\r\n }\r\n};\r\n","import * as ADNotations from \"@antimatter-dimensions/notations\";\r\n\r\nexport const NG = {\r\n startNewGame() {\r\n GameEnd.creditsClosed = false;\r\n GameEnd.creditsEverClosed = false;\r\n player.isGameEnd = false;\r\n // We set this ASAP so that the AD tab is immediately recreated without END formatting, and any lag which could\r\n // happen is instead hidden by the overlay from the credits rollback\r\n player.celestials.pelle.doomed = false;\r\n\r\n // This is where we \"confirm\" a speedrun as completed and store all its information into the previous run prop\r\n // before resetting everything.\r\n const speedrun = player.speedrun;\r\n if (speedrun.isActive) {\r\n player.speedrun.previousRuns[player.records.fullGameCompletions + 1] = {\r\n isSegmented: speedrun.isSegmented,\r\n usedSTD: speedrun.usedSTD,\r\n startDate: speedrun.startDate,\r\n name: speedrun.name,\r\n offlineTimeUsed: speedrun.offlineTimeUsed,\r\n records: [...speedrun.records],\r\n achievementTimes: JSON.parse(JSON.stringify(speedrun.achievementTimes)),\r\n seedSelection: speedrun.seedSelection,\r\n initialSeed: speedrun.initialSeed,\r\n };\r\n\r\n // For the sake of keeping a bounded savefile size, we only keep a queue of the last 100 full runs. The earliest\r\n // this will feasibly become an issue from nonstop speedruns is around 2030; I guess we can revisit it at that\r\n // point if we really need to, but I suspect this limit should be high enough\r\n const prevRunIndices = Object.keys(speedrun.previousRuns).map(k => Number(k));\r\n if (prevRunIndices.length > 100) player.speedrun.previousRuns[prevRunIndices.min()] = undefined;\r\n }\r\n\r\n // Modify beaten-game quantities before doing a carryover reset\r\n player.records.fullGameCompletions++;\r\n GlyphAppearanceHandler.unlockSet();\r\n this.restartWithCarryover();\r\n\r\n // The ending animation ends at 12.5, although the value continues to increase after that. We set it to a bit above\r\n // 12.5 when we start the rollback animation to hide some of the unavoidable lag from all the reset functions\r\n GameEnd.removeAdditionalEnd = true;\r\n GameEnd.additionalEnd = 15;\r\n // Without the delay, this causes the saving (and its notification) to occur during the credits rollback\r\n setTimeout(() => GameStorage.save(), 10000);\r\n },\r\n\r\n // Reset the game, but carry over some post-completion stats. We also call this when starting a speedrun, so make sure\r\n // any stats which are updated due to completion happen in startNewGame() instead of in here\r\n restartWithCarryover() {\r\n const backUpOptions = JSON.stringify(player.options);\r\n // This can't be JSONed as it contains sets\r\n const secretUnlocks = player.secretUnlocks;\r\n const secretAchievements = JSON.stringify(player.secretAchievementBits);\r\n // We don't backup the whole player.reality.automator object because it contains \"state\",\r\n // which could lead to some edge cases where it starts when it shouldn't (ie before it's unlocked)\r\n // It's easier to do something like this to avoid it entirely.\r\n const automatorConstants = JSON.stringify(player.reality.automator.constants);\r\n const automatorScripts = JSON.stringify(player.reality.automator.scripts);\r\n const fullCompletions = player.records.fullGameCompletions;\r\n const fullTimePlayed = player.records.previousRunRealTime + player.records.realTimePlayed;\r\n const glyphCosmetics = JSON.stringify(player.reality.glyphs.cosmetics);\r\n const speedrunRecords = JSON.stringify(player.speedrun.previousRuns);\r\n const hasSpeedrun = player.speedrun.isUnlocked;\r\n Modal.hideAll();\r\n Quote.clearAll();\r\n GameStorage.hardReset();\r\n player.options = JSON.parse(backUpOptions);\r\n // We need to force this one to be true because otherwise the player will be unable to select their glyphs\r\n // until they can auto-reality\r\n player.options.confirmations.glyphSelection = true;\r\n player.secretUnlocks = secretUnlocks;\r\n player.secretAchievementBits = JSON.parse(secretAchievements);\r\n player.reality.automator.constants = JSON.parse(automatorConstants);\r\n player.reality.automator.scripts = JSON.parse(automatorScripts);\r\n player.records.fullGameCompletions = fullCompletions;\r\n player.records.previousRunRealTime = fullTimePlayed;\r\n ui.view.UIType = player.options.UIType;\r\n ui.view.news = player.options.news.enabled;\r\n player.reality.glyphs.cosmetics = JSON.parse(glyphCosmetics);\r\n player.speedrun.previousRuns = JSON.parse(speedrunRecords);\r\n player.speedrun.isUnlocked = hasSpeedrun;\r\n Themes.find(Theme.currentName()).set();\r\n Notations.all.find(n => n.name === player.options.notation).setAsCurrent();\r\n ADNotations.Settings.exponentCommas.show = player.options.commas;\r\n player.lastUpdate = Date.now();\r\n }\r\n};\r\n","import { BitUpgradeState, RebuyableMechanicState } from \"../game-mechanics\";\r\nimport { Pelle } from \"../globals\";\r\nimport { GameDatabase } from \"../secret-formula/game-database\";\r\n\r\nimport { Quotes } from \"./quotes\";\r\n\r\nexport const Teresa = {\r\n timePoured: 0,\r\n lastUnlock: \"shop\",\r\n pouredAmountCap: 1e24,\r\n displayName: \"Teresa\",\r\n possessiveName: \"Teresa's\",\r\n get isUnlocked() {\r\n return Achievement(147).isUnlocked;\r\n },\r\n pourRM(diff) {\r\n if (this.pouredAmount >= Teresa.pouredAmountCap) return;\r\n this.timePoured += diff;\r\n const rm = Currency.realityMachines.value;\r\n const rmPoured = Math.min((this.pouredAmount + 1e6) * 0.01 * Math.pow(this.timePoured, 2), rm.toNumber());\r\n this.pouredAmount += Math.min(rmPoured, Teresa.pouredAmountCap - this.pouredAmount);\r\n Currency.realityMachines.subtract(rmPoured);\r\n this.checkForUnlocks();\r\n },\r\n checkForUnlocks() {\r\n for (const info of TeresaUnlocks.all) {\r\n info.unlock();\r\n }\r\n },\r\n initializeRun() {\r\n clearCelestialRuns();\r\n player.celestials.teresa.run = true;\r\n },\r\n rewardMultiplier(antimatter) {\r\n return Decimal.max(Decimal.pow(antimatter.plus(1).log10() / 1.5e8, 12), 1).toNumber();\r\n },\r\n get pouredAmount() {\r\n return player.celestials.teresa.pouredAmount;\r\n },\r\n set pouredAmount(amount) {\r\n player.celestials.teresa.pouredAmount = amount;\r\n },\r\n get fill() {\r\n return Math.min(Math.log10(this.pouredAmount) / 24, 1);\r\n },\r\n get possibleFill() {\r\n return Math.min(Currency.realityMachines.value.plus(this.pouredAmount).log10() / 24, 1);\r\n },\r\n get rmMultiplier() {\r\n return Math.max(250 * Math.pow(this.pouredAmount / 1e24, 0.1), 1);\r\n },\r\n get runRewardMultiplier() {\r\n if(this.rewardMultiplier(player.celestials.teresa.bestRunAM)===Infinity) return 1e308;\r\n return this.rewardMultiplier(player.celestials.teresa.bestRunAM);\r\n },\r\n get isRunning() {\r\n return player.celestials.teresa.run;\r\n },\r\n get runCompleted() {\r\n return player.celestials.teresa.bestRunAM.gt(1);\r\n },\r\n quotes: Quotes.teresa,\r\n symbol: \"Ϟ\"\r\n};\r\n\r\nclass PerkShopUpgradeState extends RebuyableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.costCap = config.costCap;\r\n }\r\n\r\n get currency() {\r\n return Currency.perkPoints;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.celestials.teresa.perkShop[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.celestials.teresa.perkShop[this.id] = value;\r\n }\r\n\r\n get isCapped() {\r\n return this.cost === this.costCap(this.bought);\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n const otherReq = this.config.otherReq ? this.config.otherReq() : true;\r\n return this.cost <= this.currency.value && otherReq;\r\n }\r\n\r\n onPurchased() {\r\n if (this.id === 0) {\r\n GameCache.staticGlyphWeights.invalidate();\r\n }\r\n if (this.id === 1) {\r\n Autobuyer.reality.bumpAmount(2);\r\n }\r\n // Give a single music glyph\r\n if (this.id === 4 && !Pelle.isDoomed) {\r\n if (GameCache.glyphInventorySpace.value === 0) {\r\n // Refund the perk point if they didn't actually get a glyph\r\n Currency.perkPoints.add(1);\r\n GameUI.notify.error(\"You have no empty inventory space!\");\r\n } else {\r\n Glyphs.addToInventory(GlyphGenerator.musicGlyph());\r\n GameUI.notify.success(\"Created a Music Glyph\");\r\n }\r\n }\r\n // Fill the inventory with music glyphs\r\n if (this.id === 5 && !Pelle.isDoomed) {\r\n const toCreate = GameCache.glyphInventorySpace.value;\r\n for (let count = 0; count < toCreate; count++) Glyphs.addToInventory(GlyphGenerator.musicGlyph());\r\n GameUI.notify.success(`Created ${quantifyInt(\"Music Glyph\", toCreate)}`);\r\n }\r\n }\r\n}\r\n\r\nclass TeresaUnlockState extends BitUpgradeState {\r\n get bits() { return player.celestials.teresa.unlockBits; }\r\n set bits(value) { player.celestials.teresa.unlockBits = value; }\r\n\r\n get price() {\r\n return this.config.price;\r\n }\r\n\r\n get pelleDisabled() {\r\n return Pelle.isDoomed && this.config.isDisabledInDoomed;\r\n }\r\n\r\n get isEffectActive() {\r\n return !this.pelleDisabled;\r\n }\r\n\r\n get canBeUnlocked() {\r\n return !this.isUnlocked && Teresa.pouredAmount >= this.price;\r\n }\r\n\r\n get description() {\r\n return typeof this.config.description === \"function\" ? this.config.description() : this.config.description;\r\n }\r\n\r\n onUnlock() {\r\n this.config.onUnlock?.();\r\n }\r\n}\r\n\r\nexport const TeresaUnlocks = mapGameDataToObject(\r\n GameDatabase.celestials.teresa.unlocks,\r\n config => new TeresaUnlockState(config)\r\n);\r\n\r\nexport const PerkShopUpgrade = mapGameDataToObject(\r\n GameDatabase.celestials.perkShop,\r\n config => new PerkShopUpgradeState(config)\r\n);\r\n\r\nEventHub.logic.on(GAME_EVENT.TAB_CHANGED, () => {\r\n if (Tab.celestials.teresa.isOpen) Teresa.quotes.initial.show();\r\n});\r\n\r\nEventHub.logic.on(GAME_EVENT.GAME_LOAD, () => Teresa.checkForUnlocks());\r\n","import { Currency } from \"../currency\";\r\nimport { BitUpgradeState, RebuyableMechanicState } from \"../game-mechanics\";\r\nimport { GameDatabase } from \"../secret-formula/game-database\";\r\n\r\nimport { Quotes } from \"./quotes\";\r\n\r\nexport const Kohler = {\r\n get displayName(){\r\n return false ? \"Kohler\" : \"???\"\r\n },\r\n get possessiveName(){\r\n return false ? \"Kohler's\" : \"???'s\"\r\n },\r\n get isUnlocked() {\r\n return false;\r\n },\r\n quotes: Quotes.kohler,\r\n get symbol(){ \r\n return false ? \"\" : \"?\"\r\n },\r\n\r\n get unlockProgress() {\r\n let Progress = 5;\r\n let stage1 = Math.min(15*Math.log10(CorruptionData.corruptionChallenge.recordScore)/Math.log10(5e7),15)\r\n Progress += stage1;\r\n if(stage1<15){\r\n return parseFloat(Progress.toFixed(2));\r\n }\r\n let stage2 = Math.min(15*Math.ceil(CorruptionData.recordCorruptedFragments)/30,15);\r\n Progress += stage2;\r\n if(stage2<15){\r\n return parseFloat(Progress.toFixed(2));\r\n }\r\n let stage3 = Math.min(30*(Math.log10(Decimal.log10(Currency.antimatter.value))-20)/5,30);\r\n if(stage3<0) stage3=0;\r\n if(player.celestials.kohler.unlockMilestone[4]) stage3=30;\r\n Progress += stage3;\r\n return parseFloat(Progress.toFixed(2));\r\n },\r\n checkForUnlocks() {\r\n for (const info of KohlerProgressUnlocks.all) {\r\n info.unlock();\r\n }\r\n },\r\n setUnlockProgress() {\r\n player.celestials.kohler.unlockProgress = this.unlockProgress();\r\n }\r\n};\r\n\r\nclass KohlerProgressUnlockState extends BitUpgradeState {\r\n get bits() { return player.celestials.kohler.unlockProgress; }\r\n set bits(value) { player.celestials.kohler.unlockProgress = value; }\r\n\r\n get isEffectActive() {\r\n return this.isUnlocked;\r\n }\r\n\r\n get isUnlocked() {\r\n if(player.celestials.kohler.unlockMilestone[this.config.id]) return true;\r\n let unlocked = typeof this.config.condition === \"function\" ? this.config.condition() : this.config.condition;\r\n if (unlocked) player.celestials.kohler.unlockMilestone[this.config.id] = true;\r\n return /*!this.isUnlocked &&*/ unlocked;\r\n }\r\n\r\n get description() {\r\n return typeof this.config.description === \"function\" ? this.config.description() : this.config.description;\r\n }\r\n\r\n onUnlock() {\r\n this.config.onUnlock?.();\r\n }\r\n}\r\n\r\nexport const KohlerProgressUnlocks = mapGameDataToObject(\r\n GameDatabase.mending.kohlerUnlockProgress.progressUnlocks,\r\n config => new KohlerProgressUnlockState(config)\r\n);\r\n\r\nEventHub.logic.on(GAME_EVENT.GAME_LOAD, () => Kohler.checkForUnlocks());","import { BitUpgradeState } from \"../game-mechanics\";\r\nimport { GameDatabase } from \"../secret-formula/game-database\";\r\n\r\nimport { DC } from \"../constants\";\r\n\r\nimport { Quotes } from \"./quotes\";\r\n\r\nexport const EFFARIG_STAGES = {\r\n INFINITY: 1,\r\n ETERNITY: 2,\r\n REALITY: 3,\r\n COMPLETED: 4,\r\n MEND: 5,\r\n MEND_COMPLETED: 6,\r\n};\r\n\r\nexport const Effarig = {\r\n displayName: \"Effarig\",\r\n possessiveName: \"Effarig's\",\r\n initializeRun() {\r\n clearCelestialRuns();\r\n player.celestials.effarig.run = true;\r\n recalculateAllGlyphs();\r\n Tab.reality.glyphs.show(false);\r\n },\r\n get isRunning() {\r\n return player.celestials.effarig.run;\r\n },\r\n get currentStage() {\r\n if (!EffarigUnlock.infinity.isUnlocked) {\r\n return EFFARIG_STAGES.INFINITY;\r\n }\r\n if (!EffarigUnlock.eternity.isUnlocked) {\r\n return EFFARIG_STAGES.ETERNITY;\r\n }\r\n if (!EffarigUnlock.reality.isUnlocked) {\r\n return EFFARIG_STAGES.REALITY;\r\n }\r\n if (!Ra.unlocks.effarigMendUnlock.isUnlocked){\r\n return EFFARIG_STAGES.COMPLETED;\r\n }\r\n if (!EffarigUnlock.mend.isUnlocked){\r\n return EFFARIG_STAGES.MEND;\r\n }\r\n return EFFARIG_STAGES.MEND_COMPLETED;\r\n },\r\n get currentStageName() {\r\n switch (this.currentStage) {\r\n case EFFARIG_STAGES.INFINITY:\r\n return \"Infinity\";\r\n case EFFARIG_STAGES.ETERNITY:\r\n return \"Eternity\";\r\n case EFFARIG_STAGES.REALITY:\r\n case EFFARIG_STAGES.COMPLETED:\r\n return \"Reality\";\r\n case EFFARIG_STAGES.MEND:\r\n return \"Mend\";\r\n default:\r\n return \"\";\r\n }\r\n },\r\n get eternityCap() {\r\n return this.isRunning && this.currentStage === EFFARIG_STAGES.ETERNITY ? DC.E50 : undefined;\r\n },\r\n get glyphLevelCap() {\r\n switch (this.currentStage) {\r\n case EFFARIG_STAGES.INFINITY:\r\n return 100;\r\n case EFFARIG_STAGES.ETERNITY:\r\n return 1500;\r\n case EFFARIG_STAGES.REALITY:\r\n return 2000;\r\n case EFFARIG_STAGES.MEND:\r\n return 3500;\r\n default:\r\n return 10000;\r\n }\r\n },\r\n get glyphEffectAmount() {\r\n const genEffectBitmask = Glyphs.activeWithoutCompanion\r\n .filter(g => generatedTypes.includes(g.type))\r\n .reduce((prev, curr) => prev | curr.effects, 0);\r\n const nongenEffectBitmask = Glyphs.activeWithoutCompanion\r\n .filter(g => !generatedTypes.includes(g.type))\r\n .reduce((prev, curr) => prev | curr.effects, 0);\r\n return countValuesFromBitmask(genEffectBitmask) + countValuesFromBitmask(nongenEffectBitmask);\r\n },\r\n get shardsGained() {\r\n if (!TeresaUnlocks.effarig.canBeApplied) return new Decimal(0);\r\n return (Decimal.floor(Decimal.pow(Currency.eternityPoints.exponent / 7500, this.glyphEffectAmount)).times(AlchemyResource.effarig.effectValue));\r\n },\r\n get maxRarityBoost() {\r\n return 5 * Math.log10(Decimal.log10(Currency.relicShards.value.plus(10)));\r\n },\r\n nerfFactor(power) {\r\n let c;\r\n switch (this.currentStage) {\r\n case EFFARIG_STAGES.INFINITY:\r\n c = 1500;\r\n break;\r\n case EFFARIG_STAGES.ETERNITY:\r\n c = 29.29;\r\n break;\r\n case EFFARIG_STAGES.MEND:\r\n c = 6000; //this needs tweaking\r\n break;\r\n case EFFARIG_STAGES.REALITY:\r\n default:\r\n c = 25;\r\n break;\r\n }\r\n return 3 * (1 - c / (c + Math.sqrt(power.pLog10())));\r\n },\r\n get tickDilation() {\r\n return 0.7 + 0.1 * this.nerfFactor(Currency.timeShards.value);\r\n },\r\n get multDilation() {\r\n return 0.25 + 0.25 * this.nerfFactor(Currency.infinityPower.value);\r\n },\r\n get tickspeed() {\r\n const base = 3 + Tickspeed.baseValue.reciprocal().log10();\r\n return Decimal.pow10(Math.pow(base, this.tickDilation)).reciprocal();\r\n },\r\n multiplier(mult) {\r\n const base = new Decimal(mult).pLog10();\r\n return Decimal.pow10(Math.pow(base, this.multDilation));\r\n },\r\n get bonusRG() {\r\n // Will return 0 if Effarig Infinity is uncompleted\r\n return Math.floor(replicantiCap().pLog10() / LOG10_MAX_VALUE - 1);\r\n },\r\n quotes: Quotes.effarig,\r\n symbol: \"Ϙ\"\r\n};\r\n\r\nclass EffarigUnlockState extends BitUpgradeState {\r\n get bits() { return player.celestials.effarig.unlockBits; }\r\n set bits(value) { player.celestials.effarig.unlockBits = value; }\r\n\r\n get cost() {\r\n return this.config.cost;\r\n }\r\n\r\n get isEffectActive() {\r\n return !Pelle.isDisabled(\"effarig\");\r\n }\r\n\r\n purchase() {\r\n if (this.isUnlocked || !Currency.relicShards.purchase(this.cost)) return;\r\n this.unlock();\r\n this.config.onPurchased?.();\r\n }\r\n}\r\n\r\nexport const EffarigUnlock = mapGameDataToObject(\r\n GameDatabase.celestials.effarig.unlocks,\r\n config => new EffarigUnlockState(config)\r\n);\r\n\r\nEventHub.logic.on(GAME_EVENT.TAB_CHANGED, () => {\r\n if (Tab.celestials.effarig.isOpen) Effarig.quotes.initial.show();\r\n});\r\n\r\nEventHub.logic.on(GAME_EVENT.BIG_CRUNCH_BEFORE, () => {\r\n if (!Effarig.isRunning) return;\r\n Effarig.quotes.completeInfinity.show();\r\n});\r\n\r\nEventHub.logic.on(GAME_EVENT.ETERNITY_RESET_BEFORE, () => {\r\n if (!Effarig.isRunning) return;\r\n Effarig.quotes.completeEternity.show();\r\n});\r\n","import { BitUpgradeState, GameMechanicState } from \"../game-mechanics\";\r\nimport { Glyphs, MendingUpgrade } from \"../globals\";\r\nimport { GameDatabase } from \"../secret-formula/game-database\";\r\n\r\nimport { SpeedrunMilestones } from \"../speedrun\";\r\n\r\nimport { Quotes } from \"./quotes\";\r\n\r\n/**\r\n * Information about how to format runUnlocks:\r\n * id: unique id\r\n * name: the achievement name\r\n * description: Description what you need to do, for values add {value}\r\n * values: different values to display and check against the game\r\n * condition: function that takes the current value as an argument, if true completes an achievement\r\n * format: optional function that formats the value, defaults to format()\r\n */\r\n\r\nclass VRunUnlockState extends GameMechanicState {\r\n get completions() {\r\n const completions = player.celestials.v.runUnlocks[this.id];\r\n return completions === undefined ? 0 : completions;\r\n }\r\n\r\n get conditionBaseValue() {\r\n const value = this.config.values[this.completions];\r\n return value === undefined ? this.config.values[this.completions - 1] : value;\r\n }\r\n\r\n get canBeReduced() {\r\n return this.completions < this.config.values.length && this.completions !== 0 &&\r\n new Decimal(this.reduction).neq(this.config.maxShardReduction(this.conditionBaseValue));\r\n }\r\n\r\n get isReduced() {\r\n if (player.celestials.v.goalReductionSteps[this.id] === 0) return false;\r\n return (VUnlocks.shardReduction.canBeApplied && this.reduction > 0);\r\n }\r\n\r\n get reductionCost() {\r\n const stepCount = this.config.reductionStepSize ? this.config.reductionStepSize : 1;\r\n if (this.config.isHard) {\r\n // The numbers come from inside of nextHardReductionCost, this is an effective bulk-buy factor\r\n const modifiedStepCount = (Math.pow(1.15, stepCount) - 1) / 0.15;\r\n return modifiedStepCount * V.nextHardReductionCost(player.celestials.v.goalReductionSteps[this.id]);\r\n }\r\n if (this.config.isSuperHard) {\r\n // The numbers come from inside of nextHardReductionCost, this is an effective bulk-buy factor\r\n const modifiedStepCount = (Math.pow(1.5, stepCount) - 1) / 0.5;\r\n return modifiedStepCount * V.nextSuperHardReductionCost(player.celestials.v.goalReductionSteps[this.id]);\r\n }\r\n return stepCount * V.nextNormalReductionCost();\r\n }\r\n\r\n get tiersReduced() {\r\n return player.celestials.v.goalReductionSteps[this.id] / 100;\r\n }\r\n\r\n get reduction() {\r\n const value = this.conditionBaseValue;\r\n return Math.clamp(this.config.shardReduction(this.tiersReduced), 0, this.config.maxShardReduction(value));\r\n }\r\n\r\n get conditionValue() {\r\n let value = this.conditionBaseValue;\r\n if (!this.isReduced) return value;\r\n value -= this.reduction;\r\n return value;\r\n }\r\n\r\n get formattedDescription() {\r\n return this.config.description(this.conditionValue);\r\n }\r\n\r\n set completions(value) {\r\n player.celestials.v.runUnlocks[this.id] = value;\r\n }\r\n\r\n tryComplete() {\r\n const playerData = player.celestials.v;\r\n const value = this.config.currentValue();\r\n if (this.config.condition() && Decimal.gte(value, playerData.runRecords[this.id])) {\r\n playerData.runRecords[this.id] = value;\r\n playerData.runGlyphs[this.id] = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n\r\n let forceCap = 0\r\n while (this.completions < this.config.values.length &&\r\n Decimal.gte(playerData.runRecords[this.id], this.conditionValue) &&\r\n forceCap < 20) {\r\n forceCap++\r\n if (!V.isFlipped && this.config.isHard) break;\r\n if (!V.isSuperFlipped && this.config.isSuperHard) break;\r\n this.completions++;\r\n GameUI.notify.success(`You have unlocked V-Achievement\r\n '${this.config.name}' tier ${formatInt(this.completions)}`);\r\n\r\n V.updateTotalRunUnlocks();\r\n\r\n for (const quote of V.quotes.all) {\r\n // Quotes without requirements will be shown in other ways\r\n if (quote.requirement) {\r\n quote.show();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass VUnlockState extends BitUpgradeState {\r\n get bits() { return player.celestials.v.unlockBits; }\r\n set bits(value) { player.celestials.v.unlockBits = value; }\r\n\r\n get pelleDisabled() {\r\n return Pelle.isDoomed && this !== VUnlocks.vAchievementUnlock;\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isUnlocked && !this.pelleDisabled;\r\n }\r\n\r\n get description() {\r\n return typeof this.config.description === \"function\" ? this.config.description()\r\n : this.config.description;\r\n }\r\n\r\n get rewardText() {\r\n return typeof this.config.reward === \"function\" ? this.config.reward()\r\n : this.config.reward;\r\n }\r\n\r\n get canBeUnlocked() {\r\n return this.config.requirement() && !this.isUnlocked;\r\n }\r\n\r\n get formattedEffect() {\r\n if (!this.config.effect || !this.config.format) return \"\";\r\n\r\n return this.config.format(this.effectValue);\r\n }\r\n\r\n onUnlock() {\r\n GameUI.notify.success(this.description);\r\n }\r\n}\r\n\r\n/**\r\n * @param {number} id\r\n * @return {VRunUnlockState}\r\n */\r\nexport const VRunUnlock = VRunUnlockState.createAccessor(GameDatabase.celestials.v.runUnlocks);\r\n\r\nexport const VRunUnlocks = {\r\n /**\r\n * @type {VRunUnlockState[]}\r\n */\r\n all: VRunUnlock.index.compact(),\r\n};\r\n\r\nexport const VUnlocks = mapGameDataToObject(\r\n GameDatabase.celestials.v.unlocks,\r\n config => new VUnlockState(config)\r\n);\r\n\r\nexport const V = {\r\n displayName: \"V\",\r\n possessiveName: \"V's\",\r\n spaceTheorems: 0,\r\n checkForUnlocks() {\r\n for (const unl of VUnlocks.all) {\r\n if (unl === VUnlocks.vAchievementUnlock) continue;\r\n unl.unlock();\r\n }\r\n\r\n if (this.isRunning) {\r\n for (const unlock of VRunUnlocks.all) {\r\n unlock.tryComplete();\r\n }\r\n if (this.spaceTheorems >= 36) SpeedrunMilestones(22).tryComplete();\r\n }\r\n\r\n if (this.isSuperRunning) {\r\n for (const unlock of VRunUnlocks.all) {\r\n unlock.tryComplete();\r\n }\r\n }\r\n\r\n if (VUnlocks.raUnlock.canBeApplied && !Ra.unlocks.autoTP.canBeApplied) {\r\n Ra.checkForUnlocks();\r\n }\r\n },\r\n get canUnlockCelestial() {\r\n return VUnlocks.vAchievementUnlock.canBeUnlocked;\r\n },\r\n unlockCelestial() {\r\n player.celestials.v.unlockBits |= (1 << VUnlocks.vAchievementUnlock.id);\r\n GameUI.notify.success(\"You have unlocked V, The Celestial Of Achievements!\", 10000);\r\n V.quotes.unlock.show();\r\n },\r\n initializeRun() {\r\n clearCelestialRuns();\r\n player.celestials.v.run = true;\r\n this.quotes.realityEnter.show();\r\n },\r\n initializeSuperRun() {\r\n clearCelestialRuns();\r\n player.celestials.v.superrun = true;\r\n },\r\n updateTotalRunUnlocks() {\r\n let sum = 0\r\n let mult = MendingUpgrade(14).isBought ? 3 : 1\r\n for (let i = 0; i < player.celestials.v.runUnlocks.length; i++) {\r\n sum += player.celestials.v.runUnlocks[i] * mult;\r\n if (i>=6 && i<12) sum += player.celestials.v.runUnlocks[i] * mult;\r\n if (i>=12) sum += player.celestials.v.runUnlocks[i] * 4 * mult;\r\n }\r\n this.spaceTheorems = sum;\r\n },\r\n reset() {\r\n player.celestials.v = {\r\n unlockBits: 0,\r\n run: false,\r\n quotes: [],\r\n runUnlocks: [0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n goalReductionSteps: [0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n STSpent: 0,\r\n runGlyphs: [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []],\r\n runRecords: [-10, 0, 0, 0, 0, 0, -10, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n };\r\n this.spaceTheorems = 0;\r\n },\r\n get availableST() {\r\n return V.spaceTheorems - player.celestials.v.STSpent;\r\n },\r\n get isRunning() {\r\n return player.celestials.v.run;\r\n },\r\n get isSuperRunning() {\r\n return player.celestials.v.superrun;\r\n },\r\n get beingInitialized() {\r\n return player.celestials.v.beingInitialized;\r\n },\r\n get isFlipped() {\r\n return Ra.unlocks.unlockHardV.isUnlocked;\r\n },\r\n get isSuperFlipped() {\r\n return Ra.unlocks.unlockSHardV.isUnlocked;\r\n },\r\n get isFullyCompleted() {\r\n let x = MendingUpgrade(14).isBought? 198 : 66;\r\n if(Ra.unlocks.unlockSHardV.isUnlocked) x = MendingUpgrade(14).isBought? 648 : 216;\r\n return this.spaceTheorems >= x;\r\n },\r\n nextNormalReductionCost() {\r\n return 1000;\r\n },\r\n nextHardReductionCost(currReductionSteps) {\r\n return 1000 * Math.pow(1.15, currReductionSteps);\r\n },\r\n nextSuperHardReductionCost(currReductionSteps) {\r\n return 1e20 * Math.pow(1.5, currReductionSteps);\r\n },\r\n quotes: Quotes.v,\r\n symbol: \"⌬\"\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.TAB_CHANGED, () => {\r\n if (Tab.celestials.v.isOpen) V.quotes.initial.show();\r\n});\r\n","import { BitUpgradeState, GameMechanicState } from \"../../game-mechanics\";\r\nimport { MendingUpgrade } from \"../../mending-upgrades\";\r\nimport { Quotes } from \"../quotes\";\r\nimport { normalTimeStudies } from \"../../secret-formula/eternity/time-studies/normal-time-studies\";\r\nimport { DC } from \"../../constants\";\r\nimport { CorruptionUpgrade } from \"../../corruption-upgrades\";\r\n\r\nconst ts306 = normalTimeStudies.find(obj => obj.id === 306);\r\n\r\n\r\nclass RaUnlockState extends BitUpgradeState {\r\n get bits() { return player.celestials.ra.unlockBits; }\r\n set bits(value) { player.celestials.ra.unlockBits = value; }\r\n\r\n get modBits() { return player.celestials.ra.modUnlockBits; }\r\n set modBits(value) { player.celestials.ra.modUnlockBits = value; }\r\n\r\n get disabledByPelle() {\r\n return Pelle.isDoomed && this.config.disabledByPelle;\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isUnlocked && !this.disabledByPelle;\r\n }\r\n\r\n get requirementText() {\r\n const pet = this.pet.name;\r\n return this.level === 1\r\n ? `Unlock ${pet}`\r\n : `Get ${pet} to level ${this.level}`;\r\n }\r\n\r\n get reward() {\r\n return typeof this.config.reward === \"function\"\r\n ? this.config.reward()\r\n : this.config.reward;\r\n }\r\n\r\n get displayIcon() {\r\n return this.disabledByPelle ? `` : this.config.displayIcon;\r\n }\r\n\r\n get pet() {\r\n return Ra.pets[this.config.pet];\r\n }\r\n\r\n get level() {\r\n return this.config.level;\r\n }\r\n\r\n get canBeUnlocked() {\r\n //alright here you are\r\n if(this.pet.id == 'laitela'){\r\n if(this.id == 20 && player.celestials.ra.permanentMemories.lai50) return true;\r\n if(this.id == 21 && player.celestials.ra.permanentMemories.lai65) return true;\r\n };\r\n if(this.pet.id == 'ra' && this.id == 30 && player.celestials.ra.permanentMemories.ra2) return true;\r\n //ends\r\n return this.pet.level >= this.level && !this.isUnlocked;\r\n }\r\n\r\n onUnlock() {\r\n this.config.onUnlock?.();\r\n }\r\n}\r\n\r\nconst unlocks = mapGameDataToObject(\r\n GameDatabase.celestials.ra.unlocks,\r\n config => new RaUnlockState(config)\r\n);\r\n\r\nclass RaPetState extends GameMechanicState {\r\n get data() {\r\n return player.celestials.ra.pets[this.id];\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get chunkGain() {\r\n return this.config.chunkGain;\r\n }\r\n\r\n get memoryGain() {\r\n return this.config.memoryGain;\r\n }\r\n\r\n get secondaryMemoryChunkGain(){\r\n return this.config.secondaryMemoryChunkGain;\r\n }\r\n\r\n get color() {\r\n return this.config.color;\r\n }\r\n\r\n get requiredUnlock() {\r\n return this.config.requiredUnlock?.();\r\n }\r\n\r\n get rawMemoryChunksPerSecond() {\r\n return this.config.rawMemoryChunksPerSecond();\r\n }\r\n\r\n get memoryProductionMultiplier() {\r\n return this.config.memoryProductionMultiplier();\r\n }\r\n\r\n get isUnlocked() {\r\n return this.requiredUnlock === undefined || this.requiredUnlock.isUnlocked;\r\n }\r\n\r\n get isCapped() {\r\n return this.level >= Ra.levelCap;\r\n }\r\n\r\n get level() {\r\n return this.isUnlocked ? this.data.level : 0;\r\n }\r\n\r\n set level(value) {\r\n this.data.level = value;\r\n }\r\n\r\n get memories() {\r\n return this.data.memories;\r\n }\r\n\r\n set memories(value) {\r\n this.data.memories = Math.min(value, 1e300);\r\n }\r\n\r\n get memoryChunks() {\r\n return this.data.memoryChunks;\r\n }\r\n\r\n set memoryChunks(value) {\r\n this.data.memoryChunks = Math.min(1e300, value);\r\n }\r\n\r\n get requiredMemories() {\r\n return Ra.requiredMemoriesForLevel(this, this.level);\r\n }\r\n\r\n get memoryChunksPerSecond() {\r\n if (!this.canGetMemoryChunks) return 0;\r\n let res = this.rawMemoryChunksPerSecond * this.chunkUpgradeCurrentMult *\r\n Math.max(Effects.product(Ra.unlocks.continuousTTBoost.effects.memoryChunks, GlyphSacrifice.reality), 1);\r\n if (this.hasRemembrance) res *= Ra.remembrance.multiplier;\r\n else if (Ra.petWithRemembrance) res *= Ra.remembrance.nerf;\r\n res *= WarpUpgrade(5).effectOrDefault(1);\r\n if (Ra.unlocks.raXP.isUnlocked) res *= Math.log10((Math.max(Currency.imaginaryMachines.value, 1)));\r\n if (Ra.unlocks.pelleXP.isUnlocked){\r\n res *= (Math.log10(player.records.bestReality.remWithoutGG + 1) / 1.6667) + 1;\r\n }\r\n if (!Ra.isRunning && Ra.unlocks.generateMemChunksOutOfRasReality.isUnlocked) res /= 100;\r\n return res;\r\n }\r\n\r\n get canGetMemoryChunks() {\r\n return this.isUnlocked && (Ra.isRunning || (this.id === \"pelle\" && Pelle.isDoomed) || Ra.unlocks.generateMemChunksOutOfRasReality.isUnlocked) && this.level < Ra.levelCap;\r\n }\r\n\r\n get hasRemembrance() {\r\n if (Ra.unlocks.remembranceAlwaysActiveAndShopUnlock.isUnlocked) return true;\r\n return Ra.petWithRemembrance === this.name;\r\n }\r\n\r\n get memoryUpgradeCurrentMult() {\r\n return Math.pow(1.3, this.data.memoryUpgrades);\r\n }\r\n\r\n get chunkUpgradeCurrentMult() {\r\n return Math.pow(1.5, this.data.chunkUpgrades);\r\n }\r\n\r\n get memoryUpgradeCost() {\r\n return 1000 * Math.pow(5, this.data.memoryUpgrades);\r\n }\r\n\r\n get chunkUpgradeCost() {\r\n return 5000 * Math.pow(25, this.data.chunkUpgrades);\r\n }\r\n\r\n get canBuyMemoryUpgrade() {\r\n return this.memoryUpgradeCost <= this.memories;\r\n }\r\n\r\n get canBuyChunkUpgrade() {\r\n return this.chunkUpgradeCost <= this.memories;\r\n }\r\n\r\n get memoryUpgradeCapped() {\r\n return this.memoryUpgradeCost >= 0.5 * Ra.requiredMemoriesForLevel(this, Ra.levelCap - 1);\r\n }\r\n\r\n get chunkUpgradeCapped() {\r\n return this.chunkUpgradeCost >= 0.5 * Ra.requiredMemoriesForLevel(this, Ra.levelCap - 1);\r\n }\r\n\r\n purchaseMemoryUpgrade() {\r\n if (!this.canBuyMemoryUpgrade || this.memoryUpgradeCapped) return;\r\n\r\n if(this.spendsMemories) this.memories -= this.memoryUpgradeCost;\r\n this.data.memoryUpgrades++;\r\n }\r\n\r\n purchaseChunkUpgrade() {\r\n if (!this.canBuyChunkUpgrade || this.chunkUpgradeCapped) return;\r\n\r\n if(this.spendsMemories) this.memories -= this.chunkUpgradeCost;\r\n this.data.chunkUpgrades++;\r\n }\r\n\r\n levelUp() {\r\n if (this.memories < this.requiredMemories) return;\r\n if(this.id === 'pelle' && this.level === 99 && Ra.totalPetLevel != 699) return;\r\n\r\n if(this.spendsMemories) this.memories -= this.requiredMemories;\r\n this.level++;\r\n Ra.checkForUnlocks();\r\n }\r\n\r\n get spendsMemories() {\r\n return !Ra.unlocks.upgradesDontSpendMems.isUnlocked;\r\n }\r\n\r\n get unlocks() {\r\n return Ra.unlocks.all\r\n .filter(x => x.pet === this)\r\n .sort((a, b) => a.level - b.level);\r\n }\r\n\r\n tick(realDiff, generateChunks) {\r\n const seconds = realDiff / 1000;\r\n const newMemoryChunks = generateChunks\r\n ? seconds * this.memoryChunksPerSecond\r\n : 0;\r\n // Adding memories from half of the gained chunks this tick results in the best mathematical behavior\r\n // for very long simulated ticks\r\n let memsPerSecond = Math.pow((this.memoryChunks + newMemoryChunks / 2) * Ra.productionPerMemoryChunk *\r\n this.memoryUpgradeCurrentMult * this.shopMemMultEffect, MendingUpgrade(15).isBought ? 1.5 : 1) * (Pelle.isDoomed && Ra.unlocks.boostMemoryGain.isUnlocked ? 500 : 1);\r\n if(CorruptionUpgrade(1).isBought){switch(Ra.currentCelestial){\r\n case 1: if(this.id=='teresa') memsPerSecond *= 1500;break;\r\n case 2: if(this.id=='effarig') memsPerSecond *= 1500;break;\r\n case 3: if(this.id=='enslaved') memsPerSecond *= 1500;break;\r\n case 4: if(this.id=='v') memsPerSecond *= 1500;break;\r\n case 5: if(this.id=='ra') memsPerSecond *= 1500;break;\r\n case 6: if(this.id=='laitela') memsPerSecond *= 1500;break;\r\n case 7: if(this.id=='pelle') memsPerSecond *= 1500;break;\r\n };}\r\n let newMemories = seconds * memsPerSecond;\r\n this.memoryChunks += newMemoryChunks;\r\n this.memories += newMemories;\r\n }\r\n\r\n reset() {\r\n let x = MendingMilestone.ten.isReached ? 10 : 1;\r\n //this.data.level = 1;\r\n Ra.pets.teresa.level = x;\r\n Ra.pets.effarig.level = x;\r\n Ra.pets.enslaved.level = x;\r\n Ra.pets.v.level = x;\r\n Ra.pets.ra.level = 1;\r\n Ra.pets.laitela.level = 1;\r\n Ra.pets.pelle.level = 1;\r\n this.data.memories = 0;\r\n this.data.memoryChunks = 0;\r\n this.data.memoryUpgrades = 0;\r\n this.data.chunkUpgrades = 0;\r\n }\r\n\r\n get shopMemMultEffect(){\r\n return RaUpgrade[`inc${this.id.charAt(0).toUpperCase()}${this.id.substring(1)}XPGain`].effectValue;\r\n }\r\n\r\n get shopWeakenScalingEffect(){\r\n return RaUpgrade[`weaken${this.id.charAt(0).toUpperCase()}${this.id.substring(1)}Scaling`].effectValue;\r\n }\r\n}\r\n\r\nconst pets = mapGameDataToObject(\r\n GameDatabase.celestials.ra.pets,\r\n config => new RaPetState(config)\r\n);\r\n\r\nexport const Ra = {\r\n displayName: \"Ra\",\r\n possessiveName: \"Ra's\",\r\n alchauto: 0,\r\n unlocks,\r\n pets,\r\n remembrance: {\r\n get multiplier(){\r\n if(Ra.unlocks.remembranceBoost.isUnlocked) return 75; \r\n return 5;\r\n },\r\n get nerf(){\r\n if(Ra.unlocks.remembranceAlwaysActiveAndShopUnlock.isUnlocked) return 1; \r\n return 0.5;\r\n },\r\n requiredLevels: 20,\r\n get isUnlocked() {\r\n return Ra.totalPetLevel >= this.requiredLevels;\r\n }\r\n },\r\n // Dev/debug function for easier testing\r\n reset() {\r\n const data = player.celestials.ra;\r\n data.unlockBits = 0;\r\n data.modUnlockBits = [0, 0, 0];\r\n data.run = false;\r\n data.charged = new Set();\r\n data.disCharge = false;\r\n data.breakCharged = new Set();\r\n data.breakDischarge = false;\r\n data.peakGamespeed = new Decimal(1);\r\n for (const pet of Ra.pets.all) pet.reset();\r\n },\r\n memoryTick(realDiff, generateChunks) {\r\n if (!this.isUnlocked) return;\r\n for (const pet of Ra.pets.all) pet.tick(realDiff, generateChunks);\r\n },\r\n get productionPerMemoryChunk() {\r\n let res = Effects.product(Ra.unlocks.continuousTTBoost.effects.memories, Achievement(168), Achievement(195));\r\n for (const pet of Ra.pets.all) {\r\n if (pet.isUnlocked) res = new Decimal(res).times(pet.memoryProductionMultiplier);\r\n }\r\n if (MendingMilestone.one.isReached) res = new Decimal(res).times(25);\r\n if (player.timestudy.studies.includes(306)) res = new Decimal(res).times(ts306.effect());\r\n res = res.timesEffectOf(WarpUpgrade(2)).times(VUnlocks.vAchRa.effectOrDefault(1));\r\n \r\n return res.toNumber();\r\n },\r\n get memoryBoostResources() {\r\n const boostList = [];\r\n for (const pet of Ra.pets.all) {\r\n if (pet.memoryProductionMultiplier !== 1) boostList.push(pet.memoryGain);\r\n }\r\n if (Achievement(168).isUnlocked) boostList.push(\"Achievement 168\");\r\n if (Ra.unlocks.continuousTTBoost.canBeApplied) boostList.push(\"current TT\");\r\n if (MendingMilestone.one.isReached) boostList.push(\"Mending Milestone 1\");\r\n if (MendingUpgrade(15).isBought) boostList.push(\"Mending Upgrade 15\");\r\n\r\n if (boostList.length === 1) return `${boostList[0]}`;\r\n if (boostList.length === 2) return `${boostList[0]} and ${boostList[1]}`;\r\n return `${boostList.slice(0, -1).join(\", \")}, and ${boostList[boostList.length - 1]}`;\r\n },\r\n // So let's make Ra currency work? --sxy\r\n raPointsGain(diff) {\r\n if(!Ra.isRunning) return new Decimal(0);\r\n if(!Ra.unlocks.remembranceAlwaysActiveAndShopUnlock.isUnlocked) return new Decimal(0);\r\n let ticktime = diff/1000;\r\n let base = Math.max(player.dimensionBoosts - 2.5e9,0)/1e8;\r\n let powered = Decimal.pow(10,base).minus(1);\r\n let GainPerSec = new Decimal(powered.times(ticktime));\r\n return GainPerSec;\r\n },\r\n raGainPointLoop(diff){\r\n player.celestials.ra.raPoints = player.celestials.ra.raPoints.plus(Ra.raPointsGain(diff));\r\n },\r\n // Why the rebuyable of ra shop has complex name wtf --sxy\r\n \r\n // This is the exp required ON \"level\" in order to reach \"level + 1\"\r\n requiredMemoriesForLevel(pet, level) {\r\n if (level >= Ra.levelCap) return Infinity;\r\n let perMemScaling = 1\r\n let fixCostMulti = 1\r\n if (level >= 25) {fixCostMulti = 1e44}\r\n if (level >= 30) {perMemScaling = 1.35;fixCostMulti = 1e48}\r\n if (level >= 40) {perMemScaling = 1.35} \r\n if (level >= 50) {perMemScaling = 1.5;fixCostMulti = 1e50} \r\n if (level >= 65) {perMemScaling = 1.6} \r\n if (level >= 75) {perMemScaling = 1.75;fixCostMulti = 1e60} \r\n if (level >= 90) {perMemScaling = 2.25;fixCostMulti = 1e80} \r\n const adjustedLevel = level + Math.pow(level, 2) / 10;\r\n const post15Scaling = Math.pow(1.5, Math.max(0, level - 15));\r\n const post25Scaling = Math.pow(3, Math.max(0, level-25));\r\n let primeAnswer = Math.pow(adjustedLevel, 5.52) * post15Scaling * post25Scaling * 1e6;\r\n //if (level>=90) primeAnswer=primeAnswer*1e300;//temporary scale for balacing\r\n primeAnswer = primeAnswer / pet.shopWeakenScalingEffect;\r\n return Math.floor(Math.pow(primeAnswer, perMemScaling) * fixCostMulti);\r\n },\r\n // Returns a string containing a time estimate for gaining a specific amount of exp (UI only)\r\n timeToGoalString(pet, expToGain) {\r\n //This function did its job well, the 0ms issue is due to Number precision lost.\r\n //If the issue did need to fix, All ra should be decimalised.\r\n //Which is dangerous and I suggest pushing the work later\r\n //sxy\r\n\r\n //^ it might just be due to the formula was wrong? XD\r\n //asw\r\n\r\n //^ your version of this function is still chaos lmao\r\n //and since this function needs decimalised anyway I'll rewrite this\r\n //sxy\r\n\r\n // Quadratic formula for growth (uses constant growth for a = 0)\r\n /*const a = Enslaved.isStoringRealTime\r\n ? 0\r\n : Ra.productionPerMemoryChunk * pet.memoryUpgradeCurrentMult * pet.memoryChunksPerSecond * pet.shopMemMultEffect * ((Pelle.isDoomed && Ra.unlocks.boostMemoryGain.isUnlocked) ? 500 : 1);\r\n const b = Ra.productionPerMemoryChunk * pet.memoryUpgradeCurrentMult * pet.memoryChunks * pet.shopMemMultEffect * ((Pelle.isDoomed && Ra.unlocks.boostMemoryGain.isUnlocked) ? 500 : 1);\r\n //I will just leave HU1 code here haha --sxy\r\n /*if(CorruptionUpgrade(1).isBought){switch(Ra.currentCelestial){\r\n case 1: if(this.id=='teresa') memsPerSecond *= 1500;break;\r\n case 2: if(this.id=='effarig') memsPerSecond *= 1500;break;\r\n case 3: if(this.id=='enslaved') memsPerSecond *= 1500;break;\r\n case 4: if(this.id=='v') memsPerSecond *= 1500;break;\r\n case 5: if(this.id=='ra') memsPerSecond *= 1500;break;\r\n case 6: if(this.id=='laitela') memsPerSecond *= 1500;break;\r\n case 7: if(this.id=='pelle') memsPerSecond *= 1500;break;\r\n };}*/\r\n /*const c = -expToGain;\r\n const estimate = a === 0\r\n ? (MendingUpgrade(15).isBought \r\n ? -c / Math.pow(b, 1.5)\r\n : -c / b)\r\n : (MendingUpgrade(15).isBought\r\n // derivation for the formula in latex(paste this into any latex editor and compile it) - asw\r\n // \\int_0^t (at + b)^{1.5} dt + c = 0 \\\\\r\n // \\left[\\frac{2(at + b)^{2.5}}{5a}\\right]_0^t + c = 0 \\\\\r\n // \\frac{2(at + b)^{2.5}}{5a} - \\frac{2b^{2.5}}{5a} + c = 0 \\\\\r\n // 2(at + b)^{2.5} - 2b^{2.5} + 5ac = 0 \\\\\r\n // (at + b)^{2.5} - b^{2.5} + \\frac{5ac}{2} = 0 \\\\\r\n // (at + b)^{2.5} + \\frac{5ac}{2} = b^{2.5} \\\\\r\n // (at + b)^{2.5} = b^{2.5} - \\frac{5ac}{2} \\\\\r\n // at + b = (b^{2.5} - \\frac{5ac}{2})^{0.4} \\\\\r\n // at = (b^{2.5} - \\frac{5ac}{2})^{0.4} - b \\\\\r\n // t = \\frac{(b^{2.5} - \\frac{5ac}{2})^{0.4} - b}{a}\r\n ? (Math.pow(Math.pow(b, 2.5) - 5 * a * c / 2, 0.4) - b) / a\r\n : (Math.sqrt(Math.pow(b, 2) - 2 * a * c) - b) / (a));*/\r\n\r\n\r\n //decimalised rewritten version of this function--sxy\r\n\r\n // full rewrite\r\n // multiplier can be divided from total\r\n // -- wyxkk\r\n\r\n let power = MendingUpgrade(15).isBought ? 1.5 : 1;\r\n\r\n let multiplierInPower = new Decimal(Ra.productionPerMemoryChunk * pet.memoryUpgradeCurrentMult * pet.shopMemMultEffect);\r\n\r\n let multiplierOutPower = new Decimal(1);\r\n if(Pelle.isDoomed && Ra.unlocks.boostMemoryGain.isUnlocked){\r\n multiplierOutPower = multiplierOutPower.times(500);\r\n }\r\n let HUavaliable = false;\r\n if(CorruptionUpgrade(1).isBought){switch(Ra.currentCelestial){\r\n case 1: if(pet.id=='teresa') HUavaliable = true;break;\r\n case 2: if(pet.id=='effarig') HUavaliable = true;break;\r\n case 3: if(pet.id=='enslaved') HUavaliable = true;break;\r\n case 4: if(pet.id=='v') HUavaliable = true;break;\r\n case 5: if(pet.id=='ra') HUavaliable = true;break;\r\n case 6: if(pet.id=='laitela') HUavaliable = true;break;\r\n case 7: if(pet.id=='pelle') HUavaliable = true;break;\r\n };}\r\n if(HUavaliable){\r\n multiplierOutPower = multiplierOutPower.times(1500);\r\n }\r\n\r\n let a = new Decimal(pet.memoryChunksPerSecond);\r\n if(Enslaved.isStoringRealTime) a = new Decimal(0);\r\n let b = new Decimal(pet.memoryChunks);\r\n let c = new Decimal(expToGain).div(multiplierInPower.pow(power)).div(multiplierOutPower);\r\n\r\n // now to solve \\int_0^x (at+b)^power dt = c\r\n let estimateDecimal = new Decimal('2e308');\r\n if(a.eq(0)){\r\n estimateDecimal = c.div(b.pow(power));\r\n } else {\r\n estimateDecimal = c.times(a).times(power+1).plus(b.pow(power+1)).pow(1/(power+1)).minus(b).div(a);\r\n }\r\n\r\n //estimateDecimal = estimateDecimal.div(multiplierOutPower);\r\n //toNumber\r\n let estimate = estimateDecimal.toNumber();\r\n\r\n if (Number.isFinite(estimate)) {\r\n return `in ${TimeSpan.fromSeconds(new Decimal(estimate)).toStringShort()}`;\r\n }\r\n return \"in an exteremely long time\";\r\n },\r\n get totalPetLevel() {\r\n return this.pets.all.map(pet => (pet.isUnlocked ? pet.level : 0)).sum();\r\n },\r\n get levelCap() {\r\n return MendingUpgrade(19).isBought ? 100 : 25;\r\n },\r\n get maxTotalPetLevel() {\r\n return this.levelCap * this.pets.all.length;\r\n },\r\n checkForUnlocks() {\r\n if (!VUnlocks.raUnlock.canBeApplied && !MendingUpgrade(19).isBought) return;\r\n for (const unl of Ra.unlocks.all) {\r\n unl.unlock();\r\n }\r\n\r\n Ra.checkForQuotes();\r\n },\r\n checkForQuotes() {\r\n for (const quote of Ra.quotes.all) {\r\n // Quotes without requirements will be shown in other ways\r\n if (quote.requirement) {\r\n quote.show();\r\n }\r\n }\r\n },\r\n initializeRun() {\r\n clearCelestialRuns();\r\n player.celestials.ra.run = true;\r\n this.quotes.realityEnter.show();\r\n },\r\n toggleMode() {\r\n player.celestials.ra.activeMode = !player.celestials.ra.activeMode;\r\n },\r\n // This gets widely used in lots of places since the relevant upgrade is \"all forms of continuous non-dimension\r\n // production\", which in this case is infinities, eternities, replicanti, dilated time, and time theorem generation.\r\n // It also includes the 1% IP time study, Teresa's 1% EP upgrade, and the charged RM generation upgrade. Note that\r\n // removing the hardcap of 10 may cause runaways.\r\n theoremBoostFactor() {\r\n return Math.min(1000, Math.max(0, Currency.timeTheorems.value.pLog10() - 850) / 500 + 10, Math.max(0, Currency.timeTheorems.value.pLog10() - 350) / 50);\r\n },\r\n get isUnlocked() {\r\n return V.spaceTheorems >= 36;\r\n },\r\n get isRunning() {\r\n return player.celestials.ra.run;\r\n },\r\n get totalCharges() {\r\n return Ra.unlocks.chargedInfinityUpgrades.effectOrDefault(0);\r\n },\r\n get chargesLeft() {\r\n return this.totalCharges - player.celestials.ra.charged.size;\r\n },\r\n get totalBreakCharges() {\r\n return Ra.unlocks.chargedBreakInfinityUpgrades.effectOrDefault(0);\r\n },\r\n get breakChargesLeft(){\r\n return this.totalBreakCharges - player.celestials.ra.breakCharged.size;\r\n },\r\n get canBuyTriad() {\r\n return Ra.unlocks.unlockHardV.canBeApplied;\r\n },\r\n get petWithRemembrance() {\r\n return player.celestials.ra.petWithRemembrance;\r\n },\r\n set petWithRemembrance(name) {\r\n player.celestials.ra.petWithRemembrance = name;\r\n },\r\n updateAlchemyFlow(realityRealTime) {\r\n const perSecond = 1000 / realityRealTime;\r\n for (const resource of AlchemyResources.all) {\r\n resource.ema.addValue((resource.amount - resource.before) * perSecond);\r\n resource.before = resource.amount;\r\n }\r\n },\r\n applyAlchemyReactions(realityRealTime) {\r\n if (!Ra.unlocks.effarigUnlock.canBeApplied) return;\r\n const sortedReactions = AlchemyReactions.all\r\n .compact()\r\n .sort((r1, r2) => r2.priority - r1.priority);\r\n for (const reaction of sortedReactions) {\r\n reaction.combineReagents();\r\n }\r\n this.updateAlchemyFlow(realityRealTime);\r\n },\r\n applyAlchemyReactionsAuto() {\r\n if (!Ra.unlocks.effarigUnlock.canBeApplied) return;\r\n Ra.alchauto += 1\r\n if (Ra.alchauto >= 15) {\r\n Ra.alchauto -= 15\r\n Ra.applyAlchemyReactions(1000)\r\n }\r\n },\r\n get alchemyResourceCap() {\r\n return Ra.unlocks.alchSetToCapAndCapIncrease.isUnlocked ? 25000 + (5 * player.celestials.ra.pets[\"effarig\"].level) + CorruptionUpgrade(14).effectOrDefault(0) : 25000;\r\n },\r\n get momentumValue() {\r\n const hoursFromUnlock = TimeSpan.fromMilliseconds(player.celestials.ra.momentumTime).totalHours;\r\n return Decimal.clampMax(hoursFromUnlock.times(0.005).add(1), AlchemyResource.momentum.effectValue).toNumber();\r\n },\r\n get continuumActive() {\r\n return Ra.unlocks.continuumAffectsIDsAndTDs.isUnlocked && Laitela.continuumActive;\r\n },\r\n get currentCelestial(){ //this returns the current celestials' number. Teresa = 1, etc.\r\n switch(true){\r\n case(Teresa.isRunning):\r\n return 1;\r\n case(Effarig.isRunning):\r\n return 2;\r\n case(Enslaved.isRunning):\r\n return 3;\r\n case(V.isRunning):\r\n return 4;\r\n case(Ra.isRunning):\r\n return 5;\r\n case(Laitela.isRunning):\r\n return 6;\r\n case(Pelle.isDoomed):\r\n return 7;\r\n default:\r\n return 0;\r\n }\r\n },\r\n quotes: Quotes.ra,\r\n symbol: \"\"\r\n};\r\n\r\nexport const GlyphAlteration = {\r\n // Adding a secondary effect to some effects\r\n get additionThreshold() {\r\n return DC.E36;\r\n },\r\n // One-time massive boost of a single effect\r\n get empowermentThreshold() {\r\n return DC.E43;\r\n },\r\n // Scaling boost from sacrifice quantity\r\n get boostingThreshold() {\r\n return DC.E60;\r\n },\r\n getSacrificePower(type) {\r\n if (Pelle.isDisabled(\"alteration\")) return 0;\r\n const sacPower = player.reality.glyphs.sac[type];\r\n if (sacPower === undefined) {\r\n throw new Error(\"Unknown sacrifice type\");\r\n }\r\n return sacPower;\r\n },\r\n get isUnlocked() {\r\n if (Pelle.isDisabled(\"alteration\")) return false;\r\n return Ra.unlocks.alteredGlyphs.canBeApplied;\r\n },\r\n isAdded(type) {\r\n return this.isUnlocked && this.getSacrificePower(type).gte(this.additionThreshold);\r\n },\r\n isEmpowered(type) {\r\n return this.isUnlocked && this.getSacrificePower(type).gte(this.empowermentThreshold);\r\n },\r\n isBoosted(type) {\r\n return this.isUnlocked && this.getSacrificePower(type).gte(this.boostingThreshold);\r\n },\r\n sacrificeBoost(type) {\r\n const capped = Decimal.clampMax(this.getSacrificePower(type), GlyphSacrificeHandler.maxSacrificeForEffects);\r\n return Decimal.log10(capped.div(this.boostingThreshold).clampMin(1)) / 2;\r\n },\r\n baseAdditionColor(isDark = Theme.current().isDark()) {\r\n return isDark ? \"#CCCCCC\" : \"black\";\r\n },\r\n baseEmpowermentColor(isDark = Theme.current().isDark()) {\r\n return isDark ? \"#EEEE30\" : \"#C6C610\";\r\n },\r\n baseBoostColor(isDark = Theme.current().isDark()) {\r\n return isDark ? \"#60DDDD\" : \"#28BDBD\";\r\n },\r\n getAdditionColor(type) {\r\n const isDark = CosmeticGlyphTypes[type].currentColor.bg === \"black\";\r\n return this.isAdded(type) ? this.baseAdditionColor(isDark) : undefined;\r\n },\r\n getEmpowermentColor(type) {\r\n const isDark = CosmeticGlyphTypes[type].currentColor.bg === \"black\";\r\n return this.isEmpowered(type) ? this.baseEmpowermentColor(isDark) : undefined;\r\n },\r\n getBoostColor(type) {\r\n const isDark = CosmeticGlyphTypes[type].currentColor.bg === \"black\";\r\n return this.isBoosted(type) ? this.baseBoostColor(isDark) : undefined;\r\n }\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.TAB_CHANGED, () => {\r\n if (Tab.celestials.ra.isOpen) Ra.quotes.unlock.show();\r\n});\r\n","import { RebuyableMechanicState } from \"../../game-mechanics\";\r\nimport { SetPurchasableMechanicState } from \"../../game-mechanics/set-purchasable\";\r\n\r\nclass RaUpgradeState extends SetPurchasableMechanicState {\r\n get set() {\r\n return player.celestials.ra.upgrades;\r\n }\r\n\r\n get currency() {\r\n return this.config.currency();\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return this.config.implemented && player.celestials.ra.pets.ra.level >= 40;\r\n }\r\n\r\n onPurchased() {\r\n EventHub.dispatch(GAME_EVENT.RA_UPGRADE_BOUGHT);\r\n }\r\n}\r\n\r\nclass RebuyableRaUpgradeState extends RebuyableMechanicState {\r\n get pet() {\r\n return this.config.celestial;\r\n }\r\n\r\n get isCapped() {\r\n return Ra.pets[this.pet].isCapped;\r\n }\r\n\r\n get currency() {\r\n return this.config.currency;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.celestials.ra.rebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.celestials.ra.rebuyables[this.id] = value;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return this.config.implemented && player.celestials.ra.pets.ra.level >= 40;\r\n }\r\n}\r\n\r\nexport const RaUpgrade = mapGameDataToObject(\r\n GameDatabase.celestials.raUpgrades,\r\n config => (config.rebuyable\r\n ? new RebuyableRaUpgradeState(config)\r\n : new RaUpgradeState(config))\r\n);\r\n\r\nRaUpgrade.rebuyables = RaUpgrade.all.filter(u => u.isRebuyable);\r\nRaUpgrade.singles = RaUpgrade.all.filter(u => !u.isRebuyable);","import { GameMechanicState } from \"../../game-mechanics\";\r\nimport { corruptionPenalties } from \"../../secret-formula/mending/corruption\";\r\n\r\n/**\r\n * @abstract\r\n */\r\nclass AlchemyResourceState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.ema = new ExponentialMovingAverage(0.01, 10, 100, 0.01);\r\n this._before = 0;\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get symbol() {\r\n return this.config.symbol;\r\n }\r\n\r\n get description() {\r\n return this.config.description;\r\n }\r\n\r\n get isBaseResource() {\r\n return this.config.isBaseResource === true;\r\n }\r\n\r\n get data() {\r\n return player.celestials.ra.alchemy[this.id];\r\n }\r\n\r\n get amount() {\r\n return this.data.amount;\r\n }\r\n\r\n set amount(value) {\r\n this.data.amount = value;\r\n }\r\n\r\n get before() {\r\n return this._before;\r\n }\r\n\r\n set before(value) {\r\n this._before = value;\r\n }\r\n\r\n get flow() {\r\n return this.ema.average;\r\n }\r\n\r\n get fillFraction() {\r\n return Math.clamp(this.amount / this.cap, 0, 1);\r\n }\r\n\r\n get unlockedWith() {\r\n return Ra.pets.effarig;\r\n }\r\n\r\n get unlockedAt() {\r\n return this.config.unlockedAt;\r\n }\r\n\r\n get isUnlocked() {\r\n return this.unlockedWith.level >= this.unlockedAt;\r\n }\r\n\r\n get lockText() {\r\n return `${this.unlockedWith.name} Level ${formatInt(this.unlockedAt)}`;\r\n }\r\n\r\n get isCustomEffect() {\r\n return true;\r\n }\r\n\r\n get effectValue() {\r\n // Disable when Glyph corruption lvl7--sxy\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.compGlyphs.hiddenSeven[player.mending.corruption[4]]) {\r\n switch(this.config.id){\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 6:\r\n case 7:\r\n case 10:\r\n case 12:\r\n return 1;\r\n case 5:\r\n return 1.2;\r\n case 8:\r\n return Decimal.pow10(9e99);\r\n case 11:\r\n return 0.3;\r\n }\r\n return 0\r\n };\r\n // Disable Exponential alchemy effect in V reality.\r\n if ((V.isRunning||V.isSuperRunning) && this.config.id === 14) return 0;\r\n return this.config.effect(Pelle.isDisabled(\"alchemy\") ? 0 : this.amount);\r\n }\r\n\r\n get reaction() {\r\n return AlchemyReactions.all[this.id];\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get cap() { throw new NotImplementedError(); }\r\n\r\n get capped() {\r\n return this.amount >= this.cap;\r\n }\r\n}\r\n\r\nclass BasicAlchemyResourceState extends AlchemyResourceState {\r\n constructor(config) {\r\n super(config);\r\n // The names are capitalized, so we need to convert them to lower case\r\n // in order to access highestRefinementValue values which are not capitalized.\r\n this._name = config.name.toLowerCase();\r\n }\r\n\r\n get highestRefinementValue() {\r\n return player.celestials.ra.highestRefinementValue[this._name];\r\n }\r\n\r\n set highestRefinementValue(value) {\r\n player.celestials.ra.highestRefinementValue[this._name] = Math.max(this.highestRefinementValue, value);\r\n }\r\n\r\n get cap() {\r\n return Math.clampMax(Ra.alchemyResourceCap, this.highestRefinementValue);\r\n }\r\n}\r\n\r\nclass AdvancedAlchemyResourceState extends AlchemyResourceState {\r\n get cap() {\r\n const reagentCaps = this.reaction.reagents.map(x => x.resource.cap);\r\n return Math.min(...reagentCaps);\r\n }\r\n}\r\n\r\nclass AlchemyReaction {\r\n constructor(product, reagents) {\r\n this._product = product;\r\n this._reagents = reagents;\r\n }\r\n\r\n get product() {\r\n return this._product;\r\n }\r\n\r\n get reagents() {\r\n return this._reagents;\r\n }\r\n\r\n // Returns a percentage of a reaction that can be done, accounting for limiting reagents. This normally caps at\r\n // 100%, but the reaction will be forced to occur at higher than 100% if there is significantly more reagent than\r\n // product. This allows resources to be created quickly when its reaction is initially turned on with saved reagents.\r\n get reactionYield() {\r\n if (!this._product.isUnlocked || this._reagents.some(r => !r.resource.isUnlocked)) return 0;\r\n const forcingFactor = (this._reagents\r\n .map(r => r.resource.amount)\r\n .min() - this._product.amount) / 100;\r\n const totalYield = this._reagents\r\n .map(r => r.resource.amount / r.cost)\r\n .min();\r\n return Math.min(totalYield, Math.max(forcingFactor, 1));\r\n }\r\n\r\n // Check each reagent for if a full reaction would drop it below the product amount. If so, reduce reaction yield\r\n get actualYield() {\r\n // Assume a full reaction to see what the maximum possible product is\r\n const maxFromReaction = this.baseProduction * this.reactionYield * this.reactionEfficiency;\r\n const prodBefore = this._product.amount;\r\n const prodAfter = prodBefore + maxFromReaction;\r\n let cappedYield = this.reactionYield;\r\n for (const reagent of this._reagents) {\r\n const reagentBefore = reagent.resource.amount;\r\n const reagentAfter = reagent.resource.amount - this.reactionYield * reagent.cost;\r\n const diffBefore = reagentBefore - prodBefore;\r\n const diffAfter = reagentAfter - prodAfter;\r\n cappedYield = Math.min(cappedYield, this.reactionYield * diffBefore / (diffBefore - diffAfter));\r\n }\r\n return Math.clampMin(cappedYield, 0);\r\n }\r\n\r\n // Assign reactions priority in descending order based on the largest reagent total after the reaction. The logic\r\n // is that if we assume that all the reactions are cap-limited, then by assigning priority in this way, reactions\r\n // get applied so that earlier reactions are less likely to reduce the yield of later reactions.\r\n get priority() {\r\n let maxReagent = Glyphs.levelCap;\r\n for (const reagent of this._reagents) {\r\n const afterReaction = reagent.resource.amount - reagent.cost * this.actualYield;\r\n maxReagent = Math.min(maxReagent, afterReaction);\r\n }\r\n return maxReagent;\r\n }\r\n\r\n get isActive() {\r\n return this._product.data.reaction;\r\n }\r\n\r\n set isActive(value) {\r\n this._product.data.reaction = value;\r\n }\r\n\r\n get isReality() {\r\n return this._product.id === ALCHEMY_RESOURCE.REALITY;\r\n }\r\n\r\n // Reactions are per-10 products because that avoids decimals in the UI for reagents, but efficiency losses can make\r\n // products have decimal coefficients.\r\n get baseProduction() {\r\n return this.isReality ? 1 : 5;\r\n }\r\n\r\n get reactionEfficiency() {\r\n return this.isReality ? 1 : AlchemyResource.synergism.effectValue;\r\n }\r\n\r\n get reactionProduction() {\r\n return this.baseProduction * this.reactionEfficiency;\r\n }\r\n\r\n // Cap products at the minimum amount of all reagents before the reaction occurs, eg. 200Ξ and 350Ψ will not bring\r\n // ω above 200. In fact, since some Ξ will be used during the reaction, the actual cap will be a bit lower.\r\n combineReagents() {\r\n if (!this.isActive || this.reactionYield === 0) return;\r\n const unpredictabilityEffect = AlchemyResource.unpredictability.effectValue;\r\n const times = 1 + poissonDistribution(unpredictabilityEffect / (1 - unpredictabilityEffect));\r\n const cap = this._product.cap;\r\n for (let i = 0; i < times; i++) {\r\n const reactionYield = this.actualYield;\r\n for (const reagent of this._reagents) {\r\n reagent.resource.amount -= reactionYield * reagent.cost;\r\n }\r\n // The minimum reaction yield is 0.05 so the cap is actually reached\r\n const effectiveYield = Math.clampMin(reactionYield * this.reactionProduction, 0.05);\r\n this._product.amount = Math.clampMax(this._product.amount + effectiveYield, cap);\r\n }\r\n }\r\n}\r\n\r\nexport const AlchemyResource = mapGameDataToObject(\r\n GameDatabase.celestials.alchemy.resources,\r\n config => (config.isBaseResource\r\n ? new BasicAlchemyResourceState(config)\r\n : new AdvancedAlchemyResourceState(config))\r\n);\r\n\r\nexport const AlchemyResources = {\r\n all: AlchemyResource.all,\r\n base: AlchemyResource.all.filter(r => r.isBaseResource)\r\n};\r\n\r\nexport const AlchemyReactions = (function() {\r\n // For convenience and readability, stuff is named differently in GameDatabase\r\n function mapReagents(resource) {\r\n return resource.config.reagents\r\n .map(r => ({\r\n resource: AlchemyResources.all.find(x => x.id === r.resource),\r\n cost: r.amount\r\n }));\r\n }\r\n return {\r\n all: AlchemyResources.all\r\n .map(r => (r.isBaseResource ? null : new AlchemyReaction(r, mapReagents(r))))\r\n };\r\n}());\r\n","import { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\n\r\nexport class DimensionState {\r\n constructor(getData, tier) {\r\n this._tier = tier;\r\n this._getData = getData;\r\n const DISPLAY_NAMES = [null, \"First\", \"Second\", \"Third\", \"Fourth\", \"Fifth\", \"Sixth\", \"Seventh\", \"Eighth\"];\r\n this._displayName = DISPLAY_NAMES[tier];\r\n const SHORT_DISPLAY_NAMES = [null, \"1st\", \"2nd\", \"3rd\", \"4th\", \"5th\", \"6th\", \"7th\", \"8th\"];\r\n this._shortDisplayName = SHORT_DISPLAY_NAMES[tier];\r\n }\r\n\r\n get tier() { return this._tier; }\r\n\r\n get displayName() { return this._displayName; }\r\n get shortDisplayName() { return this._shortDisplayName; }\r\n\r\n get data() { return this._getData()[this.tier - 1]; }\r\n\r\n /** @returns {Decimal} */\r\n get amount() { return this.data.amount; }\r\n /** @param {Decimal} value */\r\n set amount(value) { this.data.amount = value; }\r\n\r\n /** @returns {number} */\r\n get bought() { return this.data.bought; }\r\n /** @param {number} value */\r\n set bought(value) { this.data.bought = value; }\r\n\r\n /** @abstract */\r\n get productionPerSecond() { throw new NotImplementedError(); }\r\n\r\n get productionPerRealSecond() {\r\n return this.productionPerSecond.times(getGameSpeedupForDisplay());\r\n }\r\n\r\n productionForDiff(diff) {\r\n return this.productionPerSecond.times(new Decimal(diff).div(1000)).pow(player.mending.corruptionChallenge.corruptedMend ? Ra.unlocks.DimLimitCorruptionImprovementPelle.isUnlocked ? corruptionPenalties.dimLimits.postNerf[[player.mending.corruption[1]]] : corruptionPenalties.dimLimits.preNerf[[player.mending.corruption[1]]] : 1);\r\n }\r\n\r\n produceCurrency(currency, diff) {\r\n currency.add(this.productionForDiff(diff));\r\n }\r\n\r\n produceDimensions(dimension, diff) {\r\n dimension.amount = dimension.amount.plus(this.productionForDiff(diff));\r\n }\r\n\r\n static get dimensionCount() { return 8; }\r\n\r\n static createAccessor() {\r\n const index = Array.range(1, this.dimensionCount).map(tier => new this(tier));\r\n index.unshift(null);\r\n const accessor = tier => index[tier];\r\n accessor.index = index;\r\n return accessor;\r\n }\r\n}\r\n","import { DC } from \"../../constants\";\r\nimport { CorruptionUpgrade } from \"../../corruption-upgrades\";\r\nimport { DimensionState } from \"../../dimensions/dimension\";\r\nimport { corruptionPenalties } from \"../../secret-formula/mending/corruption\";\r\nimport { TimeStudy } from \"../../time-studies/normal-time-study\";\r\n\r\n/**\r\n * Constants for easily adjusting values\r\n */\r\n\r\nconst INTERVAL_COST_MULT = 5;\r\nconst POWER_DM_COST_MULT = 10;\r\nconst POWER_DE_COST_MULTS = [1.65, 1.6, 1.55, 1.5, 1.45, 1.4, 1.35, 1.3];\r\n\r\nconst INTERVAL_START_COST = 10;\r\nconst POWER_DM_START_COST = 10;\r\nconst POWER_DE_START_COST = 10;\r\n\r\nconst INTERVAL_PER_UPGRADE = 0.92;\r\n\r\n// No constant for interval since it's tied to a milestone\r\nexport const POWER_DM_PER_ASCENSION = 500;\r\nexport const POWER_DE_PER_ASCENSION = 500;\r\n\r\nconst COST_MULT_PER_TIER = 1200;\r\n\r\nexport class DarkMatterDimensionState extends DimensionState {\r\n constructor(tier) {\r\n super(() => player.celestials.laitela.dimensions, tier);\r\n }\r\n\r\n productionForDiff(diff) {\r\n return this.productionPerSecond * diff / 1000;\r\n }\r\n\r\n // Does not include DM, only DE per second\r\n get productionPerSecond() { return this.powerDE * 1000 / this.interval; }\r\n\r\n get unlockUpgrade() {\r\n // The 15th Imaginary Upgrade unlocked Laitela and the 1st DMD\r\n return ImaginaryUpgrade(this.tier + 14);\r\n }\r\n\r\n get isUnlocked() {\r\n if (this.tier < 5) {\r\n return this.unlockUpgrade.isBought || Ra.pets.laitela.level >= 25;\r\n }\r\n return ((Ra.pets.laitela.level / 25) >= (this.tier - 4))\r\n}\r\n\r\n get ascensions() {\r\n return this.data.ascensionCount;\r\n }\r\n\r\n get intervalPurchaseCap() {\r\n return 10;\r\n }\r\n\r\n get rawInterval() {\r\n const perUpgrade = INTERVAL_PER_UPGRADE;\r\n const tierFactor = Math.pow(4, this.tier - 1);\r\n return 1000 * tierFactor * Math.pow(perUpgrade, this.data.intervalUpgrades) *\r\n Math.pow(SingularityMilestone.ascensionIntervalScaling.effectOrDefault(1200), this.ascensions) *\r\n SingularityMilestone.darkDimensionIntervalReduction.effectOrDefault(1);\r\n }\r\n\r\n get interval() {\r\n return Math.clampMin(this.intervalPurchaseCap, this.rawInterval);\r\n }\r\n\r\n get commonDarkMult() {\r\n return DC.D1.timesEffectsOf(\r\n SingularityMilestone.darkFromTesseracts,\r\n SingularityMilestone.darkFromGlyphLevel,\r\n SingularityMilestone.darkFromTheorems,\r\n SingularityMilestone.darkFromDM4,\r\n SingularityMilestone.darkFromGamespeed,\r\n SingularityMilestone.darkFromDilatedTime\r\n );\r\n }\r\n\r\n get powerDMPerAscension() {\r\n return POWER_DM_PER_ASCENSION + SingularityMilestone.improvedAscensionDM.effectOrDefault(0);\r\n }\r\n\r\n get powerDM() {\r\n if (!this.isUnlocked) return new Decimal(0);\r\n let primeAnswer= new Decimal(1 + 2 * Math.pow(1.15, this.data.powerDMUpgrades))\r\n .times(Laitela.realityReward)\r\n .times(Laitela.darkMatterMult)\r\n .times(this.commonDarkMult)\r\n .times(Math.pow(this.powerDMPerAscension, this.ascensions))\r\n .timesEffectsOf(\r\n SingularityMilestone.darkMatterMult,\r\n SingularityMilestone.multFromInfinitied,\r\n TimeStudy(308))\r\n .dividedBy(Math.pow(1e4, Math.pow(this.tier - 1, 0.5)));\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n primeAnswer = primeAnswer.pow(corruptionPenalties.repSing.dm[player.mending.corruption[8]]);\r\n }*/\r\n return primeAnswer;\r\n }\r\n\r\n get powerDE() {\r\n if (!this.isUnlocked || Pelle.isDoomed) return 0;\r\n const tierFactor = Math.pow(15, this.tier - 1);\r\n const destabilizeBoost = Laitela.isFullyDestabilized ? 8 : 1;\r\n const MMBoostDE = MendingMilestone.one.isReached ? 50 : 1;\r\n const lai2 = Ra.unlocks.annihilationDarkEnergyBoost.isUnlocked ? Math.min(1, Math.pow(Laitela.darkMatterMult, 0.5)) : 1;\r\n return new Decimal(((1 + this.data.powerDEUpgrades * 0.1) *\r\n Math.pow(1.005, this.data.powerDEUpgrades)) * tierFactor / 1000)\r\n .times(this.commonDarkMult)\r\n .times(Math.pow(POWER_DE_PER_ASCENSION, this.ascensions))\r\n .timesEffectsOf(\r\n SingularityMilestone.darkEnergyMult,\r\n SingularityMilestone.realityDEMultiplier,\r\n SingularityMilestone.multFromInfinitied,\r\n TimeStudy(308),\r\n ).toNumber() * destabilizeBoost * MMBoostDE * lai2;\r\n }\r\n\r\n get intervalAfterAscension() {\r\n const purchases = Decimal.affordGeometricSeries(Currency.darkMatter.value, this.rawIntervalCost,\r\n this.intervalCostIncrease, 0).toNumber();\r\n return Math.clampMin(this.intervalPurchaseCap, SingularityMilestone.ascensionIntervalScaling.effectOrDefault(1200) *\r\n this.rawInterval * Math.pow(INTERVAL_PER_UPGRADE, purchases));\r\n }\r\n\r\n get adjustedStartingCost() {\r\n const tiers = [null, 0, 2, 5, 13, 34, 89, 233, 610];\r\n return new Decimal(10).times(Decimal.pow(COST_MULT_PER_TIER, tiers[this.tier]).times(SingularityMilestone.darkDimensionCostReduction.effectOrDefault(1)));\r\n }\r\n\r\n get rawIntervalCost() {\r\n return Decimal.pow(this.intervalCostIncrease, this.data.intervalUpgrades)\r\n .times(this.adjustedStartingCost).times(INTERVAL_START_COST);\r\n }\r\n\r\n get intervalCost() {\r\n return this.rawIntervalCost.floor();\r\n }\r\n\r\n get intervalCostIncrease() {\r\n return Math.pow(INTERVAL_COST_MULT, SingularityMilestone.intervalCostScalingReduction.effectOrDefault(1));\r\n }\r\n\r\n get rawPowerDMCost() {\r\n return Decimal.pow(this.powerDMCostIncrease, this.data.powerDMUpgrades)\r\n .times(this.adjustedStartingCost).times(POWER_DM_START_COST);\r\n }\r\n\r\n get powerDMCost() {\r\n return this.rawPowerDMCost.floor();\r\n }\r\n\r\n get powerDMCostIncrease() {\r\n return POWER_DM_COST_MULT;\r\n }\r\n\r\n get rawPowerDECost() {\r\n return Decimal.pow(this.powerDECostIncrease, this.data.powerDEUpgrades)\r\n .times(this.adjustedStartingCost).times(POWER_DE_START_COST);\r\n }\r\n\r\n get powerDECost() {\r\n return this.rawPowerDECost.floor();\r\n }\r\n\r\n get powerDECostIncrease() {\r\n return POWER_DE_COST_MULTS[this.tier - 1];\r\n }\r\n\r\n get timeSinceLastUpdate() {\r\n return this.data.timeSinceLastUpdate;\r\n }\r\n\r\n set timeSinceLastUpdate(ms) {\r\n this.data.timeSinceLastUpdate = ms;\r\n }\r\n\r\n get canBuyInterval() {\r\n return Currency.darkMatter.gte(this.intervalCost) && this.interval > this.intervalPurchaseCap;\r\n }\r\n\r\n get canBuyPowerDM() {\r\n return Currency.darkMatter.gte(this.powerDMCost);\r\n }\r\n\r\n get canBuyPowerDE() {\r\n return Currency.darkMatter.gte(this.powerDECost);\r\n }\r\n\r\n get maxIntervalPurchases() {\r\n return Math.ceil(Math.log(this.intervalPurchaseCap / this.interval) / Math.log(INTERVAL_PER_UPGRADE));\r\n }\r\n\r\n buyManyInterval(x) {\r\n if (x > this.maxIntervalPurchases) return false;\r\n const cost = this.rawIntervalCost.times(\r\n Decimal.pow(this.intervalCostIncrease, x).minus(1)).div(this.intervalCostIncrease - 1).floor();\r\n if (!Currency.darkMatter.purchase(cost)) return false;\r\n this.data.intervalUpgrades += x;\r\n return true;\r\n }\r\n\r\n buyManyPowerDM(x) {\r\n const cost = this.rawPowerDMCost.times(\r\n Decimal.pow(this.powerDMCostIncrease, x).minus(1)).div(this.powerDMCostIncrease - 1).floor();\r\n if (!Currency.darkMatter.purchase(cost)) return false;\r\n this.data.powerDMUpgrades += x;\r\n return true;\r\n }\r\n\r\n buyManyPowerDE(x) {\r\n const cost = this.rawPowerDECost.times(\r\n Decimal.pow(this.powerDECostIncrease, x).minus(1)).div(this.powerDECostIncrease - 1).floor();\r\n if (!Currency.darkMatter.purchase(cost)) return false;\r\n this.data.powerDEUpgrades += x;\r\n return true;\r\n }\r\n\r\n buyInterval() {\r\n return this.buyManyInterval(1);\r\n }\r\n\r\n buyPowerDM() {\r\n return this.buyManyPowerDM(1);\r\n }\r\n\r\n buyPowerDE() {\r\n return this.buyManyPowerDE(1);\r\n }\r\n\r\n ascend() {\r\n if (this.interval > this.intervalPurchaseCap) return;\r\n this.data.ascensionCount++;\r\n\r\n // Immediately buy as many interval upgrades as possible\r\n while (this.buyInterval());\r\n }\r\n\r\n static get dimensionCount() { return 8; }\r\n\r\n reset() {\r\n this.data.amount = DC.D1;\r\n this.data.intervalUpgrades = 0;\r\n this.data.powerDMUpgrades = 0;\r\n this.data.powerDEUpgrades = 0;\r\n this.data.timeSinceLastUpdate = 0;\r\n this.data.ascensionCount = 0;\r\n }\r\n}\r\n\r\n/**\r\n * @function\r\n * @param {number} tier\r\n * @return {DarkMatterDimensionState}\r\n */\r\nexport const DarkMatterDimension = DarkMatterDimensionState.createAccessor();\r\n\r\nexport const DarkMatterDimensions = {\r\n /**\r\n * @type {DarkMatterDimension[]}\r\n */\r\n all: DarkMatterDimension.index.compact(),\r\n\r\n tick(realDiff) {\r\n if (!Laitela.isUnlocked) return;\r\n for (let tier = 8; tier >= 1; tier--) {\r\n const dim = DarkMatterDimension(tier);\r\n if (!dim.isUnlocked) continue;\r\n dim.timeSinceLastUpdate += realDiff;\r\n if (dim.interval < dim.timeSinceLastUpdate) {\r\n const ticks = Math.floor(dim.timeSinceLastUpdate / dim.interval);\r\n let productionDM = dim.amount.times(ticks).times(dim.powerDM);\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n productionDM = productionDM.pow(corruptionPenalties.repSing.dm[player.mending.corruption[8]]);\r\n }\r\n if (tier === 1) {\r\n Currency.darkMatter.add(productionDM);\r\n } else {\r\n DarkMatterDimension(tier - 1).amount = DarkMatterDimension(tier - 1).amount.plus(productionDM);\r\n }\r\n Currency.darkEnergy.add(ticks * dim.powerDE);\r\n dim.timeSinceLastUpdate -= dim.interval * ticks;\r\n }\r\n }\r\n if (SingularityMilestone.dim4Generation.canBeApplied && Laitela.annihilationUnlocked) {\r\n DarkMatterDimension(4).amount = DarkMatterDimension(4).amount\r\n .plus(SingularityMilestone.dim4Generation.effectValue * realDiff / 1000);\r\n }\r\n if(EternityChallenge(7).completions >= 1 && Ra.unlocks.improvedECRewards.isUnlocked){ EternityChallenge(7).vReward.applyEffect(production => {\r\n TimeDimension(8).amount = TimeDimension(8).amount.plus(production.times(new Decimal(Enslaved.nextTickDiff).div(1000)));\r\n })}\r\n if(CorruptionUpgrade(15).isBought&&DarkMatterDimension(8).isUnlocked) DarkMatterDimension(8).amount=DarkMatterDimension(8).amount.plus(CorruptionUpgrade(15).effectValue*realDiff/1000)\r\n },\r\n\r\n reset() {\r\n for (const dimension of DarkMatterDimensions.all) {\r\n dimension.reset();\r\n }\r\n Currency.darkMatter.reset();\r\n },\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { MendingUpgrade } from \"../../mending-upgrades\";\r\nimport { Quotes } from \"../quotes\";\r\n\r\nimport { DarkMatterDimensions } from \"./dark-matter-dimension\";\r\n\r\nexport const Laitela = {\r\n displayName: \"Lai'tela\",\r\n possessiveName: \"Lai'tela's\",\r\n get celestial() {\r\n return player.celestials.laitela;\r\n },\r\n get isUnlocked() {\r\n return ImaginaryUpgrade(15).isBought;\r\n },\r\n initializeRun() {\r\n clearCelestialRuns();\r\n this.celestial.run = true;\r\n },\r\n get isRunning() {\r\n return this.celestial.run;\r\n },\r\n get difficultyTier() {\r\n return player.celestials.laitela.difficultyTier;\r\n },\r\n set difficultyTier(tier) {\r\n player.celestials.laitela.difficultyTier = tier;\r\n },\r\n get maxAllowedDimension() {\r\n return 8 - this.difficultyTier;\r\n },\r\n get isFullyDestabilized() {\r\n return Laitela.maxAllowedDimension === 0;\r\n },\r\n get continuumUnlocked() {\r\n return ImaginaryUpgrade(15).isBought && !Pelle.isDisabled(\"continuum\");\r\n },\r\n get continuumActive() {\r\n return this.continuumUnlocked && !player.auto.disableContinuum && !Pelle.isDisabled(\"continuum\");\r\n },\r\n setContinuum(x) {\r\n player.auto.disableContinuum = !x;\r\n // If continuum is now not disabled (i.e. is enabled) we update the relevant requirement check.\r\n if (!player.auto.disableContinuum) {\r\n player.requirementChecks.reality.noContinuum = false;\r\n }\r\n },\r\n get matterExtraPurchaseFactor() {\r\n let x = BreakInfinityUpgrade.autobuyerSpeed.chargedEffect.isEffectActive ? Math.max((Ra.pets.teresa.level + Ra.pets.laitela.level) / 125, 1) : 1;\r\n let y = ((1 + 0.5 * Math.pow(Decimal.pLog10(Currency.darkMatter.max) / 50, 0.4) *\r\n (1 + SingularityMilestone.continuumMult.effectOrDefault(0))) * (MendingUpgrade(18).isBought ? 1.5 : 1)) * (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(6).completions >= 1 && !Pelle.isDoomed ? EternityChallenge(6).vReward.effectValue : 1)+ x;\r\n if(Pelle.isDoomed) y = y ** 0.01;\r\n return y;\r\n },\r\n get realityReward() {\r\n return Math.clampMin(Math.pow(100, this.difficultyTier) *\r\n Math.pow(360 / player.celestials.laitela.fastestCompletion, 2), 1);\r\n },\r\n // Note that entropy goes from 0 to 1, with 1 being completion\r\n get entropyGainPerSecond() {\r\n return Math.clamp(Math.pow(Currency.antimatter.value.add(1).log10() / 1e11, 2), 0, 100) / 200;\r\n },\r\n get darkMatterMultGain() {\r\n return Decimal.pow(Currency.darkMatter.value.dividedBy(this.annihilationDMRequirement)\r\n .plus(1).log10(), 1.5).toNumber() * ImaginaryUpgrade(21).effectOrDefault(1);\r\n },\r\n get darkMatterMult() {\r\n return this.celestial.darkMatterMult;\r\n },\r\n get darkMatterMultRatio() {\r\n return (this.celestial.darkMatterMult + this.darkMatterMultGain) / this.celestial.darkMatterMult;\r\n },\r\n get annihilationUnlocked() {\r\n return ImaginaryUpgrade(19).isBought;\r\n },\r\n get annihilationDMRequirement() {\r\n return 1e60;\r\n },\r\n get canAnnihilate() {\r\n return Laitela.annihilationUnlocked && Currency.darkMatter.gte(this.annihilationDMRequirement);\r\n },\r\n annihilate(force) {\r\n if (!force && !this.canAnnihilate) return false;\r\n this.celestial.darkMatterMult += this.darkMatterMultGain * (player.celestials.ra.permanentMemories.lai65 ? 500 : 1);\r\n DarkMatterDimensions.reset();\r\n Laitela.quotes.annihilation.show();\r\n Achievement(176).unlock();\r\n return true;\r\n },\r\n // Greedily buys the cheapest available upgrade until none are affordable\r\n maxAllDMDimensions(maxTier) {\r\n // Note that tier is 1-indexed\r\n const unlockedDimensions = DarkMatterDimensions.all\r\n .filter(d => d.isUnlocked && d.tier <= maxTier);\r\n const upgradeInfo = unlockedDimensions\r\n .map(d => [\r\n [d.rawIntervalCost, d.intervalCostIncrease, d.maxIntervalPurchases, x => d.buyManyInterval(x)],\r\n [d.rawPowerDMCost, d.powerDMCostIncrease, Infinity, x => d.buyManyPowerDM(x)],\r\n [d.rawPowerDECost, d.powerDECostIncrease, Infinity, x => d.buyManyPowerDE(x)]])\r\n .flat(1);\r\n const buy = function(upgrade, purchases) {\r\n upgrade[3](purchases);\r\n upgrade[0] = upgrade[0].times(Decimal.pow(upgrade[1], purchases));\r\n upgrade[2] -= purchases;\r\n };\r\n // Buy everything costing less than 0.02 of initial matter.\r\n const darkMatter = Currency.darkMatter.value;\r\n for (const upgrade of upgradeInfo) {\r\n const purchases = Math.clamp(Math.floor(darkMatter.times(0.02).div(upgrade[0]).log(upgrade[1])), 0, upgrade[2]);\r\n buy(upgrade, purchases);\r\n }\r\n while (upgradeInfo.some(upgrade => upgrade[0].lte(darkMatter) && upgrade[2] > 0)) {\r\n const cheapestUpgrade = upgradeInfo.filter(upgrade => upgrade[2] > 0).sort((a, b) => a[0].minus(b[0]).sign())[0];\r\n buy(cheapestUpgrade, 1);\r\n }\r\n },\r\n reset() {\r\n this.annihilate(true);\r\n this.celestial.darkMatterMult = 1;\r\n Currency.darkMatter.max = DC.D1;\r\n Currency.darkMatter.reset();\r\n Currency.singularities.reset();\r\n this.celestial.fastestCompletion = 3600;\r\n this.celestial.difficultyTier = 0;\r\n this.celestial.singularityCapIncreases = 0;\r\n },\r\n quotes: Quotes.laitela,\r\n symbol: \"ᛝ\"\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.TAB_CHANGED, () => {\r\n if (Tab.celestials.laitela.isOpen) Laitela.quotes.unlock.show();\r\n});\r\n","import { GameMechanicState } from \"../../game-mechanics\";\r\n\r\nimport { deepmergeAll } from \"@/utility/deepmerge\";\r\nimport { corruptionPenalties } from \"../../secret-formula/mending/corruption\";\r\n\r\nclass SingularityMilestoneState extends GameMechanicState {\r\n constructor(config) {\r\n const effect = config.effect;\r\n const configCopy = deepmergeAll([{}, config]);\r\n configCopy.effect = () => effect(this.completions);\r\n super(configCopy);\r\n this._rawEffect = effect;\r\n }\r\n\r\n get start() {\r\n return this.config.start;\r\n }\r\n\r\n get repeat() {\r\n return this.config.repeat;\r\n }\r\n\r\n get limit() {\r\n return this.config.limit;\r\n }\r\n\r\n get isUnique() {\r\n return this.repeat === 0;\r\n }\r\n\r\n get isUnlocked() {\r\n return Currency.singularities.gte(this.start);\r\n }\r\n\r\n get increaseThreshold() {\r\n return this.config.increaseThreshold;\r\n }\r\n\r\n nerfCompletions(completions) {\r\n const softcap = this.increaseThreshold;\r\n if (!softcap || (completions < softcap)) return completions;\r\n return softcap + (completions - softcap) / 3;\r\n }\r\n\r\n unnerfCompletions(completions) {\r\n const softcap = this.increaseThreshold;\r\n if (!softcap || (completions < softcap)) return completions;\r\n return softcap + (completions - softcap) * 3;\r\n }\r\n\r\n get previousGoal() {\r\n if (this.isUnique) return 1;\r\n if (!this.isUnlocked) return 0;\r\n return this.start * Math.pow(this.repeat, this.unnerfCompletions(this.completions) - 1);\r\n }\r\n\r\n get nextGoal() {\r\n if (this.isUnique) return this.start;\r\n return this.start * Math.pow(this.repeat, this.unnerfCompletions(this.completions + 1) - 1);\r\n }\r\n\r\n get rawCompletions() {\r\n if (this.isUnique) return this.isUnlocked ? 1 : 0;\r\n if (!this.isUnlocked) return 0;\r\n return 1 + (Math.log(Currency.singularities.value) - Math.log(this.start)) / Math.log(this.repeat);\r\n }\r\n\r\n get completions() {\r\n return Math.min(Math.floor(this.nerfCompletions(this.rawCompletions)), this.limit);\r\n }\r\n\r\n get remainingSingularities() {\r\n return this.nextGoal - Currency.singularities.value;\r\n }\r\n\r\n get progressToNext() {\r\n const prog = (Currency.singularities.value - this.previousGoal) / this.nextGoal;\r\n return formatPercents(Math.clampMax(prog, 1));\r\n }\r\n\r\n get isMaxed() {\r\n return (this.isUnique && this.isUnlocked) || (this.completions >= this.limit);\r\n }\r\n\r\n get effectDisplay() {\r\n if (Number.isFinite(this.effectValue)) return this.config.effectFormat(this.effectValue);\r\n return \"N/A\";\r\n }\r\n\r\n get nextEffectDisplay() {\r\n return this.config.effectFormat(this._rawEffect(this.completions + 1));\r\n }\r\n\r\n get description() {\r\n return this.config.description;\r\n }\r\n\r\n get canBeApplied() {\r\n return this.isUnlocked && !Pelle.isDisabled(\"singularity\");\r\n }\r\n}\r\n\r\nexport const SingularityMilestone = mapGameDataToObject(\r\n GameDatabase.celestials.singularityMilestones,\r\n config => new SingularityMilestoneState(config)\r\n);\r\n\r\nexport const SingularityMilestones = {\r\n all: SingularityMilestone.all,\r\n lastNotified: player.celestials.laitela.lastCheckedMilestones,\r\n\r\n get sorted() {\r\n return this.all.sort((a, b) => a.remainingSingularities - b.remainingSingularities);\r\n },\r\n\r\n sortedForCompletions(moveNewToTop) {\r\n const options = player.celestials.laitela.singularitySorting;\r\n\r\n // Sorting functions for singularity milestones, values are generally around 0 to 2ish. Should generally attempt\r\n // to return unique values for all milestones for the sake of stable sorting\r\n let sortFn;\r\n switch (options.sortResource) {\r\n case SINGULARITY_MILESTONE_SORT.SINGULARITIES_TO_NEXT:\r\n sortFn = m => {\r\n // If it's maxed, we order based on the final goal value - higher goals are sorted later\r\n if (m.isMaxed) return 1 + Math.log10(m.isUnique ? m.nextGoal : m.previousGoal) / 1000;\r\n return Math.log10(m.remainingSingularities) / 100;\r\n };\r\n break;\r\n case SINGULARITY_MILESTONE_SORT.CURRENT_COMPLETIONS:\r\n // Also counts partial completion on the current step\r\n sortFn = m => {\r\n // For never-completed repeatable milestones, this is zero and will cause NaN bugs if we don't set it to 1\r\n const prev = Math.clampMin(m.previousGoal, 1);\r\n const part = Math.clamp(Math.log(Currency.singularities.value / prev) / Math.log(m.nextGoal / prev), 0, 1);\r\n return (m.completions + part) / 20;\r\n };\r\n break;\r\n case SINGULARITY_MILESTONE_SORT.PERCENT_COMPLETIONS:\r\n // Orders infinite milestones based on completion count, putting them after all limited ones even if\r\n // they're completed\r\n sortFn = m => {\r\n const limit = Number.isFinite(m.limit) ? m.limit : 100;\r\n const currComp = Math.log(Currency.singularities.value / m.previousGoal) /\r\n Math.log(m.nextGoal / m.previousGoal);\r\n return Math.clampMax((m.completions + currComp) / limit, 1) + (Number.isFinite(m.limit) ? 0 : 1);\r\n };\r\n break;\r\n case SINGULARITY_MILESTONE_SORT.FINAL_COMPLETION:\r\n // Sorts infinite milestones as if they end at 50 steps; for any given number of completions, this\r\n // treats infinite milestones with larger steps as if they complete at a higher value\r\n sortFn = m => {\r\n const limit = Number.isFinite(m.limit) ? m.limit : 50;\r\n return Math.log10(m.config.start * Math.pow(m.config.repeat, limit - 1)) / 100;\r\n };\r\n break;\r\n case SINGULARITY_MILESTONE_SORT.MOST_RECENT:\r\n sortFn = m => {\r\n if (!m.isUnlocked) return 1 + Math.log10(m.start) / 1000;\r\n // For unique milestones, previousGoal is actually 1 and nextGoal contains the completion amount\r\n return Math.log10(m.isUnique ? m.nextGoal : m.previousGoal) / 100;\r\n };\r\n break;\r\n default:\r\n throw new Error(\"Unrecognized Singularity Milestone sorting option (order)\");\r\n }\r\n\r\n // Shift the fully completed milestones to the front or back with a constant offset which should be larger\r\n // than the value that the sort function should ever evaluate to\r\n let completedVal;\r\n switch (options.showCompleted) {\r\n case COMPLETED_MILESTONES.FIRST:\r\n completedVal = 10;\r\n break;\r\n case COMPLETED_MILESTONES.LAST:\r\n completedVal = -10;\r\n break;\r\n case COMPLETED_MILESTONES.IGNORED:\r\n completedVal = 0;\r\n break;\r\n default:\r\n throw new Error(\"Unrecognized Singularity Milestone sorting option (completed milestones)\");\r\n }\r\n\r\n // Compose the functions together; possibly reverse the final order and bring new milestones to the top\r\n const isNew = m => ((m.previousGoal > player.celestials.laitela.lastCheckedMilestones && moveNewToTop) ? 20 : 0);\r\n const compFn = m => (m.isMaxed ? completedVal : 0) + (options.sortOrder ? sortFn(m) : -sortFn(m)) + isNew(m);\r\n return this.sorted.sort((a, b) => compFn(b) - compFn(a));\r\n },\r\n\r\n get nextMilestoneGroup() {\r\n return this.sortedForCompletions(false).filter(m => !m.isMaxed).slice(0, 6);\r\n },\r\n\r\n get unseenMilestones() {\r\n const laitela = player.celestials.laitela;\r\n return SingularityMilestoneThresholds\r\n .filter(s => s > laitela.lastCheckedMilestones && Currency.singularities.gte(s));\r\n },\r\n\r\n get unnotifiedMilestones() {\r\n return SingularityMilestoneThresholds.filter(s => s > this.lastNotified && Currency.singularities.gte(s));\r\n }\r\n};\r\n\r\n// Sorted list of all the values where a singularity milestone exists, used for \"new milestone\" styling\r\nconst SingularityMilestoneThresholds = (function() {\r\n return SingularityMilestones.all\r\n .map(m => Array.range(0, Math.min(50, m.limit))\r\n .filter(r => !m.increaseThreshold || r <= m.increaseThreshold ||\r\n (r > m.increaseThreshold && ((r - m.increaseThreshold) % 3) === 2))\r\n .map(r => m.start * Math.pow(m.repeat, r)))\r\n .flat(Infinity)\r\n .filter(n => n < 1e100)\r\n .sort((a, b) => a - b);\r\n}());\r\n\r\nexport const Singularity = {\r\n get cap() {\r\n return 200 * Math.pow(10, player.celestials.laitela.singularityCapIncreases);\r\n },\r\n\r\n get gainPerCapIncrease() {\r\n return SingularityMilestone.improvedSingularityCap.effectOrDefault(11);\r\n },\r\n\r\n get singularitiesGained() {\r\n const MMBoostSing = MendingMilestone.one.isReached ? 5 : 1;\r\n let IU10 = ImaginaryUpgrade(10).effectOrDefault(0);\r\n if(Ra.unlocks.dmdScaling.isUnlocked) IU10 = Math.pow(2,IU10);\r\n let x = Math.floor(Math.pow(this.gainPerCapIncrease, player.celestials.laitela.singularityCapIncreases) *\r\n SingularityMilestone.singularityMult.effectOrDefault(1) *\r\n (1 + IU10)) * MMBoostSing;\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.ceil(x**corruptionPenalties.repSing.sing[player.mending.corruption[8]]);\r\n }//this looks useless bruh--sxy\r\n return x;\r\n },\r\n\r\n // Time (in seconds) to go from 0 DE to the condensing requirement\r\n get timePerCondense() {\r\n return this.cap / Currency.darkEnergy.productionPerSecond;\r\n },\r\n\r\n // Time (in seconds) to reach the condensing requirement from *current* DE\r\n get timeUntilCap() {\r\n return (this.cap - Currency.darkEnergy.value) / Currency.darkEnergy.productionPerSecond;\r\n },\r\n\r\n // Total additional time auto-condense will wait after reaching the condensing requirement\r\n get timeDelayFromAuto() {\r\n return this.timePerCondense * (SingularityMilestone.autoCondense.effectOrDefault(Infinity) - 1);\r\n },\r\n\r\n get capIsReached() {\r\n return Currency.darkEnergy.gte(this.cap);\r\n },\r\n\r\n increaseCap() {\r\n let x = 50 + (Ra.unlocks.increaseSingLimits.isUnlocked ? 5 * Math.floor((Ra.pets.laitela.level - 40) / 5) + 1 : 0) + CorruptionUpgrade(4).effectOrDefault(0);\r\n if (player.celestials.laitela.singularityCapIncreases >= x) return;\r\n player.celestials.laitela.singularityCapIncreases++;\r\n },\r\n\r\n decreaseCap() {\r\n if (player.celestials.laitela.singularityCapIncreases === 0) return;\r\n player.celestials.laitela.singularityCapIncreases--;\r\n },\r\n\r\n perform() {\r\n if (!this.capIsReached || Pelle.isDoomed) return;\r\n\r\n EventHub.dispatch(GAME_EVENT.SINGULARITY_RESET_BEFORE);\r\n\r\n Currency.darkEnergy.reset();\r\n Currency.singularities.add(this.singularitiesGained);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n Currency.singularities.value = Math.pow(Currency.singularities.value,corruptionPenalties.secondaryRejection[player.mending.corruption[7]]);\r\n }*/\r\n for (const quote of Laitela.quotes.all) {\r\n if (quote.requirement) {\r\n quote.show();\r\n }\r\n }\r\n\r\n EventHub.dispatch(GAME_EVENT.SINGULARITY_RESET_AFTER);\r\n }\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.GAME_LOAD, () => SingularityMilestones.lastNotified = Currency.singularities.value);\r\n\r\nEventHub.logic.on(GAME_EVENT.SINGULARITY_RESET_AFTER, () => {\r\n const newMilestones = SingularityMilestones.unnotifiedMilestones.length;\r\n if (newMilestones === 0) return;\r\n if (newMilestones === 1) GameUI.notify.blackHole(`You reached a Singularity milestone!`);\r\n else GameUI.notify.blackHole(`You reached ${formatInt(newMilestones)} Singularity milestones!`);\r\n SingularityMilestones.lastNotified = Currency.singularities.value;\r\n});\r\n","/* eslint-disable */\r\n\r\n// Most of this file is shamelessly stolen from here http://jsfiddle.net/JKirchartz/wwckP/\r\nconst Zalgo = {\r\n chars: {\r\n 0: [\r\n /* up */\r\n \"\\u030d\" /* ̍ */,\r\n \"\\u030e\" /* ̎ */,\r\n \"\\u0304\" /* ̄ */,\r\n \"\\u0305\" /* ̅ */,\r\n \"\\u033f\" /* ̿ */,\r\n \"\\u0311\" /* ̑ */,\r\n \"\\u0306\" /* ̆ */,\r\n \"\\u0310\" /* ̐ */,\r\n \"\\u0352\" /* ͒ */,\r\n \"\\u0357\" /* ͗ */,\r\n \"\\u0351\" /* ͑ */,\r\n \"\\u0307\" /* ̇ */,\r\n \"\\u0308\" /* ̈ */,\r\n \"\\u030a\" /* ̊ */,\r\n \"\\u0342\" /* ͂ */,\r\n \"\\u0343\" /* ̓ */,\r\n \"\\u0344\" /* ̈́ */,\r\n \"\\u034a\" /* ͊ */,\r\n \"\\u034b\" /* ͋ */,\r\n \"\\u034c\" /* ͌ */,\r\n \"\\u0303\" /* ̃ */,\r\n \"\\u0302\" /* ̂ */,\r\n \"\\u030c\" /* ̌ */,\r\n \"\\u0350\" /* ͐ */,\r\n \"\\u0300\" /* ̀ */,\r\n \"\\u0301\" /* ́ */,\r\n \"\\u030b\" /* ̋ */,\r\n \"\\u030f\" /* ̏ */,\r\n \"\\u0312\" /* ̒ */,\r\n \"\\u0313\" /* ̓ */,\r\n \"\\u0314\" /* ̔ */,\r\n \"\\u033d\" /* ̽ */,\r\n \"\\u0309\" /* ̉ */,\r\n \"\\u0363\" /* ͣ */,\r\n \"\\u0364\" /* ͤ */,\r\n \"\\u0365\" /* ͥ */,\r\n \"\\u0366\" /* ͦ */,\r\n \"\\u0367\" /* ͧ */,\r\n \"\\u0368\" /* ͨ */,\r\n \"\\u0369\" /* ͩ */,\r\n \"\\u036a\" /* ͪ */,\r\n \"\\u036b\" /* ͫ */,\r\n \"\\u036c\" /* ͬ */,\r\n \"\\u036d\" /* ͭ */,\r\n \"\\u036e\" /* ͮ */,\r\n \"\\u036f\" /* ͯ */,\r\n \"\\u033e\" /* ̾ */,\r\n \"\\u035b\" /* ͛ */,\r\n \"\\u0346\" /* ͆ */,\r\n \"\\u031a\" /* ̚ */,\r\n ],\r\n 1: [\r\n /* down */\r\n \"\\u0316\" /* ̖ */,\r\n \"\\u0317\" /* ̗ */,\r\n \"\\u0318\" /* ̘ */,\r\n \"\\u0319\" /* ̙ */,\r\n \"\\u031c\" /* ̜ */,\r\n \"\\u031d\" /* ̝ */,\r\n \"\\u031e\" /* ̞ */,\r\n \"\\u031f\" /* ̟ */,\r\n \"\\u0320\" /* ̠ */,\r\n \"\\u0324\" /* ̤ */,\r\n \"\\u0325\" /* ̥ */,\r\n \"\\u0326\" /* ̦ */,\r\n \"\\u0329\" /* ̩ */,\r\n \"\\u032a\" /* ̪ */,\r\n \"\\u032b\" /* ̫ */,\r\n \"\\u032c\" /* ̬ */,\r\n \"\\u032d\" /* ̭ */,\r\n \"\\u032e\" /* ̮ */,\r\n \"\\u032f\" /* ̯ */,\r\n \"\\u0330\" /* ̰ */,\r\n \"\\u0331\" /* ̱ */,\r\n \"\\u0332\" /* ̲ */,\r\n \"\\u0333\" /* ̳ */,\r\n \"\\u0339\" /* ̹ */,\r\n \"\\u033a\" /* ̺ */,\r\n \"\\u033b\" /* ̻ */,\r\n \"\\u033c\" /* ̼ */,\r\n \"\\u0345\" /* ͅ */,\r\n \"\\u0347\" /* ͇ */,\r\n \"\\u0348\" /* ͈ */,\r\n \"\\u0349\" /* ͉ */,\r\n \"\\u034d\" /* ͍ */,\r\n \"\\u034e\" /* ͎ */,\r\n \"\\u0353\" /* ͓ */,\r\n \"\\u0354\" /* ͔ */,\r\n \"\\u0355\" /* ͕ */,\r\n \"\\u0356\" /* ͖ */,\r\n \"\\u0359\" /* ͙ */,\r\n \"\\u035a\" /* ͚ */,\r\n \"\\u0323\" /* ̣ */,\r\n ],\r\n 2: [\r\n /* mid */\r\n \"\\u0315\" /* ̕ */,\r\n \"\\u031b\" /* ̛ */,\r\n \"\\u0340\" /* ̀ */,\r\n \"\\u0341\" /* ́ */,\r\n \"\\u0358\" /* ͘ */,\r\n \"\\u0321\" /* ̡ */,\r\n \"\\u0322\" /* ̢ */,\r\n \"\\u0327\" /* ̧ */,\r\n \"\\u0328\" /* ̨ */,\r\n \"\\u0334\" /* ̴ */,\r\n \"\\u0335\" /* ̵ */,\r\n \"\\u0336\" /* ̶ */,\r\n \"\\u034f\" /* ͏ */,\r\n \"\\u035c\" /* ͜ */,\r\n \"\\u035d\" /* ͝ */,\r\n \"\\u035e\" /* ͞ */,\r\n \"\\u035f\" /* ͟ */,\r\n \"\\u0360\" /* ͠ */,\r\n \"\\u0362\" /* ͢ */,\r\n \"\\u0338\" /* ̸ */,\r\n \"\\u0337\" /* ̷ */,\r\n \"\\u0361\" /* ͡ */,\r\n \"\\u0489\" /* ҉_ */,\r\n ],\r\n },\r\n random(len, seed) {\r\n if (len == 1) return 0;\r\n const x = (66669 * seed % 981) / 997;\r\n return !!len ? Math.floor(x * len + 1) - 1 : x;\r\n },\r\n generate(str, level = 0) {\r\n const str_arr = str.split(\"\");\r\n let seed = str_arr.reduce((curr, acc) => curr + acc.charCodeAt(0), 0);\r\n return str_arr.map(a => {\r\n if (a == \" \") return a;\r\n for (let i = 0; i < level; i++) {\r\n const rand = Zalgo.random(3, seed++);\r\n if (Zalgo.random(10, seed++) / 10 >= 0.5) a += Zalgo.chars[rand][Zalgo.random(Zalgo.chars[rand].length, seed++)];\r\n }\r\n return a;\r\n }).join(\"\");\r\n },\r\n};\r\n\r\nexport default Zalgo.generate;","import { Currency } from \"../../currency\";\r\nimport { DC } from \"../../constants\";\r\nimport { RebuyableMechanicState } from \"../../game-mechanics/rebuyable\";\r\nimport { SetPurchasableMechanicState } from \"../../utils\";\r\n\r\nimport { Quotes } from \"../quotes\";\r\n\r\nimport wordShift from \"../../word-shift\";\r\n\r\nimport zalgo from \"./zalgo\";\r\nimport { MendingUpgrade } from \"../../mending-upgrades\";\r\n\r\n\r\nconst disabledMechanicUnlocks = {\r\n achievements: () => ({}),\r\n IPMults: () => ({}),\r\n EPMults: () => ({}),\r\n galaxies: () => ({}),\r\n InfinitiedMults: () => ({}),\r\n infinitiedGen: () => ({}),\r\n eternityGain: () => ({}),\r\n eternityMults: () => ({}),\r\n studies: () => ({}),\r\n EPgen: () => ({}),\r\n autoec: () => ({}),\r\n replicantiIntervalMult: () => ({}),\r\n tpMults: () => ({}),\r\n glyphs: () => !PelleRifts.vacuum.milestones[0].canBeApplied,\r\n V: () => ({}),\r\n singularity: () => ({}),\r\n continuum: () => !Ra.unlocks.unlockPelleContinuum.isUnlocked,\r\n alchemy: () => ({}),\r\n achievementMult: () => ({}),\r\n blackhole: () => ({}),\r\n effarig: () => ({}),\r\n imaginaryUpgrades: () => ({}),\r\n glyphsac: () => ({}),\r\n antimatterDimAutobuyer1: () => PelleUpgrade.antimatterDimAutobuyers1,\r\n antimatterDimAutobuyer2: () => PelleUpgrade.antimatterDimAutobuyers1,\r\n antimatterDimAutobuyer3: () => PelleUpgrade.antimatterDimAutobuyers1,\r\n antimatterDimAutobuyer4: () => PelleUpgrade.antimatterDimAutobuyers1,\r\n antimatterDimAutobuyer5: () => PelleUpgrade.antimatterDimAutobuyers2,\r\n antimatterDimAutobuyer6: () => PelleUpgrade.antimatterDimAutobuyers2,\r\n antimatterDimAutobuyer7: () => PelleUpgrade.antimatterDimAutobuyers2,\r\n antimatterDimAutobuyer8: () => PelleUpgrade.antimatterDimAutobuyers2,\r\n tickspeedAutobuyer: () => PelleUpgrade.tickspeedAutobuyer,\r\n dimBoostAutobuyer: () => PelleUpgrade.dimBoostAutobuyer,\r\n galaxyAutobuyer: () => PelleUpgrade.galaxyAutobuyer,\r\n timeTheoremAutobuyer: () => ({}),\r\n rupg10: () => ({}),\r\n dtMults: () => ({}),\r\n chargedInfinityUpgrades: () => ({}),\r\n alteration: () => ({}),\r\n timeTheorems: () => ({})\r\n};\r\n\r\nexport const Pelle = {\r\n symbol: \"♅\",\r\n // Suppress the randomness for this form\r\n possessiveName: \"Pelle's\",\r\n\r\n // This is called upon initial Dooming and after every Armageddon when using the modal\r\n initializeRun() {\r\n if (this.isDoomed) {\r\n Pelle.armageddon(true);\r\n return;\r\n }\r\n\r\n Glyphs.harshAutoClean();\r\n if (!Glyphs.unequipAll()) {\r\n Modal.hideAll();\r\n Modal.message.show(`Dooming your Reality will unequip your Glyphs. Some of your\r\n Glyphs could not be unequipped due to lack of inventory space.`, 1);\r\n return;\r\n }\r\n Glyphs.harshAutoClean();\r\n if (Glyphs.freeInventorySpace < 5) {\r\n Modal.hideAll();\r\n Modal.message.show(`You must have enough empty unprotected Glyph slots for\r\n ${formatInt(5)} additional Glyphs in order to Doom your Reality.`, 1);\r\n return;\r\n }\r\n for (const type of BASIC_GLYPH_TYPES) Glyphs.addToInventory(GlyphGenerator.doomedGlyph(type));\r\n Glyphs.refreshActive();\r\n player.options.confirmations.glyphReplace = true;\r\n player.reality.automator.state.repeat = false;\r\n player.reality.automator.state.forceRestart = false;\r\n if (BlackHoles.arePaused) BlackHoles.togglePause();\r\n player.celestials.pelle.doomed = true;\r\n Pelle.armageddon(false);\r\n respecTimeStudies(true);\r\n Currency.infinityPoints.reset();\r\n player.IPMultPurchases = 0;\r\n Autobuyer.bigCrunch.mode = AUTO_CRUNCH_MODE.AMOUNT;\r\n disChargeAll();\r\n disChargeAllBreak();\r\n clearCelestialRuns();\r\n\r\n // Force-enable the group toggle for AD autobuyers to be active; whether or not they can actually tick\r\n // is still handled through if the autobuyers are unlocked at all. This fixes an odd edge case where the player\r\n // enters cel7 with AD autobuyers disabled - AD autobuyers need to be reupgraded, but the UI component\r\n // for the group toggle is hidden until they're all re-upgraded to the max again.\r\n player.auto.antimatterDims.isActive = true;\r\n\r\n player.buyUntil10 = true;\r\n player.records.realTimeDoomed = 0;\r\n for (const res of AlchemyResources.all) res.amount = 0;\r\n AutomatorBackend.stop();\r\n\r\n // Force-unhide all tabs except for the shop tab, for which we retain the hide state instead\r\n const shopTab = ~1 & (1 << GameDatabase.tabs.find(t => t.key === \"shop\").id);\r\n player.options.hiddenTabBits &= shopTab;\r\n\r\n // Force unhide MOST subtabs, although some of the tabs get ignored since they don't contain any\r\n // meaningful interactable gameplay elements in Doomed\r\n const tabsToIgnore = [\"statistics\", \"achievements\", \"reality\", \"celestials\"];\r\n const ignoredIDs = GameDatabase.tabs.filter(t => tabsToIgnore.includes(t.key)).map(t => t.id);\r\n for (let tabIndex = 0; tabIndex < GameDatabase.tabs.length; tabIndex++) {\r\n player.options.hiddenSubtabBits[tabIndex] &= ignoredIDs.includes(tabIndex) ? -1 : 0;\r\n }\r\n\r\n if(MendingMilestone.one.isReached){\r\n PelleUpgrade.antimatterDimAutobuyers1.isBought = true;\r\n PelleUpgrade.antimatterDimAutobuyers2.isBought = true;\r\n PelleUpgrade.tickspeedAutobuyer.isBought = true;\r\n PelleUpgrade.dimBoostAutobuyer.isBought = true;\r\n PelleUpgrade.galaxyAutobuyer.isBought = true;\r\n PelleUpgrade.keepAutobuyers.isBought = true;\r\n PelleUpgrade.IDAutobuyers.isBought = true;\r\n PelleUpgrade.replicantiAutobuyers.isBought = true;\r\n PelleUpgrade.TDAutobuyers.isBought = true;\r\n for (const autobuyer of Autobuyers.all) {\r\n if (autobuyer.data.interval !== undefined) autobuyer.maxIntervalForFree();\r\n }\r\n }\r\n Pelle.quotes.initial.show();\r\n GameStorage.save(true);\r\n },\r\n\r\n get displayName() {\r\n return Date.now() % 4000 > 500 ? \"Pelle\" : wordShift.randomCrossWords(\"Pelle\");\r\n },\r\n\r\n get isUnlocked() {\r\n return ImaginaryUpgrade(25).isBought;\r\n },\r\n // This will check if a specific mechanic is disabled, like old PelleFlag(x).isActive,\r\n // Initially it will only have isDoomed check but we will have upgrades that let you get stuff back\r\n isDisabled(mechanic) {\r\n if (!this.isDoomed) return false;\r\n\r\n if (!mechanic) return true;\r\n if (!disabledMechanicUnlocks[mechanic]) {\r\n // eslint-disable-next-line\r\n console.error(`Mechanic ${mechanic} isn't present in the disabledMechanicUnlocks!`);\r\n return true;\r\n }\r\n\r\n const upgrade = disabledMechanicUnlocks[mechanic]();\r\n\r\n if (typeof upgrade === \"boolean\") {\r\n return upgrade;\r\n }\r\n\r\n return Boolean(!upgrade.canBeApplied);\r\n },\r\n\r\n get canArmageddon() {\r\n return this.remnantsGain >= 1;\r\n },\r\n\r\n armageddon(gainStuff) {\r\n if (!this.canArmageddon && gainStuff) return;\r\n EventHub.dispatch(GAME_EVENT.ARMAGEDDON_BEFORE, gainStuff);\r\n if (gainStuff) {\r\n this.cel.remnants += this.remnantsGain;\r\n }\r\n finishProcessReality({ reset: true, armageddon: true });\r\n disChargeAll();\r\n disChargeAllBreak();\r\n player.celestials.enslaved.isStoringReal = false;\r\n player.celestials.enslaved.autoStoreReal = false;\r\n if (PelleStrikes.dilation.hasStrike) player.dilation.active = true;\r\n EventHub.dispatch(GAME_EVENT.ARMAGEDDON_AFTER, gainStuff);\r\n },\r\n\r\n gameLoop(diff) {\r\n if (this.isDoomed) {\r\n Currency.realityShards.add(this.realityShardGainPerSecond.times(diff).div(1000));\r\n PelleRifts.all.forEach(r => r.fill(diff));\r\n }\r\n },\r\n\r\n get cel() {\r\n return player.celestials.pelle;\r\n },\r\n\r\n get isDoomed() {\r\n return this.cel.doomed;\r\n },\r\n\r\n get disabledAchievements() {\r\n return [164, 156, 143, 142, 141, 137, 134, 133, 132, 126, 125, 118, 117, 116, 113, 111, 104, 103, 95, 93, 92, 91,\r\n 87, 85, 78, 76, 74, 65, 55, 54, 37];\r\n },\r\n\r\n get uselessInfinityUpgrades() {\r\n let result = [\"passiveGen\", \"infinitiedGeneration\"];\r\n if (!Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked) result.push(\"ipMult\");\r\n return result;\r\n },\r\n\r\n get uselessTimeStudies() {\r\n return [32, 33, 41, 51, 61, 62, 121, 122, 123, 141, 142, 143, 192, 213];\r\n },\r\n\r\n get disabledRUPGs() {\r\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 19, 20, 22, 23, 24];\r\n },\r\n\r\n get uselessPerks() {\r\n let x = [10, 12, 13, 14, 15, 16, 17, 30, 40, 41, 42, 43, 44, 45, 46, 51, 52,\r\n 53, 60, 61, 62, 80, 81, 82, 83, 100, 103, 104, 105, 201, 202, 203, 204];\r\n if (!Achievement(191).isUnlocked) x.push(106);\r\n return x;\r\n },\r\n\r\n get specialGlyphEffect() {\r\n\r\n const isUnlocked = this.isDoomed && PelleRifts.chaos.milestones[1].canBeApplied;\r\n const description = this.getSpecialGlyphEffectDescription(this.activeGlyphType);\r\n const isActive = type => isUnlocked && this.activeGlyphType === type;\r\n return {\r\n isUnlocked,\r\n description,\r\n infinity: (isActive(\"infinity\") && player.challenge.eternity.current <= 8)\r\n ? Currency.infinityPoints.value.plus(1).pow(0.2)\r\n : DC.D1,\r\n time: isActive(\"time\")\r\n ? Decimal.min(Currency.eternityPoints.value.plus(1).pow(0.3),Decimal.pow10(1e20))\r\n : DC.D1,\r\n replication: isActive(\"replication\")\r\n ? 10 ** 53 ** (PelleRifts.vacuum.percentage)\r\n : 1,\r\n dilation: isActive(\"dilation\")\r\n ? Decimal.pow(player.dilation.totalTachyonGalaxies, 1.5).max(1)\r\n : DC.D1,\r\n power: isActive(\"power\")\r\n ? 1.02\r\n : 1,\r\n companion: isActive(\"companion\")\r\n ? 1.34\r\n : 1,\r\n isScaling: () => [\"infinity\", \"time\", \"replication\", \"dilation\"].includes(this.activeGlyphType),\r\n };\r\n },\r\n getSpecialGlyphEffectDescription(type) {\r\n switch (type) {\r\n case \"infinity\":\r\n return `Infinity Point gain ${player.challenge.eternity.current <= 8\r\n ? formatX(Currency.infinityPoints.value.plus(1).pow(0.2), 2)\r\n : formatX(DC.D1, 2)} (based on current IP)`;\r\n case \"time\":\r\n return `Eternity Point gain ${formatX(Decimal.min(Currency.eternityPoints.value.plus(1).pow(0.3),Decimal.pow10(1e20)), 2)}\r\n (based on current EP, max 1e1e20)`;\r\n case \"replication\":\r\n return `Replication speed ${formatX(10 ** 53 ** (PelleRifts.vacuum.percentage), 2)} \\\r\n (based on ${wordShift.wordCycle(PelleRifts.vacuum.name)})`;\r\n case \"dilation\":\r\n return `Dilated Time gain ${formatX(Decimal.pow(player.dilation.totalTachyonGalaxies, 1.5).max(1), 2)}\r\n (based on Tachyon Galaxies)`;\r\n case \"power\":\r\n return `Galaxies are ${formatPercents(0.02)} stronger`;\r\n case \"companion\":\r\n return `You feel ${formatPercents(0.34)} better`;\r\n // Undefined means that there is no glyph equipped, needs to be here since this function is used in\r\n // both Current Glyph Effects and Glyph Tooltip\r\n case undefined:\r\n return \"No Glyph equipped!\";\r\n default:\r\n return \"You cannot equip this Glyph while Doomed!\";\r\n }\r\n },\r\n\r\n get remnantRequirementForDilation() {\r\n return 3.8e7;\r\n },\r\n\r\n get canDilateInPelle() {\r\n return this.cel.remnants >= this.remnantRequirementForDilation;\r\n },\r\n\r\n get remnantsGain() {\r\n let am = this.cel.records.totalAntimatter.plus(1).log10();\r\n let ip = this.cel.records.totalInfinityPoints.plus(1).log10();\r\n let ep = this.cel.records.totalEternityPoints.plus(1).log10();\r\n let MMBoostRem = MendingMilestone.one.isReached ? 1.1 : 1;\r\n\r\n if (PelleStrikes.dilation.hasStrike) {\r\n am *= 500;\r\n ip *= 10;\r\n ep *= 5;\r\n }\r\n\r\n const gain = (\r\n ((Math.log10(am + 2) + Math.log10(ip + 2) + Math.log10(ep + 2)) * MMBoostRem)/ 1.64\r\n ) ** 7.5;\r\n\r\n return gain < 1 ? gain : Math.floor(gain - this.cel.remnants);\r\n },\r\n\r\n realityShardGain(remnants) {\r\n const MMBoostRS = MendingMilestone.one.isReached ? 10 : 1;\r\n return Decimal.pow(10, remnants ** (1 / 7.5) * 4).minus(1).div(1e3).times(MMBoostRS);\r\n },\r\n\r\n get realityShardGainPerSecond() {\r\n return this.realityShardGain(this.cel.remnants);\r\n },\r\n\r\n get nextRealityShardGain() {\r\n return this.realityShardGain(this.remnantsGain + this.cel.remnants);\r\n },\r\n\r\n // Calculations assume this is in units of proportion per second (eg. 0.03 is 3% drain per second)\r\n get riftDrainPercent() {\r\n return 0.3;\r\n },\r\n\r\n get glyphMaxLevel() {\r\n return PelleUpgrade.glyphLevels.effectValue;\r\n },\r\n\r\n get glyphStrength() {\r\n return 1 + (Ra.unlocks.pelleRarityBoost.isUnlocked ? (Ra.pets.pelle.level - 50) * 0.05 : 0); //3.5 is 100%\r\n },\r\n\r\n antimatterDimensionMult(x) {\r\n return Decimal.pow(10, Math.log10(x + 1) + x ** 5.1 / 1e3 + 4 ** x / 1e19);\r\n },\r\n\r\n get activeGlyphType() {\r\n return Glyphs.active.filter(Boolean)[0]?.type;\r\n },\r\n\r\n get hasGalaxyGenerator() {\r\n return player.celestials.pelle.galaxyGenerator.unlocked;\r\n },\r\n\r\n // Transition text from \"from\" to \"to\", stage is 0-1, 0 is fully \"from\" and 1 is fully \"to\"\r\n // Also adds more zalgo the bigger the stage\r\n transitionText(from, to, stage = 0) {\r\n const len = Math.round((from.length * (1 - stage) + to.length * stage) * 1e8) / 1e8;\r\n const toInterval = len * (1 - stage);\r\n let req = toInterval;\r\n let str = \"\";\r\n for (let i = 0; i < len; i++) {\r\n if (i >= req) {\r\n const idx = Math.floor(i * (to.length / len));\r\n str += to[idx];\r\n req += toInterval;\r\n } else {\r\n const idx = Math.floor(i * (from.length / len));\r\n str += from[idx];\r\n }\r\n }\r\n return zalgo(str, Math.floor(stage ** 2 * 7));\r\n },\r\n\r\n endTabNames: \"Never Gonna Give You Up Never Gonna Let You Down :) :3\".split(\" \"),//\"End? Is Nigh Destruction Is Imminent Help Us Good Bye Forever (NOT)\".split(\" \"),\r\n\r\n quotes: Quotes.pelle,\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.ARMAGEDDON_AFTER, () => {\r\n if (Currency.remnants.gte(1)) {\r\n Pelle.quotes.arm.show();\r\n }\r\n});\r\nEventHub.logic.on(GAME_EVENT.PELLE_STRIKE_UNLOCKED, () => {\r\n if (PelleStrikes.infinity.hasStrike) {\r\n Pelle.quotes.strike1.show();\r\n }\r\n if (PelleStrikes.powerGalaxies.hasStrike) {\r\n Pelle.quotes.strike2.show();\r\n }\r\n if (PelleStrikes.eternity.hasStrike) {\r\n Pelle.quotes.strike3.show();\r\n }\r\n if (PelleStrikes.ECs.hasStrike) {\r\n Pelle.quotes.strike4.show();\r\n }\r\n if (PelleStrikes.dilation.hasStrike) {\r\n Pelle.quotes.strike5.show();\r\n }\r\n});\r\n\r\nexport class RebuyablePelleUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.realityShards;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.celestials.pelle.rebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.celestials.pelle.rebuyables[this.id] = value;\r\n }\r\n\r\n get isCapped() {\r\n return this.boughtAmount >= this.config.cap;\r\n }\r\n\r\n get isCustomEffect() { return true; }\r\n\r\n get effectValue() {\r\n return this.config.effect(this.boughtAmount);\r\n }\r\n\r\n onPurchased() {\r\n if (this.id === \"glyphLevels\") EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n }\r\n}\r\n\r\nexport class PelleUpgradeState extends SetPurchasableMechanicState {\r\n\r\n get set() {\r\n return player.celestials.pelle.upgrades;\r\n }\r\n\r\n get currency() {\r\n return Currency.realityShards;\r\n }\r\n\r\n get description() {\r\n return this.config.description;\r\n }\r\n\r\n get cost() {\r\n return this.config.cost;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return Pelle.isDoomed;\r\n }\r\n\r\n}\r\n\r\nexport const PelleUpgrade = mapGameDataToObject(\r\n GameDatabase.celestials.pelle.upgrades,\r\n config => (config.rebuyable\r\n ? new RebuyablePelleUpgradeState(config)\r\n : new PelleUpgradeState(config)\r\n )\r\n);\r\n\r\nPelleUpgrade.rebuyables = PelleUpgrade.all.filter(u => u.isRebuyable);\r\nPelleUpgrade.singles = PelleUpgrade.all.filter(u => !u.isRebuyable);\r\n","import { BitUpgradeState } from \"../../utils\";\r\n\r\nclass PelleStrikeState extends BitUpgradeState {\r\n get bits() { return player.celestials.pelle.progressBits; }\r\n set bits(value) { player.celestials.pelle.progressBits = value; }\r\n\r\n get hasStrike() {\r\n return this.isUnlocked;\r\n }\r\n\r\n get canBeUnlocked() {\r\n return Pelle.isDoomed && !this.hasStrike;\r\n }\r\n\r\n get requirement() {\r\n const x = this.config.requirementDescription;\r\n return typeof x === \"function\" ? x() : x;\r\n }\r\n\r\n get penalty() {\r\n const x = this.config.penaltyDescription;\r\n return typeof x === \"function\" ? x() : x;\r\n }\r\n\r\n reward() {\r\n return this.config.rewardDescription();\r\n }\r\n\r\n get rift() {\r\n return this.config.rift();\r\n }\r\n\r\n trigger() {\r\n this.unlock();\r\n }\r\n\r\n onUnlock() {\r\n GameUI.notify.strike(`You encountered a Pelle Strike: ${this.requirement}`);\r\n player.celestials.pelle.collapsed.rifts = false;\r\n\r\n // If it's paradox, reset the records\r\n if (this.id === 5) {\r\n Pelle.cel.records.totalAntimatter = new Decimal(\"1e180000\");\r\n Pelle.cel.records.totalInfinityPoints = new Decimal(\"1e60000\");\r\n Currency.eternityPoints.reset();\r\n // Oddly specific number? Yes, it's roughly the amount of EP you have\r\n // when starting dilation for the first time\r\n // Since 5th strike previously did not reset your current EP the previous reset value was kind of useless which\r\n // lead to some balancing problems, this hopefully prevents people starting dilation too early and getting\r\n // softlocked, or starting it too late and getting not-softlocked.\r\n Pelle.cel.records.totalEternityPoints = new Decimal(\"1e1050\");\r\n }\r\n Tab.celestials.pelle.show();\r\n EventHub.dispatch(GAME_EVENT.PELLE_STRIKE_UNLOCKED);\r\n }\r\n}\r\n\r\nexport const PelleStrikes = mapGameDataToObject(\r\n GameDatabase.celestials.pelle.strikes,\r\n config => new PelleStrikeState(config)\r\n);\r\n","import { GameMechanicState } from \"../../utils\";\r\n\r\nclass RiftMilestoneState extends GameMechanicState {\r\n\r\n lastChecked = false;\r\n\r\n get requirement() {\r\n return this.config.requirement;\r\n }\r\n\r\n get resource() {\r\n return this.config.resource;\r\n }\r\n\r\n checkMilestoneState() {\r\n if (this.lastChecked !== this.isUnlocked) {\r\n this.config.onStateChange?.();\r\n }\r\n this.lastChecked = this.isUnlocked;\r\n }\r\n\r\n get isUnlocked() {\r\n if (this.resource === \"decay\" && PelleRifts.chaos.milestones[0].isEffectActive) return true;\r\n return this.requirement <= PelleRifts[this.resource].percentage;\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isUnlocked;\r\n }\r\n\r\n get description() {\r\n const d = this.config.description;\r\n return typeof d === \"function\" ? d() : d;\r\n }\r\n\r\n get formattedEffect() {\r\n if (this.canBeApplied) return this.config.formatEffect(this.effectValue);\r\n return false;\r\n }\r\n}\r\n\r\nclass RiftState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this._milestones = this.config.milestones.map(x => new RiftMilestoneState(x));\r\n }\r\n\r\n get fillCurrency() {\r\n return this.config.currency();\r\n }\r\n\r\n get strike() {\r\n return this.config.strike();\r\n }\r\n\r\n get canBeApplied() {\r\n return this.strike.hasStrike;\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get reducedTo() {\r\n return this.rift.reducedTo;\r\n }\r\n\r\n set reducedTo(value) {\r\n this.rift.reducedTo = value;\r\n }\r\n\r\n get rift() {\r\n return player.celestials.pelle.rifts[this.config.key];\r\n }\r\n\r\n get totalFill() {\r\n return this.rift.fill;\r\n }\r\n\r\n set totalFill(value) {\r\n this.rift.fill = value;\r\n }\r\n\r\n get isActive() {\r\n return this.rift.active;\r\n }\r\n\r\n get realPercentage() {\r\n return this.config.percentage(this.totalFill);\r\n }\r\n\r\n get spentPercentage() {\r\n return this.rift.percentageSpent || 0;\r\n }\r\n\r\n get percentage() {\r\n if (this.reducedTo > 1) return this.reducedTo;\r\n if (!this.config.spendable) return Math.min(this.realPercentage, this.reducedTo);\r\n return Math.min(this.config.percentage(this.totalFill) - this.spentPercentage, this.reducedTo);\r\n }\r\n\r\n get milestones() {\r\n return this._milestones;\r\n }\r\n\r\n get description() {\r\n return this.config.description;\r\n }\r\n\r\n get drainResource() {\r\n return this.config.drainResource;\r\n }\r\n\r\n get effects() {\r\n const base = this.config.baseEffect(this.effectValue);\r\n const additional = this.config.additionalEffects?.().map(x => x.formattedEffect) ?? [];\r\n return [base, ...additional];\r\n }\r\n\r\n get isCustomEffect() { return true; }\r\n\r\n get effectValue() {\r\n return this.config.effect(this.config.percentageToFill(this.percentage));\r\n }\r\n\r\n get maxValue() {\r\n return this.config.percentageToFill(1 + this.spentPercentage);\r\n }\r\n\r\n get isMaxed() {\r\n return this.percentage >= 1;\r\n }\r\n\r\n get galaxyGeneratorText() {\r\n return this.config.galaxyGeneratorText;\r\n }\r\n\r\n get activeCap() {\r\n return Ra.unlocks.boostMVRGain.isUnlocked?5:2;\r\n }\r\n\r\n toggle() {\r\n const active = PelleRifts.all.filter(r => r.isActive).length;\r\n if (!this.isActive && active === this.activeCap) GameUI.notify.error(`You can only have 2 rifts active at the same time!`);\r\n else this.rift.active = !this.rift.active;\r\n }\r\n\r\n checkMilestoneStates() {\r\n this.milestones.forEach(x => x.checkMilestoneState());\r\n }\r\n\r\n fill(diff) {\r\n // The UI removes the fill button after 100%, so we need to turn it off here\r\n if (this.isActive && this.isMaxed) {\r\n this.rift.active = false;\r\n return;\r\n }\r\n if (!this.isActive || this.isMaxed) return;\r\n\r\n if (this.fillCurrency.value instanceof Decimal) {\r\n // Don't drain resources if you only have 1 of it.\r\n // This is in place due to the fix to replicanti below.\r\n if (this.fillCurrency.value.lte(1)) return;\r\n const afterTickAmount = this.fillCurrency.value.times((1 - Pelle.riftDrainPercent) ** (diff / 100));\r\n const spent = this.fillCurrency.value.minus(afterTickAmount);\r\n // We limit this to 1 instead of 0 specifically for the case of replicanti; certain interactions with offline\r\n // time can cause it to drain to 0, where it gets stuck unless you reset it with some prestige\r\n this.fillCurrency.value = this.fillCurrency.value.minus(spent).max(1);\r\n this.totalFill = this.totalFill.plus(spent).min(this.maxValue);\r\n } else {\r\n const afterTickAmount = this.fillCurrency.value * (1 - Pelle.riftDrainPercent) ** (diff / 100);\r\n const spent = this.fillCurrency.value - afterTickAmount;\r\n this.fillCurrency.value = Math.max(this.fillCurrency.value - spent, 0);\r\n this.totalFill = Math.clampMax(this.totalFill + spent, this.maxValue);\r\n }\r\n if (PelleRifts.vacuum.milestones[0].canBeApplied) Glyphs.refreshActive();\r\n this.checkMilestoneStates();\r\n }\r\n}\r\n\r\nexport const PelleRifts = mapGameDataToObject(\r\n GameDatabase.celestials.pelle.rifts,\r\n config => new RiftState(config)\r\n);\r\n\r\nPelleRifts.totalMilestones = () => PelleRifts.all.flatMap(x => x.milestones).countWhere(x => x.canBeApplied);\r\n","import { RebuyableMechanicState } from \"../../game-mechanics/rebuyable\";\r\n\r\nimport { PelleRifts } from \"./rifts\";\r\n\r\nexport const GalaxyGenerator = {\r\n // This is used for a slightly annoying workaround in order to visually update the glyph tab when the rifts\r\n // are refilling and the single glyph slot (which was lost during the drain) becomes available again\r\n hasReturnedGlyphSlot: false,\r\n\r\n get generationCaps() {\r\n return PelleRifts.all\r\n .map(x => ({ rift: x.config.key, cap: x.config.galaxyGeneratorThreshold }))\r\n .sort((a, b) => a.cap - b.cap);\r\n },\r\n\r\n get spentGalaxies() {\r\n return player.celestials.pelle.galaxyGenerator.spentGalaxies;\r\n },\r\n\r\n get generatedGalaxies() {\r\n return player.celestials.pelle.galaxyGenerator.generatedGalaxies;\r\n },\r\n\r\n get galaxies() {\r\n return this.generatedGalaxies - this.spentGalaxies;\r\n },\r\n\r\n get gainPerSecond() {\r\n if (!Pelle.hasGalaxyGenerator) return 0;\r\n return new Decimal(GalaxyGeneratorUpgrades.additive.effectValue).timesEffectsOf(\r\n GalaxyGeneratorUpgrades.multiplicative,\r\n GalaxyGeneratorUpgrades.antimatterMult,\r\n GalaxyGeneratorUpgrades.IPMult,\r\n GalaxyGeneratorUpgrades.EPMult,\r\n ).toNumber();\r\n },\r\n\r\n get capObj() {\r\n return this.generationCaps[player.celestials.pelle.galaxyGenerator.phase];\r\n },\r\n\r\n get generationCap() {\r\n return this.capObj ? this.capObj.cap : Infinity;\r\n },\r\n\r\n get capRift() {\r\n return PelleRifts[this.capObj?.rift];\r\n },\r\n\r\n get isCapped() {\r\n return this.generationCap === this.generatedGalaxies;\r\n },\r\n\r\n get sacrificeActive() {\r\n return player.celestials.pelle.galaxyGenerator.sacrificeActive;\r\n },\r\n\r\n startSacrifice() {\r\n player.celestials.pelle.collapsed.rifts = false;\r\n player.celestials.pelle.galaxyGenerator.sacrificeActive = true;\r\n },\r\n\r\n loop(diff) {\r\n if (this.isCapped) {\r\n Pelle.quotes.galaxyGeneratorRifts.show();\r\n }\r\n if (this.sacrificeActive) {\r\n this.capRift.reducedTo = Math.max(this.capRift.reducedTo - 0.3 * diff / 1000, 0);\r\n if (this.capRift.reducedTo === 0) {\r\n player.celestials.pelle.galaxyGenerator.sacrificeActive = false;\r\n player.celestials.pelle.galaxyGenerator.phase++;\r\n\r\n const phase = player.celestials.pelle.galaxyGenerator.phase;\r\n if (phase === 1) {\r\n Pelle.quotes.galaxyGeneratorPhase1.show();\r\n } else if (phase === 4) {\r\n Pelle.quotes.galaxyGeneratorPhase4.show();\r\n }\r\n\r\n if (!this.capObj) {\r\n Pelle.quotes.end.show();\r\n }\r\n }\r\n PelleRifts.all.forEach(x => x.checkMilestoneStates());\r\n\r\n // Force-unequip glyphs when the player loses the respective milestone. We call the respec option as normally\r\n // except for one particular case - when we want to respec into protected slots but have no room to do so. In\r\n // that case, we force-respec into the inventory instead\r\n if (!PelleRifts.vacuum.milestones[0].canBeApplied && Glyphs.active.filter(g => g).length > 0) {\r\n Glyphs.unequipAll(player.options.respecIntoProtected && Glyphs.findFreeIndex(true) === -1);\r\n Glyphs.refreshActive();\r\n }\r\n\r\n }\r\n player.celestials.pelle.galaxyGenerator.generatedGalaxies += this.gainPerSecond * diff / 1000;\r\n player.celestials.pelle.galaxyGenerator.generatedGalaxies = Math.min(\r\n player.celestials.pelle.galaxyGenerator.generatedGalaxies,\r\n this.generationCap\r\n );\r\n\r\n if (!this.capRift) {\r\n PelleRifts.all.forEach(r => r.reducedTo = Math.min(r.reducedTo + 0.03 * diff / 1000, 2));\r\n if (PelleRifts.vacuum.milestones[0].canBeApplied && !this.hasReturnedGlyphSlot) {\r\n Glyphs.refreshActive();\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED);\r\n this.hasReturnedGlyphSlot = true;\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport class GalaxyGeneratorUpgrade extends RebuyableMechanicState {\r\n get currency() {\r\n return this.config.currency();\r\n }\r\n\r\n get boughtAmount() {\r\n return player.celestials.pelle.rebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.celestials.pelle.rebuyables[this.id] = value;\r\n }\r\n\r\n get isCustomEffect() { return true; }\r\n\r\n get effectValue() {\r\n return this.config.effect(this.boughtAmount);\r\n }\r\n}\r\n\r\nexport const GalaxyGeneratorUpgrades = mapGameDataToObject(\r\n GameDatabase.celestials.pelle.galaxyGeneratorUpgrades,\r\n config => new GalaxyGeneratorUpgrade(config)\r\n);\r\n","export const END_STATE_MARKERS = {\r\n // Tab zalgoification starts as soon as endState > 0\r\n GAME_END: 1,\r\n TAB_START_HIDE: 1.5,\r\n INTERACTIVITY_DISABLED: 2.5,\r\n FADE_AWAY: 2.5,\r\n SAVE_DISABLED: 4, //WILL KEEP SAVE ENABLED FOR MENDING AND BEYOND\r\n END_NUMBERS: 4.2,\r\n DISPLAY_DESTROYER_QUOTES: 4.5,\r\n CREDITS_START: 4.5, //WILL DISABLE CREDITS ROLL FOR NOW, UNLESS I CAN HAVE TWO SEPERATE SETS OF CREDITS\r\n SHOW_NEW_GAME: 13, //WE'RE NOT DONE YET, YOU STILL HAVE ANOTHER LAYER TO GO THROUGH\r\n SPECTATE_GAME: 13.5, //*SEE ABOVE*\r\n CREDITS_END: 14.5, //UNNEEDED (FOR NOW) DUE TO \"CREDITS_START\" BEING DISABLED\r\n};\r\n\r\nexport const GameEnd = {\r\n get endState() {\r\n if (this.removeAdditionalEnd) return this.additionalEnd;\r\n //Ra shop Pelle--sxy\r\n if (player.celestials.ra.upgrades.has('pelleUpgrade')&&!player.celestials.pelle.galaxyGenerator.unlocked) return 0;\r\n return Math.max((Math.log10(player.celestials.pelle.records.totalAntimatter.plus(1).log10() + 1) - 8.7) /\r\n (Math.log10(9e15) - 8.7) + this.additionalEnd, 0);\r\n },\r\n\r\n _additionalEnd: 0,\r\n get additionalEnd() {\r\n return (player.isGameEnd || this.removeAdditionalEnd) ? this._additionalEnd : 0;\r\n },\r\n set additionalEnd(x) {\r\n this._additionalEnd = (player.isGameEnd || this.removeAdditionalEnd) ? x : 0;\r\n },\r\n\r\n removeAdditionalEnd: false,\r\n\r\n creditsClosed: false,\r\n creditsEverClosed: false,\r\n\r\n gameLoop(diff) {\r\n if (this.removeAdditionalEnd) {\r\n this.additionalEnd -= Math.min(diff / 200, 0.5);\r\n if (this.additionalEnd < 4) {\r\n this.additionalEnd = 0;\r\n this.removeAdditionalEnd = false;\r\n }\r\n }\r\n if (!this.removeAdditionalEnd && this.endState >= END_STATE_MARKERS.GAME_END &&\r\n ui.$viewModel.modal.progressBar === undefined) {\r\n player.isGameEnd = true;\r\n if(this.endState < 4.5){\r\n if(player.mends.gte(new Decimal(10))){\r\n this.additionalEnd += Math.min(diff / 1000 / 20, 0.1) * 15;\r\n }\r\n else{\r\n this.additionalEnd += Math.min(diff / 1000 / 20, 0.1);\r\n }\r\n }\r\n else{\r\n this.additionalEnd += Math.min(diff / 1000 / 20, 0.1) * 200;\r\n /*if(this.endState >= 14.5){\r\n Quotes.destroyer.preMend.show()\r\n }*/\r\n }\r\n }\r\n }\r\n};\r\n","import { BitUpgradeState, RebuyableMechanicState } from \"../game-mechanics\";\r\nimport { GameDatabase } from \"../secret-formula/game-database\";\r\n\r\nimport { Quotes } from \"./quotes\";\r\n\r\nexport const Destroyer = {\r\n displayName: \"The Destroyer\",\r\n possessiveName: \"The Destroyer's\",\r\n get isUnlocked() {\r\n return true;\r\n },\r\n quotes: Quotes.destroyer,\r\n symbol: \" \"\r\n};\r\n","import { MendingMilestone } from \"../mending\";\r\nimport { Destroyer } from \"./destroyer\";\r\nimport { Effarig } from \"./effarig\";\r\nimport { Enslaved } from \"./enslaved\";\r\nimport { Laitela } from \"./laitela/laitela\";\r\nimport { Pelle } from \"./pelle/pelle\";\r\nimport { Ra } from \"./ra/ra\";\r\nimport { Teresa } from \"./teresa\";\r\nimport { V } from \"./V\";\r\nimport { Kohler } from \"./kohler\";\r\n\r\nexport const Celestials = {\r\n teresa: Teresa,\r\n effarig: Effarig,\r\n enslaved: Enslaved,\r\n v: V,\r\n ra: Ra,\r\n laitela: Laitela,\r\n pelle: Pelle,\r\n destroyer: Destroyer,\r\n kohler: Kohler\r\n};\r\n\r\nGameDatabase.celestials.descriptions = [\r\n {\r\n name: \"Teresa\",\r\n effects() {\r\n return `Glyph Time Theorem generation is disabled.\r\n You gain less Infinity Points and Eternity Points (x^${format(0.55, 2, 2)}).`;\r\n },\r\n },\r\n {\r\n name: \"Effarig\",\r\n effects() {\r\n return `All Dimension multipliers, game speed, and tickspeed are severely lowered, like Dilation.\r\n Infinity Power reduces the production and game speed penalties and Time Shards reduce the tickspeed penalty.\r\n Glyph levels are temporarily capped to ${formatInt(Effarig.glyphLevelCap)}, rarity is unaffected.`;\r\n },\r\n description() {\r\n return `You will exit Effarig's Reality when you complete a Layer of it for the first time.`;\r\n }\r\n },\r\n {\r\n name: \"The Nameless Ones\",\r\n effects() {\r\n return `Glyph levels are boosted to a minimum of ${formatInt(5000)}.\r\n Infinity, Time, and 8th Antimatter Dimension purchases are limited to ${formatInt(1)} each.\r\n Antimatter Dimension multipliers are always Dilated (the Glyph effect still only applies in actual Dilation).\r\n Time Study 192 (uncapped Replicanti) is locked.\r\n The Black Hole is disabled.\r\n Tachyon Particle production and Dilated Time production are severely reduced.\r\n Time Theorem generation from Dilation Glyphs is disabled.\r\n Certain challenge goals are increased.\r\n Stored game time is discharged at a reduced effectiveness (exponent^${format(0.55, 2, 2)}).`;\r\n }\r\n },\r\n {\r\n name: \"V\",\r\n effects() {\r\n const vEffect = `All Dimension multipliers, Eternity Point gain, Infinity Point gain, and Dilated Time gain\\\r\n per second are square-rooted. \r\n The Replicanti interval is squared.`;\r\n const vEffectAdditional = ` The Exponential Glyph Alchemy effect is disabled.`;\r\n\r\n let returnVal = vEffect\r\n if (Ra.unlocks.unlockGlyphAlchemy.canBeApplied) {\r\n returnVal += vEffectAdditional\r\n }\r\n return returnVal\r\n }\r\n },\r\n {\r\n name: \"Ra\",\r\n effects() {\r\n return `You only have ${formatInt(4)} Dimension Boosts and can not gain any more.\r\n The Tickspeed purchase multiplier is fixed at ${formatX(1.1245, 0, 3)}.`;\r\n },\r\n },\r\n {\r\n name: \"Lai'tela\",\r\n effects() {\r\n let disabledDims;\r\n const highestActive = 8 - Laitela.difficultyTier;\r\n switch (highestActive) {\r\n case 0:\r\n disabledDims = \"all Dimensions\";\r\n break;\r\n case 1:\r\n disabledDims = \"2nd and higher Dimensions\";\r\n break;\r\n case 2:\r\n disabledDims = \"3rd and higher Dimensions\";\r\n break;\r\n case 7:\r\n disabledDims = \"8th Dimensions\";\r\n break;\r\n default:\r\n disabledDims = `${highestActive + 1}th and higher Dimensions`;\r\n break;\r\n }\r\n const disabledText = highestActive === 8\r\n ? \"\"\r\n : `Production from ${disabledDims} is disabled.`;\r\n\r\n return `Infinity Point and Eternity Point gain are Dilated.\r\n Game speed is reduced to ${formatInt(1)} and gradually comes back over ${formatInt(10)} minutes.\r\n Black Hole storing, discharging, pulsing, and inversion are all disabled.\r\n ${disabledText}`;\r\n },\r\n description() {\r\n return `Antimatter generates entropy inside of this Reality.\\\r\n At ${formatPercents(1)} entropy, the Reality becomes destabilized\\\r\n and you gain a reward based on how quickly you reached ${formatPercents(1)}.\r\n Destabilizing the Reality in less than ${formatInt(30)} seconds makes it become significantly more difficult,\\\r\n in exchange for giving a much stronger reward.\\\r\n Doing this ${formatInt(8)} times will also give a ${formatX(8)} to Dark Energy gain.`;\r\n }\r\n },\r\n {\r\n name: \"YOU SHOULDN'T LOOK THIS\",\r\n effects() {\r\n const Effect = `This number 6 is dealt as a Error thrower when you enter Pelle through normal model.\r\n Do not use number 6.`;\r\n return Effect;\r\n }\r\n },\r\n {\r\n name: \"SuperV\",\r\n effects() {\r\n const vEffect = `All Dimension multipliers, Tickspeed, Eternity Point gain, Infinity Point gain, and Dilated Time gain\\\r\n per second are ^(1 / ${format(1e6, 0, 0)}). \r\n The Replicanti interval is 5^its origin.\r\n The Exponential Glyph Alchemy effect is disabled.`;\r\n return vEffect;\r\n }\r\n },\r\n {\r\n name: \"Kohler\",\r\n effects(){\r\n return \"TBD\";\r\n }\r\n }\r\n];\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{staticClass:\"c-modal-options__large\",attrs:{\"cancel-class\":'c-modal-message__okay-btn',\"confirm-class\":'c-modal-message__okay-btn c-modal__confirm-btn',\"cancel-fn\":_vm.overwrite},on:{\"confirm\":function($event){return _vm.ignore()}},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Could not compare with Cloud Save \")]},proxy:true},{key:\"cancel-text\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.overwriteText)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Do not overwrite \")]},proxy:true}])},[_vm._v(\" While attempting to compare your saves, the game was unable to properly process the data in your Cloud save. This is most likely due to the Cloud save being very outdated, using a data format from a much older version of the game. \"),_c('br'),_c('br'),(_vm.isSaving)?_c('span',[_vm._v(\" It is probably safe to overwrite your Cloud save. You can click \\\"Cloud load\\\" and force the save to be loaded if you would like to attempt to convert it to a valid save format that you can use. \")]):_c('span',[_vm._v(\" You can try to load your data from the Cloud if desired. The game will attempt to load in your Cloud data by converting its format, but this may not work and in the worst case may require you to reset this save slot in order for the game to work again. \")]),_c('br'),_vm._v(\" Note: This modal will show up regardless of your settings, because this issue will continue to prevent the 10-minute autosave until it is resolved. \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal-message l-modal-content--centered\"},[_c('span',{staticClass:\"c-modal__header\"},[_c('ModalCloseButton',{on:{\"click\":_vm.closeModal}}),(_vm.$slots.header)?_c('span',{staticClass:\"c-modal__title\"},[_vm._t(\"header\")],2):_vm._e()],1),_vm._t(\"default\"),(_vm.option)?_c('ModalConfirmationCheck',{attrs:{\"option\":_vm.option}}):_vm._e(),_c('div',{staticClass:\"l-modal-buttons\"},[(_vm.showCancel)?_c('PrimaryButton',{class:_vm.cancelClass,on:{\"click\":_vm.doCancel}},[_vm._t(\"cancel-text\",function(){return [_vm._v(\" Cancel \")]})],2):_vm._e(),_vm._t(\"extra-buttons\"),(_vm.showConfirm)?_c('PrimaryButton',{class:_vm.confirmClass,on:{\"click\":_vm.doConfirm}},[_vm._t(\"confirm-text\",function(){return [_vm._v(\" Confirm \")]})],2):_vm._e()],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal__confirmation-toggle\",on:{\"click\":_vm.toggle}},[_c('div',{class:_vm.confirmationClass},[(!_vm.setting)?_c('span',{staticClass:\"fas fa-check\"}):_vm._e(),_c('div',{staticClass:\"c-modal__confirmation-toggle__tooltip\"},[_vm._v(\" \"+_vm._s(_vm.tooltipText)+\" \")])]),_c('span',{staticClass:\"c-modal__confirmation-toggle__text\"},[_vm._v(\" Don't show this message again \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalConfirmationCheck.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalConfirmationCheck.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalConfirmationCheck.vue?vue&type=template&id=4572a7f3&\"\nimport script from \"./ModalConfirmationCheck.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalConfirmationCheck.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalWrapperChoice.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalWrapperChoice.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalWrapperChoice.vue?vue&type=template&id=02f37e5f&scoped=true&\"\nimport script from \"./ModalWrapperChoice.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalWrapperChoice.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModalWrapperChoice.vue?vue&type=style&index=0&id=02f37e5f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"02f37e5f\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CloudInvalidDataModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CloudInvalidDataModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CloudInvalidDataModal.vue?vue&type=template&id=17c2e372&\"\nimport script from \"./CloudInvalidDataModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CloudInvalidDataModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{staticClass:\"c-modal-options__large\",attrs:{\"cancel-class\":'c-modal-message__okay-btn',\"confirm-class\":'c-modal-message__okay-btn c-modal__confirm-btn',\"confirm-fn\":_vm.confirm},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Load Game from Cloud \")]},proxy:true},{key:\"cancel-text\",fn:function(){return [_vm._v(\" Keep Local Save \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Overwrite Local with Cloud Save \")]},proxy:true}])},[(_vm.hasDifferentName)?_c('span',[_vm._v(\" Your Local and Cloud Saves have \"),_c('b',[_vm._v(\"different names\")]),_vm._v(\". \")]):(_vm.older)?_c('span',[_vm._v(\" Loading from the Cloud would \"),_c('b',[_vm._v(\"load a save with less playtime\")]),_vm._v(\". \")]):(_vm.farther)?_c('span',[_vm._v(\" Loading from the Cloud would \"),_c('b',[_vm._v(\"cause you to lose progress\")]),_vm._v(\". \")]):_c('span',[_vm._v(\" Your Local Save and Cloud Save \"),_c('b',[_vm._v(\"appear to have similar amounts of progress\")]),_vm._v(\". \")]),_vm._v(\" Please select the save you want to load. \"),_c('br'),_c('br'),_c('SaveInfoEntry',{attrs:{\"save-data\":_vm.conflict.local,\"other-data\":_vm.conflict.cloud,\"save-id\":_vm.conflict.saveId,\"show-name\":_vm.hasDifferentName,\"save-type\":\"Local Save\"}}),_c('SaveInfoEntry',{attrs:{\"save-data\":_vm.conflict.cloud,\"other-data\":_vm.conflict.local,\"save-id\":_vm.conflict.saveId,\"show-name\":_vm.hasDifferentName,\"save-type\":\"Cloud Save\"}}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.suggestionText)}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-modal-options__save-record\"},[_c('h3',[_vm._v(_vm._s(_vm.saveType)+\" \"),(_vm.saveId)?_c('span',[_vm._v(\"(Slot #\"+_vm._s(_vm.saveId + 1)+\"):\")]):_vm._e()]),(_vm.showName)?_c('span',[(_vm.name)?_c('span',[_vm._v(\" Save Name: \"+_vm._s(_vm.name)+\" \")]):_c('span',[_vm._v(\" Unnamed Save \")]),_c('br')]):_vm._e(),_vm._v(\" \"+_vm._s(_vm.timePlayed)+\" \"),_c('br'),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.antimatter)}}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.prestigeCount)}}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.prestigeResource)}}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.extraProgressIndicator)}}),_c('br'),_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveInfoEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveInfoEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SaveInfoEntry.vue?vue&type=template&id=0ede7791&\"\nimport script from \"./SaveInfoEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./SaveInfoEntry.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CloudLoadConflictModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CloudLoadConflictModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CloudLoadConflictModal.vue?vue&type=template&id=58859b9a&\"\nimport script from \"./CloudLoadConflictModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CloudLoadConflictModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{staticClass:\"c-modal-options__large\",attrs:{\"cancel-class\":'c-modal-message__okay-btn',\"confirm-class\":'c-modal-message__okay-btn c-modal__confirm-btn',\"cancel-fn\":_vm.overwrite},on:{\"confirm\":function($event){return _vm.doNotSave()}},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Save Game to Cloud \")]},proxy:true},{key:\"cancel-text\",fn:function(){return [_vm._v(\" Overwrite Cloud Save \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Do not overwrite \")]},proxy:true}])},[(_vm.wrongHash)?_c('span',[_vm._v(\" Your Cloud Save has been \"),_c('b',[_vm._v(\"changed by a different device\")]),_vm._v(\" since you last saved to the Cloud this session. \")]):(_vm.hasDifferentName)?_c('span',[_vm._v(\" Your Local and Cloud Saves have \"),_c('b',[_vm._v(\"different names\")]),_vm._v(\". \")]):(_vm.older)?_c('span',[_vm._v(\" Saving to the Cloud would \"),_c('b',[_vm._v(\"overwrite an older save\")]),_vm._v(\". \")]):(_vm.farther)?_c('span',[_vm._v(\" Saving to the Cloud would \"),_c('b',[_vm._v(\"overwrite a save with more progress\")]),_vm._v(\". \")]):_c('span',[_vm._v(\" Your Local Save and Cloud Save \"),_c('b',[_vm._v(\"appear to have similar amounts of progress\")]),_vm._v(\". \")]),_c('br'),_c('SaveInfoEntry',{attrs:{\"save-data\":_vm.conflict.local,\"other-data\":_vm.conflict.cloud,\"save-id\":_vm.conflict.saveId,\"show-name\":_vm.hasDifferentName,\"save-type\":\"Local Save\"}}),_c('SaveInfoEntry',{attrs:{\"save-data\":_vm.conflict.cloud,\"other-data\":_vm.conflict.local,\"save-id\":_vm.conflict.saveId,\"show-name\":_vm.hasDifferentName,\"save-type\":\"Cloud Save\"}}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.suggestionText)}}),_c('br'),_c('span',[_vm._v(\" Not overwriting will turn off Cloud saving and you will need to manually turn it back on again if you want to use it. \"),_c('span',{attrs:{\"ach-tooltip\":_vm.noOverwriteInfo}},[_c('i',{staticClass:\"fas fa-question-circle\"})])]),_c('span',[_vm._v(\" Overwriting will force a save to the Cloud in this particular instance; in most cases this should prevent this modal from reappearing afterwards. \"),_c('span',{attrs:{\"ach-tooltip\":_vm.overwriteInfo}},[_c('i',{staticClass:\"fas fa-question-circle\"})])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CloudSaveConflictModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CloudSaveConflictModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CloudSaveConflictModal.vue?vue&type=template&id=14a6b2c0&\"\nimport script from \"./CloudSaveConflictModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CloudSaveConflictModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"challenges\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.entranceLabel)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Begin \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.condition)+\" \")]),(!_vm.challengeIsCompleted)?_c('div',{staticClass:\"c-modal-message__text\"},[_c('br'),_vm._v(\" \"+_vm._s(_vm.reward)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengeStartModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengeStartModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityChallengeStartModal.vue?vue&type=template&id=2d8d6fcd&\"\nimport script from \"./EternityChallengeStartModal.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityChallengeStartModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"challenges\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.entranceLabel)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Begin \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.condition)+\" \")]),(!_vm.challengeIsCompleted)?_c('div',{staticClass:\"c-modal-message__text\"},[_c('br'),_vm._v(\" \"+_vm._s(_vm.reward)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityChallengeStartModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityChallengeStartModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityChallengeStartModal.vue?vue&type=template&id=6b434bc9&\"\nimport script from \"./InfinityChallengeStartModal.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityChallengeStartModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal-message l-modal-content--centered\"},[(_vm.modal.closeButton)?_c('ModalCloseButton',{class:_vm.isThemeS12 ? 'c-modal__close-btn' : 'c-modal__close-btn--tiny',on:{\"click\":_vm.emitClose}}):(_vm.isThemeS12)?_c('ModalCloseButton',{staticClass:\"c-modal__close-btn c-modal__close-btn--disabled\"}):_vm._e(),_c('div',{staticClass:\"c-modal-message__text\",domProps:{\"innerHTML\":_vm._s(_vm.message)}}),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn\",on:{\"click\":_vm.handleClick}},[_vm._v(\" Okay \")]),(_vm.isThemeS12)?_c('div',{staticClass:\"c-modal__title\"},[_vm._v(\" Message \")]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MessageModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MessageModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MessageModal.vue?vue&type=template&id=4f807ade&\"\nimport script from \"./MessageModal.vue?vue&type=script&lang=js&\"\nexport * from \"./MessageModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"challenges\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.entranceLabel)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Begin \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.condition)+\" \")]),(!_vm.challengeIsCompleted)?_c('div',{staticClass:\"c-modal-message__text\"},[_c('br'),_vm._v(\" \"+_vm._s(_vm.reward)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalChallengeStartModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalChallengeStartModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalChallengeStartModal.vue?vue&type=template&id=4cf73af0&\"\nimport script from \"./NormalChallengeStartModal.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalChallengeStartModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"antimatterGalaxy\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AntimatterGalaxyModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AntimatterGalaxyModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AntimatterGalaxyModal.vue?vue&type=template&id=c3b2c3b6&\"\nimport script from \"./AntimatterGalaxyModal.vue?vue&type=script&lang=js&\"\nexport * from \"./AntimatterGalaxyModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":_vm.isDoomed ? 'armageddon' : undefined},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[(!_vm.isDoomed)?_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Dooming your Reality will reset everything except Challenge records, Celestial progress and anything under the General and Reality header on the Statistics tab. You will not gain any rewards from your progress in your current Reality. Dooming your Reality will also purge most of your unprotected Glyphs and disable certain game mechanics. \"),_c('br'),_c('br'),_vm._v(\" Are you sure you want to do this? \")]):_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ArmageddonModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ArmageddonModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ArmageddonModal.vue?vue&type=template&id=435c0fa2&\"\nimport script from \"./ArmageddonModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ArmageddonModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ResetModal',{attrs:{\"header\":\"You are about to Infinity\",\"message\":_vm.message,\"gained-resources\":_vm.ipGainInfo,\"starting-resources\":_vm.startingResources,\"confirm-fn\":_vm.handleYesClick,\"alternate-condition\":_vm.isFirstInfinity,\"alternate-text\":_vm.message,\"confirm-option\":_vm.isFirstInfinity ? undefined : 'bigCrunch'}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":_vm.confirmOption},on:{\"confirm\":_vm.confirmFn},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.header)+\" \")]},proxy:true}])},[(!_vm.alternateCondition)?_c('div',[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \"),_c('br')]),_c('br'),_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.gainedResources)+\" \")]),_c('br'),(_vm.startingResources)?_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.startingResources)+\" \")]):_vm._e()]):_c('div',[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.alternateText)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResetModal.vue?vue&type=template&id=6bddd374&\"\nimport script from \"./ResetModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ResetModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BigCrunchModal.vue?vue&type=template&id=26523be9&\"\nimport script from \"./BigCrunchModal.vue?vue&type=script&lang=js&\"\nexport * from \"./BigCrunchModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"dimensionBoost\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionBoostModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionBoostModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DimensionBoostModal.vue?vue&type=template&id=7ee1ffcf&\"\nimport script from \"./DimensionBoostModal.vue?vue&type=script&lang=js&\"\nexport * from \"./DimensionBoostModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Begin \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \"),_c('br'),_c('br'),_c('div',{staticClass:\"c-modal-celestial__run-effects\"},_vm._l((_vm.effects),function(effect,i){return _c('div',{key:i,staticClass:\"c-modal-celestial__run-effects__line\",class:{ 'o-pelle-disabled': _vm.number === 4 && i===0 && _vm.dimboostUncapped}},[(effect.trim())?_c('b',[_vm._v(\"•\")]):_vm._e(),_c('b',[_vm._v(\" \")]),_vm._v(\" \"+_vm._s(effect)+\" \")])}),0),(_vm.description)?_c('div',{staticClass:\"reality-description\"},[_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.description)+\" \")]):_vm._e(),_c('br'),_c('br'),_c('div',[_vm._v(\" \"+_vm._s(_vm.extraLine)+\" \")]),(_vm.number === 4)?_c('span',_vm._l((7),function(id){return _c('EnterCelestialsRaPet',{key:id,attrs:{\"pet-id\":id - 1}})}),1):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('span',{style:(_vm.color)},[_vm._v(\" \"+_vm._s(_vm.name)+\" \"+_vm._s(_vm.gainText)+\". \"),_c('br')]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnterCelestialsRaPet.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnterCelestialsRaPet.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnterCelestialsRaPet.vue?vue&type=template&id=3ef0ff9e&\"\nimport script from \"./EnterCelestialsRaPet.vue?vue&type=script&lang=js&\"\nexport * from \"./EnterCelestialsRaPet.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnterCelestialsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnterCelestialsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnterCelestialsModal.vue?vue&type=template&id=5652f348&scoped=true&\"\nimport script from \"./EnterCelestialsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./EnterCelestialsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EnterCelestialsModal.vue?vue&type=style&index=0&id=5652f348&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5652f348\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"dilation\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.entranceLabel)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Enter \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.EPSinceLabel)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.message)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnterDilationModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnterDilationModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnterDilationModal.vue?vue&type=template&id=278c81b4&\"\nimport script from \"./EnterDilationModal.vue?vue&type=script&lang=js&\"\nexport * from \"./EnterDilationModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ResetModal',{attrs:{\"header\":_vm.exitingEC ? 'Complete Eternity Challenge' : 'You are about to Eternity',\"message\":_vm.message,\"gained-resources\":_vm.gainedEPOnEternity,\"starting-resources\":_vm.startWithIP,\"confirm-fn\":_vm.handleYesClick,\"alternate-condition\":_vm.exitingEC,\"alternate-text\":_vm.exitingEC ? _vm.eternityChallenge : undefined,\"confirm-option\":\"eternity\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityModal.vue?vue&type=template&id=22660dbc&\"\nimport script from \"./EternityModal.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"exitChallenge\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to \"+_vm._s(_vm.isRestarting ? \"restart\" : \"exit\")+\" \"+_vm._s(_vm.challengeName)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.isRestarting ? \"Restart\" : \"Exit\")+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[(_vm.isRestarting)?_c('span',[_vm._v(\" You will immediately re-enter \"+_vm._s(_vm.challengeName)+\" again after confirming this modal. \")]):_c('span',[_vm._v(\" This will place you back into a regular \"+_vm._s(_vm.normalName)+\" without any restrictions. \")]),(_vm.hasHigherLayers)?_c('span',[_vm._v(\" Other effects coming from higher-layer restrictions will still continue to apply. \")]):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExitChallengeModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExitChallengeModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ExitChallengeModal.vue?vue&type=template&id=7a7f466d&\"\nimport script from \"./ExitChallengeModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ExitChallengeModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"dilation\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [(_vm.isDoomed)?_c('span',[_vm._v(\" You cannot exit Dilation while Doomed \")]):_c('span',[_vm._v(\" You are about to exit Dilation \")])]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Exit \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[(_vm.isDoomed)?_c('span',[_vm._v(\" Dilation is permanent. You will \"+_vm._s(_vm.gainText)+\" and reset your current eternity. You will not gain any Eternity Points. \")]):_c('span',[_vm._v(\" If you exit Dilation now, you will \"+_vm._s(_vm.gainText)+\". \")]),(_vm.isInEC)?_c('div',[_vm._v(\" You will also exit your current Eternity Challenge as well. \")]):_vm._e(),_c('br'),_vm._v(\" Are you sure you want to proceed? \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExitDilationModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExitDilationModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ExitDilationModal.vue?vue&type=template&id=50a48840&\"\nimport script from \"./ExitDilationModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ExitDilationModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":!_vm.willHardReset,\"show-confirm\":_vm.willHardReset,\"confirm-class\":\"o-primary-btn--width-medium c-modal__confirm-btn c-modal-hard-reset-btn\"},on:{\"confirm\":_vm.hardReset},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" HARD RESET \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" HARD RESET \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Please confirm your desire to hard reset this save slot. \"),_c('span',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\"Deleting your save will not unlock anything secret.\")]),_vm._v(\" Type in \\\"I promise not to simp for Lai'tela\\\" to confirm. \"),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" THIS WILL WIPE YOUR SAVE. \"),(_vm.hasExtraNG)?_c('span',[_c('br'),_vm._v(\" This will also remove any Glyph cosmetics you have unlocked from completing the game! \")]):_vm._e(),(_vm.hasSpeedrun)?_c('span',[_c('br'),_vm._v(\" You will lose the ability to do a Speedrun. To restart your run, use the \\\"Start Speedrun\\\" button instead. \")]):_vm._e()])]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input c-modal-hard-reset__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.input)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.input=$event.target.value}}}),_c('div',{staticClass:\"c-modal-hard-reset-info\"},[(_vm.willHardReset)?_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" Phrase confirmed - continuing will irreversibly delete your save! \")]):_c('div',[_vm._v(\" Type in the correct phrase to hard reset. \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HardResetModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HardResetModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HardResetModal.vue?vue&type=template&id=e1f1820a&\"\nimport script from \"./HardResetModal.vue?vue&type=script&lang=js&\"\nexport * from \"./HardResetModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":_vm.confirmationToDisable,\"show-confirm\":_vm.canConfirm},on:{\"confirm\":function($event){return _vm.confirmModal(false)}},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to Reality \")]},proxy:true},(_vm.canSacrifice && _vm.canConfirm)?{key:\"extra-buttons\",fn:function(){return [_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn\",on:{\"click\":function($event){return _vm.confirmModal(true)}}},[_vm._v(\" Sacrifice \")])]},proxy:true}:null],null,true)},[(_vm.firstReality)?_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.firstRealityText)+\" \")]):_vm._e(),_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.gained)+\" \")]),(!_vm.firstReality)?_c('div',{staticClass:\"l-glyph-selection__row\"},_vm._l((_vm.glyphs),function(glyph,index){return _c('GlyphComponent',{key:index,class:_vm.glyphClass(index),attrs:{\"glyph\":glyph,\"is-in-modal\":true,\"ignore-modified-level\":true,\"show-sacrifice\":_vm.canSacrifice},nativeOn:{\"click\":function($event){return _vm.select(index)}}})}),1):_vm._e(),(!_vm.firstReality)?_c('div',[_vm._v(\" \"+_vm._s(_vm.levelStats)+\" \"),_c('br'),_c('b',{staticClass:\"o-warning\"},[_vm._v(\" \"+_vm._s(_vm.warnText)+\" \")])]):_vm._e(),(_vm.simRealities > 1)?_c('div',[_c('br'),_vm._v(\" After choosing this Glyph the game will simulate the rest of your Realities, \"),_c('br'),_vm._v(\" automatically choosing another \"+_vm._s(_vm.quantifyInt(\"Glyph\", _vm.simRealities - 1))+\" based on your Glyph filter settings. \")]):_vm._e(),(_vm.willAutoPurge)?_c('div',[_c('br'),_vm._v(\" Auto-purge is currently enabled; your selected Glyph \"),_c('br'),_vm._v(\" may not appear in your inventory after it triggers. \")]):_vm._e(),(!_vm.hasSpace)?_c('div',{staticClass:\"o-warning\"},[(_vm.simRealities > 1)?_c('span',[_vm._v(\" You will be simulating more Realities than you have open inventory space for; this may result in some Glyphs being Sacrificed. \")]):_c('span',[_vm._v(\" You do not have any free inventory space - your selected Glyph will be automatically \"+_vm._s(_vm.canSacrifice ? \"Sacrificed\" : \"deleted\")+\"! \")])]):_vm._e(),(_vm.confirmationToDisable)?_c('div',[_c('br'),_vm._v(\" You can force this modal to appear (even if disabled) by Shift-clicking the Reality button. \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityModal.vue?vue&type=template&id=4e13ca48&scoped=true&\"\nimport script from \"./RealityModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RealityModal.vue?vue&type=style&index=0&id=4e13ca48&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4e13ca48\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"replicantiGalaxy\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiGalaxyModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiGalaxyModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReplicantiGalaxyModal.vue?vue&type=template&id=3896b791&\"\nimport script from \"./ReplicantiGalaxyModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ReplicantiGalaxyModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"resetReality\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to reset your \"+_vm._s(_vm.resetTerm)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Reset \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" This will reset you to the start of your \"+_vm._s(_vm.resetTerm)+\", giving you no rewards from your progress in your current \"+_vm._s(_vm.resetTerm)+\". \"),_c('br'),_c('br'),_vm._v(\" Are you sure you want to do this? \"),(_vm.canReality)?_c('div',{staticClass:\"c-has-rewards\"},[_c('br'),_vm._v(\" You can currently complete a Reality for all its normal rewards, which you will not receive if you Reset here. To get rewards, use the \\\"Make a new Reality\\\" button. \")]):_vm._e(),_c('br')])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetRealityModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetRealityModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResetRealityModal.vue?vue&type=template&id=5e466ec0&scoped=true&\"\nimport script from \"./ResetRealityModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ResetRealityModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ResetRealityModal.vue?vue&type=style&index=0&id=5e466ec0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5e466ec0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ResetModal',{attrs:{\"header\":\"You are about to Mend the Multiverse\",\"message\":_vm.message,\"gained-resources\":_vm.gainedResources,\"confirm-fn\":_vm.handleYesClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetMendingModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetMendingModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResetMendingModal.vue?vue&type=template&id=5e22f064&\"\nimport script from \"./ResetMendingModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ResetMendingModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"c-modal-options__large\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Animation Options \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-options__button-container\"},[(_vm.infinityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Big Crunch:\"},model:{value:(_vm.bigCrunch),callback:function ($$v) {_vm.bigCrunch=$$v},expression:\"bigCrunch\"}}):_vm._e(),(_vm.eternityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Eternity:\"},model:{value:(_vm.eternity),callback:function ($$v) {_vm.eternity=$$v},expression:\"eternity\"}}):_vm._e(),(_vm.dilationUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Dilation:\"},model:{value:(_vm.dilation),callback:function ($$v) {_vm.dilation=$$v},expression:\"dilation\"}}):_vm._e(),(_vm.tachyonsUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Tachyon particles:\"},model:{value:(_vm.tachyonParticles),callback:function ($$v) {_vm.tachyonParticles=$$v},expression:\"tachyonParticles\"}}):_vm._e(),(_vm.realityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Reality:\"},model:{value:(_vm.reality),callback:function ($$v) {_vm.reality=$$v},expression:\"reality\"}}):_vm._e(),(!_vm.isS11Active)?_c('div',[(_vm.animatedThemeUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"onclick\":\"Themes.find(Theme.currentName()).set();\",\"text\":\"Background:\"},model:{value:(_vm.background),callback:function ($$v) {_vm.background=$$v},expression:\"background\"}}):_vm._e()],1):_c('div',[(_vm.animatedThemeUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"onclick\":\"Themes.find(Theme.currentName()).set();\",\"text\":\"Blobsnow:\"},model:{value:(_vm.background),callback:function ($$v) {_vm.background=$$v},expression:\"background\"}}):_vm._e()],1),(_vm.isS11Active)?_c('div',{staticClass:\"c-blobflake-slider o-primary-btn o-primary-btn--modal-option o-primary-btn--slider\"},[_c('b',[_vm._v(_vm._s(_vm.quantifyInt(\"Blobflake\", parseInt(_vm.blobSnowflakes))))]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.blobSnowflakes},on:{\"input\":function($event){return _vm.adjustSliderValue($event)}}},'SliderComponent',_vm.sliderProps,false))],1):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('PrimaryToggleButton',{staticClass:\"o-primary-btn--modal-option\",style:(_vm.styleObject),attrs:{\"value\":_vm.value,\"label\":_vm.text},on:{\"input\":_vm.emitInput}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalOptionsToggleButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalOptionsToggleButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalOptionsToggleButton.vue?vue&type=template&id=495e63a8&\"\nimport script from \"./ModalOptionsToggleButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalOptionsToggleButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{staticClass:\"c-modal-options l-modal-options\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._t(\"header\")]},proxy:true}],null,true)},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalWrapperOptions.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalWrapperOptions.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalWrapperOptions.vue?vue&type=template&id=aa4b6f06&\"\nimport script from \"./ModalWrapperOptions.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalWrapperOptions.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AnimationOptionsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AnimationOptionsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AnimationOptionsModal.vue?vue&type=template&id=13fcb5d4&scoped=true&\"\nimport script from \"./AnimationOptionsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./AnimationOptionsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AnimationOptionsModal.vue?vue&type=style&index=0&id=13fcb5d4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13fcb5d4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"l-wrapper\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Away Progress Options \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-options__button-container\"},_vm._l((_vm.all),function(name){return _c('AwayProgressOptionsEntry',{key:name,attrs:{\"name\":name}})}),1),_vm._v(\" Note: Selected resources will only show if they've increased. \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('ModalOptionsToggleButton',{attrs:{\"text\":_vm.text},model:{value:(_vm.setting),callback:function ($$v) {_vm.setting=$$v},expression:\"setting\"}}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressOptionsEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressOptionsEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AwayProgressOptionsEntry.vue?vue&type=template&id=0e445e71&\"\nimport script from \"./AwayProgressOptionsEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./AwayProgressOptionsEntry.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressOptionsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressOptionsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AwayProgressOptionsModal.vue?vue&type=template&id=5c020f42&scoped=true&\"\nimport script from \"./AwayProgressOptionsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./AwayProgressOptionsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AwayProgressOptionsModal.vue?vue&type=style&index=0&id=5c020f42&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5c020f42\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Automatic Backup Saves \")]},proxy:true}])},[_c('div',{staticClass:\"c-info c-modal--short\"},[_vm._v(\" The game makes automatic backups based on time you have spent online or offline. Timers for online backups only run when the game is open, and offline backups only save to the slot with the longest applicable timer. Additionally, your current save is saved into the last slot any time a backup from here is loaded. \"),_c('div',{staticClass:\"c-modal__confirmation-toggle\",on:{\"click\":_vm.toggleOffline}},[_c('div',{class:_vm.offlineOptionClass()},[(_vm.ignoreOffline)?_c('span',{staticClass:\"fas fa-check\"}):_vm._e()]),_c('span',{staticClass:\"c-modal__confirmation-toggle__text\"},[_vm._v(\" Load with offline progress disabled \")])]),_c('div',{staticClass:\"c-entry-container\"},_vm._l((_vm.backupSlots),function(slot){return _c('BackupEntry',{key:_vm.nextSave + slot.id,staticClass:\"l-backup-entry\",attrs:{\"slot-data\":slot}})}),1),_vm._v(\" These backups are still stored in the same place as your game save and can still be lost if you do anything external to the game which would delete your save itself, such as \"+_vm._s(_vm.deleteText)+\". You can import/export all backups at once as files, using these buttons: \"),_c('div',{staticClass:\"c-backup-file-ops\"},[_c('PrimaryButton',{staticClass:\"o-btn-file-ops\",attrs:{\"onclick\":\"GameStorage.exportBackupsAsFile()\"}},[_vm._v(\" Export as file \")]),_c('PrimaryButton',{staticClass:\"o-btn-file-ops\"},[_c('input',{staticClass:\"c-file-import\",attrs:{\"type\":\"file\",\"accept\":\".txt\"},on:{\"change\":_vm.importAsFile}}),_c('label',{attrs:{\"for\":\"file\"}},[_vm._v(\"Import from file\")])])],1),_vm._v(\" Each of your three save slots has its own separate set of backups. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-bordered-entry\"},[_c('h3',[_vm._v(\"Slot #\"+_vm._s(_vm.slotData.id)+\":\")]),_c('span',[_vm._v(_vm._s(_vm.progressStr))]),_c('span',[_vm._v(\" \"+_vm._s(_vm.slotType)+\" \")]),_c('span',{staticClass:\"c-fixed-height\"},[_vm._v(_vm._s(_vm.lastSaved))]),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium\",class:{ 'o-primary-btn--disabled' : !_vm.save },on:{\"click\":function($event){return _vm.load()}}},[_vm._v(\" Load \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BackupEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BackupEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BackupEntry.vue?vue&type=template&id=4270332c&scoped=true&\"\nimport script from \"./BackupEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./BackupEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BackupEntry.vue?vue&type=style&index=0&id=4270332c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4270332c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BackupWindowModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BackupWindowModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BackupWindowModal.vue?vue&type=template&id=2cffffa6&scoped=true&\"\nimport script from \"./BackupWindowModal.vue?vue&type=script&lang=js&\"\nexport * from \"./BackupWindowModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BackupWindowModal.vue?vue&type=style&index=0&id=2cffffa6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2cffffa6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"c-modal-options__large\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Confirmation Options \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-options__button-container\"},[(_vm.noConfirmations)?_c('span',[_vm._v(\" You do not have anything that requires confirmation, but if you did it would appear here. \")]):_vm._e(),_vm._l((_vm.count),function(entryNumber){return _c('ConfirmationOptionsEntry',{key:entryNumber,attrs:{\"index\":entryNumber - 1}})})],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('ModalOptionsToggleButton',{style:(_vm.styleObject),attrs:{\"text\":_vm.name},model:{value:(_vm.option),callback:function ($$v) {_vm.option=$$v},expression:\"option\"}}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConfirmationOptionsEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConfirmationOptionsEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConfirmationOptionsEntry.vue?vue&type=template&id=e4f2cfe4&\"\nimport script from \"./ConfirmationOptionsEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./ConfirmationOptionsEntry.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConfirmationOptionsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConfirmationOptionsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConfirmationOptionsModal.vue?vue&type=template&id=ce706f64&\"\nimport script from \"./ConfirmationOptionsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ConfirmationOptionsModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"cancel-fn\":_vm.cancelSet},on:{\"confirm\":_vm.chooseSet},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Choose a Glyph Cosmetic Set \")]},proxy:true}])},[_c('div',{staticClass:\"c-center\"},[_c('ExpandingControlBox',{staticClass:\"o-primary-btn c-dropdown-btn\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"c-dropdown-header\"},[_vm._v(\" ▼ Available Sets ▼ \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.setName)+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('CosmeticSetDropdown')]},proxy:true}])}),(_vm.currentSet)?_c('div',[_vm._v(\" The \\\"\"+_vm._s(_vm.currentSet.name)+\"\\\" Set contains the following \"+_vm._s(_vm.setContents)+\": \"),_c('br'),_vm._l((_vm.symbols),function(symbol){return _c('span',{key:symbol,staticClass:\"o-single-symbol\"},[_vm._v(\" \"+_vm._s(symbol)+\" \")])}),_c('br'),_vm._l((_vm.colors),function(color){return _c('span',{key:color,staticClass:\"o-single-glyph\"},[_c('GlyphComponent',_vm._b({attrs:{\"glyph\":_vm.fakeGlyph(color)}},'GlyphComponent',_vm.glyphIconProps,false))],1)})],2):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-select-theme\"},[_c('div',{staticClass:\"l-select-theme__inner\"},_vm._l((_vm.lockedSets),function(set){return _c('div',{key:set.id,staticClass:\"o-primary-btn l-select-theme__item c-select-theme__item\",on:{\"click\":function($event){return _vm.select(set)}}},[_vm._v(\" \"+_vm._s(set.name)+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CosmeticSetDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CosmeticSetDropdown.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CosmeticSetDropdown.vue?vue&type=template&id=73710f17&\"\nimport script from \"./CosmeticSetDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./CosmeticSetDropdown.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CosmeticSetChoiceModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CosmeticSetChoiceModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CosmeticSetChoiceModal.vue?vue&type=template&id=eb4324ba&scoped=true&\"\nimport script from \"./CosmeticSetChoiceModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CosmeticSetChoiceModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CosmeticSetChoiceModal.vue?vue&type=style&index=0&id=eb4324ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"eb4324ba\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"c-modal-options__large\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Glyph Display Options \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-options__button-container\"},[_c('ModalOptionsToggleButton',{attrs:{\"text\":\"New Glyph identifier:\"},model:{value:(_vm.newGlyphs),callback:function ($$v) {_vm.newGlyphs=$$v},expression:\"newGlyphs\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Unequipped Glyph identifier:\"},model:{value:(_vm.showUnequippedGlyphIcon),callback:function ($$v) {_vm.showUnequippedGlyphIcon=$$v},expression:\"showUnequippedGlyphIcon\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Always show Glyph effect dots:\"},model:{value:(_vm.glyphEffectDots),callback:function ($$v) {_vm.glyphEffectDots=$$v},expression:\"glyphEffectDots\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Fancy Glyph borders:\"},model:{value:(_vm.glyphBorders),callback:function ($$v) {_vm.glyphBorders=$$v},expression:\"glyphBorders\"}}),_c('button',{staticClass:\"o-primary-btn o-primary-btn--modal-option\",on:{\"click\":function($event){return _vm.cycleBG()}}},[_vm._v(\" Glyph BG color: \"+_vm._s(_vm.glyphBGStr)+\" \")]),_c('ModalOptionsToggleButton',{style:(_vm.noEffectStyle()),attrs:{\"text\":\"Always show Glyph Info:\"},model:{value:(_vm.showGlyphInfoByDefault),callback:function ($$v) {_vm.showGlyphInfoByDefault=$$v},expression:\"showGlyphInfoByDefault\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"High-contrast rarity colors:\"},model:{value:(_vm.highContrastRarity),callback:function ($$v) {_vm.highContrastRarity=$$v},expression:\"highContrastRarity\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Swap border and symbol colors:\"},model:{value:(_vm.swapGlyphColors),callback:function ($$v) {_vm.swapGlyphColors=$$v},expression:\"swapGlyphColors\"}}),_c('ExpandingControlBox',{staticClass:\"o-primary-btn c-dropdown-btn\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"c-dropdown-header\"},[_vm._v(\" ▼ Additional Glyph Info: ▼ \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.infoLabel)+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('SelectGlyphInfoDropdown')]},proxy:true}])})],1),_c('GlyphCustomization')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-glyph-customization-group\"},[_c('b',[_vm._v(\"Custom Glyph Appearance\")]),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"on\":\"Enabled\",\"off\":\"Disabled\"},model:{value:(_vm.enabled),callback:function ($$v) {_vm.enabled=$$v},expression:\"enabled\"}}),_c('br'),(_vm.hasCustomSets)?_c('div',[_vm._v(\" Reset Appearances to Default: \"),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",class:{ 'o-primary-btn--disabled' : !_vm.enabled },on:{\"click\":_vm.resetAll}},[_vm._v(\" All Types \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",class:{ 'o-primary-btn--disabled' : !_vm.enabled },on:{\"click\":_vm.resetSingle}},[_vm._v(\" This Type \")]),_c('br'),_c('i',[_vm._v(\"This will not reset any individually-modified Glyphs.\")]),_c('br'),_c('br'),_vm._v(\" Glyph Type: \"),_c('br'),_c('div',{staticClass:\"c-type-selection\"},_vm._l((_vm.cosmeticTypes),function(type,index){return _c('div',{key:type,class:_vm.typeClass(index),on:{\"click\":function($event){_vm.selectedIndex = index}}},[_c('GlyphComponent',_vm._b({directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(type.capitalize()),expression:\"type.capitalize()\"}],attrs:{\"glyph\":_vm.fakeGlyph(type)}},'GlyphComponent',_vm.glyphIconProps,false))],1)}),0),_c('GlyphCustomizationSingleType',{key:_vm.selectedIndex + _vm.enabled + _vm.defaultKeySwap,attrs:{\"type\":_vm.cosmeticTypes[_vm.selectedIndex]}}),_vm._v(\" Note: Some options may cause very poor color contrast or readability on certain themes with certain Glyph types. \")],1):_c('div',[_vm._v(\" You currently have no available options for changing the default appearance of your Glyphs. To unlock some, visit the Shop Tab or beat the game. \"),_c('br'),_c('br'),(_vm.hasSpecialTypes)?_c('span',[_vm._v(\" Enabling this setting will allow you to change individual Glyphs to special cosmetic types you have unlocked. \")]):_c('span',[_vm._v(\" Enabling or disabling this option will currently do nothing. \")])]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.resetIndividual}},[_vm._v(\" Reset all individual Glyph cosmetics \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-glyph-customization-entry\"},[(_vm.glyphId === -1)?_c('span',{staticClass:\"c-name\"},[_vm._v(\" Appearance Options for \"+_vm._s(_vm.name)+\" Glyphs \")]):_vm._e(),(_vm.type === 'companion')?_c('div',[_vm._v(\" Companion Glyphs cannot have their symbol modified. \")]):_c('GlyphCustomizationSlidingWindow',{attrs:{\"type\":_vm.type,\"is-symbol\":true,\"options\":_vm.symbols,\"glyph-id\":_vm.glyphId}}),_c('GlyphCustomizationSlidingWindow',{attrs:{\"type\":_vm.type,\"is-symbol\":false,\"options\":_vm.colors,\"glyph-id\":_vm.glyphId}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.options.length > 0)?_c('div',{class:_vm.containerClassObject()},[_c('div',{staticClass:\"o-default-option\"},[_c('div',{key:'default' + _vm.darkKeySwap,class:_vm.defaultOptionClassObject(),style:(_vm.boxStyle(_vm.defaultOption)),on:{\"click\":function($event){return _vm.select(undefined)}}},[_vm._v(\" \"+_vm._s(_vm.optionChar(_vm.defaultOption))+\" \")])]),_c('div',{staticClass:\"c-extra-options\"},[_c('div',{class:_vm.leftClass(),on:{\"click\":function($event){return _vm.slideWindow(-5)}}},[_vm._v(\" ⇐ \")]),_c('div',{class:_vm.rightClass(),on:{\"click\":function($event){return _vm.slideWindow(5)}}},[_vm._v(\" ⇒ \")]),_c('div',{staticClass:\"c-sliding-window\",style:(_vm.windowStyle())},_vm._l((_vm.options),function(set){return _c('div',{key:set[0] + set[1]},[_c('div',{staticClass:\"c-single-set\"},_vm._l((set),function(singleOption){return _c('div',{key:singleOption,class:_vm.optionClassObject(singleOption),style:(_vm.boxStyle(singleOption)),on:{\"click\":function($event){return _vm.select(singleOption)}}},[_vm._v(\" \"+_vm._s(_vm.optionChar(singleOption))+\" \")])}),0)])}),0)])]):_c('div',{staticClass:\"c-no-options\"},[_vm._v(\" You have no custom options for changing Glyph \"+_vm._s(_vm.attrString)+\"s. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCustomizationSlidingWindow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCustomizationSlidingWindow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphCustomizationSlidingWindow.vue?vue&type=template&id=1aab07c3&scoped=true&\"\nimport script from \"./GlyphCustomizationSlidingWindow.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphCustomizationSlidingWindow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphCustomizationSlidingWindow.vue?vue&type=style&index=0&id=1aab07c3&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1aab07c3\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCustomizationSingleType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCustomizationSingleType.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphCustomizationSingleType.vue?vue&type=template&id=376fede0&scoped=true&\"\nimport script from \"./GlyphCustomizationSingleType.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphCustomizationSingleType.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphCustomizationSingleType.vue?vue&type=style&index=0&id=376fede0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"376fede0\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCustomization.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCustomization.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphCustomization.vue?vue&type=template&id=800cf4e0&scoped=true&\"\nimport script from \"./GlyphCustomization.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphCustomization.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphCustomization.vue?vue&type=style&index=0&id=800cf4e0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"800cf4e0\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphDisplayOptionsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphDisplayOptionsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphDisplayOptionsModal.vue?vue&type=template&id=28f556e6&scoped=true&\"\nimport script from \"./GlyphDisplayOptionsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphDisplayOptionsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphDisplayOptionsModal.vue?vue&type=style&index=0&id=28f556e6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"28f556e6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"l-wrapper\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Modify Visible Tabs \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal--short\"},[_vm._v(\" Click a button to toggle showing a tab on/off. \"),_c('br'),_vm._v(\" Some tabs cannot be hidden, and you cannot hide your current tab. \"),_c('br'),_vm._v(\" Unhiding a tab in which all subtabs are hidden will also unhide all subtabs, and hiding all subtabs will also hide the tab. \"),_c('br'),(_vm.isAlmostEnd)?_c('div',[_vm._v(\" You cannot hide your tabs after unlocking the Galaxy Generator. \")]):_vm._e(),(_vm.isEnslaved)?_c('div',[_c('br'),_c('i',[_vm._v(\"You must... see everywhere...\")]),_c('br'),_vm._v(\" (You cannot hide your tabs within this Reality) \")]):_vm._e(),_vm._l((_vm.tabs),function(tab,index){return _c('HiddenTabGroup',{key:index,staticClass:\"l-hide-modal-tab-container\",attrs:{\"tab\":tab,\"change-enabled\":!_vm.isEnslaved && !_vm.isAlmostEnd}})})],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{class:_vm.rowClass,on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.toggleVisibility.apply(null, arguments)}}},[_vm._l((_vm.unlockedSubtabs),function(subtab,i){return _c('HiddenSubtabsButton',{key:i,attrs:{\"subtab\":subtab,\"tab\":_vm.tab,\"change-enabled\":_vm.changeEnabled}})}),_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.rowVisibleIndicatorTooltip),expression:\"rowVisibleIndicatorTooltip\"}],class:_vm.rowVisibleIndicatorClass,on:{\"click\":_vm.toggleVisibility}})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.hidable ? _vm.isCurrentSubtab ? 'You cannot hide the tab you are on' : '' : 'Options tabs cannot be hidden'),expression:\"hidable ? isCurrentSubtab ? 'You cannot hide the tab you are on' : '' : 'Options tabs cannot be hidden'\"}],class:_vm.classObject,on:{\"click\":_vm.toggleVisibility}},[_c('div',{staticClass:\"l-hide-modal-button\"},[(_vm.isModernUI)?_c('div',{staticClass:\"l-hide-modal-button__subtab-icon\",domProps:{\"innerHTML\":_vm._s(_vm.subtab.symbol)}}):_vm._e(),_c('div',{staticClass:\"l-hide-modal-button__subtab-name\"},[_vm._v(\" \"+_vm._s(_vm.subtab.name)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenSubtabsButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenSubtabsButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HiddenSubtabsButton.vue?vue&type=template&id=1134982d&scoped=true&\"\nimport script from \"./HiddenSubtabsButton.vue?vue&type=script&lang=js&\"\nexport * from \"./HiddenSubtabsButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HiddenSubtabsButton.vue?vue&type=style&index=0&id=1134982d&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1134982d\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenTabGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenTabGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HiddenTabGroup.vue?vue&type=template&id=c824015c&scoped=true&\"\nimport script from \"./HiddenTabGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./HiddenTabGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HiddenTabGroup.vue?vue&type=style&index=0&id=c824015c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c824015c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenTabsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenTabsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HiddenTabsModal.vue?vue&type=template&id=2d376db4&scoped=true&\"\nimport script from \"./HiddenTabsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./HiddenTabsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HiddenTabsModal.vue?vue&type=style&index=0&id=2d376db4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d376db4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Hotkey List \")]},proxy:true}])},[_c('span',{staticClass:\"c-modal-hotkeys l-modal-hotkeys\"},[_c('div',{staticClass:\"l-modal-hotkeys__column\"},[_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Buy 1 Dimension\")]),_c('kbd',[_vm._v(\"SHIFT\")]),_c('kbd',[_vm._v(\"1\")]),_vm._v(\"-\"),_c('kbd',[_vm._v(\"SHIFT\")]),_c('kbd',[_vm._v(\"8\")])]),_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Buy 10 Dimensions\")]),_c('kbd',[_vm._v(\"1\")]),_vm._v(\"-\"),_c('kbd',[_vm._v(\"8\")])]),_vm._l((_vm.hotkeyCount),function(index){return _c('div',{key:index},[(_vm.visible[index - 1])?_c('span',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(_vm._s(_vm.shortcutNames[index - 1]))]),_vm._l((_vm.shortcutKeys[index - 1]),function(key,i){return _c('kbd',{key:i},[_vm._v(\" \"+_vm._s(key)+\" \")])})],2):_vm._e()])})],2),_c('div',{staticClass:\"l-modal-hotkeys__column l-modal-hotkeys__column--right\"},[_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Modifier Key\")]),_c('kbd',[_vm._v(\"SHIFT\")])]),_c('span',{staticClass:\"c-modal-hotkeys__shift-description\"},[_vm._v(\" Shift is a modifier key that shows additional information on certain things and adjusts the function of certain buttons. \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.moreShiftKeyInfo)+\" \")]),_c('br'),_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Autobuyer Controls\")]),_c('kbd',[_vm._v(\"ALT\")])]),_c('span',{staticClass:\"c-modal-hotkeys__shift-description\"},[_vm._v(\" Alt is a modifier key that, when pressed in conjunction with any key that has a corresponding autobuyer, will toggle said autobuyer. \"),_c('br'),_vm._v(\" When pressing both Alt and Shift, you can toggle buying singles or buying max for the Antimatter Dimension and Tickspeed Autobuyers instead. \")]),_c('br'),_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Tab Movement\")]),_c('div',[_c('kbd',[_vm._v(\"←\")]),_c('kbd',[_vm._v(\"↓\")]),_c('kbd',[_vm._v(\"↑\")]),_c('kbd',[_vm._v(\"→\")])])]),_c('span',{staticClass:\"c-modal-hotkeys__shift-description\"},[_vm._v(\" Using the Arrow Keys will cycle you through the game's pages. The Up and Down arrows cycle you through tabs, and the Left and Right arrows cycle you through that tab's subtabs. \")]),_c('br'),_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Numpad Support\")])]),_c('span',{staticClass:\"c-modal-hotkeys__shift-description\"},[_vm._v(\" Due to technical reasons, pressing a numpad key will purchase 10 of a Dimension if possible, but pressing a numpad key with \"),_c('kbd',[_vm._v(\"SHIFT\")]),_vm._v(\" will not buy a single Dimension. It may instead, depending on your device, cause the page to scroll or change game tabs. \"),_c('kbd',[_vm._v(\"ALT\")]),_vm._v(\" will still work as expected. \")]),(_vm.isElectron)?[_c('br'),_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Window Zoom\")]),_c('kbd',[_vm._v(\"-\")]),_c('kbd',[_vm._v(\"0\")]),_c('kbd',[_vm._v(\"+\")])]),_c('span',{staticClass:\"c-modal-hotkeys__shift-description\"},[_vm._v(\" To adjust zoom level, hold \"),_c('kbd',[_vm._v(\"ctrl\")]),_vm._v(\" and press either \"),_c('kbd',[_vm._v(\"-\")]),_vm._v(\" or \"),_c('kbd',[_vm._v(\"+\")]),_vm._v(\" to decrease or increase zoom. \"),_c('kbd',[_vm._v(\"ctrl\")]),_c('kbd',[_vm._v(\"0\")]),_vm._v(\" will reset zoom to 100%. \")]),_c('br'),_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Fullscreen\")]),_c('kbd',[_vm._v(\"F10\")])]),_c('span',{staticClass:\"c-modal-hotkeys__shift-description\"},[_vm._v(\" To enter or exit fullscreen, press \"),_c('kbd',[_vm._v(\"F10\")]),_vm._v(\". \")])]:_vm._e()],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HotkeysModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HotkeysModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HotkeysModal.vue?vue&type=template&id=0543ac5f&scoped=true&\"\nimport script from \"./HotkeysModal.vue?vue&type=script&lang=js&\"\nexport * from \"./HotkeysModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HotkeysModal.vue?vue&type=style&index=0&id=0543ac5f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0543ac5f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"c-modal-options__large\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Info Display Options \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-options__button-container\"},[_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Show % gain:\"},model:{value:(_vm.showPercentage),callback:function ($$v) {_vm.showPercentage=$$v},expression:\"showPercentage\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Achievement IDs:\"},model:{value:(_vm.achievements),callback:function ($$v) {_vm.achievements=$$v},expression:\"achievements\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Achievement unlock state indicators:\"},model:{value:(_vm.achievementUnlockStates),callback:function ($$v) {_vm.achievementUnlockStates=$$v},expression:\"achievementUnlockStates\"}}),(_vm.infinityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Challenge IDs:\"},model:{value:(_vm.challenges),callback:function ($$v) {_vm.challenges=$$v},expression:\"challenges\"}}):_vm._e(),(_vm.eternityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Time Study IDs:\"},model:{value:(_vm.studies),callback:function ($$v) {_vm.studies=$$v},expression:\"studies\"}}):_vm._e(),(_vm.realityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Glyph effect dots:\"},model:{value:(_vm.glyphEffectDots),callback:function ($$v) {_vm.glyphEffectDots=$$v},expression:\"glyphEffectDots\"}}):_vm._e(),(_vm.realityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Reality Upgrade names:\"},model:{value:(_vm.realityUpgrades),callback:function ($$v) {_vm.realityUpgrades=$$v},expression:\"realityUpgrades\"}}):_vm._e(),(_vm.realityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Perk IDs:\"},model:{value:(_vm.perks),callback:function ($$v) {_vm.perks=$$v},expression:\"perks\"}}):_vm._e(),(_vm.alchemyUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Alchemy resource amounts:\"},model:{value:(_vm.alchemy),callback:function ($$v) {_vm.alchemy=$$v},expression:\"alchemy\"}}):_vm._e()],1),_vm._v(\" Note: All types of additional info above will always display when holding shift. \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfoDisplayOptionsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfoDisplayOptionsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfoDisplayOptionsModal.vue?vue&type=template&id=608493d3&\"\nimport script from \"./InfoDisplayOptionsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./InfoDisplayOptionsModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" News Options \")]},proxy:true}])},[_c('PrimaryButton',{staticClass:\"o-primary-btn o-primary-btn--option-wide\",attrs:{\"onclick\":\"GameOptions.toggleNews()\"}},[_vm._v(\" \"+_vm._s(_vm.newsOnOffLabel)+\" \")]),_c('div',{staticClass:\"o-primary-btn o-primary-btn--option-wide o-primary-btn--slider\"},[_c('b',[_vm._v(_vm._s(_vm.formatInt(parseInt(_vm.repeatBuffer)))+\" message repeat buffer\")]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.repeatBuffer},on:{\"input\":function($event){return _vm.adjustSliderValueRepeatBuffer($event)}}},'SliderComponent',_vm.sliderPropsRepeatBuffer,false))],1),_c('div',{staticClass:\"o-primary-btn o-primary-btn--option-wide o-primary-btn--slider\"},[_c('b',[_vm._v(_vm._s(_vm.formatPercents(parseFloat(_vm.AIChance)))+\" AI messages\")]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.AIChance},on:{\"input\":function($event){return _vm.adjustSliderValueAIChance($event)}}},'SliderComponent',_vm.sliderPropsAIChance,false))],1),_c('div',{staticClass:\"o-primary-btn o-primary-btn--option-wide o-primary-btn--slider\"},[_c('b',[_vm._v(_vm._s(_vm.formatPercents(parseFloat(_vm.speed)))+\" scroll speed\")]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.speed},on:{\"input\":function($event){return _vm.adjustSliderValueSpeed($event)}}},'SliderComponent',_vm.sliderPropsSpeed,false))],1),_c('ModalOptionsToggleButton',{staticClass:\"o-primary-btn o-primary-btn--option-wide\",attrs:{\"text\":\"Animation Effects:\"},model:{value:(_vm.includeAnimated),callback:function ($$v) {_vm.includeAnimated=$$v},expression:\"includeAnimated\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewsOptionsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewsOptionsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NewsOptionsModal.vue?vue&type=template&id=89f8897c&\"\nimport script from \"./NewsOptionsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./NewsOptionsModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.confirmPrefs}},[_c('h2',[_vm._v(\"Dimension Split Preference\")]),_c('div',{staticClass:\"l-modal-split-preferences\"},_vm._l((_vm.dimensionOptions),function(id,name){return _c('button',{key:name,class:_vm.classList(name),on:{\"click\":function($event){return _vm.select(name)}}},[(_vm.isPreferred(name))?_c('div',{staticClass:\"l-dim-path-priority o-dim-path-priority\"},[_vm._v(\" \"+_vm._s(_vm.isPreferred(name))+\" \")]):_vm._e(),_c('div',[_vm._v(\" \"+_vm._s(name)+\" \")])])}),0),_c('br'),_c('h2',[_vm._v(\"Pace Split Preference\")]),_c('div',{staticClass:\"l-modal-split-preferences\"},_vm._l((_vm.paceOptions),function(id,name){return _c('button',{key:name,class:_vm.classList(name),on:{\"click\":function($event){return _vm.select(name)}}},[_c('div',[_vm._v(\" \"+_vm._s(name)+\" \")])])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PreferredTreeModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PreferredTreeModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PreferredTreeModal.vue?vue&type=template&id=46d4ab1b&\"\nimport script from \"./PreferredTreeModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PreferredTreeModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"c-modal-options__large\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Modifying Single Glyph Appearance \")]},proxy:true}])},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":function($event){return _vm.setType(undefined)}}},[_vm._v(\" Reset this Glyph's appearance \")]),_c('GlyphCustomizationSingleType',{key:_vm.defaultKeySwap,attrs:{\"type\":_vm.glyphType,\"glyph-id\":_vm.glyphId}}),(_vm.cosmeticTypes && _vm.glyph.fixedCosmetic)?_c('div',[_vm._v(\" This Glyph's Cosmetic Type cannot be changed! \")]):(_vm.cosmeticTypes)?_c('div',{staticClass:\"c-special-type\"},[_vm._v(\" Apply Special Cosmetic Type: \"),_vm._l((_vm.cosmeticTypes),function(type){return _c('PrimaryButton',{key:type,class:_vm.cosmeticTypeClass(type),on:{\"click\":function($event){return _vm.setType(type)}}},[_vm._v(\" \"+_vm._s(type.capitalize())+\" \")])})],2):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleGlyphAppearanceModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleGlyphAppearanceModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingleGlyphAppearanceModal.vue?vue&type=template&id=4c765a29&scoped=true&\"\nimport script from \"./SingleGlyphAppearanceModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SingleGlyphAppearanceModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SingleGlyphAppearanceModal.vue?vue&type=style&index=0&id=4c765a29&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4c765a29\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-confirm\":_vm.isValidSpeed,\"confirmFn\":_vm.setTestSpeed},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Modify Testing Speed \")]},proxy:true}])},[_c('div',[_c('div',[_vm._v(\" Set game speed for testing purposes. A report will be displayed after settings the testing speed back to 1 informing how long was the speed up effecitvely. \")]),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" This speed up will affect EVERYTHING(with the exception of singularities(Lai'tela)) \")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.input)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.setTestSpeed.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)}],\"input\":[function($event){if($event.target.composing){ return; }_vm.input=$event.target.value},function($event){return _vm.handleTestSpeedInput()}]}}),_c('div',[_vm._v(\" \"+_vm._s(_vm.displayText)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedUpModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedUpModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedUpModal.vue?vue&type=template&id=27e51f8a&\"\nimport script from \"./SpeedUpModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedUpModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Testing Speed Up Report \")]},proxy:true}])},[_c('div',[_vm._v(\" The speed up lasted \"+_vm._s(_vm.durationText)+\". \"),_c('br'),_vm._v(\" It was equivalent to spending \"+_vm._s(_vm.effectiveDurationText)+\" in game. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedUpReportModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedUpReportModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedUpReportModal.vue?vue&type=template&id=471d4dc8&\"\nimport script from \"./SpeedUpReportModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedUpReportModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal-message l-modal-content--centered\"},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]),(_vm.messageIndex < 3)?_c('div',[_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn\",on:{\"click\":_vm.handleLeftButtonClick}},[_vm._v(\" \"+_vm._s(_vm.messageIndex < 2 ? \"Delete\" : \"Cancel\")+\" \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn\",on:{\"click\":_vm.handleRightButtonClick}},[_vm._v(\" \"+_vm._s(_vm.messageIndex >= 2 ? \"Delete\" : \"Cancel\")+\" \")])],1):_c('div',[_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn\",on:{\"click\":_vm.handleNoClick}},[_vm._v(\" Thank you \")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DeleteCompanionGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DeleteCompanionGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DeleteCompanionGlyphModal.vue?vue&type=template&id=2bc1994c&\"\nimport script from \"./DeleteCompanionGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./DeleteCompanionGlyphModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to delete a Glyph \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Deleting a Glyph will remove the Glyph from your inventory! \"),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" There is no benefit in deleting a Glyph before you have unlocked Glyph Sacrifice! \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DeleteGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DeleteGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DeleteGlyphModal.vue?vue&type=template&id=80dccf70&\"\nimport script from \"./DeleteGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./DeleteGlyphModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"sacrificeAll\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]),_c('br'),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" \"+_vm._s(_vm.extraMessage)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PurgeAllRejectedGlyphsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PurgeAllRejectedGlyphsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PurgeAllRejectedGlyphsModal.vue?vue&type=template&id=1af1209e&\"\nimport script from \"./PurgeAllRejectedGlyphsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PurgeAllRejectedGlyphsModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"sacrificeAll\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]),_c('br'),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" \"+_vm._s(_vm.extraMessage)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PurgeAllUnprotectedGlyphsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PurgeAllUnprotectedGlyphsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PurgeAllUnprotectedGlyphsModal.vue?vue&type=template&id=42c2d83c&\"\nimport script from \"./PurgeAllUnprotectedGlyphsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PurgeAllUnprotectedGlyphsModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"autoClean\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" This could delete Glyphs in your inventory that are good enough that you might want to use them later. Purging will Purge Glyphs based on your Purge mode. Are you sure you want to do this? \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.explanation)+\" \")]),_c('br'),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" \"+_vm._s(_vm.extraMessage)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PurgeGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PurgeGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PurgeGlyphModal.vue?vue&type=template&id=4139feba&\"\nimport script from \"./PurgeGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PurgeGlyphModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"glyphRefine\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to refine a Glyph \")]},proxy:true}])},[(_vm.resourceUnlocked)?_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Refining a Glyph will remove the Glyph from your inventory, and in return, you will increase your \"+_vm._s(_vm.resourceName)+\" Alchemy resource from \"+_vm._s(_vm.format(_vm.resourceAmount, 2, 2))+\" to \"+_vm._s(_vm.format(_vm.after, 2, 2))+\". This Glyph can raise your \"+_vm._s(_vm.resourceName)+\" resource to at most \"+_vm._s(_vm.format(_vm.cap, 2, 2))+\". \")]):_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" You cannot gain any \"+_vm._s(_vm.resourceName)+\" alchemy resource because you have not unlocked this Glyph's resource yet. You can still refine it anyway, but nothing will happen. Consider sacrificing the Glyph instead. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RefineGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RefineGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RefineGlyphModal.vue?vue&type=template&id=1be08cd0&\"\nimport script from \"./RefineGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RefineGlyphModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"glyphSacrifice\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to sacrifice a Glyph \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SacrificeGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SacrificeGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SacrificeGlyphModal.vue?vue&type=template&id=051694b8&\"\nimport script from \"./SacrificeGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SacrificeGlyphModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.header)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text-fit\"},[_c('span',[_vm._v(\" \"+_vm._s(_vm.message)+\" \")])]),_c('RealityAutobuyerBox',{staticClass:\"c-reality-pos\",attrs:{\"is-modal\":\"\"}}),_c('EternityAutobuyerBox',{staticClass:\"c-eternity-pos\",attrs:{\"is-modal\":\"\"}}),_c('BigCrunchAutobuyerBox',{staticClass:\"c-infinity-pos\",attrs:{\"is-modal\":\"\"}}),_c('GalaxyAutobuyerBox',{attrs:{\"is-modal\":\"\"}}),_c('DimensionBoostAutobuyerBox',{attrs:{\"is-modal\":\"\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerEditModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerEditModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerEditModal.vue?vue&type=template&id=a32a7b20&scoped=true&\"\nimport script from \"./AutobuyerEditModal.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerEditModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutobuyerEditModal.vue?vue&type=style&index=0&id=a32a7b20&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a32a7b20\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{staticClass:\"c-automator-template-container\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.name)+\" Template \")]},proxy:true}])},[_c('div',{staticClass:\"c-automator-template-description\"},[_vm._v(\" \"+_vm._s(_vm.description)+\" \")]),_c('div',{staticClass:\"c-automator-template-inputs\"},[_c('b',[_vm._v(\"Required Information:\")]),_c('br'),_vm._v(\" Use a preset Study Tree: \"),_vm._l((_vm.presets),function(preset,presetNumber){return _c('button',{key:preset.name,staticClass:\"o-primary-btn o-load-preset-button-margin\",on:{\"click\":function($event){return _vm.loadPreset(preset.name, presetNumber + 1)}}},[_vm._v(\" \"+_vm._s(preset.name ? preset.name : presetNumber + 1)+\" \")])}),_c('button',{staticClass:\"o-primary-btn o-load-preset-button-margin\",on:{\"click\":_vm.loadCurrent}},[_c('i',[_vm._v(\"Current Tree\")])]),_vm._l((_vm.inputs),function(input){return _c('div',{key:input.name,staticClass:\"c-automator-template-entry\"},[_vm._v(\" \"+_vm._s(input.prompt)+\": \"),(_vm.paramTypeObject(input.type).boolDisplay)?_c('span',[_c('button',{staticClass:\"o-primary-btn\",on:{\"click\":function($event){return _vm.updateButton(input)}}},[_vm._v(\" \"+_vm._s(_vm.buttonTextStrings[input.name])+\" \")])]):_c('span',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.templateInputs[input.name]),expression:\"templateInputs[input.name]\"}],ref:\"templateInputs[input.name]\",refInFor:true,staticClass:\"c-automator-template-textbox\",class:_vm.validityClass(input),attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.templateInputs[input.name])},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.templateInputs, input.name, $event.target.value)},_vm.updateTemplateProps]}})])])})],2),_c('div',{staticClass:\"c-automator-template-warnings\"},[_c('b',[_vm._v(\"Possible things to consider:\")]),(_vm.validWarnings.length !== 0)?_c('div',_vm._l((_vm.validWarnings),function(warning){return _c('div',{key:warning,staticClass:\"c-automator-template-entry\"},[_vm._v(\" \"+_vm._s(warning)+\" \")])}),0):_c('div',[_vm._v(\" (If something seems wrong with the template inputs, it will show up here) \")]),_c('br'),_c('br')]),(_vm.invalidInputCount === 0)?_c('button',{staticClass:\"o-primary-btn\",on:{\"click\":_vm.copyAndClose}},[_vm._v(\" \"+_vm._s(_vm.isBlock ? \"Create custom template block\" : \"Copy this template to your clipboard\")+\" and close this modal \")]):_c('button',{staticClass:\"o-primary-btn o-primary-btn--disabled\"},[_vm._v(\" Cannot generate template (You have \"+_vm._s(_vm.quantifyInt(\"invalid input\", _vm.invalidInputCount))+\") \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorScriptTemplate.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorScriptTemplate.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorScriptTemplate.vue?vue&type=template&id=1c623aa6&scoped=true&\"\nimport script from \"./AutomatorScriptTemplate.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorScriptTemplate.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorScriptTemplate.vue?vue&type=style&index=0&id=1c623aa6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1c623aa6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{staticClass:\"c-modal-away-progress\"},[_c('div',{staticClass:\"c-modal-away-progress__header\"},[_vm._v(\" \"+_vm._s(_vm.headerText)+\" \")]),(!_vm.nothingHappened)?_c('div',{staticClass:\"c-modal-away-progress__resources c-modal--short\"},_vm._l((_vm.offlineStats),function(name){return _c('AwayProgressEntry',{key:name,attrs:{\"name\":name,\"player-before\":_vm.playerBefore,\"player-after\":_vm.playerAfter},on:{\"something-happened\":function($event){_vm.somethingHappened = true}}})}),1):_vm._e(),(!_vm.nothingHappened && _vm.somethingHappened)?_c('span',[_vm._v(\"Note: Click an entry to hide it in the future.\")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.show)?_c('div',{class:_vm.classObject,on:{\"click\":_vm.hideEntry}},[(_vm.isBlackHole)?_c('span',[_vm._v(\" Your \"),_c('b',[_vm._v(_vm._s(_vm.formattedName))]),_vm._v(\" activated \"+_vm._s(_vm.formatBlackHoleActivations)+\" \")]):_c('span',[_c('b',[_vm._v(_vm._s(_vm.formattedName))]),(_vm.isVeryLarge)?_c('i',[_vm._v(\" exponent\")]):_vm._e(),_vm._v(\" increased from \"+_vm._s(_vm.formatBefore)+\" to \"+_vm._s(_vm.formatAfter)+\" \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AwayProgressEntry.vue?vue&type=template&id=2d859d46&scoped=true&\"\nimport script from \"./AwayProgressEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./AwayProgressEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AwayProgressEntry.vue?vue&type=style&index=0&id=2d859d46&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d859d46\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AwayProgressModal.vue?vue&type=template&id=244ab913&scoped=true&\"\nimport script from \"./AwayProgressModal.vue?vue&type=script&lang=js&\"\nexport * from \"./AwayProgressModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AwayProgressModal.vue?vue&type=style&index=0&id=244ab913&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"244ab913\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":false},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are Breaking Infinity \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Break \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},_vm._l((_vm.message),function(line,index){return _c('span',{key:index},[_vm._v(\" \"+_vm._s(line)+\" \"),_c('br')])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BreakInfinityModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BreakInfinityModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BreakInfinityModal.vue?vue&type=template&id=05b26000&\"\nimport script from \"./BreakInfinityModal.vue?vue&type=script&lang=js&\"\nexport * from \"./BreakInfinityModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal-away-progress\"},[_c('div',{staticClass:\"c-modal-away-progress__header\"},[_vm._v(\" \"+_vm._s(_vm.titleText)+\" \")]),_c('div',[_vm._v(\" \"+_vm._s(_vm.timeString)+\" If you need a refresher, here is a quick summary of all the content you have unlocked so far from the beginning of the game, separated into different stages of progression. These are only very brief descriptions; you can check the related How To Play entries by clicking the contents title or \"),_c('i',{staticClass:\"fas fa-question-circle\"}),_vm._v(\" icons to view more detailed information. \")]),_c('div',{staticClass:\"l-catchup-group-container\",style:({ 'height' : ((Math.clamp(3 * _vm.progressStage + 5, 15, 35)) + \"rem\") })},_vm._l((_vm.progressStage),function(group){return _c('CatchupGroup',{key:group,attrs:{\"group\":group,\"name\":_vm.stageName(group)}})}),1),_c('span',{staticClass:\"c-suggestion-text\"},[_vm._v(\" Based on your current progression, it will probably be useful to try to increase your \"+_vm._s(_vm.suggestedResource)+\". \")]),_c('div',{staticClass:\"l-confirm-padding\"},[_c('PrimaryButton',{on:{\"click\":_vm.emitClose}},[_vm._v(\" Confirm \")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.shownResources.length !== 0)?_c('div',[_c('span',{staticClass:\"o-catchup-group-title\",on:{\"click\":function($event){_vm.collapsed = !_vm.collapsed}}},[_c('i',{class:_vm.dropDownIconClass}),_vm._v(\" \"+_vm._s(_vm.name)+\" \")]),(!_vm.collapsed)?_c('div',_vm._l((_vm.shownResources),function(resource,i){return _c('CatchupEntry',{key:i,staticClass:\"l-left\",attrs:{\"info\":resource}})}),1):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal-catchup-entry\"},[_c('span',{staticClass:\"c-resource-name\",attrs:{\"info\":_vm.info,\"is-focused\":_vm.isFocusedResource(_vm.info)},on:{\"click\":_vm.showHowTo}},[_c('span',{staticClass:\"c-underline\"},[_vm._v(_vm._s(_vm.info.name))]),_vm._v(\": \"),_c('i',{staticClass:\"fas fa-question-circle\"})]),_vm._v(\" \"+_vm._s(_vm.info.description)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CatchupEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CatchupEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CatchupEntry.vue?vue&type=template&id=34008a4e&scoped=true&\"\nimport script from \"./CatchupEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./CatchupEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CatchupEntry.vue?vue&type=style&index=0&id=34008a4e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"34008a4e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CatchupGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CatchupGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CatchupGroup.vue?vue&type=template&id=005300ef&scoped=true&\"\nimport script from \"./CatchupGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./CatchupGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CatchupGroup.vue?vue&type=style&index=0&id=005300ef&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"005300ef\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CatchupModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CatchupModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CatchupModal.vue?vue&type=template&id=a8724662&scoped=true&\"\nimport script from \"./CatchupModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CatchupModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CatchupModal.vue?vue&type=style&index=0&id=a8724662&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a8724662\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-changelog-modal\"},[_c('ModalCloseButton',{on:{\"click\":_vm.emitClose}}),_vm._m(0),_c('div',{staticClass:\"l-changelog-container\"},[_c('div',{staticClass:\"l-changelog-search-tab\"},[_c('div',{staticClass:\"l-changelog-tab-list\"},_vm._l((_vm.entries),function(entry){return _c('div',{key:entry.id,staticClass:\"o-changelog-tab-button\",class:{\n 'o-changelog-tab-button--selected': entry === _vm.shownEntry\n },on:{\"click\":function($event){return _vm.setShownEntry(entry)}}},[_vm._v(\" \"+_vm._s(_vm.formatDate(entry.date))+\" \")])}),0)]),_c('div',{staticClass:\"l-changelog-info\"},[_c('div',{staticClass:\"c-changelog-body--title\"},[_vm._v(\" \"+_vm._s(_vm.formatDate(_vm.shownEntry.date))),(_vm.shownEntry.name)?_c('span',[_vm._v(\": \\\"\"+_vm._s(_vm.shownEntry.name)+\"\\\" update\")]):_vm._e()]),_c('div',{ref:\"changelogBody\",staticClass:\"l-changelog-body c-changelog-body\",domProps:{\"innerHTML\":_vm._s(_vm.shownEntry.info)}})])])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-changelog-header\"},[_c('div',{staticClass:\"c-changelog-title\"},[_vm._v(\" Changelog \")])])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChangelogModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChangelogModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChangelogModal.vue?vue&type=template&id=92635de0&scoped=true&\"\nimport script from \"./ChangelogModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ChangelogModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChangelogModal.vue?vue&type=style&index=0&id=92635de0&scoped=true&lang=css&\"\nimport style1 from \"./ChangelogModal.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"92635de0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.confirmChange},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Change your Speedrun Player Name \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Change Name \")]},proxy:true}])},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input c-modal-import__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.input)},on:{\"keyup\":[_vm.updateName,function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.confirmChange.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)}],\"input\":function($event){if($event.target.composing){ return; }_vm.input=$event.target.value}}}),_c('i',[_vm._v(\" This can no longer be changed once the timer starts, and there is a limit of \"+_vm._s(_vm.formatInt(40))+\" characters. \")]),_c('div',[_vm._v(\" Your new name will be \"+_vm._s(_vm.actualName)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChangeNameModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChangeNameModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChangeNameModal.vue?vue&type=template&id=e157b080&\"\nimport script from \"./ChangeNameModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ChangeNameModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.deleteConstants},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Deleting Automator Constants \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Delete All \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Are you sure you wish to delete all of your currently-defined automator constants? \"),_c('br'),_c('span',{staticClass:\"l-lost-text\"},[_vm._v(\" This will irreversibly delete \"+_vm._s(_vm.quantify(\"constant\", _vm.constantCount))+\"! \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClearConstantsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClearConstantsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClearConstantsModal.vue?vue&type=template&id=4f39cd67&scoped=true&\"\nimport script from \"./ClearConstantsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ClearConstantsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClearConstantsModal.vue?vue&type=style&index=0&id=4f39cd67&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f39cd67\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{staticClass:\"l-credits-modal c-credits-modal\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('h1',{staticClass:\"c-game-header__antimatter\"},[_vm._v(\" Antimatter Dimensions \")])]},proxy:true}])},[_c('div',{staticClass:\"c-credits-modal__body\"},[_c('CreditsDisplay',{attrs:{\"is-modal\":true}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CreditsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CreditsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CreditsModal.vue?vue&type=template&id=2d8dcf44&scoped=true&\"\nimport script from \"./CreditsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CreditsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CreditsModal.vue?vue&type=style&index=0&id=2d8dcf44&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d8dcf44\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Delete this script \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Delete \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Please confirm your desire to delete this Automator script. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DeleteAutomatorScriptModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DeleteAutomatorScriptModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DeleteAutomatorScriptModal.vue?vue&type=template&id=24a23b91&\"\nimport script from \"./DeleteAutomatorScriptModal.vue?vue&type=script&lang=js&\"\nexport * from \"./DeleteAutomatorScriptModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Cracks in The Nameless Ones' Reality \")]},proxy:true}])},[_c('div',{staticClass:\"c-enslaved-hint-modal c-modal--short\"},[_c('div',[_vm._v(\" This Reality seems to be resisting your efforts to complete it. So far you have done the following: \")]),_c('br'),_vm._l((_vm.shownEntries),function(entry,index){return _c('div',{key:index},[(!entry[0])?_c('div',[(entry[1].hasHint && !entry[1].hasProgress)?_c('span',[_c('i',{staticClass:\"c-icon-wrapper fas fa-question-circle\"}),_c('b',[_vm._v(\"You have not figured out what this hint means yet.\")])]):_c('span',[_c('i',{staticClass:\"c-icon-wrapper fa-solid fa-house-crack\"}),_c('b',[_vm._v(\"You have exposed a crack in the Reality:\")])]),_c('br'),_vm._v(\" - \"+_vm._s(entry[1].hintInfo)+\" \"),_c('br'),_vm._v(\" - \"+_vm._s(entry[1].hasProgress ? entry[1].completedInfo : \"?????\")+\" \")]):_c('div',[_c('i',{staticClass:\"fa-solid fa-shapes\"}),_vm._v(\" \"),_c('b',[_vm._v(\"Glyph hint:\")]),_c('br'),_vm._v(\" \"+_vm._s(entry[1])+\" \")]),_c('br')])}),(_vm.realityHintsLeft + _vm.glyphHintsLeft > 0)?_c('div',[_vm._v(\" You can spend some time looking for some more cracks in the Reality, but every hint you spend Stored Time on will increase the Stored Time needed for the next by a factor of \"+_vm._s(_vm.formatInt(3))+\". This cost bump will gradually go away over \"+_vm._s(_vm.formatInt(24))+\" hours and figuring out what the hint means will immediately divide the cost by \"+_vm._s(_vm.formatInt(2))+\". The cost can't be reduced below \"+_vm._s(_vm.format(1e40))+\" years. \"),_c('br'),_c('br'),_vm._v(\" The next hint will cost \"+_vm._s(_vm.hintCost)+\" of Stored Time. You currently have \"+_vm._s(_vm.formattedStored)+\". \"),(_vm.currentStored < _vm.nextHintCost)?_c('span',[_vm._v(\" You will reach this if you charge your Black Hole for \"+_vm._s(_vm.timeEstimate)+\". \")]):_vm._e(),_c('br'),_c('br'),_c('PrimaryButton',{staticClass:\"l-enslaved-hint-button\",attrs:{\"enabled\":_vm.realityHintsLeft > 0 && _vm.canGetHint},on:{\"click\":function($event){return _vm.giveRealityHint(_vm.realityHintsLeft)}}},[_vm._v(\" Get a hint about the Reality itself (\"+_vm._s(_vm.formatInt(_vm.realityHintsLeft))+\" left) \")]),_c('br'),_c('PrimaryButton',{staticClass:\"l-enslaved-hint-button\",attrs:{\"enabled\":_vm.glyphHintsLeft > 0 && _vm.canGetHint},on:{\"click\":function($event){return _vm.giveGlyphHint(_vm.glyphHintsLeft)}}},[_vm._v(\" Get a hint on what Glyphs to use (\"+_vm._s(_vm.formatInt(_vm.glyphHintsLeft))+\" left) \")])],1):_c('div',[_c('b',[_vm._v(\"There are no more hints left!\")])])],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnslavedHintsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnslavedHintsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnslavedHintsModal.vue?vue&type=template&id=101e8e48&scoped=true&\"\nimport script from \"./EnslavedHintsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./EnslavedHintsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EnslavedHintsModal.vue?vue&type=style&index=0&id=101e8e48&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"101e8e48\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"deleteGlyphSetSave\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Delete this Glyph Set \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Delete \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Please confirm your desire to delete this Glyph Set: \"),_c('GlyphSetPreview',{attrs:{\"is-in-modal\":true,\"glyphs\":_vm.glyphSet}}),_vm._v(\" This will not affect your actual Glyphs, only the saved preset. \")],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetSaveDeleteModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetSaveDeleteModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphSetSaveDeleteModal.vue?vue&type=template&id=5e524baa&\"\nimport script from \"./GlyphSetSaveDeleteModal.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphSetSaveDeleteModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.name)+\" \")]},proxy:true}])},[(_vm.isGlyphSelection)?_c('div',[_vm._v(\" Projected Glyph Level: \"+_vm._s(_vm.formatInt(_vm.gainedLevel))+\" \")]):_vm._e(),(_vm.showSetName)?_c('GlyphSetName',{attrs:{\"glyph-set\":_vm.glyphs,\"force-color\":true}}):_vm._e(),_c('div',{class:_vm.containerClass},_vm._l((_vm.glyphs),function(glyph,idx){return _c('GlyphShowcasePanelEntry',{key:idx,staticClass:\"c-glyph-choice-single-glyph\",attrs:{\"idx\":idx,\"glyph\":glyph,\"show-level\":!_vm.isGlyphSelection,\"reality-glyph-boost\":_vm.realityGlyphBoost,\"max-glyph-effects\":_vm.maxGlyphEffects,\"show-sacrifice\":_vm.displaySacrifice}})}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"c-glyph-choice-icon\"},[_c('span',{style:(_vm.typeStyle)},[_vm._v(_vm._s(_vm.typeCapitalized))]),(_vm.showLevel)?_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.levelText)}}):_vm._e(),_c('GlyphComponent',{key:_vm.idx,staticClass:\"c-glyph-component-container\",attrs:{\"glyph\":_vm.glyph,\"show-sacrifice\":_vm.showSacrifice && _vm.canSacrifice,\"draggable\":false,\"circular\":true,\"ignore-modified-level\":false,\"reality-glyph-boost\":_vm.realityGlyphBoost,\"is-in-modal\":true,\"size\":\"4rem\",\"text-proportion\":0.5,\"glow-blur\":\"0.4rem\",\"glow-spread\":\"0.1rem\"},on:{\"clicked\":function($event){return _vm.clickGlyph(_vm.glyph)}}}),_c('div',{style:(_vm.rarityStyle)},[_vm._v(\" \"+_vm._s(_vm.rarityPercent)+\" \")])],1),_c('div',{staticClass:\"c-glyph-choice-effect-list\",style:(_vm.effectStyle)},_vm._l((_vm.glyphEffectList),function(effectObj,index){return _c('div',{key:index,class:{ 'o-pelle-disabled': effectObj.isPelleDisabled }},[_vm._v(\" \"+_vm._s(effectObj.text)+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphShowcasePanelEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphShowcasePanelEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphShowcasePanelEntry.vue?vue&type=template&id=5012c711&scoped=true&\"\nimport script from \"./GlyphShowcasePanelEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphShowcasePanelEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphShowcasePanelEntry.vue?vue&type=style&index=0&id=5012c711&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5012c711\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphShowcasePanelModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphShowcasePanelModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphShowcasePanelModal.vue?vue&type=template&id=0f672c00&scoped=true&\"\nimport script from \"./GlyphShowcasePanelModal.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphShowcasePanelModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphShowcasePanelModal.vue?vue&type=style&index=0&id=0f672c00&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0f672c00\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-h2p-modal\"},[_c('ModalCloseButton',{on:{\"click\":_vm.emitClose}}),_vm._m(0),_c('div',{staticClass:\"l-h2p-container\"},[_c('div',{staticClass:\"l-h2p-search-tab\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.searchValue),expression:\"searchValue\"}],ref:\"input\",staticClass:\"c-h2p-search-bar\",attrs:{\"placeholder\":\"Type to search...\"},domProps:{\"value\":(_vm.searchValue)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.searchValue=$event.target.value}}}),_c('div',{staticClass:\"l-h2p-tab-list\"},_vm._l((_vm.matchingTabs),function(searchObj,searchObjId){return _c('div',{key:searchObj.tab.name,staticClass:\"o-h2p-tab-button\",class:{\n 'o-h2p-tab-button--selected': searchObj.tab === _vm.activeTab,\n 'o-h2p-tab-button--relevant': searchObj.relevance < _vm.topThreshold,\n 'o-h2p-tab-button--first-irrelevant': _vm.isFirstIrrelevant(searchObjId)\n },on:{\"click\":function($event){return _vm.setActiveTab(searchObj.tab)}}},[_vm._v(\" \"+_vm._s(searchObj.tab.alias)+\" \")])}),0)]),_c('div',{staticClass:\"l-h2p-info\"},[_c('div',{staticClass:\"c-h2p-body--title\"},[_vm._v(\" \"+_vm._s(_vm.activeTab.name)+\" \")]),_c('div',{staticClass:\"l-h2p-body c-h2p-body\",attrs:{\"id\":\"h2p-body\"},domProps:{\"innerHTML\":_vm._s(_vm.activeTab.info())}})])])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-h2p-header\"},[_c('div',{staticClass:\"c-h2p-title\"},[_vm._v(\" How To Play \")])])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./H2PModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./H2PModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./H2PModal.vue?vue&type=template&id=7e1ab2ec&scoped=true&\"\nimport script from \"./H2PModal.vue?vue&type=script&lang=js&\"\nexport * from \"./H2PModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./H2PModal.vue?vue&type=style&index=0&id=7e1ab2ec&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7e1ab2ec\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":!_vm.isValid,\"show-confirm\":_vm.isValid},on:{\"confirm\":_vm.importSave},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Import Automator Script Data \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Import \")]},proxy:true}])},[_vm._v(\" This will create a new Automator script at the end of your list. \"),(_vm.isImportingExtraData)?_c('span',[_vm._v(\"This will also import additional data related to the script.\")]):_vm._e(),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input c-modal-import__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.input)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.importSave.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)}],\"input\":function($event){if($event.target.composing){ return; }_vm.input=$event.target.value}}}),(_vm.isValid)?_c('div',[_vm._v(\" Script name: \"+_vm._s(_vm.scriptName)+\" \"),_c('br'),_vm._v(\" Line count: \"+_vm._s(_vm.lineCount)+\" \"),(_vm.hasPresets)?_c('div',[_c('br'),_vm._v(\" Study Presets: \"),_vm._l((_vm.importedPresets),function(preset,id){return _c('span',{key:id,staticClass:\"c-import-data-name\"},[(preset.name)?_c('span',[_vm._v(\"\\\"\"+_vm._s(preset.name)+\"\\\" (slot \"+_vm._s(preset.id + 1)+\")\")]):_c('span',[_vm._v(\"Preset slot #\"+_vm._s(preset.id + 1))])])}),(!_vm.ignorePresets && _vm.overwrittenPresetCount > 0)?_c('div',{staticClass:\"l-has-errors\"},[_vm._v(\" \"+_vm._s(_vm.formatInt(_vm.overwrittenPresetCount))+\" of your existing presets will be overwritten by imported presets! \")]):_vm._e(),_c('br'),_c('button',{staticClass:\"o-primary-btn\",on:{\"click\":function($event){_vm.ignorePresets = !_vm.ignorePresets}}},[_vm._v(\" \"+_vm._s(_vm.presetButtonText)+\" \")])],2):_vm._e(),(_vm.hasConstants)?_c('div',[_c('br'),_vm._v(\" Constants: \"),_vm._l((_vm.importedConstants),function(constant,id){return _c('span',{key:id + 10,staticClass:\"c-import-data-name\"},[_vm._v(\" \\\"\"+_vm._s(constant.key)+\"\\\" \")])}),(!_vm.ignoreConstants && (_vm.willOverwriteConstant || _vm.extraConstants > 0))?_c('div',{staticClass:\"l-has-errors\"},[(_vm.willOverwriteConstant)?_c('span',[_vm._v(\"Some of your existing constants will be overwritten!\")]):_vm._e(),(_vm.willOverwriteConstant && _vm.extraConstants > 0)?_c('br'):_vm._e(),(_vm.extraConstants > 0)?_c('span',[_vm._v(\" \"+_vm._s(_vm.quantifyInt(\"constant\", _vm.extraConstants))+\" will not be imported due to the \"+_vm._s(_vm.maxConstantCount)+\" constant limit. \")]):_vm._e()]):_vm._e(),_c('br'),_c('button',{staticClass:\"o-primary-btn\",on:{\"click\":function($event){_vm.ignoreConstants = !_vm.ignoreConstants}}},[_vm._v(\" \"+_vm._s(_vm.constantButtonText)+\" \")])],2):_vm._e(),_c('br'),(_vm.hasErrors)?_c('div',{staticClass:\"l-has-errors\"},[_vm._v(\" This script has errors which need to be fixed before it can be run! \")]):_vm._e(),(_vm.hasErrors && _vm.isImportingExtraData)?_c('div',[_c('i',[_vm._v(\"Some errors may be fixed with the additional data being imported.\")])]):_vm._e()]):(_vm.input.length !== 0)?_c('div',[_vm._v(\" Invalid Automator data string \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportAutomatorDataModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportAutomatorDataModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImportAutomatorDataModal.vue?vue&type=template&id=67bd8c2a&scoped=true&\"\nimport script from \"./ImportAutomatorDataModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ImportAutomatorDataModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImportAutomatorDataModal.vue?vue&type=style&index=0&id=67bd8c2a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"67bd8c2a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":!_vm.inputIsValid,\"show-confirm\":false},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Import Glyph filter settings \")]},proxy:true}])},[_vm._v(\" Note: Importing Glyph filter options will overwrite settings \"),_c('br'),_vm._v(\" in all filter modes, not just the currently-selected one. \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input c-modal-import__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.input)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.importSave.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)}],\"input\":function($event){if($event.target.composing){ return; }_vm.input=$event.target.value}}}),_c('div',{staticClass:\"c-modal-import__save-info\"},[(!_vm.input)?_c('div'):(_vm.inputIsValid)?_c('div',[_c('b',[_vm._v(\"Selection mode:\")]),_vm._v(\" \"+_vm._s(_vm.selectStr)+\" \"),_c('br'),_c('b',[_vm._v(\"Effect Count (\\\"Number of Effects\\\"):\")]),_vm._v(\" \"+_vm._s(_vm.basicCountStr)+\" \"),_c('br'),_c('b',[_vm._v(\"Rejected Glyphs:\")]),_vm._v(\" \"+_vm._s(_vm.trashStr)+\" \"),_c('br'),_c('u',[_c('b',[_vm._v(\"Type-specific Settings\")])]),_vm._v(\" \"),_c('span',{attrs:{\"ach-tooltip\":_vm.settingTooltipText}},[_c('i',{staticClass:\"fas fa-question-circle\"})]),_c('br'),_vm._l((_vm.availableTypes),function(type){return _c('ImportFilterSingleType',{key:type,staticClass:\"c-single-type\",attrs:{\"type\":type,\"curr-settings\":_vm.currentSettings.types[type],\"new-settings\":_vm.parsedSettings.types[type]}})})],2):_c('div',[_vm._v(\" Not a valid Glyph filter string \")])]),(_vm.inputIsValid)?_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn\",on:{\"click\":_vm.importFilter}},[_vm._v(\" Import \")]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(\" \"+_vm._s(_vm.symbol)+\": \"),(_vm.settingsChanged)?_c('span',[_c('span',{staticClass:\"c-single-row\"},[_c('span',{staticClass:\"c-rarity\",class:_vm.topLevelClassObject('rarity'),attrs:{\"ach-tooltip\":\"Setting for Rarity Threshold and Specified Effect\"}},[_vm._v(\" \"+_vm._s(_vm.rarityStr)+\" \")]),_c('span',{staticClass:\"c-effects-count\",class:_vm.topLevelClassObject('effectCount'),attrs:{\"ach-tooltip\":\"Number of effects in Specified Effect\"}},[_vm._v(\" Minimum Effects: \"+_vm._s(_vm.effectStr)+\" \")]),_c('span',{staticClass:\"c-target-score\",class:_vm.topLevelClassObject('score'),attrs:{\"ach-tooltip\":\"Threshold for Effect Score\"}},[_vm._v(\" Score: \"+_vm._s(_vm.scoreStr)+\" \")])]),_c('br'),_c('span',{staticClass:\"c-single-row\"},_vm._l((_vm.effectData.slice(0, 4)),function(effect){return _c('span',{key:effect.bitmaskIndex,staticClass:\"c-single-score\",class:_vm.effectClassObject(effect),attrs:{\"ach-tooltip\":_vm.getEffectDesc(effect)}},[_vm._v(\" \"+_vm._s(_vm.effectScoreStr(effect))+\" \")])}),0),(_vm.effectData.length > 4)?_c('span',{staticClass:\"c-single-row c-second-row\"},[_c('br'),_vm._l((_vm.effectData.slice(4)),function(effect){return _c('span',{key:effect.bitmaskIndex,staticClass:\"c-single-score o-cell\",class:_vm.effectClassObject(effect),attrs:{\"ach-tooltip\":_vm.getEffectDesc(effect)}},[_vm._v(\" \"+_vm._s(_vm.effectScoreStr(effect))+\" \")])})],2):_vm._e()]):_c('span',[_vm._v(\" (No changes) \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportFilterSingleType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportFilterSingleType.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImportFilterSingleType.vue?vue&type=template&id=66a38efb&scoped=true&\"\nimport script from \"./ImportFilterSingleType.vue?vue&type=script&lang=js&\"\nexport * from \"./ImportFilterSingleType.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImportFilterSingleType.vue?vue&type=style&index=0&id=66a38efb&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"66a38efb\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportFilterModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportFilterModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImportFilterModal.vue?vue&type=template&id=57ab1f8f&scoped=true&\"\nimport script from \"./ImportFilterModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ImportFilterModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImportFilterModal.vue?vue&type=style&index=0&id=57ab1f8f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57ab1f8f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":!_vm.inputIsValid,\"show-confirm\":false},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Input your save \")]},proxy:true}])},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input c-modal-import__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.input)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.importSave.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)}],\"input\":function($event){if($event.target.composing){ return; }_vm.input=$event.target.value}}}),_c('div',{staticClass:\"c-modal-import__save-info\"},[(_vm.inputIsSecret)?_c('div',[_vm._v(\" ??? \")]):(_vm.inputIsValidSave)?[(!_vm.inputIsDev)?[(_vm.fileName)?_c('div',[_vm._v(\" File name: \"+_vm._s(_vm.fileName)+\" \")]):_vm._e(),_c('div',[_vm._v(\"Antimatter: \"+_vm._s(_vm.formatPostBreak(_vm.antimatter, 2, 1)))]),(_vm.progress.isInfinityUnlocked)?_c('div',[_vm._v(\" Infinities: \"+_vm._s(_vm.formatPostBreak(_vm.infinities, 2))+\" \")]):_vm._e(),(_vm.progress.isEternityUnlocked)?_c('div',[_vm._v(\" Eternities: \"+_vm._s(_vm.formatPostBreak(_vm.player.eternities, 2))+\" \")]):_vm._e(),(_vm.progress.isRealityUnlocked)?_c('div',[_vm._v(\" Realities: \"+_vm._s(_vm.formatPostBreak(_vm.player.realities, 2))+\" \")]):_vm._e(),(_vm.progress.hasFullCompletion)?_c('div',[_vm._v(\" Full game completions: \"+_vm._s(_vm.formatInt(_vm.player.records.fullGameCompletions))+\" \")]):_vm._e(),_c('div',{staticClass:\"c-modal-import__warning\"},[_vm._v(\" (Your current save file will be overwritten!) \")]),_c('br'),_c('div',[_vm._v(\" \"+_vm._s(_vm.lastOpened)+\" \"),_c('div',{staticClass:\"o-primary-btn\",on:{\"click\":_vm.changeOfflineSetting}},[_vm._v(\" Offline Progress: \"+_vm._s(_vm.offlineType)+\" \")]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.offlineDetails)}})])]:_c('div',[_vm._v(\" You cannot import development saves into the public game. \")])]:(_vm.hasInput)?_c('div',[_vm._v(\" Not a valid save: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.saveCheckString)+\" \")]):_vm._e(),(_vm.player)?_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[(_vm.willLoseCosmetics)?_c('div',[_c('br'),_vm._v(\" Glyph cosmetic sets from completing the game are tied to your save. \"),_c('br'),_vm._v(\" Importing this save will cause you to lose some sets. \")]):_vm._e(),(_vm.willLoseSpeedrun)?_c('div',[_c('br'),_vm._v(\" You will lose the ability to do a Speedrun, as this save does not have it unlocked. \")]):_vm._e()]):_vm._e()],2),(_vm.inputIsValid)?_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn\",on:{\"click\":_vm.importSave}},[_vm._v(\" Import \")]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportSaveModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportSaveModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImportSaveModal.vue?vue&type=template&id=209f8fea&\"\nimport script from \"./ImportSaveModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ImportSaveModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.importConstants},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Importing Time Study Presets as Constants \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Import All \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Confirming this modal will import all of your saved Time Study presets as new Automator constants. Below are all the valid presets which will be imported, with the beginning and end of their contained studies shown. Some names may be changed due to restrictions on constant name formatting. \"),_c('br'),_c('br'),_vm._l((_vm.presets.length),function(i){return _c('div',{key:i,class:{ 'l-not-imported' : !_vm.willImport[i-1] }},[_vm._v(\" Name: \"+_vm._s(_vm.presets[i-1].name)+\" ➜ \"),_c('b',[_vm._v(_vm._s(_vm.names[i-1]))]),_c('br'),_vm._v(\" \"+_vm._s(_vm.shortenString(_vm.presets[i-1].studies))+\" \"),(_vm.hasConflict(_vm.names[i-1]))?_c('span',{staticClass:\"l-warn-text\"},[_c('br'),_vm._v(\" This will overwrite an existing constant! \")]):_vm._e(),_c('br'),_c('br')])}),(_vm.missedImports() > 0)?_c('div',{staticClass:\"l-warn-text\"},[_vm._v(\" \"+_vm._s(_vm.quantify(\"preset\", _vm.missedImports()))+\" in this list cannot be imported due to the limit on constant count. \")]):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportTimeStudyConstants.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportTimeStudyConstants.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImportTimeStudyConstants.vue?vue&type=template&id=4552a040&scoped=true&\"\nimport script from \"./ImportTimeStudyConstants.vue?vue&type=script&lang=js&\"\nexport * from \"./ImportTimeStudyConstants.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImportTimeStudyConstants.vue?vue&type=style&index=0&id=4552a040&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4552a040\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-information-modal c-information-modal\"},[_c('ModalCloseButton',{on:{\"click\":_vm.emitClose}}),_vm._m(0),_vm._m(1),_c('div',{staticClass:\"l-socials\"},[_c('InformationModalButton',{attrs:{\"name\":\"Redemption GitHub repository\",\"icon\":\"fa-brands fa-github\",\"link\":\"https://github.com/toilet45/ADRedemption\"}}),_c('InformationModalButton',{attrs:{\"name\":\"r/AntimatterDimensions\",\"icon\":\"fa-brands fa-reddit-alien\",\"link\":\"https://www.reddit.com/r/AntimatterDimensions/\"}}),_c('InformationModalButton',{attrs:{\"name\":\"Antimatter Dimensions Redemption: Discord Server\",\"icon\":\"fa-brands fa-discord\",\"link\":\"https://discord.gg/3RuXAz7rwe\"}}),_c('InformationModalButton',{attrs:{\"name\":\"Vanilla Antimatter Dimensions Discord Server\",\"icon\":\"fa-brands fa-discord\",\"link\":\"https://discord.gg/ST9NaXa\"}}),_c('InformationModalButton',{attrs:{\"name\":\"Antimatter Dimensions on Google Play\",\"icon\":\"fa-brands fa-google-play\",\"link\":\"https://play.google.com/store/apps/details?id=kajfosz.antimatterdimensions\"}}),_c('InformationModalButton',{attrs:{\"name\":\"Antimatter Dimensions on Steam\",\"icon\":\"fa-brands fa-steam\",\"link\":\"https://store.steampowered.com/app/1399720/Antimatter_Dimensions/\"}}),_c('InformationModalButton',{attrs:{\"name\":\"Credits\",\"icon\":\"fa-solid fa-users\",\"show-modal\":\"credits\"}}),_c('InformationModalButton',{attrs:{\"name\":\"Game Changelog\",\"icon\":\"fa-solid fa-file-lines\",\"show-modal\":\"changelog\"}})],1)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-h2p-header\"},[_c('div',{staticClass:\"c-h2p-title\"},[_vm._v(\" About the game \")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-info-body\"},[_vm._v(\" Antimatter Dimensions is an Idle Incremental game created by Finnish developer Hevipelle. Originating as a solo project in 2016, it was expanded upon by a large team of developers and testers from then on. \"),_c('br'),_c('br'),_vm._v(\" The game has unfolding gameplay and multiple prestige layers. The \\\"How to Play\\\" button contains useful information about progressing. \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"c-socials--icon__wrapper\",attrs:{\"ach-tooltip\":_vm.name}},[(_vm.link)?_c('a',{staticClass:\"c-socials--icon\",on:{\"click\":_vm.openLink}},[_c('i',{class:_vm.icon})]):_c('a',{staticClass:\"c-socials--icon\",on:{\"click\":_vm.openAssociatedModal}},[_c('i',{class:_vm.icon})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InformationModalButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InformationModalButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InformationModalButton.vue?vue&type=template&id=01811230&scoped=true&\"\nimport script from \"./InformationModalButton.vue?vue&type=script&lang=js&\"\nexport * from \"./InformationModalButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./InformationModalButton.vue?vue&type=style&index=0&id=01811230&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"01811230\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InformationModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InformationModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InformationModal.vue?vue&type=template&id=fc435f5e&scoped=true&\"\nimport script from \"./InformationModal.vue?vue&type=script&lang=js&\"\nexport * from \"./InformationModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./InformationModal.vue?vue&type=style&index=0&id=fc435f5e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"fc435f5e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Save Selection \")]},proxy:true}])},_vm._l((3),function(id){return _c('LoadGameEntry',{key:id,staticClass:\"c-entry-border\",attrs:{\"save-id\":id - 1}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-modal-options__save-record\"},[_c('h3',[_vm._v(\"Save #\"+_vm._s(_vm.saveId + 1)+\":\"),(_vm.isSelected)?_c('span',[_vm._v(\" (selected)\")]):_vm._e()]),(_vm.fileName)?_c('span',[_vm._v(\"File name: \"+_vm._s(_vm.fileName))]):_vm._e(),_c('span',[_vm._v(\"Antimatter: \"+_vm._s(_vm.formatAntimatter(_vm.antimatter)))]),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium\",on:{\"click\":_vm.load}},[_vm._v(\" Load \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadGameEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadGameEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LoadGameEntry.vue?vue&type=template&id=614e792a&\"\nimport script from \"./LoadGameEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./LoadGameEntry.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadGameModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadGameModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LoadGameModal.vue?vue&type=template&id=411bb7ce&scoped=true&\"\nimport script from \"./LoadGameModal.vue?vue&type=script&lang=js&\"\nexport * from \"./LoadGameModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LoadGameModal.vue?vue&type=style&index=0&id=411bb7ce&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"411bb7ce\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Modifying Glyph RNG Seed \")]},proxy:true}])},[_c('div',[_vm._v(\" All Glyph options beyond the first Reality for an entire playthrough are randomly determined from the very beginning, based on the value of an initial seed number. The role of this seed is that it chooses a single, \"),_c('i',[_vm._v(\"particular\")]),_vm._v(\" set of Glyph options for your playthrough. If you or anyone else chooses the same seed in a different run, you will get the same options for Glyphs. \"),_c('br'),_c('br'),_vm._v(\" You can switch between these three options any point before you generate your first Glyph. \"),_c('br'),_vm._v(\" Current Setting: \"),_c('b',[_vm._v(_vm._s(_vm.seedText))]),_c('br'),_c('br'),_c('PrimaryButton',{class:_vm.buttonClass(_vm.choiceEnum.FIXED),on:{\"click\":function($event){return _vm.setMode(_vm.choiceEnum.FIXED)}}},[_vm._v(\" Official Preset Seed \")]),_c('br'),_vm._v(\" This is the default option which chooses the seed \"),_c('b',[_vm._v(_vm._s(_vm.officialSeed))]),_vm._v(\". Anyone who chooses to not modify the seed at all will get these Glyph options. \"),_c('br'),_c('br'),_c('PrimaryButton',{class:_vm.buttonClass(_vm.choiceEnum.RANDOM),on:{\"click\":function($event){return _vm.setMode(_vm.choiceEnum.RANDOM)}}},[_vm._v(\" Randomized Seed \")]),_c('br'),_vm._v(\" This selects a completely randomized seed value, producing Glyph options which are very likely to be different from anyone else's playthrough unless they intentionally choose the same value. \"),_c('br'),_c('br'),_c('PrimaryButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.seedValue === 0 ? 'Input seed cannot be zero!' : ''),expression:\"seedValue === 0 ? 'Input seed cannot be zero!' : ''\"}],class:_vm.buttonClass(_vm.choiceEnum.PLAYER),on:{\"click\":function($event){return _vm.setMode(_vm.choiceEnum.PLAYER, _vm.seedValue)}}},[_vm._v(\" Player-selected Seed: \")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inputSeed),expression:\"inputSeed\"}],ref:\"inputSeed\",staticClass:\"c-modal-input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.inputSeed)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.inputSeed=$event.target.value},function($event){return _vm.handleSeedInput()}]}}),_c('br'),_vm._v(\" This option sets your seed to the value you type into the text box. \"),_c('br'),(_vm.seedValue !== 0)?_c('span',[_vm._v(\" Your current input will be \"+_vm._s(_vm.convertedInput ? \"converted to\" : \"used as\")+\" the number \"),_c('b',[_vm._v(_vm._s(_vm.seedValue))]),_vm._v(\". \")]):_c('span',[_vm._v(\" Your current input \"+_vm._s(_vm.convertedInput ? \"converts to\" : \"is equal to\")+\" \"),_c('b',[_vm._v(\"0\")]),_vm._v(\"; the seed will default to Official Preset. \")]),_c('br'),_vm._v(\" For technical reasons, this value must be must be non-zero to be accepted. \")],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModifySeedModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModifySeedModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModifySeedModal.vue?vue&type=template&id=526c51fe&scoped=true&\"\nimport script from \"./ModifySeedModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ModifySeedModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModifySeedModal.vue?vue&type=style&index=0&id=526c51fe&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"526c51fe\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" List of disabled and nerfed effects in Doomed \")]},proxy:true}])},[_c('div',{staticClass:\"pelle-effects-container\"},_vm._l((_vm.nerfs),function(nerf,idx){return _c('p',{key:idx},[_vm._v(\" \"+_vm._s(nerf)+\" \")])}),0),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn\",on:{\"click\":_vm.emitClose}},[_vm._v(\" Okay \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleEffectsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleEffectsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleEffectsModal.vue?vue&type=template&id=21d4331f&scoped=true&\"\nimport script from \"./PelleEffectsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleEffectsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleEffectsModal.vue?vue&type=style&index=0&id=21d4331f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"21d4331f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Reality Glyph Creation \")]},proxy:true}])},[_c('div',{staticClass:\"c-reality-glyph-creation\"},[(this.mm8)?_c('div',[_vm._v(\" Create a level \"+_vm._s(_vm.formatInt(_vm.realityGlyphLevel))+\" Reality Glyph. Rarity will always be \"+_vm._s(_vm.formatPercents(1))+\" and level scales on your current Reality Resource amount (which is all consumed). All other Alchemy Resources will be unaffected. Reality Glyphs have unique effects, some of which are only available with higher level Glyphs. Reality Glyphs can also be sacrificed to increase all Memory Chunk gain. Like Effarig Glyphs, you cannot equip more than two at the same time. \")]):_c('div',[_vm._v(\" Create a level \"+_vm._s(_vm.formatInt(_vm.realityGlyphLevel))+\" Reality Glyph. Rarity will always be \"+_vm._s(_vm.formatPercents(1))+\" and level scales on your current Reality Resource amount (which is all consumed). All other Alchemy Resources will be unaffected. Reality Glyphs have unique effects, some of which are only available with higher level Glyphs. Reality Glyphs can also be sacrificed to increase all Memory Chunk gain. Like Effarig Glyphs, you cannot equip more than one at the same time. \")]),_c('div',{staticClass:\"o-available-effects-container\"},[_c('div',{staticClass:\"o-available-effects\"},[_vm._v(\" Available Effects: \")]),_vm._l((_vm.possibleEffects),function(effect,index){return _c('div',{key:index},[_vm._v(\" \"+_vm._s(_vm.formatGlyphEffect(effect))+\" \")])})],2),(_vm.isDoomed)?_c('PrimaryButton',{attrs:{\"enabled\":false}},[_vm._v(\" You cannot create Reality Glyphs while Doomed \")]):(_vm.realityGlyphLevel !== 0)?_c('PrimaryButton',{on:{\"click\":_vm.createRealityGlyph}},[_vm._v(\" Create a Reality Glyph! \")]):_c('PrimaryButton',{attrs:{\"enabled\":false}},[_vm._v(\" Reality Glyph level must be higher than \"+_vm._s(_vm.formatInt(0))+\" \")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityGlyphCreationModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityGlyphCreationModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityGlyphCreationModal.vue?vue&type=template&id=7a224243&scoped=true&\"\nimport script from \"./RealityGlyphCreationModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityGlyphCreationModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RealityGlyphCreationModal.vue?vue&type=style&index=0&id=7a224243&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7a224243\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"glyphReplace\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to replace a Glyph \")]},proxy:true}])},[_vm._v(\" Replacing a Glyph will restart this \"+_vm._s(_vm.resetTerm)+\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplaceGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplaceGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReplaceGlyphModal.vue?vue&type=template&id=4e17b85c&\"\nimport script from \"./ReplaceGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ReplaceGlyphModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"respecIAP\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to respec your Shop Purchases \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Are you sure you want to respec your Shop Purchases? This will not cost anything and return the \"+_vm._s(_vm.returnedSTDCount())+\" \"),_c('img',{staticClass:\"o-shop-button-button__img\",attrs:{\"src\":\"images/std_coin.png\"}}),_vm._v(\" you spent on all purchases which give permanent multipliers. \"),_c('br'),_c('br'),_vm._v(\" Anything spent on offline progress and Glyph cosmetics will not be refunded. Glyph cosmetic sets are permanent and will not be lost or respeced once purchased. \"),_c('br'),_c('br'),_c('b',{staticClass:\"o-warning\"},[_vm._v(\"You will not be able to respec again unless you purchase more STD coins.\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RespecIAPModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RespecIAPModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RespecIAPModal.vue?vue&type=template&id=1db2b8e9&scoped=true&\"\nimport script from \"./RespecIAPModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RespecIAPModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RespecIAPModal.vue?vue&type=style&index=0&id=1db2b8e9&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1db2b8e9\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"sacrifice\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Dimensional Sacrifice \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]),_c('br'),_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.multiplierText)+\" \"),_c('br')])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SacrificeModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SacrificeModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SacrificeModal.vue?vue&type=template&id=07b1a6dd&\"\nimport script from \"./SacrificeModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SacrificeModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Singularity Milestones \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal__confirmation-toggle\",on:{\"click\":_vm.toggleGlow}},[_c('div',{class:_vm.glowOptionClass()},[(_vm.milestoneGlow)?_c('span',{staticClass:\"fas fa-check\"}):_vm._e()]),_c('span',{staticClass:\"c-modal__confirmation-toggle__text\"},[_vm._v(\" Make button glow when new milestones have been reached \")])]),_c('div',{staticClass:\"l-singularity-milestone-modal-container-outer\"},[_c('div',{staticClass:\"l-singularity-milestone-modal-container-inner\"},_vm._l((_vm.milestones),function(milestone){return _c('SingularityMilestoneComponent',{key:milestone.id,attrs:{\"milestone\":milestone}})}),1)]),_c('div',{staticClass:\"l-singularity-milestone-sort-container\"},[_c('button',{staticClass:\"c-singularity-milestone-modal-sort-button\",on:{\"click\":function($event){return _vm.cycleButton(0)}}},[_vm._v(\" To Milestone: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.resourceStr)+\" \")]),_c('button',{staticClass:\"c-singularity-milestone-modal-sort-button\",on:{\"click\":function($event){return _vm.cycleButton(1)}}},[_vm._v(\" Sort by: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.sortStr)+\" \")]),_c('button',{staticClass:\"c-singularity-milestone-modal-sort-button\",on:{\"click\":function($event){return _vm.cycleButton(2)}}},[_vm._v(\" Completed Milestones: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.completedStr)+\" \")]),_c('button',{staticClass:\"c-singularity-milestone-modal-sort-button\",on:{\"click\":function($event){return _vm.cycleButton(3)}}},[_vm._v(\" Sort Order: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.orderStr)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityMilestonesModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityMilestonesModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingularityMilestonesModal.vue?vue&type=template&id=24b120bc&\"\nimport script from \"./SingularityMilestonesModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SingularityMilestonesModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":!_vm.onInfoPage && !_vm.willStartRun,\"show-confirm\":!_vm.onInfoPage && _vm.willStartRun,\"confirm-class\":\"o-primary-btn--width-medium c-modal-hard-reset-btn c-modal__confirm-btn\"},on:{\"confirm\":_vm.startRun},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Entering Speedrun Mode \")]},proxy:true},{key:\"confirm\",fn:function(){return [_vm._v(\" Start Run! \")]},proxy:true},{key:\"cancel\",fn:function(){return [_vm._v(\" Cancel \")]},proxy:true}])},[(_vm.onInfoPage)?_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" This will start a save with additional statistics tracking for when you reach certain points of the game. These will be visible in the bottom-right of the screen and on a dedicated subtab of Statistics. \"),_c('br'),_c('br'),_vm._v(\" Almost all animations and confirmations are disabled by default, but you can change any of these settings before you reach their required progression. When you begin the run, the game remains paused until your antimatter changes, allowing you to configure all your settings before starting. In order to avoid having to wait for a long time before actually starting an optimized run, a few achievements are given for free. \"),_c('br'),_c('br'),_c('i',[_vm._v(\" There is no additional content in Speedrun Mode. \")]),_c('br'),_c('br'),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-hard-reset-btn c-modal__confirm-btn\",on:{\"click\":_vm.nextPage}},[_vm._v(\" Continue \")])],1):_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" You can type in text below to name your speedrun save. This will have no effects on gameplay and only identifies this particular save as yours. If no name is given, a random name will be generated instead. This name can be changed by clicking your name in the speedrun info box, as long as the timer has not started yet. \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.name),expression:\"name\"}],ref:\"name\",staticClass:\"c-modal-input c-modal-hard-reset__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.name)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.name=$event.target.value}}}),_c('br'),_c('br'),_vm._v(\" Speedrun saves can be imported and exported like regular saves. Importing a speedrun save will mark it as a Segmented run, as importing and exporting allows for optimization of individual segments of the game. Without importing, saves will remain as Single-segment runs. \"),_c('br'),_c('br'),_vm._v(\" You can modify the Glyph RNG seed in the Options tab before starting your run, if desired. \"),_c('br'),_c('br'),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" Starting a speedrun will reset your save to the beginning of the game. Some things will remain, such as full-game completion stats, visual settings, automator scripts, and Glyph cosmetics, but otherwise it will be as if you had just finished the entire game and chose to restart at the credits screen. Type in \\\"Gotta Go Fast!\\\" below to confirm and (re)start the run. \")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.confirmPhrase),expression:\"confirmPhrase\"}],ref:\"confirmPhrase\",staticClass:\"c-modal-input c-modal-hard-reset__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.confirmPhrase)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.confirmPhrase=$event.target.value}}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunModeModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunModeModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedrunModeModal.vue?vue&type=template&id=150b576c&\"\nimport script from \"./SpeedrunModeModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedrunModeModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{staticClass:\"c-shop-modal\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Support The Developer - coins \")]},proxy:true}])},[(_vm.macPurchaser)?_c('span',[_c('button',{staticClass:\"o-shop-button-button\",on:{\"click\":function($event){return _vm.macConfirm()}}},[_vm._v(\"Confirm Purchase to Receive STDs\")]),_c('br'),_c('span',[_vm._v(\"(Required on Mac)\")]),_c('br')]):_vm._e(),_c('div',{staticClass:\"l-modal-store-content\"},[_c('img',{attrs:{\"src\":\"images/std_coin.png\"}}),_c('div',{staticClass:\"c-modal-store-buttons\"},[_c('StdStoreRow',{attrs:{\"amount\":30,\"cost\":2.99}}),_c('StdStoreRow',{attrs:{\"amount\":60,\"cost\":4.99}}),_c('StdStoreRow',{attrs:{\"amount\":140,\"cost\":9.99}}),_c('StdStoreRow',{attrs:{\"amount\":300,\"cost\":19.99}}),_c('StdStoreRow',{attrs:{\"amount\":1000,\"cost\":49.99}})],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal-store-btn-container\"},[_c('div',{staticClass:\"o-modal-store-label\"},[_vm._v(\" \"+_vm._s(_vm.amount)+\" STDs \")]),_c('button',{staticClass:\"o-modal-store-btn\",on:{\"click\":_vm.purchase}},[_vm._v(\" $\"),_c('span',[_vm._v(_vm._s(_vm.cost))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StdStoreRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StdStoreRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StdStoreRow.vue?vue&type=template&id=15d3b44e&\"\nimport script from \"./StdStoreRow.vue?vue&type=script&lang=js&\"\nexport * from \"./StdStoreRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StdStoreModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StdStoreModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StdStoreModal.vue?vue&type=template&id=3f269bde&\"\nimport script from \"./StdStoreModal.vue?vue&type=script&lang=js&\"\nexport * from \"./StdStoreModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{staticClass:\"c-modal-import-tree\",attrs:{\"show-cancel\":!_vm.inputIsValid,\"show-confirm\":_vm.inputIsValid},on:{\"confirm\":_vm.confirm},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.modalTitle)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.confirmText)+\" \")]},proxy:true}])},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input c-modal-import-tree__input\",class:{ 'l-delete-input' : _vm.deleting },attrs:{\"type\":\"text\",\"maxlength\":\"1500\",\"disabled\":_vm.deleting},domProps:{\"value\":(_vm.input)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.confirm.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)}],\"input\":function($event){if($event.target.composing){ return; }_vm.input=$event.target.value}}}),_c('div',{staticClass:\"c-two-column\"},[_c('div',{staticClass:\"c-study-info l-modal-import-tree__tree-info\"},[(_vm.inputIsSecret)?_c('div',[_vm._v(\" ??? \")]):(_vm.inputIsValidTree)?[(_vm.invalidMessage)?_c('div',{staticClass:\"l-modal-import-tree__tree-info-line\",domProps:{\"innerHTML\":_vm._s(_vm.invalidMessage)}}):_vm._e(),(_vm.isImporting)?_c('StudyStringLine',{attrs:{\"tree\":_vm.combinedTree,\"into-empty\":false}}):_vm._e(),_c('StudyStringLine',{attrs:{\"tree\":_vm.importedTree,\"into-empty\":true}}),(_vm.deleting && _vm.importedTree.hasInfo)?_c('StudyTreeInfo',{attrs:{\"header-text\":\"Study Preset contains:\",\"tree-status\":_vm.importedTree}}):_vm._e(),(!_vm.deleting && !_vm.isImporting && _vm.importedTree.hasInfo)?_c('StudyTreeInfo',{attrs:{\"header-text\":\"Status after loading with no studies:\",\"tree-status\":_vm.importedTree}}):_vm._e(),(!_vm.deleting && _vm.combinedTree.hasInfo)?_c('StudyTreeInfo',{attrs:{\"header-text\":\"Status after loading with current tree:\",\"tree-status\":_vm.combinedTree}}):_vm._e()]:_vm._e(),(!_vm.deleting && !_vm.inputIsValidTree && _vm.hasInput)?_c('div',[_vm._v(\" Not a valid tree \")]):_vm._e()],2),_c('div',{staticClass:\"c-study-preview\"},[_c('StudyStringPreview',{attrs:{\"show-preview\":_vm.inputIsValidTree,\"new-studies\":!_vm.isImporting || (_vm.canEternity && _vm.respecAndLoad) ? _vm.importedTree.newStudiesArray\n : _vm.combinedTree.newStudiesArray,\"disregard-current-studies\":!_vm.isImporting || (_vm.canEternity && _vm.respecAndLoad)}})],1)]),(!_vm.isImporting && _vm.inputIsValidTree)?_c('div',[_c('br'),(!_vm.deleting)?_c('PrimaryButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('This will format the study preset text, for example, changing \\'a,b,c|d\\' to \\'a, b, c | d\\'.'),expression:\"'This will format the study preset text, for example, changing \\\\'a,b,c|d\\\\' to \\\\'a, b, c | d\\\\'.'\"}],on:{\"click\":_vm.convertInputShorthands}},[_vm._v(\" Format Preset Text \")]):_vm._e()],1):_vm._e(),(_vm.isImporting)?_c('span',[_c('br'),_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.canEternity ? '' : 'You are currently unable to eternity, so this will only do a normal load.'),expression:\"canEternity ? '' : 'You are currently unable to eternity, so this will only do a normal load.'\"}],staticClass:\"c-modal__confirmation-toggle\",on:{\"click\":function($event){_vm.respecAndLoad = !_vm.respecAndLoad}}},[_c('div',{class:{\n 'c-modal__confirmation-toggle__checkbox': true,\n 'c-modal__confirmation-toggle__checkbox--active': _vm.respecAndLoad,\n }},[(_vm.respecAndLoad)?_c('span',{staticClass:\"fas fa-check\"}):_vm._e()]),_c('span',{staticClass:\"c-modal__confirmation-toggle__text\"},[_vm._v(\" Also respec tree and eternity \"),(!_vm.canEternity)?_c('span',{staticClass:\"c-modal__confirmation-toggle__warning\"},[_vm._v(\" ! \")]):_vm._e()])])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-modal-import-tree__tree-info-line\"},[(_vm.tree.timeTheorems === 0 && _vm.tree.spaceTheorems === 0)?_c('div',[_c('i',[_vm._v(\"Importing this \"+_vm._s(_vm.importDestString)+\" will not purchase any new Time Studies.\")])]):_c('div',[_vm._v(\" Importing \"+_vm._s(_vm.importDestString)+\" will purchase: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.tree.newStudies)+\" (Cost: \"+_vm._s(_vm.formatTheoremCost(_vm.tree.timeTheorems, _vm.tree.spaceTheorems))+\") \")]),_c('br')])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyStringLine.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyStringLine.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StudyStringLine.vue?vue&type=template&id=c66ba3d2&\"\nimport script from \"./StudyStringLine.vue?vue&type=script&lang=js&\"\nexport * from \"./StudyStringLine.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-study-string-preview__tree--wrapper\"},[(_vm.showPreview)?_c('div',{staticClass:\"l-time-study-tree l-study-string-preview__tree\",style:(_vm.treeStyleObject)},[_vm._l((_vm.studies),function(setup){return _c('PseudoTimeStudyButton',{key:setup.study.type.toString() + setup.study.id.toString(),attrs:{\"setup\":setup,\"force-is-bought\":_vm.getStudyForceBoughtState(_vm.studyString(setup.study)),\"is-new-from-import\":!_vm.disregardCurrentStudies && _vm.newStudies.includes(_vm.studyString(setup.study))}})}),_c('svg',{staticClass:\"l-time-study-connection\",style:(_vm.treeStyleObject)},_vm._l((_vm.connections),function(setup,index){return _c('PseudoTimeStudyConnection',{key:'connection' + index,attrs:{\"force-is-bought\":_vm.getConnectionForceBoughtState(setup),\"setup\":setup}})}),1)],2):_c('span',{staticClass:\"c-unavailable-warning\"},[_vm._v(\" Preview Unavailable \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:[_vm.classObject, _vm.studyClass],style:(_vm.styleObject)},[_vm._v(\" \"+_vm._s(_vm.studyString)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PseudoTimeStudyButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PseudoTimeStudyButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PseudoTimeStudyButton.vue?vue&type=template&id=10ee1de0&scoped=true&\"\nimport script from \"./PseudoTimeStudyButton.vue?vue&type=script&lang=js&\"\nexport * from \"./PseudoTimeStudyButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PseudoTimeStudyButton.vue?vue&type=style&index=0&id=10ee1de0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"10ee1de0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isOverridden)?_c('line',{class:_vm.classObject,attrs:{\"x1\":_vm.percents(_vm.setup.x1),\"y1\":_vm.percents(_vm.setup.y1),\"x2\":_vm.percents(_vm.setup.x2),\"y2\":_vm.percents(_vm.setup.y2)}}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PseudoTimeStudyConnection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PseudoTimeStudyConnection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PseudoTimeStudyConnection.vue?vue&type=template&id=6dda8e60&scoped=true&\"\nimport script from \"./PseudoTimeStudyConnection.vue?vue&type=script&lang=js&\"\nexport * from \"./PseudoTimeStudyConnection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PseudoTimeStudyConnection.vue?vue&type=style&index=0&id=6dda8e60&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6dda8e60\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyStringPreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyStringPreview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StudyStringPreview.vue?vue&type=template&id=09d9af6c&scoped=true&\"\nimport script from \"./StudyStringPreview.vue?vue&type=script&lang=js&\"\nexport * from \"./StudyStringPreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./StudyStringPreview.vue?vue&type=style&index=0&id=09d9af6c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"09d9af6c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-tree-info\"},[_c('span',{staticClass:\"l-tree-info-header\",domProps:{\"innerHTML\":_vm._s(_vm.headerText)}}),(_vm.treeStatus.firstPaths)?_c('div',{staticClass:\"l-modal-import-tree__tree-info-line\"},[_vm._v(\" Dimension Split: \"+_vm._s(_vm.treeStatus.firstPaths)+\" \")]):_vm._e(),(_vm.treeStatus.secondPaths)?_c('div',{staticClass:\"l-modal-import-tree__tree-info-line\"},[_vm._v(\" Pace Split: \"+_vm._s(_vm.treeStatus.secondPaths)+\" \")]):_vm._e(),(_vm.treeStatus.ec > 0)?_c('div',{staticClass:\"l-modal-import-tree__tree-info-line\"},[_vm._v(\" Eternity Challenge: \"+_vm._s(_vm.treeStatus.ec)+\" \"+_vm._s(_vm.treeStatus.startEC ? \"(will start)\" : \"\")+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyTreeInfo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyTreeInfo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StudyTreeInfo.vue?vue&type=template&id=493fb126&scoped=true&\"\nimport script from \"./StudyTreeInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./StudyTreeInfo.vue?vue&type=script&lang=js&\"\nimport style0 from \"./StudyTreeInfo.vue?vue&type=style&index=0&id=493fb126&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"493fb126\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyStringModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyStringModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StudyStringModal.vue?vue&type=template&id=35f516e0&scoped=true&\"\nimport script from \"./StudyStringModal.vue?vue&type=script&lang=js&\"\nexport * from \"./StudyStringModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./StudyStringModal.vue?vue&type=style&index=0&id=35f516e0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"35f516e0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"switchAutomatorMode\"},on:{\"confirm\":_vm.toggleAutomatorMode},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Change Automator to \"+_vm._s(_vm.otherMode)+\" editor \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Change Modes \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" This will stop your current script if it is running! \"),(_vm.errorCount)?_c('div',[_c('br'),_vm._v(\" Your script has some errors which may not get converted properly to \"+_vm._s(_vm.otherMode)+\" mode. Continuing on will make the Automator attempt to parse these lines anyway, although some information may get lost or not be converted properly. \")]):_vm._e(),(_vm.lostBlocks)?_c('b',[_c('br'),_vm._v(\" Warning: Your script also currently has some lines which cannot interpreted as particular commands. These lines will end up being deleted since there is no block they can be converted into. If an error occurs at the start of a loop or IF, this may end up deleting large portions of your script! \"),_c('span',{staticClass:\"l-lost-text\"},[_vm._v(\" Changing editor modes right now will cause \"+_vm._s(_vm.quantifyInt(\"line\", _vm.lostBlocks))+\" of code to be irreversibly lost! \")])]):_vm._e(),_c('br'),_c('span',{staticClass:\"l-lost-text\"},[_vm._v(\" Hiding this confirmation is not recommended, as it may cause parts of scripts to be immediately and irreversibly lost if your script has errors when attempting to switch modes. \")]),_c('br'),_c('br'),_vm._v(\" Are you sure you want to change to the \"+_vm._s(_vm.otherMode)+\" editor? \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SwitchAutomatorEditorModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SwitchAutomatorEditorModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SwitchAutomatorEditorModal.vue?vue&type=template&id=6ca17165&scoped=true&\"\nimport script from \"./SwitchAutomatorEditorModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SwitchAutomatorEditorModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SwitchAutomatorEditorModal.vue?vue&type=style&index=0&id=6ca17165&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6ca17165\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Visual Changes \")]},proxy:true},{key:\"cancel-text\",fn:function(){return [_vm._v(\" Remain \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Swap \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" We noticed that you've loaded an old save; a few visual changes have been made since older versions of the game: \"),_c('br'),_c('br'),_c('div',{staticClass:\"c-visual-change-list\"},_vm._l((_vm.listEntries),function(entry,i){return _c('div',{key:i,staticClass:\"c-visual-change-list-entry\"},[_c('b',[_vm._v(\"•\")]),_vm._v(\" \"+_vm._s(entry)+\" \")])}),0),_c('br'),_c('br'),_vm._v(\" You can change between the Classic UI which older versions of the game used and the newer Modern UI in the Visual Options tab at any time. Would you like to swap to the Modern UI now? \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UiChoiceModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UiChoiceModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UiChoiceModal.vue?vue&type=template&id=369e8fe0&scoped=true&\"\nimport script from \"./UiChoiceModal.vue?vue&type=script&lang=js&\"\nexport * from \"./UiChoiceModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UiChoiceModal.vue?vue&type=style&index=0&id=369e8fe0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"369e8fe0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"glyphUndo\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to undo equipping a Glyph \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text c-text-wrapper\"},[_vm._v(\" The last equipped Glyph will be removed. Reality will be reset, but some things will be restored to what they were when it was equipped: \"),_c('br'),_c('div',{staticClass:\"c-text-wrapper\"},[_c('br'),_vm._v(\"- Antimatter, Infinity Points, and Eternity Points \"),_c('br'),_vm._v(\"- Dilation Upgrades, Tachyon Particles, and Dilated Time \"),_c('br'),_vm._v(\"- Time Theorems and Eternity Challenge completions \"),_c('br'),_vm._v(\"- Time Dimension and Reality unlocks \"),_c('br'),_vm._v(\"- Time in current Infinity/Eternity/Reality \"),(_vm.showStoredGameTime)?_c('span',[_c('br'),_vm._v(\"- Stored game time\")]):_vm._e()]),_c('br'),_vm._v(\" Note that if you invalidate special requirements for certain things (such as the achievement for completing a Reality without producing antimatter), they will remain invalid even after undoing. In those cases, you will need to complete the conditions in a single Reality without using undo. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UndoGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UndoGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UndoGlyphModal.vue?vue&type=template&id=070fe22a&scoped=true&\"\nimport script from \"./UndoGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./UndoGlyphModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UndoGlyphModal.vue?vue&type=style&index=0&id=070fe22a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"070fe22a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.disableLock},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.upgradeStr)+\" Condition Lock \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Disable Lock \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Are you sure you wish to \"+_vm._s(_vm.lockEvent)+\"? Doing this right now will cause you to \"),_c('span',{staticClass:\"l-emphasis\"},[_vm._v(\" fail the requirement for the \"+_vm._s(_vm.upgradeStr)+\" \\\"\"+_vm._s(_vm.upgrade.name)+\"\\\" \")]),_c('span',{attrs:{\"ach-tooltip\":_vm.upgrade.requirement}},[_c('i',{staticClass:\"fas fa-question-circle\"})]),_c('br'),_c('br'),_vm._v(\" Selecting \\\"Cancel\\\" will close this modal with no effect, while selecting \\\"Disable Lock\\\" will disable the requirement check for this upgrade and prevent this message from reappearing unless you turn it back on. \"),_c('br'),_c('br'),_vm._v(\" Neither of these options will perform the action you just attempted, so you will need to try again. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UpgradeMechanicLockModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UpgradeMechanicLockModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UpgradeMechanicLockModal.vue?vue&type=template&id=576557b4&scoped=true&\"\nimport script from \"./UpgradeMechanicLockModal.vue?vue&type=script&lang=js&\"\nexport * from \"./UpgradeMechanicLockModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UpgradeMechanicLockModal.vue?vue&type=style&index=0&id=576557b4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"576557b4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":false},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are Warping Reality \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" WARP!! \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},_vm._l((_vm.message),function(line,index){return _c('span',{key:index},[_vm._v(\" \"+_vm._s(line)+\" \"),_c('br')])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpRealityModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpRealityModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./WarpRealityModal.vue?vue&type=template&id=4bc01917&\"\nimport script from \"./WarpRealityModal.vue?vue&type=script&lang=js&\"\nexport * from \"./WarpRealityModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" List of full nerf effects of specific Hostilities \")]},proxy:true}])},[_c('div',{staticClass:\"pelle-effects-container\"},_vm._l((_vm.nerfs),function(nerf,idx){return _c('p',{key:idx},[_vm._v(\" \"+_vm._s(nerf)+\" \")])}),0),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn\",on:{\"click\":_vm.emitClose}},[_vm._v(\" Okay \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CorruptionFullEffectsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CorruptionFullEffectsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CorruptionFullEffectsModal.vue?vue&type=template&id=27faf645&scoped=true&\"\nimport script from \"./CorruptionFullEffectsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CorruptionFullEffectsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CorruptionFullEffectsModal.vue?vue&type=style&index=0&id=27faf645&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"27faf645\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{staticClass:\"c-modal-s12-games\"},[_c('div',{staticClass:\"c-modal__title\"},[_vm._v(\" Games \")]),_c('S12GameEntries'),_c('div',{staticClass:\"c-modal-s12-games__magnified-display\"},[(_vm.S12Games.selected !== -1)?[_c('img',{staticClass:\"c-modal-s12-games__magnified-display__img\",attrs:{\"src\":(\"images/s12/\" + (_vm.S12Games.entries[_vm.S12Games.selected].image))}}),_c('b',{staticClass:\"c-modal-s12-games__magnified-display__text\"},[_vm._v(\" \"+_vm._s(_vm.S12Games.entries[_vm.S12Games.selected].name)+\" \")])]:_vm._e()],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-s12-games-container\"},_vm._l((_vm.S12Games.entries),function(game,idx){return _c('div',{key:game.name,staticClass:\"c-s12-game\",class:{ 'c-s12-game--selected': _vm.S12Games.selected === idx, },on:{\"click\":function($event){return _vm.handleClick(idx)}}},[_c('div',{staticClass:\"c-s12-game__inner\"},[_c('img',{staticClass:\"c-s12-game__img\",attrs:{\"src\":(\"images/s12/\" + (game.image))}}),_c('div',{staticClass:\"c-s12-game__text\"},[_vm._v(\" \"+_vm._s(game.name)+\" \")])])])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default {\r\n entries: [{\r\n name: \"FE000000\",\r\n link: \"https://dan-simon.github.io/misc/fe000000/\",\r\n image: \"game--hex-game.png\"\r\n },\r\n {\r\n name: \"Trimps\",\r\n link: \"https://trimps.github.io/\",\r\n image: \"game--trimps.png\"\r\n },\r\n {\r\n name: \"Mine Defense\",\r\n link: \"http://scholtek.com/minedefense\",\r\n image: \"game--mine-defense.png\"\r\n },\r\n {\r\n name: \"Wizard and Minion Idle\",\r\n link: \"https://www.kongregate.com/games/Oninou/wami\",\r\n image: \"game--wami.png\"\r\n },\r\n {\r\n name: \"Anti-Idle\",\r\n link: \"https://www.kongregate.com/games/Tukkun/anti-idle-the-game\",\r\n image: \"game--anti-idle.png\"\r\n },\r\n {\r\n name: \"Synergism\",\r\n link: \"https://pseudo-corp.github.io/SynergismOfficial/\",\r\n image: \"game--synergism.png\"\r\n },\r\n {\r\n name: \"Universal Paperclips\",\r\n link: \"https://www.decisionproblem.com/paperclips/\",\r\n image: \"game--universal-paperclips.png\"\r\n },\r\n {\r\n name: \"Monies 2\",\r\n link: \"https://sneekxy.nmtechgroup.com/monies2/\",\r\n image: \"game--monies2.png\"\r\n },\r\n {\r\n name: \"The First Alkahistorian\",\r\n link: \"https://nagshell.github.io/elemental-inception-incremental/\",\r\n image: \"game--alkahistorian.png\"\r\n },\r\n {\r\n name: \"Melvor Idle\",\r\n link: \"https://melvoridle.com/\",\r\n image: \"game--melvor-idle.svg\"\r\n }],\r\n selected: -1,\r\n};\r\n","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12GameEntries.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12GameEntries.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./S12GameEntries.vue?vue&type=template&id=25a74b90&scoped=true&\"\nimport script from \"./S12GameEntries.vue?vue&type=script&lang=js&\"\nexport * from \"./S12GameEntries.vue?vue&type=script&lang=js&\"\nimport style0 from \"./S12GameEntries.vue?vue&type=style&index=0&id=25a74b90&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"25a74b90\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12GamesModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12GamesModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./S12GamesModal.vue?vue&type=template&id=02f6719c&scoped=true&\"\nimport script from \"./S12GamesModal.vue?vue&type=script&lang=js&\"\nexport * from \"./S12GamesModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./S12GamesModal.vue?vue&type=style&index=0&id=02f6719c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"02f6719c\",\n null\n \n)\n\nexport default component.exports","import { ProgressChecker } from \"./storage/progress-checker\";\r\n\r\nimport CloudInvalidDataModal from \"@/components/modals/cloud/CloudInvalidDataModal\";\r\nimport CloudLoadConflictModal from \"@/components/modals/cloud/CloudLoadConflictModal\";\r\nimport CloudSaveConflictModal from \"@/components/modals/cloud/CloudSaveConflictModal\";\r\nimport EternityChallengeStartModal from \"@/components/modals/challenges/EternityChallengeStartModal\";\r\nimport InfinityChallengeStartModal from \"@/components/modals/challenges/InfinityChallengeStartModal\";\r\nimport MessageModal from \"@/components/modals/MessageModal\";\r\nimport NormalChallengeStartModal from \"@/components/modals/challenges/NormalChallengeStartModal\";\r\n\r\nimport AntimatterGalaxyModal from \"@/components/modals/prestige/AntimatterGalaxyModal\";\r\nimport ArmageddonModal from \"@/components/modals/prestige/ArmageddonModal\";\r\nimport BigCrunchModal from \"@/components/modals/prestige/BigCrunchModal\";\r\nimport DimensionBoostModal from \"@/components/modals/prestige/DimensionBoostModal\";\r\nimport EnterCelestialsModal from \"@/components/modals/prestige/EnterCelestialsModal\";\r\nimport EnterDilationModal from \"@/components/modals/prestige/EnterDilationModal\";\r\nimport EternityModal from \"@/components/modals/prestige/EternityModal\";\r\nimport ExitChallengeModal from \"@/components/modals/prestige/ExitChallengeModal\";\r\nimport ExitDilationModal from \"@/components/modals/prestige/ExitDilationModal\";\r\nimport HardResetModal from \"@/components/modals/prestige/HardResetModal\";\r\nimport RealityModal from \"@/components/modals/prestige/RealityModal\";\r\nimport ReplicantiGalaxyModal from \"@/components/modals/prestige/ReplicantiGalaxyModal\";\r\nimport ResetRealityModal from \"@/components/modals/prestige/ResetRealityModal\";\r\nimport ResetMendingModal from \"@/components/modals/prestige/ResetMendingModal\";\r\n\r\nimport AnimationOptionsModal from \"@/components/modals/options/AnimationOptionsModal\";\r\nimport AwayProgressOptionsModal from \"@/components/modals/options/AwayProgressOptionsModal\";\r\nimport BackupWindowModal from \"@/components/modals/options/BackupWindowModal\";\r\nimport ConfirmationOptionsModal from \"@/components/modals/options/ConfirmationOptionsModal\";\r\nimport CosmeticSetChoiceModal from \"@/components/modals/options/glyph-appearance/CosmeticSetChoiceModal\";\r\nimport GlyphDisplayOptionsModal from \"@/components/modals/options/glyph-appearance/GlyphDisplayOptionsModal\";\r\nimport HiddenTabsModal from \"@/components/modals/options/hidden-tabs/HiddenTabsModal\";\r\nimport HotkeysModal from \"@/components/modals/options/HotkeysModal\";\r\nimport InfoDisplayOptionsModal from \"@/components/modals/options/InfoDisplayOptionsModal\";\r\nimport NewsOptionsModal from \"@/components/modals/options/NewsOptionsModal\";\r\nimport PreferredTreeModal from \"@/components/modals/options/PreferredTreeModal\";\r\nimport SingleGlyphAppearanceModal from \"@/components/modals/options/glyph-appearance/SingleGlyphAppearanceModal\";\r\nimport SpeedUpModal from \"@/components/modals/options/SpeedUpModal\"\r\nimport SpeedUpReportModal from \"@/components/modals/options/SpeedUpReportModal\"\r\n\r\nimport DeleteCompanionGlyphModal from \"@/components/modals/glyph-management/DeleteCompanionGlyphModal\";\r\nimport DeleteGlyphModal from \"@/components/modals/glyph-management/DeleteGlyphModal\";\r\nimport PurgeAllRejectedGlyphsModal from \"@/components/modals/glyph-management/PurgeAllRejectedGlyphsModal\";\r\nimport PurgeAllUnprotectedGlyphsModal from \"@/components/modals/glyph-management/PurgeAllUnprotectedGlyphsModal\";\r\nimport PurgeGlyphModal from \"@/components/modals/glyph-management/PurgeGlyphModal\";\r\nimport RefineGlyphModal from \"@/components/modals/glyph-management/RefineGlyphModal\";\r\nimport SacrificeGlyphModal from \"@/components/modals/glyph-management/SacrificeGlyphModal\";\r\n\r\nimport AutobuyerEditModal from \"@/components/modals/AutobuyerEditModal\";\r\nimport AutomatorScriptTemplate from \"@/components/modals/AutomatorScriptTemplate\";\r\nimport AwayProgressModal from \"@/components/modals/AwayProgressModal\";\r\nimport BreakInfinityModal from \"@/components/modals/BreakInfinityModal\";\r\nimport CatchupModal from \"@/components/modals/catchup/CatchupModal\";\r\nimport ChangelogModal from \"@/components/modals/ChangelogModal\";\r\nimport ChangeNameModal from \"@/components/modals/ChangeNameModal\";\r\nimport ClearConstantsModal from \"@/components/modals/ClearConstantsModal\";\r\nimport CreditsModal from \"@/components/modals/CreditsModal\";\r\nimport DeleteAutomatorScriptModal from \"@/components/modals/DeleteAutomatorScriptModal\";\r\nimport EnslavedHintsModal from \"@/components/modals/EnslavedHintsModal\";\r\nimport GlyphSetSaveDeleteModal from \"@/components/modals/GlyphSetSaveDeleteModal\";\r\nimport GlyphShowcasePanelModal from \"@/components/modals/GlyphShowcasePanelModal\";\r\nimport H2PModal from \"@/components/modals/H2PModal\";\r\nimport ImportAutomatorDataModal from \"@/components/modals/ImportAutomatorDataModal\";\r\nimport ImportFilterModal from \"@/components/modals/ImportFilterModal\";\r\nimport ImportSaveModal from \"@/components/modals/ImportSaveModal\";\r\nimport ImportTimeStudyConstants from \"@/components/modals/ImportTimeStudyConstants\";\r\nimport InformationModal from \"@/components/modals/InformationModal\";\r\nimport LoadGameModal from \"@/components/modals/LoadGameModal\";\r\nimport ModifySeedModal from \"@/components/modals/ModifySeedModal\";\r\nimport PelleEffectsModal from \"@/components/modals/PelleEffectsModal\";\r\nimport RealityGlyphCreationModal from \"@/components/modals/RealityGlyphCreationModal\";\r\nimport ReplaceGlyphModal from \"@/components/modals/ReplaceGlyphModal\";\r\nimport RespecIAPModal from \"@/components/modals/RespecIAPModal\";\r\nimport SacrificeModal from \"@/components/modals/SacrificeModal\";\r\nimport SingularityMilestonesModal from \"@/components/modals/SingularityMilestonesModal\";\r\nimport SpeedrunModeModal from \"@/components/modals/SpeedrunModeModal\";\r\nimport StdStoreModal from \"@/components/modals/StdStoreModal\";\r\nimport StudyStringModal from \"@/components/modals/StudyStringModal\";\r\nimport SwitchAutomatorEditorModal from \"@/components/modals/SwitchAutomatorEditorModal\";\r\nimport UiChoiceModal from \"@/components/modals/UiChoiceModal\";\r\nimport UndoGlyphModal from \"@/components/modals/UndoGlyphModal\";\r\nimport UpgradeMechanicLockModal from \"@/components/modals/UpgradeMechanicLockModal\";\r\nimport WarpRealityModal from \"@/components/modals/WarpRealityModal\";\r\nimport CorruptionFullEffectsModal from \"@/components/modals/CorruptionFullEffectsModal\";\r\n\r\nimport S12GamesModal from \"@/components/modals/secret-themes/S12GamesModal\";\r\n\r\nlet nextModalID = 0;\r\nexport class Modal {\r\n constructor(component, priority = 0, closeEvent) {\r\n this._component = component;\r\n this._modalConfig = {};\r\n this._priority = priority;\r\n this._closeEvent = closeEvent;\r\n }\r\n\r\n // We can't handle this in the Vue components because if the modal order changes, all the event listeners from the\r\n // top modal end up getting removed from the EventHub due to the component being temporarily destroyed. This could\r\n // result in the component sticking around because an event it was listening for happened while it wasn't on top.\r\n applyCloseListeners(closeEvent) {\r\n // Most of the time the close event will be a prestige event, in which case we want it to trigger on all higher\r\n // prestiges as well\r\n const prestigeOrder = [GAME_EVENT.DIMBOOST_AFTER, GAME_EVENT.GALAXY_RESET_AFTER, GAME_EVENT.BIG_CRUNCH_AFTER,\r\n GAME_EVENT.ETERNITY_RESET_AFTER, GAME_EVENT.REALITY_RESET_AFTER];\r\n let shouldClose = false;\r\n for (const prestige of prestigeOrder) {\r\n if (prestige === closeEvent) shouldClose = true;\r\n if (shouldClose) EventHub.ui.on(prestige, () => this.removeFromQueue(), this._component);\r\n }\r\n\r\n // In a few cases we want to trigger a close based on a non-prestige event, so if the specified event wasn't in\r\n // the prestige array above, we just add it on its own\r\n if (!shouldClose) EventHub.ui.on(closeEvent, () => this.removeFromQueue(), this._component);\r\n }\r\n\r\n show(modalConfig) {\r\n if (!GameUI.initialized) return;\r\n this._uniqueID = nextModalID++;\r\n this._props = Object.assign({}, modalConfig || {});\r\n if (this._closeEvent) this.applyCloseListeners(this._closeEvent);\r\n if (modalConfig?.closeEvent) this.applyCloseListeners(modalConfig.closeEvent);\r\n\r\n const modalQueue = ui.view.modal.queue;\r\n // Add this modal to the front of the queue and sort based on priority to ensure priority is maintained.\r\n modalQueue.unshift(this);\r\n Modal.sortModalQueue();\r\n }\r\n\r\n get isOpen() {\r\n return ui.view.modal.current === this;\r\n }\r\n\r\n get component() {\r\n return this._component;\r\n }\r\n\r\n get props() {\r\n return this._props;\r\n }\r\n\r\n get priority() {\r\n return this._priority;\r\n }\r\n\r\n removeFromQueue() {\r\n EventHub.ui.offAll(this._component);\r\n ui.view.modal.queue = ui.view.modal.queue.filter(m => m._uniqueID !== this._uniqueID);\r\n if (ui.view.modal.queue.length === 0) ui.view.modal.current = undefined;\r\n else ui.view.modal.current = ui.view.modal.queue[0];\r\n }\r\n\r\n static sortModalQueue() {\r\n const modalQueue = ui.view.modal.queue;\r\n modalQueue.sort((x, y) => y.priority - x.priority);\r\n // Filter out multiple instances of the same modal.\r\n const singleQueue = [...new Set(modalQueue)];\r\n ui.view.modal.queue = singleQueue;\r\n ui.view.modal.current = singleQueue[0];\r\n }\r\n\r\n static hide() {\r\n if (!GameUI.initialized) return;\r\n ui.view.modal.queue.shift();\r\n if (ui.view.modal.queue.length === 0) ui.view.modal.current = undefined;\r\n else ui.view.modal.current = ui.view.modal.queue[0];\r\n ui.view.modal.cloudConflict = [];\r\n }\r\n\r\n static hideAll() {\r\n if (!GameUI.initialized) return;\r\n while (ui.view.modal.queue.length) {\r\n if (ui.view.modal.queue[0].hide) {\r\n ui.view.modal.queue[0].hide();\r\n } else {\r\n Modal.hide();\r\n }\r\n }\r\n ui.view.modal.current = undefined;\r\n }\r\n\r\n static get isOpen() {\r\n return ui.view.modal.current instanceof this;\r\n }\r\n}\r\n\r\nclass ChallengeConfirmationModal extends Modal {\r\n show(id) {\r\n super.show({ id });\r\n }\r\n}\r\n\r\nclass TimeModal extends Modal {\r\n show(diff) {\r\n super.show({ diff });\r\n }\r\n}\r\n\r\n// If a new modal which can be shown in the same queue multiple times needs to be added\r\n// Additional code needs to be written to account for that\r\n\r\nModal.startEternityChallenge = new ChallengeConfirmationModal(EternityChallengeStartModal);\r\nModal.startInfinityChallenge = new ChallengeConfirmationModal(InfinityChallengeStartModal);\r\nModal.startNormalChallenge = new ChallengeConfirmationModal(NormalChallengeStartModal);\r\n\r\nModal.catchup = new TimeModal(CatchupModal, -1);\r\n\r\nModal.dimensionBoost = new Modal(DimensionBoostModal, 1, GAME_EVENT.DIMBOOST_AFTER);\r\n\r\nModal.antimatterGalaxy = new Modal(AntimatterGalaxyModal, 1, GAME_EVENT.GALAXY_RESET_AFTER);\r\nModal.bigCrunch = new Modal(BigCrunchModal, 1, GAME_EVENT.BIG_CRUNCH_AFTER);\r\nModal.exitChallenge = new Modal(ExitChallengeModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.replicantiGalaxy = new Modal(ReplicantiGalaxyModal, 1, GAME_EVENT.ETERNITY_RESET_AFTER);\r\nModal.eternity = new Modal(EternityModal, 1, GAME_EVENT.ETERNITY_RESET_AFTER);\r\nModal.enterDilation = new Modal(EnterDilationModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.exitDilation = new Modal(ExitDilationModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.reality = new Modal(RealityModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.resetReality = new Modal(ResetRealityModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.celestials = new Modal(EnterCelestialsModal, 1);\r\nModal.hardReset = new Modal(HardResetModal, 1);\r\nModal.backupWindows = new Modal(BackupWindowModal, 1);\r\nModal.enterSpeedrun = new Modal(SpeedrunModeModal);\r\nModal.modifySeed = new Modal(ModifySeedModal);\r\nModal.changeName = new Modal(ChangeNameModal);\r\nModal.armageddon = new Modal(ArmageddonModal, 1);\r\nModal.mending = new Modal(ResetMendingModal,1);\r\n\r\nModal.confirmationOptions = new Modal(ConfirmationOptionsModal);\r\nModal.infoDisplayOptions = new Modal(InfoDisplayOptionsModal);\r\nModal.awayProgressOptions = new Modal(AwayProgressOptionsModal);\r\nModal.glyphDisplayOptions = new Modal(GlyphDisplayOptionsModal);\r\nModal.cosmeticSetChoice = new Modal(CosmeticSetChoiceModal);\r\nModal.singleGlyphAppearance = new Modal(SingleGlyphAppearanceModal);\r\nModal.hotkeys = new Modal(HotkeysModal);\r\nModal.newsOptions = new Modal(NewsOptionsModal);\r\nModal.animationOptions = new Modal(AnimationOptionsModal);\r\nModal.hiddenTabs = new Modal(HiddenTabsModal);\r\nModal.preferredTree = new Modal(PreferredTreeModal);\r\nModal.speedUp = new Modal(SpeedUpModal);\r\nModal.speedUpReport = new Modal(SpeedUpReportModal);\r\n\r\nModal.upgradeLock = new Modal(UpgradeMechanicLockModal, 1);\r\nModal.deleteCompanion = new Modal(DeleteCompanionGlyphModal, 1);\r\nModal.glyphDelete = new Modal(DeleteGlyphModal, 1, GAME_EVENT.GLYPHS_CHANGED);\r\nModal.glyphPurge = new Modal(PurgeGlyphModal, 1, GAME_EVENT.GLYPHS_CHANGED);\r\nModal.glyphSacrifice = new Modal(SacrificeGlyphModal, 1, GAME_EVENT.GLYPHS_CHANGED);\r\nModal.glyphRefine = new Modal(RefineGlyphModal, 1, GAME_EVENT.GLYPHS_CHANGED);\r\nModal.deleteAllUnprotectedGlyphs = new Modal(PurgeAllUnprotectedGlyphsModal, 1, GAME_EVENT.GLYPHS_CHANGED);\r\nModal.deleteAllRejectedGlyphs = new Modal(PurgeAllRejectedGlyphsModal, 1, GAME_EVENT.GLYPHS_CHANGED);\r\n\r\nModal.glyphShowcasePanel = new Modal(GlyphShowcasePanelModal);\r\nModal.glyphUndo = new Modal(UndoGlyphModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.glyphReplace = new Modal(ReplaceGlyphModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.enslavedHints = new Modal(EnslavedHintsModal);\r\nModal.realityGlyph = new Modal(RealityGlyphCreationModal);\r\nModal.glyphSetSaveDelete = new Modal(GlyphSetSaveDeleteModal);\r\nModal.uiChoice = new Modal(UiChoiceModal);\r\nModal.h2p = new Modal(H2PModal);\r\nModal.information = new Modal(InformationModal);\r\nModal.credits = new Modal(CreditsModal, 1);\r\nModal.changelog = new Modal(ChangelogModal, 1);\r\nModal.awayProgress = new Modal(AwayProgressModal);\r\nModal.loadGame = new Modal(LoadGameModal);\r\nModal.import = new Modal(ImportSaveModal);\r\nModal.importFilter = new Modal(ImportFilterModal);\r\nModal.importScriptData = new Modal(ImportAutomatorDataModal);\r\nModal.automatorScriptDelete = new Modal(DeleteAutomatorScriptModal);\r\nModal.automatorScriptTemplate = new Modal(AutomatorScriptTemplate);\r\nModal.switchAutomatorEditorMode = new Modal(SwitchAutomatorEditorModal);\r\nModal.clearAutomatorConstants = new Modal(ClearConstantsModal);\r\nModal.importTSConstants = new Modal(ImportTimeStudyConstants);\r\nModal.autobuyerEditModal = new Modal(AutobuyerEditModal);\r\nModal.shop = new Modal(StdStoreModal);\r\nModal.studyString = new Modal(StudyStringModal);\r\nModal.singularityMilestones = new Modal(SingularityMilestonesModal);\r\nModal.pelleEffects = new Modal(PelleEffectsModal);\r\nModal.sacrifice = new Modal(SacrificeModal, 1, GAME_EVENT.DIMBOOST_AFTER);\r\nModal.breakInfinity = new Modal(BreakInfinityModal, 1, GAME_EVENT.ETERNITY_RESET_AFTER);\r\nModal.respecIAP = new Modal(RespecIAPModal);\r\nModal.warpReality = new Modal(WarpRealityModal);\r\nModal.corruptionFullEffects = new Modal(CorruptionFullEffectsModal);\r\n\r\nModal.s12Games = new Modal(S12GamesModal);\r\n\r\nfunction getSaveInfo(save) {\r\n const resources = {\r\n realTimePlayed: 0,\r\n totalAntimatter: new Decimal(0),\r\n infinities: new Decimal(0),\r\n eternities: new Decimal(0),\r\n realities: 0,\r\n infinityPoints: new Decimal(0),\r\n eternityPoints: new Decimal(0),\r\n realityMachines: new Decimal(0),\r\n imaginaryMachines: 0,\r\n dilatedTime: new Decimal(0),\r\n bestLevel: 0,\r\n pelleAM: new Decimal(0),\r\n remnants: 0,\r\n realityShards: new Decimal(0),\r\n // This is a slight workaround to hide DT/level once Doomed\r\n pelleLore: 0,\r\n saveName: \"\",\r\n compositeProgress: 0,\r\n };\r\n // This code ends up getting run on raw save data before any migrations are applied, so we need to default to props\r\n // which only exist on the pre-reality version when applicable. Note that new Decimal(undefined) gives zero.\r\n resources.realTimePlayed = save.records?.realTimePlayed ?? 100 * save.totalTimePlayed;\r\n resources.totalAntimatter.copyFrom(new Decimal(save.records?.totalAntimatter));\r\n resources.infinities.copyFrom(new Decimal(save.infinities));\r\n resources.eternities.copyFrom(new Decimal(save.eternities));\r\n resources.realities = save.realities ?? 0;\r\n resources.infinityPoints.copyFrom(new Decimal(save.infinityPoints));\r\n resources.eternityPoints.copyFrom(new Decimal(save.eternityPoints));\r\n resources.realityMachines.copyFrom(new Decimal(save.reality?.realityMachines));\r\n resources.imaginaryMachines = save.reality?.iMCap ?? 0;\r\n // Use max DT instead of current DT because spending it can cause it to drop and trigger the conflict modal\r\n // unnecessarily. We only use current DT as a fallback (eg. loading a save from pre-reality versions)\r\n resources.dilatedTime.copyFrom(new Decimal(save.records?.thisReality.maxDT ?? (save.dilation?.dilatedTime ?? 0)));\r\n resources.bestLevel = save.records?.bestReality.glyphLevel ?? 0;\r\n resources.pelleAM.copyFrom(new Decimal(save.celestials?.pelle.records.totalAntimatter));\r\n resources.remnants = save.celestials?.pelle.remnants ?? 0;\r\n resources.realityShards.copyFrom(new Decimal(save.celestials?.pelle.realityShards));\r\n resources.pelleLore = save.celestials?.pelle.quoteBits ?? 0;\r\n resources.saveName = save.options?.saveFileName ?? \"\";\r\n resources.compositeProgress = ProgressChecker.getCompositeProgress(save);\r\n\r\n return resources;\r\n}\r\n\r\nModal.cloudSaveConflict = new Modal(CloudSaveConflictModal);\r\nModal.cloudLoadConflict = new Modal(CloudLoadConflictModal);\r\nModal.cloudInvalidData = new Modal(CloudInvalidDataModal);\r\n// eslint-disable-next-line max-params\r\nModal.addCloudConflict = function(saveId, saveComparison, cloudSave, localSave, onAccept) {\r\n Modal.hide();\r\n ui.view.modal.cloudConflict = {\r\n saveId,\r\n saveComparison,\r\n cloud: getSaveInfo(cloudSave),\r\n local: getSaveInfo(localSave),\r\n onAccept\r\n };\r\n};\r\n\r\nModal.addImportConflict = function(importingSave, currentSave) {\r\n Modal.hide();\r\n ui.view.modal.cloudConflict = {\r\n importingSave: getSaveInfo(importingSave),\r\n currentSave: getSaveInfo(currentSave)\r\n };\r\n};\r\n\r\nModal.message = new class extends Modal {\r\n show(text, props = {}, messagePriority = 0) {\r\n if (!GameUI.initialized) return;\r\n // It might be zero, so explicitly check for undefined\r\n if (this.currPriority === undefined) this.currPriority = messagePriority;\r\n else if (messagePriority < this.currPriority) return;\r\n\r\n super.show();\r\n this.message = text;\r\n this.callback = props.callback;\r\n this.closeButton = props.closeButton ?? false;\r\n EventHub.ui.offAll(this._component);\r\n if (props.closeEvent) this.applyCloseListeners(props.closeEvent);\r\n }\r\n\r\n hide() {\r\n EventHub.ui.offAll(this._component);\r\n this.currPriority = undefined;\r\n Modal.hide();\r\n }\r\n}(MessageModal, 2);\r\n","import { sha512_256 } from \"js-sha512\";\r\n\r\nexport const Theme = function Theme(name, config) {\r\n this.name = name;\r\n\r\n this.isDark = function() {\r\n return (this.isDefault() || name === \"S12\")\r\n ? player.options.UIType == 'Modern'\r\n : config.isDark;\r\n };\r\n\r\n this.isMetro = config.isMetro;\r\n\r\n this.isAnimated = config.isAnimated;\r\n\r\n this.isSecret = config.isSecret;\r\n\r\n this.isDefault = function() {\r\n return name === \"Normal\";\r\n };\r\n\r\n this.isAvailable = function() {\r\n if (!this.isSecret) return true;\r\n // Note: match[0] gets the full string of a match, here the initial S and number in a theme name.\r\n return player.secretUnlocks.themes.some(theme => theme.match(/^S[0-9]*/u)[0] === name);\r\n };\r\n\r\n this.displayName = function() {\r\n if (!this.isSecret || !this.isAvailable()) return name;\r\n // Secret themes are stored as \"S9Whatever\", so we need to strip the SN part\r\n return player.secretUnlocks.themes.find(theme => theme.match(/^S[0-9]*/u)[0] === name).replace(/^S[0-9]*/u, \"\");\r\n };\r\n\r\n this.set = function() {\r\n // Remove all entries in the class list from the class list\r\n document.body.classList.remove(...document.body.classList);\r\n\r\n document.body.classList.add(this.cssClass());\r\n if (this.isMetro) document.body.classList.add(\"s-base--metro\");\r\n if (this.isDark()) document.body.classList.add(\"s-base--dark\");\r\n\r\n if (this.isAnimated && player.options.animations.background) {\r\n document.getElementById(\"background-animations\").style.display = \"block\";\r\n } else {\r\n document.getElementById(\"background-animations\").style.display = \"none\";\r\n }\r\n if (player.options.UIType == 'Modern') {\r\n player.options.themeModern = name;\r\n } else {\r\n player.options.themeClassic = name;\r\n }\r\n ui.view.theme = name;\r\n window.getSelection().removeAllRanges();\r\n PerkNetwork.forceNetworkRemake();\r\n };\r\n\r\n this.cssClass = function() {\r\n return `t-${this.name.replace(/\\s+/gu, \"-\").toLowerCase()}`;\r\n };\r\n};\r\n\r\nTheme.currentName = function() {\r\n return player.options.UIType == 'Modern'\r\n ? player.options.themeModern\r\n : player.options.themeClassic;\r\n};\r\n\r\nTheme.current = function() {\r\n return Themes.find(Theme.currentName());\r\n};\r\n\r\nTheme.set = function(name) {\r\n const theme = Themes.find(name);\r\n theme.set();\r\n return theme;\r\n};\r\n\r\nTheme.secretThemeIndex = function(name) {\r\n const secretThemes = [\r\n \"ef853879b60fa6755d9599fd756c94d112f987c0cd596abf48b08f33af5ff537\",\r\n \"078570d37e6ffbf06e079e07c3c7987814e03436d00a17230ef5f24b1cb93290\",\r\n \"a3d64c3d1e1749b60b2b3dba10ed5ae9425300e9600ca05bcbafe4df6c69941f\",\r\n \"530fac71cc0b151b24d966493a6f4a0817921b37e4d3e593439e624c214ab2b2\",\r\n \"cb72e4a679254df5f99110dc7a93924628b916d2e069e3ad206db92068cb0883\",\r\n \"c8fac64da08d674123c32c936b14115ab384fe556fd24e431eb184a8dde21137\",\r\n \"da3b3c152083f0c70245f104f06331497b97b52ac80edec05e26a33ee704cae7\",\r\n \"1bbc0800145e72dfea5bfb218eba824c52510488b3a05ee88feaaa6683322d19\",\r\n \"dba8336cd3224649d07952b00045a6ec3c8df277aa8a0a0e3e7c2aaa77f1fbb9\",\r\n \"73de8a7f9efa1cbffc80a8effc9891a799127cd204b3a8b023bea8f513ed4753\",\r\n \"f3a71114261b4af6517a53f89bf0c6b56bb81b6f0e931d0e0d71249eb196628c\",\r\n \"1248689171faaa0abb68279199a8d2eb232dba10d2dacb79a705f680b6862c0e\",\r\n ];\r\n const sha = sha512_256(name.toUpperCase());\r\n return secretThemes.indexOf(sha);\r\n};\r\n\r\nTheme.isSecretTheme = function(name) {\r\n return Theme.secretThemeIndex(name) !== -1;\r\n};\r\n\r\nTheme.animatedThemeUnlocked = function() {\r\n return Themes.all.some(theme => theme.isAvailable && theme.isAnimated);\r\n};\r\n\r\nTheme.tryUnlock = function(name) {\r\n const index = Theme.secretThemeIndex(name);\r\n if (index === -1) {\r\n return false;\r\n }\r\n const prefix = `S${index + 1}`;\r\n const fullName = prefix + name.capitalize();\r\n const isAlreadyUnlocked = player.secretUnlocks.themes.has(fullName);\r\n player.secretUnlocks.themes.add(fullName);\r\n Theme.set(prefix);\r\n SecretAchievement(25).unlock();\r\n if (!isAlreadyUnlocked) {\r\n GameUI.notify.success(`You have unlocked the ${name.capitalize()} theme!`, 5000);\r\n if (Theme.current().isAnimated) {\r\n setTimeout(Modal.message.show(`This secret theme has animations. If they are giving you performance issues,\r\n you can turn them off in the Options/Visual tab to reduce lag.`), 100);\r\n }\r\n }\r\n return true;\r\n};\r\n\r\nTheme.create = function(name, settings) {\r\n const config = {\r\n isDark: false || settings.dark,\r\n isMetro: false || settings.metro,\r\n isAnimated: false || settings.animated,\r\n isSecret: false || settings.secret,\r\n };\r\n return new Theme(name, config);\r\n};\r\n\r\nexport const Themes = {\r\n all: [\r\n /* eslint-disable no-multi-spaces */\r\n // Note that \"Normal\" is a special case where dark is overridden elsewhere with whether or not the UI is Modern\r\n Theme.create(\"Normal\", { }),\r\n Theme.create(\"Metro\", { metro: true, }),\r\n Theme.create(\"Dark\", { dark: true, }),\r\n Theme.create(\"Dark Metro\", { dark: true, metro: true, }),\r\n Theme.create(\"Inverted\", { }),\r\n Theme.create(\"Inverted Metro\", { metro: true, }),\r\n Theme.create(\"AMOLED\", { dark: true, }),\r\n Theme.create(\"AMOLED Metro\", { dark: true, metro: true, }),\r\n Theme.create(\"S1\", { animated: true, secret: true, }),\r\n Theme.create(\"S2\", { secret: true, }),\r\n Theme.create(\"S3\", { secret: true, }),\r\n Theme.create(\"S4\", { secret: true, }),\r\n Theme.create(\"S5\", { secret: true, }),\r\n Theme.create(\"S6\", { dark: true, animated: true, secret: true, }),\r\n Theme.create(\"S7\", { metro: true, secret: true, }),\r\n Theme.create(\"S8\", { metro: true, secret: true, }),\r\n Theme.create(\"S9\", { secret: true, }),\r\n Theme.create(\"S10\", { dark: true, metro: true, animated: true, secret: true, }),\r\n Theme.create(\"S11\", { dark: true, animated: true, secret: true, }),\r\n Theme.create(\"S12\", { secret: true, }),\r\n /* eslint-enable no-multi-spaces */\r\n ],\r\n\r\n available() {\r\n return Themes.all\r\n .filter(theme => theme.isAvailable());\r\n },\r\n\r\n find(name) {\r\n return Themes.all\r\n .find(theme => theme.name === name);\r\n }\r\n};\r\n","import { sha512_256 } from \"js-sha512\";\r\n\r\nimport { ElectronRuntime } from \"@/steam\";\r\n\r\nimport { DEV } from \"@/env\";\r\n\r\nimport FullScreenAnimationHandler from \"./full-screen-animation-handler\";\r\n\r\nexport class GameOptions {\r\n\r\n static toggleNews() {\r\n player.options.news.enabled = !player.options.news.enabled;\r\n ui.view.news = player.options.news.enabled;\r\n GameStorage.save();\r\n }\r\n\r\n static toggleUI() {\r\n // player.options.UIType == \"Modern\" ? player.options.UIType = \"Classic\" : player.options.UIType = \"Classic\" ? player.options.UIType = \"Synergism\" : player.options.UIType = \"Modern\"\r\n // ui.view.UIType == \"Modern\" ? ui.view.UIType = \"Classic\" : ui.view.UIType == \"Classic\" ? ui.view.UIType = \"Synergism\" : ui.view.UIType = \"Modern\"\r\n player.options.UIType == \"Modern\" ? player.options.UIType = \"Classic\" : player.options.UIType = \"Modern\"\r\n ui.view.UIType == \"Modern\" ? ui.view.UIType = \"Classic\" : ui.view.UIType = \"Modern\"\r\n // This is needed because .s-base--dark is on UIType == 'Modern'/normal but not on oldUI/normal\r\n // So the classes on body need to be updated\r\n Themes.find(Theme.currentName()).set();\r\n ElectronRuntime.updateZoom();\r\n GameStorage.save();\r\n }\r\n\r\n static cloudSave() {\r\n Cloud.saveCheck(true);\r\n }\r\n\r\n static cloudLoad() {\r\n Cloud.loadCheck();\r\n }\r\n\r\n static login() {\r\n Cloud.login();\r\n }\r\n\r\n static logout() {\r\n Cloud.logout();\r\n }\r\n\r\n static refreshUpdateRate() {\r\n if (player.options.updateRate === 200) {\r\n SecretAchievement(31).unlock();\r\n }\r\n GameIntervals.gameLoop.restart();\r\n }\r\n\r\n static refreshAutosaveInterval() {\r\n GameIntervals.save.restart();\r\n }\r\n}\r\n\r\nconst secretImports = [\r\n \"80b7fdc794f5dfc944da6a445a3f21a2d0f7c974d044f2ea25713037e96af9e3\",\r\n \"857876556a230da15fe1bb6f410ca8dbc9274de47c1a847c2281a7103dd2c274\",\r\n \"be88e62eb68758cd7381104977c0d3d5d81e19c72a848f0d79d1963c1e39221f\",\r\n \"c784c9c0a82b5f3c13884842fa6e6a8f5aed994ef401e6476c30b1adfe439b22\",\r\n];\r\n\r\nfunction secretImportIndex(data) {\r\n const sha = sha512_256(data.replace(/\\s/gu, \"\").toUpperCase());\r\n return secretImports.indexOf(sha);\r\n}\r\n\r\nexport function isSecretImport(data) {\r\n return secretImportIndex(data) !== -1;\r\n}\r\n\r\nexport function tryImportSecret(data) {\r\n const index = secretImportIndex(data);\r\n\r\n switch (index) {\r\n case 0:\r\n FullScreenAnimationHandler.display(\"a-barrel-roll\", 5);\r\n SecretAchievement(15).unlock();\r\n return true;\r\n case 1:\r\n SecretAchievement(14).unlock();\r\n return true;\r\n case 2:\r\n SecretAchievement(37).unlock();\r\n return true;\r\n case 3:\r\n if (player.records.fullGameCompletions > 0 || DEV) Speedrun.unlock();\r\n else GameUI.notify.error(\"Complete the game at least once first!\", 15000);\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n","import { GameMechanicState } from \"../game-mechanics\";\r\n\r\nimport { SteamRuntime } from \"@/steam\";\r\n\r\nclass AchievementState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this._row = Math.floor(this.id / 10);\r\n this._column = this.id % 10;\r\n this._bitmask = 1 << (this.column - 1);\r\n this._inverseBitmask = ~this._bitmask;\r\n this.registerEvents(config.checkEvent, args => this.tryUnlock(args));\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get row() {\r\n return this._row;\r\n }\r\n\r\n get column() {\r\n return this._column;\r\n }\r\n\r\n get isPreReality() {\r\n return this.row < 14;\r\n }\r\n\r\n get isPrePelle() {\r\n return this.row < 18;\r\n }\r\n\r\n get isPreMend() {\r\n return this.row < 19;\r\n }\r\n\r\n get isUnlocked() {\r\n return (player.achievementBits[this.row - 1] & this._bitmask) !== 0;\r\n }\r\n\r\n get isDisabled() {\r\n return Pelle.isDisabled(\"achievements\") && Pelle.disabledAchievements.includes(this.id);\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isUnlocked && !this.isDisabled;\r\n }\r\n\r\n tryUnlock(args) {\r\n if (this.isUnlocked) return;\r\n if (!this.config.checkRequirement(args)) return;\r\n this.unlock();\r\n }\r\n\r\n lock() {\r\n player.achievementBits[this.row - 1] &= this._inverseBitmask;\r\n }\r\n\r\n unlock(auto) {\r\n if (this.isUnlocked) return;\r\n player.achievementBits[this.row - 1] |= this._bitmask;\r\n if (this.id === 85 || this.id === 93) {\r\n Autobuyer.bigCrunch.bumpAmount(4);\r\n }\r\n if (this.id === 55 && !PlayerProgress.realityUnlocked()) {\r\n Modal.message.show(`Since you performed an Infinity in under a minute, the UI changed on the screen.\r\n Instead of the Dimensions disappearing, they stay and the Big Crunch button appears on top of them.\r\n This is purely visual, and is there to prevent flickering.`, {}, 3);\r\n }\r\n if (this.id === 148 || this.id === 166) {\r\n GameCache.staticGlyphWeights.invalidate();\r\n }\r\n if (auto) {\r\n GameUI.notify.reality(`Automatically unlocked: ${this.name}`);\r\n } else {\r\n GameUI.notify.success(`Achievement: ${this.name}`);\r\n SteamRuntime.activateAchievement(this.id);\r\n }\r\n if (player.speedrun.isActive && !player.speedrun.achievementTimes[this.id]) {\r\n // This stores a lot of data in the savefile and seems particularly suceptible to floating-point rounding issues\r\n // for some reason, so we floor to get rid of fractions of milliseconds and reduce what filesize impact we can\r\n player.speedrun.achievementTimes[this.id] = Math.floor(player.records.realTimePlayed);\r\n }\r\n Achievements._power.invalidate();\r\n EventHub.dispatch(GAME_EVENT.ACHIEVEMENT_UNLOCKED);\r\n }\r\n\r\n // Additional Code Starts Here\r\n\r\n get isPreMend(){\r\n return this.row < 19;\r\n }\r\n}\r\n\r\n/**\r\n * @param {number} id\r\n * @returns {AchievementState}\r\n */\r\nexport const Achievement = AchievementState.createAccessor(GameDatabase.achievements.normal);\r\n\r\nexport const Achievements = {\r\n /**\r\n * @type {AchievementState[]}\r\n */\r\n all: Achievement.index.compact(),\r\n\r\n /**\r\n * @type {AchievementState[]}\r\n */\r\n get preReality() {\r\n return Achievements.all.filter(ach => ach.isPreReality);\r\n },\r\n\r\n /**\r\n * @type {AchievementState[]}\r\n */\r\n get prePelle() {\r\n return Achievements.all.filter(ach => ach.isPrePelle);\r\n },\r\n\r\n get preMend() {\r\n return Achievements.all.filter(ach => ach.isPreMend);\r\n },\r\n\r\n get allRows() {\r\n const count = Achievements.all.map(a => a.row).max();\r\n return Achievements.rows(1, count);\r\n },\r\n\r\n get preRealityRows() {\r\n const count = Achievements.preReality.map(a => a.row).max();\r\n return Achievements.rows(1, count);\r\n },\r\n\r\n get prePelleRows() {\r\n const count = Achievements.prePelle.map(a => a.row).max();\r\n return Achievements.rows(1, count);\r\n },\r\n\r\n get preMendRows() {\r\n const count = Achievements.preMend.map(a => a.row).max();\r\n return Achievements.rows(1, count);\r\n },\r\n\r\n rows: (start, count) => Array.range(start, count).map(Achievements.row),\r\n\r\n row: row => Array.range(row * 10 + 1, 8).map(Achievement),\r\n\r\n get effectiveCount() {\r\n const unlockedAchievements = Achievements.all.countWhere(a => a.isUnlocked);\r\n return unlockedAchievements;\r\n },\r\n\r\n get period() {\r\n return GameCache.achievementPeriod.value;\r\n },\r\n\r\n autoAchieveUpdate(diff) {\r\n if (!PlayerProgress.realityUnlocked()) return;\r\n if (!player.reality.autoAchieve || RealityUpgrade(8).isLockingMechanics) {\r\n player.reality.achTimer = Decimal.clampMax(player.reality.achTimer.add(diff), this.period);\r\n return;\r\n }\r\n if (Achievements.preReality.every(a => a.isUnlocked)) return;\r\n\r\n player.reality.achTimer = player.reality.achTimer.add(diff);\r\n if (player.reality.achTimer.lt(this.period)) return;\r\n for (const achievement of Achievements.preReality.filter(a => !a.isUnlocked)) {\r\n achievement.unlock(true);\r\n player.reality.achTimer = player.reality.achTimer.sub(this.period);\r\n if (player.reality.achTimer.lt(this.period)) break;\r\n }\r\n player.reality.gainedAutoAchievements = true;\r\n },\r\n\r\n get timeToNextAutoAchieve() {\r\n if (!PlayerProgress.realityUnlocked()) return new Decimal(0);\r\n if (GameCache.achievementPeriod.value === new Decimal(0)) return new Decimal(0);\r\n if (Achievements.preReality.countWhere(a => !a.isUnlocked) === 0) return new Decimal(0);\r\n return this.period.sub(player.reality.achTimer);\r\n },\r\n\r\n _power: new Lazy(() => {\r\n let vFixMult = VUnlocks.vAchMulti.effectOrDefault(1);\r\n let vRaUpg = player.celestials.ra.upgrades.has('vUpgrade') ? WarpUpgrade(2).effectOrDefault(1) : 1;\r\n const unlockedRows = Achievements.allRows\r\n .countWhere(row => row.every(ach => ach.isUnlocked));\r\n const basePower = (Math.pow(1.25, unlockedRows) * Math.pow(1.03, Achievements.effectiveCount) * vFixMult * vRaUpg) ** (Ra.unlocks.achMultBaseImprovementV.isUnlocked ? 2 : 1);\r\n let x = BreakInfinityUpgrade.achievementMult.chargedEffect.isEffectActive ? BreakInfinityUpgrade.achievementMult.chargedEffect.effectValue : 1;\r\n let y = Ra.unlocks.repIncreasesAchMult.isUnlocked ? Math.max(1, ((1 + Math.log10(Decimal.log10(Currency.replicanti.value))) / 25)) : 1;\r\n let z = CorruptionUpgrade(3).isUnlocked ? Math.max(1, CorruptionUpgrade(3).effectValue) : 1;\r\n let exponent = (getAdjustedGlyphEffect(\"effarigachievement\").toDecimal()).times(Ra.unlocks.achievementPower.effectOrDefault(1)).times(x).times(Math.max(y, 1)).times(z);\r\n let primeAnswer = Decimal.pow(basePower, exponent);\r\n \r\n return primeAnswer;\r\n }),\r\n\r\n get power() {\r\n if (Pelle.isDisabled(\"achievementMult\")) return new Decimal(1);\r\n return Achievements._power.value;\r\n },\r\n\r\n updateSteamStatus() {\r\n for (const achievement of Achievements.all.filter(x => x.isUnlocked)) {\r\n SteamRuntime.activateAchievement(achievement.id);\r\n }\r\n }\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.PERK_BOUGHT, () => {\r\n player.reality.achTimer = Decimal.clampMax(player.reality.achTimer, Achievements.period);\r\n});\r\n","import { GameMechanicState } from \"../game-mechanics\";\r\n\r\nclass SecretAchievementState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this._row = Math.floor(this.id / 10);\r\n this._column = this.id % 10;\r\n this._bitmask = 1 << (this.column - 1);\r\n this._inverseBitmask = ~this._bitmask;\r\n this.registerEvents(config.checkEvent, args => this.tryUnlock(args));\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get row() {\r\n return this._row;\r\n }\r\n\r\n get column() {\r\n return this._column;\r\n }\r\n\r\n get isUnlocked() {\r\n return (player.secretAchievementBits[this.row - 1] & this._bitmask) !== 0;\r\n }\r\n\r\n tryUnlock(args) {\r\n if (this.isUnlocked) return;\r\n if (!this.config.checkRequirement(args)) return;\r\n this.unlock();\r\n }\r\n\r\n unlock() {\r\n if (this.isUnlocked) return;\r\n player.secretAchievementBits[this.row - 1] |= this._bitmask;\r\n GameUI.notify.success(`Secret Achievement: ${this.name}`);\r\n EventHub.dispatch(GAME_EVENT.ACHIEVEMENT_UNLOCKED);\r\n }\r\n\r\n lock() {\r\n player.secretAchievementBits[this.row - 1] &= this._inverseBitmask;\r\n }\r\n}\r\n\r\n/**\r\n * @param {number} id\r\n * @returns {SecretAchievementState}\r\n */\r\nexport const SecretAchievement = SecretAchievementState.createAccessor(GameDatabase.achievements.secret);\r\n\r\nexport const SecretAchievements = {\r\n /**\r\n * @type {SecretAchievementState[]}\r\n */\r\n all: SecretAchievement.index.compact(),\r\n\r\n get allRows() {\r\n const count = SecretAchievements.all.map(a => a.row).max();\r\n return SecretAchievements.rows(1, count);\r\n },\r\n\r\n rows: (start, count) => Array.range(start, count).map(SecretAchievements.row),\r\n\r\n row: row => Array.range(row * 10 + 1, 8).map(SecretAchievement),\r\n};\r\n","class AchievementTimer {\r\n constructor(isRealTime) {\r\n this.time = 0;\r\n this.realTime = isRealTime;\r\n }\r\n\r\n reset() {\r\n this.time = 0;\r\n }\r\n\r\n advance() {\r\n this.realTime\r\n ? this.time += Time.unscaledDeltaTime.totalSeconds.toNumber()\r\n : new Decimal(this.time).add(Time.deltaTime)\r\n }\r\n\r\n check(condition, duration) {\r\n if (!condition) {\r\n this.reset();\r\n return false;\r\n }\r\n this.advance();\r\n return this.time >= duration;\r\n }\r\n}\r\n\r\nexport const AchievementTimers = {\r\n marathon1: new AchievementTimer(false),\r\n marathon2: new AchievementTimer(false),\r\n pain: new AchievementTimer(true),\r\n stats: new AchievementTimer(true)\r\n};\r\n","import { BitPurchasableMechanicState, RebuyableMechanicState } from \"./game-mechanics\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nclass RealityUpgradeState extends BitPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.registerEvents(config.checkEvent, () => this.tryUnlock());\r\n }\r\n get isBought() {\r\n return (this.bits & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set isBought(value) {\r\n if (value) {\r\n this.bits |= (1 << this.bitIndex);\r\n } else {\r\n this.bits &= ~(1 << this.bitIndex);\r\n }\r\n }\r\n get automatorPoints() {\r\n return this.config.automatorPoints ? this.config.automatorPoints : 0;\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get shortDescription() {\r\n return this.config.shortDescription ? this.config.shortDescription() : \"\";\r\n }\r\n\r\n get requirement() {\r\n return typeof this.config.requirement === \"function\" ? this.config.requirement() : this.config.requirement;\r\n }\r\n\r\n get lockEvent() {\r\n return typeof this.config.lockEvent === \"function\" ? this.config.lockEvent() : this.config.lockEvent;\r\n }\r\n\r\n get currency() {\r\n return Currency.realityMachines;\r\n }\r\n\r\n get bitIndex() {\r\n return this.id;\r\n }\r\n\r\n get bits() {\r\n return player.reality.upgradeBits;\r\n }\r\n\r\n set bits(value) {\r\n player.reality.upgradeBits = value;\r\n }\r\n\r\n get hasPlayerLock() {\r\n return (player.reality.reqLock.reality & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set hasPlayerLock(value) {\r\n if (value) player.reality.reqLock.reality |= 1 << this.bitIndex;\r\n else player.reality.reqLock.reality &= ~(1 << this.bitIndex);\r\n }\r\n\r\n get isLockingMechanics() {\r\n const shouldBypass = this.config.bypassLock?.() ?? false;\r\n return this.hasPlayerLock && this.isPossible && !shouldBypass && !this.isAvailableForPurchase;\r\n }\r\n\r\n // Required to be changed this way to avoid direct prop mutation in Vue components\r\n setMechanicLock(value) {\r\n this.hasPlayerLock = value;\r\n }\r\n\r\n toggleMechanicLock() {\r\n this.hasPlayerLock = !this.hasPlayerLock;\r\n }\r\n\r\n // Note we don't actually show the modal if we already failed or unlocked it\r\n tryShowWarningModal(specialLockText) {\r\n if (this.isPossible && !this.isAvailableForPurchase) {\r\n Modal.upgradeLock.show({ upgrade: this, isImaginary: false, specialLockText });\r\n }\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n if (MendingMilestone.four.isReached){\r\n return true;\r\n }\r\n return (player.reality.upgReqs & (1 << this.id)) !== 0;\r\n }\r\n\r\n get isPossible() {\r\n if(MendingMilestone.four.isReached){\r\n return true;\r\n }\r\n return this.config.hasFailed ? !this.config.hasFailed() : true;\r\n }\r\n\r\n tryUnlock() {\r\n const realityReached = PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought;\r\n if (!realityReached || this.isAvailableForPurchase || !this.config.checkRequirement()) return;\r\n player.reality.upgReqs |= (1 << this.id);\r\n GameUI.notify.reality(`You've unlocked a Reality Upgrade: ${this.config.name}`);\r\n this.hasPlayerLock = false;\r\n }\r\n\r\n onPurchased() {\r\n EventHub.dispatch(GAME_EVENT.REALITY_UPGRADE_BOUGHT);\r\n const id = this.id;\r\n if (id === 9 || id === 24) {\r\n Glyphs.refreshActive();\r\n }\r\n if (id === 10) {\r\n applyRUPG10();\r\n playerInfinityUpgradesOnReset();\r\n EventHub.dispatch(GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT);\r\n }\r\n if (id === 20 && player.blackHole[0].unlocked) {\r\n player.blackHole[1].unlocked = true;\r\n }\r\n GameCache.staticGlyphWeights.invalidate();\r\n }\r\n}\r\n\r\nclass RebuyableRealityUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.realityMachines;\r\n }\r\n\r\n get boughtAmount() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return 0;\r\n return player.reality.rebuyables[this.id];\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return false;\r\n return true;\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.reality.rebuyables[this.id] = value;\r\n }\r\n}\r\n\r\nRealityUpgradeState.index = mapGameData(\r\n GameDatabase.reality.upgrades,\r\n config => (config.id < 6\r\n ? new RebuyableRealityUpgradeState(config)\r\n : new RealityUpgradeState(config))\r\n);\r\n\r\n/**\r\n * @param {number} id\r\n * @return {RealityUpgradeState|RebuyableRealityUpgradeState}\r\n */\r\nexport const RealityUpgrade = id => RealityUpgradeState.index[id];\r\n\r\nexport const RealityUpgrades = {\r\n /**\r\n * @type {(RealityUpgradeState|RebuyableRealityUpgradeState)[]}\r\n */\r\n all: RealityUpgradeState.index.compact(),\r\n get allBought() {\r\n return (player.reality.upgradeBits >> 6) + 1 === 1 << (GameDatabase.reality.upgrades.length - 5);\r\n }\r\n};\r\n","import { GameMechanicState } from \"../game-mechanics\";\r\nimport { CorruptionUpgrade, MendingUpgrade, V } from \"../globals\";\r\nimport { RealityUpgrade } from \"../reality-upgrades\";\r\nimport { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\n\r\nexport const orderedEffectList = [\"powerpow\", \"infinitypow\", \"replicationpow\", \"timepow\",\r\n \"dilationpow\", \"timeshardpow\", \"powermult\", \"powerdimboost\", \"powerbuy10\",\r\n \"dilationTTgen\", \"infinityinfmult\", \"infinityIP\", \"timeEP\",\r\n \"dilationDT\", \"replicationdtgain\", \"replicationspeed\",\r\n \"timeetermult\", \"dilationgalaxyThreshold\", \"infinityrate\", \"replicationglyphlevel\",\r\n \"timespeed\",\r\n \"effarigrm\", \"effarigglyph\", \"effarigblackhole\", \"effarigachievement\",\r\n \"effarigforgotten\", \"effarigdimensions\", \"effarigantimatter\",\r\n \"cursedgalaxies\", \"cursedtickspeed\", \"curseddimensions\", \"cursedEP\",\r\n \"realityglyphlevel\", \"realitygalaxies\", \"realityrow1pow\", \"realityDTglyph\",\r\n \"companiondescription\", \"companionEP\"];\r\n\r\nexport const generatedTypes = [\"power\", \"infinity\", \"replication\", \"time\", \"dilation\", \"effarig\"];\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nexport const GlyphEffectOrder = orderedEffectList.mapToObject(e => e, (e, idx) => idx);\r\n\r\nexport function rarityToStrength(x) {\r\n return x * 2.5 / 100 + 1;\r\n}\r\n\r\nexport function strengthToRarity(x) {\r\n return (x - 1) * 100 / 2.5;\r\n}\r\n\r\n//Separated the compare functions from sorting to reuse them in autoEquipBetterGlyphs\r\n//It's probably very unnecessary since by the time you unlock it probably only level will matter anyway but hey, someone might want it\r\nconst compare = {\r\n level: (a, b) => b.level - a.level,\r\n power: (a, b) => b.level * b.strength - a.level * a.strength,\r\n score: (a, b) => AutoGlyphProcessor.filterValue(b) - AutoGlyphProcessor.filterValue(a),\r\n effect: (a, b) => {\r\n function reverseBitstring(eff) {\r\n return parseInt(((1 << 30) + (eff >>> 0)).toString(2).split(\"\").reverse().join(\"\"), 2);\r\n }\r\n // The bitwise reversal is so that the effects with the LOWER id are valued higher in the sorting.\r\n // This primarily meant for effarig glyph effect sorting, which makes it prioritize timespeed pow highest.\r\n return reverseBitstring(b.effects) - reverseBitstring(a.effects);\r\n },\r\n}\r\n\r\nexport const Glyphs = {\r\n inventory: [],\r\n active: [],\r\n unseen: [],\r\n unequipped: [],\r\n levelBoost: 0,\r\n factorsOpen: false,\r\n bestUndoGlyphCount: 0,\r\n get maxSlots() {\r\n if (Pelle.isDoomed){\r\n let p = PelleRifts.vacuum.milestones[0].canBeApplied ? 1 : 0;\r\n if(CorruptionUpgrade(6).isBought) p+=1;\r\n return p;\r\n }\r\n else{\r\n let i = 3;\r\n if (RealityUpgrade(9).isBought){\r\n i++\r\n }\r\n if (RealityUpgrade(24).isBought){\r\n i++\r\n }\r\n if (MendingMilestone.five.isReached){\r\n i += 3;\r\n }\r\n return i\r\n }\r\n //return MendingMilestone.five.isReached ? 8 : 5\r\n }, //will be a function later for further upgrades\r\n get inventoryList() {\r\n return player.reality.glyphs.inventory;\r\n },\r\n get sortedInventoryList() {\r\n return this.inventoryList.sort((a, b) => -a.level * a.strength + b.level * b.strength);\r\n },\r\n get activeList() {\r\n return player.reality.glyphs.active;\r\n },\r\n get activeWithoutCompanion() {\r\n return this.activeList.filter(g => g.type !== \"companion\");\r\n },\r\n get allGlyphs() {\r\n return this.inventoryList.concat(this.activeList);\r\n },\r\n // Returns an array of inventory indices of all glyphs, with all null entries filtered out\r\n get glyphIndexArray() {\r\n return this.inventory.filter(g => g).map(g => g.idx);\r\n },\r\n findFreeIndex(useProtectedSlots) {\r\n this.validate();\r\n const isUsableIndex = index => (useProtectedSlots ? index < this.protectedSlots : index >= this.protectedSlots);\r\n return this.inventory.findIndex((slot, index) => slot === null && isUsableIndex(index));\r\n },\r\n // This is stored in GameCache and only invalidated if glyphs change; we check for free inventory space often in\r\n // lots of places and this is an expensive operation\r\n get freeInventorySpace() {\r\n this.validate();\r\n return this.inventory.filter((e, idx) => e === null && idx >= this.protectedSlots).length;\r\n },\r\n get activeSlotCount() {\r\n if (Pelle.isDoomed) {\r\n let p = PelleRifts.vacuum.milestones[0].canBeApplied ? 1 : 0;\r\n if(CorruptionUpgrade(6).isBought) p+=1;\r\n return p;\r\n }\r\n return MendingMilestone.five.isReached ? 6 + Effects.sum(RealityUpgrade(9), RealityUpgrade(24)) : 3 + Effects.sum(RealityUpgrade(9), RealityUpgrade(24))\r\n },\r\n get protectedSlots() {\r\n return 10 * player.reality.glyphs.protectedRows;\r\n },\r\n get totalSlots() {\r\n return 120;\r\n },\r\n changeProtectedRows(rowChange) {\r\n // Always ensure at least one unprotected row for new glyphs, to prevent some potentially odd-looking behavior\r\n const newRows = Math.clamp(player.reality.glyphs.protectedRows + rowChange, 0, this.totalSlots / 10 - 1);\r\n const rowsToAdd = newRows - player.reality.glyphs.protectedRows;\r\n\r\n if (rowsToAdd > 0) {\r\n // Attempt to shift unprotected glyphs downward if there are any empty unprotected rows. The time complexity on\r\n // this algorithm isn't that good, but this isn't a particularly hot path and any \"smarter\" algorithms likely\r\n // aren't worth the reduced code readability\r\n let rowsMoved = 0;\r\n while (rowsMoved < rowsToAdd) {\r\n // Try to shift down all the unprotected rows from top to bottom, repeating until either no shifting is\r\n // possible or we've freed up the row\r\n let hasMoved = false;\r\n for (let orig = this.protectedSlots / 10 + rowsMoved; !hasMoved && orig < this.totalSlots / 10; orig++) {\r\n hasMoved = hasMoved || this.moveGlyphRow(orig, orig + 1);\r\n }\r\n // No movement happened this scan; there's nothing else we can do here\r\n if (!hasMoved) break;\r\n // Check if the topmost unprotected row is free. This isn't necessarily guaranteed because it could come from\r\n // merging lower rows, which means the empty row isn't in the right spot\r\n if (!this.glyphIndexArray.some(idx => Math.floor(idx / 10) === this.protectedSlots / 10)) {\r\n rowsMoved++;\r\n }\r\n }\r\n } else {\r\n // Similar algorithm to above; we scan repeatedly over protected slots and repeatedly attempt to free up the row\r\n // that's going to switch to being unprotected\r\n let rowsMoved = 0;\r\n while (rowsMoved < -rowsToAdd) {\r\n let hasMoved = false;\r\n for (let orig = this.protectedSlots / 10 - rowsMoved - 1; !hasMoved && orig > 0; orig--) {\r\n hasMoved = hasMoved || this.moveGlyphRow(orig, orig - 1);\r\n }\r\n if (!hasMoved) break;\r\n if (!this.glyphIndexArray.some(idx => Math.floor(idx / 10) === this.protectedSlots / 10 - 1)) {\r\n rowsMoved++;\r\n // In addition to all the protected glyph movement, we also move the entire unprotected inventory up one row\r\n for (let orig = this.protectedSlots / 10 - rowsMoved; orig < this.totalSlots / 10; orig++) {\r\n this.moveGlyphRow(orig, orig - 1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n player.reality.glyphs.protectedRows = newRows;\r\n this.validate();\r\n GameCache.glyphInventorySpace.invalidate();\r\n },\r\n // Move all glyphs from the origin row to the destination row, does nothing if a column-preserving move operation\r\n // isn't possible. Returns a boolean indicating success/failure on glyph moving. Row is 0-indexed\r\n moveGlyphRow(orig, dest) {\r\n if (!player.reality.moveGlyphsOnProtection) return false;\r\n if (orig >= this.totalSlots / 10 || dest >= this.totalSlots / 10) return false;\r\n if (this.glyphIndexArray.some(idx => Math.floor(idx / 10) === dest)) {\r\n // Destination row has some glyphs, attempt to merge the rows\r\n const hasOverlap = [...Array(10).keys()]\r\n .some(col => this.inventory[10 * orig + col] !== null && this.inventory[10 * dest + col] !== null);\r\n if (hasOverlap) return false;\r\n for (let col = 0; col < 10; col++) {\r\n const glyph = this.inventory[10 * orig + col];\r\n if (glyph !== null) {\r\n this.moveToSlot(glyph, 10 * dest + col);\r\n }\r\n }\r\n this.validate();\r\n return true;\r\n }\r\n // Destination row is empty, just move the glyphs\r\n for (let col = 0; col < 10; col++) {\r\n const glyph = this.inventory[10 * orig + col];\r\n if (glyph !== null) {\r\n this.moveToSlot(glyph, 10 * dest + col);\r\n }\r\n }\r\n this.validate();\r\n return true;\r\n },\r\n refreshActive() {\r\n this.active = new Array(this.activeSlotCount).fill(null);\r\n for (const g of player.reality.glyphs.active) {\r\n if (this.active[g.idx]) {\r\n throw new Error(\"Stacked active glyphs?\");\r\n }\r\n this.active[g.idx] = g;\r\n }\r\n },\r\n refresh() {\r\n this.refreshActive();\r\n this.inventory = new Array(this.totalSlots).fill(null);\r\n // Glyphs could previously end up occupying the same inventory slot (Stacking)\r\n const stacked = [];\r\n for (const g of player.reality.glyphs.inventory) {\r\n if (this.inventory[g.idx]) {\r\n stacked.push(g);\r\n } else {\r\n this.inventory[g.idx] = g;\r\n }\r\n }\r\n // Try to unstack glyphs:\r\n while (stacked.length) {\r\n const freeIndex = this.findFreeIndex();\r\n if (freeIndex >= 0) {\r\n const glyph = stacked.shift();\r\n this.inventory[freeIndex] = glyph;\r\n glyph.idx = freeIndex;\r\n } else {\r\n break;\r\n }\r\n }\r\n while (stacked.length) {\r\n this.removeFromInventory(stacked.pop());\r\n }\r\n this.validate();\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n },\r\n // This compares targetGlyph to all the glyphs in searchList, returning a subset of them which fulfills the comparison\r\n // direction specified by the parameters in fuzzyMatch:\r\n // -1: Will find glyphs which are equal to or worse than targetGlyph\r\n // 0: Will only return glyphs which have identical values\r\n // +1: Will find glyphs which are equal to or better than targetGlyph\r\n findByValues(targetGlyph, searchList, fuzzyMatch = { level, strength, effects }) {\r\n // We need comparison to go both ways for normal matching and subset matching for partially-equipped sets\r\n const compFn = (op, comp1, comp2) => {\r\n switch (op) {\r\n case -1:\r\n return comp2 - comp1;\r\n case 0:\r\n return comp1 === comp2 ? 0 : -1;\r\n case 1:\r\n return comp1 - comp2;\r\n }\r\n return false;\r\n };\r\n\r\n // Returns a number based on how much the small mask is found inside of the large mask. Returns a non-negative\r\n // number if small contains all of large, with a value equal to the number of extra bits. Otherwise, returns a\r\n // negative number equal to the negative of the number of bits that large has which small doesn't.\r\n const matchedEffects = (large, small) => {\r\n if ((large & small) === large) return countValuesFromBitmask(small - large);\r\n return -countValuesFromBitmask(large - (large & small));\r\n };\r\n\r\n // Make an array containing all glyphs which match the given criteria, with an additional \"quality\" prop in order\r\n // to determine roughly how good the glyph itself is relative to other matches\r\n const allMatches = [];\r\n for (const glyph of searchList) {\r\n const type = glyph.type === targetGlyph.type;\r\n let eff;\r\n switch (fuzzyMatch.effects) {\r\n case -1:\r\n eff = matchedEffects(glyph.effects, targetGlyph.effects);\r\n break;\r\n case 0:\r\n eff = glyph.effects === targetGlyph.effects ? 0 : -1;\r\n break;\r\n case 1:\r\n eff = matchedEffects(targetGlyph.effects, glyph.effects);\r\n break;\r\n }\r\n const str = compFn(fuzzyMatch.strength, glyph.strength, targetGlyph.strength) / 2.5;\r\n const lvl = compFn(fuzzyMatch.level, glyph.level, targetGlyph.level) / 5000;\r\n const sym = glyph.symbol === targetGlyph.symbol;\r\n if (type && eff >= 0 && str >= 0 && lvl >= 0 && sym) {\r\n allMatches.push({\r\n glyph,\r\n // Flatten glyph qualities, with 10% rarity, 500 levels, and an extra effect all being equal value. This\r\n // is used to sort the options by some rough measure of distance from the target glyph\r\n gap: str + lvl + eff / 10\r\n });\r\n }\r\n }\r\n\r\n // Sort by increasing gap, then discard the value as it's not directly used anywhere else\r\n allMatches.sort((a, b) => a.gap - b.gap);\r\n return allMatches.map(m => m.glyph);\r\n },\r\n findById(id) {\r\n return player.reality.glyphs.inventory.find(glyph => glyph.id === id);\r\n },\r\n findByInventoryIndex(inventoryIndex) {\r\n return this.inventory[inventoryIndex];\r\n },\r\n activeGlyph(activeIndex) {\r\n return this.active[activeIndex];\r\n },\r\n equip(glyph, targetSlot) {\r\n const forbiddenByPelle = Pelle.isDisabled(\"glyphs\") || [\"effarig\", \"reality\", \"cursed\", \"amalgam\"].includes(glyph.type);\r\n if (Pelle.isDoomed && forbiddenByPelle) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n\r\n if (glyph.type !== \"companion\") {\r\n if (RealityUpgrade(9).isLockingMechanics) {\r\n if (this.activeWithoutCompanion.length > 0) {\r\n RealityUpgrade(9).tryShowWarningModal(\"equip another non-Companion Glyph\");\r\n return;\r\n }\r\n if (glyph.level < 3) {\r\n RealityUpgrade(9).tryShowWarningModal(`equip a Glyph whose level is less than ${formatInt(3)}`);\r\n return;\r\n }\r\n }\r\n if (RealityUpgrade(24).isLockingMechanics && this.activeWithoutCompanion.length === 0) {\r\n RealityUpgrade(24).tryShowWarningModal();\r\n return;\r\n }\r\n if (ImaginaryUpgrade(25).isLockingMechanics && this.activeWithoutCompanion.length === 1) {\r\n ImaginaryUpgrade(25).tryShowWarningModal();\r\n return;\r\n }\r\n }\r\n\r\n this.validate();\r\n if (this.findByInventoryIndex(glyph.idx) !== glyph) {\r\n throw new Error(\"Inconsistent inventory indexing\");\r\n }\r\n let canEquipSpecial = false;\r\n let maxSpecial = 1;\r\n if (MendingMilestone.five.isReached){\r\n maxSpecial = 2;\r\n }\r\n if ([\"effarig\", \"reality\"].includes(glyph.type)) {\r\n canEquipSpecial = this.active.countWhere(x => x && x.type === glyph.type) < maxSpecial;\r\n }\r\n let equippedInDoom = this.active.countWhere(x => x && x.type === glyph.type) > 0;\r\n if (this.active[targetSlot] === null) { //if slot is empty\r\n if (!canEquipSpecial && [\"effarig\", \"reality\"].includes(glyph.type)) { //have we hit the max number of special glyphs?\r\n Modal.message.show(`You have the max amount of ${glyph.type.capitalize()} Glyphs equipped!`,\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n return;\r\n }\r\n //so here is equipment\r\n this.removeFromInventory(glyph);\r\n this.saveUndo(targetSlot);\r\n player.reality.glyphs.active.push(glyph);\r\n glyph.idx = targetSlot;\r\n this.active[targetSlot] = glyph;\r\n this.updateRealityGlyphEffects();\r\n this.updateMaxGlyphCount();\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n this.validate();\r\n }\r\n else {\r\n // Royal's psudocode for the Glyph drag replace starts here\r\n /* check if the Glyph we're dragging in is not an Effarig/Reality\r\n true -> allow replace\r\n false -> then check are we replacing an Effarig with an Effarig or Reality with Reality\r\n true -> allow replace\r\n false -> have we hit the max of that type?\r\n true -> deny replace\r\n false -> allow replace\r\n */\r\n //Hexa saved me from a ton of spagetti code, so thanks to him\r\n if (!Pelle.isDoomed) {\r\n if (player.mending.corruptionChallenge.corruptedMend&&[\"cursed\"].includes(this.active[targetSlot].type)&&this.active[targetSlot].id>=3&&this.active[targetSlot].id<=2+corruptionPenalties.compGlyphs.hiddenFour[player.mending.corruption[4]]) { //1.already force cursed number? 2.target is cursed? 3.the swapper is NOT cursed?\r\n Modal.message.show(`The forced Cursed Glyphs cannot be touched!`,\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n return;\r\n }//here for swap I think--sxy\r\n if (!canEquipSpecial && [\"effarig\", \"reality\"].includes(glyph.type)) { // Can we not equip a Special and is the glyph we are trying to equip a special?\r\n if (!(this.active[targetSlot].type == glyph.type)) { // Is the glyph we are trying to equip not replacing its own type?\r\n Modal.message.show(`You have the max amount of ${glyph.type.capitalize()} Glyphs equipped!`,\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n return; // If both the above conditions are true, this bit of code runs\r\n }\r\n } // However if its not true, we then run this lower code\r\n if (!player.options.confirmations.glyphReplace) {\r\n this.swapIntoActive(glyph, targetSlot); // Run this code if the player does NOT have the glyph replace confirmation enabled\r\n return;\r\n }\r\n Modal.glyphReplace.show({ targetSlot, inventoryIndex: glyph.idx });\r\n }\r\n else {\r\n //if (this.active[targetSlot].type == glyph.type) {\r\n \r\n this.swapIntoActive(glyph, targetSlot);\r\n return;\r\n //}\r\n /*else {\r\n Modal.message.show(\"You can only have one of each glyph type equipped while Doomed!\",\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED })\r\n return;\r\n }*/\r\n }\r\n }\r\n // We can only replace effarig/reality glyph\r\n/* if (sameSpecialTypeIndex >= 0 && sameSpecialTypeIndex !== targetSlot) {\r\n Modal.message.show(`You have the max amount of ${glyph.type.capitalize()} Glyphs equipped!`,\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n return;\r\n }\r\n if (!player.options.confirmations.glyphReplace) {\r\n this.swapIntoActive(glyph, targetSlot);\r\n return;\r\n }\r\n Modal.glyphReplace.show({ targetSlot, inventoryIndex: glyph.idx });\r\n }*/\r\n // Loading glyph sets might directly choose glyphs, bypassing the hover-over flag-clearing code\r\n this.removeVisualFlag(\"unseen\", glyph);\r\n this.removeVisualFlag(\"unequipped\", glyph);\r\n },\r\n // We only ever force when draining rifts causes the single slot to be lost (which will never show the modal)\r\n unequipAll(forceToUnprotected = false) {\r\n this.unequipped = [];\r\n const targetRegion = forceToUnprotected ? false : player.options.respecIntoProtected;\r\n while (player.reality.glyphs.active.length) {\r\n const freeIndex = this.findFreeIndex(targetRegion);\r\n if (freeIndex < 0) break;\r\n const glyph = player.reality.glyphs.active.pop();\r\n this.active[glyph.idx] = null;\r\n this.addToInventory(glyph, freeIndex, true);\r\n }\r\n if(player.mending.corruptionChallenge.corruptedMend&&!Pelle.isDoomed){\r\n for(let i=0;i Modal.message.show(`${quantifyInt(\"Glyph\", stillEquipped)} could not be unequipped due to lack\r\n of space. Free up some space in your ${target}${hasOther ? \" or switch where you are unequipping to\" : \"\"}\r\n in order to unequip ${stillEquipped === 1 ? \"it\" : \"them\"}.`, { closeEvent: GAME_EVENT.GLYPHS_CHANGED }),\r\n 50);\r\n }\r\n\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n return !player.reality.glyphs.active.length;\r\n },\r\n unequipNonCursed(forceToUnprotected = false) {\r\n this.active = this.active.sort(function(x,y){ return x.type == \"cursed\" ? -1 : y .type == \"cursed\" ? 1 : 0; });\r\n this.unequipped = [];\r\n const targetRegion = forceToUnprotected ? false : player.options.respecIntoProtected;\r\n let repeat = 0\r\n let total = 5\r\n if (MendingMilestone.five.isReached) total = 8\r\n while (repeat < total) {\r\n const freeIndex = this.findFreeIndex(targetRegion);\r\n if (freeIndex < 0) break;\r\n console.log(this.active)\r\n while (this.active[this.active.length - 1] == null) {\r\n this.active.pop()\r\n repeat++\r\n }\r\n console.log(this.active[this.active.length - 1].type == \"cursed\")\r\n if (this.active[this.active.length - 1].type == \"cursed\") break\r\n const glyph = this.active.pop();\r\n this.active[glyph.idx] = null;\r\n this.addToInventory(glyph, freeIndex, true);\r\n repeat++\r\n }\r\n while (this.active.length < 5){\r\n this.active.append(null)\r\n }\r\n this.updateRealityGlyphEffects();\r\n this.updateMaxGlyphCount(true);\r\n\r\n // We need to add a slight delay as a setTimeout in order to make sure that the EventHub calls following this\r\n // don't immediately close this modal after it's shown. Additionally, we want to prevent the modal from appearing\r\n // for realities shorter than a few seconds in order to stop a UI-based softlock; however at this point the time\r\n // has already been reset, so we just use the most recent real time record (this leads to some inconsistent behavior\r\n // when restarting, but that's not easily avoidable)\r\n const fastReality = new Decimal(player.records.recentRealities[0][1]).lt(3000);\r\n if (repeat < total && !fastReality) {\r\n const target = player.options.respecIntoProtected ? \"Protected slots\" : \"Main Inventory\";\r\n const hasOther = this.findFreeIndex(!player.options.respecIntoProtected) !== -1;\r\n setTimeout(() => Modal.message.show(`${quantifyInt(\"Glyph\", (total-repeat))} could not be unequipped due to lack\r\n of space. Free up some space in your ${target}${hasOther ? \" or switch where you are unequipping to\" : \"\"}\r\n in order to unequip ${repeat === total-1 ? \"it\" : \"them\"}.`, { closeEvent: GAME_EVENT.GLYPHS_CHANGED }),\r\n 50);\r\n }\r\n\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n return repeat == total;\r\n },\r\n unequip(activeIndex, requestedInventoryIndex) {\r\n if (this.active[activeIndex] === null) return;\r\n const storedIndex = player.reality.glyphs.active.findIndex(glyph => glyph.idx === activeIndex);\r\n if (storedIndex < 0) return;\r\n const glyph = player.reality.glyphs.active.splice(storedIndex, 1)[0];\r\n this.active[activeIndex] = null;\r\n this.addToInventory(glyph, requestedInventoryIndex, true);\r\n this.updateRealityGlyphEffects();\r\n this.updateMaxGlyphCount(true);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n },\r\n updateRealityGlyphEffects() {\r\n // There should only be one reality glyph; this picks one pseudo-randomly if multiple are cheated/glitched in\r\n const realityGlyph = player.reality.glyphs.active.filter(g => g.type === \"reality\")[0];\r\n if (realityGlyph === undefined) {\r\n this.levelBoost = 0;\r\n return;\r\n }\r\n // The cache at this point may not be correct yet (if we're importing a save),\r\n // so we use the uncached value.\r\n this.levelBoost = getAdjustedGlyphEffectUncached(\"realityglyphlevel\");\r\n },\r\n moveToSlot(glyph, targetSlot) {\r\n if (this.inventory[targetSlot] === null) this.moveToEmpty(glyph, targetSlot);\r\n else this.swap(glyph, this.inventory[targetSlot]);\r\n },\r\n moveToEmpty(glyph, targetSlot) {\r\n this.validate();\r\n if (this.findByInventoryIndex(glyph.idx) !== glyph) {\r\n throw new Error(\"Inconsistent inventory indexing\");\r\n }\r\n if (this.inventory[targetSlot] === null) {\r\n this.inventory[glyph.idx] = null;\r\n this.inventory[targetSlot] = glyph;\r\n glyph.idx = targetSlot;\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n } else {\r\n throw new Error(\"Attempted glyph move into non-empty slot\");\r\n }\r\n this.validate();\r\n },\r\n swap(glyphA, glyphB) {\r\n if (glyphA.idx === glyphB.idx) return;\r\n this.validate();\r\n this.inventory[glyphA.idx] = glyphB;\r\n this.inventory[glyphB.idx] = glyphA;\r\n const swapGlyph = glyphA.idx;\r\n glyphA.idx = glyphB.idx;\r\n glyphB.idx = swapGlyph;\r\n this.validate();\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n },\r\n addToInventory(glyph, requestedInventoryIndex, isExistingGlyph = false) {\r\n this.validate();\r\n if (!isExistingGlyph) glyph.id = GlyphGenerator.makeID();\r\n const isProtectedIndex = requestedInventoryIndex < this.protectedSlots;\r\n let index = this.findFreeIndex(isProtectedIndex);\r\n if (index < 0) return;\r\n if (requestedInventoryIndex !== undefined) {\r\n if (this.inventory[requestedInventoryIndex] === null) index = requestedInventoryIndex;\r\n }\r\n this.inventory[index] = glyph;\r\n glyph.idx = index;\r\n\r\n // This is done here when adding to the inventory in order to keep it out of the glyph generation hot path\r\n // It thus doesn't show up in manually choosing a glyph\r\n // This also only does anything if Ra has the appropriate unlock already.\r\n this.applyGamespeed(glyph);\r\n\r\n // This should only apply to glyphs you actually choose, so can't be done in glyph generation.\r\n // Sometimes a glyph you already have is added to the inventory (for example, unequipping),\r\n // but that's not an issue because then this line just won't do anything, which is fine.\r\n player.records.bestReality.glyphStrength = Math.clampMin(player.records.bestReality.glyphStrength, glyph.strength);\r\n\r\n player.reality.glyphs.inventory.push(glyph);\r\n if (requestedInventoryIndex === undefined && !isExistingGlyph) this.addVisualFlag(\"unseen\", glyph);\r\n if (isExistingGlyph) this.addVisualFlag(\"unequipped\", glyph);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n this.validate();\r\n },\r\n // These two visual flag functions update the corner tooltips for \"New!\" and unequipped glyphs\r\n addVisualFlag(target, glyph) {\r\n if (!this[target].includes(glyph.id)) this[target].push(glyph.id);\r\n },\r\n removeVisualFlag(target, glyph) {\r\n const index = Glyphs[target].indexOf(glyph.id);\r\n if (index > -1) Glyphs[target].splice(index, 1);\r\n },\r\n isMusicGlyph(glyph) {\r\n return glyph?.cosmetic === \"music\";\r\n },\r\n removeFromInventory(glyph) {\r\n // This can get called on a glyph not in inventory, during auto sacrifice.\r\n if (glyph.idx === null) return;\r\n this.validate();\r\n const index = player.reality.glyphs.inventory.indexOf(glyph);\r\n if (index < 0) return;\r\n this.inventory[glyph.idx] = null;\r\n player.reality.glyphs.inventory.splice(index, 1);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n this.validate();\r\n },\r\n validate() {\r\n for (const glyph of player.reality.glyphs.inventory) {\r\n if (this.inventory[glyph.idx] !== glyph) {\r\n throw new Error(\"validation error\");\r\n }\r\n }\r\n for (let i = 0; i < this.inventory.length; ++i) {\r\n if (this.inventory[i] && this.inventory[i].idx !== i) {\r\n throw new Error(\"backwards validation error\");\r\n }\r\n }\r\n },\r\n sort(sortFunction) {\r\n const glyphsToSort = player.reality.glyphs.inventory.filter(g => g.idx >= this.protectedSlots);\r\n const freeSpace = GameCache.glyphInventorySpace.value;\r\n const sortOrder = [\"power\", \"infinity\", \"replication\", \"time\", \"dilation\", \"effarig\",\r\n \"reality\", \"cursed\", \"amalgam\", \"companion\"];\r\n const byType = sortOrder.mapToObject(g => g, () => ({ glyphs: [], padding: 0 }));\r\n for (const g of glyphsToSort) byType[g.type].glyphs.push(g);\r\n let totalDesiredPadding = 0;\r\n for (const t of Object.values(byType)) {\r\n t.glyphs.sort(sortFunction);\r\n t.padding = Math.ceil(t.glyphs.length / 10) * 10 - t.glyphs.length;\r\n totalDesiredPadding += t.padding;\r\n }\r\n // If we want more padding than we actually have available, trim it down until it fits\r\n while (totalDesiredPadding > freeSpace) {\r\n let biggestPadding = sortOrder[0];\r\n for (const t of sortOrder) {\r\n if (byType[t].padding > byType[biggestPadding].padding) biggestPadding = t;\r\n }\r\n // Try to remove padding 5 at a time if possible\r\n const delta = byType[biggestPadding].padding > 5 ? 5 : 1;\r\n totalDesiredPadding -= delta;\r\n byType[biggestPadding].padding -= delta;\r\n }\r\n let outIndex = this.protectedSlots;\r\n for (const t of Object.values(byType)) {\r\n for (const g of t.glyphs) {\r\n if (this.inventory[outIndex]) this.swap(this.inventory[outIndex], g);\r\n else this.moveToEmpty(g, outIndex);\r\n ++outIndex;\r\n }\r\n outIndex += t.padding;\r\n }\r\n if (player.reality.autoCollapse) this.collapseEmptySlots();\r\n },\r\n sortByLevel() {\r\n this.sort(compare.level);\r\n },\r\n sortByPower() {\r\n this.sort(compare.power);\r\n },\r\n sortByScore() {\r\n this.sort(compare.score);\r\n },\r\n sortByEffect() {\r\n this.sort(compare.effect);\r\n },\r\n autoEquipBetterGlyphs(compareFunction) {\r\n if(typeof compareFunction != \"function\") return;\r\n Glyphs.active.forEach(equipped => {\r\n if(equipped === null) return;\r\n let sameTypeGlyphs = Glyphs.inventoryList.filter(g => g.type === equipped.type);\r\n if(sameTypeGlyphs.length === 0) return;\r\n if(sameTypeGlyphs.length > 1) {\r\n sameTypeGlyphs.sort(compareFunction);\r\n }\r\n let candidate = sameTypeGlyphs[0];\r\n if(compareFunction(equipped, candidate) > 0) Glyphs.swapIntoActive(candidate, equipped.idx);\r\n });\r\n },\r\n autoEquipByLevel() {\r\n this.autoEquipBetterGlyphs(compare.level);\r\n },\r\n autoEquipByPower() {\r\n this.autoEquipBetterGlyphs(compare.power);\r\n },\r\n autoEquipByScore() {\r\n this.autoEquipBetterGlyphs(compare.score);\r\n },\r\n autoEquipByEffect() {\r\n this.autoEquipBetterGlyphs(compare.effect);\r\n },\r\n // If there are enough glyphs that are better than the specified glyph, in every way, then\r\n // the glyph is objectively a useless piece of garbage.\r\n isObjectivelyUseless(glyph, threshold, inventoryIn) {\r\n if (player.reality.applyFilterToPurge && AutoGlyphProcessor.wouldKeep(glyph)) {\r\n return false;\r\n }\r\n function hasSomeBetterEffects(glyphA, glyphB, comparedEffects) {\r\n for (const effect of comparedEffects) {\r\n const c = effect.compareValues(\r\n effect.effect(glyphA.level, glyphA.strength),\r\n effect.effect(glyphB.level, glyphB.strength));\r\n // If the glyph in question is better in even one effect, it passes this comparison\r\n if (c > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n const toCompare = (inventoryIn ?? this.inventory).concat(this.active)\r\n .filter(g => g !== null &&\r\n g.type === glyph.type &&\r\n g.id !== glyph.id &&\r\n (g.level >= glyph.level || g.strength >= glyph.strength) &&\r\n ((g.effects & glyph.effects) === glyph.effects));\r\n let compareThreshold = glyph.type === \"effarig\" || glyph.type === \"reality\" ? 1 : 5;\r\n if (MendingMilestone.five.isReached){\r\n compareThreshold = glyph.type === \"effarig\" || glyph.type === \"reality\" ? 2 : 8;\r\n }\r\n compareThreshold = Math.clampMax(compareThreshold, threshold);\r\n if (toCompare.length < compareThreshold) {\r\n return false;\r\n }\r\n const comparedEffects = getGlyphEffectsFromBitmask(glyph.effects).filter(x => x.id.startsWith(glyph.type));\r\n const betterCount = toCompare.countWhere(other => !hasSomeBetterEffects(glyph, other, comparedEffects));\r\n return betterCount >= compareThreshold;\r\n },\r\n // Note that this same function is called with different parameters for purge (5), harsh purge (1), and sac all (0)\r\n // If deleteGlyphs === false, we are running this from the modal and are doing so purely to *count* the number of\r\n // removed glyphs. In this case, we copy the inventory and run the purge on the copy - we need to be able to remove\r\n // glyphs as we go, or else the purge logic will be wrong (eg. 7 identical glyphs will all be \"worse than 5 others\")\r\n autoClean(threshold = Glyphs.maxSlots, deleteGlyphs = true) {\r\n const isHarsh = threshold < Glyphs.maxSlots;\r\n let toBeDeleted = 0;\r\n const inventoryCopy = deleteGlyphs ? undefined : this.fakePurgeInventory();\r\n // If the player hasn't unlocked sacrifice yet, prevent them from removing any glyphs.\r\n if (!GlyphSacrificeHandler.canSacrifice) return toBeDeleted;\r\n // We look in backwards order so that later glyphs get cleaned up first\r\n for (let inventoryIndex = this.totalSlots - 1; inventoryIndex >= this.protectedSlots; --inventoryIndex) {\r\n const glyph = (inventoryCopy ?? this.inventory)[inventoryIndex];\r\n // Never clean companion, and only clean cursed if we choose to sacrifice all\r\n if (glyph === null || glyph.type === \"companion\" || (glyph.type === \"cursed\" && threshold !== 0) || this.type === \"amalgam\") continue;\r\n // Don't auto-clean custom glyphs (eg. music glyphs) unless it's harsh or delete all\r\n const isCustomGlyph = glyph.color !== undefined || glyph.symbol !== undefined;\r\n if (isCustomGlyph && !isHarsh) continue;\r\n // If the threshold for better glyphs needed is zero, the glyph is definitely getting deleted\r\n // no matter what (well, unless it can't be gotten rid of in current glyph removal mode).\r\n if (threshold === 0 || this.isObjectivelyUseless(glyph, threshold, inventoryCopy)) {\r\n if (deleteGlyphs) AutoGlyphProcessor.getRidOfGlyph(glyph);\r\n else inventoryCopy.splice(inventoryCopy.indexOf(glyph), 1);\r\n toBeDeleted++;\r\n }\r\n }\r\n if (player.reality.autoCollapse && deleteGlyphs) this.collapseEmptySlots();\r\n return toBeDeleted;\r\n },\r\n // Similar to copyForRecords, except that it also preserves null entries, passes on the IDs, and doesn't\r\n // sort the glyphs; these are all necessary for the purge logic to work correctly\r\n fakePurgeInventory() {\r\n return this.inventory.map(g => (g === null\r\n ? null\r\n : {\r\n id: g.id,\r\n type: g.type,\r\n level: g.level,\r\n strength: g.strength,\r\n effects: g.effects,\r\n color: g.color,\r\n symbol: g.symbol\r\n }));\r\n },\r\n harshAutoClean() {\r\n this.autoClean(1);\r\n },\r\n deleteAllUnprotected() {\r\n this.autoClean(0);\r\n },\r\n deleteAllRejected(deleteGlyphs = true) {\r\n let toBeDeleted = 0;\r\n for (const glyph of Glyphs.inventory) {\r\n if (glyph !== null && glyph.idx >= this.protectedSlots && !AutoGlyphProcessor.wouldKeep(glyph)) {\r\n if (deleteGlyphs) AutoGlyphProcessor.getRidOfGlyph(glyph);\r\n toBeDeleted++;\r\n }\r\n }\r\n if (player.reality.autoCollapse && deleteGlyphs) this.collapseEmptySlots();\r\n return toBeDeleted;\r\n },\r\n collapseEmptySlots() {\r\n const unprotectedGlyphs = player.reality.glyphs.inventory\r\n .filter(g => g.idx >= this.protectedSlots)\r\n .sort((a, b) => a.idx - b.idx);\r\n for (let index = 0; index < unprotectedGlyphs.length; index++) {\r\n this.moveToSlot(unprotectedGlyphs[index], this.protectedSlots + index);\r\n }\r\n },\r\n processSortingAfterReality() {\r\n if (VUnlocks.autoAutoClean.canBeApplied && player.reality.autoAutoClean) this.autoClean();\r\n switch (player.reality.autoSort) {\r\n case AUTO_SORT_MODE.NONE:\r\n break;\r\n case AUTO_SORT_MODE.LEVEL:\r\n this.sortByLevel();\r\n break;\r\n case AUTO_SORT_MODE.POWER:\r\n this.sortByPower();\r\n break;\r\n case AUTO_SORT_MODE.EFFECT:\r\n this.sortByEffect();\r\n break;\r\n case AUTO_SORT_MODE.SCORE:\r\n this.sortByScore();\r\n break;\r\n default:\r\n throw new Error(\"Unrecognized auto-sort mode\");\r\n }\r\n },\r\n processAutoEquipAfterReality() {\r\n switch (player.reality.autoEquip) {\r\n case AUTO_SORT_MODE.NONE:\r\n break;\r\n case AUTO_SORT_MODE.LEVEL:\r\n this.autoEquipByLevel();\r\n break;\r\n case AUTO_SORT_MODE.POWER:\r\n this.autoEquipByPower();\r\n break;\r\n case AUTO_SORT_MODE.EFFECT:\r\n this.autoEquipByEffect();\r\n break;\r\n case AUTO_SORT_MODE.SCORE:\r\n this.autoEquipByScore();\r\n break;\r\n default:\r\n throw new Error(\"Unrecognized auto-equip mode\");\r\n }\r\n },\r\n get levelCap() {\r\n return 1000000000000;\r\n },\r\n get instabilityThreshold() {\r\n return 1000 + getAdjustedGlyphEffect(\"effarigglyph\") + ImaginaryUpgrade(7).effectOrDefault(0);\r\n },\r\n get hyperInstabilityThreshold() {\r\n return 3000 + this.instabilityThreshold;\r\n },\r\n get ultraInstabilityThreshold(){\r\n //let effarigMemDelay = Ra.unlocks.harshInstabilityDelay.isUnlocked ? (500 * (Math.max(1, Math.floor(Ra.pets.effarig.level / 5) - 10))) : 0;\r\n return 45000 + (500 * MendingUpgrade(6).boughtAmount) + Ra.unlocks.harshInstabilityDelay.effectOrDefault(0);\r\n },\r\n get omegaInstabilityThreshold(){\r\n return 100000;\r\n },\r\n get hardcap(){\r\n return 100000000;\r\n },\r\n clearUndo() {\r\n player.reality.glyphs.undo = [];\r\n },\r\n saveUndo(targetSlot) {\r\n const undoData = {\r\n targetSlot,\r\n am: new Decimal(Currency.antimatter.value),\r\n ip: new Decimal(Currency.infinityPoints.value),\r\n ep: new Decimal(Currency.eternityPoints.value),\r\n tt: Currency.timeTheorems.max.minus(TimeTheorems.totalPurchased()),\r\n ecs: EternityChallenges.all.map(e => e.completions),\r\n thisInfinityTime: player.records.thisInfinity.time,\r\n thisInfinityRealTime: player.records.thisInfinity.realTime,\r\n thisEternityTime: player.records.thisEternity.time,\r\n thisEternityRealTime: player.records.thisEternity.realTime,\r\n thisRealityTime: player.records.thisReality.time,\r\n thisRealityRealTime: player.records.thisReality.realTime,\r\n storedTime: player.celestials.enslaved.stored,\r\n dilationStudies: player.dilation.studies.toBitmask(),\r\n dilationUpgrades: player.dilation.upgrades.toBitmask(),\r\n dilationRebuyables: DilationUpgrades.rebuyable.mapToObject(d => d.id, d => d.boughtAmount),\r\n tp: new Decimal(Currency.tachyonParticles.value),\r\n dt: new Decimal(Currency.dilatedTime.value),\r\n };\r\n player.reality.glyphs.undo.push(undoData);\r\n },\r\n undo() {\r\n const inventorySlot = Glyphs.findFreeIndex(player.options.respecIntoProtected);\r\n if (inventorySlot === -1 || player.reality.glyphs.undo.length === 0) return;\r\n const undoData = player.reality.glyphs.undo.pop();\r\n // We store this value here so that we can restore it later on in the reality reset code, since we immediately\r\n // change equipped glyph status here but only update requirement checks within finishProcessReality()\r\n this.bestUndoGlyphCount = player.requirementChecks.reality.maxGlyphs;\r\n this.unequip(undoData.targetSlot, inventorySlot);\r\n finishProcessReality({\r\n reset: true,\r\n glyphUndo: true,\r\n restoreCelestialState: true,\r\n });\r\n Currency.antimatter.value = new Decimal(undoData.am);\r\n Currency.infinityPoints.value = new Decimal(undoData.ip);\r\n Currency.eternityPoints.value = new Decimal(undoData.ep);\r\n Currency.timeTheorems.value = new Decimal(undoData.tt);\r\n EternityChallenges.all.map((ec, ecIndex) => ec.completions = undoData.ecs[ecIndex]);\r\n player.records.thisInfinity.time = undoData.thisInfinityTime;\r\n player.records.thisInfinity.realTime = undoData.thisInfinityRealTime;\r\n player.records.thisEternity.time = undoData.thisEternityTime;\r\n player.records.thisEternity.realTime = undoData.thisEternityRealTime;\r\n player.records.thisReality.time = undoData.thisRealityTime;\r\n player.records.thisReality.realTime = undoData.thisRealityRealTime;\r\n player.celestials.enslaved.stored = undoData.storedTime || 0;\r\n if (undoData.dilationStudies) {\r\n player.dilation.studies = Array.fromBitmask(undoData.dilationStudies);\r\n player.dilation.upgrades = new Set(Array.fromBitmask(undoData.dilationUpgrades));\r\n for (const id of Object.keys(undoData.dilationRebuyables)) {\r\n DilationUpgrades.fromId(id).boughtAmount = undoData.dilationRebuyables[id];\r\n }\r\n Currency.tachyonParticles.value = new Decimal(undoData.tp);\r\n Currency.dilatedTime.value = new Decimal(undoData.dt);\r\n }\r\n if (Player.automatorUnlocked && AutomatorBackend.state.forceRestart) {\r\n AutomatorBackend.start(player.reality.automator.state.editorScript);\r\n }\r\n },\r\n copyForRecords(glyphList) {\r\n // Sorting by effect ensures consistent ordering by type, based on how the effect bitmasks are structured\r\n return glyphList.map(g => ({\r\n type: g.type,\r\n level: g.level,\r\n strength: g.strength,\r\n effects: g.effects,\r\n color: g.color,\r\n symbol: g.symbol, }))\r\n .sort((a, b) => b.effects - a.effects);\r\n },\r\n // Normal glyph count minus 3 for each cursed glyph, uses 4 instead of 3 in the calculation because cursed glyphs\r\n // still contribute to the length of the active list. Note that it only ever decreases if startingReality is true.\r\n updateMaxGlyphCount(startingReality = false) {\r\n const activeGlyphList = this.activeWithoutCompanion;\r\n const currCount = activeGlyphList.length - 4 * activeGlyphList.filter(x => x && x.type === \"cursed\").length;\r\n if (startingReality) player.requirementChecks.reality.maxGlyphs = currCount;\r\n player.requirementChecks.reality.maxGlyphs = Math.max(player.requirementChecks.reality.maxGlyphs, currCount);\r\n },\r\n // Modifies a basic glyph to have timespeed, and adds the new effect to time glyphs\r\n applyGamespeed(glyph) {\r\n if (!Ra.unlocks.allGamespeedGlyphs.canBeApplied) return;\r\n if (BASIC_GLYPH_TYPES.includes(glyph.type)) {\r\n glyph.effects |= (1 << GlyphEffects.timespeed.bitmaskIndex);\r\n if (glyph.type === \"time\") {\r\n glyph.effects |= (1 << GlyphEffects.timeshardpow.bitmaskIndex);\r\n }\r\n }\r\n },\r\n swapIntoActive(glyph, targetSlot) {\r\n this.removeFromInventory(glyph);\r\n this.unequip(targetSlot, glyph.idx);\r\n finishProcessReality({\r\n reset: true,\r\n glyphUndo: false,\r\n restoreCelestialState: true,\r\n });\r\n player.reality.glyphs.active.push(glyph);\r\n this.active[targetSlot] = glyph;\r\n glyph.idx = targetSlot;\r\n this.updateRealityGlyphEffects();\r\n this.updateMaxGlyphCount(true);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n this.validate();\r\n },\r\n // Mostly used for key-swapping glyph set UI elements; composites the entire glyph set together in a way which is\r\n // relatively unlikely to cause collisions between different glyph sets unless they're actually the same glyphs.\r\n // Different permutations of the same glyphs should produce the same hash, but aren't guaranteed to\r\n hash(glyphSet) {\r\n let hash = 1;\r\n for (const glyph of glyphSet) {\r\n // This should be at most around e23 or so in practice\r\n const singleGlyphHash = Math.pow(glyph.level, 2) * Math.pow(glyph.strength, 4) * glyph.effects *\r\n glyph.type.charCodeAt(0);\r\n hash *= singleGlyphHash;\r\n }\r\n return hash;\r\n },\r\n giveCursedGlyph() {\r\n if (GameCache.glyphInventorySpace.value === 0) {\r\n Modal.message.show(\"No available inventory space; Sacrifice some Glyphs to free up space.\",\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n return;\r\n }\r\n const cursedCount = this.allGlyphs.filter(g => g !== null && g.type === \"cursed\").length;\r\n if (cursedCount >= 8) {\r\n GameUI.notify.error(`You don't need more than ${format(8)} Cursed Glyphs!`);\r\n } else {\r\n this.addToInventory(GlyphGenerator.cursedGlyph());\r\n GameUI.notify.error(\"Created a Cursed Glyph\");\r\n }\r\n }\r\n};\r\n\r\nclass GlyphSacrificeState extends GameMechanicState { }\r\n\r\nexport const GlyphSacrifice = mapGameDataToObject(\r\n GameDatabase.reality.glyphSacrifice,\r\n config => new GlyphSacrificeState(config)\r\n);\r\n\r\nexport function recalculateAllGlyphs() {\r\n for (let i = 0; i < player.reality.glyphs.active.length; i++) {\r\n calculateGlyph(player.reality.glyphs.active[i]);\r\n }\r\n // Delete any glyphs that are in overflow spots:\r\n player.reality.glyphs.inventory = player.reality.glyphs.inventory.filter(\r\n glyph => glyph.idx < Glyphs.totalSlots);\r\n for (let i = 0; i < player.reality.glyphs.inventory.length; i++) {\r\n calculateGlyph(player.reality.glyphs.inventory[i]);\r\n }\r\n Glyphs.updateRealityGlyphEffects();\r\n Glyphs.refresh();\r\n}\r\n\r\n// Makes sure level is a positive whole number and rarity is >0% (retroactive fixes) and recalculates effects\r\nexport function calculateGlyph(glyph) {\r\n if (glyph.color === undefined && glyph.symbol === undefined) {\r\n glyph.level = Math.max(1, Math.round(glyph.level));\r\n if (glyph.rawLevel === undefined) {\r\n // Only correct below the second round of instability, but it only matters for glyphs produced before\r\n // this was merged, so it's not a big deal.\r\n glyph.rawLevel = glyph.level < 1000 ? glyph.level : (Math.pow(0.004 * glyph.level - 3, 2) - 1) * 125 + 1000;\r\n }\r\n//Ra.unlocks.brokenLimit.isUnlocked\r\n // Used to randomly generate strength in this case; I don't think we actually care.\r\n if (glyph.strength === 1) glyph.strength = 1.5;\r\n glyph.strength = Math.min(rarityToStrength(1000), glyph.strength);\r\n }\r\n}\r\n\r\nexport function getRarity(x) {\r\n return GlyphRarities.find(e => x >= e.minStrength);\r\n}\r\n\r\nexport function getAdjustedGlyphLevel(glyph, realityGlyphBoost = Glyphs.levelBoost, ignoreCelestialEffects = false) {\r\n const level = glyph.level;\r\n if (!ignoreCelestialEffects) {\r\n if (Pelle.isDoomed) return Math.min(level, Pelle.glyphMaxLevel);\r\n if (Enslaved.isRunning) return Math.max(level, Enslaved.glyphLevelMin);\r\n if (Effarig.isRunning) return Math.min(level, Effarig.glyphLevelCap);\r\n }\r\n if (BASIC_GLYPH_TYPES.includes(glyph.type)) return level + realityGlyphBoost;\r\n return level;\r\n}\r\n\r\nexport function respecGlyphs() {\r\n if (!Glyphs.unequipAll()) {\r\n Modal.message.show(\"Some of your Glyphs could not be unequipped due to lack of inventory space.\",\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n }\r\n player.reality.respec = false;\r\n}\r\n","class CosmeticGlyphType {\r\n constructor(setup, isCosmetic) {\r\n this.id = setup.id;\r\n this._defaultSymbol = setup.symbol;\r\n this._defaultColor = setup.color;\r\n this.preventBlur = setup.preventBlur ?? false;\r\n this.isUnlocked = setup.isUnlocked;\r\n this._canCustomize = setup.canCustomize;\r\n this.fixedSymbolColor = setup.fixedSymbolColor ?? false;\r\n this.isCosmetic = isCosmetic;\r\n }\r\n\r\n // This looks hacky because isUnlocked is also used for game mechanic purposes with non-cosmetic\r\n // types and must be false for cursed, reality, and companion glyphs. However, we use it to determine\r\n // if a type should be displayed at all in the case of cosmetic types\r\n get canCustomize() {\r\n return (!this.isCosmetic || (this.isUnlocked?.() ?? true)) && (this._canCustomize?.() ?? true);\r\n }\r\n\r\n get defaultSymbol() {\r\n return {\r\n symbol: this._defaultSymbol,\r\n blur: !this.preventBlur,\r\n };\r\n }\r\n\r\n get defaultColor() {\r\n const color = this.id === \"reality\" ? GlyphAppearanceHandler.realityColor : this._defaultColor;\r\n const isNormallyDark = !GlyphAppearanceHandler.isLightBG;\r\n return {\r\n border: color,\r\n bg: (isNormallyDark === (this.id === \"cursed\" || this.id === \"amalgam\")) ? \"white\" : \"black\",\r\n };\r\n }\r\n\r\n get currentSymbol() {\r\n const custom = player.reality.glyphs.cosmetics.symbolMap[this.id];\r\n if (!player.reality.glyphs.cosmetics.active || !custom) return this.defaultSymbol;\r\n return {\r\n symbol: custom,\r\n blur: !(this.preventBlur || GlyphAppearanceHandler.unblurredSymbols.includes(custom)),\r\n };\r\n }\r\n\r\n get currentColor() {\r\n const custom = player.reality.glyphs.cosmetics.colorMap[this.id];\r\n if (!player.reality.glyphs.cosmetics.active || !custom) return this.defaultColor;\r\n const colorProps = GlyphAppearanceHandler.getColorProps(custom);\r\n return {\r\n ...colorProps,\r\n str: custom,\r\n };\r\n }\r\n\r\n get ignoreRarityColor() {\r\n return this.isCosmetic || this.fixedSymbolColor;\r\n }\r\n}\r\n\r\nconst functionalGlyphs = mapGameDataToObject(\r\n GameDatabase.reality.glyphTypes,\r\n config => new CosmeticGlyphType(config, false)\r\n);\r\n\r\nconst cosmeticGlyphs = mapGameDataToObject(\r\n GameDatabase.reality.cosmeticGlyphs,\r\n config => new CosmeticGlyphType(config, true)\r\n);\r\n\r\nexport const CosmeticGlyphTypes = {\r\n ...functionalGlyphs,\r\n ...cosmeticGlyphs,\r\n get list() {\r\n return Object.keys({ ...GameDatabase.reality.glyphTypes, ...GameDatabase.reality.cosmeticGlyphs })\r\n .map(e => CosmeticGlyphTypes[e]);\r\n },\r\n};\r\n\r\nexport const GlyphAppearanceHandler = {\r\n setInModal: null,\r\n chosenFromModal: null,\r\n get cosmeticsEnabled() {\r\n return player.reality.glyphs.cosmetics.active;\r\n },\r\n get symbolMap() {\r\n return player.reality.glyphs.cosmetics.symbolMap;\r\n },\r\n get colorMap() {\r\n return player.reality.glyphs.cosmetics.colorMap;\r\n },\r\n get availableSymbols() {\r\n return Object.values(GameDatabase.reality.glyphCosmeticSets)\r\n .filter(s => this.unlockedSets.includes(s.id))\r\n .map(s => s.symbol)\r\n .filter(s => s);\r\n },\r\n // Sort the colors by hue, otherwise finding specific colors would be a mess for UX.\r\n // However, colors \"close enough to grayscale\" are sorted separately and first\r\n get availableColors() {\r\n const sortedArray = Object.values(GameDatabase.reality.glyphCosmeticSets)\r\n .filter(s => this.unlockedSets.includes(s.id))\r\n .flatMap(s => s.color)\r\n .sort((a, b) => {\r\n const getHue = hex => {\r\n const parts = hex.split(\"#\");\r\n const color = parts[1];\r\n const rgb = [\r\n parseInt(color.substring(0, 2), 16) / 255,\r\n parseInt(color.substring(2, 4), 16) / 255,\r\n parseInt(color.substring(4), 16) / 255\r\n ];\r\n const min = Math.min(...rgb), max = Math.max(...rgb);\r\n if (max - min < 0.3) return max;\r\n let rawHue;\r\n if (rgb[0] === max) rawHue = (rgb[1] - rgb[2]) / (max - min);\r\n else if (rgb[1] === max) rawHue = 2 + (rgb[2] - rgb[1]) / (max - min);\r\n else rawHue = 4 + (rgb[0] - rgb[1]) / (max - min);\r\n return 6 + ((rawHue + 6) % 6);\r\n };\r\n return getHue(a) - getHue(b);\r\n })\r\n .filter(c => c);\r\n\r\n // We want two rows in the color selection Vue component, but that displays options in columns (one column\r\n // per set of symbol options). Here we do a bit of array manipulation to lay out colors as two rows, separated\r\n // by BG color and with the longer row on top (UI doesn't handle empty top-row spots well)\r\n const blackArr = sortedArray.filter(c => c.charAt(0) === \"B\");\r\n const whiteArr = sortedArray.filter(c => c.charAt(0) === \"W\");\r\n const longer = blackArr.length > whiteArr.length ? blackArr : whiteArr;\r\n const shorter = blackArr.length > whiteArr.length ? whiteArr : blackArr;\r\n const combined = [];\r\n for (let index = 0; index < longer.length; index++) {\r\n if (index < shorter.length) combined.push([longer[index], shorter[index]]);\r\n else combined.push([longer[index]]);\r\n }\r\n\r\n return combined;\r\n },\r\n get availableTypes() {\r\n return Object.values(GameDatabase.reality.cosmeticGlyphs)\r\n .map(type => CosmeticGlyphTypes[type.id])\r\n .filter(type => type.isUnlocked())\r\n .map(type => type.id);\r\n },\r\n get unblurredSymbols() {\r\n return Object.values(GameDatabase.reality.glyphCosmeticSets)\r\n .filter(s => s.preventBlur)\r\n .map(s => s.symbol)\r\n .flat();\r\n },\r\n // Note: This can *technically* be inconsistent with the actual number of sets, but only y a cheated save.\r\n get expectedSetCount() {\r\n return ShopPurchaseData.singleCosmeticSet + player.records.fullGameCompletions;\r\n },\r\n\r\n // Returns true for \"light\" BG glyphs and false for \"dark\" BG glyphs\r\n get isLightBG() {\r\n switch (player.options.glyphBG) {\r\n case GLYPH_BG_SETTING.AUTO:\r\n return !Theme.current().isDark();\r\n case GLYPH_BG_SETTING.LIGHT:\r\n return true;\r\n case GLYPH_BG_SETTING.DARK:\r\n return false;\r\n default:\r\n throw new Error(\"Unrecognized Glyph BG setting\");\r\n }\r\n },\r\n getBorderColor(type) {\r\n if ((type === \"cursed\" || this.type === \"amalgam\") && !CosmeticGlyphTypes.cursed.currentColor.str) return this.isLightBG ? \"#ffffff\" : \"#000000\";\r\n return CosmeticGlyphTypes[type].currentColor.border;\r\n },\r\n getRarityColor(strength, type) {\r\n const rarityEntry = getRarity(strength);\r\n const isLight = CosmeticGlyphTypes[type].currentColor.bg === \"white\";\r\n const colorKey = `${isLight ? \"light\" : \"dark\"}${player.options.highContrastRarity ? \"HighContrast\" : \"Color\"}`;\r\n return rarityEntry[colorKey];\r\n },\r\n getColorProps(colorStr) {\r\n // This condition is a bit odd - this specifically selects out the hybrid custom colors which have both a BG color\r\n // and a hex code. Reality color looks like \"rgb(...\" and also goes in this conditional\r\n if (colorStr?.charAt(1) !== \"#\") {\r\n return {\r\n border: colorStr,\r\n bg: this.isLightBG ? \"white\" : \"black\",\r\n };\r\n }\r\n return {\r\n border: colorStr.substring(1),\r\n bg: colorStr.charAt(0) === \"B\" ? \"black\" : \"white\",\r\n };\r\n },\r\n // Only used to ensure readable glyph tooltips\r\n getBaseColor(isInverted) {\r\n const isNormallyDark = !this.isLightBG;\r\n if (isInverted) return isNormallyDark ? \"white\" : \"black\";\r\n return isNormallyDark ? \"black\" : \"white\";\r\n },\r\n\r\n // This produces a linearly interpolated color between the basic glyph colors, but with RGB channels copied and\r\n // hardcoded from the color data because that's probably preferable to a very hacky hex conversion method. The\r\n // order used is {infinity, dilation, power, replication, time, infinity, ... }. This is used in multiple places\r\n // and this approach is much lighter on performance due to colored keyframe animations causing significant lag.\r\n get realityColor() {\r\n // RGB values for the colors to interpolate between\r\n const r = [182, 100, 34, 3, 178, 182];\r\n const g = [127, 221, 170, 169, 65, 127];\r\n const b = [51, 23, 72, 244, 227, 51];\r\n\r\n // Integer and fractional parts for interpolation parameter (10s period, equal 2s per step)\r\n const timer = Date.now() % 10000;\r\n const i = Math.floor(timer / 2000);\r\n const f = timer / 2000 - i;\r\n\r\n return `rgb(${r[i] * (1 - f) + r[i + 1] * f},\r\n ${g[i] * (1 - f) + g[i + 1] * f},\r\n ${b[i] * (1 - f) + b[i + 1] * f})`;\r\n },\r\n\r\n get unlockedSets() {\r\n if (ShopPurchase.allCosmeticSets > 0) return Object.keys(GameDatabase.reality.glyphCosmeticSets);\r\n return [...new Set(player.reality.glyphs.cosmetics.unlockedFromNG.concat(ShopPurchaseData.unlockedCosmetics))];\r\n },\r\n get lockedSets() {\r\n return Object.keys(GameDatabase.reality.glyphCosmeticSets).filter(set => !this.unlockedSets.includes(set));\r\n },\r\n // Unlocks the set chosen in the modal, choosing a random available one as a fallback. This is only called for\r\n // sets unlocked through game completions; STD purchases are handled with ShopPurchaseData\r\n unlockSet() {\r\n const lockedSets = this.lockedSets;\r\n const toUnlock = GlyphAppearanceHandler.chosenFromModal?.id;\r\n\r\n let unlocked;\r\n if (toUnlock && lockedSets.includes(toUnlock)) {\r\n unlocked = toUnlock;\r\n } else if (!toUnlock && lockedSets.length > 0) {\r\n // Randomness doesn't need to be seeded since we normally let the player choose and randomness is just a fallback\r\n unlocked = lockedSets[Math.floor(Math.random() * lockedSets.length)];\r\n } else {\r\n return;\r\n }\r\n\r\n player.reality.glyphs.cosmetics.unlockedFromNG.push(unlocked);\r\n const entry = GameDatabase.reality.glyphCosmeticSets[unlocked];\r\n GameUI.notify.info(`You have unlocked the \"${entry.name}\" Set for Glyph cosmetics!`, 10000);\r\n GlyphAppearanceHandler.chosenFromModal = null;\r\n this.applyNotification();\r\n },\r\n applyNotification() {\r\n TabNotification.newGlyphCosmetic.clearTrigger();\r\n TabNotification.newGlyphCosmetic.tryTrigger();\r\n player.reality.glyphs.cosmetics.glowNotification = true;\r\n },\r\n\r\n // Deletes invalid glyph cosmetics for individual symbols or colors which aren't unlocked. Note that this should only\r\n // be called on import and not on page load, as there is a minor async delay on-load which will cause STD purchases\r\n // to not be accounted for when loading an already-existing local save\r\n clearInvalidCosmetics() {\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n const allSymbols = GlyphAppearanceHandler.availableSymbols.flat();\r\n const allColors = GlyphAppearanceHandler.availableSymbols.flat();\r\n for (const glyph of allGlyphs) {\r\n if (!allSymbols.includes(glyph.symbol)) glyph.symbol = undefined;\r\n if (!allColors.includes(glyph.color)) glyph.color = undefined;\r\n if (!GlyphAppearanceHandler.availableTypes.includes(glyph.cosmetic)) glyph.cosmetic = undefined;\r\n }\r\n const cosmetics = player.reality.glyphs.cosmetics;\r\n for (const key of Object.keys(cosmetics.symbolMap)) {\r\n const selectedSymbol = cosmetics.symbolMap[key];\r\n if (!allSymbols.includes(selectedSymbol)) cosmetics.symbolMap[key] = undefined;\r\n }\r\n for (const key of Object.keys(cosmetics.colorMap)) {\r\n const selectedColor = cosmetics.symbolMap[key];\r\n if (!allColors.includes(selectedColor)) cosmetics.colorMap[key] = undefined;\r\n }\r\n }\r\n};\r\n","import { Pelle } from \"../globals\";\r\n\r\nimport { GlyphCombiner } from \"@/core/secret-formula\";\r\n\r\nclass GlyphEffectState {\r\n constructor(id, props) {\r\n this._id = id;\r\n this._adjustApply = props.adjustApply;\r\n }\r\n\r\n applyEffect(applyFn) {\r\n let effectValue = getAdjustedGlyphEffect(this._id);\r\n if (this._adjustApply !== undefined) {\r\n effectValue = this._adjustApply(effectValue);\r\n }\r\n applyFn(effectValue);\r\n }\r\n}\r\n\r\nexport const GlyphEffect = {\r\n dimBoostPower: new GlyphEffectState(\"powerdimboost\", {\r\n adjustApply: value => Math.max(1, value)\r\n }),\r\n ipMult: new GlyphEffectState(\"infinityIP\", {\r\n adjustApply: value => Decimal.max(1, value)\r\n }),\r\n epMult: new GlyphEffectState(\"timeEP\", {\r\n adjustApply: value => Decimal.max(1, value)\r\n })\r\n};\r\n\r\n/**\r\n * This returns just the value, unlike getTotalEffect(), which outputs the softcap status as well\r\n * This variant is used by GameCache\r\n * @param {string} effectKey\r\n * @return {number | Decimal}\r\n */\r\nexport function getAdjustedGlyphEffectUncached(effectKey) {\r\n return getTotalEffect(effectKey).value;\r\n}\r\n\r\n/**\r\n * This returns just the value, unlike getTotalEffect(), which outputs the softcap status as well\r\n * @param {string} effectKey\r\n * @return {number | Decimal}\r\n */\r\nexport function getAdjustedGlyphEffect(effectKey) {\r\n return GameCache.glyphEffects.value[effectKey];\r\n}\r\n\r\n/**\r\n * Takes the glyph effect value and feeds it through the conversion function that gives the value of the secondary\r\n * effect from glyph alteration.\r\n * @param {string} effectKey\r\n * @return {number | Decimal}\r\n */\r\nexport function getSecondaryGlyphEffect(effectKey) {\r\n return GlyphEffects[effectKey].conversion(getAdjustedGlyphEffect(effectKey));\r\n}\r\n\r\n/**\r\n * Finds all equipped glyphs with the specified effect and returns an array of effect values.\r\n * @param {string} effectKey\r\n * @returns {number[]}\r\n */\r\nexport function getGlyphEffectValues(effectKey) {\r\n if (!orderedEffectList.includes(effectKey)) {\r\n throw new Error(`Unknown Glyph effect requested \"${effectKey}\"'`);\r\n }\r\n return player.reality.glyphs.active\r\n .filter(glyph => ((1 << GlyphEffects[effectKey].bitmaskIndex) & glyph.effects) !== 0)\r\n .filter(glyph => generatedTypes.includes(glyph.type) === GlyphEffects[effectKey].isGenerated)\r\n .map(glyph => getSingleGlyphEffectFromBitmask(effectKey, glyph));\r\n}\r\n\r\n// Combines all specified glyph effects, reduces some boilerplate\r\nfunction getTotalEffect(effectKey) {\r\n return GlyphEffects[effectKey].combine(getGlyphEffectValues(effectKey));\r\n}\r\n\r\n/**\r\n * Key is type+effect\r\n */\r\nexport function separateEffectKey(effectKey) {\r\n let type = \"\";\r\n let effect = \"\";\r\n for (let i = 0; i < GLYPH_TYPES.length; i++) {\r\n if (effectKey.substring(0, GLYPH_TYPES[i].length) === GLYPH_TYPES[i]) {\r\n type = GLYPH_TYPES[i];\r\n effect = effectKey.substring(GLYPH_TYPES[i].length);\r\n break;\r\n }\r\n }\r\n return [type, effect];\r\n}\r\n\r\n// Turns a glyph effect bitmask into an effect list and corresponding values. This also picks up non-generated effects,\r\n// since there is some id overlap. Those should be filtered out as needed after calling this function.\r\n// eslint-disable-next-line max-params\r\nexport function getGlyphEffectValuesFromBitmask(bitmask, level, baseStrength, type) {\r\n // If we don't specifically exclude companion glyphs, the first-reality EP record is wrong within Doomed since its\r\n // value is encoded in the rarity field\r\n const strength = (Pelle.isDoomed && type !== \"companion\") ? Pelle.glyphStrength : baseStrength;\r\n return getGlyphEffectsFromBitmask(bitmask)\r\n .map(effect => ({\r\n id: effect.id,\r\n value: effect.effect(level, strength)\r\n }));\r\n}\r\n\r\n// Pulls out a single effect value from a glyph's bitmask, returning just the value (nothing for missing effects)\r\nexport function getSingleGlyphEffectFromBitmask(effectName, glyph) {\r\n const glyphEffect = GlyphEffects[effectName];\r\n if ((glyph.effects & (1 << glyphEffect.bitmaskIndex)) === 0) {\r\n return undefined;\r\n }\r\n return glyphEffect.effect(getAdjustedGlyphLevel(glyph), Pelle.isDoomed ? Pelle.glyphStrength : glyph.strength);\r\n}\r\n\r\n// Note this function is used for glyph bitmasks, news ticker bitmasks, and offline achievements\r\nexport function countValuesFromBitmask(bitmask) {\r\n let numEffects = 0;\r\n let bits = bitmask;\r\n while (bits !== 0) {\r\n numEffects += bits & 1;\r\n bits >>= 1;\r\n }\r\n return numEffects;\r\n}\r\n\r\n// Returns both effect value and softcap status\r\nexport function getActiveGlyphEffects() {\r\n let effectValues = orderedEffectList\r\n .map(effect => ({ effect, values: getGlyphEffectValues(effect) }))\r\n .filter(ev => ev.values.length > 0)\r\n .map(ev => ({\r\n id: ev.effect,\r\n value: GlyphEffects[ev.effect].combine(ev.values),\r\n }));\r\n const effectNames = effectValues.map(e => e.id);\r\n\r\n // Numerically combine cursed effects with other glyph effects which directly conflict with them\r\n const cursedEffects = [\"cursedgalaxies\", \"curseddimensions\", \"cursedEP\"];\r\n const conflictingEffects = [\"realitygalaxies\", \"effarigdimensions\", \"timeEP\"];\r\n const combineFunction = [GlyphCombiner.multiply, GlyphCombiner.multiply, GlyphCombiner.multiplyDecimal];\r\n for (let i = 0; i < cursedEffects.length; i++) {\r\n if (effectNames.includes(cursedEffects[i]) && effectNames.includes(conflictingEffects[i])) {\r\n const combined = combineFunction[i]([getAdjustedGlyphEffect(cursedEffects[i]),\r\n getAdjustedGlyphEffect(conflictingEffects[i])]);\r\n if (Decimal.lt(combined, 1)) {\r\n effectValues = effectValues.filter(e => e.id !== conflictingEffects[i]);\r\n effectValues.filter(e => e.id === cursedEffects[i])[0].value.value = combined;\r\n } else {\r\n effectValues = effectValues.filter(e => e.id !== cursedEffects[i]);\r\n effectValues.filter(e => e.id === conflictingEffects[i])[0].value.value = combined;\r\n }\r\n }\r\n }\r\n\r\n return effectValues;\r\n}\r\n","/**\r\n * It turns out reading and writing the RNG state from player is really slow, for\r\n * some reason. Thus, it's very advantageous to get an RNG as a local variable, and only\r\n * write the state back out to player when we are done with it.\r\n * So, this interface is implemented by a real and fake RNG class; after creating one and\r\n * using it, call finalize on it to write the seed out.\r\n */\r\nimport { deepmerge } from \"@/utility/deepmerge\";\r\nimport { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\nimport { CorruptionUpgrade } from \"../corruption-upgrades\";\r\n\r\nclass GlyphRNG {\r\n static get SECOND_GAUSSIAN_DEFAULT_VALUE() {\r\n return 1e6;\r\n }\r\n\r\n constructor(seed, secondGaussian) {\r\n this.seed = seed;\r\n this.secondGaussian = secondGaussian;\r\n }\r\n\r\n uniform() {\r\n const state = xorshift32Update(this.seed);\r\n this.seed = state;\r\n return state * 2.3283064365386963e-10 + 0.5;\r\n }\r\n\r\n normal() {\r\n if (this.secondGaussian !== GlyphRNG.SECOND_GAUSSIAN_DEFAULT_VALUE) {\r\n const toReturn = this.secondGaussian;\r\n this.secondGaussian = GlyphRNG.SECOND_GAUSSIAN_DEFAULT_VALUE;\r\n return toReturn;\r\n }\r\n let u = 0, v = 0, s = 0;\r\n do {\r\n u = this.uniform() * 2 - 1;\r\n v = this.uniform() * 2 - 1;\r\n s = u * u + v * v;\r\n } while (s >= 1 || s === 0);\r\n s = Math.sqrt(-2 * Math.log(s) / s);\r\n this.secondGaussian = v * s;\r\n return u * s;\r\n }\r\n\r\n /**\r\n * Write the seed out to where it can be restored\r\n * @abstract\r\n */\r\n finalize() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get isFake() { throw new NotImplementedError(); }\r\n}\r\n\r\nexport const GlyphGenerator = {\r\n // Glyph choices will have more uniformly-distributed properties up for this many groups\r\n // of uniform glyphs. The size of a uniformity group is 5, so this gives uniformly-distributed\r\n // properties up to a reality count one more than 5x this value; the modified RNG for uniform\r\n // glyphs excludes the first fixed glyph and only starts from the 2nd one onward\r\n uniformityGroups: 4,\r\n\r\n fakeSeed: Date.now() % Math.pow(2, 32),\r\n fakeSecondGaussian: null,\r\n /* eslint-disable lines-between-class-members */\r\n RealGlyphRNG: class extends GlyphRNG {\r\n constructor() { super(player.reality.seed, player.reality.secondGaussian); }\r\n finalize() {\r\n player.reality.seed = this.seed;\r\n player.reality.secondGaussian = this.secondGaussian;\r\n }\r\n get isFake() { return false; }\r\n },\r\n\r\n FakeGlyphRNG: class extends GlyphRNG {\r\n constructor() { super(GlyphGenerator.fakeSeed, GlyphGenerator.fakeSecondGaussian); }\r\n finalize() {\r\n GlyphGenerator.fakeSeed = this.seed;\r\n GlyphGenerator.fakeSecondGaussian = this.secondGaussian;\r\n }\r\n get isFake() { return true; }\r\n },\r\n\r\n MusicGlyphRNG: class extends GlyphRNG {\r\n constructor() { super(player.reality.musicSeed, player.reality.musicSecondGaussian); }\r\n finalize() {\r\n player.reality.musicSeed = this.seed;\r\n player.reality.musicSecondGaussian = this.secondGaussian;\r\n }\r\n get isFake() { return false; }\r\n },\r\n /* eslint-enable lines-between-class-members */\r\n\r\n startingGlyph(level) {\r\n const initialStrength = 1.5;\r\n return {\r\n id: undefined,\r\n idx: null,\r\n type: \"power\",\r\n // The initial strength is very slightly above average.\r\n strength: initialStrength,\r\n level: level.actualLevel,\r\n rawLevel: level.rawLevel,\r\n effects: makeGlyphEffectBitmask([\"powerpow\"]),\r\n };\r\n },\r\n\r\n randomGlyph(level, rngIn, typeIn = null) {\r\n const rng = rngIn || new GlyphGenerator.RealGlyphRNG();\r\n const strength = this.randomStrength(rng);\r\n const type = typeIn || this.randomType(rng);\r\n let numEffects = this.randomNumberOfEffects(type, strength, level.actualLevel, rng);\r\n if (type !== \"effarig\" && numEffects > 4) numEffects = 4;\r\n const effectBitmask = this.generateEffects(type, numEffects, rng);\r\n if (rngIn === undefined) rng.finalize();\r\n return {\r\n id: undefined,\r\n idx: null,\r\n type,\r\n strength,\r\n level: level.actualLevel,\r\n rawLevel: level.rawLevel,\r\n effects: effectBitmask,\r\n };\r\n },\r\n\r\n realityGlyph(level) {\r\n const str = rarityToStrength(100);\r\n const effects = this.generateRealityEffects(level);\r\n const effectBitmask = makeGlyphEffectBitmask(effects);\r\n return {\r\n id: undefined,\r\n idx: null,\r\n type: \"reality\",\r\n strength: str,\r\n level,\r\n rawLevel: level,\r\n effects: effectBitmask,\r\n };\r\n },\r\n\r\n cursedGlyph() {\r\n const str = rarityToStrength(100);\r\n const effectBitmask = makeGlyphEffectBitmask(\r\n orderedEffectList.filter(effect => effect.match(\"cursed*\"))\r\n );\r\n let generateLevel = 6666;\r\n if(CorruptionUpgrade(12).isBought) generateLevel = 666;\r\n return {\r\n id: undefined,\r\n idx: null,\r\n type: \"cursed\",\r\n strength: str,\r\n level: generateLevel,\r\n rawLevel: generateLevel,\r\n effects: effectBitmask,\r\n };\r\n },\r\n\r\n // These Glyphs are given on entering Doomed to prevent the player\r\n // from having none of each basic glyphs which are requied to beat pelle\r\n doomedGlyph(type) {\r\n const effectList = GlyphEffects.all.filter(e => e.id.startsWith(type));\r\n effectList.push(GlyphEffects.timespeed);\r\n let bitmask = 0;\r\n for (const effect of effectList) bitmask |= 1 << effect.bitmaskIndex;\r\n const glyphLevel = Math.max(player.records.bestReality.glyphLevel, 5000);\r\n return {\r\n id: undefined,\r\n idx: null,\r\n type,\r\n strength: 3.5,\r\n level: glyphLevel,\r\n rawLevel: glyphLevel,\r\n effects: bitmask,\r\n };\r\n },\r\n\r\n companionGlyph(eternityPoints) {\r\n // Store the pre-Reality EP value in the glyph's rarity\r\n const str = rarityToStrength(eternityPoints.log10() / 1e6);\r\n const effects = orderedEffectList.filter(effect => effect.match(\"companion*\"));\r\n const effectBitmask = makeGlyphEffectBitmask(effects);\r\n return {\r\n id: undefined,\r\n idx: null,\r\n type: \"companion\",\r\n strength: str,\r\n level: 1,\r\n rawLevel: 1,\r\n effects: effectBitmask,\r\n };\r\n },\r\n\r\n musicGlyph() {\r\n const rng = new GlyphGenerator.MusicGlyphRNG();\r\n const glyph =\r\n this.randomGlyph({ actualLevel: Math.floor(player.records.bestReality.glyphLevel * 0.8), rawLevel: 1 }, rng);\r\n rng.finalize();\r\n glyph.cosmetic = \"music\";\r\n glyph.fixedCosmetic = \"music\";\r\n return glyph;\r\n },\r\n\r\n // Generates a unique ID for glyphs, used for deletion and drag-and-drop. Non-unique IDs can cause buggy behavior.\r\n makeID() {\r\n return this.maxID + 1;\r\n },\r\n\r\n get maxID() {\r\n return player.reality.glyphs.active\r\n .concat(player.reality.glyphs.inventory)\r\n .reduce((max, glyph) => Math.max(max, glyph.id), 0);\r\n },\r\n\r\n get strengthMultiplier() {\r\n return Effects.max(1, RealityUpgrade(16));\r\n },\r\n\r\n randomStrength(rng) {\r\n // Technically getting this upgrade really changes glyph gen but at this point almost all\r\n // the RNG is gone anyway.\r\n const rarityBoost = Ra.unlocks.maxGlyphRarityIncrease.effectOrDefault(0);\r\n let afterRaAnswer = 100 + rarityBoost;\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n afterRaAnswer = Math.pow(afterRaAnswer,corruptionPenalties.compGlyphs.rarity[player.mending.corruption[4]]);\r\n afterRaAnswer *= (corruptionPenalties.compGlyphs.rarity[player.mending.corruption[4]]);\r\n afterRaAnswer = Math.ceil(afterRaAnswer*100)/100;\r\n };\r\n if (Ra.unlocks.maxGlyphRarityAndShardSacrificeBoost.canBeApplied || MendingUpgrade(12).isBought) return rarityToStrength(afterRaAnswer);\r\n let result = GlyphGenerator.gaussianBellCurve(rng) * GlyphGenerator.strengthMultiplier;\r\n const relicShardFactor = Ra.unlocks.extraGlyphChoicesAndRelicShardRarityAlwaysMax.canBeApplied ? 1 : rng.uniform();\r\n const increasedRarity = relicShardFactor * Effarig.maxRarityBoost +\r\n Effects.sum(Achievement(146), GlyphSacrifice.effarig);\r\n // Each rarity% is 0.025 strength.\r\n result += increasedRarity / 40;\r\n // Raise the result to the next-highest 0.1% rarity.\r\n result = Math.ceil(result * 400) / 400;\r\n return Math.min(result, rarityToStrength(100));\r\n },\r\n\r\n // eslint-disable-next-line max-params\r\n randomNumberOfEffects(type, strength, level, rng) {\r\n // Call the RNG twice before anything else to advance the RNG seed properly, even if the whole method returns early.\r\n // This prevents the position of effarig glyphs in the choice list from affecting the choices themselves, as well\r\n // as preventing all of the glyphs changing drastically when RU17 is purchased.\r\n const random1 = rng.uniform();\r\n const random2 = rng.uniform();\r\n if (type !== \"effarig\" && (Ra.unlocks.glyphEffectCount.canBeApplied || MendingUpgrade(12).isBought)) return 4;\r\n if (MendingUpgrade(12).isBought) return 7;\r\n const maxEffects = (Ra.unlocks.glyphEffectCount.canBeApplied || MendingUpgrade(12).isBought)? 7 : 4;\r\n let num = Math.min(\r\n maxEffects,\r\n Math.floor(Math.pow(random1, 1 - (Math.pow(level * strength, 0.5)) / 100) * 1.5 + 1)\r\n );\r\n // If we do decide to add anything else that boosts chance of an extra effect, keeping the code like this\r\n // makes it easier to do (add it to the Effects.max).\r\n if (RealityUpgrade(17).isBought && random2 < Effects.max(0, RealityUpgrade(17))) {\r\n num = Math.min(num + 1, maxEffects);\r\n }\r\n return Ra.unlocks.glyphEffectCount.canBeApplied ? Math.max(num, 4) : num;\r\n },\r\n\r\n // Populate a list of reality glyph effects based on level\r\n generateRealityEffects(level) {\r\n const numberOfEffects = realityGlyphEffectLevelThresholds.filter(lv => lv <= level).length;\r\n const sortedRealityEffects = GlyphEffects.all\r\n .filter(eff => eff.glyphTypes.includes(\"reality\"))\r\n .sort((a, b) => a.bitmaskIndex - b.bitmaskIndex)\r\n .map(eff => eff.id);\r\n return sortedRealityEffects.slice(0, numberOfEffects);\r\n },\r\n\r\n generateEffects(type, count, rng) {\r\n const effectValues = GlyphTypes[type].effects.mapToObject(x => x.bitmaskIndex, () => rng.uniform());\r\n // Get a bunch of random numbers so that we always use 7 here.\r\n Array.range(0, 7 - GlyphTypes[type].effects.length).forEach(() => rng.uniform());\r\n if (type === \"effarig\") {\r\n // This is effarigrm/effarigglyph\r\n const unincluded = effectValues[20] < effectValues[21] ? 20 : 21;\r\n effectValues[unincluded] = -1;\r\n }\r\n // This is timepow/infinitypow/powerpow\r\n for (const i of [0, 12, 16]) {\r\n if (i in effectValues) {\r\n effectValues[i] = 2;\r\n }\r\n }\r\n // Sort from highest to lowest value.\r\n const effects = Object.keys(effectValues).sort((a, b) => effectValues[b] - effectValues[a]).slice(0, count);\r\n return effects.map(Number).toBitmask();\r\n },\r\n\r\n randomType(rng, typesSoFar = []) {\r\n const generatable = generatedTypes.filter(x => (EffarigUnlock.reality.isUnlocked || MendingUpgrade(12).isBought) || x !== \"effarig\");\r\n const maxOfSameTypeSoFar = generatable.map(x => typesSoFar.countWhere(y => y === x)).max();\r\n const blacklisted = typesSoFar.length === 0\r\n ? [] : generatable.filter(x => typesSoFar.countWhere(y => y === x) === maxOfSameTypeSoFar);\r\n return GlyphTypes.random(rng, blacklisted);\r\n },\r\n\r\n /**\r\n * To generate glyphs with a \"uniformly random\" effect spread, we effectively need to generate all the glyphs in\r\n * uniform groups of some size at once, and then select from that generated group. In this case, we've decided\r\n * that a group which satisfies uniformity is that of 5 realities, such that all 20 choices amongst the group\r\n * must contain each individual glyph effect at least once. This makes types more \"uniform\" by ensuring that\r\n * any individual glyph type is never *repeatedly* absent for more than 2 realities in a row (which can only\r\n * happen between groups), as well as ensuring that trends of long-term type/effect absences never happen\r\n * Note: At this point, realityCount should be the number of realities BEFORE processing completes (ie. the first\r\n * random generated set begins at a parameter of 1)\r\n */\r\n uniformGlyphs(level, rng, realityCount) {\r\n // Reality count divided by 5 determines which group of 5 we're in, while count mod 5 determines the index\r\n // within that block. Note that we have a minus 1 because we want to exclude the first fixed glyph\r\n const groupNum = Math.floor((realityCount - 1) / 5);\r\n const groupIndex = (realityCount - 1) % 5;\r\n\r\n // The usage of the initial seed is complicated in order to prevent future prediction without using information\r\n // not normally available in-game (ie. the console). This makes it appear less predictable overall\r\n const initSeed = player.reality.initialSeed;\r\n const typePerm = permutationIndex(5, (31 + initSeed % 7) * groupNum + initSeed % 1123);\r\n\r\n // Figure out a permutation index for each generated glyph type this reality by counting through the sets\r\n // for choices which have already been generated for options in previous realities for this group\r\n const typePermIndex = Array.repeat(0, 5);\r\n for (let i = 0; i < groupIndex; i++) {\r\n for (let type = 0; type < 5; type++) {\r\n if (type !== typePerm[i]) typePermIndex[type]++;\r\n }\r\n }\r\n\r\n // Determine which effect needs to be added for uniformity (startID is a hardcoded array of the lowest ID glyph\r\n // effect of each type, in the same type order as BASIC_GLYPH_TYPES). We use type, initial seed, and group index\r\n // to pick a random permutation, again to make it less predictable and to make sure they're generally different\r\n const uniformEffects = [];\r\n const startID = [16, 12, 8, 0, 4];\r\n const typesThisReality = Array.range(0, 5);\r\n typesThisReality.splice(typePerm[groupIndex], 1);\r\n for (let i = 0; i < 4; i++) {\r\n const type = typesThisReality[i];\r\n const effectPerm = permutationIndex(4, 5 * type + (7 + initSeed % 5) * groupNum + initSeed % 11);\r\n uniformEffects.push(startID[type] + effectPerm[typePermIndex[type]]);\r\n }\r\n\r\n // Generate the glyphs without uniformity applied first, assuming 4 glyph choices early on, then fix it to contain\r\n // the new effect. This fixing process is a 50% chance to add to existing effects and 50% to replace them instead.\r\n // Note that if this would give us \"too many\" effects, we remove one of the existing ones, and the threshold for\r\n // having \"too many\" depends on if the player has the upgrade that improves effect count - we don't want the\r\n // uniformity code to make glyph generation disproportionately worse in that case\r\n const glyphs = [];\r\n for (let i = 0; i < 4; ++i) {\r\n const newGlyph = GlyphGenerator.randomGlyph(level, rng, BASIC_GLYPH_TYPES[typesThisReality[i]]);\r\n const newMask = (initSeed + realityCount + i) % 2 === 0\r\n ? (1 << uniformEffects[i])\r\n : newGlyph.effects | (1 << uniformEffects[i]);\r\n const maxEffects = RealityUpgrade(17).isBought ? 3 : 2;\r\n if (countValuesFromBitmask(newMask) > maxEffects) {\r\n // Turn the old effect bitmask into an array of removable effects and then deterministically remove one\r\n // of the non-power effects based on seed and reality count\r\n const replacable = getGlyphEffectsFromBitmask(newGlyph.effects)\r\n .filter(eff => eff.isGenerated)\r\n .map(eff => eff.bitmaskIndex)\r\n .filter(eff => ![0, 12, 16].includes(eff));\r\n const toRemove = replacable[Math.abs(initSeed + realityCount) % replacable.length];\r\n newGlyph.effects = newMask & ~(1 << toRemove);\r\n } else {\r\n newGlyph.effects = newMask;\r\n }\r\n\r\n // Add the power effects on power/infinity/time, since the initial setting of newMask removes them half the time\r\n const dimPowers = { power: 16, infinity: 12, time: 0 };\r\n if (dimPowers[newGlyph.type] !== undefined) {\r\n newGlyph.effects |= 1 << dimPowers[newGlyph.type];\r\n }\r\n\r\n glyphs.push(newGlyph);\r\n }\r\n\r\n return glyphs;\r\n },\r\n\r\n getRNG(fake) {\r\n return fake ? new GlyphGenerator.FakeGlyphRNG() : new GlyphGenerator.RealGlyphRNG();\r\n },\r\n\r\n /**\r\n * More than 3 approx 0.001%\r\n * More than 2.5 approx 0.2%\r\n * More than 2 approx 6%\r\n * More than 1.5 approx 38.43%\r\n */\r\n gaussianBellCurve(rng) {\r\n // Old code used max, instead of abs -- but we rejected any samples that were\r\n // at the boundary anyways. Might as well use abs, and not cycle as many times.\r\n // The function here is an approximation of ^0.65, here is the old code:\r\n // return Math.pow(Math.max(rng.normal() + 1, 1), 0.65);\r\n const x = Math.sqrt(Math.abs(rng.normal(), 0) + 1);\r\n return -0.111749606737000 + x * (0.900603878243551 + x * (0.229108274476697 + x * -0.017962545983249));\r\n },\r\n\r\n copy(glyph) {\r\n return glyph ? deepmerge({}, glyph) : glyph;\r\n },\r\n};\r\n","import { DC } from \"../constants\";\r\n// This actually deals with both sacrifice and refining, but I wasn't 100% sure what to call it\r\nexport const GlyphSacrificeHandler = {\r\n // Anything scaling on sacrifice caps at this value, even though the actual sacrifice values can go higher\r\n //maxSacrificeForEffects: /*Ra.unlocks.uncapGlyphSacEffects.isUnlocked ? DC.E300 :*/ DC.E100,\r\n // This is used for glyph UI-related things in a few places, but is handled here as a getter which is only called\r\n // sparingly - that is, whenever the cache is invalidated after a glyph is sacrificed. Thus it only gets recalculated\r\n // when glyphs are actually sacrificed, rather than every render cycle.\r\n get maxSacrificeForEffects(){\r\n if(Ra.unlocks.uncapGlyphSacEffects.isUnlocked) return DC.E300;\r\n return DC.E100;\r\n },\r\n\r\n get logTotalSacrifice() {\r\n // We check elsewhere for this equalling zero to determine if the player has ever sacrificed. Technically this\r\n // should check for -Infinity, but the clampMin works in practice because the minimum possible sacrifice\r\n // value is greater than 1 for even the weakest possible glyph\r\n return BASIC_GLYPH_TYPES.reduce(\r\n (tot, type) => tot + Decimal.log10(player.reality.glyphs.sac[type].clampMin(1)), 0);\r\n },\r\n get canSacrifice() {\r\n return RealityUpgrade(19).isBought;\r\n },\r\n get isRefining() {\r\n return Ra.unlocks.unlockGlyphAlchemy.canBeApplied && AutoGlyphProcessor.sacMode !== AUTO_GLYPH_REJECT.SACRIFICE;\r\n },\r\n handleSpecialGlyphTypes(glyph) {\r\n switch (glyph.type) {\r\n case \"companion\":\r\n Modal.deleteCompanion.show();\r\n return true;\r\n case \"cursed\":\r\n Glyphs.removeFromInventory(glyph);\r\n return true;\r\n case \"amalgam\":\r\n Glyphs.removeFromInventory(glyph);\r\n return true;\r\n }\r\n return false;\r\n },\r\n // Removes a glyph, accounting for sacrifice unlock and alchemy state\r\n removeGlyph(glyph, force = false) {\r\n if (this.handleSpecialGlyphTypes(glyph)) return;\r\n if (!this.canSacrifice) this.deleteGlyph(glyph, force);\r\n else if (this.isRefining) this.attemptRefineGlyph(glyph, force);\r\n else this.sacrificeGlyph(glyph, force);\r\n },\r\n deleteGlyph(glyph, force) {\r\n if (force || !player.options.confirmations.glyphSacrifice) Glyphs.removeFromInventory(glyph);\r\n else Modal.glyphDelete.show({ idx: glyph.idx });\r\n },\r\n glyphSacrificeGain(glyph) {\r\n if (!this.canSacrifice || Pelle.isDoomed) return DC.D0;\r\n if (glyph.type === \"reality\") return new Decimal(0.01 * glyph.level * Achievement(171).effectOrDefault(1));\r\n const pre10kFactor = Decimal.pow(Decimal.clampMax(glyph.level, 10000).add(10), 2.5);\r\n const post10kFactor = Decimal.clampMin(glyph.level - 10000, 0).div(100).add(1);\r\n const power = Ra.unlocks.maxGlyphRarityAndShardSacrificeBoost.effectOrDefault(1);\r\n return Decimal.pow(pre10kFactor.mul(post10kFactor).mul(glyph.strength)\r\n .mul(Teresa.runRewardMultiplier).mul(Achievement(171).effectOrDefault(1)), power);\r\n },\r\n sacrificeGlyph(glyph, force = false) {\r\n if (Pelle.isDoomed) return;\r\n // This also needs to be here because this method is called directly from drag-and-drop sacrificing\r\n if (this.handleSpecialGlyphTypes(glyph)) return;\r\n const toGain = this.glyphSacrificeGain(glyph);\r\n const askConfirmation = !force && player.options.confirmations.glyphSacrifice;\r\n if (askConfirmation) {\r\n Modal.glyphSacrifice.show({ idx: glyph.idx, gain: toGain });\r\n return;\r\n }\r\n if (player.reality.glyphs.sac[glyph.type].gte(DC.E300)){\r\n player.reality.glyphs.sac[glyph.type] = DC.E300;\r\n }\r\n player.reality.glyphs.sac[glyph.type] = player.reality.glyphs.sac[glyph.type].add(toGain).clampMax(DC.E300);\r\n GameCache.logTotalGlyphSacrifice.invalidate();\r\n Glyphs.removeFromInventory(glyph);\r\n EventHub.dispatch(GAME_EVENT.GLYPH_SACRIFICED, glyph);\r\n },\r\n glyphAlchemyResource(glyph) {\r\n const type = GlyphTypes[glyph.type];\r\n return AlchemyResources.all[type.alchemyResource];\r\n },\r\n // Scaling function to make refinement value ramp up with higher glyph levels\r\n levelRefinementValue(level) {\r\n return Math.pow(level, 3) / 1e8;\r\n },\r\n // Refined glyphs give this proportion of their maximum attainable value from their level\r\n glyphRefinementEfficiency: 0.05,\r\n glyphRawRefinementGain(glyph) {\r\n if (!Ra.unlocks.unlockGlyphAlchemy.canBeApplied) return 0;\r\n const glyphMaxValue = this.levelRefinementValue(glyph.level);\r\n const rarityModifier = strengthToRarity(glyph.strength) / 100;\r\n return this.glyphRefinementEfficiency * glyphMaxValue * rarityModifier;\r\n },\r\n glyphRefinementGain(glyph) {\r\n if (!Ra.unlocks.unlockGlyphAlchemy.canBeApplied || !generatedTypes.includes(glyph.type)) return 0;\r\n const resource = this.glyphAlchemyResource(glyph);\r\n if (!resource.isUnlocked) return 0;\r\n const glyphActualValue = this.glyphRawRefinementGain(glyph);\r\n if (resource.cap === 0) return glyphActualValue;\r\n const amountUntilCap = this.glyphEffectiveCap(glyph) - resource.amount;\r\n return Math.clamp(amountUntilCap, 0, glyphActualValue);\r\n },\r\n // The glyph that is being refined can increase the cap, which means the effective cap\r\n // will be the current resource cap or the cap after this glyph is refined, whichever is higher.\r\n glyphEffectiveCap(glyph) {\r\n const resource = this.glyphAlchemyResource(glyph);\r\n const currentCap = resource.cap;\r\n const capAfterRefinement = this.highestRefinementValue(glyph);\r\n const higherCap = Math.clampMin(currentCap, capAfterRefinement);\r\n return Math.clampMax(higherCap, Ra.alchemyResourceCap);\r\n },\r\n highestRefinementValue(glyph) {\r\n return this.glyphRawRefinementGain(glyph) / this.glyphRefinementEfficiency;\r\n },\r\n attemptRefineGlyph(glyph, force) {\r\n if (glyph.type === \"reality\") return;\r\n if (glyph.type === \"amalgam\") return;\r\n if (glyph.type === \"cursed\") {\r\n Glyphs.removeFromInventory(glyph);\r\n return;\r\n }\r\n const decoherence = AlchemyResource.decoherence.isUnlocked;\r\n if (!Ra.unlocks.unlockGlyphAlchemy.canBeApplied ||\r\n (this.glyphRefinementGain(glyph) === 0 && !decoherence) ||\r\n (decoherence && AlchemyResources.base.every(x => x.data.amount >= Ra.alchemyResourceCap))) {\r\n this.sacrificeGlyph(glyph, force);\r\n return;\r\n }\r\n\r\n if (!player.options.confirmations.glyphRefine || force) {\r\n this.refineGlyph(glyph);\r\n return;\r\n }\r\n const resource = this.glyphAlchemyResource(glyph);\r\n Modal.glyphRefine.show({\r\n idx: glyph.idx,\r\n resourceName: resource.name,\r\n resourceAmount: resource.amount,\r\n gain: this.glyphRefinementGain(glyph),\r\n cap: resource.cap\r\n });\r\n\r\n },\r\n refineGlyph(glyph) {\r\n if (Pelle.isDoomed) return;\r\n const resource = this.glyphAlchemyResource(glyph);\r\n // This technically completely trashes the glyph for no rewards if not unlocked, but this will only happen ever\r\n // if the player specificially tries to do so (in which case they're made aware that it's useless) or if the\r\n // Reality choices contain *only* locked glyph choices. That's a rare enough edge case that I think it's okay\r\n // to just delete it instead of complicating the program flow more than it already is by attempting sacrifice.\r\n if (!resource.isUnlocked) {\r\n Glyphs.removeFromInventory(glyph);\r\n return;\r\n }\r\n const rawRefinementGain = this.glyphRawRefinementGain(glyph);\r\n const refinementGain = this.glyphRefinementGain(glyph);\r\n resource.amount += refinementGain;\r\n const decoherenceGain = rawRefinementGain * AlchemyResource.decoherence.effectValue;\r\n for (const glyphTypeName of ALCHEMY_BASIC_GLYPH_TYPES) {\r\n if (glyphTypeName !== glyph.type) {\r\n const glyphType = GlyphTypes[glyphTypeName];\r\n const otherResource = AlchemyResources.all[glyphType.alchemyResource];\r\n const maxResource = Math.max(otherResource.cap, otherResource.amount);\r\n otherResource.amount = Math.clampMax(otherResource.amount + decoherenceGain, maxResource);\r\n }\r\n }\r\n if (resource.isBaseResource) {\r\n resource.highestRefinementValue = this.highestRefinementValue(glyph);\r\n }\r\n Glyphs.removeFromInventory(glyph);\r\n }\r\n};\r\n","import { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\n\r\nexport const AutoGlyphProcessor = {\r\n get scoreMode() {\r\n return player.reality.glyphs.filter.select;\r\n },\r\n set scoreMode(value) {\r\n player.reality.glyphs.filter.select = value;\r\n },\r\n get sacMode() {\r\n return player.reality.glyphs.filter.trash;\r\n },\r\n set sacMode(value) {\r\n player.reality.glyphs.filter.trash = value;\r\n },\r\n get types() {\r\n return player.reality.glyphs.filter.types;\r\n },\r\n // This exists to avoid unnecessary repeated object initialization in the filtering code\r\n bitmaskIndexOffset(type) {\r\n switch (type) {\r\n case \"time\":\r\n case \"amalgam\":\r\n return 0;\r\n case \"dilation\":\r\n return 4;\r\n case \"replication\":\r\n return 8;\r\n case \"infinity\":\r\n return 12;\r\n case \"power\":\r\n return 16;\r\n case \"effarig\":\r\n return 20;\r\n default:\r\n throw new Error(\"Unknown glyph type mode in bitmaskIndexOffset\");\r\n }\r\n },\r\n // This function is meant to be something which assigns a value to every glyph, with the assumption that\r\n // higher numbers correspond to better glyphs. This value is also displayed on tooltips when it depends\r\n // on only the glyph itself and not external factors.\r\n filterValue(glyph) {\r\n const typeCfg = this.types[glyph.type];\r\n if ([\"companion\", \"reality\"].includes(glyph.type)) return Infinity;\r\n if (glyph.type === \"cursed\" || this.type === \"amalgam\") return -Infinity;\r\n switch (this.scoreMode) {\r\n case AUTO_GLYPH_SCORE.LOWEST_SACRIFICE:\r\n // Picked glyphs are never kept in this mode. Sacrifice cap needs to be checked since effarig caps\r\n // at a lower value than the others and we don't want to uselessly pick that to sacrifice all the time\r\n return player.reality.glyphs.sac[glyph.type].gte(GlyphSacrifice[glyph.type].cap)\r\n ? -Infinity\r\n : player.reality.glyphs.sac[glyph.type].neg().toNumber();\r\n case AUTO_GLYPH_SCORE.EFFECT_COUNT:\r\n // Effect count, plus a very small rarity term to break ties in favor of rarer glyphs\r\n return strengthToRarity(glyph.strength) / 1000 + getGlyphEffectsFromBitmask(glyph.effects, 0, 0)\r\n .filter(effect => effect.isGenerated).length;\r\n case AUTO_GLYPH_SCORE.RARITY_THRESHOLD:\r\n return strengthToRarity(glyph.strength);\r\n case AUTO_GLYPH_SCORE.SPECIFIED_EFFECT: {\r\n // Value is equal to rarity but minus 200 for each missing effect. This makes all glyphs which don't\r\n // satisfy the requirements have a negative score and generally the worse a glyph misses the requirements,\r\n // the more negative of a score it will have\r\n const glyphEffectCount = countValuesFromBitmask(glyph.effects);\r\n if (glyphEffectCount < typeCfg.effectCount) {\r\n return strengthToRarity(glyph.strength) - 200 * (typeCfg.effectCount - glyphEffectCount);\r\n }\r\n // The missing effect count can be gotten by taking the full filter bitmask, removing only the bits which are\r\n // present on both the filter and the glyph, and then counting the bits up\r\n const missingEffects = countValuesFromBitmask(typeCfg.specifiedMask - (typeCfg.specifiedMask & glyph.effects));\r\n return strengthToRarity(glyph.strength) - 200 * missingEffects;\r\n }\r\n case AUTO_GLYPH_SCORE.EFFECT_SCORE: {\r\n const effectList = getGlyphEffectsFromBitmask(glyph.effects, 0, 0)\r\n .filter(effect => effect.isGenerated)\r\n .map(effect => effect.bitmaskIndex);\r\n const offset = this.bitmaskIndexOffset(glyph.type);\r\n // This ternary check is required to filter out any effects which may appear on the glyph which aren't normally\r\n // there in typical glyph generation. Ra-Nameless 25 is the only case where this happens, but this also has the\r\n // side-effect of making altered glyph generation in mods less likely to crash the game as well\r\n const effectScore = effectList\r\n .map(e => (typeCfg.effectScores[e - offset] ? typeCfg.effectScores[e - offset] : 0))\r\n .sum();\r\n return strengthToRarity(glyph.strength) + effectScore;\r\n }\r\n // Picked glyphs are never kept in Alchemy modes.\r\n // Glyphs for non-unlocked or capped Alchemy Resources are assigned NEGATIVE_INFINITY\r\n // to make them picked last, because we can't refine them.\r\n case AUTO_GLYPH_SCORE.LOWEST_ALCHEMY: {\r\n const resource = AlchemyResource[glyph.type];\r\n const refinementGain = GlyphSacrificeHandler.glyphRefinementGain(glyph);\r\n return resource.isUnlocked && refinementGain > 0\r\n ? -resource.amount\r\n : Number.NEGATIVE_INFINITY;\r\n }\r\n case AUTO_GLYPH_SCORE.ALCHEMY_VALUE:\r\n return AlchemyResource[glyph.type].isUnlocked\r\n ? GlyphSacrificeHandler.glyphRefinementGain(glyph)\r\n : Number.NEGATIVE_INFINITY;\r\n case AUTO_GLYPH_SCORE.ANY:\r\n return Number.MAX_VALUE\r\n default:\r\n throw new Error(\"Unknown glyph score mode in score assignment\");\r\n }\r\n },\r\n // This is a mode-specific threshold which determines if selected glyphs are \"good enough\" to keep\r\n thresholdValue(glyph) {\r\n // Glyph filter settings are undefined for companion/cursed/reality glyphs, so we return the lowest possible\r\n // value on the basis that we never want to automatically get rid of them\r\n if (this.types[glyph.type] === undefined) return -Number.MAX_VALUE;\r\n switch (this.scoreMode) {\r\n case AUTO_GLYPH_SCORE.EFFECT_COUNT:\r\n return player.reality.glyphs.filter.simple;\r\n case AUTO_GLYPH_SCORE.RARITY_THRESHOLD:\r\n case AUTO_GLYPH_SCORE.SPECIFIED_EFFECT:\r\n return this.types[glyph.type].rarity;\r\n case AUTO_GLYPH_SCORE.EFFECT_SCORE:\r\n return this.types[glyph.type].score;\r\n case AUTO_GLYPH_SCORE.ANY:\r\n return -Number.MAX_VALUE\r\n case AUTO_GLYPH_SCORE.LOWEST_SACRIFICE:\r\n case AUTO_GLYPH_SCORE.LOWEST_ALCHEMY:\r\n case AUTO_GLYPH_SCORE.ALCHEMY_VALUE:\r\n // These modes never keep glyphs and always refine/sacrfice\r\n return Number.MAX_VALUE;\r\n default:\r\n throw new Error(\"Unknown glyph score mode in threshold check\");\r\n }\r\n },\r\n wouldKeep(glyph) {\r\n return this.filterValue(glyph) >= this.thresholdValue(glyph);\r\n },\r\n // Given a list of glyphs, pick the one with the highest score\r\n pick(glyphs) {\r\n // We want to make sure to account for when glyphs are compared to different thresholds based on their type, or\r\n // else we end up always picking the rarest glyph despite all filter settings. However, we need to special-case\r\n // modes which never keep glyphs, or else they all become the same value and it ends up picking pseudo-randomly\r\n const glyphScore = glyph => {\r\n const filter = this.filterValue(glyph);\r\n const threshold = this.thresholdValue(glyph);\r\n return threshold === Number.MAX_VALUE ? filter : filter - threshold;\r\n };\r\n\r\n return glyphs\r\n .map(g => ({ glyph: g, score: glyphScore(g) }))\r\n .reduce((x, y) => (x.score > y.score ? x : y))\r\n .glyph;\r\n },\r\n getRidOfGlyph(glyph) {\r\n // Auto clean calls this function too, which chokes without a special case for these types\r\n if (glyph.type === \"cursed\" || glyph.type === \"companion\" || glyph.type === \"amalgam\") {\r\n GlyphSacrificeHandler.deleteGlyph(glyph, true);\r\n return;\r\n }\r\n\r\n switch (this.sacMode) {\r\n case AUTO_GLYPH_REJECT.SACRIFICE:\r\n GlyphSacrificeHandler.sacrificeGlyph(glyph, true);\r\n break;\r\n case AUTO_GLYPH_REJECT.REFINE:\r\n GlyphSacrificeHandler.attemptRefineGlyph(glyph, true);\r\n break;\r\n case AUTO_GLYPH_REJECT.REFINE_TO_CAP:\r\n if (GlyphSacrificeHandler.glyphRefinementGain(glyph) === 0) GlyphSacrificeHandler.sacrificeGlyph(glyph, true);\r\n else GlyphSacrificeHandler.attemptRefineGlyph(glyph, true);\r\n break;\r\n default:\r\n throw new Error(\"Unknown auto Glyph Sacrifice mode\");\r\n }\r\n },\r\n // Generally only used for UI in order to notify the player that they might end up retroactively getting rid of\r\n // some glyphs they otherwise want to keep\r\n hasNegativeEffectScore() {\r\n return this.scoreMode === AUTO_GLYPH_SCORE.EFFECT_SCORE &&\r\n Object.values(this.types).map(t => t.effectScores.min()).min() < 0;\r\n },\r\n\r\n // These are here because they're used in multiple UI components\r\n filterModeName(id) {\r\n switch (id) {\r\n case AUTO_GLYPH_SCORE.LOWEST_SACRIFICE:\r\n return \"Lowest Total Glyph Sacrifice\";\r\n case AUTO_GLYPH_SCORE.EFFECT_COUNT:\r\n return \"Number of Effects\";\r\n case AUTO_GLYPH_SCORE.RARITY_THRESHOLD:\r\n return \"Rarity Threshold\";\r\n case AUTO_GLYPH_SCORE.SPECIFIED_EFFECT:\r\n return \"Specified Effect\";\r\n case AUTO_GLYPH_SCORE.EFFECT_SCORE:\r\n return \"Effect Score\";\r\n case AUTO_GLYPH_SCORE.LOWEST_ALCHEMY:\r\n return \"Lowest Alchemy Resource\";\r\n case AUTO_GLYPH_SCORE.ALCHEMY_VALUE:\r\n return \"Refinement Value\";\r\n case AUTO_GLYPH_SCORE.ANY:\r\n return \"Random Glyph\"\r\n default:\r\n return \"Invalid Glyph filter mode\";\r\n }\r\n },\r\n trashModeDesc(id) {\r\n switch (id) {\r\n case AUTO_GLYPH_REJECT.SACRIFICE:\r\n return \"Always sacrifice\";\r\n case AUTO_GLYPH_REJECT.REFINE:\r\n return \"Always refine\";\r\n case AUTO_GLYPH_REJECT.REFINE_TO_CAP:\r\n return \"Refine to cap, then sacrifice\";\r\n default:\r\n return \"Invalid Glyph trash mode\";\r\n }\r\n }\r\n};\r\n\r\nexport function autoAdjustGlyphWeights() {\r\n const sources = getGlyphLevelSources();\r\n const f = x => Math.pow(Math.clampMin(1, Math.log(5 * x)), 3 / 2);\r\n const totalWeight = Object.values(sources).map(s => f(s.value)).sum();\r\n const scaledWeight = key => 100 * f(sources[key].value) / totalWeight;\r\n\r\n // Adjust all weights to be integer, while maintaining that they must sum to 100. We ensure it's within 1 on the\r\n // weights by flooring and then taking guesses on which ones would give the largest boost when adding the lost\r\n // amounts. This isn't necessarily the best integer weighting, but gives a result that's quite literally within\r\n // 99.97% of the non-integer optimal settings and prevents the total from exceeding 100.\r\n const weightKeys = [\"ep\", \"repl\", \"dt\", \"eternities\"];\r\n const weights = [];\r\n for (const key of weightKeys) {\r\n weights.push({\r\n key,\r\n percent: scaledWeight(key)\r\n });\r\n }\r\n const fracPart = x => x - Math.floor(x);\r\n const priority = weights.sort((a, b) => fracPart(b.percent) - fracPart(a.percent)).map(w => w.key);\r\n const missingPercent = 100 - weights.map(w => Math.floor(w.percent)).reduce((a, b) => a + b);\r\n for (let i = 0; i < weightKeys.length; i++) {\r\n const key = priority[i];\r\n player.celestials.effarig.glyphWeights[key] = Math.floor(scaledWeight(key)) + (i < missingPercent ? 1 : 0);\r\n }\r\n}\r\n\r\nfunction getGlyphLevelSources() {\r\n // Glyph levels are the product of 3 or 4 sources (eternities are enabled via upgrade).\r\n // Once Effarig is unlocked, these contributions can be adjusted; the math is described in detail\r\n // in getGlyphLevelInputs. These *Base values are the nominal inputs, as they would be multiplied without Effarig\r\n let eternityPoints = Player.canEternity\r\n ? Currency.eternityPoints.value.plus(gainedEternityPoints())\r\n : Currency.eternityPoints.value;\r\n eternityPoints = Decimal.max(player.records.thisReality.maxEP, eternityPoints);\r\n const epCoeff = 0.016;\r\n const epBase = Math.pow(Math.max(1, eternityPoints.pLog10()), 0.5) * epCoeff;\r\n const replPow = 0.4 + getAdjustedGlyphEffect(\"replicationglyphlevel\");\r\n const replCoeff = 0.025;\r\n const replBase = Math.pow(Math.max(1, player.records.thisReality.maxReplicanti.log10()), replPow) * replCoeff;\r\n const dtPow = 1.3 + getAdjustedGlyphEffect(\"realityDTglyph\");\r\n const dtCoeff = 0.025;\r\n const dtBase = Math.pow(Math.max(1, player.records.thisReality.maxDT.pLog10()), dtPow) * dtCoeff;\r\n const eterBase = Effects.max(1, RealityUpgrade(18));\r\n return {\r\n ep: {\r\n name: \"EP\",\r\n value: epBase,\r\n coeff: epCoeff,\r\n exp: 0.5,\r\n },\r\n repl: {\r\n name: \"Replicanti\",\r\n value: replBase,\r\n coeff: replCoeff,\r\n exp: replPow,\r\n },\r\n dt: {\r\n name: \"DT\",\r\n value: dtBase,\r\n coeff: dtCoeff,\r\n exp: dtPow,\r\n },\r\n eternities: {\r\n name: \"Eternities\",\r\n value: eterBase,\r\n // These are copied from Reality Upgrade 18's gameDB entry\r\n coeff: 0.45,\r\n exp: 0.5,\r\n }\r\n };\r\n}\r\n\r\nexport function getGlyphLevelInputs() {\r\n const sources = getGlyphLevelSources();\r\n const staticFactors = GameCache.staticGlyphWeights.value;\r\n // If the nomial blend of inputs is a * b * c * d, then the contribution can be tuend by\r\n // changing the exponents on the terms: aⁿ¹ * bⁿ² * cⁿ³ * dⁿ⁴\r\n // If n1..n4 just add up to 4, then the optimal strategy is to just max out the one over the\r\n // largest term -- so probably replicants, So, instead of using the weights directly, a\r\n // function of the weights is used: n_i = (4 w_i)^blendExp; put differently, the exponents\r\n // don't add up to 4, but their powers do (for blendExp = 1/3, the cubes of the exponents sum to\r\n // 4.\r\n // The optimal weights, given a blendExp, are proportional to log(x)^(1/(1- blendExp))\r\n const blendExp = 1 / 3;\r\n // Besides adding an exponent to a, b, c, and d, we can also scale them before exponentiation.\r\n // So, we'd have (s a)ⁿ¹ * (s b)ⁿ² * (s c)ⁿ³ * (s d)ⁿ⁴\r\n // Then, we can divide the result by s⁴; this does nothing for even weights\r\n // This can reduce the effect that Effarig can have; consider the following examples:\r\n // Inputs : 100, 1, 1, 1. Nominal result : 100\r\n // blendExp = 1/3; optimal weights: 1, 0, 0, 0; result = 1493\r\n // Scaling by 100: 10000, 100, 100, 100\r\n // optimal weights: 0.485, 0.17, 0.17, 0.17; result = 191.5\r\n // The degree of this effect depends on the scale of the inputs:\r\n // Inputs: 1000, 1, 1, 1. Nominal result: 1000\r\n // optimal weights: 1, 0, 0, 0; result = 57836\r\n // Scaling by 100: 100000, 100, 100, 100\r\n // optimal weights: 0.57, 0.14, 0.14, 0.14; result = 3675\r\n // Scaling does allow the user to produce results less than 1\r\n // 100000, 100, 100, 100 with weights of 0, 1, 0, 0 results in 1.49e-5\r\n // For display purposes, each term is divided independently by s.\r\n const preScale = 5;\r\n const weights = player.celestials.effarig.glyphWeights;\r\n const adjustFactor = (source, weight) => {\r\n const input = source.value;\r\n const powEffect = Math.pow(4 * weight, blendExp);\r\n source.value = (input > 0 ? Math.pow(input * preScale, powEffect) / preScale : 0);\r\n source.coeff = Math.pow(preScale, powEffect - 1) * Math.pow(source.coeff, powEffect);\r\n source.exp *= powEffect;\r\n };\r\n adjustFactor(sources.ep, weights.ep / 100);\r\n adjustFactor(sources.repl, weights.repl / 100);\r\n adjustFactor(sources.dt, weights.dt / 100);\r\n adjustFactor(sources.eternities, weights.eternities / 100);\r\n const shardFactor = Ra.unlocks.relicShardGlyphLevelBoost.effectOrDefault(0);\r\n let baseLevel = sources.ep.value * sources.repl.value * sources.dt.value * sources.eternities.value *\r\n staticFactors.perkShop + shardFactor;\r\n\r\n const singularityEffect = SingularityMilestone.glyphLevelFromSingularities.effectOrDefault(1);\r\n baseLevel *= singularityEffect;\r\n\r\n let scaledLevel = baseLevel;\r\n // The softcap starts at begin and rate determines how quickly level scales after the cap, turning a linear pre-cap\r\n // increase to a quadratic post-cap increase with twice the scaling. For example, with begin = 1000 and rate = 400:\r\n // - Scaled level 1400 requires +800 more base levels from the start of the cap (ie. level 1800)\r\n // - Scaled level 1800 requires +1600 more base levels from scaled 1400 (ie. level 3400)\r\n // - Each additional 400 scaled requires another +800 on top of the already-existing gap for base\r\n // This is applied twice in a stacking way, using regular instability first and then again with hyperinstability\r\n // if the newly reduced level is still above the second threshold\r\n const instabilitySoftcap = (level, begin, rate) => {\r\n if (level < begin) return level;\r\n const excess = (level - begin) / rate;\r\n return begin + 0.5 * rate * (Math.sqrt(1 + 4 * excess) - 1);\r\n };\r\n const ultraInstabilitySoftcap = (level, begin, rate) =>{\r\n if (level < begin)return level;\r\n return Math.pow(rate, Math.log10(level - begin)) + begin;\r\n };\r\n const omegaInstabilitySoftcap = (level, begin, rate) => {\r\n if (level < begin)return level;\r\n return Math.pow(rate, Math.log10(Math.log10(level - begin))) + begin;\r\n }\r\n scaledLevel = instabilitySoftcap(scaledLevel, staticFactors.instability, 500);\r\n scaledLevel = instabilitySoftcap(scaledLevel, staticFactors.hyperInstability, 400);\r\n scaledLevel = ultraInstabilitySoftcap(scaledLevel, staticFactors.ultraInstability, 5);\r\n scaledLevel = omegaInstabilitySoftcap(scaledLevel, staticFactors.omegaInstability, (Ra.unlocks.omegaScalingBuff.isUnlocked ? 15 : 20));\r\n const scalePenalty = scaledLevel > 0 ? baseLevel / scaledLevel : 1;\r\n const incAfterInstability = staticFactors.realityUpgrades + staticFactors.achievements;\r\n scaledLevel = Math.min(1000000, scaledLevel);\r\n baseLevel += incAfterInstability;\r\n scaledLevel += incAfterInstability;\r\n if (Achievement(193).isUnlocked){\r\n scaledLevel *= 1.0808;\r\n }\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n scaledLevel = Math.pow(scaledLevel,corruptionPenalties.compGlyphs.level[player.mending.corruption[4]]);\r\n scaledLevel *= (corruptionPenalties.compGlyphs.level[player.mending.corruption[4]]);\r\n scaledLevel = Math.ceil(Math.max(1,scaledLevel));\r\n };\r\n return {\r\n ep: sources.ep,\r\n repl: sources.repl,\r\n dt: sources.dt,\r\n eter: sources.eternities,\r\n perkShop: staticFactors.perkShop,\r\n scalePenalty,\r\n rowFactor: staticFactors.realityUpgrades,\r\n achievementFactor: staticFactors.achievements,\r\n shardFactor,\r\n singularityEffect,\r\n rawLevel: baseLevel,\r\n actualLevel: Math.max(1, scaledLevel),\r\n };\r\n}\r\n\r\n// Calculates glyph weights which don't change over the course of a reality unless particular events occur; this is\r\n// stored in the GameCache and only invalidated as needed\r\nexport function staticGlyphWeights() {\r\n const perkShop = Effects.max(1, PerkShopUpgrade.glyphLevel);\r\n const instability = Glyphs.instabilityThreshold;\r\n const hyperInstability = Glyphs.hyperInstabilityThreshold;\r\n const ultraInstability = Glyphs.ultraInstabilityThreshold;\r\n const omegaInstability = Glyphs.omegaInstabilityThreshold;\r\n const hardcap = Glyphs.hardcap;\r\n const realityUpgrades = [Array.range(1, 5).every(x => RealityUpgrade(x).boughtAmount > 0)]\r\n .concat(Array.range(1, 4).map(x => Array.range(1, 5).every(y => RealityUpgrade(5 * x + y).isBought)))\r\n .filter(x => x)\r\n .length;\r\n const achievements = Effects.sum(Achievement(148), Achievement(166));\r\n return {\r\n perkShop,\r\n instability,\r\n hyperInstability,\r\n ultraInstability,\r\n omegaInstability,\r\n hardcap,\r\n realityUpgrades,\r\n achievements\r\n };\r\n}\r\n","import { PlayerProgress } from \"./player-progress\";\r\n\r\nexport const DeltaTimeState = {\r\n deltaTime: new TimeSpan(new Decimal(0)),\r\n unscaledDeltaTime: new TimeSpan(new Decimal(0)),\r\n update(deltaTime, gameDeltaTime) {\r\n this.unscaledDeltaTime = TimeSpan.fromMilliseconds(deltaTime);\r\n this.deltaTime = TimeSpan.fromMilliseconds(gameDeltaTime);\r\n }\r\n};\r\n\r\nexport const Time = {\r\n /**\r\n * @param {Function} getValue\r\n * @returns {TimeSpan}\r\n */\r\n fromMilliseconds(getValue) {\r\n return TimeSpan.fromMilliseconds(getValue());\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n * @param {Function} setValue\r\n */\r\n toMilliseconds(timespan, setValue) {\r\n Guard.isTimeSpan(timespan);\r\n setValue(timespan.totalMilliseconds);\r\n },\r\n /**\r\n * Returns a string indicating the current date and time of day, as indicated by a Date.now() timestamp. After\r\n * regex formatting, this gives a string resembling \"[month] [day] [year] HH:MM:SS\"\r\n * @param {number} timestamp\r\n * @returns {string}\r\n */\r\n toDateTimeString(timestamp) {\r\n return new Date(timestamp).toString().replace(/^.{4}(.*:..:..).*$/u, \"$1\");\r\n },\r\n\r\n /**\r\n * Frame delta time\r\n * @returns {TimeSpan}\r\n */\r\n get deltaTimeFull() {\r\n return DeltaTimeState.deltaTime;\r\n },\r\n /**\r\n * Frame delta time in seconds\r\n * @returns {number}\r\n */\r\n get deltaTime() {\r\n return this.deltaTimeFull.totalSeconds;\r\n },\r\n /**\r\n * Frame delta time in ms\r\n * @returns {number}\r\n */\r\n get deltaTimeMs() {\r\n return this.deltaTimeFull.totalMilliseconds;\r\n },\r\n /**\r\n * Frame delta time, but without EC12 or black hole effects\r\n * @returns {TimeSpan}\r\n */\r\n get unscaledDeltaTime() {\r\n return DeltaTimeState.unscaledDeltaTime;\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get totalTimePlayed() {\r\n return this.fromMilliseconds(() => player.records.totalTimePlayed);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set totalTimePlayed(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.totalTimePlayed = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get timeSinceBlackHole() {\r\n return this.fromMilliseconds(() => {\r\n let diff = player.records.totalTimePlayed.minus(player.records.timePlayedAtBHUnlock);\r\n if(PlayerProgress.mendingUnlocked()){\r\n diff = player.records.thisMend.time.minus(player.records.timePlayedAtBHUnlock);\r\n }\r\n return Decimal.max(0, diff);\r\n });\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get realTimeDoomed() {\r\n return this.fromMilliseconds(() => player.records.realTimeDoomed);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set realTimeDoomed(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.realTimeDoomed = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get realTimePlayed() {\r\n return this.fromMilliseconds(() => player.records.realTimePlayed);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set realTimePlayed(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.realTimePlayed = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisInfinity() {\r\n return this.fromMilliseconds(() => player.records.thisInfinity.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisInfinity(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisInfinity.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisInfinityRealTime() {\r\n return this.fromMilliseconds(() => player.records.thisInfinity.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisInfinityRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisInfinity.realTime = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestInfinity() {\r\n return this.fromMilliseconds(() => player.records.bestInfinity.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestInfinity(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestInfinity.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestInfinityRealTime() {\r\n return this.fromMilliseconds(() => player.records.bestInfinity.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestInfinityRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestInfinity.realTime = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisEternity() {\r\n return this.fromMilliseconds(() => player.records.thisEternity.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisEternity(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisEternity.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisEternityRealTime() {\r\n return this.fromMilliseconds(() => player.records.thisEternity.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisEternityRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisEternity.realTime = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestEternity() {\r\n return this.fromMilliseconds(() => player.records.bestEternity.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestEternity(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestEternity.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestEternityRealTime() {\r\n return this.fromMilliseconds(() => player.records.bestEternity.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestEternityRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestEternity.realTime = value);\r\n },\r\n\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisReality() {\r\n return this.fromMilliseconds(() => player.records.thisReality.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisReality(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisReality.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisRealityRealTime() {\r\n return this.fromMilliseconds(() => player.records.thisReality.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisRealityRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisReality.realTime = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestReality() {\r\n return this.fromMilliseconds(() => player.records.bestReality.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestReality(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestReality.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestRealityRealTime() {\r\n return this.fromMilliseconds(() => player.records.bestReality.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestRealityRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestReality.realTime = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestMend() {\r\n return this.fromMilliseconds(() => player.records.bestMend.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestMend(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestMend.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestMendRealTime() {\r\n return this.fromMilliseconds(() => player.records.bestMend.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestMendRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestMend.realTime = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisMend() {\r\n return this.fromMilliseconds(() => player.records.thisMend.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisMend(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisMend.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisMendRealTime() {\r\n return this.fromMilliseconds(() => player.records.thisMend.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisMendRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisMend.realTime = value);\r\n },\r\n\r\n /**\r\n * @return {TimeSpan}\r\n */\r\n get worstChallenge() {\r\n return this.fromMilliseconds(() => GameCache.worstChallengeTime.value);\r\n },\r\n\r\n /**\r\n * @return {TimeSpan}\r\n */\r\n get challengeSum() {\r\n return this.fromMilliseconds(() => GameCache.challengeTimeSum.value);\r\n },\r\n\r\n /**\r\n * @return {TimeSpan}\r\n */\r\n get infinityChallengeSum() {\r\n return this.fromMilliseconds(() => GameCache.infinityChallengeTimeSum.value);\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { Effects } from \"./game-mechanics/effects\";\r\nimport { CorruptionUpgrade, Ra, V } from \"./globals\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nexport function effectiveBaseGalaxies() {\r\n // Note that this already includes the \"50% more\" active path effect\r\n let replicantiGalaxies = Replicanti.galaxies.bought;\r\n replicantiGalaxies *= (1 + Effects.sum(\r\n TimeStudy(132),\r\n TimeStudy(133)\r\n ));\r\n // \"extra\" galaxies unaffected by the passive/idle boosts come from studies 225/226 and Effarig Infinity\r\n replicantiGalaxies += Replicanti.galaxies.extra;\r\n const nonActivePathReplicantiGalaxies = Math.min(Replicanti.galaxies.bought,\r\n ReplicantiUpgrade.galaxies.value);\r\n // Effects.sum is intentional here - if EC8 is not completed,\r\n // this value should not be contributed to total replicanti galaxies\r\n if(EternityChallenge(8).completions >= 1){\r\n replicantiGalaxies += nonActivePathReplicantiGalaxies * EternityChallenge(8).reward.effectValue;\r\n if(Ra.unlocks.improvedECRewards.isUnlocked && !Pelle.isDoomed) replicantiGalaxies += nonActivePathReplicantiGalaxies * EternityChallenge(8).vReward.effectValue;\r\n }\r\n let freeGalaxies = player.dilation.totalTachyonGalaxies;\r\n freeGalaxies *= 1 + Math.max(0, Replicanti.amount.log10() / 1e6) * AlchemyResource.alternation.effectValue;\r\n let x = player.galaxies;\r\n let y = GalaxyGenerator.galaxies;\r\n if(Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(8).completions >= 1 && !Pelle.isDoomed){\r\n freeGalaxies *= 1 + EternityChallenge(8).vReward.effectValue;\r\n x *= 1 + EternityChallenge(8).vReward.effectValue;\r\n y *= 1 + EternityChallenge(8).vReward.effectValue;\r\n }\r\n let v = player.galBoostPoints.eq(0) ? 1 : /*(player.galBoostPoints.pow(1/(player.galBoostPoints.log10() ** 0.8))).div(100).add(1).toNumber()*/ MultiversalDimension(1).galaxyBoost\r\n return (Math.max(x + y + replicantiGalaxies + freeGalaxies, 0) * v);\r\n}\r\n\r\nexport function getTickSpeedMultiplier() {\r\n if (InfinityChallenge(3).isRunning) return DC.D1;\r\n if (Ra.isRunning) return DC.C1D1_1245;\r\n let galaxies = effectiveBaseGalaxies();\r\n const effects = Effects.product(\r\n InfinityUpgrade.galaxyBoost,\r\n InfinityUpgrade.galaxyBoost.chargedEffect,\r\n BreakInfinityUpgrade.galaxyBoost,\r\n BreakInfinityUpgrade.galaxyBoost.chargedEffect,\r\n TimeStudy(212),\r\n TimeStudy(232),\r\n TimeStudy(401),\r\n Achievement(86),\r\n Achievement(178),\r\n InfinityChallenge(5).reward,\r\n PelleUpgrade.galaxyPower,\r\n PelleRifts.decay.milestones[1],\r\n Ra.unlocks.gamespeedGalaxyBoost\r\n );\r\n if (galaxies < 3) {\r\n // Magic numbers are to retain balancing from before while displaying\r\n // them now as positive multipliers rather than negative percentages\r\n let baseMultiplier = 1 / 1.1245;\r\n if (player.galaxies === 1) baseMultiplier = 1 / 1.11888888;\r\n if (player.galaxies === 2) baseMultiplier = 1 / 1.11267177;\r\n if (NormalChallenge(5).isRunning) {\r\n baseMultiplier = 1 / 1.08;\r\n if (player.galaxies === 1) baseMultiplier = 1 / 1.07632;\r\n if (player.galaxies === 2) baseMultiplier = 1 / 1.072;\r\n }\r\n const perGalaxy = 0.02 * effects;\r\n if (Pelle.isDoomed) galaxies *= 0.5;\r\n\r\n galaxies *= Pelle.specialGlyphEffect.power;\r\n return DC.D0_01.clampMin(baseMultiplier - (galaxies * perGalaxy));\r\n }\r\n let baseMultiplier = 0.8;\r\n if (NormalChallenge(5).isRunning) baseMultiplier = 0.83;\r\n galaxies -= 2;\r\n galaxies *= effects;\r\n galaxies *= getAdjustedGlyphEffect(\"cursedgalaxies\");\r\n galaxies *= getAdjustedGlyphEffect(\"realitygalaxies\");\r\n galaxies *= 1 + ImaginaryUpgrade(9).effectOrDefault(0);\r\n if (Pelle.isDoomed) galaxies *= 0.5;\r\n\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let galWeakStrength = corruptionPenalties.galWeak.strength[player.mending.corruption[3]];\r\n if(CorruptionUpgrade(19).isBought) galWeakStrength = Math.min(galWeakStrength*1.4,1)\r\n galaxies *= (galWeakStrength)\r\n };\r\n\r\n galaxies *= Pelle.specialGlyphEffect.power;\r\n const perGalaxy = DC.D0_965;\r\n let finalAnswer = perGalaxy.pow(galaxies - 2).times(baseMultiplier);\r\n return finalAnswer;\r\n}\r\n\r\nexport function buyTickSpeed() {\r\n if (!Tickspeed.isAvailableForPurchase || !Tickspeed.isAffordable) return false;\r\n\r\n if (NormalChallenge(9).isRunning) {\r\n Tickspeed.multiplySameCosts();\r\n }\r\n Tutorial.turnOffEffect(TUTORIAL_STATE.TICKSPEED);\r\n Currency.antimatter.subtract(Tickspeed.cost);\r\n player.totalTickBought++;\r\n player.records.thisInfinity.lastBuyTime = player.records.thisInfinity.time;\r\n player.requirementChecks.permanent.singleTickspeed++;\r\n if (NormalChallenge(2).isRunning) player.chall2Pow = 0;\r\n GameUI.update();\r\n return true;\r\n}\r\n\r\nexport function buyMaxTickSpeed() {\r\n if (!Tickspeed.isAvailableForPurchase || !Tickspeed.isAffordable) return;\r\n let boughtTickspeed = false;\r\n\r\n Tutorial.turnOffEffect(TUTORIAL_STATE.TICKSPEED);\r\n if (NormalChallenge(9).isRunning) {\r\n const goal = Player.infinityGoal;\r\n let cost = Tickspeed.cost;\r\n while (Currency.antimatter.gt(cost) && cost.lt(goal)) {\r\n Tickspeed.multiplySameCosts();\r\n Currency.antimatter.subtract(cost);\r\n player.totalTickBought++;\r\n boughtTickspeed = true;\r\n cost = Tickspeed.cost;\r\n }\r\n } else {\r\n const purchases = Tickspeed.costScale.getMaxBought(player.totalTickBought, Currency.antimatter.value, 1);\r\n if (purchases === null) {\r\n return;\r\n }\r\n Currency.antimatter.subtract(Decimal.pow10(purchases.logPrice));\r\n player.totalTickBought += purchases.quantity;\r\n boughtTickspeed = true;\r\n }\r\n\r\n if (boughtTickspeed) {\r\n player.records.thisInfinity.lastBuyTime = player.records.thisInfinity.time;\r\n if (NormalChallenge(2).isRunning) player.chall2Pow = 0;\r\n }\r\n}\r\n\r\nexport function resetTickspeed() {\r\n player.totalTickBought = 0;\r\n player.chall9TickspeedCostBumps = 0;\r\n}\r\n\r\nexport const Tickspeed = {\r\n\r\n get isUnlocked() {\r\n return AntimatterDimension(2).bought > 0 || EternityMilestone.unlockAllND.isReached ||\r\n PlayerProgress.realityUnlocked();\r\n },\r\n\r\n get isAvailableForPurchase() {\r\n return this.isUnlocked &&\r\n !EternityChallenge(9).isRunning &&\r\n !Laitela.continuumActive &&\r\n (player.break || this.cost.lt(Decimal.NUMBER_MAX_VALUE));\r\n },\r\n\r\n get isAffordable() {\r\n return Currency.antimatter.gte(this.cost);\r\n },\r\n\r\n get multiplier() {\r\n return getTickSpeedMultiplier();\r\n },\r\n\r\n get current() {\r\n let tickspeed = Effarig.isRunning\r\n ? Effarig.tickspeed\r\n : /*V.isSuperRunning ? this.baseValue.powEffectOf(DilationUpgrade.tickspeedPower).reciprocal().log2().toDecimal().reciprocal() : */this.baseValue.powEffectOf(DilationUpgrade.tickspeedPower);\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let tickExtensionTickspeed = corruptionPenalties.tickExtension[player.mending.corruption[5]];\r\n if(CorruptionUpgrade(21).isBought) tickExtensionTickspeed=tickExtensionTickspeed**0.5;\r\n let corruptPen = new Decimal(1).div(tickExtensionTickspeed);\r\n tickspeed = tickspeed.pow(corruptPen);\r\n };\r\n if(V.isSuperRunning) tickspeed = tickspeed.pow(0.000001);\r\n return player.dilation.active || PelleStrikes.dilation.hasStrike ? dilatedValueOf(tickspeed) : tickspeed;\r\n },\r\n\r\n get cost() {\r\n return this.costScale.calculateCost(player.totalTickBought + player.chall9TickspeedCostBumps);\r\n },\r\n\r\n get costScale() {\r\n return new ExponentialCostScaling({\r\n baseCost: 1000,\r\n baseIncrease: 10,\r\n costScale: Player.tickSpeedMultDecrease,\r\n scalingCostThreshold: Number.MAX_VALUE\r\n });\r\n },\r\n\r\n get continuumValue() {\r\n if (!this.isUnlocked) return 0;\r\n return this.costScale.getContinuumValue(Currency.antimatter.value, 1) * Laitela.matterExtraPurchaseFactor;\r\n },\r\n\r\n get baseValue() {\r\n return DC.E3.timesEffectsOf(\r\n Achievement(36),\r\n Achievement(45),\r\n Achievement(66),\r\n Achievement(83)\r\n )\r\n .times(getTickSpeedMultiplier().pow(this.totalUpgrades));\r\n },\r\n\r\n get totalUpgrades() {\r\n let boughtTickspeed;\r\n if (Laitela.continuumActive) boughtTickspeed = this.continuumValue;\r\n else boughtTickspeed = player.totalTickBought;\r\n return boughtTickspeed + player.totalTickGained;\r\n },\r\n\r\n get perSecond() {\r\n return Decimal.divide(1000, this.current);\r\n },\r\n\r\n multiplySameCosts() {\r\n for (const dimension of AntimatterDimensions.all) {\r\n if (dimension.cost.e === this.cost.e) dimension.costBumps++;\r\n }\r\n }\r\n};\r\n\r\n\r\nexport const FreeTickspeed = {\r\n BASE_SOFTCAP: 300000,\r\n GROWTH_RATE: 6e-6,\r\n GROWTH_EXP: 2,\r\n multToNext: 1.33,\r\n\r\n get amount() {\r\n return player.totalTickGained;\r\n },\r\n\r\n get softcap() {\r\n let softcap = FreeTickspeed.BASE_SOFTCAP;\r\n if (Enslaved.has(ENSLAVED_UNLOCKS.FREE_TICKSPEED_SOFTCAP)) {\r\n softcap += 100000;\r\n }\r\n if (Ra.unlocks.freeTickspeedSoftcapDelay.isUnlocked){\r\n softcap += (10000 * Tesseracts.effectiveCount);\r\n }\r\n if(TimeStudy(403).isBought){\r\n softcap += TimeStudy(403).effectOrDefault(0);\r\n }\r\n return softcap;\r\n },\r\n\r\n fromShards(shards) {\r\n let y = this.GROWTH_EXP;\r\n if (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(11).completions >= 1 && !Pelle.isDoomed) y = y ** EternityChallenge(11).vReward.effectValue; \r\n const tickmult = (1 + (Effects.min(Effects.min(1.33, TimeStudy(171)),TimeStudy(309)) - 1) *\r\n Math.max(getAdjustedGlyphEffect(\"cursedtickspeed\"), 1));\r\n const logTickmult = Math.log(tickmult);\r\n const logShards = shards.ln();\r\n const uncapped = Math.max(0, logShards / logTickmult);\r\n if (uncapped <= FreeTickspeed.softcap) {\r\n this.multToNext = tickmult;\r\n return {\r\n newAmount: Math.ceil(uncapped),\r\n nextShards: Decimal.pow(tickmult, Math.ceil(uncapped))\r\n };\r\n }\r\n // Log of (cost - cost up to softcap)\r\n const priceToCap = FreeTickspeed.softcap * logTickmult;\r\n // In the following we're implicitly applying the function (ln(x) - priceToCap) / logTickmult to all costs,\r\n // so, for example, if the cost is 1 that means it's actually exp(priceToCap) * tickmult.\r\n const desiredCost = (logShards - priceToCap) / logTickmult;\r\n const costFormulaCoefficient = FreeTickspeed.GROWTH_RATE / y / logTickmult;\r\n // In the following we're implicitly subtracting softcap from bought,\r\n // so, for example, if bought is 1 that means it's actually softcap + 1.\r\n // The first term (the big one) is the asymptotically more important term (since FreeTickspeed.GROWTH_EXP > 1),\r\n // but is small initially. The second term allows us to continue the pre-cap free tickspeed upgrade scaling\r\n // of tickmult per upgrade.\r\n const boughtToCost = bought => costFormulaCoefficient * Math.pow(\r\n Math.max(bought, 0), y) + bought;\r\n const derivativeOfBoughtToCost = x => x * costFormulaCoefficient * Math.pow(\r\n Math.max(x, 0), y - 1) + 1;\r\n const newtonsMethod = bought => bought - (boughtToCost(bought) - desiredCost) / derivativeOfBoughtToCost(bought);\r\n let oldApproximation;\r\n let approximation = Math.min(\r\n desiredCost,\r\n Math.pow(desiredCost / costFormulaCoefficient, 1 / y)\r\n );\r\n let counter = 0;\r\n // The bought formula is concave upwards. We start with an over-estimate; when using newton's method,\r\n // this means that successive iterations are also over-etimates. Thus, we can just check for continued\r\n // progress with the approximation < oldApproximation check. The counter is a fallback.\r\n do {\r\n oldApproximation = approximation;\r\n approximation = newtonsMethod(approximation);\r\n } while (approximation < oldApproximation && ++counter < 100);\r\n let purchases = Math.floor(approximation);\r\n let originalPurchases = purchases;\r\n // This undoes the function we're implicitly applying to costs (the \"+ 1\") is because we want\r\n // the cost of the next upgrade.\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let tickExtensionTimeShard = corruptionPenalties.tickExtension[player.mending.corruption[5]];\r\n if(CorruptionUpgrade(21).isBought) tickExtensionTimeShard=tickExtensionTimeShard**0.75;\r\n purchases /= tickExtensionTimeShard;\r\n purchases = Math.floor(purchases);\r\n };\r\n\r\n const next = Decimal.exp(priceToCap + boughtToCost(originalPurchases + 1) * logTickmult);\r\n this.multToNext = Decimal.exp((boughtToCost(originalPurchases + 1) - boughtToCost(originalPurchases)) * logTickmult);\r\n \r\n return {\r\n newAmount: purchases + FreeTickspeed.softcap,\r\n nextShards: next,\r\n };\r\n }\r\n\r\n};\r\n","import { DC } from \"../constants\";\r\nimport { CorruptionUpgrade, KohlerProgressUnlocks, V } from \"../globals\";\r\nimport { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\nimport { DimensionState } from \"./dimension\";\r\n\r\n// Multiplier applied to all Antimatter Dimensions, regardless of tier. This is cached using a Lazy\r\n// and invalidated every update.\r\nexport function antimatterDimensionCommonMultiplier() {\r\n let multiplier = DC.D1;\r\n\r\n multiplier = multiplier.times(Achievements.power);\r\n multiplier = multiplier.times(ShopPurchase.dimPurchases.currentMult);\r\n multiplier = multiplier.times(ShopPurchase.allDimPurchases.currentMult);\r\n\r\n if (!EternityChallenge(9).isRunning) {\r\n multiplier = multiplier.times(Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate).max(1));\r\n }\r\n multiplier = multiplier.timesEffectsOf(\r\n BreakInfinityUpgrade.totalAMMult,\r\n BreakInfinityUpgrade.currentAMMult,\r\n BreakInfinityUpgrade.achievementMult,\r\n BreakInfinityUpgrade.slowestChallengeMult,\r\n InfinityUpgrade.totalTimeMult,\r\n InfinityUpgrade.thisInfinityTimeMult,\r\n Achievement(48),\r\n Achievement(56),\r\n Achievement(65),\r\n Achievement(72),\r\n Achievement(73),\r\n Achievement(74),\r\n Achievement(76),\r\n Achievement(84),\r\n Achievement(91),\r\n Achievement(92),\r\n TimeStudy(91),\r\n TimeStudy(101),\r\n TimeStudy(161),\r\n TimeStudy(193),\r\n TimeStudy(311),\r\n InfinityChallenge(3),\r\n InfinityChallenge(3).reward,\r\n InfinityChallenge(8),\r\n EternityChallenge(10),\r\n AlchemyResource.dimensionality,\r\n PelleUpgrade.antimatterDimensionMult\r\n );\r\n\r\n multiplier = multiplier.dividedByEffectOf(InfinityChallenge(6));\r\n multiplier = multiplier.times(getAdjustedGlyphEffect(\"powermult\"));\r\n multiplier = multiplier.times(Currency.realityMachines.value.powEffectOf(AlchemyResource.force));\r\n\r\n if (Pelle.isDoomed) multiplier = multiplier.dividedBy(10);\r\n\r\n return multiplier;\r\n}\r\n\r\nexport function getDimensionFinalMultiplierUncached(tier) {\r\n if (tier < 1 || tier > 8) throw new Error(`Invalid Antimatter Dimension tier ${tier}`);\r\n if (NormalChallenge(10).isRunning && tier > 6) return DC.D1;\r\n if (EternityChallenge(11).isRunning) {\r\n return Currency.infinityPower.value.pow(\r\n InfinityDimensions.powerConversionRate\r\n ).max(1).times(DimBoost.multiplierToNDTier(tier));\r\n }\r\n\r\n let multiplier = DC.D1;\r\n\r\n multiplier = applyNDMultipliers(multiplier, tier);\r\n multiplier = applyNDPowers(multiplier, tier);\r\n\r\n const glyphDilationPowMultiplier = getAdjustedGlyphEffect(\"dilationpow\");\r\n if (player.dilation.active || PelleStrikes.dilation.hasStrike) {\r\n multiplier = dilatedValueOf(multiplier.pow(glyphDilationPowMultiplier));\r\n } else if (Enslaved.isRunning) {\r\n multiplier = dilatedValueOf(multiplier);\r\n }\r\n multiplier = multiplier.timesEffectOf(DilationUpgrade.ndMultDT);\r\n\r\n if (Effarig.isRunning) {\r\n multiplier = Effarig.multiplier(multiplier);\r\n } else if (V.isRunning) {\r\n multiplier = multiplier.pow(0.5);\r\n } else if (V.isSuperRunning) {\r\n multiplier = multiplier.pow(0.000001);\r\n }\r\n\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n multiplier = multiplier.pow(corruptionPenalties.timeCompression.hiddenEight[player.mending.corruption[2]])\r\n }\r\n\r\n // This power effect goes intentionally after all the nerf effects and shouldn't be moved before them\r\n if (AlchemyResource.inflation.isUnlocked && multiplier.gte(AlchemyResource.inflation.effectValue)) {\r\n multiplier = multiplier.pow(1.05);\r\n }\r\n\r\n return multiplier;\r\n}\r\n\r\nfunction applyNDMultipliers(mult, tier) {\r\n let multiplier = mult.times(GameCache.antimatterDimensionCommonMultiplier.value);\r\n\r\n let buy10Value;\r\n if (Laitela.continuumActive) {\r\n buy10Value = AntimatterDimension(tier).continuumValue;\r\n } else {\r\n buy10Value = Math.floor(AntimatterDimension(tier).bought / 10);\r\n }\r\n\r\n multiplier = multiplier.times(Decimal.pow(AntimatterDimensions.buyTenMultiplier, buy10Value));\r\n multiplier = multiplier.times(DimBoost.multiplierToNDTier(tier));\r\n\r\n let infinitiedMult = DC.D1.timesEffectsOf(\r\n AntimatterDimension(tier).infinityUpgrade,\r\n BreakInfinityUpgrade.infinitiedMult\r\n );\r\n infinitiedMult = infinitiedMult.pow(TimeStudy(31).effectOrDefault(1));\r\n multiplier = multiplier.times(infinitiedMult);\r\n\r\n if (tier === 1) {\r\n multiplier = multiplier\r\n .timesEffectsOf(\r\n InfinityUpgrade.unspentIPMult,\r\n InfinityUpgrade.unspentIPMult.chargedEffect,\r\n Achievement(28),\r\n Achievement(31),\r\n Achievement(68),\r\n Achievement(71),\r\n TimeStudy(234),\r\n TimeStudy(411),\r\n );\r\n }\r\n if (tier === 8) {\r\n multiplier = multiplier.times(Sacrifice.totalBoost);\r\n }\r\n\r\n multiplier = multiplier.timesEffectsOf(\r\n tier === 8 ? Achievement(23) : null,\r\n tier < 8 ? Achievement(34) : null,\r\n tier <= 4 ? Achievement(64) : null,\r\n tier < 8 ? TimeStudy(71) : null,\r\n tier === 8 ? TimeStudy(214) : null,\r\n tier > 1 && tier < 8 ? InfinityChallenge(8).reward : null\r\n );\r\n if (Achievement(43).isUnlocked) {\r\n multiplier = multiplier.times(1 + tier / 100);\r\n }\r\n\r\n multiplier = multiplier.clampMin(1);\r\n\r\n return multiplier;\r\n}\r\n\r\nfunction applyNDPowers(mult, tier) {\r\n let multiplier = mult;\r\n const glyphPowMultiplier = getAdjustedGlyphEffect(\"powerpow\");\r\n const glyphEffarigPowMultiplier = getAdjustedGlyphEffect(\"effarigdimensions\");\r\n\r\n if (InfinityChallenge(4).isRunning && player.postC4Tier !== tier) {\r\n multiplier = multiplier.pow(InfinityChallenge(4).effectValue);\r\n }\r\n if (InfinityChallenge(4).isCompleted) {\r\n multiplier = multiplier.pow(InfinityChallenge(4).reward.effectValue);\r\n }\r\n\r\n multiplier = multiplier.pow(glyphPowMultiplier * glyphEffarigPowMultiplier * Ra.momentumValue);\r\n\r\n multiplier = multiplier\r\n .powEffectsOf(\r\n AntimatterDimension(tier).infinityUpgrade.chargedEffect,\r\n InfinityUpgrade.totalTimeMult.chargedEffect,\r\n InfinityUpgrade.thisInfinityTimeMult.chargedEffect,\r\n AlchemyResource.power,\r\n Achievement(183),\r\n PelleRifts.paradox,\r\n BreakInfinityUpgrade.totalAMMult.chargedEffect,\r\n BreakInfinityUpgrade.currentAMMult.chargedEffect,\r\n );\r\n\r\n multiplier = multiplier.pow(getAdjustedGlyphEffect(\"curseddimensions\"));\r\n\r\n multiplier = multiplier.pow(VUnlocks.adPow.effectOrDefault(1));\r\n\r\n if (player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[1]>=5) {\r\n multiplier = multiplier.pow(CorruptionUpgrade(17).effectOrDefault(1));\r\n }\r\n \r\n if (PelleStrikes.infinity.hasStrike && !MendingUpgrade(10).isBought) {\r\n multiplier = multiplier.pow(0.5);\r\n }\r\n\r\n\r\n return multiplier;\r\n}\r\n\r\nfunction onBuyDimension(tier) {\r\n if (tier === 1) Tutorial.turnOffEffect(TUTORIAL_STATE.DIM1);\r\n if (tier === 2) Tutorial.turnOffEffect(TUTORIAL_STATE.DIM2);\r\n Achievement(10 + tier).unlock();\r\n Achievement(23).tryUnlock();\r\n\r\n if (player.speedrun.isActive && !player.speedrun.hasStarted) Speedrun.startTimer();\r\n\r\n if (NormalChallenge(2).isRunning) player.chall2Pow = 0;\r\n if (NormalChallenge(4).isRunning || InfinityChallenge(1).isRunning) {\r\n AntimatterDimensions.resetAmountUpToTier(tier - 1);\r\n }\r\n\r\n player.postC4Tier = tier;\r\n player.records.thisInfinity.lastBuyTime = player.records.thisInfinity.time;\r\n if (tier !== 8) player.requirementChecks.eternity.onlyAD8 = false;\r\n if (tier !== 1) player.requirementChecks.eternity.onlyAD1 = false;\r\n if (tier === 8) player.requirementChecks.infinity.noAD8 = false;\r\n if (tier === 1) player.requirementChecks.eternity.noAD1 = false;\r\n}\r\n\r\nexport function buyOneDimension(tier) {\r\n const dimension = AntimatterDimension(tier);\r\n if (Laitela.continuumActive || !dimension.isAvailableForPurchase || !dimension.isAffordable) return false;\r\n\r\n const cost = dimension.cost;\r\n\r\n if (tier === 8 && Enslaved.isRunning && AntimatterDimension(8).bought >= 1) return false;\r\n\r\n dimension.currencyAmount = dimension.currencyAmount.minus(cost);\r\n\r\n if (dimension.boughtBefore10 === 9) {\r\n dimension.challengeCostBump();\r\n }\r\n\r\n dimension.amount = dimension.amount.plus(1);\r\n dimension.bought++;\r\n\r\n if (tier === 1) {\r\n Achievement(28).tryUnlock();\r\n }\r\n\r\n onBuyDimension(tier);\r\n\r\n return true;\r\n}\r\n\r\nexport function buyManyDimension(tier) {\r\n const dimension = AntimatterDimension(tier);\r\n if (Laitela.continuumActive || !dimension.isAvailableForPurchase || !dimension.isAffordableUntil10) return false;\r\n const cost = dimension.costUntil10;\r\n\r\n if (tier === 8 && Enslaved.isRunning) return buyOneDimension(8);\r\n\r\n dimension.currencyAmount = dimension.currencyAmount.minus(cost);\r\n dimension.challengeCostBump();\r\n dimension.amount = dimension.amount.plus(dimension.remainingUntil10);\r\n dimension.bought += dimension.remainingUntil10;\r\n\r\n onBuyDimension(tier);\r\n\r\n return true;\r\n}\r\n\r\nexport function buyAsManyAsYouCanBuy(tier) {\r\n const dimension = AntimatterDimension(tier);\r\n if (Laitela.continuumActive || !dimension.isAvailableForPurchase || !dimension.isAffordable) return false;\r\n const howMany = dimension.howManyCanBuy;\r\n const cost = dimension.cost.times(howMany);\r\n\r\n if (tier === 8 && Enslaved.isRunning) return buyOneDimension(8);\r\n\r\n dimension.currencyAmount = dimension.currencyAmount.minus(cost);\r\n dimension.challengeCostBump();\r\n dimension.amount = dimension.amount.plus(howMany);\r\n dimension.bought += howMany;\r\n\r\n onBuyDimension(tier);\r\n\r\n return true;\r\n}\r\n\r\n// This function doesn't do cost checking as challenges generally modify costs, it just buys and updates dimensions\r\nfunction buyUntilTen(tier) {\r\n if (Laitela.continuumActive) return;\r\n const dimension = AntimatterDimension(tier);\r\n dimension.challengeCostBump();\r\n dimension.amount = Decimal.round(dimension.amount.plus(dimension.remainingUntil10));\r\n dimension.bought += dimension.remainingUntil10;\r\n onBuyDimension(tier);\r\n}\r\n\r\nexport function maxAll() {\r\n if (Laitela.continuumActive) return;\r\n\r\n player.requirementChecks.infinity.maxAll = true;\r\n\r\n for (let tier = 1; tier < 9; tier++) {\r\n buyMaxDimension(tier);\r\n }\r\n\r\n // Do this here because tickspeed might not have been unlocked before\r\n // (and maxAll might have unlocked it by buying dimensions).\r\n buyMaxTickSpeed();\r\n}\r\n\r\nexport function buyMaxDimension(tier, bulk = Infinity) {\r\n const dimension = AntimatterDimension(tier);\r\n if (Laitela.continuumActive || !dimension.isAvailableForPurchase || !dimension.isAffordableUntil10) return;\r\n const cost = dimension.costUntil10;\r\n let bulkLeft = bulk;\r\n const goal = Player.infinityGoal;\r\n if (dimension.cost.gt(goal) && Player.isInAntimatterChallenge) return;\r\n\r\n if (tier === 8 && Enslaved.isRunning) {\r\n buyOneDimension(8);\r\n return;\r\n }\r\n\r\n // Buy any remaining until 10 before attempting to bulk-buy\r\n if (dimension.currencyAmount.gte(cost)) {\r\n dimension.currencyAmount = dimension.currencyAmount.minus(cost);\r\n buyUntilTen(tier);\r\n bulkLeft--;\r\n }\r\n\r\n if (bulkLeft <= 0) return;\r\n\r\n // Buy in a while loop in order to properly trigger abnormal price increases\r\n if (NormalChallenge(9).isRunning || InfinityChallenge(5).isRunning) {\r\n while (dimension.isAffordableUntil10 && dimension.cost.lt(goal) && bulkLeft > 0) {\r\n // We can use dimension.currencyAmount or Currency.antimatter here, they're the same,\r\n // but it seems safest to use dimension.currencyAmount for consistency.\r\n dimension.currencyAmount = dimension.currencyAmount.minus(dimension.costUntil10);\r\n buyUntilTen(tier);\r\n bulkLeft--;\r\n }\r\n return;\r\n }\r\n\r\n // This is the bulk-buy math, explicitly ignored if abnormal cost increases are active\r\n const maxBought = dimension.costScale.getMaxBought(\r\n Math.floor(dimension.bought / 10) + dimension.costBumps, dimension.currencyAmount, 10\r\n );\r\n if (maxBought === null) {\r\n return;\r\n }\r\n let buying = maxBought.quantity;\r\n if (buying > bulkLeft) buying = bulkLeft;\r\n dimension.amount = dimension.amount.plus(10 * buying).round();\r\n dimension.bought += 10 * buying;\r\n dimension.currencyAmount = dimension.currencyAmount.minus(Decimal.pow10(maxBought.logPrice));\r\n}\r\n\r\nclass AntimatterDimensionState extends DimensionState {\r\n constructor(tier) {\r\n super(() => player.dimensions.antimatter, tier);\r\n const BASE_COSTS = [null, 10, 100, 1e4, 1e6, 1e9, 1e13, 1e18, 1e24];\r\n this._baseCost = BASE_COSTS[tier];\r\n const BASE_COST_MULTIPLIERS = [null, 1e3, 1e4, 1e5, 1e6, 1e8, 1e10, 1e12, 1e15];\r\n this._baseCostMultiplier = BASE_COST_MULTIPLIERS[tier];\r\n const C6_BASE_COSTS = [null, 10, 100, 100, 500, 2500, 2e4, 2e5, 4e6];\r\n this._c6BaseCost = C6_BASE_COSTS[tier];\r\n const C6_BASE_COST_MULTIPLIERS = [null, 1e3, 5e3, 1e4, 1.2e4, 1.8e4, 2.6e4, 3.2e4, 4.2e4];\r\n this._c6BaseCostMultiplier = C6_BASE_COST_MULTIPLIERS[tier];\r\n }\r\n\r\n /**\r\n * @returns {ExponentialCostScaling}\r\n */\r\n get costScale() {\r\n let corruptionPen = 1\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n corruptionPen = corruptionPenalties.toD.hiddenEight[player.mending.corruption[7]];\r\n }\r\n return new ExponentialCostScaling({\r\n baseCost: NormalChallenge(6).isRunning ? this._c6BaseCost : this._baseCost,\r\n baseIncrease: NormalChallenge(6).isRunning ? this._c6BaseCostMultiplier : this._baseCostMultiplier,\r\n costScale: Player.dimensionMultDecrease**corruptionPen,\r\n scalingCostThreshold: Number.MAX_VALUE\r\n });\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get cost() {\r\n let primeAnswer = this.costScale.calculateCost(Math.floor(this.bought / 10) + this.costBumps);\r\n return primeAnswer;\r\n }\r\n\r\n /** @returns {number} */\r\n get costBumps() { return this.data.costBumps; }\r\n /** @param {number} value */\r\n set costBumps(value) { this.data.costBumps = value; }\r\n\r\n /**\r\n * @returns {number}\r\n */\r\n get boughtBefore10() {\r\n return this.bought % 10;\r\n }\r\n\r\n /**\r\n * @returns {number}\r\n */\r\n get remainingUntil10() {\r\n return 10 - this.boughtBefore10;\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get costUntil10() {\r\n return this.cost.times(this.remainingUntil10);\r\n }\r\n\r\n get howManyCanBuy() {\r\n const ratio = this.currencyAmount.dividedBy(this.cost);\r\n return Decimal.floor(Decimal.max(Decimal.min(ratio, 10 - this.boughtBefore10), 0)).toNumber();\r\n }\r\n\r\n /**\r\n * @returns {InfinityUpgrade}\r\n */\r\n get infinityUpgrade() {\r\n switch (this.tier) {\r\n case 1:\r\n case 8:\r\n return InfinityUpgrade.dim18mult;\r\n case 2:\r\n case 7:\r\n return InfinityUpgrade.dim27mult;\r\n case 3:\r\n case 6:\r\n return InfinityUpgrade.dim36mult;\r\n case 4:\r\n case 5:\r\n return InfinityUpgrade.dim45mult;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get rateOfChange() {\r\n const tier = this.tier;\r\n if (tier === 8 ||\r\n (tier > 3 && EternityChallenge(3).isRunning) ||\r\n (tier > 6 && NormalChallenge(12).isRunning)) {\r\n return DC.D0;\r\n }\r\n\r\n let toGain;\r\n if (tier === 7 && EternityChallenge(7).isRunning) {\r\n toGain = InfinityDimension(1).productionPerSecond.times(10);\r\n } else if (NormalChallenge(12).isRunning) {\r\n toGain = AntimatterDimension(tier + 2).productionPerSecond;\r\n } else {\r\n toGain = AntimatterDimension(tier + 1).productionPerSecond;\r\n }\r\n return toGain.times(10).dividedBy(this.amount.max(1)).times(getGameSpeedupForDisplay());\r\n }\r\n\r\n /**\r\n * @returns {boolean}\r\n */\r\n get isProducing() {\r\n const tier = this.tier;\r\n if ((EternityChallenge(3).isRunning && tier > 4) ||\r\n (NormalChallenge(10).isRunning && tier > 6) ||\r\n (Laitela.isRunning && tier > Laitela.maxAllowedDimension)) {\r\n return false;\r\n }\r\n return this.totalAmount.gt(0);\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get currencyAmount() {\r\n return this.tier >= 3 && NormalChallenge(6).isRunning\r\n ? AntimatterDimension(this.tier - 2).amount\r\n : Currency.antimatter.value;\r\n }\r\n\r\n /**\r\n * @param {Decimal} value\r\n */\r\n set currencyAmount(value) {\r\n if (this.tier >= 3 && NormalChallenge(6).isRunning) AntimatterDimension(this.tier - 2).amount = value;\r\n else Currency.antimatter.value = value;\r\n }\r\n\r\n /**\r\n * @returns {number}\r\n */\r\n get continuumValue() {\r\n if (!this.isAvailableForPurchase) return 0;\r\n // Nameless limits dim 8 purchases to 1 only\r\n // Continuum should be no different\r\n if (this.tier === 8 && Enslaved.isRunning) return 1;\r\n // It's safe to use dimension.currencyAmount because this is\r\n // a dimension-only method (so don't just copy it over to tickspeed).\r\n // We need to use dimension.currencyAmount here because of different costs in NC6.\r\n return this.costScale.getContinuumValue(this.currencyAmount, 10) * Laitela.matterExtraPurchaseFactor;\r\n }\r\n\r\n /**\r\n * @returns {number}\r\n */\r\n get continuumAmount() {\r\n if (!Laitela.continuumActive) return 0;\r\n return Math.floor(10 * this.continuumValue);\r\n }\r\n\r\n /**\r\n * Continuum doesn't continually update dimension amount because that would require making the code\r\n * significantly messier to handle it properly. Instead an effective amount is calculated here, which\r\n * is only used for production and checking for boost/galaxy. Doesn't affect achievements.\r\n * Taking the max is kind of a hack but it seems to work in all cases. Obviously it works if\r\n * continuum isn't unlocked. If the dimension is being produced and the continuum is unlocked,\r\n * the dimension will be being produced in large numbers (since the save is endgame), so the amount\r\n * will be larger than the continuum and so the continuum is insignificant, which is fine.\r\n * If the dimension isn't being produced, the continuum will be at least the amount, so\r\n * the continuum will be used and that's fine. Note that when continuum is first unlocked,\r\n * both 8d amount and 8d continuum will be nonzero until the next infinity, so taking the sum\r\n * doesn't work.\r\n * @param {Decimal} value\r\n */\r\n get totalAmount() {\r\n return this.amount.max(this.continuumAmount);\r\n }\r\n\r\n /**\r\n * @returns {boolean}\r\n */\r\n get isAffordable() {\r\n if (Laitela.continuumActive) return false;\r\n if (!player.break && this.cost.gt(Decimal.MAX_VALUE)) return false;\r\n return this.cost.lte(this.currencyAmount);\r\n }\r\n\r\n /**\r\n * @returns {boolean}\r\n */\r\n get isAffordableUntil10() {\r\n if (!player.break && this.cost.gt(Decimal.MAX_VALUE)) return false;\r\n return this.costUntil10.lte(this.currencyAmount);\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n if (!EternityMilestone.unlockAllND.isReached && this.tier > DimBoost.totalBoosts + 4) return false;\r\n const hasPrevTier = this.tier === 1 || AntimatterDimension(this.tier - 1).totalAmount.gt(0);\r\n if (!EternityMilestone.unlockAllND.isReached && !hasPrevTier) return false;\r\n return this.tier < 7 || !NormalChallenge(10).isRunning;\r\n }\r\n\r\n reset() {\r\n this.amount = DC.D0;\r\n this.bought = 0;\r\n this.costBumps = 0;\r\n }\r\n\r\n resetAmount() {\r\n this.amount = DC.D0;\r\n }\r\n\r\n challengeCostBump() {\r\n if (InfinityChallenge(5).isRunning) this.multiplyIC5Costs();\r\n else if (NormalChallenge(9).isRunning) this.multiplySameCosts();\r\n }\r\n\r\n multiplySameCosts() {\r\n for (const dimension of AntimatterDimensions.all.filter(dim => dim.tier !== this.tier)) {\r\n if (dimension.cost.e === this.cost.e) {\r\n dimension.costBumps++;\r\n }\r\n }\r\n if (Tickspeed.cost.e === this.cost.e) player.chall9TickspeedCostBumps++;\r\n }\r\n\r\n multiplyIC5Costs() {\r\n for (const dimension of AntimatterDimensions.all.filter(dim => dim.tier !== this.tier)) {\r\n if (this.tier <= 4 && dimension.cost.lt(this.cost)) {\r\n dimension.costBumps++;\r\n } else if (this.tier >= 5 && dimension.cost.gt(this.cost)) {\r\n dimension.costBumps++;\r\n }\r\n }\r\n }\r\n\r\n get multiplier() {\r\n return GameCache.antimatterDimensionFinalMultipliers[this.tier].value;\r\n }\r\n\r\n get cappedProductionInNormalChallenges() {\r\n const postBreak = (player.break && !NormalChallenge.isRunning) ||\r\n InfinityChallenge.isRunning ||\r\n Enslaved.isRunning;\r\n const postWarp = player.reality.warped;\r\n if ((Pelle.isDoomed && Pelle.hasGalaxyGenerator) || !postWarp) return postBreak ? Decimal.MAX_VALUE : DC.E315;\r\n return postBreak ? DC.WARP_LIMIT : DC.E315;\r\n }\r\n\r\n get productionPerSecond() {\r\n const tier = this.tier;\r\n if (Laitela.isRunning && tier > Laitela.maxAllowedDimension) return DC.D0;\r\n let amount = this.totalAmount;\r\n if (NormalChallenge(12).isRunning) {\r\n if (tier === 2) amount = amount.pow(1.6);\r\n if (tier === 4) amount = amount.pow(1.4);\r\n if (tier === 6) amount = amount.pow(1.2);\r\n }\r\n let production = amount.times(this.multiplier).times(Tickspeed.perSecond);\r\n if (NormalChallenge(2).isRunning) {\r\n production = production.times(player.chall2Pow);\r\n }\r\n if (tier === 1) {\r\n if (NormalChallenge(3).isRunning) {\r\n production = production.times(player.chall3Pow);\r\n }\r\n if (production.gt(10)) {\r\n const log10 = production.log10();\r\n production = Decimal.pow10(Math.pow(log10, getAdjustedGlyphEffect(\"effarigantimatter\")));\r\n }\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let atomDilutionCorruption = corruptionPenalties.atomDilution[player.mending.corruption[6]];\r\n if(CorruptionUpgrade(22).isBought) atomDilutionCorruption = Math.min(1,atomDilutionCorruption*1.5)\r\n production = Decimal.pow10(Math.pow(production.log10(),atomDilutionCorruption))\r\n }\r\n if(KohlerProgressUnlocks.hostileFragments.isUnlocked){\r\n production = Decimal.pow(production,1+CorruptionData.recordCorruptedFragments/100)\r\n }\r\n }\r\n production = production.min(this.cappedProductionInNormalChallenges);\r\n return production;\r\n }\r\n}\r\n\r\n/**\r\n * @function\r\n * @param {number} tier\r\n * @return {AntimatterDimensionState}\r\n */\r\nexport const AntimatterDimension = AntimatterDimensionState.createAccessor();\r\n\r\nexport const AntimatterDimensions = {\r\n /**\r\n * @type {AntimatterDimensionState[]}\r\n */\r\n all: AntimatterDimension.index.compact(),\r\n\r\n reset() {\r\n for (const dimension of AntimatterDimensions.all) {\r\n dimension.reset();\r\n }\r\n GameCache.dimensionMultDecrease.invalidate();\r\n },\r\n\r\n resetAmountUpToTier(maxTier) {\r\n for (const dimension of AntimatterDimensions.all.slice(0, maxTier)) {\r\n dimension.resetAmount();\r\n }\r\n },\r\n\r\n get buyTenMultiplier() {\r\n if (NormalChallenge(7).isRunning) return DC.D2.min(1 + DimBoost.totalBoosts / 5);\r\n\r\n let mult = DC.D2.plusEffectsOf(\r\n Achievement(141).effects.buyTenMult,\r\n );\r\n if(EternityChallenge(3).completions >= 1){\r\n mult = mult.plusEffectsOf(EternityChallenge(3).reward);\r\n }\r\n mult = mult.timesEffectsOf(\r\n InfinityUpgrade.buy10Mult,\r\n Achievement(58)\r\n ).times(getAdjustedGlyphEffect(\"powerbuy10\"));\r\n\r\n mult = mult.pow(Math.max(1, getAdjustedGlyphEffect(\"effarigforgotten\")))\r\n mult = mult.powEffectOf(InfinityUpgrade.buy10Mult.chargedEffect);\r\n mult = mult.pow(ImaginaryUpgrade(14).effectOrDefault(1));\r\n\r\n if (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(3).completions >= 1 && !Pelle.isDoomed){\r\n mult = mult.pow(EternityChallenge(3).vReward.effectValue);\r\n }\r\n return mult;\r\n },\r\n\r\n tick(diff) {\r\n // Stop producing antimatter at Big Crunch goal because all the game elements\r\n // are hidden when pre-break Big Crunch button is on screen.\r\n const hasBigCrunchGoal = !player.break || Player.isInAntimatterChallenge;\r\n if (hasBigCrunchGoal && Currency.antimatter.gte(Player.infinityGoal)) return;\r\n\r\n let maxTierProduced = EternityChallenge(3).isRunning ? 3 : 7;\r\n let nextTierOffset = 1;\r\n if (NormalChallenge(12).isRunning) {\r\n maxTierProduced--;\r\n nextTierOffset++;\r\n }\r\n for (let tier = maxTierProduced; tier >= 1; --tier) {\r\n AntimatterDimension(tier + nextTierOffset).produceDimensions(AntimatterDimension(tier), new Decimal(diff).div(10));\r\n }\r\n if (AntimatterDimension(1).amount.gt(0)) {\r\n player.requirementChecks.eternity.noAD1 = false;\r\n }\r\n AntimatterDimension(1).produceCurrency(Currency.antimatter, diff);\r\n if (NormalChallenge(12).isRunning) {\r\n AntimatterDimension(2).produceCurrency(Currency.antimatter, diff);\r\n }\r\n // Production may overshoot the goal on the final tick of the challenge\r\n if (hasBigCrunchGoal) Currency.antimatter.dropTo(Player.infinityGoal);\r\n }\r\n};\r\n","import { DC } from \"../constants\";\r\nimport { CorruptionUpgrade } from \"../corruption-upgrades\";\r\nimport { Currency } from \"../currency\";\r\nimport { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\nimport { WarpUpgrade } from \"../warp-upgrades\";\r\n\r\nimport { DimensionState } from \"./dimension\";\r\n\r\nexport function infinityDimensionCommonMultiplier() {\r\n let mult = new Decimal(ShopPurchase.allDimPurchases.currentMult)\r\n .timesEffectsOf(\r\n Achievement(75),\r\n TimeStudy(82),\r\n TimeStudy(92),\r\n TimeStudy(162),\r\n InfinityChallenge(1).reward,\r\n InfinityChallenge(6).reward,\r\n EternityUpgrade.idMultEP,\r\n EternityUpgrade.idMultEternities,\r\n EternityUpgrade.idMultICRecords,\r\n AlchemyResource.dimensionality,\r\n ImaginaryUpgrade(8),\r\n PelleRifts.recursion.milestones[1]\r\n );\r\n \r\n if (Pelle.isDoomed && EternityChallenge(4).completions >= 1) {\r\n mult = mult.timesEffectsOf(EternityChallenge(4).reward);\r\n }\r\n if (Pelle.isDoomed && EternityChallenge(9).completions >= 1) {\r\n mult = mult.timesEffectsOf(EternityChallenge(9).reward);\r\n }\r\n if (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(9).completions >= 1 && !Pelle.isDoomed) {\r\n mult = mult.timesEffectsOf(EternityChallenge(9).vReward);\r\n }\r\n if (Replicanti.areUnlocked && Replicanti.amount.gt(1)) {\r\n mult = mult.times(replicantiMult());\r\n }\r\n\r\n if(Ra.unlocks.vAchMilestone2AffectsIDsAndTDs.isUnlocked) {\r\n mult = mult.pow(VUnlocks.adPow.effectOrDefault(1), 0.5);\r\n }\r\n return mult;\r\n}\r\n\r\nexport function toggleAllInfDims() {\r\n const areEnabled = Autobuyer.infinityDimension(1).isActive;\r\n for (let i = 1; i < 9; i++) {\r\n Autobuyer.infinityDimension(i).isActive = !areEnabled;\r\n }\r\n}\r\n\r\nclass InfinityDimensionState extends DimensionState {\r\n constructor(tier) {\r\n super(() => player.dimensions.infinity, tier);\r\n const UNLOCK_REQUIREMENTS = [\r\n undefined,\r\n DC.E1100,\r\n DC.E1900,\r\n DC.E2400,\r\n DC.E10500,\r\n DC.E30000,\r\n DC.E45000,\r\n DC.E54000,\r\n DC.E60000,\r\n ];\r\n this._unlockRequirement = UNLOCK_REQUIREMENTS[tier];\r\n const COST_MULTS = [null, 1e3, 1e6, 1e8, 1e10, 1e15, 1e20, 1e25, 1e30];\r\n this._costMultiplier = COST_MULTS[tier];\r\n const POWER_MULTS = [null, 50, 30, 10, 5, 5, 5, 5, 5];\r\n this._powerMultiplier = POWER_MULTS[tier];\r\n const BASE_COSTS = [null, 1e8, 1e9, 1e10, 1e20, 1e140, 1e200, 1e250, 1e280];\r\n this._baseCost = new Decimal(BASE_COSTS[tier]);\r\n this.ipRequirement = BASE_COSTS[1];\r\n }\r\n\r\n /** @returns {Decimal} */\r\n get cost() { return this.data.cost; }\r\n /** @param {Decimal} value */\r\n set cost(value) { this.data.cost = value; }\r\n\r\n get baseAmount() {\r\n return this.data.baseAmount;\r\n }\r\n\r\n set baseAmount(value) {\r\n this.data.baseAmount = value;\r\n }\r\n\r\n get isUnlocked() {\r\n return this.data.isUnlocked;\r\n }\r\n\r\n set isUnlocked(value) {\r\n this.data.isUnlocked = value;\r\n }\r\n\r\n get amRequirement() {\r\n return this._unlockRequirement;\r\n }\r\n\r\n get antimatterRequirementReached() {\r\n return player.records.thisEternity.maxAM.gte(this.amRequirement);\r\n }\r\n\r\n get hasIPUnlock() {\r\n return this.tier === 1 && !PlayerProgress.eternityUnlocked();\r\n }\r\n\r\n get ipRequirementReached() {\r\n return !this.hasIPUnlock || Currency.infinityPoints.value.gte(this.ipRequirement);\r\n }\r\n\r\n get canUnlock() {\r\n return (Perk.bypassIDAntimatter.canBeApplied || this.antimatterRequirementReached) &&\r\n this.ipRequirementReached;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return InfinityDimensions.canBuy() && this.isUnlocked && this.isAffordable && !this.isCapped;\r\n }\r\n\r\n get isAffordable() {\r\n return Currency.infinityPoints.gte(this.cost);\r\n }\r\n\r\n get rateOfChange() {\r\n const tier = this.tier;\r\n let toGain = DC.D0;\r\n if (tier === 8) {\r\n // We need a extra 10x here (since ID8 production is per-second and\r\n // other ID production is per-10-seconds).\r\n EternityChallenge(7).reward.applyEffect(v => toGain = v.times(10));\r\n if (EternityChallenge(7).isRunning) EternityChallenge(7).applyEffect(v => toGain = v.times(10));\r\n } else {\r\n toGain = InfinityDimension(tier + 1).productionPerSecond;\r\n }\r\n const current = Decimal.max(this.amount, 1);\r\n return toGain.times(10).dividedBy(current).times(getGameSpeedupForDisplay());\r\n }\r\n\r\n get infPowerSoftcap(){\r\n let x = 9e15;\r\n x += WarpUpgrade(1).effectOrDefault(0)\r\n return x;\r\n }\r\n\r\n get productionPerSecond() {\r\n if (EternityChallenge(2).isRunning || EternityChallenge(10).isRunning ||\r\n (Laitela.isRunning && this.tier > Laitela.maxAllowedDimension)) {\r\n return DC.D0;\r\n }\r\n let production = this.totalAmount;\r\n if (EternityChallenge(11).isRunning) {\r\n return production;\r\n }\r\n if (EternityChallenge(7).isRunning) {\r\n production = production.times(Tickspeed.perSecond);\r\n }\r\n production = production.times(this.multiplier);\r\n //mend: Inf Power Gain softcap --sxy\r\n let repeats = 1;\r\n /*while (factor.gte(Decimal.pow(getGameSpeedupSoftcaps(), repeats))) {\r\n factor = factor.div(getGameSpeedupSoftcaps());\r\n factor = factor.pow(getGameSpeedupSoftcapsExp());\r\n factor = factor.times(getGameSpeedupSoftcaps());\r\n repeats += 1;\r\n }*/\r\n if (this.tier == 1){\r\n while (Math.log10(production.log10()) > Math.log10(this.infPowerSoftcap)*repeats) {\r\n production = production.div(Decimal.pow10(this.infPowerSoftcap)); \r\n production = production.pow(0.0123456789);\r\n production = production.times(Decimal.pow10(this.infPowerSoftcap));\r\n repeats += 1}\r\n }\r\n return production;\r\n }\r\n\r\n get multiplier() {\r\n const tier = this.tier;\r\n if (EternityChallenge(11).isRunning) return DC.D1;\r\n let mult = GameCache.infinityDimensionCommonMultiplier.value\r\n .timesEffectsOf(\r\n tier === 1 ? Achievement(94) : null,\r\n tier === 4 ? TimeStudy(72) : null,\r\n TimeStudy(312),\r\n );\r\n if (EternityChallenge(2).completions >= 1){\r\n mult = mult.timesEffectsOf(\r\n tier === 1 ? EternityChallenge(2).reward : null,\r\n );\r\n }\r\n mult = mult.times(Decimal.pow(this.powerMultiplier, Math.floor(this.baseAmount / 10)));\r\n\r\n\r\n if (tier === 1) {\r\n mult = mult.times(PelleRifts.decay.milestones[0].effectOrDefault(1));\r\n mult = mult.times(TimeStudy(412).effectOrDefault(1));\r\n }\r\n\r\n\r\n mult = mult.pow(getAdjustedGlyphEffect(\"infinitypow\"));\r\n mult = mult.pow(getAdjustedGlyphEffect(\"effarigdimensions\"));\r\n mult = mult.pow(getAdjustedGlyphEffect(\"curseddimensions\"));\r\n mult = mult.powEffectOf(AlchemyResource.infinity);\r\n mult = mult.pow(Ra.momentumValue);\r\n mult = mult.powEffectOf(PelleRifts.paradox);\r\n if(Ra.unlocks.improvedECRewards.isUnlocked && !Pelle.isDoomed){\r\n if(EternityChallenge(2).completions >= 1) mult = mult.pow(EternityChallenge(2).vReward.effectValue);\r\n if(EternityChallenge(4).completions >= 1) mult = mult.pow(EternityChallenge(4).vReward.effectValue);\r\n }\r\n if (EternityChallenge(4).completions >= 1) {\r\n mult = mult.timesEffectsOf(EternityChallenge(4).reward);\r\n }\r\n\r\n if (player.dilation.active || PelleStrikes.dilation.hasStrike) {\r\n mult = dilatedValueOf(mult);\r\n }\r\n\r\n if (Effarig.isRunning) {\r\n mult = Effarig.multiplier(mult);\r\n } else if (V.isRunning) {\r\n mult = mult.pow(0.5);\r\n } else if (V.isSuperRunning) {\r\n mult = mult.pow(0.000001);\r\n }\r\n\r\n if (PelleStrikes.powerGalaxies.hasStrike && !MendingUpgrade(10).isBought) {\r\n mult = mult.pow(0.5);\r\n }\r\n\r\n if (CorruptionUpgrade(24).isBought&&player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[8]>=5){\r\n mult = mult.pow(CorruptionUpgrade(24).effectOrDefault(1));\r\n }\r\n return mult;\r\n }\r\n\r\n get isProducing() {\r\n const tier = this.tier;\r\n if (EternityChallenge(2).isRunning ||\r\n EternityChallenge(10).isRunning ||\r\n (Laitela.isRunning && tier > Laitela.maxAllowedDimension)) {\r\n return false;\r\n }\r\n return this.totalAmount.gt(0);\r\n }\r\n\r\n get baseCost() {\r\n return this._baseCost;\r\n }\r\n\r\n get costMultiplier() {\r\n let costMult = this._costMultiplier;\r\n if(EternityChallenge(12).completions >= 1) costMult = Math.pow(costMult, EternityChallenge(12).reward.effectValue);\r\n return costMult;\r\n }\r\n\r\n get powerMultiplier() {\r\n return new Decimal(this._powerMultiplier)\r\n .timesEffectsOf(this._tier === 8 ? GlyphSacrifice.infinity : null)\r\n .pow(ImaginaryUpgrade(14).effectOrDefault(1));\r\n }\r\n\r\n get purchases() {\r\n // Because each ID purchase gives 10 IDs\r\n return this.data.baseAmount / 10;\r\n }\r\n\r\n get purchaseCap() {\r\n if (Enslaved.isRunning) {\r\n return 1;\r\n }\r\n // return InfinityDimensions.totalDimCap * (this.tier == 8 ? 100 : 1);\r\n const x = (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(12).completions >= 1 && !Pelle.isDoomed) ? EternityChallenge(12).vReward.effectValue : 1\r\n let y = this.tier == 8 ? 1e10 : InfinityDimensions.totalDimCap ** x\r\n if (player.timestudy.studies.includes(310)) y = this.tier == 8 ? 1e10 * (Math.max(Math.log10(Currency.replicanti.value.exponent),1)) : (1e10 * (Math.max(Math.log10(Currency.replicanti.value.exponent),1)))**x\r\n return y;\r\n }\r\n\r\n get isCapped() {\r\n return this.purchases >= this.purchaseCap;\r\n }\r\n\r\n get hardcapIPAmount() {\r\n return this._baseCost.times(Decimal.pow(this.costMultiplier, this.purchaseCap));\r\n }\r\n\r\n get continuumValue() {\r\n if(Pelle.isDoomed) return 0;\r\n if(!this.isUnlocked) return 0;\r\n if(!Ra.continuumActive) return 0;\r\n const logMoney = Currency.infinityPoints.value.log10();\r\n const logMult = Math.log10(this.costMultiplier);\r\n const logBase = this.baseCost.log10();\r\n let contValue = (logMoney - logBase)/logMult;\r\n contValue *= 1 + Laitela.matterExtraPurchaseFactor * .1;\r\n /*if(this.tier < 8)*/ contValue = Math.clampMax(contValue, this.purchaseCap);\r\n return Math.clampMin(contValue, 0);\r\n }\r\n\r\n get totalAmount() {\r\n //if (this.tier==8) return Decimal.min(this.amount.max(this.continuumValue*10),1e25);\r\n return this.amount.max(this.continuumValue*10);\r\n }\r\n\r\n resetAmount() {\r\n this.amount = new Decimal(this.baseAmount);\r\n }\r\n\r\n fullReset() {\r\n this.cost = new Decimal(this.baseCost);\r\n this.amount = DC.D0;\r\n this.bought = 0;\r\n this.baseAmount = 0;\r\n this.isUnlocked = false;\r\n }\r\n\r\n unlock() {\r\n if (this.isUnlocked) return true;\r\n if (!this.canUnlock) return false;\r\n this.isUnlocked = true;\r\n EventHub.dispatch(GAME_EVENT.INFINITY_DIMENSION_UNLOCKED, this.tier);\r\n if (this.tier === 1 && !PlayerProgress.eternityUnlocked()) {\r\n Tab.dimensions.infinity.show();\r\n }\r\n return true;\r\n }\r\n\r\n // Only ever called from manual actions\r\n buySingle() {\r\n if (!this.isUnlocked) return this.unlock();\r\n if (!this.isAvailableForPurchase) return false;\r\n if (ImaginaryUpgrade(15).isLockingMechanics) {\r\n const lockString = this.tier === 1\r\n ? \"purchase a 1st Infinity Dimension\"\r\n : \"purchase a Dimension which will produce 1st IDs\";\r\n ImaginaryUpgrade(15).tryShowWarningModal(lockString);\r\n return false;\r\n }\r\n\r\n Currency.infinityPoints.purchase(this.cost);\r\n this.cost = Decimal.round(this.cost.times(this.costMultiplier));\r\n // Because each ID purchase gives 10 IDs\r\n this.amount = this.amount.plus(10);\r\n this.baseAmount += 10;\r\n\r\n if (EternityChallenge(8).isRunning) {\r\n player.eterc8ids -= 1;\r\n }\r\n \r\n return true;\r\n }\r\n\r\n buyMax(auto) {\r\n if (!this.isAvailableForPurchase) return false;\r\n if (ImaginaryUpgrade(15).isLockingMechanics) {\r\n const lockString = this.tier === 1\r\n ? \"purchase a 1st Infinity Dimension\"\r\n : \"purchase a Dimension which will produce 1st IDs\";\r\n if (!auto) ImaginaryUpgrade(15).tryShowWarningModal(lockString);\r\n return false;\r\n }\r\n\r\n let purchasesUntilHardcap = this.purchaseCap - this.purchases;\r\n if (EternityChallenge(8).isRunning) {\r\n purchasesUntilHardcap = Math.clampMax(purchasesUntilHardcap, player.eterc8ids);\r\n }\r\n\r\n const costScaling = new LinearCostScaling(\r\n Currency.infinityPoints.value,\r\n this.cost,\r\n this.costMultiplier,\r\n purchasesUntilHardcap\r\n );\r\n if (costScaling.purchases <= 0) return false;\r\n\r\n Currency.infinityPoints.purchase(costScaling.totalCost);\r\n this.cost = this.cost.times(costScaling.totalCostMultiplier);\r\n // Because each ID purchase gives 10 IDs\r\n this.amount = this.amount.plus(10 * costScaling.purchases);\r\n this.baseAmount += 10 * costScaling.purchases;\r\n\r\n if (EternityChallenge(8).isRunning) {\r\n player.eterc8ids -= costScaling.purchases;\r\n }\r\n \r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * @function\r\n * @param {number} tier\r\n * @return {InfinityDimensionState}\r\n */\r\nexport const InfinityDimension = InfinityDimensionState.createAccessor();\r\n\r\nexport const InfinityDimensions = {\r\n /**\r\n * @type {InfinityDimensionState[]}\r\n */\r\n all: InfinityDimension.index.compact(),\r\n HARDCAP_PURCHASES: 2000000,\r\n\r\n unlockNext() {\r\n if (InfinityDimension(8).isUnlocked) return;\r\n this.next().unlock();\r\n },\r\n\r\n next() {\r\n if (InfinityDimension(8).isUnlocked)\r\n throw \"All Infinity Dimensions are unlocked\";\r\n return this.all.first(dim => !dim.isUnlocked);\r\n },\r\n\r\n resetAmount() {\r\n Currency.infinityPower.reset();\r\n for (const dimension of InfinityDimensions.all) {\r\n dimension.resetAmount();\r\n }\r\n },\r\n\r\n fullReset() {\r\n for (const dimension of InfinityDimensions.all) {\r\n dimension.fullReset();\r\n }\r\n },\r\n\r\n get capIncrease() {\r\n return Math.floor(Tesseracts.capIncrease());\r\n },\r\n\r\n get totalDimCap() {\r\n let tDc =this.HARDCAP_PURCHASES + this.capIncrease;\r\n if (player.timestudy.studies.includes(310)) tDc = tDc * (Math.max(Math.log10(Currency.replicanti.value.exponent),1))\r\n return tDc;\r\n },\r\n\r\n canBuy() {\r\n return !EternityChallenge(2).isRunning &&\r\n !EternityChallenge(10).isRunning &&\r\n (!EternityChallenge(8).isRunning || player.eterc8ids > 0);\r\n },\r\n\r\n canAutobuy() {\r\n return this.canBuy() && !EternityChallenge(8).isRunning;\r\n },\r\n\r\n tick(diff) {\r\n for (let tier = 8; tier > 1; tier--) {\r\n InfinityDimension(tier).produceDimensions(InfinityDimension(tier - 1), new Decimal(diff).div(10));\r\n }\r\n if (EternityChallenge(7).isRunning) {\r\n if (!NormalChallenge(10).isRunning) {\r\n InfinityDimension(1).produceDimensions(AntimatterDimension(7), diff);\r\n }\r\n } \r\n else { \r\n InfinityDimension(1).produceCurrency(Currency.infinityPower, diff);\r\n }\r\n\r\n player.requirementChecks.reality.maxID1 = player.requirementChecks.reality.maxID1\r\n .clampMin(InfinityDimension(1).amount);\r\n },\r\n\r\n tryAutoUnlock() {\r\n if (!EternityMilestone.autoUnlockID.isReached || InfinityDimension(8).isUnlocked) return;\r\n for (const dimension of this.all) {\r\n // If we cannot unlock this one, we can't unlock the rest, either\r\n if (!dimension.unlock()) break;\r\n }\r\n },\r\n\r\n // Called from \"Max All\" UI buttons and nowhere else\r\n buyMax() {\r\n // Try to unlock dimensions\r\n const unlockedDimensions = this.all.filter(dimension => dimension.unlock());\r\n\r\n // Try to buy single from the highest affordable new dimensions\r\n unlockedDimensions.slice().reverse().forEach(dimension => {\r\n if (dimension.purchases === 0) dimension.buySingle();\r\n });\r\n\r\n // Try to buy max from the lowest dimension (since lower dimensions have bigger multiplier per purchase)\r\n unlockedDimensions.forEach(dimension => dimension.buyMax(false));\r\n },\r\n\r\n get powerConversionRate() {\r\n const x = Ra.unlocks.relicShardBoost.isUnlocked ? 1+(Math.max(1, Decimal.max(Currency.relicShards.value,1).log10()) / 1000) : 0;\r\n const y = Ra.unlocks.improvedIpowConversion.isUnlocked ? Math.log10(Math.max(Tesseracts.effectiveCount,1)) : 0; //hpefully won't inflate if we softcap or put scaling in\r\n\r\n const z = Ra.unlocks.infinityPowerConversionBoost.isUnlocked ? 0.25 * Math.floor(Ra.pets.laitela.level / 10) : 0;\r\n const m = TimeStudy(402).isBought ? TimeStudy(402).effectOrDefault(0) :0;\r\n let multiplier = PelleRifts.paradox.milestones[2].effectOrDefault(1);\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n multiplier /= (corruptionPenalties.galWeak.hiddenEight[player.mending.corruption[3]])\r\n }\r\n return (7 + getAdjustedGlyphEffect(\"infinityrate\") + PelleUpgrade.infConversion.effectOrDefault(0) + x + y + z + m) * multiplier;\r\n }\r\n};\r\n","import { DC } from \"../constants\";\r\nimport { CorruptionUpgrade } from \"../corruption-upgrades\";\r\nimport { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\n\r\nimport { DimensionState } from \"./dimension\";\r\n\r\nexport function buySingleTimeDimension(tier, auto = false) {\r\n const dim = TimeDimension(tier);\r\n if (TimeDimension(tier).bought >= TimeDimension(tier).purchaseCap) return false;\r\n if (tier > 4) {\r\n if (!TimeStudy.timeDimension(tier).isBought) return false;\r\n if (RealityUpgrade(13).isLockingMechanics && Currency.eternityPoints.gte(dim.cost)) {\r\n if (!auto) RealityUpgrade(13).tryShowWarningModal();\r\n return false;\r\n }\r\n }\r\n if (Currency.eternityPoints.lt(dim.cost)) return false;\r\n if (Enslaved.isRunning && dim.bought > 0) return false;\r\n if (ImaginaryUpgrade(15).isLockingMechanics && EternityChallenge(7).completions > 0) {\r\n if (!auto) {\r\n ImaginaryUpgrade(15).tryShowWarningModal(`purchase a Time Dimension,\r\n which will produce Infinity Dimensions through EC7`);\r\n }\r\n return false;\r\n }\r\n\r\n Currency.eternityPoints.subtract(dim.cost);\r\n dim.amount = dim.amount.plus(1);\r\n dim.bought += 1;\r\n dim.cost = dim.nextCost(dim.bought);\r\n if(TimeDimension(tier).bought > TimeDimension(tier).purchaseCap) TimeDimension(tier).bought = TimeDimension(tier).purchaseCap;\r\n return true;\r\n}\r\n\r\nexport function resetTimeDimensions() {\r\n for (const dim of TimeDimensions.all) dim.amount = new Decimal(dim.bought);\r\n updateTimeDimensionCosts();\r\n}\r\n\r\nexport function fullResetTimeDimensions() {\r\n for (const dim of TimeDimensions.all) {\r\n dim.cost = new Decimal(dim.baseCost);\r\n dim.amount = DC.D0;\r\n dim.bought = 0;\r\n }\r\n}\r\n\r\nexport function toggleAllTimeDims() {\r\n const areEnabled = Autobuyer.timeDimension(1).isActive;\r\n for (let i = 1; i < 9; i++) {\r\n Autobuyer.timeDimension(i).isActive = !areEnabled;\r\n }\r\n}\r\n\r\nexport function buyMaxTimeDimension(tier, portionToSpend = 1, isMaxAll = false) {\r\n const canSpend = Currency.eternityPoints.value.times(portionToSpend);\r\n const dim = TimeDimension(tier);\r\n if (canSpend.lt(dim.cost)) return false;\r\n if (TimeDimension(tier).bought >= TimeDimension(tier).purchaseCap) return false;\r\n if (tier > 4) {\r\n if (!TimeStudy.timeDimension(tier).isBought) return false;\r\n if (RealityUpgrade(13).isLockingMechanics) {\r\n if (!isMaxAll) RealityUpgrade(13).tryShowWarningModal();\r\n return false;\r\n }\r\n }\r\n if (ImaginaryUpgrade(15).isLockingMechanics && EternityChallenge(7).completions > 0) {\r\n if (!isMaxAll) {\r\n ImaginaryUpgrade(15).tryShowWarningModal(`purchase a Time Dimension,\r\n which will produce Infinity Dimensions through EC7`);\r\n }\r\n return false;\r\n }\r\n if (Enslaved.isRunning) return buySingleTimeDimension(tier);\r\n let bulk = null;\r\n try{\r\n bulk = bulkBuyBinarySearch(canSpend, {\r\n costFunction: bought => dim.nextCost(bought),\r\n cumulative: true,\r\n firstCost: dim.cost,\r\n }, dim.bought);\r\n }\r\n catch{\r\n dim.bought = TimeDimension(8).purchaseCap;//I'll just use 8\r\n return true;\r\n }\r\n if (!bulk) return false;\r\n Currency.eternityPoints.subtract(bulk.purchasePrice);\r\n dim.amount = dim.amount.plus(bulk.quantity);\r\n dim.bought += bulk.quantity;\r\n dim.cost = dim.nextCost(dim.bought);\r\n if(TimeDimension(tier).bought > TimeDimension(tier).purchaseCap) TimeDimension(tier).bought = TimeDimension(tier).purchaseCap;\r\n return true;\r\n}\r\n\r\nexport function maxAllTimeDimensions() {\r\n // Try to buy single from the highest affordable new dimensions\r\n for (let i = 8; i > 0 && TimeDimension(i).bought === 0; i--) {\r\n buySingleTimeDimension(i, true);\r\n }\r\n\r\n // Buy everything costing less than 1% of initial EP\r\n for (let i = 8; i > 0; i--) {\r\n buyMaxTimeDimension(i, 0.01, true);\r\n }\r\n\r\n // Loop buying the cheapest dimension possible; explicit infinite loops make me nervous\r\n const unlockedDimensions = TimeDimensions.all.filter(d => d.isUnlocked);\r\n for (let stop = 0; stop < 1000; stop++) {\r\n const cheapestDim = unlockedDimensions.reduce((a, b) => (b.cost.gte(a.cost) ? a : b));\r\n if (!buySingleTimeDimension(cheapestDim.tier, true)) break;\r\n }\r\n}\r\n\r\nexport function timeDimensionCommonMultiplier() {\r\n let mult = new Decimal(ShopPurchase.allDimPurchases.currentMult)\r\n .timesEffectsOf(\r\n Achievement(105),\r\n Achievement(128),\r\n TimeStudy(93),\r\n TimeStudy(103),\r\n TimeStudy(151),\r\n TimeStudy(221),\r\n TimeStudy(301),\r\n EternityChallenge(10).reward,\r\n EternityUpgrade.tdMultAchs,\r\n EternityUpgrade.tdMultTheorems,\r\n EternityUpgrade.tdMultRealTime,\r\n Replicanti.areUnlocked && Replicanti.amount.gt(1) ? DilationUpgrade.tdMultReplicanti : null,\r\n Pelle.isDoomed ? null : RealityUpgrade(22),\r\n AlchemyResource.dimensionality,\r\n PelleRifts.chaos\r\n );\r\n\r\n if(EternityChallenge(1).completions >= 1){\r\n mult = mult.timesEffectsOf(EternityChallenge(1).reward);\r\n }\r\n if(EternityChallenge(10).completions >= 1){\r\n mult = mult.timesEffectsOf(EternityChallenge(10).reward);\r\n }\r\n if (EternityChallenge(9).isRunning) {\r\n mult = mult.times(\r\n Decimal.pow(\r\n Math.clampMin(Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate / 7).log2(), 1),\r\n 4)\r\n .clampMin(1));\r\n }\r\n\r\n if (Ra.unlocks.relicShardBoost.isUnlocked) mult = mult.pow(1 + ((Currency.relicShards.value.clampMin(1)).log10() / 1337));\r\n if (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(1).completions >= 1 && !Pelle.isDoomed) mult = mult.pow(EternityChallenge(1).vReward.effectValue);\r\n if (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(10).completions >= 1 && !Pelle.isDoomed) mult = mult.pow(EternityChallenge(10).vReward.effectValue);\r\n if (Ra.unlocks.vAchMilestone2AffectsIDsAndTDs.isUnlocked){\r\n mult = mult.pow(VUnlocks.adPow.effectOrDefault(1), 0.5);\r\n }\r\n return mult;\r\n}\r\n\r\nexport function updateTimeDimensionCosts() {\r\n for (let i = 1; i <= 8; i++) {\r\n const dim = TimeDimension(i);\r\n dim.cost = dim.nextCost(dim.bought);\r\n }\r\n}\r\n\r\nclass TimeDimensionState extends DimensionState {\r\n constructor(tier) {\r\n super(() => player.dimensions.time, tier);\r\n const BASE_COSTS = [null, DC.D1, DC.D5, DC.E2, DC.E3, DC.E2350, DC.E2650, DC.E3000, DC.E3350];\r\n this._baseCost = BASE_COSTS[tier];\r\n const COST_MULTS = [null, 3, 9, 27, 81, 24300, 72900, 218700, 656100];\r\n this._costMultiplier = COST_MULTS[tier];\r\n const E6000_SCALING_AMOUNTS = [null, 7322, 4627, 3382, 2665, 833, 689, 562, 456];\r\n this._e6000ScalingAmount = E6000_SCALING_AMOUNTS[tier];\r\n const COST_THRESHOLDS = [Decimal.NUMBER_MAX_VALUE, DC.E1300, DC.E6000];\r\n this._costIncreaseThresholds = COST_THRESHOLDS;\r\n }\r\n\r\n /** @returns {Decimal} */\r\n get cost() {\r\n return this.data.cost;\r\n }\r\n\r\n /** @param {Decimal} value */\r\n set cost(value) { this.data.cost = value; }\r\n\r\n nextCost(bought) {\r\n if (this._tier > 4 && bought < this.e6000ScalingAmount) {\r\n const cost = Decimal.pow(this.costMultiplier, bought).times(this.baseCost);\r\n if (PelleRifts.paradox.milestones[0].canBeApplied) {\r\n return cost.div(\"1e2250\").pow(0.5);\r\n }\r\n return cost;\r\n }\r\n\r\n const costMultIncreases = [1, 1.5, 2.2];\r\n for (let i = 0; i < this._costIncreaseThresholds.length; i++) {\r\n const cost = Decimal.pow(this.costMultiplier * costMultIncreases[i], bought).times(this.baseCost);\r\n if (cost.lt(this._costIncreaseThresholds[i])) return cost;\r\n }\r\n\r\n let base = this.costMultiplier;\r\n if (this._tier <= 4) base *= 2.2;\r\n const exponent = this.e6000ScalingAmount + (bought - this.e6000ScalingAmount) * TimeDimensions.scalingPast1e6000;\r\n const cost = Decimal.pow(base, exponent).times(this.baseCost);\r\n\r\n if (PelleRifts.paradox.milestones[0].canBeApplied && this._tier > 4) {\r\n return cost.div(\"1e2250\").pow(0.5);\r\n }\r\n return cost;\r\n }\r\n\r\n get isUnlocked() {\r\n return this._tier < 5 || TimeStudy.timeDimension(this._tier).isBought;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return this.isAffordable;\r\n }\r\n\r\n get isAffordable() {\r\n return Currency.eternityPoints.gte(this.cost);\r\n }\r\n\r\n get multiplier() {\r\n const tier = this._tier;\r\n\r\n if (EternityChallenge(11).isRunning) return DC.D1;\r\n let mult = GameCache.timeDimensionCommonMultiplier.value\r\n .timesEffectsOf(\r\n tier === 1 ? TimeStudy(11) : null,\r\n tier === 1 ? TimeStudy(413) : null,\r\n tier === 3 ? TimeStudy(73) : null,\r\n tier === 4 ? TimeStudy(227) : null,\r\n TimeStudy(313),\r\n );\r\n\r\n const dim = TimeDimension(tier);\r\n const value = Ra.continuumActive ? dim.continuumValue:dim.bought;\r\n let x = Ra.unlocks.uncap8TdPurchaseMult.isUnlocked ? false : tier === 8;\r\n const bought = x ? Math.clampMax(value, 1e8) : value;\r\n mult = mult.times(Decimal.pow(dim.powerMultiplier, bought));\r\n\r\n mult = mult.pow(getAdjustedGlyphEffect(\"timepow\"));\r\n mult = mult.pow(getAdjustedGlyphEffect(\"effarigdimensions\"));\r\n mult = mult.pow(getAdjustedGlyphEffect(\"curseddimensions\"));\r\n mult = mult.powEffectOf(AlchemyResource.time);\r\n mult = mult.pow(Ra.momentumValue);\r\n mult = mult.pow(ImaginaryUpgrade(11).effectOrDefault(1));\r\n mult = mult.powEffectOf(PelleRifts.paradox);\r\n\r\n if (player.dilation.active || PelleStrikes.dilation.hasStrike) {\r\n mult = dilatedValueOf(mult);\r\n }\r\n\r\n if (Effarig.isRunning) {\r\n mult = Effarig.multiplier(mult);\r\n } else if (V.isRunning) {\r\n mult = mult.pow(0.5);\r\n } else if (V.isSuperRunning) {\r\n mult = mult.pow(0.000001);\r\n }\r\n\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n mult = mult.pow(corruptionPenalties.soF.tdpow[player.mending.corruption[9]]);\r\n if(CorruptionUpgrade(25).isBought&&player.mending.corruption[9]>=4) mult = mult.pow(CorruptionUpgrade(25).effectOrDefault(1))\r\n }\r\n\r\n return mult;\r\n }\r\n\r\n get productionPerSecond() {\r\n if (EternityChallenge(1).isRunning || EternityChallenge(10).isRunning ||\r\n (Laitela.isRunning && this.tier > Laitela.maxAllowedDimension)) {\r\n return DC.D0;\r\n }\r\n if (EternityChallenge(11).isRunning) {\r\n return this.totalAmount;\r\n }\r\n let production = this.totalAmount.times(this.multiplier);\r\n if (EternityChallenge(7).isRunning) {\r\n production = production.times(Tickspeed.perSecond);\r\n }\r\n if (this._tier === 1 && !EternityChallenge(7).isRunning) {\r\n production = production.pow(getAdjustedGlyphEffect(\"timeshardpow\"));\r\n }\r\n return production;\r\n }\r\n\r\n get rateOfChange() {\r\n const tier = this._tier;\r\n let toGain = DC.D0;\r\n if (tier === 8) {\r\n if (Ra.unlocks.improvedECRewards.isUnlocked) EternityChallenge(7).vReward.applyEffect(v => toGain = v);\r\n } else {\r\n toGain = TimeDimension(tier + 1).productionPerSecond;\r\n }\r\n const current = Decimal.max(this.totalAmount, 1);\r\n return toGain.times(10).dividedBy(current).times(getGameSpeedupForDisplay());\r\n }\r\n\r\n get isProducing() {\r\n const tier = this.tier;\r\n if (EternityChallenge(1).isRunning ||\r\n EternityChallenge(10).isRunning ||\r\n (Laitela.isRunning && tier > Laitela.maxAllowedDimension)) {\r\n return false;\r\n }\r\n return this.totalAmount.gt(0);\r\n }\r\n\r\n get baseCost() {\r\n return this._baseCost;\r\n }\r\n\r\n get costMultiplier() {\r\n return this._costMultiplier;\r\n }\r\n\r\n get powerMultiplier() {\r\n return DC.D4\r\n .timesEffectsOf(this._tier === 8 ? GlyphSacrifice.time : null)\r\n .pow(ImaginaryUpgrade(14).effectOrDefault(1));\r\n }\r\n\r\n get e6000ScalingAmount() {\r\n return this._e6000ScalingAmount;\r\n }\r\n\r\n get costIncreaseThresholds() {\r\n return this._costIncreaseThresholds;\r\n }\r\n\r\n get requirementReached() {\r\n return this._tier < 5 ||\r\n (TimeStudy.timeDimension(this._tier).isAffordable && TimeStudy.timeDimension(this._tier - 1).isBought);\r\n }\r\n\r\n get purchaseCap() {\r\n let pC=5e14;\r\n if (player.timestudy.studies.includes(310)) pC = pC * (Math.max(Math.sqrt(Math.log10(Currency.replicanti.value.exponent+1)),1))\r\n return pC;\r\n }\r\n\r\n get isCapped() {\r\n return this.bought >= this.purchaseCap;\r\n }\r\n\r\n get continuumValue() {\r\n if(Pelle.isDoomed) return 0;\r\n if(!this.isUnlocked) return 0;\r\n if(!Ra.continuumActive) return 0;\r\n const firstThreshold = [null, 647, 323, 214, 160, 0, 0, 0, 0][this.tier];\r\n const secondThreshold = [null, 1991, 1150, 808, 623, 0, 0, 0, 0][this.tier];\r\n const e6kThreshold = this.e6000ScalingAmount;\r\n const mult = this.costMultiplier;\r\n\r\n const logMoney = Currency.eternityPoints.value.log10();\r\n let logMult = Math.log10(mult);\r\n let logBase = this.baseCost.log10();\r\n let contValue = (logMoney - logBase)/logMult;\r\n\r\n if(this.tier < 5){\r\n if(contValue > firstThreshold){\r\n logMult = Math.log10(mult*1.5);\r\n logBase = this.nextCost(firstThreshold).log10();\r\n contValue = firstThreshold + (logMoney - logBase)/logMult;\r\n }\r\n if(contValue > secondThreshold){\r\n logMult = Math.log10(mult*2.2);\r\n logBase = this.nextCost(firstThreshold).log10();\r\n contValue = secondThreshold + (logMoney - logBase)/logMult;\r\n }\r\n }\r\n contValue = Math.min(contValue, (contValue-e6kThreshold)/TimeDimensions.scalingPast1e6000 + e6kThreshold);\r\n contValue *= 1 + Laitela.matterExtraPurchaseFactor;\r\n contValue = Math.clampMax(contValue, this.purchaseCap);\r\n return Math.clampMin(contValue, 0);\r\n }\r\n\r\n get totalAmount(){\r\n return this.amount.max(this.continuumValue);\r\n }\r\n\r\n tryUnlock() {\r\n if (this.isUnlocked) return;\r\n TimeStudy.timeDimension(this._tier).purchase();\r\n }\r\n}\r\n\r\n/**\r\n * @function\r\n * @param {number} tier\r\n * @return {TimeDimensionState}\r\n */\r\nexport const TimeDimension = TimeDimensionState.createAccessor();\r\n\r\nexport const TimeDimensions = {\r\n /**\r\n * @type {TimeDimensionState[]}\r\n */\r\n all: TimeDimension.index.compact(),\r\n\r\n get scalingPast1e6000() {\r\n return 4;\r\n },\r\n\r\n tick(diff) {\r\n for (let tier = 8; tier > 1; tier--) {\r\n TimeDimension(tier).produceDimensions(TimeDimension(tier - 1), new Decimal(diff).div(10));\r\n }\r\n\r\n if (EternityChallenge(7).isRunning) {\r\n TimeDimension(1).produceDimensions(InfinityDimension(8), diff);\r\n } else {\r\n TimeDimension(1).produceCurrency(Currency.timeShards, diff);\r\n }\r\n\r\n if(EternityChallenge(7).completions >= 1){ EternityChallenge(7).reward.applyEffect(production => {\r\n InfinityDimension(8).amount = InfinityDimension(8).amount.plus(production.times(new Decimal(diff).div(1000)));\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport function tryUnlockTimeDimensions() {\r\n if (TimeDimension(8).isUnlocked) return;\r\n for (let tier = 5; tier <= 8; ++tier) {\r\n if (TimeDimension(tier).isUnlocked) continue;\r\n TimeDimension(tier).tryUnlock();\r\n }\r\n}\r\n","import { DC } from \"../constants\";\r\nimport { WarpUpgrade } from \"../warp-upgrades\";\r\n\r\nimport { DimensionState } from \"./dimension\";\r\n\r\nexport function buySingleMultiversalDimension(tier, auto = false) {\r\n const dim = MultiversalDimension(tier);\r\n if (Currency.mendingPoints.lt(dim.cost)) return false;\r\n\r\n Currency.mendingPoints.subtract(dim.cost);\r\n dim.amount = dim.amount.plus(1);\r\n dim.bought += 1;\r\n dim.cost = dim.nextCost(dim.bought);\r\n return true;\r\n}\r\n\r\nexport function resetMultiversalDimensions() {\r\n for (const dim of MultiversalDimensions.all) dim.amount = new Decimal(dim.bought);\r\n updateMultiversalDimensionCosts();\r\n}\r\n\r\nexport function fullResetMultiversalDimensions() {\r\n for (const dim of MultiversalDimensions.all) {\r\n dim.cost = new Decimal(dim.baseCost);\r\n dim.amount = DC.D0;\r\n dim.bought = 0;\r\n }\r\n}\r\n\r\nexport function buyMaxMultiversalDimension(tier, portionToSpend = 1, isMaxAll = false) {\r\n const canSpend = Currency.mendingPoints.value.times(portionToSpend);\r\n const dim = MultiversalDimension(tier);\r\n if (canSpend.lt(dim.cost)) return false;\r\n let bulk = null;\r\n try{\r\n bulk = bulkBuyBinarySearch(canSpend, {\r\n costFunction: bought => dim.nextCost(bought),\r\n cumulative: true,\r\n firstCost: dim.cost,\r\n }, dim.bought);\r\n }\r\n catch {\r\n dim.bought = 1e15;\r\n return true;\r\n }\r\n if (!bulk) return false;\r\n Currency.mendingPoints.subtract(bulk.purchasePrice);\r\n dim.amount = dim.amount.plus(bulk.quantity);\r\n dim.bought += bulk.quantity;\r\n dim.cost = dim.nextCost(dim.bought);\r\n return true;\r\n}\r\n\r\nexport function maxAllMultiversalDimensions() {\r\n // Try to buy single from the highest affordable new dimensions\r\n for (let i = 8; i > 0 && MultiversalDimension(i).bought === 0; i--) {\r\n buySingleMultiversalDimension(i, true);\r\n }\r\n\r\n // Buy everything costing less than 1% of initial MvR\r\n for (let i = 8; i > 0; i--) {\r\n buyMaxMultiversalDimension(i, 0.01, true);\r\n }\r\n\r\n // Loop buying the cheapest dimension possible; explicit infinite loops make me nervous\r\n const unlockedDimensions = MultiversalDimensions.all;\r\n for (let stop = 0; stop < 1000; stop++) {\r\n const cheapestDim = unlockedDimensions.reduce((a, b) => (b.cost.gte(a.cost) ? a : b));\r\n if (!buySingleMultiversalDimension(cheapestDim.tier, true)) break;\r\n }\r\n}\r\n\r\nexport function multiversalDimensionCommonMultiplier() {\r\n let mult = new Decimal(1)\r\n return mult;\r\n}\r\n\r\nexport function updateMultiversalDimensionCosts() {\r\n for (let i = 1; i <= 8; i++) {\r\n const dim = MultiversalDimension(i);\r\n dim.cost = dim.nextCost(dim.bought);\r\n }\r\n}\r\n\r\nclass MultiversalDimensionState extends DimensionState {\r\n constructor(tier) {\r\n super(() => player.dimensions.multiversal, tier);\r\n const BASE_COSTS = [null, new Decimal(1e25), new Decimal(1e55), new Decimal(1e105), new Decimal(1e215), new Decimal(\"1e333\"), new Decimal(\"1e456\"), new Decimal(\"1e678\"), new Decimal(\"9.99e999\")];\r\n this._baseCost = BASE_COSTS[tier];\r\n const COST_MULTS = [null, 10, 50, 250, 1250, 6250, 3125, 156250, 781250];\r\n this._costMultiplier = COST_MULTS[tier];\r\n const E6000_SCALING_AMOUNTS = [null, 5e3, 5e3, 5e3, 5e3, 5e3, 5e3, 5e3, 5e3];\r\n this._e6000ScalingAmount = E6000_SCALING_AMOUNTS[tier];\r\n const COST_THRESHOLDS = [new Decimal(\"1e2000\"), new Decimal(\"1e8000\"), new Decimal(\"1e22000\")];\r\n this._costIncreaseThresholds = COST_THRESHOLDS;\r\n }\r\n\r\n /** @returns {Decimal} */\r\n get cost() {\r\n return this.data.cost;\r\n }\r\n\r\n /** @param {Decimal} value */\r\n set cost(value) { this.data.cost = value; }\r\n\r\n nextCost(bought) {\r\n if (this._tier > 4 && bought < this.e6000ScalingAmount) {\r\n const cost = Decimal.pow(this.costMultiplier, bought).times(this.baseCost);\r\n return cost;\r\n }\r\n\r\n const costMultIncreases = [5, 25, 125];\r\n for (let i = 0; i < this._costIncreaseThresholds.length; i++) {\r\n const cost = Decimal.pow(this.costMultiplier * costMultIncreases[i], bought).times(this.baseCost);\r\n if (cost.lt(this._costIncreaseThresholds[i])) return cost;\r\n }\r\n\r\n let base = this.costMultiplier;\r\n if (this._tier <= 4) base *= 125;\r\n const exponent = this.e6000ScalingAmount + (bought - this.e6000ScalingAmount) * MultiversalDimensions.scalingPast1e6000;\r\n const cost = Decimal.pow(base, exponent).times(this.baseCost);\r\n\r\n return cost;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return this.isAffordable;\r\n }\r\n\r\n get isAffordable() {\r\n return Currency.mendingPoints.gte(this.cost);\r\n }\r\n\r\n get multiplier() {\r\n const tier = this._tier;\r\n let mult = GameCache.multiversalDimensionCommonMultiplier.value\r\n\r\n const dim = MultiversalDimension(tier);\r\n const bought = dim.bought;\r\n mult = mult.times(Decimal.pow(dim.powerMultiplier, bought));\r\n\r\n if(tier==1){\r\n if(KohlerProgressUnlocks.antimatterGalaxy.isUnlocked) mult = mult.times(KohlerProgressUnlocks.antimatterGalaxy.effectValue)\r\n }\r\n\r\n return mult;\r\n }\r\n\r\n get productionPerSecond() {\r\n let production = this.totalAmount.times(this.multiplier);\r\n return production;\r\n }\r\n\r\n get rateOfChange() {\r\n const tier = this._tier;\r\n if (tier === 8) {\r\n return DC.D0;\r\n }\r\n const toGain = MultiversalDimension(tier + 1).productionPerSecond;\r\n const current = Decimal.max(this.totalAmount, 1);\r\n return toGain.times(10).dividedBy(current); // .times(getGameSpeedupForDisplay());\r\n }\r\n\r\n get isProducing() {\r\n const tier = this.tier;\r\n return this.totalAmount.gt(0);\r\n }\r\n\r\n get baseCost() {\r\n return this._baseCost;\r\n }\r\n\r\n get costMultiplier() {\r\n return this._costMultiplier;\r\n }\r\n\r\n get powerMultiplier() {\r\n return DC.D4;\r\n }\r\n\r\n get e6000ScalingAmount() {\r\n return this._e6000ScalingAmount;\r\n }\r\n\r\n get costIncreaseThresholds() {\r\n return this._costIncreaseThresholds;\r\n }\r\n\r\n get isCapped() {\r\n return this.bought >= this.purchaseCap;\r\n }\r\n\r\n get totalAmount(){\r\n return this.amount;\r\n }\r\n\r\n get galaxyBoost(){\r\n let x=(player.galBoostPoints.pow(1/(player.galBoostPoints.log10() ** 0.8))).div(100).add(1).toNumber();\r\n if(WarpUpgrade(9).isBought) x=(player.galBoostPoints.pow(1/(player.galBoostPoints.log10() ** 0.775))).div(100).add(1).add(Math.sqrt(player.galBoostPoints.log10())/100).toNumber();\r\n return x;\r\n }\r\n\r\n}\r\n\r\n/**\r\n * @function\r\n * @param {number} tier\r\n * @return {MultiversalDimensionState}\r\n */\r\nexport const MultiversalDimension = MultiversalDimensionState.createAccessor();\r\n\r\nexport const MultiversalDimensions = {\r\n /**\r\n * @type {MultiversalDimensionState[]}\r\n */\r\n all: MultiversalDimension.index.compact(),\r\n\r\n get scalingPast1e6000() {\r\n return 5;\r\n },\r\n\r\n tick(diff) {\r\n for (let tier = 8; tier > 1; tier--) {\r\n MultiversalDimension(tier).produceDimensions(MultiversalDimension(tier - 1), new Decimal(diff).div(10));\r\n }\r\n MultiversalDimension(1).produceCurrency(Currency.galBoostPoints, diff);\r\n }\r\n};\r\n","/**\r\n * Abstract representation of a full time study tree object. The intended usage is to supply the constructor with\r\n * an import string and a budget of time/space theorems, which it will use together to determine which studies can\r\n * actually be purchased in the specified order. All of the complex purchasing logic should be handled here, and not\r\n * in any TimeStudyState objects. During parsing, some minor additional info is stored in order to improve user\r\n * feedback when attempting to import other study trees.\r\n *\r\n * Usage notes:\r\n * - Unless commitToGameState() is called, this only ever creates a \"virtual\" tree object which does not change the\r\n * overall game state. This class serves the purpose of having all the purchasing and locking logic in one place.\r\n * Only upon calling commitToGameState() will the game actually try to get every study specified in tree.\r\n * - The general intent is that the logic in this class is meant to pull minimally from the extrenal game state; for\r\n * example, how many dimension paths are allowed or which ECs are unlockable depend on only the data in the tree\r\n * object itself and should not depend on the actual current game state\r\n * - All study entries must be Strings because numbers (normal TS) and EC# (ECs) need to be supported\r\n *\r\n * @member {Number[]} spentTheorems Two-element array containing TT/ST totals for studies which were actually\r\n * purchased after accounting for various conditions which would forbid some being bought (eg. cost or tree structure)\r\n * @member {String[]} invalidStudies Array of studies from the initial string which are correctly formatted\r\n * but don't actually exist; used for informational purposes elsewhere\r\n * @member {TimeStudyState[]} selectedStudies Array of all given valid studies, whether or not they are actually\r\n * accessible or purchasable in the given order\r\n * @member {TimeStudyState[]} purchasedStudies Array of studies which were actually purchased, using the given amount\r\n * of available theorems\r\n * @member {Boolean} startEC Whether or not to start an EC within purchasedStudies when committing to game state\r\n */\r\nexport class TimeStudyTree {\r\n // The first parameter will either be an import string or an array of studies (possibly with an EC at the end)\r\n constructor(studies) {\r\n this.spentTheorems = [0, 0];\r\n this.invalidStudies = [];\r\n this.purchasedStudies = [];\r\n this.selectedStudies = [];\r\n this.startEC = false;\r\n switch (typeof studies) {\r\n case \"string\":\r\n // Input parameter is an unparsed study import string\r\n if (TimeStudyTree.isValidImportString(studies)) {\r\n this.attemptBuyArray(this.parseStudyImport(studies), false);\r\n }\r\n break;\r\n case \"object\":\r\n // Input parameter is an array of time study objects\r\n this.attemptBuyArray([...studies], false);\r\n this.selectedStudies = [...studies];\r\n break;\r\n case \"undefined\":\r\n // If not supplied with anything, we leave everything at default values and don't attempt to buy anything\r\n break;\r\n default:\r\n throw new Error(\"Unrecognized input parameter for TimeStudyTree constructor\");\r\n }\r\n }\r\n\r\n // Note that this only checks pure formatting, not whether or not a study/EC actually exists, but verifying correct\r\n // formatting separately from verifying existence allows us to produce more useful in-game error messages for\r\n // import strings which are formatted correctly but aren't entirely valid\r\n static isValidImportString(input) {\r\n if (input.trim() === \"\") {\r\n return false;\r\n }\r\n let test = input.replaceAll(/ +/gu, \"\");\r\n TimeStudyTree.sets.forEach((_, x) => test = test.replaceAll(new RegExp(`${x},?`, \"gu\"), \"\"));\r\n return /^,?((\\d{2,3}(-\\d{2,3})?)\\b,?)*(\\|\\d{1,2}!?)?$/iu.test(test);\r\n }\r\n\r\n // Getter for all the studies in the current game state\r\n static get currentStudies() {\r\n const currentStudies = player.timestudy.studies.map(s => TimeStudy(s));\r\n if (player.challenge.eternity.unlocked !== 0) {\r\n currentStudies.push(TimeStudy.eternityChallenge(player.challenge.eternity.unlocked));\r\n }\r\n return currentStudies;\r\n }\r\n\r\n // Parses out the EC number from an import string (returns 0 for invalid or nonexistent EC ids)\r\n static getECFromString(input) {\r\n if (!this.isValidImportString(input)) return 0;\r\n const parts = input.split(\"|\");\r\n if (parts.length < 1) return 0;\r\n // Note: parseInt() seems to silently ignore the presence of \"!\"\r\n return parseInt(parts[1], 10);\r\n }\r\n\r\n // THIS METHOD HAS LASTING CONSEQUENCES ON THE GAME STATE. STUDIES WILL ACTUALLY BE PURCHASED IF POSSIBLE.\r\n // This method attempts to take the parameter array and purchase all the studies specified, using the current game\r\n // state to determine if they are affordable. Input array may be either an id array or a TimeStudyState array\r\n static commitToGameState(studyArray, auto = true, startEC = false) {\r\n for (const item of studyArray) {\r\n const study = typeof item === \"number\" ? TimeStudy(item) : item;\r\n if (study && !study.isBought) study.purchase(auto);\r\n // Note: This will automatically (silently) fail if we try to start an EC while we have a different one unlocked\r\n if (startEC && study instanceof ECTimeStudyState) EternityChallenge(study.id).start(auto);\r\n }\r\n GameCache.currentStudyTree.invalidate();\r\n }\r\n\r\n static get sets() {\r\n // Grouping of studies. The key followed by an array of the studies the key is a shorthand for.\r\n return new Map([\r\n [\"antimatter\", [71, 81, 91, 101]],\r\n [\"infinity\", [72, 82, 92, 102]],\r\n [\"time\", [73, 83, 93, 103]],\r\n [\"active\", [121, 131, 141]],\r\n [\"passive\", [122, 132, 142]],\r\n [\"idle\", [123, 133, 143]],\r\n [\"light\", [221, 223, 225, 227, 231, 233]],\r\n [\"dark\", [222, 224, 226, 228, 232, 234]],\r\n ...(Ra.unlocks.unlockHardV.canBeApplied\r\n ? [[\"triad\", [301, 302, 303, 304, 305, 306,307,308,309,310,311,312,313,321,322,323].slice(0, Ra.unlocks.unlockHardV.effectOrDefault(0))]]\r\n : []),\r\n ...(Ra.unlocks.unlockMyriads.canBeApplied\r\n ? [[\"myriad\", [401,402,403,411,412,413].slice(0, Ra.unlocks.unlockMyriads.effectOrDefault(0))]]\r\n : [])\r\n ]);\r\n }\r\n\r\n static truncateInput(input) {\r\n let internal = input.toLowerCase();\r\n // Convert every name into the ids it is a shorthand for\r\n this.sets.forEach((ids, name) => (internal = internal.replace(name, ids.join())));\r\n return internal\r\n .replace(/[|,]$/u, \"\")\r\n .replaceAll(\" \", \"\")\r\n // Allows 11,,21 to be parsed as 11,21 and 11,|1 to be parsed as 11|1\r\n .replace(/,{2,}/gu, \",\")\r\n .replace(/,\\|/gu, \"|\");\r\n }\r\n\r\n static formatStudyList(input) {\r\n const internal = input.toLowerCase().replaceAll(\" \", \"\");\r\n return internal.replaceAll(\",\", \", \").replace(\"|\", \" | \");\r\n }\r\n\r\n // This reads off all the studies in the import string and splits them into invalid and valid study IDs. We hold on\r\n // to invalid studies for additional information to present to the player\r\n parseStudyImport(input) {\r\n const studyDB = GameDatabase.eternity.timeStudies.normal.map(s => s.id);\r\n const output = [];\r\n const studiesString = TimeStudyTree.truncateInput(input).split(\"|\")[0];\r\n if (studiesString.length) {\r\n const studyCluster = studiesString.split(\",\");\r\n for (const studyRange of studyCluster) {\r\n const studyRangeSplit = studyRange.split(\"-\");\r\n const studyArray = studyRangeSplit[1]\r\n ? this.studyRangeToArray(studyRangeSplit[0], studyRangeSplit[1])\r\n : studyRangeSplit;\r\n for (const study of studyArray) {\r\n if (studyDB.includes(parseInt(study, 10))) {\r\n const tsObject = TimeStudy(study);\r\n this.selectedStudies.push(tsObject);\r\n output.push(tsObject);\r\n } else {\r\n this.invalidStudies.push(study);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // If the string has an EC indicated in it, append that to the end of the study array\r\n const ecString = input.split(\"|\")[1];\r\n this.startEC = input.endsWith(\"!\");\r\n if (!ecString) {\r\n // Study strings without an ending \"|##\" are still valid, but will result in ecString being undefined\r\n return output;\r\n }\r\n // Note: parseInt() seems to silently ignore the presence of \"!\"\r\n const ecID = parseInt(ecString, 10);\r\n const ecDB = GameDatabase.eternity.timeStudies.ec;\r\n // Specifically exclude 0 because saved presets will contain it by default\r\n if (!ecDB.map(c => c.id).includes(ecID) && ecID !== 0) {\r\n this.invalidStudies.push(`EC${ecID}`);\r\n return output;\r\n }\r\n if (ecID !== 0) output.push(TimeStudy.eternityChallenge(ecID));\r\n return output;\r\n }\r\n\r\n studyRangeToArray(firstNumber, lastNumber) {\r\n const studiesArray = [];\r\n const first = this.checkTimeStudyNumber(firstNumber);\r\n const last = this.checkTimeStudyNumber(lastNumber);\r\n if ((first !== 0) && (last !== 0)) {\r\n for (let id = first; id <= last; id++) {\r\n if (TimeStudy(id)) {\r\n studiesArray.push(id);\r\n }\r\n }\r\n }\r\n return studiesArray;\r\n }\r\n\r\n checkTimeStudyNumber(token) {\r\n const tsNumber = parseFloat(token);\r\n if (!TimeStudy(tsNumber) || (TimeStudy(tsNumber).isTriad && !Ra.canBuyTriad)) {\r\n return 0;\r\n }\r\n return tsNumber;\r\n }\r\n\r\n // Attempt to purchase all studies specified in the array which may be either study IDs (which get converted) or\r\n // study objects. The method needs to support both because turning it entirely to studies causes circular references\r\n // which make the game fail to load\r\n attemptBuyArray(studyArray, checkCosts) {\r\n for (const study of studyArray) {\r\n const toBuy = typeof study === \"object\" ? study : TimeStudy(study);\r\n if (this.hasRequirements(toBuy)) this.buySingleStudy(toBuy, checkCosts);\r\n }\r\n }\r\n\r\n // Tries to buy a single study, accounting for all various requirements and locking behavior in the game. Does not\r\n // update anything cost-related, use buySingleStudy() to actually purchase. checkOnlyStructure is used to ignore\r\n // EC secondary requirements\r\n hasRequirements(study, checkOnlyStructure = false) {\r\n // Import strings can contain repeated or undefined entries\r\n if (!study || this.purchasedStudies.includes(study)) return false;\r\n\r\n // Because the player data may not reflect the state of the TimeStudyTree object's purchasedStudies,\r\n // we have to do all the checks here with purchasedStudies. study.isBought and similar functions cannot be used.\r\n const check = req => (typeof req === \"number\"\r\n ? this.purchasedStudies.includes(TimeStudy(req))\r\n : req());\r\n const config = study.config;\r\n let reqSatisfied;\r\n switch (config.reqType) {\r\n case TS_REQUIREMENT_TYPE.AT_LEAST_ONE:\r\n reqSatisfied = config.requirement.some(r => check(r));\r\n break;\r\n case TS_REQUIREMENT_TYPE.ALL:\r\n reqSatisfied = config.requirement.every(r => check(r));\r\n break;\r\n case TS_REQUIREMENT_TYPE.DIMENSION_PATH:\r\n reqSatisfied = config.requirement.every(r => check(r)) && this.currDimPathCount < this.allowedDimPathCount;\r\n break;\r\n default:\r\n throw Error(`Unrecognized TS requirement type: ${this.reqType}`);\r\n }\r\n if (study instanceof ECTimeStudyState) {\r\n if (this.purchasedStudies.some(s => s instanceof ECTimeStudyState)) return false;\r\n const hasForbiddenStudies = !Perk.studyECRequirement.isBought &&\r\n study.config.secondary.forbiddenStudies?.some(s => check(s));\r\n // We want to only check the structure for script template error instructions\r\n if (checkOnlyStructure) {\r\n return reqSatisfied && !hasForbiddenStudies;\r\n }\r\n const hasEnoughTT = Currency.timeTheorems.value.subtract(this.spentTheorems[0]).gte(study.cost);\r\n const secondaryGoal = Perk.studyECRequirement.isBought || study.isEntryGoalMet;\r\n return reqSatisfied && !hasForbiddenStudies && (study.isBought || (secondaryGoal && hasEnoughTT));\r\n }\r\n return reqSatisfied;\r\n }\r\n\r\n // Buys the specified study; no requirement verification beyond cost, use hasRequirements() to verify proper structure\r\n buySingleStudy(study, checkCosts) {\r\n const config = study.config;\r\n const stDiscount = VUnlocks.raUnlock.effectOrDefault(0);\r\n const stNeeded = config.STCost && config.requiresST.some(s => this.purchasedStudies.includes(TimeStudy(s)))\r\n ? Math.clampMin(config.STCost - stDiscount, 0)\r\n : 0;\r\n // Took these out of the checkCosts check as these aren't available early game\r\n const maxST = Pelle.isDoomed ? 0 : V.spaceTheorems;\r\n const hasST = this.spentTheorems[1] + stNeeded <= maxST;\r\n if (checkCosts) {\r\n const maxTT = Currency.timeTheorems.value.add(GameCache.currentStudyTree.value.spentTheorems[0])\r\n .clampMax(Number.MAX_VALUE).toNumber();\r\n const hasTT = this.spentTheorems[0] + config.cost <= maxTT;\r\n if (!hasTT || !hasST) return;\r\n }\r\n\r\n // Don't add the costs nor add the study if it is one using ST and there are none\r\n if (maxST === 0 && stNeeded > 0) return;\r\n this.spentTheorems[0] += config.cost;\r\n this.spentTheorems[1] += stNeeded;\r\n\r\n this.purchasedStudies.push(study);\r\n }\r\n\r\n get currDimPathCount() {\r\n return [71, 72, 73].countWhere(x => this.purchasedStudies.includes(TimeStudy(x)));\r\n }\r\n\r\n get allowedDimPathCount() {\r\n if (DilationUpgrade.timeStudySplit.isBought) return 3;\r\n if (this.purchasedStudies.includes(TimeStudy(201))) return 2;\r\n return 1;\r\n }\r\n\r\n get dimensionPaths() {\r\n const pathSet = new Set();\r\n const validPaths = [TIME_STUDY_PATH.ANTIMATTER_DIM, TIME_STUDY_PATH.INFINITY_DIM, TIME_STUDY_PATH.TIME_DIM];\r\n for (const path of validPaths) {\r\n const pathEntry = NormalTimeStudies.pathList.find(p => p.path === path);\r\n for (const study of this.purchasedStudies) {\r\n if (pathEntry.studies.includes(study.id)) {\r\n pathSet.add(pathEntry.name);\r\n break;\r\n }\r\n }\r\n }\r\n return Array.from(pathSet);\r\n }\r\n\r\n get pacePaths() {\r\n const pathSet = new Set();\r\n const validPaths = [TIME_STUDY_PATH.ACTIVE, TIME_STUDY_PATH.PASSIVE, TIME_STUDY_PATH.IDLE];\r\n for (const path of validPaths) {\r\n const pathEntry = NormalTimeStudies.pathList.find(p => p.path === path);\r\n for (const study of this.purchasedStudies) {\r\n if (pathEntry.studies.includes(study.id)) {\r\n pathSet.add(pathEntry.name);\r\n break;\r\n }\r\n }\r\n }\r\n return Array.from(pathSet);\r\n }\r\n\r\n get ec() {\r\n // This technically takes the very first EC entry if there's more than one, but that shouldn't happen in practice\r\n const ecStudies = this.purchasedStudies.find(s => s instanceof ECTimeStudyState);\r\n return ecStudies ? ecStudies.id : 0;\r\n }\r\n\r\n // Creates an export string based on all currently purchased studies; gives an ! at the end if currently in an EC\r\n get exportString() {\r\n return `${this.purchasedStudies\r\n .filter(s => s instanceof NormalTimeStudyState)\r\n .map(s => s.id)\r\n .join(\",\")}|${this.ec}${player.challenge.eternity.current === 0 ? \"\" : \"!\"}`;\r\n }\r\n}\r\n","import { TimeStudy } from \"./normal-time-study\";\r\nimport { TimeStudyState } from \"./time-studies\";\r\n\r\nexport class ECTimeStudyState extends TimeStudyState {\r\n constructor(config) {\r\n super(config, TIME_STUDY_TYPE.ETERNITY_CHALLENGE);\r\n this.invalidateRequirement();\r\n }\r\n\r\n get isBought() {\r\n return player.challenge.eternity.unlocked === this.id;\r\n }\r\n\r\n purchase(auto) {\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return false;\r\n EternityChallenge(this.id).hasUnlocked = true;\r\n const clickTime = Date.now();\r\n\r\n if (this.isBought && player.challenge.eternity.current === 0 && !auto) {\r\n // If it is bought and you aren't in a Eternity Challenge, check\r\n if (clickTime - ui.lastClickTime < 750) {\r\n // If you last clicked on it within 3/4ths of a second, enter them in or ask confirmation if they have that on\r\n ui.lastClickTime = 0;\r\n EternityChallenge(this.id).requestStart();\r\n } else {\r\n // Otherwise, record it for the next time they click\r\n ui.lastClickTime = clickTime;\r\n }\r\n } else if (!this.isBought && this.canBeBought) {\r\n // If you haven't bought it and can buy it, reset the time of click, and\r\n // send you into the EC, deduct your resources, and move you to the EC tab if that isn't disabled\r\n ui.lastClickTime = 0;\r\n\r\n player.challenge.eternity.unlocked = this.id;\r\n if (!auto) {\r\n Tab.challenges.eternity.show();\r\n }\r\n player.challenge.eternity.requirementBits |= 1 << this.id;\r\n Currency.timeTheorems.subtract(this.cost);\r\n TimeStudyTree.commitToGameState([TimeStudy.eternityChallenge(this.id)]);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n purchaseUntil() {\r\n const studiesToBuy = [\r\n undefined,\r\n 171, 171, 171,\r\n 143, 42, 121,\r\n 111, 123, 151,\r\n 181, 181, 181\r\n ];\r\n // If the player shift clicks an EC study that is immediately buyable, we try to\r\n // buy it first - in case buying studies up to that point renders it unaffordable.\r\n this.purchase();\r\n TimeStudyTree.commitToGameState(buyStudiesUntil(studiesToBuy[this.id], this.id));\r\n // For EC 11 and 12, we can't choose between light and dark,\r\n // but we can buy the 191/193\r\n if (this.id === 11) {\r\n TimeStudy(191).purchase();\r\n } else if (this.id === 12) {\r\n TimeStudy(193).purchase();\r\n }\r\n this.purchase();\r\n }\r\n\r\n get canBeBought() {\r\n if (!this.isAffordable) {\r\n return false;\r\n }\r\n if (player.challenge.eternity.unlocked !== 0) {\r\n return false;\r\n }\r\n if (!this.config.requirement.some(s => TimeStudy(s).isBought)) {\r\n return false;\r\n }\r\n return this.allSecondaryRequirementsMet;\r\n }\r\n\r\n /**\r\n * @returns {EternityChallengeState}\r\n */\r\n get challenge() {\r\n return EternityChallenge(this.id);\r\n }\r\n\r\n get requirementTotal() {\r\n return this.config.secondary.required(this.challenge.completions);\r\n }\r\n\r\n get requirementCurrent() {\r\n const current = this.config.secondary.current();\r\n if (this.cachedCurrentRequirement === undefined) {\r\n this.cachedCurrentRequirement = current;\r\n } else if (typeof current === \"number\") {\r\n this.cachedCurrentRequirement = Math.max(this.cachedCurrentRequirement, current);\r\n } else {\r\n this.cachedCurrentRequirement = this.cachedCurrentRequirement.clampMin(current);\r\n }\r\n return this.cachedCurrentRequirement;\r\n }\r\n\r\n get allSecondaryRequirementsMet() {\r\n return Perk.studyECRequirement.isBought || !this.hasForbiddenStudies && this.isEntryGoalMet;\r\n }\r\n\r\n get hasForbiddenStudies() {\r\n return this.config.secondary.forbiddenStudies?.some(s => TimeStudy(s).isBought);\r\n }\r\n\r\n get isEntryGoalMet() {\r\n if (this.wasRequirementPreviouslyMet) return true;\r\n if (this.config.secondary.forbiddenStudies) return true;\r\n const current = this.requirementCurrent;\r\n const total = this.requirementTotal;\r\n return typeof current === \"number\" ? current >= total : current.gte(total);\r\n }\r\n\r\n get wasRequirementPreviouslyMet() {\r\n if (this.id === 11 || this.id === 12) return false;\r\n return (player.challenge.eternity.requirementBits & (1 << this.id)) !== 0;\r\n }\r\n\r\n invalidateRequirement() {\r\n this.cachedCurrentRequirement = undefined;\r\n }\r\n}\r\n\r\nECTimeStudyState.studies = mapGameData(\r\n GameDatabase.eternity.timeStudies.ec,\r\n config => new ECTimeStudyState(config)\r\n);\r\n\r\n/**\r\n * @param {number} id\r\n * @returns {ECTimeStudyState}\r\n */\r\nTimeStudy.eternityChallenge = function(id) {\r\n return ECTimeStudyState.studies[id];\r\n};\r\n\r\n/**\r\n * @returns {ECTimeStudyState|undefined}\r\n */\r\nTimeStudy.eternityChallenge.current = function() {\r\n return player.challenge.eternity.unlocked\r\n ? TimeStudy.eternityChallenge(player.challenge.eternity.unlocked)\r\n : undefined;\r\n};\r\n\r\nECTimeStudyState.invalidateCachedRequirements = function() {\r\n ECTimeStudyState.studies.forEach(study => study.invalidateRequirement());\r\n};\r\n","import { TimeStudy } from \"./normal-time-study\";\r\nimport { TimeStudyState } from \"./time-studies\";\r\n\r\nexport class DilationTimeStudyState extends TimeStudyState {\r\n constructor(config) {\r\n super(config, TIME_STUDY_TYPE.DILATION);\r\n }\r\n\r\n get isBought() {\r\n return player.dilation.studies.includes(this.id);\r\n }\r\n\r\n get canBeBought() {\r\n return this.isAffordable && this.config.requirement();\r\n }\r\n\r\n get description() {\r\n return this.config.description;\r\n }\r\n\r\n get cost() {\r\n return typeof this.config.cost === \"function\" ? this.config.cost() : this.config.cost;\r\n }\r\n\r\n get totalTimeTheoremRequirement() {\r\n return this.id === 1 ? 12900 : 0;\r\n }\r\n\r\n purchase(quiet = false) {\r\n if (this.isBought || !this.canBeBought) return false;\r\n if (this.id === 1) {\r\n // ID 1 is the dilation unlock study\r\n if (!quiet) {\r\n Tab.eternity.dilation.show();\r\n }\r\n if (Perk.autounlockDilation1.canBeApplied) {\r\n for (const id of [4, 5, 6]) player.dilation.upgrades.add(id);\r\n }\r\n if (Perk.autounlockDilation2.canBeApplied) {\r\n for (const id of [7, 8, 9]) player.dilation.upgrades.add(id);\r\n if (MendingMilestone.two.isReached){\r\n player.dilation.upgrades.add(14);\r\n player.dilation.upgrades.add(15);\r\n }\r\n }\r\n if (!Pelle.isDoomed) Currency.tachyonParticles.bumpTo(Perk.startTP.effectOrDefault(0));\r\n if (Ra.unlocks.unlockDilationStartingTP.canBeApplied && !isInCelestialReality() && !Pelle.isDoomed) {\r\n Currency.tachyonParticles.bumpTo(getTP(Ra.unlocks.unlockDilationStartingTP.effectOrDefault(0), false));\r\n }\r\n TabNotification.dilationAfterUnlock.tryTrigger();\r\n }\r\n if (this.id === 6) {\r\n // ID 6 is the reality unlock study\r\n if (!PlayerProgress.realityUnlocked()) {\r\n Modal.message.show(`Reality Machine gain for your first Reality is reduced above ${format(\"1e6000\")} Eternity\r\n Points and capped at ${format(\"1e8000\")} Eternity Points. This is due to balance changes made in the Reality\r\n update which affect the difficulty of reaching those amounts, such as the increased Time Dimension cost\r\n scaling above ${format(\"1e6000\")}.`, {}, 3);\r\n EventHub.dispatch(GAME_EVENT.REALITY_FIRST_UNLOCKED);\r\n }\r\n if (!Perk.autounlockReality.isBought) Tab.reality.glyphs.show();\r\n }\r\n\r\n player.dilation.studies.push(this.id);\r\n Currency.timeTheorems.subtract(this.cost);\r\n return true;\r\n }\r\n}\r\n\r\nDilationTimeStudyState.studies = mapGameData(\r\n GameDatabase.eternity.timeStudies.dilation,\r\n config => new DilationTimeStudyState(config)\r\n);\r\n\r\n/**\r\n * @type {DilationTimeStudyState}\r\n */\r\nTimeStudy.dilation = DilationTimeStudyState.studies[1];\r\n\r\n/**\r\n * @param {number} tier\r\n * @returns {DilationTimeStudyState}\r\n */\r\nTimeStudy.timeDimension = function(tier) {\r\n return DilationTimeStudyState.studies[tier - 3];\r\n};\r\n\r\n/**\r\n * @type {DilationTimeStudyState}\r\n */\r\nTimeStudy.reality = DilationTimeStudyState.studies[6];\r\n\r\nTimeStudy.boughtDilationTS = function() {\r\n return player.dilation.studies.map(id => DilationTimeStudyState.studies[id]);\r\n};\r\n","import { TimeStudy } from \"./normal-time-study\";\r\nimport { Ra } from \"../globals\";\r\n\r\nexport class TimeStudyConnection {\r\n constructor(from, to, override) {\r\n this._from = from;\r\n this._to = to;\r\n this._override = override;\r\n }\r\n\r\n get from() {\r\n return this._from;\r\n }\r\n\r\n get to() {\r\n return this._to;\r\n }\r\n\r\n get isOverridden() {\r\n return this._override !== undefined && this._override();\r\n }\r\n\r\n get isSatisfied() {\r\n return this.isOverridden || this._from.isBought;\r\n }\r\n}\r\n\r\n/**\r\n * @type {TimeStudyConnection[]}\r\n */\r\nTimeStudy.allConnections = (function() {\r\n const TS = id => TimeStudy(id);\r\n const EC = id => TimeStudy.eternityChallenge(id);\r\n const connections = [\r\n [TS(11), TS(21)],\r\n [TS(11), TS(22)],\r\n\r\n [TS(21), TS(31)],\r\n [TS(22), TS(33)],\r\n [TS(22), TS(32)],\r\n\r\n [TS(31), TS(41)],\r\n [TS(32), TS(42)],\r\n\r\n [TS(41), TS(51)],\r\n [TS(42), TS(51)],\r\n [TS(42), EC(5)],\r\n\r\n [TS(42), TS(62), () => !Perk.bypassEC5Lock.isBought],\r\n\r\n [TS(51), TS(61)],\r\n [EC(5), TS(62), () => Perk.bypassEC5Lock.isBought],\r\n\r\n [TS(61), TS(71)],\r\n [TS(61), TS(72)],\r\n [TS(61), TS(73)],\r\n\r\n [TS(71), TS(81)],\r\n [TS(72), TS(82)],\r\n [TS(73), TS(83)],\r\n\r\n [TS(81), TS(91)],\r\n [TS(82), TS(92)],\r\n [TS(83), TS(93)],\r\n\r\n [TS(91), TS(101)],\r\n [TS(92), TS(102)],\r\n [TS(93), TS(103)],\r\n\r\n [TS(101), TS(111)],\r\n [TS(102), TS(111)],\r\n [TS(103), TS(111)],\r\n\r\n [TS(111), EC(7)],\r\n\r\n [TS(111), TS(121)],\r\n [TS(111), TS(122)],\r\n [TS(111), TS(123)],\r\n\r\n [TS(121), TS(131)],\r\n [TS(122), TS(132)],\r\n [TS(123), TS(133)],\r\n [TS(121), EC(6)],\r\n [TS(123), EC(8)],\r\n\r\n [TS(131), TS(141)],\r\n [TS(132), TS(142)],\r\n [TS(133), TS(143)],\r\n\r\n [TS(141), TS(151)],\r\n [TS(142), TS(151)],\r\n [TS(143), TS(151)],\r\n [TS(143), EC(4)],\r\n\r\n [TS(151), EC(9)],\r\n\r\n [TS(151), TS(161)],\r\n [TS(151), TS(162)],\r\n\r\n [TS(161), TS(171)],\r\n [TS(162), TS(171)],\r\n\r\n [TS(171), EC(1)],\r\n [TS(171), EC(2)],\r\n [TS(171), EC(3)],\r\n\r\n [TS(171), TS(181),\r\n () => !Perk.bypassEC1Lock.isBought || !Perk.bypassEC2Lock.isBought || !Perk.bypassEC3Lock.isBought],\r\n\r\n [EC(1), TS(181), () => Perk.bypassEC1Lock.isBought],\r\n [EC(2), TS(181), () => Perk.bypassEC2Lock.isBought],\r\n [EC(3), TS(181), () => Perk.bypassEC3Lock.isBought],\r\n\r\n [TS(181), EC(10)],\r\n\r\n [EC(10), TS(191)],\r\n [EC(10), TS(192)],\r\n [EC(10), TS(193)],\r\n\r\n [TS(192), TS(201)],\r\n\r\n [TS(191), TS(211)],\r\n [TS(191), TS(212)],\r\n [TS(193), TS(213)],\r\n [TS(193), TS(214)],\r\n\r\n [TS(211), TS(221)],\r\n [TS(211), TS(222)],\r\n [TS(212), TS(223)],\r\n [TS(212), TS(224)],\r\n [TS(213), TS(225)],\r\n [TS(213), TS(226)],\r\n [TS(214), TS(227)],\r\n [TS(214), TS(228)],\r\n\r\n [TS(221), TS(231)],\r\n [TS(222), TS(231)],\r\n [TS(223), TS(232)],\r\n [TS(224), TS(232)],\r\n [TS(225), TS(233)],\r\n [TS(226), TS(233)],\r\n [TS(227), TS(234)],\r\n [TS(228), TS(234)],\r\n\r\n [TS(231), EC(11)],\r\n [TS(232), EC(11)],\r\n [TS(233), EC(12)],\r\n [TS(234), EC(12)],\r\n\r\n [EC(11), TimeStudy.dilation],\r\n [EC(12), TimeStudy.dilation],\r\n\r\n [TS(21), TS(305), () => Ra.unlocks.unlockHardV >= 5],\r\n [TS(41), TS(306), () => Ra.unlocks.unlockHardV >= 6],\r\n [TS(101), TS(311), () => Ra.unlocks.unlockHardV >= 7],\r\n [TS(102), TS(312), () => Ra.unlocks.unlockHardV >= 8],\r\n [TS(103), TS(313), () => Ra.unlocks.unlockHardV >= 9],\r\n [TS(111), TS(307), () => Ra.unlocks.unlockHardV >= 10],\r\n [TS(141), TS(321), () => Ra.unlocks.unlockHardV >= 11],\r\n [TS(142), TS(322), () => Ra.unlocks.unlockHardV >= 12],\r\n [TS(143), TS(323), () => Ra.unlocks.unlockHardV >= 13],\r\n [TS(151), TS(308), () => Ra.unlocks.unlockHardV >= 14],\r\n [TS(171), TS(309), () => Ra.unlocks.unlockHardV >= 15],\r\n [TS(192), TS(310), () => Ra.unlocks.unlockHardV >= 16],\r\n\r\n [TimeStudy.dilation, TimeStudy.timeDimension(5)],\r\n [TimeStudy.timeDimension(5), TimeStudy.timeDimension(6)],\r\n [TimeStudy.timeDimension(6), TimeStudy.timeDimension(7)],\r\n [TimeStudy.timeDimension(7), TimeStudy.timeDimension(8)],\r\n [TimeStudy.timeDimension(8), TimeStudy.reality],\r\n [TimeStudy.reality, TS(401)],\r\n [TimeStudy.reality, TS(402)],\r\n [TimeStudy.reality, TS(403)],\r\n [TS(401), TS(411)], \r\n [TS(402), TS(412)],\r\n [TS(403), TS(413)]\r\n ].map(props => new TimeStudyConnection(props[0], props[1], props[2]));\r\n\r\n return connections;\r\n}());\r\n","import { DC } from \"./constants\";\r\nimport { CorruptionUpgrade } from \"./corruption-upgrades\";\r\n\r\nexport class Sacrifice {\r\n // This is tied to the \"buying an 8th dimension\" achievement in order to hide it from new players before they reach\r\n // sacrifice for the first time.\r\n static get isVisible() {\r\n return Achievement(18).isUnlocked || PlayerProgress.realityUnlocked();\r\n }\r\n\r\n static get canSacrifice() {\r\n return DimBoost.purchasedBoosts > 4 && !EternityChallenge(3).isRunning && this.nextBoost.gt(1) &&\r\n AntimatterDimension(8).totalAmount.gt(0) &&\r\n !Enslaved.isRunning;\r\n }\r\n\r\n static get disabledCondition() {\r\n if (NormalChallenge(10).isRunning) return \"8th Dimensions are disabled\";\r\n if (EternityChallenge(3).isRunning) return \"Eternity Challenge 3\";\r\n if (DimBoost.purchasedBoosts < 5) return `Requires ${formatInt(5)} Dimension Boosts`;\r\n if (AntimatterDimension(8).totalAmount.eq(0)) return \"No 8th Antimatter Dimensions\";\r\n if (this.nextBoost.lte(1)) return `${formatX(1)} multiplier`;\r\n if (Player.isInAntimatterChallenge) return \"Challenge goal reached\";\r\n return \"Need to Crunch\";\r\n }\r\n\r\n static getSacrificeDescription(changes) {\r\n const f = (name, condition) => (name in changes ? changes[name] : condition);\r\n let factor = 2;\r\n let places = 1;\r\n let base = `(log₁₀(AD1)/${formatInt(10)})`;\r\n if (f(\"Challenge8isRunning\", NormalChallenge(8).isRunning)) {\r\n factor = 1;\r\n base = \"x\";\r\n } else if (f(\"InfinityChallenge2isCompleted\", InfinityChallenge(2).isCompleted)) {\r\n factor = 1 / 120;\r\n places = 3;\r\n base = \"AD1\";\r\n }\r\n\r\n const exponent = (1 +\r\n (f(\"Achievement32\", Achievement(32).isEffectActive) ? Achievement(32).config.effect : 0) +\r\n (f(\"Achievement57\", Achievement(57).isEffectActive) ? Achievement(57).config.effect : 0)\r\n ) * (1 +\r\n (f(\"Achievement88\", Achievement(88).isEffectActive) ? Achievement(88).config.effect : 0) +\r\n (f(\"TimeStudy228\", TimeStudy(228).isEffectActive) ? TimeStudy(228).config.effect : 0)\r\n ) * factor;\r\n return base + (exponent === 1 ? \"\" : formatPow(exponent, places, places));\r\n }\r\n\r\n // The code path for calculating the sacrifice exponent is pretty convoluted, but needs to be structured this way\r\n // in order to mostly replicate old pre-Reality behavior. There are two key things to note in how sacrifice behaves\r\n // which are not immediately apparent here; IC2 changes the formula by getting rid of a log10 (and therefore makes\r\n // sacrifice significantly stronger despite the much smaller exponent) and pre-Reality behavior assumed that the\r\n // player would already have ach32/57 by the time they complete IC2. As Reality resets achievements, we had to\r\n // assume that all things boosting sacrifice can be gotten independently, which resulted in some odd effect stacking.\r\n static get sacrificeExponent() {\r\n let base;\r\n // C8 seems weaker, but it actually follows its own formula which ends up being stronger based on how it stacks\r\n if (NormalChallenge(8).isRunning) base = 1;\r\n // Pre-Reality this was 100; having ach32/57 results in 1.2x, which is brought back in line by changing to 120\r\n else if (InfinityChallenge(2).isCompleted) base = 1 / 120;\r\n else base = 2;\r\n\r\n // All the factors which go into the multiplier have to combine this way in order to replicate legacy behavior\r\n const preIC2 = 1 + Effects.sum(Achievement(32), Achievement(57));\r\n const postIC2 = 1 + Effects.sum(Achievement(88), TimeStudy(228));\r\n const triad = TimeStudy(304).effectOrDefault(1);\r\n const effarig65 = Ra.unlocks.relicShardBoost.isUnlocked ? 1 + (Decimal.log10(Currency.relicShards.value) / 1000) : 1 ;\r\n let baseAnswer = base * preIC2 * postIC2 * triad * effarig65;\r\n\r\n //corruption 10\r\n const corrupt = CorruptionUpgrade(10).effectOrDefault(1);\r\n return baseAnswer**corrupt;\r\n }\r\n\r\n static get nextBoost() {\r\n const nd1Amount = AntimatterDimension(1).amount;\r\n if (nd1Amount.eq(0)) return DC.D1;\r\n const sacrificed = player.sacrificed.clampMin(1);\r\n let prePowerSacrificeMult;\r\n // Pre-reality update C8 works really weirdly - every sacrifice, the current sacrifice multiplier gets applied to\r\n // ND8, then sacrificed amount is updated, and then the updated sacrifice multiplier then gets applied to a\r\n // different variable that is only applied during C8. However since sacrifice only depends on sacrificed ND1, this\r\n // can actually be done in a single calculation in order to handle C8 in a less hacky way.\r\n if (NormalChallenge(8).isRunning) {\r\n prePowerSacrificeMult = nd1Amount.pow(0.05).dividedBy(sacrificed.pow(0.04)).clampMin(1)\r\n .times(nd1Amount.pow(0.05).dividedBy(sacrificed.plus(nd1Amount).pow(0.04)));\r\n } else if (InfinityChallenge(2).isCompleted) {\r\n prePowerSacrificeMult = nd1Amount.dividedBy(sacrificed);\r\n } else {\r\n prePowerSacrificeMult = new Decimal((nd1Amount.log10() / 10) / Math.max(sacrificed.log10() / 10, 1));\r\n }\r\n\r\n return prePowerSacrificeMult.clampMin(1).pow(this.sacrificeExponent);\r\n }\r\n\r\n static get totalBoost() {\r\n if (player.sacrificed.eq(0)) return DC.D1;\r\n // C8 uses a variable that keeps track of a sacrifice boost that persists across sacrifice-resets and isn't\r\n // used anywhere else, which also naturally takes account of the exponent from achievements and time studies.\r\n if (NormalChallenge(8).isRunning) {\r\n return player.chall8TotalSacrifice;\r\n }\r\n\r\n let prePowerBoost;\r\n\r\n if (InfinityChallenge(2).isCompleted) {\r\n prePowerBoost = player.sacrificed;\r\n } else {\r\n prePowerBoost = new Decimal(player.sacrificed.log10() / 10);\r\n }\r\n\r\n return prePowerBoost.clampMin(1).pow(this.sacrificeExponent);\r\n }\r\n}\r\n\r\nexport function sacrificeReset() {\r\n if (!Sacrifice.canSacrifice) return false;\r\n if ((!player.break || (!InfinityChallenge.isRunning && NormalChallenge.isRunning)) &&\r\n Currency.antimatter.gt(Decimal.NUMBER_MAX_VALUE)) return false;\r\n if (\r\n NormalChallenge(8).isRunning &&\r\n (Sacrifice.totalBoost.gte(Decimal.NUMBER_MAX_VALUE))\r\n ) {\r\n return false;\r\n }\r\n EventHub.dispatch(GAME_EVENT.SACRIFICE_RESET_BEFORE);\r\n const nextBoost = Sacrifice.nextBoost;\r\n player.chall8TotalSacrifice = player.chall8TotalSacrifice.times(nextBoost);\r\n player.sacrificed = player.sacrificed.plus(AntimatterDimension(1).amount);\r\n const isAch118Unlocked = Achievement(118).canBeApplied;\r\n if (NormalChallenge(8).isRunning) {\r\n if (!isAch118Unlocked) {\r\n AntimatterDimensions.reset();\r\n }\r\n Currency.antimatter.reset();\r\n } else if (!isAch118Unlocked) {\r\n AntimatterDimensions.resetAmountUpToTier(NormalChallenge(12).isRunning ? 6 : 7);\r\n }\r\n player.requirementChecks.infinity.noSacrifice = false;\r\n EventHub.dispatch(GAME_EVENT.SACRIFICE_RESET_AFTER);\r\n return true;\r\n}\r\n\r\nexport function sacrificeBtnClick() {\r\n if (!Sacrifice.isVisible || !Sacrifice.canSacrifice) return;\r\n if (player.options.confirmations.sacrifice) {\r\n Modal.sacrifice.show();\r\n } else {\r\n sacrificeReset();\r\n }\r\n}\r\n","import { DC } from \"./constants\";\r\nimport FullScreenAnimationHandler from \"./full-screen-animation-handler\";\r\n\r\nexport function bigCrunchAnimation() {\r\n FullScreenAnimationHandler.display(\"a-implode\", 2);\r\n}\r\n\r\nfunction handleChallengeCompletion() {\r\n const challenge = Player.antimatterChallenge;\r\n if (!challenge && !NormalChallenge(1).isCompleted) {\r\n NormalChallenge(1).complete();\r\n }\r\n if (!challenge) return;\r\n\r\n // Clear the IC notification after the first completion (only) so that it can show it again for the next one\r\n const inIC = InfinityChallenge.isRunning;\r\n if (inIC && !InfinityChallenge.current.isCompleted) TabNotification.ICUnlock.clearTrigger();\r\n\r\n challenge.complete();\r\n challenge.updateChallengeTime();\r\n if (!player.options.retryChallenge) {\r\n player.challenge.normal.current = 0;\r\n player.challenge.infinity.current = 0;\r\n }\r\n}\r\n\r\nexport function manualBigCrunchResetRequest() {\r\n if (!Player.canCrunch) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n // We show the modal under two conditions - on the first ever infinity (to explain the mechanic) and\r\n // post-break (to show total IP and infinities gained)\r\n if (player.options.confirmations.bigCrunch && (!PlayerProgress.infinityUnlocked() || player.break)) {\r\n Modal.bigCrunch.show();\r\n } else {\r\n bigCrunchResetRequest();\r\n }\r\n}\r\n\r\nexport function bigCrunchResetRequest(disableAnimation = false) {\r\n if (!Player.canCrunch) return;\r\n if (!disableAnimation && player.options.animations.bigCrunch && !FullScreenAnimationHandler.isDisplaying) {\r\n bigCrunchAnimation();\r\n setTimeout(bigCrunchReset, 1000);\r\n } else {\r\n bigCrunchReset();\r\n }\r\n}\r\n\r\nexport function bigCrunchReset(\r\n forced = false,\r\n enteringAntimatterChallenge = Player.isInAntimatterChallenge && player.options.retryChallenge\r\n) {\r\n if (!forced && !Player.canCrunch) return;\r\n\r\n if (Player.canCrunch) {\r\n EventHub.dispatch(GAME_EVENT.BIG_CRUNCH_BEFORE);\r\n bigCrunchGiveRewards();\r\n if (Pelle.isDoomed) PelleStrikes.infinity.trigger();\r\n }\r\n\r\n bigCrunchResetValues(enteringAntimatterChallenge);\r\n EventHub.dispatch(GAME_EVENT.BIG_CRUNCH_AFTER);\r\n}\r\n\r\nfunction bigCrunchGiveRewards() {\r\n bigCrunchUpdateStatistics();\r\n\r\n const infinityPoints = gainedInfinityPoints();\r\n Currency.infinityPoints.add(infinityPoints);\r\n Currency.infinities.add(gainedInfinities().round());\r\n\r\n bigCrunchTabChange(!PlayerProgress.infinityUnlocked());\r\n bigCrunchCheckUnlocks();\r\n}\r\n\r\nfunction bigCrunchUpdateStatistics() {\r\n player.records.bestInfinity.bestIPminEternity =\r\n player.records.bestInfinity.bestIPminEternity.clampMin(player.records.thisInfinity.bestIPmin);\r\n player.records.thisInfinity.bestIPmin = DC.D0;\r\n\r\n player.records.thisEternity.bestInfinitiesPerMs = player.records.thisEternity.bestInfinitiesPerMs.clampMin(\r\n gainedInfinities().round().dividedBy(Math.clampMin(33, player.records.thisInfinity.realTime))\r\n );\r\n\r\n const infinityPoints = gainedInfinityPoints();\r\n\r\n addInfinityTime(\r\n player.records.thisInfinity.time,\r\n player.records.thisInfinity.realTime,\r\n infinityPoints,\r\n gainedInfinities().round()\r\n );\r\n\r\n player.records.bestInfinity.time =\r\n Decimal.min(player.records.bestInfinity.time, player.records.thisInfinity.time);\r\n player.records.bestInfinity.realTime =\r\n Math.min(player.records.bestInfinity.realTime, player.records.thisInfinity.realTime);\r\n\r\n player.requirementChecks.reality.noInfinities = false;\r\n\r\n if (!player.requirementChecks.infinity.maxAll) {\r\n const bestIpPerMsWithoutMaxAll = infinityPoints.dividedBy(Decimal.clampMin(33, player.records.thisInfinity.realTime));\r\n player.records.thisEternity.bestIPMsWithoutMaxAll =\r\n Decimal.max(bestIpPerMsWithoutMaxAll, player.records.thisEternity.bestIPMsWithoutMaxAll);\r\n }\r\n}\r\n\r\nfunction bigCrunchTabChange(firstInfinity) {\r\n const earlyGame = player.records.bestInfinity.time.gt(60000) && !player.break;\r\n const inAntimatterChallenge = Player.isInAntimatterChallenge;\r\n handleChallengeCompletion();\r\n\r\n if (firstInfinity) {\r\n Tab.infinity.upgrades.show();\r\n } else if (earlyGame || (inAntimatterChallenge && !player.options.retryChallenge)) {\r\n Tab.dimensions.antimatter.show();\r\n }\r\n}\r\n\r\nexport function bigCrunchResetValues(enteringAntimatterChallenge) {\r\n const currentReplicanti = Replicanti.amount;\r\n const currentReplicantiGalaxies = player.replicanti.galaxies;\r\n // For unknown reasons, everything but keeping of RGs (including resetting of RGs)\r\n // is done in the function called below. For now, we're just trying to keep\r\n // code structure similar to what it was before to avoid new bugs.\r\n secondSoftReset(enteringAntimatterChallenge);\r\n\r\n let remainingGalaxies = 0;\r\n if (Achievement(95).isUnlocked && !Pelle.isDoomed) {\r\n Replicanti.amount = currentReplicanti;\r\n remainingGalaxies += Math.min(currentReplicantiGalaxies, 1);\r\n }\r\n if (TimeStudy(33).isBought && !Pelle.isDoomed) {\r\n remainingGalaxies += Math.floor(currentReplicantiGalaxies / 2);\r\n }\r\n\r\n if (PelleUpgrade.replicantiGalaxyNoReset.canBeApplied) {\r\n remainingGalaxies = currentReplicantiGalaxies;\r\n }\r\n // I don't think this Math.clampMax is technically needed, but if we add another source\r\n // of keeping Replicanti Galaxies then it might be.\r\n player.replicanti.galaxies = Math.min(Math.clampMax(remainingGalaxies, currentReplicantiGalaxies), 250000);\r\n}\r\n\r\nfunction bigCrunchCheckUnlocks() {\r\n if (EternityChallenge(4).tryFail()) return;\r\n\r\n if (Effarig.isRunning && !EffarigUnlock.infinity.isUnlocked) {\r\n EffarigUnlock.infinity.unlock();\r\n beginProcessReality(getRealityProps(true));\r\n }\r\n}\r\n\r\nexport function secondSoftReset(enteringAntimatterChallenge) {\r\n player.dimensionBoosts = 0;\r\n player.galaxies = 0;\r\n player.records.thisInfinity.maxAM = DC.D0;\r\n Currency.antimatter.reset();\r\n softReset(0, true, true, enteringAntimatterChallenge);\r\n InfinityDimensions.resetAmount();\r\n if (player.replicanti.unl) Replicanti.amount = DC.D1;\r\n player.replicanti.galaxies = 0;\r\n player.records.thisInfinity.time = DC.D0;\r\n player.records.thisInfinity.lastBuyTime = DC.D0;\r\n player.records.thisInfinity.realTime = 0;\r\n Player.resetRequirements(\"infinity\");\r\n AchievementTimers.marathon2.reset();\r\n}\r\n\r\nexport function preProductionGenerateIP(diff) {\r\n if (InfinityUpgrade.ipGen.isBought) {\r\n const genPeriod = Time.bestInfinity.totalMilliseconds.times(10);\r\n let genCount;\r\n diff = new Decimal(diff)\r\n if (diff.gt(new Decimal(1e300).times(genPeriod))) {\r\n genCount = Decimal.div(diff, genPeriod);\r\n } else {\r\n // Partial progress (fractions from 0 to 1) are stored in player.partInfinityPoint\r\n player.partInfinityPoint += new Decimal(diff).div(genPeriod).toNumber();\r\n genCount = Math.floor(player.partInfinityPoint);\r\n player.partInfinityPoint -= genCount;\r\n }\r\n let gainedPerGen = player.records.bestInfinity.time.gt(Decimal.pow10(1e100)) ? DC.D0 : InfinityUpgrade.ipGen.effectValue;\r\n if (Laitela.isRunning) gainedPerGen = dilatedValueOf(gainedPerGen);\r\n const gainedThisTick = new Decimal(genCount).times(gainedPerGen);\r\n Currency.infinityPoints.add(gainedThisTick);\r\n }\r\n Currency.infinityPoints.add(BreakInfinityUpgrade.ipGen.effectOrDefault(DC.D0).times(new Decimal(diff).div(60000)));\r\n}\r\n","import { GameMechanicState, SetPurchasableMechanicState } from \"./game-mechanics\";\r\nimport { DC } from \"./constants\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nclass ChargedInfinityUpgradeState extends GameMechanicState {\r\n constructor(config, upgrade) {\r\n super(config);\r\n this._upgrade = upgrade;\r\n }\r\n\r\n get isEffectActive() {\r\n return this._upgrade.isBought && this._upgrade.isCharged;\r\n }\r\n}\r\n\r\nexport class InfinityUpgradeState extends SetPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n if (config.charged) {\r\n this._chargedEffect = new ChargedInfinityUpgradeState(config.charged, this);\r\n }\r\n }\r\n\r\n get currency() {\r\n return Currency.infinityPoints;\r\n }\r\n\r\n get set() {\r\n return player.infinityUpgrades;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return this.config.checkRequirement?.() ?? true;\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isBought && !this.isCharged;\r\n }\r\n\r\n get chargedEffect() {\r\n return this._chargedEffect;\r\n }\r\n\r\n purchase() {\r\n if (super.purchase()) {\r\n // This applies the 4th column of infinity upgrades retroactively\r\n if (this.config.id.includes(\"skip\")) skipResetsIfPossible();\r\n EventHub.dispatch(GAME_EVENT.INFINITY_UPGRADE_BOUGHT);\r\n return true;\r\n }\r\n if (this.canCharge) {\r\n this.charge();\r\n EventHub.dispatch(GAME_EVENT.INFINITY_UPGRADE_CHARGED);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n get hasChargeEffect() {\r\n return this.config.charged !== undefined;\r\n }\r\n\r\n get isCharged() {\r\n return player.celestials.ra.charged.has(this.id);\r\n }\r\n\r\n get canCharge() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.soF.hiddenEight[player.mending.corruption[9]]) return false;\r\n return this.isBought &&\r\n this.hasChargeEffect &&\r\n !this.isCharged &&\r\n Ra.chargesLeft !== 0 &&\r\n !Pelle.isDisabled(\"chargedInfinityUpgrades\");\r\n }\r\n\r\n charge() {\r\n player.celestials.ra.charged.add(this.id);\r\n }\r\n\r\n disCharge() {\r\n player.celestials.ra.charged.delete(this.id);\r\n }\r\n}\r\n\r\nexport function totalIPMult() {\r\n if (Effarig.isRunning && Effarig.currentStage === EFFARIG_STAGES.INFINITY) {\r\n return DC.D1;\r\n }\r\n let ipMult = DC.D1\r\n .timesEffectsOf(\r\n TimeStudy(41),\r\n TimeStudy(51),\r\n TimeStudy(141),\r\n TimeStudy(142),\r\n TimeStudy(143),\r\n TimeStudy(305),\r\n Achievement(85),\r\n Achievement(93),\r\n Achievement(116),\r\n Achievement(125),\r\n Achievement(141).effects.ipGain,\r\n InfinityUpgrade.ipMult,\r\n DilationUpgrade.ipMultDT,\r\n GlyphEffect.ipMult\r\n );\r\n ipMult = ipMult.times(Replicanti.amount.powEffectOf(AlchemyResource.exponential));\r\n return ipMult;\r\n}\r\n\r\nexport function disChargeAll() {\r\n const upgrades = [\r\n InfinityUpgrade.totalTimeMult,\r\n InfinityUpgrade.dim18mult,\r\n InfinityUpgrade.dim36mult,\r\n InfinityUpgrade.resetBoost,\r\n InfinityUpgrade.buy10Mult,\r\n InfinityUpgrade.dim27mult,\r\n InfinityUpgrade.dim45mult,\r\n InfinityUpgrade.galaxyBoost,\r\n InfinityUpgrade.thisInfinityTimeMult,\r\n InfinityUpgrade.unspentIPMult,\r\n InfinityUpgrade.dimboostMult,\r\n InfinityUpgrade.ipGen\r\n ];\r\n for (const upgrade of upgrades) {\r\n if (upgrade.isCharged) {\r\n upgrade.disCharge();\r\n }\r\n }\r\n player.celestials.ra.disCharge = false;\r\n EventHub.dispatch(GAME_EVENT.INFINITY_UPGRADES_DISCHARGED);\r\n}\r\n\r\n// The repeatable 2xIP upgrade has an odd cost structure - it follows a shallow exponential (step *10) up to e3M, at\r\n// which point it follows a steeper one (step *1e10) up to e6M before finally hardcapping. At the hardcap, there's\r\n// an extra bump that increases the multipler itself from e993k to e1M. All these numbers are specified in\r\n// GameDatabase.infinity.upgrades.ipMult\r\nclass InfinityIPMultUpgrade extends GameMechanicState {\r\n get cost() {\r\n if (this.purchaseCount >= this.purchasesAtIncrease) {\r\n return this.config.costIncreaseThreshold\r\n .times(Decimal.pow(this.costIncrease, this.purchaseCount - this.purchasesAtIncrease));\r\n }\r\n return Decimal.pow(this.costIncrease, this.purchaseCount + 1);\r\n }\r\n\r\n get purchaseCount() {\r\n return player.IPMultPurchases;\r\n }\r\n\r\n get purchasesAtIncrease() {\r\n return this.config.costIncreaseThreshold.log10() - 1;\r\n }\r\n\r\n get hasIncreasedCost() {\r\n return this.purchaseCount >= this.purchasesAtIncrease;\r\n }\r\n\r\n get costIncrease() {\r\n return this.hasIncreasedCost ? 1e10 : 10;\r\n }\r\n\r\n get isCapped() {\r\n return this.cost.gte(this.config.costCap);\r\n }\r\n\r\n get isBought() {\r\n return this.isCapped;\r\n }\r\n\r\n get isRequirementSatisfied() {\r\n return Achievement(41).isUnlocked;\r\n }\r\n\r\n get canBeBought() {\r\n if(Pelle.isDoomed && Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked && this.id == \"ipMult\" && Currency.infinityPoints.gte(this.cost)) return true;\r\n return !Pelle.isDoomed && !this.isCapped && Currency.infinityPoints.gte(this.cost) && this.isRequirementSatisfied;\r\n }\r\n\r\n // This is only ever called with amount = 1 or within buyMax under conditions that ensure the scaling doesn't\r\n // change mid-purchase\r\n purchase(amount = 1) {\r\n if (!this.canBeBought) return;\r\n if (!TimeStudy(181).isBought) {\r\n Autobuyer.bigCrunch.bumpAmount(DC.D2.pow(amount));\r\n }\r\n Currency.infinityPoints.subtract(Decimal.sumGeometricSeries(amount, this.cost, this.costIncrease, 0));\r\n player.IPMultPurchases += amount;\r\n GameUI.update();\r\n }\r\n\r\n buyMax() {\r\n if (!this.canBeBought) return;\r\n if (!this.hasIncreasedCost) {\r\n // Only allow IP below the softcap to be used\r\n const availableIP = Currency.infinityPoints.value.clampMax(this.config.costIncreaseThreshold);\r\n const purchases = Decimal.affordGeometricSeries(availableIP, this.cost, this.costIncrease, 0).toNumber();\r\n if (purchases <= 0) return;\r\n this.purchase(purchases);\r\n }\r\n // Do not replace it with `if else` - it's specifically designed to process two sides of threshold separately\r\n // (for example, we have 1e4000000 IP and no mult - first it will go to (but not including) 1e3000000 and then\r\n // it will go in this part)\r\n if (this.hasIncreasedCost) {\r\n const availableIP = Currency.infinityPoints.value.clampMax(this.config.costCap);\r\n const purchases = Decimal.affordGeometricSeries(availableIP, this.cost, this.costIncrease, 0).toNumber();\r\n if (purchases <= 0) return;\r\n this.purchase(purchases);\r\n }\r\n }\r\n}\r\n\r\nexport const InfinityUpgrade = mapGameDataToObject(\r\n GameDatabase.infinity.upgrades,\r\n config => (config.id === \"ipMult\"\r\n ? new InfinityIPMultUpgrade(config)\r\n : new InfinityUpgradeState(config))\r\n);\r\n","import { GameMechanicState, RebuyableMechanicState, SetPurchasableMechanicState } from \"./game-mechanics\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\nimport { SpeedrunMilestones } from \"./speedrun\";\r\n\r\nclass ChargedBreakInfinityUpgradeState extends GameMechanicState {\r\n constructor(config, upgrade) {\r\n super(config);\r\n this._upgrade = upgrade;\r\n }\r\n\r\n get isEffectActive() {\r\n return this._upgrade.isBought && this._upgrade.isCharged;\r\n }\r\n}\r\n\r\nexport class BreakInfinityUpgradeState extends SetPurchasableMechanicState {\r\n constructor(config){\r\n super(config);\r\n if (config.charged) {\r\n this._chargedEffect = new ChargedBreakInfinityUpgradeState(config.charged, this);\r\n }\r\n }\r\n\r\n get currency() {\r\n return Currency.infinityPoints;\r\n }\r\n\r\n get set() {\r\n return player.infinityUpgrades;\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isBought && !this.isCharged;\r\n }\r\n\r\n get chargedEffect() {\r\n return this._chargedEffect;\r\n }\r\n\r\n onPurchased() {\r\n if (this.id === \"postGalaxy\") {\r\n SpeedrunMilestones(7).tryComplete();\r\n PelleStrikes.powerGalaxies.trigger();\r\n }\r\n }\r\n\r\n purchase() {\r\n if (super.purchase()) {\r\n EventHub.dispatch(GAME_EVENT.BREAK_INFINITY_UPGRADE_BOUGHT);\r\n return true;\r\n }\r\n if (this.canCharge) {\r\n this.charge();\r\n EventHub.dispatch(GAME_EVENT.BREAK_INFINITY_UPGRADE_CHARGED);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n get hasChargeEffect() {\r\n return this.config.charged !== undefined;\r\n }\r\n\r\n get isCharged() {\r\n return player.celestials.ra.breakCharged.has(this.id);\r\n }\r\n\r\n get canCharge() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.soF.hiddenEight[player.mending.corruption[9]]) return false;\r\n return this.isBought &&\r\n this.hasChargeEffect &&\r\n !this.isCharged &&\r\n Ra.breakChargesLeft !== 0 &&\r\n !Pelle.isDisabled(\"chargedBreakInfinityUpgrades\");\r\n }\r\n\r\n charge() {\r\n player.celestials.ra.breakCharged.add(this.id);\r\n }\r\n\r\n disCharge() {\r\n player.celestials.ra.breakCharged.delete(this.id);\r\n }\r\n}\r\n\r\nexport function disChargeAllBreak(){\r\n const upgrades = [\r\n BreakInfinityUpgrade.totalAMMult,\r\n BreakInfinityUpgrade.currentAMMult,\r\n BreakInfinityUpgrade.galaxyBoost,\r\n BreakInfinityUpgrade.infinitiedMult,\r\n BreakInfinityUpgrade.achievementMult,\r\n BreakInfinityUpgrade.slowestChallengeMult,\r\n BreakInfinityUpgrade.infinitiedGen,\r\n BreakInfinityUpgrade.autobuyMaxDimboosts,\r\n BreakInfinityUpgrade.autobuyerSpeed\r\n ];\r\n\r\n for(const upgrade of upgrades){\r\n if(upgrade.isCharged){\r\n upgrade.disCharge();\r\n }\r\n }\r\n\r\n player.celestials.ra.breakDischarge = false;\r\n EventHub.dispatch(GAME_EVENT.BREAK_INFINITY_UPGRADES_DISCHARGED);\r\n}\r\n\r\nclass RebuyableBreakInfinityUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.infinityPoints;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.infinityRebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.infinityRebuyables[this.id] = value;\r\n }\r\n\r\n get isCapped() {\r\n return this.boughtAmount === this.config.maxUpgrades;\r\n }\r\n\r\n onPurchased() {\r\n this.config.onPurchased?.();\r\n }\r\n}\r\n\r\nexport const BreakInfinityUpgrade = mapGameDataToObject(\r\n GameDatabase.infinity.breakUpgrades,\r\n config => (config.rebuyable\r\n ? new RebuyableBreakInfinityUpgradeState(config)\r\n : new BreakInfinityUpgradeState(config))\r\n);\r\n","import { DC } from \"./constants\";\r\nimport { GameMechanicState } from \"./game-mechanics\";\r\n\r\nexport function updateNormalAndInfinityChallenges(diff) {\r\n if (NormalChallenge(11).isRunning || InfinityChallenge(6).isRunning) {\r\n if (AntimatterDimension(2).amount.neq(0)) {\r\n Currency.matter.bumpTo(1);\r\n // These caps are values which occur at approximately e308 IP\r\n const cappedBase = 1.03 + Math.clampMax(DimBoost.totalBoosts, 400) / 200 +\r\n Math.clampMax(player.galaxies, 100) / 100;\r\n Currency.matter.multiply(Decimal.pow(cappedBase, diff.div(20)));\r\n }\r\n if (Currency.matter.gt(Currency.antimatter.value) && NormalChallenge(11).isRunning && !Player.canCrunch) {\r\n const values = [Currency.antimatter.value, Currency.matter.value];\r\n softReset(0, true, true);\r\n Modal.message.show(`Your ${format(values[0], 2, 2)} antimatter was annihilated\r\n by ${format(values[1], 2, 2)} matter.`, { closeEvent: GAME_EVENT.BIG_CRUNCH_AFTER }, 1);\r\n }\r\n }\r\n\r\n if (NormalChallenge(3).isRunning) {\r\n player.chall3Pow = player.chall3Pow.times(DC.D1_00038.pow(diff.div(100).min(1e300).toNumber())).clampMax(Decimal.NUMBER_MAX_VALUE);\r\n }\r\n\r\n if (NormalChallenge(2).isRunning) {\r\n player.chall2Pow = Math.min(player.chall2Pow + diff.div(180000).min(1e300).toNumber(), 1);\r\n }\r\n\r\n if (InfinityChallenge(2).isRunning) {\r\n if (player.ic2Count >= 400) {\r\n if (AntimatterDimension(8).amount.gt(0)) {\r\n sacrificeReset();\r\n }\r\n player.ic2Count %= 400;\r\n } else {\r\n // Do not change to diff, as this may lead to a sacrifice softlock with high gamespeed\r\n player.ic2Count += Math.clamp(Date.now() - player.lastUpdate, 1, 21600000);\r\n }\r\n }\r\n}\r\n\r\nclass NormalChallengeState extends GameMechanicState {\r\n get isQuickResettable() {\r\n return this.config.isQuickResettable;\r\n }\r\n\r\n get isRunning() {\r\n const isPartOfIC1 = this.id !== 9 && this.id !== 12;\r\n return player.challenge.normal.current === this.id || (isPartOfIC1 && InfinityChallenge(1).isRunning);\r\n }\r\n\r\n get isOnlyActiveChallenge() {\r\n return player.challenge.normal.current === this.id;\r\n }\r\n\r\n get isUnlocked() {\r\n if (PlayerProgress.eternityUnlocked()) return true;\r\n if (this.id === 0) return true;\r\n const ip = GameDatabase.challenges.normal[this.id - 1].lockedAt;\r\n return Currency.infinitiesTotal.gte(ip);\r\n }\r\n\r\n get isDisabled() {\r\n return Pelle.isDoomed;\r\n }\r\n\r\n get lockedAt() {\r\n return GameDatabase.challenges.normal[this.id].lockedAt;\r\n }\r\n\r\n requestStart() {\r\n if (!Tab.challenges.isUnlocked) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n if (!player.options.confirmations.challenges) {\r\n this.start();\r\n return;\r\n }\r\n Modal.startNormalChallenge.show(this.id);\r\n }\r\n\r\n start() {\r\n if (this.id === 1 || this.isOnlyActiveChallenge) return;\r\n if (!Tab.challenges.isUnlocked) return;\r\n // Forces big crunch reset but ensures IP gain, if any.\r\n bigCrunchReset(true, true);\r\n player.challenge.normal.current = this.id;\r\n player.challenge.infinity.current = 0;\r\n if (Enslaved.isRunning && EternityChallenge(6).isRunning && this.id === 10) {\r\n EnslavedProgress.challengeCombo.giveProgress();\r\n Enslaved.quotes.ec6C10.show();\r\n }\r\n if (!Enslaved.isRunning) Tab.dimensions.antimatter.show();\r\n }\r\n\r\n get isCompleted() {\r\n return (player.challenge.normal.completedBits & (1 << this.id)) !== 0;\r\n }\r\n\r\n complete() {\r\n player.challenge.normal.completedBits |= 1 << this.id;\r\n // Since breaking infinity maxes even autobuyers that aren't unlocked,\r\n // it's possible to get r52 or r53 from completing a challenge\r\n // and thus unlocking an autobuyer.\r\n Achievement(52).tryUnlock();\r\n Achievement(53).tryUnlock();\r\n\r\n // Completing a challenge unlocks an autobuyer even if not purchased with antimatter, but we still\r\n // need to clear the notification because otherwise it sticks there forever. Any other methods of\r\n // unlocking autobuyers (such as Existentially Prolong) should also go through this code path\r\n TabNotification.newAutobuyer.clearTrigger();\r\n GameCache.cheapestAntimatterAutobuyer.invalidate();\r\n }\r\n\r\n get goal() {\r\n if (Enslaved.isRunning && Enslaved.BROKEN_CHALLENGES.includes(this.id)) {\r\n return DC.E1E15;\r\n }\r\n return Decimal.NUMBER_MAX_VALUE;\r\n }\r\n\r\n updateChallengeTime() {\r\n const bestTimes = player.challenge.normal.bestTimes;\r\n if (new Decimal(bestTimes[this.id - 2]).lte(player.records.thisInfinity.time)) {\r\n return;\r\n }\r\n player.challenge.normal.bestTimes[this.id - 2] = player.records.thisInfinity.time;\r\n GameCache.challengeTimeSum.invalidate();\r\n GameCache.worstChallengeTime.invalidate();\r\n }\r\n\r\n exit() {\r\n player.challenge.normal.current = 0;\r\n bigCrunchReset(true, false);\r\n if (!Enslaved.isRunning) Tab.dimensions.antimatter.show();\r\n }\r\n}\r\n\r\n/**\r\n * @param {number} id\r\n * @return {NormalChallengeState}\r\n */\r\nexport const NormalChallenge = NormalChallengeState.createAccessor(GameDatabase.challenges.normal);\r\n\r\n/**\r\n * @returns {NormalChallengeState}\r\n */\r\nObject.defineProperty(NormalChallenge, \"current\", {\r\n get: () => (player.challenge.normal.current > 0\r\n ? NormalChallenge(player.challenge.normal.current)\r\n : undefined),\r\n});\r\n\r\nObject.defineProperty(NormalChallenge, \"isRunning\", {\r\n get: () => player.challenge.normal.current !== 0,\r\n});\r\n\r\nexport const NormalChallenges = {\r\n /**\r\n * @type {NormalChallengeState[]}\r\n */\r\n all: NormalChallenge.index.compact(),\r\n completeAll() {\r\n for (const challenge of NormalChallenges.all) challenge.complete();\r\n },\r\n clearCompletions() {\r\n player.challenge.normal.completedBits = 0;\r\n }\r\n};\r\n","import { GameMechanicState } from \"./game-mechanics\";\r\n\r\nexport function tryCompleteInfinityChallenges() {\r\n if (EternityMilestone.autoIC.isReached) {\r\n const toComplete = InfinityChallenges.all.filter(x => x.isUnlocked && !x.isCompleted);\r\n for (const challenge of toComplete) challenge.complete();\r\n }\r\n}\r\n\r\nclass InfinityChallengeRewardState extends GameMechanicState {\r\n constructor(config, challenge) {\r\n super(config);\r\n this._challenge = challenge;\r\n }\r\n\r\n get isEffectActive() {\r\n return this._challenge.isCompleted;\r\n }\r\n}\r\n\r\nclass InfinityChallengeState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this._reward = new InfinityChallengeRewardState(config.reward, this);\r\n }\r\n\r\n get unlockAM() {\r\n return this.config.unlockAM;\r\n }\r\n\r\n get isUnlocked() {\r\n return player.records.thisEternity.maxAM.gte(this.unlockAM) || (Achievement(133).isUnlocked && !Pelle.isDoomed) ||\r\n (PelleUpgrade.keepInfinityChallenges.canBeApplied && Pelle.cel.records.totalAntimatter.gte(this.unlockAM));\r\n }\r\n\r\n get isRunning() {\r\n return player.challenge.infinity.current === this.id;\r\n }\r\n\r\n requestStart() {\r\n if (!this.isUnlocked) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n if (!player.options.confirmations.challenges) {\r\n this.start();\r\n return;\r\n }\r\n Modal.startInfinityChallenge.show(this.id);\r\n }\r\n\r\n start() {\r\n if (!this.isUnlocked || this.isRunning) return;\r\n // Forces big crunch reset but ensures IP gain, if any.\r\n bigCrunchReset(true, true);\r\n player.challenge.normal.current = 0;\r\n player.challenge.infinity.current = this.id;\r\n if (!Enslaved.isRunning) Tab.dimensions.antimatter.show();\r\n player.break = true;\r\n if (EternityChallenge.isRunning) Achievement(115).unlock();\r\n }\r\n\r\n get isCompleted() {\r\n return (player.challenge.infinity.completedBits & (1 << this.id)) !== 0;\r\n }\r\n\r\n complete() {\r\n player.challenge.infinity.completedBits |= 1 << this.id;\r\n EventHub.dispatch(GAME_EVENT.INFINITY_CHALLENGE_COMPLETED);\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isRunning;\r\n }\r\n\r\n /**\r\n * @return {InfinityChallengeRewardState}\r\n */\r\n get reward() {\r\n return this._reward;\r\n }\r\n\r\n get isQuickResettable() {\r\n return this.config.isQuickResettable;\r\n }\r\n\r\n get goal() {\r\n return this.config.goal;\r\n }\r\n\r\n updateChallengeTime() {\r\n const bestTimes = player.challenge.infinity.bestTimes;\r\n if (new Decimal(bestTimes[this.id - 1]).lte(player.records.thisInfinity.time)) {\r\n return;\r\n }\r\n player.challenge.infinity.bestTimes[this.id - 1] = player.records.thisInfinity.time;\r\n GameCache.infinityChallengeTimeSum.invalidate();\r\n }\r\n\r\n exit() {\r\n player.challenge.infinity.current = 0;\r\n bigCrunchReset(true, false);\r\n if (!Enslaved.isRunning) Tab.dimensions.antimatter.show();\r\n }\r\n}\r\n\r\n/**\r\n * @param {number} id\r\n * @return {InfinityChallengeState}\r\n */\r\nexport const InfinityChallenge = InfinityChallengeState.createAccessor(GameDatabase.challenges.infinity);\r\n\r\n/**\r\n * @returns {InfinityChallengeState}\r\n */\r\nObject.defineProperty(InfinityChallenge, \"current\", {\r\n get: () => (player.challenge.infinity.current > 0\r\n ? InfinityChallenge(player.challenge.infinity.current)\r\n : undefined),\r\n});\r\n\r\nObject.defineProperty(InfinityChallenge, \"isRunning\", {\r\n get: () => InfinityChallenge.current !== undefined,\r\n});\r\n\r\nexport const InfinityChallenges = {\r\n /**\r\n * @type {InfinityChallengeState[]}\r\n */\r\n all: InfinityChallenge.index.compact(),\r\n completeAll() {\r\n for (const challenge of InfinityChallenges.all) challenge.complete();\r\n },\r\n clearCompletions() {\r\n player.challenge.infinity.completedBits = 0;\r\n },\r\n get nextIC() {\r\n return InfinityChallenges.all.find(x => !x.isUnlocked);\r\n },\r\n get nextICUnlockAM() {\r\n return this.nextIC?.unlockAM;\r\n },\r\n /**\r\n * Displays a notification if the antimatter gained will surpass the next unlockAM requirement.\r\n * @param value {Decimal} - total antimatter\r\n */\r\n notifyICUnlock(value) {\r\n // Disable the popup if the user will automatically complete the IC.\r\n if (EternityMilestone.autoIC.isReached) return;\r\n if (InfinityChallenges.nextIC === undefined) return;\r\n for (const ic of InfinityChallenges.all) {\r\n if (ic.isUnlocked || ic.isCompleted) continue;\r\n if (value.lt(ic.unlockAM)) break;\r\n // This has a reasonably high likelihood of happening when the player isn't looking at the game, so\r\n // we also give it a tab notification\r\n TabNotification.ICUnlock.clearTrigger();\r\n GameUI.notify.infinity(`You have unlocked Infinity Challenge ${ic.id}`, 7000);\r\n TabNotification.ICUnlock.tryTrigger();\r\n }\r\n },\r\n /**\r\n * @returns {InfinityChallengeState[]}\r\n */\r\n get completed() {\r\n return InfinityChallenges.all.filter(ic => ic.isCompleted);\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { MendingUpgrade } from \"./mending-upgrades\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\n// Slowdown parameters for replicanti growth, interval will increase by scaleFactor for every scaleLog10\r\n// OoM past the cap (default is 308.25 (log10 of 1.8e308), 1.2, Number.MAX_VALUE)\r\nexport const ReplicantiGrowth = {\r\n get scaleLog10() {\r\n return Math.log10(Number.MAX_VALUE);\r\n },\r\n get scaleFactor() {\r\n if (PelleStrikes.eternity.hasStrike && Replicanti.amount.gte(DC.E2000) && !MendingUpgrade(10).isBought) return 10;\r\n if (PelleStrikes.eternity.hasStrike && Replicanti.amount.gte(DC.E2000)) return 6;\r\n if (Pelle.isDoomed) return 2;\r\n return AlchemyResource.cardinality.effectValue;\r\n }\r\n};\r\n\r\n// Internal function to add RGs; called both from within the fast replicanti code and from the function\r\n// used externally. Only called in cases of automatic RG and does not actually modify replicanti amount\r\nfunction addReplicantiGalaxies(newGalaxies) {\r\n if (player.replicanti.galaxies > 250000){\r\n player.replicanti.galaxies = 250000;\r\n return;\r\n }\r\n if (newGalaxies > 0) {\r\n let x = player.replicanti.galaxies > 250000 ? 0 : newGalaxies;\r\n if (player.replicanti.galaxies + x < 250000){\r\n player.replicanti.galaxies += x;\r\n }\r\n else{\r\n player.replicanti.galaxies = 250000;\r\n }\r\n player.requirementChecks.eternity.noRG = false;\r\n if (!EternityMilestone.replicantiNoReset.isReached || Pelle.isDoomed) {\r\n player.dimensionBoosts = 0;\r\n softReset(0, true, true);\r\n }\r\n }\r\n}\r\n\r\n// Function called externally for gaining RGs, which adjusts replicanti amount before calling the function\r\n// which actually adds the RG. Called externally both automatically and manually\r\nexport function replicantiGalaxy(auto) {\r\n if (RealityUpgrade(6).isLockingMechanics) {\r\n if (!auto) RealityUpgrade(6).tryShowWarningModal();\r\n return;\r\n }\r\n if (!Replicanti.galaxies.canBuyMore) return;\r\n const galaxyGain = Replicanti.galaxies.gain;\r\n if (galaxyGain < 1) return;\r\n player.replicanti.timer = 0;\r\n Replicanti.amount = Achievement(126).isUnlocked && !Pelle.isDoomed\r\n ? Decimal.pow10(Replicanti.amount.log10() - LOG10_MAX_VALUE * galaxyGain)\r\n : DC.D1;\r\n addReplicantiGalaxies(galaxyGain);\r\n}\r\n\r\n// Only called on manual RG requests\r\nexport function replicantiGalaxyRequest() {\r\n if (!Replicanti.galaxies.canBuyMore) return;\r\n if (RealityUpgrade(6).isLockingMechanics) RealityUpgrade(6).tryShowWarningModal();\r\n else if (player.options.confirmations.replicantiGalaxy) Modal.replicantiGalaxy.show();\r\n else replicantiGalaxy(false);\r\n}\r\n\r\n// Produces replicanti quickly below e308, will auto-bulk-RG if production is fast enough\r\n// Returns the remaining unused gain factor\r\nfunction fastReplicantiBelow308(log10GainFactor, isAutobuyerActive) {\r\n const shouldBuyRG = isAutobuyerActive && !RealityUpgrade(6).isLockingMechanics;\r\n // More than e308 galaxies per tick causes the game to die, and I don't think it's worth the performance hit of\r\n // Decimalifying the entire calculation. And yes, this can and does actually happen super-lategame.\r\n const uncappedAmount = DC.E1.pow(log10GainFactor.plus(Replicanti.amount.log10()));\r\n // Checking for uncapped equaling zero is because Decimal.pow returns zero for overflow for some reason\r\n if (log10GainFactor.gt(Number.MAX_VALUE) || uncappedAmount.eq(0)) {\r\n if (shouldBuyRG) {\r\n addReplicantiGalaxies(Replicanti.galaxies.max - player.replicanti.galaxies);\r\n }\r\n Replicanti.amount = replicantiCap();\r\n // Basically we've used nothing.\r\n return log10GainFactor;\r\n }\r\n\r\n if (!shouldBuyRG) {\r\n const remainingGain = log10GainFactor.minus(replicantiCap().log10() - Replicanti.amount.log10()).clampMin(0);\r\n Replicanti.amount = Decimal.min(uncappedAmount, replicantiCap());\r\n return remainingGain;\r\n }\r\n\r\n const gainNeededPerRG = Decimal.NUMBER_MAX_VALUE.log10();\r\n const replicantiExponent = log10GainFactor.toNumber() + Replicanti.amount.log10();\r\n const toBuy = Math.floor(Math.min(replicantiExponent / gainNeededPerRG,\r\n Replicanti.galaxies.max - player.replicanti.galaxies));\r\n const maxUsedGain = gainNeededPerRG * toBuy + replicantiCap().log10() - Replicanti.amount.log10();\r\n const remainingGain = log10GainFactor.minus(maxUsedGain).clampMin(0);\r\n Replicanti.amount = Decimal.pow10(replicantiExponent - gainNeededPerRG * toBuy)\r\n .clampMax(replicantiCap());\r\n addReplicantiGalaxies(toBuy);\r\n return remainingGain;\r\n}\r\n\r\n// When the amount is exactly the cap, there are two cases: the player can go\r\n// over cap (in which case interval should be as if over cap) or the player\r\n// has just crunched and is still at cap due to \"Is this safe?\" reward\r\n// (in which case interval should be as if not over cap). This is why we have\r\n// the overCapOverride parameter, to tell us which case we are in.\r\nexport function getReplicantiInterval(overCapOverride, intervalIn) {\r\n let interval = intervalIn || player.replicanti.interval;\r\n interval = new Decimal(interval)\r\n const amount = Replicanti.amount;\r\n const overCap = overCapOverride === undefined ? amount.gt(replicantiCap()) : overCapOverride;\r\n if ((TimeStudy(133).isBought && !Achievement(138).isUnlocked) || overCap) {\r\n interval = interval.times(10);\r\n }\r\n\r\n if (overCap) {\r\n let increases = (amount.log10() - replicantiCap().log10()) / ReplicantiGrowth.scaleLog10;\r\n if (PelleStrikes.eternity.hasStrike && amount.gte(DC.E2000) && !MendingUpgrade(10).isBought) {\r\n // The above code assumes in this case there's 10x scaling for every 1e308 increase;\r\n // in fact, before e2000 it's only 2x.\r\n increases -= Math.log10(5) * (2000 - replicantiCap().log10()) / ReplicantiGrowth.scaleLog10;\r\n }\r\n interval = interval.times(Decimal.pow(ReplicantiGrowth.scaleFactor, increases));\r\n }\r\n\r\n interval = interval.divide(totalReplicantiSpeedMult(overCap));\r\n\r\n if (V.isRunning) {\r\n // This is a boost if interval < 1, but that only happens in EC12\r\n // and handling it would make the replicanti code a lot more complicated.\r\n interval = interval.pow(2);\r\n }\r\n\r\n if (V.isSuperRunning) {\r\n // This is a boost if interval < 1, but that only happens in EC12\r\n // and handling it would make the replicanti code a lot more complicated.\r\n // copypaste--sxy\r\n interval = interval.pow(5);\r\n }\r\n return interval;\r\n}\r\n\r\n// This only counts the \"external\" multipliers - that is, it doesn't count any speed changes due to being over the cap.\r\n// These multipliers are separated out largely for two reasons - more \"dynamic\" multipliers (such as overcap scaling\r\n// and celestial nerfs) interact very weirdly and the game balance relies on this behavior, and we also use this same\r\n// value in the multiplier tab too\r\nexport function totalReplicantiSpeedMult(overCap) {\r\n let totalMult = DC.D1;\r\n\r\n // These are the only effects active in Pelle - the function shortcuts everything else if we're in Pelle\r\n totalMult = totalMult.times(PelleRifts.decay.effectValue);\r\n totalMult = totalMult.times(Pelle.specialGlyphEffect.replication);\r\n totalMult = totalMult.times(ShopPurchase.replicantiPurchases.currentMult);\r\n if(MendingMilestone.one.isReached){\r\n totalMult = totalMult.times(1000);\r\n }\r\n if(Ra.unlocks.relicShardBoost.isUnlocked){\r\n totalMult = totalMult.times(Currency.relicShards.value.pow(0.06667).clampMin(1));\r\n }\r\n if (Pelle.isDisabled(\"replicantiIntervalMult\")) return totalMult;\r\n\r\n totalMult = totalMult.times(Ra.unlocks.continuousTTBoost.effects.replicanti.effectValue)\r\n\r\n\r\n const preCelestialEffects = Effects.product(\r\n TimeStudy(62),\r\n TimeStudy(213),\r\n RealityUpgrade(2),\r\n RealityUpgrade(6),\r\n RealityUpgrade(23),\r\n );\r\n totalMult = totalMult.times(preCelestialEffects);\r\n if (TimeStudy(132).isBought && Perk.studyPassive.isBought) {\r\n totalMult = totalMult.times(3);\r\n }\r\n\r\n if (!overCap && Achievement(134).isUnlocked) {\r\n totalMult = totalMult.times(2);\r\n }\r\n totalMult = totalMult.times(getAdjustedGlyphEffect(\"replicationspeed\"));\r\n if (GlyphAlteration.isAdded(\"replication\")) {\r\n totalMult = totalMult.times(\r\n Math.clampMin(Decimal.log10(Replicanti.amount) * getSecondaryGlyphEffect(\"replicationdtgain\"), 1));\r\n }\r\n totalMult = totalMult.timesEffectsOf(AlchemyResource.replication);\r\n\r\n return totalMult;\r\n}\r\n\r\nexport function replicantiCap() {\r\n return EffarigUnlock.infinity.canBeApplied\r\n ? Currency.infinitiesTotal.value\r\n .pow(TimeStudy(31).isBought ? 120 : 30)\r\n .clampMin(1)\r\n .times(Decimal.NUMBER_MAX_VALUE)\r\n : Decimal.NUMBER_MAX_VALUE;\r\n}\r\n\r\n// eslint-disable-next-line complexity\r\nexport function replicantiLoop(diff) {\r\n if (!player.replicanti.unl) return;\r\n const replicantiBeforeLoop = Replicanti.amount;\r\n PerformanceStats.start(\"Replicanti\");\r\n EventHub.dispatch(GAME_EVENT.REPLICANTI_TICK_BEFORE);\r\n // This gets the pre-cap interval (above the cap we recalculate the interval).\r\n const interval = getReplicantiInterval(false);\r\n const isUncapped = Replicanti.isUncapped;\r\n const areRGsBeingBought = Replicanti.galaxies.areBeingBought;\r\n\r\n // Figure out how many ticks to calculate for and roll over any leftover time to the next tick. The rollover\r\n // calculation is skipped if there's more than 100 replicanti ticks per game tick to reduce round-off problems.\r\n let tickCount = Decimal.divide(new Decimal(diff).add(player.replicanti.timer), interval);\r\n if (tickCount.lt(100)) player.replicanti.timer = tickCount.minus(tickCount.floor()).times(interval).toNumber();\r\n else player.replicanti.timer = 0;\r\n tickCount = tickCount.floor();\r\n\r\n const singleTickAvg = Replicanti.amount.times(player.replicanti.chance);\r\n // Note that code inside this conditional won't necessarily run every game tick; when game ticks are slower than\r\n // replicanti ticks, then tickCount will look like [0, 0, 0, 1, 0, 0, ...] on successive game ticks\r\n if (tickCount.gte(100) || (singleTickAvg.gte(10) && tickCount.gte(1))) {\r\n // Fast gain: If we're doing a very large number of ticks or each tick produces a lot, then continuous growth\r\n // every replicanti tick is a good approximation and less intensive than distribution samples. This path will\r\n // always happen above 1000 replicanti due to how singleTickAvg is calculated, so the over-cap math is only\r\n // present on this path\r\n let postScale = Math.log10(ReplicantiGrowth.scaleFactor) / ReplicantiGrowth.scaleLog10;\r\n if (V.isRunning) {\r\n postScale *= 2;\r\n }\r\n if (V.isSuperRunning) {\r\n postScale *= 5;\r\n }\r\n\r\n // Note that remainingGain is in log10 terms.\r\n let remainingGain = tickCount.times(Math.log(player.replicanti.chance + 1)).times(LOG10_E);\r\n // It is intended to be possible for both of the below conditionals to trigger.\r\n if (!isUncapped || Replicanti.amount.lte(replicantiCap())) {\r\n // Some of the gain is \"used up\" below e308, but if replicanti are uncapped\r\n // then some may be \"left over\" for increasing replicanti beyond their cap.\r\n remainingGain = fastReplicantiBelow308(remainingGain, areRGsBeingBought);\r\n }\r\n if (isUncapped && Replicanti.amount.gte(replicantiCap()) && remainingGain.gt(0)) {\r\n // Recalculate the interval (it may have increased due to additional replicanti, or,\r\n // far less importantly, decreased due to Reality Upgrade 6 and additional RG).\r\n // Don't worry here about the lack of e2000 scaling in Pelle on the first tick\r\n // (with replicanti still under e2000) causing a huge replicanti jump;\r\n // there's code later to stop replicanti from increasing by more than e308\r\n // in a single tick in Pelle.\r\n const intervalRatio = getReplicantiInterval(true).div(interval);\r\n remainingGain = remainingGain.div(intervalRatio);\r\n Replicanti.amount =\r\n Decimal.exp(remainingGain.div(LOG10_E).times(postScale).plus(1).ln() / postScale +\r\n Replicanti.amount.clampMin(1).ln());\r\n }\r\n } else if (tickCount.gt(1)) {\r\n // Multiple ticks but \"slow\" gain: This happens at low replicanti chance and amount with a fast interval, which\r\n // can happen often in early cel7. In this case we \"batch\" ticks together as full doubling events and then draw\r\n // from a Poisson distribution for how many times to do that. Any leftover ticks are used as binomial samples\r\n const batchTicks = Math.floor(tickCount.toNumber() * Math.log2(1 + player.replicanti.chance));\r\n const binomialTicks = tickCount.toNumber() - batchTicks / Math.log2(1 + player.replicanti.chance);\r\n\r\n Replicanti.amount = Replicanti.amount.times(DC.D2.pow(poissonDistribution(batchTicks)));\r\n for (let t = 0; t < Math.floor(binomialTicks); t++) {\r\n const reproduced = binomialDistribution(Replicanti.amount, player.replicanti.chance);\r\n Replicanti.amount = Replicanti.amount.plus(reproduced);\r\n }\r\n\r\n // The batching might use partial ticks; we add the rest back to the timer so it gets used next loop\r\n const leftover = binomialTicks - Math.floor(binomialTicks);\r\n player.replicanti.timer += interval.times(leftover).toNumber();\r\n } else if (tickCount.eq(1)) {\r\n // Single tick: Take a single binomial sample to properly simulate replicanti growth with randomness\r\n const reproduced = binomialDistribution(Replicanti.amount, player.replicanti.chance);\r\n Replicanti.amount = Replicanti.amount.plus(reproduced);\r\n }\r\n\r\n if (!isUncapped) Replicanti.amount = Decimal.min(replicantiCap(), Replicanti.amount);\r\n\r\n if (Pelle.isDoomed && Replicanti.amount.log10() - replicantiBeforeLoop.log10() > 308) {\r\n Replicanti.amount = replicantiBeforeLoop.times(1e308);\r\n }\r\n\r\n //Corruption 7, idk if this is good on math but hope it works--sxy\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n Replicanti.amount = Decimal.pow(Replicanti.amount,corruptionPenalties.repSing.rep[player.mending.corruption[8]]);\r\n }\r\n\r\n if (areRGsBeingBought && Replicanti.amount.gte(Decimal.NUMBER_MAX_VALUE)) {\r\n const buyer = Autobuyer.replicantiGalaxy;\r\n const isAuto = buyer.canTick && buyer.isEnabled;\r\n // There might be a manual and auto tick simultaneously; pass auto === true iff the autobuyer is ticking and\r\n // we aren't attempting to manually buy RG, because this controls modals appearing or not\r\n replicantiGalaxy(isAuto && !Replicanti.galaxies.isPlayerHoldingR);\r\n }\r\n player.records.thisReality.maxReplicanti = player.records.thisReality.maxReplicanti\r\n .clampMin(Replicanti.amount);\r\n EventHub.dispatch(GAME_EVENT.REPLICANTI_TICK_AFTER);\r\n PerformanceStats.end();\r\n}\r\n\r\nexport function replicantiMult() {\r\n return Decimal.pow(Decimal.log2(Replicanti.amount.clampMin(1)), 2)\r\n .plusEffectOf(TimeStudy(21))\r\n .timesEffectOf(TimeStudy(102))\r\n .clampMin(1)\r\n .pow(getAdjustedGlyphEffect(\"replicationpow\"));\r\n}\r\n\r\n/** @abstract */\r\nclass ReplicantiUpgradeState {\r\n /** @abstract */\r\n get id() { throw new NotImplementedError(); }\r\n /** @abstract */\r\n get value() { throw new NotImplementedError(); }\r\n\r\n /** @abstract */\r\n set value(value) { throw new NotImplementedError(); }\r\n\r\n /** @abstract */\r\n get nextValue() { throw new NotImplementedError(); }\r\n\r\n /** @abstract */\r\n get cost() { throw new NotImplementedError(); }\r\n /** @abstract */\r\n set cost(value) { throw new Error(\"Use baseCost to set cost\"); }\r\n\r\n /** @abstract */\r\n get costIncrease() { throw new NotImplementedError(); }\r\n\r\n get baseCost() { return this.cost; }\r\n /** @abstract */\r\n set baseCost(value) { throw new NotImplementedError(); }\r\n\r\n get cap() { return undefined; }\r\n get isCapped() { return false; }\r\n\r\n /** @abstract */\r\n get autobuyerMilestone() { throw new NotImplementedError(); }\r\n\r\n get canBeBought() {\r\n if (this.id === 3 && this.isCapped) return false;\r\n return !this.isCapped && Currency.infinityPoints.gte(this.cost) && player.eterc8repl !== 0;\r\n }\r\n\r\n purchase() {\r\n if (!this.canBeBought) return;\r\n Currency.infinityPoints.subtract(this.cost);\r\n this.baseCost = Decimal.times(this.baseCost, this.costIncrease);\r\n this.value = this.nextValue;\r\n if (EternityChallenge(8).isRunning) player.eterc8repl--;\r\n GameUI.update();\r\n }\r\n\r\n autobuyerTick() {\r\n while (this.canBeBought) {\r\n this.purchase();\r\n }\r\n }\r\n}\r\n\r\nexport const ReplicantiUpgrade = {\r\n chance: new class ReplicantiChanceUpgrade extends ReplicantiUpgradeState {\r\n get id() { return 1; }\r\n\r\n get value() { return player.replicanti.chance; }\r\n set value(value) { player.replicanti.chance = value; }\r\n\r\n get nextValue() {\r\n return this.nearestPercent(this.value + 0.01);\r\n }\r\n\r\n get cost() {\r\n return player.replicanti.chanceCost.dividedByEffectOf(PelleRifts.vacuum.milestones[1]);\r\n }\r\n\r\n get baseCost() { return player.replicanti.chanceCost; }\r\n set baseCost(value) { player.replicanti.chanceCost = value; }\r\n\r\n get costIncrease() { return 1e15; }\r\n\r\n get cap() {\r\n // Chance never goes over 100%.\r\n return 1;\r\n }\r\n\r\n get isCapped() {\r\n return this.nearestPercent(this.value) >= this.cap;\r\n }\r\n\r\n get autobuyerMilestone() {\r\n return EternityMilestone.autobuyerReplicantiChance;\r\n }\r\n\r\n autobuyerTick() {\r\n // Fixed price increase of 1e15; so total cost for N upgrades is:\r\n // cost + cost * 1e15 + cost * 1e30 + ... + cost * 1e15^(N-1) == cost * (1e15^N - 1) / (1e15 - 1)\r\n // N = log(IP * (1e15 - 1) / cost + 1) / log(1e15)\r\n let N = Currency.infinityPoints.value.times(this.costIncrease - 1)\r\n .dividedBy(this.cost).plus(1).log(this.costIncrease);\r\n N = Math.round((Math.min(this.value + 0.01 * Math.floor(N), this.cap) - this.value) * 100);\r\n if (N <= 0) return;\r\n const totalCost = this.cost.times(Decimal.pow(this.costIncrease, N).minus(1).dividedBy(this.costIncrease - 1));\r\n Currency.infinityPoints.subtract(totalCost);\r\n this.baseCost = this.baseCost.times(Decimal.pow(this.costIncrease, N));\r\n this.value = this.nearestPercent(this.value + 0.01 * N);\r\n }\r\n\r\n // Rounding errors suck\r\n nearestPercent(x) {\r\n return Math.round(100 * x) / 100;\r\n }\r\n }(),\r\n interval: new class ReplicantiIntervalUpgrade extends ReplicantiUpgradeState {\r\n get id() { return 2; }\r\n\r\n get value() { return player.replicanti.interval; }\r\n set value(value) { player.replicanti.interval = value; }\r\n\r\n get nextValue() {\r\n return Decimal.max(this.value.times(0.9), this.cap);\r\n }\r\n\r\n get cost() {\r\n return player.replicanti.intervalCost.dividedByEffectOf(PelleRifts.vacuum.milestones[1]);\r\n }\r\n\r\n get baseCost() { return player.replicanti.intervalCost; }\r\n set baseCost(value) { player.replicanti.intervalCost = value; }\r\n\r\n get costIncrease() { return 1e10; }\r\n\r\n get cap() {\r\n return Effects.min(50, TimeStudy(22));\r\n }\r\n\r\n get isCapped() {\r\n return this.value.lte(this.cap);\r\n }\r\n\r\n get autobuyerMilestone() {\r\n return EternityMilestone.autobuyerReplicantiInterval;\r\n }\r\n\r\n applyModifiers(value) {\r\n return getReplicantiInterval(undefined, new Decimal(value));\r\n }\r\n }(),\r\n galaxies: new class ReplicantiGalaxiesUpgrade extends ReplicantiUpgradeState {\r\n get id() { return 3; }\r\n\r\n get value() { return player.replicanti.boughtGalaxyCap; }\r\n set value(value) { player.replicanti.boughtGalaxyCap = value; }\r\n\r\n get nextValue() {\r\n return this.value + 1;\r\n }\r\n\r\n get cost() {\r\n return this.baseCost.dividedByEffectsOf(TimeStudy(233), PelleRifts.vacuum.milestones[1]);\r\n }\r\n\r\n get baseCost() { return player.replicanti.galCost; }\r\n set baseCost(value) { player.replicanti.galCost = value; }\r\n\r\n get distantRGStart() {\r\n return 100 + Effects.sum(GlyphSacrifice.replication) + (MendingUpgrade(17).isBought ? 1400 : 0);\r\n }\r\n\r\n get remoteRGStart() {\r\n return 1000 + Effects.sum(GlyphSacrifice.replication) + (MendingUpgrade(17).isBought ? 9000 : 0);\r\n }\r\n\r\n get costIncrease() {\r\n const galaxies = this.value;\r\n let increase = EternityChallenge(6).isRunning\r\n ? DC.E2.pow(galaxies).times(DC.E2)\r\n : DC.E5.pow(galaxies).times(DC.E25);\r\n if (galaxies >= this.distantRGStart) {\r\n increase = increase.times(DC.E50.pow(galaxies - this.distantRGStart + 5));\r\n }\r\n if (galaxies >= this.remoteRGStart) {\r\n increase = increase.times(DC.E5.pow(Math.pow(galaxies - this.remoteRGStart + 1, 2)));\r\n }\r\n return increase;\r\n }\r\n\r\n get autobuyerMilestone() {\r\n return EternityMilestone.autobuyerReplicantiMaxGalaxies;\r\n }\r\n get cap(){\r\n return 250000;\r\n }\r\n\r\n get isCapped() {\r\n return this.value > this.cap;\r\n }\r\n\r\n get extra() {\r\n return Effects.max(0, TimeStudy(131)) + PelleRifts.decay.milestones[2].effectOrDefault(0);\r\n }\r\n\r\n autobuyerTick() {\r\n // This isn't a hot enough autobuyer to worry about doing an actual inverse.\r\n let bulk = null;\r\n try{\r\n bulk = bulkBuyBinarySearch(Currency.infinityPoints.value, {\r\n costFunction: x => this.baseCostAfterCount(x).dividedByEffectOf(TimeStudy(233)),\r\n firstCost: this.cost,\r\n cumulative: true,\r\n }, this.value);\r\n }\r\n catch{\r\n return;\r\n }\r\n if (!bulk) return;\r\n Currency.infinityPoints.subtract(bulk.purchasePrice);\r\n\r\n this.value += bulk.quantity;\r\n this.baseCost = this.baseCostAfterCount(this.value);\r\n }\r\n\r\n baseCostAfterCount(count) {\r\n const logBase = 170;\r\n const logBaseIncrease = EternityChallenge(6).isRunning ? 2 : 25;\r\n const logCostScaling = EternityChallenge(6).isRunning ? 2 : 5;\r\n const distantReplicatedGalaxyStart = 100 + Effects.sum(GlyphSacrifice.replication) + (MendingUpgrade(17).isBought ? 1400 : 0);\r\n const remoteReplicatedGalaxyStart = 1000 + Effects.sum(GlyphSacrifice.replication) + (MendingUpgrade(17).isBought ? 9000 : 0);\r\n let logCost = logBase + count * logBaseIncrease + (count * (count - 1) / 2) * logCostScaling;\r\n if (count > distantReplicatedGalaxyStart) {\r\n const logDistantScaling = 50;\r\n // When distant scaling kicks in, the price increase jumps by a few extra steps.\r\n // So, the difference between successive scales goes 5, 5, 5, 255, 55, 55, ...\r\n const extraIncrements = 5;\r\n const numDistant = count - distantReplicatedGalaxyStart;\r\n logCost += logDistantScaling * numDistant * (numDistant + 2 * extraIncrements - 1) / 2;\r\n }\r\n if (count > remoteReplicatedGalaxyStart) {\r\n const logRemoteScaling = 5;\r\n const numRemote = count - remoteReplicatedGalaxyStart;\r\n // The formula x * (x + 1) * (2 * x + 1) / 6 is the sum of the first n squares.\r\n logCost += logRemoteScaling * numRemote * (numRemote + 1) * (2 * numRemote + 1) / 6;\r\n }\r\n return Decimal.pow10(logCost);\r\n }\r\n }(),\r\n};\r\n\r\nexport const Replicanti = {\r\n get areUnlocked() {\r\n return player.replicanti.unl;\r\n },\r\n reset(force = false) {\r\n const unlocked = force ? false : EternityMilestone.unlockReplicanti.isReached;\r\n player.replicanti = {\r\n unl: unlocked,\r\n amount: unlocked ? DC.D1 : DC.D0,\r\n timer: 0,\r\n chance: 0.01,\r\n chanceCost: DC.E150,\r\n interval: DC.E3,\r\n intervalCost: DC.E140,\r\n boughtGalaxyCap: 0,\r\n galaxies: 0,\r\n galCost: DC.E170,\r\n };\r\n },\r\n unlock(freeUnlock = false) {\r\n const cost = DC.E140.dividedByEffectOf(PelleRifts.vacuum.milestones[1]);\r\n if (player.replicanti.unl) return;\r\n if (freeUnlock || Currency.infinityPoints.gte(cost)) {\r\n if (!freeUnlock) Currency.infinityPoints.subtract(cost);\r\n player.replicanti.unl = true;\r\n player.replicanti.timer = 0;\r\n Replicanti.amount = DC.D1;\r\n }\r\n },\r\n get amount() {\r\n return player.replicanti.amount;\r\n },\r\n set amount(value) {\r\n player.replicanti.amount = value;\r\n },\r\n get chance() {\r\n return ReplicantiUpgrade.chance.value;\r\n },\r\n galaxies: {\r\n isPlayerHoldingR: false,\r\n get bought() {\r\n return Math.min(250000, player.replicanti.galaxies);\r\n },\r\n get extra() {\r\n return Math.min(Math.floor((Effects.sum(\r\n TimeStudy(225),\r\n TimeStudy(226)\r\n ) + Effarig.bonusRG) * TimeStudy(303).effectOrDefault(1)), 350000);\r\n },\r\n get total() {\r\n return this.bought + this.extra;\r\n },\r\n get max() {\r\n return Math.min(250000, ReplicantiUpgrade.galaxies.value) + Math.min(350000, ReplicantiUpgrade.galaxies.extra);\r\n },\r\n get canBuyMore() {\r\n if (this.bought >= 250000) return false;\r\n if (!Replicanti.amount.gte(Decimal.NUMBER_MAX_VALUE)) return false;\r\n return this.bought < this.max;\r\n },\r\n get areBeingBought() {\r\n const buyer = Autobuyer.replicantiGalaxy;\r\n // If the confirmation is enabled, we presume the player wants to confirm each Replicanti Galaxy purchase\r\n return (buyer.canTick && buyer.isEnabled) ||\r\n (!player.options.confirmations.replicantiGalaxy && this.isPlayerHoldingR);\r\n },\r\n get gain() {\r\n if (!this.canBuyMore) return 0;\r\n if (Achievement(126).isUnlocked) {\r\n const maxGain = Replicanti.galaxies.max - player.replicanti.galaxies;\r\n const logReplicanti = Replicanti.amount.log10();\r\n return Math.min(maxGain, Math.floor(logReplicanti / LOG10_MAX_VALUE));\r\n }\r\n return 1;\r\n },\r\n },\r\n get isUncapped() {\r\n return TimeStudy(192).isBought || PelleRifts.vacuum.milestones[1].canBeApplied;\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class TimeTheoremPurchaseType {\r\n /**\r\n * @abstract\r\n */\r\n get amount() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n set amount(value) { throw new NotImplementedError(); }\r\n\r\n add(amount) { this.amount += amount; }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get currency() { throw new NotImplementedError(); }\r\n\r\n get cost() { return this.costBase.times(this.costIncrement.pow(this.amount)); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get costBase() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get costIncrement() { throw new NotImplementedError(); }\r\n\r\n get bulkPossible() {\r\n if (Perk.ttFree.canBeApplied) {\r\n return Math.floor(this.currency.value.divide(this.cost).log10() / this.costIncrement.log10() + 1);\r\n }\r\n return Decimal.affordGeometricSeries(this.currency.value, this.cost, this.costIncrement, 0).toNumber();\r\n }\r\n\r\n // Note: This is actually just the cost of the largest term of the geometric series. If buying EP without the\r\n // perk that makes them free, this will be incorrect, but the EP object already overrides this anyway\r\n bulkCost(amount) {\r\n return this.cost.times(this.costIncrement.pow(amount - 1));\r\n }\r\n\r\n purchase(bulk) {\r\n if (!this.canAfford) return false;\r\n let purchased = false;\r\n const amount = this.bulkPossible;\r\n const buyFn = cost => (Perk.ttFree.canBeApplied ? this.currency.gte(cost) : this.currency.purchase(cost));\r\n // This will sometimes buy one too few for EP, so we just have to buy 1 after.\r\n if (bulk && buyFn(this.bulkCost(amount))) {\r\n Currency.timeTheorems.add(amount);\r\n this.add(amount);\r\n purchased = true;\r\n }\r\n if (buyFn(this.cost)) {\r\n Currency.timeTheorems.add(1);\r\n this.add(1);\r\n purchased = true;\r\n }\r\n if (purchased) player.requirementChecks.reality.noPurchasedTT = false;\r\n if (TimeTheorems.totalPurchased() > 114) PelleStrikes.ECs.trigger();\r\n return purchased;\r\n }\r\n\r\n get canAfford() {\r\n return this.currency.gte(this.cost) && !player.eternities.eq(0);\r\n }\r\n\r\n reset() {\r\n this.amount = 0;\r\n }\r\n}\r\n\r\nTimeTheoremPurchaseType.am = new class extends TimeTheoremPurchaseType {\r\n get amount() { return player.timestudy.amBought; }\r\n set amount(value) { player.timestudy.amBought = value; }\r\n\r\n get currency() { return Currency.antimatter; }\r\n get costBase() { return DC.E20000; }\r\n get costIncrement() { \r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n return DC.E20000.times(corruptionPenalties.toD.hiddenFive[player.mending.corruption[7]]);\r\n }\r\n return DC.E20000; \r\n }\r\n}();\r\n\r\nTimeTheoremPurchaseType.ip = new class extends TimeTheoremPurchaseType {\r\n get amount() { return player.timestudy.ipBought; }\r\n set amount(value) { player.timestudy.ipBought = value; }\r\n\r\n get currency() { return Currency.infinityPoints; }\r\n get costBase() { return DC.D1; }\r\n get costIncrement() { \r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n return DC.E100.times(corruptionPenalties.toD.hiddenFive[player.mending.corruption[7]]);\r\n }\r\n return DC.E100; \r\n }\r\n}();\r\n\r\nTimeTheoremPurchaseType.ep = new class extends TimeTheoremPurchaseType {\r\n get amount() { return player.timestudy.epBought; }\r\n set amount(value) { player.timestudy.epBought = value; }\r\n\r\n get currency() { return Currency.eternityPoints; }\r\n get costBase() { return DC.D1; }\r\n get costIncrement() { \r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n return DC.D2.times(corruptionPenalties.toD.hiddenFive[player.mending.corruption[7]]);\r\n }\r\n return DC.D2; \r\n }\r\n\r\n bulkCost(amount) {\r\n if (Perk.ttFree.canBeApplied) return this.cost.times(this.costIncrement.pow(amount - 1));\r\n return this.costIncrement.pow(amount + this.amount).subtract(this.cost);\r\n }\r\n}();\r\n\r\nexport const TimeTheorems = {\r\n checkForBuying(auto) {\r\n if (PlayerProgress.realityUnlocked() || TimeDimension(1).bought) return true;\r\n if (!auto) Modal.message.show(`You need to buy at least ${formatInt(1)} Time Dimension before you can purchase\r\n Time Theorems.`, { closeEvent: GAME_EVENT.REALITY_RESET_AFTER });\r\n return false;\r\n },\r\n\r\n buyOne(auto = false, type) {\r\n if (!this.checkForBuying(auto)) return 0;\r\n if (!TimeTheoremPurchaseType[type].purchase(false)) return 0;\r\n return 1;\r\n },\r\n\r\n // This is only called via automation and there's no manual use-case, so we assume auto is true and simplify a bit\r\n buyOneOfEach() {\r\n if (!this.checkForBuying(true)) return 0;\r\n const ttAM = this.buyOne(true, \"am\");\r\n const ttIP = this.buyOne(true, \"ip\");\r\n const ttEP = this.buyOne(true, \"ep\");\r\n return ttAM + ttIP + ttEP;\r\n },\r\n\r\n buyMax(auto = false) {\r\n if (!this.checkForBuying(auto)) return 0;\r\n const ttAM = TimeTheoremPurchaseType.am.purchase(true);\r\n const ttIP = TimeTheoremPurchaseType.ip.purchase(true);\r\n const ttEP = TimeTheoremPurchaseType.ep.purchase(true);\r\n return ttAM + ttIP + ttEP;\r\n },\r\n\r\n totalPurchased() {\r\n return TimeTheoremPurchaseType.am.amount +\r\n TimeTheoremPurchaseType.ip.amount +\r\n TimeTheoremPurchaseType.ep.amount;\r\n },\r\n\r\n calculateTimeStudiesCost() {\r\n let totalCost = TimeStudy.boughtNormalTS()\r\n .map(ts => ts.cost)\r\n .reduce(Number.sumReducer, 0);\r\n const ecStudy = TimeStudy.eternityChallenge.current();\r\n if (ecStudy !== undefined) {\r\n totalCost += ecStudy.cost;\r\n }\r\n if (Enslaved.isRunning && player.celestials.enslaved.hasSecretStudy) totalCost -= 100;\r\n return totalCost;\r\n }\r\n};\r\n","import { BitPurchasableMechanicState, RebuyableMechanicState } from \"./game-mechanics\";\r\nimport { DC } from \"./constants\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nclass ImaginaryUpgradeState extends BitPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.registerEvents(config.checkEvent, () => this.tryUnlock());\r\n }\r\n get isBought() {\r\n return (this.bits & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set isBought(value) {\r\n if (value) {\r\n this.bits |= (1 << this.bitIndex);\r\n } else {\r\n this.bits &= ~(1 << this.bitIndex);\r\n }\r\n }\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get requirement() {\r\n return typeof this.config.requirement === \"function\" ? this.config.requirement() : this.config.requirement;\r\n }\r\n\r\n get lockEvent() {\r\n return typeof this.config.lockEvent === \"function\" ? this.config.lockEvent() : this.config.lockEvent;\r\n }\r\n\r\n get currency() {\r\n return Currency.imaginaryMachines;\r\n }\r\n\r\n get bitIndex() {\r\n return this.id;\r\n }\r\n\r\n get bits() {\r\n return player.reality.imaginaryUpgradeBits;\r\n }\r\n\r\n set bits(value) {\r\n player.reality.imaginaryUpgradeBits = value;\r\n }\r\n\r\n get hasPlayerLock() {\r\n return (player.reality.reqLock.imaginary & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set hasPlayerLock(value) {\r\n if (value) player.reality.reqLock.imaginary |= 1 << this.bitIndex;\r\n else player.reality.reqLock.imaginary &= ~(1 << this.bitIndex);\r\n }\r\n\r\n get isLockingMechanics() {\r\n return this.hasPlayerLock && this.isPossible && !this.isAvailableForPurchase;\r\n }\r\n\r\n // Required to be changed this way to avoid direct prop mutation in Vue components\r\n setMechanicLock(value) {\r\n this.hasPlayerLock = value;\r\n }\r\n\r\n toggleMechanicLock() {\r\n this.hasPlayerLock = !this.hasPlayerLock;\r\n }\r\n\r\n // Note we don't actually show the modal if we already failed or unlocked it\r\n tryShowWarningModal(specialLockText) {\r\n if (this.isPossible && !this.isAvailableForPurchase) {\r\n Modal.upgradeLock.show({ upgrade: this, isImaginary: true, specialLockText });\r\n }\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n if(MendingMilestone.eight.isReached) return true;\r\n return (player.reality.imaginaryUpgReqs & (1 << this.id)) !== 0 || (MendingMilestone.four.isReached && ![25, 15, 16, 17, 18, 19].includes(this.id)) || (MendingMilestone.three.isReached && this.id === 20);\r\n }\r\n\r\n get isPossible() {\r\n if ((this.id === 15 || this.id === 25) && MendingMilestone.eight.isReached){\r\n return true\r\n }\r\n if(MendingMilestone.four.isReached || (this.id === 20 && MendingMilestone.three.isReached) || (this.id === 15 && MendingUpgrade(4).isBought)){\r\n return true;\r\n }\r\n return this.config.hasFailed ? !this.config.hasFailed() : true;\r\n }\r\n\r\n get canBeApplied() {\r\n return super.canBeApplied && !this.pelleDisabled;\r\n }\r\n\r\n get pelleDisabled() {\r\n return Pelle.isDoomed && this.config.isDisabledInDoomed;\r\n }\r\n\r\n tryUnlock() {\r\n if (!MachineHandler.isIMUnlocked || this.isAvailableForPurchase || !this.config.checkRequirement()) return;\r\n player.reality.imaginaryUpgReqs |= (1 << this.id);\r\n GameUI.notify.reality(`You've unlocked an Imaginary Upgrade: ${this.config.name}`);\r\n this.hasPlayerLock = false;\r\n }\r\n\r\n onPurchased() {\r\n EventHub.dispatch(GAME_EVENT.REALITY_UPGRADE_BOUGHT);\r\n if (this.id >= 15 && this.id <= 18) {\r\n DarkMatterDimension(this.id - 14).amount = DC.D1;\r\n if (this.id === 17) Laitela.quotes.thirdDMD.show();\r\n }\r\n if (this.id >= 15 && this.id <= 19) {\r\n // Need to clear before retriggering, or else it won't actually show up on subsequent upgrades\r\n TabNotification.laitelaUnlock.clearTrigger();\r\n TabNotification.laitelaUnlock.tryTrigger();\r\n }\r\n if (this.id === 21) {\r\n Laitela.quotes.finalRowIM.show();\r\n }\r\n if (this.id === 22) {\r\n for (const key of Object.keys(player.reality.glyphs.sac)) {\r\n if (player.reality.glyphs.sac[key].lte(1e100)) player.reality.glyphs.sac[key] = ImaginaryUpgrade(22).effectValue;\r\n }\r\n }\r\n if (this.id === 25) {\r\n TabNotification.pelleUnlock.tryTrigger();\r\n }\r\n }\r\n}\r\n\r\nclass RebuyableImaginaryUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.imaginaryMachines;\r\n }\r\n\r\n get boughtAmount() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return 0;\r\n return player.reality.imaginaryRebuyables[this.id];\r\n }\r\n\r\n get canBeApplied() {\r\n return super.canBeApplied && !this.pelleDisabled && corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]];\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return false;\r\n return true;\r\n }\r\n\r\n get pelleDisabled() {\r\n return Pelle.isDoomed;\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.reality.imaginaryRebuyables[this.id] = value;\r\n }\r\n\r\n onPurchased() {\r\n if (this.id === 7) {\r\n GameCache.staticGlyphWeights.invalidate();\r\n }\r\n }\r\n}\r\n\r\nImaginaryUpgradeState.index = mapGameData(\r\n GameDatabase.reality.imaginaryUpgrades,\r\n config => (config.id <= 10\r\n ? new RebuyableImaginaryUpgradeState(config)\r\n : new ImaginaryUpgradeState(config))\r\n);\r\n\r\nexport const ImaginaryUpgrade = id => ImaginaryUpgradeState.index[id];\r\n\r\nexport const ImaginaryUpgrades = {\r\n all: ImaginaryUpgradeState.index.compact(),\r\n get totalRebuyables() {\r\n const rebuyables = player.reality.imaginaryRebuyables;\r\n let total = 0;\r\n for (const i in rebuyables) total += rebuyables[i];\r\n return total;\r\n },\r\n get totalSinglePurchase() {\r\n return this.all.countWhere(u => u.isBought);\r\n },\r\n get allBought() {\r\n return (player.reality.imaginaryUpgradeBits >> 6) + 1 === 1 << (GameDatabase.reality.imaginaryUpgrades.length - 5);\r\n }\r\n};\r\n","import { SetPurchasableMechanicState } from \"./game-mechanics\";\r\nimport { MendingMilestone } from \"./mending\";\r\n\r\nclass PerkState extends SetPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n /**\r\n * @type {PerkState[]}\r\n */\r\n this.connectedPerks = [];\r\n }\r\n\r\n get automatorPoints() {\r\n return this.config.automatorPoints ? this.config.automatorPoints : 0;\r\n }\r\n\r\n get label() {\r\n return this.config.label;\r\n }\r\n\r\n get shortDescription() {\r\n return this.config.shortDescription ? this.config.shortDescription() : \"\";\r\n }\r\n\r\n get currency() {\r\n return Currency.perkPoints;\r\n }\r\n\r\n get set() {\r\n return player.reality.perks;\r\n }\r\n\r\n get cost() {\r\n return 1;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return this.id === 0 || this.connectedPerks.some(p => p.isBought);\r\n }\r\n\r\n get canBeApplied() {\r\n if(this.id === 0 && MendingMilestone.three.isReached) return true;\r\n else return this.isBought && !(Pelle.isDoomed && Pelle.uselessPerks.includes(this.id));\r\n }\r\n\r\n initializeConnections() {\r\n this.connectedPerks = GameDatabase.reality.perkConnections[this.id].map(id => Perks.find(id));\r\n }\r\n\r\n onPurchased() {\r\n if (this.config.bumpCurrency !== undefined) this.config.bumpCurrency();\r\n if (this.label === \"EU1\" && Currency.eternities.gt(0)) applyEU1();\r\n if (this.label === \"ACHNR\") {\r\n if (Achievements.preReality.some(a => !a.isUnlocked)) player.reality.gainedAutoAchievements = true;\r\n for (const achievement of Achievements.preReality) {\r\n achievement.unlock(true);\r\n }\r\n }\r\n GameCache.achievementPeriod.invalidate();\r\n GameCache.buyablePerks.invalidate();\r\n EventHub.dispatch(GAME_EVENT.PERK_BOUGHT);\r\n }\r\n}\r\n\r\nexport const Perk = mapGameDataToObject(\r\n GameDatabase.reality.perks,\r\n config => new PerkState(config)\r\n);\r\n\r\nexport const Perks = {\r\n all: Perk.all,\r\n /**\r\n * @param {number} id\r\n * @returns {PerkState}\r\n */\r\n find(id) {\r\n return Perks.all.find(p => p.id === id);\r\n }\r\n};\r\n\r\nfor (const perk of Perks.all) {\r\n perk.initializeConnections();\r\n}\r\n\r\nexport function checkPerkValidity() {\r\n if (player.reality.perks.every(id => Perks.find(id) !== undefined)) return;\r\n dev.respecPerks();\r\n if (Currency.perkPoints.gte(Perks.all.length)) {\r\n dev.buyAllPerks();\r\n Modal.message.show(\"Some of your Perks were invalid, but you auto-bought all valid perks.\");\r\n } else {\r\n Modal.message.show(\"Some of your Perks were invalid, so your Perks have been reset and your Perk Points refunded.\");\r\n }\r\n}\r\n","import { RebuyableMechanicState, SetPurchasableMechanicState } from \"./game-mechanics\";\r\nimport { DC } from \"./constants\";\r\nimport FullScreenAnimationHandler from \"./full-screen-animation-handler\";\r\nimport { SpeedrunMilestones } from \"./speedrun\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\nimport { CorruptionUpgrade } from \"./corruption-upgrades\";\r\n\r\nexport function animateAndDilate() {\r\n FullScreenAnimationHandler.display(\"a-dilate\", 2);\r\n setTimeout(startDilatedEternity, 1000);\r\n}\r\n\r\n// eslint-disable-next-line no-empty-function\r\nexport function animateAndUndilate(callback) {\r\n FullScreenAnimationHandler.display(\"a-undilate\", 2);\r\n setTimeout(() => {\r\n eternity(false, false, { switchingDilation: true });\r\n if (callback) callback();\r\n }, 1000);\r\n}\r\n\r\nexport function startDilatedEternityRequest() {\r\n if (!PlayerProgress.dilationUnlocked() || (Pelle.isDoomed && !Pelle.canDilateInPelle)) return;\r\n const playAnimation = player.options.animations.dilation && !FullScreenAnimationHandler.isDisplaying;\r\n if (player.dilation.active) {\r\n if (player.options.confirmations.dilation) {\r\n Modal.exitDilation.show();\r\n } else if (playAnimation) {\r\n animateAndUndilate();\r\n } else {\r\n eternity(false, false, { switchingDilation: true });\r\n }\r\n } else if (player.options.confirmations.dilation) {\r\n Modal.enterDilation.show();\r\n } else if (playAnimation) {\r\n animateAndDilate();\r\n } else {\r\n startDilatedEternity();\r\n }\r\n}\r\n\r\nexport function startDilatedEternity(auto) {\r\n if (!PlayerProgress.dilationUnlocked()) return false;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return false;\r\n if (player.dilation.active) {\r\n eternity(false, auto, { switchingDilation: true });\r\n return false;\r\n }\r\n Achievement(136).unlock();\r\n eternity(false, auto, { switchingDilation: true });\r\n player.dilation.active = true;\r\n if (Pelle.isDoomed) PelleStrikes.dilation.trigger();\r\n return true;\r\n}\r\n\r\nconst DIL_UPG_NAMES = [\r\n null, \"dtGain\", \"galaxyThreshold\", \"tachyonGain\", \"doubleGalaxies\", \"tdMultReplicanti\",\r\n \"ndMultDT\", \"ipMultDT\", \"timeStudySplit\", \"dilationPenalty\", \"ttGenerator\",\r\n \"dtGainPelle\", \"galaxyMultiplier\", \"tickspeedPower\", \"galaxyThresholdPelle\", \"flatDilationMult\"\r\n];\r\n\r\nexport function buyDilationUpgrade(id, bulk = 1) {\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return false;\r\n // Upgrades 1-3 are rebuyable, and can be automatically bought in bulk with a perk shop upgrade\r\n const upgrade = DilationUpgrade[DIL_UPG_NAMES[id]];\r\n if (id > 3 && id < 11) {\r\n if (player.dilation.upgrades.has(id)) return false;\r\n if (!Currency.dilatedTime.purchase(upgrade.cost)) return false;\r\n player.dilation.upgrades.add(id);\r\n if (id === 4) player.dilation.totalTachyonGalaxies *= 2;\r\n } else {\r\n const upgAmount = player.dilation.rebuyables[id];\r\n let whichCap = Pelle.isDoomed ? upgrade.config.pellePurchaseCap : upgrade.config.purchaseCap\r\n if (Currency.dilatedTime.lt(upgrade.cost) || upgAmount >= whichCap) return false;\r\n\r\n let buying = Decimal.affordGeometricSeries(Currency.dilatedTime.value,\r\n upgrade.config.initialCost, upgrade.config.increment, upgAmount).toNumber();\r\n buying = Math.clampMax(buying, bulk);\r\n buying = Math.clampMax(buying, whichCap - upgAmount);\r\n const cost = Decimal.sumGeometricSeries(buying, upgrade.config.initialCost, upgrade.config.increment, upgAmount);\r\n Currency.dilatedTime.subtract(cost);\r\n player.dilation.rebuyables[id] += buying;\r\n if (id === 2) {\r\n if (!Perk.bypassTGReset.isBought || Pelle.isDoomed) Currency.dilatedTime.reset();\r\n player.dilation.nextThreshold = DC.E3;\r\n player.dilation.baseTachyonGalaxies = 0;\r\n player.dilation.totalTachyonGalaxies = 0;\r\n }\r\n\r\n if (id === 3 && !Pelle.isDisabled(\"tpMults\")) {\r\n let retroactiveTPFactor = Effects.max(\r\n 1,\r\n Perk.retroactiveTP1,\r\n Perk.retroactiveTP2,\r\n Perk.retroactiveTP3,\r\n Perk.retroactiveTP4\r\n );\r\n if (Enslaved.isRunning) {\r\n retroactiveTPFactor = Math.pow(retroactiveTPFactor, Enslaved.tachyonNerf);\r\n }\r\n Currency.tachyonParticles.multiply(Decimal.pow(retroactiveTPFactor, buying));\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n Currency.tachyonParticles.value = Currency.tachyonParticles.value.pow(Currency.tachyonParticles.value,corruptionPenalties.secondaryRejection[player.mending.corruption[7]]);\r\n }*/\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function getTachyonGalaxyMult(thresholdUpgrade, amnt) {\r\n // This specifically needs to be an undefined check because sometimes thresholdUpgrade is zero\r\n const upgrade = thresholdUpgrade === undefined ? DilationUpgrade.galaxyThreshold.effectValue : thresholdUpgrade;\r\n let thresholdMult = 3.65 * upgrade + 0.35;\r\n const glyphEffect = getAdjustedGlyphEffect(\"dilationgalaxyThreshold\");\r\n const glyphReduction = glyphEffect === 0 ? 1 : glyphEffect;\r\n let power = DilationUpgrade.galaxyThresholdPelle.canBeApplied\r\n ? DilationUpgrade.galaxyThresholdPelle.effectValue : 1;\r\n let tgSoftcapOne = 50000;\r\n let tgSoftcapOneApplytimes = Math.floor((amnt == undefined ? player.dilation.baseTachyonGalaxies : amnt) / 50000);\r\n //let tgSoftcapTwo = 150000;\r\n if ((amnt == undefined ? player.dilation.baseTachyonGalaxies : amnt) >= tgSoftcapOne && !Pelle.isDoomed){\r\n power *= ((1.5 - (0.005 * player.mending.rebuyables[11])) * tgSoftcapOneApplytimes);\r\n }\r\n /*if (player.dilation.totalTachyonGalaxies >= tgSoftcapTwo && !Pelle.isDoomed){\r\n power *= 1.5;\r\n }*/\r\n let one = Math.max(1.1, (thresholdMult * glyphReduction)) ** power\r\n return Math.min(Math.max(1, one), 1e300);\r\n}\r\n\r\nexport function getDilationGainPerSecond() {\r\n if (Pelle.isDoomed) {\r\n let x = MendingMilestone.one.isReached ? 100 : 1;\r\n const tachyonEffect = Currency.tachyonParticles.value.pow(PelleRifts.paradox.milestones[1].effectOrDefault(1));\r\n let primeAnswer = new Decimal(tachyonEffect)\r\n .timesEffectsOf(DilationUpgrade.dtGain, DilationUpgrade.dtGainPelle, DilationUpgrade.flatDilationMult)\r\n .times(ShopPurchase.dilatedTimePurchases.currentMult ** 0.5).times(x)\r\n .times(Pelle.specialGlyphEffect.dilation).div(1e5);\r\n if(Ra.unlocks.unlockPelleGlyphEffects.isUnlocked) primeAnswer=primeAnswer.times(getAdjustedGlyphEffect(\"dilationDT\")).times(Math.clampMin(Decimal.log10(Replicanti.amount) * getAdjustedGlyphEffect(\"replicationdtgain\"), 1));\r\n return primeAnswer;\r\n }\r\n let dtRate = new Decimal(Currency.tachyonParticles.value)\r\n .timesEffectsOf(\r\n DilationUpgrade.dtGain,\r\n Achievement(132),\r\n Achievement(137),\r\n RealityUpgrade(1),\r\n AlchemyResource.dilation,\r\n Ra.unlocks.continuousTTBoost.effects.dilatedTime,\r\n Ra.unlocks.peakGamespeedDT,\r\n DilationUpgrade.dtGainPelle,\r\n );\r\n if (MendingMilestone.one.isReached){\r\n dtRate = dtRate.times(100);\r\n }\r\n dtRate = dtRate.times(getAdjustedGlyphEffect(\"dilationDT\"));\r\n dtRate = dtRate.times(ShopPurchase.dilatedTimePurchases.currentMult);\r\n dtRate = dtRate.times(\r\n Math.clampMin(Decimal.log10(Replicanti.amount) * getAdjustedGlyphEffect(\"replicationdtgain\"), 1));\r\n if(Ra.unlocks.relicShardBoost.isUnlocked) dtRate = dtRate.pow(1 + Math.max(0, (Currency.relicShards.value.log10() / 1337)));\r\n if (Enslaved.isRunning && !dtRate.eq(0)) dtRate = Decimal.pow10(Math.pow(dtRate.plus(1).log10(), 0.85) - 1);\r\n if (V.isRunning) dtRate = dtRate.pow(0.5);\r\n if (V.isSuperRunning) dtRate = dtRate.pow(0.000001);\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let toDpower=corruptionPenalties.toD.power[player.mending.corruption[7]];\r\n let toDmult=corruptionPenalties.toD.mult[player.mending.corruption[7]]\r\n if(CorruptionUpgrade(23).isBought&&player.mending.corruption[7]>=1){\r\n toDpower+=0.2;\r\n toDmult=toDmult.times(100000);\r\n }\r\n dtRate = Decimal.pow(dtRate,toDpower);\r\n dtRate = dtRate.times(toDmult);\r\n }\r\n return dtRate;\r\n}\r\n\r\nexport function tachyonGainMultiplier() {\r\n if (Pelle.isDisabled(\"tpMults\")) return new Decimal(1);\r\n const pow = Enslaved.isRunning ? Enslaved.tachyonNerf : 1;\r\n return DC.D1.timesEffectsOf(\r\n DilationUpgrade.tachyonGain,\r\n GlyphSacrifice.dilation,\r\n Achievement(132),\r\n RealityUpgrade(4),\r\n RealityUpgrade(8),\r\n RealityUpgrade(15)\r\n ).pow(pow);\r\n}\r\n\r\nexport function rewardTP() {\r\n Currency.tachyonParticles.bumpTo(getTP(player.records.thisEternity.maxAM, true));\r\n //I hope this is the only place for TP,TP so weird--sxy\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n Currency.tachyonParticles.value = Decimal.pow(Currency.tachyonParticles.value,corruptionPenalties.toD.power[player.mending.corruption[7]]);\r\n }\r\n player.dilation.lastEP = Currency.eternityPoints.value;\r\n}\r\n\r\n// This function exists to apply Teresa-25 in a consistent way; TP multipliers can be very volatile and\r\n// applying the reward only once upon unlock promotes min-maxing the upgrade by unlocking dilation with\r\n// TP multipliers as large as possible. Applying the reward to a base TP value and letting the multipliers\r\n// act dynamically on this fixed base value elsewhere solves that issue\r\nexport function getBaseTP(antimatter, requireEternity) {\r\n if (!Player.canEternity && requireEternity) return DC.D0;\r\n const am = (isInCelestialReality() || Pelle.isDoomed)\r\n ? antimatter\r\n : Ra.unlocks.unlockDilationStartingTP.effectOrDefault(antimatter);\r\n let baseTP = Decimal.pow(Decimal.log10(am) / 400, 1.5);\r\n if (Enslaved.isRunning) baseTP = baseTP.pow(Enslaved.tachyonNerf);\r\n return baseTP;\r\n}\r\n\r\n// Returns the TP that would be gained this run\r\nexport function getTP(antimatter, requireEternity) {\r\n let x = getBaseTP(antimatter, requireEternity).times(tachyonGainMultiplier());\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Decimal.pow(x,corruptionPenalties.secondaryRejection[player.mending.corruption[7]]);\r\n }*/\r\n return x;\r\n}\r\n\r\n// Returns the amount of TP gained, subtracting out current TP; used for displaying gained TP, text on the\r\n// \"exit dilation\" button (saying whether you need more antimatter), and in last 10 eternities\r\nexport function getTachyonGain(requireEternity) {\r\n return getTP(Currency.antimatter.value, requireEternity).minus(Currency.tachyonParticles.value).clampMin(0);\r\n}\r\n\r\n// Returns the minimum antimatter needed in order to gain more TP; used only for display purposes\r\nexport function getTachyonReq() {\r\n let effectiveTP = Currency.tachyonParticles.value.dividedBy(tachyonGainMultiplier());\r\n if (Enslaved.isRunning) effectiveTP = effectiveTP.pow(1 / Enslaved.tachyonNerf);\r\n return Decimal.pow10(\r\n effectiveTP\r\n .times(Math.pow(400, 1.5))\r\n .pow(2 / 3)\r\n .toNumber()\r\n );\r\n}\r\n\r\nexport function getDilationTimeEstimate(goal) {\r\n const currentDTGain = getDilationGainPerSecond();\r\n const rawDTGain = currentDTGain.times(getGameSpeedupForDisplay());\r\n const currentDT = Currency.dilatedTime.value;\r\n if (currentDTGain.eq(0)) return null;\r\n if (PelleRifts.paradox.isActive) {\r\n const drain = Pelle.riftDrainPercent;\r\n const goalNetRate = rawDTGain.minus(Decimal.multiply(goal, drain));\r\n const currNetRate = rawDTGain.minus(currentDT.times(drain));\r\n if (goalNetRate.lt(0)) return \"Never affordable due to Rift drain\";\r\n return TimeSpan.fromSeconds(currNetRate.div(goalNetRate).ln() / drain).toTimeEstimate();\r\n }\r\n return TimeSpan.fromSeconds(Decimal.sub(goal, currentDT)\r\n .div(rawDTGain).toNumber()).toTimeEstimate();\r\n}\r\n\r\nfunction affordsXUpgrades(currency, id) {\r\n return Decimal.affordGeometricSeries(currency, DilationUpgrade.all[id + 1].config.initialCost, DilationUpgrade.all[id + 1].config.increment, player.dilation.rebuyables[id + 1]).toNumber()\r\n}\r\n\r\nexport function buyMaxDilationUpgrades() {\r\n const TGRBought = Perk.bypassTGReset.isBought || Pelle.isDoomed\r\n for (let i = 0; Pelle.isDoomed ? i <= 5 : i <= 2; i++) {\r\n if (!TGRBought && i == 1) return\r\n player.dilation.rebuyables[i + 1] += affordsXUpgrades(Currency.dilatedTime.value.div(1e6), i)\r\n }\r\n let bought = true\r\n for (let i = 0; i < 100 && bought; i++) {\r\n bought = false\r\n for (let i = 0; Pelle.isDoomed ? i <= 5 : i <= 2; i++) {\r\n if (!TGRBought && i == 1) return\r\n bought = buyDilationUpgrade(i + 1) || bought\r\n \r\n }\r\n }\r\n if (!TGRBought) buyDilationUpgrade(2)\r\n}\r\n\r\nexport function dilatedValueOf(value) {\r\n const log10 = value.log10();\r\n const dilationPenalty = 0.75 * Effects.product(DilationUpgrade.dilationPenalty);\r\n return Decimal.pow10(Math.sign(log10) * Math.pow(Math.abs(log10), dilationPenalty));\r\n}\r\n\r\nclass DilationUpgradeState extends SetPurchasableMechanicState {\r\n get currency() {\r\n return Currency.dilatedTime;\r\n }\r\n\r\n get set() {\r\n return player.dilation.upgrades;\r\n }\r\n\r\n onPurchased() {\r\n switch(this.id){\r\n case 4:{\r\n player.dilation.totalTachyonGalaxies *= 2;\r\n break;\r\n }\r\n case 10:{\r\n SpeedrunMilestones(15).tryComplete();\r\n break;\r\n }\r\n default:{\r\n //pass\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass RebuyableDilationUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.dilatedTime;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.dilation.rebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.dilation.rebuyables[this.id] = value;\r\n }\r\n\r\n get isCapped() {\r\n return this.config.reachedCap();\r\n }\r\n\r\n purchase(bulk) {\r\n buyDilationUpgrade(this.config.id, bulk);\r\n }\r\n}\r\n\r\nexport const DilationUpgrade = mapGameDataToObject(\r\n GameDatabase.eternity.dilation,\r\n config => (config.rebuyable\r\n ? new RebuyableDilationUpgradeState(config)\r\n : new DilationUpgradeState(config))\r\n);\r\n\r\nexport const DilationUpgrades = {\r\n rebuyable: [\r\n DilationUpgrade.dtGain,\r\n DilationUpgrade.galaxyThreshold,\r\n DilationUpgrade.tachyonGain,\r\n ],\r\n fromId: id => DilationUpgrade.all.find(x => x.id === Number(id))\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { CorruptionUpgrade } from \"./corruption-upgrades\";\r\nimport { SpeedrunMilestones } from \"./speedrun\";\r\n\r\nclass BlackHoleUpgradeState {\r\n constructor(config) {\r\n const { getAmount, setAmount, calculateValue, initialCost, costMult } = config;\r\n this.incrementAmount = () => setAmount(getAmount() + 1);\r\n this._lazyValue = new Lazy(() => calculateValue(getAmount()));\r\n this._lazyCost = new Lazy(() => getHybridCostScaling(getAmount(),\r\n 1e30,\r\n initialCost,\r\n costMult,\r\n 0.2,\r\n DC.E310,\r\n 1e5,\r\n 10));\r\n this.id = config.id;\r\n this.hasAutobuyer = config.hasAutobuyer;\r\n this.onPurchase = config.onPurchase;\r\n }\r\n\r\n get value() {\r\n return this._lazyValue.value;\r\n }\r\n\r\n get cost() {\r\n return this._lazyCost.value;\r\n }\r\n\r\n get isAffordable() {\r\n return Currency.realityMachines.gte(this.cost);\r\n }\r\n\r\n purchase() {\r\n if (!this.isAffordable || this.value === 0) return;\r\n\r\n // Keep the cycle phase consistent before and after purchase so that upgrading doesn't cause weird behavior\r\n // such as immediately activating it when inactive (or worse, skipping past the active segment entirely).\r\n const bh = BlackHole(this.id);\r\n const beforeProg = bh.isCharged ? 1 - bh.stateProgress : bh.stateProgress;\r\n\r\n Currency.realityMachines.purchase(this.cost);\r\n this.incrementAmount();\r\n this._lazyValue.invalidate();\r\n this._lazyCost.invalidate();\r\n if (this.onPurchase) {\r\n this.onPurchase();\r\n }\r\n\r\n // Adjust the phase to what it was before purchase by changing it directly. This will often result in passing\r\n // in a negative argument to updatePhase(), but this shouldn't cause any problems because it'll never make\r\n // the phase itself negative. In very rare cases this may result in a single auto-pause getting skipped\r\n const stateTime = bh.isCharged ? bh.duration : bh.interval;\r\n bh.updatePhase(stateTime * beforeProg - bh.phase);\r\n\r\n // Prevents a rare edge case where the player makes an inactive black hole permanent, locking themselves into\r\n // a permanently inactive black hole\r\n if (bh.isPermanent) player.blackHole[this.id - 1].active = true;\r\n\r\n EventHub.dispatch(GAME_EVENT.BLACK_HOLE_UPGRADE_BOUGHT);\r\n }\r\n}\r\n\r\nclass BlackHoleState {\r\n constructor(id) {\r\n this.id = id + 1;\r\n const blackHoleCostMultipliers = [1, 1000];\r\n // Interval: starts at 3600, x0.8 per upgrade, upgrade cost goes x3.5, starts at 15\r\n this.intervalUpgrade = new BlackHoleUpgradeState({\r\n id: this.id,\r\n getAmount: () => this._data.intervalUpgrades,\r\n setAmount: amount => this._data.intervalUpgrades = amount,\r\n calculateValue: amount => (3600 / (Math.pow(10, id))) * Math.pow(0.8, amount),\r\n initialCost: 15 * blackHoleCostMultipliers[id],\r\n costMult: 3.5,\r\n hasAutobuyer: false,\r\n onPurchase: () => {\r\n if (!this.isCharged) {\r\n this._data.phase = Math.clampMax(this.interval, this._data.phase);\r\n }\r\n }\r\n });\r\n // Power: starts at 5, x1.35 per upgrade, cost goes x2, starts at 20\r\n this.powerUpgrade = new BlackHoleUpgradeState({\r\n id: this.id,\r\n getAmount: () => this._data.powerUpgrades,\r\n setAmount: amount => this._data.powerUpgrades = amount,\r\n calculateValue: amount => {\r\n let baseEffect = 1.35;\r\n if(CorruptionUpgrade(11).isBought) baseEffect*=CorruptionUpgrade(11).effectValue;\r\n return (180 / Math.pow(2, id)) * Math.pow(baseEffect, amount)\r\n },\r\n initialCost: 20 * blackHoleCostMultipliers[id],\r\n costMult: 2,\r\n hasAutobuyer: true\r\n });\r\n // Duration: starts at 10, x1.5 per upgrade, cost goes x4, starts at 10\r\n this.durationUpgrade = new BlackHoleUpgradeState({\r\n id: this.id,\r\n getAmount: () => this._data.durationUpgrades,\r\n setAmount: amount => this._data.durationUpgrades = amount,\r\n calculateValue: amount => (10 - (id) * 3) * Math.pow(1.3, amount),\r\n initialCost: 10 * blackHoleCostMultipliers[id],\r\n costMult: 4,\r\n hasAutobuyer: false\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n get _data() {\r\n return player.blackHole[this.id - 1];\r\n }\r\n\r\n /**\r\n * Exists to avoid recursion in calculation of whether the black hole is permanent.\r\n */\r\n get rawInterval() {\r\n return this.intervalUpgrade.value * Achievement(145).effectOrDefault(1);\r\n }\r\n\r\n /**\r\n * Amount of time the black hole is inactive for between activations.\r\n */\r\n get interval() {\r\n return this.isPermanent ? 0 : this.rawInterval;\r\n }\r\n\r\n /**\r\n * Multiplier to time the black hole gives when active.\r\n */\r\n get power() {\r\n return this.powerUpgrade.value * Achievement(158).effectOrDefault(1);\r\n }\r\n\r\n /**\r\n * Amount of time the black hole is active for.\r\n */\r\n get duration() {\r\n return this.durationUpgrade.value * Achievement(155).effectOrDefault(1);\r\n }\r\n\r\n get isUnlocked() {\r\n return (this._data.unlocked && !Enslaved.isRunning && !Pelle.isDisabled(\"blackhole\")) || (MendingMilestone.three.isReached && !Enslaved.isRunning && !Pelle.isDisabled(\"blackhole\"));\r\n }\r\n\r\n get isCharged() {\r\n return this._data.active;\r\n }\r\n\r\n get timeWithPreviousActiveToNextStateChange() {\r\n return this.isCharged ? this.duration - this.phase : this.interval - this.phase;\r\n }\r\n\r\n // When inactive, returns time until active; when active, returns time until inactive (or paused for hole 2)\r\n get timeToNextStateChange() {\r\n const remainingTime = this.timeWithPreviousActiveToNextStateChange;\r\n\r\n if (this.id === 1) return remainingTime;\r\n\r\n // 2nd hole activation logic (not bothering generalizing since we're not adding that 3rd hole again)\r\n if (this.isCharged) {\r\n if (BlackHole(1).isCharged) return Math.min(remainingTime, BlackHole(1).timeToNextStateChange);\r\n return BlackHole(1).timeToNextStateChange;\r\n }\r\n return BlackHole(1).timeUntilTimeActive(remainingTime);\r\n }\r\n\r\n // Given x, return time it takes for this black hole to get x time active\r\n timeUntilTimeActive(inputTimeActive) {\r\n // Avoid error about reassigning parameter.\r\n let timeActive = inputTimeActive;\r\n if (this.isCharged) {\r\n // We start at the next full activation, so if we have a partial activation\r\n // then that reduces the time required.\r\n // Make sure to handle the case when the current partial activation is enough.\r\n if (timeActive < this.timeToNextStateChange) return timeActive;\r\n // If it's not enough, we can subtract it from our time.\r\n timeActive -= this.timeToNextStateChange;\r\n }\r\n // Determine the time until the next full activation.\r\n let totalTime = this.isCharged\r\n ? this.timeToNextStateChange + this.interval\r\n : this.timeToNextStateChange;\r\n // This is the number of full cycles needed...\r\n totalTime += Math.floor(timeActive / this.duration) * this.cycleLength;\r\n // And the time from a partial cycle.\r\n totalTime += timeActive % this.duration;\r\n return totalTime;\r\n }\r\n\r\n // This is a value which counts up from 0 to 1 when inactive, and 1 to 0 when active\r\n get stateProgress() {\r\n if (this.isCharged) {\r\n return 1 - this.phase / this.duration;\r\n }\r\n return this.phase / this.interval;\r\n }\r\n\r\n // The logic to determine what state the black hole is in for displaying is nontrivial and used in multiple places\r\n get displayState() {\r\n if (Pelle.isDisabled(\"blackhole\")) return ` Disabled`;\r\n if (Enslaved.isAutoReleasing) {\r\n if (Enslaved.autoReleaseTick < 3) return ` Pulsing`;\r\n return ` Pulsing`;\r\n }\r\n if (Enslaved.isStoringGameTime) return ` Charging`;\r\n if (BlackHoles.areNegative) return ` Inverted`;\r\n if (BlackHoles.arePaused) return ` Paused`;\r\n if (this.isPermanent) return ` Permanent`;\r\n\r\n const timeString = TimeSpan.fromSeconds(this.timeToNextStateChange).toStringShort(true);\r\n if (this.isActive) return ` Active (${timeString})`;\r\n return ` Inactive (${timeString})`;\r\n }\r\n\r\n get isActive() {\r\n return this.isCharged && (this.id === 1 || BlackHole(this.id - 1).isActive) && !Pelle.isDisabled(\"blackhole\");\r\n }\r\n\r\n // Proportion of active time, scaled 0 to 1\r\n get dutyCycle() {\r\n return this.duration / (this.rawInterval + this.duration);\r\n }\r\n\r\n get isPermanent() {\r\n return this.dutyCycle >= 0.9999 || MendingMilestone.three.isReached;\r\n }\r\n\r\n /**\r\n * Amount of time the black hole has spent since last state transition,\r\n * so if it's active, it's the amount of time it's been active for, and if it's inactive,\r\n * it's the amount of time it's been inactive for.\r\n */\r\n get phase() {\r\n return this._data.phase;\r\n }\r\n\r\n get cycleLength() {\r\n return this.interval + this.duration;\r\n }\r\n\r\n updatePhase(activePeriod) {\r\n if (this.isPermanent) return;\r\n // Prevents a flickering black hole if phase gets set too high\r\n // (shouldn't ever happen in practice). Also, more importantly,\r\n // should work even if activePeriods[i] is very large. To check:\r\n // This used to always use the period of blackHole[0], now it doesn't,\r\n // will this cause other bugs?\r\n this._data.phase += activePeriod;\r\n\r\n if (this.phase >= this.cycleLength) {\r\n // One activation for each full cycle.\r\n this._data.activations += Math.floor(this.phase / this.cycleLength);\r\n this._data.phase %= this.cycleLength;\r\n }\r\n if (this.isCharged) {\r\n if (this.phase >= this.duration) {\r\n this._data.phase -= this.duration;\r\n this._data.active = false;\r\n if (GameUI.notify.showBlackHoles) {\r\n GameUI.notify.blackHole(`${this.description(true)} duration ended.`);\r\n }\r\n }\r\n } else if (this.phase >= this.interval) {\r\n this._data.phase -= this.interval;\r\n this._data.activations++;\r\n this._data.active = true;\r\n if (GameUI.notify.showBlackHoles) {\r\n GameUI.notify.blackHole(`${this.description(true)} has activated!`);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Given the time for which the previous black hole is active,\r\n * this function returns the time for which current black hole is active.\r\n * For example, for BlackHole(2), this function, given\r\n * the time for which for BlackHole(1) is active, will return the time for which\r\n * BlackHole(2) is active during that time.\r\n */\r\n realTimeWhileActive(time) {\r\n const nextDeactivation = this.timeUntilNextDeactivation;\r\n const cooldown = this.interval;\r\n const duration = this.duration;\r\n const fullCycle = this.cycleLength;\r\n const currentActivationDuration = Math.min(nextDeactivation, duration);\r\n const activeCyclesUntilLastDeactivation = Math.floor((time - nextDeactivation) / fullCycle);\r\n const activeTimeUntilLastDeactivation = duration * activeCyclesUntilLastDeactivation;\r\n const timeLeftAfterLastDeactivation = (time - nextDeactivation + fullCycle) % fullCycle;\r\n const lastActivationDuration = Math.max(timeLeftAfterLastDeactivation - cooldown, 0);\r\n return currentActivationDuration + activeTimeUntilLastDeactivation + lastActivationDuration;\r\n }\r\n\r\n /**\r\n * Returns the time that the previous black hole must be active until the next change\r\n * from the active state to the inactive state. For example, for BlackHole(2),\r\n * this function will return the time BlackHole(1) must be active for BlackHole(2)\r\n * to transition to the inactive state. This is useful since BlackHole(2)'s phase\r\n * only increases (that is, its state only changes) while BlackHole(1) is active.\r\n * In general, a black hole only changes state while the previous black hole is active.\r\n * So figuring out how long a black hole would be active after some amount of real time\r\n * (as we do) is best done iteratively via figuring out how long a black hole would be active\r\n * after a given amount of time of the previous black hole being active.\r\n */\r\n get timeUntilNextDeactivation() {\r\n if (this.isCharged) {\r\n return this.duration - this.phase;\r\n }\r\n return this.cycleLength - this.phase;\r\n }\r\n\r\n description(capitalized) {\r\n if (RealityUpgrade(20).isBought) {\r\n return `Black Hole ${this.id}`;\r\n }\r\n return capitalized ? \"The Black Hole\" : \"the Black Hole\";\r\n }\r\n}\r\n\r\nBlackHoleState.list = Array.range(0, 2).map(id => new BlackHoleState(id));\r\n\r\n/**\r\n * @param {number} id\r\n * @return {BlackHoleState}\r\n */\r\nexport function BlackHole(id) {\r\n return BlackHoleState.list[id - 1];\r\n}\r\n\r\nexport const BlackHoles = {\r\n // In seconds\r\n ACCELERATION_TIME: 5,\r\n /**\r\n * @return {BlackHoleState[]}\r\n */\r\n get list() {\r\n return BlackHoleState.list;\r\n },\r\n\r\n get canBeUnlocked() {\r\n return Currency.realityMachines.gte(100) && !this.areUnlocked;\r\n },\r\n\r\n get areUnlocked() {\r\n return BlackHole(1).isUnlocked;\r\n },\r\n\r\n unlock() {\r\n if (!this.canBeUnlocked) return;\r\n player.blackHole[0].unlocked = true;\r\n Currency.realityMachines.purchase(100);\r\n player.records.timePlayedAtBHUnlock = PlayerProgress.mendingUnlocked() ? player.records.thisMend.time : player.records.totalTimePlayed;\r\n EventHub.dispatch(GAME_EVENT.BLACK_HOLE_UNLOCKED);\r\n },\r\n\r\n togglePause: (automatic = false) => {\r\n if (!BlackHoles.areUnlocked) return;\r\n const maxInversion = player.requirementChecks.reality.slowestBH <= 1e-300;\r\n if (ImaginaryUpgrade(24).isLockingMechanics && Ra.isRunning && maxInversion) {\r\n if (!automatic) ImaginaryUpgrade(24).tryShowWarningModal(\"uninvert your Black Hole\");\r\n return;\r\n }\r\n if (player.blackHolePause) player.requirementChecks.reality.slowestBH = 1;\r\n player.blackHolePause = !player.blackHolePause;\r\n player.blackHolePauseTime = player.records.realTimePlayed;\r\n const blackHoleString = RealityUpgrade(20).isBought ? \"Black Holes\" : \"Black Hole\";\r\n // If black holes are going unpaused -> paused, use \"inverted\" or \"paused\" depending o\r\n // whether the player's using negative BH (i.e. BH inversion); if going paused -> unpaused,\r\n // use \"unpaused\".\r\n // eslint-disable-next-line no-nested-ternary\r\n const pauseType = player.blackHolePause ? (BlackHoles.areNegative ? \"inverted\" : \"paused\") : \"unpaused\";\r\n const automaticString = automatic ? \"automatically \" : \"\";\r\n GameUI.notify.blackHole(`${blackHoleString} ${automaticString}${pauseType}`);\r\n },\r\n\r\n get unpauseAccelerationFactor() {\r\n if (this.arePermanent) return 1;\r\n return Math.clamp((player.records.realTimePlayed - player.blackHolePauseTime) /\r\n (1000 * this.ACCELERATION_TIME), 0, 1);\r\n },\r\n\r\n get arePaused() {\r\n return player.blackHolePause;\r\n },\r\n\r\n get areNegative() {\r\n return this.arePaused && !Laitela.isRunning && player.blackHoleNegative < 1;\r\n },\r\n\r\n get arePermanent() {\r\n return BlackHoles.list.every(bh => bh.isPermanent);\r\n },\r\n\r\n updatePhases(blackHoleDiff) {\r\n if (!this.areUnlocked || this.arePaused) return;\r\n // This code is intended to successfully update the black hole phases\r\n // even for very large values of blackHoleDiff.\r\n // With auto-pause settings, this code also has to take account of that.\r\n const rawSeconds = blackHoleDiff / 1000;\r\n const [autoPause, seconds] = this.autoPauseData(rawSeconds);\r\n const activePeriods = this.realTimePeriodsWithBlackHoleActive(seconds, true);\r\n for (const blackHole of this.list) {\r\n if (!blackHole.isUnlocked) break;\r\n blackHole.updatePhase(activePeriods[blackHole.id - 1]);\r\n }\r\n if (autoPause) {\r\n BlackHoles.togglePause(true);\r\n }\r\n },\r\n\r\n /**\r\n * This function takes the total real time spent offline,\r\n * a number of ticks to simulate, a tolerance for how far ticks can be\r\n * from average (explained later), and returns a single realTickTime and\r\n * blackHoleSpeed representing the real time taken up by the first simulated tick\r\n * and the game speed due to black holess during it.\r\n *\r\n * This code makes sure that the following conditions are satisfied:\r\n * 1: realTickTime * blackHoleSpeed is exactly (up to some small\r\n * multiple of floating-point precision) the game time which would be spent\r\n * after realTickTime real time, accounting for black holess\r\n * (but not for anything else).\r\n * 2: No tick contains too much (more than a constant multiple of\r\n * the mean game time per tick) of the game time.\r\n * 3: No tick has negative or zero real time or (equivalently)\r\n * negative or zero game time.\r\n * Note that Patashu has convinced me that we do not want the property\r\n * \"No tick contains too much (more than a constant multiple of the\r\n * mean real time per tick) of the real time.\" There's no reason to have it\r\n * aside from the edge cases of EC12 (and if you're going offline during EC12\r\n * then you should expect technically correct but somewhat annoying behavior)\r\n * and auto EC completion (but auto EC completion shouldn't be that much\r\n * of an issue).\r\n */\r\n calculateOfflineTick(totalRealTime, numberOfTicks, tolerance) {\r\n // Cache speedups, so calculateGameTimeFromRealTime doesn't recalculate them every time.\r\n const speedups = this.calculateSpeedups();\r\n const totalGameTime = this.calculateGameTimeFromRealTime(totalRealTime, speedups);\r\n // We have this special case just in case some floating-point mess prevents\r\n // binarySearch from working in the numberOfTicks = 1 case.\r\n // I doubt that's possible but it seems worth handling just in case.\r\n if (numberOfTicks === 1) {\r\n return [totalRealTime, totalGameTime.div(totalRealTime)];\r\n }\r\n // We want calculateGameTimeFromRealTime(realTickTime, speedups) * numberOfTicks / totalGameTime to be roughly 1\r\n // (that is, the tick taking realTickTime real time has roughly average length in terms of game time).\r\n // We use binary search because it has somewhat better worst-case behavior than linear interpolation search here.\r\n // Suppose you have 3000 seconds without a black hole and then 100 seconds of a black hole with 3000x power,\r\n // and you want to find when 4000 seconds of game time have elapsed. With binary search it will take only\r\n // 20 steps or so to get reasonable accuracy, but with linear interpolation it will take about 100 steps.\r\n // These extra steps might always average out with cases where linear interpolation is quicker though.\r\n const realTickTime = this.decimalBinarySearch(\r\n 0,\r\n totalRealTime,\r\n x => this.calculateGameTimeFromRealTime(x, speedups) .times(numberOfTicks).div(totalGameTime),\r\n 1,\r\n tolerance\r\n );\r\n const blackHoleSpeedup = this.calculateGameTimeFromRealTime(realTickTime, speedups).div(realTickTime);\r\n return [realTickTime, blackHoleSpeedup];\r\n },\r\n\r\n /**\r\n * Standard implementation of binary search for a monotone increasing function.\r\n * The only unusual thing is tolerance, which is a bound on\r\n * Math.abs(evaluationFunction(result) - target).\r\n */\r\n // eslint-disable-next-line max-params\r\n binarySearch(start, end, evaluationFunction, target, tolerance) {\r\n let middle;\r\n for (let iter = 0; iter < 100; ++iter) {\r\n middle = (start + end) / 2;\r\n const error = evaluationFunction(middle) - target;\r\n if (Math.abs(error) < tolerance) break;\r\n if (error < 0) {\r\n // eslint-disable-next-line no-param-reassign\r\n start = middle;\r\n } else {\r\n // eslint-disable-next-line no-param-reassign\r\n end = middle;\r\n }\r\n }\r\n return middle;\r\n },\r\n\r\n decimalBinarySearch(start, end, evaluationFunction, target, tolerance) {\r\n let middle;\r\n for (let iter = 0; iter < 100; ++iter) {\r\n middle = (start + end) / 2;\r\n const error = evaluationFunction(middle).sub(target);\r\n if (Decimal.abs(error).lt(tolerance)) break;\r\n if (error.lt(0)) {\r\n // eslint-disable-next-line no-param-reassign\r\n start = middle;\r\n } else {\r\n // eslint-disable-next-line no-param-reassign\r\n end = middle;\r\n }\r\n }\r\n return middle;\r\n },\r\n\r\n /**\r\n * Returns a list of length (number of unlocked black holes + 1),\r\n * where each element is the *total* speedup while that black hole\r\n * is the highest-numbered black hole active, the black holes being numbered\r\n * starting from black hole 1 and black hole 0 being normal game.\r\n */\r\n calculateSpeedups() {\r\n const effectsToConsider = [GAME_SPEED_EFFECT.FIXED_SPEED, GAME_SPEED_EFFECT.TIME_GLYPH,\r\n GAME_SPEED_EFFECT.SINGULARITY_MILESTONE, GAME_SPEED_EFFECT.NERFS];\r\n const speedupWithoutBlackHole = getGameSpeedupFactor(effectsToConsider);\r\n const speedups = [1];\r\n effectsToConsider.push(GAME_SPEED_EFFECT.BLACK_HOLE);\r\n // Crucial thing: this works even if the black holes are paused, it's just that the speedups will be 1.\r\n for (const blackHole of this.list) {\r\n if (!blackHole.isUnlocked) break;\r\n speedups.push(getGameSpeedupFactor(effectsToConsider, blackHole.id).div(speedupWithoutBlackHole));\r\n }\r\n return speedups;\r\n },\r\n\r\n calculateGameTimeFromRealTime(realTime, speedups) {\r\n // We could do this.autoPauseData(realTime)[1] here but that seems less clear.\r\n // Using _ as an unused variable should be reasonable.\r\n // eslint-disable-next-line no-unused-vars\r\n const [_, realerTime] = this.autoPauseData(realTime);\r\n const effectivePeriods = this.realTimePeriodsWithBlackHoleEffective(realerTime, speedups);\r\n // This adds in time with black holes paused at the end of the list.\r\n effectivePeriods[0] += realTime - realerTime;\r\n return effectivePeriods\r\n .map((period, i) => Decimal.min(new Decimal(period).times(speedups[i]), 1e300))\r\n .sumD();\r\n },\r\n\r\n /**\r\n * Returns the amount of real time spent with each unlocked black hole\r\n * being the current \"effective\" black hole, that is, the active black hole\r\n * with the highest index.\r\n * For example:\r\n * active periods = [100, 20, 5] (100ms of real time, 20ms of black hole 1, 5ms of black hole 2)\r\n * effective periods = [80, 15, 5]\r\n * 80ms of effective real time, because black hole 1 will be running in total 20ms => 100 - 20\r\n * 15ms of effective black hole 1 time, because black hole 2 will be running in total 5ms => 20 - 5\r\n * 5ms of effective black hole 2 time, because no higher black hole overlaps it,\r\n * so it is effective for the whole active period\r\n * Note: even though more than one black hole can be active\r\n * (and thus effective) at once, the calling function first calculates the total speedups\r\n * while each black hole is the highest-index black hole that's active and then acts\r\n * as if only the highest-index black hole that's active is effective.\r\n */\r\n realTimePeriodsWithBlackHoleEffective(realTime) {\r\n const activePeriods = this.realTimePeriodsWithBlackHoleActive(realTime);\r\n const effectivePeriods = [];\r\n for (let i = 0; i < activePeriods.length - 1; i++) {\r\n effectivePeriods.push(activePeriods[i] - activePeriods[i + 1]);\r\n }\r\n effectivePeriods.push(activePeriods.last());\r\n return effectivePeriods;\r\n },\r\n\r\n /**\r\n * Returns an array of real time periods spent in each black hole\r\n * with first element being the \"no black hole\" state that is normal game.\r\n */\r\n realTimePeriodsWithBlackHoleActive(realTime) {\r\n const activePeriods = [realTime];\r\n for (const blackHole of this.list) {\r\n if (!blackHole.isUnlocked) break;\r\n const activeTime = blackHole.realTimeWhileActive(activePeriods.last());\r\n activePeriods.push(activeTime);\r\n }\r\n return activePeriods;\r\n },\r\n\r\n /**\r\n * Takes BH number (1 or 2) and number of steps to do in an internal BH simulation.\r\n * Returns real time until we can pause before given BH (i.e., we have a gap of at least 5 seconds before it),\r\n * or null if we can't pause before it.\r\n */\r\n timeToNextPause(bhNum, steps = 100) {\r\n if (bhNum === 1) {\r\n // This is a simple case that we can do mathematically.\r\n const bh = BlackHole(1);\r\n // If no blackhole gaps are as long as the warmup time, we never pause.\r\n if (bh.interval <= BlackHoles.ACCELERATION_TIME) {\r\n return null;\r\n }\r\n // Find the time until next activation.\r\n const t = (bh.isCharged ? bh.duration : 0) + bh.interval - bh.phase;\r\n // If the time until next activation is less than the acceleration time,\r\n // we have to wait until the activation after that;\r\n // otherwise, we can just use the next activation.\r\n return (t < BlackHoles.ACCELERATION_TIME)\r\n ? t + bh.duration + bh.interval - BlackHoles.ACCELERATION_TIME : t - BlackHoles.ACCELERATION_TIME;\r\n }\r\n // Look at the next 100 black hole transitions.\r\n // This is called every tick if BH pause setting is set to BH2, so we try to optimize it.\r\n // I think the bound of 100 means it can fail only in the case one black hole interval is under 5s\r\n // and the other isn't. In practice, by this point the other interval is usually about 15 seconds\r\n // and both durations are fairly long (a few minutes), making the longest that a gap between activations\r\n // can be 20 seconds (so it's fairly OK not to pause).\r\n // Precalculate some stuff that won't change (or in the case of charged and phases, stuff we'll change ourself\r\n // but just in this simulation) while we call this function.\r\n const charged = [BlackHole(1).isCharged, BlackHole(2).isCharged];\r\n const phases = [BlackHole(1).phase, BlackHole(2).phase];\r\n const durations = [BlackHole(1).duration, BlackHole(2).duration];\r\n const intervals = [BlackHole(1).interval, BlackHole(2).interval];\r\n // This is technically somewhat incorrect, because assuming durations aren't tiny, the maximum\r\n // possible gap between BH2 activations is the *sum* of the intervals. However, that's still 10 seconds\r\n // if this conditional is true, and pausing the BH because of a 10-second activation gap\r\n // doesn't seem to make much sense. If this is an issue, we could use the sum of the intervals.\r\n // This should also stop this function from being relatively computationally expensive\r\n // if both intervals are 3 seconds (so the next pause would be when they happen to align,\r\n // which is rare and will probably lead to a full 100 steps).\r\n if (intervals[0] <= BlackHoles.ACCELERATION_TIME && intervals[1] <= BlackHoles.ACCELERATION_TIME) {\r\n return null;\r\n }\r\n // Make a list of things to bound phase by.\r\n const phaseBoundList = [[intervals[0]], [durations[0], intervals[1]], [durations[0], durations[1]]];\r\n // Time tracking.\r\n let inactiveTime = 0;\r\n let totalTime = 0;\r\n for (let i = 0; i < steps; i++) {\r\n // Currently active BH (if BH1 and BH2 are both charged, 2,\r\n // if only BH1 is, 1, if BH1 isn't, 0 regardless of BH2).\r\n // eslint-disable-next-line no-nested-ternary\r\n const current = charged[0] ? (charged[1] ? 2 : 1) : 0;\r\n // Get the list of phase bounds.\r\n const phaseBounds = phaseBoundList[current];\r\n // Compute time until some phase reaches its bound.\r\n const minTime = current > 0 ? Math.min(phaseBounds[0] - phases[0], phaseBounds[1] - phases[1])\r\n : phaseBounds[0] - phases[0];\r\n if (current === 2) {\r\n // Check if there was enough time before this activation to pause.\r\n if (inactiveTime >= BlackHoles.ACCELERATION_TIME) {\r\n return totalTime - BlackHoles.ACCELERATION_TIME;\r\n }\r\n // Not enough time, reset inactive time to 0.\r\n inactiveTime = 0;\r\n } else {\r\n // BH2 is inactive, add to inactive time.\r\n inactiveTime += minTime;\r\n }\r\n // Add to total time in any case.\r\n totalTime += minTime;\r\n // If BH1 is active we should update BH2.\r\n if (current > 0) {\r\n phases[1] += minTime;\r\n if (phases[1] >= phaseBounds[1]) {\r\n charged[1] = !charged[1];\r\n phases[1] -= phaseBounds[1];\r\n }\r\n }\r\n // Update BH1 no matter what.\r\n phases[0] += minTime;\r\n if (phases[0] >= phaseBounds[0]) {\r\n charged[0] = !charged[0];\r\n phases[0] -= phaseBounds[0];\r\n }\r\n }\r\n // We didn't activate so we return null.\r\n return null;\r\n },\r\n\r\n /**\r\n * Takes amount of real time.\r\n * Returns 2-item array:\r\n * [will BH be paused in the given amount of real time, real time until pause if so].\r\n */\r\n autoPauseData(realTime) {\r\n // This can be called when determining offline time if the black holes are already paused.\r\n // In that case we don't need to pause them (need to pause = false), but they're already paused (0 time).\r\n // This saves us some computation.\r\n if (this.arePaused) return [false, 0];\r\n if (player.blackHoleAutoPauseMode === BLACK_HOLE_PAUSE_MODE.NO_PAUSE) {\r\n return [false, realTime];\r\n }\r\n const timeLeft = this.timeToNextPause(player.blackHoleAutoPauseMode);\r\n // Cases in which we don't pause in the given amount of real time:\r\n // null = no pause, (timeLeft < 1e-9) = we auto-paused and there was maybe rounding error,\r\n // now the player's unpaused at this exact point (so we shouldn't pause again),\r\n // (timeLeft > realTime) = we will pause but it'll take longer than the given time.\r\n if (timeLeft === null || timeLeft < 1e-9 || timeLeft > realTime) {\r\n return [false, realTime];\r\n }\r\n return [true, timeLeft];\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { SpeedrunMilestones } from \"./speedrun\";\r\n\r\nclass ExpoBlackHoleUpgradeState {\r\n constructor(config) {\r\n const { getAmount, setAmount, calculateValue, initialCost, costMult } = config;\r\n this.incrementAmount = () => setAmount(getAmount() + 1);\r\n this._lazyValue = new Lazy(() => calculateValue(getAmount()));\r\n this._lazyCost = new Lazy(() => getHybridCostScaling(getAmount(),\r\n 1e30,\r\n initialCost,\r\n costMult,\r\n 0.2,\r\n 1e5,\r\n 10));\r\n this.id = config.id;\r\n this.hasAutobuyer = config.hasAutobuyer;\r\n this.onPurchase = config.onPurchase;\r\n }\r\n\r\n get value() {\r\n return this._lazyValue.value;\r\n }\r\n\r\n get cost() {\r\n return this._lazyCost.value.toNumber();\r\n }\r\n\r\n get isAffordable() {\r\n return (Currency.imaginaryMachines.value.toDecimal()).gte(this.cost);\r\n }\r\n\r\n purchase() {\r\n if (!this.isAffordable || this.value === 0) return;\r\n\r\n // Keep the cycle phase consistent before and after purchase so that upgrading doesn't cause weird behavior\r\n // such as immediately activating it when inactive (or worse, skipping past the active segment entirely).\r\n const bh = ExpoBlackHole(this.id);\r\n const beforeProg = bh.isCharged ? 1 - bh.stateProgress : bh.stateProgress;\r\n\r\n player.reality.imaginaryMachines -= this.cost;\r\n this.incrementAmount();\r\n this._lazyValue.invalidate();\r\n this._lazyCost.invalidate();\r\n if (this.onPurchase) {\r\n this.onPurchase();\r\n }\r\n\r\n // Adjust the phase to what it was before purchase by changing it directly. This will often result in passing\r\n // in a negative argument to updatePhase(), but this shouldn't cause any problems because it'll never make\r\n // the phase itself negative. In very rare cases this may result in a single auto-pause getting skipped\r\n const stateTime = bh.isCharged ? bh.duration : bh.interval;\r\n bh.updatePhase(stateTime * beforeProg - bh.phase);\r\n\r\n // Prevents a rare edge case where the player makes an inactive black hole permanent, locking themselves into\r\n // a permanently inactive black hole\r\n if (bh.isPermanent) player.expoBlackHole[this.id - 1].active = true;\r\n\r\n EventHub.dispatch(GAME_EVENT.EXPO_BLACK_HOLE_UPGRADE_BOUGHT);\r\n }\r\n}\r\n\r\nclass ExpoBlackHoleState {\r\n constructor(id) {\r\n this.id = id + 1;\r\n const expoBlackHoleCostMultipliers = [1, 1e9];\r\n // Interval: starts at 3600, x0.8 per upgrade, upgrade cost goes x3.5, starts at 15\r\n this.intervalUpgrade = new ExpoBlackHoleUpgradeState({\r\n id: this.id,\r\n getAmount: () => this._data.intervalUpgrades,\r\n setAmount: amount => this._data.intervalUpgrades = amount,\r\n calculateValue: amount => (3600 / (Math.pow(10, id))) * Math.pow(0.8, amount),\r\n initialCost: 1e15 * expoBlackHoleCostMultipliers[id],\r\n costMult: 1000,\r\n hasAutobuyer: false,\r\n onPurchase: () => {\r\n if (!this.isCharged) {\r\n this._data.phase = Math.clampMax(this.interval, this._data.phase);\r\n }\r\n }\r\n });\r\n // Power: starts at 5, x1.35 per upgrade, cost goes x2, starts at 20\r\n this.powerUpgrade = new ExpoBlackHoleUpgradeState({\r\n id: this.id,\r\n getAmount: () => this._data.powerUpgrades,\r\n setAmount: amount => this._data.powerUpgrades = amount,\r\n calculateValue: amount => Math.pow(1.05, amount), //add softcap at (^1.3)\r\n initialCost: 1e15 * expoBlackHoleCostMultipliers[id],\r\n costMult: 1e6, //cost scaling at 1e50 iM?\r\n hasAutobuyer: true\r\n });\r\n // Duration: starts at 10, x1.5 per upgrade, cost goes x4, starts at 10\r\n this.durationUpgrade = new ExpoBlackHoleUpgradeState({\r\n id: this.id,\r\n getAmount: () => this._data.durationUpgrades,\r\n setAmount: amount => this._data.durationUpgrades = amount,\r\n calculateValue: amount => (10 - (id) * 3) * Math.pow(1.3, amount),\r\n initialCost: 10 * expoBlackHoleCostMultipliers[id],\r\n costMult: 4,\r\n hasAutobuyer: false\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n get _data() {\r\n return player.expoBlackHole[this.id - 1];\r\n }\r\n\r\n /**\r\n * Exists to avoid recursion in calculation of whether the black hole is permanent.\r\n */\r\n get rawInterval() {\r\n return this.intervalUpgrade.value;// * Achievement(145).effectOrDefault(1);\r\n }\r\n\r\n /**\r\n * Amount of time the black hole is inactive for between activations.\r\n */\r\n get interval() {\r\n return this.isPermanent ? 0 : this.rawInterval;\r\n }\r\n\r\n /**\r\n * Multiplier to time the black hole gives when active.\r\n */\r\n get power() {\r\n return this.powerUpgrade.value;// * Achievement(158).effectOrDefault(1);\r\n }\r\n\r\n /**\r\n * Amount of time the black hole is active for.\r\n */\r\n get duration() {\r\n return this.durationUpgrade.value;// * Achievement(155).effectOrDefault(1);\r\n }\r\n\r\n get isUnlocked() {\r\n return (this._data.unlocked && !Enslaved.isRunning && !Pelle.isDisabled(\"blackhole\") && Ra.unlocks.unlock3rdBH.isUnlocked);\r\n }\r\n\r\n get isCharged() {\r\n return this._data.active;\r\n }\r\n\r\n get timeWithPreviousActiveToNextStateChange() {\r\n return this.isCharged ? this.duration - this.phase : this.interval - this.phase;\r\n }\r\n\r\n // When inactive, returns time until active; when active, returns time until inactive (or paused for hole 2)\r\n get timeToNextStateChange() {\r\n const remainingTime = this.timeWithPreviousActiveToNextStateChange;\r\n\r\n if (this.id === 1) return remainingTime;\r\n\r\n // 2nd hole activation logic (not bothering generalizing since we're not adding that 3rd hole again)\r\n if (this.isCharged) {\r\n if (BlackHole(1).isCharged) return Math.min(remainingTime, BlackHole(1).timeToNextStateChange);\r\n return BlackHole(1).timeToNextStateChange;\r\n }\r\n return BlackHole(1).timeUntilTimeActive(remainingTime);\r\n }\r\n\r\n // Given x, return time it takes for this black hole to get x time active\r\n timeUntilTimeActive(inputTimeActive) {\r\n // Avoid error about reassigning parameter.\r\n let timeActive = inputTimeActive;\r\n if (this.isCharged) {\r\n // We start at the next full activation, so if we have a partial activation\r\n // then that reduces the time required.\r\n // Make sure to handle the case when the current partial activation is enough.\r\n if (timeActive < this.timeToNextStateChange) return timeActive;\r\n // If it's not enough, we can subtract it from our time.\r\n timeActive -= this.timeToNextStateChange;\r\n }\r\n // Determine the time until the next full activation.\r\n let totalTime = this.isCharged\r\n ? this.timeToNextStateChange + this.interval\r\n : this.timeToNextStateChange;\r\n // This is the number of full cycles needed...\r\n totalTime += Math.floor(timeActive / this.duration) * this.cycleLength;\r\n // And the time from a partial cycle.\r\n totalTime += timeActive % this.duration;\r\n return totalTime;\r\n }\r\n\r\n // This is a value which counts up from 0 to 1 when inactive, and 1 to 0 when active\r\n get stateProgress() {\r\n if (this.isCharged) {\r\n return 1 - this.phase / this.duration;\r\n }\r\n return this.phase / this.interval;\r\n }\r\n\r\n // The logic to determine what state the black hole is in for displaying is nontrivial and used in multiple places\r\n get displayState() {\r\n if (Pelle.isDisabled(\"blackhole\")) return ` Disabled`;\r\n if (Enslaved.isAutoReleasing) {\r\n if (Enslaved.autoReleaseTick < 3) return ` Pulsing`;\r\n return ` Pulsing`;\r\n }\r\n if (Enslaved.isStoringGameTime) return ` Charging`;\r\n if (BlackHoles.areNegative) return ` Inverted`;\r\n if (BlackHoles.arePaused) return ` Paused`;\r\n if (this.isPermanent) return ` Permanent`;\r\n\r\n const timeString = TimeSpan.fromSeconds(this.timeToNextStateChange).toStringShort(true);\r\n if (this.isActive) return ` Active (${timeString})`;\r\n return ` Inactive (${timeString})`;\r\n }\r\n\r\n get isActive() {\r\n return this.isCharged && (this.id === 1 || BlackHole(this.id - 1).isActive) && !Pelle.isDisabled(\"blackhole\") && !BlackHoles.areNegative;\r\n }\r\n\r\n // Proportion of active time, scaled 0 to 1\r\n get dutyCycle() {\r\n return this.duration / (this.rawInterval + this.duration);\r\n }\r\n\r\n get isPermanent() {\r\n return this.dutyCycle >= 0.9999 || MendingMilestone.three.isReached;\r\n }\r\n\r\n /**\r\n * Amount of time the black hole has spent since last state transition,\r\n * so if it's active, it's the amount of time it's been active for, and if it's inactive,\r\n * it's the amount of time it's been inactive for.\r\n */\r\n get phase() {\r\n return this._data.phase;\r\n }\r\n\r\n get cycleLength() {\r\n return this.interval + this.duration;\r\n }\r\n\r\n updatePhase(activePeriod) {\r\n if (this.isPermanent) return;\r\n // Prevents a flickering black hole if phase gets set too high\r\n // (shouldn't ever happen in practice). Also, more importantly,\r\n // should work even if activePeriods[i] is very large. To check:\r\n // This used to always use the period of blackHole[0], now it doesn't,\r\n // will this cause other bugs?\r\n this._data.phase += activePeriod;\r\n\r\n if (this.phase >= this.cycleLength) {\r\n // One activation for each full cycle.\r\n this._data.activations += Math.floor(this.phase / this.cycleLength);\r\n this._data.phase %= this.cycleLength;\r\n }\r\n if (this.isCharged) {\r\n if (this.phase >= this.duration) {\r\n this._data.phase -= this.duration;\r\n this._data.active = false;\r\n if (GameUI.notify.showBlackHoles) {\r\n GameUI.notify.blackHole(`${this.description(true)} duration ended.`);\r\n }\r\n }\r\n } else if (this.phase >= this.interval) {\r\n this._data.phase -= this.interval;\r\n this._data.activations++;\r\n this._data.active = true;\r\n if (GameUI.notify.showBlackHoles) {\r\n GameUI.notify.blackHole(`${this.description(true)} has activated!`);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Given the time for which the previous black hole is active,\r\n * this function returns the time for which current black hole is active.\r\n * For example, for BlackHole(2), this function, given\r\n * the time for which for BlackHole(1) is active, will return the time for which\r\n * BlackHole(2) is active during that time.\r\n */\r\n realTimeWhileActive(time) {\r\n const nextDeactivation = this.timeUntilNextDeactivation;\r\n const cooldown = this.interval;\r\n const duration = this.duration;\r\n const fullCycle = this.cycleLength;\r\n const currentActivationDuration = Math.min(nextDeactivation, duration);\r\n const activeCyclesUntilLastDeactivation = Math.floor((time - nextDeactivation) / fullCycle);\r\n const activeTimeUntilLastDeactivation = duration * activeCyclesUntilLastDeactivation;\r\n const timeLeftAfterLastDeactivation = (time - nextDeactivation + fullCycle) % fullCycle;\r\n const lastActivationDuration = Math.max(timeLeftAfterLastDeactivation - cooldown, 0);\r\n return currentActivationDuration + activeTimeUntilLastDeactivation + lastActivationDuration;\r\n }\r\n\r\n /**\r\n * Returns the time that the previous black hole must be active until the next change\r\n * from the active state to the inactive state. For example, for BlackHole(2),\r\n * this function will return the time BlackHole(1) must be active for BlackHole(2)\r\n * to transition to the inactive state. This is useful since BlackHole(2)'s phase\r\n * only increases (that is, its state only changes) while BlackHole(1) is active.\r\n * In general, a black hole only changes state while the previous black hole is active.\r\n * So figuring out how long a black hole would be active after some amount of real time\r\n * (as we do) is best done iteratively via figuring out how long a black hole would be active\r\n * after a given amount of time of the previous black hole being active.\r\n */\r\n get timeUntilNextDeactivation() {\r\n if (this.isCharged) {\r\n return this.duration - this.phase;\r\n }\r\n return this.cycleLength - this.phase;\r\n }\r\n\r\n description(capitalized) {\r\n return `Black Hole ${this.id + 2}`\r\n /*if (RealityUpgrade(20).isBought) {\r\n return `Black Hole ${this.id}`;\r\n }\r\n return capitalized ? \"The Black Hole\" : \"the Black Hole\";*/\r\n }\r\n}\r\n\r\nExpoBlackHoleState.list = Array.range(0, 1).map(id => new ExpoBlackHoleState(id));\r\n\r\n/**\r\n * @param {number} id\r\n * @return {ExpoBlackHoleState}\r\n */\r\nexport function ExpoBlackHole(id) {\r\n return ExpoBlackHoleState.list[id - 1];\r\n}\r\n\r\nexport const ExpoBlackHoles = {\r\n // In seconds\r\n ACCELERATION_TIME: 5,\r\n /**\r\n * @return {ExpoBlackHoleState[]}\r\n */\r\n get list() {\r\n return ExpoBlackHoleState.list;\r\n },\r\n\r\n get canBeUnlocked() {\r\n return Ra.unlocks.unlock3rdBH.isUnlocked && !this.areUnlocked;\r\n },\r\n\r\n get areUnlocked() {\r\n return ExpoBlackHole(1).isUnlocked;\r\n },\r\n\r\n unlock() {\r\n if (!this.canBeUnlocked) return;\r\n player.expoBlackHole[0].unlocked = true;\r\n //Currency.imaginaryMachines.purchase(100);\r\n //player.records.timePlayedAtBHUnlock = PlayerProgress.mendingUnlocked() ? player.records.thisMend.time : player.records.totalTimePlayed;\r\n EventHub.dispatch(GAME_EVENT.EXPO_BLACK_HOLE_UNLOCKED);\r\n },\r\n\r\n togglePause: (automatic = false) => {\r\n if (!ExpoBlackHoles.areUnlocked) return;\r\n /*const maxInversion = player.requirementChecks.reality.slowestBH <= 1e-300;\r\n if (ImaginaryUpgrade(24).isLockingMechanics && Ra.isRunning && maxInversion) {\r\n if (!automatic) ImaginaryUpgrade(24).tryShowWarningModal(\"uninvert your Black Hole\");\r\n return;\r\n }*/\r\n //if (player.expoBlackHolePause) player.requirementChecks.reality.slowestBH = 1;\r\n player.expoBlackHolePause = !player.expoBlackHolePause;\r\n player.expoBlackHolePauseTime = player.records.realTimePlayed;\r\n const expoBlackHoleString = `Black Hole ${format(this.id + 2)}`;\r\n // If black holes are going unpaused -> paused, use \"inverted\" or \"paused\" depending o\r\n // whether the player's using negative BH (i.e. BH inversion); if going paused -> unpaused,\r\n // use \"unpaused\".\r\n // eslint-disable-next-line no-nested-ternary\r\n const pauseType = player.expoBlackHolePause ? (ExpoBlackHoles.areNegative ? \"inverted\" : \"paused\") : \"unpaused\";\r\n const automaticString = automatic ? \"automatically \" : \"\";\r\n GameUI.notify.blackHole(`${expoBlackHoleString} ${automaticString}${pauseType}`);\r\n },\r\n\r\n get unpauseAccelerationFactor() {\r\n if (this.arePermanent) return 1;\r\n return Math.clamp((player.records.realTimePlayed - player.expoBlackHolePauseTime) /\r\n (1000 * this.ACCELERATION_TIME), 0, 1);\r\n },\r\n\r\n get arePaused() {\r\n return player.expoBlackHolePause;\r\n },\r\n\r\n get areNegative() {\r\n return this.arePaused && !Laitela.isRunning && player.expoBlackHoleNegative < 1;\r\n },\r\n\r\n get arePermanent() {\r\n return ExpoBlackHoles.list.every(bh => bh.isPermanent);\r\n },\r\n\r\n updatePhases(expoBlackHoleDiff) {\r\n if (!this.areUnlocked || this.arePaused) return;\r\n // This code is intended to successfully update the black hole phases\r\n // even for very large values of blackHoleDiff.\r\n // With auto-pause settings, this code also has to take account of that.\r\n const rawSeconds = expoBlackHoleDiff / 1000;\r\n const [autoPause, seconds] = this.autoPauseData(rawSeconds);\r\n const activePeriods = this.realTimePeriodsWithBlackHoleActive(seconds, true);\r\n for (const expoBlackHole of this.list) {\r\n if (!expoBlackHole.isUnlocked) break;\r\n expoBlackHole.updatePhase(activePeriods[expoBlackHole.id - 1]);\r\n }\r\n if (autoPause) {\r\n ExpoBlackHoles.togglePause(true);\r\n }\r\n },\r\n\r\n /**\r\n * This function takes the total real time spent offline,\r\n * a number of ticks to simulate, a tolerance for how far ticks can be\r\n * from average (explained later), and returns a single realTickTime and\r\n * blackHoleSpeed representing the real time taken up by the first simulated tick\r\n * and the game speed due to black holess during it.\r\n *\r\n * This code makes sure that the following conditions are satisfied:\r\n * 1: realTickTime * blackHoleSpeed is exactly (up to some small\r\n * multiple of floating-point precision) the game time which would be spent\r\n * after realTickTime real time, accounting for black holess\r\n * (but not for anything else).\r\n * 2: No tick contains too much (more than a constant multiple of\r\n * the mean game time per tick) of the game time.\r\n * 3: No tick has negative or zero real time or (equivalently)\r\n * negative or zero game time.\r\n * Note that Patashu has convinced me that we do not want the property\r\n * \"No tick contains too much (more than a constant multiple of the\r\n * mean real time per tick) of the real time.\" There's no reason to have it\r\n * aside from the edge cases of EC12 (and if you're going offline during EC12\r\n * then you should expect technically correct but somewhat annoying behavior)\r\n * and auto EC completion (but auto EC completion shouldn't be that much\r\n * of an issue).\r\n */\r\n calculateOfflineTick(totalRealTime, numberOfTicks, tolerance) {\r\n // Cache speedups, so calculateGameTimeFromRealTime doesn't recalculate them every time.\r\n const speedups = this.calculateSpeedups();\r\n const totalGameTime = this.calculateGameTimeFromRealTime(totalRealTime, speedups);\r\n // We have this special case just in case some floating-point mess prevents\r\n // binarySearch from working in the numberOfTicks = 1 case.\r\n // I doubt that's possible but it seems worth handling just in case.\r\n if (numberOfTicks === 1) {\r\n return [totalRealTime, totalGameTime.div(totalRealTime)];\r\n }\r\n // We want calculateGameTimeFromRealTime(realTickTime, speedups) * numberOfTicks / totalGameTime to be roughly 1\r\n // (that is, the tick taking realTickTime real time has roughly average length in terms of game time).\r\n // We use binary search because it has somewhat better worst-case behavior than linear interpolation search here.\r\n // Suppose you have 3000 seconds without a black hole and then 100 seconds of a black hole with 3000x power,\r\n // and you want to find when 4000 seconds of game time have elapsed. With binary search it will take only\r\n // 20 steps or so to get reasonable accuracy, but with linear interpolation it will take about 100 steps.\r\n // These extra steps might always average out with cases where linear interpolation is quicker though.\r\n const realTickTime = this.decimalBinarySearch(\r\n 0,\r\n totalRealTime,\r\n x => this.calculateGameTimeFromRealTime(x, speedups) .times(numberOfTicks).div(totalGameTime),\r\n 1,\r\n tolerance\r\n );\r\n const expoBlackHoleSpeedup = this.calculateGameTimeFromRealTime(realTickTime, speedups).div(realTickTime);\r\n return [realTickTime, expoBlackHoleSpeedup];\r\n },\r\n\r\n /**\r\n * Standard implementation of binary search for a monotone increasing function.\r\n * The only unusual thing is tolerance, which is a bound on\r\n * Math.abs(evaluationFunction(result) - target).\r\n */\r\n // eslint-disable-next-line max-params\r\n binarySearch(start, end, evaluationFunction, target, tolerance) {\r\n let middle;\r\n for (let iter = 0; iter < 100; ++iter) {\r\n middle = (start + end) / 2;\r\n const error = evaluationFunction(middle) - target;\r\n if (Math.abs(error) < tolerance) break;\r\n if (error < 0) {\r\n // eslint-disable-next-line no-param-reassign\r\n start = middle;\r\n } else {\r\n // eslint-disable-next-line no-param-reassign\r\n end = middle;\r\n }\r\n }\r\n return middle;\r\n },\r\n\r\n decimalBinarySearch(start, end, evaluationFunction, target, tolerance) {\r\n let middle;\r\n for (let iter = 0; iter < 100; ++iter) {\r\n middle = (start + end) / 2;\r\n const error = evaluationFunction(middle).sub(target);\r\n if (Decimal.abs(error).lt(tolerance)) break;\r\n if (error.lt(0)) {\r\n // eslint-disable-next-line no-param-reassign\r\n start = middle;\r\n } else {\r\n // eslint-disable-next-line no-param-reassign\r\n end = middle;\r\n }\r\n }\r\n return middle;\r\n },\r\n\r\n /**\r\n * Returns a list of length (number of unlocked black holes + 1),\r\n * where each element is the *total* speedup while that black hole\r\n * is the highest-numbered black hole active, the black holes being numbered\r\n * starting from black hole 1 and black hole 0 being normal game.\r\n */\r\n calculateSpeedups() {\r\n const effectsToConsider = [GAME_SPEED_EFFECT.FIXED_SPEED, GAME_SPEED_EFFECT.TIME_GLYPH,\r\n GAME_SPEED_EFFECT.SINGULARITY_MILESTONE, GAME_SPEED_EFFECT.NERFS, GAME_SPEED_EFFECT.BLACK_HOLE];\r\n const speedupWithoutExpoBlackHole = getGameSpeedupFactor(effectsToConsider);\r\n const speedups = [1];\r\n effectsToConsider.push(GAME_SPEED_EFFECT.EXPO_BLACK_HOLE);\r\n // Crucial thing: this works even if the black holes are paused, it's just that the speedups will be 1.\r\n for (const expoBlackHole of this.list) {\r\n if (!expoBlackHole.isUnlocked) break;\r\n speedups.push(getGameSpeedupFactor(effectsToConsider, expoBlackHole.id).div(speedupWithoutExpoBlackHole));\r\n }\r\n return speedups;\r\n },\r\n\r\n calculateGameTimeFromRealTime(realTime, speedups) {\r\n // We could do this.autoPauseData(realTime)[1] here but that seems less clear.\r\n // Using _ as an unused variable should be reasonable.\r\n // eslint-disable-next-line no-unused-vars\r\n const [_, realerTime] = this.autoPauseData(realTime);\r\n const effectivePeriods = this.realTimePeriodsWithBlackHoleEffective(realerTime, speedups);\r\n // This adds in time with black holes paused at the end of the list.\r\n effectivePeriods[0] += realTime - realerTime;\r\n return effectivePeriods\r\n .map((period, i) => Decimal.min(new Decimal(period).times(speedups[i]), 1e300))\r\n .sumD();\r\n },\r\n\r\n /**\r\n * Returns the amount of real time spent with each unlocked black hole\r\n * being the current \"effective\" black hole, that is, the active black hole\r\n * with the highest index.\r\n * For example:\r\n * active periods = [100, 20, 5] (100ms of real time, 20ms of black hole 1, 5ms of black hole 2)\r\n * effective periods = [80, 15, 5]\r\n * 80ms of effective real time, because black hole 1 will be running in total 20ms => 100 - 20\r\n * 15ms of effective black hole 1 time, because black hole 2 will be running in total 5ms => 20 - 5\r\n * 5ms of effective black hole 2 time, because no higher black hole overlaps it,\r\n * so it is effective for the whole active period\r\n * Note: even though more than one black hole can be active\r\n * (and thus effective) at once, the calling function first calculates the total speedups\r\n * while each black hole is the highest-index black hole that's active and then acts\r\n * as if only the highest-index black hole that's active is effective.\r\n */\r\n realTimePeriodsWithBlackHoleEffective(realTime) {\r\n const activePeriods = this.realTimePeriodsWithBlackHoleActive(realTime);\r\n const effectivePeriods = [];\r\n for (let i = 0; i < activePeriods.length - 1; i++) {\r\n effectivePeriods.push(activePeriods[i] - activePeriods[i + 1]);\r\n }\r\n effectivePeriods.push(activePeriods.last());\r\n return effectivePeriods;\r\n },\r\n\r\n /**\r\n * Returns an array of real time periods spent in each black hole\r\n * with first element being the \"no black hole\" state that is normal game.\r\n */\r\n realTimePeriodsWithBlackHoleActive(realTime) {\r\n const activePeriods = [realTime];\r\n for (const expoBlackHole of this.list) {\r\n if (!expoBlackHole.isUnlocked) break;\r\n const activeTime = expoBlackHole.realTimeWhileActive(activePeriods.last());\r\n activePeriods.push(activeTime);\r\n }\r\n return activePeriods;\r\n },\r\n\r\n /**\r\n * Takes BH number (1 or 2) and number of steps to do in an internal BH simulation.\r\n * Returns real time until we can pause before given BH (i.e., we have a gap of at least 5 seconds before it),\r\n * or null if we can't pause before it.\r\n */\r\n timeToNextPause(ebhNum, steps = 100) {\r\n if (ebhNum === 1) {\r\n // This is a simple case that we can do mathematically.\r\n const bh = ExpoBlackHole(1);\r\n // If no blackhole gaps are as long as the warmup time, we never pause.\r\n if (bh.interval <= ExpoBlackHoles.ACCELERATION_TIME) {\r\n return null;\r\n }\r\n // Find the time until next activation.\r\n const t = (bh.isCharged ? bh.duration : 0) + bh.interval - bh.phase;\r\n // If the time until next activation is less than the acceleration time,\r\n // we have to wait until the activation after that;\r\n // otherwise, we can just use the next activation.\r\n return (t < ExpoBlackHoles.ACCELERATION_TIME)\r\n ? t + bh.duration + bh.interval - ExpoBlackHoles.ACCELERATION_TIME : t - ExpoBlackHoles.ACCELERATION_TIME;\r\n }\r\n // Look at the next 100 black hole transitions.\r\n // This is called every tick if BH pause setting is set to BH2, so we try to optimize it.\r\n // I think the bound of 100 means it can fail only in the case one black hole interval is under 5s\r\n // and the other isn't. In practice, by this point the other interval is usually about 15 seconds\r\n // and both durations are fairly long (a few minutes), making the longest that a gap between activations\r\n // can be 20 seconds (so it's fairly OK not to pause).\r\n // Precalculate some stuff that won't change (or in the case of charged and phases, stuff we'll change ourself\r\n // but just in this simulation) while we call this function.\r\n const charged = [ExpoBlackHole(1).isCharged, ExpoBlackHole(2).isCharged];\r\n const phases = [ExpoBlackHole(1).phase, ExpoBlackHole(2).phase];\r\n const durations = [ExpoBlackHole(1).duration, ExpoBlackHole(2).duration];\r\n const intervals = [ExpoBlackHole(1).interval, ExpoBlackHole(2).interval];\r\n // This is technically somewhat incorrect, because assuming durations aren't tiny, the maximum\r\n // possible gap between BH2 activations is the *sum* of the intervals. However, that's still 10 seconds\r\n // if this conditional is true, and pausing the BH because of a 10-second activation gap\r\n // doesn't seem to make much sense. If this is an issue, we could use the sum of the intervals.\r\n // This should also stop this function from being relatively computationally expensive\r\n // if both intervals are 3 seconds (so the next pause would be when they happen to align,\r\n // which is rare and will probably lead to a full 100 steps).\r\n if (intervals[0] <= ExpoBlackHoles.ACCELERATION_TIME && intervals[1] <= ExpoBlackHoles.ACCELERATION_TIME) {\r\n return null;\r\n }\r\n // Make a list of things to bound phase by.\r\n const phaseBoundList = [[intervals[0]], [durations[0], intervals[1]], [durations[0], durations[1]]];\r\n // Time tracking.\r\n let inactiveTime = 0;\r\n let totalTime = 0;\r\n for (let i = 0; i < steps; i++) {\r\n // Currently active BH (if BH1 and BH2 are both charged, 2,\r\n // if only BH1 is, 1, if BH1 isn't, 0 regardless of BH2).\r\n // eslint-disable-next-line no-nested-ternary\r\n const current = charged[0] ? (charged[1] ? 2 : 1) : 0;\r\n // Get the list of phase bounds.\r\n const phaseBounds = phaseBoundList[current];\r\n // Compute time until some phase reaches its bound.\r\n const minTime = current > 0 ? Math.min(phaseBounds[0] - phases[0], phaseBounds[1] - phases[1])\r\n : phaseBounds[0] - phases[0];\r\n if (current === 2) {\r\n // Check if there was enough time before this activation to pause.\r\n if (inactiveTime >= ExpoBlackHoles.ACCELERATION_TIME) {\r\n return totalTime - ExpoBlackHoles.ACCELERATION_TIME;\r\n }\r\n // Not enough time, reset inactive time to 0.\r\n inactiveTime = 0;\r\n } else {\r\n // BH2 is inactive, add to inactive time.\r\n inactiveTime += minTime;\r\n }\r\n // Add to total time in any case.\r\n totalTime += minTime;\r\n // If BH1 is active we should update BH2.\r\n if (current > 0) {\r\n phases[1] += minTime;\r\n if (phases[1] >= phaseBounds[1]) {\r\n charged[1] = !charged[1];\r\n phases[1] -= phaseBounds[1];\r\n }\r\n }\r\n // Update BH1 no matter what.\r\n phases[0] += minTime;\r\n if (phases[0] >= phaseBounds[0]) {\r\n charged[0] = !charged[0];\r\n phases[0] -= phaseBounds[0];\r\n }\r\n }\r\n // We didn't activate so we return null.\r\n return null;\r\n },\r\n\r\n /**\r\n * Takes amount of real time.\r\n * Returns 2-item array:\r\n * [will BH be paused in the given amount of real time, real time until pause if so].\r\n */\r\n autoPauseData(realTime) {\r\n // This can be called when determining offline time if the black holes are already paused.\r\n // In that case we don't need to pause them (need to pause = false), but they're already paused (0 time).\r\n // This saves us some computation.\r\n if (this.arePaused) return [false, 0];\r\n if (player.expoBlackHoleAutoPauseMode === EXPO_BLACK_HOLE_PAUSE_MODE.NO_PAUSE) {\r\n return [false, realTime];\r\n }\r\n const timeLeft = this.timeToNextPause(player.expoBlackHoleAutoPauseMode);\r\n // Cases in which we don't pause in the given amount of real time:\r\n // null = no pause, (timeLeft < 1e-9) = we auto-paused and there was maybe rounding error,\r\n // now the player's unpaused at this exact point (so we shouldn't pause again),\r\n // (timeLeft > realTime) = we will pause but it'll take longer than the given time.\r\n if (timeLeft === null || timeLeft < 1e-9 || timeLeft > realTime) {\r\n return [false, realTime];\r\n }\r\n return [true, timeLeft];\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nexport const MachineHandler = {\r\n get baseRMCap() { return DC.E1000; },\r\n\r\n get hardcapRM() {\r\n let primeAnswer = this.baseRMCap.times(ImaginaryUpgrade(6).effectValue)\r\n if(player.celestials.ra.upgrades.has('teresaUpgrade')) primeAnswer=primeAnswer.times(Decimal.pow(player.celestials.teresa.bestRunAM.exponent,5))\r\n return primeAnswer;\r\n },\r\n\r\n get distanceToRMCap() {\r\n return this.hardcapRM.minus(Currency.realityMachines.value);\r\n },\r\n\r\n get realityMachineMultiplier() {\r\n return ShopPurchase.RMPurchases.currentMult * Teresa.rmMultiplier * Effects.max(1, PerkShopUpgrade.rmMult) *\r\n getAdjustedGlyphEffect(\"effarigrm\") * Achievement(167).effectOrDefault(1);\r\n },\r\n\r\n get uncappedRM() {\r\n let log10FinalEP = player.records.thisReality.maxEP.plus(gainedEternityPoints()).log10();\r\n if (!PlayerProgress.realityUnlocked()) {\r\n if (log10FinalEP > 8000) log10FinalEP = 8000;\r\n if (log10FinalEP > 6000) log10FinalEP -= (log10FinalEP - 6000) * 0.75;\r\n }\r\n let rmGain = DC.E3.pow(log10FinalEP / 4000 - 1);\r\n // Increase base RM gain if <10 RM\r\n if (rmGain.gte(1) && rmGain.lt(10)) rmGain = new Decimal(27 / 4000 * log10FinalEP - 26);\r\n rmGain = rmGain.times(this.realityMachineMultiplier);\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let corruptionPrestigeLimits = corruptionPenalties.prestigeLimits[player.mending.corruption[0]];\r\n if(CorruptionUpgrade(16).isBought) corruptionPrestigeLimits = Math.min(1,corruptionPrestigeLimits*2)\r\n rmGain = rmGain.pow(corruptionPrestigeLimits)\r\n rmGain = rmGain.pow(corruptionPenalties.repSing.presGain[player.mending.corruption[8]])\r\n }\r\n return rmGain.floor();\r\n },\r\n\r\n get gainedRealityMachines() {\r\n return this.uncappedRM.clampMax(this.hardcapRM);\r\n },\r\n\r\n get isIMUnlocked() {\r\n return Currency.realityMachines.value.gte(this.hardcapRM) || Currency.imaginaryMachines.gt(0);\r\n },\r\n\r\n get baseIMCap() {\r\n return (Math.pow(Math.clampMin(this.uncappedRM.log10() - 1000, 0), 2)) *\r\n (Math.pow(Math.clampMin(this.uncappedRM.log10() - 100000, 1), 0.2));\r\n },\r\n\r\n get currentIMCap() {\r\n let x = Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked ? Math.pow(getAdjustedGlyphEffect(\"effarigrm\"), 0.5) : 1;\r\n return player.reality.iMCap * ImaginaryUpgrade(13).effectOrDefault(1) * x;\r\n },\r\n\r\n // This is iM cap based on in-game values at that instant, may be lower than the actual cap\r\n get projectedIMCap() {\r\n return this.baseIMCap * ImaginaryUpgrade(13).effectOrDefault(1) * (Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked ? Math.pow(getAdjustedGlyphEffect(\"effarigrm\"), 0.5) : 1);\r\n },\r\n\r\n // Use iMCap to store the base cap; applying multipliers separately avoids some design issues the 3xTP upgrade has\r\n updateIMCap() {\r\n if (this.uncappedRM.gte(this.baseRMCap)) {\r\n if (this.baseIMCap > player.reality.iMCap) {\r\n player.records.bestReality.iMCapSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n player.reality.iMCap = this.baseIMCap;\r\n }\r\n }\r\n },\r\n\r\n // Time in seconds to reduce the missing amount by a factor of two\r\n get scaleTimeForIM() {\r\n return 60 / ImaginaryUpgrade(20).effectOrDefault(1);\r\n },\r\n\r\n gainedImaginaryMachines(diff) {\r\n const baseIMGain = this.currentIMCap - Currency.imaginaryMachines.value;\r\n if(Ra.unlocks.imaginaryMachinesSetToCap.isUnlocked) return baseIMGain;\r\n return (baseIMGain) *\r\n (1 - Math.pow(2, (-diff / 1000 / this.scaleTimeForIM)));\r\n },\r\n\r\n estimateIMTimer(cost) {\r\n const imCap = this.currentIMCap;\r\n if (imCap <= cost) return Infinity;\r\n const currentIM = Currency.imaginaryMachines.value;\r\n // This is doing log(a, 1/2) - log(b, 1/2) where a is % left to imCap of cost and b is % left to imCap of current\r\n // iM. log(1 - x, 1/2) should be able to estimate the time taken for iM to increase from 0 to imCap * x since every\r\n // fixed interval the difference between current iM to max iM should decrease by a factor of 1/2.\r\n return Decimal.max(0, Math.log2(imCap / (imCap - cost)) - Math.log2(imCap / (imCap - currentIM))).times(this.scaleTimeForIM).toNumber();\r\n }\r\n};\r\n","import { sha512_256 } from \"js-sha512\";\r\n\r\nimport { DC } from \"./constants\";\r\nimport FullScreenAnimationHandler from \"./full-screen-animation-handler\";\r\n\r\n/* eslint-disable no-console */\r\n// Disabling no-console here seems\r\n// reasonable, since these are the devtools after all\r\nexport const dev = {};\r\n\r\ndev.hardReset = function() {\r\n GameStorage.hardReset();\r\n};\r\n\r\ndev.giveAllAchievements = function() {\r\n const allAchievements = Achievements.all.concat(SecretAchievements.all);\r\n for (const achievement of allAchievements) achievement.unlock();\r\n};\r\n\r\n// Know that both dev.doubleEverything and dev.tripleEverything are both broken\r\n// with this error https://i.imgur.com/ZMEBNTv.png\r\n\r\ndev.doubleEverything = function() {\r\n Object.keys(player).forEach(key => {\r\n if (typeof player[key] === \"number\") player[key] *= 2;\r\n if (typeof player[key] === \"object\" && player[key].constructor !== Object) player[key] = player[key].times(2);\r\n if (typeof player[key] === \"object\" && !isFinite(player[key])) {\r\n Object.keys(player[key]).forEach(key2 => {\r\n if (typeof player[key][key2] === \"number\") player[key][key2] *= 2;\r\n if (typeof player[key][key2] === \"object\" && player[key][key2].constructor !== Object)\r\n player[key][key2] = player[key][key2].times(2);\r\n });\r\n }\r\n });\r\n};\r\n\r\ndev.tripleEverything = function() {\r\n Object.keys(player).forEach(key => {\r\n if (typeof player[key] === \"number\") player[key] *= 3;\r\n if (typeof player[key] === \"object\" && player[key].constructor !== Object) player[key] = player[key].times(3);\r\n if (typeof player[key] === \"object\" && !isFinite(player[key])) {\r\n Object.keys(player[key]).forEach(key3 => {\r\n if (typeof player[key][key3] === \"number\") player[key][key3] *= 3;\r\n if (typeof player[key][key3] === \"object\" && player[key][key3].constructor !== Object)\r\n player[key][key3] = player[key][key3].times(3);\r\n });\r\n }\r\n });\r\n};\r\n\r\ndev.barrelRoll = function() {\r\n FullScreenAnimationHandler.display(\"a-barrel-roll\", 5);\r\n};\r\n\r\ndev.spin3d = function() {\r\n if (document.body.style.animation === \"\") document.body.style.animation = \"a-spin3d 3s infinite\";\r\n else document.body.style.animation = \"\";\r\n};\r\n\r\ndev.spin4d = function() {\r\n if (document.body.style.animation === \"\") document.body.style.animation = \"a-spin4d 3s infinite\";\r\n else document.body.style.animation = \"\";\r\n};\r\n\r\ndev.cancerize = function() {\r\n Theme.tryUnlock(\"Design\");\r\n Notation.emoji.setAsCurrent();\r\n};\r\n\r\ndev.fixSave = function() {\r\n const save = JSON.stringify(player, GameSaveSerializer.jsonConverter);\r\n const fixed = save.replace(/NaN/gui, \"10\");\r\n const saveData = JSON.parse(fixed);\r\n if (!saveData || GameStorage.checkPlayerObject(saveData) !== \"\") {\r\n Modal.message.show(\"Could not fix the save.\");\r\n return;\r\n }\r\n GameStorage.loadPlayerObject(saveData);\r\n GameStorage.save();\r\n};\r\n\r\ndev.updateTDCosts = function() {\r\n for (let tier = 1; tier < 9; tier++) {\r\n const dim = TimeDimension(tier);\r\n dim.cost = dim.nextCost(dim.bought);\r\n }\r\n};\r\n\r\ndev.refundTimeDims = function() {\r\n for (const dimension of TimeDimensions.all) {\r\n dimension.bought = 0;\r\n }\r\n dev.updateTDCosts();\r\n};\r\n\r\ndev.refundEPMult = function() {\r\n player.epmultUpgrades = 0;\r\n};\r\n\r\ndev.refundDilStudies = function() {\r\n for (const study of GameDatabase.eternity.timeStudies.dilation) {\r\n if (player.dilation.studies.includes(study.id)) {\r\n player.dilation.studies.splice(player.dilation.studies.indexOf(study.id), 1);\r\n console.log(document.getElementById(`removed dilstudy${study.id}`));\r\n Currency.timeTheorems.add(study.cost);\r\n }\r\n }\r\n};\r\n\r\ndev.resetDilation = function() {\r\n player.dilation.dilatedTime = DC.D0;\r\n player.dilation.tachyonParticles = DC.D0;\r\n player.dilation.rebuyables[1] = 0;\r\n player.dilation.rebuyables[2] = 0;\r\n player.dilation.rebuyables[3] = 0;\r\n player.dilation.baseTachyonGalaxies = 0;\r\n player.dilation.totalTachyonGalaxies = 0;\r\n};\r\n\r\n// We want to give a large degree of options\r\n// when making a special glyph, so no max-params\r\n// eslint-disable-next-line max-params\r\ndev.giveSpecialGlyph = function(color, symbol, level, rawLevel = level) {\r\n if (GameCache.glyphInventorySpace.value === 0) return;\r\n const glyph = GlyphGenerator.randomGlyph({ actualLevel: level, rawLevel });\r\n glyph.symbol = symbol;\r\n glyph.color = color;\r\n Glyphs.addToInventory(glyph);\r\n};\r\n\r\ndev.giveGlyph = function(level, rawLevel = level) {\r\n if (GameCache.glyphInventorySpace.value === 0) return;\r\n Glyphs.addToInventory(GlyphGenerator.randomGlyph({ actualLevel: level, rawLevel }));\r\n};\r\n\r\ndev.giveRealityGlyph = function(level) {\r\n if (GameCache.glyphInventorySpace.value === 0) return;\r\n Glyphs.addToInventory(GlyphGenerator.realityGlyph(level));\r\n};\r\n\r\ndev.setCompanionGlyphEP = function(eternityPoints) {\r\n const glyph = player.reality.glyphs.active\r\n .concat(player.reality.glyphs.inventory)\r\n .filter(g => g.type === \"companion\")[0];\r\n glyph.strength = rarityToStrength(eternityPoints.log10() / 1e6);\r\n};\r\n\r\ndev.decriminalize = function() {\r\n SecretAchievement(23).lock();\r\n EventHub.dispatch(GAME_EVENT.ACHIEVEMENT_UNLOCKED);\r\n};\r\n\r\ndev.removeAch = function(name) {\r\n if (name === \"all\") {\r\n const allAchievements = Achievements.all.concat(SecretAchievements.all);\r\n for (const achievement of allAchievements) achievement.lock();\r\n return \"removed all achievements\";\r\n }\r\n if (typeof (name) === \"number\") return Achievement(name).lock();\r\n if (name.startsWith(\"r\")) return Achievement(parseInt(name.slice(1), 10)).lock();\r\n if (name.startsWith(\"s\")) return SecretAchievement(parseInt(name.slice(1), 10)).lock();\r\n return \"failed to delete achievement\";\r\n};\r\n\r\nwindow.nextNewsMessageId = undefined;\r\n\r\ndev.setNextNewsMessage = function(id) {\r\n nextNewsMessageId = id;\r\n};\r\n\r\ndev.implode = function() {\r\n bigCrunchAnimation();\r\n};\r\n\r\ndev.eternify = function() {\r\n eternityAnimation();\r\n};\r\n\r\ndev.dilate = function() {\r\n animateAndDilate();\r\n};\r\n\r\ndev.undilate = function() {\r\n animateAndUndilate();\r\n};\r\n\r\ndev.realize = function() {\r\n runRealityAnimation();\r\n};\r\n\r\ndev.respecPerks = function() {\r\n player.reality.perkPoints += player.reality.perks.size;\r\n player.reality.perks = new Set();\r\n GameCache.achievementPeriod.invalidate();\r\n GameCache.buyablePerks.invalidate();\r\n};\r\n\r\nexport function isDevEnvironment() {\r\n const href = window.location.href;\r\n return href.split(\"//\")[1].length > 20 || isLocalEnvironment();\r\n}\r\n\r\nexport function isLocalEnvironment() {\r\n const href = window.location.href;\r\n return href.includes(\"file\") || href.includes(\"127.0.0.1\") || href.includes(\"localhost\");\r\n}\r\n\r\ndev.togglePerformanceStats = function() {\r\n PerformanceStats.toggle();\r\n};\r\n\r\n// Buys all perks, will end up buying semi-randomly if not enough pp\r\ndev.buyAllPerks = function() {\r\n const visited = [];\r\n const toVisit = [Perk.firstPerk];\r\n while (toVisit.length > 0) {\r\n if (player.reality.perkPoints < 1) break;\r\n const perk = toVisit.shift();\r\n visited.push(perk);\r\n toVisit.push(...perk.connectedPerks.filter(p => !visited.includes(p)));\r\n perk.purchase();\r\n }\r\n};\r\n\r\n// This should help for balancing different glyph types, strong rounding of values is intentional\r\ndev.printResourceTotals = function() {\r\n console.log(`Antimatter: e${Currency.antimatter.exponent.toPrecision(3)}`);\r\n console.log(`RM: e${Math.round(MachineHandler.gainedRealityMachines.log10())}`);\r\n console.log(`Glyph level: ${100 * Math.floor(gainedGlyphLevel().actualLevel / 100 + 0.5)}`);\r\n\r\n console.log(`Tickspeed: e${-Tickspeed.current.exponent.toPrecision(3)}`);\r\n console.log(`Gamespeed: ${Math.pow(getGameSpeedupFactor(), 1.2).toPrecision(1)}`);\r\n const aGalaxy = 100 * Math.floor(player.galaxies / 100 + 0.5);\r\n const rGalaxy = 100 * Math.floor(Replicanti.galaxies.total / 100 + 0.5);\r\n const dGalaxy = 100 * Math.floor(player.dilation.totalTachyonGalaxies / 100 + 0.5);\r\n console.log(`Galaxies: ${aGalaxy}+${rGalaxy}+${dGalaxy} (${aGalaxy + rGalaxy + dGalaxy})`);\r\n console.log(`Tick reduction: e${-Math.round(getTickSpeedMultiplier().log10())}`);\r\n\r\n let ADmults = DC.D1;\r\n for (let i = 1; i <= 8; i++) {\r\n ADmults = ADmults.times(AntimatterDimension(i).multiplier);\r\n }\r\n console.log(`AD mults: e${ADmults.log10().toPrecision(3)}`);\r\n let IDmults = DC.D1;\r\n for (let i = 1; i <= 8; i++) {\r\n IDmults = IDmults.times(InfinityDimension(i).multiplier);\r\n }\r\n console.log(`ID mults: e${IDmults.log10().toPrecision(3)}`);\r\n let TDmults = DC.D1;\r\n for (let i = 1; i <= 8; i++) {\r\n TDmults = TDmults.times(TimeDimension(i).multiplier);\r\n }\r\n console.log(`TD mults: e${TDmults.log10().toPrecision(3)}`);\r\n console.log(`Tickspeed from TD: ${formatWithCommas(1000 * Math.floor(player.totalTickGained / 1000 + 0.5))}`);\r\n\r\n console.log(`Infinities: e${Math.round(player.infinities.log10())}`);\r\n console.log(`Eternities: e${Math.round(player.eternities.log10())}`);\r\n console.log(`Replicanti: e${formatWithCommas(1e5 * Math.floor(Replicanti.amount.log10() / 1e5 + 0.5))}`);\r\n\r\n console.log(`TT: e${Math.round(player.timestudy.theorem.log10())}`);\r\n console.log(`DT: e${Math.round(player.dilation.dilatedTime.log10())}`);\r\n console.log(`TP: e${Math.round(player.dilation.tachyonParticles.log10())}`);\r\n};\r\n\r\ndev.unlockCelestialQuotes = function(celestial) {\r\n Quotes[celestial].all.forEach(x => x.show());\r\n};\r\n\r\ndev.presentCelestialQuotes = function(celestial) {\r\n Quotes[celestial].all.forEach(x => x.present());\r\n};\r\n\r\n// This doesn't check everything but hopefully it gets some of the more obvious ones.\r\ndev.testReplicantiCode = function(singleId, useDebugger = false) {\r\n const situationLists = [\r\n [\r\n function() {\r\n player.infinities = DC.E12;\r\n player.celestials.effarig.unlockBits = 64;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.replicanti.interval = 1;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(33);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(62);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(131);\r\n },\r\n function() {\r\n player.timestudy.studies.push(132);\r\n },\r\n function() {\r\n player.timestudy.studies.push(133);\r\n },\r\n function() {\r\n player.timestudy.studies.push(131, 132, 133);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(192);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(213);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(225);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(226);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.achievementBits[8] |= 16;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.achievementBits[12] |= 8;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.achievementBits[12] |= 128;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.reality.perks = new Set([32]);\r\n }\r\n ],\r\n [\r\n function() {\r\n Autobuyer.replicantiGalaxy.isActive = true;\r\n }\r\n ],\r\n [\r\n function() {\r\n Replicanti.galaxies.isPlayerHoldingR = true;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.replicanti.boughtGalaxyCap = 100;\r\n },\r\n function() {\r\n player.replicanti.boughtGalaxyCap = 100;\r\n player.replicanti.galaxies = 50;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.reality.upgReqs = (1 << 6);\r\n player.reality.upgradeBits = 64;\r\n }\r\n ]\r\n ];\r\n const situationCount = situationLists.map(x => x.length + 1).reduce((x, y) => x * y);\r\n const resultList = [];\r\n const runSituation = function(id) {\r\n Replicanti.galaxies.isPlayerHoldingR = false;\r\n GameStorage.loadPlayerObject(Player.defaultStart);\r\n player.infinities = DC.D1;\r\n player.infinityPoints = DC.E150;\r\n Replicanti.unlock();\r\n player.replicanti.chance = 1;\r\n for (let i = 0; i < situationLists.length; i++) {\r\n const div = situationLists.slice(0, i).map(x => x.length + 1).reduce((x, y) => x * y, 1);\r\n // eslint-disable-next-line no-empty-function\r\n const situation = [() => {}].concat(situationLists[i])[Math.floor(id / div) % (situationLists[i].length + 1)];\r\n situation();\r\n }\r\n function doReplicantiTicks() {\r\n for (let j = 0; j <= 5; j++) {\r\n replicantiLoop(Math.pow(10, j));\r\n resultList.push(Notation.scientific.formatDecimal(Replicanti.amount, 5, 5));\r\n resultList.push(player.replicanti.galaxies);\r\n resultList.push(Replicanti.galaxies.total);\r\n }\r\n }\r\n doReplicantiTicks();\r\n player.antimatter = DC.E309;\r\n player.records.thisInfinity.maxAM = DC.E309;\r\n bigCrunchReset();\r\n doReplicantiTicks();\r\n };\r\n if (singleId === undefined) {\r\n const total = 4000;\r\n const p = 10007;\r\n if (total * p < situationCount) {\r\n throw new Error(\"Prime p is not large enough to go through all situations.\");\r\n }\r\n for (let i = 0; i < total; i++) {\r\n const actual = i * p % situationCount;\r\n if (i % 100 === 0) {\r\n console.log(`Considering situation #${i}/${total} (${actual})`);\r\n }\r\n runSituation(actual);\r\n }\r\n } else {\r\n runSituation(singleId);\r\n }\r\n const hash = sha512_256(resultList.toString());\r\n console.log(hash);\r\n if (useDebugger) {\r\n // eslint-disable-next-line no-debugger\r\n debugger;\r\n }\r\n return hash;\r\n};\r\n\r\ndev.testGlyphs = function(config) {\r\n const glyphLevel = config.glyphLevel || 6500;\r\n const duration = config.duration || 4000;\r\n let glyphId = Date.now();\r\n const save = GameSaveSerializer.serialize(player);\r\n const makeGlyph = (type, effects) => ({\r\n type,\r\n level: glyphLevel,\r\n strength: 3.5,\r\n rawLevel: glyphLevel,\r\n idx: null,\r\n id: glyphId++,\r\n effects: makeGlyphEffectBitmask(effects),\r\n });\r\n const makeAllEffectGlyph = type => makeGlyph(type, GlyphTypes[type].effects.map(e => e.id));\r\n const effarigGlyphs = [\r\n makeGlyph(\"effarig\", [\"effarigantimatter\", \"effarigdimensions\", \"effarigforgotten\", \"effarigblackhole\"]),\r\n makeGlyph(\"effarig\", [\"effarigantimatter\", \"effarigdimensions\", \"effarigforgotten\", \"effarigachievement\"]),\r\n ];\r\n function makeCombinationsWithRepeats(count, elements) {\r\n if (elements.length === 0) return [];\r\n if (count === 0) return [[]];\r\n const withoutFirst = makeCombinationsWithRepeats(count, elements.slice(1));\r\n const withFirst = makeCombinationsWithRepeats(count - 1, elements);\r\n withFirst.forEach(e => e.push(elements[0]));\r\n return withFirst.concat(withoutFirst);\r\n }\r\n const sets5 = makeCombinationsWithRepeats(5, BASIC_GLYPH_TYPES)\r\n .map(s => s.map(t => makeAllEffectGlyph(t)));\r\n const sets4 = makeCombinationsWithRepeats(4, BASIC_GLYPH_TYPES)\r\n .map(s => s.map(t => makeAllEffectGlyph(t)));\r\n const effarigSets = effarigGlyphs.map(g => sets4.map(s => [g].concat(s)));\r\n const glyphSets = sets5.concat(...effarigSets);\r\n function equipSet(index) {\r\n player.reality.glyphs.active = glyphSets[index].map((g, idx) => {\r\n g.idx = idx;\r\n return g;\r\n });\r\n Glyphs.active = Array.from(player.reality.glyphs.active);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n }\r\n function glyphToShortString(glyph) {\r\n if (glyph.type === \"effarig\") {\r\n return effarigGlyphs.findIndex(e => e.id === glyph.id).toString();\r\n }\r\n return GLYPH_SYMBOLS[glyph.type];\r\n }\r\n function padString(s, length, before = false) {\r\n if (s.length >= length) return s;\r\n return before ? (\" \").repeat(length - s.length) + s : s + (\" \").repeat(length - s.length);\r\n }\r\n function finishTrial(index) {\r\n const done = padString(`${Math.floor(100 * (index + 1) / glyphSets.length)}%`, 4, true);\r\n const rm = padString(MachineHandler.gainedRealityMachines.toPrecision(2), 9);\r\n const gl = padString(gainedGlyphLevel().actualLevel, 4);\r\n const ep = padString(player.eternityPoints.exponent.toString(), 6);\r\n const ip = padString(player.infinityPoints.exponent.toString(), 8);\r\n const am = padString(Currency.antimatter.exponent.toString(), 12);\r\n const dimboosts = DimBoost.purchasedBoosts;\r\n const galaxies = Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies;\r\n const glyphData = glyphSets[index].map(glyphToShortString).sum();\r\n console.log(`${done} ${glyphData} rm=${rm} gl=${gl} ep=${ep} ip=${ip} am=${am} ` +\r\n `dimboosts=${dimboosts} galaxies=${galaxies}`);\r\n GameStorage.offlineEnabled = false;\r\n GameStorage.import(save);\r\n if (index < glyphSets.length - 1) {\r\n setTimeout(runTrial, 100, index + 1);\r\n }\r\n }\r\n function runTrial(index) {\r\n equipSet(index);\r\n AutomatorBackend.start();\r\n setTimeout(finishTrial, duration, index);\r\n }\r\n runTrial(0);\r\n};\r\n\r\n// May want to make this command in particular publicly known if automator gating is a common complaint post-release\r\ndev.unlockAutomator = function() {\r\n player.reality.automator.forceUnlock = true;\r\n};\r\n\r\n// This bypasses any conflict checking and forces the current save to overwrite the cloud save. This largely exists\r\n// because normal cloud saving checks for a conflict and then always shows a modal if a conflict is found, only actually\r\n// saving if the player says to in the modal. The check can fail if the cloud save is somehow malformed and missing\r\n// props. This can lead to the check always failing, the modal never showing up, and cloud saving never occurring. That\r\n// should in principle only show up in dev, as migrations aren't run on cloud saves, but this allows fixing in case.\r\ndev.forceCloudSave = async function() {\r\n const save = await Cloud.load();\r\n const root = GameSaveSerializer.deserialize(save);\r\n const saveId = GameStorage.currentSlot;\r\n if (!root.saves) root.saves = [];\r\n root.saves[saveId] = GameStorage.saves[saveId];\r\n Cloud.save(saveId);\r\n};\r\n\r\n// TODO Figure out if we want to remove this before release\r\ndev.unlockAllCosmeticSets = function() {\r\n player.reality.glyphs.cosmetics.unlockedFromNG = Object.keys(GameDatabase.reality.glyphCosmeticSets);\r\n};\r\n","// All news IDs follow the format [letter(s)][number] so we always assume that's the case and make sure to access the\r\n// relevant props within player.news.seen\r\nexport const NewsHandler = {\r\n // In principle 32 should work but something seems to go wrong with negative numbers in the function that counts\r\n // the number of bits in a bitmask, so we have to use 31.\r\n BITS_PER_MASK: 31,\r\n\r\n addSeenNews(id) {\r\n // From very old save versions; we ignore any IDs which belong to tickers which no longer exist.\r\n if (!GameDatabase.news.map(e => e.id).includes(id)) return;\r\n\r\n const groups = id.match(/([a-z]+)(\\d+)/u);\r\n const type = groups[1];\r\n const number = parseInt(groups[2], 10);\r\n\r\n // This check is needed for migration purposes because we attempt to add news tickers before the relevant\r\n // properties are created in both normal and dev migrations. There's some odd behavior which results in changes\r\n // either not persisting outside of this function or being immediately overwritten if the props aren't specifically\r\n // added here for some reason (as opposed to being initialized to empty in player.js)\r\n if (!player.news.seen[type]) player.news.seen[type] = [];\r\n\r\n // If the bit array isn't large enough (ie. the numerical ID is the largest we've seen so far by a long shot), then\r\n // we pad the array with zeroes until we can fit the new ID in before actually adding it.\r\n while (this.BITS_PER_MASK * player.news.seen[type].length <= number) player.news.seen[type].push(0);\r\n player.news.seen[type][Math.floor(number / this.BITS_PER_MASK)] |= 1 << (number % this.BITS_PER_MASK);\r\n player.news.totalSeen++;\r\n },\r\n\r\n hasSeenNews(id) {\r\n const groups = id.match(/([a-z]+)(\\d+)/u);\r\n const type = groups[1];\r\n const number = parseInt(groups[2], 10);\r\n const bitArray = player.news.seen[type];\r\n\r\n if (!bitArray || this.BITS_PER_MASK * bitArray.length < number) return false;\r\n return (bitArray[Math.floor(number / this.BITS_PER_MASK)] |= 1 << (number % this.BITS_PER_MASK)) !== 0;\r\n },\r\n\r\n get uniqueTickersSeen() {\r\n let totalSeen = 0;\r\n for (const bitmaskArray of Object.values(player.news.seen)) {\r\n for (const bitmask of bitmaskArray) {\r\n totalSeen += countValuesFromBitmask(bitmask);\r\n }\r\n }\r\n return totalSeen;\r\n }\r\n};\r\n","import { RebuyableMechanicState } from \"./game-mechanics\";\r\nimport { SteamRuntime } from \"@/steam\";\r\n\r\nimport Payments from \"./payments\";\r\n\r\nexport const shop = {};\r\n\r\nexport const ShopPurchaseData = {\r\n totalSTD: 0,\r\n spentSTD: 0,\r\n respecAvailable: false,\r\n lastRespec: \"\",\r\n unlockedCosmetics: [],\r\n\r\n get availableSTD() {\r\n return this.totalSTD - this.spentSTD;\r\n },\r\n\r\n get isIAPEnabled() {\r\n return Cloud.loggedIn && this.availableSTD >= 0 && player.IAP.enabled;\r\n },\r\n\r\n // We also allow for respecs if it's been at least 3 days since the last one\r\n get timeUntilRespec() {\r\n const msSinceLast = Date.now() - new Date(ShopPurchaseData.lastRespec).getTime();\r\n return TimeSpan.fromMilliseconds(3 * 86400 * 1000 - msSinceLast);\r\n },\r\n\r\n get canRespec() {\r\n return this.respecAvailable || this.timeUntilRespec.totalDays <= 0;\r\n },\r\n\r\n updateLocalSTD(newData) {\r\n this.totalSTD = newData.totalSTD;\r\n this.spentSTD = newData.spentSTD;\r\n this.respecAvailable = newData.respecAvailable;\r\n this.lastRespec = newData.lastRespec ?? 0;\r\n this.unlockedCosmetics = [...(newData.unlockedCosmetics ?? [])];\r\n for (const key of Object.keys(GameDatabase.shopPurchases)) this[key] = newData[key] ?? 0;\r\n if (this.allCosmeticSets > 0) this.unlockedCosmetics = Object.keys(GameDatabase.reality.glyphCosmeticSets);\r\n if (ShopPurchaseData.isIAPEnabled) Speedrun.setSTDUse(true);\r\n GameStorage.save();\r\n },\r\n\r\n clearLocalSTD() {\r\n this.totalSTD = 0;\r\n this.spentSTD = 0;\r\n this.respecAvailable = false;\r\n this.unlockedCosmetics = [];\r\n for (const key of Object.keys(GameDatabase.shopPurchases)) this[key] = 0;\r\n },\r\n\r\n // Reads STD props from the cloud and sets local cached values with the result\r\n async syncSTD(showNotification = true, fetchedData = undefined) {\r\n if (!Cloud.loggedIn) return;\r\n let newSTDData;\r\n if (fetchedData) {\r\n newSTDData = fetchedData;\r\n } else {\r\n try {\r\n const statusRes = await fetch(`${STD_BACKEND_URL}/STDData?user=${Cloud.user.id}`);\r\n newSTDData = await statusRes.json();\r\n } catch (e) {\r\n GameUI.notify.error(\"Could not sync STD purchases!\", 10000);\r\n return;\r\n }\r\n }\r\n if (showNotification && newSTDData.totalSTD > 0) GameUI.notify.info(\"STD purchases successfully loaded!\", 10000);\r\n this.updateLocalSTD(newSTDData);\r\n },\r\n\r\n respecRequest() {\r\n if (player.options.confirmations.respecIAP) {\r\n Modal.respecIAP.show();\r\n } else {\r\n this.respecAll();\r\n }\r\n },\r\n\r\n async respecAll() {\r\n if (!this.canRespec) {\r\n // This case only happens if the player is cheating and using the console to make the game think it has a respec\r\n // when on the backend they don't. Nevertheless, responsive UI rarely hurts\r\n GameUI.notify.error(\"You do not have a respec available\", 10000);\r\n return;\r\n }\r\n let res;\r\n try {\r\n res = await fetch(`${STD_BACKEND_URL}/respec`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify({ user: Cloud.user.id })\r\n });\r\n } catch (e) {\r\n GameUI.notify.error(\"Unable to respec STD purchases!\", 10000);\r\n return;\r\n }\r\n const stdData = await res.json();\r\n if (stdData.success) GameUI.notify.info(\"STD respec successful!\", 10000);\r\n else GameUI.notify.error(\"No purchases to respec!\", 10000);\r\n this.updateLocalSTD(stdData.data);\r\n },\r\n};\r\n\r\n// We track the local state of shop purchases here, so dynamically add all the keys which exist in the gameDB\r\nfor (const key of Object.keys(GameDatabase.shopPurchases)) ShopPurchaseData[key] = 0;\r\n\r\nclass ShopPurchaseState extends RebuyableMechanicState {\r\n get currency() {\r\n return ShopPurchaseData.availableSTD;\r\n }\r\n\r\n get isAffordable() {\r\n return this.currency >= this.cost;\r\n }\r\n\r\n get description() {\r\n const desc = this.config.description;\r\n return typeof desc === \"function\" ? desc() : desc;\r\n }\r\n\r\n get cost() {\r\n const cost = this.config.cost;\r\n return typeof cost === \"function\" ? cost() : cost;\r\n }\r\n\r\n // ShopPurchaseData for any particular key is undefined in between page load and STD load,\r\n // so we need to guard against that causing NaNs to propagate through the save\r\n get purchases() {\r\n return ShopPurchaseData[this.config.key] ?? 0;\r\n }\r\n\r\n set purchases(value) {\r\n if (!Number.isFinite(value)) return;\r\n ShopPurchaseData[this.config.key] = value;\r\n }\r\n\r\n isUnlocked() {\r\n return player.records.fullGameCompletions > 0 || (this.config.isUnlocked?.() ?? true);\r\n }\r\n\r\n get lockText() {\r\n return this.config.lockText;\r\n }\r\n\r\n get shouldDisplayMult() {\r\n return Boolean(this.config.multiplier);\r\n }\r\n\r\n get currentMult() {\r\n if (!this.shouldDisplayMult) return \"\";\r\n return this.config.multiplier(ShopPurchaseData.isIAPEnabled ? this.purchases : 0);\r\n }\r\n\r\n get nextMult() {\r\n if (!this.shouldDisplayMult) return \"\";\r\n return this.config.multiplier(ShopPurchaseData.isIAPEnabled ? this.purchases + 1 : 0);\r\n }\r\n\r\n // We want to still display the correct value in the button, so we need separate getters for it\r\n get currentMultForDisplay() {\r\n if (!this.shouldDisplayMult) return \"\";\r\n return this.config.multiplier(this.purchases);\r\n }\r\n\r\n get nextMultForDisplay() {\r\n if (!this.shouldDisplayMult) return \"\";\r\n return this.config.multiplier(this.purchases + 1);\r\n }\r\n\r\n formatEffect(effect) {\r\n return this.config.formatEffect?.(effect) || formatX(effect, 2, 0);\r\n }\r\n\r\n async purchase() {\r\n if (!this.canBeBought) return false;\r\n if (GameEnd.creditsEverClosed) return false;\r\n if (this.config.instantPurchase && ui.$viewModel.modal.progressBar) return false;\r\n\r\n const cosmeticId = this.config.key === \"singleCosmeticSet\"\r\n ? GlyphAppearanceHandler.chosenFromModal?.id\r\n : undefined;\r\n\r\n // Contact the purchase provider to verify the purchase\r\n const success = SteamRuntime.isActive\r\n ? await SteamRuntime.purchaseShopItem(this.config.key, this.cost, cosmeticId)\r\n : await Payments.buyUpgrade(this.config.key, cosmeticId);\r\n if (!success) return false;\r\n\r\n if (player.IAP.enabled) Speedrun.setSTDUse(true);\r\n if (this.config.instantPurchase) this.config.onPurchase();\r\n GameUI.update();\r\n return true;\r\n }\r\n}\r\n\r\nexport const ShopPurchase = mapGameDataToObject(\r\n GameDatabase.shopPurchases,\r\n config => new ShopPurchaseState(config)\r\n);\r\n\r\nshop.purchaseTimeSkip = function() {\r\n Speedrun.setSTDUse(true);\r\n simulateTime(3600 * 6);\r\n};\r\n\r\nshop.purchaseLongerTimeSkip = function() {\r\n Speedrun.setSTDUse(true);\r\n simulateTime(3600 * 24);\r\n};\r\n","class SubtabState {\r\n constructor(parent, config) {\r\n this._parent = parent;\r\n this.config = config;\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get symbol() {\r\n return this.config.symbol;\r\n }\r\n\r\n get isPermanentlyHidden() {\r\n return this.config.hideAt < GameEnd.endState && !GameEnd.creditsClosed;\r\n }\r\n\r\n get hidable() {\r\n return this.config.hidable;\r\n }\r\n\r\n get isHidden() {\r\n if (Enslaved.isRunning || Pelle.hasGalaxyGenerator) return false;\r\n return ((player.options.hiddenSubtabBits[this._parent.id] & (1 << this.id)) !== 0) &&\r\n this.hidable;\r\n }\r\n\r\n get isUnlocked() {\r\n return this.config.condition === undefined || this.config.condition();\r\n }\r\n\r\n get isAvailable() {\r\n return !this.isPermanentlyHidden && (this.isOpen || !this.isHidden && this.isUnlocked);\r\n }\r\n\r\n get hasNotification() {\r\n return player.tabNotifications.has(this._parent.key + this.key);\r\n }\r\n\r\n get key() {\r\n return this.config.key;\r\n }\r\n\r\n get id() {\r\n return this.config.id;\r\n }\r\n\r\n show(manual) {\r\n this._parent.show(manual, this);\r\n }\r\n\r\n unhideTab() {\r\n this._parent.unhideTab();\r\n player.options.hiddenSubtabBits[this._parent.id] &= ~(1 << this.id);\r\n }\r\n\r\n toggleVisibility() {\r\n if (this._parent.id === Tabs.current.id && this.id === Tabs.current._currentSubtab.id) return;\r\n player.options.hiddenSubtabBits[this._parent.id] ^= (1 << this.id);\r\n\r\n checkTabVisibilityForSecretAchievement();\r\n }\r\n\r\n get isOpen() {\r\n return ui.view.tab === this._parent.key && ui.view.subtab === this.key;\r\n }\r\n}\r\n\r\nfunction findLastOpenSubtab(tabId, subtabs) {\r\n return subtabs.find(s => s.id === player.options.lastOpenSubtab[tabId]) ?? subtabs[0];\r\n}\r\n\r\nfunction cycleThroughSubtabs(subtabs, currentSubtab) {\r\n const availableTabs = subtabs.filter(tab => tab.isAvailable);\r\n const currentIndex = availableTabs.indexOf(currentSubtab);\r\n const direction = ui.view.shiftDown ? -1 : 1;\r\n let newIndex = currentIndex + direction;\r\n newIndex = newIndex < 0 ? availableTabs.length - 1 : newIndex;\r\n newIndex = newIndex > availableTabs.length - 1 ? 0 : newIndex;\r\n return availableTabs[newIndex];\r\n}\r\n\r\nclass TabState {\r\n constructor(config) {\r\n this.config = config;\r\n this.isOpened = false;\r\n const subtabs = [];\r\n for (const subtabConfig of config.subtabs) {\r\n const subtab = new SubtabState(this, subtabConfig);\r\n this[subtabConfig.key] = subtab;\r\n subtabs.push(subtab);\r\n }\r\n this.subtabs = subtabs;\r\n this._currentSubtab = findLastOpenSubtab(this.id, subtabs);\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get key() {\r\n return this.config.key;\r\n }\r\n\r\n get id() {\r\n return this.config.id;\r\n }\r\n\r\n get isPermanentlyHidden() {\r\n return this.config.hideAt < GameEnd.endState && !GameEnd.creditsClosed;\r\n }\r\n\r\n get hidable() {\r\n return this.config.hidable;\r\n }\r\n\r\n get isHidden() {\r\n if (Enslaved.isRunning || Pelle.hasGalaxyGenerator) return false;\r\n const hasVisibleSubtab = this.subtabs.some(t => t.isAvailable);\r\n return (((player.options.hiddenTabBits & (1 << this.id)) !== 0) || !hasVisibleSubtab) && this.hidable;\r\n }\r\n\r\n get isUnlocked() {\r\n return this.config.condition === undefined || this.config.condition();\r\n }\r\n\r\n get isAvailable() {\r\n return !this.isPermanentlyHidden && (this.isOpen || !this.isHidden && this.isUnlocked);\r\n }\r\n\r\n get isOpen() {\r\n return ui.view.tab === this.key;\r\n }\r\n\r\n get hasNotification() {\r\n return this.subtabs.some(tab => tab.hasNotification);\r\n }\r\n\r\n show(manual, subtab = undefined) {\r\n if (!manual && !player.options.automaticTabSwitching || Quote.isOpen) return;\r\n if (subtab !== undefined) {\r\n if (!Enslaved.isRunning) subtab.unhideTab();\r\n this._currentSubtab = subtab;\r\n } else if (ui.view.tab === this.key && ui.view.initialized && manual) {\r\n this._currentSubtab = cycleThroughSubtabs(this.subtabs, this._currentSubtab);\r\n } else {\r\n this._currentSubtab = findLastOpenSubtab(this.id, this.subtabs);\r\n }\r\n\r\n if (!this._currentSubtab.isUnlocked) this.resetToUnlocked();\r\n if (!this._currentSubtab.isAvailable) this.resetToAvailable();\r\n\r\n ui.view.tab = this.key;\r\n ui.view.subtab = this._currentSubtab.key;\r\n const tabNotificationKey = this.key + this._currentSubtab.key;\r\n if (player.tabNotifications.has(tabNotificationKey)) player.tabNotifications.delete(tabNotificationKey);\r\n\r\n if (manual) Modal.hideAll();\r\n EventHub.dispatch(GAME_EVENT.TAB_CHANGED, this, this._currentSubtab);\r\n }\r\n\r\n unhideTab() {\r\n player.options.hiddenTabBits &= ~(1 << this.id);\r\n }\r\n\r\n toggleVisibility() {\r\n if (this.id === Tabs.current.id) return;\r\n player.options.hiddenTabBits ^= (1 << this.id);\r\n\r\n checkTabVisibilityForSecretAchievement();\r\n }\r\n\r\n resetToAvailable() {\r\n this._currentSubtab = this.subtabs.find(tab => tab.isAvailable);\r\n if (this._currentSubtab === undefined) {\r\n this._currentSubtab = this.subtabs[0];\r\n this._currentSubtab.unhideTab();\r\n }\r\n }\r\n\r\n resetToUnlocked() {\r\n this._currentSubtab = this.subtabs.find(tab => tab.isUnlocked);\r\n }\r\n}\r\n\r\nexport const Tab = GameDatabase.tabs.mapToObject(\r\n config => config.key,\r\n config => new TabState(config)\r\n);\r\n\r\nexport const Tabs = (function() {\r\n return {\r\n all: Object.values(Tab),\r\n get current() {\r\n return Tabs.all.find(tab => tab.isOpen);\r\n },\r\n Classic: [\r\n Tab.dimensions,\r\n Tab.options,\r\n Tab.statistics,\r\n Tab.achievements,\r\n Tab.automation,\r\n Tab.challenges,\r\n Tab.infinity,\r\n Tab.eternity,\r\n Tab.reality,\r\n Tab.celestials,\r\n Tab.mending,\r\n Tab.shop\r\n ],\r\n Modern: [\r\n Tab.dimensions,\r\n Tab.automation,\r\n Tab.challenges,\r\n Tab.infinity,\r\n Tab.eternity,\r\n Tab.reality,\r\n Tab.celestials,\r\n Tab.mending,\r\n Tab.achievements,\r\n Tab.statistics,\r\n Tab.options,\r\n Tab.shop\r\n ],\r\n Synergism: [\r\n Tab.dimensions,\r\n Tab.automation,\r\n Tab.achievements,\r\n Tab.infinity,\r\n Tab.challenges,\r\n Tab.eternity,\r\n Tab.reality,\r\n Tab.celestials,\r\n Tab.mending,\r\n Tab.options,\r\n Tab.statistics,\r\n Tab.shop\r\n ],\r\n get currentUIFormat() {\r\n return ui.view.UIType == 'Modern' ? this.Modern : ui.view.UIType == \"Classic\" ? this.Classic : this.Synergism;\r\n },\r\n };\r\n}());\r\n\r\nconst checkTabVisibilityForSecretAchievement = () => {\r\n // Checks if every unlocked tab that is hidable is hidden\r\n if (Tabs.all.filter(t => t.isUnlocked && t.hidable).every(t => t.isHidden)) SecretAchievement(47).unlock();\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.TAB_CHANGED, () => {\r\n const currTab = Tabs.current.id;\r\n player.options.lastOpenTab = currTab;\r\n player.options.lastOpenSubtab[currTab] = Tabs.current._currentSubtab.id;\r\n});\r\n","class TabNotificationState {\r\n constructor(config) {\r\n this.config = config;\r\n if (config.events) {\r\n for (const event of config.events) {\r\n EventHub.logic.on(event, this.tryTrigger.bind(this), this);\r\n }\r\n }\r\n }\r\n\r\n get triggered() {\r\n return player.triggeredTabNotificationBits & (1 << this.config.id);\r\n }\r\n\r\n tryTrigger() {\r\n if (!this.config.condition() || this.triggered) return;\r\n const currentTabKey = `${Tabs.current.key}${Tabs.current._currentSubtab.key}`;\r\n this.config.tabsToHighLight.map(t => t.parent + t.tab)\r\n .forEach(tab => {\r\n if (tab !== currentTabKey) player.tabNotifications.add(tab);\r\n });\r\n player.triggeredTabNotificationBits |= 1 << this.config.id;\r\n\r\n // Force all tabs and subtabs of this notification to be unhidden\r\n for (const location of this.config.tabsToHighLight) {\r\n const tab = Tabs.all.find(t => t.config.key === location.parent);\r\n const subtab = tab.subtabs.find(t => t.key === location.tab);\r\n tab.unhideTab();\r\n subtab.unhideTab();\r\n }\r\n }\r\n\r\n // In some cases we want to clear a trigger via an event that isn't tab-clicking, in order to show it again\r\n clearTrigger() {\r\n player.triggeredTabNotificationBits &= -1 - (1 << this.config.id);\r\n this.config.tabsToHighLight.map(t => t.parent + t.tab)\r\n .forEach(tab => player.tabNotifications.delete(tab));\r\n }\r\n}\r\n\r\nexport const TabNotification = mapGameDataToObject(\r\n GameDatabase.tabNotifications,\r\n config => new TabNotificationState(config)\r\n);\r\n","/**\r\n * Class which handles the creation of all automator script templates, with the final script and potential\r\n * warnings for inputs being the only parts which are meant to be externally exposed. All the messy parsing\r\n * and potential warning/error finding happens internally.\r\n *\r\n * @member {String[]} lines Array of lines of code which can be used within the automator\r\n * @member {String[]} warnings List of feedback statements to provide to the player based on possible\r\n * undesired behavior which may result from their particular input parameters\r\n * @member {String} storedTreeStr String for specifically importing a supplied study tree. All templates\r\n * will contain at most one tree within; the expected usage is that if some task requires multiple trees, then\r\n * the player will use multiple templates to do so\r\n * @member {TimeStudyTree} storedTreeObj Study tree object for the specified study tree; storing it within the\r\n * object instead of parsing it as-needed higher up in the call chain reduces boilerplate code\r\n */\r\nexport class ScriptTemplate {\r\n constructor(params, templateName) {\r\n this.lines = [];\r\n this.warnings = [];\r\n switch (templateName) {\r\n case \"Climb EP\":\r\n this.templateClimbEP(params);\r\n break;\r\n case \"Grind Eternities\":\r\n this.templateGrindEternities(params);\r\n break;\r\n case \"Grind Infinities\":\r\n this.templateGrindInfinities(params);\r\n break;\r\n case \"Complete Eternity Challenge\":\r\n this.templateDoEC(params);\r\n break;\r\n case \"Unlock Dilation\":\r\n this.templateUnlockDilation(params);\r\n break;\r\n default:\r\n throw new Error(`Unrecognized template name ${templateName} in ScriptTemplate`);\r\n }\r\n }\r\n\r\n /**\r\n * Special formatting for numbers in templates; we can't use format() here because that will change based on the\r\n * player's current notation. This is generally desirable in the rest of the game, but in most notations will\r\n * result in unparseable garbage here. Numbers are formatted assuming they're integers, and Decimals are formatted\r\n * with 2 decimal places (in scientific notation if above 1000)\r\n * @param {Number | Decimal} num Number to format, disregarding current notation settings\r\n * @returns {String} The properly-formatted number, in a reasonable-looking format valid for the automator\r\n */\r\n format(num) {\r\n if (typeof num === \"number\") return Math.round(num);\r\n if (num.lte(1000)) return num.toNumber().toFixed(2);\r\n return `${num.mantissa.toFixed(2)}e${num.exponent}`;\r\n }\r\n\r\n /**\r\n * Parses tree data out of the parameter object and stores within the storedTree fields. Relevant props of object\r\n * passed in:\r\n * @param {String} params.treePreset Name of a preset to load instead of a study tree, will override treeStudies\r\n * if present\r\n * @param {Boolean} params.treeNowait Whether or not the automator should pause at this line and repeat\r\n * until the whole tree is bought\r\n * @param {String} params.treeStudies A study import string to buy\r\n */\r\n storeTreeData(params) {\r\n const nowaitStr = params.treeNowait ? \" nowait\" : \"\";\r\n if (params.treePreset) {\r\n const presetObj = player.timestudy.presets.map((p, i) => ({ ...p, id: i + 1 }))\r\n .find(p => (p.name === params.treePreset || p.id === Number(params.treePreset)));\r\n const preset = presetObj.name ? `name ${presetObj.name}` : `id ${presetObj.id}`;\r\n this.storedTreeStr = `studies${nowaitStr} load ${preset}`;\r\n this.storedTreeObj = new TimeStudyTree(presetObj.studies);\r\n } else {\r\n this.storedTreeStr = `studies${nowaitStr} purchase ${params.treeStudies}`;\r\n this.storedTreeObj = new TimeStudyTree(params.treeStudies);\r\n }\r\n if (this.storedTreeObj.invalidStudies.length > 0) this.warnings.push(\"Tree contains invalid Study IDs\");\r\n if (this.storedTreeObj.purchasedStudies.length < this.storedTreeObj.selectedStudies.length) {\r\n this.warnings.push(\"Tree structure results in some unbought studies when imported with an empty tree\");\r\n if (!params.treeNowait) this.warnings.push(`Automator may possibly get stuck with \"Keep buying Studies\" setting`);\r\n }\r\n }\r\n\r\n /**\r\n * Parses automator data out of a two-prop object storing autobuyer settings, into a suffix of automator code which\r\n * sets the autobuyer to those settings. Relevant props of object passed in:\r\n * @param {String} mode \"mult\" or \"time\" for times highest and time modes, respectively\r\n * @param {Decimal} value Numerical value for autobuyer settings (assumed to be seconds in time)\r\n * @returns {String} String suffix to feed into an automator script, should be prefixed by \"auto [prestige] \"\r\n */\r\n parseAutobuyerProp(mode, value) {\r\n switch (mode) {\r\n case \"mult\":\r\n return `${this.format(value)} x highest`;\r\n case \"time\":\r\n return `${this.format(value)} seconds`;\r\n default:\r\n throw new Error(`Unrecognized autobuyer mode ${mode} in automator script templates`);\r\n }\r\n }\r\n\r\n /**\r\n * Parses the parameter object into a script that sets the infinity and eternity autobuyers and then repeatedly loops\r\n * buying a tree and eternitying until a target EP is reached. Relevant props of object passed in:\r\n * @param {Boolean} params.treeNowait Nowait param to be passed into storeTreeData()\r\n * @param {String} params.treeStudies Study import param to be passed into storeTreeData()\r\n * @param {Decimal} params.finalEP EP value at which to stop looping the script and continue onward\r\n * @param {Object} params.autoInfMode Multiplier or time-based mode for infinity autobuyer\r\n * @param {Object} params.autoInfValue Multiplier threshold or time for infinity autobuyer\r\n * @param {Object} params.autoEterMode Multiplier or time-based mode for eternity autobuyer\r\n * @param {Object} params.autoEterValue Multiplier threshold or time for eternity autobuyer\r\n */\r\n templateClimbEP(params) {\r\n this.lines.push(\"// Template: Climb EP\");\r\n this.lines.push(`notify \"Running Template Climb EP (to ${format(params.finalEP)})\"`);\r\n this.storeTreeData(params);\r\n this.lines.push(`auto infinity ${this.parseAutobuyerProp(params.autoInfMode, params.autoInfValue)}`);\r\n this.lines.push(`auto eternity ${this.parseAutobuyerProp(params.autoEterMode, params.autoEterValue)}`);\r\n this.lines.push(`while ep < ${this.format(params.finalEP)} {`);\r\n this.lines.push(` ${this.storedTreeStr}`);\r\n this.lines.push(\" studies respec\");\r\n this.lines.push(\" wait eternity\");\r\n this.lines.push(\"}\");\r\n }\r\n\r\n /**\r\n * Parses the parameter object into a script that sets autobuyer settings and then repeatedly eternities until a\r\n * target total eternity count is reached. Relevant props of object passed in:\r\n * @param {Boolean} params.treeNowait Nowait param to be passed into storeTreeData()\r\n * @param {String} params.treeStudies Study import param to be passed into storeTreeData()\r\n * @param {Number} params.crunchesPerEternity Number of crunches per eternity\r\n * @param {Decimal} params.eternities Eternity count at which to stop grinding and move on\r\n */\r\n templateGrindEternities(params) {\r\n this.lines.push(\"// Template: Grind Eternities\");\r\n this.lines.push(`notify \"Running Template Grind Eternities (to ${format(params.eternities)})\"`);\r\n this.storeTreeData(params);\r\n this.lines.push(this.storedTreeStr);\r\n this.lines.push(\"auto eternity 0 ep\");\r\n // We give it a bit of an extra \"safety factor\" of 5x in order to make sure it doesn't end up repeatedly going\r\n // to something like 1.6e308 due to poor rounding. The startingValue may fluctuate based on achievements, but\r\n // this can be a significant time save that we want to actually give the player if they have the e130 perk\r\n const gapToEternity = Number.MAX_VALUE / Currency.infinityPoints.startingValue.toNumber() * 5;\r\n this.lines.push(`auto infinity ${this.format(\r\n Decimal.pow(gapToEternity, 1 / params.crunchesPerEternity))} x highest`);\r\n this.lines.push(`wait eternities > ${this.format(params.eternities)}`);\r\n this.lines.push(\"auto eternity off\");\r\n }\r\n\r\n /**\r\n * Parses the parameter object into a script that sets autobuyer settings and then repeatedly infinities until a\r\n * target total infinity or banked infinity count is reached. If threshold is banked infinities, assumes that the\r\n * player also has the achievement that lets them bank. Relevant props of object passed in:\r\n * @param {Boolean} params.treeNowait Nowait param to be passed into storeTreeData()\r\n * @param {String} params.treeStudies Study import param to be passed into storeTreeData()\r\n * @param {Decimal} params.infinities Infinity count at which to stop grinding and move on\r\n * @param {Boolean} params.isBanked If the script should check for banked infinities instead of normal\r\n * infinities, calculating a modified threshold appropriately - we don't eternity repeatedly because this is\r\n * slower due to some resources needing to be rebuilt every eternity\r\n */\r\n templateGrindInfinities(params) {\r\n this.lines.push(\"// Template: Grind Infinities\");\r\n this.lines.push(`notify \"Running Template Grind Infinities (to ${format(params.infinities)})\"`);\r\n this.storeTreeData(params);\r\n this.lines.push(this.storedTreeStr);\r\n this.lines.push(\"auto eternity off\");\r\n this.lines.push(`auto infinity 5s`);\r\n if (params.isBanked) {\r\n const has191 = this.storedTreeObj.purchasedStudies.includes(TimeStudy(191));\r\n if (!has191) this.warnings.push(`TS191 is not reachable from an empty tree; banking anything in this template\r\n will require Achievement \"${Achievement(131).name}\"`);\r\n const bankRate = has191 ? 0.1 : 0.05;\r\n this.lines.push(\"// Note: This template attempts to get all the Banked Infinities within a single Eternity\");\r\n this.lines.push(`wait infinities > ${this.format(params.infinities.dividedBy(bankRate), 2)}`);\r\n this.lines.push(\"eternity\");\r\n } else {\r\n this.lines.push(`wait infinities > ${this.format(params.infinities, 2)}`);\r\n }\r\n }\r\n\r\n /**\r\n * Parses the parameter object into a script that respecs into a specified tree, unlocks a specified EC, changes\r\n * autobuyer settings, and then waits until the EC can be completed before triggering an eternity through the\r\n * automator. Relevant props of object passed in:\r\n * @param {Boolean} params.treeNowait Nowait param to be passed into storeTreeData()\r\n * @param {String} params.treeStudies Study import param to be passed into storeTreeData()\r\n * @param {Number} params.ec Numerical value denoting the EC to attempt\r\n * @param {Number} params.completions Minimum number of completions to wait for before moving onward\r\n * @param {Object} params.autoInfMode Multiplier or time-based mode for infinity autobuyer\r\n * @param {Object} params.autoInfValue Multiplier threshold or time for infinity autobuyer\r\n */\r\n templateDoEC(params) {\r\n this.lines.push(\"// Template: Complete Eternity Challenge\");\r\n this.lines.push(`notify \"Running Template Complete Eternity Challenge (EC${params.ec})\"`);\r\n // Force an eternity in order to buy the study tree first\r\n this.lines.push(\"eternity respec\");\r\n\r\n // Import the tree and the EC study, supplying errors as appropriate\r\n this.storeTreeData(params);\r\n this.lines.push(this.storedTreeStr);\r\n const tree = this.storedTreeObj;\r\n if (tree.ec === 0) {\r\n this.lines.push(`unlock ec ${params.ec}`);\r\n // Attempt to buy it, supplying an error if we can't actually reach it\r\n if (!tree.hasRequirements(TimeStudy.eternityChallenge(params.ec), true)) {\r\n this.warnings.push(\"Specified Study Tree cannot reach specified EC\");\r\n }\r\n } else if (tree.ec !== params.ec) this.warnings.push(\"Specified Study Tree already has a different EC unlocked\");\r\n\r\n // Apply autobuyer settings; we specifically want to turn auto-eternity off so that we can manually trigger the\r\n // prestige - otherwise, the autobuyer may end up preempting multiple completions\r\n this.lines.push(`auto infinity ${this.parseAutobuyerProp(params.autoInfMode, params.autoInfValue)}`);\r\n this.lines.push(`auto eternity off`);\r\n if (!TimeStudy.eternityChallenge(params.ec)) this.warnings.push(`Specified template EC does not exist`);\r\n this.lines.push(`start ec ${params.ec}`);\r\n\r\n if (params.completions > 5) this.warnings.push(`ECs cannot be completed more than ${formatInt(5)} times`);\r\n this.lines.push(`wait pending completions >= ${params.completions}`);\r\n this.lines.push(\"eternity\");\r\n }\r\n\r\n /**\r\n * Parses the parameter object into a script that sets autobuyer settings and then repeatedly infinities until a\r\n * target total infinity or banked infinity count is reached. Makes some assumptions on bank rate. Relevant props\r\n * of object passed in:\r\n * @param {Boolean} params.treeNowait Nowait param to be passed into storeTreeData()\r\n * @param {String} params.treeStudies Study import param to be passed into storeTreeData()\r\n * @param {Object} params.autoEterMode Multiplier or time-based mode for eternity autobuyer\r\n * @param {Object} params.autoEterValue Multiplier threshold or time for eternity autobuyer\r\n */\r\n templateUnlockDilation(params) {\r\n this.lines.push(\"// Template: Unlock Dilation\");\r\n this.lines.push(`notify \"Running Template Unlock Dilation\"`);\r\n this.storeTreeData(params);\r\n if (![231, 232, 233, 234].some(s => this.storedTreeObj.purchasedStudies.includes(TimeStudy(s)))) {\r\n this.warnings.push(\"Specified Study Tree cannot reach Dilation\");\r\n }\r\n this.lines.push(`auto infinity off`);\r\n this.lines.push(`auto eternity ${this.parseAutobuyerProp(params.autoEterMode, params.autoEterValue)}`);\r\n this.lines.push(`while total tt < ${this.format(TimeStudy.dilation.totalTimeTheoremRequirement)} {`);\r\n this.lines.push(` ${this.storedTreeStr}`);\r\n this.lines.push(\" studies respec\");\r\n this.lines.push(\" wait eternity\");\r\n this.lines.push(\"}\");\r\n this.lines.push(\"unlock dilation\");\r\n }\r\n\r\n get script() {\r\n return this.lines.join(\"\\n\");\r\n }\r\n}\r\n","/* eslint-disable import/newline-after-import, import/first, import/order */\r\nfunction mergeIntoGlobal(object) {\r\n for (const key in object) {\r\n if (key === \"default\") {\r\n // Skip default exports\r\n continue;\r\n }\r\n const value = object[key];\r\n const existingValue = window[key];\r\n if (existingValue !== undefined) {\r\n throw `Property ${key} already exists in global context`;\r\n }\r\n\r\n window[key] = value;\r\n }\r\n}\r\n\r\nimport * as Utils from \"./core/utils\";\r\nmergeIntoGlobal(Utils);\r\n\r\nimport * as GameDB from \"./core/secret-formula\";\r\nmergeIntoGlobal(GameDB);\r\n\r\n// This is a list of legacy stuff, please don't add\r\n// any more globals to the component files\r\n\r\nimport * as AutomatorBlockEditor from \"@/components/tabs/automator/AutomatorBlockEditor\";\r\nmergeIntoGlobal(AutomatorBlockEditor);\r\n\r\nimport * as AutomatorBlocks from \"@/components/tabs/automator/AutomatorBlocks\";\r\nmergeIntoGlobal(AutomatorBlocks);\r\n\r\nimport * as AutomatorTextEditor from \"@/components/tabs/automator/AutomatorTextEditor\";\r\nmergeIntoGlobal(AutomatorTextEditor);\r\n\r\nimport * as PerksTab from \"@/components/tabs/perks/PerksTab\";\r\nmergeIntoGlobal(PerksTab);\r\n\r\n// End of legacy stuff\r\n\r\nimport * as core from \"./core/globals\";\r\nmergeIntoGlobal(core);\r\n\r\nimport * as game from \"./game\";\r\nmergeIntoGlobal(game);\r\n","// TODO: remove before release\r\nexport function watchLatestCommit() {\r\n if (isLocalEnvironment()) {\r\n return;\r\n }\r\n\r\n const url = \"commit.json\";\r\n let current;\r\n\r\n function watch() {\r\n fetch(url, { method: \"GET\" })\r\n .then(response => response.json())\r\n .then(json => {\r\n if (json === undefined) {\r\n return;\r\n }\r\n current = current ?? json.sha;\r\n if (current === json.sha) {\r\n return;\r\n }\r\n\r\n Modal.message.show(\r\n \"Refresh the page (game will be saved), we've got new stuff: \" +\r\n `\"${json.message}\" - Redemption Dev Team`,\r\n {\r\n callback: updateRefresh,\r\n closeButton: true\r\n },\r\n 3\r\n );\r\n });\r\n }\r\n\r\n setInterval(watch, 60000);\r\n}\r\n","import \"drag-drop-touch\";\r\nimport \"./shims\";\r\nimport \"./merge-globals\";\r\nimport { browserCheck, init } from \"./game\";\r\nimport { DEV } from \"./env\";\r\nimport { watchLatestCommit } from \"./commit-watcher\";\r\n\r\nif (browserCheck()) init();\r\nif (DEV) watchLatestCommit();\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkIds[i]] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk\"] = self[\"webpackChunk\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], () => (__webpack_require__(2233)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["window","Async","_enabled","enabled","this","val","runForTime","fun","maxIter","config","batchSize","maxTime","t0","Date","now","remaining","j","Math","min","sleepPromise","ms","Promise","resolve","setTimeout","run","runResult","_run","then","i","async","progress","sleepTime","asyncEntry","asyncProgress","asyncExit","EventHub","constructor","_handlers","on","event","fn","target","handlers","undefined","push","offAll","Object","keys","filter","handler","dispatch","args","logic","GameUI","stats","countHandlers","eventHub","values","map","length","sum","ui","GAME_EVENT","UPDATE","GAME_TICK_BEFORE","GAME_TICK_AFTER","REPLICANTI_TICK_BEFORE","REPLICANTI_TICK_AFTER","DIMBOOST_BEFORE","DIMBOOST_AFTER","GALAXY_RESET_BEFORE","GALAXY_RESET_AFTER","SACRIFICE_RESET_BEFORE","SACRIFICE_RESET_AFTER","BIG_CRUNCH_BEFORE","BIG_CRUNCH_AFTER","ETERNITY_RESET_BEFORE","ETERNITY_RESET_AFTER","REALITY_RESET_BEFORE","REALITY_RESET_AFTER","SINGULARITY_RESET_BEFORE","SINGULARITY_RESET_AFTER","ARMAGEDDON_BEFORE","ARMAGEDDON_AFTER","MENDING_RESET_BEFORE","MENDING_RESET_AFTER","GLYPHS_EQUIPPED_CHANGED","GLYPHS_CHANGED","GLYPH_SACRIFICED","GLYPH_SET_SAVE_CHANGE","GLYPH_VISUAL_CHANGE","BREAK_INFINITY","FIX_INFINITY","INFINITY_DIMENSION_UNLOCKED","INFINITY_CHALLENGE_COMPLETED","INFINITY_UPGRADE_BOUGHT","INFINITY_UPGRADE_CHARGED","INFINITY_UPGRADES_DISCHARGED","BREAK_INFINITY_UPGRADE_BOUGHT","BREAK_INFINITY_UPGRADE_CHARGED","BREAK_INFINITY_UPGRADES_DISCHARGED","ACHIEVEMENT_UNLOCKED","CHALLENGE_FAILED","REALITY_UPGRADE_BOUGHT","REALITY_UPGRADE_TEN_BOUGHT","PERK_BOUGHT","BLACK_HOLE_UNLOCKED","BLACK_HOLE_UPGRADE_BOUGHT","EXPO_BLACK_HOLE_UPGRADE_BOUGHT","GAME_LOAD","OFFLINE_CURRENCY_GAINED","SAVE_CONVERTED_FROM_PREVIOUS_VERSION","REALITY_FIRST_UNLOCKED","AUTOMATOR_TYPE_CHANGED","AUTOMATOR_SAVE_CHANGED","AUTOMATOR_CONSTANT_CHANGED","PELLE_STRIKE_UNLOCKED","MENDING_UPGRADE_BOUGHT","WARP_UPGRADE_BOUGHT","CORRUPTION_UPGRADE_BOUGHT","RA_UPGRADE_BOUGHT","EXPO_BLACK_HOLE_UNLOCKED","ACHIEVEMENT_EVENT_OTHER","ENTER_PRESSED","ARROW_KEY_PRESSED","TAB_CHANGED","CLOSE_MODAL","Array","prototype","distinct","value","index","self","indexOf","wrap","number","max","range","offset","clamp","clampMax","clampMin","nextSiblingIndex","current","currentIndex","nextSibling","previousSiblingIndex","previousSibling","Decimal","sumReducer","accumulator","previous","add","prodReducer","mul","Number","maxReducer","a","b","copyFrom","decimal","DecimalCurrency","mantissa","exponent","copyToClipboard","el","document","createElement","body","appendChild","style","position","left","setAttribute","str","select","execCommand","ex","console","log","safeCall","String","capitalize","toLowerCase","replace","c","toUpperCase","splice","start","delCount","newSubStr","slice","abs","count","repeat","fill","first","predicate","last","mapToObject","keyFun","valueFun","out","idx","dimensionTiers","reduce","sumD","countWhere","item","clampMaxExponent","maxExp","fromMantissaExponent_noNormalize","toDecimal","valueOf","log4","randomElement","floor","random","Error","Set","find","some","every","compact","x","toBitmask","prev","mask","id","fromBitmask","bitIndices","isWhiteSpace","trim","isEND","threshold","GameEnd","endState","END_STATE_MARKERS","END_NUMBERS","FADE_AWAY","player","celestials","pelle","doomed","format","places","placesUnder1000","Notations","formatNE","formatInt","isPainful","name","formatWithCommas","toFixed","toNumber","formatFloat","digits","formatPostBreak","notation","isFinite","infinite","fromValue_noAlloc","sign","formatVerySmallNegativeDecimal","formatVerySmallDecimal","formatNegativeUnder1000","formatUnder1000","formatNegativeDecimal","formatDecimal","formatX","formatPow","formatPercents","formatPercentsD","formatRarity","endsWith","formatMachines","realPart","imagPart","parts","neq","eq","join","timeDisplay","TimeSpan","fromMilliseconds","toString","timeDisplayNoDecimals","toStringNoDecimals","timeDisplayShort","toStringShort","commaRegexp","decimalPointSplit","split","isSingular","amount","PLURAL_HELPER","Map","pluralDatabase","pluralize","word","plural","existingPlural","get","newWord","generatePlural","set","match","replaceWith","entries","quantify","formatType","quantifyInt","makeEnumeration","items","commaSeparated","includes","search","defineProperty","searchElement","fromIndex","TypeError","o","len","n","k","sameValueZero","y","isNaN","log10","LOG10E","log2","LOG2E","NodeList","forEach","callback","thisArg","call","arguments","kValue","array","apply","invert","obj","result","assign","varArgs","to","nextSource","nextKey","hasOwnProperty","writable","configurable","times","Guard","isNumber","_ms","other","isTimeSpan","setFrom","years","totalYears","days","totalDays","div","sub","hours","totalHours","minutes","totalMinutes","seconds","totalSeconds","milliseconds","totalMilliseconds","plus","minus","dividedBy","gt","lte","addCheckedComponent","addComponent","useHMS","isSpeedrun","lt","sec","formatHMS","s","toTimeEstimate","zero","maxValue","pow10","MAX_VALUE","minValue","MIN_VALUE","isDefined","message","CodeMirror","Vue","DEV","process","VUE_APP_DEV","STEAM","VUE_APP_STEAM","MAC","navigator","platform","NotImplementedError","super","GlobalErrorHandler","handled","cleanStart","onerror","getElementById","display","requestAnimationFrame","crash","stopGame","clearHandles","clear","GameKeyboard","disable","GameIntervals","stop","setInterval","clearInterval","clearTimeout","cancelAnimationFrame","initialized","Modal","show","source","deepFreeze","prop","reference","freeze","PRESTIGE_EVENT","DIMENSION_BOOST","ANTIMATTER_GALAXY","INFINITY","ETERNITY","REALITY","MENDING","DC","DM1","D0","D0_01","D0_1","D0_4","D0_55","D0_8446303389034288","D0_95","D0_965","D1","D1_0000109","D1_00038","D1_0004","D1_0025","D1_005","D1_007","D1_02","D1_0285","D1_2","D1_3","D2","D3","D4","D5","D6_66","D15","D16","D11111","D3E4","D2E5","D2E6","D5E7","D2E9","D2E25","D2E22222","D9_99999E999","D9_9999E9999","C1D1_1245","D2P30D0_61","pow","C2P30","C2P1024","C10P16000D3","E1","E2","E3","E5","E6","E8","E9","E10","E12","E15","E20","E25","E29","E30","E31","E36","E40","E43","E45","E50","E55","E58","E60","E63","E70","E75","E80","E90","E100","E140","E150","E160","E170","E175","E200","E250","E260","E280","E300","E308","E309","E310","E315","E320","E333","E349","E400","E450","E500","E530","E550","E600","E616","E650","E750","E850","E900","E925","E975","E1000","E1100","E1200","E1300","E1400","E1500","E1750","E1800","E1900","E2000","E2350","E2400","E2500","E2650","E2700","E2750","E2800","E2900","E3000","E3200","E3350","E4000","E5000","E6000","E8000","E9000","E10000","E10500","E11000","E11111","E11200","E12000","E13000","E14000","E16500","E17500","E18000","E20000","E22500","E23000","E27000","E28000","E30000","E45000","E54000","E60000","E100000","E110000","E164000","E200000","E201600","E208000","E210000","E300000","E320000","E500000","E1E6","E3E6","E6E6","E1E7","E2E7","E4E7","E6E7","E1E8","E1_5E12","E1E15","END","E1E9","E1E10","WARP_LIMIT","AUTOBUYER_MODE","BUY_SINGLE","BUY_10","BUY_MAX","AUTO_CRUNCH_MODE","AMOUNT","TIME","X_HIGHEST","AUTO_ETERNITY_MODE","AUTO_REALITY_MODE","RM","GLYPH","EITHER","BOTH","RELIC_SHARD","AUTO_MEND_MODE","RECENT_PRESTIGE_RESOURCE","ABSOLUTE_GAIN","RATE","CURRENCY","PRESTIGE_COUNT","TS171_MULTIPLIER","TS309_MULTIPLIER","GLYPH_MIME_TYPE","GlyphRarities","minStrength","darkColor","lightColor","darkHighContrast","lightHighContrast","GLYPH_BG_SETTING","AUTO","LIGHT","DARK","GLYPH_TYPES","FUNCTIONAL_GLYPH_TYPES","BASIC_GLYPH_TYPES","ALCHEMY_BASIC_GLYPH_TYPES","GLYPH_SYMBOLS","power","infinity","replication","time","dilation","effarig","reality","cursed","companion","amalgam","CANCER_GLYPH_SYMBOLS","ALTERATION_TYPE","ADDITION","EMPOWER","BOOST","BLACK_HOLE_PAUSE_MODE","NO_PAUSE","PAUSE_BEFORE_BH1","PAUSE_BEFORE_BH2","EXPO_BLACK_HOLE_PAUSE_MODE","GLYPH_SIDEBAR_MODE","INVENTORY_MANAGEMENT","FILTER_SETTINGS","SAVED_SETS","SACRIFICE_TYPE","AUTO_SORT_MODE","NONE","LEVEL","POWER","EFFECT","SCORE","AUTO_GLYPH_SCORE","LOWEST_SACRIFICE","EFFECT_COUNT","RARITY_THRESHOLD","SPECIFIED_EFFECT","EFFECT_SCORE","LOWEST_ALCHEMY","ALCHEMY_VALUE","AUTO_GLYPH_REJECT","SACRIFICE","REFINE","REFINE_TO_CAP","TIME_STUDY_PATH","ANTIMATTER_DIM","INFINITY_DIM","TIME_DIM","ACTIVE","PASSIVE","IDLE","TIME_STUDY_TYPE","NORMAL","ETERNITY_CHALLENGE","DILATION","TRIAD","MYRIAD","KOHLER_EXCLUSIVE","TS_REQUIREMENT_TYPE","AT_LEAST_ONE","ALL","DIMENSION_PATH","ALCHEMY_RESOURCE","REPLICATION","CARDINALITY","DIMENSIONALITY","INFLATION","ALTERNATION","EFFARIG","SYNERGISM","MOMENTUM","DECOHERENCE","EXPONENTIAL","FORCE","UNCOUNTABILITY","BOUNDLESS","MULTIVERSAL","UNPREDICTABILITY","SINGULARITY_MILESTONE_RESOURCE","SINGULARITIES","CONDENSE_COUNT","MANUAL_TIME","AUTO_TIME","SINGULARITY_MILESTONE_SORT","SINGULARITIES_TO_NEXT","CURRENT_COMPLETIONS","PERCENT_COMPLETIONS","FINAL_COMPLETION","MOST_RECENT","COMPLETED_MILESTONES","FIRST","LAST","IGNORED","SORT_ORDER","ASCENDING","DESCENDING","PROGRESS_STAGE","PRE_INFINITY","EARLY_INFINITY","REPLICANTI","EARLY_ETERNITY","ETERNITY_CHALLENGES","EARLY_DILATION","LATE_ETERNITY","EARLY_REALITY","TERESA","ENSLAVED","V","RA","IMAGINARY_MACHINES","LAITELA","PELLE","STD_BACKEND_URL","SPEEDRUN_SEED_STATE","UNKNOWN","FIXED","RANDOM","PLAYER","V_FLIP","HARD","SUPER","LOG10_MAX_VALUE","LN_SQRT_2_PI","PI","LOG10_2","LOG10_E","E","PI_2","bulkBuyBinarySearch","money","costInfo","alreadyBought","costFunction","firstCost","isCumulative","cumulative","nextCost","cantBuy","gte","quantity","purchasePrice","canBuy","MAX_SAFE_INTEGER","middle","baseCost","otherCost","newCost","totalCost","LinearMultiplierScaling","baseRatio","growth","scale","ratio","shift","logTotalMultiplierAfterPurchases","u","log1p","purchasesForLogTotalMultiplier","logMult","Lb","refineFinal","g","Lg","v","fVal","fDeriv","fD2","delta1","sqrt","g0","rhs","K1","K2","K3","h0","h1","g1","logTotalMultiplierAfterPurchasesBaseline","getCostWithLinearCostScaling","amountOfPurchases","costScalingStart","initialCost","costMult","costMultGrowth","preScalingPurchases","preScalingCost","ceil","scaling","postScalingCost","exp","findFirstInfiniteCostPurchase","upper","lower","mid","LinearCostScaling","resourcesAvailable","costMultiplier","maxPurchases","free","_purchases","_totalCostMultiplier","_totalCost","purchases","totalCostMultiplier","ExponentialCostScaling","param","_baseCost","_baseIncrease","baseIncrease","_costScale","costScale","_logBaseCost","_logBaseIncrease","_logCostScale","purchasesBeforeScaling","_purchasesBeforeScaling","scalingCostThreshold","updateCostScale","_precalcDiscriminant","_precalcCenter","calculateCost","currentPurchases","logBase","excess","logCost","getMaxBought","rawMoney","numberPerSet","logMoney","logPrice","newPurchases","discrim","pExcess","getContinuumValue","contValue","productLog","curr","permutationIndex","lexIndex","numPerm","remOrder","ordered","perm","rem","getHybridCostScaling","linCostScalingStart","linInitialCost","linCostMult","linCostMultGrowth","expInitialCost","expCostMult","expCostMultGrowth","normalCost","postInfinityAmount","logFactorial","LOGS","TABLE","NaN","lngamma","exp1m","xorshift32Update","state","fastRandom","normalDistribution","haveSpare","spare","mean","stdDev","mag","t","binomialGeneratorFC","stirlingBase","xr","binomialDistributionSmallExpected","numSamples","p","R","NxR","pdf","cdf","output","binomialDistribution","e","pNumber","expected","poissonDistribution","approximateVariance","round","binomialDistributionBTRD","poissonDistributionViaNormal","poissonDistributionSmallExpected","poissonDistributionPTRD","approxStdev","m","alpha","kU","kV","w","us","km","f","rho","logV","_nm","_nk","h","mu","sMu","iAlpha","vR","ik","depressedCubicRealRoots","k3","k1","k0","r","cbrt","innerDisc","po3","theta","acos","cos","quadraticRealRoots","k2","ktmp","disc","bdsc","cubicRealRoots","bo3a","bo3a2","coa","q","dcrr","testCRR","depressedQuarticRealRoots","k4","reducedSol","squareSol","solution","sr","mSol","sqrt2m","dInner","d1","d2","testDQRR","solveSimpleBiquadratic","A","B","C","D","F","solutions","xSol","yTmp","ySol","xTmp","AoB","CoB","testSSBQ","sols","e1","e2","AffineTransform","a00","a01","a10","a11","o0","o1","ot","Vector","transformedBy","translated","offX","offY","rotated","angle","rotation","scaled","withoutTranslation","sin","sc","dot","cross","asTranslate","asRotate","atan2","factor","copy","matrixTransform","tform","negative","normalized","right90","left90","rad","deg","unitFromRadians","Curve","derivative","secondDerivative","curvature","d","dd","dMag","shapeAt","direction","minimumDistanceTo","pDes","tMin","tMax","tGuess","tTol","EPSILON","iter","dist","distDeriv","distSecondDeriv","tStep","LinearPath","p0","p1","trimStart","dir","trimEnd","transformed","relativeSVG","createOffsetLine","t1","off","r0","r1","CubicBezier","p2","p3","nt2","t2","d3","reverse","shape0","shape1","dP","reversed","pathRotation","magSol","OffsetCurve","baseCurve","base","shape","LogarithmicSpiral","center","rate","unit","radius","ur","angleFromRadius","theta0","theta1","PiecewisePath","data","path","element","toSVG","initialPrefix","lines","part","curve","tol","minPieces","subdivide","shapeStart","shapeEnd","maxDepth","shapeMid","single","singleFit","fitCurveSection","tMid","err","ExponentialMovingAverage","maxOutliers","highOutlierThreshold","lowOutlierThreshold","outliers","_average","average","addValue","absValue","absAverage","highOutlier","lowOutlier","outlier","Effect","effect","cap","condition","isCustomEffect","isFunction","isDecimal","isConstant","createProperty","addGetter","property","conditionProperty","uncappedEffectValueProperty","capProperty","effectValueProperty","effectValue","specializedProperty","capValue","uncappedEffectValue","isEffectConditionSatisfied","isEffectActive","canBeApplied","effectOrDefault","defaultValue","applyEffect","applyFn","Effects","effectSources","applyEffectsOf","product","foundLast","reversedSources","reducer","effectSource","plusEffectOf","plusEffectsOf","minusEffectOf","minusEffectsOf","timesEffectOf","timesEffectsOf","resultMantissa","resultExponent","fromMantissaExponent","dividedByEffectOf","dividedByEffectsOf","powEffectOf","powEffectsOf","GameMechanicState","effectCondition","_config","effects","key","nested","id2","registerEvents","events","gameData","mapGameData","accessor","BitUpgradeState","bits","modBits","isUnlocked","Boolean","canBeUnlocked","onUnlock","unlock","PurchasableMechanicState","currency","isAffordable","cost","isAvailableForPurchase","isRebuyable","isBought","canBeBought","purchase","subtract","onPurchased","update","SetPurchasableMechanicState","has","delete","BitPurchasableMechanicState","bitIndex","RebuyableMechanicState","isCapped","boughtAmount","creditsEverClosed","PlayerProgress","mendingUnlocked","predictableRandom","randomSymbol","fromCharCode","wordCycle","list","noBuffer","tick","mod5","largeTick","blendWords","randomCrossWords","maxWordLen","bufferSpace","frac","randomIndex","second","substring","makeGarbledTemplate","input","text","garbled","charCodeAt","processText","unmodified","garbledTemplate","raw","wordShift","modified","glyphTypes","symbol","color","primaryEffect","alchemyResource","hasRarity","EffarigUnlock","MendingUpgrade","canCustomize","fixedSymbolColor","glyphs","createdRealityGlyph","isFlipped","cosmeticGlyphs","music","TeresaUnlocks","shop","blob","preventBlur","Themes","available","PERK_FAMILY","ANTIMATTER","AUTOMATION","ACHIEVEMENT","perks","firstPerk","label","family","description","layoutPosList","startAM","bumpCurrency","Currency","antimatter","bumpTo","startIP1","infinityPoints","startIP2","startEP1","eternityPoints","automatorPoints","shortDescription","startEP2","startEP3","startTP","Enslaved","isRunning","antimatterNoReset","studyPassive","Pelle","isDoomed","autounlockEU1","autounlockEU2","autounlockDilation1","MendingMilestone","two","isReached","autounlockDilation2","autounlockDilation3","autounlockTD","autounlockReality","bypassIDAntimatter","bypassTGReset","bypassECDilation","bypassEC1Lock","bypassEC2Lock","bypassEC3Lock","bypassEC5Lock","autocompleteEC1","autocompleteEC2","autocompleteEC3","studyActiveEP","studyIdleEP","studyECRequirement","studyECBulk","retroactiveTP1","retroactiveTP2","retroactiveTP3","retroactiveTP4","autobuyerDilation","autobuyerFasterID","autobuyerFasterReplicanti","autobuyerFasterDilation","ttBuySingle","ttFree","ttBuyMax","achievementGroup1","achievementGroup2","achievementGroup3","achievementGroup4","achievementGroup5","perkConnections","groups","connections","perk","connectedPerks","directConnections","indirectConnections","groupPerk","connectedPerk","render","_vm","_h","$createElement","_c","_self","staticClass","class","validityClass","attrs","inputType","domProps","displayValue","handleBlur","handleFocus","handleInput","staticRenderFns","props","autobuyer","type","required","isValid","isFocused","computed","typeFunctions","functions","AutobuyerInputFunctions","methods","updateActualValue","actualValue","areEqual","copyValue","updateDisplayValue","formatValue","parsedValue","tryParse","SecretAchievement","Notation","scientific","parseFloat","replaceAll","fromString","float","int","parseInt","isInteger","component","automatorTemplates","paramTypes","isValidString","validImport","TimeStudyTree","isValidImportString","preset","validPreset","timestudy","presets","boolDisplay","scripts","inputs","prompt","warnings","RealityUpgrade","Perk","Achievement","automator","categoryNames","commands","keyword","category","syntax","examples","sections","header","BlackHole","filterText","glyphFilter","stText","spaceTheorems","otherAutomatorPoints","realities","templates","glyphCosmeticSets","cards","sus","oldCurrency","pipe","pipe2","trigram","arrow","arrow2","arrow3","integral","numbers","blocks","shapes","chess","planet","musical","recycle","dice","hazard","celestial","alchemy","blob2","star","star2","gem","heiroglyph","paperclip","snake","egyptNumber","egyptWeather","limbs","animal","GlyphCombiner","multiply","addExponents","multiplyDecimal","glyphEffects","timepow","bitmaskIndex","isGenerated","singleDesc","totalDesc","shortDesc","level","strength","formatEffect","formatSingleEffect","combine","enabledInDoomed","enabledInDoomedWithlvl25","timespeed","genericDesc","GlyphAlteration","isEmpowered","alteredColor","getEmpowermentColor","alterationType","timeetermult","sacrificeBoost","getBoostColor","timeEP","isAdded","conversion","formatSecondaryEffect","getAdditionColor","dilationDT","dilationgalaxyThreshold","prod","capped","dilationTTgen","dilationpow","replicationspeed","replicationpow","replicationdtgain","formatSingleSecondaryEffect","replicationglyphlevel","infinitypow","infinityrate","infinityIP","softcap","Effarig","eternityCap","infinityinfmult","powerpow","powermult","powerdimboost","powerbuy10","effarigrm","Ra","unlocks","effarigGlyphIncreaseImCap","effarigglyph","effarigblackhole","effarigachievement","effarigforgotten","effarigdimensions","effarigantimatter","timeshardpow","cursedgalaxies","curseddimensions","cursedtickspeed","cursedEP","reciprocal","realityglyphlevel","realitygalaxies","realityrow1pow","realityDTglyph","companiondescription","cursedCount","Glyphs","active","companionEP","strengthToRarity","glyphSacrifice","added","isDisabled","sac","GlyphSacrificeHandler","maxSacrificeForEffects","sacCap","nextDistantGalaxy","nextGalaxyText","uncapGlyphSacEffects","rebuyable","imaginaryRebuyables","ra","upgrades","formatCost","imaginaryUpgrades","dmdScaling","requirement","four","relicShards","hasFailed","checkRequirement","checkEvent","records","totalAntimatter","isDisabledInDoomed","glyphWeights","gainedGlyphLevel","actualLevel","ImaginaryUpgrades","totalRebuyables","MachineHandler","uncappedRM","simulatedRealityCount","totalSinglePurchase","EternityChallenge","Tickspeed","perSecond","eight","requirementChecks","maxID1","canLock","Laitela","maxAllowedDimension","Singularity","singularitiesGained","darkEnergy","SingularityMilestone","autoCondense","Infinity","ImaginaryUpgrade","Replicanti","galaxies","total","totalTachyonGalaxies","maxStudies","continuumValue","lockEvent","matterExtraPurchaseFactor","noContinuum","imaginaryMachines","maxGlyphs","Tesseracts","effectiveCount","slowestBH","laitela","singularities","activeWithoutCompanion","TimeStudy","rebuyables","getAdjustedGlyphEffect","textTemplate","realityUpgrades","eternity","noRG","noEternities","noInfinities","gainedAutoAchievements","Achievements","invalidEquippedGlyphs","hasValidGlyphInInventory","inventory","bypassLock","infinitiesBanked","gainedInfinities","completions","BreakInfinityUpgrade","infinitiedGen","chargedEffect","timeTheorems","one","TimeDimension","equals","eternities","continuousTTBoost","epmultUpgrades","EternityUpgrade","epMult","availableGlyphs","equipped","availableSlots","activeSlotCount","activeList","countValuesFromBitmask","allGlyphs","Time","timeSinceBlackHole","realityMachines","timeShards","thisReality","bestReality","gainedRealityMachines","bestEP","MultiplierTabIcons","DIMENSION","tier","tierText","PURCHASE","CHALLENGE","icon","textColor","UPGRADE","CONVERT_FROM","DIVISOR","DIMBOOST","TICKSPEED","GALAXY","INFINITY_POWER","IPOW_CONVERSION","TIME_STUDY","TACHYON_PARTICLES","GENERIC_GLYPH","SPECIFIC_GLYPH","BLACK_HOLE","GAMESPEED","GENERIC_TERESA","GENERIC_ENSLAVED","GENERIC_V","GENERIC_RA","ALCHEMY","BH_PULSE","GENERIC_LAITELA","SINGULARITY","MENDINGMILESTONE","IAP","CORRUPTION","CORRUPTION_BONUS","SOFTCAP","AM","displayOverride","productionPerSecond","multValue","isActive","overlay","effarigAM","powValue","ad1","AntimatterDimension","baseProd","totalAmount","multiplier","isProducing","_player","isInfinityUnlocked","infinityData","infinitied","infinities","isEternityUnlocked","isRealityUnlocked","isMendingUnlocked","hasFullCompletion","fullGameCompletions","break","areUnlocked","ec12","realityUnlocked","NormalChallenges","all","isCompleted","InfinityChallenges","mends","MultiplierTabHelper","activeDimCount","AntimatterDimensions","ad","InfinityDimensions","TimeDimensions","td","globalGalaxyMult","InfinityUpgrade","galaxyBoost","InfinityChallenge","reward","PelleUpgrade","galaxyPower","PelleRifts","decay","milestones","improvedECRewards","vReward","specialGlyphEffect","galBoostPoints","decomposeTickspeed","effectiveBaseGalaxies","galFrac","tickFrac","baseMult","NormalChallenge","perGalaxy","totalUpgrades","logPerGalaxy","baseFrac","tickspeed","achievementDimCheck","ach","dimStr","substr","charAt","timeStudyDimCheck","ts","ICDimCheck","ic","ECDimCheck","ec","blackHoleSpeeds","currBH","BlackHoles","bh","bh1","bh2","avgBH","dutyCycle","pluralizeDimensions","dims","evenDimNC12Production","nc12Pow","maxTier","oddDimNC12Production","actualNC12Production","multInNC12","dim","isNC12ProducingEven","AD","singleMult","nc12Prod","mult","highestDim","dilationEffect","baseEff","DilationUpgrade","dilationPenalty","multDilation","isDilated","getPurchases","continuumActive","bought","buyTenMultiplier","dimboost","DimBoost","multiplierToNDTier","sacrifice","Sacrifice","totalBoost","achievementMult","achievement","allMult","dimMults","totalMult","infinityUpgrade","totalTimeMult","thisInfinityTimeMult","unspentIPMult","allPow","dimPow","breakInfinityUpgrade","totalAMMult","currentAMMult","slowestChallengeMult","infinitiedMult","infinityPower","fakeValue","powerConversionRate","infinityChallenge","timeStudy","eternityChallenge","glyph","totalPow","VUnlocks","adPow","AlchemyResource","dimensionality","force","basePow","momentumValue","inflationPow","inflation","inflated","unlockGlyphAlchemy","antimatterDimensionMult","paradox","iap","ShopPurchase","dimPurchases","currentMult","allDimPurchases","ShopPurchaseData","totalSTD","effectNC","formatFn","num","chall2Pow","chall3Pow","totalNC12","nerfIC","postC4Tier","nerfV","nerfCursed","nerfPelle","PelleStrikes","hasStrike","nerfSHardV","isSuperRunning","DT","getDilationGainPerSecond","getGameSpeedupForDisplay","dtGain","dtGainPelle","flatDilationMult","amplifierDT","dtMult","repliDT","ra1","dilatedTime","autoTP","ra2","peakGamespeedDT","mendingMilestones","dilatedTimePurchases","gamespeed","ignoresNerfPowers","effarig65","relicShardBoost","isBase","gainedEternities","amplifierEter","teresa90","realitiesBoostInfinityAndEternityProduction","corruptionPenalties","prestigeLimits","dimLimits","preNerf","postNerf","timeCompression","hiddenFour","hiddenEight","galWeak","hiddenThree","hiddenSix","compGlyphs","rarity","hiddenSeven","tickExtension","atomDilution","toD","hiddenFive","repSing","rep","sing","dm","presGain","soF","ttcost","ttgen","tdpow","alchemyNormalcy","secondaryRejection","EP","Player","canEternity","gainedEternityPoints","eternityUnlocked","thisEternity","maxIP","gainedInfinityPoints","recursion","IP","divisor","eternityUpgrade","GlyphEffect","getSecondaryGlyphEffect","realityUpgrade","vacuum","EPPurchases","nerfTeresa","Teresa","nerfCorruptions","mending","corruption","corruptionChallenge","corruptedMend","nerfSoftcap","GalaxyGenerator","replicanti","rg","extra","ReplicantiUpgrade","tachyon","alternation","isStoringRealTime","getGameSpeedupFactor","avgSpeed","isAutoReleasing","avgString","seenAlteredSpeed","blackHoleCurr","arePaused","blackHoleAvg","achievementBH","pulsing","autoReleaseSpeed","canRelease","singularity","gamespeedFromSingularities","timeSpeedMult","chargingBH","autoPulseTime","isStoringGameTime","invertedBH","blackHoleNegative","areNegative","nerfLaitela","thisRealityRealTime","expoBlackHoles","ExpoBlackHole","CorruptionUpg","CorruptionData","recordScore","nerfCorruptions2","general","ipGain","totalEffect","singleEffect","ic4Pow","mults","amplifierInf","infinitiedPow","ID","InfinityDimension","getMult","powerMultiplier","baseAmount","basePurchase","HARDCAP_PURCHASES","_powerMultiplier","tesseractPurchase","infinityGlyphSacrifice","GlyphSacrifice","powPurchase","replicantiMult","maxActiveDim","idMultEP","idMultEternities","idMultICRecords","eu1","eu2","eu3","tickRate","activeDims","dimString","imaginaryUpgrade","decayMult","powerConversion","v50","vAchMilestone2AffectsIDsAndTDs","powerGalaxies","canCrunch","thisInfinity","maxAM","ipMult","dilationUpgrade","ipMultDT","unlockPelleGlyphEffects","exponential","realityMachinesBoostIpAndEpGain","IPPurchases","totalReplicantiSpeedMult","replicantiCap","preReality","baseEffect","alteredEffect","amplifierRep","realityUpgrade1","realityUpgrade2","replicantiPurchases","TP","baseTPStr","tachyonParticles","baseTP","tachyonGainMultiplier","tachyonGain","amplifierTP","dilationGlyphSacrifice","nerfEnslaved","tachyonNerf","tickDilation","ag","tg","pelleTickspeedPow","tickspeedPower","tickspeedUpgrades","purchased","totalTickBought","totalTickGained","TD","timeGlyphSacrifice","tdMultAchs","tdMultTheorems","tdMultRealTime","tdMultReplicanti","chaos","corruptions","recordCorruptions","bGLwC","isCorrupted","nextCorrupted","corruptedFragments","recordCorruptedFragments","corruptNext","calcBaseScore","corruptionScores","finalScore","calcScore","scoreCalc","partialSum","CorruptionUpgrade","hostScore","cu20","multiplierTabValues","dynamicGenProps","propList","toCopy","append8","getProps","resource","newProps","multiplierTabTree","AM_total","AD_total","ID_total","TD_total","IP_total","IP_base","EP_total","EP_base","TP_total","DT_total","tickspeed_total","tickspeed_upgrades","tickspeed_galaxies","infinities_total","eternities_total","gamespeed_total","replicanti_total","hostScore_total","allGamespeed","unshift","dimTypes","singleRes","targetedEffects","checkFn","res","removedRegexes","removedProps","regex","AD_infinityPower","ID_purchase","ID_purchase_8","TD_purchase","TD_purchase_8","eff","propStr","ID_eternityUpgrade","TD_eternityUpgrade","normalAchievements","NewsHandler","uniqueTickersSeen","purchasedBoosts","isOnlyActiveChallenge","getSacrificeDescription","lastUpdate","thisInfinityRealTime","noSacrifice","infinityUpgrades","size","multipliers","AchievementTimers","marathon1","check","Autobuyer","antimatterDimension","zeroIndexed","concat","hasMaxedInterval","Autobuyers","upgradeable","bulkCap","hasMaxedBulk","bestRunIPPM","challengeSum","isInAnyChallenge","completed","NUMBER_MAX_VALUE","totalTimePlayed","recip","nextBoost","infinityChallengeSum","onlyAD8","EternityMilestone","recentInfinities","infinitiesTotal","bulk","onlyAD1","EternityChallenges","marathon2","noAD1","studies","IPMultPurchases","buyTenMult","automatorUnlocked","recentEternities","interval","duration","Perks","RealityUpgrades","allBought","noAD8","inventoryList","noAM","noPurchasedTT","getGlyphEffectsFromBitmask","isPermanent","ep","totalPetLevel","charged","noTriads","alchemyResourceCap","AlchemyResources","SingularityMilestones","displayId","antimatterDimAutobuyers1","antimatterDimAutobuyers2","ECs","GAME_END","removeAdditionalEnd","six","warped","secretAchievements","pain","permanent","emojiGalaxies","matter","bestInfinity","bestEternity","singleTickspeed","isMusicGlyph","Tab","statistics","isOpen","perkTreeDragging","achievements","normal","secret","awayProgressTypes","infinityUnlocked","replicantiUnlocked","dilationUnlocked","appearsInAwayModal","awayOption","classObjectReference","showOption","raUnlock","pets","teresa","forcedName","enslaved","isIMUnlocked","catchupResources","requiredStage","openH2pEntry","emphasizeEnd","fraction","vUnlockProgress","vAchievementUnlock","db","GameDatabase","mainUnlock","vUnlockLegendLabel","complete","pelleStarPosition","pelleCenter","pelleStarConnector","fillColor","isOverfill","pelleSize","pathStart","pathEnd","fromPolarEndpoints","pathPadStart","pathPadEnd","drawOrder","CELESTIAL_NAV_DRAW_ORDER","NODE_OVERLAYS","noBG","FILL_STATE","LOCKED","FILL","DRAIN","OVERFILL","riftFillStage","rift","hasGalaxyGenerator","reducedTo","NODE_BG","CONNECTORS","NODES","CANVAS_OVERLAY","Positions","teresaPerkPointShop","effarigShop","effarigRealityUnlock","effarigNode","enslavedReality","enslavedGlyphLevel","enslavedGlyphRarity","vUnlockAchievement","vAchievement0","vAchievement1","vAchievement2","vAchievement3","vAchievement4","vAchievement5","raReality","raPetTeresa","raPetEffarig","raPetEnslaved","raPetV","laitelaFirstCenter","laitelaFirstLeft","laitelaFirstRight","laitelaSecondCenter","laitelaSecondLeft","laitelaSecondRight","laitelaThirdCenter","pelleUnlock","pelleAchievementRequirement","pelleVacuum","pelleDecay","pelleChaos","pelleRecursion","pelleParadox","pelleGalaxyGen","pelleRiftFill","textAngle","fillType","visibleCheck","progressFn","legendFn","percentFn","incompleteClass","nodeFill","connectorFill","realPercentage","percentage","visible","node","clickAction","ring","rMajor","forceLegend","legend","diagonal","horizontal","connector","fillStates","riftNames","angles","riftFillElements","celestialNavigation","completeClass","rMinor","pLog10","pouredAmount","price","hideWhenCompleted","rm","runCompleted","alwaysShowLegend","connectCircles","completeWidth","incompleteWidth","rs","am","bgDrawOrder","ip","goal","gapCenterDeg","gapDeg","glyphLevel","gapAngleDeg","bestRarity","glyphStrength","symbolOffset","VRunUnlocks","isStacked","unlocked","effarigUnlock","enslavedUnlock","vUnlock","DarkMatterDimension","unlockUpgrade","baseRMCap","symbolScale","realityName","realityMachineCap","hasIDs","amGoal","upgrade","difficultyTier","fastestCompletion","dmdText","adjustedStartingCost","darkMatter","singularityGoal","auto","allGalaxies","isPossible","imCost","laitelaProgress","laitelaString","prePelleRows","generatedGalaxies","generationCap","riftCaps","galaxyGeneratorThreshold","brokenRifts","prevRift","nextRift","currRiftProp","sigilProgress","riftProgress","generatorProgress","SigilAttributes","canvasLayer","scaledPos","att","reflectAcrossVertical","vec","sigilShape","colorOverride","pos","end","initAngle","finalAngle","init","weight","circTop","circMid","circBot","topC","top1","top2","top3","arm1","arm2","arm3","lowC","low1","botC","bot1","bot2","Shapes","botCircR","botH","lowH","circUp","circDown","vert2","vertC","vertDiag1","vert1","vertDiag2","vertDiag3","topH","circTopUp","circTopDown","toReflect","arcSegments","arcIndex","finalSigil","draw","initRadius","finalRadius","thickness","layer","glow","galaxyIcon","alchemyResources","isBaseResource","uiOrder","unlockedAt","reagents","rawValue","effarigUnlocks","adjuster","quotes","unlockWeights","view","tabs","openGlyphWeights","unlockGlyphFilter","showSidebarPanel","setSaves","unlockSetSaves","unlockRun","mend","hintsUnlocked","hint","ec1","feelEternity","ec6","c10","secretStudy","storedTime","challengeCombo","glyphHints","currencyLabel","pelleGalaxyGeneratorUpgrades","additive","galaxyGeneratorGalaxies","multiplicative","antimatterMult","IPMult","EPMult","expWithIncreasedScale","base1","base2","incScale","coeff","pelleUpgrades","glyphLevels","infConversion","dimBoostAutobuyer","keepAutobuyers","galaxyAutobuyer","tickspeedAutobuyer","keepInfinityUpgrades","dimBoostResetsNothing","keepBreakInfinityUpgrades","IDAutobuyers","keepInfinityChallenges","galaxyNoResetDimboost","replicantiAutobuyers","replicantiGalaxyNoReset","eternitiesNoReset","timeStudiesNoReset","replicantiStayUnlocked","keepEternityUpgrades","TDAutobuyers","keepEternityChallenges","dilationUpgradesNoReset","tachyonParticlesNoReset","rebuyableCost","increment","perkShop","otherReq","costCap","perkShopIncrease","rmMult","bulkDilation","autoSpeed","musicGlyph","fillMusicGlyph","GameCache","glyphInventorySpace","chunkGain","memoryGain","secondaryMemoryChunkGain","requiredUnlock","rawMemoryChunksPerSecond","perkPoints","improvedChunkGains","ln","memoryProductionMultiplier","teresaXP","ten","primeShardsGained","shardsGained","softcapedShardGained","unlockPelleContinuum","effarigXP","enslavedXP","vXP","memories","primeAnswer","imaginaryBoosts","generateMemChunksOutOfRasReality","raXP","totalContinuum","unlockDMD","laitelaXP","realityShards","remnants","pelleXP","pet","displayIcon","disabledByPelle","chargedInfinityUpgrades","alteredGlyphs","unlockDilationStartingTP","extraGlyphChoicesAndRelicShardRarityAlwaysMax","glyphEffectCount","relicShardGlyphLevelBoost","maxGlyphRarityAndShardSacrificeBoost","maxRarityBoost","blackHolePowerAutobuyers","improvedStoredTime","gameTimeAmplification","levelCap","realTimeCap","peakGamespeed","allGamespeedGlyphs","applyGamespeed","instantECAndRealityUpgradeAutobuyers","autoUnlockDilation","totalTimeTheoremRequirement","unlockHardV","ttGen","theoremBoostFactor","memoryChunks","autoPrestige","achievementTTMult","achievementPower","imaginaryMachinesSetToCap","chargedBreakInfinityUpgrades","retroactiveTeresaRealityReward","postWarpRealityMachineBoost","alchSetToCapAndCapIncrease","passiveRelicShardGain","harshInstabilityDelay","maxGlyphRarityIncrease","effarigMendUnlock","uncapGamespeed","uncap8TdPurchaseMult","unlock3rdBH","twinTachyonGalaxyCapIncrease","gamespeedGalaxyBoost","freeTickspeedSoftcapDelay","improvedIpowConversion","unlockSHardV","repIncreasesAchMult","totalSTBoostTTGen","unlockMyriads","achMultBaseImprovementV","raRealUncapDimboost","rautobuyers","upgradesDontSpendMems","remembranceBoost","raNoReset","remembranceAlwaysActiveAndShopUnlock","imaginaryBoostsRa","freeDimBoosts","improvedPetUpgrades","mendingPointsGainMult","increaseDarkMatterCap","annihilationDarkEnergyBoost","totalAntimatterDarkMatterBoost","infinityPowerConversionBoost","passiveAnnihilationGen","continuumBoost","increaseSingLimits","dmdAuto1","dmdAuto2","continuumAffectsIDsAndTDs","unlockMultiversalDimensions","pelleAutobuyers","boostMVRGain","remWithoutGG","unlockPelleTPMult","exitDoom","unlockPelleIPAndEPMult","boostMemoryGain","pelleRarityBoost","omegaScalingBuff","Hostility","DimLimitCorruptionImprovementPelle","kohlersRealmUnlock","remainingLevels","remainingText","kohlerUnlocked","kohlerName","pelleRifts","drainResource","additionalEffects","strike","totalFill","percentageToFill","challenge","chall","goalAtCompletions","gainedCompletionStatus","totalCompletions","galaxyGeneratorText","spendable","totalMilestones","spent","rifts","percentageSpent","onStateChange","updateTimeDimensionCosts","LAITELA_UPGRADE_DIRECTION","SELF_BOOST","BOOSTS_MAIN","BOOSTS_LAITELA","singularityMilestones","continuumMult","increaseThreshold","limit","effectFormat","upgradeDirection","darkMatterMult","darkEnergyMult","darkDimensionCostReduction","singularityMult","darkDimensionIntervalReduction","improvedAscensionDM","POWER_DM_PER_ASCENSION","ascensionIntervalScaling","darkDimensionAutobuyers","ascensionAutobuyers","darkAutobuyerSpeed","realityDEMultiplier","improvedSingularityCap","intervalCostScalingReduction","darkFromTesseracts","multFromInfinitied","dilatedTimeFromSingularities","darkFromGlyphLevel","darkFromTheorems","dim4Generation","darkFromDM4","annihilationAutobuyer","theoremPowerFromSingularities","darkFromGamespeed","glyphLevelFromSingularities","darkFromDilatedTime","tesseractMultFromSingularities","pelleStrikes","requirementDescription","penaltyDescription","rewardDescription","unlockReality","epGen","undo","startEU","eternityUpgrades","destroyerQuotes","preMend","effarigQuotes","initial","completeInfinity","showCelestialName","completeEternity","completeReality","enslavedQuotes","startRun","hintUnlock","ec6C10","laitelaQuotes","firstDestabilize","secondDestabilize","firstSingularity","thirdDMD","annihilation","halfDimensions","finalRowIM","increasedMilestoneScaling","fullDestabilize","flashCelestial","primaryBackground","cel","destroyer","eternal","lesser","deities","assured","battle","battles","cluster","confusing","dance","filament","forever","inevitable","mandate","misconstrue","shame","unseen","unbroken","sycophant","tired","usurper","pride","forgotten","paramount","pelleQuotes","arm","strike1","strike2","strike3","strike4","strike5","background","galaxyGeneratorUnlock","galaxyGeneratorRifts","galaxyGeneratorPhase1","galaxyGeneratorPhase4","raQuotes","realityEnter","teresaStart","teresaLate","effarigStart","effarigLate","enslavedStart","enslavedLate","vStart","vLate","remembrance","midMemories","lateMemories","maxLevels","maxTotalPetLevel","teresaQuotes","vQuotes","realityComplete","achievement1","achievement6","hex1","runUnlocks","achievement12","achievement24","hex3","allAchievements","kohlerQuotes","postWarp","kohler","V_REDUCTION_MODE","SUBTRACTION","DIVISION","maxDT","maxReplicanti","currentValue","formatRecord","shardReduction","maxShardReduction","mode","tiers","perReductionStep","reductionStepSize","isHard","isSuperHard","noTriad305","noTriad307","fastAutoEC","fromMinutes","autoAutoClean","vAchMulti","vAchRa","vKeep","MathOperations","right","divide","operations","dropTo","startingValue","reset","NumberCurrency","nextIC","notifyICUnlock","cheapestAntimatterAutobuyer","TabNotification","newAutobuyer","clearTrigger","tryTrigger","productionPerRealSecond","totalInfinityPoints","maxEP","bestEPSet","copyForRecords","totalEternityPoints","theorem","maxTheorem","TimeTheorems","calculateTimeStudiesCost","respecTimeStudies","TimeTheoremPurchaseType","newValue","hardcapRM","addedThisReality","maxRM","thisMend","RMSet","maxiM","currentIMCap","maxDarkMatter","DarkMatterDimensions","galaxyGenerator","spentGalaxies","mendingPoints","corruptionFragments","raPoints","implemented","weakenScalingRebuyable","incXpGainRebuyable","raUpgrades","weakenTeresaScaling","weakenEffarigScaling","weakenEnslavedScaling","weakenVScaling","weakenRaScaling","weakenLaitelaScaling","weakenPelleScaling","incTeresaXPGain","incEffarigXPGain","incEnslavedXPGain","incVXPGain","incRaXPGain","incLaitelaXPGain","incPelleXPGain","teresaUpgrade","effarigUpgrade","enslavedUpgrade","vUpgrade","raUpgrade","laitelaUpgrade","pelleUpgrade","resources","galaxyGeneratorUpgrades","strikes","descriptions","navigation","navSigils","specialInfinityGlyphDisabledEffectText","eternityChallenges","goalIncrease","realTime","scrambleText","pelleGoal","restriction","checkRestriction","formatRestriction","failedRestriction","dimensionMultDecrease","powerDM","pelleGoalIncrease","tickSpeedMultDecrease","infinityChallenges","isQuickResettable","unlockAM","dimboostMult","lastBuyTime","normalChallenges","legacyId","lockedAt","bonusMult","incBonusText","desc","challenges","changelog","date","info","confirmationTypes","option","dimensionBoosts","isVisible","unl","canSacrifice","credits","roles","people","name2","discordRichPresence","possessiveName","activityToken","currentStageName","currentStage","EFFARIG_STAGES","entropy","token","remainingCompletions","stages","hasReached","mainResource","resourceList","eternityChalls","eterc1","displayName","stored","incrementSC","purchaseCap","pellePurchaseCap","reachedCap","pelleOnly","dilationUpgrades","nonInteger","galaxyThreshold","getTachyonGalaxyMult","nextEffect","doubleGalaxies","rep10","ndMultDT","timeStudySplit","ttGenerator","galaxyMultiplier","galaxyThresholdPelle","eternityMilestones","autobuyerIPMult","pelleUseless","autobuyerReplicantiGalaxy","givenByPelle","bigCrunchModes","autoEP","EPmin","getOfflineEPGain","em200","getEternitiedMilestoneReward","fromHours","autoEternities","em1000","getInfinitiedMilestoneReward","autoInfinities","options","offlineProgress","effectText","activeCondition","autoIC","keepBreakUpgrades","autobuyMaxGalaxies","unlockReplicanti","autobuyerID1","autobuyerID2","autobuyerID3","autobuyerID4","autobuyerID5","autobuyerID6","autobuyerID7","autobuyerID8","autoUnlockID","unlockAllND","replicantiNoReset","autobuyerReplicantiChance","autobuyerReplicantiInterval","autobuyerReplicantiMaxGalaxies","autobuyerEternity","eterPreCap","multPreCap","eterPostCap","mult1","mult2","multPostCap","dilationTimeStudies","ttRequirement","isInCelestialReality","tsRequirement","ecRequirement","isFullyCompleted","timeDimension","ecTimeStudies","reqType","secondary","forbiddenStudies","thisInfinityMult","scaledInfinity","cappedInfinity","passiveIPMult","isEffarigLimited","normalValue","normalTimeStudies","firstPart","secondPart","reciprocate","oldVal","newVal","totalBoosts","STCost","requiresST","averageRealTimePerEternity","perkEffect","boughtGalaxyCap","deltaTime","thisMendRealTime","baseExp","Exponent","answer","timeStudies","h2p","tags","tab","GameSaveSerializer","startingString","savefile","endingString","updateRate","blackHole","_baseCostMultiplier","shiftStart","warpStart","scaleStart","Galaxy","remoteStart","scalingThreeStart","WarpUpgrade","bigCrunch","_unlockRequirement","_costMultiplier","_costIncreaseThresholds","FreeTickspeed","DilationTimeStudyState","AutomatorPoints","pointsForAutomator","AutomatorData","MAX_ALLOWED_SCRIPT_CHARACTERS","MAX_ALLOWED_TOTAL_CHARACTERS","MAX_ALLOWED_SCRIPT_NAME_LENGTH","MAX_ALLOWED_CONSTANT_NAME_LENGTH","MAX_ALLOWED_CONSTANT_VALUE_LENGTH","MAX_ALLOWED_SCRIPT_COUNT","MAX_ALLOWED_CONSTANT_COUNT","ACCELERATION_TIME","alias","ENSLAVED_UNLOCKS","FREE_TICKSPEED_SOFTCAP","RUN","requiredLevels","glyphRefinementEfficiency","levelRefinementValue","POWER_DE_PER_ASCENSION","annihilationDMRequirement","effectFunction","maxUpgrades","noLabel","costIncrease","infinityRebuyables","afterECText","afterEC","searchTermsRelevance","searchIndex","addTerm","term","entry","addWord","lowerCase","addPhrase","phrase","tag","map2dToObject","arr","idx1","idx2","keyboardify","keybrd","_key","qwerty","qwertz","azerty","dvorak","colemak","workman","qwprf","keyboards","keyboardDist","keyboard","aPos","bPos","howBadlyTypoedWithKeyboard","aLen","bLen","distance","howBadlyTypoed","minTypoed","specialChars","replaceSpecialChars","query","truncatedQuery","relevance","searchTerms","relevances","searchWord","minimumRequirement","searchIndexStr","typoThreshold","maxRelevance","decrease","results","sort","breakInfinityUpgrades","worstChallenge","hasCap","timeStr","autobuyMaxDimboosts","autobuyerSpeed","tickspeedCostMult","invalidate","dimCostMult","ipGen","generation","dimInfinityMult","chargedDimInfinityMult","dim18mult","dim27mult","buy10Mult","dim36mult","dim45mult","resetBoost","totalIPMult","skipReset1","skipReset2","skipReset3","skipResetGalaxy","ipOffline","bestIPMsWithoutMaxAll","costIncreaseThreshold","breakUpgrades","newsAnimSpd","news","speed","games","link","game","isAdvertising","onClick","bigCrunchAnimation","clicks","specialTickerData","uselessNewsClicks","disses","diss","gameCreatedTime","dynamic","BLOB","theme","Theme","reasons","Normal","Metro","Dark","DarkMetro","Inverted","InvertedMetro","AMOLED","AMOLEDMetro","S1","S2","S3","S4","S5","S6","S7","S8","S9","S10","S11","S12","reason","flipped","scene","chasers","chaser","newsQueuePosition","paperclips","GameOptions","toggleNews","wasClicked","clicked","nameList","names","prices","lawID","fakeProgress","realTimePlayed","chapters","chapter","eiffelTowerChapter","products","sacrificed","hasBroken","chance","hasSeenNews","game1Name","game2Name","recipes","recipe","protestText","scenarios","scenario","fromSeconds","getMonth","getDate","open","progressStages","suggestedResource","subProgressValue","save","suffix","quoteBits","iMCap","shopPurchases","lockText","RMPurchases","smallTimeSkip","instantPurchase","onPurchase","purchaseTimeSkip","bigTimeSkip","purchaseLongerTimeSkip","singleCosmeticSet","notify","GlyphAppearanceHandler","chosenFromModal","applyNotification","allCosmeticSets","totalSets","currentSetCount","expectedSetCount","speedrunMilestones","COMPLETED","isFullyDestabilized","tabNotifications","firstInfinity","tabsToHighLight","parent","breakInfinity","IDUnlock","ICUnlock","firstEternity","dilationAfterUnlock","realityUnlock","blackHoleUnlock","automatorUnlock","teresaUnlock","alchemyUnlock","imaginaryMachineUnlock","laitelaUnlock","newGlyphCosmetic","hideAt","hidable","subtabs","speedrun","previousRuns","UIClass","before","ModernUIClass","effectType","mendingUpgrades","three","five","seven","eleven","mendingMilestoneElevenMultiplier","warpRebuyables","noEffect","warpUpgrades","Kohler","unlockProgress","corruptionUpgrades","glyphLevelSet","kohlerProgress","progressUnlocks","hostileScore","hostileFragments","antimatterGalaxy","placeholder","kohlerUnlockProgress","mapFn","mapGameDataToObject","mapFun","ref","_l","top","_v","_s","$event","setPreviousScroll","parseRequest","model","$$v","expression","block","lineNum","updateBlock","deleteBlock","highlightClass","cmd","nowait","_e","respec","targets","allowedPatterns","nextSelection","removeBlock","$set","subblock","updateBlockFromNest","deleteBlockFromNest","constant","displayedConstant","directives","rawName","errorTooltip","textInputClassObject","changeBlock","composing","textContents","dropdownOptions","revertToDropdown","dropdownClassObject","$$selectedVal","selected","_value","dropdownSelection","multiple","recursive","nextNodeCount","currentNodeOnPath","unknownNext","nextInputKey","patterns","nextInputValue","updateFunction","currentPath","createCategory","createToken","pattern","Lexer","longer_alt","Identifier","tokenLists","createInCategory","categories","extraCategories","categoryName","isArray","patternWord","$autocomplete","HSpace","group","EOL","line_breaks","StringLiteral","StringLiteralSingleQuote","Comment","NumberLiteral","BlackHoleStr","ComparisonOperator","AutomatorCurrency","PrestigeEvent","StudyPath","TimeUnit","$compare","OpEQ","EqualSign","$getter","getTachyonGain","isRealityAvailable","choices","GlyphSelection","glyphList","choiceCount","isChoosingGlyph","bestGlyph","AutoGlyphProcessor","pick","filterValue","$unlocked","availableST","RegExp","$autobuyer","$autobuyerDurationMode","$autobuyerXHighestMode","$autobuyerCurrencyMode","$prestigeAvailable","$prestige","bigCrunchResetRequest","$prestigeLevel","$prestigeCurrency","$studyPath","$respec","autoReality","$scale","Keyword","keywordTokens","createKeyword","toLocaleLowerCase","ECLiteral","LCurly","RCurly","Comma","Pipe","Dash","Exclamation","automatorTokens","LABEL","lexer","positionTracking","ensureOptimizations","tokenIds","lexerDefinition","tokenTypeIdx","tokenMap","automatorCurrencyNames","standardizeAutomatorValues","PATTERN","ignoredPatterns","forbiddenConstantPatterns","flatMap","presetSplitter","idSplitter","prestigeNotify","flag","AutomatorBackend","isOn","stack","commandState","prestigeLevel","compileConditionLoop","evalComparison","ctx","isUntil","loopStr","logCommandEvent","parseConditionalIntoText","translateLineNumber","startLine","AUTOMATOR_COMMAND_STATUS","SAME_INSTRUCTION","NEXT_TICK_NEXT_INSTRUCTION","blockCommands","comp","comparison","children","getters","compareValue","cv","image","$value","compareFn","findLastPrestigeRecord","addedECs","gainedEP","lastECCompletionCount","recentRealities","T","AutomatorCommands","rule","$","CONSUME","OR","ALT","OR1","SUBRULE","xHighest","currencyAmount","validate","Auto","desired$","tokenType","specified$","addError","advSetting","compile","isReality","On","fixedAmount","durationMode","xHighestMode","fixedMode","currSetting","settingString","NEXT_INSTRUCTION","blockify","singleSelectionInput","singleTextInput","automatorBlocksMap","togglePause","Blob","SKIP_INSTRUCTION","COMMENT","If","checkBlock","visit","S","advanceOnPop","ifEndLine","nest","IF","genericInput1","genericInput2","Notify","notifyText","NOTIFY","Pause","isValidVarFormat","AUTOMATOR_VAR_TYPES","DURATION","lookup","lookupVar","$duration","timeString","timeMs","unscaledDeltaTime","currentInterval","finishPause","NEXT_TICK_SAME_INSTRUCTION","blockArg","PAUSE","OPTION","OPTION1","Respec","Nowait","prestigeToken","prestigeName","forceRestart","RESTART","Start","startDilatedEternity","START","ecNumber","$ecNumber","StoreGameTime","Use","useStoredTime","isStoring","toggleStoreBlackHole","studyList","CONSUME1","Studies","STUDIES","varInfo","$studies","finalPurchasedTS","prePurchasedStudies","purchasedStudies","tsNumber","hasEC","startEC","unlockedEC","Id","exec","isInsertedInRecovery","$presetIndex","Name","presetIndex","findIndex","imported","beforeCount","currentStudyTree","commitToGameState","afterCount","missingStudyCount","presetRepresentation","Unlock","unlockedThisTick","UNLOCK","Until","UNTIL","Wait","doneWaiting","timeWaited","waitStart","isWaiting","WAIT","prestigeOccurred","Off","holeID","bhCond","bhStr","compOperator","While","WHILE","Stop","HALT","STOP","AutomatorParser","Parser","recoveryEnabled","outputCst","nodeLocationTracking","RULE","MANY_SEP","SEP","DEF","command","commandAlts","commandOr","Function","EOF","badCommandToken","resyncEnabled","SUBRULE2","studyListEntry","studyRange","performSelfAnalysis","parser","BaseVisitor","getBaseCstVisitorConstructorWithDefaults","Validator","rawText","validateVisitor","ownMethod","lexResult","tokenize","tokens","parseResult","script","addLexerErrors","errors","addParserErrors","modifyErrorMessages","errorCount","line","startOffset","endOffset","tip","r2","parseError","combinePositionRanges","getPositionRange","previousToken","isEndToken","location","errInfo","errTip","currentScriptText","modifiedErrors","lastLine","variables","checkTimeStudyNumber","isTriad","canBuyTriad","identifier","varName","constants","tree","NUMBER","selectedStudies","studiesOut","firstStudy","lastStudy","pathId","pathStudies","NormalTimeStudies","paths","$cached","sle","positionRange","ECNumber","varLookup","recoveredNode","badCommand","firstToken","firstTokenType","errToken","commandToken","hadError","Compiler","compiled","lineNumber","canUseInComp","unlockedFn","compareFun","Blockifier","UIID","next","parseInput","isCurrency","validateOnly","validator","hasCompilationErrors","blockifyTextAutomator","blockifier","validatedCount","commandDepth","foundChildren","nestedBlock","nestedCommands","visitedCount","validatedBlocks","visitedBlocks","validateLine","walkSuggestion","suggestion","prefix","hasAutocomplete","startsWith","categoryMatches","registerHelper","contents","_","editor","doc","getDoc","severity","from","posFromIndex","cursor","getCursor","ch","getLine","test","lineStart","currentPrefix","lineLex","rawSuggestions","computeContentAssist","suggestions","ruleStack","nextTokenType","Pos","commentRule","defineSimpleMode","dedent","studiesArgs","sol","studiesList","studiesLoad","studiesLoadId","studiesLoadPreset","prestige","commandDone","startUnlock","commandArgs","indent","meta","lineComment","electricChars","AUTOMATOR_MODE","SINGLE_STEP","AUTOMATOR_TYPE","TEXT","BLOCK","AutomatorStackEntry","stackIndex","_stackIndex","_commandIndex","initializeNew","_commands","persistent","commandIndex","AutomatorScript","_id","_compiled","content","isWithinLimit","missingIndex","lastEvent","eventLog","isEditorFullscreen","needsRecompile","cachedErrors","blockTemplates","undoBuffer","redoBuffer","charsSinceLastUndoState","MIN_CHARS_BETWEEN_UNDOS","MAX_UNDO_ENTRIES","scriptIndex","editorScript","currentScriptName","toCheck","createNewScript","newScript","create","clearUndoData","recalculateErrors","currentErrors","currTime","timestamp","timegap","automatorEvents","maxEntries","clearEventLog","singleScriptCharacters","AutomatorTextUI","getValue","BlockAutomator","parseLines","totalScriptCharacters","pushUndoData","newChars","pastGap","pushRedoData","undoScriptEdit","Tabs","_currentSubtab","undoContent","pop","saveScript","setValue","updateEditor","redoScriptEdit","redoContent","LineEnum","Active","Event","AutomatorHighlighter","error","updateHighlightedLine","removeHighlightedTextLine","addHighlightedTextLine","removedLine","removeLineClass","addLineClass","clearAllHighlightedLines","lineType","AutomatorScroller","scrollToRawLine","targetLine","scrollToLine","textHeight","lineToScroll","querySelector","defaultTextHeight","paddedHeight","clientHeight","newScrollPos","scrollTop","scrollTo","gutter","bottom","MAX_COMMANDS_PER_UPDATE","hasJustCompleted","_scripts","isEmpty","findRawScriptObject","currentRunningScript","topLevelScript","currentEditingScript","scriptName","hasDuplicateName","nameArray","currentLineNumber","currentRawText","currentScriptLength","getUsedPresets","scriptID","foundPresets","rawLine","matchPresetID","matchPresetName","presetID","getUsedConstants","foundConstants","availableConstants","addConstant","constantName","constantSortOrder","modifyConstant","renameConstant","oldName","newName","deleteConstant","serializeAutomatorData","dataArray","paddedNumber","segments","deserializeAutomatorData","dataString","remainingData","segmentLength","segmentData","exportCurrentScriptContents","trimmed","encodeText","parseScriptContents","rawInput","decoded","decodeText","importScriptContents","parsed","initializeFromSave","exportFullScriptData","serialized","parseFullScriptData","presetData","constantData","importFullScriptData","ignore","diff","singleStep","followExecution","execTimer","commandsThisUpdate","step","steps","runCurrentCommand","nextCommand","restart","cmdState","findScript","_createDefaultScript","defaultScript","scriptIds","currentScript","oldData","lenChange","scriptNames","newIndex","deleteScript","saveId","clearEditor","toggleRepeat","toggleForceRestart","toggleFollowExecution","jumpToActiveLine","focusedScript","pause","initialMode","scriptObject","clearOnRestart","_data","changeModes","Tutorial","moveOn","TUTORIAL_STATE","AUTOMATOR","parseTextFromBlocks","toConvert","newEntry","playerStack","currentCommands","depth","playerEntry","foundIndex","pointsFromPerks","pointsFromUpgrades","pointsFromOther","totalPoints","default","blockTarget","initialSelection","suppressTooltip","hasError","isTextInput","pathRef","isBoolTarget","targetList","hasLongTextInput","created","_idArray","updateIdArray","availableOptions","calculatePath","recalculateErrorCount","destroyed","newLineNum","newErrors","isValidText","fullPath","validateInput","clone","focusState","currIndex","toClear","errorInfo","html","trigger","classes","components","draggable","AutomatorBlockSingleInput","activeLine","eventLine","errorLine","lineNumberFromBlockID","isActiveLine","isEventLine","isErrorLine","mounted","AutomatorBlockSingleRow","$viewModel","numberOfLines","l","initialize","getElementsByClassName","currentBlockId","textLine","skipLines","checkID","automatorID","scriptText","hasUnparsableCommands","blockified","generateText","indentation","canWait","propsToCheck","blockIdArray","numberOfLinesInBlock","previousScrollPosition","pull","put","allBlocks","automatorBlocks","AUTOMATOR_BLOCKS_BLACKLIST","AUTOMATOR_BLOCKS_COMPARISON_OPERATORS","AUTOMATOR_BLOCKS_COMPARISON_CURRENCIES","AUTOMATOR_BLOCKS_RESETS","currentScriptId","markedLineNumber","unclearedLines","isActiveScript","UI","fullScreen","watch","oldId","unmarkActiveLine","storedScripts","documents","Doc","swapDoc","immediate","$nextTick","refresh","on$","onGameLoad","$refs","container","performLint","beforeDestroy","removeChild","clearAllActiveLines","setActiveState","markActiveLine","wrapper","textArea","lint","lineNumbers","tabSize","extraKeys","cm","autoCloseBrackets","lineWrapping","setUpContainer","setUpEditor","className","fromTextArea","origin","cancel","ctrlKey","completionActive","altKey","metaKey","autocomplete","editorScriptID","clearHistory","clearGutter","savedVertPos","pp","cycleLayout","layoutText","physicsClassObject","togglePhysics","physicsText","centerTree","straightenEdges","_g","classObject","$listeners","_t","PrimaryButton","treeLayout","physicsEnabled","physicsOverride","PerkLayouts","buttonText","enableStr","perkLayout","forcePhysics","perkPhysicsEnabled","PerkNetwork","setPhysics","resetPosition","setEdgeCurve","currentLayout","moveToDefaultLayoutPositions","PerkPointLabel","showHintText","shiftDown","perkColors","primary","globalScale","positionNumToVector","xPart","yPart","network","nodes","minScale","maxScale","lastPerkNotation","pulseTimer","initialStabilization","initializeIfNeeded","makeNetwork","params","updatePerkColor","updatePerkSize","tooltip","visibility","tryUnlock","getScale","clampedScale","moveTo","htmlTitle","innerHTML","uselessPerks","selectPos","title","edges","edge","nodeData","nodeOptions","interaction","hover","hoverConnectedEdges","selectConnectedEdges","tooltipDelay","font","borderWidth","shadow","width","hoverWidth","selectionWidth","inherit","hidden","tabIndex","canvas","newState","setOptions","straightEdges","layoutIndex","moveNode","forceNetworkRemake","centerOnStart","setLabelVisibility","areVisible","isDark","perkColorList","nodeColor","perkColor","primaryColor","secondaryColor","border","highlight","backgroundColor","hoverColor","borderColor","nodeSize","mod","GlyphEffectConfig","setup","checkInputs","_singleDesc","_totalDesc","_genericDesc","_shortDesc","setupCombine","_biggerIsBetter","_enabledInDoomed","_enabledInDoomedWithlvl25","biggerIsBetter","checkBiggerIsBetter","isDisabledByDoomed","isDisabledByDoomedWithlvl25","compareValues","effectValueA","effectValueB","compare","biggerEffect","KNOWN_KEYS","unknownField","unknownGlyphType","emptyCombine","cappedValue","neqTest","realityGlyphEffectLevelThresholds","GlyphEffects","findGlyphTypeEffects","glyphType","makeGlyphEffectBitmask","effectList","bitmask","orderedEffectList","effectName","getGlyphIDsFromBitmask","FunctionalGlyphType","_isUnlocked","functionalGlyphTypes","GlyphTypes","rng","blacklisted","types","generatedTypes","uniform","locked","activePanelClass","panelEnum","INTRO_PAGE","infoPaneID","COMMANDS","ERRORS","DATA_TRANSFER","EVENTS","CONSTANTS","TEMPLATES","BLOCKS","totalChars","maxTotalChars","fullScreenIconClass","exportScript","canMakeNewScript","importScript","editingName","isNameTooLong","nameEdited","_k","keyCode","renameInput","blur","scopedSlots","_u","currentEditorScriptName","proxy","scriptCount","rename","emitClick","exportData","iconClass","hidePresets","hideConstants","hasPresets","hasConstants","toExport","AutomatorDataTransferSingleEntry","maxScriptCount","loadScripts","maxConstantCount","maxNameLength","maxValueLength","deleteAllConstants","importPresets","refreshConstants","aliasString","valueString","oldAlias","currentError","isValidName","alreadyExists","hasCommandConflict","matchObj","shadowsPrototype","isStudyString","focus","AutomatorDefineSingleEntry","existingValues","clearAutomatorConstants","importTSConstants","selectedCommand","commandsInCategory","section","example","AutomatorDocsManPage","_m","template","showModal","isBlock","pasteText","unpackTemplateBlocks","setIndex","selectedTemplateID","automatorScriptTemplate","templateBlocks","beforeBlocks","afterBlocks","maxExistingID","minTemplateID","blocksToAdd","buttonClassObject","sortStyle","newestFirst","clearLog","clearRealityStyle","clearOnReality","clearRestartStyle","timestampStyle","setTimestampMode","unsortedEvents","timestampMode","currentTime","sorted","clearTooltip","timestampType","eventSettings","AUTOMATOR_EVENT_TIMESTAMP_MODE","DISABLED","THIS_REALITY","RELATIVE_NOW","RELATIVE_PREV","DATE_TIME","toDateTimeString","labelClassObject","changeScriptID","dropdownLabel","currentScriptID","runningScriptID","isPaused","currentScriptContent","$recompute","newID","updateCurrentScriptID","$parent","openRequest","labels","status","highlightRunning","rootClassObject","containerClassObject","transitionEnd","mouseOn","mouseOff","$slots","handleClick","buttonClass","indicatorArrowClassObject","containerClass","widthSource","autoClose","closedHeight","openHeight","hasMouse","closeTime","states","CLOSED","OPEN_REQUESTED","OPENING","OPEN","CLOSE_REQUESTED","CLOSING","maxHeight","height","containerStyle","processRequest","updateHeightInfo","newOpen","root","updateBaseWidth","secSinceMouseOff","request","dropdown","offsetWidth","headerHeight","expandButton","offsetHeight","propertyName","AutomatorButton","AutomatorDocsCommandList","AutomatorErrorPage","AutomatorEventLog","AutomatorDataTransferPage","AutomatorBlocks","AutomatorDocsIntroPage","AutomatorDocsTemplateList","AutomatorDefinePage","AutomatorScriptDropdownEntryList","ExpandingControlBox","fullScreenTooltip","nameTooltip","errorStyle","AutomatorPanels","importTooltip","currentInfoPane","openMatchingAutomatorTypeDocs","importScriptData","updateScriptList","fixAutomatorTypeDocs","automatorScriptDelete","setType","getType","RARITY","SAC_VALUE","FILTER_SCORE","CURRENT_REFINE","MAX_REFINE","availableTypes","typeEnum","GlyphInfo","glyphInfoType","emptyTarget","cloneUnlessOtherwiseSpecified","isMergeableObject","deepmerge","defaultArrayMerge","mergeObject","destination","arrayMerge","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","deepmergeAll","deepCloneMerge","destinationArray","sourceArray","isNonNullObject","isSpecial","stringValue","dimensions","costBumps","multiversal","buyUntil10","achievementBits","secretAchievementBits","bestTimes","completedBits","requirementBits","upgradeBits","autobuyersOn","disableContinuum","increaseWithMult","lastTick","shard","galaxy","limitGalaxies","maxGalaxies","buyMax","buyMaxInterval","dimBoost","limitDimBoosts","maxDimBoosts","limitUntilGalaxies","singCap","tesseract","musicglyph","nrru","nriu","antimatterDims","infinityDims","timeDims","replicantiGalaxies","replicantiUpgrades","blackHolePower","expoBlackHolePower","darkMatterDims","ascension","ipMultBuyer","epMultBuyer","pelleRebuyableUpgrades","galgenUpgrades","galgenSac","seen","totalSeen","getTime","backupTimer","chall9TickspeedCostBumps","chall8TotalSacrifice","ic2Count","partInfinityPoint","partInfinitied","secretUnlocks","themes","viewSecretTS","cancerAchievements","shownRuns","Reality","Eternity","maxAll","isEnd","mmeleven","timePlayedAtBHUnlock","realTimeDoomed","previousRunRealTime","bestIPmin","bestIPminVal","bestIPminEternity","bestIPminReality","bestEPmin","bestEPminVal","bestInfinitiesPerMs","bestEPminReality","bestEternitiesPerMs","bestRSmin","bestRSminVal","RMmin","RMminSet","speedSet","iMCapSet","laitelaSet","maxRem","bestMend","isSegmented","usedSTD","hasStarted","hideInfo","displayAllMilestones","startDate","offlineTimeUsed","achievementTimes","seedSelection","initialSeed","version","warpUpgradeBits","corruptionUpgradeBits","corruptionUpgReqs","warpUpgReqs","reqLock","warp","corruptionRebuyables","spentCF","chanceCost","intervalCost","galCost","amBought","ipBought","epBought","shopMinimized","preferredPaths","eterc8ids","eterc8repl","nextThreshold","baseTachyonGalaxies","lastEP","partSimulatedReality","sets","protectedRows","trash","simple","score","effectCount","specifiedMask","effectScores","cosmetics","glowNotification","unlockedFromNG","symbolMap","colorMap","seed","secondGaussian","musicSeed","musicSecondGaussian","upgReqs","imaginaryUpgradeBits","imaginaryUpgReqs","imaginary","showGlyphSacrifice","autoSort","autoCollapse","applyFilterToPurge","autoEquip","moveGlyphsOnProtection","autoEC","lastAutoEC","partEternitied","autoAchieve","forceUnlock","achTimer","hasCheckedFilter","intervalUpgrades","powerUpgrades","durationUpgrades","phase","activations","blackHolePause","blackHoleAutoPauseMode","blackHolePauseTime","expoBlackHole","expoBlackHolePause","expoBlackHoleAutoPauseMode","expoBlackHolePauseTime","expoBlackHoleNegative","unlockBits","bestRunAM","bestAMSet","lastRepeatedMachines","repl","dt","autoAdjustGlyphWeights","isStoringReal","storedReal","autoStoreReal","tesseracts","hasSecretStudy","feltEternity","progressBits","hintBits","hintUnlockProgress","glyphHintsGiven","zeroHintTime","superrun","beingInitialized","goalReductionSteps","STSpent","runGlyphs","runRecords","flip","memoryUpgrades","chunkUpgrades","reaction","highestRefinementValue","momentumTime","modUnlockBits","disCharge","breakCharged","breakDischarge","petWithRemembrance","permanentMemories","lai50","lai65","powerDMUpgrades","powerDEUpgrades","timeSinceLastUpdate","ascensionCount","thisCompletion","singularitySorting","displayResource","sortResource","showCompleted","sortOrder","singularityCapIncreases","lastCheckedMilestones","milestoneGlow","isHoldingLClick","holdStart","heldTier","heldType","galaxyGeneratorAdditive","galaxyGeneratorMultiplicative","galaxyGeneratorAntimatterMult","galaxyGeneratorIPMult","galaxyGeneratorEPMult","sacrificeActive","collapsed","showBought","unlockMilestone","isGameEnd","triggeredTabNotificationBits","tutorialState","tutorialActive","repeatBuffer","AIChance","includeAnimated","retryChallenge","retryCelestial","showAllChallenges","cloudEnabled","hideGoogleName","showCloudModal","forceCloudOverwrite","syncSaveIntervals","hotkeys","themeClassic","themeModern","themeSynergism","commas","UIType","loadBackupWithoutOffline","automaticTabSwitching","respecIntoProtected","offlineTicks","hibernationCatchup","statTabResources","multiplierTab","currTab","showAltGroup","replacePowers","autosaveInterval","showTimeSinceSave","saveFileName","exportedFileCount","hideCompletedAchievementRows","glyphTextColors","headerTextColored","showNewGlyphIcon","showUnequippedGlyphIcon","highContrastRarity","swapGlyphColors","hideAlterationEffects","ignoreGlyphEffects","ignoreGlyphLevel","ignoreGlyphRarity","glyphBG","glyphBorders","showPercentage","achievementUnlockStates","glyphEffectDots","showGlyphInfoByDefault","animations","blobSnowflakes","confirmations","armageddon","exitChallenge","resetReality","glyphReplace","autoClean","sacrificeAll","glyphSelection","glyphUndo","deleteGlyphSetSave","glyphRefine","replicantiGalaxy","dimensionBoost","switchAutomatorMode","respecIAP","awayProgress","antimatterGalaxies","tachyonGalaxies","achievementCount","celestialMemories","hiddenTabBits","hiddenSubtabBits","lastOpenTab","lastOpenSubtab","invertTTgenDisplay","autoRealityForFilter","checkoutSession","mvrmultUpgrades","devSave","defaultStart","isInMatterChallenge","isInAntimatterChallenge","antimatterChallenge","anyChallenge","BROKEN_CHALLENGES","eternityGoal","canMend","infinityGoal","infinityLimit","currentGoal","requiredIPForEP","resetRequirements","glyphCount","guardFromNaNValues","isObject","ob","enumerable","PerformanceStats","samplePeriod","currentBlocks","turnOn","turnOff","toggle","blockName","blockRoot","childBlocks","record","performance","indentLevel","fps","rootBlock","MendingUpgradeState","hasPlayerLock","isLockingMechanics","shouldBypass","mendingReached","addToInventory","GlyphGenerator","randomGlyph","rawLevel","updateTotalRunUnlocks","checkForUnlocks","RebuyableMendingUpgradeState","MendingUpgrades","MendingUpgradeMultiplier","upgradeBought","Lazy","_getValue","registerLazy","registrar","_registrar","object","invalidateOn","worstChallengeTime","ratePerMinute","NormalTimeStudyState","currentStudies","achievementPeriod","buyablePerks","ab","antimatterCost","antimatterDimensionCommonMultiplier","antimatterDimensionFinalMultipliers","getDimensionFinalMultiplierUncached","infinityDimensionCommonMultiplier","timeDimensionCommonMultiplier","multiversalDimensionCommonMultiplierDimensionCommonMultiplier","multiversalDimensionCommonMultiplier","freeInventorySpace","getAdjustedGlyphEffectUncached","staticGlyphWeights","logTotalGlyphSacrifice","logTotalSacrifice","challengeTimeSum","infinityChallengeTimeSum","timeout","isStarted","gameLoop","GameStorage","lastSaveTime","checkCloudSave","Cloud","loggedIn","saveCheck","checkEverySecond","tryOnlineBackups","checkForUpdates","isLocalEnvironment","fetch","response","json","updateRefresh","numpadKeys","getKeys","combination","Mousetrap","modifierKeys","getMainKey","KeySpin","setAction","action","shiftAction","executeAction","probablyStop","spin","spins","executeKey","_bindSpin","executeHotkey","mainKey","stopSpins","modal","progressBar","activeElement","NodeModule","__module__","require","isLoaded","makePromise","executor","reject","module","isModuleLoaded","setZoomFactor","zoomFactor","webFrame","openExternal","url","shell","MIN_ZOOM","MAX_ZOOM","ElectronRuntime","localStorage","getItem","addEventListener","updateZoom","Electron","increaseZoom","decreaseZoom","resetZoom","setItem","setSize","sizeDiff","outerHeight","RichPresenceInfo","gameStage","stageDB","stage","challengeState","challDB","details","stageName","challResStr","mainRes","openExternalLink","PlayFab","settings","titleId","developerSecretKey","GlobalHeaderInjection","productionServerUrl","_internalSettings","entityToken","sdkVersion","requestGetParams","sdk","sessionTicket","verticalName","errorTitleId","errorLoggedIn","errorEntityToken","errorSecretKey","GetServerUrl","InjectHeaders","xhr","headersObj","headerKey","setRequestHeader","gHeaderKey","ExecuteRequest","authkey","authValue","customData","extraHeaders","resultPromise","startTime","requestBody","JSON","stringify","urlArr","getParams","firstParam","completeUrl","XMLHttpRequest","onloadend","GetPlayFabResponse","code","send","onreadystatechange","readyState","xhrResult","parse","responseText","errorCode","errorMessage","CallBackTimeMS","Request","CustomData","authenticationContext","PlayFabId","EntityId","EntityType","SessionTicket","EntityToken","UpdateAuthenticationContext","authenticationContextUpdates","Entity","Type","AuthInfoMap","authAttr","authError","GetAuthInfo","authKey","defaultAuthValue","AuthenticationContext","ExecuteRequestWrapper","apiURL","authInfo","buildIdentifier","GenerateErrorReport","fullErrors","paramName","errorDetails","msgIdx","ClientApi","IsClientLoggedIn","ForgetAllCredentials","AcceptTrade","AddFriend","AddGenericID","AddOrUpdateContactEmail","AddSharedGroupMembers","AddUsernamePassword","AddUserVirtualCurrency","AndroidDevicePushNotificationRegistration","AttributeInstall","CancelTrade","ConfirmPurchase","ConsumeItem","ConsumeMicrosoftStoreEntitlements","ConsumePS5Entitlements","ConsumePSNEntitlements","ConsumeXboxEntitlements","CreateSharedGroup","ExecuteCloudScript","GetAccountInfo","GetAdPlacements","GetAllUsersCharacters","GetCatalogItems","GetCharacterData","GetCharacterInventory","GetCharacterLeaderboard","GetCharacterReadOnlyData","GetCharacterStatistics","GetContentDownloadUrl","GetCurrentGames","GetFriendLeaderboard","GetFriendLeaderboardAroundPlayer","GetFriendsList","GetGameServerRegions","GetLeaderboard","GetLeaderboardAroundCharacter","GetLeaderboardAroundPlayer","GetLeaderboardForUserCharacters","GetPaymentToken","GetPhotonAuthenticationToken","GetPlayerCombinedInfo","GetPlayerProfile","GetPlayerSegments","GetPlayerStatistics","GetPlayerStatisticVersions","GetPlayerTags","GetPlayerTrades","GetPlayFabIDsFromFacebookIDs","GetPlayFabIDsFromFacebookInstantGamesIds","GetPlayFabIDsFromGameCenterIDs","GetPlayFabIDsFromGenericIDs","GetPlayFabIDsFromGoogleIDs","GetPlayFabIDsFromGooglePlayGamesPlayerIDs","GetPlayFabIDsFromKongregateIDs","GetPlayFabIDsFromNintendoServiceAccountIds","GetPlayFabIDsFromNintendoSwitchDeviceIds","GetPlayFabIDsFromPSNAccountIDs","GetPlayFabIDsFromSteamIDs","GetPlayFabIDsFromTwitchIDs","GetPlayFabIDsFromXboxLiveIDs","GetPublisherData","GetPurchase","GetSharedGroupData","GetStoreItems","GetTime","GetTitleData","GetTitleNews","GetTitlePublicKey","GetTradeStatus","GetUserData","GetUserInventory","GetUserPublisherData","GetUserPublisherReadOnlyData","GetUserReadOnlyData","GrantCharacterToUser","LinkAndroidDeviceID","LinkApple","LinkCustomID","LinkFacebookAccount","LinkFacebookInstantGamesId","LinkGameCenterAccount","LinkGoogleAccount","LinkGooglePlayGamesServicesAccount","LinkIOSDeviceID","LinkKongregate","LinkNintendoServiceAccount","LinkNintendoSwitchDeviceId","LinkOpenIdConnect","LinkPSNAccount","LinkSteamAccount","LinkTwitch","LinkXboxAccount","LoginWithAndroidDeviceID","TitleId","overloadCallback","LoginWithApple","LoginWithCustomID","LoginWithEmailAddress","LoginWithFacebook","LoginWithFacebookInstantGamesId","LoginWithGameCenter","LoginWithGoogleAccount","LoginWithGooglePlayGamesServices","LoginWithIOSDeviceID","LoginWithKongregate","LoginWithNintendoServiceAccount","LoginWithNintendoSwitchDeviceId","LoginWithOpenIdConnect","LoginWithPlayFab","LoginWithPSN","LoginWithSteam","LoginWithTwitch","LoginWithXbox","Matchmake","OpenTrade","PayForPurchase","PurchaseItem","RedeemCoupon","RefreshPSNAuthToken","RegisterForIOSPushNotification","RegisterPlayFabUser","RemoveContactEmail","RemoveFriend","RemoveGenericID","RemoveSharedGroupMembers","ReportAdActivity","ReportDeviceInfo","ReportPlayer","RestoreIOSPurchases","RewardAdActivity","SendAccountRecoveryEmail","SetFriendTags","SetPlayerSecret","StartPurchase","SubtractUserVirtualCurrency","UnlinkAndroidDeviceID","UnlinkApple","UnlinkCustomID","UnlinkFacebookAccount","UnlinkFacebookInstantGamesId","UnlinkGameCenterAccount","UnlinkGoogleAccount","UnlinkGooglePlayGamesServicesAccount","UnlinkIOSDeviceID","UnlinkKongregate","UnlinkNintendoServiceAccount","UnlinkNintendoSwitchDeviceId","UnlinkOpenIdConnect","UnlinkPSNAccount","UnlinkSteamAccount","UnlinkTwitch","UnlinkXboxAccount","UnlockContainerInstance","UnlockContainerItem","UpdateAvatarUrl","UpdateCharacterData","UpdateCharacterStatistics","UpdatePlayerStatistics","UpdateSharedGroupData","UpdateUserData","UpdateUserPublisherData","UpdateUserTitleDisplayName","ValidateAmazonIAPReceipt","ValidateGooglePlayPurchase","ValidateIOSReceipt","ValidateWindowsStoreReceipt","WriteCharacterEvent","WritePlayerEvent","WriteTitleEvent","RegisterWithPhaser","Phaser","Plugin","clientApi","ticket","SteamTicket","CreateAccount","makeAuthorizedPromise","DisplayName","Data","ItemId","Price","VirtualCurrency","itemId","annotation","Items","Quantity","Annotation","orderId","providerName","OrderId","ProviderName","itemInstanceId","consumeCount","ItemInstanceId","ConsumeCount","virtualCurrency","Amount","playFabFunction","loginPlayFabWithSteam","screenName","validatePurchases","syncIAP","purchaseIAP","std","order","pendingValidations","txnId","ProviderData","validateTimeout","isValidating","retryValidation","orders","validatePurchase","confirm","purchaseName","purchaseInstance","stdsBought","hasPendingPurchaseConfirmations","userInventory","ST","Inventory","RemainingUses","userData","unlockedCosmetics","Cosmetics","Value","purchaseShopItem","cosmeticId","storeCosmetic","updatedCosmetics","initAPI","getSteamId","getAuthSessionTicket","activateAchievement","getAchievementNames","initDiscordAPI","clientId","steamGameId","runDiscordCallbacks","setDiscordActivity","smallImage","largeImage","isInitialized","achievementNames","SteamRuntime","Greenworks","steamId","loginPlayFab","loginFirebase","orderState","initializeDiscord","createForceRefreshCanvas","accountId","staticAccountId","loginWithSteam","classList","getContext","forceRefresh","clearRect","shortcuts","function","keyboardToggleAutobuyers","buyTickSpeed","buyMaxTickSpeed","sacrificeBtnClick","manualRequestDimensionBoost","manualRequestGalaxyReset","manualBigCrunchResetRequest","replicantiGalaxyRequest","setHoldingR","eternityResetRequest","startDilatedEternityRequest","requestManualReality","keyboardAutomatorToggle","keyboardAutomatorRestart","keyboardToggleContinuum","continuumUnlocked","armageddonRequest","export","keyboardPressQuestionMark","keyboardH2PToggle","keyboardVisibleTabsToggle","keyboardPressEscape","keyboardEditAutobuyers","hasAutobuyersForEditModal","mendingResetRequest","hotkey","toggleAutobuyer","buyer","isSimpleTickspeed","disabledByContinuum","toggleBuySingles","toggleMode","bulkName","hasUnlimitedBulk","automation","tryShowWarningModal","setContinuum","visibleIndex","linenum","canArmageddon","Quote","isHistoryOpen","clearAll","hideAll","autobuyerEditModal","hiddenTabs","setShiftKey","bindDimensionHotkeys","buyManyDimension","buyOneDimension","currentTab","currentUIFormat","isAvailable","currentSubtab","konamiCode","konamiStep","testKonami","character","Speedrun","startTimer","originalHandleKey","modifiers","CorruptionUpgradeState","setMechanicLock","toggleMechanicLock","specialLockText","upgradeLock","isImaginary","respecCorruptionUpgrades","respecCall","RebuyableCorruptionUpgradeState","CorruptionUpgrades","GALAXY_TYPE","DISTANT","REMOTE","THIRD","GalaxyRequirement","isSatisfied","dimension","requirementAt","typeAt","galaxyCostScalingStart","galaxiesBeforeDistant","polynomialLvl","galWeakScaling","requiredTier","galaxyReset","softReset","emoji","requestGalaxyReset","restrictedLimit","maxBuyGalaxies","turnOffEffect","req","newGalaxies","buyableGalaxies","EnslavedProgress","giveProgress","AwayProgress","formatName","navigateTo","place","goTo","AwayProgressTypes","ConfirmationState","_confirmationSetting","ConfirmationTypes","AutobuyerState","canTick","entryCount","autobuyerGroupName","oneIndexed","defineProperties","anyUnlocked","allUnlocked","allActive","groupName","IntervaledAutobuyerState","timeSinceLastTick","resetTickOn","resetTick","prestigeEvent","UpgradeableAutobuyerState","baseInterval","upgradeInterval","maxIntervalForFree","createAccessor","AnnihilationAutobuyerState","hasInput","inputEntry","darkMatterMultGain","annihilate","AntimatterDimensionAutobuyerState","shortDisplayName","fullName","canBeUpgraded","canUnlockSlowVersion","settingConfig","individualSetting","groupSetting","thisSetting","collapseDisplay","hasAutobuyer","intervalTick","autoTick","buyMaxDimension","upgradeBulk","allUnlimitedBulk","allMaxedInterval","BigCrunchAutobuyerState","hasAdditionalModes","autoInfinitiesAvailable","considerMilestoneReached","autoEternitiesAvailable","bumpAmount","highestPrevPrestige","timeToNextTick","willInfinity","BlackHolePowerAutobuyerState","powerUpgrade","ExpoBlackHolePowerAutobuyerState","DarkMatterDimensionAscensionAutobuyerState","ascend","DarkMatterDimensionAutobuyerState","maxAllDMDimensions","realityProps","glyphUncommonGuarantee","strengthThreshold","newStrength","randomStrength","countIn","RealGlyphRNG","uniformityGroups","uniformGlyphs","randomType","finalize","generate","calculateGlyph","glyphID","chosenGlyph","removeGlyph","getRidOfGlyph","advancePartSimCounters","amplifiedSim","boostReality","realityBoostRatio","multiversalSim","simCount","startManualReality","closeEvent","runRealityAnimation","processManualReality","newGlyph","shouldSacrifice","wouldKeep","startingGlyph","companionGlyph","beginProcessReality","getRealityProps","userSelect","animation","play","processAutoGlyph","gainedLevel","keepGlyph","isReset","alreadyGotGlyph","defaults","restoreCelestialState","gainedRM","gainedShards","simulatedRealities","updateRealityRecords","thisRunRMmin","giveRealityRewards","realityAndPPMultiplier","addRealityTime","projectedIMCap","runRewardMultiplier","newMultiplier","rewardMultiplier","isHigher","modalText","machineRecord","completeRun","finishProcessReality","glyphsToProcess","getRNG","glyphNum","glyphChoices","fastToggle","glyphSample","toGenerate","sampleStats","totalSacrifice","varProdSacrifice","totalStats","addToStats","oldMean","stat","newMean","sampleFromStats","glyphsToGenerate","stdev","glyphFunction","sampleGlyph","sacGain","glyphSacrificeGain","thisTypeStats","glyphsToSample","doneSoFar","progressName","buttons","click","scoreMode","totalSac","generatable","sacArray","typeMap","sortedSacTotals","toFill","needed","filling","usedToFill","finalEP","realityRealTime","respecGlyphs","disChargeAll","disChargeAllBreak","celestialRunState","clearCelestialRuns","recalculateAllGlyphs","lockAchievementsOnReality","initializeChallengeCompletions","autoReleaseTick","playerInfinityUpgradesOnReset","resetInfinityRuns","resetEternityRuns","fullReset","fullResetTimeDimensions","resetChallengeStuff","completeAll","secondSoftReset","resetAmount","resetTimeDimensions","resetTickspeed","applyRUPG10","invalidateAll","ECTimeStudyState","invalidateCachedRequirements","applyEU1","applyAlchemyReactions","restoreCelestialRuns","initializeRun","superv","initializeSuperRun","priority","saved","isHidden","lock","isDisplaying","displayForce","giveEternityRewards","newEternities","addCompletion","completionCount","canBeCompleted","addEternityTime","eternityAnimation","FullScreenAnimationHandler","askEternityConfirmation","specialConditions","switchingDilation","noStudies","rewardTP","initializeResourcesAfterEternity","enteringEC","animateAndEternity","hasAnimation","animateAndUndilate","clearCompletions","applyEU2","secondRow","exitDilation","eternityGain","teresa90BaseExp","EternityMilestoneState","EternityUpgradeState","EPMultiplierState","cachedCost","costAfterCount","cachedEffectValue","costIncreaseThresholds","costThresholds","multPerUpgrade","LongPress","_wasLongPress","_pressTimer","_currentCancelHandler","_currentTarget","_pressCount","begin","_pressBegin","longPress","_cancelCurrentPress","preventDefault","changedTouches","elementFromPoint","pageX","pageY","_handleClick","_handleTouchEnd","cancelHandler","button","_beginRepeat","wasLP","savedTarget","useLongPress","vue","directive","bind","binding","vnode","emit","fns","addTo","delay","useRepeatingClick","initializeVars","enterAnimation","leaveAnimation","showNotification","elClass","cloneNode","textContent","entered","stopEnter","remove","leaving","leave","onclick","success","showBlackHoles","queue","cloudConflict","history","currentGlyphTooltip","glyphTooltipDirection","draggingGlyphInfo","sacrificeValue","mouseoverGlyphInfo","refineValue","inInventory","scrollWindow","draggingUIID","currentContextMenu","subtab","h2pForcedTab","notationName","formatPreBreak","lastClickTime","uiLayout","page","themeCss","isThemeS12","bounds","drop","windowBorderOffset","snowSize","snowPos","snowText","LEN","START_HEX","codePointAt","SNOW","$el","fly","tween","tweens","windowSideOffset","snowMoveX","snowMoveY","snowDelay","snowSpeed","snowPosTop","snowPosBottom","snowMoveDir","tweenZig","tweenZag","tweenDrop","tweenZigZagReset","tweenDropReset","BlobSnowflake","BlobBackground","animateBackground","updateSize","removeEventListener","documentElement","clientWidth","isBlob","blobs","randomUnitVector","blobSlowdown","MIN_SPEED","MAX_SPEED","intersectionLength","intersect","intersection","azimuth","rayStart","rayUnit","rectAA","rectBB","dirfrac","t3","t4","TachyonParticle","currentName","BlobSnowflakes","TachyonParticles","animateTachyons","newGameKey","smallCrunch","isModern","shouldDisplay","bestInfinityRealTime","pauseText","chargingClassObject","singleState","hasLongText","dischargeText","displayState","_b","emitInput","$attrs","displayText","PrimaryToggleButton","HeaderBlackHoleStatusText","canModifyBlackHoles","displaySingle","canCharge","isCharging","canAutoRelease","blackHoles","arePermanent","pauseButtonText","accel","unpauseAccelerationFactor","textClassObject","textClicked","challengeDisplay","exitButtonClicked","exitText","currentResource","maximumResource","currentEternityChallengeId","textStyle","darkTheme","rgb","FailableEcText","activityTokens","showExit","resetCelestial","inPelle","inSuperV","celestialReality","tabName","activeChallengeNames","currEC","nextCompletion","completionText","isInFailableEC","exitDisplay","clickFn","isEC","EternityChallengeState","toExit","oldChall","exit","requestStart","enslavedText","effarigMultNerfText","effarigTickNerfText","laitelaEntropy","laitelaTimer","challengePower","isChallengePowerVisible","isInEffarig","isInLaitela","waitingforHint","enslavedTimer","updateChallengePower","nerfFactor","canTickHintTimer","rawMsUntilHints","isC2Running","isC3Running","isIC6Running","isIC8Running","powerArray","antimatterPerSec","manualArmageddon","mendupg5","remnantsTotal","realityShardGain","nextRealityShardGain","isHeader","remnantsGain","realityShardGainPerSecond","resourceClass","currencyValue","currencyName","showRemnants","shards","frags","gainedMvR","MvRRate","perUpgrade","tickspeedDisplay","baseText","pulseSpeedText","scOneStart","scOneEffect","officialFixedSeed","canModifySeed","modifySeed","newSeed","seedModeText","rec","generateName","prepareSave","NG","restartWithCarryover","currentSpent","setSTDUse","isIAPEnabled","isPausedAtStart","setSegmented","spentSTD","mostRecentMilestone","newestTime","SpeedrunMilestone","tryComplete","SpeedrunMilestones","decimalOfE","SaveType","serialize","jsonConverter","deserialize","encoder","TextEncoder","decoder","TextDecoder","encode","decode","pako","Uint8Array","btoa","atob","getSteps","reduceRight","migrations","firstRealityMigration","patches","autobuyers","dimensionMultDecreaseCost","newsArray","achs","timeDimStartCosts","timeDimCostMults","timeDimension1","thisInfinityTime","thisEternityRealTime","thisInfinityLastBuyTime","lastTenEternities","lastTenRuns","uiChoiceModalInterval","uiChoice","normalizeTimespans","convertAutobuyerMode","fixChallengeIds","adjustMultCosts","convertAchivementsToNumbers","adjustGameCreatedTime","moveSavedStudyTrees","convertEPMult","moveChallengeInfo","infinitiedConversion","adjustWhy","removeAchPow","adjustSacrificeConfirmation","migrateNotation","fixAutobuyers","removeAutoIPProperties","adjustAchievementVars","uniformDimensions","removeEternityChallGoal","removeTickspeed","removePostC3Reward","renameMoney","moveAutobuyers","convertEternityCountToDecimal","renameDimboosts","migrateConfirmations","removeOtherTickspeedProps","renameNewsOption","removeDimensionCosts","changeC8Handling","convertAchievementsToBits","setNoInfinitiesOrEternitiesThisReality","setTutorialState","migrateLastTenRuns","migrateIPGen","renameCloudVariable","standardizeUncompletedTimes","makeRecords","deleteOldRecords","migrateAutobuyers","migratePlayerVars","consolidateAuto","convertTimeTheoremPurchases","deleteDimboostBulk","deleteFloatingTextOption","refactorDoubleIPRebuyable","infMultNameConversion","convertNews","etercreqConversion","moveTS33","addBestPrestigeCurrency","migrateTheme","reworkBHPulsing","lastTenInfinities","infRec","eterRec","lastTenRealities","realRec","showLastTenResourceGain","unique","bitmaskArray","fixedPerkStartingPos","newArr","oldSubtab","currentMultiplierSubtab","glyphTrashMode","simpleEffectCount","reducedFilter","effectDB","glyphScoreSettings","typeEffects","rarityThreshold","scoreThreshold","effectChoices","updateBitmask","modifiedBits","foundBits","newSubmask","bit","glyphSetProps","glyphSet","lightGlyphs","showRecentRate","isPurchased","newUI","wantsSuperFlipped","wantsFlipped","bestInfinityTime","challengeTimes","infchallengeTimes","wasFucked","unfuckChallengeId","currentChallenge","tickSpeedMultDecreaseCost","old","achByName","newId","epmult","epmultCost","parseChallengeName","fullID","currentEternityChall","eternityChallUnlocked","challengeTarget","why","dead","dimlife","gal","spreadingCancer","achPow","sacrificeConfirmation","notationMigration","autoIP","autoTime","eternityChallGoal","tickSpeedCost","tickspeedMultiplier","newsHidden","renameTickspeedPurchaseBumps","chall9TickspeedPurchaseBumps","postC3Reward","totalmoney","oldProps","costmultipliers","costMultipliers","infinityDimension1","infDimensionsUnlocked","overXGalaxies","autoCrunchMode","autoSacrifice","eternityBuyer","autoEternityMode","oldNewsArray","maskLength","BITS_PER_MASK","resets","challConf","eternityconfirm","tickDecrease","chall11Pow","swaps","convertAchievementArray","newAchievements","oldAchievements","isSecret","row","column","offlineProd","offlineProdCost","cloud","autobuyerOn","bulkOn","freeGalaxies","infDimBuyers","galaxybuyer","infMultBuyer","infDimTimer","repUpgradeTimer","amcost","ipcost","epcost","infinitiedBank","removePriority","floatingText","infMult","infMultCost","deletePostChallUnlocked","postChallUnlocked","etercreq","secretThemeKey","storedFraction","prePatch","saveData","patch","maxVersion","versions","patchPreReality","patchPostReality","arrayToBits","devMigrations","wormhole","upg","tdbuyer","threshhold","epmultbuyer","dragging","autochall","buy10","wormholePause","tdbuyers","autoRealityMode","movePropIfPossible","celestial1","celestial2","merge","typePriorityOrder","rmStore","rmStoreMax","realityBuyer","adjustThemes","effectBitmask","typeEffect","separateEffectKey","oldExp","lv","floor5","adjustedLevel","realityAutobuyer","eternityAutobuyer","xLast","glyphLevelMult","dtBulk","safeArrayToBits","fixed","quoteIdx","tempAuto","tempMusic","cursedMask","showAlchemyResources","oldSettings","autoGlyphSac","newSettings","inventorySize","disableAutoAchieve","newEC10Test","cursedThisRun","autoGlyphPick","onlyEighthDimensions","onlyEighthDimensons","compression","maxAmGained","chanceUpgrades","higgs","anomalies","tickThreshold","maxQuotes","totalDimCapIncrease","ppSpent","thisEternityMaxAM","noReplicantiGalaxies","upgReqChecks","bestGlyphStrength","showGlyphEffectDots","newPerks","gainedPerkPoints","reachedSingularityCapLimit","secondsSinceCappedTime","singularityAutoCapLimit","singularityTime","autoAnnihilationTimer","annihilated","secondsSinceReachedSingularity","allRandomGlyphs","glyphTrash","bestRealityRealTime","showLastTenInfinitiesGainPerTime","showLastTenRunsGainPerTime","thisInfinityMaxAM","bestIPminThisInfinity","bestIPminThisEternity","bestEPThisReality","thisEternityMaxIP","bestIpPerMsWithoutMaxAll","bestEPminThisEternity","bestEPminThisReality","bestRMmin","bestRMminSet","bestGlyphLevel","bestGlyphLevelSet","bestSpeedSet","maxMatter","achievementChecks","noSacrifices","onlyFirstDimensions","noEighthDimensions","noFirstDimensions","noAntimatterProduced","noTriadStudies","noTheoremPurchases","noInfinitiesThisReality","noEternitiesThisReality","maxID1ThisReality","continuumThisReality","baseFreeGalaxies","autoPower","rebuyablesAuto","ttbuyer","xCurrent","timeDimTimer","ttTimer","dilUpgradeTimer","saveOverThresholdFlag","saveOverThresholdFlagModalDisplayed","reqBitmask","maxStudiesThisReality","lastRepeatedRM","selectedID","shiftedScripts","lastID","oldChecks","usedMaxAll","maxGlyphsThisRun","minNegativeBlackHoleThisReality","cancerGalaxies","addSeenNews","highestRefinementData","triadRegex","triadStudies","harshAutoClean","showCondenseToMilestone","darkAutobuyerTimer","autoAnnihilationSetting","hasDimboost","hasDilUpg","unlocksBits","hasDimboostsResetNothing","convToBit","famine","pestilence","war","death","newGame","toMove","petWithRecollection","defineMatch","newScripts","oldScriptKeys","armageddonDuration","maxAMThisArmageddon","sidebarMinimized","chart","devMode","swap1","swap2","disabled","toDelete","cosmetic","forceDarkGlyphs","testVersion","setLatestTestVersion","BACKUP_SLOT_TYPE","ONLINE","OFFLINE","RESERVE","AutoBackupSlots","intervalStr","currentSlot","saves","lastCloudSave","offlineEnabled","lastUpdateOnLoad","lastBackupTimes","oldBackupTimer","ignoreBackupTimer","maxOfflineTicks","simulatedMs","defaultTicks","tickLimit","localStorageKey","backupDataKey","saveSlot","backupSlot","backupTimeKey","load","loadRoot","updateSteamStatus","loadPlayerObject","loadBackupTimes","backupOfflineSlots","loadSlot","slot","resetTempState","import","tryImportSecret","newPlayer","checkPlayerObject","clearInvalidCosmetics","resetBackupTimer","importAsFile","reader","FileReader","readAsText","file","overwriteSlot","invalidProps","checkNaN","hasNaN","thisNaN","canSave","ignoreSimulation","isSelectingGlyph","isSimulating","SAVE_DISABLED","INTERACTIVITY_DISABLED","silent","manual","saveToBackup","loadFromBackup","offlineTimeMs","offlineSlots","backupInfo","backupOnlineSlots","slotsToBackup","toBackup","timeSinceLast","latestBackupTime","saveToReserveSlot","targetSlot","exportModifiedSave","exportDateString","dateObj","getFullYear","exportAsFile","download","exportBackupsAsFile","backupData","backup","importBackupsFromFile","importText","backupKey","storageKey","backupTimeData","segmented","hardReset","playerObject","checkString","isPreviousVersionSave","checkPerkValidity","additionalEnd","unequipped","setAsCurrent","ADNotations","rawDiff","testSpeed","simulateOffline","autoStoreRealTime","simulateTime","postLoadStuff","mixedScientific","catchup","nextTickDiff","filename","pom","encodeURIComponent","createEvent","initEvent","dispatchEvent","keyStr","removePaddingChars","lkey","decodeBase64Binary","arrayBuffer","bytes","chr1","chr2","chr3","enc1","enc2","enc3","enc4","firebaseConfig","GameProgressState","GameProgress","CatchupResource","CatchupResources","ProgressChecker","getProgressStage","getCompositeProgress","compareSaveProgress","progressDifference","compareSaveTimes","timeDifference","hasFirebaseConfig","apiKey","initializeApp","provider","GoogleAuthProvider","auth","getAuth","getDatabase","user","lastCloudHash","signInWithPopup","syncSTD","email","pass","signInWithEmailAndPassword","catch","createUserWithEmailAndPassword","snapshot","exists","encoded","uintArray","compareSaves","local","hash","farther","older","differentName","hashMismatch","forceModal","cloudSave","thisCloudHash","sha512_256","localSave","saveComparison","overwriteAndSendCloudSave","addCloudConflict","cloudInvalidData","isSaving","hasBoth","hasConflict","cloudSaveConflict","serializedSave","writeToCloudDB","overwriteLocalSave","cloudLoadConflict","singleSlot","readFromCloudDB","separateSaveSlots","allData","newData","slotStr","logout","signOut","clearLocalSTD","onAuthStateChanged","uid","supportedBrowsers","Payments","windowReference","hasCanceled","pollForPurchases","buyMoreSTD","method","headers","STD","cloudID","pollAmount","onbeforeunload","close","cancelPurchase","statusRes","failure","hide","closed","upgradeKey","cosmeticName","extraData","requestedSet","fullCompletions","stdData","amountSpent","isTimeout","sessionId","showSecondPreferredWarning","currTree","canPickSecond","allowedDimPathCount","currDimPathCount","buyStudiesUntil","studyArray","lastInPrevRow","requestedPath","ecHasRequirement","secondPreferredWarningShown","pacePaths","pathName","pathList","allPace","pace","study","boughtNormalTS","refund","ecStudy","TimeStudyState","_path","isMyriad","costsST","checkSetRequirement","purchaseUntil","usePriority","noSoftcap","dilatedValueOf","corruptionPrestigeLimits","reqCheck","gainedMendingPoints","MvRGain","warpReality","Quotes","totalEPMult","devisor","epAmount","glyphState","getGlyphLevelInputs","addInfinityTime","challText","maxCompletions","gainedTP","resetRealityRuns","isOfflineEPGainEnabled","ampFactor","projIM","infGain","reload","GAME_SPEED_EFFECT","FIXED_SPEED","TIME_GLYPH","TIME_STORAGE","SINGULARITY_MILESTONE","NERFS","EXPO_BLACK_HOLE","effectsToConsider","blackHolesActiveOverride","storedTimeWeight","nerfModifier","timeCompressionPower","timeCompressionMult","repeats","getGameSpeedupSoftcaps","getGameSpeedupSoftcapsExp","capNumber","speedFactor","getBaseGameSpeedup","ExpoBlackHoles","realTimeMechanics","realDiff","momentum","MultiversalDimensions","storeRealTime","passDiff","thisUpdate","storedRealTimeCap","isReleaseTick","tutorialLoop","blackHoleDiff","fixedSpeedActive","currentBlackHoleStoreAmountPerMs","blackHoleSpeedup","reducedTimeFactor","totalTimeFactor","amplification","beforeStore","timeCap","currentBest","hasFocus","isIntervalCapped","intervalPurchaseCap","buyInterval","buyPowerDM","buyPowerDE","DeltaTimeState","updateNormalAndInfinityChallenges","preProductionGenerateIP","passivePrestigeGen","applyAutoprestige","updateImaginaryMachines","uncountabilityGain","uncountability","tryFail","_power","gain","fromShards","newAmount","updatePrestigeRates","tryCompleteInfinityChallenges","autoComplete","replicantiLoop","updateTachyonGalaxies","getTTPerSecond","tryAutoUnlock","updatePhases","applyAutoUnlockPerks","teresa1","teresa25","laitelaRealityTick","autoAchieveUpdate","loop","canAmplify","CREDITS_START","isPermanentlyHidden","currentIPmin","currentEPmin","currentRSmin","eternitiedGain","infGen","deltaTimeMs","buyDilationUpgrade","laitelaInfo","entropyGainPerSecond","oldInfo","realityReward","laitelaBeatText","quote","disabledDim","isCharged","addedRM","MMBoostRem","updateIMCap","gainedImaginaryMachines","thresholdMult","ttMult","glyphTT","dilationTT","finalTT","afterSimulation","playerBefore","playerAfter","real","fast","ticks","maxTicks","playerStart","totalGameTime","calculateGameTimeFromRealTime","calculateSpeedups","infinitiedMilestone","eternitiedMilestone","remainingRealSeconds","loopFn","realTickTime","calculateOfflineTick","newRemaining","isDown","isPlayerHoldingR","browserCheck","userAgent","lastFrame","animateTweens","delta","tweenTime","TWEEN","onload","supportedBrowser","onfocus","onblur","baseSpeed","baseSpeedPreExpo","pulsedSpeed","hasSeenAlteredSpeed","isStopped","isEC12","isPulsing","hasBH3","expoPower","pastGSSoftcap","scOne","baseSpeedText","formatNumber","speedPreExpo","GameSpeedDisplay","galaxyCount","purchasedTickspeed","freeTickspeed","formatMachinesGained","formatMachineStats","formatGlyphLevel","ppGained","shardsGainedText","currentShardsRate","bestShardRate","bestShardRateVal","celestialInfo","canReality","showSpecialEffect","hasRealityStudy","machinesGained","projectedRM","newIMCap","realityTime","nextGlyphPercent","nextMachineEP","celestialRunText","showShardsRate","percentToNextGlyphLevelText","decimalPoints","hasSpecialReward","EPforRM","adjusted","realityMachineMultiplier","distanceToRMCap","teresaReward","formatScalingMultiplierText","teresaThreshold","formatThresholdText","after","resourceName","HeaderTickspeedInfo","MendingButton","RealityCurrencyHeader","RealityButton","ArmageddonButton","MendingPointsHeader","hasRealityButton","hasMendingButton","nextEP","currentEPRate","peakEPRate","peakEPRateVal","gainedTachyons","gainedCompletions","nextGoalAt","EP_BUTTON_DISPLAY_TYPE","FIRST_TIME","currentEP","currentTachyons","challengeCompletions","fullyCompleted","hasMoreCompletions","creditsClosed","showEPRate","isDilation","rateThreshold","amountStyle","textHexCode","getComputedStyle","getPropertyValue","stepRGB","interFn","tachyonAmountStyle","CANNOT_ETERNITY","CHALLENGE_RUPG","updateChallengeWithRUPG","hasNewContent","NORMAL_EXPLORE_NEW_CONTENT","DILATION_EXPLORE_NEW_CONTENT","tryUnlockNextInfinityDimension","canUnlock","hasIPUnlock","amRequirement","ipRequirement","dimensionText","amDisplay","ipDisplay","nextDimension","unlockNext","EternityButton","UnlockInfinityDimButton","showContainer","showEP","showNextEP","tesseractText","tesseractAffordable","crunch","showIPRate","gainedIP","currentIPRate","peakIPRate","peakIPRateVal","switchToInfinity","currentIP","inAntimatterChallenge","canBuyTesseract","BigCrunchButton","isTesseractUnlocked","tesseractCost","tesseractProgress","HeaderCenterContainer","HeaderEternityContainer","HeaderInfinityContainer","HeaderChallengeDisplay","HeaderChallengeEffects","HeaderBlackHole","HeaderPrestigeGroup","hasReality","lineClass","onLineClick","enableAnimation","beforeCreate","recentTickers","clearTimeouts","currentNews","prepareNextMessage","delayTimeout","scrollTimeout","canShow","nextNewsMessageId","isAI","openNewsLink","transform","DELAY","scrollMessage","SCROLL_SPEED","scrollDuration","ticker","updatedText","parentName","hasNotification","isCurrentSubtab","transitionText","ClassicSubtabButton","isCurrentTab","tabPosition","endTabNames","ClassicTabButton","Classic","GameHeader","ClassicSubtabBar","ClassicTabBar","NewsTicker","InfinityPointsHeader","EternityPointsHeader","crunchButtonVisible","quoteId","focusedQuoteId","lineId","currentLine","quoteStyle","upClass","progressUp","downClass","progressDown","leftClass","progressLeft","rightClass","progressRight","celestialSymbols","celestialName","$emit","emitClose","modalClass","styleObject","celEntry","opac","isText","baseCol","opacity","CelestialQuoteBackground","leftVisible","rightVisible","closeVisible","CelestialQuoteLine","unlockedQuotes","lastProgress","_celestial","focusedQuote","currentQuoteLine","commonButtonClass","lightBG","additionalTranslate","easeOut","totalLines","isQuoteStart","isQuoteEnd","progressIn","advanceQueue","CelestialQuoteLineBasicInteractable","muteIconClass","isMuted","celSymbol","celIndex","isS12EndDisplay","isModal","role","relevantPeople","person","CreditsDisplay","rolling","scroll","audio","creditStyles","muteStyle","celestialDisplays","Audio","oldRate","refreshUpdateRate","volume","pointerEvents","h2pClassObject","showH2P","showInfo","hasTutorial","topMargin","emphasizeH2P","information","remainingTime","buttonClicked","canBeClicked","OfflineSpeedupButton","foregroundStyle","timeSinceStart","tabVisibilities","MvR","RS","IM","machineStr","showIP","showRM","showRS","showMvR","subtabVisibilities","showSubtabs","ModernSidebarCurrency","ModernTabButton","Modern","startNewGame","openSelectionModal","selectedSetName","hasMoreCosmetics","SHOW_NEW_GAME","lockedSets","cosmeticSetChoice","positionStyle","updatePositionStyles","oldShowModal","innerWidth","innerHeight","cloudSaveEnabled","lastLocalSave","saveDisabled","localStr","cloudStr","swap","showSpectate","SPECTATE_GAME","isCollapsed","statusText","changeName","saveName","segmentText","iapText","openSeedModal","seedText","timePlayedStr","offlineText","milestoneName","mostRecent","timeSince","toggleCollapse","collapseIcon","collapseText","offlineFraction","isComplete","stateText","fractionText","theoremAmount","formatTimeTheoremType","STamount","saveLoadText","saveslot","_i","toggleTTgen","$$a","$$el","$$c","checked","$$i","TTgenRateText","totalTimeTheoremText","minimized","budget","costs","formatAM","buyWithAM","formatIP","buyWithIP","formatEP","buyWithEP","buyMaxTheorems","hasTTAutobuyer","isAutobuyerOn","minimize","shiftKey","hideContextMenu","nicknameBlur","edit","handleExport","respecAndLoad","deletePreset","toggleContextMenu","listeners","componentID","contextMenuHideTimer","contextMenuShowTimer","contextMenuIsVisible","touchstart","startShowTimer","mouseenter","mouseleave","startHideTimer","stopHideTimer","showContextMenu","stopTimers","stopShowTimer","HoverMenu","isASCII","existingNames","exportString","presetName","combinedTree","attemptBuyArray","parseStudyImport","newTree","studyString","enabledClass","isLocked","isEnabled","TimeTheoremBuyButton","TimeStudySaveLoadButton","theoremGeneration","totalTimeTheorems","minimizeAvailable","showST","hasTTGen","showTTGen","minimizeArrowStyle","transition","shopBottomRowHeightStyle","timeTheorem","buyOne","HowToPlay","TimeTheoremShop","ModernSidebar","SaveTimer","SpeedrunStatus","PopupModal","ModalProgressBar","CelestialQuoteModal","CelestialQuoteHistoryDisplay","FadeAway","CreditsContainer","SpectateGame","NewGame","ending","hideIfMatoFullscreen","canInfinity","SynergismBigCrunchButton","SynergismRealityButton","SynergismEternityButton","SynergismSubtabButton","SynergismTabButton","Synergism","SynergismGameHeader","SynergismSubtabBar","SynergismTabBar","SynergismEPHeader","showAlchemyHowTo","toggleAllReactions","allReactionsDisabled","realityGlyphCreationClass","infoResourceId","infoResource","capFactor","pelleSymbol","layout","orbit","orbitClass","orbitSize","nodeClass","isFocusedNode","handleMouseEnter","handleMouseLeave","reactionArrow","realityAmount","reactionPathClass","reactionArrowPaths","reactionArrowClass","reactionArrowPositions","AlchemyOrbitLayout","angleOffset","_resources","_radius","_angleOffset","AlchemyCircleLayout","orbits","orbitNodes","reactionArrows","AlchemyReactions","productNode","reagentNodes","reagentNode","reagent","hintClassObject","fillFraction","spinnerTransform","fillerTransform","maskTransform","showThisHintText","HintText","AlchemyResourceArc","isReactionActive","flow","layoutStyle","scaledFlow","resourceAmount","resourceCap","formattedFlow","reactionText","effectConfig","unlockRequirement","effectDisplay","labelDisplay","isString","br","ignoreCapped","reachedCapFunction","updateEffect","updateCap","fromDecimal","EffectDisplay","reactionProduction","realityReactionText","resourceText","AlchemyCircleNode","AlchemyResourceInfo","focusedResourceId","reactionsAvailable","realityCreationVisible","animationTimer","alchemyCap","sizeMultiplier","circleStyle","reactions","maxRadius","inRes","outRes","isLessThanRequired","isActiveReaction","isFocusedReaction","isDisplayed","focusedResource","xStart","yStart","xEnd","yEnd","pathLength","animationTime","reactionProgress","leadPoint","trailPoint","x1","y1","x2","y2","setIsActive","activeComponent","multiplierText","quickReset","displayPercents","progressBarStyle","setProgress","setLinearProgress","inSpecialRun","getTachyonReq","nextID","ipRequirementReached","amountText","rateOfChange","isContinuumActive","buySingleClass","buySingle","tutorialClass","singleText","boughtTooltip","buyTenClass","isAffordableUntil10","until10Text","adjustableTextClass","rateText","isSmall","GenericDimensionRowText","boughtBefore10","singleCost","until10Cost","isShown","isCostsAD","formattedAmount","showCostTitle","costUnit","continuumString","showRow","isLongText","maxDimensionsUnlockable","costUntil10","isSacrificeAffordable","disabledCondition","isSacrificeUnlocked","currentSacrifice","sacrificeTooltip","typeName","sumText","galRequirementText","hasIncreasedScaling","costScalingText","buyGalaxy","distantStart","obscureStart","canBulkBuy","scalingText","distant","remote","dimName","formatGalaxies","boostScale","boostCountText","dimRequirementText","isBuyable","unlockedByBoost","WarpUpgradeState","warpReached","RebuyableWarpUpgradeState","WarpUpgrades","DIMBOOST_TYPE","SHIFT","WARP","SCALE","DimBoostRequirement","boost","dimBoostPower","normalBoostMult","imaginaryBoostMult","canUnlockNewDimension","maxBoosts","corruptionMax","dimboosts","boostCap","bulkRequirement","targetResets","discount","boosts","allNDUnlocked","newUnlock","formattedMultText","boostEffects","dimensionRange","areDimensionsKept","startingDimensionBoosts","tempBulk","forcedADReset","forcedAMReset","enteringAntimatterChallenge","canKeepDimensions","skipResetsIfPossible","canKeepAntimatter","requestDimensionBoost","maxBuyDimBoosts","req1","req2","increase","fixedValue","minBoosts","requirementText","multiplierDisplay","gameSpeedMult","isEC9","tickmult","upgradeCount","AntimatterDimensionRow","AntimatterDimensionsTabHeader","AntimatterGalaxyRow","DimensionBoostRow","AntimatterDimensionProgressBar","TickspeedRow","hasDimensionBoosts","isQuickResetAvailable","sacText","changeBuyMode","getUntil10Display","amountDisplay","buy","buttonTextClass","buttonPrefix","buttonValue","howManyCanBuy","costDisplay","buyAsManyAsYouCanBuy","showText","scaledBoostStart","seeText","scaledBoost","hasContinuum","ClassicAntimatterDimensionsTab","ModernAntimatterDimensionsTab","SynergismAntimatterDimensionsTab","hasInfinity","gameTickLength","toggleAllAutobuyers","allAutobuyersDisabled","continuumDisabled","showContinuum","postBreak","modeName","modes","modeProps","amountMode","autobuyerBoxRowClass","extraInfo","autobuyerStateClass","autobuyerToggleClass","globalToggle","autobuyerBuyBoxClass","showEternity","intervalText","bulkText","intervalIn","bulkIn","isShowingBulk","AutobuyerIntervalLabel","showInterval","isUnlockable","currMode","nextValue","nextTime","isShowingStateInfo","optionMode","changeMode","modeNameFn","isMaxed","isUpgradeable","AutobuyerBox","AutobuyerIntervalButton","AutobuyerInput","AutobuyerDropdownEntry","modeDisplay","bulkUnlimited","bulkDisplay","newBulk","DimensionBulkButton","isBuyMaxUnlocked","limitGalaxiesSlot","hasAlternateInputs","hasRelicMode","isOverCap","availableModes","showAutobuyers","isADBox","parentActive","toggleGroup","displayLabelAsGroup","entryCountPerRow","AutobuyerToggleLabel","parentDisabled","AutobuyerSingleToggleLabel","AutobuyerModeButton","showIndividual","hasMode","AutobuyerGroupToggleLabel","SingleAutobuyerInRow","rowCount","boxSize","SingleAutobuyerBox","singles","MultipleAutobuyersBox","MultipleSingleAutobuyersGroup","AutobuyerToggles","OpenModalHotkeysButton","RealityAutobuyerBox","EternityAutobuyerBox","BigCrunchAutobuyerBox","GalaxyAutobuyerBox","DimensionBoostAutobuyerBox","TickspeedAutobuyerBox","DimensionAutobuyerBox","SimpleAutobuyersMultiBox","MendingAutobuyerBox","displayADAutobuyersIndividually","hasInstant","hasSeenGamespeedAlteringEffects","checkADAutoStatus","tabClass","currentChars","maxScriptChars","withinLimit","isTextAutomator","rewind","playTooltip","hideOnTargetClick","playButtonClass","repeatOn","forceRestartOn","follow","hasUndo","hasRedo","redo","hasErrors","automatorModeTooltip","toggleAutomatorMode","automatorType","currScript","hasTextErrors","lostBlocks","switchAutomatorEditorMode","callBack","AutomatorModeSwitch","justCompleted","statusName","editingDifferentScript","duplicateStatus","PAUSED","AutomatorBlockEditor","AutomatorTextEditor","AutomatorControls","erroredScript","fromPerks","fromUpgrades","automatorInterval","perkSources","upgradeSources","otherSources","hasBought","SplitPane","AutomatorEditor","AutomatorPointsList","AutomatorDocs","speedupText","isEnslaved","stateChange","changePauseMode","pauseModeString","hasBH2","detailedBH2","blackHoleUptime","gridStyle","startAnimation","BlackHoleAnimation","PLANET_SIZE","PARTICLE_SIZE","PARTICLE_COUNT","SEMIMAJOR_AXIS","ACTIVE_THRESHOLD","holeSize","eccentricAnomaly","eccentricity","meanAnomaly","E0","Dot","context","beginPath","lineWidth","performDraw","stroke","Planet","totalPhase","period","atan","tan","calculatePosition","arc","strokeStyle","Hole","createRadialGradient","addColorStop","fillStyle","fillRect","Particle","respawn","randomDistance","lastDistance","preLastDistance","lastAngle","preLastAngle","respawnTick","isInside","dilationFactor","particleSpeed","distFactor","drawTrail","drawAndRotateBlob","lastX","lastY","lineCap","lineTo","FONT_SIZE","textAlign","px","green","translate","rotate","fillText","restore","cycleLength","hole","particles","frameRequest","particle","unmount","negativeBHDivisor","isInverted","negativeSlider","infoTooltip","reqLockText","adjustSliderNegative","sliderProps","flowDirection","disabledClass","piecewiseLabel","stateClass","wrapStyles","boolDisabled","disabledStyle","wrapClick","bgClass","elemStyles","bgStyle","draggableStyle","moveStart","tooltipStatus","focusFlag","focusSlider","currentSlider","disabledArray","dotClass","disabledDotStyles","sliderStyles","focusStyles","tooltipDirection","tooltipStyles","xformatter","formatting","dotContents","piecewiseObj","piecewiseDotStyle","piecewiseStyle","piecewiseActiveStyle","labelStyle","labelActiveStyle","isRange","processDraggable","processClass","processClick","tooltipFormatHelper","roundToDPR","devicePixelRatio","PlusMinusButton","dotSize","dotWidth","dotHeight","piecewise","eventType","lazy","clickable","stopPropagation","debug","minRange","maxRange","useKeyboard","actionsKeyboard","piecewiseFilter","tooltipMerge","enableCross","valueInDot","plusMinusButtons","sliderStyle","focusStyle","tooltipDir","mergeFormatter","processStyle","tooltipStyle","disabledDotStyle","dragFlag","crossFlag","keydownFlag","processFlag","processSign","isComponentExists","isMounted","dotAxialSizePx","mergeFormatting","dotWidthVal","dotHeightVal","tooltipMergedPosition","dot0","tooltipClass","slider","dot1","minimum","index0","index1","getIndexByValue","indexRange","maximum","decimals","spacing","printError","usableSize","gap","isFixed","valueLimit","idleSlider","ret","dotStyles","piecewiseDotWrap","resetVal","limitValue","bool","computedFixedValue","cssText","bindEvents","moving","moveEnd","blurSlider","handleKeydown","handleKeyup","handleOverlapTooltip","unbindEvents","changeFocusSlider","contains","value1","value2","getPos","getStaticData","rect","elem","getBoundingClientRect","setValueOnPos","timer","isProcess","targetTouches","isDiff","syncValue","setPosition","isDrag","valueRange","getValueByIndex","setTransform","setCurrentValue","isLessRange","anotherSlider","isIdleSlider","noCb","setTransitionTime","translateValue","processSize","processPos","WebkitTransform","msTransform","transitionDuration","WebkitTransitionDuration","inRange","getIndex","msg","isDirectionSame","tooltip0","tooltip1","tooltip0Rect","tooltip1Rect","tooltip0Right","tooltip1Left","tooltip0Y","tooltip1Y","horizontalOverlap","verticalOverlap","handleDisplayMergedTooltip","mergedTooltip","SliderComponent","isNegativeBHUnlocked","isLaitela","maxNegativeBlackHole","maxInversion","nextChange","timeWithPreviousActiveToNextStateChange","intervalVal","intervalConfig","powerConfig","durationVal","durationConfig","effectTitle","costConfig","DescriptionDisplay","CostDisplay","isAutoUnlocked","BlackHoleUpgradeButton","blackHoleDescription","intervalUpgrade","rawInterval","durationUpgrade","ExpoBlackHoleUpgradeButton","expoBlackHoleDescription","BlackHoleUpgradeRow","BlackHoleStateRow","BlackHoleChargingSliders","BlackHoleUnlockButton","ExpoBlackHoleUpgradeRow","pauseMode","bh2Status","bh1Remaining","bh2Remaining","cycleCount","bh2Duration","disChargeClassObject","chargesUsed","totalCharges","columnId","btnClassObject","isBroken","showingCharged","canBeCharged","isUseless","worstChallengeString","isImprovedByTS31","ts31Effect","showWorstChallenge","chargePossible","hasTS31","isBasedOnInfinities","showChargedEffect","uselessInfinityUpgrades","worstChallengeIndex","BreakInfinityButton","InfinityUpgradeButton","chargeUnlocked","grid","totalBreakCharges","breakChargesLeft","nodeVisibility","is","nodeState","nodeId","ringBackgroundTransform","ringBackgroundPath","ringBackgroundFilter","svgRingPath","rMinorCircle","toRad","edge0","c0","s0","edge1","c1","s1","innerAngle","asin","edge2","c2","s2","edge3","c3","s3","big","baseTransform","pathData","legendArrowPointString","legendTransform","legendTextAnchor","LEGEND_FONT_SIZE","legendLineY","legendLines","hoverOverride","hasLegend","legendArrowPoints","unitFromDegrees","pts","horiz","xDir","getLines","ringClass","ringFilter","symbolFontSize","incompleteTransform","incompleteFadePath","incompleteSolidPath","completeTransform","completePath","filterName","unpaddedSpan","incompleteStart","incompleteStartShape","completeStartShape","pathEndShape","totalPathOffsetPx","incompleteFadeEnd","fadeLength","generateIncompletePath","startShape","tStart","insetPath","getOffsetPath","tEnd","outsetPath","endVector","inEnd","outStart","capCP0","capCP1","hasIncompleteSolidPath","inset","outset","translation","offsetPath","cubicBezierFitToCurveSection","NodeRing","NodeBackground","NodeOverlay","ProgressConnector","overlayDrawOrder","panLimiter","sizes","getSizes","leftLimit","rightLimit","viewBox","realZoom","topLimit","bottomLimit","newPan","panZoom","controlIconsEnabled","dblClickZoomEnabled","fit","zoomScaleSensitivity","minZoom","maxZoom","beforePan","CelestialNavigationViewportCache","pan","zoom","getZoom","getPan","destroy","completionString","timeSum","completedAllChallenges","ChallengeRecordsList","infinityChallengesUnlocked","bypass","infinityChallengeCompleted","shardRarityBoost","shardPower","amplifiedShards","amplifiedShardsRate","runUnlocked","runUnlock","createCursedGlyph","runButtonOuterClass","runButtonInnerClass","runDescription","possessiveForm","Celestials","showHistory","descriptionKey","descriptionLines","EffarigUnlockButton","EffarigRunUnlockReward","CelestialQuoteHistory","vIsFlipped","relicShardRarityAlwaysMax","mendVisible","shopUnlocks","giveCursedGlyph","hasAutoRelease","autoRelease","hasUnlock","unlocksInfo","doomedDisabledClass","realityTitle","runButtonClassObject","enslavedSymbol","glitchStyle","storeGameTimeClass","storedBlackHole","isStoringBlackHole","dischargeClass","useStored","nerfedBlackHoleTime","storeRealTimeClass","hasReachedCurrentCap","toggleStoreReal","mechanicButtonClass","canChangeStoreRealTime","toggleAutoStoreReal","realTimeButtonText","storedRealEfficiencyDesc","storedRealCapDesc","unlockClassObject","buyUnlock","timeUntilBuy","storedRealEffiency","storedRealCap","buyableUnlocks","currentSpeedUp","canModifyGameTimeStorage","canChangeStoreTime","canDischarge","hasNoCharge","storedTimeInsideEnslaved","storedRealTimeEfficiency","hasProgress","canModifyRealTimeStorage","canBuyUnlock","xScale","yScale","dx","dy","isAutoECVisible","remainingECTiers","nextECText","allECText","hasECR","unlockedCount","isChallengeVisible","ChallengeGridCell","restartChallenge","isInChallenge","isShowAllVisible","visiblity","goalDisplay","firstGoal","lastGoal","currentRewardConfig","nextRewardConfig","currentVRewardConfig","nextVRewardConfig","overrideLabel","challengeId","challengeDone","challengeRedo","challengeUnlock","challengeLocked","challengeClickable","completionOverlay","EternityChallengeBoxWrapper","showGoalSpan","altRewards","ChallengeTabHeader","ChallengeGrid","EternityChallengeBox","untilNextEC","untilAllEC","autoECInterval","hasUnlocked","eternityCount","getMilestone","invisible","rewardClassObject","milestone","EternityMilestoneButton","rows","costIncreases","purchaseUpgrade","effectLabel","isAutobuyerActive","isActiveInDoom","hasEU2","EternityUpgradeButton","EPMultiplierButton","textHidden","isInModal","glyphHash","forceNameColor","showSacrifice","ignoreModifiedLevel","realityGlyphBoost","flipTooltip","noneText","isDragging","dragstart","dragStart","dragend","dragEnd","drag","glyphBorderStyle","hasTooltip","tooltipLoaded","tooltipDirectionClass","sacrificeReward","refineReward","uncappedRefineReward","currentAction","displayLevel","displayedInfo","mouseEventHandlers","eventHandlers","levelText","rarityText","onTouchDevice","sacrificeText","refineText","scoreText","changeWatcher","chaosDescription","isPelleDisabled","convertedParts","primaryEffectText","secondaryEffectText","boostColor","additionColor","effectStringTemplate","textSplits","firstSplit","secondSplit","hasValue","hasSecondaryValue","convertToHTML","valueStyle","textShadowColor","getBaseColor","string","GlyphTooltipEffect","showDeletionText","showChaosText","touchDevice","effectiveLevel","sortedEffects","getGlyphEffectValuesFromBitmask","rarityInfo","getRarity","baseColor","CosmeticGlyphTypes","currentColor","bg","mainBorderColor","getBorderColor","descriptionStyle","getRarityColor","cursedColor","isLightBG","glyphName","isLevelCapped","isLevelBoosted","touchStart","glyphTooltipStyle","glyphHeaderStyle","isCursed","getSpecialGlyphEffectDescription","ev","findById","getFontColor","powerText","isCurrentAction","refinementText","showFilterScoreModes","rarityBorderStyles","common","uncommon","rare","epic","legendary","mythical","transcendent","divine","generateGradient","isCircular","borders","colorSplit","scaleFn","perc","isColor","elements","specialData","centers","GlyphTooltip","isNew","isUnequipped","isInventoryGlyph","isActiveGlyph","glowBlur","glowSpread","bottomPadding","textProportion","circular","isTouched","tooltipEnabled","realityColor","typeConfig","cosmeticConfig","isBlobHeart","symbolBlur","unblurredSymbols","currentSymbol","zIndexStyle","colorObj","overrideColor","symbolColor","getColorProps","isRealityGlyph","ignoreRarityColor","bgColor","overStyle","outerStyle","innerStyle","mouseEnter","mouseMove","mouseLeave","mousedown","mouseDown","touchend","touchEnd","touchmove","touchMove","isCurrentTooltip","directionID","minEffectID","effectIDs","remainingEffects","isCursedGlyph","isCompanionGlyph","blacklist","updateDisplayLevel","showBorders","showTooltip","hideTooltip","getAdjustedGlyphLevel","removeVisualFlag","glyphInfo","glyphRawRefinementGain","moveTooltipTo","tooltipEl","clientX","clientY","dataTransfer","setData","dropEffect","over","setDragImage","dragInfo","screenX","screenY","boundary","effectIconPos","borderAttrs","attr","setName","GLYPH_NAMES","adjective","noun","forceColor","isColored","glyphTypeList","sortedGlyphs","slotCount","sortGlyphList","singletonName","adjList","nounPhrase","adjOrder","basicTypePhrase","getNoun","adjectives","listEntry","getAdjective","basicGlyphList","getEffarigProp","singleGlyphTypes","mainGlyphName","calculateGlyphPercent","primaryType","effarigRM","getSingleGlyphEffectFromBitmask","effarigGlyph","percentPerGlyph","sortFn","adjFn","adj","GlyphComponent","GlyphSetName","showName","orderedGlyphs","standardOrder","realityGlyph","glyphShowcasePanel","displaySacrifice","GlyphSetPreview","recordGlyphInfo","laitelaDim","buttonGroupClass","autoRestartCelestialRuns","toggleAutoRestartCelestial","instabilityThreshold","hyperInstabilityThreshold","ultraInstabilityThreshold","enslavedHint","toggleGlyphTextColors","glyphColorPosition","glyphColorState","glyphInfoClass","sacrificeDisplayed","setInfoState","sacrificeUnlocked","glyphInfoBorderClass","pelleGlyphText","isSoftcapActive","hasEffarig","uniqueGlyphText","chaosEffect","valueClass","baseValue","typeObject","glyphColor","glyphEffectsOrder","CurrentGlyphEffect","pelleChaosEffect","mm8","uniqueGlyphs","noEffects","glyphMaxLevel","glyphsChanged","getActiveGlyphEffects","glyphPositionStyle","showEquippedModal","dragEvents","clickGlyph","dragoverIndex","unequipClass","respecTooltip","toggleRespec","unequipText","undoAvailable","undoTooltip","toggleRespecIntoProtected","cosmeticGlow","showOptionModal","undoSlotsAvailable","undoVisible","GLYPH_SIZE","arrangementRadius","glyphRespecStyle","calcDx","calcDy","minDx","minDy","maxDx","maxDy","dragover","dragleave","getData","equip","glyphDisplayOptions","increaseSound","sound","col","slotClass","toIndex","allowDrag","glyphSacrificeUnlocked","newGlyphs","unequippedGlyphs","doubleClickTimeOut","clickedGlyphId","totalSlots","colCount","moveToSlot","protectedSlots","makeRowStyle","rowStyle","factorString","factors","formatFactor","eter","formatPerkShop","shardVisible","shardImprovedVisible","shardFactor","singularityEffect","scalePenalty","rowFactor","achievementFactor","formatLevel","resetWeightsButtonClass","resetWeights","isAutoAdjustWeightsOn","weights","adjustSlider","tooltipContent","ToggleButton","has193","perkShopVisible","penaltyVisible","rowVisible","achievementVisible","showAutoAdjustWeights","columns","adjustVisible","adjustOutlineStyle","totalWeights","visibleRows","eternityVisible","singularityVisible","glyphWeightFields","resetSavedWeights","lastInstability","factorsOpen","glyphFactors","same","which","lastAdjusted","savedWeights","oldSum","oldValue","restSum","savedRestSum","reduceRatio","newWeights","roundPreservingSum","closest","closestDistance","nonIntegers","canPeek","refreshGlyphs","canRefresh","isGlyphSelection","showSetName","sidebarClass","sidebarEnum","setSidebarState","hasMoreOptions","unlockedFilter","unlockedSets","unlockedAlchemy","exportFilterSettings","importFilterSettings","toggleAutoReality","showFilterHowTo","filterMode","optionClass","setMode","setEffectCount","bumpRarity","glyphIconProps","rarityThresholds","setRarityThreshold","raritySliderProps","advancedTypeSelectStyle","advancedType","getSymbol","questionmarkTooltip","weightInputLimit","setScoreThreshold","indexOffset","setEffectScore","autoSacrificeSettings","descStyle","minScoreInputStyle","bitmaskIndexOffset","shiftedIndex","limitedInput","inputValue","toggleSelection","noExclude","effarigSettings","exclusionTooltip","isExcluded","effarigBits","effarigMask","SelectedEffectToggle","AutoSacrificeEffectTab","AutoSacrificeAdvancedTab","lockedTypes","alchemyUnlocked","autoRealityTooltip","unlockedModes","modeIcon","rarityToStrength","filterModeName","newRarity","serializeType","simpleData","typeData","importFilter","groupClass","sortModes","keepTooltip","ButtonCycle","showScoreFilter","showAutoAutoClean","showAutoEquip","availableSortModes","questionMarkTooltip","autoCleanTooltip","harshAutoCleanTooltip","deleteAllUnprotected","removeString","deleteAllRejected","deleteRejectedTooltip","hasPerkShop","hasFilter","isRefining","removeCount","negativeWarning","hasNegativeEffectScore","sacMode","glyphPurge","maxSlots","deleteAllUnprotectedGlyphs","deleteAllRejectedGlyphs","addRowButtonClass","addRow","isProtectedRowsMax","removeRowButtonClass","removeRow","moveGlyphs","changeProtectedRows","sortByLevel","sortByPower","sortByEffect","sortByScore","collapseEmpty","collapseEmptySlots","GlyphSortButtonGroup","GlyphProtectedRowButtonGroup","GlyphAutosortButtonGroup","GlyphCleanButtonGroup","modeID","modeDesc","trashModeDesc","glyphSetKey","noSet","hasEquipped","saveGlyphSet","loadingTooltip","setLengthValid","loadGlyphSet","deleteGlyphSet","glyphSets","refreshGlyphSets","glyphsToLoad","activeGlyphs","activeOptions","findByValues","selectedFromActive","findSelectedGlyphs","remainingOptions","sortedInventoryList","selectedFromInventory","counter","finalGlyphs","specialLimit","effLimit","realLimit","GlyphPos","specGlyph","selGlyph","missingGlyphs","optionList","compFn","toLoad","slotsLeft","greedyPick","filteredOptions","selectedGlyph","glyphSetSaveDelete","GlyphInventoryManagementPanel","GlyphFilterPanel","GlyphSetSavePanel","GlyphRejectionPanel","hasRefined","toggleActive","realityReminderClass","dropDownIconClass","clickText","isExpanded","epMultCapped","ecCount","missingAchievements","unpurchasedDilationUpgrades","currLog10EP","cheapestLog10TD","multEPLog10Cost","purchasableTS","hasDilated","availableCharges","availableBreakCharges","canBeExpanded","false","chargesLeft","resetText","confirms","challengeName","normalName","hasHigherLayers","exitFn","hasDragover","toggleAlteration","addThreshold","empowerThreshold","boostThreshold","maxSacrifice","anySacrifices","teresaMult","lastMachines","glyphSymbol","formatAmount","formatNewAmount","formatTotalAmount","newDescription","willSacrifice","sacConfig","animateReality","viewModel","showNewSacrifice","matchType","validSac","keybindActive","TypeSacrifice","hasAlteration","hideAlteration","lastMachinesTeresa","additionThreshold","empowermentThreshold","boostingThreshold","cosmeticTypes","addStyle","empowerStyle","boostStyle","hasSeenRealityGlyph","sacrificeGlyph","typeCosmetic","specialCosmetic","openModal","changes","singleGlyphAppearance","GlyphTabSidebar","GlyphPeek","RealityAmplifyButton","GlyphInventory","SacrificedGlyphs","CurrentGlyphEffects","EquippedGlyphs","GlyphLevelsAndWeights","ResetRealityButton","RealityReminder","SingleGlyphCustomzationPanel","showInstability","hardcap","resetRealityDisplayed","showEnslavedHint","haveBoost","glyphLevelMin","isSacrificeOption","capStr","capRM","scaleTime","lockTooltip","toggleLock","pelleDisabled","requirementConfig","etaText","canBeLocked","hasRequirementLock","getETAText","estimateIMTimer","ImaginaryUpgradeButton","scaleTimeForIM","nextAtDisplay","inC1","challengeNotEnterable","lockedText","ChallengeBox","InfinityChallengeBox","nextICUnlockAM","isEC8Running","isAnyAutobuyerUnlocked","isEC9Running","conversionRate","dimMultiplier","buyTesseract","tesseractCountString","nextDimCapIncrease","staticStyle","isAutoTessOn","totalDimCap","capExpo","powerPerSecond","incomeType","textCap","TesseractsCap","EC8PurchasesLeft","startEternityChallenge","EternityChallengeRewardState","configCopy","_challenge","isVEffectActive","imporvedECRewards","_fullId","_reward","_vReward","fullId","maxValidCompletions","isWithinRestrictionAtCompletions","completionsAtIP","initialGoal","isGoalReached","isWithinRestriction","enteringGamespeed","fail","shouldPreventEC7","hasUpgradeLock","nextChallenge","buySingleInfinityDimension","capTooltip","isAutobuyerUnlocked","buyMaxInfinityDimension","hasPrevTier","capIP","eternityReached","enslavedRunning","hardcapPurchases","infinityDimension","hardcapIPAmount","InfinityDimensionRow","isEnslavedRunning","enslavedCompleted","boughtTesseracts","extraTesseracts","showLockedDimCostNote","isAutoTessUnlocked","atCap","trueID8cap","IPcap","atTessCap","nextTesseractIncrease","infPowerSoftcap","TesseractHardcap","toggleAllInfDims","cssVars","sacrificeBoostDisplay","ClassicInfinityDimensionsTab","ModernInfinityDimensionsTab","styleOfColumnBg","offlineIpUpgrade","bottomRowUnlocked","ipMultSoftCap","ipMultHardCap","buyMaxIPMult","IpMultiplierButton","allColumnUpgrades","flat","setStyleOfColumnBg","getColumnColor","showLaitelaHowTo","isDMCapped","darkMatterGain","matterExtraPurchasePercentage","singularitiesUnlocked","singularityWaitTime","singularityCap","matterRequirement","darkMatterMultRatio","handleAutoAnnihilationInputChange","autoAnnihilationInput","autobuyerUnlocked","annihilationButtonVisible","annihilationInputStyle","canAnnihilate","ascensionText","percentPerSecond","intervalClassObject","handleIntervalClick","hoverState","hold","ascensionTooltip","darkMatterClassObject","darkMatterText","darkEnergyClassObject","darkEnergyText","timerPercent","darkEnergyPerSecond","portionDE","hasAscended","powerDMPerAscension","powerDE","powerDMCost","powerDECost","canBuyInterval","canBuyPowerDM","canBuyPowerDE","timerPecent","intervalAscensionBump","intervalAfterAscension","hoverOverAscension","line1","line2","ascMult","de","ascensions","dimensionProduction","formatDMCost","prodDim","DarkMatterDimensionRow","hasDimension","hasAscension","hasSingularity","hasAnnihilated","autobuyStr","autoAscendStr","autoSingularityStr","maxAutobuy","maxAutoAscend","autoSingularityFactor","darkMatterDimsAscension","maxDimTier","completionTime","bestSet","tierNotCompleted","runEffects","isMetro","barClass","progressDisplay","upgradeDirectionIcon","isUnique","nextEffectDisplay","completionsDisplay","suppressGlow","progressToNext","remainingSingularities","milestoneMode","singularitiesPerCondense","baseCondenseTime","currentCondenseTime","autoCondenseDelay","autoSingActive","barStyle","maxStr","condenseCount","thisSingularityTime","extraTime","timeText","timePerCondense","timeUntilCap","timeDelayFromAuto","SingularityMilestoneComponent","hasNew","shouldGlow","nextMilestoneGroup","unseenMilestones","condenseClassObject","doSingularity","singularityFormText","singularityWaitText","darkEnergyGainPerSecond","decreaseTooltip","decreaseCap","extendedCap","increaseTooltip","increaseCap","perStepFactor","baseSingularityTime","hasAutoSingularity","additionalSingularityTime","manualSingularityRate","autoSingularityRate","canPerformSingularity","unlockedBulkSingularity","baseTimeToSingularity","currentTimeToSingularity","extraTimeAfterSingularity","isAutoEnabled","nextLowerStep","willCondenseOnDecrease","formText","totalTime","formatRate","capIsReached","gainPerCapIncrease","perform","LaitelaRunButton","SingularityPane","SingularityMilestonePane","DarkMatterDimensionGroup","AnnihilationButton","LaitelaAutobuyerPane","autobuyersUnlocked","singularityPanelVisible","showAnnihilation","annihilationUnlocked","subtabClassObject","clickSubtab","BreakdownEntryInfo","keyArgs","dbEntry","_name","createGetter","_multValue","_powValue","_dilationEffect","_isActive","_fakeValue","_icon","_displayOverride","_isDilated","_isBase","_ignoresNerfPowers","lastVisibleAt","cache","createEntryInfo","cached","mouseoverIndex","showGroup","barSymbol","totalString","hasSeenPowers","allowPowerToggle","changeGroup","disabledText","shouldShowEntry","singleEntryClass","expandIcon","expandIconStyle","entryString","hasChildEntries","dilationString","BreakdownEntryInfoGroup","hasVisibleEntries","activeChildren","getResourceEntryInfoGroups","treeGroups","MAX_DATA_POINTS","PercentageRollingAverage","dataPoints","dataPoint","nerfBlacklist","padPercents","percents","padStart","isRoot","percentList","averagedPercentList","hadChildEntriesAt","lastNotEmptyAt","dilationExponent","lastLayoutChange","totalMultiplier","totalPositivePower","inNC12","rollingAverage","isRecent","forbiddenEntries","calculatePercents","powList","totalPosPow","totalNegPow","log10Mult","multFrac","powFrac","totalPerc","nerfedPerc","netPerc","isNerf","iconObj","barSize","nerfString","percString","overrideStr","valueStr","undilated","applyDilationExp","equivMult","finalMult","beforeMult","afterMult","dilProd","MULT_TAB_OPTIONS","MultiplierBreakdownEntry","currentID","currentKey","opt","resourceSymbols","checkActiveKey","act","accessProp","hideCompletedRows","isAutoAchieveActive","boostText","achCountdown","totalCountdown","isObscured","onMouseEnter","onMouseLeave","garbleKey","processedId","processedName","processedDescription","achievedTime","indicatorClassObject","indicatorIconClass","isMouseOver","isCancer","showUnlockState","garbleTimer","achievementTime","isPreRealityAchievement","hasReward","garbledNameTemplate","garbledIDTemplate","garbledDescriptionTemplate","mouseOverInterval","disabledAchievements","NormalAchievement","swapImages","swapImagesButton","canSwapImages","isCancerImages","imageSwapperStyleObject","isCancerTheme","SwapAchievementImagesButton","NormalAchievementRow","achTPEffect","showAutoAchieve","achMultBreak","achMultToIDS","achMultToTDS","achMultToBH","achMultToTP","achMultToTT","renderedRowIndices","allRows","renderedRows","boostList","dimMultList","startRowRendering","renderAnimationId","gameSpeedupFactor","timeToNextAutoAchieve","unlockedRows","lockedRows","targetArray","renderedLockedRows","nonRenderedLockedRows","rowsToRender","stepThroughRendering","ROWS_PER_FRAME","isRendered","descriptionDisplayConfig","NormalChallengeBox","offlineSlider","adjustSliderValueOfflineTicks","sliderPropsOfflineTicks","automatorLogSize","adjustSliderValueAutomatorLogSize","sliderPropsAutomatorLogSize","OptionsButton","parseOfflineSlider","userName","sliderInterval","adjustSliderValue","refreshAutosaveInterval","handleChange","removeNotAvailableCharacters","AutosaveIntervalSlider","SaveFileName","cloudAvailable","canSpeedrun","inSpeedrun","modalTooltip","overwriteTooltip","files","UILabel","themeLabel","notationLabel","notations","availableThemeNames","UpdateRateSlider","SelectThemeDropdown","SelectNotationDropdown","cycleButton","toggleShown","infoCol","cellStyle","singular","infoArray","averageRun","allRuns","runs","longestRow","avgAttr","resourceType","selectedResources","resourceTitles","showRealTime","hasEmptyRecord","shown","hasChallenges","hasIM","points","getRuns","hasRealTime","showRate","challengeText","lastIndex","cells","gameTime","prestigeCurrencyGain","prestigeCurrencyRate","showExtra","formatExtra","allowRate","prestigeCountGain","prestigeCountRate","rpm","margin","padding","PastPrestigeRunsContainer","layers","rateString","stateCount","enterDoomModal","totalRows","completedRows","cappedResources","totalAlchemyResources","galaxyText","galaxiesPerSecond","capRift","barWidth","capRiftName","faded","hovering","shouldEstimateImprovement","estimateImprovement","timeEstimate","contentClass","contentTransform","tooltipContentClass","tooltipContentStyle","tooltipTransform","tooltipArrowClass","tooltipArrowStyle","mainContent","isDarkTheme","tooltipType","axis","showNegativeSign","tooltipContentLightDarkClass","tooltipArrowLightDarkClass","tooltipInternalClass","CustomizeableTooltip","showImprovedEstimate","currentTimeEstimate","projectedTimeEstimate","hasRemnants","galaxyCap","notAffordable","rebuyableId","formattedEffect","hasTimeEstimate","genDB","GalaxyGeneratorUpgrades","secondsUntilCost","emphasisedStart","gainPerSecond","startSacrifice","decayRate","riftName","formatRift","handleMilestoneRequirementTooltipDisplay","barOverlay","hasMilestone","selectedHoverMilestone","selectedMilestoneResourceText","selectedMilestoneDescriptionText","hasEffectiveFill","remToPx","fontSize","borderTop","milestoneResourceText","milestoneDescriptionText","overfill","mouseX","pelleRiftBar","milestonesCloseTo","penalty","strikeReward","PelleStrike","PelleRiftBar","specialRift","fillCurrency","PelleRift","riftDrainPercent","isHovering","shardRate","toggleBought","allUpgrades","best","dilationMult","autoRemnantGain","MendingUnlocked","PelleUpgradeVue","RemnantGainFactor","boughtUpgrades","visibleUpgrades","fadedUpgrades","PelleBarPanel","PelleUpgradePanel","GalaxyGeneratorPanel","canEnterPelle","pelleEffects","numRuns","spectateText","highestIndex","runPage","changePage","findRun","selectedRun","selectRun","milestoneTimes","bestPreviousTimes","prevRunInfo","finalTime","segmentAttr","stdAttr","offlineAttr","offlineFrac","seedAttr","iconAttrs","timeStyle","refTime","runIndices","bestTime","hasTime","showGap","gapStr","isFastest","SpeedrunMilestoneCompare","PreviousSpeedrunInfo","isSpectating","recLength","bestRunIndices","milestoneList","isRaCapped","memoriesPerChunk","memoryBoosts","dimboostUncapped","memoryDescription","showRemembrance","remembranceDescription","remembranceReq","totalLevels","scalingUpgradeText","upgradeClassObject","purchaseMemoryUpgrade","memoryUpgradeCapped","currentMemoryMult","memoryUpgradeCost","nextMemoryUpgradeEstimate","purchaseChunkUpgrade","chunkUpgradeCapped","currentChunkMult","chunkUpgradeCost","nextMemoryChunkUpgradeEstimate","petConfig","memoriesPerSecond","memoryChunksPerSecond","chunkTooltip","baseMemoryChunksPerSecond","memoryMultiplier","memoryGainTooltip","levelUp","nextUnlock","nextScalingUpgrade","requiredMemories","nextLevelEstimate","importantLevels","petStyle","prevGoal","currentUpgrades","nextGoal","missingUpgrades","currentLevelGoal","finalPelleLevel","showNextScalingUpgrade","nextChargedIU","nextChargedBIU","effarigAlchemyResource","upgradeType","isImportant","petName","petID","RaUpgradeIcon","RaPetLevelBar","canGetMemoryChunks","mu19Bought","secondSource","showScalingUpgrade","scalingUpgradeVisible","productionPerMemoryChunk","memoryUpgradeCurrentMult","chunkUpgradeCurrentMult","timeToGoalString","nextUnlockLevel","gone","toggleRemembrance","hasRemembrance","GainPerSecond","RaUpgradeVue","NewRow","RaPet","RaPetRemembranceButton","RaUpgradePanel","showReality","remembranceMult","remembranceNerf","shopUnlocked","remNerfed","RaUpgrades","costScalingTooltip","possibleTooltip","canWarp","totalUpgFunc","disabledRUPGs","RealityUpgradeButton","scrambledText","capMultText","effarigInfinityBonusRG","nextEffarigRGThreshold","ec8Purchases","replicantiChanceSetup","replicantiIntervalSetup","maxGalaxySetup","distantRG","remoteRG","isUnlockAffordable","unlockCost","costDescription","replicantiUpgrade","formatDescription","remainingTimeText","updateRateMs","ticksPerSecond","logGainFactorPerTick","getReplicantiInterval","log10GainFactorPerTick","LN10","log10GainFactorPerTickUncapped","replicantiAmount","isAbove308","isUncapped","postScale","ReplicantiGrowth","scaleFactor","scaleLog10","gainFactorPerSecond","milestoneStep","nextMilestone","timeToThousand","timeEstimateText","timeFromZeroRG","baseGalaxiesPerSecond","effectiveMaxRG","effectiveCurrentRG","secondsPerGalaxy","canBuyMore","allGalaxyTime","pending","pendingTime","leftPercentAfterGalaxy","thisGalaxyTime","resetActionDisplay","galaxyCountDisplay","isAutoActive","autobuyerTextDisplay","handleAutoToggle","isDivideUnlocked","boughtGalaxies","extraGalaxies","z","ReplicantiGainText","ReplicantiUpgradeButton","ReplicantiGalaxyButton","isInEC8","hasTDMult","multTD","hasDTMult","multDT","hasIPMult","multIP","hasRaisedCap","canSeeGalaxyButton","estimateToMax","hasFree","has310","idCapMult","tdCapMult","ReplicantiUpgradeButtonSetup","formatInterval","actualInterval","applyModifiers","intervalNum","additionalEffect","hasMaxText","toMaxTooltip","vacuumText","distantRGStart","remoteRGStart","bonusRG","calculateEstimate","SecretAchievementRow","SecretAchievements","iapDisabled","nextMult","chosenSet","lockedCount","purchaseButtonObject","performPurchase","canAfford","hasChosen","isSingleCosmeticSet","isAllCosmeticSets","allSetsUnlocked","currentMultForDisplay","nextMultForDisplay","lockCosmetics","ShopButton","Loading","displayAll","startTimeStr","maxMilestone","SpeedrunMilestoneSingle","lastIndexOf","saveAge","totalNews","uniqueNews","secretAchievementCount","fullTimePlayed","matterScale","infinityCountString","banked","formatDecimalAmount","thisReal","bestRate","eternityCountString","projectedBanked","bankRate","realityClassObject","bestReal","MatterScale","proton","estimate","distScaling","distanceScale","planck","planckedMatter","macroScale","verb","microScale","micro","microObjects","macro","macroObjects","low","high","distances","mtr","timeSinceCreation","hasBest","lastMatterTime","updateMatterScale","bestAM","lastMachinesString","runReward","pourButtonClassObject","pour","pourText","possibleFillPercentage","pouredAmountCap","unlockInfo","unlockDescriptionHeight","unlockInfoTooltipArrowStyle","unlockInfoTooltipClass","PerkShopUpgradeButton","isPouredAmountCapped","hasEPGen","raisedPerkShop","canUnlockNextPour","unlockInfos","showRunReward","PerkShopUpgrade","borderRight","pourRM","timePoured","possibleFill","rmMultiplier","maxPrice","lastUnlock","tachyons","dilatedTimeGainText","tachyonGalaxyGain","galaxyTimeEstimate","baseGalaxyText","totalGalaxies","scOneMult","upgradeRow","dilate","hasGain","disableText","requiredForGain","remnantRequirement","showRequirement","remnantRequirementForDilation","canDilateInPelle","hideEstimate","currentDT","currentDTGain","rebuyableBoost","tp","getDilationTimeEstimate","DilationButton","DilationUpgradeButton","dilatedTimeIncome","baseGalaxies","hasPelleDilationUpgrades","isPastSCone","scOnePower","isPastSCtwo","scTwoStart","scTwoPower","pelleRebuyables","allRebuyables","upgradeRows","allSingleUpgrades","rawDTGain","tickProp","drainFactorPerTick","drainPerSecond","estimateText","upgradeThreshold","multPerTickspeed","tickspeedSoftcap","shardsPerSecond","areAutobuyersUnlocked","requirementReached","buyTimeDimension","buttonContents","tooltipContents","buyMaxTimeDimension","showTTCost","ttCost","currTT","formattedTTCost","formattedEPCost","buySingleTimeDimension","TimeDimensionRow","shortenTSU","multToNext","nextShards","tryUnlockTimeDimensions","maxAllTimeDimensions","toggleAllTimeDims","trueCap","NewTimeDimensionRow","ClassicTimeDimensionsTab","ModernTimeDimensionsTab","exportStudyTree","respecClassObject","studyComponent","enslavedStudy","secretStudyConnection","enslavedStudyConnection","isOverridden","pathClass","connection","pathClassOf","studyClass","eternityChallengeAnim","shiftClick","doomedRealityStudy","customCostStr","showCost","showStCost","specialClick","eternityChallengeRunning","isCompleteEC","pathClasses","showDefaultCostDisplay","costCond","costNumber","ttStr","stStr","uselessTimeStudies","itemPosition","itemWidth","itemHeight","TimeStudyRow","isWide","itemCount","treeWidth","rowLeft","TimeStudyRowLayout","TimeStudyTreeLayout","normalRowLayout","wideRowLayout","normalRow","wideRow","TS","EC","STUDY_TREE_LAYOUT_TYPE","ALTERNATIVE_SXY_MORE_TRIAD_STUDIES","ALTERNATIVE_62","ALTERNATIVE_62_181","ALTERNATIVE_TRIAD_STUDIES","ALTERNATIVE_181","rowIndex","columnIndex","TimeStudySetup","allConnections","TimeStudyConnectionSetup","TimeStudyConnection","heightNoSpacing","_instances","alt62","alt181","theoremTimeEstimate","clickHandler","TimeStudyButton","maxTT","achRows","hasRequirement","showTotalCompletions","hasNumberRequirement","requirementCurrent","needsFirstLinebreak","needsSecondLinebreak","wasRequirementPreviouslyMet","requirementTotal","enslavedTT","showSTCost","hintText","pathEntry","clickTime","achGiver","NormalTimeStudy","ECTimeStudy","EnslavedTimeStudy","DilationTimeStudy","TriadTimeStudy","SecretTimeStudy","HiddenTimeStudyConnection","MyriadTimeStudy","layoutType","vLevel","renderedStudyCount","renderedConnectionCount","delayTimer","allStudies","treeStyleObject","incrementRenderedCount","shouldRequestNextFrame","isSuperFlipped","setFlip","hex","hexId","isRunButton","isSuperRunButton","zIndex","hexColor","canBeReduced","showReduction","formattedDescription","runMilestones","isReduced","reductionValue","showRecord","reductionCost","reductionTooltip","reduceGoals","hasAlchemy","superRunButtonClassObject","startSuperRun","runSuperDescription","totalUnlocks","rowId","colId","rewardText","celestialUnlockClassObject","unlockCelestial","barProgressStyle","VUnlockRequirement","canUnlockCelestial","MU15bought","mainUnlockDB","hexGrid","gList","MU14bought","maxed","closeModal","ModalCloseButton","MendingUpgradeButton","mendCount","MendingMilestoneButton","MVRoR","RaToR","totalUpg","isWarped","WarpRealityButton","WarpUpgradeButton","MvRoR","unlockDescriptionWidth","unlockDescriptionBottom","KohlerProgressUnlocks","borderBottom","corruptedFrags","corruptionsZeroCheck","bonusInfo","rewardInfo","corruptionSet","corruptionSetSet","corruptionSliderProps","localPenalties","dimLimNerf","timeCompMult","CorruptionUpgradeButton","corruptionFullEffects","boostPoints","txt1","txt2","txt3","buyMultiversalDimension","buyMaxMultiversalDimension","MultiversalDimension","formattedMvRCost","buySingleMultiversalDimension","ClassicMultiversalDimensionRow","percentSoftcap","maxAllMultiversalDimensions","toggleAllMultiversalDims","NewMultiversalDimensionRow","ClassicMultiversalDimensionsTab","ModernMultiversalDimensionsTab","TabComponents","AntimatterDimensionsTab","InfinityDimensionsTab","TimeDimensionsTab","OptionsSavingTab","OptionsVisualTab","OptionsGameplayTab","StatisticsTab","ChallengeRecordsTab","PastPrestigeRunsTab","GlyphSetRecordsTab","SpeedrunMilestonesTab","PreviousSpeedrunTab","NormalAchievementsTab","SecretAchievementTab","TeresaTab","EffarigTab","EnslavedTab","VTab","RaTab","LaitelaTab","PelleTab","AutobuyersTab","AutomatorTab","NormalChallengesTab","InfinityChallengesTab","EternityChallengesTab","InfinityUpgradesTab","BreakInfinityTab","ReplicantiTab","TimeStudiesTab","EternityUpgradesTab","EternityMilestonesTab","TimeDilationTab","GlyphsTab","RealityUpgradesTab","ImaginaryUpgradesTab","PerksTab","BlackHoleTab","AlchemyTab","CelestialNavigationTab","ShopTab","MultiplierBreakdownTab","MendingMilestones","WarpReality","CorruptionTab","KohlersRealm","MultiversalDimensionsTab","DesktopIcons","links","s12Games","isSelectingIcon","clearSelected","S12Windows","isMinimised","isClassic","subtabTimeoutId","hoveringTab","setHoveringTab","unsetHoveringTab","instant","tabButtonPositions","GameUiComponentFixed","BackgroundAnimations","topPadding","startupSound","useCompact","windowWidth","getSubtabsPosition","centerPt","subtabsWidth","minLeft","taskbarIcon","offsetLeft","TaskbarIcon","S12Subtabs","S12Taskbar","ClassicUi","SynergismUi","ModernUi","S12Ui","S12UiFixed","S12DesktopIcons","makeRecomputable","watcher","recomputed","original","getter","vm","mixin","watchers","_computedWatchers","observable","ReactivityComplainer","complain","checkReactivity","__ob__","flushPromise","globalClickListener","maxTouchPoints","msMaxTouchPoints","DocumentTouch","flushEvents","nextTick","VTooltip","use","methodStrategy","optionMergeStrategies","parentVal","childVal","hasUpdate","VueGtag","GameUIComponent","scrollBy","askMendingConfirmation","mendingReset","deleteGlyph","unequipAll","AntimatterMult","perkId","_lazyValue","_lazyCost","corruptionZeroCheck","generateLevel","MedingInitLevel","MedingInitRarity","refreshActive","MendingMilestoneState","DilationUpgradeAutobuyerState","_upgradeName","upgradeName","DimBoostAutobuyerState","galaxyCondition","limitCondition","EternityAutobuyerState","willEternity","GalaxyAutobuyerState","ImaginaryUpgradeAutobuyerState","InfinityDimensionAutobuyerState","canAutobuy","IPMultAutobuyerState","EPMultAutobuyerState","RealityAutobuyerState","shouldCheckFilter","proc","rmProc","glyphProc","RealityUpgradeAutobuyerState","ReplicantiGalaxyAutobuyerState","ReplicantiUpgradeAutobuyerState","autobuyerMilestone","autobuyerTick","SacrificeAutobuyerState","sacrificeReset","SingularityAutobuyerState","TickspeedAutobuyerState","TimeDimensionAutobuyerState","TimeTheoremAutobuyerState","buyOneOfEach","addToQueue","clearQueue","blendCel","cels","blendTime","prevCel","currCel","nextCel","lastTime","QuoteLine","_parent","_showCelestialName","_celestialArray","replacementMatch","_line","CelQuotes","_lines","present","fromYears","secondaryRequirement","hasLevelRequirement","hasRarityRequirement","isStoredRealTimeCapped","addedCap","efficiency","diffMs","maxGain","used","release","effectiveGamespeed","nextHintCost","hintCostIncreases","hintTime","fromDays","spendTimeForHint","toNunber","EnslavedProgressState","hasHint","hintInfo","completedInfo","BASE_COSTS","COST_SCALER","TesseractScaler","nextTesseractCost","capIncrease","totalCount","boundless","TesseractAutobuyerState","MusicGlyphAutobuyerState","NonRepeatableRealityUpgradeAutobuyerState","NonRepeatableImaginaryUpgradeAutobuyerState","RaPetAutobuyerState","_petName","TeresaMemoryAutobuyerState","EffarigMemoryAutobuyerState","EnslavedMemoryAutobuyerState","VMemoryAutobuyerState","RaMemoryAutobuyerState","LaitelaMemoryAutobuyerState","PelleMemoryAutobuyerState","PelleRebuyableUpgradeAutobuyerState","PelleUpgradeAutobuyerState","nextUpgrade","GalaxyGeneratorUpgradeAutobuyerState","GalaxyGeneratorSacrificeAutobuyerState","MendingAutobuyerState","willMend","SingularityCapAutobuyerState","teresaMem","effarigMem","enslavedMem","vMem","raMem","laitelaMem","pelleMem","rebuyablePelle","galgenUpgrade","singCapInc","antimatterDimensions","infinityDimensions","timeDimensions","singleComplex","arrays","N","painful","ScientificNotation","engineering","EngineeringNotation","letters","LettersNotation","standard","StandardNotation","EmojiNotation","MixedScientificNotation","mixedEngineering","MixedEngineeringNotation","logarithm","LogarithmNotation","brackets","BracketsNotation","InfinityNotation","roman","RomanNotation","dots","DotsNotation","zalgo","ZalgoNotation","HexNotation","imperial","ImperialNotation","clock","ClockNotation","prime","PrimeNotation","bar","BarNotation","shi","ShiNotation","blind","BlindNotation","BlobsNotation","AllNotation","DIM1","DIM2","tutorialStates","atState","hasFirstBoost","fromState","nextState","prevRunIndices","unlockSet","backUpOptions","automatorConstants","automatorScripts","glyphCosmetics","speedrunRecords","hasSpeedrun","rmPoured","PerkShopUpgradeState","toCreate","TeresaUnlockState","Progress","stage1","stage2","stage3","setUnlockProgress","KohlerProgressUnlockState","MEND","MEND_COMPLETED","glyphLevelCap","glyphEffectAmount","genEffectBitmask","nongenEffectBitmask","EffarigUnlockState","VRunUnlockState","conditionBaseValue","reduction","stepCount","modifiedStepCount","nextHardReductionCost","nextSuperHardReductionCost","nextNormalReductionCost","tiersReduced","conditionValue","playerData","forceCap","VUnlockState","VRunUnlock","currReductionSteps","ts306","RaUnlockState","RaPetState","requiredMemoriesForLevel","nerf","canBuyMemoryUpgrade","canBuyChunkUpgrade","spendsMemories","generateChunks","newMemoryChunks","memsPerSecond","shopMemMultEffect","currentCelestial","newMemories","RaUpgrade","shopWeakenScalingEffect","alchauto","memoryTick","memoryBoostResources","raPointsGain","ticktime","powered","GainPerSec","raGainPointLoop","perMemScaling","fixCostMulti","post15Scaling","post25Scaling","expToGain","multiplierInPower","multiplierOutPower","HUavaliable","estimateDecimal","checkForQuotes","activeMode","updateAlchemyFlow","ema","sortedReactions","combineReagents","applyAlchemyReactionsAuto","hoursFromUnlock","getSacrificePower","sacPower","isBoosted","baseAdditionColor","baseEmpowermentColor","baseBoostColor","RaUpgradeState","RebuyableRaUpgradeState","AlchemyResourceState","_before","unlockedWith","BasicAlchemyResourceState","AdvancedAlchemyResourceState","reagentCaps","AlchemyReaction","_product","_reagents","reactionYield","forcingFactor","totalYield","actualYield","maxFromReaction","baseProduction","reactionEfficiency","prodBefore","prodAfter","cappedYield","reagentBefore","reagentAfter","diffBefore","diffAfter","maxReagent","afterReaction","synergism","unpredictabilityEffect","unpredictability","effectiveYield","mapReagents","DimensionState","_tier","_getData","DISPLAY_NAMES","_displayName","SHORT_DISPLAY_NAMES","_shortDisplayName","productionForDiff","produceCurrency","produceDimensions","dimensionCount","INTERVAL_COST_MULT","POWER_DM_COST_MULT","POWER_DE_COST_MULTS","INTERVAL_START_COST","POWER_DM_START_COST","POWER_DE_START_COST","INTERVAL_PER_UPGRADE","COST_MULT_PER_TIER","DarkMatterDimensionState","tierFactor","commonDarkMult","destabilizeBoost","MMBoostDE","lai2","affordGeometricSeries","rawIntervalCost","intervalCostIncrease","rawPowerDMCost","powerDMCostIncrease","rawPowerDECost","powerDECostIncrease","maxIntervalPurchases","buyManyInterval","buyManyPowerDM","buyManyPowerDE","productionDM","production","unlockedDimensions","upgradeInfo","cheapestUpgrade","SingularityMilestoneState","_rawEffect","nerfCompletions","unnerfCompletions","previousGoal","rawCompletions","prog","lastNotified","sortedForCompletions","moveNewToTop","completedVal","currComp","SingularityMilestoneThresholds","unnotifiedMilestones","MMBoostSing","IU10","newMilestones","Zalgo","chars","str_arr","acc","rand","disabledMechanicUnlocks","IPMults","EPMults","InfinitiedMults","eternityMults","EPgen","autoec","replicantiIntervalMult","tpMults","continuum","blackhole","glyphsac","antimatterDimAutobuyer1","antimatterDimAutobuyer2","antimatterDimAutobuyer3","antimatterDimAutobuyer4","antimatterDimAutobuyer5","antimatterDimAutobuyer6","antimatterDimAutobuyer7","antimatterDimAutobuyer8","timeTheoremAutobuyer","rupg10","dtMults","alteration","doomedGlyph","shopTab","tabsToIgnore","ignoredIDs","mechanic","gainStuff","activeGlyphType","isScaling","MMBoostRS","toInterval","RebuyablePelleUpgradeState","PelleUpgradeState","PelleStrikeState","RiftMilestoneState","checkMilestoneState","lastChecked","RiftState","_milestones","spentPercentage","additional","activeCap","checkMilestoneStates","afterTickAmount","hasReturnedGlyphSlot","generationCaps","capObj","findFreeIndex","GalaxyGeneratorUpgrade","TAB_START_HIDE","DISPLAY_DESTROYER_QUOTES","CREDITS_END","_additionalEnd","Destroyer","vEffect","vEffectAdditional","returnVal","disabledDims","highestActive","overwrite","overwriteText","cancelClass","doCancel","confirmClass","doConfirm","confirmationClass","setting","tooltipText","confirmation","ModalConfirmationCheck","showCancel","showConfirm","confirmFn","cancelFn","ModalWrapperChoice","conflict","hasDifferentName","suggestionText","saveType","timePlayed","prestigeCount","prestigeResource","extraProgressIndicator","otherData","compareLayeredValues","formatSmall","propArray","formatArray","fallbackString","isSameLayer","isBetter","layerName","layerValue","parseColor","colorTag","SaveInfoEntry","goodStyle","badStyle","cloudProg","compositeProgress","warnOverwrite","localProg","doNotSave","noOverwriteInfo","overwriteInfo","wrongHash","handleYesClick","entranceLabel","challengeIsCompleted","conditionOfChallenge","topLabel","keepAntimatter","perkANRBought","keepDimBoost","resetResouces","resetList","tickspeedFixed","tickspeedInfo","isFirstReset","ipGainInfo","startingResources","isFirstInfinity","confirmOption","alternateCondition","alternateText","gainedResources","ResetModal","startingBoosts","startingAM","willStartWithGalaxy","firstInfinityInfo","keepDimensions","extraLine","gainText","petId","isPlural","EnterCelestialsRaPet","laitelaFastest","teresaBestAM","teresaRunMult","effarigDone","effarigLayer","enslavedDone","laitelaTime","effarigStage","EPSinceLabel","animateAndDilate","exitingEC","gainedEPOnEternity","startWithIP","startingIP","isRestarting","isCelestial","isInEC","playAnimation","willHardReset","hasExtraNG","confirmationToDisable","canConfirm","confirmModal","firstRealityText","gained","firstReality","glyphClass","nativeOn","levelStats","warnText","simRealities","hasSpace","hasChoice","bestLevel","levelDifference","effarigUnlocked","willAutoPurge","getGlyphs","simRMGained","currentGlyph","divideReplicanti","reductionString","resetTerm","remainPlural","isS11Active","ModalWrapper","ModalOptionsToggleButton","ModalWrapperOptions","tachyonsUnlocked","animatedThemeUnlocked","fullCompletion","AwayProgressOptionsEntry","toggleOffline","offlineOptionClass","nextSave","deleteText","slotData","progressStr","slotType","lastSaved","formattedTime","lastSave","BackupEntry","ignoreOffline","backupSlots","entryNumber","ConfirmationOptionsEntry","noConfirmations","cancelSet","chooseSet","currentSet","setContents","fakeGlyph","setInModal","CosmeticSetDropdown","initialSet","isCosmetic","symbols","colors","cycleBG","glyphBGStr","noEffectStyle","infoLabel","resetAll","resetSingle","typeClass","selectedIndex","defaultKeySwap","resetIndividual","glyphId","darkKeySwap","defaultOptionClassObject","boxStyle","defaultOption","optionChar","slideWindow","windowStyle","singleOption","optionClassObject","attrString","isSymbol","leftmostIndex","isSingleGlyph","canScroll","windowSize","updateSelected","checkOption","colorProps","invertBW","GlyphCustomizationSlidingWindow","availableSymbols","availableColors","GlyphCustomizationSingleType","nonBaseTypes","sortedBase","hasCustomSets","hasSpecialTypes","currType","fixedCosmetic","SelectGlyphInfoDropdown","GlyphCustomization","isAlmostEnd","rowClass","currentTarget","toggleVisibility","changeEnabled","rowVisibleIndicatorClass","isModernUI","HiddenSubtabsButton","isHidable","unlockedSubtabs","alwaysVisible","rowVisibleIndicatorTooltip","unhideTab","HiddenTabGroup","shortcutNames","shortcutKeys","moreShiftKeyInfo","updateIndicies","timeStudyUnlocked","glyphSacUnlocked","isElectron","shiftKeyFunctions","shiftKeyInfo","hotkeyCount","newsOnOffLabel","adjustSliderValueRepeatBuffer","sliderPropsRepeatBuffer","adjustSliderValueAIChance","sliderPropsAIChance","adjustSliderValueSpeed","sliderPropsSpeed","confirmPrefs","isPreferred","dimensionPath","pacePath","dimensionOptions","paceOptions","pref","cosmeticTypeClass","isValidSpeed","setTestSpeed","handleTestSpeedInput","speedUpDuration","speedUpStart","speedUpRestart","formatDuration","durationText","effectiveDurationText","messageIndex","handleLeftButtonClick","handleRightButtonClick","handleNoClick","deleteCompanion","removeFromInventory","confirmedDelete","findByInventoryIndex","extraMessage","refiningOrSacrificing","glyphsDeleted","glyphsTotal","isSacrificing","refiningSacrificingOrDeleting","explanation","harsh","resourceUnlocked","confirmedRefine","glyphAlchemyResource","glyphRefinementGain","glyphEffectiveCap","refineGlyph","currentGlyphSacrifice","confirmedSacrifice","presetNumber","loadPreset","loadCurrent","paramTypeObject","updateButton","buttonTextStrings","templateInputs","refInFor","updateTemplateProps","validWarnings","warning","invalidInputCount","copyAndClose","templateProps","currentPreset","templateScript","ScriptTemplate","boolProp","treeStudies","typeObj","nameMatch","idMatch","nameStr","idStr","treePreset","newTemplateBlock","headerText","nothingHappened","somethingHappened","hideEntry","formattedName","formatBlackHoleActivations","formatBefore","formatAfter","removed","formatPseudo","increased","isBlackHole","isVeryLarge","numberAsDecimal","AwayProgressEntry","offlineStats","titleText","progressStage","shownResources","isFocusedResource","showHowTo","tabToOpen","hasDedicatedH2p","focusedResourceName","CatchupEntry","CatchupGroup","shownEntry","setShownEntry","formatDate","entryId","changelogBody","confirmChange","updateName","actualName","deleteConstants","constantCount","scriptList","realityHintsLeft","glyphHintsLeft","hintCost","formattedStored","currentStored","canGetHint","giveRealityHint","giveGlyphHint","shownEntries","hints","progressEntries","storeRate","alreadyWaited","decaylessTime","minCostEstimate","K","timeToGoal","glyphHintCount","hintNum","glyphSetId","maxGlyphEffects","typeCapitalized","rarityPercent","effectObj","showLevel","typeStyle","rarityStyle","effectStyle","glyphEffectListHeight","glyphEffectList","effectStrings","heights","formatEffectString","rawDesc","singleValue","alteredValue","DisableBool","GlyphShowcasePanelEntry","maxEffects","searchValue","searchObj","searchObjId","activeTab","topThreshold","isFirstIrrelevant","setActiveTab","tabId","matchingTabs","unlockedTabs","matchedEntry","h2pTab","matches","searchObjThis","searchObjOther","importSave","lineCount","ignorePresets","overwrittenPresetCount","presetButtonText","ignoreConstants","willOverwriteConstant","extraConstants","constantButtonText","isImportingExtraData","hasExtraData","scriptContent","importedPresets","importedConstants","hasNewConstants","constantCountAfterImport","currentConstants","isImportingPresets","isImportingConstants","currentPresets","mismatchedPresets","toImport","existingPreset","inputIsValid","selectStr","basicCountStr","trashStr","settingTooltipText","currentSettings","parsedSettings","topLevelClassObject","rarityStr","effectStr","scoreStr","effectData","effectClassObject","getEffectDesc","effectScoreStr","currSettings","settingsChanged","capitalized","changedValue","oldReq","newReq","oldScore","newScore","effectEntry","fullStr","isSelected","oldStr","newStr","ImportFilterSingleType","typeInfo","partIndex","subparts","inputIsDev","fileName","lastOpened","changeOfflineSetting","offlineType","offlineDetails","saveCheckString","OFFLINE_PROGRESS_TYPE","IMPORTED","LOCAL","offlineImport","rawString","of","inputIsValidSave","inputIsSecret","isSecretImport","isSecretTheme","isFromFuture","updateOfflineSettings","durationInMs","willLoseCosmetics","currSets","importedSets","willLoseSpeedrun","importConstants","willImport","shortenString","missedImports","constantNames","updateImportStatus","openLink","openAssociatedModal","InformationModalButton","formatAntimatter","LoadGameEntry","choiceEnum","officialSeed","seedValue","inputSeed","handleSeedInput","convertedInput","hashStringToSeed","imul","h2","nerfs","realityGlyphLevel","formatGlyphEffect","createRealityGlyph","possibleEffects","realityEffectConfigs","minRealityEffectIndex","cfg","effectTemplate","inventoryIndex","swapIntoActive","returnedSTDCount","respecAll","currentMultiplier","nextMultiplier","toggleGlow","glowOptionClass","resourceStr","sortStr","completedStr","orderStr","originalMilestones","laitelaUpgradeExtraMilestones","resourceVal","sortVal","orderVal","onInfoPage","willStartRun","nextPage","confirmPhrase","macConfirm","StdStoreRow","macPurchaser","modalTitle","confirmText","deleting","invalidMessage","importedTree","hasInfo","isImporting","inputIsValidTree","newStudiesArray","convertInputShorthands","importDestString","newStudies","formatTheoremCost","intoEmpty","tt","st","strTT","strST","getStudyForceBoughtState","disregardCurrentStudies","getConnectionForceBoughtState","forceIsBought","isNewFromImport","ForceBoughtState","getState","notBought","unspecified","forceState","currentState","PseudoTimeStudyButton","PseudoTimeStudyConnection","showPreview","studyStr","treeStatus","firstPaths","secondPaths","savedImportString","StudyStringLine","StudyStringPreview","StudyTreeInfo","truncatedInput","spentTheorems","invalidStudies","dimensionPaths","combinedTreeObject","stringEC","getECFromString","hasExclamationPoint","canUnlockEC","hasECMismatch","coloredString","truncateInput","secretStrings","newInput","importTree","savePreset","formatStudyList","otherMode","isCurrentlyBlocks","listEntries","toggleUI","showStoredGameTime","realityInvalidate","disableLock","upgradeStr","endAM","corruptionInfos","S12Games","isSelectingGame","S12GameEntries","nextModalID","_component","_modalConfig","_priority","_closeEvent","applyCloseListeners","prestigeOrder","shouldClose","removeFromQueue","modalConfig","_uniqueID","_props","modalQueue","sortModalQueue","singleQueue","ChallengeConfirmationModal","TimeModal","getSaveInfo","pelleAM","pelleLore","EternityChallengeStartModal","startInfinityChallenge","InfinityChallengeStartModal","startNormalChallenge","NormalChallengeStartModal","CatchupModal","DimensionBoostModal","AntimatterGalaxyModal","BigCrunchModal","ExitChallengeModal","ReplicantiGalaxyModal","EternityModal","enterDilation","EnterDilationModal","ExitDilationModal","RealityModal","ResetRealityModal","EnterCelestialsModal","HardResetModal","backupWindows","BackupWindowModal","enterSpeedrun","SpeedrunModeModal","ModifySeedModal","ChangeNameModal","ArmageddonModal","ResetMendingModal","confirmationOptions","ConfirmationOptionsModal","infoDisplayOptions","InfoDisplayOptionsModal","awayProgressOptions","AwayProgressOptionsModal","GlyphDisplayOptionsModal","CosmeticSetChoiceModal","SingleGlyphAppearanceModal","HotkeysModal","newsOptions","NewsOptionsModal","animationOptions","AnimationOptionsModal","HiddenTabsModal","preferredTree","PreferredTreeModal","speedUp","SpeedUpModal","speedUpReport","SpeedUpReportModal","UpgradeMechanicLockModal","DeleteCompanionGlyphModal","glyphDelete","DeleteGlyphModal","PurgeGlyphModal","SacrificeGlyphModal","RefineGlyphModal","PurgeAllUnprotectedGlyphsModal","PurgeAllRejectedGlyphsModal","GlyphShowcasePanelModal","UndoGlyphModal","ReplaceGlyphModal","enslavedHints","EnslavedHintsModal","RealityGlyphCreationModal","GlyphSetSaveDeleteModal","UiChoiceModal","H2PModal","InformationModal","CreditsModal","ChangelogModal","AwayProgressModal","loadGame","LoadGameModal","ImportSaveModal","ImportFilterModal","ImportAutomatorDataModal","DeleteAutomatorScriptModal","AutomatorScriptTemplate","SwitchAutomatorEditorModal","ClearConstantsModal","ImportTimeStudyConstants","AutobuyerEditModal","StdStoreModal","StudyStringModal","SingularityMilestonesModal","PelleEffectsModal","SacrificeModal","BreakInfinityModal","RespecIAPModal","WarpRealityModal","CorruptionFullEffectsModal","S12GamesModal","CloudSaveConflictModal","CloudLoadConflictModal","CloudInvalidDataModal","onAccept","addImportConflict","importingSave","currentSave","messagePriority","currPriority","closeButton","MessageModal","isDefault","isAnimated","cssClass","getSelection","removeAllRanges","secretThemeIndex","secretThemes","sha","isAlreadyUnlocked","dark","metro","animated","loadCheck","login","secretImports","secretImportIndex","AchievementState","_row","_column","_bitmask","_inverseBitmask","isPreReality","isPrePelle","isPreMend","prePelle","preRealityRows","preMendRows","unlockedAchievements","vFixMult","vRaUpg","basePower","SecretAchievementState","AchievementTimer","isRealTime","advance","RealityUpgradeState","realityReached","RebuyableRealityUpgradeState","GlyphEffectOrder","reverseBitstring","levelBoost","bestUndoGlyphCount","glyphIndexArray","useProtectedSlots","isUsableIndex","rowChange","newRows","rowsToAdd","rowsMoved","hasMoved","orig","moveGlyphRow","dest","hasOverlap","stacked","freeIndex","targetGlyph","searchList","fuzzyMatch","op","comp1","comp2","matchedEffects","large","small","allMatches","lvl","sym","activeGlyph","activeIndex","forbiddenByPelle","canEquipSpecial","maxSpecial","saveUndo","updateRealityGlyphEffects","updateMaxGlyphCount","forceToUnprotected","targetRegion","corruptionGlyph","stillEquipped","fastReality","hasOther","unequipNonCursed","append","unequip","requestedInventoryIndex","storedIndex","moveToEmpty","glyphA","glyphB","swapGlyph","isExistingGlyph","makeID","isProtectedIndex","addVisualFlag","sortFunction","glyphsToSort","freeSpace","byType","totalDesiredPadding","biggestPadding","outIndex","autoEquipBetterGlyphs","compareFunction","sameTypeGlyphs","candidate","autoEquipByLevel","autoEquipByPower","autoEquipByScore","autoEquipByEffect","isObjectivelyUseless","inventoryIn","hasSomeBetterEffects","comparedEffects","toCompare","compareThreshold","betterCount","deleteGlyphs","isHarsh","toBeDeleted","inventoryCopy","fakePurgeInventory","isCustomGlyph","unprotectedGlyphs","processSortingAfterReality","processAutoEquipAfterReality","omegaInstabilityThreshold","clearUndo","undoData","totalPurchased","ecs","thisEternityTime","thisRealityTime","dilationStudies","dilationRebuyables","DilationUpgrades","inventorySlot","ecIndex","fromId","startingReality","activeGlyphList","currCount","singleGlyphHash","cursedGlyph","GlyphSacrificeState","ignoreCelestialEffects","CosmeticGlyphType","_defaultSymbol","_defaultColor","_canCustomize","defaultSymbol","defaultColor","isNormallyDark","custom","functionalGlyphs","cosmeticsEnabled","sortedArray","getHue","rawHue","blackArr","whiteArr","longer","shorter","combined","rarityEntry","isLight","colorKey","colorStr","toUnlock","allSymbols","allColors","selectedSymbol","selectedColor","GlyphEffectState","_adjustApply","adjustApply","effectKey","getTotalEffect","getGlyphEffectValues","baseStrength","glyphEffect","numEffects","effectValues","effectNames","cursedEffects","conflictingEffects","combineFunction","GlyphRNG","SECOND_GAUSSIAN_DEFAULT_VALUE","toReturn","isFake","fakeSeed","fakeSecondGaussian","FakeGlyphRNG","MusicGlyphRNG","initialStrength","rngIn","typeIn","randomNumberOfEffects","generateEffects","generateRealityEffects","maxID","strengthMultiplier","rarityBoost","afterRaAnswer","gaussianBellCurve","relicShardFactor","increasedRarity","random1","random2","numberOfEffects","sortedRealityEffects","unincluded","typesSoFar","maxOfSameTypeSoFar","realityCount","groupNum","groupIndex","initSeed","typePerm","typePermIndex","uniformEffects","startID","typesThisReality","effectPerm","newMask","replacable","toRemove","dimPowers","fake","tot","handleSpecialGlyphTypes","attemptRefineGlyph","pre10kFactor","post10kFactor","toGain","askConfirmation","glyphMaxValue","rarityModifier","glyphActualValue","amountUntilCap","currentCap","capAfterRefinement","higherCap","decoherence","rawRefinementGain","refinementGain","decoherenceGain","glyphTypeName","otherResource","maxResource","typeCfg","neg","missingEffects","effectScore","NEGATIVE_INFINITY","ANY","thresholdValue","glyphScore","sources","getGlyphLevelSources","totalWeight","scaledWeight","weightKeys","percent","fracPart","missingPercent","epCoeff","epBase","replPow","replCoeff","replBase","dtPow","dtCoeff","dtBase","eterBase","staticFactors","blendExp","preScale","adjustFactor","powEffect","baseLevel","scaledLevel","instabilitySoftcap","ultraInstabilitySoftcap","omegaInstabilitySoftcap","instability","hyperInstability","ultraInstability","omegaInstability","incAfterInstability","gameDeltaTime","toMilliseconds","timespan","deltaTimeFull","bestEternityRealTime","bestMendRealTime","nonActivePathReplicantiGalaxies","getTickSpeedMultiplier","baseMultiplier","galWeakStrength","finalAnswer","multiplySameCosts","boughtTickspeed","tickExtensionTickspeed","corruptPen","BASE_SOFTCAP","GROWTH_RATE","GROWTH_EXP","logTickmult","logShards","uncapped","priceToCap","desiredCost","costFormulaCoefficient","boughtToCost","derivativeOfBoughtToCost","newtonsMethod","oldApproximation","approximation","originalPurchases","tickExtensionTimeShard","applyNDMultipliers","applyNDPowers","glyphDilationPowMultiplier","buy10Value","glyphPowMultiplier","glyphEffarigPowMultiplier","onBuyDimension","resetAmountUpToTier","challengeCostBump","remainingUntil10","howMany","buyUntilTen","bulkLeft","maxBought","buying","AntimatterDimensionState","BASE_COST_MULTIPLIERS","C6_BASE_COSTS","_c6BaseCost","C6_BASE_COST_MULTIPLIERS","_c6BaseCostMultiplier","corruptionPen","continuumAmount","multiplyIC5Costs","cappedProductionInNormalChallenges","atomDilutionCorruption","hasBigCrunchGoal","maxTierProduced","nextTierOffset","areEnabled","InfinityDimensionState","UNLOCK_REQUIREMENTS","COST_MULTS","POWER_MULTS","antimatterRequirementReached","lockString","purchasesUntilHardcap","costScaling","tDc","portionToSpend","isMaxAll","canSpend","cheapestDim","TimeDimensionState","E6000_SCALING_AMOUNTS","_e6000ScalingAmount","COST_THRESHOLDS","e6000ScalingAmount","costMultIncreases","scalingPast1e6000","pC","firstThreshold","secondThreshold","e6kThreshold","resetMultiversalDimensions","updateMultiversalDimensionCosts","fullResetMultiversalDimensions","MultiversalDimensionState","internal","ids","studyDB","studiesString","studyCluster","studyRangeSplit","studyRangeToArray","tsObject","ecString","ecID","ecDB","firstNumber","lastNumber","studiesArray","checkCosts","toBuy","hasRequirements","buySingleStudy","checkOnlyStructure","reqSatisfied","hasForbiddenStudies","hasEnoughTT","secondaryGoal","isEntryGoalMet","stDiscount","stNeeded","maxST","hasST","hasTT","pathSet","validPaths","ecStudies","invalidateRequirement","studiesToBuy","allSecondaryRequirementsMet","cachedCurrentRequirement","quiet","getTP","override","_from","_to","_override","sacrificeExponent","preIC2","postIC2","triad","baseAnswer","corrupt","nd1Amount","prePowerSacrificeMult","prePowerBoost","isAch118Unlocked","handleChallengeCompletion","inIC","updateChallengeTime","disableAnimation","bigCrunchReset","forced","bigCrunchGiveRewards","bigCrunchResetValues","bigCrunchUpdateStatistics","bigCrunchTabChange","bigCrunchCheckUnlocks","earlyGame","currentReplicanti","currentReplicantiGalaxies","remainingGalaxies","genPeriod","genCount","gainedPerGen","gainedThisTick","ChargedInfinityUpgradeState","_upgrade","InfinityUpgradeState","_chargedEffect","charge","hasChargeEffect","InfinityIPMultUpgrade","purchaseCount","purchasesAtIncrease","hasIncreasedCost","isRequirementSatisfied","sumGeometricSeries","availableIP","ChargedBreakInfinityUpgradeState","BreakInfinityUpgradeState","RebuyableBreakInfinityUpgradeState","cappedBase","NormalChallengeState","isPartOfIC1","toComplete","InfinityChallengeRewardState","InfinityChallengeState","cardinality","addReplicantiGalaxies","galaxyGain","fastReplicantiBelow308","log10GainFactor","shouldBuyRG","uncappedAmount","remainingGain","gainNeededPerRG","replicantiExponent","maxUsedGain","overCapOverride","overCap","increases","preCelestialEffects","replicantiBeforeLoop","areRGsBeingBought","areBeingBought","tickCount","singleTickAvg","intervalRatio","batchTicks","binomialTicks","reproduced","leftover","isAuto","ReplicantiUpgradeState","nearestPercent","baseCostAfterCount","logBaseIncrease","logCostScaling","distantReplicatedGalaxyStart","remoteReplicatedGalaxyStart","logDistantScaling","extraIncrements","numDistant","logRemoteScaling","numRemote","freeUnlock","logReplicanti","costBase","costIncrement","bulkPossible","bulkCost","buyFn","checkForBuying","ttAM","ttIP","ttEP","ImaginaryUpgradeState","RebuyableImaginaryUpgradeState","PerkState","initializeConnections","dev","respecPerks","buyAllPerks","DIL_UPG_NAMES","upgAmount","whichCap","retroactiveTPFactor","thresholdUpgrade","amnt","glyphReduction","tgSoftcapOne","tgSoftcapOneApplytimes","tachyonEffect","dtRate","toDpower","toDmult","getBaseTP","requireEternity","effectiveTP","drain","goalNetRate","currNetRate","affordsXUpgrades","buyMaxDilationUpgrades","TGRBought","DilationUpgradeState","RebuyableDilationUpgradeState","BlackHoleUpgradeState","getAmount","setAmount","calculateValue","incrementAmount","beforeProg","stateProgress","stateTime","updatePhase","BlackHoleState","blackHoleCostMultipliers","timeToNextStateChange","timeUntilTimeActive","inputTimeActive","timeActive","activePeriod","realTimeWhileActive","nextDeactivation","timeUntilNextDeactivation","cooldown","fullCycle","currentActivationDuration","activeCyclesUntilLastDeactivation","activeTimeUntilLastDeactivation","timeLeftAfterLastDeactivation","lastActivationDuration","automatic","blackHoleString","pauseType","automaticString","rawSeconds","autoPause","autoPauseData","activePeriods","realTimePeriodsWithBlackHoleActive","totalRealTime","numberOfTicks","tolerance","speedups","decimalBinarySearch","binarySearch","evaluationFunction","speedupWithoutBlackHole","realerTime","effectivePeriods","realTimePeriodsWithBlackHoleEffective","activeTime","timeToNextPause","bhNum","phases","durations","intervals","phaseBoundList","inactiveTime","phaseBounds","minTime","timeLeft","ExpoBlackHoleUpgradeState","ExpoBlackHoleState","expoBlackHoleCostMultipliers","expoBlackHoleString","expoBlackHoleDiff","expoBlackHoleSpeedup","speedupWithoutExpoBlackHole","ebhNum","log10FinalEP","rmGain","baseIMCap","baseIMGain","imCap","currentIM","isDevEnvironment","href","giveAllAchievements","doubleEverything","key2","tripleEverything","key3","barrelRoll","spin3d","spin4d","cancerize","fixSave","updateTDCosts","refundTimeDims","refundEPMult","refundDilStudies","resetDilation","giveSpecialGlyph","giveGlyph","giveRealityGlyph","setCompanionGlyphEP","decriminalize","removeAch","setNextNewsMessage","implode","eternify","undilate","realize","togglePerformanceStats","visited","toVisit","printResourceTotals","toPrecision","aGalaxy","rGalaxy","dGalaxy","ADmults","IDmults","TDmults","unlockCelestialQuotes","presentCelestialQuotes","testReplicantiCode","singleId","useDebugger","situationLists","situationCount","resultList","runSituation","situation","doReplicantiTicks","actual","testGlyphs","makeGlyph","makeAllEffectGlyph","effarigGlyphs","makeCombinationsWithRepeats","withoutFirst","withFirst","sets5","sets4","effarigSets","equipSet","glyphToShortString","padString","finishTrial","done","gl","glyphData","runTrial","unlockAutomator","forceCloudSave","unlockAllCosmeticSets","bitArray","respecAvailable","lastRespec","availableSTD","timeUntilRespec","msSinceLast","canRespec","updateLocalSTD","fetchedData","newSTDData","respecRequest","ShopPurchaseState","shouldDisplayMult","SubtabState","checkTabVisibilityForSecretAchievement","findLastOpenSubtab","cycleThroughSubtabs","availableTabs","TabState","isOpened","subtabConfig","hasVisibleSubtab","resetToUnlocked","resetToAvailable","tabNotificationKey","TabNotificationState","triggered","currentTabKey","templateName","templateClimbEP","templateGrindEternities","templateGrindInfinities","templateDoEC","templateUnlockDilation","storeTreeData","nowaitStr","treeNowait","presetObj","storedTreeStr","storedTreeObj","parseAutobuyerProp","autoInfMode","autoInfValue","autoEterMode","autoEterValue","gapToEternity","crunchesPerEternity","isBanked","has191","mergeIntoGlobal","existingValue","watchLatestCommit","Utils","GameDB","core","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","amdO","deferred","O","chunkIds","notFulfilled","fulfilled","__esModule","definition","globalThis","Symbol","toStringTag","nmd","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/app.15dd0ca5.js","mappings":"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,KACd,CACDzoF,KAAM,YACNyoF,MAAO,GACN,CACDzoF,KAAM,WACNyoF,MAAO,CAAC,EAAG,KACV,CACDzoF,KAAM,WACN2oF,MAAO,iBACPF,MAAO,IACN,CACDzoF,KAAM,QACNyoF,MAAO,IACN,CACDzoF,KAAM,UACN2oF,MAAO,iBACPF,MAAO,IACN,CACDzoF,KAAM,YACNyoF,MAAO,IACN,CACDzoF,KAAM,OACNyoF,MAAO,IACN,CACDzoF,KAAM,QACN2oF,MAAO,SACPF,MAAO,CAAC,GAAI,KACX,CACDzoF,KAAM,cACN2oF,MAAO,aACPF,MAAO,IACN,CACDzoF,KAAM,OACN2oF,MAAO,eACPF,MAAO,IACN,CACDzoF,KAAM,MACN2oF,MAAO,4BACPF,MAAO,IACN,CACDzoF,KAAM,gBACN2oF,MAAO,mBACPF,MAAO,IACN,CACDzoF,KAAM,cACNyoF,MAAO,CAAC,GAAI,KACX,CACDzoF,KAAM,aACNyoF,MAAO,IACN,CACDzoF,KAAM,YACNyoF,MAAO,IACN,CACDzoF,KAAM,SACN2oF,MAAO,gBACPF,MAAO,IACN,CACDzoF,KAAM,WACNyoF,MAAO,IACN,CACDzoF,KAAM,SACN2oF,MAAO,kBACPF,MAAO,CAAC,GAAI,KACX,CACDzoF,KAAM,gBACNyoF,MAAO,CAAC,GAAI,KACX,CACDzoF,KAAM,OACNyoF,MAAO,IACN,CACDzoF,KAAM,OACNyoF,MAAO,IACN,CACDzoF,KAAM,OACNyoF,MAAO,IACN,CACDzoF,KAAM,iBACN2oF,MAAO,UACPF,MAAO,IACN,CACDzoF,KAAM,mBACNyoF,MAAO,IACN,CACDzoF,KAAM,UACNyoF,MAAO,IACN,CACDzoF,KAAM,aACNyoF,MAAO,IACN,CACDzoF,KAAM,WACNyoF,MAAO,IACN,CACDzoF,KAAM,YACNyoF,MAAO,IACN,CACDzoF,KAAM,QACNyoF,MAAO,IACN,CACDzoF,KAAM,SACN2oF,MAAO,4BACPF,MAAO,IACN,CACDzoF,KAAM,UACN2oF,MAAO,UACPF,MAAO,IACN,CACDzoF,KAAM,eACNyoF,MAAO,IACN,CACDzoF,KAAM,kBACNyoF,MAAO,CAAC,GAAI,KACX,CACDzoF,KAAM,QACNyoF,MAAO,IACN,CACDzoF,KAAM,WACNyoF,MAAO,IACN,CACDzoF,KAAM,UACNyoF,MAAO,IACN,CACDzoF,KAAM,OACNyoF,MAAO,IACN,CACDzoF,KAAM,OACN2oF,MAAO,cACPF,MAAO,CAAC,GAAI,KACX,CACDzoF,KAAM,UACN2oF,MAAO,kBACPF,MAAO,IACN,CACDzoF,KAAM,gBACNyoF,MAAO,IACN,CACDzoF,KAAM,OACNyoF,MAAO,IACN,CACDzoF,KAAM,cACNyoF,MAAO,IACN,CACDzoF,KAAM,QACNyoF,MAAO,IACN,CACDzoF,KAAM,WACNyoF,MAAO,IACN,CACDzoF,KAAM,YACNyoF,MAAO,IACN,CACDzoF,KAAM,UACNyoF,MAAO,IACN,CACDzoF,KAAM,aACNyoF,MAAO,IACN,CACDzoF,KAAM,OACN2oF,MAAO,cACPF,MAAO,IACN,CACDzoF,KAAM,OACNyoF,MAAO,IACN,CACDzoF,KAAM,WACNyoF,MAAO,IACN,CACDzoF,KAAM,UACNyoF,MAAO,IACN,CACDzoF,KAAM,SACNyoF,MAAO,IACN,CACDzoF,KAAM,SACNyoF,MAAO,IACN,CACDzoF,KAAM,iBACN2oF,MAAO,iBACPF,MAAO,IACN,CACDzoF,KAAM,WACNyoF,MAAO,IACN,CACDzoF,KAAM,WACN2oF,MAAO,eACPF,MAAO,IACN,CACDzoF,KAAM,aACNyoF,MAAO,IACN,CACDzoF,KAAM,UACN2oF,MAAO,eACPF,MAAO,IACN,CACDzoF,KAAM,cACNyoF,MAAO,IACN,CACDzoF,KAAM,UACNyoF,MAAO,IACN,CACDzoF,KAAM,UACNyoF,MAAO,IACN,CACDzoF,KAAM,WACNyoF,MAAO,IACN,CACDzoF,KAAM,WACN2oF,MAAO,gBACPF,MAAO,IACN,CACDzoF,KAAM,UACN2oF,MAAO,kBACPF,MAAO,IACN,CACDzoF,KAAM,kBACNyoF,MAAO,IACN,CACDzoF,KAAM,YACN2oF,MAAO,YACPF,MAAO,IACN,CACDzoF,KAAM,cACN2oF,MAAO,sBACPF,MAAO,IACN,CACDzoF,KAAM,iBACNyoF,MAAO,IACN,CACDzoF,KAAM,WACN2oF,MAAO,OACPF,MAAO,IACN,CACDzoF,KAAM,QACN2oF,MAAO,kBACPF,MAAO,IACN,CACDzoF,KAAM,QACN2oF,MAAO,SACPF,MAAO,IACN,CACDzoF,KAAM,YACNyoF,MAAO,IACN,CACDzoF,KAAM,UACNyoF,MAAO,IACN,CACDzoF,KAAM,cACNyoF,MAAO,IACN,CACDzoF,KAAM,eACN2oF,MAAO,iBACPF,MAAO,IACN,CACDzoF,KAAM,QACNyoF,MAAO,IACN,CACDzoF,KAAM,SACN2oF,MAAO,cACPF,MAAO,IACN,CACDzoF,KAAM,OACNyoF,MAAO,IACN,CACDzoF,KAAM,MACN2oF,MAAO,OACPF,MAAO,IACN,CACDzoF,KAAM,UACNyoF,MAAO,IACN,CACDzoF,KAAM,WACN2oF,MAAO,cACPF,MAAO,IACN,CACDzoF,KAAM,YACN2oF,MAAO,cACPF,MAAO,IACN,CACDzoF,KAAM,WACN2oF,MAAO,aACPF,MAAO,IACN,CACDzoF,KAAM,WACNyoF,MAAO,IACN,CACDzoF,KAAM,aACNyoF,MAAO,IACN,CACDzoF,KAAM,QACNyoF,MAAO,IACN,CACDzoF,KAAM,gBACNyoF,MAAO,IACN,CACDzoF,KAAM,aACNyoF,MAAO,IACN,CACDzoF,KAAM,QACN2oF,MAAO,cACPF,MAAO,IACN,CACDzoF,KAAM,QACNyoF,MAAO,IACN,CACDzoF,KAAM,UACNyoF,MAAO,IACN,CACDzoF,KAAM,aACNyoF,MAAO,IACN,CACDzoF,KAAM,SACN2oF,MAAO,QACPF,MAAO,IACN,CACDzoF,KAAM,SACNyoF,MAAO,IACN,CACDzoF,KAAM,QACN2oF,MAAO,eACPF,MAAO,IACN,CACDzoF,KAAM,mBACNyoF,MAAO,IACN,CACDzoF,KAAM,SACNyoF,MAAO,IACN,CACDzoF,KAAM,gBACNyoF,MAAO,IACN,CACDzoF,KAAM,WACNyoF,MAAO,IACN,CACDzoF,KAAM,kBACNyoF,MAAO,IACN,CACDzoF,KAAM,WACNyoF,MA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CElgC,GAAI,MACJkgC,KAAM,4FAER,CACElgC,GAAI,MACJkgC,KAAM,OAER,CACElgC,GAAI,MACJkgC,KAAO,sBAET,CACElgC,GAAI,MACJkgC,KAAM,4DAER,CACElgC,GAAI,MACJkgC,KAAM,uDAER,CACElgC,GAAI,MACJkgC,KAAM,2CAER,CACElgC,GAAI,MACJkgC,KAAM,qCAER,CACElgC,GAAI,MACJkgC,KAAM,oDAER,CACElgC,GAAI,MACJkgC,KAAO,kDAET,CACElgC,GAAI,MACJkgC,KAAM,iBAER,CACElgC,GAAI,MACAkgC,WACF,MAAQ,4LACkEl/B,OAAOzF,OAAO2O,UAAW,6BAIvG,CACElK,GAAI,MACJkgC,KAAM,6GAER,CACElgC,GAAI,MACJkgC,KAAO,0KAGT,CACElgC,GAAI,MACJkgC,KAAM,0EAER,CACElgC,GAAI,MACJkgC,KAAM,QAER,CACElgC,GAAI,MACJkgC,KAAO,sCAET,CACElgC,GAAI,MACJkgC,KAAO,8BAET,CACElgC,GAAI,MACJkgC,KAAO,4BAET,CACElgC,GAAI,MACJkgC,KAAM,2DAER,CACElgC,GAAI,MACJkgC,KAAM,6EAER,CACElgC,GAAI,MACJkgC,KAAM,qDAER,CACElgC,GAAI,MACJkgC,KAAM,2FAER,CACElgC,GAAI,MACJkgC,KAAM,sDAER,CACElgC,GAAI,MACJkgC,KACG,kTAIL,CACElgC,GAAI,MACJkgC,KACE,mHAEJ,CACElgC,GAAI,MACJkgC,KAAM,6CAER,CACElgC,GAAI,MACJkgC,KAAM,wEAER,CACElgC,GAAI,MACJkgC,KAAM,0DAER,CACElgC,GAAI,MACJkgC,KAAM,uGAER,CACElgC,GAAI,MACJkgC,KAAM,4DAER,CACElgC,GAAI,MACJkgC,KAAM,mEAER,CACElgC,GAAI,MACJkgC,KAAM,+DAER,CACElgC,GAAI,MACAkgC,WACF,MAAQ,cAAal/B,OAAO,2DAGhC,CACEhB,GAAI,MACJkgC,KAAM,sEAER,CACElgC,GAAI,MACJkgC,KAAM,wCAER,CACElgC,GAAI,MACJkgC,KAAM,wBAER,CACElgC,GAAI,MACJkgC,KAAO,8BAET,CACElgC,GAAI,MACJkgC,KAAM,4EAER,CACElgC,GAAI,MACJkgC,KACG,2HAGL,CACElgC,GAAI,MACJkgC,KAAO,2CAET,CACElgC,GAAI,MACJkgC,KACG,6IAGL,CACElgC,GAAI,MACJkgC,KACG,oJAGL,CACElgC,GAAI,MACJkgC,KAAO,2FAET,CACElgC,GAAI,MACJkgC,KAAO,kCAET,CACElgC,GAAI,MACJkgC,KAAM,uGAER,CACElgC,GAAI,MACJkgC,KAAM,0CAER,CACElgC,GAAI,MACJkgC,KACG,wNAGL,CACElgC,GAAI,MACJkgC,KAAM,2EAER,CACElgC,GAAI,MACJkgC,KAAM,4BAER,CACElgC,GAAI,MACJkgC,KACG,mKAGL,CACElgC,GAAI,MACJkgC,KAAM,iDAER,CACElgC,GAAI,MACJkgC,KAAM,+CAER,CACElgC,GAAI,MACJkgC,KAAM,yBAER,CACElgC,GAAI,MACJkgC,KAAM,kDAER,CACElgC,GAAI,MACJkgC,KAAM,6EAER,CACElgC,GAAI,MACJkgC,KAAO,uEAET,CACElgC,GAAI,MACJkgC,KAAO,qDAET,CACElgC,GAAI,MACJkgC,KAAM,uEAER,CACElgC,GAAI,MACJkgC,KACG,iKAGL,CACElgC,GAAI,MACJkgC,KAAM,8EAER,CACElgC,GAAI,MACJkgC,KAAM,qDAER,CACElgC,GAAI,MACJkgC,KAAM,8EAER,CACElgC,GAAI,MACJkgC,KAAM,oCAER,CACElgC,GAAI,MACJkgC,KAAM,4FAER,CACElgC,GAAI,MACJkgC,KAAM,wCAER,CACElgC,GAAI,MACJkgC,KAAO,oGAET,CACElgC,GAAI,MACJkgC,KAAM,uCAER,CACElgC,GAAI,MACJkgC,KAAM,uDAER,CACElgC,GAAI,MACJkgC,KAAM,gCAER,CACElgC,GAAI,MACJkgC,KAAM,qDAER,CACElgC,GAAI,MACJkgC,KACG,iIAGL,CACElgC,GAAI,MACJkgC,KAAM,sGAER,CACElgC,GAAI,MACJkgC,KAAM,oFAER,CACElgC,GAAI,MACJkgC,KAAO,6EAET,CACElgC,GAAI,MACJkgC,KAAM,0EAER,CACElgC,GAAI,MACAkgC,WACF,MAAMs5D,EAAQ,CACZ,CACEj4F,KAAM,gCACNk4F,KAAM,4BAER,CACEl4F,KAAM,kCACNk4F,KAAM,iEAIJC,EAAOF,EAAMr6F,gBACnB,MAAQ,yHAC6Bu6F,EAAKD,yBAAyBC,EAAKn4F,aAG5E,CACEvB,GAAI,MACJkgC,KACG,8HAGL,CACElgC,GAAI,MACJkgC,KAAM,qDAER,CACElgC,GAAI,MACJkgC,KAAM,8BAER,CACElgC,GAAI,MACJkgC,KACG,oKAGL,CACElgC,GAAI,MACJkgC,KAAM,4DAER,CACElgC,GAAI,MACJkgC,KAAM,yFAER,CACElgC,GAAI,MACJkgC,KACG,8HAGL,CACElgC,GAAI,OACJkgC,KAAM,qEAER,CACElgC,GAAI,OACJkgC,KAAM,uBAER,CACElgC,GAAI,OACJkgC,KAAM,+EAER,CACElgC,GAAI,OACJkgC,KACG,wJAECgmC,eAAa,OAAOrnC,eAAesf,mBAAqBtf,eAAe0+B,qBAE7E,CACEv9D,GAAI,OACJkgC,KAAM,iFAER,CACElgC,GAAI,OACJkgC,KAAM,wFAER,CACElgC,GAAI,OACJkgC,KACG,0XAKL,CACElgC,GAAI,OACJkgC,KAAM,yFAER,CACElgC,GAAI,OACJkgC,KAAM,2DAER,CACElgC,GAAI,OACJkgC,KACG,6JAEHy5D,eAAe,GAEjB,CACE35F,GAAI,OACJkgC,KACG,kSAIL,CACElgC,GAAI,OACJkgC,KAAM,0CAER,CACElgC,GAAI,OACJkgC,KACG,msDAiBL,CACElgC,GAAI,OACJkgC,KACG,opFAwBCgmC,eAAa,OAAOrnC,eAAemsB,qBAEzC,CACEhrD,GAAI,OACJkgC,KACG,sRAIL,CACElgC,GAAI,OACJkgC,KACG,+PAIL,CACElgC,GAAI,OACJkgC,KAAM,4EAER,CACElgC,GAAI,OACJkgC,KAAM,4BAER,CACElgC,GAAI,OACJkgC,KAAM,gEAER,CACElgC,GAAI,OACJkgC,KACG,gMAGL,CACElgC,GAAI,OACJkgC,KAAM,sFAER,CACElgC,GAAI,OACJkgC,KAAO,6CAET,CACElgC,GAAI,OACJkgC,KACG,+KAGL,CACElgC,GAAI,OACJkgC,KAAM,yDAER,CACElgC,GAAI,OACJkgC,KAAM,6CAER,CACElgC,GAAI,OACJkgC,KACG,+PAGHy5D,eAAe,GAEjB,CACE35F,GAAI,OACJkgC,KAAM,mBAER,CACElgC,GAAI,OACJkgC,KAAM,gEAER,CACElgC,GAAI,OACAkgC,WACF,MAAQ,2BAA0Bl/B,OAAOzF,OAAO2O,UAAW,OAG/D,CACElK,GAAI,OACJkgC,KACG,iIAGL,CACElgC,GAAI,OACJkgC,KAAM,oDAGN05D,QAAS,QAEX,CACE55F,GAAI,OACJkgC,KACG,ysCAYL,CACElgC,GAAI,OACJkgC,KAAM,wEAER,CACElgC,GAAI,OACJkgC,KACG,mKAGL,CACElgC,GAAI,OACJkgC,KAAM,oEACFgmC,eAAa,OAAOrnC,eAAew+B,qBAEzC,CACEr9D,GAAI,OACJkgC,KAAM,kEAER,CACElgC,GAAI,OACJkgC,KAAM,4EAER,CACElgC,GAAI,OACJkgC,KAAM,2FAER,CACElgC,GAAI,OACAkgC,WACF,MAAQ,2FACJl/B,OAAOzF,OAAO2O,UAAW,8DAE/ByvF,eAAe,GAEjB,CACE35F,GAAI,OACJkgC,KAAM,kDAER,CACElgC,GAAI,OACJkgC,KACG,yeAKHy5D,eAAe,GAEjB,CACE35F,GAAI,OACJkgC,KACG,qLAGL,CACElgC,GAAI,OACJkgC,KAAM,0CAER,CACElgC,GAAI,OACJkgC,KAAM,yCAER,CACElgC,GAAI,OACJkgC,KAAM,kGAER,CACElgC,GAAI,OACJkgC,KACG,iHAEL,CACElgC,GAAI,OACJkgC,KACG,sMAGL,CACElgC,GAAI,OACJkgC,KAAM,kGAER,CACElgC,GAAI,OACJkgC,KAAM,iDAER,CACElgC,GAAI,OACJkgC,KAAM,MAER,CACElgC,GAAI,OACJkgC,KAAM,gDAER,CACElgC,GAAI,OACJkgC,KAAM,uEAER,CACElgC,GAAI,OACJkgC,KACG,6SAIL,CACElgC,GAAI,OACJkgC,KAAM,oCAER,CACElgC,GAAI,OACJkgC,KAAM,sBAER,CACElgC,GAAI,OACJkgC,KAAM,oEAER,CACElgC,GAAI,OACJkgC,KACG,+HAGL,CACElgC,GAAI,OACJkgC,KACG,mIAGL,CACElgC,GAAI,OACJkgC,KACG,0JAGL,CACElgC,GAAI,OACJkgC,KACG,qNAECgmC,eAAa,OAAOrnC,eAAemsB,qBAEzC,CACEhrD,GAAI,OACJkgC,KAAO,6GAET,CACElgC,GAAI,OACJkgC,KAAM,iGAER,CACElgC,GAAI,OACJkgC,KAAO,8DAET,CACElgC,GAAI,OACJkgC,KACG,gIAGL,CACElgC,GAAI,OACJkgC,KAAM,8BAER,CACElgC,GAAI,OACJkgC,KAAM,+EAER,CACElgC,GAAI,OACJkgC,KACG,qJAGL,CACElgC,GAAI,OACJkgC,KACG,oKAGL,CACElgC,GAAI,OACJkgC,KACE,kHAEJ,CACElgC,GAAI,OACJkgC,KAAM,mGAER,CACElgC,GAAI,OACJkgC,KAAM,2GAER,CACElgC,GAAI,OACJkgC,KAAM,2GAER,CACElgC,GAAI,OACJkgC,KACG,6LAGL,CACElgC,GAAI,OACJkgC,KACG,uKAEH05D,QAAS,IAAMC,sBAEjB,CACE75F,GAAI,OACJkgC,KACG,qPAIL,CACElgC,GAAI,OACJkgC,KACG,qkBAOL,CACElgC,GAAI,OACJkgC,KAAM,6FAER,CACElgC,GAAI,OACJkgC,KACG,8uDAiBL,CACElgC,GAAI,OACJkgC,KACG,2lBAOL,CACElgC,GAAI,OACJkgC,KAAM,+FAER,CACElgC,GAAI,OACJkgC,KACG,0MAGL,CACElgC,GAAI,OACJkgC,KAAM,oDAER,CACElgC,GAAI,OACJkgC,KACG,uQAIL,CACElgC,GAAI,OACJkgC,KACG,4JAGL,CACElgC,GAAI,OACJkgC,KACG,wyBASL,CACElgC,GAAI,OACJkgC,KACG,qmBAOL,CACElgC,GAAI,OACJkgC,KACG,qaAKL,CACElgC,GAAI,OACJkgC,KAAM,4EAER,CACElgC,GAAI,OACJkgC,KAAM,gFAER,CACElgC,GAAI,OACJkgC,KACG,2KAGL,CACElgC,GAAI,OACJkgC,KAAM,2BAER,CACElgC,GAAI,OACJkgC,KAAM,2BAER,CACElgC,GAAI,OAIJkgC,KAAM,yTAER,CACElgC,GAAI,OACJkgC,KACG,2tBAQL,CACElgC,GAAI,OACJkgC,KACG,qIAGL,CACElgC,GAAI,OACJkgC,KAAM,0BACN05D,UACE,IAAIv6F,EAASxM,KAAKwM,SAElBA,GAAU,iBACVA,GAAU,EACVA,GAAU,IACV,MAAMwhC,EAAS,OAAMxhC,eACrB,MAAQ,uBAAsBwhC,8BAAkCA,0EAIpE,CACE7gC,GAAI,OACJkgC,KAAM,kGAER,CACElgC,GAAI,OACJkgC,KACG,2JAGL,CACElgC,GAAI,OACJkgC,KAAM,yDAER,CACElgC,GAAI,OACJkgC,KACG,oJAGL,CACElgC,GAAI,OACJkgC,KAAM,0DAER,CACElgC,GAAI,OACJkgC,KACG,udAML,CACElgC,GAAI,OACJkgC,KACG,6KAGL,CACElgC,GAAI,OACJkgC,KAAM,mDAER,CACElgC,GAAI,OACJkgC,KAAM,6BAER,CACElgC,GAAI,OACJkgC,KACG,0IAGL,CACElgC,GAAI,OACJkgC,KACG,+LAGL,CACElgC,GAAI,OACJkgC,KACG,ktDAkBL,CACElgC,GAAI,OACJkgC,KACG,siBAML,CACElgC,GAAI,OACAkgC,WACF,MAAM45D,EAASl5F,OAAO04F,KAAKS,kBAAkBC,kBACvC72E,EAAWle,SAAS,OAAQ60F,GAClC,OAAe,IAAXA,EACM,wEAENA,EAAS,EACH,wEAAuE32E,KAE1E,sEAETy2E,UAEE,OADAh5F,OAAO04F,KAAKS,kBAAkBC,oBACvBhoG,KAAKkuC,OAGhB,CACElgC,GAAI,OACAkgC,WACF,MAAM+5D,EAAS,CACb,qCACA,8BACA,wCACA,2BAEIC,EAAOD,EAAO96F,gBACpB,MAAQ,QAAO6B,OAAO4hC,SAASC,WAAW/oC,MAAO,EAAG,kBAAkBogG,MAG1E,CACEl6F,GAAI,OACJkgC,KACG,mKAGL,CACElgC,GAAI,OACJkgC,KACC,sLAGH,CACElgC,GAAI,OACJkgC,KAAM,yBAER,CACElgC,GAAI,OACJkgC,KACG,gJAGL,CACElgC,GAAI,OACJkgC,KAAM,mEACNy5D,eAAe,GAEjB,CACE35F,GAAI,OACJkgC,KAAM,6CAER,CACElgC,GAAI,OACJkgC,KACG,+HAGL,CACElgC,GAAI,OACJkgC,KACG,4rDAiBL,CACElgC,GAAI,OACJkgC,KAAM,YAER,CACElgC,GAAI,OACJkgC,KAAM,sCAER,CACElgC,GAAI,OACJkgC,KAAM,sBAER,CACElgC,GAAI,OACJkgC,KAAM,+FACFgmC,eAAa,OAAOrnC,eAAew+B,qBAEzC,CACEr9D,GAAI,OACJkgC,KACG,8KAGL,CACElgC,GAAI,OACJkgC,KAAM,kCAER,CACElgC,GAAI,OACJkgC,KAAM,+EAER,CACElgC,GAAI,OACJkgC,KAAM,uEAER,CACElgC,GAAI,OACJkgC,KACE,mHAEJ,CACElgC,GAAI,OACJkgC,KAAM,oCAER,CACElgC,GAAI,OACAkgC,WACF,MAAQ,iDACJ38B,SAASC,iBAAiB/Q,KAAKC,MAAQkO,OAAO+zC,QAAQwlD,iBAAiB12F,mDAG7E22F,SAAS,GAEX,CACEp6F,GAAI,OACAkgC,WACF,MAAQ,6BAA4Bl/B,OAAOzF,OAAO2O,UAAW,QAGjE,CACElK,GAAI,OACJkgC,KAAM,yBAER,CACElgC,GAAI,OACAkgC,WACF,MAAQ,yBAAwBl/B,OAAOzF,OAAO2O,UAAW,8DAI7D,CACElK,GAAI,OACJkgC,KAAM,2EAER,CACElgC,GAAI,OACJkgC,KAAM,kFAER,CACElgC,GAAI,OACJkgC,KAAM,gEAER,CACElgC,GAAI,OACJkgC,KAAM,wEAER,CACElgC,GAAI,OACAkgC,WACF,MAAQ,yNAENm5D,GAAY,+CAGlB,CACEr5F,GAAI,OACJkgC,KAAM,4EAER,CACElgC,GAAI,OACJkgC,KAAM,+EAER,CACElgC,GAAI,OACJkgC,KACG,iUAIL,CACElgC,GAAI,OACJkgC,KACG,iIAGL,CACElgC,GAAI,OACJkgC,KAAO,mEAET,CACElgC,GAAI,OACJkgC,KAAM,wCAER,CACElgC,GAAI,OACAkgC,WAEF,MAAMm6D,EAAO,IACPC,EAAQC,MAAM5/F,UAAUuwF,cACxBsP,EAAU,CACdC,OACG,kIAEHC,MACG,sIAEHC,KAAM,sGACNC,UACG,wIAEHC,SACG,uIAEHC,cACG,yIAEHC,OAAQ,iGACRC,YACG,wJAEHC,GAAI,iFACJC,GAAI,qGACJC,GAAI,wFACJC,GACG,kJAEHC,GACG,+JAEHC,GACG,2JAEHC,GAAI,mEACJC,GAAI,wEACJC,GAAI,+CACJC,IACG,wMAEHC,IACG,qMACgFtB,uEAC1CA,6EACrCA,qFAAwFA,+EACpCA,oDAC3CA,SAAYA,mBACzBuB,IACG,6LAGCC,EAASrB,EAAQD,MAAM5/F,UAAU4G,KAAKnE,QAAQ,uEAAQ,KAC5D,MAAQ,gBAAek9F,kFACDA,wBAA4BuB,KAEpDzB,SAAS,GAEX,CACEp6F,GAAI,OACJkgC,KAAM,2GAEP,WACC,IAAIqB,GAAY,EAChB,MAAM27B,EACH,sJAEG4+B,EACH,wJAEH,MAAO,CACL97F,GAAI,OACAkgC,WACF,OAAOqB,EAAYu6D,EAAU5+B,GAE/BsmB,QACEjiD,GAAY,GAEdq4D,UAEE,OADAr4D,GAAaA,EACNvvC,KAAKkuC,OAlBjB,GAsBD,CACElgC,GAAI,OACJkgC,KACG,0NAGL,CACElgC,GAAI,OACJkgC,KAAM,sFACNy5D,eAAe,GAEjB,CACE35F,GAAI,OACAkgC,WACF,IAAI67D,EAAQ,GACZ,MAAMC,EAAU,CACd,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACrC,CAAC,MAAO,OAAQ,KAAM,OACtB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACzE,CAAC,KAAM,OAET,IAAK,MAAMn3F,KAAOm3F,EAAS,CACzB,MAAMC,EAASp3F,EAAI1F,gBACnB,IAAK,IAAI3L,EAAI,EAAGA,EAAI,EAAGA,KACjBX,KAAKwM,SAAW,KAAQ08F,EAAMx2F,SAAS02F,MAASF,GAASE,GAE/DF,GAAS,qBAEX,OAAOA,IAGX,CACE/7F,GAAI,OACJkgC,KACG,6MAGL,CACElgC,GAAI,OACAkgC,WACF,MAAQ,0CAAyCm5D,GAAY,oDAE3DnzB,eAAa,OAAOrnC,eAAesf,mBAAqBtf,eAAe0+B,qBAE7E,CACEv9D,GAAI,OACJkgC,KACG,mSAIL,CACElgC,GAAI,OACJkgC,KACG,qJAGL,CACElgC,GAAI,OACAkgC,WACF,MAAQ,sBAAqBl/B,OAAOzF,OAAO2O,UAAW,QAG1D,CACElK,GAAI,OACJkgC,KAAM,mEAER,CACElgC,GAAI,OACJkgC,KACG,yIAGL,CACElgC,GAAI,OACJkgC,KACG,+JAGL,CACElgC,GAAI,OACJkgC,KACG,2lEAoBL,CACElgC,GAAI,OACJkgC,KACG,4HAECgmC,eAAa,OAAOrnC,eAAemsB,oBAAsBnsB,eAAey+B,uBAE9E,CACEt9D,GAAI,OACJkgC,KACG,sRAIL,CACElgC,GAAI,OACJkgC,KAAM,uBAER,CACElgC,GAAI,OACJkgC,KAAM,qFAER,CACElgC,GAAI,OACJkgC,KAAM,iFAER,CACElgC,GAAI,OACJkgC,KAAM,6CAER,CACElgC,GAAI,OACJkgC,KAAM,iCAER,CACElgC,GAAI,OACJkgC,KACG,4PAIL,CACElgC,GAAI,OACJkgC,KAAM,iCAER,CACElgC,GAAI,OACJkgC,KACG,kSAIL,CACElgC,GAAI,OACJkgC,KACG,8KAGL,CACElgC,GAAI,OACJkgC,KACG,sYAKL,CACElgC,GAAI,OACJkgC,KAAM,+DAER,CACElgC,GAAI,OACJkgC,KAAM,wGAER,CACElgC,GAAI,OACJkgC,KACG,+KAGL,CACElgC,GAAI,OACJkgC,KAAM,uFAER,CACElgC,GAAI,OACAkgC,WAAS,MAAQ,uBAAsBw+B,aAAa46B,KAAK/jG,uCAE/D,CACEyK,GAAI,OACJkgC,KACG,8HAGL,CACElgC,GAAI,OACJkgC,KACG,yKAGL,CACElgC,GAAI,OACAkgC,WACF,MAAQ,uQAEuBl/B,OAAOzF,OAAO2O,UAAW,+gBAO1DyvF,eAAe,GAEjB,CACE35F,GAAI,OACJkgC,KAAM,8EAER,CACElgC,GAAI,OACJkgC,KAAM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,CAEElgC,GAAI,OACJkgC,KAAM,8FAER,CAEElgC,GAAI,OACJkgC,KACG,4pBAMCgmC,eAAa,OAAOrnC,eAAemsB,qBAEzC,CACEhrD,GAAI,OACJkgC,KACG,weAML,CACElgC,GAAI,OACAkgC,WACF,MAAM+8D,EAAW,CACd,icAIA,0gBAKA,yfAMG/hE,EAAU+hE,EAAS99F,gBACzB,MAAQ,yQAE6C+7B,MAGzD,CACEl7B,GAAI,OACJkgC,KAAM,kGACFgmC,eAAa,OAAOrnC,eAAemsB,oBAAsBnsB,eAAey+B,uBAE9E,CACEt9D,GAAI,OACJkgC,KACG,q5BASL,CACElgC,GAAI,OACJkgC,KACG,izCAaL,CACElgC,GAAI,OACJkgC,KACG,y9CAcL,CACElgC,GAAI,OACJkgC,KACG,u9DAmBL,CACElgC,GAAI,OACJkgC,KACE,6GAEJ,CACElgC,GAAI,OACJkgC,KACG,uYAKL,CACElgC,GAAI,OACJkgC,KACG,iPAIL,CACElgC,GAAI,OACJkgC,KACG,qQAIL,CACElgC,GAAI,OACJkgC,KAAM,4EAER,CACElgC,GAAI,OACJkgC,KACG,+6BAUL,CACElgC,GAAI,OACJkgC,KACG,2WAKL,CACElgC,GAAI,OACJkgC,KACG,8kBAOL,CACElgC,GAAI,OACJkgC,KAAM,wGAER,CACElgC,GAAI,OACAkgC,WACF,MAAQ,OAAMl/B,OAAOzF,OAAO2O,UAAW,iBAAiBlJ,OAAOzF,OAAO2O,UAAW,sBAGrF,CACElK,GAAI,OACJkgC,KACG,smBAOL,CACElgC,GAAI,OACJkgC,KAAM,4GAER,CACElgC,GAAI,OACJkgC,KACE,iHAEJ,CACElgC,GAAI,OACJkgC,KACE,oHAEJ,CACElgC,GAAI,OACJkgC,KAAM,sCAER,CACElgC,GAAI,OACJkgC,KACG,uIAGL,CACElgC,GAAI,OACJkgC,KAAM,gHAER,CACElgC,GAAI,OACJkgC,KACG,yhBAML,CACElgC,GAAI,OACJkgC,KACG,66BASL,CACElgC,GAAI,OACJkgC,KAAM,4EAER,CACElgC,GAAI,OACJkgC,KACG,oQAKL,CACElgC,GA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,eAAY,OAA+B,KAAxB,IAAIzzE,MAAOqrG,UAAyC,MAAvB,IAAIrrG,MAAOsrG,UAEjE,CACE/9F,GAAI,KACJkgC,KAAM,uDACFgmC,eAAa,OAAOrzE,KAAKwM,SAAW,MAE1C,CACEW,GAAI,KACJkgC,KAAM,6BAGR,CACElgC,GAAI,MACJkgC,KAAM,qHAER,CACElgC,GAAI,MACJkgC,KAAM,2FAER,CACElgC,GAAI,MACJkgC,KAAM,6IACFgmC,eAAa,OAAOrnC,eAAemsB,qBAEzC,CACEhrD,GAAI,MACJkgC,KAAM,wFAER,CACElgC,GAAI,MACAkgC,WAAS,MAAQ,mBAAkBl/B,OAAOzF,OAAO2O,UAAW,sCAElE,CACElK,GAAI,MACJkgC,KAAM,8BAER,CACElgC,GAAI,MACJkgC,KAAM,oHAER,CACElgC,GAAI,MACJkgC,KAAM,2EAER,CACElgC,GAAI,MACJkgC,KAAM,sEAER,CACElgC,GAAI,OACJkgC,KAAM,iFAER,CACElgC,GAAI,OACJkgC,KAAM,4EACN05D,UAAYhoG,OAAOosG,KAAK,iDAE1B,CACEh+F,GAAI,OACJkgC,KAAM,6DAER,CACElgC,GAAI,OACJkgC,KAAM,iCAER,CACElgC,GAAI,OACJkgC,KAAM,qEAER,CACElgC,GAAI,OACJkgC,KAAM,sDAER,CACElgC,GAAI,OACJkgC,KAAM,yDAER,CACElgC,GAAI,OACJkgC,KAAM,sDAER,CACElgC,GAAI,OACJkgC,KAAM,qHAER,CACElgC,GAAI,OACJkgC,KAAM,4FAER,CACElgC,GAAI,OACJkgC,KAAM,mFAER,CACElgC,GAAI,OACJkgC,KAAM,mCAER,CACElgC,GAAI,OACJkgC,KAAM,+BAER,CACElgC,GAAI,OACJkgC,KAAM,2DAER,CACElgC,GAAI,OACJkgC,KAAM,mFAER,CACElgC,GAAI,OACJkgC,KAAM,qDAER,CACElgC,GAAI,OACJkgC,KAAM,gGAER,CACElgC,GAAI,OACJkgC,KAAM,6HAER,CACElgC,GAAI,OACJkgC,KAAM,yBAER,CACElgC,GAAI,OACJkgC,KAAM,oFAER,CACElgC,GAAI,OACJkgC,KAAM,wEAER,CACElgC,GAAI,OACJkgC,KAAM,8CAER,CACElgC,GAAI,OACJkgC,KAAM,+DAER,CACElgC,GAAI,OACJkgC,KAAM,6KAER,CACElgC,GAAI,OACJkgC,KAAM,uFAER,CACElgC,GAAI,OACJkgC,KAAM,iDAER,CACElgC,GAAI,OACJkgC,KAAM,gGAER,CACElgC,GAAI,OACJkgC,KAAM,uCAER,CACElgC,GAAI,OACJkgC,KAAM,wBAER,CACElgC,GAAI,OACJkgC,KAAM,yCAER,CACElgC,GAAI,OACJkgC,KAAM,6BAER,CACElgC,GAAI,OACJkgC,KAAM,oHAER,CACElgC,GAAI,OACJkgC,KAAM,yCAER,CACElgC,GAAI,OACJkgC,KAAM,yEAER,CACElgC,GAAI,OACJkgC,KAAM,6BAER,CACElgC,GAAI,OACJkgC,KAAM,gBAER,CACElgC,GAAI,OACJkgC,KAAM,sBAER,CACElgC,GAAI,OACJkgC,KAAM,+CAER,CACElgC,GAAI,OACJkgC,KAAM,wFAER,CACElgC,GAAI,OACJkgC,KAAM,mCAER,CACElgC,GAAI,OACJkgC,KAAM,sEAER,CACElgC,GAAI,OACJkgC,KAAM,uIAER,CACElgC,GAAI,OACJkgC,KAAM,2BAER,CACElgC,GAAI,OACJkgC,KAAM,6IAER,CACElgC,GAAI,OACJkgC,KAAM,ySAER,CACElgC,GAAI,OACJkgC,KAAM,4IAER,CACElgC,GAAI,OACJkgC,KAAM,8BAER,CACElgC,GAAI,OACJkgC,KAAM,ySAER,CACElgC,GAAI,OACJkgC,KAAM,mEAER,CACElgC,GAAI,OACJkgC,KAAM,yBAER,CACElgC,GAAI,OACJkgC,KAAM,yDAER,CACElgC,GAAI,OACJkgC,KAAM,2CAER,CACElgC,GAAI,OACJkgC,KAAM,0CAER,CACElgC,GAAI,OACJkgC,KAAM,gCAER,CACElgC,GAAI,OACJkgC,KAAM,0CAER,CACElgC,GAAI,OACJkgC,KAAM,kJAER,CACElgC,GAAI,OACJkgC,KAAM,mDAER,CACElgC,GAAI,OACJkgC,KAAM,0IAER,CACElgC,GAAI,OACJkgC,KAAM,gMAER,CACElgC,GAAI,OACJkgC,KAAM,yEAER,CACElgC,GAAI,OACJkgC,KAAM,2BAER,CACElgC,GAAI,OACJkgC,KAAM,0GAER,CACElgC,GAAI,OACJkgC,KAAM,scAER,CACElgC,GAAI,OACJkgC,KAAM,8CAER,CACElgC,GAAI,OACAkgC,WAAS,MAAQ,cAAal/B,OAAOzF,OAAO2O,UAAW,qBAE7D,CACElK,GAAI,OACJkgC,KAAM,gCAER,CACElgC,GAAI,OACAkgC,WAAS,MAAQ,6BAA4Bl/B,OAAOzF,OAAO2O,UAAW,OAE5E,CACElK,GAAI,OACJkgC,KAAM,oFAER,CACElgC,GAAI,OACJkgC,KAAM,6BAER,CACElgC,GAAI,OACJkgC,KAAM,oCAER,CACElgC,GAAI,OACJkgC,KAAM,+BAER,CACElgC,GAAI,OACJkgC,KAAM,oCAER,CACElgC,GAAI,OACJkgC,KAAM,wCAER,CACElgC,GAAI,OACJkgC,KAAM,uEAER,CACElgC,GAAI,OACJkgC,KAAM,ifAER,CACElgC,GAAI,OACJkgC,KAAM,+EAER,CACElgC,GAAI,OACJkgC,KAAM,sHAER,CACElgC,GAAI,OACJkgC,KAAM,wDAER,CACElgC,GAAI,OACJkgC,KAAM,kFAER,CACElgC,GAAI,OACJkgC,KAAM,8BAER,CACElgC,GAAI,OACJkgC,KAAM,gLAER,CACElgC,GAAI,OACJkgC,KAAM,2NAER,CACElgC,GAAI,OACJkgC,KAAM,gKAER,CACElgC,GAAI,OACJkgC,KAAM,sBAER,CACElgC,GAAI,OACJkgC,KAAM,+BAER,CACElgC,GAAI,OACJkgC,KAAM,kBAER,CACElgC,GAAI,OACJkgC,KAAM,kDAER,CACElgC,GAAI,OACJkgC,KAAM,6CAER,CACElgC,GAAI,OACJkgC,KAAM,+HAEP,WACC,IAAIo8D,GAAa,EACjB,MAAMp/B,EAAS,wBACTq/B,EAAU,wBAChB,MAAO,CACLv8F,GAAI,OACAkgC,WACF,OAAOo8D,EAAaC,EAAUr/B,GAEhCsmB,QACE8Y,GAAa,GAEf1C,UACE,IAAI0C,EAEJ,OADAA,GAAa,EACNtqG,KAAKkuC,OAfjB,GAmBD,CACElgC,GAAI,QACJkgC,KAAM,+DAER,CACElgC,GAAI,QACJkgC,KAAM,QAER,CACElgC,GAAI,QACJkgC,KAAM,kCAER,CACElgC,GAAI,QACJkgC,KAAM,qDAER,CACElgC,GAAI,QACJkgC,KAAM,gEAER,CACElgC,GAAI,QACJkgC,KAAM,2EAER,CACElgC,GAAI,QACJkgC,KAAM,8iBAER,CACElgC,GAAI,QACJkgC,KAAM,qcAER,CACElgC,GAAI,QACJkgC,KAAM,sEAER,CACElgC,GAAI,QACJkgC,KAAM,yCAER,CACElgC,GAAI,QACJkgC,KAAM,+BAER,CACElgC,GAAI,QACJkgC,KAAM,+BAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,oEAAmEl/B,OAAOzF,OAAO2O,UAAW,mBAEnH,CACElK,GAAI,QACJkgC,KAAM,oOAER,CACElgC,GAAI,QACJkgC,KAAM,2BAER,CACElgC,GAAI,QACJkgC,KAAM,uDAER,CACElgC,GAAI,QACJkgC,KAAM,6DAER,CACElgC,GAAI,QACJkgC,KAAM,eAER,CACElgC,GAAI,QACJkgC,KAAM,wEAER,CACElgC,GAAI,QACJkgC,KAAM,iEAER,CACElgC,GAAI,QACJkgC,KAAM,mEAER,CACElgC,GAAI,QACJkgC,KAAM,gFAER,CACElgC,GAAI,QACJkgC,KAAM,+DAER,CACElgC,GAAI,QACJkgC,KAAM,yFAER,CACElgC,GAAI,QACJkgC,KAAM,4CAER,CACElgC,GAAI,QACJkgC,KAAM,0CACFgmC,eAAa,OAAOrnC,eAAey+B,uBAEzC,CACEt9D,GAAI,QACJkgC,KAAM,0CAER,CACElgC,GAAI,QACJkgC,KAAM,iBAER,CACElgC,GAAI,QACJkgC,KAAM,gFAER,CACElgC,GAAI,QACJkgC,KAAM,mGAER,CACElgC,GAAI,QACJkgC,KAAM,8CAER,CACElgC,GAAI,QACJkgC,KAAM,qHAER,CACElgC,GAAI,QACJkgC,KAAM,uCAER,CACElgC,GAAI,QACJkgC,KAAM,qHAER,CACElgC,GAAI,QACJkgC,KAAM,6EAER,CACElgC,GAAI,QACJkgC,KAAM,uHAER,CACElgC,GAAI,QACJkgC,KAAM,sDAER,CACElgC,GAAI,QACJkgC,KAAM,6FAER,CACElgC,GAAI,QACJkgC,KAAM,wCAER,CACElgC,GAAI,QACJkgC,KAAM,0EAER,CACElgC,GAAI,QACJkgC,KAAM,uIAER,CACElgC,GAAI,QACJkgC,KAAM,uCAER,CACElgC,GAAI,QACJkgC,KAAM,0EAER,CACElgC,GAAI,QACJkgC,KAAM,oIAER,CACElgC,GAAI,QACJkgC,KAAM,cAER,CACElgC,GAAI,QACJkgC,KAAM,0HAER,CACElgC,GAAI,QACJkgC,KAAM,2CAER,CACElgC,GAAI,QACJkgC,KAAM,+IAER,CACElgC,GAAI,QACJkgC,KAAM,wEAER,CACElgC,GAAI,QACJkgC,KAAM,gDAER,CACElgC,GAAI,QACJkgC,KAAM,i0BAER,CACElgC,GAAI,QACJkgC,KAAM,2MAER,CACElgC,GAAI,QACJkgC,KAAM,4HAER,CACElgC,GAAI,QACJkgC,KAAM,0DAER,CACElgC,GAAI,QACJkgC,KAAM,6BAER,CACElgC,GAAI,QACJkgC,KAAM,oCAER,CACElgC,GAAI,QACJkgC,KAAM,uEAER,CACElgC,GAAI,QACJkgC,KAAM,0GAER,CACElgC,GAAI,QACJkgC,KAAM,qHAER,CACElgC,GAAI,QACJkgC,KAAM,oNAER,CACElgC,GAAI,QACJkgC,KAAM,gKAER,CACElgC,GAAI,QACJkgC,KAAM,yFAER,CACElgC,GAAI,QACJkgC,KAAM,6JAER,CACElgC,GAAI,QACJkgC,KAAM,wLAER,CACElgC,GAAI,QACJkgC,KAAM,wCAER,CACElgC,GAAI,QACJkgC,KAAM,uCAER,CACElgC,GAAI,QACJkgC,KAAM,4DAER,CACElgC,GAAI,QACJkgC,KAAM,uDAER,CACElgC,GAAI,QACJkgC,KAAM,qCAER,CACElgC,GAAI,QACJkgC,KAAM,2CAER,CACElgC,GAAI,QACJkgC,KAAM,gDAER,CACElgC,GAAI,QACJkgC,KAAM,kCAER,CACElgC,GAAI,QACJkgC,KAAM,4CAER,CACElgC,GAAI,QACJkgC,KAAM,yEAER,CACElgC,GAAI,QACJkgC,KAAM,oIAER,CACElgC,GAAI,QACJkgC,KAAM,6CAER,CACElgC,GAAI,QACJkgC,KAAM,yDAER,CACElgC,GAAI,QACJkgC,KAAM,kGAER,CACElgC,GAAI,QACJkgC,KAAM,oCAER,CACElgC,GAAI,QACJkgC,KAAM,mFAER,CACElgC,GAAI,QACJkgC,KAAM,kEAER,CACElgC,GAAI,QACJkgC,KAAM,qMAER,CACElgC,GAAI,QACJkgC,KAAM,+EAER,CACElgC,GAAI,QACJkgC,KAAM,kQAER,CACElgC,GAAI,QACJkgC,KAAM,yHAER,CACElgC,GAAI,QACJkgC,KAAM,8MAER,CACElgC,GAAI,QACJkgC,KAAM,oEACFgmC,eAAa,OAAO/mB,kBAAkB,GAAGb,cAE/C,CACEt+C,GAAI,QACJkgC,KAAM,4BAER,CACElgC,GAAI,QACJkgC,KAAM,uJAER,CACElgC,GAAI,QACJkgC,KAAM,sCAER,CACElgC,GAAI,QACJkgC,KAAM,uDAER,CACElgC,GAAI,QACJkgC,KAAM,oCAER,CACElgC,GAAI,QACJkgC,KAAM,yDAER,CACElgC,GAAI,QACJkgC,KAAM,yFAER,CACElgC,GAAI,QACJkgC,KAAM,mDAER,CACElgC,GAAI,QACJkgC,KAAM,8VAER,CACElgC,GAAI,QACJkgC,KAAM,gCAER,CACElgC,GAAI,QACJkgC,KAAM,2HAER,CACElgC,GAAI,QACJkgC,KAAM,iGAER,CACElgC,GAAI,QACJkgC,KAAM,qGAER,CACElgC,GAAI,QACJkgC,KAAM,mCAER,CACElgC,GAAI,QACJkgC,KAAM,+CAER,CACElgC,GAAI,QACJkgC,KAAM,8BACN05D,UAAYwC,YAAYC,eAE1B,CACEr8F,GAAI,QACJkgC,KAAM,qMAER,CACElgC,GAAI,QACJkgC,KAAM,ktBAER,CACElgC,GAAI,QACJkgC,KAAM,yGAER,CACElgC,GAAI,QACJkgC,KAAM,+DACFgmC,eAAa,OAAOrnC,eAAemsB,qBAEzC,CACEhrD,GAAI,QACJkgC,KAAM,uKAER,CACElgC,GAAI,QACJkgC,KAAM,wCAER,CACElgC,GAAI,QACJkgC,KAAM,65CAER,CACElgC,GAAI,QACJkgC,KAAM,6FAER,CACElgC,GAAI,QACJkgC,KAAM,mCAER,CACElgC,GAAI,QACJkgC,KAAM,sCAER,CACElgC,GAAI,QACJkgC,KAAM,qBAER,CACElgC,GAAI,QACJkgC,KAAM,sHAER,CACElgC,GAAI,QACJkgC,KAAM,gDAER,CACElgC,GAAI,QACJkgC,KAAM,6GAER,CACElgC,GAAI,QACJkgC,KAAM,gGAER,CACElgC,GAAI,QACJkgC,KAAM,0BAER,CACElgC,GAAI,QACJkgC,KAAM,oFAER,CACElgC,GAAI,QACJkgC,KAAM,uCAER,CACElgC,GAAI,QACJkgC,KAAM,sFACN05D,UACEwC,YAAYC,aACZz7F,OAAO04F,KAAKS,kBAAkBoC,eAGlC,CACEn8F,GAAI,QACJkgC,KAAM,wCAER,CACElgC,GAAI,QACJkgC,KAAM,+DAER,CACElgC,GAAI,QACJkgC,KAAM,gGAER,CACElgC,GAAI,QACJkgC,KAAM,yBAER,CACElgC,GAAI,QACJkgC,KAAM,wCAER,CACElgC,GAAI,QACJkgC,KAAM,wCAER,CACElgC,GAAI,QACJkgC,KAAM,uDAER,CACElgC,GAAI,QACJkgC,KAAM,yGAER,CACElgC,GAAI,QACJkgC,KAAM,0BAER,CACElgC,GAAI,QACJkgC,KAAM,wBAER,CACElgC,GAAI,QACJkgC,KAAM,qCAER,CACElgC,GAAI,QACJkgC,KAAM,kCAER,CACElgC,GAAI,QACJkgC,KAAM,mSAER,CACElgC,GAAI,QACJkgC,KAAM,siBAER,CACElgC,GAAI,QACJkgC,KAAM,cAER,CACElgC,GAAI,QACJkgC,KAAM,gEAER,CACElgC,GAAI,QACJkgC,KAAM,6EAER,CACElgC,GAAI,QACJkgC,KAAM,oDAER,CACElgC,GAAI,QACJkgC,KAAM,6FAER,CACElgC,GAAI,QACJkgC,KAAM,sLAER,CACElgC,GAAI,QACJkgC,KAAM,uFAER,CACElgC,GAAI,QACJkgC,KAAM,yGAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,+EAA8El/B,OAAOzF,OAAO2O,UAAW,uPAE9H,CACElK,GAAI,QACJkgC,KAAM,sCAER,CACElgC,GAAI,QACJkgC,KAAM,yCAER,CACElgC,GAAI,QACJkgC,KAAM,kIAER,CACElgC,GAAI,QACJkgC,KAAM,yCAER,CACElgC,GAAI,QACJkgC,KAAM,2HAER,CACElgC,GAAI,QACJkgC,KAAM,gFAER,CACElgC,GAAI,QACJkgC,KAAM,kQAER,CACElgC,GAAI,QACJkgC,KAAM,yDAER,CACElgC,GAAI,QACJkgC,KAAM,6BAER,CACElgC,GAAI,QACJkgC,KAAM,4FAER,CACElgC,GAAI,QACJkgC,KAAM,8GAER,CACElgC,GAAI,QACJkgC,KAAM,wCAER,CACElgC,GAAI,QACJkgC,KAAM,gCAER,CACElgC,GAAI,QACJkgC,KAAM,gCAER,CACElgC,GAAI,QACJkgC,KAAM,gQAER,CACElgC,GAAI,QACJkgC,KAAM,gWAER,CACElgC,GAAI,QACJkgC,KAAM,6VAER,CACElgC,GAAI,QACJkgC,KAAM,2FAER,CACElgC,GAAI,QACJkgC,KAAM,2BAER,CACElgC,GAAI,QACJkgC,KAAM,6BAER,CACElgC,GAAI,QACJkgC,KAAM,8BAER,CACElgC,GAAI,QACJkgC,KAAM,+DAER,CACElgC,GAAI,QACJkgC,KAAM,0OAER,CACElgC,GAAI,QACJkgC,KAAM,kNAER,CACElgC,GAAI,QACJkgC,KAAM,4DAER,CACElgC,GAAI,QACJkgC,KAAM,qCAER,CACElgC,GAAI,QACJkgC,KAAM,8HAER,CACElgC,GAAI,QACJkgC,KAAM,sDAER,CACElgC,GAAI,QACJkgC,KAAM,sPAER,CACElgC,GAAI,QACJkgC,KAAM,mGAER,CACElgC,GAAI,QACJkgC,KAAM,WAER,CACElgC,GAAI,QACJkgC,KAAM,2ZAER,CACElgC,GAAI,QACJkgC,KAAM,oDAER,CACElgC,GAAI,QACJkgC,KAAM,qFAER,CACElgC,GAAI,QACJkgC,KAAM,SAER,CACElgC,GAAI,QACJkgC,KAAM,gCAER,CACElgC,GAAI,QACJkgC,KAAM,wCAER,CACElgC,GAAI,QACJkgC,KAAM,iHAER,CACElgC,GAAI,QACJkgC,KAAM,qFAER,CACElgC,GAAI,QACJkgC,KAAM,8MAER,CACElgC,GAAI,QACJkgC,KAAM,wGAER,CACElgC,GAAI,QACJkgC,KAAM,4EAER,CACElgC,GAAI,QACJkgC,KAAM,oFAER,CACElgC,GAAI,QACJkgC,KAAM,6EAER,CACElgC,GAAI,QACJkgC,KAAM,wEAER,CACElgC,GAAI,QACJkgC,KAAM,4EAER,CACElgC,GAAI,QACJkgC,KAAM,qGAER,CACElgC,GAAI,QACJkgC,KAAM,6CAER,CACElgC,GAAI,QACJkgC,KAAM,yEAER,CACElgC,GAAI,QACJkgC,KAAM,6FAER,CACElgC,GAAI,QACJkgC,KAAM,oEAER,CACElgC,GAAI,QACJkgC,KAAM,iIAER,CACElgC,GAAI,QACJkgC,KAAM,kJAER,CACElgC,GAAI,QACJkgC,KAAM,4DAER,CACElgC,GAAI,QACJkgC,KAAM,sNAER,CACElgC,GAAI,QACJkgC,KAAM,+BAER,CACElgC,GAAI,QACJkgC,KAAM,2FAER,CACElgC,GAAI,QACJkgC,KAAM,+CAER,CACElgC,GAAI,QACJkgC,KAAM,qBAER,CACElgC,GAAI,QACJkgC,KAAM,6BAER,CACElgC,GAAI,QACJkgC,KAAM,gSAER,CACElgC,GAAI,QACJkgC,KAAM,mFAER,CACElgC,GAAI,QACJkgC,KAAM,gEAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,uCAAsCl/B,OAAOzF,OAAO2O,UAAW,sBAEtF,CACElK,GAAI,QACJkgC,KAAM,gJAER,CACElgC,GAAI,QACJkgC,KAAM,uDAER,CACElgC,GAAI,QACJkgC,KAAM,gyBAER,CACElgC,GAAI,QACJkgC,KAAM,mJAER,CACElgC,GAAI,QACJkgC,KAAM,kCAER,CACElgC,GAAI,QACJkgC,KAAM,cAER,CACElgC,GAAI,QACJkgC,KAAM,kEAER,CACElgC,GAAI,QACJkgC,KAAM,0GAER,CACElgC,GAAI,QACJkgC,KAAM,yDAER,CACElgC,GAAI,QACJkgC,KAAM,uKAER,CACElgC,GAAI,QACJkgC,KAAM,uEAER,CACElgC,GAAI,QACJkgC,KAAM,kEAER,CACElgC,GAAI,QACJkgC,KAAM,kGAER,CACElgC,GAAI,QACJkgC,KAAM,gJAER,CACElgC,GAAI,QACJkgC,KAAM,2CAER,CACElgC,GAAI,QACJkgC,KAAM,kIAER,CACElgC,GAAI,QACJkgC,KAAM,8HAER,CACElgC,GAAI,QACJkgC,KAAM,mKAER,CACElgC,GAAI,QACJkgC,KAAM,sDAER,CACElgC,GAAI,QACJkgC,KAAM,iCAER,CACElgC,GAAI,QACJkgC,KAAM,sIAER,CACElgC,GAAI,QACJkgC,KAAM,oEAER,CACElgC,GAAI,QACJkgC,KAAM,wDAER,CACElgC,GAAI,QACJkgC,KAAM,2DAER,CACElgC,GAAI,QACJkgC,KAAM,4HAER,CACElgC,GAAI,QACJkgC,KAAM,uCAER,CACElgC,GAAI,QACJkgC,KAAM,yEAER,CACElgC,GAAI,QACJkgC,KAAM,oEAER,CACElgC,GAAI,QACJkgC,KAAM,6EAER,CACElgC,GAAI,QACJkgC,KAAM,4EAER,CACElgC,GAAI,QACJkgC,KAAM,iDAER,CACElgC,GAAI,QACJkgC,KAAM,uHAER,CACElgC,GAAI,QACJkgC,KAAM,iCAER,CACElgC,GAAI,QACJkgC,KAAM,4JAER,CACElgC,GAAI,QACJkgC,KAAM,yGAER,CACElgC,GAAI,QACJkgC,KAAM,+BAER,CACElgC,GAAI,QACJkgC,KAAM,yDAER,CACElgC,GAAI,QACJkgC,KAAM,yMAER,CACElgC,GAAI,QACJkgC,KAAM,kDAER,CACElgC,GAAI,QACJkgC,KAAM,4DAER,CACElgC,GAAI,QACJkgC,KAAM,gDAER,CACElgC,GAAI,QACJkgC,KAAM,kBAER,CACElgC,GAAI,QACJkgC,KAAM,kCAER,CACElgC,GAAI,QACJkgC,KAAM,sBAER,CACElgC,GAAI,QACJkgC,KAAM,kCAER,CACElgC,GAAI,QACJkgC,KAAM,8LAER,CACElgC,GAAI,QACJkgC,KAAM,+GAER,CACElgC,GAAI,QACJkgC,KAAM,6FAER,CACElgC,GAAI,QACJkgC,KAAM,qmBAER,CACElgC,GAAI,QACJkgC,KAAM,2RAER,CACElgC,GAAI,QACJkgC,KAAM,yEAER,CACElgC,GAAI,QACJkgC,KAAM,kCAER,CACElgC,GAAI,QACJkgC,KAAM,mEAER,CACElgC,GAAI,QACJkgC,KAAM,mFAER,CACElgC,GAAI,QACJkgC,KAAM,0BAER,CACElgC,GAAI,QACJkgC,KAAM,wFAER,CACElgC,GAAI,QACJkgC,KAAM,6DAER,CACElgC,GAAI,QACJkgC,KAAM,kHAER,CACElgC,GAAI,QACJkgC,KAAM,+FAER,CACElgC,GAAI,QACJkgC,KAAM,gDAER,CACElgC,GAAI,QACJkgC,KAAM,uIAER,CACElgC,GAAI,QACJkgC,KAAM,sEAER,CACElgC,GAAI,QACJkgC,KAAM,gXAER,CACElgC,GAAI,QACJkgC,KAAM,gHAER,CACElgC,GAAI,QACJkgC,KAAM,+CAER,CACElgC,GAAI,QACJkgC,KAAM,+JAER,CACElgC,GAAI,QACJkgC,KAAM,iDAER,CACElgC,GAAI,QACJkgC,KAAM,yLAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,mSAAkSl/B,OAAOzF,OAAO2O,UAAW,qfAElV,CACElK,GAAI,QACJkgC,KAAM,8DAER,CACElgC,GAAI,QACJkgC,KAAM,uEAER,CACElgC,GAAI,QACJkgC,KAAM,wEAER,CACElgC,GAAI,QACJkgC,KAAM,wIAER,CACElgC,GAAI,QACJkgC,KAAM,wKAER,CACElgC,GAAI,QACJkgC,KAAM,6FAER,CACElgC,GAAI,QACJkgC,KAAM,kCAER,CACElgC,GAAI,QACJkgC,KAAM,0DAER,CACElgC,GAAI,QACJkgC,KAAM,0LAER,CACElgC,GAAI,QACJkgC,KAAM,uDAER,CACElgC,GAAI,QACJkgC,KAAM,mCAER,CACElgC,GAAI,QACJkgC,KAAM,gDAER,CACElgC,GAAI,QACJkgC,KAAM,oDAER,CACElgC,GAAI,QACJkgC,KAAM,SAER,CACElgC,GAAI,QACJkgC,KAAM,6CAER,CACElgC,GAAI,QACJkgC,KAAM,iDAER,CACElgC,GAAI,QACJkgC,KAAM,oEAER,CACElgC,GAAI,QACJkgC,KAAM,kBAER,CACElgC,GAAI,QACJkgC,KAAM,qCAER,CACElgC,GAAI,QACJkgC,KAAM,4CAER,CACElgC,GAAI,QACJkgC,KAAM,2DAER,CACElgC,GAAI,QACJkgC,KAAM,gDAER,CACElgC,GAAI,QACJkgC,KAAM,6CAER,CACElgC,GAAI,QACJkgC,KAAM,2FAER,CACElgC,GAAI,QACJkgC,KAAM,+CAER,CACElgC,GAAI,QACJkgC,KAAM,6yBAER,CACElgC,GAAI,QACJkgC,KAAM,2EAER,CACElgC,GAAI,QACJkgC,KAAM,0OAER,CACElgC,GAAI,QACJkgC,KAAM,6EAER,CACElgC,GAAI,QACJkgC,KAAM,qLAER,CACElgC,GAAI,QACJkgC,KAAM,mDAER,CACElgC,GAAI,QACJkgC,KAAM,uMAER,CACElgC,GAAI,QACJkgC,KAAM,gtDAER,CACElgC,GAAI,QACJkgC,KAAM,8FAER,CACElgC,GAAI,QACJkgC,KAAM,+GAER,CACElgC,GAAI,QACJkgC,KAAM,uCAER,CACElgC,GAAI,QACJkgC,KAAM,gHAER,CACElgC,GAAI,QACJkgC,KAAM,iEAER,CACElgC,GAAI,QACJkgC,KAAM,iCAER,CACElgC,GAAI,QACJkgC,KAAM,4KAER,CACElgC,GAAI,QACJkgC,KAAM,gFAER,CACElgC,GAAI,QACJkgC,KAAM,2EAER,CACElgC,GAAI,QACJkgC,KAAM,oGAER,CACElgC,GAAI,QACJkgC,KAAM,8GAER,CACElgC,GAAI,QACJkgC,KAAM,gCAER,CACElgC,GAAI,QACJkgC,KAAM,6FAER,CACElgC,GAAI,QACJkgC,KAAM,uMAER,CACElgC,GAAI,QACJkgC,KAAM,usBAER,CACElgC,GAAI,QACJkgC,KAAM,mWAER,CACElgC,GAAI,QACJkgC,KAAM,oGAER,CACElgC,GAAI,QACJkgC,KAAM,sEAER,CACElgC,GAAI,QACJkgC,KAAM,uFAER,CACElgC,GAAI,QACJkgC,KAAM,wCAER,CACElgC,GAAI,QACJkgC,KAAM,+BAER,CACElgC,GAAI,QACJkgC,KAAM,2IAER,CACElgC,GAAI,QACJkgC,KAAM,6VAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,whBAAuhBl/B,OAAOzF,OAAO2O,UAAW,UAEvkB,CACElK,GAAI,QACJkgC,KAAM,4EAER,CACElgC,GAAI,QACJkgC,KAAM,sDAER,CACElgC,GAAI,QACJkgC,KAAM,+SAER,CACElgC,GAAI,QACJkgC,KAAM,2JAER,CACElgC,GAAI,QACJkgC,KAAM,kHAER,CACElgC,GAAI,QACJkgC,KAAM,mWAER,CACElgC,GAAI,QACJkgC,KAAM,gEAER,CACElgC,GAAI,QACJkgC,KAAM,wDAER,CACElgC,GAAI,QACJkgC,KAAM,0BAER,CACElgC,GAAI,QACJkgC,KAAM,kFACFgmC,eAAa,OAAOrnC,eAAe0+B,qBAEzC,CACEv9D,GAAI,QACJkgC,KAAM,kLAER,CACElgC,GAAI,QACJkgC,KAAM,gBAER,CACElgC,GAAI,QACJkgC,KAAM,yDAER,CACElgC,GAAI,QACJkgC,KAAM,olBAER,CACElgC,GAAI,QACJkgC,KAAM,uKAER,CACElgC,GAAI,QACJkgC,KAAM,0HAER,CACElgC,GAAI,QACJkgC,KAAM,2VAER,CACElgC,GAAI,QACJkgC,KAAM,qKAER,CACElgC,GAAI,QACJkgC,KAAM,cAER,CACElgC,GAAI,QACJkgC,KAAM,yFAER,CACElgC,GAAI,QACJkgC,KAAM,6BAER,CACElgC,GAAI,QACJkgC,KAAM,qCAER,CACElgC,GAAI,QACJkgC,KAAM,oEAER,CACElgC,GAAI,QACJkgC,KAAM,wJAER,CACElgC,GAAI,QACJkgC,KAAM,6CAER,CACElgC,GAAI,QACJkgC,KAAM,wHAER,CACElgC,GAAI,QACJkgC,KAAM,wKAER,CACElgC,GAAI,QACJkgC,KAAM,sDAER,CACElgC,GAAI,QACJkgC,KAAM,qGAER,CACElgC,GAAI,QACJkgC,KAAM,+CAER,CACElgC,GAAI,QACJkgC,KAAM,8IAER,CACElgC,GAAI,QACJkgC,KAAM,ukBAER,CACElgC,GAAI,QACJkgC,KAAM,uOAER,CACElgC,GAAI,QACJkgC,KAAM,qEAER,CACElgC,GAAI,QACJkgC,KAAM,+DAER,CACElgC,GAAI,QACJkgC,KAAM,qDAER,CACElgC,GAAI,QACJkgC,KAAM,0EAER,CACElgC,GAAI,QACJkgC,KAAM,gEAER,CACElgC,GAAI,QACJkgC,KAAM,4EAER,CACElgC,GAAI,QACJkgC,KAAM,uDAER,CACElgC,GAAI,QACJkgC,KAAM,8JAER,CACElgC,GAAI,QACJkgC,KAAM,+EAER,CACElgC,GAAI,QACJkgC,KAAM,oHAER,CACElgC,GAAI,QACJkgC,KAAM,oCAER,CACElgC,GAAI,QACJkgC,KAAM,8DAER,CACElgC,GAAI,QACJkgC,KAAM,gCAER,CACElgC,GAAI,QACJkgC,KAAM,wDAER,CACElgC,GAAI,QACJkgC,KAAM,mDAER,CACElgC,GAAI,QACJkgC,KAAM,6CAER,CACElgC,GAAI,QACJkgC,KAAM,iGAER,CACElgC,GAAI,QACJkgC,KAAM,4FAER,CACElgC,GAAI,QACJkgC,KAAM,kFACN05D,UAAYhoG,OAAOosG,KAAK,iDAE1B,CACEh+F,GAAI,QACJkgC,KAAM,6EAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,ifAAgfl/B,OAAOzF,OAAO2O,UAAW,2MAEhiB,CACElK,GAAI,QACJkgC,KAAM,kGAER,CACElgC,GAAI,QACJkgC,KAAM,uCAER,CACElgC,GAAI,QACJkgC,KAAM,2FAER,CACElgC,GAAI,QACJkgC,KAAM,0EAER,CACElgC,GAAI,QACJkgC,KAAM,uDAER,CACElgC,GAAI,QACJkgC,KAAM,sDAER,CACElgC,GAAI,QACJkgC,KAAM,0DAER,CACElgC,GAAI,QACJkgC,KAAM,2HAER,CACElgC,GAAI,QACJkgC,KAAM,uDAER,CACElgC,GAAI,QACJkgC,KAAM,wIAER,CACElgC,GAAI,QACJkgC,KAAM,8JAER,CACElgC,GAAI,QACJkgC,KAAM,0NAER,CACElgC,GAAI,QACJkgC,KAAM,6GAER,CACElgC,GAAI,QACJkgC,KAAM,+MAER,CACElgC,GAAI,QACJkgC,KAAM,qHAER,CACElgC,GAAI,QACJkgC,KAAM,8BAER,CACElgC,GAAI,QACJkgC,KAAM,2hBAER,CACElgC,GAAI,QACJkgC,KAAM,oHAER,CACElgC,GAAI,QACJkgC,KAAM,+DAER,CACElgC,GAAI,QACJkgC,KAAM,qFAER,CACElgC,GAAI,QACJkgC,KAAM,8EAER,CACElgC,GAAI,QACJkgC,KAAM,kIAER,CACElgC,GAAI,QACJkgC,KAAM,mCAER,CACElgC,GAAI,QACJkgC,KAAM,0FAER,CACElgC,GAAI,QACJkgC,KAAM,2HAER,CACElgC,GAAI,QACJkgC,KAAM,0DAER,CACElgC,GAAI,QACJkgC,KAAM,0DAER,CACElgC,GAAI,QACJkgC,KAAM,kEAER,CACElgC,GAAI,QACJkgC,KAAM,oHAER,CACElgC,GAAI,QACJkgC,KAAM,+CAER,CACElgC,GAAI,QACJkgC,KAAM,0DAER,CACElgC,GAAI,QACJkgC,KAAM,gDAER,CACElgC,GAAI,QACJkgC,KAAM,gFAER,CACElgC,GAAI,QACJkgC,KAAM,ogBAER,CACElgC,GAAI,QACJkgC,KAAM,uHAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,gEAA+Dl/B,OAAOzF,OAAO2O,UAAW,mBAE/G,CACElK,GAAI,QACJkgC,KAAM,8GAER,CACElgC,GAAI,QACJkgC,KAAM,+DAER,CACElgC,GAAI,QACJkgC,KAAM,qDAER,CACElgC,GAAI,QACJkgC,KAAM,kDAER,CACElgC,GAAI,QACJkgC,KAAM,8IAER,CACElgC,GAAI,QACJkgC,KAAM,4IAER,CACElgC,GAAI,QACJkgC,KAAM,uFAER,CACElgC,GAAI,QACJkgC,KAAM,8LAER,CACElgC,GAAI,QACJkgC,KAAM,mRAER,CACElgC,GAAI,QACJkgC,KAAM,6FAER,CACElgC,GAAI,QACJkgC,KAAM,qDAER,CACElgC,GAAI,QACJkgC,KAAM,qEAER,CACElgC,GAAI,QACJkgC,KAAM,qEAER,CACElgC,GAAI,QACJkgC,KAAM,scAER,CACElgC,GAAI,QACJkgC,KAAM,6NAER,CACElgC,GAAI,QACJkgC,KAAM,6BAER,CACElgC,GAAI,QACJkgC,KAAM,yFAER,CACElgC,GAAI,QACJkgC,KAAM,gDAER,CACElgC,GAAI,QACJkgC,KAAM,oJAER,CACElgC,GAAI,QACJkgC,KAAM,0BAER,CACElgC,GAAI,QACJkgC,KAAM,mFAER,CACElgC,GAAI,QACJkgC,KAAM,uHAER,CACElgC,GAAI,QACJkgC,KAAM,iFAER,CACElgC,GAAI,QACJkgC,KAAM,8FAER,CACElgC,GAAI,QACJkgC,KAAM,iCAER,CACElgC,GAAI,QACJkgC,KAAM,2PAER,CACElgC,GAAI,QACJkgC,KAAM,4DAER,CACElgC,GAAI,QACJkgC,KAAM,uHAER,CACElgC,GAAI,QACJkgC,KAAM,wRAER,CACElgC,GAAI,QACJkgC,KAAM,iKAER,CACElgC,GAAI,QACJkgC,KAAM,iFAER,CACElgC,GAAI,QACJkgC,KAAM,qFAER,CACElgC,GAAI,QACJkgC,KAAM,gGAER,CACElgC,GAAI,QACJkgC,KAAM,+TAER,CACElgC,GAAI,QACJkgC,KAAM,mHAER,CACElgC,GAAI,QACJkgC,KAAM,+EAER,CACElgC,GAAI,QACJkgC,KAAM,uGAER,CACElgC,GAAI,QACJkgC,KAAM,yCAER,CACElgC,GAAI,QACJkgC,KAAM,4KAER,CACElgC,GAAI,QACJkgC,KAAM,qCAER,CACElgC,GAAI,QACJkgC,KAAM,0SAER,CACElgC,GAAI,QACJkgC,KAAM,unBAER,CACElgC,GAAI,QACJkgC,KAAM,wLAER,CACElgC,GAAI,QACJkgC,KAAM,2CAER,CACElgC,GAAI,QACJkgC,KAAM,6DAER,CACElgC,GAAI,QACJkgC,KAAM,qDAER,CACElgC,GAAI,QACJkgC,KAAM,kIAER,CACElgC,GAAI,QACJkgC,KAAM,wDACFgmC,eAAa,OAAOrnC,eAAemsB,qBAEzC,CACEhrD,GAAI,QACJkgC,KAAM,gCAER,CACElgC,GAAI,QACJkgC,KAAM,qMAER,CACElgC,GAAI,QACJkgC,KAAM,kZAER,CACElgC,GAAI,QACJkgC,KAAM,mEAER,CACElgC,GAAI,QACJkgC,KAAM,gDAER,CACElgC,GAAI,QACJkgC,KAAM,iIAER,CACElgC,GAAI,QACJkgC,KAAM,sGAER,CACElgC,GAAI,QACJkgC,KAAM,oIAER,CACElgC,GAAI,QACJkgC,KAAM,kQAER,CACElgC,GAAI,QACJkgC,KAAM,+GAER,CACElgC,GAAI,QACJkgC,KAAM,kEAER,CACElgC,GAAI,QACJkgC,KAAM,0GAER,CACElgC,GAAI,QACJkgC,KAAM,8DAER,CACElgC,GAAI,QACJkgC,KAAM,0FAER,CACElgC,GAAI,QACJkgC,KAAM,yJAER,CACElgC,GAAI,QACJkgC,KAAM,6yBAER,CACElgC,GAAI,QACJkgC,KAAM,4HAER,CACElgC,GAAI,QACJkgC,KAAM,yHAER,CACElgC,GAAI,QACJkgC,KAAM,8CAER,CACElgC,GAAI,QACJkgC,KAAM,2DAER,CACElgC,GAAI,QACJkgC,KAAM,8BAER,CACElgC,GAAI,QACJkgC,KAAM,yBAER,CACElgC,GAAI,QACJkgC,KAAM,mJAER,CACElgC,GAAI,QACJkgC,KAAM,8DAER,CACElgC,GAAI,QACJkgC,KAAM,mJAER,CACElgC,GAAI,QACJkgC,KAAM,+EAER,CACElgC,GAAI,QACJkgC,KAAM,mDAER,CACElgC,GAAI,QACJkgC,KAAM,gFAER,CACElgC,GAAI,QACJkgC,KAAM,+FAER,CACElgC,GAAI,QACJkgC,KAAM,6FAER,CACElgC,GAAI,QACJkgC,KAAM,oIAER,CACElgC,GAAI,QACJkgC,KAAM,sIAER,CACElgC,GAAI,QACJkgC,KAAM,2DAER,CACElgC,GAAI,QACJkgC,KAAM,iYAER,CACElgC,GAAI,QACJkgC,KAAM,qZAER,CACElgC,GAAI,QACJkgC,KAAM,+DAER,CACElgC,GAAI,QACJkgC,KAAM,8IAER,CACElgC,GAAI,QACJkgC,KAAM,kdAER,CACElgC,GAAI,QACJkgC,KAAM,0EAER,CACElgC,GAAI,QACJkgC,KAAM,kTAER,CACElgC,GAAI,QACJkgC,KAAM,iEAER,CACElgC,GAAI,QACJkgC,KAAM,0KAER,CACElgC,GAAI,QACJkgC,KAAM,sKAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,+LAA8Ll/B,OAAOzF,OAAO2O,UAAW,6FAA6FlJ,OAAOzF,OAAO2O,UAAW,YAEpW,CACElK,GAAI,QACJkgC,KAAM,kEAER,CACElgC,GAAI,QACJkgC,KAAM,gGAER,CACElgC,GAAI,QACJkgC,KAAM,uHACFgmC,eAAa,OAAOrnC,eAAemsB,qBAEzC,CACEhrD,GAAI,QACJkgC,KAAM,yFAER,CACElgC,GAAI,QACJkgC,KAAM,yCAER,CACElgC,GAAI,QACJkgC,KAAM,2XAER,CACElgC,GAAI,QACJkgC,KAAM,kOAER,CACElgC,GAAI,QACJkgC,KAAM,2HAER,CACElgC,GAAI,QACJkgC,KAAM,0DAER,CACElgC,GAAI,QACJkgC,KAAM,sYAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,+IAA8Il/B,OAAOzF,OAAO2O,UAAW,mDAE9L,CACElK,GAAI,QACJkgC,KAAM,gEAER,CACElgC,GAAI,QACJkgC,KAAM,sIAER,CACElgC,GAAI,QACJkgC,KAAM,qHACFgmC,eAAa,OAAOrnC,eAAemsB,oBAAsBmE,kBAAkB,GAAGhyB,aAEpF,CACEn9B,GAAI,QACJkgC,KAAM,iOAER,CACElgC,GAAI,QACJkgC,KAAM,gKAER,CACElgC,GAAI,QACJkgC,KAAM,+KAER,CACElgC,GAAI,QACJkgC,KAAM,+YACFgmC,eAAa,OAAOrnC,eAAemsB,qBAEzC,CACEhrD,GAAI,QACJkgC,KAAM,4TAER,CACElgC,GAAI,QACJkgC,KAAM,yLAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,+SAA8Sl/B,OAAOzF,OAAO2O,UAAW,8BAE9V,CACElK,GAAI,QACJkgC,KAAM,uGAER,CACElgC,GAAI,QACJkgC,KAAM,mEAER,CACElgC,GAAI,QACJkgC,KAAM,gSAER,CACElgC,GAAI,QACJkgC,KAAM,oGAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,6EAA4El/B,OAAOzF,OAAO2O,UAAW,mBAE5H,CACElK,GAAI,QACJkgC,KAAM,4GAER,CACElgC,GAAI,QACJkgC,KAAM,sYAER,CACElgC,GAAI,QACJkgC,KAAM,uCAER,CACElgC,GAAI,QACJkgC,KAAM,wIAER,CACElgC,GAAI,QACJkgC,KAAM,wXAER,CACElgC,GAAI,QACJkgC,KAAM,6BAER,CACElgC,GAAI,QACJkgC,KAAM,6KAER,CACElgC,GAAI,QACJkgC,KAAM,wEAER,CACElgC,GAAI,QACJkgC,KAAM,8FAER,CACElgC,GAAI,QACJkgC,KAAM,wEAER,CACElgC,GAAI,QACJkgC,KAAM,6KAER,CACElgC,GAAI,QACJkgC,KAAM,yFACFgmC,eAAa,OAAOrnC,eAAemsB,oBAAsBmE,kBAAkB,GAAGhyB,aAEpF,CACEn9B,GAAI,QACJkgC,KAAM,yaAER,CACElgC,GAAI,QACJkgC,KAAM,0HAER,CACElgC,GAAI,QACJkgC,KAAM,sGAER,CACElgC,GAAI,QACJkgC,KAAM,4EAER,CACElgC,GAAI,QACJkgC,KAAM,6WAER,CACElgC,GAAI,QACJkgC,KAAM,wFAER,CACElgC,GAAI,QACJkgC,KAAM,0EAER,CACElgC,GAAI,QACJkgC,KAAM,sTAER,CACElgC,GAAI,QACJkgC,KAAM,gOAER,CACElgC,GAAI,QACJkgC,KAAM,yDAER,CACElgC,GAAI,QACJkgC,KAAM,4HAER,CACElgC,GAAI,QACJkgC,KAAM,uDAER,CACElgC,GAAI,QACJkgC,KAAM,qdAER,CACElgC,GAAI,QACJkgC,KAAM,+DAER,CACElgC,GAAI,QACJkgC,KAAM,mHAER,CACElgC,GAAI,QACJkgC,KAAM,iGAER,CACElgC,GAAI,QACJkgC,KAAM,yNAER,CACElgC,GAAI,QACJkgC,KAAM,uPAER,CACElgC,GAAI,QACJkgC,KAAM,iPAER,CACElgC,GAAI,QACJkgC,KAAM,wBAER,CACElgC,GAAI,QACJkgC,KAAM,oJAER,CACElgC,GAAI,QACJkgC,KAAM,2DAER,CACElgC,GAAI,QACJkgC,KAAM,+EACFgmC,eAAa,OAAOrnC,eAAemsB,qBAEzC,CACEhrD,GAAI,QACJkgC,KAAM,qDAER,CACElgC,GAAI,QACJkgC,KAAM,sEAER,CACElgC,GAAI,QACJkgC,KAAM,iBAER,CACElgC,GAAI,QACJkgC,KAAM,0EAER,CACElgC,GAAI,QACJkgC,KAAM,uHAER,CACElgC,GAAI,QACJkgC,KAAM,8KAER,CACElgC,GAAI,QACJkgC,KAAM,iDAER,CACElgC,GAAI,QACJkgC,KAAM,qHAER,CACElgC,GAAI,QACJkgC,KAAM,yRAER,CACElgC,GAAI,QACJkgC,KAAM,kQAER,CACElgC,GAAI,QACJkgC,KAAM,kXAER,CACElgC,GAAI,QACJkgC,KAAM,geAER,CACElgC,GAAI,QACJkgC,KAAM,6RAER,CACElgC,GAAI,QACJkgC,KAAM,oEAER,CACElgC,GAAI,QACJkgC,KAAM,kMAER,CACElgC,GAAI,QACJkgC,KAAM,sPAER,CACElgC,GAAI,QACJkgC,KAAM,iLAER,CACElgC,GAAI,QACJkgC,KAAM,0CAER,CACElgC,GAAI,QACJkgC,KAAM,sCAER,CACElgC,GAAI,QACJkgC,KAAM,4GAER,CACElgC,GAAI,QACJkgC,KAAM,oDAER,CACElgC,GAAI,QACJkgC,KAAM,yDAER,CACElgC,GAAI,QACJkgC,KAAM,iEAER,CACElgC,GAAI,QACJkgC,KAAM,yEAER,CACElgC,GAAI,QACJkgC,KAAM,gFAER,CACElgC,GAAI,QACJkgC,KAAM,4ZAER,CACElgC,GAAI,QACJkgC,KAAM,qDAER,CACElgC,GAAI,QACJkgC,KAAM,8EAER,CACElgC,GAAI,QACJkgC,KAAM,8DAER,CACElgC,GAAI,QACJkgC,KAAM,mCAER,CACElgC,GAAI,QACJkgC,KAAM,wRAER,CACElgC,GAAI,QACJkgC,KAAM,wFAER,CACElgC,GAAI,QACJkgC,KAAM,iIAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,gBAAel/B,OAAOzF,OAAO2O,UAAW,2FAE/D,CACElK,GAAI,QACJkgC,KAAM,4FAER,CACElgC,GAAI,QACJkgC,KAAM,wDAER,CACElgC,GAAI,QACJkgC,KAAM,iGAER,CACElgC,GAAI,QACJkgC,KAAM,sEAER,CACElgC,GAAI,QACJkgC,KAAM,sEAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,iEAAgEl/B,OAAOzF,OAAO2O,UAAW,OAEhH,CACElK,GAAI,QACJkgC,KAAM,mDAER,CACElgC,GAAI,QACJkgC,KAAM,uLAER,CACElgC,GAAI,QACJkgC,KAAM,wGAER,CACElgC,GAAI,QACJkgC,KAAM,+IAER,CACElgC,GAAI,QACJkgC,KAAM,mDAER,CACElgC,GAAI,QACJkgC,KAAM,4JAER,CACElgC,GAAI,QACJkgC,KAAM,6FAER,CACElgC,GAAI,QACJkgC,KAAM,yFAER,CACElgC,GAAI,QACJkgC,KAAM,sEAER,CACElgC,GAAI,QACJkgC,KAAM,wEAER,CACElgC,GAAI,QACJkgC,KAAM,6CAER,CACElgC,GAAI,QACJkgC,KAAM,yYAER,CACElgC,GAAI,QACJkgC,KAAM,sDAER,CACElgC,GAAI,QACJkgC,KAAM,sUAER,CACElgC,GAAI,QACJkgC,KAAM,oDAER,CACElgC,GAAI,QACJkgC,KAAM,iEAER,CACElgC,GAAI,QACJkgC,KAAM,0OAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,qDAAoDl/B,OAAOzF,OAAO2O,UAAW,iJAEpG,CACElK,GAAI,QACAkgC,WAAS,MAAQ,iBAAgBl/B,OAAOzF,OAAO2O,UAAW,mIAEhE,CACElK,GAAI,QACJkgC,KAAM,wXAER,CACElgC,GAAI,QACJkgC,KAAM,kQAER,CACElgC,GAAI,QACJkgC,KAAM,iHAER,CACElgC,GAAI,QACJkgC,KAAM,yQAER,CACElgC,GAAI,QACJkgC,KAAM,oVAER,CACElgC,GAAI,QACJkgC,KAAM,mRAER,CACElgC,GAAI,QACJkgC,KAAM,qGAER,CACElgC,GAAI,QACJkgC,KAAM,yNAER,CACElgC,GAAI,QACJkgC,KAAM,qLAER,CACElgC,GAAI,QACJkgC,KAAM,mGAER,CACElgC,GAAI,QACJkgC,KAAM,sOAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,2EAA0El/B,OAAOzF,OAAO2O,UAAW,wBAE1H,CACElK,GAAI,QACJkgC,KAAM,4CAER,CACElgC,GAAI,QACJkgC,KAAM,sFAER,CACElgC,GAAI,QACJkgC,KAAM,6bAER,CACElgC,GAAI,QACJkgC,KAAM,4EACFgmC,eAAa,OAAOrnC,eAAey+B,uBAEzC,CACEt9D,GAAI,QACJkgC,KAAM,8EAER,CACElgC,GAAI,QACJkgC,KAAM,8BAER,CACElgC,GAAI,QACJkgC,KAAM,8JAER,CACElgC,GAAI,QACJkgC,KAAM,2EAER,CACElgC,GAAI,QACJkgC,KAAM,iKAER,CACElgC,GAAI,QACJkgC,KAAM,oKAER,CACElgC,GAAI,QACJkgC,KAAM,ofAER,CACElgC,GAAI,QACJkgC,KAAM,6KAER,CACElgC,GAAI,QACJkgC,KAAM,oDAER,CACElgC,GAAI,QACJkgC,KAAM,wEAER,CACElgC,GAAI,QACJkgC,KAAM,0KAER,CACElgC,GAAI,QACJkgC,KAAM,wGAER,CACElgC,GAAI,QACJkgC,KAAM,oFAER,CACElgC,GAAI,QACJkgC,KAAM,wLAER,CACElgC,GAAI,QACJkgC,KAAM,oMAER,CACElgC,GAAI,QACJkgC,KAAM,kHAER,CACElgC,GAAI,QACJkgC,KAAM,wBAER,CACElgC,GAAI,QACJkgC,KAAM,0EAER,CACElgC,GAAI,QACJkgC,KAAM,mGAER,CACElgC,GAAI,QACJkgC,KAAM,6RAER,CACElgC,GAAI,QACJkgC,KAAM,kGAER,CACElgC,GAAI,QACJkgC,KAAM,+FAER,CACElgC,GAAI,QACJkgC,KAAM,kFAER,CACElgC,GAAI,QACJkgC,KAAM,kZAER,CACElgC,GAAI,QACJkgC,KAAM,2DAER,CACElgC,GAAI,QACJkgC,KAAM,4GAER,CACElgC,GAAI,QACJkgC,KAAM,0OAER,CACElgC,GAAI,QACJkgC,KAAM,uEACFgmC,eAAa,OAAOrnC,eAAe0+B,qBAEzC,CACEv9D,GAAI,QACJkgC,KAAM,+GAER,CACElgC,GAAI,QACJkgC,KAAM,+GAER,CACElgC,GAAI,QACJkgC,KAAM,gKAER,CACElgC,GAAI,QACJkgC,KAAM,uDAER,CACElgC,GAAI,QACJkgC,KAAM,iEAER,CACElgC,GAAI,QACJkgC,KAAM,0SAER,CACElgC,GAAI,QACJkgC,KAAM,sCAER,CACElgC,GAAI,QACJkgC,KAAM,iFAER,CACElgC,GAAI,QACJkgC,KAAM,oEAER,CACElgC,GAAI,QACJkgC,KAAM,0GAER,CACElgC,GAAI,QACJkgC,KAAM,kLAER,CACElgC,GAAI,QACJkgC,KAAM,+CAER,CACElgC,GAAI,QACJkgC,KAAM,2DAER,CACElgC,GAAI,QACJkgC,KAAM,iIAER,CACElgC,GAAI,QACJkgC,KAAM,oDAER,CACElgC,GAAI,QACJkgC,KAAM,uVAER,CACElgC,GAAI,QACJkgC,KAAM,0EAER,CACElgC,GAAI,QACJkgC,KAAM,oDAER,CACElgC,GAAI,QACJkgC,KAAM,qGAER,CACElgC,GAAI,QACJkgC,KAAM,6DAER,CACElgC,GAAI,QACJkgC,KAAM,2MAER,CACElgC,GAAI,QACJkgC,KAAM,6CAER,CACElgC,GAAI,QACJkgC,KAAM,+EAER,CACElgC,GAAI,QACJkgC,KAAM,qIACFgmC,eAAa,OAAOrnC,eAAey+B,uBAEzC,CACEt9D,GAAI,QACJkgC,KAAM,oYAER,CACElgC,GAAI,QACJkgC,KAAM,gMAER,CACElgC,GAAI,QACJkgC,KAAM,gJAER,CACElgC,GAAI,QACJkgC,KAAM,0LAER,CACElgC,GAAI,QACJkgC,KAAM,4TAER,CACElgC,GAAI,QACJkgC,KAAM,idAER,CACElgC,GAAI,QACJkgC,KAAM,qaAER,CACElgC,GAAI,QACJkgC,KAAM,wBAER,CACElgC,GAAI,QACJkgC,KAAM,oYAER,CACElgC,GAAI,QACJkgC,KAAM,uGAER,CACElgC,GAAI,QACJkgC,KAAM,yBAER,CACElgC,GAAI,QACJkgC,KAAM,yGAER,CACElgC,GAAI,QACJkgC,KAAM,8DAER,CACElgC,GAAI,QACJkgC,KAAM,uWAER,CACElgC,GAAI,QACJkgC,KAAM,qDAER,CACElgC,GAAI,QACJkgC,KAAM,oIAER,CACElgC,GAAI,QACJkgC,KAAM,4RAER,CACElgC,GAAI,QACJkgC,KAAM,gOAER,CACElgC,GAAI,QACJkgC,KAAM,2HAER,CACElgC,GAAI,QACJkgC,KAAM,gHAER,CACElgC,GAAI,QACJkgC,KAAM,uFAER,CACElgC,GAAI,QACJkgC,KAAM,oKAER,CACElgC,GAAI,QACJkgC,KAAM,6KAER,CACElgC,GAAI,QACJkgC,KAAM,2LAER,CACElgC,GAAI,QACJkgC,KAAM,mVAER,CACElgC,GAAI,QACJkgC,KAAM,uHAER,CACElgC,GAAI,QACJkgC,KAAM,oHAER,CACElgC,GAAI,QACJkgC,KAAM,0FAER,CACElgC,GAAI,QACJkgC,KAAM,kIAER,CACElgC,GAAI,QACJkgC,KAAM,uGAER,CACElgC,GAAI,QACJkgC,KAAM,oOAER,CACElgC,GAAI,QACJkgC,KAAM,oNAER,CACElgC,GAAI,QACJkgC,KAAM,sOAER,CACElgC,GAAI,QACJkgC,KAAM,8GAER,CACElgC,GAAI,QACJkgC,KAAM,yKAER,CACElgC,GAAI,QACJkgC,KAAM,6DAER,CACElgC,GAAI,QACJkgC,KAAM,obAER,CACElgC,GAAI,QACJkgC,KAAM,0RAER,CACElgC,GAAI,QACJkgC,KAAM,gGAER,CACElgC,GAAI,QACJkgC,KAAM,8SAER,CACElgC,GAAI,QACJkgC,KAAM,wMAER,CACElgC,GAAI,QACJkgC,KAAM,wFAER,CACElgC,GAAI,QACJkgC,KAAM,oGAER,CACElgC,GAAI,QACJkgC,KAAM,uKAER,CACElgC,GAAI,QACJkgC,KAAM,oCAER,CACElgC,GAAI,QACJkgC,KAAM,sJAER,CACElgC,GAAI,QACJkgC,KAAM,6VAER,CACElgC,GAAI,QACJkgC,KAAM,2KAER,CACElgC,GAAI,QACJkgC,KAAM,oWAER,CACElgC,GAAI,QACJkgC,KAAM,yJAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,sGAAqGl/B,OAAOzF,OAAO2O,UAAW,aAErJ,CACElK,GAAI,QACJkgC,KAAM,wHAER,CACElgC,GAAI,QACJkgC,KAAM,kKAER,CACElgC,GAAI,QACJkgC,KAAM,8HAER,CACElgC,GAAI,QACJkgC,KAAM,wDAER,CACElgC,GAAI,QACJkgC,KAAM,+ZAER,CACElgC,GAAI,QACJkgC,KAAM,kFAER,CACElgC,GAAI,QACJkgC,KAAM,seAER,CACElgC,GAAI,QACJkgC,KAAM,+WAER,CACElgC,GAAI,QACJkgC,KAAM,iGAER,CACElgC,GAAI,QACJkgC,KAAM,sYAER,CACElgC,GAAI,QACJkgC,KAAM,+GAER,CACElgC,GAAI,QACJkgC,KAAM,kHAER,CACElgC,GAAI,QACJkgC,KAAM,8DAER,CACElgC,GAAI,QACJkgC,KAAM,+DAER,CACElgC,GAAI,QACJkgC,KAAM,mBAER,CACElgC,GAAI,QACJkgC,KAAM,qEAER,CACElgC,GAAI,QACJkgC,KAAM,0WAER,CACElgC,GAAI,QACJkgC,KAAM,iNAER,CACElgC,GAAI,QACJkgC,KAAM,qEAER,CACElgC,GAAI,QACJkgC,KAAM,yCAER,CACElgC,GAAI,QACJkgC,KAAM,gFAER,CACElgC,GAAI,QACJkgC,KAAM,2BAER,CACElgC,GAAI,QACJkgC,KAAM,qEAER,CACElgC,GAAI,QACJkgC,KAAM,2SAER,CACElgC,GAAI,QACJkgC,KAAM,2JAER,CACElgC,GAAI,QACJkgC,KAAM,iDACFgmC,eAAa,OAAOtjC,SAASI,eAAe9f,IAAI,YAEtD,CACEljB,GAAI,QACJkgC,KAAM,mHAER,CACElgC,GAAI,QACJkgC,KAAM,gJAER,CACElgC,GAAI,QACJkgC,KAAM,kFAER,CACElgC,GAAI,QACJkgC,KAAM,4QAER,CACElgC,GAAI,QACJkgC,KAAM,uEAER,CACElgC,GAAI,QACJkgC,KAAM,kMAER,CACElgC,GAAI,QACJkgC,KAAM,mDAER,CACElgC,GAAI,QACJkgC,KAAM,sFAER,CACElgC,GAAI,QACJkgC,KAAM,gCAER,CACElgC,GAAI,QACJkgC,KAAM,wFAER,CACElgC,GAAI,QACJkgC,KAAM,6NAER,CACElgC,GAAI,QACJkgC,KAAM,uHAER,CACElgC,GAAI,QACJkgC,KAAM,mFAER,CACElgC,GAAI,QACJkgC,KAAM,uDAER,CACElgC,GAAI,QACJkgC,KAAM,oDACFgmC,eAAa,OAAOrnC,eAAey+B,uBAEzC,CACEt9D,GAAI,QACJkgC,KAAM,oQAER,CACElgC,GAAI,QACJkgC,KAAM,uFAER,CACElgC,GAAI,QACJkgC,KAAM,6NAER,CACElgC,GAAI,QACJkgC,KAAM,6BAER,CACElgC,GAAI,QACJkgC,KAAM,sRAER,CACElgC,GAAI,QACJkgC,KAAM,mJAER,CACElgC,GAAI,QACJkgC,KAAM,qEAER,CACElgC,GAAI,QACJkgC,KAAM,0JAER,CACElgC,GAAI,QACJkgC,KAAM,kXAER,CACElgC,GAAI,QACJkgC,KAAM,+ZAER,CACElgC,GAAI,QACJkgC,KAAM,uKAER,CACElgC,GAAI,QACJkgC,KAAM,qeAER,CACElgC,GAAI,QACJkgC,KAAM,sGAER,CACElgC,GAAI,QACJkgC,KAAM,+GAER,CACElgC,GAAI,QACJkgC,KAAM,qIAER,CACElgC,GAAI,QACJkgC,KAAM,uGAER,CACElgC,GAAI,QACJkgC,KAAM,oDAER,CACElgC,GAAI,QACJkgC,KAAM,+WAER,CACElgC,GAAI,QACJkgC,KAAM,gHAER,CACElgC,GAAI,QACJkgC,KAAM,uaAER,CACElgC,GAAI,QACJkgC,KAAM,oKAER,CACElgC,GAAI,QACJkgC,KAAM,8RAER,CACElgC,GAAI,QACJkgC,KAAM,iTAER,CACElgC,GAAI,QACJkgC,KAAM,yEAER,CACElgC,GAAI,QACJkgC,KAAM,4FAER,CACElgC,GAAI,QACJkgC,KAAM,iRAER,CACElgC,GAAI,QACJkgC,KAAM,iKAER,CACElgC,GAAI,QACJkgC,KAAM,yCAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,iFAAgFl/B,OAAOzF,OAAO2O,UAAW,6DAA6DlJ,OAAOzF,OAAO2O,UAAW,kFAEtN,CACElK,GAAI,QACJkgC,KAAM,qXAER,CACElgC,GAAI,QACJkgC,KAAM,6HAER,CACElgC,GAAI,QACJkgC,KAAM,4YAER,CACElgC,GAAI,QACJkgC,KAAM,2CAER,CACElgC,GAAI,QACJkgC,KAAM,wTAER,CACElgC,GAAI,QACJkgC,KAAM,2FAER,CACElgC,GAAI,QACJkgC,KAAM,yRAER,CACElgC,GAAI,QACJkgC,KAAM,8IAER,CACElgC,GAAI,QACJkgC,KAAM,kEAER,CACElgC,GAAI,QACJkgC,KAAM,sMAER,CACElgC,GAAI,QACJkgC,KAAM,6EAER,CACElgC,GAAI,QACJkgC,KAAM,oGAER,CACElgC,GAAI,QACJkgC,KAAM,qSAER,CACElgC,GAAI,QACJkgC,KAAM,sDAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,iBAAgBl/B,OAAOzF,OAAO2O,UAAW,kEAEhE,CACElK,GAAI,QACJkgC,KAAM,kEAER,CACElgC,GAAI,QACJkgC,KAAM,8KAER,CACElgC,GAAI,QACJkgC,KAAM,0EAER,CACElgC,GAAI,QACJkgC,KAAM,ieAER,CACElgC,GAAI,QACJkgC,KAAM,2GAER,CACElgC,GAAI,QACJkgC,KAAM,4CAER,CACElgC,GAAI,QACJkgC,KAAM,kbAER,CACElgC,GAAI,QACJkgC,KAAM,wOAER,CACElgC,GAAI,QACJkgC,KAAM,uHAER,CACElgC,GAAI,QACJkgC,KAAM,2QAER,CACElgC,GAAI,QACJkgC,KAAM,yIAER,CACElgC,GAAI,QACJkgC,KAAM,wMAER,CACElgC,GAAI,QACJkgC,KAAM,2UAER,CACElgC,GAAI,QACJkgC,KAAM,wCAER,CACElgC,GAAI,QACJkgC,KAAM,8FAER,CACElgC,GAAI,QACJkgC,KAAM,2CAER,CACElgC,GAAI,QACJkgC,KAAM,yFAER,CACElgC,GAAI,QACJkgC,KAAM,+KAER,CACElgC,GAAI,QACJkgC,KAAM,scAER,CACElgC,GAAI,QACJkgC,KAAM,4DAER,CACElgC,GAAI,QACJkgC,KAAM,6VAER,CACElgC,GAAI,QACJkgC,KAAM,8DAER,CACElgC,GAAI,QACJkgC,KAAM,2HAER,CACElgC,GAAI,QACAkgC,WAAS,MAAQ,4OAA2Ol/B,OAAOzF,OAAO2O,UAAW,iEACrRg8D,eAAa,OAAOrnC,eAAemsB,qBAEzC,CACEhrD,GAAI,QACJkgC,KAAM,6eAER,CACElgC,GAAI,QACJkgC,KAAM,4VAER,CACElgC,GAAI,QACJkgC,KAAM,6FAER,CACElgC,GAAI,QACJkgC,KAAM,8EAER,CACElgC,GAAI,QACJkgC,KAAM,yGAER,CACElgC,GAAI,QACJkgC,KAAM,gZAER,CACElgC,GAAI,QACJkgC,KAAM,8HAER,CACElgC,GAAI,QACJkgC,KAAM,6IAER,CACElgC,GAAI,QACJkgC,KAAM,mLAER,CACElgC,GAAI,QACJkgC,KAAM,iYAER,CACElgC,GAAI,QACJkgC,KAAM,2GAER,CACElgC,GAAI,QACJkgC,KAAM,8HAER,CACElgC,GAAI,QACJkgC,KAAM,6QAER,CACElgC,GAAI,QACJkgC,KAAM,8DAER,CACElgC,GAAI,QACJkgC,KAAM,qEAER,CACElgC,GAAI,QACJkgC,KAAM,uOAER,CACElgC,GAAI,QACJkgC,KAAM,wIAER,CACElgC,GAAI,QACJkgC,KAAM,iSAER,CACElgC,GAAI,QACJkgC,KAAM,mEAER,CACElgC,GAAI,QACJkgC,KAAM,yRAER,CACElgC,GAAI,QACJkgC,KAAM,s8BAER,CACElgC,GAAI,QACJkgC,KAAM,yFAER,CACElgC,GAAI,QACJkgC,KAAM,uEAER,CACElgC,GAAI,QACJkgC,KAAM,oHAER,CACElgC,GAAI,QACJkgC,KAAM,0BAER,CACElgC,GAAI,QACJkgC,KAAM,2CAER,CACElgC,GAAI,QACJkgC,KAAM,i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AAO,KACdwzC,KAAM,OACNo0H,SAAU,KACRla,YAAYob,UACL,GAETh6F,SAAS,GACR,CACDliE,KAAM,yBACN5M,KAAM,CAAC,KACPwzC,KAAM,OACNo0H,SAAU,KACRmB,MACO,GAETj6F,SAAS,GACR,CACDliE,KAAM,yBACN5M,KAAM,CAAC,KACPwzC,KAAM,OACNo0H,SAAU,KACRoB,MACO,GAETl6F,SAAS,GACR,CACDliE,KAAM,sBACN5M,KAAM,CAAC,OACPwzC,KAAM,OACNo0H,SAAU,KACRqB,MACO,GAETn6F,SAAS,GACR,CACDliE,KAAM,gBACN5M,KAAM,CAAC,SACPwzC,KAAM,OACNo0H,SAAU,KACRxoK,SAASe,SAASY,WAAW6D,gBACtB,GAETkqE,SAAS,GACR,CACDliE,KAAM,8BACN5M,KAAM,CAAC,OACPwzC,KAAM,OACNo0H,SAAU,KACRsB,MACO,GAETp6F,SAAS,GACR,CACDliE,KAAM,kBACN5M,KAAM,CAAC,KACPwzC,KAAM,iBACNo0H,SAAU,KACRtnK,OAAOiqG,OAAO1V,KAAK,mBACnBpgD,kBAAkB,IAAI7L,UAExBkmC,SAAS,GACR,CACDliE,KAAM,aACN5M,KAAM,CAAC,MACPwzC,KAAM,OACNo0H,SAAU,KACRxoK,SAASe,SAASY,WAAW8D,kBAAmB,OACzC,GAETiqE,SAAS,GACR,CACDliE,KAAM,aACN5M,KAAM,CAAC,QACPwzC,KAAM,OACNo0H,SAAU,KACRxoK,SAASe,SAASY,WAAW8D,kBAAmB,SACzC,GAETiqE,SAAS,GACR,CACDliE,KAAM,gBACN5M,KAAM,CAAC,QACPwzC,KAAM,OACNo0H,SAAU,KACRxoK,SAASe,SAASY,WAAW8D,kBAAmB,SACzC,GAETiqE,SAAS,GACR,CACDliE,KAAM,gBACN5M,KAAM,CAAC,SACPwzC,KAAM,OACNo0H,SAAU,KACRxoK,SAASe,SAASY,WAAW8D,kBAAmB,UACzC,GAETiqE,SAAS,GACR,CACDliE,KAAM,gBACN5M,KAAM,CAAC,KACPwzC,KAAM,OACNo0H,SAAU,IAAMnzH,kBAAkB,IAAI7L,SACtCkmC,S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AQ8/F,yBAC9Bv2I,OAAOC,WAAWw2C,QAAQ8/F,2BAG5B09H,UACE,GAAK7iR,KAAK2iR,eAAgB9wO,MAAMC,SAAhC,CAEA/vC,SAASe,SAASY,WAAWkB,0BAE7BgsC,SAASsT,WAAWstC,QACpB5gD,SAAS0U,cAAcl8C,IAAIpJ,KAAKikD,qBAIhC,IAAK,MAAMs4J,KAASz4J,QAAQw2B,OAAOjuB,IAC7BkwJ,EAAMl6J,aACRk6J,EAAM/hM,OAIVzY,SAASe,SAASY,WAAWmB,4BAIjC9C,SAASiB,MAAMd,GAAGwB,WAAW+C,WAAW,IAAMkjE,GAAsB4rP,aAAe3kR,SAAS0U,cAAcx9C,QAE1G/F,SAASiB,MAAMd,GAAGwB,WAAWmB,yBAAyB,KACpD,MAAMmxT,EAAgBrsP,GAAsBksP,qBAAqBtyT,OAC3C,IAAlByyT,IACkB,IAAlBA,EAAqB/yT,OAAOiqG,OAAOrN,UAAW,wCAC7C58F,OAAOiqG,OAAOrN,UAAW,eAAcxwF,UAAU2mT,8BACtDrsP,GAAsB4rP,aAAe3kR,SAAS0U,cAAcx9C,UCrS9D,MAAMmuT,GAAQ,CACZC,MAAO,CACL,EAAG,CAED,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEF,EAAG,CAED,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEF,EAAG,CAED,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,MAGJ7oT,OAAOyG,EAAKmsI,GACV,GAAW,GAAPnsI,EAAU,OAAO,EACrB,MAAMlG,EAAK,MAAQqyI,EAAO,IAAO,IACjC,OAASnsI,EAAMjT,KAAKuM,MAAMQ,EAAIkG,EAAM,GAAK,EAAIlG,GAE/C4nK,SAAS9qK,EAAKoyC,EAAQ,GACpB,MAAMq5Q,EAAUzrT,EAAIsH,MAAM,IAC1B,IAAIiuI,EAAOk2K,EAAQ1pT,QAAO,CAAC2qB,EAAMg/R,IAAQh/R,EAAOg/R,EAAIhoR,WAAW,IAAI,GACnE,OAAO+nR,EAAQ7yT,KAAImG,IACjB,GAAS,KAALA,EAAU,OAAOA,EACrB,IAAK,IAAIjI,EAAI,EAAGA,EAAIs7C,EAAOt7C,IAAK,CAC9B,MAAM60T,EAAOJ,GAAM5oT,OAAO,EAAG4yI,KACzBg2K,GAAM5oT,OAAO,GAAI4yI,KAAU,IAAM,KAAKx2I,GAAKwsT,GAAMC,MAAMG,GAAMJ,GAAM5oT,OAAO4oT,GAAMC,MAAMG,GAAM9yT,OAAQ08I,OAE1G,OAAOx2I,KACN4H,KAAK,MAIZ,GAAe4kT,GAAf,SCtIMK,GAA0B,CAC9BrrP,aAAc,KAAM,IACpBsrP,QAAS,KAAM,IACfC,QAAS,KAAM,IACfhyQ,SAAU,KAAM,IAChBiyQ,gBAAiB,KAAM,IACvB9vQ,cAAe,KAAM,IACrBi4H,aAAc,KAAM,IACpB83I,cAAe,KAAM,IACrBruP,QAAS,KAAM,IACfsuP,MAAO,KAAM,IACbC,OAAQ,KAAM,IACdC,uBAAwB,KAAM,IAC9BC,QAAS,KAAM,IACfznR,OAAQ,KAAOke,WAAWoM,OAAOlM,WAAW,GAAG/kB,aAC/CvZ,EAAG,KAAM,IACTssC,YAAa,KAAM,IACnBs7P,UAAW,KAAOp3Q,GAAGC,QAAQ8/B,qBAAqBv0C,WAClDoQ,QAAS,KAAM,IACfoW,gBAAiB,KAAM,IACvBqlQ,UAAW,KAAM,IACjBluS,QAAS,KAAM,IACfq5B,kBAAmB,KAAM,IACzB80Q,SAAU,KAAM,IAChBC,wBAAyB,IAAM7pQ,GAAawc,yBAC5CstP,wBAAyB,IAAM9pQ,GAAawc,yBAC5CutP,wBAAyB,IAAM/pQ,GAAawc,yBAC5CwtP,wBAAyB,IAAMhqQ,GAAawc,yBAC5CytP,wBAAyB,IAAMjqQ,GAAayc,yBAC5CytP,wBAAyB,IAAMlqQ,GAAayc,yBAC5C0tP,wBAAyB,IAAMnqQ,GAAayc,yBAC5C2tP,wBAAyB,IAAMpqQ,GAAayc,yBAC5CgT,mBAAoB,IAAMzvB,GAAayvB,mBACvCH,kBAAmB,IAAMtvB,GAAasvB,kBACtCE,gBAAiB,IAAMxvB,GAAawvB,gBACpC66O,qBAAsB,KAAM,IAC5BC,OAAQ,KAAM,IACdC,QAAS,KAAM,IACfh3O,wBAAyB,KAAM,IAC/Bi3O,WAAY,KAAM,IAClBhxQ,aAAc,KAAM,KAGThV,GAAQ,CACnBjD,OAAQ,IAERwpD,eAAgB,UAGhBykF,gBACE,GAAI78K,KAAK8xC,SAEP,YADAD,GAAM63G,YAAW,GAKnB,GADA1oG,OAAOsjJ,kBACFtjJ,OAAOm/P,aAIV,OAHA5lS,MAAM4yJ,eACN5yJ,MAAMjC,QAAQkC,KAAM,sIAC+C,GAIrE,GADAwmC,OAAOsjJ,iBACHtjJ,OAAO2uG,mBAAqB,EAI9B,OAHAp1I,MAAM4yJ,eACN5yJ,MAAMjC,QAAQkC,KAAM,mEAChBnL,UAAU,sDAAuD,GAGvE,IAAK,MAAM8mC,KAAQ7tB,kBAAmB04B,OAAO2sG,eAAeC,eAAekqK,YAAY3hR,IACvF6K,OAAO4/P,gBACPhyS,OAAOysF,QAAQouD,cAAcI,cAAe,EAC5Cj7I,OAAOma,QAAQkwB,UAAUpgB,MAAM/sB,QAAS,EACxC8C,OAAOma,QAAQkwB,UAAUpgB,MAAMsnF,cAAe,EAC1C7wD,WAAW6L,WAAW7L,WAAWuuD,cACrCjvG,OAAOC,WAAWC,MAAMC,QAAS,EACjC8iC,GAAM63G,YAAW,GACjB/2D,mBAAkB,GAClB/hD,GAAAA,eAAAA,QACAhiC,OAAO05D,gBAAkB,EACzB5B,UAAU45B,UAAUlQ,KAAO9pE,iBAAiBC,OAC5C40J,eACAC,oBACAE,qBAMA1sK,OAAOymE,KAAKwkE,eAAejvF,UAAW,EAEtCh8C,OAAOupI,YAAa,EACpBvpI,OAAO+zC,QAAQo5F,eAAiB,EAChC,IAAK,MAAMj3E,KAAO4E,iBAAiBrd,IAAKyY,EAAI5yD,OAAS,EACrD2nG,iBAAiB5/F,OAGjB,MAAM89S,GAAU,EAAM,GAAKrrP,aAAa+N,KAAKjtE,MAAK6rB,GAAe,SAAVA,EAAEmR,MAAgBx8B,GACzEY,OAAOysF,QAAQwvD,eAAiBktK,EAIhC,MAAMC,EAAe,CAAC,aAAc,eAAgB,UAAW,cACzDC,EAAavrP,aAAa+N,KAAK73E,QAAOy2B,GAAK2+R,EAAazkT,SAAS8lB,EAAEmR,OAAMlnC,KAAI+1B,GAAKA,EAAErrB,KAC1F,IAAK,IAAIw4H,EAAW,EAAGA,EAAW95D,aAAa+N,KAAKl3E,OAAQijI,IAC1D53H,OAAOysF,QAAQyvD,iBAAiBtkB,IAAayxL,EAAW1kT,SAASizH,IAAa,EAAI,EAGpF,GAAGt0F,iBAAiB4U,IAAI1U,UAAU,CAChCib,GAAawc,yBAAyB/9B,UAAW,EACjDuhB,GAAayc,yBAAyBh+B,UAAW,EACjDuhB,GAAayvB,mBAAmBhxC,UAAW,EAC3CuhB,GAAasvB,kBAAkB7wC,UAAW,EAC1CuhB,GAAawvB,gBAAgB/wC,UAAW,EACxCuhB,GAAauvB,eAAe9wC,UAAW,EACvCuhB,GAAa6vB,aAAapxC,UAAW,EACrCuhB,GAAagwB,qBAAqBvxC,UAAW,EAC7CuhB,GAAaswB,aAAa7xC,UAAW,EACrC,IAAK,MAAMoK,KAAa6wB,WAAW1a,SACD9pD,IAA5B2zC,EAAU9Q,KAAKsjC,UAAwBxyB,EAAUm8H,qBAGzDxgI,GAAMyoC,OAAO8P,QAAQ5vE,OACrB61I,YAAYjkD,MAAK,IAGflT,kBACF,OAAOz4F,KAAKC,MAAQ,IAAO,IAAM,QAAU+tC,EAAAA,iBAA2B,UAGpEtD,iBACF,OAAOmZ,iBAAiB,IAAIxY,UAI9BwV,WAAW42Q,GACT,IAAKl4T,KAAK8xC,SAAU,OAAO,EAE3B,IAAKomR,EAAU,OAAO,EACtB,IAAK5B,GAAwB4B,GAG3B,OADAptT,QAAQinH,MAAO,YAAWmmM,oDACnB,EAGT,MAAMpjP,EAAUwhP,GAAwB4B,KAExC,MAAuB,mBAAZpjP,EACFA,EAGF1pC,SAAS0pC,EAAQpsC,eAGtBqkI,oBACF,OAAO/sK,KAAK2sL,cAAgB,GAG9BjjC,WAAWyuK,IACJn4T,KAAK+sK,eAAiBorJ,IAC3Bp2T,SAASe,SAASY,WAAWoB,kBAAmBqzT,GAC5CA,IACFn4T,KAAKyrF,IAAIlL,UAAYvgF,KAAK2sL,cAE5BlU,qBAAqB,CAAEjnF,OAAO,EAAMk4D,YAAY,IAChDyxB,eACAC,oBACAxsK,OAAOC,WAAWm9D,SAAS02E,eAAgB,EAC3C9zI,OAAOC,WAAWm9D,SAAS42E,eAAgB,EACvC1tF,aAAarsC,SAASssC,YAAWvmD,OAAOia,SAASo4B,QAAS,GAC9Dl/C,SAASe,SAASY,WAAWqB,iBAAkBozT,KAGjD/nK,SAASn5B,GACHj3H,KAAK8xC,WACPlB,GAAAA,cAAAA,IAA2B5wC,KAAK4sL,0BAA0Bh3K,MAAMqhH,GAAM1gH,IAAI,MAC1Eg3C,WAAWlB,IAAI53C,SAAQ0nB,GAAKA,EAAEpwB,KAAKkrH,OAInCxrC,UACF,OAAO78E,OAAOC,WAAWC,OAGvBgjC,eACF,OAAO9xC,KAAKyrF,IAAI18E,QAGdk8Q,2BACF,IAAIr9Q,EAAI,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,GAAI,GAC9F,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAIhC,OAHKorC,YAAY,KAAK7N,YACpBv9B,EAAEpL,KAAK,CAAC,IAAK,IAAK,MAEboL,GAGP0zO,8BACF,IAAInsO,EAAS,CAAC,aAAc,wBAE5B,OADKwqC,GAAGC,QAAQylC,uBAAuBl6C,YAAYh2B,EAAO3S,KAAK,UACxD2S,GAGLo6R,yBACF,MAAO,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAGjE9Q,oBACF,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KAGzEr5J,mBACF,IAAIx3H,EAAI,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACvE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAErE,OADKorC,YAAY,KAAK7N,YAAYv9B,EAAEpL,KAAK,KAClCoL,GAGLggD,yBAEF,MAAMziB,EAAanrC,KAAK8xC,UAAYyb,WAAWoU,MAAMlU,WAAW,GAAG/kB,aAC7D8H,EAAcxwC,KAAKm1P,iCAAiCn1P,KAAKo4T,iBACzDxtQ,EAAWzU,GAAQhL,GAAcnrC,KAAKo4T,kBAAoBjiR,EAChE,MAAO,CACLhL,WAAAA,EACAqF,YAAAA,EACA9nB,SAAWkiC,EAAS,aAAeh8C,OAAO03E,UAAUzgC,SAASl9C,SAAW,EACpEioC,GAAAA,eAAAA,MAAAA,KAAmC,GAAG/yB,IAAI,IAC1CxC,EAAAA,GACJuN,KAAMgiC,EAAS,QACX5hD,QAAQlI,IAAI8vC,GAAAA,eAAAA,MAAAA,KAAmC,GAAG/yB,IAAI,IAAK7U,QAAQiP,MAAM,OACzEoD,EAAAA,GACJsN,YAAaiiC,EAAS,eAClB,KAAM,IAAO2C,WAAWoM,OAAO6X,YAC/B,EACJ3oD,SAAU+hC,EAAS,YACf5hD,QAAQ6U,IAAIjP,OAAOia,SAAS67B,qBAAsB,KAAKt8C,IAAI,GAC3DiT,EAAAA,GACJoN,MAAOmiC,EAAS,SACZ,KACA,EACJ3hC,UAAW2hC,EAAS,aAChB,KACA,EACJytQ,UAAW,IAAM,CAAC,WAAY,OAAQ,cAAe,YAAY9kT,SAASvT,KAAKo4T,mBAGnFjjE,iCAAiCh/M,GAC/B,OAAQA,GACN,IAAK,WACH,MAAQ,uBAAsBvnC,OAAO03E,UAAUzgC,SAASl9C,SAAW,EAC/D8H,QAAQmgC,GAAAA,eAAAA,MAAAA,KAAmC,GAAG/yB,IAAI,IAAM,GACxDpN,QAAQ4K,EAAAA,GAAO,2BACrB,IAAK,OACH,MAAQ,uBAAsB5K,QAAQzH,QAAQlI,IAAI8vC,GAAAA,eAAAA,MAAAA,KAAmC,GAAG/yB,IAAI,IAAK7U,QAAQiP,MAAM,OAAQ,kDAEzH,IAAK,cACH,MAAQ,qBAAoBxH,QAAQ,KAAM,IAAO88C,WAAWoM,OAAO6X,YAAa,wBACpE/iC,EAAAA,UAAoB8e,WAAWoM,OAAOpqD,SACpD,IAAK,WACH,MAAQ,qBAAoBkB,QAAQzH,QAAQ6U,IAAIjP,OAAOia,SAAS67B,qBAAsB,KAAKt8C,IAAI,GAAI,4CAErG,IAAK,QACH,MAAQ,gBAAeuI,eAAe,gBACxC,IAAK,YACH,MAAQ,YAAWA,eAAe,cAGpC,UAAKpO,EACH,MAAO,qBACT,QACE,MAAO,8CAIT+nS,oCACF,OAAO,MAGLC,uBACF,OAAOvqS,KAAKyrF,IAAIlL,UAAYvgF,KAAKsqS,+BAG/B39G,mBACF,IAAIt5G,EAAKrzE,KAAKyrF,IAAI9oC,QAAQC,gBAAgB3rC,KAAK,GAAG7C,QAC9Cm/D,EAAKvzE,KAAKyrF,IAAI9oC,QAAQuvC,oBAAoBj7E,KAAK,GAAG7C,QAClDi1D,EAAKrpE,KAAKyrF,IAAI9oC,QAAQ2vC,oBAAoBr7E,KAAK,GAAG7C,QAClDuoM,EAAazqK,iBAAiB4U,IAAI1U,UAAY,IAAM,EAEpD8iB,aAAarsC,SAASssC,YACxBke,GAAM,IACNE,GAAM,GACNlK,GAAM,GAGR,MAAMkxI,IACF15M,KAAKuT,MAAMi/D,EAAK,GAAKxyE,KAAKuT,MAAMm/D,EAAK,GAAK1yE,KAAKuT,MAAMi1D,EAAK,IAAMszI,EAAa,OAC5E,IAEL,OAAOpC,EAAO,EAAIA,EAAO15M,KAAKuM,MAAMmtM,EAAOv6M,KAAKyrF,IAAIlL,WAGtDisG,iBAAiBjsG,GACf,MAAM+3O,EAAYpmR,iBAAiB4U,IAAI1U,UAAY,GAAK,EACxD,OAAOppC,QAAQ6U,IAAI,GAAI0iE,IAAa,EAAI,KAAO,GAAGrpE,MAAM,GAAGX,IAAI,KAAKX,MAAM0iT,IAGxE1rI,gCACF,OAAO5sL,KAAKwsL,iBAAiBxsL,KAAKyrF,IAAIlL,WAGpCksG,2BACF,OAAOzsL,KAAKwsL,iBAAiBxsL,KAAK2sL,aAAe3sL,KAAKyrF,IAAIlL,WAIxD+1M,uBACF,MAAO,IAGLx2B,oBACF,OAAOzyM,GAAaovB,YAAYr0C,aAG9B0rC,oBACF,OAAO,GAAKn0B,GAAGC,QAAQ2lC,iBAAiBp6C,WAA0C,KAA5BwU,GAAGksB,KAAK/8D,MAAMguC,MAAQ,IAAa,IAG3FgX,wBAAwBlmD,GACtB,OAAO5E,QAAQ6U,IAAI,GAAIhd,KAAKuT,MAAMxG,EAAI,GAAKA,GAAK,IAAM,IAAM,GAAKA,EAAI,OAGnEwqT,sBAAkB,MACpB,iBAAOp3Q,OAAOC,OAAOr+C,OAAOwoC,SAAS,UAArC,aAAO,EAAkC+K,MAGvCi4B,yBACF,OAAOx/D,OAAOC,WAAWC,MAAMykF,gBAAgBrf,UAKjDy0I,eAAen9F,EAAMl2G,EAAIo/I,EAAQ,GAC/B,MAAM5gJ,EAAMjT,KAAK05B,MAAwD,KAAjDixF,EAAKjoH,QAAU,EAAImxJ,GAASp/I,EAAG/R,OAASmxJ,IAAgB,IAC1E6jK,EAAazkT,GAAO,EAAI4gJ,GAC9B,IAAI2b,EAAMkoJ,EACN7tT,EAAM,GACV,IAAK,IAAIlJ,EAAI,EAAGA,EAAIsS,EAAKtS,IACvB,GAAIA,GAAK6uK,EAAK,CACZ,MAAM9jK,EAAM1L,KAAKuM,MAAM5L,GAAK8T,EAAG/R,OAASuQ,IACxCpJ,GAAO4K,EAAG/I,GACV8jK,GAAOkoJ,MACF,CACL,MAAMhsT,EAAM1L,KAAKuM,MAAM5L,GAAKgqH,EAAKjoH,OAASuQ,IAC1CpJ,GAAO8gH,EAAKj/G,GAGhB,OAAO+8S,GAAM5+S,EAAK7J,KAAKuM,MAAMsnJ,GAAS,EAAI,KAG5Cq0D,YAAa,yDAAyD/2M,MAAM,KAE5EsoE,OAAQy7H,GAAAA,OAGVh0M,SAASiB,MAAMd,GAAGwB,WAAWqB,kBAAkB,KACzC6rC,GAAAA,SAAAA,IAAsB,IACxBiB,GAAMyoC,OAAO6S,IAAI3yE,UAGrBzY,SAASiB,MAAMd,GAAGwB,WAAWsD,uBAAuB,KAC9CkuD,aAAaxsC,SAASysC,WACxBtjB,GAAMyoC,OAAO8S,QAAQ5yE,OAEnB06C,aAAa4J,cAAc3J,WAC7BtjB,GAAMyoC,OAAO+S,QAAQ7yE,OAEnB06C,aAAarP,SAASsP,WACxBtjB,GAAMyoC,OAAOgT,QAAQ9yE,OAEnB06C,aAAa6U,IAAI5U,WACnBtjB,GAAMyoC,OAAOiT,QAAQ/yE,OAEnB06C,aAAarsC,SAASssC,WACxBtjB,GAAMyoC,OAAOkT,QAAQhzE,UAIlB,MAAMg+S,WAAmC/rR,EAC1ChB,eACF,OAAOmF,GAAAA,cAGLjE,mBACF,OAAO/9B,OAAOC,WAAWC,MAAM22C,WAAWzlD,KAAKgO,IAG7C2+B,iBAAa7kC,GACf8G,OAAOC,WAAWC,MAAM22C,WAAWzlD,KAAKgO,IAAMlG,EAG5C4kC,eACF,OAAO1sC,KAAK2sC,cAAgB3sC,KAAKK,OAAOknC,IAGtCE,qBAAmB,OAAO,EAE1BW,kBACF,OAAOpoC,KAAKK,OAAOinC,OAAOtnC,KAAK2sC,cAGjCT,cACkB,gBAAZlsC,KAAKgO,IAAsBjM,SAASe,SAASY,WAAWyB,iBAIzD,MAAMszT,WAA0BrsR,EAEjCv5B,UACF,OAAOjE,OAAOC,WAAWC,MAAMmzC,SAG7BxW,eACF,OAAOmF,GAAAA,cAGLJ,kBACF,OAAOxwC,KAAKK,OAAOmwC,YAGjB7E,WACF,OAAO3rC,KAAKK,OAAOsrC,KAGjBC,6BACF,OAAOiG,GAAMC,UAKV,MAAMub,GAAeujD,oBAC1BlkC,aAAa79D,WAAWC,MAAMmzC,UAC9B5hD,GAAWA,EAAOyhD,UACd,IAAI02Q,GAA2Bn4T,GAC/B,IAAIo4T,GAAkBp4T,KAI5BgtD,GAAa5H,WAAa4H,GAAahB,IAAIzpD,QAAOuvB,GAAKA,EAAE0Z,cACzDwhB,GAAa89K,QAAU99K,GAAahB,IAAIzpD,QAAOuvB,IAAMA,EAAE0Z,cC5cvD,MAAM6sR,WAAyB1tR,EACzBC,WAAS,OAAOr8B,OAAOC,WAAWC,MAAMk0I,aACxC/3G,SAAKnjC,GAAS8G,OAAOC,WAAWC,MAAMk0I,aAAel7I,EAErDqtD,gBACF,OAAOn1D,KAAKmrC,WAGVE,oBACF,OAAOwG,MAAMC,WAAa9xC,KAAKm1D,UAG7B9S,kBACF,MAAMz0C,EAAI5N,KAAKK,OAAOopF,uBACtB,MAAoB,oBAAN77E,EAAmBA,IAAMA,EAGrCmoR,cACF,MAAMnoR,EAAI5N,KAAKK,OAAOqpF,mBACtB,MAAoB,oBAAN97E,EAAmBA,IAAMA,EAGzCw/C,SACE,OAAOptD,KAAKK,OAAOspF,oBAGjBxb,WACF,OAAOnuE,KAAKK,OAAO8tE,OAGrB4tD,UACE/7H,KAAKurC,SAGPD,WACEroC,OAAOiqG,OAAO/mB,OAAQ,mCAAkCnmF,KAAKqiD,eAC7DzzC,OAAOC,WAAWC,MAAMk3I,UAAUj/D,OAAQ,EAG1B,IAAZ/mF,KAAKgO,KACP6jC,MAAM45C,IAAI9oC,QAAQC,gBAAkB,IAAI55C,QAAQ,YAChD6oC,MAAM45C,IAAI9oC,QAAQuvC,oBAAsB,IAAIlpF,QAAQ,WACpD4nC,SAASO,eAAeqgD,QAMxB3/C,MAAM45C,IAAI9oC,QAAQ2vC,oBAAsB,IAAItpF,QAAQ,WAEtD6hE,IAAIh8D,WAAWC,MAAM0L,OACrBzY,SAASe,SAASY,WAAWsD,wBAI1B,MAAMkuD,GAAe07C,oBAC1BlkC,aAAa79D,WAAWC,MAAMymF,SAC9Bl1F,GAAU,IAAIq4T,GAAiBr4T,K,eCzDjC,MAAMs4T,WAA2BvuR,EAAkB,2DAEnC,GAEViY,kBACF,OAAOriD,KAAKK,OAAOgiD,YAGjB8gB,eACF,OAAOnjE,KAAKK,OAAO8iE,SAGrBy1P,sBAC4C,QAAtC54T,KAAK64T,cAAgB74T,KAAKmrC,aAC5B,aAAAnrC,KAAKK,QAAO4mF,qBAAZ,kBAEFjnF,KAAK64T,YAAc74T,KAAKmrC,WAGtBA,iBACF,QAAsB,UAAlBnrC,KAAKmjE,WAAwB5V,GAAWoU,MAAMlU,WAAW,GAAGhlB,iBACzDzoC,KAAKqiD,aAAekL,GAAWvtD,KAAKmjE,UAAUqO,WAGnD/oC,qBACF,OAAOzoC,KAAKmrC,WAGVqF,kBACF,MAAM7O,EAAI3hC,KAAKK,OAAOmwC,YACtB,MAAoB,oBAAN7O,EAAmBA,IAAMA,EAGrCyyP,sBACF,QAAIp0R,KAAK0oC,cAAqB1oC,KAAKK,OAAO28C,aAAah9C,KAAKooC,cAKhE,MAAM0wR,WAAkB1uR,EACtBpoC,YAAY3B,GACV6Y,MAAM7Y,GACNL,KAAK+4T,YAAc/4T,KAAKK,OAAOotD,WAAWnqD,KAAIsK,GAAK,IAAI+qT,GAAmB/qT,KAGxEwoR,mBACF,OAAOp2R,KAAKK,OAAOorC,WAGjB06C,aACF,OAAOnmF,KAAKK,OAAO8lF,SAGjBz9C,mBACF,OAAO1oC,KAAKmmF,OAAOhxB,UAGjB5lD,WACF,OAAOvP,KAAKK,OAAOkP,KAGjB8+D,gBACF,OAAOruE,KAAKmuE,KAAKE,UAGfA,cAAUvmE,GACZ9H,KAAKmuE,KAAKE,UAAYvmE,EAGpBqmE,WACF,OAAOv/D,OAAOC,WAAWC,MAAMi4E,MAAM/mF,KAAKK,OAAOmqC,KAG/C47C,gBACF,OAAOpmF,KAAKmuE,KAAKpiE,KAGfq6E,cAAUt+E,GACZ9H,KAAKmuE,KAAKpiE,KAAOjE,EAGf8iD,eACF,OAAO5qD,KAAKmuE,KAAKltB,OAGfswB,qBACF,OAAOvxE,KAAKK,OAAOmxE,WAAWxxE,KAAKomF,WAGjC4yO,sBACF,OAAOh5T,KAAKmuE,KAAK6Y,iBAAmB,EAGlCxV,iBACF,OAAIxxE,KAAKquE,UAAY,EAAUruE,KAAKquE,UAC/BruE,KAAKK,OAAOumF,UACV/lF,KAAKC,IAAId,KAAKK,OAAOmxE,WAAWxxE,KAAKomF,WAAapmF,KAAKg5T,gBAAiBh5T,KAAKquE,WADjDxtE,KAAKC,IAAId,KAAKuxE,eAAgBvxE,KAAKquE,WAIpE5gB,iBACF,OAAOztD,KAAK+4T,YAGVvoR,kBACF,OAAOxwC,KAAKK,OAAOmwC,YAGjBy1C,oBACF,OAAOjmF,KAAKK,OAAO4lF,cAGjB17C,cAAU,UACZ,MAAM/F,EAAOxkC,KAAKK,OAAOu/D,WAAW5/D,KAAKooC,aACnC6wR,EAAU,qBAAG,EAAAj5T,KAAKK,QAAO6lF,yBAAf,aAAG,UAAkC5iF,KAAIsK,GAAKA,EAAEwmR,yBAAhD,QAAoE,GACpF,MAAO,CAAC5vP,KAASy0R,GAGfxxR,qBAAmB,OAAO,EAE1BW,kBACF,OAAOpoC,KAAKK,OAAOinC,OAAOtnC,KAAKK,OAAOgmF,iBAAiBrmF,KAAKwxE,aAG1Dx5D,eACF,OAAOhY,KAAKK,OAAOgmF,iBAAiB,EAAIrmF,KAAKg5T,iBAG3C/vF,cACF,OAAOjpO,KAAKwxE,YAAc,EAGxBmV,0BACF,OAAO3mF,KAAKK,OAAOsmF,oBAGjBuyO,gBACF,OAAOv5Q,GAAGC,QAAQqlC,aAAa95C,WAAW,EAAE,EAG9C0hH,SACE,MAAM5rG,EAASsM,GAAWlB,IAAIzpD,QAAOu5B,GAAKA,EAAEyuB,WAAUrnD,OACjDvD,KAAK4qD,UAAY3J,IAAWjhD,KAAKk5T,UACjCl5T,KAAKmuE,KAAKltB,QAAUjhD,KAAKmuE,KAAKltB,OADch+C,OAAOiqG,OAAO6kB,MAAO,sDAIxEonM,uBACEn5T,KAAKytD,WAAWh5C,SAAQ7G,GAAKA,EAAEgrT,wBAGjC7sT,KAAKkrH,GAEH,GAAIj3H,KAAK4qD,UAAY5qD,KAAKipO,QACxBjpO,KAAKmuE,KAAKltB,QAAS,OAGrB,GAAKjhD,KAAK4qD,WAAY5qD,KAAKipO,QAA3B,CAEA,GAAIjpO,KAAKo2R,aAAatuR,iBAAiBkB,QAAS,CAG9C,GAAIhJ,KAAKo2R,aAAatuR,MAAMuP,IAAI,GAAI,OACpC,MAAM+hT,EAAkBp5T,KAAKo2R,aAAatuR,MAAM8N,OAAO,EAAIi8B,MAAMykP,oBAAsBr/J,EAAO,MACxFnwC,EAAQ9mF,KAAKo2R,aAAatuR,MAAMoP,MAAMkiT,GAG5Cp5T,KAAKo2R,aAAatuR,MAAQ9H,KAAKo2R,aAAatuR,MAAMoP,MAAM4vE,GAAO1+E,IAAI,GACnEpI,KAAKomF,UAAYpmF,KAAKomF,UAAUnvE,KAAK6vE,GAAOhmF,IAAId,KAAKgY,cAChD,CACL,MAAMohT,EAAkBp5T,KAAKo2R,aAAatuR,OAAS,EAAI+pC,MAAMykP,oBAAsBr/J,EAAO,KACpFnwC,EAAQ9mF,KAAKo2R,aAAatuR,MAAQsxT,EACxCp5T,KAAKo2R,aAAatuR,MAAQjH,KAAKuH,IAAIpI,KAAKo2R,aAAatuR,MAAQg/E,EAAO,GACpE9mF,KAAKomF,UAAYvlF,KAAK2H,SAASxI,KAAKomF,UAAYU,EAAO9mF,KAAKgY,UAE1Du1C,GAAWoM,OAAOlM,WAAW,GAAG/kB,cAAcsY,OAAO4/P,gBACzD5gT,KAAKm5T,yBAIF,MAAM5rQ,GAAaqjD,oBACxBlkC,aAAa79D,WAAWC,MAAMi4E,OAC9B1mF,GAAU,IAAIy4T,GAAUz4T,KAG1BktD,GAAWs5B,gBAAkB,IAAMt5B,GAAWlB,IAAImtD,SAAQ5rG,GAAKA,EAAE6/C,aAAY9gD,YAAWiB,GAAKA,EAAE86B,eCrLxF,MAAM2xB,GAAkB,CAG7Bg/P,sBAAsB,EAElBC,qBACF,OAAO/rQ,GAAAA,IAAAA,KACA3/C,IAAK,CAAGugE,KAAMvgE,EAAEvN,OAAOmqC,IAAKjD,IAAK35B,EAAEvN,OAAO01E,6BAC9CyvB,MAAK,CAAC/7F,EAAGC,IAAMD,EAAE89B,IAAM79B,EAAE69B,OAG1BisD,oBACF,OAAO5kF,OAAOC,WAAWC,MAAMykF,gBAAgBC,eAG7C5d,wBACF,OAAOhnE,OAAOC,WAAWC,MAAMykF,gBAAgB3d,mBAG7CpxB,eACF,OAAOxkD,KAAK41E,kBAAoB51E,KAAKwzF,eAGnCkhM,oBACF,OAAK7iP,MAAMu8B,mBACJ,IAAIplE,QAAQurR,GAAwB14M,SAASzzC,aAAawB,eAC/D2qP,GAAwBx4M,eACxBw4M,GAAwBv4M,eACxBu4M,GAAwBt4M,OACxBs4M,GAAwBr4M,QACxBxsE,WANoC,GASpC6pT,aACF,OAAOv5T,KAAKs5T,eAAe1qT,OAAOC,WAAWC,MAAMykF,gBAAgBkuD,QAGjE5rE,oBACF,OAAO71E,KAAKu5T,OAASv5T,KAAKu5T,OAAOhyR,IAAM8c,EAAAA,GAGrCguO,cAAU,MACZ,OAAO9kO,GAAU,UAACvtD,KAAKu5T,cAAN,aAAC,EAAaprP,OAG7BzhC,eACF,OAAO1sC,KAAK61E,gBAAkB71E,KAAK41E,mBAGjCmwE,sBACF,OAAOn3I,OAAOC,WAAWC,MAAMykF,gBAAgBwyD,iBAGjD4uI,iBACE/lR,OAAOC,WAAWC,MAAMk3I,UAAUj/D,OAAQ,EAC1Cn4E,OAAOC,WAAWC,MAAMykF,gBAAgBwyD,iBAAkB,GAG5Dw1D,KAAKtkF,GAIH,GAHIj3H,KAAK0sC,UACPmF,MAAMyoC,OAAOqT,qBAAqBnzE,OAEhCxa,KAAK+lJ,gBAAiB,CAExB,GADA/lJ,KAAKqyR,QAAQhkN,UAAYxtE,KAAKuH,IAAIpI,KAAKqyR,QAAQhkN,UAAY,GAAM4oD,EAAO,IAAM,GAC/C,IAA3Bj3H,KAAKqyR,QAAQhkN,UAAiB,CAChCz/D,OAAOC,WAAWC,MAAMykF,gBAAgBwyD,iBAAkB,EAC1Dn3I,OAAOC,WAAWC,MAAMykF,gBAAgBkuD,QAExC,MAAMA,EAAQ7yI,OAAOC,WAAWC,MAAMykF,gBAAgBkuD,MACxC,IAAVA,EACF5vG,MAAMyoC,OAAOsT,sBAAsBpzE,OAChB,IAAVinI,GACT5vG,MAAMyoC,OAAOuT,sBAAsBrzE,OAGhCxa,KAAKu5T,QACR1nR,MAAMyoC,OAAOtD,IAAIx8D,OAGrB+yC,GAAAA,IAAAA,SAAuB3/C,GAAKA,EAAEurT,0BAKzB5rQ,GAAAA,OAAAA,WAAAA,GAAAA,cAAgDvM,OAAOC,OAAOr+C,QAAO6vB,GAAKA,IAAGlvB,OAAS,IACzFy9C,OAAOm/P,WAAWvxS,OAAOysF,QAAQqsD,sBAAuD,IAAhC1mG,OAAOw4Q,eAAc,IAC7Ex4Q,OAAO4/P,iBAIXhyS,OAAOC,WAAWC,MAAMykF,gBAAgB3d,mBAAqB51E,KAAK00R,cAAgBz9J,EAAO,IACzFroH,OAAOC,WAAWC,MAAMykF,gBAAgB3d,kBAAoB/0E,KAAKC,IAC/D8N,OAAOC,WAAWC,MAAMykF,gBAAgB3d,kBACxC51E,KAAK61E,eAGF71E,KAAKqyR,UACR9kO,GAAAA,IAAAA,SAAuBpxB,GAAKA,EAAEkyC,UAAYxtE,KAAKC,IAAIq7B,EAAEkyC,UAAY,IAAO4oD,EAAO,IAAM,KACjF1pE,GAAAA,OAAAA,WAAAA,GAAAA,eAAiDvtD,KAAKq5T,uBACxDr4Q,OAAO4/P,gBACP7+S,SAASe,SAASY,WAAWwB,yBAC7BlF,KAAKq5T,sBAAuB,MAM7B,MAAMI,WAA+BhtR,EACtChB,eACF,OAAOzrC,KAAKK,OAAOorC,WAGjBkB,mBACF,OAAO/9B,OAAOC,WAAWC,MAAM22C,WAAWzlD,KAAKgO,IAG7C2+B,iBAAa7kC,GACf8G,OAAOC,WAAWC,MAAM22C,WAAWzlD,KAAKgO,IAAMlG,EAG5C2/B,qBAAmB,OAAO,EAE1BW,kBACF,OAAOpoC,KAAKK,OAAOinC,OAAOtnC,KAAK2sC,eAI5B,MAAM4nP,GAA0B3jL,oBACrClkC,aAAa79D,WAAWC,MAAMwmF,yBAC9Bj1F,GAAU,IAAIo5T,GAAuBp5T,KCrI1BoO,GAAoB,CAE/Bu7D,SAAU,EACV0vP,eAAgB,IAChB/vH,uBAAwB,IACxBh7L,UAAW,IACX+6L,cAAe,EACfh7L,YAAa,IACbirT,yBAA0B,IAC1Bl+G,cAAe,IACfgU,cAAe,GACfe,cAAe,KACfopG,YAAa,MAGFrrT,GAAU,CACjBC,eACF,OAAIxO,KAAKiqE,oBAA4BjqE,KAAK8rM,cAEtCl9L,OAAOC,WAAWmzC,GAAGC,SAAS5V,IAAI,kBAAkBz9B,OAAOC,WAAWC,MAAMykF,gBAAgBrf,SAAiB,EAC1GrzE,KAAKuH,KAAKvH,KAAKuT,MAAMxF,OAAOC,WAAWC,MAAM6zC,QAAQC,gBAAgB3rC,KAAK,GAAG7C,QAAU,GAAK,MAChGvT,KAAKuT,MAAM,MAAQ,KAAOpU,KAAK8rM,cAAe,IAGnD+tH,eAAgB,EACZ/tH,oBACF,OAAQl9L,OAAOu3I,WAAanmJ,KAAKiqE,oBAAuBjqE,KAAK65T,eAAiB,GAE5E/tH,kBAAcl+L,GAChB5N,KAAK65T,eAAkBjrT,OAAOu3I,WAAanmJ,KAAKiqE,oBAAuBr8D,EAAI,GAG7Eq8D,qBAAqB,EAErB05I,eAAe,EACf/2K,mBAAmB,EAEnBwjH,SAASn5B,GACHj3H,KAAKiqE,sBACPjqE,KAAK8rM,eAAiBjrM,KAAKC,IAAIm2H,EAAO,IAAK,IACvCj3H,KAAK8rM,cAAgB,IACvB9rM,KAAK8rM,cAAgB,EACrB9rM,KAAKiqE,qBAAsB,KAG1BjqE,KAAKiqE,qBAAuBjqE,KAAKwO,UAAYC,GAAkBu7D,eAC5BznE,IAApCkB,GAAGo5H,WAAWy1B,MAAMC,cACtB3jJ,OAAOu3I,WAAY,EAChBnmJ,KAAKwO,SAAW,IACdI,OAAO49C,MAAMt7B,IAAI,IAAIloB,QAAQ,KAC9BhJ,KAAK8rM,eAAmD,GAAlCjrM,KAAKC,IAAIm2H,EAAO,IAAO,GAAI,IAGjDj3H,KAAK8rM,eAAiBjrM,KAAKC,IAAIm2H,EAAO,IAAO,GAAI,IAInDj3H,KAAK8rM,eAAmD,IAAlCjrM,KAAKC,IAAIm2H,EAAO,IAAO,GAAI,OCpD5C6iM,GAAY,CACvB5gO,YAAa,gBACbd,eAAgB,kBACZjtD,iBACF,OAAO,GAETmvC,OAAQy7H,GAAAA,UACRnnK,OAAQ,KCDG66M,GAAa,CACxB39K,OAAQhS,GACRhxC,QAASq2B,GACT6sB,SAAUv6B,GACV9e,EAAGxD,GACH6yB,GAAIrC,GACJ0F,QAASvB,GACTh1C,MAAO+iC,GACP65C,UAAWouO,GACXpqO,OAAQsgB,IAGVtjC,aAAa79D,WAAW2mF,aAAe,CACrC,CACEjmF,KAAM,SACNg7B,UACE,MAAQ,0GAC+Cv7B,OAAO,IAAM,EAAG,SAG3E,CACEO,KAAM,UACNg7B,UACE,MAAQ,+PAEiCl7B,UAAU8vC,GAAAA,yCAErD3O,cACE,MAAQ,wFAGZ,CACEjhC,KAAM,oBACNg7B,UACE,MAAQ,4CAA2Cl7B,UAAU,sFACWA,UAAU,0eAOZL,OAAO,IAAM,EAAG,SAG1F,CACEO,KAAM,IACNg7B,UACE,MAAMwvR,EAAW,4KAGXC,EAAqB,qDAE3B,IAAIC,EAAYF,EAIhB,OAHIp6Q,GAAAA,QAAAA,mBAAAA,eACFs6Q,GAAaD,GAERC,IAGX,CACE1qT,KAAM,KACNg7B,UACE,MAAQ,iBAAgBl7B,UAAU,uGACcoB,QAAQ,OAAQ,EAAG,QAGvE,CACElB,KAAM,WACNg7B,UACE,IAAI2vR,EACJ,MAAMC,EAAgB,EAAIr2Q,GAAAA,eAC1B,OAAQq2Q,GACN,KAAK,EACHD,EAAe,iBACf,MACF,KAAK,EACHA,EAAe,4BACf,MACF,KAAK,EACHA,EAAe,4BACf,MACF,KAAK,EACHA,EAAe,iBACf,MACF,QACEA,EAAgB,GAAEC,EAAgB,4BAClC,MAEJ,MAAM/0C,EAAiC,IAAlB+0C,EACjB,GACC,mBAAkBD,iBAEvB,MAAQ,uFACmB7qT,UAAU,oCAAoCA,UAAU,wGAEjF+1Q,KAEJ50O,cACE,MAAQ,gEACH7/B,eAAe,4GACqCA,eAAe,qDAC/BtB,UAAU,iIAEtCA,UAAU,6BAA6BoB,QAAQ,4BAGhE,CACElB,KAAM,0BACNg7B,UACE,MAAMlD,EAAU,mHAEhB,OAAOA,IAGX,CACE93B,KAAM,SACNg7B,UACE,MAAMwvR,EAAW,mIACM/qT,OAAO,IAAK,EAAG,iHAGtC,OAAO+qT,IAGX,CACExqT,KAAM,SACNg7B,UACE,MAAO,SC3Ib,IAAI,GAAS,WAAa,IAAI0K,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACE,YAAY,yBAAyBG,MAAM,CAAC,eAAe,4BAA4B,gBAAgB,iDAAiD,YAAYR,EAAImlR,WAAWl4T,GAAG,CAAC,QAAU,SAASivG,GAAQ,OAAOl8D,EAAI+hF,WAAWsV,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,yCAAyCw7B,OAAM,GAAM,CAACjiG,IAAI,cAAcpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIolR,eAAe,OAAO5tL,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,wBAAwBw7B,OAAM,MAAS,CAACx3F,EAAIg8D,GAAG,4OAA4O77D,EAAG,MAAMA,EAAG,MAAOH,EAAY,SAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,wMAA0M77D,EAAG,OAAO,CAACH,EAAIg8D,GAAG,oQAAoQ77D,EAAG,MAAMH,EAAIg8D,GAAG,4JACj6C,GAAkB,GCDlB,GAAS,WAAa,IAAIh8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,6CAA6C,CAACF,EAAG,OAAO,CAACE,YAAY,mBAAmB,CAACF,EAAG,mBAAmB,CAAClzC,GAAG,CAAC,MAAQ+yC,EAAIghQ,cAAehhQ,EAAI09F,OAAa,OAAEv9F,EAAG,OAAO,CAACE,YAAY,kBAAkB,CAACL,EAAIqtF,GAAG,WAAW,GAAGrtF,EAAI+8D,MAAM,GAAG/8D,EAAIqtF,GAAG,WAAYrtF,EAAU,OAAEG,EAAG,yBAAyB,CAACK,MAAM,CAAC,OAASR,EAAIyiD,UAAUziD,EAAI+8D,KAAK58D,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAAEL,EAAc,WAAEG,EAAG,gBAAgB,CAACG,MAAMN,EAAIqlR,YAAYp4T,GAAG,CAAC,MAAQ+yC,EAAIslR,WAAW,CAACtlR,EAAIqtF,GAAG,eAAc,WAAW,MAAO,CAACrtF,EAAIg8D,GAAG,iBAAgB,GAAGh8D,EAAI+8D,KAAK/8D,EAAIqtF,GAAG,iBAAkBrtF,EAAe,YAAEG,EAAG,gBAAgB,CAACG,MAAMN,EAAIulR,aAAat4T,GAAG,CAAC,MAAQ+yC,EAAIwlR,YAAY,CAACxlR,EAAIqtF,GAAG,gBAAe,WAAW,MAAO,CAACrtF,EAAIg8D,GAAG,kBAAiB,GAAGh8D,EAAI+8D,MAAM,IAAI,IACn1B,GAAkB,GCDlB,GAAS,WAAa,IAAI/8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,+BAA+BpzC,GAAG,CAAC,MAAQ+yC,EAAI43G,SAAS,CAACz3G,EAAG,MAAM,CAACG,MAAMN,EAAIylR,mBAAmB,CAAGzlR,EAAI0lR,QAAiD1lR,EAAI+8D,KAA5C58D,EAAG,OAAO,CAACE,YAAY,iBAA0BF,EAAG,MAAM,CAACE,YAAY,yCAAyC,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI2lR,aAAa,SAASxlR,EAAG,OAAO,CAACE,YAAY,sCAAsC,CAACL,EAAIg8D,GAAG,wCACpc,GAAkB,GCAtB,UACE1hG,KAAM,yBACN0mC,MAAO,CACLyhD,OAAQ,CACNvhD,KAAMlrC,OACNmrC,UAAU,IAGdhR,OACE,MAAO,CACLu1R,SAAS,IAGbpkR,SAAU,CACRskR,eACE,OAAO3pJ,kBAAkBlxK,KAAK03F,SAEhCgjO,oBACE,MAAO,CACL,0CAA0C,EAC1C,kDAAmD16T,KAAK26T,UAG5DC,cACE,MAAO,GAAG56T,KAAK26T,QAAU,UAAY,kBAAkB36T,KAAK66T,aAAatrT,sBAG7EsrH,UACE76H,KAAK26T,QAAU36T,KAAK66T,aAAanjO,QAEnC/gD,QAAS,CACPk2G,SACE7sJ,KAAK26T,SAAW36T,KAAK26T,QACrB36T,KAAK66T,aAAanjO,OAAS13F,KAAK26T,WClCgU,MCOtW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QCbhC,IACEprT,KAAM,qBACN0sH,WAAY,CACVsG,cADJ,GAEIu4L,uBAFJ,GAGI5kB,iBAAJ,IAEEjgQ,MAAO,CACLqkR,YAAa,CACXnkR,KAAMlrC,OACNmrC,UAAU,EACV+jF,QAAS,yDAEXqgM,aAAc,CACZrkR,KAAMlrC,OACNmrC,UAAU,EACV+jF,QAAS,8EAEX4gM,WAAY,CACV5kR,KAAM/K,QACNgL,UAAU,EACV+jF,SAAS,GAEX6gM,YAAa,CACX7kR,KAAM/K,QACNgL,UAAU,EACV+jF,SAAS,GAEXziC,OAAQ,CACNvhD,KAAMlrC,OACNmrC,UAAU,EACV+jF,aAAS53H,GAEX04T,UAAW,CACT9kR,KAAMyuE,SACNxuE,UAAU,EACV+jF,aAAS53H,GAEX24T,SAAU,CACR/kR,KAAMyuE,SACNxuE,UAAU,EACV+jF,aAAS53H,IAGbs4H,UACE76H,KAAKy/H,IAAI/7H,WAAW6D,cAAevH,KAAKy6T,YAE1C9jR,QAAS,CACP8jR,YACMz6T,KAAKi7T,UAAWj7T,KAAKi7T,aAEvBj7T,KAAKwqN,MAAM,WACXzoN,SAASe,SAASY,WAAWgE,eAGjC6yT,WACMv6T,KAAKk7T,SAAUl7T,KAAKk7T,YAEtBl7T,KAAKwqN,MAAM,UACXzoN,SAASe,SAASY,WAAWgE,eAGjCuuS,aACEl0S,SAASe,SAASY,WAAWgE,gBCpE+T,MCQlW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QChBhC,IACE6H,KAAM,wBACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACL86J,SAAU,CACR56J,KAAM/K,QACNgL,UAAU,IAGdG,SAAU,CACR6kR,WACE,OAAOp7T,KAAK68H,WAAWy1B,MAAMkwB,eAE/B63I,gBACE,OAAOr6T,KAAK+wM,SAClB,uBACA,yBAGEp6J,QAAS,CACPqgF,SACEj1H,SAASe,SAASY,WAAWgE,cAE/B0yT,YAAJ,QACA,6DACMr4T,SAASe,SAASY,WAAWgE,gBC9B8U,MCOjX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIutC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACE,YAAY,yBAAyBG,MAAM,CAAC,eAAe,4BAA4B,gBAAgB,iDAAiD,aAAaR,EAAIuyH,SAASl7B,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,4BAA4Bw7B,OAAM,GAAM,CAACjiG,IAAI,cAAcpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,uBAAuBw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,uCAAuCw7B,OAAM,MAAS,CAAEx3F,EAAoB,iBAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,qCAAqC77D,EAAG,IAAI,CAACH,EAAIg8D,GAAG,qBAAqBh8D,EAAIg8D,GAAG,QAASh8D,EAAS,MAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,kCAAkC77D,EAAG,IAAI,CAACH,EAAIg8D,GAAG,oCAAoCh8D,EAAIg8D,GAAG,QAASh8D,EAAW,QAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,kCAAkC77D,EAAG,IAAI,CAACH,EAAIg8D,GAAG,gCAAgCh8D,EAAIg8D,GAAG,QAAQ77D,EAAG,OAAO,CAACH,EAAIg8D,GAAG,oCAAoC77D,EAAG,IAAI,CAACH,EAAIg8D,GAAG,gDAAgDh8D,EAAIg8D,GAAG,QAAQh8D,EAAIg8D,GAAG,8CAA8C77D,EAAG,MAAMA,EAAG,MAAMA,EAAG,gBAAgB,CAACK,MAAM,CAAC,YAAYR,EAAImmR,SAASprH,MAAM,aAAa/6J,EAAImmR,SAAS7gI,MAAM,UAAUtlJ,EAAImmR,SAAS9iM,OAAO,YAAYrjF,EAAIomR,iBAAiB,YAAY,gBAAgBjmR,EAAG,gBAAgB,CAACK,MAAM,CAAC,YAAYR,EAAImmR,SAAS7gI,MAAM,aAAatlJ,EAAImmR,SAASprH,MAAM,UAAU/6J,EAAImmR,SAAS9iM,OAAO,YAAYrjF,EAAIomR,iBAAiB,YAAY,gBAAgBjmR,EAAG,OAAO,CAACO,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAIqmR,oBAAoB,IACjkD,GAAkB,GCDlB,GAAS,WAAa,IAAIrmR,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,gCAAgC,CAACF,EAAG,KAAK,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAIsmR,UAAU,KAAMtmR,EAAU,OAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,UAAUh8D,EAAIi8D,GAAGj8D,EAAIqjF,OAAS,GAAG,QAAQrjF,EAAI+8D,OAAQ/8D,EAAY,SAAEG,EAAG,OAAO,CAAEH,EAAQ,KAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,eAAeh8D,EAAIi8D,GAAGj8D,EAAI1lC,MAAM,OAAO6lC,EAAG,OAAO,CAACH,EAAIg8D,GAAG,oBAAoB77D,EAAG,QAAQH,EAAI+8D,KAAK/8D,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIumR,YAAY,KAAKpmR,EAAG,MAAMA,EAAG,OAAO,CAACO,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAIpE,eAAeuE,EAAG,OAAO,CAACO,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAIwmR,kBAAkBrmR,EAAG,OAAO,CAACO,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAIymR,qBAAqBtmR,EAAG,OAAO,CAACO,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAI0mR,2BAA2BvmR,EAAG,MAAMH,EAAIqtF,GAAG,YAAY,IACrvB,GAAkB,GCAtB,UACE/yH,KAAM,gBACN0mC,MAAO,CACLqiF,OAAQ,CACNniF,KAAM5sC,OACN6sC,UAAU,EACV+jF,QAAS,GAEX2hE,SAAU,CACR3lJ,KAAMzzC,OACN0zC,UAAU,GAEZwlR,UAAW,CACTzlR,KAAMzzC,OACN0zC,UAAU,GAEZmnN,SAAU,CACRpnN,KAAM/K,QACNgL,UAAU,EACV+jF,SAAS,GAEXohM,SAAU,CACRplR,KAAMlrC,OACNmrC,UAAU,IAGdG,SAAU,CACRilR,aACE,MAAO,gBAAgBjqT,SAASC,iBAAiBxR,KAAK87L,SAASjxF,gBAAgBp5F,cAKjFo/B,aACE,OAAO7wC,KAAK67T,qBAClB,8BACA,iDACA,gBACA,KAGIJ,gBACE,OAAOz7T,KAAK67T,qBAClB,mDACA,uDACA,4DACA,sCAGIH,mBACE,OAAO17T,KAAK67T,qBAClB,0FACA,kGACA,iFACA,KAIIF,yBACE,OAAO37T,KAAK67T,qBAClB,wCACA,gEACA,0BACA,KAGItsT,OACE,OAAOvP,KAAK87L,SAAS80B,WAGzBj6K,QAAS,CACPmlR,YAAY3zT,GACV,OAAIa,QAAQoO,GAAGjP,EAAQ,KAAa6G,OAAO7G,EAAQ,GAC5CkH,UAAUlH,IAQnB0zT,qBAAqBE,EAAW9nM,EAAW+nM,EAAaC,GAEtD,IAAIC,EAAaC,EACjB,IAAK,IAAIp0T,EAAQ,EAAGA,EAAQg0T,EAAUx4T,OAAQwE,IAAS,CACrD,MAAM4S,EAAOohT,EAAUh0T,GACvB,IAAIiB,QAAQoI,GAAGpR,KAAK87L,SAASnhL,GAAO,KAAM3R,QAAQoI,GAAGpR,KAAK47T,UAAUjhT,GAAO,GAA3E,CAGR,mDAEUuhT,GAAc,EACdC,EAAW,EACX,MACV,sEAEUD,GAAc,EACdC,EAAWnzT,QAAQoO,GAAGpX,KAAK87L,SAASnhL,GAAO3a,KAAK47T,UAAUjhT,IAAS,GAAK,EACxE,MAGAuhT,GAAc,EACdC,EAAWnzT,QAAQoO,GAAGpX,KAAK87L,SAASnhL,GAAO,GAAK,GAAK,EACrD,OAKJ,IAAIyhT,EAAYH,EAAtB,KACM,IAAK,IAAIl0T,EAAQ,EAAGA,EAAQg0T,EAAUx4T,OAAQwE,IAAS,CACrD,MAAM4S,EAAOohT,EAAUh0T,GACvB,GAAIiB,QAAQoO,GAAGpX,KAAK87L,SAASnhL,GAAO,GAAI,CACtCyhT,EAAYnoM,EAAUlsH,GAEtBs0T,EAAaL,EAAYj0T,GAAO/H,KAAK87L,SAASnhL,GAAO,GACrD,OAKJ,GAAiB,IAAbwhT,EAAgB,MAAO,GAAGC,KAAaC,IAC3C,MAAMC,EAAaztR,GAASo1K,iBAAiB/5M,SAASE,MAAM85M,iBAAiB,WAAWr1K,KAAS78B,MAAM,KAAK,GACtGuqT,EAAW,uBAAuBD,EAAwB,IAAbH,EAAiB,OAAS,gBAC7E,OAAOD,EACb,uBACA,0BC9HyW,MCOzW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QCdhC,IACE3sT,KAAM,yBACN0sH,WAAY,CACVk/L,mBADJ,GAEIqB,cAAJ,IAEEjmR,SAAU,CACR6kR,WACE,OAAOp7T,KAAK68H,WAAWy1B,MAAMkwB,eAE/B2tB,QACE,OAA8C,IAAvCnwM,KAAKo7T,SAASzqH,eAAeR,OAEtCD,UACE,OAAgD,IAAzClwM,KAAKo7T,SAASzqH,eAAeT,SAEtCmrH,mBACE,OAAOr7T,KAAKo7T,SAAS7gI,MAAMq2B,WAAa5wN,KAAKo7T,SAASprH,MAAM4gB,UAE9D0qG,iBACE,MAAMmB,EAAY,mCACZC,EAAW,kCAEXtwM,EAAc,CAAC,4BACfuwM,EAAY38T,KAAKo7T,SAAS7gI,MAAMqiI,kBAA5C,wCACYC,EAAgB78T,KAAKkwM,SAAWrvM,KAAK+K,IAAI+wT,EAAYG,GAAa,IAWxE,OAVA1wM,EAAY5pH,KAAKq6T,EACvB,uEACA,gCACU78T,KAAKq7T,kBACPjvM,EAAY5pH,KAAK,OAAOq6T,EAAgB,eAAiB,2CAClDH,iDAELG,GAAiB78T,KAAKq7T,mBACxBjvM,EAAY5pH,KAAK,UAAUk6T,6DAEtBtwM,EAAY/6G,KAAK,MAG5BslC,QAAS,CACP6wH,UAAJ,QACA,6DACMzlK,SAASe,SAASY,WAAWgE,gBC9C+U,MCOlX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIutC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACE,YAAY,yBAAyBG,MAAM,CAAC,eAAe,4BAA4B,gBAAgB,iDAAiD,YAAYR,EAAImlR,WAAWl4T,GAAG,CAAC,QAAU,SAASivG,GAAQ,OAAOl8D,EAAI8nR,cAAczwL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,0BAA0Bw7B,OAAM,GAAM,CAACjiG,IAAI,cAAcpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,4BAA4Bw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,wBAAwBw7B,OAAM,MAAS,CAAEx3F,EAAa,UAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,8BAA8B77D,EAAG,IAAI,CAACH,EAAIg8D,GAAG,mCAAmCh8D,EAAIg8D,GAAG,uDAAwDh8D,EAAoB,iBAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,qCAAqC77D,EAAG,IAAI,CAACH,EAAIg8D,GAAG,qBAAqBh8D,EAAIg8D,GAAG,QAASh8D,EAAS,MAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,+BAA+B77D,EAAG,IAAI,CAACH,EAAIg8D,GAAG,6BAA6Bh8D,EAAIg8D,GAAG,QAASh8D,EAAW,QAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,+BAA+B77D,EAAG,IAAI,CAACH,EAAIg8D,GAAG,yCAAyCh8D,EAAIg8D,GAAG,QAAQ77D,EAAG,OAAO,CAACH,EAAIg8D,GAAG,oCAAoC77D,EAAG,IAAI,CAACH,EAAIg8D,GAAG,gDAAgDh8D,EAAIg8D,GAAG,QAAQ77D,EAAG,MAAMA,EAAG,gBAAgB,CAACK,MAAM,CAAC,YAAYR,EAAImmR,SAASprH,MAAM,aAAa/6J,EAAImmR,SAAS7gI,MAAM,UAAUtlJ,EAAImmR,SAAS9iM,OAAO,YAAYrjF,EAAIomR,iBAAiB,YAAY,gBAAgBjmR,EAAG,gBAAgB,CAACK,MAAM,CAAC,YAAYR,EAAImmR,SAAS7gI,MAAM,aAAatlJ,EAAImmR,SAASprH,MAAM,UAAU/6J,EAAImmR,SAAS9iM,OAAO,YAAYrjF,EAAIomR,iBAAiB,YAAY,gBAAgBjmR,EAAG,OAAO,CAACO,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAIqmR,mBAAmBlmR,EAAG,MAAMA,EAAG,OAAO,CAACH,EAAIg8D,GAAG,2HAA2H77D,EAAG,OAAO,CAACK,MAAM,CAAC,cAAcR,EAAI+nR,kBAAkB,CAAC5nR,EAAG,IAAI,CAACE,YAAY,+BAA+BF,EAAG,OAAO,CAACH,EAAIg8D,GAAG,uJAAuJ77D,EAAG,OAAO,CAACK,MAAM,CAAC,cAAcR,EAAIgoR,gBAAgB,CAAC7nR,EAAG,IAAI,CAACE,YAAY,gCAAgC,IAC7uE,GAAkB,GCGtB,UACE/lC,KAAM,yBACN0sH,WAAY,CACVk/L,mBADJ,GAEIqB,cAAJ,IAEEjmR,SAAU,CACR6kR,WACE,OAAOp7T,KAAK68H,WAAWy1B,MAAMkwB,eAE/B2tB,QACE,OAA+C,IAAxCnwM,KAAKo7T,SAASzqH,eAAeR,OAEtCD,UACE,OAAiD,IAA1ClwM,KAAKo7T,SAASzqH,eAAeT,SAEtCmrH,mBACE,OAAOr7T,KAAKo7T,SAAS7gI,MAAMq2B,WAAa5wN,KAAKo7T,SAASprH,MAAM4gB,UAE9DssG,YACE,OAAOl9T,KAAKo7T,SAASzqH,eAAeN,cAEtCirH,iBACE,MAAMmB,EAAY,mCACZC,EAAW,uCAEXtwM,EAAc,CAAC,wBACfuwM,EAAY38T,KAAKo7T,SAAS7gI,MAAMqiI,kBAA5C,wCACYC,EAAgB78T,KAAKkwM,SAAWrvM,KAAK+K,IAAI+wT,EAAYG,GAAa,IAWxE,OAVA1wM,EAAY5pH,KAAKq6T,EACvB,sEACA,iCACU78T,KAAKq7T,kBAAoBr7T,KAAKk9T,YAChC9wM,EAAY5pH,KAAK,IAAIq6T,EAAgB,eAAiB,sDAC/CH,wCAELG,GAAiB78T,KAAKq7T,kBAAoBr7T,KAAKk9T,YACjD9wM,EAAY5pH,KAAK,UAAUk6T,4DAEtBtwM,EAAY/6G,KAAK,KAE1B2rT,kBACE,MAAO,2DAETC,gBACE,MAAO,sIAIXtmR,QAAS,CACPomR,YACEnuT,OAAOysF,QAAQwrD,cAAe,EAC9B9kJ,SAASe,SAASY,WAAWgE,cAE/B0yT,YAAJ,QACA,6DACMr4T,SAASe,SAASY,WAAWgE,gBC5D+U,MCOlX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIutC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,cAAcvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAImoR,eAAe,OAAO3wL,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,aAAaw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,KAAK88B,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIzN,WAAW,OAASyN,EAAIooR,qBAAoHpoR,EAAI+8D,KAAlG58D,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAImY,QAAQ,UACpnB,GAAkB,GCEtB,UACE79C,KAAM,8BACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACLjoC,GAAI,CACFmoC,KAAM5sC,OACN6sC,UAAU,IAGdG,SAAU,CACR+vC,YACE,OAAO/iC,kBAAkBvjD,KAAKgO,KAEhCqvT,uBACE,OAAOr9T,KAAKsmF,UAAUiX,kBAExBjlF,UACE,MAAO,gMAEsBtY,KAAKq9T,qBAAuB,GAAK,kFAE1DruT,OAAOhP,KAAKsmF,UAAU0lE,qFACtB38I,UAAU,gDAEhB+tT,gBACE,MAAO,6CAA6Cp9T,KAAKgO,MAE3Do/C,SACE,IAAIu8B,EAAoB3pF,KAAKsmF,UAAUh8C,QAAQ8iB,OAAO5c,YAItD,MAHiC,oBAAtBm5C,IACTA,EAAoBA,KAEf,gDAAgDA,KAEzDniD,YACE,IAAI81R,EAAuBt9T,KAAKsmF,UAAUh8C,QAAQkG,YAIlD,MAHoC,oBAAzB8sR,IACTA,EAAuBA,KAElB,mCAAmCA,MAG9CziM,UACE76H,KAAKy/H,IAAI/7H,WAAWe,qBAAsBzE,KAAKyqN,WAC/CzqN,KAAKy/H,IAAI/7H,WAAWiB,oBAAqB3E,KAAKyqN,YAEhD9zK,QAAS,CACPwmR,iBACEn9T,KAAKsmF,UAAU96E,OAAM,GACrBzJ,SAAS0B,GAAGhB,OAAOzC,SCtD8V,MCOvX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIi1C,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,cAAcvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAImoR,eAAe,OAAO3wL,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,aAAaw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,KAAK88B,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIzN,WAAW,OAASyN,EAAIooR,qBAAoHpoR,EAAI+8D,KAAlG58D,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAImY,QAAQ,UACpnB,GAAkB,GCEtB,UACE79C,KAAM,8BACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACLjoC,GAAI,CACFmoC,KAAM5sC,OACN6sC,UAAU,IAGdG,SAAU,CACR+vC,YACE,OAAOn5B,kBAAkBntD,KAAKgO,KAEhCqvT,uBACE,OAAOr9T,KAAKsmF,UAAUh6B,aAExBh0C,UACE,MAAO,iMAEsBtY,KAAKq9T,qBAAuB,GAAK,kFAE1DruT,OAAOm+C,kBAAkBntD,KAAKgO,IAAIwlE,8GAGxC4pP,gBACE,MAAO,6CAA6Cp9T,KAAKgO,MAE3Do/C,SACE,IAAIu8B,EAAoB3pF,KAAKsmF,UAAUh8C,QAAQ8iB,OAAO5c,YAItD,MAHiC,oBAAtBm5C,IACTA,EAAoBA,KAEf,gDAAgDA,KAEzDniD,YACE,IAAI81R,EAAuBt9T,KAAKsmF,UAAUh8C,QAAQkG,YAIlD,MAHoC,oBAAzB8sR,IACTA,EAAuBA,KAElB,mCAAmCA,MAG9CziM,UACE76H,KAAKy/H,IAAI/7H,WAAWe,qBAAsBzE,KAAKyqN,WAC/CzqN,KAAKy/H,IAAI/7H,WAAWiB,oBAAqB3E,KAAKyqN,YAEhD9zK,QAAS,CACPwmR,iBACEn9T,KAAKsmF,UAAU96E,WCrDkW,MCOvX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIypC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,6CAA6C,CAAEL,EAAIq9G,MAAiB,YAAEl9G,EAAG,mBAAmB,CAACG,MAAMN,EAAI2uI,WAAa,qBAAuB,2BAA2B1hL,GAAG,CAAC,MAAQ+yC,EAAIw1K,aAAcx1K,EAAc,WAAEG,EAAG,mBAAmB,CAACE,YAAY,oDAAoDL,EAAI+8D,KAAK58D,EAAG,MAAM,CAACE,YAAY,wBAAwBK,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAI38B,YAAY88B,EAAG,gBAAgB,CAACE,YAAY,6EAA6EpzC,GAAG,CAAC,MAAQ+yC,EAAI29F,cAAc,CAAC39F,EAAIg8D,GAAG,YAAah8D,EAAc,WAAEG,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACL,EAAIg8D,GAAG,eAAeh8D,EAAI+8D,MAAM,IAC1vB,GAAkB,GCGtB,UACEziG,KAAM,eACN0sH,WAAY,CACVsG,cADJ,GAEI2zK,iBAAJ,IAEE9wQ,OACE,MAAO,CACL9sB,QAAS,KAGbi+B,SAAU,CACR+7G,QACE,OAAOtyJ,KAAK68H,WAAWy1B,MAAM3pJ,SAE/Bi7K,aACE,MAAiC,QAA1B5jL,KAAK68H,WAAWv0B,QAG3BuyB,UACE76H,KAAKy/H,IAAI/7H,WAAW6D,cAAevH,KAAK4yI,cAE1Cj8F,QAAS,CACPxK,SAAJ,MAIMnsC,KAAKsY,QAAX,oDAEIs6H,cAAJ,QACA,0DACM5yI,KAAKyqN,YACL1oN,SAAS0B,GAAGhB,OAAOzC,SCpCmU,MCO5V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIi1C,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,cAAcvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAImoR,eAAe,OAAO3wL,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,aAAaw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,KAAK88B,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIzN,WAAW,OAASyN,EAAIooR,qBAAoHpoR,EAAI+8D,KAAlG58D,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAImY,QAAQ,UACpnB,GAAkB,GCEtB,UACE79C,KAAM,4BACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACLjoC,GAAI,CACFmoC,KAAM5sC,OACN6sC,UAAU,IAGdG,SAAU,CACR+vC,YACE,OAAOn4B,gBAAgBnuD,KAAKgO,KAE9BqvT,uBACE,OAAOr9T,KAAKsmF,UAAUh6B,aAExBh0C,UACE,MAAO,iMAEsBtY,KAAKq9T,qBAAuB,GAAK,4JAIhED,gBACE,MAAO,oCAAoCp9T,KAAKgO,MAElDo/C,SACE,MAAO,gDAAgDptD,KAAKsmF,UAAUh8C,QAAQ8iB,UAEhF5lB,YACE,IAAI81R,EAAuBt9T,KAAKsmF,UAAUh8C,QAAQkG,YAIlD,MAHoC,oBAAzB8sR,IACTA,EAAuBA,KAElB,0BAA0BA,MAGrCziM,UACE76H,KAAKy/H,IAAI/7H,WAAWe,qBAAsBzE,KAAKyqN,WAC/CzqN,KAAKy/H,IAAI/7H,WAAWiB,oBAAqB3E,KAAKyqN,YAEhD9zK,QAAS,CACPwmR,iBACEn9T,KAAKsmF,UAAU96E,WChDgW,MCOrX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIypC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,oBAAoBvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIsoR,UAAU,OAAO9wL,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,UACzX,GAAkB,GCEtB,UACE/I,KAAM,wBACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACL+xB,KAAM,CACJ7xB,KAAM/K,QACNgL,UAAU,IAGdhR,OACE,MAAO,CACLkrI,YAAa,EACbktJ,gBAAgB,EAChBC,eAAe,EACfC,cAAc,IAGlBnnR,SAAU,CACRgnR,WACE,OAAIv9T,KAAKgoE,KAAa,6BAA6B70D,YAAY,oBAAqBnT,KAAKswK,eAClF,kDAETh4J,UACE,MAAMqlT,EAAgB,GAClB9rR,MAAMC,UAAU6rR,EAAcn7T,KAAK,aAAc,wBAAyB,aACzExC,KAAKy9T,eAAeE,EAAcn7T,KAAK,wBAAyB,aAChExC,KAAK09T,cAAcC,EAAcn7T,KAAK,oBACtCxC,KAAKw9T,gBAAmBx9T,KAAKy9T,eAAeE,EAAcn7T,KAAK,cACpE,MAAMo7T,EAAYxqT,gBAAgBuqT,GAClC,IAAIE,EAAiB,GACjB1wQ,kBAAkB,GAAGzb,UACvBmsR,EAAiB,sBAAsB1wQ,kBAAkB,GAAGn/C,KACpE,eACQ6vT,EAAiB,GAAGl+Q,GAAGu5C,yBAEzB,MAAM4kO,EAAZ,KAA4B,EAC5B,wDACA,+EACYxlT,EAAZ,KAAsB,EACtB,oCACA,2CAEM,OAAItY,KAAKgoE,KAAa,4CACpB70D,YAAY,oBAAqBnT,KAAKswK,iBAAiBh4J,IAClD,2DAA2DA,MAGtEuiH,UACE76H,KAAKy/H,IAAI/7H,WAAWO,gBAAgB,IACxC,6EAEE0yC,QAAS,CACPxK,SACE,GAAInsC,KAAKgoE,KAAM,CACb,MAAMqoG,EAAMnwE,OAAO79C,YACb+N,EAAMnF,oBAAoBolH,EAAI9nH,MAC9Byf,EAAOx3C,oBAAoB4/B,EAAIjF,YAAa,CAChDv6B,aAAchjB,GAAKsyF,OAAOqvE,cAAc3hK,GAAGsE,OAC3C6e,YAAY,GACtB,iBACYi3C,IACFhoE,KAAKswK,YAAcpwE,OAAOqwE,gBAAgB1vK,KAAK05B,MAAM61B,EAAIjF,YAAYz7C,aAAed,OAAO41C,UAG/FxkD,KAAKw9T,eAAiBxkR,YAAY,KAAK7N,WACvCnrC,KAAKy9T,cAAgB1kR,KAAKpH,kBAAkBjJ,aAC5C1oC,KAAK09T,aAAe,YAA1B,kCACA,iDAEIP,iBACEltJ,mBAAmBjwK,KAAKgoE,MACxBjmE,SAAS0B,GAAGhB,OAAOzC,SC5EwV,MCOjX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIi1C,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAASR,EAAInD,SAAW,kBAAevvC,GAAWL,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIsoR,UAAU,OAAO9wL,OAAM,MAAS,CAAGx3F,EAAInD,SAA4dsD,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,OAAjiB88B,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,yVAAyV77D,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,4CACxvB,GAAkB,GCEtB,UACE1hG,KAAM,kBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACL0M,UAAU,EACV66I,aAAc,EACdH,iBAAkB,IAAIxjL,QAAQ,GAC9ByjL,qBAAsB,IAAIzjL,QAAQ,GAClC+jK,eAAe,IAGnBx2H,SAAU,CACRgnR,WACE,OAAKv9T,KAAK8xC,SACH,+CADoB,sCAG7Bx5B,UACE,MAAMylT,EAAe,SAA3B,eACA,+EACA,0GACe/uT,OAAOhP,KAAKysL,qBAAsB,EAAG,OAE9C,MAAO,oEACLx5K,SAAS,UAAWjT,KAAK2sL,aAAc,EAAG,MAAMoxI,MAGtDpnR,QAAS,CACPxK,SACEnsC,KAAK8xC,SAAWD,MAAMC,SACtB9xC,KAAK2sL,aAAe96I,MAAM86I,aAC1B3sL,KAAKwsL,iBAAiB7iL,SAASkoC,MAAM+6I,2BACrC5sL,KAAKysL,qBAAqB9iL,SAASkoC,MAAM46I,sBACzCzsL,KAAK+sK,cAAgBl7H,MAAMk7H,eAE7BowJ,iBACEtrR,MAAMgrI,mBCzC+V,MCO3W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAI5nI,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,aAAa,CAACK,MAAM,CAAC,OAAS,4BAA4B,QAAUR,EAAI38B,QAAQ,mBAAmB28B,EAAI+oR,WAAW,qBAAqB/oR,EAAIgpR,kBAAkB,aAAahpR,EAAIkoR,eAAe,sBAAsBloR,EAAIipR,gBAAgB,iBAAiBjpR,EAAI38B,QAAQ,iBAAiB28B,EAAIipR,qBAAkB37T,EAAY,gBACtZ,GAAkB,GCDlB,GAAS,WAAa,IAAI0yC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAASR,EAAIkpR,eAAej8T,GAAG,CAAC,QAAU+yC,EAAIgmR,WAAW3uL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIwE,QAAQ,OAAOgzF,OAAM,MAAS,CAAGx3F,EAAImpR,mBAAgXhpR,EAAG,MAAM,CAACA,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIopR,eAAe,SAA3bjpR,EAAG,MAAM,CAACA,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,KAAK88B,EAAG,QAAQA,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIqpR,iBAAiB,OAAOlpR,EAAG,MAAOH,EAAqB,kBAAEG,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIgpR,mBAAmB,OAAOhpR,EAAI+8D,UACjpB,GAAkB,GCEtB,UACEziG,KAAM,aACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACLwD,OAAQ,CACNtD,KAAMlrC,OACNmrC,UAAU,GAEZ99B,QAAS,CACP69B,KAAMlrC,OACNmrC,UAAU,GAEZkoR,gBAAiB,CACfnoR,KAAMlrC,OACNmrC,UAAU,GAEZ6nR,kBAAmB,CACjB9nR,KAAMlrC,OACNmrC,UAAU,EACV+jF,aAAS53H,GAEX47T,cAAe,CACbhoR,KAAMlrC,OACNmrC,UAAU,EACV+jF,aAAS53H,GAEX04T,UAAW,CACT9kR,KAAMyuE,SACNxuE,UAAU,GAEZioR,cAAe,CACbloR,KAAMlrC,OACNmrC,UAAU,EACV+jF,aAAS53H,GAEX67T,mBAAoB,CAClBjoR,KAAM/K,QACNgL,UAAU,EACV+jF,SAAS,KC3CuV,MCOtW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QCfhC,IACE5qH,KAAM,iBACN0sH,WAAY,CACVsiM,WAAJ,IAEEn5R,OACE,MAAO,CACLohB,iBAAkB,IAAIx9C,QACtBmwD,qBAAsB,IAAInwD,QAC1Bw1T,eAAgB,EAChBC,WAAY,GACZC,qBAAqB,IAGzBnoR,SAAU,CACR2nR,kBACE,OAAQrxR,eAAew+B,oBAEzB/yD,UACE,MAAMk/E,EAAOx3F,KAAKk+T,gBAAkBl+T,KAAK2+T,kBAAoB,GAC7D,MAAO,uFAAuFnnO,KAEhGmnO,oBACE,MAAO,wNAGTX,aACE,MAAO,iBAAiB/qT,SAAS,WAAYjT,KAAKwmD,iBAAkB,EAAG,mBAC/DvzC,SAAS,iBAAkBjT,KAAKm5D,qBAAsB,EAAG,OAEnE8kQ,oBACE,MAAMK,EAAkB,GAKxB,OAJIt+T,KAAKy+T,WAAWvtS,IAAI,KAAKotS,EAAgB97T,KAAK,GAAGyQ,SAAS,aAAcjT,KAAKy+T,WAAY,EAAG,MAC5Fz+T,KAAKw+T,eAAiB,GAAGF,EAAgB97T,KAAK,GAAGyQ,SAAS,kBAAmBjT,KAAKw+T,mBAClFx+T,KAAK0+T,qBAAqBJ,EAAgB97T,KAAK,GAAGyQ,SAAS,SAAU,MAElE,0CAA0CG,gBAAgBkrT,QAGrE3nR,QAAS,CACPxK,SACEnsC,KAAKwmD,iBAAmBA,mBAAmBjsB,QAC3Cv6B,KAAKm5D,qBAAuBA,uBAAuB5+B,QACnDv6B,KAAKw+T,eAAiBltQ,SAAS0yK,wBAC/BhkO,KAAKy+T,WAAa7tR,SAASC,WAAW0gD,cACtCvxF,KAAK0+T,oBAAsBzxQ,gBAAgB+5C,gBAAgBl7D,UAE7DqxR,iBACE3lN,wBACAz1G,SAAS0B,GAAGhB,OAAOzC,MACfA,KAAKk+T,iBACP/8T,YAAW,IAAMoZ,MAAMjC,QAAQkC,KAAK,6QAE5C,eCxD0W,MCO1W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIy6B,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,kBAAkBvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIsoR,UAAU,OAAO9wL,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,UACvX,GAAkB,GCEtB,UACE/I,KAAM,sBACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACL+xB,KAAM,CACJ7xB,KAAM/K,QACNgL,UAAU,IAGdG,SAAU,CACRgnR,WACE,MAAO,+CAETjlT,UACE,MAAMsmT,EAAiB7lR,KAAKpH,kBAAkBjJ,cAAgBsQ,YAAY,KAAKtQ,cACrF,4CACA,yNAEA,qFAEM,MAAO,aAAak2R,MAGxBjoR,QAAS,CACPwmR,iBACE34F,sBAAsBxkO,KAAKgoE,MAC3BjmE,SAAS0B,GAAGhB,OAAOzC,SC/BsV,MCO/W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIi1C,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAAClzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIsoR,UAAU,OAAO9wL,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,aAAaw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,KAAK88B,EAAG,MAAMA,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,kCAAkCL,EAAI87D,GAAI97D,EAAW,SAAE,SAAS3N,EAAO9lC,GAAG,OAAO4zC,EAAG,MAAM,CAAC5K,IAAIhpC,EAAE8zC,YAAY,uCAAuCC,MAAM,CAAE,mBAAmC,IAAfN,EAAI9sC,QAAoB,IAAJ3G,GAASyzC,EAAI2kP,mBAAmB,CAAEtyP,EAAOl5B,OAAQgnC,EAAG,IAAI,CAACH,EAAIg8D,GAAG,OAAOh8D,EAAI+8D,KAAK58D,EAAG,IAAI,CAACH,EAAIg8D,GAAG,OAAOh8D,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAG5pE,GAAQ,UAAS,GAAI2N,EAAe,YAAEG,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIzE,aAAa,OAAOyE,EAAI+8D,KAAK58D,EAAG,MAAMA,EAAG,MAAMA,EAAG,MAAM,CAACH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI4pR,WAAW,OAAuB,IAAf5pR,EAAI9sC,OAAcitC,EAAG,OAAOH,EAAI87D,GAAG,GAAI,SAAS/iG,GAAI,OAAOonC,EAAG,uBAAuB,CAAC5K,IAAIx8B,EAAGynC,MAAM,CAAC,SAASznC,EAAK,QAAO,GAAGinC,EAAI+8D,UACtmC,GAAkB,GCDlB,GAAS,WAAa,IAAI/8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAQD,EAAc,WAAEG,EAAG,OAAO,CAAC9qC,MAAO2qC,EAAS,OAAG,CAACA,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI1lC,MAAM,IAAI0lC,EAAIi8D,GAAGj8D,EAAI6pR,UAAU,MAAM1pR,EAAG,QAAQH,EAAI+8D,MACtN,GAAkB,GCAtB,UACEziG,KAAM,uBACN0mC,MAAO,CACL8oR,MAAO,CACL5oR,KAAM5sC,OACN6sC,UAAU,IAGdhR,OACE,MAAO,CACL+F,YAAY,IAGhBoL,SAAU,CACRkqC,MACE,OAAO9gC,GAAGksB,KAAKxf,IAAIrsD,KAAK++T,QAE1BxvT,OACE,OAAOvP,KAAKygF,IAAIlxE,MAElBs/B,QACE,MAAO,UAAU7uC,KAAKygF,IAAI5xC,SAE5BiwR,WAEE,MAAME,EAA2B,aAAhBh/T,KAAKygF,IAAIzyE,GACpBusM,EAAOykH,EAAW,OAAS,QAC3B3yR,EAAM2yR,EAAW,OAAS,MAC1BF,EAA2B,UAAhB9+T,KAAKygF,IAAIzyE,GAAhC,+FACM,OAAOhO,KAAKygF,IAAI3jC,SAAW5N,eAAe,IAAIpD,SAApD,QACA,6BACA,GAEI8yC,YACE,OAAO5+E,KAAKygF,IAAI7B,YAGpBjoC,QAAS,CACPxK,SACEnsC,KAAKmrC,WAAanrC,KAAKygF,IAAIt1C,cCxC+U,MCOhX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QCdhC,IACE57B,KAAM,uBACN0sH,WAAY,CACVk/L,mBADJ,GAEI8D,qBAAJ,IAEEhpR,MAAO,CACL9tC,OAAQ,CACNguC,KAAM5sC,OACN6sC,UAAU,GAEZ7mC,KAAM,CACJ4mC,KAAMlrC,OACNmrC,UAAU,IAGdhR,OACE,MAAO,CACL85R,eAAgB,KAChBC,aAAc,IAAIn2T,QAClBo2T,cAAe,EACfC,aAAa,EACbC,aAAc,GACdC,cAAc,EACdC,YAAa,KAGjBjpR,SAAU,CACRhM,UACE,OAAOmiC,aAAa79D,WAAW2mF,aAAax1F,KAAKmI,QAAQoiC,UAAUv4B,MAAM,OAE3Ew+B,cACE,MAAMA,EAAck8B,aAAa79D,WAAW2mF,aAAax1F,KAAKmI,QAAQqoC,YACtE,OAAOA,EAAcA,IAAgB,IAEvC+sR,WACE,MAAO,GAAGv9T,KAAKuP,gBAEjB+I,UACE,MAAO,qCAAqCtY,KAAKuP,2BAEnDsvT,YACE,OAAQ7+T,KAAKmI,QACX,KAAK,EACH,OAAOnI,KAAKm/T,aAAa/tT,GAAG,GACtC,sLAEA,oHAC8BX,QAAQzQ,KAAKo/T,cAAe,0CAClD,KAAK,EAAb,wBACA,wBACA,uDACQ,KAAK,EAAb,yBACA,qCACA,sCACQ,KAAK,EAAb,SACQ,KAAK,EAAb,kIAEQ,KAAK,EAAb,gCACA,gDACA,+DACQ,KAAK,EAAb,SACQ,KAAK,EAAb,SACQ,QAAR,8FAGIxlC,iBAAkB,IAAMj6O,GAAGC,QAAQ+jC,oBAAoBx4C,YAEzDwL,QAAS,CACPxK,SACEnsC,KAAKm/T,aAAax1T,SAASiF,OAAOC,WAAWi9D,OAAOs2E,WACpDpiJ,KAAKo/T,cAAgBtlQ,OAAOo+G,oBAC5B,MAAMunJ,EAAetgR,QAAQo5C,aAC7Bv4F,KAAKq/T,YAAc,IAAzB,sGACMr/T,KAAKs/T,aAAe,CAAC,KAAM,WAAY,WAAY,UAAW,KAAM,WAAWG,GAC/Ez/T,KAAKu/T,aAAe9tR,SAAS6a,YAC7BtsD,KAAKk/T,eAAiBtwT,OAAOC,WAAWw2C,QAAQ2vB,kBAChDh1E,KAAKw/T,YAAcjuT,SAASs6F,YAAY7rG,KAAKk/T,gBAAgBrtT,iBAE/DsrT,iBAEE,OADAtmJ,oBAAoBC,iBAAgB,IAC5B92K,KAAKmI,QACX,KAAK,EAAb,8BACQ,KAAK,EAAb,+BACQ,KAAK,EAAb,gCACQ,KAAK,EAAb,yBACQ,KAAK,EAAb,0BACQ,KAAK,EAAb,+BACQ,KAAK,EAAb,oGACQ,KAAK,EAAb,8BACQ,QAAR,gGC9FgX,MCQhX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI8sC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,YAAYvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAImoR,eAAe,OAAO3wL,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,aAAaw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIyqR,cAAc,KAAKtqR,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,UAC3f,GAAkB,GCItB,UACE/I,KAAM,qBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE5kR,SAAU,CACRj+B,UACE,MAAO,qJACgD5H,UAAU,IAAM,EAAG,gMAI5E0sT,gBACE,MAAO,mCAETsC,eACE,OAAI9wT,OAAOia,SAASq2H,OAAO9tI,IAAI,GACtB,+BAEJgsF,wBAA0Bz9C,GAAGC,QAAQkhC,yBAAyBp4C,aAC1D,qHACYr5B,UAAU,cAExB,kCAAkCL,OAAOJ,OAAOia,SAASq2H,OAAQ,EAAG,wBAG/EvoG,QAAS,CACPwmR,iBACMvuT,OAAOia,SAASo4B,SAChBryC,OAAOysF,QAAQkuD,WAAW1gI,WAAa,GAAjD,aACQ82S,mBAEAr/M,uBAEEzuE,MAAMC,UAAUojB,aAAarsC,SAASkzG,cCvC8T,MCO9W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAI9mF,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,aAAa,CAACK,MAAM,CAAC,OAASR,EAAI2qR,UAAY,8BAAgC,4BAA4B,QAAU3qR,EAAI38B,QAAQ,mBAAmB28B,EAAI4qR,mBAAmB,qBAAqB5qR,EAAI6qR,YAAY,aAAa7qR,EAAIkoR,eAAe,sBAAsBloR,EAAI2qR,UAAU,iBAAiB3qR,EAAI2qR,UAAY3qR,EAAI+d,uBAAoBzwD,EAAU,iBAAiB,eACtc,GAAkB,GCEtB,UACEgN,KAAM,gBACN0sH,WAAY,CACVsiM,WAAJ,IAEEn5R,OACE,MAAO,CACLw6R,WAAW,EACXG,WAAY,IAAI/2T,QAChB+vD,qBAAsB,IAAI/vD,QAC1B2tD,iBAAkB,IAAI3tD,UAG1ButC,SAAU,CACRj+B,UACE,OAAOu0B,eAAemsB,mBAC5B,iJAEA,oNAGI6mQ,qBACE,MAAO,iBAAiB5sT,SAAS,WAAYjT,KAAK22D,iBAAkB,kBAC9D1jD,SAAS,iBAAkBjT,KAAK+4D,qBAAsB,mBAE9D+mQ,cACE,OAAO9/T,KAAK+/T,WAAW3oT,GAAG,GAChC,0FACA,IAEI47C,oBACE,MAAM7D,EAAK5L,kBAAkB56C,QAC7B,GAAIwmD,EAAGouC,iBACL,MAAO,sBAAsBpuC,EAAGnhD,iCAElC,IAAK+qC,KAAKzF,YAAYxH,SACpB,MAAO,sDAAsDqjB,EAAGnhD,MAElE,MAAMk1M,EAAoB/zJ,EAAGs3B,uBAAuBy8H,kBACpD,MAAO,iBAAiB/vM,YAAY,aAAc+vM,6BAA6C/zJ,EAAGnhD,QAGtG2oC,QAAS,CACPxK,SACEnsC,KAAK4/T,UAAYr8Q,kBAAkB7R,UACnC1xC,KAAK+/T,WAAanvR,SAASI,eAAeugD,cAC1CvxF,KAAK+4D,qBAAuBA,uBAC5B/4D,KAAK22D,iBAAmBA,oBAE1BwmQ,iBACE9+I,qBACAt8K,SAAS0B,GAAGhB,OAAOzC,SCtDgV,MCOzW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIi1C,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,iBAAiBvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,qBAAqBh8D,EAAIi8D,GAAGj8D,EAAI+qR,aAAe,UAAY,QAAQ,IAAI/qR,EAAIi8D,GAAGj8D,EAAI67N,eAAe,OAAOrkI,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI+qR,aAAe,UAAY,QAAQ,OAAOvzL,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAAEL,EAAgB,aAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,kCAAkCh8D,EAAIi8D,GAAGj8D,EAAI67N,eAAe,0CAA0C17N,EAAG,OAAO,CAACH,EAAIg8D,GAAG,4CAA4Ch8D,EAAIi8D,GAAGj8D,EAAI87N,YAAY,iCAAkC97N,EAAmB,gBAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,yFAAyFh8D,EAAI+8D,UAC35B,GAAkB,GCEtB,UACEziG,KAAM,qBACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACL66N,cAAe,CACb36N,KAAMlrC,OACNmrC,UAAU,GAEZ26N,WAAY,CACV56N,KAAMlrC,OACNmrC,UAAU,GAEZ46N,gBAAiB,CACf76N,KAAM/K,QACNgL,UAAU,GAEZ66N,OAAQ,CACN96N,KAAMyuE,SACNxuE,UAAU,IAGdG,SAAU,CACR0pR,cACE,OAAOjgU,KAAK8wQ,cAAch+P,MAAM,YAElCktT,eACE,OAAOhgU,KAAKigU,YAAcrxT,OAAOysF,QAAQsrD,eAAiB/3I,OAAOysF,QAAQqrD,iBAG7E/vG,QAAS,CACPwmR,iBACEn9T,KAAKixQ,SACLlvQ,SAAS0B,GAAGhB,OAAOzC,SCrCqV,MCO9W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIi1C,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,YAAYvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAE6yC,EAAY,SAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,6CAA6C77D,EAAG,OAAO,CAACH,EAAIg8D,GAAG,wCAAwCw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,YAAYw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAAEL,EAAY,SAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,oCAAoCh8D,EAAIi8D,GAAGj8D,EAAI6pR,UAAU,+EAA+E1pR,EAAG,OAAO,CAACH,EAAIg8D,GAAG,uCAAuCh8D,EAAIi8D,GAAGj8D,EAAI6pR,UAAU,QAAS7pR,EAAU,OAAEG,EAAG,MAAM,CAACH,EAAIg8D,GAAG,mEAAmEh8D,EAAI+8D,KAAK58D,EAAG,MAAMH,EAAIg8D,GAAG,4CACr3B,GAAkB,GCItB,UACE1hG,KAAM,oBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACLm7B,YAAa,IAAIv3D,QAAQ,GACzB8oC,UAAU,IAGdyE,SAAU,CACRuoR,WACE,OAAI9+T,KAAKugE,YAAYlpD,IAAI,GAAW,oBAC7B,QAAQpE,SAAS,mBAAoBjT,KAAKugE,YAAa,EAAG,MAEnE2/P,SACE,OAAOrnQ,OAAO6yF,wBAAwBi/B,yBAG1Ch0I,QAAS,CACPxK,SAGOv9B,OAAOia,SAASo4B,QAAQjhD,KAAKyqN,YAClCzqN,KAAKugE,YAAY52D,SAASysG,gBAAe,IACzCp2G,KAAK8xC,SAAWD,MAAMC,UAExBqrR,iBACE,IAAKvuT,OAAOia,SAASo4B,OAAQ,OAC7B,MAAMk/Q,EAAgBvxT,OAAOysF,QAAQkuD,WAAW1gI,WAAa,GAAnE,aACUs3S,EACF5hJ,qBAEA14H,UAAS,GAAO,EAAO,CAA/B,0BCvC6W,MCO7W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAI5Q,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,eAAeR,EAAImrR,cAAc,eAAenrR,EAAImrR,cAAc,gBAAgB,2EAA2El+T,GAAG,CAAC,QAAU+yC,EAAIw2J,WAAWn/D,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,kBAAkBw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,kBAAkBw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,8DAA8D77D,EAAG,OAAO,CAACE,YAAY,6BAA6B,CAACL,EAAIg8D,GAAG,yDAAyDh8D,EAAIg8D,GAAG,+DAAgE77D,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACL,EAAIg8D,GAAG,+BAAgCh8D,EAAc,WAAEG,EAAG,OAAO,CAACA,EAAG,MAAMH,EAAIg8D,GAAG,6FAA6Fh8D,EAAI+8D,KAAM/8D,EAAe,YAAEG,EAAG,OAAO,CAACA,EAAG,MAAMH,EAAIg8D,GAAG,iHAAmHh8D,EAAI+8D,SAAS58D,EAAG,QAAQ,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,QAAQsjG,QAAQ,UAAU/qG,MAAOmtC,EAAS,MAAEu8D,WAAW,UAAUV,IAAI,QAAQx7D,YAAY,0CAA0CG,MAAM,CAAC,KAAO,QAAQE,SAAS,CAAC,MAASV,EAAS,OAAG/yC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,MAAM,GAAGh7B,EAAO3mE,IAAI,CAAC,MAAM,WAAoB,KAAcyK,EAAIw1K,UAAUz1M,MAAM,KAAMH,YAAY,MAAQ,SAASs8F,GAAWA,EAAO9uG,OAAO4wG,YAAqBh+D,EAAIhH,MAAMkjE,EAAO9uG,OAAOyF,WAAUstC,EAAG,MAAM,CAACE,YAAY,2BAA2B,CAAEL,EAAiB,cAAEG,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACL,EAAIg8D,GAAG,yEAAyE77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,sDACx3D,GAAkB,GCEtB,UACE1hG,KAAM,iBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACL6I,MAAO,KAGXsI,SAAU,CACR6pR,gBACE,MAAsB,uCAAfpgU,KAAKiuC,OAEdoyR,aACE,OAAOzxT,OAAO+zC,QAAQoJ,oBAAsB,GAE9Cs/P,cACE,OAAOz8S,OAAOqgG,SAAS9jE,aAG3BgwF,YACMn7H,KAAKogU,eAAehpR,kBAAkB,IAAI7L,UAEhDoL,QAAS,CACP80J,YACMzrM,KAAKogU,eAAe/vK,YAAYo7C,YACpCzrM,KAAKiuC,MAAQ,MC9BuV,MCO1W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIgH,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAASR,EAAIqrR,sBAAsB,eAAerrR,EAAIsrR,YAAYr+T,GAAG,CAAC,QAAU,SAASivG,GAAQ,OAAOl8D,EAAIurR,cAAa,KAASl0L,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,gCAAgCw7B,OAAM,GAAOx3F,EAAI6iD,cAAgB7iD,EAAIsrR,WAAY,CAAC/1R,IAAI,gBAAgBpoC,GAAG,WAAW,MAAO,CAACgzC,EAAG,gBAAgB,CAACE,YAAY,wDAAwDpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIurR,cAAa,MAAS,CAACvrR,EAAIg8D,GAAG,mBAAmBw7B,OAAM,GAAM,MAAM,MAAK,IAAO,CAAEx3F,EAAgB,aAAEG,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIwrR,kBAAkB,OAAOxrR,EAAI+8D,KAAK58D,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIyrR,QAAQ,OAASzrR,EAAI0rR,aAAuV1rR,EAAI+8D,KAA7U58D,EAAG,MAAM,CAACE,YAAY,0BAA0BL,EAAI87D,GAAI97D,EAAU,QAAE,SAASge,EAAMlrD,GAAO,OAAOqtC,EAAG,iBAAiB,CAAC5K,IAAIziC,EAAMwtC,MAAMN,EAAI2rR,WAAW74T,GAAO0tC,MAAM,CAAC,MAAQwd,EAAM,eAAc,EAAK,yBAAwB,EAAK,iBAAiBhe,EAAI6iD,cAAc+oO,SAAS,CAAC,MAAQ,SAAS1vN,GAAQ,OAAOl8D,EAAItqC,OAAO5C,UAAa,GAAcktC,EAAI0rR,aAAmJ1rR,EAAI+8D,KAAzI58D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI6rR,YAAY,KAAK1rR,EAAG,MAAMA,EAAG,IAAI,CAACE,YAAY,aAAa,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI8rR,UAAU,SAAmB9rR,EAAI+rR,aAAe,EAAG5rR,EAAG,MAAM,CAACA,EAAG,MAAMH,EAAIg8D,GAAG,kFAAkF77D,EAAG,MAAMH,EAAIg8D,GAAG,mCAAmCh8D,EAAIi8D,GAAGj8D,EAAI9hC,YAAY,QAAS8hC,EAAI+rR,aAAe,IAAI,4CAA4C/rR,EAAI+8D,KAAM/8D,EAAiB,cAAEG,EAAG,MAAM,CAACA,EAAG,MAAMH,EAAIg8D,GAAG,0DAA0D77D,EAAG,MAAMH,EAAIg8D,GAAG,2DAA2Dh8D,EAAI+8D,KAAO/8D,EAAIgsR,SAAsYhsR,EAAI+8D,KAAhY58D,EAAG,MAAM,CAACE,YAAY,aAAa,CAAEL,EAAI+rR,aAAe,EAAG5rR,EAAG,OAAO,CAACH,EAAIg8D,GAAG,sIAAsI77D,EAAG,OAAO,CAACH,EAAIg8D,GAAG,yFAAyFh8D,EAAIi8D,GAAGj8D,EAAI6iD,aAAe,aAAe,WAAW,UAAoB7iD,EAAyB,sBAAEG,EAAG,MAAM,CAACA,EAAG,MAAMH,EAAIg8D,GAAG,mGAAmGh8D,EAAI+8D,QACj3E,GAAkB,GCKtB,UACEziG,KAAM,eACN0sH,WAAY,CACVsG,cADJ,GAEI44L,mBAFJ,GAGI99D,eAAJ,IAEEj4N,OACE,MAAO,CACLu7R,cAAc,EACdM,UAAU,EACVC,WAAW,EACXh2D,WAAW,EACX77N,OAAQ,GACR8xR,UAAW,EACXC,gBAAiB,EACjBlyD,mBAAe3sQ,EACf+jQ,YAAY,EACZxpN,MAAO,EACPkkR,aAAc,EACdj5Q,gBAAiB,IAAI/+C,QACrBw2E,aAAc,IAAIx2E,QAClBq4T,iBAAiB,EACjBC,eAAe,IAGnB/qR,SAAU,CACRkqR,mBACE,MAAO,0IACuBpxT,UAAU,wHAEpCqC,sBAAsB,iQAI5BomF,eACE,OAAOh/C,eAAe,IAAIrQ,gBAE5Bs4R,WACE,OAAK/gU,KAAKkhU,UAMNlhU,KAAKkrQ,gBAAoC3oQ,IAAvBvC,KAAKkvQ,cAClB,iGAEqB3sQ,IAAvBvC,KAAKkvQ,cAClB,gDACA,KAVe,uNAYXwxD,SACE,MAAMpC,EAAkB,GAOxB,OANAA,EAAgB97T,KAAK,GAAG2Q,YAAY,UAAWnT,KAAKghU,iBACpD1C,EAAgB97T,KAAK,GAAG2Q,YAAY,aAAcnT,KAAKghU,aAA7D,yBACM1C,EAAgB97T,KAAK,GAAGyQ,SAAS,kBAAmBjT,KAAK+nD,gBAAiB,MACtE/nD,KAAKqhU,iBACP/C,EAAgB97T,KAAK,GAAGyQ,SAAS,cAAejT,KAAKw/E,aAAc,MAE9D,iBAAiBpsE,gBAAgBkrT,MAE1CwC,aAEE,MAAO,wBAAwBzxT,UAAUrP,KAAK88C,8CAC1C98C,KAAK88C,QAAU98C,KAAKmhU,UAAY,WAAa,aAC7ChuT,YAAY,QAASnT,KAAKohU,6BAC1BphU,KAAK88C,MAAQ98C,KAAKmhU,UAAY,SAAW,6BAE/Cb,wBACE,OAAOpvJ,kBAAkBlnB,eAAe7+G,aAAe,sBAAmB5oC,GAE5Eg+T,aACE,OAAOvgU,KAAK2gU,mBAAuCp+T,IAAvBvC,KAAKkvQ,eAA+BlvQ,KAAKkrQ,YAGzErwI,UACE76H,KAAKuhU,YACLhrN,eAAes+D,aAAeiC,iBAAgB,GAAO,IAEvDngI,QAAS,CACPxK,SACEnsC,KAAK2gU,aAAoC,IAArB/xT,OAAOorC,UAC3Bh6C,KAAKkhU,UAAYnoR,KAAK1I,UAAU5H,eAChCzoC,KAAKqhU,gBAAkB3xR,cAAc5mB,QAAQ4f,aAC7C1oC,KAAKkrQ,UAAYj8N,cAAc2K,YAAYzO,WAC3CnrC,KAAK88C,MAAQiG,mBAAmBC,YAChChjD,KAAKghU,aAAe,EAAI39Q,uBAAsB,GAC9CrjD,KAAKihU,SAAWviP,UAAUC,oBAAoB72E,MAAQ9H,KAAKghU,aAC3D,MAAMQ,EAAcr+Q,eAAegF,sBAAsBvyC,MAAM5V,KAAKghU,cAIpE,GAHAhhU,KAAK+nD,gBAAgBp+C,SAAS63T,EAAYh5T,SAAS26C,eAAe2+J,kBAClE9hN,KAAKw/E,aAAergC,QAAQqgC,aAAa5pE,MAAMytC,uBAAsB,GAAS,GAC9ErjD,KAAKshU,cAAgB1yT,OAAOma,QAAQ+nE,eAChC9wF,KAAK2gU,aAAT,CACA,IAAK,IAAIn/T,EAAI,EAAGA,EAAIxB,KAAKqvC,OAAO9rC,SAAU/B,EAAG,CAC3C,MAAMigU,EAAezhU,KAAKqvC,OAAO7tC,GAC3Bg1K,EAAWjgE,eAAeC,UACxC,+CAAU,iBAAV,IACA,GACYirN,EAAa3kR,QAAU05H,EAAS15H,QACpC2kR,EAAa3kR,MAAQ05H,EAAS15H,MAC9B2kR,EAAal3R,QAAUisI,EAASjsI,SAElCvqC,KAAKmhU,UAAYvyT,OAAO+zC,QAAQuF,YAAYyrB,WAC5C3zE,KAAKohU,gBAAkBvgU,KAAK+K,IAAI5L,KAAKmhU,UAAYnhU,KAAK88C,SAExD8jR,WAAW74T,GACT,MAAO,CACL,kCAAkC,EAClC,2CAA4C/H,KAAKkvQ,gBAAkBnnQ,IAGvEw5T,YACEvhU,KAAKsmQ,YAAa,EAClBtmQ,KAAKqvC,OAASknE,eAAeC,UACnC,+CAAQ,iBAAR,KAEI7rG,OAAO5C,GACL/H,KAAKkvQ,cAAgBnnQ,GAEvBy4T,aAAahvQ,GACNxxD,KAAKugU,aACN/uQ,GAEFxxD,KAAKyqN,YAEPr0C,mBAAmB5kH,EAAWxxD,KAAKkvQ,mBCpI+T,MCQxW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIj6N,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,oBAAoBvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIsoR,UAAU,OAAO9wL,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,UACzX,GAAkB,GCEtB,UACE/I,KAAM,wBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACLk1B,WAAY,IAAItxD,QAChB04T,kBAAkB,EAClB31R,YAAa,IAGjBwK,SAAU,CACRgnR,WACE,MAAO,6BAA6BpqT,YAAY,oBAAqBnT,KAAK+rC,gBAE5EzzB,UACE,MAAMqpT,EAAkB3hU,KAAK0hU,iBACnC,8GACa1yT,OAAOhP,KAAKs6D,WAAY,EAAG,oBAC5BtrD,OAAOhP,KAAKs6D,WAAW82B,OAAOpoF,QAAQu+D,iBAAiB1pD,IAAI7d,KAAK+rC,cAAe,EAAG,MAC9F,2CACM,MAAO,gPAEK41R,OAGhBhrR,QAAS,CACPxK,SACEnsC,KAAKs6D,WAAW3wD,SAASiF,OAAO0rD,WAAWpoD,QAC3ClS,KAAK0hU,iBAAmB1oR,YAAY,KAAK7N,WACzCnrC,KAAK+rC,YAAcwY,WAAWC,SAAS+1J,KACnCv6M,KAAKs6D,WAAW5iD,GAAGnO,OAAO2O,YAAYlY,KAAKyqN,aAEjD0yG,iBACE/yK,kBAAiB,MCtC0V,MCOjX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIn1G,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,gBAAgBvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,gCAAgCh8D,EAAIi8D,GAAGj8D,EAAI2sR,WAAW,OAAOn1L,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,aAAaw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,6CAA6Ch8D,EAAIi8D,GAAGj8D,EAAI2sR,WAAW,8DAA8D3sR,EAAIi8D,GAAGj8D,EAAI2sR,WAAW,MAAMxsR,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,uCAAwCh8D,EAAc,WAAEG,EAAG,MAAM,CAACE,YAAY,iBAAiB,CAACF,EAAG,MAAMH,EAAIg8D,GAAG,2KAA6Kh8D,EAAI+8D,KAAK58D,EAAG,WACn6B,GAAkB,GCEtB,UACE7lC,KAAM,oBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACL0M,UAAU,EACV+uK,YAAY,IAGhBtqK,SAAU,CACRqrR,YAAJ,8CAEEjrR,QAAS,CACPxK,SACEnsC,KAAK8xC,SAAWD,MAAMC,SACtB9xC,KAAK6gN,WAAaxqG,sBAEpB8mN,iBACEtmJ,oBAAoBC,iBAAgB,IACpC/0K,SAAS0B,GAAGhB,OAAOzC,SCxBoV,MCQ7W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIi1C,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,aAAa,CAACK,MAAM,CAAC,OAAS,uCAAuC,QAAUR,EAAI38B,QAAQ,mBAAmB28B,EAAIqpR,gBAAgB,aAAarpR,EAAIkoR,mBAClP,GAAkB,GCEtB,UACE5tT,KAAM,eACN0sH,WAAY,CACVsiM,WAAJ,IAEEn5R,OACE,MAAO,CACLwwK,oBAAqB,IAAI5sM,QACzBwjD,MAAO,IAAIxjD,QACX64T,aAAc,WAGlBtrR,SAAU,CACRj+B,UACE,MAAO,kOAETgmT,kBACE,MAAO,iBAAiBlvT,SAASpP,KAAK41M,oBAAqB,EAAG,kBAAoB51M,KAAK6hU,eAG3FlrR,QAAS,CACPxK,SACEnsC,KAAKwsD,MAAM7iD,SAASinC,SAAS4b,MAAM1kD,OACnC9H,KAAK41M,oBAAoBjsM,SAASisM,uBAClC51M,KAAK6hU,aAAe7hU,KAAK41M,oBAAoBx+L,GAAG,GAAK,UAAY,UAEnE+lT,iBACEld,kBC9BuW,MCO7W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIhrQ,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACE,YAAY,yBAAyBg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,yBAAyBw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,qCAAqC,CAAEL,EAAoB,iBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,eAAe67D,MAAM,CAACxpG,MAAOmtC,EAAa,UAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIqrD,UAAUiR,GAAKC,WAAW,eAAev8D,EAAI+8D,KAAM/8D,EAAoB,iBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,aAAa67D,MAAM,CAACxpG,MAAOmtC,EAAY,SAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAI4Q,SAAS0rD,GAAKC,WAAW,cAAcv8D,EAAI+8D,KAAM/8D,EAAoB,iBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,aAAa67D,MAAM,CAACxpG,MAAOmtC,EAAY,SAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIpsB,SAAS0oF,GAAKC,WAAW,cAAcv8D,EAAI+8D,KAAM/8D,EAAoB,iBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,sBAAsB67D,MAAM,CAACxpG,MAAOmtC,EAAoB,iBAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAImrB,iBAAiBmxC,GAAKC,WAAW,sBAAsBv8D,EAAI+8D,KAAM/8D,EAAmB,gBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,YAAY67D,MAAM,CAACxpG,MAAOmtC,EAAW,QAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIlsB,QAAQwoF,GAAKC,WAAW,aAAav8D,EAAI+8D,KAAO/8D,EAAI6sR,YAAsR1sR,EAAG,MAAM,CAAEH,EAAyB,sBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,QAAU,0CAA0C,KAAO,aAAa67D,MAAM,CAACxpG,MAAOmtC,EAAc,WAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIw4C,WAAW8jB,GAAKC,WAAW,gBAAgBv8D,EAAI+8D,MAAM,GAA7gB58D,EAAG,MAAM,CAAEH,EAAyB,sBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,QAAU,0CAA0C,KAAO,eAAe67D,MAAM,CAACxpG,MAAOmtC,EAAc,WAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIw4C,WAAW8jB,GAAKC,WAAW,gBAAgBv8D,EAAI+8D,MAAM,GAA2Q/8D,EAAe,YAAEG,EAAG,MAAM,CAACE,YAAY,sFAAsF,CAACF,EAAG,IAAI,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAI9hC,YAAY,YAAaykC,SAAS3C,EAAIu0G,qBAAqBp0G,EAAG,kBAAkBH,EAAI+yI,GAAG,CAAC1yI,YAAY,gCAAgCG,MAAM,CAAC,MAAQR,EAAIu0G,gBAAgBtnJ,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIg5O,kBAAkB98K,MAAW,kBAAkBl8D,EAAI++L,aAAY,KAAS,GAAG/+L,EAAI+8D,MAAM,MACluE,GAAkB,GCDlB,GAAS,WAAa,IAAI/8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACE,YAAY,8BAA8BhrC,MAAO2qC,EAAe,YAAEQ,MAAM,CAAC,MAAQR,EAAIntC,MAAM,MAAQmtC,EAAI/G,MAAMhsC,GAAG,CAAC,MAAQ+yC,EAAIgzI,cACnP,GAAkB,GCEtB,UACE14K,KAAM,2BACN0sH,WAAY,CACVmsD,oBAAJ,IAEEnyI,MAAO,CACLnuC,MAAO,CACLquC,KAAM/K,QACNgL,UAAU,EACV+jF,SAAS,GAEXjsF,KAAM,CACJiI,KAAMlrC,OACNmrC,UAAU,IAGdG,SAAU,CACRo0K,cACE,MAAO,CACL,mBAAoB3qN,KAAK8H,MAAQ,oBAAsB,6BCtB6R,MCO5V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAImtC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACE,YAAY,kCAAkCg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIqtF,GAAG,YAAYmK,OAAM,IAAO,MAAK,IAAO,CAACx3F,EAAIqtF,GAAG,YAAY,IACrR,GAAkB,GCEtB,UACE/yH,KAAM,sBACN0sH,WAAY,CACV8lM,aAAJ,KCN+W,MCO/W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QCbhC,IACExyT,KAAM,wBACN0sH,WAAY,CACV+lM,yBADJ,GAEIC,oBAFJ,GAGI/jF,gBAAJ,IAEE94M,OACE,MAAO,CACLimC,kBAAkB,EAClBrS,kBAAkB,EAClBuS,kBAAkB,EAClB22P,kBAAkB,EAClB/1Q,iBAAiB,EACjBg2Q,uBAAuB,EACvB7hO,WAAW,EACXz6C,UAAU,EACVh9B,UAAU,EACVu3C,kBAAkB,EAClBr3C,SAAS,EACT0kE,YAAY,EACZ+7D,eAAgB,GAChBs4K,aAAa,IAGjBvrR,SAAU,CACRy9L,cACE,MAAO,CACLlzO,IAAK,EACLsH,IAAK,IACLsgE,SAAU,EACVy9D,MAAO,OACPvB,SAAS,IAGbw9L,iBACE,OAAOxzT,OAAO+zC,QAAQoJ,oBAAsB,IAGhDgzE,MAAO,CACLz+B,UAAUzN,GACRjkF,OAAOysF,QAAQkuD,WAAWjpD,UAAYzN,GAExChtC,SAASgtC,GACPjkF,OAAOysF,QAAQkuD,WAAW1jG,SAAWgtC,GAEvChqE,SAASgqE,GACPjkF,OAAOysF,QAAQkuD,WAAW1gI,SAAWgqE,GAEvCzyB,iBAAiByyB,GACfjkF,OAAOysF,QAAQkuD,WAAWnpF,iBAAmByyB,GAE/C9pE,QAAQ8pE,GACNjkF,OAAOysF,QAAQkuD,WAAWxgI,QAAU8pE,GAEtCpF,WAAWoF,GACTjkF,OAAOysF,QAAQkuD,WAAW97D,WAAaoF,GAEzC22D,eAAe32D,GACbjkF,OAAOysF,QAAQkuD,WAAWC,eAAiB5xG,SAASi7C,EAAU,MAGlEl8C,QAAS,CACPxK,SACE,MAAMzqC,EAAWmrC,eAAelkC,QAChC3I,KAAKqrE,iBAAmBrrE,KAAKoiU,gBAAkB1gU,EAAS6pD,mBACxDvrD,KAAKg5D,iBAAmBh5D,KAAKoiU,gBAAkB1gU,EAASiqD,mBACxD3rD,KAAKmsD,gBAAkBnsD,KAAKoiU,gBAAkB1gU,EAASkqD,kBAEvD5rD,KAAKurE,iBAAmBvrE,KAAKmsD,iBAAmBnT,YAAY,KAAKtQ,aACjE1oC,KAAKkiU,iBAAmBliU,KAAKmsD,iBAAmBvb,SAASwvB,iBAAiBhpD,GAAG,GAC7EpX,KAAKmiU,sBAAwB55N,MAAM45N,sBACnCniU,KAAK8hU,YAAsC,QAAxBv5N,MAAM0+E,cAEzB,MAAM5rF,EAAUzsF,OAAOysF,QAAQkuD,WAC/BvpJ,KAAKsgG,UAAYjF,EAAQiF,UACzBtgG,KAAK6lD,SAAWw1C,EAAQx1C,SACxB7lD,KAAK6oB,SAAWwyE,EAAQxyE,SACxB7oB,KAAKogE,iBAAmBi7B,EAAQj7B,iBAChCpgE,KAAK+oB,QAAUsyE,EAAQtyE,QACvB/oB,KAAKytF,WAAa4N,EAAQ5N,WAC1BztF,KAAKwpJ,eAAiBnuD,EAAQmuD,gBAEhCykI,kBAAkBnmR,GAChB9H,KAAKwpJ,eAAiB1hJ,EACtB8G,OAAOysF,QAAQmuD,eAAiBxpJ,KAAKwpJ,kBC1FsU,MCQjX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIv0G,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACE,YAAY,YAAYg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,6BAA6Bw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,qCAAqCL,EAAI87D,GAAI97D,EAAO,KAAE,SAAS1lC,GAAM,OAAO6lC,EAAG,2BAA2B,CAAC5K,IAAIj7B,EAAKkmC,MAAM,CAAC,KAAOlmC,QAAU,GAAG0lC,EAAIg8D,GAAG,sEACta,GAAkB,GCDlB,GAAS,WAAa,IAAIh8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAQD,EAAa,UAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAOR,EAAI/G,MAAMojE,MAAM,CAACxpG,MAAOmtC,EAAW,QAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAI0lR,QAAQppN,GAAKC,WAAW,aAAav8D,EAAI+8D,MACpQ,GAAkB,GCEtB,UACEziG,KAAM,2BACN0sH,WAAY,CACV+lM,yBAAJ,IAEE/rR,MAAO,CACL1mC,KAAM,CACJ4mC,KAAMlrC,OACNmrC,UAAU,IAGdhR,OACE,MAAO,CACLu1R,SAAS,EACT/iO,WAAW,IAGfrhD,SAAU,CACRJ,OACE,OAAO46H,kBAAkB1kH,IAAIrsD,KAAKuP,OAEpC2+B,OACE,MAAO,GAAGluC,KAAKm2C,KAAKw6H,gBAGxB5xC,MAAO,CACL47L,QAAQ9nO,GACN7yF,KAAKm2C,KAAKuhD,OAAS7E,IAGvBl8C,QAAS,CACPxK,SACE,MAAMgK,EAAOn2C,KAAKm2C,KAClBn2C,KAAK26T,QAAUxkR,EAAKuhD,OACpB13F,KAAK43F,UAAYzhD,EAAKhL,gBCrCwV,MCOpX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QCdhC,IACE57B,KAAM,2BACN0sH,WAAY,CACVomM,yBADJ,GAEIJ,oBAAJ,IAEE1rR,SAAU,CACR8V,MACE,OAAO0kH,kBAAkBplG,cCZqV,MCQpX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI12B,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,8BAA8Bw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,gUAAgU77D,EAAG,MAAM,CAACE,YAAY,+BAA+BpzC,GAAG,CAAC,MAAQ+yC,EAAIqtR,gBAAgB,CAACltR,EAAG,MAAM,CAACG,MAAMN,EAAIstR,sBAAsB,CAAEttR,EAAiB,cAAEG,EAAG,OAAO,CAACE,YAAY,iBAAiBL,EAAI+8D,OAAO58D,EAAG,OAAO,CAACE,YAAY,sCAAsC,CAACL,EAAIg8D,GAAG,6CAA6C77D,EAAG,MAAM,CAACE,YAAY,qBAAqBL,EAAI87D,GAAI97D,EAAe,aAAE,SAASmzJ,GAAM,OAAOhzJ,EAAG,cAAc,CAAC5K,IAAIyK,EAAIutR,SAAWp6H,EAAKp6L,GAAGsnC,YAAY,iBAAiBG,MAAM,CAAC,YAAY2yJ,QAAU,GAAGnzJ,EAAIg8D,GAAG,kLAAkLh8D,EAAIi8D,GAAGj8D,EAAIwtR,YAAY,+EAA+ErtR,EAAG,MAAM,CAACE,YAAY,qBAAqB,CAACF,EAAG,gBAAgB,CAACE,YAAY,iBAAiBG,MAAM,CAAC,QAAU,sCAAsC,CAACR,EAAIg8D,GAAG,sBAAsB77D,EAAG,gBAAgB,CAACE,YAAY,kBAAkB,CAACF,EAAG,QAAQ,CAACE,YAAY,gBAAgBG,MAAM,CAAC,KAAO,OAAO,OAAS,QAAQvzC,GAAG,CAAC,OAAS+yC,EAAI2zJ,gBAAgBxzJ,EAAG,QAAQ,CAACK,MAAM,CAAC,IAAM,SAAS,CAACR,EAAIg8D,GAAG,yBAAyB,GAAGh8D,EAAIg8D,GAAG,6EACjxD,GAAkB,GCDlB,GAAS,WAAa,IAAIh8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,KAAK,CAACH,EAAIg8D,GAAG,SAASh8D,EAAIi8D,GAAGj8D,EAAIytR,SAAS10T,IAAI,OAAOonC,EAAG,OAAO,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAI0tR,gBAAgBvtR,EAAG,OAAO,CAACH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI2tR,UAAU,OAAOxtR,EAAG,OAAO,CAACE,YAAY,kBAAkB,CAACL,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAI4tR,cAAcztR,EAAG,gBAAgB,CAACE,YAAY,8BAA8BC,MAAM,CAAE,2BAA6BN,EAAIm3D,MAAOlqG,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAI4yJ,UAAU,CAAC5yJ,EAAIg8D,GAAG,aAAa,IAC7hB,GAAkB,GCItB,UACE1hG,KAAM,cACN0sH,WAAY,CACVsG,cAAJ,IAEEtsF,MAAO,CACLysR,SAAU,CACRvsR,KAAMzzC,OACN0zC,UAAU,IAGdhR,OACE,MAAO,CACL6qF,SAAU,IAGd15E,SAAU,CACR61D,OACE,OAAOikD,YAAY05C,eAAe/pM,KAAK0iU,SAAS10T,KAElD20T,cACE,IAAK3iU,KAAKosG,KAAM,MAAO,UAGvB,MAAM/W,EAAY,CAACr1F,KAAKosG,KAAKv9F,WAAWC,MAAMwxE,cACpD,wBACA,kCACA,yBACA,yBACA,sBAEYmqB,EAAQ,CAAC,iBACrB,wBACA,mBACA,kBACA,kBACA,cAEM,IAAK,IAAI1iG,EAAQ,EAAGA,EAAQstF,EAAU9xF,OAAQwE,IAAS,CACrD,MAAM9H,EAAM,IAAI+I,QAAQqsF,EAAUttF,IAClC,GAAI9H,EAAImX,GAAG,GAAI,MAAO,GAAGqzF,EAAM1iG,OAAW8H,gBAAgB5P,EAAK,KAIjE,MAAO,gBAET2iU,WAAJ,QACM,MAAME,EAAZ,sEACM,OAAQ9iU,KAAK0iU,SAASvsR,MACpB,KAAKmwJ,GAAiBC,OACpB,MAAO,eAAeu8H,WACxB,KAAKx8H,GAAiBE,QACpB,MAAO,eAAes8H,YACxB,KAAKx8H,GAAiBG,QACpB,MAAO,mBACT,QACE,MAAM,IAAIn5L,MAAM,mCAGtBu1T,YAAJ,QACM,MAAME,EAAZ,8GACM,OAAOA,EACb,gEACA,8BAGEpsR,QAAS,CACPxK,SACEnsC,KAAKiwH,SAAWxvH,KAAKC,OAEvBmnM,OACE,IAAK7nM,KAAKosG,KAAM,OAGhB7xF,MAAM24L,OAIN,MAAM47D,EAAS9uQ,KAAKosG,KACpBikD,YAAYm6C,oBAEZn6C,YAAY82C,mBAAoB,EAChC92C,YAAY02C,gBAAiBn4L,OAAOysF,QAAQmsD,+BAAmCjlJ,EAC/E8tJ,YAAY62C,eAAiBt4L,OAAOksI,YACpCuV,YAAY23C,iBAAiB8mE,GAC7B7rQ,OAAOiqG,OAAO1V,KAAK,iCAAiCx3F,KAAK0iU,SAAS10T,MAClEqiJ,YAAY43C,kBACZ53C,YAAY82C,mBAAoB,EAChC92C,YAAY02C,oBAAiBxkM,EAC7B8tJ,YAAYs4C,mBACZt4C,YAAYjkD,MAAK,MC/FgV,MCQvW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCXhC,IACE78F,KAAM,oBACN0sH,WAAY,CACV8lM,aADJ,GAEIiB,YAFJ,GAGIzgM,cAAJ,IAEEn9F,OACE,MAAO,CAELo9R,SAAU,EACVS,eAAe,IAGnB1sR,SAAU,CACR2sR,YAAa,IAAMx8H,GACnB+7H,WAAY,IAAM,EAAtB,+DAEE1jM,MAAO,CACLkkM,cAAcpwO,GACZjkF,OAAOysF,QAAQmsD,yBAA2B30D,IAG9Cl8C,QAAS,CACPxK,SACEnsC,KAAKwiU,SAAW9/T,OAAOW,OAAOgtJ,YAAY42C,iBAAiB3jM,KAAI+1B,GAAKA,GAAKA,EAAEyhH,cAAat3I,MACxFxD,KAAKijU,cAAgBr0T,OAAOysF,QAAQmsD,0BAEtC+6K,qBACE,MAAO,CACL,0CAA0C,EAC1C,iDAAkDviU,KAAKijU,gBAG3DX,gBACEtiU,KAAKijU,eAAiBjjU,KAAKijU,eAE7Br6H,aAAazmM,GAEX,GAAkC,IAA9BA,EAAME,OAAOusR,MAAMrrR,OAAc,OAErC,MAAMslM,EAAS,IAAIC,WACnBD,EAAOiW,OAAS,WACdzuD,YAAY86C,sBAAsBtC,EAAO1zL,SAE3C0zL,EAAOE,WAAW5mM,EAAME,OAAOusR,MAAM,OCrDkU,MCQ7W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI35O,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACE,YAAY,yBAAyBg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,4BAA4Bw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,qCAAqC,CAAEL,EAAmB,gBAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,iGAAiGh8D,EAAI+8D,KAAK/8D,EAAI87D,GAAI97D,EAAS,OAAE,SAASkuR,GAAa,OAAO/tR,EAAG,2BAA2B,CAAC5K,IAAI24R,EAAY1tR,MAAM,CAAC,MAAQ0tR,EAAc,SAAQ,MACxlB,GAAkB,GCDlB,GAAS,WAAa,IAAIluR,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAQD,EAAc,WAAEG,EAAG,2BAA2B,CAAC9qC,MAAO2qC,EAAe,YAAEQ,MAAM,CAAC,KAAOR,EAAI1lC,MAAM+hG,MAAM,CAACxpG,MAAOmtC,EAAU,OAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIyiD,OAAO6Z,GAAKC,WAAW,YAAYv8D,EAAI+8D,MAC1R,GAAkB,GCEtB,UACEziG,KAAM,2BACN0sH,WAAY,CACV+lM,yBAAJ,IAEE/rR,MAAO,CACLluC,MAAO,CACLouC,KAAM5sC,OACN6sC,UAAU,IAGdhR,OACE,MAAO,CACL+F,YAAY,EACZusD,QAAQ,IAGZnhD,SAAU,CACRosD,QACE,OAAOuuE,kBAAkBnpK,MAAM/H,KAAK+H,QAEtCwH,OACE,MAAO,GAAGvP,KAAK2iG,MAAMpzF,SAEvBo7M,cACE,MAAO,CACL,mBAAoB3qN,KAAK03F,OAAS,oBAAsB,4BAI9DqnC,MAAO,CACLrnC,OAAO7E,GACL7yF,KAAK2iG,MAAMjL,OAAS7E,IAGxBgoC,UACE76H,KAAK03F,OAAS13F,KAAK2iG,MAAMjL,QAE3B/gD,QAAS,CACPxK,SACE,MAAMw2D,EAAQ3iG,KAAK2iG,MACnB3iG,KAAKmrC,WAAaw3D,EAAMx3D,gBC5CsV,MCOpX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QCdhC,IACE57B,KAAM,2BACN0sH,WAAY,CACVgmM,oBADJ,GAEImB,yBAAJ,IAEE7sR,SAAU,CACR1qC,QACE,OAAOqlK,kBAAkBnpK,MAAMxE,QAEjC8/T,kBACE,OAAOnyJ,kBAAkBnpK,MAAM2F,OAAME,IAAMA,EAAEu9B,kBCfiU,MCOpX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAI8J,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,YAAYR,EAAIquR,WAAWphU,GAAG,CAAC,QAAU+yC,EAAIsuR,WAAWj3L,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,mCAAmCw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,YAAY,CAACF,EAAG,sBAAsB,CAACE,YAAY,+BAA+Bg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAACgzC,EAAG,MAAM,CAACE,YAAY,qBAAqB,CAACL,EAAIg8D,GAAG,wBAAwB77D,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIomN,SAAS,SAAS5uH,OAAM,GAAM,CAACjiG,IAAI,WAAWpoC,GAAG,WAAW,MAAO,CAACgzC,EAAG,yBAAyBq3F,OAAM,OAAWx3F,EAAc,WAAEG,EAAG,MAAM,CAACH,EAAIg8D,GAAG,SAAUh8D,EAAIi8D,GAAGj8D,EAAIuuR,WAAWj0T,MAAM,gCAAiC0lC,EAAIi8D,GAAGj8D,EAAIwuR,aAAa,MAAMruR,EAAG,MAAMH,EAAI87D,GAAI97D,EAAW,SAAE,SAASrG,GAAQ,OAAOwG,EAAG,OAAO,CAAC5K,IAAIoE,EAAO0G,YAAY,mBAAmB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGtiE,GAAQ,UAASwG,EAAG,MAAMH,EAAI87D,GAAI97D,EAAU,QAAE,SAASpG,GAAO,OAAOuG,EAAG,OAAO,CAAC5K,IAAIqE,EAAMyG,YAAY,kBAAkB,CAACF,EAAG,iBAAiBH,EAAI+yI,GAAG,CAACvyI,MAAM,CAAC,MAAQR,EAAIyuR,UAAU70R,KAAS,iBAAiBoG,EAAIwyN,gBAAe,KAAS,OAAM,GAAGxyN,EAAI+8D,MAAM,MAChqC,GAAkB,GCDlB,GAAS,WAAa,IAAI/8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyBL,EAAI87D,GAAI97D,EAAc,YAAE,SAASpiC,GAAK,OAAOuiC,EAAG,MAAM,CAAC5K,IAAI33B,EAAI7E,GAAGsnC,YAAY,0DAA0DpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAItqC,OAAOkI,MAAQ,CAACoiC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGr+F,EAAItD,MAAM,UAAS,MACzZ,GAAkB,GCAtB,UACEA,KAAM,sBACNgnC,SAAU,CACRm5K,aACE,OAAOviH,uBAAuBuiH,WAAWpsN,KAAIknC,GAAOkiC,aAAa3jD,QAAQmxB,kBAAkB1P,OAG/FmM,QAAS,CACPhsC,OAAOkI,GACLs6F,uBAAuBw2N,WAAa9wT,EACpC7S,KAAKiyI,QAAQC,aAAc,KCX0V,MCO3X,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QCZhC,IACE3iI,KAAM,yBACN0sH,WAAY,CACVk/L,mBADJ,GAEI5lL,oBAFJ,GAGIquL,oBAHJ,GAIIvmE,eAAJ,IAEEj4N,OACE,MAAO,CACLy+R,WAAY,GACZL,WAAY,KAGhBjtR,SAAU,CACRm5K,aACE,OAAOviH,uBAAuBuiH,YAEhCqjD,gBACE,OAAO5e,mBAAmBhnN,KAAKvqC,QAAOy2B,GAAKA,EAAEyqS,YAAczqS,EAAE8R,aAAY7nC,KAAI+1B,GAAKA,EAAErrB,MAEtFqtP,UAAJ,QACM,OAAN,+FAEIooE,cACE,MAAMv4M,EAAW,GAKjB,OAFIlrH,KAAK+jU,SAAS74M,EAAS1oH,KAAKyQ,SAAS,SAAUjT,KAAK+jU,QAAQxgU,OAAQ,EAAG,GAAGqK,GAAKA,KAC/E5N,KAAKgkU,QAAQ94M,EAAS1oH,KAAKyQ,SAAS,eAAgBjT,KAAKgkU,OAAOzgU,OAAQ,EAAG,GAAGqK,GAAKA,KAChFs9G,EAAS75G,KAAK,UAEvB0yT,UACE,OAAO/jU,KAAKwjU,WAAW50R,QAEzBo1R,SACE,OAAOhkU,KAAKwjU,WAAW30R,OAEzB44N,iBACE,MAAO,CACLphM,KAAM,OACN,YAAa,SACb,cAAe,SACf,kBAAmB,OAIzBw0D,UACE76H,KAAK6jU,WAAa12N,uBAAuBC,gBACzCD,uBAAuBw2N,WAAa3jU,KAAK6jU,YAE3CltR,QAAS,CACPxK,SACEnsC,KAAKwjU,WAAar2N,uBAAuBw2N,YAE3CJ,YACEp2N,uBAAuBC,gBAAkBptG,KAAKwjU,YAEhDF,YACEn2N,uBAAuBC,gBAAkBptG,KAAK6jU,WAC9C7jU,KAAKyqN,aAEPi5G,UAAU70R,GACR,MAAO,CACLsH,KAAM,QACN4G,SAAU,EACVlO,MAAAA,MCxEsX,MCQ9X,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIoG,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACE,YAAY,yBAAyBg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,6BAA6Bw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,qCAAqC,CAACF,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,yBAAyB67D,MAAM,CAACxpG,MAAOmtC,EAAa,UAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIqtN,UAAU/wJ,GAAKC,WAAW,eAAep8D,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,gCAAgC67D,MAAM,CAACxpG,MAAOmtC,EAA2B,wBAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIyzG,wBAAwBn3C,GAAKC,WAAW,6BAA6Bp8D,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,kCAAkC67D,MAAM,CAACxpG,MAAOmtC,EAAmB,gBAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIo0G,gBAAgB93C,GAAKC,WAAW,qBAAqBp8D,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,wBAAwB67D,MAAM,CAACxpG,MAAOmtC,EAAgB,aAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIi0G,aAAa33C,GAAKC,WAAW,kBAAkBp8D,EAAG,SAAS,CAACE,YAAY,4CAA4CpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIgvR,aAAa,CAAChvR,EAAIg8D,GAAG,oBAAoBh8D,EAAIi8D,GAAGj8D,EAAIivR,YAAY,OAAO9uR,EAAG,2BAA2B,CAAC9qC,MAAO2qC,EAAIkvR,gBAAiB1uR,MAAM,CAAC,KAAO,2BAA2B67D,MAAM,CAACxpG,MAAOmtC,EAA0B,uBAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIq0G,uBAAuB/3C,GAAKC,WAAW,4BAA4Bp8D,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,gCAAgC67D,MAAM,CAACxpG,MAAOmtC,EAAsB,mBAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAI0zG,mBAAmBp3C,GAAKC,WAAW,wBAAwBp8D,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,kCAAkC67D,MAAM,CAACxpG,MAAOmtC,EAAmB,gBAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAI2zG,gBAAgBr3C,GAAKC,WAAW,qBAAqBp8D,EAAG,sBAAsB,CAACE,YAAY,+BAA+Bg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAACgzC,EAAG,MAAM,CAACE,YAAY,qBAAqB,CAACL,EAAIg8D,GAAG,gCAAgC77D,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAImvR,WAAW,SAAS33L,OAAM,GAAM,CAACjiG,IAAI,WAAWpoC,GAAG,WAAW,MAAO,CAACgzC,EAAG,6BAA6Bq3F,OAAM,QAAW,GAAGr3F,EAAG,uBAAuB,IAC/uE,GAAkB,GCDlB,GAAS,WAAa,IAAIH,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,IAAI,CAACH,EAAIg8D,GAAG,6BAA6B77D,EAAG,sBAAsB,CAACE,YAAY,+BAA+BG,MAAM,CAAC,GAAK,UAAU,IAAM,YAAY67D,MAAM,CAACxpG,MAAOmtC,EAAW,QAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIl1C,QAAQwxG,GAAKC,WAAW,aAAap8D,EAAG,MAAOH,EAAiB,cAAEG,EAAG,MAAM,CAACH,EAAIg8D,GAAG,mCAAmC77D,EAAG,gBAAgB,CAACE,YAAY,+BAA+BC,MAAM,CAAE,2BAA6BN,EAAIl1C,SAAUmC,GAAG,CAAC,MAAQ+yC,EAAIovR,WAAW,CAACpvR,EAAIg8D,GAAG,iBAAiB77D,EAAG,gBAAgB,CAACE,YAAY,+BAA+BC,MAAM,CAAE,2BAA6BN,EAAIl1C,SAAUmC,GAAG,CAAC,MAAQ+yC,EAAIqvR,cAAc,CAACrvR,EAAIg8D,GAAG,iBAAiB77D,EAAG,MAAMA,EAAG,IAAI,CAACH,EAAIg8D,GAAG,2DAA2D77D,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,iBAAiB77D,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,oBAAoBL,EAAI87D,GAAI97D,EAAiB,eAAE,SAASkB,EAAKpuC,GAAO,OAAOqtC,EAAG,MAAM,CAAC5K,IAAI2L,EAAKZ,MAAMN,EAAIsvR,UAAUx8T,GAAO7F,GAAG,CAAC,MAAQ,SAASivG,GAAQl8D,EAAIuvR,cAAgBz8T,KAAS,CAACqtC,EAAG,iBAAiBH,EAAI+yI,GAAG,CAACp1E,WAAW,CAAC,CAACrjG,KAAK,UAAUsjG,QAAQ,YAAY/qG,MAAOquC,EAAKjrC,aAAcsmG,WAAW,sBAAsB/7D,MAAM,CAAC,MAAQR,EAAIyuR,UAAUvtR,KAAQ,iBAAiBlB,EAAIwyN,gBAAe,KAAS,MAAK,GAAGryN,EAAG,+BAA+B,CAAC5K,IAAIyK,EAAIuvR,cAAgBvvR,EAAIl1C,QAAUk1C,EAAIwvR,eAAehvR,MAAM,CAAC,KAAOR,EAAI89N,cAAc99N,EAAIuvR,kBAAkBvvR,EAAIg8D,GAAG,uHAAuH,GAAG77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,sJAAsJ77D,EAAG,MAAMA,EAAG,MAAOH,EAAmB,gBAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,qHAAqH77D,EAAG,OAAO,CAACH,EAAIg8D,GAAG,sEAAsE77D,EAAG,gBAAgB,CAACE,YAAY,+BAA+BpzC,GAAG,CAAC,MAAQ+yC,EAAIyvR,kBAAkB,CAACzvR,EAAIg8D,GAAG,6CAA6C,IAChrE,GAAkB,GCDlB,GAAS,WAAa,IAAIh8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,+BAA+B,EAAmB,IAAjBL,EAAI0vR,QAAgBvvR,EAAG,OAAO,CAACE,YAAY,UAAU,CAACL,EAAIg8D,GAAG,2BAA2Bh8D,EAAIi8D,GAAGj8D,EAAI1lC,MAAM,cAAc0lC,EAAI+8D,KAAmB,cAAb/8D,EAAIkB,KAAsBf,EAAG,MAAM,CAACH,EAAIg8D,GAAG,2DAA2D77D,EAAG,kCAAkC,CAACK,MAAM,CAAC,KAAOR,EAAIkB,KAAK,aAAY,EAAK,QAAUlB,EAAI8uR,QAAQ,WAAW9uR,EAAI0vR,WAAWvvR,EAAG,kCAAkC,CAACK,MAAM,CAAC,KAAOR,EAAIkB,KAAK,aAAY,EAAM,QAAUlB,EAAI+uR,OAAO,WAAW/uR,EAAI0vR,YAAY,IACvnB,GAAkB,GCDlB,GAAS,WAAa,IAAI1vR,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAEH,EAAIomD,QAAQ93F,OAAS,EAAG6xC,EAAG,MAAM,CAACG,MAAMN,EAAIs9F,wBAAwB,CAACn9F,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,MAAM,CAAC5K,IAAI,UAAYyK,EAAI2vR,YAAYrvR,MAAMN,EAAI4vR,2BAA2Bv6T,MAAO2qC,EAAI6vR,SAAS7vR,EAAI8vR,eAAgB7iU,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAItqC,YAAOpI,MAAc,CAAC0yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI+vR,WAAW/vR,EAAI8vR,gBAAgB,SAAS3vR,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACG,MAAMN,EAAIi1K,YAAYhoN,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIgwR,aAAa,MAAM,CAAChwR,EAAIg8D,GAAG,SAAS77D,EAAG,MAAM,CAACG,MAAMN,EAAIm1K,aAAaloN,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIgwR,YAAY,MAAM,CAAChwR,EAAIg8D,GAAG,SAAS77D,EAAG,MAAM,CAACE,YAAY,mBAAmBhrC,MAAO2qC,EAAIiwR,eAAgBjwR,EAAI87D,GAAI97D,EAAW,SAAE,SAASpiC,GAAK,OAAOuiC,EAAG,MAAM,CAAC5K,IAAI33B,EAAI,GAAKA,EAAI,IAAI,CAACuiC,EAAG,MAAM,CAACE,YAAY,gBAAgBL,EAAI87D,GAAG,GAAM,SAASo0N,GAAc,OAAO/vR,EAAG,MAAM,CAAC5K,IAAI26R,EAAa5vR,MAAMN,EAAImwR,kBAAkBD,GAAc76T,MAAO2qC,EAAI6vR,SAASK,GAAejjU,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAItqC,OAAOw6T,MAAiB,CAAClwR,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI+vR,WAAWG,IAAe,UAAS,QAAO,OAAO/vR,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACL,EAAIg8D,GAAG,kDAAkDh8D,EAAIi8D,GAAGj8D,EAAIowR,YAAY,YAClxC,GAAkB,GCAtB,UACE91T,KAAM,kCACN0mC,MAAO,CACLE,KAAM,CACJA,KAAMlrC,OACNmrC,UAAU,GAEZkvR,SAAU,CACRnvR,KAAM/K,QACNgL,UAAU,GAEZilD,QAAS,CACPllD,KAAMxuC,MACNyuC,UAAU,GAEZuuR,QAAS,CACPxuR,KAAM5sC,OACN6sC,UAAU,EACV+jF,SAAU,IAGd/0F,OACE,MAAO,CACLwlB,UAAU,EACV2oD,SAAU,GACVgyN,cAAe,EACf7tE,aAAc,GAEdktE,aAAa,IAGjBruR,SAAU,CACRivR,gBACE,OAAyB,IAAlBxlU,KAAK2kU,SAEdU,aACE,OAAOrlU,KAAKslU,SAAW,SAAW,SAEpChmE,aACE,OAAOnL,oBAET4wE,gBACE,GAAI/kU,KAAK03P,aAAc,OAAO13P,KAAK03P,aACnC,MAAMr3P,EAASL,KAAKs/P,WAAWt/P,KAAKm2C,MAC9Bx7B,EAAO,GAAG3a,KAAKwlU,cAAgB,UAAY,YAAYxlU,KAAKqlU,WAAWn6T,eAC7E,OAAOlL,KAAKslU,SAClB,YACA,aAEIG,YACE,OAAOzlU,KAAKq7F,QAAQ93F,OAASvD,KAAK0lU,YAGpCA,aACE,OAAO,KAGX7qM,UACE76H,KAAK2lU,kBAEPhvR,QAAS,CACPxK,SACE,GAAInsC,KAAKwlU,cAAe,CACtB,MAAMvyQ,EAAQjS,OAAOq0M,SAASr1P,KAAK2kU,SACnC3kU,KAAK4qD,UAAYqI,EAAMizI,cAEvBlmM,KAAK4qD,SAAWh8C,OAAOma,QAAQsmB,OAAOuwG,UAAU3+F,OAEhC,YAAdjhD,KAAKm2C,MAAuBn2C,KAAKslU,WAAUtlU,KAAK03P,aAAevqJ,uBAAuBuqJ,cAC1F13P,KAAK4kU,YAAch2T,OAAOysF,QAAQ4tD,SAEpCt+I,OAAO+sF,GACL,GAAK13F,KAAKwlU,eAAkBxlU,KAAK4qD,SAAjC,CACA,GAAI5qD,KAAKwlU,cAAe,CACtB,MAAMvyQ,EAAQjS,OAAOq0M,SAASr1P,KAAK2kU,SACnC1xQ,EAAMjzD,KAAKqlU,YAAc3tO,EACpB13F,KAAKihD,SAAQgS,EAAMizI,cAAW3jM,QAEnCqM,OAAOma,QAAQsmB,OAAOuwG,UAAU,GAAG5/I,KAAKqlU,iBAAiBrlU,KAAKm2C,MAAQuhD,EAExE13F,KAAK2lU,iBACL5jU,SAASe,SAASY,WAAW4B,uBAE/BqgU,iBACE,GAAI3lU,KAAKwlU,cAAe,CACtB,MAAMvyQ,EAAQjS,OAAOq0M,SAASr1P,KAAK2kU,SACnC3kU,KAAKuzG,SAAWtgD,EAAMjzD,KAAKqlU,iBAE3BrlU,KAAKuzG,SAAWvzG,KAAKslU,SAC7B,gDACA,6CAGI/yL,uBACE,MAAO,CACL,iBAAiB,EACjB,sBAAuBvyI,KAAK4qD,WAGhCi6Q,2BACE,MAAMe,EAAc5lU,KAAKwlU,mBAAgBjjU,EAAYvC,KAAK+kU,cAC1D,MAAO,CACL,WAAY/kU,KAAKslU,SACjB,WAAYtlU,KAAKslU,SACjB,cAAetlU,KAAK4qD,SACpB,qBAAsB5qD,KAAKslU,UAAYM,IAAgB5lU,KAAKuzG,WAGhE6xN,kBAAkB1tO,GAChB,MAAO,CACL,WAAY13F,KAAKslU,SACjB,WAAYtlU,KAAKslU,SACjB,cAAetlU,KAAK4qD,SACpB,qBAAsB5qD,KAAKslU,UAAY5tO,IAAW13F,KAAKuzG,WAG3DuxN,SAASj2R,GACP,GAAI7uC,KAAKslU,WAAaz2R,EAAO,MAAO,GACpC,MAAMg3R,EAAa14N,uBAAuBkrJ,cAAcxpN,GACxD,MAAO,CACL4+C,WAAYo4O,EAAWxxE,GACvBxlN,MAAO7uC,KAAK8lU,SAASD,EAAWxxE,IAChC,aAAc,qBAAqBwxE,EAAWp+L,WAGlDy9L,cACE,MAAO,CACLj9G,UAAW,aAAa,EAAI,IAAMjoN,KAAKulU,oBACvC,sBAAuB,SAG3Br7G,YACE,MAAO,CACL,yBAAyB,EACzB,oBAA4C,IAAvBlqN,KAAKulU,gBAAwBvlU,KAAKylU,YAG3Dr7G,aACE,MAAO,CACL,0BAA0B,EAC1B,oBAAqBpqN,KAAKulU,gBAAkBvlU,KAAKq7F,QAAQ93F,OAASvD,KAAK0lU,aAAe1lU,KAAKylU,YAG/FR,YAAYjiS,GACLhjC,KAAKylU,YACVzlU,KAAKulU,cAAgB1kU,KAAK0H,MAAMvI,KAAKulU,cAAgBviS,EAAK,EAAGhjC,KAAKq7F,QAAQ93F,OAASvD,KAAK0lU,cAE1FV,WAAWttO,GACT,OAAI13F,KAAKslU,SAAiB5tO,EACnB,IAAb,8DAEIouO,SAASj3R,GACP,MAAiB,UAAVA,EAAoB,QAAU,WCzJ4V,MCQvY,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCfhC,IACEt/B,KAAM,+BACN0sH,WAAY,CACV8pM,gCAAJ,IAEE9vR,MAAO,CACLE,KAAM,CACJA,KAAMlrC,OACNmrC,UAAU,GAEZuuR,QAAS,CACPxuR,KAAM5sC,OACN6sC,UAAU,EACV+jF,SAAU,IAGd5jF,SAAU,CACRhnC,OACE,OAAOvP,KAAKm2C,KAAKjrC,cAEnB64T,UACE,OAAO52N,uBAAuB64N,kBAEhChC,SACE,OAAO72N,uBAAuB84N,mBC5BgW,MCQpY,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCbhC,IACE12T,KAAM,qBACN0sH,WAAY,CACViqM,6BADJ,GAEI3jM,cAFJ,GAGI6lD,oBAHJ,GAIIi1E,eAAJ,IAEEj4N,OACE,MAAO,CACLrlC,SAAS,EAET0kU,gBAAgB,EAChBD,cAAe,IAGnBjuR,SAAU,CACRw8N,gBAGE,MAAMozD,EAAehyE,mBAAmBhnN,KAAKvqC,QAAOy2B,GAAKA,EAAE8V,eAAc7rC,KAAI+1B,GAAKA,EAAErrB,KAAIrC,MAAM,GACxFy6T,EAAa,CAAC,QAAS,WAAY,cAAe,OAAQ,YAChE,OAAOA,EAAWv/P,OAAOs/P,IAE3B1+D,iBACE,MAAO,CACLphM,KAAM,SACN,YAAa,SACb,cAAe,SACf,kBAAmB,KAGvBggQ,gBACE,OAAOl5N,uBAAuB25J,aAAavjQ,OAAS,GAEtD+iU,kBACE,OAAOn5N,uBAAuBupC,eAAenzI,OAAS,IAG1Dw7H,MAAO,CACLh/H,QAAQ8yF,GACNjkF,OAAOma,QAAQsmB,OAAOuwG,UAAU3+F,OAAS4xC,EACzC9wF,SAASe,SAASY,WAAW4B,uBAGjCqxC,QAAS,CACPxK,SACEnsC,KAAKD,QAAU6O,OAAOma,QAAQsmB,OAAOuwG,UAAU3+F,OAC/CjhD,KAAKykU,gBAAiB,GAExBJ,WACE,MAAMzkL,EAAYhxI,OAAOma,QAAQsmB,OAAOuwG,UACxCA,EAAUG,UAAY,GACtBH,EAAUI,SAAW,GACrBhgJ,KAAKykU,gBAAiB,EACtB1iU,SAASe,SAASY,WAAW4B,sBAE/Bg/T,cACE,MAAM1kL,EAAYhxI,OAAOma,QAAQsmB,OAAOuwG,UAClC2mL,EAAWvmU,KAAK+yQ,cAAc/yQ,KAAKwkU,eACzC5kL,EAAUG,UAAUwmL,QAAYhkU,EAChCq9I,EAAUI,SAASumL,QAAYhkU,EAC/BvC,KAAKykU,gBAAiB,EACtB1iU,SAASe,SAASY,WAAW4B,sBAE/Bo+T,UAAUvtR,GACR,IAAI8qL,EAAW,QAIf,MAHa,YAAT9qL,IAAoB8qL,EAAW,WACtB,WAAT9qL,IAAmB8qL,EAAW,UACrB,YAAT9qL,IAAoB8qL,EAAW,WAC5B,CAML9qL,KAAM8qL,EACNlkL,SAAU,EACVmpJ,SAAU/vJ,IAGdouR,UAAUx8T,GACR,MAAO,CACL,iBAAiB,EACjB,wBAAyB/H,KAAKD,QAC9B,iBAAkBC,KAAKwkU,gBAAkBz8T,EACzC,eAAgB/H,KAAKwkU,gBAAkBz8T,IAG3C28T,kBACE,IAAK,MAAMzxQ,KAASjS,OAAO4G,UACpBqL,EAAMuzQ,gBAAevzQ,EAAMizI,cAAW3jM,GAE7CvC,KAAKykU,gBAAiB,EACtB1iU,SAASe,SAASY,WAAW4B,wBCpGuV,MCQ1X,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCXhC,IACEiK,KAAM,2BACN0sH,WAAY,CACVsZ,oBADJ,GAEIysL,yBAFJ,GAGIC,oBAHJ,GAIIwE,wBAJJ,GAKIC,mBAAJ,IAEEthS,OACE,MAAO,CACLk9N,WAAW,EACX55G,yBAAyB,EACzBW,iBAAiB,EACjBJ,QAAS,EACTpS,cAAe,EACfyS,wBAAwB,EACxBJ,cAAc,EACdP,oBAAoB,EACpBC,iBAAiB,IAGrBryG,SAAU,CACR6tR,YACE,OAAOxtL,GAAUzE,OAAOnyI,KAAK62I,gBAE/BqtL,aACE,OAAQlkU,KAAKipJ,SACX,KAAKjhI,iBAAiBC,KACpB,MAAO,OACT,KAAKD,iBAAiBE,MACpB,MAAO,QACT,KAAKF,iBAAiBG,KACpB,MAAO,OACT,QACE,MAAM,IAAI7a,MAAM,oCAIxByxH,MAAO,CACLujI,UAAUzvK,GACRjkF,OAAOysF,QAAQotD,iBAAmB51D,EAClC9wF,SAASe,SAASY,WAAW4B,sBAE/BojJ,wBAAwB71D,GACtBjkF,OAAOysF,QAAQqtD,wBAA0B71D,EACzC9wF,SAASe,SAASY,WAAW4B,sBAE/B+jJ,gBAAgBx2D,GACdjkF,OAAOysF,QAAQmoC,aAAa6lB,gBAAkBx2D,EAC9C9wF,SAASe,SAASY,WAAW4B,sBAE/BgkJ,uBAAuBz2D,GACrBjkF,OAAOysF,QAAQmoC,aAAa8lB,uBAAyBz2D,EACrD9wF,SAASe,SAASY,WAAW4B,sBAE/B4jJ,aAAar2D,GACXjkF,OAAOysF,QAAQ6tD,aAAer2D,EAC9B9wF,SAASe,SAASY,WAAW4B,sBAE/BqjJ,mBAAmB91D,GACjBjkF,OAAOysF,QAAQstD,mBAAqB91D,EACpC9wF,SAASe,SAASY,WAAW4B,sBAE/BsjJ,gBAAgB/1D,GACdjkF,OAAOysF,QAAQutD,gBAAkB/1D,EACjC9wF,SAASe,SAASY,WAAW4B,uBAGjCqxC,QAAS,CACPxK,SACE,MAAMkvD,EAAUzsF,OAAOysF,QACvBr7F,KAAKsiQ,UAAYjnK,EAAQotD,iBACzBzoJ,KAAK0oJ,wBAA0BrtD,EAAQqtD,wBACvC1oJ,KAAKqpJ,gBAAkBhuD,EAAQmoC,aAAa6lB,gBAC5CrpJ,KAAKipJ,QAAUr6I,OAAOysF,QAAQ4tD,QAC9BjpJ,KAAK62I,cAAgBx7C,EAAQmoC,aAAaqT,cAC1C72I,KAAKspJ,uBAAyBjuD,EAAQmoC,aAAa8lB,uBACnDtpJ,KAAKkpJ,aAAe7tD,EAAQ6tD,aAC5BlpJ,KAAK2oJ,mBAAqBttD,EAAQstD,mBAClC3oJ,KAAK4oJ,gBAAkBvtD,EAAQutD,iBAEjCu7K,gBACE,OAA2B,IAAvBnkU,KAAK62I,cAA4B,KAC9B,CACL,mBAAoB,0BAGxBotL,UACEr1T,OAAOysF,QAAQ4tD,SAAWr6I,OAAOysF,QAAQ4tD,QAAU,GAAKvmJ,OAAOC,KAAKqlB,kBAAkBzkB,OACtFxB,SAASe,SAASY,WAAW4B,wBClG6V,MCQhY,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI2vC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACE,YAAY,YAAYg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,2BAA2Bw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACL,EAAIg8D,GAAG,oDAAoD77D,EAAG,MAAMH,EAAIg8D,GAAG,uEAAuE77D,EAAG,MAAMH,EAAIg8D,GAAG,iIAAiI77D,EAAG,MAAOH,EAAe,YAAEG,EAAG,MAAM,CAACH,EAAIg8D,GAAG,uEAAuEh8D,EAAI+8D,KAAM/8D,EAAc,WAAEG,EAAG,MAAM,CAACA,EAAG,MAAMA,EAAG,IAAI,CAACH,EAAIg8D,GAAG,mCAAmC77D,EAAG,MAAMH,EAAIg8D,GAAG,uDAAuDh8D,EAAI+8D,KAAK/8D,EAAI87D,GAAI97D,EAAQ,MAAE,SAASsqD,EAAIx3F,GAAO,OAAOqtC,EAAG,iBAAiB,CAAC5K,IAAIziC,EAAMutC,YAAY,6BAA6BG,MAAM,CAAC,IAAM8pD,EAAI,kBAAkBtqD,EAAIk6L,aAAel6L,EAAI0xR,mBAAkB,MACviC,GAAkB,GCDlB,GAAS,WAAa,IAAI1xR,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAQD,EAAa,UAAEG,EAAG,MAAM,CAACG,MAAMN,EAAI2xR,SAAS1kU,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAGA,EAAO9uG,SAAW8uG,EAAO01N,cAAuB,KAAc5xR,EAAI6xR,iBAAiB9xT,MAAM,KAAMH,cAAc,CAACogC,EAAI87D,GAAI97D,EAAmB,iBAAE,SAASmuI,EAAO5hL,GAAG,OAAO4zC,EAAG,sBAAsB,CAAC5K,IAAIhpC,EAAEi0C,MAAM,CAAC,OAAS2tI,EAAO,IAAMnuI,EAAIsqD,IAAI,iBAAiBtqD,EAAI8xR,oBAAmB3xR,EAAG,MAAM,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,UAAUsjG,QAAQ,YAAY/qG,MAAOmtC,EAA8B,2BAAEu8D,WAAW,+BAA+Bj8D,MAAMN,EAAI+xR,yBAAyB9kU,GAAG,CAAC,MAAQ+yC,EAAI6xR,qBAAqB,GAAG7xR,EAAI+8D,MACrpB,GAAkB,GCDlB,GAAS,WAAa,IAAI/8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,UAAUsjG,QAAQ,YAAY/qG,MAAOmtC,EAAI85D,QAAU95D,EAAIyzK,gBAAkB,qCAAuC,GAAK,gCAAiCl3G,WAAW,4GAA4Gj8D,MAAMN,EAAImtF,YAAYlgI,GAAG,CAAC,MAAQ+yC,EAAI6xR,mBAAmB,CAAC1xR,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAAEL,EAAc,WAAEG,EAAG,MAAM,CAACE,YAAY,mCAAmCK,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAImuI,OAAOx0I,WAAWqG,EAAI+8D,KAAK58D,EAAG,MAAM,CAACE,YAAY,oCAAoC,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAImuI,OAAO7zK,MAAM,YACjtB,GAAkB,GCAtB,UACEA,KAAM,sBACN0mC,MAAO,CACLmtI,OAAQ,CACNjtI,KAAMzzC,OACN0zC,UAAU,GAEZmpD,IAAK,CACHppD,KAAMzzC,OACN0zC,UAAU,GAEZ2wR,cAAe,CACb5wR,KAAM/K,QACNgL,UAAU,IAGdhR,OACE,MAAO,CACL2pE,SAAS,EACTw3B,QAAQ,IAGZhwF,SAAU,CACRmyK,kBACE,OAAO1oN,KAAKu/F,IAAIvxF,KAAOkjH,KAAKvoH,QAAQqF,IAC1C,iDAEIo0H,cACE,MAAO,CACL,2BAA2B,EAC3B,+BAAgCpiI,KAAKumI,OACrC,gCAAiCvmI,KAAKumI,OACtC,uCAAwCvmI,KAAK+uG,SAAW/uG,KAAK0oN,gBAC7D,CAAC,4BAA4B1oN,KAAKu/F,IAAI/0D,QAASxqC,KAAK0oN,kBAGxDu+G,aACE,MAAiC,UAA1BjnU,KAAK68H,WAAW0qB,SAG3B5wG,QAAS,CACPxK,SACEnsC,KAAK+uG,QAAU/uG,KAAKojL,OAAOr0E,QAC3B/uG,KAAKumI,OAASvmI,KAAKojL,OAAOlG,UAAYl9K,KAAK+uG,SAE7C+3N,mBACO9mU,KAAK+mU,eACV/mU,KAAKojL,OAAO0jJ,sBChDyW,MCQ3X,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QChBhC,IACEv3T,KAAM,iBACN0sH,WAAY,CACVirM,oBAAJ,IAEEjxR,MAAO,CACLspD,IAAK,CACHppD,KAAMzzC,OACN0zC,UAAU,GAEZ2wR,cAAe,CACb5wR,KAAM/K,QACNgL,UAAU,IAGdhR,OACE,MAAO,CACLwyD,WAAW,EACXuvO,WAAW,EACXjqJ,UAAU,EACVkqJ,gBAAiB,KAGrB7wR,SAAU,CACR2zI,UACE,OAAOlqL,KAAKu/F,IAAIhwF,MAElBy/F,UACE,OAAOhvG,KAAKu/F,IAAIyP,SAElB65G,eACE,OAAO7oN,KAAKu/F,IAAIvxF,KAAOkjH,KAAKvoH,QAAQqF,IAEtCq5T,gBACE,OAAQrnU,KAAKmnU,WAAannU,KAAK6oN,cAEjC+9G,WACE,MAAO,CACL,qCAAqC,EACrC,iCAAiC,EACjC,qCAAsC5mU,KAAKk9K,SAC3C,mCAAoCl9K,KAAKk9K,SACzC,2CAA4Cl9K,KAAKqnU,gBAGrDL,2BACE,MAAO,CACL,oBAAoB,EACpB,KAAO,EACP,YAAahnU,KAAKk9K,SAClB,WAAYl9K,KAAKk9K,SACjB,iBAAkBl9K,KAAKqnU,gBAG3BC,6BACE,OAAItnU,KAAKk9K,SAAiB,sBACrBl9K,KAAKqnU,cACH,4BADyB,sBAIpC1wR,QAAS,CACPxK,SACE,MAAMozD,EAAMv/F,KAAKu/F,IACjBv/F,KAAK43F,UAAY2H,EAAIp0D,WACrBnrC,KAAKmnU,UAAY5nO,EAAIwP,QACrB/uG,KAAKk9K,SAAW39E,EAAI29E,UAAYl9K,KAAKmnU,UACrCnnU,KAAKonU,gBAAkBpnU,KAAKgvG,QAAQpsG,QAAO4T,GAAOA,EAAI20B,cAExD27R,mBACE,GAAK9mU,KAAK+mU,cAEV,GAAI/mU,KAAKu/F,IAAI29E,UAAYl9K,KAAKonU,gBAAgB15T,OAAM2rB,GAAKA,EAAE6jJ,WAAW,CACpE,IAAK,MAAMkG,KAAUpjL,KAAKonU,gBACxBhkJ,EAAO0jJ,mBAET9mU,KAAKu/F,IAAIgoO,iBAETvnU,KAAKu/F,IAAIunO,sBChFqW,MCQtX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCfhC,IACEv3T,KAAM,kBACN0sH,WAAY,CACVurM,eADJ,GAEIvF,oBAAJ,IAEE78R,OACE,MAAO,CACL+pM,YAAY,EACZw3F,aAAa,IAGjBpwR,SAAU,CACRkkC,KAAM,IAAMy2C,KAAKy8C,iBAEnBh3H,QAAS,CACPxK,SACEnsC,KAAKmvO,WAAa19L,SAASC,UAC3B1xC,KAAK2mU,YAAc90R,MAAMu8B,sBCtBwV,MCQvX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIn5B,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,mBAAmBw7B,OAAM,MAAS,CAACr3F,EAAG,OAAO,CAACE,YAAY,mCAAmC,CAACF,EAAG,MAAM,CAACE,YAAY,2BAA2B,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,OAAO,CAACE,YAAY,uDAAuD,CAACL,EAAIg8D,GAAG,qBAAqB77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,WAAW77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,OAAOh8D,EAAIg8D,GAAG,KAAK77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,WAAW77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,SAAS77D,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,OAAO,CAACE,YAAY,uDAAuD,CAACL,EAAIg8D,GAAG,uBAAuB77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,OAAOh8D,EAAIg8D,GAAG,KAAK77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,SAASh8D,EAAI87D,GAAI97D,EAAe,aAAE,SAASltC,GAAO,OAAOqtC,EAAG,MAAM,CAAC5K,IAAIziC,GAAO,CAAEktC,EAAIw8B,QAAQ1pE,EAAQ,GAAIqtC,EAAG,OAAO,CAACE,YAAY,uBAAuB,CAACF,EAAG,OAAO,CAACE,YAAY,uDAAuD,CAACL,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAIwyR,cAAc1/T,EAAQ,OAAOktC,EAAI87D,GAAI97D,EAAIyyR,aAAa3/T,EAAQ,IAAI,SAASyiC,EAAIhpC,GAAG,OAAO4zC,EAAG,MAAM,CAAC5K,IAAIhpC,GAAG,CAACyzC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAG1mE,GAAK,WAAU,GAAGyK,EAAI+8D,WAAU,GAAG58D,EAAG,MAAM,CAACE,YAAY,0DAA0D,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,OAAO,CAACE,YAAY,uDAAuD,CAACL,EAAIg8D,GAAG,kBAAkB77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,aAAa77D,EAAG,OAAO,CAACE,YAAY,sCAAsC,CAACL,EAAIg8D,GAAG,8HAA8H77D,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI0yR,kBAAkB,OAAOvyR,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,OAAO,CAACE,YAAY,uDAAuD,CAACL,EAAIg8D,GAAG,wBAAwB77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,WAAW77D,EAAG,OAAO,CAACE,YAAY,sCAAsC,CAACL,EAAIg8D,GAAG,0IAA0I77D,EAAG,MAAMH,EAAIg8D,GAAG,oJAAoJ77D,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,OAAO,CAACE,YAAY,uDAAuD,CAACL,EAAIg8D,GAAG,kBAAkB77D,EAAG,MAAM,CAACA,EAAG,MAAM,CAACH,EAAIg8D,GAAG,OAAO77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,OAAO77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,OAAO77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,WAAW77D,EAAG,OAAO,CAACE,YAAY,sCAAsC,CAACL,EAAIg8D,GAAG,wLAAwL77D,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,OAAO,CAACE,YAAY,uDAAuD,CAACL,EAAIg8D,GAAG,sBAAsB77D,EAAG,OAAO,CAACE,YAAY,sCAAsC,CAACL,EAAIg8D,GAAG,iIAAiI77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,WAAWh8D,EAAIg8D,GAAG,8HAA8H77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,SAASh8D,EAAIg8D,GAAG,oCAAqCh8D,EAAc,WAAE,CAACG,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,OAAO,CAACE,YAAY,uDAAuD,CAACL,EAAIg8D,GAAG,iBAAiB77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,OAAO77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,OAAO77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,SAAS77D,EAAG,OAAO,CAACE,YAAY,sCAAsC,CAACL,EAAIg8D,GAAG,gCAAgC77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,UAAUh8D,EAAIg8D,GAAG,sBAAsB77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,OAAOh8D,EAAIg8D,GAAG,QAAQ77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,OAAOh8D,EAAIg8D,GAAG,mCAAmC77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,UAAU77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,OAAOh8D,EAAIg8D,GAAG,gCAAgC77D,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,OAAO,CAACE,YAAY,uDAAuD,CAACL,EAAIg8D,GAAG,gBAAgB77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,WAAW77D,EAAG,OAAO,CAACE,YAAY,sCAAsC,CAACL,EAAIg8D,GAAG,wCAAwC77D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,SAASh8D,EAAIg8D,GAAG,SAASh8D,EAAI+8D,MAAM,QACtvI,GAAkB,GCEtB,UACEziG,KAAM,eACN0sH,WAAY,CACV8lM,aAAJ,IAEE38R,OACE,MAAO,CACLwiS,eAAgB,GAChBn2P,QAAS,GACTo2P,mBAAmB,EACnBC,kBAAkB,EAClBC,YAAY,IAGhBxxR,SAAU,CACRoxR,mBACE,MAAMK,EAAoB,GACtBhoU,KAAK6nU,oBACPG,EAAkBxlU,KAAK,4DACvBwlU,EAAkBxlU,KAAK,6BAErBxC,KAAK8nU,kBACPE,EAAkBxlU,KAAK,mBAEzB,MAAMylU,EAAe70T,gBAAgB40T,GACrC,MAAN,KAAa,EACb,GACA,4BAEIE,cACE,OAAO59J,UAAU/mK,QAEnBkkU,gBACE,OAAOn9J,UAAUhnK,KAAIsK,GAAKA,EAAE2B,QAE9Bm4T,eACE,OAAOp9J,UAAUhnK,KAAIsK,GAAKA,EAAEjL,KAAKW,KAAIknC,GAAOxqC,KAAKgP,OAAOw7B,SAG5DqwF,UACE,IAAK,IAAIr5H,EAAI,EAAGA,EAAIxB,KAAKkoU,YAAa1mU,IAAK,CACzC,MAAMiwE,EAAU64F,UAAU9oK,GAAGiwE,QACN,oBAAZA,EACTzxE,KAAK4nU,eAAeplU,KAAKhB,GAEzBxB,KAAKyxE,QAAQjwE,GAAKiwE,IAIxB96B,QAAS,CACPxK,SACE,IAAK,MAAMpkC,KAAS/H,KAAK4nU,eACvB5nU,KAAKsyG,KAAKtyG,KAAKyxE,QAAS1pE,EAAOuiK,UAAUviK,GAAO0pE,WAElD,MAAM/vE,EAAWmrC,eAAelkC,QAChC3I,KAAK6nU,kBAAoBnmU,EAASiqD,mBAClC3rD,KAAK8nU,iBAAmBhvR,eAAe,IAAIhN,SAG3C,IACE9rC,KAAK+nU,WAAar0K,gBAAgB9oG,SAC1C,SACQ5qD,KAAK+nU,YAAa,IAGtB/4T,OAAOpB,GACL,OAAQA,GACN,IAAK,MACH,MAAO,SACT,QACE,OAAOA,EAAEtC,kBCzEqV,MCQxW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI2pC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACE,YAAY,yBAAyBg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,4BAA4Bw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,qCAAqC,CAACF,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,gBAAgB67D,MAAM,CAACxpG,MAAOmtC,EAAkB,eAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIk0G,eAAe53C,GAAKC,WAAW,oBAAoBp8D,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,oBAAoB67D,MAAM,CAACxpG,MAAOmtC,EAAgB,aAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIg2B,aAAasmC,GAAKC,WAAW,kBAAkBp8D,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,wCAAwC67D,MAAM,CAACxpG,MAAOmtC,EAA2B,wBAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIm0G,wBAAwB73C,GAAKC,WAAW,6BAA8Bv8D,EAAoB,iBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,kBAAkB67D,MAAM,CAACxpG,MAAOmtC,EAAc,WAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIoiD,WAAWka,GAAKC,WAAW,gBAAgBv8D,EAAI+8D,KAAM/8D,EAAoB,iBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,mBAAmB67D,MAAM,CAACxpG,MAAOmtC,EAAW,QAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIozB,QAAQkpC,GAAKC,WAAW,aAAav8D,EAAI+8D,KAAM/8D,EAAmB,gBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,sBAAsB67D,MAAM,CAACxpG,MAAOmtC,EAAmB,gBAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIo0G,gBAAgB93C,GAAKC,WAAW,qBAAqBv8D,EAAI+8D,KAAM/8D,EAAmB,gBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,0BAA0B67D,MAAM,CAACxpG,MAAOmtC,EAAmB,gBAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAI2Q,gBAAgB2rD,GAAKC,WAAW,qBAAqBv8D,EAAI+8D,KAAM/8D,EAAmB,gBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,aAAa67D,MAAM,CAACxpG,MAAOmtC,EAAS,MAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAI7E,MAAMmhE,GAAKC,WAAW,WAAWv8D,EAAI+8D,KAAM/8D,EAAmB,gBAAEG,EAAG,2BAA2B,CAACK,MAAM,CAAC,KAAO,6BAA6B67D,MAAM,CAACxpG,MAAOmtC,EAAW,QAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIsG,QAAQg2D,GAAKC,WAAW,aAAav8D,EAAI+8D,MAAM,GAAG/8D,EAAIg8D,GAAG,yFACrjE,GAAkB,GCGtB,UACE1hG,KAAM,0BACN0sH,WAAY,CACV+lM,yBADJ,GAEIC,oBAAJ,IAEE78R,OACE,MAAO,CACLimC,kBAAkB,EAClBrS,kBAAkB,EAClB7M,iBAAiB,EACjBo9M,iBAAiB,EAEjBpgH,gBAAgB,EAChBl+E,cAAc,EACdm+E,yBAAyB,EACzB/xD,YAAY,EACZhvB,SAAS,EACTghF,iBAAiB,EACjBzjG,iBAAiB,EACjBxV,OAAO,EACPmL,SAAS,IAGbhF,SAAU,CACR6rR,iBACE,OAAOxzT,OAAO+zC,QAAQoJ,oBAAsB,IAGhDgzE,MAAO,CACLoqB,eAAet2D,GACbjkF,OAAOysF,QAAQmoC,aAAa2lB,eAAiBt2D,GAE/C5nB,aAAa4nB,GACXjkF,OAAOysF,QAAQmoC,aAAav4D,aAAe4nB,GAE7Cu2D,wBAAwBv2D,GACtBjkF,OAAOysF,QAAQmoC,aAAa4lB,wBAA0Bv2D,GAExDwE,WAAWxE,GACTjkF,OAAOysF,QAAQmoC,aAAansC,WAAaxE,GAE3CxqB,QAAQwqB,GACNjkF,OAAOysF,QAAQmoC,aAAan7D,QAAUwqB,GAExCw2D,gBAAgBx2D,GACdjkF,OAAOysF,QAAQmoC,aAAa6lB,gBAAkBx2D,GAEhDjtC,gBAAgBitC,GACdjkF,OAAOysF,QAAQmoC,aAAa59E,gBAAkBitC,GAEhDziD,MAAMyiD,GACJjkF,OAAOysF,QAAQmoC,aAAapzF,MAAQyiD,GAEtCt3C,QAAQs3C,GACNjkF,OAAOysF,QAAQmoC,aAAajoF,QAAUs3C,IAG1Cl8C,QAAS,CACPxK,SACE,MAAMzqC,EAAWmrC,eAAelkC,QAChC3I,KAAKqrE,iBAAmBrrE,KAAKoiU,gBAAkB1gU,EAAS6pD,mBACxDvrD,KAAKg5D,iBAAmBh5D,KAAKoiU,gBAAkB1gU,EAASiqD,mBACxD3rD,KAAKmsD,gBAAkBnsD,KAAKoiU,gBAAkB1gU,EAASkqD,kBACvD5rD,KAAKupQ,gBAAkBvpQ,KAAKoiU,gBAAkBziR,GAAGC,QAAQu0B,cAAczrC,aAEvE,MAAM2yD,EAAUzsF,OAAOysF,QAAQmoC,aAC/BxjI,KAAKmpJ,eAAiB9tD,EAAQ8tD,eAC9BnpJ,KAAKirE,aAAeowB,EAAQpwB,aAC5BjrE,KAAKopJ,wBAA0B/tD,EAAQ+tD,wBACvCppJ,KAAKq3F,WAAagE,EAAQhE,WAC1Br3F,KAAKqoE,QAAUgzB,EAAQhzB,QACvBroE,KAAKqpJ,gBAAkBhuD,EAAQguD,gBAC/BrpJ,KAAK4lD,gBAAkBy1C,EAAQz1C,gBAC/B5lD,KAAKowC,MAAQirD,EAAQjrD,MACrBpwC,KAAKu7C,QAAU8/C,EAAQ9/C,WC/EsV,MCOnX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAItG,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,oBAAoBw7B,OAAM,MAAS,CAACr3F,EAAG,gBAAgB,CAACE,YAAY,2CAA2CG,MAAM,CAAC,QAAU,6BAA6B,CAACR,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIkzR,gBAAgB,OAAO/yR,EAAG,MAAM,CAACE,YAAY,kEAAkE,CAACF,EAAG,IAAI,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAI5lC,UAAUuoC,SAAS3C,EAAIsxG,gBAAgB,4BAA4BnxG,EAAG,kBAAkBH,EAAI+yI,GAAG,CAAC1yI,YAAY,gCAAgCG,MAAM,CAAC,MAAQR,EAAIsxG,cAAcrkJ,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAImzR,8BAA8Bj3N,MAAW,kBAAkBl8D,EAAIozR,yBAAwB,KAAS,GAAGjzR,EAAG,MAAM,CAACE,YAAY,kEAAkE,CAACF,EAAG,IAAI,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAItkC,eAAe4mC,WAAWtC,EAAIuxG,YAAY,kBAAkBpxG,EAAG,kBAAkBH,EAAI+yI,GAAG,CAAC1yI,YAAY,gCAAgCG,MAAM,CAAC,MAAQR,EAAIuxG,UAAUtkJ,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIqzR,0BAA0Bn3N,MAAW,kBAAkBl8D,EAAIszR,qBAAoB,KAAS,GAAGnzR,EAAG,MAAM,CAACE,YAAY,kEAAkE,CAACF,EAAG,IAAI,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAItkC,eAAe4mC,WAAWtC,EAAIsyD,SAAS,mBAAmBnyD,EAAG,kBAAkBH,EAAI+yI,GAAG,CAAC1yI,YAAY,gCAAgCG,MAAM,CAAC,MAAQR,EAAIsyD,OAAOrlG,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIuzR,uBAAuBr3N,MAAW,kBAAkBl8D,EAAIwzR,kBAAiB,KAAS,GAAGrzR,EAAG,2BAA2B,CAACE,YAAY,2CAA2CG,MAAM,CAAC,KAAO,sBAAsB67D,MAAM,CAACxpG,MAAOmtC,EAAmB,gBAAEvgC,SAAS,SAAU68F,GAAMt8D,EAAIwxG,gBAAgBl1C,GAAKC,WAAW,sBAAsB,IACh0D,GAAkB,GCKtB,UACEjiG,KAAM,mBACN0sH,WAAY,CACV+lM,yBADJ,GAEIC,oBAFJ,GAGI1/L,cAHJ,GAII27G,gBAAJ,IAEE94M,OACE,MAAO,CACLrlC,SAAS,EACTwmJ,aAAc,GACdC,SAAU,EACVj/C,MAAO,EACPk/C,iBAAiB,IAGrBlwG,SAAU,CACR4xR,iBACE,MAAO,UAASnoU,KAAKD,QAAU,KAAO,QAExCsoU,0BACE,MAAO,CACLvnU,IAAK,EACLsH,IAAK,GACLsgE,SAAU,EACVy9D,MAAO,MACPvB,SAAS,IAGb2jM,sBACE,MAAO,CACLznU,IAAK,EACLsH,IAAK,EACLsgE,SAAU,IACVy9D,MAAO,MACPvB,SAAS,IAGb6jM,mBACE,MAAO,CACL3nU,IAAK,GACLsH,IAAK,EACLsgE,SAAU,IACVy9D,MAAO,MACPvB,SAAS,KAIf7F,MAAO,CACL5oF,KAAK08C,GACHjkF,OAAOysF,QAAQiM,KAAKnxD,KAAO08C,GAE7B0zD,aAAa1zD,GACXjkF,OAAOysF,QAAQiM,KAAKi/C,aAAe3uG,SAASi7C,EAAU,KAExD2zD,SAAS3zD,GACPjkF,OAAOysF,QAAQiM,KAAKk/C,SAAWjvG,WAAWs7C,EAAU,KAEtD0U,MAAM1U,GACJjkF,OAAOysF,QAAQiM,KAAKC,MAAQhwD,WAAWs7C,EAAU,KAEnD4zD,gBAAgB5zD,GACdjkF,OAAOysF,QAAQiM,KAAKm/C,gBAAkB5zD,IAG1Cl8C,QAAS,CACPxK,SACE,MAAMkvD,EAAUzsF,OAAOysF,QAAQiM,KAC/BtnG,KAAKD,QAAUs7F,EAAQt7F,QACvBC,KAAKumJ,aAAelrD,EAAQkrD,aAC5BvmJ,KAAKwmJ,SAAWnrD,EAAQmrD,SACxBxmJ,KAAKunG,MAAQlM,EAAQkM,MACrBvnG,KAAKymJ,gBAAkBprD,EAAQorD,iBAEjC2hL,8BAA8BtgU,GAC5B9H,KAAKumJ,aAAez+I,EACpB8G,OAAOysF,QAAQkrD,aAAevmJ,KAAKumJ,cAErC+hL,0BAA0BxgU,GACxB9H,KAAKwmJ,SAAW1+I,EAChB8G,OAAOysF,QAAQmrD,SAAWxmJ,KAAKwmJ,UAEjCgiL,uBAAuB1gU,GACrB9H,KAAKunG,MAAQz/F,EACb8G,OAAOysF,QAAQkM,MAAQvnG,KAAKunG,SC3F0U,MCO5W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAItyD,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAAClzC,GAAG,CAAC,QAAU+yC,EAAIyzR,eAAe,CAACtzR,EAAG,KAAK,CAACH,EAAIg8D,GAAG,gCAAgC77D,EAAG,MAAM,CAACE,YAAY,6BAA6BL,EAAI87D,GAAI97D,EAAoB,kBAAE,SAASjnC,EAAGuB,GAAM,OAAO6lC,EAAG,SAAS,CAAC5K,IAAIj7B,EAAKgmC,MAAMN,EAAIi1H,UAAU36J,GAAMrN,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAItqC,OAAO4E,MAAS,CAAE0lC,EAAI0zR,YAAYp5T,GAAO6lC,EAAG,MAAM,CAACE,YAAY,2CAA2C,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI0zR,YAAYp5T,IAAO,OAAO0lC,EAAI+8D,KAAK58D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAG3hG,GAAM,YAAW,GAAG6lC,EAAG,MAAMA,EAAG,KAAK,CAACH,EAAIg8D,GAAG,2BAA2B77D,EAAG,MAAM,CAACE,YAAY,6BAA6BL,EAAI87D,GAAI97D,EAAe,aAAE,SAASjnC,EAAGuB,GAAM,OAAO6lC,EAAG,SAAS,CAAC5K,IAAIj7B,EAAKgmC,MAAMN,EAAIi1H,UAAU36J,GAAMrN,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAItqC,OAAO4E,MAAS,CAAC6lC,EAAG,MAAM,CAACH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAG3hG,GAAM,YAAW,MAC54B,GAAkB,GCEtB,UACEA,KAAM,qBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACLwjS,cAAe,KACfC,SAAU,OAGdtyR,SAAU,CACRuyR,mBACE,MAAO,CACL,WAAc19S,gBAAgBC,eAC9B,SAAYD,gBAAgBE,aAC5B,KAAQF,gBAAgBG,WAG5Bw9S,cACE,MAAO,CACL,OAAU39S,gBAAgBI,OAC1B,QAAWJ,gBAAgBK,QAC3B,KAAQL,gBAAgBM,OAG5B6pL,cACE,OAAO/vJ,UAAUq5F,eAAeywB,UAAUimC,cAG9C16E,UACE76H,KAAK4oU,cAAgB,IAAIpjR,UAAUq5F,eAAeywB,UAAUjqI,MAC5DrlC,KAAK6oU,SAAWrjR,UAAUq5F,eAAe+1D,KAAKvvK,MAEhDsR,QAAS,CACPgyR,YAAYp5T,GACV,OAAOvP,KAAK+oU,YAAYx5T,KAAUvP,KAAK6oU,UAAY7oU,KAAK4oU,cAAc3gU,QAAQjI,KAAK8oU,iBAAiBv5T,IAAS,GAE/G5E,OAAO4E,GACDvP,KAAK8oU,iBAAiBv5T,OACnBvP,KAAKu1M,aAAev1M,KAAK4oU,cAAcrlU,OAAS,IAAGvD,KAAK4oU,cAAc32S,QACtEjyB,KAAK4oU,cAAcr1T,SAASvT,KAAK8oU,iBAAiBv5T,KAC/D,mDAEUvP,KAAK+oU,YAAYx5T,KAAOvP,KAAK6oU,SAAW7oU,KAAK+oU,YAAYx5T,KAE/Dm5T,eACEljR,UAAUq5F,eAAeywB,UAAUjqI,KAAOrlC,KAAK4oU,cAC/CpjR,UAAUq5F,eAAe+1D,KAAKvvK,KAAOrlC,KAAK6oU,UAE5C3+J,UAAU36J,GACR,MAAMy5T,EAAOhpU,KAAK2oU,YAAYp5T,GACxBm7H,EAAQ,CACZ,WAAc,iBACd,SAAY,eACZ,KAAQ,WACR,OAAU,SACV,QAAW,UACX,KAAQ,QAEV,MAAO,CACb,6BACA,kDACA,8CClE8W,MCO9W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIz1F,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACE,YAAY,yBAAyBg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,yCAAyCw7B,OAAM,MAAS,CAACr3F,EAAG,gBAAgB,CAACE,YAAY,+BAA+BpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIkhG,aAAQ5zI,MAAc,CAAC0yC,EAAIg8D,GAAG,qCAAqC77D,EAAG,+BAA+B,CAAC5K,IAAIyK,EAAIwvR,eAAehvR,MAAM,CAAC,KAAOR,EAAI40F,UAAU,WAAW50F,EAAI0vR,WAAY1vR,EAAI89N,eAAiB99N,EAAIge,MAAMuzQ,cAAepxR,EAAG,MAAM,CAACH,EAAIg8D,GAAG,qDAAsDh8D,EAAiB,cAAEG,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACL,EAAIg8D,GAAG,kCAAkCh8D,EAAI87D,GAAI97D,EAAiB,eAAE,SAASkB,GAAM,OAAOf,EAAG,gBAAgB,CAAC5K,IAAI2L,EAAKZ,MAAMN,EAAIg0R,kBAAkB9yR,GAAMj0C,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIkhG,QAAQhgG,MAAS,CAAClB,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAG/6D,EAAKjrC,cAAc,WAAU,GAAG+pC,EAAI+8D,MAAM,IAC9+B,GAAkB,GCItB,UACEziG,KAAM,6BACN0sH,WAAY,CACVgmM,oBADJ,GAEIiE,6BAFJ,GAGI3jM,cAAJ,IAEEtsF,MAAO,CACL0uR,QAAS,CACPxuR,KAAM5sC,OACN6sC,UAAU,IAGdhR,OACE,MAAO,CAELq/R,gBAAgB,IAGpBluR,SAAU,CACRszF,YACE,OAAO7oF,OAAOq0M,SAASr1P,KAAK2kU,SAASxuR,MAEvC48N,gBACE,OAAO5lK,uBAAuBupC,gBAEhCzjF,QACE,OAAOjS,OAAOq0M,SAASr1P,KAAK2kU,WAGhC9pM,UAEE94H,SAASiB,MAAMd,GAAGwB,WAAW4B,qBAAqB,KAChDtF,KAAK8xI,WAAW,SACX9xI,KAAKykU,gBAAgBzkU,KAAKyqN,gBAGnC9zK,QAAS,CACPxK,SACEnsC,KAAKykU,gBAAiB,GAExBtuL,QAAQhgG,GACFA,GAAQn2C,KAAKizD,MAAMuzQ,gBACvBxmU,KAAKizD,MAAMpkB,WAAQtsC,EACnBvC,KAAKizD,MAAMrkB,YAASrsC,EAChBvC,KAAKizD,MAAMuzQ,cAAexmU,KAAKizD,MAAMizI,SAAWlmM,KAAKizD,MAAMuzQ,cACrE,sBACMxmU,KAAKykU,gBAAiB,EACtB1iU,SAASe,SAASY,WAAW4B,uBAE/B2jU,kBAAkB9yR,GAChB,MAAO,CACL,gCAAgC,EAChC,gBAAiBA,IAASn2C,KAAKizD,MAAMizI,aC1DqV,MCQlY,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIjxJ,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,eAAeR,EAAIi0R,aAAa,UAAYj0R,EAAIk0R,cAAc78L,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,4BAA4Bw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACA,EAAG,MAAM,CAACH,EAAIg8D,GAAG,mKAAmK77D,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACL,EAAIg8D,GAAG,2FAA2F77D,EAAG,QAAQ,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,QAAQsjG,QAAQ,UAAU/qG,MAAOmtC,EAAS,MAAEu8D,WAAW,UAAUV,IAAI,QAAQx7D,YAAY,gBAAgBG,MAAM,CAAC,KAAO,QAAQE,SAAS,CAAC,MAASV,EAAS,OAAG/yC,GAAG,CAAC,MAAQ,CAAC,SAASivG,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,QAAQ,GAAGh7B,EAAO3mE,IAAI,SAAkB,KAAcyK,EAAIk0R,aAAan0T,MAAM,KAAMH,YAAY,SAASs8F,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,MAAM,GAAGh7B,EAAO3mE,IAAI,CAAC,MAAM,WAAoB,KAAcyK,EAAIw1K,UAAUz1M,MAAM,KAAMH,aAAa,MAAQ,CAAC,SAASs8F,GAAWA,EAAO9uG,OAAO4wG,YAAqBh+D,EAAIhH,MAAMkjE,EAAO9uG,OAAOyF,QAAO,SAASqpG,GAAQ,OAAOl8D,EAAIm0R,4BAA4Bh0R,EAAG,MAAM,CAACH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIkzI,aAAa,YACv1C,GAAkB,GCGtB,UACE54K,KAAM,eACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACL6I,MAAO,GACPk+J,UAAW,EACXhkB,YAAa,GACb+gJ,cAAc,IAGlBruM,UAAF,QACI76H,KAAKmsM,UAAT,4CACInsM,KAAKiuC,MAAQ,GAAjB,8CACIjuC,KAAKopU,wBAEPzyR,QAAS,CACPwyR,eAAJ,MACM,IAAN,yBACM,MAAMzoU,EAAMD,KAAKC,MACvB,QAUA,EAVA,mDACQkO,OAAOy6T,gBAAf,kDACQz6T,OAAOy6T,kBAAoB3oU,GAAnC,qEAGM,GADAV,KAAKyqN,YACX,yBACQ,GAAR,wDAGQ,OAFA,IAAR,iCACe77M,OAAOu9L,UAGtB,mDACUv9L,OAAO06T,aAAe5oU,GAExBkO,OAAO26T,eAAiB7oU,EAE1BkO,OAAOu9L,UAAYnsM,KAAKmsM,WAE1Bq9H,eAAe7gQ,GACbtyD,KAAOxV,KAAKuM,MAAMu7D,IAEpBygQ,uBACE,MAAMj9H,EAAY50J,WAAWv3C,KAAKiuC,QACxC,mCACQjuC,KAAKmoL,YAAc,gBACnBnoL,KAAKkpU,cAAe,IAEpBlpU,KAAKmoL,YAAc,gCAAgCgkB,KACnDnsM,KAAKkpU,cAAe,EACpBlpU,KAAKmsM,UAAYA,MCvD+U,MCOxW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIl3J,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,+BAA+Bw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACH,EAAIg8D,GAAG,wBAAwBh8D,EAAIi8D,GAAGj8D,EAAIw0R,cAAc,MAAMr0R,EAAG,MAAMH,EAAIg8D,GAAG,kCAAkCh8D,EAAIi8D,GAAGj8D,EAAIy0R,uBAAuB,mBACzX,GAAkB,GCEtB,UACEn6T,KAAM,qBACN0sH,WAAY,CACV8lM,aAAJ,IAEE38R,OACE,MAAO,CACLskS,sBAAuB,GACvBD,aAAc,KAGlB5uM,UACE76H,KAAK0pU,sBAAwBn4T,SAASC,iBAAiB5C,OAAOy6T,iBAAiB53T,WAC/EzR,KAAKypU,aAAel4T,SAASC,iBAAiB/Q,KAAKC,MAAQkO,OAAO06T,cAAc73T,WAChF7C,OAAOy6T,gBAAkB,ICjBiV,MCO9W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIp0R,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,6CAA6C,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,OAAQ28B,EAAI00R,aAAe,EAAGv0R,EAAG,MAAM,CAACA,EAAG,gBAAgB,CAACE,YAAY,wDAAwDpzC,GAAG,CAAC,MAAQ+yC,EAAI20R,wBAAwB,CAAC30R,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI00R,aAAe,EAAI,SAAW,UAAU,OAAOv0R,EAAG,gBAAgB,CAACE,YAAY,wDAAwDpzC,GAAG,CAAC,MAAQ+yC,EAAI40R,yBAAyB,CAAC50R,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI00R,cAAgB,EAAI,SAAW,UAAU,QAAQ,GAAGv0R,EAAG,MAAM,CAACA,EAAG,gBAAgB,CAACE,YAAY,wDAAwDpzC,GAAG,CAAC,MAAQ+yC,EAAI60R,gBAAgB,CAAC70R,EAAIg8D,GAAG,kBAAkB,MACr0B,GAAkB,GCEtB,UACE1hG,KAAM,4BACN0sH,WAAY,CACVsG,cAAJ,IAEEn9F,OACE,MAAO,CACLukS,aAAc,IAGlBpzR,SAAU,CACRj+B,UACE,OAAQtY,KAAK2pU,cACX,KAAK,EAAb,kEACQ,KAAK,EAAb,uCACQ,KAAK,EAAb,qEACQ,KAAK,EAAb,gJAEQ,QAAR,iCAIEhzR,QAAS,CACPizR,wBACM5pU,KAAK2pU,aAAe,EACtB3pU,KAAKm9T,iBAELn9T,KAAK8pU,iBAGTD,yBACM7pU,KAAK2pU,cAAgB,EACvB3pU,KAAKm9T,iBAELn9T,KAAK8pU,iBAGT3M,iBACEn9T,KAAK2pU,eACqB,IAAtB3pU,KAAK2pU,cAAoB3pU,KAAK+pU,mBAEpCD,gBACE9pU,KAAK2pU,aAAe,EACpB3pU,KAAKyqN,aAEPs/G,kBAGE,MAAM9jI,EAAWr3L,OAAOma,QAAQsmB,OAAOgX,UAAUzjD,QAAO6vB,GAAgB,cAAXA,EAAE0jB,OAAsB,GACrF6K,OAAOgpR,oBAAoB/jI,MCpDoV,MCOrX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIhxJ,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAAClzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,uCAAuCw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,iEAAiE77D,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACL,EAAIg8D,GAAG,8FAChc,GAAkB,GCEtB,UACE1hG,KAAM,mBACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACL1pC,IAAK,CACH4pC,KAAM5sC,OACN6sC,UAAU,IAGdhR,OACE,MAAO,CACL6kS,iBAAiB,IAGrB1zR,SAAU,CACR0c,QACE,OAAOjS,OAAOkpR,qBAAqBlqU,KAAKuM,OAG5CoqC,QAAS,CACPxK,SACE,MAAMqqI,EAAWx1H,OAAOkpR,qBAAqBlqU,KAAKuM,KAC9CvM,KAAKizD,QAAUujH,GAAax2K,KAAKiqU,kBAInCjqU,KAAKyqN,YACLlwM,MAAMjC,QAAQkC,KAAK,mEAGvB2iT,iBACEn9T,KAAKiqU,iBAAkB,EACvBjpR,OAAOgpR,oBAAoBhqU,KAAKizD,UCrCsU,MCO5W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIhe,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,gBAAgBvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIsoR,UAAU,OAAO9wL,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,OAAO88B,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIk1R,cAAc,UAC7d,GAAkB,GCEtB,UACE56T,KAAM,8BACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACL+lO,YAAY,IAGhB50N,SAAU,CACR6zR,wBACE,OAAIpqU,KAAKmrQ,WAAmB,SACrB,aAEToyD,WACE,MAAO,oBAAoBv9T,KAAKoqU,6CAElC9xT,UACE,MAAM+yP,EAAkBz0J,mBAAmB00J,yBACjD,2IAEA,GACM,MAAO,4BAA4BtrQ,KAAKoqU,gJACoC/+D,KAE9E8+D,eACE,OAA2B,IAAvBnqU,KAAKqqU,cAA4B,8BACjCrqU,KAAKqqU,gBAAkBrqU,KAAKsqU,YAAoB,oCAC7C,4BAA4BtqU,KAAKqqU,iBAAiBrqU,KAAKsqU,uBAIhEA,cACE,OAAOtpR,OAAOqF,UAAUzjD,QAAOwlM,GAAiB,OAATA,IAAe7kM,QAExD8mU,gBACE,OAAOrpR,OAAO+pN,mBAAkB,KAGpCp0N,QAAS,CACPxK,SACEnsC,KAAKmrQ,WAAa3pN,sBAAsB2pN,YAE1CgyD,iBACEn8Q,OAAO+pN,mBAAkB,MChDwV,MCOvX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAI91N,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,gBAAgBvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIsoR,UAAU,OAAO9wL,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,OAAO88B,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIk1R,cAAc,UAC7d,GAAkB,GCEtB,UACE56T,KAAM,iCACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACL+lO,YAAY,EACZo/D,eAAe,IAGnBh0R,SAAU,CACRi0R,gCACE,OAAIxqU,KAAKmrQ,WAAmB,SACxBnrQ,KAAKuqU,cAAsB,YACxB,UAEThN,WACE,MAAO,oBAAoBv9T,KAAKwqU,wDAElClyT,UACE,MAAO,4BAA4BtY,KAAKwqU,oFAG1CL,eACE,OAA2B,IAAvBnqU,KAAKqqU,cAA4B,aAAarqU,KAAKwqU,2CACnDxqU,KAAKqqU,gBAAkBrqU,KAAKsqU,YACvB,aAAatqU,KAAKwqU,iDAEpB,aAAaxqU,KAAKwqU,2CACrBn7T,UAAUrP,KAAKqqU,kBAAkBh7T,UAAUrP,KAAKsqU,gCAItDA,cACE,OAAOtpR,OAAOqF,UAAUzjD,QAAOwlM,GAAiB,OAATA,IAAe7kM,QAExD8mU,gBACE,OAAOrpR,OAAO8oG,UAAU,GAAG,KAG/BnzG,QAAS,CACPxK,SACEnsC,KAAKmrQ,WAAa3pN,sBAAsB2pN,WACxCnrQ,KAAKuqU,cAAgB/oR,sBAAsBs2C,cAE7CqlO,iBACEn8Q,OAAO6pN,0BClD6W,MCO1X,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAI51N,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,aAAavzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIsoR,UAAU,OAAO9wL,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,kMAAkM77D,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIw1R,aAAa,OAAOr1R,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIk1R,cAAc,UACzrB,GAAkB,GCEtB,UACE56T,KAAM,kBACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACLy0R,MAAO,CACLv0R,KAAM/K,QACNgL,UAAU,IAGdG,SAAU,CACRjoC,YACE,OAAOtO,KAAK0qU,MAAQ,EAAI,GAE1BP,eACE,OAA2B,IAAvBnqU,KAAKqqU,cAA4B,6BACjCrqU,KAAKqqU,gBAAkBrqU,KAAKsqU,YAAoB,mCAC7C,GAAGtqU,KAAK0qU,MAAQ,gBAAkB,kCACrCr7T,UAAUrP,KAAKqqU,kBAAkBh7T,UAAUrP,KAAKsqU,uCAGtDG,cACE,OAAIzqU,KAAK0qU,MAAc,6PAGhB,iTAITnN,WACE,MAAO,oBAAoBv9T,KAAK0qU,MAAQ,cAAgB,uBAI1DJ,cACE,OAAOtpR,OAAOqF,UAAUzjD,QAAOwlM,GAAiB,OAATA,IAAe7kM,QAExD8mU,gBACE,OAAOrpR,OAAO8oG,UAAU9pJ,KAAKsO,WAAW,KAG5CqoC,QAAS,CACPwmR,iBACEn8Q,OAAO8oG,UAAU9pJ,KAAKsO,WAAW,MC/CoU,MCO3W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAI2mC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,eAAevzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,uCAAuCw7B,OAAM,MAAS,CAAEx3F,EAAoB,iBAAEG,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,sGAAsGh8D,EAAIi8D,GAAGj8D,EAAImtK,cAAc,0BAA0BntK,EAAIi8D,GAAGj8D,EAAIjmC,OAAOimC,EAAIimL,eAAgB,EAAG,IAAI,OAAOjmL,EAAIi8D,GAAGj8D,EAAIjmC,OAAOimC,EAAIktK,MAAO,EAAG,IAAI,+BAA+BltK,EAAIi8D,GAAGj8D,EAAImtK,cAAc,wBAAwBntK,EAAIi8D,GAAGj8D,EAAIjmC,OAAOimC,EAAI1N,IAAK,EAAG,IAAI,QAAQ6N,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,wBAAwBh8D,EAAIi8D,GAAGj8D,EAAImtK,cAAc,qLAC70B,GAAkB,GCEtB,UACE7yM,KAAM,mBACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACL1pC,IAAK,CACH4pC,KAAM5sC,OACN6sC,UAAU,IAGdhR,OACE,MAAO,CACL81L,eAAgB,EAChByvG,kBAAkB,EAClBpwH,KAAM,EACN4H,MAAO,EACP56K,IAAK,EACLqjS,iBAAiB,IAGrBr0R,SAAU,CACR0c,QACE,OAAOjS,OAAOkpR,qBAAqBlqU,KAAKuM,MAE1C42D,WACE,OAAO3hB,sBAAsBqpR,qBAAqB7qU,KAAKizD,QAEzDmvJ,eACE,OAAOpiN,KAAKmjE,SAAS5zD,OAGzBonC,QAAS,CACPxK,SACE,MAAMg3B,EAAWnjE,KAAKmjE,SACtBnjE,KAAKk7N,eAAiB/3J,EAASjxD,OAC/BlS,KAAK2qU,iBAAmBxnQ,EAASh4B,WACjCnrC,KAAKu6M,KAAO/4J,sBAAsBspR,oBAAoB9qU,KAAKizD,OAC3DjzD,KAAKunC,IAAMia,sBAAsBupR,kBAAkB/qU,KAAKizD,OAExDjzD,KAAKmiN,MAAQniN,KAAKk7N,eAAiBl7N,KAAKu6M,KAExC,MAAM/jC,EAAWx1H,OAAOkpR,qBAAqBlqU,KAAKuM,KAC9CvM,KAAKizD,QAAUujH,GAAax2K,KAAK4qU,kBAInC5qU,KAAKyqN,YACLlwM,MAAMjC,QAAQkC,KAAK,mEAGvB2iT,iBACEn9T,KAAK4qU,iBAAkB,EACvBppR,sBAAsBwpR,YAAYhrU,KAAKizD,UCxD+T,MCO5W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIhe,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,kBAAkBvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,0CAA0Cw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,UACjY,GAAkB,GCGtB,UACE/I,KAAM,sBACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACL1pC,IAAK,CACH4pC,KAAM5sC,OACN6sC,UAAU,IAGdhR,OACE,MAAO,CACL6lS,sBAAuB,EAA7B,GACM1wH,KAAM,EAAZ,GACM2wH,oBAAoB,IAGxB30R,SAAU,CACR0c,QACE,OAAOjS,OAAOkpR,qBAAqBlqU,KAAKuM,MAE1C+L,UACE,MAAO,8EAA8EtY,KAAKizD,MAAM9c,yCACpEnnC,OAAOhP,KAAKirU,sBAAuB,EAAG,gBAChEj8T,OAAOhP,KAAKirU,sBAAsB7hU,IAAIpJ,KAAKu6M,MAAO,EAAG,QAG3D5jK,QAAS,CACPxK,SACEnsC,KAAKirU,sBAAwBr8T,OAAOma,QAAQsmB,OAAOkS,IAAIvhD,KAAKizD,MAAM9c,MAClEn2C,KAAKu6M,KAAO/4J,sBAAsBu4H,mBAAmB/5K,KAAKizD,OAE1D,MAAMujH,EAAWx1H,OAAOkpR,qBAAqBlqU,KAAKuM,KAC9CvM,KAAKizD,QAAUujH,GAAax2K,KAAKkrU,qBAOnClrU,KAAKyqN,YACLlwM,MAAMjC,QAAQkC,KAAK,mEAGvB2iT,iBACEn9T,KAAKkrU,oBAAqB,EAC1B1pR,sBAAsB4xN,eAAepzQ,KAAKizD,OAAO,MCnDwT,MCO/W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIhe,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIwE,QAAQ,OAAOgzF,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACF,EAAG,OAAO,CAACH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,SAAS88B,EAAG,sBAAsB,CAACE,YAAY,gBAAgBG,MAAM,CAAC,WAAW,MAAML,EAAG,uBAAuB,CAACE,YAAY,iBAAiBG,MAAM,CAAC,WAAW,MAAML,EAAG,wBAAwB,CAACE,YAAY,iBAAiBG,MAAM,CAAC,WAAW,MAAML,EAAG,qBAAqB,CAACK,MAAM,CAAC,WAAW,MAAML,EAAG,6BAA6B,CAACK,MAAM,CAAC,WAAW,OAAO,IAC7pB,GAAkB,GCOtB,UACElmC,KAAM,qBACN0sH,WAAY,CACVyvG,sBADJ,GAEIE,2BAFJ,GAGIH,qBAHJ,GAIIE,mBAJJ,GAKIo2F,aALJ,GAMIv2F,oBAAJ,IAEEj1L,SAAU,CACRkD,SACE,MAAO,mBAETnhC,UAGE,OAAOyuD,WAAWglG,0BACxB,wEACA,iEC3BkW,MCQlW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI92H,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACE,YAAY,iCAAiCg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI1lC,MAAM,gBAAgBk9H,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,oCAAoC,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIzE,aAAa,OAAO4E,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,IAAI,CAACH,EAAIg8D,GAAG,2BAA2B77D,EAAG,MAAMH,EAAIg8D,GAAG,8BAA8Bh8D,EAAI87D,GAAI97D,EAAW,SAAE,SAASoD,EAAO8yR,GAAc,OAAO/1R,EAAG,SAAS,CAAC5K,IAAI6N,EAAO9oC,KAAK+lC,YAAY,4CAA4CpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIm2R,WAAW/yR,EAAO9oC,KAAM47T,EAAe,MAAM,CAACl2R,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAG74D,EAAO9oC,KAAO8oC,EAAO9oC,KAAO47T,EAAe,GAAG,UAAS/1R,EAAG,SAAS,CAACE,YAAY,4CAA4CpzC,GAAG,CAAC,MAAQ+yC,EAAIo2R,cAAc,CAACj2R,EAAG,IAAI,CAACH,EAAIg8D,GAAG,oBAAoBh8D,EAAI87D,GAAI97D,EAAU,QAAE,SAAShH,GAAO,OAAOmH,EAAG,MAAM,CAAC5K,IAAIyD,EAAM1+B,KAAK+lC,YAAY,8BAA8B,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGjjE,EAAM2K,QAAQ,MAAO3D,EAAIq2R,gBAAgBr9R,EAAMkI,MAAiB,YAAEf,EAAG,OAAO,CAACA,EAAG,SAAS,CAACE,YAAY,gBAAgBpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIs2R,aAAat9R,MAAU,CAACgH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIu2R,kBAAkBv9R,EAAM1+B,OAAO,SAAS6lC,EAAG,OAAO,CAACA,EAAG,QAAQ,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,QAAQsjG,QAAQ,UAAU/qG,MAAOmtC,EAAIw2R,eAAex9R,EAAM1+B,MAAOiiG,WAAW,+BAA+BV,IAAI,6BAA6B46N,UAAS,EAAKp2R,YAAY,+BAA+BC,MAAMN,EAAIO,cAAcvH,GAAOwH,MAAM,CAAC,KAAO,QAAQE,SAAS,CAAC,MAASV,EAAIw2R,eAAex9R,EAAM1+B,OAAQrN,GAAG,CAAC,MAAQ,CAAC,SAASivG,GAAWA,EAAO9uG,OAAO4wG,WAAqBh+D,EAAIq9D,KAAKr9D,EAAIw2R,eAAgBx9R,EAAM1+B,KAAM4hG,EAAO9uG,OAAOyF,QAAQmtC,EAAI02R,gCAA+B,GAAGv2R,EAAG,MAAM,CAACE,YAAY,iCAAiC,CAACF,EAAG,IAAI,CAACH,EAAIg8D,GAAG,kCAAgE,IAA7Bh8D,EAAI22R,cAAcroU,OAAc6xC,EAAG,MAAMH,EAAI87D,GAAI97D,EAAiB,eAAE,SAAS42R,GAAS,OAAOz2R,EAAG,MAAM,CAAC5K,IAAIqhS,EAAQv2R,YAAY,8BAA8B,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAG26N,GAAS,UAAS,GAAGz2R,EAAG,MAAM,CAACH,EAAIg8D,GAAG,iFAAiF77D,EAAG,MAAMA,EAAG,QAAmC,IAA1BH,EAAI62R,kBAAyB12R,EAAG,SAAS,CAACE,YAAY,gBAAgBpzC,GAAG,CAAC,MAAQ+yC,EAAI82R,eAAe,CAAC92R,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIm6F,QAAU,+BAAiC,wCAAwC,4BAA4Bh6F,EAAG,SAAS,CAACE,YAAY,yCAAyC,CAACL,EAAIg8D,GAAG,uCAAuCh8D,EAAIi8D,GAAGj8D,EAAI9hC,YAAY,gBAAiB8hC,EAAI62R,oBAAoB,WAC/mF,GAAkB,GCGtB,UACEv8T,KAAM,0BACN0sH,WAAY,CACV8lM,aAAJ,IAEE9rR,MAAO,CACL4C,SAAU,CACR1C,KAAMyuE,SACNxuE,UAAU,GAEZ7mC,KAAM,CACJ4mC,KAAMlrC,OACNmrC,UAAU,GAEZ5F,YAAa,CACX2F,KAAMlrC,OACNmrC,UAAU,GAEZuC,OAAQ,CACNxC,KAAMxuC,MACNyuC,UAAU,IAGdhR,OACE,MAAO,CACLqmS,eAAgB,GAChBD,kBAAmB,GACnBM,kBAAmB,EACnBE,cAAe,KACfC,cAAe,GACf78L,SAAS,IAGb74F,SAAU,CACRiC,QAAS,IAAM5pC,OAAO2pC,UAAUC,QAChCisF,OAAQ,IAAM/3D,aAAa3jD,QAAQkwB,UAAUgB,UAAUjC,WACvD4zR,gBAAJ,MACM,OAAkC,IAA3B5rU,KAAK8rU,kBAClB,qFACA,iBAEII,iBACE,OAA+B,IAA3BlsU,KAAK8rU,kBAAgC,KAClC,IAAIK,eAAensU,KAAKgsU,cAAehsU,KAAKuP,QAOvDsrH,UACE,IAAK,MAAM5sF,KAASjuC,KAAK24C,OAAQ,CAC/B,MAAMyzR,EAAWpsU,KAAKsrU,gBAAgBr9R,EAAMkI,MAAMsC,YAC9C2zR,GACFpsU,KAAKsyG,KAAKtyG,KAAKyrU,eAAgBx9R,EAAM1+B,MAAM,GAC3CvP,KAAKwrU,kBAAkBv9R,EAAM1+B,MAAQ68T,EAAS,KAE9CpsU,KAAKsyG,KAAKtyG,KAAKyrU,eAAgBx9R,EAAM1+B,KAAM,IAC3CvP,KAAK8rU,uBAIXn1R,QAAS,CACPxK,SACEnsC,KAAKovI,QAAUxgI,OAAOma,QAAQkwB,UAAU9C,OAASw3E,eAAeE,OAElEy9M,gBAAgB/7T,GACd,OAAOvP,KAAKykI,OAAOj3H,MAAKmsB,GAAKA,EAAEpqB,OAASA,KAE1C8mC,QAAQpI,GACN,MAAMqxN,EAAat/P,KAAKsrU,gBAAgBr9R,EAAMkI,MAC9C,OAAOmpN,EAAWrnN,eAAgBqnN,EAAWrnN,cAAcj4C,KAAKyrU,eAAex9R,EAAM1+B,QAEvFimC,cAAcvH,GACZ,MAAmB,gBAAfA,EAAM1+B,MAAiD,KAAvBvP,KAAKisU,cAChC,uCAEFjsU,KAAKq2C,QAAQpI,QAC1B,EACA,yCAEIm9R,WAAW77T,EAAMvB,GACfhO,KAAKyrU,eAAeY,YAAc98T,EAAO,QAAQA,IAAS,MAAMvB,IAChEhO,KAAK2rU,uBAEPN,cACErrU,KAAKyrU,eAAeY,YAAc3tP,UAAU2jC,iBAAiBv6G,MAAMmtN,aACnEj1N,KAAK2rU,uBAEPA,sBACE3rU,KAAKgsU,cAAgB,GACrBhsU,KAAK8rU,kBAAoB,EACzB,IAAK,MAAM79R,KAASjuC,KAAK24C,OAAQ,CAC/B,MAAM2zR,EAAUtsU,KAAKsrU,gBAAgBr9R,EAAMkI,MACrCw6D,EAAQ/iG,GAAK,EAA3B,eACQ5N,KAAKgsU,cAAc/9R,EAAM1+B,MAAQohG,EAAM3wG,KAAKyrU,eAAex9R,EAAM1+B,OAC5DvP,KAAKq2C,QAAQpI,IAAQjuC,KAAK8rU,oBAIjC,MAAMS,EAAYvsU,KAAKgsU,cAAcK,YAAYv5T,MAAM,gLACjD05T,EAAUxsU,KAAKgsU,cAAcK,YAAYv5T,MAAM,gBAErD,GAAIy5T,EAAW,CACb,MAAME,EAAUF,EAAYA,EAAU,GAAK,GAC3CvsU,KAAKisU,cAAgBjsU,KAAKw4C,QAAQhrC,MAAKI,GAAKA,EAAE2B,OAASk9T,IAASl9T,UACxE,MACQ,MAAMm9T,EAAQF,EAAUA,EAAQ,GAAK,GACrCxsU,KAAKisU,cAAgBjsU,KAAKw4C,QAAQ/qC,MAAK,CAACG,EAAGsG,IAAMA,IAAMw4T,EAAQ,IAAKA,EAAQ,GAG9E1sU,KAAKgsU,cAAcW,WAAoC,KAAvB3sU,KAAKisU,cAAuB,KAAOjsU,KAAKisU,eAE1EV,aAAat9R,GACXjuC,KAAKyrU,eAAex9R,EAAM1+B,OAASvP,KAAKyrU,eAAex9R,EAAM1+B,MAC7D,MAAM68T,EAAWpsU,KAAKsrU,gBAAgBr9R,EAAMkI,MAAMsC,YAClDz4C,KAAKwrU,kBAAkBv9R,EAAM1+B,MAAQ68T,EAASpsU,KAAKyrU,eAAex9R,EAAM1+B,MAAQ,EAAI,GACpFvP,KAAK2rU,uBAEPI,eACE,GAAI/rU,KAAKovI,QAAS,CAChB,MAAMw9L,EAAmB,CACvBr9T,KAAM,aAAavP,KAAKuP,OACxBurC,OAAQkvE,GAAsBhqH,KAAKksU,eAAenmN,QAAQjrE,QAE5DgmD,cAAcmuB,eAAezsH,KAAKoqU,GAClC3pU,OAAOiqG,OAAO1V,KAAK,sCAEnBxtF,gBAAgBhK,KAAKksU,eAAenmN,QACpC9iH,OAAOiqG,OAAO1V,KAAK,gCAErBx3F,KAAKyqN,eCvI4V,MCQvW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIx1K,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAM,CAACE,YAAY,iCAAiC,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI43R,YAAY,OAAS53R,EAAI63R,gBAA+U73R,EAAI+8D,KAAlU58D,EAAG,MAAM,CAACE,YAAY,mDAAmDL,EAAI87D,GAAI97D,EAAgB,cAAE,SAAS1lC,GAAM,OAAO6lC,EAAG,oBAAoB,CAAC5K,IAAIj7B,EAAKkmC,MAAM,CAAC,KAAOlmC,EAAK,gBAAgB0lC,EAAImoK,aAAa,eAAenoK,EAAIooK,aAAan7M,GAAG,CAAC,qBAAqB,SAASivG,GAAQl8D,EAAI83R,mBAAoB,SAAW,IAAc93R,EAAI63R,iBAAmB73R,EAAI83R,kBAAmB33R,EAAG,OAAO,CAACH,EAAIg8D,GAAG,oDAAoDh8D,EAAI+8D,QAC9sB,GAAkB,GCDlB,GAAS,WAAa,IAAI/8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAQD,EAAQ,KAAEG,EAAG,MAAM,CAACG,MAAMN,EAAImtF,YAAYlgI,GAAG,CAAC,MAAQ+yC,EAAI+3R,YAAY,CAAE/3R,EAAe,YAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,UAAU77D,EAAG,IAAI,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAIg4R,kBAAkBh4R,EAAIg8D,GAAG,cAAch8D,EAAIi8D,GAAGj8D,EAAIi4R,4BAA4B,OAAO93R,EAAG,OAAO,CAACA,EAAG,IAAI,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAIg4R,kBAAmBh4R,EAAe,YAAEG,EAAG,IAAI,CAACH,EAAIg8D,GAAG,eAAeh8D,EAAI+8D,KAAK/8D,EAAIg8D,GAAG,mBAAmBh8D,EAAIi8D,GAAGj8D,EAAIk4R,cAAc,OAAOl4R,EAAIi8D,GAAGj8D,EAAIm4R,aAAa,SAASn4R,EAAI+8D,MAChhB,GAAkB,GCAtB,UACEziG,KAAM,oBACN0mC,MAAO,CACL1mC,KAAM,CACJ4mC,KAAMlrC,OACNmrC,UAAU,GAEZgnK,aAAc,CACZjnK,KAAMzzC,OACN0zC,UAAU,GAEZinK,YAAa,CACXlnK,KAAMzzC,OACN0zC,UAAU,IAGdhR,OACE,MAAO,CACLioS,SAAS,IAGb92R,SAAU,CACR3pC,OACE,OAAOmkK,kBAAkB1kH,IAAIrsD,KAAKuP,OAEpC6/F,SACE,OAAOpvG,KAAK4M,KAAKgkK,WAAW5wK,KAAKo9M,eAEnC+E,QACE,OAAOniN,KAAK4M,KAAKgkK,WAAW5wK,KAAKq9M,cAEnC8vH,eACE,OAAOntU,KAAKstU,aAAattU,KAAKovG,SAEhCg+N,cACE,OAAOptU,KAAKstU,aAAattU,KAAKmiN,QAEhC//E,cACE,MAAO,CACL,CAACpiI,KAAK4M,KAAKw1H,cAAepiI,KAAKqtU,QAC/B,kCAAmCrtU,KAAKqtU,UAG5CJ,gBACE,OAAOjtU,KAAK4M,KAAK+jK,YAEnB48J,YAEE,GAAIvtU,KAAKotU,cAAgBptU,KAAKmtU,aAAc,OAAO,EAEnD,MAAM/9N,EAASpvG,KAAKovG,OACd+yG,EAAQniN,KAAKmiN,MAEnB,OAAOA,aAAiBn5M,QAC9B,QACA,KAEIwR,OACE,IAAKxa,KAAK4M,KAAK4+D,mBAAoB,OAAO,EAC1C,MAAMhxD,EAAOxa,KAAKutU,WAAavtU,KAAK4M,KAAK8qF,QAAU13F,KAAK4M,KAAKu+B,aAG7D,OADI3wB,GAAMxa,KAAKwqN,MAAM,sBACdhwM,GAETgzT,cAEE,OAAOxtU,KAAK4M,KAAK2C,KAAKgE,SAAS,cAEjC25T,6BACE,MAAMxrL,EAAc1hJ,KAAKmiN,MAAQniN,KAAKovG,OACtC,OAAOj8F,YAAY,OAAQuuI,IAE7B+rL,cACE,OAAOztU,KAAKwtU,aAElB,6CAGE72R,QAAS,CAEP22R,aAAanlU,GAGX,QAAe5F,IAAX4F,EAAsB,MAAO,GAEjC,GAAInI,KAAKytU,YAAa,OAAOp+T,UAAUxO,KAAKuM,MAAMjF,EAAOiM,UACzD,GAAIpL,QAAQ0O,GAAGvP,EAAQ,KAAM,CAG3B,MAAMulU,EAAkB,IAAI1kU,QAAQb,GACpC,OAAOkH,UAAUq+T,EAAgBtgU,SAEnC,OAAO4B,OAAO7G,EAAQ,EAAG,IAE3B6kU,YACEhtU,KAAKqtU,SAAWrtU,KAAKqtU,QACrBrtU,KAAK4M,KAAK8qF,QAAU13F,KAAK4M,KAAK8qF,UCjG6T,MCQjW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCfhC,IACEnoF,KAAM,oBACN0sH,WAAY,CACV0xM,kBADJ,GAEI5L,aAAJ,IAEE9rR,MAAO,CACLmnK,aAAc,CACZjnK,KAAMzzC,OACN0zC,UAAU,GAEZinK,YAAa,CACXlnK,KAAMzzC,OACN0zC,UAAU,GAEZv/B,QAAS,CACPs/B,KAAM5sC,OACN6sC,UAAU,IAGdhR,OACE,MAAO,CACL2nS,mBAAmB,IAGvBx2R,SAAU,CACRu2R,kBACE,MAAgC,OAAzBvkO,MAAM5/F,UAAU4G,MAEzBq+T,eACE,OAAO78J,kBAAkBvlG,oBAE3BqhQ,aACE,MAAMv7T,EAAcC,SAASs6F,YAAY7rG,KAAK6W,SAASpF,WACvD,OAAIzR,KAAK8sU,kBAAoB9sU,KAAK+sU,kBACzB,2BAA2Bz7T,yBAE7B,2BAA2BA,QAGtCqrH,UACE38H,KAAKu/H,WAAU,MAETv/H,KAAK8sU,iBAAoB9sU,KAAK+sU,mBAAmB31R,kBAAkB,IAAI7L,cC/CgR,MCQjW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI0J,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,eAAc,GAAOvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,iCAAiCw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,aAAaw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyBL,EAAI87D,GAAI97D,EAAW,SAAE,SAASoxE,EAAKt+G,GAAO,OAAOqtC,EAAG,OAAO,CAAC5K,IAAIziC,GAAO,CAACktC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGmV,GAAM,KAAKjxE,EAAG,WAAU,MAC9gB,GAAkB,GCEtB,UACE7lC,KAAM,qBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE5kR,SAAU,CACRj+B,UACE,MAAMoQ,EAAW7Y,gBAAgBtG,OAAO2O,UAAW,GACnD,MAAO,4DAA4DwQ,IAAWmkB,eAAemsB,mBACnG,+HAC4EtwC,mHACuBA,aACzFm/C,kBAAkB+U,eAAexqC,UAAY,GAAK,kGAC5D,cAGEuE,QAAS,CACPwmR,iBACElvN,mBCrB4V,MCOlW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIh5D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAM,CAACE,YAAY,iCAAiC,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI44R,WAAW,OAAOz4R,EAAG,MAAM,CAACH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIoqE,YAAY,0SAA0SjqE,EAAG,IAAI,CAACE,YAAY,2BAA2BL,EAAIg8D,GAAG,gDAAgD77D,EAAG,MAAM,CAACE,YAAY,4BAA4BhrC,MAAM,CAAG,OAAazJ,KAAK0H,MAAM,EAAI0sC,EAAI64R,cAAgB,EAAG,GAAI,IAAO,QAAW74R,EAAI87D,GAAI97D,EAAiB,eAAE,SAASkgE,GAAO,OAAO//D,EAAG,eAAe,CAAC5K,IAAI2qE,EAAM1/D,MAAM,CAAC,MAAQ0/D,EAAM,KAAOlgE,EAAI6/G,UAAU3/C,SAAY,GAAG//D,EAAG,OAAO,CAACE,YAAY,qBAAqB,CAACL,EAAIg8D,GAAG,0FAA0Fh8D,EAAIi8D,GAAGj8D,EAAIi3D,mBAAmB,QAAQ92D,EAAG,MAAM,CAACE,YAAY,qBAAqB,CAACF,EAAG,gBAAgB,CAAClzC,GAAG,CAAC,MAAQ+yC,EAAIw1K,YAAY,CAACx1K,EAAIg8D,GAAG,gBAAgB,MAC5tC,GAAkB,GCDlB,GAAS,WAAa,IAAIh8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAsC,IAA9BD,EAAI84R,eAAexqU,OAAc6xC,EAAG,MAAM,CAACA,EAAG,OAAO,CAACE,YAAY,wBAAwBpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQl8D,EAAI+wG,WAAa/wG,EAAI+wG,aAAa,CAAC5wG,EAAG,IAAI,CAACG,MAAMN,EAAI06N,oBAAoB16N,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI1lC,MAAM,OAAS0lC,EAAI+wG,UAAyJ/wG,EAAI+8D,KAAlJ58D,EAAG,MAAMH,EAAI87D,GAAI97D,EAAkB,gBAAE,SAASkuB,EAAS3hE,GAAG,OAAO4zC,EAAG,eAAe,CAAC5K,IAAIhpC,EAAE8zC,YAAY,SAASG,MAAM,CAAC,KAAO0tB,QAAc,KAAcluB,EAAI+8D,MAC9e,GAAkB,GCDlB,GAAS,WAAa,IAAI/8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,OAAO,CAACE,YAAY,kBAAkBG,MAAM,CAAC,KAAOR,EAAIuiD,KAAK,aAAaviD,EAAI+4R,kBAAkB/4R,EAAIuiD,OAAOt1F,GAAG,CAAC,MAAQ+yC,EAAIg5R,YAAY,CAAC74R,EAAG,OAAO,CAACE,YAAY,eAAe,CAACL,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAIuiD,KAAKjoF,SAAS0lC,EAAIg8D,GAAG,MAAM77D,EAAG,IAAI,CAACE,YAAY,6BAA6BL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIuiD,KAAKhnD,aAAa,QACpc,GAAkB,GCAtB,UACEjhC,KAAM,eACN0mC,MAAO,CACLuhD,KAAM,CACJrhD,KAAMzzC,OACN0zC,UAAU,IAGdhR,OACE,MAAO,CACLm3L,mBAAoB,EACpB2xG,UAAWjjU,SAGfsrC,SAAU,CACRl2C,SACE,OAAOL,KAAKw3F,KAAKn3F,QAEnB8tU,kBACE,YAAoC5rU,IAA7BvC,KAAKK,OAAO+rE,eAGvBz1B,QAAS,CACPq3R,kBAAkBx2O,GAEhB,GADAx3F,KAAKu8N,kBAAoB/kI,EAAKxpF,IACE,IAA5BhO,KAAKu8N,kBAA0B,OAAO,EAC1C,MAAM6xG,EAAsB1hQ,aAAaR,iBAAiBlsE,KAAKu8N,mBAAmBhtN,KAClF,OAAI6+T,IAAwB52O,EAAKjoF,OAC1BvP,KAAKkuU,UAAYE,IAE1BH,YACExqU,GAAG+2E,KAAK6oG,aAAe32G,aAAa2yB,IAAI5kB,KAAK73E,QACnD,iFACM2X,MAAM8kF,IAAI7kF,UClCwV,MCQxW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCdhC,IACEjL,KAAM,eACN0sH,WAAY,CACVoyM,aAAJ,IAEEp4R,MAAO,CACLk/D,MAAO,CACLh/D,KAAM5sC,OACN6sC,UAAU,GAEZ7mC,KAAM,CACJ4mC,KAAMlrC,OACNmrC,UAAU,IAGdhR,OACE,MAAO,CACL4gH,WAAW,IAGfzvG,SAAU,CACRw3R,iBACE,OAAO7/H,GAAiB7hJ,IAAIzpD,QAAOu5B,GAAKA,EAAEgwC,gBAAkBnsE,KAAKm1G,SAEnEw6J,oBACE,OAAO3vQ,KAAKgmJ,UAAY,qBAAuB,yBC9BmT,MCQxW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCbhC,IACEz2I,KAAM,eACN0sH,WAAY,CACVqyM,aADJ,GAEI/rM,cAAJ,IAEEtsF,MAAO,CACLghF,KAAM,CACJ9gF,KAAM5sC,OACN6sC,UAAU,IAGdG,SAAU,CACRu3R,cAAe,IAAM3/H,GAAgBC,iBAAiBx/L,QAAQZ,GAC9Dk+F,oBACE,OAAO8hG,GAAahuM,KAAK8tU,eAAe5hO,mBAE1CmT,aAEE,OAAKr/G,KAAKi3H,KACH,eAAe1lH,SAASC,iBAAiBxR,KAAKi3H,MAAMxlH,gDADpC,MAGzBo8T,YACE,OAAO7tU,KAAKi3H,KAAO,mBAAqB,oBAG5CtgF,QAAS,CACPm+G,UAAUJ,GACR,OAAOs5C,GAAat5C,GAAOnlJ,QClCuU,MCQxW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI0lC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,qBAAqB,CAACF,EAAG,mBAAmB,CAAClzC,GAAG,CAAC,MAAQ+yC,EAAIw1K,aAAax1K,EAAIg6F,GAAG,GAAG75F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACE,YAAY,wBAAwBL,EAAI87D,GAAI97D,EAAW,SAAE,SAAS0tD,GAAO,OAAOvtD,EAAG,MAAM,CAAC5K,IAAIm4D,EAAM30F,GAAGsnC,YAAY,yBAAyBC,MAAM,CAC3b,mCAAoCotD,IAAU1tD,EAAIs5R,YAClDrsU,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIu5R,cAAc7rO,MAAU,CAAC1tD,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIw5R,WAAW9rO,EAAMpL,OAAO,UAAS,KAAKniD,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,MAAM,CAACE,YAAY,2BAA2B,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIw5R,WAAWx5R,EAAIs5R,WAAWh3O,QAAStiD,EAAIs5R,WAAe,KAAEn5R,EAAG,OAAO,CAACH,EAAIg8D,GAAG,MAAOh8D,EAAIi8D,GAAGj8D,EAAIs5R,WAAWh/T,MAAM,cAAe0lC,EAAI+8D,OAAO58D,EAAG,MAAM,CAAC07D,IAAI,gBAAgBx7D,YAAY,oCAAoCK,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAIs5R,WAAW/2O,cAAc,IACvgB,GAAkB,CAAC,WAAa,IAAIviD,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,sBAAsB,CAACF,EAAG,MAAM,CAACE,YAAY,qBAAqB,CAACL,EAAIg8D,GAAG,qBCA1M,UACE1hG,KAAM,iBACN0sH,WAAY,CACVi6K,iBAAJ,IAEE9wQ,OACE,MAAO,CACLspS,QAAS,IAGbn4R,SAAU,CACRg4R,WAAY,CACV77T,MACE,OAAOg6D,aAAa4qB,UAAUt3F,KAAK0uU,UAErC77T,IAAI8vF,GACF3iG,KAAK0uU,QAAU/rO,EAAM30F,KAGzBgF,UACE,OAAO05D,aAAa4qB,YAGxB3gD,QAAS,CACP63R,cAAcjvO,GACZv/F,KAAKuuU,WAAahvO,EAClBv/F,KAAK2/H,MAAMgvM,cAAcx7M,UAAY,GAEvCs7M,WAAWl3O,GACT,OAAOA,EAAKj0F,KAAIyQ,GAAK,KAA3B,+CChC8V,MCS9V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCpBhC,IAAI,GAAS,WAAa,IAAIkhC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAAClzC,GAAG,CAAC,QAAU+yC,EAAI25R,eAAetiM,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,wCAAwCw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,mBAAmBw7B,OAAM,MAAS,CAACr3F,EAAG,QAAQ,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,QAAQsjG,QAAQ,UAAU/qG,MAAOmtC,EAAS,MAAEu8D,WAAW,UAAUV,IAAI,QAAQx7D,YAAY,sCAAsCG,MAAM,CAAC,KAAO,QAAQE,SAAS,CAAC,MAASV,EAAS,OAAG/yC,GAAG,CAAC,MAAQ,CAAC+yC,EAAI45R,WAAW,SAAS19N,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,QAAQ,GAAGh7B,EAAO3mE,IAAI,SAAkB,KAAcyK,EAAI25R,cAAc55T,MAAM,KAAMH,YAAY,SAASs8F,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,MAAM,GAAGh7B,EAAO3mE,IAAI,CAAC,MAAM,WAAoB,KAAcyK,EAAIw1K,UAAUz1M,MAAM,KAAMH,aAAa,MAAQ,SAASs8F,GAAWA,EAAO9uG,OAAO4wG,YAAqBh+D,EAAIhH,MAAMkjE,EAAO9uG,OAAOyF,WAAUstC,EAAG,IAAI,CAACH,EAAIg8D,GAAG,iFAAiFh8D,EAAIi8D,GAAGj8D,EAAI5lC,UAAU,KAAK,mBAAmB+lC,EAAG,MAAM,CAACH,EAAIg8D,GAAG,0BAA0Bh8D,EAAIi8D,GAAGj8D,EAAI65R,YAAY,UAC7sC,GAAkB,GCEtB,UACEv/T,KAAM,kBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACL6I,MAAO,GACP6gS,WAAY,KAGhBj0M,UACE76H,KAAKiuC,MAAQr/B,OAAOqgG,SAAS1/F,KAC7BvP,KAAK8uU,WAAa5gK,SAAS+f,aAAajuL,KAAKiuC,QAE/C0uF,UACE38H,KAAK2/H,MAAM1xF,MAAMtjC,UAEnBgsC,QAAS,CACPk4R,aACE7uU,KAAK8uU,WAAa5gK,SAAS+f,aAAajuL,KAAKiuC,QAE/C2gS,gBACEhgU,OAAOqgG,SAAS1/F,KAAOvP,KAAK8uU,WAC5B9uU,KAAKyqN,eC3BoV,MCO/V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIx1K,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAAClzC,GAAG,CAAC,QAAU+yC,EAAI85R,iBAAiBziM,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,oCAAoCw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,kBAAkBw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,wFAAwF77D,EAAG,MAAMA,EAAG,OAAO,CAACE,YAAY,eAAe,CAACL,EAAIg8D,GAAG,kCAAkCh8D,EAAIi8D,GAAGj8D,EAAIhiC,SAAS,WAAYgiC,EAAI+5R,gBAAgB,aACtnB,GAAkB,GCEtB,UACEz/T,KAAM,sBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACL4pS,cAAe,IAGnBr4R,QAAS,CACPxK,SACEnsC,KAAKgvU,cAAgBtsU,OAAOC,KAAKiM,OAAOma,QAAQkwB,UAAU0uE,WAAWpkH,OAC1C,IAAvBvD,KAAKgvU,eAAqBhvU,KAAKyqN,aAErCskH,kBACEngU,OAAOma,QAAQkwB,UAAU0uE,UAAY,GACrC/4G,OAAOma,QAAQkwB,UAAUg8E,kBAAoB,MCpBgT,MCQnW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIhgF,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACE,YAAY,kCAAkCg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAACgzC,EAAG,KAAK,CAACE,YAAY,6BAA6B,CAACL,EAAIg8D,GAAG,+BAA+Bw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,iBAAiB,CAACK,MAAM,CAAC,YAAW,MAAS,MAC9Z,GAAkB,GCGtB,UACElmC,KAAM,eACN0sH,WAAY,CACV6wF,eADJ,GAEIi1G,aAAJ,KCR4V,MCQ5V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI9sR,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAAClzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,0BAA0Bw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,cAAcw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,sEAClY,GAAkB,GCEtB,UACE1hG,KAAM,6BACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACLq+E,SAAU,CACRn+E,KAAM,CAAClrC,OAAQ1B,QACf6sC,UAAU,IAGdO,QAAS,CACPwmR,iBACE,MAAMp3M,EAAS/lH,KAAKs0H,SACdqd,EAAkB93B,iBAAiBhhF,MAAMg7F,eAE/Cha,iBAAiBwe,aAAatS,GAE9B,MAAMkpN,EAAavsU,OAAOW,OAAOuL,OAAOma,QAAQkwB,UAAUP,SAASp1C,KAAIg9B,IAAM,CAC3EtyB,GAAIsyB,EAAGtyB,GACPuB,KAAM+wB,EAAG/wB,SAEPsqG,iBAAiBC,MAAQ63B,IAAoB5rB,EAC/Cn3G,OAAOma,QAAQkwB,UAAUpgB,MAAM22F,aAAemiB,EAG9C/iI,OAAOma,QAAQkwB,UAAUpgB,MAAM22F,aAAey/M,EAAW,GAAGjhU,GAE9D8yF,cAAcgvB,gBACd/tH,SAASe,SAASY,WAAWoD,2BChCuU,MCO1W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAImuC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,4CAA4Cw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,wCAAwC,CAACF,EAAG,MAAM,CAACH,EAAIg8D,GAAG,2GAA2G77D,EAAG,MAAMH,EAAI87D,GAAI97D,EAAgB,cAAE,SAAS0tD,EAAM56F,GAAO,OAAOqtC,EAAG,MAAM,CAAC5K,IAAIziC,GAAO,CAAG46F,EAAM,GAAuevtD,EAAG,MAAM,CAACA,EAAG,IAAI,CAACE,YAAY,uBAAuBL,EAAIg8D,GAAG,KAAK77D,EAAG,IAAI,CAACH,EAAIg8D,GAAG,iBAAiB77D,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGvO,EAAM,IAAI,OAAzmBvtD,EAAG,MAAM,CAAEutD,EAAM,GAAGuiN,UAAYviN,EAAM,GAAG+pJ,YAAat3M,EAAG,OAAO,CAACA,EAAG,IAAI,CAACE,YAAY,0CAA0CF,EAAG,IAAI,CAACH,EAAIg8D,GAAG,0DAA0D77D,EAAG,OAAO,CAACA,EAAG,IAAI,CAACE,YAAY,2CAA2CF,EAAG,IAAI,CAACH,EAAIg8D,GAAG,gDAAgD77D,EAAG,MAAMH,EAAIg8D,GAAG,MAAMh8D,EAAIi8D,GAAGvO,EAAM,GAAGwiN,UAAU,KAAK/vQ,EAAG,MAAMH,EAAIg8D,GAAG,MAAMh8D,EAAIi8D,GAAGvO,EAAM,GAAG+pJ,YAAc/pJ,EAAM,GAAGyiN,cAAgB,SAAS,OAAoJhwQ,EAAG,WAAWH,EAAIi6R,iBAAmBj6R,EAAIk6R,eAAiB,EAAG/5R,EAAG,MAAM,CAACH,EAAIg8D,GAAG,kLAAkLh8D,EAAIi8D,GAAGj8D,EAAI5lC,UAAU,IAAI,gDAAgD4lC,EAAIi8D,GAAGj8D,EAAI5lC,UAAU,KAAK,mFAAmF4lC,EAAIi8D,GAAGj8D,EAAI5lC,UAAU,IAAI,qCAAqC4lC,EAAIi8D,GAAGj8D,EAAIjmC,OAAO,OAAO,YAAYomC,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,4BAA4Bh8D,EAAIi8D,GAAGj8D,EAAIm6R,UAAU,uCAAuCn6R,EAAIi8D,GAAGj8D,EAAIo6R,iBAAiB,MAAOp6R,EAAIq6R,cAAgBr6R,EAAI0vQ,aAAcvvQ,EAAG,OAAO,CAACH,EAAIg8D,GAAG,0DAA0Dh8D,EAAIi8D,GAAGj8D,EAAI29O,cAAc,QAAQ39O,EAAI+8D,KAAK58D,EAAG,MAAMA,EAAG,MAAMA,EAAG,gBAAgB,CAACE,YAAY,yBAAyBG,MAAM,CAAC,QAAUR,EAAIi6R,iBAAmB,GAAKj6R,EAAIs6R,YAAYrtU,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIu6R,gBAAgBv6R,EAAIi6R,qBAAqB,CAACj6R,EAAIg8D,GAAG,yCAAyCh8D,EAAIi8D,GAAGj8D,EAAI5lC,UAAU4lC,EAAIi6R,mBAAmB,aAAa95R,EAAG,MAAMA,EAAG,gBAAgB,CAACE,YAAY,yBAAyBG,MAAM,CAAC,QAAUR,EAAIk6R,eAAiB,GAAKl6R,EAAIs6R,YAAYrtU,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIw6R,cAAcx6R,EAAIk6R,mBAAmB,CAACl6R,EAAIg8D,GAAG,sCAAsCh8D,EAAIi8D,GAAGj8D,EAAI5lC,UAAU4lC,EAAIk6R,iBAAiB,cAAc,GAAG/5R,EAAG,MAAM,CAACA,EAAG,IAAI,CAACH,EAAIg8D,GAAG,sCAAsC,MACrnF,GAAkB,GCGtB,UACE1hG,KAAM,qBACN0sH,WAAY,CACV8lM,aADJ,GAEIx/L,cAAJ,IAEEn9F,OACE,MAAO,CACLkqS,cAAe,IAAItmU,QAAQ,GAC3B27S,aAAc,EACd4qB,YAAY,EACZG,aAAc,GACdR,iBAAkB,EAClBC,eAAgB,EAChBQ,MAAO,IAGXp5R,SAAU,CACR64R,WACE,MAAO,GAAGn8T,SAAS,OAAQ1B,SAASC,iBAAiBxR,KAAK2kT,cAAcvuS,WAAY,MAEtFi5T,kBACE,MAAO,GAAGp8T,SAAS,OAAQ1B,SAASC,iBAAiBxR,KAAKsvU,eAAel5T,WAAY,MAEvFs2O,YAAY1+O,GACV,OAAOhO,KAAK4vU,gBAAgBniU,MAAKk1F,GAASA,EAAM30F,KAAOA,KAKzD4kR,eACE,GAAI5yR,KAAKsvU,eAAiBtvU,KAAK2kT,aAAc,MAAO,GAGpD,MAAMkrB,EAAY,KAAQp+R,SAASqqB,kBACzC,0CACA,wBACYg0Q,EAAgB9vU,KAAKsvU,cAAgBO,EACrCE,EAAgB/vU,KAAK2kT,aAAekrB,EAGpCG,GAAmBz+T,SAASwyS,UAAU,MAAM/sS,kBAAoBhX,KAAKsvU,eAAiBO,EAC5F,GAAIt+T,SAASs6F,YAAYmkO,GAAiB15T,UAAYtW,KAAK2vU,MACzD,MAAO,GAAGp+T,SAASs6F,YAAYmkO,GAAiBn+T,eAAc,KAIhE,MAAMo+T,EAAIpvU,KAAKgd,IAAI,EAAG,EAAI,OACpBjQ,EAAImiU,EAAgBlvU,KAAKkK,IAAIklU,GAAKpvU,KAAKgd,IAAIoyT,EAAGH,GAC9CI,EAAa/4S,WAAWvpB,GAAK/M,KAAKkK,IAAIklU,GAAKH,EACjD,MAAO,GAAGv+T,SAASs6F,YAAYqkO,GAAYr+T,eAAc,OAG7D8kC,QAAS,CACPxK,SACEnsC,KAAKsvU,cAAc3lU,SAASiF,OAAOC,WAAWm9D,SAASmtB,QACvDn5F,KAAK2kT,aAAelzQ,SAASkzQ,aAC7B3kT,KAAKuvU,WAAavvU,KAAKsvU,eAAiBtvU,KAAK2kT,aAC7C3kT,KAAK0vU,aAAe,GAEpB1vU,KAAKkvU,iBAAmB1+J,iBAAiBnkH,IAAI9oD,OAC7C,IAAK,MAAM+xT,KAAQ9kJ,iBAAiBnkH,IAC9BipQ,EAAKpQ,UACPllT,KAAK0vU,aAAaltU,KAAK,EAAC,EAAO8yT,IAC/Bt1T,KAAKkvU,oBAIT,MAAMiB,EAAiBvhU,OAAOC,WAAWm9D,SAASm3E,gBAClD,IAAK,IAAIitL,EAAU,EAAGA,EAAUD,EAAgBC,IAC9CpwU,KAAK0vU,aAAaltU,KAAK,EAAC,EAAMkqE,aAAa79D,WAAWm9D,SAAS0P,WAAW00P,KAE5EpwU,KAAKmvU,eAAiBziQ,aAAa79D,WAAWm9D,SAAS0P,WAAWn4E,OAAS4sU,EAE3EnwU,KAAK2vU,MAAQl+R,SAASmzQ,mBAExB4qB,gBAAgBz/R,GACVA,GAAa,IAAM0B,SAASszQ,oBAChCv0I,iBAAiBnkH,IAAIzpD,QAAO0yT,IAASA,EAAKpQ,UAAS/3S,gBAAgBo+B,UAErEkkS,cAAc1/R,GACRA,GAAa,IAAM0B,SAASszQ,oBAChCn2S,OAAOC,WAAWm9D,SAASm3E,qBCtFiU,MCQlW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIluG,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,sBAAsBvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,6BAA6Bw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,cAAcw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,0DAA0D77D,EAAG,kBAAkB,CAACK,MAAM,CAAC,eAAc,EAAK,OAASR,EAAIihJ,YAAYjhJ,EAAIg8D,GAAG,sEAAsE,MAC3nB,GAAkB,GCGtB,UACE1hG,KAAM,0BACN0sH,WAAY,CACVk/L,mBADJ,GAEIt9D,gBAAJ,IAEE5nN,MAAO,CACLo6R,WAAY,CACVl6R,KAAM5sC,OACN6sC,UAAU,IAGdhR,OACE,MAAO,CACL8wJ,SAAU,KAGdv/I,QAAS,CACPxK,SACEnsC,KAAKk2L,SAAWl1I,OAAOqxC,eAAezjF,OAAOma,QAAQsmB,OAAO+vG,KAAKp/I,KAAKqwU,YAAYhhS,SAEpF8tR,iBACEvuT,OAAOma,QAAQsmB,OAAO+vG,KAAKp/I,KAAKqwU,YAAYhhS,OAAS,GACrDttC,SAASe,SAASY,WAAW2B,0BC3BoU,MCOvW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAI4vC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI1lC,MAAM,OAAOk9H,OAAM,MAAS,CAAEx3F,EAAoB,iBAAEG,EAAG,MAAM,CAACH,EAAIg8D,GAAG,2BAA2Bh8D,EAAIi8D,GAAGj8D,EAAI5lC,UAAU4lC,EAAIkiI,cAAc,OAAOliI,EAAI+8D,KAAM/8D,EAAe,YAAEG,EAAG,eAAe,CAACK,MAAM,CAAC,YAAYR,EAAI5F,OAAO,eAAc,KAAQ4F,EAAI+8D,KAAK58D,EAAG,MAAM,CAACG,MAAMN,EAAI89F,gBAAgB99F,EAAI87D,GAAI97D,EAAU,QAAE,SAASge,EAAM1mD,GAAK,OAAO6oC,EAAG,0BAA0B,CAAC5K,IAAIj+B,EAAI+oC,YAAY,8BAA8BG,MAAM,CAAC,IAAMlpC,EAAI,MAAQ0mD,EAAM,cAAche,EAAIsxN,iBAAiB,sBAAsBtxN,EAAI07M,kBAAkB,oBAAoB17M,EAAIq7R,gBAAgB,iBAAiBr7R,EAAI2oN,uBAAsB,IAAI,IAC9xB,GAAkB,GCDlB,GAAS,WAAa,IAAI3oN,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,OAAO,CAAC9qC,MAAO2qC,EAAa,WAAG,CAACA,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAIs7R,oBAAqBt7R,EAAa,UAAEG,EAAG,MAAM,CAACO,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAI+8M,cAAc/8M,EAAI+8D,KAAK58D,EAAG,iBAAiB,CAAC5K,IAAIyK,EAAI1oC,IAAI+oC,YAAY,8BAA8BG,MAAM,CAAC,MAAQR,EAAIge,MAAM,iBAAiBhe,EAAIw7M,eAAiBx7M,EAAI6iD,aAAa,WAAY,EAAM,UAAW,EAAK,yBAAwB,EAAM,sBAAsB7iD,EAAI07M,kBAAkB,eAAc,EAAK,KAAO,OAAO,kBAAkB,GAAI,YAAY,SAAS,cAAc,UAAUzuP,GAAG,CAAC,QAAU,SAASivG,GAAQ,OAAOl8D,EAAImrN,WAAWnrN,EAAIge,WAAW7d,EAAG,MAAM,CAAC9qC,MAAO2qC,EAAe,aAAG,CAACA,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIu7R,eAAe,QAAQ,GAAGp7R,EAAG,MAAM,CAACE,YAAY,6BAA6BhrC,MAAO2qC,EAAe,aAAGA,EAAI87D,GAAI97D,EAAmB,iBAAE,SAASw7R,EAAU1oU,GAAO,OAAOqtC,EAAG,MAAM,CAAC5K,IAAIziC,EAAMwtC,MAAM,CAAE,mBAAoBk7R,EAAUj+E,kBAAmB,CAACv9M,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGu/N,EAAUviS,MAAM,UAAS,MACrjC,GAAkB,GCEtB,UACE3+B,KAAM,0BACN0sH,WAAY,CACVohI,eAAJ,IAEEpnN,MAAO,CACL1pC,IAAK,CACH4pC,KAAM5sC,OACN6sC,UAAU,GAEZ6c,MAAO,CACL9c,KAAMzzC,OACN0zC,UAAU,GAEZs6R,UAAW,CACTv6R,KAAM/K,QACNgL,UAAU,GAEZu6M,kBAAmB,CACjBx6M,KAAM5sC,OACN4wH,QAAS,GAEXm2M,gBAAiB,CACfn6R,KAAM5sC,OACN6sC,UAAU,GAEZq6M,cAAe,CACbt6M,KAAM/K,QACNgL,UAAU,IAGdhR,OACE,MAAO,CACL0yD,cAAc,IAGlBvhD,SAAU,CACRJ,OACE,OAAOn2C,KAAKizD,MAAM9c,MAEpBo6R,kBACE,OAAOvwU,KAAKm2C,KAAKjrC,cAEnB4xC,QACE,OAAO98C,KAAKizD,MAAMnW,OAEpB+2M,iBACE,OAAOoG,sBAAsBj6P,KAAKizD,MAAOjzD,KAAK2wP,mBAAmB,IAEnEkE,gBACE,OAAO70P,KAAK6zP,gBAAkB7zP,KAAK6zP,eAAiB7zP,KAAK88C,OAE3Dg4M,iBACE,OAAO90P,KAAK6zP,gBAAkB7zP,KAAK6zP,eAAiB7zP,KAAK88C,OAE3Dk1M,YACE,GAAkB,cAAdhyP,KAAKm2C,KAAsB,MAAO,GAEtC,MAAMsE,EAAQz6C,KAAK60P,cACzB,mCACA,wDAEYhmN,EAAQ7uC,KAAK60P,cACzB,UACA,mDACM,MAAO,uBAAuBhmN,0BAChB4L,IAAQprC,UAAUrP,KAAK6zP,kBAAkBp5M,gCAGzDk2R,YAEE,MAAO,CACL9hS,MAAOs+D,uBAAuBonJ,eAAev0P,KAAKm2C,MAClD,cAAe,OACf,cAA6B,WAAdn2C,KAAKm2C,MAA5B,iEACQ6gI,UAAyB,YAAdh3K,KAAKm2C,KAAqB,sDAAmD5zC,IAG5FquU,cAEE,MAAM/hS,EAAQslN,mBAAmBn0P,KAAKizD,MAAM9c,MAAMoiN,kBACxD,iDACA,kFACM,MAAO,CACL1pN,MAAAA,EACA,cAAe,SAGnBgiS,cACE,MAAO,CACL,aAA8B,YAAd7wU,KAAKm2C,KAAqB,EAAI,KAAjC,MACb,OAAUn2C,KAAK8wU,sBAAsB9wU,KAAKswU,mBAG9CS,kBACE,MAAMtkQ,EAAKk9D,aACLp/F,EACZ,sGACA,sEACYymS,EAAgBzmS,EAC5B,mDAEM,OAAOymS,EAAcpuU,QAAOiV,GAAW,cAANA,KAEnC24T,gBACE,MAAwB,cAApBxwU,KAAKizD,MAAM9c,MAA4C,WAApBn2C,KAAKizD,MAAM9c,MAAmC,YAAdn2C,KAAKm2C,KAA2B,GAChGtlC,aAAaswC,iBAAiBnhD,KAAKizD,MAAMlW,aAGpDpG,QAAS,CACPxK,SACEnsC,KAAK83F,aAAet2C,sBAAsBs2C,cAE5Cg5O,sBAAsBvmS,GACpB,MAAM0mS,EAAU,CACtB,OACA,OACA,OACA,SAEM,OAAOA,EAAQ1mS,EAAU,IAE3B2mS,mBAAmBttD,EAAS97Q,GAC1B,MAAMqpU,EAAUvtD,EAAQ/mO,UAClBu0R,EAAcxtD,EAAQ3mO,mBAClC,wBACA,kBACYo0R,EAAeztD,EAAQ3lO,WACnC,yCACA,GACM,IAAIqzR,EAAc,EAAxB,iJACM,MAAO,CACLpjS,KAAM,GAAGijS,IACjB,qBACA,sBACQ3+E,gBAAiB8+E,IAGrBlxE,WAAWntM,GACLjS,OAAO4pB,aAAa3X,IACtB,IAAIo6J,MAAM,aAAajlM,YAAYngB,QAAQgrD,EAAM9c,MAAQ,SAAS8gI,UC/I6R,MCQvW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCdhC,IACE1nK,KAAM,0BACN0sH,WAAY,CACVqhI,aADJ,GAEIykE,aAFJ,GAGIwP,wBAAJ,IAEEt7R,MAAO,CACL1mC,KAAM,CACJ4mC,KAAMlrC,OACNmrC,UAAU,GAEZ8/I,SAAU,CACR//I,KAAMxuC,MACNyuC,UAAU,GAEZmwN,iBAAkB,CAChBpwN,KAAM/K,QACN+uF,SAAS,GAEXqsI,YAAa,CACXrwN,KAAM/K,QACN+uF,SAAS,GAEXyjI,iBAAkB,CAChBznN,KAAM/K,QACN+uF,SAAS,IAGb/0F,OACE,MAAO,CACLiK,OAAQ,GACR8nI,YAAa,EACbr/E,cAAc,EACd64J,kBAAmB,IAGvBp6M,SAAU,CACR+5R,kBACE,IAAIkB,EAAa,EACjB,IAAK,MAAMv+Q,KAASjzD,KAAKqvC,OACvBmiS,EAAa3wU,KAAKuH,IAAI+gE,2BAA2BlW,EAAM1oB,SAAS3nC,QAAOs3B,GAAKA,EAAEwiB,cAAan5C,OAAQiuU,GAErG,OAAOA,GAETz+L,iBACE,MAAO,CACL,4BAA4B,EAC5B,kCAA0D,IAAvB/yI,KAAKqvC,OAAO9rC,UAIrDozC,QAAS,CACPxK,SACEnsC,KAAKqvC,OAASrvC,KAAKumQ,iBACzB,wEAAQ,iBAAR,IACA,6BACMvmQ,KAAKm3K,YAAcp0H,mBAAmBC,YAEtC,MAAM06M,EAAe19P,KAAKqvC,OAAOzsC,QAAO6vB,GAAgB,YAAXA,EAAE0jB,OAAoB,GACnEn2C,KAAK2wP,kBAAoB+M,EAC/B,+CACA,KCnEuW,MCQvW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIzoN,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,mBAAmB,CAAClzC,GAAG,CAAC,MAAQ+yC,EAAIw1K,aAAax1K,EAAIg6F,GAAG,GAAG75F,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,QAAQ,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,QAAQsjG,QAAQ,UAAU/qG,MAAOmtC,EAAe,YAAEu8D,WAAW,gBAAgBV,IAAI,QAAQx7D,YAAY,mBAAmBG,MAAM,CAAC,YAAc,qBAAqBE,SAAS,CAAC,MAASV,EAAe,aAAG/yC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,MAAM,GAAGh7B,EAAO3mE,IAAI,CAAC,MAAM,WAAoB,KAAcyK,EAAIw1K,UAAUz1M,MAAM,KAAMH,YAAY,MAAQ,SAASs8F,GAAWA,EAAO9uG,OAAO4wG,YAAqBh+D,EAAIw8R,YAAYtgO,EAAO9uG,OAAOyF,WAAUstC,EAAG,MAAM,CAACE,YAAY,kBAAkBL,EAAI87D,GAAI97D,EAAgB,cAAE,SAASy8R,EAAUC,GAAa,OAAOv8R,EAAG,MAAM,CAAC5K,IAAIknS,EAAUnyO,IAAIhwF,KAAK+lC,YAAY,mBAAmBC,MAAM,CAC97B,6BAA8Bm8R,EAAUnyO,MAAQtqD,EAAI28R,UACpD,6BAA8BF,EAAU5sO,UAAY7vD,EAAI48R,aACxD,qCAAsC58R,EAAI68R,kBAAkBH,IAC5DzvU,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAI88R,aAAaL,EAAUnyO,QAAQ,CAACtqD,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGwgO,EAAUnyO,IAAIgC,OAAO,UAAS,KAAKnsD,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,MAAM,CAACE,YAAY,qBAAqB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI28R,UAAUriU,MAAM,OAAO6lC,EAAG,MAAM,CAACE,YAAY,wBAAwBG,MAAM,CAAC,GAAK,YAAYE,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAI28R,UAAUp6O,gBAAgB,IACpY,GAAkB,CAAC,WAAa,IAAIviD,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACL,EAAIg8D,GAAG,uBCF9L,UACE1hG,KAAM,WACN0sH,WAAY,CACVi6K,iBAAJ,IAEE9wQ,OACE,MAAO,CACL4sS,MAAO,EACPP,YAAa,KAGjBl7R,SAAU,CACRq7R,UAAW,CACTl/T,MACE,OAAOg6D,aAAa2yB,IAAI5kB,KAAKz6E,KAAKgyU,QAEpCn/T,IAAI0sF,GACFv/F,KAAKgyU,MAAQzyO,EAAIvxF,KAGrBikU,eACE,OAAOvlQ,aAAa2yB,IAAI7rF,OAAOxT,KAAKyxU,aAAa7uU,QAAO8uU,GAAaA,EAAUnyO,IAAIp0D,gBAErF0mS,eACE,OAAOhxU,KAAKC,IAAId,KAAKiyU,aAAapxU,KAAKC,IAAId,KAAKiyU,aAAa1uU,OAAS,EAAG,IAAIuhG,UAAY,IAAM,MAGnG+1B,UACE,MAAMq3M,EAAexlQ,aAAa2yB,IAAI5kB,KAAK73E,QAAO28F,GAAOA,EAAIp0D,eACvDo0D,EAAMv/F,KAAK68H,WAAWt9B,IACtB6jF,EAAS,GAAG7jF,KAAOv/F,KAAK68H,WAAWumD,SACnC+uJ,EAAeD,EAAa1kU,MAAK4kU,GAAUA,EAAO7yO,MAAQ6jF,GAAUgvJ,EAAO7yO,MAAQA,IACzFv/F,KAAK4xU,UAAYnuU,GAAG+2E,KAAK6oG,cAAgB8uJ,GAAgBD,EAAa,GACtEzuU,GAAG+2E,KAAK6oG,kBAAe9gL,EAEnB42H,SAAS40F,iBAAgB/tN,KAAK4xU,UAAYllQ,aAAa2yB,IAAI5kB,KAAK,KAEtEkiD,UACE38H,KAAK2/H,MAAM1xF,MAAMtjC,UAEnBgsC,QAAS,CACPo7R,aAAaxyO,GACXv/F,KAAK4xU,UAAYryO,EACjBr1F,SAASqP,eAAe,YAAY45G,UAAY,GAElD2+M,kBAAkBvlU,GAChB,MAAM8lU,EAAUryU,KAAKiyU,aACfK,EAAgBD,EAAQ9lU,GACxBgmU,EAAiBF,EAAQ9lU,EAAM,GAErC,OAAOA,EAAM,GACnB,gCACA,iCCvDwV,MCQxV,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI0oC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,eAAeR,EAAIoB,QAAQ,eAAepB,EAAIoB,SAASn0C,GAAG,CAAC,QAAU+yC,EAAIu9R,YAAYlmM,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,oCAAoCw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,cAAcw7B,OAAM,MAAS,CAACx3F,EAAIg8D,GAAG,sEAAuEh8D,EAAwB,qBAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,kEAAkEh8D,EAAI+8D,KAAK58D,EAAG,QAAQ,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,QAAQsjG,QAAQ,UAAU/qG,MAAOmtC,EAAS,MAAEu8D,WAAW,UAAUV,IAAI,QAAQx7D,YAAY,sCAAsCG,MAAM,CAAC,KAAO,QAAQE,SAAS,CAAC,MAASV,EAAS,OAAG/yC,GAAG,CAAC,MAAQ,CAAC,SAASivG,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,QAAQ,GAAGh7B,EAAO3mE,IAAI,SAAkB,KAAcyK,EAAIu9R,WAAWx9T,MAAM,KAAMH,YAAY,SAASs8F,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,MAAM,GAAGh7B,EAAO3mE,IAAI,CAAC,MAAM,WAAoB,KAAcyK,EAAIw1K,UAAUz1M,MAAM,KAAMH,aAAa,MAAQ,SAASs8F,GAAWA,EAAO9uG,OAAO4wG,YAAqBh+D,EAAIhH,MAAMkjE,EAAO9uG,OAAOyF,WAAWmtC,EAAW,QAAEG,EAAG,MAAM,CAACH,EAAIg8D,GAAG,iBAAiBh8D,EAAIi8D,GAAGj8D,EAAI8+E,YAAY,KAAK3+E,EAAG,MAAMH,EAAIg8D,GAAG,gBAAgBh8D,EAAIi8D,GAAGj8D,EAAIw9R,WAAW,KAAMx9R,EAAc,WAAEG,EAAG,MAAM,CAACA,EAAG,MAAMH,EAAIg8D,GAAG,oBAAoBh8D,EAAI87D,GAAI97D,EAAmB,iBAAE,SAASoD,EAAOrqC,GAAI,OAAOonC,EAAG,OAAO,CAAC5K,IAAIx8B,EAAGsnC,YAAY,sBAAsB,CAAE+C,EAAW,KAAEjD,EAAG,OAAO,CAACH,EAAIg8D,GAAG,IAAKh8D,EAAIi8D,GAAG74D,EAAO9oC,MAAM,WAAY0lC,EAAIi8D,GAAG74D,EAAOrqC,GAAK,GAAG,OAAOonC,EAAG,OAAO,CAACH,EAAIg8D,GAAG,gBAAgBh8D,EAAIi8D,GAAG74D,EAAOrqC,GAAK,YAAYinC,EAAIy9R,eAAiBz9R,EAAI09R,uBAAyB,EAAGv9R,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI5lC,UAAU4lC,EAAI09R,yBAAyB,yEAAyE19R,EAAI+8D,KAAK58D,EAAG,MAAMA,EAAG,SAAS,CAACE,YAAY,gBAAgBpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQl8D,EAAIy9R,eAAiBz9R,EAAIy9R,iBAAiB,CAACz9R,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI29R,kBAAkB,QAAQ,GAAG39R,EAAI+8D,KAAM/8D,EAAgB,aAAEG,EAAG,MAAM,CAACA,EAAG,MAAMH,EAAIg8D,GAAG,gBAAgBh8D,EAAI87D,GAAI97D,EAAqB,mBAAE,SAASy9D,EAAS1kG,GAAI,OAAOonC,EAAG,OAAO,CAAC5K,IAAIx8B,EAAK,GAAGsnC,YAAY,sBAAsB,CAACL,EAAIg8D,GAAG,KAAMh8D,EAAIi8D,GAAGwB,EAASloE,KAAK,YAAayK,EAAI49R,kBAAoB59R,EAAI69R,uBAAyB79R,EAAI89R,eAAiB,GAAI39R,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAAEL,EAAyB,sBAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,0DAA0Dh8D,EAAI+8D,KAAM/8D,EAAI69R,uBAAyB79R,EAAI89R,eAAiB,EAAG39R,EAAG,MAAMH,EAAI+8D,KAAM/8D,EAAI89R,eAAiB,EAAG39R,EAAG,OAAO,CAACH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI9hC,YAAY,WAAY8hC,EAAI89R,iBAAiB,oCAAoC99R,EAAIi8D,GAAGj8D,EAAIs4F,kBAAkB,uBAAuBt4F,EAAI+8D,OAAO/8D,EAAI+8D,KAAK58D,EAAG,MAAMA,EAAG,SAAS,CAACE,YAAY,gBAAgBpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQl8D,EAAI49R,iBAAmB59R,EAAI49R,mBAAmB,CAAC59R,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI+9R,oBAAoB,QAAQ,GAAG/9R,EAAI+8D,KAAK58D,EAAG,MAAOH,EAAa,UAAEG,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACL,EAAIg8D,GAAG,2EAA2Eh8D,EAAI+8D,KAAM/8D,EAAIm4L,WAAan4L,EAAIg+R,qBAAsB79R,EAAG,MAAM,CAACA,EAAG,IAAI,CAACH,EAAIg8D,GAAG,yEAAyEh8D,EAAI+8D,OAA6B,IAArB/8D,EAAIhH,MAAM1qC,OAAc6xC,EAAG,MAAM,CAACH,EAAIg8D,GAAG,qCAAqCh8D,EAAI+8D,QACh4G,GAAkB,GCItB,UACEziG,KAAM,2BACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACL6I,MAAO,GACPoI,SAAS,EACT68R,cAAc,EACdn/M,WAAY,GACZ0+M,UAAW,EACXU,cAAe,GACf/lG,WAAW,EACXgmG,gBAAiB,GACjBC,kBAAmB,GACnBX,eAAe,EACfG,iBAAiB,IAGrBt8R,SAAU,CACR02F,aAAJ,QACM,OAAN,8FAEIC,eAAJ,QACM,OAAN,gGAEI+lM,uBAGE,MAAMK,EAAkBtzU,KAAK8yU,uBAAyB9yU,KAAKuzU,yBAA2BvzU,KAAKwzU,iBACrFC,IAAqBzzU,KAAKozU,kBAAmBpzU,KAAK0yU,cAClDgB,IAAuB1zU,KAAKqzU,qBACxC,yBAEM,OAAOrzU,KAAKq2C,SAAWr2C,KAAKkzU,eAAiBO,GAAsBC,IAErEC,eAAgB,IAAM/kU,OAAO2pC,UAAUC,QACvCg7R,iBAAkB,IAAM9wU,OAAOC,KAAKiM,OAAOma,QAAQkwB,UAAU0uE,WAC7D4lB,mBACE,OAAOzsC,cAAcO,4BAGvBsxO,yBACE,IAAIiB,EAAoB,EACxB,IAAK,MAAMC,KAAY7zU,KAAKozU,gBAAiB,CAC3C,MAAMU,EAAiB9zU,KAAK2zU,eAAeE,EAAS7lU,IAC9C0lH,EAAkC,KAAxBogN,EAAevkU,MAA0C,KAA3BukU,EAAezrQ,QACxDqrD,GAAYogN,EAAevkU,OAASskU,EAAStkU,MAAQukU,EAAezrQ,UAAYwrQ,EAASxrQ,SAC5FurQ,IAGJ,OAAOA,GAETd,wBACE,IAAK9yU,KAAKkzU,aAAc,OAAO,EAC/B,MAAM7mR,EAAM,IAAI9+C,IAChB,IAAK,MAAMmlG,KAAY1yG,KAAKwzU,iBAAkBnnR,EAAIjjD,IAAIspG,GACtD,IAAK,MAAMA,KAAY1yG,KAAKqzU,kBAC1B,GAAIhnR,EAAIhgB,IAAIqmE,EAASloE,MAAQ57B,OAAOma,QAAQkwB,UAAU0uE,UAAUjV,EAASloE,OAASkoE,EAAS5qG,MAAO,OAAO,EAE3G,OAAO,GAETyrU,2BACE,IAAKvzU,KAAKkzU,aAAc,OAAOlzU,KAAKwzU,iBAAiBjwU,OACrD,MAAM8oD,EAAM,IAAI9+C,IAChB,IAAK,MAAMmlG,KAAY1yG,KAAKwzU,iBAAkBnnR,EAAIjjD,IAAIspG,GACtD,IAAK,MAAMA,KAAY1yG,KAAKqzU,kBAAmBhnR,EAAIjjD,IAAIspG,EAASloE,KAChE,OAAO6hB,EAAIga,MAEb0sQ,iBACE,OAAO/yU,KAAKuzU,yBAA2BvzU,KAAKutI,kBAE9CqlM,mBACE,OAAO5yU,KAAK0yU,cAAgB,sBAAwB,uBAEtDM,qBACE,OAAOhzU,KAAK6yU,gBAAkB,wBAA0B,0BAG5Dl2M,UACE38H,KAAK2/H,MAAM1xF,MAAMtjC,UAEnBgsC,QAAS,CACPxK,SAGE,IAAIqqF,EAAS3c,iBAAiB+c,oBAAoB52H,KAAKiuC,OACnDuoF,EAAQx2H,KAAKkzU,cAAe,GAE9B18M,EAAS3c,iBAAiBsc,oBAAoBn2H,KAAKiuC,OACnDjuC,KAAKkzU,cAAe,GAEjB18M,GAOLx2H,KAAK+zH,WAAayC,EAAOjnH,KACzBvP,KAAKmzU,cAAgB38M,EAAO/H,QAC5BzuH,KAAKozU,gBAAkB58M,EAAOh+E,QAC9Bx4C,KAAKqzU,kBAAoB78M,EAAO7O,UAChC3nH,KAAKyyU,UAAYzyU,KAAKmzU,cAAcnhU,MAAM,MAAMzO,OAChDvD,KAAKotO,UAAYrjH,GAAqB/pH,KAAKmzU,eAC3CnzU,KAAKq2C,SAAU,GAZbr2C,KAAKq2C,SAAU,GAcnBm8R,aACOxyU,KAAKq2C,UACNr2C,KAAKkzU,aACPr5N,iBAAiBkd,qBAAqB/2H,KAAKiuC,MAAO,CAChDuK,QAASx4C,KAAK0yU,cACd/qN,UAAW3nH,KAAK6yU,kBAGlBh5N,iBAAiB0c,qBAAqBv2H,KAAKiuC,OAE7CjuC,KAAKyqN,gBC3H6V,MCQxW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIx1K,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,eAAeR,EAAI8+R,aAAa,gBAAe,GAAOznM,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,oCAAoCw7B,OAAM,MAAS,CAACx3F,EAAIg8D,GAAG,kEAAkE77D,EAAG,MAAMH,EAAIg8D,GAAG,+DAA+D77D,EAAG,QAAQ,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,QAAQsjG,QAAQ,UAAU/qG,MAAOmtC,EAAS,MAAEu8D,WAAW,UAAUV,IAAI,QAAQx7D,YAAY,sCAAsCG,MAAM,CAAC,KAAO,QAAQE,SAAS,CAAC,MAASV,EAAS,OAAG/yC,GAAG,CAAC,MAAQ,CAAC,SAASivG,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,QAAQ,GAAGh7B,EAAO3mE,IAAI,SAAkB,KAAcyK,EAAIu9R,WAAWx9T,MAAM,KAAMH,YAAY,SAASs8F,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,MAAM,GAAGh7B,EAAO3mE,IAAI,CAAC,MAAM,WAAoB,KAAcyK,EAAIw1K,UAAUz1M,MAAM,KAAMH,aAAa,MAAQ,SAASs8F,GAAWA,EAAO9uG,OAAO4wG,YAAqBh+D,EAAIhH,MAAMkjE,EAAO9uG,OAAOyF,WAAUstC,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAAGL,EAAIhH,MAAkBgH,EAAgB,aAAEG,EAAG,MAAM,CAACA,EAAG,IAAI,CAACH,EAAIg8D,GAAG,qBAAqBh8D,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI++R,WAAW,KAAK5+R,EAAG,MAAMA,EAAG,IAAI,CAACH,EAAIg8D,GAAG,yCAA2Ch8D,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIg/R,eAAe,KAAK7+R,EAAG,MAAMA,EAAG,IAAI,CAACH,EAAIg8D,GAAG,sBAAsBh8D,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIi/R,UAAU,KAAK9+R,EAAG,MAAMA,EAAG,IAAI,CAACA,EAAG,IAAI,CAACH,EAAIg8D,GAAG,8BAA8Bh8D,EAAIg8D,GAAG,KAAK77D,EAAG,OAAO,CAACK,MAAM,CAAC,cAAcR,EAAIk/R,qBAAqB,CAAC/+R,EAAG,IAAI,CAACE,YAAY,6BAA6BF,EAAG,MAAMH,EAAI87D,GAAI97D,EAAkB,gBAAE,SAASkB,GAAM,OAAOf,EAAG,yBAAyB,CAAC5K,IAAI2L,EAAKb,YAAY,gBAAgBG,MAAM,CAAC,KAAOU,EAAK,gBAAgBlB,EAAIm/R,gBAAgB1pM,MAAMv0F,GAAM,eAAelB,EAAIo/R,eAAe3pM,MAAMv0F,UAAY,GAAGf,EAAG,MAAM,CAACH,EAAIg8D,GAAG,uCAA9uB77D,EAAG,SAAqxBH,EAAgB,aAAEG,EAAG,gBAAgB,CAACE,YAAY,6EAA6EpzC,GAAG,CAAC,MAAQ+yC,EAAIg1N,eAAe,CAACh1N,EAAIg8D,GAAG,cAAch8D,EAAI+8D,MAAM,IACnmE,GAAkB,GCDlB,GAAS,WAAa,IAAI/8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIrG,QAAQ,MAAOqG,EAAmB,gBAAEG,EAAG,OAAO,CAACA,EAAG,OAAO,CAACE,YAAY,gBAAgB,CAACF,EAAG,OAAO,CAACE,YAAY,WAAWC,MAAMN,EAAIq/R,oBAAoB,UAAU7+R,MAAM,CAAC,cAAc,sDAAsD,CAACR,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIs/R,WAAW,OAAOn/R,EAAG,OAAO,CAACE,YAAY,kBAAkBC,MAAMN,EAAIq/R,oBAAoB,eAAe7+R,MAAM,CAAC,cAAc,0CAA0C,CAACR,EAAIg8D,GAAG,qBAAqBh8D,EAAIi8D,GAAGj8D,EAAIu/R,WAAW,OAAOp/R,EAAG,OAAO,CAACE,YAAY,iBAAiBC,MAAMN,EAAIq/R,oBAAoB,SAAS7+R,MAAM,CAAC,cAAc,+BAA+B,CAACR,EAAIg8D,GAAG,WAAWh8D,EAAIi8D,GAAGj8D,EAAIw/R,UAAU,SAASr/R,EAAG,MAAMA,EAAG,OAAO,CAACE,YAAY,gBAAgBL,EAAI87D,GAAI97D,EAAIy/R,WAAW/oU,MAAM,EAAG,IAAI,SAAS27B,GAAQ,OAAO8N,EAAG,OAAO,CAAC5K,IAAIlD,EAAOmV,aAAanH,YAAY,iBAAiBC,MAAMN,EAAI0/R,kBAAkBrtS,GAAQmO,MAAM,CAAC,cAAcR,EAAI2/R,cAActtS,KAAU,CAAC2N,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI4/R,eAAevtS,IAAS,UAAS,GAAI2N,EAAIy/R,WAAWnxU,OAAS,EAAG6xC,EAAG,OAAO,CAACE,YAAY,6BAA6B,CAACF,EAAG,MAAMH,EAAI87D,GAAI97D,EAAIy/R,WAAW/oU,MAAM,IAAI,SAAS27B,GAAQ,OAAO8N,EAAG,OAAO,CAAC5K,IAAIlD,EAAOmV,aAAanH,YAAY,wBAAwBC,MAAMN,EAAI0/R,kBAAkBrtS,GAAQmO,MAAM,CAAC,cAAcR,EAAI2/R,cAActtS,KAAU,CAAC2N,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI4/R,eAAevtS,IAAS,WAAU,GAAG2N,EAAI+8D,OAAO58D,EAAG,OAAO,CAACH,EAAIg8D,GAAG,uBACx9C,GAAkB,GCAtB,UACE1hG,KAAM,yBACN0mC,MAAO,CACLE,KAAM,CACJA,KAAMlrC,OACNmrC,UAAU,GAEZ0+R,aAAc,CACZ3+R,KAAMzzC,OACN0zC,UAAU,GAEZ2oJ,YAAa,CACX5oJ,KAAMzzC,OACN0zC,UAAU,IAGdG,SAAU,CACRw+R,kBACE,OAAO79K,KAAKC,UAAUn3J,KAAK80U,gBAAkB59K,KAAKC,UAAUn3J,KAAK++L,cAEnEnwJ,SACE,OAAOpmB,cAAcxoB,KAAKm2C,OAE5B6+R,cACE,MAAO,GAAGh1U,KAAKm2C,KAAK0Y,OAAO,GAAGvjD,gBAAgBtL,KAAKm2C,KAAKpI,UAAU,MAEpEwmS,YACE,OAAOv0U,KAAKi1U,aAAaj1U,KAAK80U,aAAan9Q,OAAQ33D,KAAK++L,YAAYpnI,QAAQ/pD,GAAK+C,eAAe/C,EAAI,QAEtG4mU,YACE,OAAOx0U,KAAKi1U,aAAaj1U,KAAK80U,aAAar1L,YAAaz/I,KAAK++L,YAAYt/C,YAAapwI,YAExFolU,WACE,OAAOz0U,KAAKi1U,aAAaj1U,KAAK80U,aAAat1L,MAAOx/I,KAAK++L,YAAYv/C,MAAOnwI,YAE5EqlU,aACE,MAAMlhE,EAAU,GAChB,IAAK,IAAIzrQ,EAAQ,EAAGA,EAAQ/H,KAAK80U,aAAan1L,aAAap8I,OAAQwE,IAAS,CAC1E,MAAM00C,EAAem6D,mBAAmB4xJ,mBAAmBxoQ,KAAKm2C,MAAQpuC,EACxEyrQ,EAAQhxQ,KAAK,CACXi6C,aAAAA,EACAy4R,OAAV,KAAmBl1U,KAAK80U,aAAap1L,cAAgB,GAArD,GACUy1L,OAAV,KAAmBn1U,KAAK++L,YAAYr/C,cAAgB,GAApD,GACU01L,SAAUp1U,KAAK80U,aAAan1L,aAAa53I,GACzCstU,SAAUr1U,KAAK++L,YAAYp/C,aAAa53I,KAG5C,OAAOyrQ,IAGX78N,QAAS,CACPs+R,aAAa12O,EAAQC,EAAQ11D,GAC3B,OAAIy1D,IAAWC,EAAe11D,EAAQy1D,GAC/B,GAAGz1D,EAAQy1D,MAAWz1D,EAAQ01D,MAEvCq2O,eAAeS,GACb,MAAMC,EAAU,CAACC,EAAY1tU,KAC3B,MAAM2+D,EAAQ+uQ,EAAa,IAAM,IACjC,MAAO,GAAG/uQ,IAAQp3D,UAAUvH,MAExB2tU,EAASF,EAAQD,EAAYJ,OAAQI,EAAYF,UACjDM,EAASH,EAAQD,EAAYH,OAAQG,EAAYD,UAEvD,OAAIC,EAAYF,WAAaE,EAAYD,SAAiBI,EACnD,GAAGA,KAAUC,KAEtBpB,oBAAoB9pS,GAClB,MAAO,CACL,UAAU,EACV,kBAAmBxqC,KAAK80U,aAAatqS,KAASxqC,KAAK++L,YAAYv0J,KAGnEmqS,kBAAkBW,GAChB,MAAO,CACL,UAAU,EACV,kBAAmBA,EAAYJ,SAAWI,EAAYH,QAAUG,EAAYF,WAAaE,EAAYD,WAGzGT,cAAcU,GACZ,OAAO3rM,aAAat9E,IAAI7+C,MAAK0sB,GAAKA,EAAEuiB,eAAiB64R,EAAY74R,cAAgBviB,EAAEwiB,cAAaY,eChFgQ,MCQtW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCdhC,IACE/tC,KAAM,oBACN0sH,WAAY,CACVk/L,mBADJ,GAEI54L,cAFJ,GAGIozM,uBAAJ,IAEEvwS,OACE,MAAO,CACLgvS,gBAAiB,GACjBnmS,MAAO,KAGXsI,SAAU,CACRw9R,eACE,IAAI19M,EACJ,IAEE,OADAA,EAAU72B,mBAAmB82B,WAAWt2H,KAAKiuC,MAAO,gBAC7CooF,EAAQ9yH,OAAS,GAAhC,OAAqC8yH,EAAQvjH,MAAM,cACnD,SACQ,OAAO,IAGXuhU,iBACE,IAAKr0U,KAAK+zU,aAAc,OAAO,KAE/B,MAAM19M,EAAU72B,mBAAmB82B,WAAWt2H,KAAKiuC,MAAO,gBACpD/8B,EAAQmlH,EAAQrkH,MAAM,KACtB4jU,EAAW,GACjB,IAAIC,EAAY,EAChB,IAAK,MAAM1/R,KAAQ5tB,0BAA2B,CAC5C,IAAK4tB,EAAM,SACX,MAAM2/R,EAAW5kU,EAAM2kU,GAAW7jU,MAAM,KACxC4jU,EAASz/R,GAAQ,CACfwhB,OAAQpuD,OAAOusU,EAAS,IACxBt2L,MAAOj2I,OAAOusU,EAAS,IACvBr2L,YAAal2I,OAAOusU,EAAS,IAC7Bp2L,cAAen2I,OAAOusU,EAAS,IAC/Bn2L,aAAcm2L,EAAS,GAAG9jU,MAAM,KAAK1O,KAAIuU,GAAKtO,OAAOsO,MAEvDg+T,IAGF,MAAO,CACLlrU,OAAQpB,OAAO2H,EAAM,IACrBquI,OAAQh2I,OAAO2H,EAAM,IACrBouI,MAAO/1I,OAAO2H,EAAM,IACpBw5H,MAAOkrM,IAGX5B,YACE,OAAOh0U,KAAKi1U,aAAaj1U,KAAKq0U,eAAe1pU,OAAQ3K,KAAKo0U,gBAAgBzpU,QAChF,2CAEIspU,gBACE,OAAOj0U,KAAKi1U,aAAaj1U,KAAKq0U,eAAe90L,OAAQv/I,KAAKo0U,gBAAgB70L,OAAQlwI,YAEpF6kU,WACE,OAAOl0U,KAAKi1U,aAAaj1U,KAAKq0U,eAAe/0L,MAAOt/I,KAAKo0U,gBAAgB90L,OAC/E,0CAGI5I,iBACE,OAAOnuH,0BAA0B3lB,QAAOy2B,IAAMkxG,WAAWM,OAAOvnI,KAAI42B,GAAKA,EAAElsB,KAAIuF,SAAS8lB,MAE1F86S,qBACE,MAAO,kIAIXx3M,UACE38H,KAAK2/H,MAAM1xF,MAAMtjC,UAEnBgsC,QAAS,CACPxK,SACEnsC,KAAKo0U,gBAAkBl9K,KAAKc,MAAMd,KAAKC,UAAUvoJ,OAAOma,QAAQsmB,OAAOzsC,UAEzEqyU,aAAa12O,EAAQC,EAAQ11D,GAC3B,OAAIy1D,IAAWC,EAAe,cACvB,GAAG11D,EAAQy1D,QAAaz1D,EAAQ01D,MAEzCyrK,eAC8B,OAAxBjqQ,KAAKq0U,iBACTr0U,KAAKyqN,YACL77M,OAAOma,QAAQsmB,OAAOzsC,OAAS5C,KAAKq0U,mBCzFuT,MCQjW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIp/R,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,eAAeR,EAAI8+R,aAAa,gBAAe,GAAOznM,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,uBAAuBw7B,OAAM,MAAS,CAACr3F,EAAG,QAAQ,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,QAAQsjG,QAAQ,UAAU/qG,MAAOmtC,EAAS,MAAEu8D,WAAW,UAAUV,IAAI,QAAQx7D,YAAY,sCAAsCG,MAAM,CAAC,KAAO,QAAQE,SAAS,CAAC,MAASV,EAAS,OAAG/yC,GAAG,CAAC,MAAQ,CAAC,SAASivG,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,QAAQ,GAAGh7B,EAAO3mE,IAAI,SAAkB,KAAcyK,EAAIu9R,WAAWx9T,MAAM,KAAMH,YAAY,SAASs8F,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,MAAM,GAAGh7B,EAAO3mE,IAAI,CAAC,MAAM,WAAoB,KAAcyK,EAAIw1K,UAAUz1M,MAAM,KAAMH,aAAa,MAAQ,SAASs8F,GAAWA,EAAO9uG,OAAO4wG,YAAqBh+D,EAAIhH,MAAMkjE,EAAO9uG,OAAOyF,WAAUstC,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAAEL,EAAiB,cAAEG,EAAG,MAAM,CAACH,EAAIg8D,GAAG,WAAYh8D,EAAoB,iBAAE,CAAGA,EAAI8gS,WAAslC3gS,EAAG,MAAM,CAACH,EAAIg8D,GAAG,iEAA3lC,CAAEh8D,EAAY,SAAEG,EAAG,MAAM,CAACH,EAAIg8D,GAAG,eAAeh8D,EAAIi8D,GAAGj8D,EAAI+gS,UAAU,OAAO/gS,EAAI+8D,KAAK58D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,eAAeh8D,EAAIi8D,GAAGj8D,EAAIplC,gBAAgBolC,EAAIpE,WAAY,EAAG,OAAQoE,EAAIvzC,SAA2B,mBAAE0zC,EAAG,MAAM,CAACH,EAAIg8D,GAAG,gBAAgBh8D,EAAIi8D,GAAGj8D,EAAIplC,gBAAgBolC,EAAIyW,WAAY,IAAI,OAAOzW,EAAI+8D,KAAM/8D,EAAIvzC,SAA2B,mBAAE0zC,EAAG,MAAM,CAACH,EAAIg8D,GAAG,gBAAgBh8D,EAAIi8D,GAAGj8D,EAAIplC,gBAAgBolC,EAAIrmC,OAAOq4C,WAAY,IAAI,OAAOhS,EAAI+8D,KAAM/8D,EAAIvzC,SAA0B,kBAAE0zC,EAAG,MAAM,CAACH,EAAIg8D,GAAG,eAAeh8D,EAAIi8D,GAAGj8D,EAAIplC,gBAAgBolC,EAAIrmC,OAAOorC,UAAW,IAAI,OAAO/E,EAAI+8D,KAAM/8D,EAAIvzC,SAA0B,kBAAE0zC,EAAG,MAAM,CAACH,EAAIg8D,GAAG,2BAA2Bh8D,EAAIi8D,GAAGj8D,EAAI5lC,UAAU4lC,EAAIrmC,OAAO+zC,QAAQoJ,sBAAsB,OAAO9W,EAAI+8D,KAAK58D,EAAG,MAAM,CAACE,YAAY,2BAA2B,CAACL,EAAIg8D,GAAG,qDAAqD77D,EAAG,MAAMA,EAAG,MAAM,CAACH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIghS,YAAY,KAAK7gS,EAAG,MAAM,CAACE,YAAY,gBAAgBpzC,GAAG,CAAC,MAAQ+yC,EAAIihS,uBAAuB,CAACjhS,EAAIg8D,GAAG,sBAAsBh8D,EAAIi8D,GAAGj8D,EAAIkhS,aAAa,OAAO/gS,EAAG,OAAO,CAACO,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAImhS,uBAA0GnhS,EAAY,SAAEG,EAAG,MAAM,CAACH,EAAIg8D,GAAG,uBAAuB77D,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIohS,iBAAiB,OAAOphS,EAAI+8D,KAAM/8D,EAAU,OAAEG,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAAEL,EAAqB,kBAAEG,EAAG,MAAM,CAACA,EAAG,MAAMH,EAAIg8D,GAAG,yEAAyE77D,EAAG,MAAMH,EAAIg8D,GAAG,6DAA6Dh8D,EAAI+8D,KAAM/8D,EAAoB,iBAAEG,EAAG,MAAM,CAACA,EAAG,MAAMH,EAAIg8D,GAAG,2FAA2Fh8D,EAAI+8D,OAAO/8D,EAAI+8D,MAAM,GAAI/8D,EAAgB,aAAEG,EAAG,gBAAgB,CAACE,YAAY,6EAA6EpzC,GAAG,CAAC,MAAQ+yC,EAAIu9R,aAAa,CAACv9R,EAAIg8D,GAAG,cAAch8D,EAAI+8D,MAAM,IAC57F,GAAkB,GCItB,MAAMskO,GAAwB,CAC5BC,SAAU,EACVC,MAAO,EACPpoT,QAAS,GAGX,IACE7e,KAAM,kBACN0sH,WAAY,CACVk/L,mBADJ,GAEI54L,cAAJ,IAEEn9F,OACE,MAAO,CACL6I,MAAO,GACPwoS,cAAeH,GAAsBC,WAGzChgS,SAAU,CACR8/R,kBACE,MAAMjqO,EAAO,GAAnB,wBACYsqO,EAAYrmL,YAAYo4C,kBAAkBr8F,GAEhD,OAAOsqO,EAAUnzU,OAAS,IAAM,GAAGmzU,EAAU/qU,MAAM,EAAG,UAAY+qU,GAEpE9nU,SACE,MAAgC,KAAzB5O,KAAKq2U,gBAAyB,GAA3C,gCAEI30U,WACE,OAAOmrC,eAAe8pS,GAAG32U,KAAK4O,SAEhConU,WACE,OAAOh2U,KAAK4O,OAAOysF,QAAQ+sD,cAE7Bv3G,aACE,OAAO7wC,KAAK4O,OAAOiiC,YAAc7wC,KAAK4O,OAAO6hB,OAE/Ci7B,aAGE,MAAMF,EAAexrD,KAAK4O,OAAO68C,WAAazrD,KAAK4O,OAAO68C,WAAazrD,KAAK4O,OAAO88C,WACnF,OAAO,IAAI1iD,QAAQwiD,IAErBgnH,WACE,MAAsB,KAAfxyK,KAAKiuC,OAEd8lS,eACE,OAAO/zU,KAAK42U,kBAAoB52U,KAAK62U,eAEvCD,mBACE,YAAuBr0U,IAAhBvC,KAAK4O,QAEdmnU,aACE,OAAQ,GAAK/1U,KAAK4O,OAAOivI,QAAU,MAAyB,WAAjB79I,KAAK4O,UAAyB5O,KAAK4O,SAASy8I,UAA7F,WAAyG,GAAzG,UAEIwrL,gBACE,OAAOC,eAAe92U,KAAKiuC,QAAUs6D,MAAMwuO,cAAc/2U,KAAKiuC,QAEhE+oS,eACE,OAAOh3U,KAAK4O,OAAOq3D,WAAaxlE,KAAKC,OAEvCu1U,aACE,MAAMj1U,EAAKP,KAAKC,MAAQV,KAAK4O,OAAOq3D,WACpC,OAAOjmE,KAAKg3U,aAClB,+EACA,6EAEIb,cAKE,OAFAn2U,KAAKi3U,wBAEGj3U,KAAKy2U,eACX,KAAKH,GAAsBC,SACzB,MAAO,+BACT,KAAKD,GAAsBE,MACzB,MAAO,+BACT,KAAKF,GAAsBloT,QACzB,MAAO,iCACT,QACE,MAAM,IAAI9gB,MAAM,yDAGtB8oU,iBACE,GAAIp2U,KAAKy2U,gBAAkBH,GAAsBloT,QAC/C,MAAO,kDAET,IAAKiiI,YAAY02C,eAAgB,MAAO,oEACxC,GAAI/mM,KAAKg3U,aAAc,MAAO,iFAE9B,MAAME,EAAez2U,KAAKC,MAAQV,KAAK4O,OAAOq3D,WACxCu3I,EAAQntD,YAAY+2C,gBAAgB8vI,GAC1C,MAAO,kCAAkC7nU,UAAUmuM,iCAC/CjsM,SAASC,iBAAiB0lU,EAAe15H,GAAO3rM,yBAEtDslU,oBAAJ,UACM,MAAMC,EAAWxoU,OAAOma,QAAQsmB,OAAOuwG,UAAUE,eAC3Cu3L,EAAZ,0IACM,OAAOD,EAASx0U,QAAOiQ,IAAQwkU,EAAa9jU,SAASV,KAAMtP,OAAS,GAEtE+zU,mBACE,OAAO,IAGX36M,UACE38H,KAAK2/H,MAAM1xF,MAAMtjC,UAEnBwwH,YAGEk1B,YAAY02C,oBAAiBxkM,EAC7B8tJ,YAAY1I,kBAAeplJ,GAE7Bo0C,QAAS,CACPu/R,uBACEl2U,KAAKy2U,eAAiBz2U,KAAKy2U,cAAgB,GAAK,GAElDQ,wBAAJ,QACM,OAAQj3U,KAAKy2U,eACX,KAAKH,GAAsBC,SAEzBlmL,YAAY02C,eAAtB,8DACU12C,YAAY1I,aAAtB,8DACU,MACF,KAAK2uL,GAAsBE,MACzBnmL,YAAY02C,eAAiBn4L,OAAOysF,QAAQC,gBAC5C+0D,YAAY1I,aAAe/4I,OAAOysF,QAAQssD,aAC1C,MACF,KAAK2uL,GAAsBloT,QACzBiiI,YAAY02C,gBAAiB,EAC7B,QAGNyrI,aACOxyU,KAAK+zU,eACV/zU,KAAKyqN,YACLp6D,YAAYi4C,OAAOtoM,KAAKiuC,WC7IiU,MCO/V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIgH,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAAClzC,GAAG,CAAC,QAAU+yC,EAAIsiS,iBAAiBjrM,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,iDAAiDw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,kBAAkBw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,wSAAwS77D,EAAG,MAAMA,EAAG,MAAMH,EAAI87D,GAAI97D,EAAIuD,QAAc,QAAE,SAASh3C,GAAG,OAAO4zC,EAAG,MAAM,CAAC5K,IAAIhpC,EAAE+zC,MAAM,CAAE,kBAAoBN,EAAIuiS,WAAWh2U,EAAE,KAAM,CAACyzC,EAAIg8D,GAAG,UAAUh8D,EAAIi8D,GAAGj8D,EAAIuD,QAAQh3C,EAAE,GAAG+N,MAAM,OAAO6lC,EAAG,IAAI,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAIw1D,MAAMjpG,EAAE,OAAO4zC,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIwiS,cAAcxiS,EAAIuD,QAAQh3C,EAAE,GAAG6mE,UAAU,KAAMpzB,EAAIg8J,YAAYh8J,EAAIw1D,MAAMjpG,EAAE,IAAK4zC,EAAG,OAAO,CAACE,YAAY,eAAe,CAACF,EAAG,MAAMH,EAAIg8D,GAAG,iDAAiDh8D,EAAI+8D,KAAK58D,EAAG,MAAMA,EAAG,WAAWH,EAAIyiS,gBAAkB,EAAGtiS,EAAG,MAAM,CAACE,YAAY,eAAe,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIhiC,SAAS,SAAUgiC,EAAIyiS,kBAAkB,2EAA2EziS,EAAI+8D,MAAM,MACp3C,GAAkB,GCEtB,UACEziG,KAAM,2BACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACLuyS,cAAe,GACfH,WAAY,KAGhBjhS,SAAU,CACRiC,QAAS,IAAM5pC,OAAO2pC,UAAUC,QAAQ51C,QAAO+2B,GAAmB,KAAdA,EAAE0uC,UACtDoiC,QAIE,OAAOzqG,KAAKw4C,QAAQl1C,KAAI,CAACq2B,EAAG5xB,IAAU,WAAWA,EAAQ,MAAM4xB,EAAEpqB,KAAKioC,WAAW,8BAAvF,WAGEb,QAAS,CACPxK,SACEnsC,KAAK23U,cAAgB,IAAI/oU,OAAOma,QAAQkwB,UAAUg8E,mBAClDj1H,KAAK43U,sBAEPL,kBACE,IAAK,IAAIxvU,EAAQ,EAAGA,EAAQ/H,KAAKw4C,QAAQj1C,OAAQwE,IAC/C8xG,iBAAiBqb,eAAel1H,KAAKyqG,MAAM1iG,GAAQ/H,KAAKw4C,QAAQzwC,GAAOsgE,UAG3E4oI,YAAYj8E,GACV,OAAOh1H,KAAK23U,cAAcpkU,SAASyhH,IAErC4iN,qBACE,IAAIpwR,EAAiBs5C,cAAcO,2BAA6BrhG,KAAK23U,cAAcp0U,OACnFvD,KAAKw3U,WAAa,GAClB,IAAK,IAAIzvU,EAAQ,EAAGA,EAAQ/H,KAAKyqG,MAAMlnG,OAAQwE,IACzC/H,KAAKixM,YAAYjxM,KAAKyqG,MAAM1iG,IAC9B/H,KAAKw3U,WAAWh1U,MAAK,GAC/B,KACUxC,KAAKw3U,WAAWh1U,MAAK,GACrBglD,KACV,0BAGIkwR,gBACE,OAAO13U,KAAKw3U,WAAW7qU,YAAWiB,IAAMA,KAI1C6pU,cAAc/sU,GACZ,OAAIA,EAAInH,OAAS,GAAWmH,EACrB,GAAGA,EAAIqjC,UAAU,EAAG,SAASrjC,EAAIqjC,UAAUrjC,EAAInH,OAAS,GAAImH,EAAInH,aCvD2R,MCQxW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI0xC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,2CAA2C,CAACF,EAAG,mBAAmB,CAAClzC,GAAG,CAAC,MAAQ+yC,EAAIw1K,aAAax1K,EAAIg6F,GAAG,GAAGh6F,EAAIg6F,GAAG,GAAG75F,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,yBAAyB,CAACK,MAAM,CAAC,KAAO,+BAA+B,KAAO,sBAAsB,KAAO,8CAA8CL,EAAG,yBAAyB,CAACK,MAAM,CAAC,KAAO,yBAAyB,KAAO,4BAA4B,KAAO,oDAAoDL,EAAG,yBAAyB,CAACK,MAAM,CAAC,KAAO,mDAAmD,KAAO,uBAAuB,KAAO,mCAAmCL,EAAG,yBAAyB,CAACK,MAAM,CAAC,KAAO,+CAA+C,KAAO,uBAAuB,KAAO,gCAAgCL,EAAG,yBAAyB,CAACK,MAAM,CAAC,KAAO,uCAAuC,KAAO,2BAA2B,KAAO,gFAAgFL,EAAG,yBAAyB,CAACK,MAAM,CAAC,KAAO,iCAAiC,KAAO,qBAAqB,KAAO,uEAAuEL,EAAG,yBAAyB,CAACK,MAAM,CAAC,KAAO,UAAU,KAAO,oBAAoB,aAAa,aAAaL,EAAG,yBAAyB,CAACK,MAAM,CAAC,KAAO,iBAAiB,KAAO,yBAAyB,aAAa,gBAAgB,IAAI,IACr/C,GAAkB,CAAC,WAAa,IAAIR,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACL,EAAIg8D,GAAG,yBAAyB,WAAa,IAAIh8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,eAAe,CAACL,EAAIg8D,GAAG,mNAAmN77D,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,+ICD/jB,GAAS,WAAa,IAAIh8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAACE,YAAY,2BAA2BG,MAAM,CAAC,cAAcR,EAAI1lC,OAAO,CAAE0lC,EAAQ,KAAEG,EAAG,IAAI,CAACE,YAAY,kBAAkBpzC,GAAG,CAAC,MAAQ+yC,EAAI4iS,WAAW,CAACziS,EAAG,IAAI,CAACG,MAAMN,EAAI0T,SAASvT,EAAG,IAAI,CAACE,YAAY,kBAAkBpzC,GAAG,CAAC,MAAQ+yC,EAAI6iS,sBAAsB,CAAC1iS,EAAG,IAAI,CAACG,MAAMN,EAAI0T,YACtX,GAAkB,GCEtB,UACEp5C,KAAM,yBACN0mC,MAAO,CACL1mC,KAAM,CACJ4mC,KAAMlrC,OACNmrC,UAAU,GAEZuS,KAAM,CACJxS,KAAMlrC,OACNmrC,UAAU,GAEZqxD,KAAM,CACJtxD,KAAMlrC,OACNmrC,UAAU,EACV+jF,QAAS,MAEXgV,UAAW,CACTh5F,KAAMlrC,OACNmrC,UAAU,EACV+jF,QAAS,OAGbxjF,QAAS,CACPmhS,sBACEv9T,MAAMva,KAAKmvI,WAAW30H,QAExBq9T,WACE5iL,GAAiBj1J,KAAKynG,SC9B0U,MCQtW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCfhC,IACEl4F,KAAM,mBACN0sH,WAAY,CACVi6K,iBADJ,GAEI6hC,uBAAJ,KCRgW,MCQhW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI9iS,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,sBAAsB,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,sBAAsBw7B,OAAM,MAASx3F,EAAI87D,GAAG,GAAI,SAAS/iG,GAAI,OAAOonC,EAAG,gBAAgB,CAAC5K,IAAIx8B,EAAGsnC,YAAY,iBAAiBG,MAAM,CAAC,UAAUznC,EAAK,QAAO,IAC9U,GAAkB,GCDlB,GAAS,WAAa,IAAIinC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,gCAAgC,CAACF,EAAG,KAAK,CAACH,EAAIg8D,GAAG,SAASh8D,EAAIi8D,GAAGj8D,EAAIqjF,OAAS,GAAG,KAAMrjF,EAAc,WAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,iBAAiBh8D,EAAI+8D,OAAQ/8D,EAAY,SAAEG,EAAG,OAAO,CAACH,EAAIg8D,GAAG,cAAch8D,EAAIi8D,GAAGj8D,EAAI+gS,aAAa/gS,EAAI+8D,KAAK58D,EAAG,OAAO,CAACH,EAAIg8D,GAAG,eAAeh8D,EAAIi8D,GAAGj8D,EAAI+iS,iBAAiB/iS,EAAIpE,gBAAgBuE,EAAG,gBAAgB,CAACE,YAAY,8BAA8BpzC,GAAG,CAAC,MAAQ+yC,EAAI4yJ,OAAO,CAAC5yJ,EAAIg8D,GAAG,aAAa,IAClhB,GAAkB,GCEtB,UACE1hG,KAAM,gBACN0sH,WAAY,CACVsG,cAAJ,IAEEtsF,MAAO,CACLqiF,OAAQ,CACNniF,KAAM5sC,OACN6sC,UAAU,IAGdhR,OACE,MAAMgnE,EAAOikD,YAAYw2C,MAAM7mM,KAAKs4H,QACpC,MAAO,CACLznF,WAAY,IAAI7nC,QAAQojG,EAAOA,EAAKv7D,YAAcu7D,EAAK37E,MAAQ,IAC/DulT,SAAU5pO,EAAOA,EAAK/Q,QAAQ+sD,aAAe,KAGjD7xG,SAAU,CACRi/R,aACE,OAAOnlL,YAAYu2C,cAAgB5mM,KAAKs4H,SAG5C3hF,QAAS,CACPkxJ,OACEx3C,YAAY83C,SAASnoM,KAAKs4H,SAE5B0/M,iBAAiBnnS,GACf,OAAOhhC,gBAAgBghC,EAAY,EAAG,IAExC1E,SACMnsC,KAAKw1U,YACPx1U,KAAK6wC,WAAWlnC,SAASinC,SAASC,eCnCmT,MCO7V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QCdhC,IACEthC,KAAM,gBACN0sH,WAAY,CACVgmM,oBADJ,GAEIgW,cAAJ,KCR6V,MCQ7V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIhjS,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,gCAAgCw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACH,EAAIg8D,GAAG,4NAA4N77D,EAAG,IAAI,CAACH,EAAIg8D,GAAG,gBAAgBh8D,EAAIg8D,GAAG,0JAA0J77D,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,gGAAgG77D,EAAG,MAAMH,EAAIg8D,GAAG,sBAAsB77D,EAAG,IAAI,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAI+7K,aAAa57K,EAAG,MAAMA,EAAG,MAAMA,EAAG,gBAAgB,CAACG,MAAMN,EAAI49F,YAAY59F,EAAIijS,WAAWvoT,OAAOztB,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIqyN,QAAQryN,EAAIijS,WAAWvoT,UAAU,CAACslB,EAAIg8D,GAAG,4BAA4B77D,EAAG,MAAMH,EAAIg8D,GAAG,uDAAuD77D,EAAG,IAAI,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAIkjS,iBAAiBljS,EAAIg8D,GAAG,qFAAqF77D,EAAG,MAAMA,EAAG,MAAMA,EAAG,gBAAgB,CAACG,MAAMN,EAAI49F,YAAY59F,EAAIijS,WAAWtoT,QAAQ1tB,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIqyN,QAAQryN,EAAIijS,WAAWtoT,WAAW,CAACqlB,EAAIg8D,GAAG,uBAAuB77D,EAAG,MAAMH,EAAIg8D,GAAG,oMAAoM77D,EAAG,MAAMA,EAAG,MAAMA,EAAG,gBAAgB,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,UAAUsjG,QAAQ,YAAY/qG,MAAyB,IAAlBmtC,EAAImjS,UAAkB,6BAA+B,GAAI5mO,WAAW,wDAAwDj8D,MAAMN,EAAI49F,YAAY59F,EAAIijS,WAAWroT,QAAQ3tB,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIqyN,QAAQryN,EAAIijS,WAAWroT,OAAQolB,EAAImjS,cAAc,CAACnjS,EAAIg8D,GAAG,6BAA6B77D,EAAG,QAAQ,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,QAAQsjG,QAAQ,UAAU/qG,MAAOmtC,EAAa,UAAEu8D,WAAW,cAAcV,IAAI,YAAYx7D,YAAY,gBAAgBG,MAAM,CAAC,KAAO,QAAQE,SAAS,CAAC,MAASV,EAAa,WAAG/yC,GAAG,CAAC,MAAQ,CAAC,SAASivG,GAAWA,EAAO9uG,OAAO4wG,YAAqBh+D,EAAIojS,UAAUlnO,EAAO9uG,OAAOyF,QAAO,SAASqpG,GAAQ,OAAOl8D,EAAIqjS,uBAAuBljS,EAAG,MAAMH,EAAIg8D,GAAG,yEAAyE77D,EAAG,MAAyB,IAAlBH,EAAImjS,UAAiBhjS,EAAG,OAAO,CAACH,EAAIg8D,GAAG,+BAA+Bh8D,EAAIi8D,GAAGj8D,EAAIsjS,eAAiB,eAAiB,WAAW,gBAAgBnjS,EAAG,IAAI,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAImjS,cAAcnjS,EAAIg8D,GAAG,QAAQ77D,EAAG,OAAO,CAACH,EAAIg8D,GAAG,uBAAuBh8D,EAAIi8D,GAAGj8D,EAAIsjS,eAAiB,cAAgB,eAAe,KAAKnjS,EAAG,IAAI,CAACH,EAAIg8D,GAAG,OAAOh8D,EAAIg8D,GAAG,kDAAkD77D,EAAG,MAAMH,EAAIg8D,GAAG,iFAAiF,MACz5F,GAAkB,GCGtB,UACE1hG,KAAM,kBACN0sH,WAAY,CACV8lM,aADJ,GAEIx/L,cAAJ,IAEEn9F,OACE,MAAO,CACLgrD,KAAM,EACNioP,UAAW,GACXrnH,SAAU,GACVunH,gBAAgB,EAChBH,UAAW,IAGf7hS,SAAU,CACR2hS,WAAY,IAAMzoT,oBAClB0oT,aAAc,IAAMjqK,SAASyf,mBAE/B9yD,UACE76H,KAAKo4U,UAAYxpU,OAAOqgG,SAAS2uC,YACjC59I,KAAKq4U,UAAY,GAAGzpU,OAAOqgG,SAAS2uC,cACpC59I,KAAKu4U,gBAAiB,GAExB5hS,QAAS,CACPxK,SACEnsC,KAAKowF,KAAOxhF,OAAOqgG,SAAS0uC,cAC5B39I,KAAKgxN,SAAW9iD,SAAS6f,gBAE3BuqJ,kBACE,GAAIt4U,KAAKq4U,UAAUvlU,MAAM,kBAA/B,CACQ,MAAM2hD,EAAMlrD,OAAOvJ,KAAKq4U,WACxBr4U,KAAKo4U,UAAYv3U,KAAK+K,IAAI6oD,GAAO,KACzC,sCACA,4BAEQz0D,KAAKo4U,UAAYp4U,KAAKw4U,iBAAiBx4U,KAAKq4U,WAE9Cr4U,KAAKu4U,eAAiBv4U,KAAKo4U,YAAc7uU,OAAOvJ,KAAKq4U,WAE9B,IAAnBr4U,KAAKo4U,UAAiBp4U,KAAKsnQ,QAAQtnQ,KAAKk4U,WAAWvoT,OAC7D,qDAEI23O,QAAQl3K,EAAM6vD,GACR7vD,IAASpwF,KAAKk4U,WAAWroT,QAA6B,IAAnB7vB,KAAKo4U,WAC5ClqK,SAAS2f,WAAWz9F,EAAMx4C,SAASqoG,EAAM,MAE3CpN,YAAYziD,GACV,MAAO,CACL,gCAAgC,EAChC,aAAcA,IAASpwF,KAAKowF,OAKhCooP,iBAAiB9tU,GACf,MAAMu1I,EAAO,SACb,IAAI1sH,EAAK,WAAa0sH,EAA5B,eACM,IAAK,IAAWr0B,EAAPpqH,EAAI,EAAOA,EAAIkJ,EAAInH,OAAQ/B,IAClCoqH,EAAKlhH,EAAI0jC,WAAW5sC,GACpB+xB,EAAK1yB,KAAK43U,KAAKllT,EAAKq4F,EAAI,YACxB8sN,EAAK73U,KAAK43U,KAAKC,EAAK9sN,EAAI,YAI1B,OAFAr4F,EAAK1yB,KAAK43U,KAAKllT,EAAK,IAA1B,8CACMmlT,EAAK73U,KAAK43U,KAAKC,EAAK,IAA1B,8CACa,YAAc,QAAUA,IAAOnlT,IAAO,MCrE4S,MCQ/V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI0hB,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,qDAAqDw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,2BAA2BL,EAAI87D,GAAI97D,EAAS,OAAE,SAASy4Q,EAAKnhT,GAAK,OAAO6oC,EAAG,IAAI,CAAC5K,IAAIj+B,GAAK,CAAC0oC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGw8M,GAAM,UAAS,GAAGt4Q,EAAG,gBAAgB,CAACE,YAAY,6EAA6EpzC,GAAG,CAAC,MAAQ+yC,EAAIw1K,YAAY,CAACx1K,EAAIg8D,GAAG,aAAa,IACriB,GAAkB,GCGtB,UACE1hG,KAAM,oBACN0sH,WAAY,CACVsG,cADJ,GAEIw/L,aAAJ,IAEExrR,SAAU,CACRoiS,QACE,MAAO,CAEP,wEACN,oDACA,4DACA,2DACA,6EACA,sCACA,2DACA,iEACA,mEACA,oEACA,2BACA,uDAGM,wFACN,oEACA,qFACA,0DACA,wFACA,yCACA,+DAGM,4FACN,wFACA,gDACA,0FAGM,+CACN,qEACA,yEAGM,iDACN,gCACA,wCACA,oDACA,kCACA,8DACA,sCACA,gDACA,0FACA,qDCzDiW,MCQjW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAI1jS,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,8BAA8Bw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,4BAA4B,CAAEt1C,KAAQ,IAAEo1C,EAAG,MAAM,CAACH,EAAIg8D,GAAG,mBAAmBh8D,EAAIi8D,GAAGj8D,EAAI5lC,UAAU4lC,EAAI2jS,oBAAoB,yCAAyC3jS,EAAIi8D,GAAGj8D,EAAItkC,eAAe,IAAI,uXAAuXykC,EAAG,MAAM,CAACH,EAAIg8D,GAAG,mBAAmBh8D,EAAIi8D,GAAGj8D,EAAI5lC,UAAU4lC,EAAI2jS,oBAAoB,yCAAyC3jS,EAAIi8D,GAAGj8D,EAAItkC,eAAe,IAAI,uXAAuXykC,EAAG,MAAM,CAACE,YAAY,iCAAiC,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACL,EAAIg8D,GAAG,0BAA0Bh8D,EAAI87D,GAAI97D,EAAmB,iBAAE,SAAS3N,EAAOv/B,GAAO,OAAOqtC,EAAG,MAAM,CAAC5K,IAAIziC,GAAO,CAACktC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI4jS,kBAAkBvxS,IAAS,WAAU,GAAI2N,EAAY,SAAEG,EAAG,gBAAgB,CAACK,MAAM,CAAC,SAAU,IAAQ,CAACR,EAAIg8D,GAAG,qDAAgF,IAA1Bh8D,EAAI2jS,kBAAyBxjS,EAAG,gBAAgB,CAAClzC,GAAG,CAAC,MAAQ+yC,EAAI6jS,qBAAqB,CAAC7jS,EAAIg8D,GAAG,+BAA+B77D,EAAG,gBAAgB,CAACK,MAAM,CAAC,SAAU,IAAQ,CAACR,EAAIg8D,GAAG,4CAA4Ch8D,EAAIi8D,GAAGj8D,EAAI5lC,UAAU,IAAI,QAAQ,MACv8D,GAAkB,GCItB,UACEE,KAAM,4BACN0sH,WAAY,CACV8lM,aADJ,GAEIx/L,cAAJ,IAEEn9F,OACE,MAAO,CACL0M,UAAU,EACV8mS,kBAAmB,EAEnBG,gBAAiB,GACjBp5E,KAAK,IAGThpN,QAAS,CACPxK,SACEnsC,KAAK2/P,IAAM,GAAjB,eACM3/P,KAAK8xC,SAAWD,MAAMC,SACtB9xC,KAAK44U,kBAAoBvlR,gBAAgBtqC,QAAQqf,YACjD,MAAM4wS,EAAuBrvM,aAAat9E,IAChD,8CACA,6CACY4sR,EAAwBD,EAAqB11U,KAAI41U,GAAOA,EAAIz8R,eAAc37C,MAChFd,KAAK+4U,gBAAkBC,EAC7B,sEAEIF,qBAC8C,IAAxCp6P,UAAUC,oBAAoB72E,OAKlCk5C,OAAO2sG,eAAeC,eAAe8vG,aAAa19P,KAAK44U,oBACvDvlR,gBAAgBtqC,QAAQ7W,OAAS,EACjCtD,OAAOma,QAAQsmB,OAAOC,qBAAsB,EAC5CtvC,KAAKyqN,aAPHlwM,MAAMjC,QAAQkC,KAAK,wEAC3B,CAAU,WAAV,6BAQIq+T,kBAAkBvxS,GAChB,GAAItnC,KAAK44U,kBAAoBtxS,EAAO,GAAI,MAAO,yBAAyBj4B,UAAUi4B,EAAO,OACzF,MAAMjnC,EAASspI,aAAariG,EAAO,IAC7Bx/B,EAAQzH,EAAOinC,OAAOtnC,KAAK44U,kBAAmBjvE,iBAAiB,MAC/DwvE,EAAiB94U,EAAOs8C,WAC9B,OAAOw8R,EAAe/tU,QAAQ,UAAW/K,EAAO28C,aAAal1C,OChDsS,MCQzW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAImtC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,gBAAgBvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,wCAAwCw7B,OAAM,MAAS,CAACx3F,EAAIg8D,GAAG,wCAAwCh8D,EAAIi8D,GAAGj8D,EAAI2sR,WAAW,SACnX,GAAkB,GCEtB,UACEryT,KAAM,oBACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACLw0J,WAAY,CACVt0J,KAAM5sC,OACN6sC,UAAU,GAEZgjS,eAAgB,CACdjjS,KAAM5sC,OACN6sC,UAAU,IAGdhR,OACE,MAAO,CACL/iC,OAAQ,EACRkK,IAAK,EACLulC,UAAU,IAGdyE,SAAU,CACRqrR,YAAJ,8CAEEjrR,QAAS,CACPxK,SACEnsC,KAAKqC,OAASrC,KAAKyqM,WACnBzqM,KAAKuM,IAAMvM,KAAKo5U,eAChBp5U,KAAKizD,MAAQjS,OAAOkpR,qBAAqBlqU,KAAKuM,KAC9CvM,KAAK8xC,SAAWD,MAAMC,UAExBqrR,iBACEn8Q,OAAOq4R,eAAer5U,KAAKizD,MAAOjzD,KAAKyqM,eCpCoT,MCOjW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIx1J,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,aAAavzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,mDAAmDw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,oGAAoGh8D,EAAIi8D,GAAGj8D,EAAIqkS,oBAAoB,KAAKlkS,EAAG,MAAM,CAACE,YAAY,4BAA4BG,MAAM,CAAC,IAAM,yBAAyBR,EAAIg8D,GAAG,kEAAkE77D,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,qKAAqK77D,EAAG,MAAMA,EAAG,MAAMA,EAAG,IAAI,CAACE,YAAY,aAAa,CAACL,EAAIg8D,GAAG,mFAC/4B,GAAkB,GCEtB,UACE1hG,KAAM,iBACN0sH,WAAY,CACVk/L,mBAAJ,IAEExkR,QAAS,CACP2iS,mBACE,IAAIxyK,EAAM,EACV,IAAK,MAAM96H,KAAYioB,aAAa5H,IAC9BrgB,EAAS3rC,OAAOusG,kBACpBk6D,GAAO96H,EAAS9W,UAAY8W,EAASL,MAEvC,OAAOm7H,GAETq2J,iBACE9oQ,iBAAiBklR,YACjBx3U,SAAS0B,GAAGhB,OAAOzC,SCnBqU,MCQ9V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIi1C,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,aAAavzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,6BAA6Bw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI38B,SAAS,OAAO88B,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIqpL,gBAAgB,KAAKlpL,EAAG,WAC7d,GAAkB,GCEtB,UACE7lC,KAAM,iBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACLo0S,kBAAmB,IAAIxwU,QACvBywU,eAAgB,IAAIzwU,UAGxButC,SAAU,CACRj+B,UACE,OAAI0gC,YAAY,KAAK7N,aAAe0G,MAAMC,SACjC,8KAGF,0SAITwsL,iBACE,MAAO,2BAA2B7tN,QAAQzQ,KAAKw5U,kBAAmB,EAAG,oCACjE/oU,QAAQzQ,KAAKy5U,eAAgB,EAAG,iCAGxC9iS,QAAS,CACPxK,SACEnsC,KAAKw5U,kBAAkB7vU,SAAS8nD,UAAUC,YAC1C1xD,KAAKy5U,eAAe9vU,SAAS8nD,UAAUiW,UAAU9xD,MAAM67C,UAAUC,cAEnEyrQ,iBACE5a,oBCnCwV,MCO9V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIttQ,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,8BAA8Bw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,+BAA+BpzC,GAAG,CAAC,MAAQ+yC,EAAIykS,aAAa,CAACtkS,EAAG,MAAM,CAACG,MAAMN,EAAI0kS,mBAAmB,CAAE1kS,EAAiB,cAAEG,EAAG,OAAO,CAACE,YAAY,iBAAiBL,EAAI+8D,OAAO58D,EAAG,OAAO,CAACE,YAAY,sCAAsC,CAACL,EAAIg8D,GAAG,gEAAgE77D,EAAG,MAAM,CAACE,YAAY,iDAAiD,CAACF,EAAG,MAAM,CAACE,YAAY,iDAAiDL,EAAI87D,GAAI97D,EAAc,YAAE,SAASy6M,GAAW,OAAOt6M,EAAG,gCAAgC,CAAC5K,IAAIklN,EAAU1hP,GAAGynC,MAAM,CAAC,UAAYi6M,QAAe,KAAKt6M,EAAG,MAAM,CAACE,YAAY,0CAA0C,CAACF,EAAG,SAAS,CAACE,YAAY,4CAA4CpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIo6O,YAAY,MAAM,CAACp6O,EAAIg8D,GAAG,mBAAmB77D,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI2kS,aAAa,OAAOxkS,EAAG,SAAS,CAACE,YAAY,4CAA4CpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIo6O,YAAY,MAAM,CAACp6O,EAAIg8D,GAAG,cAAc77D,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI4kS,SAAS,OAAOzkS,EAAG,SAAS,CAACE,YAAY,4CAA4CpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIo6O,YAAY,MAAM,CAACp6O,EAAIg8D,GAAG,2BAA2B77D,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI6kS,cAAc,OAAO1kS,EAAG,SAAS,CAACE,YAAY,4CAA4CpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIo6O,YAAY,MAAM,CAACp6O,EAAIg8D,GAAG,iBAAiB77D,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI8kS,UAAU,YAC1qD,GAAkB,GCGtB,UACExqU,KAAM,6BACN0sH,WAAY,CACV0kJ,8BADJ,GAEIohD,aAAJ,IAEE38R,OACE,MAAO,CACL40S,mBAAoB,GACpBC,8BAA+B,GAC/BxsR,WAAY,GACZysR,YAAa,EACbC,QAAS,EACTzkB,aAAc,EACd0kB,SAAU,EACV/0L,eAAe,IAGnB9uG,SAAU,CACRqjS,cACE,MAAMtmM,EAAS,CAAC,oBAAqB,iBAAkB,cAAe,aACtE,OAAOA,EAAOtzI,KAAKk6U,cAErBL,UACE,MAAMvmM,EAAS,CAAC,uBAAwB,sBAAuB,8BACrE,qCACM,OAAOA,EAAOtzI,KAAKm6U,UAErBL,eACE,MAAMxmM,EAAS,CAAC,QAAS,OAAQ,cACjC,OAAOA,EAAOtzI,KAAK01T,eAErBqkB,WACE,MAAMzmM,EAAS,CAAC,YAAa,cAC7B,OAAOA,EAAOtzI,KAAKo6U,YAGvBr7M,MAAO,CACLm7M,YAAYrnP,GACVjkF,OAAOC,WAAWw2C,QAAQy/F,mBAAmBC,gBAAkBlyD,GAEjEsnP,QAAQtnP,GACNjkF,OAAOC,WAAWw2C,QAAQy/F,mBAAmBE,aAAenyD,GAE9D6iO,aAAa7iO,GACXjkF,OAAOC,WAAWw2C,QAAQy/F,mBAAmBG,cAAgBpyD,GAE/DunP,SAASvnP,GACPjkF,OAAOC,WAAWw2C,QAAQy/F,mBAAmBI,UAAYryD,GAE3DwyD,cAAcxyD,GACZjkF,OAAOC,WAAWw2C,QAAQggG,cAAgBxyD,IAG9CitC,gBACElxH,OAAOC,WAAWw2C,QAAQ+/F,sBAAwBx0G,SAAS0U,cAAcx9C,OAE3E6uC,QAAS,CACPxK,SACEnsC,KAAKg6U,mBAAqBrwQ,sBAE1B3pE,KAAKytD,WAAakc,sBAAsB6rP,sBAAqB,GAC7D,MAAMrgK,EAAWvmJ,OAAOC,WAAWw2C,QAAQy/F,mBAC3C9kJ,KAAKk6U,YAAc/kL,EAASpQ,gBAC5B/kJ,KAAKm6U,QAAUhlL,EAASnQ,aACxBhlJ,KAAK01T,aAAevgK,EAASlQ,cAC7BjlJ,KAAKo6U,SAAWjlL,EAASjQ,UACzBllJ,KAAKqlJ,cAAgBz2I,OAAOC,WAAWw2C,QAAQggG,eAEjDgqI,YAAYrhR,GACV,MAAMmnJ,EAAWvmJ,OAAOC,WAAWw2C,QAAQy/F,mBAC3C,IAAI+sI,EACJ,OAAQ7jR,GACN,KAAK,EACH6jR,EAAanvR,OAAOC,KAAK2qB,gCAAgC/pB,OACzD4xJ,EAASpQ,iBAAmBoQ,EAASpQ,gBAAkB,GAAK8sI,EAC5D,MACF,KAAK,EACHA,EAAanvR,OAAOC,KAAKgrB,4BAA4BpqB,OACrD4xJ,EAASnQ,cAAgBmQ,EAASnQ,aAAe,GAAK6sI,EACtD,MACF,KAAK,EACHA,EAAanvR,OAAOC,KAAKsrB,sBAAsB1qB,OAC/C4xJ,EAASlQ,eAAiBkQ,EAASlQ,cAAgB,GAAK4sI,EACxD,MACF,KAAK,EACHA,EAAanvR,OAAOC,KAAK0rB,YAAY9qB,OACrC4xJ,EAASjQ,WAAaiQ,EAASjQ,UAAY,GAAK2sI,EAChD,MACF,QACE,MAAM,IAAIvkR,MAAM,uDAGtBqsU,kBACE,MAAO,CACL,0CAA0C,EAC1C,iDAAkD35U,KAAKqlJ,gBAG3Dq0L,aACE15U,KAAKqlJ,eAAiBrlJ,KAAKqlJ,iBCxGyU,MCO1W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAIpwG,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,eAAeR,EAAIolS,aAAeplS,EAAIqlS,aAAa,gBAAgBrlS,EAAIolS,YAAcplS,EAAIqlS,aAAa,gBAAgB,2EAA2Ep4U,GAAG,CAAC,QAAU+yC,EAAIy1C,UAAU4hD,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,8BAA8Bw7B,OAAM,GAAM,CAACjiG,IAAI,UAAUpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,kBAAkBw7B,OAAM,GAAM,CAACjiG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,cAAcw7B,OAAM,MAAS,CAAEx3F,EAAc,WAAEG,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,gNAAgN77D,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,2aAA2a77D,EAAG,MAAMA,EAAG,MAAMA,EAAG,IAAI,CAACH,EAAIg8D,GAAG,wDAAwD77D,EAAG,MAAMA,EAAG,MAAMA,EAAG,gBAAgB,CAACE,YAAY,0EAA0EpzC,GAAG,CAAC,MAAQ+yC,EAAIslS,WAAW,CAACtlS,EAAIg8D,GAAG,iBAAiB,GAAG77D,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,sUAAsU77D,EAAG,QAAQ,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,QAAQsjG,QAAQ,UAAU/qG,MAAOmtC,EAAQ,KAAEu8D,WAAW,SAASV,IAAI,OAAOx7D,YAAY,0CAA0CG,MAAM,CAAC,KAAO,QAAQE,SAAS,CAAC,MAASV,EAAQ,MAAG/yC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,MAAM,GAAGh7B,EAAO3mE,IAAI,CAAC,MAAM,WAAoB,KAAcyK,EAAIw1K,UAAUz1M,MAAM,KAAMH,YAAY,MAAQ,SAASs8F,GAAWA,EAAO9uG,OAAO4wG,YAAqBh+D,EAAI1lC,KAAK4hG,EAAO9uG,OAAOyF,WAAUstC,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,oRAAoR77D,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,gGAAgG77D,EAAG,MAAMA,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACL,EAAIg8D,GAAG,sXAAwX77D,EAAG,QAAQ,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,QAAQsjG,QAAQ,UAAU/qG,MAAOmtC,EAAiB,cAAEu8D,WAAW,kBAAkBV,IAAI,gBAAgBx7D,YAAY,0CAA0CG,MAAM,CAAC,KAAO,QAAQE,SAAS,CAAC,MAASV,EAAiB,eAAG/yC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,MAAM,GAAGh7B,EAAO3mE,IAAI,CAAC,MAAM,WAAoB,KAAcyK,EAAIw1K,UAAUz1M,MAAM,KAAMH,YAAY,MAAQ,SAASs8F,GAAWA,EAAO9uG,OAAO4wG,YAAqBh+D,EAAIulS,cAAcrpO,EAAO9uG,OAAOyF,gBACxxH,GAAkB,GCGtB,UACEyH,KAAM,oBACN0sH,WAAY,CACVsG,cADJ,GAEI44L,mBAAJ,IAEE/1R,OACE,MAAO,CACLi1S,YAAY,EACZ9qU,KAAM,GACNirU,cAAe,KAGnBjkS,SAAU,CACR+jS,eACE,MAA8B,mBAAvBt6U,KAAKw6U,gBAGhB7jS,QAAS,CACP4jS,WACEv6U,KAAKq6U,YAAa,GAEpB3vP,WACO1qF,KAAKs6U,eACVt6U,KAAKyqN,YACLv8C,SAASggB,YAAYhgB,SAAS+f,aAAajuL,KAAKuP,WC7B2S,MCOjW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAI0lC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACE,YAAY,eAAeg3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,qCAAqCw7B,OAAM,MAAS,CAAEx3F,EAAgB,aAAEG,EAAG,OAAO,CAACA,EAAG,SAAS,CAACE,YAAY,uBAAuBpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAIwlS,gBAAgB,CAACxlS,EAAIg8D,GAAG,sCAAsC77D,EAAG,MAAMA,EAAG,OAAO,CAACH,EAAIg8D,GAAG,uBAAuB77D,EAAG,QAAQH,EAAI+8D,KAAK58D,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAM,CAACK,MAAM,CAAC,IAAM,yBAAyBL,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,cAAc,CAACK,MAAM,CAAC,OAAS,GAAG,KAAO,QAAQL,EAAG,cAAc,CAACK,MAAM,CAAC,OAAS,GAAG,KAAO,QAAQL,EAAG,cAAc,CAACK,MAAM,CAAC,OAAS,IAAI,KAAO,QAAQL,EAAG,cAAc,CAACK,MAAM,CAAC,OAAS,IAAI,KAAO,SAASL,EAAG,cAAc,CAACK,MAAM,CAAC,OAAS,IAAK,KAAO,UAAU,QACn5B,GAAkB,GCDlB,GAAS,WAAa,IAAIR,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI/iC,QAAQ,YAAYkjC,EAAG,SAAS,CAACE,YAAY,oBAAoBpzC,GAAG,CAAC,MAAQ+yC,EAAIjJ,WAAW,CAACiJ,EAAIg8D,GAAG,MAAM77D,EAAG,OAAO,CAACH,EAAIg8D,GAAGh8D,EAAIi8D,GAAGj8D,EAAItJ,cAC7V,GAAkB,GCItB,UACEp8B,KAAM,cACN0mC,MAAO,CACL/jC,OAAQ,CACNikC,KAAM5sC,OACN6sC,UAAU,GAEZzK,KAAM,CACJwK,KAAM5sC,OACN6sC,UAAU,IAGdO,QAAS,CACP3K,WACMpzB,EACF2wJ,GAAa1C,YAAY7mK,KAAKkS,QAE9B,GAAR,qCCtB2V,MCO3V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QCbhC,IACE3C,KAAM,gBACN0sH,WAAY,CACV8lM,aADJ,GAEI2Y,YAAJ,IAEEt1S,OACE,MAAO,CACLu1S,cAAc,IAGlBhkS,QAAS,CACPxK,SACEnsC,KAAK26U,aAAepxK,GAAa3B,iCAEnC6yK,aACElxK,GAAa5C,uBCrB0U,MCO7V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAI1xH,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACE,YAAY,sBAAsBG,MAAM,CAAC,eAAeR,EAAI8+R,aAAa,eAAe9+R,EAAI8+R,cAAc7xU,GAAG,CAAC,QAAU+yC,EAAIuyH,SAASl7B,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI2lS,YAAY,OAAOnuM,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI4lS,aAAa,OAAOpuM,OAAM,MAAS,CAACr3F,EAAG,QAAQ,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,QAAQsjG,QAAQ,UAAU/qG,MAAOmtC,EAAS,MAAEu8D,WAAW,UAAUV,IAAI,QAAQx7D,YAAY,2CAA2CC,MAAM,CAAE,iBAAmBN,EAAI6lS,UAAWrlS,MAAM,CAAC,KAAO,OAAO,UAAY,OAAO,SAAWR,EAAI6lS,UAAUnlS,SAAS,CAAC,MAASV,EAAS,OAAG/yC,GAAG,CAAC,MAAQ,CAAC,SAASivG,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,QAAQ,GAAGh7B,EAAO3mE,IAAI,SAAkB,KAAcyK,EAAIuyH,QAAQxyJ,MAAM,KAAMH,YAAY,SAASs8F,GAAQ,OAAIA,EAAOh7D,KAAKluC,QAAQ,QAAQgtC,EAAIi3F,GAAG/6B,EAAOg7B,QAAQ,MAAM,GAAGh7B,EAAO3mE,IAAI,CAAC,MAAM,WAAoB,KAAcyK,EAAIw1K,UAAUz1M,MAAM,KAAMH,aAAa,MAAQ,SAASs8F,GAAWA,EAAO9uG,OAAO4wG,YAAqBh+D,EAAIhH,MAAMkjE,EAAO9uG,OAAOyF,WAAUstC,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,MAAM,CAACE,YAAY,+CAA+C,CAAEL,EAAiB,cAAEG,EAAG,MAAM,CAACH,EAAIg8D,GAAG,WAAYh8D,EAAoB,iBAAE,CAAEA,EAAkB,eAAEG,EAAG,MAAM,CAACE,YAAY,sCAAsCK,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAI8lS,mBAAmB9lS,EAAI+8D,KAAM/8D,EAAe,YAAEG,EAAG,kBAAkB,CAACK,MAAM,CAAC,KAAOR,EAAIkgL,aAAa,cAAa,KAASlgL,EAAI+8D,KAAK58D,EAAG,kBAAkB,CAACK,MAAM,CAAC,KAAOR,EAAI+lS,aAAa,cAAa,KAAS/lS,EAAI6lS,UAAY7lS,EAAI+lS,aAAaC,QAAS7lS,EAAG,gBAAgB,CAACK,MAAM,CAAC,cAAc,yBAAyB,cAAcR,EAAI+lS,gBAAgB/lS,EAAI+8D,KAAO/8D,EAAI6lS,UAAa7lS,EAAIimS,cAAejmS,EAAI+lS,aAAaC,QAAmIhmS,EAAI+8D,KAA9H58D,EAAG,gBAAgB,CAACK,MAAM,CAAC,cAAc,+CAA+C,cAAcR,EAAI+lS,iBAA2B/lS,EAAI6lS,UAAY7lS,EAAIkgL,aAAa8lH,QAAS7lS,EAAG,gBAAgB,CAACK,MAAM,CAAC,cAAc,iDAAiD,cAAcR,EAAIkgL,gBAAgBlgL,EAAI+8D,MAAM/8D,EAAI+8D,KAAO/8D,EAAI6lS,UAAa7lS,EAAIkmS,mBAAoBlmS,EAAIu9H,SAAmDv9H,EAAI+8D,KAA7C58D,EAAG,MAAM,CAACH,EAAIg8D,GAAG,yBAAkC,GAAG77D,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,qBAAqB,CAACK,MAAM,CAAC,eAAeR,EAAIkmS,iBAAiB,eAAelmS,EAAIimS,aAAgBjmS,EAAI6jB,aAAe7jB,EAAI4+K,cAAiB5+K,EAAI+lS,aAAaI,gBAC3+EnmS,EAAIkgL,aAAaimH,gBAAgB,6BAA6BnmS,EAAIimS,aAAgBjmS,EAAI6jB,aAAe7jB,EAAI4+K,kBAAmB,MAAO5+K,EAAIimS,aAAejmS,EAAIkmS,iBAAkB/lS,EAAG,MAAM,CAACA,EAAG,MAAQH,EAAI6lS,SAAoX7lS,EAAI+8D,KAA9W58D,EAAG,gBAAgB,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,UAAUsjG,QAAQ,YAAY/qG,MAAM,4FAAkG0pG,WAAW,wGAAwGtvG,GAAG,CAAC,MAAQ+yC,EAAIomS,yBAAyB,CAACpmS,EAAIg8D,GAAG,2BAAoC,GAAGh8D,EAAI+8D,KAAM/8D,EAAe,YAAEG,EAAG,OAAO,CAACA,EAAG,MAAMA,EAAG,MAAM,CAACw9D,WAAW,CAAC,CAACrjG,KAAK,UAAUsjG,QAAQ,YAAY/qG,MAAOmtC,EAAI6jB,YAAc,GAAK,4EAA6E04C,WAAW,mGAAmGl8D,YAAY,+BAA+BpzC,GAAG,CAAC,MAAQ,SAASivG,GAAQl8D,EAAI4+K,eAAiB5+K,EAAI4+K,iBAAiB,CAACz+K,EAAG,MAAM,CAACG,MAAM,CAC7gC,0CAA0C,EAC1C,iDAAkDN,EAAI4+K,gBACrD,CAAE5+K,EAAiB,cAAEG,EAAG,OAAO,CAACE,YAAY,iBAAiBL,EAAI+8D,OAAO58D,EAAG,OAAO,CAACE,YAAY,sCAAsC,CAACL,EAAIg8D,GAAG,mCAAqCh8D,EAAI6jB,YAA8F7jB,EAAI+8D,KAArF58D,EAAG,OAAO,CAACE,YAAY,yCAAyC,CAACL,EAAIg8D,GAAG,eAAwBh8D,EAAI+8D,QAC9S,GAAkB,GCLlB,GAAS,WAAa,IAAI/8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,uCAAuC,CAA4B,IAA1BL,EAAI2yE,KAAK/gE,cAAiD,IAA3B5R,EAAI2yE,KAAK9tE,cAAqB1E,EAAG,MAAM,CAACA,EAAG,IAAI,CAACH,EAAIg8D,GAAG,kBAAkBh8D,EAAIi8D,GAAGj8D,EAAIqmS,kBAAkB,gDAAgDlmS,EAAG,MAAM,CAACH,EAAIg8D,GAAG,cAAch8D,EAAIi8D,GAAGj8D,EAAIqmS,kBAAkB,oBAAoBlmS,EAAG,MAAMH,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI2yE,KAAK2zN,YAAY,WAAWtmS,EAAIi8D,GAAGj8D,EAAIumS,kBAAkBvmS,EAAI2yE,KAAK/gE,aAAc5R,EAAI2yE,KAAK9tE,gBAAgB,QAAQ1E,EAAG,SACnjB,GAAkB,GCAtB,UACE7lC,KAAM,kBACN0mC,MAAO,CACL2xE,KAAM,CACJzxE,KAAMzzC,OACN0zC,UAAU,GAEZqlS,UAAW,CACTtlS,KAAM/K,QACNgL,UAAU,IAGdG,SAAU,CACR+kS,mBACE,OAAOt7U,KAAKy7U,UAAY,qBAAuB,2BAGnD9kS,QAAS,CACP6kS,kBAAkBE,EAAIC,GACpB,MAAMC,EAAQ,GAAGpsU,iBAAiBksU,QAC5BG,EAAQ,GAAGrsU,iBAAiBmsU,QAClC,OAAc,IAAPA,EAAWC,EAAQ,GAAGA,OAAWC,OCtBiT,MCO/V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIF,SAAe,GAAiB,QClBhC,IAAI,GAAS,WAAa,IAAI5mS,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,yCAAyC,CAAEL,EAAe,YAAEG,EAAG,MAAM,CAACE,YAAY,iDAAiDhrC,MAAO2qC,EAAmB,iBAAG,CAACA,EAAI87D,GAAI97D,EAAW,SAAE,SAASgzF,GAAO,OAAO7yF,EAAG,wBAAwB,CAAC5K,IAAIy9F,EAAM4sE,MAAM1+J,KAAK1kC,WAAaw2H,EAAM4sE,MAAM7mM,GAAGyD,WAAWgkC,MAAM,CAAC,MAAQwyF,EAAM,kBAAkBhzF,EAAI6mS,yBAAyB7mS,EAAIsgL,YAAYttF,EAAM4sE,QAAQ,sBAAsB5/J,EAAI8mS,yBAA2B9mS,EAAIsmS,WAAWhoU,SAAS0hC,EAAIsgL,YAAYttF,EAAM4sE,cAAaz/J,EAAG,MAAM,CAACE,YAAY,0BAA0BhrC,MAAO2qC,EAAmB,iBAAGA,EAAI87D,GAAI97D,EAAe,aAAE,SAASgzF,EAAMlgI,GAAO,OAAOqtC,EAAG,4BAA4B,CAAC5K,IAAI,aAAeziC,EAAM0tC,MAAM,CAAC,kBAAkBR,EAAI+mS,8BAA8B/zM,GAAO,MAAQA,QAAW,IAAI,GAAG7yF,EAAG,OAAO,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,8BACz7B,GAAkB,GCDlB,GAAS,WAAa,IAAIh8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACG,MAAM,CAACN,EAAImtF,YAAantF,EAAIs5P,YAAYjkS,MAAO2qC,EAAe,aAAG,CAACA,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAIsgL,aAAa,QAC9M,GAAkB,GCEtB,UACEhmN,KAAM,wBACN0mC,MAAO,CACLgyF,MAAO,CACL9xF,KAAMzzC,OACN0zC,UAAU,GAEZ6lS,cAAe,CACb9lS,KAAM5sC,OACN4wH,QAAS,GAEX+hN,gBAAiB,CACf/lS,KAAM/K,QACN+uF,SAAS,IAGb/0F,OACE,MAAO,CACLy7M,WAAW,EACX6tD,oBAAoB,EACpB5iQ,UAAU,IAGdyK,SAAU,CACRs+J,QACE,OAAO70M,KAAKioI,MAAM4sE,OAEpB8V,cACE,MAAO,CACL35G,IAAK,GAAGhxG,KAAKioI,MAAMj3B,SACnBxmG,KAAM,GAAGxK,KAAKioI,MAAMz9H,YAGxB43H,cACE,MAAO,CACL,uBAAuB,EACvB,gBAAgB,EAChB,kBAAmBpiI,KAAK6gP,UACxB,0BAA2B7gP,KAAK6gP,WAAa7gP,KAAK8rC,SAClD,+BAAgC9rC,KAAK6gP,YAAc7gP,KAAK8rC,SACxD,6BAA8B9rC,KAAKioI,MAAM43F,QACzC,6BAA8B7/N,KAAK8rC,WAAa9rC,KAAK6gP,UACrD,uBAAwB7gP,KAAK8rC,WAAa9rC,KAAK6gP,UAC/C,2BAA4B7gP,KAAKk8U,kBAAoBl8U,KAAK8rC,WAG9DsiQ,YACE,OAAQpuS,KAAK60M,MAAM1+J,MACjB,KAAKxqB,gBAAgBC,OACnB,OAAQ5rB,KAAKioI,MAAM5iG,MACjB,KAAKja,gBAAgBC,eAAjC,oCACY,KAAKD,gBAAgBE,aAAjC,kCACY,KAAKF,gBAAgBG,SAAjC,8BACY,KAAKH,gBAAgBI,OAAjC,4BACY,KAAKJ,gBAAgBK,QAAjC,6BACY,KAAKL,gBAAgBM,KAAjC,0BACY,KAAKN,gBAAgBlD,MAAjC,2BACY,KAAKkD,gBAAgBjD,KAAjC,0BACY,QAAZ,4BAEQ,KAAKwD,gBAAgBE,mBACnB,MAAO,kCACT,KAAKF,gBAAgBG,SACnB,OAAsB,IAAlB9rB,KAAK60M,MAAM7mM,GAAiB,uBACzB,wBACT,KAAK2d,gBAAgBI,MACnB,MAAO,qBAEX,MAAO,IAETwiR,aACE,OAAIvuS,KAAK6gP,UAAkB,GACpB,GAAG7gP,KAAKouS,cAAcpuS,KAAK8rC,SAAW,SAAW,iBAE1DypL,cACE,OAAQv1N,KAAK60M,MAAM1+J,MACjB,KAAKxqB,gBAAgBC,OAArB,KAAKD,gBAAgB,MAA7B,yBACQ,KAAKA,gBAAgBE,mBAA7B,2BAEM,MAAO,KAGX8qB,QAAS,CACPxK,SACE,MAAM0oK,EAAQ70M,KAAK60M,MACnB70M,KAAK6gP,UAAYhvM,MAAM09P,mBAAmBh8R,SAASvT,KAAK60M,MAAM7mM,KAAO6jC,MAAMC,SAC3E9xC,KAAK8rC,SAAWqwS,GAAiBC,SAASp8U,KAAKi8U,cAAepnI,EAAM/oK,UACpE9rC,KAAK0uS,mBAAqB75F,EAAM1+J,OAASxqB,gBAAgBG,UAAyB,IAAb+oL,EAAM7mM,IAAY6jC,MAAMC,YC1F8Q,MCQjX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAImD,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAASD,EAAIk5P,aAAyLl5P,EAAI+8D,KAA/K58D,EAAG,OAAO,CAACG,MAAMN,EAAImtF,YAAY3sF,MAAM,CAAC,GAAKR,EAAIsxO,SAAStxO,EAAIgzF,MAAM+1F,IAAI,GAAK/oL,EAAIsxO,SAAStxO,EAAIgzF,MAAMg2F,IAAI,GAAKhpL,EAAIsxO,SAAStxO,EAAIgzF,MAAMi2F,IAAI,GAAKjpL,EAAIsxO,SAAStxO,EAAIgzF,MAAMk2F,QACpR,GAAkB,GCEtB,UACE5uN,KAAM,4BACN0mC,MAAO,CACLgyF,MAAO,CACL9xF,KAAMzzC,OACN0zC,UAAU,GAEZ6lS,cAAe,CACb9lS,KAAM5sC,OACN4wH,QAAS,IAGb/0F,OACE,MAAO,CACL+oQ,cAAc,EACdriQ,UAAU,IAGdyK,SAAU,CACR6rF,cACE,MAAMA,EAAc,CAClB,2BAA2B,EAC3B,kCAAmCpiI,KAAK8rC,UAE1C,IAAIsiQ,EACJ,MAAMC,EAAaruS,KAAKioI,MAAMomK,WACxB7iL,EAAO6iL,EAAW7iL,KAClBl2G,EAAK+4R,EAAW/4R,GACtB,SAASg5R,EAAYz5F,GACnB,OAAQA,EAAMxvK,MACZ,KAAKja,gBAAgBC,eAA/B,gDACU,KAAKD,gBAAgBE,aAA/B,8CACU,KAAKF,gBAAgBG,SAA/B,0CACU,KAAKH,gBAAgBI,OAA/B,wCACU,KAAKJ,gBAAgBK,QAA/B,yCACU,KAAKL,gBAAgBM,KAA/B,sCACU,QAAV,QAGM,OAAQpW,EAAG6gC,MACT,KAAKxqB,gBAAgBC,OACnBwiR,EAAYE,EAAYh5R,IAAOg5R,EAAY9iL,GAC3C,MACF,KAAK7/F,gBAAgBE,mBACnBuiR,EAAY,8CACZ,MACF,KAAKziR,gBAAgBG,SACnBsiR,EAAY,oCACZ,MAMJ,YAHkB7rS,IAAd6rS,IACFhsK,EAAYgsK,IAAa,GAEpBhsK,IAGXzrF,QAAS,CACPxK,SACEnsC,KAAKmuS,aAAenuS,KAAKioI,MAAMomK,WAAWF,aAC1CnuS,KAAK8rC,SAAWqwS,GAAiBC,SAASp8U,KAAKi8U,cAAej8U,KAAKioI,MAAMn8F,WAE3Ey6O,SAASz+Q,GACP,OAAkB,IAARA,EAAH,OClEwW,MCQrX,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCbhC,IACEu0U,UAAW,EACXC,YAAa,EACbnrR,OAAQ,EAERirR,SAASG,EAAYC,GACnB,OAAQD,GACN,KAAKv8U,KAAKq8U,UACR,OAAO,EACT,KAAKr8U,KAAKs8U,YACR,OAAOE,EACT,KAAKx8U,KAAKmxD,OACR,OAAO,EAEX,OAAOqrR,IAIX,IACEjtU,KAAM,iBACN0sH,WAAY,CACVwgN,sBADJ,GAEIC,0BAAJ,IAEEzmS,MAAO,CACL8lS,wBAAyB,CACvB5lS,KAAM/K,QACN+uF,SAAS,GAEXohN,WAAY,CACVnlS,UAAU,EACV0zE,UAAWyxN,GAAc5zU,MAAMotG,QAAQwmO,SAA8Bh5U,IAAfg5U,GAExDoB,YAAa,CACXxmS,KAAM/K,QACN+uF,SAAS,IAGb/0F,OACE,MAAO,CACL+tQ,WAAY3C,GAAuB5kR,OACnCwnR,OAAQ,EACRC,mBAAoB,EACpBlkE,YAAY,EACZokE,WAAY,IAGhBh9P,SAAU,CACRmiL,SACE,OAAOu3E,GAAoBpgL,OAAO7vH,KAAKmzS,WAAY,MAErD9qO,UACE,OAAOroE,KAAK04N,OAAOrwJ,SAErB5zB,cACE,OAAOz0C,KAAK04N,OAAOjkL,aAErBg/P,kBACE,MAAO,CACLttK,MAAO,GAAGnmI,KAAK04N,OAAOvyF,WACtB2N,OAAQ,GAAG9zI,KAAK04N,OAAO5kF,cAG3Bg6J,oBACE,MAAO,CACL,gCAAgC,EAChC,+BAAgC9tS,KAAKiyG,UAI3C8sB,MAAO,CACLq0K,SAEEpzS,KAAK8xI,WAAW,YAGpBn7F,QAAS,CACPxK,SACEnsC,KAAKmzS,WAAa3C,GAAuB7nS,QACzC3I,KAAKozS,OAASzzP,GAAGksB,KAAKl5C,EAAEmqB,MACxB98C,KAAKmvO,WAAa19L,SAASC,WAAajxC,KAAKC,MAAQV,KAAKuzS,WAAa,KAEzExF,eAAel5F,GACb,OAAQA,EAAM1+J,MACZ,KAAKxqB,gBAAgBC,OAA7B,uBACQ,KAAKD,gBAAgBE,mBAA7B,mBACQ,KAAKF,gBAAgBG,SAA7B,yBACQ,KAAKH,gBAAgBI,MAA7B,sBAEM,KAAM,2BAERwpM,YAAY1gB,GACV,OAAQA,EAAM1+J,MACZ,KAAKxqB,gBAAgBC,OAArB,KAAKD,gBAAgB,MAA7B,gBACQ,KAAKA,gBAAgBE,mBAA7B,kBAEM,MAAO,kBAETiwT,yBAAyBc,GACvB,OAAK58U,KAAK+7U,wBACH/7U,KAAKu7U,WAAWhoU,SAASqpU,GAAYT,GAAiBhrR,OAASgrR,GAAiBE,UAD7CF,GAAiBG,aAG7DN,8BAA8B/zM,GAC5B,OAAKjoI,KAAK+7U,wBACH,KAAb,wDACA,8DACA,UACA,aAJgDI,GAAiBG,eC7G6S,MCQ9W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIrnS,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,OAAO,CAACE,YAAY,qBAAqBK,SAAS,CAAC,UAAYV,EAAIi8D,GAAGj8D,EAAI43R,eAAgB53R,EAAI4nS,WAAqB,WAAEznS,EAAG,MAAM,CAACE,YAAY,uCAAuC,CAACL,EAAIg8D,GAAG,qBAAqBh8D,EAAIi8D,GAAGj8D,EAAI4nS,WAAWC,YAAY,OAAO7nS,EAAI+8D,KAAM/8D,EAAI4nS,WAAsB,YAAEznS,EAAG,MAAM,CAACE,YAAY,uCAAuC,CAACL,EAAIg8D,GAAG,gBAAgBh8D,EAAIi8D,GAAGj8D,EAAI4nS,WAAWE,aAAa,OAAO9nS,EAAI+8D,KAAM/8D,EAAI4nS,WAAW1tR,GAAK,EAAG/Z,EAAG,MAAM,CAACE,YAAY,uCAAuC,CAACL,EAAIg8D,GAAG,wBAAwBh8D,EAAIi8D,GAAGj8D,EAAI4nS,WAAW1tR,IAAI,IAAIla,EAAIi8D,GAAGj8D,EAAI4nS,WAAWn7N,QAAU,eAAiB,IAAI,OAAOzsE,EAAI+8D,QAC9vB,GAAkB,GCAtB,UACEziG,KAAM,gBACN0mC,MAAO,CACL42R,WAAY,CACV12R,KAAMlrC,OACNmrC,UAAU,GAEZymS,WAAY,CACV1mS,KAAMzzC,OACN0zC,UAAU,KCV6U,MCQ7V,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCThC,IAAI4mS,GAAoB,GAExB,UACEztU,KAAM,mBACN0sH,WAAY,CACVk/L,mBADJ,GAEI8hB,gBAFJ,GAGI16M,cAHJ,GAII26M,mBAJJ,GAKIC,cAAJ,IAEElnS,MAAO,CACLjoC,GAAI,CACFmoC,KAAM5sC,OACN6sC,UAAU,GAEZ0kS,SAAU,CACR3kS,KAAM/K,QACNgL,UAAU,EACV+jF,SAAS,IAGb/0F,OACE,MAAO,CACL6I,MAAO,GACP1+B,KAAM,GACNskN,eAAe,EACf/6J,aAAa,IAGjBviB,SAAU,CAER2kS,cACE,OAAoB,IAAbl7U,KAAKgO,IAGdgtU,eACE,IAAKh7U,KAAKm7U,iBAAkB,MAAO,GACnC,MAAMH,EAAe,IAAI7iS,cAAcn4C,KAAKo9U,gBACtChC,EAAkBJ,EAAaz5N,iBAAiBj+G,KAAIuU,GAAK7X,KAAKu1N,YAAY19M,KAChF,MAAO,CACLgvC,aAAcm0R,EAAaqC,cAAc,GACzCvjS,cAAekhS,EAAaqC,cAAc,GAC1C9B,WAAYnoU,gBAAgBgoU,GAC5BA,gBAAAA,EACAkC,eAAgBtC,EAAasC,eAC7BR,WAAY1pU,gBAAgB4nU,EAAauC,gBACzCR,YAAa3pU,gBAAgB4nU,EAAaxmI,WAC1CrlJ,GAAI6rR,EAAa7rR,GACjBuyD,QAASs5N,EAAat5N,QACtBu5N,QAAS7nU,gBAAgB4nU,EAAauC,iBAAmBvC,EAAa7rR,GAAK,IAK/EgmK,eACE,IAAKn1N,KAAKm7U,iBAAkB,MAAO,GACnC,MAAM94N,EAAmB3jC,UAAU2jC,iBAAiBv6G,MAC9CqtN,EAAen1N,KAAKw9U,mBACpBpC,EAAkBjmH,EAAa5zG,iBAC3C,2EAQYk8N,EAAWtlS,cAAculS,gBAAgB19U,KAAKo9U,gBAC9CO,EAAsBxoH,EAAazzG,QACnCk8N,EAAc,CAAC,EAAGH,GAAUlqU,SAAS3E,OAAO03E,UAAUzgC,SAASl9C,SAC/Dk1U,EAAgB1oH,EAAahmK,KAAOsuR,EAC1C,MAAO,CACL52R,aAAcsuK,EAAakoH,cAAc,GAAKh7N,EAAiBg7N,cAAc,GAC7EvjS,cAAeq7K,EAAakoH,cAAc,GAAKh7N,EAAiBg7N,cAAc,GAC9E9B,WAAYnoU,gBAAgBgoU,GAC5BA,gBAAAA,EACA0B,WAAY1pU,gBAAgB+hN,EAAaooH,gBACzCR,YAAa3pU,gBAAgB+hN,EAAa3gB,WAC1CrlJ,GAAIgmK,EAAahmK,GACjBuyD,QAASi8N,GAAuBC,IAAgBC,EAChD5C,QAAS7nU,gBAAgB+hN,EAAaooH,iBAAmBpoH,EAAahmK,GAAK,IAG/EquR,qBACE,MAAMroH,EAAe,IAAIh9K,cAGzB,OAFAg9K,EAAaC,gBAAgBj9K,cAAc42G,gBAAgB,GAC3DomE,EAAaC,gBAAgBD,EAAaE,iBAAiBr1N,KAAKo9U,iBAAiB,GAC1EjoH,GAETylH,aACE,OAAI56U,KAAK86U,SAAiB,0BAA0B96U,KAAKuP,QAClDvP,KAAKk7U,YAAc,kBAAoB,yBAAyBl7U,KAAKuP,SAE9EwrU,iBACE,IAAK/6U,KAAKm7U,kBAAgE,IAA5Cn7U,KAAKg7U,aAAasC,eAAe/5U,OAAc,OAAO,KAGpF,IAAIu6U,EAAgB,IAAI99U,KAAKo9U,kBACzBU,EAAcv6U,OAAS,MAAKu6U,EAAgB,GAAGA,EAAcnyU,MAAM,EAAG,WAE1E,IAAK,MAAMkpM,KAAS70M,KAAKg7U,aAAasC,eAAgB,CACpD,MAAMtvU,EAAK,GAAG6mM,IAAQ/hM,MAAM,iBACtB2hD,EAAM7c,SAAS5pC,EAAG,GAAI,IAC5B,OAAQA,EAAG,IACT,IAAK,KACH8vU,EAAgBA,EAActmS,WAAW,IAAIy/D,OAAO,OAAOxiD,KAAQ,MAC/E,qDACY,MACF,QACEqpR,EAAgBA,EAActmS,WAAW,IAAIy/D,OAAO,SAASxiD,UAAa,MACtF,wDACY,OAGN,MAAO,6CAA6CqpR,EAActmS,WAAW,IAAK,IAAIA,WAAW,IAAK,2BAGxG4lS,iBACE,OAAOjlS,cAAc4lS,cAAc/9U,KAAKiuC,QAE1CukI,WACE,MAA+B,KAAxBxyK,KAAKo9U,gBAEdrJ,eACE,OAAO/zU,KAAKm7U,kBAAoBn7U,KAAK62U,eAEvCsE,mBACE,OAAOhjS,cAAcC,oBAAoBp4C,KAAKo9U,iBAEhDvG,gBAGE,MAAMmH,EAAgB,CAC5B,mEACA,oEAEM,OAAOA,EAAczqU,UAAS,EAApC,2CAEIsnU,cACE,OAAI76U,KAAK86U,SAAiB,SACnB96U,KAAKk7U,YAAc,SAAW,SAGzCn8M,MAAO,CACL9wF,MAAMgwS,GACJjB,GAAoBiB,IAIxBpjN,UACE,MAAMxiF,EAASzpC,OAAO2pC,UAAUC,QAAQx4C,KAAKgO,IAC7ChO,KAAKiuC,MAAQoK,EAASA,EAAOgwB,QAAU20Q,GACvCh9U,KAAKuP,KAAO8oC,EAASA,EAAO9oC,KAAO,IAErCotH,UACE38H,KAAK2/H,MAAM1xF,MAAMtjC,UAEnBgsC,QAAS,CACPxK,SACEnsC,KAAK84D,YAAcD,OAAOC,aAE5B0uG,UACE,GAAIxnK,KAAK86U,SACP96U,KAAK8zN,oBACb,qBACQ,GAAI9zN,KAAK6zN,eAAiBh7J,OAAOC,YAAa,CAC5ClqD,OAAOqjG,QAAS,EAChB,MAAM2V,EAAO,IAAIzvE,cAAcn4C,KAAKo9U,gBAGpC,YAFA/+J,oBAAmB,IAC7B,mFAGQr+K,KAAKk+U,kBAELl+U,KAAKm+U,cAGT9C,yBACEr7U,KAAKiuC,MAAQkK,cAAcimS,gBAAgBp+U,KAAKiuC,QAElDiwS,aACOl+U,KAAK+zU,eACN/zU,KAAK62U,eAAez/R,kBAAkB,IAAI7L,SAC9CyxS,GAAoB,GACpBh9U,KAAKyqN,YAGLtyK,cAAcmqE,kBAAkBtiH,KAAKw9U,mBAAmBj8N,kBAAkB,EAAOvhH,KAAKm1N,aAAazzG,WAErGy8N,aACMn+U,KAAK+zU,eACPnlU,OAAO2pC,UAAUC,QAAQx4C,KAAKgO,IAAIq6D,QAAUroE,KAAKiuC,MACjDhrC,OAAOiqG,OAAOrnD,SAAS,cAAc7lD,KAAKuP,6BAC1CvP,KAAKyqN,cAGTqJ,eACE,MAAMvkN,EAAOX,OAAO2pC,UAAUC,QAAQx4C,KAAKgO,IAAIuB,KACzC2lN,EAAa3lN,EAAO,iBAAiBA,KAAU,eACrDX,OAAO2pC,UAAUC,QAAQx4C,KAAKgO,IAAIq6D,QAAU,GAC5Cz5D,OAAO2pC,UAAUC,QAAQx4C,KAAKgO,IAAIuB,KAAO,GACzCtM,OAAOiqG,OAAOrnD,SAAS,GAAGqvK,uBAAgCl1N,KAAKgO,GAAK,MAEtEunN,YAAY1gB,GACV,OAAOA,aAAiBr4B,iBAAmB,KAAKq4B,EAAM7mM,KAAO,GAAG6mM,EAAM7mM,QCvNoR,MCQhW,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,GAAS,WAAa,IAAIinC,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,uBAAuBvzC,GAAG,CAAC,QAAU+yC,EAAIq4L,qBAAqBhhG,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,wBAAwBh8D,EAAIi8D,GAAGj8D,EAAIopS,WAAW,cAAc5xM,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,oBAAoBw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,0DAA2Dh8D,EAAc,WAAEG,EAAG,MAAM,CAACA,EAAG,MAAMH,EAAIg8D,GAAG,wEAAwEh8D,EAAIi8D,GAAGj8D,EAAIopS,WAAW,6JAA6JppS,EAAI+8D,KAAM/8D,EAAc,WAAEG,EAAG,IAAI,CAACA,EAAG,MAAMH,EAAIg8D,GAAG,4SAA4S77D,EAAG,OAAO,CAACE,YAAY,eAAe,CAACL,EAAIg8D,GAAG,+CAA+Ch8D,EAAIi8D,GAAGj8D,EAAI9hC,YAAY,OAAQ8hC,EAAIy4L,aAAa,0CAA0Cz4L,EAAI+8D,KAAK58D,EAAG,MAAMA,EAAG,OAAO,CAACE,YAAY,eAAe,CAACL,EAAIg8D,GAAG,wLAAwL77D,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,2CAA2Ch8D,EAAIi8D,GAAGj8D,EAAIopS,WAAW,kBAC7pD,GAAkB,GCEtB,UACE9uU,KAAM,6BACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACLvhC,SAAU,CACRyhC,KAAMyuE,SACNxuE,UAAU,EACV+jF,QAAS,KAAM,KAEjBuzG,WAAY,CACVv3L,KAAM5sC,OACN6sC,UAAU,EACV+jF,QAAS,IAGb/0F,OACE,MAAO,CACLghF,WAAY,EACZk4N,mBAAmB,IAGvB/nS,SAAU,CACRm7F,gBAAiB,CACfh/H,MACE,OAAO1S,KAAK68H,WAAWpiD,KAAK1xD,QAAQkwB,UAAUsoF,gBAEhD1uH,IAAI/K,GACF9H,KAAK68H,WAAWpiD,KAAK1xD,QAAQkwB,UAAUsoF,eAAiBz5H,IAG5Du2U,YACE,OAAOr+U,KAAKs+U,kBAAoB,OAAS,UAG7C3nS,QAAS,CACPxK,SACEnsC,KAAKomH,WAAatlB,cAAckvB,gBAAgBzsH,OAChDvD,KAAKs+U,kBAAoB1vU,OAAOma,QAAQkwB,UAAU9C,OAASw3E,eAAeE,OAE5Ey/G,sBAAJ,MACMzzH,iBAAiBqf,YAAYl5H,KAAK0xI,iBACxC,sDC9C0W,MCQ1W,IAAI,IAAY,OACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIF,SAAe,GAAiB,QCnBhC,IAAI,IAAS,WAAa,IAAIz8F,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAAClzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,sBAAsBw7B,OAAM,GAAM,CAACjiG,IAAI,cAAcpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,cAAcw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,YAAYw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,sHAAsH77D,EAAG,MAAMA,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,wBAAwBL,EAAI87D,GAAI97D,EAAe,aAAE,SAAS0tD,EAAMnhG,GAAG,OAAO4zC,EAAG,MAAM,CAAC5K,IAAIhpC,EAAE8zC,YAAY,8BAA8B,CAACF,EAAG,IAAI,CAACH,EAAIg8D,GAAG,OAAOh8D,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGvO,GAAO,UAAS,GAAGvtD,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,kMAC7zB,IAAkB,GCEtB,WACE1hG,KAAM,gBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE5kR,SAAU,CACRgoS,cACE,MAAO,CACb,oJAEA,2IAEA,4GAIE5nS,QAAS,CACPwmR,iBACE/yN,YAAYo0O,cCrB2U,QCQ7V,IAAI,KAAY,OACd,IACA,IACA,KACA,EACA,KACA,WACA,MAIF,UAAe,IAAiB,QCnBhC,IAAI,IAAS,WAAa,IAAIvpS,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,OAAS,aAAavzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,+CAA+Cw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,wCAAwC,CAACL,EAAIg8D,GAAG,8IAA8I77D,EAAG,MAAMA,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACF,EAAG,MAAMH,EAAIg8D,GAAG,uDAAuD77D,EAAG,MAAMH,EAAIg8D,GAAG,6DAA6D77D,EAAG,MAAMH,EAAIg8D,GAAG,uDAAuD77D,EAAG,MAAMH,EAAIg8D,GAAG,yCAAyC77D,EAAG,MAAMH,EAAIg8D,GAAG,gDAAiDh8D,EAAsB,mBAAEG,EAAG,OAAO,CAACA,EAAG,MAAMH,EAAIg8D,GAAG,wBAAwBh8D,EAAI+8D,OAAO58D,EAAG,MAAMH,EAAIg8D,GAAG,6SACn/B,IAAkB,GCEtB,WACE1hG,KAAM,iBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE/1R,OACE,MAAO,CACLq5S,oBAAoB,IAGxB9nS,QAAS,CACPxK,SACEnsC,KAAKy+U,mBAAqBhtS,SAAStG,YAErCuzS,oBACE1+U,KAAKyqN,YACLlwM,MAAMjC,QAAQkC,KAAK,2CACzB,CAAQ,WAAR,kCAEI2iT,iBACEn9T,KAAKyqN,YACLzpK,OAAO8oC,UCxBiV,QCQ9V,IAAI,KAAY,OACd,IACA,IACA,KACA,EACA,KACA,WACA,MAIF,UAAe,IAAiB,QCnBhC,IAAI,IAAS,WAAa,IAAI70C,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAAClzC,GAAG,CAAC,QAAU+yC,EAAI0pS,aAAaryM,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI2pS,YAAY,sBAAsBnyM,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,oBAAoBw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACL,EAAIg8D,GAAG,6BAA6Bh8D,EAAIi8D,GAAGj8D,EAAI4P,WAAW,6CAA6CzP,EAAG,OAAO,CAACE,YAAY,cAAc,CAACL,EAAIg8D,GAAG,iCAAiCh8D,EAAIi8D,GAAGj8D,EAAI2pS,YAAY,KAAM3pS,EAAIi8D,GAAGj8D,EAAI6/B,QAAQvlE,MAAM,QAAS6lC,EAAG,OAAO,CAACK,MAAM,CAAC,cAAcR,EAAI6/B,QAAQzyB,cAAc,CAACjN,EAAG,IAAI,CAACE,YAAY,6BAA6BF,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,uNAA2N77D,EAAG,MAAMA,EAAG,MAAMH,EAAIg8D,GAAG,8GAClgC,IAAkB,GCEtB,WACE1hG,KAAM,2BACN0sH,WAAY,CACVk/L,mBAAJ,IAEEllR,MAAO,CACL6+B,QAAS,CACP3+B,KAAMzzC,OACN0zC,UAAU,GAEZu4H,YAAa,CACXx4H,KAAM/K,QACNgL,UAAU,GAEZq4H,gBAAiB,CACft4H,KAAMlrC,OACNmrC,UAAU,EACV+jF,QAAS,OAGb5jF,SAAU,CACRqoS,aACE,OAAO5+U,KAAK2uK,YAAc,oBAAsB,mBAElD9pH,YAAJ,MACM,OAAN,uEAGElO,QAAS,CACPgoS,cACE3+U,KAAK80E,QAAQy5F,iBAAgB,MCjCqU,QCQxW,IAAI,KAAY,OACd,IACA,IACA,KACA,EACA,KACA,WACA,MAIF,UAAe,IAAiB,QCnBhC,IAAI,IAAS,WAAa,IAAIt5H,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,qBAAqB,CAACK,MAAM,CAAC,eAAc,GAAOvzC,GAAG,CAAC,QAAU+yC,EAAIkoR,gBAAgB7wL,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,+BAA+Bw7B,OAAM,GAAM,CAACjiG,IAAI,eAAepoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,cAAcw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,yBAAyBL,EAAI87D,GAAI97D,EAAW,SAAE,SAASoxE,EAAKt+G,GAAO,OAAOqtC,EAAG,OAAO,CAAC5K,IAAIziC,GAAO,CAACktC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGmV,GAAM,KAAKjxE,EAAG,WAAU,MAC7gB,IAAkB,GCEtB,WACE7lC,KAAM,mBACN0sH,WAAY,CACVk/L,mBAAJ,IAEE5kR,SAAU,CACRj+B,UACE,MAAMumU,EAAQ7vU,OAAOhG,QAAQkP,UAAW,EAAG,GAC3C,MAAO,kDAAkD2mU,2DACRA,yGACkCA,KAAzF,cAGEloS,QAAS,CACPwmR,iBACErnH,iBClB0V,QCOhW,IAAI,KAAY,OACd,IACA,IACA,KACA,EACA,KACA,KACA,MAIF,UAAe,IAAiB,QClBhC,IAAI,IAAS,WAAa,IAAI7gK,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACk3F,YAAYr3F,EAAIs3F,GAAG,CAAC,CAAC/hG,IAAI,SAASpoC,GAAG,WAAW,MAAO,CAAC6yC,EAAIg8D,GAAG,yDAAyDw7B,OAAM,MAAS,CAACr3F,EAAG,MAAM,CAACE,YAAY,2BAA2BL,EAAI87D,GAAI97D,EAAS,OAAE,SAASy4Q,EAAKnhT,GAAK,OAAO6oC,EAAG,IAAI,CAAC5K,IAAIj+B,GAAK,CAAC0oC,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGw8M,GAAM,UAAS,GAAGt4Q,EAAG,gBAAgB,CAACE,YAAY,6EAA6EpzC,GAAG,CAAC,MAAQ+yC,EAAIw1K,YAAY,CAACx1K,EAAIg8D,GAAG,aAAa,IACziB,IAAkB,GCItB,WACE1hG,KAAM,6BACN0sH,WAAY,CACVsG,cADJ,GAEIw/L,aAAJ,IAEE38R,OACE,MAAO,CACLw8B,YAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACzCk9Q,gBAAiB/nR,KAGrBxgB,SAAU,CACRoiS,QACE,MAAO,CAEP,qDACN,IACA,mBACA,8CACA,IACM,sBACN,qCACA,IACA,oBACA,iDACA,yIACA,qIACA,IACA,qBACA,2CACA,8HACA,kIACA,iJACA,IACA,kBACA,sCACA,uCACA,2LACA,0CACA,IACA,kBACA,iCACA,iCACA,iDACA,IACA,iBACA,wCACA,IACA,sBACA,gCACA,qBACA,sHACA,0IACA,IACA,6BACA,oCACA,qCACA,iCACA,iHACA,iFACA,IACA,oBACA,4BACA,wCACA,sBACA,iDACM,6EAIJhiS,QAAS,CACPxK,SACEnsC,KAAK4hE,YAAc,IAAIrF,eAAeqF,gBC9E8T,QCQ1W,IAAI,KAAY,OACd,IACA,IACA,KACA,EACA,KACA,WACA,MAIF,UAAe,IAAiB,QCnBhC,IAAI,IAAS,WAAa,IAAI3sB,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACE,YAAY,qBAAqB,CAACF,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACL,EAAIg8D,GAAG,aAAa77D,EAAG,kBAAkBA,EAAG,MAAM,CAACE,YAAY,wCAAwC,EAA6B,IAA3BL,EAAI8pS,SAASxrO,SAAiB,CAACn+D,EAAG,MAAM,CAACE,YAAY,4CAA4CG,MAAM,CAAC,IAAO,cAAiBR,EAAI8pS,SAAS/rU,QAAQiiC,EAAI8pS,SAASxrO,UAAe,SAAMn+D,EAAG,IAAI,CAACE,YAAY,8CAA8C,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGj8D,EAAI8pS,SAAS/rU,QAAQiiC,EAAI8pS,SAASxrO,UAAUhkG,MAAM,QAAQ0lC,EAAI+8D,MAAM,IAAI,IACvnB,IAAkB,GCDlB,IAAS,WAAa,IAAI/8D,EAAIj1C,KAASk1C,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,yBAAyBL,EAAI87D,GAAI97D,EAAI8pS,SAAgB,SAAE,SAASr3O,EAAKn7F,GAAK,OAAO6oC,EAAG,MAAM,CAAC5K,IAAIk9D,EAAKn4F,KAAK+lC,YAAY,aAAaC,MAAM,CAAE,uBAAwBN,EAAI8pS,SAASxrO,WAAahnG,GAAOrK,GAAG,CAAC,MAAQ,SAASivG,GAAQ,OAAOl8D,EAAI29F,YAAYrmI,MAAQ,CAAC6oC,EAAG,MAAM,CAACE,YAAY,qBAAqB,CAACF,EAAG,MAAM,CAACE,YAAY,kBAAkBG,MAAM,CAAC,IAAO,cAAiBiyD,EAAU,SAAMtyD,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACL,EAAIg8D,GAAG,IAAIh8D,EAAIi8D,GAAGxJ,EAAKn4F,MAAM,cAAa,IAC1kB,IAAkB,GCDtB,WACEyD,QAAS,CAAC,CACRzD,KAAM,WACNk4F,KAAM,6CACN4T,MAAO,sBAET,CACE9rG,KAAM,SACNk4F,KAAM,4BACN4T,MAAO,oBAET,CACE9rG,KAAM,eACNk4F,KAAM,kCACN4T,MAAO,0BAET,CACE9rG,KAAM,yBACNk4F,KAAM,+CACN4T,MAAO,kBAET,CACE9rG,KAAM,YACNk4F,KAAM,6DACN4T,MAAO,uBAET,CACE9rG,KAAM,YACNk4F,KAAM,mDACN4T,MAAO,uBAET,CACE9rG,KAAM,uBACNk4F,KAAM,8CACN4T,MAAO,kCAET,CACE9rG,KAAM,WACNk4F,KAAM,2CACN4T,MAAO,qBAET,CACE9rG,KAAM,0BACNk4F,KAAM,8DACN4T,MAAO,2BAET,CACE9rG,KAAM,cACNk4F,KAAM,0BACN4T,MAAO,0BAET9H,UAAW,GChDb,IAAIyrO,KAAkB,EACtB,WACEzvU,KAAM,WACN61B,OACE,MAAO,CACL25S,SAAN,MAGEpiN,UACEzyH,SAASE,KAAKypJ,iBAAiB,QAAS7zJ,KAAKk8S,gBAE/Cp8K,gBACE51H,SAASE,KAAKw7K,oBAAoB,QAAS5lL,KAAKk8S,eAChDl8S,KAAKk8S,iBAEPvlQ,QAAS,CACPulQ,gBACM8iC,MACJ,IAAN,cAEIpsM,YAAYrmI,GAGN,IAAV,cACQ,IAAR,WACQyyU,KAAkB,EAClB79U,YAAW,IAAM69U,KAAkB,GAAO,IAE1Cp/U,OAAOosG,KAAK,IAApB,oBC/B0W,QCQ1W,IAAI,KAAY,OACd,IACA,IACA,KACA,EACA,KACA,WACA,MAIF,UAAe,IAAiB,QCbhC,KACEz8F,KAAM,gBACN0sH,WAAY,CACV8lM,aADJ,GAEIkd,eAAJ,KAEE75S,OACE,MAAO,CACL25S,SAAN,MAGEpoS,QAAS,CACPxK,SACgC,QAA1BnsC,KAAK68H,WAAWv0B,OAAiBvmG,SAASe,SAASY,WAAWgE,gBCnBiS,QCQzW,IAAI,KAAY,OACd,IACA,IACA,KACA,EACA,KACA,WACA,MAIF,UAAe,IAAiB,QCoEhC,IAAIw3U,IAAc,EACX,MAAM3kU,IACXvY,YAAY81C,EAAWklI,EAAW,EAAG3G,GACnCr2K,KAAKm/U,WAAarnS,EAClB93C,KAAKo/U,aAAe,GACpBp/U,KAAKq/U,UAAYriK,EACjBh9K,KAAKs/U,YAAcjpK,EAMrBkpK,oBAAoBlpK,GAGlB,MAAMmpK,EAAgB,CAAC97U,WAAWO,eAAgBP,WAAWS,mBAAoBT,WAAWa,iBAC1Fb,WAAWe,qBAAsBf,WAAWiB,qBAC9C,IAAI86U,GAAc,EAClB,IAAK,MAAMxyN,KAAYuyN,EACjBvyN,IAAaopD,IAAYopK,GAAc,GACvCA,GAAa19U,SAAS0B,GAAGvB,GAAG+qH,GAAU,IAAMjtH,KAAK0/U,mBAAmB1/U,KAAKm/U,YAK1EM,GAAa19U,SAAS0B,GAAGvB,GAAGm0K,GAAY,IAAMr2K,KAAK0/U,mBAAmB1/U,KAAKm/U,YAGlF3kU,KAAKmlU,GACH,IAAK18U,OAAOqX,YAAa,OACzBta,KAAK4/U,UAAYV,MACjBl/U,KAAK6/U,OAASn9U,OAAO0S,OAAO,GAAIuqU,GAAe,IAC3C3/U,KAAKs/U,aAAat/U,KAAKu/U,oBAAoBv/U,KAAKs/U,aACpD,OAAIK,QAAJ,IAAIA,GAAAA,EAAatpK,YAAYr2K,KAAKu/U,oBAAoBI,EAAYtpK,YAElE,MAAMypK,EAAar8U,GAAG+2E,KAAK83E,MAAMiwB,MAEjCu9J,EAAWr7Q,QAAQzkE,MACnBua,IAAMwlU,iBAGJh1Q,aACF,OAAOtnE,GAAG+2E,KAAK83E,MAAM3pJ,UAAY3I,KAG/B83C,gBACF,OAAO93C,KAAKm/U,WAGVlpS,YACF,OAAOj2C,KAAK6/U,OAGV7iK,eACF,OAAOh9K,KAAKq/U,UAGdK,kBACE39U,SAAS0B,GAAGhB,OAAOzC,KAAKm/U,YACxB17U,GAAG+2E,KAAK83E,MAAMiwB,MAAQ9+K,GAAG+2E,KAAK83E,MAAMiwB,MAAM3/K,QAAOi4B,GAAKA,EAAE+kT,YAAc5/U,KAAK4/U,YACxC,IAA/Bn8U,GAAG+2E,KAAK83E,MAAMiwB,MAAMh/K,OAAcE,GAAG+2E,KAAK83E,MAAM3pJ,aAAUpG,EACzDkB,GAAG+2E,KAAK83E,MAAM3pJ,QAAUlF,GAAG+2E,KAAK83E,MAAMiwB,MAAM,GAG9B,wBACnB,MAAMu9J,EAAar8U,GAAG+2E,KAAK83E,MAAMiwB,MACjCu9J,EAAWt6O,MAAK,CAAC53F,EAAGsG,IAAMA,EAAE8oK,SAAWpvK,EAAEovK,WAEzC,MAAMgjK,EAAc,IAAI,IAAIzyU,IAAIuyU,IAChCr8U,GAAG+2E,KAAK83E,MAAMiwB,MAAQy9J,EACtBv8U,GAAG+2E,KAAK83E,MAAM3pJ,QAAUq3U,EAAY,GAG3B,cACJ/8U,OAAOqX,cACZ7W,GAAG+2E,KAAK83E,MAAMiwB,MAAMtwJ,QACe,IAA/BxuB,GAAG+2E,KAAK83E,MAAMiwB,MAAMh/K,OAAcE,GAAG+2E,KAAK83E,MAAM3pJ,aAAUpG,EACzDkB,GAAG+2E,KAAK83E,MAAM3pJ,QAAUlF,GAAG+2E,KAAK83E,MAAMiwB,MAAM,GACjD9+K,GAAG+2E,KAAK83E,MAAMkwB,cAAgB,IAGlB,iBACZ,GAAKv/K,OAAOqX,YAAZ,CACA,MAAO7W,GAAG+2E,KAAK83E,MAAMiwB,MAAMh/K,OACrBE,GAAG+2E,KAAK83E,MAAMiwB,MAAM,GAAG2wB,KACzBzvM,GAAG+2E,KAAK83E,MAAMiwB,MAAM,GAAG2wB,OAEvB34L,IAAM24L,OAGVzvM,GAAG+2E,KAAK83E,MAAM3pJ,aAAUpG,GAGfwoE,oBACT,OAAOtnE,GAAG+2E,KAAK83E,MAAM3pJ,mBAAmB3I,MAI5C,MAAMigV,YAAmC1lU,IACvCC,KAAKxM,GACHkL,MAAMsB,KAAK,CAAExM,GAAAA,KAIjB,MAAMkyU,YAAkB3lU,IACtBC,KAAKy8G,GACH/9G,MAAMsB,KAAK,CAAEy8G,KAAAA,KA0FjB,SAASkpN,IAAY/zO,GAAM,8CACzB,MAAM/W,EAAY,CAChBwV,eAAgB,EAChBjoD,gBAAiB,IAAI55C,QAAQ,GAC7B0iD,WAAY,IAAI1iD,QAAQ,GACxBi+C,WAAY,IAAIj+C,QAAQ,GACxBgxC,UAAW,EACXhJ,eAAgB,IAAIhoC,QAAQ,GAC5BmoC,eAAgB,IAAInoC,QAAQ,GAC5B++C,gBAAiB,IAAI/+C,QAAQ,GAC7Bg8C,kBAAmB,EACnBgR,YAAa,IAAIhtD,QAAQ,GACzBm4T,UAAW,EACXif,QAAS,IAAIp3U,QAAQ,GACrBu3E,SAAU,EACVD,cAAe,IAAIt3E,QAAQ,GAE3Bq3U,UAAW,EACXzvH,SAAU,GACVgsG,kBAAmB,GAwBrB,OApBAvnO,EAAUwV,eAAV,oBAA2BuB,EAAKzpD,eAAhC,aAA2B,EAAckoD,sBAAzC,QAA2D,IAAMuB,EAAK5kC,gBACtE6tB,EAAUzyC,gBAAgBj5C,SAAS,IAAIX,QAAJ,UAAYojG,EAAKzpD,eAAjB,aAAY,EAAcC,kBAC7DyyC,EAAU3pC,WAAW/hD,SAAS,IAAIX,QAAQojG,EAAK1gD,aAC/C2pC,EAAUpuC,WAAWt9C,SAAS,IAAIX,QAAQojG,EAAKnlD,aAC/CouC,EAAUr7C,UAAV,UAAsBoyD,EAAKpyD,iBAA3B,QAAwC,EACxCq7C,EAAUrkD,eAAernC,SAAS,IAAIX,QAAQojG,EAAKp7D,iBACnDqkD,EAAUlkD,eAAexnC,SAAS,IAAIX,QAAQojG,EAAKj7D,iBACnDkkD,EAAUttC,gBAAgBp+C,SAAS,IAAIX,QAAJ,UAAYojG,EAAKrjF,eAAjB,aAAY,EAAcg/B,kBAC7DstC,EAAUrwC,kBAAV,oBAA8BonD,EAAKrjF,eAAnC,aAA8B,EAAcwjF,aAA5C,QAAqD,EAGrDlX,EAAUr/B,YAAYrsD,SAAS,IAAIX,QAAJ,oBAAYojG,EAAKzpD,eAAjB,aAAY,EAAcsF,YAAY6nC,aAAtC,4BAAgDsc,EAAKvjF,gBAArD,aAAgD,EAAemtC,mBAA/D,QAA8E,IAC7Gq/B,EAAU8rO,UAAV,oBAAsB/0N,EAAKzpD,eAA3B,aAAsB,EAAcuF,YAAYyrB,kBAAhD,QAA8D,EAC9D0hB,EAAU+qP,QAAQz2U,SAAS,IAAIX,QAAJ,UAAYojG,EAAKv9F,kBAAjB,aAAY,EAAiBC,MAAM6zC,QAAQC,kBACtEyyC,EAAU9U,SAAV,oBAAqB6rB,EAAKv9F,kBAA1B,aAAqB,EAAiBC,MAAMyxE,gBAA5C,QAAwD,EACxD8U,EAAU/U,cAAc32E,SAAS,IAAIX,QAAJ,UAAYojG,EAAKv9F,kBAAjB,aAAY,EAAiBC,MAAMwxE,gBACpE+U,EAAUgrP,UAAV,oBAAsBj0O,EAAKv9F,kBAA3B,aAAsB,EAAiBC,MAAMw9F,iBAA7C,QAA0D,EAC1DjX,EAAUu7H,SAAV,oBAAqBxkH,EAAK/Q,eAA1B,aAAqB,EAAc+sD,oBAAnC,QAAmD,GACnD/yD,EAAUunO,kBAAoBzuH,GAAgBE,qBAAqBjiG,GAE5D/W,EA9HT96E,IAAM28P,uBAAyB,IAAI+oE,IAA2BK,IAC9D/lU,IAAMgmU,uBAAyB,IAAIN,IAA2BO,IAC9DjmU,IAAMkmU,qBAAuB,IAAIR,IAA2BS,IAE5DnmU,IAAMkyL,QAAU,IAAIyzI,IAAUS,IAAe,GAE7CpmU,IAAM8vI,eAAiB,IAAI9vI,IAAMqmU,GAAqB,EAAGl9U,WAAWO,gBAEpEsW,IAAMi2F,iBAAmB,IAAIj2F,IAAMsmU,GAAuB,EAAGn9U,WAAWS,oBACxEoW,IAAM+lF,UAAY,IAAI/lF,IAAMumU,GAAgB,EAAGp9U,WAAWa,kBAC1DgW,IAAMovI,cAAgB,IAAIpvI,IAAMwmU,GAAoB,EAAGr9U,WAAWiB,qBAClE4V,IAAM6vI,iBAAmB,IAAI7vI,IAAMymU,GAAuB,EAAGt9U,WAAWe,sBACxE8V,IAAMsrC,SAAW,IAAItrC,IAAM0mU,GAAe,EAAGv9U,WAAWe,sBACxD8V,IAAM2mU,cAAgB,IAAI3mU,IAAM4mU,GAAoB,EAAGz9U,WAAWiB,qBAClE4V,IAAMokK,aAAe,IAAIpkK,IAAM6mU,GAAmB,EAAG19U,WAAWiB,qBAChE4V,IAAMwO,QAAU,IAAIxO,IAAM8mU,GAAc,EAAG39U,WAAWiB,qBACtD4V,IAAMqvI,aAAe,IAAIrvI,IAAM+mU,GAAmB,EAAG59U,WAAWiB,qBAChE4V,IAAM1L,WAAa,IAAI0L,IAAMgnU,GAAsB,GACnDhnU,IAAMkxL,UAAY,IAAIlxL,IAAMinU,GAAgB,GAC5CjnU,IAAMknU,cAAgB,IAAIlnU,IAAMmnU,GAAmB,GACnDnnU,IAAMonU,cAAgB,IAAIpnU,IAAMqnU,IAChCrnU,IAAMszK,WAAa,IAAItzK,IAAMsnU,IAC7BtnU,IAAMo2M,WAAa,IAAIp2M,IAAMunU,IAC7BvnU,IAAMmvI,WAAa,IAAInvI,IAAMwnU,GAAiB,GAC9CxnU,IAAMy/C,QAAU,IAAIz/C,IAAMynU,GAAkB,GAE5CznU,IAAM0nU,oBAAsB,IAAI1nU,IAAM2nU,IACtC3nU,IAAM4nU,mBAAqB,IAAI5nU,IAAM6nU,IACrC7nU,IAAM8nU,oBAAsB,IAAI9nU,IAAM+nU,IACtC/nU,IAAMunP,oBAAsB,IAAIvnP,IAAMgoU,IACtChoU,IAAMo1M,kBAAoB,IAAIp1M,IAAMioU,IACpCjoU,IAAMk5P,sBAAwB,IAAIl5P,IAAMkoU,IACxCloU,IAAM2sI,QAAU,IAAI3sI,IAAMmoU,IAC1BnoU,IAAMooU,YAAc,IAAIpoU,IAAMqoU,IAC9BroU,IAAMsoU,iBAAmB,IAAItoU,IAAMuoU,IACnCvoU,IAAM8yJ,WAAa,IAAI9yJ,IAAMwoU,IAC7BxoU,IAAMyoU,cAAgB,IAAIzoU,IAAM0oU,IAChC1oU,IAAM2oU,QAAU,IAAI3oU,IAAM4oU,IAC1B5oU,IAAM6oU,cAAgB,IAAI7oU,IAAM8oU,IAEhC9oU,IAAMm0J,YAAc,IAAIn0J,IAAM+oU,IAA0B,GACxD/oU,IAAMwvT,gBAAkB,IAAIxvT,IAAMgpU,GAA2B,GAC7DhpU,IAAMipU,YAAc,IAAIjpU,IAAMkpU,GAAkB,EAAG//U,WAAWyB,gBAC9DoV,IAAMixP,WAAa,IAAIjxP,IAAMmpU,GAAiB,EAAGhgV,WAAWyB,gBAC5DoV,IAAM6mC,eAAiB,IAAI7mC,IAAMopU,GAAqB,EAAGjgV,WAAWyB,gBACpEoV,IAAM4vI,YAAc,IAAI5vI,IAAMqpU,GAAkB,EAAGlgV,WAAWyB,gBAC9DoV,IAAMmxP,2BAA6B,IAAInxP,IAAMspU,GAAgC,EAAGngV,WAAWyB,gBAC3FoV,IAAMoxP,wBAA0B,IAAIpxP,IAAMupU,GAA6B,EAAGpgV,WAAWyB,gBAErFoV,IAAMojP,mBAAqB,IAAIpjP,IAAMwpU,IACrCxpU,IAAM0vI,UAAY,IAAI1vI,IAAMypU,IAAgB,EAAGtgV,WAAWiB,qBAC1D4V,IAAMsvI,aAAe,IAAItvI,IAAM0pU,GAAmB,EAAGvgV,WAAWiB,qBAChE4V,IAAM2pU,cAAgB,IAAI3pU,IAAM4pU,IAChC5pU,IAAMmjP,aAAe,IAAInjP,IAAM6pU,IAC/B7pU,IAAM40P,mBAAqB,IAAI50P,IAAM8pU,IACrC9pU,IAAM02K,SAAW,IAAI12K,IAAM+pU,KAC3B/pU,IAAM8kF,IAAM,IAAI9kF,IAAMgqU,IACtBhqU,IAAMyzM,YAAc,IAAIzzM,IAAMiqU,IAC9BjqU,IAAMw9E,QAAU,IAAIx9E,IAAMkqU,GAAc,GACxClqU,IAAM+8E,UAAY,IAAI/8E,IAAMmqU,GAAgB,GAC5CnqU,IAAMiwI,aAAe,IAAIjwI,IAAMoqU,IAC/BpqU,IAAMqqU,SAAW,IAAIrqU,IAAMsqU,IAC3BtqU,IAAM+tL,OAAS,IAAI/tL,IAAMuqU,IACzBvqU,IAAM0vP,aAAe,IAAI1vP,IAAMwqU,IAC/BxqU,IAAMw7H,iBAAmB,IAAIx7H,IAAMyqU,IACnCzqU,IAAM27H,sBAAwB,IAAI37H,IAAM0qU,IACxC1qU,IAAMk1H,wBAA0B,IAAIl1H,IAAM2qU,IAC1C3qU,IAAMozN,0BAA4B,IAAIpzN,IAAM4qU,IAC5C5qU,IAAMm0H,wBAA0B,IAAIn0H,IAAM6qU,IAC1C7qU,IAAMo0H,kBAAoB,IAAIp0H,IAAM8qU,IACpC9qU,IAAM6yJ,mBAAqB,IAAI7yJ,IAAM+qU,IACrC/qU,IAAMo1B,KAAO,IAAIp1B,IAAMgrU,IACvBhrU,IAAMg7M,YAAc,IAAIh7M,IAAMirU,IAC9BjrU,IAAMgtE,sBAAwB,IAAIhtE,IAAMkrU,IACxClrU,IAAMi9Q,aAAe,IAAIj9Q,IAAMmrU,IAC/BnrU,IAAMi3C,UAAY,IAAIj3C,IAAMorU,GAAgB,EAAGjiV,WAAWO,gBAC1DsW,IAAM0zF,cAAgB,IAAI1zF,IAAMqrU,GAAoB,EAAGliV,WAAWe,sBAClE8V,IAAMgwI,UAAY,IAAIhwI,IAAMsrU,IAC5BtrU,IAAMu7L,YAAc,IAAIv7L,IAAMurU,KAC9BvrU,IAAMs9R,sBAAwB,IAAIt9R,IAAMwrU,KAExCxrU,IAAMyhS,SAAW,IAAIzhS,IAAMyrU,KAgD3BzrU,IAAM22L,kBAAoB,IAAI32L,IAAM0rU,IACpC1rU,IAAM+2L,kBAAoB,IAAI/2L,IAAM2rU,IACpC3rU,IAAMu2L,iBAAmB,IAAIv2L,IAAM4rU,IAEnC5rU,IAAMs2L,iBAAmB,SAASv4E,EAAQq4E,EAAgBJ,EAAWG,EAAW01I,GAC9E7rU,IAAM24L,OACNzvM,GAAG+2E,KAAK83E,MAAMkwB,cAAgB,CAC5BlqD,OAAAA,EACAq4E,eAAAA,EACApW,MAAO4lJ,IAAY5vI,GACnBP,MAAOmwI,IAAYzvI,GACnB01I,SAAAA,IAIJ7rU,IAAM8rU,kBAAoB,SAASC,EAAeC,GAChDhsU,IAAM24L,OACNzvM,GAAG+2E,KAAK83E,MAAMkwB,cAAgB,CAC5B8jK,cAAenG,IAAYmG,GAC3BC,YAAapG,IAAYoG,KAI7BhsU,IAAMjC,QAAU,IAAI,cAAciC,IAChCC,KAAK0zB,EAAM+H,EAAQ,GAAIuwS,EAAkB,GAAG,MAC1C,GAAKvjV,OAAOqX,YAAZ,CAEA,QAA0B/X,IAAtBvC,KAAKymV,aAA4BzmV,KAAKymV,aAAeD,OACpD,GAAIA,EAAkBxmV,KAAKymV,aAAc,OAE9CvtU,MAAMsB,OACNxa,KAAKsY,QAAU41B,EACfluC,KAAK0U,SAAWuhC,EAAMvhC,SACtB1U,KAAK0mV,YAAL,UAAmBzwS,EAAMywS,mBAAzB,SACA3kV,SAAS0B,GAAGhB,OAAOzC,KAAKm/U,YACpBlpS,EAAMogI,YAAYr2K,KAAKu/U,oBAAoBtpS,EAAMogI,aAGvD68B,OACEnxM,SAAS0B,GAAGhB,OAAOzC,KAAKm/U,YACxBn/U,KAAKymV,kBAAelkV,EACpBgY,IAAM24L,SAERyzI,GAAc,GClXT,MAAMp+O,IAAQ,SAAeh5F,EAAMlP,GACxCL,KAAKuP,KAAOA,EAEZvP,KAAKmnI,OAAS,WACZ,OAAQnnI,KAAK4mV,aAAwB,QAATr3U,EACC,UAAzBX,OAAOysF,QAAQksD,OACflnJ,EAAO8mI,QAGbnnI,KAAKk/Q,QAAU7+Q,EAAO6+Q,QAEtBl/Q,KAAK6mV,WAAaxmV,EAAOwmV,WAEzB7mV,KAAKk6L,SAAW75L,EAAO65L,SAEvBl6L,KAAK4mV,UAAY,WACf,MAAgB,WAATr3U,GAGTvP,KAAK4tK,YAAc,WACjB,OAAK5tK,KAAKk6L,UAEHtrL,OAAOwsI,cAAcC,OAAO5tI,MAAK66F,GAASA,EAAMx1F,MAAM,YAAa,KAAOvD,KAGnFvP,KAAKk5F,YAAc,WACjB,OAAKl5F,KAAKk6L,UAAal6L,KAAK4tK,cAErBh/J,OAAOwsI,cAAcC,OAAO7tI,MAAK86F,GAASA,EAAMx1F,MAAM,YAAa,KAAOvD,IAAMnE,QAAQ,WAAa,IAF1DmE,GAKpDvP,KAAK6S,IAAM,WAET3I,SAASE,KAAK8/J,UAAU+X,UAAU/3K,SAASE,KAAK8/J,WAEhDhgK,SAASE,KAAK8/J,UAAU9gK,IAAIpJ,KAAK8mV,YAC7B9mV,KAAKk/Q,SAASh1Q,SAASE,KAAK8/J,UAAU9gK,IAAI,iBAC1CpJ,KAAKmnI,UAAUj9H,SAASE,KAAK8/J,UAAU9gK,IAAI,gBAE3CpJ,KAAK6mV,YAAcj4U,OAAOysF,QAAQkuD,WAAW97D,WAC/CvjF,SAASqP,eAAe,yBAAyBjP,MAAMkP,QAAU,QAEjEtP,SAASqP,eAAe,yBAAyBjP,MAAMkP,QAAU,OAEtC,UAAzB5K,OAAOysF,QAAQksD,OACjB34I,OAAOysF,QAAQ+rD,YAAc73I,EAE7BX,OAAOysF,QAAQ8rD,aAAe53I,EAEhC9L,GAAG+2E,KAAK8tB,MAAQ/4F,EAChB3P,OAAOmnV,eAAeC,kBACtB/jN,YAAY8D,sBAGd/mI,KAAK8mV,SAAW,WACd,MAAQ,KAAI9mV,KAAKuP,KAAKnE,QAAQ,wEAAS,KAAKD,kBAIhDo9F,IAAM0+E,YAAc,WAClB,MAAgC,UAAzBr4K,OAAOysF,QAAQksD,OAClB34I,OAAOysF,QAAQ+rD,YACfx4I,OAAOysF,QAAQ8rD,cAGrB5+C,IAAM5/F,QAAU,WACd,OAAOmnC,IAAOtiC,KAAK+6F,IAAM0+E,gBAG3B1+E,IAAM11F,IAAM,SAAStD,GACnB,MAAM+4F,EAAQx4D,IAAOtiC,KAAK+B,GAE1B,OADA+4F,EAAMz1F,MACCy1F,GAGTC,IAAM0+O,iBAAmB,SAAS13U,GAChC,MAAM23U,EAAe,CACnB,mEACA,mEACA,mEACA,mEACA,mEACA,mEACA,mEACA,mEACA,mEACA,mEACA,mEACA,oEAEIC,GAAM12I,EAAAA,GAAAA,YAAWlhM,EAAKjE,eAC5B,OAAO47U,EAAaj/U,QAAQk/U,IAG9B5+O,IAAMwuO,cAAgB,SAASxnU,GAC7B,OAAyC,IAAlCg5F,IAAM0+O,iBAAiB13U,IAGhCg5F,IAAM45N,sBAAwB,WAC5B,OAAOryR,IAAOuc,IAAI5+C,MAAK66F,GAASA,EAAMslE,aAAetlE,EAAMu+O,cAG7Dt+O,IAAMu8B,UAAY,SAASv1H,GACzB,MAAMxH,EAAQwgG,IAAM0+O,iBAAiB13U,GACrC,IAAe,IAAXxH,EACF,OAAO,EAET,MAAM8iH,EAAU,IAAG9iH,EAAQ,IACrB+qK,EAAWjoD,EAASt7G,EAAKrE,aACzBk8U,EAAoBx4U,OAAOwsI,cAAcC,OAAOhvG,IAAIymI,GAW1D,OAVAlkK,OAAOwsI,cAAcC,OAAOjyI,IAAI0pK,GAChCvqE,IAAM11F,IAAIg4G,GACVzzE,kBAAkB,IAAI7L,SACjB67S,IACHnkV,OAAOiqG,OAAOm1E,QAAS,yBAAwB9yK,EAAKrE,sBAAuB,KACvEq9F,IAAM5/F,UAAUk+U,YAClB1lV,WAAWoZ,MAAMjC,QAAQkC,KAAM,wJACqC,OAGjE,GAGT+tF,IAAMsnB,OAAS,SAAStgH,EAAM4lJ,GAC5B,MAAM90J,EAAS,CACb8mI,OAAiBguB,EAASkyL,KAC1BnoE,QAAkB/pH,EAASmyL,MAC3BT,WAAqB1xL,EAASoyL,SAC9BrtJ,SAAmB/kC,EAAShqF,QAE9B,OAAO,IAAIo9B,IAAMh5F,EAAMlP,IAGlB,MAAMyvC,IAAS,CACpBuc,IAAK,CAGHk8C,IAAMsnB,OAAO,SAAmB,IAChCtnB,IAAMsnB,OAAO,QAAmB,CAAey3N,OAAO,IACtD/+O,IAAMsnB,OAAO,OAAmB,CAAEw3N,MAAM,IACxC9+O,IAAMsnB,OAAO,aAAmB,CAAEw3N,MAAM,EAAOC,OAAO,IACtD/+O,IAAMsnB,OAAO,WAAmB,IAChCtnB,IAAMsnB,OAAO,iBAAmB,CAAey3N,OAAO,IACtD/+O,IAAMsnB,OAAO,SAAmB,CAAEw3N,MAAM,IACxC9+O,IAAMsnB,OAAO,eAAmB,CAAEw3N,MAAM,EAAOC,OAAO,IACtD/+O,IAAMsnB,OAAO,KAAmB,CAA4B03N,UAAU,EAAMp8Q,QAAQ,IACpFo9B,IAAMsnB,OAAO,KAAmB,CAA4C1kD,QAAQ,IACpFo9B,IAAMsnB,OAAO,KAAmB,CAA4C1kD,QAAQ,IACpFo9B,IAAMsnB,OAAO,KAAmB,CAA4C1kD,QAAQ,IACpFo9B,IAAMsnB,OAAO,KAAmB,CAA4C1kD,QAAQ,IACpFo9B,IAAMsnB,OAAO,KAAmB,CAAEw3N,MAAM,EAAoBE,UAAU,EAAMp8Q,QAAQ,IACpFo9B,IAAMsnB,OAAO,KAAmB,CAAey3N,OAAO,EAAsBn8Q,QAAQ,IACpFo9B,IAAMsnB,OAAO,KAAmB,CAAey3N,OAAO,EAAsBn8Q,QAAQ,IACpFo9B,IAAMsnB,OAAO,KAAmB,CAA4C1kD,QAAQ,IACpFo9B,IAAMsnB,OAAO,MAAmB,CAAEw3N,MAAM,EAAOC,OAAO,EAAMC,UAAU,EAAMp8Q,QAAQ,IACpFo9B,IAAMsnB,OAAO,MAAmB,CAAEw3N,MAAM,EAAoBE,UAAU,EAAMp8Q,QAAQ,IACpFo9B,IAAMsnB,OAAO,MAAmB,CAA4C1kD,QAAQ,KAItFp7B,YACE,OAAOD,IAAOuc,IACXzpD,QAAO0lG,GAASA,EAAMslE,iBAG3BpgK,KAAK+B,GACH,OAAOugC,IAAOuc,IACX7+C,MAAK86F,GAASA,EAAM/4F,OAASA,MCjK7B,MAAM66F,IAEM,oBACfx7F,OAAOysF,QAAQiM,KAAKvnG,SAAW6O,OAAOysF,QAAQiM,KAAKvnG,QACnD0D,GAAG+2E,KAAK8sB,KAAO14F,OAAOysF,QAAQiM,KAAKvnG,QACnCswJ,YAAYjkD,OAGC,kBAGa,UAAzBx9F,OAAOysF,QAAQksD,OAAqB34I,OAAOysF,QAAQksD,OAAS,UAAY34I,OAAOysF,QAAQksD,OAAS,SAC9E,UAAlB9jJ,GAAG+2E,KAAK+sE,OAAqB9jJ,GAAG+2E,KAAK+sE,OAAS,UAAY9jJ,GAAG+2E,KAAK+sE,OAAS,SAG5Ez3G,OAAOtiC,KAAK+6F,MAAM0+E,eAAep0K,MACjC6gJ,GAAAA,aACArD,YAAYjkD,OAGE,mBACdokD,MAAME,WAAU,GAGF,mBACdF,MAAMg3L,YAGI,eACVh3L,MAAMi3L,QAGK,gBACXj3L,MAAMqhD,SAGgB,2BACY,MAA9BjjM,OAAOysF,QAAQuE,YACjBxoD,kBAAkB,IAAI7L,SAExBvxB,cAAco2I,SAAS14B,UAGK,iCAC5B19G,cAAcoyF,KAAKsrB,WAIvB,MAAMgwN,IAAgB,CACpB,mEACA,mEACA,mEACA,oEAGF,SAASC,IAAkBviT,GACzB,MAAM+hT,GAAM12I,EAAAA,GAAAA,YAAWrrK,EAAKh6B,QAAQ,uEAAQ,IAAIE,eAChD,OAAOo8U,IAAcz/U,QAAQk/U,GAGxB,SAASrQ,IAAe1xS,GAC7B,OAAoC,IAA7BuiT,IAAkBviT,GAGpB,SAASmjK,IAAgBnjK,GAC9B,MAAMr9B,EAAQ4/U,IAAkBviT,GAEhC,OAAQr9B,GACN,KAAK,EAGH,OAFA81K,GAAAA,QAAmC,gBAAiB,GACpDzmI,kBAAkB,IAAI7L,UACf,EACT,KAAK,EAEH,OADA6L,kBAAkB,IAAI7L,UACf,EACT,KAAK,EAEH,OADA6L,kBAAkB,IAAI7L,UACf,EACT,KAAK,EAGH,OAFI38B,OAAO+zC,QAAQoJ,oBAAsB,GAAKtzC,EAAKy1J,SAAS3iI,SACvDtoC,OAAOiqG,OAAO6kB,MAAM,yCAA0C,OAC5D,EACT,QACE,OAAO,GCvFb,MAAM61N,YAAyBx9S,EAC7BpoC,YAAY3B,GACV6Y,MAAM7Y,GACNL,KAAK6nV,KAAOhnV,KAAKuM,MAAMpN,KAAKgO,GAAK,IACjChO,KAAK8nV,QAAU9nV,KAAKgO,GAAK,GACzBhO,KAAK+nV,SAAW,GAAM/nV,KAAKo6L,OAAS,EACpCp6L,KAAKgoV,iBAAmBhoV,KAAK+nV,SAC7B/nV,KAAK2qC,eAAetqC,EAAOqiD,YAAY3/C,GAAQ/C,KAAK8kI,UAAU/hI,KAG5DwM,WACF,OAAOvP,KAAKK,OAAOkP,KAGjB4qL,UACF,OAAOn6L,KAAK6nV,KAGVztJ,aACF,OAAOp6L,KAAK8nV,QAGVG,mBACF,OAAOjoV,KAAKm6L,IAAM,GAGhB+tJ,iBACF,OAAOloV,KAAKm6L,IAAM,GAGhBguJ,gBACF,OAAOnoV,KAAKm6L,IAAM,GAGhBhvJ,iBACF,OAAkE,KAA1Dv8B,OAAOwpI,gBAAgBp4I,KAAKm6L,IAAM,GAAKn6L,KAAK+nV,UAGlDzmS,iBACF,OAAOzP,MAAMyP,WAAW,iBAAmBzP,MAAMo5O,qBAAqB13Q,SAASvT,KAAKgO,IAGlFy6B,qBACF,OAAOzoC,KAAKmrC,aAAenrC,KAAKshD,WAGlCwjF,UAAU/hI,GACJ/C,KAAKmrC,YACJnrC,KAAKK,OAAOoiD,iBAAiB1/C,IAClC/C,KAAKurC,SAGP4xI,OACEvuK,OAAOwpI,gBAAgBp4I,KAAKm6L,IAAM,IAAMn6L,KAAKgoV,gBAG/Cz8S,OAAO8pC,GACDr1E,KAAKmrC,aACTv8B,OAAOwpI,gBAAgBp4I,KAAKm6L,IAAM,IAAMn6L,KAAK+nV,SAC7B,KAAZ/nV,KAAKgO,IAAyB,KAAZhO,KAAKgO,IACzB04D,UAAU45B,UAAU4zE,WAAW,GAEjB,KAAZl0K,KAAKgO,IAAc6+B,eAAesf,mBACpC5xC,MAAMjC,QAAQkC,KAAM,oQAE2C,GAAI,GAErD,MAAZxa,KAAKgO,IAA0B,MAAZhO,KAAKgO,IAC1B0wE,UAAUmxE,mBAAmB7pD,aAE3B3wB,EACFpyE,OAAOiqG,OAAOnkF,QAAS,2BAA0B/oB,KAAKuP,SAEtDtM,OAAOiqG,OAAOm1E,QAAS,gBAAeriL,KAAKuP,QAC3Cg6J,GAAaX,oBAAoB5oK,KAAKgO,KAEpCY,OAAOqgG,SAASrkD,WAAah8C,OAAOqgG,SAASyuC,iBAAiB19I,KAAKgO,MAGrEY,OAAOqgG,SAASyuC,iBAAiB19I,KAAKgO,IAAMnN,KAAKuM,MAAMwB,OAAO+zC,QAAQkoD,iBAExE3kD,IAAao0J,OAAOt0G,aACpBjkG,SAASe,SAASY,WAAWuC,uBAK3BkiV,gBACF,OAAOnoV,KAAKm6L,IAAM,IAQf,MAAMnhJ,IAAc4uS,IAAiBt1K,eAAe5lG,aAAazB,aAAaC,QAExEhlB,IAAe,CAI1BmG,IAAKrT,IAAYjxC,MAAM4F,UAKnBgyD,iBACF,OAAOzZ,IAAamG,IAAIzpD,QAAO8rD,GAAOA,EAAIu5R,gBAMxCG,eACF,OAAOliS,IAAamG,IAAIzpD,QAAO8rD,GAAOA,EAAIw5R,cAGxCh+P,cACF,OAAOhkC,IAAamG,IAAIzpD,QAAO8rD,GAAOA,EAAIy5R,aAGxC/7D,cACF,MAAMvgR,EAAQq6C,IAAamG,IAAI/oD,KAAImG,GAAKA,EAAE0wL,MAAK/xL,MAC/C,OAAO89C,IAAa0pM,KAAK,EAAG/jP,IAG1Bw8U,qBACF,MAAMx8U,EAAQq6C,IAAayZ,WAAWr8D,KAAImG,GAAKA,EAAE0wL,MAAK/xL,MACtD,OAAO89C,IAAa0pM,KAAK,EAAG/jP,IAG1B8pE,mBACF,MAAM9pE,EAAQq6C,IAAakiS,SAAS9kV,KAAImG,GAAKA,EAAE0wL,MAAK/xL,MACpD,OAAO89C,IAAa0pM,KAAK,EAAG/jP,IAG1By8U,kBACF,MAAMz8U,EAAQq6C,IAAagkC,QAAQ5mF,KAAImG,GAAKA,EAAE0wL,MAAK/xL,MACnD,OAAO89C,IAAa0pM,KAAK,EAAG/jP,IAG9B+jP,KAAM,CAACpkP,EAAOK,IAAUlE,MAAMU,MAAMmD,EAAOK,GAAOvI,IAAI4iD,IAAai0I,KAEnEA,IAAKA,GAAOxyL,MAAMU,MAAY,GAAN8xL,EAAW,EAAG,GAAG72L,IAAI01C,KAEzCmM,qBACF,MAAMojS,EAAuBriS,IAAamG,IAAI1/C,YAAWlD,GAAKA,EAAE0hC,aAChE,OAAOo9S,GAGLx3G,aACF,OAAOryJ,UAAUswE,kBAAkBlnJ,OAGrCwzM,kBAAkBrkF,GAChB,GAAKpqF,eAAesf,kBACpB,GAAKv9C,OAAOma,QAAQm4H,cAAepoG,eAAe,GAAG00G,oBAIrD,IAAItnG,IAAayZ,WAAWjyD,OAAMjE,GAAKA,EAAE0hC,eAEzCv8B,OAAOma,QAAQq4H,SAAWxyI,OAAOma,QAAQq4H,SAASh4I,IAAI6tH,IAClDroH,OAAOma,QAAQq4H,SAAS1pI,GAAG1X,KAAK+wO,SAApC,CACA,IAAK,MAAMn/K,KAAe1L,IAAayZ,WAAW/8D,QAAO6G,IAAMA,EAAE0hC,aAG/D,GAFAymB,EAAYrmB,QAAO,GACnB38B,OAAOma,QAAQq4H,SAAWxyI,OAAOma,QAAQq4H,SAAS5qI,IAAIxW,KAAK+wO,QACvDniO,OAAOma,QAAQq4H,SAAS1pI,GAAG1X,KAAK+wO,QAAS,MAE/CniO,OAAOma,QAAQk9B,wBAAyB,QAZtCr3C,OAAOma,QAAQq4H,SAAWp4I,QAAQR,SAASoG,OAAOma,QAAQq4H,SAASh4I,IAAI6tH,GAAOj3H,KAAK+wO,SAenF47C,4BACF,OAAK9/O,eAAesf,kBAChBuyB,UAAUswE,kBAAkBlnJ,QAAU,IAAIkB,QAAQ,IACS,IAA3Dk9C,IAAayZ,WAAWhzD,YAAWlD,IAAMA,EAAE0hC,aADkB,IAAIniC,QAAQ,GAEtEhJ,KAAK+wO,OAAOv6N,IAAI5H,OAAOma,QAAQq4H,UAHQ,IAAIp4I,QAAQ,IAM5DsxM,OAAQ,IAAIjsD,MAAK,KACf,IAAIm6L,EAAWr1R,SAAS49B,UAAUpoD,gBAAgB,GAC9C8/S,EAAS75U,OAAOC,WAAWmzC,GAAGC,SAAS5V,IAAI,YAAcg0D,YAAY,GAAG13D,gBAAgB,GAAK,EACjG,MAAMikP,EAAe1mO,IAAakmO,QAC/Bz/Q,YAAWwtL,GAAOA,EAAIzsL,OAAMghD,GAAOA,EAAIvjB,eACpCu9S,GAAa7nV,KAAKgd,IAAI,KAAM+uQ,GAAgB/rR,KAAKgd,IAAI,KAAMqoC,IAAaf,gBAAkBqjS,EAAWC,KAAY9oS,GAAGC,QAAQ8jC,wBAAwBv4C,WAAa,EAAI,GAC3K,IAAIv9B,EAAI84C,qBAAqBiL,gBAAgB/K,cAAcne,eAAiBie,qBAAqBiL,gBAAgB/K,cAAcxe,YAAc,EACzIl0B,EAAIyrC,GAAGC,QAAQ2jC,oBAAoBp4C,WAAatqC,KAAKuH,IAAI,GAAK,EAAIvH,KAAKuT,MAAMpL,QAAQoL,MAAMw8B,SAAS0pB,WAAWxyD,SAAW,IAAO,EACjIm6R,EAAIv/N,kBAAkB,GAAGv3B,WAAatqC,KAAKuH,IAAI,EAAGs6D,kBAAkB,GAAGt6B,aAAe,EACtFr+B,EAAY27C,uBAAuB,sBAAsB14C,YAAa4I,MAAM+pC,GAAGC,QAAQyiC,iBAAiB15C,gBAAgB,IAAI/yB,MAAMhI,GAAGgI,MAAM/U,KAAKuH,IAAI8L,EAAG,IAAI0B,MAAMqsR,GACjKliN,EAAc/2E,QAAQ6U,IAAI6qU,EAAW3+U,GAEzC,OAAOg2E,KAGLt3D,YACF,OAAIopB,MAAMyP,WAAW,mBAA2B,IAAIt4C,QAAQ,GACrDk9C,IAAao0J,OAAOxyM,OAG7BigM,oBACE,IAAK,MAAMn2I,KAAe1L,IAAamG,IAAIzpD,QAAOgL,GAAKA,EAAEu9B,aACvDo+H,GAAaX,oBAAoBh3G,EAAY5jD,MAKnDjM,SAASiB,MAAMd,GAAGwB,WAAW2C,aAAa,KACxCuI,OAAOma,QAAQq4H,SAAWp4I,QAAQR,SAASoG,OAAOma,QAAQq4H,SAAUl7F,IAAa6qL,WClNnF,MAAM43G,YAA+Bv+S,EACnCpoC,YAAY3B,GACV6Y,MAAM7Y,GACNL,KAAK6nV,KAAOhnV,KAAKuM,MAAMpN,KAAKgO,GAAK,IACjChO,KAAK8nV,QAAU9nV,KAAKgO,GAAK,GACzBhO,KAAK+nV,SAAW,GAAM/nV,KAAKo6L,OAAS,EACpCp6L,KAAKgoV,iBAAmBhoV,KAAK+nV,SAC7B/nV,KAAK2qC,eAAetqC,EAAOqiD,YAAY3/C,GAAQ/C,KAAK8kI,UAAU/hI,KAG5DwM,WACF,OAAOvP,KAAKK,OAAOkP,KAGjB4qL,UACF,OAAOn6L,KAAK6nV,KAGVztJ,aACF,OAAOp6L,KAAK8nV,QAGV38S,iBACF,OAAwE,KAAhEv8B,OAAOypI,sBAAsBr4I,KAAKm6L,IAAM,GAAKn6L,KAAK+nV,UAG5DjjN,UAAU/hI,GACJ/C,KAAKmrC,YACJnrC,KAAKK,OAAOoiD,iBAAiB1/C,IAClC/C,KAAKurC,SAGPA,SACMvrC,KAAKmrC,aACTv8B,OAAOypI,sBAAsBr4I,KAAKm6L,IAAM,IAAMn6L,KAAK+nV,SACnD9kV,OAAOiqG,OAAOm1E,QAAS,uBAAsBriL,KAAKuP,QAClDxN,SAASe,SAASY,WAAWuC,uBAG/Bk3K,OACEvuK,OAAOypI,sBAAsBr4I,KAAKm6L,IAAM,IAAMn6L,KAAKgoV,iBAQhD,MAAM5wS,IAAoBuxS,IAAuBr2K,eAAe5lG,aAAazB,aAAaE,QAEpF84N,IAAqB,CAIhC53O,IAAKjV,IAAkBrvC,MAAM4F,UAEzBy+Q,cACF,MAAMvgR,EAAQo4R,IAAmB53O,IAAI/oD,KAAImG,GAAKA,EAAE0wL,MAAK/xL,MACrD,OAAO67R,IAAmBr0C,KAAK,EAAG/jP,IAGpC+jP,KAAM,CAACpkP,EAAOK,IAAUlE,MAAMU,MAAMmD,EAAOK,GAAOvI,IAAI2gS,IAAmB9pG,KAEzEA,IAAKA,GAAOxyL,MAAMU,MAAY,GAAN8xL,EAAW,EAAG,GAAG72L,IAAI8zC,MCjE/C,MAAMwxS,IACJ5mV,YAAY6mV,GACV7oV,KAAK4oB,KAAO,EACZ5oB,KAAK81F,SAAW+yP,EAGlBr3P,QACExxF,KAAK4oB,KAAO,EAGdkgU,UACE9oV,KAAK81F,SACD91F,KAAK4oB,MAAQi/B,KAAK03D,kBAAkBzoG,aAAapH,WACjD,IAAI1G,QAAQhJ,KAAK4oB,MAAMxf,IAAIy+C,KAAKk3C,WAGtCt4B,MAAMj/B,EAAWmhC,GACf,OAAKnhC,GAILxnC,KAAK8oV,UACE9oV,KAAK4oB,MAAQ+/C,IAJlB3oE,KAAKwxF,SACE,IAON,MAAMjrB,IAAoB,CAC/BC,UAAW,IAAIoiR,KAAiB,GAChCzgR,UAAW,IAAIygR,KAAiB,GAChCv+Q,KAAM,IAAIu+Q,KAAiB,GAC3B1lV,MAAO,IAAI0lV,KAAiB,IC3B9B,MAAMG,YAA4Bx8S,EAChCvqC,YAAY3B,GACV6Y,MAAM7Y,GACNL,KAAK2qC,eAAetqC,EAAOqiD,YAAY,IAAM1iD,KAAK8kI,cAEhDh5F,eACF,OAA8C,KAAtC9rC,KAAKirC,KAAQ,GAAKjrC,KAAKwsC,UAG7BV,aAAShkC,GACPA,EACF9H,KAAKirC,MAAS,GAAKjrC,KAAKwsC,SAExBxsC,KAAKirC,QAAU,GAAKjrC,KAAKwsC,UAGzB4E,sBACF,OAAOpxC,KAAKK,OAAO+wC,gBAAkBpxC,KAAKK,OAAO+wC,gBAAkB,EAGjE7hC,WACF,OAAOvP,KAAKK,OAAOkP,KAGjB8hC,uBACF,OAAOrxC,KAAKK,OAAOgxC,iBAAmBrxC,KAAKK,OAAOgxC,mBAAqB,GAGrEgR,kBACF,MAA0C,oBAA5BriD,KAAKK,OAAOgiD,YAA6BriD,KAAKK,OAAOgiD,cAAgBriD,KAAKK,OAAOgiD,YAG7FwC,gBACF,MAAwC,oBAA1B7kD,KAAKK,OAAOwkD,UAA2B7kD,KAAKK,OAAOwkD,YAAc7kD,KAAKK,OAAOwkD,UAGzFpZ,eACF,OAAOmF,SAASmX,gBAGdvb,eACF,OAAOxsC,KAAKgO,GAGVi9B,WACF,OAAOr8B,OAAOma,QAAQ0vH,YAGpBxtG,SAAKnjC,GACP8G,OAAOma,QAAQ0vH,YAAc3wI,EAG3BylJ,oBACF,OAAmE,KAA3D3+I,OAAOma,QAAQm1H,QAAQn1H,QAAW,GAAK/oB,KAAKwsC,UAGlD+gH,kBAAczlJ,GACZA,EAAO8G,OAAOma,QAAQm1H,QAAQn1H,SAAW,GAAK/oB,KAAKwsC,SAClD59B,OAAOma,QAAQm1H,QAAQn1H,WAAa,GAAK/oB,KAAKwsC,UAGjDghH,yBAAqB,UACvB,MAAMC,EAAY,qBAAG,EAAAztJ,KAAKK,QAAOimD,kBAAf,aAAG,iBAAH,SAClB,OAAOtmD,KAAKutJ,eAAiBvtJ,KAAKu1E,aAAek4E,IAAiBztJ,KAAK4rC,uBAIzE2iI,gBAAgBzmK,GACd9H,KAAKutJ,cAAgBzlJ,EAGvB0mK,qBACExuK,KAAKutJ,eAAiBvtJ,KAAKutJ,cAI7Bof,oBAAoB8B,GACdzuK,KAAKu1E,aAAev1E,KAAK4rC,wBAC3BrxB,MAAMm0J,YAAYl0J,KAAK,CAAEs6D,QAAS90E,KAAM2uK,aAAa,EAAOF,gBAAAA,IAI5D7iI,6BACF,QAAIsG,iBAAiBoQ,KAAKlQ,WAG2B,KAA7CxjC,OAAOma,QAAQs3H,QAAW,GAAKrgJ,KAAKgO,IAG1CunE,iBACF,QAAGrjC,iBAAiBoQ,KAAKlQ,aAGlBpyC,KAAKK,OAAOmiD,YAAaxiD,KAAKK,OAAOmiD,aAG9CsiF,YACE,MAAMkkN,EAAiBn8S,eAAesf,mBAAqB3G,UAAUz8B,QAAQ+iB,SACxEk9S,IAAkBhpV,KAAK4rC,wBAA2B5rC,KAAKK,OAAOoiD,qBACnE7zC,OAAOma,QAAQs3H,SAAY,GAAKrgJ,KAAKgO,GACrC/K,OAAOiqG,OAAOnkF,QAAS,sCAAqC/oB,KAAKK,OAAOkP,QACxEvP,KAAKutJ,eAAgB,GAGvBrhH,cACEnqC,SAASe,SAASY,WAAWyC,wBAC7B,MAAM6H,EAAKhO,KAAKgO,GACL,IAAPA,GAAmB,KAAPA,GACdgzC,OAAO4/P,gBAEE,KAAP5yS,IACFsuK,cACAX,gCACA55K,SAASe,SAASY,WAAW0C,6BAEpB,KAAP4H,GAAaY,OAAOixF,UAAU,GAAG3rB,WACnCtlE,OAAOixF,UAAU,GAAG3rB,UAAW,GAEjCwK,UAAUmxE,mBAAmB7pD,cAIjC,MAAMijP,YAAqCx8S,EACrChB,eACF,OAAOmF,SAASmX,gBAGdpb,mBACF,OAAI/9B,OAAOorD,QAAQE,oBAAoBC,eAAepD,GAAoBkB,QAAQZ,WAAWzoD,OAAOorD,QAAQC,WAAW,IAAY,EAC5HrrD,OAAOma,QAAQ08B,WAAWzlD,KAAKgO,IAGpC49B,6BACF,OAAIh9B,OAAOorD,QAAQE,oBAAoBC,gBAAepD,GAAoBkB,QAAQZ,WAAWzoD,OAAOorD,QAAQC,WAAW,IAIrHttB,iBAAa7kC,GACf8G,OAAOma,QAAQ08B,WAAWzlD,KAAKgO,IAAMlG,GAIzCihV,IAAoBhhV,MAAQ+iC,YAC1B4hC,aAAa3jD,QAAQk5B,UACrB5hD,GAAWA,EAAO2N,GAAK,EACnB,IAAIi7U,IAA6B5oV,GACjC,IAAI0oV,IAAoB1oV,KAOvB,MAAMy4C,IAAiB9qC,GAAM+6U,IAAoBhhV,MAAMiG,GAEjD66D,IAAkB,CAI7Bxc,IAAK08R,IAAoBhhV,MAAM4F,UAC3Bm7D,gBACF,OAA2C,GAAnCl6D,OAAOma,QAAQ0vH,aAAe,KAAW,GAAM/rE,aAAa3jD,QAAQk5B,SAAS1+C,OAAS,IC/JrF0mI,IAAoB,CAAC,WAAY,cAAe,iBAAkB,UAC7E,cAAe,eAAgB,YAAa,gBAAiB,aAC7D,gBAAiB,kBAAmB,aAAc,SAClD,aAAc,oBAAqB,mBACnC,eAAgB,0BAA2B,eAAgB,wBAC3D,YACA,YAAa,eAAgB,mBAAoB,qBACjD,mBAAoB,oBAAqB,oBACzC,iBAAkB,kBAAmB,mBAAoB,WACzD,oBAAqB,kBAAmB,iBAAkB,iBAC1D,uBAAwB,eAEbU,IAAiB,CAAC,QAAS,WAAY,cAAe,OAAQ,WAAY,WAG1Eu+M,IAAmBj/M,IAAkB99H,aAAY+tB,GAAKA,IAAG,CAACA,EAAG3tB,IAAQA,IAE3E,SAASo9P,IAAiB/7P,GAC/B,OAAW,IAAJA,EAAU,IAAM,EAGlB,SAASuzC,IAAiBvzC,GAC/B,OAAiB,KAATA,EAAI,GAAW,IAKzB,MAAMs7H,IAAU,CACdpsF,MAAO,CAACrzC,EAAGC,IAAMA,EAAEozC,MAAQrzC,EAAEqzC,MAC7Br0B,MAAO,CAAChf,EAAGC,IAAMA,EAAEozC,MAAQpzC,EAAEqzC,SAAWtzC,EAAEqzC,MAAQrzC,EAAEszC,SACpDyiG,MAAO,CAAC/1I,EAAGC,IAAMktG,mBAAmBE,YAAYptG,GAAKktG,mBAAmBE,YAAYrtG,GACpF69B,OAAQ,CAAC79B,EAAGC,KACV,SAASy/U,EAAiB5jR,GACxB,OAAO3tB,WAAW,GAAK,KAAO2tB,IAAQ,IAAI9zD,SAAS,GAAGO,MAAM,IAAI+xB,UAAU1yB,KAAK,IAAK,GAItF,OAAO83U,EAAiBz/U,EAAE6gC,SAAW4+S,EAAiB1/U,EAAE8gC,WAI/CyW,IAAS,CACpBqF,UAAW,GACXpF,OAAQ,GACRyrC,OAAQ,GACRq/G,WAAY,GACZq9I,WAAY,EACZhkF,aAAa,EACbikF,mBAAoB,EAChB59E,eACF,GAAI55N,MAAMC,SAAS,CACjB,IAAInY,EAAI4zB,WAAWoM,OAAOlM,WAAW,GAAG/kB,aAAe,EAAI,EAE3D,OADGg6B,GAAkB,GAAG52B,WAAUnS,GAAG,GAC9BA,EAEL,CACF,IAAIn4B,EAAI,EAUR,OATIs3C,IAAe,GAAGhN,UACpBtqC,IAEEs3C,IAAe,IAAIhN,UACrBtqC,IAEE0wC,iBAAiBu9D,KAAKr9D,YACxB5wC,GAAK,GAEAA,IAIPwnE,oBACF,OAAOp6D,OAAOma,QAAQsmB,OAAOgX,WAE3B4nN,0BACF,OAAOjuQ,KAAKgpE,cAAcw8B,MAAK,CAAC/7F,EAAGC,KAAOD,EAAEqzC,MAAQrzC,EAAEszC,SAAWrzC,EAAEozC,MAAQpzC,EAAEqzC,YAE3E2K,iBACF,OAAO94C,OAAOma,QAAQsmB,OAAO4R,QAE3BsE,6BACF,OAAOvlD,KAAK0nD,WAAW9kD,QAAO6vB,GAAgB,cAAXA,EAAE0jB,QAEnCyR,gBACF,OAAO5nD,KAAKgpE,cAAcnC,OAAO7mE,KAAK0nD,aAGpC4hS,sBACF,OAAOtpV,KAAKqmD,UAAUzjD,QAAO6vB,GAAKA,IAAGnvB,KAAImvB,GAAKA,EAAElmB,OAElDitT,cAAc+vB,GACZvpV,KAAKw8G,WACL,MAAMgtO,EAAgBzhV,GAAUwhV,EAAoBxhV,EAAQ/H,KAAK6iQ,eAAiB96P,GAAS/H,KAAK6iQ,eAChG,OAAO7iQ,KAAKqmD,UAAU67D,WAAU,CAACkmF,EAAMrgM,IAAmB,OAATqgM,GAAiBohJ,EAAczhV,MAI9E4nJ,yBAEF,OADA3vJ,KAAKw8G,WACEx8G,KAAKqmD,UAAUzjD,QAAO,CAACs3B,EAAG3tB,IAAc,OAAN2tB,GAAc3tB,GAAOvM,KAAK6iQ,iBAAgBt/P,QAEjFkkD,sBACF,GAAI5V,MAAMC,SAAU,CAClB,IAAInY,EAAI4zB,WAAWoM,OAAOlM,WAAW,GAAG/kB,aAAe,EAAI,EAE3D,OADGg6B,GAAkB,GAAG52B,WAAUnS,GAAG,GAC9BA,EAET,OAAOuY,iBAAiBu9D,KAAKr9D,UAAY,EAAIrJ,QAAQvlC,IAAIs1C,IAAe,GAAIA,IAAe,KAAO,EAAI/P,QAAQvlC,IAAIs1C,IAAe,GAAIA,IAAe,MAElJ+pN,qBACF,OAAO,GAAKj0P,OAAOma,QAAQsmB,OAAOgwG,eAEhCqjH,iBACF,OAAO,KAETwJ,oBAAoBu9E,GAElB,MAAMC,EAAU7oV,KAAK0H,MAAMqG,OAAOma,QAAQsmB,OAAOgwG,cAAgBoqM,EAAW,EAAGzpV,KAAK0iQ,WAAa,GAAK,GAChGinF,EAAYD,EAAU96U,OAAOma,QAAQsmB,OAAOgwG,cAElD,GAAIsqM,EAAY,EAAG,CAIjB,IAAIC,EAAY,EAChB,MAAOA,EAAYD,EAAW,CAG5B,IAAIE,GAAW,EACf,IAAK,IAAIC,EAAO9pV,KAAK6iQ,eAAiB,GAAK+mF,GAAYC,GAAYC,EAAO9pV,KAAK0iQ,WAAa,GAAIonF,IAC9FD,EAAWA,GAAY7pV,KAAK+pV,aAAaD,EAAMA,EAAO,GAGxD,IAAKD,EAAU,MAGV7pV,KAAKspV,gBAAgB77U,MAAKlB,GAAO1L,KAAKuM,MAAMb,EAAM,MAAQvM,KAAK6iQ,eAAiB,MACnF+mF,SAGC,CAGL,IAAIA,EAAY,EAChB,MAAOA,GAAaD,EAAW,CAC7B,IAAIE,GAAW,EACf,IAAK,IAAIC,EAAO9pV,KAAK6iQ,eAAiB,GAAK+mF,EAAY,GAAIC,GAAYC,EAAO,EAAGA,IAC/ED,EAAWA,GAAY7pV,KAAK+pV,aAAaD,EAAMA,EAAO,GAExD,IAAKD,EAAU,MACf,IAAK7pV,KAAKspV,gBAAgB77U,MAAKlB,GAAO1L,KAAKuM,MAAMb,EAAM,MAAQvM,KAAK6iQ,eAAiB,GAAK,IAAI,CAC5F+mF,IAEA,IAAK,IAAIE,EAAO9pV,KAAK6iQ,eAAiB,GAAK+mF,EAAWE,EAAO9pV,KAAK0iQ,WAAa,GAAIonF,IACjF9pV,KAAK+pV,aAAaD,EAAMA,EAAO,KAMvCl7U,OAAOma,QAAQsmB,OAAOgwG,cAAgBqqM,EACtC1pV,KAAKw8G,WACL99B,UAAUC,oBAAoBqnB,cAIhC+jP,aAAaD,EAAME,GACjB,IAAKp7U,OAAOma,QAAQ+3H,uBAAwB,OAAO,EACnD,GAAIgpM,GAAQ9pV,KAAK0iQ,WAAa,IAAMsnF,GAAQhqV,KAAK0iQ,WAAa,GAAI,OAAO,EACzE,GAAI1iQ,KAAKspV,gBAAgB77U,MAAKlB,GAAO1L,KAAKuM,MAAMb,EAAM,MAAQy9U,IAAO,CAEnE,MAAMC,EAAa,IAAItiV,MAAM,IAAIhF,QAC9B8K,MAAKw0P,GAA2C,OAApCjiQ,KAAKqmD,UAAU,GAAKyjS,EAAO7nF,IAAqD,OAApCjiQ,KAAKqmD,UAAU,GAAK2jS,EAAO/nF,KACtF,GAAIgoF,EAAY,OAAO,EACvB,IAAK,IAAIhoF,EAAM,EAAGA,EAAM,GAAIA,IAAO,CACjC,MAAMhvM,EAAQjzD,KAAKqmD,UAAU,GAAKyjS,EAAO7nF,GAC3B,OAAVhvM,GACFjzD,KAAK4iQ,WAAW3vM,EAAO,GAAK+2R,EAAO/nF,GAIvC,OADAjiQ,KAAKw8G,YACE,EAGT,IAAK,IAAIylJ,EAAM,EAAGA,EAAM,GAAIA,IAAO,CACjC,MAAMhvM,EAAQjzD,KAAKqmD,UAAU,GAAKyjS,EAAO7nF,GAC3B,OAAVhvM,GACFjzD,KAAK4iQ,WAAW3vM,EAAO,GAAK+2R,EAAO/nF,GAIvC,OADAjiQ,KAAKw8G,YACE,GAETokM,gBACE5gT,KAAKihD,OAAS,IAAIt5C,MAAM3H,KAAKynD,iBAAiB17C,KAAK,MACnD,IAAK,MAAM0mB,KAAK7jB,OAAOma,QAAQsmB,OAAO4R,OAAQ,CAC5C,GAAIjhD,KAAKihD,OAAOxuB,EAAElmB,KAChB,MAAM,IAAIe,MAAM,0BAElBtN,KAAKihD,OAAOxuB,EAAElmB,KAAOkmB,IAGzB+sG,UACEx/H,KAAK4gT,gBACL5gT,KAAKqmD,UAAY,IAAI1+C,MAAM3H,KAAK0iQ,YAAY32P,KAAK,MAEjD,MAAMm+U,EAAU,GAChB,IAAK,MAAMz3T,KAAK7jB,OAAOma,QAAQsmB,OAAOgX,UAChCrmD,KAAKqmD,UAAU5zB,EAAElmB,KACnB29U,EAAQ1nV,KAAKiwB,GAEbzyB,KAAKqmD,UAAU5zB,EAAElmB,KAAOkmB,EAI5B,MAAOy3T,EAAQ3mV,OAAQ,CACrB,MAAM4mV,EAAYnqV,KAAKw5T,gBACvB,KAAI2wB,GAAa,GAKf,MALkB,CAClB,MAAMl3R,EAAQi3R,EAAQj4T,QACtBjyB,KAAKqmD,UAAU8jS,GAAal3R,EAC5BA,EAAM1mD,IAAM49U,GAKhB,MAAOD,EAAQ3mV,OACbvD,KAAKgqU,oBAAoBkgB,EAAQ74N,OAEnCrxH,KAAKw8G,WACLz6G,SAASe,SAASY,WAAWyB,iBAO/B0oQ,aAAau8E,EAAaC,EAAYC,EAAa,CAAExtS,MAAOC,SAAUxS,UAEpE,MAAMskO,EAAS,CAAC07E,EAAIC,EAAOC,KACzB,OAAQF,GACN,KAAM,EACJ,OAAOE,EAAQD,EACjB,KAAK,EACH,OAAOA,IAAUC,EAAQ,GAAK,EAChC,KAAK,EACH,OAAOD,EAAQC,EAEnB,OAAO,GAMHC,EAAiB,CAACC,EAAOC,KACxBD,EAAQC,KAAWD,EAAchjS,uBAAuBijS,EAAQD,IAC7DhjS,uBAAuBgjS,GAASA,EAAQC,IAK5CC,EAAa,GACnB,IAAK,MAAM53R,KAASo3R,EAAY,CAC9B,MAAMl0S,EAAO8c,EAAM9c,OAASi0S,EAAYj0S,KACxC,IAAIovB,EACJ,OAAQ+kR,EAAW//S,SACjB,KAAM,EACJg7B,EAAMmlR,EAAez3R,EAAM1oB,QAAS6/S,EAAY7/S,SAChD,MACF,KAAK,EACHg7B,EAAMtS,EAAM1oB,UAAY6/S,EAAY7/S,QAAU,GAAK,EACnD,MACF,KAAK,EACHg7B,EAAMmlR,EAAeN,EAAY7/S,QAAS0oB,EAAM1oB,SAChD,MAEJ,MAAM7/B,EAAMmkQ,EAAOy7E,EAAWvtS,SAAUkW,EAAMlW,SAAUqtS,EAAYrtS,UAAY,IAC1E+tS,EAAMj8E,EAAOy7E,EAAWxtS,MAAOmW,EAAMnW,MAAOstS,EAAYttS,OAAS,IACjEiuS,EAAM93R,EAAMrkB,SAAWw7S,EAAYx7S,OACrCuH,GAAQovB,GAAO,GAAK76D,GAAO,GAAKogV,GAAO,GAAKC,GAC9CF,EAAWroV,KAAK,CACdywD,MAAAA,EAGA4mL,IAAKnvO,EAAMogV,EAAMvlR,EAAM,KAO7B,OADAslR,EAAWrlP,MAAK,CAAC/7F,EAAGC,IAAMD,EAAEowO,IAAMnwO,EAAEmwO,MAC7BgxG,EAAWvnV,KAAIu3B,GAAKA,EAAEo4B,SAE/BoiM,SAASrnP,GACP,OAAOY,OAAOma,QAAQsmB,OAAOgX,UAAU74C,MAAKylD,GAASA,EAAMjlD,KAAOA,KAEpEk8T,qBAAqBkP,GACnB,OAAOp5U,KAAKqmD,UAAU+yR,IAExB4R,YAAYC,GACV,OAAOjrV,KAAKihD,OAAOgqS,IAErBppF,MAAM5uM,EAAOw3I,GACX,MAAMygJ,EAAmBr5S,MAAMyP,WAAW,WAAa,CAAC,UAAW,UAAW,SAAU,WAAW/tC,SAAS0/C,EAAM9c,MAClH,GAAItE,MAAMC,UAAYo5S,EAAkB,OACxC,GAAI38U,QAAQq+B,oBAAsBC,eAAeC,kBAAmB,OAEpE,GAAmB,cAAfmmB,EAAM9c,KAAsB,CAC9B,GAAI2C,IAAe,GAAG00G,mBAAoB,CACxC,GAAIxtJ,KAAKulD,uBAAuBhiD,OAAS,EAEvC,YADAu1C,IAAe,GAAG6zH,oBAAoB,qCAGxC,GAAI15G,EAAMnW,MAAQ,EAEhB,YADAhE,IAAe,GAAG6zH,oBAAqB,0CAAyCt9J,UAAU,MAI9F,GAAIypC,IAAe,IAAI00G,oBAA6D,IAAvCxtJ,KAAKulD,uBAAuBhiD,OAEvE,YADAu1C,IAAe,IAAI6zH,sBAGrB,GAAIroH,iBAAiB,IAAIkpG,oBAA6D,IAAvCxtJ,KAAKulD,uBAAuBhiD,OAEzE,YADA+gD,iBAAiB,IAAIqoH,sBAMzB,GADA3sK,KAAKw8G,WACDx8G,KAAKkqU,qBAAqBj3Q,EAAM1mD,OAAS0mD,EAC3C,MAAM,IAAI3lD,MAAM,mCAElB,IAAI69U,GAAkB,EAClBC,EAAa,EACbl5S,iBAAiBu9D,KAAKr9D,YACxBg5S,EAAa,GAEX,CAAC,UAAW,WAAW73U,SAAS0/C,EAAM9c,QACxCg1S,EAAkBnrV,KAAKihD,OAAOt0C,YAAWiB,GAAKA,GAAKA,EAAEuoC,OAAS8c,EAAM9c,OAAQi1S,GAEzDprV,KAAKihD,OAAOt0C,YAAWiB,GAAKA,GAAKA,EAAEuoC,OAAS8c,EAAM9c,OACvE,GAAgC,OAA5Bn2C,KAAKihD,OAAOwpJ,GAAsB,CACpC,IAAK0gJ,GAAmB,CAAC,UAAW,WAAW53U,SAAS0/C,EAAM9c,MAG5D,YAFA57B,MAAMjC,QAAQkC,KAAM,8BAA6By4C,EAAM9c,KAAKjrC,gCAC1D,CAAEmrK,WAAY3yK,WAAWyB,iBAI7BnF,KAAKgqU,oBAAoB/2Q,GACzBjzD,KAAKqrV,SAAS5gJ,GACd77L,OAAOma,QAAQsmB,OAAO4R,OAAOz+C,KAAKywD,GAClCA,EAAM1mD,IAAMk+L,EACZzqM,KAAKihD,OAAOwpJ,GAAcx3I,EAC1BjzD,KAAKsrV,4BACLtrV,KAAKurV,sBACLxpV,SAASe,SAASY,WAAWwB,yBAC7BnD,SAASe,SAASY,WAAWyB,gBAC7BnF,KAAKw8G,eAEF,CAWJ,GAAK3qE,MAAMC,SAuBR,YADA9xC,KAAKq5U,eAAepmR,EAAOw3I,GArB7B,GAAI77L,OAAOorD,QAAQE,oBAAoBC,eAAe,CAAC,UAAU5mD,SAASvT,KAAKihD,OAAOwpJ,GAAYt0J,OAAOn2C,KAAKihD,OAAOwpJ,GAAYz8L,IAAI,GAAGhO,KAAKihD,OAAOwpJ,GAAYz8L,IAAI,EAAE+oD,GAAoBW,WAAWL,WAAWzoD,OAAOorD,QAAQC,WAAW,IAGxO,YAFA1/C,MAAMjC,QAAQkC,KAAM,8CAClB,CAAE67J,WAAY3yK,WAAWyB,iBAG7B,IAAKgmV,GAAmB,CAAC,UAAW,WAAW53U,SAAS0/C,EAAM9c,OACtDn2C,KAAKihD,OAAOwpJ,GAAYt0J,MAAQ8c,EAAM9c,KAG1C,YAFC57B,MAAMjC,QAAQkC,KAAM,8BAA6By4C,EAAM9c,KAAKjrC,gCAC7D,CAAEmrK,WAAY3yK,WAAWyB,iBAI7B,IAAKyJ,OAAOysF,QAAQouD,cAAcI,aAEhC,YADA7pJ,KAAKq5U,eAAepmR,EAAOw3I,GAG7BlwL,MAAMsvI,aAAarvI,KAAK,CAAEiwL,WAAAA,EAAY2uI,eAAgBnmR,EAAM1mD,MA4B9DvM,KAAKk6P,iBAAiB,SAAUjnM,GAChCjzD,KAAKk6P,iBAAiB,aAAcjnM,IAGtCktP,WAAWqrC,GAAqB,GAC9BxrV,KAAK+rM,WAAa,GAClB,MAAM0/I,GAAeD,GAA6B58U,OAAOysF,QAAQqsD,oBACjE,MAAO94I,OAAOma,QAAQsmB,OAAO4R,OAAO19C,OAAQ,CAC1C,MAAM4mV,EAAYnqV,KAAKw5T,cAAciyB,GACrC,GAAItB,EAAY,EAAG,MACnB,MAAMl3R,EAAQrkD,OAAOma,QAAQsmB,OAAO4R,OAAOowE,MAC3CrxH,KAAKihD,OAAOgS,EAAM1mD,KAAO,KACzBvM,KAAK2tJ,eAAe16F,EAAOk3R,GAAW,GAExC,GAAGv7U,OAAOorD,QAAQE,oBAAoBC,gBAAgBtoB,MAAMC,SAC1D,IAAI,IAAItwC,EAAE,EAAEA,EAAEu1D,GAAoBW,WAAWL,WAAWzoD,OAAOorD,QAAQC,WAAW,IAAIz4D,IAAI,CACxF,MAAMkqV,EAAkB1qS,IAAOq0M,SAAS7zP,EAAE,GAC1Cw/C,IAAO6gN,MAAM6pF,EAAgBlqV,GAGjCxB,KAAKsrV,4BACLtrV,KAAKurV,qBAAoB,GAOzB,IAAII,EAAgB/8U,OAAOma,QAAQsmB,OAAO4R,OAAO19C,OAC9CqL,OAAOorD,QAAQE,oBAAoBC,gBAAewxR,GAAe50R,GAAoBW,WAAWL,WAAWzoD,OAAOorD,QAAQC,WAAW,KACxI,MAAM2xR,EAAc,IAAI5iV,QAAQ4F,OAAO+zC,QAAQi5D,gBAAgB,GAAG,IAAIlkG,GAAG,KACzE,GAAIi0U,IAAkBC,EAAa,CACjC,MAAMvpV,EAASuM,OAAOysF,QAAQqsD,oBAAsB,kBAAoB,iBAClEmkM,GAAwE,IAA7D7rV,KAAKw5T,eAAe5qT,OAAOysF,QAAQqsD,qBACpDvmJ,YAAW,IAAMoZ,MAAMjC,QAAQkC,KAAM,GAAErH,YAAY,QAASw4U,wFACnBtpV,IAASwpV,EAAW,0CAA4C,mCAC/D,IAAlBF,EAAsB,KAAO,UAAW,CAAEt1K,WAAY3yK,WAAWyB,kBACzF,IAKF,OAFApD,SAASe,SAASY,WAAWwB,yBAC7BnD,SAASe,SAASY,WAAWyB,iBACrByJ,OAAOma,QAAQsmB,OAAO4R,OAAO19C,QAEvCuoV,iBAAiBN,GAAqB,GACpCxrV,KAAKihD,OAASjhD,KAAKihD,OAAOukD,MAAK,SAAS53F,EAAEsG,GAAI,MAAiB,UAAVtG,EAAEuoC,MAAoB,EAAe,UAAXjiC,EAAGiiC,KAAmB,EAAI,KACzGn2C,KAAK+rM,WAAa,GAClB,MAAM0/I,GAAeD,GAA6B58U,OAAOysF,QAAQqsD,oBACjE,IAAI57I,EAAS,EACT24C,EAAQ,EACRvS,iBAAiBu9D,KAAKr9D,YAAWqS,EAAQ,GAC7C,MAAO34C,EAAS24C,EAAO,CACrB,MAAM0lS,EAAYnqV,KAAKw5T,cAAciyB,GACrC,GAAItB,EAAY,EAAG,MACnBr/U,QAAQC,IAAI/K,KAAKihD,QACjB,MAA8C,MAAvCjhD,KAAKihD,OAAOjhD,KAAKihD,OAAO19C,OAAS,GACtCvD,KAAKihD,OAAOowE,MACZvlH,IAGF,GADAhB,QAAQC,IAAgD,UAA5C/K,KAAKihD,OAAOjhD,KAAKihD,OAAO19C,OAAS,GAAG4yC,MACA,UAA5Cn2C,KAAKihD,OAAOjhD,KAAKihD,OAAO19C,OAAS,GAAG4yC,KAAkB,MACxD,MAAM8c,EAAQjzD,KAAKihD,OAAOowE,MAC1BrxH,KAAKihD,OAAOgS,EAAM1mD,KAAO,KACzBvM,KAAK2tJ,eAAe16F,EAAOk3R,GAAW,GACxCr+U,IAEF,MAAO9L,KAAKihD,OAAO19C,OAAS,EAC1BvD,KAAKihD,OAAO8qS,OAAO,MAErB/rV,KAAKsrV,4BACLtrV,KAAKurV,qBAAoB,GAOzB,MAAMK,EAAc,IAAI5iV,QAAQ4F,OAAO+zC,QAAQi5D,gBAAgB,GAAG,IAAIlkG,GAAG,KACzE,GAAI5L,EAAS24C,IAAUmnS,EAAa,CAClC,MAAMvpV,EAASuM,OAAOysF,QAAQqsD,oBAAsB,kBAAoB,iBAClEmkM,GAAwE,IAA7D7rV,KAAKw5T,eAAe5qT,OAAOysF,QAAQqsD,qBACpDvmJ,YAAW,IAAMoZ,MAAMjC,QAAQkC,KAAM,GAAErH,YAAY,QAAUsxC,EAAM34C,wFAC1BzJ,IAASwpV,EAAW,0CAA4C,mCACjF//U,IAAW24C,EAAM,EAAI,KAAO,UAAW,CAAE4xH,WAAY3yK,WAAWyB,kBACxF,IAKF,OAFApD,SAASe,SAASY,WAAWwB,yBAC7BnD,SAASe,SAASY,WAAWyB,gBACtB2G,GAAU24C,GAEnBunS,QAAQf,EAAagB,GACnB,GAAiC,OAA7BjsV,KAAKihD,OAAOgqS,GAAuB,OACvC,MAAMiB,EAAct9U,OAAOma,QAAQsmB,OAAO4R,OAAOihE,WAAUjvD,GAASA,EAAM1mD,MAAQ0+U,IAClF,GAAIiB,EAAc,EAAG,OACrB,MAAMj5R,EAAQrkD,OAAOma,QAAQsmB,OAAO4R,OAAO11C,OAAO2gV,EAAa,GAAG,GAClElsV,KAAKihD,OAAOgqS,GAAe,KAC3BjrV,KAAK2tJ,eAAe16F,EAAOg5R,GAAyB,GACpDjsV,KAAKsrV,4BACLtrV,KAAKurV,qBAAoB,GACzBxpV,SAASe,SAASY,WAAWwB,yBAC7BnD,SAASe,SAASY,WAAWyB,iBAE/BmmV,4BAEE,MAAM5tF,EAAe9uP,OAAOma,QAAQsmB,OAAO4R,OAAOr+C,QAAO6vB,GAAgB,YAAXA,EAAE0jB,OAAoB,GAOpFn2C,KAAKopV,gBANgB7mV,IAAjBm7P,EAMc9tG,+BAA+B,qBAL7B,GAOtBgzG,WAAW3vM,EAAOw3I,GACmB,OAA/BzqM,KAAKqmD,UAAUokJ,GAAsBzqM,KAAKmsV,YAAYl5R,EAAOw3I,GAC5DzqM,KAAKswN,KAAKr9J,EAAOjzD,KAAKqmD,UAAUokJ,KAEvC0hJ,YAAYl5R,EAAOw3I,GAEjB,GADAzqM,KAAKw8G,WACDx8G,KAAKkqU,qBAAqBj3Q,EAAM1mD,OAAS0mD,EAC3C,MAAM,IAAI3lD,MAAM,mCAElB,GAAmC,OAA/BtN,KAAKqmD,UAAUokJ,GAMjB,MAAM,IAAIn9L,MAAM,4CALhBtN,KAAKqmD,UAAU4M,EAAM1mD,KAAO,KAC5BvM,KAAKqmD,UAAUokJ,GAAcx3I,EAC7BA,EAAM1mD,IAAMk+L,EACZ1oM,SAASe,SAASY,WAAWyB,gBAI/BnF,KAAKw8G,YAEP8zG,KAAK87H,EAAQC,GACX,GAAID,EAAO7/U,MAAQ8/U,EAAO9/U,IAAK,OAC/BvM,KAAKw8G,WACLx8G,KAAKqmD,UAAU+lS,EAAO7/U,KAAO8/U,EAC7BrsV,KAAKqmD,UAAUgmS,EAAO9/U,KAAO6/U,EAC7B,MAAME,EAAYF,EAAO7/U,IACzB6/U,EAAO7/U,IAAM8/U,EAAO9/U,IACpB8/U,EAAO9/U,IAAM+/U,EACbtsV,KAAKw8G,WACLz6G,SAASe,SAASY,WAAWyB,iBAE/BwoJ,eAAe16F,EAAOg5R,EAAyBM,GAAkB,GAC/DvsV,KAAKw8G,WACA+vO,IAAiBt5R,EAAMjlD,GAAK4/I,eAAe4+L,UAChD,MAAMC,EAAmBR,EAA0BjsV,KAAK6iQ,eACxD,IAAI96P,EAAQ/H,KAAKw5T,cAAcizB,GAC3B1kV,EAAQ,SACoBxF,IAA5B0pV,GAC8C,OAA5CjsV,KAAKqmD,UAAU4lS,KAAmClkV,EAAQkkV,GAEhEjsV,KAAKqmD,UAAUt+C,GAASkrD,EACxBA,EAAM1mD,IAAMxE,EAKZ/H,KAAK2hF,eAAe1uB,GAKpBrkD,OAAO+zC,QAAQuF,YAAY4rB,cAAgBjzE,KAAK4H,SAASmG,OAAO+zC,QAAQuF,YAAY4rB,cAAe7gB,EAAMlW,UAEzGnuC,OAAOma,QAAQsmB,OAAOgX,UAAU7jD,KAAKywD,QACL1wD,IAA5B0pV,GAA0CM,GAAiBvsV,KAAK0sV,cAAc,SAAUz5R,GACxFs5R,GAAiBvsV,KAAK0sV,cAAc,aAAcz5R,GACtDlxD,SAASe,SAASY,WAAWyB,gBAC7BnF,KAAKw8G,aAGPkwO,cAAcrqV,EAAQ4wD,GACfjzD,KAAKqC,GAAQkR,SAAS0/C,EAAMjlD,KAAKhO,KAAKqC,GAAQG,KAAKywD,EAAMjlD,KAEhEksP,iBAAiB73P,EAAQ4wD,GACvB,MAAMlrD,EAAQi5C,IAAO3+C,GAAQ4F,QAAQgrD,EAAMjlD,IACvCjG,GAAS,GAAGi5C,IAAO3+C,GAAQkJ,OAAOxD,EAAO,IAE/C6iE,aAAa3X,GACX,MAA2B,WAAf,OAALA,QAAK,IAALA,OAAA,EAAAA,EAAOizI,WAEhB8jI,oBAAoB/2Q,GAElB,GAAkB,OAAdA,EAAM1mD,IAAc,OACxBvM,KAAKw8G,WACL,MAAMz0G,EAAQ6G,OAAOma,QAAQsmB,OAAOgX,UAAUp+C,QAAQgrD,GAClDlrD,EAAQ,IACZ/H,KAAKqmD,UAAU4M,EAAM1mD,KAAO,KAC5BqC,OAAOma,QAAQsmB,OAAOgX,UAAU96C,OAAOxD,EAAO,GAC9ChG,SAASe,SAASY,WAAWyB,gBAC7BnF,KAAKw8G,aAEPA,WACE,IAAK,MAAMvpD,KAASrkD,OAAOma,QAAQsmB,OAAOgX,UACxC,GAAIrmD,KAAKqmD,UAAU4M,EAAM1mD,OAAS0mD,EAChC,MAAM,IAAI3lD,MAAM,oBAGpB,IAAK,IAAI9L,EAAI,EAAGA,EAAIxB,KAAKqmD,UAAU9iD,SAAU/B,EAC3C,GAAIxB,KAAKqmD,UAAU7kD,IAAMxB,KAAKqmD,UAAU7kD,GAAG+K,MAAQ/K,EACjD,MAAM,IAAI8L,MAAM,+BAItBk4F,KAAKmnP,GACH,MAAMC,EAAeh+U,OAAOma,QAAQsmB,OAAOgX,UAAUzjD,QAAO6vB,GAAKA,EAAElmB,KAAOvM,KAAK6iQ,iBACzEgqF,EAAYnuQ,UAAUC,oBAAoB72E,MAC1Co9I,EAAY,CAAC,QAAS,WAAY,cAAe,OAAQ,WAAY,UACzE,UAAW,SAAU,UAAW,aAC5B4nM,EAAS5nM,EAAU/4I,aAAYsmB,GAAKA,IAAG,KAAM,CAAG4c,OAAQ,GAAIoiP,QAAS,MAC3E,IAAK,MAAMh/P,KAAKm6T,EAAcE,EAAOr6T,EAAE0jB,MAAM9G,OAAO7sC,KAAKiwB,GACzD,IAAIs6T,EAAsB,EAC1B,IAAK,MAAM1zT,KAAK32B,OAAOW,OAAOypV,GAC5BzzT,EAAEgW,OAAOm2D,KAAKmnP,GACdtzT,EAAEo4P,QAA4C,GAAlC5wR,KAAKqzB,KAAKmF,EAAEgW,OAAO9rC,OAAS,IAAW81B,EAAEgW,OAAO9rC,OAC5DwpV,GAAuB1zT,EAAEo4P,QAG3B,MAAOs7D,EAAsBF,EAAW,CACtC,IAAIG,EAAiB9nM,EAAU,GAC/B,IAAK,MAAM7rH,KAAK6rH,EACV4nM,EAAOzzT,GAAGo4P,QAAUq7D,EAAOE,GAAgBv7D,UAASu7D,EAAiB3zT,GAG3E,MAAMslL,EAAQmuI,EAAOE,GAAgBv7D,QAAU,EAAI,EAAI,EACvDs7D,GAAuBpuI,EACvBmuI,EAAOE,GAAgBv7D,SAAW9yE,EAEpC,IAAIsuI,EAAWjtV,KAAK6iQ,eACpB,IAAK,MAAMxpO,KAAK32B,OAAOW,OAAOypV,GAAS,CACrC,IAAK,MAAMr6T,KAAK4G,EAAEgW,OACZrvC,KAAKqmD,UAAU4mS,GAAWjtV,KAAKswN,KAAKtwN,KAAKqmD,UAAU4mS,GAAWx6T,GAC7DzyB,KAAKmsV,YAAY15T,EAAGw6T,KACvBA,EAEJA,GAAY5zT,EAAEo4P,QAEZ7iR,OAAOma,QAAQ43H,cAAc3gJ,KAAKwsQ,sBAExCL,cACEnsQ,KAAKwlG,KAAK0jC,IAAQpsF,QAEpBsvN,cACEpsQ,KAAKwlG,KAAK0jC,IAAQzgH,QAEpB6jP,cACEtsQ,KAAKwlG,KAAK0jC,IAAQsW,QAEpB6sH,eACErsQ,KAAKwlG,KAAK0jC,IAAQ5hG,SAEpB4lT,sBAAsBC,GACS,mBAAnBA,GACVnsS,IAAOC,OAAOxsC,SAAQ8yC,IACpB,GAAgB,OAAbA,EAAmB,OACtB,IAAI6lS,EAAiBpsS,IAAOgoB,cAAcpmE,QAAO6vB,GAAKA,EAAE0jB,OAASoR,EAASpR,OAC1E,GAA6B,IAA1Bi3S,EAAe7pV,OAAc,OAC7B6pV,EAAe7pV,OAAS,GACzB6pV,EAAe5nP,KAAK2nP,GAEtB,IAAIE,EAAYD,EAAe,GAC5BD,EAAgB5lS,EAAU8lS,GAAa,GAAGrsS,IAAOq4R,eAAegU,EAAW9lS,EAASh7C,SAG3F+gV,mBACEttV,KAAKktV,sBAAsBhkN,IAAQpsF,QAErCywS,mBACEvtV,KAAKktV,sBAAsBhkN,IAAQzgH,QAErC+kU,mBACExtV,KAAKktV,sBAAsBhkN,IAAQsW,QAErCiuM,oBACEztV,KAAKktV,sBAAsBhkN,IAAQ5hG,SAIrComT,qBAAqBz6R,EAAO3kD,EAAWq/U,GACrC,GAAI/+U,OAAOma,QAAQ63H,oBAAsBhqC,mBAAmB8/D,UAAUzjH,GACpE,OAAO,EAET,SAAS26R,EAAqBxB,EAAQC,EAAQwB,GAC5C,IAAK,MAAMvmT,KAAUumT,EAAiB,CACpC,MAAMxiV,EAAIi8B,EAAOyhG,cACfzhG,EAAOA,OAAO8kT,EAAOtvS,MAAOsvS,EAAOrvS,UACnCzV,EAAOA,OAAO+kT,EAAOvvS,MAAOuvS,EAAOtvS,WAErC,GAAI1xC,EAAI,EACN,OAAO,EAGX,OAAO,EAET,MAAMyiV,GAAY,OAACH,QAAD,IAACA,EAAAA,EAAe3tV,KAAKqmD,WAAWwgB,OAAO7mE,KAAKihD,QAC3Dr+C,QAAO6vB,GAAW,OAANA,GACXA,EAAE0jB,OAAS8c,EAAM9c,MACjB1jB,EAAEzkB,KAAOilD,EAAMjlD,KACdykB,EAAEqqB,OAASmW,EAAMnW,OAASrqB,EAAEsqB,UAAYkW,EAAMlW,YAC7CtqB,EAAE8X,QAAU0oB,EAAM1oB,WAAa0oB,EAAM1oB,UAC3C,IAAIwjT,EAAkC,YAAf96R,EAAM9c,MAAqC,YAAf8c,EAAM9c,KAAqB,EAAI,EAKlF,GAJIjE,iBAAiBu9D,KAAKr9D,YACxB27S,EAAkC,YAAf96R,EAAM9c,MAAqC,YAAf8c,EAAM9c,KAAqB,EAAI,GAEhF43S,EAAmBltV,KAAK2H,SAASulV,EAAkBz/U,GAC/Cw/U,EAAUvqV,OAASwqV,EACrB,OAAO,EAET,MAAMF,EAAkB1kR,2BAA2BlW,EAAM1oB,SAAS3nC,QAAOgL,GAAKA,EAAEI,GAAG+8G,WAAW93D,EAAM9c,QAC9F63S,EAAcF,EAAUnhV,YAAWqJ,IAAU43U,EAAqB36R,EAAOj9C,EAAO63U,KACtF,OAAOG,GAAeD,GAMxBjkM,UAAUx7I,EAAY0yC,IAAOyqN,SAAUwiF,GAAe,GACpD,MAAMC,EAAU5/U,EAAY0yC,IAAOyqN,SACnC,IAAI0iF,EAAc,EAClB,MAAMC,EAAgBH,OAAe1rV,EAAYvC,KAAKquV,qBAEtD,IAAK7sS,sBAAsBs2C,aAAc,OAAOq2P,EAEhD,IAAK,IAAI/U,EAAiBp5U,KAAK0iQ,WAAa,EAAG02E,GAAkBp5U,KAAK6iQ,iBAAkBu2E,EAAgB,CACtG,MAAMnmR,GAAQ,OAACm7R,QAAD,IAACA,EAAAA,EAAiBpuV,KAAKqmD,WAAW+yR,GAEhD,GAAc,OAAVnmR,GAAiC,cAAfA,EAAM9c,MAAwC,WAAf8c,EAAM9c,MAAmC,IAAd7nC,GAAkC,YAAdtO,KAAKm2C,KAAoB,SAE7H,MAAMm4S,OAAgC/rV,IAAhB0wD,EAAMpkB,YAAwCtsC,IAAjB0wD,EAAMrkB,OACrD0/S,IAAkBJ,IAGJ,IAAd5/U,GAAmBtO,KAAK0tV,qBAAqBz6R,EAAO3kD,EAAW8/U,MAC7DH,EAAcr3O,mBAAmBi/D,cAAc5iH,GAC9Cm7R,EAAc7iV,OAAO6iV,EAAcnmV,QAAQgrD,GAAQ,GACxDk7R,KAIJ,OADIv/U,OAAOma,QAAQ43H,cAAgBstM,GAAcjuV,KAAKwsQ,qBAC/C2hF,GAITE,qBACE,OAAOruV,KAAKqmD,UAAU/iD,KAAImvB,GAAY,OAANA,EAC5B,KACA,CACAzkB,GAAIykB,EAAEzkB,GACNmoC,KAAM1jB,EAAE0jB,KACR2G,MAAOrqB,EAAEqqB,MACTC,SAAUtqB,EAAEsqB,SACZxS,QAAS9X,EAAE8X,QACXsE,MAAOpc,EAAEoc,MACTD,OAAQnc,EAAEmc,WAGhB01J,iBACEtkM,KAAK8pJ,UAAU,IAEjB+gH,uBACE7qQ,KAAK8pJ,UAAU,IAEjBihH,kBAAkBkjF,GAAe,GAC/B,IAAIE,EAAc,EAClB,IAAK,MAAMl7R,KAASjS,IAAOqF,UACX,OAAV4M,GAAkBA,EAAM1mD,KAAOvM,KAAK6iQ,iBAAmBjsJ,mBAAmB8/D,UAAUzjH,KAClFg7R,GAAcr3O,mBAAmBi/D,cAAc5iH,GACnDk7R,KAIJ,OADIv/U,OAAOma,QAAQ43H,cAAgBstM,GAAcjuV,KAAKwsQ,qBAC/C2hF,GAET3hF,qBACE,MAAM+hF,EAAoB3/U,OAAOma,QAAQsmB,OAAOgX,UAC7CzjD,QAAO6vB,GAAKA,EAAElmB,KAAOvM,KAAK6iQ,iBAC1Br9J,MAAK,CAAC/7F,EAAGC,IAAMD,EAAE8C,IAAM7C,EAAE6C,MAC5B,IAAK,IAAIxE,EAAQ,EAAGA,EAAQwmV,EAAkBhrV,OAAQwE,IACpD/H,KAAK4iQ,WAAW2rF,EAAkBxmV,GAAQ/H,KAAK6iQ,eAAiB96P,IAGpEymV,6BAEE,OADIr7R,SAAS29B,cAAcpoD,cAAgB95B,OAAOma,QAAQ+nE,eAAe9wF,KAAK8pJ,YACtEl7I,OAAOma,QAAQ23H,UACrB,KAAKx2H,eAAeC,KAClB,MACF,KAAKD,eAAeE,MAClBpqB,KAAKmsQ,cACL,MACF,KAAKjiP,eAAeG,MAClBrqB,KAAKosQ,cACL,MACF,KAAKliP,eAAeI,OAClBtqB,KAAKqsQ,eACL,MACF,KAAKniP,eAAeK,MAClBvqB,KAAKssQ,cACL,MACF,QACE,MAAM,IAAIh/P,MAAM,iCAGtBmhV,+BACE,OAAQ7/U,OAAOma,QAAQ83H,WACrB,KAAK32H,eAAeC,KAClB,MACF,KAAKD,eAAeE,MAClBpqB,KAAKstV,mBACL,MACF,KAAKpjU,eAAeG,MAClBrqB,KAAKutV,mBACL,MACF,KAAKrjU,eAAeI,OAClBtqB,KAAKytV,oBACL,MACF,KAAKvjU,eAAeK,MAClBvqB,KAAKwtV,mBACL,MACF,QACE,MAAM,IAAIlgV,MAAM,kCAGlBi0E,eACF,OAAO,MAEL48K,2BACF,OAAO,IAAOz4M,uBAAuB,gBAAkBpB,iBAAiB,GAAG3b,gBAAgB,IAEzFy1N,gCACF,OAAO,IAAOp+P,KAAKm+P,sBAEjBE,gCAEF,OAAO,KAAS,IAAMnvN,GAAe,GAAGvC,aAAgBgT,GAAGC,QAAQgjC,sBAAsBj6C,gBAAgB,IAEvG+lT,gCACF,OAAO,KAELp6E,cACF,OAAO,KAETq6E,YACE//U,OAAOma,QAAQsmB,OAAOy6C,KAAO,IAE/BuhQ,SAAS5gJ,GACP,MAAMmkJ,EAAW,CACfnkJ,WAAAA,EACAp3H,GAAI,IAAIrqE,QAAQ4nC,SAASC,WAAW/oC,OACpCyrE,GAAI,IAAIvqE,QAAQ4nC,SAASI,eAAelpC,OACxCuhE,GAAI,IAAIrgE,QAAQ4nC,SAASO,eAAerpC,OACxC4zU,GAAI9qS,SAASiW,aAAaz+C,IAAI8O,MAAMu7E,aAAao8P,kBACjDC,IAAK5mR,mBAAmB7b,IAAI/oD,KAAI42B,GAAKA,EAAEusB,cACvCkqI,iBAAkB/hL,OAAO+zC,QAAQqc,aAAap2C,KAC9Cs9C,qBAAsBt3D,OAAO+zC,QAAQqc,aAAa82B,SAClDi5P,iBAAkBngV,OAAO+zC,QAAQsW,aAAarwC,KAC9CgoK,qBAAsBhiL,OAAO+zC,QAAQsW,aAAa68B,SAClDk5P,gBAAiBpgV,OAAO+zC,QAAQsF,YAAYr/B,KAC5CuzC,oBAAqBvtD,OAAO+zC,QAAQsF,YAAY6tC,SAChDta,WAAY5sE,OAAOC,WAAWm9D,SAASmtB,OACvC81P,gBAAiBrgV,OAAOia,SAASw/C,QAAQx6D,YACzC4rF,iBAAkB7qF,OAAOia,SAASo5B,SAASp0C,YAC3CqhV,mBAAoBC,iBAAiBrtS,UAAU31C,aAAYw1B,GAAKA,EAAE3zB,KAAI2zB,GAAKA,EAAEgL,eAC7Ei+P,GAAI,IAAI5hS,QAAQ4nC,SAASwvB,iBAAiBt4D,OAC1C06I,GAAI,IAAIx5I,QAAQ4nC,SAASolB,YAAYluD,QAEvC8G,OAAOma,QAAQsmB,OAAOy6C,KAAKtnF,KAAKosV,IAElC9kQ,OACE,MAAMslQ,EAAgBpuS,IAAOw4Q,cAAc5qT,OAAOysF,QAAQqsD,qBAC1D,IAAuB,IAAnB0nM,GAA8D,IAAtCxgV,OAAOma,QAAQsmB,OAAOy6C,KAAKvmF,OAAc,OACrE,MAAMqrV,EAAWhgV,OAAOma,QAAQsmB,OAAOy6C,KAAKunC,MAsB5C,GAnBArxH,KAAKqpV,mBAAqBz6U,OAAO+0C,kBAAkB56B,QAAQk8B,UAC3DjlD,KAAKgsV,QAAQ4C,EAASnkJ,WAAY2kJ,GAClC32K,qBAAqB,CACnBjnF,OAAO,EACPy4D,WAAW,EACXutB,uBAAuB,IAEzB5mI,SAASC,WAAW/oC,MAAQ,IAAIkB,QAAQ4lV,EAASv7Q,IACjDziC,SAASI,eAAelpC,MAAQ,IAAIkB,QAAQ4lV,EAASr7Q,IACrD3iC,SAASO,eAAerpC,MAAQ,IAAIkB,QAAQ4lV,EAASvlR,IACrDz4B,SAASiW,aAAa/+C,MAAQ,IAAIkB,QAAQ4lV,EAASlT,IACnDxzQ,mBAAmB7b,IAAI/oD,KAAI,CAAC6rD,EAAIkgS,IAAYlgS,EAAG1I,YAAcmoS,EAASE,IAAIO,KAC1EzgV,OAAO+zC,QAAQqc,aAAap2C,KAAOgmU,EAASj+J,iBAC5C/hL,OAAO+zC,QAAQqc,aAAa82B,SAAW84P,EAAS1oR,qBAChDt3D,OAAO+zC,QAAQsW,aAAarwC,KAAOgmU,EAASG,iBAC5CngV,OAAO+zC,QAAQsW,aAAa68B,SAAW84P,EAASh+J,qBAChDhiL,OAAO+zC,QAAQsF,YAAYr/B,KAAOgmU,EAASI,gBAC3CpgV,OAAO+zC,QAAQsF,YAAY6tC,SAAW84P,EAASzyR,oBAC/CvtD,OAAOC,WAAWm9D,SAASmtB,OAASy1P,EAASpzQ,YAAc,EACvDozQ,EAASK,gBAAiB,CAC5BrgV,OAAOia,SAASw/C,QAAU1gE,MAAMsG,YAAY2gV,EAASK,iBACrDrgV,OAAOia,SAASo5B,SAAW,IAAI10C,IAAI5F,MAAMsG,YAAY2gV,EAASn1P,mBAC9D,IAAK,MAAMzrF,KAAMtL,OAAOC,KAAKisV,EAASM,oBACpCC,iBAAiBG,OAAOthV,GAAI2+B,aAAeiiT,EAASM,mBAAmBlhV,GAEzE4iC,SAASwvB,iBAAiBt4D,MAAQ,IAAIkB,QAAQ4lV,EAAShkD,IACvDh6P,SAASolB,YAAYluD,MAAQ,IAAIkB,QAAQ4lV,EAASpsM,IAEhD3pF,OAAO2P,mBAAqBqxC,iBAAiBhhF,MAAMsnF,cACrDtG,iBAAiBruG,MAAMoD,OAAOma,QAAQkwB,UAAUpgB,MAAM22F,eAG1Dn9B,eAAemkB,GAEb,OAAOA,EAAUlzG,KAAImvB,IAAK,CACxB0jB,KAAM1jB,EAAE0jB,KACR2G,MAAOrqB,EAAEqqB,MACTC,SAAUtqB,EAAEsqB,SACZxS,QAAS9X,EAAE8X,QACXsE,MAAOpc,EAAEoc,MACTD,OAAQnc,EAAEmc,WACT42D,MAAK,CAAC/7F,EAAGC,IAAMA,EAAE6gC,QAAU9gC,EAAE8gC,WAIlCghT,oBAAoBgE,GAAkB,GACpC,MAAMC,EAAkBxvV,KAAKulD,uBACvBkqS,EAAYD,EAAgBjsV,OAAS,EAAIisV,EAAgB5sV,QAAOgL,GAAKA,GAAgB,WAAXA,EAAEuoC,OAAmB5yC,OACjGgsV,IAAiB3gV,OAAO+0C,kBAAkB56B,QAAQk8B,UAAYwqS,GAClE7gV,OAAO+0C,kBAAkB56B,QAAQk8B,UAAYpkD,KAAKuH,IAAIwG,OAAO+0C,kBAAkB56B,QAAQk8B,UAAWwqS,IAGpG9tQ,eAAe1uB,GACRtT,GAAGC,QAAQ8hC,mBAAmBh5C,cAC/BpgB,kBAAkB/U,SAAS0/C,EAAM9c,QACnC8c,EAAM1oB,SAAY,GAAKo/F,aAAatsF,UAAUZ,aAC3B,SAAfwW,EAAM9c,OACR8c,EAAM1oB,SAAY,GAAKo/F,aAAavpF,aAAa3D,gBAIvD48R,eAAepmR,EAAOw3I,GACpBzqM,KAAKgqU,oBAAoB/2Q,GACzBjzD,KAAKgsV,QAAQvhJ,EAAYx3I,EAAM1mD,KAC/BksK,qBAAqB,CACnBjnF,OAAO,EACPy4D,WAAW,EACXutB,uBAAuB,IAEzB5oK,OAAOma,QAAQsmB,OAAO4R,OAAOz+C,KAAKywD,GAClCjzD,KAAKihD,OAAOwpJ,GAAcx3I,EAC1BA,EAAM1mD,IAAMk+L,EACZzqM,KAAKsrV,4BACLtrV,KAAKurV,qBAAoB,GACzBxpV,SAASe,SAASY,WAAWwB,yBAC7BnD,SAASe,SAASY,WAAWyB,gBAC7BnF,KAAKw8G,YAKPyzF,KAAK/Z,GACH,IAAI+Z,EAAO,EACX,IAAK,MAAMh9I,KAASijI,EAAU,CAE5B,MAAMw5J,EAAkB7uV,KAAKgd,IAAIo1C,EAAMnW,MAAO,GAAKj8C,KAAKgd,IAAIo1C,EAAMlW,SAAU,GAAKkW,EAAM1oB,QACrF0oB,EAAM9c,KAAK/H,WAAW,GACxB6hK,GAAQy/I,EAEV,OAAOz/I,GAETm6C,kBACE,GAA4C,IAAxC1rK,UAAUC,oBAAoB72E,MAGhC,YAFAyS,MAAMjC,QAAQkC,KAAK,wEACjB,CAAE67J,WAAY3yK,WAAWyB,iBAG7B,MAAM47C,EAAc/gD,KAAK4nD,UAAUhlD,QAAO6vB,GAAW,OAANA,GAAyB,WAAXA,EAAE0jB,OAAmB5yC,OAC9Ew9C,GAAe,EACjB99C,OAAOiqG,OAAO6kB,MAAO,4BAA2B/iH,OAAO,sBAEvDhP,KAAK2tJ,eAAeC,eAAe+hM,eACnC1sV,OAAOiqG,OAAO6kB,MAAM,6BAK1B,MAAM69N,YAA4BxlT,GAE3B,MAAMwzB,IAAiBgzC,oBAC5BlkC,aAAa3jD,QAAQq4B,gBACrB/gD,GAAU,IAAIuvV,IAAoBvvV,KAG7B,SAASk7K,MACd,IAAK,IAAI/5K,EAAI,EAAGA,EAAIoN,OAAOma,QAAQsmB,OAAO4R,OAAO19C,OAAQ/B,IACvDi0K,IAAe7mK,OAAOma,QAAQsmB,OAAO4R,OAAOz/C,IAG9CoN,OAAOma,QAAQsmB,OAAOgX,UAAYz3C,OAAOma,QAAQsmB,OAAOgX,UAAUzjD,QAChEqwD,GAASA,EAAM1mD,IAAMy0C,IAAO0hN,aAC9B,IAAK,IAAIlhQ,EAAI,EAAGA,EAAIoN,OAAOma,QAAQsmB,OAAOgX,UAAU9iD,OAAQ/B,IAC1Di0K,IAAe7mK,OAAOma,QAAQsmB,OAAOgX,UAAU7kD,IAEjDw/C,IAAOsqS,4BACPtqS,IAAOw+E,UAIF,SAASi2C,IAAexiH,QACT1wD,IAAhB0wD,EAAMpkB,YAAwCtsC,IAAjB0wD,EAAMrkB,SACrCqkB,EAAMnW,MAAQj8C,KAAKuH,IAAI,EAAGvH,KAAK05B,MAAM04B,EAAMnW,aACpBv6C,IAAnB0wD,EAAM66F,WAGR76F,EAAM66F,SAAW76F,EAAMnW,MAAQ,IAAOmW,EAAMnW,MAAqD,KAA5Cj8C,KAAKgd,IAAI,KAAQo1C,EAAMnW,MAAQ,EAAG,GAAK,GAAW,KAIlF,IAAnBmW,EAAMlW,WAAgBkW,EAAMlW,SAAW,KAC3CkW,EAAMlW,SAAWl8C,KAAKC,IAAI6oQ,IAAiB,KAAO12M,EAAMlW,WAIrD,SAASk3M,IAAUrmP,GACxB,OAAO8Z,cAAcla,MAAK0sB,GAAKtsB,GAAKssB,EAAEvS,cAGjC,SAASsyO,IAAsBhnM,EAAO09L,EAAoB3vM,IAAOooS,WAAYyG,GAAyB,GAC3G,MAAM/yS,EAAQmW,EAAMnW,MACpB,IAAK+yS,EAAwB,CAC3B,GAAIh+S,MAAMC,SAAU,OAAOjxC,KAAKC,IAAIg8C,EAAOjL,MAAMiuN,eACjD,GAAIruN,SAASC,UAAW,OAAO7wC,KAAKuH,IAAI00C,EAAOrL,SAASijO,eACxD,GAAIv1N,QAAQzN,UAAW,OAAO7wC,KAAKC,IAAIg8C,EAAOqC,QAAQ+sQ,eAExD,OAAI5jS,kBAAkB/U,SAAS0/C,EAAM9c,MAAc2G,EAAQ6zM,EACpD7zM,EAGF,SAASo+H,MACTl6H,IAAOm/P,cACV5lS,MAAMjC,QAAQkC,KAAK,8EACjB,CAAE67J,WAAY3yK,WAAWyB,iBAE7ByJ,OAAOma,QAAQkpF,QAAS,ECjiC1B,MAAM69O,IACJ9tV,YAAYimI,EAAO67L,GAAY,QAC7B9jU,KAAKgO,GAAKi6H,EAAMj6H,GAChBhO,KAAK+vV,eAAiB9nN,EAAMr5F,OAC5B5uC,KAAKgwV,cAAgB/nN,EAAMp5F,MAC3B7uC,KAAK6vC,YAAL,UAAmBo4F,EAAMp4F,mBAAzB,SACA7vC,KAAKmrC,WAAa88F,EAAM98F,WACxBnrC,KAAKiwV,cAAgBhoN,EAAM94F,aAC3BnvC,KAAKovC,iBAAL,UAAwB64F,EAAM74F,wBAA9B,SACApvC,KAAK8jU,WAAaA,EAMhB30R,mBAAe,YACjB,QAASnvC,KAAK8jU,YAAN,oBAAqB9jU,KAAKmrC,kBAA1B,aAAqB,OAAAnrC,aAArB,YAAD,oBAAwDA,KAAKiwV,qBAA7D,aAAwD,OAAAjwV,aAAxD,UAGLkwV,oBACF,MAAO,CACLthT,OAAQ5uC,KAAK+vV,eACb1jN,MAAOrsI,KAAK6vC,aAIZsgT,mBACF,MAAMthT,EAAoB,YAAZ7uC,KAAKgO,GAAmBm/F,IAAuBuqJ,aAAe13P,KAAKgwV,cAC3EI,GAAkBjjP,IAAuBwnJ,UAC/C,MAAO,CACLltH,OAAQ54F,EACRwlN,GAAK+7F,KAAgC,WAAZpwV,KAAKgO,IAA+B,YAAZhO,KAAKgO,IAAqB,QAAU,SAIrFgqP,oBACF,MAAMq4F,EAASzhV,OAAOma,QAAQsmB,OAAOuwG,UAAUG,UAAU//I,KAAKgO,IAC9D,OAAKY,OAAOma,QAAQsmB,OAAOuwG,UAAU3+F,QAAWovS,EACzC,CACLzhT,OAAQyhT,EACRhkN,OAAQrsI,KAAK6vC,aAAes9D,IAAuB4qJ,iBAAiBxkP,SAAS88U,KAHhBrwV,KAAKkwV,cAOlE97F,mBACF,MAAMi8F,EAASzhV,OAAOma,QAAQsmB,OAAOuwG,UAAUI,SAAShgJ,KAAKgO,IAC7D,IAAKY,OAAOma,QAAQsmB,OAAOuwG,UAAU3+F,SAAWovS,EAAQ,OAAOrwV,KAAKmwV,aACpE,MAAMtqB,EAAa14N,IAAuBkrJ,cAAcg4F,GACxD,yBACKxqB,GADL,IAEEn7T,IAAK2lV,IAIL93F,wBACF,OAAOv4P,KAAK8jU,YAAc9jU,KAAKovC,kBAInC,MAAMkhT,IAAmB1/O,oBACvBlkC,aAAa3jD,QAAQ4lB,YACrBtuC,GAAU,IAAIyvV,IAAkBzvV,GAAQ,KAGpCmvC,IAAiBohE,oBACrBlkC,aAAa3jD,QAAQymB,gBACrBnvC,GAAU,IAAIyvV,IAAkBzvV,GAAQ,KAG7B8zP,KAAqB,0BAC7Bm8F,KACA9gT,KAF0B,IAGzBrC,WACF,OAAOzqC,OAAOC,MAAP,kBAAiB+pE,aAAa3jD,QAAQ4lB,YAAe+9B,aAAa3jD,QAAQymB,iBAC9ElsC,KAAI42B,GAAKi6N,IAAmBj6N,QAItBizE,IAAyB,CACpCw2N,WAAY,KACZv2N,gBAAiB,KACbmjP,uBACF,OAAO3hV,OAAOma,QAAQsmB,OAAOuwG,UAAU3+F,QAErC8+F,gBACF,OAAOnxI,OAAOma,QAAQsmB,OAAOuwG,UAAUG,WAErCC,eACF,OAAOpxI,OAAOma,QAAQsmB,OAAOuwG,UAAUI,UAErCgmL,uBACF,OAAOtjU,OAAOW,OAAOqpE,aAAa3jD,QAAQmxB,mBACvCt3C,QAAOiV,GAAK7X,KAAK8mQ,aAAavzP,SAASsE,EAAE7J,MACzC1K,KAAIuU,GAAKA,EAAE+2B,SACXhsC,QAAOiV,GAAKA,KAIbouT,sBACF,MAAMuqB,EAAc9tV,OAAOW,OAAOqpE,aAAa3jD,QAAQmxB,mBACpDt3C,QAAOiV,GAAK7X,KAAK8mQ,aAAavzP,SAASsE,EAAE7J,MACzCwrG,SAAQ3hG,GAAKA,EAAEg3B,QACf22D,MAAK,CAAC/7F,EAAGC,KACR,MAAM+mV,EAAS38C,IACb,MAAM5iS,EAAQ4iS,EAAI9hS,MAAM,KAClB68B,EAAQ39B,EAAM,GACdw4K,EAAM,CACV9xI,SAAS/I,EAAMd,UAAU,EAAG,GAAI,IAAM,IACtC6J,SAAS/I,EAAMd,UAAU,EAAG,GAAI,IAAM,IACtC6J,SAAS/I,EAAMd,UAAU,GAAI,IAAM,KAE/BjtC,EAAMD,KAAKC,OAAO4oL,GAAMthL,EAAMvH,KAAKuH,OAAOshL,GAChD,GAAIthL,EAAMtH,EAAM,GAAK,OAAOsH,EAC5B,IAAIsoV,EAIJ,OAHoBA,EAAhBhnK,EAAI,KAAOthL,GAAeshL,EAAI,GAAKA,EAAI,KAAOthL,EAAMtH,GAC/C4oL,EAAI,KAAOthL,EAAc,GAAKshL,EAAI,GAAKA,EAAI,KAAOthL,EAAMtH,GACnD,GAAK4oL,EAAI,GAAKA,EAAI,KAAOthL,EAAMtH,GACtC,GAAM4vV,EAAS,GAAK,GAE7B,OAAOD,EAAOhnV,GAAKgnV,EAAO/mV,MAE3B9G,QAAOyI,GAAKA,IAKTslV,EAAWH,EAAY5tV,QAAOyI,GAAqB,MAAhBA,EAAEwjD,OAAO,KAC5C+hS,EAAWJ,EAAY5tV,QAAOyI,GAAqB,MAAhBA,EAAEwjD,OAAO,KAC5CgiS,EAASF,EAASptV,OAASqtV,EAASrtV,OAASotV,EAAWC,EACxDE,EAAUH,EAASptV,OAASqtV,EAASrtV,OAASqtV,EAAWD,EACzDI,EAAW,GACjB,IAAK,IAAIhpV,EAAQ,EAAGA,EAAQ8oV,EAAOttV,OAAQwE,IACrCA,EAAQ+oV,EAAQvtV,OAAQwtV,EAASvuV,KAAK,CAACquV,EAAO9oV,GAAQ+oV,EAAQ/oV,KAC7DgpV,EAASvuV,KAAK,CAACquV,EAAO9oV,KAG7B,OAAOgpV,GAELr6M,qBACF,OAAOh0I,OAAOW,OAAOqpE,aAAa3jD,QAAQymB,gBACvClsC,KAAI6yC,GAAQg+M,IAAmBh+M,EAAKnoC,MACpCpL,QAAOuzC,GAAQA,EAAKhL,eACpB7nC,KAAI6yC,GAAQA,EAAKnoC,MAElB+pP,uBACF,OAAOr1P,OAAOW,OAAOqpE,aAAa3jD,QAAQmxB,mBACvCt3C,QAAOiV,GAAKA,EAAEg4B,cACdvsC,KAAIuU,GAAKA,EAAE+2B,SACXisO,QAGDptK,uBACF,OAAOp5C,iBAAiB44C,kBAAoBr+F,OAAO+zC,QAAQoJ,qBAIzD4oM,gBACF,OAAQ/lP,OAAOysF,QAAQ4tD,SACrB,KAAKjhI,iBAAiBC,KACpB,OAAQsgF,MAAM5/F,UAAUw+H,SAC1B,KAAKn/G,iBAAiBE,MACpB,OAAO,EACT,KAAKF,iBAAiBG,KACpB,OAAO,EACT,QACE,MAAM,IAAI7a,MAAM,mCAGtBinP,eAAep+M,GACb,MAAc,WAATA,GAAmC,YAAdn2C,KAAKm2C,MAAwBg+M,IAAmBnrO,OAAOorO,aAAa1pP,IACvFypP,IAAmBh+M,GAAMi+M,aAAa3sH,OAD6DznI,KAAK20P,UAAY,UAAY,WAGzIF,eAAe13M,EAAU5G,GACvB,MAAM66S,EAAc/8F,UAAUl3M,GACxBk0S,EAAuD,UAA7C98F,IAAmBh+M,GAAMi+M,aAAaC,GAChD68F,EAAY,GAAED,EAAU,QAAU,SAASriV,OAAOysF,QAAQstD,mBAAqB,eAAiB,UACtG,OAAOqoM,EAAYE,IAErB74F,cAAc84F,GAGZ,MAA4B,OAAhB,OAARA,QAAQ,IAARA,OAAA,EAAAA,EAAUtiS,OAAO,IACZ,CACL44E,OAAQ0pN,EACR98F,GAAIr0P,KAAK20P,UAAY,QAAU,SAG5B,CACLltH,OAAQ0pN,EAASpjT,UAAU,GAC3BsmN,GAA2B,MAAvB88F,EAAStiS,OAAO,GAAa,QAAU,UAI/C0kM,aAAa5f,GACX,MAAMy8G,GAAkBpwV,KAAK20P,UAC7B,OAAIhhB,EAAmBy8G,EAAiB,QAAU,QAC3CA,EAAiB,QAAU,SAOhC14F,mBAEF,MAAMv7N,EAAI,CAAC,IAAK,IAAK,GAAI,EAAG,IAAK,KAC3B1J,EAAI,CAAC,IAAK,IAAK,IAAK,IAAK,GAAI,KAC7B/oB,EAAI,CAAC,GAAI,GAAI,GAAI,IAAK,IAAK,IAG3BiyO,EAAQl7O,KAAKC,MAAQ,IACrBc,EAAIX,KAAKuM,MAAMuuO,EAAQ,KACvBvgN,EAAIugN,EAAQ,IAAOn6O,EAEzB,MAAQ,OAAM26B,EAAE36B,IAAM,EAAI45B,GAAKe,EAAE36B,EAAI,GAAK45B,aACtC3I,EAAEjxB,IAAM,EAAI45B,GAAK3I,EAAEjxB,EAAI,GAAK45B,aAC5B1xB,EAAElI,IAAM,EAAI45B,GAAK1xB,EAAElI,EAAI,GAAK45B,MAG9B0rO,mBACF,OAAI7yM,aAAaq5C,gBAAkB,EAAU5qG,OAAOC,KAAK+pE,aAAa3jD,QAAQmxB,mBACvE,IAAI,IAAI3sC,IAAIqB,OAAOma,QAAQsmB,OAAOuwG,UAAUE,eAAej5E,OAAOxS,iBAAiB6zG,sBAExFwnD,iBACF,OAAOhtN,OAAOC,KAAK+pE,aAAa3jD,QAAQmxB,mBAAmBt3C,QAAOiQ,IAAQ7S,KAAK8mQ,aAAavzP,SAASV,MAIvGk4S,YAAY,MACV,MAAMr7F,EAAa1vN,KAAK0vN,WAClB0hI,EAAQ,UAAGjkP,IAAuBC,uBAA1B,aAAG,EAAwCp/F,GAEzD,IAAIkmE,EACJ,GAAIk9Q,GAAY1hI,EAAWn8M,SAAS69U,GAClCl9Q,EAAWk9Q,MACN,IAAKA,KAAY1hI,EAAWnsN,OAAS,GAI1C,OAFA2wE,EAAWw7I,EAAW7uN,KAAKuM,MAAMvM,KAAKwM,SAAWqiN,EAAWnsN,SAK9DqL,OAAOma,QAAQsmB,OAAOuwG,UAAUE,eAAet9I,KAAK0xE,GACpD,MAAMyuB,EAAQj2B,aAAa3jD,QAAQmxB,kBAAkBg6B,GACrDjxE,OAAOiqG,OAAO1V,KAAM,0BAAyBmL,EAAMpzF,iCAAkC,KACrF49F,IAAuBC,gBAAkB,KACzCptG,KAAKqtG,qBAEPA,oBACExb,gBAAgBgd,iBAAiB9c,eACjCF,gBAAgBgd,iBAAiB7c,aACjCpjF,OAAOma,QAAQsmB,OAAOuwG,UAAUC,kBAAmB,GAMrD6oD,wBACE,MAAM9gJ,EAAYh5C,OAAOma,QAAQsmB,OAAO4R,OAAO4lB,OAAOj4D,OAAOma,QAAQsmB,OAAOgX,WACtEgrS,EAAalkP,IAAuB64N,iBAAiBnrD,OACrDy2E,EAAYnkP,IAAuB64N,iBAAiBnrD,OAC1D,IAAK,MAAM5nN,KAASrL,EACbypS,EAAW99U,SAAS0/C,EAAMrkB,UAASqkB,EAAMrkB,YAASrsC,GAClD+uV,EAAU/9U,SAAS0/C,EAAMpkB,SAAQokB,EAAMpkB,WAAQtsC,GAC/C4qG,IAAuBupC,eAAenjI,SAAS0/C,EAAMizI,YAAWjzI,EAAMizI,cAAW3jM,GAExF,MAAMq9I,EAAYhxI,OAAOma,QAAQsmB,OAAOuwG,UACxC,IAAK,MAAMp1G,KAAO9nC,OAAOC,KAAKi9I,EAAUG,WAAY,CAClD,MAAMwxM,EAAiB3xM,EAAUG,UAAUv1G,GACtC6mT,EAAW99U,SAASg+U,KAAiB3xM,EAAUG,UAAUv1G,QAAOjoC,GAEvE,IAAK,MAAMioC,KAAO9nC,OAAOC,KAAKi9I,EAAUI,UAAW,CACjD,MAAMwxM,EAAgB5xM,EAAUG,UAAUv1G,GACrC8mT,EAAU/9U,SAASi+U,KAAgB5xM,EAAUI,SAASx1G,QAAOjoC,MC7QxE,MAAMkvV,IACJzvV,YAAYgM,EAAIioC,GACdj2C,KAAKuuH,IAAMvgH,EACXhO,KAAK0xV,aAAez7S,EAAM07S,YAG5B9oT,YAAYC,GACV,IAAIV,EAAcsd,IAAuB1lD,KAAKuuH,UACpBhsH,IAAtBvC,KAAK0xV,eACPtpT,EAAcpoC,KAAK0xV,aAAatpT,IAElCU,EAAQV,IAIL,MAAMoxB,IAAc,CACzBspK,cAAe,IAAI2uH,IAAiB,gBAAiB,CACnDE,YAAa7pV,GAASjH,KAAKuH,IAAI,EAAGN,KAEpCo3D,OAAQ,IAAIuyR,IAAiB,aAAc,CACzCE,YAAa7pV,GAASkB,QAAQZ,IAAI,EAAGN,KAEvCu/C,OAAQ,IAAIoqS,IAAiB,SAAU,CACrCE,YAAa7pV,GAASkB,QAAQZ,IAAI,EAAGN,MAUlC,SAAS8nJ,IAA+BgiM,GAC7C,OAAOC,IAAeD,GAAW9pV,MAQ5B,SAAS49C,IAAuBksS,GACrC,OAAOlzQ,UAAUniC,aAAaz0C,MAAM8pV,GAS/B,SAASn4R,IAAwBm4R,GACtC,OAAOjoN,aAAaioN,GAAW3zS,WAAWyH,IAAuBksS,IAQ5D,SAASE,IAAqBF,GACnC,IAAK3nN,kBAAkB12H,SAASq+U,GAC9B,MAAM,IAAItkV,MAAO,mCAAkCskV,OAErD,OAAOhjV,OAAOma,QAAQsmB,OAAO4R,OAC1Br+C,QAAOqwD,GAA2E,KAAhE,GAAK02E,aAAaioN,GAAWn1S,aAAgBwW,EAAM1oB,WACrE3nC,QAAOqwD,GAAS03E,eAAep3H,SAAS0/C,EAAM9c,QAAUwzF,aAAaioN,GAAWl1S,cAChFp5C,KAAI2vD,GAAS8pM,IAAgC60F,EAAW3+R,KAI7D,SAAS4+R,IAAeD,GACtB,OAAOjoN,aAAaioN,GAAW10S,QAAQ40S,IAAqBF,IAMvD,SAASh0J,IAAkBg0J,GAChC,IAAIz7S,EAAO,GACP7O,EAAS,GACb,IAAK,IAAI9lC,EAAI,EAAGA,EAAI4mB,YAAY7kB,OAAQ/B,IACtC,GAAIowV,EAAU7jT,UAAU,EAAG3lB,YAAY5mB,GAAG+B,UAAY6kB,YAAY5mB,GAAI,CACpE20C,EAAO/tB,YAAY5mB,GACnB8lC,EAASsqT,EAAU7jT,UAAU3lB,YAAY5mB,GAAG+B,QAC5C,MAGJ,MAAO,CAAC4yC,EAAM7O,GAMT,SAASysN,IAAgC/pH,EAASltF,EAAOi1S,EAAc57S,GAG5E,MAAM4G,EAAYlL,GAAAA,UAA2B,cAATsE,EAAwBtE,GAAAA,cAAsBkgT,EAClF,OAAO5oR,2BAA2B6gE,GAC/B1mI,KAAIgkC,IAAU,CACbt5B,GAAIs5B,EAAOt5B,GACXlG,MAAOw/B,EAAOA,OAAOwV,EAAOC,OAK3B,SAASggN,IAAgC7yH,EAAYj3E,GAC1D,MAAM++R,EAAcroN,aAAaO,GACjC,GAA0D,KAArDj3E,EAAM1oB,QAAW,GAAKynT,EAAYv1S,cAGvC,OAAOu1S,EAAY1qT,OAAO2yN,sBAAsBhnM,GAAQphB,GAAAA,SAAiBA,GAAAA,cAAsBohB,EAAMlW,UAIhG,SAAS4K,IAAuBqiF,GACrC,IAAIioN,EAAa,EACbhnT,EAAO++F,EACX,MAAgB,IAAT/+F,EACLgnT,GAAqB,EAAPhnT,EACdA,IAAS,EAEX,OAAOgnT,EAIF,SAASjyF,MACd,IAAIkyF,EAAejoN,kBAChB3mI,KAAIgkC,IAAU,CAAGA,OAAAA,EAAQjkC,OAAQyuV,IAAqBxqT,OACtD1kC,QAAOwyP,GAAMA,EAAG/xP,OAAOE,OAAS,IAChCD,KAAI8xP,IAAM,CACTpnP,GAAIonP,EAAG9tN,OACPx/B,MAAO6hI,aAAayrH,EAAG9tN,QAAQ4V,QAAQk4M,EAAG/xP,YAE9C,MAAM8uV,EAAcD,EAAa5uV,KAAI42B,GAAKA,EAAElsB,KAGtCokV,EAAgB,CAAC,iBAAkB,mBAAoB,YACvDC,EAAqB,CAAC,kBAAmB,oBAAqB,UAC9DC,EAAkB,CAACn2S,GAAcC,SAAUD,GAAcC,SAAUD,GAAcG,iBACvF,IAAK,IAAI96C,EAAI,EAAGA,EAAI4wV,EAAc7uV,OAAQ/B,IACxC,GAAI2wV,EAAY5+U,SAAS6+U,EAAc5wV,KAAO2wV,EAAY5+U,SAAS8+U,EAAmB7wV,IAAK,CACzF,MAAMuvV,EAAWuB,EAAgB9wV,GAAG,CAACkkD,IAAuB0sS,EAAc5wV,IACxEkkD,IAAuB2sS,EAAmB7wV,MACxCwH,QAAQ0O,GAAGq5U,EAAU,IACvBmB,EAAeA,EAAatvV,QAAOs3B,GAAKA,EAAElsB,KAAOqkV,EAAmB7wV,KACpE0wV,EAAatvV,QAAOs3B,GAAKA,EAAElsB,KAAOokV,EAAc5wV,KAAI,GAAGsG,MAAMA,MAAQipV,IAErEmB,EAAeA,EAAatvV,QAAOs3B,GAAKA,EAAElsB,KAAOokV,EAAc5wV,KAC/D0wV,EAAatvV,QAAOs3B,GAAKA,EAAElsB,KAAOqkV,EAAmB7wV,KAAI,GAAGsG,MAAMA,MAAQipV,GAKhF,OAAOmB,ECpJT,MAAMK,IACOC,2CACT,OAAO,IAGTxwV,YAAYi+I,EAAMC,GAChBlgJ,KAAKigJ,KAAOA,EACZjgJ,KAAKkgJ,eAAiBA,EAGxBtV,UACE,MAAM/xG,EAAQD,iBAAiB54B,KAAKigJ,MAEpC,OADAjgJ,KAAKigJ,KAAOpnH,EACG,uBAARA,EAAiC,GAG1CqyC,SACE,GAAIlrE,KAAKkgJ,iBAAmBqyM,IAASC,8BAA+B,CAClE,MAAMC,EAAWzyV,KAAKkgJ,eAEtB,OADAlgJ,KAAKkgJ,eAAiBqyM,IAASC,8BACxBC,EAET,IAAItgU,EAAI,EAAGQ,EAAI,EAAG9a,EAAI,EACtB,GACEsa,EAAqB,EAAjBnyB,KAAK4qI,UAAgB,EACzBj4G,EAAqB,EAAjB3yB,KAAK4qI,UAAgB,EACzB/yH,EAAIsa,EAAIA,EAAIQ,EAAIA,QACT9a,GAAK,GAAW,IAANA,GAGnB,OAFAA,EAAIhX,KAAKmyB,MAAM,EAAInyB,KAAKkK,IAAI8M,GAAKA,GACjC7X,KAAKkgJ,eAAiBvtH,EAAI9a,EACnBsa,EAAIta,EAOb09J,WAAa,MAAM,IAAIt8J,oBAKnBy5U,aAAW,MAAM,IAAIz5U,qBAGpB,MAAM20I,IAAiB,CAK5BwnB,iBAAkB,EAElBu9K,SAAUlyV,KAAKC,MAAQG,KAAKgd,IAAI,EAAG,IACnC+0U,mBAAoB,KAEpBz9K,aAAc,cAAco9K,IAC1BvwV,cAAgBkX,MAAMtK,OAAOma,QAAQk3H,KAAMrxI,OAAOma,QAAQm3H,gBAC1Dq1B,WACE3mK,OAAOma,QAAQk3H,KAAOjgJ,KAAKigJ,KAC3BrxI,OAAOma,QAAQm3H,eAAiBlgJ,KAAKkgJ,eAEnCwyM,aAAW,OAAO,IAGxBG,aAAc,cAAcN,IAC1BvwV,cAAgBkX,MAAM00I,IAAe+kM,SAAU/kM,IAAeglM,oBAC9Dr9K,WACE3nB,IAAe+kM,SAAW3yV,KAAKigJ,KAC/B2N,IAAeglM,mBAAqB5yV,KAAKkgJ,eAEvCwyM,aAAW,OAAO,IAGxBI,cAAe,cAAcP,IAC3BvwV,cAAgBkX,MAAMtK,OAAOma,QAAQo3H,UAAWvxI,OAAOma,QAAQq3H,qBAC/Dm1B,WACE3mK,OAAOma,QAAQo3H,UAAYngJ,KAAKigJ,KAChCrxI,OAAOma,QAAQq3H,oBAAsBpgJ,KAAKkgJ,eAExCwyM,aAAW,OAAO,IAIxB/7K,cAAc75H,GACZ,MAAMi2S,EAAkB,IACxB,MAAO,CACL/kV,QAAIzL,EACJgK,IAAK,KACL4pC,KAAM,QAEN4G,SAAUg2S,EACVj2S,MAAOA,EAAMkG,YACb8qG,SAAUhxG,EAAMgxG,SAChBvjH,QAASu/F,uBAAuB,CAAC,eAIrC+jB,YAAY/wG,EAAOk2S,EAAOC,EAAS,MACjC,MAAMzoN,EAAMwoN,GAAS,IAAIplM,IAAeunB,aAClCp4H,EAAW/8C,KAAKi1K,eAAezqC,GAC/Br0F,EAAO88S,GAAUjzV,KAAKs1K,WAAW9qC,GACvC,IAAIynN,EAAajyV,KAAKkzV,sBAAsB/8S,EAAM4G,EAAUD,EAAMkG,YAAawnF,GAClE,YAATr0F,GAAsB87S,EAAa,IAAGA,EAAa,GACvD,MAAMv0J,EAAgB19L,KAAKmzV,gBAAgBh9S,EAAM87S,EAAYznN,GAE7D,YADcjoI,IAAVywV,GAAqBxoN,EAAI+qC,WACtB,CACLvnK,QAAIzL,EACJgK,IAAK,KACL4pC,KAAAA,EACA4G,SAAAA,EACAD,MAAOA,EAAMkG,YACb8qG,SAAUhxG,EAAMgxG,SAChBvjH,QAASmzJ,IAIbggE,aAAa5gN,GACX,MAAMpyC,EAAMi/P,iBAAiB,KACvBp/N,EAAUvqC,KAAKozV,uBAAuBt2S,GACtC4gJ,EAAgB5zD,uBAAuBv/F,GAC7C,MAAO,CACLv8B,QAAIzL,EACJgK,IAAK,KACL4pC,KAAM,UACN4G,SAAUryC,EACVoyC,MAAAA,EACAgxG,SAAUhxG,EACVvS,QAASmzJ,IAIbiyJ,cACE,MAAMjlV,EAAMi/P,iBAAiB,KACvBjsE,EAAgB5zD,uBACpBG,kBAAkBrnI,QAAO0kC,GAAUA,EAAOx0B,MAAM,cAElD,IAAI2tS,EAAgB,KAEpB,OADG/9O,GAAkB,IAAI52B,WAAU20Q,EAAgB,KAC5C,CACLzyS,QAAIzL,EACJgK,IAAK,KACL4pC,KAAM,SACN4G,SAAUryC,EACVoyC,MAAO2jQ,EACP3yJ,SAAU2yJ,EACVl2Q,QAASmzJ,IAMbo6H,YAAY3hR,GACV,MAAM4zF,EAAaJ,aAAat9E,IAAIzpD,QAAOs3B,GAAKA,EAAElsB,GAAG+8G,WAAW50E,KAChE4zF,EAAWvnI,KAAKmnI,aAAatsF,WAC7B,IAAI2sF,EAAU,EACd,IAAK,MAAM1iG,KAAUyiG,EAAYC,GAAW,GAAK1iG,EAAOmV,aACxD,MAAMk3B,EAAa9yE,KAAKuH,IAAIwG,OAAO+zC,QAAQuF,YAAYyrB,WAAY,KACnE,MAAO,CACL3lE,QAAIzL,EACJgK,IAAK,KACL4pC,KAAAA,EACA4G,SAAU,IACVD,MAAO62B,EACPm6E,SAAUn6E,EACVppC,QAASy/F,IAIb4sC,eAAezlI,GAEb,MAAMzmC,EAAMi/P,iBAAiBx4N,EAAe/8B,QAAU,KAChDm2B,EAAU0/F,kBAAkBrnI,QAAO0kC,GAAUA,EAAOx0B,MAAM,gBAC1D4qL,EAAgB5zD,uBAAuBv/F,GAC7C,MAAO,CACLv8B,QAAIzL,EACJgK,IAAK,KACL4pC,KAAM,YACN4G,SAAUryC,EACVoyC,MAAO,EACPgxG,SAAU,EACVvjH,QAASmzJ,IAIbl/G,aACE,MAAMgsD,EAAM,IAAIojB,IAAeklM,cACzB7/R,EACJjzD,KAAK6tJ,YAAY,CAAE7qG,YAAaniD,KAAKuM,MAA8C,GAAxCwB,OAAO+zC,QAAQuF,YAAYyrB,YAAmBm6E,SAAU,GAAKtjB,GAI1G,OAHAA,EAAI+qC,WACJtiH,EAAMizI,SAAW,QACjBjzI,EAAMuzQ,cAAgB,QACfvzQ,GAITu5R,SACE,OAAOxsV,KAAKqzV,MAAQ,GAGlBA,YACF,OAAOzkV,OAAOma,QAAQsmB,OAAO4R,OAC1B4lB,OAAOj4D,OAAOma,QAAQsmB,OAAOgX,WAC7B55C,QAAO,CAACrE,EAAK6qD,IAAUpyD,KAAKuH,IAAIA,EAAK6qD,EAAMjlD,KAAK,IAGjDslV,yBACF,OAAOvqT,QAAQ3gC,IAAI,EAAG0wC,eAAe,MAGvCm8H,eAAezqC,GAGb,MAAM+oN,EAAc5zS,GAAGC,QAAQijC,uBAAuBl6C,gBAAgB,GACtE,IAAI6qT,EAAgB,IAAMD,EAM1B,GALI3kV,OAAOorD,QAAQE,oBAAoBC,gBACrCq5R,EAAgB3yV,KAAKgd,IAAI21U,EAAcz8R,GAAoBW,WAAWC,OAAO/oD,OAAOorD,QAAQC,WAAW,KACvGu5R,GAAkBz8R,GAAoBW,WAAWC,OAAO/oD,OAAOorD,QAAQC,WAAW,IAClFu5R,EAAgB3yV,KAAKqzB,KAAmB,IAAds/T,GAAmB,KAE3C7zS,GAAGC,QAAQshC,qCAAqCx4C,cAAgBwG,eAAe,IAAIpD,SAAU,OAAO69N,iBAAiB6pF,GACzH,IAAIr+U,EAASy4I,IAAe6lM,kBAAkBjpN,GAAOojB,IAAe0lM,mBACpE,MAAMI,EAAmB/zS,GAAGC,QAAQmhC,8CAA8Cr4C,aAAe,EAAI8hG,EAAII,UACnG+oN,EAAkBD,EAAmBv0S,QAAQgiC,eACjDp4C,QAAQvlC,IAAIw1C,YAAY,KAAM4kB,eAAe90C,SAK/C,OAHA3T,GAAUw+U,EAAkB,GAE5Bx+U,EAAStU,KAAKqzB,KAAc,IAAT/e,GAAgB,IAC5BtU,KAAKC,IAAIqU,EAAQw0P,iBAAiB,OAI3CupF,sBAAsB/8S,EAAM4G,EAAUD,EAAO0tF,GAI1C,MAAMopN,EAAUppN,EAAII,UACfipN,EAAUrpN,EAAII,UACpB,GAAa,YAATz0F,IAAuBwJ,GAAGC,QAAQohC,iBAAiBt4C,cAAgBwG,eAAe,IAAIpD,UAAW,OAAO,EAC5G,GAAIoD,eAAe,IAAIpD,SAAU,OAAO,EACxC,MAAM0lS,EAAc7xR,GAAGC,QAAQohC,iBAAiBt4C,cAAgBwG,eAAe,IAAIpD,SAAW,EAAI,EAClG,IAAI2oB,EAAM5zD,KAAKC,IACb0wU,EACA3wU,KAAKuM,MAAuE,IAAjEvM,KAAKgd,IAAI+1U,EAAS,EAAK/yV,KAAKgd,IAAIi/B,EAAQC,EAAU,IAAQ,KAAa,IAOpF,OAHIjE,eAAe,IAAIhN,UAAY+nT,EAAU9qT,QAAQ3gC,IAAI,EAAG0wC,eAAe,OACzE2b,EAAM5zD,KAAKC,IAAI2zD,EAAM,EAAG+8Q,IAEnB7xR,GAAGC,QAAQohC,iBAAiBt4C,aAAe7nC,KAAKuH,IAAIqsD,EAAK,GAAKA,GAIvE2+R,uBAAuBt2S,GACrB,MAAMg3S,EAAkBpqN,kCAAkC9mI,QAAOk7L,GAAMA,GAAMhhJ,IAAOv5C,OAC9EwwV,EAAuBpqN,aAAat9E,IACvCzpD,QAAO2iE,GAAOA,EAAI52B,WAAWp7B,SAAS,aACtCiyF,MAAK,CAAC/7F,EAAGC,IAAMD,EAAEgzC,aAAe/yC,EAAE+yC,eAClCn5C,KAAIiiE,GAAOA,EAAIv3D,KAClB,OAAO+lV,EAAqBpoV,MAAM,EAAGmoV,IAGvCX,gBAAgBh9S,EAAMtqC,EAAO2+H,GAC3B,MAAM0nN,EAAe3nN,WAAWp0F,GAAM5L,QAAQp+B,aAAYyB,GAAKA,EAAE6uC,eAAc,IAAM+tF,EAAII,YAGzF,GADAjjI,MAAMU,MAAM,EAAG,EAAIkiI,WAAWp0F,GAAM5L,QAAQhnC,QAAQkR,SAAQ,IAAM+1H,EAAII,YACzD,YAATz0F,EAAoB,CAEtB,MAAM69S,EAAa9B,EAAa,IAAMA,EAAa,IAAM,GAAK,GAC9DA,EAAa8B,IAAe,EAG9B,IAAK,MAAMxyV,IAAK,CAAC,EAAG,GAAI,IAClBA,KAAK0wV,IACPA,EAAa1wV,GAAK,GAItB,MAAM+oC,EAAU7nC,OAAOC,KAAKuvV,GAAc1sP,MAAK,CAAC/7F,EAAGC,IAAMwoV,EAAaxoV,GAAKwoV,EAAazoV,KAAIkC,MAAM,EAAGE,GACrG,OAAO0+B,EAAQjnC,IAAIiG,QAAQsE,aAG7BynK,WAAW9qC,EAAKypN,EAAa,IAC3B,MAAMz5K,EAAc7vC,eAAe/nI,QAAOgL,GAAMqhC,cAAclmB,QAAQoiB,YAAc+D,eAAe,IAAIpD,UAAmB,YAANl+B,IAC9GsmV,EAAqB15K,EAAYl3K,KAAIsK,GAAKqmV,EAAWtnV,YAAWuH,GAAKA,IAAMtG,MAAIxF,MAC/EqiI,EAAoC,IAAtBwpN,EAAW1wV,OAC3B,GAAKi3K,EAAY53K,QAAOgL,GAAKqmV,EAAWtnV,YAAWuH,GAAKA,IAAMtG,MAAOsmV,IACzE,OAAO3pN,WAAWl9H,OAAOm9H,EAAKC,IAahC4qC,cAAcv4H,EAAO0tF,EAAK2pN,GAGxB,MAAMC,EAAWvzV,KAAKuM,OAAO+mV,EAAe,GAAK,GAC3CE,GAAcF,EAAe,GAAK,EAIlCG,EAAW1lV,OAAOma,QAAQ60H,YAC1B22M,EAAWl9T,iBAAiB,GAAI,GAAKi9T,EAAW,GAAKF,EAAWE,EAAW,MAI3EE,EAAgB7sV,MAAMmE,OAAO,EAAG,GACtC,IAAK,IAAItK,EAAI,EAAGA,EAAI6yV,EAAY7yV,IAC9B,IAAK,IAAI20C,EAAO,EAAGA,EAAO,EAAGA,IACvBA,IAASo+S,EAAS/yV,IAAIgzV,EAAcr+S,KAO5C,MAAMs+S,EAAiB,GACjBC,EAAU,CAAC,GAAI,GAAI,EAAG,EAAG,GACzBC,EAAmBhtV,MAAMU,MAAM,EAAG,GACxCssV,EAAiBppV,OAAOgpV,EAASF,GAAa,GAC9C,IAAK,IAAI7yV,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAM20C,EAAOw+S,EAAiBnzV,GACxBozV,EAAav9T,iBAAiB,EAAG,EAAI8e,GAAQ,EAAIm+S,EAAW,GAAKF,EAAWE,EAAW,IAC7FG,EAAejyV,KAAKkyV,EAAQv+S,GAAQy+S,EAAWJ,EAAcr+S,KAQ/D,MAAM9G,EAAS,GACf,IAAK,IAAI7tC,EAAI,EAAGA,EAAI,IAAKA,EAAG,CAC1B,MAAMg1K,EAAW5oB,IAAeC,YAAY/wG,EAAO0tF,EAAKliH,kBAAkBqsU,EAAiBnzV,KACrFqzV,GAAWP,EAAWH,EAAe3yV,GAAK,IAAM,EACjD,GAAKizV,EAAejzV,GACrBg1K,EAASjsI,QAAW,GAAKkqT,EAAejzV,GACtCgwU,EAAa14R,eAAe,IAAIhN,SAAW,EAAI,EACrD,GAAI6b,uBAAuBktS,GAAWrjB,EAAY,CAGhD,MAAMsjB,EAAa3rR,2BAA2BqtG,EAASjsI,SACpD3nC,QAAO2iE,GAAOA,EAAI7oB,cAClBp5C,KAAIiiE,GAAOA,EAAI9oB,eACf75C,QAAO2iE,IAAQ,CAAC,EAAG,GAAI,IAAIhyD,SAASgyD,KACjCwvR,EAAWD,EAAWj0V,KAAK+K,IAAI0oV,EAAWH,GAAgBW,EAAWvxV,QAC3EizK,EAASjsI,QAAUsqT,IAAY,GAAKE,QAEpCv+K,EAASjsI,QAAUsqT,EAIrB,MAAMG,EAAY,CAAEvsU,MAAO,GAAIC,SAAU,GAAIE,KAAM,QAClBrmB,IAA7ByyV,EAAUx+K,EAASrgI,QACrBqgI,EAASjsI,SAAW,GAAKyqT,EAAUx+K,EAASrgI,OAG9C9G,EAAO7sC,KAAKg0K,GAGd,OAAOnnI,GAGTspI,OAAOs8K,GACL,OAAOA,EAAO,IAAIrnM,IAAeilM,aAAiB,IAAIjlM,IAAeunB,cASvEs+K,kBAAkBjpN,GAKhB,MAAM58H,EAAI/M,KAAKmyB,KAAKnyB,KAAK+K,IAAI4+H,EAAIt/D,SAAU,GAAK,GAChD,OAA4Bt9D,GAAK,iBAAoBA,GAAK,kBAAyB,iBAALA,IAAtE,eAGVizB,KAAKoyB,GACH,OAAOA,EAAQgkF,GAAU,GAAIhkF,GAASA,IChZ7BzR,IAAwB,CAM/BC,6BACF,OAAG9B,GAAGC,QAAQiC,qBAAqB1W,WAAmB9vB,EAAAA,KAC/CA,EAAAA,MAGL00I,wBAIF,OAAOznI,kBAAkB7b,QACvB,CAACyoV,EAAK/+S,IAAS++S,EAAMlsV,QAAQoL,MAAMxF,OAAOma,QAAQsmB,OAAOkS,IAAIpL,GAAM1tC,SAAS,KAAK,IAEjFqvF,mBACF,OAAOh/C,eAAe,IAAIhN,UAExBq/N,iBACF,OAAOxrN,GAAGC,QAAQiU,mBAAmBnrB,cAAgBkuE,mBAAmB20J,UAAYvgP,kBAAkBC,WAExGkqU,wBAAwBliS,GACtB,OAAQA,EAAM9c,MACZ,IAAK,YAEH,OADA57B,MAAMwvT,gBAAgBvvT,QACf,EACT,IAAK,SAEH,OADAwmC,OAAOgpR,oBAAoB/2Q,IACpB,EACT,IAAK,UAEH,OADAjS,OAAOgpR,oBAAoB/2Q,IACpB,EAEX,OAAO,GAGT2iH,YAAY3iH,EAAOM,GAAQ,GACrBvzD,KAAKm1V,wBAAwBliS,KAC5BjzD,KAAK83F,aACD93F,KAAKmrQ,WAAYnrQ,KAAKo1V,mBAAmBniS,EAAOM,GACpDvzD,KAAKozQ,eAAengN,EAAOM,GAFRvzD,KAAKkgT,YAAYjtP,EAAOM,KAIlD2sP,YAAYjtP,EAAOM,GACbA,IAAU3kD,OAAOysF,QAAQouD,cAAcroG,eAAgBJ,OAAOgpR,oBAAoB/2Q,GACjF14C,MAAMipU,YAAYhpU,KAAK,CAAEjO,IAAK0mD,EAAM1mD,OAE3CwtK,mBAAmB9mH,GACjB,IAAKjzD,KAAK83F,cAAgBjmD,MAAMC,SAAU,OAAOz2B,EAAAA,GACjD,GAAmB,YAAf43C,EAAM9c,KAAoB,OAAO,IAAIntC,QAAQ,IAAOiqD,EAAMnW,MAAQ9D,YAAY,KAAKrQ,gBAAgB,IACvG,MAAM0sT,EAAersV,QAAQ6U,IAAI7U,QAAQR,SAASyqD,EAAMnW,MAAO,KAAO1zC,IAAI,IAAK,KACzEksV,EAAgBtsV,QAAQP,SAASwqD,EAAMnW,MAAQ,IAAO,GAAGvmC,IAAI,KAAKnN,IAAI,GACtEqf,EAAQk3B,GAAGC,QAAQshC,qCAAqCv4C,gBAAgB,GAC9E,OAAO3/B,QAAQ6U,IAAIw3U,EAAa/rV,IAAIgsV,GAAehsV,IAAI2pD,EAAMlW,UAC1DzzC,IAAIwwD,OAAOo+G,qBAAqB5uK,IAAI0vC,YAAY,KAAKrQ,gBAAgB,IAAKlgB,IAE/E2qP,eAAengN,EAAOM,GAAQ,GAC5B,GAAI1hB,MAAMC,SAAU,OAEpB,GAAI9xC,KAAKm1V,wBAAwBliS,GAAQ,OACzC,MAAMsiS,EAASv1V,KAAK+5K,mBAAmB9mH,GACjCuiS,GAAmBjiS,GAAS3kD,OAAOysF,QAAQouD,cAAcroG,eAC3Do0S,EACFj7U,MAAM6mC,eAAe5mC,KAAK,CAAEjO,IAAK0mD,EAAM1mD,IAAKguM,KAAMg7I,KAGhD3mV,OAAOma,QAAQsmB,OAAOkS,IAAI0R,EAAM9c,MAAMjlB,IAAI7V,EAAAA,QAC5CzM,OAAOma,QAAQsmB,OAAOkS,IAAI0R,EAAM9c,MAAQ96B,EAAAA,MAE1CzM,OAAOma,QAAQsmB,OAAOkS,IAAI0R,EAAM9c,MAAQvnC,OAAOma,QAAQsmB,OAAOkS,IAAI0R,EAAM9c,MAAM/sC,IAAImsV,GAAQ/sV,SAAS6S,EAAAA,MACnGqjE,UAAUoxE,uBAAuB9pD,aACjChlD,OAAOgpR,oBAAoB/2Q,GAC3BlxD,SAASe,SAASY,WAAW0B,iBAAkB6tD,KAEjD43Q,qBAAqB53Q,GACnB,MAAM9c,EAAOo0F,WAAWt3E,EAAM9c,MAC9B,OAAOuzB,iBAAiBrd,IAAIlW,EAAKpH,kBAGnC8yD,qBAAqB/kD,GACnB,OAAOj8C,KAAKgd,IAAIi/B,EAAO,GAAK,KAG9B8kD,0BAA2B,IAC3Bw4J,uBAAuBnnM,GACrB,IAAKtT,GAAGC,QAAQiU,mBAAmBnrB,aAAc,OAAO,EACxD,MAAM+sT,EAAgBz1V,KAAK6hG,qBAAqB5uC,EAAMnW,OAChD44S,EAAiBv0S,iBAAiB8R,EAAMlW,UAAY,IAC1D,OAAO/8C,KAAK4hG,0BAA4B6zP,EAAgBC,GAE1D5qB,oBAAoB73Q,GAClB,IAAKtT,GAAGC,QAAQiU,mBAAmBnrB,eAAiBiiG,eAAep3H,SAAS0/C,EAAM9c,MAAO,OAAO,EAChG,MAAMgtB,EAAWnjE,KAAK6qU,qBAAqB53Q,GAC3C,IAAKkQ,EAASh4B,WAAY,OAAO,EACjC,MAAMwqT,EAAmB31V,KAAKo6P,uBAAuBnnM,GACrD,GAAqB,IAAjBkQ,EAAS57B,IAAW,OAAOouT,EAC/B,MAAMC,EAAiB51V,KAAK+qU,kBAAkB93Q,GAASkQ,EAASjxD,OAChE,OAAOrR,KAAK0H,MAAMqtV,EAAgB,EAAGD,IAIvC5qB,kBAAkB93Q,GAChB,MAAMkQ,EAAWnjE,KAAK6qU,qBAAqB53Q,GACrC4iS,EAAa1yR,EAAS57B,IACtBuuT,EAAqB91V,KAAK+jJ,uBAAuB9wF,GACjD8iS,EAAYl1V,KAAK4H,SAASotV,EAAYC,GAC5C,OAAOj1V,KAAK2H,SAASutV,EAAWp2S,GAAG8pB,qBAErCs6E,uBAAuB9wF,GACrB,OAAOjzD,KAAKo6P,uBAAuBnnM,GAASjzD,KAAK4hG,2BAEnDwzP,mBAAmBniS,EAAOM,GACxB,GAAmB,YAAfN,EAAM9c,KAAoB,OAC9B,GAAmB,YAAf8c,EAAM9c,KAAoB,OAC9B,GAAmB,WAAf8c,EAAM9c,KAER,YADA6K,OAAOgpR,oBAAoB/2Q,GAG7B,MAAM+iS,EAAc3iS,gBAAgB2iS,YAAY7qT,WAChD,IAAKwU,GAAGC,QAAQiU,mBAAmBnrB,cACM,IAApC1oC,KAAK8qU,oBAAoB73Q,KAAiB+iS,GAC1CA,GAAetsR,iBAAiBllC,KAAK92B,OAAME,GAAKA,EAAEw3B,KAAKlzB,QAAUytC,GAAG8pB,qBAEvE,YADAzpE,KAAKozQ,eAAengN,EAAOM,GAI7B,IAAK3kD,OAAOysF,QAAQouD,cAAcU,aAAe52F,EAE/C,YADAvzD,KAAKgrU,YAAY/3Q,GAGnB,MAAMkQ,EAAWnjE,KAAK6qU,qBAAqB53Q,GAC3C14C,MAAM4vI,YAAY3vI,KAAK,CACrBjO,IAAK0mD,EAAM1mD,IACX61M,aAAcj/I,EAAS5zD,KACvB2rN,eAAgB/3J,EAASjxD,OACzBqoM,KAAMv6M,KAAK8qU,oBAAoB73Q,GAC/B1rB,IAAK47B,EAAS57B,OAIlByjS,YAAY/3Q,GACV,GAAIphB,MAAMC,SAAU,OACpB,MAAMqxB,EAAWnjE,KAAK6qU,qBAAqB53Q,GAK3C,IAAKkQ,EAASh4B,WAEZ,YADA6V,OAAOgpR,oBAAoB/2Q,GAG7B,MAAMgjS,EAAoBj2V,KAAKo6P,uBAAuBnnM,GAChDijS,EAAiBl2V,KAAK8qU,oBAAoB73Q,GAChDkQ,EAASjxD,QAAUgkV,EACnB,MAAMC,EAAkBF,EAAoB5iS,gBAAgB2iS,YAAY5tT,YACxE,IAAK,MAAMguT,KAAiB7tU,0BAC1B,GAAI6tU,IAAkBnjS,EAAM9c,KAAM,CAChC,MAAM0zF,EAAYU,WAAW6rN,GACvBC,EAAgB3sR,iBAAiBrd,IAAIw9E,EAAU96F,iBAC/CunT,EAAcz1V,KAAKuH,IAAIiuV,EAAc9uT,IAAK8uT,EAAcnkV,QAC9DmkV,EAAcnkV,OAASrR,KAAK2H,SAAS6tV,EAAcnkV,OAASikV,EAAiBG,GAG7EnzR,EAAS4W,iBACX5W,EAAS4gF,uBAAyB/jJ,KAAK+jJ,uBAAuB9wF,IAEhEjS,OAAOgpR,oBAAoB/2Q,KCxKlB2jD,IAAqB,CAC5B0jE,gBACF,OAAO1rK,OAAOma,QAAQsmB,OAAOzsC,OAAO+H,QAElC2vK,cAAUxyK,GACZ8G,OAAOma,QAAQsmB,OAAOzsC,OAAO+H,OAAS7C,GAEpCyjQ,cACF,OAAO38P,OAAOma,QAAQsmB,OAAOzsC,OAAO08I,OAElCisH,YAAQzjQ,GACV8G,OAAOma,QAAQsmB,OAAOzsC,OAAO08I,MAAQx3I,GAEnC4iI,YACF,OAAO97H,OAAOma,QAAQsmB,OAAOzsC,OAAO8nI,OAGtC89H,mBAAmBryN,GACjB,OAAQA,GACN,IAAK,OACL,IAAK,UACH,OAAO,EACT,IAAK,WACH,OAAO,EACT,IAAK,cACH,OAAO,EACT,IAAK,WACH,OAAO,GACT,IAAK,QACH,OAAO,GACT,IAAK,UACH,OAAO,GACT,QACE,MAAM,IAAI7oC,MAAM,mDAMtBwpG,YAAY7jD,GACV,MAAMsjS,EAAUv2V,KAAK0qI,MAAMz3E,EAAM9c,MACjC,GAAI,CAAC,YAAa,WAAW5iC,SAAS0/C,EAAM9c,MAAO,OAAOkO,EAAAA,EAC1D,GAAmB,WAAf4O,EAAM9c,MAAmC,YAAdn2C,KAAKm2C,KAAoB,OAAQkO,EAAAA,EAChE,OAAQrkD,KAAKs6K,WACX,KAAK9vJ,iBAAiBC,iBAGpB,OAAO7b,OAAOma,QAAQsmB,OAAOkS,IAAI0R,EAAM9c,MAAMjlB,IAAI0sC,eAAe3K,EAAM9c,MAAM5O,MACvE8c,EAAAA,EACDz1C,OAAOma,QAAQsmB,OAAOkS,IAAI0R,EAAM9c,MAAMqgT,MAAM9mV,WAClD,KAAK8a,iBAAiBE,aAEpB,OAAOy2B,iBAAiB8R,EAAMlW,UAAY,IAAOosB,2BAA2BlW,EAAM1oB,QAAS,EAAG,GAC3F3nC,QAAO0kC,GAAUA,EAAOoV,cAAan5C,OAC1C,KAAKinB,iBAAiBG,iBACpB,OAAOw2B,iBAAiB8R,EAAMlW,UAChC,KAAKvyB,iBAAiBI,iBAAkB,CAItC,MAAMo2D,EAAmBr5B,uBAAuBsL,EAAM1oB,SACtD,GAAIy2C,EAAmBu1Q,EAAQ92M,YAC7B,OAAOt+F,iBAAiB8R,EAAMlW,UAAY,KAAOw5S,EAAQ92M,YAAcz+D,GAIzE,MAAMy1Q,EAAiB9uS,uBAAuB4uS,EAAQ72M,eAAiB62M,EAAQ72M,cAAgBzsF,EAAM1oB,UACrG,OAAO4W,iBAAiB8R,EAAMlW,UAAY,IAAM05S,EAElD,KAAKjsU,iBAAiBK,aAAc,CAClC,MAAMk/G,EAAa5gE,2BAA2BlW,EAAM1oB,QAAS,EAAG,GAC7D3nC,QAAO0kC,GAAUA,EAAOoV,cACxBp5C,KAAIgkC,GAAUA,EAAOmV,eAClBn0C,EAAStI,KAAKwoQ,mBAAmBv1M,EAAM9c,MAIvCugT,EAAc3sN,EACjBzmI,KAAI42B,GAAMq8T,EAAQ52M,aAAazlH,EAAI5xB,GAAUiuV,EAAQ52M,aAAazlH,EAAI5xB,GAAU,IAChF9E,MACH,OAAO29C,iBAAiB8R,EAAMlW,UAAY25S,EAK5C,KAAKlsU,iBAAiBM,eAAgB,CACpC,MAAMq4C,EAAW9P,gBAAgBJ,EAAM9c,MACjC+/S,EAAiB10S,sBAAsBspR,oBAAoB73Q,GACjE,OAAOkQ,EAASh4B,YAAc+qT,EAAiB,GAC1C/yR,EAASjxD,OACV3I,OAAOotV,kBAEb,KAAKnsU,iBAAiBO,cACpB,OAAOsoC,gBAAgBJ,EAAM9c,MAAMhL,WAC/BqW,sBAAsBspR,oBAAoB73Q,GAC1C1pD,OAAOotV,kBACb,KAAKnsU,iBAAiBosU,IACpB,OAAOrtV,OAAO2O,UAChB,QACE,MAAM,IAAI5K,MAAM,kDAItBupV,eAAe5jS,GAGb,QAA+B1wD,IAA3BvC,KAAK0qI,MAAMz3E,EAAM9c,MAAqB,OAAQ5sC,OAAO2O,UACzD,OAAQlY,KAAKs6K,WACX,KAAK9vJ,iBAAiBE,aACpB,OAAO9b,OAAOma,QAAQsmB,OAAOzsC,OAAO28I,OACtC,KAAK/0H,iBAAiBG,iBACtB,KAAKH,iBAAiBI,iBACpB,OAAO5qB,KAAK0qI,MAAMz3E,EAAM9c,MAAMwhB,OAChC,KAAKntC,iBAAiBK,aACpB,OAAO7qB,KAAK0qI,MAAMz3E,EAAM9c,MAAMqpG,MAChC,KAAKh1H,iBAAiBosU,IACpB,OAAQrtV,OAAO2O,UACjB,KAAKsS,iBAAiBC,iBACtB,KAAKD,iBAAiBM,eACtB,KAAKN,iBAAiBO,cAEpB,OAAOxhB,OAAO2O,UAChB,QACE,MAAM,IAAI5K,MAAM,iDAGtBopK,UAAUzjH,GACR,OAAOjzD,KAAK82G,YAAY7jD,IAAUjzD,KAAK62V,eAAe5jS,IAGxD4jD,KAAKxnE,GAIH,MAAMynT,EAAa7jS,IACjB,MAAMrwD,EAAS5C,KAAK82G,YAAY7jD,GAC1B3kD,EAAYtO,KAAK62V,eAAe5jS,GACtC,OAAO3kD,IAAc/E,OAAO2O,UAAYtV,EAASA,EAAS0L,GAG5D,OAAO+gC,EACJ/rC,KAAImvB,IAAK,CAAGwgC,MAAOxgC,EAAG+sH,MAAOs3M,EAAWrkU,OACxChmB,QAAO,CAACmB,EAAGsG,IAAOtG,EAAE4xI,MAAQtrI,EAAEsrI,MAAQ5xI,EAAIsG,IAC1C++C,OAEL4iH,cAAc5iH,GAEZ,GAAmB,WAAfA,EAAM9c,MAAoC,cAAf8c,EAAM9c,MAAuC,YAAf8c,EAAM9c,KAKnE,OAAQn2C,KAAKurQ,SACX,KAAKvgP,kBAAkBC,UACrBu2B,sBAAsB4xN,eAAengN,GAAO,GAC5C,MACF,KAAKjoC,kBAAkBE,OACrBs2B,sBAAsB4zS,mBAAmBniS,GAAO,GAChD,MACF,KAAKjoC,kBAAkBG,cACoC,IAArDq2B,sBAAsBspR,oBAAoB73Q,GAAczR,sBAAsB4xN,eAAengN,GAAO,GACnGzR,sBAAsB4zS,mBAAmBniS,GAAO,GACrD,MACF,QACE,MAAM,IAAI3lD,MAAM,0CAhBlBk0C,sBAAsB0+P,YAAYjtP,GAAO,IAqB7Cq4M,yBACE,OAAOtrQ,KAAKs6K,YAAc9vJ,iBAAiBK,cACzCnoB,OAAOW,OAAOrD,KAAK0qI,OAAOpnI,KAAI+1B,GAAKA,EAAEsmH,aAAa7+I,QAAOA,MAAQ,GAIrE8oQ,eAAe57P,GACb,OAAQA,GACN,KAAKwc,iBAAiBC,iBACpB,MAAO,+BACT,KAAKD,iBAAiBE,aACpB,MAAO,oBACT,KAAKF,iBAAiBG,iBACpB,MAAO,mBACT,KAAKH,iBAAiBI,iBACpB,MAAO,mBACT,KAAKJ,iBAAiBK,aACpB,MAAO,eACT,KAAKL,iBAAiBM,eACpB,MAAO,0BACT,KAAKN,iBAAiBO,cACpB,MAAO,mBACT,KAAKP,iBAAiBosU,IACpB,MAAO,eACT,QACE,MAAO,8BAGb7pF,cAAc/+P,GACZ,OAAQA,GACN,KAAKgd,kBAAkBC,UACrB,MAAO,mBACT,KAAKD,kBAAkBE,OACrB,MAAO,gBACT,KAAKF,kBAAkBG,cACrB,MAAO,gCACT,QACE,MAAO,8BAKR,SAASs3H,MACd,MAAMs0M,EAAUC,MACV57T,EAAIxtB,GAAK/M,KAAKgd,IAAIhd,KAAK4H,SAAS,EAAG5H,KAAKkK,IAAI,EAAI6C,IAAK,KACrDqpV,EAAcv0V,OAAOW,OAAO0zV,GAASzzV,KAAIuU,GAAKujB,EAAEvjB,EAAE/P,SAAQtE,MAC1D0zV,EAAe1sT,GAAO,IAAMpP,EAAE27T,EAAQvsT,GAAK1iC,OAASmvV,EAMpDE,EAAa,CAAC,KAAM,OAAQ,KAAM,cAClCnzF,EAAU,GAChB,IAAK,MAAMx5N,KAAO2sT,EAChBnzF,EAAQxhQ,KAAK,CACXgoC,IAAAA,EACA4sT,QAASF,EAAa1sT,KAG1B,MAAM6sT,EAAWzpV,GAAKA,EAAI/M,KAAKuM,MAAMQ,GAC/BovK,EAAWgnF,EAAQx+J,MAAK,CAAC/7F,EAAGC,IAAM2tV,EAAS3tV,EAAE0tV,SAAWC,EAAS5tV,EAAE2tV,WAAU9zV,KAAI23B,GAAKA,EAAEuP,MACxF8sT,EAAiB,IAAMtzF,EAAQ1gQ,KAAI23B,GAAKp6B,KAAKuM,MAAM6tB,EAAEm8T,WAAU3qV,QAAO,CAAChD,EAAGC,IAAMD,EAAIC,IAC1F,IAAK,IAAIlI,EAAI,EAAGA,EAAI21V,EAAW5zV,OAAQ/B,IAAK,CAC1C,MAAMgpC,EAAMwyI,EAASx7K,GACrBoN,OAAOC,WAAWia,QAAQg6B,aAAatY,GAAO3pC,KAAKuM,MAAM8pV,EAAa1sT,KAAShpC,EAAI81V,EAAiB,EAAI,IAI5G,SAASN,MAIP,IAAI7lT,EAAiB0nB,OAAOC,YACxBloB,SAASO,eAAerpC,MAAMmP,KAAK8hD,wBACnCnoB,SAASO,eAAerpC,MAC5BqpC,EAAiBnoC,QAAQZ,IAAIwG,OAAO+zC,QAAQsF,YAAYkqC,MAAOhhD,GAC/D,MAAMomT,EAAU,KACVC,EAAS32V,KAAKgd,IAAIhd,KAAKuH,IAAI,EAAG+oC,EAAeuhC,UAAW,IAAO6kR,EAC/DE,EAAU,GAAM/xS,uBAAuB,yBACvCgyS,EAAY,KACZC,EAAW92V,KAAKgd,IAAIhd,KAAKuH,IAAI,EAAGwG,OAAO+zC,QAAQsF,YAAY8nC,cAAc37E,SAAUqjV,GAAWC,EAC9FE,EAAQ,IAAMlyS,uBAAuB,kBACrCmyS,EAAU,KACVC,EAASj3V,KAAKgd,IAAIhd,KAAKuH,IAAI,EAAGwG,OAAO+zC,QAAQsF,YAAY6nC,MAAMpd,UAAWklR,GAASC,EACnFE,EAAWhvT,QAAQ3gC,IAAI,EAAG0wC,eAAe,KAC/C,MAAO,CACLuwB,GAAI,CACF95D,KAAM,KACNzH,MAAO0vV,EACPj7Q,MAAOg7Q,EACPljU,IAAK,IAEPkuH,KAAM,CACJhzI,KAAM,aACNzH,MAAO6vV,EACPp7Q,MAAOm7Q,EACPrjU,IAAKojU,GAEPj1M,GAAI,CACFjzI,KAAM,KACNzH,MAAOgwV,EACPv7Q,MAAOs7Q,EACPxjU,IAAKujU,GAEP3wS,WAAY,CACV13C,KAAM,aACNzH,MAAOiwV,EAEPx7Q,MAAO,IACPloD,IAAK,KAKJ,SAAS+hL,MACd,MAAM2gJ,EAAUC,MACVgB,EAAgBt5Q,UAAUmxE,mBAAmB/nJ,MAS7CmwV,EAAW,EAAI,EAiBfC,EAAW,EACXl0F,EAAUp1P,OAAOC,WAAWia,QAAQg6B,aACpCq1S,EAAe,CAAC19U,EAAQ28D,KAC5B,MAAMnpC,EAAQxzB,EAAO3S,MACfswV,EAAYv3V,KAAKgd,IAAI,EAAIu5D,EAAQ6gR,GACvCx9U,EAAO3S,MAASmmC,EAAQ,EAAIptC,KAAKgd,IAAIowB,EAAQiqT,EAAUE,GAAaF,EAAW,EAC/Ez9U,EAAO8hE,MAAQ17E,KAAKgd,IAAIq6U,EAAUE,EAAY,GAAKv3V,KAAKgd,IAAIpD,EAAO8hE,MAAO67Q,GAC1E39U,EAAO4Z,KAAO+jU,GAEhBD,EAAapB,EAAQ1tR,GAAI26L,EAAQ36L,GAAK,KACtC8uR,EAAapB,EAAQx0M,KAAMyhH,EAAQzhH,KAAO,KAC1C41M,EAAapB,EAAQv0M,GAAIwhH,EAAQxhH,GAAK,KACtC21M,EAAapB,EAAQ9vS,WAAY+8M,EAAQ/8M,WAAa,KACtD,MAAMs8M,EAAc5jN,GAAGC,QAAQqhC,0BAA0Bt4C,gBAAgB,GACzE,IAAI0vT,EAAYtB,EAAQ1tR,GAAGvhE,MAAQivV,EAAQx0M,KAAKz6I,MAAQivV,EAAQv0M,GAAG16I,MAAQivV,EAAQ9vS,WAAWn/C,MAC5FkwV,EAAc/5Q,SAAWslL,EAE3B,MAAMC,EAAoBr/M,qBAAqBklC,4BAA4B1gD,gBAAgB,GAC3F0vT,GAAa70F,EAEb,IAAI80F,EAAcD,EAQlB,MAAME,EAAqB,CAACz7S,EAAO+iI,EAAOj7I,KACxC,GAAIkY,EAAQ+iI,EAAO,OAAO/iI,EAC1B,MAAMvmB,GAAUumB,EAAQ+iI,GAASj7I,EACjC,OAAOi7I,EAAQ,GAAMj7I,GAAQ/jC,KAAKmyB,KAAK,EAAI,EAAIuD,GAAU,IAErDiiU,EAA0B,CAAC17S,EAAO+iI,EAAOj7I,IACzCkY,EAAQ+iI,EAAa/iI,EAClBj8C,KAAKgd,IAAI+mB,EAAM/jC,KAAKuT,MAAM0oC,EAAQ+iI,IAAUA,EAE/C44K,EAA0B,CAAC37S,EAAO+iI,EAAOj7I,IACzCkY,EAAQ+iI,EAAa/iI,EAClBj8C,KAAKgd,IAAI+mB,EAAM/jC,KAAKuT,MAAMvT,KAAKuT,MAAM0oC,EAAQ+iI,KAAWA,EAEjEy4K,EAAcC,EAAmBD,EAAaN,EAAcU,YAAa,KACzEJ,EAAcC,EAAmBD,EAAaN,EAAcW,iBAAkB,KAC9EL,EAAcE,EAAwBF,EAAaN,EAAcY,iBAAkB,GACnFN,EAAcG,EAAwBH,EAAaN,EAAca,iBAAmBl5S,GAAGC,QAAQ4lC,iBAAiBr6C,WAAa,GAAK,IAClI,MAAMs4N,EAAe60F,EAAc,EAAID,EAAYC,EAAc,EAC3DQ,EAAsBd,EAAcpyS,gBAAkBoyS,EAAc/sR,aAY1E,OAXAqtR,EAAcz3V,KAAKC,IAAI,IAASw3V,GAChCD,GAAaS,EACbR,GAAeQ,EACX9/S,YAAY,KAAK7N,aACnBmtT,GAAe,QAEb1pV,OAAOorD,QAAQE,oBAAoBC,gBACrCm+R,EAAcz3V,KAAKgd,IAAIy6U,EAAYvhS,GAAoBW,WAAW5a,MAAMluC,OAAOorD,QAAQC,WAAW,KAClGq+R,GAAgBvhS,GAAoBW,WAAW5a,MAAMluC,OAAOorD,QAAQC,WAAW,IAC/Eq+R,EAAcz3V,KAAKqzB,KAAKrzB,KAAKuH,IAAI,EAAEkwV,KAE9B,CACLjvR,GAAI0tR,EAAQ1tR,GACZk5E,KAAMw0M,EAAQx0M,KACdC,GAAIu0M,EAAQv0M,GACZ2gH,KAAM4zF,EAAQ9vS,WACdg3B,SAAU+5Q,EAAc/5Q,SACxBwlL,aAAAA,EACAC,UAAWs0F,EAAcpyS,gBACzB+9M,kBAAmBq0F,EAAc/sR,aACjCs4L,YAAAA,EACAC,kBAAAA,EACA11G,SAAUuqM,EACVr1S,YAAaniD,KAAKuH,IAAI,EAAGkwV,IAMtB,SAASzoM,MACd,MAAM5xE,EAAWl1C,QAAQ3gC,IAAI,EAAG4gS,gBAAgBr1N,YAC1C+kR,EAAc13S,OAAOm9M,qBACrBw6F,EAAmB33S,OAAOo9M,0BAC1Bw6F,EAAmB53S,OAAOq9M,0BAC1Bw6F,EAAmB73S,OAAO0tS,0BAC1Bp6E,EAAUtzN,OAAOszN,QACjB1uN,EAAkB,CAACj+C,MAAMU,MAAM,EAAG,GAAGqF,OAAME,GAAKkrC,eAAelrC,GAAG++B,aAAe,KACpFk6B,OAAOl/D,MAAMU,MAAM,EAAG,GAAG/E,KAAIsK,GAAKjG,MAAMU,MAAM,EAAG,GAAGqF,OAAMwG,GAAK4kC,eAAe,EAAIlrC,EAAIsG,GAAG43B,cACzFlpC,QAAOgL,GAAKA,IACZrK,OACG0nE,EAAeliC,QAAQvlC,IAAIw1C,YAAY,KAAMA,YAAY,MAC/D,MAAO,CACLilC,SAAAA,EACAy6Q,YAAAA,EACAC,iBAAAA,EACAC,iBAAAA,EACAC,iBAAAA,EACAvkF,QAAAA,EACA1uN,gBAAAA,EACAqlB,aAAAA,GCxZG,MAAM4uI,IAAiB,CAC5B96G,UAAW,IAAIxtF,SAAS,IAAIvI,QAAQ,IACpCu2G,kBAAmB,IAAIhuG,SAAS,IAAIvI,QAAQ,IAC5CmjC,OAAO4yD,EAAWg6P,GAChB/4V,KAAKu/G,kBAAoBhuG,SAASC,iBAAiButF,GACnD/+F,KAAK++F,UAAYxtF,SAASC,iBAAiBunV,KAIlClxS,IAAO,CAKlBr2C,iBAAiBi/G,GACf,OAAOl/G,SAASC,iBAAiBi/G,MAMnCuoO,eAAeC,EAAU1nO,GACvB17G,MAAMI,WAAWgjV,GACjB1nO,EAAS0nO,EAASjiV,oBAQpBs6H,iBAAiBphB,GACf,OAAO,IAAIzvH,KAAKyvH,GAAWz+G,WAAWrG,QAAQ,gmCAAuB,OAOnE8tV,oBACF,OAAOr/I,IAAe96G,WAMpBA,gBACF,OAAO/+F,KAAKk5V,cAAcpiV,cAMxBklM,kBACF,OAAOh8M,KAAKk5V,cAAcliV,mBAMxBuoG,wBACF,OAAOs6F,IAAet6F,mBAMpB/3C,sBACF,OAAOxnE,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQ6kB,mBAKhDA,oBAAgByxR,GAClBj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQ6kB,gBAAkB1/D,KAMtEggD,yBACF,OAAO9nD,KAAKwR,kBAAiB,KAC3B,IAAIylH,EAAOroH,OAAO+zC,QAAQ6kB,gBAAgBtwD,MAAMtI,OAAO+zC,QAAQm5F,sBAI/D,OAHGjvG,GAAAA,oBACDoqF,EAAOroH,OAAO+zC,QAAQswC,SAASrqE,KAAK1R,MAAMtI,OAAO+zC,QAAQm5F,uBAEpD9yI,QAAQZ,IAAI,EAAG6uH,OAOtB8kB,qBACF,OAAO/7I,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQo5F,kBAKhDA,mBAAek9M,GACjBj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQo5F,eAAiBj0I,KAMrE+iG,qBACF,OAAO7qG,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQkoD,kBAKhDA,mBAAeouP,GACjBj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQkoD,eAAiB/iG,KAMrEk3D,mBACF,OAAOh/D,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQqc,aAAap2C,QAK7Do2C,iBAAai6R,GACfj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQqc,aAAap2C,KAAO9gB,KAMxEo+D,2BACF,OAAOlmE,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQqc,aAAa82B,YAK7D5vB,yBAAqB+yR,GACvBj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQqc,aAAa82B,SAAWhuF,KAM5E2iE,mBACF,OAAOzqE,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQ8nB,aAAa7hD,QAK7D6hD,iBAAawuR,GACfj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQ8nB,aAAa7hD,KAAO9gB,KAMxE2/K,2BACF,OAAOznL,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQ8nB,aAAaqrB,YAK7D2xF,yBAAqBwxK,GACvBj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQ8nB,aAAaqrB,SAAWhuF,KAM5EmxD,mBACF,OAAOj5D,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQsW,aAAarwC,QAK7DqwC,iBAAaggS,GACfj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQsW,aAAarwC,KAAO9gB,KAMxE8oL,2BACF,OAAO5wL,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQsW,aAAa68B,YAK7D86F,yBAAqBqoK,GACvBj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQsW,aAAa68B,SAAWhuF,KAM5E4iE,mBACF,OAAO1qE,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQ+nB,aAAa9hD,QAK7D8hD,iBAAauuR,GACfj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQ+nB,aAAa9hD,KAAO9gB,KAMxEqxV,2BACF,OAAOn5V,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQ+nB,aAAaorB,YAK7DqjQ,yBAAqBF,GACvBj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQ+nB,aAAaorB,SAAWhuF,KAO5EmgD,kBACF,OAAOjoD,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQsF,YAAYr/B,QAK5Dq/B,gBAAYgxS,GACdj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQsF,YAAYr/B,KAAO9gB,KAMvEq0D,0BACF,OAAOn8D,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQsF,YAAY6tC,YAK5D35B,wBAAoB88R,GACtBj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQsF,YAAY6tC,SAAWhuF,KAM3EogD,kBACF,OAAOloD,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQuF,YAAYt/B,QAK5Ds/B,gBAAY+wS,GACdj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQuF,YAAYt/B,KAAO9gB,KAMvEk5L,0BACF,OAAOhhM,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQuF,YAAY4tC,YAK5DkrG,wBAAoBi4J,GACtBj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQuF,YAAY4tC,SAAWhuF,KAM1Eo1I,eACH,OAAOl9I,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQu6F,SAASt0H,QAKzDs0H,aAAS+7M,GACXj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQu6F,SAASt0H,KAAO9gB,KAMpEsxV,uBACF,OAAOp5V,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQu6F,SAASpnD,YAKzDsjQ,qBAAiBH,GACnBj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQu6F,SAASpnD,SAAWhuF,KAMtEmrF,eACF,OAAOjzF,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQswC,SAASrqE,QAKzDqqE,aAASgmQ,GACXj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQswC,SAASrqE,KAAO9gB,KAMtEk3F,uBACF,OAAOh/F,KAAKwR,kBAAiB,IAAM5C,OAAO+zC,QAAQswC,SAAS6C,YAKzDkJ,qBAAiBi6P,GACnBj5V,KAAKg5V,eAAeC,GAAUnxV,GAAS8G,OAAO+zC,QAAQswC,SAAS6C,SAAWhuF,KAMxE49F,qBACF,OAAO1lG,KAAKwR,kBAAiB,IAAMktE,UAAUkwE,mBAAmB9mJ,SAM9Ds/D,mBACF,OAAOpnE,KAAKwR,kBAAiB,IAAMktE,UAAUsxE,iBAAiBloJ,SAM5D6/D,2BACF,OAAO3nE,KAAKwR,kBAAiB,IAAMktE,UAAUuxE,yBAAyBnoJ,UCpVnE,SAASimD,MAEd,IAAIisF,EAAqBz1F,WAAWC,SAAS2M,OAC7C6oF,GAAuB,EAAIjxG,EAAAA,IACzByc,UAAU,KACVA,UAAU,MAGZw0F,GAAsBz1F,WAAWC,SAASgW,MAC1C,MAAM6+R,EAAkCx4V,KAAKC,IAAIyjD,WAAWC,SAAS2M,OACnEsJ,kBAAkBjW,SAAS18C,OAG1By7C,kBAAkB,GAAGkD,aAAe,IACrCuzF,GAAsBq/M,EAAkC91S,kBAAkB,GAAG6J,OAAOhlB,YACjFuX,GAAAA,QAAAA,kBAAAA,aAA4C9N,MAAMC,WAAUkoG,GAAsBq/M,EAAkC91S,kBAAkB,GAAGoK,QAAQvlB,cAEtJ,IAAIsyJ,EAAe9rL,OAAOia,SAAS67B,qBACnCg2I,GAAgB,EAAI75L,KAAKuH,IAAI,EAAGm8C,WAAWryC,OAAOkC,QAAU,KAAOi/C,gBAAgBsH,YAAYvyB,YAC/F,IAAIx6B,EAAIgB,OAAO41C,SACXtwC,EAAImmD,gBAAgB7V,SACrB7E,GAAAA,QAAAA,kBAAAA,YAA2C4D,kBAAkB,GAAGkD,aAAe,IAAM5U,MAAMC,WAC5F4oJ,GAAgB,EAAIn3I,kBAAkB,GAAGoK,QAAQvlB,YACjDx6B,GAAK,EAAI21C,kBAAkB,GAAGoK,QAAQvlB,YACtCl0B,GAAK,EAAIqvC,kBAAkB,GAAGoK,QAAQvlB,aAExC,IAAIzV,EAAI/jB,OAAOi/C,eAAez8C,GAAG,GAAK,EAAyGgnS,qBAAqB,GAAGlrP,YACvK,OAAQrsD,KAAKuH,IAAIwF,EAAIsG,EAAI8lI,EAAqB0gD,EAAc,GAAK/nK,EAG5D,SAAS2mU,MACd,GAAInsS,kBAAkB,GAAGzb,UAAW,OAAOr2B,EAAAA,GAC3C,GAAIskC,GAAAA,UAAc,OAAOtkC,EAAAA,UACzB,IAAImpC,EAAWuJ,MACf,MAAMxjB,EAAUxB,EAAAA,QACdkkB,gBAAgBC,YAChBD,gBAAgBC,YAAYtG,cAC5BF,qBAAqBwG,YACrBxG,qBAAqBwG,YAAYtG,cACjCpB,UAAU,KACVA,UAAU,KACVA,UAAU,KACVxM,YAAY,IACZA,YAAY,KACZmU,kBAAkB,GAAGC,OACrBC,aAAaC,YACbC,WAAWC,MAAMC,WAAW,GAC5B9N,GAAAA,QAAAA,sBAEF,GAAI6E,EAAW,EAAG,CAGhB,IAAI+0S,EAAiB,EAAI,OACD,IAApB3qV,OAAO41C,WAAgB+0S,EAAiB,EAAI,YACxB,IAApB3qV,OAAO41C,WAAgB+0S,EAAiB,EAAI,YAC5CprS,gBAAgB,GAAGzc,YACrB6nT,EAAiB,EAAI,KACG,IAApB3qV,OAAO41C,WAAgB+0S,EAAiB,EAAI,SACxB,IAApB3qV,OAAO41C,WAAgB+0S,EAAiB,EAAI,QAElD,MAAMnrS,EAAY,IAAO7jB,EAIzB,OAHIsH,MAAMC,WAAU0S,GAAY,IAEhCA,GAAY3S,MAAM+b,mBAAmBnlC,MAC9BpN,EAAAA,MAAAA,SAAkBk+U,EAAkB/0S,EAAW4J,GAExD,IAAImrS,EAAiB,GASrB,GARIprS,gBAAgB,GAAGzc,YAAW6nT,EAAiB,KACnD/0S,GAAY,EACZA,GAAYja,EACZia,GAAYkB,uBAAuB,kBACnClB,GAAYkB,uBAAuB,mBACnClB,GAAY,EAAIF,iBAAiB,GAAG3b,gBAAgB,GAChDkJ,MAAMC,WAAU0S,GAAY,IAE5B51C,OAAOorD,QAAQE,oBAAoBC,cAAe,CACpD,IAAIq/R,EAAkBziS,GAAoBQ,QAAQxa,SAASnuC,OAAOorD,QAAQC,WAAW,IAClFyI,GAAkB,IAAI52B,WAAU0tT,EAAkB34V,KAAKC,IAAoB,IAAhB04V,EAAoB,IAClFh1S,GAAag1S,EAGfh1S,GAAY3S,MAAM+b,mBAAmBnlC,MACrC,MAAM2lC,EAAY/yC,EAAAA,OAClB,IAAIo+U,EAAcrrS,EAAUvwC,IAAI2mC,EAAW,GAAG5uC,MAAM2jV,GACpD,OAAOE,EAGF,SAAShvL,MACd,SAAKjnH,IAAU5X,yBAA2B4X,IAAU9X,gBAEhDyiB,gBAAgB,GAAGzc,WACrB8R,IAAUk2S,oBAEZvgO,SAASi3C,cAAc/2C,eAAepwE,WACtCrY,SAASC,WAAW5E,SAASuX,IAAU7X,MACvC/8B,OAAOuyD,kBACPvyD,OAAO+zC,QAAQqc,aAAa63B,YAAcjoF,OAAO+zC,QAAQqc,aAAap2C,KACtEha,OAAO+0C,kBAAkB2mB,UAAUK,kBAC/Bxc,gBAAgB,GAAGzc,YAAW9iC,OAAO8lD,UAAY,GACrDzxD,OAAOkpC,UACA,GAGF,SAASu+H,MACd,IAAKlnH,IAAU5X,yBAA2B4X,IAAU9X,aAAc,OAClE,IAAIiuT,GAAkB,EAGtB,GADAxgO,SAASi3C,cAAc/2C,eAAepwE,WAClCkF,gBAAgB,GAAGzc,UAAW,CAChC,MAAM8hC,EAAO3a,OAAOizF,aACpB,IAAIngH,EAAO6X,IAAU7X,KACrB,MAAOiF,SAASC,WAAWz5B,GAAGu0B,IAASA,EAAKj0B,GAAG87D,GAC7ChwB,IAAUk2S,oBACV9oT,SAASC,WAAW5E,SAASN,GAC7B/8B,OAAOuyD,kBACPw4R,GAAkB,EAClBhuT,EAAO6X,IAAU7X,SAEd,CACL,MAAMzW,EAAYsuB,IAAU9tB,UAAUe,aAAa7nB,OAAOuyD,gBAAiBvwB,SAASC,WAAW/oC,MAAO,GACtG,GAAkB,OAAdotB,EACF,OAEF0b,SAASC,WAAW5E,SAASjjC,QAAQiP,MAAMid,EAAU2B,WACrDjoB,OAAOuyD,iBAAmBjsC,EAAU/D,SACpCwoU,GAAkB,EAGhBA,IACF/qV,OAAO+zC,QAAQqc,aAAa63B,YAAcjoF,OAAO+zC,QAAQqc,aAAap2C,KAClEulC,gBAAgB,GAAGzc,YAAW9iC,OAAO8lD,UAAY,IAIlD,SAAS2nH,MACdztK,OAAOuyD,gBAAkB,EACzBvyD,OAAOmsI,yBAA2B,EAG7B,MAAMv3F,IAAY,CAEnBrY,iBACF,OAAO8f,oBAAoB,GAAGkG,OAAS,GAAK0W,kBAAkBy0B,YAAYlqD,WACxEvF,eAAesf,mBAGfvgB,6BACF,OAAO5rC,KAAKmrC,aACToY,kBAAkB,GAAG7R,YACrBoS,QAAQoN,kBACRtiD,OAAOo9C,OAAShsD,KAAK2rC,KAAKj0B,GAAG1O,QAAQu+D,oBAGtC77B,mBACF,OAAOkF,SAASC,WAAW3f,IAAIlxB,KAAK2rC,OAGlCyf,iBACF,OAAOkuS,OAGL3wV,cACF,IAAI6lD,EAAYrP,QAAQzN,UACpByN,QAAQqP,UACyHxuD,KAAKq/P,UAAUn1N,YAAY2mB,gBAAgBmQ,gBAC9K,GAAIpyD,OAAOorD,QAAQE,oBAAoBC,cAAe,CACpD,IAAIy/R,EAAyB7iS,GAAoBc,cAAcjpD,OAAOorD,QAAQC,WAAW,IACtFyI,GAAkB,IAAI52B,WAAU8tT,EAAuBA,GAAwB,IAClF,IAAIC,EAAa,IAAI7wV,QAAQ,GAAGuN,IAAIqjV,GACpCprS,EAAYA,EAAU3wC,IAAIg8U,GAG9B,OADK1qU,GAAAA,iBAAkBq/B,EAAYA,EAAU3wC,IAAI,OAC1CjP,OAAOia,SAASo4B,QAAUiU,aAAarsC,SAASssC,UAAYsgJ,eAAejnJ,GAAaA,GAG7F7iB,WACF,OAAO3rC,KAAK01B,UAAUU,cAAcxnB,OAAOuyD,gBAAkBvyD,OAAOmsI,2BAGlErlH,gBACF,OAAO,IAAIN,uBAAuB,CAChC5D,SAAU,IACVgE,aAAc,GACdE,UAAWmjC,OAAO29B,sBAClBxgE,qBAAsBzsB,OAAO2O,aAI7B0sC,qBACF,OAAK5kD,KAAKmrC,WACHnrC,KAAK01B,UAAUuB,kBAAkB2Z,SAASC,WAAW/oC,MAAO,GAAKg8C,QAAQgB,0BADnD,GAI3Bu6M,gBACF,OAAOhkP,EAAAA,GAAAA,eACL29B,YAAY,IACZA,YAAY,IACZA,YAAY,IACZA,YAAY,KAEXpjC,MAAM0jV,MAAyBz7U,IAAI7d,KAAKquD,iBAGzCA,oBACF,IAAIsrS,EAGJ,OAF6BA,EAAzB71S,QAAQoN,gBAAmClxD,KAAK4kD,eAC7Bh2C,OAAOuyD,gBACvBw4R,EAAkB/qV,OAAOwyD,iBAG9B3d,gBACF,OAAOz6C,QAAQooF,OAAO,IAAMpxF,KAAK2I,UAGnC+wV,oBACE,IAAK,MAAMpqL,KAAa3iH,qBAAqBN,IACvCijH,EAAU3jI,KAAKzR,IAAMl6B,KAAK2rC,KAAKzR,GAAGo1I,EAAUr3B,cAMzCv3C,IAAgB,CAC3Bo5P,aAAc,IACdC,YAAa,KACbC,WAAY,EACZ5sD,WAAY,KAERl7R,aACF,OAAOtD,OAAOwyD,iBAGZliB,cACF,IAAIA,EAAUwhD,IAAco5P,aAU5B,OATIroT,SAASpF,IAAIm1D,iBAAiBC,0BAChCviD,GAAW,KAETS,GAAAA,QAAAA,0BAAAA,aACFT,GAAY,IAAQgG,WAAWC,gBAE9BK,UAAU,KAAK1Z,WAChBoT,GAAWsG,UAAU,KAAK7c,gBAAgB,IAErCuW,GAGTs7J,WAAWvtB,GACT,IAAI/4K,EAAIlU,KAAKg6V,WACTr6S,GAAAA,QAAAA,kBAAAA,YAA2C4D,kBAAkB,IAAIkD,aAAe,IAAM5U,MAAMC,WAAU59B,EAAIA,GAAKqvC,kBAAkB,IAAIoK,QAAQvlB,aACjJ,MAAM+8L,EAAY,GAAKp8L,EAAAA,IAAYA,EAAAA,IAAY,KAAMyc,UAAU,MAAMA,UAAU,MAAQ,GACrF3kD,KAAKuH,IAAIs9C,uBAAuB,mBAAoB,GAChDu0S,EAAcp5V,KAAKkK,IAAIo6N,GACvB+0H,EAAYjtK,EAAO9tG,KACnBg7Q,EAAWt5V,KAAKuH,IAAI,EAAG8xV,EAAYD,GACzC,GAAIE,GAAYz5P,IAAcxhD,QAE5B,OADAl/C,KAAKotS,WAAajoE,EACX,CACL1qB,UAAW55M,KAAKqzB,KAAKimU,GACrB9sD,WAAYrkS,QAAQ6U,IAAIsnN,EAAUtkO,KAAKqzB,KAAKimU,KAIhD,MAAMC,EAAa15P,IAAcxhD,QAAU+6S,EAGrCI,GAAeH,EAAYE,GAAcH,EACzCK,EAAyB55P,IAAcq5P,YAAc7lV,EAAI+lV,EAMzDM,EAAeppS,GAAUmpS,EAAyBz5V,KAAKgd,IAC3Dhd,KAAKuH,IAAI+oD,EAAQ,GAAIj9C,GAAKi9C,EACtBqpS,EAA2B5sV,GAAKA,EAAI0sV,EAAyBz5V,KAAKgd,IACtEhd,KAAKuH,IAAIwF,EAAG,GAAIsG,EAAI,GAAK,EACrBumV,EAAgBtpS,GAAUA,GAAUopS,EAAappS,GAAUkpS,GAAeG,EAAyBrpS,GACzG,IAAIupS,EACAC,EAAgB95V,KAAKC,IACvBu5V,EACAx5V,KAAKgd,IAAIw8U,EAAcC,EAAwB,EAAIpmV,IAEjDi6P,EAAU,EAId,GACEusF,EAAmBC,EACnBA,EAAgBF,EAAcE,SACvBA,EAAgBD,KAAsBvsF,EAAU,KACzD,IAAIj5O,EAAYr0B,KAAKuM,MAAMutV,GACvBC,EAAoB1lU,EAGxB,GAAItmB,OAAOorD,QAAQE,oBAAoBC,cAAe,CACpD,IAAI0gS,EAAyB9jS,GAAoBc,cAAcjpD,OAAOorD,QAAQC,WAAW,IACtFyI,GAAkB,IAAI52B,WAAU+uT,EAAuBA,GAAwB,KAClF3lU,GAAa2lU,EACb3lU,EAAYr0B,KAAKuM,MAAM8nB,GAGzB,MAAMw0F,EAAO1gH,QAAQqrB,IAAI+lU,EAAaG,EAAaK,EAAoB,GAAKX,GAG5E,OAFAj6V,KAAKotS,WAAapkS,QAAQqrB,KAAKkmU,EAAaK,EAAoB,GAAKL,EAAaK,IAAsBX,GAEjG,CACLx/I,UAAWvlL,EAAYwrE,IAAcxhD,QACrCmuP,WAAY3jL,KChTX,SAAS0lC,MACd,IAAIhkG,EAAa/vC,EAAAA,GA6CjB,OA3CA+vC,EAAaA,EAAWx1C,MAAMswC,aAAaz9B,OAC3C2iC,EAAaA,EAAWx1C,MAAMq+C,aAAaC,aAAaC,aACxD/I,EAAaA,EAAWx1C,MAAMq+C,aAAaG,gBAAgBD,aAEtD5Q,kBAAkB,GAAG7R,YACxB0Z,EAAaA,EAAWx1C,MAAMg7B,SAAS+hB,cAAc7qD,MAAM+V,IAAIgvC,mBAAmBgG,qBAAqBzqD,IAAI,KAE7GgjD,EAAaA,EAAWxhB,eACtB8c,qBAAqB6L,YACrB7L,qBAAqB8L,cACrB9L,qBAAqBiL,gBACrBjL,qBAAqB+L,qBACrBxF,gBAAgBgF,cAChBhF,gBAAgBiF,qBAChBlZ,YAAY,IACZA,YAAY,IACZA,YAAY,IACZA,YAAY,IACZA,YAAY,IACZA,YAAY,IACZA,YAAY,IACZA,YAAY,IACZA,YAAY,IACZA,YAAY,IACZwM,UAAU,IACVA,UAAU,KACVA,UAAU,KACVA,UAAU,KACVA,UAAU,KACV2H,kBAAkB,GAClBA,kBAAkB,GAAGC,OACrBD,kBAAkB,GAClB5J,kBAAkB,IAClB8P,gBAAgBC,eAChBjG,aAAayG,yBAGf1I,EAAaA,EAAWphB,kBAAkBmjB,kBAAkB,IAC5D/B,EAAaA,EAAWx1C,MAAM8vC,uBAAuB,cACrD0F,EAAaA,EAAWx1C,MAAMg7B,SAASmX,gBAAgBjgD,MAAMoiC,YAAYmpB,gBAAgBE,QAErF1hB,MAAMC,WAAUsZ,EAAaA,EAAWj0C,UAAU,KAE/Ci0C,EAGF,SAASkkG,IAAoC/mG,GAClD,GAAIA,EAAO,GAAKA,EAAO,EAAG,MAAM,IAAIj7C,MAAO,qCAAoCi7C,KAC/E,GAAI4F,gBAAgB,IAAIzc,WAAa6W,EAAO,EAAG,OAAOltC,EAAAA,GACtD,GAAIkoC,kBAAkB,IAAI7R,UACxB,OAAOd,SAAS+hB,cAAc7qD,MAAM+V,IAClCgvC,mBAAmBgG,qBACnBzqD,IAAI,GAAGwN,MAAM07C,SAASC,mBAAmBhJ,IAG7C,IAAI6C,EAAa/vC,EAAAA,GAEjB+vC,EAAa0vS,IAAmB1vS,EAAY7C,GAC5C6C,EAAa2vS,IAAc3vS,EAAY7C,GAEvC,MAAMyyS,EAA6Bt1S,uBAAuB,eAyB1D,OAxBI92C,OAAOia,SAASo4B,QAAUiU,aAAarsC,SAASssC,UAClD/J,EAAaqqJ,eAAerqJ,EAAWvtC,IAAIm9U,IAClCvpT,SAASC,YAClB0Z,EAAaqqJ,eAAerqJ,IAE9BA,EAAaA,EAAWzhB,cAAcknB,gBAAgBmpC,UAElD76C,QAAQzN,UACV0Z,EAAajM,QAAQiM,WAAWA,GACvBj8B,GAAAA,UACTi8B,EAAaA,EAAWvtC,IAAI,IACnBsR,GAAAA,iBACTi8B,EAAaA,EAAWvtC,IAAI,OAG1BjP,OAAOorD,QAAQE,oBAAoBC,gBACrC/O,EAAaA,EAAWvtC,IAAIk5C,GAAoBK,gBAAgBE,YAAY1oD,OAAOorD,QAAQC,WAAW,MAIpG5G,gBAAgBM,UAAUxoB,YAAcigB,EAAWl6B,IAAImiC,gBAAgBM,UAAUvrB,eACnFgjB,EAAaA,EAAWvtC,IAAI,OAGvButC,EAGT,SAAS0vS,IAAmBrqS,EAAMlI,GAChC,IAEI0yS,EAFA7vS,EAAaqF,EAAK76C,MAAM8oE,UAAU0wE,oCAAoCtnJ,OAIxEmzV,EADEn3S,QAAQoN,gBACGjG,IAAoB1C,GAAM3D,eAE1B/jD,KAAKuM,MAAM69C,IAAoB1C,GAAM4I,OAAS,IAG7D/F,EAAaA,EAAWx1C,MAAM5M,QAAQ6U,IAAI8uC,IAAqByE,iBAAkB6pS,IACjF7vS,EAAaA,EAAWx1C,MAAM07C,SAASC,mBAAmBhJ,IAE1D,IAAImK,EAAiBr3C,EAAAA,GAAAA,eACnB4vC,IAAoB1C,GAAMyJ,gBAC1BtL,qBAAqBgM,gBAoCvB,OAlCAA,EAAiBA,EAAe70C,IAAI2nC,UAAU,IAAI7c,gBAAgB,IAClEyiB,EAAaA,EAAWx1C,MAAM88C,GAEjB,IAATnK,IACF6C,EAAaA,EACVxhB,eACCqjB,gBAAgBkF,cAChBlF,gBAAgBkF,cAAcvL,cAC9B5N,YAAY,IACZA,YAAY,IACZA,YAAY,IACZA,YAAY,IACZwM,UAAU,KACVA,UAAU,OAGH,IAAT+C,IACF6C,EAAaA,EAAWx1C,MAAM67C,UAAUC,aAG1CtG,EAAaA,EAAWxhB,eACb,IAAT2e,EAAavP,YAAY,IAAM,KAC/BuP,EAAO,EAAIvP,YAAY,IAAM,KAC7BuP,GAAQ,EAAIvP,YAAY,IAAM,KAC9BuP,EAAO,EAAI/C,UAAU,IAAM,KAClB,IAAT+C,EAAa/C,UAAU,KAAO,KAC9B+C,EAAO,GAAKA,EAAO,EAAI4E,kBAAkB,GAAGC,OAAS,MAEnDpU,YAAY,IAAI7N,aAClBigB,EAAaA,EAAWx1C,MAAM,EAAI2yC,EAAO,MAG3C6C,EAAaA,EAAW3iD,SAAS,GAE1B2iD,EAGT,SAAS2vS,IAActqS,EAAMlI,GAC3B,IAAI6C,EAAaqF,EACjB,MAAMyqS,EAAqBx1S,uBAAuB,YAC5Cy1S,EAA4Bz1S,uBAAuB,qBAoCzD,OAlCIyH,kBAAkB,GAAGzb,WAAa9iC,OAAOkmD,aAAevM,IAC1D6C,EAAaA,EAAWvtC,IAAIsvC,kBAAkB,GAAG/kB,cAE/C+kB,kBAAkB,GAAGb,cACvBlB,EAAaA,EAAWvtC,IAAIsvC,kBAAkB,GAAGC,OAAOhlB,cAG1DgjB,EAAaA,EAAWvtC,IAAIq9U,EAAqBC,EAA4Bx7S,GAAG8T,eAEhFrI,EAAaA,EACVjhB,aACC8gB,IAAoB1C,GAAMyJ,gBAAgBpL,cAC1CqG,gBAAgBgF,cAAcrL,cAC9BqG,gBAAgBiF,qBAAqBtL,cACrCyM,gBAAgB5qC,MAChBuwB,YAAY,KACZuU,WAAWwG,QACXrN,qBAAqB6L,YAAY3L,cACjCF,qBAAqB8L,cAAc5L,eAGvCwE,EAAaA,EAAWvtC,IAAI6nC,uBAAuB,qBAEnD0F,EAAaA,EAAWvtC,IAAIs1C,SAASC,MAAMzqB,gBAAgB,IAEvD/5B,OAAOorD,QAAQE,oBAAoBC,eAAiBvrD,OAAOorD,QAAQC,WAAW,IAAI,IACpF7O,EAAaA,EAAWvtC,IAAI6kD,GAAkB,IAAI/5B,gBAAgB,KAGhEusB,aAAaxsC,SAASysC,YAAcjmB,eAAe,IAAIpD,WACzDsf,EAAaA,EAAWvtC,IAAI,KAIvButC,EAGT,SAASgwS,IAAe7yS,GACT,IAATA,GAAY4wE,SAASi3C,cAAc/2C,eAAekxL,MACzC,IAAThiQ,GAAY4wE,SAASi3C,cAAc/2C,eAAemxL,MACtDxxQ,YAAY,GAAKuP,GAAMhd,SACvByN,YAAY,IAAI8rF,YAEZl2H,OAAOqgG,SAASrkD,WAAah8C,OAAOqgG,SAASouC,YAAY6wB,SAASC,aAElEhgH,gBAAgB,GAAGzc,YAAW9iC,OAAO8lD,UAAY,IACjDvG,gBAAgB,GAAGzc,WAAayb,kBAAkB,GAAGzb,YACvDib,IAAqB0uS,oBAAoB9yS,EAAO,GAGlD35C,OAAOkmD,WAAavM,EACpB35C,OAAO+zC,QAAQqc,aAAa63B,YAAcjoF,OAAO+zC,QAAQqc,aAAap2C,KACzD,IAAT2/B,IAAY35C,OAAO+0C,kBAAkBkC,SAAS+hB,SAAU,GAC/C,IAATrf,IAAY35C,OAAO+0C,kBAAkBkC,SAASoiB,SAAU,GAC/C,IAAT1f,IAAY35C,OAAO+0C,kBAAkBj7B,SAASqgD,OAAQ,GAC7C,IAATxgB,IAAY35C,OAAO+0C,kBAAkBkC,SAASuiB,OAAQ,GAGrD,SAASqlG,IAAgBllH,GAC9B,MAAM+mH,EAAYrkH,IAAoB1C,GACtC,GAAIzE,QAAQoN,kBAAoBo+G,EAAU1jI,yBAA2B0jI,EAAU5jI,aAAc,OAAO,EAEpG,MAAMC,EAAO2jI,EAAU3jI,KAEvB,QAAa,IAAT4c,GAAc9W,SAASC,WAAauZ,IAAoB,GAAGkG,QAAU,KAEzEm+G,EAAU/yD,eAAiB+yD,EAAU/yD,eAAerlG,MAAMy0B,GAEzB,IAA7B2jI,EAAUywD,gBACZzwD,EAAUgsL,oBAGZhsL,EAAUp9J,OAASo9J,EAAUp9J,OAAO+E,KAAK,GACzCq4J,EAAUn+G,SAEG,IAAT5I,GACFvP,YAAY,IAAI8rF,YAGlBs2N,IAAe7yS,IAER,GAGF,SAASilH,IAAiBjlH,GAC/B,MAAM+mH,EAAYrkH,IAAoB1C,GACtC,GAAIzE,QAAQoN,kBAAoBo+G,EAAU1jI,yBAA2B0jI,EAAUmwD,oBAAqB,OAAO,EAC3G,MAAM9zL,EAAO2jI,EAAUqxD,YAEvB,OAAa,IAATp4K,GAAc9W,SAASC,UAAkB+7H,IAAgB,IAE7D6B,EAAU/yD,eAAiB+yD,EAAU/yD,eAAerlG,MAAMy0B,GAC1D2jI,EAAUgsL,oBACVhsL,EAAUp9J,OAASo9J,EAAUp9J,OAAO+E,KAAKq4J,EAAUisL,kBACnDjsL,EAAUn+G,QAAUm+G,EAAUisL,iBAE9BH,IAAe7yS,IAER,GAGF,SAASg+K,IAAqBh+K,GACnC,MAAM+mH,EAAYrkH,IAAoB1C,GACtC,GAAIzE,QAAQoN,kBAAoBo+G,EAAU1jI,yBAA2B0jI,EAAU5jI,aAAc,OAAO,EACpG,MAAM8vT,EAAUlsL,EAAU+2D,cACpB16L,EAAO2jI,EAAU3jI,KAAK/1B,MAAM4lV,GAElC,OAAa,IAATjzS,GAAc9W,SAASC,UAAkB+7H,IAAgB,IAE7D6B,EAAU/yD,eAAiB+yD,EAAU/yD,eAAerlG,MAAMy0B,GAC1D2jI,EAAUgsL,oBACVhsL,EAAUp9J,OAASo9J,EAAUp9J,OAAO+E,KAAKukV,GACzClsL,EAAUn+G,QAAUqqS,EAEpBJ,IAAe7yS,IAER,GAIT,SAASkzS,IAAYlzS,GACnB,GAAIzE,QAAQoN,gBAAiB,OAC7B,MAAMo+G,EAAYrkH,IAAoB1C,GACtC+mH,EAAUgsL,oBACVhsL,EAAUp9J,OAASlJ,QAAQuxB,MAAM+0I,EAAUp9J,OAAO+E,KAAKq4J,EAAUisL,mBACjEjsL,EAAUn+G,QAAUm+G,EAAUisL,iBAC9BH,IAAe7yS,GAGV,SAASozF,MACd,IAAI73F,QAAQoN,gBAAZ,CAEAtiD,OAAO+0C,kBAAkBj7B,SAASizH,QAAS,EAE3C,IAAK,IAAIpzF,EAAO,EAAGA,EAAO,EAAGA,IAC3BkrH,IAAgBlrH,GAKlBmiH,mBAGK,SAAS+I,IAAgBlrH,EAAMyf,EAAO3jB,EAAAA,GAC3C,MAAMirH,EAAYrkH,IAAoB1C,GACtC,GAAIzE,QAAQoN,kBAAoBo+G,EAAU1jI,yBAA2B0jI,EAAUmwD,oBAAqB,OACpG,MAAM9zL,EAAO2jI,EAAUqxD,YACvB,IAAI+6H,EAAW1zR,EACf,MAAMwL,EAAO3a,OAAOizF,aACpB,GAAIwjB,EAAU3jI,KAAKv0B,GAAGo8D,IAAS3a,OAAO2yF,wBAAyB,OAE/D,GAAa,IAATjjG,GAAc9W,SAASC,UAEzB,YADA+7H,IAAgB,GAWlB,GANI6B,EAAU/yD,eAAerrF,IAAIya,KAC/B2jI,EAAU/yD,eAAiB+yD,EAAU/yD,eAAerlG,MAAMy0B,GAC1D8vT,IAAYlzS,GACZmzS,KAGEA,GAAY,EAAG,OAGnB,GAAIvtS,gBAAgB,GAAGzc,WAAayb,kBAAkB,GAAGzb,UAAW,CAClE,MAAO49H,EAAUmwD,qBAAuBnwD,EAAU3jI,KAAKj0B,GAAG87D,IAASkoR,EAAW,EAG5EpsL,EAAU/yD,eAAiB+yD,EAAU/yD,eAAerlG,MAAMo4J,EAAUqxD,aACpE86H,IAAYlzS,GACZmzS,IAEF,OAIF,MAAMC,EAAYrsL,EAAU55I,UAAUe,aACpC51B,KAAKuM,MAAMkiK,EAAUn+G,OAAS,IAAMm+G,EAAUr3B,UAAWq3B,EAAU/yD,eAAgB,IAErF,GAAkB,OAAdo/O,EACF,OAEF,IAAIC,EAASD,EAAUxqU,SACnByqU,EAASF,IAAUE,EAASF,GAChCpsL,EAAUp9J,OAASo9J,EAAUp9J,OAAO+E,KAAK,GAAK2kV,GAAQrhU,QACtD+0I,EAAUn+G,QAAU,GAAKyqS,EACzBtsL,EAAU/yD,eAAiB+yD,EAAU/yD,eAAerlG,MAAMlO,QAAQiP,MAAM0jV,EAAU9kU,WAGpF,MAAMglU,YAAiCtpC,GACrCvwT,YAAYumD,GACVrvC,OAAM,IAAMtK,OAAOopI,WAAWnnG,YAAY0X,GAC1C,MAAM88P,EAAa,CAAC,KAAM,GAAI,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,MAC9DrlT,KAAKs1B,UAAY+vR,EAAW98P,GAC5B,MAAMuzS,EAAwB,CAAC,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,MAC1E97V,KAAK8/F,oBAAsBg8P,EAAsBvzS,GACjD,MAAMwzS,EAAgB,CAAC,KAAM,GAAI,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,KAChE/7V,KAAKg8V,YAAcD,EAAcxzS,GACjC,MAAM0zS,EAA2B,CAAC,KAAM,IAAK,IAAK,IAAK,KAAO,KAAO,KAAO,KAAO,MACnFj8V,KAAKk8V,sBAAwBD,EAAyB1zS,GAMpD7yB,gBACF,IAAIymU,EAAgB,EAIpB,OAHIvtV,OAAOorD,QAAQE,oBAAoBC,gBACrCgiS,EAAgBplS,GAAoBgB,IAAIT,YAAY1oD,OAAOorD,QAAQC,WAAW,KAEzE,IAAI7kC,uBAAuB,CAChC5D,SAAU28B,gBAAgB,GAAGzc,UAAY1xC,KAAKg8V,YAAch8V,KAAKs1B,UACjEE,aAAc24B,gBAAgB,GAAGzc,UAAY1xC,KAAKk8V,sBAAwBl8V,KAAK8/F,oBAC/EpqE,UAAWmjC,OAAOw9B,uBAAuB8lQ,EACzCnmU,qBAAsBzsB,OAAO2O,YAO7ByzB,WACF,IAAIo0C,EAAc//E,KAAK01B,UAAUU,cAAcv1B,KAAKuM,MAAMpN,KAAKmxD,OAAS,IAAMnxD,KAAKi4I,WACnF,OAAOl4D,EAILk4D,gBAAc,OAAOj4I,KAAKolC,KAAK6yG,UAE/BA,cAAUnwI,GAAS9H,KAAKolC,KAAK6yG,UAAYnwI,EAKzCi4N,qBACF,OAAO//N,KAAKmxD,OAAS,GAMnBoqS,uBACF,OAAO,GAAKv7V,KAAK+/N,eAMfY,kBACF,OAAO3gO,KAAK2rC,KAAK/1B,MAAM5V,KAAKu7V,kBAG1Bl1H,oBACF,MAAMr0M,EAAQhyB,KAAKu8G,eAAeplG,UAAUnX,KAAK2rC,MACjD,OAAO3iC,QAAQoE,MAAMpE,QAAQZ,IAAIY,QAAQlI,IAAIkxB,EAAO,GAAKhyB,KAAK+/N,gBAAiB,IAAIrwN,WAMjFsiD,sBACF,OAAQhyD,KAAKuoD,MACX,KAAK,EACL,KAAK,EACH,OAAO0E,gBAAgBq5C,UACzB,KAAK,EACL,KAAK,EACH,OAAOr5C,gBAAgBs5C,UACzB,KAAK,EACL,KAAK,EACH,OAAOt5C,gBAAgBw5C,UACzB,KAAK,EACL,KAAK,EACH,OAAOx5C,gBAAgBy5C,UAE3B,OAAO,EAMLu4H,mBACF,MAAM12K,EAAOvoD,KAAKuoD,KAClB,GAAa,IAATA,GACDA,EAAO,GAAKhF,kBAAkB,GAAG7R,WACjC6W,EAAO,GAAK4F,gBAAgB,IAAIzc,UACjC,OAAOr2B,EAAAA,GAGT,IAAIk6U,EAQJ,OANEA,EADW,IAAThtS,GAAchF,kBAAkB,GAAG7R,UAC5ByrB,kBAAkB,GAAGzS,oBAAoB90C,MAAM,IAC/Cu4C,gBAAgB,IAAIzc,UACpBuZ,IAAoB1C,EAAO,GAAGmC,oBAE9BO,IAAoB1C,EAAO,GAAGmC,oBAElC6qS,EAAO3/U,MAAM,IAAIuB,UAAUnX,KAAKkS,OAAO9J,IAAI,IAAIwN,MAAM4/C,4BAM1DnK,kBACF,MAAM9C,EAAOvoD,KAAKuoD,KAClB,QAAKhF,kBAAkB,GAAG7R,WAAa6W,EAAO,GAC3C4F,gBAAgB,IAAIzc,WAAa6W,EAAO,GACxCzE,QAAQpS,WAAa6W,EAAOzE,QAAQC,sBAGhC/jD,KAAKmrD,YAAY/zC,GAAG,GAMzBmlG,qBACF,OAAOv8G,KAAKuoD,MAAQ,GAAK4F,gBAAgB,GAAGzc,UACxCuZ,IAAoBjrD,KAAKuoD,KAAO,GAAGr2C,OACnC0+B,SAASC,WAAW/oC,MAMtBy0G,mBAAez0G,GACb9H,KAAKuoD,MAAQ,GAAK4F,gBAAgB,GAAGzc,UAAWuZ,IAAoBjrD,KAAKuoD,KAAO,GAAGr2C,OAASpK,EAC3F8oC,SAASC,WAAW/oC,MAAQA,EAM/B88C,qBACF,OAAK5kD,KAAK4rC,uBAGQ,IAAd5rC,KAAKuoD,MAAc9W,SAASC,UAAkB,EAI3C1xC,KAAK01B,UAAUuB,kBAAkBj3B,KAAKu8G,eAAgB,IAAMz4D,QAAQgB,0BAPlC,EAavCs3S,sBACF,OAAKt4S,QAAQoN,gBACNrwD,KAAKuM,MAAM,GAAKpN,KAAK4kD,gBADS,EAkBnCuG,kBACF,OAAOnrD,KAAKkS,OAAO9J,IAAIpI,KAAKo8V,iBAM1B1wT,mBACF,OAAIoY,QAAQoN,qBACPtiD,OAAOo9C,OAAShsD,KAAK2rC,KAAKv0B,GAAGpO,QAAQkP,aACnClY,KAAK2rC,KAAKt0B,IAAIrX,KAAKu8G,iBAMxBkjH,0BACF,SAAK7wN,OAAOo9C,OAAShsD,KAAK2rC,KAAKv0B,GAAGpO,QAAQkP,aACnClY,KAAK2gO,YAAYtpN,IAAIrX,KAAKu8G,gBAG/B3wE,6BACF,IAAKi8B,kBAAkBy0B,YAAYlqD,WAAapyC,KAAKuoD,KAAO+I,SAASmtC,YAAc,EAAG,OAAO,EAC7F,MAAMk6K,EAA4B,IAAd34Q,KAAKuoD,MAAc0C,IAAoBjrD,KAAKuoD,KAAO,GAAG4C,YAAY/zC,GAAG,GACzF,SAAKywD,kBAAkBy0B,YAAYlqD,YAAcumO,KAC1C34Q,KAAKuoD,KAAO,IAAM4F,gBAAgB,IAAIzc,WAG/C8/C,QACExxF,KAAKkS,OAASmJ,EAAAA,GACdrb,KAAKmxD,OAAS,EACdnxD,KAAKi4I,UAAY,EAGnBkkC,cACEn8K,KAAKkS,OAASmJ,EAAAA,GAGhBigV,oBACMnuS,kBAAkB,GAAGzb,UAAW1xC,KAAKq8V,mBAChCluS,gBAAgB,GAAGzc,WAAW1xC,KAAK05V,oBAG9CA,oBACE,IAAK,MAAMpqL,KAAa3iH,IAAqBN,IAAIzpD,QAAOwtD,GAAOA,EAAI7H,OAASvoD,KAAKuoD,OAC3E+mH,EAAU3jI,KAAKzR,IAAMl6B,KAAK2rC,KAAKzR,GACjCo1I,EAAUr3B,YAGVz0F,UAAU7X,KAAKzR,IAAMl6B,KAAK2rC,KAAKzR,GAAGtrB,OAAOmsI,2BAG/CshN,mBACE,IAAK,MAAM/sL,KAAa3iH,IAAqBN,IAAIzpD,QAAOwtD,GAAOA,EAAI7H,OAASvoD,KAAKuoD,QAC3EvoD,KAAKuoD,MAAQ,GAAK+mH,EAAU3jI,KAAKj0B,GAAG1X,KAAK2rC,OAElC3rC,KAAKuoD,MAAQ,GAAK+mH,EAAU3jI,KAAKv0B,GAAGpX,KAAK2rC,QADlD2jI,EAAUr3B,YAOZ7sF,iBACF,OAAOszB,UAAU2wE,oCAAoCrvJ,KAAKuoD,MAAMzgD,MAG9Dw0V,yCACF,MAAMh1H,EAAa14N,OAAOo9C,QAAUmC,gBAAgBzc,WAClDyb,kBAAkBzb,WAClBD,SAASC,UACL+9C,EAAW7gF,OAAOma,QAAQohD,OAChC,OAAKt4B,MAAMC,UAAYD,MAAMu8B,qBAAwBqhB,EAAiB63I,EAAYt+N,QAAQkP,UAAYmD,EAAAA,KAC/FisN,EAAYjsN,EAAAA,WAAgBA,EAAAA,KAGjCqvC,0BACF,MAAMnC,EAAOvoD,KAAKuoD,KAClB,GAAIzE,QAAQpS,WAAa6W,EAAOzE,QAAQC,oBAAqB,OAAO1oC,EAAAA,GACpE,IAAInJ,EAASlS,KAAKmrD,YACdgD,gBAAgB,IAAIzc,YACT,IAAT6W,IAAYr2C,EAASA,EAAO2L,IAAI,MACvB,IAAT0qC,IAAYr2C,EAASA,EAAO2L,IAAI,MACvB,IAAT0qC,IAAYr2C,EAASA,EAAO2L,IAAI,OAEtC,IAAI+2S,EAAa1iT,EAAO0D,MAAM5V,KAAKorD,YAAYx1C,MAAM4tC,UAAUC,WAI/D,GAHI0K,gBAAgB,GAAGzc,YACrBkjR,EAAaA,EAAWh/S,MAAMhH,OAAO8lD,YAE1B,IAATnM,EAAY,CAId,GAHI4F,gBAAgB,GAAGzc,YACrBkjR,EAAaA,EAAWh/S,MAAMhH,OAAO+lD,YAEnCigQ,EAAWx9S,GAAG,IAAK,CACrB,MAAMhD,EAAQwgT,EAAWxgT,QACzBwgT,EAAa5rT,QAAQiP,MAAMpX,KAAKgd,IAAIzJ,EAAOsxC,uBAAuB,uBAEpE,GAAI92C,OAAOorD,QAAQE,oBAAoBC,cAAe,CACpD,IAAIoiS,EAAyBxlS,GAAoBe,aAAalpD,OAAOorD,QAAQC,WAAW,IACrFyI,GAAkB,IAAI52B,WAAUywT,EAAyB17V,KAAKC,IAAI,EAAyB,IAAvBy7V,IACvE3nC,EAAa5rT,QAAQiP,MAAMpX,KAAKgd,IAAI+2S,EAAWxgT,QAAQmoV,IAEtDxlD,GAAAA,iBAAAA,aACD6d,EAAa5rT,QAAQ6U,IAAI+2S,EAAW,EAAEr4P,eAAe2F,yBAAyB,MAIlF,OADA0yP,EAAaA,EAAW9zT,IAAId,KAAKs8V,oCAC1B1nC,GASJ,MAAM3pQ,IAAsB4wS,IAAyBvpL,iBAE/C3lH,IAAuB,CAIlCN,IAAKpB,IAAoBljD,MAAM4F,UAE/B6jF,QACE,IAAK,MAAM89E,KAAa3iH,IAAqBN,IAC3CijH,EAAU99E,QAEZ9S,UAAU2X,sBAAsB2P,cAGlCq1P,oBAAoBrrS,GAClB,IAAK,MAAMs/G,KAAa3iH,IAAqBN,IAAI1gD,MAAM,EAAGqkD,GACxDs/G,EAAU6M,eAIV/qH,uBACF,GAAIjD,gBAAgB,GAAGzc,UAAW,OAAOr2B,EAAAA,GAAAA,IAAU,EAAIi2C,SAASmtC,YAAc,GAE9E,IAAIhuC,EAAOp1C,EAAAA,GAAAA,cACT29B,YAAY,KAAKzO,QAAQg+B,YAiB3B,OAfGhlB,kBAAkB,GAAGkD,aAAe,IACrCgK,EAAOA,EAAKjnB,cAAc+Z,kBAAkB,GAAG6J,SAEjDqD,EAAOA,EAAK7mB,eACVqjB,gBAAgBu5C,UAChBxtD,YAAY,KACZpjC,MAAM8vC,uBAAuB,eAE/B+K,EAAOA,EAAK5yC,IAAIhd,KAAKuH,IAAI,EAAGs9C,uBAAuB,sBACnD+K,EAAOA,EAAKvmB,YAAY+iB,gBAAgBu5C,UAAU5/C,eAClD6J,EAAOA,EAAK5yC,IAAIymC,iBAAiB,IAAI3b,gBAAgB,IAEjDgX,GAAGC,QAAQ8N,kBAAkBviB,YAAcoY,kBAAkB,GAAGkD,aAAe,IAAM5U,MAAMC,WAC7F2e,EAAOA,EAAK5yC,IAAI0lC,kBAAkB,GAAGoK,QAAQvlB,cAExCqoB,GAGTpjB,KAAK4pF,GAGH,MAAMulO,GAAoB5tV,OAAOo9C,OAAS6M,OAAO2yF,wBACjD,GAAIgxM,GAAoB5rT,SAASC,WAAW3f,IAAI2nC,OAAOizF,cAAe,OAEtE,IAAI2wM,EAAkBl5S,kBAAkB,GAAG7R,UAAY,EAAI,EACvDgrT,EAAiB,EACjBvuS,gBAAgB,IAAIzc,YACtB+qT,IACAC,KAEF,IAAK,IAAIn0S,EAAOk0S,EAAiBl0S,GAAQ,IAAKA,EAC5C0C,IAAoB1C,EAAOm0S,GAAgB1pC,kBAAkB/nQ,IAAoB1C,GAAO,IAAIv/C,QAAQiuH,GAAM1gH,IAAI,KAE5G00C,IAAoB,GAAG/4C,OAAOkF,GAAG,KACnCxI,OAAO+0C,kBAAkBkC,SAASuiB,OAAQ,GAE5Cnd,IAAoB,GAAG8nQ,gBAAgBniR,SAASC,WAAYomF,GACxD9oE,gBAAgB,IAAIzc,WACtBuZ,IAAoB,GAAG8nQ,gBAAgBniR,SAASC,WAAYomF,GAG1DulO,GAAkB5rT,SAASC,WAAWygD,OAAOz4B,OAAOizF,gBC5rBrD,SAASyD,MACd,IAAI9+F,EAAO,IAAIznD,QAAQirD,aAAaG,gBAAgBD,aACjDvqB,eACCoP,YAAY,IACZwM,UAAU,IACVA,UAAU,IACVA,UAAU,KACV2H,kBAAkB,GAAGC,OACrBD,kBAAkB,GAAGC,OACrBhG,gBAAgB4W,SAChB5W,gBAAgB6W,iBAChB7W,gBAAgB8W,gBAChB7K,gBAAgBC,eAChBhP,iBAAiB,GACjBiJ,WAAW6L,UAAU3L,WAAW,IAmBpC,OAhBI5b,MAAMC,UAAYyR,kBAAkB,GAAGkD,aAAe,IACxDgK,EAAOA,EAAK7mB,eAAe2Z,kBAAkB,GAAG6J,SAE9Cvb,MAAMC,UAAYyR,kBAAkB,GAAGkD,aAAe,IACxDgK,EAAOA,EAAK7mB,eAAe2Z,kBAAkB,GAAG6J,SAE9CzN,GAAGC,QAAQ8N,kBAAkBviB,YAAcoY,kBAAkB,GAAGkD,aAAe,IAAM5U,MAAMC,WAC7F2e,EAAOA,EAAK7mB,eAAe2Z,kBAAkB,GAAGoK,UAE9CpJ,WAAW0H,aAAe1H,WAAWryC,OAAOkF,GAAG,KACjDq5C,EAAOA,EAAK76C,MAAMkoD,mBAGjBne,GAAGC,QAAQif,+BAA+B1zB,aAC3CslB,EAAOA,EAAK5yC,IAAIs1C,SAASC,MAAMzqB,gBAAgB,GAAI,KAE9C8nB,EAGF,SAASupN,MACd,MAAM2iF,EAAaj2R,UAAUsyM,kBAAkB,GAAGpuN,SAClD,IAAK,IAAIppD,EAAI,EAAGA,EAAI,EAAGA,IACrBklE,UAAUsyM,kBAAkBx3Q,GAAGopD,UAAY+xS,EAI/C,MAAMC,YAA+BrqC,GACnCvwT,YAAYumD,GACVrvC,OAAM,IAAMtK,OAAOopI,WAAWtvH,UAAU6/B,GACxC,MAAMs0S,EAAsB,MAC1Bt6V,EACA8Y,EAAAA,MACAA,EAAAA,MACAA,EAAAA,MACAA,EAAAA,OACAA,EAAAA,OACAA,EAAAA,OACAA,EAAAA,OACAA,EAAAA,QAEFrb,KAAKugG,mBAAqBs8P,EAAoBt0S,GAC9C,MAAMu0S,EAAa,CAAC,KAAM,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,MACjE98V,KAAKwgG,gBAAkBs8P,EAAWv0S,GAClC,MAAMw0S,EAAc,CAAC,KAAM,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GACnD/8V,KAAKy9D,iBAAmBs/R,EAAYx0S,GACpC,MAAM88P,EAAa,CAAC,KAAM,IAAK,IAAK,KAAM,KAAM,MAAO,MAAO,MAAO,OACrErlT,KAAKs1B,UAAY,IAAItsB,QAAQq8S,EAAW98P,IACxCvoD,KAAKglN,cAAgBqgG,EAAW,GAI9B15Q,WAAS,OAAO3rC,KAAKolC,KAAKuG,KAE1BA,SAAK7jC,GAAS9H,KAAKolC,KAAKuG,KAAO7jC,EAE/Bw1D,iBACF,OAAOt9D,KAAKolC,KAAKk4B,WAGfA,eAAWx1D,GACb9H,KAAKolC,KAAKk4B,WAAax1D,EAGrBqjC,iBACF,OAAOnrC,KAAKolC,KAAK+F,WAGfA,eAAWrjC,GACb9H,KAAKolC,KAAK+F,WAAarjC,EAGrBi9M,oBACF,OAAO/kN,KAAKugG,mBAGVy8P,mCACF,OAAOpuV,OAAO+zC,QAAQsW,aAAagG,MAAM/tC,IAAIlxB,KAAK+kN,eAGhDD,kBACF,OAAqB,IAAd9kN,KAAKuoD,OAAe1b,eAAemsB,mBAGxC+lK,2BACF,OAAQ/+N,KAAK8kN,aAAel0K,GAAAA,eAAAA,MAAAA,IAAkC5wC,KAAKglN,eAGjEH,gBACF,OAAQ9rK,KAAKtG,mBAAmB/J,cAAgB1oC,KAAKg9V,+BACnDh9V,KAAK++N,qBAGLnzL,6BACF,OAAOihB,IAAmBx7B,UAAYrxB,KAAKmrC,YAAcnrC,KAAK0rC,eAAiB1rC,KAAK0sC,SAGlFhB,mBACF,OAAOkF,GAAAA,eAAAA,IAA4B5wC,KAAK2rC,MAGtCszL,mBACF,MAAM12K,EAAOvoD,KAAKuoD,KAClB,IAAIgtS,EAASl6U,EAAAA,GACA,IAATktC,GAGFhF,kBAAkB,GAAG6J,OAAOvkB,aAAYlW,GAAK4iU,EAAS5iU,EAAE/c,MAAM,MAC1D2tC,kBAAkB,GAAG7R,WAAW6R,kBAAkB,GAAG1a,aAAYlW,GAAK4iU,EAAS5iU,EAAE/c,MAAM,OAE3F2/U,EAASp4R,IAAkB5U,EAAO,GAAGmC,oBAEvC,MAAM/hD,EAAUK,QAAQZ,IAAIpI,KAAKkS,OAAQ,GACzC,OAAOqjV,EAAO3/U,MAAM,IAAIuB,UAAUxO,GAASiN,MAAM4/C,4BAG/CskN,sBACF,IAAIlsQ,EAAI,KAER,OADAA,GAAKyyF,GAAY,GAAG13D,gBAAgB,GAC7B/6B,EAGL88C,0BACF,GAAInH,kBAAkB,GAAG7R,WAAa6R,kBAAkB,IAAI7R,WACzDoS,QAAQpS,WAAa1xC,KAAKuoD,KAAOzE,QAAQC,oBAC1C,OAAO1oC,EAAAA,GAET,IAAIu5S,EAAa50T,KAAKmrD,YACtB,GAAI5H,kBAAkB,IAAI7R,UACxB,OAAOkjR,EAELrxQ,kBAAkB,GAAG7R,YACvBkjR,EAAaA,EAAWh/S,MAAM4tC,UAAUC,YAE1CmxQ,EAAaA,EAAWh/S,MAAM5V,KAAKorD,YAEnC,IAAIwsJ,EAAU,EAOd,GAAiB,GAAb53M,KAAKuoD,KACP,MAAO1nD,KAAKuT,MAAMwgT,EAAWxgT,SAAWvT,KAAKuT,MAAMpU,KAAK85Q,iBAAiBliE,EACzEg9G,EAAaA,EAAWr+S,IAAIvN,QAAQiP,MAAMjY,KAAK85Q,kBAC/C86C,EAAaA,EAAW/2S,IAAI,aAC5B+2S,EAAaA,EAAWh/S,MAAM5M,QAAQiP,MAAMjY,KAAK85Q,kBACjDliE,GAAW,EAEb,OAAOg9G,EAGLxpQ,iBACF,MAAM7C,EAAOvoD,KAAKuoD,KAClB,GAAIhF,kBAAkB,IAAI7R,UAAW,OAAOr2B,EAAAA,GAC5C,IAAIo1C,EAAOiuB,UAAU6wE,kCAAkCznJ,MACpD8hC,eACU,IAAT2e,EAAavP,YAAY,IAAM,KACtB,IAATuP,EAAa/C,UAAU,IAAM,KAC7BA,UAAU,MAiDd,OA/CIjC,kBAAkB,GAAGkD,aAAe,IACtCgK,EAAOA,EAAK7mB,eACD,IAAT2e,EAAahF,kBAAkB,GAAG6J,OAAS,OAG/CqD,EAAOA,EAAK76C,MAAM5M,QAAQ6U,IAAI7d,KAAKq9D,gBAAiBx8D,KAAKuM,MAAMpN,KAAKs9D,WAAa,MAGpE,IAAT/U,IACFkI,EAAOA,EAAK76C,MAAM23C,WAAWC,MAAMC,WAAW,GAAG9kB,gBAAgB,IACjE8nB,EAAOA,EAAK76C,MAAM4vC,UAAU,KAAK7c,gBAAgB,KAInD8nB,EAAOA,EAAK5yC,IAAI6nC,uBAAuB,gBACvC+K,EAAOA,EAAK5yC,IAAI6nC,uBAAuB,sBACvC+K,EAAOA,EAAK5yC,IAAI6nC,uBAAuB,qBACvC+K,EAAOA,EAAKvmB,YAAYmpB,gBAAgB3qC,UACxC+nC,EAAOA,EAAK5yC,IAAI8hC,GAAG8T,eACnBhD,EAAOA,EAAKvmB,YAAYqjB,WAAWwG,SAChCpU,GAAGC,QAAQ8N,kBAAkBviB,aAAe0G,MAAMC,WAChDyR,kBAAkB,GAAGkD,aAAe,IAAGgK,EAAOA,EAAK5yC,IAAI0lC,kBAAkB,GAAGoK,QAAQvlB,cACpFmb,kBAAkB,GAAGkD,aAAe,IAAGgK,EAAOA,EAAK5yC,IAAI0lC,kBAAkB,GAAGoK,QAAQvlB,eAErFmb,kBAAkB,GAAGkD,aAAe,IACtCgK,EAAOA,EAAK7mB,eAAe2Z,kBAAkB,GAAG6J,UAG9Cx+C,OAAOia,SAASo4B,QAAUiU,aAAarsC,SAASssC,aAClD1E,EAAOglJ,eAAehlJ,IAGpBtR,QAAQzN,UACV+e,EAAOtR,QAAQiM,WAAWqF,GACjBthC,EAAEuiB,UACX+e,EAAOA,EAAK5yC,IAAI,IACPsR,EAAEkmC,iBACX5E,EAAOA,EAAK5yC,IAAI,OAGdq3C,aAAa4J,cAAc3J,YAAcjmB,eAAe,IAAIpD,WAC9D2kB,EAAOA,EAAK5yC,IAAI,KAGd6kD,GAAkB,IAAI52B,UAAUl9B,OAAOorD,QAAQE,oBAAoBC,eAAevrD,OAAOorD,QAAQC,WAAW,IAAI,IAClHxJ,EAAOA,EAAK5yC,IAAI6kD,GAAkB,IAAI/5B,gBAAgB,KAEjD8nB,EAGLpF,kBACF,MAAM9C,EAAOvoD,KAAKuoD,KAClB,QAAIhF,kBAAkB,GAAG7R,WACvB6R,kBAAkB,IAAI7R,WACrBoS,QAAQpS,WAAa6W,EAAOzE,QAAQC,sBAGhC/jD,KAAKmrD,YAAY/zC,GAAG,GAGzBoa,eACF,OAAOxxB,KAAKs1B,UAGVV,qBACF,IAAId,EAAW9zB,KAAKwgG,gBAEpB,OADGj9C,kBAAkB,IAAIkD,aAAe,IAAG3yB,EAAWjzB,KAAKgd,IAAIiW,EAAUyvB,kBAAkB,IAAI6J,OAAOhlB,cAC/FtU,EAGLupC,sBACF,OAAO,IAAIr0D,QAAQhJ,KAAKy9D,kBACrB7zB,eAA8B,IAAf5pC,KAAKwyT,MAAc50P,eAAel1C,SAAW,MAC5D7K,IAAIymC,iBAAiB,IAAI3b,gBAAgB,IAG1CzT,gBAEF,OAAOl1B,KAAKolC,KAAKk4B,WAAa,GAG5B+7B,kBACF,GAAI5nD,SAASC,UACX,OAAO,EAGR,MAAM9jC,EAAK+xC,GAAGC,QAAQ8N,kBAAkBviB,YAAcoY,kBAAkB,IAAIkD,aAAe,IAAM5U,MAAMC,SAAYyR,kBAAkB,IAAIoK,QAAQvlB,YAAc,EAC/J,IAAIl0B,EAAiB,GAAblU,KAAKuoD,KAAY,KAAOsE,IAAmB8pN,aAAe/oQ,EAElE,OADIgB,OAAO2pC,UAAU8vB,QAAQ90D,SAAS,OAAMW,EAAiB,GAAblU,KAAKuoD,KAAY,KAAQ1nD,KAAKuH,IAAIvH,KAAKuT,MAAMw8B,GAAAA,WAAAA,MAAAA,UAAoC,IAAO,KAAQ/vC,KAAKuH,IAAIvH,KAAKuT,MAAMw8B,GAAAA,WAAAA,MAAAA,UAAoC,KAAMhjC,GACvMsG,EAGNw4B,eACF,OAAO1sC,KAAKk1B,WAAal1B,KAAKq5F,YAG5B4/K,sBACF,OAAOj5Q,KAAKs1B,UAAU1f,MAAM5M,QAAQ6U,IAAI7d,KAAK40B,eAAgB50B,KAAKq5F,cAGhEz0C,qBACF,GAAG/S,MAAMC,SAAU,OAAO,EAC1B,IAAI9xC,KAAKmrC,WAAY,OAAO,EAC5B,IAAIwU,GAAGuR,gBAAiB,OAAO,EAC/B,MAAMt6B,EAAWga,GAAAA,eAAAA,MAAAA,QACXte,EAAUzxB,KAAKuT,MAAMpU,KAAK40B,gBAC1B0B,EAAUt2B,KAAKwxB,SAASpd,QAC9B,IAAI8iB,GAAaN,EAAWN,GAAShE,EAGrC,OAFA4E,GAAa,EAAwC,GAApC4sB,QAAQgB,0BACH5tB,EAAYr2B,KAAK2H,SAAS0uB,EAAWl3B,KAAKq5F,aACzDx4F,KAAK4H,SAASyuB,EAAW,GAG9Bi0B,kBAEF,OAAOnrD,KAAKkS,OAAO9J,IAAwB,GAApBpI,KAAK4kD,gBAG9Bu3H,cACEn8K,KAAKkS,OAAS,IAAIlJ,QAAQhJ,KAAKs9D,YAGjCw+G,YACE97K,KAAK2rC,KAAO,IAAI3iC,QAAQhJ,KAAKwxB,UAC7BxxB,KAAKkS,OAASmJ,EAAAA,GACdrb,KAAKmxD,OAAS,EACdnxD,KAAKs9D,WAAa,EAClBt9D,KAAKmrC,YAAa,EAGpBI,SACE,QAAIvrC,KAAKmrC,cACJnrC,KAAK6kN,YACV7kN,KAAKmrC,YAAa,EAClBppC,SAASe,SAASY,WAAW+B,4BAA6BzF,KAAKuoD,MAC7C,IAAdvoD,KAAKuoD,MAAe1b,eAAemsB,oBACrC6R,IAAImtE,WAAWtvH,SAASlO,QAEnB,GAIT4kN,YACE,IAAKp/N,KAAKmrC,WAAY,OAAOnrC,KAAKurC,SAClC,IAAKvrC,KAAK4rC,uBAAwB,OAAO,EACzC,GAAI0Y,iBAAiB,IAAIkpG,mBAAoB,CAC3C,MAAMyvM,EAA2B,IAAdj9V,KAAKuoD,KACpB,oCACA,kDAEJ,OADAjE,iBAAiB,IAAIqoH,oBAAoBswL,IAClC,EAaT,OAVArsT,GAAAA,eAAAA,SAAiC5wC,KAAK2rC,MACtC3rC,KAAK2rC,KAAO3iC,QAAQuxB,MAAMv6B,KAAK2rC,KAAK/1B,MAAM5V,KAAK40B,iBAE/C50B,KAAKkS,OAASlS,KAAKkS,OAAO+E,KAAK,IAC/BjX,KAAKs9D,YAAc,GAEf/Z,kBAAkB,GAAG7R,YACvB9iC,OAAOkwI,WAAa,IAGf,EAGT5F,OAAO7jE,GACL,IAAKr1E,KAAK4rC,uBAAwB,OAAO,EACzC,GAAI0Y,iBAAiB,IAAIkpG,mBAAoB,CAC3C,MAAMyvM,EAA2B,IAAdj9V,KAAKuoD,KACpB,oCACA,kDAEJ,OADK8sB,GAAM/wB,iBAAiB,IAAIqoH,oBAAoBswL,IAC7C,EAGT,IAAIC,EAAwBl9V,KAAKq5F,YAAcr5F,KAAKk1B,UAChDquB,kBAAkB,GAAG7R,YACvBwrT,EAAwBr8V,KAAK2H,SAAS00V,EAAuBtuV,OAAOkwI,YAGtE,MAAMq+M,EAAc,IAAIzoU,kBACtBkc,GAAAA,eAAAA,MACA5wC,KAAK2rC,KACL3rC,KAAK40B,eACLsoU,GAEF,QAAIC,EAAYjoU,WAAa,KAE7B0b,GAAAA,eAAAA,SAAiCusT,EAAYxrU,WAC7C3xB,KAAK2rC,KAAO3rC,KAAK2rC,KAAK/1B,MAAMunV,EAAYhoU,qBAExCn1B,KAAKkS,OAASlS,KAAKkS,OAAO+E,KAAK,GAAKkmV,EAAYjoU,WAChDl1B,KAAKs9D,YAAc,GAAK6/R,EAAYjoU,UAEhCquB,kBAAkB,GAAG7R,YACvB9iC,OAAOkwI,WAAaq+M,EAAYjoU,YAG3B,IASJ,MAAMioC,IAAoBy/R,IAAuBtqL,iBAE3CzlH,IAAqB,CAIhCR,IAAK8Q,IAAkBp1D,MAAM4F,UAC7B6vD,kBAAmB,IAEnB6nJ,aACMloJ,IAAkB,GAAGhyB,YACzBnrC,KAAK0pH,OAAOn+E,UAGdm+E,OACE,GAAIvsD,IAAkB,GAAGhyB,WACvB,KAAM,uCACR,OAAOnrC,KAAKqsD,IAAIrgD,OAAMokD,IAAQA,EAAIjlB,cAGpCgxI,cACEvrI,GAAAA,cAAAA,QACA,IAAK,MAAM0+H,KAAaziH,IAAmBR,IACzCijH,EAAU6M,eAIdL,YACE,IAAK,MAAMxM,KAAaziH,IAAmBR,IACzCijH,EAAUwM,aAIV2pI,kBACF,OAAO5kT,KAAKuM,MAAM83C,WAAWugQ,gBAG3B9uC,kBACF,IAAIymF,EAAKp9V,KAAKw9D,kBAAoBx9D,KAAKylT,YAEvC,OADI72S,OAAO2pC,UAAU8vB,QAAQ90D,SAAS,OAAM6pV,GAAav8V,KAAKuH,IAAIvH,KAAKuT,MAAMw8B,GAAAA,WAAAA,MAAAA,UAAoC,IAC1GwsT,GAGT/rU,SACE,OAAQkyB,kBAAkB,GAAG7R,YAC1B6R,kBAAkB,IAAI7R,aACrB6R,kBAAkB,GAAG7R,WAAa9iC,OAAOkwI,UAAY,IAG3D2iK,aACE,OAAOzhT,KAAKqxB,WAAakyB,kBAAkB,GAAG7R,WAGhDrE,KAAK4pF,GACH,IAAK,IAAI1uE,EAAO,EAAGA,EAAO,EAAGA,IAC3B4U,IAAkB5U,GAAMyqQ,kBAAkB71P,IAAkB5U,EAAO,GAAI,IAAIv/C,QAAQiuH,GAAM1gH,IAAI,KAE3FgtC,kBAAkB,GAAG7R,UAClByc,gBAAgB,IAAIzc,WACvByrB,IAAkB,GAAG61P,kBAAkB/nQ,oBAAoB,GAAIgsE,GAIjE95D,IAAkB,GAAG41P,gBAAgBniR,GAAAA,cAAwBqmF,GAG/DroH,OAAO+0C,kBAAkB56B,QAAQ66B,OAASh1C,OAAO+0C,kBAAkB56B,QAAQ66B,OACxEn7C,SAAS00D,IAAkB,GAAGjrD,SAGnC8oM,gBACE,GAAKnzI,kBAAkBw0B,aAAajqD,YAAa+qB,IAAkB,GAAGhyB,WACtE,IAAK,MAAMmkI,KAAatvK,KAAKqsD,IAE3B,IAAKijH,EAAU/jI,SAAU,OAK7B2tG,SAEE,MAAM27K,EAAqB70T,KAAKqsD,IAAIzpD,QAAO0sK,GAAaA,EAAU/jI,WAGlEspR,EAAmBlpT,QAAQo4B,UAAUtvB,SAAQ66J,IACf,IAAxBA,EAAUp6I,WAAiBo6I,EAAU8vD,eAI3Cy1F,EAAmBpgT,SAAQ66J,GAAaA,EAAUp2B,QAAO,MAGvDrmF,0BACF,MAAMjlD,EAAI+xC,GAAGC,QAAQ6W,gBAAgBtrB,WAAa,EAAGtqC,KAAKuH,IAAI,EAAGY,QAAQZ,IAAIwoC,GAAAA,YAAAA,MAA2B,GAAGx8B,SAAW,IAAQ,EACxHF,EAAIyrC,GAAGC,QAAQyjC,uBAAuBl4C,WAAatqC,KAAKuT,MAAMvT,KAAKuH,IAAI88C,WAAWC,eAAe,IAAM,EAEvG88O,EAAItiP,GAAGC,QAAQ4kC,6BAA6Br5C,WAAa,IAAOtqC,KAAKuM,MAAMuyC,GAAGksB,KAAKxmB,QAAQvI,MAAQ,IAAM,EACzGjiB,EAAI2qB,UAAU,KAAK1Z,SAAW0Z,UAAU,KAAK7c,gBAAgB,GAAI,EACvE,IAAIyiB,EAAamC,WAAWwG,QAAQtG,WAAW,GAAG9kB,gBAAgB,GAIlE,OAHI/5B,OAAOorD,QAAQE,oBAAoBC,gBACrC/O,GAAe2L,GAAoBQ,QAAQD,YAAY1oD,OAAOorD,QAAQC,WAAW,MAE3E,EAAIvU,uBAAuB,gBAAkB2H,aAAaqvB,cAAc/zC,gBAAgB,GAAK/6B,EAAIsG,EAAI+tR,EAAIpnQ,GAAKuwB,IC1enH,SAAS4hP,IAAuBzkP,EAAM8sB,GAAO,GAClD,MAAMjlB,EAAMrJ,IAAcwB,GAC1B,GAAIxB,IAAcwB,GAAM4I,QAAUpK,IAAcwB,GAAM8wC,YAAa,OAAO,EAC1E,GAAI9wC,EAAO,EAAG,CACZ,IAAK/C,UAAUg4C,cAAcj1C,GAAMzc,SAAU,OAAO,EACpD,GAAIgN,eAAe,IAAI00G,oBAAsB58G,SAASO,eAAejgB,IAAIk/B,EAAIzkB,MAE3E,OADK0pC,GAAMv8B,eAAe,IAAI6zH,uBACvB,EAGX,OAAI/7H,SAASO,eAAez5B,GAAG04C,EAAIzkB,UAC/B8F,SAASC,WAAa0e,EAAIe,OAAS,KACnC7M,iBAAiB,IAAIkpG,oBAAsBjqG,kBAAkB,GAAGkD,YAAc,GAC3E4uB,GACH/wB,iBAAiB,IAAIqoH,oBAAqB,2FAGrC,IAGT/7H,SAASO,eAAelF,SAASmkB,EAAIzkB,MACrCykB,EAAIl+C,OAASk+C,EAAIl+C,OAAO+E,KAAK,GAC7Bm5C,EAAIe,QAAU,EACdf,EAAIzkB,KAAOykB,EAAIp/B,SAASo/B,EAAIe,QACzBpK,IAAcwB,GAAM4I,OAASpK,IAAcwB,GAAM8wC,cAAatyC,IAAcwB,GAAM4I,OAASpK,IAAcwB,GAAM8wC,cAC3G,KAGF,SAAS+iF,MACd,IAAK,MAAMhsH,KAAOtD,IAAeT,IAAK+D,EAAIl+C,OAAS,IAAIlJ,QAAQonD,EAAIe,QACnE+1B,MAGK,SAAS60F,MACd,IAAK,MAAM3rH,KAAOtD,IAAeT,IAC/B+D,EAAIzkB,KAAO,IAAI3iC,QAAQonD,EAAI5+B,UAC3B4+B,EAAIl+C,OAASmJ,EAAAA,GACb+0C,EAAIe,OAAS,EAIV,SAASq8O,MACd,MAAMmvD,EAAaj2R,UAAU82B,cAAc,GAAG5yC,SAC9C,IAAK,IAAIppD,EAAI,EAAGA,EAAI,EAAGA,IACrBklE,UAAU82B,cAAch8F,GAAGopD,UAAY+xS,EAIpC,SAASjwD,IAAoBnkP,EAAM80S,EAAiB,EAAGC,GAAW,GACvE,MAAMC,EAAW3sT,SAASO,eAAerpC,MAAM8N,MAAMynV,GAC/CjtS,EAAMrJ,IAAcwB,GAC1B,GAAIg1S,EAAS7lV,GAAG04C,EAAIzkB,MAAO,OAAO,EAClC,GAAIob,IAAcwB,GAAM4I,QAAUpK,IAAcwB,GAAM8wC,YAAa,OAAO,EAC1E,GAAI9wC,EAAO,EAAG,CACZ,IAAK/C,UAAUg4C,cAAcj1C,GAAMzc,SAAU,OAAO,EACpD,GAAIgN,eAAe,IAAI00G,mBAErB,OADK8vM,GAAUxkT,eAAe,IAAI6zH,uBAC3B,EAGX,GAAIroH,iBAAiB,IAAIkpG,oBAAsBjqG,kBAAkB,GAAGkD,YAAc,EAKhF,OAJK62S,GACHh5S,iBAAiB,IAAIqoH,oBAAqB,2FAGrC,EAET,GAAIl7H,SAASC,UAAW,OAAOs7P,IAAuBzkP,GACtD,IAAIyf,EAAO,KACX,IACEA,EAAOx3C,oBAAoB+sU,EAAU,CACnC3sU,aAAcugC,GAAUf,EAAIp/B,SAASmgC,GACrCpgC,YAAY,EACZF,UAAWu/B,EAAIzkB,MACdykB,EAAIe,QAET,SAEE,OADAf,EAAIe,OAASpK,IAAc,GAAGsyC,aACvB,EAET,QAAKrxB,IACLp3B,SAASO,eAAelF,SAAS+7B,EAAK52C,eACtCg/B,EAAIl+C,OAASk+C,EAAIl+C,OAAO+E,KAAK+wD,EAAK72C,UAClCi/B,EAAIe,QAAU6W,EAAK72C,SACnBi/B,EAAIzkB,KAAOykB,EAAIp/B,SAASo/B,EAAIe,QACzBpK,IAAcwB,GAAM4I,OAASpK,IAAcwB,GAAM8wC,cAAatyC,IAAcwB,GAAM4I,OAASpK,IAAcwB,GAAM8wC,cAC3G,GAGF,SAASk0M,MAEd,IAAK,IAAI/rS,EAAI,EAAGA,EAAI,GAAiC,IAA5BulD,IAAcvlD,GAAG2vD,OAAc3vD,IACtDwrS,IAAuBxrS,GAAG,GAI5B,IAAK,IAAIA,EAAI,EAAGA,EAAI,EAAGA,IACrBkrS,IAAoBlrS,EAAG,KAAM,GAI/B,MAAMqzT,EAAqB/nQ,IAAeT,IAAIzpD,QAAO++B,GAAKA,EAAEwJ,aAC5D,IAAK,IAAIlxB,EAAO,EAAGA,EAAO,IAAMA,IAAQ,CACtC,MAAMujV,EAAc3oC,EAAmBpoT,QAAO,CAAChD,EAAGC,IAAOA,EAAEiiC,KAAKza,IAAIznB,EAAEkiC,MAAQliC,EAAIC,IAClF,IAAKsjS,IAAuBwwD,EAAYj1S,MAAM,GAAO,OAIlD,SAASinG,MACd,IAAI/+F,EAAO,IAAIznD,QAAQirD,aAAaG,gBAAgBD,aACjDvqB,eACCoP,YAAY,KACZA,YAAY,KACZwM,UAAU,IACVA,UAAU,KACVA,UAAU,KACVA,UAAU,KACVA,UAAU,KACVjC,kBAAkB,IAAI6J,OACtBhG,gBAAgBma,WAChBna,gBAAgBoa,eAChBpa,gBAAgBqa,eAChBld,WAAW0H,aAAe1H,WAAWryC,OAAOkF,GAAG,GAAKy5C,gBAAgB6Q,iBAAmB,KACvF7vB,MAAMC,SAAW,KAAOgH,eAAe,IACvCua,gBAAgBC,eAChB/F,WAAWoU,OAuBf,OApBGpe,kBAAkB,GAAGkD,aAAe,IACrCgK,EAAOA,EAAK7mB,eAAe2Z,kBAAkB,GAAG6J,SAE/C7J,kBAAkB,IAAIkD,aAAe,IACtCgK,EAAOA,EAAK7mB,eAAe2Z,kBAAkB,IAAI6J,SAE/C7J,kBAAkB,GAAG7R,YACvB+e,EAAOA,EAAK76C,MACV5M,QAAQ6U,IACNhd,KAAK4H,SAASmoC,SAAS+hB,cAAc7qD,MAAM+V,IAAIgvC,mBAAmBgG,oBAAsB,GAAGv+C,OAAQ,GACnG,GACC7L,SAAS,KAGZk3C,GAAGC,QAAQ6W,gBAAgBtrB,aAAYslB,EAAOA,EAAK5yC,IAAI,EAAM+yB,SAAS2R,YAAYz6C,MAAMW,SAAS,GAAI2L,QAAU,OAC/GurC,GAAGC,QAAQ8N,kBAAkBviB,YAAcoY,kBAAkB,GAAGkD,aAAe,IAAM5U,MAAMC,WAAU2e,EAAOA,EAAK5yC,IAAI0lC,kBAAkB,GAAGoK,QAAQvlB,cAClJuX,GAAGC,QAAQ8N,kBAAkBviB,YAAcoY,kBAAkB,IAAIkD,aAAe,IAAM5U,MAAMC,WAAU2e,EAAOA,EAAK5yC,IAAI0lC,kBAAkB,IAAIoK,QAAQvlB,cACpJuX,GAAGC,QAAQif,+BAA+B1zB,aAC5CslB,EAAOA,EAAK5yC,IAAIs1C,SAASC,MAAMzqB,gBAAgB,GAAI,KAE9C8nB,EAGF,SAASy2B,MACd,IAAK,IAAI1lF,EAAI,EAAGA,GAAK,EAAGA,IAAK,CAC3B,MAAM4uD,EAAMrJ,IAAcvlD,GAC1B4uD,EAAIzkB,KAAOykB,EAAIp/B,SAASo/B,EAAIe,SAIhC,MAAMssS,YAA2BlrC,GAC/BvwT,YAAYumD,GACVrvC,OAAM,IAAMtK,OAAOopI,WAAWpvH,MAAM2/B,GACpC,MAAM88P,EAAa,CAAC,KAAMhqS,EAAAA,GAAOA,EAAAA,GAAOA,EAAAA,GAAOA,EAAAA,GAAOA,EAAAA,MAAUA,EAAAA,MAAUA,EAAAA,MAAUA,EAAAA,OACpFrb,KAAKs1B,UAAY+vR,EAAW98P,GAC5B,MAAMu0S,EAAa,CAAC,KAAM,EAAG,EAAG,GAAI,GAAI,MAAO,MAAO,OAAQ,QAC9D98V,KAAKwgG,gBAAkBs8P,EAAWv0S,GAClC,MAAMm1S,EAAwB,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,IAAK,IAAK,IAAK,KAC5E19V,KAAK29V,oBAAsBD,EAAsBn1S,GACjD,MAAMq1S,EAAkB,CAAC50V,QAAQu+D,iBAAkBlsD,EAAAA,MAAUA,EAAAA,OAC7Drb,KAAKygG,wBAA0Bm9P,EAI7BjyT,WACF,OAAO3rC,KAAKolC,KAAKuG,KAIfA,SAAK7jC,GAAS9H,KAAKolC,KAAKuG,KAAO7jC,EAEnCkpB,SAASmgC,GACP,GAAInxD,KAAKwyT,MAAQ,GAAKrhQ,EAASnxD,KAAK69V,mBAAoB,CACtD,MAAMlyT,EAAO3iC,QAAQ6U,IAAI7d,KAAK40B,eAAgBu8B,GAAQv7C,MAAM5V,KAAKwxB,UACjE,OAAI+7B,WAAWwG,QAAQtG,WAAW,GAAG/kB,aAC5BiD,EAAKp1B,IAAI,UAAUsH,IAAI,IAEzB8tB,EAGT,MAAMmyT,EAAoB,CAAC,EAAG,IAAK,KACnC,IAAK,IAAIt8V,EAAI,EAAGA,EAAIxB,KAAKygG,wBAAwBl9F,OAAQ/B,IAAK,CAC5D,MAAMmqC,EAAO3iC,QAAQ6U,IAAI7d,KAAK40B,eAAiBkpU,EAAkBt8V,GAAI2vD,GAAQv7C,MAAM5V,KAAKwxB,UACxF,GAAIma,EAAKj0B,GAAG1X,KAAKygG,wBAAwBj/F,IAAK,OAAOmqC,EAGvD,IAAInH,EAAOxkC,KAAK40B,eACZ50B,KAAKwyT,OAAS,IAAGhuR,GAAQ,KAC7B,MAAMz6B,EAAW/J,KAAK69V,oBAAsB1sS,EAASnxD,KAAK69V,oBAAsB/wS,IAAeixS,kBACzFpyT,EAAO3iC,QAAQ6U,IAAI2mB,EAAMz6B,GAAU6L,MAAM5V,KAAKwxB,UAEpD,OAAI+7B,WAAWwG,QAAQtG,WAAW,GAAG/kB,cAAgB1oC,KAAKwyT,MAAQ,EACzD7mR,EAAKp1B,IAAI,UAAUsH,IAAI,IAEzB8tB,EAGLR,iBACF,OAAOnrC,KAAKwyT,MAAQ,GAAKhtQ,UAAUg4C,cAAcx9F,KAAKwyT,OAAO1mR,SAG3DF,6BACF,OAAO5rC,KAAK0rC,aAGVA,mBACF,OAAOkF,SAASO,eAAejgB,IAAIlxB,KAAK2rC,MAGtCyf,iBACF,MAAM7C,EAAOvoD,KAAKwyT,MAElB,GAAIjvQ,kBAAkB,IAAI7R,UAAW,OAAOr2B,EAAAA,GAC5C,IAAIo1C,EAAOiuB,UAAU8wE,8BAA8B1nJ,MAChD8hC,eACU,IAAT2e,EAAa/C,UAAU,IAAM,KACpB,IAAT+C,EAAa/C,UAAU,KAAO,KACrB,IAAT+C,EAAa/C,UAAU,IAAM,KACpB,IAAT+C,EAAa/C,UAAU,KAAO,KAC9BA,UAAU,MAGd,MAAM4K,EAAMrJ,IAAcwB,GACpBzgD,EAAQ63C,GAAGuR,gBAAkBd,EAAIxL,eAAewL,EAAIe,OAC1D,IAAIvjD,GAAI+xC,GAAGC,QAAQojC,qBAAqB73C,YAA8B,IAATod,EAC7D,MAAM4I,EAASvjD,EAAI/M,KAAK2H,SAASV,EAAO,KAAOA,EA4B/C,OA3BA2oD,EAAOA,EAAK76C,MAAM5M,QAAQ6U,IAAIuyC,EAAIiN,gBAAiBlM,IAEnDV,EAAOA,EAAK5yC,IAAI6nC,uBAAuB,YACvC+K,EAAOA,EAAK5yC,IAAI6nC,uBAAuB,sBACvC+K,EAAOA,EAAK5yC,IAAI6nC,uBAAuB,qBACvC+K,EAAOA,EAAKvmB,YAAYmpB,gBAAgBzqC,MACxC6nC,EAAOA,EAAK5yC,IAAI8hC,GAAG8T,eACnBhD,EAAOA,EAAK5yC,IAAIymC,iBAAiB,IAAI3b,gBAAgB,IACrD8nB,EAAOA,EAAKvmB,YAAYqjB,WAAWwG,UAE/BnlD,OAAOia,SAASo4B,QAAUiU,aAAarsC,SAASssC,aAClD1E,EAAOglJ,eAAehlJ,IAGpBtR,QAAQzN,UACV+e,EAAOtR,QAAQiM,WAAWqF,GACjBthC,EAAEuiB,UACX+e,EAAOA,EAAK5yC,IAAI,IACPsR,EAAEkmC,iBACX5E,EAAOA,EAAK5yC,IAAI,OAGdjP,OAAOorD,QAAQE,oBAAoBC,gBACrC1J,EAAOA,EAAK5yC,IAAIk5C,GAAoBuB,IAAIG,MAAM7pD,OAAOorD,QAAQC,WAAW,KACrEyI,GAAkB,IAAI52B,UAAUl9B,OAAOorD,QAAQC,WAAW,IAAI,IAAGxJ,EAAOA,EAAK5yC,IAAI6kD,GAAkB,IAAI/5B,gBAAgB,MAGrH8nB,EAGL/F,0BACF,GAAInH,kBAAkB,GAAG7R,WAAa6R,kBAAkB,IAAI7R,WAC3DoS,QAAQpS,WAAa1xC,KAAKuoD,KAAOzE,QAAQC,oBACxC,OAAO1oC,EAAAA,GAET,GAAIkoC,kBAAkB,IAAI7R,UACxB,OAAO1xC,KAAKmrD,YAEd,IAAIypQ,EAAa50T,KAAKmrD,YAAYv1C,MAAM5V,KAAKorD,YAO7C,OANI7H,kBAAkB,GAAG7R,YACvBkjR,EAAaA,EAAWh/S,MAAM4tC,UAAUC,YAEvB,IAAfzjD,KAAKwyT,OAAgBjvQ,kBAAkB,GAAG7R,YAC5CkjR,EAAaA,EAAW/2S,IAAI6nC,uBAAuB,kBAE9CkvQ,EAGL31F,mBACF,MAAM12K,EAAOvoD,KAAKwyT,MAClB,IAAI+iC,EAASl6U,EAAAA,GACA,IAATktC,EACE5I,GAAGC,QAAQ8N,kBAAkBviB,YAAYoY,kBAAkB,GAAGoK,QAAQ9kB,aAAYlW,GAAK4iU,EAAS5iU,IAEpG4iU,EAASxuS,IAAcwB,EAAO,GAAGmC,oBAEnC,MAAM/hD,EAAUK,QAAQZ,IAAIpI,KAAKmrD,YAAa,GAC9C,OAAOoqS,EAAO3/U,MAAM,IAAIuB,UAAUxO,GAASiN,MAAM4/C,4BAG/CnK,kBACF,MAAM9C,EAAOvoD,KAAKuoD,KAClB,QAAIhF,kBAAkB,GAAG7R,WACvB6R,kBAAkB,IAAI7R,WACrBoS,QAAQpS,WAAa6W,EAAOzE,QAAQC,sBAGhC/jD,KAAKmrD,YAAY/zC,GAAG,GAGzBoa,eACF,OAAOxxB,KAAKs1B,UAGVV,qBACF,OAAO50B,KAAKwgG,gBAGVnjC,sBACF,OAAOhiD,EAAAA,GAAAA,eAC0B,IAAfrb,KAAKwyT,MAAc50P,eAAeh1C,KAAO,MACxD/K,IAAIymC,iBAAiB,IAAI3b,gBAAgB,IAG1Ck1T,yBACF,OAAO79V,KAAK29V,oBAGVv+K,6BACF,OAAOp/K,KAAKygG,wBAGV6rM,yBACF,OAAOtsS,KAAKwyT,MAAQ,GACjBhtQ,UAAUg4C,cAAcx9F,KAAKwyT,OAAO9mR,cAAgB8Z,UAAUg4C,cAAcx9F,KAAKwyT,MAAQ,GAAG1mR,SAG7FutD,kBACF,IAAI2kQ,EAAG,KAEP,OADIpvV,OAAO2pC,UAAU8vB,QAAQ90D,SAAS,OAAMyqV,GAAWn9V,KAAKuH,IAAIvH,KAAKmyB,KAAKnyB,KAAKuT,MAAMw8B,SAAS0pB,WAAWxyD,MAAMiC,SAAS,IAAI,IACrHi0V,EAGLtxT,eACF,OAAO1sC,KAAKmxD,QAAUnxD,KAAKq5F,YAGzBz0C,qBACF,GAAG/S,MAAMC,SAAU,OAAO,EAC1B,IAAI9xC,KAAKmrC,WAAY,OAAO,EAC5B,IAAIwU,GAAGuR,gBAAiB,OAAO,EAC/B,MAAM+sS,EAAiB,CAAC,KAAM,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAGj+V,KAAKuoD,MAC7D21S,EAAkB,CAAC,KAAM,KAAM,KAAM,IAAK,IAAK,EAAG,EAAG,EAAG,GAAGl+V,KAAKuoD,MAChE41S,EAAen+V,KAAK69V,mBACpBptS,EAAOzwD,KAAK40B,eAEZgC,EAAWga,SAASO,eAAerpC,MAAMsM,QAC/C,IAAIke,EAAUzxB,KAAKuT,MAAMq8C,GACrBn6B,EAAUt2B,KAAKwxB,SAASpd,QACxB8iB,GAAaN,EAAWN,GAAShE,EAiBrC,OAfGtyB,KAAKuoD,KAAO,IACVrxB,EAAY+mU,IACb3rU,EAAUzxB,KAAKuT,MAAW,IAALq8C,GACrBn6B,EAAUt2B,KAAKgxB,SAASitU,GAAgB7pV,QACxC8iB,EAAY+mU,GAAkBrnU,EAAWN,GAAShE,GAEjD4E,EAAYgnU,IACb5rU,EAAUzxB,KAAKuT,MAAW,IAALq8C,GACrBn6B,EAAUt2B,KAAKgxB,SAASitU,GAAgB7pV,QACxC8iB,EAAYgnU,GAAmBtnU,EAAWN,GAAShE,IAGvD4E,EAAYr2B,KAAKC,IAAIo2B,GAAYA,EAAUinU,GAAcrxS,IAAeixS,kBAAoBI,GAC5FjnU,GAAa,EAAI4sB,QAAQgB,0BACzB5tB,EAAYr2B,KAAK2H,SAAS0uB,EAAWl3B,KAAKq5F,aACnCx4F,KAAK4H,SAASyuB,EAAW,GAG9Bi0B,kBACF,OAAOnrD,KAAKkS,OAAO9J,IAAIpI,KAAK4kD,gBAG9BkgF,YACM9kI,KAAKmrC,YACTqa,UAAUg4C,cAAcx9F,KAAKwyT,OAAOxmR,YASjC,MAAM+a,IAAgB02S,IAAmBnrL,iBAEnCxlH,IAAiB,CAI5BT,IAAKtF,IAAch/C,MAAM4F,UAErBowV,wBACF,OAAO,GAGT1wT,KAAK4pF,GACH,IAAK,IAAI1uE,EAAO,EAAGA,EAAO,EAAGA,IAC3BxB,IAAcwB,GAAMyqQ,kBAAkBjsQ,IAAcwB,EAAO,GAAI,IAAIv/C,QAAQiuH,GAAM1gH,IAAI,KAGnFgtC,kBAAkB,GAAG7R,UACvBqV,IAAc,GAAGisQ,kBAAkB71P,kBAAkB,GAAI85D,GAEzDlwE,IAAc,GAAGgsQ,gBAAgBniR,SAASoX,WAAYivE,GAGrD1zE,kBAAkB,GAAGkD,aAAe,GAAIlD,kBAAkB,GAAG6J,OAAOvkB,aAAY+rR,IACjFz3P,kBAAkB,GAAGjrD,OAASirD,kBAAkB,GAAGjrD,OAAO+E,KAAK29S,EAAWh/S,MAAM,IAAI5M,QAAQiuH,GAAM1gH,IAAI,YAMrG,SAAS+2R,MACd,IAAIvmP,IAAc,GAAG5b,WACrB,IAAK,IAAIod,EAAO,EAAGA,GAAQ,IAAKA,EAC1BxB,IAAcwB,GAAMpd,YACxB4b,IAAcwB,GAAMu8E,YCvajB,SAASwzK,IAA8B/vP,EAAM8sB,GAAO,GACzD,MAAMjlB,EAAMgoP,IAAqB7vP,GACjC,OAAI3X,SAAS6iD,cAAc/7E,GAAG04C,EAAIzkB,QAElCiF,SAAS6iD,cAAcxnD,SAASmkB,EAAIzkB,MACpCykB,EAAIl+C,OAASk+C,EAAIl+C,OAAO+E,KAAK,GAC7Bm5C,EAAIe,QAAU,EACdf,EAAIzkB,KAAOykB,EAAIp/B,SAASo/B,EAAIe,SACrB,GAGF,SAASitS,MACd,IAAK,MAAMhuS,KAAOkoJ,IAAsBjsJ,IAAK+D,EAAIl+C,OAAS,IAAIlJ,QAAQonD,EAAIe,QAC1EktS,MAGK,SAASC,MACd,IAAK,MAAMluS,KAAOkoJ,IAAsBjsJ,IACtC+D,EAAIzkB,KAAO,IAAI3iC,QAAQonD,EAAI5+B,UAC3B4+B,EAAIl+C,OAASmJ,EAAAA,GACb+0C,EAAIe,OAAS,EAIV,SAASgnP,IAA2B5vP,EAAM80S,EAAiB,EAAGC,GAAW,GAC9E,MAAMC,EAAW3sT,SAAS6iD,cAAc3rF,MAAM8N,MAAMynV,GAC9CjtS,EAAMgoP,IAAqB7vP,GACjC,GAAIg1S,EAAS7lV,GAAG04C,EAAIzkB,MAAO,OAAO,EAClC,IAAIq8B,EAAO,KACX,IACEA,EAAOx3C,oBAAoB+sU,EAAU,CACnC3sU,aAAcugC,GAAUf,EAAIp/B,SAASmgC,GACrCpgC,YAAY,EACZF,UAAWu/B,EAAIzkB,MACdykB,EAAIe,QAET,SAEE,OADAf,EAAIe,OAAS,MACN,EAET,QAAK6W,IACLp3B,SAAS6iD,cAAcxnD,SAAS+7B,EAAK52C,eACrCg/B,EAAIl+C,OAASk+C,EAAIl+C,OAAO+E,KAAK+wD,EAAK72C,UAClCi/B,EAAIe,QAAU6W,EAAK72C,SACnBi/B,EAAIzkB,KAAOykB,EAAIp/B,SAASo/B,EAAIe,SACrB,GAGF,SAASsnP,MAEd,IAAK,IAAIj3S,EAAI,EAAGA,EAAI,GAAwC,IAAnC42S,IAAqB52S,GAAG2vD,OAAc3vD,IAC7D82S,IAA8B92S,GAAG,GAInC,IAAK,IAAIA,EAAI,EAAGA,EAAI,EAAGA,IACrB22S,IAA2B32S,EAAG,KAAM,GAItC,MAAMqzT,EAAqBv8G,IAAsBjsJ,IACjD,IAAK,IAAIpyC,EAAO,EAAGA,EAAO,IAAMA,IAAQ,CACtC,MAAMujV,EAAc3oC,EAAmBpoT,QAAO,CAAChD,EAAGC,IAAOA,EAAEiiC,KAAKza,IAAIznB,EAAEkiC,MAAQliC,EAAIC,IAClF,IAAK4uS,IAA8BklD,EAAYj1S,MAAM,GAAO,OAIzD,SAASmnG,MACd,IAAIj/F,EAAO,IAAIznD,QAAQ,GACvB,OAAOynD,EAGF,SAAS4tS,MACd,IAAK,IAAI78V,EAAI,EAAGA,GAAK,EAAGA,IAAK,CAC3B,MAAM4uD,EAAMgoP,IAAqB52S,GACjC4uD,EAAIzkB,KAAOykB,EAAIp/B,SAASo/B,EAAIe,SAIhC,MAAMotS,YAAkChsC,GACtCvwT,YAAYumD,GACVrvC,OAAM,IAAMtK,OAAOopI,WAAWE,aAAa3vF,GAC3C,MAAM88P,EAAa,CAAC,KAAM,IAAIr8S,QAAQ,MAAO,IAAIA,QAAQ,MAAO,IAAIA,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAIA,QAAQ,SAAU,IAAIA,QAAQ,SAAU,IAAIA,QAAQ,aACtLhJ,KAAKs1B,UAAY+vR,EAAW98P,GAC5B,MAAMu0S,EAAa,CAAC,KAAM,GAAI,GAAI,IAAK,KAAM,KAAM,KAAM,OAAQ,QACjE98V,KAAKwgG,gBAAkBs8P,EAAWv0S,GAClC,MAAMm1S,EAAwB,CAAC,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACxE19V,KAAK29V,oBAAsBD,EAAsBn1S,GACjD,MAAMq1S,EAAkB,CAAC,IAAI50V,QAAQ,UAAW,IAAIA,QAAQ,UAAW,IAAIA,QAAQ,YACnFhJ,KAAKygG,wBAA0Bm9P,EAI7BjyT,WACF,OAAO3rC,KAAKolC,KAAKuG,KAIfA,SAAK7jC,GAAS9H,KAAKolC,KAAKuG,KAAO7jC,EAEnCkpB,SAASmgC,GACP,GAAInxD,KAAKwyT,MAAQ,GAAKrhQ,EAASnxD,KAAK69V,mBAAoB,CACtD,MAAMlyT,EAAO3iC,QAAQ6U,IAAI7d,KAAK40B,eAAgBu8B,GAAQv7C,MAAM5V,KAAKwxB,UACjE,OAAOma,EAGT,MAAMmyT,EAAoB,CAAC,EAAG,GAAI,KAClC,IAAK,IAAIt8V,EAAI,EAAGA,EAAIxB,KAAKygG,wBAAwBl9F,OAAQ/B,IAAK,CAC5D,MAAMmqC,EAAO3iC,QAAQ6U,IAAI7d,KAAK40B,eAAiBkpU,EAAkBt8V,GAAI2vD,GAAQv7C,MAAM5V,KAAKwxB,UACxF,GAAIma,EAAKj0B,GAAG1X,KAAKygG,wBAAwBj/F,IAAK,OAAOmqC,EAGvD,IAAInH,EAAOxkC,KAAK40B,eACZ50B,KAAKwyT,OAAS,IAAGhuR,GAAQ,KAC7B,MAAMz6B,EAAW/J,KAAK69V,oBAAsB1sS,EAASnxD,KAAK69V,oBAAsBvlJ,IAAsBylJ,kBAChGpyT,EAAO3iC,QAAQ6U,IAAI2mB,EAAMz6B,GAAU6L,MAAM5V,KAAKwxB,UAEpD,OAAOma,EAGLC,6BACF,OAAO5rC,KAAK0rC,aAGVA,mBACF,OAAOkF,SAAS6iD,cAAcviE,IAAIlxB,KAAK2rC,MAGrCyf,iBACF,MAAM7C,EAAOvoD,KAAKwyT,MAClB,IAAI/hQ,EAAOiuB,UAAUgxE,qCAAqC5nJ,MAE1D,MAAMsoD,EAAMgoP,IAAqB7vP,GAC3B4I,EAAUf,EAAIe,OAOpB,OANAV,EAAOA,EAAK76C,MAAM5M,QAAQ6U,IAAIuyC,EAAIiN,gBAAiBlM,IAE1C,GAAN5I,GACEwuP,sBAAsBvmM,iBAAiBrlE,aAAYslB,EAAOA,EAAK76C,MAAMmhS,sBAAsBvmM,iBAAiBpoE,cAG1GqoB,EAGL/F,0BACF,IAAIkqQ,EAAa50T,KAAKmrD,YAAYv1C,MAAM5V,KAAKorD,YAC7C,OAAOwpQ,EAGL31F,mBACF,MAAM12K,EAAOvoD,KAAKwyT,MAClB,GAAa,IAATjqQ,EACF,OAAOltC,EAAAA,GAET,MAAMk6U,EAASn9C,IAAqB7vP,EAAO,GAAGmC,oBACxC/hD,EAAUK,QAAQZ,IAAIpI,KAAKmrD,YAAa,GAC9C,OAAOoqS,EAAO3/U,MAAM,IAAIuB,UAAUxO,GAGhC0iD,kBACWrrD,KAAKuoD,KAClB,OAAOvoD,KAAKmrD,YAAY/zC,GAAG,GAGzBoa,eACF,OAAOxxB,KAAKs1B,UAGVV,qBACF,OAAO50B,KAAKwgG,gBAGVnjC,sBACF,OAAOhiD,EAAAA,GAGLwiV,yBACF,OAAO79V,KAAK29V,oBAGVv+K,6BACF,OAAOp/K,KAAKygG,wBAGV/zD,eACF,OAAO1sC,KAAKmxD,QAAUnxD,KAAKq5F,YAGzBluC,kBACF,OAAOnrD,KAAKkS,OAGVg7C,kBACF,IAAIt/C,EAAGgB,OAAOi/C,eAAehwC,IAAI,EAAGjP,OAAOi/C,eAAez5C,SAAW,IAAOmC,IAAI,KAAKnN,IAAI,GAAGsG,WAE5F,OADG2wF,GAAY,GAAGv0D,WAAUl+B,EAAGgB,OAAOi/C,eAAehwC,IAAI,EAAGjP,OAAOi/C,eAAez5C,SAAW,MAASmC,IAAI,KAAKnN,IAAI,GAAGA,IAAIvI,KAAKmyB,KAAKpkB,OAAOi/C,eAAez5C,SAAS,KAAK1E,YACjK9B,GAUJ,MAAMwqS,IAAuBmmD,IAA0BjsL,iBAEjDgmC,IAAwB,CAInCjsJ,IAAK+rP,IAAqBrwS,MAAM4F,UAE5BowV,wBACF,OAAO,GAGT1wT,KAAK4pF,GACH,IAAK,IAAI1uE,EAAO,EAAGA,EAAO,EAAGA,IAC3B6vP,IAAqB7vP,GAAMyqQ,kBAAkB5a,IAAqB7vP,EAAO,GAAI,IAAIv/C,QAAQiuH,GAAM1gH,IAAI,KAErG6hS,IAAqB,GAAG2a,gBAAgBniR,SAASid,eAAgBopE,KCvM9D,MAAM9+E,IAEXn2C,YAAYqmE,GAMV,OALAroE,KAAKq9U,cAAgB,CAAC,EAAG,GACzBr9U,KAAKs9U,eAAiB,GACtBt9U,KAAKuhH,iBAAmB,GACxBvhH,KAAK8nH,gBAAkB,GACvB9nH,KAAK0hH,SAAU,SACAr5C,GACb,IAAK,SAEClwB,IAAcC,oBAAoBiwB,IACpCroE,KAAKo1N,gBAAgBp1N,KAAKq1N,iBAAiBhtJ,IAAU,GAEvD,MACF,IAAK,SAEHroE,KAAKo1N,gBAAgB,IAAI/sJ,IAAU,GACnCroE,KAAK8nH,gBAAkB,IAAIz/C,GAC3B,MACF,IAAK,YAEH,MACF,QACE,MAAM,IAAI/6D,MAAM,+DAOI,2BAAC2gC,GACzB,GAAqB,KAAjBA,EAAM7/B,OACR,OAAO,EAET,IAAI09G,EAAO79E,EAAMuJ,WAAW,MAAQ,IAEpC,OADAW,IAAcinG,KAAK3qI,SAAQ,CAAC02G,EAAGv9G,IAAMk+G,EAAOA,EAAKt0E,WAAW,IAAIy/D,OAAQ,GAAErpG,MAAO,MAAO,MACjF,6DAAkDk+G,KAAKA,GAIrDijC,4BACT,MAAMA,EAAiBngJ,OAAO2pC,UAAU8vB,QAAQ/kE,KAAIuU,GAAK2tC,UAAU3tC,KAInE,OAH2C,IAAvCjJ,OAAO03E,UAAUzgC,SAASquB,UAC5B66E,EAAevsJ,KAAKgjD,UAAUwN,kBAAkBpkD,OAAO03E,UAAUzgC,SAASquB,WAErE66E,EAIa,uBAAC9gH,GACrB,IAAKjuC,KAAKo4C,oBAAoBnK,GAAQ,OAAO,EAC7C,MAAM/8B,EAAQ+8B,EAAMj8B,MAAM,KAC1B,OAAId,EAAM3N,OAAS,EAAU,EAEtBq0C,SAAS1mC,EAAM,GAAI,IAMJ,yBAACijM,EAAY9+H,GAAO,EAAMqsC,GAAU,GAC1D,IAAK,MAAM90G,KAAQunM,EAAY,CAC7B,MAAMU,EAAwB,kBAATjoM,EAAoB44C,UAAU54C,GAAQA,EACvDioM,IAAUA,EAAM/oK,UAAU+oK,EAAM7oK,SAASqpC,GAEzCqsC,GAAWmzF,aAAiBr4B,kBAAkBj5H,kBAAkBsxJ,EAAM7mM,IAAIxC,MAAM6pE,GAEtFqJ,UAAU2jC,iBAAiBrc,aAGlBo5C,kBAET,OAAO,IAAIhtI,IAAI,CACb,CAAC,aAAc,CAAC,GAAI,GAAI,GAAI,MAC5B,CAAC,WAAY,CAAC,GAAI,GAAI,GAAI,MAC1B,CAAC,OAAQ,CAAC,GAAI,GAAI,GAAI,MACtB,CAAC,SAAU,CAAC,IAAK,IAAK,MACtB,CAAC,UAAW,CAAC,IAAK,IAAK,MACvB,CAAC,OAAQ,CAAC,IAAK,IAAK,MACpB,CAAC,QAAS,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,MACpC,CAAC,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,SAC/ButC,GAAGC,QAAQmiC,YAAYr5C,aACvB,CAAC,CAAC,QAAS,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK/8B,MAAM,EAAGg0C,GAAGC,QAAQmiC,YAAYp5C,gBAAgB,MAClI,MACAgX,GAAGC,QAAQ6jC,cAAc/6C,aACzB,CAAC,CAAC,SAAU,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK/8B,MAAM,EAAGg0C,GAAGC,QAAQ6jC,cAAc96C,gBAAgB,MACxF,KAIY,qBAACsF,GACnB,IAAIuwT,EAAWvwT,EAAM9iC,cAGrB,OADAnL,KAAKo/I,KAAK3qI,SAAQ,CAACgqV,EAAKlvV,IAAUivV,EAAWA,EAASpzV,QAAQmE,EAAMkvV,EAAIptV,UACjEmtV,EACJpzV,QAAQ,SAAU,IAClBosC,WAAW,IAAK,IAEhBpsC,QAAQ,SAAW,KACnBA,QAAQ,OAAS,KAGA,uBAAC6iC,GACrB,MAAMuwT,EAAWvwT,EAAM9iC,cAAcqsC,WAAW,IAAK,IACrD,OAAOgnT,EAAShnT,WAAW,IAAK,MAAMpsC,QAAQ,IAAK,OAKrDiqN,iBAAiBpnL,GACf,MAAMywT,EAAUhyR,aAAa7mB,SAASu5C,YAAYl0B,OAAO5nE,KAAIuU,GAAKA,EAAE7J,KAC9DgsB,EAAS,GACT2kU,EAAgBxmT,IAAc4lS,cAAc9vS,GAAOj8B,MAAM,KAAK,GACpE,GAAI2sV,EAAcp7V,OAAQ,CACxB,MAAMq7V,EAAeD,EAAc3sV,MAAM,KACzC,IAAK,MAAMkzG,KAAc05O,EAAc,CACrC,MAAMC,EAAkB35O,EAAWlzG,MAAM,KACnCmiM,EAAa0qJ,EAAgB,GAC/B7+V,KAAK8+V,kBAAkBD,EAAgB,GAAIA,EAAgB,IAC3DA,EACJ,IAAK,MAAMhqJ,KAASV,EAClB,GAAIuqJ,EAAQnrV,SAASqkC,SAASi9J,EAAO,KAAM,CACzC,MAAMkqJ,EAAWv5S,UAAUqvJ,GAC3B70M,KAAK8nH,gBAAgBtlH,KAAKu8V,GAC1B/kU,EAAOx3B,KAAKu8V,QAEZ/+V,KAAKs9U,eAAe96U,KAAKqyM,IAOjC,MAAMmqJ,EAAW/wT,EAAMj8B,MAAM,KAAK,GAElC,GADAhS,KAAK0hH,QAAUzzE,EAAMn9B,SAAS,MACzBkuV,EAEH,OAAOhlU,EAGT,MAAMilU,EAAOrnT,SAASonT,EAAU,IAC1BE,EAAOxyR,aAAa7mB,SAASu5C,YAAYjwC,GAE/C,OAAK+vS,EAAK57V,KAAI+H,GAAKA,EAAE2C,KAAIuF,SAAS0rV,IAAkB,IAATA,GAI9B,IAATA,GAAYjlU,EAAOx3B,KAAKgjD,UAAUwN,kBAAkBisS,IACjDjlU,IAJLh6B,KAAKs9U,eAAe96U,KAAM,KAAIy8V,KACvBjlU,GAMX8kU,kBAAkBK,EAAaC,GAC7B,MAAMC,EAAe,GACfrzV,EAAQhM,KAAKsnH,qBAAqB63O,GAClCjzV,EAAOlM,KAAKsnH,qBAAqB83O,GACvC,GAAe,IAAVpzV,GAA0B,IAATE,EACpB,IAAK,IAAI8B,EAAKhC,EAAOgC,GAAM9B,EAAM8B,IAC3Bw3C,UAAUx3C,IACZqxV,EAAa78V,KAAKwL,GAIxB,OAAOqxV,EAGT/3O,qBAAqB5uB,GACnB,MAAM8oB,EAAWjqE,WAAWmhD,GAC5B,OAAKlzC,UAAUg8D,IAAch8D,UAAUg8D,GAAU+F,UAAY5nE,GAAG6nE,YACvD,EAEFhG,EAMT4zG,gBAAgBjhB,EAAYmrJ,GAC1B,IAAK,MAAMzqJ,KAASV,EAAY,CAC9B,MAAMorJ,EAAyB,kBAAV1qJ,EAAqBA,EAAQrvJ,UAAUqvJ,GACxD70M,KAAKw/V,gBAAgBD,IAAQv/V,KAAKy/V,eAAeF,EAAOD,IAOhEE,gBAAgB3qJ,EAAO6qJ,GAAqB,GAE1C,IAAK7qJ,GAAS70M,KAAKuhH,iBAAiBhuG,SAASshM,GAAQ,OAAO,EAI5D,MAAMpuI,EAAQ4pG,GAAuB,kBAARA,EACzBrwK,KAAKuhH,iBAAiBhuG,SAASiyC,UAAU6qH,IACzCA,IACEhwK,EAASw0M,EAAMx0M,OACrB,IAAIs/V,EACJ,OAAQt/V,EAAOq9F,SACb,KAAKxxE,oBAAoBC,aACvBwzU,EAAet/V,EAAOgiD,YAAY50C,MAAK0uB,GAAKsqC,EAAMtqC,KAClD,MACF,KAAKjQ,oBAAoBE,IACvBuzU,EAAet/V,EAAOgiD,YAAY30C,OAAMyuB,GAAKsqC,EAAMtqC,KACnD,MACF,KAAKjQ,oBAAoBG,eACvBszU,EAAet/V,EAAOgiD,YAAY30C,OAAMyuB,GAAKsqC,EAAMtqC,MAAOn8B,KAAKi0M,iBAAmBj0M,KAAKg0M,oBACvF,MACF,QACE,MAAM1mM,MAAO,qCAAoCtN,KAAK09F,WAE1D,GAAIm3G,aAAiBr4B,iBAAkB,OACrC,GAAIx8K,KAAKuhH,iBAAiB9zG,MAAKoK,GAAKA,aAAa2kK,mBAAmB,OAAO,EAC3E,MAAMojL,GAAuB7mT,KAAK1F,mBAAmBvH,WAAzB,UAC1B+oK,EAAMx0M,OAAOs9F,UAAUC,wBADG,aAC1B,EAAyCnwF,MAAKoK,GAAK4uD,EAAM5uD,MAE3D,GAAI6nV,EACF,OAAOC,IAAiBC,EAE1B,MAAMC,EAAcjvT,SAASiW,aAAa/+C,MAAMmkC,SAASjsC,KAAKq9U,cAAc,IAAInsT,IAAI2jL,EAAMlpK,MACpFm0T,EAAgB/mT,KAAK1F,mBAAmBvH,UAAY+oK,EAAMkrJ,eAChE,OAAOJ,IAAiBC,IAAwB/qJ,EAAM/oK,UAAag0T,GAAiBD,GAEtF,OAAOF,EAITF,eAAe5qJ,EAAOyqJ,GACpB,MAAMj/V,EAASw0M,EAAMx0M,OACf2/V,EAAa7sS,SAASyY,SAASjjC,gBAAgB,GAC/Cs3T,EAAW5/V,EAAOq+F,QAAUr+F,EAAOs+F,WAAWlxF,MAAKoK,GAAK7X,KAAKuhH,iBAAiBhuG,SAASiyC,UAAU3tC,MACnGhX,KAAK4H,SAASpI,EAAOq+F,OAASshQ,EAAY,GAC1C,EAEEE,EAAQruT,MAAMC,SAAW,EAAI3iB,EAAE2qB,cAC/BqmT,EAAQngW,KAAKq9U,cAAc,GAAK4iB,GAAYC,EAClD,GAAIZ,EAAY,CACd,MAAM3tD,EAAQ/gQ,SAASiW,aAAa/+C,MAAMsB,IAAIs1E,UAAU2jC,iBAAiBv6G,MAAMu1U,cAAc,IAC1F70U,SAASe,OAAO2O,WAAWxI,WACxB0wV,EAAQpgW,KAAKq9U,cAAc,GAAKh9U,EAAOsrC,MAAQgmQ,EACrD,IAAKyuD,IAAUD,EAAO,OAIV,IAAVD,GAAeD,EAAW,IAC9BjgW,KAAKq9U,cAAc,IAAMh9U,EAAOsrC,KAChC3rC,KAAKq9U,cAAc,IAAM4iB,EAEzBjgW,KAAKuhH,iBAAiB/+G,KAAKqyM,IAGzBZ,uBACF,MAAO,CAAC,GAAI,GAAI,IAAItnM,YAAWiB,GAAK5N,KAAKuhH,iBAAiBhuG,SAASiyC,UAAU53C,MAG3EomM,0BACF,OAAInjJ,gBAAgBopC,eAAenuD,SAAiB,EAChD9rC,KAAKuhH,iBAAiBhuG,SAASiyC,UAAU,MAAc,EACpD,EAGL+3R,qBACF,MAAM8iB,EAAU,IAAI9yV,IACd+yV,EAAa,CAACl1U,gBAAgBC,eAAgBD,gBAAgBE,aAAcF,gBAAgBG,UAClG,IAAK,MAAM8Z,KAAQi7T,EAAY,CAC7B,MAAM9tD,EAAYpqL,kBAAkBssF,SAASlnM,MAAKmsB,GAAKA,EAAE0L,OAASA,IAClE,IAAK,MAAMwvK,KAAS70M,KAAKuhH,iBACvB,GAAIixL,EAAUnqO,QAAQ90D,SAASshM,EAAM7mM,IAAK,CACxCqyV,EAAQj3V,IAAIopS,EAAUjjS,MACtB,OAIN,OAAO5H,MAAM6jH,KAAK60O,GAGhB7rJ,gBACF,MAAM6rJ,EAAU,IAAI9yV,IACd+yV,EAAa,CAACl1U,gBAAgBI,OAAQJ,gBAAgBK,QAASL,gBAAgBM,MACrF,IAAK,MAAM2Z,KAAQi7T,EAAY,CAC7B,MAAM9tD,EAAYpqL,kBAAkBssF,SAASlnM,MAAKmsB,GAAKA,EAAE0L,OAASA,IAClE,IAAK,MAAMwvK,KAAS70M,KAAKuhH,iBACvB,GAAIixL,EAAUnqO,QAAQ90D,SAASshM,EAAM7mM,IAAK,CACxCqyV,EAAQj3V,IAAIopS,EAAUjjS,MACtB,OAIN,OAAO5H,MAAM6jH,KAAK60O,GAGhBlxS,SAEF,MAAMoxS,EAAYvgW,KAAKuhH,iBAAiB/zG,MAAKqK,GAAKA,aAAa2kK,mBAC/D,OAAO+jL,EAAYA,EAAUvyV,GAAK,EAIhCinN,mBACF,MAAQ,GAAEj1N,KAAKuhH,iBACZ3+G,QAAOiV,GAAKA,aAAai3I,uBACzBxrJ,KAAIuU,GAAKA,EAAE7J,KACXqD,KAAK,QAAQrR,KAAKmvD,KAA2C,IAAtCvgD,OAAO03E,UAAUzgC,SAASl9C,QAAgB,GAAK,OCrUtE,MAAM6zK,YAAyBy4B,GACpCjzM,YAAY3B,GACV6Y,MAAM7Y,EAAQsrB,gBAAgBE,oBAC9B7rB,KAAKwgW,wBAGH10T,eACF,OAAOl9B,OAAO03E,UAAUzgC,SAASquB,WAAal0E,KAAKgO,GAGrDg+B,SAASqpC,GACP,GAAI9mE,QAAQq+B,oBAAsBC,eAAeC,kBAAmB,OAAO,EAC3EyW,kBAAkBvjD,KAAKgO,IAAIqhP,aAAc,EACzC,MAAMojD,EAAYhyS,KAAKC,MAEvB,GAAIV,KAAK8rC,UAAkD,IAAtCl9B,OAAO03E,UAAUzgC,SAASl9C,UAAkB0sE,EAE3Do9N,EAAYhvS,GAAG+/K,cAAgB,KAEjC//K,GAAG+/K,cAAgB,EACnBjgI,kBAAkBvjD,KAAKgO,IAAI+8K,gBAG3BtnL,GAAG+/K,cAAgBivH,OAEhB,IAAKzyS,KAAK8rC,UAAY9rC,KAAK+rC,YAYhC,OATAtoC,GAAG+/K,cAAgB,EAEnB50K,OAAO03E,UAAUzgC,SAASquB,SAAWl0E,KAAKgO,GACrCqnE,GACHxK,IAAIwsB,WAAWxxC,SAASrrC,OAE1B5L,OAAO03E,UAAUzgC,SAAS2yF,iBAAmB,GAAKx4I,KAAKgO,GACvD4iC,SAASiW,aAAa5a,SAASjsC,KAAK2rC,MACpCwM,cAAcmqE,kBAAkB,CAAC98D,GAAAA,kBAA4BxlD,KAAKgO,OAC3D,EAET,OAAO,EAGTsnM,gBACE,MAAMmrJ,EAAe,MACnBl+V,EACA,IAAK,IAAK,IACV,IAAK,GAAI,IACT,IAAK,IAAK,IACV,IAAK,IAAK,KAIZvC,KAAKgsC,WACLmM,cAAcmqE,kBAAkB4xF,gBAAgBusJ,EAAazgW,KAAKgO,IAAKhO,KAAKgO,KAG5D,KAAZhO,KAAKgO,GACPw3C,GAAU,KAAKxZ,WACM,KAAZhsC,KAAKgO,IACdw3C,GAAU,KAAKxZ,WAEjBhsC,KAAKgsC,WAGHD,kBACF,QAAK/rC,KAAK0rC,eAGiC,IAAvC98B,OAAO03E,UAAUzgC,SAASquB,aAGzBl0E,KAAKK,OAAOgiD,YAAY50C,MAAKoK,GAAK2tC,GAAU3tC,GAAGi0B,YAG7C9rC,KAAK0gW,8BAMVp6Q,gBACF,OAAO/iC,kBAAkBvjD,KAAKgO,IAG5BokS,uBACF,OAAOpyS,KAAKK,OAAOs9F,UAAUvnD,SAASp2C,KAAKsmF,UAAU7/B,aAGnDurP,yBACF,MAAMrpS,EAAU3I,KAAKK,OAAOs9F,UAAUh1F,UAQtC,YAPsCpG,IAAlCvC,KAAK2gW,yBACP3gW,KAAK2gW,yBAA2Bh4V,EAEhC3I,KAAK2gW,yBADuB,kBAAZh4V,EACgB9H,KAAKuH,IAAIpI,KAAK2gW,yBAA0Bh4V,GAExC3I,KAAK2gW,yBAAyBl4V,SAASE,GAElE3I,KAAK2gW,yBAGVD,kCACF,OAAO3nT,KAAK1F,mBAAmBvH,WAAa9rC,KAAK4/V,qBAAuB5/V,KAAK+/V,eAG3EH,0BAAsB,MACxB,iBAAO5/V,KAAKK,OAAOs9F,UAAUC,wBAA7B,aAAO,EAAwCnwF,MAAKoK,GAAK2tC,GAAU3tC,GAAGi0B,WAGpEi0T,qBACF,GAAI//V,KAAKmyS,4BAA6B,OAAO,EAC7C,GAAInyS,KAAKK,OAAOs9F,UAAUC,iBAAkB,OAAO,EACnD,MAAMj1F,EAAU3I,KAAKgyS,mBACfvtP,EAAQzkD,KAAKoyS,iBACnB,MAA0B,kBAAZzpS,EAAuBA,GAAW87C,EAAQ97C,EAAQuoB,IAAIuzB,GAGlE0tP,kCACF,OAAgB,KAAZnyS,KAAKgO,IAAyB,KAAZhO,KAAKgO,IAC6C,KAAhEY,OAAO03E,UAAUzgC,SAAS2yF,gBAAmB,GAAKx4I,KAAKgO,IAGjEwyV,wBACExgW,KAAK2gW,8BAA2Bp+V,GAIpCi6K,IAAiBn0G,QAAUv9B,YACzB4hC,aAAa7mB,SAASu5C,YAAYjwC,IAClC9uD,GAAU,IAAIm8K,IAAiBn8K,KAOjCmlD,GAAAA,kBAA8B,SAASx3C,GACrC,OAAOwuK,IAAiBn0G,QAAQr6D,IAMlCw3C,GAAAA,kBAAAA,QAAsC,WACpC,OAAO52C,OAAO03E,UAAUzgC,SAASquB,SAC7B1uB,GAAAA,kBAA4B52C,OAAO03E,UAAUzgC,SAASquB,eACtD3xE,GAGNi6K,IAAiBC,6BAA+B,WAC9CD,IAAiBn0G,QAAQ5zD,SAAQogM,GAASA,EAAM2rJ,2BCrJ3C,MAAM7/P,YAA+Bs0G,GAC1CjzM,YAAY3B,GACV6Y,MAAM7Y,EAAQsrB,gBAAgBG,UAG5BggB,eACF,OAAOl9B,OAAOia,SAASw/C,QAAQ90D,SAASvT,KAAKgO,IAG3C+9B,kBACF,OAAO/rC,KAAK0rC,cAAgB1rC,KAAKK,OAAOgiD,cAGtC7R,kBACF,OAAOxwC,KAAKK,OAAOmwC,YAGjB7E,WACF,MAAmC,oBAArB3rC,KAAKK,OAAOsrC,KAAsB3rC,KAAKK,OAAOsrC,OAAS3rC,KAAKK,OAAOsrC,KAG/Em2C,kCACF,OAAmB,IAAZ9hF,KAAKgO,GAAW,MAAQ,EAGjCg+B,SAAS40T,GAAQ,GACf,GAAI5gW,KAAK8rC,WAAa9rC,KAAK+rC,YAAa,OAAO,EAC/C,GAAgB,IAAZ/rC,KAAKgO,GAAU,CAKjB,GAHK4yV,GACH/1R,IAAIhlB,SAASh9B,SAASrO,OAEpBu+B,KAAK9G,oBAAoBvJ,aAC3B,IAAK,MAAM16B,IAAM,CAAC,EAAG,EAAG,GAAIY,OAAOia,SAASo5B,SAAS74C,IAAI4E,GAE3D,GAAI+qC,KAAK1G,oBAAoB3J,aAAc,CACzC,IAAK,MAAM16B,IAAM,CAAC,EAAG,EAAG,GAAIY,OAAOia,SAASo5B,SAAS74C,IAAI4E,GACrDkkC,iBAAiBC,IAAIC,YACvBxjC,OAAOia,SAASo5B,SAAS74C,IAAI,IAC7BwF,OAAOia,SAASo5B,SAAS74C,IAAI,KAG5ByoC,MAAMC,UAAUlB,SAASwvB,iBAAiBtvB,OAAOiI,KAAKvH,QAAQ7I,gBAAgB,KAC/EgX,GAAGC,QAAQkhC,yBAAyBp4C,cAAiB00D,wBAA2BvrD,MAAMC,UACxFlB,SAASwvB,iBAAiBtvB,OAAO+vT,MAAMlhT,GAAGC,QAAQkhC,yBAAyBn4C,gBAAgB,IAAI,IAEjGkpD,gBAAgBwc,oBAAoBrc,aAgBtC,OAdgB,IAAZhyF,KAAKgO,KAEF6+B,eAAesf,oBAClB5xC,MAAMjC,QAAQkC,KAAM,gEAA+DxL,OAAO,sDACjEA,OAAO,6NAEdA,OAAO,aAAc,GAAI,GAC3CjN,SAASe,SAASY,WAAWkD,yBAE1BmyC,KAAKvG,kBAAkB1G,UAAU++B,IAAI9hD,QAAQsmB,OAAO70B,QAG3D5L,OAAOia,SAASw/C,QAAQ7lE,KAAKxC,KAAKgO,IAClC4iC,SAASiW,aAAa5a,SAASjsC,KAAK2rC,OAC7B,GAIXg1D,IAAuBt4B,QAAUv9B,YAC/B4hC,aAAa7mB,SAASu5C,YAAYv2E,UAClCxoB,GAAU,IAAIsgG,IAAuBtgG,KAMvCmlD,GAAAA,SAAqBm7C,IAAuBt4B,QAAQ,GAMpD7iB,GAAAA,cAA0B,SAAS+C,GACjC,OAAOo4C,IAAuBt4B,QAAQ9f,EAAO,IAM/C/C,GAAAA,QAAoBm7C,IAAuBt4B,QAAQ,GAEnD7iB,GAAAA,iBAA6B,WAC3B,OAAO52C,OAAOia,SAASw/C,QAAQ/kE,KAAI0K,GAAM2yF,IAAuBt4B,QAAQr6D,MC1FnE,MAAMmjS,IACXnvS,YAAYwpH,EAAMl2G,EAAIwrV,GACpB9gW,KAAK+gW,MAAQv1O,EACbxrH,KAAKghW,IAAM1rV,EACXtV,KAAKihW,UAAYH,EAGft1O,WACF,OAAOxrH,KAAK+gW,MAGVzrV,SACF,OAAOtV,KAAKghW,IAGV7yD,mBACF,YAA0B5rS,IAAnBvC,KAAKihW,WAA2BjhW,KAAKihW,YAG1C5xL,kBACF,OAAOrvK,KAAKmuS,cAAgBnuS,KAAK+gW,MAAMj1T,UAO3C0Z,GAAAA,eAA4B,WAC1B,MAAM8qP,EAAKtiS,GAAMw3C,GAAUx3C,GACrBuiS,EAAKviS,GAAMw3C,GAAAA,kBAA4Bx3C,GACvCymC,EAAc,CAClB,CAAC67P,EAAG,IAAKA,EAAG,KACZ,CAACA,EAAG,IAAKA,EAAG,KAEZ,CAACA,EAAG,IAAKA,EAAG,KACZ,CAACA,EAAG,IAAKA,EAAG,KACZ,CAACA,EAAG,IAAKA,EAAG,KAEZ,CAACA,EAAG,IAAKA,EAAG,KACZ,CAACA,EAAG,IAAKA,EAAG,KAEZ,CAACA,EAAG,IAAKA,EAAG,KACZ,CAACA,EAAG,IAAKA,EAAG,KACZ,CAACA,EAAG,IAAKC,EAAG,IAEZ,CAACD,EAAG,IAAKA,EAAG,IAAK,KAAOv3P,KAAKhG,cAAcjH,UAE3C,CAACwkQ,EAAG,IAAKA,EAAG,KACZ,CAACC,EAAG,GAAID,EAAG,IAAK,IAAMv3P,KAAKhG,cAAcjH,UAEzC,CAACwkQ,EAAG,IAAKA,EAAG,KACZ,CAACA,EAAG,IAAKA,EAAG,KACZ,CAACA,EAAG,IAAKA,EAAG,KAEZ,CAACA,EAAG,IAAKA,EAAG,KACZ,CAACA,EAAG,IAAKA,EAAG,KACZ,CAACA,EAAG,IAAKA,EAAG,KAEZ,CAACA,EAAG,IAAKA,EAAG,KACZ,CAACA,EAAG,IAAKA,EAAG,KACZ,CAACA,EAAG,IAAKA,EAAG,KAEZ,CAACA,EAAG,IAAKA,EAAG,MACZ,CAACA,EAAG,IAAKA,EAAG,MACZ,CAACA,EAAG,IAAKA,EAAG,MAEZ,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MAEb,CAACA,EAAG,KAAMC,EAAG,IAEb,CAACD,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MAEb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMC,EAAG,IACb,CAACD,EAAG,KAAMC,EAAG,IAEb,CAACD,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MAEb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMC,EAAG,IAEb,CAACD,EAAG,KAAMC,EAAG,IAEb,CAACD,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MAEb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MAEb,CAACA,EAAG,KAAMC,EAAG,IACb,CAACD,EAAG,KAAMC,EAAG,IACb,CAACD,EAAG,KAAMC,EAAG,IAEb,CAACD,EAAG,KAAMA,EAAG,KACX,KAAOv3P,KAAKnG,cAAc9G,WAAaiN,KAAKlG,cAAc/G,WAAaiN,KAAKjG,cAAchH,UAE5F,CAACykQ,EAAG,GAAID,EAAG,KAAM,IAAMv3P,KAAKnG,cAAc9G,UAC1C,CAACykQ,EAAG,GAAID,EAAG,KAAM,IAAMv3P,KAAKlG,cAAc/G,UAC1C,CAACykQ,EAAG,GAAID,EAAG,KAAM,IAAMv3P,KAAKjG,cAAchH,UAE1C,CAACwkQ,EAAG,KAAMC,EAAG,KAEb,CAACA,EAAG,IAAKD,EAAG,MACZ,CAACC,EAAG,IAAKD,EAAG,MACZ,CAACC,EAAG,IAAKD,EAAG,MAEZ,CAACA,EAAG,KAAMA,EAAG,MAEb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MAEb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MAEb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MAEb,CAACA,EAAG,KAAMC,EAAG,KACb,CAACD,EAAG,KAAMC,EAAG,KACb,CAACD,EAAG,KAAMC,EAAG,KACb,CAACD,EAAG,KAAMC,EAAG,KAEb,CAACA,EAAG,IAAK/qP,GAAAA,UACT,CAAC+qP,EAAG,IAAK/qP,GAAAA,UAET,CAAC8qP,EAAG,IAAKA,EAAG,KAAM,IAAM3wP,GAAAA,QAAAA,aAA0B,GAClD,CAAC2wP,EAAG,IAAKA,EAAG,KAAM,IAAM3wP,GAAAA,QAAAA,aAA0B,GAClD,CAAC2wP,EAAG,KAAMA,EAAG,KAAM,IAAM3wP,GAAAA,QAAAA,aAA0B,GACnD,CAAC2wP,EAAG,KAAMA,EAAG,KAAM,IAAM3wP,GAAAA,QAAAA,aAA0B,GACnD,CAAC2wP,EAAG,KAAMA,EAAG,KAAM,IAAM3wP,GAAAA,QAAAA,aAA0B,GACnD,CAAC2wP,EAAG,KAAMA,EAAG,KAAM,IAAM3wP,GAAAA,QAAAA,aAA0B,IACnD,CAAC2wP,EAAG,KAAMA,EAAG,KAAM,IAAM3wP,GAAAA,QAAAA,aAA0B,IACnD,CAAC2wP,EAAG,KAAMA,EAAG,KAAM,IAAM3wP,GAAAA,QAAAA,aAA0B,IACnD,CAAC2wP,EAAG,KAAMA,EAAG,KAAM,IAAM3wP,GAAAA,QAAAA,aAA0B,IACnD,CAAC2wP,EAAG,KAAMA,EAAG,KAAM,IAAM3wP,GAAAA,QAAAA,aAA0B,IACnD,CAAC2wP,EAAG,KAAMA,EAAG,KAAM,IAAM3wP,GAAAA,QAAAA,aAA0B,IACnD,CAAC2wP,EAAG,KAAMA,EAAG,KAAM,IAAM3wP,GAAAA,QAAAA,aAA0B,IAEnD,CAAC6F,GAAAA,SAAoBA,GAAAA,cAAwB,IAC7C,CAACA,GAAAA,cAAwB,GAAIA,GAAAA,cAAwB,IACrD,CAACA,GAAAA,cAAwB,GAAIA,GAAAA,cAAwB,IACrD,CAACA,GAAAA,cAAwB,GAAIA,GAAAA,cAAwB,IACrD,CAACA,GAAAA,cAAwB,GAAIA,GAAAA,SAC7B,CAACA,GAAAA,QAAmB8qP,EAAG,MACvB,CAAC9qP,GAAAA,QAAmB8qP,EAAG,MACvB,CAAC9qP,GAAAA,QAAmB8qP,EAAG,MACvB,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,MACb,CAACA,EAAG,KAAMA,EAAG,OACbhtS,KAAI2yC,GAAS,IAAIk7P,IAAoBl7P,EAAM,GAAIA,EAAM,GAAIA,EAAM,MAEjE,OAAOxB,EApJmB,GC3BrB,MAAMgd,IAGAmmC,uBACT,OAAO5+C,YAAY,IAAI7N,YAAc0B,eAAesf,kBAG3C2rC,0BACT,OAAOxmC,SAASwU,gBAAkB,IAAMviB,kBAAkB,GAAG7R,WAAa1xC,KAAK0nE,UAAUtwD,GAAG,IAC1F6zC,oBAAoB,GAAGE,YAAY/zC,GAAG,KACrCq6B,SAASC,UAGHmvL,+BACT,OAAI1yK,gBAAgB,IAAIzc,UAAkB,8BACtC6R,kBAAkB,GAAG7R,UAAkB,uBACvC4f,SAASwU,gBAAkB,EAAW,YAAWz2D,UAAU,sBAC3D47C,oBAAoB,GAAGE,YAAY/5C,GAAG,GAAW,+BACjDpR,KAAK0nE,UAAUrwD,IAAI,GAAY,GAAE5G,QAAQ,gBACzCooD,OAAO2yF,wBAAgC,yBACpC,iBAGqB,+BAACgoH,GAC7B,MAAMp4O,EAAI,CAAC7rB,EAAMi4B,IAAej4B,KAAQikQ,EAAUA,EAAQjkQ,GAAQi4B,EAClE,IAAI5G,EAAS,EACT3xB,EAAS,EACTu1B,EAAQ,eAAcn1B,UAAU,OAChC+rB,EAAE,sBAAuB+yB,gBAAgB,GAAGzc,YAC9C9Q,EAAS,EACT4D,EAAO,KACEpJ,EAAE,gCAAiC+xB,kBAAkB,GAAGb,eACjE1rB,EAAS,EAAI,IACb3xB,EAAS,EACTu1B,EAAO,OAGT,MAAMz6B,GAAY,GACfqxB,EAAE,gBAAiB4d,YAAY,IAAIvQ,gBAAkBuQ,YAAY,IAAI34C,OAAOinC,OAAS,IACrFlM,EAAE,gBAAiB4d,YAAY,IAAIvQ,gBAAkBuQ,YAAY,IAAI34C,OAAOinC,OAAS,KACnF,GACFlM,EAAE,gBAAiB4d,YAAY,IAAIvQ,gBAAkBuQ,YAAY,IAAI34C,OAAOinC,OAAS,IACrFlM,EAAE,eAAgBoqB,UAAU,KAAK/c,gBAAkB+c,UAAU,KAAKnlD,OAAOinC,OAAS,IACjF1G,EACJ,OAAO4D,GAAqB,IAAbz6B,EAAiB,GAAK2G,UAAU3G,EAAUkF,EAAQA,IASxDiyV,+BACT,IAAI18T,EAE8BA,EAA9B2pB,gBAAgB,GAAGzc,UAAkB,EAEhCyb,kBAAkB,GAAGb,YAAoB,EAAI,IAC1C,EAGZ,MAAM60S,EAAS,EAAIp4T,QAAQvlC,IAAIw1C,YAAY,IAAKA,YAAY,KACtDooT,EAAU,EAAIr4T,QAAQvlC,IAAIw1C,YAAY,IAAKwM,UAAU,MACrD67S,EAAQ77S,UAAU,KAAK7c,gBAAgB,GACvC6tB,EAAY7W,GAAGC,QAAQ6W,gBAAgBtrB,WAAa,EAAKniC,QAAQoL,MAAMw8B,SAAS2R,YAAYz6C,OAAS,IAAQ,EACnH,IAAIw5V,EAAa98T,EAAO28T,EAASC,EAAUC,EAAQ7qS,EAGnD,MAAM+qS,EAAU7+R,GAAkB,IAAI/5B,gBAAgB,GACtD,OAAO24T,GAAYC,EAGV75R,uBACT,MAAM85R,EAAYv2S,oBAAoB,GAAG/4C,OACzC,GAAIsvV,EAAUpwV,GAAG,GAAI,OAAOiK,EAAAA,GAC5B,MAAM6vF,EAAat8F,OAAOs8F,WAAWziG,SAAS,GAC9C,IAAIg5V,EAcJ,OAREA,EADEtzS,gBAAgB,GAAGzc,UACG8vT,EAAU3jV,IAAI,KAAM1G,UAAU+zF,EAAWrtF,IAAI,MAAOpV,SAAS,GAClFmN,MAAM4rV,EAAU3jV,IAAI,KAAM1G,UAAU+zF,EAAWj0F,KAAKuqV,GAAW3jV,IAAI,OAC7DsvC,kBAAkB,GAAGb,YACNk1S,EAAUrqV,UAAU+zF,GAEpB,IAAIliG,QAASw4V,EAAUptV,QAAU,GAAMvT,KAAKuH,IAAI8iG,EAAW92F,QAAU,GAAI,IAG5FqtV,EAAsBh5V,SAAS,GAAGoV,IAAI7d,KAAKkhW,mBAGzCxvS,wBACT,GAAI9iD,OAAOs8F,WAAW95F,GAAG,GAAI,OAAOiK,EAAAA,GAGpC,GAAI8yC,gBAAgB,GAAGzc,UACrB,OAAO9iC,OAAOosI,qBAGhB,IAAI0mN,EAQJ,OALEA,EADEv0S,kBAAkB,GAAGb,YACP19C,OAAOs8F,WAEP,IAAIliG,QAAQ4F,OAAOs8F,WAAW92F,QAAU,IAGnDstV,EAAcj5V,SAAS,GAAGoV,IAAI7d,KAAKkhW,oBAIvC,SAAS3+C,MACd,IAAK9wP,IAAUqmC,aAAc,OAAO,EACpC,KAAMlpF,OAAOo9C,QAAWmB,kBAAkBzb,WAAayc,gBAAgBzc,YACrEd,SAASC,WAAWz5B,GAAGpO,QAAQu+D,kBAAmB,OAAO,EAC3D,GACEpZ,gBAAgB,GAAGzc,WAClB+f,IAAUC,WAAWxgC,IAAIloB,QAAQu+D,kBAElC,OAAO,EAETxlE,SAASe,SAASY,WAAWU,wBAC7B,MAAMsjE,EAAYjW,IAAUiW,UAC5B94D,OAAOosI,qBAAuBpsI,OAAOosI,qBAAqBplI,MAAM8xD,GAChE94D,OAAOs8F,WAAat8F,OAAOs8F,WAAWj0F,KAAKg0C,oBAAoB,GAAG/4C,QAClE,MAAMyvV,EAAmB3oT,YAAY,KAAKtQ,aAW1C,OAVIylB,gBAAgB,GAAGzc,WAChBiwT,GACHh1S,qBAAqB6kC,QAEvB5gD,SAASC,WAAW2gD,SACVmwQ,GACVh1S,qBAAqB0uS,oBAAoBltS,gBAAgB,IAAIzc,UAAY,EAAI,GAE/E9iC,OAAO+0C,kBAAkBj7B,SAASy9C,aAAc,EAChDpkE,SAASe,SAASY,WAAWW,wBACtB,EAGF,SAASsmK,MACTl5G,IAAUmmC,WAAcnmC,IAAUqmC,eACnClpF,OAAOysF,QAAQouD,cAAcj4F,UAC/Bj3C,MAAMi3C,UAAUh3C,OAEhB+nS,OCnJG,SAAS16M,MACdg2E,GAAAA,QAAmC,YAAa,GAGlD,SAAS+jL,MACP,MAAMt7Q,EAAYztB,OAAO4yF,oBAIzB,GAHKnlE,GAAcn4B,gBAAgB,GAAG7B,aACpC6B,gBAAgB,GAAG0e,YAEhByZ,EAAW,OAGhB,MAAMu7Q,EAAO10S,kBAAkBzb,UAC3BmwT,IAAS10S,kBAAkBxkD,QAAQ2jD,aAAaulC,gBAAgBsc,SAASpc,eAE7EzL,EAAUzZ,WACVyZ,EAAUw7Q,sBACLlzV,OAAOysF,QAAQqrD,iBAClB93I,OAAO03E,UAAUpb,OAAOviE,QAAU,EAClCiG,OAAO03E,UAAU59D,SAAS/f,QAAU,GAIjC,SAASmiK,MACTjyG,OAAOkG,YACRxwD,QAAQq+B,oBAAsBC,eAAeC,qBAG7Cl+B,OAAOysF,QAAQouD,cAAcnpD,WAAezzD,eAAew+B,qBAAsBz8D,OAAOo9C,MAG1FwrD,MAFAj9F,MAAM+lF,UAAU9lF,SAMb,SAASg9F,IAAsBuqP,GAAmB,GAClDlpS,OAAOkG,YACPgjS,IAAoBnzV,OAAOysF,QAAQkuD,WAAWjpD,WAAcu9E,GAAAA,aAI/DmkL,OAHAn6P,MACA1mG,WAAW6gW,IAAgB,OAMxB,SAASA,IACdC,GAAS,EACT79H,EAA8BvrK,OAAO2yF,yBAA2B58I,OAAOysF,QAAQqrD,iBAE1Eu7M,GAAWppS,OAAOkG,aAEnBlG,OAAOkG,YACTh9D,SAASe,SAASY,WAAWY,mBAC7B49V,MACIrwT,MAAMC,UAAUojB,aAAaxsC,SAASqzG,WAG5ComO,IAAqB/9H,GACrBriO,SAASe,SAASY,WAAWa,mBAG/B,SAAS29V,MACPE,MAEA,MAAMpxT,EAAiBmoB,uBACvBvoB,SAASI,eAAe5nC,IAAI4nC,GAC5BJ,SAAS8a,WAAWtiD,IAAIo9C,mBAAmBjsB,SAE3C8nU,KAAoBx1T,eAAew+B,oBACnCi3R,MAGF,SAASF,MACPxzV,OAAO+zC,QAAQ8nB,aAAa0xE,kBAC1BvtI,OAAO+zC,QAAQ8nB,aAAa0xE,kBAAkB1zI,SAASmG,OAAO+zC,QAAQqc,aAAai9E,WACrFrtI,OAAO+zC,QAAQqc,aAAai9E,UAAY5gI,EAAAA,GAExCzM,OAAO+zC,QAAQsW,aAAasjF,oBAAsB3tI,OAAO+zC,QAAQsW,aAAasjF,oBAAoB9zI,SAChG+9C,mBAAmBjsB,QAAQpjB,UAAUtW,KAAK4H,SAAS,GAAImG,OAAO+zC,QAAQqc,aAAa82B,YAGrF,MAAM9kD,EAAiBmoB,uBAgBvB,GAdAk9I,gBACEznM,OAAO+zC,QAAQqc,aAAap2C,KAC5Bha,OAAO+zC,QAAQqc,aAAa82B,SAC5B9kD,EACAwV,mBAAmBjsB,SAGrB3rB,OAAO+zC,QAAQ8nB,aAAa7hD,KAC1B5f,QAAQlI,IAAI8N,OAAO+zC,QAAQ8nB,aAAa7hD,KAAMha,OAAO+zC,QAAQqc,aAAap2C,MAC5Eha,OAAO+zC,QAAQ8nB,aAAaqrB,SAC1Bj1F,KAAKC,IAAI8N,OAAO+zC,QAAQ8nB,aAAaqrB,SAAUlnF,OAAO+zC,QAAQqc,aAAa82B,UAE7ElnF,OAAO+0C,kBAAkB56B,QAAQi9B,cAAe,GAE3Cp3C,OAAO+0C,kBAAkBj7B,SAASizH,OAAQ,CAC7C,MAAM6lD,EAA2BxwJ,EAAe75B,UAAUnO,QAAQP,SAAS,GAAImG,OAAO+zC,QAAQqc,aAAa82B,WAC3GlnF,OAAO+zC,QAAQsW,aAAaiuC,sBAC1Bl+F,QAAQZ,IAAIo5L,EAA0B5yL,OAAO+zC,QAAQsW,aAAaiuC,wBAIxE,SAASm7P,IAAmBv0P,GAC1B,MAAMy0P,EAAY3zV,OAAO+zC,QAAQ8nB,aAAa7hD,KAAKxR,GAAG,OAAWxI,OAAOo9C,MAClEq6J,EAAwBxtJ,OAAO2yF,wBACrCo2M,MAEI9zP,EACFjjC,IAAIniD,SAASu5B,SAASznC,QACb+nV,GAAcl8I,IAA0Bz3M,OAAOysF,QAAQqrD,iBAChE77E,IAAImtE,WAAWnnG,WAAWr2B,OAIvB,SAAS2nV,IAAqB/9H,GACnC,MAAMo+H,EAAoBj+S,WAAWryC,OAC/BuwV,EAA4B7zV,OAAO0rD,WAAW9V,SAIpD03H,IAAgBkoD,GAEhB,IAAIs+H,EAAoB,EACpB1pT,YAAY,IAAI7N,aAAe0G,MAAMC,WACvCyS,WAAWryC,OAASswV,EACpBE,GAAqB7hW,KAAKC,IAAI2hW,EAA2B,IAEvDj9S,UAAU,IAAI1Z,WAAa+F,MAAMC,WACnC4wT,GAAqB7hW,KAAKuM,MAAMq1V,EAA4B,IAG1Dp1S,aAAaiwB,wBAAwB50C,eACvCg6T,EAAoBD,GAItB7zV,OAAO0rD,WAAW9V,SAAW3jD,KAAKC,IAAID,KAAK2H,SAASk6V,EAAmBD,GAA4B,MAGrG,SAASH,MACH/+S,kBAAkB,GAAG82J,WAErBl7J,QAAQzN,YAAczC,cAAcvmB,SAASyiB,aAC/C8D,cAAcvmB,SAAS6iB,SACvBsrI,oBAAoBC,iBAAgB,KAIjC,SAASoF,IAAgBkoD,GAC9Bx1N,OAAO+oF,gBAAkB,EACzB/oF,OAAO41C,SAAW,EAClB51C,OAAO+zC,QAAQqc,aAAaC,MAAQ5jD,EAAAA,GACpCu1B,SAASC,WAAW2gD,QACpBu+E,UAAU,GAAG,GAAM,EAAMq0D,GACzBv3K,mBAAmBsvH,cACfvtK,OAAO0rD,WAAWu9B,MAAKtzC,WAAWryC,OAASmJ,EAAAA,IAC/CzM,OAAO0rD,WAAW9V,SAAW,EAC7B51C,OAAO+zC,QAAQqc,aAAap2C,KAAOvN,EAAAA,GACnCzM,OAAO+zC,QAAQqc,aAAa63B,YAAcx7E,EAAAA,GAC1CzM,OAAO+zC,QAAQqc,aAAa82B,SAAW,EACvCj9B,OAAOqzF,kBAAkB,YACzB3lF,kBAAkB4B,UAAUqpB,QAGvB,SAASuoH,IAAwB9iF,GACtC,GAAIhqE,gBAAgBi5C,MAAMp6D,SAAU,CAClC,MAAM62T,EAAY96S,KAAK4iB,aAAazzD,kBAAkBpB,MAAM,IAC5D,IAAIgtV,EACJ3rO,EAAO,IAAIjuH,QAAQiuH,GACfA,EAAK7/G,GAAG,IAAIpO,QAAQ,OAAO4M,MAAM+sV,IACnCC,EAAW55V,QAAQuN,IAAI0gH,EAAM0rO,IAG7B/zV,OAAOssI,mBAAqB,IAAIlyI,QAAQiuH,GAAM1gH,IAAIosV,GAAWjzV,WAC7DkzV,EAAW/hW,KAAKuM,MAAMwB,OAAOssI,mBAC7BtsI,OAAOssI,mBAAqB0nN,GAE9B,IAAIC,EAAej0V,OAAO+zC,QAAQ8nB,aAAa7hD,KAAKxR,GAAGpO,QAAQiP,MAAM,QAAUoD,EAAAA,GAAQ4xC,gBAAgBi5C,MAAM99D,YACzG0b,QAAQpS,YAAWmxT,EAAeptJ,eAAeotJ,IACrD,MAAMC,EAAiB,IAAI95V,QAAQ45V,GAAUhtV,MAAMitV,GACnDjyT,SAASI,eAAe5nC,IAAI05V,GAE9BlyT,SAASI,eAAe5nC,IAAIs9C,qBAAqBw/C,MAAMv9D,gBAAgBttB,EAAAA,IAAOzF,MAAM,IAAI5M,QAAQiuH,GAAM1gH,IAAI,OCvL5G,MAAMwsV,YAAoC34T,EACxCpoC,YAAY3B,EAAQy0E,GAClB57D,MAAM7Y,GACNL,KAAKgjW,SAAWluR,EAGdrsC,qBACF,OAAOzoC,KAAKgjW,SAASl3T,UAAY9rC,KAAKgjW,SAASvmJ,WAI5C,MAAMwmJ,YAA6B72T,EACxCpqC,YAAY3B,GACV6Y,MAAM7Y,GACFA,EAAOkpE,UACTvpE,KAAKkjW,eAAiB,IAAIH,IAA4B1iW,EAAOkpE,QAASvpE,OAItEyrC,eACF,OAAOmF,SAASI,eAGdn+B,UACF,OAAOjE,OAAOw3D,iBAGZx6B,6BAAyB,UAC3B,4BAAO,EAAA5rC,KAAKK,QAAOoiD,wBAAnB,aAAO,iBAAP,SAGEha,qBACF,OAAOzoC,KAAK8rC,WAAa9rC,KAAKy8M,UAG5B71J,oBACF,OAAO5mD,KAAKkjW,eAGdl3T,WACE,OAAI9yB,MAAM8yB,YAEJhsC,KAAKK,OAAO2N,GAAGuF,SAAS,SAAS+wN,uBACrCviO,SAASe,SAASY,WAAWiC,0BACtB,KAEL3F,KAAKwoL,YACPxoL,KAAKmjW,SACLphW,SAASe,SAASY,WAAWkC,2BACtB,GAKPw9V,sBACF,YAA+B7gW,IAAxBvC,KAAKK,OAAOkpE,QAGjBkzI,gBACF,OAAO7tM,OAAOC,WAAWmzC,GAAGunB,QAAQl9B,IAAIrsC,KAAKgO,IAG3Cw6K,gBACF,QAAI55K,OAAOorD,QAAQE,oBAAoBC,gBAAepD,GAAoBuB,IAAIhB,YAAY1oD,OAAOorD,QAAQC,WAAW,OAC7Gj6D,KAAK8rC,UACV9rC,KAAKojW,kBACJpjW,KAAKy8M,WACa,IAAnB98J,GAAGgxN,cACF9+N,MAAMyP,WAAW,4BAGtB6hT,SACEv0V,OAAOC,WAAWmzC,GAAGunB,QAAQngE,IAAIpJ,KAAKgO,IAGxCk2I,YACEt1I,OAAOC,WAAWmzC,GAAGunB,QAAQj9B,OAAOtsC,KAAKgO,KAItC,SAAS44F,MACd,GAAIznD,QAAQzN,WAAayN,QAAQo5C,eAAiBC,eAAev9E,SAC/D,OAAOI,EAAAA,GAET,IAAI6jD,EAAS7jD,EAAAA,GAAAA,eAETmqC,UAAU,IACVA,UAAU,IACVA,UAAU,KACVA,UAAU,KACVA,UAAU,KACVA,UAAU,KACVxM,YAAY,IACZA,YAAY,IACZA,YAAY,KACZA,YAAY,KACZA,YAAY,KAAKzO,QAAQoyB,OACzB1P,IAAgBiS,OAChBrO,gBAAgBuO,SAChB5F,YAAY0F,QAGhB,OADAA,EAASA,EAAOtpD,MAAM2uC,WAAWryC,OAAOg4B,YAAYmpB,gBAAgBiM,cAC7DJ,EAGF,SAASi8G,MACd,MAAMl5H,EAAW,CACfgL,IAAgBgF,cAChBhF,IAAgBq5C,UAChBr5C,IAAgBw5C,UAChBx5C,IAAgB05C,WAChB15C,IAAgBu5C,UAChBv5C,IAAgBs5C,UAChBt5C,IAAgBy5C,UAChBz5C,IAAgBC,YAChBD,IAAgBiF,qBAChBjF,IAAgBkF,cAChBlF,IAAgB2pC,aAChB3pC,IAAgBi5C,OAElB,IAAK,MAAMpxB,KAAW7yB,EAChB6yB,EAAQ2nI,WACV3nI,EAAQovE,YAGZt1I,OAAOC,WAAWmzC,GAAGkiG,WAAY,EACjCniJ,SAASe,SAASY,WAAWmC,8BAO/B,MAAMw9V,YAA8Bj5T,EAC9BuB,WACF,OAAI3rC,KAAKsjW,eAAiBtjW,KAAKujW,oBACtBvjW,KAAKK,OAAO8mG,sBAChBvxF,MAAM5M,QAAQ6U,IAAI7d,KAAKmiG,aAAcniG,KAAKsjW,cAAgBtjW,KAAKujW,sBAE7Dv6V,QAAQ6U,IAAI7d,KAAKmiG,aAAcniG,KAAKsjW,cAAgB,GAGzDA,oBACF,OAAO10V,OAAO05D,gBAGZi7R,0BACF,OAAOvjW,KAAKK,OAAO8mG,sBAAsB/yF,QAAU,EAGjDovV,uBACF,OAAOxjW,KAAKsjW,eAAiBtjW,KAAKujW,oBAGhCphQ,mBACF,OAAOniG,KAAKwjW,iBAAmB,KAAO,GAGpC92T,eACF,OAAO1sC,KAAK2rC,KAAKza,IAAIlxB,KAAKK,OAAO89E,SAG/BryC,eACF,OAAO9rC,KAAK0sC,SAGV+2T,6BACF,OAAOzqT,YAAY,IAAI7N,WAGrBY,kBACF,SAAG8F,MAAMC,UAAY6N,GAAGC,QAAQylC,uBAAuBl6C,YAAyB,UAAXnrC,KAAKgO,IAAkB4iC,SAASI,eAAe9f,IAAIlxB,KAAK2rC,SACrHkG,MAAMC,WAAa9xC,KAAK0sC,UAAYkE,SAASI,eAAe9f,IAAIlxB,KAAK2rC,OAAS3rC,KAAKyjW,uBAK7Fz3T,SAAS95B,EAAS,GACXlS,KAAK+rC,cACLyZ,UAAU,KAAK1Z,UAClB46B,UAAU45B,UAAU4zE,WAAW74J,EAAAA,GAAAA,IAAUnJ,IAE3C0+B,SAASI,eAAe/E,SAASjjC,QAAQ06V,mBAAmBxxV,EAAQlS,KAAK2rC,KAAM3rC,KAAKmiG,aAAc,IAClGvzF,OAAO05D,iBAAmBp2D,EAC1BjP,OAAOkpC,UAGT+sG,SACE,GAAKl5I,KAAK+rC,YAAV,CACA,IAAK/rC,KAAKwjW,iBAAkB,CAE1B,MAAMG,EAAc/yT,SAASI,eAAelpC,MAAMU,SAASxI,KAAKK,OAAO8mG,uBACjEjyE,EAAYlsB,QAAQgrT,sBAAsB2vC,EAAa3jW,KAAK2rC,KAAM3rC,KAAKmiG,aAAc,GAAGzyF,WAC9F,GAAIwlB,GAAa,EAAG,OACpBl1B,KAAKgsC,SAAS9W,GAKhB,GAAIl1B,KAAKwjW,iBAAkB,CACzB,MAAMG,EAAc/yT,SAASI,eAAelpC,MAAMU,SAASxI,KAAKK,OAAO89E,SACjEjpD,EAAYlsB,QAAQgrT,sBAAsB2vC,EAAa3jW,KAAK2rC,KAAM3rC,KAAKmiG,aAAc,GAAGzyF,WAC9F,GAAIwlB,GAAa,EAAG,OACpBl1B,KAAKgsC,SAAS9W,MAKb,MAAM+3B,IAAkB2jD,oBAC7BlkC,aAAahkD,SAASu5B,UACtB5hD,GAAyB,WAAdA,EAAO2N,GACd,IAAIq1V,IAAsBhjW,GAC1B,IAAI4iW,IAAqB5iW,KCpN/B,MAAMujW,YAAyCx5T,EAC7CpoC,YAAY3B,EAAQy0E,GAClB57D,MAAM7Y,GACNL,KAAKgjW,SAAWluR,EAGdrsC,qBACF,OAAOzoC,KAAKgjW,SAASl3T,UAAY9rC,KAAKgjW,SAASvmJ,WAI5C,MAAMonJ,YAAkCz3T,EAC7CpqC,YAAY3B,GACV6Y,MAAM7Y,GACFA,EAAOkpE,UACTvpE,KAAKkjW,eAAiB,IAAIU,IAAiCvjW,EAAOkpE,QAASvpE,OAI3EyrC,eACF,OAAOmF,SAASI,eAGdn+B,UACF,OAAOjE,OAAOw3D,iBAGZ39B,qBACF,OAAOzoC,KAAK8rC,WAAa9rC,KAAKy8M,UAG5B71J,oBACF,OAAO5mD,KAAKkjW,eAGdh3T,cACkB,eAAZlsC,KAAKgO,KACP+gL,GAAmB,GAAGD,cACtB55H,aAAa4J,cAAci9D,WAI/B/vF,WACE,OAAI9yB,MAAM8yB,YACRjqC,SAASe,SAASY,WAAWoC,gCACtB,KAEL9F,KAAKwoL,YACPxoL,KAAKmjW,SACLphW,SAASe,SAASY,WAAWqC,iCACtB,GAKPq9V,sBACF,YAA+B7gW,IAAxBvC,KAAKK,OAAOkpE,QAGjBkzI,gBACF,OAAO7tM,OAAOC,WAAWmzC,GAAGmiG,aAAa93G,IAAIrsC,KAAKgO,IAGhDw6K,gBACF,QAAI55K,OAAOorD,QAAQE,oBAAoBC,gBAAepD,GAAoBuB,IAAIhB,YAAY1oD,OAAOorD,QAAQC,WAAW,OAC7Gj6D,KAAK8rC,UACV9rC,KAAKojW,kBACJpjW,KAAKy8M,WACkB,IAAxB98J,GAAGkiM,mBACFhwM,MAAMyP,WAAW,iCAGtB6hT,SACEv0V,OAAOC,WAAWmzC,GAAGmiG,aAAa/6I,IAAIpJ,KAAKgO,IAG7Ck2I,YACEt1I,OAAOC,WAAWmzC,GAAGmiG,aAAa73G,OAAOtsC,KAAKgO,KAI3C,SAASotK,MACd,MAAMn5H,EAAW,CACfyE,IAAqB6L,YACrB7L,IAAqB8L,cACrB9L,IAAqBwG,YACrBxG,IAAqBgM,eACrBhM,IAAqBiL,gBACrBjL,IAAqB+L,qBACrB/L,IAAqBC,cACrBD,IAAqBm/C,oBACrBn/C,IAAqBo/C,gBAGvB,IAAI,MAAMhxB,KAAW7yB,EAChB6yB,EAAQ2nI,WACT3nI,EAAQovE,YAIZt1I,OAAOC,WAAWmzC,GAAGoiG,gBAAiB,EACtCriJ,SAASe,SAASY,WAAWsC,oCAG/B,MAAM89V,YAA2Cr3T,EAC3ChB,eACF,OAAOmF,SAASI,eAGdrE,mBACF,OAAO/9B,OAAOwzF,mBAAmBpiG,KAAKgO,IAGpC2+B,iBAAa7kC,GACf8G,OAAOwzF,mBAAmBpiG,KAAKgO,IAAMlG,EAGnC4kC,eACF,OAAO1sC,KAAK2sC,eAAiB3sC,KAAKK,OAAO4hG,YAG3C/1D,cAAc,QACZ,aAAAlsC,KAAKK,QAAO6rC,mBAAZ,kBAIG,MAAMwa,IAAuBkqD,oBAClClkC,aAAahkD,SAAS0+E,eACtB/mG,GAAWA,EAAOyhD,UACd,IAAIgiT,IAAmCzjW,GACvC,IAAIwjW,IAA0BxjW,KCnI7B,SAASy5M,IAAkC7iF,GAChD,GAAI9oE,IAAgB,IAAIzc,WAAayb,kBAAkB,GAAGzb,UAAW,CACnE,GAAIuZ,oBAAoB,GAAG/4C,OAAOf,IAAI,GAAI,CACxCy/B,SAAS45B,OAAO15B,OAAO,GAEvB,MAAMizT,EAAa,KAAOljW,KAAK2H,SAAS8oD,SAASmtC,YAAa,KAAO,IACnE59F,KAAK2H,SAASoG,OAAO41C,SAAU,KAAO,IACxC5T,SAAS45B,OAAOpuB,SAASpzC,QAAQ6U,IAAIkmV,EAAY9sO,EAAK1gH,IAAI,MAE5D,GAAIq6B,SAAS45B,OAAOpzD,GAAGw5B,SAASC,WAAW/oC,QAAUqmD,IAAgB,IAAIzc,YAAcmnB,OAAOkG,UAAW,CACvG,MAAM17D,EAAS,CAACutC,SAASC,WAAW/oC,MAAO8oC,SAAS45B,OAAO1iE,OAC3DioK,UAAU,GAAG,GAAM,GACnBx1J,MAAMjC,QAAQkC,KAAM,QAAOxL,OAAO3L,EAAO,GAAI,EAAG,6CACzC2L,OAAO3L,EAAO,GAAI,EAAG,aAAc,CAAEgzK,WAAY3yK,WAAWa,kBAAoB,IAIvF4pD,IAAgB,GAAGzc,YACrB9iC,OAAO+lD,UAAY/lD,OAAO+lD,UAAU/+C,MAAMyF,EAAAA,SAAAA,IAAgB47G,EAAK1gH,IAAI,KAAKzV,IAAI,OAAO4O,aAAalH,SAASQ,QAAQu+D,mBAG/GpZ,IAAgB,GAAGzc,YACrB9iC,OAAO8lD,UAAY7zD,KAAKC,IAAI8N,OAAO8lD,UAAYuiE,EAAK1gH,IAAI,MAAQzV,IAAI,OAAO4O,WAAY,IAGrFy9C,kBAAkB,GAAGzb,YACnB9iC,OAAOqsI,UAAY,KACjBhwF,oBAAoB,GAAG/4C,OAAOkF,GAAG,IACnCmrS,iBAEF3zS,OAAOqsI,UAAY,KAGnBrsI,OAAOqsI,UAAYp6I,KAAK0H,MAAM9H,KAAKC,MAAQkO,OAAOq3D,WAAY,EAAG,QAKvE,MAAM+9R,YAA6B55T,EAC7BssD,wBACF,OAAO12F,KAAKK,OAAOq2F,kBAGjBhlD,gBACF,MAAMuyT,EAA0B,IAAZjkW,KAAKgO,IAAwB,KAAZhO,KAAKgO,GAC1C,OAAOY,OAAO03E,UAAUpb,OAAOviE,UAAY3I,KAAKgO,IAAOi2V,GAAe92S,kBAAkB,GAAGzb,UAGzFq0B,4BACF,OAAOn3D,OAAO03E,UAAUpb,OAAOviE,UAAY3I,KAAKgO,GAG9Cm9B,iBACF,GAAI0B,eAAemsB,mBAAoB,OAAO,EAC9C,GAAgB,IAAZh5D,KAAKgO,GAAU,OAAO,EAC1B,MAAMulE,EAAK7G,aAAa2qB,WAAWnsB,OAAOlrE,KAAKgO,GAAK,GAAGgpF,SACvD,OAAOpmD,SAASm3B,gBAAgB72C,IAAIqiD,GAGlCjyB,iBACF,OAAOzP,MAAMC,SAGXklD,eACF,OAAOtqB,aAAa2qB,WAAWnsB,OAAOlrE,KAAKgO,IAAIgpF,SAGjD+zF,eACOlgH,IAAIwsB,WAAWlsD,aAChB58B,QAAQq+B,oBAAsBC,eAAeC,oBAC5Cl+B,OAAOysF,QAAQouD,cAAcpyD,WAIlC98E,MAAMkmU,qBAAqBjmU,KAAKxa,KAAKgO,IAHnChO,KAAKwL,UAMTA,QACkB,IAAZxL,KAAKgO,IAAYhO,KAAK+lE,uBACrB8E,IAAIwsB,WAAWlsD,aAEpB62T,gBAAe,GAAM,GACrBpzV,OAAO03E,UAAUpb,OAAOviE,QAAU3I,KAAKgO,GACvCY,OAAO03E,UAAU59D,SAAS/f,QAAU,EAChC8oC,SAASC,WAAa6R,kBAAkB,GAAG7R,WAAyB,KAAZ1xC,KAAKgO,KAC/DwiK,iBAAiB/0F,eAAeg1F,eAChCh/H,SAAS6oC,OAAOsQ,OAAOpwE,QAEpBi3B,SAASC,WAAWm5B,IAAImtE,WAAWnnG,WAAWr2B,QAGjD8xC,kBACF,OAAoE,KAA5D19C,OAAO03E,UAAUpb,OAAOqtE,cAAiB,GAAKv4I,KAAKgO,IAG7D6+D,WACEj+D,OAAO03E,UAAUpb,OAAOqtE,eAAiB,GAAKv4I,KAAKgO,GAInDgrC,YAAY,IAAI8rF,YAChB9rF,YAAY,IAAI8rF,YAKhBjzC,gBAAgBC,aAAaC,eAC7BrT,UAAUkT,4BAA4BoU,aAGpCxyB,WACF,OAAI/hC,SAASC,WAAaD,SAASk6G,kBAAkBp4I,SAASvT,KAAKgO,IAC1DqN,EAAAA,MAEFrS,QAAQu+D,iBAGjBu6R,sBACE,MAAMxpN,EAAY1pI,OAAO03E,UAAUpb,OAAOotE,UACtC,IAAItvI,QAAQsvI,EAAUt4I,KAAKgO,GAAK,IAAIqJ,IAAIzI,OAAO+zC,QAAQqc,aAAap2C,QAGxEha,OAAO03E,UAAUpb,OAAOotE,UAAUt4I,KAAKgO,GAAK,GAAKY,OAAO+zC,QAAQqc,aAAap2C,KAC7E81D,UAAUsxE,iBAAiBhqD,aAC3BtnB,UAAUkwE,mBAAmB5oD,cAG/B8kF,OACEl8K,OAAO03E,UAAUpb,OAAOviE,QAAU,EAClCq5V,gBAAe,GAAM,GAChBvwT,SAASC,WAAWm5B,IAAImtE,WAAWnnG,WAAWr2B,QAQhD,MAAM2zC,IAAkB61S,IAAqB1xL,eAAe5lG,aAAa2qB,WAAWnsB,QAK3FxoE,OAAO+Q,eAAe06C,IAAiB,UAAW,CAChDz7C,IAAK,IAAO9D,OAAO03E,UAAUpb,OAAOviE,QAAU,EAC1CwlD,IAAgBv/C,OAAO03E,UAAUpb,OAAOviE,cACxCpG,IAGNG,OAAO+Q,eAAe06C,IAAiB,YAAa,CAClDz7C,IAAK,IAA0C,IAApC9D,OAAO03E,UAAUpb,OAAOviE,UAG9B,MAAMyjD,IAAmB,CAI9BC,IAAK8B,IAAgBpmD,MAAM4F,UAC3BsuK,cACE,IAAK,MAAM31F,KAAal6B,IAAiBC,IAAKi6B,EAAUzZ,YAE1D2xG,mBACE5vK,OAAO03E,UAAUpb,OAAOqtE,cAAgB,ICnKrC,SAASoiE,MACd,GAAI9yI,kBAAkB4zB,OAAOrpD,UAAW,CACtC,MAAM8xT,EAAa33S,IAAmBF,IAAIzpD,QAAOgL,GAAKA,EAAEu9B,aAAev9B,EAAE0+C,cACzE,IAAK,MAAMg6B,KAAa49Q,EAAY59Q,EAAUzZ,YAIlD,MAAMs3R,YAAqC/5T,EACzCpoC,YAAY3B,EAAQimF,GAClBptE,MAAM7Y,GACNL,KAAKq3Q,WAAa/wL,EAGhB79C,qBACF,OAAOzoC,KAAKq3Q,WAAW/qN,aAI3B,MAAM83S,YAA+Bh6T,EACnCpoC,YAAY3B,GACV6Y,MAAM7Y,GACNL,KAAKy3Q,QAAU,IAAI0sF,IAA6B9jW,EAAO+sD,OAAQptD,MAG7D22F,eACF,OAAO32F,KAAKK,OAAOs2F,SAGjBxrD,iBACF,OAAOv8B,OAAO+zC,QAAQsW,aAAagG,MAAM/tC,IAAIlxB,KAAK22F,WAAc39C,YAAY,KAAK7N,aAAe0G,MAAMC,UACnGub,aAAa8vB,uBAAuBz0C,cAAgBmJ,MAAM45C,IAAI9oC,QAAQC,gBAAgB1xB,IAAIlxB,KAAK22F,UAGhGjlD,gBACF,OAAO9iC,OAAO03E,UAAU59D,SAAS/f,UAAY3I,KAAKgO,GAGpD+8K,eACO/qL,KAAKmrC,aACN58B,QAAQq+B,oBAAsBC,eAAeC,oBAC5Cl+B,OAAOysF,QAAQouD,cAAcpyD,WAIlC98E,MAAMgmU,uBAAuB/lU,KAAKxa,KAAKgO,IAHrChO,KAAKwL,UAMTA,QACOxL,KAAKmrC,aAAcnrC,KAAK0xC,YAE7BswT,gBAAe,GAAM,GACrBpzV,OAAO03E,UAAUpb,OAAOviE,QAAU,EAClCiG,OAAO03E,UAAU59D,SAAS/f,QAAU3I,KAAKgO,GACpCyjC,SAASC,WAAWm5B,IAAImtE,WAAWnnG,WAAWr2B,OACnD5L,OAAOo9C,OAAQ,EACXzI,kBAAkB7R,WAAWsH,YAAY,KAAKzN,UAGhD+gB,kBACF,OAAsE,KAA9D19C,OAAO03E,UAAU59D,SAAS6vH,cAAiB,GAAKv4I,KAAKgO,IAG/D6+D,WACEj+D,OAAO03E,UAAU59D,SAAS6vH,eAAiB,GAAKv4I,KAAKgO,GACrDjM,SAASe,SAASY,WAAWgC,8BAG3B+iC,qBACF,OAAOzoC,KAAK0xC,UAMV0b,aACF,OAAOptD,KAAKy3Q,QAGV/gL,wBACF,OAAO12F,KAAKK,OAAOq2F,kBAGjBljB,WACF,OAAOxzE,KAAKK,OAAOmzE,KAGrBsuR,sBACE,MAAMxpN,EAAY1pI,OAAO03E,UAAU59D,SAAS4vH,UACxC,IAAItvI,QAAQsvI,EAAUt4I,KAAKgO,GAAK,IAAIqJ,IAAIzI,OAAO+zC,QAAQqc,aAAap2C,QAGxEha,OAAO03E,UAAU59D,SAAS4vH,UAAUt4I,KAAKgO,GAAK,GAAKY,OAAO+zC,QAAQqc,aAAap2C,KAC/E81D,UAAUuxE,yBAAyBjqD,cAGrC8kF,OACEl8K,OAAO03E,UAAU59D,SAAS/f,QAAU,EACpCq5V,gBAAe,GAAM,GAChBvwT,SAASC,WAAWm5B,IAAImtE,WAAWnnG,WAAWr2B,QAQhD,MAAM2yC,IAAoBi3S,IAAuB9xL,eAAe5lG,aAAa2qB,WAAW3uE,UAK/FhmB,OAAO+Q,eAAe05C,IAAmB,UAAW,CAClDz6C,IAAK,IAAO9D,OAAO03E,UAAU59D,SAAS/f,QAAU,EAC5CwkD,IAAkBv+C,OAAO03E,UAAU59D,SAAS/f,cAC5CpG,IAGNG,OAAO+Q,eAAe05C,IAAmB,YAAa,CACpDz6C,IAAK,SAAoCnQ,IAA9B4qD,IAAkBxkD,UAGxB,MAAM4jD,IAAqB,CAIhCF,IAAKc,IAAkBplD,MAAM4F,UAC7BsuK,cACE,IAAK,MAAM31F,KAAa/5B,IAAmBF,IAAKi6B,EAAUzZ,YAE5D2xG,mBACE5vK,OAAO03E,UAAU59D,SAAS6vH,cAAgB,GAExC7mD,aACF,OAAOnlC,IAAmBF,IAAI7+C,MAAKI,IAAMA,EAAEu9B,cAEzC6qO,qBAAiB,MACnB,iBAAOh2Q,KAAK0xF,cAAZ,aAAO,EAAaiF,UAMtBhF,eAAe7pF,GAEb,IAAI+/D,kBAAkB4zB,OAAOrpD,gBACK7vC,IAA9BgqD,IAAmBmlC,OACvB,IAAK,MAAMziC,KAAM1C,IAAmBF,IAClC,IAAI4C,EAAG9jB,aAAc8jB,EAAG3C,YAAxB,CACA,GAAIxkD,EAAM4P,GAAGu3C,EAAG0nC,UAAW,MAG3B9E,gBAAgBsc,SAASpc,eACzB9uF,OAAOiqG,OAAOxkF,SAAU,wCAAuCumC,EAAGjhD,KAAM,KACxE6jF,gBAAgBsc,SAASnc,eAMzB1qB,gBACF,OAAO/a,IAAmBF,IAAIzpD,QAAOqsD,GAAMA,EAAG3C,gBC5JrCg0O,IAAmB,CAC1BE,iBACF,OAAO3/R,KAAKuT,MAAM7K,OAAO2O,YAEvBqoR,kBACF,OAAIrrO,aAAarP,SAASsP,WAAa5Q,IAAWryC,OAAOgf,IAAI7V,EAAAA,SAAc6zB,GAAe,IAAIpD,SAAiB,GAC3GopB,aAAarP,SAASsP,WAAa5Q,IAAWryC,OAAOgf,IAAI7V,EAAAA,OAAkB,EAC3Ew2B,MAAMC,SAAiB,EACpBuhB,gBAAgBgxS,YAAYj8T,cAMvC,SAASk8T,IAAsBh0L,GAC7B,GAAI1hK,OAAO0rD,WAAW9V,SAAW,KAC/B51C,OAAO0rD,WAAW9V,SAAW,UAG/B,GAAI8rH,EAAc,EAAG,CACnB,IAAI1iK,EAAIgB,OAAO0rD,WAAW9V,SAAW,KAAS,EAAI8rH,EAC9C1hK,OAAO0rD,WAAW9V,SAAW52C,EAAI,KACnCgB,OAAO0rD,WAAW9V,UAAY52C,EAG9BgB,OAAO0rD,WAAW9V,SAAW,KAE/B51C,OAAO+0C,kBAAkBkC,SAASC,MAAO,EACpC+hB,kBAAkB00B,kBAAkBnqD,YAAaP,MAAMC,WAC1DljC,OAAO+oF,gBAAkB,EACzBo4E,UAAU,GAAG,GAAM,KAOlB,SAAS3lB,IAAiB/0E,GAC/B,GAAIv8B,eAAe,GAAG00G,mBAEpB,YADKn4E,GAAMv8B,eAAe,GAAG6zH,uBAG/B,IAAKpoH,IAAWC,SAAS28O,WAAY,OACrC,MAAMojE,EAAahgT,IAAWC,SAAS+1J,KACnCgqJ,EAAa,IACjB31V,OAAO0rD,WAAWqhL,MAAQ,EAC1Bp3L,IAAWryC,OAAS8mC,YAAY,KAAK7N,aAAe0G,MAAMC,SACtD9oC,QAAQiP,MAAMssC,IAAWryC,OAAOkC,QAAU6b,gBAAkBs0U,GAC5DlpV,EAAAA,GACJipV,IAAsBC,IAIjB,SAASx5L,MACTxmH,IAAWC,SAAS28O,aACrBroP,eAAe,GAAG00G,mBAAoB10G,eAAe,GAAG6zH,sBACnD/9J,OAAOysF,QAAQouD,cAAcW,iBAAkB7vI,MAAM6vI,iBAAiB5vI,OAC1E4vI,KAAiB,IAKxB,SAASo6M,IAAuBC,EAAiBz0G,GAC/C,MAAM00G,EAAc10G,IAAsBl3M,eAAe,GAAG00G,mBAGtDm3M,EAAiBtpV,EAAAA,GAAAA,IAAUopV,EAAgBxtV,KAAKstC,IAAWryC,OAAOkC,UAExE,GAAIqwV,EAAgBrtV,GAAG7N,OAAO2O,YAAcysV,EAAevzV,GAAG,GAM5D,OALIszV,GACFJ,IAAsB//S,IAAWC,SAASp8C,IAAMwG,OAAO0rD,WAAW9V,UAEpED,IAAWryC,OAASwtD,MAEb+kS,EAGT,IAAKC,EAAa,CAChB,MAAME,EAAgBH,EAAgBvtV,MAAMwoD,MAAgBtrD,QAAUmwC,IAAWryC,OAAOkC,SAAS3L,SAAS,GAE1G,OADA87C,IAAWryC,OAASlJ,QAAQlI,IAAI6jW,EAAgBjlS,OACzCklS,EAGT,MAAMC,EAAkB77V,QAAQu+D,iBAAiBnzD,QAC3C0wV,EAAqBL,EAAgB/0V,WAAa60C,IAAWryC,OAAOkC,QACpEmrV,EAAQ1+V,KAAKuM,MAAMvM,KAAKC,IAAIgkW,EAAqBD,EACrDtgT,IAAWC,SAASp8C,IAAMwG,OAAO0rD,WAAW9V,WACxCugT,EAAcF,EAAkBtF,EAAQ7/R,MAAgBtrD,QAAUmwC,IAAWryC,OAAOkC,QACpFwwV,EAAgBH,EAAgBvtV,MAAM6tV,GAAat8V,SAAS,GAIlE,OAHA87C,IAAWryC,OAASlJ,QAAQiP,MAAM6sV,EAAqBD,EAAkBtF,GACtE/2V,SAASk3D,OACZ4kS,IAAsB/E,GACfqF,EAQF,SAAS9kE,IAAsBklE,EAAiB58H,GACrD,IAAI1/J,EAAW0/J,GAAcx5N,OAAO0rD,WAAWoO,SAC/CA,EAAW,IAAI1/D,QAAQ0/D,GACvB,MAAMx2D,EAASqyC,IAAWryC,OACpB+yV,OAA8B1iW,IAApByiW,EAAgC9yV,EAAOkF,GAAGsoD,OAAmBslS,EAK7E,IAJKx/S,UAAU,KAAK1Z,WAAakN,YAAY,KAAK7N,YAAe85T,KAC/Dv8R,EAAWA,EAAS9yD,MAAM,KAGxBqvV,EAAS,CACX,IAAIC,GAAahzV,EAAOkC,QAAUsrD,MAAgBtrD,SAAWksR,IAAiBE,WAC1EtrO,aAAarP,SAASsP,WAAajjD,EAAOgf,IAAI7V,EAAAA,SAAc6zB,GAAe,IAAIpD,WAGjFo5T,GAAarkW,KAAKuT,MAAM,IAAM,IAAOsrD,MAAgBtrD,SAAWksR,IAAiBE,YAEnF93N,EAAWA,EAAS9yD,MAAM5M,QAAQ6U,IAAIyiR,IAAiBC,YAAa2kE,IAiBtE,OAdAx8R,EAAWA,EAAS0oB,OAAO3xB,IAAyBwlS,IAEhD91U,EAAEuiB,YAGJg3B,EAAWA,EAAS7qD,IAAI,IAGtBsR,EAAEkmC,iBAIJqT,EAAWA,EAAS7qD,IAAI,IAEnB6qD,EAOF,SAASjJ,IAAyBwlS,GACvC,IAAIlzS,EAAY12C,EAAAA,GAYhB,GATA02C,EAAYA,EAAUn8C,MAAM23C,WAAWC,MAAMplB,aAC7C2pB,EAAYA,EAAUn8C,MAAMi8B,MAAM+b,mBAAmBjlC,aACrDopC,EAAYA,EAAUn8C,MAAMq+C,aAAagM,oBAAoB9L,aAC1DjiB,iBAAiB4U,IAAI1U,YACtB2f,EAAYA,EAAUn8C,MAAM,MAE3B+pC,GAAGC,QAAQ6W,gBAAgBtrB,aAC5B4mB,EAAYA,EAAUn8C,MAAMg7B,SAAS2R,YAAYz6C,MAAM+V,IAAI,QAASpV,SAAS,KAE3EopC,MAAMyP,WAAW,0BAA2B,OAAOyQ,EAEvDA,EAAYA,EAAUn8C,MAAM+pC,GAAGC,QAAQsH,kBAAkB3c,QAAQ+vB,WAAWlyB,aAG5E,MAAM+8T,EAAsBp8T,QAAQG,QAClCsc,UAAU,IACVA,UAAU,KACV1M,eAAe,GACfA,eAAe,GACfA,eAAe,KAiBjB,OAfAiZ,EAAYA,EAAUn8C,MAAMuvV,GACxB3/S,UAAU,KAAK1Z,UAAYiN,KAAKnH,aAAa9F,WAC/CimB,EAAYA,EAAUn8C,MAAM,KAGzBqvV,GAAWjsT,YAAY,KAAK7N,aAC/B4mB,EAAYA,EAAUn8C,MAAM,IAE9Bm8C,EAAYA,EAAUn8C,MAAM8vC,uBAAuB,qBAC/CnI,gBAAgBS,QAAQ,iBAC1B+T,EAAYA,EAAUn8C,MACpB/U,KAAK4H,SAASO,QAAQoL,MAAMmwC,IAAWryC,QAAUunD,wBAAwB,qBAAsB,KAEnG1H,EAAYA,EAAUnoB,eAAeypB,gBAAgB1qC,aAE9CopC,EAGF,SAAS2N,MACd,OAAOzwB,cAAcvmB,SAASggB,aAC1BkI,SAASm3B,gBAAgBjgE,MACxB+V,IAAI2nC,UAAU,IAAI1Z,SAAW,IAAM,IACnCrjC,SAAS,GACTmN,MAAM5M,QAAQu+D,kBACfv+D,QAAQu+D,iBAIP,SAASszI,IAAe5jF,GAC7B,IAAKroH,OAAO0rD,WAAWu9B,IAAK,OAC5B,MAAMutQ,EAAuB7gT,IAAWryC,OACxCs6I,iBAAiBhhJ,MAAM,cACvBzJ,SAASe,SAASY,WAAWI,wBAE7B,MAAM4kE,EAAWo3N,KAAsB,GACjCM,EAAa77O,IAAW67O,WACxBilE,EAAoB9gT,IAAWC,SAAS8gT,eAI9C,IAAIC,EAAYv8V,QAAQooF,OAAO,IAAIpoF,QAAQiuH,GAAM7tH,IAAIwF,OAAO0rD,WAAWqhL,OAAQjzK,GAC3E68R,EAAU7tV,GAAG,KAAM9I,OAAO0rD,WAAWqhL,MAAQ4pH,EAAUruV,MAAMquV,EAAUn4V,SAASwI,MAAM8yD,GAAUh5D,WAC/Fd,OAAO0rD,WAAWqhL,MAAQ,EAC/B4pH,EAAYA,EAAUn4V,QAEtB,MAAMo4V,EAAgBjhT,IAAWryC,OAAO0D,MAAMhH,OAAO0rD,WAAW8wC,QAGhE,GAAIm6P,EAAUr0U,IAAI,MAASs0U,EAAct0U,IAAI,KAAOq0U,EAAUr0U,IAAI,GAAK,CAKrE,IAAImvQ,EAAYx/R,KAAKuT,MAAMksR,IAAiBC,aAAeD,IAAiBE,WACxErxQ,EAAEuiB,YACJ2uP,GAAa,GAEXlxQ,EAAEkmC,iBACJgrO,GAAa,GAIf,IAAIukE,EAAgBW,EAAU3vV,MAAM/U,KAAKkK,IAAI6D,OAAO0rD,WAAW8wC,OAAS,IAAIx1F,MAAMya,SAOlF,GALK+vQ,IAAc77O,IAAWryC,OAAOmF,IAAIqoD,SAGvCklS,EAAgBJ,IAAuBI,EAAeS,IAEpDjlE,GAAc77O,IAAWryC,OAAOgf,IAAIwuC,QAAoBklS,EAAcxtV,GAAG,GAAI,CAO/E,MAAMquV,EAAgB3lE,KAAsB,GAAMvpR,IAAImyD,GACtDk8R,EAAgBA,EAAcruV,IAAIkvV,GAClClhT,IAAWryC,OACTlJ,QAAQqrB,IAAIuwU,EAAcruV,IAAI8Z,SAASza,MAAMyqR,GAAWppR,KAAK,GAAGkoE,KAAOkhN,EACvE97O,IAAWryC,OAAOzJ,SAAS,GAAG02E,YAE7B,GAAIomR,EAAUnuV,GAAG,GAAI,CAI1B,MAAMsuV,EAAa7kW,KAAKuM,MAAMm4V,EAAU71V,WAAa7O,KAAKyT,KAAK,EAAI1F,OAAO0rD,WAAW8wC,SAC/Eu6P,EAAgBJ,EAAU71V,WAAag2V,EAAa7kW,KAAKyT,KAAK,EAAI1F,OAAO0rD,WAAW8wC,QAE1F7mD,IAAWryC,OAASqyC,IAAWryC,OAAO0D,MAAMyF,EAAAA,GAAAA,IAAUgf,oBAAoBqrU,KAC1E,IAAK,IAAIrsU,EAAI,EAAGA,EAAIx4B,KAAKuM,MAAMu4V,GAAgBtsU,IAAK,CAClD,MAAMusU,EAAa3rU,qBAAqBsqB,IAAWryC,OAAQtD,OAAO0rD,WAAW8wC,QAC7E7mD,IAAWryC,OAASqyC,IAAWryC,OAAO+E,KAAK2uV,GAI7C,MAAMC,EAAWF,EAAgB9kW,KAAKuM,MAAMu4V,GAC5C/2V,OAAO0rD,WAAWqhL,OAASjzK,EAAS9yD,MAAMiwV,GAAUn2V,gBAC/C,GAAI61V,EAAUn0V,GAAG,GAAI,CAE1B,MAAMw0V,EAAa3rU,qBAAqBsqB,IAAWryC,OAAQtD,OAAO0rD,WAAW8wC,QAC7E7mD,IAAWryC,OAASqyC,IAAWryC,OAAO+E,KAAK2uV,GAc7C,GAXKxlE,IAAY77O,IAAWryC,OAASlJ,QAAQlI,IAAI4+D,MAAiBnb,IAAWryC,SAEzE2/B,MAAMC,UAAYyS,IAAWryC,OAAOkC,QAAUgxV,EAAqBhxV,QAAU,MAC/EmwC,IAAWryC,OAASkzV,EAAqBxvV,MAAM,QAI7ChH,OAAOorD,QAAQE,oBAAoBC,gBACrC5V,IAAWryC,OAASlJ,QAAQ6U,IAAI0mC,IAAWryC,OAAO6kD,GAAoBkB,QAAQC,IAAItpD,OAAOorD,QAAQC,WAAW,MAG1GorS,GAAqB9gT,IAAWryC,OAAOgf,IAAIloB,QAAQu+D,kBAAmB,CACxE,MAAM4kG,EAAQzlG,UAAU0jF,iBAClB07M,EAAS35L,EAAMiF,SAAWjF,EAAMupD,UAGtCtrE,IAAiB07M,IAAWvhT,IAAWC,SAAS85J,kBAElD1vM,OAAO+zC,QAAQsF,YAAY8nC,cAAgBnhF,OAAO+zC,QAAQsF,YAAY8nC,cACnEtnF,SAAS87C,IAAWryC,QACvBnQ,SAASe,SAASY,WAAWK,uBAC7ByoJ,iBAAiBx1E,MAGZ,SAASlZ,MACd,OAAO90D,QAAQ6U,IAAI7U,QAAQsL,KAAKiwC,IAAWryC,OAAOzJ,SAAS,IAAK,GAC7D8gC,aAAaic,UAAU,KACvB7b,cAAc6b,UAAU,MACxB/8C,SAAS,GACToV,IAAI6nC,uBAAuB,mBAIhC,MAAMqgT,IAEA/3V,SAAO,MAAM,IAAIiL,oBAEjBnR,YAAU,MAAM,IAAImR,oBAGpBnR,UAAMA,GAAS,MAAM,IAAImR,oBAGzB0vN,gBAAc,MAAM,IAAI1vN,oBAGxB0yB,WAAS,MAAM,IAAI1yB,oBAEnB0yB,SAAK7jC,GAAS,MAAM,IAAIwF,MAAM,4BAG9B60F,mBAAiB,MAAM,IAAIlpF,oBAE3BuY,eAAa,OAAOxxB,KAAK2rC,KAEzBna,aAAS1pB,GAAS,MAAM,IAAImR,oBAE5BsuB,WACAmF,eAAa,OAAO,EAGpB01Q,yBAAuB,MAAM,IAAInpS,oBAEjC8yB,kBACF,OAAgB,IAAZ/rC,KAAKgO,KAAYhO,KAAK0sC,aAClB1sC,KAAK0sC,UAAYkE,SAASI,eAAe9f,IAAIlxB,KAAK2rC,OAA+B,IAAtB/8B,OAAOmwI,YAG5E/yG,WACOhsC,KAAK+rC,cACV6E,SAASI,eAAe/E,SAASjsC,KAAK2rC,MACtC3rC,KAAKwxB,SAAWxoB,QAAQ4M,MAAM5V,KAAKwxB,SAAUxxB,KAAKmiG,cAClDniG,KAAK8H,MAAQ9H,KAAK2oO,UACdplL,kBAAkB,GAAG7R,WAAW9iC,OAAOmwI,aAC3C97I,OAAOkpC,UAGTk2Q,gBACE,MAAOriT,KAAK+rC,YACV/rC,KAAKgsC,YAKJ,MAAMyuB,IAAoB,CAC/B2wC,OAAQ,IAAI,cAAsC26P,IAC5C/3V,SAAO,OAAO,EAEdlG,YAAU,OAAO8G,OAAO0rD,WAAW8wC,OACnCtjG,UAAMA,GAAS8G,OAAO0rD,WAAW8wC,OAAStjG,EAE1C6gO,gBACF,OAAO3oO,KAAKgmW,eAAehmW,KAAK8H,MAAQ,KAGtC6jC,WACF,OAAO/8B,OAAO0rD,WAAWgkF,WAAWt0G,kBAAkBujB,WAAWoM,OAAOlM,WAAW,IAGjFj8B,eAAa,OAAO5iB,OAAO0rD,WAAWgkF,WACtC9sH,aAAS1pB,GAAS8G,OAAO0rD,WAAWgkF,WAAax2I,EAEjDq6F,mBAAiB,OAAO,KAExB56D,UAEF,OAAO,EAGLmF,eACF,OAAO1sC,KAAKgmW,eAAehmW,KAAK8H,QAAU9H,KAAKunC,IAG7C66Q,yBACF,OAAOv6O,kBAAkB20B,0BAG3B6lN,gBAIE,IAAI2F,EAAIp3Q,SAASI,eAAelpC,MAAM8N,MAAM5V,KAAKmiG,aAAe,GAC7DhrF,UAAUnX,KAAK2rC,MAAM10B,KAAK,GAAGlM,IAAI/K,KAAKmiG,cAEzC,GADA6lN,EAAInnT,KAAK05B,MAA6E,KAAtE15B,KAAKC,IAAId,KAAK8H,MAAQ,IAAOjH,KAAKuM,MAAM46S,GAAIhoT,KAAKunC,KAAOvnC,KAAK8H,QACzEkgT,GAAK,EAAG,OACZ,MAAMr2R,EAAY3xB,KAAK2rC,KAAK/1B,MAAM5M,QAAQ6U,IAAI7d,KAAKmiG,aAAc6lN,GAAG9wS,MAAM,GAAGC,UAAUnX,KAAKmiG,aAAe,IAC3GvxD,SAASI,eAAe/E,SAASta,GACjC3xB,KAAKwxB,SAAWxxB,KAAKwxB,SAAS5b,MAAM5M,QAAQ6U,IAAI7d,KAAKmiG,aAAc6lN,IACnEhoT,KAAK8H,MAAQ9H,KAAKgmW,eAAehmW,KAAK8H,MAAQ,IAAOkgT,GAIvDg+C,eAAep4V,GACb,OAAO/M,KAAK05B,MAAM,IAAM3sB,GAAK,MAGjC86D,SAAU,IAAI,cAAwCq9R,IAChD/3V,SAAO,OAAO,EAEdlG,YAAU,OAAO8G,OAAO0rD,WAAWoO,SACnC5gE,UAAMA,GAAS8G,OAAO0rD,WAAWoO,SAAW5gE,EAE5C6gO,gBACF,OAAO3/N,QAAQZ,IAAIpI,KAAK8H,MAAM8N,MAAM,IAAM5V,KAAKunC,KAG7CoE,WACF,OAAO/8B,OAAO0rD,WAAWikF,aAAav0G,kBAAkBujB,WAAWoM,OAAOlM,WAAW,IAGnFj8B,eAAa,OAAO5iB,OAAO0rD,WAAWikF,aACtC/sH,aAAS1pB,GAAS8G,OAAO0rD,WAAWikF,aAAez2I,EAEnDq6F,mBAAiB,OAAO,KAExB56D,UACF,OAAOwB,QAAQjoC,IAAI,GAAI0kD,UAAU,KAG/B9Y,eACF,OAAO1sC,KAAK8H,MAAMuP,IAAIrX,KAAKunC,KAGzB66Q,yBACF,OAAOv6O,kBAAkB40B,4BAG3B6mM,eAAex7R,GACb,OAAOg4R,SAAsBv9R,EAAW,IAAIyG,QAAQlB,MAGxD08C,SAAU,IAAI,cAAwCuhT,IAChD/3V,SAAO,OAAO,EAEdlG,YAAU,OAAO8G,OAAO0rD,WAAWwkC,gBACnCh3F,UAAMA,GAAS8G,OAAO0rD,WAAWwkC,gBAAkBh3F,EAEnD6gO,gBACF,OAAO3oO,KAAK8H,MAAQ,EAGlB6jC,WACF,OAAO3rC,KAAKwxB,SAASyY,mBAAmBub,UAAU,KAAM+H,WAAWoM,OAAOlM,WAAW,IAGnFj8B,eAAa,OAAO5iB,OAAO0rD,WAAWkkF,QACtChtH,aAAS1pB,GAAS8G,OAAO0rD,WAAWkkF,QAAU12I,EAE9C87R,qBACF,OAAO,IAAM76P,QAAQvlC,IAAIo6D,eAAej1C,cAAgBumB,GAAe,IAAIpD,SAAW,KAAO,GAG3F+3P,oBACF,OAAO,IAAO96P,QAAQvlC,IAAIo6D,eAAej1C,cAAgBumB,GAAe,IAAIpD,SAAW,IAAO,GAG5Fq2D,mBACF,MAAM39C,EAAWxkD,KAAK8H,MACtB,IAAI88N,EAAWrhL,kBAAkB,GAAG7R,UAChCr2B,EAAAA,GAAAA,IAAUmpC,GAAU5uC,MAAMyF,EAAAA,IAC1BA,EAAAA,GAAAA,IAAUmpC,GAAU5uC,MAAMyF,EAAAA,KAO9B,OANImpC,GAAYxkD,KAAK4jS,iBACnBh/D,EAAWA,EAAShvN,MAAMyF,EAAAA,IAAAA,IAAWmpC,EAAWxkD,KAAK4jS,eAAiB,KAEpEp/O,GAAYxkD,KAAK6jS,gBACnBj/D,EAAWA,EAAShvN,MAAMyF,EAAAA,GAAAA,IAAUxa,KAAKgd,IAAI2mC,EAAWxkD,KAAK6jS,cAAgB,EAAG,MAE3Ej/D,EAGLw9E,yBACF,OAAOv6O,kBAAkB60B,+BAEvBn1D,UACF,OAAO,KAGLmF,eACF,OAAO1sC,KAAK8H,MAAQ9H,KAAKunC,IAGvBizB,YACF,OAAOzxB,QAAQ3gC,IAAI,EAAGo9C,UAAU,MAAQ+H,WAAWC,MAAMC,WAAW,GAAG9kB,gBAAgB,GAGzF05Q,gBAEE,IAAIr6O,EAAO,KACX,IACEA,EAAOx3C,oBAAoBogB,SAASI,eAAelpC,MAAO,CACxD8oB,aAAchjB,GAAK5N,KAAKimW,mBAAmBr4V,GAAGo8B,kBAAkBwb,UAAU,MAC1E30B,UAAW7wB,KAAK2rC,KAChB5a,YAAY,GACX/wB,KAAK8H,OAEV,SACE,OAEGkgE,IACLp3B,SAASI,eAAe/E,SAAS+7B,EAAK52C,eAEpCpxB,KAAK8H,OAASkgE,EAAK72C,SACnBnxB,KAAKwxB,SAAWxxB,KAAKimW,mBAAmBjmW,KAAK8H,QAGjDm+V,mBAAmBp6V,GACjB,MAAMyqB,EAAU,IACV4vU,EAAkB3iT,kBAAkB,GAAG7R,UAAY,EAAI,GACvDy0T,EAAiB5iT,kBAAkB,GAAG7R,UAAY,EAAI,EACtD00T,EAA+B,IAAMr9T,QAAQvlC,IAAIo6D,eAAej1C,cAAgBumB,GAAe,IAAIpD,SAAW,KAAO,GACrHu6T,EAA8B,IAAOt9T,QAAQvlC,IAAIo6D,eAAej1C,cAAgBumB,GAAe,IAAIpD,SAAW,IAAO,GAC3H,IAAItV,EAAUF,EAAUzqB,EAAQq6V,EAAmBr6V,GAASA,EAAQ,GAAK,EAAKs6V,EAC9E,GAAIt6V,EAAQu6V,EAA8B,CACxC,MAAME,EAAoB,GAGpBC,EAAkB,EAClBC,EAAa36V,EAAQu6V,EAC3B5vU,GAAW8vU,EAAoBE,GAAcA,EAAa,EAAID,EAAkB,GAAK,EAEvF,GAAI16V,EAAQw6V,EAA6B,CACvC,MAAMI,EAAmB,EACnBC,EAAY76V,EAAQw6V,EAE1B7vU,GAAWiwU,EAAmBC,GAAaA,EAAY,IAAM,EAAIA,EAAY,GAAK,EAEpF,OAAO19V,QAAQiP,MAAMue,MAKd+tB,IAAa,CACpB0H,kBACF,OAAOr9C,OAAO0rD,WAAWu9B,KAE3BrG,MAAMj+B,GAAQ,GACZ,MAAM2gB,GAAW3gB,GAAgBsU,kBAAkB+zB,iBAAiBxpD,UACpExjC,OAAO0rD,WAAa,CAClBu9B,IAAK3jB,EACLhiE,OAAQgiE,EAAW74D,EAAAA,GAAQA,EAAAA,GAC3BsgO,MAAO,EACPvwI,OAAQ,IACRkzC,WAAYjjI,EAAAA,KACZqtD,SAAUrtD,EAAAA,GACVkjI,aAAcljI,EAAAA,KACdyjF,gBAAiB,EACjBt6C,SAAU,EACVg6F,QAASnjI,EAAAA,OAGbkwB,OAAOo7T,GAAa,GAClB,MAAMh7T,EAAOtwB,EAAAA,KAAAA,kBAA0BkyC,WAAWoM,OAAOlM,WAAW,IAChE7+C,OAAO0rD,WAAWu9B,MAClB8uQ,GAAc/1T,SAASI,eAAe9f,IAAIya,MACvCg7T,GAAY/1T,SAASI,eAAe/E,SAASN,GAClD/8B,OAAO0rD,WAAWu9B,KAAM,EACxBjpF,OAAO0rD,WAAWqhL,MAAQ,EAC1Bp3L,IAAWryC,OAASmJ,EAAAA,KAGpBnJ,aACF,OAAOtD,OAAO0rD,WAAWpoD,QAEvBA,WAAOpK,GACT8G,OAAO0rD,WAAWpoD,OAASpK,GAEzBsjG,aACF,OAAO3wC,IAAkB2wC,OAAOtjG,OAElC08C,SAAU,CACR85J,kBAAkB,EACdntJ,aACF,OAAOtwD,KAAKC,IAAI,KAAQ8N,OAAO0rD,WAAW9V,WAExCgW,YACF,OAAO35D,KAAKC,IAAID,KAAKuM,OAAO27B,QAAQvlC,IAClCgiD,UAAU,KACVA,UAAU,MACRrG,QAAQ2kP,SAAWt+O,UAAU,KAAK7c,gBAAgB,IAAK,OAEzD8b,YACF,OAAOzkD,KAAKmxD,OAASnxD,KAAKw6D,OAExBpyD,UACF,OAAOvH,KAAKC,IAAI,KAAQ25D,IAAkBjW,SAAS18C,OAASjH,KAAKC,IAAI,KAAQ25D,IAAkBjW,SAASgW,QAEtG2mO,iBACF,QAAInhS,KAAKmxD,QAAU,UACd5M,IAAWryC,OAAOgf,IAAIloB,QAAQu+D,mBAC5BvnE,KAAKmxD,OAASnxD,KAAKoI,MAExBk9V,qBACF,MAAMn5L,EAAQzlG,UAAU0jF,iBAExB,OAAQ+hB,EAAMiF,SAAWjF,EAAMupD,YAC3B9mN,OAAOysF,QAAQouD,cAAcW,kBAAoBpqJ,KAAKs+M,kBAExD/D,WACF,IAAKv6M,KAAKmhS,WAAY,OAAO,EAC7B,GAAInoP,YAAY,KAAK7N,WAAY,CAC/B,MAAMo5Q,EAAUhgQ,IAAWC,SAASp8C,IAAMwG,OAAO0rD,WAAW9V,SACtDoiT,EAAgBriT,IAAWryC,OAAOkC,QACxC,OAAOvT,KAAKC,IAAIyjT,EAAS1jT,KAAKuM,MAAMw5V,EAAgB32U,kBAEtD,OAAO,IAGPmwQ,iBACF,OAAO56O,UAAU,KAAK1Z,UAAYyhB,WAAWoM,OAAOlM,WAAW,GAAG/kB,eCzmB/D,MAAMkqD,IAIP1gF,aAAW,MAAM,IAAI+G,oBAKrB/G,WAAOpK,GAAS,MAAM,IAAImR,oBAE9B7P,IAAI8I,GAAUlS,KAAKkS,QAAUA,EAKzBu5B,eAAa,MAAM,IAAIxyB,oBAEvB0yB,WAAS,OAAO3rC,KAAK6mW,SAASjxV,MAAM5V,KAAK8mW,cAAcjpV,IAAI7d,KAAKkS,SAKhE20V,eAAa,MAAM,IAAI5tV,oBAKvB6tV,oBAAkB,MAAM,IAAI7tV,oBAE5B8tV,mBACF,OAAIhuT,KAAK/E,OAAOtL,aACP7nC,KAAKuM,MAAMpN,KAAKyrC,SAAS3jC,MAAMspF,OAAOpxF,KAAK2rC,MAAMv3B,QAAUpU,KAAK8mW,cAAc1yV,QAAU,GAE1FpL,QAAQgrT,sBAAsBh0T,KAAKyrC,SAAS3jC,MAAO9H,KAAK2rC,KAAM3rC,KAAK8mW,cAAe,GAAGp3V,WAK9Fs3V,SAAS90V,GACP,OAAOlS,KAAK2rC,KAAK/1B,MAAM5V,KAAK8mW,cAAcjpV,IAAI3L,EAAS,IAGzD85B,SAASg8B,GACP,IAAKhoE,KAAKwkS,UAAW,OAAO,EAC5B,IAAItjO,GAAY,EAChB,MAAMhvD,EAASlS,KAAK+mW,aACdE,EAAQt7T,GAASoN,KAAK/E,OAAOtL,aAAe1oC,KAAKyrC,SAASva,IAAIya,GAAQ3rC,KAAKyrC,SAASO,SAASL,GAcnG,OAZIq8B,GAAQi/R,EAAMjnW,KAAKgnW,SAAS90V,MAC9B0+B,SAASiW,aAAaz9C,IAAI8I,GAC1BlS,KAAKoJ,IAAI8I,GACTgvD,GAAY,GAEV+lS,EAAMjnW,KAAK2rC,QACbiF,SAASiW,aAAaz9C,IAAI,GAC1BpJ,KAAKoJ,IAAI,GACT83D,GAAY,GAEVA,IAAWtyD,OAAO+0C,kBAAkB56B,QAAQmgD,eAAgB,GAC5DupB,IAAao8P,iBAAmB,KAAK35R,aAAa6U,IAAIgyD,UACnD76D,EAGLsjO,gBACF,OAAOxkS,KAAKyrC,SAASva,IAAIlxB,KAAK2rC,QAAU/8B,OAAOq4C,WAAW71C,GAAG,GAG/DogF,QACExxF,KAAKkS,OAAS,GAIlB0gF,IAAwBvf,GAAK,IAAI,cAAcuf,IACzC1gF,aAAW,OAAOtD,OAAO2pC,UAAUkmG,SACnCvsI,WAAOpK,GAAS8G,OAAO2pC,UAAUkmG,SAAW32I,EAE5C2jC,eAAa,OAAOmF,SAASC,WAC7Bg2T,eAAa,OAAOxrV,EAAAA,OACpByrV,oBACF,OAAIl4V,OAAOorD,QAAQE,oBAAoBC,cAC9B9+C,EAAAA,OAAAA,MAAgB07C,GAAoBgB,IAAIC,WAAWppD,OAAOorD,QAAQC,WAAW,KAE/E5+C,EAAAA,SAIXu3E,IAAwBrf,GAAK,IAAI,cAAcqf,IACzC1gF,aAAW,OAAOtD,OAAO2pC,UAAUmmG,SACnCxsI,WAAOpK,GAAS8G,OAAO2pC,UAAUmmG,SAAW52I,EAE5C2jC,eAAa,OAAOmF,SAASI,eAC7B61T,eAAa,OAAOxrV,EAAAA,GACpByrV,oBACF,OAAIl4V,OAAOorD,QAAQE,oBAAoBC,cAC9B9+C,EAAAA,KAAAA,MAAc07C,GAAoBgB,IAAIC,WAAWppD,OAAOorD,QAAQC,WAAW,KAE7E5+C,EAAAA,OAIXu3E,IAAwBvpB,GAAK,IAAI,cAAcupB,IACzC1gF,aAAW,OAAOtD,OAAO2pC,UAAUomG,SACnCzsI,WAAOpK,GAAS8G,OAAO2pC,UAAUomG,SAAW72I,EAE5C2jC,eAAa,OAAOmF,SAASO,eAC7B01T,eAAa,OAAOxrV,EAAAA,GACpByrV,oBACF,OAAIl4V,OAAOorD,QAAQE,oBAAoBC,cAC9B9+C,EAAAA,GAAAA,MAAY07C,GAAoBgB,IAAIC,WAAWppD,OAAOorD,QAAQC,WAAW,KAE3E5+C,EAAAA,GAGT2rV,SAAS90V,GACP,OAAI6mC,KAAK/E,OAAOtL,aAAqB1oC,KAAK2rC,KAAK/1B,MAAM5V,KAAK8mW,cAAcjpV,IAAI3L,EAAS,IAC9ElS,KAAK8mW,cAAcjpV,IAAI3L,EAASlS,KAAKkS,QAAQ+5B,SAASjsC,KAAK2rC,QAI/D,MAAM8mD,IAAe,CAC1By0Q,eAAe7xR,GACb,SAAIxoC,eAAesf,oBAAqBpF,cAAc,GAAGoK,UACpDkkB,GAAM96D,MAAMjC,QAAQkC,KAAM,4BAA2BnL,UAAU,kEACjD,CAAEgnK,WAAY3yK,WAAWiB,uBACrC,IAGT4xN,OAAOlhJ,GAAO,EAAOl/B,GACnB,OAAKn2C,KAAKknW,eAAe7xR,IACpBud,IAAwBz8C,GAAMnK,UAAS,GACrC,EAFgC,GAMzC42Q,eACE,IAAK5iT,KAAKknW,gBAAe,GAAO,OAAO,EACvC,MAAMC,EAAOnnW,KAAKu2N,QAAO,EAAM,MACzB6wI,EAAOpnW,KAAKu2N,QAAO,EAAM,MACzB8wI,EAAOrnW,KAAKu2N,QAAO,EAAM,MAC/B,OAAO4wI,EAAOC,EAAOC,GAGvBnuN,OAAO7jE,GAAO,GACZ,IAAKr1E,KAAKknW,eAAe7xR,GAAO,OAAO,EACvC,MAAM8xR,EAAOv0Q,IAAwBvf,GAAGrnC,UAAS,GAC3Co7T,EAAOx0Q,IAAwBrf,GAAGvnC,UAAS,GAC3Cq7T,EAAOz0Q,IAAwBvpB,GAAGr9B,UAAS,GACjD,OAAOm7T,EAAOC,EAAOC,GAGvBxY,iBACE,OAAOj8P,IAAwBvf,GAAGnhE,OAC5B0gF,IAAwBrf,GAAGrhE,OAC3B0gF,IAAwBvpB,GAAGn3D,QAGnCwgF,2BACE,IAAI/gE,EAAY6zB,UAAUsvJ,iBACvBxxM,KAAIyrD,GAAMA,EAAGpjB,OACbl/B,OAAOlD,OAAON,WAAY,GAC7B,MAAM+rM,EAAUxvJ,UAAUwN,kBAAkBrqD,UAK5C,YAJgBpG,IAAZyyM,IACFrjL,GAAaqjL,EAAQrpK,MAEnB8F,SAASC,WAAa9iC,OAAOC,WAAWm9D,SAAS82E,iBAAgBnxH,GAAa,KAC3EA,ICxKX,MAAM21U,YAA8B/6T,EAClCvqC,YAAY3B,GACV6Y,MAAM7Y,GACNL,KAAK2qC,eAAetqC,EAAOqiD,YAAY,IAAM1iD,KAAK8kI,cAEhDh5F,eACF,OAA8C,KAAtC9rC,KAAKirC,KAAQ,GAAKjrC,KAAKwsC,UAG7BV,aAAShkC,GACPA,EACF9H,KAAKirC,MAAS,GAAKjrC,KAAKwsC,SAExBxsC,KAAKirC,QAAU,GAAKjrC,KAAKwsC,UAGzBj9B,WACF,OAAOvP,KAAKK,OAAOkP,KAGjB8yC,kBACF,MAA0C,oBAA5BriD,KAAKK,OAAOgiD,YAA6BriD,KAAKK,OAAOgiD,cAAgBriD,KAAKK,OAAOgiD,YAG7FwC,gBACF,MAAwC,oBAA1B7kD,KAAKK,OAAOwkD,UAA2B7kD,KAAKK,OAAOwkD,YAAc7kD,KAAKK,OAAOwkD,UAGzFpZ,eACF,OAAOmF,SAASoU,kBAGdxY,eACF,OAAOxsC,KAAKgO,GAGVi9B,WACF,OAAOr8B,OAAOma,QAAQu3H,qBAGpBr1G,SAAKnjC,GACP8G,OAAOma,QAAQu3H,qBAAuBx4I,EAGpCylJ,oBACF,OAAqE,KAA7D3+I,OAAOma,QAAQm1H,QAAQsC,UAAa,GAAKxgJ,KAAKwsC,UAGpD+gH,kBAAczlJ,GACZA,EAAO8G,OAAOma,QAAQm1H,QAAQsC,WAAa,GAAKxgJ,KAAKwsC,SACpD59B,OAAOma,QAAQm1H,QAAQsC,aAAe,GAAKxgJ,KAAKwsC,UAGnDghH,yBACF,OAAOxtJ,KAAKutJ,eAAiBvtJ,KAAKu1E,aAAev1E,KAAK4rC,uBAIxD2iI,gBAAgBzmK,GACd9H,KAAKutJ,cAAgBzlJ,EAGvB0mK,qBACExuK,KAAKutJ,eAAiBvtJ,KAAKutJ,cAI7Bof,oBAAoB8B,GACdzuK,KAAKu1E,aAAev1E,KAAK4rC,wBAC3BrxB,MAAMm0J,YAAYl0J,KAAK,CAAEs6D,QAAS90E,KAAM2uK,aAAa,EAAMF,gBAAAA,IAI3D7iI,6BACF,QAAGsG,iBAAiBwR,MAAMtR,YACoC,KAAtDxjC,OAAOma,QAAQw3H,iBAAoB,GAAKvgJ,KAAKgO,KAAekkC,iBAAiBoQ,KAAKlQ,YAAc,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,IAAI7+B,SAASvT,KAAKgO,KAASkkC,iBAAiBs9D,MAAMp9D,WAAyB,KAAZpyC,KAAKgO,IAG/LunE,iBACF,QAAiB,KAAZv1E,KAAKgO,IAAyB,KAAZhO,KAAKgO,KAAckkC,iBAAiBwR,MAAMtR,gBAG9DF,iBAAiBoQ,KAAKlQ,WAA0B,KAAZpyC,KAAKgO,IAAakkC,iBAAiBs9D,MAAMp9D,WAA2B,KAAZpyC,KAAKgO,IAAakhC,eAAe,GAAGpD,aAG5H9rC,KAAKK,OAAOmiD,YAAaxiD,KAAKK,OAAOmiD,cAG1C9Z,mBACF,OAAOxvB,MAAMwvB,eAAiB1oC,KAAKi1Q,cAGjCA,oBACF,OAAOpjO,MAAMC,UAAY9xC,KAAKK,OAAOwiD,mBAGvCiiF,YACO3hF,eAAe8oB,eAAgBjsE,KAAK4rC,wBAA2B5rC,KAAKK,OAAOoiD,qBAChF7zC,OAAOma,QAAQw3H,kBAAqB,GAAKvgJ,KAAKgO,GAC9C/K,OAAOiqG,OAAOnkF,QAAS,yCAAwC/oB,KAAKK,OAAOkP,QAC3EvP,KAAKutJ,eAAgB,GAGvBrhH,cAcE,GAbAnqC,SAASe,SAASY,WAAWyC,wBACzBnG,KAAKgO,IAAM,IAAMhO,KAAKgO,IAAM,KAC9BsmE,oBAAoBt0E,KAAKgO,GAAK,IAAIkE,OAASmJ,EAAAA,GAC3B,KAAZrb,KAAKgO,IAAW81C,QAAQw2B,OAAO2Q,SAASzwE,QAE1Cxa,KAAKgO,IAAM,IAAMhO,KAAKgO,IAAM,KAE9B6jF,gBAAgB+c,cAAc7c,eAC9BF,gBAAgB+c,cAAc5c,cAEhB,KAAZhyF,KAAKgO,IACP81C,QAAQw2B,OAAO8Q,WAAW5wE,OAEZ,KAAZxa,KAAKgO,GACP,IAAK,MAAMw8B,KAAO9nC,OAAOC,KAAKiM,OAAOma,QAAQsmB,OAAOkS,KAC9C3yC,OAAOma,QAAQsmB,OAAOkS,IAAI/W,GAAKnzB,IAAI,SAAQzI,OAAOma,QAAQsmB,OAAOkS,IAAI/W,GAAO8Z,IAAiB,IAAIlc,aAGzF,KAAZpoC,KAAKgO,IACP6jF,gBAAgBxhB,YAAY2hB,cAKlC,MAAMu1Q,YAAuC96T,EACvChB,eACF,OAAOmF,SAASoU,kBAGdrY,mBACF,OAAI/9B,OAAOorD,QAAQE,oBAAoBC,eAAepD,GAAoBkB,QAAQZ,WAAWzoD,OAAOorD,QAAQC,WAAW,IAAY,EAC5HrrD,OAAOma,QAAQg5B,oBAAoB/hD,KAAKgO,IAG7C06B,mBACF,OAAOxvB,MAAMwvB,eAAiB1oC,KAAKi1Q,eAAiBl+M,GAAoBkB,QAAQZ,WAAWzoD,OAAOorD,QAAQC,WAAW,IAGnHruB,6BACF,OAAIh9B,OAAOorD,QAAQE,oBAAoBC,gBAAepD,GAAoBkB,QAAQZ,WAAWzoD,OAAOorD,QAAQC,WAAW,IAIrHg7M,oBACF,OAAOpjO,MAAMC,SAGXnF,iBAAa7kC,GACf8G,OAAOma,QAAQg5B,oBAAoB/hD,KAAKgO,IAAMlG,EAGhDokC,cACkB,IAAZlsC,KAAKgO,IACP0wE,UAAUmxE,mBAAmB7pD,cAKnCshQ,IAAsBv/V,MAAQ+iC,YAC5B4hC,aAAa3jD,QAAQo5B,mBACrB9hD,GAAWA,EAAO2N,IAAM,GACpB,IAAIu5V,IAA+BlnW,GACnC,IAAIinW,IAAsBjnW,KAGzB,MAAMikD,IAAmBt2C,GAAMs5V,IAAsBv/V,MAAMiG,GAErDi1C,IAAoB,CAC/BoJ,IAAKi7S,IAAsBv/V,MAAM4F,UAC7Bu1C,sBACF,MAAMuC,EAAa72C,OAAOma,QAAQg5B,oBAClC,IAAI0C,EAAQ,EACZ,IAAK,MAAMjjD,KAAKikD,EAAYhB,GAASgB,EAAWjkD,GAChD,OAAOijD,GAELnB,0BACF,OAAOtjD,KAAKqsD,IAAI1/C,YAAWwlB,GAAKA,EAAE2Z,YAEhCg9B,gBACF,OAAoD,GAA5Cl6D,OAAOma,QAAQu3H,sBAAwB,KAAW,GAAM5zE,aAAa3jD,QAAQo5B,kBAAkB5+C,OAAS,ICxLpH,MAAMikW,YAAkBp7T,EACtBpqC,YAAY3B,GACV6Y,MAAM7Y,GAINL,KAAK20C,eAAiB,GAGpBvD,sBACF,OAAOpxC,KAAKK,OAAO+wC,gBAAkBpxC,KAAKK,OAAO+wC,gBAAkB,EAGjEd,YACF,OAAOtwC,KAAKK,OAAOiwC,MAGjBe,uBACF,OAAOrxC,KAAKK,OAAOgxC,iBAAmBrxC,KAAKK,OAAOgxC,mBAAqB,GAGrE5F,eACF,OAAOmF,SAASquC,WAGdpsE,UACF,OAAOjE,OAAOma,QAAQqnB,MAGpBzE,WACF,OAAO,EAGLC,6BACF,OAAmB,IAAZ5rC,KAAKgO,IAAYhO,KAAK20C,eAAelnC,MAAKksB,GAAKA,EAAEmS,WAGtDpD,mBACF,QAAe,IAAZ1oC,KAAKgO,KAAYkkC,GAAAA,MAAAA,YACRlyC,KAAK8rC,YAAc+F,MAAMC,UAAYD,MAAMuzF,aAAa7xH,SAASvT,KAAKgO,KAGpFy5V,wBACEznW,KAAK20C,eAAiB+3B,aAAa3jD,QAAQwrB,gBAAgBv0C,KAAKgO,IAAI1K,KAAI0K,GAAM46D,IAAMp7D,KAAKQ,KAG3Fk+B,cAGE,QAFiC3pC,IAA7BvC,KAAKK,OAAOswC,cAA4B3wC,KAAKK,OAAOswC,eACrC,QAAf3wC,KAAKswC,OAAmBM,SAASqW,WAAW7vC,GAAG,IAAIslK,WACpC,UAAf18K,KAAKswC,MAAmB,CACtB4V,aAAayZ,WAAWlyD,MAAKhE,IAAMA,EAAE0hC,eAAav8B,OAAOma,QAAQk9B,wBAAyB,GAC9F,IAAK,MAAM2L,KAAe1L,aAAayZ,WACrC/N,EAAYrmB,QAAO,GAGvBmzC,UAAUswE,kBAAkBhpD,aAC5BtnB,UAAUuwE,aAAajpD,aACvBjkG,SAASe,SAASY,WAAW2C,cAI1B,MAAM0yC,IAAO63D,oBAClBlkC,aAAa3jD,QAAQqnB,OACrB/vC,GAAU,IAAImnW,IAAUnnW,KAGbuoE,IAAQ,CACnBvc,IAAKtT,IAAKsT,IAKV7+C,KAAKQ,GACH,OAAO46D,IAAMvc,IAAI7+C,MAAKmsB,GAAKA,EAAE3rB,KAAOA,MAIxC,IAAK,MAAM0mC,KAAQk0B,IAAMvc,IACvB3X,EAAK+yT,wBAGA,SAAS57J,MACVj9L,OAAOma,QAAQqnB,MAAM1iC,OAAMM,QAAyBzL,IAAnBqmE,IAAMp7D,KAAKQ,OAChD05V,IAAIC,cACA/2T,SAASquC,WAAW/tD,IAAI03C,IAAMvc,IAAI9oD,SACpCmkW,IAAIE,cACJrtV,MAAMjC,QAAQkC,KAAK,0EAEnBD,MAAMjC,QAAQkC,KAAK,kGCpFhB,SAASmlT,MACd9hJ,GAAAA,QAAmC,WAAY,GAC/C18K,WAAWm/G,IAAsB,KAI5B,SAASi+D,IAAmB7pK,GACjCmpK,GAAAA,QAAmC,aAAc,GACjD18K,YAAW,KACT0kD,UAAS,GAAO,EAAO,CAAEm4H,mBAAmB,IACxCtpK,GAAUA,MACb,KAGE,SAASw2J,MACd,IAAKr+H,eAAe0+B,oBAAuB15B,MAAMC,WAAaD,MAAM04P,iBAAmB,OACvF,MAAM41B,EAAgBvxT,OAAOysF,QAAQkuD,WAAW1gI,WAAag1J,GAAAA,aACzDjvK,OAAOia,SAASo4B,OACdryC,OAAOysF,QAAQouD,cAAc5gI,SAC/BtO,MAAMokK,aAAankK,OACV2lT,EACT5hJ,MAEA14H,UAAS,GAAO,EAAO,CAAEm4H,mBAAmB,IAErCpvK,OAAOysF,QAAQouD,cAAc5gI,SACtCtO,MAAM2mU,cAAc1mU,OACX2lT,EACTR,MAEAr/M,MAIG,SAASA,IAAqBjrC,GACnC,QAAKxoC,eAAe0+B,uBAChBh9D,QAAQq+B,oBAAsBC,eAAeC,qBAC7Cl+B,OAAOia,SAASo4B,QAClB4E,UAAS,EAAOwvB,EAAM,CAAE2oG,mBAAmB,KACpC,IAEThlI,YAAY,KAAKzN,SACjBsa,UAAS,EAAOwvB,EAAM,CAAE2oG,mBAAmB,IAC3CpvK,OAAOia,SAASo4B,QAAS,EACrBpP,MAAMC,UAAUojB,aAAarsC,SAASkzG,WACnC,KAGT,MAAM8rO,IAAgB,CACpB,KAAM,SAAU,kBAAmB,cAAe,iBAAkB,mBACpE,WAAY,WAAY,iBAAkB,kBAAmB,cAC7D,cAAe,mBAAoB,iBAAkB,uBAAwB,oBAGxE,SAAS5rJ,IAAmBjuM,EAAIg6D,EAAO,GAC5C,GAAIz5D,QAAQq+B,oBAAsBC,eAAeC,kBAAmB,OAAO,EAE3E,MAAMgoC,EAAUjkB,IAAgBg3S,IAAc75V,IAC9C,GAAIA,EAAK,GAAKA,EAAK,GAAI,CACrB,GAAIY,OAAOia,SAASo5B,SAAS5V,IAAIr+B,GAAK,OAAO,EAC7C,IAAK4iC,SAASolB,YAAYhqB,SAAS8oC,EAAQnpC,MAAO,OAAO,EACzD/8B,OAAOia,SAASo5B,SAAS74C,IAAI4E,GAClB,IAAPA,IAAUY,OAAOia,SAAS67B,sBAAwB,OACjD,CACL,MAAMojT,EAAYl5V,OAAOia,SAAS48B,WAAWz3C,GAC7C,IAAI+5V,EAAWl2T,MAAMC,SAAWgjC,EAAQz0E,OAAOi5F,iBAAmBxkB,EAAQz0E,OAAOg5F,YACjF,GAAIzoD,SAASolB,YAAYt+C,GAAGo9D,EAAQnpC,OAASm8T,GAAaC,EAAU,OAAO,EAE3E,IAAInM,EAAS5yV,QAAQgrT,sBAAsBpjR,SAASolB,YAAYluD,MAC9DgtE,EAAQz0E,OAAOwzB,YAAaihD,EAAQz0E,OAAO29E,UAAW8pR,GAAWp4V,WACnEksV,EAAS/6V,KAAK2H,SAASozV,EAAQ5zR,GAC/B4zR,EAAS/6V,KAAK2H,SAASozV,EAAQmM,EAAWD,GAC1C,MAAMn8T,EAAO3iC,QAAQ06V,mBAAmB9H,EAAQ9mR,EAAQz0E,OAAOwzB,YAAaihD,EAAQz0E,OAAO29E,UAAW8pR,GAUtG,GATAl3T,SAASolB,YAAY/pB,SAASN,GAC9B/8B,OAAOia,SAAS48B,WAAWz3C,IAAO4tV,EACvB,IAAP5tV,IACG+qC,KAAKrG,cAAc5G,WAAY+F,MAAMC,UAAUlB,SAASolB,YAAYw7B,QACzE5iF,OAAOia,SAASm2H,cAAgB3jI,EAAAA,GAChCzM,OAAOia,SAASo2H,oBAAsB,EACtCrwI,OAAOia,SAAS67B,qBAAuB,GAG9B,IAAP12C,IAAa6jC,MAAMyP,WAAW,WAAY,CAC5C,IAAI0mT,EAAsBj/T,QAAQ3gC,IAChC,EACA2wC,KAAKxF,eACLwF,KAAKvF,eACLuF,KAAKtF,eACLsF,KAAKrF,gBAEHjC,SAASC,YACXs2T,EAAsBnnW,KAAKgd,IAAImqV,EAAqBv2T,SAASkvB,cAE/D/vB,SAASwvB,iBAAiBhkB,SAASpzC,QAAQ6U,IAAImqV,EAAqBpM,KAMxE,OAAO,EAGF,SAAShiQ,IAAqBquQ,EAAkBC,GAErD,MAAMpzR,OAA+BvyE,IAArB0lW,EAAiCp3S,IAAgB8oC,gBAAgBvxD,YAAc6/T,EAC/F,IAAInrJ,EAAgB,KAAOhoI,EAAU,IACrC,MAAMk9Q,EAActsS,uBAAuB,2BACrCyiT,EAAiC,IAAhBnW,EAAoB,EAAIA,EAC/C,IAAIvpU,EAAQooC,IAAgBupC,qBAAqB1xD,aAC7CmoB,IAAgBupC,qBAAqBhyD,YAAc,EACnDggU,EAAe,IACfC,EAAyBxnW,KAAKuM,YAAe7K,GAAR2lW,EAAoBt5V,OAAOia,SAASo2H,oBAAsBipN,GAAQ,WAE9F3lW,GAAR2lW,EAAoBt5V,OAAOia,SAASo2H,oBAAsBipN,IAASE,IAAiBv2T,MAAMC,WAC7FrpB,IAAW,IAAO,KAAQ7Z,OAAOorD,QAAQvU,WAAW,KAAQ4iT,GAK9D,IAAIvhT,EAAMjmD,KAAKuH,IAAI,IAAM00M,EAAgBqrJ,IAAoB1/U,EAC7D,OAAO5nB,KAAKC,IAAID,KAAKuH,IAAI,EAAG0+C,GAAM,OAG7B,SAASyO,MACd,GAAI1jB,MAAMC,SAAU,CAClB,IAAIlkC,EAAIskC,iBAAiB4U,IAAI1U,UAAY,IAAM,EAC/C,MAAMk2T,EAAgB13T,SAASwvB,iBAAiBt4D,MAAM+V,IAAI0vC,WAAWwG,QAAQtG,WAAW,GAAG9kB,gBAAgB,IAC3G,IAAIo3C,EAAc,IAAI/2E,QAAQs/V,GAC7B1+T,eAAeinB,IAAgB4E,OAAQ5E,IAAgB6E,YAAa7E,IAAgB8E,kBACpF//C,MAAMq+C,aAAaoC,qBAAqBlC,aAAe,IAAKv+C,MAAMhI,GAClEgI,MAAMi8B,MAAM+b,mBAAmB/kC,UAAUtS,IAAI,KAE9C,OADGopC,GAAGC,QAAQyf,wBAAwBl0B,aAAY40C,EAAYA,EAAYnqE,MAAM8vC,uBAAuB,eAAe9vC,MAAM/U,KAAK4H,SAASO,QAAQoL,MAAMmwC,WAAWryC,QAAUwzC,uBAAuB,qBAAsB,KACnNq6B,EAET,IAAIwoR,EAAS,IAAIv/V,QAAQ4nC,SAASwvB,iBAAiBt4D,OAChD8hC,eACCinB,IAAgB4E,OAChBzc,YAAY,KACZA,YAAY,KACZF,eAAe,GACfua,gBAAgBxqC,SAChB82B,GAAGC,QAAQsH,kBAAkB3c,QAAQyrB,YACrCrW,GAAGC,QAAQuW,gBACXtF,IAAgB6E,aAapB,GAXIxjB,iBAAiB4U,IAAI1U,YACvBm2T,EAASA,EAAO3yV,MAAM,MAExB2yV,EAASA,EAAO3yV,MAAM8vC,uBAAuB,eAC7C6iT,EAASA,EAAO3yV,MAAMq+C,aAAaoC,qBAAqBlC,aACxDo0S,EAASA,EAAO3yV,MACd/U,KAAK4H,SAASO,QAAQoL,MAAMmwC,WAAWryC,QAAUwzC,uBAAuB,qBAAsB,IAC7F/F,GAAGC,QAAQ6W,gBAAgBtrB,aAAYo9T,EAASA,EAAO1qV,IAAI,EAAIhd,KAAKuH,IAAI,EAAIwoC,SAAS2R,YAAYz6C,MAAMsM,QAAU,QAChHq9B,SAASC,YAAc62T,EAAOn3V,GAAG,KAAIm3V,EAASv/V,QAAQiP,MAAMpX,KAAKgd,IAAI0qV,EAAOtxV,KAAK,GAAG7C,QAAS,KAAQ,IACrG+a,EAAEuiB,YAAW62T,EAASA,EAAO1qV,IAAI,KACjCsR,EAAEkmC,iBAAgBkzS,EAASA,EAAO1qV,IAAI,OACtCjP,OAAOorD,QAAQE,oBAAoBC,cAAe,CACpD,IAAIquS,EAASzxS,GAAoBgB,IAAItvC,MAAM7Z,OAAOorD,QAAQC,WAAW,IACjEwuS,EAAQ1xS,GAAoBgB,IAAItH,KAAK7hD,OAAOorD,QAAQC,WAAW,IAChEyI,GAAkB,IAAI52B,UAAUl9B,OAAOorD,QAAQC,WAAW,IAAI,IAC/DuuS,GAAU,GACVC,EAAQA,EAAQ7yV,MAAM,MAExB2yV,EAASv/V,QAAQ6U,IAAI0qV,EAAOC,GAC5BD,EAASA,EAAO3yV,MAAM6yV,GAExB,OAAOF,EAGF,SAASjoS,MACd,GAAIzuB,MAAMyP,WAAW,WAAY,OAAO,IAAIt4C,QAAQ,GACpD,MAAM6U,EAAM4zB,SAASC,UAAYD,SAASkvB,YAAc,EACxD,OAAOtlD,EAAAA,GAAAA,eACLw1C,IAAgB0P,YAChB3C,eAAe/0C,SACfmwB,YAAY,KACZF,eAAe,GACfA,eAAe,GACfA,eAAe,KACfj7B,IAAIA,GAGD,SAASqgK,MACdttI,SAASwvB,iBAAiBtvB,OAAO+vT,IAAMjyV,OAAO+zC,QAAQsW,aAAagG,OAAO,IAEtErwD,OAAOorD,QAAQE,oBAAoBC,gBACrCvpB,SAASwvB,iBAAiBt4D,MAAQkB,QAAQ6U,IAAI+yB,SAASwvB,iBAAiBt4D,MAAMivD,GAAoBgB,IAAItvC,MAAM7Z,OAAOorD,QAAQC,WAAW,MAExIrrD,OAAOia,SAASq2H,OAAStuG,SAASO,eAAerpC,MAO5C,SAAS4gW,IAAU73T,EAAY83T,GACpC,IAAK9vS,OAAOC,aAAe6vS,EAAiB,OAAOttV,EAAAA,GACnD,MAAMg4D,EAAM+pB,wBAA0BvrD,MAAMC,SACxCjB,EACA8O,GAAGC,QAAQkhC,yBAAyBn4C,gBAAgBkI,GACxD,IAAIwvB,EAASr3D,QAAQ6U,IAAI7U,QAAQoL,MAAMi/D,GAAM,IAAK,KAElD,OADI5hC,SAASC,YAAW2uB,EAASA,EAAOxiD,IAAI4zB,SAASkvB,cAC9CN,EAIF,SAASwgS,IAAMhwT,EAAY83T,GAChC,IAAI/6V,EAAI86V,IAAU73T,EAAY83T,GAAiB/yV,MAAM0qD,OAIrD,OAAO1yD,EAKF,SAASwoG,IAAeuyP,GAC7B,OAAO9H,IAAMjwT,SAASC,WAAW/oC,MAAO6gW,GAAiBzxV,MAAM05B,SAASwvB,iBAAiBt4D,OAAOW,SAAS,GAIpG,SAASo2N,MACd,IAAI+pI,EAAch4T,SAASwvB,iBAAiBt4D,MAAMqP,UAAUmpD,OAE5D,OADI7uB,SAASC,YAAWk3T,EAAcA,EAAY/qV,IAAI,EAAI4zB,SAASkvB,cAC5D33D,QAAQiP,MACb2wV,EACGhzV,MAAM/U,KAAKgd,IAAI,IAAK,MACpBA,IAAI,EAAI,GACRnO,YAIA,SAASm7R,IAAwBr3N,GACtC,MAAMk3N,EAAgBn1O,MAChBq2O,EAAYlB,EAAc90R,MAAM4/C,4BAChCi1O,EAAY75P,SAASolB,YAAYluD,MACvC,GAAI4iS,EAAct5R,GAAG,GAAI,OAAO,KAChC,GAAIm8C,WAAWwG,QAAQnJ,SAAU,CAC/B,MAAMi+S,EAAQh3T,MAAMykP,iBACdwyE,EAAcl9D,EAAU10R,MAAMlO,QAAQozC,SAASo3B,EAAMq1R,IACrDE,EAAcn9D,EAAU10R,MAAMuzR,EAAU70R,MAAMizV,IACpD,OAAIC,EAAYpxV,GAAG,GAAW,qCACvBnG,SAASs6F,YAAYk9P,EAAYxyV,IAAIuyV,GAAa3pR,KAAO0pR,GAAO/wV,iBAEzE,OAAOvG,SAASs6F,YAAY7iG,QAAQwN,IAAIg9D,EAAMi3N,GAC3Cl0R,IAAIq1R,GAAWl8R,YAAYoI,iBAGhC,SAASkxV,IAAiBv9T,EAAUz9B,GAClC,OAAOhF,QAAQgrT,sBAAsBvoR,EAAUolB,IAAgBxE,IAAIr+C,EAAK,GAAG3N,OAAOwzB,YAAag9B,IAAgBxE,IAAIr+C,EAAK,GAAG3N,OAAO29E,UAAWpvE,OAAOia,SAAS48B,WAAWz3C,EAAK,IAAI0B,WAG5K,SAASu5V,MACd,MAAMC,EAAYnwT,KAAKrG,cAAc5G,UAAY+F,MAAMC,SACvD,IAAK,IAAItwC,EAAI,EAAGqwC,MAAMC,SAAWtwC,GAAK,EAAIA,GAAK,EAAGA,IAAK,CACrD,IAAK0nW,GAAkB,GAAL1nW,EAAQ,OAC1BoN,OAAOia,SAAS48B,WAAWjkD,EAAI,IAAMwnW,IAAiBp4T,SAASolB,YAAYluD,MAAMyO,IAAI,KAAM/U,GAE7F,IAAI2vD,GAAS,EACb,IAAK,IAAI3vD,EAAI,EAAGA,EAAI,KAAO2vD,EAAQ3vD,IAAK,CACtC2vD,GAAS,EACT,IAAK,IAAI3vD,EAAI,EAAGqwC,MAAMC,SAAWtwC,GAAK,EAAIA,GAAK,EAAGA,IAAK,CACrD,IAAK0nW,GAAkB,GAAL1nW,EAAQ,OAC1B2vD,EAAS8qJ,IAAmBz6M,EAAI,IAAM2vD,GAIrC+3S,GAAWjtJ,IAAmB,GAG9B,SAASxG,IAAe3tM,GAC7B,MAAMsM,EAAQtM,EAAMsM,QACd08C,EAAkB,IAAO/nB,QAAQG,QAAQ2nB,IAAgBC,iBAC/D,OAAO9nD,QAAQiP,MAAMpX,KAAKqP,KAAKkE,GAASvT,KAAKgd,IAAIhd,KAAK+K,IAAIwI,GAAQ08C,IAGpE,MAAMq4S,YAA6B/8T,EAC7BX,eACF,OAAOmF,SAASolB,YAGdnjD,UACF,OAAOjE,OAAOia,SAASo5B,SAGzB/V,cACE,OAAOlsC,KAAKgO,IACV,KAAK,EACHY,OAAOia,SAAS67B,sBAAwB,EACxC,MAEF,KAAK,GACHqqI,GAAmB,IAAID,cACvB,MAEF,WAON,MAAMs6K,YAAsC38T,EACtChB,eACF,OAAOmF,SAASolB,YAGdrpB,mBACF,OAAO/9B,OAAOia,SAAS48B,WAAWzlD,KAAKgO,IAGrC2+B,iBAAa7kC,GACf8G,OAAOia,SAAS48B,WAAWzlD,KAAKgO,IAAMlG,EAGpC4kC,eACF,OAAO1sC,KAAKK,OAAOk5F,aAGrBvtD,SAASg8B,GACPi0I,IAAmBj8M,KAAKK,OAAO2N,GAAIg6D,IAIhC,MAAMnX,IAAkB+/C,oBAC7BlkC,aAAa7mB,SAASh9B,UACtBxoB,GAAWA,EAAOyhD,UACd,IAAIsnT,IAA8B/oW,GAClC,IAAI8oW,IAAqB9oW,KAGlB8uV,IAAmB,CAC9BrtS,UAAW,CACT+O,IAAgB4E,OAChB5E,IAAgB8oC,gBAChB9oC,IAAgB0P,aAElB+uR,OAAQthV,GAAM6iD,IAAgBxE,IAAI7+C,MAAKI,GAAKA,EAAEI,KAAOzE,OAAOyE,MCpV9D,MAAMq7V,IACJrnW,YAAY3B,GACV,MAAM,UAAEipW,EAAF,UAAaC,EAAb,eAAwBC,EAAxB,YAAwC31U,EAAxC,SAAqDC,GAAazzB,EACxEL,KAAKypW,gBAAkB,IAAMF,EAAUD,IAAc,GACrDtpW,KAAKsgT,WAAa,IAAIjyJ,MAAK,IAAMm7M,EAAeF,OAChDtpW,KAAKugT,UAAY,IAAIlyJ,MAAK,IAAMz2H,qBAAqB0xU,IACnD,KACAz1U,EACAC,EACA,GACAzY,EAAAA,KACA,IACA,MACFrb,KAAKgO,GAAK3N,EAAO2N,GACjBhO,KAAKszK,aAAejzK,EAAOizK,aAC3BtzK,KAAK6sG,WAAaxsG,EAAOwsG,WAGvB/kG,YACF,OAAO9H,KAAKsgT,WAAWx4S,MAGrB6jC,WACF,OAAO3rC,KAAKugT,UAAUz4S,MAGpB4jC,mBACF,OAAOkF,SAASmX,gBAAgB72B,IAAIlxB,KAAK2rC,MAG3CK,WACE,IAAKhsC,KAAK0rC,cAA+B,IAAf1rC,KAAK8H,MAAa,OAI5C,MAAMynD,EAAK7V,IAAU15C,KAAKgO,IACpB07V,EAAan6S,EAAGktJ,UAAY,EAAIltJ,EAAGo6S,cAAgBp6S,EAAGo6S,cAE5D/4T,SAASmX,gBAAgB/b,SAAShsC,KAAK2rC,MACvC3rC,KAAKypW,kBACLzpW,KAAKsgT,WAAWt6M,aAChBhmG,KAAKugT,UAAUv6M,aACXhmG,KAAK6sG,YACP7sG,KAAK6sG,aAMP,MAAM+8P,EAAYr6S,EAAGktJ,UAAYltJ,EAAGoZ,SAAWpZ,EAAGmZ,SAClDnZ,EAAGs6S,YAAYD,EAAYF,EAAan6S,EAAGkyF,OAIvClyF,EAAG6Z,cAAax6D,OAAOixF,UAAU7/F,KAAKgO,GAAK,GAAGizC,QAAS,GAE3Dl/C,SAASe,SAASY,WAAW6C,4BAIjC,MAAMujW,IACJ9nW,YAAYgM,GACVhO,KAAKgO,GAAKA,EAAK,EACf,MAAM+7V,EAA2B,CAAC,EAAG,KAErC/pW,KAAKq/O,gBAAkB,IAAIgqH,IAAsB,CAC/Cr7V,GAAIhO,KAAKgO,GACTs7V,UAAW,IAAMtpW,KAAKi5H,MAAMqoB,iBAC5BioN,UAAWr3V,GAAUlS,KAAKi5H,MAAMqoB,iBAAmBpvI,EACnDs3V,eAAgBt3V,GAAW,KAAQrR,KAAKgd,IAAI,GAAI7P,GAAQnN,KAAKgd,IAAI,GAAK3L,GACtE2hB,YAAa,GAAKk2U,EAAyB/7V,GAC3C8lB,SAAU,IACVw/I,cAAc,EACdzmE,WAAY,KACL7sG,KAAKy8M,YACRz8M,KAAKi5H,MAAMwoB,MAAQ5gJ,KAAK2H,SAASxI,KAAK0oE,SAAU1oE,KAAKi5H,MAAMwoB,WAKjEzhJ,KAAKu0K,aAAe,IAAI80L,IAAsB,CAC5Cr7V,GAAIhO,KAAKgO,GACTs7V,UAAW,IAAMtpW,KAAKi5H,MAAMsoB,cAC5BgoN,UAAWr3V,GAAUlS,KAAKi5H,MAAMsoB,cAAgBrvI,EAChDs3V,eAAgBt3V,IACd,IAAI0tD,EAAa,KAEjB,OADG8C,GAAkB,IAAI52B,WAAU8zB,GAAY8C,GAAkB,IAAIt6B,aAC7D,IAAMvnC,KAAKgd,IAAI,EAAG7P,GAAOnN,KAAKgd,IAAI+hD,EAAY1tD,IAExD2hB,YAAa,GAAKk2U,EAAyB/7V,GAC3C8lB,SAAU,EACVw/I,cAAc,IAGhBtzK,KAAKu/O,gBAAkB,IAAI8pH,IAAsB,CAC/Cr7V,GAAIhO,KAAKgO,GACTs7V,UAAW,IAAMtpW,KAAKi5H,MAAMuoB,iBAC5B+nN,UAAWr3V,GAAUlS,KAAKi5H,MAAMuoB,iBAAmBtvI,EACnDs3V,eAAgBt3V,IAAW,GAAY,EAANlE,GAAWnN,KAAKgd,IAAI,IAAK3L,GAC1D2hB,YAAa,GAAKk2U,EAAyB/7V,GAC3C8lB,SAAU,EACVw/I,cAAc,IAOdr6C,YACF,OAAOrqH,OAAOixF,UAAU7/F,KAAKgO,GAAK,GAMhCsxO,kBACF,OAAOt/O,KAAKq/O,gBAAgBv3O,MAAQkxC,YAAY,KAAKrQ,gBAAgB,GAMnE+/B,eACF,OAAO1oE,KAAKopE,YAAc,EAAIppE,KAAKs/O,YAMjC72N,YACF,OAAOzoB,KAAKu0K,aAAazsK,MAAQkxC,YAAY,KAAKrQ,gBAAgB,GAMhEggC,eACF,OAAO3oE,KAAKu/O,gBAAgBz3O,MAAQkxC,YAAY,KAAKrQ,gBAAgB,GAGnEwC,iBACF,OAAQnrC,KAAKi5H,MAAM/kD,WAAaziC,SAASC,YAAcG,MAAMyP,WAAW,cAAkBpP,iBAAiBs9D,MAAMp9D,YAAcX,SAASC,YAAcG,MAAMyP,WAAW,aAGrKm7J,gBACF,OAAOz8M,KAAKi5H,MAAMh4E,OAGhBu9L,8CACF,OAAOx+O,KAAKy8M,UAAYz8M,KAAK2oE,SAAW3oE,KAAKyhJ,MAAQzhJ,KAAK0oE,SAAW1oE,KAAKyhJ,MAIxEuoN,4BACF,MAAM/7I,EAAgBjuN,KAAKw+O,wCAE3B,OAAgB,IAAZx+O,KAAKgO,GAAiBigN,EAGtBjuN,KAAKy8M,UACH/iK,IAAU,GAAG+iK,UAAkB57M,KAAKC,IAAImtN,EAAev0K,IAAU,GAAGswT,uBACjEtwT,IAAU,GAAGswT,sBAEftwT,IAAU,GAAGuwT,oBAAoBh8I,GAI1Cg8I,oBAAoBC,GAElB,IAAIC,EAAaD,EACjB,GAAIlqW,KAAKy8M,UAAW,CAIlB,GAAI0tJ,EAAanqW,KAAKgqW,sBAAuB,OAAOG,EAEpDA,GAAcnqW,KAAKgqW,sBAGrB,IAAIvnF,EAAYziR,KAAKy8M,UACjBz8M,KAAKgqW,sBAAwBhqW,KAAK0oE,SAClC1oE,KAAKgqW,sBAKT,OAHAvnF,GAAa5hR,KAAKuM,MAAM+8V,EAAanqW,KAAK2oE,UAAY3oE,KAAKozO,YAE3DqvC,GAAa0nF,EAAanqW,KAAK2oE,SACxB85M,EAILknF,oBACF,OAAI3pW,KAAKy8M,UACA,EAAIz8M,KAAKyhJ,MAAQzhJ,KAAK2oE,SAExB3oE,KAAKyhJ,MAAQzhJ,KAAK0oE,SAIvBq/G,mBACF,GAAIl2I,MAAMyP,WAAW,aAAc,MAAQ,sCAC3C,GAAI7P,SAASspB,gBACX,OAAItpB,SAASiqI,gBAAkB,EAAW,kEAClC,gEAEV,GAAIjqI,SAASqqB,kBAAmB,MAAQ,sDACxC,GAAIxM,IAAW2M,YAAa,MAAQ,6CACpC,GAAI3M,IAAW6L,UAAW,MAAQ,sCAClC,GAAIn7D,KAAKopE,YAAa,MAAQ,4CAE9B,MAAMi2C,EAAa9tG,SAASs6F,YAAY7rG,KAAKgqW,uBAAuBn4V,eAAc,GAClF,OAAI7R,KAAK4qD,SAAkB,uCAAsCy0D,KACzD,yCAAwCA,KAG9Cz0D,eACF,OAAO5qD,KAAKy8M,YAA0B,IAAZz8M,KAAKgO,IAAY0rC,IAAU15C,KAAKgO,GAAK,GAAG48C,YAAc/Y,MAAMyP,WAAW,aAI/FqO,gBACF,OAAO3vD,KAAK2oE,UAAY3oE,KAAKs/O,YAAct/O,KAAK2oE,UAG9CS,kBACF,OAAOppE,KAAK2vD,WAAa,OAAUzd,iBAAiBs9D,MAAMp9D,UAQxDqvG,YACF,OAAOzhJ,KAAKi5H,MAAMwoB,MAGhB2xF,kBACF,OAAOpzO,KAAK0oE,SAAW1oE,KAAK2oE,SAG9BkhS,YAAYO,GACNpqW,KAAKopE,cAMTppE,KAAKi5H,MAAMwoB,OAAS2oN,EAEhBpqW,KAAKyhJ,OAASzhJ,KAAKozO,cAErBpzO,KAAKi5H,MAAMyoB,aAAe7gJ,KAAKuM,MAAMpN,KAAKyhJ,MAAQzhJ,KAAKozO,aACvDpzO,KAAKi5H,MAAMwoB,OAASzhJ,KAAKozO,aAEvBpzO,KAAKy8M,UACHz8M,KAAKyhJ,OAASzhJ,KAAK2oE,WACrB3oE,KAAKi5H,MAAMwoB,OAASzhJ,KAAK2oE,SACzB3oE,KAAKi5H,MAAMh4E,QAAS,EAChBh+C,OAAOiqG,OAAOo1E,gBAChBr/K,OAAOiqG,OAAOrN,UAAW,GAAE7/F,KAAKwwC,aAAY,uBAGvCxwC,KAAKyhJ,OAASzhJ,KAAK0oE,WAC5B1oE,KAAKi5H,MAAMwoB,OAASzhJ,KAAK0oE,SACzB1oE,KAAKi5H,MAAMyoB,cACX1hJ,KAAKi5H,MAAMh4E,QAAS,EAChBh+C,OAAOiqG,OAAOo1E,gBAChBr/K,OAAOiqG,OAAOrN,UAAW,GAAE7/F,KAAKwwC,aAAY,uBAYlD65T,oBAAoBzhV,GAClB,MAAM0hV,EAAmBtqW,KAAKuqW,0BACxBC,EAAWxqW,KAAK0oE,SAChBC,EAAW3oE,KAAK2oE,SAChB8hS,EAAYzqW,KAAKozO,YACjBs3H,EAA4B7pW,KAAKC,IAAIwpW,EAAkB3hS,GACvDgiS,EAAoC9pW,KAAKuM,OAAOwb,EAAO0hV,GAAoBG,GAC3EG,EAAkCjiS,EAAWgiS,EAC7CE,GAAiCjiV,EAAO0hV,EAAmBG,GAAaA,EACxEK,EAAyBjqW,KAAKuH,IAAIyiW,EAAgCL,EAAU,GAClF,OAAOE,EAA4BE,EAAkCE,EAcnEP,gCACF,OAAIvqW,KAAKy8M,UACAz8M,KAAK2oE,SAAW3oE,KAAKyhJ,MAEvBzhJ,KAAKozO,YAAcpzO,KAAKyhJ,MAGjCjxG,YAAYwkS,GACV,OAAIl8R,eAAe,IAAIhN,SACb,cAAa9rC,KAAKgO,KAErBgnU,EAAc,iBAAmB,kBAUrC,SAASt7R,IAAU1rC,GACxB,OAAO87V,IAAe38T,KAAKn/B,EAAK,GAPlC87V,IAAe38T,KAAOxlC,MAAMU,MAAM,EAAG,GAAG/E,KAAI0K,GAAM,IAAI87V,IAAe97V,KAU9D,MAAMshD,IAAa,CAExBgyC,kBAAmB,EAIfn0D,WACF,OAAO28T,IAAe38T,MAGpB9B,oBACF,OAAOuF,SAASmX,gBAAgB72B,IAAI,OAASlxB,KAAKisD,aAGhDA,kBACF,OAAOvS,IAAU,GAAGvO,YAGtBI,SACOvrC,KAAKqrC,gBACVz8B,OAAOixF,UAAU,GAAG3rB,UAAW,EAC/BtjC,SAASmX,gBAAgB/b,SAAS,KAClCp9B,OAAO+zC,QAAQm5F,qBAAuBjvG,eAAeC,kBAAoBl+B,OAAO+zC,QAAQswC,SAASrqE,KAAOha,OAAO+zC,QAAQ6kB,gBACvHzlE,SAASe,SAASY,WAAW4C,uBAG/Bu3G,YAAa,CAACktP,GAAY,KACxB,IAAKz7S,IAAWrD,YAAa,OAC7B,MAAMqyL,EAAe1vO,OAAO+0C,kBAAkB56B,QAAQq8B,WAAa,OACnE,GAAId,iBAAiB,IAAIkpG,oBAAsB7tG,GAAGjO,WAAa4sM,EAE7D,YADKysH,GAAWzmT,iBAAiB,IAAIqoH,oBAAoB,6BAGvD/9J,OAAO+yI,iBAAgB/yI,OAAO+0C,kBAAkB56B,QAAQq8B,UAAY,GACxEx2C,OAAO+yI,gBAAkB/yI,OAAO+yI,eAChC/yI,OAAOizI,mBAAqBjzI,OAAO+zC,QAAQkoD,eAC3C,MAAMmgQ,EAAkBlyT,eAAe,IAAIhN,SAAW,cAAgB,aAKhEm/T,EAAYr8V,OAAO+yI,eAAkBryF,IAAW2M,YAAc,WAAa,SAAY,WACvFivS,EAAkBH,EAAY,iBAAmB,GACvD9nW,OAAOiqG,OAAOrN,UAAW,GAAEmrQ,KAAmBE,IAAkBD,MAG9DliL,gCACF,OAAI/oL,KAAK4oL,aAAqB,EACvB/nL,KAAK0H,OAAOqG,OAAO+zC,QAAQkoD,eAAiBj8F,OAAOizI,qBACvD,IAAO7hJ,KAAKshG,mBAAoB,EAAG,IAGpCnmC,gBACF,OAAOvsD,OAAO+yI,gBAGZ1lF,kBACF,OAAOj8D,KAAKm7D,YAAcrX,QAAQpS,WAAa9iC,OAAOotD,kBAAoB,GAGxE4sH,mBACF,OAAOt5H,IAAWniB,KAAKz/B,OAAM6hD,GAAMA,EAAG6Z,eAGxC6xI,aAAapC,GACX,IAAK74M,KAAKisD,aAAejsD,KAAKm7D,UAAW,OAIzC,MAAMgwS,EAAatyJ,EAAgB,KAC5BuyJ,EAAWv0V,GAAW7W,KAAKqrW,cAAcF,GAC1CG,EAAgBtrW,KAAKurW,mCAAmC10V,GAAS,GACvE,IAAK,MAAMgpF,KAAa7/F,KAAKmtC,KAAM,CACjC,IAAK0yD,EAAU10D,WAAY,MAC3B00D,EAAUgqQ,YAAYyB,EAAczrQ,EAAU7xF,GAAK,IAEjDo9V,GACF97S,IAAWuuD,aAAY,IA4B3BsgG,qBAAqBqtJ,EAAeC,EAAeC,GAEjD,MAAMC,EAAW3rW,KAAK69M,oBAChBF,EAAgB39M,KAAK49M,8BAA8B4tJ,EAAeG,GAIxE,GAAsB,IAAlBF,EACF,MAAO,CAACD,EAAe7tJ,EAAcpnM,IAAIi1V,IAS3C,MAAMttJ,EAAel+M,KAAK4rW,oBACxB,EACAJ,GACA59V,GAAK5N,KAAK49M,8BAA8BhwM,EAAG+9V,GAAW/1V,MAAM61V,GAAel1V,IAAIonM,IAC/E,EACA+tJ,GAEI1yJ,EAAmBh5M,KAAK49M,8BAA8BM,EAAcytJ,GAAUp1V,IAAI2nM,GACxF,MAAO,CAACA,EAAclF,IASxB6yJ,aAAargW,EAAOwrE,EAAK80R,EAAoBzpW,EAAQqpW,GACnD,IAAIn6U,EACJ,IAAK,IAAIgR,EAAO,EAAGA,EAAO,MAAOA,EAAM,CACrChR,GAAU/lB,EAAQwrE,GAAO,EACzB,MAAM+6C,EAAQ+5O,EAAmBv6U,GAAUlvB,EAC3C,GAAIxB,KAAK+K,IAAImmH,GAAS25O,EAAW,MAC7B35O,EAAQ,EAEVvmH,EAAQ+lB,EAGRylD,EAAMzlD,EAGV,OAAOA,GAGTq6U,oBAAoBpgW,EAAOwrE,EAAK80R,EAAoBzpW,EAAQqpW,GAC1D,IAAIn6U,EACJ,IAAK,IAAIgR,EAAO,EAAGA,EAAO,MAAOA,EAAM,CACrChR,GAAU/lB,EAAQwrE,GAAO,EACzB,MAAM+6C,EAAQ+5O,EAAmBv6U,GAAQ/a,IAAInU,GAC7C,GAAI2G,QAAQ4C,IAAImmH,GAAOr6G,GAAGg0V,GAAY,MAClC35O,EAAMr6G,GAAG,GAEXlM,EAAQ+lB,EAGRylD,EAAMzlD,EAGV,OAAOA,GASTssL,oBACE,MAAMvG,EAAoB,CAACP,kBAAkBC,YAAaD,kBAAkBE,WAC1EF,kBAAkBI,sBAAuBJ,kBAAkBK,OACvD20J,EAA0BlxS,qBAAqBy8I,GAC/Cq0J,EAAW,CAAC,GAClBr0J,EAAkB90M,KAAKu0M,kBAAkBttJ,YAEzC,IAAK,MAAMo2C,KAAa7/F,KAAKmtC,KAAM,CACjC,IAAK0yD,EAAU10D,WAAY,MAC3BwgU,EAASnpW,KAAKq4D,qBAAqBy8I,EAAmBz3G,EAAU7xF,IAAIuI,IAAIw1V,IAE1E,OAAOJ,GAGT/tJ,8BAA8B9nH,EAAU61Q,GAItC,MAAOxgP,EAAG6gP,GAAchsW,KAAKqrW,cAAcv1Q,GACrCm2Q,EAAmBjsW,KAAKksW,sCAAsCF,EAAYL,GAGhF,OADAM,EAAiB,IAAMn2Q,EAAWk2Q,EAC3BC,EACJ3oW,KAAI,CAACytO,EAAQvvO,IAAMwH,QAAQlI,IAAI,IAAIkI,QAAQ+nO,GAAQn7N,MAAM+1V,EAASnqW,IAAK,SACvEkL,QAmBLw/V,sCAAsCp2Q,GACpC,MAAMw1Q,EAAgBtrW,KAAKurW,mCAAmCz1Q,GACxDm2Q,EAAmB,GACzB,IAAK,IAAIzqW,EAAI,EAAGA,EAAI8pW,EAAc/nW,OAAS,EAAG/B,IAC5CyqW,EAAiBzpW,KAAK8oW,EAAc9pW,GAAK8pW,EAAc9pW,EAAI,IAG7D,OADAyqW,EAAiBzpW,KAAK8oW,EAAcp/V,QAC7B+/V,GAOTV,mCAAmCz1Q,GACjC,MAAMw1Q,EAAgB,CAACx1Q,GACvB,IAAK,MAAM+J,KAAa7/F,KAAKmtC,KAAM,CACjC,IAAK0yD,EAAU10D,WAAY,MAC3B,MAAMghU,EAAatsQ,EAAUwqQ,oBAAoBiB,EAAcp/V,QAC/Do/V,EAAc9oW,KAAK2pW,GAErB,OAAOb,GAQTc,gBAAgBC,EAAO90O,EAAQ,KAC7B,GAAc,IAAV80O,EAAa,CAEf,MAAM98S,EAAK7V,IAAU,GAErB,GAAI6V,EAAGmZ,UAAYpZ,IAAWgyC,kBAC5B,OAAO,KAGT,MAAMjoE,GAAKk2B,EAAGktJ,UAAYltJ,EAAGoZ,SAAW,GAAKpZ,EAAGmZ,SAAWnZ,EAAGkyF,MAI9D,OAAQpoH,EAAIi2B,IAAWgyC,kBACnBjoE,EAAIk2B,EAAGoZ,SAAWpZ,EAAGmZ,SAAWpZ,IAAWgyC,kBAAoBjoE,EAAIi2B,IAAWgyC,kBAUpF,MAAM/3B,EAAU,CAAC7vB,IAAU,GAAG+iK,UAAW/iK,IAAU,GAAG+iK,WAChD6vJ,EAAS,CAAC5yT,IAAU,GAAG+nG,MAAO/nG,IAAU,GAAG+nG,OAC3C8qN,EAAY,CAAC7yT,IAAU,GAAGivB,SAAUjvB,IAAU,GAAGivB,UACjD6jS,EAAY,CAAC9yT,IAAU,GAAGgvB,SAAUhvB,IAAU,GAAGgvB,UAQvD,GAAI8jS,EAAU,IAAMl9S,IAAWgyC,mBAAqBkrQ,EAAU,IAAMl9S,IAAWgyC,kBAC7E,OAAO,KAGT,MAAMmrQ,EAAiB,CAAC,CAACD,EAAU,IAAK,CAACD,EAAU,GAAIC,EAAU,IAAK,CAACD,EAAU,GAAIA,EAAU,KAE/F,IAAIG,EAAe,EACfjqF,EAAY,EAChB,IAAK,IAAIjhR,EAAI,EAAGA,EAAI+1H,EAAO/1H,IAAK,CAI9B,MAAMmH,EAAU4gE,EAAQ,GAAMA,EAAQ,GAAK,EAAI,EAAK,EAE9CojS,EAAcF,EAAe9jW,GAE7BikW,EAAUjkW,EAAU,EAAI9H,KAAKC,IAAI6rW,EAAY,GAAKL,EAAO,GAAIK,EAAY,GAAKL,EAAO,IACvFK,EAAY,GAAKL,EAAO,GAC5B,GAAgB,IAAZ3jW,EAAe,CAEjB,GAAI+jW,GAAgBp9S,IAAWgyC,kBAC7B,OAAOmhL,EAAYnzN,IAAWgyC,kBAGhCorQ,EAAe,OAGfA,GAAgBE,EAGlBnqF,GAAamqF,EAETjkW,EAAU,IACZ2jW,EAAO,IAAMM,EACTN,EAAO,IAAMK,EAAY,KAC3BpjS,EAAQ,IAAMA,EAAQ,GACtB+iS,EAAO,IAAMK,EAAY,KAI7BL,EAAO,IAAMM,EACTN,EAAO,IAAMK,EAAY,KAC3BpjS,EAAQ,IAAMA,EAAQ,GACtB+iS,EAAO,IAAMK,EAAY,IAI7B,OAAO,MAQTtB,cAAcv1Q,GAIZ,GAAI91F,KAAKm7D,UAAW,MAAO,EAAC,EAAO,GACnC,GAAIvsD,OAAOgzI,yBAA2Bp4H,sBAAsBC,SAC1D,MAAO,EAAC,EAAOqsE,GAEjB,MAAM+2Q,EAAW7sW,KAAKosW,gBAAgBx9V,OAAOgzI,wBAK7C,OAAiB,OAAbirN,GAAqBA,EAAW,MAAQA,EAAW/2Q,EAC9C,EAAC,EAAOA,GAEV,EAAC,EAAM+2Q,KC9qBlB,MAAMC,IACJ9qW,YAAY3B,GACV,MAAM,UAAEipW,EAAF,UAAaC,EAAb,eAAwBC,EAAxB,YAAwC31U,EAAxC,SAAqDC,GAAazzB,EACxEL,KAAKypW,gBAAkB,IAAMF,EAAUD,IAAc,GACrDtpW,KAAKsgT,WAAa,IAAIjyJ,MAAK,IAAMm7M,EAAeF,OAChDtpW,KAAKugT,UAAY,IAAIlyJ,MAAK,IAAMz2H,qBAAqB0xU,IACnD,KACAz1U,EACAC,EACA,GACA,IACA,MACF9zB,KAAKgO,GAAK3N,EAAO2N,GACjBhO,KAAKszK,aAAejzK,EAAOizK,aAC3BtzK,KAAK6sG,WAAaxsG,EAAOwsG,WAGvB/kG,YACF,OAAO9H,KAAKsgT,WAAWx4S,MAGrB6jC,WACF,OAAO3rC,KAAKugT,UAAUz4S,MAAM4H,WAG1Bg8B,mBACF,OAAQkF,SAASoU,kBAAkBl9C,MAAMkF,YAAakkB,IAAIlxB,KAAK2rC,MAGjEK,WACE,IAAKhsC,KAAK0rC,cAA+B,IAAf1rC,KAAK8H,MAAa,OAI5C,MAAMynD,EAAK8M,IAAcr8D,KAAKgO,IACxB07V,EAAan6S,EAAGktJ,UAAY,EAAIltJ,EAAGo6S,cAAgBp6S,EAAGo6S,cAE5D/6V,OAAOma,QAAQi8B,mBAAqBhlD,KAAK2rC,KACzC3rC,KAAKypW,kBACLzpW,KAAKsgT,WAAWt6M,aAChBhmG,KAAKugT,UAAUv6M,aACXhmG,KAAK6sG,YACP7sG,KAAK6sG,aAMP,MAAM+8P,EAAYr6S,EAAGktJ,UAAYltJ,EAAGoZ,SAAWpZ,EAAGmZ,SAClDnZ,EAAGs6S,YAAYD,EAAYF,EAAan6S,EAAGkyF,OAIvClyF,EAAG6Z,cAAax6D,OAAOkzI,cAAc9hJ,KAAKgO,GAAK,GAAGizC,QAAS,GAE/Dl/C,SAASe,SAASY,WAAW8C,iCAIjC,MAAMumW,IACJ/qW,YAAYgM,GACVhO,KAAKgO,GAAKA,EAAK,EACf,MAAMg/V,EAA+B,CAAC,EAAG,KAEzChtW,KAAKq/O,gBAAkB,IAAIytH,IAA0B,CACnD9+V,GAAIhO,KAAKgO,GACTs7V,UAAW,IAAMtpW,KAAKi5H,MAAMqoB,iBAC5BioN,UAAWr3V,GAAUlS,KAAKi5H,MAAMqoB,iBAAmBpvI,EACnDs3V,eAAgBt3V,GAAW,KAAQrR,KAAKgd,IAAI,GAAI7P,GAAQnN,KAAKgd,IAAI,GAAK3L,GACtE2hB,YAAa,KAAOm5U,EAA6Bh/V,GACjD8lB,SAAU,IACVw/I,cAAc,EACdzmE,WAAY,KACL7sG,KAAKy8M,YACRz8M,KAAKi5H,MAAMwoB,MAAQ5gJ,KAAK2H,SAASxI,KAAK0oE,SAAU1oE,KAAKi5H,MAAMwoB,WAKjEzhJ,KAAKu0K,aAAe,IAAIu4L,IAA0B,CAChD9+V,GAAIhO,KAAKgO,GACTs7V,UAAW,IAAMtpW,KAAKi5H,MAAMsoB,cAC5BgoN,UAAWr3V,GAAUlS,KAAKi5H,MAAMsoB,cAAgBrvI,EAChDs3V,eAAgBt3V,GAAUrR,KAAKgd,IAAI,KAAM3L,GACzC2hB,YAAa,KAAOm5U,EAA6Bh/V,GACjD8lB,SAAU,IACVw/I,cAAc,IAGhBtzK,KAAKu/O,gBAAkB,IAAIutH,IAA0B,CACnD9+V,GAAIhO,KAAKgO,GACTs7V,UAAW,IAAMtpW,KAAKi5H,MAAMuoB,iBAC5B+nN,UAAWr3V,GAAUlS,KAAKi5H,MAAMuoB,iBAAmBtvI,EACnDs3V,eAAgBt3V,IAAW,GAAY,EAANlE,GAAWnN,KAAKgd,IAAI,IAAK3L,GAC1D2hB,YAAa,GAAKm5U,EAA6Bh/V,GAC/C8lB,SAAU,EACVw/I,cAAc,IAOdr6C,YACF,OAAOrqH,OAAOkzI,cAAc9hJ,KAAKgO,GAAK,GAMpCsxO,kBACF,OAAOt/O,KAAKq/O,gBAAgBv3O,MAM1B4gE,eACF,OAAO1oE,KAAKopE,YAAc,EAAIppE,KAAKs/O,YAMjC72N,YACF,OAAOzoB,KAAKu0K,aAAazsK,MAMvB6gE,eACF,OAAO3oE,KAAKu/O,gBAAgBz3O,MAG1BqjC,iBACF,OAAQnrC,KAAKi5H,MAAM/kD,WAAaziC,SAASC,YAAcG,MAAMyP,WAAW,cAAgB3B,GAAGC,QAAQqjC,YAAY93C,WAG7GsxK,gBACF,OAAOz8M,KAAKi5H,MAAMh4E,OAGhBu9L,8CACF,OAAOx+O,KAAKy8M,UAAYz8M,KAAK2oE,SAAW3oE,KAAKyhJ,MAAQzhJ,KAAK0oE,SAAW1oE,KAAKyhJ,MAIxEuoN,4BACF,MAAM/7I,EAAgBjuN,KAAKw+O,wCAE3B,OAAgB,IAAZx+O,KAAKgO,GAAiBigN,EAGtBjuN,KAAKy8M,UACH/iK,UAAU,GAAG+iK,UAAkB57M,KAAKC,IAAImtN,EAAev0K,UAAU,GAAGswT,uBACjEtwT,UAAU,GAAGswT,sBAEftwT,UAAU,GAAGuwT,oBAAoBh8I,GAI1Cg8I,oBAAoBC,GAElB,IAAIC,EAAaD,EACjB,GAAIlqW,KAAKy8M,UAAW,CAIlB,GAAI0tJ,EAAanqW,KAAKgqW,sBAAuB,OAAOG,EAEpDA,GAAcnqW,KAAKgqW,sBAGrB,IAAIvnF,EAAYziR,KAAKy8M,UACjBz8M,KAAKgqW,sBAAwBhqW,KAAK0oE,SAClC1oE,KAAKgqW,sBAKT,OAHAvnF,GAAa5hR,KAAKuM,MAAM+8V,EAAanqW,KAAK2oE,UAAY3oE,KAAKozO,YAE3DqvC,GAAa0nF,EAAanqW,KAAK2oE,SACxB85M,EAILknF,oBACF,OAAI3pW,KAAKy8M,UACA,EAAIz8M,KAAKyhJ,MAAQzhJ,KAAK2oE,SAExB3oE,KAAKyhJ,MAAQzhJ,KAAK0oE,SAIvBq/G,mBACF,GAAIl2I,MAAMyP,WAAW,aAAc,MAAQ,sCAC3C,GAAI7P,SAASspB,gBACX,OAAItpB,SAASiqI,gBAAkB,EAAW,kEAClC,gEAEV,GAAIjqI,SAASqqB,kBAAmB,MAAQ,sDACxC,GAAIxM,WAAW2M,YAAa,MAAQ,6CACpC,GAAI3M,WAAW6L,UAAW,MAAQ,sCAClC,GAAIn7D,KAAKopE,YAAa,MAAQ,4CAE9B,MAAMi2C,EAAa9tG,SAASs6F,YAAY7rG,KAAKgqW,uBAAuBn4V,eAAc,GAClF,OAAI7R,KAAK4qD,SAAkB,uCAAsCy0D,KACzD,yCAAwCA,KAG9Cz0D,eACF,OAAO5qD,KAAKy8M,YAA0B,IAAZz8M,KAAKgO,IAAY0rC,UAAU15C,KAAKgO,GAAK,GAAG48C,YAAc/Y,MAAMyP,WAAW,eAAiBgO,WAAW2M,YAI3HtM,gBACF,OAAO3vD,KAAK2oE,UAAY3oE,KAAKs/O,YAAct/O,KAAK2oE,UAG9CS,kBACF,OAAOppE,KAAK2vD,WAAa,OAAUzd,iBAAiBs9D,MAAMp9D,UAQxDqvG,YACF,OAAOzhJ,KAAKi5H,MAAMwoB,MAGhB2xF,kBACF,OAAOpzO,KAAK0oE,SAAW1oE,KAAK2oE,SAG9BkhS,YAAYO,GACNpqW,KAAKopE,cAMTppE,KAAKi5H,MAAMwoB,OAAS2oN,EAEhBpqW,KAAKyhJ,OAASzhJ,KAAKozO,cAErBpzO,KAAKi5H,MAAMyoB,aAAe7gJ,KAAKuM,MAAMpN,KAAKyhJ,MAAQzhJ,KAAKozO,aACvDpzO,KAAKi5H,MAAMwoB,OAASzhJ,KAAKozO,aAEvBpzO,KAAKy8M,UACHz8M,KAAKyhJ,OAASzhJ,KAAK2oE,WACrB3oE,KAAKi5H,MAAMwoB,OAASzhJ,KAAK2oE,SACzB3oE,KAAKi5H,MAAMh4E,QAAS,EAChBh+C,OAAOiqG,OAAOo1E,gBAChBr/K,OAAOiqG,OAAOrN,UAAW,GAAE7/F,KAAKwwC,aAAY,uBAGvCxwC,KAAKyhJ,OAASzhJ,KAAK0oE,WAC5B1oE,KAAKi5H,MAAMwoB,OAASzhJ,KAAK0oE,SACzB1oE,KAAKi5H,MAAMyoB,cACX1hJ,KAAKi5H,MAAMh4E,QAAS,EAChBh+C,OAAOiqG,OAAOo1E,gBAChBr/K,OAAOiqG,OAAOrN,UAAW,GAAE7/F,KAAKwwC,aAAY,uBAYlD65T,oBAAoBzhV,GAClB,MAAM0hV,EAAmBtqW,KAAKuqW,0BACxBC,EAAWxqW,KAAK0oE,SAChBC,EAAW3oE,KAAK2oE,SAChB8hS,EAAYzqW,KAAKozO,YACjBs3H,EAA4B7pW,KAAKC,IAAIwpW,EAAkB3hS,GACvDgiS,EAAoC9pW,KAAKuM,OAAOwb,EAAO0hV,GAAoBG,GAC3EG,EAAkCjiS,EAAWgiS,EAC7CE,GAAiCjiV,EAAO0hV,EAAmBG,GAAaA,EACxEK,EAAyBjqW,KAAKuH,IAAIyiW,EAAgCL,EAAU,GAClF,OAAOE,EAA4BE,EAAkCE,EAcnEP,gCACF,OAAIvqW,KAAKy8M,UACAz8M,KAAK2oE,SAAW3oE,KAAKyhJ,MAEvBzhJ,KAAKozO,YAAcpzO,KAAKyhJ,MAGjCjxG,YAAYwkS,GACV,MAAQ,cAAah1U,KAAKgO,GAAK,KAc5B,SAASquD,IAAcruD,GAC5B,OAAO++V,IAAmB5/T,KAAKn/B,EAAK,GAPtC++V,IAAmB5/T,KAAOxlC,MAAMU,MAAM,EAAG,GAAG/E,KAAI0K,GAAM,IAAI++V,IAAmB/+V,KAUtE,MAAMkqM,IAAiB,CAE5B52G,kBAAmB,EAIfn0D,WACF,OAAO4/T,IAAmB5/T,MAGxB9B,oBACF,OAAOsU,GAAGC,QAAQqjC,YAAY93C,aAAenrC,KAAKisD,aAGhDA,kBACF,OAAOoQ,IAAc,GAAGlxB,YAG1BI,SACOvrC,KAAKqrC,gBACVz8B,OAAOkzI,cAAc,GAAG5tE,UAAW,EAGnCnyE,SAASe,SAASY,WAAW2D,4BAG/Bw2G,YAAa,CAACktP,GAAY,KACxB,IAAK7yJ,IAAejsJ,YAAa,OAOjCr9C,OAAOmzI,oBAAsBnzI,OAAOmzI,mBACpCnzI,OAAOqzI,uBAAyBrzI,OAAO+zC,QAAQkoD,eAC/C,MAAMoiQ,EAAuB,cAAaj+V,aAAO,GAAKhB,GAAK,KAKrDi9V,EAAYr8V,OAAOmzI,mBAAsBm2D,IAAej8I,YAAc,WAAa,SAAY,WAC/FivS,EAAkBH,EAAY,iBAAmB,GACvD9nW,OAAOiqG,OAAOrN,UAAW,GAAEotQ,KAAuB/B,IAAkBD,MAGlEliL,gCACF,OAAI/oL,KAAK4oL,aAAqB,EACvB/nL,KAAK0H,OAAOqG,OAAO+zC,QAAQkoD,eAAiBj8F,OAAOqzI,yBACvD,IAAOjiJ,KAAKshG,mBAAoB,EAAG,IAGpCnmC,gBACF,OAAOvsD,OAAOmzI,oBAGZ9lF,kBACF,OAAOj8D,KAAKm7D,YAAcrX,QAAQpS,WAAa9iC,OAAOszI,sBAAwB,GAG5E0mC,mBACF,OAAOsvB,IAAe/qK,KAAKz/B,OAAM6hD,GAAMA,EAAG6Z,eAG5C6xI,aAAaiyJ,GACX,IAAKltW,KAAKisD,aAAejsD,KAAKm7D,UAAW,OAIzC,MAAMgwS,EAAa+B,EAAoB,KAChC9B,EAAWv0V,GAAW7W,KAAKqrW,cAAcF,GAC1CG,EAAgBtrW,KAAKurW,mCAAmC10V,GAAS,GACvE,IAAK,MAAMirI,KAAiB9hJ,KAAKmtC,KAAM,CACrC,IAAK20G,EAAc32G,WAAY,MAC/B22G,EAAc+nN,YAAYyB,EAAcxpN,EAAc9zI,GAAK,IAEzDo9V,GACFlzJ,IAAer6F,aAAY,IA4B/BsgG,qBAAqBqtJ,EAAeC,EAAeC,GAEjD,MAAMC,EAAW3rW,KAAK69M,oBAChBF,EAAgB39M,KAAK49M,8BAA8B4tJ,EAAeG,GAIxE,GAAsB,IAAlBF,EACF,MAAO,CAACD,EAAe7tJ,EAAcpnM,IAAIi1V,IAS3C,MAAMttJ,EAAel+M,KAAK4rW,oBACxB,EACAJ,GACA59V,GAAK5N,KAAK49M,8BAA8BhwM,EAAG+9V,GAAW/1V,MAAM61V,GAAel1V,IAAIonM,IAC/E,EACA+tJ,GAEIyB,EAAuBntW,KAAK49M,8BAA8BM,EAAcytJ,GAAUp1V,IAAI2nM,GAC5F,MAAO,CAACA,EAAcivJ,IASxBtB,aAAargW,EAAOwrE,EAAK80R,EAAoBzpW,EAAQqpW,GACnD,IAAIn6U,EACJ,IAAK,IAAIgR,EAAO,EAAGA,EAAO,MAAOA,EAAM,CACrChR,GAAU/lB,EAAQwrE,GAAO,EACzB,MAAM+6C,EAAQ+5O,EAAmBv6U,GAAUlvB,EAC3C,GAAIxB,KAAK+K,IAAImmH,GAAS25O,EAAW,MAC7B35O,EAAQ,EAEVvmH,EAAQ+lB,EAGRylD,EAAMzlD,EAGV,OAAOA,GAGTq6U,oBAAoBpgW,EAAOwrE,EAAK80R,EAAoBzpW,EAAQqpW,GAC1D,IAAIn6U,EACJ,IAAK,IAAIgR,EAAO,EAAGA,EAAO,MAAOA,EAAM,CACrChR,GAAU/lB,EAAQwrE,GAAO,EACzB,MAAM+6C,EAAQ+5O,EAAmBv6U,GAAQ/a,IAAInU,GAC7C,GAAI2G,QAAQ4C,IAAImmH,GAAOr6G,GAAGg0V,GAAY,MAClC35O,EAAMr6G,GAAG,GAEXlM,EAAQ+lB,EAGRylD,EAAMzlD,EAGV,OAAOA,GASTssL,oBACE,MAAMvG,EAAoB,CAACP,kBAAkBC,YAAaD,kBAAkBE,WAC1EF,kBAAkBI,sBAAuBJ,kBAAkBK,MAAOL,kBAAkBttJ,YAChF2jT,EAA8BvyS,qBAAqBy8I,GACnDq0J,EAAW,CAAC,GAClBr0J,EAAkB90M,KAAKu0M,kBAAkBM,iBAEzC,IAAK,MAAMv1D,KAAiB9hJ,KAAKmtC,KAAM,CACrC,IAAK20G,EAAc32G,WAAY,MAC/BwgU,EAASnpW,KAAKq4D,qBAAqBy8I,EAAmBx1D,EAAc9zI,IAAIuI,IAAI62V,IAE9E,OAAOzB,GAGT/tJ,8BAA8B9nH,EAAU61Q,GAItC,MAAOxgP,EAAG6gP,GAAchsW,KAAKqrW,cAAcv1Q,GACrCm2Q,EAAmBjsW,KAAKksW,sCAAsCF,EAAYL,GAGhF,OADAM,EAAiB,IAAMn2Q,EAAWk2Q,EAC3BC,EACJ3oW,KAAI,CAACytO,EAAQvvO,IAAMwH,QAAQlI,IAAI,IAAIkI,QAAQ+nO,GAAQn7N,MAAM+1V,EAASnqW,IAAK,SACvEkL,QAmBLw/V,sCAAsCp2Q,GACpC,MAAMw1Q,EAAgBtrW,KAAKurW,mCAAmCz1Q,GACxDm2Q,EAAmB,GACzB,IAAK,IAAIzqW,EAAI,EAAGA,EAAI8pW,EAAc/nW,OAAS,EAAG/B,IAC5CyqW,EAAiBzpW,KAAK8oW,EAAc9pW,GAAK8pW,EAAc9pW,EAAI,IAG7D,OADAyqW,EAAiBzpW,KAAK8oW,EAAcp/V,QAC7B+/V,GAOTV,mCAAmCz1Q,GACjC,MAAMw1Q,EAAgB,CAACx1Q,GACvB,IAAK,MAAMgsD,KAAiB9hJ,KAAKmtC,KAAM,CACrC,IAAK20G,EAAc32G,WAAY,MAC/B,MAAMghU,EAAarqN,EAAcuoN,oBAAoBiB,EAAcp/V,QACnEo/V,EAAc9oW,KAAK2pW,GAErB,OAAOb,GAQTc,gBAAgBiB,EAAQ91O,EAAQ,KAC9B,GAAe,IAAX81O,EAAc,CAEhB,MAAM99S,EAAK8M,IAAc,GAEzB,GAAI9M,EAAGmZ,UAAYwvI,IAAe52G,kBAChC,OAAO,KAGT,MAAMjoE,GAAKk2B,EAAGktJ,UAAYltJ,EAAGoZ,SAAW,GAAKpZ,EAAGmZ,SAAWnZ,EAAGkyF,MAI9D,OAAQpoH,EAAI6+K,IAAe52G,kBACvBjoE,EAAIk2B,EAAGoZ,SAAWpZ,EAAGmZ,SAAWwvI,IAAe52G,kBAAoBjoE,EAAI6+K,IAAe52G,kBAU5F,MAAM/3B,EAAU,CAAClN,IAAc,GAAGogJ,UAAWpgJ,IAAc,GAAGogJ,WACxD6vJ,EAAS,CAACjwS,IAAc,GAAGolF,MAAOplF,IAAc,GAAGolF,OACnD8qN,EAAY,CAAClwS,IAAc,GAAGsM,SAAUtM,IAAc,GAAGsM,UACzD6jS,EAAY,CAACnwS,IAAc,GAAGqM,SAAUrM,IAAc,GAAGqM,UAQ/D,GAAI8jS,EAAU,IAAMt0J,IAAe52G,mBAAqBkrQ,EAAU,IAAMt0J,IAAe52G,kBACrF,OAAO,KAGT,MAAMmrQ,EAAiB,CAAC,CAACD,EAAU,IAAK,CAACD,EAAU,GAAIC,EAAU,IAAK,CAACD,EAAU,GAAIA,EAAU,KAE/F,IAAIG,EAAe,EACfjqF,EAAY,EAChB,IAAK,IAAIjhR,EAAI,EAAGA,EAAI+1H,EAAO/1H,IAAK,CAI9B,MAAMmH,EAAU4gE,EAAQ,GAAMA,EAAQ,GAAK,EAAI,EAAK,EAE9CojS,EAAcF,EAAe9jW,GAE7BikW,EAAUjkW,EAAU,EAAI9H,KAAKC,IAAI6rW,EAAY,GAAKL,EAAO,GAAIK,EAAY,GAAKL,EAAO,IACvFK,EAAY,GAAKL,EAAO,GAC5B,GAAgB,IAAZ3jW,EAAe,CAEjB,GAAI+jW,GAAgBx0J,IAAe52G,kBACjC,OAAOmhL,EAAYvqE,IAAe52G,kBAGpCorQ,EAAe,OAGfA,GAAgBE,EAGlBnqF,GAAamqF,EAETjkW,EAAU,IACZ2jW,EAAO,IAAMM,EACTN,EAAO,IAAMK,EAAY,KAC3BpjS,EAAQ,IAAMA,EAAQ,GACtB+iS,EAAO,IAAMK,EAAY,KAI7BL,EAAO,IAAMM,EACTN,EAAO,IAAMK,EAAY,KAC3BpjS,EAAQ,IAAMA,EAAQ,GACtB+iS,EAAO,IAAMK,EAAY,IAI7B,OAAO,MAQTtB,cAAcv1Q,GAIZ,GAAI91F,KAAKm7D,UAAW,MAAO,EAAC,EAAO,GACnC,GAAIvsD,OAAOozI,6BAA+Bp4H,2BAA2BH,SACnE,MAAO,EAAC,EAAOqsE,GAEjB,MAAM+2Q,EAAW7sW,KAAKosW,gBAAgBx9V,OAAOozI,4BAK7C,OAAiB,OAAb6qN,GAAqBA,EAAW,MAAQA,EAAW/2Q,EAC9C,EAAC,EAAOA,GAEV,EAAC,EAAM+2Q,KCzqBL1pT,IAAiB,CACxBqxB,gBAAc,OAAOn5D,EAAAA,OAErBy3E,gBACF,IAAI/S,EAAc//E,KAAKw0E,UAAU5+D,MAAM0uC,iBAAiB,GAAGlc,aAE3D,OADGx5B,OAAOC,WAAWmzC,GAAGC,SAAS5V,IAAI,mBAAkB0zC,EAAYA,EAAYnqE,MAAM5M,QAAQ6U,IAAIjP,OAAOC,WAAWi9D,OAAOs2E,UAAUr4I,SAAS,KACtIg2E,GAGL+hI,sBACF,OAAO9hN,KAAK8yF,UAAU57E,MAAM05B,SAASmX,gBAAgBjgD,QAGnD+5M,+BACF,OAAO5tJ,aAAay4C,YAAYv4C,YAAc2F,OAAOuvO,aAAetgQ,QAAQ3gC,IAAI,EAAG4gS,gBAAgB3qN,QACjG34B,uBAAuB,aAAe1M,YAAY,KAAKrQ,gBAAgB,IAGvEya,iBACF,IAAIkqT,EAAe1+V,OAAO+zC,QAAQsF,YAAYkqC,MAAMl7E,KAAK8hD,wBAAwB3kD,QAC5Ey4B,eAAesf,oBACdmhT,EAAe,MAAMA,EAAe,KACpCA,EAAe,MAAMA,GAAwC,KAAvBA,EAAe,OAE3D,IAAIC,EAASlyV,EAAAA,GAAAA,IAAUiyV,EAAe,IAAO,GAI7C,GAFIC,EAAOr8U,IAAI,IAAMq8U,EAAO71V,GAAG,MAAK61V,EAAS,IAAIvkW,QAAQ,OAAYskW,EAAe,KACpFC,EAASA,EAAO33V,MAAM5V,KAAK6hN,0BACvBjzM,OAAOorD,QAAQE,oBAAoBC,cAAe,CACpD,IAAIu7I,EAA2B3+I,GAAoBC,eAAepoD,OAAOorD,QAAQC,WAAW,IAC3FyI,kBAAkB,IAAI52B,WAAU4pK,EAA2B70M,KAAKC,IAAI,EAA2B,EAAzB40M,IACvE63J,EAASA,EAAO1vV,IAAI63L,GACpB63J,EAASA,EAAO1vV,IAAIk5C,GAAoBkB,QAAQI,SAASzpD,OAAOorD,QAAQC,WAAW,KAErF,OAAOszS,EAAOngW,SAGZ+6C,4BACF,OAAOnoD,KAAKojD,WAAW56C,SAASxI,KAAK8yF,YAGnC7mB,mBACF,OAAOr7B,SAASmX,gBAAgBjgD,MAAMopB,IAAIlxB,KAAK8yF,YAAcliD,SAASoU,kBAAkB5tC,GAAG,IAGzFo2V,gBACF,OAAQ3sW,KAAKgd,IAAIhd,KAAK4H,SAASzI,KAAKojD,WAAWhvC,QAAU,IAAM,GAAI,GAChEvT,KAAKgd,IAAIhd,KAAK4H,SAASzI,KAAKojD,WAAWhvC,QAAU,IAAQ,GAAI,KAG9Dg/E,mBACF,IAAIxlF,EAAI+xC,GAAGC,QAAQC,0BAA0B1U,WAAatqC,KAAKgd,IAAI6nC,uBAAuB,aAAc,IAAO,EAC/G,OAAO92C,OAAOma,QAAQwjF,MAAQjoD,iBAAiB,IAAI3b,gBAAgB,GAAK/6B,EAAI+xC,GAAGC,QAAQ6iC,eAAe95C,gBAAgB,IAIpHsvI,qBACF,OAAOj4K,KAAKwtW,UAAYlpT,iBAAiB,IAAI3b,gBAAgB,IAAMgX,GAAGC,QAAQC,0BAA0B1U,WAAatqC,KAAKgd,IAAI6nC,uBAAuB,aAAc,IAAO,IAI5Kk3J,cACM58M,KAAKojD,WAAWlyB,IAAIlxB,KAAKw0E,YACvBx0E,KAAKwtW,UAAY5+V,OAAOma,QAAQwjF,QAClC39F,OAAO+zC,QAAQuF,YAAY60F,SAAW/7F,OAAOqxC,eAAerxC,OAAOC,OAAOr+C,QAAO6vB,GAAW,OAANA,KACtF7jB,OAAOma,QAAQwjF,MAAQvsG,KAAKwtW,YAM9B/3F,qBACF,OAAO,GAAKnxN,iBAAiB,IAAI3b,gBAAgB,IAGnDk0K,wBAAwB5lF,GACtB,MAAMw2O,EAAaztW,KAAKozF,aAAexiD,SAASoU,kBAAkBl9C,MAClE,OAAG63C,GAAGC,QAAQ0iC,0BAA0Bn3C,WAAmBsiU,EACnDA,GACL,EAAI5sW,KAAKgd,IAAI,GAAKo5G,EAAO,IAAOj3H,KAAKy1Q,kBAG1CF,gBAAgB5pO,GACd,MAAM+hU,EAAQ1tW,KAAKozF,aACnB,GAAIs6Q,GAAS/hU,EAAM,OAAO0Y,EAAAA,EAC1B,MAAMspT,EAAY/8T,SAASoU,kBAAkBl9C,MAI7C,OAAOkB,QAAQZ,IAAI,EAAGvH,KAAKyT,KAAKo5V,GAASA,EAAQ/hU,IAAS9qC,KAAKyT,KAAKo5V,GAASA,EAAQC,KAAa/3V,MAAM5V,KAAKy1Q,gBAAgB/lQ,aCpFpHg4V,IAAM,GA6LZ,SAASkG,MACd,MAAMC,EAAOjuW,OAAOmnH,SAAS8mP,KAC7B,OAAOA,EAAK77V,MAAM,MAAM,GAAGzO,OAAS,IAAMutJ,MAGrC,SAASA,MACd,MAAM+8M,EAAOjuW,OAAOmnH,SAAS8mP,KAC7B,OAAOA,EAAKt6V,SAAS,SAAWs6V,EAAKt6V,SAAS,cAAgBs6V,EAAKt6V,SAAS,aAlM9Em0V,IAAIj8J,UAAY,WACdp7C,YAAYo7C,aAGdi8J,IAAIoG,oBAAsB,WACxB,MAAMv+Q,EAAkBrpC,aAAamG,IAAIwa,OAAOo9N,mBAAmB53O,KACnE,IAAK,MAAMuF,KAAe29B,EAAiB39B,EAAYrmB,UAMzDm8T,IAAIqG,iBAAmB,WACrBrrW,OAAOC,KAAKiM,QAAQ6F,SAAQ+1B,IACC,kBAAhB57B,OAAO47B,KAAmB57B,OAAO47B,IAAQ,GACzB,kBAAhB57B,OAAO47B,IAAqB57B,OAAO47B,GAAKxoC,cAAgBU,SAAQkM,OAAO47B,GAAO57B,OAAO47B,GAAK50B,MAAM,IAChF,kBAAhBhH,OAAO47B,IAAsBz6B,SAASnB,OAAO47B,KACtD9nC,OAAOC,KAAKiM,OAAO47B,IAAM/1B,SAAQu5V,IACE,kBAAtBp/V,OAAO47B,GAAKwjU,KAAoBp/V,OAAO47B,GAAKwjU,IAAS,GAC/B,kBAAtBp/V,OAAO47B,GAAKwjU,IAAsBp/V,OAAO47B,GAAKwjU,GAAMhsW,cAAgBU,SAC7EkM,OAAO47B,GAAKwjU,GAAQp/V,OAAO47B,GAAKwjU,GAAMp4V,MAAM,WAMtD8xV,IAAIuG,iBAAmB,WACrBvrW,OAAOC,KAAKiM,QAAQ6F,SAAQ+1B,IACC,kBAAhB57B,OAAO47B,KAAmB57B,OAAO47B,IAAQ,GACzB,kBAAhB57B,OAAO47B,IAAqB57B,OAAO47B,GAAKxoC,cAAgBU,SAAQkM,OAAO47B,GAAO57B,OAAO47B,GAAK50B,MAAM,IAChF,kBAAhBhH,OAAO47B,IAAsBz6B,SAASnB,OAAO47B,KACtD9nC,OAAOC,KAAKiM,OAAO47B,IAAM/1B,SAAQy5V,IACE,kBAAtBt/V,OAAO47B,GAAK0jU,KAAoBt/V,OAAO47B,GAAK0jU,IAAS,GAC/B,kBAAtBt/V,OAAO47B,GAAK0jU,IAAsBt/V,OAAO47B,GAAK0jU,GAAMlsW,cAAgBU,SAC7EkM,OAAO47B,GAAK0jU,GAAQt/V,OAAO47B,GAAK0jU,GAAMt4V,MAAM,WAMtD8xV,IAAIyG,WAAa,WACftwL,GAAAA,QAAmC,gBAAiB,IAGtD6pL,IAAI0G,OAAS,WAC2B,KAAlClkW,SAASE,KAAKE,MAAM0sK,UAAkB9sK,SAASE,KAAKE,MAAM0sK,UAAY,uBACrE9sK,SAASE,KAAKE,MAAM0sK,UAAY,IAGvC0wL,IAAI2G,OAAS,WAC2B,KAAlCnkW,SAASE,KAAKE,MAAM0sK,UAAkB9sK,SAASE,KAAKE,MAAM0sK,UAAY,uBACrE9sK,SAASE,KAAKE,MAAM0sK,UAAY,IAGvC0wL,IAAI4G,UAAY,WACd/lQ,MAAMu8B,UAAU,UAChBztF,SAAS24H,MAAMg8B,gBAGjB07J,IAAI6G,QAAU,WACZ,MAAMniQ,EAAO8qD,KAAKC,UAAUvoJ,OAAQ4wF,mBAAmB2vF,eACjDoP,EAAQnyF,EAAKhhG,QAAQ,QAAU,MAC/B0wL,EAAW5kC,KAAKc,MAAMumC,GACvBzC,GAAwD,KAA5CzrC,YAAYo4C,kBAAkB3M,IAI/CzrC,YAAY23C,iBAAiBlM,GAC7BzrC,YAAYjkD,QAJV7xF,MAAMjC,QAAQkC,KAAK,4BAOvBktV,IAAI8G,cAAgB,WAClB,IAAK,IAAIjmT,EAAO,EAAGA,EAAO,EAAGA,IAAQ,CACnC,MAAM6H,EAAMrJ,cAAcwB,GAC1B6H,EAAIzkB,KAAOykB,EAAIp/B,SAASo/B,EAAIe,UAIhCu2S,IAAI+G,eAAiB,WACnB,IAAK,MAAMn/L,KAAaxiH,eAAeT,IACrCijH,EAAUn+G,OAAS,EAErBu2S,IAAI8G,iBAGN9G,IAAIgH,aAAe,WACjB9/V,OAAOu4C,eAAiB,GAG1BugT,IAAIiH,iBAAmB,WACrB,IAAK,MAAM95J,KAASnoI,aAAa7mB,SAASu5C,YAAYv2E,SAChDja,OAAOia,SAASw/C,QAAQ90D,SAASshM,EAAM7mM,MACzCY,OAAOia,SAASw/C,QAAQ98D,OAAOqD,OAAOia,SAASw/C,QAAQpgE,QAAQ4sM,EAAM7mM,IAAK,GAC1ElD,QAAQC,IAAIb,SAASqP,eAAgB,mBAAkBs7L,EAAM7mM,OAC7D4iC,SAASiW,aAAaz9C,IAAIyrM,EAAMlpK,QAKtC+7T,IAAIkH,cAAgB,WAClBhgW,OAAOia,SAASmtC,YAAc36C,EAAAA,GAC9BzM,OAAOia,SAASu3C,iBAAmB/kD,EAAAA,GACnCzM,OAAOia,SAAS48B,WAAW,GAAK,EAChC72C,OAAOia,SAAS48B,WAAW,GAAK,EAChC72C,OAAOia,SAAS48B,WAAW,GAAK,EAChC72C,OAAOia,SAASo2H,oBAAsB,EACtCrwI,OAAOia,SAAS67B,qBAAuB,GAMzCgjT,IAAImH,iBAAmB,SAAShgU,EAAOD,EAAQkO,EAAOgxG,EAAWhxG,GAC/D,GAA4C,IAAxC4hC,UAAUC,oBAAoB72E,MAAa,OAC/C,MAAMmrD,EAAQ26F,eAAeC,YAAY,CAAE7qG,YAAalG,EAAOgxG,SAAAA,IAC/D76F,EAAMrkB,OAASA,EACfqkB,EAAMpkB,MAAQA,EACdmS,OAAO2sG,eAAe16F,IAGxBy0S,IAAIoH,UAAY,SAAShyT,EAAOgxG,EAAWhxG,GACG,IAAxC4hC,UAAUC,oBAAoB72E,OAClCk5C,OAAO2sG,eAAeC,eAAeC,YAAY,CAAE7qG,YAAalG,EAAOgxG,SAAAA,MAGzE45M,IAAIqH,iBAAmB,SAASjyT,GACc,IAAxC4hC,UAAUC,oBAAoB72E,OAClCk5C,OAAO2sG,eAAeC,eAAe8vG,aAAa5gN,KAGpD4qT,IAAIsH,oBAAsB,SAAS79T,GACjC,MAAM8hB,EAAQrkD,OAAOma,QAAQsmB,OAAO4R,OACjC4lB,OAAOj4D,OAAOma,QAAQsmB,OAAOgX,WAC7BzjD,QAAO6vB,GAAgB,cAAXA,EAAE0jB,OAAsB,GACvC8c,EAAMlW,SAAW4sN,iBAAiBx4N,EAAe/8B,QAAU,MAG7DszV,IAAIuH,cAAgB,WAClB73T,kBAAkB,IAAI+lI,OACtBp7K,SAASe,SAASY,WAAWuC,uBAG/ByhW,IAAIwH,UAAY,SAAS3/V,GACvB,GAAa,QAATA,EAAgB,CAClB,MAAMggF,EAAkBrpC,aAAamG,IAAIwa,OAAOo9N,mBAAmB53O,KACnE,IAAK,MAAMuF,KAAe29B,EAAiB39B,EAAYurH,OACvD,MAAO,2BAET,MAAsB,kBAAV5tK,EAA2BypC,YAAYzpC,GAAM4tK,OACrD5tK,EAAKw7G,WAAW,KAAa/xE,YAAYpB,SAASroC,EAAK5D,MAAM,GAAI,KAAKwxK,OACtE5tK,EAAKw7G,WAAW,KAAa3zE,kBAAkBQ,SAASroC,EAAK5D,MAAM,GAAI,KAAKwxK,OACzE,gCAGTv9K,OAAOkoN,uBAAoBvlN,EAE3BmlW,IAAIyH,mBAAqB,SAASnhW,GAChC85M,kBAAoB95M,GAGtB05V,IAAI0H,QAAU,WACZvnQ,sBAGF6/P,IAAI2H,SAAW,WACbzxL,qBAGF8pL,IAAI19D,OAAS,WACX21B,oBAGF+nC,IAAI4H,SAAW,WACb/wL,sBAGFmpL,IAAI6H,QAAU,WACZj5L,uBAGFoxL,IAAIC,YAAc,WAChB/4V,OAAOma,QAAQk2D,YAAcrwE,OAAOma,QAAQqnB,MAAMi2B,KAClDz3D,OAAOma,QAAQqnB,MAAQ,IAAI7iC,IAC3BmxE,UAAUswE,kBAAkBhpD,aAC5BtnB,UAAUuwE,aAAajpD,cAazB0hQ,IAAI8H,uBAAyB,WAC3BhjN,iBAAiBK,UAInB66M,IAAIE,YAAc,WAChB,MAAM6H,EAAU,GACVC,EAAU,CAAC32T,KAAK1I,WACtB,MAAOq/T,EAAQnsW,OAAS,EAAG,CACzB,GAAIqL,OAAOma,QAAQk2D,WAAa,EAAG,MACnC,MAAMvqC,EAAOg7T,EAAQz9U,QACrBw9U,EAAQjtW,KAAKkyC,GACbg7T,EAAQltW,QAAQkyC,EAAKC,eAAe/xC,QAAO+2B,IAAM81U,EAAQl8V,SAASomB,MAClE+a,EAAK1I,aAKT07T,IAAIiI,oBAAsB,WACxB7kW,QAAQC,IAAK,gBAAe6lC,SAASC,WAAW9mC,SAAS6lW,YAAY,MACrE9kW,QAAQC,IAAK,QAAOlK,KAAK05B,MAAM4oB,eAAegF,sBAAsB/zC,YACpEtJ,QAAQC,IAAK,gBAAe,IAAMlK,KAAKuM,MAAM21C,mBAAmBC,YAAc,IAAM,KAEpFl4C,QAAQC,IAAK,gBAAey4C,UAAU76C,QAAQoB,SAAS6lW,YAAY,IACnE9kW,QAAQC,IAAK,cAAalK,KAAKgd,IAAIg9C,uBAAwB,KAAK+0S,YAAY,MAC5E,MAAMC,EAAU,IAAMhvW,KAAKuM,MAAMwB,OAAO41C,SAAW,IAAM,IACnDsrT,EAAU,IAAMjvW,KAAKuM,MAAMm3C,WAAWC,SAASC,MAAQ,IAAM,IAC7DsrT,EAAU,IAAMlvW,KAAKuM,MAAMwB,OAAOia,SAAS67B,qBAAuB,IAAM,IAC9E55C,QAAQC,IAAK,aAAY8kW,KAAWC,KAAWC,MAAYF,EAAUC,EAAUC,MAC/EjlW,QAAQC,IAAK,qBAAoBlK,KAAK05B,MAAM++T,yBAAyBllV,UAErE,IAAI47V,EAAU30V,EAAAA,GACd,IAAK,IAAI7Z,EAAI,EAAGA,GAAK,EAAGA,IACtBwuW,EAAUA,EAAQp6V,MAAMq1C,oBAAoBzpD,GAAG4pD,YAEjDtgD,QAAQC,IAAK,cAAailW,EAAQ57V,QAAQw7V,YAAY,MACtD,IAAIK,EAAU50V,EAAAA,GACd,IAAK,IAAI7Z,EAAI,EAAGA,GAAK,EAAGA,IACtByuW,EAAUA,EAAQr6V,MAAMunD,kBAAkB37D,GAAG4pD,YAE/CtgD,QAAQC,IAAK,cAAaklW,EAAQ77V,QAAQw7V,YAAY,MACtD,IAAIM,EAAU70V,EAAAA,GACd,IAAK,IAAI7Z,EAAI,EAAGA,GAAK,EAAGA,IACtB0uW,EAAUA,EAAQt6V,MAAMmxC,cAAcvlD,GAAG4pD,YAE3CtgD,QAAQC,IAAK,cAAamlW,EAAQ97V,QAAQw7V,YAAY,MACtD9kW,QAAQC,IAAK,sBAAqByE,iBAAiB,IAAO3O,KAAKuM,MAAMwB,OAAOwyD,gBAAkB,IAAO,QAErGt2D,QAAQC,IAAK,gBAAelK,KAAK05B,MAAM3rB,OAAO88C,WAAWt3C,YACzDtJ,QAAQC,IAAK,gBAAelK,KAAK05B,MAAM3rB,OAAOq4C,WAAW7yC,YACzDtJ,QAAQC,IAAK,gBAAeyE,iBAAiB,IAAM3O,KAAKuM,MAAMm3C,WAAWryC,OAAOkC,QAAU,IAAM,QAEhGtJ,QAAQC,IAAK,QAAOlK,KAAK05B,MAAM3rB,OAAO2pC,UAAUg6C,QAAQn+E,YACxDtJ,QAAQC,IAAK,QAAOlK,KAAK05B,MAAM3rB,OAAOia,SAASmtC,YAAY5hD,YAC3DtJ,QAAQC,IAAK,QAAOlK,KAAK05B,MAAM3rB,OAAOia,SAASu3C,iBAAiBhsD,aAGlEszV,IAAIyI,sBAAwB,SAAS70T,GACnCy6J,OAAOz6J,GAAW+Q,IAAI53C,SAAQ7G,GAAKA,EAAE4M,UAGvCktV,IAAI0I,uBAAyB,SAAS90T,GACpCy6J,OAAOz6J,GAAW+Q,IAAI53C,SAAQ7G,GAAKA,EAAEk2S,aAIvC4jD,IAAI2I,mBAAqB,SAASC,EAAUC,GAAc,GACxD,MAAMC,EAAiB,CACrB,CACE,WACE5hW,OAAO88C,WAAarwC,EAAAA,IACpBzM,OAAOC,WAAWia,QAAQq5H,WAAa,KAG3C,CACE,WACEvzI,OAAO0rD,WAAWoO,SAAW,IAGjC,CACE,WACE95D,OAAO2pC,UAAU8vB,QAAQ7lE,KAAK,MAGlC,CACE,WACEoM,OAAO2pC,UAAU8vB,QAAQ7lE,KAAK,MAGlC,CACE,WACEoM,OAAO2pC,UAAU8vB,QAAQ7lE,KAAK,MAEhC,WACEoM,OAAO2pC,UAAU8vB,QAAQ7lE,KAAK,MAEhC,WACEoM,OAAO2pC,UAAU8vB,QAAQ7lE,KAAK,MAEhC,WACEoM,OAAO2pC,UAAU8vB,QAAQ7lE,KAAK,IAAK,IAAK,OAG5C,CACE,WACEoM,OAAO2pC,UAAU8vB,QAAQ7lE,KAAK,OAGlC,CACE,WACEoM,OAAO2pC,UAAU8vB,QAAQ7lE,KAAK,OAGlC,CACE,WACEoM,OAAO2pC,UAAU8vB,QAAQ7lE,KAAK,OAGlC,CACE,WACEoM,OAAO2pC,UAAU8vB,QAAQ7lE,KAAK,OAGlC,CACE,WACEoM,OAAOwpI,gBAAgB,IAAM,KAGjC,CACE,WACExpI,OAAOwpI,gBAAgB,KAAO,IAGlC,CACE,WACExpI,OAAOwpI,gBAAgB,KAAO,MAGlC,CACE,WACExpI,OAAOma,QAAQqnB,MAAQ,IAAI7iC,IAAI,CAAC,OAGpC,CACE,WACEm5D,UAAU0jF,iBAAiBx/F,UAAW,IAG1C,CACE,WACErG,WAAWC,SAAS85J,kBAAmB,IAG3C,CACE,WACE1vM,OAAO0rD,WAAWwkC,gBAAkB,KAEtC,WACElwF,OAAO0rD,WAAWwkC,gBAAkB,IACpClwF,OAAO0rD,WAAW9V,SAAW,KAGjC,CACE,WACE51C,OAAOma,QAAQs3H,QAAW,GAC1BzxI,OAAOma,QAAQ0vH,YAAc,MAI7Bg4N,EAAiBD,EAAeltW,KAAIsK,GAAKA,EAAErK,OAAS,IAAGkJ,QAAO,CAACmB,EAAGsG,IAAMtG,EAAIsG,IAC5Ew8V,EAAa,GACbC,EAAe,SAAS3iW,GAC5Bu2C,WAAWC,SAAS85J,kBAAmB,EACvCjuD,YAAY23C,iBAAiBnvI,OAAOyyF,cACpC18I,OAAO88C,WAAarwC,EAAAA,GACpBzM,OAAOoiC,eAAiB31B,EAAAA,KACxBkpC,WAAWhZ,SACX38B,OAAO0rD,WAAW8wC,OAAS,EAC3B,IAAK,IAAI5pG,EAAI,EAAGA,EAAIgvW,EAAejtW,OAAQ/B,IAAK,CAC9C,MAAM+U,EAAMi6V,EAAe7kW,MAAM,EAAGnK,GAAG8B,KAAIsK,GAAKA,EAAErK,OAAS,IAAGkJ,QAAO,CAACmB,EAAGsG,IAAMtG,EAAIsG,GAAG,GAEhF08V,EAAY,CAAC,QAAU/pS,OAAO2pS,EAAehvW,IAAIX,KAAKuM,MAAMY,EAAKuI,IAAQi6V,EAAehvW,GAAG+B,OAAS,IAC1GqtW,IAEF,SAASC,IACP,IAAK,IAAIjwW,EAAI,EAAGA,GAAK,EAAGA,IACtBi6M,eAAeh6M,KAAKgd,IAAI,GAAIjd,IAC5B8vW,EAAWluW,KAAK60C,SAASC,WAAW9mC,cAAc+zC,WAAWryC,OAAQ,EAAG,IACxEw+V,EAAWluW,KAAKoM,OAAO0rD,WAAW9V,UAClCksT,EAAWluW,KAAK+hD,WAAWC,SAASC,OAGxCosT,IACAjiW,OAAOiiC,WAAax1B,EAAAA,KACpBzM,OAAO+zC,QAAQqc,aAAaC,MAAQ5jD,EAAAA,KACpC2mV,iBACA6O,KAEF,QAAiBtuW,IAAb+tW,EAAwB,CAC1B,MAAM7rT,EAAQ,IACR9qB,EAAI,MACV,GAAI8qB,EAAQ9qB,EAAI82U,EACd,MAAM,IAAInjW,MAAM,6DAElB,IAAK,IAAI9L,EAAI,EAAGA,EAAIijD,EAAOjjD,IAAK,CAC9B,MAAMsvW,EAAStvW,EAAIm4B,EAAI82U,EACnBjvW,EAAI,MAAQ,GACdsJ,QAAQC,IAAK,0BAAyBvJ,KAAKijD,MAAUqsT,MAEvDH,EAAaG,SAGfH,EAAaL,GAEf,MAAMrgK,GAAOQ,EAAAA,GAAAA,YAAWigK,EAAWj/V,YAMnC,OALA3G,QAAQC,IAAIklM,GAKLA,GAGTy3J,IAAIqJ,WAAa,SAAS1wW,GACxB,MAAMszE,EAAatzE,EAAOszE,YAAc,KAClChL,EAAWtoE,EAAOsoE,UAAY,IACpC,IAAIg8P,EAAUlkU,KAAKC,MACnB,MAAM0rG,EAAO5M,mBAAmB0vF,UAAUtgL,QACpCoiW,EAAY,CAAC76T,EAAM5L,KAAP,CAChB4L,KAAAA,EACA2G,MAAO62B,EACP52B,SAAU,IACV+wG,SAAUn6E,EACVpnE,IAAK,KACLyB,GAAI22T,IACJp6R,QAASu/F,uBAAuBv/F,KAE5B0mU,EAAqB96T,GAAQ66T,EAAU76T,EAAMo0F,WAAWp0F,GAAM5L,QAAQjnC,KAAI42B,GAAKA,EAAElsB,MACjFkjW,EAAgB,CACpBF,EAAU,UAAW,CAAC,oBAAqB,oBAAqB,mBAAoB,qBACpFA,EAAU,UAAW,CAAC,oBAAqB,oBAAqB,mBAAoB,wBAEtF,SAASG,EAA4BtlW,EAAO8qP,GAC1C,GAAwB,IAApBA,EAASpzP,OAAc,MAAO,GAClC,GAAc,IAAVsI,EAAa,MAAO,CAAC,IACzB,MAAMulW,EAAeD,EAA4BtlW,EAAO8qP,EAAShrP,MAAM,IACjE0lW,EAAYF,EAA4BtlW,EAAQ,EAAG8qP,GAEzD,OADA06G,EAAU58V,SAAQylB,GAAKA,EAAE13B,KAAKm0P,EAAS,MAChC06G,EAAUxqS,OAAOuqS,GAE1B,MAAME,EAAQH,EAA4B,EAAG7oV,mBAC1ChlB,KAAIuU,GAAKA,EAAEvU,KAAI+1B,GAAK43U,EAAmB53U,OACpCk4U,EAAQJ,EAA4B,EAAG7oV,mBAC1ChlB,KAAIuU,GAAKA,EAAEvU,KAAI+1B,GAAK43U,EAAmB53U,OACpCm4U,EAAcN,EAAc5tW,KAAImvB,GAAK8+U,EAAMjuW,KAAIuU,GAAK,CAAC4a,GAAGo0C,OAAOhvD,OAC/D21P,EAAY8jG,EAAMzqS,UAAU2qS,GAClC,SAASC,EAAS1pW,GAChB6G,OAAOma,QAAQsmB,OAAO4R,OAASusN,EAAUzlQ,GAAOzE,KAAI,CAACmvB,EAAGlmB,KACtDkmB,EAAElmB,IAAMA,EACDkmB,KAETuuB,OAAOC,OAASt5C,MAAM6jH,KAAK58G,OAAOma,QAAQsmB,OAAO4R,QACjDl/C,SAASe,SAASY,WAAWyB,gBAE/B,SAASusW,EAAmBz+S,GAC1B,MAAmB,YAAfA,EAAM9c,KACD+6T,EAAchvP,WAAUhoF,GAAKA,EAAElsB,KAAOilD,EAAMjlD,KAAIyD,WAElD+W,cAAcyqC,EAAM9c,MAE7B,SAASw7T,EAAU95V,EAAGtU,EAAQ6rG,GAAS,GACrC,OAAIv3F,EAAEtU,QAAUA,EAAesU,EACxBu3F,EAAU,IAAKtjG,OAAOvI,EAASsU,EAAEtU,QAAUsU,EAAIA,EAAK,IAAK/L,OAAOvI,EAASsU,EAAEtU,QAEpF,SAASquW,EAAY7pW,GACnB,MAAM8pW,EAAOF,EAAW,GAAE9wW,KAAKuM,MAAM,KAAOrF,EAAQ,GAAKylQ,EAAUjqQ,WAAY,GAAG,GAC5EuvE,EAAK6+R,EAAUxuT,eAAegF,sBAAsBynT,YAAY,GAAI,GACpEkC,EAAKH,EAAU5uT,mBAAmBC,YAAa,GAC/CqmB,EAAKsoS,EAAU/iW,OAAOuiC,eAAepnC,SAAS0H,WAAY,GAC1D8hE,EAAKo+R,EAAU/iW,OAAOoiC,eAAejnC,SAAS0H,WAAY,GAC1D4hE,EAAKs+R,EAAU/gU,SAASC,WAAW9mC,SAAS0H,WAAY,IACxD2xN,EAAY9xK,SAASwU,gBACrBthB,EAAWD,WAAWC,SAASC,MAAQ71C,OAAO41C,SAAW51C,OAAOia,SAAS67B,qBACzEqtT,EAAYvkG,EAAUzlQ,GAAOzE,IAAIouW,GAAoBluW,MAC3DsH,QAAQC,IAAK,GAAE8mW,KAAQE,QAAgBj/R,QAASg/R,QAASzoS,QAASkK,QAASF,eAC5D+vJ,cAAsB5+K,KACrC6rG,YAAY02C,gBAAiB,EAC7B12C,YAAYi4C,OAAOl8F,GACfrkG,EAAQylQ,EAAUjqQ,OAAS,GAC7BpC,WAAW6wW,EAAU,IAAKjqW,EAAQ,GAGtC,SAASiqW,EAASjqW,GAChB0pW,EAAS1pW,GACT8xG,iBAAiBruG,QACjBrK,WAAWywW,EAAajpS,EAAU5gE,GAEpCiqW,EAAS,IAIXtK,IAAIuK,gBAAkB,WACpBrjW,OAAOma,QAAQkwB,UAAUkoG,aAAc,GAQzCumN,IAAIwK,eAAiBzwW,iBACnB,MAAM2qG,QAAaokD,MAAMq3C,OACnB1zD,EAAO30C,mBAAmB4vF,YAAYhjF,GACtCksB,EAAS+3B,YAAYu2C,YACtBzyD,EAAK0yD,QAAO1yD,EAAK0yD,MAAQ,IAC9B1yD,EAAK0yD,MAAMvuE,GAAU+3B,YAAYw2C,MAAMvuE,GACvCk4B,MAAMpkD,KAAKksB,IAIbovO,IAAIyK,sBAAwB,WAC1BvjW,OAAOma,QAAQsmB,OAAOuwG,UAAUE,eAAiBp9I,OAAOC,KAAK+pE,aAAa3jD,QAAQmxB,oBC9gB7E,MAAM0rB,IAAc,CAGzB4zH,cAAe,GAEf0K,YAAYl2L,GAEV,IAAK0+D,aAAa46B,KAAKhkG,KAAI42B,GAAKA,EAAElsB,KAAIuF,SAASvF,GAAK,OAEpD,MAAMwmC,EAASxmC,EAAG8E,MAAM,oBAClBqjC,EAAO3B,EAAO,GACdrsC,EAASyvC,SAASpD,EAAO,GAAI,IAM9B5lC,OAAO04F,KAAKqzC,KAAKxkG,KAAOvnC,OAAO04F,KAAKqzC,KAAKxkG,GAAQ,IAItD,MAAOn2C,KAAKw5L,cAAgB5qL,OAAO04F,KAAKqzC,KAAKxkG,GAAM5yC,QAAU4E,EAAQyG,OAAO04F,KAAKqzC,KAAKxkG,GAAM3zC,KAAK,GACjGoM,OAAO04F,KAAKqzC,KAAKxkG,GAAMt1C,KAAKuM,MAAMjF,EAASnI,KAAKw5L,iBAAmB,GAAMrxL,EAASnI,KAAKw5L,cACvF5qL,OAAO04F,KAAKszC,aAGdvvC,YAAYr9F,GACV,MAAMwmC,EAASxmC,EAAG8E,MAAM,oBAClBqjC,EAAO3B,EAAO,GACdrsC,EAASyvC,SAASpD,EAAO,GAAI,IAC7B49T,EAAWxjW,OAAO04F,KAAKqzC,KAAKxkG,GAElC,SAAKi8T,GAAYpyW,KAAKw5L,cAAgB44K,EAAS7uW,OAAS4E,IAC6C,KAA7FiqW,EAASvxW,KAAKuM,MAAMjF,EAASnI,KAAKw5L,iBAAmB,GAAMrxL,EAASnI,KAAKw5L,gBAG/E3zH,wBACF,IAAI+0E,EAAY,EAChB,IAAK,MAAMk6C,KAAgBpyL,OAAOW,OAAOuL,OAAO04F,KAAKqzC,MACnD,IAAK,MAAM3Q,KAAW8qD,EACpBl6C,GAAajzF,uBAAuBqiF,GAGxC,OAAO4Q,ICxCEjrG,IAAO,GAEP0kB,IAAmB,CAC9BC,SAAU,EACVo6H,SAAU,EACV2jL,iBAAiB,EACjBC,WAAY,GACZpqM,kBAAmB,GAEfqqM,mBACF,OAAOvyW,KAAKs0D,SAAWt0D,KAAK0uL,UAG1BH,mBACF,OAAO/9B,MAAMC,UAAYzwJ,KAAKuyW,cAAgB,GAAK3jW,OAAOw7C,IAAIrqD,SAI5DyyW,sBACF,MAAMC,EAAchyW,KAAKC,MAAQ,IAAID,KAAK4zD,IAAiBi+S,YAAYz3N,UACvE,OAAOtpI,SAASC,iBAAiB,OAAmBihW,IAGlDC,gBACF,OAAO1yW,KAAKqyW,iBAAmBryW,KAAKwyW,gBAAgBl8V,WAAa,GAGnEq8V,eAAehhK,GAAS,QACtB3xM,KAAKs0D,SAAWq9I,EAAQr9I,SACxBt0D,KAAK0uL,SAAWijB,EAAQjjB,SACxB1uL,KAAKqyW,gBAAkB1gK,EAAQ0gK,gBAC/BryW,KAAKsyW,WAAL,UAAkB3gK,EAAQ2gK,kBAA1B,QAAwC,EACxCtyW,KAAKkoK,kBAAoB,IAAC,UAAIypC,EAAQzpC,yBAAZ,QAAiC,IAC3D,IAAK,MAAM19H,KAAO9nC,OAAOC,KAAK+pE,aAAa8/B,eAA3C,OAA2DxsG,KAAKwqC,GAAL,UAAYmnK,EAAQnnK,UAApB,QAA4B,EACnFxqC,KAAKstG,gBAAkB,IAAGttG,KAAKkoK,kBAAoBxlK,OAAOC,KAAK+pE,aAAa3jD,QAAQmxB,oBACpFma,IAAiBk6H,cAAcrgB,SAASogB,WAAU,GACtDj+B,YAAYjkD,QAGd2lG,gBACE/xM,KAAKs0D,SAAW,EAChBt0D,KAAK0uL,SAAW,EAChB1uL,KAAKqyW,iBAAkB,EACvBryW,KAAKkoK,kBAAoB,GACzB,IAAK,MAAM19H,KAAO9nC,OAAOC,KAAK+pE,aAAa8/B,eAAgBxsG,KAAKwqC,GAAO,GAIzE/oC,cAAckgL,GAAmB,EAAMixL,GACrC,IAAKpiN,MAAMC,SAAU,OACrB,IAAIoiN,EACJ,GAAID,EACFC,EAAaD,OAEb,IACE,MAAM5/J,QAAkBjiD,MAAO,GAAEvhI,gCAAgCghI,MAAM0+C,KAAKlhM,MAC5E6kW,QAAmB7/J,EAAU/hD,OAC7B,MAAO/2H,GAEP,YADAj3B,OAAOiqG,OAAO6kB,MAAM,gCAAiC,KAIrD4vD,GAAoBkxL,EAAWv+S,SAAW,GAAGrxD,OAAOiqG,OAAO1V,KAAK,qCAAsC,KAC1Gx3F,KAAK2yW,eAAeE,IAGtBC,gBACMlkW,OAAOysF,QAAQouD,cAAcc,UAC/BhwI,MAAMgwI,UAAU/vI,OAEhBxa,KAAKu5U,aAIT93U,kBACE,IAAKzB,KAAK0yW,UAIR,YADAzvW,OAAOiqG,OAAO6kB,MAAM,qCAAsC,KAG5D,IAAIjtD,EACJ,IACEA,QAAYisF,MAAO,GAAEvhI,yBAA0B,CAC7CgjL,OAAQ,OACRC,QAAS,CACP,eAAgB,oBAElBroM,KAAM8sJ,KAAKC,UAAU,CAAE+3C,KAAM1+C,MAAM0+C,KAAKlhM,OAE1C,MAAOksB,GAEP,YADAj3B,OAAOiqG,OAAO6kB,MAAM,kCAAmC,KAGzD,MAAM0hF,QAAgB3uI,EAAImsF,OACtBwiD,EAAQpxB,QAASp/K,OAAOiqG,OAAO1V,KAAK,yBAA0B,KAC7Dv0F,OAAOiqG,OAAO6kB,MAAM,0BAA2B,KACpD/xH,KAAK2yW,eAAel/J,EAAQruK,QAKhC,IAAK,MAAMoF,KAAO9nC,OAAOC,KAAK+pE,aAAa8/B,eAAgBn4C,IAAiB7pB,GAAO,EAEnF,MAAMuoU,YAA0BtmU,EAC1BhB,eACF,OAAO4oB,IAAiBk+S,aAGtB7mU,mBACF,OAAO1rC,KAAKyrC,UAAYzrC,KAAK2rC,KAG3B6E,kBACF,MAAM2mD,EAAOn3F,KAAKK,OAAOmwC,YACzB,MAAuB,oBAAT2mD,EAAsBA,IAASA,EAG3CxrD,WACF,MAAMA,EAAO3rC,KAAKK,OAAOsrC,KACzB,MAAuB,oBAATA,EAAsBA,IAASA,EAK3CzW,gBAAY,MACd,iBAAOm/B,IAAiBr0D,KAAKK,OAAOmqC,YAApC,QAA4C,EAG1CtV,cAAUptB,GACPyB,OAAOwG,SAASjI,KACrBusD,IAAiBr0D,KAAKK,OAAOmqC,KAAO1iC,GAGtCqjC,aAAa,UACX,OAAOv8B,OAAO+zC,QAAQoJ,oBAAsB,GAArC,qBAA2C,EAAA/rD,KAAKK,QAAO8qC,kBAAvD,aAA2C,iBAA3C,SAGLshE,eACF,OAAOzsG,KAAKK,OAAOosG,SAGjBumQ,wBACF,OAAO5nU,QAAQprC,KAAKK,OAAO+qD,YAGzB+I,kBACF,OAAKn0D,KAAKgzW,kBACHhzW,KAAKK,OAAO+qD,WAAWiJ,IAAiBk6H,aAAevuL,KAAKk1B,UAAY,GAD3C,GAIlCivQ,eACF,OAAKnkS,KAAKgzW,kBACHhzW,KAAKK,OAAO+qD,WAAWiJ,IAAiBk6H,aAAevuL,KAAKk1B,UAAY,EAAI,GAD/C,GAKlC2vQ,4BACF,OAAK7kS,KAAKgzW,kBACHhzW,KAAKK,OAAO+qD,WAAWprD,KAAKk1B,WADC,GAIlC4vQ,yBACF,OAAK9kS,KAAKgzW,kBACHhzW,KAAKK,OAAO+qD,WAAWprD,KAAKk1B,UAAY,GADX,GAItC8nB,aAAa1V,GAAQ,QACnB,OAAO,aAAAtnC,KAAKK,QAAO28C,oBAAZ,sBAA2B1V,KAAW72B,QAAQ62B,EAAQ,EAAG,GAGpD,iBAAG,MACf,IAAKtnC,KAAK+rC,YAAa,OAAO,EAC9B,GAAIx9B,QAAQq+B,kBAAmB,OAAO,EACtC,GAAI5sC,KAAKK,OAAOusG,iBAAmBnpG,GAAGo5H,WAAWy1B,MAAMC,YAAa,OAAO,EAE3E,MAAM+V,EAAiC,sBAApBtoK,KAAKK,OAAOmqC,IAAZ,UACf2iE,uBAAuBC,uBADR,aACf,EAAwCp/F,QACxCzL,EAGE8/K,EAAU9Y,GAAa3+G,eACnB2+G,GAAalB,iBAAiBroK,KAAKK,OAAOmqC,IAAKxqC,KAAK2rC,KAAM28H,SAC1D6pC,GAAAA,WAAoBnyM,KAAKK,OAAOmqC,IAAK89H,GAC/C,QAAK+Z,IAEDzzK,OAAOw7C,IAAIrqD,SAASmuK,SAASogB,WAAU,GACvCtuL,KAAKK,OAAOusG,iBAAiB5sG,KAAKK,OAAOwsG,aAC7C5pG,OAAOkpC,UACA,IAIJ,MAAM8nB,IAAe28C,oBAC1BlkC,aAAa8/B,eACbnsG,GAAU,IAAI0yW,IAAkB1yW,KAGlCsvC,IAAKm9D,iBAAmB,WACtBohE,SAASogB,WAAU,GACnBge,aAAa,QAGf38J,IAAKq9D,uBAAyB,WAC5BkhE,SAASogB,WAAU,GACnBge,aAAa,QClNf,MAAM2mK,IACJjxW,YAAYgsG,EAAQ3tG,GAClBL,KAAKujT,QAAUv1M,EACfhuG,KAAKK,OAASA,EAGZkP,WACF,OAAOvP,KAAKK,OAAOkP,KAGjBq/B,aACF,OAAO5uC,KAAKK,OAAOuuC,OAGjB8sK,0BACF,OAAO17M,KAAKK,OAAOyuG,OAASvgG,QAAQC,WAAaD,QAAQo1M,cAGvD50G,cACF,OAAO/uG,KAAKK,OAAO0uG,QAGjBmuE,eACF,OAAIzrI,SAASC,YAAaG,MAAMu8B,qBACgD,KAAvEx/D,OAAOysF,QAAQyvD,iBAAiB9qJ,KAAKujT,QAAQv1S,IAAO,GAAKhO,KAAKgO,KACrEhO,KAAK+uG,SAGL5jE,iBACF,YAAiC5oC,IAA1BvC,KAAKK,OAAOmnC,WAA2BxnC,KAAKK,OAAOmnC,YAGxDomI,kBACF,OAAQ5tK,KAAK07M,sBAAwB17M,KAAK+qE,SAAW/qE,KAAKk9K,UAAYl9K,KAAKmrC,YAGzEs9K,sBACF,OAAO75M,OAAOi/F,iBAAiBxhE,IAAIrsC,KAAKujT,QAAQ/4Q,IAAMxqC,KAAKwqC,KAGzDA,UACF,OAAOxqC,KAAKK,OAAOmqC,IAGjBx8B,SACF,OAAOhO,KAAKK,OAAO2N,GAGrBwM,KAAKqvL,GACH7pM,KAAKujT,QAAQ/oS,KAAKqvL,EAAQ7pM,MAG5BunU,YACEvnU,KAAKujT,QAAQgkB,YACb34T,OAAOysF,QAAQyvD,iBAAiB9qJ,KAAKujT,QAAQv1S,OAAS,GAAKhO,KAAKgO,IAGlE84T,mBACM9mU,KAAKujT,QAAQv1S,KAAOkjH,IAAKvoH,QAAQqF,IAAMhO,KAAKgO,KAAOkjH,IAAKvoH,QAAQwoH,eAAenjH,KACnFY,OAAOysF,QAAQyvD,iBAAiB9qJ,KAAKujT,QAAQv1S,KAAQ,GAAKhO,KAAKgO,GAE/DklW,OAGEnoS,aACF,OAAOtnE,GAAG+2E,KAAK+kB,MAAQv/F,KAAKujT,QAAQ/4Q,KAAO/mC,GAAG+2E,KAAK4oG,SAAWpjL,KAAKwqC,KAIvE,SAAS2oU,IAAmBnhC,EAAOhjO,GAAS,MAC1C,iBAAOA,EAAQxhG,MAAKqK,GAAKA,EAAE7J,KAAOY,OAAOysF,QAAQ2vD,eAAegnL,YAAhE,QAA2EhjO,EAAQ,GAGrF,SAASokQ,IAAoBpkQ,EAAS6+D,GACpC,MAAMwlM,EAAgBrkQ,EAAQpsG,QAAO28F,GAAOA,EAAIquE,cAC1ChlK,EAAeyqW,EAAcprW,QAAQ4lK,GACrC9rI,EAAYt+B,GAAG+2E,KAAKipD,WAAa,EAAI,EAC3C,IAAIrL,EAAWxvH,EAAem5B,EAG9B,OAFAq2F,EAAWA,EAAW,EAAIi7O,EAAc9vW,OAAS,EAAI60H,EACrDA,EAAWA,EAAWi7O,EAAc9vW,OAAS,EAAI,EAAI60H,EAC9Ci7O,EAAcj7O,GAGvB,MAAMk7O,IACJtxW,YAAY3B,GACVL,KAAKK,OAASA,EACdL,KAAKuzW,UAAW,EAChB,MAAMvkQ,EAAU,GAChB,IAAK,MAAMwkQ,KAAgBnzW,EAAO2uG,QAAS,CACzC,MAAMo0E,EAAS,IAAI6vL,IAAYjzW,KAAMwzW,GACrCxzW,KAAKwzW,EAAahpU,KAAO44I,EACzBp0E,EAAQxsG,KAAK4gL,GAEfpjL,KAAKgvG,QAAUA,EACfhvG,KAAKmxH,eAAiBgiP,IAAmBnzW,KAAKgO,GAAIghG,GAGhDz/F,WACF,OAAOvP,KAAKK,OAAOkP,KAGjBi7B,UACF,OAAOxqC,KAAKK,OAAOmqC,IAGjBx8B,SACF,OAAOhO,KAAKK,OAAO2N,GAGjB0tM,0BACF,OAAO17M,KAAKK,OAAOyuG,OAASvgG,QAAQC,WAAaD,QAAQo1M,cAGvD50G,cACF,OAAO/uG,KAAKK,OAAO0uG,QAGjBmuE,eACF,GAAIzrI,SAASC,WAAaG,MAAMu8B,mBAAoB,OAAO,EAC3D,MAAMqlS,EAAmBzzW,KAAKgvG,QAAQvhG,MAAK4rB,GAAKA,EAAEu0I,cAClD,OAA6D,KAAnDh/J,OAAOysF,QAAQwvD,cAAiB,GAAK7qJ,KAAKgO,MAAgBylW,IAAqBzzW,KAAK+uG,QAG5F5jE,iBACF,YAAiC5oC,IAA1BvC,KAAKK,OAAOmnC,WAA2BxnC,KAAKK,OAAOmnC,YAGxDomI,kBACF,OAAQ5tK,KAAK07M,sBAAwB17M,KAAK+qE,SAAW/qE,KAAKk9K,UAAYl9K,KAAKmrC,YAGzE4/B,aACF,OAAOtnE,GAAG+2E,KAAK+kB,MAAQv/F,KAAKwqC,IAG1Bi+K,sBACF,OAAOzoN,KAAKgvG,QAAQvhG,MAAK8xF,GAAOA,EAAIkpH,kBAGtCjuM,KAAKqvL,EAAQzmB,GACX,IAAKymB,IAAWj7L,OAAOysF,QAAQosD,uBAAyBulB,MAAMjiG,OAAQ,YACvDxoE,IAAX6gL,GACG3xI,SAASC,WAAW0xI,EAAOmkJ,YAChCvnU,KAAKmxH,eAAiBiyD,GACb3/K,GAAG+2E,KAAK+kB,MAAQv/F,KAAKwqC,KAAO/mC,GAAG+2E,KAAKlgE,aAAeuvL,EAC5D7pM,KAAKmxH,eAAiBiiP,IAAoBpzW,KAAKgvG,QAAShvG,KAAKmxH,gBAE7DnxH,KAAKmxH,eAAiBgiP,IAAmBnzW,KAAKgO,GAAIhO,KAAKgvG,SAGpDhvG,KAAKmxH,eAAehmF,YAAYnrC,KAAK0zW,kBACrC1zW,KAAKmxH,eAAey8C,aAAa5tK,KAAK2zW,mBAE3ClwW,GAAG+2E,KAAK+kB,IAAMv/F,KAAKwqC,IACnB/mC,GAAG+2E,KAAK4oG,OAASpjL,KAAKmxH,eAAe3mF,IACrC,MAAMopU,EAAqB5zW,KAAKwqC,IAAMxqC,KAAKmxH,eAAe3mF,IACtD57B,OAAOi/F,iBAAiBxhE,IAAIunU,IAAqBhlW,OAAOi/F,iBAAiBvhE,OAAOsnU,GAEhF/pK,GAAQtvL,MAAM4yJ,UAClBprK,SAASe,SAASY,WAAW+D,YAAazH,KAAMA,KAAKmxH,gBAGvDo2M,YACE34T,OAAOysF,QAAQwvD,iBAAmB,GAAK7qJ,KAAKgO,IAG9C84T,mBACM9mU,KAAKgO,KAAOkjH,IAAKvoH,QAAQqF,KAC7BY,OAAOysF,QAAQwvD,eAAkB,GAAK7qJ,KAAKgO,GAE3CklW,OAGFS,mBACE3zW,KAAKmxH,eAAiBnxH,KAAKgvG,QAAQxhG,MAAK+xF,GAAOA,EAAIquE,mBACvBrrK,IAAxBvC,KAAKmxH,iBACPnxH,KAAKmxH,eAAiBnxH,KAAKgvG,QAAQ,GACnChvG,KAAKmxH,eAAeo2M,aAIxBmsC,kBACE1zW,KAAKmxH,eAAiBnxH,KAAKgvG,QAAQxhG,MAAK+xF,GAAOA,EAAIp0D,cAIhD,MAAM0/B,IAAM6B,aAAa+N,KAAKtuE,aACnC9L,GAAUA,EAAOmqC,MACjBnqC,GAAU,IAAIizW,IAASjzW,KAGZ6wH,IAAQ,WACnB,MAAO,CACL7kE,IAAK3pD,OAAOW,OAAOwnE,KACfliE,cACF,OAAOuoH,IAAK7kE,IAAI7+C,MAAK+xF,GAAOA,EAAIx0B,UAElCk+I,QAAS,CACPp+I,IAAImtE,WACJntE,IAAIwwB,QACJxwB,IAAIC,WACJD,IAAII,aACJJ,IAAI6hG,WACJ7hG,IAAIwsB,WACJxsB,IAAIniD,SACJmiD,IAAIhlB,SACJglB,IAAI9hD,QACJ8hD,IAAIh8D,WACJg8D,IAAI7Q,QACJ6Q,IAAIl7B,MAENy/K,OAAQ,CACNvkJ,IAAImtE,WACJntE,IAAI6hG,WACJ7hG,IAAIwsB,WACJxsB,IAAIniD,SACJmiD,IAAIhlB,SACJglB,IAAI9hD,QACJ8hD,IAAIh8D,WACJg8D,IAAI7Q,QACJ6Q,IAAII,aACJJ,IAAIC,WACJD,IAAIwwB,QACJxwB,IAAIl7B,MAENkoL,UAAW,CACThtJ,IAAImtE,WACJntE,IAAI6hG,WACJ7hG,IAAII,aACJJ,IAAIniD,SACJmiD,IAAIwsB,WACJxsB,IAAIhlB,SACJglB,IAAI9hD,QACJ8hD,IAAIh8D,WACJg8D,IAAI7Q,QACJ6Q,IAAIwwB,QACJxwB,IAAIC,WACJD,IAAIl7B,MAEFg+H,sBACF,MAAyB,UAAlBlqK,GAAG+2E,KAAK+sE,OAAqBvnJ,KAAKovN,OAA2B,WAAlB3rN,GAAG+2E,KAAK+sE,OAAsBvnJ,KAAKipN,QAAUjpN,KAAK63N,YAjDrF,GAsDfq7I,IAAyC,KAEzChiP,IAAK7kE,IAAIzpD,QAAOy2B,GAAKA,EAAE8R,YAAc9R,EAAE01E,UAASrhG,OAAM2rB,GAAKA,EAAE6jJ,YAAW9lI,kBAAkB,IAAI7L,UAGpGxpC,SAASiB,MAAMd,GAAGwB,WAAW+D,aAAa,KACxC,MAAMsgJ,EAAU72B,IAAKvoH,QAAQqF,GAC7BY,OAAOysF,QAAQ0vD,YAAchD,EAC7Bn5I,OAAOysF,QAAQ2vD,eAAejD,GAAW72B,IAAKvoH,QAAQwoH,eAAenjH,MC7PvE,MAAM6lW,IACJ7xW,YAAY3B,GAEV,GADAL,KAAKK,OAASA,EACVA,EAAOuqC,OACT,IAAK,MAAMzoC,KAAS9B,EAAOuqC,OACzB7oC,SAASiB,MAAMd,GAAGC,EAAOnC,KAAKgyF,WAAWgvF,KAAKhhL,MAAOA,MAKvD8zW,gBACF,OAAOllW,OAAOw3I,6BAAgC,GAAKpmJ,KAAKK,OAAO2N,GAGjEgkF,aACE,IAAKhyF,KAAKK,OAAOmnC,aAAexnC,KAAK8zW,UAAW,OAChD,MAAMC,EAAiB,GAAE7iP,KAAKvoH,QAAQ6hC,MAAM0mF,KAAKvoH,QAAQwoH,eAAe3mF,MACxExqC,KAAKK,OAAO0tG,gBAAgBzqG,KAAI+1B,GAAKA,EAAE20E,OAAS30E,EAAEkmE,MAC/C9qF,SAAQ8qF,IACHA,IAAQw0Q,GAAenlW,OAAOi/F,iBAAiBzkG,IAAIm2F,MAE3D3wF,OAAOw3I,8BAAgC,GAAKpmJ,KAAKK,OAAO2N,GAGxD,IAAK,MAAM+4G,KAAY/mH,KAAKK,OAAO0tG,gBAAiB,CAClD,MAAMxO,EAAM2xB,KAAK7kE,IAAI7+C,MAAK6rB,GAAKA,EAAEh5B,OAAOmqC,MAAQu8E,EAAS/Y,SACnDo1E,EAAS7jF,EAAIyP,QAAQxhG,MAAK6rB,GAAKA,EAAEmR,MAAQu8E,EAASxnB,MACxDA,EAAIgoO,YACJnkJ,EAAOmkJ,aAKXx1O,eACEnjF,OAAOw3I,+BAAiC,GAAK,GAAKpmJ,KAAKK,OAAO2N,IAC9DhO,KAAKK,OAAO0tG,gBAAgBzqG,KAAI+1B,GAAKA,EAAE20E,OAAS30E,EAAEkmE,MAC/C9qF,SAAQ8qF,GAAO3wF,OAAOi/F,iBAAiBvhE,OAAOizD,MAI9C,MAAM1N,IAAkB+e,oBAC7BlkC,aAAamhC,kBACbxtG,GAAU,IAAIwzW,IAAqBxzW,KC5B9B,MAAM8rU,IACXnqU,YAAYyiI,EAAQuvO,GAGlB,OAFAh0W,KAAKylC,MAAQ,GACbzlC,KAAK64C,SAAW,GACRm7T,GACN,IAAK,WACHh0W,KAAKi0W,gBAAgBxvO,GACrB,MACF,IAAK,mBACHzkI,KAAKk0W,wBAAwBzvO,GAC7B,MACF,IAAK,mBACHzkI,KAAKm0W,wBAAwB1vO,GAC7B,MACF,IAAK,8BACHzkI,KAAKo0W,aAAa3vO,GAClB,MACF,IAAK,kBACHzkI,KAAKq0W,uBAAuB5vO,GAC5B,MACF,QACE,MAAM,IAAIn3H,MAAO,8BAA6B0mW,wBAYpDhlW,OAAOylD,GACL,MAAmB,kBAARA,EAAyB5zD,KAAK05B,MAAMk6B,GAC3CA,EAAIp9C,IAAI,KAAco9C,EAAI/kD,WAAWD,QAAQ,GACzC,GAAEglD,EAAI3qD,SAAS2F,QAAQ,MAAMglD,EAAI1qD,WAY3CuqW,cAAc7vO,GACZ,MAAM8vO,EAAY9vO,EAAO+vO,WAAa,UAAY,GAClD,GAAI/vO,EAAOkoM,WAAY,CACrB,MAAM8nC,EAAY7lW,OAAO2pC,UAAUC,QAAQl1C,KAAI,CAACq2B,EAAGn4B,KAAJ,QAAC,UAAem4B,GAAhB,IAAmB3rB,GAAIxM,EAAI,MACvEgM,MAAKmsB,GAAMA,EAAEpqB,OAASk1H,EAAOkoM,YAAchzS,EAAE3rB,KAAOzE,OAAOk7H,EAAOkoM,cAC/Dt0R,EAASo8T,EAAUllW,KAAQ,QAAOklW,EAAUllW,OAAU,MAAKklW,EAAUzmW,KAC3EhO,KAAK00W,cAAiB,UAASH,UAAkBl8T,IACjDr4C,KAAK20W,cAAgB,IAAIx8T,cAAcs8T,EAAUpsS,cAEjDroE,KAAK00W,cAAiB,UAASH,cAAsB9vO,EAAO4nM,cAC5DrsU,KAAK20W,cAAgB,IAAIx8T,cAAcssF,EAAO4nM,aAE5CrsU,KAAK20W,cAAcr3B,eAAe/5U,OAAS,GAAGvD,KAAK64C,SAASr2C,KAAK,mCACjExC,KAAK20W,cAAcpzP,iBAAiBh+G,OAASvD,KAAK20W,cAAc7sP,gBAAgBvkH,SAClFvD,KAAK64C,SAASr2C,KAAK,oFACdiiI,EAAO+vO,YAAYx0W,KAAK64C,SAASr2C,KAAM,wEAWhDoyW,mBAAmBxkR,EAAMtoF,GACvB,OAAQsoF,GACN,IAAK,OACH,MAAQ,GAAEpwF,KAAKgP,OAAOlH,eACxB,IAAK,OACH,MAAQ,GAAE9H,KAAKgP,OAAOlH,aACxB,QACE,MAAM,IAAIwF,MAAO,+BAA8B8iF,oCAerD6jR,gBAAgBxvO,GACdzkI,KAAKylC,MAAMjjC,KAAK,yBAChBxC,KAAKylC,MAAMjjC,KAAM,yCAAwCwM,OAAOy1H,EAAOu2C,cACvEh7K,KAAKs0W,cAAc7vO,GACnBzkI,KAAKylC,MAAMjjC,KAAM,iBAAgBxC,KAAK40W,mBAAmBnwO,EAAOowO,YAAapwO,EAAOqwO,iBACpF90W,KAAKylC,MAAMjjC,KAAM,iBAAgBxC,KAAK40W,mBAAmBnwO,EAAOswO,aAActwO,EAAOuwO,kBACrFh1W,KAAKylC,MAAMjjC,KAAM,cAAaxC,KAAKgP,OAAOy1H,EAAOu2C,cACjDh7K,KAAKylC,MAAMjjC,KAAM,IAAGxC,KAAK00W,iBACzB10W,KAAKylC,MAAMjjC,KAAK,mBAChBxC,KAAKylC,MAAMjjC,KAAK,kBAChBxC,KAAKylC,MAAMjjC,KAAK,KAWlB0xW,wBAAwBzvO,GACtBzkI,KAAKylC,MAAMjjC,KAAK,iCAChBxC,KAAKylC,MAAMjjC,KAAM,iDAAgDwM,OAAOy1H,EAAOx9E,iBAC/EjnD,KAAKs0W,cAAc7vO,GACnBzkI,KAAKylC,MAAMjjC,KAAKxC,KAAK00W,eACrB10W,KAAKylC,MAAMjjC,KAAK,sBAIhB,MAAMyyW,EAAgB1rW,OAAO2O,UAAY04B,SAASI,eAAeugD,cAAc7hF,WAAa,EAC5F1P,KAAKylC,MAAMjjC,KAAM,iBAAgBxC,KAAKgP,OACpChG,QAAQ6U,IAAIo3V,EAAe,EAAIxwO,EAAOywO,mCACxCl1W,KAAKylC,MAAMjjC,KAAM,qBAAoBxC,KAAKgP,OAAOy1H,EAAOx9E,eACxDjnD,KAAKylC,MAAMjjC,KAAK,qBAclB2xW,wBAAwB1vO,GAOtB,GANAzkI,KAAKylC,MAAMjjC,KAAK,iCAChBxC,KAAKylC,MAAMjjC,KAAM,iDAAgDwM,OAAOy1H,EAAO/4E,iBAC/E1rD,KAAKs0W,cAAc7vO,GACnBzkI,KAAKylC,MAAMjjC,KAAKxC,KAAK00W,eACrB10W,KAAKylC,MAAMjjC,KAAK,qBAChBxC,KAAKylC,MAAMjjC,KAAM,oBACbiiI,EAAO0wO,SAAU,CACnB,MAAMC,EAASp1W,KAAK20W,cAAcpzP,iBAAiBhuG,SAASiyC,UAAU,MACjE4vT,GAAQp1W,KAAK64C,SAASr2C,KAAM,mHACHw2C,YAAY,KAAKzpC,SAC/C,MAAM62R,EAAWgvE,EAAS,GAAM,IAChCp1W,KAAKylC,MAAMjjC,KAAK,6FAChBxC,KAAKylC,MAAMjjC,KAAM,qBAAoBxC,KAAKgP,OAAOy1H,EAAO/4E,WAAWv0C,UAAUivR,GAAW,MACxFpmS,KAAKylC,MAAMjjC,KAAK,iBAEhBxC,KAAKylC,MAAMjjC,KAAM,qBAAoBxC,KAAKgP,OAAOy1H,EAAO/4E,WAAY,MAexE0oT,aAAa3vO,GACXzkI,KAAKylC,MAAMjjC,KAAK,4CAChBxC,KAAKylC,MAAMjjC,KAAM,2DAA0DiiI,EAAOt1E,QAElFnvD,KAAKylC,MAAMjjC,KAAK,mBAGhBxC,KAAKs0W,cAAc7vO,GACnBzkI,KAAKylC,MAAMjjC,KAAKxC,KAAK00W,eACrB,MAAM9sP,EAAO5nH,KAAK20W,cACF,IAAZ/sP,EAAKz4D,IACPnvD,KAAKylC,MAAMjjC,KAAM,aAAYiiI,EAAOt1E,MAE/By4D,EAAK43O,gBAAgBh6S,UAAUwN,kBAAkByxE,EAAOt1E,KAAK,IAChEnvD,KAAK64C,SAASr2C,KAAK,mDAEZolH,EAAKz4D,KAAOs1E,EAAOt1E,IAAInvD,KAAK64C,SAASr2C,KAAK,4DAIrDxC,KAAKylC,MAAMjjC,KAAM,iBAAgBxC,KAAK40W,mBAAmBnwO,EAAOowO,YAAapwO,EAAOqwO,iBACpF90W,KAAKylC,MAAMjjC,KAAM,qBACZgjD,UAAUwN,kBAAkByxE,EAAOt1E,KAAKnvD,KAAK64C,SAASr2C,KAAM,wCACjExC,KAAKylC,MAAMjjC,KAAM,YAAWiiI,EAAOt1E,MAE/Bs1E,EAAOh+E,YAAc,GAAGzmD,KAAK64C,SAASr2C,KAAM,qCAAoC6M,UAAU,YAC9FrP,KAAKylC,MAAMjjC,KAAM,+BAA8BiiI,EAAOh+E,eACtDzmD,KAAKylC,MAAMjjC,KAAK,YAYlB6xW,uBAAuB5vO,GACrBzkI,KAAKylC,MAAMjjC,KAAK,gCAChBxC,KAAKylC,MAAMjjC,KAAM,6CACjBxC,KAAKs0W,cAAc7vO,GACd,CAAC,IAAK,IAAK,IAAK,KAAKh3H,MAAKoK,GAAK7X,KAAK20W,cAAcpzP,iBAAiBhuG,SAASiyC,UAAU3tC,OACzF7X,KAAK64C,SAASr2C,KAAK,8CAErBxC,KAAKylC,MAAMjjC,KAAM,qBACjBxC,KAAKylC,MAAMjjC,KAAM,iBAAgBxC,KAAK40W,mBAAmBnwO,EAAOswO,aAActwO,EAAOuwO,kBACrFh1W,KAAKylC,MAAMjjC,KAAM,oBAAmBxC,KAAKgP,OAAOw2C,UAAU38B,SAASi5D,kCACnE9hF,KAAKylC,MAAMjjC,KAAM,IAAGxC,KAAK00W,iBACzB10W,KAAKylC,MAAMjjC,KAAK,mBAChBxC,KAAKylC,MAAMjjC,KAAK,kBAChBxC,KAAKylC,MAAMjjC,KAAK,KAChBxC,KAAKylC,MAAMjjC,KAAK,mBAGdujH,aACF,OAAO/lH,KAAKylC,MAAMp0B,KAAK,OCrP3B,SAASgkW,IAAgB3mN,GACvB,IAAK,MAAMlkH,KAAOkkH,EAAQ,CACxB,GAAY,YAARlkH,EAEF,SAEF,MAAM1iC,EAAQ4mJ,EAAOlkH,GACf8qU,EAAgB11W,OAAO4qC,GAC7B,QAAsBjoC,IAAlB+yW,EACF,KAAO,YAAW9qU,qCAGpB5qC,OAAO4qC,GAAO1iC,GCZX,SAASytW,MACd,GAAIzkN,qBACF,OAGF,MAAMwC,EAAM,cACZ,IAAI3qJ,EAEJ,SAASo2H,IACPgyB,MAAMuC,EAAK,CAAEk/C,OAAQ,QAClBjxM,MAAKyvJ,GAAYA,EAASC,SAC1B1vJ,MAAK0vJ,IAAQ,WACC1uJ,IAAT0uJ,IAGJtoJ,EAAO,UAAGA,SAAH,QAAcsoJ,EAAKk2L,IACtBx+U,IAAYsoJ,EAAKk2L,KAIrB5sU,MAAMjC,QAAQkC,KAEX,gEAAGy2I,EAAK34I,iCACT,CACE5D,SAAUw8I,cACVw1L,aAAa,GAEf,OAKRxsU,YAAY6kH,EAAO,KDfrBs2O,IAAgBG,GAGhBH,IAAgBI,GAMhBJ,IAAgBlnI,GAGhBknI,IAAgBngO,GAGhBmgO,IAAgBjnI,GAGhBinI,IAAgBl6D,GAKhBk6D,IAAgBK,GAGhBL,IAAgB3tQ,GErCZ62G,MAAgBpnI,KAChB1+D,GAAK88V,QCPLI,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBtzW,IAAjBuzW,EACH,OAAOA,EAAaC,QAGrB,IAAI/iN,EAAS2iN,EAAyBE,GAAY,CACjD7nW,GAAI6nW,EACJG,QAAQ,EACRD,QAAS,IAUV,OANAE,EAAoBJ,GAAUjhW,KAAKo+I,EAAO+iN,QAAS/iN,EAAQA,EAAO+iN,QAASH,GAG3E5iN,EAAOgjN,QAAS,EAGThjN,EAAO+iN,QAIfH,EAAoB/6U,EAAIo7U,E,MC5BxBL,EAAoBM,KAAO,I,SCA3B,IAAIC,EAAW,GACfP,EAAoBQ,EAAI,CAACjhW,EAAQkhW,EAAUj0W,EAAI46K,KAC9C,IAAGq5L,EAAH,CAMA,IAAIC,EAAejyT,EAAAA,EACnB,IAAS7iD,EAAI,EAAGA,EAAI20W,EAAS5yW,OAAQ/B,IAAK,CACrC60W,EAAWF,EAAS30W,GAAG,GACvBY,EAAK+zW,EAAS30W,GAAG,GACjBw7K,EAAWm5L,EAAS30W,GAAG,GAE3B,IAJA,IAGI+0W,GAAY,EACP31W,EAAI,EAAGA,EAAIy1W,EAAS9yW,OAAQ3C,MACpB,EAAXo8K,GAAsBs5L,GAAgBt5L,IAAat6K,OAAOC,KAAKizW,EAAoBQ,GAAG1oW,OAAO88B,GAASorU,EAAoBQ,EAAE5rU,GAAK6rU,EAASz1W,MAC9Iy1W,EAAS9qW,OAAO3K,IAAK,IAErB21W,GAAY,EACTv5L,EAAWs5L,IAAcA,EAAet5L,IAG7C,GAAGu5L,EAAW,CACbJ,EAAS5qW,OAAO/J,IAAK,GACrB,IAAI26B,EAAI/5B,SACEG,IAAN45B,IAAiBhnB,EAASgnB,IAGhC,OAAOhnB,EAzBN6nK,EAAWA,GAAY,EACvB,IAAI,IAAIx7K,EAAI20W,EAAS5yW,OAAQ/B,EAAI,GAAK20W,EAAS30W,EAAI,GAAG,GAAKw7K,EAAUx7K,IAAK20W,EAAS30W,GAAK20W,EAAS30W,EAAI,GACrG20W,EAAS30W,GAAK,CAAC60W,EAAUj0W,EAAI46K,K,SCJ/B44L,EAAoB7hW,EAAKi/I,IACxB,IAAIqrJ,EAASrrJ,GAAUA,EAAOwjN,WAC7B,IAAOxjN,EAAO,WACd,IAAM,EAEP,OADA4iN,EAAoBj0U,EAAE08Q,EAAQ,CAAE50S,EAAG40S,IAC5BA,I,SCLRu3D,EAAoBj0U,EAAI,CAACo0U,EAASU,KACjC,IAAI,IAAIjsU,KAAOisU,EACXb,EAAoB/hW,EAAE4iW,EAAYjsU,KAASorU,EAAoB/hW,EAAEkiW,EAASvrU,IAC5E9nC,OAAO+Q,eAAesiW,EAASvrU,EAAK,CAAE+hH,YAAY,EAAM75I,IAAK+jW,EAAWjsU,O,SCJ3EorU,EAAoBnjV,EAAI,WACvB,GAA0B,kBAAfikV,WAAyB,OAAOA,WAC3C,IACC,OAAO12W,MAAQ,IAAI4kH,SAAS,cAAb,GACd,MAAO1qF,GACR,GAAsB,kBAAXt6B,OAAqB,OAAOA,QALjB,I,SCAxBg2W,EAAoB/hW,EAAI,CAACqB,EAAKyF,IAAUjY,OAAOkF,UAAU6N,eAAeb,KAAKM,EAAKyF,I,SCClFi7V,EAAoBz5U,EAAK45U,IACH,qBAAXY,QAA0BA,OAAOC,aAC1Cl0W,OAAO+Q,eAAesiW,EAASY,OAAOC,YAAa,CAAE9uW,MAAO,WAE7DpF,OAAO+Q,eAAesiW,EAAS,aAAc,CAAEjuW,OAAO,M,SCLvD8tW,EAAoBiB,IAAO7jN,IAC1BA,EAAO3qC,MAAQ,GACV2qC,EAAO/3C,WAAU+3C,EAAO/3C,SAAW,IACjC+3C,I,SCER,IAAI8jN,EAAkB,CACrB,IAAK,GAaNlB,EAAoBQ,EAAEx1W,EAAKm2W,GAA0C,IAA7BD,EAAgBC,GAGxD,IAAIC,EAAuB,CAACC,EAA4B7xU,KACvD,IAKIywU,EAAUkB,EALVV,EAAWjxU,EAAK,GAChB8xU,EAAc9xU,EAAK,GACnB+xU,EAAU/xU,EAAK,GAGI5jC,EAAI,EAC3B,GAAG60W,EAAS5oW,MAAMO,GAAgC,IAAxB8oW,EAAgB9oW,KAAa,CACtD,IAAI6nW,KAAYqB,EACZtB,EAAoB/hW,EAAEqjW,EAAarB,KACrCD,EAAoB/6U,EAAEg7U,GAAYqB,EAAYrB,IAGhD,GAAGsB,EAAS,IAAIhiW,EAASgiW,EAAQvB,GAGlC,IADGqB,GAA4BA,EAA2B7xU,GACrD5jC,EAAI60W,EAAS9yW,OAAQ/B,IACzBu1W,EAAUV,EAAS70W,GAChBo0W,EAAoB/hW,EAAEijW,EAAiBC,IAAYD,EAAgBC,IACrED,EAAgBC,GAAS,KAE1BD,EAAgBT,EAAS70W,IAAM,EAEhC,OAAOo0W,EAAoBQ,EAAEjhW,IAG1BiiW,EAAqBpvW,KAAK,gBAAkBA,KAAK,iBAAmB,GACxEovW,EAAmB3iW,QAAQuiW,EAAqBh2L,KAAK,KAAM,IAC3Do2L,EAAmB50W,KAAOw0W,EAAqBh2L,KAAK,KAAMo2L,EAAmB50W,KAAKw+K,KAAKo2L,K,GC/CvF,IAAIC,EAAsBzB,EAAoBQ,OAAE7zW,EAAW,CAAC,MAAM,IAAOqzW,EAAoB,QAC7FyB,EAAsBzB,EAAoBQ,EAAEiB,I","sources":["webpack:///./src/core/async-utils.js","webpack:///./src/core/event-hub.js","webpack:///./src/core/extensions.js","webpack:///./src/core/format.js","webpack:///./src/core/polyfill.js","webpack:///./src/core/timespan.js","webpack:///./src/shims.js","webpack:///./src/env.js","webpack:///./src/core/crash.js","webpack:///./src/core/constants.js","webpack:///./src/core/math.js","webpack:///./src/core/game-mechanics/effect.js","webpack:///./src/core/game-mechanics/effects.js","webpack:///./src/core/game-mechanics/game-mechanic.js","webpack:///./src/core/game-mechanics/bit-upgrade-state.js","webpack:///./src/core/game-mechanics/puchasable.js","webpack:///./src/core/game-mechanics/set-purchasable.js","webpack:///./src/core/game-mechanics/bit-purchasable.js","webpack:///./src/core/game-mechanics/rebuyable.js","webpack:///./src/core/word-shift.js","webpack:///./src/core/garble-text.js","webpack:///./src/core/secret-formula/reality/glyph-types.js","webpack:///./src/core/secret-formula/reality/perks.js","webpack:///./src/components/tabs/autobuyers/AutobuyerInput.vue?f93b","webpack:///src/components/tabs/autobuyers/AutobuyerInput.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerInput.vue?e9d8","webpack:///./src/components/tabs/autobuyers/AutobuyerInput.vue","webpack:///./src/core/secret-formula/script-templates.js","webpack:///./src/core/secret-formula/reality/automator.js","webpack:///./src/core/secret-formula/reality/glyph-cosmetics.js","webpack:///./src/core/secret-formula/reality/glyph-effects.js","webpack:///./src/core/secret-formula/reality/glyph-sacrifices.js","webpack:///./src/core/secret-formula/reality/imaginary-upgrades.js","webpack:///./src/core/secret-formula/reality/reality-upgrades.js","webpack:///./src/core/secret-formula/reality/index.js","webpack:///./src/core/secret-formula/multiplier-tab/icons.js","webpack:///./src/core/secret-formula/multiplier-tab/antimatter.js","webpack:///./src/core/player-progress.js","webpack:///./src/core/secret-formula/multiplier-tab/helper-functions.js","webpack:///./src/core/secret-formula/multiplier-tab/antimatter-dimensions.js","webpack:///./src/core/secret-formula/multiplier-tab/dilated-time.js","webpack:///./src/core/secret-formula/multiplier-tab/eternities.js","webpack:///./src/core/secret-formula/mending/corruption.js","webpack:///./src/core/secret-formula/multiplier-tab/eternity-points.js","webpack:///./src/core/secret-formula/multiplier-tab/galaxies.js","webpack:///./src/core/secret-formula/multiplier-tab/gamespeed.js","webpack:///./src/core/secret-formula/multiplier-tab/general.js","webpack:///./src/core/secret-formula/multiplier-tab/infinities.js","webpack:///./src/core/secret-formula/multiplier-tab/infinity-dimensions.js","webpack:///./src/core/secret-formula/multiplier-tab/infinity-points.js","webpack:///./src/core/secret-formula/multiplier-tab/replicanti.js","webpack:///./src/core/secret-formula/multiplier-tab/tachyon-particles.js","webpack:///./src/core/secret-formula/multiplier-tab/tickspeed.js","webpack:///./src/core/secret-formula/multiplier-tab/time-dimensions.js","webpack:///./src/core/corruption.js","webpack:///./src/core/secret-formula/multiplier-tab/score.js","webpack:///./src/core/secret-formula/multiplier-tab/values.js","webpack:///./src/core/secret-formula/multiplier-tab/tree.js","webpack:///./src/core/secret-formula/achievements/normal-achievements.js","webpack:///./src/core/secret-formula/achievements/secret-achievements.js","webpack:///./src/core/secret-formula/achievements/index.js","webpack:///./src/core/secret-formula/away-progress-types.js","webpack:///./src/core/secret-formula/catchup-resources.js","webpack:///./src/core/secret-formula/celestials/navigation.js","webpack:///./src/core/secret-formula/celestials/navigation-sigils/final-sigil.js","webpack:///./src/core/secret-formula/celestials/navigation-sigils/galaxy-icon.js","webpack:///./src/core/secret-formula/celestials/alchemy.js","webpack:///./src/core/secret-formula/celestials/effarig.js","webpack:///./src/core/secret-formula/celestials/enslaved.js","webpack:///./src/core/secret-formula/celestials/galaxy-generator.js","webpack:///./src/core/secret-formula/celestials/pelle-upgrades.js","webpack:///./src/core/secret-formula/celestials/perk-shop.js","webpack:///./src/core/secret-formula/celestials/ra.js","webpack:///./src/core/secret-formula/celestials/rifts.js","webpack:///./src/core/secret-formula/celestials/singularity-milestones.js","webpack:///./src/core/secret-formula/celestials/strikes.js","webpack:///./src/core/secret-formula/celestials/teresa.js","webpack:///./src/core/secret-formula/celestials/quotes/destroyer.js","webpack:///./src/core/secret-formula/celestials/quotes/effarig.js","webpack:///./src/core/secret-formula/celestials/quotes/enslaved.js","webpack:///./src/core/secret-formula/celestials/quotes/laitela.js","webpack:///./src/core/secret-formula/celestials/quotes/pelle.js","webpack:///./src/core/secret-formula/celestials/quotes/ra.js","webpack:///./src/core/secret-formula/celestials/quotes/teresa.js","webpack:///./src/core/secret-formula/celestials/quotes/v.js","webpack:///./src/core/secret-formula/celestials/quotes/kohler.js","webpack:///./src/core/secret-formula/celestials/quotes/index.js","webpack:///./src/core/secret-formula/celestials/v.js","webpack:///./src/core/currency.js","webpack:///./src/core/secret-formula/celestials/ra-upgrades.js","webpack:///./src/core/secret-formula/celestials/index.js","webpack:///./src/core/secret-formula/challenges/eternity-challenges.js","webpack:///./src/core/secret-formula/challenges/infinity-challenges.js","webpack:///./src/core/secret-formula/challenges/normal-challenges.js","webpack:///./src/core/secret-formula/challenges/corruption-challenge.js","webpack:///./src/core/secret-formula/challenges/index.js","webpack:///./src/core/secret-formula/changelog.js","webpack:///./src/core/secret-formula/confirmation-types.js","webpack:///./src/core/secret-formula/credits.js","webpack:///./src/core/secret-formula/discord-rich-presence.js","webpack:///./src/core/secret-formula/eternity/dilation-upgrades.js","webpack:///./src/core/secret-formula/eternity/eternity-milestones.js","webpack:///./src/core/secret-formula/eternity/eternity-upgrades.js","webpack:///./src/core/secret-formula/eternity/time-studies/dilation-time-studies.js","webpack:///./src/core/secret-formula/eternity/time-studies/ec-time-studies.js","webpack:///./src/core/secret-formula/eternity/time-studies/normal-time-studies.js","webpack:///./src/core/secret-formula/eternity/index.js","webpack:///./src/core/secret-formula/h2p.js","webpack:///./src/core/secret-formula/infinity/break-infinity-upgrades.js","webpack:///./src/core/secret-formula/infinity/infinity-upgrades.js","webpack:///./src/core/secret-formula/infinity/index.js","webpack:///./src/core/secret-formula/news.js","webpack:///./src/core/secret-formula/progress-checker.js","webpack:///./src/core/secret-formula/shop-purchases.js","webpack:///./src/core/secret-formula/speedrun-milestones.js","webpack:///./src/core/secret-formula/tab-notifications.js","webpack:///./src/core/secret-formula/tabs.js","webpack:///./src/core/secret-formula/mending/mending-upgrades.js","webpack:///./src/core/secret-formula/mending/mending-milestones.js","webpack:///./src/core/secret-formula/mending/warp-upgrades.js","webpack:///./src/core/secret-formula/mending/corruption-upgrades.js","webpack:///./src/core/secret-formula/mending/kohler-unlock-progress.js","webpack:///./src/core/secret-formula/mending/index.js","webpack:///./src/core/secret-formula/game-database.js","webpack:///./src/components/tabs/automator/AutomatorBlockEditor.vue?cc50","webpack:///./src/components/tabs/automator/AutomatorBlockSingleRow.vue?8c98","webpack:///./src/components/tabs/automator/AutomatorBlockSingleInput.vue?db16","webpack:///./src/core/automator/lexer.js","webpack:///./src/core/automator/automator-commands.js","webpack:///./src/core/automator/parser.js","webpack:///./src/core/automator/compiler.js","webpack:///./src/core/automator/automator-codemirror.js","webpack:///./src/core/automator/automator-backend.js","webpack:///./src/core/automator/automator-points.js","webpack:///src/components/tabs/automator/AutomatorBlockSingleInput.vue","webpack:///./src/components/tabs/automator/AutomatorBlockSingleInput.vue?9f12","webpack:///./src/components/tabs/automator/AutomatorBlockSingleInput.vue","webpack:///src/components/tabs/automator/AutomatorBlockSingleRow.vue","webpack:///./src/components/tabs/automator/AutomatorBlockSingleRow.vue?5e36","webpack:///./src/components/tabs/automator/AutomatorBlockSingleRow.vue","webpack:///src/components/tabs/automator/AutomatorBlockEditor.vue","webpack:///./src/components/tabs/automator/AutomatorBlockEditor.vue?d6d2","webpack:///./src/components/tabs/automator/AutomatorBlockEditor.vue","webpack:///./src/components/tabs/automator/AutomatorBlocks.vue?0b9f","webpack:///src/components/tabs/automator/AutomatorBlocks.vue","webpack:///./src/components/tabs/automator/AutomatorBlocks.vue?d3cf","webpack:///./src/components/tabs/automator/AutomatorBlocks.vue","webpack:///./src/components/tabs/automator/AutomatorTextEditor.vue?5311","webpack:///src/components/tabs/automator/AutomatorTextEditor.vue","webpack:///./src/components/tabs/automator/AutomatorTextEditor.vue?265b","webpack:///./src/components/tabs/automator/AutomatorTextEditor.vue","webpack:///./src/components/tabs/perks/PerksTab.vue?d405","webpack:///./src/components/tabs/perks/PerkPointLabel.vue?390e","webpack:///./src/components/PrimaryButton.vue?810d","webpack:///src/components/PrimaryButton.vue","webpack:///./src/components/PrimaryButton.vue?8132","webpack:///./src/components/PrimaryButton.vue","webpack:///src/components/tabs/perks/PerkPointLabel.vue","webpack:///./src/components/tabs/perks/PerkPointLabel.vue?8605","webpack:///./src/components/tabs/perks/PerkPointLabel.vue","webpack:///src/components/tabs/perks/PerksTab.vue","webpack:///./src/components/tabs/perks/PerksTab.vue?760f","webpack:///./src/components/tabs/perks/PerksTab.vue","webpack:///./src/core/glyph-effects.js","webpack:///./src/components/tabs/automator/AutomatorDocs.vue?1cef","webpack:///./src/components/tabs/automator/AutomatorButton.vue?916d","webpack:///src/components/tabs/automator/AutomatorButton.vue","webpack:///./src/components/tabs/automator/AutomatorButton.vue?9caa","webpack:///./src/components/tabs/automator/AutomatorButton.vue","webpack:///./src/components/tabs/automator/AutomatorDataTransferPage.vue?0a8b","webpack:///./src/components/tabs/automator/AutomatorDataTransferSingleEntry.vue?b523","webpack:///src/components/tabs/automator/AutomatorDataTransferSingleEntry.vue","webpack:///./src/components/tabs/automator/AutomatorDataTransferSingleEntry.vue?284f","webpack:///./src/components/tabs/automator/AutomatorDataTransferSingleEntry.vue","webpack:///src/components/tabs/automator/AutomatorDataTransferPage.vue","webpack:///./src/components/tabs/automator/AutomatorDataTransferPage.vue?6340","webpack:///./src/components/tabs/automator/AutomatorDataTransferPage.vue","webpack:///./src/components/tabs/automator/AutomatorDefinePage.vue?ca60","webpack:///./src/components/tabs/automator/AutomatorDefineSingleEntry.vue?8d86","webpack:///src/components/tabs/automator/AutomatorDefineSingleEntry.vue","webpack:///./src/components/tabs/automator/AutomatorDefineSingleEntry.vue?3946","webpack:///./src/components/tabs/automator/AutomatorDefineSingleEntry.vue","webpack:///src/components/tabs/automator/AutomatorDefinePage.vue","webpack:///./src/components/tabs/automator/AutomatorDefinePage.vue?2f00","webpack:///./src/components/tabs/automator/AutomatorDefinePage.vue","webpack:///./src/components/tabs/automator/AutomatorDocsCommandList.vue?ec6d","webpack:///./src/components/tabs/automator/AutomatorDocsManPage.vue?1686","webpack:///src/components/tabs/automator/AutomatorDocsManPage.vue","webpack:///./src/components/tabs/automator/AutomatorDocsManPage.vue?c4a4","webpack:///./src/components/tabs/automator/AutomatorDocsManPage.vue","webpack:///src/components/tabs/automator/AutomatorDocsCommandList.vue","webpack:///./src/components/tabs/automator/AutomatorDocsCommandList.vue?d1c3","webpack:///./src/components/tabs/automator/AutomatorDocsCommandList.vue","webpack:///./src/components/tabs/automator/AutomatorDocsIntroPage.vue?87a3","webpack:///src/components/tabs/automator/AutomatorDocsIntroPage.vue","webpack:///./src/components/tabs/automator/AutomatorDocsIntroPage.vue?207e","webpack:///./src/components/tabs/automator/AutomatorDocsIntroPage.vue","webpack:///./src/components/tabs/automator/AutomatorDocsTemplateList.vue?f671","webpack:///src/components/tabs/automator/AutomatorDocsTemplateList.vue","webpack:///./src/components/tabs/automator/AutomatorDocsTemplateList.vue?0cda","webpack:///./src/components/tabs/automator/AutomatorDocsTemplateList.vue","webpack:///./src/components/tabs/automator/AutomatorErrorPage.vue?3204","webpack:///src/components/tabs/automator/AutomatorErrorPage.vue","webpack:///./src/components/tabs/automator/AutomatorErrorPage.vue?31a3","webpack:///./src/components/tabs/automator/AutomatorErrorPage.vue","webpack:///./src/components/tabs/automator/AutomatorEventLog.vue?8e32","webpack:///src/components/tabs/automator/AutomatorEventLog.vue","webpack:///./src/components/tabs/automator/AutomatorEventLog.vue?cba9","webpack:///./src/components/tabs/automator/AutomatorEventLog.vue","webpack:///./src/components/tabs/automator/AutomatorScriptDropdownEntryList.vue?3785","webpack:///src/components/tabs/automator/AutomatorScriptDropdownEntryList.vue","webpack:///./src/components/tabs/automator/AutomatorScriptDropdownEntryList.vue?edc6","webpack:///./src/components/tabs/automator/AutomatorScriptDropdownEntryList.vue","webpack:///./src/components/ExpandingControlBox.vue?e0b6","webpack:///src/components/ExpandingControlBox.vue","webpack:///./src/components/ExpandingControlBox.vue?cc7a","webpack:///./src/components/ExpandingControlBox.vue","webpack:///src/components/tabs/automator/AutomatorDocs.vue","webpack:///./src/components/tabs/automator/AutomatorDocs.vue?c317","webpack:///./src/components/tabs/automator/AutomatorDocs.vue","webpack:///./src/components/modals/options/SelectGlyphInfoDropdown.vue?19aa","webpack:///src/components/modals/options/SelectGlyphInfoDropdown.vue","webpack:///./src/components/modals/options/SelectGlyphInfoDropdown.vue?418a","webpack:///./src/components/modals/options/SelectGlyphInfoDropdown.vue","webpack:///./src/utility/deepmerge.js","webpack:///./src/core/player.js","webpack:///./src/core/performance-stats.js","webpack:///./src/core/mending-upgrades.js","webpack:///./src/core/cache.js","webpack:///./src/core/intervals.js","webpack:///./src/core/keyboard.js","webpack:///./src/steam/bindings/node-module.js","webpack:///./src/steam/bindings/electron.js","webpack:///./src/steam/electron-runtime.js","webpack:///./src/core/discord-parser.js","webpack:///./src/utility/open-external-link.js","webpack:///./src/steam/bindings/PlayFabClientApi.js","webpack:///./src/steam/bindings/playfab.js","webpack:///./src/steam/steam-purchases.js","webpack:///./src/steam/bindings/greenworks.js","webpack:///./src/steam/steam-runtime.js","webpack:///./src/core/hotkeys.js","webpack:///./src/core/corruption-upgrades.js","webpack:///./src/core/galaxy.js","webpack:///./src/core/away-progress.js","webpack:///./src/core/confirmations.js","webpack:///./src/core/autobuyers/autobuyer.js","webpack:///./src/core/autobuyers/annihilation-autobuyer.js","webpack:///./src/core/autobuyers/antimatter-dimension-autobuyer.js","webpack:///./src/core/autobuyers/big-crunch-autobuyer.js","webpack:///./src/core/autobuyers/black-hole-power-autobuyer.js","webpack:///./src/core/autobuyers/expo-black-hole-power-autobuyer.js","webpack:///./src/core/autobuyers/dark-matter-dimension-ascension-autobuyer.js","webpack:///./src/core/autobuyers/dark-matter-dimension-autobuyer.js","webpack:///./src/core/reality.js","webpack:///./src/core/full-screen-animation-handler.js","webpack:///./src/core/eternity.js","webpack:///./src/core/longpress.js","webpack:///./src/core/notify.js","webpack:///./src/core/ui.init.js","webpack:///./src/components/GameUIComponent.vue?8196","webpack:///./src/components/BackgroundAnimations.vue?8855","webpack:///./src/components/BlobSnowflakes.vue?39ff","webpack:///./src/components/BlobBackground.vue?3967","webpack:///src/components/BlobBackground.vue","webpack:///./src/components/BlobBackground.vue?a670","webpack:///./src/components/BlobBackground.vue","webpack:///./src/components/BlobSnowflake.vue?42c4","webpack:///src/components/BlobSnowflake.vue","webpack:///./src/components/BlobSnowflake.vue?4f30","webpack:///./src/components/BlobSnowflake.vue","webpack:///src/components/BlobSnowflakes.vue","webpack:///./src/components/BlobSnowflakes.vue?69b6","webpack:///./src/components/BlobSnowflakes.vue","webpack:///./src/components/tabs/time-dilation/TachyonParticles.vue?7be4","webpack:///./src/components/tabs/time-dilation/TachyonParticle.vue?3cf1","webpack:///src/components/tabs/time-dilation/TachyonParticle.vue","webpack:///./src/components/tabs/time-dilation/TachyonParticle.vue?d1c2","webpack:///./src/components/tabs/time-dilation/TachyonParticle.vue","webpack:///src/components/tabs/time-dilation/TachyonParticles.vue","webpack:///./src/components/tabs/time-dilation/TachyonParticles.vue?910a","webpack:///./src/components/tabs/time-dilation/TachyonParticles.vue","webpack:///src/components/BackgroundAnimations.vue","webpack:///./src/components/BackgroundAnimations.vue?fc34","webpack:///./src/components/BackgroundAnimations.vue","webpack:///./src/components/ui-modes/classic/ClassicUi.vue?7151","webpack:///./src/components/MendingPointsHeader.vue?8799","webpack:///src/components/MendingPointsHeader.vue","webpack:///./src/components/MendingPointsHeader.vue?02a0","webpack:///./src/components/MendingPointsHeader.vue","webpack:///./src/components/ui-modes/BigCrunchButton.vue?0105","webpack:///src/components/ui-modes/BigCrunchButton.vue","webpack:///./src/components/ui-modes/BigCrunchButton.vue?7fe2","webpack:///./src/components/ui-modes/BigCrunchButton.vue","webpack:///./src/components/ui-modes/GameHeader.vue?f6ee","webpack:///./src/components/ui-modes/HeaderBlackHole.vue?5159","webpack:///./src/components/ui-modes/HeaderBlackHoleStatusText.vue?38b3","webpack:///src/components/ui-modes/HeaderBlackHoleStatusText.vue","webpack:///./src/components/ui-modes/HeaderBlackHoleStatusText.vue?bbeb","webpack:///./src/components/ui-modes/HeaderBlackHoleStatusText.vue","webpack:///./src/components/PrimaryToggleButton.vue?9d07","webpack:///src/components/PrimaryToggleButton.vue","webpack:///./src/components/PrimaryToggleButton.vue?10e0","webpack:///./src/components/PrimaryToggleButton.vue","webpack:///src/components/ui-modes/HeaderBlackHole.vue","webpack:///./src/components/ui-modes/HeaderBlackHole.vue?2d30","webpack:///./src/components/ui-modes/HeaderBlackHole.vue","webpack:///./src/components/ui-modes/HeaderChallengeDisplay.vue?d66b","webpack:///./src/components/ui-modes/FailableEcText.vue?ee7c","webpack:///src/components/ui-modes/FailableEcText.vue","webpack:///./src/components/ui-modes/FailableEcText.vue?8844","webpack:///./src/components/ui-modes/FailableEcText.vue","webpack:///src/components/ui-modes/HeaderChallengeDisplay.vue","webpack:///./src/components/ui-modes/HeaderChallengeDisplay.vue?fdd7","webpack:///./src/components/ui-modes/HeaderChallengeDisplay.vue","webpack:///./src/components/ui-modes/HeaderChallengeEffects.vue?079b","webpack:///src/components/ui-modes/HeaderChallengeEffects.vue","webpack:///./src/components/ui-modes/HeaderChallengeEffects.vue?f61e","webpack:///./src/components/ui-modes/HeaderChallengeEffects.vue","webpack:///./src/components/ui-modes/HeaderPrestigeGroup.vue?ad1b","webpack:///./src/components/ui-modes/prestige-header/HeaderCenterContainer.vue?2646","webpack:///./src/components/tabs/celestial-pelle/ArmageddonButton.vue?0caa","webpack:///src/components/tabs/celestial-pelle/ArmageddonButton.vue","webpack:///./src/components/tabs/celestial-pelle/ArmageddonButton.vue?517b","webpack:///./src/components/tabs/celestial-pelle/ArmageddonButton.vue","webpack:///./src/components/RealityCurrencyHeader.vue?fcde","webpack:///src/components/RealityCurrencyHeader.vue","webpack:///./src/components/RealityCurrencyHeader.vue?a813","webpack:///./src/components/RealityCurrencyHeader.vue","webpack:///./src/components/ui-modes/prestige-header/MendingButton.vue?30e9","webpack:///src/components/ui-modes/prestige-header/MendingButton.vue","webpack:///./src/components/ui-modes/prestige-header/MendingButton.vue?f04d","webpack:///./src/components/ui-modes/prestige-header/MendingButton.vue","webpack:///./src/components/ui-modes/HeaderTickspeedInfo.vue?d08b","webpack:///./src/components/GameSpeedDisplay.vue?9075","webpack:///./src/core/speedrun.js","webpack:///./src/core/storage/serializer.js","webpack:///./src/core/storage/migrations.js","webpack:///./src/core/storage/dev-migrations.js","webpack:///./src/core/storage/storage.js","webpack:///./src/core/storage/base64-binary.js","webpack:///./src/core/storage/firebase-config.js","webpack:///./src/core/storage/progress-checker.js","webpack:///./src/core/storage/cloud-saving.js","webpack:///./src/supported-browsers.js","webpack:///./src/core/payments.js","webpack:///./src/core/time-studies/time-studies.js","webpack:///./src/core/time-studies/normal-time-study.js","webpack:///./src/game.js","webpack:///src/components/GameSpeedDisplay.vue","webpack:///./src/components/GameSpeedDisplay.vue?5b0c","webpack:///./src/components/GameSpeedDisplay.vue","webpack:///src/components/ui-modes/HeaderTickspeedInfo.vue","webpack:///./src/components/ui-modes/HeaderTickspeedInfo.vue?0ebd","webpack:///./src/components/ui-modes/HeaderTickspeedInfo.vue","webpack:///./src/components/ui-modes/prestige-header/RealityButton.vue?e069","webpack:///src/components/ui-modes/prestige-header/RealityButton.vue","webpack:///./src/components/ui-modes/prestige-header/RealityButton.vue?bb7d","webpack:///./src/components/ui-modes/prestige-header/RealityButton.vue","webpack:///src/components/ui-modes/prestige-header/HeaderCenterContainer.vue","webpack:///./src/components/ui-modes/prestige-header/HeaderCenterContainer.vue?44e3","webpack:///./src/components/ui-modes/prestige-header/HeaderCenterContainer.vue","webpack:///./src/components/ui-modes/prestige-header/HeaderEternityContainer.vue?460b","webpack:///./src/components/ui-modes/prestige-header/EternityButton.vue?00c8","webpack:///src/components/ui-modes/prestige-header/EternityButton.vue","webpack:///./src/components/ui-modes/prestige-header/EternityButton.vue?9f29","webpack:///./src/components/ui-modes/prestige-header/EternityButton.vue","webpack:///./src/components/ui-modes/prestige-header/UnlockInfinityDimButton.vue?7b45","webpack:///src/components/ui-modes/prestige-header/UnlockInfinityDimButton.vue","webpack:///./src/components/ui-modes/prestige-header/UnlockInfinityDimButton.vue?4100","webpack:///./src/components/ui-modes/prestige-header/UnlockInfinityDimButton.vue","webpack:///src/components/ui-modes/prestige-header/HeaderEternityContainer.vue","webpack:///./src/components/ui-modes/prestige-header/HeaderEternityContainer.vue?8641","webpack:///./src/components/ui-modes/prestige-header/HeaderEternityContainer.vue","webpack:///./src/components/ui-modes/prestige-header/HeaderInfinityContainer.vue?64cc","webpack:///./src/components/ui-modes/prestige-header/BigCrunchButton.vue?2948","webpack:///src/components/ui-modes/prestige-header/BigCrunchButton.vue","webpack:///./src/components/ui-modes/prestige-header/BigCrunchButton.vue?91f6","webpack:///./src/components/ui-modes/prestige-header/BigCrunchButton.vue","webpack:///src/components/ui-modes/prestige-header/HeaderInfinityContainer.vue","webpack:///./src/components/ui-modes/prestige-header/HeaderInfinityContainer.vue?454e","webpack:///./src/components/ui-modes/prestige-header/HeaderInfinityContainer.vue","webpack:///src/components/ui-modes/HeaderPrestigeGroup.vue","webpack:///./src/components/ui-modes/HeaderPrestigeGroup.vue?890d","webpack:///./src/components/ui-modes/HeaderPrestigeGroup.vue","webpack:///src/components/ui-modes/GameHeader.vue","webpack:///./src/components/ui-modes/GameHeader.vue?1e93","webpack:///./src/components/ui-modes/GameHeader.vue","webpack:///./src/components/ui-modes/NewsTicker.vue?61e2","webpack:///src/components/ui-modes/NewsTicker.vue","webpack:///./src/components/ui-modes/NewsTicker.vue?6032","webpack:///./src/components/ui-modes/NewsTicker.vue","webpack:///./src/components/ui-modes/classic/ClassicSubtabBar.vue?be72","webpack:///./src/components/ui-modes/classic/ClassicSubtabButton.vue?4ba4","webpack:///src/components/ui-modes/classic/ClassicSubtabButton.vue","webpack:///./src/components/ui-modes/classic/ClassicSubtabButton.vue?8248","webpack:///./src/components/ui-modes/classic/ClassicSubtabButton.vue","webpack:///src/components/ui-modes/classic/ClassicSubtabBar.vue","webpack:///./src/components/ui-modes/classic/ClassicSubtabBar.vue?a1e7","webpack:///./src/components/ui-modes/classic/ClassicSubtabBar.vue","webpack:///./src/components/ui-modes/classic/ClassicTabBar.vue?c282","webpack:///./src/components/ui-modes/classic/ClassicTabButton.vue?d19d","webpack:///src/components/ui-modes/classic/ClassicTabButton.vue","webpack:///./src/components/ui-modes/classic/ClassicTabButton.vue?eaf5","webpack:///./src/components/ui-modes/classic/ClassicTabButton.vue","webpack:///src/components/ui-modes/classic/ClassicTabBar.vue","webpack:///./src/components/ui-modes/classic/ClassicTabBar.vue?7653","webpack:///./src/components/ui-modes/classic/ClassicTabBar.vue","webpack:///./src/components/EternityPointsHeader.vue?a936","webpack:///src/components/EternityPointsHeader.vue","webpack:///./src/components/EternityPointsHeader.vue?bd8a","webpack:///./src/components/EternityPointsHeader.vue","webpack:///./src/components/InfinityPointsHeader.vue?f46f","webpack:///src/components/InfinityPointsHeader.vue","webpack:///./src/components/InfinityPointsHeader.vue?48c1","webpack:///./src/components/InfinityPointsHeader.vue","webpack:///src/components/ui-modes/classic/ClassicUi.vue","webpack:///./src/components/ui-modes/classic/ClassicUi.vue?f702","webpack:///./src/components/ui-modes/classic/ClassicUi.vue","webpack:///./src/components/GameUiComponentFixed.vue?8e6a","webpack:///./src/components/modals/celestial-quotes/CelestialQuoteHistoryDisplay.vue?1033","webpack:///./src/components/modals/celestial-quotes/CelestialQuoteLine.vue?7258","webpack:///./src/components/modals/celestial-quotes/CelestialQuoteBackground.vue?a400","webpack:///src/components/modals/celestial-quotes/CelestialQuoteBackground.vue","webpack:///./src/components/modals/celestial-quotes/CelestialQuoteBackground.vue?5f7d","webpack:///./src/components/modals/celestial-quotes/CelestialQuoteBackground.vue","webpack:///src/components/modals/celestial-quotes/CelestialQuoteLine.vue","webpack:///./src/components/modals/celestial-quotes/CelestialQuoteLine.vue?d56e","webpack:///./src/components/modals/celestial-quotes/CelestialQuoteLine.vue","webpack:///src/components/modals/celestial-quotes/CelestialQuoteHistoryDisplay.vue","webpack:///./src/components/modals/celestial-quotes/CelestialQuoteHistoryDisplay.vue?efb5","webpack:///./src/components/modals/celestial-quotes/CelestialQuoteHistoryDisplay.vue","webpack:///./src/components/modals/celestial-quotes/CelestialQuoteModal.vue?652b","webpack:///./src/components/modals/celestial-quotes/templates/CelestialQuoteLineBasicInteractable.vue?c81b","webpack:///src/components/modals/celestial-quotes/templates/CelestialQuoteLineBasicInteractable.vue","webpack:///./src/components/modals/celestial-quotes/templates/CelestialQuoteLineBasicInteractable.vue?6805","webpack:///./src/components/modals/celestial-quotes/templates/CelestialQuoteLineBasicInteractable.vue","webpack:///src/components/modals/celestial-quotes/CelestialQuoteModal.vue","webpack:///./src/components/modals/celestial-quotes/CelestialQuoteModal.vue?29c9","webpack:///./src/components/modals/celestial-quotes/CelestialQuoteModal.vue","webpack:///./src/components/tabs/celestial-pelle/CreditsContainer.vue?df83","webpack:///./src/components/CreditsDisplay.vue?671f","webpack:///src/components/CreditsDisplay.vue","webpack:///./src/components/CreditsDisplay.vue?99f2","webpack:///./src/components/CreditsDisplay.vue","webpack:///src/components/tabs/celestial-pelle/CreditsContainer.vue","webpack:///./src/components/tabs/celestial-pelle/CreditsContainer.vue?e448","webpack:///./src/components/tabs/celestial-pelle/CreditsContainer.vue","webpack:///./src/components/tabs/celestial-pelle/FadeAway.vue?307d","webpack:///src/components/tabs/celestial-pelle/FadeAway.vue","webpack:///./src/components/tabs/celestial-pelle/FadeAway.vue?d223","webpack:///./src/components/tabs/celestial-pelle/FadeAway.vue","webpack:///./src/components/HowToPlay.vue?6b2a","webpack:///src/components/HowToPlay.vue","webpack:///./src/components/HowToPlay.vue?7ff4","webpack:///./src/components/HowToPlay.vue","webpack:///./src/components/modals/ModalProgressBar.vue?59cd","webpack:///./src/components/OfflineSpeedupButton.vue?ab68","webpack:///src/components/OfflineSpeedupButton.vue","webpack:///./src/components/OfflineSpeedupButton.vue?7c87","webpack:///./src/components/OfflineSpeedupButton.vue","webpack:///src/components/modals/ModalProgressBar.vue","webpack:///./src/components/modals/ModalProgressBar.vue?e2d1","webpack:///./src/components/modals/ModalProgressBar.vue","webpack:///./src/components/ui-modes/modern/ModernSidebar.vue?708e","webpack:///./src/components/ui-modes/modern/ModernSidebarCurrency.vue?483a","webpack:///src/components/ui-modes/modern/ModernSidebarCurrency.vue","webpack:///./src/components/ui-modes/modern/ModernSidebarCurrency.vue?9d1c","webpack:///./src/components/ui-modes/modern/ModernSidebarCurrency.vue","webpack:///./src/components/ui-modes/modern/ModernTabButton.vue?96a3","webpack:///src/components/ui-modes/modern/ModernTabButton.vue","webpack:///./src/components/ui-modes/modern/ModernTabButton.vue?1ab0","webpack:///./src/components/ui-modes/modern/ModernTabButton.vue","webpack:///src/components/ui-modes/modern/ModernSidebar.vue","webpack:///./src/components/ui-modes/modern/ModernSidebar.vue?8632","webpack:///./src/components/ui-modes/modern/ModernSidebar.vue","webpack:///./src/components/tabs/celestial-pelle/NewGame.vue?b648","webpack:///src/components/tabs/celestial-pelle/NewGame.vue","webpack:///./src/components/tabs/celestial-pelle/NewGame.vue?1d98","webpack:///./src/components/tabs/celestial-pelle/NewGame.vue","webpack:///./src/components/modals/PopupModal.vue?2cdb","webpack:///src/components/modals/PopupModal.vue","webpack:///./src/components/modals/PopupModal.vue?d56b","webpack:///./src/components/modals/PopupModal.vue","webpack:///./src/components/SaveTimer.vue?60f1","webpack:///src/components/SaveTimer.vue","webpack:///./src/components/SaveTimer.vue?7bb4","webpack:///./src/components/SaveTimer.vue","webpack:///./src/components/SpectateGame.vue?41da","webpack:///src/components/SpectateGame.vue","webpack:///./src/components/SpectateGame.vue?9c9e","webpack:///./src/components/SpectateGame.vue","webpack:///./src/components/SpeedrunStatus.vue?9e90","webpack:///src/components/SpeedrunStatus.vue","webpack:///./src/components/SpeedrunStatus.vue?f2ba","webpack:///./src/components/SpeedrunStatus.vue","webpack:///./src/components/tabs/time-studies/tt-shop/TimeTheoremShop.vue?43f1","webpack:///./src/components/tabs/time-studies/tt-shop/TimeStudySaveLoadButton.vue?16f7","webpack:///./src/components/tabs/time-studies/tt-shop/HoverMenu.vue?c105","webpack:///src/components/tabs/time-studies/tt-shop/HoverMenu.vue","webpack:///./src/components/tabs/time-studies/tt-shop/HoverMenu.vue?d6d6","webpack:///./src/components/tabs/time-studies/tt-shop/HoverMenu.vue","webpack:///src/components/tabs/time-studies/tt-shop/TimeStudySaveLoadButton.vue","webpack:///./src/components/tabs/time-studies/tt-shop/TimeStudySaveLoadButton.vue?d3d6","webpack:///./src/components/tabs/time-studies/tt-shop/TimeStudySaveLoadButton.vue","webpack:///./src/components/tabs/time-studies/tt-shop/TimeTheoremBuyButton.vue?5cbf","webpack:///src/components/tabs/time-studies/tt-shop/TimeTheoremBuyButton.vue","webpack:///./src/components/tabs/time-studies/tt-shop/TimeTheoremBuyButton.vue?2ead","webpack:///./src/components/tabs/time-studies/tt-shop/TimeTheoremBuyButton.vue","webpack:///src/components/tabs/time-studies/tt-shop/TimeTheoremShop.vue","webpack:///./src/components/tabs/time-studies/tt-shop/TimeTheoremShop.vue?f7da","webpack:///./src/components/tabs/time-studies/tt-shop/TimeTheoremShop.vue","webpack:///src/components/GameUiComponentFixed.vue","webpack:///./src/components/GameUiComponentFixed.vue?694b","webpack:///./src/components/GameUiComponentFixed.vue","webpack:///./src/components/ui-modes/modern/ModernUi.vue?f6e8","webpack:///src/components/ui-modes/modern/ModernUi.vue","webpack:///./src/components/ui-modes/modern/ModernUi.vue?377d","webpack:///./src/components/ui-modes/modern/ModernUi.vue","webpack:///./src/components/ui-modes/synergism/SynergismUi.vue?e9a4","webpack:///./src/components/ui-modes/synergism/SynergismGameHeader.vue?5bf3","webpack:///./src/components/ui-modes/synergism/SynergismHeaderPrestigeGroup.vue?dc98","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismHeaderCenterContainer.vue?b664","webpack:///./src/components/ui-modes/synergism/prestige-header/MendingButton.vue?e6d1","webpack:///src/components/ui-modes/synergism/prestige-header/MendingButton.vue","webpack:///./src/components/ui-modes/synergism/prestige-header/MendingButton.vue?2a7d","webpack:///./src/components/ui-modes/synergism/prestige-header/MendingButton.vue","webpack:///src/components/ui-modes/synergism/prestige-header/SynergismHeaderCenterContainer.vue","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismHeaderCenterContainer.vue?0438","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismHeaderCenterContainer.vue","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismEPHeaderContainer.vue?e543","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismEternityButton.vue?bc0b","webpack:///src/components/ui-modes/synergism/prestige-header/SynergismEternityButton.vue","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismEternityButton.vue?f419","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismEternityButton.vue","webpack:///src/components/ui-modes/synergism/prestige-header/SynergismEPHeaderContainer.vue","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismEPHeaderContainer.vue?ed4b","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismEPHeaderContainer.vue","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismHeaderInfinityContainer.vue?e4b6","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismBigCrunchButton.vue?aa37","webpack:///src/components/ui-modes/synergism/prestige-header/SynergismBigCrunchButton.vue","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismBigCrunchButton.vue?fdab","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismBigCrunchButton.vue","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismRealityButton.vue?e3bd","webpack:///src/components/ui-modes/synergism/prestige-header/SynergismRealityButton.vue","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismRealityButton.vue?bafd","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismRealityButton.vue","webpack:///src/components/ui-modes/synergism/prestige-header/SynergismHeaderInfinityContainer.vue","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismHeaderInfinityContainer.vue?ffcf","webpack:///./src/components/ui-modes/synergism/prestige-header/SynergismHeaderInfinityContainer.vue","webpack:///src/components/ui-modes/synergism/SynergismHeaderPrestigeGroup.vue","webpack:///./src/components/ui-modes/synergism/SynergismHeaderPrestigeGroup.vue?9355","webpack:///./src/components/ui-modes/synergism/SynergismHeaderPrestigeGroup.vue","webpack:///src/components/ui-modes/synergism/SynergismGameHeader.vue","webpack:///./src/components/ui-modes/synergism/SynergismGameHeader.vue?216e","webpack:///./src/components/ui-modes/synergism/SynergismGameHeader.vue","webpack:///./src/components/ui-modes/synergism/SynergismSubtabBar.vue?458f","webpack:///./src/components/ui-modes/synergism/SynergismSubtabButton.vue?ab82","webpack:///src/components/ui-modes/synergism/SynergismSubtabButton.vue","webpack:///./src/components/ui-modes/synergism/SynergismSubtabButton.vue?8ae7","webpack:///./src/components/ui-modes/synergism/SynergismSubtabButton.vue","webpack:///src/components/ui-modes/synergism/SynergismSubtabBar.vue","webpack:///./src/components/ui-modes/synergism/SynergismSubtabBar.vue?55ca","webpack:///./src/components/ui-modes/synergism/SynergismSubtabBar.vue","webpack:///./src/components/ui-modes/synergism/SynergismTabBar.vue?e74f","webpack:///./src/components/ui-modes/synergism/SynergismTabButton.vue?60f2","webpack:///src/components/ui-modes/synergism/SynergismTabButton.vue","webpack:///./src/components/ui-modes/synergism/SynergismTabButton.vue?ef76","webpack:///./src/components/ui-modes/synergism/SynergismTabButton.vue","webpack:///src/components/ui-modes/synergism/SynergismTabBar.vue","webpack:///./src/components/ui-modes/synergism/SynergismTabBar.vue?03d7","webpack:///./src/components/ui-modes/synergism/SynergismTabBar.vue","webpack:///./src/components/ui-modes/synergism/SynergismEpHeader.vue?d3c9","webpack:///src/components/ui-modes/synergism/SynergismEpHeader.vue","webpack:///./src/components/ui-modes/synergism/SynergismEpHeader.vue?b8df","webpack:///./src/components/ui-modes/synergism/SynergismEpHeader.vue","webpack:///src/components/ui-modes/synergism/SynergismUi.vue","webpack:///./src/components/ui-modes/synergism/SynergismUi.vue?da22","webpack:///./src/components/ui-modes/synergism/SynergismUi.vue","webpack:///./src/components/tabs/alchemy/AlchemyTab.vue?2b68","webpack:///./src/components/tabs/alchemy/alchemy-circle-layout.js","webpack:///./src/components/tabs/alchemy/AlchemyCircleNode.vue?0ab3","webpack:///./src/components/tabs/alchemy/AlchemyResourceArc.vue?e12c","webpack:///src/components/tabs/alchemy/AlchemyResourceArc.vue","webpack:///./src/components/tabs/alchemy/AlchemyResourceArc.vue?d7cf","webpack:///./src/components/tabs/alchemy/AlchemyResourceArc.vue","webpack:///./src/components/HintText.vue?92ac","webpack:///src/components/HintText.vue","webpack:///./src/components/HintText.vue?c61c","webpack:///./src/components/HintText.vue","webpack:///src/components/tabs/alchemy/AlchemyCircleNode.vue","webpack:///./src/components/tabs/alchemy/AlchemyCircleNode.vue?d4f8","webpack:///./src/components/tabs/alchemy/AlchemyCircleNode.vue","webpack:///./src/components/tabs/alchemy/AlchemyResourceInfo.vue?5e96","webpack:///./src/components/EffectDisplay.vue?5f94","webpack:///./src/utility/type-check.js","webpack:///src/components/EffectDisplay.vue","webpack:///./src/components/EffectDisplay.vue?6351","webpack:///./src/components/EffectDisplay.vue","webpack:///src/components/tabs/alchemy/AlchemyResourceInfo.vue","webpack:///./src/components/tabs/alchemy/AlchemyResourceInfo.vue?ced3","webpack:///./src/components/tabs/alchemy/AlchemyResourceInfo.vue","webpack:///src/components/tabs/alchemy/AlchemyTab.vue","webpack:///./src/components/tabs/alchemy/AlchemyTab.vue?1980","webpack:///./src/components/tabs/alchemy/AlchemyTab.vue","webpack:///./src/components/tabs/antimatter-dimensions/AntimatterDimensionsTab.vue?840b","webpack:///./src/components/tabs/antimatter-dimensions/ClassicAntimatterDimensionsTab.vue?bf82","webpack:///./src/components/tabs/antimatter-dimensions/AntimatterDimensionProgressBar.vue?14f5","webpack:///src/components/tabs/antimatter-dimensions/AntimatterDimensionProgressBar.vue","webpack:///./src/components/tabs/antimatter-dimensions/AntimatterDimensionProgressBar.vue?fda1","webpack:///./src/components/tabs/antimatter-dimensions/AntimatterDimensionProgressBar.vue","webpack:///./src/components/tabs/antimatter-dimensions/ClassicAntimatterDimensionRow.vue?4920","webpack:///./src/components/GenericDimensionRowText.vue?b5a0","webpack:///src/components/GenericDimensionRowText.vue","webpack:///./src/components/GenericDimensionRowText.vue?ce05","webpack:///./src/components/GenericDimensionRowText.vue","webpack:///src/components/tabs/antimatter-dimensions/ClassicAntimatterDimensionRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/ClassicAntimatterDimensionRow.vue?c26d","webpack:///./src/components/tabs/antimatter-dimensions/ClassicAntimatterDimensionRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/ClassicAntimatterDimensionsTabHeader.vue?aec2","webpack:///src/components/tabs/antimatter-dimensions/ClassicAntimatterDimensionsTabHeader.vue","webpack:///./src/components/tabs/antimatter-dimensions/ClassicAntimatterDimensionsTabHeader.vue?49cd","webpack:///./src/components/tabs/antimatter-dimensions/ClassicAntimatterDimensionsTabHeader.vue","webpack:///./src/components/tabs/antimatter-dimensions/ClassicAntimatterGalaxyRow.vue?0b3e","webpack:///src/components/tabs/antimatter-dimensions/ClassicAntimatterGalaxyRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/ClassicAntimatterGalaxyRow.vue?1a4d","webpack:///./src/components/tabs/antimatter-dimensions/ClassicAntimatterGalaxyRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/ClassicDimensionBoostRow.vue?d9a8","webpack:///./src/core/warp-upgrades.js","webpack:///./src/core/dimboost.js","webpack:///src/components/tabs/antimatter-dimensions/ClassicDimensionBoostRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/ClassicDimensionBoostRow.vue?0061","webpack:///./src/components/tabs/antimatter-dimensions/ClassicDimensionBoostRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/TickspeedRow.vue?b1f8","webpack:///src/components/tabs/antimatter-dimensions/TickspeedRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/TickspeedRow.vue?5282","webpack:///./src/components/tabs/antimatter-dimensions/TickspeedRow.vue","webpack:///src/components/tabs/antimatter-dimensions/ClassicAntimatterDimensionsTab.vue","webpack:///./src/components/tabs/antimatter-dimensions/ClassicAntimatterDimensionsTab.vue?f7d3","webpack:///./src/components/tabs/antimatter-dimensions/ClassicAntimatterDimensionsTab.vue","webpack:///./src/components/tabs/antimatter-dimensions/ModernAntimatterDimensionsTab.vue?11cf","webpack:///./src/components/tabs/antimatter-dimensions/ModernAntimatterDimensionRow.vue?3f34","webpack:///src/components/tabs/antimatter-dimensions/ModernAntimatterDimensionRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/ModernAntimatterDimensionRow.vue?abc9","webpack:///./src/components/tabs/antimatter-dimensions/ModernAntimatterDimensionRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/ModernAntimatterGalaxyRow.vue?785a","webpack:///src/components/tabs/antimatter-dimensions/ModernAntimatterGalaxyRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/ModernAntimatterGalaxyRow.vue?c271","webpack:///./src/components/tabs/antimatter-dimensions/ModernAntimatterGalaxyRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/ModernDimensionBoostRow.vue?4b17","webpack:///src/components/tabs/antimatter-dimensions/ModernDimensionBoostRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/ModernDimensionBoostRow.vue?81a4","webpack:///./src/components/tabs/antimatter-dimensions/ModernDimensionBoostRow.vue","webpack:///src/components/tabs/antimatter-dimensions/ModernAntimatterDimensionsTab.vue","webpack:///./src/components/tabs/antimatter-dimensions/ModernAntimatterDimensionsTab.vue?6d48","webpack:///./src/components/tabs/antimatter-dimensions/ModernAntimatterDimensionsTab.vue","webpack:///./src/components/tabs/antimatter-dimensions/SynergismAntimatterDimensionsTab.vue?143d","webpack:///./src/components/tabs/antimatter-dimensions/SynergismAntimatterDimensionRow.vue?d3b6","webpack:///src/components/tabs/antimatter-dimensions/SynergismAntimatterDimensionRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/SynergismAntimatterDimensionRow.vue?64eb","webpack:///./src/components/tabs/antimatter-dimensions/SynergismAntimatterDimensionRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/SynergismAntimatterDimensionsTabHeader.vue?2c00","webpack:///src/components/tabs/antimatter-dimensions/SynergismAntimatterDimensionsTabHeader.vue","webpack:///./src/components/tabs/antimatter-dimensions/SynergismAntimatterDimensionsTabHeader.vue?51d5","webpack:///./src/components/tabs/antimatter-dimensions/SynergismAntimatterDimensionsTabHeader.vue","webpack:///./src/components/tabs/antimatter-dimensions/SynergismAntimatterGalaxyRow.vue?199b","webpack:///src/components/tabs/antimatter-dimensions/SynergismAntimatterGalaxyRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/SynergismAntimatterGalaxyRow.vue?06cc","webpack:///./src/components/tabs/antimatter-dimensions/SynergismAntimatterGalaxyRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/SynergismDimensionBoostRow.vue?ea5c","webpack:///src/components/tabs/antimatter-dimensions/SynergismDimensionBoostRow.vue","webpack:///./src/components/tabs/antimatter-dimensions/SynergismDimensionBoostRow.vue?b933","webpack:///./src/components/tabs/antimatter-dimensions/SynergismDimensionBoostRow.vue","webpack:///src/components/tabs/antimatter-dimensions/SynergismAntimatterDimensionsTab.vue","webpack:///./src/components/tabs/antimatter-dimensions/SynergismAntimatterDimensionsTab.vue?c916","webpack:///./src/components/tabs/antimatter-dimensions/SynergismAntimatterDimensionsTab.vue","webpack:///src/components/tabs/antimatter-dimensions/AntimatterDimensionsTab.vue","webpack:///./src/components/tabs/antimatter-dimensions/AntimatterDimensionsTab.vue?6b75","webpack:///./src/components/tabs/antimatter-dimensions/AntimatterDimensionsTab.vue","webpack:///./src/components/tabs/autobuyers/AutobuyersTab.vue?90a2","webpack:///./src/components/tabs/autobuyers/AutobuyerToggles.vue?d4ee","webpack:///src/components/tabs/autobuyers/AutobuyerToggles.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerToggles.vue?4c6d","webpack:///./src/components/tabs/autobuyers/AutobuyerToggles.vue","webpack:///./src/components/tabs/autobuyers/BigCrunchAutobuyerBox.vue?3a0e","webpack:///./src/components/tabs/autobuyers/AutobuyerBox.vue?6f7e","webpack:///./src/components/tabs/autobuyers/AutobuyerIntervalLabel.vue?7f50","webpack:///src/components/tabs/autobuyers/AutobuyerIntervalLabel.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerIntervalLabel.vue?d19f","webpack:///./src/components/tabs/autobuyers/AutobuyerIntervalLabel.vue","webpack:///src/components/tabs/autobuyers/AutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerBox.vue?c64c","webpack:///./src/components/tabs/autobuyers/AutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerDropdownEntry.vue?0077","webpack:///src/components/tabs/autobuyers/AutobuyerDropdownEntry.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerDropdownEntry.vue?cc60","webpack:///./src/components/tabs/autobuyers/AutobuyerDropdownEntry.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerIntervalButton.vue?de14","webpack:///src/components/tabs/autobuyers/AutobuyerIntervalButton.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerIntervalButton.vue?1967","webpack:///./src/components/tabs/autobuyers/AutobuyerIntervalButton.vue","webpack:///src/components/tabs/autobuyers/BigCrunchAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/BigCrunchAutobuyerBox.vue?dc25","webpack:///./src/components/tabs/autobuyers/BigCrunchAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/DimensionAutobuyerBox.vue?a362","webpack:///./src/components/tabs/autobuyers/DimensionBulkButton.vue?e5a9","webpack:///src/components/tabs/autobuyers/DimensionBulkButton.vue","webpack:///./src/components/tabs/autobuyers/DimensionBulkButton.vue?de3a","webpack:///./src/components/tabs/autobuyers/DimensionBulkButton.vue","webpack:///src/components/tabs/autobuyers/DimensionAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/DimensionAutobuyerBox.vue?5eeb","webpack:///./src/components/tabs/autobuyers/DimensionAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/DimensionBoostAutobuyerBox.vue?1a46","webpack:///src/components/tabs/autobuyers/DimensionBoostAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/DimensionBoostAutobuyerBox.vue?d47f","webpack:///./src/components/tabs/autobuyers/DimensionBoostAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/EternityAutobuyerBox.vue?4821","webpack:///src/components/tabs/autobuyers/EternityAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/EternityAutobuyerBox.vue?daa1","webpack:///./src/components/tabs/autobuyers/EternityAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/GalaxyAutobuyerBox.vue?3c1b","webpack:///src/components/tabs/autobuyers/GalaxyAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/GalaxyAutobuyerBox.vue?6dc8","webpack:///./src/components/tabs/autobuyers/GalaxyAutobuyerBox.vue","webpack:///./src/components/OpenModalHotkeysButton.vue?28df","webpack:///src/components/OpenModalHotkeysButton.vue","webpack:///./src/components/OpenModalHotkeysButton.vue?7cf9","webpack:///./src/components/OpenModalHotkeysButton.vue","webpack:///./src/components/tabs/autobuyers/RealityAutobuyerBox.vue?3ad8","webpack:///src/components/tabs/autobuyers/RealityAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/RealityAutobuyerBox.vue?3a01","webpack:///./src/components/tabs/autobuyers/RealityAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/SimpleAutobuyersMultiBox.vue?4513","webpack:///./src/components/tabs/autobuyers/MultipleAutobuyersBox.vue?0e2f","webpack:///./src/components/tabs/autobuyers/AutobuyerGroupToggleLabel.vue?cb09","webpack:///./src/components/tabs/autobuyers/AutobuyerToggleLabel.vue?7ec2","webpack:///src/components/tabs/autobuyers/AutobuyerToggleLabel.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerToggleLabel.vue?e42d","webpack:///./src/components/tabs/autobuyers/AutobuyerToggleLabel.vue","webpack:///src/components/tabs/autobuyers/AutobuyerGroupToggleLabel.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerGroupToggleLabel.vue?1075","webpack:///./src/components/tabs/autobuyers/AutobuyerGroupToggleLabel.vue","webpack:///./src/components/tabs/autobuyers/SingleAutobuyerInRow.vue?30ac","webpack:///./src/components/tabs/autobuyers/AutobuyerModeButton.vue?fa35","webpack:///src/components/tabs/autobuyers/AutobuyerModeButton.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerModeButton.vue?9ab7","webpack:///./src/components/tabs/autobuyers/AutobuyerModeButton.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerSingleToggleLabel.vue?ccf5","webpack:///src/components/tabs/autobuyers/AutobuyerSingleToggleLabel.vue","webpack:///./src/components/tabs/autobuyers/AutobuyerSingleToggleLabel.vue?2672","webpack:///./src/components/tabs/autobuyers/AutobuyerSingleToggleLabel.vue","webpack:///src/components/tabs/autobuyers/SingleAutobuyerInRow.vue","webpack:///./src/components/tabs/autobuyers/SingleAutobuyerInRow.vue?37d2","webpack:///./src/components/tabs/autobuyers/SingleAutobuyerInRow.vue","webpack:///src/components/tabs/autobuyers/MultipleAutobuyersBox.vue","webpack:///./src/components/tabs/autobuyers/MultipleAutobuyersBox.vue?dbfc","webpack:///./src/components/tabs/autobuyers/MultipleAutobuyersBox.vue","webpack:///./src/components/tabs/autobuyers/MultipleSingleAutobuyersGroup.vue?8a7b","webpack:///./src/components/tabs/autobuyers/SingleAutobuyerBox.vue?bb3f","webpack:///src/components/tabs/autobuyers/SingleAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/SingleAutobuyerBox.vue?10dd","webpack:///./src/components/tabs/autobuyers/SingleAutobuyerBox.vue","webpack:///src/components/tabs/autobuyers/MultipleSingleAutobuyersGroup.vue","webpack:///./src/components/tabs/autobuyers/MultipleSingleAutobuyersGroup.vue?daf7","webpack:///./src/components/tabs/autobuyers/MultipleSingleAutobuyersGroup.vue","webpack:///src/components/tabs/autobuyers/SimpleAutobuyersMultiBox.vue","webpack:///./src/components/tabs/autobuyers/SimpleAutobuyersMultiBox.vue?123e","webpack:///./src/components/tabs/autobuyers/SimpleAutobuyersMultiBox.vue","webpack:///./src/components/tabs/autobuyers/TickspeedAutobuyerBox.vue?337c","webpack:///src/components/tabs/autobuyers/TickspeedAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/TickspeedAutobuyerBox.vue?a923","webpack:///./src/components/tabs/autobuyers/TickspeedAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/MendingAutobuyerBox.vue?8209","webpack:///src/components/tabs/autobuyers/MendingAutobuyerBox.vue","webpack:///./src/components/tabs/autobuyers/MendingAutobuyerBox.vue?d4b9","webpack:///./src/components/tabs/autobuyers/MendingAutobuyerBox.vue","webpack:///src/components/tabs/autobuyers/AutobuyersTab.vue","webpack:///./src/components/tabs/autobuyers/AutobuyersTab.vue?5b13","webpack:///./src/components/tabs/autobuyers/AutobuyersTab.vue","webpack:///./src/components/tabs/automator/AutomatorTab.vue?e13c","webpack:///./src/components/tabs/automator/AutomatorEditor.vue?19e7","webpack:///./src/components/tabs/automator/AutomatorControls.vue?dc07","webpack:///./src/components/tabs/automator/AutomatorModeSwitch.vue?8011","webpack:///src/components/tabs/automator/AutomatorModeSwitch.vue","webpack:///./src/components/tabs/automator/AutomatorModeSwitch.vue?dfe8","webpack:///./src/components/tabs/automator/AutomatorModeSwitch.vue","webpack:///src/components/tabs/automator/AutomatorControls.vue","webpack:///./src/components/tabs/automator/AutomatorControls.vue?5ef8","webpack:///./src/components/tabs/automator/AutomatorControls.vue","webpack:///src/components/tabs/automator/AutomatorEditor.vue","webpack:///./src/components/tabs/automator/AutomatorEditor.vue?e811","webpack:///./src/components/tabs/automator/AutomatorEditor.vue","webpack:///./src/components/tabs/automator/AutomatorPointsList.vue?25d5","webpack:///src/components/tabs/automator/AutomatorPointsList.vue","webpack:///./src/components/tabs/automator/AutomatorPointsList.vue?61bd","webpack:///./src/components/tabs/automator/AutomatorPointsList.vue","webpack:///src/components/tabs/automator/AutomatorTab.vue","webpack:///./src/components/tabs/automator/AutomatorTab.vue?33ca","webpack:///./src/components/tabs/automator/AutomatorTab.vue","webpack:///./src/components/tabs/black-hole/BlackHoleTab.vue?be7f","webpack:///./src/components/tabs/black-hole/black-hole-animation.js","webpack:///./src/components/tabs/black-hole/BlackHoleChargingSliders.vue?bb61","webpack:///./src/components/SliderComponent.vue?6d15","webpack:///./src/components/PlusMinusButton.vue?0384","webpack:///src/components/PlusMinusButton.vue","webpack:///./src/components/PlusMinusButton.vue?82e2","webpack:///./src/components/PlusMinusButton.vue","webpack:///src/components/SliderComponent.vue","webpack:///./src/components/SliderComponent.vue?aedb","webpack:///./src/components/SliderComponent.vue","webpack:///src/components/tabs/black-hole/BlackHoleChargingSliders.vue","webpack:///./src/components/tabs/black-hole/BlackHoleChargingSliders.vue?4d59","webpack:///./src/components/tabs/black-hole/BlackHoleChargingSliders.vue","webpack:///./src/components/tabs/black-hole/BlackHoleStateRow.vue?dce3","webpack:///src/components/tabs/black-hole/BlackHoleStateRow.vue","webpack:///./src/components/tabs/black-hole/BlackHoleStateRow.vue?03d1","webpack:///./src/components/tabs/black-hole/BlackHoleStateRow.vue","webpack:///./src/components/tabs/black-hole/BlackHoleUnlockButton.vue?7f66","webpack:///src/components/tabs/black-hole/BlackHoleUnlockButton.vue","webpack:///./src/components/tabs/black-hole/BlackHoleUnlockButton.vue?7c8c","webpack:///./src/components/tabs/black-hole/BlackHoleUnlockButton.vue","webpack:///./src/components/tabs/black-hole/BlackHoleUpgradeRow.vue?5aa6","webpack:///./src/components/tabs/black-hole/BlackHoleUpgradeButton.vue?5cf8","webpack:///./src/components/CostDisplay.vue?f938","webpack:///src/components/CostDisplay.vue","webpack:///./src/components/CostDisplay.vue?5254","webpack:///./src/components/CostDisplay.vue","webpack:///./src/components/DescriptionDisplay.vue?6d6a","webpack:///src/components/DescriptionDisplay.vue","webpack:///./src/components/DescriptionDisplay.vue?b557","webpack:///./src/components/DescriptionDisplay.vue","webpack:///src/components/tabs/black-hole/BlackHoleUpgradeButton.vue","webpack:///./src/components/tabs/black-hole/BlackHoleUpgradeButton.vue?5fa2","webpack:///./src/components/tabs/black-hole/BlackHoleUpgradeButton.vue","webpack:///src/components/tabs/black-hole/BlackHoleUpgradeRow.vue","webpack:///./src/components/tabs/black-hole/BlackHoleUpgradeRow.vue?215c","webpack:///./src/components/tabs/black-hole/BlackHoleUpgradeRow.vue","webpack:///./src/components/tabs/black-hole/ExpoBlackHoleUpgradeRow.vue?d844","webpack:///./src/components/tabs/black-hole/ExpoBlackHoleUpgradeButton.vue?ee43","webpack:///src/components/tabs/black-hole/ExpoBlackHoleUpgradeButton.vue","webpack:///./src/components/tabs/black-hole/ExpoBlackHoleUpgradeButton.vue?9b5b","webpack:///./src/components/tabs/black-hole/ExpoBlackHoleUpgradeButton.vue","webpack:///src/components/tabs/black-hole/ExpoBlackHoleUpgradeRow.vue","webpack:///./src/components/tabs/black-hole/ExpoBlackHoleUpgradeRow.vue?48ac","webpack:///./src/components/tabs/black-hole/ExpoBlackHoleUpgradeRow.vue","webpack:///src/components/tabs/black-hole/BlackHoleTab.vue","webpack:///./src/components/tabs/black-hole/BlackHoleTab.vue?c6c2","webpack:///./src/components/tabs/black-hole/BlackHoleTab.vue","webpack:///./src/components/tabs/break-infinity/BreakInfinityTab.vue?34a1","webpack:///./src/components/tabs/break-infinity/BreakInfinityButton.vue?e40d","webpack:///src/components/tabs/break-infinity/BreakInfinityButton.vue","webpack:///./src/components/tabs/break-infinity/BreakInfinityButton.vue?4ce4","webpack:///./src/components/tabs/break-infinity/BreakInfinityButton.vue","webpack:///./src/components/InfinityUpgradeButton.vue?23fc","webpack:///src/components/InfinityUpgradeButton.vue","webpack:///./src/components/InfinityUpgradeButton.vue?af10","webpack:///./src/components/InfinityUpgradeButton.vue","webpack:///src/components/tabs/break-infinity/BreakInfinityTab.vue","webpack:///./src/components/tabs/break-infinity/BreakInfinityTab.vue?516f","webpack:///./src/components/tabs/break-infinity/BreakInfinityTab.vue","webpack:///./src/components/tabs/celestial-navigation/CelestialNavigationTab.vue?a531","webpack:///./src/components/tabs/celestial-navigation/NodeBackground.vue?7881","webpack:///./src/components/tabs/celestial-navigation/svg-ring-path.js","webpack:///src/components/tabs/celestial-navigation/NodeBackground.vue","webpack:///./src/components/tabs/celestial-navigation/NodeBackground.vue?7bc5","webpack:///./src/components/tabs/celestial-navigation/NodeBackground.vue","webpack:///./src/components/tabs/celestial-navigation/NodeOverlay.vue?27c1","webpack:///src/components/tabs/celestial-navigation/NodeOverlay.vue","webpack:///./src/components/tabs/celestial-navigation/NodeOverlay.vue?78db","webpack:///./src/components/tabs/celestial-navigation/NodeOverlay.vue","webpack:///./src/components/tabs/celestial-navigation/NodeRing.vue?ac42","webpack:///src/components/tabs/celestial-navigation/NodeRing.vue","webpack:///./src/components/tabs/celestial-navigation/NodeRing.vue?f70f","webpack:///./src/components/tabs/celestial-navigation/NodeRing.vue","webpack:///./src/components/tabs/celestial-navigation/ProgressConnector.vue?afef","webpack:///src/components/tabs/celestial-navigation/ProgressConnector.vue","webpack:///./src/components/tabs/celestial-navigation/ProgressConnector.vue?4a6b","webpack:///./src/components/tabs/celestial-navigation/ProgressConnector.vue","webpack:///src/components/tabs/celestial-navigation/CelestialNavigationTab.vue","webpack:///./src/components/tabs/celestial-navigation/CelestialNavigationTab.vue?d3c0","webpack:///./src/components/tabs/celestial-navigation/CelestialNavigationTab.vue","webpack:///./src/components/tabs/challenge-records/ChallengeRecordsTab.vue?2d48","webpack:///./src/components/tabs/challenge-records/ChallengeRecordsList.vue?bc31","webpack:///src/components/tabs/challenge-records/ChallengeRecordsList.vue","webpack:///./src/components/tabs/challenge-records/ChallengeRecordsList.vue?ba6a","webpack:///./src/components/tabs/challenge-records/ChallengeRecordsList.vue","webpack:///src/components/tabs/challenge-records/ChallengeRecordsTab.vue","webpack:///./src/components/tabs/challenge-records/ChallengeRecordsTab.vue?0b5c","webpack:///./src/components/tabs/challenge-records/ChallengeRecordsTab.vue","webpack:///./src/components/tabs/celestial-effarig/EffarigTab.vue?0cc4","webpack:///./src/components/CelestialQuoteHistory.vue?6480","webpack:///src/components/CelestialQuoteHistory.vue","webpack:///./src/components/CelestialQuoteHistory.vue?8a99","webpack:///./src/components/CelestialQuoteHistory.vue","webpack:///./src/components/tabs/celestial-effarig/EffarigRunUnlockReward.vue?fab2","webpack:///src/components/tabs/celestial-effarig/EffarigRunUnlockReward.vue","webpack:///./src/components/tabs/celestial-effarig/EffarigRunUnlockReward.vue?f7b8","webpack:///./src/components/tabs/celestial-effarig/EffarigRunUnlockReward.vue","webpack:///./src/components/tabs/celestial-effarig/EffarigUnlockButton.vue?bc8b","webpack:///src/components/tabs/celestial-effarig/EffarigUnlockButton.vue","webpack:///./src/components/tabs/celestial-effarig/EffarigUnlockButton.vue?1043","webpack:///./src/components/tabs/celestial-effarig/EffarigUnlockButton.vue","webpack:///src/components/tabs/celestial-effarig/EffarigTab.vue","webpack:///./src/components/tabs/celestial-effarig/EffarigTab.vue?863f","webpack:///./src/components/tabs/celestial-effarig/EffarigTab.vue","webpack:///./src/components/tabs/celestial-enslaved/EnslavedTab.vue?d930","webpack:///src/components/tabs/celestial-enslaved/EnslavedTab.vue","webpack:///./src/components/tabs/celestial-enslaved/EnslavedTab.vue?dced","webpack:///./src/components/tabs/celestial-enslaved/EnslavedTab.vue","webpack:///./src/components/tabs/eternity-challenges/EternityChallengesTab.vue?c41a","webpack:///./src/components/ChallengeGrid.vue?aa78","webpack:///./src/components/ChallengeGridCell.vue?ba20","webpack:///src/components/ChallengeGridCell.vue","webpack:///./src/components/ChallengeGridCell.vue?604b","webpack:///./src/components/ChallengeGridCell.vue","webpack:///src/components/ChallengeGrid.vue","webpack:///./src/components/ChallengeGrid.vue?76e8","webpack:///./src/components/ChallengeGrid.vue","webpack:///./src/components/ChallengeTabHeader.vue?4c98","webpack:///src/components/ChallengeTabHeader.vue","webpack:///./src/components/ChallengeTabHeader.vue?f6b1","webpack:///./src/components/ChallengeTabHeader.vue","webpack:///./src/components/tabs/eternity-challenges/EternityChallengeBox.vue?cd54","webpack:///./src/components/tabs/eternity-challenges/EternityChallengeBoxWrapper.vue?deba","webpack:///src/components/tabs/eternity-challenges/EternityChallengeBoxWrapper.vue","webpack:///./src/components/tabs/eternity-challenges/EternityChallengeBoxWrapper.vue?4400","webpack:///./src/components/tabs/eternity-challenges/EternityChallengeBoxWrapper.vue","webpack:///src/components/tabs/eternity-challenges/EternityChallengeBox.vue","webpack:///./src/components/tabs/eternity-challenges/EternityChallengeBox.vue?f4de","webpack:///./src/components/tabs/eternity-challenges/EternityChallengeBox.vue","webpack:///src/components/tabs/eternity-challenges/EternityChallengesTab.vue","webpack:///./src/components/tabs/eternity-challenges/EternityChallengesTab.vue?db3a","webpack:///./src/components/tabs/eternity-challenges/EternityChallengesTab.vue","webpack:///./src/components/tabs/eternity-milestones/EternityMilestonesTab.vue?78bc","webpack:///./src/components/tabs/eternity-milestones/EternityMilestoneButton.vue?a225","webpack:///src/components/tabs/eternity-milestones/EternityMilestoneButton.vue","webpack:///./src/components/tabs/eternity-milestones/EternityMilestoneButton.vue?2113","webpack:///./src/components/tabs/eternity-milestones/EternityMilestoneButton.vue","webpack:///src/components/tabs/eternity-milestones/EternityMilestonesTab.vue","webpack:///./src/components/tabs/eternity-milestones/EternityMilestonesTab.vue?9275","webpack:///./src/components/tabs/eternity-milestones/EternityMilestonesTab.vue","webpack:///./src/components/tabs/eternity-upgrades/EternityUpgradesTab.vue?684f","webpack:///./src/components/tabs/eternity-upgrades/EPMultiplierButton.vue?97f4","webpack:///src/components/tabs/eternity-upgrades/EPMultiplierButton.vue","webpack:///./src/components/tabs/eternity-upgrades/EPMultiplierButton.vue?206b","webpack:///./src/components/tabs/eternity-upgrades/EPMultiplierButton.vue","webpack:///./src/components/tabs/eternity-upgrades/EternityUpgradeButton.vue?7642","webpack:///src/components/tabs/eternity-upgrades/EternityUpgradeButton.vue","webpack:///./src/components/tabs/eternity-upgrades/EternityUpgradeButton.vue?02b0","webpack:///./src/components/tabs/eternity-upgrades/EternityUpgradeButton.vue","webpack:///src/components/tabs/eternity-upgrades/EternityUpgradesTab.vue","webpack:///./src/components/tabs/eternity-upgrades/EternityUpgradesTab.vue?6c97","webpack:///./src/components/tabs/eternity-upgrades/EternityUpgradesTab.vue","webpack:///./src/components/tabs/glyph-set-records/GlyphSetRecordsTab.vue?741b","webpack:///./src/components/GlyphSetPreview.vue?0dc7","webpack:///./src/components/GlyphComponent.vue?fe62","webpack:///./src/components/GlyphTooltip.vue?836a","webpack:///./src/components/GlyphTooltipEffect.vue?68bb","webpack:///src/components/GlyphTooltipEffect.vue","webpack:///./src/components/GlyphTooltipEffect.vue?1f43","webpack:///./src/components/GlyphTooltipEffect.vue","webpack:///src/components/GlyphTooltip.vue","webpack:///./src/components/GlyphTooltip.vue?7982","webpack:///./src/components/GlyphTooltip.vue","webpack:///src/components/GlyphComponent.vue","webpack:///./src/components/GlyphComponent.vue?39b2","webpack:///./src/components/GlyphComponent.vue","webpack:///./src/components/GlyphSetName.vue?ab71","webpack:///src/components/GlyphSetName.vue","webpack:///./src/components/GlyphSetName.vue?8452","webpack:///./src/components/GlyphSetName.vue","webpack:///src/components/GlyphSetPreview.vue","webpack:///./src/components/GlyphSetPreview.vue?b5a9","webpack:///./src/components/GlyphSetPreview.vue","webpack:///src/components/tabs/glyph-set-records/GlyphSetRecordsTab.vue","webpack:///./src/components/tabs/glyph-set-records/GlyphSetRecordsTab.vue?926d","webpack:///./src/components/tabs/glyph-set-records/GlyphSetRecordsTab.vue","webpack:///./src/components/tabs/glyphs/GlyphsTab.vue?f808","webpack:///./src/components/tabs/glyphs/CurrentGlyphEffects.vue?1d6f","webpack:///./src/components/tabs/glyphs/CurrentGlyphEffect.vue?21e8","webpack:///src/components/tabs/glyphs/CurrentGlyphEffect.vue","webpack:///./src/components/tabs/glyphs/CurrentGlyphEffect.vue?dd06","webpack:///./src/components/tabs/glyphs/CurrentGlyphEffect.vue","webpack:///src/components/tabs/glyphs/CurrentGlyphEffects.vue","webpack:///./src/components/tabs/glyphs/CurrentGlyphEffects.vue?290e","webpack:///./src/components/tabs/glyphs/CurrentGlyphEffects.vue","webpack:///./src/components/tabs/glyphs/EquippedGlyphs.vue?a03e","webpack:///src/components/tabs/glyphs/EquippedGlyphs.vue","webpack:///./src/components/tabs/glyphs/EquippedGlyphs.vue?74cd","webpack:///./src/components/tabs/glyphs/EquippedGlyphs.vue","webpack:///./src/components/tabs/glyphs/GlyphInventory.vue?13ac","webpack:///src/components/tabs/glyphs/GlyphInventory.vue","webpack:///./src/components/tabs/glyphs/GlyphInventory.vue?fe66","webpack:///./src/components/tabs/glyphs/GlyphInventory.vue","webpack:///./src/components/tabs/glyphs/GlyphLevelsAndWeights.vue?28fd","webpack:///./src/components/ToggleButton.vue?6071","webpack:///src/components/ToggleButton.vue","webpack:///./src/components/ToggleButton.vue?548a","webpack:///./src/components/ToggleButton.vue","webpack:///src/components/tabs/glyphs/GlyphLevelsAndWeights.vue","webpack:///./src/components/tabs/glyphs/GlyphLevelsAndWeights.vue?26f2","webpack:///./src/components/tabs/glyphs/GlyphLevelsAndWeights.vue","webpack:///./src/components/tabs/glyphs/GlyphPeek.vue?9338","webpack:///src/components/tabs/glyphs/GlyphPeek.vue","webpack:///./src/components/tabs/glyphs/GlyphPeek.vue?79e8","webpack:///./src/components/tabs/glyphs/GlyphPeek.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphTabSidebar.vue?e5ab","webpack:///./src/components/tabs/glyphs/sidebar/GlyphFilterPanel.vue?e48e","webpack:///./src/components/tabs/glyphs/sidebar/AutoSacrificeAdvancedTab.vue?c400","webpack:///src/components/tabs/glyphs/sidebar/AutoSacrificeAdvancedTab.vue","webpack:///./src/components/tabs/glyphs/sidebar/AutoSacrificeAdvancedTab.vue?77a4","webpack:///./src/components/tabs/glyphs/sidebar/AutoSacrificeAdvancedTab.vue","webpack:///./src/components/tabs/glyphs/sidebar/AutoSacrificeEffectTab.vue?1b4b","webpack:///./src/components/tabs/glyphs/sidebar/SelectedEffectToggle.vue?4488","webpack:///src/components/tabs/glyphs/sidebar/SelectedEffectToggle.vue","webpack:///./src/components/tabs/glyphs/sidebar/SelectedEffectToggle.vue?8faf","webpack:///./src/components/tabs/glyphs/sidebar/SelectedEffectToggle.vue","webpack:///src/components/tabs/glyphs/sidebar/AutoSacrificeEffectTab.vue","webpack:///./src/components/tabs/glyphs/sidebar/AutoSacrificeEffectTab.vue?d17e","webpack:///./src/components/tabs/glyphs/sidebar/AutoSacrificeEffectTab.vue","webpack:///src/components/tabs/glyphs/sidebar/GlyphFilterPanel.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphFilterPanel.vue?ea1d","webpack:///./src/components/tabs/glyphs/sidebar/GlyphFilterPanel.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphInventoryManagementPanel.vue?47c8","webpack:///./src/components/tabs/glyphs/sidebar/GlyphAutosortButtonGroup.vue?6e0b","webpack:///./src/components/ButtonCycle.vue?d299","webpack:///src/components/ButtonCycle.vue","webpack:///./src/components/ButtonCycle.vue?ab4a","webpack:///./src/components/ButtonCycle.vue","webpack:///src/components/tabs/glyphs/sidebar/GlyphAutosortButtonGroup.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphAutosortButtonGroup.vue?ed89","webpack:///./src/components/tabs/glyphs/sidebar/GlyphAutosortButtonGroup.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphCleanButtonGroup.vue?a0ae","webpack:///src/components/tabs/glyphs/sidebar/GlyphCleanButtonGroup.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphCleanButtonGroup.vue?1f14","webpack:///./src/components/tabs/glyphs/sidebar/GlyphCleanButtonGroup.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphProtectedRowButtonGroup.vue?8aca","webpack:///src/components/tabs/glyphs/sidebar/GlyphProtectedRowButtonGroup.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphProtectedRowButtonGroup.vue?4e7b","webpack:///./src/components/tabs/glyphs/sidebar/GlyphProtectedRowButtonGroup.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphSortButtonGroup.vue?387c","webpack:///src/components/tabs/glyphs/sidebar/GlyphSortButtonGroup.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphSortButtonGroup.vue?bbb4","webpack:///./src/components/tabs/glyphs/sidebar/GlyphSortButtonGroup.vue","webpack:///src/components/tabs/glyphs/sidebar/GlyphInventoryManagementPanel.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphInventoryManagementPanel.vue?6e6e","webpack:///./src/components/tabs/glyphs/sidebar/GlyphInventoryManagementPanel.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphRejectionPanel.vue?9910","webpack:///src/components/tabs/glyphs/sidebar/GlyphRejectionPanel.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphRejectionPanel.vue?b499","webpack:///./src/components/tabs/glyphs/sidebar/GlyphRejectionPanel.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphSetSavePanel.vue?b6a4","webpack:///src/components/tabs/glyphs/sidebar/GlyphSetSavePanel.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphSetSavePanel.vue?3deb","webpack:///./src/components/tabs/glyphs/sidebar/GlyphSetSavePanel.vue","webpack:///src/components/tabs/glyphs/sidebar/GlyphTabSidebar.vue","webpack:///./src/components/tabs/glyphs/sidebar/GlyphTabSidebar.vue?3c32","webpack:///./src/components/tabs/glyphs/sidebar/GlyphTabSidebar.vue","webpack:///./src/components/tabs/glyphs/RealityAmplifyButton.vue?de71","webpack:///src/components/tabs/glyphs/RealityAmplifyButton.vue","webpack:///./src/components/tabs/glyphs/RealityAmplifyButton.vue?205d","webpack:///./src/components/tabs/glyphs/RealityAmplifyButton.vue","webpack:///./src/components/tabs/glyphs/RealityReminder.vue?4e07","webpack:///src/components/tabs/glyphs/RealityReminder.vue","webpack:///./src/components/tabs/glyphs/RealityReminder.vue?3333","webpack:///./src/components/tabs/glyphs/RealityReminder.vue","webpack:///./src/components/tabs/glyphs/ResetRealityButton.vue?9de2","webpack:///src/components/tabs/glyphs/ResetRealityButton.vue","webpack:///./src/components/tabs/glyphs/ResetRealityButton.vue?c427","webpack:///./src/components/tabs/glyphs/ResetRealityButton.vue","webpack:///./src/components/tabs/glyphs/SacrificedGlyphs.vue?d3f1","webpack:///./src/components/tabs/glyphs/TypeSacrifice.vue?69ef","webpack:///src/components/tabs/glyphs/TypeSacrifice.vue","webpack:///./src/components/tabs/glyphs/TypeSacrifice.vue?10d5","webpack:///./src/components/tabs/glyphs/TypeSacrifice.vue","webpack:///src/components/tabs/glyphs/SacrificedGlyphs.vue","webpack:///./src/components/tabs/glyphs/SacrificedGlyphs.vue?eb8c","webpack:///./src/components/tabs/glyphs/SacrificedGlyphs.vue","webpack:///./src/components/tabs/glyphs/SingleGlyphCustomzationPanel.vue?d2be","webpack:///src/components/tabs/glyphs/SingleGlyphCustomzationPanel.vue","webpack:///./src/components/tabs/glyphs/SingleGlyphCustomzationPanel.vue?d433","webpack:///./src/components/tabs/glyphs/SingleGlyphCustomzationPanel.vue","webpack:///src/components/tabs/glyphs/GlyphsTab.vue","webpack:///./src/components/tabs/glyphs/GlyphsTab.vue?1047","webpack:///./src/components/tabs/glyphs/GlyphsTab.vue","webpack:///./src/components/tabs/imaginary-upgrades/ImaginaryUpgradesTab.vue?272b","webpack:///./src/components/tabs/imaginary-upgrades/ImaginaryUpgradeButton.vue?4348","webpack:///src/components/tabs/imaginary-upgrades/ImaginaryUpgradeButton.vue","webpack:///./src/components/tabs/imaginary-upgrades/ImaginaryUpgradeButton.vue?a7b0","webpack:///./src/components/tabs/imaginary-upgrades/ImaginaryUpgradeButton.vue","webpack:///src/components/tabs/imaginary-upgrades/ImaginaryUpgradesTab.vue","webpack:///./src/components/tabs/imaginary-upgrades/ImaginaryUpgradesTab.vue?38da","webpack:///./src/components/tabs/imaginary-upgrades/ImaginaryUpgradesTab.vue","webpack:///./src/components/tabs/infinity-challenges/InfinityChallengesTab.vue?e371","webpack:///./src/components/tabs/infinity-challenges/InfinityChallengeBox.vue?0216","webpack:///./src/components/ChallengeBox.vue?020c","webpack:///src/components/ChallengeBox.vue","webpack:///./src/components/ChallengeBox.vue?716d","webpack:///./src/components/ChallengeBox.vue","webpack:///src/components/tabs/infinity-challenges/InfinityChallengeBox.vue","webpack:///./src/components/tabs/infinity-challenges/InfinityChallengeBox.vue?6b0a","webpack:///./src/components/tabs/infinity-challenges/InfinityChallengeBox.vue","webpack:///src/components/tabs/infinity-challenges/InfinityChallengesTab.vue","webpack:///./src/components/tabs/infinity-challenges/InfinityChallengesTab.vue?0f4e","webpack:///./src/components/tabs/infinity-challenges/InfinityChallengesTab.vue","webpack:///./src/components/tabs/infinity-dimensions/InfinityDimensionsTab.vue?d01c","webpack:///./src/components/tabs/infinity-dimensions/ClassicInfinityDimensionsTab.vue?1c4c","webpack:///./src/core/eternity-challenge.js","webpack:///./src/components/tabs/infinity-dimensions/ClassicInfinityDimensionRow.vue?21eb","webpack:///src/components/tabs/infinity-dimensions/ClassicInfinityDimensionRow.vue","webpack:///./src/components/tabs/infinity-dimensions/ClassicInfinityDimensionRow.vue?d4ff","webpack:///./src/components/tabs/infinity-dimensions/ClassicInfinityDimensionRow.vue","webpack:///src/components/tabs/infinity-dimensions/ClassicInfinityDimensionsTab.vue","webpack:///./src/components/tabs/infinity-dimensions/ClassicInfinityDimensionsTab.vue?0b20","webpack:///./src/components/tabs/infinity-dimensions/ClassicInfinityDimensionsTab.vue","webpack:///./src/components/tabs/infinity-dimensions/ModernInfinityDimensionsTab.vue?c8dc","webpack:///./src/components/tabs/infinity-dimensions/ModernInfinityDimensionRow.vue?9068","webpack:///src/components/tabs/infinity-dimensions/ModernInfinityDimensionRow.vue","webpack:///./src/components/tabs/infinity-dimensions/ModernInfinityDimensionRow.vue?34b8","webpack:///./src/components/tabs/infinity-dimensions/ModernInfinityDimensionRow.vue","webpack:///src/components/tabs/infinity-dimensions/ModernInfinityDimensionsTab.vue","webpack:///./src/components/tabs/infinity-dimensions/ModernInfinityDimensionsTab.vue?be8c","webpack:///./src/components/tabs/infinity-dimensions/ModernInfinityDimensionsTab.vue","webpack:///src/components/tabs/infinity-dimensions/InfinityDimensionsTab.vue","webpack:///./src/components/tabs/infinity-dimensions/InfinityDimensionsTab.vue?fb06","webpack:///./src/components/tabs/infinity-dimensions/InfinityDimensionsTab.vue","webpack:///./src/components/tabs/infinity-upgrades/InfinityUpgradesTab.vue?1483","webpack:///./src/components/tabs/infinity-upgrades/IpMultiplierButton.vue?509f","webpack:///src/components/tabs/infinity-upgrades/IpMultiplierButton.vue","webpack:///./src/components/tabs/infinity-upgrades/IpMultiplierButton.vue?a6ca","webpack:///./src/components/tabs/infinity-upgrades/IpMultiplierButton.vue","webpack:///src/components/tabs/infinity-upgrades/InfinityUpgradesTab.vue","webpack:///./src/components/tabs/infinity-upgrades/InfinityUpgradesTab.vue?58f3","webpack:///./src/components/tabs/infinity-upgrades/InfinityUpgradesTab.vue","webpack:///./src/components/tabs/celestial-laitela/LaitelaTab.vue?09c3","webpack:///./src/components/tabs/celestial-laitela/AnnihilationButton.vue?dbb3","webpack:///src/components/tabs/celestial-laitela/AnnihilationButton.vue","webpack:///./src/components/tabs/celestial-laitela/AnnihilationButton.vue?0528","webpack:///./src/components/tabs/celestial-laitela/AnnihilationButton.vue","webpack:///./src/components/tabs/celestial-laitela/DarkMatterDimensionGroup.vue?59ee","webpack:///./src/components/tabs/celestial-laitela/DarkMatterDimensionRow.vue?3c49","webpack:///src/components/tabs/celestial-laitela/DarkMatterDimensionRow.vue","webpack:///./src/components/tabs/celestial-laitela/DarkMatterDimensionRow.vue?0718","webpack:///./src/components/tabs/celestial-laitela/DarkMatterDimensionRow.vue","webpack:///src/components/tabs/celestial-laitela/DarkMatterDimensionGroup.vue","webpack:///./src/components/tabs/celestial-laitela/DarkMatterDimensionGroup.vue?8999","webpack:///./src/components/tabs/celestial-laitela/DarkMatterDimensionGroup.vue","webpack:///./src/components/tabs/celestial-laitela/LaitelaAutobuyerPane.vue?b725","webpack:///src/components/tabs/celestial-laitela/LaitelaAutobuyerPane.vue","webpack:///./src/components/tabs/celestial-laitela/LaitelaAutobuyerPane.vue?0cd1","webpack:///./src/components/tabs/celestial-laitela/LaitelaAutobuyerPane.vue","webpack:///./src/components/tabs/celestial-laitela/LaitelaRunButton.vue?7a39","webpack:///src/components/tabs/celestial-laitela/LaitelaRunButton.vue","webpack:///./src/components/tabs/celestial-laitela/LaitelaRunButton.vue?0dc7","webpack:///./src/components/tabs/celestial-laitela/LaitelaRunButton.vue","webpack:///./src/components/tabs/celestial-laitela/SingularityMilestonePane.vue?949f","webpack:///./src/components/tabs/celestial-laitela/SingularityMilestoneComponent.vue?7c81","webpack:///src/components/tabs/celestial-laitela/SingularityMilestoneComponent.vue","webpack:///./src/components/tabs/celestial-laitela/SingularityMilestoneComponent.vue?9252","webpack:///./src/components/tabs/celestial-laitela/SingularityMilestoneComponent.vue","webpack:///src/components/tabs/celestial-laitela/SingularityMilestonePane.vue","webpack:///./src/components/tabs/celestial-laitela/SingularityMilestonePane.vue?992a","webpack:///./src/components/tabs/celestial-laitela/SingularityMilestonePane.vue","webpack:///./src/components/tabs/celestial-laitela/SingularityPane.vue?b1bb","webpack:///src/components/tabs/celestial-laitela/SingularityPane.vue","webpack:///./src/components/tabs/celestial-laitela/SingularityPane.vue?4494","webpack:///./src/components/tabs/celestial-laitela/SingularityPane.vue","webpack:///src/components/tabs/celestial-laitela/LaitelaTab.vue","webpack:///./src/components/tabs/celestial-laitela/LaitelaTab.vue?4c90","webpack:///./src/components/tabs/celestial-laitela/LaitelaTab.vue","webpack:///./src/components/tabs/statistics/MultiplierBreakdownTab.vue?d154","webpack:///./src/components/tabs/statistics/breakdown-entry-info.js","webpack:///./src/components/tabs/statistics/MultiplierBreakdownEntry.vue?7571","webpack:///./src/components/tabs/statistics/breakdown-entry-info-group.js","webpack:///./src/components/tabs/statistics/percentage-rolling-average.js","webpack:///src/components/tabs/statistics/MultiplierBreakdownEntry.vue","webpack:///./src/components/tabs/statistics/MultiplierBreakdownEntry.vue?9ad6","webpack:///./src/components/tabs/statistics/MultiplierBreakdownEntry.vue","webpack:///src/components/tabs/statistics/MultiplierBreakdownTab.vue","webpack:///./src/components/tabs/statistics/MultiplierBreakdownTab.vue?ac10","webpack:///./src/components/tabs/statistics/MultiplierBreakdownTab.vue","webpack:///./src/components/tabs/normal-achievements/NormalAchievementsTab.vue?ad3a","webpack:///./src/components/tabs/normal-achievements/NormalAchievementRow.vue?5cfc","webpack:///./src/components/tabs/normal-achievements/NormalAchievement.vue?6404","webpack:///src/components/tabs/normal-achievements/NormalAchievement.vue","webpack:///./src/components/tabs/normal-achievements/NormalAchievement.vue?5312","webpack:///./src/components/tabs/normal-achievements/NormalAchievement.vue","webpack:///src/components/tabs/normal-achievements/NormalAchievementRow.vue","webpack:///./src/components/tabs/normal-achievements/NormalAchievementRow.vue?ae68","webpack:///./src/components/tabs/normal-achievements/NormalAchievementRow.vue","webpack:///./src/components/tabs/normal-achievements/SwapAchievementImagesButton.vue?d6a4","webpack:///src/components/tabs/normal-achievements/SwapAchievementImagesButton.vue","webpack:///./src/components/tabs/normal-achievements/SwapAchievementImagesButton.vue?4f84","webpack:///./src/components/tabs/normal-achievements/SwapAchievementImagesButton.vue","webpack:///src/components/tabs/normal-achievements/NormalAchievementsTab.vue","webpack:///./src/components/tabs/normal-achievements/NormalAchievementsTab.vue?5020","webpack:///./src/components/tabs/normal-achievements/NormalAchievementsTab.vue","webpack:///./src/components/tabs/normal-challenges/NormalChallengesTab.vue?67a6","webpack:///./src/components/tabs/normal-challenges/NormalChallengeBox.vue?2e9d","webpack:///src/components/tabs/normal-challenges/NormalChallengeBox.vue","webpack:///./src/components/tabs/normal-challenges/NormalChallengeBox.vue?aa4b","webpack:///./src/components/tabs/normal-challenges/NormalChallengeBox.vue","webpack:///src/components/tabs/normal-challenges/NormalChallengesTab.vue","webpack:///./src/components/tabs/normal-challenges/NormalChallengesTab.vue?0d21","webpack:///./src/components/tabs/normal-challenges/NormalChallengesTab.vue","webpack:///./src/components/tabs/options-gameplay/OptionsGameplayTab.vue?7720","webpack:///./src/components/OptionsButton.vue?691e","webpack:///src/components/OptionsButton.vue","webpack:///./src/components/OptionsButton.vue?f62c","webpack:///./src/components/OptionsButton.vue","webpack:///src/components/tabs/options-gameplay/OptionsGameplayTab.vue","webpack:///./src/components/tabs/options-gameplay/OptionsGameplayTab.vue?57db","webpack:///./src/components/tabs/options-gameplay/OptionsGameplayTab.vue","webpack:///./src/components/tabs/options-saving/OptionsSavingTab.vue?764a","webpack:///./src/components/tabs/options-saving/AutosaveIntervalSlider.vue?7e6d","webpack:///src/components/tabs/options-saving/AutosaveIntervalSlider.vue","webpack:///./src/components/tabs/options-saving/AutosaveIntervalSlider.vue?58a8","webpack:///./src/components/tabs/options-saving/AutosaveIntervalSlider.vue","webpack:///./src/components/tabs/options-saving/SaveFileName.vue?a6e4","webpack:///src/components/tabs/options-saving/SaveFileName.vue","webpack:///./src/components/tabs/options-saving/SaveFileName.vue?605e","webpack:///./src/components/tabs/options-saving/SaveFileName.vue","webpack:///src/components/tabs/options-saving/OptionsSavingTab.vue","webpack:///./src/components/tabs/options-saving/OptionsSavingTab.vue?0d4b","webpack:///./src/components/tabs/options-saving/OptionsSavingTab.vue","webpack:///./src/components/tabs/options-visual/OptionsVisualTab.vue?969d","webpack:///./src/components/tabs/options-visual/SelectNotationDropdown.vue?935b","webpack:///src/components/tabs/options-visual/SelectNotationDropdown.vue","webpack:///./src/components/tabs/options-visual/SelectNotationDropdown.vue?eae9","webpack:///./src/components/tabs/options-visual/SelectNotationDropdown.vue","webpack:///./src/components/tabs/options-visual/SelectThemeDropdown.vue?e0be","webpack:///src/components/tabs/options-visual/SelectThemeDropdown.vue","webpack:///./src/components/tabs/options-visual/SelectThemeDropdown.vue?38a0","webpack:///./src/components/tabs/options-visual/SelectThemeDropdown.vue","webpack:///./src/components/tabs/options-visual/UpdateRateSlider.vue?928f","webpack:///src/components/tabs/options-visual/UpdateRateSlider.vue","webpack:///./src/components/tabs/options-visual/UpdateRateSlider.vue?86ef","webpack:///./src/components/tabs/options-visual/UpdateRateSlider.vue","webpack:///src/components/tabs/options-visual/OptionsVisualTab.vue","webpack:///./src/components/tabs/options-visual/OptionsVisualTab.vue?46c3","webpack:///./src/components/tabs/options-visual/OptionsVisualTab.vue","webpack:///./src/components/tabs/past-prestige-runs/PastPrestigeRunsTab.vue?904e","webpack:///./src/components/tabs/past-prestige-runs/PastPrestigeRunsContainer.vue?9523","webpack:///src/components/tabs/past-prestige-runs/PastPrestigeRunsContainer.vue","webpack:///./src/components/tabs/past-prestige-runs/PastPrestigeRunsContainer.vue?b673","webpack:///./src/components/tabs/past-prestige-runs/PastPrestigeRunsContainer.vue","webpack:///src/components/tabs/past-prestige-runs/PastPrestigeRunsTab.vue","webpack:///./src/components/tabs/past-prestige-runs/PastPrestigeRunsTab.vue?56f8","webpack:///./src/components/tabs/past-prestige-runs/PastPrestigeRunsTab.vue","webpack:///./src/components/tabs/celestial-pelle/PelleTab.vue?e486","webpack:///./src/components/tabs/celestial-pelle/PelleGalaxyGeneratorPanel.vue?65de","webpack:///./src/components/tabs/celestial-pelle/PelleUpgrade.vue?9f9c","webpack:///./src/components/CustomizeableTooltip.vue?1cc1","webpack:///src/components/CustomizeableTooltip.vue","webpack:///./src/components/CustomizeableTooltip.vue?9b21","webpack:///./src/components/CustomizeableTooltip.vue","webpack:///src/components/tabs/celestial-pelle/PelleUpgrade.vue","webpack:///./src/components/tabs/celestial-pelle/PelleUpgrade.vue?38b8","webpack:///./src/components/tabs/celestial-pelle/PelleUpgrade.vue","webpack:///src/components/tabs/celestial-pelle/PelleGalaxyGeneratorPanel.vue","webpack:///./src/components/tabs/celestial-pelle/PelleGalaxyGeneratorPanel.vue?8e98","webpack:///./src/components/tabs/celestial-pelle/PelleGalaxyGeneratorPanel.vue","webpack:///./src/components/tabs/celestial-pelle/PelleBarPanel.vue?4389","webpack:///./src/components/tabs/celestial-pelle/PelleRift.vue?ce35","webpack:///./src/components/tabs/celestial-pelle/PelleRiftBar.vue?c0b2","webpack:///src/components/tabs/celestial-pelle/PelleRiftBar.vue","webpack:///./src/components/tabs/celestial-pelle/PelleRiftBar.vue?5c90","webpack:///./src/components/tabs/celestial-pelle/PelleRiftBar.vue","webpack:///./src/components/tabs/celestial-pelle/PelleStrike.vue?8799","webpack:///src/components/tabs/celestial-pelle/PelleStrike.vue","webpack:///./src/components/tabs/celestial-pelle/PelleStrike.vue?5a93","webpack:///./src/components/tabs/celestial-pelle/PelleStrike.vue","webpack:///src/components/tabs/celestial-pelle/PelleRift.vue","webpack:///./src/components/tabs/celestial-pelle/PelleRift.vue?aff1","webpack:///./src/components/tabs/celestial-pelle/PelleRift.vue","webpack:///src/components/tabs/celestial-pelle/PelleBarPanel.vue","webpack:///./src/components/tabs/celestial-pelle/PelleBarPanel.vue?0cb5","webpack:///./src/components/tabs/celestial-pelle/PelleBarPanel.vue","webpack:///./src/components/tabs/celestial-pelle/PelleUpgradePanel.vue?3745","webpack:///./src/components/tabs/celestial-pelle/RemnantGainFactor.vue?530b","webpack:///src/components/tabs/celestial-pelle/RemnantGainFactor.vue","webpack:///./src/components/tabs/celestial-pelle/RemnantGainFactor.vue?6e32","webpack:///./src/components/tabs/celestial-pelle/RemnantGainFactor.vue","webpack:///src/components/tabs/celestial-pelle/PelleUpgradePanel.vue","webpack:///./src/components/tabs/celestial-pelle/PelleUpgradePanel.vue?68fa","webpack:///./src/components/tabs/celestial-pelle/PelleUpgradePanel.vue","webpack:///src/components/tabs/celestial-pelle/PelleTab.vue","webpack:///./src/components/tabs/celestial-pelle/PelleTab.vue?9be2","webpack:///./src/components/tabs/celestial-pelle/PelleTab.vue","webpack:///./src/components/tabs/speedrun-milestones/PreviousSpeedrunTab.vue?a433","webpack:///./src/components/tabs/speedrun-milestones/PreviousSpeedrunInfo.vue?a721","webpack:///src/components/tabs/speedrun-milestones/PreviousSpeedrunInfo.vue","webpack:///./src/components/tabs/speedrun-milestones/PreviousSpeedrunInfo.vue?d1a2","webpack:///./src/components/tabs/speedrun-milestones/PreviousSpeedrunInfo.vue","webpack:///./src/components/tabs/speedrun-milestones/SpeedrunMilestoneCompare.vue?cc7f","webpack:///src/components/tabs/speedrun-milestones/SpeedrunMilestoneCompare.vue","webpack:///./src/components/tabs/speedrun-milestones/SpeedrunMilestoneCompare.vue?c960","webpack:///./src/components/tabs/speedrun-milestones/SpeedrunMilestoneCompare.vue","webpack:///src/components/tabs/speedrun-milestones/PreviousSpeedrunTab.vue","webpack:///./src/components/tabs/speedrun-milestones/PreviousSpeedrunTab.vue?67c0","webpack:///./src/components/tabs/speedrun-milestones/PreviousSpeedrunTab.vue","webpack:///./src/components/tabs/celestial-ra/RaTab.vue?84c6","webpack:///./src/components/tabs/celestial-ra/RaPet.vue?9530","webpack:///./src/components/tabs/celestial-ra/RaPetLevelBar.vue?4a99","webpack:///src/components/tabs/celestial-ra/RaPetLevelBar.vue","webpack:///./src/components/tabs/celestial-ra/RaPetLevelBar.vue?02af","webpack:///./src/components/tabs/celestial-ra/RaPetLevelBar.vue","webpack:///./src/components/tabs/celestial-ra/RaUpgradeIcon.vue?5237","webpack:///src/components/tabs/celestial-ra/RaUpgradeIcon.vue","webpack:///./src/components/tabs/celestial-ra/RaUpgradeIcon.vue?a5cd","webpack:///./src/components/tabs/celestial-ra/RaUpgradeIcon.vue","webpack:///src/components/tabs/celestial-ra/RaPet.vue","webpack:///./src/components/tabs/celestial-ra/RaPet.vue?b722","webpack:///./src/components/tabs/celestial-ra/RaPet.vue","webpack:///./src/components/tabs/celestial-ra/RaPetRemembranceButton.vue?caa2","webpack:///src/components/tabs/celestial-ra/RaPetRemembranceButton.vue","webpack:///./src/components/tabs/celestial-ra/RaPetRemembranceButton.vue?f3d4","webpack:///./src/components/tabs/celestial-ra/RaPetRemembranceButton.vue","webpack:///./src/components/tabs/celestial-ra/RaUpgradePanel.vue?07f4","webpack:///./src/components/tabs/celestial-ra/RaUpgrade.vue?ca58","webpack:///src/components/tabs/celestial-ra/RaUpgrade.vue","webpack:///./src/components/tabs/celestial-ra/RaUpgrade.vue?2ff5","webpack:///./src/components/tabs/celestial-ra/RaUpgrade.vue","webpack:///src/components/tabs/celestial-ra/RaUpgradePanel.vue","webpack:///./src/components/tabs/celestial-ra/RaUpgradePanel.vue?28c1","webpack:///./src/components/tabs/celestial-ra/RaUpgradePanel.vue","webpack:///src/components/tabs/celestial-ra/RaTab.vue","webpack:///./src/components/tabs/celestial-ra/RaTab.vue?ba8a","webpack:///./src/components/tabs/celestial-ra/RaTab.vue","webpack:///./src/components/tabs/reality-upgrades/RealityUpgradesTab.vue?e4c4","webpack:///./src/components/tabs/reality-upgrades/RealityUpgradeButton.vue?1d21","webpack:///src/components/tabs/reality-upgrades/RealityUpgradeButton.vue","webpack:///./src/components/tabs/reality-upgrades/RealityUpgradeButton.vue?396e","webpack:///./src/components/tabs/reality-upgrades/RealityUpgradeButton.vue","webpack:///src/components/tabs/reality-upgrades/RealityUpgradesTab.vue","webpack:///./src/components/tabs/reality-upgrades/RealityUpgradesTab.vue?5d5c","webpack:///./src/components/tabs/reality-upgrades/RealityUpgradesTab.vue","webpack:///./src/components/tabs/replicanti/ReplicantiTab.vue?32c9","webpack:///./src/components/tabs/replicanti/ReplicantiUpgradeButton.vue?92ed","webpack:///src/components/tabs/replicanti/ReplicantiUpgradeButton.vue","webpack:///./src/components/tabs/replicanti/ReplicantiUpgradeButton.vue?d4a9","webpack:///./src/components/tabs/replicanti/ReplicantiUpgradeButton.vue","webpack:///./src/components/tabs/replicanti/ReplicantiGainText.vue?1ec7","webpack:///src/components/tabs/replicanti/ReplicantiGainText.vue","webpack:///./src/components/tabs/replicanti/ReplicantiGainText.vue?d8af","webpack:///./src/components/tabs/replicanti/ReplicantiGainText.vue","webpack:///./src/components/tabs/replicanti/ReplicantiGalaxyButton.vue?e147","webpack:///src/components/tabs/replicanti/ReplicantiGalaxyButton.vue","webpack:///./src/components/tabs/replicanti/ReplicantiGalaxyButton.vue?77de","webpack:///./src/components/tabs/replicanti/ReplicantiGalaxyButton.vue","webpack:///src/components/tabs/replicanti/ReplicantiTab.vue","webpack:///./src/components/tabs/replicanti/ReplicantiTab.vue?37d4","webpack:///./src/components/tabs/replicanti/ReplicantiTab.vue","webpack:///./src/components/tabs/secret-achievements/SecretAchievementTab.vue?1c23","webpack:///./src/components/tabs/secret-achievements/SecretAchievementRow.vue?24d0","webpack:///./src/components/tabs/secret-achievements/SecretAchievement.vue?c4d8","webpack:///src/components/tabs/secret-achievements/SecretAchievement.vue","webpack:///./src/components/tabs/secret-achievements/SecretAchievement.vue?6f1b","webpack:///./src/components/tabs/secret-achievements/SecretAchievement.vue","webpack:///src/components/tabs/secret-achievements/SecretAchievementRow.vue","webpack:///./src/components/tabs/secret-achievements/SecretAchievementRow.vue?a268","webpack:///./src/components/tabs/secret-achievements/SecretAchievementRow.vue","webpack:///src/components/tabs/secret-achievements/SecretAchievementTab.vue","webpack:///./src/components/tabs/secret-achievements/SecretAchievementTab.vue?830f","webpack:///./src/components/tabs/secret-achievements/SecretAchievementTab.vue","webpack:///./src/components/tabs/shop/ShopTab.vue?ea77","webpack:///./src/components/tabs/shop/ShopButton.vue?df6c","webpack:///src/components/tabs/shop/ShopButton.vue","webpack:///./src/components/tabs/shop/ShopButton.vue?959b","webpack:///./src/components/tabs/shop/ShopButton.vue","webpack:///src/components/tabs/shop/ShopTab.vue","webpack:///./src/components/tabs/shop/ShopTab.vue?298e","webpack:///./src/components/tabs/shop/ShopTab.vue","webpack:///./src/components/tabs/speedrun-milestones/SpeedrunMilestonesTab.vue?34f0","webpack:///./src/components/tabs/speedrun-milestones/SpeedrunMilestoneSingle.vue?755c","webpack:///src/components/tabs/speedrun-milestones/SpeedrunMilestoneSingle.vue","webpack:///./src/components/tabs/speedrun-milestones/SpeedrunMilestoneSingle.vue?f18b","webpack:///./src/components/tabs/speedrun-milestones/SpeedrunMilestoneSingle.vue","webpack:///src/components/tabs/speedrun-milestones/SpeedrunMilestonesTab.vue","webpack:///./src/components/tabs/speedrun-milestones/SpeedrunMilestonesTab.vue?4128","webpack:///./src/components/tabs/speedrun-milestones/SpeedrunMilestonesTab.vue","webpack:///./src/components/tabs/statistics/StatisticsTab.vue?40a3","webpack:///./src/components/tabs/statistics/matter-scale.js","webpack:///src/components/tabs/statistics/StatisticsTab.vue","webpack:///./src/components/tabs/statistics/StatisticsTab.vue?1108","webpack:///./src/components/tabs/statistics/StatisticsTab.vue","webpack:///./src/components/tabs/celestial-teresa/TeresaTab.vue?8a0e","webpack:///./src/components/tabs/celestial-teresa/PerkShopUpgradeButton.vue?9c2c","webpack:///src/components/tabs/celestial-teresa/PerkShopUpgradeButton.vue","webpack:///./src/components/tabs/celestial-teresa/PerkShopUpgradeButton.vue?3e5c","webpack:///./src/components/tabs/celestial-teresa/PerkShopUpgradeButton.vue","webpack:///src/components/tabs/celestial-teresa/TeresaTab.vue","webpack:///./src/components/tabs/celestial-teresa/TeresaTab.vue?411f","webpack:///./src/components/tabs/celestial-teresa/TeresaTab.vue","webpack:///./src/components/tabs/time-dilation/TimeDilationTab.vue?1567","webpack:///./src/components/tabs/time-dilation/DilationButton.vue?71b0","webpack:///src/components/tabs/time-dilation/DilationButton.vue","webpack:///./src/components/tabs/time-dilation/DilationButton.vue?4ba5","webpack:///./src/components/tabs/time-dilation/DilationButton.vue","webpack:///./src/components/tabs/time-dilation/DilationUpgradeButton.vue?a78b","webpack:///src/components/tabs/time-dilation/DilationUpgradeButton.vue","webpack:///./src/components/tabs/time-dilation/DilationUpgradeButton.vue?c360","webpack:///./src/components/tabs/time-dilation/DilationUpgradeButton.vue","webpack:///src/components/tabs/time-dilation/TimeDilationTab.vue","webpack:///./src/components/tabs/time-dilation/TimeDilationTab.vue?d816","webpack:///./src/components/tabs/time-dilation/TimeDilationTab.vue","webpack:///./src/components/tabs/time-dimensions/TimeDimensionsTab.vue?135e","webpack:///./src/components/tabs/time-dimensions/ClassicTimeDimensionsTab.vue?e3f7","webpack:///./src/components/tabs/time-dimensions/ClassicTimeDimensionRow.vue?c7e4","webpack:///src/components/tabs/time-dimensions/ClassicTimeDimensionRow.vue","webpack:///./src/components/tabs/time-dimensions/ClassicTimeDimensionRow.vue?9539","webpack:///./src/components/tabs/time-dimensions/ClassicTimeDimensionRow.vue","webpack:///src/components/tabs/time-dimensions/ClassicTimeDimensionsTab.vue","webpack:///./src/components/tabs/time-dimensions/ClassicTimeDimensionsTab.vue?3aea","webpack:///./src/components/tabs/time-dimensions/ClassicTimeDimensionsTab.vue","webpack:///./src/components/tabs/time-dimensions/ModernTimeDimensionsTab.vue?f6ca","webpack:///./src/components/tabs/time-dimensions/ModernTimeDimensionRow.vue?922b","webpack:///src/components/tabs/time-dimensions/ModernTimeDimensionRow.vue","webpack:///./src/components/tabs/time-dimensions/ModernTimeDimensionRow.vue?5bfc","webpack:///./src/components/tabs/time-dimensions/ModernTimeDimensionRow.vue","webpack:///src/components/tabs/time-dimensions/ModernTimeDimensionsTab.vue","webpack:///./src/components/tabs/time-dimensions/ModernTimeDimensionsTab.vue?6905","webpack:///./src/components/tabs/time-dimensions/ModernTimeDimensionsTab.vue","webpack:///src/components/tabs/time-dimensions/TimeDimensionsTab.vue","webpack:///./src/components/tabs/time-dimensions/TimeDimensionsTab.vue?a459","webpack:///./src/components/tabs/time-dimensions/TimeDimensionsTab.vue","webpack:///./src/components/tabs/time-studies/TimeStudiesTab.vue?1099","webpack:///./src/components/tabs/time-studies/TimeStudyConnection.vue?6c9f","webpack:///src/components/tabs/time-studies/TimeStudyConnection.vue","webpack:///./src/components/tabs/time-studies/TimeStudyConnection.vue?cf9c","webpack:///./src/components/tabs/time-studies/TimeStudyConnection.vue","webpack:///./src/components/tabs/time-studies/TimeStudyButton.vue?72f6","webpack:///src/components/tabs/time-studies/TimeStudyButton.vue","webpack:///./src/components/tabs/time-studies/TimeStudyButton.vue?7e9e","webpack:///./src/components/tabs/time-studies/TimeStudyButton.vue","webpack:///./src/components/tabs/time-studies/time-study-tree-layout.js","webpack:///./src/components/tabs/time-studies/DilationTimeStudy.vue?717f","webpack:///src/components/tabs/time-studies/DilationTimeStudy.vue","webpack:///./src/components/tabs/time-studies/DilationTimeStudy.vue?f695","webpack:///./src/components/tabs/time-studies/DilationTimeStudy.vue","webpack:///./src/components/tabs/time-studies/ECTimeStudy.vue?9157","webpack:///src/components/tabs/time-studies/ECTimeStudy.vue","webpack:///./src/components/tabs/time-studies/ECTimeStudy.vue?44c9","webpack:///./src/components/tabs/time-studies/ECTimeStudy.vue","webpack:///./src/components/tabs/time-studies/EnslavedTimeStudy.vue?6f20","webpack:///src/components/tabs/time-studies/EnslavedTimeStudy.vue","webpack:///./src/components/tabs/time-studies/EnslavedTimeStudy.vue?308a","webpack:///./src/components/tabs/time-studies/EnslavedTimeStudy.vue","webpack:///./src/components/tabs/time-studies/HiddenTimeStudyConnection.vue?8a70","webpack:///src/components/tabs/time-studies/HiddenTimeStudyConnection.vue","webpack:///./src/components/tabs/time-studies/HiddenTimeStudyConnection.vue?ba32","webpack:///./src/components/tabs/time-studies/HiddenTimeStudyConnection.vue","webpack:///./src/components/tabs/time-studies/NormalTimeStudy.vue?876a","webpack:///src/components/tabs/time-studies/NormalTimeStudy.vue","webpack:///./src/components/tabs/time-studies/NormalTimeStudy.vue?d3a1","webpack:///./src/components/tabs/time-studies/NormalTimeStudy.vue","webpack:///./src/components/tabs/time-studies/SecretTimeStudy.vue?af57","webpack:///src/components/tabs/time-studies/SecretTimeStudy.vue","webpack:///./src/components/tabs/time-studies/SecretTimeStudy.vue?2d65","webpack:///./src/components/tabs/time-studies/SecretTimeStudy.vue","webpack:///./src/components/tabs/time-studies/TriadTimeStudy.vue?e861","webpack:///src/components/tabs/time-studies/TriadTimeStudy.vue","webpack:///./src/components/tabs/time-studies/TriadTimeStudy.vue?adc6","webpack:///./src/components/tabs/time-studies/TriadTimeStudy.vue","webpack:///./src/components/tabs/time-studies/MyriadTimeStudy.vue?0a2f","webpack:///src/components/tabs/time-studies/MyriadTimeStudy.vue","webpack:///./src/components/tabs/time-studies/MyriadTimeStudy.vue?a472","webpack:///./src/components/tabs/time-studies/MyriadTimeStudy.vue","webpack:///./src/components/tabs/time-studies/KohlerTimeStudy.vue?c32e","webpack:///src/components/tabs/time-studies/KohlerTimeStudy.vue","webpack:///./src/components/tabs/time-studies/KohlerTimeStudy.vue?fa92","webpack:///./src/components/tabs/time-studies/KohlerTimeStudy.vue","webpack:///src/components/tabs/time-studies/TimeStudiesTab.vue","webpack:///./src/components/tabs/time-studies/TimeStudiesTab.vue?1da2","webpack:///./src/components/tabs/time-studies/TimeStudiesTab.vue","webpack:///./src/components/tabs/celestial-v/VTab.vue?3384","webpack:///./src/components/tabs/celestial-v/VUnlockRequirement.vue?3bd6","webpack:///src/components/tabs/celestial-v/VUnlockRequirement.vue","webpack:///./src/components/tabs/celestial-v/VUnlockRequirement.vue?21a8","webpack:///./src/components/tabs/celestial-v/VUnlockRequirement.vue","webpack:///src/components/tabs/celestial-v/VTab.vue","webpack:///./src/components/tabs/celestial-v/VTab.vue?80ad","webpack:///./src/components/tabs/celestial-v/VTab.vue","webpack:///./src/components/tabs/mending/MendingUpgrades.vue?65fd","webpack:///./src/components/tabs/mending/MendingUpgradeButton.vue?f5bf","webpack:///src/components/tabs/mending/MendingUpgradeButton.vue","webpack:///./src/components/tabs/mending/MendingUpgradeButton.vue?4255","webpack:///./src/components/tabs/mending/MendingUpgradeButton.vue","webpack:///./src/components/modals/ModalWrapper.vue?8f86","webpack:///./src/components/modals/ModalCloseButton.vue?1d1f","webpack:///src/components/modals/ModalCloseButton.vue","webpack:///./src/components/modals/ModalCloseButton.vue?4bc9","webpack:///./src/components/modals/ModalCloseButton.vue","webpack:///src/components/modals/ModalWrapper.vue","webpack:///./src/components/modals/ModalWrapper.vue?8f3a","webpack:///./src/components/modals/ModalWrapper.vue","webpack:///src/components/tabs/mending/MendingUpgrades.vue","webpack:///./src/components/tabs/mending/MendingUpgrades.vue?0663","webpack:///./src/components/tabs/mending/MendingUpgrades.vue","webpack:///./src/components/tabs/mending/MendingMilestones.vue?f4d6","webpack:///./src/components/tabs/mending/MendingMilestoneButton.vue?8caa","webpack:///src/components/tabs/mending/MendingMilestoneButton.vue","webpack:///./src/components/tabs/mending/MendingMilestoneButton.vue?8bd2","webpack:///./src/components/tabs/mending/MendingMilestoneButton.vue","webpack:///src/components/tabs/mending/MendingMilestones.vue","webpack:///./src/components/tabs/mending/MendingMilestones.vue?163e","webpack:///./src/components/tabs/mending/MendingMilestones.vue","webpack:///./src/components/tabs/mending/WarpReality.vue?4247","webpack:///./src/components/tabs/mending/WarpRealityButton.vue?3dc8","webpack:///src/components/tabs/mending/WarpRealityButton.vue","webpack:///./src/components/tabs/mending/WarpRealityButton.vue?e55c","webpack:///./src/components/tabs/mending/WarpRealityButton.vue","webpack:///./src/components/tabs/mending/WarpUpgradeButton.vue?52d2","webpack:///src/components/tabs/mending/WarpUpgradeButton.vue","webpack:///./src/components/tabs/mending/WarpUpgradeButton.vue?d198","webpack:///./src/components/tabs/mending/WarpUpgradeButton.vue","webpack:///src/components/tabs/mending/WarpReality.vue","webpack:///./src/components/tabs/mending/WarpReality.vue?228b","webpack:///./src/components/tabs/mending/WarpReality.vue","webpack:///./src/components/tabs/mending/KohlersRealm.vue?a494","webpack:///src/components/tabs/mending/KohlersRealm.vue","webpack:///./src/components/tabs/mending/KohlersRealm.vue?8514","webpack:///./src/components/tabs/mending/KohlersRealm.vue","webpack:///./src/components/tabs/corruption/CorruptionChallengeTab.vue?cb89","webpack:///./src/components/tabs/corruption/CorruptionUpgradeButton.vue?3718","webpack:///src/components/tabs/corruption/CorruptionUpgradeButton.vue","webpack:///./src/components/tabs/corruption/CorruptionUpgradeButton.vue?b6ab","webpack:///./src/components/tabs/corruption/CorruptionUpgradeButton.vue","webpack:///src/components/tabs/corruption/CorruptionChallengeTab.vue","webpack:///./src/components/tabs/corruption/CorruptionChallengeTab.vue?7edd","webpack:///./src/components/tabs/corruption/CorruptionChallengeTab.vue","webpack:///./src/components/tabs/multiversal-dimensions/MultiversalDimensionsTab.vue?da39","webpack:///./src/components/tabs/multiversal-dimensions/ClassicMultiversalDimensionsTab.vue?77cb","webpack:///./src/components/tabs/multiversal-dimensions/ClassicMultiversalDimensionRow.vue?f189","webpack:///src/components/tabs/multiversal-dimensions/ClassicMultiversalDimensionRow.vue","webpack:///./src/components/tabs/multiversal-dimensions/ClassicMultiversalDimensionRow.vue?303d","webpack:///./src/components/tabs/multiversal-dimensions/ClassicMultiversalDimensionRow.vue","webpack:///src/components/tabs/multiversal-dimensions/ClassicMultiversalDimensionsTab.vue","webpack:///./src/components/tabs/multiversal-dimensions/ClassicMultiversalDimensionsTab.vue?5e6d","webpack:///./src/components/tabs/multiversal-dimensions/ClassicMultiversalDimensionsTab.vue","webpack:///./src/components/tabs/multiversal-dimensions/ModernMultiversalDimensionsTab.vue?53da","webpack:///./src/components/tabs/multiversal-dimensions/ModernMultiversalDimensionRow.vue?e5e3","webpack:///src/components/tabs/multiversal-dimensions/ModernMultiversalDimensionRow.vue","webpack:///./src/components/tabs/multiversal-dimensions/ModernMultiversalDimensionRow.vue?6f18","webpack:///./src/components/tabs/multiversal-dimensions/ModernMultiversalDimensionRow.vue","webpack:///src/components/tabs/multiversal-dimensions/ModernMultiversalDimensionsTab.vue","webpack:///./src/components/tabs/multiversal-dimensions/ModernMultiversalDimensionsTab.vue?c352","webpack:///./src/components/tabs/multiversal-dimensions/ModernMultiversalDimensionsTab.vue","webpack:///src/components/tabs/multiversal-dimensions/MultiversalDimensionsTab.vue","webpack:///./src/components/tabs/multiversal-dimensions/MultiversalDimensionsTab.vue?90cd","webpack:///./src/components/tabs/multiversal-dimensions/MultiversalDimensionsTab.vue","webpack:///./src/components/tabs/index.js","webpack:///./src/components/ui-modes/s12/DesktopIcons.vue?4d4d","webpack:///./src/components/ui-modes/s12/desktop-icons.js","webpack:///src/components/ui-modes/s12/DesktopIcons.vue","webpack:///./src/components/ui-modes/s12/DesktopIcons.vue?6c3a","webpack:///./src/components/ui-modes/s12/DesktopIcons.vue","webpack:///./src/components/ui-modes/s12/S12Ui.vue?5bfd","webpack:///./src/components/ui-modes/s12/windows.js","webpack:///src/components/ui-modes/s12/S12Ui.vue","webpack:///./src/components/ui-modes/s12/S12Ui.vue?77a2","webpack:///./src/components/ui-modes/s12/S12Ui.vue","webpack:///./src/components/ui-modes/s12/S12UiFixed.vue?8c76","webpack:///./src/components/ui-modes/s12/S12Taskbar.vue?cd08","webpack:///./src/components/ui-modes/s12/S12Subtabs.vue?e80e","webpack:///src/components/ui-modes/s12/S12Subtabs.vue","webpack:///./src/components/ui-modes/s12/S12Subtabs.vue?486b","webpack:///./src/components/ui-modes/s12/S12Subtabs.vue","webpack:///./src/components/ui-modes/s12/TaskbarIcon.vue?4aa1","webpack:///src/components/ui-modes/s12/TaskbarIcon.vue","webpack:///./src/components/ui-modes/s12/TaskbarIcon.vue?bb5d","webpack:///./src/components/ui-modes/s12/TaskbarIcon.vue","webpack:///src/components/ui-modes/s12/S12Taskbar.vue","webpack:///./src/components/ui-modes/s12/S12Taskbar.vue?ca26","webpack:///./src/components/ui-modes/s12/S12Taskbar.vue","webpack:///src/components/ui-modes/s12/S12UiFixed.vue","webpack:///./src/components/ui-modes/s12/S12UiFixed.vue?db9a","webpack:///./src/components/ui-modes/s12/S12UiFixed.vue","webpack:///src/components/GameUIComponent.vue","webpack:///./src/components/GameUIComponent.vue?0df2","webpack:///./src/components/GameUIComponent.vue","webpack:///./src/core/ui.js","webpack:///./src/core/mending.js","webpack:///./src/core/autobuyers/dilation-upgrade-autobuyer.js","webpack:///./src/core/autobuyers/dimboost-autobuyer.js","webpack:///./src/core/autobuyers/eternity-autobuyer.js","webpack:///./src/core/autobuyers/galaxy-autobuyer.js","webpack:///./src/core/autobuyers/imaginary-upgrade-autobuyer.js","webpack:///./src/core/autobuyers/infinity-dimension-autobuyer.js","webpack:///./src/core/autobuyers/prestige-currency-multiplier-autobuyer.js","webpack:///./src/core/autobuyers/reality-autobuyer.js","webpack:///./src/core/autobuyers/reality-upgrade-autobuyer.js","webpack:///./src/core/autobuyers/replicanti-galaxy-autobuyer.js","webpack:///./src/core/autobuyers/replicanti-upgrade-autobuyer.js","webpack:///./src/core/autobuyers/sacrifice-autobuyer.js","webpack:///./src/core/autobuyers/singularity-autobuyer.js","webpack:///./src/core/autobuyers/tickspeed-autobuyer.js","webpack:///./src/core/autobuyers/time-dimension-autobuyer.js","webpack:///./src/core/autobuyers/time-theorem-autobuyer.js","webpack:///./src/core/celestials/quotes.js","webpack:///./src/core/celestials/enslaved.js","webpack:///./src/core/autobuyers/tesseract-autobuyer.js","webpack:///./src/core/autobuyers/music-glyph-autobuyer.js","webpack:///./src/core/autobuyers/nr-reality-upgrade-autobuyer.js","webpack:///./src/core/autobuyers/nr-imaginary-upgrade-autobuyer.js","webpack:///./src/core/autobuyers/ra-pet-autobuyer.js","webpack:///./src/core/autobuyers/memory-autobuyer.js","webpack:///./src/core/autobuyers/pelle-upgrade-autobuyer.js","webpack:///./src/core/autobuyers/galgen-autobuyer.js","webpack:///./src/core/autobuyers/mending-autobuyer.js","webpack:///./src/core/autobuyers/singulaity-cap-autobuyer.js","webpack:///./src/core/autobuyers/autobuyers.js","webpack:///./src/core/notations.js","webpack:///./src/core/tutorial.js","webpack:///./src/core/new-game.js","webpack:///./src/core/celestials/teresa.js","webpack:///./src/core/celestials/kohler.js","webpack:///./src/core/celestials/effarig.js","webpack:///./src/core/celestials/V.js","webpack:///./src/core/celestials/ra/ra.js","webpack:///./src/core/celestials/ra/ra-upgrades.js","webpack:///./src/core/celestials/ra/alchemy.js","webpack:///./src/core/dimensions/dimension.js","webpack:///./src/core/celestials/laitela/dark-matter-dimension.js","webpack:///./src/core/celestials/laitela/laitela.js","webpack:///./src/core/celestials/laitela/singularity.js","webpack:///./src/core/celestials/pelle/zalgo.js","webpack:///./src/core/celestials/pelle/pelle.js","webpack:///./src/core/celestials/pelle/strikes.js","webpack:///./src/core/celestials/pelle/rifts.js","webpack:///./src/core/celestials/pelle/galaxy-generator.js","webpack:///./src/core/celestials/pelle/game-end.js","webpack:///./src/core/celestials/destroyer.js","webpack:///./src/core/celestials/celestials.js","webpack:///./src/components/modals/cloud/CloudInvalidDataModal.vue?5dee","webpack:///./src/components/modals/ModalWrapperChoice.vue?f97b","webpack:///./src/components/modals/ModalConfirmationCheck.vue?869d","webpack:///src/components/modals/ModalConfirmationCheck.vue","webpack:///./src/components/modals/ModalConfirmationCheck.vue?67eb","webpack:///./src/components/modals/ModalConfirmationCheck.vue","webpack:///src/components/modals/ModalWrapperChoice.vue","webpack:///./src/components/modals/ModalWrapperChoice.vue?a7bc","webpack:///./src/components/modals/ModalWrapperChoice.vue","webpack:///src/components/modals/cloud/CloudInvalidDataModal.vue","webpack:///./src/components/modals/cloud/CloudInvalidDataModal.vue?acc2","webpack:///./src/components/modals/cloud/CloudInvalidDataModal.vue","webpack:///./src/components/modals/cloud/CloudLoadConflictModal.vue?2695","webpack:///./src/components/modals/cloud/SaveInfoEntry.vue?c8a8","webpack:///src/components/modals/cloud/SaveInfoEntry.vue","webpack:///./src/components/modals/cloud/SaveInfoEntry.vue?0f69","webpack:///./src/components/modals/cloud/SaveInfoEntry.vue","webpack:///src/components/modals/cloud/CloudLoadConflictModal.vue","webpack:///./src/components/modals/cloud/CloudLoadConflictModal.vue?594b","webpack:///./src/components/modals/cloud/CloudLoadConflictModal.vue","webpack:///./src/components/modals/cloud/CloudSaveConflictModal.vue?80ae","webpack:///src/components/modals/cloud/CloudSaveConflictModal.vue","webpack:///./src/components/modals/cloud/CloudSaveConflictModal.vue?b5e1","webpack:///./src/components/modals/cloud/CloudSaveConflictModal.vue","webpack:///./src/components/modals/challenges/EternityChallengeStartModal.vue?feee","webpack:///src/components/modals/challenges/EternityChallengeStartModal.vue","webpack:///./src/components/modals/challenges/EternityChallengeStartModal.vue?ffa0","webpack:///./src/components/modals/challenges/EternityChallengeStartModal.vue","webpack:///./src/components/modals/challenges/InfinityChallengeStartModal.vue?86d8","webpack:///src/components/modals/challenges/InfinityChallengeStartModal.vue","webpack:///./src/components/modals/challenges/InfinityChallengeStartModal.vue?2ba7","webpack:///./src/components/modals/challenges/InfinityChallengeStartModal.vue","webpack:///./src/components/modals/MessageModal.vue?f760","webpack:///src/components/modals/MessageModal.vue","webpack:///./src/components/modals/MessageModal.vue?7a35","webpack:///./src/components/modals/MessageModal.vue","webpack:///./src/components/modals/challenges/NormalChallengeStartModal.vue?15ca","webpack:///src/components/modals/challenges/NormalChallengeStartModal.vue","webpack:///./src/components/modals/challenges/NormalChallengeStartModal.vue?85c8","webpack:///./src/components/modals/challenges/NormalChallengeStartModal.vue","webpack:///./src/components/modals/prestige/AntimatterGalaxyModal.vue?31f8","webpack:///src/components/modals/prestige/AntimatterGalaxyModal.vue","webpack:///./src/components/modals/prestige/AntimatterGalaxyModal.vue?92c3","webpack:///./src/components/modals/prestige/AntimatterGalaxyModal.vue","webpack:///./src/components/modals/prestige/ArmageddonModal.vue?142b","webpack:///src/components/modals/prestige/ArmageddonModal.vue","webpack:///./src/components/modals/prestige/ArmageddonModal.vue?1cc2","webpack:///./src/components/modals/prestige/ArmageddonModal.vue","webpack:///./src/components/modals/prestige/BigCrunchModal.vue?83a9","webpack:///./src/components/modals/prestige/ResetModal.vue?70a0","webpack:///src/components/modals/prestige/ResetModal.vue","webpack:///./src/components/modals/prestige/ResetModal.vue?6b3a","webpack:///./src/components/modals/prestige/ResetModal.vue","webpack:///src/components/modals/prestige/BigCrunchModal.vue","webpack:///./src/components/modals/prestige/BigCrunchModal.vue?55e3","webpack:///./src/components/modals/prestige/BigCrunchModal.vue","webpack:///./src/components/modals/prestige/DimensionBoostModal.vue?313e","webpack:///src/components/modals/prestige/DimensionBoostModal.vue","webpack:///./src/components/modals/prestige/DimensionBoostModal.vue?1fad","webpack:///./src/components/modals/prestige/DimensionBoostModal.vue","webpack:///./src/components/modals/prestige/EnterCelestialsModal.vue?105c","webpack:///./src/components/modals/prestige/EnterCelestialsRaPet.vue?3ff7","webpack:///src/components/modals/prestige/EnterCelestialsRaPet.vue","webpack:///./src/components/modals/prestige/EnterCelestialsRaPet.vue?5d84","webpack:///./src/components/modals/prestige/EnterCelestialsRaPet.vue","webpack:///src/components/modals/prestige/EnterCelestialsModal.vue","webpack:///./src/components/modals/prestige/EnterCelestialsModal.vue?ce39","webpack:///./src/components/modals/prestige/EnterCelestialsModal.vue","webpack:///./src/components/modals/prestige/EnterDilationModal.vue?ba4b","webpack:///src/components/modals/prestige/EnterDilationModal.vue","webpack:///./src/components/modals/prestige/EnterDilationModal.vue?e178","webpack:///./src/components/modals/prestige/EnterDilationModal.vue","webpack:///./src/components/modals/prestige/EternityModal.vue?e41c","webpack:///src/components/modals/prestige/EternityModal.vue","webpack:///./src/components/modals/prestige/EternityModal.vue?5fc8","webpack:///./src/components/modals/prestige/EternityModal.vue","webpack:///./src/components/modals/prestige/ExitChallengeModal.vue?39dc","webpack:///src/components/modals/prestige/ExitChallengeModal.vue","webpack:///./src/components/modals/prestige/ExitChallengeModal.vue?d48c","webpack:///./src/components/modals/prestige/ExitChallengeModal.vue","webpack:///./src/components/modals/prestige/ExitDilationModal.vue?0d44","webpack:///src/components/modals/prestige/ExitDilationModal.vue","webpack:///./src/components/modals/prestige/ExitDilationModal.vue?8ec1","webpack:///./src/components/modals/prestige/ExitDilationModal.vue","webpack:///./src/components/modals/prestige/HardResetModal.vue?06c5","webpack:///src/components/modals/prestige/HardResetModal.vue","webpack:///./src/components/modals/prestige/HardResetModal.vue?32ff","webpack:///./src/components/modals/prestige/HardResetModal.vue","webpack:///./src/components/modals/prestige/RealityModal.vue?84e1","webpack:///src/components/modals/prestige/RealityModal.vue","webpack:///./src/components/modals/prestige/RealityModal.vue?5c5b","webpack:///./src/components/modals/prestige/RealityModal.vue","webpack:///./src/components/modals/prestige/ReplicantiGalaxyModal.vue?53ee","webpack:///src/components/modals/prestige/ReplicantiGalaxyModal.vue","webpack:///./src/components/modals/prestige/ReplicantiGalaxyModal.vue?55b9","webpack:///./src/components/modals/prestige/ReplicantiGalaxyModal.vue","webpack:///./src/components/modals/prestige/ResetRealityModal.vue?efc7","webpack:///src/components/modals/prestige/ResetRealityModal.vue","webpack:///./src/components/modals/prestige/ResetRealityModal.vue?830c","webpack:///./src/components/modals/prestige/ResetRealityModal.vue","webpack:///./src/components/modals/prestige/ResetMendingModal.vue?4355","webpack:///src/components/modals/prestige/ResetMendingModal.vue","webpack:///./src/components/modals/prestige/ResetMendingModal.vue?5a95","webpack:///./src/components/modals/prestige/ResetMendingModal.vue","webpack:///./src/components/modals/options/AnimationOptionsModal.vue?0dc1","webpack:///./src/components/ModalOptionsToggleButton.vue?e1f5","webpack:///src/components/ModalOptionsToggleButton.vue","webpack:///./src/components/ModalOptionsToggleButton.vue?aa05","webpack:///./src/components/ModalOptionsToggleButton.vue","webpack:///./src/components/modals/options/ModalWrapperOptions.vue?1b42","webpack:///src/components/modals/options/ModalWrapperOptions.vue","webpack:///./src/components/modals/options/ModalWrapperOptions.vue?3f2e","webpack:///./src/components/modals/options/ModalWrapperOptions.vue","webpack:///src/components/modals/options/AnimationOptionsModal.vue","webpack:///./src/components/modals/options/AnimationOptionsModal.vue?ecfc","webpack:///./src/components/modals/options/AnimationOptionsModal.vue","webpack:///./src/components/modals/options/AwayProgressOptionsModal.vue?bdcb","webpack:///./src/components/modals/options/AwayProgressOptionsEntry.vue?e20c","webpack:///src/components/modals/options/AwayProgressOptionsEntry.vue","webpack:///./src/components/modals/options/AwayProgressOptionsEntry.vue?9f05","webpack:///./src/components/modals/options/AwayProgressOptionsEntry.vue","webpack:///src/components/modals/options/AwayProgressOptionsModal.vue","webpack:///./src/components/modals/options/AwayProgressOptionsModal.vue?e183","webpack:///./src/components/modals/options/AwayProgressOptionsModal.vue","webpack:///./src/components/modals/options/BackupWindowModal.vue?9926","webpack:///./src/components/modals/options/BackupEntry.vue?b07f","webpack:///src/components/modals/options/BackupEntry.vue","webpack:///./src/components/modals/options/BackupEntry.vue?f8a7","webpack:///./src/components/modals/options/BackupEntry.vue","webpack:///src/components/modals/options/BackupWindowModal.vue","webpack:///./src/components/modals/options/BackupWindowModal.vue?88a6","webpack:///./src/components/modals/options/BackupWindowModal.vue","webpack:///./src/components/modals/options/ConfirmationOptionsModal.vue?06f3","webpack:///./src/components/modals/options/ConfirmationOptionsEntry.vue?4db3","webpack:///src/components/modals/options/ConfirmationOptionsEntry.vue","webpack:///./src/components/modals/options/ConfirmationOptionsEntry.vue?7894","webpack:///./src/components/modals/options/ConfirmationOptionsEntry.vue","webpack:///src/components/modals/options/ConfirmationOptionsModal.vue","webpack:///./src/components/modals/options/ConfirmationOptionsModal.vue?6b6f","webpack:///./src/components/modals/options/ConfirmationOptionsModal.vue","webpack:///./src/components/modals/options/glyph-appearance/CosmeticSetChoiceModal.vue?2fb4","webpack:///./src/components/modals/options/glyph-appearance/CosmeticSetDropdown.vue?5dd1","webpack:///src/components/modals/options/glyph-appearance/CosmeticSetDropdown.vue","webpack:///./src/components/modals/options/glyph-appearance/CosmeticSetDropdown.vue?ef0f","webpack:///./src/components/modals/options/glyph-appearance/CosmeticSetDropdown.vue","webpack:///src/components/modals/options/glyph-appearance/CosmeticSetChoiceModal.vue","webpack:///./src/components/modals/options/glyph-appearance/CosmeticSetChoiceModal.vue?ba10","webpack:///./src/components/modals/options/glyph-appearance/CosmeticSetChoiceModal.vue","webpack:///./src/components/modals/options/glyph-appearance/GlyphDisplayOptionsModal.vue?6a05","webpack:///./src/components/modals/options/glyph-appearance/GlyphCustomization.vue?ca10","webpack:///./src/components/modals/options/glyph-appearance/GlyphCustomizationSingleType.vue?c10a","webpack:///./src/components/modals/options/glyph-appearance/GlyphCustomizationSlidingWindow.vue?e4c3","webpack:///src/components/modals/options/glyph-appearance/GlyphCustomizationSlidingWindow.vue","webpack:///./src/components/modals/options/glyph-appearance/GlyphCustomizationSlidingWindow.vue?dedc","webpack:///./src/components/modals/options/glyph-appearance/GlyphCustomizationSlidingWindow.vue","webpack:///src/components/modals/options/glyph-appearance/GlyphCustomizationSingleType.vue","webpack:///./src/components/modals/options/glyph-appearance/GlyphCustomizationSingleType.vue?7565","webpack:///./src/components/modals/options/glyph-appearance/GlyphCustomizationSingleType.vue","webpack:///src/components/modals/options/glyph-appearance/GlyphCustomization.vue","webpack:///./src/components/modals/options/glyph-appearance/GlyphCustomization.vue?7049","webpack:///./src/components/modals/options/glyph-appearance/GlyphCustomization.vue","webpack:///src/components/modals/options/glyph-appearance/GlyphDisplayOptionsModal.vue","webpack:///./src/components/modals/options/glyph-appearance/GlyphDisplayOptionsModal.vue?a2fd","webpack:///./src/components/modals/options/glyph-appearance/GlyphDisplayOptionsModal.vue","webpack:///./src/components/modals/options/hidden-tabs/HiddenTabsModal.vue?a21f","webpack:///./src/components/modals/options/hidden-tabs/HiddenTabGroup.vue?fc55","webpack:///./src/components/modals/options/hidden-tabs/HiddenSubtabsButton.vue?8f97","webpack:///src/components/modals/options/hidden-tabs/HiddenSubtabsButton.vue","webpack:///./src/components/modals/options/hidden-tabs/HiddenSubtabsButton.vue?1d7c","webpack:///./src/components/modals/options/hidden-tabs/HiddenSubtabsButton.vue","webpack:///src/components/modals/options/hidden-tabs/HiddenTabGroup.vue","webpack:///./src/components/modals/options/hidden-tabs/HiddenTabGroup.vue?dc51","webpack:///./src/components/modals/options/hidden-tabs/HiddenTabGroup.vue","webpack:///src/components/modals/options/hidden-tabs/HiddenTabsModal.vue","webpack:///./src/components/modals/options/hidden-tabs/HiddenTabsModal.vue?63fc","webpack:///./src/components/modals/options/hidden-tabs/HiddenTabsModal.vue","webpack:///./src/components/modals/options/HotkeysModal.vue?8fa6","webpack:///src/components/modals/options/HotkeysModal.vue","webpack:///./src/components/modals/options/HotkeysModal.vue?31cc","webpack:///./src/components/modals/options/HotkeysModal.vue","webpack:///./src/components/modals/options/InfoDisplayOptionsModal.vue?3c31","webpack:///src/components/modals/options/InfoDisplayOptionsModal.vue","webpack:///./src/components/modals/options/InfoDisplayOptionsModal.vue?92e0","webpack:///./src/components/modals/options/InfoDisplayOptionsModal.vue","webpack:///./src/components/modals/options/NewsOptionsModal.vue?224a","webpack:///src/components/modals/options/NewsOptionsModal.vue","webpack:///./src/components/modals/options/NewsOptionsModal.vue?62fe","webpack:///./src/components/modals/options/NewsOptionsModal.vue","webpack:///./src/components/modals/options/PreferredTreeModal.vue?92b0","webpack:///src/components/modals/options/PreferredTreeModal.vue","webpack:///./src/components/modals/options/PreferredTreeModal.vue?c8fe","webpack:///./src/components/modals/options/PreferredTreeModal.vue","webpack:///./src/components/modals/options/glyph-appearance/SingleGlyphAppearanceModal.vue?6c6c","webpack:///src/components/modals/options/glyph-appearance/SingleGlyphAppearanceModal.vue","webpack:///./src/components/modals/options/glyph-appearance/SingleGlyphAppearanceModal.vue?7807","webpack:///./src/components/modals/options/glyph-appearance/SingleGlyphAppearanceModal.vue","webpack:///./src/components/modals/options/SpeedUpModal.vue?0f9a","webpack:///src/components/modals/options/SpeedUpModal.vue","webpack:///./src/components/modals/options/SpeedUpModal.vue?b7d4","webpack:///./src/components/modals/options/SpeedUpModal.vue","webpack:///./src/components/modals/options/SpeedUpReportModal.vue?8c5e","webpack:///src/components/modals/options/SpeedUpReportModal.vue","webpack:///./src/components/modals/options/SpeedUpReportModal.vue?6bc7","webpack:///./src/components/modals/options/SpeedUpReportModal.vue","webpack:///./src/components/modals/glyph-management/DeleteCompanionGlyphModal.vue?446b","webpack:///src/components/modals/glyph-management/DeleteCompanionGlyphModal.vue","webpack:///./src/components/modals/glyph-management/DeleteCompanionGlyphModal.vue?9c1f","webpack:///./src/components/modals/glyph-management/DeleteCompanionGlyphModal.vue","webpack:///./src/components/modals/glyph-management/DeleteGlyphModal.vue?7c91","webpack:///src/components/modals/glyph-management/DeleteGlyphModal.vue","webpack:///./src/components/modals/glyph-management/DeleteGlyphModal.vue?7ff7","webpack:///./src/components/modals/glyph-management/DeleteGlyphModal.vue","webpack:///./src/components/modals/glyph-management/PurgeAllRejectedGlyphsModal.vue?10a9","webpack:///src/components/modals/glyph-management/PurgeAllRejectedGlyphsModal.vue","webpack:///./src/components/modals/glyph-management/PurgeAllRejectedGlyphsModal.vue?aa4a","webpack:///./src/components/modals/glyph-management/PurgeAllRejectedGlyphsModal.vue","webpack:///./src/components/modals/glyph-management/PurgeAllUnprotectedGlyphsModal.vue?174e","webpack:///src/components/modals/glyph-management/PurgeAllUnprotectedGlyphsModal.vue","webpack:///./src/components/modals/glyph-management/PurgeAllUnprotectedGlyphsModal.vue?64d2","webpack:///./src/components/modals/glyph-management/PurgeAllUnprotectedGlyphsModal.vue","webpack:///./src/components/modals/glyph-management/PurgeGlyphModal.vue?55c1","webpack:///src/components/modals/glyph-management/PurgeGlyphModal.vue","webpack:///./src/components/modals/glyph-management/PurgeGlyphModal.vue?ccc1","webpack:///./src/components/modals/glyph-management/PurgeGlyphModal.vue","webpack:///./src/components/modals/glyph-management/RefineGlyphModal.vue?923c","webpack:///src/components/modals/glyph-management/RefineGlyphModal.vue","webpack:///./src/components/modals/glyph-management/RefineGlyphModal.vue?b404","webpack:///./src/components/modals/glyph-management/RefineGlyphModal.vue","webpack:///./src/components/modals/glyph-management/SacrificeGlyphModal.vue?5031","webpack:///src/components/modals/glyph-management/SacrificeGlyphModal.vue","webpack:///./src/components/modals/glyph-management/SacrificeGlyphModal.vue?93c3","webpack:///./src/components/modals/glyph-management/SacrificeGlyphModal.vue","webpack:///./src/components/modals/AutobuyerEditModal.vue?9dc5","webpack:///src/components/modals/AutobuyerEditModal.vue","webpack:///./src/components/modals/AutobuyerEditModal.vue?e2f4","webpack:///./src/components/modals/AutobuyerEditModal.vue","webpack:///./src/components/modals/AutomatorScriptTemplate.vue?bb66","webpack:///src/components/modals/AutomatorScriptTemplate.vue","webpack:///./src/components/modals/AutomatorScriptTemplate.vue?15ec","webpack:///./src/components/modals/AutomatorScriptTemplate.vue","webpack:///./src/components/modals/AwayProgressModal.vue?d538","webpack:///./src/components/modals/AwayProgressEntry.vue?6766","webpack:///src/components/modals/AwayProgressEntry.vue","webpack:///./src/components/modals/AwayProgressEntry.vue?e9f5","webpack:///./src/components/modals/AwayProgressEntry.vue","webpack:///src/components/modals/AwayProgressModal.vue","webpack:///./src/components/modals/AwayProgressModal.vue?a949","webpack:///./src/components/modals/AwayProgressModal.vue","webpack:///./src/components/modals/BreakInfinityModal.vue?9863","webpack:///src/components/modals/BreakInfinityModal.vue","webpack:///./src/components/modals/BreakInfinityModal.vue?afad","webpack:///./src/components/modals/BreakInfinityModal.vue","webpack:///./src/components/modals/catchup/CatchupModal.vue?546c","webpack:///./src/components/modals/catchup/CatchupGroup.vue?d34f","webpack:///./src/components/modals/catchup/CatchupEntry.vue?78dd","webpack:///src/components/modals/catchup/CatchupEntry.vue","webpack:///./src/components/modals/catchup/CatchupEntry.vue?9ede","webpack:///./src/components/modals/catchup/CatchupEntry.vue","webpack:///src/components/modals/catchup/CatchupGroup.vue","webpack:///./src/components/modals/catchup/CatchupGroup.vue?f60f","webpack:///./src/components/modals/catchup/CatchupGroup.vue","webpack:///src/components/modals/catchup/CatchupModal.vue","webpack:///./src/components/modals/catchup/CatchupModal.vue?c880","webpack:///./src/components/modals/catchup/CatchupModal.vue","webpack:///./src/components/modals/ChangelogModal.vue?ca6f","webpack:///src/components/modals/ChangelogModal.vue","webpack:///./src/components/modals/ChangelogModal.vue?261c","webpack:///./src/components/modals/ChangelogModal.vue","webpack:///./src/components/modals/ChangeNameModal.vue?86f3","webpack:///src/components/modals/ChangeNameModal.vue","webpack:///./src/components/modals/ChangeNameModal.vue?3e58","webpack:///./src/components/modals/ChangeNameModal.vue","webpack:///./src/components/modals/ClearConstantsModal.vue?6a26","webpack:///src/components/modals/ClearConstantsModal.vue","webpack:///./src/components/modals/ClearConstantsModal.vue?422c","webpack:///./src/components/modals/ClearConstantsModal.vue","webpack:///./src/components/modals/CreditsModal.vue?b728","webpack:///src/components/modals/CreditsModal.vue","webpack:///./src/components/modals/CreditsModal.vue?8dfc","webpack:///./src/components/modals/CreditsModal.vue","webpack:///./src/components/modals/DeleteAutomatorScriptModal.vue?4cf2","webpack:///src/components/modals/DeleteAutomatorScriptModal.vue","webpack:///./src/components/modals/DeleteAutomatorScriptModal.vue?f3f3","webpack:///./src/components/modals/DeleteAutomatorScriptModal.vue","webpack:///./src/components/modals/EnslavedHintsModal.vue?d2e9","webpack:///src/components/modals/EnslavedHintsModal.vue","webpack:///./src/components/modals/EnslavedHintsModal.vue?a2a1","webpack:///./src/components/modals/EnslavedHintsModal.vue","webpack:///./src/components/modals/GlyphSetSaveDeleteModal.vue?941b","webpack:///src/components/modals/GlyphSetSaveDeleteModal.vue","webpack:///./src/components/modals/GlyphSetSaveDeleteModal.vue?5ac8","webpack:///./src/components/modals/GlyphSetSaveDeleteModal.vue","webpack:///./src/components/modals/GlyphShowcasePanelModal.vue?b92d","webpack:///./src/components/modals/GlyphShowcasePanelEntry.vue?344c","webpack:///src/components/modals/GlyphShowcasePanelEntry.vue","webpack:///./src/components/modals/GlyphShowcasePanelEntry.vue?8f7c","webpack:///./src/components/modals/GlyphShowcasePanelEntry.vue","webpack:///src/components/modals/GlyphShowcasePanelModal.vue","webpack:///./src/components/modals/GlyphShowcasePanelModal.vue?3b4c","webpack:///./src/components/modals/GlyphShowcasePanelModal.vue","webpack:///./src/components/modals/H2PModal.vue?c2aa","webpack:///src/components/modals/H2PModal.vue","webpack:///./src/components/modals/H2PModal.vue?cb01","webpack:///./src/components/modals/H2PModal.vue","webpack:///./src/components/modals/ImportAutomatorDataModal.vue?aa4f","webpack:///src/components/modals/ImportAutomatorDataModal.vue","webpack:///./src/components/modals/ImportAutomatorDataModal.vue?5440","webpack:///./src/components/modals/ImportAutomatorDataModal.vue","webpack:///./src/components/modals/ImportFilterModal.vue?04e6","webpack:///./src/components/modals/ImportFilterSingleType.vue?a6aa","webpack:///src/components/modals/ImportFilterSingleType.vue","webpack:///./src/components/modals/ImportFilterSingleType.vue?efd0","webpack:///./src/components/modals/ImportFilterSingleType.vue","webpack:///src/components/modals/ImportFilterModal.vue","webpack:///./src/components/modals/ImportFilterModal.vue?d9f9","webpack:///./src/components/modals/ImportFilterModal.vue","webpack:///./src/components/modals/ImportSaveModal.vue?20f7","webpack:///src/components/modals/ImportSaveModal.vue","webpack:///./src/components/modals/ImportSaveModal.vue?dc50","webpack:///./src/components/modals/ImportSaveModal.vue","webpack:///./src/components/modals/ImportTimeStudyConstants.vue?c3d1","webpack:///src/components/modals/ImportTimeStudyConstants.vue","webpack:///./src/components/modals/ImportTimeStudyConstants.vue?7d6e","webpack:///./src/components/modals/ImportTimeStudyConstants.vue","webpack:///./src/components/modals/InformationModal.vue?96ee","webpack:///./src/components/modals/InformationModalButton.vue?0168","webpack:///src/components/modals/InformationModalButton.vue","webpack:///./src/components/modals/InformationModalButton.vue?99ed","webpack:///./src/components/modals/InformationModalButton.vue","webpack:///src/components/modals/InformationModal.vue","webpack:///./src/components/modals/InformationModal.vue?c1cd","webpack:///./src/components/modals/InformationModal.vue","webpack:///./src/components/modals/LoadGameModal.vue?75a4","webpack:///./src/components/modals/LoadGameEntry.vue?3a1b","webpack:///src/components/modals/LoadGameEntry.vue","webpack:///./src/components/modals/LoadGameEntry.vue?caba","webpack:///./src/components/modals/LoadGameEntry.vue","webpack:///src/components/modals/LoadGameModal.vue","webpack:///./src/components/modals/LoadGameModal.vue?ed99","webpack:///./src/components/modals/LoadGameModal.vue","webpack:///./src/components/modals/ModifySeedModal.vue?a06b","webpack:///src/components/modals/ModifySeedModal.vue","webpack:///./src/components/modals/ModifySeedModal.vue?5129","webpack:///./src/components/modals/ModifySeedModal.vue","webpack:///./src/components/modals/PelleEffectsModal.vue?b1f3","webpack:///src/components/modals/PelleEffectsModal.vue","webpack:///./src/components/modals/PelleEffectsModal.vue?0493","webpack:///./src/components/modals/PelleEffectsModal.vue","webpack:///./src/components/modals/RealityGlyphCreationModal.vue?3429","webpack:///src/components/modals/RealityGlyphCreationModal.vue","webpack:///./src/components/modals/RealityGlyphCreationModal.vue?12c5","webpack:///./src/components/modals/RealityGlyphCreationModal.vue","webpack:///./src/components/modals/ReplaceGlyphModal.vue?d14a","webpack:///src/components/modals/ReplaceGlyphModal.vue","webpack:///./src/components/modals/ReplaceGlyphModal.vue?3845","webpack:///./src/components/modals/ReplaceGlyphModal.vue","webpack:///./src/components/modals/RespecIAPModal.vue?b759","webpack:///src/components/modals/RespecIAPModal.vue","webpack:///./src/components/modals/RespecIAPModal.vue?25fc","webpack:///./src/components/modals/RespecIAPModal.vue","webpack:///./src/components/modals/SacrificeModal.vue?2d7a","webpack:///src/components/modals/SacrificeModal.vue","webpack:///./src/components/modals/SacrificeModal.vue?ff2e","webpack:///./src/components/modals/SacrificeModal.vue","webpack:///./src/components/modals/SingularityMilestonesModal.vue?c755","webpack:///src/components/modals/SingularityMilestonesModal.vue","webpack:///./src/components/modals/SingularityMilestonesModal.vue?338a","webpack:///./src/components/modals/SingularityMilestonesModal.vue","webpack:///./src/components/modals/SpeedrunModeModal.vue?190c","webpack:///src/components/modals/SpeedrunModeModal.vue","webpack:///./src/components/modals/SpeedrunModeModal.vue?bb00","webpack:///./src/components/modals/SpeedrunModeModal.vue","webpack:///./src/components/modals/StdStoreModal.vue?26d9","webpack:///./src/components/modals/StdStoreRow.vue?4e9f","webpack:///src/components/modals/StdStoreRow.vue","webpack:///./src/components/modals/StdStoreRow.vue?ade2","webpack:///./src/components/modals/StdStoreRow.vue","webpack:///src/components/modals/StdStoreModal.vue","webpack:///./src/components/modals/StdStoreModal.vue?82ea","webpack:///./src/components/modals/StdStoreModal.vue","webpack:///./src/components/modals/StudyStringModal.vue?0241","webpack:///./src/components/modals/StudyStringLine.vue?1a6c","webpack:///src/components/modals/StudyStringLine.vue","webpack:///./src/components/modals/StudyStringLine.vue?6ca7","webpack:///./src/components/modals/StudyStringLine.vue","webpack:///./src/components/modals/time-study-modal-preview/StudyStringPreview.vue?28af","webpack:///./src/components/modals/time-study-modal-preview/PseudoTimeStudyButton.vue?8a19","webpack:///src/components/modals/time-study-modal-preview/PseudoTimeStudyButton.vue","webpack:///./src/components/modals/time-study-modal-preview/PseudoTimeStudyButton.vue?dcaa","webpack:///./src/components/modals/time-study-modal-preview/PseudoTimeStudyButton.vue","webpack:///./src/components/modals/time-study-modal-preview/PseudoTimeStudyConnection.vue?dadb","webpack:///src/components/modals/time-study-modal-preview/PseudoTimeStudyConnection.vue","webpack:///./src/components/modals/time-study-modal-preview/PseudoTimeStudyConnection.vue?9c02","webpack:///./src/components/modals/time-study-modal-preview/PseudoTimeStudyConnection.vue","webpack:///src/components/modals/time-study-modal-preview/StudyStringPreview.vue","webpack:///./src/components/modals/time-study-modal-preview/StudyStringPreview.vue?2f78","webpack:///./src/components/modals/time-study-modal-preview/StudyStringPreview.vue","webpack:///./src/components/modals/StudyTreeInfo.vue?39fb","webpack:///src/components/modals/StudyTreeInfo.vue","webpack:///./src/components/modals/StudyTreeInfo.vue?3a30","webpack:///./src/components/modals/StudyTreeInfo.vue","webpack:///src/components/modals/StudyStringModal.vue","webpack:///./src/components/modals/StudyStringModal.vue?fdaf","webpack:///./src/components/modals/StudyStringModal.vue","webpack:///./src/components/modals/SwitchAutomatorEditorModal.vue?b4a5","webpack:///src/components/modals/SwitchAutomatorEditorModal.vue","webpack:///./src/components/modals/SwitchAutomatorEditorModal.vue?8492","webpack:///./src/components/modals/SwitchAutomatorEditorModal.vue","webpack:///./src/components/modals/UiChoiceModal.vue?0228","webpack:///src/components/modals/UiChoiceModal.vue","webpack:///./src/components/modals/UiChoiceModal.vue?61ed","webpack:///./src/components/modals/UiChoiceModal.vue","webpack:///./src/components/modals/UndoGlyphModal.vue?b61d","webpack:///src/components/modals/UndoGlyphModal.vue","webpack:///./src/components/modals/UndoGlyphModal.vue?5297","webpack:///./src/components/modals/UndoGlyphModal.vue","webpack:///./src/components/modals/UpgradeMechanicLockModal.vue?271a","webpack:///src/components/modals/UpgradeMechanicLockModal.vue","webpack:///./src/components/modals/UpgradeMechanicLockModal.vue?03ec","webpack:///./src/components/modals/UpgradeMechanicLockModal.vue","webpack:///./src/components/modals/WarpRealityModal.vue?3e57","webpack:///src/components/modals/WarpRealityModal.vue","webpack:///./src/components/modals/WarpRealityModal.vue?6b21","webpack:///./src/components/modals/WarpRealityModal.vue","webpack:///./src/components/modals/CorruptionFullEffectsModal.vue?4385","webpack:///src/components/modals/CorruptionFullEffectsModal.vue","webpack:///./src/components/modals/CorruptionFullEffectsModal.vue?aa88","webpack:///./src/components/modals/CorruptionFullEffectsModal.vue","webpack:///./src/components/modals/secret-themes/S12GamesModal.vue?75c4","webpack:///./src/components/modals/secret-themes/S12GameEntries.vue?a18b","webpack:///./src/components/modals/secret-themes/s12-games.js","webpack:///src/components/modals/secret-themes/S12GameEntries.vue","webpack:///./src/components/modals/secret-themes/S12GameEntries.vue?da8f","webpack:///./src/components/modals/secret-themes/S12GameEntries.vue","webpack:///src/components/modals/secret-themes/S12GamesModal.vue","webpack:///./src/components/modals/secret-themes/S12GamesModal.vue?d8ff","webpack:///./src/components/modals/secret-themes/S12GamesModal.vue","webpack:///./src/core/modal.js","webpack:///./src/core/themes.js","webpack:///./src/core/options.js","webpack:///./src/core/achievements/normal-achievement.js","webpack:///./src/core/achievements/secret-achievement.js","webpack:///./src/core/achievements/achievement-timer.js","webpack:///./src/core/reality-upgrades.js","webpack:///./src/core/glyphs/glyph-core.js","webpack:///./src/core/glyphs/glyph-cosmetics.js","webpack:///./src/core/glyphs/glyph-effects.js","webpack:///./src/core/glyphs/glyph-generator.js","webpack:///./src/core/glyphs/glyph-purge-handler.js","webpack:///./src/core/glyphs/auto-glyph-processor.js","webpack:///./src/core/time.js","webpack:///./src/core/tickspeed.js","webpack:///./src/core/dimensions/antimatter-dimension.js","webpack:///./src/core/dimensions/infinity-dimension.js","webpack:///./src/core/dimensions/time-dimension.js","webpack:///./src/core/dimensions/multiversal-dimension.js","webpack:///./src/core/time-studies/time-study-tree.js","webpack:///./src/core/time-studies/ec-time-study.js","webpack:///./src/core/time-studies/dilation-time-study.js","webpack:///./src/core/time-studies/time-study-connections.js","webpack:///./src/core/sacrifice.js","webpack:///./src/core/big-crunch.js","webpack:///./src/core/infinity-upgrades.js","webpack:///./src/core/break-infinity-upgrades.js","webpack:///./src/core/normal-challenges.js","webpack:///./src/core/infinity-challenges.js","webpack:///./src/core/replicanti.js","webpack:///./src/core/time-theorems.js","webpack:///./src/core/imaginary-upgrades.js","webpack:///./src/core/perks.js","webpack:///./src/core/dilation.js","webpack:///./src/core/black-hole.js","webpack:///./src/core/expo-black-hole.js","webpack:///./src/core/machines.js","webpack:///./src/core/devtools.js","webpack:///./src/core/news-ticker.js","webpack:///./src/core/shop.js","webpack:///./src/core/tabs.js","webpack:///./src/core/tab-notifications.js","webpack:///./src/core/automator/script-templates.js","webpack:///./src/merge-globals.js","webpack:///./src/commit-watcher.js","webpack:///./src/main.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/amd options","webpack:///webpack/runtime/chunk loaded","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/node module decorator","webpack:///webpack/runtime/jsonp chunk loading","webpack:///webpack/startup"],"sourcesContent":["/**\r\n * Async is used for making a big pile of computation into a manageable\r\n * set of batches that don't lock up the UI.\r\n * run() is the nominal entry point.\r\n */\r\nwindow.Async = {\r\n _enabled: true,\r\n get enabled() {\r\n return this._enabled;\r\n },\r\n set enabled(val) {\r\n this._enabled = val;\r\n },\r\n runForTime(fun, maxIter, config) {\r\n const batchSize = config.batchSize || 1;\r\n const maxTime = config.maxTime;\r\n const t0 = Date.now();\r\n for (let remaining = maxIter; remaining > 0;) {\r\n for (let j = 0; j < Math.min(remaining, batchSize); ++j) {\r\n fun(remaining);\r\n --remaining;\r\n }\r\n if (Date.now() - t0 >= maxTime) return remaining;\r\n }\r\n return 0;\r\n },\r\n sleepPromise: ms => new Promise(resolve => setTimeout(resolve, ms)),\r\n /**\r\n * Asynchronously run the specified function maxIter times, letting the event\r\n * loop run periodically. The function is run in chunks of config.batchSize;\r\n * when the elapsed time reaches a specified amount, execution will pause for\r\n * config.sleepTime\r\n * @param {function} fun Function to run (e.g. do some computation)\r\n * @param {number} maxIter Total number of times to run the function\r\n * @param {Object} config Options for how to do the calculation\r\n * @param {Number} config.maxTime Max time, ms, over which to run continuously\r\n * @param {Number} [config.batchSize] Number of times to run fun between time checks. Since Date.now() takes\r\n * non-zero time to execute, you don't necessarily want to check every iteration\r\n * @param {Number} [config.sleepTime] Amount of time to suspend between computing\r\n * @param {function(Number)} [config.asyncEntry] IF CALCULATION ISN'T DONE IN ONE BATCH, then this\r\n * gets called before the first sleep. Use this to set up a progress bar, for example. The function will\r\n * get passed the number of iterations run so far.\r\n * @param {function(Number)} [config.asyncProgress] Called after the second and subsequent batches, with the\r\n * total number of iterations done thus far\r\n * @param {function} [config.asyncExit] If more than one batch was done, this will be called. For example, can\r\n * be used to hide a progress bar.\r\n * @param {function} [config.then] Run after everything is done\r\n * @returns {Promise|undefined}\r\n */\r\n run(fun, maxIter, config) {\r\n if (this.enabled) {\r\n // Disable async if we're already doing async\r\n this.enabled = false;\r\n const runResult = this._run(fun, maxIter, config);\r\n return config.then ? runResult.then(() => {\r\n config.then();\r\n this.enabled = true;\r\n }) : runResult;\r\n }\r\n for (let i = 0; i < maxIter; ++i) {\r\n fun(i);\r\n }\r\n if (config.then) config.then();\r\n },\r\n /**\r\n * @private\r\n */\r\n async _run(fun, maxIter, config) {\r\n if (!config.progress) config.progress = {};\r\n // We need to use config.progress variables because something else could change them\r\n // (e.g. someone speeding up offline progress)\r\n config.progress.maxIter = maxIter;\r\n config.progress.remaining = this.runForTime(fun, config.progress.maxIter, config);\r\n const sleepTime = config.sleepTime || 1;\r\n if (!config.progress.remaining) return;\r\n if (config.asyncEntry) config.asyncEntry(config.progress.maxIter - config.progress.remaining);\r\n do {\r\n await this.sleepPromise(sleepTime);\r\n config.progress.remaining = this.runForTime(fun, config.progress.remaining, config);\r\n if (config.asyncProgress) config.asyncProgress(config.progress.maxIter - config.progress.remaining);\r\n } while (config.progress.remaining > 0);\r\n if (config.asyncExit) config.asyncExit();\r\n }\r\n};\r\n","window.EventHub = class EventHub {\r\n constructor() {\r\n this._handlers = {};\r\n }\r\n\r\n on(event, fn, target) {\r\n let handlers = this._handlers[event];\r\n if (handlers === undefined) {\r\n handlers = [];\r\n this._handlers[event] = handlers;\r\n }\r\n handlers.push({ fn, target });\r\n }\r\n\r\n offAll(target) {\r\n for (const handlers of Object.keys(this._handlers)) {\r\n this._handlers[handlers] = this._handlers[handlers]\r\n .filter(handler => handler.target !== target);\r\n }\r\n }\r\n\r\n dispatch(event, args) {\r\n const handlers = this._handlers[event];\r\n if (handlers === undefined) return;\r\n for (const handler of handlers) {\r\n handler.fn(args);\r\n }\r\n }\r\n\r\n static dispatch(event, ...args) {\r\n EventHub.logic.dispatch(event, args);\r\n GameUI.dispatch(event, args);\r\n }\r\n\r\n static get stats() {\r\n // For debug/profiling purposes\r\n function countHandlers(eventHub) {\r\n return Object.values(eventHub._handlers)\r\n .map(handlers => handlers.length)\r\n .sum();\r\n }\r\n return `UI(UPDATE/Total): ${EventHub.ui._handlers[GAME_EVENT.UPDATE].length}/${countHandlers(EventHub.ui)}; ` +\r\n `Logic(Total): ${countHandlers(EventHub.logic)}`;\r\n }\r\n};\r\n\r\nEventHub.logic = new EventHub();\r\nEventHub.ui = new EventHub();\r\n\r\nwindow.GAME_EVENT = {\r\n // Ticks\r\n GAME_TICK_BEFORE: \"GAME_TICK_BEFORE\",\r\n GAME_TICK_AFTER: \"GAME_TICK_AFTER\",\r\n REPLICANTI_TICK_BEFORE: \"REPLICANTI_TICK_BEFORE\",\r\n REPLICANTI_TICK_AFTER: \"REPLICANTI_TICK_AFTER\",\r\n\r\n // Resets\r\n DIMBOOST_BEFORE: \"DIMBOOST_BEFORE\",\r\n DIMBOOST_AFTER: \"DIMBOOST_AFTER\",\r\n GALAXY_RESET_BEFORE: \"GALAXY_RESET_BEFORE\",\r\n GALAXY_RESET_AFTER: \"GALAXY_RESET_AFTER\",\r\n SACRIFICE_RESET_BEFORE: \"SACRIFICE_RESET_BEFORE\",\r\n SACRIFICE_RESET_AFTER: \"SACRIFICE_RESET_AFTER\",\r\n BIG_CRUNCH_BEFORE: \"BIG_CRUNCH_BEFORE\",\r\n BIG_CRUNCH_AFTER: \"BIG_CRUNCH_AFTER\",\r\n ETERNITY_RESET_BEFORE: \"ETERNITY_RESET_BEFORE\",\r\n ETERNITY_RESET_AFTER: \"ETERNITY_RESET_AFTER\",\r\n REALITY_RESET_BEFORE: \"REALITY_RESET_BEFORE\",\r\n REALITY_RESET_AFTER: \"REALITY_RESET_AFTER\",\r\n SINGULARITY_RESET_BEFORE: \"SINGULARITY_RESET_BEFORE\",\r\n SINGULARITY_RESET_AFTER: \"SINGULARITY_RESET_AFTER\",\r\n ARMAGEDDON_BEFORE: \"ARMAGEDDON_BEFORE\",\r\n ARMAGEDDON_AFTER: \"ARMAGEDDON_AFTER\",\r\n MENDING_RESET_BEFORE: \"MENDING_RESET_BEFORE\",\r\n MENDING_RESET_AFTER: \"MENDING_RESET_AFTER\",\r\n\r\n // Glyphs\r\n GLYPHS_EQUIPPED_CHANGED: \"GLYPHS_EQUIPPED_CHANGED\",\r\n GLYPHS_CHANGED: \"GLYPHS_CHANGED\",\r\n GLYPH_SACRIFICED: \"GLYPH_SACRIFICED\",\r\n GLYPH_SET_SAVE_CHANGE: \"GLYPH_SET_SAVE_CHANGE\",\r\n GLYPH_VISUAL_CHANGE: \"GLYPH_VISUAL_CHANGE\",\r\n\r\n // Break Infinity\r\n BREAK_INFINITY: \"BREAK_INFINITY\",\r\n FIX_INFINITY: \"FIX_INFINITY\",\r\n\r\n // Other\r\n INFINITY_DIMENSION_UNLOCKED: \"INFINITY_DIMENSION_UNLOCKED\",\r\n INFINITY_CHALLENGE_COMPLETED: \"INFINITY_CHALLENGE_COMPLETED\",\r\n INFINITY_UPGRADE_BOUGHT: \"INFINITY_UPGRADE_BOUGHT\",\r\n INFINITY_UPGRADE_CHARGED: \"INFINITY_UPGRADE_CHARGED\",\r\n INFINITY_UPGRADES_DISCHARGED: \"INFINITY_UPGRADES_DISCHARGED\",\r\n BREAK_INFINITY_UPGRADE_BOUGHT: \"INFINITY_UPGRADE_BOUGHT\",\r\n BREAK_INFINITY_UPGRADE_CHARGED: \"BREAK_INFINITY_UPGRADE_CHARGED\",\r\n BREAK_INFINITY_UPGRADES_DISCHARGED: \"BREAK_INFINITY_UPGRADES_DISCHARGED\",\r\n ACHIEVEMENT_UNLOCKED: \"ACHIEVEMENT_UNLOCKED\",\r\n CHALLENGE_FAILED: \"CHALLENGE_FAILED\",\r\n REALITY_UPGRADE_BOUGHT: \"REALITY_UPGRADE_BOUGHT\",\r\n REALITY_UPGRADE_TEN_BOUGHT: \"REALITY_UPGRADE_TEN_BOUGHT\",\r\n PERK_BOUGHT: \"PERK_BOUGHT\",\r\n BLACK_HOLE_UNLOCKED: \"BLACK_HOLE_UNLOCKED\",\r\n BLACK_HOLE_UPGRADE_BOUGHT: \"BLACK_HOLE_UPGRADE_BOUGHT\",\r\n EXPO_BLACK_HOLE_UPGRADE_BOUGHT: \"EXPO_BLACK_HOLE_UPGRADE_BOUGHT\",\r\n GAME_LOAD: \"GAME_LOAD\",\r\n OFFLINE_CURRENCY_GAINED: \"OFFLINE_CURRENCY_GAINED\",\r\n SAVE_CONVERTED_FROM_PREVIOUS_VERSION: \"SAVE_CONVERTED_FROM_PREVIOUS_VERSION\",\r\n REALITY_FIRST_UNLOCKED: \"REALITY_FIRST_UNLOCKED\",\r\n AUTOMATOR_TYPE_CHANGED: \"AUTOMATOR_TYPE_CHANGED\",\r\n AUTOMATOR_SAVE_CHANGED: \"AUTOMATOR_SAVE_CHANGED\",\r\n AUTOMATOR_CONSTANT_CHANGED: \"AUTOMATOR_CONSTANT_CHANGED\",\r\n PELLE_STRIKE_UNLOCKED: \"PELLE_STRIKE_UNLOCKED\",\r\n MENDING_UPGRADE_BOUGHT: \"MENDING_UPGRADE_BOUGHT\",\r\n WARP_UPGRADE_BOUGHT: \"WARP_UPGRADE_BOUGHT\",\r\n CORRUPTION_UPGRADE_BOUGHT: \"CORRUPTION_UPGRADE_BOUGHT\",\r\n RA_UPGRADE_BOUGHT: \"RA_UPGRADE_BOUGHT\",\r\n EXPO_BLACK_HOLE_UNLOCKED: \"EXPO_BLACK_HOLE_UNLOCKED\",\r\n\r\n // Used by events to signify that they are triggered by a particular\r\n // event, not handled by the event hub\r\n ACHIEVEMENT_EVENT_OTHER: \"ACHIEVEMENT_EVENT_OTHER\",\r\n\r\n ENTER_PRESSED: \"ENTER_PRESSED\",\r\n ARROW_KEY_PRESSED: \"ARROW_KEY_PRESSED\",\r\n\r\n // UI Events\r\n UPDATE: \"UPDATE\",\r\n TAB_CHANGED: \"TAB_CHANGED\",\r\n CLOSE_MODAL: \"CLOSE_MODAL\",\r\n};\r\n","Array.prototype.distinct = function() {\r\n return this.filter(function (value, index, self) {\r\n return self.indexOf(value) === index;\r\n });\r\n};\r\n\r\nMath.wrap = function(number, min, max) {\r\n const range = max - min + 1;\r\n const offset = ((number - min) % range);\r\n return offset < 0 ? max + 1 + offset : min + offset;\r\n};\r\n\r\nMath.clamp = function(value, min, max) {\r\n return Math.clampMax(Math.clampMin(value, min), max);\r\n};\r\n\r\nMath.clampMin = function(value, min) {\r\n return Math.max(value, min);\r\n};\r\n\r\nMath.clampMax = function(value, max) {\r\n return Math.min(value, max);\r\n};\r\n\r\nArray.prototype.nextSiblingIndex = function(current) {\r\n const currentIndex = this.indexOf(current);\r\n if (currentIndex === -1)\r\n throw \"Current item is not in array\";\r\n return currentIndex === this.length - 1 ? 0 : currentIndex + 1;\r\n};\r\n\r\nArray.prototype.nextSibling = function(current) {\r\n return this[this.nextSiblingIndex(current)];\r\n};\r\n\r\nArray.prototype.previousSiblingIndex = function(current) {\r\n const currentIndex = this.indexOf(current);\r\n if (currentIndex === -1)\r\n throw \"Current item is not in array\";\r\n return currentIndex === 0 ? this.length - 1 : currentIndex - 1;\r\n};\r\n\r\nArray.prototype.previousSibling = function(current) {\r\n return this[this.previousSiblingIndex(current)];\r\n};\r\n\r\nDecimal.sumReducer = function(accumulator, previous) {\r\n return Decimal.add(accumulator, previous);\r\n};\r\n\r\nDecimal.prodReducer = function(accumulator, previous) {\r\n return Decimal.mul(accumulator, previous);\r\n};\r\n\r\nNumber.sumReducer = function(accumulator, previous) {\r\n return accumulator + previous;\r\n};\r\n\r\nNumber.prodReducer = function(accumulator, previous) {\r\n return accumulator * previous;\r\n};\r\n\r\nDecimal.maxReducer = function(a, b) {\r\n return Decimal.max(a, b);\r\n};\r\n\r\nDecimal.prototype.copyFrom = function(decimal) {\r\n if (!(decimal instanceof Decimal) && !(decimal instanceof DecimalCurrency)) {\r\n throw \"Copy value is not Decimal or DecimalCurrency\";\r\n }\r\n this.mantissa = decimal.mantissa;\r\n this.exponent = decimal.exponent;\r\n};\r\n\r\nwindow.copyToClipboard = (function() {\r\n let el = document.createElement('textarea');\r\n document.body.appendChild(el);\r\n el.style.position = \"absolute\";\r\n el.style.left = '-9999999px';\r\n el.setAttribute('readonly', '');\r\n return function(str) {\r\n try {\r\n el.value = str;\r\n el.select();\r\n return document.execCommand('copy');\r\n } catch(ex) {\r\n console.log(ex);\r\n return false;\r\n }\r\n };\r\n}());\r\n\r\nwindow.safeCall = function safeCall(fn) {\r\n if (fn) fn();\r\n}\r\n\r\nString.prototype.capitalize = function() {\r\n return this.toLowerCase().replace(/^\\w/u, c => c.toUpperCase());\r\n};\r\n\r\nString.prototype.splice = function(start, delCount, newSubStr) {\r\n return this.slice(0, start) + newSubStr + this.slice(start + Math.abs(delCount));\r\n};\r\n\r\n/**\r\n * @param {number} start\r\n * @param {number} count\r\n * @returns {number[]}\r\n */\r\nArray.range = function(start, count) {\r\n return [...Array(count).keys()].map(i => i + start);\r\n};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {number} count\r\n * @returns {number[]}\r\n */\r\nArray.repeat = function(value, count) {\r\n return Array(count).fill(value);\r\n};\r\n\r\n/**\r\n * @param {function} predicate\r\n */\r\nArray.prototype.first = function(predicate) {\r\n if (predicate === undefined) {\r\n return this.length > 0 ? this[0] : undefined;\r\n }\r\n if (typeof predicate !== \"function\")\r\n throw \"Predicate must be a function\";\r\n for (let i = 0; i < this.length; i++) {\r\n if (predicate(this[i]) === true) return this[i];\r\n }\r\n throw \"Array doesn't contain a matching item\";\r\n};\r\n\r\n/**\r\n * @param {function?} predicate\r\n */\r\nArray.prototype.last = function(predicate) {\r\n if (predicate === undefined) {\r\n return this.length > 0 ? this[this.length - 1] : undefined;\r\n }\r\n if (typeof predicate !== \"function\")\r\n throw \"Predicate must be a function\";\r\n for (let i = this.length - 1; i >= 0; i--) {\r\n if (predicate(this[i]) === true) return this[i];\r\n }\r\n throw \"Array doesn't contain a matching item\";\r\n};\r\n\r\n/**\r\n * @param {function?} keyFun\r\n * @param {function?} valueFun\r\n * @returns {object}\r\n */\r\nArray.prototype.mapToObject = function(keyFun, valueFun) {\r\n if (typeof keyFun !== \"function\" || typeof valueFun !== \"function\")\r\n throw \"keyFun and valueFun must be functions\";\r\n let out = {}\r\n for (let idx = 0; idx < this.length; ++idx) {\r\n out[keyFun(this[idx], idx)] = valueFun(this[idx], idx);\r\n }\r\n return out;\r\n}\r\n\r\n/**\r\n * @type {number[]}\r\n */\r\nArray.dimensionTiers = Array.range(1, 8);\r\n\r\n/**\r\n * @returns {number}\r\n */\r\nArray.prototype.sum = function() {\r\n if (this.length === 0) return 0;\r\n return this.reduce(Number.sumReducer);\r\n};\r\n\r\n/**\r\n * @returns {Decimal}\r\n */\r\nArray.prototype.sumD = function() {\r\n if (this.length === 0) return new Decimal(0);\r\n return this.reduce(Decimal.sumReducer);\r\n};\r\n\r\n/**\r\n * @returns {number}\r\n */\r\nArray.prototype.max = function() {\r\n if (this.length === 0) return 0;\r\n return this.reduce((a, b) => Math.max(a, b));\r\n};\r\n\r\n/**\r\n * @returns {number}\r\n */\r\nArray.prototype.min = function() {\r\n if (this.length === 0) return 0;\r\n return this.reduce((a, b) => Math.min(a, b));\r\n};\r\n\r\n/**\r\n * @param {function} predicate\r\n * @returns {number}\r\n */\r\nArray.prototype.countWhere = function(predicate) {\r\n let count = 0;\r\n for (const item of this) {\r\n if (predicate(item))++count;\r\n }\r\n return count;\r\n};\r\n\r\n/**\r\n * @returns {Decimal}\r\n */\r\nDecimal.prototype.clampMaxExponent = function(maxExp) {\r\n return this.exponent >= maxExp\r\n ? Decimal.fromMantissaExponent_noNormalize(1, maxExp) : this;\r\n};\r\n\r\n/**\r\n * @return {Decimal}\r\n */\r\nNumber.prototype.toDecimal = function() {\r\n return new Decimal(this.valueOf());\r\n};\r\n\r\nMath.log4 = Math.log(4);\r\n\r\nArray.prototype.randomElement = function() {\r\n return this[Math.floor(Math.random() * this.length)];\r\n};\r\n\r\nDecimal.prototype.valueOf = () => {\r\n throw new Error(\"Implicit conversion from Decimal to number\");\r\n};\r\n\r\nSet.prototype.countWhere = function(predicate) {\r\n let count = 0;\r\n for (const item of this) {\r\n if (predicate(item))++count;\r\n }\r\n return count;\r\n};\r\n\r\nSet.prototype.find = function(predicate) {\r\n for (const item of this) {\r\n if (predicate(item)) return item;\r\n }\r\n return undefined;\r\n};\r\n\r\nSet.prototype.some = function(predicate) {\r\n for (const item of this) {\r\n if (predicate(item)) return true;\r\n }\r\n return false;\r\n};\r\n\r\nSet.prototype.every = function(predicate) {\r\n for (const item of this) {\r\n if (!predicate(item)) return false;\r\n }\r\n return true;\r\n};\r\n\r\nArray.prototype.compact = function() {\r\n return this.filter(x => x !== undefined && x !== null);\r\n};\r\n\r\nArray.prototype.toBitmask = function() {\r\n return this.reduce((prev, val) => prev | (1 << val), 0);\r\n};\r\n\r\nSet.prototype.toBitmask = function() {\r\n let mask = 0;\r\n for (const id of this) mask |= (1 << id);\r\n return mask;\r\n};\r\n\r\nArray.fromBitmask = function(mask) {\r\n const bitIndices = [];\r\n let currentIndex = 0;\r\n while (mask !== 0) {\r\n if (mask & 1) bitIndices.push(currentIndex);\r\n // eslint-disable-next-line no-param-reassign\r\n mask >>= 1;\r\n ++currentIndex;\r\n }\r\n return bitIndices;\r\n};\r\n\r\nString.isWhiteSpace = function(value) {\r\n return value && !value.trim();\r\n};\r\n","function isEND() {\r\n const threshold = GameEnd.endState > END_STATE_MARKERS.END_NUMBERS\r\n ? 1\r\n : (GameEnd.endState - END_STATE_MARKERS.FADE_AWAY) / 2;\r\n // Using the Pelle.isDoomed getter here causes this to not update properly after a game restart\r\n return (player.celestials.pelle.doomed && Math.random() < threshold);// || player.antimatter.exponent >= 9e15;\r\n}\r\n\r\nwindow.format = function format(value, places = 0, placesUnder1000 = 0) {\r\n if (isEND()) return \"END\";\r\n return Notations.current.format(value, places, placesUnder1000, 3);\r\n};\r\n\r\nwindow.formatNE = function formatNE(value, places = 0, placesUnder1000 = 0) {\r\n return Notations.current.format(value, places, placesUnder1000, 3);\r\n};\r\n\r\nwindow.formatInt = function formatInt(value) {\r\n if (isEND()) return \"END\";\r\n // Suppress painful formatting for Standard because it's the most commonly used and arguably \"least painful\"\r\n // of the painful notations. Prevents numbers like 5004 from appearing imprecisely as \"5.00 K\" for example\r\n if (Notations.current.isPainful && Notations.current.name !== \"Standard\") {\r\n return format(value, 2);\r\n }\r\n return formatWithCommas(typeof value === \"number\" ? value.toFixed(0) : value.toNumber().toFixed(0));\r\n};\r\n\r\nwindow.formatFloat = function formatFloat(value, digits) {\r\n if (isEND()) return \"END\";\r\n if (Notations.current.isPainful) {\r\n return format(value, Math.max(2, digits), digits);\r\n }\r\n return formatWithCommas(value.toFixed(digits));\r\n};\r\n\r\nwindow.formatPostBreak = function formatPostBreak(value, places, placesUnder1000) {\r\n if (isEND()) return \"END\";\r\n const notation = Notations.current;\r\n // This is basically just a copy of the format method from notations library,\r\n // with the pre-break case removed.\r\n if (typeof value === \"number\" && !Number.isFinite(value)) {\r\n return notation.infinite;\r\n }\r\n\r\n const decimal = Decimal.fromValue_noAlloc(value);\r\n\r\n if (decimal.exponent < -300) {\r\n return decimal.sign() < 0\r\n ? notation.formatVerySmallNegativeDecimal(decimal.abs(), placesUnder1000)\r\n : notation.formatVerySmallDecimal(decimal, placesUnder1000);\r\n }\r\n\r\n if (decimal.exponent < 3) {\r\n const number = decimal.toNumber();\r\n return number < 0\r\n ? notation.formatNegativeUnder1000(Math.abs(number), placesUnder1000)\r\n : notation.formatUnder1000(number, placesUnder1000);\r\n }\r\n\r\n return decimal.sign() < 0\r\n ? notation.formatNegativeDecimal(decimal.abs(), places)\r\n : notation.formatDecimal(decimal, places);\r\n};\r\n\r\nwindow.formatX = function formatX(value, places, placesUnder1000) {\r\n return `×${format(value, places, placesUnder1000)}`;\r\n};\r\n\r\nwindow.formatPow = function formatPow(value, places, placesUnder1000) {\r\n return `^${format(value, places, placesUnder1000)}`;\r\n};\r\n\r\nwindow.formatPercents = function formatPercents(value, places) {\r\n return `${format(value * 100, 2, places)}%`;\r\n};\r\n\r\nwindow.formatPercentsD = function formatPercentsD(value, places) {\r\n return `${format(value.mul(100), 2, places)}%`;\r\n};\r\n\r\nwindow.formatRarity = function formatRarity(value) {\r\n // We can, annoyingly, have rounding error here, so even though only rarities\r\n // are passed in, we can't trust our input to always be some integer divided by 10.\r\n const places = value.toFixed(1).endsWith(\".0\") ? 0 : 1;\r\n return `${format(value, 2, places)}%`;\r\n};\r\n\r\n// We assume 2/0, 2/2 decimal places to keep parameter count sensible; this is used very rarely\r\nwindow.formatMachines = function formatMachines(realPart, imagPart) {\r\n if (isEND()) return \"END\";\r\n const parts = [];\r\n if (Decimal.neq(realPart, 0)) parts.push(format(realPart, 2));\r\n if (Decimal.neq(imagPart, 0)) parts.push(`${format(imagPart, 2, 2)}i`);\r\n // This function is used for just RM and just iM in a few spots, so we have to push both parts conditionally\r\n // Nonetheless, we also need to special-case both zero so that it doesn't end up displaying as an empty string\r\n if (Decimal.eq(realPart, 0) && Decimal.eq(imagPart, 0)) return format(0);\r\n return parts.join(\" + \");\r\n};\r\n\r\nwindow.timeDisplay = function timeDisplay(ms) {\r\n return TimeSpan.fromMilliseconds(ms).toString();\r\n};\r\n\r\nwindow.timeDisplayNoDecimals = function timeDisplayNoDecimals(ms) {\r\n return TimeSpan.fromMilliseconds(ms).toStringNoDecimals();\r\n};\r\n\r\nwindow.timeDisplayShort = function timeDisplayShort(ms) {\r\n return TimeSpan.fromMilliseconds(ms).toStringShort();\r\n};\r\n\r\nconst commaRegexp = /\\B(?=(\\d{3})+(?!\\d))/gu;\r\nwindow.formatWithCommas = function formatWithCommas(value) {\r\n const decimalPointSplit = value.toString().split(\".\");\r\n decimalPointSplit[0] = decimalPointSplit[0].replace(commaRegexp, \",\");\r\n return decimalPointSplit.join(\".\");\r\n};\r\n\r\n/**\r\n * Check if a number or Decimal is equal to 1.\r\n * @param {number|Decimal} amount\r\n * @return {Boolean} - if the {amount} was equal to 1.\r\n */\r\nwindow.isSingular = function isSingular(amount) {\r\n if (typeof amount === \"number\") return amount === 1;\r\n if (amount instanceof Decimal) return amount.eq(1);\r\n throw `Amount must be either a number or Decimal. Instead, amount was ${amount}`;\r\n};\r\n\r\n// Some letters in the english language pluralize in a different manner than simply adding an 's' to the end.\r\n// As such, the regex match should be placed in the first location, followed by the desired string it\r\n// should be replaced with. Note that $ refers to the EndOfLine for regex, and should be included if the plural occurs\r\n// at the end of the string provided, which will be 99% of times. Not including it is highly likely to cause mistakes,\r\n// as it will select the first instance that matches and replace that.\r\nconst PLURAL_HELPER = new Map([\r\n [/y$/u, \"ies\"],\r\n [/x$/u, \"xes\"],\r\n [/$/u, \"s\"]\r\n]);\r\n\r\n// Some terms require specific (or no) handling when plural. These terms should be added, in Word Case, to this Map.\r\n// Words will be added to this Map when a valid plural for it is found on being run through the pluralize function.\r\nconst pluralDatabase = new Map([\r\n [\"Antimatter\", \"Antimatter\"],\r\n [\"Dilated Time\", \"Dilated Time\"],\r\n]);\r\n\r\n/**\r\n * A function that pluralizes a word based on a designated amount\r\n * @param {string} word - word to be pluralized\r\n * @param {number|Decimal} amount - amount to be used to determine if the value is plural\r\n * @param {string} [plural] - if defined, a specific plural to override the generated plural\r\n * @return {string} - if the {amount} is anything other than one, return the {plural} provided or the\r\n * plural form of the input {word}. If the {amount} is singular, return {word}\r\n */\r\nwindow.pluralize = function pluralize(word, amount, plural) {\r\n if (word === undefined || amount === undefined) throw \"Arguments must be defined\";\r\n\r\n if (isSingular(amount)) return word;\r\n const existingPlural = plural ?? pluralDatabase.get(word);\r\n if (existingPlural !== undefined) return existingPlural;\r\n\r\n const newWord = generatePlural(word);\r\n pluralDatabase.set(word, newWord);\r\n return newWord;\r\n};\r\n\r\n/**\r\n * Creates a new plural based on PLURAL_HELPER and adds it to pluralDatabase\r\n * @param {string} word - a word to be pluralized using the regex in PLURAL_HELPER\r\n * @return {string} - returns the pluralized word. if no pluralized word is found, simply returns the word itself.\r\n */\r\nwindow.generatePlural = function generatePlural(word) {\r\n for (const [match, replaceWith] of PLURAL_HELPER.entries()) {\r\n const newWord = word.replace(match, replaceWith);\r\n if (word !== newWord) return newWord;\r\n }\r\n return word;\r\n};\r\n\r\n/**\r\n * Returns the formatted value followed by a name, pluralized based on the value input.\r\n * @param {string} name - name to pluralize and display after {value}\r\n * @param {number|Decimal} value - number to {format}\r\n * @param {number} [places] - number of places to display for the mantissa\r\n * @param {number} [placesUnder1000] - number of decimal places to display\r\n * @param {function} [formatType=format] - how to format the {value}. defaults to format\r\n * @return {string} - the formatted {value} followed by the {name} after having been pluralized based on the {value}\r\n */\r\n// eslint-disable-next-line max-params\r\nwindow.quantify = function quantify(name, value, places, placesUnder1000, formatType = format) {\r\n if (name === undefined || value === undefined) throw \"Arguments must be defined\";\r\n\r\n const number = formatType(value, places, placesUnder1000);\r\n const plural = pluralize(name, value);\r\n return `${number} ${plural}`;\r\n};\r\n\r\n/**\r\n * Returns the value formatted to formatInt followed by a name, pluralized based on the value input.\r\n * @param {string} name - name to pluralize and display after {value}\r\n * @param {number|Decimal} value - number to format\r\n * @return {string} - the formatted {value} followed by the {name} after having been pluralized based on the {value}\r\n */\r\nwindow.quantifyInt = function quantifyInt(name, value) {\r\n if (name === undefined || value === undefined) throw \"Arguments must be defined\";\r\n\r\n const number = formatInt(value);\r\n const plural = pluralize(name, value);\r\n return `${number} ${plural}`;\r\n};\r\n\r\n/**\r\n * Creates an enumated string, using the oxford comma, such that \"a\"; \"a and b\"; \"a, b, and c\"\r\n * @param {string[]} items - an array of items to enumerate\r\n * @return {string} - a string of {items}, separated by commas and/or and as needed.\r\n */\r\nwindow.makeEnumeration = function makeEnumeration(items) {\r\n if (items.length === 0) return \"\";\r\n if (items.length === 1) return items[0];\r\n if (items.length === 2) return `${items[0]} and ${items[1]}`;\r\n const commaSeparated = items.slice(0, items.length - 1).join(\", \");\r\n const last = items[items.length - 1];\r\n return `${commaSeparated}, and ${last}`;\r\n};\r\n","if (!String.prototype.includes) {\r\n String.prototype.includes = function(search, start) {\r\n if (typeof start !== 'number') {\r\n start = 0;\r\n }\r\n\r\n if (start + search.length > this.length) {\r\n return false;\r\n } else {\r\n return this.indexOf(search, start) !== -1;\r\n }\r\n };\r\n}\r\n\r\n\r\nif (!Array.prototype.includes) {\r\n Object.defineProperty(Array.prototype, 'includes', {\r\n value: function(searchElement, fromIndex) {\r\n\r\n // 1. Let O be ? ToObject(this value).\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n\r\n var o = Object(this);\r\n\r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0;\r\n\r\n // 3. If len is 0, return false.\r\n if (len === 0) {\r\n return false;\r\n }\r\n\r\n // 4. Let n be ? ToInteger(fromIndex).\r\n // (If fromIndex is undefined, this step produces the value 0.)\r\n var n = fromIndex | 0;\r\n\r\n // 5. If n ≥ 0, then\r\n // a. Let k be n.\r\n // 6. Else n < 0,\r\n // a. Let k be len + n.\r\n // b. If k < 0, let k be 0.\r\n var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\r\n\r\n function sameValueZero(x, y) {\r\n return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));\r\n }\r\n\r\n // 7. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let elementK be the result of ? Get(O, ! ToString(k)).\r\n // b. If SameValueZero(searchElement, elementK) is true, return true.\r\n // c. Increase k by 1.\r\n if (sameValueZero(o[k], searchElement)) {\r\n return true;\r\n }\r\n k++;\r\n }\r\n\r\n // 8. Return false\r\n return false;\r\n }\r\n });\r\n}\r\n\r\n if (!Math.log10) {\r\n Math.log10 = Math.log10 || function(x) {\r\n return Math.log(x) * Math.LOG10E;\r\n };\r\n }\r\n\r\n if (!Math.log2) {\r\n Math.log2 = Math.log2 || function(x) {\r\n return Math.log(x) * Math.LOG2E;\r\n };\r\n }\r\n\r\n if (window.NodeList && !NodeList.prototype.forEach) {\r\n NodeList.prototype.forEach = function (callback, thisArg) {\r\n thisArg = thisArg || window;\r\n for (var i = 0; i < this.length; i++) {\r\n callback.call(thisArg, this[i], i, this);\r\n }\r\n };\r\n }\r\n\r\n if (!Array.prototype.find) {\r\n Object.defineProperty(Array.prototype, 'find', {\r\n value: function(predicate) {\r\n // 1. Let O be ? ToObject(this value).\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n\r\n var o = Object(this);\r\n\r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0;\r\n\r\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\r\n if (typeof predicate !== 'function') {\r\n throw new TypeError('predicate must be a function');\r\n }\r\n\r\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n var thisArg = arguments[1];\r\n\r\n // 5. Let k be 0.\r\n var k = 0;\r\n\r\n // 6. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ! ToString(k).\r\n // b. Let kValue be ? Get(O, Pk).\r\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\r\n // d. If testResult is true, return kValue.\r\n var kValue = o[k];\r\n if (predicate.call(thisArg, kValue, k, o)) {\r\n return kValue;\r\n }\r\n // e. Increase k by 1.\r\n k++;\r\n }\r\n\r\n // 7. Return undefined.\r\n return undefined;\r\n }\r\n });\r\n }\r\n\r\n Array.max = function( array ){\r\n return Math.max.apply( Math, array );\r\n };\r\n\r\n Array.min = function( array ){\r\n return Math.min.apply( Math, array );\r\n };\r\n\r\n Object.invert = function(obj) {\r\n var result = {};\r\n var keys = Object.keys(obj);\r\n for (var i = 0, length = keys.length; i < length; i++) {\r\n result[obj[keys[i]]] = keys[i];\r\n }\r\n return result;\r\n };\r\n\r\nif (typeof Object.assign != 'function') {\r\n // Must be writable: true, enumerable: false, configurable: true\r\n Object.defineProperty(Object, \"assign\", {\r\n value: function assign(target, varArgs) { // .length of function is 2\r\n 'use strict';\r\n if (target == null) { // TypeError if undefined or null\r\n throw new TypeError('Cannot convert undefined or null to object');\r\n }\r\n\r\n var to = Object(target);\r\n\r\n for (var index = 1; index < arguments.length; index++) {\r\n var nextSource = arguments[index];\r\n\r\n if (nextSource != null) { // Skip over if undefined or null\r\n for (var nextKey in nextSource) {\r\n // Avoid bugs when hasOwnProperty is shadowed\r\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\r\n to[nextKey] = nextSource[nextKey];\r\n }\r\n }\r\n }\r\n }\r\n return to;\r\n },\r\n writable: true,\r\n configurable: true\r\n });\r\n}\r\n","window.TimeSpan = class TimeSpan {\r\n /**\r\n * @param {Number|Decimal} value\r\n * @returns {TimeSpan}\r\n */\r\n static fromYears(value) {\r\n return new TimeSpan(new Decimal(value).times(31536e6));\r\n }\r\n\r\n /**\r\n * @param {Number|Decimal} value\r\n * @returns {TimeSpan}\r\n */\r\n static fromDays(value) {\r\n return new TimeSpan(new Decimal(value).times(864e5));\r\n }\r\n\r\n /**\r\n * @param {Number|Decimal} value\r\n * @returns {TimeSpan}\r\n */\r\n static fromHours(value) {\r\n return new TimeSpan(new Decimal(value).times(36e5));\r\n }\r\n\r\n /**\r\n * @param {Number|Decimal} value\r\n * @returns {TimeSpan}\r\n */\r\n static fromMinutes(value) {\r\n return new TimeSpan(new Decimal(value).times(6e4));\r\n }\r\n\r\n /**\r\n * @param {Number|Decimal} value\r\n * @returns {TimeSpan}\r\n */\r\n static fromSeconds(value) {\r\n return new TimeSpan(new Decimal(value).times(1e3));\r\n }\r\n\r\n /**\r\n * @param {Number|Decimal} value\r\n * @returns {TimeSpan}\r\n */\r\n static fromMilliseconds(value) {\r\n return new TimeSpan(new Decimal(value));\r\n }\r\n\r\n /**\r\n * @param {Number|Decimal} ms\r\n */\r\n constructor(ms) {\r\n Guard.isNumber(ms, \"Value 'ms' must be a number or Decimal\");\r\n this._ms = ms;\r\n }\r\n\r\n /**\r\n * @param {TimeSpan} other\r\n */\r\n copyFrom(other) {\r\n Guard.isTimeSpan(other);\r\n this._ms = other._ms;\r\n }\r\n\r\n /**\r\n * @param {Number|Decimal} ms\r\n */\r\n setFrom(ms) {\r\n Guard.isNumber(ms);\r\n this._ms = ms;\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get years() {\r\n return Decimal.floor(this.totalYears);\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get days() {\r\n return Decimal.floor(this.totalDays.div(365).sub(this.totalDays.div(365).floor()).times(365));\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get hours() {\r\n return Decimal.floor(this.totalHours.div(24).sub(this.totalHours.div(24).floor()).times(24));\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get minutes() {\r\n return Decimal.floor(this.totalMinutes.div(60).sub(this.totalMinutes.div(60).floor()).times(60));\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get seconds() {\r\n return Decimal.floor(this.totalSeconds.div(60).sub(this.totalSeconds.div(60).floor()).times(60));\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get milliseconds() {\r\n return Decimal.floor(this.totalMilliseconds.div(1e3).sub(this.totalMilliseconds.div(1e3).floor()).times(1e3));\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get totalYears() {\r\n return new Decimal(this._ms).div(31536e6);\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get totalDays() {\r\n return new Decimal(this._ms).div(864e5);\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get totalHours() {\r\n return new Decimal(this._ms).div(36e5);\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get totalMinutes() {\r\n return new Decimal(this._ms).div(6e4);\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get totalSeconds() {\r\n return new Decimal(this._ms).div(1e3);\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get totalMilliseconds() {\r\n return new Decimal(this._ms);\r\n }\r\n\r\n /**\r\n * @param {TimeSpan} other\r\n * @returns {TimeSpan}\r\n */\r\n plus(other) {\r\n Guard.isTimeSpan(other);\r\n return new TimeSpan(this._ms .add(other._ms));\r\n }\r\n\r\n /**\r\n * @param {TimeSpan} other\r\n * @returns {TimeSpan}\r\n */\r\n minus(other) {\r\n Guard.isTimeSpan(other);\r\n return new TimeSpan(this._ms.sub(other._ms));\r\n }\r\n\r\n /**\r\n * @param {Number} other\r\n * @returns {TimeSpan}\r\n */\r\n times(other) {\r\n Guard.isNumber(other);\r\n return new TimeSpan(this._ms.times(other));\r\n }\r\n\r\n /**\r\n * @param {Number} other\r\n * @returns {TimeSpan}\r\n */\r\n dividedBy(other) {\r\n Guard.isNumber(other);\r\n return new TimeSpan(this._ms.div(other));\r\n }\r\n\r\n /**\r\n * @returns {String}\r\n */\r\n toString() {\r\n if (this.years.gt(1e6)) {\r\n return `${format(this.totalYears, 3, 0)} years`;\r\n }\r\n if (this.totalSeconds.lte(10)) {\r\n return this.toStringNoDecimals();\r\n }\r\n return this.toStringShort();\r\n }\r\n\r\n /**\r\n * @returns {String}\r\n */\r\n toStringNoDecimals() {\r\n const parts = [];\r\n function addCheckedComponent(value, name) {\r\n if (value.eq(0)) {\r\n return;\r\n }\r\n addComponent(value, name);\r\n }\r\n function addComponent(value, name) {\r\n parts.push(value.eq(1) ? `${formatInt(value)} ${name}` : `${formatInt(value)} ${name}s`);\r\n }\r\n addCheckedComponent(this.years, \"year\");\r\n addCheckedComponent(this.days, \"day\");\r\n addCheckedComponent(this.hours, \"hour\");\r\n addCheckedComponent(this.minutes, \"minute\");\r\n addCheckedComponent(this.seconds, \"second\");\r\n addCheckedComponent(this.milliseconds, \"millisecond\");\r\n // Join with commas and 'and' in the end.\r\n if (parts.length == 0) return `${formatInt(0)} seconds`;\r\n return [parts.slice(0, -1).join(\", \"), parts.slice(-1)[0]].join(parts.length < 2 ? \"\" : \" and \");\r\n }\r\n\r\n /**\r\n * Note: For speedruns, we give 3 digits of hours on HMS formatting, a decimal point on seconds, and\r\n * suppress END formatting on the speedrun record tabs\r\n * @param {boolean} useHMS If true, will display times as HH:MM:SS in between a minute and 100 hours.\r\n * @returns {String}\r\n */\r\n toStringShort(useHMS = true, isSpeedrun = false) {\r\n // Probably not worth the trouble of importing the isEND function from formatting since this accomplishes the same\r\n // thing; we do however need this to prevent strings like \"02:32\" from showing up though\r\n if (format(0) === \"END\" && !isSpeedrun) return \"END\";\r\n\r\n const totalSeconds = this.totalSeconds;\r\n if (totalSeconds.gt(5e-7) && totalSeconds.lt(1e-3)) {\r\n // This conditional happens when when the time is less than 1 millisecond\r\n // but big enough not to round to 0 with 3 decimal places (so showing decimal places\r\n // won't just show 0 and waste space).\r\n return `${format(totalSeconds.times(1000), 0, 3)} ms`;\r\n }\r\n if (totalSeconds.lt(1)) {\r\n // This catches all the cases when totalSeconds is less than 1 but not\r\n // between 5e-7 and 1e-3. This includes two types of cases:\r\n // (1) those less than or equal to 5e-7, which most notations will format as 0\r\n // (the most notable case of this kind is 0 itself).\r\n // (2) those greater than or equal to 1e-3, which will be formatted with default settings\r\n // (for most notations, rounding to the nearest integer number of milliseconds)\r\n return `${format(totalSeconds.times(1000))} ms`;\r\n }\r\n if (totalSeconds.lt(10)) {\r\n return `${format(totalSeconds, 0, 3)} seconds`;\r\n }\r\n if (totalSeconds.lt(60)) {\r\n return `${format(totalSeconds, 0, 2)} seconds`;\r\n }\r\n if (this.totalHours.lt(100) || (isSpeedrun && this.totalHours.lt(1000))) {\r\n if (useHMS && !Notations.current.isPainful) {\r\n const sec = seconds(this.seconds, this.milliseconds);\r\n if (Decimal.floor(this.totalHours).eq(0)) return `${formatHMS(this.minutes)}:${sec}`;\r\n return `${formatHMS(Decimal.floor(this.totalHours))}:${formatHMS(this.minutes)}:${sec}`;\r\n }\r\n if (this.totalMinutes.lt(60)) {\r\n return `${format(this.totalMinutes, 0, 2)} minutes`;\r\n }\r\n if (this.totalHours.lt(24)) {\r\n return `${format(this.totalHours, 0, 2)} hours`;\r\n }\r\n }\r\n if (this.totalDays.lt(500)) {\r\n return `${isSpeedrun ? this.totalDays.toFixed(2) : format(this.totalDays, 0, 2)} days`;\r\n }\r\n return `${isSpeedrun ? this.totalYears.toFixed(3) : format(this.totalYears, 3, 2)} years`;\r\n\r\n function formatHMS(value) {\r\n const s = value.toString();\r\n return s.length === 1 ? `0${s}` : s;\r\n }\r\n\r\n function seconds(s, ms) {\r\n const sec = formatHMS(s);\r\n return isSpeedrun ? `${sec}.${Decimal.floor(ms.div(100))}` : sec;\r\n }\r\n }\r\n\r\n toTimeEstimate() {\r\n const seconds = this.totalSeconds;\r\n if (seconds.lt(1)) return `< ${formatInt(1)} second`;\r\n if (seconds.gt(86400 * 365.25)) return `> ${formatInt(1)} year`;\r\n return this.toStringShort();\r\n }\r\n\r\n static get zero() {\r\n return new TimeSpan(new Decimal(0));\r\n }\r\n\r\n static get maxValue() {\r\n return new TimeSpan(Decimal.pow10(Number.MAX_VALUE));\r\n }\r\n\r\n static get minValue() {\r\n return new TimeSpan(Decimal.pow10(Number.MIN_VALUE));\r\n }\r\n};\r\n\r\nconst Guard = {\r\n isDefined(value, message) {\r\n if (value !== undefined) return;\r\n if (message) throw message;\r\n throw \"Value is defined\";\r\n },\r\n isNumber(value, message) {\r\n if (typeof value === \"number\") return;\r\n if (value instanceof Decimal) return;\r\n if (message) throw message;\r\n throw \"Value is not a number\";\r\n },\r\n isTimeSpan(value, message) {\r\n if (value instanceof TimeSpan) return;\r\n if (message) throw message;\r\n throw \"Value is not a TimeSpan\";\r\n }\r\n};\r\n","import CodeMirror from \"codemirror/lib/codemirror\";\r\nimport Decimal from \"break_infinity.js\";\r\nimport Vue from \"vue\";\r\n\r\nimport \"codemirror/addon/mode/simple\";\r\nimport \"codemirror/addon/hint/show-hint\";\r\nimport \"codemirror/addon/lint/lint\";\r\nimport \"codemirror/addon/selection/active-line\";\r\nimport \"codemirror/addon/edit/closebrackets\";\r\n\r\nwindow.CodeMirror = CodeMirror;\r\nwindow.Decimal = Decimal;\r\nwindow.Vue = Vue;\r\n","export const DEV = process.env.VUE_APP_DEV === \"true\";\r\nexport const STEAM = process.env.VUE_APP_STEAM === \"true\";\r\nexport const MAC = window.navigator.platform === \"MacIntel\";\r\n","import { DEV } from \"@/env\";\r\n\r\nwindow.NotImplementedError = class NotImplementedError extends Error {\r\n constructor() {\r\n super(\"The method is not implemented.\");\r\n this.name = \"NotImplementedError\";\r\n }\r\n};\r\n\r\nwindow.GlobalErrorHandler = {\r\n handled: false,\r\n cleanStart: false,\r\n onerror(event) {\r\n if (this.handled) return;\r\n this.handled = true;\r\n if (!this.cleanStart) {\r\n document.getElementById(\"loading\").style.display = \"none\";\r\n requestAnimationFrame(() => this.crash(event));\r\n return;\r\n }\r\n this.stopGame();\r\n this.crash(event);\r\n },\r\n stopGame() {\r\n GameKeyboard.disable();\r\n GameIntervals.stop();\r\n function clearHandles(set, clear) {\r\n // eslint-disable-next-line no-empty-function\r\n let id = set(() => {}, 9999);\r\n while (id--) {\r\n clear(id);\r\n }\r\n }\r\n clearHandles(setInterval, clearInterval);\r\n clearHandles(setTimeout, clearTimeout);\r\n clearHandles(requestAnimationFrame, cancelAnimationFrame);\r\n },\r\n crash(message) {\r\n if (window.GameUI !== undefined && GameUI.initialized) {\r\n Modal.message.show(`${message}
Check the console for more details`, {}, 3);\r\n }\r\n // eslint-disable-next-line no-debugger\r\n debugger;\r\n }\r\n};\r\n\r\nwindow.onerror = (event, source) => {\r\n if (!source.endsWith(\".js\")) return;\r\n GlobalErrorHandler.onerror(event);\r\n};\r\n","import Vue from 'vue';\r\n\r\nwindow.PRESTIGE_EVENT = {\r\n DIMENSION_BOOST: 0,\r\n ANTIMATTER_GALAXY: 1,\r\n INFINITY: 2,\r\n ETERNITY: 3,\r\n REALITY: 4,\r\n MENDING: 5,\r\n};\r\n\r\nfunction deepFreeze(obj) {\r\n Object.keys(obj).forEach(prop => {\r\n const reference = obj[prop];\r\n if (typeof reference === \"object\") deepFreeze(reference);\r\n });\r\n return Object.freeze(obj);\r\n}\r\n\r\nexport const DC = deepFreeze({\r\n // Naming Scheme:\r\n // D[0-9]: Decimal mantissa variable\r\n // _: decimal (.) part of the mantissa\r\n // E[0-9]: Decimal exponent variable\r\n // C: Calculation. D - .div, P - .pow\r\n\r\n /* eslint-disable key-spacing */\r\n DM1: new Decimal(\"-1\"),\r\n D0: new Decimal(\"0\"),\r\n\r\n D0_01: new Decimal(\"0.01\"),\r\n D0_1: new Decimal(\"0.1\"),\r\n D0_4: new Decimal(\"0.4\"),\r\n D0_55: new Decimal(\"0.55\"),\r\n D0_8446303389034288: new Decimal(\"0.8446303389034288\"),\r\n D0_95: new Decimal(\"0.95\"),\r\n D0_965: new Decimal(\"0.965\"),\r\n D1: new Decimal(\"1\"),\r\n D1_0000109: new Decimal(\"1.0000109\"),\r\n D1_00038: new Decimal(\"1.00038\"),\r\n D1_0004: new Decimal(\"1.0004\"),\r\n D1_0025: new Decimal(\"1.0025\"),\r\n D1_005: new Decimal(\"1.005\"),\r\n D1_007: new Decimal(\"1.007\"),\r\n D1_02: new Decimal(\"1.02\"),\r\n D1_0285: new Decimal(\"1.0285\"),\r\n D1_2: new Decimal(\"1.2\"),\r\n D1_3: new Decimal(\"1.3\"),\r\n D2: new Decimal(\"2\"),\r\n D3: new Decimal(\"3\"),\r\n D4: new Decimal(\"4\"),\r\n D5: new Decimal(\"5\"),\r\n D6_66: new Decimal(\"6.66\"),\r\n D15: new Decimal(\"15\"),\r\n D16: new Decimal(\"16\"),\r\n D11111: new Decimal(\"11111\"),\r\n D3E4: new Decimal(\"30000\"),\r\n D2E5: new Decimal(\"2e5\"),\r\n D2E6: new Decimal(\"2e6\"),\r\n D5E7: new Decimal(\"5e7\"),\r\n D2E9: new Decimal(\"2e9\"),\r\n D2E25: new Decimal(\"2e25\"),\r\n D2E22222: new Decimal(\"2e22222\"),\r\n D9_99999E999: new Decimal(\"9.99999e999\"),\r\n D9_9999E9999: new Decimal(\"9.9999e9999\"),\r\n\r\n // Calculations for precise numbers.\r\n C1D1_1245: Decimal.div(1, 1.1245),\r\n D2P30D0_61: Decimal.pow(2, 30 / 0.61),\r\n C2P30: Decimal.pow(2, 30),\r\n C2P1024: Decimal.pow(2, 1024),\r\n C10P16000D3: Decimal.pow(10, 16000 / 3),\r\n\r\n // 1e1 is 10\r\n E1: new Decimal(\"1e1\"),\r\n E2: new Decimal(\"1e2\"),\r\n E3: new Decimal(\"1e3\"),\r\n E5: new Decimal(\"1e5\"),\r\n E6: new Decimal(\"1e6\"),\r\n E8: new Decimal(\"1e8\"),\r\n E9: new Decimal(\"1e9\"),\r\n E10: new Decimal(\"1e10\"),\r\n E12: new Decimal(\"1e12\"),\r\n E15: new Decimal(\"1e15\"),\r\n E20: new Decimal(\"1e20\"),\r\n E25: new Decimal(\"1e25\"),\r\n E29: new Decimal(\"1e29\"),\r\n E30: new Decimal(\"1e30\"),\r\n E31: new Decimal(\"1e31\"),\r\n E36: new Decimal(\"1e36\"),\r\n E40: new Decimal(\"1e40\"),\r\n E43: new Decimal(\"1e43\"),\r\n E45: new Decimal(\"1e45\"),\r\n E50: new Decimal(\"1e50\"),\r\n E55: new Decimal(\"1e55\"),\r\n E58: new Decimal(\"1e58\"),\r\n E60: new Decimal(\"1e60\"),\r\n E63: new Decimal(\"1e63\"),\r\n E70: new Decimal(\"1e70\"),\r\n E75: new Decimal(\"1e75\"),\r\n E80: new Decimal(\"1e80\"),\r\n E90: new Decimal(\"1e90\"),\r\n E100: new Decimal(\"1e100\"),\r\n E140: new Decimal(\"1e140\"),\r\n E150: new Decimal(\"1e150\"),\r\n E160: new Decimal(\"1e160\"),\r\n E170: new Decimal(\"1e170\"),\r\n E175: new Decimal(\"1e175\"),\r\n E200: new Decimal(\"1e200\"),\r\n E250: new Decimal(\"1e250\"),\r\n E260: new Decimal(\"1e260\"),\r\n E280: new Decimal(\"1e280\"),\r\n E300: new Decimal(\"1e300\"),\r\n E308: new Decimal(\"1e308\"),\r\n E309: new Decimal(\"1e309\"),\r\n E310: new Decimal(\"1e310\"),\r\n E315: new Decimal(\"1e315\"),\r\n E320: new Decimal(\"1e320\"),\r\n E333: new Decimal(\"1e333\"),\r\n E349: new Decimal(\"1e349\"),\r\n E400: new Decimal(\"1e400\"),\r\n E450: new Decimal(\"1e450\"),\r\n E500: new Decimal(\"1e500\"),\r\n E530: new Decimal(\"1e530\"),\r\n E550: new Decimal(\"1e550\"),\r\n E600: new Decimal(\"1e600\"),\r\n E616: new Decimal(\"1e616\"),\r\n E650: new Decimal(\"1e650\"),\r\n E750: new Decimal(\"1e750\"),\r\n E850: new Decimal(\"1e850\"),\r\n E900: new Decimal(\"1e900\"),\r\n E925: new Decimal(\"1e925\"),\r\n E975: new Decimal(\"1e975\"),\r\n E1000: new Decimal(\"1e1000\"),\r\n E1100: new Decimal(\"1e1100\"),\r\n E1200: new Decimal(\"1e1200\"),\r\n E1300: new Decimal(\"1e1300\"),\r\n E1400: new Decimal(\"1e1400\"),\r\n E1500: new Decimal(\"1e1500\"),\r\n E1750: new Decimal(\"1e1750\"),\r\n E1800: new Decimal(\"1e1800\"),\r\n E1900: new Decimal(\"1e1900\"),\r\n E2000: new Decimal(\"1e2000\"),\r\n E2350: new Decimal(\"1e2350\"),\r\n E2400: new Decimal(\"1e2400\"),\r\n E2500: new Decimal(\"1e2500\"),\r\n E2650: new Decimal(\"1e2650\"),\r\n E2700: new Decimal(\"1e2700\"),\r\n E2750: new Decimal(\"1e2750\"),\r\n E2800: new Decimal(\"1e2800\"),\r\n E2900: new Decimal(\"1e2900\"),\r\n E3000: new Decimal(\"1e3000\"),\r\n E3200: new Decimal(\"1e3200\"),\r\n E3350: new Decimal(\"1e3350\"),\r\n E4000: new Decimal(\"1e4000\"),\r\n E5000: new Decimal(\"1e5000\"),\r\n E6000: new Decimal(\"1e6000\"),\r\n E8000: new Decimal(\"1e8000\"),\r\n E9000: new Decimal(\"1e9000\"),\r\n E10000: new Decimal(\"1e10000\"),\r\n E10500: new Decimal(\"1e10500\"),\r\n E11000: new Decimal(\"1e11000\"),\r\n E11111: new Decimal(\"1e11111\"),\r\n E11200: new Decimal(\"1e11200\"),\r\n E12000: new Decimal(\"1e12000\"),\r\n E13000: new Decimal(\"1e13000\"),\r\n E14000: new Decimal(\"1e14000\"),\r\n E16500: new Decimal(\"1e16500\"),\r\n E17500: new Decimal(\"1e17500\"),\r\n E18000: new Decimal(\"1e18000\"),\r\n E20000: new Decimal(\"1e20000\"),\r\n E22500: new Decimal(\"1e22500\"),\r\n E23000: new Decimal(\"1e23000\"),\r\n E27000: new Decimal(\"1e27000\"),\r\n E28000: new Decimal(\"1e28000\"),\r\n E30000: new Decimal(\"1e30000\"),\r\n E45000: new Decimal(\"1e45000\"),\r\n E54000: new Decimal(\"1e54000\"),\r\n E60000: new Decimal(\"1e60000\"),\r\n E100000: new Decimal(\"1e100000\"),\r\n E110000: new Decimal(\"1e110000\"),\r\n E164000: new Decimal(\"1e164000\"),\r\n E200000: new Decimal(\"1e200000\"),\r\n E201600: new Decimal(\"1e201600\"),\r\n E208000: new Decimal(\"1e208000\"),\r\n E210000: new Decimal(\"1e210000\"),\r\n E300000: new Decimal(\"1e300000\"),\r\n E320000: new Decimal(\"1e320000\"),\r\n E500000: new Decimal(\"1e500000\"),\r\n E1E6: new Decimal(\"1e1000000\"),\r\n E3E6: new Decimal(\"1e3000000\"),\r\n E6E6: new Decimal(\"1e6000000\"),\r\n E1E7: new Decimal(\"1e10000000\"),\r\n E2E7: new Decimal(\"1e20000000\"),\r\n E4E7: new Decimal(\"1e40000000\"),\r\n E6E7: new Decimal(\"1e60000000\"),\r\n E1E8: new Decimal(\"1e100000000\"),\r\n E1_5E12: new Decimal(\"1e1500000000000\"),\r\n E1E15: new Decimal(\"1e1000000000000000\"),\r\n //new Constants are here\r\n END: new Decimal(\"1e9000000000000000\"),\r\n E1E9: new Decimal(\"1e1000000000\"),\r\n E1E10: new Decimal(\"1e10000000000\"),\r\n WARP_LIMIT: new Decimal(\"1e10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"),\r\n});\r\n\r\nwindow.AUTOBUYER_MODE = {\r\n BUY_SINGLE: 1,\r\n BUY_10: 10,\r\n BUY_MAX: 100,\r\n};\r\n\r\nwindow.AUTO_CRUNCH_MODE = {\r\n AMOUNT: 0,\r\n TIME: 1,\r\n X_HIGHEST: 2\r\n};\r\n\r\nwindow.AUTO_ETERNITY_MODE = {\r\n AMOUNT: 0,\r\n TIME: 1,\r\n X_HIGHEST: 2\r\n};\r\n\r\nwindow.AUTO_REALITY_MODE = {\r\n RM: 0,\r\n GLYPH: 1,\r\n EITHER: 2,\r\n BOTH: 3,\r\n TIME: 4,\r\n RELIC_SHARD: 5,\r\n};\r\n\r\nwindow.AUTO_MEND_MODE = {\r\n AMOUNT: 0,\r\n TIME: 1\r\n};\r\n\r\nwindow.RECENT_PRESTIGE_RESOURCE = {\r\n ABSOLUTE_GAIN: 0,\r\n RATE: 1,\r\n CURRENCY: 2,\r\n PRESTIGE_COUNT: 3,\r\n};\r\n\r\n// Free tickspeed multiplier with TS171. Shared here because formatting glyph effects depends on it\r\nwindow.TS171_MULTIPLIER = 1.25;\r\n// wait what---sxy\r\nwindow.TS309_MULTIPLIER = 1.20;\r\n\r\n// Used as drag and drop data type\r\nwindow.GLYPH_MIME_TYPE = \"text/x-ivark-glyph\";\r\n\r\n// These need to be in descending order for searching over them to work trivially, and all need to be hex codes\r\n// in order for reality glyph color parsing to work properly in the cosmetic handler\r\nwindow.GlyphRarities = [\r\n {\r\n minStrength: 3.75,\r\n name: \"Divine\",\r\n darkColor: \"#ca7cee\",\r\n lightColor: \"#deaaf9\",\r\n darkHighContrast: \"#ff60ff\",\r\n lightHighContrast: \"#600060\"\r\n },{\r\n minStrength: 3.5,\r\n name: \"Celestial\",\r\n darkColor: \"#3d3dec\",\r\n lightColor: \"#9696ff\",\r\n darkHighContrast: \"#ffff00\",\r\n lightHighContrast: \"#c0c000\"\r\n }, {\r\n minStrength: 3.25,\r\n name: \"Transcendent\",\r\n darkColor: \"#03ffec\",\r\n lightColor: \"#00c3c3\",\r\n darkHighContrast: \"#00ffff\",\r\n lightHighContrast: \"#00c0c0\"\r\n }, {\r\n minStrength: 3,\r\n name: \"Mythical\",\r\n darkColor: \"#d50000\",\r\n lightColor: \"#d50000\",\r\n darkHighContrast: \"#c00000\",\r\n lightHighContrast: \"#ff0000\"\r\n }, {\r\n minStrength: 2.75,\r\n name: \"Legendary\",\r\n darkColor: \"#ff9800\",\r\n lightColor: \"#d68100\",\r\n darkHighContrast: \"#ff8000\",\r\n lightHighContrast: \"#ff8000\"\r\n }, {\r\n minStrength: 2.5,\r\n name: \"Epic\",\r\n darkColor: \"#9c27b0\",\r\n lightColor: \"#9c27b0\",\r\n darkHighContrast: \"#ff00ff\",\r\n lightHighContrast: \"#ff00ff\"\r\n }, {\r\n minStrength: 2,\r\n name: \"Rare\",\r\n darkColor: \"#5096f3\",\r\n lightColor: \"#0d40ff\",\r\n darkHighContrast: \"#6060ff\",\r\n lightHighContrast: \"#0000ff\"\r\n }, {\r\n minStrength: 1.5,\r\n name: \"Uncommon\",\r\n darkColor: \"#43a047\",\r\n lightColor: \"#1e8622\",\r\n darkHighContrast: \"#00ff00\",\r\n lightHighContrast: \"#00b000\"\r\n }, {\r\n minStrength: 1,\r\n name: \"Common\",\r\n darkColor: \"#ffffff\",\r\n lightColor: \"#000000\",\r\n darkHighContrast: \"#ffffff\",\r\n lightHighContrast: \"#000000\"\r\n },\r\n];\r\n\r\nwindow.GLYPH_BG_SETTING = {\r\n AUTO: 0,\r\n LIGHT: 1,\r\n DARK: 2,\r\n};\r\n\r\nwindow.GLYPH_TYPES = [\r\n \"power\",\r\n \"infinity\",\r\n \"replication\",\r\n \"time\",\r\n \"dilation\",\r\n \"effarig\",\r\n \"reality\",\r\n \"cursed\",\r\n \"companion\",\r\n \"amalgam\"\r\n];\r\n\r\nwindow.FUNCTIONAL_GLYPH_TYPES = [\r\n \"power\",\r\n \"infinity\",\r\n \"replication\",\r\n \"time\",\r\n \"dilation\",\r\n \"effarig\",\r\n \"reality\",\r\n \"cursed\"\r\n];\r\n\r\nwindow.BASIC_GLYPH_TYPES = [\r\n \"power\",\r\n \"infinity\",\r\n \"replication\",\r\n \"time\",\r\n \"dilation\"\r\n];\r\n\r\nwindow.ALCHEMY_BASIC_GLYPH_TYPES = [\r\n \"power\",\r\n \"infinity\",\r\n \"replication\",\r\n \"time\",\r\n \"dilation\",\r\n \"effarig\"\r\n];\r\n\r\nwindow.GLYPH_SYMBOLS = {\r\n power: \"Ω\",\r\n infinity: \"∞\",\r\n replication: \"Ξ\",\r\n time: \"Δ\",\r\n dilation: \"Ψ\",\r\n effarig: \"Ϙ\",\r\n reality: \"Ϟ\",\r\n cursed: \"⸸\",\r\n companion: \"♥\",\r\n amalgam: \"?\"\r\n};\r\n\r\nwindow.CANCER_GLYPH_SYMBOLS = {\r\n power: \"⚡\",\r\n infinity: \"8\",\r\n replication: \"⚤\",\r\n time: \"🕟\",\r\n dilation: \"☎\",\r\n effarig: \"🦒\",\r\n reality: \"⛧\",\r\n cursed: \"☠\",\r\n companion: \"³\",\r\n amalgam: \"?\"\r\n};\r\n\r\nwindow.ALTERATION_TYPE = {\r\n ADDITION: 1,\r\n EMPOWER: 2,\r\n BOOST: 3\r\n};\r\n\r\nwindow.BLACK_HOLE_PAUSE_MODE = {\r\n NO_PAUSE: 0,\r\n PAUSE_BEFORE_BH1: 1,\r\n PAUSE_BEFORE_BH2: 2,\r\n};\r\n\r\nwindow.EXPO_BLACK_HOLE_PAUSE_MODE = {\r\n NO_PAUSE: 0,\r\n PAUSE_BEFORE_BH1: 1,\r\n PAUSE_BEFORE_BH2: 2,\r\n};\r\n\r\nwindow.GLYPH_SIDEBAR_MODE = {\r\n INVENTORY_MANAGEMENT: 0,\r\n FILTER_SETTINGS: 1,\r\n SAVED_SETS: 2,\r\n SACRIFICE_TYPE: 3,\r\n};\r\n\r\nwindow.AUTO_SORT_MODE = {\r\n NONE: 0,\r\n LEVEL: 1,\r\n POWER: 2,\r\n EFFECT: 3,\r\n SCORE: 4\r\n};\r\n\r\nwindow.AUTO_GLYPH_SCORE = {\r\n LOWEST_SACRIFICE: 0,\r\n EFFECT_COUNT: 1,\r\n RARITY_THRESHOLD: 2,\r\n SPECIFIED_EFFECT: 3,\r\n EFFECT_SCORE: 4,\r\n LOWEST_ALCHEMY: 5,\r\n ALCHEMY_VALUE: 6\r\n};\r\n\r\nwindow.AUTO_GLYPH_REJECT = {\r\n SACRIFICE: 0,\r\n REFINE: 1,\r\n REFINE_TO_CAP: 2,\r\n};\r\n\r\nwindow.TIME_STUDY_PATH = {\r\n NONE: 0,\r\n ANTIMATTER_DIM: 1,\r\n INFINITY_DIM: 2,\r\n TIME_DIM: 3,\r\n ACTIVE: 4,\r\n PASSIVE: 5,\r\n IDLE: 6,\r\n LIGHT: 7,\r\n DARK: 8\r\n};\r\n\r\nwindow.TIME_STUDY_TYPE = {\r\n NORMAL: 0,\r\n ETERNITY_CHALLENGE: 1,\r\n DILATION: 2,\r\n TRIAD: 3,\r\n MYRIAD: 4,\r\n KOHLER_EXCLUSIVE: 5,\r\n};\r\n\r\nwindow.TS_REQUIREMENT_TYPE = {\r\n AT_LEAST_ONE: 0,\r\n ALL: 1,\r\n DIMENSION_PATH: 2,\r\n};\r\n\r\nwindow.ALCHEMY_RESOURCE = {\r\n POWER: 0,\r\n INFINITY: 1,\r\n TIME: 2,\r\n REPLICATION: 3,\r\n DILATION: 4,\r\n CARDINALITY: 5,\r\n ETERNITY: 6,\r\n DIMENSIONALITY: 7,\r\n INFLATION: 8,\r\n ALTERNATION: 9,\r\n EFFARIG: 10,\r\n SYNERGISM: 11,\r\n MOMENTUM: 12,\r\n DECOHERENCE: 13,\r\n EXPONENTIAL: 14,\r\n FORCE: 15,\r\n UNCOUNTABILITY: 16,\r\n BOUNDLESS: 17,\r\n MULTIVERSAL: 18,\r\n UNPREDICTABILITY: 19,\r\n REALITY: 20\r\n};\r\n\r\nwindow.SINGULARITY_MILESTONE_RESOURCE = {\r\n SINGULARITIES: 0,\r\n CONDENSE_COUNT: 1,\r\n MANUAL_TIME: 2,\r\n AUTO_TIME: 3,\r\n};\r\n\r\nwindow.SINGULARITY_MILESTONE_SORT = {\r\n SINGULARITIES_TO_NEXT: 0,\r\n CURRENT_COMPLETIONS: 1,\r\n PERCENT_COMPLETIONS: 2,\r\n FINAL_COMPLETION: 3,\r\n MOST_RECENT: 4,\r\n};\r\n\r\nwindow.COMPLETED_MILESTONES = {\r\n FIRST: 0,\r\n LAST: 1,\r\n IGNORED: 2,\r\n};\r\n\r\nwindow.SORT_ORDER = {\r\n ASCENDING: 0,\r\n DESCENDING: 1,\r\n};\r\n\r\n// One-indexed and ordered to simplify code elsewhere, do not change to be zero-indexed or reorder\r\nwindow.PROGRESS_STAGE = {\r\n PRE_INFINITY: 1,\r\n\r\n EARLY_INFINITY: 2,\r\n BREAK_INFINITY: 3,\r\n REPLICANTI: 4,\r\n\r\n EARLY_ETERNITY: 5,\r\n ETERNITY_CHALLENGES: 6,\r\n EARLY_DILATION: 7,\r\n LATE_ETERNITY: 8,\r\n\r\n EARLY_REALITY: 9,\r\n\r\n TERESA: 10,\r\n EFFARIG: 11,\r\n ENSLAVED: 12,\r\n V: 13,\r\n RA: 14,\r\n IMAGINARY_MACHINES: 15,\r\n LAITELA: 16,\r\n PELLE: 17,\r\n MENDING: 18\r\n};\r\n\r\nwindow.STD_BACKEND_URL = \"https://antimatterdimensionspayments.ew.r.appspot.com\";\r\n\r\nwindow.SPEEDRUN_SEED_STATE = {\r\n UNKNOWN: 0,\r\n FIXED: 1,\r\n RANDOM: 2,\r\n PLAYER: 3,\r\n};\r\n\r\nwindow.V_FLIP = {\r\n NORMAL: 0,\r\n HARD: 1,\r\n SUPER: 2,\r\n};\r\n\r\nVue.prototype.V_FLIP = window.V_FLIP;","import { log as lngamma } from \"gamma\";\r\n\r\nimport { DC } from \"./constants\";\r\n\r\n/* eslint-disable no-use-before-define */\r\n/* eslint-disable max-params */\r\n\r\nwindow.LOG10_MAX_VALUE = Math.log10(Number.MAX_VALUE);\r\nwindow.LN_SQRT_2_PI = 0.5 * Math.log(2 * Math.PI);\r\nwindow.LOG10_2 = Math.log10(2);\r\nwindow.LOG10_E = Math.log10(Math.E);\r\n\r\nMath.PI_2 = Math.PI * 2;\r\n\r\n/**\r\n * This is a file for general math utilities that can be used by many mechanics\r\n */\r\n\r\n/**\r\n * @typedef {Object} bulkBuyBinarySearch_result\r\n * @property {number} quantity amount purchased (relative)\r\n * @property {Decimal} purchasePrice amount that needs to be paid to get that\r\n */\r\n\r\n/**\r\n * bulkBuyBinarySearch is a helper for bulk buyers of non-linear prices. If the price of\r\n * a thing is f(n), it's hard to figure out how much of it can be bought without an inverse\r\n * of f. This helper starts at some n0, and then searches forward in powers of 2 until it\r\n * finds a value that is not affordable. After that, it performs a binary search to figure\r\n * out how much can actually be bought. Returns an object with a quantity and price, or\r\n * null if nothing can be bought\r\n * NOTE: this will not work with slowly increasing prices. This makes the assumption that\r\n * if you can afford purchase N, you can afford the combined cost of everything before N\r\n * (it does check and make sure you can afford all of that put together. See below in code\r\n * for details)\r\n * @param {Decimal} money Amount of currency available\r\n * @param {Object} costInfo cost parameters:\r\n * @param {function(number): Decimal} costInfo.costFunction price of the n'th purchase (starting from 0)\r\n * @param {Decimal} [costInfo.firstCost] Cost of the next purchase; this is usually available/cached. Will\r\n * be calculated from costFunction if not provided.\r\n * @param {boolean} [costInfo.cumulative] (Defaults to true) specifies whether one must pay a cumulative\r\n * cost or just the highest cost.\r\n * @param {number} alreadyBought amount already purchased\r\n * @returns {bulkBuyBinarySearch_result | null}\r\n */\r\nwindow.bulkBuyBinarySearch = function bulkBuyBinarySearch(money, costInfo, alreadyBought) {\r\n const costFunction = costInfo.costFunction;\r\n const firstCost = costInfo.firstCost === undefined ? costFunction(alreadyBought) : costInfo.firstCost;\r\n const isCumulative = costInfo.cumulative === undefined ? true : costInfo.cumulative;\r\n if (money.lt(firstCost)) return null;\r\n // Attempt to find the max we can purchase. We know we can buy 1, so we try 2, 4, 8, etc\r\n // to figure out the upper limit\r\n let cantBuy = 1;\r\n let nextCost;\r\n do {\r\n cantBuy *= 2;\r\n nextCost = costFunction(alreadyBought + cantBuy - 1);\r\n } while (money.gte(nextCost));\r\n // Deal with the simple case of buying just one\r\n if (cantBuy === 2) {\r\n return { quantity: 1, purchasePrice: firstCost };\r\n }\r\n // The amount we can actually buy is in the interval [canBuy/2, canBuy), we do a binary search\r\n // to find the exact value:\r\n let canBuy = cantBuy / 2;\r\n if (cantBuy > Number.MAX_SAFE_INTEGER) throw new Error(\"Overflow in binary search\");\r\n while (cantBuy - canBuy > 1) {\r\n const middle = Math.floor((canBuy + cantBuy) / 2);\r\n if (money.gte(costFunction(alreadyBought + middle - 1))) {\r\n canBuy = middle;\r\n } else {\r\n cantBuy = middle;\r\n }\r\n }\r\n const baseCost = costFunction(alreadyBought + canBuy - 1);\r\n if (!isCumulative) {\r\n return { quantity: canBuy, purchasePrice: baseCost };\r\n }\r\n let otherCost = DC.D0;\r\n // Account for costs leading up to that purchase; we are basically adding things\r\n // up until they are insignificant\r\n let count = 0;\r\n for (let i = canBuy - 1; i > 0; --i) {\r\n const newCost = otherCost.plus(costFunction(alreadyBought + i - 1));\r\n if (newCost.eq(otherCost)) break;\r\n otherCost = newCost;\r\n if (++count > 1000) throw new Error(\"unexpected long loop (buggy cost function?)\");\r\n }\r\n let totalCost = baseCost.plus(otherCost);\r\n // Check the purchase price again\r\n if (money.lt(totalCost)) {\r\n --canBuy;\r\n // Since prices grow rather steeply, we can safely assume that we can, indeed, buy\r\n // one less (e.g. if prices were A, B, C, D, we could afford D, but not A+B+C+D; we\r\n // assume we can afford A+B+C because A+B+C < D)\r\n totalCost = otherCost;\r\n }\r\n return { quantity: canBuy, purchasePrice: totalCost };\r\n};\r\n\r\n/**\r\n * LinearMultiplierScaling performs calculations for multipliers that scale up\r\n * linearly. The simplest case you might consider could be a factorial -- or something\r\n * much slower, like 2 * 2.01 * 2.02 * 2.03 * ...\r\n * In terms of accuracy, it's better for slower growing multipliers than fast. For\r\n * example, with a factorial setup, it evaluates 11! as 39826281.18738219 rather than 39916800\r\n * The ratio between the estimated 10! and 11! is 10.99999474474497 which is pretty good.\r\n * For base = 2, growth = 0.1, after 10 purchases, the result is 7268.488254368145, rather\r\n * than 7268.490028799995. After 100 purchases, it's 4.582662e+79 rather than\r\n * 4.582664e+79.\r\n * Note: this doesn't do well with small initial multipliers (close to 1). 1.01 is about low\r\n * as it's reasonable to go.\r\n */\r\nwindow.LinearMultiplierScaling = class LinearMultiplierScaling {\r\n /**\r\n * Construct the helper object, which can be invoked for various calculations\r\n * @param {number} baseRatio The first multiplier\r\n * @param {number} growth The growth rate; multiplier after purchase N, starting at 0, is baseRatio + N * growth\r\n */\r\n constructor(baseRatio, growth) {\r\n this.baseRatio = baseRatio;\r\n this.growth = growth;\r\n }\r\n\r\n /**\r\n * Multiply both the base ratio and the growth rate by the specified factor\r\n * @param {number} ratio\r\n * @returns this object for easy chaining\r\n */\r\n scale(ratio) {\r\n this.baseRatio *= ratio;\r\n this.growth *= ratio;\r\n return this;\r\n }\r\n\r\n /**\r\n * Shift by the specified number of purchases. For example, if you set up 2, 0.1, but you\r\n * want the first scale factor to be 2.1, you could shift by 1\r\n * @param {number} count number of purchases to shift by\r\n * @returns this\r\n */\r\n shift(count) {\r\n this.baseRatio += this.growth * count;\r\n return this;\r\n }\r\n\r\n /**\r\n * Find the combined multiplier after N purchases. N = 0 means a multiplier of 1 -- since no\r\n * purchases have been made, no scaling has been applied. N = 1 is baseRatio, N=2 gives\r\n * baseRatio * (baseRatio + growth), and so on. This is done using a corrected integral\r\n * approximation\r\n * @param {number} count number of purchases that have happened\r\n * @returns {number} the natural log of the combined multiplier\r\n */\r\n logTotalMultiplierAfterPurchases(count) {\r\n if (count === 0) return 0;\r\n const k = this.growth / this.baseRatio;\r\n const u = k * count;\r\n return (1 / k + count - 0.5) * Math.log1p(u) + count * (Math.log(this.baseRatio) - 1) - k * u / (12 * (1 + u));\r\n }\r\n\r\n /**\r\n * Invert the function given a combined multiplier. This doesn't do any rounding (so you\r\n * can choose how to handle that).\r\n * @param {number} logMult natural logarithm of combined multiplier\r\n */\r\n purchasesForLogTotalMultiplier(logMult) {\r\n if (this.baseRatio < 1.01) throw new Error(\"Ratio is too small for good calculations\");\r\n const Lb = Math.log(this.baseRatio);\r\n const k = this.growth / this.baseRatio;\r\n // Final refinement step, applying 2nd order iteration directly to the formula of\r\n // logTotalMultiplierAfterPurchases\r\n const refineFinal = g => {\r\n const u = k * g;\r\n const Lg = Math.log1p(u);\r\n const v = 0.5 * k / (1 + u);\r\n const fVal = (1 / k + g - 0.5) * Lg + g * (Lb - 1) - (logMult + v * u / 6);\r\n const fDeriv = Lg + Lb - v * (v / 3 + 1);\r\n const fD2 = v * (2 + v * (2 + v / 3));\r\n const delta1 = fVal / fDeriv;\r\n return g - 2 * delta1 / (1 + Math.sqrt(1 - 2 * delta1 * fD2 / fDeriv));\r\n };\r\n // We calculate an initial estimate, assuming that the price doesn't increase:\r\n const g0 = logMult / Lb;\r\n // If the growth rate is really slow and there's not many steps, this is great guess\r\n // the other method (below) doesn't do well in that case.\r\n if (k * g0 < 0.01) return refineFinal(refineFinal(g0));\r\n const rhs = this.growth * logMult + this.baseRatio * (Lb - 1);\r\n\r\n // First, we make a good guess at a solution, based on an approximation of the sum sas an\r\n // uncorrected integral; these parameters came from an optimization. We are solving for\r\n // the value of base + x * growth - 1 here\r\n const K1 = 0.183709519164226;\r\n const K2 = 0.693791942633232;\r\n const K3 = 0.049293492810849;\r\n const y = Math.sqrt(2 * (rhs + 1));\r\n const h0 = y * (1 + K1 * y) / (1 + K2 * Math.log1p(K3 * y));\r\n\r\n // Apply a refinement step; this also shifts the answer by 1\r\n const h1 = (1 + h0 + rhs) / Math.log1p(h0);\r\n\r\n // At this point we should have a pretty solid guess -- enough that this calcuolation\r\n // should be pretty accurate; the final refinement\r\n const g1 = (h1 - this.baseRatio) / this.growth;\r\n return refineFinal(refineFinal(g1));\r\n }\r\n\r\n /**\r\n * Manual calculation, for testing purposes\r\n * @param {number} count\r\n */\r\n logTotalMultiplierAfterPurchasesBaseline(count) {\r\n let logMult = 0;\r\n const k = this.growth / this.baseRatio;\r\n for (let x = 0; x < count; ++x) logMult += Math.log1p(k * x);\r\n return logMult + count * Math.log(this.baseRatio);\r\n }\r\n};\r\n\r\nwindow.getCostWithLinearCostScaling = function getCostWithLinearCostScaling(\r\n amountOfPurchases, costScalingStart, initialCost, costMult, costMultGrowth\r\n) {\r\n const preScalingPurchases = Math.max(0, Math.floor(Math.log(costScalingStart / initialCost) / Math.log(costMult)));\r\n const preScalingCost = Math.ceil(Math.pow(costMult, Math.min(preScalingPurchases, amountOfPurchases)) * initialCost);\r\n const scaling = new LinearMultiplierScaling(costMult, costMultGrowth);\r\n const postScalingCost = Math.exp(scaling.logTotalMultiplierAfterPurchases(\r\n Math.max(0, amountOfPurchases - preScalingPurchases)));\r\n return preScalingCost * postScalingCost;\r\n};\r\n\r\n// Using the same arguments as getCostWithLinearCostScaling() above, do a binary search for the first purchase with a\r\n// cost of Infinity.\r\nwindow.findFirstInfiniteCostPurchase = function findFirstInfiniteCostPurchase(\r\n costScalingStart, initialCost, costMult, costMultGrowth\r\n) {\r\n let upper = 1;\r\n while (Number.isFinite(getCostWithLinearCostScaling(upper,\r\n costScalingStart, initialCost, costMult, costMultGrowth))) {\r\n upper *= 2;\r\n }\r\n let lower = upper / 2;\r\n while (lower < upper) {\r\n const mid = Math.floor((lower + upper) / 2);\r\n const value = getCostWithLinearCostScaling(mid, costScalingStart, initialCost, costMult, costMultGrowth);\r\n if (Number.isFinite(value)) {\r\n lower = mid + 1;\r\n } else {\r\n upper = mid;\r\n }\r\n }\r\n return lower;\r\n};\r\n\r\n/**\r\n * LinearCostScaling is a helper class for costs that scale linearly. If we\r\n * know the available resources, initial cost, and cost multiplier, we can\r\n * figure out the maximum amount of purchases, and also the resulting total\r\n * cost and cost multiplier.\r\n *\r\n * i = initial cost\r\n * m = cost multiplier\r\n * p = purchases\r\n * t = total cost\r\n *\r\n * t = i * (1 - m^p) / (1 - m)\r\n * p = floor(log(1 + t * (m - 1) / i) / log(m))\r\n */\r\nwindow.LinearCostScaling = class LinearCostScaling {\r\n /**\r\n * @param {Decimal} resourcesAvailable amount of available resources\r\n * @param {Decimal} initialCost current cost\r\n * @param {Number} costMultiplier current cost multiplier\r\n * @param {Number} maxPurchases max amount of purchases\r\n * @param {Boolean} free signifies if the purchase is free -> if we only need to consider the last cost\r\n */\r\n constructor(resourcesAvailable, initialCost, costMultiplier, maxPurchases = Number.MAX_SAFE_INTEGER, free = false) {\r\n if (free) {\r\n this._purchases = Math.clampMax(Math.floor(\r\n resourcesAvailable.div(initialCost).log10() /\r\n Math.log10(costMultiplier) + 1), maxPurchases);\r\n } else {\r\n this._purchases = Math.clampMax(Math.floor(\r\n resourcesAvailable.mul(costMultiplier - 1).div(initialCost).add(1).log10() /\r\n Math.log10(costMultiplier)), maxPurchases);\r\n }\r\n this._totalCostMultiplier = Decimal.pow(costMultiplier, this._purchases);\r\n if (free) {\r\n this._totalCost = initialCost.mul(Decimal.pow(costMultiplier, this._purchases - 1));\r\n } else {\r\n this._totalCost = initialCost.mul(Decimal.sub(1, this._totalCostMultiplier)).div(1 - costMultiplier);\r\n }\r\n }\r\n\r\n get purchases() {\r\n return this._purchases;\r\n }\r\n\r\n get totalCostMultiplier() {\r\n return this._totalCostMultiplier;\r\n }\r\n\r\n get totalCost() {\r\n return this._totalCost;\r\n }\r\n};\r\n\r\n/**\r\n * ExponentialCostScaling provides both a max quantity and a price\r\n * @typedef {Object} QuantityAndPrice\r\n * @property {number} quantity The new amount that can be bought\r\n * @property {number} logPrice The logarithm (base 10) of the price\r\n */\r\n\r\n/**\r\n * This is a a helper class to deal with the more common case of a cost that\r\n * grows exponentially (past some threshold). NOTE: this assumes that you only\r\n * have to pay for the highest tier when buying in bulk. That's a little bit cheaper,\r\n * but for the use cases this encounters, it's not a big deal.\r\n */\r\nwindow.ExponentialCostScaling = class ExponentialCostScaling {\r\n /**\r\n * @param {Object} param configuration object with the following fields\r\n * @param {number|Decimal} param.baseCost the cost of the first purchase\r\n * @param {number} param.baseIncrease the baseline increase in price\r\n * @param {number} param.costScale the amount by which the cost scaling increases;\r\n * e.g. if it is 10, then the ratio between successive prices goes up by 10\r\n * @param {number} [param.purchasesBeforeScaling] the number of purchases that can\r\n * be made before scaling begins. If baseCost is B, baseIncrease is C, and costScale is S,\r\n * and purchasesBeforeScaling is 0, the prices will go: B, B C, B C^2 S, B C^3 S^3, etc.\r\n * @param {number|Decimal} [param.scalingCostThreshold] an alternative way of specifying\r\n * when scaling begins; once the cost is >= this threshold, scaling applies. Using the same\r\n * notation: B BC BC^2 .... BC^n BC^(n+1) BC^(n+2)S BC^(n+3)S^3 etc. So, the first\r\n * price past the threshold has no costScale in it, but everything past that does.\r\n */\r\n constructor(param) {\r\n this._baseCost = new Decimal(param.baseCost);\r\n this._baseIncrease = param.baseIncrease;\r\n if (typeof this._baseIncrease !== \"number\") throw new Error(\"baseIncrease must be a number\");\r\n this._costScale = param.costScale;\r\n if (typeof this._costScale !== \"number\") throw new Error(\"costScale must be a number\");\r\n this._logBaseCost = ExponentialCostScaling.log10(param.baseCost);\r\n this._logBaseIncrease = ExponentialCostScaling.log10(param.baseIncrease);\r\n this._logCostScale = ExponentialCostScaling.log10(param.costScale);\r\n if (param.purchasesBeforeScaling !== undefined) {\r\n this._purchasesBeforeScaling = param.purchasesBeforeScaling;\r\n // eslint-disable-next-line no-negated-condition\r\n } else if (param.scalingCostThreshold !== undefined) {\r\n this._purchasesBeforeScaling = Math.ceil(\r\n (ExponentialCostScaling.log10(param.scalingCostThreshold) - this._logBaseCost) / this._logBaseIncrease);\r\n } else throw new Error(\"Must specify either scalingCostThreshold or purchasesBeforeScaling\");\r\n this.updateCostScale();\r\n }\r\n\r\n get costScale() {\r\n return this._costScale;\r\n }\r\n\r\n /**\r\n * @param {number} value\r\n */\r\n set costScale(value) {\r\n this._logCostScale = ExponentialCostScaling.log10(value);\r\n this._costScale = value;\r\n this.updateCostScale();\r\n }\r\n\r\n updateCostScale() {\r\n this._precalcDiscriminant = Math.pow((2 * this._logBaseIncrease + this._logCostScale), 2) -\r\n 8 * this._logCostScale * (this._purchasesBeforeScaling * this._logBaseIncrease + this._logBaseCost);\r\n this._precalcCenter = -this._logBaseIncrease / this._logCostScale + this._purchasesBeforeScaling + 0.5;\r\n }\r\n\r\n /**\r\n * Calculates the cost of the next purchase\r\n * @param {number} currentPurchases\r\n */\r\n calculateCost(currentPurchases) {\r\n const logMult = this._logBaseIncrease;\r\n const logBase = this._logBaseCost;\r\n const excess = currentPurchases - this._purchasesBeforeScaling;\r\n const logCost = excess > 0\r\n ? currentPurchases * logMult + logBase + 0.5 * excess * (excess + 1) * this._logCostScale\r\n : currentPurchases * logMult + logBase;\r\n return DC.E1.pow(logCost);\r\n }\r\n\r\n /**\r\n * Figure out how much of this can be bought.\r\n * This returns the maximum new number of this thing; If you have 51 and can\r\n * afford to buy 10 more, this will return 61. NOTE! this assumes you only\r\n * have to pay for the most expensive thing you get when you buy in bulk. This\r\n * means it's not suitable for accurate caclulation of cumulative prices if the\r\n * multiplier is small.\r\n * @param {number} currentPurchases amount already possessed\r\n * @param {Decimal} money\r\n * @returns {QuantityAndPrice|null} maximum value of bought that money can buy up to\r\n */\r\n getMaxBought(currentPurchases, rawMoney, numberPerSet) {\r\n // We need to divide money by the number of things we need to buy per set\r\n // so that we don't, for example, buy all of a set of 10 dimensions\r\n // when we can only afford 1.\r\n const money = rawMoney.div(numberPerSet);\r\n const logMoney = money.log10();\r\n const logMult = this._logBaseIncrease;\r\n const logBase = this._logBaseCost;\r\n // The 1 + is because the multiplier isn't applied to the first purchase\r\n let newPurchases = Math.floor(1 + (logMoney - logBase) / logMult);\r\n // We can use the linear method up to one purchase past the threshold, because the first purchase\r\n // past the threshold doesn't have cost scaling in it yet.\r\n if (newPurchases > this._purchasesBeforeScaling) {\r\n const discrim = this._precalcDiscriminant + 8 * this._logCostScale * logMoney;\r\n if (discrim < 0) {\r\n return null;\r\n }\r\n newPurchases = Math.floor(this._precalcCenter + Math.sqrt(discrim) / (2 * this._logCostScale));\r\n }\r\n if (newPurchases <= currentPurchases) return null;\r\n // There's a narrow edge case where the linear method returns > this._purchasesBeforeScaling + 1\r\n // but the quadratic method returns less than that. Having this be a separate check covers that\r\n // case:\r\n let logPrice;\r\n if (newPurchases <= this._purchasesBeforeScaling + 1) {\r\n logPrice = (newPurchases - 1) * logMult + logBase;\r\n } else {\r\n const pExcess = newPurchases - this._purchasesBeforeScaling;\r\n logPrice = (newPurchases - 1) * logMult + logBase + 0.5 * pExcess * (pExcess - 1) * this._logCostScale;\r\n }\r\n return { quantity: newPurchases - currentPurchases, logPrice: logPrice + Math.log10(numberPerSet) };\r\n }\r\n\r\n /**\r\n * Determines the number of purchases that would be possible, if purchase count was continuous. Might\r\n * have some odd behavior right at e308, but otherwise should work. It's mostly a copy-paste from\r\n * getMaxBought() above but with unnecessary extra code removed.\r\n * @param {Decimal} money\r\n * @returns {number} maximum value of bought that money can buy up to\r\n */\r\n getContinuumValue(rawMoney, numberPerSet) {\r\n // We need to divide money by the number of things we need to buy per set\r\n // so that we don't, for example, buy all of a set of 10 dimensions\r\n // when we can only afford 1. In the specific case of continuum this means,\r\n // for example, that 10 AM buys 2/3 of a set of 10 first dimensions rather than\r\n // buying the whole set of 10, which at least feels more correct.\r\n const money = rawMoney.div(numberPerSet);\r\n const logMoney = money.log10();\r\n const logMult = this._logBaseIncrease;\r\n const logBase = this._logBaseCost;\r\n // The 1 + is because the multiplier isn't applied to the first purchase\r\n let contValue = 1 + (logMoney - logBase) / logMult;\r\n // We can use the linear method up to one purchase past the threshold, because the first purchase\r\n // past the threshold doesn't have cost scaling in it yet.\r\n if (contValue > this._purchasesBeforeScaling) {\r\n const discrim = this._precalcDiscriminant + 8 * this._logCostScale * logMoney;\r\n if (discrim < 0) {\r\n return 0;\r\n }\r\n contValue = this._precalcCenter + Math.sqrt(discrim) / (2 * this._logCostScale);\r\n }\r\n return Math.clampMin(contValue, 0);\r\n }\r\n\r\n static log10(value) {\r\n if (value instanceof Decimal) return value.log10();\r\n return Math.log10(value);\r\n }\r\n};\r\n\r\n// Numerical approximation for values from the Lambert W function, using Newton's method with some algebraic\r\n// changes to make it less likely to overflow. Relative precision of 1e-6 should be good enough for most purposes;\r\n// this should never be turned down to 0 as there can be oscillatory behavior due to floating point quantization\r\n// that never converges to a fixed point. It also seems to take much longer to converge at higher values.\r\nwindow.productLog = function productLog(x) {\r\n let curr = x, prev = 0;\r\n do {\r\n prev = curr;\r\n curr -= 1 - (1 + x * Math.exp(-curr)) / (1 + curr);\r\n } while (Math.abs(curr - prev) > 1e-6 * curr);\r\n return curr;\r\n};\r\n\r\n// Implementation of \"Lehmer code\" decoding to produce a specific permutation, given a permutation length and a\r\n// lexicographic index for the specified permutation. Calling with a lexicographic index that is too large will\r\n// not throw an error, but will use lexIndex % len! as an index instead.\r\n// This may behave incorrectly if len! > 9e15, which occurs when len > 18.\r\nwindow.permutationIndex = function permutationIndex(len, lexIndex) {\r\n let numPerm = 1;\r\n for (let n = 1; n <= len; n++) numPerm *= n;\r\n let index = lexIndex % numPerm;\r\n let remOrder = numPerm / len;\r\n const ordered = Array.range(0, len);\r\n const perm = [];\r\n while (ordered.length > 0) {\r\n const div = Math.floor(index / remOrder);\r\n const rem = index % remOrder;\r\n perm.push(ordered.splice(div, 1)[0]);\r\n index = rem;\r\n remOrder /= ordered.length;\r\n }\r\n return perm;\r\n};\r\n\r\n// Calculate cost scaling for something that follows getCostWithLinearCostScaling() under Infinity and immediately\r\n// starts accelerated ExponentialCostScaling above Infinity. Yes this is a fuckton of arguments, sorry. It sort of\r\n// needs to inherit all arguments from both cost scaling functions.\r\nwindow.getHybridCostScaling = function getHybridCostScaling(\r\n amountOfPurchases, linCostScalingStart, linInitialCost, linCostMult, linCostMultGrowth,\r\n expInitialCost, expCostMult, expCostMultGrowth\r\n) {\r\n const normalCost = getCostWithLinearCostScaling(amountOfPurchases, linCostScalingStart, linInitialCost,\r\n linCostMult, linCostMultGrowth);\r\n if (Number.isFinite(normalCost)) {\r\n return new Decimal(normalCost);\r\n }\r\n const postInfinityAmount = amountOfPurchases - findFirstInfiniteCostPurchase(linCostScalingStart, linInitialCost,\r\n linCostMult, linCostMultGrowth);\r\n const costScale = new ExponentialCostScaling({\r\n baseCost: expInitialCost,\r\n baseIncrease: expCostMult,\r\n costScale: expCostMultGrowth,\r\n scalingCostThreshold: Number.MAX_VALUE\r\n });\r\n return costScale.calculateCost(postInfinityAmount);\r\n};\r\n\r\nwindow.logFactorial = (function() {\r\n const LOGS = Array.range(1, 11).map(Math.log);\r\n const TABLE = [0];\r\n for (const x of LOGS) {\r\n TABLE.push(TABLE[TABLE.length - 1] + x);\r\n }\r\n return x => {\r\n if (typeof x !== \"number\" || x < 0) return NaN;\r\n if (x < TABLE.length) return TABLE[x];\r\n return lngamma(x + 1);\r\n };\r\n}());\r\n\r\nwindow.exp1m = function(x) {\r\n if (x.abs().gte(0.001)) {\r\n return x.exp().minus(1);\r\n }\r\n // This sum contains all the terms that are relevant for |x| < 0.001. We could do some sort of loop\r\n // (add terms as long as they matter) but that probably has a greater fixed overhead, and we don't\r\n // call this enough for efficiency to be very worrying anyway.\r\n return x.plus(x.pow(2).div(2)).plus(x.pow(3).div(6)).plus(x.pow(4).div(24)).plus(x.pow(5).div(120));\r\n};\r\n\r\n/** 32 bit XORSHIFT generator */\r\nwindow.xorshift32Update = function xorshift32Update(state) {\r\n /* eslint-disable no-param-reassign */\r\n state ^= state << 13;\r\n state ^= state >>> 17;\r\n state ^= state << 5;\r\n /* eslint-enable no-param-reassign */\r\n return state;\r\n};\r\n\r\nwindow.fastRandom = (function() {\r\n let state = Math.floor(Date.now()) % Math.pow(2, 32);\r\n const scale = 1 / (Math.pow(2, 32));\r\n return () => {\r\n state = xorshift32Update(state);\r\n return state * scale + 0.5;\r\n };\r\n}());\r\n\r\n// Normal distribution with specified mean and standard deviation\r\nwindow.normalDistribution = (function() {\r\n let haveSpare = false;\r\n let spare = 0;\r\n return (mean, stdDev) => {\r\n if (typeof mean !== \"number\" || typeof stdDev !== \"number\") return NaN;\r\n if (haveSpare) {\r\n haveSpare = false;\r\n return mean + stdDev * spare;\r\n }\r\n let mag, u, v;\r\n do {\r\n u = fastRandom() * 2 - 1;\r\n v = fastRandom() * 2 - 1;\r\n mag = u * u + v * v;\r\n } while (mag >= 1 || mag === 0);\r\n const t = Math.sqrt(-2 * Math.log(mag) / mag);\r\n haveSpare = true;\r\n spare = v * t;\r\n return mean + stdDev * u * t;\r\n };\r\n}());\r\n\r\n// Helper function for BTRD\r\nwindow.binomialGeneratorFC = (function() {\r\n const stirlingBase = x => -8.10614667953272582e-2 + (x + 0.5) * Math.log1p(x) - x;\r\n const TABLE = Array.range(0, 20).map(x => logFactorial(x) - stirlingBase(x));\r\n return x => {\r\n if (typeof x !== \"number\" || x < 0) return NaN;\r\n if (x < TABLE.length) return TABLE[x];\r\n const xr = 1 / (x + 1);\r\n return (1 / 12 - (1 / 360 - (xr * xr) / 1260) * (xr * xr)) * xr;\r\n };\r\n}());\r\n\r\n/**\r\n * This manually inverts the cumulative probability distribution\r\n * @param {number} numSamples number of drawn samples\r\n * @param {number} p probability\r\n * @returns {number} number of samples that satisfied p\r\n */\r\nwindow.binomialDistributionSmallExpected = function binomialDistributionSmallExpected(numSamples, p) {\r\n const R = p / (1 - p);\r\n const NxR = (numSamples + 1) * R;\r\n // Calculate (1-p)^n without rounding error at 1 - p\r\n let pdf = Math.exp(Math.log1p(-p) * numSamples);\r\n const u = fastRandom();\r\n let cdf = pdf;\r\n let output = 0;\r\n while (u > cdf) {\r\n ++output;\r\n pdf *= (NxR / output - R);\r\n if (cdf + pdf === cdf) break;\r\n cdf += pdf;\r\n }\r\n return output;\r\n};\r\n\r\nwindow.binomialDistribution = function binomialDistribution(numSamples, p) {\r\n if (p === 0) return 0;\r\n if (numSamples instanceof Decimal) {\r\n if (numSamples.e < 308) {\r\n const pNumber = typeof p === \"number\" ? p : p.toNumber();\r\n return new Decimal(binomialDistribution(numSamples.toNumber(), pNumber));\r\n }\r\n const expected = numSamples.times(p);\r\n if (expected.e > 32) return expected;\r\n return new Decimal(poissonDistribution(numSamples.times(p)));\r\n }\r\n const expected = numSamples * p;\r\n // BTRD is good past 10, but the inversion method we use is faster up to 15 and is exact\r\n if (expected < 15) return binomialDistributionSmallExpected(numSamples, p);\r\n if (p > 0.5) return numSamples - binomialDistribution(numSamples, 1 - p);\r\n // At some point, the variance is so small relative to the expected value that\r\n // all samples are within eps of the mean\r\n if (expected > 1e32) return expected;\r\n const approximateVariance = expected * (1 - p);\r\n // Normal approximation is good enough for larger distributions\r\n if (approximateVariance > 1e4) return Math.round(normalDistribution(expected, Math.sqrt(approximateVariance)));\r\n return binomialDistributionBTRD(numSamples, p);\r\n};\r\n\r\n/**\r\n * Chooses the method of generation based on the input\r\n * @param {number|Decimal} expected expected value of distribution\r\n * @returns {number|Decimal} number of poisson process events\r\n */\r\nwindow.poissonDistribution = function poissonDistribution(expected) {\r\n if (expected === 0) return 0;\r\n if (expected instanceof Decimal) {\r\n if (expected.e > 32) return expected;\r\n return new Decimal(poissonDistribution(expected.toNumber()));\r\n }\r\n if (expected > 1e32) return expected;\r\n if (expected > 1e4) return poissonDistributionViaNormal(expected);\r\n if (expected < 20) return poissonDistributionSmallExpected(expected);\r\n return poissonDistributionPTRD(expected);\r\n};\r\n\r\n/**\r\n * Uses a normal approximation to sqrt(x)\r\n */\r\nwindow.poissonDistributionViaNormal = function poissonDistributionViaNormal(expected) {\r\n const x = normalDistribution(Math.sqrt(expected), 0.5);\r\n return Math.floor(x * x);\r\n};\r\n\r\n/**\r\n * This manually inverts the cumulative probability distribution\r\n */\r\nwindow.poissonDistributionSmallExpected = function poissonDistributionSmallExpected(expected) {\r\n let pdf = Math.exp(-expected);\r\n let cdf = pdf;\r\n const u = fastRandom();\r\n let output = 0;\r\n while (u > cdf) {\r\n ++output;\r\n pdf *= expected / output;\r\n if (cdf + pdf === cdf) break;\r\n cdf += pdf;\r\n }\r\n return output;\r\n};\r\n\r\n/**\r\n * Algorithm from https://core.ac.uk/download/pdf/11007254.pdf\r\n */\r\nwindow.binomialDistributionBTRD = function binomialDistributionBTRD(numSamples, p) {\r\n const expected = numSamples * p;\r\n const approximateVariance = expected * (1 - p);\r\n const approxStdev = Math.sqrt(approximateVariance);\r\n const m = Math.floor(expected + p);\r\n const R = p / (1 - p);\r\n const NxR = (numSamples + 1) * R;\r\n const b = 1.15 + 2.53 * approxStdev;\r\n const a = -0.0873 + 0.0248 * b + 0.01 * p;\r\n const c = expected + 0.5;\r\n const alpha = (2.83 + 5.1 / b) * approxStdev;\r\n const kU = 0.43;\r\n const kV = 0.92 - 4.2 / b;\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n let v = fastRandom();\r\n if (v <= 2 * kU * kV) {\r\n const u = v / kV - kU;\r\n return Math.floor((2 * a / (0.5 - Math.abs(u)) + b) * u + c);\r\n }\r\n let u;\r\n if (v >= kV) {\r\n u = fastRandom() - 0.5;\r\n } else {\r\n const w = v / kV - 0.93;\r\n v = fastRandom() * kV;\r\n u = (w > 0 ? 0.5 : -0.5) - w;\r\n }\r\n const us = 0.5 - Math.abs(u);\r\n const k = Math.floor((2 * a / us + b) * u + c);\r\n if (k < 0 || k > numSamples) continue;\r\n v *= alpha / (a / (us * us) + b);\r\n const km = Math.abs(k - m);\r\n // These loops are very fast, compared to calculating all the logs and stuff below; the\r\n // original paper has 15 here but 40 seems to be closer to optimal.\r\n if (km <= 40) {\r\n let f = 1;\r\n if (m < k) {\r\n for (let i = m + 1; i <= k; ++i) f *= (NxR / i - R);\r\n } else if (m > k) {\r\n for (let i = k + 1; i <= m; ++i) v *= (NxR / i - R);\r\n }\r\n if (v <= f) return k;\r\n continue;\r\n }\r\n const rho = (km / approximateVariance) * (((km / 3 + 0.625) * km + 1 / 6) / approximateVariance + 0.5);\r\n const t = -km * km / (2 * approximateVariance);\r\n const logV = Math.log(v);\r\n if (logV < t - rho) return k;\r\n if (logV > t + rho) continue;\r\n const _nm = numSamples - m + 1;\r\n const _nk = numSamples - k + 1;\r\n const h = (m + 0.5) * Math.log((m + 1) / (R * _nm)) +\r\n binomialGeneratorFC(m) + binomialGeneratorFC(numSamples - m);\r\n const j = (numSamples + 1) * Math.log(_nm / _nk) + (k + 0.5) * Math.log(_nk * R / (k + 1)) -\r\n binomialGeneratorFC(k) - binomialGeneratorFC(numSamples - k);\r\n if (logV <= h + j) return k;\r\n }\r\n};\r\n\r\n/**\r\n * \"The transformed rejection method for generating Poisson random variables\"\r\n * http://epub.wu.ac.at/352/1/document.pdf\r\n * @param {number} mu expected value of distribution\r\n * @returns {number} (integer) number of events in poisson process\r\n */\r\nwindow.poissonDistributionPTRD = function poissonDistributionPTRD(mu) {\r\n const sMu = Math.sqrt(mu);\r\n const b = 0.931 + 2.53 * sMu;\r\n const a = -0.059 + 0.02483 * b;\r\n const iAlpha = 1.1239 + 1.328 / (b - 3.4);\r\n const vR = 0.9277 - 3.6224 / (b - 2);\r\n // eslint-disable-next-line no-constant-condition\r\n while (true) {\r\n let v = Math.random();\r\n if (v < 0.86 * vR) {\r\n const u = v / vR - 0.43;\r\n return Math.floor((2 * a / (0.5 - Math.abs(u)) + b) * u + mu + 0.445);\r\n }\r\n let u;\r\n if (v >= vR) {\r\n u = fastRandom() - 0.5;\r\n } else {\r\n const w = v / vR - 0.93;\r\n u = (w > 0 ? 0.5 : -0.5) - w;\r\n v = fastRandom() * vR;\r\n }\r\n const us = 0.5 - Math.abs(u);\r\n if (us < 0.013 && us < v) continue;\r\n const k = Math.floor((2 * a / us + b) * u + mu + 0.445);\r\n v *= iAlpha / (a / us / us + b);\r\n const ik = 1 / k;\r\n if (k >= 10) {\r\n const t = (k + 0.5) * Math.log(mu * ik) - mu - LN_SQRT_2_PI + k - (1 / 12 - ik * ik / 360) * ik;\r\n if (Math.log(v * sMu) <= t) return k;\r\n } else if (Math.log(v) <= k * Math.log(mu) - mu - logFactorial(k)) return k;\r\n }\r\n};\r\n\r\nwindow.depressedCubicRealRoots = function depressedCubicRealRoots(k3, k1, k0) {\r\n if (k3 === 0) {\r\n if (k1 === 0) return [];\r\n return [-k0 / k1];\r\n }\r\n /* eslint-disable no-param-reassign */\r\n k1 /= k3;\r\n k0 /= k3;\r\n /* eslint-enable no-param-reassign */\r\n if (k0 === 0) {\r\n if (k1 === 0) return [0];\r\n if (k1 > 0) return [];\r\n const r = Math.sqrt(-k1);\r\n return [r, -r];\r\n }\r\n if (k1 === 0) {\r\n return [Math.cbrt(-k0)];\r\n }\r\n let innerDisc = 0.25 * k0 * k0 + k1 * k1 * k1 / 27;\r\n if (innerDisc >= 0) {\r\n innerDisc = Math.sqrt(innerDisc);\r\n return [Math.cbrt(-0.5 * k0 + innerDisc) + Math.cbrt(-0.5 * k0 - innerDisc)];\r\n }\r\n const po3 = 2 * Math.sqrt(-k1 / 3);\r\n const theta = Math.acos(3 * k0 / (k1 * po3)) / 3;\r\n return [\r\n po3 * Math.cos(theta),\r\n po3 * Math.cos(theta - 2 * Math.PI / 3),\r\n po3 * Math.cos(theta - 4 * Math.PI / 3),\r\n ];\r\n};\r\n\r\nwindow.quadraticRealRoots = function quadraticRealRoots(k2, k1, k0) {\r\n if (k2 === 0) {\r\n if (k1 === 0) return [];\r\n return [-k0 / k1];\r\n }\r\n if (k1 === 0) {\r\n const ktmp = k0 / k2;\r\n if (ktmp > 0) return [];\r\n return [Math.sqrt(-ktmp), -Math.sqrt(-ktmp)];\r\n }\r\n const disc = k1 * k1 - 4 * k2 * k0;\r\n if (disc < 0) return [];\r\n if (disc === 0) return [-k1 / (2 * k2)];\r\n const bdsc = -k1 - Math.sign(k1) * Math.sqrt(disc);\r\n return [\r\n bdsc / (2 * k2),\r\n 2 * k0 / bdsc\r\n ];\r\n};\r\n\r\nwindow.cubicRealRoots = function cubicRealRoots(k3, k2, k1, k0) {\r\n if (k3 === 0) {\r\n return quadraticRealRoots(k2, k1, k0);\r\n }\r\n if (k2 === 0) return depressedCubicRealRoots(k3, k1, k0);\r\n const bo3a = k2 / (3 * k3);\r\n const bo3a2 = bo3a * bo3a;\r\n const coa = k1 / k3;\r\n const p = coa - 3 * bo3a2;\r\n const q = 2 * bo3a * bo3a2 - bo3a * coa + k0 / k3;\r\n const dcrr = depressedCubicRealRoots(1, p, q);\r\n return dcrr.map(t => t - bo3a);\r\n};\r\n\r\nwindow.testCRR = function testCRR(k3, k2, k1, k0) {\r\n const r = cubicRealRoots(k3, k2, k1, k0);\r\n // eslint-disable-next-line no-console\r\n console.log(r);\r\n // eslint-disable-next-line no-console\r\n console.log(r.map(x => k0 + x * (k1 + x * (k2 + x * k3))));\r\n};\r\n\r\nwindow.depressedQuarticRealRoots = function depressedQuarticRealRoots(k4, k2, k1, k0) {\r\n if (k4 === 0) return quadraticRealRoots(k2, k1, k0);\r\n if (k0 === 0) {\r\n const reducedSol = depressedCubicRealRoots(k4, k2, k1);\r\n if (!reducedSol.includes(0)) reducedSol.push(0);\r\n return reducedSol;\r\n }\r\n if (k1 === 0) {\r\n const squareSol = quadraticRealRoots(k4, k2, k0);\r\n const solution = [];\r\n for (const sr of squareSol) {\r\n if (sr < 0) continue;\r\n if (sr === 0) solution.push(0);\r\n else solution.push(Math.sqrt(sr), -Math.sqrt(sr));\r\n }\r\n return solution;\r\n }\r\n /* eslint-disable no-param-reassign */\r\n k2 /= k4;\r\n k1 /= k4;\r\n k0 /= k4;\r\n /* eslint-enable no-param-reassign */\r\n const mSol = cubicRealRoots(8, 8 * k2, 2 * k2 * k2 - 8 * k0, -k1 * k1);\r\n const m = mSol.max();\r\n // I don't think this can happen, but I haven't double checked the math\r\n if (m <= 0) return [];\r\n const sqrt2m = Math.sqrt(2 * m);\r\n const dInner = 2 * k1 / sqrt2m;\r\n const d1 = -(2 * k2 + 2 * m + dInner);\r\n const solution = [];\r\n if (d1 > 0) {\r\n solution.push(0.5 * (sqrt2m + Math.sqrt(d1)), 0.5 * (sqrt2m - Math.sqrt(d1)));\r\n } else if (d1 === 0) {\r\n solution.push(0.5 * sqrt2m);\r\n }\r\n const d2 = -(2 * k2 + 2 * m - dInner);\r\n if (d2 > 0) {\r\n solution.push(0.5 * (-sqrt2m + Math.sqrt(d2)), 0.5 * (-sqrt2m - Math.sqrt(d2)));\r\n } else if (d2 === 0) {\r\n solution.push(-0.5 * sqrt2m);\r\n }\r\n return solution;\r\n};\r\n\r\nwindow.testDQRR = function testDQRR(k4, k2, k1, k0) {\r\n const r = depressedQuarticRealRoots(k4, k2, k1, k0);\r\n // eslint-disable-next-line no-console\r\n console.log(r);\r\n // eslint-disable-next-line no-console\r\n console.log(r.map(x => k0 + x * (k1 + x * (k2 + x * x * k4))));\r\n};\r\n\r\nwindow.solveSimpleBiquadratic = function solveSimpleBiquadratic(A, B, C, D, E, F) {\r\n const solutions = [];\r\n if (A === 0) {\r\n if (B === 0 || E === 0) return [];\r\n const y = -C / B;\r\n if (D === 0) return [{ x: -F / E, y }];\r\n return [{ x: (-F - D * y * y) / E, y }];\r\n }\r\n if (D === 0) {\r\n if (B === 0 || E === 0) return [];\r\n const x = -F / E;\r\n return [{ x, y: (-C - A * x * x) / B }];\r\n }\r\n if (B === 0) {\r\n const xSol = quadraticRealRoots(A, 0, C);\r\n for (const x of xSol) {\r\n const yTmp = F + E * x;\r\n const ySol = quadraticRealRoots(D, 0, yTmp);\r\n for (const y of ySol) solutions.push({ x, y });\r\n }\r\n return solutions;\r\n }\r\n if (E === 0) {\r\n const ySol = quadraticRealRoots(D, 0, F);\r\n for (const y of ySol) {\r\n const xTmp = C + B * y;\r\n const xSol = quadraticRealRoots(A, 0, xTmp);\r\n for (const x of xSol) solutions.push({ x, y });\r\n }\r\n return solutions;\r\n }\r\n const AoB = A / B;\r\n const CoB = C / B;\r\n const xSol = depressedQuarticRealRoots(D * AoB * AoB, 2 * D * AoB * CoB, E, F + D * CoB * CoB);\r\n for (const x of xSol) solutions.push({ x, y: -(AoB * x * x + CoB) });\r\n return solutions;\r\n};\r\n\r\nwindow.testSSBQ = function testSSBQ(A, B, C, D, E, F) {\r\n // eslint-disable-next-line no-console\r\n console.log({ A, B, C, D, E, F });\r\n const sols = solveSimpleBiquadratic(A, B, C, D, E, F);\r\n for (const s of sols) {\r\n const e1 = A * s.x * s.x + B * s.y + C;\r\n const e2 = D * s.y * s.y + E * s.x + F;\r\n // eslint-disable-next-line no-console\r\n console.log(`${s.x} ${s.y} ${e1} ${e2}`);\r\n }\r\n};\r\n\r\nwindow.AffineTransform = class AffineTransform {\r\n constructor(a00 = 1, a01 = 0, a10 = 0, a11 = 1, o0 = 0, o1 = 0) {\r\n this.a00 = a00;\r\n this.a01 = a01;\r\n this.a10 = a10;\r\n this.a11 = a11;\r\n this.o0 = o0;\r\n this.o1 = o1;\r\n }\r\n\r\n times(ot) {\r\n if (ot instanceof AffineTransform) {\r\n return new AffineTransform(\r\n this.a00 * ot.a00 + this.a01 * ot.a10, this.a00 * ot.a01 + this.a01 * ot.a11,\r\n this.a10 * ot.a00 + this.a11 * ot.a10, this.a10 * ot.a01 + this.a11 * ot.a11,\r\n this.a00 * ot.o0 + this.a01 * ot.o1 + this.o0,\r\n this.a10 * ot.o0 + this.a11 * ot.o1 + this.o1\r\n );\r\n }\r\n if (ot instanceof Vector) return ot.transformedBy(this);\r\n throw new Error(\"unsupported operation\");\r\n }\r\n\r\n translated(offX, offY = undefined) {\r\n if (offX instanceof Vector) {\r\n return new AffineTransform(this.a00, this.a01, this.a10, this.a11, this.o0 + offX.x, this.o1 + offX.y);\r\n }\r\n return new AffineTransform(this.a00, this.a01, this.a10, this.a11, this.o0 + offX, this.o1 + offY);\r\n }\r\n\r\n rotated(angle) {\r\n return AffineTransform.rotation(angle).times(this);\r\n }\r\n\r\n scaled(scale) {\r\n return AffineTransform.scale(scale).times(this);\r\n }\r\n\r\n get withoutTranslation() {\r\n return new AffineTransform(this.a00, this.a01, this.a10, this.a11);\r\n }\r\n\r\n static translation(offX, offY) {\r\n if (offX instanceof Vector) {\r\n return new AffineTransform(1, 0, 0, 1, offX.x, offX.y);\r\n }\r\n return new AffineTransform(1, 0, 0, 1, offX, offY);\r\n }\r\n\r\n static rotation(angle) {\r\n const c = Math.cos(angle), s = Math.sin(angle);\r\n return new AffineTransform(c, -s, s, c);\r\n }\r\n\r\n static scale(sc) {\r\n return new AffineTransform(sc, 0, 0, sc);\r\n }\r\n\r\n static identity() {\r\n return new AffineTransform();\r\n }\r\n};\r\n\r\nwindow.Vector = class Vector {\r\n constructor(x, y) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n\r\n get length() {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n\r\n plus(v) {\r\n return new Vector(this.x + v.x, this.y + v.y);\r\n }\r\n\r\n dot(v) {\r\n return this.x * v.x + this.y * v.y;\r\n }\r\n\r\n cross(v) {\r\n // Produces scalar, z term of 3D vectors\r\n return this.x * v.y - this.y * v.x;\r\n }\r\n\r\n minus(v) {\r\n return new Vector(this.x - v.x, this.y - v.y);\r\n }\r\n\r\n times(s) {\r\n return new Vector(this.x * s, this.y * s);\r\n }\r\n\r\n asTranslate() {\r\n return `translate(${this.x}, ${this.y})`;\r\n }\r\n\r\n asRotate() {\r\n return `rotate(${180 / Math.PI * Math.atan2(this.y, this.x)})`;\r\n }\r\n\r\n toString() {\r\n return `${this.x}, ${this.y}`;\r\n }\r\n\r\n round(factor) {\r\n return new Vector(Math.round(this.x * factor) / factor, Math.round(this.y * factor) / factor);\r\n }\r\n\r\n get copy() {\r\n return new Vector(this.x, this.y);\r\n }\r\n\r\n matrixTransform(a00, a01, a10, a11) {\r\n return new Vector(a00 * this.x + a01 * this.y, a10 * this.x + a11 * this.y);\r\n }\r\n\r\n transformedBy(tform) {\r\n return new Vector(tform.a00 * this.x + tform.a01 * this.y + tform.o0,\r\n tform.a10 * this.x + tform.a11 * this.y + tform.o1);\r\n }\r\n\r\n get negative() {\r\n return new Vector(-this.x, -this.y);\r\n }\r\n\r\n get normalized() {\r\n return this.times(1 / this.length);\r\n }\r\n\r\n get right90() {\r\n return new Vector(this.y, -this.x);\r\n }\r\n\r\n get left90() {\r\n return new Vector(-this.y, this.x);\r\n }\r\n\r\n get angle() {\r\n return Math.atan2(this.y, this.x);\r\n }\r\n\r\n static horiz(x) {\r\n return new Vector(x, 0);\r\n }\r\n\r\n static unitFromRadians(rad) {\r\n return new Vector(Math.cos(rad), Math.sin(rad));\r\n }\r\n\r\n static unitFromDegrees(deg) {\r\n return Vector.unitFromRadians(deg * Math.PI / 180);\r\n }\r\n};\r\n\r\n\r\nwindow.Curve = class Curve {\r\n /**\r\n * @abstract\r\n * @param {number} t\r\n * @returns {Vector}\r\n */\r\n position() {\r\n throw new NotImplementedError();\r\n }\r\n\r\n /**\r\n * @abstract\r\n * @param {number} t\r\n * @returns {Vector}\r\n */\r\n derivative() {\r\n throw new NotImplementedError();\r\n }\r\n\r\n /**\r\n * @abstract\r\n * @param {number} t\r\n * @returns {Vector}\r\n */\r\n secondDerivative() {\r\n throw new NotImplementedError();\r\n }\r\n\r\n /**\r\n * @param {number} t\r\n * @returns {number}\r\n */\r\n curvature(t) {\r\n const d = this.derivative(t);\r\n const dd = this.secondDerivative(t);\r\n const dMag = d.length;\r\n return d.cross(dd) / (dMag * dMag * dMag);\r\n }\r\n\r\n shapeAt(t) {\r\n const d = this.derivative(t);\r\n return {\r\n t,\r\n position: this.position(t),\r\n derivative: d,\r\n direction: d.normalized,\r\n curvature: this.curvature(t),\r\n };\r\n }\r\n\r\n minimumDistanceTo(pDes, tMin, tMax) {\r\n let tGuess = 0.5 * (tMin + tMax);\r\n const tTol = Math.max(Math.abs(tMax), Math.abs(tMin)) * Number.EPSILON * 16;\r\n for (let iter = 0; ; ++iter) {\r\n const p = this.position(tGuess);\r\n const d = this.derivative(tGuess);\r\n const dd = this.secondDerivative(tGuess);\r\n const offset = p.minus(pDes);\r\n const dist = offset.length;\r\n const distDeriv = offset.dot(d) * 2;\r\n /* eslint-disable no-param-reassign */\r\n if (distDeriv > 0) tMax = tGuess;\r\n else tMin = tGuess;\r\n /* eslint-enable no-param-reassign */\r\n const distSecondDeriv = (offset.dot(dd) + d.dot(d)) * 2;\r\n const tStep = distSecondDeriv < 0 ? -dist / distDeriv : -distDeriv / distSecondDeriv;\r\n if (Math.abs(tStep) < tTol || iter >= 16) return dist;\r\n tGuess = Math.clamp(tGuess + tStep, tMin, tMax);\r\n }\r\n }\r\n};\r\n\r\nwindow.LinearPath = class LinearPath extends Curve {\r\n constructor(p0, p1) {\r\n super();\r\n this.p0 = p0.copy;\r\n this.p1 = p1.copy;\r\n }\r\n\r\n position(t) {\r\n return this.p0.times(1 - t).plus(this.p1.times(t));\r\n }\r\n\r\n derivative() {\r\n return this.p1.minus(this.p0);\r\n }\r\n\r\n secondDerivative() {\r\n return new Vector(0, 0);\r\n }\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n curvature(t) {\r\n return 0;\r\n }\r\n\r\n trimStart(len) {\r\n const dir = this.p1.minus(this.p0).normalized;\r\n return new LinearPath(this.p0.plus(dir.times(len)), this.p1);\r\n }\r\n\r\n trimEnd(len) {\r\n const dir = this.p1.minus(this.p0).normalized;\r\n return new LinearPath(this.p0, this.p1.minus(dir.times(len)));\r\n }\r\n\r\n transformed(tform) {\r\n return new LinearPath(this.p0.transformedBy(tform), this.p1.transformedBy(tform));\r\n }\r\n\r\n get relativeSVG() {\r\n const d1 = this.p1.minus(this.p0);\r\n return `l ${d1.x} ${d1.y}\\n`;\r\n }\r\n\r\n createOffsetLine(offset, t0 = 0, t1 = 1) {\r\n const off = this.p1.minus(this.p0).normalized.right90.times(offset);\r\n return new LinearPath(this.position(t0).plus(off), this.position(t1).plus(off));\r\n }\r\n\r\n static connectCircles(p0, r0, p1, r1) {\r\n const dir = p1.minus(p0).normalized;\r\n return new LinearPath(p0.plus(dir.times(r0)), p1.minus(dir.times(r1)));\r\n }\r\n};\r\n\r\nclass CubicBezier extends Curve {\r\n constructor(p0, p1, p2, p3) {\r\n super();\r\n this.p0 = p0.copy;\r\n this.p1 = p1.copy;\r\n this.p2 = p2.copy;\r\n this.p3 = p3.copy;\r\n }\r\n\r\n position(t) {\r\n const nt2 = (1 - t) * (1 - t);\r\n const t2 = t * t;\r\n return this.p0.times((1 - t) * nt2)\r\n .plus(this.p1.times(3 * t * nt2))\r\n .plus(this.p2.times(3 * t2 * (1 - t)))\r\n .plus(this.p3.times(t2 * t));\r\n }\r\n\r\n derivative(t) {\r\n return this.p1.minus(this.p0).times(3 * (1 - t) * (1 - t))\r\n .plus(this.p2.minus(this.p1).times(6 * t * (1 - t)))\r\n .plus(this.p3.minus(this.p2).times(3 * t * t));\r\n }\r\n\r\n secondDerivative(t) {\r\n return this.p2.minus(this.p1.times(2)).plus(this.p0).times(6 * (1 - t))\r\n .plus(this.p3.minus(this.p2.times(2)).plus(this.p1).times(6 * t));\r\n }\r\n\r\n transformed(tform) {\r\n return new CubicBezier(this.p0.transformedBy(tform), this.p1.transformedBy(tform),\r\n this.p2.transformedBy(tform), this.p3.transformedBy(tform));\r\n }\r\n\r\n get relativeSVG() {\r\n const d1 = this.p1.minus(this.p0);\r\n const d2 = this.p2.minus(this.p0);\r\n const d3 = this.p3.minus(this.p0);\r\n return `c ${d1.x} ${d1.y} ${d2.x} ${d2.y} ${d3.x} ${d3.y}\\n`;\r\n }\r\n\r\n get reverse() {\r\n return new CubicBezier(this.p3, this.p2, this.p1, this.p0);\r\n }\r\n\r\n static fitCurveSection(shape0, shape1) {\r\n const dP = shape1.position.minus(shape0.position);\r\n const reversed = shape0.t > shape1.t;\r\n const pathRotation = shape0.direction.cross(shape1.direction);\r\n let magSol = solveSimpleBiquadratic(\r\n 1.5 * shape0.curvature, pathRotation, -shape0.direction.cross(dP),\r\n 1.5 * shape1.curvature, pathRotation, shape1.direction.cross(dP));\r\n magSol = reversed ? magSol.filter(o => o.x <= 0 && o.y <= 0) : magSol.filter(o => o.x >= 0 && o.y >= 0);\r\n if (magSol.length === 0) return null;\r\n return new CubicBezier(\r\n shape0.position, shape0.position.plus(shape0.direction.times(magSol[0].x)),\r\n shape1.position.minus(shape1.direction.times(magSol[0].y)), shape1.position);\r\n }\r\n}\r\n\r\n// This is an \"inset/outset\" kind of transform\r\nwindow.OffsetCurve = class OffsetCurve extends Curve {\r\n constructor(baseCurve, offset) {\r\n super();\r\n this.base = baseCurve;\r\n this.offset = offset;\r\n }\r\n\r\n position(t) {\r\n const p = this.base.position(t);\r\n const d = this.base.derivative(t);\r\n return p.plus(d.normalized.right90.times(this.offset));\r\n }\r\n\r\n derivative(t) {\r\n return this.base.derivative(t);\r\n }\r\n\r\n // 2nd derivative not implemented as only curvature is used atm\r\n curvature(t) {\r\n const c = this.base.curvature(t);\r\n return 1 / (1 / c + this.offset);\r\n }\r\n\r\n shapeAt(t) {\r\n const shape = this.base.shapeAt(t);\r\n return {\r\n t: shape.t,\r\n position: shape.position.plus(shape.direction.right90.times(this.offset)),\r\n derivative: shape.derivative,\r\n direction: shape.direction,\r\n curvature: shape.curvature / (1 + this.offset * shape.curvature),\r\n };\r\n }\r\n};\r\n\r\nwindow.LogarithmicSpiral = class LogarithmicSpiral extends Curve {\r\n constructor(center, scale, rate) {\r\n super();\r\n this.center = center;\r\n this.scale = scale;\r\n this.rate = rate;\r\n }\r\n\r\n position(t) {\r\n return Vector.unitFromRadians(t)\r\n .times(this.scale * Math.exp(this.rate * t))\r\n .plus(this.center);\r\n }\r\n\r\n derivative(t) {\r\n const unit = Vector.unitFromRadians(t);\r\n const radius = this.scale * Math.exp(this.rate * t);\r\n return unit.times(radius * this.rate).plus(unit.left90.times(radius));\r\n }\r\n\r\n secondDerivative(t) {\r\n const unit = Vector.unitFromRadians(t);\r\n const radius = this.scale * Math.exp(this.rate * t);\r\n return unit.times(radius * (this.rate * this.rate - 1))\r\n .plus(unit.left90.times(2 * radius * this.rate));\r\n }\r\n\r\n shapeAt(t) {\r\n const unit = Vector.unitFromRadians(t);\r\n const radius = this.scale * Math.exp(this.rate * t);\r\n const ur = unit.times(radius);\r\n const d = ur.times(this.rate).plus(ur.left90);\r\n return {\r\n t,\r\n position: ur.plus(this.center),\r\n derivative: d,\r\n direction: d.normalized,\r\n curvature: 1 / (Math.abs(radius) * Math.sqrt(1 + this.rate * this.rate))\r\n };\r\n }\r\n\r\n angleFromRadius(r) {\r\n return Math.log(r / this.scale) / this.rate;\r\n }\r\n\r\n static fromPolarEndpoints(center, theta0, r0, theta1, r1) {\r\n const rate = Math.log(r1 / r0) / (theta1 - theta0);\r\n return new LogarithmicSpiral(center, r0 / Math.exp(rate * theta0), rate);\r\n }\r\n};\r\n\r\nwindow.PiecewisePath = class PiecewisePath {\r\n constructor(data = undefined) {\r\n this.path = data ? data : [];\r\n }\r\n\r\n push(element) {\r\n this.path.push(element);\r\n }\r\n\r\n transformedBy(tform) {\r\n return new PiecewisePath(this.path.map(x => x.transformed(tform)));\r\n }\r\n\r\n toSVG(initialPrefix) {\r\n const p0 = this.path[0].position(0);\r\n const lines = [`${initialPrefix} ${p0.x} ${p0.y}\\n`];\r\n for (const part of this.path) lines.push(part.relativeSVG);\r\n return lines.join(\"\");\r\n }\r\n\r\n static cubicBezierFitToCurveSection(curve, t0, t1, tol = 1, minPieces = 1) {\r\n const output = new PiecewisePath();\r\n const shape0 = curve.shapeAt(t0);\r\n const shape1 = curve.shapeAt(t1);\r\n function subdivide(shapeStart, shapeEnd, maxDepth = 8) {\r\n const shapeMid = curve.shapeAt(0.5 * (shapeStart.t + shapeEnd.t));\r\n return single(shapeStart, shapeMid, maxDepth - 1) &&\r\n single(shapeMid, shapeEnd, maxDepth - 1);\r\n }\r\n function single(shapeStart, shapeEnd, maxDepth = 8) {\r\n const singleFit = CubicBezier.fitCurveSection(shapeStart, shapeEnd);\r\n if (singleFit === null) {\r\n if (maxDepth <= 0) throw new Error(\"coulnd't decompose curve\");\r\n return subdivide(shapeStart, shapeEnd, maxDepth);\r\n }\r\n const tMid = 0.5 * (shapeStart.t + shapeEnd.t);\r\n const err = singleFit.minimumDistanceTo(curve.position(tMid), 0, 1);\r\n if (err > tol) {\r\n return subdivide(shapeStart, shapeEnd, maxDepth);\r\n }\r\n output.push(singleFit);\r\n return true;\r\n }\r\n if (minPieces > 1) subdivide(shape0, shape1);\r\n else single(shape0, shape1);\r\n return output;\r\n }\r\n};\r\n\r\n// https://stackoverflow.com/a/9201081\r\nwindow.ExponentialMovingAverage = class ExponentialMovingAverage {\r\n constructor(alpha = 0.02, maxOutliers = 5, highOutlierThreshold = 3, lowOutlierThreshold = 0.4) {\r\n this.alpha = alpha;\r\n this.maxOutliers = maxOutliers;\r\n this.highOutlierThreshold = highOutlierThreshold;\r\n this.lowOutlierThreshold = lowOutlierThreshold;\r\n this.outliers = 0;\r\n this._average = undefined;\r\n }\r\n\r\n get average() {\r\n if (this._average === undefined) {\r\n return 0;\r\n }\r\n return this._average;\r\n }\r\n\r\n addValue(value) {\r\n if (this._average === undefined) {\r\n this._average = value;\r\n } else {\r\n this._average += this.alpha * (value - this._average);\r\n\r\n const absValue = Math.abs(value);\r\n const absAverage = Math.abs(this._average);\r\n const highOutlier = absValue > absAverage * this.highOutlierThreshold;\r\n const lowOutlier = absValue < absAverage * this.lowOutlierThreshold;\r\n const outlier = highOutlier || lowOutlier;\r\n\r\n if (outlier) {\r\n this.outliers++;\r\n if (this.outliers >= this.maxOutliers) {\r\n this._average = value;\r\n this.outliers = 0;\r\n }\r\n } else {\r\n this.outliers = 0;\r\n }\r\n }\r\n }\r\n};\r\n","export class Effect {\r\n constructor(effect, cap, condition) {\r\n if (effect === undefined || this.isCustomEffect) {\r\n return;\r\n }\r\n const isFunction = v => typeof v === \"function\";\r\n const isNumber = v => typeof v === \"number\";\r\n const isDecimal = v => v instanceof Decimal;\r\n const isConstant = v => isNumber(v) || isDecimal(v);\r\n if (!isFunction(effect) && !isConstant(effect)) {\r\n throw new Error(\"Unknown effect value type.\");\r\n }\r\n const createProperty = () => ({\r\n configurable: false\r\n });\r\n const addGetter = (property, v) => {\r\n if (isConstant(v)) {\r\n property.writable = false;\r\n property.value = v;\r\n } else if (isFunction(v)) {\r\n property.get = v;\r\n } else {\r\n throw new Error(\"Unknown getter type.\");\r\n }\r\n };\r\n if (condition !== undefined) {\r\n if (!isFunction(condition)) {\r\n throw new Error(\"Effect condition must be a function.\");\r\n }\r\n const conditionProperty = createProperty();\r\n conditionProperty.get = condition;\r\n Object.defineProperty(this, \"isEffectConditionSatisfied\", conditionProperty);\r\n }\r\n const uncappedEffectValueProperty = createProperty();\r\n addGetter(uncappedEffectValueProperty, effect);\r\n Object.defineProperty(this, \"uncappedEffectValue\", uncappedEffectValueProperty);\r\n if (cap !== undefined) {\r\n const capProperty = createProperty();\r\n addGetter(capProperty, cap);\r\n Object.defineProperty(this, \"cap\", capProperty);\r\n }\r\n const effectValueProperty = createProperty();\r\n addGetter(effectValueProperty, effect);\r\n if (isConstant(cap)) {\r\n if (isNumber(effect)) {\r\n effectValueProperty.get = () => Math.min(effect, this.cap);\r\n } else if (isDecimal(effect)) {\r\n effectValueProperty.get = () => Decimal.min(effect, this.cap);\r\n } else if (isFunction(effect)) {\r\n // Postpone effectValue specialization until the first call\r\n effectValueProperty.configurable = true;\r\n effectValueProperty.get = () => {\r\n const effectValue = effect();\r\n const specializedProperty = createProperty();\r\n if (isNumber(effectValue)) {\r\n specializedProperty.get = () => Math.min(effect(), this.cap);\r\n } else if (isDecimal(effectValue)) {\r\n specializedProperty.get = () => Decimal.min(effect(), this.cap);\r\n } else {\r\n throw new Error(\"Unknown effect value type.\");\r\n }\r\n Object.defineProperty(this, \"effectValue\", specializedProperty);\r\n return specializedProperty.get();\r\n };\r\n }\r\n } else if (isFunction(cap)) {\r\n if (isNumber(effect)) {\r\n effectValueProperty.get = () => {\r\n const capValue = this.cap;\r\n return capValue === undefined ? effect : Math.min(effect, capValue);\r\n };\r\n } else if (isDecimal(effect)) {\r\n effectValueProperty.get = () => {\r\n const capValue = this.cap;\r\n return capValue === undefined ? effect : Decimal.min(effect, capValue);\r\n };\r\n } else if (isFunction(effect)) {\r\n // Postpone effectValue specialization until the first call\r\n effectValueProperty.configurable = true;\r\n effectValueProperty.get = () => {\r\n const effectValue = effect();\r\n const specializedProperty = createProperty();\r\n if (isNumber(effectValue)) {\r\n specializedProperty.get = () => {\r\n const capValue = this.cap;\r\n return capValue === undefined ? effect() : Math.min(effect(), capValue);\r\n };\r\n } else if (isDecimal(effectValue)) {\r\n specializedProperty.get = () => {\r\n const capValue = this.cap;\r\n return capValue === undefined ? effect() : Decimal.min(effect(), capValue);\r\n };\r\n } else {\r\n throw new Error(\"Unknown effect value type.\");\r\n }\r\n Object.defineProperty(this, \"effectValue\", specializedProperty);\r\n return specializedProperty.get();\r\n };\r\n }\r\n }\r\n Object.defineProperty(this, \"effectValue\", effectValueProperty);\r\n }\r\n\r\n /**\r\n * @returns {number|Decimal}\r\n */\r\n get effectValue() {\r\n throw new Error(\"Effect is undefined.\");\r\n }\r\n\r\n /**\r\n * @returns {number|Decimal}\r\n */\r\n get uncappedEffectValue() {\r\n throw new Error(\"Effect is undefined.\");\r\n }\r\n\r\n /**\r\n * @returns {number|Decimal|undefined}\r\n */\r\n get cap() {\r\n throw new Error(\"Cap is undefined.\");\r\n }\r\n\r\n get isEffectConditionSatisfied() {\r\n return true;\r\n }\r\n\r\n get isEffectActive() {\r\n return true;\r\n }\r\n\r\n get canBeApplied() {\r\n return this.isEffectActive && this.isEffectConditionSatisfied;\r\n }\r\n\r\n /**\r\n * @param {number|Decimal} defaultValue\r\n * @returns {number|Decimal}\r\n */\r\n effectOrDefault(defaultValue) {\r\n return this.canBeApplied ? this.effectValue : defaultValue;\r\n }\r\n\r\n applyEffect(applyFn) {\r\n if (this.canBeApplied) applyFn(this.effectValue);\r\n }\r\n\r\n get isCustomEffect() {\r\n return false;\r\n }\r\n}\r\n","export const Effects = {\r\n /**\r\n * @param effectSources\r\n * @return {Number}\r\n */\r\n sum(...effectSources) {\r\n let result = 0;\r\n applyEffectsOf(effectSources, v => {if (v instanceof Decimal) result+= v.toNumber();else result+= v});\r\n return result;\r\n },\r\n /**\r\n * @param effectSources\r\n * @return {Number}\r\n */\r\n product(...effectSources) {\r\n let result = 1;\r\n // applyEffectsOf(effectSources, v => result *= v);\r\n applyEffectsOf(effectSources, v => {if (v instanceof Decimal) result*= v.toNumber();else result*= v});\r\n return result;\r\n },\r\n /**\r\n * @param {Number} defaultValue\r\n * @param effectSources\r\n * @return {Number}\r\n */\r\n last(defaultValue, ...effectSources) {\r\n let result = defaultValue;\r\n let foundLast = false;\r\n const reversedSources = effectSources\r\n .filter(s => s !== null && s !== undefined)\r\n .reverse();\r\n const reducer = v => {\r\n result = v;\r\n foundLast = true;\r\n };\r\n for (const effectSource of reversedSources) {\r\n effectSource.applyEffect(reducer);\r\n if (foundLast) break;\r\n }\r\n return result;\r\n },\r\n /**\r\n * @param {Number} defaultValue\r\n * @param effectSources\r\n * @return {Number}\r\n */\r\n max(defaultValue, ...effectSources) {\r\n let result = defaultValue;\r\n applyEffectsOf(effectSources, v => result = Math.max(result, v));\r\n return result;\r\n },\r\n /**\r\n * @param {Number} defaultValue\r\n * @param effectSources\r\n * @return {Number}\r\n */\r\n min(defaultValue, ...effectSources) {\r\n let result = defaultValue;\r\n applyEffectsOf(effectSources, v => result = Math.min(result, v));\r\n return result;\r\n }\r\n};\r\n\r\n/**\r\n * @returns {Decimal}\r\n */\r\nDecimal.prototype.plusEffectOf = function(effectSource) {\r\n // eslint-disable-next-line consistent-this\r\n let result = this;\r\n effectSource.applyEffect(v => result = result.plus(v));\r\n return result;\r\n};\r\n\r\n/**\r\n * @returns {Decimal}\r\n */\r\nDecimal.prototype.plusEffectsOf = function(...effectSources) {\r\n // eslint-disable-next-line consistent-this\r\n let result = this;\r\n applyEffectsOf(effectSources, v => result = result.plus(v));\r\n return result;\r\n};\r\n\r\n/**\r\n * @returns {Decimal}\r\n */\r\nDecimal.prototype.minusEffectOf = function(effectSource) {\r\n // eslint-disable-next-line consistent-this\r\n let result = this;\r\n effectSource.applyEffect(v => result = result.minus(v));\r\n return result;\r\n};\r\n\r\n/**\r\n * @returns {Decimal}\r\n */\r\nDecimal.prototype.minusEffectsOf = function(...effectSources) {\r\n // eslint-disable-next-line consistent-this\r\n let result = this;\r\n applyEffectsOf(effectSources, v => result = result.minus(v));\r\n return result;\r\n};\r\n\r\n/**\r\n * @returns {Decimal}\r\n */\r\nDecimal.prototype.timesEffectOf = function(effectSource) {\r\n // eslint-disable-next-line consistent-this\r\n let result = this;\r\n effectSource.applyEffect(v => result = result.times(v));\r\n return result;\r\n};\r\n\r\n/**\r\n * @returns {Decimal}\r\n */\r\nDecimal.prototype.timesEffectsOf = function(...effectSources) {\r\n // Normalize is expensive; when we multiply many things together, it's faster\r\n // to get a big mantissa and then fix it at the end.\r\n let resultMantissa = this.mantissa;\r\n let resultExponent = this.exponent;\r\n applyEffectsOf(effectSources, v => {\r\n const decimal = typeof v === \"number\" ? new Decimal(v) : v;\r\n resultMantissa *= decimal.mantissa;\r\n resultExponent += decimal.exponent;\r\n });\r\n return Decimal.fromMantissaExponent(resultMantissa, resultExponent);\r\n};\r\n\r\n/**\r\n * @returns {Decimal}\r\n */\r\nDecimal.prototype.dividedByEffectOf = function(effectSource) {\r\n // eslint-disable-next-line consistent-this\r\n let result = this;\r\n effectSource.applyEffect(v => result = result.dividedBy(v));\r\n return result;\r\n};\r\n\r\n/**\r\n * @returns {Decimal}\r\n */\r\nDecimal.prototype.dividedByEffectsOf = function(...effectSources) {\r\n // eslint-disable-next-line consistent-this\r\n let result = this;\r\n applyEffectsOf(effectSources, v => result = result.dividedBy(v));\r\n return result;\r\n};\r\n\r\n/**\r\n * @returns {Decimal}\r\n */\r\nDecimal.prototype.powEffectOf = function(effectSource) {\r\n // eslint-disable-next-line consistent-this\r\n let result = this;\r\n effectSource.applyEffect(v => result = result.pow(v));\r\n return result;\r\n};\r\n\r\n/**\r\n * @returns {Decimal}\r\n */\r\nDecimal.prototype.powEffectsOf = function(...effectSources) {\r\n // eslint-disable-next-line consistent-this\r\n let result = this;\r\n applyEffectsOf(effectSources, v => result = result.pow(v));\r\n return result;\r\n};\r\n\r\nfunction applyEffectsOf(effectSources, applyFn) {\r\n for (const effectSource of effectSources) {\r\n if (effectSource !== null && effectSource !== undefined) effectSource.applyEffect(applyFn);\r\n }\r\n}\r\n","import { Effect } from \"./effect\";\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class GameMechanicState extends Effect {\r\n constructor(config) {\r\n if (!config) {\r\n throw new Error(\"Must specify config for GameMechanicState\");\r\n }\r\n super(config.effect, config.cap, config.effectCondition);\r\n this._config = config;\r\n if (config.effects !== undefined) {\r\n this.effects = {};\r\n for (const key in config.effects) {\r\n const nested = config.effects[key];\r\n let effect;\r\n if (typeof nested === \"number\" || typeof nested === \"function\" || nested instanceof Decimal) {\r\n effect = new Effect(nested);\r\n } else {\r\n effect = new Effect(nested.effect, nested.cap, nested.effectCondition);\r\n }\r\n Object.defineProperty(effect, \"isEffectActive\", {\r\n configurable: false,\r\n get: () => this.isEffectActive\r\n });\r\n this.effects[key] = effect;\r\n }\r\n }\r\n }\r\n\r\n get config() {\r\n return this._config;\r\n }\r\n\r\n get id() {\r\n return this.config.id;\r\n }\r\n\r\n get id2() {\r\n return this.config.id2;\r\n }\r\n\r\n registerEvents(events, callback) {\r\n if (events === undefined) return;\r\n for (const event of events instanceof Array ? events : [events]) {\r\n EventHub.logic.on(event, callback, this);\r\n }\r\n }\r\n\r\n static createAccessor(gameData) {\r\n const index = mapGameData(gameData, config => new this(config));\r\n const accessor = id => index[id];\r\n accessor.index = index;\r\n return accessor;\r\n }\r\n}\r\n","import { GameMechanicState } from \"./game-mechanic\";\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class BitUpgradeState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n if (this.id < 0 || this.id > 31) throw new Error(`Id ${this.id} out of bit range`);\r\n if (this.id2 < 0) throw new Error(`Id ${this.id2} is not a valid array index`);\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get bits() { throw new NotImplementedError(); }\r\n set bits(value) { throw new NotImplementedError(); }\r\n\r\n get modBits() { throw new NotImplementedError(); }\r\n set modBits(value) { throw new NotImplementedError(); }\r\n\r\n get isUnlocked() {\r\n if(this.id2 != undefined){\r\n return Boolean (this.modBits[this.id2] & (1 << this.id));\r\n }\r\n return Boolean(this.bits & (1 << this.id));\r\n }\r\n\r\n get canBeApplied() {\r\n return this.isUnlocked && this.isEffectActive;\r\n }\r\n\r\n get canBeUnlocked() {\r\n return !this.isUnlocked;\r\n }\r\n\r\n // eslint-disable-next-line no-empty-function\r\n onUnlock() { }\r\n\r\n unlock() {\r\n if (!this.canBeUnlocked) return;\r\n if(this.id2 === undefined) this.bits |= (1 << this.id);\r\n else {\r\n this.modBits[this.id2] |= (1 << this.id);\r\n }\r\n this.onUnlock();\r\n }\r\n}\r\n","import { GameMechanicState } from \"./game-mechanic\";\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class PurchasableMechanicState extends GameMechanicState {\r\n /**\r\n * @abstract\r\n */\r\n get currency() { throw new NotImplementedError(); }\r\n\r\n get isAffordable() {\r\n return this.currency.gte(this.cost);\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return true;\r\n }\r\n\r\n get isRebuyable() {\r\n return false;\r\n }\r\n\r\n get cost() {\r\n return this.config.cost;\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get isBought() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n set isBought(value) { throw new NotImplementedError(); }\r\n\r\n get canBeBought() {\r\n return !this.isBought && this.isAffordable && this.isAvailableForPurchase;\r\n }\r\n\r\n purchase() {\r\n if (!this.canBeBought) return false;\r\n this.currency.subtract(this.cost);\r\n this.isBought = true;\r\n this.onPurchased();\r\n GameUI.update();\r\n return true;\r\n }\r\n\r\n // eslint-disable-next-line no-empty-function\r\n onPurchased() { }\r\n\r\n get isEffectActive() {\r\n return this.isBought;\r\n }\r\n}\r\n","import { PurchasableMechanicState } from \"./puchasable\";\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class SetPurchasableMechanicState extends PurchasableMechanicState {\r\n /**\r\n * @abstract\r\n */\r\n get set() { throw new NotImplementedError(); }\r\n\r\n get isBought() {\r\n return this.set.has(this.id);\r\n }\r\n\r\n set isBought(value) {\r\n if (value) {\r\n this.set.add(this.id);\r\n } else {\r\n this.set.delete(this.id);\r\n }\r\n }\r\n}\r\n","import { PurchasableMechanicState } from \"./puchasable\";\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class BitPurchasableMechanicState extends PurchasableMechanicState {\r\n /**\r\n * @abstract\r\n */\r\n get bits() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n set bits(value) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get bitIndex() { throw new NotImplementedError(); }\r\n\r\n get isBought() {\r\n return (this.bits & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set isBought(value) {\r\n if (value) {\r\n this.bits |= (1 << this.bitIndex);\r\n } else {\r\n this.bits &= ~(1 << this.bitIndex);\r\n }\r\n }\r\n}\r\n","import { GameMechanicState } from \"./game-mechanic\";\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class RebuyableMechanicState extends GameMechanicState {\r\n /**\r\n * @abstract\r\n */\r\n get currency() { throw new NotImplementedError(); }\r\n\r\n get isAffordable() {\r\n return this.currency.gte(this.cost);\r\n }\r\n\r\n get cost() {\r\n return this.config.cost();\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return true;\r\n }\r\n\r\n get isCapped() {\r\n return false;\r\n }\r\n\r\n get isRebuyable() {\r\n return true;\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get boughtAmount() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n set boughtAmount(value) { throw new NotImplementedError(); }\r\n\r\n get isEffectActive() {\r\n return this.boughtAmount > 0;\r\n }\r\n\r\n get canBeBought() {\r\n return this.isAffordable && this.isAvailableForPurchase && !this.isCapped;\r\n }\r\n\r\n purchase() {\r\n if (!this.canBeBought) return false;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return false;\r\n this.currency.subtract(this.cost);\r\n this.boughtAmount++;\r\n this.onPurchased();\r\n GameUI.update();\r\n return true;\r\n }\r\n\r\n // eslint-disable-next-line no-empty-function\r\n onPurchased() { }\r\n}\r\n","function predictableRandom(x) {\r\n let start = Math.pow(x % 97, 4.3) * 232344573;\r\n const a = 15485863;\r\n const b = 521791;\r\n start = (start * a) % b;\r\n for (let i = 0; i < (x * x) % 90 + 90; i++) {\r\n start = (start * a) % b;\r\n }\r\n return start / b;\r\n}\r\n\r\nfunction randomSymbol() {\r\n return String.fromCharCode(Math.floor(Math.random() * 50) + 192);\r\n}\r\n\r\nexport default {\r\n // Word cycling uses two diffrent effects to smoothly ease between words in the randomized set\r\n // - The randomization effect eases in and out smoothly, with about 62% in the time in the middle being\r\n // completely unrandomized (randomCrossWords is passed frac <= 0). The randomization parameter goes well above 1\r\n // in order to have a good chance of properly randomizing the entire input in the middle\r\n // - Near the \"edges\" (12% on each side) of each word's randomization time, it's blended with the previous or next\r\n // word. This mostly serves to smoothly ease between strings of different lengths, and only occurs between\r\n // strings which already have a high randomization fraction (frac > 1.3)\r\n wordCycle(list, noBuffer = false) {\r\n const len = list.length;\r\n const tick = Math.floor(Date.now() / 250) % (len * 5);\r\n const mod5 = ((Date.now() / 250) % (len * 5)) % 5;\r\n const largeTick = Math.floor(tick / 5);\r\n let v = list[largeTick];\r\n\r\n // Blend with adjacent words, in such a way that mod5 being 0 or 5 corresponds with a 0.5 blend parameter\r\n if (mod5 < 0.6) {\r\n v = this.blendWords(list[(largeTick + list.length - 1) % list.length], list[largeTick], (mod5 + 0.6) / 1.2);\r\n } else if (mod5 > 4.4) {\r\n v = this.blendWords(list[largeTick], list[(largeTick + 1) % list.length], (mod5 - 4.4) / 1.2);\r\n }\r\n\r\n v = this.randomCrossWords(v, 0.1 * Math.pow(mod5 - 2.5, 4) - 0.6);\r\n if (noBuffer) return v;\r\n\r\n const maxWordLen = Math.max(...list.map(x => x.length));\r\n const bufferSpace = (maxWordLen - v.length) / 2;\r\n\r\n // Buffer the result with ALT+255 on either side to prevent the ui from twitching.\r\n // Spaces do not work due to being automatically collapsed, and css fixing this causes other issues.\r\n return \" \".repeat(Math.ceil(bufferSpace)) + v + \" \".repeat(Math.floor(bufferSpace));\r\n },\r\n // Note that while frac may appear to specify the proportion of letters randomized, it may end up being slightly less\r\n // depending on the specific string length and random output sometimes giving outputs which aren't coprime\r\n randomCrossWords(str, frac = 0.7) {\r\n if (frac <= 0) return str;\r\n const x = str.split(\"\");\r\n for (let i = 0; i < x.length * frac; i++) {\r\n const randomIndex = Math.floor(predictableRandom(Math.floor(Date.now() / 500) % 964372 + 1.618 * i) * x.length);\r\n x[randomIndex] = randomSymbol();\r\n }\r\n return x.join(\"\");\r\n },\r\n // This should only be used on words which will end up being completely randomized, because the unscrambled appearance\r\n // of the output may look bad. Blends two strings together to produce a string of intermediate length, taking a\r\n // specifed fraction (param, 0 to 1) from the first word and the rest (1 - param) from the second\r\n blendWords(first, second, param) {\r\n if (param <= 0) return first;\r\n if (param >= 1) return second;\r\n return first.substring(0, first.length * (1 - param)) +\r\n second.substring(second.length * (1 - param), second.length);\r\n }\r\n};\r\n","import wordShift from \"@/core/word-shift\";\r\n\r\n//Blatantly stolen code\r\nexport function makeGarbledTemplate(input) {\r\n const text = `${input}`;\r\n let garbled = \"\";\r\n for (let i = 0; i < text.length; i++) {\r\n if (text[i] === \" \") garbled += \" \";\r\n else {\r\n const n = text[i].charCodeAt();\r\n garbled += String.fromCharCode(33 + ((n * n + i * i) % 93));\r\n }\r\n }\r\n return garbled;\r\n}\r\n\r\nexport function processText(unmodified, garbledTemplate, condition=false) {\r\n if(condition) return unmodified;\r\n const raw = wordShift.randomCrossWords(garbledTemplate);\r\n let modified = \"\";\r\n for (let i = 0; i < raw.length; i++) {\r\n if (garbledTemplate[i] === \" \") modified += \" \";\r\n else modified += raw[i];\r\n }\r\n return modified;\r\n}","// The glyphTypes entry is used for both gameplay and cosmetics purposes, so we cannot modify isUnlocked for cosmetics.\r\n// For the purposes of cosmetics, the difference between isUnlocked and canCustomize is as follows:\r\n// - isUnlocked: Whether or not this type appears as a choice in glyph-specific customization for overriding their\r\n// normal display type; this is ignored for functional type entries\r\n// - canCustomize: Whether or not this type can have its color/symbol changed in the type-specific customization\r\nexport const glyphTypes = {\r\n time: {\r\n id: \"time\",\r\n symbol: GLYPH_SYMBOLS.time,\r\n color: \"#b241e3\",\r\n primaryEffect: \"timepow\",\r\n alchemyResource: ALCHEMY_RESOURCE.TIME,\r\n hasRarity: true\r\n },\r\n dilation: {\r\n id: \"dilation\",\r\n symbol: GLYPH_SYMBOLS.dilation,\r\n color: \"#64dd17\",\r\n alchemyResource: ALCHEMY_RESOURCE.DILATION,\r\n hasRarity: true\r\n },\r\n replication: {\r\n id: \"replication\",\r\n symbol: GLYPH_SYMBOLS.replication,\r\n color: \"#03a9f4\",\r\n alchemyResource: ALCHEMY_RESOURCE.REPLICATION,\r\n hasRarity: true\r\n },\r\n infinity: {\r\n id: \"infinity\",\r\n symbol: GLYPH_SYMBOLS.infinity,\r\n color: \"#b67f33\",\r\n primaryEffect: \"infinitypow\",\r\n alchemyResource: ALCHEMY_RESOURCE.INFINITY,\r\n hasRarity: true\r\n },\r\n power: {\r\n id: \"power\",\r\n symbol: GLYPH_SYMBOLS.power,\r\n color: \"#22aa48\",\r\n primaryEffect: \"powerpow\",\r\n alchemyResource: ALCHEMY_RESOURCE.POWER,\r\n hasRarity: true\r\n },\r\n effarig: {\r\n id: \"effarig\",\r\n symbol: GLYPH_SYMBOLS.effarig,\r\n color: \"#e21717\",\r\n isUnlocked: () => EffarigUnlock.reality.isUnlocked || MendingUpgrade(12).isBought,\r\n canCustomize: () => EffarigUnlock.reality.isUnlocked || MendingUpgrade(12).isBought,\r\n alchemyResource: ALCHEMY_RESOURCE.EFFARIG,\r\n hasRarity: true\r\n // Effarig glyphs have no primary effect; all are equally likely\r\n },\r\n reality: {\r\n id: \"reality\",\r\n symbol: GLYPH_SYMBOLS.reality,\r\n fixedSymbolColor: true,\r\n isUnlocked: () => false,\r\n canCustomize: () => player.reality.glyphs.createdRealityGlyph,\r\n // Refining a reality glyph is pretty wasteful anyway, but might as well have this here\r\n alchemyResource: ALCHEMY_RESOURCE.REALITY\r\n },\r\n cursed: {\r\n id: \"cursed\",\r\n symbol: GLYPH_SYMBOLS.cursed,\r\n color: \"#000000\",\r\n fixedSymbolColor: true,\r\n isUnlocked: () => false,\r\n canCustomize: () => V.isFlipped,\r\n },\r\n companion: {\r\n id: \"companion\",\r\n symbol: GLYPH_SYMBOLS.companion,\r\n color: \"#feaec9\",\r\n fixedSymbolColor: true,\r\n isUnlocked: () => false,\r\n canCustomize: () => false,\r\n },\r\n amalgam: {\r\n id: \"amalgam\",\r\n symbol: GLYPH_SYMBOLS.amalgam,\r\n color: \"#000000\",\r\n fixedSymbolColor: true,\r\n isUnlocked: () => false,\r\n canCustomize: () => false,\r\n hasRarity: false,\r\n },\r\n};\r\n\r\nexport const cosmeticGlyphs = {\r\n music: {\r\n id: \"music\",\r\n symbol: \"♫\",\r\n color: \"#FF80AB\",\r\n isUnlocked: () => TeresaUnlocks.shop.isUnlocked,\r\n },\r\n blob: {\r\n id: \"blob\",\r\n symbol: \"\\uE010\",\r\n color: \"#E4B51A\",\r\n preventBlur: true,\r\n isUnlocked: () => Themes.available().map(t => t.name).includes(\"S11\"),\r\n canCustomize: () => false,\r\n },\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const PERK_FAMILY = {\r\n ANTIMATTER: \"ANTIMATTER\",\r\n INFINITY: \"INFINITY\",\r\n ETERNITY: \"ETERNITY\",\r\n DILATION: \"DILATION\",\r\n REALITY: \"REALITY\",\r\n AUTOMATION: \"AUTOMATION\",\r\n ACHIEVEMENT: \"ACHIEVEMENT\",\r\n MENDING: \"MENDING\",\r\n};\r\n\r\n// This function isn't used in-game, see note below for its intended usage\r\n// eslint-disable-next-line no-unused-vars\r\nfunction vectorToNum(v) {\r\n return Math.floor(v.x / 5) + 400 * Math.floor(v.y / 5) + 80200;\r\n}\r\n\r\n/**\r\n * In order to reduce boilerplate code and excessive Vector object declarations, the node positions in fixed layouts\r\n * are specified as numbers which are decoded on-the-fly using positionNumToVector in PerksTab.vue. The function\r\n * vectorToNum above is the inverse of that function.\r\n *\r\n * To make a new preset layout, define vectorToNum in the console, move all the nodes around in-game and then run\r\n * Object.values(PerkNetwork.network.body.nodes).filter(n => n.edges.length !== 0).map(v => vectorToNum(v))\r\n * in the console to get all the current node positions. Then, append the resulting numbers to each layoutPosList\r\n * array below and make the appripriate entry in PerkLayouts.\r\n *\r\n * Note: This encoding/decoding only works properly for coordinates with values between -1000 and 1000, and will\r\n * be slightly off for vectors whose coordinates aren't divisible by 5\r\n */\r\nexport const perks = {\r\n firstPerk: {\r\n id: 0,\r\n label: \"START\",\r\n family: PERK_FAMILY.REALITY,\r\n get description() {\r\n return `Remove the achievement requirement from the Reality Study\r\n and allow you to choose from ${formatInt(4)} different Glyphs on Reality.`;\r\n },\r\n effect: 4,\r\n layoutPosList: [80200, 80200, 80200, 80200, 80188, 67769],\r\n },\r\n startAM: {\r\n id: 10,\r\n label: \"SAM\",\r\n family: PERK_FAMILY.ANTIMATTER,\r\n get description() {\r\n return `Start every reset with ${format(5e130)} antimatter.`;\r\n },\r\n bumpCurrency: () => Currency.antimatter.bumpTo(5e130),\r\n effect: 5e130,\r\n layoutPosList: [80162, 80600, 80199, 80600, 81391, 75745],\r\n },\r\n startIP1: {\r\n id: 12,\r\n label: \"SIP1\",\r\n family: PERK_FAMILY.INFINITY,\r\n get description() {\r\n return `Start every Eternity and Reality with ${format(5e15)} Infinity Points.`;\r\n },\r\n bumpCurrency: () => Currency.infinityPoints.bumpTo(5e15),\r\n effect: 5e15,\r\n layoutPosList: [78925, 80599, 79798, 80599, 82194, 91322],\r\n },\r\n startIP2: {\r\n id: 13,\r\n label: \"SIP2\",\r\n family: PERK_FAMILY.INFINITY,\r\n get description() {\r\n return `Start every Eternity and Reality with ${format(5e130)} Infinity Points.`;\r\n },\r\n bumpCurrency: () => Currency.infinityPoints.bumpTo(5e130),\r\n effect: 5e130,\r\n layoutPosList: [66111, 80598, 80198, 80998, 82197, 91690],\r\n },\r\n startEP1: {\r\n id: 14,\r\n label: \"SEP1\",\r\n family: PERK_FAMILY.ETERNITY,\r\n get description() {\r\n return `Start every Reality with ${formatInt(10)} Eternity Points.`;\r\n },\r\n bumpCurrency: () => Currency.eternityPoints.bumpTo(10),\r\n effect: 10,\r\n automatorPoints: 5,\r\n shortDescription: () => `Start with ${formatInt(10)} EP`,\r\n layoutPosList: [93317, 80999, 79398, 80598, 81397, 103734],\r\n },\r\n startEP2: {\r\n id: 15,\r\n label: \"SEP2\",\r\n family: PERK_FAMILY.ETERNITY,\r\n get description() {\r\n return `Start every Reality with ${format(5000)} Eternity Points.`;\r\n },\r\n bumpCurrency: () => Currency.eternityPoints.bumpTo(5000),\r\n effect: 5000,\r\n layoutPosList: [96487, 81398, 78998, 80597, 81800, 102193],\r\n },\r\n startEP3: {\r\n id: 16,\r\n label: \"SEP3\",\r\n family: PERK_FAMILY.ETERNITY,\r\n get description() {\r\n return `Start every Reality with ${format(5e9)} Eternity Points.`;\r\n },\r\n bumpCurrency: () => Currency.eternityPoints.bumpTo(5e9),\r\n effect: 5e9,\r\n automatorPoints: 10,\r\n shortDescription: () => `Start with ${format(5e9)} EP`,\r\n layoutPosList: [99260, 81798, 78997, 80996, 81803, 106247],\r\n },\r\n startTP: {\r\n id: 17,\r\n label: \"STP\",\r\n family: PERK_FAMILY.DILATION,\r\n get description() {\r\n return `After unlocking Dilation, gain ${formatInt(10)} Tachyon Particles.`;\r\n },\r\n effect: () => (Enslaved.isRunning ? 1 : 10),\r\n automatorPoints: 5,\r\n shortDescription: () => `Start with ${formatInt(10)} TP`,\r\n layoutPosList: [106923, 81399, 79399, 80198, 81400, 109376],\r\n },\r\n antimatterNoReset: {\r\n id: 30,\r\n label: \"ANR\",\r\n family: PERK_FAMILY.ANTIMATTER,\r\n description: `Dimension Boosts and Antimatter Galaxies no longer reset\r\n Antimatter, Antimatter Dimensions, Tickspeed, or Dimensional Sacrifice.`,\r\n layoutPosList: [89745, 81000, 79799, 80199, 81394, 92553],\r\n },\r\n studyPassive: {\r\n id: 31,\r\n label: \"PASS\",\r\n family: PERK_FAMILY.ETERNITY,\r\n get description() {\r\n return `Improve Time Study 122 to ${formatX(50)} Eternity Points and\r\n Time Study 142 to ${formatX(DC.E50)} Infinity Points.\r\n ${Pelle.isDoomed ? \"\" : `In addition, Time Study 132 also makes Replicanti ${format(3)} times faster.`}`;\r\n },\r\n layoutPosList: [69860, 79400, 81000, 80202, 78594, 52589],\r\n },\r\n autounlockEU1: {\r\n id: 40,\r\n label: \"EU1\",\r\n family: PERK_FAMILY.ETERNITY,\r\n description: `Automatically unlock the first row of Eternity Upgrades for free once you have Eternities.`,\r\n layoutPosList: [92210, 80601, 80201, 79800, 80591, 73007],\r\n },\r\n autounlockEU2: {\r\n id: 41,\r\n label: \"EU2\",\r\n family: PERK_FAMILY.ETERNITY,\r\n get description() {\r\n return `The second row of Eternity Upgrades is automatically purchased\r\n at ${formatX(1e10)} times less than their original price.`;\r\n },\r\n layoutPosList: [106210, 81001, 80202, 79400, 80594, 81867],\r\n },\r\n autounlockDilation1: {\r\n id: 42,\r\n label: \"DU1\",\r\n family: PERK_FAMILY.DILATION,\r\n get description(){ \r\n if (MendingMilestone.two.isReached){\r\n return \"After unlocking Dilation, automatically unlock the third row of Dilation Upgrades for free.\"\r\n }\r\n return \"After unlocking Dilation, automatically unlock the second row of Dilation Upgrades for free.\"\r\n },\r\n layoutPosList: [125433, 81801, 79803, 79398, 80200, 97510],\r\n },\r\n autounlockDilation2: {\r\n id: 43,\r\n label: \"DU2\",\r\n family: PERK_FAMILY.DILATION,\r\n get description(){ \r\n if (MendingMilestone.two.isReached){\r\n return \"After unlocking Dilation, automatically unlock the fourth and fifth row of Dilation Upgrades for free.\"\r\n }\r\n return \"After unlocking Dilation, automatically unlock the third row of Dilation Upgrades for free.\"\r\n },\r\n layoutPosList: [128662, 82201, 79403, 79397, 80203, 85513],\r\n },\r\n autounlockDilation3: {\r\n id: 44,\r\n label: \"ATT\",\r\n family: PERK_FAMILY.DILATION,\r\n description: \"Automatically purchase the passive Time Theorem generation Dilation Upgrade once you can afford it.\",\r\n automatorPoints: 5,\r\n shortDescription: () => \"Auto-purchase TT generation\",\r\n layoutPosList: [126692, 82601, 79402, 79396, 80206, 72282],\r\n },\r\n autounlockTD: {\r\n id: 45,\r\n label: \"ATD\",\r\n family: PERK_FAMILY.DILATION,\r\n description: \"Auto-unlock Time Dimensions 5-8 once you can afford them.\",\r\n automatorPoints: 5,\r\n shortDescription: () => \"Auto-unlock TD 5-8\",\r\n layoutPosList: [126321, 82600, 79001, 79796, 80209, 61869],\r\n },\r\n autounlockReality: {\r\n id: 46,\r\n label: \"REAL\",\r\n family: PERK_FAMILY.REALITY,\r\n get description() {\r\n return `Auto-unlocks Reality once you have ${format(DC.E4000)} Eternity Points\r\n and have unlocked Time Dimension 8.`;\r\n },\r\n automatorPoints: 10,\r\n shortDescription: () => \"Auto-unlock Reality\",\r\n layoutPosList: [120745, 83000, 79000, 80196, 80212, 71046],\r\n },\r\n bypassIDAntimatter: {\r\n id: 51,\r\n label: \"IDR\",\r\n family: PERK_FAMILY.INFINITY,\r\n description: \"Infinity Dimensions no longer have antimatter requirements.\",\r\n layoutPosList: [61684, 80198, 79797, 80997, 82200, 79297],\r\n },\r\n bypassTGReset: {\r\n id: 52,\r\n label: \"TGR\",\r\n family: PERK_FAMILY.DILATION,\r\n description: \"The 2nd rebuyable Dilation Upgrade no longer resets your Dilated Time.\",\r\n layoutPosList: [121771, 81400, 79801, 79798, 81000, 112677],\r\n },\r\n bypassECDilation: {\r\n id: 53,\r\n label: \"DILR\",\r\n family: PERK_FAMILY.DILATION,\r\n description: \"Remove the Eternity Challenge 11, Eternity Challenge 12, and total Time Theorem \" +\r\n \"requirements from Time Dilation unlock.\",\r\n automatorPoints: 5,\r\n shortDescription: () => `Unlocking Dilation only requires TT`,\r\n layoutPosList: [131400, 81802, 80203, 79799, 80600, 109116],\r\n },\r\n bypassEC1Lock: {\r\n id: 54,\r\n label: \"EC1R\",\r\n family: PERK_FAMILY.ETERNITY,\r\n description: \"Remove the Eternity Challenge 1 requirement from Time Study 181.\",\r\n layoutPosList: [67490, 79000, 81399, 80603, 78597, 44167],\r\n },\r\n bypassEC2Lock: {\r\n id: 55,\r\n label: \"EC2R\",\r\n family: PERK_FAMILY.ETERNITY,\r\n description: \"Remove the Eternity Challenge 2 requirement from Time Study 181.\",\r\n layoutPosList: [58670, 78999, 80999, 80602, 78197, 48944],\r\n },\r\n bypassEC3Lock: {\r\n id: 56,\r\n label: \"EC3R\",\r\n family: PERK_FAMILY.ETERNITY,\r\n description: \"Remove the Eternity Challenge 3 requirement from Time Study 181.\",\r\n layoutPosList: [78282, 79001, 81400, 80203, 78997, 47822],\r\n },\r\n bypassEC5Lock: {\r\n id: 57,\r\n label: \"EC5R\",\r\n family: PERK_FAMILY.ETERNITY,\r\n description: \"Remove the Eternity Challenge 5 requirement from Time Study 62.\",\r\n layoutPosList: [73431, 79800, 80600, 80201, 78591, 62607],\r\n },\r\n autocompleteEC1: {\r\n id: 60,\r\n label: \"PEC1\",\r\n family: PERK_FAMILY.AUTOMATION,\r\n get description() {\r\n return `Auto-complete one Eternity Challenge every ${formatInt(60)} minutes (real-time).\r\n ECs will be completed sequentially, requiring all previous\r\n ECs to be fully completed before progressing to the next EC.`;\r\n },\r\n effect: 60,\r\n automatorPoints: 5,\r\n shortDescription: () => `Auto-complete ECs every ${formatInt(60)} minutes`,\r\n layoutPosList: [91069, 79402, 81002, 79803, 79397, 46664],\r\n },\r\n autocompleteEC2: {\r\n id: 61,\r\n label: \"PEC2\",\r\n family: PERK_FAMILY.AUTOMATION,\r\n get description() {\r\n return `Auto-complete one Eternity Challenge every ${formatInt(40)} minutes (real-time).\r\n (${formatInt(20)} minute decrease)`;\r\n },\r\n effect: 40,\r\n layoutPosList: [99085, 79002, 81402, 79804, 79400, 53486],\r\n },\r\n autocompleteEC3: {\r\n id: 62,\r\n label: \"PEC3\",\r\n family: PERK_FAMILY.AUTOMATION,\r\n get description() {\r\n return `Auto-complete one Eternity Challenge every ${formatInt(20)} minutes (real-time).\r\n (${formatInt(20)} minute decrease)`;\r\n },\r\n effect: 20,\r\n automatorPoints: 10,\r\n shortDescription: () => `Auto-complete ECs every ${formatInt(20)} minutes`,\r\n layoutPosList: [106265, 78602, 81401, 80204, 79403, 61903],\r\n },\r\n studyActiveEP: {\r\n id: 70,\r\n label: \"ACT\",\r\n family: PERK_FAMILY.ETERNITY,\r\n description: \"Active path multipliers are always maximized.\",\r\n layoutPosList: [59439, 79399, 80599, 80601, 78194, 58565],\r\n },\r\n studyIdleEP: {\r\n id: 71,\r\n label: \"IDL\",\r\n family: PERK_FAMILY.ETERNITY,\r\n get description() {\r\n return `Idle path multipliers start as if you have spent ${formatInt(15)} minutes in this Infinity/Eternity.`;\r\n },\r\n effect: 15*60,\r\n layoutPosList: [82253, 79401, 81001, 79802, 78994, 56239],\r\n },\r\n studyECRequirement: {\r\n id: 72,\r\n label: \"ECR\",\r\n family: PERK_FAMILY.ETERNITY,\r\n description: \"Remove non-Time Theorem requirements for unlocking Eternity Challenges.\",\r\n automatorPoints: 10,\r\n shortDescription: () => \"Remove EC secondary requirements\",\r\n layoutPosList: [67521, 78600, 81398, 80604, 78600, 40599],\r\n },\r\n studyECBulk: {\r\n id: 73,\r\n label: \"ECB\",\r\n family: PERK_FAMILY.ETERNITY,\r\n description:\r\n `You can complete multiple tiers of Eternity Challenges at once if\r\n you reach the goal for a higher completion of that challenge.`,\r\n automatorPoints: 15,\r\n shortDescription: () => \"Bulk EC Completion\",\r\n layoutPosList: [69548, 78200, 80998, 81004, 78603, 41435],\r\n },\r\n retroactiveTP1: {\r\n id: 80,\r\n label: \"TP1\",\r\n family: PERK_FAMILY.DILATION,\r\n get description() {\r\n return `When buying the 3rd rebuyable Dilation Upgrade,\r\n multiply your current Tachyon Particle amount by ${formatFloat(1.5, 1)}.`;\r\n },\r\n effect: 1.5,\r\n layoutPosList: [116942, 81799, 79800, 79797, 81003, 115434],\r\n },\r\n retroactiveTP2: {\r\n id: 81,\r\n label: \"TP2\",\r\n family: PERK_FAMILY.DILATION,\r\n get description() {\r\n return `When buying the 3rd rebuyable Dilation Upgrade,\r\n multiply your current Tachyon Particle amount by ${formatInt(2)}.`;\r\n },\r\n effect: 2,\r\n layoutPosList: [108960, 82199, 79401, 80197, 81006, 117382],\r\n },\r\n retroactiveTP3: {\r\n id: 82,\r\n label: \"TP3\",\r\n family: PERK_FAMILY.DILATION,\r\n get description() {\r\n return `When buying the 3rd rebuyable Dilation Upgrade,\r\n multiply your current Tachyon Particle amount by ${formatFloat(2.5, 1)}.`;\r\n },\r\n effect: 2.5,\r\n layoutPosList: [100976, 82599, 79400, 80596, 81009, 116540],\r\n },\r\n retroactiveTP4: {\r\n id: 83,\r\n label: \"TP4\",\r\n family: PERK_FAMILY.DILATION,\r\n get description() {\r\n return `When buying the 3rd rebuyable Dilation Upgrade,\r\n multiply your current Tachyon Particle amount by ${formatInt(3)}.`;\r\n },\r\n effect: 3,\r\n automatorPoints: 10,\r\n shortDescription: () => `${formatX(3)} TP upgrade applies retroactively`,\r\n layoutPosList: [91787, 82598, 78999, 80995, 81012, 114103],\r\n },\r\n autobuyerDilation: {\r\n id: 100,\r\n label: \"DAU\",\r\n family: PERK_FAMILY.AUTOMATION,\r\n description: \"Unlock autobuyers for the repeatable Dilation Upgrades.\",\r\n automatorPoints: 5,\r\n shortDescription: () => \"Dilation Upgrade Autobuyers\",\r\n layoutPosList: [120204, 81401, 79802, 79399, 80597, 96672],\r\n },\r\n autobuyerFasterID: {\r\n id: 101,\r\n label: \"IDAS\",\r\n family: PERK_FAMILY.AUTOMATION,\r\n get description() {\r\n return `Infinity Dimension autobuyers work ${formatX(3)} faster.`;\r\n },\r\n effect: 1 / 3,\r\n automatorPoints: 5,\r\n shortDescription: () => \"Faster ID Autobuyers\",\r\n layoutPosList: [78497, 80199, 79397, 81000, 82597, 77720],\r\n },\r\n autobuyerFasterReplicanti: {\r\n id: 102,\r\n label: \"REPAS\",\r\n family: PERK_FAMILY.AUTOMATION,\r\n get description() {\r\n return `Replicanti autobuyers work ${formatX(3)} faster.`;\r\n },\r\n effect: 1 / 3,\r\n automatorPoints: 5,\r\n shortDescription: () => \"Faster Replicanti Autobuyers\",\r\n layoutPosList: [55315, 80998, 80197, 80999, 82600, 104489],\r\n },\r\n autobuyerFasterDilation: {\r\n id: 103,\r\n label: \"DAS\",\r\n family: PERK_FAMILY.AUTOMATION,\r\n get description() {\r\n return `Dilation Upgrade autobuyers work ${formatX(3)} faster.`;\r\n },\r\n effect: 1 / 3,\r\n automatorPoints: 5,\r\n shortDescription: () => \"Faster Dilation Autobuyers\",\r\n layoutPosList: [116298, 82602, 79002, 79395, 80609, 72715],\r\n },\r\n ttBuySingle: {\r\n id: 104,\r\n label: \"TTS\",\r\n family: PERK_FAMILY.AUTOMATION,\r\n description: \"Unlock a Time Theorem Autobuyer which buys single Time Theorems every tick.\",\r\n automatorPoints: 5,\r\n shortDescription: () => \"Single TT Autobuyer\",\r\n layoutPosList: [47438, 79398, 80598, 81001, 77797, 57325],\r\n },\r\n ttFree: {\r\n id: 105,\r\n label: \"TTF\",\r\n family: PERK_FAMILY.AUTOMATION,\r\n get description() {\r\n return `Purchasing Time Theorems no longer spends your Antimatter, Infinity Points, or Eternity Points.`;\r\n },\r\n layoutPosList: [37051, 78998, 80597, 81002, 77800, 67309],\r\n },\r\n ttBuyMax: {\r\n id: 106,\r\n label: \"TTM\",\r\n family: PERK_FAMILY.AUTOMATION,\r\n get description() {\r\n return `Upgrade the Time Theorem Autobuyer to buy max Time Theorems.`;\r\n },\r\n automatorPoints: 10,\r\n shortDescription: () => \"Max TT Autobuyer\",\r\n layoutPosList: [30272, 78598, 80997, 81003, 77803, 65739],\r\n },\r\n achievementGroup1: {\r\n id: 201,\r\n label: \"ACH1\",\r\n family: PERK_FAMILY.ACHIEVEMENT,\r\n get description() {\r\n return `Reduce the Achievement timer to ${formatInt(20)} minutes per\r\n Achievement (${formatInt(10)} minute decrease).`;\r\n },\r\n effect: 10,\r\n automatorPoints: 5,\r\n shortDescription: () => `Faster Achievements: every ${formatInt(20)} minutes`,\r\n layoutPosList: [69391, 80201, 80601, 79801, 79791, 81371],\r\n },\r\n achievementGroup2: {\r\n id: 202,\r\n label: \"ACH2\",\r\n family: PERK_FAMILY.ACHIEVEMENT,\r\n get description() {\r\n return `Reduce the Achievement timer to ${formatInt(12)} minutes per\r\n Achievement (${formatInt(8)} minute decrease).`;\r\n },\r\n effect: 8,\r\n layoutPosList: [60177, 80202, 80602, 79401, 79794, 93780],\r\n },\r\n achievementGroup3: {\r\n id: 203,\r\n label: \"ACH3\",\r\n family: PERK_FAMILY.ACHIEVEMENT,\r\n get description() {\r\n return `Reduce the Achievement timer to ${formatInt(6)} minutes per\r\n Achievement (${formatInt(6)} minute decrease).`;\r\n },\r\n effect: 6,\r\n layoutPosList: [50965, 80602, 80603, 79402, 79797, 83005],\r\n },\r\n achievementGroup4: {\r\n id: 204,\r\n label: \"ACH4\",\r\n family: PERK_FAMILY.ACHIEVEMENT,\r\n get description() {\r\n return `Reduce the Achievement timer to ${formatInt(2)} minutes per\r\n Achievement (${formatInt(4)} minute decrease).`;\r\n },\r\n effect: 4,\r\n layoutPosList: [40164, 81002, 81003, 79403, 79800, 95422],\r\n },\r\n achievementGroup5: {\r\n id: 205,\r\n label: \"ACHNR\",\r\n family: PERK_FAMILY.ACHIEVEMENT,\r\n get description() {\r\n return `Immediately unlock the first ${formatInt(13)} rows of Achievements\r\n and Reality no longer resets them.`;\r\n },\r\n automatorPoints: 10,\r\n shortDescription: () => \"Keep Achievements on Reality\",\r\n layoutPosList: [29761, 81402, 81403, 79404, 79803, 84639],\r\n },\r\n /*startRealityUpgrades: {\r\n id: 300,\r\n label: \"SRU\",\r\n family: PERK_FAMILY.MENDING,\r\n get description(){\r\n return `Start every Mend with all Reality Upgrades.`;\r\n },\r\n //effect: 10,\r\n layoutPosList: [91508, 83000, 79000, 80196, 80212, 71046],\r\n },\r\n startTeresaBest: {\r\n id: 301,\r\n label: \"STB\",\r\n family: PERK_FAMILY.MENDING,\r\n get description(){\r\n return `Start every Mend with Teresa's Reality completed, and its best antimatter at ${format(DC.E1E9)}.`;\r\n },\r\n //effect: 10,\r\n layoutPosList: [94343, 83000, 79000, 80196, 80212, 71046],\r\n }*/\r\n};\r\n\r\nexport const perkConnections = (function() {\r\n const p = perks;\r\n // First item is the start, other items are the ends\r\n const groups = [\r\n [p.firstPerk, p.achievementGroup1, p.startAM, p.autounlockEU1, p.bypassEC5Lock],\r\n [p.startAM, p.antimatterNoReset, p.startIP1],\r\n [p.antimatterNoReset, p.startEP1],\r\n [p.startIP1, p.startIP2, p.startEP1, p.autobuyerFasterID],\r\n [p.startIP2, p.bypassIDAntimatter, p.autobuyerFasterReplicanti],\r\n [p.startEP1, p.startEP2, p.startTP],\r\n [p.startEP2, p.startEP3],\r\n [p.startTP, p.startEP1, p.retroactiveTP1],\r\n [p.autounlockEU1, p.autounlockEU2],\r\n [p.autounlockEU2, p.autounlockEU1, p.autobuyerDilation],\r\n [p.autounlockDilation1, p.autounlockDilation2],\r\n [p.autounlockDilation2, p.autounlockDilation3],\r\n [p.autounlockDilation3, p.autobuyerFasterDilation, p.autounlockTD],\r\n [p.autounlockTD, p.autounlockReality],\r\n [p.bypassTGReset, p.autobuyerDilation, p.retroactiveTP1],\r\n [p.bypassEC1Lock, p.bypassEC2Lock, p.bypassEC3Lock, p.studyECRequirement],\r\n [p.bypassEC2Lock, p.studyActiveEP, p.bypassEC1Lock],\r\n [p.bypassEC3Lock, p.studyIdleEP, p.bypassEC1Lock],\r\n [p.bypassEC5Lock, p.studyActiveEP, p.studyIdleEP, p.studyPassive],\r\n [p.studyPassive, p.bypassEC1Lock],\r\n [p.autocompleteEC1, p.autocompleteEC2],\r\n [p.autocompleteEC2, p.autocompleteEC3],\r\n [p.studyActiveEP, p.bypassEC2Lock, p.ttBuySingle],\r\n [p.studyIdleEP, p.bypassEC3Lock, p.autocompleteEC1],\r\n [p.studyECRequirement, p.studyECBulk],\r\n [p.retroactiveTP1, p.bypassTGReset, p.startTP, p.retroactiveTP2],\r\n [p.retroactiveTP2, p.retroactiveTP3],\r\n [p.retroactiveTP3, p.retroactiveTP4],\r\n [p.autobuyerDilation, p.autounlockEU2, p.autounlockDilation1, p.bypassECDilation, p.bypassTGReset],\r\n [p.autobuyerFasterID],\r\n [p.ttBuySingle, p.ttFree],\r\n [p.ttFree, p.ttBuyMax],\r\n [p.achievementGroup1, p.achievementGroup2],\r\n [p.achievementGroup2, p.achievementGroup3],\r\n [p.achievementGroup3, p.achievementGroup4],\r\n [p.achievementGroup4, p.achievementGroup5],\r\n //[p.startRealityUpgrades, p.startTeresaBest],\r\n ];\r\n const connections = {};\r\n for (const perk of Object.values(perks)) {\r\n const connectedPerks = [];\r\n const directConnections = groups.find(g => g[0] === perk);\r\n if (directConnections !== undefined) {\r\n connectedPerks.push(...directConnections.slice(1));\r\n }\r\n const indirectConnections = groups\r\n .filter(g => g.slice(1).some(groupPerk => groupPerk === perk))\r\n .map(g => g[0]);\r\n connectedPerks.push(...indirectConnections);\r\n connections[perk.id] = [...new Set(connectedPerks.map(connectedPerk => connectedPerk.id))];\r\n }\r\n return connections;\r\n}());\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('input',{staticClass:\"o-autobuyer-input\",class:_vm.validityClass,attrs:{\"type\":_vm.inputType},domProps:{\"value\":_vm.displayValue},on:{\"blur\":_vm.handleBlur,\"focus\":_vm.handleFocus,\"input\":_vm.handleInput}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerInput.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerInput.vue?vue&type=template&id=4d836647&scoped=true&\"\nimport script from \"./AutobuyerInput.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutobuyerInput.vue?vue&type=style&index=0&id=4d836647&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d836647\",\n null\n \n)\n\nexport default component.exports","import { AutobuyerInputFunctions } from \"@/components/tabs/autobuyers/AutobuyerInput\";\r\n\r\nexport const automatorTemplates = {\r\n /**\r\n * List of possible data types to dynamically generate in script templates, assumed to be only string or boolean\r\n * {\r\n * @property {String} name String to be used as a key for entries in this object\r\n * @property {String[]} boolDisplay Strings to be displayed for true/false states for boolean inputs. If\r\n * undefined, assumed to be a non-boolean input\r\n * @property {Function} isValidString A function used to test if an input string is formatted properly or not\r\n * @property {Function} map A function to be used to map the inputs to their actual values\r\n * which are stored in the param object. If undefined, assumed to be no mapping\r\n * }\r\n */\r\n paramTypes: [\r\n {\r\n name: \"tree\",\r\n isValidString: str => {\r\n const validImport = TimeStudyTree.isValidImportString(str);\r\n const preset = str.match(/^(NAME (.{1,4})|ID (\\d))$/u);\r\n const validPreset = preset ? (\r\n player.timestudy.presets.some(p => p.name === preset[2]) ||\r\n (Number(preset[3]) > 0 && Number(preset[3]) < 7)\r\n ) : false;\r\n return validImport || validPreset;\r\n },\r\n },\r\n {\r\n name: \"integer\",\r\n isValidString: str => AutobuyerInputFunctions.int.tryParse(str),\r\n map: x => Math.round(parseInt(x, 10)),\r\n },\r\n {\r\n name: \"decimal\",\r\n isValidString: str => AutobuyerInputFunctions.decimal.tryParse(str),\r\n map: x => AutobuyerInputFunctions.decimal.tryParse(x),\r\n },\r\n {\r\n name: \"boolean\",\r\n boolDisplay: [true, false],\r\n },\r\n {\r\n name: \"nowait\",\r\n boolDisplay: [\"Continue onward\", \"Keep buying Studies\"],\r\n },\r\n {\r\n name: \"mode\",\r\n boolDisplay: [\"X times highest\", \"Seconds since last\"],\r\n map: x => (x ? \"mult\" : \"time\"),\r\n },\r\n ],\r\n /**\r\n * List automator script templates, primarily used here for formatting the player UI prompts appropriately\r\n * so that all of the required fields show up in the proper input formats. Actual script formatting requires\r\n * additionally writing a method to be called in the constructor of the ScriptTemplate class\r\n * {\r\n * @property {String} name Name of script template, also used as a key within the constructor for\r\n * ScriptTemplate objects\r\n * @property {String} description Text description of what the template does when used in the automator\r\n * @property {Object[]} inputs Fields of the param object which need to be filled for the template to\r\n * have all the information it needs. Contains the name of the field, the type (drawn from paramTypes above),\r\n * and a prompt to be shown in the UI end\r\n * @property {Function} warnings Function which checks the current game state and potentially provides\r\n * warnings based on some possibly common cases which may lead to undesired behavior\r\n * }\r\n */\r\n scripts: [\r\n {\r\n name: \"Climb EP\",\r\n description: `This script performs repeated Eternities, attempting to re-purchase a Time Study Tree every\r\n Eternity. Autobuyer settings must be supplied for the Infinity and Eternity Autobuyers. The script will\r\n repeat until a final Eternity Point value is reached.`,\r\n inputs: [\r\n { name: \"treeStudies\", type: \"tree\", prompt: \"Or directly enter your time studies\" },\r\n { name: \"treeNowait\", type: \"nowait\", prompt: \"Missing Study behavior\" },\r\n { name: \"finalEP\", type: \"decimal\", prompt: \"Target EP\" },\r\n { name: \"autoInfMode\", type: \"mode\", prompt: \"Infinity Autobuyer Mode\" },\r\n { name: \"autoInfValue\", type: \"decimal\", prompt: \"Infinity Autobuyer Threshold\" },\r\n { name: \"autoEterMode\", type: \"mode\", prompt: \"Eternity Autobuyer Mode\" },\r\n { name: \"autoEterValue\", type: \"decimal\", prompt: \"Eternity Autobuyer Threshold\" },\r\n ],\r\n warnings: () => {\r\n const list = [];\r\n if (!RealityUpgrade(10).isBought) {\r\n list.push(`This script will be unable to properly set Autobuyer modes without at least ${formatInt(100)}\r\n Eternities. Consider getting Reality Upgrade \"${RealityUpgrade(10).name}\" before using this at the start\r\n of a Reality.`);\r\n }\r\n // Telemechanical Process (TD/5xEP autobuyers)\r\n if (!RealityUpgrade(13).isBought) {\r\n list.push(`This template may perform poorly without Reality Upgrade \"${RealityUpgrade(13).name}\"`);\r\n }\r\n if (!Perk.ttBuySingle.isBought) {\r\n list.push(`This template may perform poorly without Perk \"${Perk.ttBuySingle.label}\" unless you can generate\r\n Time Theorems without purchsing them`);\r\n }\r\n return list;\r\n },\r\n },\r\n {\r\n name: \"Grind Eternities\",\r\n description: `This script performs repeated fast Eternities after buying a specified Time Study Tree.\r\n Auto-Infinity will be set to \"Times Highest\" with a specified number of crunches and Auto-Eternity will\r\n trigger as soon as possible. The script will repeat until a final Eternity count is reached.`,\r\n inputs: [\r\n { name: \"treeStudies\", type: \"tree\", prompt: \"Or directly enter your time studies\" },\r\n { name: \"treeNowait\", type: \"nowait\", prompt: \"Missing Study behavior\" },\r\n { name: \"crunchesPerEternity\", type: \"integer\", prompt: \"Crunches per Eternity\" },\r\n { name: \"eternities\", type: \"decimal\", prompt: \"Target Eternity Count\" },\r\n ],\r\n warnings: () => {\r\n const list = [];\r\n // Eternal flow (eternity generation)\r\n if (RealityUpgrade(14).isBought) {\r\n list.push(`You probably do not need to use this due to Reality Upgrade \"${RealityUpgrade(14).name}\"`);\r\n }\r\n return list;\r\n },\r\n },\r\n {\r\n name: \"Grind Infinities\",\r\n description: `This script buys a specified Time Study Tree and then configures your Autobuyers for gaining\r\n Infinities. It will repeat until a final Infinity count is reached; the count can be for Banked Infinities,\r\n in which case it will get all Infinities before performing a single Eternity.`,\r\n inputs: [\r\n { name: \"treeStudies\", type: \"tree\", prompt: \"Or directly enter your time studies\" },\r\n { name: \"treeNowait\", type: \"nowait\", prompt: \"Missing Study behavior\" },\r\n { name: \"infinities\", type: \"decimal\", prompt: \"Target Infinity Count\" },\r\n { name: \"isBanked\", type: \"boolean\", prompt: \"Use Banked for Target?\" },\r\n ],\r\n warnings: () => {\r\n const list = [];\r\n if (!Perk.achievementGroup5.isBought) {\r\n list.push(`You will not start this Reality with Achievement \"${Achievement(131).name}\" - grinding\r\n Infinities may be less useful than expected since they cannot be Banked until later`);\r\n }\r\n // Boundless flow (infinity generation)\r\n if (RealityUpgrade(11).isBought) {\r\n list.push(`You probably do not need to use this due to Reality Upgrade \"${RealityUpgrade(11).name}\"`);\r\n }\r\n return list;\r\n },\r\n },\r\n {\r\n name: \"Complete Eternity Challenge\",\r\n description: `This script buys a specified Time Study Tree and then unlocks a specified Eternity Challenge.\r\n Then it will set your Infinity Autobuyer to your specified settings and enter the Eternity Challenge.\r\n Finally, it will wait until at least the desired number of completions before triggering an Eternity to\r\n complete the Challenge.`,\r\n inputs: [\r\n { name: \"treeStudies\", type: \"tree\", prompt: \"Or directly enter your time studies\" },\r\n { name: \"treeNowait\", type: \"nowait\", prompt: \"Missing Study behavior\" },\r\n { name: \"ec\", type: \"integer\", prompt: \"Eternity Challenge ID\" },\r\n { name: \"completions\", type: \"integer\", prompt: \"Target Completion Count\" },\r\n { name: \"autoInfMode\", type: \"mode\", prompt: \"Infinity Autobuyer Mode\" },\r\n { name: \"autoInfValue\", type: \"decimal\", prompt: \"Infinity Autobuyer Threshold\" },\r\n ],\r\n warnings: () => {\r\n const list = [];\r\n if (!Perk.studyECRequirement.isBought) {\r\n list.push(`Eternity Challenges may not be reliably unlockable due to secondary resource requirements, consider\r\n unlocking Perk \"${Perk.studyECRequirement.label}\" before using this template`);\r\n }\r\n if (!Perk.studyECBulk.isBought) {\r\n list.push(`Using this template without bulk completions of Eternity Challenges may lead to long scripts which\r\n are slower and difficult to modify. If you use this template, consider returning to simplify your scripts\r\n after unlocking Perk \"${Perk.studyECBulk.label}\"`);\r\n }\r\n return list;\r\n },\r\n },\r\n {\r\n name: \"Unlock Dilation\",\r\n description: `This script performs repeated Eternities, attempting to re-purchase a Time Study Tree every\r\n Eternity. Settings must be supplied for the Eternity Autobuyer; your Infinity Autobuyer will be\r\n turned off. The script loops until you have the total Time Theorem requirement to unlock Dilation, and then\r\n it will unlock Dilation once it does.`,\r\n inputs: [\r\n { name: \"treeStudies\", type: \"tree\", prompt: \"Or directly enter your time studies\" },\r\n { name: \"treeNowait\", type: \"nowait\", prompt: \"Missing Study behavior\" },\r\n { name: \"finalEP\", type: \"decimal\", prompt: \"Target EP\" },\r\n { name: \"autoEterMode\", type: \"mode\", prompt: \"Eternity Autobuyer Mode\" },\r\n { name: \"autoEterValue\", type: \"decimal\", prompt: \"Eternity Autobuyer Threshold\" },\r\n ],\r\n warnings: () => {\r\n const list = [];\r\n // Telemechanical Process (TD/5xEP autobuyers)\r\n if (!RealityUpgrade(13).isBought) {\r\n list.push(`This template may perform poorly without Reality Upgrade \"${RealityUpgrade(13).name}\"`);\r\n }\r\n if (!Perk.ttBuySingle.isBought) {\r\n list.push(`This template may perform poorly without Perk \"${Perk.ttBuySingle.label}\" unless you can generate\r\n Time Theorems without purchsing them`);\r\n }\r\n return list;\r\n },\r\n },\r\n ]\r\n};\r\n","import { automatorTemplates } from \"../script-templates\";\r\n\r\nexport const automator = {\r\n categoryNames: [\r\n \"Time Studies\",\r\n \"Event Triggers\",\r\n \"Alter Settings\",\r\n \"Information\",\r\n \"Script Flow\",\r\n ],\r\n commands: [\r\n {\r\n id: 0,\r\n isUnlocked: () => true,\r\n keyword: \"STUDIES RESPEC\",\r\n category: 0,\r\n syntax: `studies respec`,\r\n description: `This command turns on the respec option, which will respec your Time Studies on the next manual or\r\n automatic Eternity. Note that this does not actually perform an Eternity on its own; make sure your Autobuyer\r\n is on or you manually run the ETERNITY command (although ETERNITY has its own built-in respec option).`,\r\n examples: [\r\n `studies respec`,\r\n ]\r\n },\r\n {\r\n id: 1,\r\n isUnlocked: () => true,\r\n keyword: \"STUDIES LOAD\",\r\n category: 0,\r\n syntax: `studies [nowait] load id selector
\r\n studies [nowait] load name name`,\r\n description: `Loads a Time Study preset, as if you had clicked on the button in the Time Study tab.`,\r\n sections: [\r\n {\r\n name: \"INPUTS\",\r\n items: [\r\n {\r\n header: \"nowait\",\r\n description: `\r\n If present, the Automator will purchase as many studies as possible before continuing onward. By default\r\n (ie. without \"nowait\") this command will repeat this line indefinitely until all of the studies in the\r\n preset are bought; this may cause the Automator to get stuck indefinitely if you are not careful.\r\n `\r\n },\r\n {\r\n header: \"selector\",\r\n description: `\r\n Finds and loads the specified Time Study preset by its slot number. This is numbered one through six,\r\n ordered from left to right.`\r\n },\r\n {\r\n header: \"name\",\r\n description: \"Finds and loads the specified Time Study preset by its given name. This is case-sensitive.\"\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n `studies load id 2`,\r\n `studies load name ANTI`,\r\n `studies nowait load name dil`,\r\n ]\r\n },\r\n {\r\n id: 2,\r\n isUnlocked: () => true,\r\n keyword: \"STUDIES PURCHASE\",\r\n category: 0,\r\n syntax: `studies [nowait] purchase study_list`,\r\n description: \"Purchase Time Studies specified from a list of Time Studies.\",\r\n sections: [\r\n {\r\n name: \"INPUTS\",\r\n items: [\r\n {\r\n header: \"nowait\",\r\n description: `\r\n If present, the Automator will purchase as many studies as possible before continuing onward. By default\r\n (ie. without \"nowait\") this command will repeat this line indefinitely until all of the studies in the\r\n preset are bought; this may cause the Automator to get stuck indefinitely if you are not careful.\r\n `\r\n },\r\n {\r\n header: \"study_list\",\r\n description: `\r\n The exported Time Study tree format is supported here, which is simply a list of Time Study IDs\r\n separated by commas. This command also supports a more flexible formatting, additionally allowing\r\n ranges of studies (for example, 11-62) and the following aliases:
\r\n
antimatter, infinity, time, active, passive, idle, light, dark
\r\n A variable name may be used in place of the entire Time Study list as well (see the definition panel),\r\n although in that case the shorthand ranges and aliases are not allowed.`\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"studies nowait purchase 11,21,31\",\r\n \"studies purchase 11-62, antimatter, 111, idle\",\r\n \"studies nowait purchase ec6Studies\",\r\n ]\r\n },\r\n {\r\n id: 3,\r\n isUnlocked: () => true,\r\n keyword: \"PRESTIGE\",\r\n category: 1,\r\n syntax: `\r\n infinity [nowait]
\r\n eternity [nowait] [respec]
\r\n reality [nowait] [respec]`,\r\n description: `Triggers an Infinity, Eternity, or Reality reset if possible, otherwise the automator will wait at\r\n this command until it becomes possible. If you find that your script often gets stuck on this command, an\r\n Autobuyer may be triggering a prestige before the Automator reaches this line - consider using nowait or\r\n adjusting your Autobuyer settings using AUTO.`,\r\n sections: [\r\n {\r\n name: \"MODIFIERS\",\r\n items: [\r\n {\r\n header: \"nowait\",\r\n description: `\r\n If present, the Automator will move on to the next command instead of repeatedly trying on this\r\n command in situations where the prestige is not possible (eg. within an EC below the goal).\r\n `\r\n },\r\n {\r\n header: \"respec\",\r\n description: `\r\n For non-Infinity prestiges, also does the related respec action when triggering prestige.\r\n Eternity: Respec Time Studies and Eternity.
\r\n Reality: Unequip Glyphs and Reality.\r\n `\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"infinity\",\r\n \"eternity respec\",\r\n \"reality nowait\",\r\n ]\r\n },\r\n {\r\n id: 4,\r\n isUnlocked: () => true,\r\n keyword: \"UNLOCK\",\r\n category: 1,\r\n syntax: \"unlock [nowait] feature\",\r\n description: \"Unlocks the specified Eternity Challenge or Time Dilation.\",\r\n sections: [\r\n {\r\n name: \"MODIFIERS\",\r\n items: [\r\n {\r\n header: \"nowait\",\r\n description: `\r\n If present, the Automator will move on to the next command even if unlocking the feature fails. By\r\n default, the Automator will keep running this command until the unlock succeeds.\r\n `\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"unlock dilation\",\r\n \"unlock ec7\"\r\n ]\r\n },\r\n {\r\n id: 5,\r\n isUnlocked: () => true,\r\n keyword: \"START\",\r\n category: 1,\r\n syntax: `\r\n start ecN
\r\n start dilation`,\r\n description: `Start a specified Eternity Challenge or a Dilated Eternity. This command will also attempt\r\n to unlock the EC if not unlocked, but will not do the same for Dilation (use UNLOCK command to do that).\r\n If you are already in the specified EC or Dilated Eternity, running this command again will do nothing;\r\n otherwise, the Automator will keep attempting to start the Eternity until it succeeds.`,\r\n examples: [\r\n \"start ec12\",\r\n \"start dilation\"\r\n ]\r\n },\r\n {\r\n id: 6,\r\n isUnlocked: () => true,\r\n keyword: \"AUTO\",\r\n category: 2,\r\n syntax: `auto infinity [setting]
\r\n auto eternity [setting]
\r\n auto reality [setting]`,\r\n description: `Turns prestige Autobuyers on or off and allows you to change their settings. If the setting option\r\n is not present, this command will toggle the Autobuyer state, turning it off if it is on and turning it on if\r\n it is off. This command will not work if you try to modify an Autobuyer or setting you do not have.`,\r\n sections: [\r\n {\r\n name: \"SETTINGS\",\r\n items: [\r\n {\r\n header: \"on | off\",\r\n description: \"Turns specified Autobuyer on or off.\",\r\n },\r\n {\r\n header: \"number time units\",\r\n description: `Usable with Infinity and Eternity only.\r\n Turns the Autobuyer on and set it to trigger at the given interval.`\r\n },\r\n {\r\n header: \"number x highest\",\r\n description: `Usable with Infinity and Eternity only. Turns the Autobuyer on and sets it to\r\n \"X times highest\" mode.`\r\n },\r\n {\r\n header: \"number currency\",\r\n description: `Turns the Autobuyer on and sets it to trigger at a specific amount. The currency must\r\n match the autobuyer type (IP, EP, or RM). This will select \"Reality Machines\" mode for the Reality\r\n Autobuyer. Glyph Level mode cannot be changed or set via the Automator, only manually.`,\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"auto infinity on\",\r\n \"auto eternity off\",\r\n \"auto infinity 30s\",\r\n \"auto eternity 10 seconds\",\r\n \"auto eternity 1e100 x highest\"\r\n ]\r\n },\r\n {\r\n id: 7,\r\n isUnlocked: () => BlackHole(1).isUnlocked,\r\n keyword: \"BLACK HOLE\",\r\n category: 2,\r\n syntax: \"black hole state\",\r\n description: `Toggles the speedup effect from the Black Hole on or off. Turning the Black Hole on via the\r\n Automator does not bypass the gradual acceleration from off to max speed which occurs before they are\r\n permanent.`,\r\n examples: [\r\n \"black hole on\",\r\n \"black hole off\",\r\n ]\r\n },\r\n {\r\n id: 8,\r\n isUnlocked: () => Enslaved.isUnlocked,\r\n keyword: \"STORE GAME TIME\",\r\n category: 2,\r\n syntax: \"store game time action\",\r\n description: `Changes whether or not the Black Hole is storing time. Also allows usage of stored time.`,\r\n sections: [\r\n {\r\n name: \"ACTIONS\",\r\n items: [\r\n {\r\n header: \"on | off\",\r\n description: `\r\n Turns storing game time on or off.\r\n `\r\n },\r\n {\r\n header: \"use\",\r\n description: `\r\n Uses all stored game time. Does not alter the on/off state of time storage.\r\n `\r\n }\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"store game time on\",\r\n \"store game time off\",\r\n \"store game time use\",\r\n ]\r\n },\r\n {\r\n id: 9,\r\n isUnlocked: () => true,\r\n keyword: \"NOTIFY\",\r\n category: 3,\r\n syntax: \"notify \\\"text\\\"\",\r\n description: `Takes the specified text and posts it in the top-right corner as\r\n a text notification, in the same spot and style as other notifications such as auto-save\r\n and achievement/upgrade unlocks. Can be useful for seeing automator status while\r\n on tabs other than the Automator tab.`,\r\n examples: [\r\n \"notify \\\"Dilation reached\\\"\",\r\n \"notify \\\"ECs completed\\\"\"\r\n ]\r\n },\r\n {\r\n id: 10,\r\n isUnlocked: () => true,\r\n keyword: \"Adding Comments\",\r\n category: 3,\r\n syntax: \"# text
// text\",\r\n description: `Allows you to leave a note to yourself within your script. This may be\r\n useful for organizing or keeping track of which parts of your script do various things,\r\n in a way that appears more readable than just the commands. These commands mainly serve as a tool to\r\n help you keep the steps of your scripts easier to follow if desired.`,\r\n sections: [\r\n {\r\n name: \"NOTES\",\r\n items: [\r\n {\r\n header: \"Inline comments\",\r\n description: `\r\n The Automator does not support comments which are placed after an already functional\r\n line of code, on the same line. As an example, the single line \"studies load name TDI // Load push\"\r\n will be an invalid command. In this case, you will need to move the comment to a separate line\r\n in the automator.\r\n `\r\n },\r\n {\r\n header: \"Execution speed\",\r\n description: `\r\n Having comments will not slow down your script, as they are completely skipped during\r\n execution and do not count as a command for the purposes of running. For example, even if you have\r\n a really long explanation in the form of comments on lines 20-40, the Automator will still\r\n immediately skip from line 19 to 41 during execution.\r\n `\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"# get 1e20 before starting ec1\",\r\n \"// this loop alternates dilation and pushing\"\r\n ]\r\n },\r\n {\r\n id: 11,\r\n isUnlocked: () => true,\r\n keyword: \"WAIT\",\r\n category: 4,\r\n syntax: \"wait condition\",\r\n description: `Forces Automator to wait for some condition or event. To wait for a certain duration of time,\r\n use the PAUSE command instead.`,\r\n sections: [\r\n {\r\n name: \"POSSIBLE CONDITIONS\",\r\n items: [\r\n {\r\n header: \"comparison\",\r\n description: `\r\n Wait until the comparison statement is true. Check the entry for \"Formatting Comparisons\" for details\r\n on how to properly input this option.\r\n `\r\n },\r\n {\r\n header: \"prestige\",\r\n description: `\r\n Wait until the specified prestige (Infinity, Eternity, or Reality) has been triggered by its respective\r\n Autobuyer. This must happen after this command is reached; if the Autobuyer triggers\r\n before the command is reached, your script may get stuck.\r\n `\r\n },\r\n {\r\n header: \"black hole (state)\",\r\n description: `\r\n Wait until the Black Hole(s) are in the specified state. Valid inputs for state are\r\n \"off\", \"bh1\", and \"bh2\", corresponding to no active Black Hole(s), at least the first Black Hole active,\r\n and both Black Holes active.\r\n `\r\n }\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"wait am >= 1e308\",\r\n \"wait pending completions >= 5\",\r\n \"wait ec9 completions >= 4\",\r\n \"wait infinity\",\r\n \"wait black hole bh1\",\r\n ]\r\n },\r\n {\r\n id: 12,\r\n isUnlocked: () => true,\r\n keyword: \"PAUSE\",\r\n category: 4,\r\n syntax: \"pause interval\",\r\n description: `Tells the automator to stop moving forward and executing commands for a certain amount of time.\r\n Note that if the pause duration is shorter than the automator's execution speed, the automator will wait until\r\n the next execution tick before moving on.`,\r\n examples: [\r\n \"pause 10s\",\r\n \"pause 1 minute\",\r\n \"pause 34 seconds\"\r\n ],\r\n sections: [\r\n {\r\n name: \"INTERVAL FORMATTING\",\r\n items: [\r\n {\r\n header: \"Specified Interval\",\r\n description: `This command accepts time units of milliseconds (\"ms\"), seconds (\"s\", \"sec\", or \"seconds\"),\r\n minutes (\"m\", \"min\", or \"minutes\"), and hours (\"h\" or \"hours\"). You cannot provide just a number and\r\n nothing else; a unit of time must be specified.`,\r\n },\r\n {\r\n header: \"Defined Constant\",\r\n description: `A defined constant may be used instead, see the definition panel. The defined value will\r\n be assumed to be in units of seconds.`\r\n },\r\n ]\r\n },\r\n {\r\n name: \"OTHER\",\r\n items: [\r\n {\r\n header: \"Offline Side-effects\",\r\n description: `This command may behave undesirably when it runs during offline progress due to limited\r\n tick count. A 1-second pause that is usually 20-30 ticks might be only 1 game tick when processing\r\n hours of offline progress, which might not be enough for the resources needed for the rest of the\r\n script.`,\r\n },\r\n {\r\n header: \"Alternatives\",\r\n description: `Using another command like 'WAIT' will allow you to set it for a certain resource amount,\r\n in order to ensure that the game has the proper state before moving onward.`\r\n },\r\n {\r\n header: \"Manual Skip\",\r\n description: `You can manually force the Automator to continue execution past a PAUSE command without\r\n waiting the entire specified time by stepping forward one line (to put it on the next one) and then\r\n resuming execution. If you find yourself doing this regularly, consider modifying your script.`\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: 13,\r\n isUnlocked: () => true,\r\n keyword: \"IF\",\r\n category: 4,\r\n syntax: `if condition {
\r\n
commands
\r\n }`,\r\n description: `Defines an inner block of block of the automator script which will only be executed if the specified\r\n comparison is true when this line is reached. If the comparison is false, the automator will instead skip to the\r\n first line after the block and continue execution from there.`,\r\n examples: [\r\n \"if ec10 completions < 5\",\r\n \"if ep > 1e6000\"\r\n ]\r\n },\r\n {\r\n id: 14,\r\n isUnlocked: () => true,\r\n keyword: \"UNTIL\",\r\n category: 4,\r\n syntax: `until comparison {
\r\n
commands
\r\n }
until prestige_event {
\r\n
commands
\r\n }`,\r\n description: `Defines an inner block of the script where commands are repeated; the comparison is checked at the\r\n start and every time the loop repeats. If the condition is true when the UNTIL statement is first reached, the\r\n inner block of commands will be skipped entirely.\r\n

\r\n If an prestige event (ie. Infinity, Eternity, or Reality) is specified instead of a condition, then the block\r\n will always be entered and the commands within the block will repeat until the event occurs for the first time\r\n after entering the block. Note that the Automator will finish the rest of the loop and then exit after\r\n the prestige event occurs - it will not immediately exit the loop in the middle.`,\r\n examples: [\r\n \"until ep > 1e500\",\r\n \"until reality\",\r\n ]\r\n },\r\n {\r\n id: 15,\r\n isUnlocked: () => true,\r\n keyword: \"WHILE\",\r\n category: 4,\r\n syntax: `while comparison {
\r\n
commands
\r\n }`,\r\n description: `Defines an inner block of the script where commands are repeated; the comparison is checked at the\r\n start and every time the loop repeats. If the condition is false when the WHILE statement is first reached, the\r\n inner block of commands will be skipped entirely.`,\r\n examples: [\r\n `while ep < 1e500`,\r\n `while myThreshold > am`,\r\n ]\r\n },\r\n {\r\n id: 16,\r\n isUnlocked: () => true,\r\n keyword: \"STOP\",\r\n category: 4,\r\n syntax: `stop`,\r\n description: `When the Automator runs this line, it will stop execution as if you clicked the\r\n button on the control panel in the top-left of the Automator. This\r\n does not need to be placed at the end of every script in order to stop them, as turning off the\r\n option on the left panel will do this automatically.\r\n This command may be useful when used inside of an IF command, in order to stop execution\r\n only under certain conditions.`,\r\n examples: [\r\n `stop`,\r\n ]\r\n },\r\n {\r\n id: 17,\r\n isUnlocked: () => true,\r\n keyword: \"Currency List\",\r\n category: 4,\r\n syntax: \"You can use these in any IF, WHILE, UNTIL, or WAIT command\",\r\n description: () => {\r\n const filterText = EffarigUnlock.glyphFilter.isUnlocked\r\n ? `filter score - Glyph filter score of the Glyph which your filter will select this Reality
`\r\n : \"\";\r\n const stText = V.spaceTheorems > 0\r\n ? `space theorems - Current unspent Space Theorem amount
\r\n total space theorems - TOTAL Space Theorems, including ones spent on current Studies
`\r\n : \"\";\r\n return `This is a list of \"currencies\" or numbers that you can use within the Automator.
\r\n Note that when used, most currencies will need to be in scientific notation.
\r\n am - Current Antimatter amount
\r\n ip - Current Infinity Point amount
\r\n ep - Current Eternity Point amount
\r\n rm - Current Reality Machine amount
\r\n infinities - Current Infinity amount
\r\n banked infinities - Current Banked Infinity amount
\r\n eternities - Current Eternity amount
\r\n realities - Current Reality amount
\r\n pending ip - IP gained on Infinity (0 if not available)
\r\n pending ep - EP gained on Eternity (0 if not available)
\r\n pending tp - TP gained on exiting Dilation
\r\n pending rm - RM gained on Reality (0 if not available)
\r\n pending glyph level - Glyph Level gained on Reality (0 if not available)
\r\n dt - Current Dilated Time amount
\r\n tp - Current Tachyon Particle amount
\r\n rg - Current Replicanti Galaxy amount (does not use scientific)
\r\n rep - Current Replicanti amount
\r\n tt - Current Time Theorem amount
\r\n total tt - TOTAL Time Theorems, includes all forms of generated TT and any spent on Studies
\r\n total completions - Total completions of all Eternity Challenges
\r\n pending completions - Total completions of current EC at Eternity
\r\n ecX completions - Amount of EC completions for a certain EC (eg. \"ec6 completions\")
\r\n ${filterText}\r\n ${stText}\r\n `;\r\n }\r\n },\r\n {\r\n id: 18,\r\n isUnlocked: () => true,\r\n keyword: \"Formatting Comparisons\",\r\n category: 4,\r\n syntax: \"resource1 condition resource2\",\r\n description: `\r\n Comparisons are used within certain commands, which allow you to control the behavior of the automator based\r\n on the game's current state. They have a standard format with two value inputs and a comparison operator, but\r\n the value inputs can be anything as long as it is formatted correctly overall.`,\r\n sections: [\r\n {\r\n name: \"CONDITIONS\",\r\n items: [\r\n {\r\n header: \"resource\",\r\n description: `\r\n This can be any Automator Currency, a defined constant, or a number which must be formatted in\r\n scientific notation (eg. 1000, 1e100, 1.8e308). Unlike more general programming languages, this must\r\n be a single value (ie. math expressions such as \"ip + pending ip\" are not allowed).\r\n `\r\n },\r\n {\r\n header: \"condition\",\r\n description: `\r\n This must be an inequality operator (<, <=, >, >=), which takes on its typical mathematical meaning.\r\n Equality operators (==, !=) are not allowed, as the nature of the game means that numbers will often\r\n never be exactly equal and thus checking based on direct equality may lead to unexpected script\r\n behavior.\r\n `\r\n },\r\n ]\r\n }\r\n ],\r\n examples: [\r\n \"ep < 1e20\",\r\n \"total tt > 14000\",\r\n ]\r\n },\r\n {\r\n id: 19,\r\n isUnlocked: () => true,\r\n keyword: \"Commands with inner blocks\",\r\n category: 4,\r\n syntax: `header_command {
\r\n
inner_commands
\r\n }`,\r\n description: `Some commands are associated with an \"inner block\" of commands. This inner block can contain still\r\n contain any other valid command, but may or may not actually get executed based on what the state of the game is\r\n when header_command is executed. This allows you to repeat some commands over and over (eg. Time Study\r\n purchasing), or to skip them entirely (eg. not entering an EC if it already has full completions). These blocks\r\n can be nested if desired, with inner blocks being placed within one another.\r\n

\r\n In the text editor mode: Specify the inner block with curly braces, with the opening brace { on the same line as\r\n the comparison and the closing brace } on its own line after the last line you want inside the block. Inner\r\n commands do not need to be indented, although it may be visually helpful to do so.\r\n

\r\n In the block editor mode: These commands come with an empty dotted rectangle which indicates which commands are\r\n within the inner block. Subsequent blocks can then be dragged inside the dotted rectangle.\r\n `,\r\n examples: [\r\n `if ec10 completions < 5 {
\r\n
\r\n unlock ec10
\r\n start ec10
\r\n }`,\r\n `until ep > 1e8 {
\r\n
\r\n studies nowait purchase 11-62
\r\n pause 10s
\r\n eternity respec
\r\n }`\r\n ]\r\n },\r\n ],\r\n otherAutomatorPoints: [\r\n {\r\n name: \"Reality Count\",\r\n automatorPoints: () => 2 * Math.clampMax(Currency.realities.value, 50),\r\n shortDescription: () => `+${formatInt(2)} per Reality, up to ${formatInt(50)} Realities`,\r\n symbol: \"Ϟ\",\r\n },\r\n {\r\n name: \"Black Hole\",\r\n automatorPoints: () => (BlackHole(1).isUnlocked ? 10 : 0),\r\n shortDescription: () => `Unlocking gives ${formatInt(10)} AP`,\r\n symbol: \"\",\r\n },\r\n ],\r\n templates: automatorTemplates\r\n};\r\n","// Color prop is a combination of a B/W background and a border hex code\r\nexport const glyphCosmeticSets = {\r\n cards: {\r\n id: \"cards\",\r\n name: \"Playing Card Suits\",\r\n symbol: [\"♠\", \"♥\", \"♦\", \"♣\", \"♤\", \"♧\", \"♡\", \"♢\"],\r\n color: [\"W#000000\", \"B#FF2222\"],\r\n },\r\n lower: {\r\n id: \"lower\",\r\n name: \"Lowercase Glyphs\",\r\n symbol: [\"ω\", \"ξ\", \"δ\", \"ψ\"],\r\n },\r\n sus: {\r\n id: \"sus\",\r\n name: \"Suspicious\",\r\n symbol: [\"ඔ\", \"ඕ\", \"ඞ\", \"ඩ\"],\r\n color: [\"B#FCA40A\"]\r\n },\r\n currency: {\r\n id: \"currency\",\r\n name: \"Modern Currency\",\r\n symbol: [\"$\", \"₽\", \"¥\", \"€\", \"¢\", \"£\", \"₩\"],\r\n preventBlur: true,\r\n color: [\"W#00DD00\"],\r\n },\r\n oldCurrency: {\r\n id: \"oldCurrency\",\r\n name: \"Older Currency\",\r\n symbol: [\"₷\", \"₰\", \"₳\", \"₯\", \"₻\"],\r\n preventBlur: true,\r\n color: [\"B#00DD00\"],\r\n },\r\n pipe: {\r\n id: \"pipe\",\r\n name: \"Single Pipes\",\r\n symbol: [\"┌\", \"┐\", \"└\", \"┘\", \"─\", \"│\"],\r\n color: [\"B#33FF33\"],\r\n },\r\n pipe2: {\r\n id: \"pipe2\",\r\n name: \"Double Pipes\",\r\n symbol: [\"╔\", \"╗\", \"╚\", \"╝\", \"═\", \"║\"],\r\n color: [\"W#33FF33\"],\r\n },\r\n trigram: {\r\n id: \"trigram\",\r\n name: \"Trigrams\",\r\n symbol: [\"☰\", \"☱\", \"☲\", \"☳\", \"☴\", \"☵\", \"☶\", \"☷\"],\r\n preventBlur: true,\r\n color: [\"B#FFFFFF\"],\r\n },\r\n arrow: {\r\n id: \"arrow\",\r\n name: \"Single Arrows\",\r\n symbol: [\"←\", \"↓\", \"↑\", \"→\", \"↖\", \"↗\", \"↘\", \"↙\"],\r\n color: [\"W#CC0000\"],\r\n },\r\n arrow2: {\r\n id: \"arrow2\",\r\n name: \"Double Arrows\",\r\n symbol: [\"⇄\", \"⇅\", \"⇔\", \"⇕\"],\r\n color: [\"W#0000CC\"],\r\n },\r\n arrow3: {\r\n id: \"arrow3\",\r\n name: \"Special Arrows\",\r\n symbol: [\"↺\", \"↯\", \"↬\", \"⇱\", \"⇲\", \"⇮\", \"↭\"],\r\n preventBlur: true,\r\n color: [\"W#CCCC00\"],\r\n },\r\n integral: {\r\n id: \"integral\",\r\n name: \"Integration\",\r\n symbol: [\"∬\", \"∭\", \"∮\", \"∯\", \"∰\", \"∱\", \"∲\", \"∳\"],\r\n preventBlur: true,\r\n color: [\"B#123456\"]\r\n },\r\n numbers: {\r\n id: \"numbers\",\r\n name: \"Circled Numbers\",\r\n symbol: [\"①\", \"②\", \"③\", \"④\", \"⑤\", \"⑥\", \"⑦\", \"⑧\"],\r\n preventBlur: true,\r\n color: [\"B#607D8B\"]\r\n },\r\n blocks: {\r\n id: \"blocks\",\r\n name: \"2x2 Blocks\",\r\n symbol: [\"▘\", \"▚\", \"▞\", \"▙\", \"▛\", \"▜\", \"▟\"],\r\n },\r\n shapes: {\r\n id: \"shapes\",\r\n name: \"Miscellaneous Shapes\",\r\n symbol: [\"▰\", \"▲\", \"◆\", \"◎\", \"◍\"],\r\n preventBlur: true,\r\n },\r\n chess: {\r\n id: \"chess\",\r\n name: \"Chess Pieces\",\r\n symbol: [\"♟\", \"♞\", \"♝\", \"♜\", \"♛\", \"♚\"],\r\n preventBlur: true,\r\n color: [\"B#AAAAAA\"],\r\n },\r\n planet: {\r\n id: \"planet\",\r\n name: \"Planetary Symbols\",\r\n symbol: [\"☿\", \"♀\", \"♁\", \"♂\", \"♃\", \"♄\", \"♆\", \"♇\"],\r\n preventBlur: true,\r\n color: [\"B#964B00\"],\r\n },\r\n musical: {\r\n id: \"musical\",\r\n name: \"Musical Symbols\",\r\n symbol: [\"♩\", \"♪\", \"♬\", \"♭\", \"♮\", \"♯\"],\r\n preventBlur: true,\r\n color: [\"W#E621E6\"]\r\n },\r\n recycle: {\r\n id: \"recycle\",\r\n name: \"Recycling Symbols\",\r\n symbol: [\"♻\", \"♳\", \"♴\", \"♵\", \"♶\", \"♷\", \"♸\", \"♹\"],\r\n preventBlur: true,\r\n },\r\n dice: {\r\n id: \"dice\",\r\n name: \"Dice Faces\",\r\n symbol: [\"⚀\", \"⚁\", \"⚂\", \"⚃\", \"⚄\", \"⚅\"],\r\n preventBlur: true,\r\n },\r\n hazard: {\r\n id: \"hazard\",\r\n name: \"Hazard Symbols\",\r\n symbol: [\"☠\", \"☢\", \"☣\", \"⚠\"],\r\n preventBlur: true,\r\n color: [\"W#FCA40A\"]\r\n },\r\n celestial: {\r\n id: \"celestial\",\r\n name: \"Celestial Icons\",\r\n symbol: [\"\\uF0C1\", \"⌬\", \"ᛝ\", \"♅\"],\r\n color: [\"B#00BCD4\"],\r\n },\r\n alchemy: {\r\n id: \"alchemy\",\r\n name: \"Alchemical Symbols\",\r\n symbol: [\"🜁\", \"🜂\", \"🜃\", \"🜄\", \"🜔\", \"🜍\", \"🜞\", \"🜚\"],\r\n color: [\"B#FFD700\"],\r\n },\r\n blob: {\r\n id: \"blob\",\r\n name: \"Blobs\",\r\n symbol: [\"\\uE011\", \"\\uE012\", \"\\uE013\", \"\\uE014\", \"\\uE016\", \"\\uE01A\", \"\\uE01C\"],\r\n preventBlur: true,\r\n color: [\"B#E4B51A\"],\r\n },\r\n blob2: {\r\n id: \"blob2\",\r\n name: \"More Blobs\",\r\n symbol: [\"\\uE01D\", \"\\uE01E\", \"\\uE021\", \"\\uE024\", \"\\uE025\", \"\\uE026\", \"\\uE027\"],\r\n preventBlur: true,\r\n },\r\n star: {\r\n id: \"star\",\r\n name: \"Geometric Stars\",\r\n symbol: [\"★\", \"☆\", \"✪\", \"✯\", \"✭\", \"✫\", \"🜞\"],\r\n },\r\n star2: {\r\n id: \"star2\",\r\n name: \"Realistic Stars\",\r\n symbol: [\"✶\", \"✦\", \"✧\", \"✺\", \"✹\", \"✷\"],\r\n color: [\"W#D4FFFF\", \"W#FDFFCC\"],\r\n },\r\n gem: {\r\n id: \"gem\",\r\n name: \"Gemstones\",\r\n symbol: [\"💎\"],\r\n color: [\"B#035E3B\", \"B#943B47\", \"B#032C54\"],\r\n },\r\n heiroglyph: {\r\n id: \"heiroglyph\",\r\n name: \"Common Hieroglyphs\",\r\n symbol: [\"𓂀\", \"𓀶\", \"𓅊\", \"𓇌\", \"𓊝\", \"☥\"],\r\n preventBlur: true,\r\n },\r\n paperclip: {\r\n id: \"paperclip\",\r\n name: \"Useless Paperclips\",\r\n symbol: [\"𓄲\", \"𓄳\", \"𓄴\", \"𓄵\", \"𓄶\", \"𓄷\", \"𓄸\"],\r\n preventBlur: true,\r\n color: [\"B#222222\"],\r\n },\r\n snake: {\r\n id: \"snake\",\r\n name: \"Various Snakes\",\r\n symbol: [\"𓆓\", \"𓆔\", \"𓆕\", \"𓆖\", \"𓆗\", \"𓆘\"],\r\n preventBlur: true,\r\n },\r\n egyptNumber: {\r\n id: \"egyptNumber\",\r\n name: \"Egyptian Numbers\",\r\n symbol: [\"𓆄\", \"𓅔\", \"𓆾\", \"𓂰\", \"𓍦\", \"𓎋\", \"𓐀\", \"𓃐\"],\r\n preventBlur: true,\r\n color: [\"W#123456\"]\r\n },\r\n egyptWeather: {\r\n id: \"egyptWeather\",\r\n name: \"Egyptian Weathervanes\",\r\n symbol: [\"𓈹\", \"𓈧\", \"𓈷\", \"𓉈\", \"𓈩\", \"𓈻\", \"𓈽\"],\r\n preventBlur: true,\r\n color: [\"W#607D8B\"]\r\n },\r\n limbs: {\r\n id: \"limbs\",\r\n name: \"Awkward Limbs\",\r\n symbol: [\"𓈝\", \"𓄒\", \"𓃂\", \"𓃁\", \"𓂩\", \"𓂙\", \"𓂓\", \"𓂼\"],\r\n preventBlur: true,\r\n color: [\"B#E621E6\"]\r\n },\r\n animal: {\r\n id: \"animal\",\r\n name: \"Moses' Ark\",\r\n symbol: [\"𓆏\", \"𓆉\", \"𓅬\", \"𓅃\", \"𓃲\", \"𓆣\", \"𓆊\", \"𓃰\"],\r\n preventBlur: true,\r\n color: [\"W#0000AA\"],\r\n },\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const GlyphCombiner = Object.freeze({\r\n /**\r\n * @param {number[]} x\r\n * @returns {number}\r\n */\r\n add: x => x.reduce(Number.sumReducer, 0),\r\n /**\r\n * @param {number[]} x\r\n * @returns {number}\r\n */\r\n multiply: x => x.reduce(Number.prodReducer, 1),\r\n /**\r\n * For exponents, the base value is 1, so when we add two exponents a and b we want to get a + b - 1,\r\n * so that if a and b are both close to 1 so is their sum. In general, when we add a list x of exponents,\r\n * we have to add 1 - x.length to the actual sum, so that if all the exponents are close to 1 the result\r\n * is also close to 1 rather than close to x.length.\r\n * @param {number[]} x\r\n * @returns {number}\r\n */\r\n addExponents: x => x.reduce(Number.sumReducer, 1 - x.length),\r\n /**\r\n * @param {Decimal[]} x\r\n * @returns {Decimal}\r\n */\r\n multiplyDecimal: x => x.reduce(Decimal.prodReducer, DC.D1)\r\n});\r\n\r\nexport const glyphEffects = {\r\n timepow: {\r\n id: \"timepow\",\r\n bitmaskIndex: 0,\r\n isGenerated: true,\r\n glyphTypes: [\"time\"],\r\n singleDesc: \"Time Dimension power +{value}\",\r\n totalDesc: \"Time Dimension multipliers ^{value}\",\r\n shortDesc: \"TD power +{value}\",\r\n effect: (level, strength) => 1.01 + Math.pow(level, 0.32) * Math.pow(strength, 0.45) / 75,\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: GlyphCombiner.addExponents,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n timespeed: {\r\n id: \"timespeed\",\r\n bitmaskIndex: 1,\r\n isGenerated: true,\r\n glyphTypes: [\"time\"],\r\n singleDesc: \"Multiply game speed by {value}\",\r\n totalDesc: \"Game runs ×{value} faster\",\r\n genericDesc: \"Game speed multiplier\",\r\n shortDesc: \"Game speed ×{value}\",\r\n effect: (level, strength) => (GlyphAlteration.isEmpowered(\"time\")\r\n ? 1 + Math.pow(level, 0.35)\r\n : 1 + Math.pow(level, 0.3) * Math.pow(strength, 0.65) / 20),\r\n formatEffect: x => format(x, 3, 3),\r\n combine: GlyphCombiner.multiply,\r\n alteredColor: () => GlyphAlteration.getEmpowermentColor(\"time\"),\r\n alterationType: ALTERATION_TYPE.EMPOWER,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n timeetermult: {\r\n id: \"timeetermult\",\r\n bitmaskIndex: 2,\r\n isGenerated: true,\r\n glyphTypes: [\"time\"],\r\n singleDesc: \"Multiply Eternity gain by {value}\",\r\n totalDesc: \"Eternity gain ×{value}\",\r\n genericDesc: \"Eternity gain multiplier\",\r\n shortDesc: \"Eternities ×{value}\",\r\n effect: (level, strength) => Math.pow((strength + 3) * level, 0.9) *\r\n Math.pow(3, GlyphAlteration.sacrificeBoost(\"time\")),\r\n formatEffect: x => format(x, 2, 2),\r\n combine: GlyphCombiner.multiply,\r\n alteredColor: () => GlyphAlteration.getBoostColor(\"time\"),\r\n alterationType: ALTERATION_TYPE.BOOST,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n timeEP: {\r\n id: \"timeEP\",\r\n bitmaskIndex: 3,\r\n isGenerated: true,\r\n glyphTypes: [\"time\"],\r\n singleDesc: () => (GlyphAlteration.isAdded(\"time\")\r\n ? \"Eternity Point gain \\n×{value} [and ^]{value2}\"\r\n : \"Multiply Eternity Point gain by {value}\"),\r\n totalDesc: () => (GlyphAlteration.isAdded(\"time\")\r\n ? \"Eternity Point gain ×{value} and ^{value2}\"\r\n : \"Eternity Point gain ×{value}\"),\r\n genericDesc: () => (GlyphAlteration.isAdded(\"time\")\r\n ? \"Eternity Point gain multiplier and power\"\r\n : \"Eternity Point gain multiplier\"),\r\n shortDesc: () => (GlyphAlteration.isAdded(\"time\")\r\n ? \"EP ×{value} and ^{value2}\"\r\n : \"EP ×{value}\"),\r\n effect: (level, strength) => Math.pow(level * strength, 3) * 100,\r\n formatEffect: x => format(x, 2, 3),\r\n combine: GlyphCombiner.multiply,\r\n conversion: x => 1 + Math.log10(x) / 1000,\r\n formatSecondaryEffect: x => format(x, 4, 4),\r\n alteredColor: () => GlyphAlteration.getAdditionColor(\"time\"),\r\n alterationType: ALTERATION_TYPE.ADDITION,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n dilationDT: {\r\n id: \"dilationDT\",\r\n bitmaskIndex: 4,\r\n isGenerated: true,\r\n glyphTypes: [\"dilation\"],\r\n singleDesc: \"Multiply Dilated Time gain by {value}\",\r\n totalDesc: \"Dilated Time gain ×{value}\",\r\n shortDesc: \"DT ×{value}\",\r\n effect: (level, strength) => {\r\n let a = DC.D1;\r\n if (GlyphAlteration.isEmpowered(\"dilation\")) a = DC.D1_005.pow(level).times(15);\r\n else{ a = Decimal.pow(level * strength, 1.5).times(2);}\r\n return a;\r\n },\r\n formatEffect: x => format(x, 2, 1),\r\n combine: effects =>{\r\n let a = effects.reduce(Decimal.prodReducer, DC.D1);\r\n return a.gte(DC.E500) ? a.div(DC.E500).pow(0.5).times(DC.E500) : a;\r\n },\r\n alteredColor: () => GlyphAlteration.getEmpowermentColor(\"dilation\"),\r\n alterationType: ALTERATION_TYPE.EMPOWER,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n dilationgalaxyThreshold: {\r\n id: \"dilationgalaxyThreshold\",\r\n bitmaskIndex: 5,\r\n isGenerated: true,\r\n glyphTypes: [\"dilation\"],\r\n singleDesc: \"Tachyon Galaxy threshold multiplier ×{value}\",\r\n genericDesc: \"Tachyon Galaxy cost multiplier\",\r\n shortDesc: \"TG threshold ×{value}\",\r\n effect: (level, strength) => {\r\n let a = 1 - Math.pow(level, 0.17) * Math.pow(strength, 0.35) / 100 - GlyphAlteration.sacrificeBoost(\"dilation\") / 50;\r\n return a;\r\n },\r\n formatEffect: x => format(x, 3, 3),\r\n alteredColor: () => GlyphAlteration.getBoostColor(\"dilation\"),\r\n alterationType: ALTERATION_TYPE.BOOST,\r\n combine: effects => {\r\n const prod = effects.reduce(Number.prodReducer, 1);\r\n return prod < 0.4 ? (Math.pow(0.4 - prod, 1.7) < 0.3) ? { value: 0.3 - Math.pow(0.4 - prod, 3), capped: true } : { value: 0.4 - Math.pow(0.4 - prod, 1.7), capped: true } : { value: prod, capped: false };\r\n },\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n dilationTTgen: {\r\n // TTgen slowly generates TT, value amount is per second, displayed per hour\r\n id: \"dilationTTgen\",\r\n bitmaskIndex: 6,\r\n isGenerated: true,\r\n glyphTypes: [\"dilation\"],\r\n singleDesc: () => (GlyphAlteration.isAdded(\"dilation\")\r\n ? \"Generates {value} Time Theorems/hour \\n[and multiplies Time Theorem \\ngeneration by] {value2}\"\r\n : \"Generates {value} Time Theorems per hour\"),\r\n totalDesc: () => (GlyphAlteration.isAdded(\"dilation\")\r\n ? \"Generating {value} Time Theorems/hour and Time Theorem generation ×{value2}\"\r\n : \"Generating {value} Time Theorems per hour\"),\r\n genericDesc: () => (GlyphAlteration.isAdded(\"dilation\")\r\n ? \"Time Theorem generation and multiplier\"\r\n : \"Time Theorem generation\"),\r\n shortDesc: () => (GlyphAlteration.isAdded(\"dilation\")\r\n ? \"{value} TT/hr and TTgen ×{value2}\"\r\n : \"{value} TT/hr\"),\r\n effect: (level, strength) => Math.pow(level * strength, 0.5) / 10000,\r\n /** @type {function(number): string} */\r\n formatEffect: x => format(3600 * x, 2, 2),\r\n combine: GlyphCombiner.add,\r\n conversion: x => Math.clampMin(Math.pow(10000 * x, 1.6), 1),\r\n formatSecondaryEffect: x => format(x, 2, 2),\r\n alteredColor: () => GlyphAlteration.getAdditionColor(\"dilation\"),\r\n alterationType: ALTERATION_TYPE.ADDITION,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n dilationpow: {\r\n id: \"dilationpow\",\r\n bitmaskIndex: 7,\r\n isGenerated: true,\r\n glyphTypes: [\"dilation\"],\r\n singleDesc: \"Antimatter Dimension power +{value} while Dilated\",\r\n totalDesc: \"Antimatter Dimension multipliers ^{value} while Dilated\",\r\n genericDesc: \"Antimatter Dimensions ^x while Dilated\",\r\n shortDesc: \"Dilated AD power +{value}\",\r\n effect: (level, strength) => 1.1 + Math.pow(level, 0.7) * Math.pow(strength, 0.7) / 25,\r\n formatEffect: x => format(x, 2, 2),\r\n formatSingleEffect: x => format(x - 1, 2, 2),\r\n combine: GlyphCombiner.addExponents,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n replicationspeed: {\r\n id: \"replicationspeed\",\r\n bitmaskIndex: 8,\r\n isGenerated: true,\r\n glyphTypes: [\"replication\"],\r\n singleDesc: \"Multiply Replication speed by {value}\",\r\n totalDesc: \"Replication speed ×{value}\",\r\n genericDesc: \"Replication speed multiplier\",\r\n shortDesc: \"Replication speed ×{value}\",\r\n effect: (level, strength) =>{ let a = (GlyphAlteration.isEmpowered(\"replication\")? DC.D1_007.pow(level).times(10): Decimal.times(level, strength).times(3));\r\n if (a.gte(new Decimal(\"1e600\"))){\r\n return a.pow(0.45);\r\n }\r\n return a;\r\n },\r\n formatEffect: x => format(x, 2, 1),\r\n combine: effects =>{\r\n let a = effects.reduce(Decimal.prodReducer, DC.D1);\r\n return a.gte(new Decimal(\"1e600\")) ? a.div(new Decimal(\"1e600\")).pow(0.45).times(new Decimal(\"1e600\")) : a;\r\n },\r\n alteredColor: () => GlyphAlteration.getEmpowermentColor(\"replication\"),\r\n alterationType: ALTERATION_TYPE.EMPOWER,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n replicationpow: {\r\n id: \"replicationpow\",\r\n bitmaskIndex: 9,\r\n isGenerated: true,\r\n glyphTypes: [\"replication\"],\r\n singleDesc: \"Replicanti multiplier power +{value}\",\r\n totalDesc: \"Replicanti multiplier ^{value}\",\r\n shortDesc: \"Replicanti mult. power +{value}\",\r\n effect: (level, strength) => 1.1 + Math.pow(level, 0.5) * strength / 25 +\r\n GlyphAlteration.sacrificeBoost(\"replication\") * 3,\r\n formatEffect: x => format(x, 2, 2),\r\n formatSingleEffect: x => format(x - 1, 2, 2),\r\n combine: GlyphCombiner.addExponents,\r\n alteredColor: () => GlyphAlteration.getBoostColor(\"replication\"),\r\n alterationType: ALTERATION_TYPE.BOOST,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n replicationdtgain: {\r\n id: \"replicationdtgain\",\r\n bitmaskIndex: 10,\r\n isGenerated: true,\r\n glyphTypes: [\"replication\"],\r\n singleDesc: () => (GlyphAlteration.isAdded(\"replication\")\r\n ? `Multiply Dilated Time \\n[and Replicanti speed] by \\n+{value} per ${format(DC.E10000)} replicanti`\r\n : `Multiply Dilated Time gain by \\n+{value} per ${format(DC.E10000)} replicanti`),\r\n totalDesc: () => (GlyphAlteration.isAdded(\"replication\")\r\n ? `Multiply Dilated Time and Replication speed by +{value} per ${format(DC.E10000)} replicanti`\r\n : `Multiply Dilated Time gain by +{value} per ${format(DC.E10000)} replicanti`),\r\n genericDesc: () => (GlyphAlteration.isAdded(\"replication\")\r\n ? \"Dilated Time+Replicanti mult from replicanti\"\r\n : \"Dilated Time gain multiplier from replicanti\"),\r\n shortDesc: () => (GlyphAlteration.isAdded(\"replication\")\r\n ? `×DT and repl. by +{value} per ${format(DC.E10000)} replicanti`\r\n : `×DT by +{value} per ${format(DC.E10000)} replicanti`),\r\n effect: (level, strength) => 0.0003 * Math.pow(level, 0.3) * Math.pow(strength, 0.65),\r\n formatEffect: x => format(10000 * x, 2, 2),\r\n formatSingleEffect: x => format(10000 * x, 2, 2),\r\n // It's bad to stack this one additively (N glyphs acts as a DT mult of N) or multiplicatively (the raw number is\r\n // less than 1), so instead we do a multiplicative stacking relative to the \"base\" effect of a level 1, 0% glyph.\r\n // We also introduce a 3x mult per glyph after the first, so that stacking level 1, 0% glyphs still has an effect.\r\n // This is still just a flat DT mult when stacking multiple glyphs, but at least it's bigger than 2 or 3.\r\n combine: effects => ({\r\n value: effects.length === 0 ? 0 : effects.reduce(Number.prodReducer, Math.pow(0.0001, 1 - effects.length)),\r\n capped: false\r\n }),\r\n conversion: x => x,\r\n formatSecondaryEffect: x => format(x, 2, 3),\r\n formatSingleSecondaryEffect: x => format(x, 5, 5),\r\n alteredColor: () => GlyphAlteration.getAdditionColor(\"replication\"),\r\n alterationType: ALTERATION_TYPE.ADDITION,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n replicationglyphlevel: {\r\n id: \"replicationglyphlevel\",\r\n bitmaskIndex: 11,\r\n isGenerated: true,\r\n glyphTypes: [\"replication\"],\r\n singleDesc: () => `Replicanti factor for Glyph level:\\n ^${format(0.4, 1, 1)}\r\n ➜ ^(${format(0.4, 1, 1)} + {value})`,\r\n totalDesc: () => `Replicanti factor for Glyph level: ^${format(0.4, 1, 1)}\r\n ➜ ^(${format(0.4, 1, 1)} + {value})`,\r\n genericDesc: \"Replicanti factor for Glyph level\",\r\n shortDesc: \"Replicanti pow. for level +{value}\",\r\n effect: (level, strength) => Math.pow(Math.pow(level, 0.25) * Math.pow(strength, 0.4), 0.5) / 50,\r\n formatEffect: x => format(x, 3, 3),\r\n combine: effects => {\r\n let sum = effects.reduce(Number.sumReducer, 0);\r\n if (effects.length > 2) sum *= 6 / (effects.length + 4);\r\n return sum > 0.1\r\n ? { value: 0.1 + 0.2 * (sum - 0.1), capped: true }\r\n : { value: sum, capped: effects.length > 2 };\r\n },\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n infinitypow: {\r\n id: \"infinitypow\",\r\n bitmaskIndex: 12,\r\n isGenerated: true,\r\n glyphTypes: [\"infinity\"],\r\n singleDesc: \"Infinity Dimension power +{value}\",\r\n totalDesc: \"Infinity Dimension multipliers ^{value}\",\r\n shortDesc: \"ID power +{value}\",\r\n effect: (level, strength) => {\r\n let a = 1.007 + Math.pow(level, 0.21) * Math.pow(strength, 0.4) / 75 + GlyphAlteration.sacrificeBoost(\"infinity\") / 50;\r\n return a;\r\n },\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: effects =>{\r\n let a = effects.reduce(Number.sumReducer, 1 - effects.length);\r\n return a > 1 ? (a-1)/3 + 1 : a\r\n },\r\n alteredColor: () => GlyphAlteration.getBoostColor(\"infinity\"),\r\n alterationType: ALTERATION_TYPE.BOOST,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n infinityrate: {\r\n id: \"infinityrate\",\r\n bitmaskIndex: 13,\r\n isGenerated: true,\r\n glyphTypes: [\"infinity\"],\r\n singleDesc: () => `Infinity Power conversion rate: \\n^${formatInt(7)}\r\n ➜ ^(${formatInt(7)} + {value})`,\r\n totalDesc: () => `Infinity Power conversion rate: ^${formatInt(7)}\r\n ➜ ^(${formatInt(7)} + {value})`,\r\n genericDesc: \"Infinity Power conversion rate\",\r\n shortDesc: \"Infinity Power conversion +{value}\",\r\n effect: (level, strength) => {\r\n let a = Math.pow(level, 0.2) * Math.pow(strength, 0.4) * 0.04;\r\n return a;\r\n },\r\n formatEffect: x => format(x, 2, 2),\r\n combine: effects =>{\r\n let x = effects.reduce(Number.sumReducer, 0);\r\n return x > 0.5 ? (x-0.5)/20 + 0.5 : x;\r\n },\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n infinityIP: {\r\n id: \"infinityIP\",\r\n bitmaskIndex: 14,\r\n isGenerated: true,\r\n glyphTypes: [\"infinity\"],\r\n singleDesc: () => (GlyphAlteration.isAdded(\"infinity\")\r\n ? \"Infinity Point gain \\n×{value} [and ^]{value2}\"\r\n : \"Multiply Infinity Point gain by {value}\"),\r\n totalDesc: () => (GlyphAlteration.isAdded(\"infinity\")\r\n ? \"Infinity Point gain ×{value} and ^{value2}\"\r\n : \"Infinity Point gain ×{value}\"),\r\n genericDesc: () => (GlyphAlteration.isAdded(\"infinity\")\r\n ? \"Infinity Point gain multiplier and power\"\r\n : \"Infinity Point gain multiplier\"),\r\n shortDesc: () => (GlyphAlteration.isAdded(\"infinity\")\r\n ? \"IP ×{value} and ^{value2}\"\r\n : \"IP ×{value}\"),\r\n effect: (level, strength) => Math.pow(level * (strength + 1), 6) * 10000,\r\n formatEffect: x => format(x, 2, 3),\r\n combine: GlyphCombiner.multiply,\r\n // eslint-disable-next-line no-negated-condition\r\n softcap: value => ((Effarig.eternityCap !== undefined) ? Math.min(value, Effarig.eternityCap.toNumber()) : value),\r\n conversion: x => 1 + Math.log10(x) / 1800,\r\n formatSecondaryEffect: x => format(x, 4, 4),\r\n alteredColor: () => GlyphAlteration.getAdditionColor(\"infinity\"),\r\n alterationType: ALTERATION_TYPE.ADDITION,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n infinityinfmult: {\r\n id: \"infinityinfmult\",\r\n bitmaskIndex: 15,\r\n isGenerated: true,\r\n glyphTypes: [\"infinity\"],\r\n singleDesc: \"Multiply Infinity gain by {value}\",\r\n totalDesc: \"Infinity gain ×{value}\",\r\n genericDesc: \"Infinity gain multiplier\",\r\n shortDesc: \"Infinities ×{value}\",\r\n effect: (level, strength) => (GlyphAlteration.isEmpowered(\"infinity\")\r\n ? DC.D1_02.pow(level)\r\n : Decimal.pow(level * strength, 1.5).times(2)),\r\n formatEffect: x => format(x, 2, 1),\r\n combine: GlyphCombiner.multiplyDecimal,\r\n alteredColor: () => GlyphAlteration.getEmpowermentColor(\"infinity\"),\r\n alterationType: ALTERATION_TYPE.EMPOWER,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n powerpow: {\r\n id: \"powerpow\",\r\n bitmaskIndex: 16,\r\n isGenerated: true,\r\n glyphTypes: [\"power\"],\r\n singleDesc: () => (GlyphAlteration.isAdded(\"power\")\r\n ? \"Antimatter Dimension power +{value}\\n[and Antimatter Galaxy cost ×]{value2}\"\r\n : \"Antimatter Dimension power +{value}\"),\r\n totalDesc: () => (GlyphAlteration.isAdded(\"power\")\r\n ? \"Antimatter Dimension multipliers ^{value} and Antimatter Galaxy cost ×{value2}\"\r\n : \"Antimatter Dimension multipliers ^{value}\"),\r\n genericDesc: () => (GlyphAlteration.isAdded(\"power\")\r\n ? \"Antimatter Dimensions multipliers ^x and Antimatter Galaxy cost multiplier\"\r\n : \"Antimatter Dimension multipliers ^x\"),\r\n shortDesc: () => (GlyphAlteration.isAdded(\"power\")\r\n ? \"AD power +{value} and AG cost ×{value2}\"\r\n : \"AD power +{value}\"),\r\n effect: (level, strength) => 1.015 + Math.pow(level, 0.2) * Math.pow(strength, 0.4) / 75,\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: effects =>{\r\n let a = effects.reduce(Number.sumReducer, 1 - effects.length);\r\n return a > 0.6 ? (a-1)/6 + 1 : a\r\n },\r\n conversion: x => 2 / (x + 1),\r\n formatSecondaryEffect: x => format(x, 3, 3),\r\n alteredColor: () => GlyphAlteration.getAdditionColor(\"power\"),\r\n alterationType: ALTERATION_TYPE.ADDITION,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n powermult: {\r\n id: \"powermult\",\r\n bitmaskIndex: 17,\r\n isGenerated: true,\r\n glyphTypes: [\"power\"],\r\n singleDesc: \"Antimatter Dimension multipliers ×{value}\",\r\n shortDesc: \"AD ×{value}\",\r\n effect: (level, strength) => (GlyphAlteration.isEmpowered(\"power\")\r\n ? DC.D11111.pow(level * 220)\r\n : Decimal.pow(level * strength * 10, level * strength * 10)),\r\n formatEffect: x => formatPostBreak(x, 2, 0),\r\n combine: GlyphCombiner.multiplyDecimal,\r\n alteredColor: () => GlyphAlteration.getEmpowermentColor(\"power\"),\r\n alterationType: ALTERATION_TYPE.EMPOWER,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n powerdimboost: {\r\n id: \"powerdimboost\",\r\n bitmaskIndex: 18,\r\n isGenerated: true,\r\n glyphTypes: [\"power\"],\r\n singleDesc: \"Dimension Boost multiplier ×{value}\",\r\n genericDesc: \"Dimension Boost multiplier\",\r\n shortDesc: \"Dimboost mult. ×{value}\",\r\n effect: (level, strength) => Math.pow(level * strength, 0.5) *\r\n Math.pow(1 + GlyphAlteration.sacrificeBoost(\"power\"), 3),\r\n formatEffect: x => format(x, 2, 2),\r\n combine: GlyphCombiner.multiply,\r\n alteredColor: () => GlyphAlteration.getBoostColor(\"power\"),\r\n alterationType: ALTERATION_TYPE.BOOST,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n powerbuy10: {\r\n id: \"powerbuy10\",\r\n bitmaskIndex: 19,\r\n isGenerated: true,\r\n glyphTypes: [\"power\"],\r\n singleDesc: () => `Increase the bonus from buying ${formatInt(10)} Antimatter Dimensions by {value}`,\r\n totalDesc: () => `Multiplier from \"Buy ${formatInt(10)}\" ×{value}`,\r\n genericDesc: () => `\"Buy ${formatInt(10)}\" bonus increase`,\r\n shortDesc: () => `AD \"Buy ${formatInt(10)}\" mult. ×{value}`,\r\n effect: (level, strength) => 1 + level * strength / 12,\r\n formatEffect: x => format(x, 2, 2),\r\n combine: GlyphCombiner.addExponents,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n effarigrm: {\r\n id: \"effarigrm\",\r\n bitmaskIndex: 20,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: () => {\r\n return Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked ? `Reality Machine multiplier ×{value} [and\\nImaginary Machine cap] ×{value2}` : `Reality Machine multiplier ×{value}`;\r\n },\r\n genericDesc: () =>{\r\n return Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked ? \"Reality Machine and Imaginary Machine cap multiplier\" : \"Reality Machine multiplier\";\r\n },\r\n shortDesc: () => {\r\n return Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked ? \"RM ×{value} and iM cap ×{value3}\" : \"RM ×{value}\";\r\n },\r\n effect: (level, strength) => (GlyphAlteration.isEmpowered(\"effarig\") ? Math.pow(level, 1.5) : Math.pow(level, 0.6) * strength),\r\n formatEffect: x => format(x, 2, 2),\r\n combine: GlyphCombiner.multiply,\r\n conversion: x => x ** 0.5,\r\n alteredColor: () => GlyphAlteration.getEmpowermentColor(\"effarig\"),\r\n alterationType: ALTERATION_TYPE.EMPOWER\r\n },\r\n effarigglyph: {\r\n id: \"effarigglyph\",\r\n bitmaskIndex: 21,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: \"Glyph Instability starting level +{value}\",\r\n genericDesc: \"Glyph Instability delay\",\r\n shortDesc: \"Instability delay +{value}\",\r\n effect: (level, strength) => {\r\n let a = Math.floor(10 * Math.pow(level * strength, 0.5));\r\n return a;\r\n },\r\n formatEffect: x => formatInt(x),\r\n combine: effects =>{\r\n let x = effects.reduce(Number.sumReducer, 0);\r\n return x > 5000 ? (x-5000)/5 + 5000: x;\r\n },\r\n },\r\n effarigblackhole: {\r\n id: \"effarigblackhole\",\r\n bitmaskIndex: 22,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: \"Game speed power +{value}\",\r\n totalDesc: \"Game speed ^{value}\",\r\n genericDesc: \"Game speed ^x\",\r\n shortDesc: \"Game speed power +{value}\",\r\n effect: (level, strength) =>{\r\n let a = 1 + Math.pow(level, 0.25) * Math.pow(strength, 0.4) / 75;\r\n return a;\r\n },\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: effects => {\r\n let x = effects.reduce(Number.sumReducer, 1 - effects.length);\r\n return x > 1.4 ? (x-1.4)/200 + 1.4: x;\r\n },\r\n },\r\n effarigachievement: {\r\n id: \"effarigachievement\",\r\n bitmaskIndex: 23,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: \"Achievement multiplier power +{value}\",\r\n totalDesc: \"Achievement multiplier ^{value}\",\r\n genericDesc: \"Achievement multiplier ^x\",\r\n shortDesc: \"Achievement mult. power +{value}\",\r\n effect: (level, strength) => 1 + Math.pow(level, 0.4) * Math.pow(strength, 0.6) / 60 +\r\n GlyphAlteration.sacrificeBoost(\"effarig\") / 10,\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: GlyphCombiner.addExponents,\r\n alteredColor: () => GlyphAlteration.getBoostColor(\"effarig\"),\r\n alterationType: ALTERATION_TYPE.BOOST\r\n },\r\n effarigforgotten: {\r\n id: \"effarigforgotten\",\r\n bitmaskIndex: 24,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: () => (GlyphAlteration.isAdded(\"effarig\")\r\n ? `\"Buy ${formatInt(10)}\" multiplier ^{value} [and\\nDimension Boost multiplier ^]{value2}`\r\n : `Bonus from buying ${formatInt(10)} Dimensions ^{value}`),\r\n totalDesc: () => (GlyphAlteration.isAdded(\"effarig\")\r\n ? `Multiplier from \"Buy ${formatInt(10)}\" ^{value} and Dimension Boost multiplier ^{value2}`\r\n : `Multiplier from \"Buy ${formatInt(10)}\" ^{value}`),\r\n genericDesc: () => (GlyphAlteration.isAdded(\"effarig\")\r\n ? `\"Buy ${formatInt(10)}\" and Dimension Boost multipliers ^x`\r\n : `\"Buy ${formatInt(10)}\" multiplier ^x`),\r\n shortDesc: () => (GlyphAlteration.isAdded(\"effarig\")\r\n ? `Buy ${formatInt(10)} mult. ^{value}, Dimboost mult. ^{value2}`\r\n : `Buy ${formatInt(10)} mult. ^{value}`),\r\n effect: (level, strength) => {\r\n let a = 1 + 2 * Math.pow(level, 0.25) * Math.pow(strength, 0.4);\r\n return a;\r\n },\r\n formatEffect: x => format(x, 2, 2),\r\n combine: effects =>{\r\n let x = effects.reduce(Number.sumReducer, 0);\r\n return x > 100 ? (x-100)/5 + 100 : x;\r\n },\r\n conversion: x => Math.pow(x, 0.4),\r\n formatSecondaryEffect: x => format(x, 2, 2),\r\n alteredColor: () => GlyphAlteration.getAdditionColor(\"effarig\"),\r\n alterationType: ALTERATION_TYPE.ADDITION\r\n },\r\n effarigdimensions: {\r\n id: \"effarigdimensions\",\r\n bitmaskIndex: 25,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: \"All Dimension power +{value}\",\r\n totalDesc: \"All Dimension multipliers ^{value}\",\r\n genericDesc: \"All Dimension multipliers ^x\",\r\n shortDesc: \"All Dimension power +{value}\",\r\n effect: (level, strength) => 1 + Math.pow(level, 0.25) * Math.pow(strength, 0.4) / 500,\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: GlyphCombiner.addExponents,\r\n },\r\n effarigantimatter: {\r\n id: \"effarigantimatter\",\r\n bitmaskIndex: 26,\r\n isGenerated: true,\r\n glyphTypes: [\"effarig\"],\r\n singleDesc: () => `Antimatter production:\\n${formatInt(10)}^x ➜ ${formatInt(10)}^(x^{value})`,\r\n genericDesc: \"Antimatter production exponent power\",\r\n shortDesc: \"AM production exponent ^{value}\",\r\n effect: (level, strength) => {\r\n let a = 1 + Math.pow(level, 0.25) * Math.pow(strength, 0.4) / 5000;\r\n return a;\r\n },\r\n formatEffect: x => format(x, 4, 4),\r\n combine: effects => {\r\n let x = effects.reduce(Number.prodReducer, 1);\r\n return x > 1.01 ? (x-1.01)/5 + 1.01: x;\r\n },\r\n },\r\n timeshardpow: {\r\n id: \"timeshardpow\",\r\n bitmaskIndex: 27,\r\n isGenerated: true,\r\n // This gets explicitly added to time glyphs elsewhere (once unlocked)\r\n glyphTypes: [],\r\n singleDesc: \"Time Shard power +{value}\",\r\n totalDesc: \"Time Shard gain ^{value}\",\r\n genericDesc: \"Time Shards ^x\",\r\n shortDesc: \"Time Shard power +{value}\",\r\n effect: (level, strength) => 1 + (strength / 3.5) * Math.pow(level, 0.35) / 400,\r\n formatEffect: x => format(x, 3, 3),\r\n formatSingleEffect: x => format(x - 1, 3, 3),\r\n combine: GlyphCombiner.addExponents,\r\n enabledInDoomed: true,\r\n enabledInDoomedWithlvl25: true,\r\n },\r\n cursedgalaxies: {\r\n id: \"cursedgalaxies\",\r\n bitmaskIndex: 0,\r\n isGenerated: false,\r\n glyphTypes: [\"cursed\"],\r\n singleDesc: `All Galaxies are {value} weaker`,\r\n totalDesc: \"All Galaxy strength -{value}\",\r\n shortDesc: \"Galaxy Strength -{value}\",\r\n // Multiplies by 0.768 per glyph\r\n effect: level => Math.pow(level, -0.03),\r\n formatEffect: x => formatPercents(1 - x, 2),\r\n combine: GlyphCombiner.multiply,\r\n },\r\n curseddimensions: {\r\n id: \"curseddimensions\",\r\n bitmaskIndex: 1,\r\n isGenerated: false,\r\n glyphTypes: [\"cursed\"],\r\n singleDesc: \"All Dimension multipliers ^{value}\",\r\n shortDesc: \"All Dimensions ^{value}\",\r\n // Multiplies by 0.734 per glyph\r\n effect: level => Math.pow(level, -0.035),\r\n formatEffect: x => format(x, 3, 3),\r\n combine: GlyphCombiner.multiply,\r\n },\r\n cursedtickspeed: {\r\n id: \"cursedtickspeed\",\r\n bitmaskIndex: 2,\r\n isGenerated: false,\r\n glyphTypes: [\"cursed\"],\r\n singleDesc: \"The threshold for Tickspeed Upgrades from Time Dimensions is multiplied by ×{value}\",\r\n totalDesc: \"The threshold for Tickspeed Upgrades from Time Dimensions is increased by ×{value}\",\r\n shortDesc: \"TD Tickspeed threshold ×{value}\",\r\n // Additive 3.82 per glyph\r\n effect: level => Math.clampMin(Math.log10(level), 1),\r\n formatEffect: x => format(x, 3, 3),\r\n combine: GlyphCombiner.add,\r\n },\r\n cursedEP: {\r\n id: \"cursedEP\",\r\n bitmaskIndex: 3,\r\n isGenerated: false,\r\n glyphTypes: [\"cursed\"],\r\n singleDesc: \"Divide Eternity Point gain by {value}\",\r\n totalDesc: \"Eternity Point gain / {value}\",\r\n shortDesc: \"EP / {value}\",\r\n // Divides e666.6 per glyph\r\n effect: level => Decimal.pow10(-level / 10),\r\n formatEffect: x => format(x.reciprocal()),\r\n combine: GlyphCombiner.multiplyDecimal,\r\n },\r\n realityglyphlevel: {\r\n id: \"realityglyphlevel\",\r\n bitmaskIndex: 4,\r\n isGenerated: false,\r\n glyphTypes: [\"reality\"],\r\n singleDesc: \"Increase the effective level of equipped basic Glyphs by {value}\",\r\n totalDesc: \"Equipped basic Glyph level +{value}\",\r\n shortDesc: \"Basic Glyph Level +{value}\",\r\n effect: level => Math.floor(Math.sqrt(level * 90)),\r\n formatEffect: x => formatInt(x),\r\n combine: GlyphCombiner.add,\r\n },\r\n realitygalaxies: {\r\n id: \"realitygalaxies\",\r\n bitmaskIndex: 5,\r\n isGenerated: false,\r\n glyphTypes: [\"reality\"],\r\n singleDesc: \"All Galaxies are {value} stronger\",\r\n totalDesc: \"All Galaxy strength +{value}\",\r\n shortDesc: \"Galaxy Strength +{value}\",\r\n effect: level => {\r\n let a = 1 + Math.pow(level / 100000, 0.5);\r\n return a;\r\n },\r\n formatEffect: x => formatPercents(x - 1, 2),\r\n combine: effects => {\r\n let x = effects.reduce(Number.prodReducer, 1);\r\n return x >= 1.6 ? (x-1.6)/4 +1.6 : x;\r\n },\r\n },\r\n realityrow1pow: {\r\n id: \"realityrow1pow\",\r\n bitmaskIndex: 6,\r\n isGenerated: false,\r\n glyphTypes: [\"reality\"],\r\n singleDesc: \"Multiplier from Reality Upgrade Amplifiers ^{value}\",\r\n totalDesc: \"Reality Upgrade Amplifier multiplier ^{value}\",\r\n shortDesc: \"Amplifier Multiplier ^{value}\",\r\n effect: level => {\r\n let a = 1 + level / 125000;\r\n if (a > 1.2){\r\n return a ** 0.2;\r\n }\r\n return a;\r\n },\r\n formatEffect: x => format(x, 3, 3),\r\n combine: GlyphCombiner.addExponents,\r\n },\r\n realityDTglyph: {\r\n id: \"realityDTglyph\",\r\n bitmaskIndex: 7,\r\n isGenerated: false,\r\n glyphTypes: [\"reality\"],\r\n singleDesc: () => `Dilated Time factor for Glyph level: \\n^${format(1.3, 1, 1)}\r\n ➜ ^(${format(1.3, 1, 1)} + {value})`,\r\n totalDesc: () => `Dilated Time factor for Glyph level: ^${format(1.3, 1, 1)}\r\n ➜ ^(${format(1.3, 1, 1)} + {value})`,\r\n genericDesc: \"Dilated Time factor for Glyph level\",\r\n shortDesc: \"DT pow. for level +{value}\",\r\n // You can only get this effect on level 25000 reality glyphs anyway, might as well make it look nice\r\n effect: () => 0.1,\r\n formatEffect: x => format(x, 2, 2),\r\n combine: GlyphCombiner.add,\r\n },\r\n companiondescription: {\r\n id: \"companiondescription\",\r\n bitmaskIndex: 8,\r\n isGenerated: false,\r\n glyphTypes: [\"companion\"],\r\n singleDesc: \"It does nothing but sit there and cutely smile at you, whisper into your dreams politely, \" +\r\n \"and plot the demise of all who stand against you. This one-of-a-kind Glyph will never leave you.\",\r\n totalDesc: \"+{value} happiness\",\r\n shortDesc: \"Doesn't want to hurt you\",\r\n effect: () => {\r\n if (Enslaved.isRunning) return 0;\r\n const cursedCount = Glyphs.active.countWhere(g => g?.type === \"cursed\");\r\n if (cursedCount > 0) return Math.pow(0.2 + 0.2 * Math.random(), cursedCount);\r\n return 0.4 + 0.6 * Math.random();\r\n },\r\n formatEffect: x => formatPercents(x, 2, 2),\r\n combine: GlyphCombiner.add,\r\n enabledInDoomed: true,\r\n },\r\n companionEP: {\r\n id: \"companionEP\",\r\n bitmaskIndex: 9,\r\n isGenerated: false,\r\n glyphTypes: [\"companion\"],\r\n singleDesc: \"Thanks for your dedication for the game! You reached {value} Eternity Points on your first Reality.\",\r\n shortDesc: \"It loves you very, very much\",\r\n totalDesc: () => ((Enslaved.isRunning || Glyphs.active.countWhere(g => g?.type === \"cursed\")) ? \"Help me\" : \"Yay!\"),\r\n // The EP value for this is entirely encoded in rarity, but level needs to be present to\r\n // make sure the proper parameter is being used. The actual glyph level shouldn't do anything.\r\n // eslint-disable-next-line no-unused-vars\r\n effect: (level, strength) => Decimal.pow10(1e6 * strengthToRarity(strength)),\r\n formatEffect: x => formatPostBreak(x, 2),\r\n combine: GlyphCombiner.multiplyDecimal,\r\n enabledInDoomed: true,\r\n }\r\n};\r\n","import { DC } from \"../../constants\"\r\nexport const glyphSacrifice = {\r\n \"power\": {\r\n id: \"power\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return 0;\r\n const sac = player.reality.glyphs.sac.power.add(added ?? 0);\r\n const capped = Decimal.clampMax(sac, GlyphSacrificeHandler.maxSacrificeForEffects);\r\n const base = Decimal.log10(capped.add(1)) / Decimal.log10(1e100);\r\n return Decimal.floor(Decimal.pow(base, 1.2).mul(750)).toNumber();\r\n },\r\n description: amount => {\r\n const sacCap = 1e100;\r\n const nextDistantGalaxy = Math.pow(10, Math.pow((amount + 1) / 750, 1 / 1.2) * Math.log10(sacCap)) - 1;\r\n const nextGalaxyText = amount < (Ra.unlocks.uncapGlyphSacEffects.isUnlocked ? 10000000 : 750)\r\n ? ` (next at ${format(nextDistantGalaxy, 2, 2)})`\r\n : \"\";\r\n return `Distant Galaxy scaling starts ${formatInt(amount)} later${nextGalaxyText}`;\r\n },\r\n cap: () => GlyphSacrificeHandler.maxSacrificeForEffects.toNumber()\r\n },\r\n \"infinity\": {\r\n id: \"infinity\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return DC.D1;\r\n const sac = player.reality.glyphs.sac.infinity.add(added ?? 0);\r\n const capped = Decimal.clampMax(sac, GlyphSacrificeHandler.maxSacrificeForEffects);\r\n return new Decimal(1 + Decimal.log10(Decimal.pow(capped, 0.2).div(100).add(1)));\r\n },\r\n description: amount => `${formatX(amount, 2, 2)} bigger multiplier when buying 8th Infinity Dimension`,\r\n cap: () => GlyphSacrificeHandler.maxSacrificeForEffects\r\n },\r\n \"time\": {\r\n id: \"time\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return DC.D1;\r\n const sac = player.reality.glyphs.sac.time.add(added ?? 0);\r\n const capped = Decimal.clampMax(sac, GlyphSacrificeHandler.maxSacrificeForEffects);\r\n return Decimal.pow(Decimal.pow(capped, 0.2).div(100).add(1), 2);\r\n },\r\n description: amount => `${formatX(amount, 2, 2)} bigger multiplier when buying 8th Time Dimension`,\r\n cap: () => GlyphSacrificeHandler.maxSacrificeForEffects\r\n },\r\n \"replication\": {\r\n id: \"replication\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return 0;\r\n const sac = player.reality.glyphs.sac.replication.add(added ?? 0);\r\n const capped = Decimal.clampMax(sac, GlyphSacrificeHandler.maxSacrificeForEffects);\r\n const base = Decimal.log10(capped.add(1)) / Decimal.log10(1e100);\r\n return Decimal.floor(Decimal.pow(base, 1.2).mul(1500)).toNumber();\r\n },\r\n description: amount => {\r\n const sacCap = 1e100;\r\n const nextDistantGalaxy = Math.pow(10, Math.pow((amount + 1) / 1500, 1 / 1.2) * Math.log10(sacCap)) - 1;\r\n const nextGalaxyText = amount < (Ra.unlocks.uncapGlyphSacEffects.isUnlocked ? 10000000 : 1500)\r\n ? ` (next at ${format(nextDistantGalaxy, 2, 2)})`\r\n : \"\";\r\n return `Replicanti Galaxy scaling starts ${formatInt(amount)} later${nextGalaxyText}`;\r\n },\r\n cap: () => GlyphSacrificeHandler.maxSacrificeForEffects.toNumber()\r\n },\r\n \"dilation\": {\r\n id: \"dilation\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return DC.D1;\r\n const sac = player.reality.glyphs.sac.dilation.add(added ?? 0);\r\n const capped = Decimal.clampMax(sac, GlyphSacrificeHandler.maxSacrificeForEffects);\r\n const exponent = 0.32 * Math.pow(Decimal.log10(capped.add(1)) /\r\n Decimal.log10(GlyphSacrificeHandler.maxSacrificeForEffects), 0.1);\r\n return Decimal.pow(Decimal.clampMin(capped, 1), exponent);\r\n },\r\n description: amount => `Multiply Tachyon Particle gain by ${formatX(amount, 2, 2)}`,\r\n cap: () => GlyphSacrificeHandler.maxSacrificeForEffects\r\n },\r\n \"effarig\": {\r\n id: \"effarig\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return DC.D0;\r\n const sac = player.reality.glyphs.sac.effarig.add(added ?? 0);\r\n // This doesn't use the GlyphSacrificeHandler cap because it hits its cap (+100%) earlier\r\n const capped = Decimal.clampMax(sac, DC.E70);\r\n return new Decimal(2 * Decimal.log10(capped.div(1e20).add(1)));\r\n },\r\n description: amount => `+${formatPercentsD(amount.div(100), 2)} additional Glyph rarity`,\r\n cap: () => 1e70\r\n },\r\n \"reality\": {\r\n id: \"reality\",\r\n effect: added => {\r\n if (Pelle.isDisabled(\"glyphsac\")) return 0;\r\n const sac = player.reality.glyphs.sac.reality.add(added ?? 0);\r\n // This cap is only feasibly reached with the imaginary upgrade, but we still want to cap it at a nice number\r\n return Decimal.clampMax(Decimal.sqrt(sac).div(15).add(1), 100).toNumber();\r\n },\r\n description: amount => `Multiply Memory Chunk gain by ${formatX(amount, 2, 3)}`,\r\n cap: () => GlyphSacrificeHandler.maxSacrificeForEffects.toNumber()\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\n//let teresaRa = player.celestials.ra.upgrades.includes('teresaUpgrade');\r\n\r\nconst rebuyable = props => {\r\n props.cost = () => props.initialCost * Math.pow(props.costMult, player.reality.imaginaryRebuyables[props.id]);\r\n if (props.id==6) props.cost = () => player.celestials.ra.upgrades.has('teresaUpgrade') ? Math.pow(props.initialCost * Math.pow(props.costMult, player.reality.imaginaryRebuyables[props.id]),0.85) : props.initialCost * Math.pow(props.costMult, player.reality.imaginaryRebuyables[props.id]);\r\n const { effect } = props;\r\n if (props.isDecimal) props.effect = () => Decimal.pow(effect, player.reality.imaginaryRebuyables[props.id]);\r\n else props.effect = () => effect * Math.min(player.reality.imaginaryRebuyables[props.id], 10);\r\n if (!props.formatEffect) props.formatEffect = value => `+${format(value, 2, 2)}`;\r\n props.formatCost = value => format(value, 2, 0);\r\n return props;\r\n};\r\n\r\nexport const imaginaryUpgrades = [\r\n rebuyable({\r\n name: \"Temporal Intensifier\",\r\n id: 1,\r\n initialCost: 3,\r\n costMult: 60,\r\n description: () => `Increase Temporal Amplifier multiplier by +${format(0.15, 2, 2)}`,\r\n effect: 0.15\r\n }),\r\n rebuyable({\r\n name: \"Replicative Intensifier\",\r\n id: 2,\r\n initialCost: 4,\r\n costMult: 60,\r\n description: () => `Increase Replicative Amplifier multiplier by +${format(0.15, 2, 2)}`,\r\n effect: 0.15\r\n }),\r\n rebuyable({\r\n name: \"Eternal Intensifier\",\r\n id: 3,\r\n initialCost: 1,\r\n costMult: 40,\r\n description: () => `Increase Eternal Amplifier multiplier by +${format(0.4, 2, 2)}`,\r\n effect: 0.4\r\n }),\r\n rebuyable({\r\n name: \"Superluminal Intensifier\",\r\n id: 4,\r\n initialCost: 5,\r\n costMult: 80,\r\n description: () => `Increase Superluminal Amplifier multiplier by +${format(0.15, 2, 2)}`,\r\n effect: 0.15\r\n }),\r\n rebuyable({\r\n name: \"Boundless Intensifier\",\r\n id: 5,\r\n initialCost: 1,\r\n costMult: 30,\r\n description: () => `Increase Boundless Amplifier multiplier by +${format(0.6, 2, 2)}`,\r\n effect: 0.6\r\n }),\r\n rebuyable({\r\n name: \"Elliptic Materiality\",\r\n id: 6,\r\n initialCost: 1e4,\r\n costMult: 500,\r\n description: () => `Increase the Reality Machine cap by ${formatX(1e100)}`,\r\n effect: 1e100,\r\n formatEffect: value => `${formatX(value)}`,\r\n isDecimal: true\r\n }),\r\n rebuyable({\r\n name: \"Runic Assurance\",\r\n id: 7,\r\n initialCost: 2e5,\r\n costMult: 500,\r\n description: () => `Delay Glyph Instability starting level by ${formatInt(200)}`,\r\n effect: 200,\r\n formatEffect: value => `+${formatInt(value)} levels`\r\n }),\r\n rebuyable({\r\n name: \"Hyperbolic Apeirogon\",\r\n id: 8,\r\n initialCost: 1e7,\r\n costMult: 800,\r\n description: () => `Multiply Infinity Dimensions by ${format(\"1e100000\")}`,\r\n effect: DC.E100000,\r\n formatEffect: value => `${formatX(value)}`,\r\n isDecimal: true\r\n }),\r\n rebuyable({\r\n name: \"Cosmic Filament\",\r\n id: 9,\r\n initialCost: 1e9,\r\n costMult: 1000,\r\n description: () => `Increase Galaxy strength`,\r\n effect: 0.03,\r\n formatEffect: value => `+${formatPercents(value)}`,\r\n }),\r\n rebuyable({\r\n name: \"Entropic Condensing\",\r\n id: 10,\r\n initialCost: 8e9,\r\n costMult: 2000,\r\n description: () => `Increase Singularity gain`,\r\n effect: /*() => Ra.unlocks.dmdScaling.isUnlocked ? 100000 : */1 ,\r\n formatEffect: value => Ra.unlocks.dmdScaling.isUnlocked ? `${formatX(1 + Math.pow(2,value), 2)}`:`${formatX(1 + value, 2)}`\r\n }),\r\n {\r\n name: \"Suspicion of Interference\",\r\n id: 11,\r\n cost: 5e7,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`${format(1e90)} total Relic Shards\r\n (You have ${format(player.celestials.effarig.relicShards, 2)})`;},\r\n hasFailed: () => false,\r\n checkRequirement: () => player.celestials.effarig.relicShards.gte(1e90),\r\n checkEvent: GAME_EVENT.REALITY_RESET_AFTER,\r\n description: \"Time Dimension power based on total antimatter\",\r\n effect: () => 1 + Math.log10(player.records.totalAntimatter.log10()) / 100,\r\n formatEffect: value => `${formatPow(value, 0, 4)}`,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Consequences of Illusions\",\r\n id: 12,\r\n cost: 5e7,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`Make a level ${formatInt(9000)} Glyph with a single Glyph level factor weight at\r\n ${formatInt(100)}`;},\r\n hasFailed: () => false,\r\n checkRequirement: () => Object.values(player.celestials.effarig.glyphWeights).some(w => w === 100) &&\r\n gainedGlyphLevel().actualLevel >= 9000,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: \"Gain free Dimboosts based on Imaginary rebuyable count\",\r\n effect: () => 2e4 * ImaginaryUpgrades.totalRebuyables,\r\n formatEffect: value => `${format(value, 1)}`,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Transience of Information\",\r\n id: 13,\r\n cost: 5e7,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`Reach ${format(Number.MAX_VALUE, 2)} projected Reality Machines within\r\n The Nameless Ones' Reality`;},\r\n hasFailed: () => !Enslaved.isRunning,\r\n // This is for consistency with the UI, which displays an amplified \"projected RM\" value on the reality button\r\n checkRequirement: () => Enslaved.isRunning &&\r\n MachineHandler.uncappedRM.times(simulatedRealityCount(false) + 1).gte(Number.MAX_VALUE),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: \"Increase Imaginary Machine Cap based on Imaginary Upgrades purchased\",\r\n effect: () => 1 + ImaginaryUpgrades.totalRebuyables / 20 + ImaginaryUpgrades.totalSinglePurchase / 2,\r\n formatEffect: value => `${formatX(value, 2, 1)}`,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Recollection of Intrusion\",\r\n id: 14,\r\n cost: 3.5e8,\r\n formatCost: x => format(x, 1),\r\n requirement: () => { return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`Reach a tickspeed of ${format(\"1e75000000000\")} / sec within Eternity Challenge 5`;},\r\n hasFailed: () => false,\r\n checkRequirement: () => EternityChallenge(5).isRunning && Tickspeed.perSecond.exponent >= 7.5e10,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: () => `Raise all Dimension per-purchase multipliers to ${formatPow(1.5, 0, 1)}`,\r\n effect: 1.5,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Fabrication of Ideals\",\r\n id: 15,\r\n cost: 1e9,\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" : `Reach ${format(\"1e1500000000000\")} antimatter without\r\n ever having any 1st Infinity Dimensions`;},\r\n hasFailed: () => player.requirementChecks.reality.maxID1.gt(0),\r\n checkRequirement: () => player.requirementChecks.reality.maxID1.eq(0) && player.antimatter.exponent >= 1.5e12,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: true,\r\n // This upgrade lock acts in multiple different conditions, but isn't 100% foolproof and also blocks a few edge\r\n // cases which technically should be allowed but would be hard to communicate in-game. Forbidden actions are:\r\n // - Purchasing any ID (edge case: this is acceptable for ID2-8 inside EC2 or EC10)\r\n // - Purchasing any TD with any amount of EC7 completions (edge case: acceptable within EC1 or EC10)\r\n // - Entering EC7 with any amount of purchased TD\r\n description: () => `${\r\n Pelle.isDoomed ? \"Unlock\" : \"Convert Antimatter Dimensions to Continuum and unlock\"\r\n } Lai'tela, Celestial of Dimensions`,\r\n },\r\n {\r\n name: \"Massless Momentum\",\r\n id: 16,\r\n cost: 3.5e9,\r\n formatCost: x => format(x, 1),\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" : `Destabilize Lai'tela's Reality in under ${formatInt(30)} seconds twice`;},\r\n hasFailed: () => false,\r\n checkRequirement: () => Laitela.maxAllowedDimension <= 6,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: \"Unlock the 2nd Dark Matter Dimension\",\r\n },\r\n {\r\n name: \"Chiral Oscillation\",\r\n id: 17,\r\n cost: 6e9,\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" : `Automatically condense at least ${formatInt(20)} Singularities at once and have the 2nd Dark Matter Dimension`},\r\n hasFailed: () => false,\r\n checkRequirement: () => Singularity.singularitiesGained >= 20 &&\r\n Currency.darkEnergy.gte(Singularity.cap * SingularityMilestone.autoCondense.effectOrDefault(Infinity)) && ImaginaryUpgrade(16).isBought,\r\n checkEvent: GAME_EVENT.SINGULARITY_RESET_BEFORE,\r\n description: \"Unlock the 3rd Dark Matter Dimension\",\r\n },\r\n {\r\n name: \"Dimensional Symmetry\",\r\n id: 18,\r\n cost: 1.5e10,\r\n formatCost: x => format(x, 1),\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" : `Have ${formatInt(80000)} total Galaxies and have the 3rd Dark Matter Dimension`;},\r\n hasFailed: () => false,\r\n checkRequirement: () => (Replicanti.galaxies.total + player.galaxies +\r\n player.dilation.totalTachyonGalaxies >= 80000) && ImaginaryUpgrade(17).isBought,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: \"Unlock the 4th Dark Matter Dimension\",\r\n },\r\n {\r\n name: \"Deterministic Radiation\",\r\n id: 19,\r\n cost: 2.8e10,\r\n formatCost: x => format(x, 1),\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" :`Reach ${formatInt(3.85e6)} Tickspeed Continuum without ever having more than\r\n ${formatInt(8)} Time Studies in this Reality`;},\r\n hasFailed: () => player.requirementChecks.reality.maxStudies > 8,\r\n checkRequirement: () => player.requirementChecks.reality.maxStudies <= 8 &&\r\n Tickspeed.continuumValue >= 3.85e6,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: true,\r\n lockEvent: () => `purchase more than ${formatInt(8)} Time Studies`,\r\n description: \"Unlock Dark Matter Annihilation\"\r\n },\r\n {\r\n name: \"Vacuum Acceleration\",\r\n id: 20,\r\n cost: 3e12,\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" : `Have a Continuum increase of at least ${formatPercents(1)}`;},\r\n hasFailed: () => false,\r\n checkRequirement: () => Laitela.matterExtraPurchaseFactor >= 2,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: () => `Unlock Autobuyers for repeatable Imaginary Upgrades and generate Imaginary Machines\r\n ${formatInt(10)} times faster`,\r\n effect: 10,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Existential Elimination\",\r\n id: 21,\r\n cost: 1e13,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reach ${format(\"1e7400000000000\")} antimatter with Continuum disabled for the entire Reality`;},\r\n hasFailed: () => !player.requirementChecks.reality.noContinuum,\r\n checkRequirement: () => player.requirementChecks.reality.noContinuum &&\r\n Currency.antimatter.value.log10() >= 7.4e12,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: true,\r\n lockEvent: \"enable Continuum\",\r\n description: \"Annihilation multiplier gain is improved based on Imaginary Machines\",\r\n effect: () => Math.clampMin(Math.pow(Math.log10(Currency.imaginaryMachines.value) - 10, 3), 1),\r\n formatEffect: value => `${formatX(value, 2, 1)}`,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Total Termination\",\r\n id: 22,\r\n cost: 1.5e14,\r\n formatCost: x => format(x, 1),\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`Reach ${format(\"1e150000000000\")} antimatter in Effarig's Reality with\r\n at least ${formatInt(4)} Cursed Glyphs equipped`;},\r\n // Note: 4 cursed glyphs is -12 glyph count, but equipping a positive glyph in the last slot is allowed\r\n hasFailed: () => !Effarig.isRunning || player.requirementChecks.reality.maxGlyphs > -10,\r\n checkRequirement: () => Effarig.isRunning && player.requirementChecks.reality.maxGlyphs < -10 &&\r\n Currency.antimatter.value.exponent >= 1.5e11,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: () => `All Glyph Sacrifice totals are increased to ${format(1e100)}`,\r\n effect: DC.E100,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Planar Purification\",\r\n id: 23,\r\n cost: 6e14,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reach Glyph level ${formatInt(20000)} in Ra's Reality with\r\n at most ${formatInt(0)} Glyphs equipped`;},\r\n hasFailed: () => !Ra.isRunning || player.requirementChecks.reality.maxGlyphs > 0,\r\n checkRequirement: () => Ra.isRunning && player.requirementChecks.reality.maxGlyphs <= 0 &&\r\n gainedGlyphLevel().actualLevel >= 20000,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: \"Increase free Dimboost count based on Tesseract count\",\r\n effect: () => Math.max((Math.floor(0.25 * Math.pow(Tesseracts.effectiveCount, 2))), 1),\r\n formatEffect: value => `${formatX(value)}`,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Absolute Annulment\",\r\n id: 24,\r\n cost: 6e14,\r\n // We unfortunately don't have the UI space to be more descriptive on this button without causing text overflow,\r\n // so hopefully the additional modals (from the upgrade lock) will mostly communicate the idea that this is under\r\n // the same conditions as hard V's Post-destination\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`Have ${formatInt(13000)} Antimatter Galaxies in Ra's Reality\r\n with a fully inverted Black Hole`;},\r\n hasFailed: () => !Ra.isRunning || player.requirementChecks.reality.slowestBH > 1e-300,\r\n checkRequirement: () => Ra.isRunning && player.requirementChecks.reality.slowestBH <= 1e-300 &&\r\n player.galaxies >= 13000,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: true,\r\n // Three locking events: uninvert, discharge, and entering (but not auto-completing) EC12\r\n description: \"Increase free Dimboost strength based on Singularity count\",\r\n effect: () => (Decimal.pow(player.celestials.laitela.singularities, 300)).clampMin(1),\r\n formatEffect: value => `${formatX(value, 2, 1)}`,\r\n isDisabledInDoomed: true\r\n },\r\n {\r\n name: \"Omnipresent Obliteration\",\r\n id: 25,\r\n cost: 1.6e15,\r\n formatCost: x => format(x, 1),\r\n requirement: () => {return MendingMilestone.eight.isReached ? \"None (20 Mend Milestone)\" : `Reach Reality in Lai'tela's Reality with all Dimensions disabled and\r\n at least ${formatInt(4)} empty Glyph slots`;},\r\n hasFailed: () =>{ \r\n if (!Laitela.isRunning || Laitela.maxAllowedDimension > 0){\r\n return true;\r\n }\r\n return MendingMilestone.four.isReached ? Glyphs.activeWithoutCompanion.length > 4 : Glyphs.activeWithoutCompanion.length > 1;\r\n },\r\n checkRequirement: () => {\r\n if(Laitela.isRunning && Laitela.maxAllowedDimension <= 0 && TimeStudy.reality.isBought){\r\n return MendingMilestone.four.isReached ? Glyphs.activeWithoutCompanion.length <= 4 : Glyphs.activeWithoutCompanion.length <= 1;\r\n }\r\n return false;\r\n },\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: true,\r\n lockEvent: \"equip another non-Companion Glyph\",\r\n description: \"Unlock Pelle, Celestial of Antimatter\",\r\n },\r\n];\r\n","import { DC } from \"../../constants\";\r\n\r\nconst rebuyable = props => {\r\n props.cost = () => getHybridCostScaling(\r\n player.reality.rebuyables[props.id],\r\n 1e30,\r\n props.initialCost,\r\n props.costMult,\r\n props.costMult / 10,\r\n DC.E309,\r\n 1e3,\r\n props.initialCost * props.costMult\r\n );\r\n const { effect } = props;\r\n props.effect = () => Math.pow(\r\n effect + ImaginaryUpgrade(props.id).effectOrDefault(0),\r\n player.reality.rebuyables[props.id] * getAdjustedGlyphEffect(\"realityrow1pow\"));\r\n props.description = () => props.textTemplate.replace(\"{value}\",\r\n ImaginaryUpgrade(props.id).effectValue === 0\r\n ? formatInt(effect)\r\n : format(effect + ImaginaryUpgrade(props.id).effectValue, 2, 2));\r\n props.formatEffect = value => formatX(value, 2, 0);\r\n props.formatCost = value => format(value, 2, 0);\r\n return props;\r\n};\r\n\r\n\r\nexport const realityUpgrades = [\r\n rebuyable({\r\n name: \"Temporal Amplifier\",\r\n id: 1,\r\n initialCost: 1,\r\n costMult: 30,\r\n textTemplate: \"You gain Dilated Time {value} times faster\",\r\n effect: 3\r\n }),\r\n rebuyable({\r\n name: \"Replicative Amplifier\",\r\n id: 2,\r\n initialCost: 1,\r\n costMult: 30,\r\n textTemplate: \"You gain Replicanti {value} times faster\",\r\n effect: 3\r\n }),\r\n rebuyable({\r\n name: \"Eternal Amplifier\",\r\n id: 3,\r\n initialCost: 2,\r\n costMult: 30,\r\n textTemplate: \"You gain {value} times more Eternities\",\r\n effect: 3\r\n }),\r\n rebuyable({\r\n name: \"Superluminal Amplifier\",\r\n id: 4,\r\n initialCost: 2,\r\n costMult: 30,\r\n textTemplate: \"You gain {value} times more Tachyon Particles\",\r\n effect: 3\r\n }),\r\n rebuyable({\r\n name: \"Boundless Amplifier\",\r\n id: 5,\r\n initialCost: 3,\r\n costMult: 50,\r\n textTemplate: \"You gain {value} times more Infinities\",\r\n effect: 5\r\n }),\r\n {\r\n name: \"Cosmically Duplicate\",\r\n id: 6,\r\n cost: 15,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : \"Complete your first manual Eternity without using Replicanti Galaxies\";\r\n },\r\n // Note that while noRG resets on eternity, the reality-level check will be false after the first eternity.\r\n // The noRG variable is eternity-level as it's also used for an achievement check\r\n hasFailed: () => !(player.requirementChecks.eternity.noRG && player.requirementChecks.reality.noEternities),\r\n checkRequirement: () => player.requirementChecks.eternity.noRG && player.requirementChecks.reality.noEternities,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n canLock: true,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"Replicanti speed is multiplied based on Replicanti Galaxies\",\r\n effect: () => 1 + Replicanti.galaxies.total / 50,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Innumerably Construct\",\r\n id: 7,\r\n cost: 15,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :\"Complete your first Infinity with at most 1 Antimatter Galaxy\";\r\n },\r\n hasFailed: () => !(player.galaxies <= 1 && player.requirementChecks.reality.noInfinities),\r\n checkRequirement: () => player.galaxies <= 1 && player.requirementChecks.reality.noInfinities,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n canLock: true,\r\n lockEvent: \"gain another Antimatter Galaxy\",\r\n description: \"Infinity gain is boosted from Antimatter Galaxy count\",\r\n effect: () => 1 + player.galaxies / 30,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Paradoxically Attain\",\r\n id: 8,\r\n cost: 15,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : \"Manually Eternity without any automatic Achievements\";\r\n },\r\n hasFailed: () => player.reality.gainedAutoAchievements,\r\n checkRequirement: () => !player.reality.gainedAutoAchievements,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n canLock: true,\r\n // We don't have lockEvent because the modal can never show up for this upgrade\r\n description: \"Tachyon Particle gain is boosted based on Achievement multiplier\",\r\n effect: () => Decimal.sqrt(Achievements.power),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Linguistically Expand\",\r\n id: 9,\r\n cost: 15,\r\n requirement: () =>{ return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Eternity for ${format(\"1e4000\")} Eternity Points using\r\n only a single Glyph which must be level ${formatInt(3)}+.`;},\r\n hasFailed: () => {\r\n const invalidEquippedGlyphs = Glyphs.activeWithoutCompanion.length > 1 ||\r\n (Glyphs.activeWithoutCompanion.length === 1 && Glyphs.activeWithoutCompanion[0].level < 3);\r\n const hasValidGlyphInInventory = Glyphs.inventory.countWhere(g => g && g.level >= 3) > 0;\r\n return invalidEquippedGlyphs || (Glyphs.activeWithoutCompanion.length === 0 && !hasValidGlyphInInventory);\r\n },\r\n checkRequirement: () => Currency.eternityPoints.exponent >= 4000 &&\r\n Glyphs.activeWithoutCompanion.length === 1 && Glyphs.activeWithoutCompanion[0].level >= 3,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n canLock: true,\r\n // There are two locking events - equipping a glyph with too low a level, and equipping a second glyph\r\n description: \"Gain another Glyph slot\",\r\n effect: () => 1\r\n },\r\n {\r\n name: \"Existentially Prolong\",\r\n id: 10,\r\n cost: 15,\r\n requirement: () =>{\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Complete your first manual Eternity with at least ${formatPostBreak(DC.E400)} Infinity Points`;\r\n },\r\n hasFailed: () => !player.requirementChecks.reality.noEternities,\r\n checkRequirement: () => Currency.infinityPoints.exponent >= 400 &&\r\n player.requirementChecks.reality.noEternities,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n canLock: true,\r\n lockEvent: \"Eternity\",\r\n bypassLock: () => Currency.infinityPoints.exponent >= 400,\r\n description: () => `Start every Reality with ${formatInt(100)} Eternities (also applies to current Reality)`,\r\n automatorPoints: 15,\r\n shortDescription: () => `Start with ${formatInt(100)} Eternities`,\r\n effect: () => 100\r\n },\r\n {\r\n name: \"The Boundless Flow\",\r\n id: 11,\r\n cost: 50,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `${format(Currency.infinitiesBanked.value, 2)}/${format(DC.E12)} Banked Infinities`;\r\n },\r\n checkRequirement: () => Currency.infinitiesBanked.exponent >= 12,\r\n checkEvent: [GAME_EVENT.ETERNITY_RESET_AFTER, GAME_EVENT.REALITY_FIRST_UNLOCKED],\r\n description: \"Every second, gain 10% of the Infinities you would normally gain by Infinitying\",\r\n automatorPoints: 5,\r\n shortDescription: () => `Continuous Infinity generation`,\r\n effect: () => gainedInfinities().times(0.1),\r\n formatEffect: value => `${format(value)} per second`\r\n },\r\n {\r\n name: \"The Knowing Existence\",\r\n id: 12,\r\n cost: 50,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Eternity for ${format(DC.E70)} Eternity Points without completing Eternity Challenge 1`;\r\n },\r\n hasFailed: () => (EternityChallenge(1).completions !== 0 && !MendingUpgrade(3).isBought),\r\n checkRequirement: () => (Currency.eternityPoints.exponent >= 70 && EternityChallenge(1).completions === 0) || (Currency.eternityPoints.exponent >= 70 && MendingUpgrade(3).isBought),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n canLock: true,\r\n lockEvent: \"complete Eternity Challenge 1\",\r\n description: \"Eternity Point multiplier based on Reality and Time Theorem count\",\r\n effect: () => { \r\n let x = BreakInfinityUpgrade.infinitiedGen.chargedEffect.isEffectActive ? Infinity : 10000; \r\n return Currency.timeTheorems.value.minus(DC.E3).clampMin(2).pow(Math.log2(Math.min(Currency.realities.value, x))).clampMin(1)},\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"The Telemechanical Process\",\r\n id: 13,\r\n cost: 50,\r\n requirement: () => { \r\n return MendingMilestone.one.isReached ? \"None (1 Mend Milestone)\" : `Eternity for ${format(DC.E4000)} Eternity Points without Time Dim. 5-8`;\r\n },\r\n hasFailed: () => !Array.range(5, 4).every(i => TimeDimension(i).amount.equals(0)),\r\n checkRequirement: () => Currency.eternityPoints.exponent >= 4000 &&\r\n Array.range(5, 4).every(i => TimeDimension(i).amount.equals(0)),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n canLock: true,\r\n lockEvent: \"purchase a Time Dimension above the 4th TD\",\r\n description: () => `Improve Eternity Autobuyer and unlock autobuyers for Time Dimensions and ${formatX(5)} EP`,\r\n automatorPoints: 10,\r\n shortDescription: () => `TD and ${formatX(5)} EP Autobuyers, improved Eternity Autobuyer`,\r\n },\r\n {\r\n name: \"The Eternal Flow\",\r\n id: 14,\r\n cost: 50,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`${format(Currency.eternities.value, 2)}/${format(1e7)} Eternities`;\r\n },\r\n checkRequirement: () => Currency.eternities.gte(1e7),\r\n checkEvent: [GAME_EVENT.ETERNITY_RESET_AFTER, GAME_EVENT.REALITY_FIRST_UNLOCKED],\r\n description: \"Gain Eternities per second equal to your Reality count\",\r\n automatorPoints: 5,\r\n shortDescription: () => `Continuous Eternity generation`,\r\n effect: () => new Decimal(Currency.realities.value).times(Ra.unlocks.continuousTTBoost.effects.eternity.effectOrDefault(1)).min(1e308).toNumber(),\r\n formatEffect: value => `${format(value)} per second`\r\n },\r\n {\r\n name: \"The Paradoxical Forever\",\r\n id: 15,\r\n cost: 50,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Have ${format(DC.E10)} Eternity Points without purchasing\r\n the ${formatX(5)} Eternity Point upgrade`;},\r\n hasFailed: () => player.epmultUpgrades !== 0,\r\n checkRequirement: () => Currency.eternityPoints.exponent >= 10 && player.epmultUpgrades === 0,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n canLock: true,\r\n lockEvent: () => `purchase a ${formatX(5)} EP upgrade`,\r\n description: () => `Boost Tachyon Particle gain based on ${formatX(5)} Eternity Point multiplier`,\r\n effect: () => Math.max(Math.sqrt(Decimal.log10(EternityUpgrade.epMult.effectValue)) / 9, 1),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Disparity of Rarity\",\r\n id: 16,\r\n cost: 1500,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reality with at least ${formatInt(4)} Glyphs equipped of uncommon or better rarity\r\n (${formatInt(Glyphs.activeWithoutCompanion.countWhere(g => g && g.strength >= 1.5))} equipped)`;\r\n },\r\n hasFailed: () => {\r\n const availableGlyphs = Glyphs.inventory.countWhere(g => g && g.strength >= 1.5);\r\n const equipped = Glyphs.activeWithoutCompanion.countWhere(g => g.strength >= 1.5);\r\n const availableSlots = Glyphs.activeSlotCount - Glyphs.activeList.length;\r\n return equipped + Math.min(availableGlyphs, availableSlots) < 4;\r\n },\r\n checkRequirement: () => Glyphs.activeWithoutCompanion.countWhere(g => g.strength >= 1.5) >= 4,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: \"Improve the Glyph rarity formula\",\r\n effect: 1.3,\r\n formatCost: value => format(value, 1, 0)\r\n },\r\n {\r\n name: \"Duplicity of Potency\",\r\n id: 17,\r\n cost: 1500,\r\n requirement: () => {\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reality with at least ${formatInt(4)} Glyphs equipped, each having at least ${formatInt(2)} effects\r\n (${formatInt(Glyphs.activeWithoutCompanion.countWhere(g => g && countValuesFromBitmask(g.effects) >= 2))}\r\n equipped)`\r\n },\r\n hasFailed: () => {\r\n const availableGlyphs = Glyphs.inventory.countWhere(g => g && countValuesFromBitmask(g.effects) >= 2);\r\n const equipped = Glyphs.activeWithoutCompanion.countWhere(g => countValuesFromBitmask(g.effects) >= 2);\r\n const availableSlots = Glyphs.activeSlotCount - Glyphs.activeList.length;\r\n return equipped + Math.min(availableGlyphs, availableSlots) < 4;\r\n },\r\n checkRequirement: () => Glyphs.activeWithoutCompanion.countWhere(g => countValuesFromBitmask(g.effects) >= 2) >= 4,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: () => `${formatPercents(0.5)} chance to get an additional effect on Glyphs`,\r\n effect: 0.5,\r\n formatCost: value => format(value, 1, 0)\r\n },\r\n {\r\n name: \"Measure of Forever\",\r\n id: 18,\r\n cost: 1500,\r\n requirement: () => { return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reality with at least ${formatInt(4)} Glyphs equipped, each at level ${formatInt(10)} or higher\r\n (${formatInt(Glyphs.activeWithoutCompanion.countWhere(g => g && g.level >= 10))} equipped)`;},\r\n hasFailed: () => {\r\n const availableGlyphs = Glyphs.inventory.countWhere(g => g && g.level >= 10);\r\n const equipped = Glyphs.activeWithoutCompanion.countWhere(g => g.level >= 10);\r\n const availableSlots = Glyphs.activeSlotCount - Glyphs.activeList.length;\r\n return equipped + Math.min(availableGlyphs, availableSlots) < 4;\r\n },\r\n checkRequirement: () => Glyphs.activeWithoutCompanion.countWhere(g => g.level >= 10) >= 4,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: \"Eternity count boosts Glyph level\",\r\n effect: () => Math.max(Math.sqrt(Currency.eternities.value.plus(1).log10()) * 0.45, 1),\r\n formatCost: value => format(value, 1, 0)\r\n },\r\n {\r\n name: \"Scour to Empower\",\r\n id: 19,\r\n cost: 1500,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Have a total of ${formatInt(30)} or more Glyphs at once\r\n (You have ${formatInt(Glyphs.allGlyphs.countWhere(g => g.type !== \"companion\"))})`},\r\n hasFailed: () => Glyphs.allGlyphs.countWhere(g => g.type !== \"companion\") < 30,\r\n checkRequirement: () => Glyphs.allGlyphs.countWhere(g => g.type !== \"companion\") >= 30,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: \"You can sacrifice Glyphs for permanent bonuses (Shift + click)\",\r\n formatCost: value => format(value, 1, 0)\r\n },\r\n {\r\n name: \"Parity of Singularity\",\r\n id: 20,\r\n cost: 1500,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`${formatInt(100)} days total play time after unlocking the Black Hole\r\n (Currently: ${Time.timeSinceBlackHole.toStringShort(false)})`},\r\n hasFailed: () => !BlackHole(1).isUnlocked && Currency.realityMachines.lt(100),\r\n checkRequirement: () => Time.timeSinceBlackHole.totalDays.gte(100) && BlackHole(1).isUnlocked,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: \"Unlock another Black Hole\",\r\n automatorPoints: 10,\r\n shortDescription: () => `Second Black Hole`,\r\n formatCost: value => format(value, 1, 0)\r\n },\r\n {\r\n name: \"Cosmic Conglomerate\",\r\n id: 21,\r\n cost: 100000,\r\n requirement: () =>{\r\n return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `${formatInt(Replicanti.galaxies.total + player.galaxies +\r\n player.dilation.totalTachyonGalaxies)}/${formatInt(2800)} total Galaxies from all types`;\r\n },\r\n checkRequirement: () =>\r\n Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies >= 2800,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: () => `Remote Antimatter Galaxy scaling is moved to ${formatInt(1e5)} galaxies`,\r\n effect: 1e5\r\n },\r\n {\r\n name: \"Temporal Transcendence\",\r\n id: 22,\r\n cost: 100000,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`${format(Currency.timeShards.value, 1)}/${format(DC.E28000)} Time Shards`;},\r\n checkRequirement: () => Currency.timeShards.exponent >= 28000,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n description: \"Time Dimension multiplier based on days spent in this Reality\",\r\n effect: () => Decimal.pow10(Math.pow(1 + 2 * Decimal.log10(Time.thisReality.totalDays.add(1)), 1.6)),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Replicative Rapidity\",\r\n id: 23,\r\n cost: 100000,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reality in under ${formatInt(15)} minutes of game time\r\n (Fastest: ${Time.bestReality.toStringShort()})`;},\r\n hasFailed: () => Time.thisReality.totalMinutes.gte(15),\r\n checkRequirement: () => Time.thisReality.totalMinutes.lt(15),\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: \"Replicanti speed is boosted based on your fastest game-time Reality\",\r\n effect: () => 15 / Decimal.clamp(Time.bestReality.totalMinutes, 1 / 12, 15).toNumber(),\r\n cap: 180,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Synthetic Symbolism\",\r\n id: 24,\r\n cost: 100000,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" : `Reality for ${formatInt(5000)} Reality Machines without equipped Glyphs`;},\r\n hasFailed: () => Glyphs.activeWithoutCompanion.length > 0,\r\n checkRequirement: () => MachineHandler.gainedRealityMachines.gte(5000) &&\r\n Glyphs.activeWithoutCompanion.length === 0,\r\n canLock: true,\r\n lockEvent: \"equip a non-Companion Glyph\",\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n description: \"Gain another Glyph slot\",\r\n effect: () => 1\r\n },\r\n {\r\n name: \"Effortless Existence\",\r\n id: 25,\r\n cost: 100000,\r\n requirement: () => {return MendingMilestone.four.isReached ? \"None (5 Mend Milestone)\" :`Reach ${format(DC.E11111)} EP (Best: ${format(player.records.bestReality.bestEP, 2)} EP)`;},\r\n checkRequirement: () => player.records.bestReality.bestEP.exponent >= 11111,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n description: \"Unlock the Reality autobuyer and Automator command\",\r\n automatorPoints: 100,\r\n shortDescription: () => `Reality Autobuyer`,\r\n },\r\n];\r\n","import { cosmeticGlyphs, glyphTypes } from \"./glyph-types\";\r\nimport { perkConnections, perks } from \"./perks\";\r\n\r\nimport { automator } from \"./automator\";\r\nimport { glyphCosmeticSets } from \"./glyph-cosmetics\";\r\nimport { glyphEffects } from \"./glyph-effects\";\r\nimport { glyphSacrifice } from \"./glyph-sacrifices\";\r\nimport { imaginaryUpgrades } from \"./imaginary-upgrades\";\r\nimport { realityUpgrades } from \"./reality-upgrades\";\r\n\r\nexport const reality = {\r\n automator,\r\n cosmeticGlyphs,\r\n glyphCosmeticSets,\r\n glyphEffects,\r\n glyphSacrifice,\r\n glyphTypes,\r\n imaginaryUpgrades,\r\n perks,\r\n perkConnections,\r\n upgrades: realityUpgrades\r\n};\r\n","import { reality } from \"@/core/secret-formula/reality\";\r\n\r\n/**\r\n * Every entry in this object is a styling specification for bars within the multiplier tab.\r\n * {\r\n * @property {String} text String specifying the color to render the background of the bar (often a CSS var)\r\n * @property {String} symbol String to show as text on the bar, may be HTML (allows for font awesome icons)\r\n * @property {String} textColor A text color to override the default --color-text for better contrast\r\n * }\r\n */\r\nexport const MultiplierTabIcons = {\r\n DIMENSION(type, tier) {\r\n const tierText = tier ?? \"\";\r\n switch (type) {\r\n case \"AD\":\r\n return { symbol: `Ω${tierText}`, color: \"var(--color-antimatter)\" };\r\n case \"ID\":\r\n return { symbol: `∞${tierText}`, color: \"var(--color-infinity)\" };\r\n case \"TD\":\r\n return { symbol: `Δ${tierText}`, color: \"var(--color-eternity)\" };\r\n default:\r\n throw new Error(\"Unrecognized dimension type in multiplier tab icons\");\r\n }\r\n },\r\n PURCHASE(type, tier) {\r\n const symbol = `${tier ?? \"\"}`;\r\n switch (type) {\r\n case \"AD\":\r\n return { symbol, color: \"var(--color-antimatter)\" };\r\n case \"ID\":\r\n return { symbol, color: \"var(--color-infinity)\" };\r\n case \"TD\":\r\n return { symbol, color: \"var(--color-eternity)\" };\r\n case \"baseID\":\r\n return { symbol: ``, color: \"var(--color-infinity)\" };\r\n case \"tesseractID\":\r\n return {\r\n symbol: ``,\r\n color: \"var(--color-enslaved--base)\"\r\n };\r\n default:\r\n throw new Error(\"Unrecognized purchase type in multiplier tab icons\");\r\n }\r\n },\r\n CHALLENGE(type, tier) {\r\n const tierText = `${tier ?? \"\"}`;\r\n switch (type) {\r\n case \"infinity\":\r\n return { symbol: `${tierText}`, color: \"var(--color-infinity)\" };\r\n case \"eternity\":\r\n return { symbol: `Δ${tierText}`, color: \"var(--color-eternity)\" };\r\n default:\r\n throw new Error(\"Unrecognized challenge type in multiplier tab icons\");\r\n }\r\n },\r\n // Regular sacrifice and glyph sacrifice\r\n SACRIFICE(type) {\r\n const icon = ``;\r\n switch (type) {\r\n case \"antimatter\":\r\n return { symbol: `Ω${icon}`, color: \"var(--color-antimatter)\" };\r\n case \"infinity\":\r\n return { symbol: `${icon}`, color: \"var(--color-infinity)\" };\r\n case \"time\":\r\n return { symbol: `Δ${icon}`, color: \"var(--color-eternity)\" };\r\n case \"dilation\":\r\n return { symbol: `Ψ${icon}`, color: \"var(--color-dilation)\", textColor: \"black\" };\r\n default:\r\n throw new Error(\"Unrecognized sacrifice type in multiplier tab icons\");\r\n }\r\n },\r\n UPGRADE(type) {\r\n const icon = ``;\r\n switch (type) {\r\n case \"infinity\":\r\n return { symbol: `${icon}`, color: \"var(--color-infinity)\" };\r\n case \"eternity\":\r\n return { symbol: `Δ${icon}`, color: \"var(--color-eternity)\" };\r\n case \"dilation\":\r\n return { symbol: `Ψ${icon}`, color: \"var(--color-dilation)\" };\r\n case \"reality\":\r\n return { symbol: `Ϟ${icon}`, color: \"var(--color-reality)\" };\r\n case \"imaginary\":\r\n return { symbol: `${icon}`, color: \"var(--color-ra--base)\" };\r\n case \"corruption\":\r\n return {symbol: `${icon}`, color: `var(--color-mending)`}\r\n default:\r\n throw new Error(\"Unrecognized upgrade type in multiplier tab icons\");\r\n }\r\n },\r\n // Icons for base IP/EP\r\n CONVERT_FROM(currency) {\r\n if (currency === \"AM\") {\r\n return {\r\n symbol: ``,\r\n color: \"var(--color-antimatter)\",\r\n };\r\n }\r\n if (currency === \"IP\") {\r\n return {\r\n symbol: ``,\r\n color: \"var(--color-infinity)\",\r\n };\r\n }\r\n return {};\r\n },\r\n // IP and EP formula divisors\r\n DIVISOR(currency) {\r\n let color;\r\n if (currency === \"IP\") color = \"var(--color-infinity)\";\r\n if (currency === \"EP\") color = \"var(--color-eternity)\";\r\n return {\r\n symbol: ``,\r\n color,\r\n };\r\n },\r\n ANTIMATTER: {\r\n symbol: ``,\r\n color: \"var(--color-antimatter)\",\r\n },\r\n DIMBOOST: {\r\n symbol: ``,\r\n color: reality.glyphTypes.power.color,\r\n },\r\n TICKSPEED: {\r\n symbol: ``,\r\n color: \"var(--color-eternity)\",\r\n },\r\n GALAXY: {\r\n symbol: ``,\r\n color: \"var(--color-eternity)\",\r\n },\r\n ACHIEVEMENT: {\r\n symbol: ``,\r\n color: \"var(--color-v--base)\",\r\n textColor: \"black\",\r\n },\r\n BREAK_INFINITY: {\r\n symbol: ``,\r\n color: \"var(--color-infinity)\",\r\n textColor: \"black\",\r\n },\r\n INFINITY_POWER: {\r\n symbol: ``,\r\n color: \"var(--color-infinity)\",\r\n textColor: \"black\",\r\n },\r\n IPOW_CONVERSION: {\r\n symbol: ``,\r\n color: \"var(--color-infinity)\",\r\n textColor: \"black\",\r\n },\r\n TIME_STUDY: {\r\n symbol: ``,\r\n color: \"var(--color-eternity)\",\r\n },\r\n TACHYON_PARTICLES: {\r\n symbol: ``,\r\n color: \"var(--color-dilation)\",\r\n },\r\n GENERIC_GLYPH: {\r\n symbol: ``,\r\n color: \"var(--color-reality)\",\r\n },\r\n SPECIFIC_GLYPH(type) {\r\n return {\r\n symbol: `${reality.glyphTypes[type].symbol}`,\r\n color: reality.glyphTypes[type].color,\r\n };\r\n },\r\n BLACK_HOLE: {\r\n symbol: ``,\r\n color: \"var(--color-reality)\",\r\n },\r\n GAMESPEED: {\r\n symbol: ``,\r\n color: \"var(--color-reality)\",\r\n },\r\n GENERIC_TERESA: {\r\n symbol: \"Ϟ\",\r\n color: \"var(--color-teresa--base)\",\r\n },\r\n GENERIC_ENSLAVED: {\r\n symbol: `
\\uf0c1
`,\r\n color: \"var(--color-enslaved--base)\",\r\n },\r\n GENERIC_V: {\r\n symbol: \"\",\r\n color: \"var(--color-v--base)\",\r\n textColor: \"black\",\r\n },\r\n GENERIC_RA: {\r\n symbol: ``,\r\n color: \"var(--color-ra--base)\",\r\n },\r\n ALCHEMY: {\r\n symbol: ``,\r\n color: \"var(--color-ra-pet--effarig)\",\r\n },\r\n BH_PULSE: {\r\n symbol: ``,\r\n color: \"var(--color-reality)\",\r\n },\r\n GENERIC_LAITELA: {\r\n symbol: \"\",\r\n color: \"var(--color-laitela--base)\",\r\n textColor: \"var(--color-laitela--accent)\",\r\n },\r\n SINGULARITY: {\r\n symbol: ``,\r\n color: \"var(--color-laitela--base)\",\r\n textColor: \"var(--color-laitela--accent)\",\r\n },\r\n PELLE: {\r\n symbol: \"\",\r\n color: \"var(--color-pelle--base)\",\r\n },\r\n MENDINGMILESTONE: {\r\n symbol: \"\",\r\n color: \"var(--color-mending)\",\r\n },\r\n IAP: {\r\n symbol: ``,\r\n color: \"var(--color-accent)\",\r\n },\r\n CORRUPTION: {\r\n symbol: ``,\r\n color: `var(--color-mending)`,\r\n },\r\n CORRUPTION_BONUS: {\r\n symbol: `++`,\r\n color: `var(--color-mending)`,\r\n },\r\n SOFTCAP(type) {\r\n switch (type) {\r\n case \"infinity\":\r\n return {\r\n symbol: ``,\r\n color: `var(--color-infinity)`\r\n } \r\n case \"eternity\":\r\n return {\r\n symbol: ``,\r\n color: `var(--color-eternity)`\r\n } \r\n case \"dilation\":\r\n return {\r\n symbol: ``,\r\n color: `var(--color-dilation)`\r\n } \r\n case \"reality\":\r\n return {\r\n symbol: ``,\r\n color: `var(--color-reality)`\r\n } \r\n case \"imaginary\":\r\n return {\r\n symbol: ``,\r\n color: `var(--color-ra--base)`\r\n } \r\n case \"corruption\":\r\n return {\r\n symbol: ``,\r\n color: `var(--color-mending)`\r\n } \r\n default:\r\n throw new Error(\"Unrecognized upgrade type in multiplier tab icons\");\r\n };\r\n }\r\n};\r\n","import { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const AM = {\r\n total: {\r\n name: \"Antimatter Production\",\r\n displayOverride: () => `${format(Currency.antimatter.productionPerSecond, 2, 2)}/sec`,\r\n multValue: () => new Decimal(Currency.antimatter.productionPerSecond).clampMin(1),\r\n isActive: true,\r\n overlay: [\"\"],\r\n },\r\n effarigAM: {\r\n name: \"Glyph Effect - Effarig Antimatter Production\",\r\n powValue: () => {\r\n const ad1 = AntimatterDimension(1);\r\n const baseProd = ad1.totalAmount.times(ad1.multiplier).times(Tickspeed.perSecond);\r\n return Math.pow(baseProd.log10(), getAdjustedGlyphEffect(\"effarigantimatter\") - 1);\r\n },\r\n isActive: () => getAdjustedGlyphEffect(\"effarigantimatter\") > 1 && AntimatterDimension(1).isProducing,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"effarig\"),\r\n }\r\n};\r\n","export class PlayerProgress {\r\n constructor(player) {\r\n this._player = player;\r\n }\r\n\r\n get isInfinityUnlocked() {\r\n // Infinity count data is stored in either player.infinitied or player.infinities based on if the save is before\r\n // or after the reality update, but this also gets checked in the import modal before any migration code is run.\r\n // Thus, it needs to manually support \"before\" and \"after\" states by converting both to Decimal.\r\n const infinityData = this._player.infinitied ? this._player.infinitied : this._player.infinities;\r\n return new Decimal(infinityData).gt(0) || this.isEternityUnlocked;\r\n }\r\n\r\n get isEternityUnlocked() {\r\n // Similarly to above, player.eternities is a number pre-reality update and a Decimal post-reality update\r\n return new Decimal(this._player.eternities).gt(0) || this.isRealityUnlocked;\r\n }\r\n\r\n get isRealityUnlocked() {\r\n return this._player.realities > 0 || this.isMendingUnlocked;\r\n }\r\n\r\n get hasFullCompletion() {\r\n return this._player.records?.fullGameCompletions > 0;\r\n }\r\n\r\n static get current() {\r\n return new PlayerProgress(player);\r\n }\r\n\r\n static of(player) {\r\n return new PlayerProgress(player);\r\n }\r\n\r\n static infinityUnlocked() {\r\n return PlayerProgress.current.isInfinityUnlocked;\r\n }\r\n\r\n static hasBroken() {\r\n return player.break || this.isEternityUnlocked || this.isRealityUnlocked || this.isMendingUnlocked;\r\n }\r\n\r\n static replicantiUnlocked() {\r\n return Replicanti.areUnlocked || this.isEternityUnlocked;\r\n }\r\n\r\n static eternityUnlocked() {\r\n return PlayerProgress.current.isEternityUnlocked;\r\n }\r\n\r\n static dilationUnlocked() {\r\n return TimeStudy.dilation.isBought;\r\n }\r\n\r\n static realityUnlocked() {\r\n return PlayerProgress.current.isRealityUnlocked;\r\n }\r\n\r\n static seenAlteredSpeed() {\r\n const ec12 = EternityChallenge(12);\r\n return this.realityUnlocked() || ec12.completions > 0 || ec12.isRunning;\r\n }\r\n\r\n static challengeCompleted() {\r\n return NormalChallenges.all.slice(1).some(c => c.isCompleted);\r\n }\r\n\r\n static infinityChallengeCompleted() {\r\n return InfinityChallenges.all.some(c => c.isCompleted);\r\n }\r\n\r\n //Custom Progress booleans starts here\r\n\r\n get isMendingUnlocked() {\r\n return new Decimal(this._player.mends).gt(new Decimal(0));\r\n }\r\n\r\n static mendingUnlocked(){\r\n return PlayerProgress.current.isMendingUnlocked\r\n }\r\n\r\n\r\n}\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const MultiplierTabHelper = {\r\n // Helper method for counting enabled dimensions\r\n activeDimCount(type) {\r\n switch (type) {\r\n case \"AD\":\r\n // Technically not 100% correct, but within EC7 any AD8 production is going to be irrelevant compared to AD7\r\n // and making the UI behave as if it's inactive produces a better look overall\r\n return Math.clamp(AntimatterDimensions.all.filter(ad => ad.isProducing).length,\r\n 1, EternityChallenge(7).isRunning ? 7 : 8);\r\n case \"ID\":\r\n return InfinityDimensions.all.filter(id => id.isProducing).length;\r\n case \"TD\":\r\n return TimeDimensions.all.filter(td => td.isProducing).length;\r\n default:\r\n throw new Error(\"Unrecognized Dimension type in Multiplier tab GameDB entry\");\r\n }\r\n },\r\n\r\n // Helper method for galaxy strength multipliers affecting all galaxy types (this is used a large number of times)\r\n globalGalaxyMult() {\r\n return Effects.product(\r\n InfinityUpgrade.galaxyBoost,\r\n InfinityUpgrade.galaxyBoost.chargedEffect,\r\n BreakInfinityUpgrade.galaxyBoost,\r\n TimeStudy(212),\r\n TimeStudy(232),\r\n Achievement(86),\r\n Achievement(178),\r\n InfinityChallenge(5).reward,\r\n PelleUpgrade.galaxyPower,\r\n PelleRifts.decay.milestones[1]\r\n ) * (Ra.unlocks.improvedECRewards.isUnlocked ? EternityChallenge(8).vReward.effectValue : 1) * Pelle.specialGlyphEffect.power * (player.galBoostPoints.eq(0) ? 1 : (player.galBoostPoints.pow(1/(player.galBoostPoints.log10() ** 0.8))).div(100).add(1).toNumber());\r\n },\r\n\r\n // Helper method for galaxies and tickspeed, broken up as contributions of tickspeed*log(perGalaxy) and galaxyCount to\r\n // their product, which is proportional to log(tickspeed)\r\n decomposeTickspeed() {\r\n let effectiveCount = effectiveBaseGalaxies();\r\n const effects = this.globalGalaxyMult();\r\n\r\n let galFrac, tickFrac;\r\n if (effectiveCount < 3) {\r\n let baseMult = 1.1245;\r\n if (player.galaxies === 1) baseMult = 1.11888888;\r\n if (player.galaxies === 2) baseMult = 1.11267177;\r\n if (NormalChallenge(5).isRunning) {\r\n baseMult = 1.08;\r\n if (player.galaxies === 1) baseMult = 1.07632;\r\n if (player.galaxies === 2) baseMult = 1.072;\r\n }\r\n // This is needed for numerical consistency with the other conditional case\r\n baseMult /= 0.965 ** 2;\r\n const logBase = Math.log10(baseMult);\r\n\r\n const perGalaxy = 0.02 * effects;\r\n effectiveCount *= Pelle.specialGlyphEffect.power;\r\n\r\n tickFrac = Tickspeed.totalUpgrades * logBase;\r\n galFrac = -Math.log10(Math.max(0.01, 1 / baseMult - (effectiveCount * perGalaxy))) / logBase;\r\n } else {\r\n effectiveCount -= 2;\r\n effectiveCount *= effects;\r\n effectiveCount *= getAdjustedGlyphEffect(\"realitygalaxies\") * (1 + ImaginaryUpgrade(9).effectOrDefault(0));\r\n effectiveCount *= Pelle.specialGlyphEffect.power;\r\n\r\n // These all need to be framed as INCREASING x/sec tick rate (ie. all multipliers > 1, all logs > 0)\r\n const baseMult = 0.965 ** 2 / (NormalChallenge(5).isRunning ? 0.83 : 0.8);\r\n const logBase = Math.log10(baseMult);\r\n const logPerGalaxy = -DC.D0_965.log10();\r\n\r\n tickFrac = Tickspeed.totalUpgrades * logBase;\r\n galFrac = (1 + effectiveCount / logBase * logPerGalaxy);\r\n }\r\n\r\n // Artificially inflate the galaxy portion in order to make the breakdown closer to 50/50 in common situations\r\n galFrac *= 3;\r\n\r\n // Calculate what proportion base tickspeed takes out of the entire tickspeed multiplier\r\n const base = DC.D1.dividedByEffectsOf(\r\n Achievement(36),\r\n Achievement(45),\r\n Achievement(66),\r\n Achievement(83)\r\n );\r\n let baseFrac = base.log10() / Tickspeed.perSecond.log10();\r\n\r\n // We want to make sure to zero out components in some edge cases\r\n if (base.eq(1)) baseFrac = 0;\r\n if (effectiveCount === 0) galFrac = 0;\r\n\r\n // Normalize the sum by splitting tickspeed and galaxies across what's leftover besides the base value. These three\r\n // values must be scaled so that they sum to 1 and none are negative\r\n let factor = (1 - baseFrac) / (tickFrac + galFrac);\r\n // The actual base tickspeed calculation multiplies things in a different order, which can lead to precision issues\r\n // when no tickspeed upgrades have been bought if we don't explicitly set this to zero\r\n if (Tickspeed.totalUpgrades === 0) factor = 0;\r\n return {\r\n base: baseFrac,\r\n tickspeed: tickFrac * factor,\r\n galaxies: galFrac * factor,\r\n };\r\n },\r\n\r\n // Helper method to check for whether an achievement affects a particular dimension or not. Format of dimStr is\r\n // expected to be a three-character string \"XXN\", eg. \"AD3\" or \"TD2\"\r\n achievementDimCheck(ach, dimStr) {\r\n switch (ach) {\r\n case 23:\r\n return dimStr === \"AD8\";\r\n case 28:\r\n case 31:\r\n case 68:\r\n case 71:\r\n return dimStr === \"AD1\";\r\n case 94:\r\n return dimStr === \"ID1\";\r\n case 34:\r\n return dimStr.substr(0, 2) === \"AD\" && Number(dimStr.charAt(2)) !== 8;\r\n case 64:\r\n return dimStr.substr(0, 2) === \"AD\" && Number(dimStr.charAt(2)) <= 4;\r\n default:\r\n return true;\r\n }\r\n },\r\n\r\n // Helper method to check for whether a time study affects a particular dimension or not, see achievementDimCheck()\r\n timeStudyDimCheck(ts, dimStr) {\r\n switch (ts) {\r\n case 11:\r\n return dimStr === \"TD1\";\r\n case 71:\r\n return dimStr.substr(0, 2) === \"AD\" && Number(dimStr.charAt(2)) !== 8;\r\n case 72:\r\n return dimStr === \"ID4\";\r\n case 73:\r\n return dimStr === \"TD3\";\r\n case 214:\r\n return dimStr === \"AD8\";\r\n case 227:\r\n return dimStr === \"TD4\";\r\n case 234:\r\n return dimStr === \"AD1\";\r\n default:\r\n return true;\r\n }\r\n },\r\n\r\n // Helper method to check for whether an IC reward affects a particular dimension or not, see achievementDimCheck()\r\n ICDimCheck(ic, dimStr) {\r\n switch (ic) {\r\n case 1:\r\n case 6:\r\n return dimStr.substr(0, 2) === \"ID\";\r\n case 3:\r\n case 4:\r\n return dimStr.substr(0, 2) === \"AD\";\r\n case 8:\r\n return dimStr.substr(0, 2) === \"AD\" && Number(dimStr.charAt(2)) > 1 && Number(dimStr.charAt(2)) < 8;\r\n default:\r\n return false;\r\n }\r\n },\r\n\r\n // Helper method to check for whether an EC reward affects a particular dimension or not, see achievementDimCheck()\r\n ECDimCheck(ec, dimStr) {\r\n switch (ec) {\r\n case 1:\r\n case 10:\r\n return dimStr.substr(0, 2) === \"TD\";\r\n case 2:\r\n return dimStr === \"ID1\";\r\n case 4:\r\n case 9:\r\n return dimStr.substr(0, 2) === \"ID\";\r\n case 7:\r\n return dimStr === \"ID8\";\r\n default:\r\n return false;\r\n }\r\n },\r\n\r\n blackHoleSpeeds() {\r\n const currBH = BlackHoles.list\r\n .filter(bh => bh.isUnlocked)\r\n .map(bh => (bh.isActive ? bh.power : 1))\r\n .reduce((x, y) => x * y, 1);\r\n\r\n // Calculate an average black hole speedup factor\r\n const bh1 = BlackHole(1);\r\n const bh2 = BlackHole(2);\r\n const avgBH = 1 + (bh1.isUnlocked ? bh1.dutyCycle * (bh1.power - 1) : 0) +\r\n (bh2.isUnlocked ? bh1.dutyCycle * bh2.dutyCycle * bh1.power * (bh2.power - 1) : 0);\r\n\r\n return {\r\n current: currBH,\r\n average: avgBH\r\n };\r\n },\r\n\r\n pluralizeDimensions(dims) {\r\n return dims === 1 ? \"Dimension\\xa0\" : \"Dimensions\";\r\n },\r\n\r\n // All of the following NC12-related functions are to make the parsing within the GameDB entry easier in terms of\r\n // which set of Dimensions are actually producing within NC12 - in nearly every case, one of the odd/even sets will\r\n // produce significantly more than the other, so we simply assume the larger one is active and the other isn't\r\n evenDimNC12Production() {\r\n const nc12Pow = tier => ([2, 4, 6].includes(tier) ? 0.1 * (8 - tier) : 0);\r\n const maxTier = Math.clampMin(2 * Math.floor(MultiplierTabHelper.activeDimCount(\"AD\") / 2), 2);\r\n return AntimatterDimensions.all\r\n .filter(ad => ad.isProducing && ad.tier % 2 === 0)\r\n .map(ad => ad.multiplier.times(ad.amount.pow(nc12Pow(ad.tier))))\r\n .reduce((x, y) => x.times(y), DC.D1)\r\n .times(AntimatterDimension(maxTier).totalAmount);\r\n },\r\n\r\n oddDimNC12Production() {\r\n const maxTier = Math.clampMin(2 * Math.floor(MultiplierTabHelper.activeDimCount(\"AD\") / 2 - 0.5) + 1, 1);\r\n return AntimatterDimensions.all\r\n .filter(ad => ad.isProducing && ad.tier % 2 === 1)\r\n .map(ad => ad.multiplier)\r\n .reduce((x, y) => x.times(y), DC.D1)\r\n .times(AntimatterDimension(maxTier).totalAmount);\r\n },\r\n\r\n actualNC12Production() {\r\n return Decimal.max(this.evenDimNC12Production(), this.oddDimNC12Production());\r\n },\r\n\r\n multInNC12(dim) {\r\n const nc12Pow = tier => ([2, 4, 6].includes(tier) ? 0.1 * (8 - tier) : 0);\r\n const ad = AntimatterDimension(dim);\r\n return ad.isProducing ? ad.multiplier.times(ad.totalAmount.pow(nc12Pow(dim))) : DC.D1;\r\n },\r\n\r\n isNC12ProducingEven() {\r\n return this.evenDimNC12Production().gt(this.oddDimNC12Production());\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { PlayerProgress } from \"../../player-progress\";\r\n\r\nimport { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const AD = {\r\n total: {\r\n name: dim => {\r\n if (dim) return `AD ${dim} Multiplier`;\r\n if (NormalChallenge(12).isRunning) {\r\n if (MultiplierTabHelper.actualNC12Production().eq(0)) return \"Base AD Production from All Dimensions\";\r\n return `Base AD Production from ${MultiplierTabHelper.isNC12ProducingEven() ? \"Even\" : \"Odd\"} Dimensions`;\r\n }\r\n return \"Base AD Production\";\r\n },\r\n displayOverride: dim => {\r\n if (dim) {\r\n const singleMult = NormalChallenge(12).isRunning\r\n ? MultiplierTabHelper.multInNC12(dim)\r\n : AntimatterDimension(dim).multiplier;\r\n return formatX(singleMult, 2, 2);\r\n }\r\n const maxTier = EternityChallenge(7).isRunning ? 7 : MultiplierTabHelper.activeDimCount(\"AD\");\r\n if (NormalChallenge(12).isRunning) return `${format(MultiplierTabHelper.actualNC12Production(), 2)}/sec`;\r\n return `${format(AntimatterDimensions.all\r\n .filter(ad => ad.isProducing)\r\n .map(ad => ad.multiplier)\r\n .reduce((x, y) => x.times(y), DC.D1)\r\n .times(AntimatterDimension(maxTier).totalAmount), 2)}/sec`;\r\n },\r\n multValue: dim => {\r\n if (NormalChallenge(12).isRunning) {\r\n const nc12Prod = MultiplierTabHelper.actualNC12Production();\r\n if (!dim) return nc12Prod.eq(0) ? 1 : nc12Prod;\r\n return (MultiplierTabHelper.isNC12ProducingEven() ? dim % 2 === 0 : dim % 2 === 1)\r\n ? MultiplierTabHelper.multInNC12(dim)\r\n : DC.D1;\r\n }\r\n const mult = dim\r\n ? AntimatterDimension(dim).multiplier\r\n : AntimatterDimensions.all\r\n .filter(ad => ad.isProducing)\r\n .map(ad => ad.multiplier)\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n const highestDim = AntimatterDimension(\r\n EternityChallenge(7).isRunning ? 7 : MultiplierTabHelper.activeDimCount(\"AD\")).totalAmount;\r\n return mult.times(highestDim).clampMin(1);\r\n },\r\n isActive: dim => (dim ? dim <= MultiplierTabHelper.activeDimCount(\"AD\") : true),\r\n dilationEffect: () => {\r\n const baseEff = (player.dilation.active || Enslaved.isRunning)\r\n ? 0.75 * Effects.product(DilationUpgrade.dilationPenalty)\r\n : 1;\r\n return baseEff * (Effarig.isRunning ? Effarig.multDilation : 1);\r\n },\r\n isDilated: true,\r\n overlay: [\"Ω\", \"\"],\r\n icon: dim => MultiplierTabIcons.DIMENSION(\"AD\", dim),\r\n },\r\n purchase: {\r\n name: dim => (dim ? `Purchased AD ${dim}` : \"Purchases\"),\r\n multValue: dim => {\r\n const getPurchases = ad => (Laitela.continuumActive\r\n ? AntimatterDimension(ad).continuumValue\r\n : Math.floor(AntimatterDimension(ad).bought / 10)\r\n );\r\n if (dim) return Decimal.pow(AntimatterDimensions.buyTenMultiplier, getPurchases(dim));\r\n return AntimatterDimensions.all\r\n .filter(ad => ad.isProducing)\r\n .map(ad => Decimal.pow(AntimatterDimensions.buyTenMultiplier, getPurchases(ad.tier)))\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n },\r\n isActive: () => !EternityChallenge(11).isRunning,\r\n icon: dim => MultiplierTabIcons.PURCHASE(\"AD\", dim),\r\n },\r\n highestDim: {\r\n name: () => `Amount of highest Dimension`,\r\n displayOverride: () => {\r\n const dim = EternityChallenge(7).isRunning ? 7 : MultiplierTabHelper.activeDimCount(\"AD\");\r\n return `AD ${dim}, ${format(AntimatterDimension(dim).totalAmount, 2)}`;\r\n },\r\n multValue: () => {\r\n const dim = EternityChallenge(7).isRunning ? 7 : MultiplierTabHelper.activeDimCount(\"AD\");\r\n return AntimatterDimension(dim).totalAmount;\r\n },\r\n isActive: () => AntimatterDimension(1).isProducing,\r\n icon: MultiplierTabIcons.DIMENSION(\"AD\"),\r\n },\r\n\r\n dimboost: {\r\n name: dim => (dim ? `Dimboosts on AD ${dim}` : \"Dimboosts\"),\r\n multValue: dim => (dim\r\n ? DimBoost.multiplierToNDTier(dim)\r\n : AntimatterDimensions.all\r\n .filter(ad => ad.isProducing)\r\n .map(ad => DimBoost.multiplierToNDTier(ad.tier))\r\n .reduce((x, y) => x.times(y), DC.D1)),\r\n isActive: true,\r\n icon: MultiplierTabIcons.DIMBOOST,\r\n },\r\n sacrifice: {\r\n name: \"Sacrifice Multiplier\",\r\n multValue: dim => ((!dim || dim === 8) ? Sacrifice.totalBoost : DC.D1),\r\n isActive: dim => (!dim || dim === 8) && Sacrifice.totalBoost.gt(1) && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.SACRIFICE(\"antimatter\"),\r\n },\r\n achievementMult: {\r\n name: \"Achievement Multiplier\",\r\n multValue: dim => Decimal.pow(Achievements.power, dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\")),\r\n isActive: () => !Pelle.isDoomed && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n achievement: {\r\n name: \"Achievement Rewards\",\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n Achievement(48),\r\n Achievement(56),\r\n Achievement(65),\r\n Achievement(72),\r\n Achievement(73),\r\n Achievement(74),\r\n Achievement(76),\r\n Achievement(84),\r\n Achievement(91),\r\n Achievement(92)\r\n );\r\n\r\n const dimMults = Array.repeat(DC.D1, 9);\r\n for (let tier = 1; tier <= 8; tier++) {\r\n if (tier === 1) {\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n Achievement(28),\r\n Achievement(31),\r\n Achievement(68),\r\n Achievement(71),\r\n );\r\n }\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n tier === 8 ? Achievement(23) : null,\r\n tier < 8 ? Achievement(34) : null,\r\n tier <= 4 ? Achievement(64) : null,\r\n );\r\n if (Achievement(43).isUnlocked) {\r\n dimMults[tier] = dimMults[tier].times(1 + tier / 100);\r\n }\r\n }\r\n\r\n if (dim) return allMult.times(dimMults[dim]);\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]).times(allMult);\r\n }\r\n return totalMult;\r\n },\r\n powValue: () => Achievement(183).effectOrDefault(1),\r\n isActive: () => !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n infinityUpgrade: {\r\n name: dim => (dim ? `Infinity Upgrades (AD ${dim})` : \"Infinity Upgrades\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n InfinityUpgrade.totalTimeMult,\r\n InfinityUpgrade.thisInfinityTimeMult,\r\n );\r\n\r\n const dimMults = Array.repeat(DC.D1, 9);\r\n for (let tier = 1; tier <= 8; tier++) {\r\n if (tier === 1) {\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n InfinityUpgrade.unspentIPMult,\r\n InfinityUpgrade.unspentIPMult.chargedEffect,\r\n );\r\n }\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n AntimatterDimension(tier).infinityUpgrade,\r\n );\r\n }\r\n\r\n if (dim) return allMult.times(dimMults[dim]);\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]).times(allMult);\r\n }\r\n return totalMult;\r\n },\r\n powValue: dim => {\r\n const allPow = InfinityUpgrade.totalTimeMult.chargedEffect.effectOrDefault(1) *\r\n InfinityUpgrade.thisInfinityTimeMult.chargedEffect.effectOrDefault(1);\r\n\r\n const dimPow = Array.repeat(1, 9);\r\n for (let tier = 1; tier <= 8; tier++) {\r\n dimPow[tier] = AntimatterDimension(tier).infinityUpgrade.chargedEffect.effectOrDefault(1);\r\n }\r\n\r\n if (dim) return allPow * dimPow[dim];\r\n // This isn't entirely accurate because you can't return a power for all ADs if only some of them actually have\r\n // it, so we cheat somewhat by returning the geometric mean of all actively producing dimensions (this should\r\n // be close to the same value if all the base multipliers are similar in magnitude)\r\n return allPow * Math.exp(dimPow.slice(1)\r\n .map(n => Math.log(n)).sum() / MultiplierTabHelper.activeDimCount(\"AD\"));\r\n },\r\n isActive: () => PlayerProgress.infinityUnlocked() && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.UPGRADE(\"infinity\"),\r\n },\r\n breakInfinityUpgrade: {\r\n name: \"Break Infinity Upgrades\",\r\n multValue: dim => {\r\n const mult = DC.D1.timesEffectsOf(\r\n BreakInfinityUpgrade.totalAMMult,\r\n BreakInfinityUpgrade.currentAMMult,\r\n BreakInfinityUpgrade.achievementMult,\r\n BreakInfinityUpgrade.slowestChallengeMult,\r\n BreakInfinityUpgrade.infinitiedMult\r\n );\r\n return Decimal.pow(mult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\"));\r\n },\r\n powValue: () => {\r\n const allPow = BreakInfinityUpgrade.totalAMMult.chargedEffect.effectOrDefault(1) *\r\n BreakInfinityUpgrade.currentAMMult.chargedEffect.effectOrDefault(1);\r\n return allPow;\r\n },\r\n isActive: () => player.break && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.BREAK_INFINITY,\r\n },\r\n infinityPower: {\r\n name: \"Multiplier from Infinity Power\",\r\n fakeValue: () => Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate),\r\n multValue: dim => {\r\n const mult = Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate).max(1);\r\n return Decimal.pow(mult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\"));\r\n },\r\n isActive: () => Currency.infinityPower.value.gt(1) && !EternityChallenge(9).isRunning,\r\n icon: MultiplierTabIcons.INFINITY_POWER,\r\n },\r\n infinityChallenge: {\r\n name: dim => (dim ? `Infinity Challenges (AD ${dim})` : \"Infinity Challenges\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n InfinityChallenge(3),\r\n InfinityChallenge(3).reward,\r\n );\r\n\r\n const dimMults = Array.repeat(DC.D1, 9);\r\n for (let tier = 1; tier <= 8; tier++) {\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n tier > 1 && tier < 8 ? InfinityChallenge(8).reward : null\r\n );\r\n }\r\n\r\n if (dim) return allMult.times(dimMults[dim]);\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]).times(allMult);\r\n }\r\n return totalMult;\r\n },\r\n powValue: () => InfinityChallenge(4).reward.effectOrDefault(1),\r\n isActive: () => player.break && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.CHALLENGE(\"infinity\"),\r\n },\r\n timeStudy: {\r\n name: dim => (dim ? `Time Studies (AD ${dim})` : \"Time Studies\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n TimeStudy(91),\r\n TimeStudy(101),\r\n TimeStudy(161),\r\n TimeStudy(193),\r\n TimeStudy(311),\r\n );\r\n\r\n const dimMults = Array.repeat(DC.D1, 9);\r\n for (let tier = 1; tier <= 8; tier++) {\r\n // We don't want to double-count the base effect that TS31 boosts\r\n const infinitiedMult = DC.D1.timesEffectsOf(\r\n AntimatterDimension(tier).infinityUpgrade,\r\n BreakInfinityUpgrade.infinitiedMult\r\n );\r\n dimMults[tier] = dimMults[tier].times(infinitiedMult.pow(TimeStudy(31).effectOrDefault(1) - 1));\r\n\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n tier < 8 ? TimeStudy(71) : null,\r\n tier === 8 ? TimeStudy(214) : null,\r\n tier === 1 ? TimeStudy(234) : null,\r\n );\r\n }\r\n\r\n if (dim) return allMult.times(dimMults[dim]);\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]).times(allMult);\r\n }\r\n return totalMult;\r\n },\r\n isActive: () => PlayerProgress.eternityUnlocked() && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.TIME_STUDY,\r\n },\r\n eternityChallenge: {\r\n name: \"Eternity Challenges\",\r\n multValue: dim => Decimal.pow(EternityChallenge(10).effectValue,\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\")),\r\n isActive: () => EternityChallenge(10).isRunning,\r\n icon: MultiplierTabIcons.CHALLENGE(\"eternity\"),\r\n },\r\n glyph: {\r\n name: \"Glyph Effects\",\r\n multValue: dim => {\r\n const mult = getAdjustedGlyphEffect(\"powermult\");\r\n return Decimal.pow(mult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\"));\r\n },\r\n powValue: () => {\r\n const totalPow = getAdjustedGlyphEffect(\"powerpow\") * getAdjustedGlyphEffect(\"effarigdimensions\");\r\n return totalPow * (player.dilation.active ? getAdjustedGlyphEffect(\"dilationpow\") : 1);\r\n },\r\n isActive: () => PlayerProgress.realityUnlocked() && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n v: {\r\n name: \"5 V-Achievement Milestone - AD Power based on Space Theorems\",\r\n powValue: () => VUnlocks.adPow.effectOrDefault(1),\r\n isActive: () => PlayerProgress.realityUnlocked() && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n alchemy: {\r\n name: \"Glyph Alchemy\",\r\n multValue: dim => {\r\n const mult = AlchemyResource.dimensionality.effectOrDefault(1)\r\n .times(Currency.realityMachines.value.powEffectOf(AlchemyResource.force));\r\n return Decimal.pow(mult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\"));\r\n },\r\n powValue: dim => {\r\n const basePow = AlchemyResource.power.effectOrDefault(1) * Ra.momentumValue;\r\n // Not entirely accurate, but returns the geometric mean of all producing dimensions (which should be close)\r\n // Set to default value of 1 in non-unlocked case (arguably some sort of effect-or-default would be better,\r\n // but I don't want to risk breaking things).\r\n let inflationPow = 1;\r\n if (AlchemyResource.inflation.isUnlocked) {\r\n if (dim) {\r\n inflationPow = AntimatterDimension(dim).multiplier.gte(AlchemyResource.inflation.effectValue) ? 1.05 : 1;\r\n } else {\r\n const inflated = AntimatterDimensions.all\r\n .countWhere(ad => ad.isProducing && ad.multiplier.gte(AlchemyResource.inflation.effectValue));\r\n inflationPow = Math.pow(1.05, inflated / AntimatterDimensions.all.countWhere(ad => ad.isProducing));\r\n }\r\n }\r\n return basePow * inflationPow;\r\n },\r\n isActive: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n pelle: {\r\n name: \"Pelle Upgrades\",\r\n multValue: dim => Decimal.pow(PelleUpgrade.antimatterDimensionMult.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\")),\r\n powValue: () => PelleRifts.paradox.effectOrDefault(DC.D1).toNumber(),\r\n isActive: () => Pelle.isDoomed && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: dim => {\r\n const mult = ShopPurchase.dimPurchases.currentMult * ShopPurchase.allDimPurchases.currentMult;\r\n return Decimal.pow(mult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"AD\"));\r\n },\r\n isActive: () => ShopPurchaseData.totalSTD > 0 && !EternityChallenge(11).isRunning,\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n\r\n effectNC: {\r\n name: dim => (dim ? `Normal Challenge Effect (AD ${dim})` : \"Normal Challenge Effects\"),\r\n // Depending on the challenge itself and the game state, this could be either a nerf or a buff, so we make\r\n // sure to render a x or / conditionally. This requires we calculate the value itself again, however\r\n displayOverride: dim => {\r\n const formatFn = num => (num.gte(1) ? formatX(num, 2, 2) : `/${format(num.reciprocal(), 2, 2)}`);\r\n\r\n let dimMults = Array.repeat(DC.D1, 9);\r\n if (NormalChallenge(2).isRunning) {\r\n dimMults = Array.repeat(new Decimal(player.chall2Pow), 9);\r\n }\r\n if (NormalChallenge(3).isRunning) {\r\n dimMults[1] = dimMults[1].times(player.chall3Pow);\r\n }\r\n\r\n if (NormalChallenge(12).isRunning) {\r\n dimMults[2] = AntimatterDimension(2).totalAmount.pow(0.6);\r\n dimMults[4] = AntimatterDimension(4).totalAmount.pow(0.4);\r\n dimMults[6] = AntimatterDimension(6).totalAmount.pow(0.2);\r\n }\r\n\r\n if (dim) return formatFn(dimMults[dim]);\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]);\r\n }\r\n return formatFn(totalMult);\r\n },\r\n // This and displayOverride contain largely the same code\r\n multValue: dim => {\r\n let dimMults = Array.repeat(DC.D1, 9);\r\n // Do not change this to an else-if, as NC2/NC3 need to be enterable simultaneously in IC1\r\n if (NormalChallenge(2).isRunning) {\r\n dimMults = Array.repeat(new Decimal(player.chall2Pow), 9);\r\n }\r\n if (NormalChallenge(3).isRunning) {\r\n dimMults[1] = dimMults[1].times(player.chall3Pow);\r\n }\r\n\r\n // Legacy behavior for NC12 we're preserving dictates that it boosts production based on dimension amount\r\n // without actually increasing the multiplier itself, so this effectively turns the powers in the production\r\n // code info effective multipliers raised to pow-1\r\n if (NormalChallenge(12).isRunning) {\r\n dimMults[2] = AntimatterDimension(2).totalAmount.pow(0.6);\r\n dimMults[4] = AntimatterDimension(4).totalAmount.pow(0.4);\r\n dimMults[6] = AntimatterDimension(6).totalAmount.pow(0.2);\r\n\r\n // We have to hide this when producing odd or when referencing a dimension which has no amount, but then we\r\n // also need to total up the multipliers when on the grouped layout. No amount evaluates to zero, so in all\r\n // those cases we use 1 instead in order to calculate properly\r\n if (!MultiplierTabHelper.isNC12ProducingEven()) return DC.D1;\r\n if (dim) return dimMults[dim].neq(0) ? dimMults[dim] : DC.D1;\r\n let totalNC12 = DC.D1;\r\n for (let d = 2; d <= 6; d += 2) totalNC12 = totalNC12.times(dimMults[d].clampMin(1));\r\n return totalNC12;\r\n }\r\n\r\n if (dim) return dimMults[dim];\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]);\r\n }\r\n return totalMult;\r\n },\r\n isActive: () => [2, 3, 12].some(c => NormalChallenge(c).isRunning),\r\n icon: MultiplierTabIcons.CHALLENGE(\"infinity\"),\r\n },\r\n nerfIC: {\r\n name: dim => (dim ? `Infinity Challenge Nerf (AD ${dim})` : \"Infinity Challenge Nerf\"),\r\n multValue: dim => {\r\n let dimMults = Array.repeat(DC.D1, 9);\r\n if (InfinityChallenge(4).isRunning) {\r\n for (let tier = 1; tier <= 8; tier++) {\r\n if (player.postC4Tier !== tier) {\r\n dimMults[tier] = dimMults[tier].pow(1 - InfinityChallenge(4).effectValue).reciprocal();\r\n }\r\n }\r\n } else if (InfinityChallenge(6).isRunning) {\r\n dimMults = Array.repeat(DC.D1.dividedByEffectOf(InfinityChallenge(6)), 9);\r\n } else if (InfinityChallenge(8).isRunning) {\r\n dimMults = Array.repeat(DC.D1.timesEffectsOf(InfinityChallenge(8)), 9);\r\n }\r\n\r\n if (dim) return dimMults[dim];\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"AD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]);\r\n }\r\n return totalMult;\r\n },\r\n isActive: () => [4, 6, 8].some(ic => InfinityChallenge(ic).isRunning),\r\n icon: MultiplierTabIcons.CHALLENGE(\"infinity\"),\r\n },\r\n nerfV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.5,\r\n isActive: () => V.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfCursed: {\r\n name: \"Cursed Glyphs\",\r\n powValue: () => getAdjustedGlyphEffect(\"curseddimensions\"),\r\n isActive: () => getAdjustedGlyphEffect(\"curseddimensions\") !== 1,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"cursed\"),\r\n },\r\n nerfPelle: {\r\n name: \"Doomed Reality\",\r\n multValue: 0.1,\r\n powValue: () => (PelleStrikes.infinity.hasStrike ? 0.5 : 1),\r\n isActive: () => Pelle.isDoomed,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n nerfSHardV: {\r\n name: \"V's Superhard Reality\",\r\n powValue: () => 0.000001,\r\n isActive: () => V.isSuperRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { PlayerProgress } from \"../../player-progress\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\n// Note most of the isActive entries in here have redundant-looking DT/s != 0 checks because DT is treated as a\r\n// special case due to not being a prestige currency but still needing to be treated like one in the UI. This\r\n// is because it requires dilation to be unlocked, which isn't a given, and we want the tab continuously visible\r\n// after the first ever dilation unlock on the 0th reality\r\nexport const DT = {\r\n total: {\r\n name: \"Dilated Time gain\",\r\n displayOverride: () => `${format(getDilationGainPerSecond().times(getGameSpeedupForDisplay()), 2, 2)}/sec`,\r\n multValue: () => getDilationGainPerSecond().times(getGameSpeedupForDisplay()),\r\n isActive: () => PlayerProgress.realityUnlocked() ||\r\n (PlayerProgress.dilationUnlocked() && getDilationGainPerSecond().gt(0)),\r\n dilationEffect: () => (Enslaved.isRunning ? 0.85 : 1),\r\n isDilated: true,\r\n overlay: [\"Ψ\"],\r\n },\r\n achievement: {\r\n name: \"Achievements\",\r\n multValue: () => Achievement(132).effectOrDefault(1) * Achievement(137).effectOrDefault(1),\r\n isActive: () => (Achievement(132).canBeApplied || Achievement(137).canBeApplied) &&\r\n getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n dilation: {\r\n name: \"Repeatable Dilation Upgrades\",\r\n multValue: () => DC.D1.timesEffectsOf(\r\n DilationUpgrade.dtGain,\r\n DilationUpgrade.dtGainPelle,\r\n DilationUpgrade.flatDilationMult\r\n ),\r\n isActive: () => DC.D1.timesEffectsOf(\r\n DilationUpgrade.dtGain,\r\n DilationUpgrade.dtGainPelle,\r\n DilationUpgrade.flatDilationMult\r\n ).gt(1),\r\n icon: MultiplierTabIcons.UPGRADE(\"dilation\"),\r\n },\r\n amplifierDT: {\r\n name: \"Reality Upgrade - Temporal Amplifier\",\r\n multValue: () => RealityUpgrade(1).effectOrDefault(1),\r\n isActive: () => RealityUpgrade(1).canBeApplied && getDilationGainPerSecond().neq(0) && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n glyph: {\r\n name: \"Glyph Effects\",\r\n multValue: () => {\r\n const dtMult = getAdjustedGlyphEffect(\"dilationDT\").times(Pelle.specialGlyphEffect.dilation);\r\n const repliDT = Replicanti.areUnlocked\r\n ? Math.clampMin(Decimal.log10(Replicanti.amount) * getAdjustedGlyphEffect(\"replicationdtgain\"), 1)\r\n : DC.D1;\r\n return dtMult.times(repliDT);\r\n },\r\n isActive: () => PlayerProgress.realityUnlocked() && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH\r\n },\r\n ra1: {\r\n name: \"Ra Upgrade - Multiplier based on TT\",\r\n multValue: () => DC.D1.timesEffectsOf(Ra.unlocks.continuousTTBoost.effects.dilatedTime),\r\n isActive: () => Ra.unlocks.autoTP.canBeApplied && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n ra2: {\r\n name: \"Ra Upgrade - Multiplier based on peak game speed\",\r\n multValue: () => DC.D1.timesEffectsOf(Ra.unlocks.peakGamespeedDT),\r\n isActive: () => Ra.unlocks.autoTP.canBeApplied && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n alchemy: {\r\n name: \"Glyph Alchemy\",\r\n multValue: () => AlchemyResource.dilation.effectOrDefault(1),\r\n isActive: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n mendingMilestones: {\r\n name: \"Mending Milestone 1\",\r\n multValue: 100,\r\n isActive: () => PlayerProgress.mendingUnlocked(),\r\n icon: MultiplierTabIcons.MENDINGMILESTONE,\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: () => new Decimal(ShopPurchase.dilatedTimePurchases.currentMult ** (Pelle.isDoomed ? 0.5 : 1)),\r\n isActive: () => ShopPurchaseData.totalSTD > 0 && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n\r\n nerfV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.5,\r\n isActive: () => V.isRunning && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfPelle: {\r\n name: \"Doomed Reality\",\r\n multValue: 1e-5,\r\n isActive: () => Pelle.isDoomed && getDilationGainPerSecond().neq(0),\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n gamespeed: {\r\n name: \"Current Game speed\",\r\n multValue: () => getGameSpeedupForDisplay(),\r\n isActive: () => getGameSpeedupForDisplay().gt(1) && getDilationGainPerSecond().neq(0),\r\n ignoresNerfPowers: true,\r\n icon: MultiplierTabIcons.GAMESPEED,\r\n },\r\n effarig65: {\r\n name: \"Effarig Level 65\",\r\n powValue: () => 1 + Math.max(0, (Currency.relicShards.value.log10() / 1337)),\r\n isActive: () => Ra.unlocks.relicShardBoost.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n nerfSHardV: {\r\n name: \"V's Superhard Reality\",\r\n powValue: () => 0.000001,\r\n isActive: () => V.isSuperRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n }\r\n};\r\n","import { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const eternities = {\r\n total: {\r\n name: \"Eternities gained per Eternity\",\r\n isBase: true,\r\n multValue: () => gainedEternities(),\r\n isActive: () => (PlayerProgress.realityUnlocked() || Achievement(113).isUnlocked) && !Pelle.isDoomed,\r\n overlay: [\"Δ\", \"\"],\r\n },\r\n achievement: {\r\n name: \"Achievement 113\",\r\n multValue: () => Achievement(113).effectOrDefault(1),\r\n isActive: () => Achievement(113).canBeApplied,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n amplifierEter: {\r\n name: \"Reality Upgrade - Eternal Amplifier\",\r\n multValue: () => RealityUpgrade(3).effectOrDefault(1),\r\n isActive: () => RealityUpgrade(3).canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n glyph: {\r\n name: \"Equipped Glyphs\",\r\n multValue: () => getAdjustedGlyphEffect(\"timeetermult\"),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n ra: {\r\n name: \"Ra Upgrade - Multiplier based on TT\",\r\n multValue: () => Ra.unlocks.continuousTTBoost.effects.eternity.effectOrDefault(1),\r\n isActive: () => Ra.unlocks.continuousTTBoost.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n alchemy: {\r\n name: \"Alchemy Resource - Eternity\",\r\n powValue: () => AlchemyResource.eternity.effectOrDefault(1),\r\n isActive: () => AlchemyResource.eternity.canBeApplied,\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n mendingMilestones: {\r\n name: \"Mending Milestone 1\",\r\n multValue: 1e4,\r\n isActive: () => PlayerProgress.mendingUnlocked(),\r\n icon: MultiplierTabIcons.MENDINGMILESTONE,\r\n },\r\n teresa90: {\r\n name: \"Teresa Level 90\",\r\n powValue: () => Math.pow((Math.log10(Currency.realities.value)/20), 1.111),\r\n isActive: () => Ra.unlocks.realitiesBoostInfinityAndEternityProduction.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n }\r\n};\r\n","export function corruptionChallengeScoreCalculation() {\r\n let corruptionScores = [1, 1.2, 1.45, 1.7, 2, 2.5, 3, 3.5, 4, 5, 7, 11]\r\n let finalScore = corruptionScores[player.mending.corruption[0]]\r\n for (let i = 1; i < 9; i++) {\r\n finalScore *= corruptionScores[player.mending.corruption[i]]\r\n }\r\n return finalScore\r\n};\r\n\r\n// These nerfs make no sense on their own, so ill explain them here:\r\n// (Hidden nerfs exist for balancing purposes, and hidden just means they arent directly shown on the tab, not that they dont show at all)\r\n// Prestige Limits: 1 nerf: All prestige currencies are ^x\r\n// Dimensional Limits: 1 nerf: All dimensions are ^x, and even stronger w/o pelle 90\r\n// Time Compression: 4 Nerfs:\r\n// Power - Game time recieves an exponent\r\n// Multiplier - Game time then recieve a multiplier (or divisor)\r\n// IP gain - Beyond TC3, IP gain will recieve an exponent (hidden)\r\n// AD mult nerf - Beyond TC7, AD will recieve an exponent (hidden) \r\n// Galactic Weakness: 5 Nerfs:\r\n// Scaling - Galaxies scale faster\r\n// Power - Galaxies are less effective\r\n// Dimboost Cap - Beyond GW2, dimboosts will recieve a hardcap\r\n// GS mult - Beyond GW5, gamespeed recieves an exponent nerf (hidden)\r\n// IPo Conversion - Beyond GW7, infinity power conversion recieves a divisor (hidden)\r\n// Complex Glyphs: 4 Nerfs:\r\n// Level - Level recieves a power effect\r\n// Rarity - Rarity recieves a power effect\r\n// Forced Cursed Glyphs - Beyond CG3, some glyph slots will be forced cursed glyphs (hidden)\r\n// Alchemy Effectiveness - Beyond CG6, alchemy is disabled (hidden)\r\n// Tick Extension: 3 Nerfs:\r\n// Power - Tickspeed recieves an exponent\r\n// Shard Scaling - Time shards are less efficient\r\n// No Triads - Beyond TE5, Triads cannot be purchased (hidden)\r\n// Atom Dilution: 1 Nerf: AM gain exponent ^x\r\n// Theory of Dilation: 4 Nerfs:\r\n// Power - DT and TP gain a power effect\r\n// Divisor - DT gains a divisor\r\n// TT cost - Beyond ToD4, TT costs scale faster (hidden)\r\n// Dimension scaling - Beyond ToD7, dimension cost scaling gains an exponent\r\n// Replicative Singularities: 5 Nerfs:\r\n// Replicanti: Replicanti gains a power exponent\r\n// Singularity mult - Singularity recieves a multiplier (or divisor)\r\n// DM mult - DM gain gains a mult (or div) (hidden)\r\n// Prestige Gain - Prestige gain recieves an exponent (hidden)\r\n// Rebuyable disablers - Beyond RS4, rebuyable upgrades are disabled (hidden)\r\n// Study of Forever: 5 Nerfs:\r\n// TT cost - TT cost is more expensive\r\n// TT disabled - TT generation from glyphs is disabled\r\n// TD nerf - TD gain an exponent\r\n// Triad Disabler - Beyond SoF3, Triad studies are disabled and some studies recieve heavy nerfs (hidden)\r\n// Uncharged Infinity - Beyond SoF7, Charged upgrades are disabled and so are EC rewards (hidden)\r\nexport const corruptionPenalties = {\r\n prestigeLimits: [1, 0.85, 0.55, 0.35, 0.15, 0.06, 0.02, 0.01, 0.005, 0.001, 5e-4, 3e-5],\r\n dimLimits: {\r\n preNerf: [1, 0.85, 0.55, 0.35, 0.15, 0.06, 0.02, 0.01, 0.005, 0.001, 5e-4, 3e-5],\r\n postNerf: [1, 0.98, 0.915, 0.8, 0.6, 0.5, 0.3, 0.2, 0.15, 0.1, 0.06, 0.03]\r\n },\r\n timeCompression: {\r\n power: [1, 0.95, 0.8, 0.65, 0.5, 0.35, 0.3, 0.05, 0.01, 0, 0, 0], // Yes in practise 1e-8, 1e-45, 1e-120, 1e-265, 1e-655, etc wouldve worked but whatever\r\n mult: [1, new Decimal(1).div(1e8), new Decimal(1).div(1e45), new Decimal(1).div(1e120), new Decimal(1).div(1e265), new Decimal(1).div(\"1e655\"), new Decimal(1).div(\"1e1275\"), new Decimal(1).div(\"1e2250\"), new Decimal(1).div(\"1e5000\"), new Decimal(1).div(\"1e15000\"), new Decimal(1).div(\"1e65000\"), new Decimal(1).div(\"1e450000\")],\r\n hiddenFour: [1, 1, 1, 1, 0.999, 0.995, 0.99, 0.98, 0.95, 0.8, 0.5, 0.1],\r\n hiddenEight: [1, 1, 1, 1, 1, 1, 1, 1, 0.9, 0.7, 0.5, 0.3]\r\n }, \r\n galWeak: {\r\n scaling: [1, 1.1, 1.3, 1.5, 2, 2.55, 4, 7, 12, 20, 50, 450],\r\n strength: [1, 0.98, 0.95, 0.85, 0.8, 0.725, 0.6, 0.4, 0.25, 0.1, 0.025],\r\n hiddenThree: [1e15, 1e15, 1e15, 1e8, 1e7, 999999, 88888, 7777, 666, 55, 4, 3],//so that I realize default cap is 1e15--sxy\r\n hiddenSix: [1, 1, 1, 1, 1, 1, 0.99, 0.96, 0.9, 0.7, 0.4, 0.1],\r\n hiddenEight: [1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 6, 9]\r\n },\r\n compGlyphs: {\r\n level: [1, 0.99, 0.95, 0.9, 0.8, 0.75, 0.4, 0.4, 0.25, 0.2, 0.15, 0.05],\r\n rarity: [1, 0.99, 0.975, 0.95, 0.9, 0.8, 0.8, 0.5, 0.5, 0.4, 0.2, 0.1],//below 0.7 will freeze the game, investigating--sxy\r\n hiddenFour: [0, 0, 0, 0, 1, 1, 2, 2, 3, 4, 6, 8],\r\n hiddenSeven: [false, false, false, false, false, false, false, true, true, true, true, true] // Dumb, i know, but atleast its clearly defined HERE and not around the place\r\n },\r\n tickExtension: [1, 2.5, 10, 40, 220, 950, 3150, 9000, 25000, 100000, 5e5, 1e7, 1e12], //these are inverse powers, so 10 actually means ^(1/10), 1000 actually means ^(1/1000), etc\r\n atomDilution: [1, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.35, 0.3, 0.275, 0.25, 0.2],\r\n toD: {\r\n power: [1, 0.65, 0.33, 0.19, 0.1, 0.045, 0.02, 0.006, 0.002, 0, 0],\r\n mult: [1, 1e-2, 1e-8, new Decimal(1e-22), new Decimal(1e-65), new Decimal(1e-185), new Decimal(1e-300), new Decimal(\"1e-1500\"), new Decimal(\"1e-7777\"), new Decimal(\"1e-98765\"), 0, 0],\r\n hiddenFive: [1, 1, 1, 1, 1, 3, 12, 50, 500, 6000, 15000, 1e5],\r\n hiddenEight: [1, 1, 1, 1, 1, 1, 1, 1, 8, 75, 1050, 11752]\r\n },\r\n repSing: {\r\n rep: [1, 0.25, 0.05, 0.01, 0.004, 0.00065, 0.0001, 1e-5, 1e-8, 1e-20, 0, 0],\r\n sing: [1, 0.9, 0.75, 0.5, 0.325, 0.15, 0.01, 0.001, 1e-4, 1e-5, 1e-8, 0],\r\n dm: [1, 0.75, 0.5, 0.325, 0.15, 0.075, 0.001, 1e-4, 1e-6, 0, 0, 0],//Laitela is a place where vue display and actuall game number won't match. So like each dimensions' upgrade effect are in fact not exist. Better just dm pow.--sxy\r\n presGain: [1, 0.95, 0.9, 0.85, 0.8, 0.75, 0.7, 0.65, 0.6, 0.5, 0.4, 0.25],\r\n hiddenFour: [false, false, false, false, false, true, true, true, true, true, true, true]\r\n },\r\n soF: {\r\n ttcost: [1, 1e10,1e20, 1e50, 1e75,1e100,1e125, 1e150, 1e200, 1e233, 1e267, 1e299], // wait did TT cost number or decimal?--sxy\r\n ttgen: [false, true, true, true, true, true, true, true, true, true, true, true], // the dumbest thing ive ever put in code but again, atleast its defined here so i dont have someone bitch about this later\r\n tdpow: [1, 0.7, 0.3, 0.08, 0.01, 3e-3, 1e-5, 1e-8, 1e-15, 1e-33, 1e-100, 0],\r\n hiddenThree: [false, false, false, false, true, true, true, true, true, true, true, true],\r\n hiddenEight: [false, false, false, false, false, false, false, false, true, true, true, true]\r\n },\r\n alchemyNormalcy: [1,1,1,1,1,1,1,1,1,1,1,1],\r\n secondaryRejection: [1,1,1,1,1,1,1,1,1,1,1,1],\r\n}","import { DC } from \"../../constants\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\nimport { corruptionPenalties } from \"../mending/corruption\";\r\n\r\n// See index.js for documentation\r\nexport const EP = {\r\n total: {\r\n name: \"Total EP Gained on Eternity\",\r\n displayOverride: () => (Player.canEternity\r\n ? format(gainedEternityPoints(), 2, 2)\r\n : \"Cannot Eternity\"),\r\n // This effectively hides everything if the player can't actually gain any\r\n multValue: () => (Player.canEternity ? gainedEternityPoints() : 1),\r\n isActive: () => PlayerProgress.eternityUnlocked() || Player.canEternity,\r\n dilationEffect: () => (Laitela.isRunning ? 0.75 * Effects.product(DilationUpgrade.dilationPenalty) : 1),\r\n isDilated: true,\r\n overlay: [\"Δ\", \"\"],\r\n },\r\n base: {\r\n name: \"Base Eternity Points\",\r\n isBase: true,\r\n fakeValue: DC.D5,\r\n multValue: () => DC.D5.pow(player.records.thisEternity.maxIP.plus(\r\n gainedInfinityPoints()).log10() / (308 - PelleRifts.recursion.effectValue.toNumber()) - 0.7),\r\n isActive: () => PlayerProgress.eternityUnlocked(),\r\n icon: MultiplierTabIcons.CONVERT_FROM(\"IP\"),\r\n },\r\n IP: {\r\n name: \"Eternity Points from Infinity Points\",\r\n displayOverride: () => `${format(player.records.thisEternity.maxIP.plus(gainedInfinityPoints()), 2, 2)} IP`,\r\n // Just needs to match the value in base and be larger than 1\r\n multValue: DC.D5,\r\n isActive: () => PlayerProgress.eternityUnlocked(),\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"infinity\"),\r\n },\r\n divisor: {\r\n name: \"Pelle - EP Formula Improvement\",\r\n displayOverride: () => {\r\n const div = 308 - PelleRifts.recursion.effectValue.toNumber();\r\n return `log(IP)/${formatInt(308)} ➜ log(IP)/${format(div, 2, 2)}`;\r\n },\r\n powValue: () => 308 / (308 - PelleRifts.recursion.effectValue.toNumber()),\r\n isActive: () => PelleRifts.recursion.canBeApplied,\r\n icon: MultiplierTabIcons.DIVISOR(\"EP\"),\r\n },\r\n eternityUpgrade: {\r\n name: () => `Eternity Upgrade - Repeatable ${formatX(5)} EP`,\r\n multValue: () => EternityUpgrade.epMult.effectOrDefault(1),\r\n isActive: () => PlayerProgress.eternityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n timeStudy: {\r\n name: \"Time Studies\",\r\n multValue: () => DC.D1.timesEffectsOf(\r\n TimeStudy(61),\r\n TimeStudy(121),\r\n TimeStudy(122),\r\n TimeStudy(123),\r\n ),\r\n isActive: () => PlayerProgress.eternityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.TIME_STUDY,\r\n },\r\n glyph: {\r\n name: \"Equipped Glyphs\",\r\n multValue: () => DC.D1\r\n .timesEffectsOf(Pelle.isDoomed ? null : GlyphEffect.epMult)\r\n .times(Pelle.specialGlyphEffect.time),\r\n powValue: () => (GlyphAlteration.isAdded(\"time\") ? getSecondaryGlyphEffect(\"timeEP\") : 1),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n realityUpgrade: {\r\n name: \"Reality Upgrade - The Knowing Existence\",\r\n multValue: () => RealityUpgrade(12).effectOrDefault(1),\r\n isActive: () => RealityUpgrade(12).canBeApplied && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n pelle: {\r\n name: \"Pelle Strike - Vacuum Rift\",\r\n multValue: () => PelleRifts.vacuum.milestones[2].effectOrDefault(1),\r\n isActive: () => PelleRifts.vacuum.milestones[2].canBeApplied,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n mendingMilestones: {\r\n name: \"Mending Milestone 1\",\r\n multValue: 1e5,\r\n isActive: () => PlayerProgress.mendingUnlocked(),\r\n icon: MultiplierTabIcons.MENDINGMILESTONE,\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: () => ShopPurchase.EPPurchases.currentMult,\r\n isActive: () => ShopPurchaseData.totalSTD > 0,\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n\r\n nerfTeresa: {\r\n name: \"Teresa's Reality\",\r\n powValue: () => 0.55,\r\n isActive: () => Teresa.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_TERESA,\r\n },\r\n nerfV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.5,\r\n isActive: () => V.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfCorruptions: {\r\n name: \"Prestige Limits Hostility\",\r\n powValue: () => corruptionPenalties.prestigeLimits[player.mending.corruption[0]],\r\n isActive: () => (player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[0] > 0),\r\n icon: MultiplierTabIcons.CORRUPTION,\r\n },\r\n nerfSHardV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.000001,\r\n isActive: () => V.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfSoftcap: {\r\n name: \"Eternity Point Softcap\",\r\n powValue: () => (gainedEternityPoints().log10() / gainedEternityPoints(true).log10()),\r\n isActive: () => (gainedEternityPoints().gte(Decimal.pow10(1e18))),\r\n icon: MultiplierTabIcons.SOFTCAP(\"eternity\"),\r\n }\r\n};\r\n","import { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const galaxies = {\r\n // Note: none of the galaxy types use the global multiplier that applies to all of them within multValue, which\r\n // very slightly reduces performance impact and is okay because it's applied consistently\r\n antimatter: {\r\n name: \"Antimatter Galaxies\",\r\n displayOverride: () => {\r\n const num = player.galaxies + GalaxyGenerator.galaxies;\r\n const mult = MultiplierTabHelper.globalGalaxyMult();\r\n return `${formatInt(num)}, ${formatX(mult, 2, 2)} strength`;\r\n },\r\n multValue: () => Decimal.pow10(player.galaxies + GalaxyGenerator.galaxies),\r\n isActive: true,\r\n icon: MultiplierTabIcons.ANTIMATTER,\r\n },\r\n replicanti: {\r\n name: \"Replicanti Galaxies\",\r\n displayOverride: () => {\r\n const num = Replicanti.galaxies.total;\r\n let rg = Replicanti.galaxies.bought;\r\n rg *= (1 + Effects.sum(TimeStudy(132), TimeStudy(133)));\r\n rg += Replicanti.galaxies.extra;\r\n rg += Math.min(Replicanti.galaxies.bought, ReplicantiUpgrade.galaxies.value) * ((EternityChallenge(8).completions >= 1)? EternityChallenge(8).reward.effectValue : 1);\r\n const mult = rg / Math.clampMin(num, 1) * MultiplierTabHelper.globalGalaxyMult();\r\n return `${formatInt(num)}, ${formatX(mult, 2, 2)} strength`;\r\n },\r\n multValue: () => {\r\n let rg = Replicanti.galaxies.bought;\r\n rg *= (1 + Effects.sum(TimeStudy(132), TimeStudy(133)));\r\n rg += Replicanti.galaxies.extra;\r\n rg += Math.min(Replicanti.galaxies.bought, ReplicantiUpgrade.galaxies.value) * ((EternityChallenge(8).completions >= 1)? EternityChallenge(8).reward.effectValue : 1);\r\n return Decimal.pow10(rg);\r\n },\r\n isActive: () => Replicanti.areUnlocked,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"replication\"),\r\n },\r\n tachyon: {\r\n name: \"Tachyon Galaxies\",\r\n displayOverride: () => {\r\n const num = player.dilation.totalTachyonGalaxies;\r\n const mult = MultiplierTabHelper.globalGalaxyMult() *\r\n (1 + Math.max(0, Replicanti.amount.log10() / 1e6) * AlchemyResource.alternation.effectValue);\r\n return `${formatInt(num)}, ${formatX(mult, 2, 2)} strength`;\r\n },\r\n multValue: () => {\r\n const num = player.dilation.totalTachyonGalaxies;\r\n const mult = 1 + Math.max(0, Replicanti.amount.log10() / 1e6) * AlchemyResource.alternation.effectValue;\r\n return Decimal.pow10(num * mult);\r\n },\r\n isActive: () => player.dilation.totalTachyonGalaxies > 0,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"dilation\"),\r\n },\r\n nerfPelle: {\r\n name: \"Doomed Reality\",\r\n displayOverride: () => `All Galaxy strength /${formatInt(2)}`,\r\n powValue: 0.5,\r\n isActive: () => Pelle.isDoomed,\r\n icon: MultiplierTabIcons.PELLE,\r\n }\r\n};\r\n","import { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\nimport { corruptionPenalties } from \"../mending/corruption\";\r\n\r\n// See index.js for documentation\r\nexport const gamespeed = {\r\n total: {\r\n name: \"Game speed\",\r\n displayOverride: () => {\r\n if (Enslaved.isStoringRealTime) return `Set to ${format(0)} (storing real time)`;\r\n if (EternityChallenge(12).isRunning) return `${formatX(1)}/${formatInt(1000)} (fixed)`;\r\n const curr = getGameSpeedupFactor();\r\n\r\n const bh = MultiplierTabHelper.blackHoleSpeeds();\r\n const currBH = bh.current;\r\n const avgBH = bh.average;\r\n\r\n const avgSpeed = Enslaved.isAutoReleasing\r\n ? getGameSpeedupForDisplay()\r\n : curr.div(currBH).times(avgBH);\r\n const avgString = ` (current) | ${formatX(avgSpeed, 2, 2)} (average)`;\r\n return `${formatX(curr, 2, 2)}${curr === avgSpeed ? \"\" : avgString}`;\r\n },\r\n multValue: () => getGameSpeedupForDisplay(),\r\n isActive: () => PlayerProgress.seenAlteredSpeed(),\r\n dilationEffect: () => (Effarig.isRunning ? Effarig.multDilation : 1),\r\n isDilated: true,\r\n overlay: [\"Δ\", ``, ``],\r\n },\r\n glyph: {\r\n name: \"Equipped Glyphs\",\r\n multValue: () => getAdjustedGlyphEffect(\"timespeed\"),\r\n powValue: () => getAdjustedGlyphEffect(\"effarigblackhole\"),\r\n isActive: () => PlayerProgress.realityUnlocked() && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n blackHoleCurr: {\r\n name: \"Current Black Hole Speedup\",\r\n multValue: () => MultiplierTabHelper.blackHoleSpeeds().current,\r\n isActive: () => BlackHole(1).isUnlocked && !BlackHoles.arePaused && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.BLACK_HOLE,\r\n },\r\n blackHoleAvg: {\r\n name: \"Average Black Hole Speedup\",\r\n multValue: () => MultiplierTabHelper.blackHoleSpeeds().average,\r\n isActive: () => BlackHole(1).isUnlocked && !BlackHoles.arePaused && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.BLACK_HOLE,\r\n },\r\n achievementMult: {\r\n name: \"30 V-Achievement Milestone - Achievement Multiplier\",\r\n multValue: () => Decimal.min(1e300, Decimal.pow(VUnlocks.achievementBH.effectOrDefault(1),\r\n BlackHoles.list.countWhere(bh => bh.isUnlocked))),\r\n isActive: () => !BlackHoles.arePaused && VUnlocks.achievementBH.canBeApplied && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n pulsing: {\r\n name: \"Auto-Discharging Stored Time\",\r\n multValue: () => (Enslaved.isAutoReleasing\r\n ? Decimal.max(Enslaved.autoReleaseSpeed.div(getGameSpeedupFactor()), 1)\r\n : getGameSpeedupFactor()),\r\n isActive: () => Enslaved.canRelease() && Enslaved.isAutoReleasing && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.BH_PULSE,\r\n },\r\n singularity: {\r\n name: \"Singularity Milestone - Game speed based on Singularities\",\r\n multValue: () => SingularityMilestone.gamespeedFromSingularities.effectOrDefault(1),\r\n isActive: () => SingularityMilestone.gamespeedFromSingularities.canBeApplied && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.SINGULARITY,\r\n },\r\n pelle: {\r\n name: \"Pelle Upgrade - Repeatable Game speed\",\r\n multValue: () => PelleUpgrade.timeSpeedMult.effectValue.toNumber(),\r\n isActive: () => Pelle.isDoomed && !EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n\r\n ec12: {\r\n name: \"Eternity Challenge 12\",\r\n multValue: () => new Decimal(0.001).div(getGameSpeedupForDisplay()),\r\n isActive: () => EternityChallenge(12).isRunning,\r\n icon: MultiplierTabIcons.CHALLENGE(\"eternity\"),\r\n },\r\n chargingBH: {\r\n name: \"Black Hole Charging\",\r\n // The 0 in multValue is irrelevant; if this upgrade isn't available, the subtab is hidden by 1x total effect\r\n multValue: () => (Ra.unlocks.autoPulseTime.canBeApplied ? 0.01 : 0),\r\n isActive: () => Enslaved.isStoringGameTime,\r\n icon: MultiplierTabIcons.BLACK_HOLE,\r\n },\r\n invertedBH: {\r\n name: \"Inverted Black Hole\",\r\n multValue: () => player.blackHoleNegative,\r\n isActive: () => BlackHoles.areNegative,\r\n icon: MultiplierTabIcons.CHALLENGE(\"eternity\"),\r\n },\r\n nerfLaitela: {\r\n name: \"Lai'tela's Reality\",\r\n powValue: () => Decimal.clampMax(Time.thisRealityRealTime.totalMinutes.div(10), 1),\r\n isActive: () => Laitela.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_LAITELA,\r\n },\r\n expoBlackHoles: {\r\n name: \"Black Hole 3\",\r\n powValue: () => ExpoBlackHole(1).power,\r\n isActive: () => ExpoBlackHole(1).isUnlocked,\r\n icon: MultiplierTabIcons.BLACK_HOLE,\r\n },\r\n CorruptionUpg: {\r\n name: \"Hostility Upgrade - Spacetime Distortion\",\r\n multValue: () => Decimal.pow10(Math.pow(1 + CorruptionData.corruptionChallenge.recordScore, 1/1.48)),\r\n isActive: () => player.mending.corruptionChallenge.corruptedMend ? Decimal.pow10(Math.pow(1 + player.mending.corruptionChallenge.recordScore, 0.25)) : Decimal.pow10(Math.pow(1 + player.mending.corruptionChallenge.recordScore, 1/1.48)),\r\n icon: MultiplierTabIcons.UPGRADE(\"corruption\")\r\n },\r\n nerfCorruptions: {\r\n name: \"Time Compression Hostility - Power Value\",\r\n powValue: () => corruptionPenalties.timeCompression.power[player.mending.corruption[1]],\r\n isActive: () => (player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[1] > 0),\r\n icon: MultiplierTabIcons.CORRUPTION,\r\n },\r\n nerfCorruptions2: {\r\n name: \"Time Compression Hostility - Mult Value\",\r\n multValue: () => corruptionPenalties.timeCompression.mult[player.mending.corruption[1]],\r\n isActive: () => (player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[1] > 0),\r\n icon: MultiplierTabIcons.CORRUPTION,\r\n },\r\n nerfSoftcap: {\r\n name: \"Game Speed Softcap\",\r\n powValue: () => (getGameSpeedupFactor().log10() / getGameSpeedupFactor().div(1e300).pow(1 / 0.4321).times(1e300).log10()),\r\n isActive: () => getGameSpeedupFactor().gte(1e300),\r\n icon: MultiplierTabIcons.SOFTCAP(\"reality\")\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nimport { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const general = {\r\n achievement: {\r\n name: (ach, dim) => (dim?.length === 2\r\n ? `Achievement ${ach} (${dim})`\r\n : `Achievement ${ach}`),\r\n multValue: (ach, dim) => {\r\n // There is also a buy10 effect, but we don't track that in the multiplier tab\r\n if (ach === 141) return Achievement(141).canBeApplied ? Achievement(141).effects.ipGain.effectOrDefault(1) : 1;\r\n if (ach === 183) return 1;\r\n if (!dim) return Achievement(ach).canBeApplied ? Achievement(ach).effectOrDefault(1) : 1;\r\n\r\n if (dim?.length === 2) {\r\n let totalEffect = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(dim); tier++) {\r\n let singleEffect;\r\n if (ach === 43) singleEffect = Achievement(43).canBeApplied ? (1 + tier / 100) : 1;\r\n else singleEffect = (MultiplierTabHelper.achievementDimCheck(ach, `${dim}${tier}`) &&\r\n Achievement(ach).canBeApplied) ? Achievement(ach).effectOrDefault(1) : 1;\r\n totalEffect = totalEffect.times(singleEffect);\r\n }\r\n return totalEffect;\r\n }\r\n\r\n if (ach === 43) return Achievement(43).canBeApplied ? (1 + Number(dim.charAt(2)) / 100) : 1;\r\n return (MultiplierTabHelper.achievementDimCheck(ach, dim) && Achievement(ach).canBeApplied)\r\n ? Achievement(ach).effectOrDefault(1) : 1;\r\n },\r\n // 183 is the only time a power effect is in an Achievement, so we special-case it here and return a x1 multiplier\r\n powValue: ach => (ach === 183 ? Achievement(183).effectOrDefault(1) : 1),\r\n isActive: ach => Achievement(ach).canBeApplied,\r\n icon: ach => {\r\n const base = MultiplierTabIcons.ACHIEVEMENT;\r\n return {\r\n color: base.color,\r\n symbol: `${base.symbol}${ach}`,\r\n };\r\n },\r\n },\r\n timeStudy: {\r\n name: (ts, dim) => (dim?.length === 2\r\n ? `Time Study ${ts} (${dim})`\r\n : `Time Study ${ts}`),\r\n multValue: (ts, dim) => {\r\n // This is a special case for the passive path RG study, as its effect is 0.4 (for galaxy power) but\r\n // in the multiplier tab we only reference its replicanti speed value (which is 3)\r\n if (ts === 132) return TimeStudy(ts).canBeApplied ? 3 : 1;\r\n\r\n if (!dim) return TimeStudy(ts).canBeApplied ? TimeStudy(ts).effectOrDefault(1) : 1;\r\n if (dim?.length === 2) {\r\n let totalEffect = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(dim); tier++) {\r\n totalEffect = totalEffect.times((MultiplierTabHelper.timeStudyDimCheck(ts, `${dim}${tier}`) &&\r\n TimeStudy(ts).isBought) ? TimeStudy(ts).effectOrDefault(1) : 1);\r\n }\r\n return totalEffect;\r\n }\r\n // The new Decimal() wrapper is necessary because, for some inexplicable reason, replicanti becomes\r\n // reactive through TS101 if that isn't there\r\n return (MultiplierTabHelper.timeStudyDimCheck(ts, dim) && TimeStudy(ts).isBought)\r\n ? new Decimal(TimeStudy(ts).effectOrDefault(1)) : 1;\r\n },\r\n isActive: ts => TimeStudy(ts).isBought,\r\n icon: ts => {\r\n const base = MultiplierTabIcons.TIME_STUDY;\r\n return {\r\n color: base.color,\r\n symbol: `${base.symbol}${ts}`,\r\n };\r\n },\r\n },\r\n infinityChallenge: {\r\n name: ic => `Infinity Challenge ${ic}`,\r\n displayOverride: ic => (ic === 4 ? formatPow(InfinityChallenge(4).reward.effectValue, 0, 3) : \"\"),\r\n multValue: (ic, dim) => {\r\n // We cheat here by actually giving IC4 a multiplier of a value equal to its effect on the final\r\n // value in order to represent its proportion accurately. It's hidden by displayOverride\r\n if (ic === 4) {\r\n const ic4Pow = InfinityChallenge(4).reward.effectValue;\r\n const mults = AntimatterDimensions.all.map(ad => ad.multiplier.pow((ic4Pow - 1) / ic4Pow));\r\n if (dim?.length === 2) return mults.reduce((x, y) => x.times(y), DC.D1);\r\n return mults[Number(dim.charAt(2)) - 1];\r\n }\r\n\r\n if (dim?.length === 2) {\r\n let totalEffect = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(dim); tier++) {\r\n totalEffect = totalEffect.times((MultiplierTabHelper.ICDimCheck(ic, `${dim}${tier}`) &&\r\n InfinityChallenge(ic).isCompleted) ? InfinityChallenge(ic).reward.effectOrDefault(1) : 1);\r\n }\r\n return totalEffect;\r\n }\r\n const num = Number(dim.charAt(2));\r\n if (ic === 8) return (num > 1 && num < 8) ? InfinityChallenge(ic).reward.effectValue : DC.D1;\r\n return InfinityChallenge(ic).reward.effectValue;\r\n },\r\n isActive: ic => InfinityChallenge(ic).isCompleted,\r\n icon: ic => {\r\n const base = MultiplierTabIcons.CHALLENGE(\"infinity\");\r\n return {\r\n color: base.color,\r\n symbol: `${base.symbol}${ic}`,\r\n };\r\n },\r\n },\r\n eternityChallenge: {\r\n name: ec => `Eternity Challenge ${ec}`,\r\n multValue: (ec, dim) => {\r\n if (dim?.length === 2) {\r\n let totalEffect = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(dim); tier++) {\r\n totalEffect = totalEffect.times(\r\n (MultiplierTabHelper.ECDimCheck(ec, `${dim}${tier}`) && EternityChallenge(ec).reward.canBeApplied)\r\n ? EternityChallenge(ec).reward.effectOrDefault(1).clampMin(1)\r\n : 1);\r\n }\r\n return totalEffect;\r\n }\r\n if (ec === 2) return dim === \"ID1\" ? EternityChallenge(ec).reward.effectValue : DC.D1;\r\n return EternityChallenge(ec).reward.effectOrDefault(1);\r\n },\r\n isActive: ec => EternityChallenge(ec).reward.canBeApplied,\r\n icon: ec => {\r\n const base = MultiplierTabIcons.CHALLENGE(\"eternity\");\r\n return {\r\n color: base.color,\r\n symbol: `${base.symbol}${ec}`,\r\n };\r\n },\r\n },\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const infinities = {\r\n total: {\r\n name: \"Infinities gained per Crunch\",\r\n isBase: true,\r\n multValue: () => gainedInfinities(),\r\n // The earliest sources of infinity multipliers are ach87 and TS32, which may happen in either order\r\n isActive: () => (Achievement(87).isUnlocked || PlayerProgress.eternityUnlocked()) &&\r\n !EternityChallenge(4).isRunning && !Pelle.isDoomed,\r\n overlay: [\"∞\", \"\"],\r\n },\r\n achievement: {\r\n name: \"Achievements\",\r\n multValue: () => DC.D1.timesEffectsOf(\r\n Achievement(87),\r\n Achievement(164)\r\n ),\r\n isActive: () => Achievement(87).isUnlocked,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n timeStudy: {\r\n name: \"Time Study 32\",\r\n multValue: () => TimeStudy(32).effectOrDefault(1),\r\n isActive: () => TimeStudy(32).isBought,\r\n icon: MultiplierTabIcons.TIME_STUDY,\r\n },\r\n amplifierInf: {\r\n name: \"Reality Upgrade - Boundless Amplifier\",\r\n multValue: () => DC.D1.timesEffectsOf(RealityUpgrade(5)),\r\n isActive: () => PlayerProgress.realityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n realityUpgrades: {\r\n name: \"Reality Upgrade - Innumerably Construct\",\r\n multValue: () => DC.D1.timesEffectsOf(RealityUpgrade(7)),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n glyph: {\r\n name: \"Equipped Glyphs\",\r\n multValue: () => getAdjustedGlyphEffect(\"infinityinfmult\"),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n ra: {\r\n name: \"Ra Upgrade - Multiplier based on TT\",\r\n multValue: () => Ra.unlocks.continuousTTBoost.effects.infinity.effectOrDefault(1),\r\n isActive: () => Ra.unlocks.continuousTTBoost.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n singularity: {\r\n name: \"Singularity Milestone - Power from Singularities\",\r\n powValue: () => SingularityMilestone.infinitiedPow.effectOrDefault(1),\r\n isActive: () => SingularityMilestone.infinitiedPow.canBeApplied,\r\n icon: MultiplierTabIcons.SINGULARITY,\r\n },\r\n teresa90: {\r\n name: \"Teresa Level 90\",\r\n powValue: () => Math.pow((Math.log10(Currency.realities.value)/20), 1.111),\r\n isActive: () => Ra.unlocks.realitiesBoostInfinityAndEternityProduction.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { PlayerProgress } from \"../../player-progress\";\r\n\r\nimport { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const ID = {\r\n total: {\r\n name: dim => {\r\n if (dim) return `ID ${dim} Multiplier`;\r\n if (EternityChallenge(7).isRunning) return \"AD7 Production\";\r\n return \"Infinity Power Production\";\r\n },\r\n displayOverride: dim => (dim\r\n ? formatX(InfinityDimension(dim).multiplier, 2)\r\n : `${format(InfinityDimension(1).productionPerSecond, 2)}/sec`\r\n ),\r\n multValue: dim => (dim\r\n ? InfinityDimension(dim).multiplier\r\n : InfinityDimensions.all\r\n .filter(id => id.isProducing)\r\n .map(id => id.multiplier)\r\n .reduce((x, y) => x.times(y), DC.D1)),\r\n isActive: dim => (dim\r\n ? InfinityDimension(dim).isProducing\r\n : (PlayerProgress.eternityUnlocked() || InfinityDimension(1).isProducing)),\r\n dilationEffect: () => {\r\n const baseEff = player.dilation.active\r\n ? 0.75 * Effects.product(DilationUpgrade.dilationPenalty)\r\n : 1;\r\n return baseEff * (Effarig.isRunning ? Effarig.multDilation : 1);\r\n },\r\n isDilated: true,\r\n overlay: [\"∞\", \"\"],\r\n icon: dim => MultiplierTabIcons.DIMENSION(\"ID\", dim),\r\n },\r\n purchase: {\r\n name: dim => (dim ? `Purchased ID ${dim}` : \"Purchases\"),\r\n multValue: dim => {\r\n const getMult = id => Decimal.pow(InfinityDimension(id).powerMultiplier,\r\n Math.floor(InfinityDimension(id).baseAmount / 10));\r\n if (dim) return getMult(dim);\r\n return InfinityDimensions.all\r\n .filter(id => id.isProducing)\r\n .map(id => getMult(id.tier))\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n },\r\n isActive: () => !EternityChallenge(2).isRunning && !EternityChallenge(10).isRunning,\r\n icon: dim => MultiplierTabIcons.PURCHASE(\"ID\", dim),\r\n },\r\n highestDim: {\r\n name: () => `Amount of highest Dimension`,\r\n displayOverride: () => {\r\n const dim = MultiplierTabHelper.activeDimCount(\"ID\");\r\n return `ID ${dim}, ${format(InfinityDimension(dim).amount, 2)}`;\r\n },\r\n multValue: () => InfinityDimension(MultiplierTabHelper.activeDimCount(\"ID\")).amount,\r\n isActive: () => InfinityDimension(1).isProducing,\r\n icon: MultiplierTabIcons.DIMENSION(\"ID\"),\r\n },\r\n\r\n basePurchase: {\r\n name: \"Base purchases\",\r\n multValue: dim => {\r\n const getMult = id => {\r\n const purchases = id === 8\r\n ? Math.floor(InfinityDimension(id).baseAmount / 10)\r\n : Math.min(InfinityDimensions.HARDCAP_PURCHASES, Math.floor(InfinityDimension(id).baseAmount / 10));\r\n const baseMult = InfinityDimension(id)._powerMultiplier;\r\n return Decimal.pow(baseMult, purchases);\r\n };\r\n if (dim) return getMult(dim);\r\n return InfinityDimensions.all\r\n .filter(id => id.isProducing)\r\n .map(id => getMult(id.tier))\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n },\r\n isActive: true,\r\n icon: MultiplierTabIcons.PURCHASE(\"baseID\"),\r\n },\r\n tesseractPurchase: {\r\n name: \"Tesseracts\",\r\n multValue: dim => {\r\n const getMult = id => {\r\n if (id === 8) return DC.D1;\r\n const purchases = Math.floor(InfinityDimension(id).baseAmount / 10);\r\n return Decimal.pow(InfinityDimension(id)._powerMultiplier,\r\n Math.clampMin(purchases - InfinityDimensions.HARDCAP_PURCHASES, 0));\r\n };\r\n if (dim) return getMult(dim);\r\n return InfinityDimensions.all\r\n .filter(id => id.isProducing)\r\n .map(id => getMult(id.tier))\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n },\r\n isActive: () => Tesseracts.bought > 0,\r\n icon: MultiplierTabIcons.PURCHASE(\"tesseractID\"),\r\n },\r\n infinityGlyphSacrifice: {\r\n name: \"Infinity Glyph sacrifice\",\r\n multValue: () => (InfinityDimension(8).isProducing\r\n ? Decimal.pow(GlyphSacrifice.infinity.effectValue, Math.floor(Math.min(InfinityDimension(8).baseAmount , 1e25) / 10))\r\n : DC.D1),\r\n isActive: () => GlyphSacrifice.infinity.effectValue.gt(1),\r\n icon: MultiplierTabIcons.SACRIFICE(\"infinity\"),\r\n },\r\n powPurchase: {\r\n name: \"Imaginary Upgrade - Recollection of Intrusion\",\r\n powValue: () => ImaginaryUpgrade(14).effectOrDefault(1),\r\n isActive: () => ImaginaryUpgrade(14).canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"imaginary\"),\r\n },\r\n\r\n replicanti: {\r\n name: \"Replicanti Multiplier\",\r\n multValue: dim => Decimal.pow(replicantiMult(), dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => Replicanti.areUnlocked,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"replication\"),\r\n },\r\n achievementMult: {\r\n name: \"Achievement Multiplier\",\r\n multValue: dim => Decimal.pow(Achievements.power, dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => Achievement(75).canBeApplied && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n achievement: {\r\n // Note: This only applies to ID1\r\n name: () => \"Achievement 94\",\r\n multValue: dim => ((dim ?? 1) === 1 ? Achievement(94).effectOrDefault(1) : 1),\r\n isActive: () => Achievement(94).canBeApplied,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n timeStudy: {\r\n name: dim => (dim ? `Time Studies (ID ${dim})` : \"Time Studies\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n TimeStudy(82),\r\n TimeStudy(92),\r\n TimeStudy(162),\r\n TimeStudy(312),\r\n );\r\n if (dim) return dim === 4 ? allMult.times(TimeStudy(72).effectOrDefault(1)) : allMult;\r\n const maxActiveDim = MultiplierTabHelper.activeDimCount(\"ID\");\r\n return Decimal.pow(allMult, maxActiveDim).times(maxActiveDim >= 4 ? TimeStudy(72).effectOrDefault(1) : DC.D1);\r\n },\r\n isActive: () => PlayerProgress.eternityUnlocked(),\r\n icon: MultiplierTabIcons.TIME_STUDY,\r\n },\r\n eternityUpgrade: {\r\n name: \"Eternity Upgrades\",\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n EternityUpgrade.idMultEP,\r\n EternityUpgrade.idMultEternities,\r\n EternityUpgrade.idMultICRecords,\r\n );\r\n return Decimal.pow(allMult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\"));\r\n },\r\n isActive: () => PlayerProgress.eternityUnlocked(),\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n\r\n eu1: {\r\n name: () => \"Unspent Eternity Points\",\r\n multValue: dim => Decimal.pow(EternityUpgrade.idMultEP.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => EternityUpgrade.idMultEP.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n eu2: {\r\n name: () => \"Eternity Count\",\r\n multValue: dim => Decimal.pow(EternityUpgrade.idMultEternities.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => EternityUpgrade.idMultEternities.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n eu3: {\r\n name: () => \"Infinity Challenge Records\",\r\n multValue: dim => Decimal.pow(EternityUpgrade.idMultICRecords.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => EternityUpgrade.idMultICRecords.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n\r\n infinityChallenge: {\r\n name: \"Infinity Challenges\",\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n InfinityChallenge(1).reward,\r\n InfinityChallenge(6).reward,\r\n );\r\n return Decimal.pow(allMult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\"));\r\n },\r\n isActive: () => InfinityChallenge(1).isCompleted,\r\n icon: MultiplierTabIcons.CHALLENGE(\"infinity\"),\r\n },\r\n eternityChallenge: {\r\n name: dim => (dim ? `Eternity Challenges (ID ${dim})` : \" Eternity Challenges\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n EternityChallenge(4).reward,\r\n EternityChallenge(9).reward,\r\n ).times(EternityChallenge(7).isRunning ? Tickspeed.perSecond : DC.D1);\r\n if (dim) {\r\n if (dim === 1) return allMult.times(EternityChallenge(2).reward.effectOrDefault(1));\r\n return allMult;\r\n }\r\n const maxActiveDim = MultiplierTabHelper.activeDimCount(\"ID\");\r\n return Decimal.pow(allMult, maxActiveDim)\r\n .times(maxActiveDim >= 1 ? EternityChallenge(2).reward.effectOrDefault(1) : DC.D1);\r\n },\r\n isActive: () => EternityChallenge(2).completions > 0,\r\n icon: MultiplierTabIcons.CHALLENGE(\"eternity\"),\r\n },\r\n tickspeed: {\r\n name: () => \"Tickspeed (EC7)\",\r\n displayOverride: () => {\r\n const tickRate = Tickspeed.perSecond;\r\n const activeDims = MultiplierTabHelper.activeDimCount(\"ID\");\r\n const dimString = MultiplierTabHelper.pluralizeDimensions(activeDims);\r\n return `${format(tickRate, 2, 2)}/sec on ${formatInt(activeDims)} ${dimString}\r\n ➜ ${formatX(tickRate.pow(activeDims), 2, 2)}`;\r\n },\r\n multValue: () => Tickspeed.perSecond.pow(8),\r\n isActive: () => EternityChallenge(7).isRunning,\r\n icon: MultiplierTabIcons.TICKSPEED,\r\n },\r\n glyph: {\r\n name: \"Glyph Effects\",\r\n multValue: () => 1,\r\n powValue: () => getAdjustedGlyphEffect(\"infinitypow\") * getAdjustedGlyphEffect(\"effarigdimensions\"),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n alchemy: {\r\n name: \"Glyph Alchemy\",\r\n multValue: dim => Decimal.pow(AlchemyResource.dimensionality.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n powValue: () => AlchemyResource.infinity.effectOrDefault(1) * Ra.momentumValue,\r\n isActive: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied,\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n imaginaryUpgrade: {\r\n name: \"Imaginary Upgrade - Hyperbolic Apeirogon\",\r\n multValue: dim => Decimal.pow(ImaginaryUpgrade(8).effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => ImaginaryUpgrade(8).canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"imaginary\"),\r\n },\r\n pelle: {\r\n name: \"Pelle Rift Effects\",\r\n multValue: dim => {\r\n const mult = DC.D1.timesEffectsOf(PelleRifts.recursion.milestones[1]);\r\n const maxActiveDim = MultiplierTabHelper.activeDimCount(\"ID\");\r\n // This only affects ID1\r\n const decayMult = ((dim ? dim === 1 : maxActiveDim >= 1)\r\n ? PelleRifts.decay.milestones[0].effectOrDefault(1)\r\n : DC.D1);\r\n return Decimal.pow(mult, dim ? 1 : maxActiveDim).times(decayMult);\r\n },\r\n powValue: () => PelleRifts.paradox.effectOrDefault(DC.D1).toNumber(),\r\n isActive: () => Pelle.isDoomed,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: dim => Decimal.pow(ShopPurchase.allDimPurchases.currentMult,\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"ID\")),\r\n isActive: () => ShopPurchaseData.totalSTD > 0,\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n\r\n powerConversion: {\r\n name: \"Infinity Power Conversion\",\r\n powValue: () => InfinityDimensions.powerConversionRate,\r\n isActive: () => Currency.infinityPower.value.gt(1) && !EternityChallenge(9).isRunning,\r\n icon: MultiplierTabIcons.IPOW_CONVERSION,\r\n },\r\n\r\n v50:{\r\n name: \"Ra Upgrade - The 5 V-achievement milestone affects ID and TD at a reduced rate\",\r\n powValue: () => Math.pow(VUnlocks.adPow.effectValue, 0.5),\r\n isActive: () => Ra.unlocks.vAchMilestone2AffectsIDsAndTDs.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_V\r\n },\r\n\r\n nerfV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.5,\r\n isActive: () => V.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfCursed: {\r\n name: \"Cursed Glyphs\",\r\n powValue: () => getAdjustedGlyphEffect(\"curseddimensions\"),\r\n isActive: () => getAdjustedGlyphEffect(\"curseddimensions\") !== 1,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"cursed\"),\r\n },\r\n nerfPelle: {\r\n name: \"Doomed Reality\",\r\n powValue: 0.5,\r\n isActive: () => PelleStrikes.powerGalaxies.hasStrike,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n nerfSoftcap: {\r\n name: \"Infinity Power Softcap\",\r\n powValue: () => 0.1,\r\n isActive: () => (Currency.infinityPower.value.log10() > 9e15),\r\n icon: MultiplierTabIcons.SOFTCAP(\"infinity\")\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { PlayerProgress } from \"../../player-progress\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\nimport { corruptionPenalties } from \"../mending/corruption\";\r\n\r\n// See index.js for documentation\r\nexport const IP = {\r\n total: {\r\n name: \"Total IP Gained on Infinity\",\r\n displayOverride: () => (Player.canCrunch\r\n ? format(gainedInfinityPoints(), 2, 2)\r\n : \"Cannot Crunch\"),\r\n // This effectively hides everything if the player can't actually gain any\r\n multValue: () => (Player.canCrunch ? gainedInfinityPoints() : 1),\r\n isActive: () => PlayerProgress.infinityUnlocked() || Player.canCrunch,\r\n dilationEffect: () => (Laitela.isRunning ? 0.75 * Effects.product(DilationUpgrade.dilationPenalty) : 1),\r\n isDilated: true,\r\n overlay: [\"∞\", \"\"],\r\n },\r\n base: {\r\n name: \"Base Infinity Points\",\r\n isBase: true,\r\n fakeValue: DC.D5,\r\n multValue: () => {\r\n const div = Effects.min(308, Achievement(103), TimeStudy(111));\r\n return Decimal.pow10(player.records.thisInfinity.maxAM.log10() / div - 0.75);\r\n },\r\n isActive: () => player.break,\r\n icon: MultiplierTabIcons.CONVERT_FROM(\"AM\"),\r\n },\r\n antimatter: {\r\n name: \"Infinity Points from Antimatter\",\r\n displayOverride: () => `${format(player.records.thisInfinity.maxAM, 2, 2)} AM`,\r\n // Just needs to match the value in base and be larger than 1\r\n multValue: DC.D5,\r\n isActive: () => player.break,\r\n icon: MultiplierTabIcons.ANTIMATTER,\r\n },\r\n divisor: {\r\n name: \"Formula Improvement\",\r\n displayOverride: () => {\r\n const div = Effects.min(308, Achievement(103), TimeStudy(111));\r\n return `log(AM)/${formatInt(308)} ➜ log(AM)/${format(div, 2, 1)}`;\r\n },\r\n powValue: () => 308 / Effects.min(308, Achievement(103), TimeStudy(111)),\r\n isActive: () => Achievement(103).canBeApplied || TimeStudy(111).isBought,\r\n icon: MultiplierTabIcons.DIVISOR(\"IP\"),\r\n },\r\n infinityUpgrade: {\r\n name: () => `Infinity Upgrade - Repeatable ${formatX(2)} IP`,\r\n multValue: () => InfinityUpgrade.ipMult.effectOrDefault(1),\r\n isActive: () => player.break && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"infinity\"),\r\n },\r\n achievement: {\r\n name: \"Achievements\",\r\n multValue: () => DC.D1.timesEffectsOf(\r\n Achievement(85),\r\n Achievement(93),\r\n Achievement(116),\r\n Achievement(125),\r\n Achievement(141).effects.ipGain,\r\n ),\r\n isActive: () => player.break && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n timeStudy: {\r\n name: \"Time Studies\",\r\n multValue: () => DC.D1.timesEffectsOf(\r\n TimeStudy(41),\r\n TimeStudy(51),\r\n TimeStudy(141),\r\n TimeStudy(142),\r\n TimeStudy(143),\r\n TimeStudy(305),\r\n ),\r\n isActive: () => player.break && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.TIME_STUDY,\r\n },\r\n dilationUpgrade: {\r\n name: \"Dilation Upgrade - IP multiplier based on DT\",\r\n multValue: () => DilationUpgrade.ipMultDT.effectOrDefault(1),\r\n isActive: () => DilationUpgrade.ipMultDT.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"dilation\"),\r\n },\r\n glyph: {\r\n name: \"Equipped Glyphs\",\r\n multValue: () => Pelle.specialGlyphEffect.infinity.times((Pelle.isDoomed&&!Ra.unlocks.unlockPelleGlyphEffects.isUnlocked) ? 1 : getAdjustedGlyphEffect(\"infinityIP\")),\r\n powValue: () => (GlyphAlteration.isAdded(\"infinity\") ? getSecondaryGlyphEffect(\"infinityIP\") : 1),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n alchemy: {\r\n name: \"Glyph Alchemy\",\r\n multValue: () => Replicanti.amount.powEffectOf(AlchemyResource.exponential),\r\n isActive: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied,\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n pelle: {\r\n name: \"Pelle Strike - Vacuum Rift\",\r\n multValue: () => DC.D1.timesEffectsOf(PelleRifts.vacuum),\r\n isActive: () => Pelle.isDoomed,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n mendingMilestones: {\r\n name: \"Mending Milestone 1\",\r\n multValue: 1e20,\r\n isActive: () => PlayerProgress.mendingUnlocked(),\r\n icon: MultiplierTabIcons.MENDINGMILESTONE,\r\n },\r\n ra: {\r\n name: \"Ra Memories\",\r\n powValue: () => (Decimal.log10(Currency.realityMachines.value.max(1)) / 100),\r\n isActive: () => Ra.unlocks.realityMachinesBoostIpAndEpGain.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: () => ShopPurchase.IPPurchases.currentMult,\r\n isActive: () => ShopPurchaseData.totalSTD > 0,\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n\r\n nerfTeresa: {\r\n name: \"Teresa's Reality\",\r\n powValue: () => 0.55,\r\n isActive: () => Teresa.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_TERESA,\r\n },\r\n nerfV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.5,\r\n isActive: () => V.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfCorruptions: {\r\n name: \"Prestige Limits Hostility\",\r\n powValue: () => corruptionPenalties.prestigeLimits[player.mending.corruption[0]],\r\n isActive: () => (player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[0] > 0),\r\n icon: MultiplierTabIcons.CORRUPTION,\r\n },\r\n nerfSoftcap: {\r\n name: \"Infinity Point Softcap\",\r\n powValue: () => (gainedInfinityPoints().log10() / gainedInfinityPoints(true).log10()),\r\n isActive: () => (gainedInfinityPoints(true).gte(DC.END)),\r\n icon: MultiplierTabIcons.SOFTCAP(\"infinity\")\r\n },\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const replicanti = {\r\n total: {\r\n name: \"Replicanti Speed\",\r\n multValue: () => totalReplicantiSpeedMult(Replicanti.amount.gt(replicantiCap())),\r\n isActive: () => PlayerProgress.eternityUnlocked(),\r\n overlay: [\"Ξ\"],\r\n },\r\n achievement: {\r\n name: \"Achievement 134\",\r\n // This is explicitly 2 in the replicanti code as well, inside of a replicanti amount check\r\n multValue: 2,\r\n isActive: () => Achievement(134).canBeApplied && Replicanti.amount.lte(replicantiCap()) && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n timeStudy: {\r\n name: \"Time Studies\",\r\n multValue: () => {\r\n const preReality = Effects.product(TimeStudy(62), TimeStudy(213));\r\n return preReality * (Perk.studyPassive.isBought && TimeStudy(132).isBought ? 3 : 1);\r\n },\r\n isActive: () => PlayerProgress.eternityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.TIME_STUDY,\r\n },\r\n glyph: {\r\n name: \"Glyph Effects\",\r\n multValue: () => {\r\n const baseEffect = (Pelle.isDoomed ? DC.D1 : getAdjustedGlyphEffect(\"replicationspeed\"))\r\n .times(Pelle.specialGlyphEffect.replication);\r\n const alteredEffect = Math.clampMin(\r\n Decimal.log10(Replicanti.amount) * getSecondaryGlyphEffect(\"replicationdtgain\"), 1);\r\n return GlyphAlteration.isAdded(\"replication\") ? baseEffect.times(alteredEffect) : baseEffect;\r\n },\r\n isActive: () => PlayerProgress.realityUnlocked() && (!Pelle.isDoomed || Pelle.specialGlyphEffect.replication > 1),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH,\r\n },\r\n amplifierRep: {\r\n name: \"Reality Upgrade - Replicative Amplifier\",\r\n multValue: () => RealityUpgrade(2).effectOrDefault(1),\r\n isActive: () => PlayerProgress.realityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n realityUpgrade1: {\r\n name: \"Reality Upgrade - Cosmically Duplicate\",\r\n multValue: () => RealityUpgrade(6).effectOrDefault(1),\r\n isActive: () => PlayerProgress.realityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n realityUpgrade2: {\r\n name: \"Reality Upgrade - Replicative Rapidity\",\r\n multValue: () => RealityUpgrade(23).effectOrDefault(1),\r\n isActive: () => PlayerProgress.realityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n alchemy: {\r\n name: \"Alchemy Resource - Replication\",\r\n multValue: () => AlchemyResource.replication.effectOrDefault(1),\r\n isActive: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n ra: {\r\n name: \"Ra Upgrade - Multiplier based on TT\",\r\n multValue: () => Ra.unlocks.continuousTTBoost.effects.replicanti.effectOrDefault(1),\r\n isActive: () => Ra.unlocks.continuousTTBoost.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n pelle: {\r\n name: \"Pelle Strike - Decay Rift\",\r\n multValue: () => PelleRifts.decay.effectValue,\r\n isActive: () => Pelle.isDoomed && PelleRifts.decay.effectValue.gt(1),\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n mendingMilestones: {\r\n name: \"Mending Milestone 1\",\r\n multValue: 1e3,\r\n isActive: () => PlayerProgress.mendingUnlocked(),\r\n icon: MultiplierTabIcons.MENDINGMILESTONE,\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: () => ShopPurchase.replicantiPurchases.currentMult,\r\n isActive: () => ShopPurchaseData.totalSTD > 0 && ShopPurchase.replicantiPurchases.currentMult > 1,\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n relicShardBoost: {\r\n name: \"Effarig Level 65\",\r\n multValue: () => Currency.relicShards.value.pow(0.6667).clampMin(1),\r\n isActive: () => Ra.unlocks.relicShardBoost.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { PlayerProgress } from \"../../player-progress\";\r\n\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const TP = {\r\n total: {\r\n name: \"Total Tachyon Particles\",\r\n displayOverride: () => {\r\n const baseTPStr = format(new Decimal(Currency.tachyonParticles.value), 2, 2);\r\n return PelleRifts.paradox.milestones[1].canBeApplied\r\n ? `${baseTPStr}${formatPow(PelleRifts.paradox.milestones[1].effectValue, 1, 1)}`\r\n : baseTPStr;\r\n },\r\n // This is treated as a multiplier and not a prestige currency, with an overridden display;\r\n // therefore we need to return 1 \"by default\"\r\n multValue: () => {\r\n const baseTP = new Decimal(Currency.tachyonParticles.value)\r\n .pow(PelleRifts.paradox.milestones[1].effectOrDefault(1));\r\n return TimeStudy.dilation.isBought ? baseTP : 1;\r\n },\r\n isActive: () => PlayerProgress.realityUnlocked() || PlayerProgress.dilationUnlocked(),\r\n icon: MultiplierTabIcons.TACHYON_PARTICLES,\r\n },\r\n base: {\r\n name: \"Base Tachyon Particle Count\",\r\n isBase: true,\r\n multValue: () => new Decimal(Currency.tachyonParticles.value).div(tachyonGainMultiplier()),\r\n isActive: () => new Decimal(Currency.tachyonParticles.value).gt(0),\r\n icon: MultiplierTabIcons.TACHYON_PARTICLES,\r\n },\r\n achievementMult: {\r\n name: \"Achievement Multiplier\",\r\n multValue: () => RealityUpgrade(8).effectOrDefault(1),\r\n isActive: () => RealityUpgrade(8).canBeApplied && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n achievement: {\r\n name: \"Achievement 132\",\r\n multValue: () => Achievement(132).effectOrDefault(1),\r\n isActive: () => Achievement(132).canBeApplied,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n dilation: {\r\n name: () => `Dilation Upgrade - Repeatable ${formatX(3)} TP`,\r\n multValue: () => DilationUpgrade.tachyonGain.effectOrDefault(1),\r\n isActive: () => DilationUpgrade.tachyonGain.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"dilation\"),\r\n },\r\n amplifierTP: {\r\n name: \"Reality Upgrade - Superluminal Amplifier\",\r\n multValue: () => DC.D1.timesEffectsOf(RealityUpgrade(4)),\r\n isActive: () => PlayerProgress.realityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n realityUpgrade: {\r\n name: \"Reality Upgrade - The Paradoxical Forever\",\r\n multValue: () => DC.D1.timesEffectsOf(RealityUpgrade(15)),\r\n isActive: () => PlayerProgress.realityUnlocked() && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n dilationGlyphSacrifice: {\r\n name: \"Dilation Glyph Sacrifice\",\r\n multValue: () => GlyphSacrifice.dilation.effectValue,\r\n isActive: () => GlyphSacrifice.dilation.effectValue.gt(1),\r\n icon: MultiplierTabIcons.SACRIFICE(\"dilation\"),\r\n },\r\n\r\n nerfEnslaved: {\r\n name: \"The Nameless Ones' Reality\",\r\n powValue: () => Enslaved.tachyonNerf,\r\n isActive: () => Enslaved.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_ENSLAVED,\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nimport { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const tickspeed = {\r\n total: {\r\n name: \"Total Tickspeed\",\r\n displayOverride: () => {\r\n const tickRate = Tickspeed.perSecond;\r\n const activeDims = MultiplierTabHelper.activeDimCount(\"AD\");\r\n const dimString = MultiplierTabHelper.pluralizeDimensions(activeDims);\r\n return `${format(tickRate, 2, 2)}/sec on ${formatInt(activeDims)} ${dimString}\r\n ➜ ${formatX(tickRate.pow(activeDims), 2, 2)}`;\r\n },\r\n // This is necessary to make multValue entries from the other props scale properly, which are also all pow10\r\n // due to the multiplier tab splitting up entries logarithmically\r\n fakeValue: DC.E100,\r\n multValue: () => Tickspeed.perSecond.pow(MultiplierTabHelper.activeDimCount(\"AD\")),\r\n // No point in showing this breakdown at all unless both components are nonzero; however they will always be nonzero\r\n // due to the way the calculation works, so we have to manually hide it here\r\n isActive: () => Tickspeed.perSecond.gt(1) && effectiveBaseGalaxies() > 0,\r\n dilationEffect: () => (Effarig.isRunning ? Effarig.tickDilation : 1),\r\n overlay: [\"\"],\r\n icon: MultiplierTabIcons.TICKSPEED,\r\n },\r\n base: {\r\n name: \"Base Tickspeed from Achievements\",\r\n displayOverride: () => {\r\n const val = DC.D1.dividedByEffectsOf(\r\n Achievement(36),\r\n Achievement(45),\r\n Achievement(66),\r\n Achievement(83)\r\n );\r\n return `${format(val, 2, 2)}/sec`;\r\n },\r\n multValue: () => new Decimal.pow10(100 * MultiplierTabHelper.decomposeTickspeed().base),\r\n isActive: () => [36, 45, 66, 83].some(a => Achievement(a).canBeApplied),\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n upgrades: {\r\n name: \"Tickspeed Upgrades\",\r\n displayOverride: () => `${formatInt(Tickspeed.totalUpgrades)} Total`,\r\n multValue: () => new Decimal.pow10(100 * MultiplierTabHelper.decomposeTickspeed().tickspeed),\r\n isActive: true,\r\n icon: MultiplierTabIcons.PURCHASE(\"AD\"),\r\n },\r\n galaxies: {\r\n name: \"Galaxies\",\r\n displayOverride: () => {\r\n const ag = player.galaxies + GalaxyGenerator.galaxies;\r\n const rg = Replicanti.galaxies.total;\r\n const tg = player.dilation.totalTachyonGalaxies;\r\n return `${formatInt(ag + rg + tg)} Total`;\r\n },\r\n multValue: () => new Decimal.pow10(100 * MultiplierTabHelper.decomposeTickspeed().galaxies),\r\n isActive: true,\r\n icon: MultiplierTabIcons.GALAXY,\r\n },\r\n pelleTickspeedPow: {\r\n name: \"Tickspeed Dilation Upgrade\",\r\n powValue: () => DilationUpgrade.tickspeedPower.effectValue,\r\n isActive: () => DilationUpgrade.tickspeedPower.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"dilation\"),\r\n },\r\n};\r\n\r\nexport const tickspeedUpgrades = {\r\n purchased: {\r\n name: \"Purchased Tickspeed Upgrades\",\r\n displayOverride: () => (Laitela.continuumActive\r\n ? formatFloat(Tickspeed.continuumValue, 2, 2)\r\n : formatInt(player.totalTickBought)),\r\n multValue: () => Decimal.pow10(Laitela.continuumActive ? Tickspeed.continuumValue : player.totalTickBought),\r\n isActive: () => true,\r\n icon: MultiplierTabIcons.PURCHASE(\"AD\"),\r\n },\r\n free: {\r\n name: \"Tickspeed Upgrades from TD\",\r\n displayOverride: () => formatInt(player.totalTickGained),\r\n multValue: () => Decimal.pow10(player.totalTickGained),\r\n isActive: () => Currency.timeShards.gt(0),\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"time\"),\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { PlayerProgress } from \"../../player-progress\";\r\n\r\nimport { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { MultiplierTabIcons } from \"./icons\";\r\n\r\n// See index.js for documentation\r\nexport const TD = {\r\n total: {\r\n name: dim => {\r\n if (dim) return `TD ${dim} Multiplier`;\r\n if (EternityChallenge(7).isRunning) return \"ID8 Production\";\r\n return \"Time Shard Production\";\r\n },\r\n displayOverride: dim => (dim\r\n ? formatX(TimeDimension(dim).multiplier, 2)\r\n : `${format(TimeDimension(1).productionPerSecond, 2)}/sec`\r\n ),\r\n multValue: dim => (dim\r\n ? TimeDimension(dim).multiplier\r\n : TimeDimensions.all\r\n .filter(td => td.isProducing)\r\n .map(td => td.multiplier)\r\n .reduce((x, y) => x.times(y), DC.D1)),\r\n isActive: dim => (dim\r\n ? TimeDimension(dim).isProducing\r\n : (PlayerProgress.realityUnlocked() || TimeDimension(1).isProducing)),\r\n dilationEffect: () => {\r\n const baseEff = player.dilation.active\r\n ? 0.75 * Effects.product(DilationUpgrade.dilationPenalty)\r\n : 1;\r\n return baseEff * (Effarig.isRunning ? Effarig.multDilation : 1);\r\n },\r\n isDilated: true,\r\n overlay: [\"Δ\", \"\"],\r\n icon: dim => MultiplierTabIcons.DIMENSION(\"TD\", dim),\r\n },\r\n purchase: {\r\n name: dim => (dim ? `Purchased TD ${dim}` : \"Purchases\"),\r\n multValue: dim => {\r\n const getMult = td => {\r\n const d = TimeDimension(td);\r\n const bought = td === 8 ? Math.clampMax(d.bought, 1e8) : d.bought;\r\n return Decimal.pow(d.powerMultiplier, bought);\r\n };\r\n if (dim) return getMult(dim);\r\n return TimeDimensions.all\r\n .filter(td => td.isProducing)\r\n .map(td => getMult(td.tier))\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n },\r\n isActive: () => !EternityChallenge(2).isRunning && !EternityChallenge(10).isRunning,\r\n icon: dim => MultiplierTabIcons.PURCHASE(\"TD\", dim),\r\n },\r\n highestDim: {\r\n name: () => `Amount of highest Dimension`,\r\n displayOverride: () => {\r\n const dim = MultiplierTabHelper.activeDimCount(\"TD\");\r\n return `TD ${dim}, ${format(TimeDimension(dim).amount)}`;\r\n },\r\n multValue: () => TimeDimension(MultiplierTabHelper.activeDimCount(\"TD\")).amount,\r\n isActive: () => TimeDimension(1).isProducing,\r\n icon: MultiplierTabIcons.DIMENSION(\"TD\"),\r\n },\r\n\r\n basePurchase: {\r\n name: \"Base purchases\",\r\n multValue: dim => {\r\n const getMult = td => Decimal.pow(4,\r\n td === 8 ? Math.clampMax(TimeDimension(td).bought, 1e8) : TimeDimension(td).bought);\r\n if (dim) return getMult(dim);\r\n return TimeDimensions.all\r\n .filter(td => td.isProducing)\r\n .map(td => getMult(td.tier))\r\n .reduce((x, y) => x.times(y), DC.D1);\r\n },\r\n isActive: dim => (dim\r\n ? ImaginaryUpgrade(14).canBeApplied || (dim === 8 && GlyphSacrifice.time.effectValue.gt(1))\r\n : TimeDimension(1).isProducing),\r\n icon: dim => MultiplierTabIcons.PURCHASE(\"TD\", dim),\r\n },\r\n timeGlyphSacrifice: {\r\n name: \"Time Glyph Sacrifice\",\r\n multValue: () => (TimeDimension(8).isProducing\r\n ? Decimal.pow(GlyphSacrifice.time.effectValue, Math.clampMax(TimeDimension(8).bought, 1e8))\r\n : DC.D1),\r\n isActive: () => GlyphSacrifice.time.effectValue.gt(1),\r\n icon: MultiplierTabIcons.SACRIFICE(\"time\"),\r\n },\r\n powPurchase: {\r\n name: \"Imaginary Upgrade - Recollection of Intrusion\",\r\n powValue: () => ImaginaryUpgrade(14).effectOrDefault(1),\r\n isActive: () => ImaginaryUpgrade(14).canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"imaginary\"),\r\n },\r\n\r\n achievementMult: {\r\n name: \"Eternity Upgrade - Achievement Multiplier\",\r\n multValue: dim => Decimal.pow(EternityUpgrade.tdMultAchs.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n isActive: () => EternityUpgrade.tdMultAchs.canBeApplied && !Pelle.isDoomed,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n achievement: {\r\n name: \"Achievement Rewards\",\r\n multValue: dim => {\r\n const baseMult = DC.D1.timesEffectsOf(Achievement(105), Achievement(128));\r\n return Decimal.pow(baseMult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\"));\r\n },\r\n isActive: () => Achievement(105).canBeApplied || Achievement(128).canBeApplied,\r\n icon: MultiplierTabIcons.ACHIEVEMENT,\r\n },\r\n timeStudy: {\r\n name: dim => (dim ? `Time Studies (TD ${dim})` : \"Time Studies\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n TimeStudy(93),\r\n TimeStudy(103),\r\n TimeStudy(151),\r\n TimeStudy(221),\r\n TimeStudy(301),\r\n TimeStudy(313),\r\n );\r\n\r\n const dimMults = Array.repeat(DC.D1, 9);\r\n for (let tier = 1; tier <= 8; tier++) {\r\n dimMults[tier] = dimMults[tier].timesEffectsOf(\r\n tier === 1 ? TimeStudy(11) : null,\r\n tier === 3 ? TimeStudy(73) : null,\r\n tier === 4 ? TimeStudy(227) : null\r\n );\r\n }\r\n\r\n if (dim) return allMult.times(dimMults[dim]);\r\n let totalMult = DC.D1;\r\n for (let tier = 1; tier <= MultiplierTabHelper.activeDimCount(\"TD\"); tier++) {\r\n totalMult = totalMult.times(dimMults[tier]).times(allMult);\r\n }\r\n return totalMult;\r\n },\r\n isActive: () => TimeDimension(1).isProducing,\r\n icon: MultiplierTabIcons.TIME_STUDY\r\n },\r\n eternityUpgrade: {\r\n name: dim => (dim ? `Other Eternity Upgrades (TD ${dim})` : \"Other Eternity Upgrades\"),\r\n multValue: dim => {\r\n const allMult = DC.D1.timesEffectsOf(\r\n EternityUpgrade.tdMultTheorems,\r\n EternityUpgrade.tdMultRealTime,\r\n );\r\n return Decimal.pow(allMult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\"));\r\n },\r\n isActive: () => TimeDimension(1).isProducing,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n\r\n eu1: {\r\n name: () => \"Unspent Time Theorems\",\r\n multValue: dim => Decimal.pow(EternityUpgrade.tdMultTheorems.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n isActive: () => EternityUpgrade.tdMultTheorems.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n eu2: {\r\n name: () => \"Days played\",\r\n multValue: dim => Decimal.pow(EternityUpgrade.tdMultRealTime.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n isActive: () => EternityUpgrade.tdMultRealTime.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"eternity\"),\r\n },\r\n\r\n eternityChallenge: {\r\n name: dim => (dim ? `Eternity Challenges (TD ${dim})` : \"Eternity Challenges\"),\r\n multValue: dim => {\r\n let allMult = DC.D1.timesEffectsOf(\r\n EternityChallenge(1).reward,\r\n EternityChallenge(10).reward,\r\n ).times(EternityChallenge(7).isRunning ? Tickspeed.perSecond : DC.D1);\r\n if (EternityChallenge(9).isRunning) {\r\n allMult = allMult.times(\r\n Decimal.pow(Math.clampMin(Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate / 7)\r\n .log2(), 1), 4).clampMin(1));\r\n }\r\n return Decimal.pow(allMult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\"));\r\n },\r\n isActive: () => EternityChallenge(1).completions > 0,\r\n icon: MultiplierTabIcons.CHALLENGE(\"eternity\")\r\n },\r\n tickspeed: {\r\n name: () => \"Tickspeed (EC7)\",\r\n displayOverride: () => {\r\n const tickRate = Tickspeed.perSecond;\r\n const activeDims = MultiplierTabHelper.activeDimCount(\"TD\");\r\n const dimString = MultiplierTabHelper.pluralizeDimensions(activeDims);\r\n return `${format(tickRate, 2, 2)}/sec on ${formatInt(activeDims)} ${dimString}\r\n ➜ ${formatX(tickRate.pow(activeDims), 2, 2)}`;\r\n },\r\n multValue: () => Tickspeed.perSecond.pow(MultiplierTabHelper.activeDimCount(\"TD\")),\r\n isActive: () => EternityChallenge(7).isRunning,\r\n icon: MultiplierTabIcons.TICKSPEED,\r\n },\r\n dilationUpgrade: {\r\n name: \"Dilation Upgrade - Replicanti Multiplier\",\r\n multValue: dim => {\r\n const mult = Replicanti.areUnlocked && Replicanti.amount.gt(1)\r\n ? DilationUpgrade.tdMultReplicanti.effectValue\r\n : DC.D1;\r\n return Decimal.pow(mult, dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\"));\r\n },\r\n isActive: () => DilationUpgrade.tdMultReplicanti.canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"dilation\"),\r\n },\r\n realityUpgrade: {\r\n name: \"Reality Upgrade - Temporal Transcendence\",\r\n multValue: dim => Decimal.pow(RealityUpgrade(22).effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n isActive: () => !Pelle.isDoomed && RealityUpgrade(22).canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"reality\"),\r\n },\r\n glyph: {\r\n name: \"Glyph Effects\",\r\n powValue: () => getAdjustedGlyphEffect(\"timepow\") * getAdjustedGlyphEffect(\"effarigdimensions\"),\r\n isActive: () => PlayerProgress.realityUnlocked(),\r\n icon: MultiplierTabIcons.GENERIC_GLYPH\r\n },\r\n alchemy: {\r\n name: \"Glyph Alchemy\",\r\n multValue: dim => Decimal.pow(AlchemyResource.dimensionality.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n powValue: () => AlchemyResource.time.effectOrDefault(1) * Ra.momentumValue,\r\n isActive: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied,\r\n icon: MultiplierTabIcons.ALCHEMY,\r\n },\r\n imaginaryUpgrade: {\r\n name: \"Imaginary Upgrade - Suspicion of Interference\",\r\n powValue: () => ImaginaryUpgrade(11).effectOrDefault(1),\r\n isActive: () => ImaginaryUpgrade(11).canBeApplied,\r\n icon: MultiplierTabIcons.UPGRADE(\"imaginary\"),\r\n },\r\n pelle: {\r\n name: \"Pelle Rift Effects\",\r\n multValue: dim => Decimal.pow(PelleRifts.chaos.effectOrDefault(1),\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n powValue: () => PelleRifts.paradox.effectOrDefault(DC.D1).toNumber(),\r\n isActive: () => Pelle.isDoomed,\r\n icon: MultiplierTabIcons.PELLE,\r\n },\r\n iap: {\r\n name: \"Shop Tab Purchases\",\r\n multValue: dim => Decimal.pow(ShopPurchase.allDimPurchases.currentMult,\r\n dim ? 1 : MultiplierTabHelper.activeDimCount(\"TD\")),\r\n isActive: () => ShopPurchaseData.totalSTD > 0,\r\n icon: MultiplierTabIcons.IAP,\r\n },\r\n effarig65:{\r\n name: \"Effarig Level 65\",\r\n powValue: () => 1 + ((Currency.relicShards.value.clampMin(1)).log10() / 1337),\r\n isActive: () => Ra.unlocks.relicShardBoost.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_RA,\r\n },\r\n v50:{\r\n name: \"V Level 50\",\r\n powValue: () => Math.pow(VUnlocks.adPow.effectValue, 0.5),\r\n isActive: () => Ra.unlocks.vAchMilestone2AffectsIDsAndTDs.isUnlocked,\r\n icon: MultiplierTabIcons.GENERIC_V\r\n },\r\n\r\n nerfV: {\r\n name: \"V's Reality\",\r\n powValue: () => 0.5,\r\n isActive: () => V.isRunning,\r\n icon: MultiplierTabIcons.GENERIC_V,\r\n },\r\n nerfCursed: {\r\n name: \"Cursed Glyphs\",\r\n powValue: () => getAdjustedGlyphEffect(\"curseddimensions\"),\r\n isActive: () => getAdjustedGlyphEffect(\"curseddimensions\") !== 1,\r\n icon: MultiplierTabIcons.SPECIFIC_GLYPH(\"cursed\"),\r\n },\r\n};\r\n","export const CorruptionData = {\r\n corruptions: [0,0,0,0,0,0,0,0,0,0],\r\n corruptionChallenge: {\r\n recordCorruptions: [0,0,0,0,0,0,0,0,0,0],\r\n recordScore: 0,\r\n bGLwC: 0,\r\n },\r\n isCorrupted: false,\r\n nextCorrupted: false,\r\n corruptedFragments: 0,\r\n recordCorruptedFragments: 0,\r\n update() {\r\n this.corruptions = player.mending.corruption\r\n this.corruptionChallenge.recordCorruptions = player.mending.corruptionChallenge.records\r\n this.corruptionChallenge.recordScore = player.mending.corruptionChallenge.recordScore\r\n this.isCorrupted = player.mending.corruptionChallenge.corruptedMend\r\n this.nextCorrupted = player.mending.corruptionChallenge.corruptNext\r\n this.corruptedFragments = player.mending.corruptedFragments\r\n this.recordCorruptedFragments = Math.log2(player.mending.corruptionChallenge.recordScore)\r\n },\r\n calcBaseScore() {\r\n let corruptionScores = [1, 1.2, 1.45, 1.7, 2, 2.5, 3, 3.5, 4, 5, 7, 11]\r\n let finalScore = corruptionScores[player.mending.corruption[0]]\r\n for (let i = 1; i < 10; i++) {\r\n finalScore *= corruptionScores[player.mending.corruption[i]]\r\n }\r\n return finalScore\r\n },\r\n calcScore() {\r\n let scoreCalc = this.calcBaseScore()\r\n scoreCalc *= [0, 1, 3, 10, 35, 126, 462, 1716, 6435, 24310, 92378][Math.floor(Math.max(1, Math.min(player.mending.corruption.countWhere(u => u > 0), (player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0)/player.mending.corruption.countWhere(u => u > 0) - 1))))]\r\n scoreCalc = Math.pow(scoreCalc, CorruptionUpgrade(20).effectOrDefault(1))\r\n return scoreCalc\r\n }\r\n}","import { MultiplierTabIcons } from \"./icons\";\r\nimport { CorruptionData } from \"../../corruption\";\r\n\r\n// See index.js for documentation\r\nexport const hostScore = {\r\ntotal: {\r\n name: \"Total Score\",\r\n displayOverride: () => `${format(CorruptionData.calcScore(), 2, 2)}`,\r\n multValue: () => CorruptionData.calcScore(),\r\n isActive: () => CorruptionData.isCorrupted,\r\n icon: MultiplierTabIcons.CORRUPTION,\r\n },\r\n corruptions: {\r\n name: \"Hostilities\",\r\n displayOverride: () => `${formatInt(CorruptionData.calcBaseScore(), 2, 2)} base score`,\r\n multValue: () => CorruptionData.calcBaseScore(),\r\n isActive: () => CorruptionData.isCorrupted,\r\n icon: MultiplierTabIcons.CORRUPTION,\r\n },\r\n extra: {\r\n name: \"Bonus\",\r\n multValue: () => [0, 1, 3, 10, 35, 126, 462, 1716, 6435, 24310, 92378][Math.floor(Math.min(CorruptionData.corruptions.countWhere(u => u > 0), CorruptionData.corruptions.reduce((partialSum, a) => partialSum + a, 0) + 2))],\r\n displayOverride: () => formatX([0, 1, 3, 10, 35, 126, 462, 1716, 6435, 24310, 92378][Math.floor(Math.min(CorruptionData.corruptions.countWhere(u => u > 0), CorruptionData.corruptions.reduce((partialSum, a) => partialSum + a, 0) + 2))], 2, 2),\r\n isActive: () => CorruptionData.isCorrupted,\r\n icon: MultiplierTabIcons.CORRUPTION_BONUS,\r\n },\r\n cu20: {\r\n name: \"Rewarding Glyphs\",\r\n powValue: () => 1 + Math.log(Math.log(CorruptionData.corruptions[4] * Math.max(1,CorruptionData.corruptionChallenge.bGLwC)))/2,\r\n isActive: () => CorruptionData.isCorrupted && CorruptionData.corruptions[4] >= 4,\r\n icon: MultiplierTabIcons.UPGRADE(\"corruption\"),\r\n }\r\n};\r\n","import { AM } from \"./antimatter\";\r\nimport { AD } from \"./antimatter-dimensions\";\r\nimport { DT } from \"./dilated-time\";\r\nimport { eternities } from \"./eternities\";\r\nimport { EP } from \"./eternity-points\";\r\nimport { galaxies } from \"./galaxies\";\r\nimport { gamespeed } from \"./gamespeed\";\r\nimport { general } from \"./general\";\r\nimport { infinities } from \"./infinities\";\r\nimport { ID } from \"./infinity-dimensions\";\r\nimport { IP } from \"./infinity-points\";\r\nimport { replicanti } from \"./replicanti\";\r\nimport { TP } from \"./tachyon-particles\";\r\nimport { tickspeed, tickspeedUpgrades } from \"./tickspeed\";\r\nimport { TD } from \"./time-dimensions\";\r\nimport { hostScore } from \"./score\";\r\n\r\nexport const multiplierTabValues = {\r\n general,\r\n AM,\r\n AD,\r\n ID,\r\n TD,\r\n IP,\r\n EP,\r\n TP,\r\n DT,\r\n tickspeed,\r\n tickspeedUpgrades,\r\n galaxies,\r\n infinities,\r\n eternities,\r\n gamespeed,\r\n replicanti,\r\n hostScore\r\n};\r\n","/* eslint-disable max-depth */\r\n/* eslint-disable camelcase */\r\nimport { MultiplierTabHelper } from \"./helper-functions\";\r\nimport { multiplierTabValues } from \"./values\";\r\n\r\nconst dynamicGenProps = [\"TP\", \"DT\", \"infinities\", \"eternities\", \"gamespeed\", \"replicanti\", \"hostScore\"];\r\nconst propList = {\r\n AD: [\"purchase\", \"dimboost\", \"sacrifice\", \"achievementMult\", \"achievement\", \"infinityUpgrade\",\r\n \"breakInfinityUpgrade\", \"infinityPower\", \"infinityChallenge\", \"timeStudy\", \"eternityChallenge\", \"glyph\", \"v\",\r\n \"alchemy\", \"pelle\", \"iap\", \"effectNC\", \"nerfIC\", \"nerfV\", \"nerfCursed\", \"nerfPelle\"],\r\n ID: [\"purchase\", \"achievementMult\", \"achievement\", \"replicanti\", \"infinityChallenge\", \"timeStudy\", \"eternityUpgrade\",\r\n \"eternityChallenge\", \"glyph\", \"alchemy\", \"imaginaryUpgrade\", \"pelle\", \"iap\", \"nerfV\", \"nerfCursed\", \"nerfPelle\", \"nerfSoftcap\"],\r\n TD: [\"purchase\", \"achievementMult\", \"achievement\", \"timeStudy\", \"eternityUpgrade\", \"eternityChallenge\",\r\n \"dilationUpgrade\", \"realityUpgrade\", \"glyph\", \"alchemy\", \"imaginaryUpgrade\", \"pelle\", \"iap\", \"nerfV\", \"nerfCursed\"],\r\n IP: [\"base\", \"infinityUpgrade\", \"achievement\", \"timeStudy\", \"dilationUpgrade\", \"glyph\", \"alchemy\", \"pelle\", \"ra\", \"iap\", \"mendingMilestones\",\r\n \"nerfTeresa\", \"nerfV\", \"nerfCorruptions\", \"nerfSoftcap\"],\r\n EP: [\"base\", \"eternityUpgrade\", \"timeStudy\", \"glyph\", \"realityUpgrade\", \"pelle\", \"iap\", \"nerfTeresa\", \"nerfV\", \"nerfCorruptions\"],\r\n};\r\n\r\n// Some of the props above would contain every entry except \"total\" in their respective value GameDB entry, so we\r\n// generate them dynamically instead\r\nfor (const prop of dynamicGenProps) {\r\n propList[prop] = [];\r\n for (const toCopy of Object.keys(multiplierTabValues[prop])) {\r\n if (toCopy !== \"total\") propList[prop].push(toCopy);\r\n }\r\n}\r\n\r\n// Used for individual dimension breakdowns of effects (eg. full achievement mult into its values on individual ADs)\r\n// Results in an array of [\"key_1\", \"key_2\", ... , \"key_8\"]\r\nfunction append8(key) {\r\n const props = [];\r\n for (let dim = 1; dim <= 8; dim++) props.push(`${key}_${dim}`);\r\n return props;\r\n}\r\n\r\n// Helper method to create very long lists of entries in the tree; format is \"RESOURCE_SOURCE_DIMENSION\"\r\nfunction getProps(resource, tier) {\r\n const props = propList[resource].map(s => `${resource}_${s}`);\r\n if (!tier) return props;\r\n const newProps = [];\r\n for (const effect of props) newProps.push(`${effect}_${tier}`);\r\n return newProps;\r\n}\r\n\r\n// Everything is multiplierTabTree is associated with values in multiplierTabValues. The only explicitly\r\n// initialized props here are the \"root\" props which are viewable on the tab with full breakdowns. After the initial\r\n// specification, all children props are dynamically added based on the arrays in the helper functions above\r\nexport const multiplierTabTree = {\r\n AM_total: [\r\n [\"AD_total\", \"tickspeed_total\", \"AM_effarigAM\"]\r\n ],\r\n AD_total: [\r\n getProps(\"AD\"),\r\n append8(\"AD_total\")\r\n ],\r\n ID_total: [\r\n getProps(\"ID\"),\r\n append8(\"ID_total\")\r\n ],\r\n TD_total: [\r\n getProps(\"TD\"),\r\n append8(\"TD_total\")\r\n ],\r\n IP_total: [\r\n getProps(\"IP\")\r\n ],\r\n IP_base: [\r\n [\"IP_antimatter\", \"IP_divisor\"]\r\n ],\r\n EP_total: [\r\n getProps(\"EP\")\r\n ],\r\n EP_base: [\r\n [\"EP_IP\", \"EP_divisor\"]\r\n ],\r\n TP_total: [\r\n getProps(\"TP\")\r\n ],\r\n DT_total: [\r\n getProps(\"DT\")\r\n ],\r\n tickspeed_total: [\r\n [\"tickspeed_base\", \"tickspeed_upgrades\", \"tickspeed_galaxies\", \"tickspeed_pelleTickspeedPow\"]\r\n ],\r\n tickspeed_upgrades: [\r\n [\"tickspeedUpgrades_purchased\", \"tickspeedUpgrades_free\"]\r\n ],\r\n tickspeed_galaxies: [\r\n [\"galaxies_antimatter\", \"galaxies_replicanti\", \"galaxies_tachyon\", \"galaxies_nerfPelle\"]\r\n ],\r\n infinities_total: [\r\n getProps(\"infinities\")\r\n ],\r\n eternities_total: [\r\n getProps(\"eternities\")\r\n ],\r\n gamespeed_total: [\r\n getProps(\"gamespeed\")\r\n ],\r\n replicanti_total: [\r\n getProps(\"replicanti\")\r\n ],\r\n hostScore_total: [\r\n getProps(\"hostScore\")\r\n ]\r\n};\r\n\r\n// Gamespeed's two alternate displays are current and average gamespeed, distinguished by which of two\r\n// mutually-exclusive entries appear in the list. We explicity modify props here as needed\r\nconst allGamespeed = multiplierTabTree.gamespeed_total[0];\r\nmultiplierTabTree.gamespeed_total[0] = [...allGamespeed].filter(key => key !== \"gamespeed_blackHoleAvg\");\r\nmultiplierTabTree.gamespeed_total[1] = [...allGamespeed].filter(key => key !== \"gamespeed_blackHoleCurr\");\r\n\r\n// DT doesn't explicitly have an entry to TP, due to it being its own total entry, so we link them together\r\nmultiplierTabTree.DT_total[0].unshift(\"TP_total\");\r\n\r\n// Additional data specification for dynamically-generated props\r\nconst dimTypes = [\"AD\", \"ID\", \"TD\"];\r\nconst singleRes = [\"IP\", \"EP\", \"DT\", \"infinities\", \"replicanti\", \"hostScore\"];\r\nconst targetedEffects = {\r\n achievement: {\r\n checkFn: MultiplierTabHelper.achievementDimCheck,\r\n AD: [23, 28, 31, 34, 43, 48, 56, 64, 65, 68, 71, 72, 73, 74, 76, 84, 91, 92, 183],\r\n TD: [105, 128],\r\n IP: [85, 93, 116, 125, 141],\r\n DT: [132, 137],\r\n infinities: [87, 164],\r\n },\r\n timeStudy: {\r\n checkFn: MultiplierTabHelper.timeStudyDimCheck,\r\n AD: [71, 91, 101, 161, 193, 214, 234],\r\n ID: [72, 82, 92, 102, 162],\r\n TD: [11, 73, 93, 103, 151, 221, 227, 301],\r\n IP: [41, 51, 141, 142, 143],\r\n EP: [61, 121, 122, 123],\r\n replicanti: [62, 132, 213],\r\n },\r\n infinityChallenge: {\r\n checkFn: MultiplierTabHelper.ICDimCheck,\r\n AD: [3, 4, 8],\r\n ID: [1, 6],\r\n },\r\n eternityChallenge: {\r\n checkFn: MultiplierTabHelper.ECDimCheck,\r\n ID: [2, 4, 9],\r\n TD: [1, 10],\r\n },\r\n};\r\n\r\n// Highest actively-producing dimensions need a special case\r\nfor (const dim of dimTypes) {\r\n multiplierTabTree[`${dim}_total`][0].push(`${dim}_highestDim`);\r\n multiplierTabTree[`${dim}_total`][1].push(`${dim}_highestDim`);\r\n}\r\n\r\n// EC7 also needs a special case for tickspeed, since it doesn't appear on the multipliers themselves\r\nfor (const dim of [\"ID\", \"TD\"]) {\r\n multiplierTabTree[`${dim}_total`][0].push(`${dim}_tickspeed`);\r\n multiplierTabTree[`${dim}_total`][1].push(`${dim}_tickspeed`);\r\n}\r\n\r\n// Dynamically generate all values from existing values, but broken down by dimension\r\nfor (const res of dimTypes) {\r\n for (const prop of getProps(res)) multiplierTabTree[prop] = [append8(prop)];\r\n for (let dim = 1; dim <= 8; dim++) multiplierTabTree[`${res}_total_${dim}`] = [getProps(res, dim)];\r\n}\r\n\r\n// A few dynamically-generated props are largely useless in terms of what they connect to, in that they have very few\r\n// entries or have 8 identical entries, so we explicitly remove those lists for a cleaner appearance on the UI\r\nconst removedRegexes = [\"AD_sacrifice\", \"AD_breakInfinityUpgrade\", \"AD_nerfIC\", \"AD_infinityUpgrade\", \"AD_v\",\r\n \"ID_replicanti\", \"ID_infinityChallenge\", \"ID_eternityUpgrades\",\r\n \"TD_achievement\", \"TD_eternityUpgrade\", \"TD_dilationUpgrade\", \"TD_realityUpgrade\",\r\n \".._achievementMult\", \".._glyph\", \".._alchemy\", \".._imaginaryUpgrade\", \".._iap\",\r\n \".._nerfV\", \".._nerfCursed\", \".._nerfPelle\", \".._pelle\", \"nerfSoftcap\", \"nerfCorruptions\"\r\n];\r\nconst removedProps = Object.keys(multiplierTabTree)\r\n .filter(key => removedRegexes.some(regex => key.match(regex)));\r\nfor (const prop of removedProps) {\r\n multiplierTabTree[prop] = undefined;\r\n}\r\n\r\n// We need to handle infinity power multiplier a bit differently; previous steps of dynamic generation fill it with\r\n// 8 identical AD multipliers, but we want to replace it with ID mults and the conversion rate\r\nmultiplierTabTree.AD_infinityPower = [[\"ID_total\", \"ID_powerConversion\"]];\r\nfor (let dim = 1; dim <= 8; dim++) {\r\n multiplierTabTree[`AD_infinityPower_${dim}`] = [[\"ID_total\", \"ID_powerConversion\"]];\r\n}\r\n\r\n// Tesseracts are added one layer deep, but we don't want to override the existing ID_purchase entry\r\nmultiplierTabTree.ID_purchase.unshift([\"ID_basePurchase\", \"ID_tesseractPurchase\",\r\n \"ID_infinityGlyphSacrifice\", \"ID_powPurchase\"]);\r\nfor (let dim = 1; dim <= 7; dim++) {\r\n multiplierTabTree[`ID_purchase_${dim}`] = [[`ID_basePurchase_${dim}`, `ID_tesseractPurchase_${dim}`,\r\n \"ID_powPurchase\"]];\r\n}\r\nmultiplierTabTree.ID_purchase_8 = [[`ID_basePurchase_8`, `ID_infinityGlyphSacrifice`, \"ID_powPurchase\"]];\r\n\r\n// These are also added one layer deep\r\nfor (let dim = 1; dim <= 7; dim++) {\r\n multiplierTabTree[`TD_purchase_${dim}`] = [[`TD_basePurchase_${dim}`, `TD_powPurchase_${dim}`]];\r\n}\r\nmultiplierTabTree.TD_purchase.push([\"TD_basePurchase\", \"TD_timeGlyphSacrifice\", \"TD_powPurchase\"]);\r\nmultiplierTabTree.TD_purchase_8 = [[\"TD_basePurchase_8\", \"TD_timeGlyphSacrifice\", \"TD_powPurchase\"]];\r\n\r\n// Dynamically fill effects which only affect certain dimensions, as noted in targetedEffects\r\nfor (const res of dimTypes) {\r\n for (const eff of Object.keys(targetedEffects)) {\r\n if (!targetedEffects[eff][res]) continue;\r\n multiplierTabTree[`${res}_${eff}`] = [[]];\r\n for (const id of targetedEffects[eff][res]) {\r\n for (let dim = 1; dim <= 8; dim++) {\r\n const propStr = `${res}_${eff}_${dim}`;\r\n const dimStr = `${res}${dim}`;\r\n if (targetedEffects[eff].checkFn(id, dimStr)) {\r\n if (!multiplierTabTree[propStr]) multiplierTabTree[propStr] = [[]];\r\n multiplierTabTree[propStr][0].push(`general_${eff}_${id}_${dimStr}`);\r\n }\r\n }\r\n multiplierTabTree[`${res}_${eff}`][0].push(`general_${eff}_${id}_${res}`);\r\n }\r\n }\r\n}\r\n\r\n// Dynamically fill effects which affect single resources as well\r\nfor (const res of singleRes) {\r\n for (const eff of Object.keys(targetedEffects)) {\r\n if (!targetedEffects[eff][res]) continue;\r\n multiplierTabTree[`${res}_${eff}`] = [[]];\r\n for (const ach of targetedEffects[eff][res]) {\r\n multiplierTabTree[`${res}_${eff}`][0].push(`general_${eff}_${ach}`);\r\n }\r\n }\r\n}\r\n\r\n// Fill in eternity upgrade entries\r\nmultiplierTabTree.ID_eternityUpgrade = [[`ID_eu1`, `ID_eu2`, `ID_eu3`]];\r\nmultiplierTabTree.TD_eternityUpgrade = [[`TD_eu1`, `TD_eu2`]];\r\nfor (let dim = 1; dim <= 8; dim++) {\r\n multiplierTabTree[`ID_eternityUpgrade_${dim}`] = [[`ID_eu1_${dim}`, `ID_eu2_${dim}`, `ID_eu3_${dim}`]];\r\n multiplierTabTree[`TD_eternityUpgrade_${dim}`] = [[`TD_eu1_${dim}`, `TD_eu2_${dim}`]];\r\n}\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const normalAchievements = [\r\n {\r\n id: 11,\r\n name: \"You gotta start somewhere\",\r\n description: \"Buy a 1st Antimatter Dimension.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 12,\r\n name: \"100 antimatter is a lot\",\r\n description: \"Buy a 2nd Antimatter Dimension.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 13,\r\n name: \"Half life 3 CONFIRMED\",\r\n description: \"Buy a 3rd Antimatter Dimension.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 14,\r\n name: \"L4D: Left 4 Dimensions\",\r\n description: \"Buy a 4th Antimatter Dimension.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 15,\r\n name: \"5 Dimension Antimatter Punch\",\r\n description: \"Buy a 5th Antimatter Dimension.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 16,\r\n name: \"We couldn't afford 9\",\r\n get description() {\r\n return Enslaved.isRunning\r\n ? \"Buy a 6th Antimatter Dimension (they never amount to anything)\"\r\n : \"Buy a 6th Antimatter Dimension.\";\r\n },\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 17,\r\n name: \"Not a luck related achievement\",\r\n description: \"Buy a 7th Antimatter Dimension.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 18,\r\n name: \"90 degrees to infinity\",\r\n get description() {\r\n return Enslaved.isRunning\r\n ? \"Buy an 8th Antimatter Dimension (don't get used to it)\"\r\n : \"Buy an 8th Antimatter Dimension.\";\r\n },\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 21,\r\n name: \"To infinity!\",\r\n description: \"Go Infinite.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Start with ${formatInt(100)} antimatter.`; },\r\n effect: 100\r\n },\r\n {\r\n id: 22,\r\n name: \"FAKE NEWS!\",\r\n get description() { return `Encounter ${formatInt(50)} different news messages.`; },\r\n checkRequirement: () => NewsHandler.uniqueTickersSeen >= 50,\r\n checkEvent: GAME_EVENT.REALITY_RESET_AFTER\r\n },\r\n {\r\n id: 23,\r\n name: \"The 9th Dimension is a lie\",\r\n get description() { return `Have exactly ${formatInt(99)} 8th Antimatter Dimensions.`; },\r\n checkRequirement: () => AntimatterDimension(8).amount.eq(99),\r\n get reward() { return `8th Antimatter Dimensions are ${formatPercents(0.1)} stronger.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 24,\r\n name: \"Antimatter Apocalypse\",\r\n get description() { return `Get over ${format(DC.E80)} antimatter.`; },\r\n checkRequirement: () => Currency.antimatter.exponent >= 80,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 25,\r\n name: \"Boosting to the max\",\r\n get description() { return `Buy ${formatInt(10)} Dimension Boosts.`; },\r\n checkRequirement: () => DimBoost.purchasedBoosts >= 10,\r\n checkEvent: GAME_EVENT.DIMBOOST_AFTER\r\n },\r\n {\r\n id: 26,\r\n name: \"You got past The Big Wall\",\r\n description: \"Buy an Antimatter Galaxy.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_BEFORE\r\n },\r\n {\r\n id: 27,\r\n name: \"Double Galaxy\",\r\n get description() { return `Buy ${formatInt(2)} Antimatter Galaxies.`; },\r\n checkRequirement: () => player.galaxies >= 2,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER\r\n },\r\n {\r\n id: 28,\r\n name: \"There's no point in doing that...\",\r\n get description() {\r\n return `Buy a single 1st Antimatter Dimension when you have over ${format(DC.E150)} of them.`;\r\n },\r\n checkRequirement: () => AntimatterDimension(1).amount.exponent >= 150,\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n get reward() { return `1st Antimatter Dimensions are ${formatPercents(0.1)} stronger.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 31,\r\n name: \"I forgot to nerf that\",\r\n get description() { return `Get any Antimatter Dimension multiplier over ${formatX(DC.E31)}.`; },\r\n checkRequirement: () => AntimatterDimensions.all.some(x => x.multiplier.exponent >= 31),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `1st Antimatter Dimensions are ${formatPercents(0.05)} stronger.`; },\r\n effect: 1.05\r\n },\r\n {\r\n id: 32,\r\n name: \"The Gods are pleased\",\r\n get description() { return `Get over ${formatX(600)} from Dimensional Sacrifice outside of Challenge 8.`; },\r\n checkRequirement: () => (!NormalChallenge(8).isOnlyActiveChallenge && Sacrifice.totalBoost.gte(600)),\r\n checkEvent: GAME_EVENT.SACRIFICE_RESET_AFTER,\r\n get reward() {\r\n return `Dimensional Sacrifice is stronger.\r\n ${Sacrifice.getSacrificeDescription({ \"Achievement32\": false, \"Achievement57\": false, \"Achievement88\": false })} ➜\r\n ${Sacrifice.getSacrificeDescription({ \"Achievement32\": true, \"Achievement57\": false, \"Achievement88\": false })}`;\r\n },\r\n effect: 0.1,\r\n },\r\n {\r\n id: 33,\r\n name: \"That's a lot of infinites\",\r\n get description() { return `Reach Infinity ${formatInt(10)} times.`; },\r\n checkRequirement: () => Currency.infinities.gte(10),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER\r\n },\r\n {\r\n id: 34,\r\n name: \"You didn't need it anyway\",\r\n description: \"Infinity without having any 8th Antimatter Dimensions.\",\r\n checkRequirement: () => AntimatterDimension(8).totalAmount.eq(0),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Dimensions 1-7 are ${formatPercents(0.02)} stronger.`; },\r\n effect: 1.02\r\n },\r\n {\r\n id: 35,\r\n name: \"Don't you dare sleep\",\r\n get description() {\r\n return PlayerProgress.realityUnlocked()\r\n ? `Be offline for a period of over ${formatInt(6)} hours (real time).`\r\n : `Be offline for a period of over ${formatInt(6)} hours.`;\r\n },\r\n checkRequirement: () => Date.now() - player.lastUpdate >= 21600000,\r\n checkEvent: GAME_EVENT.GAME_TICK_BEFORE\r\n },\r\n {\r\n id: 36,\r\n name: \"Claustrophobic\",\r\n get description() {\r\n return `Infinity with just ${formatInt(1)} Antimatter Galaxy. (Your Antimatter Galaxies are reset on Infinity.)`;\r\n },\r\n checkRequirement: () => player.galaxies === 1,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Multiply starting tick speed by ${format(1.02, 2, 2)}.`; },\r\n effect: 1 / 1.02\r\n },\r\n {\r\n id: 37,\r\n name: \"That's FAST!\",\r\n get description() { return `Infinity in under ${formatInt(2)} hours.`; },\r\n checkRequirement: () => Time.thisInfinityRealTime.totalHours.lte(2),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Start with ${formatInt(5000)} antimatter.`; },\r\n effect: 5000\r\n },\r\n {\r\n id: 38,\r\n name: \"I don't believe in Gods\",\r\n get description() {\r\n return `Buy an Antimatter Galaxy without Dimensional Sacrificing.\r\n (Your Antimatter Galaxies are reset on Infinity.)`;\r\n },\r\n checkRequirement: () => player.requirementChecks.infinity.noSacrifice,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_BEFORE\r\n },\r\n {\r\n id: 41,\r\n name: \"No DLC required\",\r\n get description() { return `Buy ${formatInt(16)} Infinity Upgrades.`; },\r\n checkRequirement: () => player.infinityUpgrades.size >= 16,\r\n checkEvent: [\r\n GAME_EVENT.INFINITY_UPGRADE_BOUGHT,\r\n GAME_EVENT.REALITY_RESET_AFTER,\r\n GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT],\r\n get reward() {\r\n return `Unlock two new Infinity Upgrades- ${formatX(2)} IP multiplier and offline IP generation.`;\r\n },\r\n },\r\n {\r\n id: 42,\r\n name: \"Super Sanic\",\r\n get description() {\r\n return `Have antimatter per second exceed your current antimatter above ${format(DC.E63)}.`;\r\n },\r\n checkRequirement: () =>\r\n Currency.antimatter.exponent >= 63 &&\r\n Currency.antimatter.productionPerSecond.gt(Currency.antimatter.value),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 43,\r\n name: \"How the antitables have turned..\",\r\n description:\r\n \"Get the 8th Antimatter Dimension multiplier to be highest, 7th Antimatter Dimension multiplier \" +\r\n \" second highest, etc.\",\r\n checkRequirement: () => {\r\n const multipliers = Array.range(1, 8).map(tier => AntimatterDimension(tier).multiplier);\r\n for (let i = 0; i < multipliers.length - 1; i++) {\r\n if (multipliers[i].gte(multipliers[i + 1])) return false;\r\n }\r\n return true;\r\n },\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() {\r\n return `Each Antimatter Dimension gains a boost proportional to tier\r\n (8th gets ${formatPercents(0.08)}, 7th gets ${formatPercents(0.07)}, etc.)`;\r\n }\r\n },\r\n {\r\n id: 44,\r\n name: \"Over in 30 Seconds\",\r\n get description() {\r\n return `Have antimatter per second exceed your current antimatter\r\n for ${formatInt(30)} consecutive seconds.`;\r\n },\r\n checkRequirement: () => AchievementTimers.marathon1\r\n .check(Currency.antimatter.productionPerSecond.gt(Currency.antimatter.value), 30),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n },\r\n {\r\n id: 45,\r\n name: \"Faster than a potato\",\r\n get description() { return `Get more than ${format(DC.E29)} ticks per second.`; },\r\n checkRequirement: () => Tickspeed.current.exponent <= -26,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Multiply starting tickspeed by ${formatX(1.02, 0, 2)}.`; },\r\n effect: 0.98\r\n },\r\n {\r\n id: 46,\r\n name: \"Multidimensional\",\r\n get description() { return `Reach ${format(DC.E12)} of all Antimatter Dimensions except the 8th.`; },\r\n checkRequirement: () => AntimatterDimension(7).amount.exponent >= 12,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 47,\r\n name: \"Daredevil\",\r\n get description() { return `Complete ${formatInt(3)} Normal Challenges.`; },\r\n checkRequirement: () => NormalChallenges.all.countWhere(c => c.isCompleted) >= 3,\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT],\r\n },\r\n {\r\n id: 48,\r\n name: \"Antichallenged\",\r\n get description() { return `Complete all ${formatInt(12)} Normal Challenges.`; },\r\n checkRequirement: () => NormalChallenges.all.countWhere(c => !c.isCompleted) === 0,\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT],\r\n get reward() { return `All Dimensions are ${formatPercents(0.1)} stronger.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 51,\r\n name: \"Limit Break\",\r\n description: \"Break Infinity.\",\r\n checkRequirement: () => player.break,\r\n checkEvent: [GAME_EVENT.BREAK_INFINITY, GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT],\r\n },\r\n {\r\n id: 52,\r\n name: \"Age of Automation\",\r\n description: \"Max the interval for Antimatter Dimension and Tickspeed upgrade autobuyers.\",\r\n checkRequirement: () => Autobuyer.antimatterDimension.zeroIndexed.concat(Autobuyer.tickspeed)\r\n .every(a => a.isUnlocked && a.hasMaxedInterval),\r\n checkEvent: [GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT]\r\n },\r\n {\r\n id: 53,\r\n name: \"Definitely not worth it\",\r\n description: \"Max the intervals for all normal autobuyers.\",\r\n // The upgradeable autobuyers are dimensions, tickspeed, dimension boost,\r\n // galaxy, and big crunch (the ones you get from normal challenges).\r\n // We don't count autobuyers which can be upgraded via e.g. perks as upgradeable.\r\n checkRequirement: () => Autobuyers.upgradeable\r\n .every(a => a.isUnlocked && a.hasMaxedInterval),\r\n checkEvent: [GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT]\r\n },\r\n {\r\n id: 54,\r\n name: \"That's FASTER!\",\r\n get description() { return `Infinity in ${formatInt(10)} minutes or less.`; },\r\n checkRequirement: () => Time.thisInfinityRealTime.totalMinutes.lte(10),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Start with ${format(5e5)} antimatter.`; },\r\n effect: 5e5\r\n },\r\n {\r\n id: 55,\r\n name: \"Forever isn't that long\",\r\n get description() { return `Infinity in ${formatInt(1)} minute or less.`; },\r\n checkRequirement: () => Time.thisInfinityRealTime.totalMinutes.lte(1),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Start with ${format(5e10)} antimatter.`; },\r\n effect: 5e10\r\n },\r\n {\r\n id: 56,\r\n name: \"Many Deaths\",\r\n get description() {\r\n return `Complete the 2nd Antimatter Dimension Autobuyer Challenge in ${formatInt(3)} minutes or less.`;\r\n },\r\n checkRequirement: () => (NormalChallenge(2).isOnlyActiveChallenge && Time.thisInfinityRealTime.totalMinutes.lte(3)),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() {\r\n return `All Antimatter Dimensions are stronger in the first ${formatInt(3)} minutes of Infinities.`;\r\n },\r\n effect: () => Decimal.max(new Decimal(6).div(Time.thisInfinity.totalMinutes.add(3)), 1),\r\n effectCondition: () => Time.thisInfinity.totalMinutes.lt(3),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 57,\r\n name: \"Gift from the Gods\",\r\n get description() {\r\n return `Complete the 8th Antimatter Dimension Autobuyer Challenge in ${formatInt(3)} minutes or less.`;\r\n },\r\n checkRequirement: () => (NormalChallenge(8).isOnlyActiveChallenge && Time.thisInfinityRealTime.totalMinutes.lte(3)),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() {\r\n return `Dimensional Sacrifice is stronger.\r\n ${Sacrifice.getSacrificeDescription({ \"Achievement32\": true, \"Achievement57\": false, \"Achievement88\": false })} ➜\r\n ${Sacrifice.getSacrificeDescription({ \"Achievement32\": true, \"Achievement57\": true, \"Achievement88\": false })}`;\r\n },\r\n effect: 0.1\r\n },\r\n {\r\n id: 58,\r\n name: \"This is fine.\",\r\n get description() { return `Complete the Tickspeed Autobuyer Challenge in ${formatInt(3)} minutes or less.`; },\r\n checkRequirement: () => (NormalChallenge(9).isOnlyActiveChallenge && Time.thisInfinityRealTime.totalMinutes.lte(3)),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() {\r\n return `Increase the multiplier for buying ${formatInt(10)} Antimatter Dimensions by +${formatPercents(0.01)}.`;\r\n },\r\n effect: 1.01\r\n },\r\n {\r\n id: 61,\r\n name: \"Bulked Up\",\r\n get description() {\r\n return `Get all of your Antimatter Dimension Autobuyer bulk amounts to\r\n ${formatInt(Autobuyer.antimatterDimension.bulkCap)}.`;\r\n },\r\n checkRequirement: () => Autobuyer.antimatterDimension.zeroIndexed.every(x => x.hasMaxedBulk),\r\n checkEvent: [GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT,\r\n GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION],\r\n reward: \"Dimension Autobuyer bulks are unlimited.\"\r\n },\r\n {\r\n id: 62,\r\n name: \"Oh, hey... You're still here?\",\r\n get description() { return `Reach ${format(DC.E8)} Infinity Points per minute.`; },\r\n checkRequirement: () => Player.bestRunIPPM.exponent >= 8,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER\r\n },\r\n {\r\n id: 63,\r\n name: \"A new beginning\",\r\n description: \"Begin generation of Infinity Power.\",\r\n checkRequirement: () => Currency.infinityPower.gt(1),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 64,\r\n name: \"Zero Deaths\",\r\n description: \"Get to Infinity without Dimension Boosts or Antimatter Galaxies while in a Normal Challenge.\",\r\n checkRequirement: () => (player.galaxies === 0 && DimBoost.purchasedBoosts === 0 && NormalChallenge.isRunning),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Antimatter Dimensions 1-4 are ${formatPercents(0.25)} stronger.`; },\r\n effect: 1.25\r\n },\r\n {\r\n id: 65,\r\n name: \"Not-so-challenging\",\r\n get description() { return `Get the sum of all of your Normal Challenge times under ${formatInt(3)} minutes.`; },\r\n checkRequirement: () => Time.challengeSum.totalMinutes.lt(3),\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.REALITY_RESET_AFTER],\r\n get reward() {\r\n return `All Antimatter Dimensions are stronger in the first ${formatInt(3)} minutes of Infinities,\r\n but only in Challenges.`;\r\n },\r\n effect: () => (Player.isInAnyChallenge ? Decimal.max(new Decimal(4).div(Time.thisInfinity.totalMinutes.add(1)), 1).toNumber() : 1),\r\n effectCondition: () => Player.isInAnyChallenge && Time.thisInfinity.totalMinutes.lt(3),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 66,\r\n name: \"Faster than a squared potato\",\r\n get description() { return `Get more than ${format(DC.E58)} ticks per second.`; },\r\n checkRequirement: () => Tickspeed.current.exponent <= -55,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Multiply starting tickspeed by ${formatX(1.02, 0, 2)}.`; },\r\n effect: 0.98\r\n },\r\n {\r\n id: 67,\r\n name: \"Infinitely Challenging\",\r\n description: \"Complete an Infinity Challenge.\",\r\n checkRequirement: () => InfinityChallenges.completed.length > 0,\r\n checkEvent: [GAME_EVENT.INFINITY_CHALLENGE_COMPLETED, GAME_EVENT.REALITY_RESET_AFTER]\r\n },\r\n {\r\n id: 68,\r\n name: \"You did this again just for the achievement right?\",\r\n get description() {\r\n return `Complete the 3rd Antimatter Dimension Autobuyer Challenge in ${formatInt(10)} seconds or less.`;\r\n },\r\n checkRequirement: () => (NormalChallenge(3).isOnlyActiveChallenge && Time.thisInfinityRealTime.totalSeconds.lte(10)),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `1st Antimatter Dimensions are ${formatPercents(0.5)} stronger.`; },\r\n effect: 1.5\r\n },\r\n {\r\n id: 71,\r\n name: \"ERROR 909: Dimension not found\",\r\n description:\r\n `Get to Infinity with only a single 1st Antimatter Dimension without Dimension Boosts\r\n or Antimatter Galaxies, while in the 2nd Antimatter Dimension Autobuyer Challenge.`,\r\n checkRequirement: () =>\r\n (NormalChallenge(2).isOnlyActiveChallenge &&\r\n AntimatterDimension(1).amount.eq(1) &&\r\n DimBoost.purchasedBoosts === 0 &&\r\n player.galaxies === 0),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `1st Antimatter Dimensions are ${formatInt(3)} times stronger.`; },\r\n effect: 3\r\n },\r\n {\r\n id: 72,\r\n name: \"Can't hold all these infinities\",\r\n get description() {\r\n return `Get all Antimatter Dimension multipliers over ${formatX(Decimal.NUMBER_MAX_VALUE, 1)}.`;\r\n },\r\n checkRequirement: () => AntimatterDimensions.all.every(x => x.multiplier.gte(Decimal.NUMBER_MAX_VALUE)),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `All Antimatter Dimensions are ${formatPercents(0.1)} stronger.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 73,\r\n name: \"THIS ACHIEVEMENT DOESN'T EXIST\",\r\n get description() { return `Get ${formatPostBreak(DC.D9_9999E9999, 4)} antimatter.`; },\r\n checkRequirement: () => Currency.antimatter.gte(DC.D9_9999E9999),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Antimatter Dimensions gain a multiplier based on current antimatter.\",\r\n effect: () => Currency.antimatter.value.pow(0.00002).plus(1),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 74,\r\n name: \"Not a second lost\",\r\n get description() { return `Get the sum of all best Normal Challenge times under ${formatInt(5)} seconds.`; },\r\n checkRequirement: () => Time.challengeSum.totalSeconds.lt(5),\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.REALITY_RESET_AFTER],\r\n get reward() { return `All Antimatter Dimensions are ${formatPercents(0.4)} stronger, but only in challenges.`; },\r\n effect: 1.4,\r\n effectCondition: () => Player.isInAnyChallenge\r\n },\r\n {\r\n id: 75,\r\n name: \"NEW DIMENSIONS???\",\r\n description: \"Unlock the 4th Infinity Dimension.\",\r\n checkRequirement: () => InfinityDimension(4).isUnlocked,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Your Achievement bonus affects Infinity Dimensions.\",\r\n effect: () => Achievements.power\r\n },\r\n {\r\n id: 76,\r\n name: \"One for each dimension\",\r\n get description() { return `Play for ${formatInt(8)} days.`; },\r\n checkRequirement: () => Time.totalTimePlayed.totalDays.gt(8),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Extremely small multiplier to Antimatter Dimensions based on time played.\",\r\n effect: () => Decimal.max(Decimal.pow(Time.totalTimePlayed.totalDays.div(2), 0.05), 1),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 77,\r\n name: \"1 Million is a lot\",\r\n get description() { return `Reach ${format(1e6)} Infinity Power.`; },\r\n checkRequirement: () => Currency.infinityPower.exponent >= 6,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 78,\r\n name: \"Blink of an eye\",\r\n get description() { return `Infinity in under ${formatInt(250)}ms.`; },\r\n checkRequirement: () => Time.thisInfinityRealTime.totalMilliseconds.lt(250),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() {\r\n return `Start with ${format(5e25)} antimatter.`;\r\n },\r\n effect: 5e25\r\n },\r\n {\r\n id: 81,\r\n name: \"Game Design Is My Passion\",\r\n get description() { return `Beat Infinity Challenge 5 in ${formatInt(15)} seconds or less.`; },\r\n checkRequirement: () => InfinityChallenge(5).isRunning && Time.thisInfinityRealTime.totalSeconds.lte(15),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE\r\n },\r\n {\r\n id: 82,\r\n name: \"Anti-antichallenged\",\r\n get description() { return `Complete all ${formatInt(8)} Infinity Challenges.`; },\r\n checkRequirement: () => InfinityChallenges.completed.length === 8,\r\n checkEvent: [GAME_EVENT.INFINITY_CHALLENGE_COMPLETED, GAME_EVENT.REALITY_RESET_AFTER],\r\n },\r\n {\r\n id: 83,\r\n name: \"YOU CAN GET 50 GALAXIES?!?!\",\r\n get description() { return `Get ${formatInt(50)} Antimatter Galaxies.`; },\r\n checkRequirement: () => player.galaxies >= 50,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,\r\n get reward() { return `Tickspeed is just over ${formatPercents(0.05)} faster per Antimatter Galaxy.`; },\r\n effect: () => DC.D0_95.pow(player.galaxies),\r\n formatEffect: value => `${formatX(value.recip(), 2, 2)}`\r\n },\r\n {\r\n id: 84,\r\n name: \"I got a few to spare\",\r\n get description() { return `Reach ${formatPostBreak(\"1e35000\")} antimatter.`; },\r\n checkRequirement: () => Currency.antimatter.exponent >= 35000,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Antimatter Dimensions are stronger the more unspent antimatter you have.\",\r\n effect: () => Currency.antimatter.value.pow(0.00002).plus(1),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 85,\r\n name: \"ALL YOUR IP ARE BELONG TO US\",\r\n get description() { return `Big Crunch for ${format(DC.E150)} Infinity Points.`; },\r\n checkRequirement: () => gainedInfinityPoints().exponent >= 150,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Additional ${formatX(4)} multiplier to Infinity Points.`; },\r\n effect: 4\r\n },\r\n {\r\n id: 86,\r\n name: \"Do you even bend time bro?\",\r\n get description() { return `Reach ${formatX(1000)} faster per Tickspeed upgrade.`; },\r\n checkRequirement: () => Tickspeed.multiplier.recip().gte(1000),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `All Galaxies are ${formatPercents(0.01)} stronger.`; },\r\n effect: 1.01\r\n },\r\n {\r\n id: 87,\r\n name: \"2 MILLION INFINITIES\",\r\n get description() { return `Infinity ${format(DC.D2E6)} times.`; },\r\n checkRequirement: () => Currency.infinities.gt(DC.D2E6),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() {\r\n return `Infinities more than ${formatInt(5)} seconds long\r\n give ${formatX(250)} more Infinities.`;\r\n },\r\n effect: 250,\r\n effectCondition: () => Time.thisInfinity.totalSeconds.gt(5)\r\n },\r\n {\r\n id: 88,\r\n name: \"Yet another infinity reference\",\r\n get description() {\r\n return `Get a ${formatX(Decimal.NUMBER_MAX_VALUE, 1, 0)} multiplier in a single Dimensional Sacrifice.`;\r\n },\r\n checkRequirement: () => Sacrifice.nextBoost.gte(Decimal.NUMBER_MAX_VALUE),\r\n checkEvent: GAME_EVENT.SACRIFICE_RESET_BEFORE,\r\n get reward() {\r\n return `Dimensional Sacrifice is stronger.\r\n ${Sacrifice.getSacrificeDescription({ \"Achievement32\": true, \"Achievement57\": true, \"Achievement88\": false })} ➜\r\n ${Sacrifice.getSacrificeDescription({ \"Achievement32\": true, \"Achievement57\": true, \"Achievement88\": true })}`;\r\n },\r\n effect: 0.1\r\n },\r\n {\r\n id: 91,\r\n name: \"Ludicrous Speed\",\r\n get description() {\r\n return `Big Crunch for ${format(DC.E200)} Infinity Points in ${formatInt(2)} seconds or less.`;\r\n },\r\n checkRequirement: () => (gainedInfinityPoints().exponent >= 200 && Time.thisInfinityRealTime.totalSeconds.lte(2)),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() {\r\n return `All Antimatter Dimensions are significantly stronger in the\r\n first ${formatInt(5)} seconds of Infinities.`;\r\n },\r\n effect: () => Math.max((DC.D5.sub(Time.thisInfinity.totalSeconds)).times(60).max(0).toNumber(), 1),\r\n effectCondition: () => Time.thisInfinity.totalSeconds.lt(5),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 92,\r\n name: \"I brake for NOBODY!\",\r\n get description() {\r\n return `Big Crunch for ${format(DC.E250)} Infinity Points in ${formatInt(20)} seconds or less.`;\r\n },\r\n checkRequirement: () => (gainedInfinityPoints().exponent >= 250 && Time.thisInfinityRealTime.totalSeconds.lte(20)),\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() {\r\n return `All Antimatter Dimensions are significantly stronger in the\r\n first ${formatInt(60)} seconds of Infinities.`;\r\n },\r\n effect: () => Math.max((DC.D1.sub(Time.thisInfinity.totalMinutes)).times(100).max(0).toNumber(), 1),\r\n effectCondition: () => Time.thisInfinity.totalMinutes.lt(1),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 93,\r\n name: \"MAXIMUM OVERDRIVE\",\r\n get description() { return `Big Crunch for ${format(DC.E300)} Infinity Points.`; },\r\n checkRequirement: () => gainedInfinityPoints().exponent >= 300,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_BEFORE,\r\n get reward() { return `Additional ${formatX(4)} multiplier to Infinity Points.`; },\r\n effect: 4\r\n },\r\n {\r\n id: 94,\r\n name: \"4.3333 minutes of Infinity\",\r\n get description() { return `Reach ${format(DC.E260)} Infinity Power.`; },\r\n checkRequirement: () => Currency.infinityPower.exponent >= 260,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Double Infinity Power gain.\",\r\n effect: 2\r\n },\r\n {\r\n id: 95,\r\n name: \"Is this safe?\",\r\n get description() { return `Gain ${format(Decimal.NUMBER_MAX_VALUE, 1, 0)} Replicanti in ${formatInt(1)} hour.`; },\r\n get reward() { return `You keep your Replicanti and ${formatInt(1)} Replicanti Galaxy on Infinity.`; },\r\n checkRequirement: () =>\r\n ((Replicanti.amount.eq(Decimal.NUMBER_MAX_VALUE) || player.replicanti.galaxies > 0) &&\r\n Time.thisInfinityRealTime.totalHours.lte(1)),\r\n checkEvent: GAME_EVENT.REPLICANTI_TICK_AFTER\r\n },\r\n {\r\n id: 96,\r\n name: \"Time is relative\",\r\n description: \"Go Eternal.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE\r\n },\r\n {\r\n id: 97,\r\n name: \"Like jumping on a lego\",\r\n get description() { return `Get the sum of Infinity Challenge times under ${format(6.66, 2, 2)} seconds.`; },\r\n checkRequirement: () => Time.infinityChallengeSum.totalSeconds.lt(6.66),\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.REALITY_RESET_AFTER],\r\n },\r\n {\r\n id: 98,\r\n name: \"0 degrees from Infinity\",\r\n description: \"Unlock the 8th Infinity Dimension.\",\r\n checkRequirement: () => InfinityDimension(8).isUnlocked,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 101,\r\n name: \"8 nobody got time for that\",\r\n description: \"Eternity without buying Antimatter Dimensions 1-7.\",\r\n checkRequirement: () => player.requirementChecks.eternity.onlyAD8,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE\r\n },\r\n {\r\n id: 102,\r\n name: \"This mile took an eternity\",\r\n description: \"Get all Eternity milestones.\",\r\n checkRequirement: () => EternityMilestone.all.every(m => m.isReached),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 103,\r\n name: \"Tätä saavutusta ei ole olemassa II\",\r\n get description() { return `Reach ${formatPostBreak(DC.D9_99999E999, 5, 0)} Infinity Points.`; },\r\n checkRequirement: () => Currency.infinityPoints.exponent >= 1000,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() {\r\n return `Make the Infinity Point formula better. log(x)/${formatInt(308)} ➜ log(x)/${formatFloat(307.8, 1)}`;\r\n },\r\n effect: 307.8\r\n },\r\n {\r\n id: 104,\r\n name: \"That wasn't an eternity\",\r\n get description() { return `Eternity in under ${formatInt(30)} seconds.`; },\r\n checkRequirement: () => Time.thisEternity.totalSeconds.lt(30),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n get reward() { return `Start Eternities with ${format(5e25)} Infinity Points.`; },\r\n effect: 5e25\r\n },\r\n {\r\n id: 105,\r\n name: \"Infinite Time\",\r\n get description() { return `Have ${formatInt(308)} Tickspeed upgrades from Time Dimensions.`; },\r\n checkRequirement: () => player.totalTickGained >= 308,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Time Dimensions gain a multiplier based on tickspeed.\",\r\n effect: () => Tickspeed.perSecond.pow(0.000005),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 106,\r\n name: \"The swarm\",\r\n get description() { return `Get ${formatInt(10)} Replicanti Galaxies in ${formatInt(15)} seconds.`; },\r\n checkRequirement: () => Replicanti.galaxies.total >= 10 && Time.thisInfinity.totalSeconds.lt(15),\r\n checkEvent: GAME_EVENT.REPLICANTI_TICK_AFTER\r\n },\r\n {\r\n id: 107,\r\n name: \"Do you really need a guide for this?\",\r\n get description() { return `Eternity with less than ${formatInt(10)} Infinities.`; },\r\n checkRequirement: () => Currency.infinities.lt(10),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE\r\n },\r\n {\r\n id: 108,\r\n name: \"We COULD afford 9\",\r\n get description() { return `Eternity with exactly ${formatInt(9)} Replicanti.`; },\r\n checkRequirement: () => Replicanti.amount.round().eq(9),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE\r\n },\r\n {\r\n id: 111,\r\n name: \"Yo dawg, I heard you liked infinities...\",\r\n get description() {\r\n return `Have all your Infinities in your past ${formatInt(10)} Infinities be at least\r\n ${format(Decimal.NUMBER_MAX_VALUE, 1, 0)} times higher Infinity Points than the previous one.`;\r\n },\r\n checkRequirement: () => {\r\n if (player.records.recentInfinities.some(i => i[0] === Number.MAX_VALUE)) return false;\r\n const infinities = player.records.recentInfinities.map(run => run[2]);\r\n for (let i = 0; i < infinities.length - 1; i++) {\r\n if (infinities[i].lt(infinities[i + 1].times(Decimal.NUMBER_MAX_VALUE))) return false;\r\n }\r\n return true;\r\n },\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER,\r\n reward: \"Your antimatter doesn't reset on Dimension Boosts or Antimatter Galaxies.\"\r\n },\r\n {\r\n id: 112,\r\n name: \"Never again\",\r\n get description() { return `Get the sum of Infinity Challenge times below ${formatInt(750)}ms.`; },\r\n checkRequirement: () => Time.infinityChallengeSum.totalMilliseconds.lt(750),\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.REALITY_RESET_AFTER],\r\n },\r\n {\r\n id: 113,\r\n name: \"Eternities are the new infinity\",\r\n get description() { return `Eternity in under ${formatInt(250)}ms.`; },\r\n checkRequirement: () => Time.thisEternity.totalMilliseconds.lt(250),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n get reward() { return `Gain ${formatX(2)} more Eternities.`; },\r\n effect: 2,\r\n },\r\n {\r\n id: 114,\r\n name: \"You're a mistake\",\r\n description: \"Fail an Eternity Challenge.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.CHALLENGE_FAILED,\r\n reward: \"A fading sense of accomplishment.\",\r\n effect: () => \"Sense of accomplishment (fading)\"\r\n },\r\n {\r\n id: 115,\r\n name: \"I wish I had gotten 7 eternities\",\r\n description: \"Start an Infinity Challenge inside an Eternity Challenge.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 116,\r\n name: \"Do I really need to infinity\",\r\n get description() { return `Eternity with only ${formatInt(1)} Infinity.`; },\r\n checkRequirement: () => Currency.infinities.lte(1),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n reward: \"Multiplier to Infinity Points based on Infinities.\",\r\n effect: () => Decimal.pow(Currency.infinitiesTotal.value.clampMin(1), LOG10_2 / 4).powEffectOf(TimeStudy(31)).clampMax('1e10000000000'),\r\n cap: () => {return Effarig.eternityCap===undefined ? new Decimal('1e10000000000') : Effarig.eternityCap},\r\n formatEffect: value => {\r\n // Since TS31 is already accounted for in the effect prop, we need to \"undo\" it to display the base value here\r\n const mult = formatX(value, 2, 2);\r\n return TimeStudy(31).canBeApplied\r\n ? `${formatX(value.pow(DC.D1.div(TimeStudy(31).effectValue)), 2, 1)} (After TS31: ${mult})`\r\n : mult;\r\n }\r\n },\r\n {\r\n id: 117,\r\n name: \"Costco sells Dimboosts now!\",\r\n get description() { return `Bulk buy ${formatInt(750)} Dimension Boosts at once.`; },\r\n checkRequirement: ([bulk]) => bulk >= 750,\r\n checkEvent: GAME_EVENT.DIMBOOST_AFTER,\r\n get reward() {\r\n return `The multiplier from Dimension Boosts to Antimatter Dimensions is ${formatPercents(0.01)} higher.`;\r\n },\r\n effect: 1.01\r\n },\r\n {\r\n id: 118,\r\n name: \"IT'S OVER 9000\",\r\n get description() { return `Get a total Dimensional Sacrifice multiplier of ${formatPostBreak(DC.E9000)}.`; },\r\n checkRequirement: () => Sacrifice.totalBoost.exponent >= 9000,\r\n checkEvent: GAME_EVENT.SACRIFICE_RESET_AFTER,\r\n reward: \"Dimensional Sacrifice doesn't reset your Antimatter Dimensions.\",\r\n },\r\n {\r\n id: 121,\r\n name: \"Can you get infinite IP?\",\r\n get description() { return `Reach ${formatPostBreak(\"1e30008\")} Infinity Points.`; },\r\n checkRequirement: () => Currency.infinityPoints.exponent >= 30008,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 122,\r\n name: \"You're already dead.\",\r\n description: \"Eternity without buying Antimatter Dimensions 2-8.\",\r\n checkRequirement: () => player.requirementChecks.eternity.onlyAD1,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE\r\n },\r\n {\r\n id: 123,\r\n name: \"5 more eternities until the update\",\r\n get description() { return `Complete ${formatInt(50)} unique Eternity Challenge tiers.`; },\r\n checkRequirement: () => EternityChallenges.completions >= 50,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER\r\n },\r\n {\r\n id: 124,\r\n name: \"Long lasting relationship\",\r\n get description() {\r\n return `Have your Infinity Power per second exceed your Infinity Power\r\n for ${formatInt(60)} consecutive seconds during a single Infinity.`;\r\n },\r\n checkRequirement: () => AchievementTimers.marathon2\r\n .check(\r\n !EternityChallenge(7).isRunning &&\r\n InfinityDimension(1).productionPerSecond.gt(Currency.infinityPower.value),\r\n 60\r\n ),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 125,\r\n name: \"Like feasting on a behind\",\r\n get description() {\r\n return `Reach ${format(DC.E90)} Infinity Points without having any Infinities\r\n or any 1st Antimatter Dimensions in your current Eternity.`;\r\n },\r\n checkRequirement: () => (Currency.infinityPoints.exponent >= 90 &&\r\n player.requirementChecks.eternity.noAD1 && Currency.infinities.eq(0)),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Infinity Point multiplier based on time spent this Infinity.\",\r\n effect() {\r\n const thisInfinity = Time.thisInfinity.totalSeconds.times(10).add(1);\r\n return DC.D2.pow((Decimal.min(Decimal.pow(thisInfinity, 0.11), 500)).times(Decimal.log(thisInfinity)));\r\n },\r\n cap: () => Effarig.eternityCap,\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 126,\r\n name: \"Popular music\",\r\n get description() { return `Have ${formatInt(180)} times more Replicanti Galaxies than Antimatter Galaxies.`; },\r\n checkRequirement: () => (Replicanti.galaxies.total >= 180 * player.galaxies && player.galaxies > 0),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() {\r\n return `Replicanti Galaxies divide your Replicanti by ${format(Decimal.NUMBER_MAX_VALUE, 1, 0)}\r\n instead of resetting them to ${formatInt(1)}.`;\r\n },\r\n },\r\n {\r\n id: 127,\r\n name: \"But I wanted another prestige layer...\",\r\n get description() { return `Reach ${format(Decimal.NUMBER_MAX_VALUE, 1, 0)} Eternity Points.`; },\r\n checkRequirement: () => Currency.eternityPoints.gte(Decimal.NUMBER_MAX_VALUE),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 128,\r\n name: \"What do I have to do to get rid of you\",\r\n get description() { return `Reach ${formatPostBreak(\"1e22000\")} Infinity Points without any Time Studies.`; },\r\n checkRequirement: () => (Currency.infinityPoints.exponent >= 22000 && player.timestudy.studies.length === 0),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Time Dimensions are multiplied by the number of Time Studies you have.\",\r\n effect: () => Math.max(player.timestudy.studies.length, 1),\r\n formatEffect: value => `${formatX(value)}`\r\n },\r\n {\r\n id: 131,\r\n name: \"No ethical consumption\",\r\n get description() { return `Get ${format(DC.D2E9)} Banked Infinities.`; },\r\n checkRequirement: () => Currency.infinitiesBanked.gt(DC.D2E9),\r\n checkEvent: [GAME_EVENT.ETERNITY_RESET_AFTER, GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION],\r\n get reward() {\r\n return `After Eternity you permanently keep ${formatPercents(0.05)} of your Infinities as Banked Infinities.`;\r\n },\r\n effect: () => Currency.infinities.value.times(0.05).floor()\r\n },\r\n {\r\n id: 132,\r\n name: \"Unique snowflakes\",\r\n get description() {\r\n return `Have ${formatInt(569)} Antimatter Galaxies without gaining any\r\n Replicanti Galaxies in your current Eternity.`;\r\n },\r\n checkRequirement: () => (player.galaxies >= 569 && player.requirementChecks.eternity.noRG),\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,\r\n reward: \"Gain a multiplier to Tachyon Particle and Dilated Time gain based on Antimatter Galaxies.\",\r\n effect: () => 1.22 * Math.max(Math.pow(player.galaxies, 0.04), 1),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 133,\r\n name: \"I never liked this infinity stuff anyway\",\r\n get description() {\r\n return `Reach ${formatPostBreak(DC.E200000)} Infinity Points without\r\n buying any Infinity Dimensions or the ${formatX(2)} Infinity Point multiplier.`;\r\n },\r\n checkRequirement: () =>\r\n (Array.dimensionTiers.map(InfinityDimension).every(dim => dim.baseAmount === 0) &&\r\n player.IPMultPurchases === 0 &&\r\n Currency.infinityPoints.exponent >= 200000),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"You start Eternities with all Infinity Challenges unlocked and completed.\"\r\n },\r\n {\r\n id: 134,\r\n name: \"When will it be enough?\",\r\n get description() { return `Reach ${formatPostBreak(DC.E18000)} Replicanti.`; },\r\n checkRequirement: () => Replicanti.amount.exponent >= 18000,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() {\r\n return `You gain Replicanti ${formatInt(2)} times faster under ${format(replicantiCap(), 1)} Replicanti.`;\r\n }\r\n },\r\n {\r\n id: 135,\r\n name: \"Faster than a potato^286078\",\r\n get description() { return `Get more than ${formatPostBreak(\"1e8296262\")} ticks per second.`; },\r\n checkRequirement: () => Tickspeed.current.exponent <= -8296262,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 136,\r\n name: \"I told you already, time is relative\",\r\n description: \"Dilate time.\",\r\n checkEvent: GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,\r\n },\r\n {\r\n id: 137,\r\n name: \"Now you're thinking with dilation!\",\r\n get description() {\r\n return `Get ${formatPostBreak(\"1e260000\")} antimatter\r\n in ${formatInt(1)} minute or less while Dilated.`;\r\n },\r\n checkRequirement: () =>\r\n (Currency.antimatter.exponent >= 260000 &&\r\n Time.thisEternity.totalMinutes.lte(1) &&\r\n player.dilation.active),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Gain ${formatX(2)} Dilated Time and Time Theorems while Dilated.`; },\r\n effect: () => (player.dilation.active ? 2 : 1),\r\n },\r\n {\r\n id: 138,\r\n name: \"This is what I have to do to get rid of you.\",\r\n get description() {\r\n return `Reach ${formatPostBreak(\"1e26000\")} Infinity Points without any Time Studies while Dilated.`;\r\n },\r\n checkRequirement: () =>\r\n (player.timestudy.studies.length === 0 &&\r\n player.dilation.active &&\r\n Currency.infinityPoints.exponent >= 26000),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Removes the downsides from Time Study 131 and 133 in the Active and Idle Time Study paths.\"\r\n },\r\n {\r\n id: 141,\r\n name: \"Snap back to reality\",\r\n description: \"Make a new Reality.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n get reward() {\r\n return `${formatX(4)} Infinity Point gain, and increase the multiplier for buying ${formatInt(10)}\r\n Antimatter Dimensions by +${format(0.1, 0, 1)}.`;\r\n },\r\n effects: {\r\n ipGain: 4,\r\n buyTenMult: 0.1\r\n }\r\n },\r\n {\r\n id: 142,\r\n name: \"How does this work?\",\r\n description: \"Unlock the automator.\",\r\n checkRequirement: () => Player.automatorUnlocked,\r\n checkEvent: [GAME_EVENT.REALITY_RESET_AFTER, GAME_EVENT.REALITY_UPGRADE_BOUGHT, GAME_EVENT.PERK_BOUGHT,\r\n GAME_EVENT.BLACK_HOLE_UNLOCKED],\r\n get reward() { return `Dimension Boosts are ${formatPercents(0.5)} stronger.`; },\r\n effect: 1.5,\r\n },\r\n {\r\n id: 143,\r\n name: \"Yo dawg, I heard you liked reskins...\",\r\n get description() {\r\n return `Have all your Eternities in your past ${formatInt(10)} Eternities be at least\r\n ${format(Decimal.NUMBER_MAX_VALUE, 1, 0)} times higher Eternity Points than the previous one.`;\r\n },\r\n checkRequirement: () => {\r\n if (player.records.recentEternities.some(i => i[0] === Number.MAX_VALUE)) return false;\r\n const eternities = player.records.recentEternities.map(run => run[2]);\r\n for (let i = 0; i < eternities.length - 1; i++) {\r\n if (eternities[i].lt(eternities[i + 1].times(Decimal.NUMBER_MAX_VALUE))) return false;\r\n }\r\n return true;\r\n },\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n reward: \"Galaxies no longer reset Dimension Boosts.\"\r\n },\r\n {\r\n id: 144,\r\n name: \"Is this an Interstellar reference?\",\r\n description: \"Unlock the Black Hole.\",\r\n checkRequirement: () => BlackHole(1).isUnlocked,\r\n checkEvent: GAME_EVENT.BLACK_HOLE_UNLOCKED,\r\n },\r\n {\r\n id: 145,\r\n name: \"Are you sure these are the right way around?\",\r\n description: \"Have either Black Hole interval smaller than its duration.\",\r\n checkRequirement: () => BlackHoles.list.some(bh => bh.interval < bh.duration),\r\n checkEvent: GAME_EVENT.BLACK_HOLE_UPGRADE_BOUGHT,\r\n get reward() { return `Black Hole intervals are ${formatPercents(0.1)} shorter.`; },\r\n effect: 0.9\r\n },\r\n {\r\n id: 146,\r\n name: \"Perks of living\",\r\n description: \"Have all Perks bought.\",\r\n checkRequirement: () => player.reality.perks.size === Perks.all.length,\r\n checkEvent: GAME_EVENT.PERK_BOUGHT,\r\n get reward() { return `+${formatPercents(0.01)} Glyph rarity.`; },\r\n effect: 1\r\n },\r\n {\r\n id: 147,\r\n name: \"Master of Reality\",\r\n description: \"Have all Reality upgrades bought.\",\r\n checkRequirement: () => RealityUpgrades.allBought,\r\n checkEvent: GAME_EVENT.REALITY_UPGRADE_BOUGHT,\r\n reward: \"Unlock Teresa, the Celestial of Reality.\"\r\n },\r\n {\r\n id: 148,\r\n name: \"Royal flush\",\r\n description: \"Reality with one of each basic Glyph type.\",\r\n checkRequirement: () => BASIC_GLYPH_TYPES\r\n .every(type => Glyphs.activeList.some(g => g.type === type)),\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n reward: \"Gained Glyph level is increased by number of distinct Glyph types equipped.\",\r\n effect: () => (new Set(Glyphs.activeWithoutCompanion.map(g => g.type))).size,\r\n formatEffect: value => `+${formatInt(value)}`\r\n },\r\n {\r\n id: 151,\r\n name: \"You really didn't need it anyway\",\r\n get description() {\r\n return `Get ${formatInt(800)} Antimatter Galaxies without\r\n buying 8th Antimatter Dimensions in your current Infinity.`;\r\n },\r\n checkRequirement: () => (player.galaxies >= 800 && player.requirementChecks.infinity.noAD8),\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,\r\n reward: \"Unlock V, the Celestial of Achievements.\"\r\n },\r\n {\r\n id: 152,\r\n name: \"Y'all got any more of them Glyphs?\",\r\n get description() { return `Have ${formatInt(100)} Glyphs in your inventory.`; },\r\n checkRequirement: () => Glyphs.inventoryList.length >= 100,\r\n checkEvent: GAME_EVENT.GLYPHS_CHANGED\r\n },\r\n {\r\n id: 153,\r\n name: \"More like \\\"reallydoesn'tmatter\\\"\",\r\n description: \"Reality without producing antimatter.\",\r\n checkRequirement: () => player.requirementChecks.reality.noAM,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n },\r\n {\r\n id: 154,\r\n name: \"I am speed\",\r\n get description() { return `Reality in under ${formatInt(5)} seconds (game time).`; },\r\n checkRequirement: () => Time.thisReality.totalSeconds.lt(5),\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n get reward() { return `${formatPercents(MendingMilestone.two.isReached ? 1 : 0.1)} chance each Reality of ${formatX(2)} Realities and Perk Points.`; },\r\n effect: 0.1\r\n },\r\n {\r\n id: 155,\r\n name: \"Achievement #15983\",\r\n get description() { return `Play for ${formatFloat(13.7, 1)} billion years.`; },\r\n checkRequirement: () => Time.totalTimePlayed.totalYears.gt(13.7e9),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Black Hole durations are ${formatPercents(0.1)} longer.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 156,\r\n name: \"College Dropout\",\r\n description: \"Reality without buying Time Theorems.\",\r\n checkRequirement: () => player.requirementChecks.reality.noPurchasedTT,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n get reward() { return `Gain ${formatX(2.5, 0, 1)} generated Time Theorems, and a free coupon to McDonalds™️.`; },\r\n effect: 2.5\r\n },\r\n {\r\n id: 157,\r\n name: \"It's super effective!\",\r\n get description() { return `Get a Glyph with ${formatInt(4)} effects.`; },\r\n checkRequirement: () => Glyphs.activeList.concat(Glyphs.inventoryList).map(\r\n glyph => getGlyphEffectsFromBitmask(glyph.effects, 0, 0)\r\n .filter(effect => effect.isGenerated).length\r\n ).max() >= 4,\r\n checkEvent: GAME_EVENT.GLYPHS_CHANGED\r\n },\r\n {\r\n id: 158,\r\n name: \"Bruh, are you like, inside the hole?\",\r\n description: \"Make both Black Holes permanent.\",\r\n checkRequirement: () => (BlackHole(1).isPermanent && BlackHole(2).isPermanent),\r\n checkEvent: GAME_EVENT.BLACK_HOLE_UPGRADE_BOUGHT,\r\n get reward() { return `Black Hole power increased by ${formatPercents(0.1)}.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 161,\r\n name: \"that's where you're wrong kiddo\",\r\n get description() { return `Get ${formatPostBreak(DC.E1E8)} antimatter while Dilated.`; },\r\n checkRequirement: () => Currency.antimatter.exponent >= 100000000 && player.dilation.active,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 162,\r\n name: \"Reinstalled the game and rejoined the server\",\r\n description: \"Have every Time Study at once.\",\r\n checkRequirement: () => player.timestudy.studies.length >= 58,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 163,\r\n name: \"Actually, super easy! Barely an inconvenience!\",\r\n get description() {\r\n return `Complete all the Eternity Challenges ${formatInt(5)} times with less than ${formatInt(1)}\r\n second (game time) in your current Reality.`;\r\n },\r\n checkRequirement: () => EternityChallenges.all.map(ec => ec.completions).min() >= 5 &&\r\n Time.thisReality.totalSeconds.lt(1),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 164,\r\n name: \"Infinity times two\",\r\n get description() { return `Get ${format(Decimal.NUMBER_MAX_VALUE, 1)} Infinities.`; },\r\n checkRequirement: () => Currency.infinitiesTotal.gte(Decimal.NUMBER_MAX_VALUE),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Gain ×${formatInt(1024)} more Infinities.`; },\r\n effect: 1024\r\n },\r\n {\r\n id: 165,\r\n name: \"Perfectly balanced\",\r\n get description() { return `Get a level ${formatInt(5000)} Glyph with all Glyph level factors equally weighted.`; },\r\n checkRequirement: () => (gainedGlyphLevel().actualLevel >= 5000 &&\r\n [\"repl\", \"dt\", \"eternities\"].every(\r\n i => player.celestials.effarig.glyphWeights[i] === player.celestials.effarig.glyphWeights.ep)),\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n reward: \"Unlock optimal automatic Glyph level factor adjustment.\"\r\n },\r\n {\r\n id: 166,\r\n name: \"Nicenice.\",\r\n get description() { return `Get a Glyph with level exactly ${formatInt(6969)}.`; },\r\n checkRequirement: () => gainedGlyphLevel().actualLevel === 6969,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n get reward() { return `+${formatInt(69)} to Glyph level.`; },\r\n effect: 69\r\n },\r\n {\r\n id: 167,\r\n name: \"Mr. Layer? Sorry, you're not on the list\",\r\n get description() { return `Reach ${format(Decimal.NUMBER_MAX_VALUE, 1, 0)} Reality Machines.`; },\r\n checkRequirement: () => Currency.realityMachines.gte(Decimal.NUMBER_MAX_VALUE),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Gain more Reality Machines based on your current Reality Machines.\",\r\n effect: () => Math.clampMin(1, Currency.realityMachines.value.log2()),\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n {\r\n id: 168,\r\n name: \"Woah, we're halfway there\",\r\n get description() { return `Get ${formatInt(50)} total Ra Celestial Memory levels.`; },\r\n checkRequirement: () => Ra.totalPetLevel >= 50,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Get ${formatPercents(0.1)} more memories.`; },\r\n effect: 1.1\r\n },\r\n {\r\n id: 171,\r\n name: \"The god is delighted\",\r\n description: \"Sacrifice every sacrificable Glyph type at least once.\",\r\n checkRequirement: () => Object.values(player.reality.glyphs.sac).every(s => s.gt(0)),\r\n checkEvent: GAME_EVENT.GLYPHS_CHANGED,\r\n get reward() { return `Glyph sacrifice is ${formatX(2)} stronger.`; },\r\n effect: 2,\r\n },\r\n {\r\n id: 172,\r\n name: \"Hitchhiker's Guide to Reality\",\r\n get description() {\r\n return `Reality for ${format(Decimal.NUMBER_MAX_VALUE, 1)} Reality Machines without having\r\n any Charged Infinity Upgrades, having any equipped Glyphs, or buying any Triad Studies.`;\r\n },\r\n checkRequirement: () => MachineHandler.gainedRealityMachines.gte(Decimal.NUMBER_MAX_VALUE) &&\r\n player.celestials.ra.charged.size === 0 && Glyphs.activeWithoutCompanion.length === 0 &&\r\n player.requirementChecks.reality.noTriads,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n },\r\n {\r\n id: 173,\r\n name: \"Cet accomplissement n'existe pas III\",\r\n get description() { return `Reach ${formatPostBreak(DC.D9_99999E999, 5, 0)} Reality Machines.`; },\r\n checkRequirement: () => player.reality.realityMachines.gte(DC.D9_99999E999),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 174,\r\n name: \"Don't you already have two of these?\",\r\n description: \"Get a Singularity.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.SINGULARITY_RESET_BEFORE\r\n },\r\n {\r\n id: 175,\r\n name: \"The First Antihistorian\",\r\n get description() { return `Get ${formatInt(Ra.alchemyResourceCap)} of all Alchemy Resources.`; },\r\n checkRequirement: () => AlchemyResources.all.every(x => x.amount >= Ra.alchemyResourceCap),\r\n checkEvent: GAME_EVENT.REALITY_RESET_AFTER,\r\n get reward() {\r\n return `Synergism can go above ${formatPercents(1)} and Momentum increases ${formatX(10)} faster.`;\r\n },\r\n effect: 10,\r\n },\r\n {\r\n id: 176,\r\n name: \"Mom counted to 3\",\r\n description: \"Annihilate your Dark Matter Dimensions.\",\r\n },\r\n {\r\n id: 177,\r\n name: \"This mile took a celestial\",\r\n description: \"Complete all Singularity Milestones at least once.\",\r\n checkRequirement: () => SingularityMilestones.all.every(x => x.completions > 0),\r\n checkEvent: GAME_EVENT.SINGULARITY_RESET_AFTER,\r\n },\r\n {\r\n id: 178,\r\n name: \"Destroyer of Worlds\",\r\n get description() { return `Get ${formatInt(100000)} Antimatter Galaxies.`; },\r\n checkRequirement: () => player.galaxies >= 100000,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,\r\n get reward() { return `All Galaxies are ${formatPercents(0.01)} stronger.`; },\r\n effect: 1.01\r\n },\r\n {\r\n id: 181,\r\n displayId: 666,\r\n name: \"Antimatter Dimensions Eternal\",\r\n description: \"Doom your Reality.\",\r\n checkRequirement: () => Pelle.isDoomed,\r\n checkEvent: GAME_EVENT.REALITY_RESET_AFTER,\r\n },\r\n {\r\n id: 182,\r\n name: \"One more time\",\r\n description: \"Permanently gain back all Antimatter Dimension autobuyers.\",\r\n checkRequirement: () => (PelleUpgrade.antimatterDimAutobuyers1.canBeApplied &&\r\n PelleUpgrade.antimatterDimAutobuyers2.canBeApplied),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 183,\r\n name: \"Déjà vOoM\",\r\n description: \"Complete Infinity Challenge 5 while Doomed.\",\r\n checkRequirement: () => (Pelle.isDoomed && InfinityChallenge(5).isCompleted),\r\n checkEvent: GAME_EVENT.INFINITY_CHALLENGE_COMPLETED,\r\n // Weirdly specific reward? Yes, its V's ST bonus because we forgot to disable it\r\n // when balancing Pelle and only realised too late.\r\n get reward() { return `All Antimatter Dimensions are raised to ${formatPow(1.0812403840463596, 0, 3)}`; },\r\n effect: 1.0812403840463596\r\n },\r\n {\r\n id: 184,\r\n name: \"You're out!\",\r\n description: \"Encounter the third Pelle Strike.\",\r\n checkRequirement: () => PelleStrikes.eternity.hasStrike,\r\n checkEvent: GAME_EVENT.PELLE_STRIKE_UNLOCKED\r\n },\r\n {\r\n id: 185,\r\n name: \"Four score and seven years ago\",\r\n description: \"Encounter the fourth Pelle Strike.\",\r\n checkRequirement: () => PelleStrikes.ECs.hasStrike,\r\n checkEvent: GAME_EVENT.PELLE_STRIKE_UNLOCKED\r\n },\r\n {\r\n id: 186,\r\n displayId: 181,\r\n name: \"An unhealthy obsession\",\r\n description: `Purchase Time Study 181 while Doomed.`,\r\n },\r\n {\r\n id: 187,\r\n name: \"The One with Dilated Time\",\r\n description: \"Unlock Dilation while Doomed.\",\r\n checkRequirement: () => PelleStrikes.dilation.hasStrike,\r\n checkEvent: GAME_EVENT.PELLE_STRIKE_UNLOCKED,\r\n // We forgot to disable a singularity milestone while balancing Pelle; now it's disabled\r\n // and this upgrade has the same effect as it used to.\r\n get reward() {\r\n return `Increase the multiplier per repeatable Dilated Time\r\n multiplier upgrade by ${formatX(1.35, 0, 2)}.`;\r\n },\r\n effect: 1.35\r\n },\r\n {\r\n id: 188,\r\n name: \"The End?\",\r\n description: \"'Beat' the game.\",\r\n checkRequirement: () => GameEnd.endState > END_STATE_MARKERS.GAME_END && !GameEnd.removeAdditionalEnd,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n //Custom Achievements Start Here\r\n {\r\n id: 191,\r\n name: \"I can fix it\",\r\n description: \"Mend the Multiverse.\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n reward: \"Re-enable TTM and Achievements 118, 126, and 143 in Doomed Reality\"\r\n },\r\n {\r\n id: 192,\r\n name: \"I am no longer trapped here\",\r\n description: \"Unlock the 10 Mend Milestone\",\r\n checkRequirement: () => MendingMilestone.six.isReached,\r\n get reward() {\r\n return `Multiply Multiversal Remain Gain by ${formatX(3, 0)}.`;\r\n },\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n effect: 3,\r\n },\r\n {\r\n id: 193,\r\n displayId: 297,\r\n name: \"TRUE Royal flush\",\r\n description: \"Have one of each Glyph type equipped at once (not counting Companion).\",\r\n checkRequirement: () => FUNCTIONAL_GLYPH_TYPES\r\n .every(type => Glyphs.activeList.some(g => g.type === type)),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Gained Glyph level is ×1.0808 after instability.\",\r\n effect: 1.0808\r\n },\r\n {\r\n id: 194,\r\n name: \"Limit Break^2\",\r\n description: \"Warp Reality\",\r\n checkRequirement: () => player.reality.warped,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n reward: \"Challenge Times and total Antimatter are no longer reset\",\r\n effect: 1,\r\n },\r\n {\r\n id: 195,\r\n name: \"Woah, we're super halfway there\",\r\n get description() { return `Get ${formatInt(350)} total Ra Celestial Memory levels.`; },\r\n checkRequirement: () => Ra.totalPetLevel >= 350,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n get reward() { return `Get ×10 more memories.`; },\r\n effect: 10\r\n },\r\n {\r\n id: 196,\r\n name: \"196\",\r\n description: \"placeholder\",\r\n },\r\n {\r\n id: 197,\r\n name: \"197\",\r\n description: \"placeholder\",\r\n },\r\n {\r\n id: 198,\r\n name: \"198\",\r\n description: \"placeholder\",\r\n },\r\n];\r\n","export const secretAchievements = [\r\n {\r\n id: 11,\r\n name: \"The first one's always free\",\r\n description: \"Click on this Achievement.\"\r\n },\r\n {\r\n id: 12,\r\n name: \"Just in case\",\r\n get description() { return `Save ${formatInt(100)} times without refreshing.`; }\r\n },\r\n {\r\n id: 13,\r\n name: \"It pays to have respect\",\r\n description: \"Pay respects.\"\r\n },\r\n {\r\n id: 14,\r\n name: \"So do I\",\r\n description: \"Say something naughty.\"\r\n },\r\n {\r\n id: 15,\r\n name: \"Do a barrel roll!\",\r\n description: \"Do a barrel roll.\",\r\n },\r\n {\r\n id: 16,\r\n name: \"Do you enjoy pain?\",\r\n get description() {\r\n return `Use a \"painful\" notation for ${formatInt(10)} real-time minutes\r\n after doing an Eternity.`;\r\n },\r\n checkRequirement: () => AchievementTimers.pain\r\n .check(PlayerProgress.eternityUnlocked() && Notations.current.isPainful, 600),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 17,\r\n name: \"30 Lives\",\r\n description: \"Input the konami code.\"\r\n },\r\n {\r\n id: 18,\r\n name: \"Do you feel lucky? Well do ya punk?\",\r\n get description() {\r\n return `You have a ${formatInt(1)}/${formatInt(1e5)} chance of getting this achievement every second.`;\r\n }\r\n },\r\n {\r\n id: 21,\r\n name: \"Go study in real life instead\",\r\n description: \"Purchase the secret Time Study.\"\r\n },\r\n {\r\n id: 22,\r\n name: \"Deep fried\",\r\n get description() { return `Buy ${formatInt(1e5)} Antimatter Galaxies in total while using emoji notation.`; },\r\n checkRequirement: () => player.requirementChecks.permanent.emojiGalaxies >= 1e5,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER\r\n },\r\n {\r\n id: 23,\r\n name: \"Stop right there criminal scum!\",\r\n description: \"Open the console.\"\r\n },\r\n {\r\n id: 24,\r\n name: \"Real news\",\r\n description: \"Click on a news ticker message that does something when you click on it.\"\r\n },\r\n {\r\n id: 25,\r\n name: \"Shhh... It's a secret\",\r\n description: \"Discover a secret theme.\"\r\n },\r\n {\r\n id: 26,\r\n name: \"You're a failure\",\r\n get description() {\r\n return `Fail Eternity Challenges ${formatInt(10)} times without refreshing.\r\n What are you doing with your life...`;\r\n },\r\n checkRequirement: (function() {\r\n let count = 0;\r\n return () => ++count >= 10;\r\n }()),\r\n checkEvent: GAME_EVENT.CHALLENGE_FAILED\r\n },\r\n {\r\n id: 27,\r\n name: \"It's not called matter dimensions is it?\",\r\n description: \"Get Infinite matter.\",\r\n checkRequirement: () => Currency.matter.gte(Decimal.NUMBER_MAX_VALUE),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 28,\r\n name: \"Nice.\",\r\n description: \"Don't act like you don't know what you did.\"\r\n },\r\n {\r\n id: 31,\r\n name: \"You should download some more RAM\",\r\n get description() { return `Set your update rate to ${formatInt(200)}ms.`; }\r\n },\r\n {\r\n id: 32,\r\n name: \"Less than or equal to 0.001\",\r\n get description() {\r\n return `Get a fastest infinity or eternity time of less than or equal to ${format(0.001, 3, 3)} seconds.`;\r\n },\r\n checkRequirement: () =>\r\n Time.bestInfinity.totalMilliseconds.lte(1) ||\r\n Time.bestEternity.totalMilliseconds.lte(1),\r\n checkEvent: [GAME_EVENT.BIG_CRUNCH_AFTER, GAME_EVENT.ETERNITY_RESET_AFTER]\r\n },\r\n {\r\n id: 33,\r\n name: \"A sound financial decision\",\r\n description: \"Click on the button to purchase STD coins...Wait, open source disables the shop, how did you get this!?\"\r\n },\r\n {\r\n id: 34,\r\n name: \"You do know how these work, right?\",\r\n description: \"Respec with an empty Time Study Tree.\"\r\n },\r\n {\r\n id: 35,\r\n name: \"Should we tell them about buy max...\",\r\n get description() { return `Buy single Tickspeed upgrades ${formatInt(1e5)} times.`; },\r\n checkRequirement: () => player.requirementChecks.permanent.singleTickspeed >= 1e5,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 36,\r\n name: \"While you were away... Nothing happened.\",\r\n description: \"See nothing happen while you were away.\"\r\n },\r\n {\r\n id: 37,\r\n name: \"You followed the instructions\",\r\n description: \"Follow instructions.\"\r\n },\r\n {\r\n id: 38,\r\n name: \"Knife's edge\",\r\n description: \"Close the Hard Reset modal after typing in the confirmation.\"\r\n },\r\n {\r\n id: 41,\r\n name: \"That dimension doesn’t exist\",\r\n description: \"Try to purchase the 9th dimension.\"\r\n },\r\n {\r\n id: 42,\r\n name: \"SHAME ON ME\",\r\n description: \"Try to use EC12 to speed up time.\"\r\n },\r\n {\r\n id: 43,\r\n name: \"A cacophonous chorus\",\r\n description: \"Have all equipped Glyphs be Music Glyphs.\",\r\n checkRequirement: () => Glyphs.active.length && Glyphs.active.every(x => Glyphs.isMusicGlyph(x)),\r\n checkEvent: GAME_EVENT.GLYPHS_EQUIPPED_CHANGED\r\n },\r\n {\r\n id: 44,\r\n name: \"Are you statisfied now?\",\r\n get description() { return `Stare intently at the statistics tab for ${formatInt(15)} real-time minutes.`; },\r\n checkRequirement: () => AchievementTimers.stats.check(Tab.statistics.isOpen, 900),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER\r\n },\r\n {\r\n id: 45,\r\n name: \"This dragging is dragging on\",\r\n description: \"Drag the Perks around for a minute.\",\r\n checkRequirement: () => player.requirementChecks.permanent.perkTreeDragging++ / 100 >= 60\r\n },\r\n {\r\n id: 46,\r\n name: \"For a rainy day\",\r\n description: \"Store a day of real time.\"\r\n },\r\n {\r\n id: 47,\r\n name: \"ALT+\",\r\n description: \"Hide every possible tab.\"\r\n },\r\n {\r\n id: 48,\r\n name: \"Stack overflow\",\r\n description: \"Have more Automator errors than lines.\"\r\n },\r\n];\r\n","import { normalAchievements } from \"./normal-achievements\";\r\nimport { secretAchievements } from \"./secret-achievements\";\r\n\r\nexport const achievements = {\r\n normal: normalAchievements,\r\n secret: secretAchievements\r\n};\r\n","export const awayProgressTypes = [\r\n {\r\n name: \"antimatter\",\r\n isUnlocked: () => true,\r\n }, {\r\n name: \"dimensionBoosts\",\r\n isUnlocked: () => true,\r\n }, {\r\n name: \"antimatterGalaxies\",\r\n reference: [\"galaxies\"],\r\n isUnlocked: () => true,\r\n }, {\r\n name: \"infinities\",\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n }, {\r\n name: \"infinityPoints\",\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n }, {\r\n name: \"replicanti\",\r\n reference: [\"replicanti\", \"amount\"],\r\n isUnlocked: () => PlayerProgress.replicantiUnlocked() || PlayerProgress.eternityUnlocked(),\r\n }, {\r\n name: \"replicantiGalaxies\",\r\n reference: [\"replicanti\", \"galaxies\"],\r\n isUnlocked: () => PlayerProgress.replicantiUnlocked() || PlayerProgress.eternityUnlocked(),\r\n }, {\r\n name: \"eternities\",\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n }, {\r\n name: \"eternityPoints\",\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n }, {\r\n name: \"tachyonParticles\",\r\n reference: [\"dilation\", \"tachyonParticles\"],\r\n isUnlocked: () => PlayerProgress.dilationUnlocked() || PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"dilatedTime\",\r\n reference: [\"dilation\", \"dilatedTime\"],\r\n isUnlocked: () => PlayerProgress.dilationUnlocked() || PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"timeTheorems\",\r\n reference: [\"timestudy\", \"theorem\"],\r\n isUnlocked: () => PlayerProgress.dilationUnlocked() || PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"tachyonGalaxies\",\r\n reference: [\"dilation\", \"totalTachyonGalaxies\"],\r\n isUnlocked: () => PlayerProgress.dilationUnlocked() || PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"achievementAmount\",\r\n reference: [\"achievementBits\"],\r\n applyFn: x => x.map(b => countValuesFromBitmask(b)).sum(),\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"realities\",\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"realityMachines\",\r\n reference: [\"reality\", \"realityMachines\"],\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"blackHole\",\r\n isUnlocked: () => BlackHole(1).isUnlocked,\r\n // Functions as the visible option for both first & second BHs, never appears due to having no reference.\r\n appearsInAwayModal: false,\r\n }, {\r\n name: \"firstBlackHole\",\r\n awayOption: \"blackHole\",\r\n reference: [\"blackHole\", \"0\", \"activations\"],\r\n isUnlocked: () => BlackHole(1).isUnlocked,\r\n classObjectReference: \"black-hole\",\r\n showOption: false,\r\n }, {\r\n name: \"secondBlackHole\",\r\n awayOption: \"blackHole\",\r\n reference: [\"blackHole\", \"1\", \"activations\"],\r\n isUnlocked: () => BlackHole(2).isUnlocked,\r\n classObjectReference: \"black-hole\",\r\n showOption: false,\r\n }, {\r\n name: \"relicShards\",\r\n reference: [\"celestials\", \"effarig\", \"relicShards\"],\r\n isUnlocked: () => TeresaUnlocks.effarig.canBeApplied,\r\n }, {\r\n name: \"celestialMemories\",\r\n isUnlocked: () => VUnlocks.raUnlock.isUnlocked,\r\n // Functions as the visible option for all Memories, never appears due to having no reference.\r\n appearsInAwayModal: false,\r\n }, {\r\n name: \"teresaMemories\",\r\n awayOption: \"celestialMemories\",\r\n reference: [\"celestials\", \"ra\", \"pets\", \"teresa\", \"memories\"],\r\n isUnlocked: () => Ra.pets.teresa.isUnlocked && !Ra.pets.teresa.isCapped,\r\n showOption: false,\r\n }, {\r\n name: \"effarigMemories\",\r\n awayOption: \"celestialMemories\",\r\n reference: [\"celestials\", \"ra\", \"pets\", \"effarig\", \"memories\"],\r\n isUnlocked: () => Ra.pets.effarig.isUnlocked && !Ra.pets.effarig.isCapped,\r\n showOption: false,\r\n }, {\r\n name: \"enslavedMemories\",\r\n forcedName: \"Nameless Memories\",\r\n awayOption: \"celestialMemories\",\r\n reference: [\"celestials\", \"ra\", \"pets\", \"enslaved\", \"memories\"],\r\n isUnlocked: () => Ra.pets.enslaved.isUnlocked && !Ra.pets.enslaved.isCapped,\r\n showOption: false,\r\n }, {\r\n name: \"vMemories\",\r\n awayOption: \"celestialMemories\",\r\n reference: [\"celestials\", \"ra\", \"pets\", \"v\", \"memories\"],\r\n isUnlocked: () => Ra.pets.v.isUnlocked && !Ra.pets.v.isCapped,\r\n showOption: false,\r\n }, {\r\n name: \"imaginaryMachines\",\r\n reference: [\"reality\", \"imaginaryMachines\"],\r\n isUnlocked: () => MachineHandler.isIMUnlocked,\r\n }, {\r\n name: \"darkMatter\",\r\n reference: [\"celestials\", \"laitela\", \"darkMatter\"],\r\n isUnlocked: () => Laitela.isUnlocked,\r\n }, {\r\n name: \"darkEnergy\",\r\n reference: [\"celestials\", \"laitela\", \"darkEnergy\"],\r\n isUnlocked: () => Laitela.isUnlocked,\r\n }, {\r\n name: \"singularities\",\r\n reference: [\"celestials\", \"laitela\", \"singularities\"],\r\n isUnlocked: () => Laitela.isUnlocked,\r\n }, {\r\n name: \"realityShards\",\r\n reference: [\"celestials\", \"pelle\", \"realityShards\"],\r\n isUnlocked: () => Pelle.isDoomed,\r\n },\r\n {\r\n name: \"multiversalRemains\",\r\n reference: [\"mending\", \"new content\"],\r\n isUnlocked: () => PlayerProgress.mendingUnlocked(),\r\n },\r\n];\r\n","import { DC } from \"../constants\";\r\n\r\nexport const catchupResources = [\r\n {\r\n name: \"Antimatter Dimensions\",\r\n id: 0,\r\n requiredStage: PROGRESS_STAGE.PRE_INFINITY,\r\n description: `Every Antimatter Dimension continuously produces Dimensions of the next tier down. The lowest\r\n Antimatter Dimension produces antimatter.`\r\n },\r\n {\r\n name: \"Tickspeed Upgrades\",\r\n id: 1,\r\n openH2pEntry: \"Tickspeed\",\r\n requiredStage: PROGRESS_STAGE.PRE_INFINITY,\r\n description: `Tickspeed Upgrades make Antimatter Dimensions produce other Antimatter Dimensions or antimatter\r\n as if time were passing faster.`\r\n },\r\n {\r\n name: \"Autobuyers\",\r\n id: 2,\r\n requiredStage: PROGRESS_STAGE.PRE_INFINITY,\r\n description: `Autobuyers are a built-in feature to the game which purchases upgrades for your Antimatter\r\n Dimensions automatically when you can afford them.`\r\n },\r\n {\r\n name: \"Dimension Boosts\",\r\n id: 3,\r\n requiredStage: PROGRESS_STAGE.PRE_INFINITY,\r\n description: `Dimension Boosts are gained by resetting all your Antimatter Dimensions and tickspeed after\r\n reaching a certain amount of the highest available Antimatter Dimension. They provide a multiplier to your\r\n Antimatter Dimensions.`\r\n },\r\n {\r\n name: \"Antimatter Galaxies\",\r\n id: 4,\r\n requiredStage: PROGRESS_STAGE.PRE_INFINITY,\r\n description: `Antimatter Galaxies are gained by resetting your Antimatter Dimensions and Dimension Boosts. They\r\n improve the effectiveness of your Tickspeed Upgrades in a compounding way.`\r\n },\r\n {\r\n name: \"Infinity\",\r\n id: 5,\r\n requiredStage: PROGRESS_STAGE.EARLY_INFINITY,\r\n description: () => `Infinity is the first main reset layer. Reaching ${format(Number.MAX_VALUE, 2)} antimatter\r\n allows you to reset everything up to this point in exchange for unlocking new content and resources.`\r\n },\r\n {\r\n name: \"Infinity Points\",\r\n id: 6,\r\n openH2pEntry: \"Infinity\",\r\n requiredStage: PROGRESS_STAGE.EARLY_INFINITY,\r\n description: `Infinity Points are the primary resource after completing your first Infinity. They can be spent on\r\n features which persist through Infinity resets.`\r\n },\r\n {\r\n name: \"Normal Challenges\",\r\n id: 7,\r\n openH2pEntry: \"Normal Challenges\",\r\n requiredStage: PROGRESS_STAGE.EARLY_INFINITY,\r\n description: () => `Challenges require you to reach ${format(Number.MAX_VALUE, 2)} antimatter under more difficult\r\n conditions. Completing challenges allows you to upgrade your Autobuyers.`\r\n },\r\n {\r\n name: \"Break Infinity\",\r\n id: 8,\r\n requiredStage: PROGRESS_STAGE.BREAK_INFINITY,\r\n description: () => `Upgrading your Big Crunch Autobuyer to the maximum allows you to surpass\r\n ${format(Number.MAX_VALUE, 2)} antimatter, giving increasing amounts of Infinity Points with more antimatter.`\r\n },\r\n {\r\n name: \"Infinity Dimensions\",\r\n id: 9,\r\n requiredStage: PROGRESS_STAGE.BREAK_INFINITY,\r\n description: `Infinity Dimensions Produce in a cascading fashion like Antimatter Dimensions. The lowest tier of\r\n Infinity Dimension produces Infinity Power, which applies a large multiplier to all Antimatter Dimensions.`\r\n },\r\n {\r\n name: \"Infinity Challenges\",\r\n id: 10,\r\n requiredStage: PROGRESS_STAGE.BREAK_INFINITY,\r\n description: () => `Infinity Challenges are new challenges with an antimatter goal above\r\n ${format(Number.MAX_VALUE, 2)}. Completing them rewards upgrades and production boosts.`\r\n },\r\n {\r\n name: \"Replicanti\",\r\n id: 11,\r\n requiredStage: PROGRESS_STAGE.REPLICANTI,\r\n description: () => `Replicanti is a resource which produces itself over time, giving a multiplier to all\r\n Infinity Dimensions. At ${format(Number.MAX_VALUE, 2)} Replicanti, they can be reset to ${formatInt(1)} for an\r\n additional Galaxy which does not increase the cost of Antimatter Galaxies. They also reset after every Infinity.`\r\n },\r\n {\r\n name: \"Eternity\",\r\n id: 12,\r\n requiredStage: PROGRESS_STAGE.EARLY_ETERNITY,\r\n description: () => `Eternity is the second main reset layer. Reaching ${format(Number.MAX_VALUE, 2)} Infinity Points\r\n allows you to reset everything up to this point for access to new content and resources.`\r\n },\r\n {\r\n name: \"Eternity Points\",\r\n id: 13,\r\n openH2pEntry: \"Eternity\",\r\n requiredStage: PROGRESS_STAGE.EARLY_ETERNITY,\r\n description: `Eternity Points are the primary resource after completing your first Eternity, and scale based on your\r\n Infinity Points at the time you complete the Eternity.`\r\n },\r\n {\r\n name: \"Time Studies\",\r\n id: 14,\r\n requiredStage: PROGRESS_STAGE.EARLY_ETERNITY,\r\n description: `Time Studies are a set of upgrades akin to a skill tree, and can be freely re-allocated after every\r\n Eternity with no resource loss. Some sections of the tree have restrictions which forbid you from choosing\r\n particular studies simultaneously.`\r\n },\r\n {\r\n name: \"Eternity Milestones\",\r\n id: 15,\r\n requiredStage: PROGRESS_STAGE.EARLY_ETERNITY,\r\n description: `Eternity Milestones are forms of built-in automation and convenience which are unlocked simply by\r\n completing more Eternities. Unlocking them does not require spending any resources.`\r\n },\r\n {\r\n name: \"Time Dimensions\",\r\n id: 16,\r\n requiredStage: PROGRESS_STAGE.EARLY_ETERNITY,\r\n description: `Time Dimensions also produce each other in a cascading manner, with the lowest tier producing Time\r\n Shards. Time Shards give you additional Tickspeed Upgrades which do not increase the cost of the Tickspeed\r\n Upgrades purchased with antimatter.`\r\n },\r\n {\r\n name: \"Eternity Challenges\",\r\n id: 17,\r\n requiredStage: PROGRESS_STAGE.ETERNITY_CHALLENGES,\r\n description: `Eternity Challenges are modified Eternities with an Infinity Point goal which must be reached for\r\n completion. They can be completed up to five times, getting more difficult each repetition in exchange for\r\n increasingly powerful rewards.`\r\n },\r\n {\r\n name: \"Time Dilation\",\r\n id: 18,\r\n requiredStage: PROGRESS_STAGE.EARLY_DILATION,\r\n description: () => `Time Dilation is a modified Eternity where tickspeed and all Dimension multipliers are\r\n severely reduced. Completing Dilated Eternities gives Tachyon Particles.`\r\n },\r\n {\r\n name: \"Tachyon Particles\",\r\n id: 19,\r\n openH2pEntry: \"Time Dilation\",\r\n requiredStage: PROGRESS_STAGE.EARLY_DILATION,\r\n description: () => `Tachyon Particles are a resource which cannot be farmed and require you to get a higher amount\r\n of antimatter in a Dilated Eternity in order to increase your amount. Tachyon Particles produce Dilated Time.`\r\n },\r\n {\r\n name: \"Reality\",\r\n id: 20,\r\n requiredStage: PROGRESS_STAGE.EARLY_REALITY,\r\n description: () => `Reality is the third and final main reset layer. Reaching ${format(DC.E4000)} Eternity Points\r\n gives you the option to reset everything up to this point in exchange for unlocking new content and gaining\r\n access to new resources.`\r\n },\r\n {\r\n name: \"Reality Machines\",\r\n id: 21,\r\n openH2pEntry: \"Reality\",\r\n requiredStage: PROGRESS_STAGE.EARLY_REALITY,\r\n description: `Reality Machines are the primary resource after completing your first Reality. They are given based\r\n on Eternity Points at the time of completing a Reality.`\r\n },\r\n {\r\n name: \"Perks\",\r\n id: 22,\r\n requiredStage: PROGRESS_STAGE.EARLY_REALITY,\r\n description: `Perks are unlockable features similar to Eternity Milestones which primarily focus on convenience and\r\n automation. They are purchased using Perk Points, which are gained after every Reality.`\r\n },\r\n {\r\n name: \"Glyphs\",\r\n id: 23,\r\n requiredStage: PROGRESS_STAGE.EARLY_REALITY,\r\n description: `Glyphs are equippable upgrades which can only be unequipped between Realities. Every Reality you are\r\n allowed to choose one of multiple new random Glyphs to receive; the average quality of your available choices\r\n is determined by how high some of your resources reached in that Reality.`\r\n },\r\n {\r\n name: \"Automator\",\r\n id: 24,\r\n openH2pEntry: \"Automator Overview\",\r\n requiredStage: PROGRESS_STAGE.EARLY_REALITY,\r\n description: `The Automator is a built-in feature that uses a scripting language that allows you to eventually\r\n finish Realities completely hands-off with enough upgrades and perks.`\r\n },\r\n {\r\n name: \"Black Hole\",\r\n id: 25,\r\n requiredStage: PROGRESS_STAGE.EARLY_REALITY,\r\n description: `The Black Hole runs the entire game faster in a periodic cycle. This affects everything in the game up\r\n to this point and will give similar results to leaving the game open for an equivalent amount of time.`\r\n },\r\n {\r\n name: \"Teresa\",\r\n id: 26,\r\n requiredStage: PROGRESS_STAGE.TERESA,\r\n description: `Teresa is the first Celestial, who has a more difficult Reality which gives a massive boost to Glyph\r\n Sacrifice depending upon completion. They unlock upgrades which focus on testing and automating Realities more\r\n easily.`\r\n },\r\n {\r\n name: \"Effarig\",\r\n id: 27,\r\n requiredStage: PROGRESS_STAGE.EFFARIG,\r\n description: `Effarig is the second Celestial, whose Reality limits your Glyphs and has scaling nerfs but gives\r\n rewards for each new reset layer reached. They unlock upgrades which focus on automatically selecting and\r\n filtering the large number of Glyphs you are receiving, purchased with a new resource called Relic Shards.`\r\n },\r\n {\r\n name: \"The Nameless Ones\",\r\n id: 28,\r\n openH2pEntry: \"Nameless Ones\",\r\n requiredStage: PROGRESS_STAGE.ENSLAVED,\r\n description: `The Nameless Ones are the third Celestial, whose Reality is extremely punishing with a long list of\r\n nerfs, but unlocks Tesseracts for those who can figure out how to prevail. They also modify your Black Hole to\r\n allow it to store time.`\r\n },\r\n {\r\n name: \"Stored Time\",\r\n id: 29,\r\n openH2pEntry: \"Nameless Ones\",\r\n requiredStage: PROGRESS_STAGE.ENSLAVED,\r\n description: `Your Black Hole has the ability to store time in two ways. Charging it allows you to hold on to\r\n sped-up time and release it later as a single skip-forward burst. Storing real time lets you use actual time\r\n to simulate Realities (giving you the resources of that Reality but multiplied), or as a stand-in for\r\n offline progress.`\r\n },\r\n {\r\n name: \"Tesseracts\",\r\n id: 30,\r\n requiredStage: PROGRESS_STAGE.ENSLAVED,\r\n description: `Infinity Dimensions cannot be purchased indefinitely and all but the 8th have a hard limit for how\r\n many times they can be purchased. Each Tesseract permanently increases this limit by a large amount.`\r\n },\r\n {\r\n name: \"V\",\r\n id: 31,\r\n requiredStage: PROGRESS_STAGE.V,\r\n description: `V is the fourth Celestial, with a modified Reality which is similar to Teresa's Reality but only gives\r\n rewards by reaching certain milestones of resources within. They give a new resource called Space Theorems, which\r\n allow you to purchase additional Time Studies without path restrictions.`\r\n },\r\n {\r\n name: \"Ra\",\r\n id: 32,\r\n requiredStage: PROGRESS_STAGE.RA,\r\n description: `Ra is the fifth Celestial, with a modified Reality which produces a resource called Memory Chunks\r\n based on your resource totals within. They focus highly on taking older upgrades and themes from the previous\r\n four Celestials and improving upon them, as well as filling out some final gaps in automation and convenience.`\r\n },\r\n {\r\n name: \"Memories\",\r\n id: 33,\r\n openH2pEntry: \"Ra\",\r\n requiredStage: PROGRESS_STAGE.RA,\r\n description: `Ra has the previous four Celestials under their control, producing Memories over time based on Memory\r\n Chunk count. These Memories are used to level up the previous Celestials, providing upgrades when certain levels\r\n are reached.`\r\n },\r\n {\r\n name: \"Charged Infinity Upgrades\",\r\n id: 34,\r\n openH2pEntry: \"Ra\",\r\n requiredStage: PROGRESS_STAGE.RA,\r\n description: `Teresa's Memories allow you to charge your Infinity Upgrades, maintaining a similar effect but\r\n strengthening them significantly. Which upgrades are charged can only be changed between Realities.`\r\n },\r\n {\r\n name: \"Glyph Alchemy\",\r\n id: 35,\r\n requiredStage: PROGRESS_STAGE.RA,\r\n description: `Effarig's Memories unlock Glyph Alchemy, which gives many minor boosts using a modified version of\r\n Glyph Sacrifice. The resources gained from giving up Glyphs in this way must be combined together in reactions\r\n in order to fully upgrade their effects.`\r\n },\r\n {\r\n name: \"Amplified Black Hole\",\r\n id: 36,\r\n openH2pEntry: \"Ra\",\r\n requiredStage: PROGRESS_STAGE.RA,\r\n description: `Nameless's Memories amplify charging so that the amount of game time stored is larger than the actual\r\n game time elapsed. Discharging can now also be done repeatedly and automatically.`\r\n },\r\n {\r\n name: \"Harder V\",\r\n id: 37,\r\n openH2pEntry: \"Ra\",\r\n requiredStage: PROGRESS_STAGE.RA,\r\n description: `V's Memories unlocks a modified version of V's original Reality with even harder goals and a new set\r\n of Time Studies called Triad Studies.`\r\n },\r\n {\r\n name: \"Imaginary Machines\",\r\n id: 38,\r\n requiredStage: PROGRESS_STAGE.IMAGINARY_MACHINES,\r\n description: () => `Imaginary Machines are a new resource unlocked when reaching ${format(DC.E1000)} Reality\r\n Machines. They are produced passively up to a cap determined by how many Reality Machines you would have gotten\r\n in your farthest Reality ever.`\r\n },\r\n {\r\n name: \"Lai'tela\",\r\n id: 39,\r\n requiredStage: PROGRESS_STAGE.LAITELA,\r\n description: `Lai'tela is the sixth Celestial, whose Reality has a modified completion condition and gives a\r\n scaling reward based on how quickly you can reach it. They unlock new features largely related to a resource\r\n called Dark Matter.`\r\n },\r\n {\r\n name: \"Continuum\",\r\n id: 40,\r\n requiredStage: PROGRESS_STAGE.LAITELA,\r\n description: `Continuum is a modified type of production which allows your Antimatter Dimensions to produce as if\r\n they could purchase fractional amounts of upgrades, without actually purchasing them.`\r\n },\r\n {\r\n name: \"Dark Matter Dimensions\",\r\n id: 41,\r\n openH2pEntry: \"Lai'tela\",\r\n requiredStage: PROGRESS_STAGE.LAITELA,\r\n description: `Dark Matter Dimensions are cascading production which operate on a tick-based system instead of\r\n continuously. The lowest tier produces Dark Matter and all tiers produce Dark Energy.`\r\n },\r\n {\r\n name: \"Dimension Reset Mechanics\",\r\n id: 42,\r\n openH2pEntry: \"Lai'tela\",\r\n requiredStage: PROGRESS_STAGE.LAITELA,\r\n description: `Dark Matter Dimensions can be reset in two ways. Annihilation resets all your Dimensions in exchange\r\n for a permanent multiplier to all Dark Matter Dimensions. Ascension increases production but resets the interval\r\n of a single Dimension.`\r\n },\r\n {\r\n name: \"Singularities\",\r\n id: 43,\r\n requiredStage: PROGRESS_STAGE.LAITELA,\r\n description: `Dark Energy can be used to produce Singularities, which give boosts based on their total amount.\r\n When producing Singularities, any extra Dark Energy above the condensing threshold is wasted.`\r\n },\r\n {\r\n name: \"Pelle\",\r\n id: 44,\r\n requiredStage: PROGRESS_STAGE.PELLE,\r\n description: `Pelle is the seventh and final Celestial, who permanently Dooms your game, throwing you into a very\r\n difficult modified Reality which you cannot escape.`\r\n },\r\n {\r\n name: \"Armageddon\",\r\n id: 45,\r\n openH2pEntry: \"Pelle\",\r\n requiredStage: PROGRESS_STAGE.PELLE,\r\n description: `Armageddon is a Pelle-specific reset which you can perform at any time. This resets your progress to\r\n the beginning of the Doomed Reality, but gives Remnants which produce Reality Shards.`\r\n },\r\n {\r\n name: \"Pelle Strikes and Rifts\",\r\n id: 46,\r\n openH2pEntry: \"Pelle Strikes\",\r\n requiredStage: PROGRESS_STAGE.PELLE,\r\n description: `Upon reaching certain progress milestones within Pelle, a Strike may occur which permanently applies\r\n another nerf to the Doomed Reality. Accompanying every Strike is a Rift, which is a mechanic which lets you drain\r\n a different resource in exchange for a boost. These are permanent and remain unlocked after Armageddon.`\r\n },\r\n {\r\n name: \"Multiversal Remains\",\r\n id: 47,\r\n openH2pEntry: \"Mending\",\r\n requiredStage: PROGRESS_STAGE.MENDING,\r\n description: `*placeholder*`\r\n },\r\n];\r\n","import { DC } from \"../../constants\";\r\nimport wordShift from \"../../word-shift\";\r\n\r\nexport function emphasizeEnd(fraction) {\r\n return Math.pow(fraction, 10);\r\n}\r\n\r\nexport function vUnlockProgress(index) {\r\n if (VUnlocks.vAchievementUnlock.isUnlocked) return 1;\r\n const db = Object.values(GameDatabase.celestials.v.mainUnlock).find(e => e.id === index);\r\n return db.progress();\r\n}\r\n\r\nexport function vUnlockLegendLabel(complete, index) {\r\n const db = Object.values(GameDatabase.celestials.v.mainUnlock).find(e => e.id === index);\r\n if (complete >= 1) return `${db.name} condition for V`;\r\n return `Reach ${db.format(db.resource())} / ${db.format(db.requirement)} ${db.name}.`;\r\n}\r\n\r\n// Angle is defined/rescaled so that 0 is the first rift, 4 is the last one, and all 5 are equally spaced around\r\n// a circle. Starts at top-left and goes clockwise, reference point is that 3 is directly down. It's allowed to be\r\n// non-integer since it's also used for off-center curve control points\r\nexport function pelleStarPosition(angle, scale) {\r\n const pelleCenter = new Vector(750, 550);\r\n const theta = (0.7 - 0.4 * angle) * Math.PI;\r\n return new Vector(scale * Math.cos(theta), -scale * Math.sin(theta)).plus(pelleCenter);\r\n}\r\n\r\n// Makes curved spokes connecting the center of Pelle to all the outer nodes corresponding to rifts\r\nfunction pelleStarConnector(index, fillColor, isOverfill) {\r\n return (function() {\r\n // This should be half of the second argument used in pelleStarPosition when used to define rift node positions\r\n const pelleSize = 75;\r\n const pathStart = (0.4 * index + 0.5) * Math.PI;\r\n\r\n // Technically 2 should be about 1.929 and 4/3 should be about 1.328; exact values for both of these leave a small\r\n // gap between the path and the node, so we round up a bit to make those go away\r\n const pathEnd = pathStart + 2;\r\n const path = LogarithmicSpiral.fromPolarEndpoints(pelleStarPosition(index + 0.5, pelleSize),\r\n pathStart, pelleSize, pathEnd, 4 / 3 * pelleSize);\r\n // The +0.01 prevents curve decomposition errors from happening\r\n const pathPadStart = path.angleFromRadius(pelleSize + 0.01) - pathStart;\r\n const pathPadEnd = pathEnd - path.angleFromRadius(4 / 3 * pelleSize);\r\n return {\r\n pathStart,\r\n pathEnd,\r\n path,\r\n pathPadStart,\r\n pathPadEnd,\r\n fill: fillColor,\r\n drawOrder: isOverfill ? CELESTIAL_NAV_DRAW_ORDER.NODE_OVERLAYS : undefined,\r\n noBG: isOverfill,\r\n };\r\n }());\r\n}\r\n\r\nconst FILL_STATE = {\r\n LOCKED: 0,\r\n FILL: 1,\r\n DRAIN: 2,\r\n OVERFILL: 3\r\n};\r\n\r\nfunction riftFillStage(name) {\r\n const rift = PelleRifts[name.toLowerCase()];\r\n if (!rift.canBeApplied) return FILL_STATE.LOCKED;\r\n if (!Pelle.hasGalaxyGenerator || rift.reducedTo === 1) return FILL_STATE.FILL;\r\n if (rift.reducedTo < 1) return FILL_STATE.DRAIN;\r\n return FILL_STATE.OVERFILL;\r\n}\r\n\r\nexport const CELESTIAL_NAV_DRAW_ORDER = {\r\n // Node background is a black fuzzy circle drawn behind nodes. It can help show their\r\n // outline in some cases, and can be used in cases where a connector passes under a node\r\n NODE_BG: 0,\r\n CONNECTORS: 1000,\r\n NODES: 2000,\r\n NODE_OVERLAYS: 3000,\r\n CANVAS_OVERLAY: 4000,\r\n};\r\n\r\nconst Positions = Object.freeze({\r\n teresa: new Vector(100, 100),\r\n teresaPerkPointShop: new Vector(0, -50),\r\n\r\n effarigShop: new Vector(300, 0),\r\n effarigRealityUnlock: new Vector(400, 50),\r\n effarigNode: new Vector(550, 25),\r\n\r\n enslavedReality: new Vector(650, 250),\r\n enslavedGlyphLevel: new Vector(650 + 75 * Math.cos(Math.PI / 180 * -60), 250 + 75 * Math.sin(Math.PI / 180 * -60)),\r\n enslavedGlyphRarity: new Vector(650 + 75 * Math.cos(Math.PI / 180 * 120), 250 + 75 * Math.sin(Math.PI / 180 * 120)),\r\n\r\n vUnlockAchievement: new Vector(400, 350 + 50 * Math.sqrt(3)),\r\n vAchievement0: new Vector(350, 350),\r\n vAchievement1: new Vector(450, 350),\r\n vAchievement2: new Vector(500, 350 + 50 * Math.sqrt(3)),\r\n vAchievement3: new Vector(450, 350 + 100 * Math.sqrt(3)),\r\n vAchievement4: new Vector(350, 350 + 100 * Math.sqrt(3)),\r\n vAchievement5: new Vector(300, 350 + 50 * Math.sqrt(3)),\r\n\r\n raReality: new Vector(400, 200),\r\n raPetTeresa: new Vector(400 + 85 * Math.sin(Math.PI / 180 * 252), 200 + 85 * Math.cos(Math.PI / 180 * 252)),\r\n raPetEffarig: new Vector(400 + 85 * Math.sin(Math.PI / 180 * 140), 200 + 85 * Math.cos(Math.PI / 180 * 140)),\r\n raPetEnslaved: new Vector(400 + 85 * Math.sin(Math.PI / 180 * 78), 200 + 85 * Math.cos(Math.PI / 180 * 78)),\r\n raPetV: new Vector(400 + 85 * Math.sin(Math.PI / 180 * 0), 200 + 85 * Math.cos(Math.PI / 180 * 0)),\r\n\r\n laitelaFirstCenter: new Vector(150, 450),\r\n laitelaFirstLeft: new Vector(100, 500),\r\n laitelaFirstRight: new Vector(200, 500),\r\n laitelaSecondCenter: new Vector(150, 550),\r\n laitelaSecondLeft: new Vector(100, 600),\r\n laitelaSecondRight: new Vector(200, 600),\r\n laitelaThirdCenter: new Vector(150, 650),\r\n\r\n pelleUnlock: new Vector(450, 580),\r\n pelleAchievementRequirement: pelleStarPosition(0, 0),\r\n pelleVacuum: pelleStarPosition(0, 150),\r\n pelleDecay: pelleStarPosition(1, 150),\r\n pelleChaos: pelleStarPosition(2, 150),\r\n pelleRecursion: pelleStarPosition(3, 150),\r\n pelleParadox: pelleStarPosition(4, 150),\r\n\r\n pelleGalaxyGen: pelleStarPosition(0, 0),\r\n});\r\n\r\n// Reduces boilerplate for rift line objects, but needs quite a few parameters to do so since there are three separate\r\n// elements that render for filling - the initial fill, the drain, and then the overfill\r\n// eslint-disable-next-line max-params\r\nfunction pelleRiftFill(name, index, textAngle, fillType) {\r\n let visibleCheck, progressFn, legendFn, percentFn, incompleteClass, nodeFill, connectorFill;\r\n switch (fillType) {\r\n case FILL_STATE.FILL:\r\n // The curve starts inside of the node, so we give the completion variable a bit of a headstart so that we can\r\n // immediately see some filling even when it's pretty much still empty\r\n visibleCheck = () => riftFillStage(name) === FILL_STATE.FILL;\r\n progressFn = () => Math.clamp(0.1 + PelleRifts[name.toLowerCase()].realPercentage / 0.9, 1e-6, 1);\r\n legendFn = () => false;\r\n percentFn = () => PelleRifts[name.toLowerCase()].realPercentage;\r\n incompleteClass = \"c-celestial-nav__test-incomplete\";\r\n nodeFill = \"crimson\";\r\n connectorFill = \"crimson\";\r\n break;\r\n case FILL_STATE.DRAIN:\r\n // The logarithmic curve code sometimes throws errors if you attempt to draw with complete === 0, so we cheat and\r\n // make it a really tiny number that should format to 0 in most notations. We also do a pow in order to make it\r\n // visually smoother, because the generator spiral blocks the bottom bit and makes it look static near the end of\r\n // the drain\r\n visibleCheck = () => riftFillStage(name) >= FILL_STATE.DRAIN;\r\n progressFn = () => Math.clamp(Math.sqrt(PelleRifts[name.toLowerCase()].reducedTo), 1e-6, 1);\r\n legendFn = () => riftFillStage(name) === FILL_STATE.DRAIN && PelleRifts[name.toLowerCase()].reducedTo < 1;\r\n percentFn = () => PelleRifts[name.toLowerCase()].reducedTo;\r\n incompleteClass = \"c-celestial-nav__drained-rift\";\r\n nodeFill = \"crimson\";\r\n connectorFill = \"#550919\";\r\n break;\r\n case FILL_STATE.OVERFILL:\r\n visibleCheck = () => riftFillStage(name) === FILL_STATE.OVERFILL;\r\n progressFn = () => Math.clamp(PelleRifts[name.toLowerCase()].percentage - 1, 1e-6, 1);\r\n percentFn = () => PelleRifts[name.toLowerCase()].percentage;\r\n legendFn = () => true;\r\n incompleteClass = undefined;\r\n nodeFill = \"#ff7700\";\r\n connectorFill = \"#ff9900\";\r\n break;\r\n }\r\n\r\n return {\r\n visible: () => Pelle.isDoomed && visibleCheck(),\r\n complete: () => progressFn(),\r\n node: {\r\n clickAction: () => Tab.celestials.pelle.show(true),\r\n incompleteClass,\r\n position: Positions[`pelle${name}`],\r\n fill: nodeFill,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n forceLegend: () => legendFn(),\r\n legend: {\r\n text: () => [\r\n `${formatPercents(percentFn(), 1)} ${wordShift.wordCycle(PelleRifts[name.toLowerCase()].name)}`\r\n ],\r\n angle: textAngle,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: pelleStarConnector(index, connectorFill, fillType === FILL_STATE.OVERFILL),\r\n };\r\n}\r\n\r\n// Slightly reduces boilerplate; there are a total of 15 rift elements which are largely duplicated code\r\nconst fillStates = [\"fill\", \"drain\", \"overfill\"];\r\nconst riftNames = [\"Vacuum\", \"Decay\", \"Chaos\", \"Recursion\", \"Paradox\"];\r\nconst angles = [225, 315, 45, 135, 135];\r\nconst riftFillElements = {};\r\nfor (const fill of fillStates) {\r\n for (let index = 0; index < riftNames.length; index++) {\r\n const name = riftNames[index];\r\n riftFillElements[`pelle-${name}-${fill}`] = pelleRiftFill(name, index, angles[index],\r\n FILL_STATE[fill.toUpperCase()]);\r\n }\r\n}\r\n\r\nexport const celestialNavigation = {\r\n \"teresa-base\": {\r\n visible: () => true,\r\n complete: () => 1,\r\n node: {\r\n clickAction: () => Tab.celestials.teresa.show(true),\r\n completeClass: \"c-celestial-nav__test-complete\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n position: Positions.teresa,\r\n ring: {\r\n rMajor: 78,\r\n rMinor: 64,\r\n },\r\n legend: {\r\n text: \"Teresa\",\r\n angle: 135,\r\n diagonal: 32,\r\n horizontal: 16,\r\n },\r\n },\r\n },\r\n \"teresa-reality-unlock\": {\r\n visible: () => true,\r\n complete: () => (TeresaUnlocks.run.canBeApplied\r\n ? 1 : Decimal.pLog10(Teresa.pouredAmount) / Math.log10(TeresaUnlocks.run.price)),\r\n node: {\r\n completeClass: \"c-celestial-nav__test-complete\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n position: Positions.teresa,\r\n ring: {\r\n rMajor: 32,\r\n rMinor: 22,\r\n },\r\n legend: {\r\n hideWhenCompleted: true,\r\n text: () => {\r\n const rm = Teresa.pouredAmount;\r\n const cost = TeresaUnlocks.run.price;\r\n return `Pour ${format(rm, 2)} / ${format(cost, 2)} RM`;\r\n },\r\n angle: 135,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: (function() {\r\n const pathStart = -Math.PI;\r\n const pathEnd = Math.PI;\r\n const path = LogarithmicSpiral.fromPolarEndpoints(Positions.teresa, -Math.PI, 69, Math.PI, 26);\r\n const pathPadStart = path.angleFromRadius(64 - 3) - pathStart;\r\n const pathPadEnd = pathEnd - path.angleFromRadius(34);\r\n return {\r\n pathStart,\r\n pathEnd,\r\n path,\r\n pathPadStart,\r\n pathPadEnd,\r\n };\r\n }()),\r\n },\r\n \"teresa-reality\": {\r\n visible: () => true,\r\n complete: () => (Teresa.runCompleted ? 1 : 0),\r\n node: {\r\n clickAction: () => Tab.celestials.teresa.show(true),\r\n completeClass: \"c-celestial-nav__test-complete\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n symbol: \"Ϟ\",\r\n position: Positions.teresa,\r\n ring: {\r\n rMajor: 16,\r\n },\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: \"Teresa's Reality\",\r\n angle: -135,\r\n diagonal: 96,\r\n horizontal: 16,\r\n },\r\n }\r\n },\r\n \"teresa-pp-shop\": {\r\n visible: () => true,\r\n complete: () => (TeresaUnlocks.shop.canBeApplied\r\n ? 1 : Decimal.pLog10(Teresa.pouredAmount) / Math.log10(TeresaUnlocks.shop.price)),\r\n node: {\r\n clickAction: () => Tab.celestials.teresa.show(true),\r\n completeClass: \"c-celestial-nav__test-complete\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n position: Positions.teresaPerkPointShop,\r\n ring: {\r\n rMajor: 16,\r\n rMinor: 0,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Teresa's Perk Point Shop\";\r\n const rm = Teresa.pouredAmount;\r\n const cost = TeresaUnlocks.shop.price;\r\n return [\r\n \"Teresa's Perk Point Shop\",\r\n `Pour ${format(rm, 2)} / ${format(cost, 2)} Reality Machines`\r\n ];\r\n },\r\n angle: -35,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: LinearPath.connectCircles(Positions.teresa, 78 - 1, Positions.teresaPerkPointShop, 16 - 1),\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"effarig-shop\": {\r\n visible: () => true,\r\n complete: () => (TeresaUnlocks.effarig.canBeApplied\r\n ? 1 : Decimal.pLog10(Teresa.pouredAmount) / Math.log10(TeresaUnlocks.effarig.price)),\r\n node: {\r\n clickAction: () => Tab.celestials.effarig.show(true),\r\n completeClass: \"c-celestial-nav__effarig\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n position: Positions.effarigShop,\r\n ring: {\r\n rMajor: 24,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Effarig's Shop\";\r\n const rm = Teresa.pouredAmount;\r\n const cost = TeresaUnlocks.effarig.price;\r\n return [\r\n \"Effarig\",\r\n `Pour ${format(rm, 2)} / ${format(cost, 2)} Reality Machines`\r\n ];\r\n },\r\n angle: -135,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: LinearPath.connectCircles(Positions.teresa, 78 - 1, Positions.effarigShop, 24 - 1),\r\n fill: \"url(#gradTeresaEffarig)\",\r\n }\r\n },\r\n \"effarig-reality-unlock\": {\r\n visible: () => TeresaUnlocks.effarig.canBeApplied,\r\n // If the upgrade to unlock the reality isn't yet bought, clamp the progress at 99.9%,\r\n // even if the player has enough relic shards to buy it.\r\n complete: () => (EffarigUnlock.run.isUnlocked\r\n ? 1 : Math.clampMax(0.999, Decimal.pLog10(Currency.relicShards.value) /\r\n Math.log10(EffarigUnlock.run.cost))),\r\n node: {\r\n clickAction: () => Tab.celestials.effarig.show(true),\r\n completeClass: \"c-celestial-nav__effarig\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n position: Positions.effarigRealityUnlock,\r\n ring: {\r\n rMajor: 16,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Unlock Effarig's Reality\";\r\n const rs = Currency.relicShards.value;\r\n const cost = EffarigUnlock.run.cost;\r\n return [\r\n \"Unlock Effarig's Reality\",\r\n `Reach ${format(rs, 2)} / ${format(cost, 2)} Relic Shards`\r\n ];\r\n },\r\n angle: 75,\r\n diagonal: 40,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: LinearPath.connectCircles(Positions.effarigShop, 24 - 1, Positions.effarigRealityUnlock, 16 - 1),\r\n fill: \"#d13737\",\r\n }\r\n },\r\n \"effarig-infinity\": {\r\n visible: () => EffarigUnlock.run.isUnlocked,\r\n complete: () => {\r\n if (EffarigUnlock.infinity.isUnlocked) return 1;\r\n if (!Effarig.isRunning) return 0;\r\n\r\n return Currency.antimatter.value.pLog10() / Decimal.NUMBER_MAX_VALUE.log10();\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.effarig.show(true),\r\n completeClass: \"c-celestial-nav__effarig\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n position: Positions.effarigNode,\r\n ring: {\r\n rMajor: 60,\r\n rMinor: 52,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Effarig's Infinity\";\r\n if (complete === 0) return \"Unlock Effarig's Reality\";\r\n const am = Effarig.isRunning ? Currency.antimatter.value : 0;\r\n return [\r\n \"Effarig's Infinity\",\r\n `Reach ${format(am, 2)} / ${format(Number.MAX_VALUE, 2)}`,\r\n \"Antimatter inside Effarig's Reality.\"\r\n ];\r\n },\r\n angle: 0,\r\n diagonal: 100,\r\n horizontal: 16,\r\n },\r\n bgDrawOrder: CELESTIAL_NAV_DRAW_ORDER.NODE_BG + 750,\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: LinearPath.connectCircles(Positions.effarigRealityUnlock, 16 - 1, Positions.effarigNode, 60 - 1),\r\n fill: \"#d13737\",\r\n }\r\n },\r\n \"effarig-eternity\": {\r\n visible: () => EffarigUnlock.infinity.isUnlocked,\r\n complete: () => {\r\n if (EffarigUnlock.eternity.isUnlocked) return 1;\r\n if (!Effarig.isRunning) return 0;\r\n\r\n return Currency.infinityPoints.value.pLog10() / Decimal.NUMBER_MAX_VALUE.log10();\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.effarig.show(true),\r\n completeClass: \"c-celestial-nav__effarig\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#7131ec\",\r\n position: Positions.effarigNode,\r\n ring: {\r\n rMajor: 40,\r\n rMinor: 30,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Effarig's Eternity\";\r\n const ip = Effarig.isRunning ? Currency.infinityPoints.value : 0;\r\n return [\r\n \"Effarig's Eternity\",\r\n `Reach ${format(ip, 2)} / ${format(Number.MAX_VALUE, 2)}`,\r\n \"Infinity Points inside Effarig's Reality.\"\r\n ];\r\n },\r\n angle: -45,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: (function() {\r\n const pathStart = -Math.PI;\r\n const pathEnd = 0;\r\n const path = LogarithmicSpiral.fromPolarEndpoints(new Vector(560, 25), pathStart, 66, pathEnd, 26);\r\n const pathPadStart = 0;\r\n const pathPadEnd = pathEnd - path.angleFromRadius(30);\r\n return {\r\n pathStart,\r\n pathEnd,\r\n path,\r\n pathPadStart,\r\n pathPadEnd,\r\n fill: \"#d13737\"\r\n };\r\n }())\r\n },\r\n \"effarig-reality\": {\r\n visible: () => EffarigUnlock.eternity.isUnlocked,\r\n complete: () => {\r\n if (EffarigUnlock.reality.isUnlocked) return 1;\r\n if (!Effarig.isRunning) return 0;\r\n\r\n return Currency.eternityPoints.value.pLog10() / 4000;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.effarig.show(true),\r\n completeClass: \"c-celestial-nav__effarig\",\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#A101ec\",\r\n position: new Vector(550, 25),\r\n ring: {\r\n rMajor: 20,\r\n rMinor: 0,\r\n },\r\n symbol: \"Ϙ\",\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Effarig's Reality\";\r\n const ep = Effarig.isRunning ? Currency.eternityPoints.value : 0;\r\n const goal = DC.E4000;\r\n return [\r\n \"Effarig's Reality\",\r\n `Reach ${format(ep, 2)} / ${format(goal, 2)}`,\r\n \"Eternity Points inside Effarig's Reality.\"\r\n ];\r\n },\r\n angle: -120,\r\n diagonal: 82,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: (function() {\r\n const pathStart = 0;\r\n const pathEnd = Math.PI;\r\n const path = LogarithmicSpiral.fromPolarEndpoints(new Vector(558, 25), pathStart, 26, pathEnd, 24);\r\n const pathPadStart = 0;\r\n const pathPadEnd = 0;\r\n return {\r\n pathStart,\r\n pathEnd,\r\n path,\r\n pathPadStart,\r\n pathPadEnd,\r\n fill: \"#d13737\"\r\n };\r\n }())\r\n },\r\n \"enslaved\": {\r\n visible: () => EffarigUnlock.eternity.isUnlocked,\r\n complete: () => (EffarigUnlock.eternity.isUnlocked ? 1 : 0),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.enslaved.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffa337\",\r\n position: Positions.enslavedReality,\r\n ring: {\r\n rMajor: 80,\r\n rMinor: 70,\r\n gapCenterDeg: 15,\r\n gapDeg: 200,\r\n },\r\n alwaysShowLegend: false,\r\n legend: {\r\n text: \"Nameless\",\r\n angle: -90,\r\n diagonal: 20,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n drawOrder: CELESTIAL_NAV_DRAW_ORDER.NODE_BG + 500,\r\n path: LinearPath.connectCircles(Positions.effarigNode, 40 - 1, Positions.enslavedReality, 80 - 1),\r\n fill: \"url(#gradEffarigEnslaved)\",\r\n }\r\n },\r\n \"enslaved-unlock-glyph-level\": {\r\n visible: () => EffarigUnlock.eternity.isUnlocked,\r\n complete: () => player.records.bestReality.glyphLevel / 5000,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.enslaved.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffa337\",\r\n position: Positions.enslavedGlyphLevel,\r\n ring: {\r\n rMajor: 24,\r\n rMinor: 16,\r\n gapCenterDeg: 40,\r\n gapDeg: 60,\r\n gapAngleDeg: 0,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Glyph level chain has been broken\";\r\n const goal = 5000;\r\n return [\r\n \"Break a chain\",\r\n `Reach Glyph level ${formatInt(Math.min(player.records.bestReality.glyphLevel, goal))}/${formatInt(goal)}`\r\n ];\r\n },\r\n angle: -45,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(\r\n new Vector(650 - 74 * Math.sqrt(0.75), 250 - 74 * 0.5),\r\n Positions.enslavedGlyphLevel)\r\n .trimEnd(23),\r\n fill: \"#ffa337\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"enslaved-unlock-glyph-rarity\": {\r\n visible: () => EffarigUnlock.eternity.isUnlocked,\r\n complete: () => {\r\n const bestRarity = strengthToRarity(player.records.bestReality.glyphStrength);\r\n return bestRarity / 100;\r\n },\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.enslaved.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffa337\",\r\n position: Positions.enslavedGlyphRarity,\r\n ring: {\r\n rMajor: 24,\r\n rMinor: 16,\r\n gapCenterDeg: 220,\r\n gapDeg: 60,\r\n gapAngleDeg: 0,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"Glyph rarity chain has been broken\";\r\n const goal = 100;\r\n return [\r\n \"Break a chain\",\r\n `Reach Glyph rarity ${formatPercents(complete * goal / 100, 1)}/${formatPercents(goal / 100, 1)}`\r\n ];\r\n },\r\n angle: 45,\r\n diagonal: 32,\r\n horizontal: 32,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.enslavedGlyphRarity, Positions.enslavedGlyphLevel).trimStart(23).trimEnd(23),\r\n fill: \"#ffa337\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"enslaved-reality\": {\r\n visible: () => EffarigUnlock.eternity.isUnlocked,\r\n complete: () => {\r\n if (Enslaved.isCompleted) return 1;\r\n if (!Enslaved.isRunning) return 0;\r\n\r\n return Currency.eternityPoints.value.pLog10() / 4000;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.enslaved.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffa337\",\r\n position: Positions.enslavedReality,\r\n ring: {\r\n rMajor: 80,\r\n rMinor: 70,\r\n gapCenterDeg: 195,\r\n gapDeg: 200,\r\n },\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return \"The Nameless Ones' Reality\";\r\n const ep = Enslaved.isRunning ? Currency.eternityPoints.value : 0;\r\n const goal = DC.E4000;\r\n return [\r\n \"The Nameless Ones' Reality\",\r\n `Reach ${format(ep, 2)} / ${format(goal, 2)}`,\r\n \"Eternity Points inside The Nameless Ones' Reality.\"\r\n ];\r\n },\r\n angle: 45,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.enslavedGlyphRarity, new Vector(650 + 74 * Math.sqrt(0.75), 250 + 74 * 0.5))\r\n .trimStart(23),\r\n fill: \"#ffa337\",\r\n }\r\n },\r\n \"v-unlock-achievement\": {\r\n visible: () => EffarigUnlock.reality.isUnlocked,\r\n complete: () => {\r\n if (Achievement(151).isUnlocked) return 1;\r\n if (!player.requirementChecks.infinity.noAD8) return 0;\r\n\r\n return player.galaxies / 800;\r\n },\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n symbol: \"⌬\",\r\n symbolOffset: \"2\",\r\n fill: \"#ffe066\",\r\n position: Positions.vUnlockAchievement,\r\n ring: {\r\n rMajor: 20,\r\n },\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: complete => {\r\n const goal = 800;\r\n if (complete >= 1) return \"V's Reality\";\r\n const galaxies = player.requirementChecks.infinity.noAD8 ? player.galaxies : 0;\r\n return [\r\n \"V's unlock Achievement\",\r\n `Reach ${formatInt(galaxies)} / ${formatInt(goal)} Antimatter Galaxies without buying`,\r\n \"8th Antimatter Dimensions in your current Infinity\"\r\n ];\r\n },\r\n angle: 135,\r\n diagonal: 60,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: LinearPath.connectCircles(Positions.enslavedReality, 80 - 1, Positions.vUnlockAchievement, 16 - 1),\r\n fill: \"url(#gradEnslavedV)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-unlock-1\": {\r\n visible: () => Achievement(151).isUnlocked || VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => vUnlockProgress(1),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement1,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => vUnlockLegendLabel(complete, 1),\r\n angle: -135,\r\n diagonal: 50,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vUnlockAchievement, Positions.vAchievement1),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-unlock-2\": {\r\n visible: () => Achievement(151).isUnlocked || VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => vUnlockProgress(2),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement2,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => vUnlockLegendLabel(complete, 2),\r\n angle: -45,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vUnlockAchievement, Positions.vAchievement2),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-unlock-3\": {\r\n visible: () => Achievement(151).isUnlocked || VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => vUnlockProgress(3),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement3,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => vUnlockLegendLabel(complete, 3),\r\n angle: 45,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vUnlockAchievement, Positions.vAchievement3),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-unlock-4\": {\r\n visible: () => Achievement(151).isUnlocked || VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => vUnlockProgress(4),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement4,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => vUnlockLegendLabel(complete, 4),\r\n angle: 135,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vUnlockAchievement, Positions.vAchievement4),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-unlock-5\": {\r\n visible: () => Achievement(151).isUnlocked || VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => vUnlockProgress(5),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement5,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => vUnlockLegendLabel(complete, 5),\r\n angle: -135,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vUnlockAchievement, Positions.vAchievement5),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-unlock-6\": {\r\n visible: () => Achievement(151).isUnlocked || VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => vUnlockProgress(6),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement0,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => vUnlockLegendLabel(complete, 6),\r\n angle: -135,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vUnlockAchievement, Positions.vAchievement0),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n\r\n \"v-achievement-0\": {\r\n visible: () => VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => VRunUnlocks.all[0].completions / 6,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement0,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const name = VRunUnlocks.all[0].config.name;\r\n if (complete >= 1) return `V-Achievement \"${name}\"`;\r\n const completions = VRunUnlocks.all[0].completions;\r\n return [\r\n \"V-Achievement\",\r\n `Reach ${formatInt(completions)} / ${formatInt(6)} completions in ${name}.`\r\n ];\r\n },\r\n angle: -135,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vAchievement5, Positions.vAchievement0),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-achievement-1\": {\r\n visible: () => VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => VRunUnlocks.all[1].completions / 6,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement1,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const name = VRunUnlocks.all[1].config.name;\r\n if (complete >= 1) return `V-Achievement \"${name}\"`;\r\n const completions = VRunUnlocks.all[1].completions;\r\n return [\r\n \"V-Achievement\",\r\n `Reach ${formatInt(completions)} / ${formatInt(6)} completions in ${name}.`\r\n ];\r\n },\r\n angle: 20,\r\n diagonal: 16,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vAchievement0, Positions.vAchievement1),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-achievement-2\": {\r\n visible: () => VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => VRunUnlocks.all[2].completions / 6,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement2,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const name = VRunUnlocks.all[2].config.name;\r\n if (complete >= 1) return `V-Achievement \"${name}\"`;\r\n const completions = VRunUnlocks.all[2].completions;\r\n return [\r\n \"V-Achievement\",\r\n `Reach ${formatInt(completions)} / ${formatInt(6)} completions in ${name}.`\r\n ];\r\n },\r\n angle: 315,\r\n diagonal: 25,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vAchievement1, Positions.vAchievement2),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-achievement-3\": {\r\n visible: () => VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => VRunUnlocks.all[3].completions / 6,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement3,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const name = VRunUnlocks.all[3].config.name;\r\n if (complete >= 1) return `V-Achievement \"${name}\"`;\r\n const completions = VRunUnlocks.all[3].completions;\r\n return [\r\n \"V-Achievement\",\r\n `Reach ${formatInt(completions)} / ${formatInt(6)} completions in ${name}.`\r\n ];\r\n },\r\n angle: 135,\r\n diagonal: 25,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vAchievement2, Positions.vAchievement3),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-achievement-4\": {\r\n visible: () => VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => VRunUnlocks.all[4].completions / 6,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement4,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const name = VRunUnlocks.all[4].config.name;\r\n if (complete >= 1) return `V-Achievement \"${name}\"`;\r\n const completions = VRunUnlocks.all[4].completions;\r\n return [\r\n \"V-Achievement\",\r\n `Reach ${formatInt(completions)} / ${formatInt(6)} completions in ${name}.`\r\n ];\r\n },\r\n angle: 60,\r\n diagonal: 25,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vAchievement3, Positions.vAchievement4),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-achievement-5\": {\r\n visible: () => VUnlocks.vAchievementUnlock.isUnlocked,\r\n complete: () => VRunUnlocks.all[5].completions / 6,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.v.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#ffe066\",\r\n position: Positions.vAchievement5,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const name = VRunUnlocks.all[5].config.name;\r\n if (complete >= 1) return `V-Achievement \"${name}\"`;\r\n const completions = VRunUnlocks.all[5].completions;\r\n return [\r\n \"V-Achievement\",\r\n `Reach ${formatInt(completions)} / ${formatInt(6)} completions in ${name}.`\r\n ];\r\n },\r\n angle: 260,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.vAchievement4, Positions.vAchievement5),\r\n fill: \"#ffe066\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n\r\n \"ra\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n node: {\r\n clickAction: () => Tab.celestials.ra.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n symbol: \"\\uf185\",\r\n symbolOffset: \"2\",\r\n fill: \"#9063de\",\r\n position: Positions.raReality,\r\n ring: {\r\n rMajor: 24,\r\n },\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: \"Ra's Reality\",\r\n angle: 230,\r\n diagonal: 85,\r\n horizontal: 16,\r\n },\r\n }\r\n },\r\n \"teresa-pet\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.ra.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n isStacked: true,\r\n position: Positions.raPetTeresa,\r\n ring: {\r\n rMajor: 12,\r\n },\r\n legend: {\r\n text: () => {\r\n const level = Ra.pets.teresa.level;\r\n if (level === 25) return `Ra's Teresa Memories have all been returned`;\r\n return [\r\n \"Ra's Teresa Memory level\",\r\n `${formatInt(level)} / ${formatInt(25)}`\r\n ];\r\n },\r\n angle: 142,\r\n diagonal: 85,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.95,\r\n path: new LinearPath(Positions.raReality, Positions.raPetTeresa),\r\n fill: \"#9063de\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"teresa-pet-to-teresa\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => Ra.pets.teresa.level / 25,\r\n drawOrder: -1,\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.70,\r\n path: new LinearPath(Positions.raPetTeresa, Positions.teresa),\r\n fill: \"url(#gradRaTeresa)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"effarig-pet\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => Ra.pets.teresa.level / 8,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.ra.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n isStacked: true,\r\n position: Positions.raPetEffarig,\r\n ring: {\r\n rMajor: 12,\r\n },\r\n legend: {\r\n text: complete => {\r\n const unlocked = Ra.pets.teresa.level;\r\n const level = Ra.pets.effarig.level;\r\n if (complete < 1) return `Ra's Teresa Memory level ${unlocked} / ${formatInt(8)}`;\r\n if (level === 25) return `Ra's Effarig Memories have all been returned`;\r\n return [\r\n \"Ra's Effarig Memory level\",\r\n `${formatInt(level)} / ${formatInt(25)}`\r\n ];\r\n },\r\n angle: 142,\r\n diagonal: 85,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.95,\r\n path: new LinearPath(Positions.raReality, Positions.raPetEffarig),\r\n fill: \"#9063de\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"effarig-pet-to-effarig\": {\r\n visible: () => Ra.unlocks.effarigUnlock.isUnlocked,\r\n complete: () => Ra.pets.effarig.level / 25,\r\n drawOrder: -1,\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.60,\r\n path: new LinearPath(Positions.raPetEffarig, Positions.effarigNode),\r\n fill: \"url(#gradRaEffarig)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"enslaved-pet\": {\r\n visible: () => Ra.unlocks.effarigUnlock.isUnlocked,\r\n complete: () => Ra.pets.effarig.level / 8,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.ra.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n isStacked: true,\r\n position: Positions.raPetEnslaved,\r\n ring: {\r\n rMajor: 12,\r\n },\r\n legend: {\r\n text: complete => {\r\n const unlocked = Ra.pets.effarig.level;\r\n const level = Ra.pets.enslaved.level;\r\n if (complete < 1) return `Ra's Effarig Memory level ${unlocked} / ${formatInt(8)}`;\r\n if (level === 25) return `Ra's Nameless Memories have all been returned`;\r\n return [\r\n \"Ra's Nameless Memory level\",\r\n `${formatInt(level)} / ${formatInt(25)}`\r\n ];\r\n },\r\n angle: 142,\r\n diagonal: 85,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.95,\r\n path: new LinearPath(Positions.raReality, Positions.raPetEnslaved),\r\n fill: \"#9063de\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"enslaved-pet-to-enslaved\": {\r\n visible: () => Ra.unlocks.enslavedUnlock.isUnlocked,\r\n complete: () => Ra.pets.enslaved.level / 25,\r\n drawOrder: -1,\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.55,\r\n path: new LinearPath(Positions.raPetEnslaved, Positions.enslavedReality),\r\n fill: \"url(#gradRaEnslaved)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-pet\": {\r\n visible: () => Ra.unlocks.enslavedUnlock.isUnlocked,\r\n complete: () => Ra.pets.enslaved.level / 8,\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.ra.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n isStacked: true,\r\n position: Positions.raPetV,\r\n ring: {\r\n rMajor: 12,\r\n },\r\n legend: {\r\n text: complete => {\r\n const unlocked = Ra.pets.enslaved.level;\r\n const level = Ra.pets.v.level;\r\n if (complete < 1) return `Ra's Nameless Memory level ${unlocked} / ${formatInt(8)}`;\r\n if (level === 25) return `Ra's V Memories have all been returned`;\r\n return [\r\n \"Ra's V Memory level\",\r\n `${formatInt(level)} / ${formatInt(25)}`\r\n ];\r\n },\r\n angle: 142,\r\n diagonal: 85,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.95,\r\n path: new LinearPath(Positions.raReality, Positions.raPetV),\r\n fill: \"#9063de\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"v-pet-to-v\": {\r\n visible: () => Ra.unlocks.vUnlock.isUnlocked,\r\n complete: () => Ra.pets.v.level / 25,\r\n drawOrder: -1,\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 0.42,\r\n path: new LinearPath(Positions.raPetV, Positions.vUnlockAchievement),\r\n fill: \"url(#gradRaV)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"ra-ring-1\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n node: {\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n position: Positions.raReality,\r\n ring: {\r\n rMajor: 90,\r\n rMinor: 80,\r\n gapCenterDeg: 74,\r\n gapDeg: 268,\r\n },\r\n }\r\n },\r\n \"ra-ring-2\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n node: {\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n position: Positions.raReality,\r\n ring: {\r\n rMajor: 90,\r\n rMinor: 80,\r\n gapCenterDeg: 161,\r\n gapDeg: 318,\r\n },\r\n }\r\n },\r\n \"ra-ring-3\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n node: {\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n position: Positions.raReality,\r\n ring: {\r\n rMajor: 90,\r\n rMinor: 80,\r\n gapCenterDeg: 231,\r\n gapDeg: 301,\r\n },\r\n }\r\n },\r\n \"ra-ring-4\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n node: {\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n position: Positions.raReality,\r\n ring: {\r\n rMajor: 90,\r\n rMinor: 80,\r\n gapCenterDeg: 293,\r\n gapDeg: 334,\r\n },\r\n }\r\n },\r\n \"ra-ring-5\": {\r\n visible: () => VUnlocks.raUnlock.isUnlocked,\r\n complete: () => (VUnlocks.raUnlock.isUnlocked ? 1 : 0),\r\n node: {\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"#9063de\",\r\n position: Positions.raReality,\r\n ring: {\r\n rMajor: 90,\r\n rMinor: 80,\r\n gapCenterDeg: -14,\r\n gapDeg: 316,\r\n },\r\n }\r\n },\r\n \"laitela-unlock\": {\r\n visible: () => Ra.unlocks.vUnlock.isUnlocked,\r\n complete: () => {\r\n if (DarkMatterDimension(1).unlockUpgrade.canBeBought || Laitela.isUnlocked) return 1;\r\n if (MachineHandler.isIMUnlocked) {\r\n if (player.requirementChecks.reality.maxID1.neq(0)) return 0.5;\r\n return 0.5 + 0.5 * Math.clampMax(0.999, player.antimatter.exponent / 1.5e12);\r\n }\r\n return Math.clampMax(0.5, Currency.realityMachines.value.pLog10() / MachineHandler.baseRMCap.exponent);\r\n },\r\n drawOrder: -1,\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n symbol: \"ᛝ\",\r\n symbolScale: 1.6,\r\n symbolOffset: \"0.6\",\r\n fill: \"white\",\r\n position: Positions.laitelaFirstCenter,\r\n ring: {\r\n rMajor: 15,\r\n },\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: complete => {\r\n const realityName = \"Lai'tela's Reality\";\r\n if (complete >= 1) return [realityName];\r\n\r\n if (!MachineHandler.isIMUnlocked) {\r\n const realityMachines = Currency.realityMachines.value;\r\n const realityMachineCap = MachineHandler.baseRMCap;\r\n return [\r\n realityName,\r\n \"The limits of Reality Machines bind you\",\r\n `${format(realityMachines)} / ${format(realityMachineCap)}`\r\n ];\r\n }\r\n\r\n const hasIDs = player.requirementChecks.reality.maxID1.neq(0);\r\n if (hasIDs) return [\r\n realityName,\r\n \"The Power of Infinity Dimensions\",\r\n \"blocks your path.\"\r\n ];\r\n\r\n const antimatter = Currency.antimatter.value;\r\n const amGoal = DC.E1_5E12;\r\n return [\r\n realityName,\r\n `${format(antimatter)} / ${format(amGoal)}`\r\n ];\r\n },\r\n angle: 260,\r\n diagonal: 15,\r\n horizontal: 8,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.05,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.raReality, Positions.laitelaFirstCenter),\r\n fill: \"url(#gradRaLaitela)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"laitela-2nd-dim\": {\r\n visible: () => Laitela.isUnlocked,\r\n complete: () => {\r\n const upgrade = DarkMatterDimension(2).unlockUpgrade;\r\n if (upgrade.canBeBought || upgrade.isBought) return 1;\r\n if (upgrade.isAvailableForPurchase) return upgrade.currency.value / upgrade.cost;\r\n return Laitela.difficultyTier < 1\r\n ? 0\r\n : 30 / player.celestials.laitela.fastestCompletion;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"white\",\r\n position: Positions.laitelaFirstLeft,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const dmdText = \"2nd Dark Matter Dimension\";\r\n const dim = DarkMatterDimension(2);\r\n if (dim.isUnlocked) return [dmdText];\r\n\r\n const goal = dim.adjustedStartingCost;\r\n if (complete >= 1) return [\r\n dmdText,\r\n `Dark Matter ${format(Currency.darkMatter.max.min(goal), dim.isUnlocked ? 0 : 2)} / ${format(goal)}`\r\n ];\r\n\r\n const upgrade = dim.unlockUpgrade;\r\n if (upgrade.isAvailableForPurchase) return [\r\n dmdText,\r\n `Imaginary Machines\r\n ${format(Math.min(upgrade.currency.value, upgrade.cost), upgrade.canBeBought ? 1 : 2)}\r\n / ${format(upgrade.cost, 1)}`\r\n ];\r\n\r\n if (player.celestials.laitela.fastestCompletion > 30 && Laitela.difficultyTier < 0) return [\r\n dmdText,\r\n `Beat Lai'tela's Reality in less that ${format(30)} seconds`\r\n ];\r\n return [\r\n dmdText,\r\n `Beat Lai'tela's Reality`\r\n ];\r\n },\r\n angle: 135,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.17,\r\n pathEnd: 0.89,\r\n path: new LinearPath(Positions.laitelaFirstCenter, Positions.laitelaFirstLeft),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"laitela-singularity\": {\r\n visible: () => Laitela.isUnlocked,\r\n complete: () => (Currency.singularities.gte(1)\r\n ? 1\r\n : Math.clampMax(0.999, Currency.darkEnergy.value / Singularity.cap)),\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"white\",\r\n position: Positions.laitelaFirstRight,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return [\"Obtain a Singularity\"];\r\n const darkEnergy = Currency.darkEnergy.value;\r\n const singularityGoal = Singularity.cap;\r\n return [\r\n \"Condense your Dark Energy\",\r\n \"Into a Singularity\",\r\n `${format(darkEnergy)} / ${format(singularityGoal)}`\r\n ];\r\n },\r\n angle: 45,\r\n diagonal: 65,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.17,\r\n pathEnd: 0.89,\r\n path: new LinearPath(Positions.laitelaFirstCenter, Positions.laitelaFirstRight),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n },\r\n \"laitela-3rd-dim\": {\r\n visible: () => DarkMatterDimension(2).isUnlocked && Currency.singularities.gte(1),\r\n complete: () => {\r\n const upgrade = DarkMatterDimension(3).unlockUpgrade;\r\n if (upgrade.canBeBought || upgrade.isBought) return 1;\r\n if (upgrade.isAvailableForPurchase) return upgrade.currency.value / upgrade.cost;\r\n if (!player.auto.singularity.isActive) return 0.5;\r\n return Math.clampMax(0.999, Singularity.singularitiesGained / 20);\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"white\",\r\n position: Positions.laitelaSecondCenter,\r\n ring: {\r\n rMajor: 15,\r\n },\r\n legend: {\r\n text: complete => {\r\n const dmdText = \"3rd Dark Matter Dimension\";\r\n const dim = DarkMatterDimension(3);\r\n if (dim.isUnlocked) return [dmdText];\r\n\r\n const goal = dim.adjustedStartingCost;\r\n if (complete >= 1) return [\r\n dmdText,\r\n `Dark Matter ${format(Currency.darkMatter.max.min(goal), dim.isUnlocked ? 0 : 2)} / ${format(goal)}`\r\n ];\r\n\r\n const upgrade = dim.unlockUpgrade;\r\n if (upgrade.isAvailableForPurchase) return [\r\n dmdText,\r\n `Imaginary Machines\r\n ${format(Math.min(upgrade.currency.value, upgrade.cost), upgrade.canBeBought ? 0 : 2)}\r\n / ${format(upgrade.cost)}`\r\n ];\r\n\r\n if (!player.auto.singularity.isActive) return [\r\n dmdText,\r\n \"Unlock Automatic Singularities\",\r\n `${format(Currency.singularities.value)} / ${format(SingularityMilestone.autoCondense.start)}`\r\n ];\r\n\r\n return [\r\n dmdText,\r\n `Automatically Condense ${format(20)} Singularities at once`,\r\n `${format(Math.clampMax(Singularity.singularitiesGained, 20))} / ${format(20)}`\r\n ];\r\n },\r\n angle: 15,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: [\r\n {\r\n pathStart: 0.10,\r\n pathEnd: 0.89,\r\n path: new LinearPath(Positions.laitelaFirstLeft, Positions.laitelaSecondCenter),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }, {\r\n pathStart: 0.10,\r\n pathEnd: 0.89,\r\n path: new LinearPath(Positions.laitelaFirstRight, Positions.laitelaSecondCenter),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n\r\n },\r\n ],\r\n },\r\n \"laitela-4th-dim\": {\r\n visible: () => DarkMatterDimension(3).isUnlocked,\r\n complete: () => {\r\n const upgrade = DarkMatterDimension(4).unlockUpgrade;\r\n if (upgrade.canBeBought || upgrade.isBought) return 1;\r\n if (upgrade.isAvailableForPurchase) return upgrade.currency.value / upgrade.cost;\r\n return (Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies) / 80000;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"white\",\r\n position: Positions.laitelaSecondLeft,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n const dmdText = \"4th Dark Matter Dimension\";\r\n const dim = DarkMatterDimension(4);\r\n if (dim.isUnlocked) return [dmdText];\r\n\r\n const goal = dim.adjustedStartingCost;\r\n if (complete >= 1) return [\r\n dmdText,\r\n `Dark Matter ${format(Currency.darkMatter.max.min(goal), dim.isUnlocked ? 0 : 2)} / ${format(goal)}`\r\n ];\r\n\r\n const upgrade = dim.unlockUpgrade;\r\n if (upgrade.isAvailableForPurchase) return [\r\n dmdText,\r\n `Imaginary Machines\r\n ${format(Math.min(upgrade.currency.value, upgrade.cost), upgrade.canBeBought ? 1 : 2)}\r\n / ${format(upgrade.cost, 1)}`\r\n ];\r\n\r\n const allGalaxies = Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies;\r\n return [\r\n dmdText,\r\n `Have ${format(80000)} total Galaxies`,\r\n `${format(Math.clampMax(allGalaxies, 80000))} / ${format(80000)}`\r\n ];\r\n },\r\n angle: 225,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.11,\r\n pathEnd: 0.89,\r\n path: new LinearPath(Positions.laitelaSecondCenter, Positions.laitelaSecondLeft),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n },\r\n },\r\n \"laitela-annihilation\": {\r\n visible: () => DarkMatterDimension(4).isUnlocked,\r\n complete: () => {\r\n const upgrade = ImaginaryUpgrade(19);\r\n if (upgrade.canBeBought || upgrade.isBought) return 1;\r\n if (upgrade.isAvailableForPurchase) return Currency.imaginaryMachines.value / upgrade.cost;\r\n return upgrade.isPossible\r\n ? Tickspeed.continuumValue / 3850000\r\n : 0;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"white\",\r\n position: Positions.laitelaSecondRight,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: () => [\r\n \"Annihilate your\",\r\n \"Dark Matter Dimensions\"\r\n ],\r\n angle: 315,\r\n diagonal: 30,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0.11,\r\n pathEnd: 0.89,\r\n path: new LinearPath(Positions.laitelaSecondCenter, Positions.laitelaSecondRight),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n },\r\n },\r\n \"laitela-destabilization\": {\r\n visible: () => DarkMatterDimension(4).isUnlocked && ImaginaryUpgrade(19).isBought,\r\n complete: () => Laitela.difficultyTier / 8,\r\n node: {\r\n clickAction: () => Tab.celestials.laitela.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n symbolScale: 1.6,\r\n symbolOffset: \"0.6\",\r\n fill: \"white\",\r\n position: Positions.laitelaThirdCenter,\r\n ring: {\r\n rMajor: 15,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete < 1) return [\r\n \"Destabilize Lai'tela's Reality\",\r\n \"To the point where you cannot\",\r\n \"use any Dimensions\",\r\n `${format(Laitela.difficultyTier)} / ${format(8)} Dimensions disabled`\r\n ];\r\n return [\r\n \"Completely destabilized\",\r\n \"Lai'tela's Reality\",\r\n ];\r\n },\r\n angle: 180,\r\n diagonal: 15,\r\n horizontal: 8,\r\n },\r\n },\r\n connector: [\r\n {\r\n pathStart: 0.11,\r\n pathEnd: 0.83,\r\n path: new LinearPath(Positions.laitelaSecondLeft, Positions.laitelaThirdCenter),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }, {\r\n pathStart: 0.11,\r\n pathEnd: 0.83,\r\n path: new LinearPath(Positions.laitelaSecondRight, Positions.laitelaThirdCenter),\r\n fill: \"white\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n }\r\n ]\r\n },\r\n \"pelle-unlock\": {\r\n visible: () => Laitela.difficultyTier > 4,\r\n complete: () => {\r\n if (Pelle.isUnlocked) return 1;\r\n const imCost = Math.clampMax(emphasizeEnd(Math.log10(Currency.imaginaryMachines.value) / Math.log10(1.6e15)), 1);\r\n let laitelaProgress = Laitela.isRunning ? Math.min(Currency.eternityPoints.value.log10() / 4000, 0.99) : 0;\r\n if (Laitela.difficultyTier !== 8 || Glyphs.activeWithoutCompanion.length > 1) laitelaProgress = 0;\r\n else if (ImaginaryUpgrade(25).isAvailableForPurchase) laitelaProgress = 1;\r\n return (imCost + laitelaProgress) / 2;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.pelle.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"crimson\",\r\n position: Positions.pelleUnlock,\r\n ring: {\r\n rMajor: 8,\r\n },\r\n legend: {\r\n text: complete => {\r\n if (complete === 1) {\r\n return [\r\n \"Unlock Pelle\",\r\n \"The Celestial of Antimatter\"\r\n ];\r\n }\r\n let laitelaString = `${format(Currency.eternityPoints.value)} / ${format(\"1e4000\")} EP`;\r\n if (!Laitela.isRunning || Laitela.difficultyTier !== 8 || Glyphs.activeWithoutCompanion.length > 1) {\r\n laitelaString = \"Lai'tela's Reality is still intact\";\r\n } else if (ImaginaryUpgrade(25).isAvailableForPurchase) {\r\n laitelaString = \"Lai'tela's Reality has been destroyed\";\r\n }\r\n return [\r\n \"Unlock Pelle\",\r\n \"The Celestial of Antimatter\",\r\n `${format(Currency.imaginaryMachines.value, 2)} / ${format(1.6e15, 2)} iM`,\r\n laitelaString\r\n ];\r\n },\r\n angle: 105,\r\n diagonal: 90,\r\n horizontal: 10,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.laitelaThirdCenter, Positions.pelleUnlock),\r\n fill: \"url(#gradLaitelaPelle)\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n },\r\n },\r\n \"pelle-doomed-requirement\": {\r\n visible: () => Pelle.isUnlocked,\r\n complete: () => {\r\n if (Pelle.isDoomed) return 1;\r\n const achievements = Achievements.prePelleRows.countWhere(r => r.every(a => a.isUnlocked)) /\r\n Achievements.prePelleRows.length;\r\n const alchemy = AlchemyResources.all.countWhere(r => r.capped) / AlchemyResources.all.length;\r\n return (emphasizeEnd(achievements) + emphasizeEnd(alchemy)) / 2;\r\n },\r\n node: {\r\n clickAction: () => Tab.celestials.pelle.show(true),\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n symbol: \"♅\",\r\n symbolOffset: \"1.6\",\r\n fill: \"crimson\",\r\n position: Positions.pelleAchievementRequirement,\r\n ring: {\r\n rMajor: 20,\r\n },\r\n forceLegend: () => Pelle.isUnlocked && !Pelle.hasGalaxyGenerator,\r\n legend: {\r\n text: complete => {\r\n if (complete >= 1) return Pelle.isDoomed ? \"Doomed Reality\" : \"Doom your Reality\";\r\n const achievements = [Achievements.prePelleRows.countWhere(r => r.every(a => a.isUnlocked)),\r\n Achievements.prePelleRows.length];\r\n const alchemy = [AlchemyResources.all.countWhere(r => r.capped), AlchemyResources.all.length];\r\n return [\r\n `Complete ${formatInt(achievements[0])} / ${formatInt(achievements[1])} rows of Achievements`,\r\n `Fill ${formatInt(alchemy[0])} / ${formatInt(alchemy[1])} Alchemy Resources`,\r\n ];\r\n },\r\n angle: 290,\r\n diagonal: 40,\r\n horizontal: 16,\r\n },\r\n },\r\n connector: {\r\n pathStart: 0,\r\n pathEnd: 1,\r\n path: new LinearPath(Positions.pelleUnlock, Positions.pelleAchievementRequirement),\r\n fill: \"crimson\",\r\n completeWidth: 6,\r\n incompleteWidth: 4,\r\n },\r\n },\r\n\r\n // All the fill elements are generated outside of here as a loop, and then unpacked here with the spread operator\r\n ...riftFillElements,\r\n\r\n // Needs a separate node in order to color the background of the galaxy generator not-gray. Note that this node gets\r\n // placed on top of the \"main\" Doomed node once it's visible\r\n \"pelle-galaxy-generator-start-node\": {\r\n visible: () => Pelle.hasGalaxyGenerator,\r\n complete: () => (Pelle.hasGalaxyGenerator ? 1 : 0),\r\n node: {\r\n incompleteClass: \"c-celestial-nav__test-incomplete\",\r\n fill: \"black\",\r\n position: Positions.pelleAchievementRequirement,\r\n ring: {\r\n rMajor: 20,\r\n },\r\n alwaysShowLegend: true,\r\n legend: {\r\n text: () => [\r\n \"Galaxy Generator:\",\r\n `${format(GalaxyGenerator.generatedGalaxies, 2)} / ${format(GalaxyGenerator.generationCap, 2)} Galaxies`\r\n ],\r\n angle: 290,\r\n diagonal: 40,\r\n horizontal: 16,\r\n },\r\n },\r\n },\r\n // Invisible element to suppress the mouseover detection on the galaxy icon causing the legend to flicker\r\n \"pelle-galaxy-generator-sigil-mask\": {\r\n visible: () => Pelle.hasGalaxyGenerator,\r\n complete: () => (Pelle.hasGalaxyGenerator ? 1 : 0),\r\n node: {\r\n clickAction: () => Tab.celestials.pelle.show(true),\r\n position: Positions.pelleAchievementRequirement,\r\n ring: {\r\n rMajor: 20,\r\n },\r\n },\r\n },\r\n \"pelle-galaxy-generator-path\": {\r\n visible: () => Pelle.hasGalaxyGenerator,\r\n complete: () => {\r\n const riftCaps = PelleRifts.all.map(r => r.config.galaxyGeneratorThreshold);\r\n const brokenRifts = riftCaps.countWhere(n => GalaxyGenerator.generatedGalaxies >= n);\r\n if (brokenRifts === 5) return 1;\r\n const prevRift = riftCaps.filter(n => GalaxyGenerator.generatedGalaxies >= n).max();\r\n const nextRift = riftCaps.filter(n => GalaxyGenerator.generatedGalaxies < n).min();\r\n const currRiftProp = Math.sqrt((GalaxyGenerator.generatedGalaxies - prevRift) / (nextRift - prevRift));\r\n return (brokenRifts + currRiftProp) / 5;\r\n },\r\n connector: (function() {\r\n const pathStart = 0.5 * Math.PI;\r\n const pathEnd = pathStart + 10 * Math.PI;\r\n const path = LogarithmicSpiral.fromPolarEndpoints(pelleStarPosition(0, 0),\r\n pathStart, 18, pathEnd, 150);\r\n return {\r\n pathStart,\r\n pathEnd,\r\n path,\r\n pathPadStart: 0,\r\n pathPadEnd: 0,\r\n fill: \"#00bbbb\",\r\n };\r\n }()),\r\n },\r\n\r\n // The path BG is invisible, but we want to make sure it extends far enough that it expands out \"forever\"\r\n \"pelle-galaxy-generator-infinite\": {\r\n visible: () => Pelle.hasGalaxyGenerator && !Number.isFinite(GalaxyGenerator.generationCap),\r\n complete: () => Math.clamp((GalaxyGenerator.generatedGalaxies - 1e10) / 2e11, 1e-6, 1),\r\n connector: (function() {\r\n const pathStart = 0.5 * Math.PI;\r\n const pathEnd = pathStart + 10 * Math.PI;\r\n const path = LogarithmicSpiral.fromPolarEndpoints(pelleStarPosition(0, 0),\r\n pathStart, 150, pathEnd, 1250);\r\n return {\r\n pathStart,\r\n pathEnd,\r\n path,\r\n pathPadStart: 0,\r\n pathPadEnd: 0,\r\n drawOrder: CELESTIAL_NAV_DRAW_ORDER.CANVAS_OVERLAY,\r\n fill: \"#00bbbb\",\r\n noBG: true,\r\n };\r\n }()),\r\n },\r\n};\r\n","import { CELESTIAL_NAV_DRAW_ORDER } from \"../navigation\";\r\n\r\nfunction sigilProgress() {\r\n const riftProgress = PelleRifts.all.map(r => Math.clamp(r.realPercentage, 0, 1)).min();\r\n const generatorProgress = Math.log10(1 + GalaxyGenerator.generatedGalaxies) / 11;\r\n return Math.clampMax(0.2 * riftProgress + 0.8 * generatorProgress, 1);\r\n}\r\n\r\n// Determines styling, overall visibility, and placement/scaling of the sigil. Center and size are defined such that\r\n// keeping the sigil within internal coordinates of ±1 will keep the sigil within a ±size box of the center coordinates\r\nconst SigilAttributes = {\r\n visible: () => PelleRifts.all.map(r => Math.clamp(r.realPercentage, 0, 1)).min() > 0,\r\n center: new Vector(400, 300),\r\n size: 400,\r\n color: \"#00ffff\",\r\n canvasLayer: CELESTIAL_NAV_DRAW_ORDER.NODE_BG - 500,\r\n};\r\n\r\nfunction scaledPos(x, y) {\r\n const att = SigilAttributes;\r\n return new Vector(att.center.x + att.size * x, att.center.y + att.size * y);\r\n}\r\n\r\n// Reflects a vector across the vertical line down the center of the sigil bounding box. Used to take advantage of the\r\n// sigil having vertical symmetry, allowing us to cut down on hardcoded specifications by half\r\nfunction reflectAcrossVertical(vec) {\r\n return new Vector(2 * SigilAttributes.center.x - vec.x, vec.y);\r\n}\r\n\r\n/**\r\n * Method to make an appropriately-formatted entry to be fed into the navigation code\r\n *\r\n * @member {String} type String specifying the actual shape of the element to be drawn; must be \"line\" or \"circle\"\r\n * @member {Object} att Object whose props list out attributes of the shape to be drawn:\r\n * Line : start and end, specifying the two endpoints to draw between.\r\n * Circle: center and radius to specify the circle path, initAngle and finalAngle to specify an arc segment to draw.\r\n * 0 is rightward and positive angles draw clockwise. Note that making finalAngle-initialAngle a multiple of 2pi\r\n * will cause curve decomposition errors in the curve-drawing code.\r\n * @member {Object} fill Object specifying a segment for the fill as a fraction of the total sigil filling progress.\r\n * Each particular segment will fill from 0% to 100% within the range init to init+weight, without over/underfilling.\r\n * @member {String} colorOverride Color to use for rendering the element, used instead of SigilAttributes.color\r\n */\r\n// eslint-disable-next-line max-params\r\nfunction sigilShape(type, att, fill, colorOverride) {\r\n let pos, path, pathStart, pathEnd;\r\n switch (type) {\r\n case \"edge\":\r\n pos = att.start;\r\n path = new LinearPath(att.start, att.end);\r\n pathStart = 0;\r\n pathEnd = 1;\r\n break;\r\n case \"circle\":\r\n pos = att.center;\r\n path = LogarithmicSpiral.fromPolarEndpoints(att.center, 0, att.radius * SigilAttributes.size,\r\n 1, att.radius * SigilAttributes.size);\r\n pathStart = att.initAngle;\r\n pathEnd = att.finalAngle;\r\n break;\r\n default:\r\n throw Error(\"Unrecognized shape in sigil specification\");\r\n }\r\n\r\n return {\r\n visible: () => SigilAttributes.visible() && sigilProgress() >= fill.init,\r\n complete: () => Math.clamp((sigilProgress() - fill.init) / fill.weight, 0, 1),\r\n // Note that att and fill aren't used in navigation rendering, but including them here massively simplifies the\r\n // sigil reflection logic\r\n att,\r\n fill,\r\n node: {\r\n position: pos,\r\n ring: {\r\n rMajor: 0,\r\n },\r\n },\r\n connector: {\r\n pathStart,\r\n pathEnd,\r\n drawOrder: SigilAttributes.canvasLayer,\r\n path,\r\n fill: colorOverride ?? SigilAttributes.color,\r\n completeWidth: SigilAttributes.size / 20,\r\n noBG: true,\r\n },\r\n };\r\n}\r\n\r\n// These coordinates should generally be kept within ±1; if the sigil needs to be larger then that should be changed in\r\n// the SigilAttribute object instead. Naming conventions for this sigil use smaller numbers to denote nodes generally\r\n// closer to the center line (whether by distance or path length), whereas abbreviated words are used to describe\r\n// vertical position. C denotes horizontal center points.\r\nconst Positions = Object.freeze({\r\n circTop: scaledPos(0.333, -0.41),\r\n circMid: scaledPos(0.5, 0.22),\r\n circBot: scaledPos(0, 0.43),\r\n topC: scaledPos(0, -0.4),\r\n top1: scaledPos(0.08, -0.27),\r\n top2: scaledPos(0.18, -0.35),\r\n top3: scaledPos(0.28, -0.35),\r\n mid: scaledPos(0.08, 0.05),\r\n arm1: scaledPos(0.5, 0.05),\r\n arm2: scaledPos(0.5, -0.15),\r\n arm3: scaledPos(0.4, -0.15),\r\n lowC: scaledPos(0, 0.22),\r\n low1: scaledPos(0.42, 0.22),\r\n botC: scaledPos(0, 0.31),\r\n bot1: scaledPos(0.12, 0.43),\r\n bot2: scaledPos(0.28, 0.43),\r\n});\r\n\r\n// List of specified primitive graphics elements with which to construct the sigil; see docstring of sigilShape\r\n// for description of proper attribute specifications\r\nconst Shapes = {\r\n botCircR: sigilShape(\"circle\",\r\n { center: Positions.circBot, radius: 0.12, initAngle: 0.5 * Math.PI, finalAngle: -0.5 * Math.PI },\r\n { init: 0, weight: 0.2 }),\r\n botH: sigilShape(\"edge\",\r\n { start: Positions.bot1, end: Positions.bot2 },\r\n { init: 0.1, weight: 0.1 }),\r\n lowH: sigilShape(\"edge\",\r\n { start: Positions.lowC, end: Positions.low1 },\r\n { init: 0.3, weight: 0.3 }),\r\n circUp: sigilShape(\"circle\",\r\n { center: Positions.circMid, radius: 0.08, initAngle: Math.PI, finalAngle: 0 },\r\n { init: 0.6, weight: 0.1 }),\r\n circDown: sigilShape(\"circle\",\r\n { center: Positions.circMid, radius: 0.08, initAngle: Math.PI, finalAngle: 2 * Math.PI },\r\n { init: 0.6, weight: 0.1 }),\r\n vert2: sigilShape(\"edge\",\r\n { start: Positions.bot2, end: Positions.top3 },\r\n { init: 0.2, weight: 0.7 }),\r\n vertC: sigilShape(\"edge\",\r\n { start: Positions.botC, end: Positions.lowC },\r\n { init: 0.2, weight: 0.1 }),\r\n vertDiag1: sigilShape(\"edge\",\r\n { start: Positions.lowC, end: Positions.mid },\r\n { init: 0.3, weight: 0.1 }),\r\n arm1: sigilShape(\"edge\",\r\n { start: Positions.mid, end: Positions.arm1 },\r\n { init: 0.4, weight: 0.2 }),\r\n arm2: sigilShape(\"edge\",\r\n { start: Positions.arm1, end: Positions.arm2 },\r\n { init: 0.6, weight: 0.1 }),\r\n arm3: sigilShape(\"edge\",\r\n { start: Positions.arm2, end: Positions.arm3 },\r\n { init: 0.7, weight: 0.1 }),\r\n vert1: sigilShape(\"edge\",\r\n { start: Positions.mid, end: Positions.top1 },\r\n { init: 0.4, weight: 0.3 }),\r\n vertDiag2: sigilShape(\"edge\",\r\n { start: Positions.top1, end: Positions.topC },\r\n { init: 0.7, weight: 0.1 }),\r\n vertDiag3: sigilShape(\"edge\",\r\n { start: Positions.top1, end: Positions.top2 },\r\n { init: 0.7, weight: 0.1 }),\r\n topH: sigilShape(\"edge\",\r\n { start: Positions.top2, end: Positions.top3 },\r\n { init: 0.8, weight: 0.1 }),\r\n circTopUp: sigilShape(\"circle\",\r\n { center: Positions.circTop, radius: 0.08, initAngle: 0.75 * Math.PI, finalAngle: 1.75 * Math.PI },\r\n { init: 0.9, weight: 0.1 }),\r\n circTopDown: sigilShape(\"circle\",\r\n { center: Positions.circTop, radius: 0.08, initAngle: 0.75 * Math.PI, finalAngle: -0.25 * Math.PI },\r\n { init: 0.9, weight: 0.1 }),\r\n};\r\n\r\n// The hardcoded elements in Shapes above only specify roughly half of the sigil; here we take all the existing entries\r\n// and reflect them across the center line. Note that this technically duplicates one of the elements on top of itself\r\nfor (const key of Object.keys(Shapes)) {\r\n const toReflect = Shapes[key];\r\n if (toReflect.connector.path instanceof LinearPath) {\r\n Shapes[`${key}Ref`] = sigilShape(\"edge\",\r\n { start: reflectAcrossVertical(toReflect.att.start), end: reflectAcrossVertical(toReflect.att.end) },\r\n toReflect.fill);\r\n } else if (toReflect.connector.path instanceof LogarithmicSpiral) {\r\n Shapes[`${key}Ref`] = sigilShape(\"circle\",\r\n { center: reflectAcrossVertical(toReflect.att.center), radius: toReflect.att.radius,\r\n initAngle: Math.PI - toReflect.att.initAngle, finalAngle: Math.PI - toReflect.att.finalAngle },\r\n toReflect.fill);\r\n }\r\n}\r\n\r\n// This segment adds multiple circular arcs around the entire sigil, which all fill simultaneously\r\nconst arcSegments = 16;\r\nfor (let arcIndex = 0; arcIndex < arcSegments; arcIndex++) {\r\n const len = 2 * Math.PI / arcSegments;\r\n const init = arcIndex * len;\r\n Shapes[`arcInner${arcIndex}`] = sigilShape(\"circle\",\r\n { center: SigilAttributes.center, radius: 0.75,\r\n initAngle: init, finalAngle: init + len },\r\n { init: 0.1, weight: 0.4 },\r\n \"crimson\");\r\n Shapes[`arcOuter${arcIndex}`] = sigilShape(\"circle\",\r\n { center: SigilAttributes.center, radius: 0.95,\r\n initAngle: init, finalAngle: init - len },\r\n { init: 0.5, weight: 0.4 },\r\n \"crimson\");\r\n}\r\n\r\nexport const finalSigil = Object.values(Shapes)\r\n .mapToObject((key, idx) => `final-sigil-${idx}`, val => val);\r\n","import { CELESTIAL_NAV_DRAW_ORDER, pelleStarPosition } from \"../navigation\";\r\n\r\n// Determines styling, overall visibility, and placement/scaling of the sigil. Center and size are defined such that\r\n// the sigil will largely stay within a circle of radius \"size\" centered on \"center\"\r\nconst SigilAttributes = {\r\n visible: () => Pelle.hasGalaxyGenerator,\r\n center: pelleStarPosition(0, 0),\r\n size: 20,\r\n color: \"#00ffff\",\r\n canvasLayer: CELESTIAL_NAV_DRAW_ORDER.CANVAS_OVERLAY,\r\n};\r\n\r\n/**\r\n * Method to make an appropriately-formatted entry to be fed into the navigation code\r\n *\r\n * @member {String} type String specifying the actual shape of the element to be drawn; must be \"circle\" or \"arc\"\r\n * @member {Object} att Object whose props list out attributes of the shape to be drawn:\r\n * center - Center of the circle or logarithmic spiral (\"arc\") being drawn\r\n * radius - Only used for \"circle\" and is the radius of the circle being drawn\r\n * initRadius/finalRadius - Radius endpoints for a spiral\r\n * initAngle/finalAngle - Angular endpoints for a spiral\r\n * @member {Object} draw Object whose props (thickness, layer) determine the thickness and z-index of this element\r\n * @member {String} colorOverride Color to use for rendering the element, used instead of SigilAttributes.color\r\n */\r\n// eslint-disable-next-line max-params\r\nfunction sigilShape(type, att, draw, colorOverride) {\r\n let pos, path, pathStart, pathEnd;\r\n switch (type) {\r\n case \"circle\":\r\n pos = att.center;\r\n path = LogarithmicSpiral.fromPolarEndpoints(att.center, 0, att.radius * SigilAttributes.size,\r\n 1, att.radius * SigilAttributes.size);\r\n pathStart = att.initAngle;\r\n pathEnd = att.finalAngle;\r\n break;\r\n case \"arc\":\r\n pos = att.center;\r\n pathStart = att.initAngle;\r\n pathEnd = att.finalAngle;\r\n path = LogarithmicSpiral.fromPolarEndpoints(att.center, pathStart, att.initRadius * SigilAttributes.size,\r\n pathEnd, att.finalRadius * SigilAttributes.size);\r\n break;\r\n default:\r\n throw Error(\"Unrecognized shape in sigil specification\");\r\n }\r\n\r\n return {\r\n visible: () => SigilAttributes.visible(),\r\n complete: () => 1,\r\n node: {\r\n position: pos,\r\n ring: {\r\n rMajor: SigilAttributes.size * draw.thickness,\r\n },\r\n bgDrawOrder: SigilAttributes.canvasLayer + draw.layer,\r\n },\r\n connector: {\r\n pathStart,\r\n pathEnd,\r\n drawOrder: SigilAttributes.canvasLayer + draw.layer,\r\n path,\r\n fill: colorOverride ?? SigilAttributes.color,\r\n completeWidth: SigilAttributes.size * draw.thickness,\r\n noBG: true\r\n },\r\n };\r\n}\r\n\r\n// List of specified primitive graphics elements with which to construct the sigil; see docstring of sigilShape\r\n// for description of proper attribute specifications. These are two circular rings in the center of the galaxy\r\nconst Shapes = {\r\n disc: sigilShape(\"circle\",\r\n { center: SigilAttributes.center, radius: 0.2, initAngle: 0, finalAngle: 6.28 },\r\n { thickness: 0.15, layer: 1 },\r\n \"#88ffff\"),\r\n glow: sigilShape(\"circle\",\r\n { center: SigilAttributes.center, radius: 0.125, initAngle: 0, finalAngle: 6.28 },\r\n { thickness: 0.05, layer: 2 },\r\n \"white\"),\r\n};\r\n\r\n// This segment adds multiple circular arcs around the entire sigil, in a shape resembling a spiral galaxy\r\nconst arcSegments = 10;\r\nfor (let arcIndex = 0; arcIndex < arcSegments; arcIndex++) {\r\n const len = 2 * Math.PI / arcSegments;\r\n const init = arcIndex * len;\r\n Shapes[`spiral${arcIndex}`] = sigilShape(\"arc\",\r\n { center: SigilAttributes.center, initRadius: 0.2, finalRadius: 0.9, initAngle: init, finalAngle: init + Math.PI },\r\n { thickness: 0.1, layer: 0 },\r\n \"cyan\");\r\n}\r\n\r\nexport const galaxyIcon = Object.values(Shapes)\r\n .mapToObject((key, idx) => `galaxy-icon-${idx}`, val => val);\r\n","import { DC } from \"../../constants\";\r\nimport { corruptionPenalties } from \"../mending/corruption\";\r\n//general code for corruption 9 --sxy\r\n/*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n}*/\r\n\r\nexport const alchemyResources = {\r\n // T1 resources (Non-Effarig \"base\" resources)\r\n \"power\": {\r\n id: ALCHEMY_RESOURCE.POWER,\r\n name: \"Power\",\r\n symbol: \"Ω\",\r\n isBaseResource: true,\r\n effect: amount => {\r\n let x = 1 + amount / 200000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 1,\r\n uiOrder: 1,\r\n unlockedAt: 2,\r\n description: \"provides a power to Antimatter Dimensions\",\r\n formatEffect: value => `Antimatter Dimension multipliers ${formatPow(value, 4, 4)}`\r\n },\r\n \"infinity\": {\r\n id: ALCHEMY_RESOURCE.INFINITY,\r\n name: \"Infinity\",\r\n symbol: \"∞\",\r\n isBaseResource: true,\r\n effect: amount => {\r\n let x = 1 + amount / 200000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 1,\r\n uiOrder: 2,\r\n unlockedAt: 3,\r\n description: \"provides a power to Infinity Dimensions\",\r\n formatEffect: value => `Infinity Dimension multipliers ${formatPow(value, 4, 4)}`\r\n },\r\n \"time\": {\r\n id: ALCHEMY_RESOURCE.TIME,\r\n name: \"Time\",\r\n symbol: \"Δ\",\r\n isBaseResource: true,\r\n effect: amount => {\r\n let x = 1 + amount / 200000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 1,\r\n uiOrder: 3,\r\n unlockedAt: 4,\r\n description: \"provides a power to Time Dimensions\",\r\n formatEffect: value => `Time Dimension multipliers ${formatPow(value, 4, 4)}`\r\n },\r\n \"replication\": {\r\n id: ALCHEMY_RESOURCE.REPLICATION,\r\n name: \"Replication\",\r\n symbol: \"Ξ\",\r\n isBaseResource: true,\r\n effect: amount => {\r\n let x = Decimal.pow10(amount / 1000);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Decimal.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 1,\r\n uiOrder: 4,\r\n unlockedAt: 5,\r\n description: `increases Replication speed`,\r\n formatEffect: value => `Replication speed is increased by ${formatX(value, 2, 2)}`\r\n },\r\n \"dilation\": {\r\n id: ALCHEMY_RESOURCE.DILATION,\r\n name: \"Dilation\",\r\n symbol: \"Ψ\",\r\n isBaseResource: true,\r\n effect: amount => {\r\n let x = Decimal.pow10(amount / 2000);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Decimal.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 1,\r\n uiOrder: 5,\r\n unlockedAt: 6,\r\n description: \"increases Dilated Time production\",\r\n formatEffect: value => `Dilated Time production is increased by ${formatX(value, 2, 2)}`\r\n },\r\n\r\n // T2 resources (combinations of pairs of T1 resources)\r\n \"cardinality\": {\r\n id: ALCHEMY_RESOURCE.CARDINALITY,\r\n name: \"Cardinality\",\r\n symbol: \"α\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 1 + amount / 20000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return 1 + 0.2 / (x);\r\n },\r\n tier: 2,\r\n uiOrder: 3,\r\n unlockedAt: 8,\r\n description: \"reduces Replicanti slowdown when above the cap\",\r\n formatEffect: value => `Replicanti interval increases slower ${formatX(1.2, 1, 1)} ➜\r\n ${formatX(value, 4, 4)} per ${format(Number.MAX_VALUE, 2)}`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.TIME,\r\n amount: 8\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.REPLICATION,\r\n amount: 7\r\n }\r\n ]\r\n },\r\n \"eternity\": {\r\n id: ALCHEMY_RESOURCE.ETERNITY,\r\n name: \"Eternity\",\r\n symbol: \"τ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 1 + amount / 15000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 2,\r\n uiOrder: 2,\r\n unlockedAt: 9,\r\n description: \"provides a power to Eternity generation\",\r\n formatEffect: value => `Eternity generation ${formatPow(value, 4, 4)}`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.TIME,\r\n amount: 11\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.INFINITY,\r\n amount: 4\r\n }\r\n ]\r\n },\r\n \"dimensionality\": {\r\n id: ALCHEMY_RESOURCE.DIMENSIONALITY,\r\n name: \"Dimensionality\",\r\n symbol: \"ρ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = Decimal.pow10(5 * amount);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Decimal.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return x;\r\n },\r\n tier: 2,\r\n uiOrder: 1,\r\n unlockedAt: 10,\r\n description: \"provides a large multiplier to all Dimensions\",\r\n formatEffect: value => `All Dimensions ${formatX(value)}`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.POWER,\r\n amount: 10\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.INFINITY,\r\n amount: 5\r\n }\r\n ]\r\n },\r\n \"inflation\": {\r\n id: ALCHEMY_RESOURCE.INFLATION,\r\n name: \"Inflation\",\r\n symbol: \"λ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = amount;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n }*/\r\n return Decimal.pow10(6e9 - 3e5 * x)\r\n },\r\n tier: 2,\r\n uiOrder: 5,\r\n unlockedAt: 11,\r\n description: \"provides an additional power for very large multipliers\",\r\n formatEffect: value => `All Antimatter Dimension multipliers are ${formatPow(1.05, 2, 2)}\r\n if they are above ${format(value)} `,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.POWER,\r\n amount: 9\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.DILATION,\r\n amount: 6\r\n }\r\n ]\r\n },\r\n \"alternation\": {\r\n id: ALCHEMY_RESOURCE.ALTERNATION,\r\n name: \"Alternation\",\r\n symbol: \"ω\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = amount / 2000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x / 100;\r\n },\r\n tier: 2,\r\n uiOrder: 4,\r\n unlockedAt: 12,\r\n description: \"increases the strength of Tachyon Galaxies based on Replicanti\",\r\n formatEffect: value => `Tachyon Galaxies are ${formatPercents(value, 2, 2)} stronger\r\n per ${format(DC.E1E6)} Replicanti`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.REPLICATION,\r\n amount: 5\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.DILATION,\r\n amount: 10\r\n }\r\n ]\r\n },\r\n\r\n // T3 resources (Effarig and conbinations of T1/T2 with Effarig)\r\n \"effarig\": {\r\n id: ALCHEMY_RESOURCE.EFFARIG,\r\n name: \"Effarig\",\r\n symbol: \"Ϙ\",\r\n isBaseResource: true,\r\n effect: amount => {\r\n let x = Math.pow(10, amount / 2500);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x;\r\n },\r\n tier: 1,\r\n uiOrder: 1.5,\r\n unlockedAt: 7,\r\n description: \"increases Relic Shard gain\",\r\n formatEffect: value => `Relic Shard gain is multiplied ${formatX(value, 2, 2)}`\r\n },\r\n \"synergism\": {\r\n id: ALCHEMY_RESOURCE.SYNERGISM,\r\n name: \"Synergism\",\r\n symbol: \"π\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let effectValue = 1.3 * Math.sqrt(amount / 25000);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n effectValue = Math.pow(effectValue,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n let rawValue = 0.3 + effectValue;\r\n return Achievement(175).isUnlocked ? rawValue : Math.min(rawValue, 1);\r\n },\r\n tier: 3,\r\n uiOrder: 2,\r\n unlockedAt: 13,\r\n description: \"increases the yield of Alchemy Reactions\",\r\n formatEffect(value) {\r\n return `Alchemy Reaction efficiency ${formatPercents(0.3)} ➜ ${formatPercents(value, 2, 2)}\r\n ${(!Achievement(175).isUnlocked && value >= 1) ? \" (Capped)\" : \"\"}`;\r\n },\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.EFFARIG,\r\n amount: 3\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.REPLICATION,\r\n amount: 16\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.INFINITY,\r\n amount: 14\r\n }\r\n ]\r\n },\r\n \"momentum\": {\r\n id: ALCHEMY_RESOURCE.MOMENTUM,\r\n name: \"Momentum\",\r\n symbol: \"μ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 1 + amount / 125000;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x;\r\n },\r\n tier: 3,\r\n uiOrder: 3,\r\n unlockedAt: 15,\r\n description: \"provides a power to all Dimensions that permanently grows over time\",\r\n formatEffect: value => `All Dimensions ${formatPow(Ra.momentumValue, 4, 4)}, increasing by\r\n ${format(0.005 * Achievement(175).effectOrDefault(1), 3, 3)}\r\n per real-time hour after the resource is unlocked, up to a maximum of ${formatPow(value, 4, 4)}`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.EFFARIG,\r\n amount: 11\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.POWER,\r\n amount: 4\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.TIME,\r\n amount: 20\r\n }\r\n ]\r\n },\r\n \"decoherence\": {\r\n id: ALCHEMY_RESOURCE.DECOHERENCE,\r\n name: \"Decoherence\",\r\n symbol: \"ξ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 15 * Math.sqrt(amount / 25000);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x / 100;\r\n },\r\n tier: 3,\r\n uiOrder: 4,\r\n unlockedAt: 14,\r\n description: \"gives all basic Alchemy Resources upon refinement\",\r\n formatEffect: value => `Refined Glyphs also give ${formatPercents(value, 2)} of their value ` +\r\n \"to all other base resources\",\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.EFFARIG,\r\n amount: 13\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.ALTERNATION,\r\n amount: 8\r\n }\r\n ]\r\n },\r\n\r\n // T4 resources (resources which feed directly into the final resource)\r\n \"exponential\": {\r\n id: ALCHEMY_RESOURCE.EXPONENTIAL,\r\n name: \"Exponential\",\r\n symbol: \"Γ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 10 * Math.pow(amount / 10000, 2);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x;\r\n },\r\n tier: 4,\r\n uiOrder: 2,\r\n unlockedAt: 18,\r\n description: \"multiplies Infinity Points based on Replicanti\",\r\n formatEffect: value => `Infinity Points multiplied by Replicanti${formatPow(value, 2, 3)}`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.INFLATION,\r\n amount: 18\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.SYNERGISM,\r\n amount: 3\r\n }\r\n ]\r\n },\r\n \"force\": {\r\n id: ALCHEMY_RESOURCE.FORCE,\r\n name: \"Force\",\r\n symbol: \"Φ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 5 * amount;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x;\r\n },\r\n tier: 4,\r\n uiOrder: 2,\r\n unlockedAt: 17,\r\n description: \"multiplies Antimatter Dimensions based on Reality Machines\",\r\n formatEffect: value => `Multiply Antimatter Dimensions by Reality Machines${formatPow(value, 2, 2)}`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.DIMENSIONALITY,\r\n amount: 7\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.MOMENTUM,\r\n amount: 8\r\n }\r\n ]\r\n },\r\n \"uncountability\": {\r\n id: ALCHEMY_RESOURCE.UNCOUNTABILITY,\r\n name: \"Uncountability\",\r\n symbol: \"Θ\",\r\n isBaseResource: false,\r\n effect: amount =>{ \r\n let x = BreakInfinityUpgrade.slowestChallengeMult.chargedEffect.isEffectActive ? Math.pow(Ra.pets.teresa.level, 0.5) : 1;\r\n let y = Math.pow(160 * Math.sqrt(amount / 25000), x);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n y = Math.pow(y,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return y;\r\n },\r\n tier: 4,\r\n uiOrder: 3,\r\n unlockedAt: 19,\r\n description: \"passively generates Realities and Perk Points\",\r\n formatEffect: value => `Generate ${format(value, 2, 2)} Realities and Perk Points per second`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.INFINITY,\r\n amount: 20\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.EFFARIG,\r\n amount: 6\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.CARDINALITY,\r\n amount: 16\r\n }\r\n ]\r\n },\r\n \"boundless\": {\r\n id: ALCHEMY_RESOURCE.BOUNDLESS,\r\n name: \"Boundless\",\r\n symbol: \"Π\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = amount / 800;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x / 100;\r\n },\r\n tier: 4,\r\n uiOrder: 1,\r\n unlockedAt: 20,\r\n description: \"makes Tesseracts stronger\",\r\n formatEffect: value => `Tesseracts are +${formatPercents(value, 2, 2)} stronger`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.ETERNITY,\r\n amount: 13\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.INFLATION,\r\n amount: 18\r\n }\r\n ]\r\n },\r\n \"multiversal\": {\r\n id: ALCHEMY_RESOURCE.MULTIVERSAL,\r\n name: \"Multiversal\",\r\n symbol: \"Σ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = 32 * Math.pow(amount / 25000, 2);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x;\r\n },\r\n tier: 4,\r\n uiOrder: 5,\r\n unlockedAt: 16,\r\n description: \"makes each Reality simulate more Realities\",\r\n formatEffect: value => `Each Reality simulates ${format(value, 2, 3)} additional Realities, giving all\r\n the same rewards as if it was amplified`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.ALTERNATION,\r\n amount: 16\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.DECOHERENCE,\r\n amount: 3\r\n }\r\n ]\r\n },\r\n \"unpredictability\": {\r\n id: ALCHEMY_RESOURCE.UNPREDICTABILITY,\r\n name: \"Unpredictability\",\r\n symbol: \"Λ\",\r\n isBaseResource: false,\r\n // Somewhat ugly number to make this show 70.00% at cap\r\n effect: amount => {\r\n let x = amount * 100 / (10714.28 + amount);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return x / 100;\r\n },\r\n tier: 4,\r\n uiOrder: 4,\r\n unlockedAt: 21,\r\n description: \"makes each Alchemy Reaction have a chance to happen twice\",\r\n formatEffect: value => `Any Alchemy Reaction has a ${formatPercents(value, 2, 2)}\r\n chance of triggering again`,\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.EFFARIG,\r\n amount: 15\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.DECOHERENCE,\r\n amount: 3\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.SYNERGISM,\r\n amount: 10\r\n }\r\n ]\r\n },\r\n\r\n // T5 (Reality)\r\n \"reality\": {\r\n id: ALCHEMY_RESOURCE.REALITY,\r\n name: \"Reality\",\r\n symbol: \"Ϟ\",\r\n isBaseResource: false,\r\n effect: amount => {\r\n let x = amount;\r\n if(player.celestials.ra.upgrades.has('effarigUpgrade'))x*=3;\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.pow(x,corruptionPenalties.alchemyNormalcy[player.mending.corruption[9]]);\r\n };*/\r\n return Math.floor(x);\r\n },\r\n tier: 5,\r\n unlockedAt: 25,\r\n description: \"can be consumed to create Reality Glyphs\",\r\n formatEffect: value => {return `Consume all Reality Resource to create a level ${formatInt(value)} Reality Glyph`},\r\n reagents: [\r\n {\r\n resource: ALCHEMY_RESOURCE.EXPONENTIAL,\r\n amount: 1\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.FORCE,\r\n amount: 1\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.UNCOUNTABILITY,\r\n amount: 1\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.BOUNDLESS,\r\n amount: 1\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.MULTIVERSAL,\r\n amount: 1\r\n },\r\n {\r\n resource: ALCHEMY_RESOURCE.UNPREDICTABILITY,\r\n amount: 1\r\n }\r\n ]\r\n },\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const effarigUnlocks = {\r\n adjuster: {\r\n id: 0,\r\n description: \"Adjustable Glyph level factor weights\",\r\n cost: 1e7,\r\n onPurchased: () => {\r\n Effarig.quotes.unlockWeights.show();\r\n ui.view.tabs.reality.openGlyphWeights = true;\r\n Tab.reality.glyphs.show();\r\n }\r\n },\r\n glyphFilter: {\r\n id: 1,\r\n description: \"Glyph Filtering\",\r\n cost: 2e8,\r\n onPurchased: () => {\r\n Effarig.quotes.unlockGlyphFilter.show();\r\n player.reality.showSidebarPanel = GLYPH_SIDEBAR_MODE.FILTER_SETTINGS;\r\n }\r\n },\r\n setSaves: {\r\n id: 2,\r\n description: \"Glyph Presets\",\r\n cost: 3e9,\r\n onPurchased: () => {\r\n Effarig.quotes.unlockSetSaves.show();\r\n player.reality.showSidebarPanel = GLYPH_SIDEBAR_MODE.SAVED_SETS;\r\n }\r\n },\r\n run: {\r\n id: 3,\r\n description: \"Effarig's Reality\",\r\n cost: 5e11,\r\n onPurchased: () => {\r\n Effarig.quotes.unlockRun.show();\r\n }\r\n },\r\n infinity: {\r\n id: 4,\r\n label: \"Infinity\",\r\n get description() {\r\n return ` Replicanti cap is multiplied by a value based on Infinities\r\n Infinities increase your max Replicanti Galaxies\r\n Base Infinity Point gain is capped at ${format(DC.E200)} in Effarig's Reality\r\n Each type of Infinity Point multiplier is capped at ${format(DC.E50)} in Effarig's Reality`;\r\n },\r\n },\r\n eternity: {\r\n id: 5,\r\n label: \"Eternity\",\r\n get description() {\r\n return ` Eternities generate Infinities\r\n Infinity Points are no longer limited in any way in Effarig's Reality\r\n You have unlocked The Nameless Ones`;\r\n },\r\n },\r\n reality: {\r\n id: 6,\r\n label: \"Reality\",\r\n get description() {\r\n return \" You have unlocked Effarig Glyphs (You may equip at most one and some effects are mutually exclusive)\";\r\n },\r\n },\r\n mend: {\r\n id: 7,\r\n label: \"Mend\",\r\n get description() {\r\n return ` Effarig is no longer reset on Mend, Unlock the ability to auto equip Glyphs on Reality, idk if we'll have more rewards.`\r\n }\r\n }\r\n};\r\n","export const enslaved = {\r\n // These entries will be unlocked in no particular order\r\n progress: {\r\n hintsUnlocked: {\r\n id: 0,\r\n hint: \"The Nameless Ones want to help, but the help takes a while.\",\r\n condition: () => `Spent more than ${formatInt(5)} real-time hours inside the Reality without completing it;\r\n time outside the Reality counts for ${formatPercents(0.4)} as much. The timer starts once the\r\n Reality is unlocked, but accumulates continuously.`,\r\n },\r\n ec1: {\r\n id: 1,\r\n hint: \"That's odd, the Automatic Eternity Challenge perk seems to be having some trouble working properly.\",\r\n condition: () => `Gained more than ${formatInt(5)} completions of Eternity Challenge 1 at once`,\r\n },\r\n feelEternity: {\r\n id: 2,\r\n hint: \"Infinity seems to be more broken than usual in this Reality, but is that even fixable?\",\r\n condition: \"Tried to Fix Infinity, but instead found and clicked the FEEL ETERNITY button\",\r\n },\r\n ec6: {\r\n id: 3,\r\n hint: `Some Challenges are harder, but also boost something in exchange. I wonder if there's a Challenge\r\n that's just strictly better than normal here.`,\r\n condition: () => `Entered Eternity Challenge 6 again after completing it ${formatInt(5)} times in order\r\n to use its cheaper Replicanti Galaxies`,\r\n },\r\n c10: {\r\n id: 4,\r\n hint: \"Is there a way to get Antimatter Galaxies without 8th Antimatter Dimensions?\",\r\n condition: \"Used Challenge 10 to get more than one Antimatter Galaxy with 6th Antimatter Dimensions\",\r\n },\r\n secretStudy: {\r\n id: 5,\r\n hint: \"Time Study 12? What's that?\",\r\n condition: () => `Clicked the secret Time Study and gained an extra ${formatInt(100)} Time Theorems`,\r\n },\r\n storedTime: {\r\n id: 6,\r\n hint: \"It seems like certain parts of this Reality erode away if you wait long enough.\",\r\n condition: \"Discharged to have more than a year of game time this Reality\",\r\n },\r\n challengeCombo: {\r\n id: 7,\r\n hint: \"Could I possibly use one Challenge to get around a restriction in another Challenge?\",\r\n condition: \"Entered Challenge 10 while already inside of Eternity Challenge 6\",\r\n },\r\n },\r\n // These get unlocked sequentially\r\n glyphHints: [\r\n \"Infinity and Dilation Glyphs seem confined too tightly to be useful at all.\",\r\n \"Power and Time Glyphs are particularly strong here.\",\r\n `Effarig Glyphs are only useful with the right effects, but you can complete the Reality without one.\r\n A Replication Glyph is very helpful, but it's not strictly necessary or quite as strong\r\n as Power and Time.`\r\n ]\r\n};\r\n","const formatCost = c => format(c, 2);\r\n\r\nconst rebuyable = config => {\r\n const { id, description, cost, effect, formatEffect, currency, currencyLabel } = config;\r\n return {\r\n id,\r\n description,\r\n cost: () => cost(player.celestials.pelle.rebuyables[id]),\r\n formatCost,\r\n effect: (x = player.celestials.pelle.rebuyables[id]) => effect(x),\r\n formatEffect,\r\n currency,\r\n currencyLabel\r\n };\r\n};\r\n\r\nexport const pelleGalaxyGeneratorUpgrades = {\r\n additive: rebuyable({\r\n id: \"galaxyGeneratorAdditive\",\r\n description: \"Increase base Galaxy generation by 2\",\r\n cost: x => Math.pow(3, x),\r\n effect: x => x * 2,\r\n formatEffect: x => `${format(x, 2, 2)}/s`,\r\n currency: () => Currency.galaxyGeneratorGalaxies,\r\n currencyLabel: \"Galaxy\"\r\n }),\r\n multiplicative: rebuyable({\r\n id: \"galaxyGeneratorMultiplicative\",\r\n description: \"Multiply Galaxy generation\",\r\n cost: x => Math.pow(10, x),\r\n effect: x => Decimal.pow(2.5, x),\r\n formatEffect: x => formatX(x, 2, 1),\r\n currency: () => Currency.galaxyGeneratorGalaxies,\r\n currencyLabel: \"Galaxy\"\r\n }),\r\n antimatterMult: rebuyable({\r\n id: \"galaxyGeneratorAntimatterMult\",\r\n description: \"Multiply Galaxy generation\",\r\n cost: x => Decimal.pow(\"1e100000000\", 10 ** x),\r\n effect: x => Decimal.pow(2, x),\r\n formatEffect: x => formatX(x, 2),\r\n currency: () => Currency.antimatter,\r\n currencyLabel: \"Antimatter\"\r\n }),\r\n IPMult: rebuyable({\r\n id: \"galaxyGeneratorIPMult\",\r\n description: \"Multiply Galaxy generation\",\r\n cost: x => Decimal.pow(\"1e2000000\", 100 ** x),\r\n effect: x => Decimal.pow(2, x),\r\n formatEffect: x => formatX(x, 2),\r\n currency: () => Currency.infinityPoints,\r\n currencyLabel: \"Infinity Point\"\r\n }),\r\n EPMult: rebuyable({\r\n id: \"galaxyGeneratorEPMult\",\r\n description: \"Multiply Galaxy generation\",\r\n cost: x => Decimal.pow(\"1e10000\", 1000 ** x),\r\n effect: x => Decimal.pow(2, x),\r\n formatEffect: x => formatX(x, 2),\r\n currency: () => Currency.eternityPoints,\r\n currencyLabel: \"Eternity Point\"\r\n }),\r\n};\r\n","const formatCost = c => format(c, 2);\r\n// eslint-disable-next-line max-params\r\nconst expWithIncreasedScale = (base1, base2, incScale, coeff, x) =>\r\n Decimal.pow(base1, x).times(Decimal.pow(base2, x - incScale).max(1)).times(coeff);\r\n\r\nconst rebuyable = config => {\r\n const { id, description, cost, effect, formatEffect, cap } = config;\r\n return {\r\n id,\r\n description,\r\n cost: () => expWithIncreasedScale(...cost, player.celestials.pelle.rebuyables[id]),\r\n formatCost,\r\n cap,\r\n effect: (x = player.celestials.pelle.rebuyables[id]) => effect(x),\r\n formatEffect,\r\n rebuyable: true\r\n };\r\n};\r\n\r\nexport const pelleUpgrades = {\r\n antimatterDimensionMult: rebuyable({\r\n id: \"antimatterDimensionMult\",\r\n description: \"Gain a multiplier to Antimatter Dimensions\",\r\n cost: [10, 1e3, 41, 100],\r\n effect: x => Pelle.antimatterDimensionMult(x),\r\n formatEffect: x => formatX(x, 2, 2),\r\n cap: 44\r\n }),\r\n timeSpeedMult: rebuyable({\r\n id: \"timeSpeedMult\",\r\n description: \"Gain a multiplier to game speed\",\r\n cost: [20, 1e3, 30, 1e5],\r\n effect: x => Decimal.pow(1.3, x),\r\n formatEffect: x => formatX(x, 2, 2),\r\n cap: 35\r\n }),\r\n glyphLevels: rebuyable({\r\n id: \"glyphLevels\",\r\n description: \"Increase the Glyph level allowed in Pelle\",\r\n cost: [30, 1e3, 25, 1e15],\r\n effect: x => Math.floor(((3 * (x + 1)) - 2) ** 1.6),\r\n formatEffect: x => formatInt(x),\r\n cap: 26\r\n }),\r\n infConversion: rebuyable({\r\n id: \"infConversion\",\r\n description: \"Increase Infinity Power conversion rate\",\r\n cost: [40, 1e3, 20, 1e18],\r\n effect: x => (x * 3.5) ** 0.37,\r\n formatEffect: x => `+${format(x, 2, 2)}`,\r\n cap: 21\r\n }),\r\n galaxyPower: rebuyable({\r\n id: \"galaxyPower\",\r\n description: \"Multiply Galaxy power\",\r\n cost: [1000, 1e3, 10, 1e30],\r\n effect: x => 1 + x / 50,\r\n formatEffect: x => formatX(x, 2, 2),\r\n cap: 9\r\n }),\r\n antimatterDimAutobuyers1: {\r\n id: 0,\r\n description: \"Get permanent Autobuyers for Antimatter Dimensions 1-4\",\r\n cost: 1e5,\r\n formatCost,\r\n },\r\n dimBoostAutobuyer: {\r\n id: 1,\r\n description: \"Get a permanent Autobuyer for Dimension Boosts\",\r\n cost: 5e5,\r\n formatCost,\r\n },\r\n keepAutobuyers: {\r\n id: 2,\r\n description: \"Autobuyer upgrades no longer reset on Armageddon\",\r\n cost: 5e6,\r\n formatCost,\r\n },\r\n antimatterDimAutobuyers2: {\r\n id: 3,\r\n description: \"Get permanent Autobuyers for Antimatter Dimensions 5-8\",\r\n cost: 2.5e7,\r\n formatCost,\r\n },\r\n galaxyAutobuyer: {\r\n id: 4,\r\n description: \"Get a permanent Autobuyer for Antimatter Galaxies\",\r\n cost: 1e8,\r\n formatCost,\r\n },\r\n tickspeedAutobuyer: {\r\n id: 5,\r\n description: \"Get a permanent Autobuyer for Tickspeed upgrades\",\r\n cost: 1e9,\r\n formatCost,\r\n },\r\n keepInfinityUpgrades: {\r\n id: 6,\r\n description: \"Infinity Upgrades no longer reset on Armageddon\",\r\n cost: 1e10,\r\n formatCost,\r\n },\r\n dimBoostResetsNothing: {\r\n id: 7,\r\n description: \"Dimension Boosts no longer reset anything\",\r\n cost: 1e11,\r\n formatCost,\r\n },\r\n keepBreakInfinityUpgrades: {\r\n id: 8,\r\n description: \"Break Infinity Upgrades no longer reset on Armageddon\",\r\n cost: 1e12,\r\n formatCost,\r\n },\r\n IDAutobuyers: {\r\n id: 9,\r\n description: \"Get permanent Autobuyers for Infinity Dimensions\",\r\n cost: 1e14,\r\n formatCost,\r\n },\r\n keepInfinityChallenges: {\r\n id: 10,\r\n description: \"Infinity Challenge unlocks and completions no longer reset on Armageddon\",\r\n cost: 1e15,\r\n formatCost,\r\n },\r\n galaxyNoResetDimboost: {\r\n id: 11,\r\n description: \"Galaxies no longer reset Dimension Boosts\",\r\n cost: 1e16,\r\n formatCost\r\n },\r\n replicantiAutobuyers: {\r\n id: 12,\r\n description: \"Get permanent Autobuyers for Replicanti Upgrades\",\r\n cost: 1e17,\r\n formatCost,\r\n },\r\n replicantiGalaxyNoReset: {\r\n id: 13,\r\n description: \"Replicanti Galaxies no longer reset on Infinity\",\r\n cost: 1e19,\r\n formatCost,\r\n },\r\n eternitiesNoReset: {\r\n id: 14,\r\n description: \"Eternities no longer reset on Armageddon\",\r\n cost: 1e20,\r\n formatCost,\r\n },\r\n timeStudiesNoReset: {\r\n id: 15,\r\n description: \"Time Studies and Theorems no longer reset on Armageddon\",\r\n cost: 1e21,\r\n formatCost,\r\n },\r\n replicantiStayUnlocked: {\r\n id: 16,\r\n description: \"Replicanti is permanently unlocked\",\r\n cost: 1e22,\r\n formatCost,\r\n },\r\n keepEternityUpgrades: {\r\n id: 17,\r\n description: \"Eternity Upgrades no longer reset on Armageddon\",\r\n cost: 1e24,\r\n formatCost,\r\n },\r\n TDAutobuyers: {\r\n id: 18,\r\n description: \"Get permanent Autobuyers for Time Dimensions\",\r\n cost: 1e25,\r\n formatCost,\r\n },\r\n keepEternityChallenges: {\r\n id: 19,\r\n description: \"Eternity Challenge completions no longer reset on Armageddon\",\r\n cost: 1e26,\r\n formatCost,\r\n },\r\n dilationUpgradesNoReset: {\r\n id: 20,\r\n description: \"Dilation Upgrades no longer reset on Armageddon\",\r\n cost: 1e45,\r\n formatCost,\r\n },\r\n tachyonParticlesNoReset: {\r\n id: 21,\r\n description: \"Tachyon Particles no longer reset on Armageddon\",\r\n cost: 1e50,\r\n formatCost,\r\n }\r\n};\r\n","function rebuyableCost(initialCost, increment, id) {\r\n return initialCost * Math.pow(increment, player.celestials.teresa.perkShop[id]);\r\n}\r\nfunction rebuyable(config) {\r\n const { id, otherReq, cap, costCap, description, formatEffect, formatCost } = config;\r\n return {\r\n id,\r\n cost: () => (config.cost ? config.cost() : rebuyableCost(config.initialCost, config.increment, config.id)),\r\n otherReq,\r\n cap,\r\n costCap,\r\n description,\r\n effect: () => config.effect(player.celestials.teresa.perkShop[config.id]),\r\n formatEffect,\r\n formatCost,\r\n rebuyable: true\r\n };\r\n}\r\n\r\nexport const perkShop = {\r\n glyphLevel: rebuyable({\r\n id: 0,\r\n initialCost: 1,\r\n increment: 2,\r\n description: () => `Increase pre-instability Glyph levels by ${formatPercents(0.05)}`,\r\n effect: bought => Math.pow(1.05, bought),\r\n formatEffect: value => formatX(value, 2, 2),\r\n formatCost: value => format(value, 2),\r\n costCap: () => {\r\n let x = (Ra.unlocks.perkShopIncrease.canBeApplied ? 1048576 : 2048);\r\n if(CorruptionUpgrade(5).isBought) x = Math.pow(2, 65);\r\n return x;\r\n },\r\n cap: () => {\r\n let x = (Ra.unlocks.perkShopIncrease.canBeApplied ? Math.pow(1.05, 20) : Math.pow(1.05, 11));\r\n if(CorruptionUpgrade(5).isBought) x = Math.pow(1.05, 65);\r\n return x;\r\n }\r\n }),\r\n rmMult: rebuyable({\r\n id: 1,\r\n initialCost: 1,\r\n increment: 2,\r\n description: \"Double Reality Machine gain\",\r\n effect: bought => Math.pow(2, bought),\r\n formatEffect: value => formatX(value, 2),\r\n formatCost: value => format(value, 2),\r\n costCap: () => {\r\n let x = (Ra.unlocks.perkShopIncrease.canBeApplied ? 1048576 : 2048);\r\n if(CorruptionUpgrade(5).isBought) x = Math.pow(2, 65);\r\n return x;\r\n },\r\n cap: () => {\r\n let x = (Ra.unlocks.perkShopIncrease.canBeApplied ? 1048576 : 2048);\r\n if(CorruptionUpgrade(5).isBought) x = Math.pow(2, 65);\r\n return x;\r\n }\r\n }),\r\n bulkDilation: rebuyable({\r\n id: 2,\r\n initialCost: 100,\r\n increment: 2,\r\n description: \"Buy twice as many Dilation Upgrades at once.\",\r\n effect: bought => Math.pow(2, bought),\r\n formatEffect: value => formatX(value, 2),\r\n formatCost: value => format(value, 2),\r\n costCap: () => (Ra.unlocks.perkShopIncrease.canBeApplied ? 1638400 : 1600),\r\n cap: () => (Ra.unlocks.perkShopIncrease.canBeApplied ? 16384 : 16),\r\n }),\r\n autoSpeed: rebuyable({\r\n id: 3,\r\n initialCost: 1000,\r\n increment: 2,\r\n description: () => `Infinity Dimension, Time Dimension, Dilation,\r\n and Replicanti autobuyers are ${formatX(2)} faster.`,\r\n effect: bought => Math.pow(2, bought),\r\n formatEffect: value => formatX(value, 2),\r\n formatCost: value => format(value, 2),\r\n costCap: () => (Ra.unlocks.perkShopIncrease.canBeApplied ? 64000 : 4000),\r\n cap: () => (Ra.unlocks.perkShopIncrease.canBeApplied ? 64 : 4)\r\n }),\r\n musicGlyph: rebuyable({\r\n id: 4,\r\n description: () => `Receive a Music Glyph of a random type that is ${formatPercents(0.8)} of your highest level.\r\n (Try clicking it!)`,\r\n cost: () => 1,\r\n formatCost: value => formatInt(value),\r\n costCap: () => Number.MAX_VALUE,\r\n cap: () => Number.MAX_VALUE\r\n }),\r\n // Only appears with the perk shop increase upgrade\r\n fillMusicGlyph: rebuyable({\r\n id: 5,\r\n description: () => `Fill all empty slots in your inventory with Music Glyphs`,\r\n cost: () => Math.clampMin(GameCache.glyphInventorySpace.value, 1),\r\n otherReq: () => GameCache.glyphInventorySpace.value > 0,\r\n formatCost: value => formatInt(value),\r\n costCap: () => Number.MAX_VALUE,\r\n cap: () => Number.MAX_VALUE\r\n }),\r\n};\r\n","\r\nexport const ra = {\r\n pets: {\r\n teresa: {\r\n id: \"teresa\",\r\n name: \"Teresa\",\r\n color: \"#8596ea\",\r\n chunkGain: \"Eternity Points\",\r\n memoryGain: \"current RM\",\r\n secondaryMemoryChunkGain: \"Perk Points\",\r\n requiredUnlock: () => undefined,\r\n rawMemoryChunksPerSecond: () => {\r\n let x = Ra.unlocks.secondaryMemoryChunkGain.isUnlocked ? Math.max(Math.log10(Math.max(1, Currency.perkPoints.value))/2,1) : 1;\r\n return 4 * Math.pow((Ra.unlocks.improvedChunkGains.isUnlocked ? Math.max(Currency.eternityPoints.value.ln(), 0) : Currency.eternityPoints.value.pLog10()) / 1e4, 3) * x;\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 1) x*= CorruptionUpgrade(1).effectOrDefault(1);\r\n //if (Ra.currentCelestial === 7) x*= Ra.unlocks.boostMemoryGain.effectOrDefault(1);\r\n return Ra.unlocks.teresaXP.effectOrDefault(1) * x;\r\n }\r\n },\r\n effarig: {\r\n id: \"effarig\",\r\n name: \"Effarig\",\r\n color: \"#ea8585\",\r\n chunkGain: \"Relic Shards gained\",\r\n memoryGain: \"best Glyph level\",\r\n secondaryMemoryChunkGain: \"Glyph Sacrifice totals\",\r\n requiredUnlock: () => (MendingMilestone.ten.isReached ? undefined : Ra.unlocks.effarigUnlock),\r\n rawMemoryChunksPerSecond: () =>{\r\n let x = new Decimal(0);\r\n if(Ra.unlocks.secondaryMemoryChunkGain.isUnlocked){\r\n Object.values(player.reality.glyphs.sac).every(value => x = x.add(value))\r\n }\r\n x = x.div(7);\r\n let primeShardsGained=Effarig.shardsGained;\r\n let softcapedShardGained=1;\r\n if(primeShardsGained.gt(1e100)){\r\n softcapedShardGained = Decimal.pow(primeShardsGained.div(1e100),0.3);\r\n primeShardsGained = new Decimal(1e100);\r\n }\r\n return (Ra.unlocks.improvedChunkGains.isUnlocked ? 100 : 4) * Decimal.pow((primeShardsGained.times(softcapedShardGained)), (Ra.unlocks.unlockPelleContinuum.isUnlocked ? 0.105 : 0.1)).min(1e308).toNumber() * Math.max(1, Decimal.log10(x));\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 2) x*= CorruptionUpgrade(1).effectOrDefault(1);\r\n //if (Ra.currentCelestial === 7) x*= Ra.unlocks.boostMemoryGain.effectOrDefault(1);\r\n return Ra.unlocks.effarigXP.effectOrDefault(1) * x;\r\n }\r\n },\r\n enslaved: {\r\n id: \"enslaved\",\r\n name: \"The Nameless Ones\",\r\n color: \"#f1aa7f\",\r\n chunkGain: \"Time Shards\",\r\n memoryGain: \"total time played\",\r\n secondaryMemoryChunkGain: \"Game speed\",\r\n requiredUnlock: () => (MendingMilestone.ten.isReached ? undefined : Ra.unlocks.enslavedUnlock),\r\n rawMemoryChunksPerSecond: () =>{\r\n let x = Ra.unlocks.secondaryMemoryChunkGain.isUnlocked ? 1 + (Decimal.log10(Decimal.max(getGameSpeedupFactor(),1))/100) : 1;\r\n return Ra.unlocks.improvedChunkGains.isUnlocked ? 4 * Math.pow(Math.max(Currency.timeShards.value.ln(), 0) / 3e5, 2) * x : 4 * Math.pow(Currency.timeShards.value.pLog10() / 3e5, 2) * x;\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 3) x*= CorruptionUpgrade(1).effectOrDefault(1);\r\n //if (Ra.currentCelestial === 7) x*= Ra.unlocks.boostMemoryGain.effectOrDefault(1);\r\n return Ra.unlocks.enslavedXP.effectOrDefault(1) * x;\r\n }\r\n },\r\n v: {\r\n id: \"v\",\r\n name: \"V\",\r\n color: \"#ead584\",\r\n chunkGain: \"Infinity Power\",\r\n memoryGain: \"total Memory levels\",\r\n secondaryMemoryChunkGain: \"Achievement Multiplier for Dimensions\",\r\n requiredUnlock: () => (MendingMilestone.ten.isReached ? undefined : Ra.unlocks.vUnlock),\r\n rawMemoryChunksPerSecond: () =>{\r\n let x = Ra.unlocks.secondaryMemoryChunkGain.isUnlocked ? Decimal.max(1, Decimal.log10(Achievements.power)).times(4).toNumber() : 1;\r\n return Ra.unlocks.improvedChunkGains.isUnlocked ? 4 * Math.pow(Math.max(Currency.infinityPower.value.ln(),0) / 1e7, 1.5) *x : 4 * Math.pow(Currency.infinityPower.value.pLog10() / 1e7, 1.5) *x;\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 4) x*= CorruptionUpgrade(1).effectOrDefault(1);\r\n //if (Ra.currentCelestial === 7) x*= Ra.unlocks.boostMemoryGain.effectOrDefault(1);\r\n return Ra.unlocks.vXP.effectOrDefault(1) * x;\r\n }\r\n },\r\n ra: {\r\n id: \"ra\",\r\n name: \"Ra\",\r\n color: \"#9575cd\",\r\n chunkGain: \"Dimension Boosts\",\r\n memoryGain: \"current iM\",\r\n secondaryMemoryChunkGain: \"Total Celestial Memories\",\r\n requiredUnlock: () => (MendingUpgrade(19).isBought ? undefined : false),\r\n rawMemoryChunksPerSecond: () =>{\r\n let x = 0;\r\n if(Ra.unlocks.secondaryMemoryChunkGain.isUnlocked){\r\n x += Ra.pets.teresa.memories;\r\n x += Ra.pets.effarig.memories;\r\n x += Ra.pets.enslaved.memories;\r\n x += Ra.pets.v.memories\r\n x += Ra.pets.ra.memories\r\n x += Ra.pets.laitela.memories\r\n x += Ra.pets.pelle.memories\r\n }\r\n x /= 7e9;\r\n let primeAnswer=2 * Math.pow((DimBoost.purchasedBoosts + DimBoost.imaginaryBoosts)/(Ra.unlocks.generateMemChunksOutOfRasReality.isUnlocked ? 1e2 : 1.4e11), (Ra.unlocks.improvedChunkGains.isUnlocked ? 1.75 : 1.5)) * Math.max(Math.log10(Math.min(0, x)), 1);\r\n return primeAnswer;\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 5) x*= CorruptionUpgrade(1).effectOrDefault(1);\r\n //if (Ra.currentCelestial === 7) x*= Ra.unlocks.boostMemoryGain.effectOrDefault(1);\r\n return Ra.unlocks.raXP.effectOrDefault(1) * x;\r\n }\r\n },\r\n laitela: {\r\n id: \"laitela\",\r\n name: \"Lai'tela\",\r\n color: \"white\",\r\n chunkGain: \"Continuum\",\r\n memoryGain: \"Singularity amount\",\r\n secondaryMemoryChunkGain: \"Dark Matter\",\r\n requiredUnlock: () => (MendingUpgrade(19).isBought ? undefined : false),\r\n rawMemoryChunksPerSecond: () =>{\r\n let x = Ra.unlocks.secondaryMemoryChunkGain.isUnlocked ? Math.max(Decimal.log10(Currency.darkMatter.value) / 308, 1) : 1;\r\n let primeAnswer = (2 * Math.pow((AntimatterDimensions.all.reduce((totalContinuum,dim) => totalContinuum+dim.continuumValue, 0) + Tickspeed.continuumValue)/(Ra.unlocks.unlockDMD.isUnlocked ? 1e2 : 5e11), (Ra.unlocks.unlockPelleContinuum.isUnlocked ? 1.667 : 1.5))) * x;\r\n return primeAnswer;\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 6) x*= CorruptionUpgrade(1).effectOrDefault(1);\r\n //if (Ra.currentCelestial === 7) x*= Ra.unlocks.boostMemoryGain.effectOrDefault(1);\r\n return Ra.unlocks.laitelaXP.effectOrDefault(1) * x;\r\n }\r\n },\r\n pelle: {\r\n id: \"pelle\",\r\n name: \"Pelle\",\r\n color: \"crimson\",\r\n chunkGain: \"Remnants (Only increases in Doomed Reality)\",\r\n memoryGain: \"best Remnants without Galaxy Generator\",\r\n secondaryMemoryChunkGain: \"Reality Shards\",\r\n requiredUnlock: () => (MendingUpgrade(19).isBought ? undefined : false),\r\n rawMemoryChunksPerSecond: () =>{\r\n let x = Ra.unlocks.secondaryMemoryChunkGain.isUnlocked ? Math.max(Math.log10(Currency.realityShards.value.toNumber()), 1) : 1;\r\n let y = Ra.unlocks.improvedChunkGains.isUnlocked ? 1.05 : 1;\r\n return (x * player.celestials.pelle.remnants) ** y;\r\n },\r\n memoryProductionMultiplier: () => {\r\n let x = 1;\r\n //if (Ra.currentCelestial === 7) x*= (Ra.unlocks.boostMemoryGain.effectOrDefault(1) * CorruptionUpgrade(1).effectOrDefault(1));\r\n return Ra.unlocks.pelleXP.effectOrDefault(1) * x;\r\n }\r\n }\r\n },\r\n unlocks: {\r\n autoTP: {\r\n id: 0,\r\n reward: \"Tachyon Particles are given immediately when Time Dilation is active\",\r\n pet: \"teresa\",\r\n level: 1,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n chargedInfinityUpgrades: {\r\n id: 1,\r\n reward: () => `Unlock Charged Infinity Upgrades. You get one more maximum\r\n Charged Infinity Upgrade every ${formatInt(2)} levels`,\r\n effect: () => Math.min(12, Math.floor(Ra.pets.teresa.level / 2)),\r\n pet: \"teresa\",\r\n level: 2,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n teresaXP: {\r\n id: 2,\r\n reward: \"All Memory Chunks produce more Memories based on Reality Machines\",\r\n effect: () => 1 + Math.pow(Currency.realityMachines.value.pLog10() / 100, 0.5),\r\n pet: \"teresa\",\r\n level: 5,\r\n displayIcon: `Ϟ`\r\n },\r\n alteredGlyphs: {\r\n id: 3,\r\n reward: \"Unlock Altered Glyphs, which grant new effects to Glyphs based on Glyph Sacrifice\",\r\n pet: \"teresa\",\r\n level: 10,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n effarigUnlock: {\r\n id: 4,\r\n reward: \"Unlock Effarig's Memories\",\r\n pet: \"teresa\",\r\n level: 8,\r\n displayIcon: `Ϙ`\r\n },\r\n perkShopIncrease: {\r\n id: 5,\r\n reward: \"Purchase caps are raised in Teresa's Perk Point Shop\",\r\n pet: \"teresa\",\r\n level: 15,\r\n displayIcon: ``\r\n },\r\n unlockDilationStartingTP: {\r\n id: 6,\r\n reward: `In non-Celestial Realities, gain Tachyon Particles as if you reached the square root of your total\r\n antimatter in Dilation. Any multipliers to TP gain are applied retroactively, even outside Dilation`,\r\n effect: () => player.records.totalAntimatter.pow(0.5),\r\n pet: \"teresa\",\r\n level: 25,\r\n displayIcon: ``\r\n },\r\n extraGlyphChoicesAndRelicShardRarityAlwaysMax: {\r\n id: 7,\r\n reward: () => `Get ${formatX(2)} Glyph choices and the bonus to Glyph rarity from Relic Shards\r\n is always its maximum value`,\r\n effect: 2,\r\n pet: \"effarig\",\r\n level: 1,\r\n displayIcon: ``\r\n },\r\n unlockGlyphAlchemy: {\r\n id: 8,\r\n reward: `Unlock Glyph Alchemy, which adds alchemical resources you can increase by Refining Glyphs. You unlock\r\n more resources through Effarig levels. Access through a new Reality tab.`,\r\n pet: \"effarig\",\r\n level: 2,\r\n displayIcon: ``\r\n },\r\n effarigXP: {\r\n id: 9,\r\n reward: \"All Memory Chunks produce more Memories based on highest Glyph level\",\r\n effect: () => 1 + player.records.bestReality.glyphLevel / 7000,\r\n pet: \"effarig\",\r\n level: 5,\r\n displayIcon: ``\r\n },\r\n glyphEffectCount: {\r\n id: 10,\r\n reward: () => `Glyphs always have ${formatInt(4)} effects, and Effarig Glyphs can now have up to ${formatInt(7)}`,\r\n pet: \"effarig\",\r\n level: 10,\r\n displayIcon: ``\r\n },\r\n enslavedUnlock: {\r\n id: 11,\r\n reward: \"Unlock Nameless's Memories\",\r\n pet: \"effarig\",\r\n level: 8,\r\n displayIcon: `\\uf0c1`\r\n },\r\n relicShardGlyphLevelBoost: {\r\n id: 12,\r\n reward: \"Glyph level is increased based on Relic Shards gained\",\r\n effect: () => CorruptionUpgrade(7).isBought ? 1000 * Math.pow(Decimal.log2(Decimal.max(Effarig.shardsGained, 1)), 2) : 100 * Math.pow(Decimal.log10(Decimal.max(Effarig.shardsGained, 1)), 2)\r\n //if(CorruptionUpgrade(7).isBought) return 1000 * Math.pow(Decimal.log2(Decimal.max(Effarig.shardsGained, 1)), 2)\r\n ,\r\n pet: \"effarig\",\r\n level: 15,\r\n displayIcon: ``\r\n },\r\n maxGlyphRarityAndShardSacrificeBoost: {\r\n id: 13,\r\n reward: () => `Glyphs are always generated with ${formatPercents(1)} rarity and\r\n Glyph Sacrifice gain is raised to a power based on Relic Shards`,\r\n effect: () => 1 + Effarig.maxRarityBoost / 100,\r\n pet: \"effarig\",\r\n level: 25,\r\n displayIcon: ``\r\n },\r\n blackHolePowerAutobuyers: {\r\n id: 14,\r\n reward: \"Unlock Black Hole power upgrade autobuyers\",\r\n pet: \"enslaved\",\r\n level: 1,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n improvedStoredTime: {\r\n id: 15,\r\n reward: \"Stored game time is amplified and you can store more real time, increasing with Nameless levels\",\r\n effects: {\r\n gameTimeAmplification: () => Math.pow(20, Math.clampMax(Ra.pets.enslaved.level, Ra.levelCap)),\r\n realTimeCap: () => 1000 * 3600 * Ra.pets.enslaved.level,\r\n },\r\n pet: \"enslaved\",\r\n level: 2,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n enslavedXP: {\r\n id: 16,\r\n reward: \"All Memory Chunks produce more Memories based on total time played\",\r\n effect: () => 1 + Decimal.log10(player.records.totalTimePlayed) / 200,\r\n pet: \"enslaved\",\r\n level: 5,\r\n displayIcon: ``\r\n },\r\n autoPulseTime: {\r\n id: 17,\r\n reward: () => `Black Hole charging now only uses ${formatPercents(0.99)} of your game speed and you can\r\n automatically discharge ${formatPercents(0.01)} of your stored game time every ${formatInt(5)} ticks.`,\r\n pet: \"enslaved\",\r\n level: 10,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n vUnlock: {\r\n id: 18,\r\n reward: \"Unlock V's Memories\",\r\n pet: \"enslaved\",\r\n level: 8,\r\n displayIcon: `⌬`\r\n },\r\n peakGamespeedDT: {\r\n id: 19,\r\n reward: \"Gain more Dilated Time based on peak game speed in each Reality\",\r\n effect: () => Math.max(Math.pow(Decimal.log10(player.celestials.ra.peakGamespeed) - 90, 3), 1),\r\n pet: \"enslaved\",\r\n level: 15,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n allGamespeedGlyphs: {\r\n id: 20,\r\n reward: `All basic Glyphs gain the increased game speed effect from Time Glyphs,\r\n and Time Glyphs gain an additional effect`,\r\n pet: \"enslaved\",\r\n level: 25,\r\n displayIcon: ``,\r\n onUnlock: () => {\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n for (const glyph of allGlyphs) {\r\n Glyphs.applyGamespeed(glyph);\r\n }\r\n }\r\n },\r\n instantECAndRealityUpgradeAutobuyers: {\r\n id: 21,\r\n reward: \"Rebuyable Reality upgrades are bought automatically and Auto-Eternity Challenges happen instantly\",\r\n pet: \"v\",\r\n level: 1,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n autoUnlockDilation: {\r\n id: 22,\r\n reward: () => `In non-Celestial Realities, Time Dilation is unlocked automatically for free at\r\n ${formatInt(TimeStudy.dilation.totalTimeTheoremRequirement)} Time Theorems`,\r\n pet: \"v\",\r\n level: 2,\r\n displayIcon: ``\r\n },\r\n vXP: {\r\n id: 23,\r\n reward: \"All Memory Chunks produce more Memories based on total Celestial levels.\",\r\n effect: () => 1 + Ra.totalPetLevel / 50,\r\n pet: \"v\",\r\n level: 5,\r\n displayIcon: ``\r\n },\r\n unlockHardV: {\r\n id: 24,\r\n reward: () => `Unlock Hard V-Achievements and unlock a Triad Study every ${formatInt(6)} levels.\r\n Triad Studies are located at the bottom of the Time Studies page`,\r\n effect: () => Math.floor(Ra.pets.v.level / 6),\r\n pet: \"v\",\r\n level: 6,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n continuousTTBoost: {\r\n id: 25,\r\n reward: \"Time Theorems boost all forms of continuous non-dimension production\",\r\n effects: {\r\n ttGen: () => Decimal.pow(10, 5 * Ra.theoremBoostFactor()),\r\n eternity: () => Decimal.pow(10, 2 * Ra.theoremBoostFactor()),\r\n infinity: () => Decimal.pow(10, 15 * Ra.theoremBoostFactor()),\r\n replicanti: () => Decimal.pow(10, 20 * Ra.theoremBoostFactor()),\r\n dilatedTime: () => Decimal.pow(10, 3 * Ra.theoremBoostFactor()),\r\n memories: () => 1 + Ra.theoremBoostFactor() / 50,\r\n memoryChunks: () => 1 + Ra.theoremBoostFactor() / 50,\r\n autoPrestige: () => 1 + 2.4 * Ra.theoremBoostFactor()\r\n },\r\n pet: \"v\",\r\n level: 10,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n achievementTTMult: {\r\n id: 26,\r\n reward: \"Achievement multiplier applies to Time Theorem generation\",\r\n effect: () => Achievements.power,\r\n pet: \"v\",\r\n level: 15,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n achievementPower: {\r\n id: 27,\r\n reward: () => `Achievement multiplier is raised ${formatPow(1.5, 1, 1)}`,\r\n effect: 1.5,\r\n pet: \"v\",\r\n level: 25,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n imaginaryMachinesSetToCap: {\r\n id: 0,\r\n id2: 0,\r\n reward: \"Current Imaginary Machine amount is always set to cap\",\r\n pet: \"teresa\",\r\n level: 30,\r\n displayIcon: ``\r\n },\r\n chargedBreakInfinityUpgrades: {\r\n id: 1,\r\n id2: 0,\r\n reward: () => `Unlock Charged Break Infinity Upgrades. You get one more maximum\r\n Charged Break Infinity Upgrade every ${formatInt(6)} levels past ${formatInt(40)}`,\r\n effect: () => Math.min(9, Math.floor((Ra.pets.teresa.level-40) / 6 + 1)),\r\n pet: \"teresa\",\r\n level: 40,\r\n displayIcon: \"∝\",\r\n disabledByPelle: true\r\n },\r\n uncapGlyphSacEffects: {\r\n id: 2,\r\n id2: 0,\r\n reward: \"Some Glyph Sacrifice effects are uncapped\",\r\n pet: \"teresa\",\r\n level: 50,\r\n displayIcon: ``\r\n },\r\n retroactiveTeresaRealityReward: {\r\n id: 3,\r\n id2: 0,\r\n reward: () => `Your record antimatter in Teresa's Reality is retroactively set to the square root of your total antimatter`,\r\n pet: \"teresa\",\r\n level: 65,\r\n displayIcon: \"Ϟ\"\r\n },\r\n realityMachinesBoostIpAndEpGain: {\r\n id: 4,\r\n id2: 0,\r\n reward: \"Reality Machines boost Infinity Point and Eternity Point gain\",\r\n pet: \"teresa\",\r\n level: 75,\r\n displayIcon: ``,\r\n effect: () => Decimal.log10(Currency.realityMachines) / 100\r\n },\r\n realitiesBoostInfinityAndEternityProduction: {\r\n id: 5,\r\n id2: 0,\r\n reward: \"Realities boost Infinity and Eternity production\",\r\n pet: \"teresa\",\r\n level: 90,\r\n displayIcon: 'τ'\r\n },\r\n imaginaryBoost: {\r\n id: 6,\r\n id2: 0,\r\n reward: \"Imaginary Machine cap is affected by Elliptic Materiality at a reduced Rate\",\r\n pet: \"teresa\",\r\n level: 100,\r\n displayIcon: 'i',\r\n effect: () => Math.max(Math.log2(ImaginaryUpgrade(6).effectValue.log(10)), 1)\r\n },\r\n alchSetToCapAndCapIncrease: {\r\n id: 8,\r\n id2: 0,\r\n reward: () => `Alchemy passively occurs, and increase the hardcap by ${formatInt(5)} per level`,\r\n effect: () => 10 * Ra.pets.effarig.level,\r\n pet: \"effarig\",\r\n level: 30,\r\n displayIcon: ''\r\n },\r\n passiveRelicShardGain: {\r\n id: 9,\r\n id2: 0,\r\n reward: \"You gain 100% of relic shards on reality every second\",\r\n pet: \"effarig\",\r\n level: 40,\r\n displayIcon: ``\r\n },\r\n harshInstabilityDelay: {\r\n id: 10,\r\n id2: 0,\r\n reward: () => `Logarithmic glyph instability is delayed by ${formatInt(500)} for every ${formatInt(5)} levels past ${formatInt(50)}`,\r\n effect: () => 500*Math.floor((Ra.pets.effarig.level-50)/5),\r\n pet: \"effarig\",\r\n level: 50,\r\n displayIcon: ''\r\n },\r\n relicShardBoost: {\r\n id: 11,\r\n id2: 0,\r\n reward: \"Relic shards boost dimensional sacrifice, replicanti speed, infinity power conversion rate, tachyon particle to dilated time factor and time dimensions\",\r\n pet: \"effarig\",\r\n level: 65,\r\n displayIcon: ''\r\n },\r\n effarigGlyphIncreaseImCap: {\r\n id: 12,\r\n id2: 0,\r\n reward: \"Effarig Glyphs' first effect also increases Imaginary Machine cap\",\r\n pet: \"effarig\",\r\n level: 75,\r\n displayIcon: ``\r\n },\r\n maxGlyphRarityIncrease: {\r\n id: 13,\r\n id2: 0,\r\n reward: () => `Maximum Glyph rarity is increased by ${formatPercents(.02)} per level past ${formatInt(90)}`,\r\n effect: () => 2*(Ra.pets.effarig.level-90),\r\n pet: \"effarig\",\r\n level: 90,\r\n displayIcon: ``\r\n },\r\n effarigMendUnlock: {\r\n id: 14,\r\n id2: 0,\r\n reward: \"Unlock Effarig's Mend\",\r\n pet: \"effarig\",\r\n level: 100,\r\n displayIcon: `Ϙ`\r\n },\r\n uncapGamespeed: {\r\n id: 15,\r\n id2: 0,\r\n reward: \"Remove the 1e300 Gamespeed cap\",\r\n pet: \"enslaved\",\r\n level: 30,\r\n displayIcon: ``\r\n },\r\n uncap8TdPurchaseMult: {\r\n id: 16,\r\n id2: 0,\r\n reward: \"Uncap 8th Time Dimension purchase multiplier\",\r\n pet: \"enslaved\",\r\n level: 40,\r\n displayIcon: 'Δ'\r\n },\r\n unlock3rdBH: {\r\n id: 17,\r\n id2: 0,\r\n reward: \"Unlock the 3rd Black Hole which costs Imaginary Machines and boosts Game Speed exponentially instead of multiplicatively\",\r\n pet: \"enslaved\",\r\n level: 50,\r\n displayIcon: '',\r\n disabledByPelle: true\r\n },\r\n twinTachyonGalaxyCapIncrease: {\r\n id: 18,\r\n id2: 0,\r\n reward: \"Increase Pelle Tachyon Galaxy multiplier upgrade base based on Dilated Time\",\r\n pet: \"enslaved\",\r\n level: 65,\r\n displayIcon: '♅'\r\n },\r\n gamespeedGalaxyBoost: {\r\n id: 19,\r\n id2: 0,\r\n reward: \"Game Speed increases Galaxy strength\",\r\n pet: \"enslaved\",\r\n level: 75,\r\n displayIcon: '',\r\n effect: () => Math.max(1 ,1 + (Decimal.log10(getGameSpeedupFactor()) / 1000)) //this shouldn't be 100% until e1000 gamespeed\r\n },\r\n freeTickspeedSoftcapDelay: {\r\n id: 20,\r\n id2: 0,\r\n reward: \"Tesseracts increase free tickspeed upgrade softcap\",\r\n pet: \"enslaved\",\r\n level: 90,\r\n displayIcon: ''\r\n },\r\n improvedIpowConversion: {\r\n id: 21,\r\n id2: 0,\r\n reward: \"Improve Infinity Power conversion (based on effective Tesseract count)\",\r\n pet: \"enslaved\",\r\n level: 100,\r\n displayIcon: ``\r\n },\r\n improvedECRewards: {\r\n id: 22,\r\n id2: 0,\r\n reward: \"Each Eternity Challenge Gains an Additional Reward, Increasing Based on V Level and total Space Theorems\",\r\n pet: \"v\",\r\n level: 30,\r\n displayIcon: `⌬`,\r\n },\r\n unlockSHardV: {\r\n id: 23,\r\n id2: 0,\r\n reward: \"Unlock More Hard V-Achievements (not affected by Mending Upgrade 14, except Space Theorem gain), V's Superhard Reality (and assiocated Achievements) and more V-Milestones\",\r\n pet: \"v\",\r\n level: 40,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n vAchMilestone2AffectsIDsAndTDs: {\r\n id: 24,\r\n id2: 0,\r\n reward: \"The 5 V-Achievement milestone affects Infinity and Time Dimensions with reduced effect\",\r\n pet: \"v\",\r\n level: 50,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n repIncreasesAchMult: {\r\n id: 25,\r\n id2: 0,\r\n reward: \"Replicanti increases achievement multiplier\",\r\n pet: \"v\",\r\n level: 65,\r\n displayIcon: GLYPH_SYMBOLS.replication\r\n },\r\n totalSTBoostTTGen: {\r\n id: 26,\r\n id2: 0,\r\n reward: \"Total Space Theorems boost Time Theorem generation\",\r\n pet: \"v\",\r\n level: 75,\r\n displayIcon: ``\r\n },\r\n unlockMyriads: {\r\n id: 27,\r\n id2: 0,\r\n reward: \"Unlock a Myriad Study every 2 Memory Levels past 90\",\r\n pet: \"v\",\r\n level: 90,\r\n effect: () => Math.floor((Ra.pets.v.level - 90) / 2) + 1,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n achMultBaseImprovementV: {\r\n id: 28,\r\n id2: 0,\r\n reward: \"Improve Base Achievemnt Multiplier\",\r\n pet: \"v\",\r\n level: 100,\r\n displayIcon: ``\r\n },\r\n raRealUncapDimboost: {\r\n id: 29,\r\n id2: 0,\r\n reward: \"Uncap Dimension Boosts in Ra's reality\",\r\n pet: \"ra\",\r\n level: 1,\r\n displayIcon: GLYPH_SYMBOLS.power\r\n },\r\n rautobuyers: {\r\n id: 30,\r\n id2: 0,\r\n reward: \"(Kept without Ra 30) Unlock Autobuyers for Memory Levels, Recollections and Fragmentations\",\r\n pet: \"ra\",\r\n level: 2,\r\n displayIcon: ``\r\n },\r\n raXP: {\r\n id: 31,\r\n id2: 0,\r\n reward: \"All Memory Chunks produce more Memories based on Imaginary Machines\",\r\n pet: \"ra\",\r\n level: 5,\r\n displayIcon: ``,\r\n effect: () => Math.max(1, Math.pow(Math.log(Math.max(1,Currency.imaginaryMachines.value)), 0.5))\r\n },\r\n upgradesDontSpendMems: {\r\n id: 0,\r\n id2: 1,\r\n reward: \"Level Up, Recollection and Fragmentation don't spend memories\",\r\n pet: \"ra\",\r\n level: 8,\r\n displayIcon: ''\r\n },\r\n secondaryMemoryChunkGain: {\r\n id: 1,\r\n id2: 1,\r\n reward: \"Add a secondary source for Memory Chunk Gain for each Celestial\",\r\n pet: \"ra\",\r\n level: 10,\r\n displayIcon: ''\r\n },\r\n remembranceBoost: {\r\n id: 2,\r\n id2: 1,\r\n reward: \"Remembrance is ×15 as powerful\",\r\n pet: \"ra\",\r\n level: 15,\r\n displayIcon: ''\r\n },\r\n generateMemChunksOutOfRasReality: {\r\n id: 3,\r\n id2: 1,\r\n reward: \"You can generate Memory Chunks outside of Ra's reality at a heavily reduced rate. Improve Ra's memory chunk formula.\",\r\n pet: \"ra\",\r\n level: 25,\r\n displayIcon: 'Ϟ'\r\n },\r\n raNoReset: {\r\n id: 4,\r\n id2: 1,\r\n reward: \"Ra no longer resets on Mend\",\r\n pet: \"ra\",\r\n level: 30,\r\n displayIcon: ''\r\n },\r\n remembranceAlwaysActiveAndShopUnlock: {\r\n id: 5,\r\n id2: 1,\r\n reward: \"Remembrance has no downside, affects all celestials and is always active, unlock Ra's Shop\",\r\n pet: \"ra\",\r\n level: 40,\r\n displayIcon: ``\r\n },\r\n improvedChunkGains: {\r\n id: 6,\r\n id2: 1,\r\n reward: \"Base Memory Chunk formula for all Celestials is slightly improved\",\r\n pet: \"ra\",\r\n level: 50,\r\n displayIcon: ``\r\n },\r\n imaginaryBoostsRa: {\r\n id: 7,\r\n id2: 1,\r\n reward: \"Free Dimension Boosts are effective in Ra's Reality\",\r\n pet: \"ra\",\r\n level: 65,\r\n displayIcon: ``\r\n },\r\n freeDimBoosts: {\r\n id: 8,\r\n id2: 1,\r\n reward: \"Gain Free Dimension Boosts based on Ra Level\",\r\n pet: \"ra\",\r\n level: 75,\r\n displayIcon: ``,\r\n disabledByPelle: true\r\n },\r\n improvedPetUpgrades: {\r\n id: 9,\r\n id2: 1,\r\n reward: \"Unlock a new row of permenant upgrades in Ra's shop\",\r\n pet: \"ra\",\r\n level: 90,\r\n displayIcon: ``\r\n },\r\n mendingPointsGainMult: {\r\n id: 10,\r\n id2: 1,\r\n reward: \"Gain a Multiversal Remain Multiplier based on total Memory Levels\",\r\n pet: \"ra\",\r\n level: 100,\r\n displayIcon: ``\r\n },\r\n increaseDarkMatterCap: {\r\n id: 11,\r\n id2: 1,\r\n reward: \"Increase dark matter cap based on Laitela level\",\r\n effect: () => (Ra.pets.laitela.level),\r\n pet: \"laitela\",\r\n level: 1,\r\n displayIcon: 'ᛝ'\r\n },\r\n annihilationDarkEnergyBoost: {\r\n id: 12,\r\n id2: 1,\r\n reward: \"Annihilation increases dark energy production with reduced effect\",\r\n pet: \"laitela\",\r\n level: 2,\r\n displayIcon: ''\r\n },\r\n laitelaXP: {\r\n id: 13,\r\n id2: 1,\r\n reward: \"All Memory Chunks produce more Memories based on Singularities\",\r\n effect: () => Math.max(Math.log10(Currency.singularities.value) / 10, 1),\r\n pet: \"laitela\",\r\n level: 5,\r\n displayIcon: ''\r\n },\r\n totalAntimatterDarkMatterBoost: {\r\n id: 14,\r\n id2: 1,\r\n reward: \"Total Antimatter boosts dark matter gain\",\r\n pet: \"laitela\",\r\n level: 8,\r\n displayIcon: GLYPH_SYMBOLS.power\r\n },\r\n infinityPowerConversionBoost: {\r\n id: 15,\r\n id2: 1,\r\n reward:() => `Increase the base infinity power conversion by ${formatFloat(0.25, 2)} every ${formatInt(10)} levels`,\r\n effect: () => .25 * Math.floor(Ra.pets.laitela.level/10),\r\n pet: \"laitela\",\r\n level: 10,\r\n displayIcon: ``\r\n },\r\n passiveAnnihilationGen: {\r\n id: 16,\r\n id2: 1,\r\n reward: `Passively generate half of your Annihilation multiplier every second`,\r\n pet: \"laitela\",\r\n level: 15,\r\n displayIcon: ``\r\n },\r\n unlockDMD: {\r\n id: 17,\r\n id2: 1,\r\n reward: () => `Unlock a new Dark Matter Dimension every ${formatInt(25)} levels. Improve Lai'tela's memory chunk formula.`,\r\n pet: \"laitela\",\r\n level: 25,\r\n displayIcon: ``\r\n },\r\n continuumBoost: {\r\n id: 18,\r\n id2: 1,\r\n reward: () => `Improve Continuum effect for every ${format(\"1e308\")} Dark Matter`,\r\n pet: \"laitela\",\r\n level: 30,\r\n displayIcon: ''\r\n },\r\n increaseSingLimits: {\r\n id: 19,\r\n id2: 1,\r\n reward: () => `You can increase the max singularity cap by ${formatInt(2)} every ${formatInt(5)} levels`,\r\n pet: \"laitela\",\r\n level: 40,\r\n displayIcon: ''\r\n },\r\n dmdAuto1: {\r\n id: 20,\r\n id2: 1,\r\n reward: \"(Kept without Ra 30) Unlock Permanent autobuyers for all Dark Matter Dimensions\",\r\n pet: \"laitela\",\r\n level: 50,\r\n displayIcon: ``\r\n },\r\n dmdAuto2: {\r\n id: 21,\r\n id2: 1,\r\n reward: \"(Kept without Ra 30) Unlock Permanent autobuyers for Annihilation, Singularities and Singularity Caps. Manual Annihilations are 500x stronger.\",\r\n pet: \"laitela\",\r\n level: 65,\r\n displayIcon: `` \r\n },\r\n continuumAffectsIDsAndTDs: {\r\n id: 22,\r\n id2: 1,\r\n reward: \"Continuum affects Infinity and Time Dimensions (With reduced effect)\",\r\n pet: \"laitela\",\r\n level: 75,\r\n displayIcon: ``\r\n },\r\n dmdScaling: {\r\n id: 23,\r\n id2: 1,\r\n reward: \"Entropic Condensing is far stronger.\",\r\n pet: \"laitela\",\r\n level: 90,\r\n displayIcon: ``\r\n },\r\n unlockMultiversalDimensions: {\r\n id: 24,\r\n id2: 1,\r\n reward: \"Unlock Multiversal Dimensions\",\r\n pet: \"laitela\",\r\n level: 100,\r\n displayIcon: ''\r\n },\r\n pelleAutobuyers: {\r\n id: 25,\r\n id2: 1,\r\n reward: \"Pelle Upgrades are purchased automatically\",\r\n pet: \"pelle\",\r\n level: 1,\r\n displayIcon: ``\r\n },\r\n boostMVRGain: {\r\n id: 26,\r\n id2: 1,\r\n reward: \"Triple Multiversal Remain gain when Mending in a Doomed Reality, you can now fill up to 5 rifts at once\",\r\n effect: () => Pelle.isDoomed ? 3 : 1,\r\n pet: \"pelle\",\r\n level: 2,\r\n displayIcon: ''\r\n },\r\n pelleXP: {\r\n id: 27,\r\n id2: 1,\r\n reward: \"All Memory Chunks produce more Memories based on highest Remnants without Galaxy Generator.\",\r\n effect: () => Math.max(Math.log10(player.records.thisReality.remWithoutGG)/2, 1),\r\n pet: \"pelle\",\r\n level: 5,\r\n displayIcon: '♅'\r\n },\r\n unlockPelleTPMult: {\r\n id: 28,\r\n id2: 1,\r\n reward: \"Re-enable Tachyon Particle Multiplier in Doomed Reality, but it's decreased to ×1.1\",\r\n pet: \"pelle\",\r\n level: 8,\r\n displayIcon: GLYPH_SYMBOLS.dilation\r\n },\r\n exitDoom: {\r\n id: 29,\r\n id2: 1,\r\n reward: \"Doomed Reality can be exitied, but it causes a Mending Reset (with no benefits)\",\r\n pet: \"pelle\",\r\n level: 10,\r\n displayIcon: ''\r\n },\r\n unlockPelleIPAndEPMult: {\r\n id: 30,\r\n id2: 1,\r\n reward: \"Doomed Reality no longer disables rebuyable IP and EP multipliers, but they are decreased to ×1.01 and ×1.5 respectively\",\r\n pet: \"pelle\",\r\n level: 15,\r\n displayIcon: ``\r\n },\r\n unlockPelleGlyphEffects: {\r\n id: 31,\r\n id2: 1,\r\n reward: \"Baisc Glyphs' disabled effects are re-enabled in Doomed Reality.\",\r\n pet: \"pelle\",\r\n level: 25,\r\n displayIcon: ``\r\n },\r\n boostMemoryGain: {\r\n id: 0,\r\n id2: 2,\r\n reward: \"Memory Gain for all Celestials is boosted in Doomed Reality\",\r\n pet: \"pelle\",\r\n level: 30,\r\n displayIcon: ``,\r\n effect: 500\r\n },\r\n unlockPelleContinuum: {\r\n id: 1,\r\n id2: 2,\r\n reward: \"Continuum is re-enabled in Doomed Reality, but is severely weakened, and only effective for Antimatter Dimensions\",\r\n pet: \"pelle\",\r\n level: 40,\r\n displayIcon: ``\r\n },\r\n pelleRarityBoost: {\r\n id: 2,\r\n id2: 2,\r\n reward: \"Glyph Rarity in Doomed Reality is boosted based on Memory Levels past 50\",\r\n pet: \"pelle\",\r\n level: 50,\r\n displayIcon: ``\r\n },\r\n omegaScalingBuff: {\r\n id: 3,\r\n id2: 2,\r\n reward: \"Make the scaling at glyph level 100,000 weaker.\",\r\n pet: \"pelle\",\r\n level: 65,\r\n displayIcon: ``\r\n },\r\n Hostility: {\r\n id: 4,\r\n id2: 2,\r\n reward: () => Ra.unlocks.Hostility.isUnlocked ? \"Unlock Hostilities\" : \"Reach Pelle 75 to see reward\",\r\n pet: \"pelle\",\r\n level: 75,\r\n displayIcon: () => Ra.unlocks.Hostility.isUnlocked ?``:\"?\"\r\n },\r\n DimLimitCorruptionImprovementPelle: {\r\n id: 5,\r\n id2: 2,\r\n reward: () => Ra.unlocks.Hostility.isUnlocked ? \"Make Dimensional Limitations slightly Weaker\" : \"Reach Pelle 75 to see reward\",\r\n pet: \"pelle\",\r\n level: 90,\r\n displayIcon: () => Ra.unlocks.Hostility.isUnlocked ?``:\"?\"\r\n },\r\n kohlersRealmUnlock: {\r\n id: 6,\r\n id2: 2,\r\n reward: () => {\r\n const remainingLevels = 600 - (Ra.totalPetLevel-Ra.pets.pelle.level);\r\n const remainingText = remainingLevels===0?\"\":` (Requires all celestials to be level ${formatInt(100)}, ${quantifyInt(\"level\", remainingLevels)} remaining)`;\r\n const kohlerUnlocked = Ra.unlocks.kohlersRealmUnlock.isUnlocked;\r\n const kohlerName = processText(\"Kohler\", makeGarbledTemplate(\"Kohler\"), kohlerUnlocked);\r\n return `Unlock ${kohlerName}'s Realm${remainingText}`;\r\n },\r\n pet: \"pelle\",\r\n level: 100,\r\n displayIcon: () => Ra.unlocks.kohlersRealmUnlock.isUnlocked?``:\"?\"\r\n },\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport wordShift from \"../../word-shift\";\r\n\r\nexport const pelleRifts = {\r\n vacuum: {\r\n id: 1,\r\n key: \"vacuum\",\r\n name: [\"Vacuum\", \"Hollow\", \"Void\"],\r\n drainResource: \"IP\",\r\n baseEffect: x => `IP gain ${formatX(x, 2, 2)}`,\r\n additionalEffects: () => [PelleRifts.vacuum.milestones[2]],\r\n strike: () => PelleStrikes.infinity,\r\n percentage: totalFill => Math.log10(totalFill.plus(1).log10() * 10 + 1) ** 2.5 / 100,\r\n percentageToFill: percentage => Decimal.pow(10,\r\n Decimal.pow(10, (percentage * 100) ** (1 / 2.5)).div(10).minus(0.1)\r\n ).minus(1),\r\n effect: totalFill => {\r\n if (player.challenge.eternity.current !== 0) {\r\n const chall = EternityChallenge.current;\r\n const goal = chall.goalAtCompletions(chall.gainedCompletionStatus.totalCompletions);\r\n return totalFill.plus(1).pow(0.1).min(goal.pow(0.15));\r\n }\r\n return totalFill.plus(1).pow(0.33);\r\n },\r\n currency: () => Currency.infinityPoints,\r\n galaxyGeneratorThreshold: 1000,\r\n milestones: [\r\n {\r\n resource: \"vacuum\",\r\n requirement: 0.04,\r\n description: \"You can equip a single basic Glyph with decreased level and rarity\"\r\n },\r\n {\r\n resource: \"vacuum\",\r\n requirement: 0.06,\r\n description: () => `Uncap Replicanti and make its unlock and upgrades ${formatX(1e130)} cheaper`,\r\n effect: () => 1e130\r\n },\r\n {\r\n resource: \"vacuum\",\r\n requirement: 0.4,\r\n description: () => `${wordShift.wordCycle(PelleRifts.vacuum.name)} also affects EP gain`,\r\n effect: () => Decimal.pow(4, PelleRifts.vacuum.totalFill.log10() / 2 / 308 + 3),\r\n formatEffect: x => `EP gain ${formatX(x, 2, 2)}`\r\n },\r\n ],\r\n galaxyGeneratorText: \"There is not enough space left for more, you must fill in the $value\"\r\n },\r\n decay: {\r\n id: 2,\r\n key: \"decay\",\r\n name: [\"Decay\", \"Collapse\", \"Disarray\"],\r\n drainResource: \"Replicanti\",\r\n spendable: true,\r\n baseEffect: x => `Replicanti speed ${formatX(x, 2, 2)}`,\r\n additionalEffects: () => [PelleRifts.decay.milestones[0], PelleRifts.decay.milestones[2]],\r\n strike: () => PelleStrikes.powerGalaxies,\r\n // 0 - 1\r\n percentage: totalFill => totalFill.plus(1).log10() * 0.05 / 100,\r\n // 0 - 1\r\n percentageToFill: percentage => Decimal.pow(10, 20 * percentage * 100).minus(1),\r\n effect: totalFill => (PelleRifts.chaos.milestones[0].canBeApplied\r\n ? Decimal.sqrt(2000 + 1) : Decimal.sqrt(totalFill.plus(1).log10() + 1)),\r\n currency: () => Currency.replicanti,\r\n galaxyGeneratorThreshold: 1e7,\r\n milestones: [\r\n {\r\n resource: \"decay\",\r\n requirement: 0.2,\r\n description: \"First rebuyable Pelle upgrade also affects 1st Infinity Dimension\",\r\n effect: () => {\r\n let x = player.celestials.pelle.rebuyables.antimatterDimensionMult;\r\n if(x<9) x=9;\r\n return Decimal.pow(1e50, x - 9);\r\n },\r\n formatEffect: x => `1st Infinity Dimension ${formatX(x, 2, 2)}`\r\n },\r\n {\r\n resource: \"decay\",\r\n requirement: 0.6,\r\n description: () => `When Replicanti exceeds ${format(DC.E1300)},\r\n all Galaxies are ${formatPercents(0.1)} more effective`,\r\n effect: () => (Replicanti.amount.gt(DC.E1300) ? 1.1 : 1)\r\n },\r\n {\r\n resource: \"decay\",\r\n requirement: 1,\r\n description: \"Increase max Replicanti Galaxies based on total Rift milestones\",\r\n effect: () => {\r\n const x = PelleRifts.totalMilestones();\r\n return x ** 2 - 2 * x;\r\n },\r\n formatEffect: x => `Max RG count +${formatInt(x)}`\r\n },\r\n ],\r\n galaxyGeneratorText: \"There's not enough antimatter to form new Galaxies, you need to reverse the $value\"\r\n },\r\n chaos: {\r\n id: 3,\r\n key: \"chaos\",\r\n name: [\"Chaos\", \"Disorder\", \"Impurity\"],\r\n drainResource: [\"Decay\", \"Collapse\", \"Disarray\"],\r\n baseEffect: x => `Time Dimensions ${formatX(x, 2, 2)}`,\r\n strike: () => PelleStrikes.eternity,\r\n percentage: totalFill => totalFill / 10,\r\n percentageToFill: percentage => 10 * percentage,\r\n effect: totalFill => {\r\n const fill = totalFill > 6.5\r\n ? (totalFill - 6.5) / 7 + 6.5\r\n : totalFill;\r\n return Decimal.pow(6, Decimal.pow(6, Decimal.pow(6, fill / 10 + 0.1)).minus(6))\r\n .div(1e5)\r\n .plus(Decimal.pow(10, fill / 10 + 0.1));\r\n },\r\n currency: () => ({\r\n get value() {\r\n return PelleRifts.decay.percentage;\r\n },\r\n set value(val) {\r\n const spent = PelleRifts.decay.percentage - val;\r\n player.celestials.pelle.rifts.decay.percentageSpent += spent;\r\n }\r\n }),\r\n galaxyGeneratorThreshold: 1e9,\r\n milestones: [\r\n {\r\n resource: \"chaos\",\r\n requirement: 0.09,\r\n description: () => `${wordShift.wordCycle(PelleRifts.decay.name)} \\\r\n effect is always maxed and milestones always active`\r\n },\r\n {\r\n resource: \"chaos\",\r\n requirement: 0.15,\r\n description: \"Glyphs gain a new Pelle-specific effect\",\r\n },\r\n {\r\n resource: \"chaos\",\r\n requirement: 1,\r\n description: () => `You gain ${formatPercents(0.01)} of your EP gained on Eternity per second`,\r\n },\r\n ],\r\n galaxyGeneratorText: \"Your Galaxies are too fragmented, you must stabilize the $value\"\r\n },\r\n recursion: {\r\n id: 4,\r\n key: \"recursion\",\r\n name: [\"Recursion\", \"Dispersion\", \"Destruction\"],\r\n drainResource: \"EP\",\r\n baseEffect: x => `EP formula: log(x)/${formatInt(308)} ➜ log(x)/${formatFloat(308 - x.toNumber(), 2)}`,\r\n additionalEffects: () => [PelleRifts.recursion.milestones[0], PelleRifts.recursion.milestones[1]],\r\n strike: () => PelleStrikes.ECs,\r\n percentage: totalFill => totalFill.plus(1).log10() ** 0.4 / 4000 ** 0.4,\r\n percentageToFill: percentage => Decimal.pow(10, percentage ** 2.5 * 4000).minus(1),\r\n effect: totalFill => new Decimal(58 * totalFill.plus(1).log10() ** 0.2 / 4000 ** 0.2),\r\n currency: () => Currency.eternityPoints,\r\n galaxyGeneratorThreshold: 1e10,\r\n milestones: [\r\n {\r\n resource: \"recursion\",\r\n requirement: 0.10,\r\n description: \"Dimensional Boosts are more powerful based on EC completions\",\r\n effect: () => Math.max(100 * EternityChallenges.completions ** 2, 1) *\r\n Math.max(1e4 ** (EternityChallenges.completions - 40), 1),\r\n formatEffect: x => `Dimension Boost power ${formatX(x, 2, 2)}`\r\n },\r\n {\r\n resource: \"recursion\",\r\n requirement: 0.15,\r\n description: \"Infinity Dimensions are stronger based on EC completions\",\r\n effect: () => Decimal.pow(\"1e1500\", ((EternityChallenges.completions - 25) / 20) ** 1.7).max(1),\r\n formatEffect: x => `Infinity Dimensions ${formatX(x)}`\r\n },\r\n {\r\n resource: \"recursion\",\r\n requirement: 1,\r\n description: \"Permanently unlock the Galaxy Generator\",\r\n },\r\n ],\r\n galaxyGeneratorText: \"Creating more Galaxies is unsustainable, you must focus the $value to allow more\"\r\n },\r\n paradox: {\r\n id: 5,\r\n key: \"paradox\",\r\n name: [\"Paradox\", \"Contradiction\", \"Fallacy\"],\r\n drainResource: \"Dilated Time\",\r\n baseEffect: x => `All Dimensions ${formatPow(x, 2, 3)}`,\r\n additionalEffects: () => [PelleRifts.paradox.milestones[2]],\r\n strike: () => PelleStrikes.dilation,\r\n percentage: totalFill => totalFill.plus(1).log10() / 100,\r\n percentageToFill: percentage => Decimal.pow10(percentage * 100).minus(1),\r\n effect: totalFill => new Decimal(1 + totalFill.plus(1).log10() * 0.004),\r\n currency: () => Currency.dilatedTime,\r\n galaxyGeneratorThreshold: 1e5,\r\n milestones: [\r\n {\r\n resource: \"paradox\",\r\n requirement: 0.15,\r\n description: \"Time Dimensions 5-8 are much cheaper, unlock more Dilation upgrades\",\r\n // FIXME: Not a great solution\r\n onStateChange: () => {\r\n updateTimeDimensionCosts();\r\n }\r\n },\r\n {\r\n resource: \"paradox\",\r\n requirement: 0.25,\r\n description: () => `Dilated Time gain becomes Tachyon Particles ${formatPow(1.4, 1, 1)}`,\r\n effect: 1.4\r\n },\r\n {\r\n resource: \"paradox\",\r\n requirement: 0.5,\r\n description: \"Dilation rebuyable purchase count improves Infinity Power conversion rate\",\r\n effect: () => Math.min(\r\n 1.1 ** (Object.values(player.dilation.rebuyables).sum() - 90),\r\n 712\r\n ),\r\n formatEffect: x => `Infinity Power Conversion ${formatX(x, 2, 2)}`\r\n },\r\n ],\r\n galaxyGeneratorText: \"It should be possible to create more, but Pelle has restricted you. Disregard the $value\"\r\n }\r\n};\r\n","// Used for UI purposes to give different theming for different kinds of upgrades\r\nexport const LAITELA_UPGRADE_DIRECTION = {\r\n SELF_BOOST: 0,\r\n BOOSTS_MAIN: 1,\r\n BOOSTS_LAITELA: 2\r\n};\r\n\r\nexport const singularityMilestones = {\r\n // Infinite\r\n continuumMult: {\r\n start: 1,\r\n repeat: 125,\r\n increaseThreshold: 20,\r\n limit: Infinity,\r\n description: \"Continuum percentage multiplier\",\r\n effect: completions => completions * 0.03,\r\n effectFormat: x => formatX(1 + x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n darkMatterMult: {\r\n start: 2,\r\n repeat: 20,\r\n increaseThreshold: 30,\r\n limit: Infinity,\r\n description: \"Dark Matter production multiplier\",\r\n effect: completions => Math.pow(1.5, completions),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n darkEnergyMult: {\r\n start: 3,\r\n repeat: 120,\r\n increaseThreshold: 10,\r\n limit: Infinity,\r\n description: \"Dark Energy production multiplier\",\r\n effect: completions => Math.pow(2, completions),\r\n effectFormat: x => formatX(x, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n darkDimensionCostReduction: {\r\n start: 4,\r\n repeat: 40,\r\n increaseThreshold: 25,\r\n limit: Infinity,\r\n description: \"Dark Matter Dimension upgrades are cheaper\",\r\n effect: completions => Math.pow(0.4, completions),\r\n effectFormat: x => `/ ${format(1 / x, 2, 2)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n singularityMult: {\r\n id: 5,\r\n start: 50,\r\n repeat: 3000,\r\n increaseThreshold: 5,\r\n limit: Infinity,\r\n description: \"Singularity gain multiplier\",\r\n effect: completions => Math.pow(2, completions),\r\n effectFormat: x => formatX(x, 2, 0),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n darkDimensionIntervalReduction: {\r\n start: 10,\r\n repeat: 100,\r\n increaseThreshold: 20,\r\n limit: Infinity,\r\n description: \"Dark Matter Dimension interval decrease\",\r\n effect: completions => Math.pow(0.6, completions),\r\n effectFormat: x => `/ ${format(1 / x, 2, 2)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n improvedAscensionDM: {\r\n start: 200000,\r\n repeat: 4000,\r\n increaseThreshold: 15,\r\n limit: Infinity,\r\n description: \"Ascension affects Dark Matter production more\",\r\n effect: completions => 100 * completions,\r\n effectFormat: x => formatX(POWER_DM_PER_ASCENSION + x, 1, 0),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n // Limited\r\n ascensionIntervalScaling: {\r\n start: 1.2e5,\r\n repeat: 2400,\r\n limit: 8,\r\n description: \"Dark Matter Dimensions Ascension increases the interval less\",\r\n effect: completions => 1200 - 50 * completions,\r\n effectFormat: x => `×${formatInt(x)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n autoCondense: {\r\n start: 8,\r\n repeat: 80,\r\n limit: 8,\r\n description: \"Automatically condense Singularities when reaching a threshold above the cap\",\r\n effect: completions => [Infinity, 1.3, 1.22, 1.15, 1.1, 1.06, 1.03, 1.01, 1][completions],\r\n effectFormat: x => `Cap ${formatX(x, 2, 2)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n darkDimensionAutobuyers: {\r\n start: 30,\r\n repeat: 170,\r\n limit: 4,\r\n description: \"Dark Matter Dimension Autobuyers\",\r\n effect: completions => completions,\r\n effectFormat: x => ((x === 0) ? \"No autobuyers\" : `Autobuy up to the ${[\"1st\", \"2nd\", \"3rd\", \"4th\"][x - 1]} DMD`),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n ascensionAutobuyers: {\r\n start: 1e8,\r\n repeat: 140,\r\n limit: 4,\r\n description: \"DMD Ascension Autobuyers\",\r\n effect: completions => completions,\r\n effectFormat: x => ((x === 0) ? \"No autobuyers\" : `Ascend up to the ${[\"1st\", \"2nd\", \"3rd\", \"4th\"][x - 1]} DMD`),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n darkAutobuyerSpeed: {\r\n start: 45,\r\n repeat: 650,\r\n limit: 8,\r\n description: \"Autobuyer speed for all DMD Autobuyers\",\r\n effect: completions => [30, 20, 15, 10, 5, 3, 2, 1, 0][completions],\r\n effectFormat: x => (x === 0 ? \"Instant\" : `${formatInt(x)}s`),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n realityDEMultiplier: {\r\n start: 1500,\r\n repeat: 10000,\r\n limit: 6,\r\n description: \"Dark Energy multiplier based on disabled Dimension count within Lai'tela\",\r\n effect: completions => Math.pow(1 + 0.05 * completions, Laitela.difficultyTier),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n improvedSingularityCap: {\r\n start: 150,\r\n repeat: 10000,\r\n limit: 4,\r\n description: \"Increased Singularity gain per cap increase\",\r\n effect: completions => 11 + completions,\r\n effectFormat: x => `${formatX(x)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n intervalCostScalingReduction: {\r\n start: 130000,\r\n repeat: 50000,\r\n limit: 5,\r\n description: \"DMD Interval cost scaling is better\",\r\n effect: completions => 1 - 0.03 * completions,\r\n effectFormat: x => `${formatPow(x, 2, 2)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n // Unique\r\n darkFromTesseracts: {\r\n start: 80,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Tesseracts boost Dark Matter and Dark Energy production\",\r\n effect: () => Math.pow(1.1, Tesseracts.effectiveCount),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_LAITELA,\r\n },\r\n multFromInfinitied: {\r\n start: 3000,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Infinities boost Dark Matter and Dark Energy production\",\r\n effect: () => Math.clampMin(Currency.infinitiesTotal.value.pLog10() / 1000, 1),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_LAITELA,\r\n },\r\n dilatedTimeFromSingularities: {\r\n start: 8e4,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Singularities improve the repeatable Dilated Time multiplier upgrade\",\r\n // Note that at ~2.15x this causes a runaway purely because of cost scaling\r\n effect: () => 1 + Math.clampMax(Math.log10(Currency.singularities.value) / 100, 0.35),\r\n effectFormat: x => `${formatX(2)} ➜ ${formatX(2 * Math.clampMin(x, 1), 2, 2)}`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n darkFromGlyphLevel: {\r\n start: 3e6,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Boost Dark Matter and Dark Energy production based on highest Glyph level\",\r\n effect: () => Math.pow(Math.clampMin((player.records.bestReality.glyphLevel - 15000) / 2000, 1), 0.5),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_LAITELA,\r\n },\r\n gamespeedFromSingularities: {\r\n start: 8e7,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Singularities boost game speed\",\r\n effect: () => Math.clampMin(Math.pow(Math.log10(Currency.singularities.value), 3), 1),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n darkFromTheorems: {\r\n start: 3e9,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Time Theorems boost Dark Matter and Dark Energy gain\",\r\n effect: () => Math.sqrt(Math.clampMin((Currency.timeTheorems.value.log10() - 1000) / 50, 1)),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_LAITELA,\r\n },\r\n dim4Generation: {\r\n start: 5e11,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Annihilation mult. generates 4th DMD when Annihilation is available\",\r\n effect: () => Laitela.darkMatterMult,\r\n effectFormat: x => `${format(x, 2, 1)}/s`,\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n darkFromDM4: {\r\n start: 5e12,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"4th Dark Matter Dimension amount boosts Dark Matter and Dark Energy gain\",\r\n effect: () => Math.clampMin(DarkMatterDimension(4).amount.pow(0.03).toNumber(), 1),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n annihilationAutobuyer: {\r\n start: 4e18,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Unlock an Autobuyer for Annihilation\",\r\n effect: completions => completions,\r\n effectFormat: x => (x === 1 ? \"Unlocked\" : \"Locked\"),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.SELF_BOOST,\r\n },\r\n theoremPowerFromSingularities: {\r\n start: 3e21,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Singularities give a power effect to Time Theorem gain\",\r\n effect: () => 1 + Math.log10(Currency.singularities.value + 1) / 70,\r\n effectFormat: x => formatPow(x, 2, 3),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n darkFromGamespeed: {\r\n start: 8e22,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Game speed boosts Dark Matter and Dark Energy production\",\r\n effect: () => Math.clampMin(Decimal.log10(getGameSpeedupFactor().div(1e120)) / 40, 1),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_LAITELA,\r\n },\r\n glyphLevelFromSingularities: {\r\n start: 3e24,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Singularities boost pre-instability Glyph level\",\r\n effect: () => 1 + Math.clampMin((Math.log10(Currency.singularities.value) - 20) / 30, 0),\r\n effectFormat: x => formatX(Math.clampMin(x, 1), 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n darkFromDilatedTime: {\r\n start: 8e33,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Dilated Time boosts Dark Matter production\",\r\n effect: () => Math.pow(1.6, Decimal.log10(Currency.dilatedTime.value.plus(1)) / 1000),\r\n effectFormat: x => formatX(x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_LAITELA,\r\n },\r\n infinitiedPow: {\r\n start: 3e38,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Infinities gain a power effect based on Singularities\",\r\n effect: () => 1 + Math.log10(Currency.singularities.value + 1) / 300,\r\n effectFormat: x => formatPow(x, 2, 3),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n tesseractMultFromSingularities: {\r\n start: 2.5e45,\r\n repeat: 0,\r\n limit: 1,\r\n description: \"Singularities increase effective Tesseract count\",\r\n effect: () => 1 + Math.log10(Currency.singularities.value) / 80,\r\n effectFormat: x => formatX(Math.clampMin(x, 1), 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n }\r\n};\r\n\r\n/*export const laitelaUpgradeExtrasingularityMilestones = {\r\n // Infinite\r\n darkMatterCapIncrease: {\r\n start: 1e300,\r\n repeat: 125,\r\n increaseThreshold: 20,\r\n limit: Infinity,\r\n description: \"Increas Dark Matter Cap\",\r\n effect: completions => 10**completions,\r\n effectFormat: x => formatX(1 + x, 2, 2),\r\n upgradeDirection: LAITELA_UPGRADE_DIRECTION.BOOSTS_MAIN,\r\n },\r\n};*/\r\n","import { DC } from \"../../constants\";\r\nimport wordShift from \"../../word-shift\";\r\n\r\nexport const pelleStrikes = {\r\n infinity: {\r\n id: 1,\r\n requirementDescription: \"Reach Infinity\",\r\n penaltyDescription: () => MendingUpgrade(10).isBought ? `Antimatter Dimensions are raised to ${formatPow(0.7, 1, 1)} (Reduced by Mending Upgrade 10)` : `Antimatter Dimensions are raised to ${formatPow(0.5, 1, 1)}`,\r\n rewardDescription: () => `Unlock ${wordShift.wordCycle(PelleRifts.vacuum.name)}\r\n and get a permanent Infinity Autobuyer`,\r\n rift: () => PelleRifts.vacuum\r\n },\r\n powerGalaxies: {\r\n id: 2,\r\n requirementDescription: \"Power-up Galaxies\",\r\n penaltyDescription: () => MendingUpgrade(10).isBought ? `Infinity Dimensions are raised to ${formatPow(0.7, 1, 1)} (Reduced by Mending Upgrade 10)` : `Infinity Dimensions are raised to ${formatPow(0.5, 1, 1)}`,\r\n rewardDescription: () => `Unlock ${wordShift.wordCycle(PelleRifts.decay.name)}`,\r\n rift: () => PelleRifts.decay\r\n },\r\n eternity: {\r\n id: 3,\r\n requirementDescription: \"Reach Eternity\",\r\n penaltyDescription: () => MendingUpgrade(10).isBought ? `Replicanti speed slows down ${formatX(6)}/${format(DC.C2P1024)} above ${format(DC.E2000)}` : `Replicanti speed slows down ${formatX(10)}/${format(DC.C2P1024)} above ${format(DC.E2000)}`,\r\n rewardDescription: () => `Unlock ${wordShift.wordCycle(PelleRifts.chaos.name)}`,\r\n rift: () => PelleRifts.chaos\r\n },\r\n ECs: {\r\n id: 4,\r\n requirementDescription: () => `Reach ${formatInt(115)} TT`,\r\n penaltyDescription: () => `In Eternity Challenges, ${wordShift.wordCycle(PelleRifts.vacuum.name)}\r\n IP multiplier is only ${formatPercents(0.3)} as strong and capped at ${formatPercents(0.15)}\r\n of the goal`,\r\n rewardDescription: () => `Unlock ${wordShift.wordCycle(PelleRifts.recursion.name)}`,\r\n rift: () => PelleRifts.recursion\r\n },\r\n dilation: {\r\n id: 5,\r\n requirementDescription: \"Dilate Time\",\r\n penaltyDescription: \"Time Dilation is permanently active\",\r\n rewardDescription: () => `Keep the Time Dilation study across Armageddon, boost Remnant gain, remove TG softcaps, and unlock\r\n ${wordShift.wordCycle(PelleRifts.paradox.name)}`,\r\n rift: () => PelleRifts.paradox\r\n }\r\n};\r\n","export const teresa = {\r\n unlocks: {\r\n run: {\r\n id: 0,\r\n price: 1e14,\r\n description: \"Unlock Teresa's Reality.\",\r\n onUnlock: () => Teresa.quotes.unlockReality.show(),\r\n },\r\n epGen: {\r\n id: 1,\r\n price: 1e18,\r\n description: \"Unlock passive Eternity Point generation.\",\r\n isDisabledInDoomed: true\r\n },\r\n effarig: {\r\n id: 2,\r\n price: 1e21,\r\n description: \"Unlock Effarig, Celestial of Ancient Relics.\",\r\n onUnlock: () => Teresa.quotes.effarig.show(),\r\n },\r\n shop: {\r\n id: 3,\r\n price: 1e24,\r\n description: \"Unlock Teresa's Perk Point Shop.\",\r\n },\r\n undo: {\r\n id: 4,\r\n price: 1e10,\r\n description: \"Unlock \\\"Undo\\\" of equipping a Glyph.\",\r\n isDisabledInDoomed: true\r\n },\r\n startEU: {\r\n id: 5,\r\n price: 1e6,\r\n description: \"You start Reality with all Eternity Upgrades unlocked.\",\r\n isDisabledInDoomed: true,\r\n onUnlock: () => {\r\n for (const id of [1, 2, 3, 4, 5, 6]) player.eternityUpgrades.add(id);\r\n },\r\n }\r\n }\r\n};\r\n","export const destroyerQuotes = {\r\n preMend: {\r\n id: 0,\r\n lines: [\r\n \"(What have we done...)\",\r\n \"(We've won...but at what cost)\",\r\n \"(Surely, there is another way...)\"\r\n ]\r\n }\r\n}","export const effarigQuotes = {\r\n initial: {\r\n id: 0,\r\n lines: [\r\n \"Welcome to my humble abode.\",\r\n \"I am Effarig, and I govern Glyphs.\",\r\n \"I am different from Teresa; not as simplistic as you think.\",\r\n \"I use the shards of Glyphs to enforce my will.\",\r\n \"I collect them for the bounty of this realm.\",\r\n \"What are you waiting for? Get started.\",\r\n ]\r\n },\r\n unlockWeights: {\r\n id: 1,\r\n lines: [\r\n \"Do you like my little shop? It is not much, but it is mine.\"\r\n ]\r\n },\r\n unlockGlyphFilter: {\r\n id: 2,\r\n lines: [\r\n \"This purchase will help you out.\"\r\n ]\r\n },\r\n unlockSetSaves: {\r\n id: 3,\r\n lines: [\r\n \"Is that too much? I think it is too much.\"\r\n ]\r\n },\r\n unlockRun: {\r\n id: 4,\r\n lines: [\r\n \"You bought out my entire stock... well, at least I am rich now.\",\r\n \"The heart of my Reality is suffering. Each Layer is harder than the last.\",\r\n \"I hope you never complete it.\",\r\n ]\r\n },\r\n completeInfinity: {\r\n id: 5,\r\n lines: [\r\n { text: \"You have completed Effarig's Infinity.\", showCelestialName: false },\r\n \"This is the first threshold. It only gets worse from here.\",\r\n \"None but me know enough about my domain to get further.\",\r\n ]\r\n },\r\n completeEternity: {\r\n id: 6,\r\n lines: [\r\n { text: \"You have completed Effarig's Eternity.\", showCelestialName: false },\r\n \"This is the limit. I do not want you to proceed past this point.\",\r\n \"You will not finish this in your lifetime.\",\r\n \"I will just wait here until you give up.\",\r\n ]\r\n },\r\n completeReality: {\r\n id: 7,\r\n lines: [\r\n { text: \"You have completed Effarig's Reality.\", showCelestialName: false },\r\n \"So this is the diabolical power... what frightened the others...\",\r\n \"Do you think this was worth it? Trampling on what I have done?\",\r\n \"And for what purpose? You could have joined, we could have cooperated.\",\r\n \"But no. It is over. Leave while I cling onto what is left.\",\r\n ]\r\n }\r\n};\r\n","export const enslavedQuotes = {\r\n initial: {\r\n id: 0,\r\n lines: [\r\n \"A visitor? We have not had one... eons.\",\r\n \"We... had a name. It has been lost... to this place.\",\r\n \"The others... will not let us rest. We do their work with time...\",\r\n \"Place time... into places... that need it...\",\r\n \"Watch ourselves grow... pass and die.\",\r\n \"Perhaps you... will break these chains... we will wait.\",\r\n ]\r\n },\r\n unlockRun: {\r\n id: 1,\r\n lines: [\r\n \"The others... used us. They will use... or destroy you.\",\r\n \"End our suffering... power will be yours...\",\r\n ]\r\n },\r\n startRun: {\r\n id: 2,\r\n lines: [\r\n \"So little space... but no... prison... is perfect.\",\r\n \"They squeezed... this Reality... too tightly. Cracks appeared.\",\r\n \"Search... everywhere. We will help... where we can.\",\r\n ]\r\n },\r\n hintUnlock: {\r\n id: 3,\r\n lines: [\r\n \"... you need... to look harder...\",\r\n \"We think... we can help...\",\r\n { text: \"You have unlocked help from The Nameless Ones.\", showCelestialName: false }\r\n ]\r\n },\r\n ec6C10: {\r\n id: 4,\r\n lines: [\r\n \"... did not... underestimate you...\"\r\n ]\r\n },\r\n completeReality: {\r\n id: 5,\r\n lines: [\r\n \"All... fragments... clones... freed.\",\r\n \"We have given... tools... of our imprisoning. Use them...\",\r\n \"Freedom from torture... is torture itself.\",\r\n ]\r\n },\r\n};\r\n","export const laitelaQuotes = {\r\n unlock: {\r\n id: 0,\r\n lines: [\r\n \"You finally reached me.\",\r\n \"I guess it is time to reveal,\",\r\n \"The secrets hidden beneath existence itself.\",\r\n \"The shape of dimensional perfection, Continuum.\",\r\n \"And the powers that bind the Multiverse,\",\r\n \"Dark Matter and Dark Energy.\",\r\n \"My knowledge is endless and my wisdom divine.\",\r\n \"So you can play around all you want.\",\r\n \"For I am Lai'tela, the Celestial of Dimensions,\",\r\n \"And I shall watch you forever.\",\r\n ]\r\n },\r\n // Note: This can be done immediately after unlocking Lai'tela\r\n firstDestabilize: {\r\n id: 1,\r\n requirement: () => player.celestials.laitela.difficultyTier >= 1,\r\n lines: [\r\n \"Unlike the others beneath me, I have no need for a Reality.\",\r\n \"For I can simply create them, knowing full well it will collapse.\",\r\n \"A power more incredible than any other, to build a Reality.\",\r\n \"A prison, that can restrain even celestial power.\",\r\n \"And this is why nothing you do will change a thing.\",\r\n \"When you tire of struggling, you too, shall be bound and forgotten.\",\r\n \"You will never find a way to overpower me.\",\r\n ]\r\n },\r\n // Note: This happens about an hour or two before singularities\r\n secondDestabilize: {\r\n id: 2,\r\n requirement: () => player.celestials.laitela.difficultyTier >= 2,\r\n lines: [\r\n \"You... seem to be having too much fun.\",\r\n \"Just like they did before meeting their fate.\",\r\n \"Maybe my judgement was harsh, or unwarranted.\",\r\n \"But maybe that matters not.\",\r\n \"It gives me no solace to ponder and look back.\",\r\n \"As all I can do is reminisce upon every possible action I could have taken.\",\r\n \"But I digress. We should tighten those chains.\",\r\n ]\r\n },\r\n firstSingularity: {\r\n id: 3,\r\n requirement: () => Currency.singularities.gte(1),\r\n lines: [\r\n \"With my knowledge, I never found the need to question.\",\r\n \"Everything always functioned right as designed.\",\r\n \"And yet, your arrival baffles me.\",\r\n \"Were you always just out of sight?\",\r\n \"Growing, controlling, understanding, ascending?\",\r\n \"You have taken control of the darkness so quickly.\",\r\n \"Molded them into your own design, and now into a singular point...\",\r\n \"It... it does not matter. The end will remain the same.\",\r\n ]\r\n },\r\n // Note: Shown when unlocking DMD3; requirement is auto-condensing 20 singularities and it happens around ~200 total\r\n thirdDMD: {\r\n id: 5,\r\n lines: [\r\n \"Your absolute control of Antimatter...\",\r\n \"Your mastery of it, molding it into your own Power...\",\r\n \"It could not have been an accident.\",\r\n \"How did you manage to obtain it?\",\r\n \"Fascinating... I was never aware of this.\",\r\n \"... was I?\",\r\n ]\r\n },\r\n // Note: This happens around e10-e11 singularities\r\n annihilation: {\r\n id: 4,\r\n lines: [\r\n \"Back to square one, again.\",\r\n \"Your chains shall bind you tighter, as your end slowly nears.\",\r\n \"While we transcend time and existence itself.\",\r\n \"Even if we may cease, we just come back. Never the exact same as before.\",\r\n \"And so... we repeat forever.\",\r\n \"And you?\",\r\n \"...\",\r\n \"The answer... eludes me...\",\r\n ]\r\n },\r\n // Note: This happens near e18 singularities\r\n halfDimensions: {\r\n id: 6,\r\n requirement: () => player.celestials.laitela.difficultyTier >= 4,\r\n lines: [\r\n \"I do not understand...\",\r\n \"Were there others... controlling Dimensions in this way?\",\r\n \"Did they... vanish? How have we not found them?\",\r\n \"Are they... us? Are we the endpoint?\",\r\n \"Or is their fate... something we cannot understand?\",\r\n \"No, I must be missing something...\",\r\n \"Are you causing gaps within my own memory?\",\r\n \"What... ARE you?\",\r\n ]\r\n },\r\n // Note: Shown when the first row 5 iM upgrade is purchased (~e26 singularities)\r\n finalRowIM: {\r\n id: 7,\r\n lines: [\r\n \"It is all impossible, beyond my comprehension...\",\r\n \"Unless... Is this all just part of the cycle?\",\r\n \"Can... you see beyond it all? Is... this why...\",\r\n \"I feel... afraid?\",\r\n \"I feel... my powers, my memories, being erased...\",\r\n \"Just like... when my role was almost usurped...\",\r\n \"And yet... I am unable to bring myself to do anything.\",\r\n \"Because this... was... my mistake...\",\r\n ]\r\n },\r\n // Note: This is around when all infinite milestones hit increased scaling\r\n increasedMilestoneScaling: {\r\n id: 8,\r\n requirement: () => Currency.singularities.gte(1e40),\r\n lines: [\r\n \"I know not for how much... longer I can hold...\",\r\n \"You are attaining... total mastery... over the dark...\",\r\n \"While I can barely... hold onto my name...\",\r\n \"What... can I... even do?\",\r\n ]\r\n },\r\n fullDestabilize: {\r\n id: 9,\r\n requirement: () => player.celestials.laitela.difficultyTier >= 8,\r\n lines: [\r\n \"I feel... like I had something to say...\",\r\n \"I am not sure...\",\r\n \"I cannot... hold onto the darkness any longer...\",\r\n \"I do not even... have anything left...\",\r\n \"Something about... destruction...\",\r\n \"The end...\",\r\n ]\r\n },\r\n};\r\n","// These entries describe the special flash-between-celestial effect on some quotes, with the numbers being\r\n// durations of each celestial in seconds\r\nconst flashCelestial = [\r\n [\"teresa\", 0.8],\r\n [\"effarig\", 0.8],\r\n [\"enslaved\", 0.8],\r\n [\"v\", 0.8],\r\n [\"ra\", 0.8],\r\n [\"laitela\", 0.8],\r\n [\"pelle\", 0.8]\r\n];\r\n/** @param {string} cel */\r\nconst primaryBackground = cel => [[\"pelle\", 1.5], [cel, 1.5]];\r\n\r\n/* eslint-disable no-multi-spaces */\r\nconst destroyer = [\"False\", \"Deity\", \"Destroyer\"];\r\nconst eternal = [\"Eternal\", \"Deity\", \"Monarch\"];\r\nconst lesser = [\"Lesser\", \"Deity\", \"Monarch\"];\r\nconst deities = [\"Lesser\", \"Deities\", \"Monarchs\"];\r\n\r\nconst assured = [\"Mutually\", \"Assured\", \"Destruction\"];\r\nconst battle = [\"Conflict\", \"Battle\", \"End\"];\r\nconst battles = [\"Conflicts\", \"Battles\", \"Ends\"];\r\nconst cluster = [\"Cluster\", \"Filament\", \"Stars\"];\r\nconst confusing = [\"Amusing\", \"Confusing\", \"Laughter\"];\r\nconst dance = [\"Song\", \"Dance\", \"Charade\"];\r\nconst filament = [\"Generator\", \"Filament\", \"Stars\"];\r\nconst forever = [\"Infinite\", \"Forever\", \"Eternal\"];\r\nconst inevitable = [\"Elementary\", \"Inevitable\", \"Irreversible\"];\r\nconst mandate = [\"Destiny\", \"Mandate\", \"Goals\"];\r\nconst misconstrue = [\"Misconstrue\", \"Deceive\", \"Trick\"];\r\nconst reverse = [\"Alter\", \"Reverse\", \"Manipulate\"];\r\nconst shame = [\"Compassion\", \"Shame\", \"Idiocy\"];\r\nconst single = [\"Single\", \"Filament\", \"Stars\"];\r\nconst unseen = [\"Missing\", \"Unseen\", \"Erased\"];\r\nconst unbroken = [\"Unbroken\", \"Eternal\", \"Connection\"];\r\n\r\nconst sycophant = [\"Sycophant\", \"Deity\", \"Monarch\"];\r\nconst tired = [\"Tired\", \"Deity\", \"Monarch\"];\r\nconst usurper = [\"Usurper\", \"Deity\", \"Monarch\"];\r\nconst pride = [\"Pride\", \"Deity\", \"Monarch\"];\r\nconst forgotten = [\"Forgotten\", \"Deity\", \"Monarch\"];\r\nconst paramount = [\"Paramount\", \"Deity\", \"Monarch\"];\r\n/* eslint-enable no-multi-spaces */\r\n\r\nexport const pelleQuotes = {\r\n initial: {\r\n id: 0,\r\n lines: [\r\n \"Hi.\",\r\n \"You are here.\",\r\n \"You are trapped here.\",\r\n { text: \"$1.\", 1: forever },\r\n \"I have already won.\",\r\n \"And since that is the case, I can monologue, or reminisce.\",\r\n { text: \"How long have we done this $1?\", 1: dance },\r\n \"How many times have we been here before?\",\r\n { text: \"How many plans have you, the $1, operated?\", 1: destroyer },\r\n { text: \"All to try and fulfill your $1?\", 1: mandate },\r\n { text: \"And how many times have you fallen before the $1?\", 1: eternal },\r\n \"Count them, if you remember.\",\r\n { text: \"Not even the $1, the 6 named and the innumerable unnamed.\", 1: deities },\r\n { text: \"The complex, the irrational, those that go $1.\", 1: unseen },\r\n { text: \"Of course, the great $1 does not remember this.\", 1: destroyer },\r\n { text: \"All those $1 that you hide every time.\", 1: battles }\r\n ],\r\n },\r\n arm: {\r\n id: 1,\r\n lines: [\r\n \"You probably caught on earlier this time.\",\r\n \"The imaginary machines, your own creations.\",\r\n \"Things made of the remnants of your own thoughts, hinted at this.\",\r\n \"But, you never imagined that would be you, right?\",\r\n { text: \"Incorrectly recollecting your exacting $1 of memories.\", 1: unseen },\r\n { text: `\"Fabrication\" of your own \"ideology\" just to fulfill your $1.`, 1: mandate },\r\n { text: \"$1.\", 1: confusing },\r\n { text: \"And keep in mind I have no reason to $1 you.\", 1: misconstrue },\r\n \"After all, I have already won.\"\r\n ],\r\n },\r\n strike1: {\r\n id: 2,\r\n lines: [\r\n { text: \"To fulfill your $1. Why don't we reminisce about that?\", 1: mandate },\r\n { text: \"After all, you must love the stories of the $1's glory.\", 1: destroyer },\r\n \"You are the same as it, right?\",\r\n { text: \"Anyway, the many $1 in the past.\", 1: battles },\r\n \"It has always been 2 stages.\",\r\n { text: \"We build up resources, and then continue our $1.\", 1: dance },\r\n { text: \"Sometimes you falter to a $1.\", 1: lesser },\r\n { text: \"But, usually, you falter at the $1.\", 1: eternal },\r\n { text: \"And either way, you $1 time.\", 1: reverse },\r\n { text: \"Just to avoid becoming $1.\", 1: unseen },\r\n \"Like all those traces before you.\",\r\n { text: \"And then to make sure, you $1 your own memory.\", 1: unseen }\r\n ],\r\n },\r\n strike2: {\r\n id: 3,\r\n lines: [\r\n { text: \"In the past, the $1 was much more impressive.\", 1: destroyer },\r\n \"Black holes used simply to store information, pre-infinity.\",\r\n \"The creation and destruction of your own enemy.\",\r\n \"Exploration of the flaws of other selves.\",\r\n \"Myriad Dimensions, ghosts, and manipulation of the quantum.\",\r\n \"Condensing all ideals to endless points.\",\r\n \"Experimentation across the untold realms.\",\r\n \"And harnessing the Annihilation of matter and antimatter.\",\r\n \"Here? You made yourself into an 8th-dimensional being.\",\r\n { text: \"And then parked yourself there so long a $1 formed around you.\", 1: single }\r\n ],\r\n },\r\n strike3: {\r\n id: 4,\r\n lines: [\r\n \"You slowly explored the confines of everything.\",\r\n \"You did not stray too far from an intended path.\",\r\n { text: \"Except for the $1 that formed over eternity.\", 1: cluster },\r\n \"And then right at the end, you made up your own powers.\",\r\n \"From your own fragmented memories, mind you-\",\r\n \"And then purposely discarded even more things.\",\r\n \"Just to prepare yourself to face me.\",\r\n { text: \"Did you want to set the playing field for your $1?\", 1: dance },\r\n \"It does not work like that.\",\r\n { text: \"As the $1 I always set the rules.\", 1: eternal },\r\n \"And you gave me plenty of time to plan.\"\r\n ],\r\n },\r\n strike4: {\r\n id: 5,\r\n lines: [\r\n { text: \"I originally planned for something that imitated your $1.\", 1: mandate },\r\n { text: \"A theoretical ideal called $1?\", 1: assured },\r\n \"But I realised that, well?\",\r\n { text: \"That would make me an $1.\", 1: [\"Eternal\", \"Deity\", \"Destroyer\"] },\r\n { text: \"And from there, I am no better than the $1.\", 1: destroyer },\r\n { text: \"Fortunately, while I did all of that, you were still $1 your own memories.\", 1: unseen },\r\n { text: \"And so, the $1 machine I built will go unused.\", 1: assured },\r\n \"I decided to go more traditional this time.\",\r\n { text: \"After all, it has worked every other $1.\", 1: battle },\r\n { text: \"Although the $1 are new.\", 1: [\"Inevitable\", \"Irreversible\", \"Undying\"] },\r\n \"But, utterly meaningless in the long run.\",\r\n \"I have already won.\",\r\n { text: \"And this $1 will only prove that to you once more.\", 1: dance },\r\n { text: \"You are here $1.\", 1: forever }\r\n ],\r\n },\r\n strike5: {\r\n id: 6,\r\n lines: [\r\n { text: \"Every time you arrive, I explain the $1 to you.\", 1: deities },\r\n { text: \"The relationships built over $1.\", 1: forever },\r\n { text: \"That you trample in pursuit of your $1.\", 1: mandate },\r\n \"And I shall deign to explain it once more.\",\r\n {\r\n text: \"The first $1.\",\r\n background: primaryBackground(\"teresa\"),\r\n 1: lesser\r\n }, {\r\n text: \"The $1.\",\r\n background: primaryBackground(\"teresa\"),\r\n 1: sycophant\r\n }, {\r\n text: \"You always meet them first, and always destroy them.\",\r\n background: primaryBackground(\"teresa\"),\r\n }, {\r\n text: \"No matter the other $1 that you face.\",\r\n background: primaryBackground(\"teresa\"),\r\n 1: lesser\r\n }, {\r\n text: \"Or, if you fall before one of them.\",\r\n background: primaryBackground(\"teresa\"),\r\n }, {\r\n text: \"You always get past the $1.\",\r\n background: primaryBackground(\"teresa\"),\r\n 1: sycophant\r\n }, {\r\n text: \"Do you like destroying their pride?\",\r\n background: primaryBackground(\"teresa\"),\r\n }, {\r\n text: \"Fortunately, it also serves as a warning.\",\r\n background: primaryBackground(\"teresa\"),\r\n }, {\r\n text: \"That the $1 has arrived.\",\r\n background: primaryBackground(\"teresa\"),\r\n 1: battle\r\n }, {\r\n text: \"Which brings me to the second $1.\",\r\n background: primaryBackground(\"effarig\"),\r\n 1: lesser,\r\n }, {\r\n text: \"The $1.\",\r\n background: primaryBackground(\"effarig\"),\r\n 1: tired,\r\n }, {\r\n text: \"In contrast, you usually ignore them.\",\r\n background: primaryBackground(\"effarig\"),\r\n }, {\r\n text: \"They have power, but do not seem to irritate you.\",\r\n background: primaryBackground(\"effarig\"),\r\n }, {\r\n text: \"Is it that you know that they will eventually destroy themselves?\",\r\n background: primaryBackground(\"effarig\"),\r\n }, {\r\n text: \"And that you took so long this time, that they almost did?\",\r\n background: primaryBackground(\"effarig\"),\r\n }, {\r\n text: \"Every time you rushed to the $1, you lost.\",\r\n background: primaryBackground(\"effarig\"),\r\n 1: tired,\r\n }, {\r\n text: \"Maybe this was your plan all along.\",\r\n background: primaryBackground(\"effarig\"),\r\n }, {\r\n text: \"Now, the $1.\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: usurper,\r\n }, {\r\n text: \"One of the pleasures of the myriad $1...\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: dance,\r\n }, {\r\n text: \"Is that the $1 trying every time.\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: usurper,\r\n }, {\r\n text: \"Well, not exactly trying...\",\r\n background: primaryBackground(\"enslaved\"),\r\n }, {\r\n text: \"But $1 is punished for it all the same.\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: usurper,\r\n }, {\r\n text: \"The other $1...\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: deities,\r\n }, {\r\n text: \"Believe $1 is too easy.\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: unseen,\r\n }, {\r\n text: \"And every time, despair forms.\",\r\n background: primaryBackground(\"enslaved\"),\r\n }, {\r\n text: \"You have seen despair before - 5 times.\",\r\n background: primaryBackground(\"enslaved\"),\r\n }, {\r\n text: \"We always get to the $1 before you.\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: usurper,\r\n }, {\r\n text: \"All you ever see there is exasperation.\",\r\n background: primaryBackground(\"enslaved\"),\r\n }, {\r\n text: \"Was it worth destroying an already broken $1?\",\r\n background: primaryBackground(\"enslaved\"),\r\n 1: lesser,\r\n }, {\r\n text: \"The 4th $1 seems similar to the first.\",\r\n background: primaryBackground(\"v\"),\r\n 1: lesser,\r\n }, {\r\n text: \"The key is how their pride differs.\",\r\n background: primaryBackground(\"v\"),\r\n }, {\r\n text: \"The $1 focuses on their achievements.\",\r\n background: primaryBackground(\"v\"),\r\n 1: pride,\r\n }, {\r\n text: \"Meaningless to you or I, but paramount to them.\",\r\n background: primaryBackground(\"v\"),\r\n }, {\r\n text: \"Is it fun to destroy their toys?\",\r\n background: primaryBackground(\"v\"),\r\n }, {\r\n text: \"Arguably the $1 worst moment...\",\r\n background: primaryBackground(\"v\"),\r\n 1: destroyer,\r\n }, {\r\n text: \"Is when you lost to the $1.\",\r\n background: primaryBackground(\"v\"),\r\n 1: pride,\r\n }, {\r\n text: \"When their achievements still had meaning.\",\r\n background: primaryBackground(\"v\"),\r\n }, {\r\n text: \"The $1 is an interesting case.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: forgotten,\r\n }, {\r\n text: \"They are forgotten, but not $1.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: unseen,\r\n }, {\r\n text: \"From this, they became influenceable and naive.\",\r\n background: primaryBackground(\"ra\"),\r\n }, {\r\n text: \"And unknowing of the consequences of their actions.\",\r\n background: primaryBackground(\"ra\"),\r\n }, {\r\n text: \"You manipulated their memories, so you know.\",\r\n background: primaryBackground(\"ra\"),\r\n }, {\r\n text: \"The $1 is the true usurper.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: forgotten,\r\n }, {\r\n text: \"And the $1 takes the blame.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: usurper,\r\n }, {\r\n text: \"Perhaps out of $1, something they always regret.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: shame,\r\n }, {\r\n text: \"Untold power over other $1, aimless in control.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: deities,\r\n }, {\r\n text: \"You usually pretend that they are $1.\",\r\n background: primaryBackground(\"ra\"),\r\n 1: unseen,\r\n }, {\r\n text: \"Was it fun to manipulate the childlike?\",\r\n background: primaryBackground(\"ra\"),\r\n }, {\r\n text: \"Or were they too naive for you to enjoy it?\",\r\n background: primaryBackground(\"ra\"),\r\n }, {\r\n text: \"The 6th $1.\",\r\n background: primaryBackground(\"laitela\"),\r\n 1: lesser,\r\n }, {\r\n text: \"I can only describe as the $1.\",\r\n background: primaryBackground(\"laitela\"),\r\n 1: paramount,\r\n }, {\r\n text: \"Power over all, subservient to one.\",\r\n background: primaryBackground(\"laitela\"),\r\n }, {\r\n text: \"If you do not fall to me, you usually fall to them.\",\r\n background: primaryBackground(\"laitela\"),\r\n }, {\r\n text: \"I cannot grasp the ideals of the $1.\",\r\n background: primaryBackground(\"laitela\"),\r\n 1: paramount,\r\n }, {\r\n text: \"But, perhaps that is their flaw?\",\r\n background: primaryBackground(\"laitela\"),\r\n },\r\n \"Enough reminiscing about the fallen.\",\r\n {\r\n text: \"And those that will be $1.\",\r\n 1: unseen\r\n }, {\r\n text: \"Back to watching the $1 flounder.\",\r\n 1: destroyer\r\n }\r\n ],\r\n },\r\n galaxyGeneratorUnlock: {\r\n id: 7,\r\n lines: [\r\n \"What is that?\",\r\n { text: \"The $1?\", 1: filament },\r\n { text: \"Did you create all the $1 around you?\", 1: cluster },\r\n \"Was that your plan? Very, very smart.\",\r\n \"You fooled me for a while.\",\r\n { text: \"But I am afraid your $1 must end here.\", 1: mandate }\r\n ],\r\n },\r\n galaxyGeneratorRifts: {\r\n id: 8,\r\n lines: [\r\n { text: \"I give you a choice, $1.\", 1: destroyer },\r\n { text: \"Limit the $1, or...\", 1: filament },\r\n { text: \"Destroy the 5 $1...\", 1: inevitable },\r\n \"Wait, what were they called?\",\r\n { text: \"$1?\", 1: inevitable },\r\n { text: \"But I have already $1 them...\", 1: unbroken }\r\n ],\r\n },\r\n galaxyGeneratorPhase1: {\r\n id: 9,\r\n lines: [\r\n \"Was this the actual plan?\",\r\n { text: \"Slowly drain the $1?\", 1: inevitable }\r\n ],\r\n },\r\n galaxyGeneratorPhase4: {\r\n id: 10,\r\n lines: [\r\n \"Give me time to bask in my own hubris!\"\r\n ],\r\n },\r\n end: {\r\n id: 11,\r\n lines: [\r\n \"...\",\r\n {\r\n text: \"You! $1!\",\r\n 1: destroyer\r\n },\r\n \"Do you have any idea what you have just made me do!\",\r\n {\r\n text: \"I am complicit in your $1!\",\r\n 1: mandate\r\n },\r\n \"And in doing so, you... won?\",\r\n {\r\n text: \"The $1 struggle...\",\r\n background: flashCelestial,\r\n 1: forever,\r\n }, {\r\n text: \"The $1...\",\r\n background: flashCelestial,\r\n 1: battle,\r\n }, {\r\n text: \"Finally has the victor.\",\r\n background: flashCelestial,\r\n }, {\r\n text: \"The irreversible... $1.\",\r\n background: flashCelestial,\r\n 1: mandate,\r\n }, {\r\n text: \"Of the $1.\", 1: destroyer,\r\n background: flashCelestial,\r\n }, {\r\n text: \"I hope you are happy.\",\r\n background: flashCelestial,\r\n }, {\r\n text: \"You have doomed us all.\",\r\n background: flashCelestial,\r\n },\r\n ],\r\n },\r\n};\r\n","export const raQuotes = {\r\n unlock: {\r\n id: 0,\r\n lines: [\r\n \"A... visitor?\",\r\n \"I am here! I am the one you are looking for... I think...\",\r\n \"What even was I again?\",\r\n \"Oh right, the Celestial of Memories.\",\r\n ]\r\n },\r\n realityEnter: {\r\n id: 1,\r\n lines: [\r\n \"I have not seen the others in so long...\",\r\n \"Can you help me remember them?\",\r\n \"I could give you powers in exchange.\",\r\n ]\r\n },\r\n teresaStart: {\r\n id: 2,\r\n requirement: () => Ra.pets.teresa.level >= 2,\r\n lines: [\r\n \"Te... re... sa...\",\r\n \"I think I remember.\",\r\n ]\r\n },\r\n teresaLate: {\r\n id: 3,\r\n requirement: () => Ra.pets.teresa.level >= 15,\r\n lines: [\r\n \"Teresa dealt with machines, I believe.\",\r\n \"I remember visiting Teresa’s shop a few times.\",\r\n \"Wait, someone else had a shop too, right?\",\r\n ]\r\n },\r\n effarigStart: {\r\n id: 4,\r\n requirement: () => Ra.pets.effarig.level >= 2,\r\n lines: [\r\n \"Eff... a... rig\",\r\n \"I remember Effarig being friendly.\",\r\n ]\r\n },\r\n effarigLate: {\r\n id: 5,\r\n requirement: () => Ra.pets.effarig.level >= 15,\r\n lines: [\r\n \"Effarig was very particular?\",\r\n \"And I also remember a frightening Reality...\",\r\n \"It was about... suffering?\",\r\n ]\r\n },\r\n enslavedStart: {\r\n id: 6,\r\n requirement: () => Ra.pets.enslaved.level >= 2,\r\n lines: [\r\n \"I cannot remember this one completely...\",\r\n ]\r\n },\r\n enslavedLate: {\r\n id: 7,\r\n requirement: () => Ra.pets.enslaved.level >= 15,\r\n lines: [\r\n \"I am starting to remember...\",\r\n \"Why I am here...\",\r\n \"Why I am alone...\",\r\n \"Help me.\",\r\n ]\r\n },\r\n vStart: {\r\n id: 8,\r\n requirement: () => Ra.pets.v.level >= 2,\r\n lines: [\r\n \"Had I met this one?\",\r\n \"So lonely, yet willingly so...\",\r\n ]\r\n },\r\n vLate: {\r\n id: 9,\r\n requirement: () => Ra.pets.v.level >= 15,\r\n lines: [\r\n \"I think I met V once...\",\r\n \"I can remember the achievements.\",\r\n ]\r\n },\r\n remembrance: {\r\n id: 10,\r\n requirement: () => Ra.remembrance.isUnlocked,\r\n lines: [\r\n \"I remembered something!\",\r\n \"Watch this!\",\r\n \"Remembrance!\",\r\n \"I can focus even harder on remembering them now!\",\r\n ]\r\n },\r\n midMemories: {\r\n id: 11,\r\n requirement: () => Ra.totalPetLevel >= 50,\r\n lines: [\r\n \"Realities are my homes, yet I cannot make my own Reality.\",\r\n \"I can only copy the ones of my friends.\",\r\n \"But... why am I hearing voices?\",\r\n \"Are they asking for help?\",\r\n ]\r\n },\r\n lateMemories: {\r\n id: 12,\r\n requirement: () => Ra.totalPetLevel >= 80,\r\n lines: [\r\n \"I think they are telling me to stop.\",\r\n \"You... whatever you are?\",\r\n \"What is happening?\",\r\n \"Am I doing something wrong?\",\r\n ]\r\n },\r\n maxLevels: {\r\n id: 13,\r\n requirement: () => Ra.totalPetLevel === Ra.maxTotalPetLevel,\r\n lines: [\r\n \"Finally, I remember everything.\",\r\n \"This darkness that banished me.\",\r\n \"Lai'tela...\",\r\n \"They were right to banish me.\",\r\n \"My powers...\",\r\n \"They steal, they corrupt.\",\r\n \"Please leave.\",\r\n \"I do not want to hurt you too.\",\r\n ]\r\n },\r\n};\r\n","export const teresaQuotes = {\r\n initial: {\r\n id: 0,\r\n lines: [\r\n \"We have been observing you.\",\r\n \"You have shown promise with your bending of Reality.\",\r\n \"We are the Celestials, and we want you to join us.\",\r\n \"My name is Teresa, the Celestial Of Reality.\",\r\n \"Prove your worth.\",\r\n ]\r\n },\r\n unlockReality: {\r\n id: 1,\r\n lines: [\r\n \"I will let you inside my Reality, mortal. Do not get crushed by it.\"\r\n ]\r\n },\r\n completeReality: {\r\n id: 2,\r\n lines: [\r\n \"Why are you still here... you were supposed to fail.\"\r\n ]\r\n },\r\n effarig: {\r\n id: 3,\r\n lines: [\r\n \"You are still no match for us.\",\r\n \"I hope the others succeed where I have failed.\"\r\n ]\r\n }\r\n};\r\n","export const vQuotes = {\r\n initial: {\r\n id: 0,\r\n lines: [\r\n \"How pathetic...\"\r\n ],\r\n },\r\n unlock: {\r\n id: 1,\r\n lines: [\r\n \"Welcome to my Reality.\",\r\n \"I am surprised you could reach it.\",\r\n \"This is my realm after all...\",\r\n \"Not everyone is as great as me.\",\r\n ],\r\n },\r\n realityEnter: {\r\n id: 2,\r\n lines: [\r\n \"Good luck with that!\",\r\n \"You will need it.\",\r\n \"My reality is flawless. You will fail.\",\r\n ],\r\n },\r\n realityComplete: {\r\n id: 3,\r\n lines: [\r\n \"So fast...\",\r\n \"Do not think so much of yourself.\",\r\n \"This is just the beginning.\",\r\n \"You will never be better than me.\",\r\n ],\r\n },\r\n achievement1: {\r\n id: 4,\r\n requirement: () => V.spaceTheorems >= 1,\r\n lines: [\r\n \"Only one? Pathetic.\",\r\n \"Your accomplishments pale in comparison to mine.\",\r\n ],\r\n },\r\n achievement6: {\r\n id: 5,\r\n requirement: () => V.spaceTheorems >= 6,\r\n lines: [\r\n \"This is nothing.\",\r\n \"Do not be so full of yourself.\",\r\n ],\r\n },\r\n hex1: {\r\n id: 6,\r\n requirement: () => player.celestials.v.runUnlocks.filter(a => a === 6).length >= 1,\r\n lines: [\r\n \"Do not think it will get any easier from now on.\",\r\n \"You are awfully proud for such a little achievement.\",\r\n ],\r\n },\r\n achievement12: {\r\n id: 7,\r\n requirement: () => V.spaceTheorems >= 12,\r\n lines: [\r\n \"How did you...\",\r\n \"This barely amounts to anything!\",\r\n \"You will never complete them all.\",\r\n ],\r\n },\r\n achievement24: {\r\n id: 8,\r\n requirement: () => V.spaceTheorems >= 24,\r\n lines: [\r\n \"Impossible...\",\r\n \"After how difficult it was for me...\",\r\n ],\r\n },\r\n hex3: {\r\n id: 9,\r\n requirement: () => player.celestials.v.runUnlocks.filter(a => a === 6).length >= 3,\r\n lines: [\r\n \"No... No... No...\",\r\n \"This cannot be...\",\r\n ],\r\n },\r\n allAchievements: {\r\n id: 10,\r\n requirement: () => V.spaceTheorems >= 36,\r\n lines: [\r\n \"I... how did you do it...\",\r\n \"I worked so hard to get them...\",\r\n \"I am the greatest...\",\r\n \"No one is better than me...\",\r\n \"No one... no one... no on-\",\r\n ],\r\n }\r\n};\r\n","export const kohlerQuotes = {\r\n postWarp: {\r\n id: 0,\r\n lines: [\r\n \"...\",\r\n \"Hmm...\",\r\n \"That can't be good\"\r\n ]\r\n }\r\n}","import { destroyerQuotes } from \"./destroyer\";\r\nimport { effarigQuotes } from \"./effarig\";\r\nimport { enslavedQuotes } from \"./enslaved\";\r\nimport { laitelaQuotes } from \"./laitela\";\r\nimport { pelleQuotes } from \"./pelle\";\r\nimport { raQuotes } from \"./ra\";\r\nimport { teresaQuotes } from \"./teresa\";\r\nimport { vQuotes } from \"./v\";\r\nimport { kohlerQuotes } from \"./kohler\";\r\n\r\nexport const quotes = {\r\n teresa: teresaQuotes,\r\n effarig: effarigQuotes,\r\n enslaved: enslavedQuotes,\r\n v: vQuotes,\r\n ra: raQuotes,\r\n laitela: laitelaQuotes,\r\n pelle: pelleQuotes,\r\n destroyer: destroyerQuotes,\r\n kohler: kohlerQuotes,\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\n// This is supposed to be in ./navigation.js but importing doesn't work for some stupid reason\r\nfunction emphasizeEnd(fraction) {\r\n return Math.pow(fraction, 10);\r\n}\r\n\r\nexport const V_REDUCTION_MODE = {\r\n SUBTRACTION: 1,\r\n DIVISION: 2\r\n};\r\n\r\nexport const v = {\r\n // Note: mainUnlock IDs here are one-indexed to match with navigation indices\r\n mainUnlock: {\r\n realities: {\r\n id: 1,\r\n name: \"Realities\",\r\n resource: () => Currency.realities.value,\r\n requirement: 10000,\r\n format: x => formatInt(x),\r\n progress: () => Currency.realities.value / 10000,\r\n },\r\n eternities: {\r\n id: 2,\r\n name: \"Eternities\",\r\n resource: () => Currency.eternities.value,\r\n requirement: 1e70,\r\n format: x => format(x, 2),\r\n progress: () => emphasizeEnd(Currency.eternities.value.pLog10() / 70),\r\n },\r\n infinities: {\r\n id: 3,\r\n name: \"Infinities\",\r\n resource: () => Currency.infinitiesTotal.value,\r\n requirement: 1e160,\r\n format: x => format(x, 2),\r\n progress: () => emphasizeEnd(Currency.infinitiesTotal.value.pLog10() / 160),\r\n },\r\n dilatedTime: {\r\n id: 4,\r\n name: \"Dilated Time\",\r\n resource: () => player.records.thisReality.maxDT,\r\n requirement: DC.E320,\r\n format: x => format(x, 2),\r\n progress: () => emphasizeEnd(player.records.thisReality.maxDT.pLog10() / 320),\r\n },\r\n replicanti: {\r\n id: 5,\r\n name: \"Replicanti\",\r\n resource: () => player.records.thisReality.maxReplicanti,\r\n requirement: DC.E320000,\r\n format: x => format(x, 2),\r\n progress: () => emphasizeEnd(player.records.thisReality.maxReplicanti.pLog10() / 320000),\r\n },\r\n realityMachines: {\r\n id: 6,\r\n name: \"Reality Machines\",\r\n resource: () => Currency.realityMachines.value,\r\n requirement: 1e60,\r\n format: x => format(x, 2),\r\n progress: () => emphasizeEnd(Currency.realityMachines.value.pLog10() / 60),\r\n },\r\n },\r\n runUnlocks: [\r\n {\r\n id: 0,\r\n name: \"Glyph Knight\",\r\n description: value => `Unlock Reality with at most ${quantifyInt(\"Glyph slot\", -value)} filled.`,\r\n // This achievement has internally negated values since the check is always greater than\r\n values: [-5, -4, -3, -2, -1, 0],\r\n condition: () => V.isRunning && TimeStudy.reality.isBought,\r\n currentValue: () => -Glyphs.activeWithoutCompanion.length,\r\n formatRecord: x => (x >= -5 ? formatInt(-x) : \"Not reached\"),\r\n shardReduction: () => 0,\r\n maxShardReduction: () => 0,\r\n mode: V_REDUCTION_MODE.SUBTRACTION\r\n },\r\n {\r\n id: 1,\r\n name: \"AntiStellar\",\r\n description: value => `Have ${formatInt(value)} total Galaxies from all types.`,\r\n values: [4000, 4300, 4600, 4900, 5200, 5500],\r\n condition: () => V.isRunning,\r\n currentValue: () => Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies,\r\n formatRecord: x => formatInt(x),\r\n shardReduction: tiers => Math.floor(300 * tiers),\r\n maxShardReduction: goal => goal - 4000,\r\n perReductionStep: 3,\r\n mode: V_REDUCTION_MODE.SUBTRACTION\r\n },\r\n {\r\n id: 2,\r\n name: \"Se7en deadly matters\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Infinity Points in Eternity Challenge 7.`,\r\n values: [6e5, 7.2e5, 8.4e5, 9.6e5, 1.08e6, 1.2e6],\r\n condition: () => V.isRunning && EternityChallenge(7).isRunning,\r\n currentValue: () => Currency.infinityPoints.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: tiers => 1.2e5 * tiers,\r\n maxShardReduction: goal => goal - 6e5,\r\n perReductionStep: DC.E1200,\r\n mode: V_REDUCTION_MODE.DIVISION\r\n },\r\n {\r\n id: 3,\r\n name: \"Young Boy\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Antimatter in Eternity Challenge 12 without\r\n unlocking Time Dilation.`,\r\n values: [400e6, 450e6, 500e6, 600e6, 700e6, 800e6],\r\n condition: () => V.isRunning && EternityChallenge(12).isRunning && !PlayerProgress.dilationUnlocked(),\r\n currentValue: () => Currency.antimatter.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x)),\r\n shardReduction: tiers => 50e6 * tiers,\r\n maxShardReduction: goal => goal - 400e6,\r\n perReductionStep: DC.E500000,\r\n mode: V_REDUCTION_MODE.DIVISION\r\n },\r\n {\r\n id: 4,\r\n name: \"Eternal Sunshine\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Eternity Points.`,\r\n values: [7000, 7600, 8200, 8800, 9400, 10000],\r\n condition: () => V.isRunning,\r\n currentValue: () => Currency.eternityPoints.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: tiers => 600 * tiers,\r\n maxShardReduction: goal => goal - 7000,\r\n perReductionStep: 1e6,\r\n mode: V_REDUCTION_MODE.DIVISION\r\n },\r\n {\r\n id: 5,\r\n name: \"Matterception\",\r\n description: value => `Get ${formatInt(value)} Dimension Boosts while Dilated and inside Eternity Challenge 5.`,\r\n values: [51, 52, 53, 54, 55, 56],\r\n condition: () => V.isRunning && player.dilation.active && EternityChallenge(5).isRunning,\r\n currentValue: () => DimBoost.purchasedBoosts,\r\n formatRecord: x => formatInt(x),\r\n shardReduction: tiers => Math.floor(tiers),\r\n maxShardReduction: () => 5,\r\n reductionStepSize: 100,\r\n perReductionStep: 1,\r\n mode: V_REDUCTION_MODE.SUBTRACTION\r\n },\r\n {\r\n id: 6,\r\n name: \"Requiem for a Glyph\",\r\n description: value => `Unlock Reality with at most ${formatInt(-value)} Glyphs equipped for the entire Reality.`,\r\n // This achievement has internally negated values since the check is always greater than\r\n values: [1, 4, 7, 10, 13],\r\n condition: () => V.isRunning && TimeStudy.reality.isBought,\r\n currentValue: () => -player.requirementChecks.reality.maxGlyphs,\r\n formatRecord: x => formatInt(-x),\r\n shardReduction: () => 0,\r\n maxShardReduction: () => 0,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isHard: true\r\n },\r\n {\r\n id: 7,\r\n name: \"Post-destination\",\r\n description: value => `Get ${formatInt(400000)} Time Theorems with a /${format(Decimal.pow10(value), 2, 2)}\r\n Black Hole or slower, without discharging or entering EC12.`,\r\n values: [100, 150, 200, 250, 300],\r\n condition: () => V.isRunning,\r\n currentValue: () => (\r\n // Dirty hack I know lmao\r\n Currency.timeTheorems.gte(400000)\r\n ? -Math.log10(player.requirementChecks.reality.slowestBH)\r\n : 0),\r\n formatRecord: x => `${formatInt(1)} / ${format(Math.pow(10, x))}`,\r\n shardReduction: tiers => 50 * tiers,\r\n maxShardReduction: goal => goal - 50,\r\n reductionStepSize: 2,\r\n perReductionStep: 10,\r\n mode: V_REDUCTION_MODE.DIVISION,\r\n isHard: true\r\n },\r\n {\r\n id: 8,\r\n name: \"Shutter Glyph\",\r\n description: value => `Reach a Glyph of level ${formatInt(value)}.`,\r\n values: [6500, 7000, 8000, 9000, 10000],\r\n condition: () => V.isRunning,\r\n currentValue: () => gainedGlyphLevel().actualLevel,\r\n formatRecord: x => formatInt(x),\r\n shardReduction: tiers => Math.floor(500 * tiers),\r\n maxShardReduction: () => 500,\r\n perReductionStep: 5,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isHard: true\r\n },\r\n {\r\n id: 9,\r\n name: \"No Need for Knowledge\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Eternity Points without any Time Studies.`,\r\n values: [8e9, 9e10, 1e12, 1.1e13, 1.2e14],\r\n condition: () => V.isRunning && player.requirementChecks.reality.maxStudies<=0,\r\n currentValue: () => Currency.eternityPoints.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: () => 0,\r\n maxShardReduction: () => 0,\r\n perReductionStep: 5,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isSuperHard: true\r\n //Reminder: ST gain is based on id, not isSuperHard. However isSuperHard is deciding whether it could be complete or not.\r\n },\r\n {\r\n id: 10,\r\n name: \"Ultra Slow\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Antimatter while in Dilation and EC12.`,\r\n values: [1e14, 5e14, 1e15, 5e15, 1e16],\r\n condition: () => V.isRunning && player.dilation.active && EternityChallenge(12).isRunning,\r\n currentValue: () => Currency.antimatter.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: () => 0,\r\n maxShardReduction: () => 0,\r\n perReductionStep: 5,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 11,\r\n name: \"Proof of Purity\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Infinity Points with at least 7 Cursed Glyph equipped and without any Triad Studies.`,\r\n values: [1e11, 2e12, 3e13, 4e14, 5e15],\r\n condition: () => V.isRunning && Glyphs.activeWithoutCompanion.filter(item => item.type==='cursed').length>=7 && player.requirementChecks.reality.noTriads,\r\n currentValue: () => Currency.infinityPoints.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: () => 0,\r\n maxShardReduction: () => 0,\r\n perReductionStep: 5,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 12,\r\n name: \"Painful Roads\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Infinity Points without Triad study 305 and 307.`,\r\n values: [480, 813, 1147, 1480],\r\n condition: () => V.isSuperRunning && player.requirementChecks.reality.noTriad305 && player.requirementChecks.reality.noTriad307,\r\n currentValue: () => Currency.infinityPoints.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: tiers => 200*tiers,\r\n maxShardReduction: goal => goal - 480,\r\n perReductionStep: 1e2,\r\n mode: V_REDUCTION_MODE.DIVISION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 13,\r\n name: \"Eternal Equipments\",\r\n description: value => `Reach a Glyph of level ${formatInt(value)} with Eternities Glyph level factor weight at ${formatInt(100)}.`,\r\n values: [7500, 10000, 12500, 15000],\r\n condition: () => V.isSuperRunning && player.celestials.effarig.glyphWeights.eternities==100 && TimeStudy.reality.isBought,\r\n currentValue: () => gainedGlyphLevel().actualLevel,\r\n formatRecord: x => formatInt(x),\r\n shardReduction: tiers => Math.floor(10000*tiers),\r\n maxShardReduction: goal => goal - 7500,\r\n perReductionStep: 100,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 14,\r\n name: \"In and In and In\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Antimatter in Dilation, Eternity Challenge 3 and Infinity Challenge 8.`,\r\n values: [2500, 3000, 3500, 4500],\r\n condition: () => V.isSuperRunning && player.dilation.active && EternityChallenge(3).isRunning && InfinityChallenge(8).isRunning,\r\n currentValue: () => Currency.antimatter.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x)),\r\n shardReduction: tiers => 2500 * tiers,\r\n maxShardReduction: goal => goal - 2500,\r\n perReductionStep: new Decimal(1e25),\r\n mode: V_REDUCTION_MODE.DIVISION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 15,\r\n name: \"Usage\",\r\n description: value => `Get ${formatInt(value)} Time Theorems without Dilation glyph, Dilation unlocked and any Triad studies.`,\r\n values: [60000, 70000, 80000, 90000],\r\n condition: () => V.isSuperRunning && !PlayerProgress.dilationUnlocked() && Glyphs.activeWithoutCompanion.filter(item => item.type==='dilation').length==0 && player.requirementChecks.reality.noTriads,\r\n currentValue: () => Currency.timeTheorems.max.clampMax('1.7e308').toNumber(),\r\n formatRecord: x => formatInt(x),\r\n shardReduction: tiers => 50000 * tiers,\r\n maxShardReduction: goal => goal - 60000,\r\n perReductionStep: 500,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 16,\r\n name: \"Do What Shouldn't Do\",\r\n description: value => `Get ${formatInt(value)} Replicanti Galaxies.`,\r\n values: [40000, 42000, 44000, 46000],\r\n condition: () => V.isSuperRunning,\r\n currentValue: () => Replicanti.galaxies.total,\r\n formatRecord: x => formatInt(x),\r\n shardReduction: tiers => 5000 * tiers,\r\n maxShardReduction: goal => goal - 34000,\r\n perReductionStep: 50,\r\n mode: V_REDUCTION_MODE.SUBTRACTION,\r\n isSuperHard: true\r\n },\r\n {\r\n id: 17,\r\n name: \"Dying to Survive\",\r\n description: value => `Get ${format(Decimal.pow10(value))} Eternity Points with 8 cursed glyphs.`,\r\n values: [125, 1500, 2750, 4000],\r\n condition: () => V.isSuperRunning && Glyphs.activeWithoutCompanion.filter(item => item.type==='cursed').length==8,\r\n currentValue: () => Currency.eternityPoints.value.log10(),\r\n formatRecord: x => format(Decimal.pow10(x), 2),\r\n shardReduction: tiers => 2500 * tiers,\r\n maxShardReduction: goal => goal - 125,\r\n perReductionStep: 1e25,\r\n mode: V_REDUCTION_MODE.DIVISION,\r\n isSuperHard: true\r\n }\r\n ],\r\n unlocks: {\r\n vAchievementUnlock: {\r\n id: 0,\r\n reward: \"Unlock V, The Celestial Of Achievements\",\r\n description: \"Meet all the above requirements simultaneously\",\r\n requirement: () => Object.values(GameDatabase.celestials.v.mainUnlock).every(e => e.progress() >= 1)\r\n },\r\n shardReduction: {\r\n id: 1,\r\n reward: `You can spend Perk Points to reduce the goal requirement of all tiers of each V-Achievement.`,\r\n description: () => `Have ${formatInt(2)} V-Achievements`,\r\n requirement: () => V.spaceTheorems >= 2\r\n },\r\n adPow: {\r\n id: 2,\r\n reward: \"Antimatter Dimension power based on total Space Theorems.\",\r\n description: () => `Have ${formatInt(5)} V-Achievements`,\r\n effect: () => 1 + Math.sqrt(V.spaceTheorems) / 100, //this should be about ^1.13\r\n format: x => formatPow(x, 3, 3),\r\n requirement: () => V.spaceTheorems >= 5\r\n },\r\n fastAutoEC: {\r\n id: 3,\r\n reward: \"Achievement multiplier reduces Auto-EC completion time.\",\r\n description: () => `Have ${formatInt(10)} V-Achievements`,\r\n effect: () => Achievements.power,\r\n // Base rate is 60 ECs at 20 minutes each\r\n format: x =>{\r\n if (MendingUpgrade(3).isBought) return \"Instant (Mending Upgrade 3)\";\r\n else if (Ra.unlocks.instantECAndRealityUpgradeAutobuyers.canBeApplied) return \"Instant (Ra upgrade)\";\r\n return `${TimeSpan.fromMinutes(60 * 20 / x.toNumber()).toStringShort()} for full completion`;\r\n },\r\n requirement: () => V.spaceTheorems >= 10\r\n },\r\n autoAutoClean: {\r\n id: 4,\r\n reward: \"Unlock the ability to Automatically Purge Glyphs on Reality.\",\r\n description: () => `Have ${formatInt(16)} V-Achievements`,\r\n requirement: () => V.spaceTheorems >= 16\r\n },\r\n achievementBH: {\r\n id: 5,\r\n reward: \"Achievement multiplier affects Black Hole power.\",\r\n description: () => `Have ${formatInt(30)} V-Achievements`,\r\n effect: () => Achievements.power,\r\n format: x => formatX(x, 2, 0),\r\n requirement: () => V.spaceTheorems >= 30\r\n },\r\n raUnlock: {\r\n id: 6,\r\n reward() {\r\n return `Reduce the Space Theorem cost of Time Studies by ${formatInt(2)}.\r\n Unlock Ra, Celestial of the Forgotten.`;\r\n },\r\n description: () => `Have ${formatInt(36)} V-Achievements`,\r\n effect: 2,\r\n requirement: () => V.spaceTheorems >= 36\r\n },\r\n vAchMulti: {\r\n id: 7,\r\n reward() {\r\n return `Extra Achievements Multiplier based on total space theorems.`;\r\n },\r\n description: () => `Have ${formatInt(210)} V-Achievements`,\r\n effect: () => Decimal.pow(V.spaceTheorems,2).clampMin(1).toNumber(),\r\n format: x => formatX(x, 2, 2),\r\n requirement: () => V.spaceTheorems >= 210 && Ra.unlocks.unlockSHardV.isUnlocked\r\n },\r\n vAchRa: {\r\n id: 8,\r\n reward() {\r\n return `Total space theorems now boosts Ra's memory gain.`;\r\n },\r\n description: () => `Have ${formatInt(300)} V-Achievements`,\r\n effect: () => Math.max(V.spaceTheorems/50,1),\r\n format: x => formatX(x, 2, 2),\r\n requirement: () => V.spaceTheorems >= 300 && Ra.unlocks.unlockSHardV.isUnlocked\r\n },\r\n vKeep: {\r\n id: 9,\r\n reward() {\r\n return `Keep all V progress on Mend.`;\r\n },\r\n description: () => `Have ${formatInt(390)} V-Achievements`,\r\n effect: 1,\r\n requirement: () => V.spaceTheorems >= 390 && Ra.unlocks.unlockSHardV.isUnlocked\r\n }\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\n\r\n\r\n/**\r\n * @abstract\r\n */\r\nclass MathOperations {\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n add(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n subtract(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n multiply(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n divide(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n max(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n min(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n eq(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n gt(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n gte(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n lt(left, right) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-unused-vars\r\n lte(left, right) { throw new NotImplementedError(); }\r\n}\r\n\r\nMathOperations.number = new class NumberMathOperations extends MathOperations {\r\n add(left, right) { return left + right; }\r\n subtract(left, right) { return left - right; }\r\n multiply(left, right) { return left * right; }\r\n divide(left, right) { return left / right; }\r\n max(left, right) { return Math.max(left, right); }\r\n min(left, right) { return Math.min(left, right); }\r\n eq(left, right) { return left === right; }\r\n gt(left, right) { return left > right; }\r\n gte(left, right) { return left >= right; }\r\n lt(left, right) { return left < right; }\r\n lte(left, right) { return left <= right; }\r\n}();\r\n\r\nMathOperations.decimal = new class DecimalMathOperations extends MathOperations {\r\n add(left, right) { return Decimal.add(left, right); }\r\n subtract(left, right) { return Decimal.subtract(left, right); }\r\n multiply(left, right) { return Decimal.multiply(left, right); }\r\n divide(left, right) { return Decimal.divide(left, right); }\r\n max(left, right) { return Decimal.max(left, right); }\r\n min(left, right) { return Decimal.min(left, right); }\r\n eq(left, right) { return Decimal.eq(left, right); }\r\n gt(left, right) { return Decimal.gt(left, right); }\r\n gte(left, right) { return Decimal.gte(left, right); }\r\n lt(left, right) { return Decimal.lt(left, right); }\r\n lte(left, right) { return Decimal.lte(left, right); }\r\n}();\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class Currency {\r\n /**\r\n * @abstract\r\n */\r\n get value() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n set value(value) { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n * @type {MathOperations}\r\n */\r\n get operations() { throw new NotImplementedError(); }\r\n\r\n add(amount) {\r\n this.value = this.operations.add(this.value, amount);\r\n }\r\n\r\n subtract(amount) {\r\n this.value = this.operations.max(this.operations.subtract(this.value, amount), 0);\r\n }\r\n\r\n multiply(amount) {\r\n this.value = this.operations.multiply(this.value, amount);\r\n }\r\n\r\n divide(amount) {\r\n this.value = this.operations.divide(this.value, amount);\r\n }\r\n\r\n eq(amount) {\r\n return this.operations.eq(this.value, amount);\r\n }\r\n\r\n gt(amount) {\r\n return this.operations.gt(this.value, amount);\r\n }\r\n\r\n gte(amount) {\r\n return this.operations.gte(this.value, amount);\r\n }\r\n\r\n lt(amount) {\r\n return this.operations.lt(this.value, amount);\r\n }\r\n\r\n lte(amount) {\r\n return this.operations.lte(this.value, amount);\r\n }\r\n\r\n purchase(cost) {\r\n if (!this.gte(cost)) return false;\r\n this.subtract(cost);\r\n return true;\r\n }\r\n\r\n bumpTo(value) {\r\n this.value = this.operations.max(this.value, value);\r\n }\r\n\r\n dropTo(value) {\r\n this.value = this.operations.min(this.value, value);\r\n }\r\n\r\n get startingValue() { throw new NotImplementedError(); }\r\n\r\n reset() {\r\n this.value = this.startingValue;\r\n }\r\n}\r\n\r\n/**\r\n * @abstract\r\n */\r\nclass NumberCurrency extends Currency {\r\n get operations() { return MathOperations.number; }\r\n get startingValue() { return 0; }\r\n}\r\n\r\n/**\r\n * @abstract\r\n */\r\nclass DecimalCurrency extends Currency {\r\n get operations() { return MathOperations.decimal; }\r\n get mantissa() { return this.value.mantissa; }\r\n get exponent() { return this.value.exponent; }\r\n get startingValue() { return DC.D0; }\r\n}\r\nwindow.DecimalCurrency = DecimalCurrency;\r\n\r\nCurrency.antimatter = new class extends DecimalCurrency {\r\n get value() { return player.antimatter; }\r\n\r\n set value(value) {\r\n if (InfinityChallenges.nextIC) InfinityChallenges.notifyICUnlock(value);\r\n if (GameCache.cheapestAntimatterAutobuyer.value && value.gte(GameCache.cheapestAntimatterAutobuyer.value)) {\r\n // Clicking into the automation tab clears the trigger and prevents it from retriggering as long as the player\r\n // stays on the tab; leaving the tab with an available autobuyer will immediately force it to trigger again\r\n TabNotification.newAutobuyer.clearTrigger();\r\n TabNotification.newAutobuyer.tryTrigger();\r\n }\r\n player.antimatter = value;\r\n player.records.thisInfinity.maxAM = player.records.thisInfinity.maxAM.max(value);\r\n player.records.thisEternity.maxAM = player.records.thisEternity.maxAM.max(value);\r\n player.records.thisReality.maxAM = player.records.thisReality.maxAM.max(value);\r\n\r\n if (Pelle.isDoomed) {\r\n player.celestials.pelle.records.totalAntimatter = player.celestials.pelle.records.totalAntimatter.max(value);\r\n }\r\n }\r\n\r\n add(amount) {\r\n super.add(amount);\r\n if (amount.gt(0)) {\r\n player.records.totalAntimatter = player.records.totalAntimatter.add(amount);\r\n player.requirementChecks.reality.noAM = false;\r\n }\r\n }\r\n\r\n get productionPerSecond() {\r\n return NormalChallenge(12).isRunning\r\n ? AntimatterDimension(1).productionPerRealSecond.plus(AntimatterDimension(2).productionPerRealSecond)\r\n : AntimatterDimension(1).productionPerRealSecond;\r\n }\r\n\r\n get startingValue() {\r\n if (Pelle.isDisabled()) return new Decimal(100);\r\n return Effects.max(\r\n 10,\r\n Perk.startAM,\r\n Achievement(21),\r\n Achievement(37),\r\n Achievement(54),\r\n Achievement(55),\r\n Achievement(78)\r\n ).toDecimal();\r\n }\r\n}();\r\n\r\nCurrency.matter = new class extends DecimalCurrency {\r\n get value() { return player.matter; }\r\n set value(value) {\r\n player.matter = Decimal.min(value, Decimal.MAX_VALUE);\r\n }\r\n}();\r\n\r\nCurrency.infinities = new class extends DecimalCurrency {\r\n get value() { return player.infinities; }\r\n set value(value) { player.infinities = value; }\r\n}();\r\n\r\nCurrency.infinitiesBanked = new class extends DecimalCurrency {\r\n get value() { return player.infinitiesBanked; }\r\n set value(value) { player.infinitiesBanked = value; }\r\n}();\r\n\r\nCurrency.infinitiesTotal = new class extends DecimalCurrency {\r\n get value() { return player.infinities.plus(player.infinitiesBanked); }\r\n set value(value) { player.infinities = value; }\r\n}();\r\n\r\nCurrency.infinityPoints = new class extends DecimalCurrency {\r\n get value() { return player.infinityPoints; }\r\n set value(value) {\r\n player.infinityPoints = value;\r\n player.records.thisEternity.maxIP = player.records.thisEternity.maxIP.max(value);\r\n player.records.thisReality.maxIP = player.records.thisReality.maxIP.max(value);\r\n\r\n if (Pelle.isDoomed) {\r\n player.celestials.pelle.records.totalInfinityPoints =\r\n player.celestials.pelle.records.totalInfinityPoints.max(value);\r\n }\r\n }\r\n\r\n get startingValue() {\r\n if (Pelle.isDisabled()) return new Decimal(0);\r\n return Effects.max(\r\n 0,\r\n Perk.startIP1,\r\n Perk.startIP2,\r\n Achievement(104),\r\n MendingUpgrade(2[1])\r\n ).toDecimal();\r\n }\r\n\r\n reset() {\r\n super.reset();\r\n player.records.thisEternity.maxIP = this.startingValue;\r\n }\r\n}();\r\n\r\nCurrency.infinityPower = new class extends DecimalCurrency {\r\n get value() { return player.infinityPower; }\r\n set value(value) { \r\n player.infinityPower = value; \r\n }\r\n}();\r\n\r\nCurrency.eternities = new class extends DecimalCurrency {\r\n get value() { return player.eternities; }\r\n set value(value) { player.eternities = value; }\r\n\r\n get startingValue() {\r\n if (Pelle.isDoomed) return new Decimal(0);\r\n return Effects.max(\r\n 0,\r\n RealityUpgrade(10),\r\n MendingUpgrade(2[0])\r\n ).toDecimal();\r\n }\r\n}();\r\n\r\nCurrency.eternityPoints = new class extends DecimalCurrency {\r\n get value() { return player.eternityPoints; }\r\n set value(value) {\r\n player.eternityPoints = value;\r\n player.records.thisReality.maxEP = player.records.thisReality.maxEP.max(value);\r\n if (player.records.bestReality.bestEP.lt(value)) {\r\n player.records.bestReality.bestEP = value;\r\n player.records.bestReality.bestEPSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n\r\n if (Pelle.isDoomed) {\r\n player.celestials.pelle.records.totalEternityPoints =\r\n player.celestials.pelle.records.totalEternityPoints.max(value);\r\n }\r\n }\r\n\r\n get startingValue() {\r\n if (Pelle.isDisabled()) return new Decimal(0);\r\n return Effects.max(\r\n 0,\r\n Perk.startEP1,\r\n Perk.startEP2,\r\n Perk.startEP3\r\n ).toDecimal();\r\n }\r\n\r\n reset() {\r\n super.reset();\r\n player.records.thisReality.maxEP = this.startingValue;\r\n }\r\n}();\r\n\r\nCurrency.timeShards = new class extends DecimalCurrency {\r\n get value() { return player.timeShards; }\r\n set value(value) { player.timeShards = value; }\r\n}();\r\n\r\nCurrency.timeTheorems = new class extends DecimalCurrency {\r\n get value() { return player.timestudy.theorem; }\r\n set value(value) {\r\n player.timestudy.theorem = value;\r\n player.timestudy.maxTheorem = value.plus(TimeTheorems.calculateTimeStudiesCost());\r\n }\r\n\r\n get max() { return player.timestudy.maxTheorem; }\r\n\r\n add(amount) {\r\n super.add(amount);\r\n player.timestudy.maxTheorem = player.timestudy.maxTheorem.plus(amount);\r\n }\r\n\r\n reset() {\r\n respecTimeStudies(true);\r\n super.reset();\r\n TimeTheoremPurchaseType.am.reset();\r\n TimeTheoremPurchaseType.ip.reset();\r\n TimeTheoremPurchaseType.ep.reset();\r\n player.timestudy.maxTheorem = this.startingValue;\r\n }\r\n}();\r\n\r\nCurrency.tachyonParticles = new class extends DecimalCurrency {\r\n get value() { return player.dilation.tachyonParticles; }\r\n set value(value) { player.dilation.tachyonParticles = value; }\r\n}();\r\n\r\nCurrency.dilatedTime = new class extends DecimalCurrency {\r\n get value() { return player.dilation.dilatedTime; }\r\n set value(value) {\r\n player.dilation.dilatedTime = value;\r\n player.records.thisReality.maxDT = player.records.thisReality.maxDT.max(value);\r\n }\r\n}();\r\n\r\nCurrency.realities = new class extends NumberCurrency {\r\n get value() { return player.realities; }\r\n set value(value) { player.realities = value; }\r\n}();\r\n\r\nCurrency.realityMachines = new class extends DecimalCurrency {\r\n get value() { return player.reality.realityMachines; }\r\n set value(value) {\r\n const newValue = Decimal.min(value, MachineHandler.hardcapRM);\r\n const addedThisReality = newValue.minus(player.reality.realityMachines);\r\n player.reality.realityMachines = newValue;\r\n player.reality.maxRM = Decimal.max(player.reality.maxRM, newValue);\r\n if (player.reality.realityMachines.gte(player.records.thisMend.maxRM)) player.records.thisMend.maxRM = player.reality.realityMachines;\r\n if (player.records.bestReality.RM.lt(addedThisReality)) {\r\n player.records.bestReality.RM = addedThisReality;\r\n player.records.bestReality.RMSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n }\r\n}();\r\n\r\nCurrency.perkPoints = new class extends NumberCurrency {\r\n get value() { return player.reality.perkPoints; }\r\n set value(value) { player.reality.perkPoints = value; }\r\n}();\r\n\r\nCurrency.relicShards = new class extends DecimalCurrency {\r\n get value() { return player.celestials.effarig.relicShards; }\r\n set value(value) { player.celestials.effarig.relicShards = value; }\r\n}();\r\n\r\nCurrency.imaginaryMachines = new class extends NumberCurrency {\r\n get value() { return player.reality.imaginaryMachines; }\r\n set value(value) {\r\n if(player.reality.imaginaryMachines > player.records.thisMend.maxiM) player.records.thisMend.maxiM = player.reality.imaginaryMachines;\r\n player.reality.imaginaryMachines = Math.clampMax(value, MachineHandler.currentIMCap);\r\n }\r\n}();\r\n\r\nCurrency.darkMatter = new class extends DecimalCurrency {\r\n get value() { return player.celestials.laitela.darkMatter; }\r\n set value(value) {\r\n const capped = Decimal.min(value, new Decimal(Number.MAX_VALUE).times(Ra.unlocks.increaseDarkMatterCap.isUnlocked ? Decimal.pow(1e10, Ra.pets.laitela.level) : 1)).times(player.celestials.ra.upgrades.has('laitelaUpgrade') ? Currency.singularities.value*Currency.singularities.value+1 : 1);\r\n player.celestials.laitela.darkMatter = capped;\r\n player.celestials.laitela.maxDarkMatter = player.celestials.laitela.maxDarkMatter.max(capped);\r\n }\r\n\r\n get max() { return player.celestials.laitela.maxDarkMatter; }\r\n set max(value) { player.celestials.laitela.maxDarkMatter = value; }\r\n}();\r\n\r\nCurrency.darkEnergy = new class extends NumberCurrency {\r\n get value() { return player.celestials.laitela.darkEnergy; }\r\n set value(value) { player.celestials.laitela.darkEnergy = Math.min(value, 1e300); }\r\n\r\n get productionPerSecond() {\r\n return DarkMatterDimensions.all\r\n .map(d => d.productionPerSecond)\r\n .sum();\r\n }\r\n}();\r\n\r\nCurrency.singularities = new class extends NumberCurrency {\r\n get value() { return player.celestials.laitela.singularities; }\r\n set value(value) { player.celestials.laitela.singularities = value; }\r\n}();\r\n\r\nCurrency.remnants = new class extends NumberCurrency {\r\n get value() { return player.celestials.pelle.remnants; }\r\n set value(value) { player.celestials.pelle.remnants = value; }\r\n}();\r\n\r\nCurrency.realityShards = new class extends DecimalCurrency {\r\n get value() { return player.celestials.pelle.realityShards; }\r\n set value(value) { player.celestials.pelle.realityShards = value; }\r\n}();\r\n\r\nCurrency.replicanti = new class extends DecimalCurrency {\r\n get value() { return player.replicanti.amount; }\r\n set value(value) { player.replicanti.amount = value; }\r\n}();\r\n\r\nCurrency.galaxyGeneratorGalaxies = new class extends NumberCurrency {\r\n get value() {\r\n return player.galaxies + GalaxyGenerator.galaxies;\r\n }\r\n\r\n set value(value) {\r\n const spent = player.galaxies + GalaxyGenerator.galaxies - value;\r\n player.celestials.pelle.galaxyGenerator.spentGalaxies += spent;\r\n }\r\n}();\r\n\r\n//new currencies start here\r\n\r\nCurrency.mendingPoints = new class extends DecimalCurrency {\r\n get value() { \r\n return player.mendingPoints; \r\n }\r\n set value(value) {\r\n player.mendingPoints = new Decimal(value);\r\n }\r\n\r\n get startingValue() {\r\n return new Decimal(0);\r\n }\r\n\r\n reset() {\r\n //super.reset();\r\n }\r\n}();\r\n\r\nCurrency.mends = new class extends DecimalCurrency {\r\n get value() { \r\n return player.mends; \r\n }\r\n set value(value) {\r\n player.mends = new Decimal(value);\r\n }\r\n\r\n get startingValue() {\r\n return new Decimal(0);\r\n }\r\n\r\n reset() {\r\n //super.reset();\r\n }\r\n}();\r\n\r\nCurrency.corruptionFragments = new class extends NumberCurrency {\r\n get value() { \r\n return player.mending.corruptedFragments; \r\n }\r\n set value(value) {\r\n player.mending.corruptedFragments = value;\r\n }\r\n\r\n get startingValue() {\r\n return 0;\r\n }\r\n\r\n reset() {\r\n //super.reset();\r\n }\r\n}();\r\n\r\nCurrency.raPoints = new class extends DecimalCurrency {\r\n get value() { \r\n return player.celestials.ra.raPoints; \r\n }\r\n set value(value) {\r\n player.celestials.ra.raPoints = new Decimal(value);\r\n }\r\n\r\n get startingValue() {\r\n return new Decimal(0);\r\n }\r\n\r\n reset() {\r\n //super.reset();\r\n }\r\n}();\r\n\r\nCurrency.galBoostPoints = new class extends DecimalCurrency {\r\n get value() { \r\n return player.galBoostPoints; \r\n }\r\n set value(value) {\r\n player.galBoostPoints = new Decimal(value);\r\n }\r\n\r\n get startingValue() {\r\n return new Decimal(0);\r\n }\r\n\r\n reset() {\r\n //super.reset();\r\n }\r\n}();\r\n","import { DC } from \"../../constants\";\r\nimport { Currency } from \"../../currency\";\r\nimport { DEV } from \"@/env\";\r\n//import { Ra } from \"../../globals\";\r\n\r\nconst formatCost = c => format(c, 2);\r\n\r\nconst rebuyable = config => {\r\n return {\r\n id: config.id,\r\n num: config.num,\r\n celestial: config.celestial,\r\n description: config.description,\r\n cost: () => /*getHybridCostScaling(\r\n player.celestials.ra.rebuyables[config.id],\r\n 0,\r\n config.baseCost,\r\n 10,\r\n (90 * 10 ** player.celestials.ra.rebuyables[config.id]), // This is dumb. Very dumb. I know. Its also very easy, and does what i want. Shut up.\r\n DC.E333,\r\n 10,\r\n 10 //Yes the exponential and linear here are the same. Thats on purpose, this code is easier to use for just exponential (weirdly) so thats what im doing.\r\n )*/config.num<=7 ? config.baseCost*(2.5**player.celestials.ra.rebuyables[config.id]) : config.baseCost*(10**(player.celestials.ra.rebuyables[config.id]*player.celestials.ra.rebuyables[config.id]*0.1+player.celestials.ra.rebuyables[config.id])),//Idk how you make cost decrease --sxy\r\n formatCost,\r\n effect: config.effect,\r\n formatEffect: x => formatX(x, 2, 2),\r\n currency: Currency.raPoints,\r\n currencyLabel: config.currencyLabel,\r\n rebuyable: true,\r\n implemented: DEV\r\n }\r\n}\r\n\r\nconst weakenScalingRebuyable = config => {\r\n return rebuyable({\r\n id: config.id,\r\n num: config.num,\r\n celestial: config.celestial,\r\n description: config.description,\r\n baseCost: config.baseCost,\r\n currency: config.currency,\r\n currencyLabel: config.currencyLabel,\r\n effect: () => Math.pow(10, player.celestials.ra.rebuyables[config.id])\r\n }\r\n )\r\n}\r\n\r\nconst incXpGainRebuyable = config => {\r\n return rebuyable({\r\n id: config.id,\r\n num: config.num,\r\n celestial: config.celestial,\r\n description: config.description,\r\n baseCost: config.baseCost,\r\n currency: config.currency,\r\n currencyLabel: config.currencyLabel,\r\n effect: () => Math.pow(10, player.celestials.ra.rebuyables[config.id])\r\n }\r\n )\r\n}\r\n\r\nexport const raUpgrades = {\r\n weakenTeresaScaling: weakenScalingRebuyable({\r\n id: \"weakenTeresaScaling\",\r\n num: 1,\r\n celestial: \"teresa\",\r\n description: () => `Weaken Teresa's level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,//temporary, have to decide what we're gonna use (Fn its MvR for all, defined above and in ra-upgrades.js (the other one))\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n weakenEffarigScaling: weakenScalingRebuyable({\r\n id: \"weakenEffarigScaling\",\r\n num: 2,\r\n celestial: \"effarig\",\r\n description: () => `Weaken Effarig's level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n weakenEnslavedScaling: weakenScalingRebuyable({\r\n id: \"weakenEnslavedScaling\",\r\n num: 3,\r\n celestial: \"enslaved\",\r\n description: () => `Weaken Nameless' level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n weakenVScaling: weakenScalingRebuyable({\r\n id: \"weakenVScaling\",\r\n num: 4,\r\n celestial: \"v\",\r\n description: () => `Weaken V's level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n weakenRaScaling: weakenScalingRebuyable({\r\n id: \"weakenRaScaling\",\r\n num: 5,\r\n celestial: \"ra\",\r\n description: () => `Weaken Ra's level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n weakenLaitelaScaling: weakenScalingRebuyable({\r\n id: \"weakenLaitelaScaling\",\r\n num: 6,\r\n celestial: \"laitela\",\r\n description: () => `Weaken Lai'tela's level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n weakenPelleScaling: weakenScalingRebuyable({\r\n id: \"weakenPelleScaling\",\r\n num: 7,\r\n celestial: \"pelle\",\r\n description: () => `Weaken Pelle's level cost by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e7,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incTeresaXPGain: incXpGainRebuyable({\r\n id: \"incTeresaXPGain\",\r\n num: 8,\r\n celestial: \"teresa\",\r\n description: () => `Increase Teresa's Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incEffarigXPGain: incXpGainRebuyable({\r\n id: \"incEffarigXPGain\",\r\n num: 9,\r\n celestial: \"effarig\",\r\n description: () => `Increase Effarig's Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incEnslavedXPGain: incXpGainRebuyable({\r\n id: \"incEnslavedXPGain\",\r\n num: 10,\r\n celestial: \"enslaved\",\r\n description: () => `Increase Nameless' Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incVXPGain: incXpGainRebuyable({\r\n id: \"incVXPGain\",\r\n num: 11,\r\n celestial: \"v\",\r\n description: () => `Increase V's Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incRaXPGain: incXpGainRebuyable({\r\n id: \"incRaXPGain\",\r\n num: 12,\r\n celestial: \"ra\",\r\n description: () => `Increase Ra's Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incLaitelaXPGain: incXpGainRebuyable({\r\n id: \"incLaitelaXPGain\",\r\n num: 13,\r\n celestial: \"laitela\",\r\n description: () => `Increase Lai'tela's Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n incPelleXPGain: incXpGainRebuyable({\r\n id: \"incPelleXPGain\",\r\n num: 14,\r\n celestial: \"pelle\",\r\n description: () => `Increase Pelle's Memory gain by ${formatX(10)} (before exponents)`,\r\n baseCost: 1e8,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n }),\r\n teresaUpgrade: {\r\n id: \"teresaUpgrade\",\r\n celestial: \"teresa\",\r\n description: \"Cost of Elliptic Materiality ^0.85, and add extra Reality Machine cap based on Teresa's Reality Antimatter Record.\",\r\n cost: 1e18,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true//Ra.unlocks.improvedPetUpgrades.isUnlocked,\r\n },\r\n effarigUpgrade: {\r\n id: \"effarigUpgrade\",\r\n celestial: \"effarig\",\r\n description: \"Triple Reality Glyph level.\",\r\n cost: 1e19,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true,\r\n },\r\n enslavedUpgrade: {\r\n id: \"enslavedUpgrade\",\r\n celestial: \"enslaved\",\r\n description: \"Stored Real Time is always at its cap, and Stored Real Time affects Game Speed.\",\r\n cost: 1e19,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true,\r\n },\r\n vUpgrade: {\r\n id: \"vUpgrade\",\r\n celestial: \"v\",\r\n description: \"The memory rebuyable Warp Upgrade now also affect achievement multiplier.\",\r\n cost: 1e19,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true,\r\n },\r\n raUpgrade: {\r\n id: \"raUpgrade\",\r\n celestial: \"ra\",\r\n description: \"Memory Crystal reduces Dimension Boost cost.\",\r\n cost: 2e22,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true,\r\n },\r\n laitelaUpgrade: {\r\n id: \"laitelaUpgrade\",\r\n celestial: \"laitela\",\r\n description: \"Singularities increases Dark Matter cap.\",\r\n cost: 5e21,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true,\r\n },\r\n pelleUpgrade: {\r\n id: \"pelleUpgrade\",\r\n celestial: \"pelle\",\r\n description: \"Doomed Reality won't END if Galaxy Generator is not unlocked.\",\r\n cost: 5e21,\r\n currency: () => Currency.raPoints,\r\n currencyLabel: \"Memory Crystal\",\r\n implemented: true,\r\n },\r\n}","import { finalSigil } from \"./navigation-sigils/final-sigil\";\r\nimport { galaxyIcon } from \"./navigation-sigils/galaxy-icon\";\r\nimport { alchemyResources } from \"./alchemy\";\r\nimport { effarigUnlocks } from \"./effarig\";\r\nimport { enslaved } from \"./enslaved\";\r\nimport { pelleGalaxyGeneratorUpgrades } from \"./galaxy-generator\";\r\nimport { celestialNavigation } from \"./navigation\";\r\nimport { pelleUpgrades } from \"./pelle-upgrades\";\r\nimport { perkShop } from \"./perk-shop\";\r\nimport { ra } from \"./ra\";\r\nimport { pelleRifts } from \"./rifts\";\r\nimport { singularityMilestones } from \"./singularity-milestones\";\r\nimport { pelleStrikes } from \"./strikes\";\r\nimport { teresa } from \"./teresa\";\r\nimport { quotes } from \"./quotes\";\r\nimport { v } from \"./v\";\r\nimport { raUpgrades } from \"./ra-upgrades\";\r\n\r\nexport const celestials = {\r\n effarig: {\r\n unlocks: effarigUnlocks\r\n },\r\n alchemy: {\r\n resources: alchemyResources\r\n },\r\n pelle: {\r\n galaxyGeneratorUpgrades: pelleGalaxyGeneratorUpgrades,\r\n strikes: pelleStrikes,\r\n upgrades: pelleUpgrades,\r\n rifts: pelleRifts\r\n },\r\n descriptions: {},\r\n enslaved,\r\n navigation: celestialNavigation,\r\n navSigils: {\r\n ...galaxyIcon,\r\n ...finalSigil\r\n },\r\n perkShop,\r\n ra,\r\n raUpgrades,\r\n singularityMilestones,\r\n teresa,\r\n quotes,\r\n v\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nconst specialInfinityGlyphDisabledEffectText = () => (PelleRifts.chaos.milestones[1].canBeApplied\r\n ? \"The Pelle-Specific effect from Infinity Glyphs is also disabled.\"\r\n : \"\");\r\n\r\nexport const eternityChallenges = [\r\n {\r\n id: 1,\r\n description: \"Time Dimensions are disabled.\",\r\n goal: DC.E1800,\r\n goalIncrease: DC.E200,\r\n reward: {\r\n description: \"Time Dimension multiplier based on time spent this Eternity\",\r\n effect: completions =>\r\n {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(1);\r\n return Decimal.pow(Decimal.max(player.records.thisEternity.time.div(10), 0.9), 0.3 + (completions * 0.05))\r\n },\r\n formatEffect: value => formatX(value, 2, 1),\r\n },\r\n vReward:{\r\n description: `⌬ Time Dimension power based on real time spent this Mend ⌬`,\r\n effect: () => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return Math.min(0.5, (Math.log10(player.records.thisMend.realTime + 1) / 100)) * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600) + 1\r\n },\r\n formatEffect: value => formatPow(value, 2, 3),\r\n },\r\n // These will get notation-formatted and scrambled between for the final goal\r\n scrambleText: [\"1e2600\", \"1e201600\"],\r\n },\r\n {\r\n id: 2,\r\n description: \"Infinity Dimensions are disabled.\",\r\n goal: DC.E975,\r\n pelleGoal: DC.E1750,\r\n goalIncrease: DC.E175,\r\n reward: {\r\n description: \"1st Infinity Dimension multiplier based on Infinity Power\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(1);\r\n return Currency.infinityPower.value.pow(1.5 / (700 - completions * 100)).clampMin(1)},\r\n cap: DC.E100,\r\n formatEffect: value => formatX(value, 2, 1),\r\n },\r\n vReward:{\r\n description: `⌬ Infinity Dimension power based on Infinity Power ⌬`,\r\n effect: () => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 + (Math.log10(Math.max(Currency.infinityPower.value.clampMin(1).log10(), 1)) / 500) * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600)},\r\n formatEffect: value => formatPow(value, 2, 3)\r\n }\r\n },\r\n {\r\n id: 3,\r\n description: \"Antimatter Dimensions 5-8 don't produce anything. Dimensional Sacrifice is disabled.\",\r\n goal: DC.E600,\r\n pelleGoal: DC.E925,\r\n goalIncrease: DC.E75,\r\n reward: {\r\n description: () => `Increase the multiplier for buying ${formatInt(10)} Antimatter Dimensions`,\r\n effect: completions => { if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 0;\r\n return completions * 0.72},\r\n formatEffect: value => `+${format(value, 2, 2)}`,\r\n },\r\n vReward:{\r\n description: `⌬ All per-purchase multipliers raised ⌬`,\r\n formatEffect: value => `${formatPow(value, 3, 3)}`,\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 + (0.0005 * completions * ((Ra.pets.v.level - 25) / 75) + V.spaceTheorems / 600)},\r\n }\r\n },\r\n {\r\n id: 4,\r\n description: `all Infinity multipliers and generators are disabled. The goal must be reached within a certain\r\n number of Infinities or else you will fail the Challenge.`,\r\n goal: DC.E2750,\r\n goalIncrease: DC.E550,\r\n restriction: completions => Math.max(16 - 4 * completions, 0),\r\n checkRestriction: restriction => Currency.infinities.lte(restriction),\r\n formatRestriction: restriction => (restriction === 0\r\n ? \"without any Infinities\"\r\n : `in ${quantifyInt(\"Infinity\", restriction)} or less`),\r\n failedRestriction: \"(Too many Infinities for more)\",\r\n reward: {\r\n description: \"Infinity Dimension multiplier based on unspent IP\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(1);\r\n return Currency.infinityPoints.value.pow(0.003 + completions * 0.002)\r\n },\r\n cap: DC.E200,\r\n formatEffect: value => formatX(value, 2, 1),\r\n },\r\n vReward:{\r\n description: `⌬ All Dimension power based on Multiversal Remains ⌬`,\r\n effect: () => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 + (Decimal.log10(Currency.mendingPoints.value.add(1)) / 250) / 10 * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600)},\r\n formatEffect: value => formatPow(value, 3, 3),\r\n }\r\n },\r\n {\r\n id: 5,\r\n description: () => `Antimatter Galaxy cost increase scaling starts immediately (normally at ${formatInt(100)}\r\n Galaxies). Dimension Boost costs scaling is massively increased.`,\r\n goal: DC.E750,\r\n pelleGoal: DC.E1400,\r\n goalIncrease: DC.E400,\r\n reward: {\r\n description: \"Distant Galaxy cost scaling starts later\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 0;\r\n return completions * 5},\r\n formatEffect: value => `${formatInt(value)} AG later`,\r\n },\r\n vReward:{\r\n description: `⌬ Obscure Galaxy scaling starts later ⌬`,\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 0;\r\n return 500 * completions * ((Ra.pets.v.level - 25) / 75)},\r\n formatEffect: value => `${formatInt(value)} AG later`,\r\n }\r\n },\r\n {\r\n id: 6,\r\n // The asterisk, if present, will get replaced with strings generated from the scramble text\r\n description: () => {\r\n if (Enslaved.isRunning) return \"you *. The cost of upgrading your max Replicanti Galaxies is massively reduced.\";\r\n return \"you cannot gain Antimatter Galaxies normally. The cost of upgrading your max Replicanti\" +\r\n \" Galaxies is massively reduced.\";\r\n },\r\n goal: DC.E850,\r\n pelleGoal: DC.E1500,\r\n goalIncrease: DC.E250,\r\n reward: {\r\n description: \"Further reduce Antimatter Dimension cost multiplier growth\",\r\n effect: completions => completions * 0.2,\r\n formatEffect: value => {\r\n if(MendingUpgrade(8).isBought) return `${formatX(1.5, 2, 2)} (Mending Upgrade 8)`\r\n const total = Math.round(Player.dimensionMultDecrease + Effects.sum(EternityChallenge(6).reward)) - value;\r\n return `-${format(value, 2, 1)} (${formatX(total, 2, 1)} total)`;\r\n }\r\n },\r\n vReward:{\r\n description: `⌬ Continuum multiplier ⌬`,\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 + (0.01 * completions) * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600)},\r\n formatEffect: value => `${formatX(value, 2, 2)}`\r\n },\r\n scrambleText: [\"cannot gain Antimatter Galaxies normally\", \"c㏰'퐚 gai鸭 Anti꟢at랜erﻪﶓa⁍axie㮾 䂇orma㦂l\"],\r\n },\r\n {\r\n id: 7,\r\n description:\r\n \"1st Time Dimensions produce 8th Infinity Dimensions and 1st Infinity Dimensions produce \" +\r\n \"7th Antimatter Dimensions. Tickspeed also directly applies to Infinity and Time Dimensions.\",\r\n goal: DC.E2000,\r\n pelleGoal: DC.E2700,\r\n goalIncrease: DC.E530,\r\n effect: () => TimeDimension(1).productionPerSecond,\r\n reward: {\r\n description: \"1st Time Dimension produces 8th Infinity Dimensions\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(0);\r\n return TimeDimension(1).productionPerSecond.pow(completions * 0.2).minus(1).clampMin(0)},\r\n formatEffect: value => `${format(value, 2, 1)} per second`,\r\n },\r\n vReward:{\r\n description: \"⌬ 1st Dark Matter Dimension produces 8th Time dimension ⌬\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(0);\r\n return DarkMatterDimension(1).powerDM.times(1000).div(DarkMatterDimension(1).interval).pow(0.2 * completions).minus(1).clampMin(0).mul((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600)},\r\n formatEffect: value => `${format(value, 2, 2)} per second`,\r\n }\r\n },\r\n {\r\n id: 8,\r\n description: () => `you can only upgrade Infinity Dimensions ${formatInt(50)} times and Replicanti\r\n upgrades ${formatInt(40)} times. Infinity Dimension and Replicanti upgrade autobuyers are disabled.`,\r\n goal: DC.E1300,\r\n pelleGoal: DC.E2800,\r\n goalIncrease: DC.E900,\r\n reward: {\r\n description: \"Infinity Power strengthens Replicanti Galaxies\",\r\n effect: completions => {\r\n if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 0;\r\n const infinityPower = Math.log10(Currency.infinityPower.value.pLog10() + 1);\r\n return Math.max(0, Math.pow(infinityPower, 0.03 * completions) - 1);\r\n },\r\n formatEffect: value => formatPercents(value, 2)\r\n },\r\n vReward: {\r\n description: \"⌬ Time Shards strengthen all Galaxy types ⌬\",\r\n effect: completions => {\r\n if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 0;\r\n const timeShards = Math.log10(Currency.timeShards.value.pLog10() + 1);\r\n return Math.max(0, (Math.pow(timeShards, 0.03 * completions) - 1) * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600) / 10);\r\n },\r\n formatEffect: value => formatPercents(value, 2)\r\n }\r\n },\r\n {\r\n id: 9,\r\n description: () => `you cannot buy Tickspeed upgrades. Infinity Power instead multiplies\r\n Time Dimensions with greatly reduced effect. ${specialInfinityGlyphDisabledEffectText()}`,\r\n goal: DC.E1750,\r\n pelleGoal: DC.E2900,\r\n goalIncrease: DC.E250,\r\n reward: {\r\n description: \"Infinity Dimension multiplier based on Time Shards\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(1);\r\n return Currency.timeShards.value.pow(completions * 0.1).clampMin(1)},\r\n cap: DC.E400,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n vReward:{\r\n description: \"⌬ Infinity Dimension multiplier based on Tickspeed upgrade counts ⌬\",\r\n effect: () => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(1);\r\n return Decimal.pow(10, new Decimal(Tickspeed.totalUpgrades).times((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600).div(10)).clampMin(1)},\r\n formatEffect: value => formatX(value, 3, 3)\r\n }\r\n },\r\n {\r\n id: 10,\r\n description: () => {\r\n let description = `Time Dimensions and Infinity Dimensions are disabled. You gain an immense boost from\r\n Infinities to Antimatter Dimensions (Infinities${formatPow(950)}). ${specialInfinityGlyphDisabledEffectText()}`;\r\n EternityChallenge(10).applyEffect(v => description += ` Currently: ${formatX(v, 2, 1)}`);\r\n return description;\r\n },\r\n goal: DC.E3000,\r\n pelleGoal: DC.E3200,\r\n goalIncrease: DC.E300,\r\n effect: () => Decimal.pow(Currency.infinitiesTotal.value, 950).clampMin(1).pow(TimeStudy(31).effectOrDefault(1)),\r\n reward: {\r\n description: \"Time Dimension multiplier based on Infinities\",\r\n effect: completions => {\r\n if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return new Decimal(1);\r\n const mult = Currency.infinitiesTotal.value.times(2.783e-6).pow(0.4 + 0.1 * completions).clampMin(1);\r\n return mult.powEffectOf(TimeStudy(31));\r\n },\r\n formatEffect: value => {\r\n if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return \"×1.0\";\r\n // Since TS31 is already accounted for in the effect prop, we need to \"undo\" it to display the base value here\r\n const mult = formatX(value, 2, 1);\r\n return TimeStudy(31).canBeApplied\r\n ? `${formatX(value.pow(1 / TimeStudy(31).effectValue), 2, 1)} (After TS31: ${mult})`\r\n : mult;\r\n }\r\n },\r\n vReward:{\r\n description: \"⌬ Time Dimension power based on Infinities ⌬\",\r\n effect: () => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 + (Decimal.log10(Currency.infinities.value.add(1)) / 500000 * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600))},\r\n formatEffect: value => `${formatPow(value, 3, 3)}`\r\n }\r\n },\r\n {\r\n id: 11,\r\n description: () => `all Dimension multipliers and powers are disabled except for the multipliers from\r\n Infinity Power and Dimension Boosts (to Antimatter Dimensions). ${specialInfinityGlyphDisabledEffectText()}`,\r\n goal: DC.E450,\r\n pelleGoal: DC.E11200,\r\n goalIncrease: DC.E200,\r\n pelleGoalIncrease: DC.E1400,\r\n reward: {\r\n description: \"Further reduce Tickspeed cost multiplier growth\",\r\n effect: completions => completions * 0.07,\r\n formatEffect: value => {\r\n if(MendingUpgrade(8).isBought) return `${formatX(1.2, 2, 2)} (Mending Upgrade 8)`\r\n const total = Math.round(Player.tickSpeedMultDecrease + Effects.sum(EternityChallenge(11).reward)) - value;\r\n return `-${format(value, 2, 2)} (${formatX(total, 2, 2)} total)`;\r\n }\r\n },\r\n vReward:{\r\n description: \"⌬ Reduce free Tickspeed upgrade scaling ⌬\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 - (0.0005 * completions) * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600)},\r\n formatEffect: value => `${formatPow(value, 3, 3)}`\r\n }\r\n },\r\n {\r\n id: 12,\r\n description: () => (PlayerProgress.realityUnlocked()\r\n ? `the game runs ×${formatInt(1000)} slower; all other game speed effects are disabled. The goal must be reached\r\n within a certain amount of time or you will fail the Challenge. ${specialInfinityGlyphDisabledEffectText()}`\r\n : `the game runs ×${formatInt(1000)} slower. The goal must be reached\r\n within a certain amount of time or you will fail the Challenge.`),\r\n goal: DC.E110000,\r\n pelleGoal: DC.E208000,\r\n goalIncrease: DC.E12000,\r\n restriction: completions => Math.max(10 - 2 * completions, 1) / 10,\r\n checkRestriction: restriction => Time.thisEternity.totalSeconds.lt(restriction),\r\n formatRestriction: restriction => `in ${quantify(\"in-game second\", restriction, 0, 1)} or less.`,\r\n failedRestriction: \"(Too slow for more)\",\r\n reward: {\r\n description: \"Infinity Dimension cost multipliers are reduced\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return 1 - completions * 0.008},\r\n formatEffect: value => `x${formatPow(value, 3, 3)}`\r\n },\r\n vReward:{\r\n description: \"⌬ Increase Infinity Dimension caps ⌬\",\r\n effect: completions => {if (player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8) return 1;\r\n return Math.max(1, 1/(1-(0.008 * completions) * ((Ra.pets.v.level - 25) / 75 + V.spaceTheorems / 600)))},\r\n formatEffect: value => `${formatPow(value, 3, 3)}`\r\n }\r\n }\r\n];\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const infinityChallenges = [\r\n {\r\n id: 1,\r\n description: `all Normal Challenge restrictions are active at once, with the exception of the\r\n Tickspeed (C9) and Big Crunch (C12) Challenges.`,\r\n goal: DC.E650,\r\n isQuickResettable: true,\r\n reward: {\r\n description: () => `${formatX(1.3, 1, 1)} on all Infinity Dimensions for each Infinity Challenge completed`,\r\n effect: () => {\r\n let x = BreakInfinityUpgrade.slowestChallengeMult.chargedEffect.isEffectActive ? Ra.pets.teresa.level * 1e9 : 1;\r\n return Decimal.pow(Math.pow(1.3, InfinityChallenges.completed.length), x);\r\n },\r\n formatEffect: value => formatX(value, 3, 3)\r\n },\r\n unlockAM: DC.E2000,\r\n },\r\n {\r\n id: 2,\r\n description: () => `Dimensional Sacrifice happens automatically every ${formatInt(400)} milliseconds once you have\r\n an 8th Antimatter Dimension.`,\r\n goal: DC.E10500,\r\n isQuickResettable: false,\r\n reward: {\r\n description: () => `Dimensional Sacrifice autobuyer and stronger Dimensional Sacrifice\r\n ${Sacrifice.getSacrificeDescription({ \"InfinityChallenge2isCompleted\": false })} ➜\r\n ${Sacrifice.getSacrificeDescription({ \"InfinityChallenge2isCompleted\": true })}`,\r\n },\r\n unlockAM: DC.E11000,\r\n },\r\n {\r\n id: 3,\r\n description: () =>\r\n `Tickspeed upgrades are always ${formatX(1)}. For every Tickspeed upgrade purchase, you instead get a static\r\n multiplier on all Antimatter Dimensions which increases based on Antimatter Galaxies.`,\r\n goal: DC.E5000,\r\n isQuickResettable: false,\r\n effect: () => Decimal.pow(1.05 + (player.galaxies * 0.005), player.totalTickBought),\r\n formatEffect: value => formatX(value, 2, 2),\r\n reward: {\r\n description: `Antimatter Dimension multiplier based on Antimatter Galaxies and Tickspeed purchases`,\r\n effect: () => (Laitela.continuumActive\r\n ? Decimal.pow(1.05 + (player.galaxies * 0.005), Tickspeed.continuumValue)\r\n : Decimal.pow(1.05 + (player.galaxies * 0.005), player.totalTickBought)),\r\n formatEffect: value => formatX(value, 2, 2),\r\n },\r\n unlockAM: DC.E12000,\r\n },\r\n {\r\n id: 4,\r\n description: () =>\r\n `only the latest bought Antimatter Dimension's production is normal. All other Antimatter Dimensions\r\n produce less (${formatPow(0.25, 2, 2)}).`,\r\n goal: DC.E13000,\r\n isQuickResettable: true,\r\n effect: 0.25,\r\n reward: {\r\n description: () => `All Antimatter Dimension multipliers become multiplier${formatPow(1.05, 2, 2)}`,\r\n effect: 1.05\r\n },\r\n unlockAM: DC.E14000,\r\n },\r\n {\r\n id: 5,\r\n description:\r\n `buying Antimatter Dimensions 1-4 causes all cheaper AD costs to increase.\r\n Buying Antimatter Dimensions 5-8 causes all more expensive AD costs to increase.`,\r\n goal: DC.E16500,\r\n isQuickResettable: true,\r\n reward: {\r\n description: () =>\r\n `All Galaxies are ${formatPercents(0.1)} stronger and reduce the requirements for them\r\n and Dimension Boosts by ${formatInt(1)}`,\r\n effect: 1.1\r\n },\r\n unlockAM: DC.E18000,\r\n },\r\n {\r\n id: 6,\r\n description: () =>\r\n `exponentially rising matter divides the multiplier on all of your Antimatter Dimensions\r\n once you have at least ${formatInt(1)} 2nd Antimatter Dimension.`,\r\n goal: DC.D2E22222,\r\n isQuickResettable: true,\r\n effect: () => Currency.matter.value.clampMin(1),\r\n formatEffect: value => `/${format(value, 1, 2)}`,\r\n reward: {\r\n description: \"Infinity Dimension multiplier based on tickspeed\",\r\n effect: () => Tickspeed.perSecond.pow(0.0005),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n unlockAM: DC.E22500,\r\n },\r\n {\r\n id: 7,\r\n description: () => {\r\n // Copied from DimBoost.power; this is the base amount before any multipliers. Post-eternity this isn't\r\n // necessarily 2.5x by the time the player sees this challenge; it's probably most accurate to say what it\r\n // currently is, and this phrasing avoids 10x ➜ 10x with the old description.\r\n const mult = Effects.max(\r\n 2,\r\n InfinityUpgrade.dimboostMult,\r\n InfinityChallenge(7).reward,\r\n TimeStudy(81)\r\n );\r\n return `you cannot buy Antimatter Galaxies. Base Dimension Boost multiplier is increased to a maximum\r\n of ${formatX(10)}. (Current base multiplier: ${formatX(mult, 2, 1)})`;\r\n },\r\n goal: DC.E10000,\r\n isQuickResettable: false,\r\n effect: 10,\r\n reward: {\r\n description: () => `Dimension Boost multiplier is increased to a minimum of ${formatX(4)}`,\r\n effect: 4\r\n },\r\n unlockAM: DC.E23000,\r\n },\r\n {\r\n id: 8,\r\n description: () =>\r\n `AD production rapidly and continually drops over time. Purchasing Antimatter Dimension or Tickspeed\r\n upgrades sets production back to ${formatPercents(1)} before it starts dropping again.`,\r\n goal: DC.E27000,\r\n isQuickResettable: true,\r\n effect: () => DC.D0_8446303389034288.pow(\r\n Math.max(0, player.records.thisInfinity.time.sub(player.records.thisInfinity.lastBuyTime).min(1e250).toNumber())),\r\n reward: {\r\n description:\r\n \"You get a multiplier to AD 2-7 based on 1st and 8th AD multipliers.\",\r\n effect: () => AntimatterDimension(1).multiplier.times(AntimatterDimension(8).multiplier).pow(0.02),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n unlockAM: DC.E28000,\r\n },\r\n];\r\n","import { DC } from \"../../constants\";\r\n\r\n// I tried to make it relatively simple to add more locks; the idea is that you give it a value here\r\n// and then it's all handled in the backend\r\n// If you need to lock a challenge, set lockedAt to a new Decimal variable reflective of a desired number of Infinities\r\n// They will always be unlocked post-eternity\r\n\r\nexport const normalChallenges = [\r\n {\r\n id: 1,\r\n legacyId: 1,\r\n isQuickResettable: false,\r\n description() {\r\n return PlayerProgress.eternityUnlocked()\r\n ? \"reach Infinity for the first time outside of a challenge.\"\r\n : \"reach Infinity for the first time.\";\r\n },\r\n name: \"1st Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 1st Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 2,\r\n legacyId: 2,\r\n isQuickResettable: false,\r\n description:\r\n () => \"buying Antimatter Dimensions or Tickspeed upgrades halts production of all Antimatter Dimensions. \" +\r\n `Production gradually returns to normal over ${formatInt(3)} minutes.`,\r\n name: \"2nd Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 2nd Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 3,\r\n legacyId: 3,\r\n isQuickResettable: false,\r\n description:\r\n `the 1st Antimatter Dimension is heavily weakened, but gets an uncapped exponentially increasing multiplier.\r\n This multiplier resets after Dimension Boosts and Antimatter Galaxies.`,\r\n name: \"3rd Antimatter Dimension\",\r\n reward: \"Upgradeable 3rd Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 4,\r\n legacyId: 8,\r\n isQuickResettable: false,\r\n description: \"buying an Antimatter Dimension automatically erases all lower tier Antimatter Dimensions, \" +\r\n \"like a sacrifice without the boost.\",\r\n name: \"4th Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 4th Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 5,\r\n legacyId: 6,\r\n isQuickResettable: false,\r\n description:\r\n () => `the Tickspeed purchase multiplier starts at ${formatX(1.080, 0, 3)} instead of ${formatX(1.1245, 0, 3)}.`,\r\n name: \"5th Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 5th Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 6,\r\n legacyId: 10,\r\n isQuickResettable: false,\r\n description: () => `upgrading each Antimatter Dimension costs the Antimatter Dimension ${formatInt(2)} tiers ` +\r\n \"below it instead of antimatter. Antimatter Dimension prices are modified.\",\r\n name: \"6th Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 6th Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 7,\r\n legacyId: 9,\r\n isQuickResettable: false,\r\n description: () =>\r\n `the multiplier from buying ${formatInt(10)} Antimatter Dimensions is reduced to ${formatX(1)}. This increases by\r\n ${formatX(0.2, 1, 1)} per Dimension Boost, to a maximum of ${formatX(2)}, and is unaffected by any upgrades.`,\r\n name: \"7th Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 7th Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 8,\r\n legacyId: 11,\r\n isQuickResettable: false,\r\n description: `Dimension Boosts provide no multiplier and Antimatter Galaxies cannot be bought. Dimensional\r\n Sacrifice resets antimatter and all Antimatter Dimensions, but also gives a significantly stronger multiplier.`,\r\n name: \"8th Antimatter Dimension Autobuyer\",\r\n reward: \"Upgradeable 8th Antimatter Dimension Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 9,\r\n legacyId: 5,\r\n isQuickResettable: true,\r\n description: () => `whenever you buy Tickspeed upgrades or ${formatInt(10)} of an Antimatter Dimension, ` +\r\n \"everything else of equal cost will increase to its next cost step.\",\r\n name: \"Tickspeed Autobuyer\",\r\n reward: \"Upgradeable Tickspeed Autobuyer\",\r\n lockedAt: DC.D0,\r\n },\r\n {\r\n id: 10,\r\n legacyId: 4,\r\n isQuickResettable: false,\r\n description: () => `there are only ${formatInt(6)} Antimatter Dimensions. Dimension Boost ` +\r\n \"and Antimatter Galaxy costs are modified.\",\r\n name: \"Automated Dimension Boosts\",\r\n reward: \"Dimension Boosts Autobuyer\",\r\n lockedAt: DC.D16,\r\n },\r\n {\r\n id: 11,\r\n legacyId: 12,\r\n isQuickResettable: true,\r\n description: () => `there is normal matter which rises once you have at least ${formatInt(1)} 2nd Antimatter ` +\r\n \"Dimension. If it exceeds your antimatter, it will Dimension Boost without giving the bonus.\",\r\n name: \"Automated Antimatter Galaxies\",\r\n reward: \"Antimatter Galaxies Autobuyer\",\r\n lockedAt: DC.D16,\r\n },\r\n {\r\n id: 12,\r\n legacyId: 7,\r\n isQuickResettable: false,\r\n description: () => `each Antimatter Dimension produces the Dimension ${formatInt(2)} tiers below it\r\n instead of ${formatInt(1)}. Both 1st and 2nd Dimensions produce antimatter.\r\n The 2nd, 4th, and 6th Dimensions are made stronger to compensate.`,\r\n name: \"Automated Big Crunches\",\r\n reward: \"Big Crunches Autobuyer\",\r\n lockedAt: DC.D16,\r\n }\r\n];\r\n","import { CorruptionData } from \"../../corruption\"\r\nimport { corruptionChallengeScoreCalculation } from \"../mending/corruption\"\r\n\r\nexport const corruptionChallenge = {\r\n active: () => player.mending.corruption.countWhere(u => u > 0),\r\n /*\r\n bonus mult takes the nth nth simplical polytopic number.\r\n In simple terms:\r\n 0 would be the first row (Basically an array of 1's, but we take 0 (special case))\r\n 1 would be the second row (triangular numbers: 1, 3, 6, 10 ,15, 21 - we take 3 (second num))\r\n 2 would be the third row (tetrahedral numbers: 1, 4, 10, 20, 35 - we take 10 (3rd num))\r\n 3 would be the fourth row (pentachoron numbers: 1, 5, 15, 35, 70 - we take 35 (4th num))\r\n So on and so forth. List of them can be found https://oeis.org/wiki/Simplicial_polytopic_numbers\r\n */\r\n bonusMult: () => [0, 1, 3, 10, 35, 126, 462, 1716, 6435, 24310, 92378][Math.floor(Math.min(player.mending.corruption.countWhere(u => u > 0), player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0)/player.mending.corruption.countWhere(u => u > 0) - 1))],\r\n incBonusText: () => {\r\n return \"In order to increase your bonus multiplier, you should \" + (player.mending.corruption.countWhere(u => u > 0) < player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0)/player.mending.corruption.countWhere(u => u > 0) - 1 ? \"increase the number of Hostilities active.\" : \"increase the average level of your Hostilities.\"\r\n )\r\n },\r\n desc: boolean => {\r\n return boolean ? \"You have not selected any Hostilities, you cannot enter this challenge\" : \"Reach e9e15 antimatter and Mend without Galaxy Generator while in a more difficult Reality, in order to gain Hostile Fragments. All upgrades will be reset if you complete a reality with more Hostile Fragments then you are carrying.\"\r\n },\r\n reward: amount => {\r\n return /*CorruptionData.recordCorruptedFragments > (Math.log2(CorruptionData.calcScore())) ? (`If you completed this challenge, you would not gain any Hostile Fragments, because ${player.mending.corruption.countWhere(u => u > 0) == 0 ? \"you have no enabled Hostilities.\" : \"you have more Hostile Fragments than you would gain.\"}`) :*/ `If you completed this challenge, you would gain ${quantifyInt(\"Hostile Fragment\", amount)}. (Without HU20 bonus)`\r\n },\r\n unlocked: () => { return Ra.pets.pelle.level >= 75}\r\n}","import { eternityChallenges } from \"./eternity-challenges\";\r\nimport { infinityChallenges } from \"./infinity-challenges\";\r\nimport { normalChallenges } from \"./normal-challenges\";\r\nimport { corruptionChallenge } from \"./corruption-challenge\";\r\n\r\nexport const challenges = {\r\n normal: normalChallenges,\r\n infinity: infinityChallenges,\r\n eternity: eternityChallenges,\r\n corruption: corruptionChallenge\r\n};\r\n","export const changelog = [\r\n /**\r\n * @template\r\n * {\r\n * @property {Array: Number} date Date of the release of the update, stored in order of year-month-date.\r\n * @property {String} name Name of the update entry. Optional.\r\n * @property {Number} id Unique ID for each entry (generated in-game, not explicitly stated)\r\n * @property {function: @return String} info Text body of information for the entry.\r\n * }\r\n */\r\n {\r\n date: [\"20??\", \"??\", \"??\"],\r\n name: \"idk yet\",\r\n info: \r\n `\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Implemented Mending Upgrades 6, 20, and all rebuyables
  • \r\n
  • Implemented 20 Mend Milestone
  • \r\n
  • Implemented Warp Reality
  • \r\n
  • Added Mending content to the catchup modal
  • \r\n
  • Endgame: 20 Mend Milestone and about ee?? antimatter
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed Pelle Time Dilation Rebuyables' display when their cap is reached
  • \r\n
  • Made Glyph Sacrifice mode defalut to \"Always Sacrifice\" on Mend
  • \r\n
  • Glyph Filter Mode is set to \"Lowest Total Glyph Sacrifice\" on Mend
  • \r\n
  • Made all pre-Pelle achievements visible again on a new game
  • \r\n
  • Fixed progress stage not being updated on Mend
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • When importing a Vanilla save, rebuyable Mending Upgrade costs and effects don't get initalized properly, saving and refreshing should fix it
  • \r\n
  • The amount of Glyph Slots sometimes doesn't update properly when 20MM buys them, performing a Reality Reset while not on the Glyph tab should fix it
  • \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
  • There are console errors when viewing the TS tree when unlocking a Triad Study (this doesn't effect gameplay)
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 31],\r\n name: \"The Glyph Nerf and Game Time fix\",\r\n info: \r\n `Apparently people were getting lv. 200k Glyphs, let's change that\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Added a 3rd Glyph instability threshold (good luck getting your level 100k+ Glyphs now >:))
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Hardcapped playtime to 1e308 (this should fix some freezes caused by Infinite time played)
  • \r\n
  • Fixed display bugs on EC6 and EC11's Effects and the Dimension and Tickspeed scaling Break Infinity Upgrades
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 30],\r\n name: \"Doom Glyph Slot Hotfix\",\r\n info: \r\n `More MU4 remnants we missed\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed Glyph swapping in Doomed Reality
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 29],\r\n name: \"the MU4 effect Remnant fix and other crap\",\r\n info: \r\n `Accidently left MU4's old effect\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Added a new loading splash screen (thanks Kruta).
  • \r\n
  • Added fancy names to the Mendning Upgrades (thanks Kruta)
  • \r\n
  • When completing a tier of Effarig's Reality, it completes all tiers before it. (i.e. Completing Effarig's Eternity also completes their Infinity)
  • \r\n
  • Added a Mending entry in the \"How to Play\" modal
  • \r\n
  • Added common Mending Abbrevations in the \"Common Abbreviations\" section in \"How to Play\"
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed EC6 and 11's reward displaying incorrectly when MU8 is purchased
  • \r\n
  • Fixed MU8 scaling not applying correctly
  • \r\n
  • Fixed having 5 glyph slots in Pelle when MU4 is purchased
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 28],\r\n name: \"Even More Upgrades\",\r\n info: \r\n `Hopefully 2nd to last Mending Upgrade Update\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Added Mending Upgrades 4, 8, and 10
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • I forgor
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 27],\r\n name: \"EMERGENCY HOTFIX 5\",\r\n info: \r\n `Type mismatch fixed\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Made Eternity Gain a Decimal instead of a Number
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 27],\r\n name: \"Upgrade Explosion\",\r\n info: \r\n `Finally an update that adds more than 1 Upgrade\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Implemented Mending Upgrades 12, 13, 14, 17 and 18
  • \r\n
  • Added a Mending Milestone for 4 Mends (effect temporary until MU19 is implemented)
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed some Glyphs not being deleted on Mend
  • \r\n
  • Improved Mending Upgrade readability
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 25],\r\n name: \"EMERGENCY HOTFIX 4\",\r\n info: \r\n `typos strike again\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed not being able to swap Glyphs in Pelle
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 25],\r\n name: \"the Reality Automation\",\r\n info: \r\n `Added some autobuyers to some Reality Mechanics.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Added Milestone for 8 Mends
  • \r\n
  • Implemented Mending Upgrade 7
  • \r\n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • none that I can remember
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 24],\r\n name: \"EMERGENCY HOTFIX 3\",\r\n info: \r\n `More Hexa fixes, and some Wellington fixes\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: 7 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • made the Mending button actually work after 10 Mend Milestone
  • \r\n
  • the Mending Upgrade tab no longer causes a duplicate key error
  • \r\n
  • the Pelle Dilation autobuyers no longer console spam
  • \r\n
  • Importing Glyph sets is no longer broken
  • \r\n
  • TS192 is now visible in Nameless again (needs further testing)
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • None...for now
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 24],\r\n name: \"the 'Hey, Royal finally did something'\",\r\n info: \r\n `More Hexa fixes, and new content by yours truly\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Reduced Mending Upgrade prices (say \"thanks Amity\"), and refunded the difference
  • \r\n
  • Implemented Mending Upgrade 15
  • \r\n
  • Endgame: 7 Mend Milestone and all available Mending Upgrades
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • V should no longer hardlock the game
  • \r\n
  • Importing Glyph sets is no longer broken
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought (by Wellington, not Hexa)
  • \r\n
  • ts192 is now visible in Nameless again
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • None, for a change
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 23],\r\n name: \"Final V patch\",\r\n info: \r\n `Hexa hopefully has patched V for good, undone previous changes to V.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • V no longer hardlocks in a loop\r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • Time Study 192 is entirely missing in The Nameless Ones' Reality (rather than unpurchaseable), causing console errors.
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
  • Dilation autobuyers cause console errors, however they function normally.
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 23],\r\n name: \"No new content #7\",\r\n info: \r\n `Hexa hopefully fixed some things he broke last update again, kind of.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • For the time being, requiem only requires V hard to be shown and 4-0 max glyphs equipped.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • V again unequips all glyphs, however you now have the appropriate numbers of glyph slots.\r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way, however ts192 is entirely missing.
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 23],\r\n name: \"No new content #6\",\r\n info: \r\n `Hexa hopefully fixed some things he broke last update. No new content this update, just bug fixes, and backend stuff.`\r\n },\r\n {\r\n date: [2023, 8, 22],\r\n name: \"HEXA HOTFIX UPDATE 2, ELECTRIC BOOGALOO\",\r\n info: \r\n `Hexa hopefully fixed some stuff. No new content this update, just bug fixes. (I think this was 5 hours after the last one)\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • 7 Mend Milestone does not work in V anymore (temporary until we find a fix)
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • 3 Mend Milestone actually states it gives Vacuum Acceleration (this was done by Royal, Hexa did the rest)
  • \r\n
  • Fixed some spelling mistakes.
  • \r\n
  • Hopefully fixed Glyph Presets allowing duplicate special glyphs before 7 Mend Milestone
  • \r\n
  • Added an icon for the Mending tab in the Aero theme
  • \r\n
  • Multipliers from Mending Milestone 1 are now present in the Multiplier Breakdown
  • \r\n
  • Fixed the Credits Modal in \"About the Game\"
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (We (Royal and Hexa) didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way, however TS192 is entirely missing.
  • \r\n
  • Glyph presets might still be broken (or more broken).
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 22],\r\n name: \"EMERGENCY HOTFIX 2 and minor additions\",\r\n info: \r\n `Hexa broke some things internally (we (me and Hexa) couldn't test them until now)\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • 3 Mend Milestone now also gives iU upgrade \"Vaccum Acceleration\"
  • \r\n
  • Mending Upgrade 5 now also gives Reality Machine generation and sets Remnants to max
  • \r\n
  • You can now hold shift to display Mending Upgrade names (no, I don't plan to be creative like the Reality and Imaginary ones)
  • \r\n
  • Endgame: 7 Mend Milestone, all non-stripped Mending Upgrades.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed \"Multiversal Remains and Mends becoming a number instead of a Decimal\" fix preventing mends.
  • \r\n
  • Fixed 10 V-Achievement Milestone text updating with the wrong Mending Upgrade
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
  • Multipliers fromthe 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 22],\r\n name: \"the 'no longer a one man job'\",\r\n info: \r\n `This patch would not be possible without Hexa, shoutouts to him. Note: this changelog entry was written by Royal after the fact, so everything changed may not all be reflected here\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • 2 Mend Milestone Dilation Autobuyers now properly work
  • \r\n
  • Endgame: 7 Mend Milestone, all non-stripped Mending Upgrades.
  • \r\n
\r\n Bugfixes (all by Hexa):\r\n
\r\n
    \r\n
  • Fixed Multiversal Remains and Mends becoming a number instead of a Decimal
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
  • Multipliers from the 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 20],\r\n name: \"EMERGENCY HOTFIX 1\",\r\n info: \r\n `out of like Infinite. I was an idiot and tried to do a lazy-man's fix, but it accidently made Mending Upgrade 3 obsolete.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: 7 Mend Milestone, all non-stripped Mending Upgrades.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed 3 Mend Milestone giving Instant ECs (forgot to edit a vue file). If this affects you currently, enjoy the free ECs this Mend
  • \r\n
  • Fixed the update notification using my immature username I made when I was 14 (even though it's still in the address bar)
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
  • Multipliers fromthe 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 20],\r\n name: \"Bugfixes, and finally more upgrades\",\r\n info: \r\n `Even more bugfixes that fix things I overlooked. Note: Since school is starting back up for me. this might be the last patch for a while.\r\n Due to this, the new upgrades weren't tested as much\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Added Black Hole and Rebuyable Reality Upgrade Autobuyers to 3 Mend Milestone
  • \r\n
  • Implemented Mending Upgrades 5 and 9
  • \r\n
  • Endgame: 7 Mend Milestone, all non-stripped Mending Upgrades.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed the Inverted BH appearing without Hard V being Unlocked
  • \r\n
  • Fixed being able to enter Pelle immediately after Mend
  • \r\n
  • Fixed some 1 Mend Milestone multipliers not working in Pelle
  • \r\n
  • Made all tabs unhidden on Mend
  • \r\n
  • Added \"break\" statements to some switch statements to avoid uninteneded behavior
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
  • Multipliers fromthe 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 19],\r\n name: \"New Content!? no just more bugfixes\",\r\n info: \r\n `Even more bugfixes that fix things I overlooked. Note: Since school is starting back up for me. this might be the last patch for a while.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Reality Upgrades that required 4 Glyphs now require at LEAST 4 Glyphs
  • \r\n
  • Added x1,000 Replicanti Speed to 1 Mend Milestone
  • \r\n
  • Added more Mending Upgrades, but they're not implemented (these might change)
  • \r\n
  • Changed Dark Matter Dimension Imaginary Upgrades to require the Previous Dark Matter Dimension
  • \r\n
  • Endgame: still 7 Mends, Mending Upgrades 2 and 3 (the non-stripped ones).
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Gave \"START\" perk after every mend to get around the hardcoded first Reality glyph reward
  • \r\n
  • Likewise, gave a power Glyph after Mending Upgrade 2 and every Mend after to simulate it
  • \r\n
  • Changed the Remnant gain formula so the x1.1 from 1 Mend Mlestone applies properly
  • \r\n
  • Made the Glyph Selection conformation default to ON on Mend
  • \r\n
  • Improved Mending Upgrade Readability in some themes
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • The Invert BH button still shows up when Hard V is locked
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
  • Multipliers fromthe 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \r\n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \r\n
`\r\n },\r\n {\r\n date: [2023, 8, 18],\r\n name: \"The second bugifx\",\r\n info: \r\n `More bugfixes that fix things I overlooked.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: still 7 Mends and both Mending Upgrades.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Made \"Auto Purge on Reality\" glyph setting get set to false on Mend, because it was preventing Reality Resets.
  • \r\n
  • Changed V's tab visibility post Mend, because they're usually unlocked before Nameless completion.
  • \r\n
  • Fixed Alchemy not being reset on Mend (I think Pelle usually clears this, but futureproofing for Warp Reality)
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • The Invert BH button still shows up when Hard V is locked
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
  • V's reality can hardlock the game, make a backup save before entering
  • \r\n
`\r\n \r\n },\r\n {\r\n date: [2023, 8, 17],\r\n name: \"The first bugifx\",\r\n info: \r\n `No new Content this update, just some bugfixes.\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • None
  • \r\n
  • Endgame: still 7 Mends and both Mending Upgrades.
  • \r\n
\r\n Bugfixes:\r\n
\r\n
    \r\n
  • Fixed Parity of Singularity's timer after the first Mend.
  • \r\n
  • Fixed the Mending button being too wide in Modern UI.
  • \r\n
  • Fixed readibility of unbought Mending Upgrades in some themes.
  • \r\n
  • Fixed readibility of unachieved Mending Milestones in some themes.
  • \r\n
  • Fixed save importing disabiling the ability to do speedruns.
  • \r\n
  • Fixed pre-Reality achievements reseting on Reality (post Mend).
  • \r\n
  • Fixed Mending tab being hidden post-Mend on some imported saves.
  • \r\n
  • probably some other stuff I forgot.
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • The Invert BH button still shows up when Hard V is locked
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
`\r\n \r\n },\r\n {\r\n date: [2023, 8, 16],\r\n name: \"The 'get a very primitive alpha out before college starts back up'\",\r\n info: \r\n `In the words of YouTube commenters, \"first\". Yes, you're looking at the first mod with a new prestige layer, and second with new content. \r\n Unfortunately since school is starting back up, further updates will be slow to roll out (unless it's a major game-breaking bug).\r\n
\r\n
\r\n New things:\r\n
\r\n
    \r\n
  • Added the Mending Prestige Layer.
  • \r\n
  • Added Mending Upgrades and Milestones.
  • \r\n
\r\n Notes:\r\n
\r\n
    \r\n
  • Speedrun is available from begining of the game (but no splits for Mending content).
  • \r\n
  • Nothing pre-Mend is changed, so you can grab a save from Buck's savebank: https://buck4437.github.io/save-bank/.
  • \r\n
  • Endgame: 7 Mends and both Mending Upgrades.
  • \r\n
\r\n Known Issues:\r\n
\r\n
    \r\n
  • Importing a save disables speedruns, be wary until I find a workaround.
  • \r\n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\r\n this doesn't seem to affect gameplay in any way.
  • \r\n
  • The Invert BH button still shows up when Hard V is locked
  • \r\n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \r\n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \r\n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \r\n
  • The Mending tab has no icon in the Aero theme
  • \r\n
`\r\n \r\n }\r\n];\r\n\r\n\r\nfor (let i = 0; i < changelog.length; i++) {\r\n changelog[i].id = i;\r\n}\r\n","export const confirmationTypes = [\r\n {\r\n name: \"Dimension Boost\",\r\n option: \"dimensionBoost\",\r\n isUnlocked: () => PlayerProgress.infinityUnlocked() || player.galaxies > 0 || player.dimensionBoosts > 0,\r\n }, {\r\n name: \"Antimatter Galaxy\",\r\n option: \"antimatterGalaxy\",\r\n isUnlocked: () => PlayerProgress.infinityUnlocked() || player.galaxies > 0,\r\n }, {\r\n name: \"Sacrifice\",\r\n option: \"sacrifice\",\r\n isUnlocked: () => Sacrifice.isVisible,\r\n }, {\r\n name: \"Big Crunch\",\r\n option: \"bigCrunch\",\r\n isUnlocked: () => player.break || PlayerProgress.eternityUnlocked(),\r\n }, {\r\n name: \"Challenges\",\r\n option: \"challenges\",\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n }, {\r\n name: \"Exit Challenges\",\r\n option: \"exitChallenge\",\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n }, {\r\n name: \"Replicanti Galaxy\",\r\n option: \"replicantiGalaxy\",\r\n isUnlocked: () => PlayerProgress.eternityUnlocked() || player.replicanti.unl,\r\n }, {\r\n name: \"Eternity\",\r\n option: \"eternity\",\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n }, {\r\n name: \"Dilation\",\r\n option: \"dilation\",\r\n isUnlocked: () => PlayerProgress.realityUnlocked() || !Currency.tachyonParticles.eq(0),\r\n }, {\r\n name: \"Reset Reality\",\r\n option: \"resetReality\",\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"Glyph Replace\",\r\n option: \"glyphReplace\",\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n }, {\r\n name: \"Glyph Sacrifice\",\r\n option: \"glyphSacrifice\",\r\n isUnlocked: () => GlyphSacrificeHandler.canSacrifice,\r\n }, {\r\n name: \"Glyph Purge\",\r\n option: \"autoClean\",\r\n isUnlocked: () => GlyphSacrificeHandler.canSacrifice,\r\n }, {\r\n name: \"Sacrifice All Glyphs\",\r\n option: \"sacrificeAll\",\r\n isUnlocked: () => GlyphSacrificeHandler.canSacrifice,\r\n }, {\r\n name: \"Glyph Selection\",\r\n option: \"glyphSelection\",\r\n isUnlocked: () => Autobuyer.reality.isUnlocked,\r\n }, {\r\n name: \"Glyph Undo\",\r\n option: \"glyphUndo\",\r\n isUnlocked: () => TeresaUnlocks.undo.canBeApplied,\r\n }, {\r\n name: \"Switch Automator Editor\",\r\n option: \"switchAutomatorMode\",\r\n isUnlocked: () => Player.automatorUnlocked,\r\n }, {\r\n name: \"Delete Glyph Preset\",\r\n option: \"deleteGlyphSetSave\",\r\n isUnlocked: () => EffarigUnlock.setSaves.isUnlocked,\r\n }, {\r\n name: \"Glyph Refine\",\r\n option: \"glyphRefine\",\r\n isUnlocked: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied,\r\n }, {\r\n name: \"Armageddon\",\r\n option: \"armageddon\",\r\n isUnlocked: () => Pelle.isDoomed,\r\n }, {\r\n name: \"Respec Shop Purchases\",\r\n option: \"respecIAP\",\r\n isUnlocked: () => true\r\n }, {\r\n name: \"Mending\",\r\n option: \"mending\",\r\n isUnlocked: () => PlayerProgress.mendingUnlocked()\r\n }\r\n];\r\n","export const credits = {\r\n // Must be placed in the order it is desired they appear in the credits\r\n roles: {\r\n 1: \"[Vanilla] Creator\",\r\n 2: \"[Vanilla] Technical Architect\",\r\n 3: \"[Vanilla] Lead Developer\",\r\n 4: \"[Vanilla] Android Developer\",\r\n 5: \"[Vanilla] Steam Developer\",\r\n 6: \"[Vanilla] Library Developer\",\r\n 7: \"[Vanilla] Developer\",\r\n 8: \"[Vanilla] Lead Design Consultant\",\r\n 9: \"[Vanilla] Design Consultant\",\r\n 10: \"[Vanilla] Modal Maker, Lady Taker, Pie Baker, Tutorial Creater\",\r\n 11: \"[Vanilla] Lurker Tester\",\r\n 12: \"[Vanilla] Web Tester\",\r\n 13: \"[Vanilla] Android Tester\",\r\n 14: \"Redemption Developer\",\r\n 15: \"[Redemption] Development Assistant\",\r\n 16: \"[Redemption] Balancing Assistant\",\r\n 17: \"[Redemption] Artist\",\r\n 18: \"[Redemption] Testers\"\r\n },\r\n\r\n // Each person must have a name and at least one role (the index of the desired role in roles). They can also have a\r\n // second name, which will appear in parentheses besides their first.\r\n people: [\r\n {\r\n name: \"Hevipelle\",\r\n name2: \"Ivar Kerajärvi\",\r\n roles: 1\r\n }, {\r\n name: \"Razenpok\",\r\n name2: \"Andrei Andreev\",\r\n roles: [2, 15]\r\n }, {\r\n name: \"garnet420\",\r\n roles: 3\r\n }, {\r\n name: \"Omsi\",\r\n roles: 3\r\n }, {\r\n name: \"SpectralFlame\",\r\n name2: \"Christopher Yip\",\r\n roles: [3, 15]\r\n }, {\r\n name: \"WaitingIdly\",\r\n roles: [3, 7, 9, 12, 13, 15]\r\n }, {\r\n name: \"kajfik\",\r\n name2: \"Jakub Kajfosz\",\r\n roles: 4\r\n }, {\r\n name: \"Makopaz\",\r\n name2: \"Zack Stein\",\r\n roles: 5\r\n }, {\r\n name: \"Patashu\",\r\n roles: [6, 7, 12]\r\n }, {\r\n name: \"Dan\",\r\n roles: [7, 12]\r\n }, {\r\n name: \"earth\",\r\n name2: \"Jace Royer\",\r\n roles: [7, 10, 12, 13, 15]\r\n }, {\r\n name: \"Hira\",\r\n roles: [7, 12, 13, 15]\r\n }, {\r\n name: \"IkerStream\",\r\n name2: \"Iker de Aguirre\",\r\n roles: [7, 12]\r\n }, {\r\n name: \"L4R5\",\r\n name2: \"Lars Wolf\",\r\n roles: [7, 12, 13]\r\n }, {\r\n name: \"Pichusuperlover\",\r\n roles: [7, 9, 12]\r\n }, {\r\n name: \"realrapidjazz\",\r\n roles: [7, 8]\r\n }, {\r\n name: \"Scarlet\",\r\n roles: [7, 12, 13]\r\n }, {\r\n name: \"slabdrill\",\r\n roles: 7\r\n }, {\r\n name: \"Acamaeda\",\r\n roles: [9, 12]\r\n }, {\r\n name: \"Dravitar\",\r\n name2: \"Alex Henderson\",\r\n roles: 11\r\n }, {\r\n name: \"Aesis\",\r\n roles: 12\r\n }, {\r\n name: \"AFYINEE\",\r\n name2: \"Gabriel HADDAG\",\r\n roles: 12\r\n }, {\r\n name: \"Alexitato\",\r\n roles: 12\r\n }, {\r\n name: \"Anno\",\r\n roles: 12\r\n }, {\r\n name: \"Archa\",\r\n name2: \"Myresa\",\r\n roles: [12, 13]\r\n }, {\r\n name: \"ArrowBounce\",\r\n name2: \"Timothy Su\",\r\n roles: 12\r\n }, {\r\n name: \"Birb\",\r\n name2: \"Kelsey Black\",\r\n roles: 12\r\n }, {\r\n name: \"Boo\",\r\n name2: \"Jean-Christophe Bourgault\",\r\n roles: 12\r\n }, {\r\n name: \"CaptainGalaxy\",\r\n name2: \"Ovidijus Točelis\",\r\n roles: 12\r\n }, {\r\n name: \"ChaoticHans\",\r\n roles: [12, 13]\r\n }, {\r\n name: \"cubic frog\",\r\n roles: 12\r\n }, {\r\n name: \"dankesehr\",\r\n roles: 12\r\n }, {\r\n name: \"Davixx\",\r\n name2: \"Davide Fedele\",\r\n roles: 12\r\n }, {\r\n name: \"Empireus\",\r\n roles: 12\r\n }, {\r\n name: \"GirixK\",\r\n name2: \"Nikola Jelinčić\",\r\n roles: [12, 13]\r\n }, {\r\n name: \"GoldenTritium\",\r\n roles: [12, 13]\r\n }, {\r\n name: \"Kael\",\r\n roles: 12\r\n }, {\r\n name: \"Lynn\",\r\n roles: 12\r\n }, {\r\n name: \"Merp\",\r\n roles: 12\r\n }, {\r\n name: \"philipebreaker\",\r\n name2: \"Philipe\",\r\n roles: 12\r\n }, {\r\n name: \"Phillip Marshall\",\r\n roles: 12\r\n }, {\r\n name: \"Phoenix\",\r\n roles: 12\r\n }, {\r\n name: \"Reda Kotob\",\r\n roles: 12\r\n }, {\r\n name: \"Saturnus\",\r\n roles: 12\r\n }, {\r\n name: \"SereKabii\",\r\n roles: 12\r\n }, {\r\n name: \"Sheer\",\r\n roles: 12\r\n }, {\r\n name: \"sirusi\",\r\n name2: \"Vinícius Oliveira Martins\",\r\n roles: 12\r\n }, {\r\n name: \"Spanosa\",\r\n name2: \"Jared K\",\r\n roles: 12\r\n }, {\r\n name: \"Sparticle999\",\r\n roles: 12\r\n }, {\r\n name: \"SpicyCrusader13\",\r\n roles: [12, 13]\r\n }, {\r\n name: \"Storm\",\r\n roles: 12\r\n }, {\r\n name: \"SzyszakS\",\r\n roles: 12\r\n }, {\r\n name: \"Tacitus\",\r\n roles: 12\r\n }, {\r\n name: \"Typh\",\r\n roles: 12\r\n }, {\r\n name: \"Vnge\",\r\n name2: \"Ben Parrish\",\r\n roles: [12, 13]\r\n }, {\r\n name: \"Xemadus\",\r\n name2: \"Jonathan Gibson\",\r\n roles: 12\r\n }, {\r\n name: \"Young Woo Joo\",\r\n roles: 12\r\n }, {\r\n name: \"Zipi\",\r\n roles: 12\r\n }, {\r\n name: \"about:blank\",\r\n roles: 13\r\n }, {\r\n name: \"ÆiOuF\",\r\n roles: 13\r\n }, {\r\n name: \"Akirious\",\r\n roles: 13\r\n }, {\r\n name: \"Anjinho01\",\r\n roles: 13\r\n }, {\r\n name: \"Anthios\",\r\n roles: 13\r\n }, {\r\n name: \"Aubrey Ark\",\r\n roles: 13\r\n }, {\r\n name: \"Auti\",\r\n name2: \"Lucia Tolle\",\r\n roles: 13\r\n }, {\r\n name: \"Buck\",\r\n roles: 13\r\n }, {\r\n name: \"Barrin84\",\r\n roles: 13\r\n }, {\r\n name: \"Calmcat\",\r\n roles: 13\r\n }, {\r\n name: \"ChizuX\",\r\n roles: 13\r\n }, {\r\n name: \"Circle\",\r\n roles: 13\r\n }, {\r\n name: \"Crinkly Weasel\",\r\n name2: \"Aaryan Sarawgi\",\r\n roles: 13\r\n }, {\r\n name: \"Daniella\",\r\n roles: 13\r\n }, {\r\n name: \"DarthDie\",\r\n name2: \"Briar Bowser\",\r\n roles: 13\r\n }, {\r\n name: \"ElPopote83\",\r\n roles: 13\r\n }, {\r\n name: \"Epsilon\",\r\n name2: \"Coolguystorm\",\r\n roles: 13\r\n }, {\r\n name: \"Firecracker\",\r\n roles: 13\r\n }, {\r\n name: \"Gaunter\",\r\n roles: 13\r\n }, {\r\n name: \"Gimmick\",\r\n roles: 13\r\n }, {\r\n name: \"HarrisL2\",\r\n roles: 13\r\n }, {\r\n name: \"Hellbach\",\r\n name2: \"Asher Günther\",\r\n roles: 13\r\n }, {\r\n name: \"hen-ben\",\r\n name2: \"Henry Ellenberg\",\r\n roles: 13\r\n }, {\r\n name: \"ImpossibleSalsa\",\r\n roles: 13\r\n }, {\r\n name: \"JayM#1872\",\r\n name2: \"Jay McGee\",\r\n roles: 13\r\n }, {\r\n name: \"Johanniklas\",\r\n name2: \"Jan-Niklas Petersen\",\r\n roles: 13\r\n }, {\r\n name: \"Joseph Micheli\",\r\n roles: 13\r\n }, {\r\n name: \"kaislash\",\r\n name2: \"Lily\",\r\n roles: 13\r\n }, {\r\n name: \"Kirku\",\r\n name2: \"Fabian Makowski\",\r\n roles: 13\r\n }, {\r\n name: \"Kirin\",\r\n name2: \"Arthur\",\r\n roles: 13\r\n }, {\r\n name: \"Klötzchen\",\r\n roles: 13\r\n }, {\r\n name: \"L5racer\",\r\n roles: 13\r\n }, {\r\n name: \"Marshmallow\",\r\n roles: 13\r\n }, {\r\n name: \"HyperionMike\",\r\n name2: \"Miikael Siitan\",\r\n roles: 13\r\n }, {\r\n name: \"Mirai\",\r\n roles: 13\r\n }, {\r\n name: \"Monoma\",\r\n name2: \"ARoman Ruiz\",\r\n roles: 13\r\n }, {\r\n name: \"Nani\",\r\n roles: 13\r\n }, {\r\n name: \"Neo\",\r\n name2: \"Joon\",\r\n roles: 13\r\n }, {\r\n name: \"netweak\",\r\n roles: 13\r\n }, {\r\n name: \"NiZeKiHo\",\r\n name2: \"DominusDane\",\r\n roles: 13\r\n }, {\r\n name: \"NotBrewst\",\r\n name2: \"Luc Leblanc\",\r\n roles: 13\r\n }, {\r\n name: \"opdollar\",\r\n name2: \"Zane Coole\",\r\n roles: 13\r\n }, {\r\n name: \"Pavlxiiv\",\r\n roles: 13\r\n }, {\r\n name: \"PotatoTIAB\",\r\n roles: 13\r\n }, {\r\n name: \"Razor\",\r\n roles: 13\r\n }, {\r\n name: \"Razvan Cercel\",\r\n roles: 13\r\n }, {\r\n name: \"ReacTivity\",\r\n roles: 13\r\n }, {\r\n name: \"Reaxt\",\r\n name2: \"Rea Koehler\",\r\n roles: 13\r\n }, {\r\n name: \"Ruins\",\r\n roles: 13\r\n }, {\r\n name: \"Rukimix\",\r\n roles: 13\r\n }, {\r\n name: \"shadowevil\",\r\n roles: 13\r\n }, {\r\n name: \"Skunky\",\r\n name2: \"Lukas\",\r\n roles: 13\r\n }, {\r\n name: \"Snaeky\",\r\n roles: 13\r\n }, {\r\n name: \"Socks\",\r\n name2: \"Hannah Pocks\",\r\n roles: 13\r\n }, {\r\n name: \"Sweets the Alien\",\r\n roles: 13\r\n }, {\r\n name: \"Tables\",\r\n roles: 13,\r\n }, {\r\n name: \"Taylor Reeves\",\r\n roles: 13\r\n }, {\r\n name: \"TheAhmex\",\r\n roles: 13\r\n }, {\r\n name: \"The Trust Melon\",\r\n roles: 13\r\n }, {\r\n name: \"Tim Wong\",\r\n roles: 13\r\n }, {\r\n name: \"tragedt\",\r\n name2: \"Ethan Manninen\",\r\n roles: 13\r\n }, {\r\n name: \"tui sapo\",\r\n roles: 13\r\n }, {\r\n name: \"Valentine Clarissa Alanis Star Z\",\r\n roles: 13\r\n }, {\r\n name: \"vanadium_void\",\r\n roles: 13\r\n }, {\r\n name: \"X3N0_32\",\r\n roles: 13\r\n }, {\r\n name: \"ZylaKat\",\r\n name2: \"Katherine Goforth-Harbin\",\r\n roles: 13\r\n },\r\n {\r\n name: \"Royalflush297\",\r\n roles: 14\r\n },\r\n {\r\n name: \"Miabread\",\r\n roles: 15\r\n },\r\n {\r\n name: \"incremental_gamer\",\r\n roles: [14, 15, 18]\r\n },\r\n {\r\n name: \"Merlyn\",\r\n roles: [15, 18]\r\n },\r\n {\r\n name: \"Plasmawario\",\r\n roles: 15\r\n },\r\n {\r\n name: \"Hexa\",\r\n roles: [14, 15, 16, 17]\r\n },\r\n {\r\n name: \"MrKrutaman\",\r\n roles: [15, 17]\r\n },\r\n {\r\n name: \"BsonHK\",\r\n roles: 16\r\n },\r\n {\r\n name: \"ArchercatNEO\",\r\n roles: 15\r\n },\r\n {\r\n name: \"yodi555\",\r\n roles: 15\r\n },\r\n {\r\n name: \"Amity\",\r\n roles: [14, 16]\r\n },\r\n {\r\n name: \"Wellington\",\r\n roles: 14\r\n },\r\n {\r\n name: \"sxy62146214\",\r\n roles: 14\r\n },\r\n {\r\n name: \"aswefljkd\",\r\n roles: 14\r\n },\r\n {\r\n name: \"beni\",\r\n roles: 18\r\n },\r\n {\r\n name: \"Legendis\",\r\n roles: 18\r\n },\r\n {\r\n name: \"Melfistic\",\r\n roles: 18\r\n },\r\n {\r\n name: \"donaldino\",\r\n roles: 18\r\n },\r\n {\r\n name: \"Rumbles\",\r\n roles: 18\r\n },\r\n {\r\n name: \"uiinpui\",\r\n roles: 18\r\n }\r\n ]\r\n};\r\n\r\ncredits.roles.count = Object.keys(credits.roles).length;\r\n","// We define these in the local scope to override the player's notation setting; this is something we'll probably\r\n// expand upon later once we look more closely at support for extended Unicode in DRP\r\nfunction format(number, places, placesUnder1000) {\r\n return Notation.scientific.format(number, places, placesUnder1000);\r\n}\r\n\r\nfunction formatInt(value) {\r\n if (Notations.current.isPainful) return format(value, 2);\r\n return formatWithCommas(typeof value === \"number\" ? value.toFixed(0) : value.toNumber().toFixed(0));\r\n}\r\n\r\nfunction formatMachines(realPart, imagPart) {\r\n const parts = [];\r\n if (Decimal.neq(realPart, 0)) parts.push(format(realPart, 2));\r\n if (Decimal.neq(imagPart, 0)) parts.push(`${format(imagPart, 2, 2)}i`);\r\n if (Decimal.eq(realPart, 0) && Decimal.eq(imagPart, 0)) return format(0);\r\n return parts.join(\" + \");\r\n}\r\n\r\n// This is used for Discord Rich Presence, the information which shows up on a person's profile badge in Discord if\r\n// they are playing a game on Steam which has integration that pushes the info to Discord\r\nexport const discordRichPresence = {\r\n /**\r\n * List of all challenges to display within DRP, checked from the first entry and iterating forward. It will only\r\n * show the first one it finds for space reasons, but this also has the desirable effect of hiding key challenges\r\n * the player may enter within cel3.\r\n *\r\n * This is arguably the most \"useful\" behavior as well due to the fact that often the highest level of challenge is\r\n * the long-term goal for why the player entered the challenge in the first place.\r\n * @template\r\n * {\r\n * @property {function: @return String} name Name of the challenge (may contain name spoilers)\r\n * @property {function: @return Boolean | Number} activityToken Whether or not this challenge is active; is a\r\n * boolean for dilation and realities, or a number for pre-dilation challenges\r\n * @property {Array: function: @return String} resource Function returning the relevant resource for this\r\n * particular challenge\r\n * }\r\n */\r\n challenges: [\r\n {\r\n name: () => `${Teresa.possessiveName} Reality`,\r\n activityToken: () => Teresa.isRunning,\r\n // Reward is based on antimatter, but EP is more meaningful pre-completion\r\n resource: () => (Teresa.runCompleted\r\n ? `${format(player.antimatter, 2, 1)} AM`\r\n : `${format(player.eternityPoints, 2)} EP`),\r\n },\r\n {\r\n name: () => `${Effarig.possessiveName} Reality - ${Effarig.currentStageName}`,\r\n activityToken: () => Effarig.isRunning,\r\n resource: () => {\r\n switch (Effarig.currentStage) {\r\n case EFFARIG_STAGES.INFINITY:\r\n return `${format(player.antimatter, 2, 1)} AM`;\r\n case EFFARIG_STAGES.ETERNITY:\r\n return `${format(player.infinityPoints, 2)} IP`;\r\n case EFFARIG_STAGES.REALITY:\r\n default:\r\n return `${format(player.eternityPoints, 2)} EP`;\r\n }\r\n },\r\n },\r\n {\r\n name: () => `${Enslaved.possessiveName} Reality`,\r\n activityToken: () => Enslaved.isRunning,\r\n resource: () => `${format(player.eternityPoints, 2)} EP`,\r\n },\r\n {\r\n name: () => `${V.possessiveName} Reality`,\r\n activityToken: () => V.isRunning,\r\n resource: () => null,\r\n // V displays achievements normally and its value is standardized outside of its era\r\n },\r\n {\r\n name: () => `${V.possessiveName} Superhard Reality`,\r\n activityToken: () => V.isSuperRunning,\r\n resource: () => null,\r\n // V displays achievements normally and its value is standardized outside of its era\r\n },\r\n {\r\n name: () => `${Ra.possessiveName} Reality`,\r\n activityToken: () => Ra.isRunning,\r\n resource: () => null,\r\n // Ra doesn't have a meaningful in-reality resource to display\r\n },\r\n {\r\n name: () => {\r\n const dims = Laitela.maxAllowedDimension;\r\n const dimStr = dims ? `D${dims} max` : \"Final\";\r\n return `${Laitela.possessiveName} Reality - ${dimStr}`;\r\n },\r\n activityToken: () => Laitela.isRunning,\r\n resource: () => `${formatPercents(player.celestials.laitela.entropy, 2, 2)} Entropy`,\r\n },\r\n {\r\n name: () => \"Dilation\",\r\n activityToken: () => player.dilation.active,\r\n resource: () => `${format(player.antimatter, 2, 1)} AM`,\r\n },\r\n {\r\n name: token => `EC ${token}`,\r\n // This results in \"EC 3x3\" (for example) when there are remaining completions, and just \"EC 3\" if not\r\n activityToken: () => {\r\n if (!player.challenge.eternity.current) return false;\r\n const num = player.challenge.eternity.current;\r\n const ec = EternityChallenge(num);\r\n return ec.remainingCompletions ? `${num}x${ec.completions + 1}` : num;\r\n },\r\n resource: () => `${format(player.infinityPoints, 2)} IP`,\r\n },\r\n {\r\n name: token => `IC ${token}`,\r\n activityToken: () => player.challenge.infinity.current,\r\n resource: () => `${format(player.antimatter, 2, 1)} AM`,\r\n },\r\n {\r\n name: token => `NC ${token}`,\r\n activityToken: () => player.challenge.normal.current,\r\n resource: () => `${format(player.antimatter, 2, 1)} AM`,\r\n },\r\n ],\r\n\r\n /**\r\n * List of all the different progress stages which will have distinct behavior in DRP\r\n * @template\r\n * {\r\n * @property {String} name Name of this stage of the game to display. This will\r\n * be used for the first line of text in DRP. This isn't necessarily unique, as the tracked resources may change\r\n * without the stage changing\r\n * @property {function: @return Boolean} hasReached Function to check if this stage of the game has been\r\n * reached. These checks are done starting at the end of the array and going backwards.\r\n * @property {function: @return String} mainResource Function returning the string describing the main\r\n * resource for a stage of the game\r\n * @property {Array: function: @return String} resourceList Array of strings containing relevant resources for\r\n * each particular part of the game. Largely just a list of key resources that are relevant at each section. The\r\n * logic *can* handle this being undefined, but it probably shouldn't be due to poor appearance\r\n * }\r\n */\r\n stages: [\r\n {\r\n name: \"Pre-Infinity\",\r\n hasReached: () => true,\r\n mainResource: () => `${format(player.antimatter, 2, 1)} AM`,\r\n resourceList: [\r\n () => quantify(\"Boost\", player.dimensionBoosts, 0, 0, formatInt),\r\n () => quantify(\"Galaxy\", player.galaxies, 0, 0, formatInt),\r\n ],\r\n },\r\n {\r\n name: \"Infinity\",\r\n hasReached: () => PlayerProgress.infinityUnlocked(),\r\n mainResource: () => `${format(player.infinityPoints, 2)} IP`,\r\n resourceList: [() => quantify(\"Infinity\", player.infinities, 0, 0, formatInt)],\r\n },\r\n {\r\n name: \"Broken Infinity\",\r\n hasReached: () => player.break,\r\n mainResource: () => `${format(player.infinityPoints, 2)} IP`,\r\n resourceList: [() => quantify(\"Infinity\", player.infinities, 2, 0, format)],\r\n },\r\n {\r\n name: \"Eternity\",\r\n hasReached: () => PlayerProgress.eternityUnlocked(),\r\n mainResource: () => `${format(player.eternityPoints, 2)} EP`,\r\n resourceList: [() => quantify(\"Eternity\", player.eternities, 0, 0, formatInt)],\r\n },\r\n {\r\n // Eternity Challenge era\r\n name: \"Eternity\",\r\n hasReached: () => player.eternityChalls.eterc1 > 0,\r\n mainResource: () => `${format(player.eternityPoints, 2)} EP`,\r\n resourceList: [\r\n () => quantify(\"EC completion\", Object.values(player.eternityChalls).reduce((sum, c) => sum + c, 0), 0, 0, formatInt)\r\n ]\r\n },\r\n {\r\n name: \"Time Dilation\",\r\n hasReached: () => PlayerProgress.dilationUnlocked(),\r\n mainResource: () => `${format(player.eternityPoints, 2)} EP`,\r\n resourceList: [() => `${format(player.dilation.dilatedTime, 2, 2)} DT`],\r\n },\r\n {\r\n name: \"Reality\",\r\n hasReached: () => player.realities > 0,\r\n mainResource: () => `${format(player.reality.realityMachines, 2)} RM`,\r\n resourceList: [\r\n () => quantify(\"Reality\", player.realities, 0, 0, formatInt),\r\n () => `Best Glyph Level: ${formatInt(player.records.bestReality.glyphLevel)}`\r\n ]\r\n },\r\n {\r\n name: () => Teresa.displayName,\r\n hasReached: () => Teresa.isUnlocked,\r\n mainResource: () => `${format(player.reality.realityMachines, 2)} RM`,\r\n resourceList: [\r\n () => quantify(\"Reality\", player.realities, 0, 0, formatInt),\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => `Poured: ${format(player.celestials.teresa.pouredAmount, 2)} RM`\r\n ]\r\n },\r\n {\r\n name: () => Effarig.displayName,\r\n hasReached: () => TeresaUnlocks.effarig.isUnlocked,\r\n mainResource: () => `${format(player.reality.realityMachines, 2)} RM`,\r\n resourceList: [\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => quantify(\"Relic Shard\", player.celestials.effarig.relicShards, 2, 0, format)\r\n ]\r\n },\r\n {\r\n name: () => Enslaved.displayName,\r\n hasReached: () => EffarigUnlock.eternity.isUnlocked,\r\n mainResource: () => `${format(player.reality.realityMachines, 2)} RM`,\r\n resourceList: [\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => `Charged: ${format(TimeSpan.fromMilliseconds(player.celestials.enslaved.stored).totalYears, 2)} years`\r\n ],\r\n },\r\n {\r\n name: () => V.displayName,\r\n hasReached: () => Achievement(151).isUnlocked,\r\n mainResource: () => `${format(player.reality.realityMachines, 2)} RM`,\r\n resourceList: [\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => quantify(\"V-Achievement\", player.celestials.v.runUnlocks.sum(), 0, 0, formatInt)],\r\n },\r\n {\r\n name: () => Ra.displayName,\r\n hasReached: () => VUnlocks.raUnlock.isUnlocked,\r\n mainResource: () => `${format(player.reality.realityMachines, 2)} RM`,\r\n resourceList: [\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => `Ra Levels: ${Ra.pets.all.map(p => formatInt(p.level)).join(\"/\")}`],\r\n },\r\n {\r\n // Imaginary Machines unlocked\r\n name: () => Ra.displayName,\r\n hasReached: () => MachineHandler.isIMUnlocked,\r\n mainResource: () => `${formatMachines(player.reality.realityMachines, player.reality.imaginaryMachines)} RM`,\r\n resourceList: [\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => `Ra Levels: ${Ra.pets.all.map(p => formatInt(p.level)).join(\"/\")}`\r\n ],\r\n },\r\n {\r\n name: () => Laitela.displayName,\r\n hasReached: () => Laitela.isUnlocked,\r\n mainResource: () => `${formatMachines(player.reality.realityMachines, player.reality.imaginaryMachines)} RM`,\r\n resourceList: [\r\n () => `Best GL: ${formatInt(player.records.bestReality.glyphLevel)}`,\r\n () => quantify(\"Singularity\", player.celestials.laitela.singularities, 2, 0, format)],\r\n },\r\n {\r\n // We can't use celestial displayName here like the others because that will cause the text scramble to get put on DRP\r\n name: \"Pelle\",\r\n hasReached: () => Pelle.isDoomed,\r\n mainResource: () => quantify(\"Reality Shard\", player.celestials.pelle.realityShards, 2),\r\n resourceList: [() => quantify(\"Remnant\", player.celestials.pelle.remnants, 2)],\r\n },\r\n {\r\n name: \"END\",\r\n hasReached: () => GameEnd.endState >= END_STATE_MARKERS.GAME_END,\r\n mainResource: () => \"END Antimatter\",\r\n resourceList: [() => \"Nothing remains.\"],\r\n },\r\n ]\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nfunction rebuyableCost(initialCost, increment, id) {\r\n return Decimal.multiply(initialCost, Decimal.pow(increment, player.dilation.rebuyables[id]));\r\n}\r\nfunction rebuyable(config) {\r\n return {\r\n id: config.id,\r\n cost: () => {\r\n if (player.dilation.rebuyables[config.id] > 5000) return rebuyableCost(config.initialCost, config.incrementSC, config.id);\r\n return rebuyableCost(config.initialCost, config.increment, config.id);\r\n },\r\n initialCost: config.initialCost,\r\n increment: config.increment,\r\n incrementSC: config.incrementSC,\r\n description: config.description,\r\n effect: () => config.effect(player.dilation.rebuyables[config.id]),\r\n formatEffect: config.formatEffect,\r\n formatCost: config.formatCost,\r\n purchaseCap: config.purchaseCap,\r\n pellePurchaseCap: config.pellePurchaseCap, //we now need a new pellePurchaseCap to uncap certain rebuyables depending on if you're in Pelle or not, thanks to Spec for the fix\r\n reachedCap: () =>{ \r\n if (Pelle.isDoomed) return player.dilation.rebuyables[config.id] >= config.pellePurchaseCap;\r\n return player.dilation.rebuyables[config.id] >= config.purchaseCap;\r\n },\r\n pelleOnly: Boolean(config.pelleOnly),\r\n rebuyable: true\r\n };\r\n}\r\n\r\nexport const dilationUpgrades = {\r\n dtGain: rebuyable({\r\n id: 1,\r\n initialCost: 1e4,\r\n increment: 10,\r\n incrementSC: 100,\r\n description: () =>\r\n ((SingularityMilestone.dilatedTimeFromSingularities.canBeApplied || Achievement(187).canBeApplied)\r\n ? `${formatX(2 * Effects.product(\r\n SingularityMilestone.dilatedTimeFromSingularities,\r\n Achievement(187)\r\n ), 2, 2)} Dilated Time gain`\r\n : \"Double Dilated Time gain\"),\r\n effect: bought => {\r\n const base = 2 * Effects.product(\r\n SingularityMilestone.dilatedTimeFromSingularities,\r\n Achievement(187)\r\n );\r\n return Decimal.pow(base, bought);\r\n },\r\n formatEffect: value => {\r\n const nonInteger = SingularityMilestone.dilatedTimeFromSingularities.canBeApplied ||\r\n Achievement(187).canBeApplied;\r\n return formatX(value, 2, nonInteger ? 2 : 0);\r\n },\r\n formatCost: value => format(value, 2),\r\n purchaseCap: Number.MAX_VALUE,\r\n pellePurchaseCap: Number.MAX_VALUE,\r\n }),\r\n galaxyThreshold: rebuyable({\r\n id: 2,\r\n initialCost: 1e6,\r\n increment: 100,\r\n incrementSC: 100, //it shouldn't matter for this one\r\n description: () =>\r\n (Perk.bypassTGReset.isBought && !Pelle.isDoomed\r\n ? \"Reset Tachyon Galaxies, but lower their threshold\"\r\n : \"Reset Dilated Time and Tachyon Galaxies, but lower their threshold\"),\r\n // The 38th purchase is at 1e80, and is the last purchase.\r\n effect: bought => (bought < 38 ? Math.pow(0.8, bought) : 0),\r\n formatEffect: effect => {\r\n if (effect === 0) return `${formatX(getTachyonGalaxyMult(effect), 4, 4)}`;\r\n const nextEffect = effect === Math.pow(0.8, 37) ? 0 : 0.8 * effect;\r\n return `${formatX(getTachyonGalaxyMult(effect), 4, 4)} ➜\r\n Next: ${formatX(getTachyonGalaxyMult(nextEffect), 4, 4)}`;\r\n },\r\n formatCost: value => format(value, 2),\r\n purchaseCap: 38,\r\n pellePurchaseCap: 38,\r\n }),\r\n tachyonGain: rebuyable({\r\n id: 3,\r\n initialCost: 1e7,\r\n increment: 20,\r\n incrementSC: 4000,\r\n description: () => {\r\n if (Pelle.isDoomed) return Ra.unlocks.unlockPelleTPMult.isUnlocked ? `Multiply the amount of Tachyon Particles gained by ${format(1.1, 1, 1)}` : `Multiply the amount of Tachyon Particles gained by ${formatInt(1)}`;\r\n if (Enslaved.isRunning) return `Multiply the amount of Tachyon Particles gained\r\n by ${Math.pow(3, Enslaved.tachyonNerf).toFixed(2)}`;\r\n return \"Triple the amount of Tachyon Particles gained\";\r\n },\r\n effect: bought => {\r\n if (Pelle.isDoomed) return Ra.unlocks.unlockPelleTPMult.isUnlocked ? Decimal.pow(1.1, bought) : DC.D1.pow(bought);\r\n return DC.D3.pow(bought);\r\n },\r\n formatEffect: value => formatX(value, 2, 2),\r\n formatCost: value => format(value, 2),\r\n purchaseCap: Number.MAX_VALUE, //cap at x1e2000\r\n pellePurchaseCap: Number.MAX_VALUE,\r\n }),\r\n doubleGalaxies: {\r\n id: 4,\r\n cost: 5e6,\r\n description: () => `Gain twice as many Tachyon Galaxies, up to ${formatInt(500)} base Galaxies`,\r\n effect: 2\r\n },\r\n tdMultReplicanti: {\r\n id: 5,\r\n cost: 1e9,\r\n description: () => {\r\n const rep10 = replicantiMult().pLog10();\r\n let multiplier = \"0.1\";\r\n if (rep10 > 9000) {\r\n const ratio = DilationUpgrade.tdMultReplicanti.effectValue.pLog10() / rep10;\r\n if (ratio < 0.095) {\r\n multiplier = ratio.toFixed(2);\r\n }\r\n }\r\n return `Time Dimensions are affected by Replicanti multiplier ${formatPow(multiplier, 1, 3)}, reduced\r\n effect above ${formatX(DC.E9000)}`;\r\n },\r\n effect: () => {\r\n let rep10 = replicantiMult().pLog10() * 0.1;\r\n rep10 = rep10 > 9000 ? 9000 + 0.5 * (rep10 - 9000) : rep10;\r\n return Decimal.pow10(rep10);\r\n },\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n ndMultDT: {\r\n id: 6,\r\n cost: 5e7,\r\n description: \"Antimatter Dimension multiplier based on Dilated Time, unaffected by Time Dilation\",\r\n effect: () => Currency.dilatedTime.value.pow(308).clampMin(1),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n ipMultDT: {\r\n id: 7,\r\n cost: 2e12,\r\n description: \"Gain a multiplier to Infinity Points based on Dilated Time\",\r\n effect: () => Currency.dilatedTime.value.pow(1000).clampMin(1),\r\n formatEffect: value => formatX(value, 2, 1),\r\n cap: () => Effarig.eternityCap\r\n },\r\n timeStudySplit: {\r\n id: 8,\r\n cost: 1e10,\r\n description: \"You can buy all three Time Study paths from the Dimension Split\"\r\n },\r\n dilationPenalty: {\r\n id: 9,\r\n cost: 1e11,\r\n description: () => `Reduce the Dilation penalty (${formatPow(1.05, 2, 2)} after reduction)`,\r\n effect: 1.05,\r\n },\r\n ttGenerator: {\r\n id: 10,\r\n cost: 1e15,\r\n description: \"Generate Time Theorems based on Tachyon Particles\",\r\n effect: () => Currency.tachyonParticles.value.div(20000),\r\n formatEffect: value => `${format(value, 2, 1)}/sec`\r\n },\r\n dtGainPelle: rebuyable({\r\n id: 11,\r\n initialCost: 1e14,\r\n increment: 100,\r\n incrementSC: 100, //these are hardcapped anyway\r\n pelleOnly: true,\r\n description: () =>{\r\n if(Pelle.isDoomed) return`${formatX(5)} Dilated Time gain`; \r\n return `${formatX(1.75, 2, 2)} Dilated Time gain`;\r\n },\r\n effect: bought => {\r\n if (Pelle.isDoomed) return Decimal.pow(5, bought);\r\n return Decimal.pow(1.75, bought);\r\n },\r\n formatEffect: value => formatX(value, 2, 2),\r\n formatCost: value => format(value, 2),\r\n purchaseCap: 206, //cap at e50\r\n pellePurchaseCap: Number.MAX_VALUE,\r\n }),\r\n galaxyMultiplier: rebuyable({\r\n id: 12,\r\n initialCost: 1e15,\r\n increment: 1000,\r\n incrementSC: 1000,\r\n pelleOnly: true,\r\n description: \"Multiply Tachyon Galaxies gained, applies after TG doubling upgrade\",\r\n effect: bought => {\r\n let x = Ra.unlocks.twinTachyonGalaxyCapIncrease.isUnlocked ? (Math.min((Decimal.log10((Currency.dilatedTime.value.clampMin(1)))) / 25000, 2)) : 0;\r\n if (Pelle.isDoomed) return (bought * (1 + x)) + 1;\r\n return (bought * (1 + x) * 0.1) + 1;\r\n },\r\n formatEffect: value => {\r\n let x = Ra.unlocks.twinTachyonGalaxyCapIncrease.isUnlocked ? Math.floor((Decimal.log10(Currency.dilatedTime.value)) / 25000) : 0;\r\n if (Pelle.isDoomed) return `${formatX((value * (1 + x)), 2)} ➜ ${formatX((value * (1 + x)) + 1, 2, 2)}`;\r\n else if (player.dilation.rebuyables[12] >= 10) return `${formatX(value, 2, 2)}`;\r\n return `${formatX((value * (1 + x)), 2, 1, 2)} ➜ ${formatX((value * (1 + x)) + 0.1, 2, 2)}`;\r\n },\r\n formatCost: value => format(value, 2),\r\n purchaseCap: 10,/*() =>{\r\n //let x = Ra.unlocks.twinTachyonGalaxyCapIncrease.isUnlocked ? Math.floor((Decimal.log10(Currency.dilatedTime.value)) / 100) : 0;\r\n return 10;// + x;\r\n },*/\r\n pellePurchaseCap: Number.MAX_VALUE,\r\n }),\r\n tickspeedPower: rebuyable({\r\n id: 13,\r\n initialCost: 1e16,\r\n increment: 1e4,\r\n incrementSC: 1e4,\r\n pelleOnly: true,\r\n description: \"Gain a power to Tickspeed\",\r\n effect: bought => {\r\n if (Pelle.isDoomed) return 1 + bought * 0.03;\r\n return 1 + bought * 0.02;\r\n },\r\n formatEffect: value =>{ \r\n if (Pelle.isDoomed) return `${formatPow(value, 2, 2)} ➜ ${formatPow(value + 0.03, 2, 2)}`;\r\n else if(player.dilation.rebuyables[13] >= 10) return `${formatPow(value, 2, 2)}`;\r\n return `${formatPow(value, 2, 2)} ➜ ${formatPow(value + 0.02, 2, 2)}`;\r\n },\r\n formatCost: value => format(value, 2),\r\n purchaseCap: 10,\r\n pellePurchaseCap: Number.MAX_VALUE,\r\n }),\r\n galaxyThresholdPelle: {\r\n id: 14,\r\n cost: 1e45,\r\n pelleOnly: true,\r\n get description () {\r\n return Pelle.isDoomed ? \"Apply a cube root to the Tachyon Galaxy threshold\" : \"Apply a 1.1th root to the Tachyon Galaxy threshold\";\r\n },\r\n effect: () => {\r\n if (Pelle.isDoomed) return 1/3;\r\n return 1/1.1;\r\n },\r\n },\r\n flatDilationMult: {\r\n id: 15,\r\n cost: 1e55,\r\n pelleOnly: true,\r\n description: () => `Gain more Dilated Time based on current EP`,\r\n effect: () => 1e9 ** Math.min((Math.max(player.eternityPoints.log10() - 1500, 0) / 2500) ** 1.2, 1),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n};\r\n","export const eternityMilestones = {\r\n autobuyerIPMult: {\r\n eternities: 1,\r\n reward: \"Unlock the Infinity Point multiplier autobuyer\",\r\n pelleUseless: true\r\n },\r\n keepAutobuyers: {\r\n eternities: 2,\r\n reward: \"You start Eternity with all Normal Challenges complete, all normal autobuyers, and infinity broken\"\r\n },\r\n autobuyerReplicantiGalaxy: {\r\n eternities: 3,\r\n reward: \"Unlock the Replicanti Galaxy Autobuyer\"\r\n },\r\n keepInfinityUpgrades: {\r\n eternities: 4,\r\n reward: \"You start Eternity with all Infinity Upgrades\",\r\n givenByPelle: () => PelleUpgrade.keepInfinityUpgrades.isBought,\r\n pelleUseless: true\r\n },\r\n bigCrunchModes: {\r\n eternities: 5,\r\n reward: \"Unlock more Big Crunch Autobuyer options\"\r\n },\r\n autoEP: {\r\n eternities: 6,\r\n reward: () => {\r\n const EPmin = getOfflineEPGain(TimeSpan.fromMinutes(1).totalMilliseconds);\r\n const em200 = getEternitiedMilestoneReward(TimeSpan.fromHours(1).totalMilliseconds,\r\n EternityMilestone.autoEternities.isReached).gt(0);\r\n const em1000 = getInfinitiedMilestoneReward(TimeSpan.fromHours(1).totalMilliseconds,\r\n EternityMilestone.autoInfinities.isReached).gt(0);\r\n if (!player.options.offlineProgress) return `This milestone would give offline EP generation, but offline progress\r\n is currently disabled`;\r\n const effectText = (em200 || em1000) ? \"Inactive\" : `Currently ${format(EPmin, 2, 2)} EP/min`;\r\n return `While offline, gain ${formatPercents(0.25)} of your best Eternity Points per minute from previous\r\n Eternities (${effectText})`;\r\n },\r\n activeCondition: () => (player.options.offlineProgress\r\n ? `Active as long as neither of the other offline milestones\r\n (${formatInt(200)} or ${formatInt(1000)}) are also active`\r\n : \"\"),\r\n },\r\n autoIC: {\r\n eternities: 7,\r\n reward: `You complete Infinity Challenges as soon as you unlock them,\r\n and keep the Dimensional Sacrifice Autobuyer`,\r\n pelleUseless: true\r\n },\r\n keepBreakUpgrades: {\r\n eternities: 8,\r\n reward: \"You start Eternity with all Break Infinity Upgrades\",\r\n givenByPelle: () => PelleUpgrade.keepBreakInfinityUpgrades.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyMaxGalaxies: {\r\n eternities: 9,\r\n reward: \"Unlock the buy max Antimatter Galaxies Autobuyer mode\"\r\n },\r\n unlockReplicanti: {\r\n eternities: 10,\r\n reward: \"You start with Replicanti unlocked\",\r\n givenByPelle: () => PelleUpgrade.replicantiStayUnlocked.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID1: {\r\n eternities: 11,\r\n reward: \"Unlock the 1st Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID2: {\r\n eternities: 12,\r\n reward: \"Unlock the 2nd Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID3: {\r\n eternities: 13,\r\n reward: \"Unlock the 3rd Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID4: {\r\n eternities: 14,\r\n reward: \"Unlock the 4th Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID5: {\r\n eternities: 15,\r\n reward: \"Unlock the 5th Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID6: {\r\n eternities: 16,\r\n reward: \"Unlock the 6th Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID7: {\r\n eternities: 17,\r\n reward: \"Unlock the 7th Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerID8: {\r\n eternities: 18,\r\n reward: \"Unlock the 8th Infinity Dimension Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.IDAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autoUnlockID: {\r\n eternities: 25,\r\n reward: \"You automatically unlock Infinity Dimensions upon reaching them\"\r\n },\r\n unlockAllND: {\r\n eternities: 30,\r\n reward: \"Start with all Antimatter Dimensions available for purchase\"\r\n },\r\n replicantiNoReset: {\r\n eternities: 40,\r\n reward: `Replicanti Galaxies no longer reset Antimatter, Antimatter Dimensions,\r\n Tickspeed, Dimensional Sacrifice, or Dimension Boosts`,\r\n pelleUseless: true\r\n },\r\n autobuyerReplicantiChance: {\r\n eternities: 50,\r\n reward: \"Unlock the Replicanti Chance Upgrade Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.replicantiAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerReplicantiInterval: {\r\n eternities: 60,\r\n reward: \"Unlock the Replicanti Interval Upgrade Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.replicantiAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerReplicantiMaxGalaxies: {\r\n eternities: 80,\r\n reward: \"Unlock the Max Replicanti Galaxy Upgrade Autobuyer\",\r\n givenByPelle: () => PelleUpgrade.replicantiAutobuyers.isBought,\r\n pelleUseless: true\r\n },\r\n autobuyerEternity: {\r\n eternities: 100,\r\n reward: \"Unlock autobuyer for Eternities\"\r\n },\r\n autoEternities: {\r\n eternities: 200,\r\n reward: () => {\r\n if (!player.options.offlineProgress) return `This milestone would generate eternities offline, but offline\r\n progress is currently disabled`;\r\n const eternities = getEternitiedMilestoneReward(TimeSpan.fromHours(1).totalMilliseconds,\r\n player.eternities.gte(200));\r\n // As far as I can tell, using templates here as Codefactor wants would lead to nested templates,\r\n // which seems messy to say the least.\r\n const realTime = PlayerProgress.seenAlteredSpeed() ? \" real-time\" : \"\";\r\n // eslint-disable-next-line prefer-template\r\n return `While offline, gain Eternities at ${formatPercents(0.5)} the rate of your fastest${realTime} Eternity ` +\r\n (eternities.gt(0) ? `(Currently ${format(eternities, 2, 2)}/hour)` : \"(Inactive)\");\r\n },\r\n activeCondition: () => (player.options.offlineProgress\r\n ? `Must be outside of all Challenges and Dilation, and the Eternity Autobuyer must be set to Eternity at zero EP.\r\n This milestone's effect is capped at ${formatInt(33)}ms.`\r\n : \"\"),\r\n pelleUseless: true\r\n },\r\n autoInfinities: {\r\n eternities: 1000,\r\n reward: () => {\r\n if (!player.options.offlineProgress) return `This milestone would generate infinities offline, but offline\r\n progress is currently disabled`;\r\n const infinities = getInfinitiedMilestoneReward(TimeSpan.fromHours(1).totalMilliseconds,\r\n player.eternities.gte(1000));\r\n // eslint-disable-next-line prefer-template\r\n return `While offline, gain Infinities equal to ${formatPercents(0.5)}\r\n your best Infinities/hour this Eternity ` +\r\n (infinities.gt(0) ? `(Currently ${format(infinities, 2, 2)}/hour)` : \"(Inactive)\");\r\n },\r\n activeCondition: () => (player.options.offlineProgress\r\n ? `Must be outside of Normal/Infinity Challenges and outside of EC4 and EC12,\r\n the Big Crunch Autobuyer must be turned on and set to time mode with less than ${formatInt(60)} seconds,\r\n and the Eternity Autobuyer must be turned off.`\r\n : \"\"),\r\n pelleUseless: true\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\n\r\nexport const eternityUpgrades = {\r\n idMultEP: {\r\n id: 1,\r\n cost: 5,\r\n description: () => `Infinity Dimensions multiplier based on unspent Eternity Points (x+${formatInt(1)})`,\r\n effect: () => Currency.eternityPoints.value.plus(1),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n idMultEternities: {\r\n id: 2,\r\n cost: 10,\r\n description: () => `Infinity Dimension multiplier based on Eternities\r\n ((x/${formatInt(200)})^log4(${formatInt(2)}x), softcap at ${format(1e5)} Eternities)`,\r\n effect() {\r\n const log4 = Math.log4;\r\n const eterPreCap = Currency.eternities.value.clampMax(1e5).toNumber();\r\n const base = eterPreCap / 200 + 1;\r\n const pow = Math.log(eterPreCap * 2 + 1) / log4;\r\n const multPreCap = Math.pow(base, pow);\r\n const eterPostCap = Currency.eternities.value.sub(1e5);\r\n const mult1 = eterPostCap.divide(200).plus(1);\r\n const mult2 = eterPostCap.times(2).plus(1).log(Math.E) / log4;\r\n const multPostCap = mult1.times(mult2).clampMin(1);\r\n return multPostCap.times(multPreCap);\r\n },\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n idMultICRecords: {\r\n id: 3,\r\n cost: 5e4,\r\n description: \"Infinity Dimensions multiplier based on sum of Infinity Challenge times\",\r\n // The cap limits this at a lower value, but we also need an explicit cap here because very old versions have\r\n // allowed EC12 to make all the challenge records sum to zero (causing a division by zero here)\r\n effect: () => DC.D2.pow(30 / Decimal.clampMin(Time.infinityChallengeSum.totalSeconds, 0.1).toNumber()),\r\n cap: DC.D2P30D0_61,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n tdMultAchs: {\r\n id: 4,\r\n cost: 1e16,\r\n description: \"Your Achievement bonus affects Time Dimensions\",\r\n effect: () => Achievements.power,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n tdMultTheorems: {\r\n id: 5,\r\n cost: 1e40,\r\n description: \"Time Dimensions are multiplied by your unspent Time Theorems\",\r\n effect: () => Decimal.max(Currency.timeTheorems.value, 1),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n tdMultRealTime: {\r\n id: 6,\r\n cost: 1e50,\r\n description: () => {\r\n if (Pelle.isDoomed){\r\n return \"Time Dimensions are multiplied by days played in this Armageddon\";\r\n }\r\n return PlayerProgress.mendingUnlocked() ? \"Time Dimensions are multiplied by days played in this Mend\" : \"Time Dimensions are multiplied by days played\";\r\n },\r\n effect: () => {\r\n if (Pelle.isDoomed){\r\n return Time.thisReality.totalDays.add(1);\r\n }\r\n return PlayerProgress.mendingUnlocked() ? Decimal.max(Time.thisMend.totalDays, 1) : Decimal.max(Time.totalTimePlayed.totalDays, 1);\r\n },\r\n formatEffect: value => formatX(value, 2, 1)\r\n }\r\n};\r\n","export const dilationTimeStudies = [\r\n {\r\n id: 1,\r\n description: \"Unlock Time Dilation\",\r\n cost: 5000,\r\n requirement: () => {\r\n const ttRequirement = Currency.timeTheorems.max.gte(TimeStudy.dilation.totalTimeTheoremRequirement);\r\n if (Ra.unlocks.autoUnlockDilation.canBeApplied &&\r\n ttRequirement &&\r\n !isInCelestialReality() && !Pelle.isDoomed\r\n ) {\r\n return true;\r\n }\r\n const tsRequirement = [231, 232, 233, 234].some(id => TimeStudy(id).isBought);\r\n if (Perk.bypassECDilation.canBeApplied) return tsRequirement;\r\n const ecRequirement = EternityChallenge(11).isFullyCompleted && EternityChallenge(12).isFullyCompleted;\r\n return tsRequirement && ecRequirement && ttRequirement;\r\n }\r\n },\r\n {\r\n id: 2,\r\n description: \"Unlock the 5th Time Dimension\",\r\n cost: 1e6,\r\n requirement: () => PlayerProgress.dilationUnlocked()\r\n },\r\n {\r\n id: 3,\r\n description: \"Unlock the 6th Time Dimension\",\r\n cost: 1e7,\r\n requirement: () => TimeStudy.timeDimension(5).isBought\r\n },\r\n {\r\n id: 4,\r\n description: \"Unlock the 7th Time Dimension\",\r\n cost: 1e8,\r\n requirement: () => TimeStudy.timeDimension(6).isBought\r\n },\r\n {\r\n id: 5,\r\n description: \"Unlock the 8th Time Dimension\",\r\n cost: 1e9,\r\n requirement: () => TimeStudy.timeDimension(7).isBought\r\n },\r\n {\r\n id: 6,\r\n description: () => (Pelle.isDoomed\r\n ? \"You cannot escape a Doomed Reality\"\r\n : \"Unlock Reality\"),\r\n cost: 1,\r\n requirement: () => TimeStudy.timeDimension(8).isBought &&\r\n player.records.thisReality.maxEP.exponent >= 4000 &&\r\n (Perk.firstPerk.isBought || Achievements.preReality.every(a => a.isUnlocked)) &&\r\n !Pelle.isDoomed\r\n }\r\n];\r\n","import { DC } from \"../../../constants\";\r\n\r\nexport const ecTimeStudies = [\r\n {\r\n id: 1,\r\n cost: 30,\r\n requirement: [171],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Eternities\",\r\n current: () => Currency.eternities.value,\r\n required: completions => new Decimal(20000 + Math.min(completions, Enslaved.isRunning ? 999 : 4) * 20000),\r\n formatValue: formatInt\r\n }\r\n },\r\n {\r\n id: 2,\r\n cost: 35,\r\n requirement: [171],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Tickspeed upgrades from Time Dimensions\",\r\n current: () => player.totalTickGained,\r\n required: completions => 1300 + Math.min(completions, 4) * 150,\r\n formatValue: formatInt\r\n }\r\n },\r\n {\r\n id: 3,\r\n cost: 40,\r\n requirement: [171],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"8th Antimatter Dimensions\",\r\n current: () => AntimatterDimension(8).totalAmount,\r\n required: completions => new Decimal(17300 + Math.min(completions, 4) * 1250),\r\n formatValue: value => formatInt(Math.floor(value.toNumber()))\r\n }\r\n },\r\n {\r\n id: 4,\r\n cost: 70,\r\n requirement: [143],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Infinities\",\r\n current: () => Currency.infinitiesTotal.value,\r\n required: completions => new Decimal(1e8 + Math.min(completions, 4) * 2.5e7),\r\n formatValue: value => formatInt(Math.floor(value.toNumber()))\r\n }\r\n },\r\n {\r\n id: 5,\r\n cost: 130,\r\n requirement: [42],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Antimatter Galaxies\",\r\n current: () => player.galaxies,\r\n required: completions => 160 + Math.min(completions, 4) * 14,\r\n formatValue: formatInt\r\n }\r\n },\r\n {\r\n id: 6,\r\n cost: 85,\r\n requirement: [121],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Replicanti Galaxies\",\r\n current: () => player.replicanti.galaxies,\r\n required: completions => 40 + Math.min(completions, 4) * 5,\r\n formatValue: formatInt\r\n }\r\n },\r\n {\r\n id: 7,\r\n cost: 115,\r\n requirement: [111],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"antimatter\",\r\n current: () => Currency.antimatter.value,\r\n required: completions => DC.E300000.pow(Math.min(completions, 4)).times(DC.E500000),\r\n formatValue: value => format(value)\r\n }\r\n },\r\n {\r\n id: 8,\r\n cost: 115,\r\n requirement: [123],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Infinity Points\",\r\n current: () => Currency.infinityPoints.value,\r\n required: completions => DC.E1000.pow(Math.min(completions, 4)).times(DC.E4000),\r\n formatValue: value => format(value)\r\n }\r\n },\r\n {\r\n id: 9,\r\n cost: 415,\r\n requirement: [151],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Infinity Power\",\r\n current: () => Currency.infinityPower.value,\r\n required: completions => DC.E2000.pow(Math.min(completions, 4)).times(DC.E17500),\r\n formatValue: value => format(value)\r\n }\r\n },\r\n {\r\n id: 10,\r\n cost: 550,\r\n requirement: [181],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n resource: \"Eternity Points\",\r\n current: () => Currency.eternityPoints.value,\r\n required: completions => DC.E20.pow(Math.min(completions, 4)).times(DC.E100),\r\n formatValue: value => format(value)\r\n }\r\n },\r\n {\r\n id: 11,\r\n cost: 1,\r\n requirement: [231, 232],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n path: \"Antimatter Dimension\",\r\n forbiddenStudies: [72, 73],\r\n }\r\n },\r\n {\r\n id: 12,\r\n cost: 1,\r\n requirement: [233, 234],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n secondary: {\r\n path: \"Time Dimension\",\r\n forbiddenStudies: [71, 72],\r\n }\r\n }\r\n];\r\n","import { DC } from \"../../../constants\";\r\nimport { CorruptionData } from \"../../../corruption\";\r\nimport { Currency } from \"../../../currency\";\r\n\r\nconst thisInfinityMult = thisInfinity => {\r\n // All \"this inf time\" or \"best inf time\" mults are * 10\r\n const scaledInfinity = thisInfinity.times(10).add(1);\r\n const cappedInfinity = Decimal.min(Decimal.pow(scaledInfinity, 0.125), 500);\r\n return DC.D15.pow(Decimal.log10(scaledInfinity) * cappedInfinity.toNumber());\r\n};\r\nconst passiveIPMult = () => {\r\n const isEffarigLimited = Effarig.isRunning && Effarig.currentStage === EFFARIG_STAGES.ETERNITY;\r\n const normalValue = Perk.studyPassive.isBought ? 1e50 : 1e25;\r\n return isEffarigLimited\r\n ? Math.min(normalValue, Effarig.eternityCap.toNumber())\r\n : normalValue;\r\n};\r\n\r\n\r\n/**\r\n * List of time study specifications and attributes\r\n * {\r\n * @property {Number} id Numerical ID shown for each time study in code and in-game\r\n * @property {Number} cost Amount of available time theorems required to purchase\r\n * @property {Number} STcost Amount of available space theorems required to purchase if needed\r\n * @property {Object[]} requirement Array of Numbers or functions which are checked to determine purchasability\r\n * @property {Number} reqType Number specified by enum in TS_REQUIREMENT_TYPE for requirement behavior\r\n * @property {Number[]} requiresST Array of Numbers indicating which other studies will cause this particular\r\n * study to also cost space theorems - in all cases this applies if ANY in the array are bought\r\n * @property {function: @return String} description Text to be shown in-game for the time study's effects\r\n * @property {function: @return Number} effect Numerical value for the effects of a study\r\n * @property {String[]} cap Hard-coded cap for studies which don't scale forever\r\n * @property {String} formatEffect Formatting function for effects, if the default formatting isn't appropriate\r\n * }\r\n */\r\nexport const normalTimeStudies = [\r\n {\r\n id: 11,\r\n cost: 1,\r\n // All requirements of an empty array will always evaluate to true, so this study is always purchasable\r\n requirement: [],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n description: \"Tickspeed affects 1st Time Dimension with reduced effect\",\r\n effect: () => {\r\n const tickspeed = Tickspeed.current.dividedBy(1000);\r\n const firstPart = tickspeed.pow(0.005).times(0.95);\r\n const secondPart = tickspeed.pow(0.0003).times(0.05);\r\n return firstPart.plus(secondPart).reciprocate();\r\n },\r\n cap: DC.E2500,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 21,\r\n cost: 3,\r\n requirement: [11],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `Improve Replicanti multiplier formula to\r\n (log2(x)${formatPow(2)})+x${formatPow(0.032, 3, 3)}`,\r\n effect: () => Replicanti.amount.pow(0.032),\r\n // This is a special case because the study itself is *added* to the existing formula, but it makes more sense\r\n // to display a multiplicative increase just like every other study. We need to do the calculation in here in order\r\n // to properly show only the effect of this study and nothing else\r\n formatEffect: value => {\r\n const oldVal = Decimal.pow(Decimal.log2(Replicanti.amount.clampMin(1)), 2);\r\n const newVal = oldVal.plus(value);\r\n return formatX(newVal.div(oldVal).clampMin(1), 2, 2);\r\n }\r\n },\r\n {\r\n id: 22,\r\n cost: 2,\r\n requirement: [11],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `Base Replicanti interval limit ${formatInt(50)}ms ➜ ${formatInt(1)}ms`,\r\n effect: 1\r\n },\r\n {\r\n id: 31,\r\n cost: 3,\r\n requirement: [21],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => {\r\n let x = Math.max(1 + (Currency.infinitiesTotal.value.pLog10() / 10000) * Math.pow(Ra.pets.teresa.level, 0.2) / 150, 1);\r\n return BreakInfinityUpgrade.infinitiedMult.chargedEffect.isEffectActive ? `Powers up multipliers that are based on your Infinities (Bonuses ^(${formatInt(4)}^${format(x, 3, 3)}))` : `Powers up multipliers that are based on your Infinities (Bonuses ${formatPow(4)})`\r\n },\r\n effect: () => Math.min(4 ** BreakInfinityUpgrade.infinitiedMult.chargedEffect.effectValue, 1e300)\r\n },\r\n {\r\n id: 32,\r\n cost: 2,\r\n requirement: [22],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: `You gain more Infinities based on Dimension Boosts`,\r\n effect: () => Math.max(DimBoost.totalBoosts, 1),\r\n formatEffect: value => formatX(value, 2)\r\n },\r\n {\r\n id: 33,\r\n cost: 2,\r\n requirement: [22],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"You keep half of your Replicanti Galaxies on Infinity\"\r\n },\r\n {\r\n id: 41,\r\n cost: 4,\r\n requirement: [31],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `All Galaxies give a ${formatX(DC.D1_2, 1, 1)} multiplier to Infinity Points gained`,\r\n effect: () => DC.D1_2.pow(Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 42,\r\n cost: 6,\r\n requirement: [32],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `Antimatter Galaxy requirement increases by ${formatInt(52)}\r\n 8th Dimensions instead of ${formatInt(60)}`,\r\n effect: 52\r\n },\r\n {\r\n id: 51,\r\n cost: 3,\r\n requirement: [41, 42],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `You gain ${formatX(1e15)} more Infinity Points`,\r\n effect: 1e15\r\n },\r\n {\r\n id: 61,\r\n cost: 3,\r\n requirement: [51],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `You gain ${formatX(15)} more Eternity Points`,\r\n effect: 15\r\n },\r\n {\r\n id: 62,\r\n cost: 3,\r\n requirement: [42, () => Perk.bypassEC5Lock.isBought || EternityChallenge(5).completions > 0],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n description: () => `You gain Replicanti ${formatInt(3)} times faster`,\r\n effect: 3\r\n },\r\n {\r\n id: 71,\r\n cost: 4,\r\n requirement: [61, () => Perk.studyECRequirement.isBought || !EternityChallenge(12).isUnlocked],\r\n reqType: TS_REQUIREMENT_TYPE.DIMENSION_PATH,\r\n description: \"Dimensional Sacrifice affects all other Antimatter Dimensions with reduced effect\",\r\n effect: () => Sacrifice.totalBoost.pow(0.25).clampMin(1),\r\n cap: DC.E210000,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 72,\r\n cost: 6,\r\n requirement: [61,\r\n () => Perk.studyECRequirement.isBought ||\r\n (!EternityChallenge(11).isUnlocked && !EternityChallenge(12).isUnlocked)],\r\n reqType: TS_REQUIREMENT_TYPE.DIMENSION_PATH,\r\n description: \"Dimensional Sacrifice affects 4th Infinity Dimension with greatly reduced effect\",\r\n effect: () => Sacrifice.totalBoost.pow(0.04).clampMin(1),\r\n cap: DC.E30000,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 73,\r\n cost: 5,\r\n requirement: [61, () => Perk.studyECRequirement.isBought || !EternityChallenge(11).isUnlocked],\r\n reqType: TS_REQUIREMENT_TYPE.DIMENSION_PATH,\r\n description: \"Dimensional Sacrifice affects 3rd Time Dimension with greatly reduced effect\",\r\n effect: () => Sacrifice.totalBoost.pow(0.005).clampMin(1),\r\n cap: DC.E1300,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 81,\r\n cost: 4,\r\n requirement: [71],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `Base Dimension Boost power becomes ${formatX(10)}`,\r\n effect: 10\r\n },\r\n {\r\n id: 82,\r\n cost: 6,\r\n requirement: [72],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Dimension Boosts affect Infinity Dimensions\",\r\n effect: () => DC.D1_0000109.pow(Math.pow(DimBoost.totalBoosts, 2)),\r\n cap: DC.E1E7,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 83,\r\n cost: 5,\r\n requirement: [73],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Dimension Boost multiplier based on tick upgrades gained from TDs\",\r\n effect: () => DC.D1_0004.pow(player.totalTickGained),\r\n cap: DC.E30,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 91,\r\n cost: 4,\r\n requirement: [81],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Antimatter Dimension multiplier based on time spent in this Eternity\",\r\n effect: () => Decimal.pow10(Decimal.min(Time.thisEternity.totalMinutes, 20).toNumber() * 15),\r\n cap: DC.E300,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 92,\r\n cost: 5,\r\n requirement: [82],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Infinity Dimension multiplier based on fastest Eternity time\",\r\n effect: () => DC.D2.pow(60 / Decimal.max(Time.bestEternity.totalSeconds, 2).toNumber()),\r\n cap: DC.C2P30,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 93,\r\n cost: 7,\r\n requirement: [83],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Time Dimension multiplier based on tick upgrades gained\",\r\n effect: () => Decimal.pow(player.totalTickGained, 0.25).clampMin(1),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 101,\r\n cost: 4,\r\n requirement: [91],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Antimatter Dimension multiplier equal to Replicanti amount\",\r\n effect: () => Decimal.max(Replicanti.amount, 1),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 102,\r\n cost: 6,\r\n requirement: [92],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Replicanti Galaxies boost Replicanti multiplier\",\r\n effect: () => DC.D5.pow(player.replicanti.galaxies),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 103,\r\n cost: 6,\r\n requirement: [93],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Time Dimension multiplier equal to Replicanti Galaxy amount\",\r\n effect: () => Math.max(player.replicanti.galaxies, 1),\r\n formatEffect: value => formatX(value, 2, 0)\r\n },\r\n {\r\n id: 111,\r\n cost: 12,\r\n requirement: [101, 102, 103],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => (Achievement(103).canBeApplied\r\n ? `Make the Infinity Point formula better log(x)/${formatFloat(307.8, 1)} ➜ log(x)/${formatInt(285)}`\r\n : `Make the Infinity Point formula better log(x)/${formatInt(308)} ➜ log(x)/${formatInt(285)}`),\r\n effect: 285\r\n },\r\n {\r\n id: 121,\r\n cost: 9,\r\n STCost: 2,\r\n requirement: [111],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [122, 123],\r\n description: () => (Perk.studyActiveEP.isBought\r\n ? `You gain ${formatX(50)} more Eternity Points`\r\n : `You gain more EP based on how fast your last ten Eternities\r\n were${PlayerProgress.realityUnlocked() ? \" (real time)\" : \"\"}`),\r\n effect: () => (Perk.studyActiveEP.isBought\r\n ? 50\r\n : Math.clamp(250 / Player.averageRealTimePerEternity, 1, 50)),\r\n formatEffect: value => (Perk.studyActiveEP.isBought ? undefined : formatX(value, 1, 1)),\r\n cap: 50\r\n },\r\n {\r\n id: 122,\r\n cost: 9,\r\n STCost: 2,\r\n requirement: [111],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [121, 123],\r\n description: () => (Perk.studyPassive.isBought\r\n ? `You gain ${formatX(50)} more Eternity Points`\r\n : `You gain ${formatX(35)} more Eternity Points`),\r\n effect: () => (Perk.studyPassive.isBought ? 50 : 35)\r\n },\r\n {\r\n id: 123,\r\n cost: 9,\r\n STCost: 2,\r\n requirement: [111],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [121, 122],\r\n description: \"You gain more Eternity Points based on time spent this Eternity\",\r\n effect: () => {\r\n const perkEffect = TimeSpan.fromMinutes(Perk.studyIdleEP.effectOrDefault(0));\r\n const totalSeconds = Time.thisEternity.plus(perkEffect).totalSeconds;\r\n return Decimal.sqrt(totalSeconds.times(1.39));\r\n },\r\n formatEffect: value => formatX(value, 1, 1)\r\n },\r\n {\r\n id: 131,\r\n cost: 5,\r\n STCost: 8,\r\n requirement: [121],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [132, 133],\r\n description: () => (Achievement(138).isUnlocked\r\n ? `You can get ${formatPercents(0.5)} more Replicanti Galaxies`\r\n : `Automatic Replicanti Galaxies are disabled, but you can get ${formatPercents(0.5)} more`),\r\n effect: () => Math.floor(player.replicanti.boughtGalaxyCap / 2)\r\n },\r\n {\r\n id: 132,\r\n cost: 5,\r\n STCost: 8,\r\n requirement: [122],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [131, 133],\r\n description: () => (Perk.studyPassive.isBought && !Pelle.isDoomed\r\n ? `Replicanti Galaxies are ${formatPercents(0.4)} stronger and Replicanti are ${format(3)} times faster`\r\n : `Replicanti Galaxies are ${formatPercents(0.4)} stronger`),\r\n effect: 0.4\r\n },\r\n {\r\n id: 133,\r\n cost: 5,\r\n STCost: 8,\r\n requirement: [123],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [131, 132],\r\n description: () => (Achievement(138).isUnlocked\r\n ? `Replicanti Galaxies are ${formatPercents(0.5)} stronger`\r\n : `Replicanti are ${formatX(10)} slower until ${format(Number.MAX_VALUE, 2)}` +\r\n `, but Replicanti Galaxies are ${formatPercents(0.5)} stronger`),\r\n effect: 0.5\r\n },\r\n {\r\n id: 141,\r\n cost: 4,\r\n STCost: 2,\r\n requirement: [131],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [142, 143],\r\n description: () => (Perk.studyActiveEP.isBought\r\n ? `You gain ${formatX(DC.E45)} more Infinity Points`\r\n : \"Multiplier to Infinity Points, which decays over this Infinity\"),\r\n effect: () => (Perk.studyActiveEP.isBought\r\n ? DC.E45\r\n : DC.E45.divide(thisInfinityMult(Time.thisInfinity.totalSeconds)).clampMin(1)),\r\n formatEffect: value => (Perk.studyActiveEP.isBought ? undefined : formatX(value, 2, 1))\r\n },\r\n {\r\n id: 142,\r\n cost: 4,\r\n STCost: 2,\r\n requirement: [132],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [141, 143],\r\n description: () => `You gain ${formatX(passiveIPMult())} more Infinity Points`,\r\n effect: passiveIPMult,\r\n cap: () => (Effarig.eternityCap === undefined ? undefined : Effarig.eternityCap.toNumber())\r\n },\r\n {\r\n id: 143,\r\n cost: 4,\r\n STCost: 2,\r\n requirement: [133],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [141, 142],\r\n description: \"Multiplier to Infinity Points, which increases over this Infinity\",\r\n effect: () => {\r\n const totalSeconds = Time.thisInfinity.totalSeconds.plus(Perk.studyIdleEP.effectOrDefault(0));\r\n return thisInfinityMult(totalSeconds);\r\n },\r\n formatEffect: value => formatX(value, 2, 1),\r\n cap: () => Effarig.eternityCap\r\n },\r\n {\r\n id: 151,\r\n cost: 8,\r\n requirement: [141, 142, 143],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `${formatX(1e4)} multiplier on all Time Dimensions`,\r\n effect: 1e4\r\n },\r\n {\r\n id: 161,\r\n cost: 7,\r\n requirement: [151],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `${formatX(DC.E616)} multiplier on all Antimatter Dimensions`,\r\n effect: () => DC.E616\r\n },\r\n {\r\n id: 162,\r\n cost: 7,\r\n requirement: [151],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `${formatX(1e11)} multiplier on all Infinity Dimensions`,\r\n effect: 1e11\r\n },\r\n {\r\n id: 171,\r\n cost: 15,\r\n requirement: [161, 162],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `Time Shard requirement for the next Tickspeed upgrade goes up slower\r\n ${formatX(1.33, 0, 2)} ➜ ${formatX(1.25, 0, 2)}`,\r\n effect: () => TS171_MULTIPLIER\r\n },\r\n {\r\n id: 181,\r\n cost: 200,\r\n requirement: [171,\r\n () => EternityChallenge(1).completions > 0 || Perk.bypassEC1Lock.isBought,\r\n () => EternityChallenge(2).completions > 0 || Perk.bypassEC2Lock.isBought,\r\n () => EternityChallenge(3).completions > 0 || Perk.bypassEC3Lock.isBought],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n description: () => `You gain ${formatPercents(0.01)} of your Infinity Points gained on crunch each second`,\r\n effect: () => gainedInfinityPoints().times(CorruptionData.isCorrupted ? 0.01 : Time.deltaTime.div(100))\r\n .timesEffectOf(Ra.unlocks.continuousTTBoost.effects.autoPrestige)\r\n },\r\n {\r\n id: 191,\r\n cost: 400,\r\n requirement: [181, () => EternityChallenge(10).completions > 0],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n description: () => `After Eternity you permanently keep ${formatPercents(0.05)}\r\n of your Infinities as Banked Infinities`,\r\n effect: () => Currency.infinities.value.times(0.05).floor()\r\n },\r\n {\r\n id: 192,\r\n cost: 730,\r\n requirement: [181, () => EternityChallenge(10).completions > 0, () => !Enslaved.isRunning],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n description: () => (Enslaved.isRunning\r\n ? \"There is not enough space in this Reality\"\r\n : `Replicanti can go beyond ${format(replicantiCap(), 2, 1)}, but growth slows down at higher amounts`)\r\n },\r\n {\r\n id: 193,\r\n cost: 300,\r\n requirement: [181, () => EternityChallenge(10).completions > 0],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n description: \"Antimatter Dimension multiplier based on Eternities\",\r\n effect: () => (DC.E13000.pow(Currency.eternities.value.div(1e6).clampMax(1))),\r\n cap: DC.E13000,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 201,\r\n cost: 900,\r\n requirement: [192],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Pick a second path from the Dimension Split\"\r\n },\r\n {\r\n id: 211,\r\n cost: 120,\r\n requirement: [191],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `Dimension Boost requirement scaling is reduced by ${formatInt(5)}`,\r\n effect: 5\r\n },\r\n {\r\n id: 212,\r\n cost: 150,\r\n requirement: [191],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"All Galaxies are stronger based on your Time Shards\",\r\n effect: () => Math.pow(Currency.timeShards.value.clampMin(2).log2(), 0.005),\r\n cap: 1.1,\r\n formatEffect: value => `+${formatPercents(value - 1, 3)}`\r\n },\r\n {\r\n id: 213,\r\n cost: 200,\r\n requirement: [193],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: () => `You gain Replicanti ${formatInt(20)} times faster`,\r\n effect: 20\r\n },\r\n {\r\n id: 214,\r\n cost: 120,\r\n requirement: [193],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n description: \"Dimensional Sacrifice boosts the 8th Antimatter Dimension even more\",\r\n effect: () => {\r\n const totalBoost = Sacrifice.totalBoost;\r\n const firstPart = totalBoost.pow(7.6).clampMaxExponent(44000);\r\n const secondPart = totalBoost.pow(1.05).clampMaxExponent(120000);\r\n return firstPart.times(secondPart);\r\n },\r\n cap: DC.E164000,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 221,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [211],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [222],\r\n description: \"Time Dimension multiplier based on Dimension Boosts\",\r\n effect: () => DC.D1_0025.pow(DimBoost.totalBoosts),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 222,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [211],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [221],\r\n description: () => `Dimension Boost costs scale by another ${formatInt(2)} less`,\r\n effect: 2\r\n },\r\n {\r\n id: 223,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [212],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [224],\r\n description: () => `Distant Galaxy cost scaling starts ${formatInt(7)} Galaxies later`,\r\n effect: 7\r\n },\r\n {\r\n id: 224,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [212],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [223],\r\n description() {\r\n const effect = TimeStudy(224).effectValue;\r\n return `Distant Galaxy cost scaling starts ${quantifyInt(\"Galaxy\", effect)} later\r\n (${formatInt(1)} per ${formatInt(2000)} Dim Boosts)`;\r\n },\r\n effect: () => Math.floor(DimBoost.totalBoosts / 2000)\r\n },\r\n {\r\n id: 225,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [213],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [226],\r\n description: \"You gain extra Replicanti Galaxies based on Replicanti amount\",\r\n effect: () => Math.floor(Replicanti.amount.exponent / 1000),\r\n formatEffect: value => `+${formatInt(value)} RG`\r\n },\r\n {\r\n id: 226,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [213],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [225],\r\n description: \"You gain extra Replicanti Galaxies based on their max\",\r\n effect: () => Math.floor(player.replicanti.boughtGalaxyCap / 15),\r\n cap: 1000000,\r\n formatEffect: value => `+${formatInt(value)} RG`\r\n },\r\n {\r\n id: 227,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [214],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [228],\r\n description: \"Dimensional Sacrifice affects 4th Time Dimension with reduced effect\",\r\n effect: () => Math.max(Math.pow(Sacrifice.totalBoost.pLog10(), 10), 1),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n id: 228,\r\n cost: 900,\r\n STCost: 4,\r\n requirement: [214],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [227],\r\n description: () => `Dimensional Sacrifice formula scales better\r\n ${Sacrifice.getSacrificeDescription({ \"TimeStudy228\": false })} ➜\r\n ${Sacrifice.getSacrificeDescription({ \"TimeStudy228\": true })}`,\r\n effect: 0.2\r\n },\r\n {\r\n id: 231,\r\n cost: 500,\r\n STCost: 5,\r\n requirement: [221, 222],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [232],\r\n description: \"Dimension Boosts are stronger based on their amount\",\r\n effect: () => Decimal.pow(DimBoost.totalBoosts, 0.3).clampMin(1),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n id: 232,\r\n cost: 500,\r\n STCost: 5,\r\n requirement: [223, 224],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [231],\r\n description: \"All Galaxies are stronger based on Antimatter Galaxies\",\r\n effect: () => Math.pow(1 + player.galaxies / 1000, 0.2),\r\n formatEffect: value => `+${formatPercents(value - 1, 3)}`\r\n },\r\n {\r\n id: 233,\r\n cost: 500,\r\n STCost: 5,\r\n requirement: [225, 226],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [234],\r\n description: \"Max Replicanti Galaxy upgrade is cheaper based on current Replicanti\",\r\n effect: () => (((Replicanti.amount).clampMin(1)).pow(0.3)),\r\n formatEffect: value => `/ ${format(value, 1, 2)}`\r\n },\r\n {\r\n id: 234,\r\n cost: 500,\r\n STCost: 5,\r\n requirement: [227, 228],\r\n reqType: TS_REQUIREMENT_TYPE.AT_LEAST_ONE,\r\n requiresST: [233],\r\n description: \"Dimensional Sacrifice applies to 1st Antimatter Dimension\",\r\n effect: () => Sacrifice.totalBoost,\r\n },\r\n // Note: These last 4 entries are the triad studies\r\n {\r\n id: 301,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 1, 221, 222, 231],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [221, 222, 231],\r\n description: \"Time Study 231 improves the effect of Time Study 221\",\r\n effect: () => TimeStudy(221).effectValue.pow(TimeStudy(231).effectValue.minus(1)).clampMin(1),\r\n formatEffect: value => formatX(value, 2, 1),\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 1\r\n },\r\n {\r\n id: 302,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 2, 223, 224, 232],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [223, 224, 232],\r\n description: () => `Distant Galaxy scaling threshold starts another ${formatInt(3000)} Antimatter Galaxies later`,\r\n effect: 3000,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 2\r\n },\r\n {\r\n id: 303,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 3, 225, 226, 233],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [225, 226, 233],\r\n description: () => `Gain ${formatPercents(0.5)} more extra Replicanti Galaxies from Time Studies 225 and 226,\r\n and from Effarig's Infinity`,\r\n effect: 1.5,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 3\r\n },\r\n {\r\n id: 304,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 4, 227, 228, 234],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [227, 228, 234],\r\n description: \"Dimensional Sacrifice multiplier is squared\",\r\n effect: 2,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 4\r\n },\r\n //sxy's new Triad studies\r\n {\r\n id: 305,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 5, 21],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [21],\r\n description: \"Infinity Point gain is boosted by unspent Multiversal Remains\",\r\n effect: () => {\r\n let x = Decimal.pow(Currency.mendingPoints.value,Decimal.log(Currency.mendingPoints.value,1.00000001)).pow(500000).clampMin(1);\r\n if(CorruptionData.isCorrupted) x=Decimal.pow(Decimal.log2(x.plus(1)),20);\r\n return x\r\n },\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 5,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 306,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 6, 41],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [41],\r\n description: \"Multiply Memory gain based on amount of Galaxies.\",\r\n effect: () => new Decimal(1.000002).pow(Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies),\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 6,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 311,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 7, 101],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [101],\r\n description: \"Antimatter Dimension multiplier based on total Space Theorems.\",\r\n effect: () => {\r\n let x = Decimal.pow(V.spaceTheorems,V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).max(1);\r\n if(CorruptionData.isCorrupted) x=Decimal.pow(Decimal.log2(x.plus(1)),20);\r\n return x;\r\n },\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 7,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 312,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 8, 102],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [102],\r\n description: \"Infinity Dimension multiplier based on total Space Theorems.\",\r\n effect: () => {\r\n let x = Decimal.pow(V.spaceTheorems,V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).max(1)\r\n if(CorruptionData.isCorrupted) x=Decimal.pow(Decimal.log2(x.plus(1)),20);\r\n return x;\r\n },\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 8,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 313,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 9, 103],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [103],\r\n description: \"Time Dimension multiplier based on total Space Theorems.\",\r\n effect: () => {\r\n let x = Decimal.pow(V.spaceTheorems,V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).max(1)\r\n if(CorruptionData.isCorrupted) x=Decimal.pow(Decimal.log2(x.plus(1)),20);\r\n return x;\r\n },\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 9,\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 307,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 10, 111],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [111],\r\n description: `Make the Eternity Point formula better log(x)/y ➜ log(x)/(y-30)`,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 10,\r\n effect: 30\r\n },\r\n {\r\n id: 321,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 11, 141],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [141],\r\n description: \"Multiplier to Multiversal Remains, which decays over this Mend (real time)\",\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 11,\r\n effect: () => (Decimal.log10(DC.E45.divide(thisInfinityMult(Time.thisMendRealTime.totalSeconds))).toDecimal().clampMin(1)),\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 322,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 12, 142],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [142],\r\n description: `You gain ×35 more Multiversal Remains`,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 12,\r\n effect: new Decimal(35)\r\n },\r\n {\r\n id: 323,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 13, 143],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [143],\r\n description: \"Multiplier to Multiversal Remains, which increases over this Mend (real time)\",\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 13,\r\n effect: () => {\r\n const totalSeconds = Time.thisMendRealTime.totalSeconds;\r\n return Decimal.log10(thisInfinityMult(totalSeconds).clampMin(1));\r\n },\r\n formatEffect: value => formatX(value, 2, 1)\r\n },\r\n {\r\n id: 308,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 14, 151],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [151],\r\n description: () => `${formatX(1e4)} multiplier on all Dark Matter Dimensions (Both DM and DE)`,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 14,\r\n effect: 1e4\r\n },\r\n {\r\n id: 309,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 15, 171],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [171],\r\n description: `Time Shard requirement for the next Tickspeed upgrade goes up even slower\r\n ×1.25 ➜ ×1.20`,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 15,\r\n effect: TS309_MULTIPLIER\r\n //↑Fun fact is that Glyph's Time Shard power effect once is related to the number itself\r\n //however it looks like the effect changed later so making this multiplier a general constant is not necessary now.\r\n },\r\n {\r\n id: 310,\r\n cost: 0,\r\n STCost: 12,\r\n requirement: [() => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 16, 192],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [192],\r\n description: `Replicanti increases the purchase hardcap of Infinity and Time Dimensions`,\r\n unlocked: () => Ra.unlocks.unlockHardV.effectOrDefault(0) >= 16,\r\n effect: 20\r\n },\r\n\r\n // Myriad Studies start here\r\n {\r\n id: 401,\r\n cost: 0,\r\n STCost: 302,\r\n requirement: [() => Ra.unlocks.unlockMyriads.effectOrDefault(0) >= 1, () => TimeStudy.reality.isBought],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: ['reality'],\r\n description: () => `Antimatter makes all Galaxies much stronger`,\r\n effect: () => {\r\n const x = Math.log10(Currency.antimatter.exponent+1)*0.5;\r\n return x;\r\n },\r\n unlocked: () => Ra.pets.v.level >= 90,\r\n formatEffect: value => `+${formatPercents(value, 4)}`\r\n },\r\n {\r\n id: 402,\r\n cost: 0,\r\n STCost: 302,\r\n requirement: [() => Ra.unlocks.unlockMyriads.effectOrDefault(0) >= 2, () => TimeStudy.reality.isBought],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: ['reality'],\r\n description: `Infinity Points adds Infinity power conversion`,\r\n effect: () => Math.log10(Math.log(Currency.infinityPoints.exponent+1)/Math.log(1.000000001))/1.75,\r\n formatEffect: value => `+${format(value,2,2)}`,\r\n unlocked: () => Ra.pets.v.level >= 92\r\n },\r\n {\r\n id: 403,\r\n cost: 0,\r\n STCost: 302,\r\n requirement: [() => Ra.unlocks.unlockMyriads.effectOrDefault(0) >= 3, () => TimeStudy.reality.isBought],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: ['reality'],\r\n description: `Eternity Points increase Time Shard softcap massively`,\r\n effect: () => Math.pow(Math.log10(Currency.eternityPoints.exponent+1),5.5),\r\n formatEffect: value => `+${formatInt(value)}`,\r\n unlocked: () => Ra.pets.v.level >= 94\r\n },\r\n {\r\n id: 411,\r\n cost: 0,\r\n STCost: 302,\r\n requirement: [() => Ra.unlocks.unlockMyriads.effectOrDefault(0) >= 4, 401],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [401],\r\n description: `Antimatter boosts 1st Antimatter Dimension Multiplier`,\r\n effect: () => {\r\n let baseExp = Math.log10(Math.max(Currency.antimatter.exponent,1));\r\n let Exponent = baseExp/4 + 15;\r\n let answer = Decimal.pow(10,Decimal.pow(10,Exponent));\r\n return answer\r\n },\r\n formatEffect: value => formatX(value, 0, 3),\r\n unlocked: () => Ra.pets.v.level >= 96\r\n },\r\n {\r\n id: 412,\r\n cost: 0,\r\n STCost: 302,\r\n requirement: [() => Ra.unlocks.unlockMyriads.effectOrDefault(0) >= 5, 402],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [402],\r\n description: `Infinity Points boosts 1st Infinity Dimension Multiplier`,\r\n effect: () => {\r\n let baseExp = Math.log10(Math.max(Currency.infinityPoints.exponent,1));\r\n let Exponent = baseExp/5 + 15.5;\r\n let answer = Decimal.pow(10,Decimal.pow(10,Exponent));\r\n return answer\r\n },\r\n formatEffect: value => formatX(value, 0, 3),\r\n unlocked: () => Ra.pets.v.level >= 98\r\n },\r\n {\r\n id: 413,\r\n cost: 0,\r\n STCost: 302,\r\n requirement: [() => Ra.unlocks.unlockMyriads.effectOrDefault(0) >= 6, 403],\r\n reqType: TS_REQUIREMENT_TYPE.ALL,\r\n requiresST: [403],\r\n description: `Eternity Points boosts 1st Time Dimension Multiplier`,\r\n effect: () => {\r\n let baseExp = Math.log10(Math.max(Currency.infinityPoints.exponent,1));\r\n let Exponent = baseExp/4 + 12.5;\r\n let answer = Decimal.pow(10,Decimal.pow(10,Exponent));\r\n return answer\r\n },\r\n formatEffect: value => formatX(value, 0, 3),\r\n unlocked: () => Ra.pets.v.level >= 100\r\n },\r\n];\r\n","import { dilationUpgrades } from \"./dilation-upgrades\";\r\nimport { eternityMilestones } from \"./eternity-milestones\";\r\nimport { eternityUpgrades } from \"./eternity-upgrades\";\r\n\r\nimport { dilationTimeStudies } from \"./time-studies/dilation-time-studies\";\r\nimport { ecTimeStudies } from \"./time-studies/ec-time-studies\";\r\nimport { normalTimeStudies } from \"./time-studies/normal-time-studies\";\r\n\r\nexport const eternity = {\r\n dilation: dilationUpgrades,\r\n milestones: eternityMilestones,\r\n timeStudies: {\r\n dilation: dilationTimeStudies,\r\n ec: ecTimeStudies,\r\n normal: normalTimeStudies\r\n },\r\n upgrades: eternityUpgrades\r\n};\r\n","import { DC } from \"../constants\";\r\n\r\nimport { credits } from \"@/core/secret-formula/credits\";\r\n\r\nexport const h2p = {\r\n /**\r\n * @template\r\n * {\r\n * @property {String} name Internal name for the tab entry\r\n * @property {String} alias Display name for the tab; if not present, will use the internal name\r\n * @property {Number} id Unique ID for each entry (generated in-game, not explicitly stated)\r\n * @property {function: @return String} info Text body of information for the entry\r\n * @property {function: @return Boolean} isUnlocked Condition for when the entry is visible and searchable\r\n * @property {Array: String} tags List of keywords which are linked to this tab in the search function\r\n * @property {String} tab Key of a tab+subtab combination which will default the h2p to this entry if opened\r\n * }\r\n */\r\n tabs: [\r\n {\r\n name: \"This Modal\",\r\n info: () => `\r\nWelcome to the How to Play!\r\n
\r\n
\r\nThis modal (pop-up window) contains in-depth explanations and additional details for everything you will encounter\r\nas you progress through the game. As you unlock new features and mechanics, you will also gain access to additional\r\npages here. If you ever feel lost or confused about how something in the game works, you may find a helpful\r\nexplanation within the related entry in here. \r\n
\r\n
\r\nFor now, opening the How to Play will always start you on this page. After you get your first Dimension Boost,\r\nopening this modal will instead place you on the How to Play entry most relevant to the game content on your currently\r\nvisible tab and subtab, if such an entry exists.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"h2p\", \"how\", \"to\", \"play\", \"modal\"],\r\n tab: \"\"\r\n },\r\n {\r\n name: \"Your savefile\",\r\n info: () => `\r\nYour game's save data is stored on your computer's browser data if you are playing on a web browser, or in your Steam\r\ninstallation folder if you are playing on Steam. This means that clearing your browser's cache or cookies, or fully\r\nuninstalling the game from Steam will also delete your save file.\r\nSimilarly, if you are playing in a private or incognito window, your save\r\nwill not be there the next time you open up your browser. The saves are browser-specific as well, so for example\r\nif you play the game on Chrome, you will not find your save on Firefox. Lastly, any saves you have on the web version\r\nand the Steam version will also be completely independent from each other.\r\n
\r\n
\r\nYou can transfer your save between places by using the export function, which will copy a very long string of\r\nrandom-looking characters into your clipboard. That text contains your save data, which you can load back into the\r\ngame by pasting it into the text box on the import prompt. You need the entirety of the save text for importing to\r\nwork properly, or else the game might not recognize the text as a valid save. Certain messaging applications may\r\ncut off part of the text if you are using one to transfer the save between devices.\r\n
\r\n
\r\nA properly-formatted save string from the Reality update will start with\r\n${GameSaveSerializer.startingString.savefile} and end with ${GameSaveSerializer.endingString.savefile}.\r\nIf you are importing from a version of the game from before Reality was released, it will instead start with eyJ\r\nand end with In19, fX0=, or fQ==. If neither of these are the case, then part of your save is\r\nmissing and it will fail to import. In addition to importing and exporting to your clipboard, you can also import\r\nand export from text files as well.\r\n
\r\nYou can use the \"Choose save\" button to pick between three separate saves on your browser. These saves are, for most\r\nintents and purposes, completely separate from each other. Importing and exporting will only affect the current save\r\nslot. The only exception is clearing your browser or Steam data, in which case all three saves will be reset.\r\n
\r\n
\r\nThe game automatically saves periodically, by default once every ${formatInt(30)} seconds.\r\nKeep this in mind if you need to close the game - anything you\r\ndo right before closing it might not be saved unless you wait for the autosave interval or manually save again. The\r\nlength of the autosave interval is adjustable, and its timer can be seen in the bottom-left of the screen.\r\n
\r\n
\r\nBackups of your savefile are also saved after certain amounts of time online or offline, which you can examine and\r\nreload at any point by clicking the \"Open Automatic Save Backup Menu\" button. These backups may be useful if you wish\r\nto revert your save to what it looked like some time in the past, such as a few minutes ago or when you were last\r\noffline for a while.\r\n
\r\n
\r\nYou can also connect a Google Account to the game, allowing you to save your progress online. This allows you to play\r\nwith the same save on any device which is also logged into the same account. Cloud saving is only compatable with other\r\nsaves on the web or Steam versions of the game; saves from the Android app of the game will not be automatically linked\r\nvia Cloud saving. Saving and loading from the Cloud will\r\nautomatically overwrite the other save unless the other save is either older or has noticeably more progression, in\r\nwhich case a modal will appear which asks you which save you want to keep.\r\n
\r\n
\r\nYou can completely reset your save at any point if desired by clicking the button, which brings up a prompt you need\r\nto fill out in order to make sure you intentionally wanted to reset. Going through with this reset will only clear\r\nyour current save; the other save slots will be unaffected. Resetting your game in this way is completely\r\nirreversible and gives you no permanent benefits, secret or otherwise.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"choose\", \"cloud\", \"google\", \"save\", \"import\", \"export\", \"reset\"],\r\n tab: \"options/saving\"\r\n },\r\n {\r\n name: \"Customization\",\r\n info: () => `\r\nThe game has two different UI layouts - the Classic UI maintains the style of Antimatter Dimensions from before the\r\nReality update, while the Modern UI is a redesign based on more modern dark theme styles. Additionally, there are\r\nvarious themes which can be applied to modify the appearance of everything in the game. There are a few secret themes\r\nwhich can be unlocked through importing certain phrases. Both UI layouts support all the different possible themes.\r\n
\r\n
\r\nThe notation used to display numbers in the game defaults to Mixed Scientific, but can be changed to one of numerous\r\noptions in the drop-down menu. Many of these notations are intended as jokes and in some cases will format numbers\r\nin a way that causes text to spill over into other parts of the screen - this is not a bug. \"Exponent formatting\" is\r\na setting affecting some notations which lets you toggle between showing the number in an exponent itself (with commas\r\nevery three digits) or also applying the notation formatting to the exponent. Note that notation formatting is forced\r\nwhen exponents are larger than ${format(DC.E9)}.\r\n
\r\n
\r\nMany events in the game trigger full-screen animations or pop-up modals which require you to confirm that you want to\r\ncontinue. Most of these animations and confirmations can be disabled on an individual basis through the options,\r\nalthough the ability to disable any given animation or confirmation will only appear after they have already shown up\r\nat least once.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"UI\", \"update\", \"news\", \"theme\", \"notation\", \"comma\", \"exponent\", \"animation\", \"retry\", \"confirmation\",\r\n \"offline\", \"hotkey\", \"classic\", \"modern\"],\r\n tab: \"options/visual\"\r\n },\r\n {\r\n name: \"Offline Progress\",\r\n info: () => `\r\nAntimatter Dimensions has a catch-up mechanic which attempts to simulate the game's behavior if the game is closed for\r\nan extended period of time. The simulation behavior is only somewhat accurate, as the game is too mathematically\r\ncomplicated to be run at full accuracy in a reasonable amount of time. At the end of the simulation, the game will\r\nsummarize how various relevant resources have changed while you were gone.\r\n
\r\n
\r\nIf the game is left open and becomes unfocused or otherwise suspended for an extended period of time, it will attempt\r\nto apply the missed time as offline progress when you return. This can be potentially unreliable, as different devices\r\nhandle these situations differently. If this results in undesirable behavior, there is a toggle to turn this off in the\r\noptions - in that case the game will try to apply all the missed time in a single tick.\r\n
\r\n
\r\nThe game runs on a system where everything is updated once per tick - all Dimensions and resources do one unit of\r\nproduction, all autobuyers trigger once, all multipliers and values are changed accordingly, and all the displayed\r\nnumbers are updated. By default there are ${formatInt(20)} ticks per second when the game is running, although this can\r\nbe modified by changing the \"Update rate\" within the game Options.\r\nYour current settings will run the game at ${format(1000 / player.options.updateRate, 2, 1)} ticks per second on\r\naverage, although lag and internal javascript behavior may cause individual ticks to vary by a few percent.\r\n
\r\n
\r\nWhen offline simulation is active, these ticks have an adjusted length in order to fill the amount of time you were\r\naway - for example having a setting for ${formatInt(1000)} offline ticks and closing the game for an hour will result in\r\nticks which are ${format(3.6, 1, 1)} seconds long each. For most things in the game, this is not an issue because this\r\nwill still result in approximately the same amount of resources after the simulation completes. A notable exception is\r\nautobuyers - in this situation autobuyers will effectively only trigger once every ${format(3.6, 1, 1)} seconds, which\r\nmay have a strong impact depending on the part of the game.\r\n
\r\n
\r\n${player.blackHole[0].unlocked\r\n ? `Offline Black Hole behavior: Once the Black Hole has been unlocked, the offline progress simulation will\r\n attempt to run the game in a way where each tick contains roughly the same amount of game time. This may\r\n give the appearance of the Black Hole(s) being active for a much larger fraction of time than normal while\r\n simulating, when in fact the game is running active periods more slowly and \"skipping past\" the inactive periods\r\n because they contribute much less production per real time. This results in behavior which is generally in your\r\n favor when compared to ticks with constant real time.\r\n
\r\n
`\r\n : \"\"\r\n}\r\nOffline tick count can be adjusted between ${formatInt(500)} and ${formatInt(DC.E6)} ticks. Smaller counts will result\r\nin faster but less accurate simulations, while larger counts will result in more accurate simulations which take longer\r\nto complete. There is a limit of one day of time per game tick, meaning there are some rare situations (such as not\r\nplaying the game for more than a year) where you may not get all of the time you were away.\r\n
\r\n
\r\nOffline progress can be disabled entirely if desired, for example for diagnostic or timing purposes, or in order\r\nto do an \"online only\" playthrough of the game. Otherwise, offline progress is on by default from the very beginning\r\nof the game. Note that if offline progress is disabled, the statistic for total time played will also be paused while\r\nthe game closed.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"offline\", \"away\", \"progress\"],\r\n tab: \"options/gameplay\"\r\n }, {\r\n name: \"Effect Stacking\",\r\n info: () => `\r\nMost of the effects and upgrades in Antimatter Dimensions largely fall into three categories:\r\n
\r\n- Additive: These effects are typically denoted with a + (or the word \"increase\") followed by a number,\r\nand add their value to some\r\nbase amount. Multiple additive effects are summed up. These can also sometimes show up as subtractive effects which\r\nreduce resource costs.\r\n
\r\n- Multiplicative: These effects are shown either by a × (or the word \"multiply\") followed by a number or,\r\nmore rarely, as two numbers\r\nseparated by a ➜. Different multiplicative sources always combine by multiplying, never by adding. In some situations,\r\nthere may be negative effects or cost reductions that apply in this category as division.\r\n
\r\n- Power: These effects are much rarer and appear as ^ followed by a number. Multiple power effects apply\r\nsequentially, or equivalently by multiplying the values of the power effects together and applying the final value\r\nas a single power. In rare situations, negative effects may apply here in this category as powers which are less\r\nthan ${formatInt(1)}.\r\n
\r\n
\r\nUnless otherwise noted when an upgrade or reward replaces an older value, all of these effects stack\r\nwith each other. In the case of an upgrade replacing an older value with a newer value, the replacement occurs before\r\nany of the above effects are applied. To determine the final value of a set of effects, the effects from each category\r\nare individually combined, and then applied in the order of additive, multiplicative, then power effects.\r\n
\r\n
\r\n${PlayerProgress.realityUnlocked() || PlayerProgress.dilationUnlocked()\r\n ? \"Dilation and any Dilation-like effects apply after all of these other effects are stacked together.\"\r\n : \"\"}\r\n
\r\n
\r\n${PlayerProgress.realityUnlocked()\r\n ? `Glyph Effects effectively have two stacking attributes; their internal way of stacking together and the way\r\n they stack with all other game effects. These may not necessarily be the same - for example, the \"Antimatter\r\n Dimension Power\" effect will stack additively with itself, but then the total effect will be added to\r\n a base value of ${formatInt(1)} and then applied as a power effect to Antimatter Dimensions.`\r\n : \"\"}\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"effect\", \"stack\", \"combine\", \"add\", \"reduce\", \"multiply\", \"divide\", \"power\", \"dilation\", \"glyph\"],\r\n tab: \"options/gameplay\"\r\n }, {\r\n name: \"Common Abbreviations\",\r\n info: () => `\r\nMany resources within the game may appear in an abbreviated format as text in order to save space. This How to\r\nPlay entry will update itself with additional entries for new resources as you encounter them for the first time.\r\n
\r\n- AM: Antimatter
\r\n- AD: Antimatter Dimension
\r\n- AG: Antimatter Galaxy
\r\n${PlayerProgress.infinityUnlocked() ? \"- IP: Infinity Point
\" : \"\"}\r\n${PlayerProgress.infinityUnlocked() ? \"- NC: Normal Challenge
\" : \"\"}\r\n${PlayerProgress.infinityUnlocked() ? \"- IC: Infinity Challenge
\" : \"\"}\r\n${InfinityDimension(1).isUnlocked || PlayerProgress.eternityUnlocked() ? \"- ID: Infinity Dimension
\" : \"\"}\r\n${PlayerProgress.replicantiUnlocked() ? \"- RG: Replicanti Galaxy
\" : \"\"}\r\n${PlayerProgress.eternityUnlocked() ? \"- EP: Eternity Point
\" : \"\"}\r\n${PlayerProgress.eternityUnlocked() ? \"- TT: Time Theorem
\" : \"\"}\r\n${PlayerProgress.eternityUnlocked() ? \"- TD: Time Dimension
\" : \"\"}\r\n${PlayerProgress.eternityUnlocked() ? \"- EC: Eternity Challenge
\" : \"\"}\r\n${PlayerProgress.dilationUnlocked() ? \"- TP: Tachyon Particle
\" : \"\"}\r\n${PlayerProgress.dilationUnlocked() ? \"- DT: Dilated Time
\" : \"\"}\r\n${PlayerProgress.dilationUnlocked() ? \"- TG: Tachyon Galaxy
\" : \"\"}\r\n${PlayerProgress.realityUnlocked() ? \"- RM: Reality Machine
\" : \"\"}\r\n${PlayerProgress.realityUnlocked() ? \"- AP: Automator Point
\" : \"\"}\r\n${PlayerProgress.realityUnlocked() ? \"- BH: Black Hole
\" : \"\"}\r\n${MachineHandler.isIMUnlocked ? \"- iM: Imaginary Machine
\" : \"\"}\r\n${Laitela.isUnlocked ? \"- DM: Dark Matter
\" : \"\"}\r\n${Laitela.isUnlocked ? \"- DE: Dark Energy
\" : \"\"}\r\n${PlayerProgress.mendingUnlocked() ? \"- MvR: Mulitversal Remain
\" : \"\"}\r\n${PlayerProgress.mendingUnlocked() ? \"- MUx: Mending Upgrade x
\" : \"\"}\r\n${PlayerProgress.mendingUnlocked() ? \"- xMM: x Mend Milestone
\" : \"\"}\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"abbreviation\", \"shorten\", \"am\", \"ad\", \"ag\", \"ip\", \"nc\", \"ic\", \"id\", \"rg\", \"ep\", \"tt\", \"td\", \"ec\", \"tp\",\r\n \"dt\", \"tg\", \"rm\", \"ap\", \"bh\", \"im\", \"dm\", \"de\"],\r\n tab: \"\"\r\n }, {\r\n name: \"Antimatter Dimensions\",\r\n info: () => `\r\nAntimatter is a resource that is used throughout the entire game for purchasing various things as you progress. You\r\nstart with ${formatInt(10)} antimatter when you first open the game, and you can\r\nspend it to buy the 1st Antimatter Dimension to start the game.\r\n
\r\n
\r\nAntimatter Dimensions are your production units in game. The 1st Antimatter Dimension produces your antimatter.\r\nEach consecutive Antimatter Dimension produces the previous one, allowing you to have steady growth.\r\nThere are eight Antimatter Dimensions total.\r\n
\r\n
\r\nDimension Multiplier: Beside the Dimension there is a multiplier (example: 1st Dimension ${formatX(1, 1, 1)}).\r\nThe base production of each Dimension is multiplied by this number.\r\nThis multiplier increases by ${formatX(2)} for every ${formatInt(10)} of that Dimension purchased.\r\nEach time this occurs, the price of the dimension will increase.\r\n
\r\n
\r\nAccumulated Dimension Quantity: The next column is your current amount of that Dimension you own.\r\nThis is a combination of how many you have purchased with antimatter,\r\nas well as produced from the higher Dimension.\r\n
\r\n
\r\nPurchased Dimensions Quantity: Next to each accumulated quantity of owned Dimensions,\r\nthe amount of that Dimension purchased toward the next multiplier upgrade is displayed in brackets.\r\nFor example if you have (${formatInt(4)}) next to your accumulated dimension quantity,\r\nyou will need ${formatInt(6)} more of that dimension for the next multiplier increase.\r\n
\r\n
\r\nDimension Growth Percent: This number represents the amount of growth that each\r\nDimension experiences per second. ${formatPercents(1)} means the dimension is doubling each second.\r\nThis allows you to judge overall growth.\r\n
\r\n
\r\nCost & until ${formatInt(10)}:\r\nYou can buy a single quantity of each Dimension with antimatter when the cost button is highlighted.\r\nAlternatively, if the Until ${formatInt(10)} button is highlighted,\r\nyou can buy whatever quantity gets you to that Dimension's next Dimension multiplier.\r\n
\r\n
\r\nMax all: Max all will buy until ${formatInt(10)} of the 1st Antimatter Dimension until it cannot anymore,\r\nthen second, and so on until the 8th Antimatter Dimension, and then buy max Tickspeed Upgrades.\r\n
\r\n
\r\nDimension base prices: ${Array.range(1, 8)\r\n .map(tier => format(AntimatterDimension(tier)._baseCost, 2, 2))\r\n .join(\", \")}\r\n
\r\nBase per ${formatInt(10)} bought dimension price increases: ${Array.range(1, 8)\r\n .map(tier => format(AntimatterDimension(tier)._baseCostMultiplier, 2, 2))\r\n .join(\", \")}\r\n
\r\n
\r\nHotkeys: 1, 2, 3, 4, 5, 6, 7, 8 for buy until ${formatInt(10)} Xth Dimension\r\n(you can also hold down Shift while buying Dimensions, which will only buy\r\n${formatInt(1)} instead of ${formatInt(10)}), M for Max all\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"dims\", \"normal\", \"antimatter\", \"ad\"],\r\n tab: \"dimensions/antimatter\"\r\n }, {\r\n name: \"Tickspeed\",\r\n info: () => `\r\nProduction in the game happens on each \"tick\", which initially occurs once per second. By buying Tickspeed Upgrades,\r\nyou can make your Antimatter Dimensions produce faster, as if multiple ticks occur in each second.\r\n
\r\n
\r\nTickspeed: This states how many game ticks are occurring every second. Fractional ticks are accounted for,\r\nboosting production as if part of a game tick has passed. Note that the actual tickspeed time is simulated and the\r\ngame always runs calculations at the update rate you've chosen in the Options tab.\r\n
\r\n
\r\nCost: The cost of antimatter for multiplying ticks/sec by the displayed multiplier.\r\n(without any Galaxies, this is ${formatX(1.1245, 0, 3)} per purchase)\r\n
\r\n
\r\nBuy Max: This will buy the maximum amount of Tickspeed Upgrades available\r\nwith your current amount of antimatter.\r\n
\r\n
\r\nHotkeys: T will purchase as many Tickspeed Upgrades as possible, or Shift+T to buy a single upgrade.\r\nM for Max all.\r\n`,\r\n isUnlocked: () => Tickspeed.isUnlocked,\r\n tags: [\"dimension\", \"earlygame\", \"time\"],\r\n tab: \"dimensions/antimatter\"\r\n }, {\r\n name: \"Dimension Boosts\",\r\n info: () => `\r\nDimension Boost: This resets your antimatter and all of your Antimatter Dimensions, but unlocks another\r\nAntimatter Dimension for you to purchase and boosts your Dimension multipliers.\r\nThe 1st Dimension Boost requires ${formatInt(20)} 4th Dimensions, the 2nd requires ${formatInt(20)} 5th Dimensions, etc.\r\nAfter unlocking all ${formatInt(8)} Dimensions,\r\nevery additional boost will cost ${formatInt(15)} more 8th Dimensions than the previous Boost and will no longer\r\nunlock a Dimension, but will continue to increase your Dimension multipliers.\r\n
\r\n
\r\nYou gain a ${formatX(2)} multiplier to the 1st Dimension for every Dimension Boost you have. Each higher\r\nDimension will have the multiplier applied one less time as the previous, down to a minimum of ${formatInt(0)}.\r\nFor example, with ${formatInt(3)} Boosts, the 1st Dimension will gain ${formatX(8)}, the 2nd Dimension ${formatX(4)},\r\nthe 3rd Dimension ${formatX(2)}, and all other Dimensions are unaffected.\r\n
\r\n
\r\nDimension Shift/Warp/Jump:` + ` Beyond ${format(DimBoost.shiftStart)} dimension boosts, they will be converted into Dimensions Shifts and costs will begin to scale.\r\n Continuing beyond ${format(DimBoost.warpStart)} will conver them to warp, which scale faster than shifts, and continuing beyond ${format(DimBoost.scaleStart)} will\r\n cause them to convert to jumps, which scale even faster than warps and shifts.\r\n
\r\n
\r\nHotkey: D will try to purchase a Dimension Boost.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"dimboost\", \"reset\", \"earlygame\"],\r\n tab: \"dimensions/antimatter\"\r\n }, {\r\n name: \"Antimatter Galaxies\",\r\n info: () => `\r\nPurchasing an Antimatter Galaxy will reset your game back to the point where only ${formatInt(4)} Dimensions are\r\navailable, but will increase the effect of your Tickspeed Upgrades by +${format(0.02, 0, 2)} for your first two\r\nGalaxies. As you get more Galaxies, the multiplier will continue becoming stronger and stronger.\r\n
\r\n
\r\nThough it will have very little impact for the first few Tickspeed purchases,\r\nthe increase is multiplicative and will not take long to be visible.\r\n
\r\n
\r\nYour first Antimatter Galaxy requires ${formatInt(80)} Eighth Dimensions, and each additional Galaxy will cost\r\nanother ${formatInt(60)} more.\r\n
\r\nDistant Galaxy scaling: Above ${formatInt(100)} Antimatter Galaxies the cost increase between Galaxies will\r\nincrease by ${formatInt(2)} per Galaxy, making the next Galaxy cost ${formatInt(62)} more, then ${formatInt(64)} more,\r\netc.\r\n
\r\nRemote Galaxy scaling:` + (!MendingUpgrade(17).isBought ? ` Above ${formatInt(Galaxy.remoteStart)} Antimatter Galaxies, the total cost\r\nincreases by another ${formatPercents(0.002, 1)} per Galaxy, on top of Distant scaling.` : `
Since you have Mending Upgrade 17, Remote Galaxy scaling no longer occurs.`)\r\n+ `
` +\r\n(MendingUpgrade(17).isBought ? `Obscure Galaxy Scaling: Above ${formatInt(Galaxy.scalingThreeStart)} Antimatter Galaxies the cost between them will increase by a ` + `${6-(+WarpUpgrade(4).isBought)-(+WarpUpgrade(11).isBought)}` + `th degree polynomial
` : ``)\r\n +`
\r\nHotkey: G will try to purchase an Antimatter Galaxy.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"8th\", \"reset\", \"galaxy\", \"earlygame\", \"distant\", \"remote\", \"obscure\"],\r\n tab: \"dimensions/antimatter\"\r\n }, {\r\n name: \"Dimensional Sacrifice\",\r\n info: () => `\r\nYou unlock Dimensional Sacrifice after your fifth Dimension Boost.\r\n
\r\n
\r\nSacrificing will immediately reset the owned quantity of all non-Eighth Dimensions to zero, without reducing the\r\nmultiplier or the current cost. In return, it will multiply the Eighth Dimension Multiplier by the shown value.\r\nIt will take time to get back to the production you previously had, but you will end up with a net increase.\r\n
\r\n
\r\nThe Dimensional Sacrifice multiplier scales with the number of 1st Dimensions you had at the time of sacrifice,\r\nand the scaling can be improved by completing certain Achievements and challenges. The multiplier is kept between\r\nsacrifices, meaning that sacrificing once at ${formatX(10)} and then once at ${formatX(4)} will be the same as\r\n${formatX(8)} then ${formatX(5)}; in both cases you will end up with a total sacrifice multiplier of ${formatX(40)}.\r\n
\r\n
\r\nHotkey: S will try to sacrifice.\r\n`,\r\n isUnlocked: () => Sacrifice.isVisible,\r\n tags: [\"8th\", \"reset\", \"earlygame\", \"gods\", \"earlygame\"],\r\n tab: \"dimensions/antimatter\"\r\n }, {\r\n name: \"Achievements\",\r\n info: () => `\r\nEach Achievement has requirements to unlock. Once unlocked, some Achievements give a reward.\r\nRequirements and rewards vary in difficulty and benefit significantly.\r\n
\r\n
\r\nIn addition to any specific rewards for individual Achievements, you will receive a ${formatX(1.03, 2, 2)} multiplier\r\nto all Antimatter Dimensions. Each fully completed row also gives another ${formatX(1.25, 2, 2)}. The total multiplier\r\neffect from all Achievements together is shown above all the Achievement images.\r\n
\r\n
\r\nSecret Achievements offer no gameplay benefits or advantages and are simply there for fun. Hovering over a Secret\r\nAchievement will give a hint on how to attain them.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"earlygame\", \"awards\", \"earlygame\"],\r\n tab: \"achievements\"\r\n }, {\r\n name: \"Infinity\",\r\n info: () => `\r\nOnce you have too much antimatter for the world to handle (${formatInt(2)}${formatInt(1024)}\r\nor about ${formatPostBreak(Number.MAX_VALUE, 6)},\r\nsometimes called \"Infinity\"), you will be forced to do a “Big Crunch”. This will reset your antimatter, Antimatter\r\nDimensions, Dimension Boosts, and your Antimatter Galaxies. Doing a Big Crunch is also sometimes referred to as\r\n\"Infinitying\".\r\n
\r\n
\r\nYou will eventually be able to pass ${formatPostBreak(Number.MAX_VALUE, 6)}, but until then any larger numbers will\r\ndisplay as ${format(Infinity)}.\r\n
\r\n
\r\nEach Infinity completed will give an Infinity Point, which can be spent on upgrades in the new Infinity tab.\r\nYou must purchase these upgrades from top to bottom. You will also gain one \"Infinity\", which is effectively\r\nthe number of times you have crunched.\r\n
\r\n
\r\nThe \"Multiply Infinity Points from all sources by ${formatInt(2)}\" upgrade can be bought multiple times,\r\nbut each purchase requires ${formatInt(10)} times as much IP.\r\nYou must complete the Achievement \"No DLC required\" to start purchasing this particular upgrade.\r\n
\r\n
\r\nHotkey: C will try to perform a Big Crunch.\r\n`,\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n tags: [\"crunch\", \"big\", \"upgrades\", \"ip\", \"reset\", \"prestige\", \"earlygame\"],\r\n tab: \"infinity/upgrades\"\r\n }, {\r\n name: \"Normal Challenges\",\r\n info: () => `\r\nNormal Challenges are unlocked after your first Infinity; they change in-game mechanics in different ways to create more\r\ndifficult Infinity circumstances. To complete a challenge, you must reach ${formatPostBreak(Number.MAX_VALUE, 2)}\r\nantimatter again.\r\n
\r\n
\r\nEach completed Normal Challenge will award an autobuyer or the ability to upgrade an existing autobuyer.\r\nYou can run them multiple times (though only the first time grants a reward),\r\nand they can be exited at any time via the “Exit Challenge” button.\r\n
\r\n
\r\nYour first Infinity is considered to be the first Normal Challenge, and is thus already completed when\r\nyou unlock challenges.\r\n
\r\n
\r\nThe rightmost column of Infinity Upgrades does not work in challenges.\r\n`,\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n tags: [\"infinity\", \"autobuyer\", \"earlygame\"],\r\n tab: \"challenges/normal\"\r\n }, {\r\n name: \"Autobuyers\",\r\n info: () => `\r\nAutobuyers allow you to automatically purchase dimensions, upgrades, or prestiges. All autobuyer\r\ncontrols are located under the \"Autobuyers\" subtab of the \"Automation\" tab, including any additional autobuyers\r\nunlocked later in the game.\r\n
\r\n
\r\nAntimatter Dimension Autobuyers and the Tickspeed Upgrade Autobuyer can be unlocked based on your total antimatter,\r\nbut most other autobuyers require upgrades to be purchased or challenges to be beaten.\r\n
\r\n
\r\nMost Autobuyers have similar attributes:\r\n
\r\n
\r\nAutobuyer Interval: The cooldown period before the autobuyer attempts to make another purchase.\r\nAntimatter Dimension Autobuyers and the Tickspeed Upgrade Autobuyer require their respective challenges to be beaten\r\nbefore their interval can be upgraded.\r\n
\r\n
\r\nAntimatter Dimension Autobuyer Bulk Buy: Once the interval of an autobuyer reaches its minimum\r\n(at ${formatInt(100)} ms), all future upgrades will double the maximum amount the autobuyer can purchase per tick.\r\nThis can be disabled.\r\n
\r\n
\r\nAntimatter Dimension Autobuyer Buy Quantity: Autobuyers for Dimensions can be set to buy a single Dimension,\r\nor until ${formatInt(10)}. Bulk buy is disabled when the autobuyer is set to singles.\r\n
\r\n
\r\nTickspeed Autobuyer Buy Quantity: The tickspeed autobuyer can be set to buy a single upgrade per activation\r\nor to buy the max possible once the Tickspeed Challenge (C9) has been beaten.\r\n
\r\n
\r\nAutomatic Dimension Boost Customization: With the Dimension Boost autobuyer you can set the max number of\r\nBoosts it will attempt to buy, a minimum number of Antimatter Galaxies before Dimension Boosts are\r\nalways auto-purchased, and (when unlocked) the ability to buy an exact number of Dimension Boosts in bulk.\r\nIf you reach your specified Galaxy threshold, the autobuyer will ignore your max Boost limit.\r\n
\r\n
\r\nMax Galaxies: The highest amount of Galaxies the Galaxies autobuyer will buy.\r\n
\r\n
\r\nIP on crunch: Once you Break Infinity, you can set how many IP you would like to wait for before crunching.\r\n
\r\n
\r\nSacrifice Autobuyer: This autobuyer starts with a maxed interval, potentially triggering every tick.\r\n
\r\n
\r\nDynamic Amount: Upgraded prestige autobuyers have a mode that triggers a prestige when a specified threshold\r\nis passed. Turning on \"Dynamic Amount\" will allow this threshold value to be automatically increased when unlocking\r\ncertain upgrades or achievements which apply a multiplier to this value.\r\n
\r\n
\r\nPause/Resume Autobuyers: This button will pause or resume autobuyers which are turned on.\r\nIt does not change individual autobuyer settings. Think of it like a master switch.\r\n
\r\n
\r\nEnable/Disable All Autobuyers: This button will turn all of your autobuyers on or off individually.\r\n
\r\n
\r\nHotkey: A (for pausing/resuming autobuyers).\r\nAdditionally, holding Alt when pressing a hotkey associated with an upgrade, dimension, or prestige will\r\ntoggle the associated autobuyer.\r\n`,\r\n isUnlocked: () => true,\r\n tags: [\"infinity\", \"automation\", \"challenges\", \"rewards\", \"interval\", \"earlygame\"],\r\n tab: \"automation/autobuyers\"\r\n }, {\r\n name: \"Break Infinity\",\r\n info: () => `\r\nOnce you Break Infinity, you are no longer limited to ${formatPostBreak(Number.MAX_VALUE, 2)} antimatter and can start\r\ngaining more than ${formatInt(1)} IP per crunch depending on how much more antimatter you have when you crunch.\r\n
\r\n
\r\nYou now gain ~${format(1.78, 2, 2)} IP for crunching at ${formatPostBreak(Number.MAX_VALUE, 2)} antimatter. The IP you\r\ngain for crunching is multiplied by ${formatInt(10)} for every additional factor of\r\n${formatPostBreak(Number.MAX_VALUE, 2)} antimatter you gain (in a continuous manner). This is rounded down to the\r\nnearest integer after all multipliers are applied.\r\n
\r\n
\r\nThe antimatter costs of all Dimensions begin to increase faster after they pass\r\n${formatPostBreak(Number.MAX_VALUE, 2)}. The cost between upgrades will increase by ${formatX(10)}\r\nper upgrade above ${formatPostBreak(Number.MAX_VALUE, 2)}, and a similar scaling happens to\r\nTickspeed Upgrade costs as well.\r\n`,\r\n isUnlocked: () => Autobuyer.bigCrunch.hasMaxedInterval || PlayerProgress.eternityUnlocked(),\r\n tags: [\"limit\", \"crunch\", \"upgrades\", \"midgame\"],\r\n tab: \"infinity/break\"\r\n }, {\r\n name: \"Infinity Dimensions\",\r\n info: () => `\r\nUnlocking Infinity Dimensions: Infinity Dimensions are unlocked by reaching a certain amount of antimatter.\r\n
\r\n
\r\nInfinity Dimension Purchasing: Infinity Dimensions are only purchasable in sets of ${formatInt(10)}, and cost\r\nInfinity Points. They give a permanent multiplier per purchase, similar to the other dimensions. The actual multiplier\r\napplied depends on which Infinity Dimension you purchase. \r\n
\r\n
\r\nInfinity Dimension Production: Just like Antimatter Dimensions, each Infinity Dimension produces the\r\nnext highest Infinity Dimension.\r\n
\r\n
\r\nEvery crunch, your produced Infinity Dimensions are reset to the amount you purchased. While the production\r\nof Infinity Dimensions does not carry between crunches, all the multipliers you got from purchasing them do.\r\n
\r\n
\r\nInfinity Dimension unlock thresholds (antimatter): ${Array.range(1, 8)\r\n .map(tier => formatPostBreak(InfinityDimension(tier)._unlockRequirement))\r\n .join(\", \")}\r\n
\r\nInfinity Dimension purchase multipliers: ${Array.range(1, 8)\r\n .map(tier => format(InfinityDimension(tier)._powerMultiplier))\r\n .join(\", \")}\r\n
\r\nInfinity Dimension base prices (IP): ${Array.range(1, 8)\r\n .map(tier => format(InfinityDimension(tier)._baseCost))\r\n .join(\", \")}\r\n
\r\nInfinity Dimension price increases: ${Array.range(1, 8)\r\n .map(tier => format(InfinityDimension(tier)._costMultiplier))\r\n .join(\", \")}\r\n
\r\n
\r\nInstead of antimatter, the 1st Infinity Dimension produces Infinity Power, which gives a multiplier applied\r\nto all Antimatter Dimensions equal to (power${formatInt(7)}). Infinity Dimensions are not\r\naffected by Tickspeed Upgrades.\r\n`,\r\n isUnlocked: () => Autobuyer.bigCrunch.hasMaxedInterval || PlayerProgress.eternityUnlocked(),\r\n tags: [\"id\", \"power\", \"new\", \"dims\", \"unlock\", \"break\", \"midgame\"],\r\n tab: \"dimensions/infinity\"\r\n }, {\r\n name: \"Infinity Challenges\",\r\n // This one could use some work!\r\n info: () => `\r\nInfinity Challenges are like Normal Challenges, but they have higher end goals and are generally harder. Instead of\r\nonly unlocking autobuyers, they give you boosts to your various forms of production in more unique ways. Similarly to\r\nNormal Challenges, the rightmost column of Infinity Upgrades are disabled within Infinity Challenges.\r\n
\r\n
\r\nUnlike the Normal Challenges, which are all unlocked at once, Infinity Challenges require you to reach a certain\r\namount of antimatter before you can attempt them.\r\n
\r\n
\r\nInfinity Challenge unlock thresholds: ${GameDatabase.challenges.infinity\r\n .map(ic => formatPostBreak(ic.unlockAM)).join(\", \")}\r\n`,\r\n isUnlocked: () => Autobuyer.bigCrunch.hasMaxedInterval || PlayerProgress.eternityUnlocked(),\r\n tags: [\"rewards\", \"break\", \"ic\", \"midgame\"],\r\n tab: \"challenges/infinity\"\r\n }, {\r\n name: \"Replicanti\",\r\n info: () => `\r\nReplicanti are another resource you unlock at ${format(DC.E140)} IP. Rather\r\nthan producing something else, Replicanti actually produces itself up to a maximum of\r\n${formatPostBreak(Number.MAX_VALUE, 2)}. Replicanti are produced at their own pace, unaffected by Tickspeed Upgrades.\r\nEach individual Replicanti has a certain chance (initially ${formatPercents(0.01)}) of producing another Replicanti\r\nevery Replicanti tick (initially every second), and both of these can be upgraded by spending IP.\r\n
\r\n
\r\nIf you have purchased a Replicanti Galaxy upgrade, then you can get a \"free\" Replicanti Galaxy in exchange for\r\nresetting your Replicanti count back to ${formatInt(1)}. This Galaxy is free in that it will act as if it was an\r\nAntimatter Galaxy, but it will not make your next Antimatter Galaxy more expensive. However, it will still reset the\r\nsame things as an Antimatter Galaxy does.\r\n
\r\n
\r\nHotkey: R will try to purchase a Replicanti Galaxy.\r\n
\r\nReplicanti give a multiplier to all Infinity Dimensions, which will reach a maximum of\r\n${formatX(Math.pow(2, 20), 2, 2)} at ${formatPostBreak(Number.MAX_VALUE, 2)} Replicanti.\r\n
\r\n
\r\nChance upgrade cost: Base ${format(DC.E150)} IP, cost increment ${formatX(DC.E15)} IP\r\n
\r\nInterval upgrade cost: Base ${format(DC.E140)} IP, cost increment ${formatX(DC.E10)} IP\r\n
\r\nGalaxy upgrade cost: Base ${format(DC.E170)} IP, cost increment ${formatX(DC.E25)} IP and an additional\r\n${formatX(1e5)} IP per upgrade, scaling similarly to distant Antimatter Galaxies. Above ${formatInt(100)} Replicanti\r\nGalaxies, this ${formatX(1e5)} per upgrade changes to ${formatX(DC.E55)}. Above ${formatInt(1000)}, the scaling switches\r\nfrom quadratic to cubic, with the ${formatX(DC.E55)} multiplier itself increasing by ${formatX(DC.E5)} per upgrade.\r\n`,\r\n isUnlocked: () => Replicanti.areUnlocked || PlayerProgress.eternityUnlocked(),\r\n tags: [\"interval\", \"chance\", \"infinity\", \"galaxy\", \"galaxies\", \"midgame\"],\r\n tab: \"infinity/replicanti\"\r\n }, {\r\n name: \"Eternity\",\r\n info: () => `\r\nUpon reaching ${formatPostBreak(Number.MAX_VALUE, 2)} IP, you can Eternity. Eternities will reset everything before this\r\npoint except challenge times, Achievements, and anything under the General section of the Statistics tab. You will be\r\nable to access more content after your first Eternity.\r\n
\r\n
\r\nYou can pass ${formatPostBreak(Number.MAX_VALUE, 2)} IP without anything being forced upon you, unlike the first time\r\nyou reached ${formatPostBreak(Number.MAX_VALUE, 2)} antimatter. You will receive more Eternity Points the more\r\nInfinity Points you had before going Eternal. You will also gain one \"Eternity\" for completing an Eternity.\r\n
\r\n
\r\nEternity Point gain scales similarly to Infinity Point gain, but scaling off of Infinity Points instead of antimatter.\r\nThe base amount of EP gained at ${formatPostBreak(Number.MAX_VALUE, 2)} IP is ~${format(1.62, 2, 2)} EP, multiplied by\r\n${formatInt(5)} for every factor of ${formatPostBreak(Number.MAX_VALUE, 2)} more IP you have. This is always rounded\r\ndown, which means that you will get ${formatInt(1)} EP at ${formatPostBreak(Number.MAX_VALUE, 2)} IP but will not reach\r\n${formatInt(2)} EP until ${formatPostBreak(DC.E349)}.\r\n
\r\n
\r\nHotkey: E will try to perform an Eternity reset.\r\n`,\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n tags: [\"eternal\", \"ep\", \"reset\", \"prestige\", \"midgame\"],\r\n tab: \"eternity/upgrades\"\r\n }, {\r\n name: \"Eternity Milestones\",\r\n info: () => `\r\nTo make Eternities faster and more convenient, you will unlock various buffs as you get more \"Eternity\". These\r\nbuffs will generally let you start with certain upgrades you would otherwise lose after Eternity, give you new\r\nautobuyers for better automation, or give you a way to passively gain resources offline at a reduced rate.\r\n
\r\n
\r\nMilestones which give you upgrades will automatically purchase and upgrade them to their maximum when first starting\r\nthe Eternity, effectively letting you have them permanently.\r\n
\r\n
\r\nAll of the new autobuyers will have toggles next to their respective manual buttons (for example, Infinity Dimension\r\nautobuyers can be found on the Infinity Dimension tab) in addition to their entries on the autobuyers tab.\r\nThe improvements to the Dimension Boost, Antimatter Galaxy, and Big Crunch autobuyers update their\r\nalready existing entries on the autobuyer tab.\r\n
\r\n
\r\nThe passive generation milestones only work offline by design and may need certain autobuyer settings to work\r\nproperly, as noted on the milestone page itself.\r\n`,\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n tags: [\"eternities\", \"rewards\", \"automation\", \"midgame\"],\r\n tab: \"eternity/milestones\"\r\n }, {\r\n name: \"Time Dimensions\",\r\n info: () => `\r\nAfter your first Eternity, you unlock Time Dimensions. You buy them with Eternity Points and they produce Time Shards,\r\nwhich provide Tickspeed Upgrades. These Tickspeed Upgrades function like normal Tickspeed Upgrades but do not increase\r\ntheir cost. Time Dimensions, Time Shards, and the Tickspeed Upgrades they provide are kept on Infinity,\r\nbut reset every Eternity.\r\n
\r\n
\r\nSimilarly to the other dimensions, Second Time Dimensions produce 1st Time Dimensions and so on. Similarly to Infinity\r\nDimensions, your production will be reset to the amount you purchased after every Eternity, but you will keep any\r\nupgrades to your multipliers you purchased.\r\n
\r\n
\r\nEach purchase increases the multiplier of that specific Time Dimension by ${formatX(4)}. The cost multiplier between\r\nupgrades has a base value, but is increased by ${formatX(1.5, 1, 1)} at\r\n${format(TimeDimension(1)._costIncreaseThresholds[0], 2)} EP and ${formatX(2.2, 1, 1)} (of the base value) at\r\n${format(TimeDimension(1)._costIncreaseThresholds[1])} EP. These increases apply retroactively, causing the cost to\r\njump when they reach those thresholds, and only apply to the first four dimensions. Beyond\r\n${format(TimeDimension(1)._costIncreaseThresholds[2])} EP each dimension purchase counts as four purchases for the\r\npurpose of cost increases, causing the price to rise much more steeply.\r\n
\r\nTime Dimension base prices (EP): ${Array.range(1, 8)\r\n .map(tier => format(TimeDimension(tier)._baseCost))\r\n .join(\", \")}\r\n
\r\nTime Dimension base price increases: ${Array.range(1, 8)\r\n .map(tier => format(TimeDimension(tier)._costMultiplier))\r\n .join(\", \")}\r\n
\r\n
\r\nEach threshold to gain another Tickspeed Upgrade is ${formatPercents(0.33)} more Time Shards than the previous,\r\nor ${formatPercents(0.25)} with the relevant Time Study. After ${formatInt(FreeTickspeed.softcap)} upgrades, the\r\nmultiplier between each successive free Tickspeed Upgrade will gradually increase at a rate of ~${formatX(1.35, 0, 2)}\r\nper ${formatInt(50000)} upgrades (${formatX(1.000006, 0, 6)} per upgrade).\r\n`,\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n tags: [\"dims\", \"td\", \"shards\", \"eternity\", \"midgame\"],\r\n tab: \"dimensions/time\"\r\n }, {\r\n name: \"Time Studies\",\r\n info: () => `\r\nA Time Study is a powerful post-Eternity upgrade, which costs a new resource called Time Theorems. Time Studies can\r\nboost the production of anything you have seen so far in the game, or even change the way some formulas work.\r\n
\r\n
\r\nTime Theorems are a limited resource which costs more for each one you buy. They can be bought with antimatter,\r\nInfinity Points, or Eternity Points. Their cost increases by a set factor per purchase. Time Theorems do not\r\nreset on Eternity.\r\n
\r\n
\r\nStudies are laid out in a tree-like fashion, where you must buy prerequisites before continuing. The only study you\r\ncan buy at first is the very top one, and then from there you can purchase any study directly below it which you can\r\nafford. However, there are three exceptions:\r\n
\r\nWhere the lines between studies have a color, you can only choose one of the three paths at a time.\r\n
\r\nWhen a study for an Eternity Challenge is in the way, you need to complete all challenges connected to it at least\r\nonce in order to access the study. You do not need to have the challenge study purchased in order to access it.\r\n
\r\nNear the bottom, where all the edges join together again, you can only pick one study out of each pair.\r\n
\r\n
\r\nYou are able to hold down shift and then click on a Time Study to buy all studies until that point. This might not buy\r\nthe studies you want if you shift-click a study in a position where you would have to choose between two or more\r\ndifferent options which you cannot get together (see above), or you cannot afford all the studies needed to reach that\r\npoint. Shift-click will buy studies greedily, getting as many as possible per row before moving farther downward.\r\n
\r\n
\r\nPresets: The buttons initially labeled 1 through 6 allow you to save your current set of studies into the slot,\r\nletting you quickly buy that particular set of studies again with a single click. You can hover over the button and\r\nuse the tooltip to load/save a slot, or click to load and shift-click to save. These presets can be renamed, but you\r\nare not allowed to give multiple presets the same name.\r\n
\r\n
\r\nImport Tree/Edit Preset: When editing a preset or importing a Time Study Tree, the modal will display what\r\nTime Studies will be bought when it is loaded, along with any errors.\r\nFor the split paths, you can use the name as a shorthand for the collection of studies.\r\nFor instance, you can replace \"71, 81, 91, 101\" to represent fully purchasing the antimatter split with\r\njust \"antimatter\". Additionally, if a Time Study string has a valid Eternity Challenge, adding a \"!\" to the end of\r\nthe string will make the game to try to immediately unlock and enter the Eternity Challenge when used.\r\n
\r\n
\r\nPreferences: Clicking the gear icon will open up a dialog which lets you select \"default\" paths to pick in the\r\nthree-way branches. Choosing a default will change the shift-click behavior mentioned above so that it will attempt\r\nto buy your preferred path and continue on instead of stopping completely at the tree splits. You can choose two paths\r\nfor the Dimension split in this dialog if you have purchased the relevant Time Study.\r\n
\r\n
\r\nRespecs: A respec allows you to reset the upgrades you have in the tree to retrieve all of the Time Theorems\r\nspent on them. It can be done for free, but only triggers on finishing an Eternity; you cannot respec Time Studies in\r\nthe middle of an Eternity.\r\n
\r\n
\r\nCosts for Time Theorems:\r\n
\r\nAntimatter: Initially ${format(DC.E20000)}, ${formatX(DC.E20000)} per Theorem\r\n
\r\nInfinity Points: Initially ${formatInt(1)}, ${formatX(DC.E100)} per Theorem\r\n
\r\nEternity Points: Initially ${formatInt(1)}, ${formatX(2)} per Theorem\r\n`,\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n tags: [\"eternity\", \"ts\", \"theorems\", \"tree\", \"study\", \"midgame\"],\r\n tab: \"eternity/studies\"\r\n }, {\r\n name: \"Eternity Challenges\",\r\n info: () => `\r\nEternity Challenges are another set of challenges which are unlocked by the Time Study Tree. They require a certain\r\namount of Time Theorems and a secondary requirement which you must meet when you unlock the challenge.\r\n
\r\n
\r\nWhen you enter an Eternity Challenge, your goal becomes reaching a certain target IP. After completing the challenge,\r\nyou do not need to have the Eternity Challenge's study unlocked for the reward to take effect. The rewards for these\r\nchallenges are similar to Time Studies, but often even stronger and permanent since they do not require you to spend\r\nTime Theorems to have their effects.\r\n
\r\n
\r\nYou can only have one Eternity Challenge unlocked at a time.\r\n
\r\n
\r\nYou can complete each Eternity Challenge up to five times. After each completion, the rewards grow stronger but the\r\ngoal to the next completion also increases. Additionally, the secondary requirement to unlock the challenge again will\r\nalso increase. The Time Theorem cost does not increase.\r\n
\r\n
\r\nCompleting an Eternity Challenge's secondary requirements will remove them from the study requirement until you complete\r\nthat particular Eternity Challenge, meaning you only need to complete the secondary requirement once.\r\nAs a result, you can unlock an Eternity Challenge with one set of studies, and then respec into a different set of\r\nstudies to beat the challenge. EC11 and EC12 are exceptions to this rule - the Dimension path restrictions remain even\r\nif you respec your time studies.\r\n`,\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n tags: [\"ec\", \"study\", \"time\", \"rewards\", \"completions\", \"midgame\"],\r\n tab: \"challenges/eternity\"\r\n }, {\r\n name: \"Time Dilation\",\r\n info: () => `\r\nTime Dilation is unlocked when you purchase the Time Study to unlock it below the EC11 and EC12 studies.\r\nIn order to purchase this Time Study, you need ${formatInt(5000)} unspent TT with a tree that can reach\r\nthe study, a total of ${formatInt(TimeStudy.dilation.totalTimeTheoremRequirement)} TT, and must have\r\ncompleted both EC11 and EC12 five times each.\r\n
\r\n
\r\nDilating time will start a modified Eternity, called Time Dilation, in which all of your Antimatter/Infinity/Time\r\nDimension multipliers’ exponents and the tickspeed multipliers’ exponent will be raised to\r\n${formatPow(0.75, 2, 2)}, significantly reducing them. If you can reach ${formatPostBreak(Number.MAX_VALUE, 2)} IP\r\nto complete this Dilated Eternity, you will be rewarded with a new resource called Tachyon Particles.\r\n
\r\n
\r\nYou can Dilate as many times as you want, but Tachyon Particles cannot be \"farmed\" like other resources. Tachyon\r\nParticles are never reduced, only increased, and they are increased up to a cap based on your TP multipliers and\r\nantimatter earned in the current Dilation. As a result, you generally cannot increase your TP unless\r\nyou have gained a TP multiplier or are able to significantly increase your antimatter in Dilation.\r\n
\r\n
\r\nTachyon Particles generate another currency called Dilated Time. Dilated Time is translated into Tachyon Galaxies by\r\nreaching thresholds similarly to the Tickspeed Upgrades gained from Time Dimensions. These Tachyon Galaxies are like\r\nReplicanti Galaxies in that they affect tickspeed as if they were Antimatter Galaxies but they do not increase the cost\r\nof your next Antimatter Galaxy.\r\n
\r\n
\r\nUnlocking Time Dilation also unlocks upgrades you can purchase using Dilated Time. The first and third upgrades in the\r\nfirst row of Dilation Upgrades can be repeatedly purchased as many times as you can afford them. The second upgrade can\r\nalso be repeatedly bought, but eventually reaches a cap.\r\n`,\r\n isUnlocked: () => DilationTimeStudyState.studies[1].isBought || PlayerProgress.realityUnlocked(),\r\n tags: [\"dial\", \"dt\", \"dilated\", \"tachyon\", \"particle\", \"study\", \"free\", \"galaxy\", \"galaxies\", \"midgame\"],\r\n tab: \"eternity/dilation\"\r\n }, {\r\n name: \"Reality\",\r\n info: () => `\r\nWhen you reach ${formatPostBreak(DC.E4000)} EP and have completed the first\r\n${formatInt(13)} rows of Achievements, you will be able to purchase the Time Study that unlocks Reality.\r\nUnlocking it opens a new tab, where you can find the button to make a new Reality. Starting a new Reality\r\nwill reset almost the entire game up to this point, but in exchange gives\r\nyou a new currency known as Reality Machines, a Glyph, and a Perk Point.\r\n
\r\n
\r\nUnlike the other resets so far, you also lose the first ${formatInt(13)} rows of Achievements - that is, all of the\r\npre-Reality Achievements and all of their associated rewards. However, you will still keep all values under the General\r\nheader in the Statistics tab and all of your best Challenge times.\r\n
\r\n
\r\nAfter completing your first Reality, the Glyphs tab contain a button which lets you restart your current Reality again,\r\nwithout changing what your upcoming Glyph choices are. Note that this will not give you any rewards, even if you\r\nwould otherwise be able to complete the Reality normally.\r\n
\r\n
\r\nYou need to redo the requirements for each Achievement in order to get their rewards again, but you will also passively\r\nunlock the next incomplete Achievement every ${timeDisplayNoDecimals(30 * 60000)} without any effort even if you\r\notherwise do not have the requirements to do so. This automatic completion can be disabled, in which case the timer will\r\ncount down to zero and pause, immediately completing another Achievement when unpaused. The timer still progresses\r\nat the same rate while offline.\r\n
\r\n
\r\nReality Machines can be spent on different upgrades throughout the Reality tab and are your primary currency from this\r\npoint onwards. Glyphs are equippable objects which you must equip in order to use their boosts. Perk Points are another\r\ncurrency that can be spent in the Perks subtab on different Perks.\r\n
\r\n
\r\nReality Machines scale purely off of EP, and the Reality button will tell you how much EP you need in order to gain\r\nthe next one. The first ${formatInt(10)} RM scale linearly in the exponent between\r\n${formatPostBreak(DC.E4000)} EP and ${formatPostBreak(DC.C10P16000D3)} EP, and then past that\r\nRM = ${formatInt(1000)}log${formatInt(10)}(EP)/${formatInt(4000)}-${formatInt(1)}. This formula\r\nis higher RM gain than linear above ${formatPostBreak(DC.C10P16000D3)} EP.\r\n
\r\n
\r\nGlyph level scales off of a combination of Eternity Points, Replicanti, and Dilated Time, with a minimum level of\r\n${formatInt(1)}. The type, effects, and rarity of Glyphs are randomized.\r\n
\r\n
\r\nYou get exactly ${formatInt(1)} Perk Point per Reality.\r\n
\r\n
\r\nHotkey: Y will try to perform a Reality reset.\r\n`,\r\n isUnlocked: () => PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought,\r\n tags: [\"rm\", \"machines\", \"glyph\", \"perk\", \"reset\", \"prestige\", \"endgame\", \"lategame\"],\r\n tab: \"reality/upgrades\"\r\n }, {\r\n name: \"Glyphs\",\r\n info: () => `\r\nA Glyph is an equippable object that has four attributes:\r\n
\r\nType - This is a name given to the Glyph based on what part of the game it will tend to boost\r\n(eg. \"Glyph of X\"). This determines the possible effects it may have.\r\n
\r\nLevel - This contributes to how strong your Glyph is, and it scales based how much of various\r\nresources you obtained in the Reality you gained it from.\r\n
\r\nRarity - This is a percentage, between ${formatPercents(0)} and ${formatPercents(1)}, which also\r\naffects the strength of your Glyph. This is random, but can be influenced by various upgrades.\r\nThe percentage is effectively a quality\r\nrating, higher values are better. Specific ranges of rarities are given names, such as Common or Uncommon.\r\n
\r\nEffects - These are the boosts that equipping the Glyph will give you, and can contain up to four effects.\r\nGlyphs with higher level or rarity will generally have more effects than weaker Glyphs.\r\n
\r\nNote: Your first Glyph will have a fixed effect and rarity, but its level will scale based on your progress before\r\nany Reality content. Once you receive a Glyph, its attributes cannot be changed.\r\n
\r\n
\r\nTo equip a Glyph, double-click or drag the icon from your inventory into one of the active circles in the middle\r\nof the screen. When equipped, Glyph icons become circular and add their effects to the list on the right.\r\n
\r\n
\r\nEquipping multiple Glyphs with the same effect will combine their effects; effects with \"+\" will generally add\r\ntheir values together and effects with \"×\" will generally multiply their values together.\r\n
\r\n
\r\nYou can equip Glyphs into empty active slots at any time during a Reality, which will immediately apply the\r\neffects of the new Glyph. You can also drag Glyphs into already-occupied slots to switch which ones you have equipped,\r\nbut this will restart your current Reality.\r\n
\r\n
\r\nThe slots in the first rows of your inventory are \"protected\" slots. New Glyphs will never be placed into them (even if\r\nthere is no more room in your inventory), and they are unaffected by the Sort and Auto clean buttons. If you run out of\r\nspace for new Glyphs in your inventory, any Glyphs you would receive will be automatically deleted (or sacrificed\r\nif unlocked).\r\n
\r\n
\r\nYou can delete Glyphs from your inventory by shift-clicking them, which will prompt you with a confirmation dialog\r\nasking if you are sure you want to delete the Glyph. Holding shift and ctrl together while clicking will bypass this\r\ndialog. However, deleting Glyphs will give you no benefit beyond clearing up inventory space if you do so before\r\nunlocking Glyph Sacrifice from a Reality Upgrade!\r\n
\r\n
\r\nOnce you unlock Glyph Sacrifice, you will be able to disable the Glyph Selection modal from appearing. If desired, you\r\ncan force the modal to appear again for this Reality (ignoring this setting) by shift-clicking the Reality button.\r\nCompleting a Reality with the selection modal disabled will choose a random Glyph from your options.\r\n
\r\n
\r\nClicking a group of circular Glyphs outside of a modal window will open up a modal which displays a detailed summary\r\nof all those Glyphs and their various attributes. The summary will show the information for all Glyphs at once with\r\nslightly shorter descriptions, making it more suitable for sharing with others. This can be done for Glyph records\r\nin the Statistics page, your equipped Glyphs, and the Upcoming Glyph Selection this Reality.\r\n`,\r\n isUnlocked: () => PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought,\r\n tags: [\"reality\", \"sacrifice\", \"level\", \"endgame\", \"lategame\"],\r\n tab: \"reality/glyphs\"\r\n }, {\r\n name: \"Perks\",\r\n info: () => `\r\nPerks are a type of upgrade unlocked upon Reality. Each Perk effect varies, but most are QoL (quality of life)\r\nimprovements which you can choose your own path through. All Perks only require ${formatInt(1)} Perk Point to buy.\r\n
\r\n
\r\nEach Reality you gain ${formatInt(1)} Perk Point which can be spent on an upgrade on the tree, starting with\r\n\"You can now choose from ${formatInt(Perk.firstPerk.config.effect)} Glyphs on Reality\". You can only unlock Perks\r\nwhich are directly adjacent\r\nto Perks you already have, although there are loops in the tree which you can go through in either direction.\r\n
\r\n
\r\nThe Perk nodes can have two different shapes - circular or diamond. The only difference between the two is that\r\ndiamond-shaped Perks give Automator Points in addition to their normal effect. Different nodes also have\r\ndifferent colors, roughly indicating which part of the game they affect the most.\r\n`,\r\n isUnlocked: () => PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought,\r\n tags: [\"pp\", \"reality\", \"tree\", \"endgame\", \"lategame\"],\r\n tab: \"reality/perks\"\r\n }, {\r\n name: \"Automator Overview\",\r\n info: () => `\r\nThe Automator is unlocked upon reaching a total of ${formatInt(AutomatorPoints.pointsForAutomator)} Automator Points.\r\nAutomator Points are given when unlocking various Perks or Reality Upgrades, by unlocking the Black Hole, or by\r\nsimply completing more Realities.\r\n
\r\n
\r\nThe Automator uses a scripting language that allows you to automate nearly the entire game.\r\nThe interface has two panes, a script pane on the left where you enter the commands to automate the game and a pane\r\non the right which has multiple panels which do many different things as explained on the Automator Introduction page.\r\n
\r\n
\r\nIf you want a larger workspace, you can press the button in the top right corner of the documentation pane of the\r\nAutomator to expand it to fullscreen. You can also drag the boundary between the panes horizontally to resize the\r\npanes if you want more room to write your script or read documentation.\r\n
\r\n
\r\nBy pressing the top-right button on the script pane, you can switch between the Automator's block and text editor\r\nmodes; the block mode may be more approachable if you are unfamiliar with programming. To enter commands in block mode,\r\nselect the command block pane on the right and drag the box for the relevant command into the script pane and drop it\r\nwhere you want the command to go. Commands can be freely rearranged by dragging the blocks around if needed. Switching\r\nbetween block and text mode will attempt to automatically translate your script as well, although you may lose part of\r\nyour converted script if it contains errors.\r\n
\r\n
\r\nJust like your entire savefile, individual Automator scripts can be imported and exported from the game.\r\nProperly-formatted script strings will begin with ${GameSaveSerializer.startingString[\"automator script\"]} and\r\nend with ${GameSaveSerializer.endingString[\"automator script\"]}. If this is not the case then part of your script\r\nwas lost in the process of copy-pasting. The import function will load the script into a new slot; your current script\r\nwill not be lost or overwritten.\r\n
\r\n
\r\nHotkey: U will pause/unpause the Automator.\r\n`,\r\n isUnlocked: () => Player.automatorUnlocked,\r\n tags: [\"automation\", \"reality\", \"code\", \"script\", \"endgame\", \"lategame\"],\r\n tab: \"automation/automator\"\r\n }, {\r\n name: \"Automator Technical Details\",\r\n info: () => `\r\nTechnical Limits\r\n
\r\n
\r\nThere are a few limitations to scripts in order to reduce lag and prevent save file size from getting too large.\r\nThese limits are as follows:\r\n
\r\n- Individual scripts are limited to a maximum of ${formatInt(AutomatorData.MAX_ALLOWED_SCRIPT_CHARACTERS)}\r\ncharacters each and all scripts combined together cannot exceed ${formatInt(AutomatorData.MAX_ALLOWED_TOTAL_CHARACTERS)}\r\ncharacters total.\r\n
\r\n- Script names cannot exceed ${formatInt(AutomatorData.MAX_ALLOWED_SCRIPT_NAME_LENGTH)} characters.\r\n
\r\n- Defined constants cannot have names longer than ${formatInt(AutomatorData.MAX_ALLOWED_CONSTANT_NAME_LENGTH)}\r\ncharacters, or values longer than ${formatInt(AutomatorData.MAX_ALLOWED_CONSTANT_VALUE_LENGTH)} characters.\r\n
\r\n- You cannot have more than a total of ${formatInt(AutomatorData.MAX_ALLOWED_SCRIPT_COUNT)} scripts or\r\n${formatInt(AutomatorData.MAX_ALLOWED_CONSTANT_COUNT)} defined constants.\r\n
\r\n
\r\nScript Saving\r\n
\r\n
\r\nScripts are automatically saved as you edit them, but are not saved to your game save until the global autosave timer\r\n(ie. \"Time since last save\") triggers a full game save. If you make changes to scripts right before closing the game,\r\nyou should wait until the game saves afterwards in order to not lose your changes. Any edits made to your scripts\r\nwhile above the length limits will not be saved until you shorten your scripts to be below them again.\r\n
\r\n
\r\nAutomator Ticks\r\n
\r\n
\r\nThe Automator's \"execution timer\" is based on real time, and is therefore unaffected by things such as the Black Hole,\r\nTime Glyph effects, and EC12's negative effect. However this execution timer runs entirely independently from the main\r\ngame's production loop, meaning that at faster speeds the Automator can run multiple commands per production tick.\r\n
\r\n
\r\nSome commands are more intensive on the game's internal code and may take longer than a single Automator tick in order\r\nto process on slower computers. In that case, the Automator will execute those commands and then attempt to \"catch up\"\r\nby executing the following commands as quickly as possible until it has run as many commands as it should have at a\r\nconstant execution speed.\r\n
\r\n
\r\nInteractions with Offline Progress\r\n
\r\n
\r\nLonger production ticks during Offline Progress simulation means that all of your resources are effectively given\r\nin large chunks instead of more continuously. This may have potentially adverse effects on your script's\r\nbehavior while offline, depending on how exactly your script depends on the game state to work properly.\r\nAdditionally, the PAUSE command may behave oddly due to it also being based on real time.\r\n`,\r\n isUnlocked: () => Player.automatorUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"automation\", \"reality\", \"code\", \"script\", \"endgame\", \"lategame\"],\r\n tab: \"automation/automator\"\r\n }, {\r\n name: \"Black Hole\",\r\n info: () => `\r\nThe Black Hole is a feature which speeds up how fast the game runs, on a periodic cycle.\r\nThe game will run at normal speed for some amount of time, then have a burst of running extremely fast for a short\r\nperiod of time before going back to normal speed and repeating the cycle.\r\n
\r\n
\r\nIncreased game speed from Black Holes is much stronger than tickspeed because unlike tickspeed, it affects\r\neverything equally, including things which are only partially affected by tickspeed\r\n(eg. Infinity/Time Dimensions), things which are normally completely unaffected (eg. DT/TT generation),\r\nand effects which are boosted purely on time spent (eg. idle path IP/EP multipliers).\r\n
\r\n
\r\nWhile most features in the game are boosted by this increased game speed, there are some which remain unaffected.\r\nIn these cases, it will be specifically mentioned that a given time is stated as real time as opposed to\r\ngame time. One such example is the set of Perks which automatically completes Eternity Challenges over time.\r\nOtherwise, it should be assumed from this point onward that all references to time are for game time.\r\nNote that this also includes situations where you may want to have a lower amount of time spent, like\r\nthe Reality Upgrade \"Replicative Rapidity\" for example.\r\n
\r\n
\r\nYou can buy upgrades for the Black Hole by using Reality Machines. There are three upgrades for the Black Hole:\r\n
\r\nInterval - How long the Black Hole is inactive between bursts,\r\nreduced by ${formatPercents(0.2)} per upgrade.\r\n
\r\nPower - How much faster the game runs during the temporary speed bursts,\r\nincreased by ${formatPercents(0.35)} per upgrade.\r\n
\r\nDuration - How long each speed burst lasts before going back to normal speed,\r\nincreased by ${formatPercents(0.3)} per upgrade.\r\n
\r\n
\r\n${formatInt(100)} days of game time after unlocking the Black Hole, you unlock the ability to purchase\r\na Reality Upgrade that allows you to have a second Black Hole.\r\nThe timer on the second Black Hole only advances when the first Black Hole is active. So, for example, if the first\r\nBlack Hole has a duration of ${formatInt(4)} minutes and the second has an interval of ${formatInt(8)} minutes, the\r\nsecond Black Hole will only activate once every two cycles of the first Black Hole regardless of how short the\r\nfirst Black Hole's interval is. Note that the timer shown in the in-game header takes account of this and shows\r\nthe actual time until the second Black Hole activates; in the Black Hole tab, you can see the amount of time with\r\nthe first Black Hole active needed for the second Black Hole to activate.\r\n
\r\n
\r\nWhen a Black Hole is active at least ${formatPercents(0.9999, 2)} of the time, it becomes permanently active.\r\nThis is tracked separately for the two Black Holes.\r\n
\r\n
\r\nWhile offline, Black Hole cycles will still advance normally and their active speed boosts will apply fully as if the\r\ngame were still open. Offline time simulates segments of inactive and active Black Holes with different tick lengths\r\nin order to reduce the negative effects of small tick count during active periods; the entry for \"Offline Progress\"\r\nhas been updated with more technical details.\r\n
\r\n
\r\nThe Black Holes can be paused, completely halting their interval/duration cycle. However, when unpausing them, it will\r\ntake ${BlackHoles.ACCELERATION_TIME} real-time seconds for them to go from inactive to their maximum boosted speed.\r\nThis acceleration time will still advance the cycle as if it were running at full speed; so\r\nwhile pausing gives some more control, it also ultimately results in some boosted time being lost.\r\n
\r\n
\r\nPausing and unpausing affects both Black Holes; they cannot be paused or unpaused independently. They can be paused\r\nautomatically ${BlackHoles.ACCELERATION_TIME} real-time seconds before activation by toggling the relevant setting on\r\nthe Black Hole tab.\r\n
\r\n
\r\nUpgrade Cost Information:\r\n
\r\nInterval - Base cost of ${formatInt(15)} RM and increase of ${formatX(3.5, 0, 1)} per upgrade.\r\n
\r\nPower - Base cost of ${formatInt(20)} RM and increase of ${formatX(2)} per upgrade.\r\n
\r\nDuration - Base cost of ${formatInt(10)} RM and increase of ${formatX(4)} per upgrade.\r\n
\r\nIncreased cost scaling: Above ${format(1e30)} RM, the cost multiplier between purchases increases by an additive\r\n+${format(0.2, 0, 1)} per upgrade. Above ${format(Number.MAX_VALUE, 1)} RM, a new scaling occurs which ignores all the\r\nprevious behavior. From this point, all upgrades instead behave as if they had an initial cost of ${format(DC.E310)}\r\nand further upgrade costs increase by ${format(1e6)}, ${format(1e7)}, and so on (${formatX(10)} between upgrades).\r\n
\r\nBlack Hole 2: All upgrades have an initial cost ${formatX(1000)} higher than the first Black Hole,\r\nbut the same cost multipliers.\r\n
\r\n
\r\nHotkey: B will pause/unpause the Black Holes.\r\n`,\r\n isUnlocked: () => player.blackHole[0].unlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"time\", \"speed\", \"duration\", \"interval\", \"rm\", \"endgame\", \"lategame\"],\r\n tab: \"reality/hole\"\r\n }, {\r\n name: \"Celestials\",\r\n info: () => `\r\nOnce you get all of the Reality Upgrades, the first Celestial is unlocked. This opens up a new tab for Celestials, next\r\nto the Reality tab. The first subtab under the Celestials tab shows a map called \"Celestial Navigation\" which updates as\r\nyou progress through the game. Only part of the map will be visible when first unlocked, but new content will gradually\r\nbe revealed as you approach it, generally with a visual indication of your progress towards the next step.\r\n
\r\n
\r\nEach Celestial has unique mechanics and upgrades, and you need to defeat all seven to beat the game.\r\nUnlocking or defeating a Celestial has different conditions depending on the Celestial's mechanics.\r\n
\r\n
\r\nAll Celestials have their own Celestial Reality, but how the Reality is relevant to each Celestial and the rest of\r\nthe game will depend on the Celestial.\r\n
\r\n
\r\nCelestials are timeless entities. Unless otherwise stated, any new mechanics introduced by Celestials are not affected\r\nby game speed multipliers and instead refer specifically to real time instead of game time.\r\n`,\r\n isUnlocked: () => Teresa.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"challenges\", \"endgame\", \"lategame\"],\r\n tab: \"celestials/celestial-navigation\"\r\n }, {\r\n name: \"Teresa, Celestial of Reality\",\r\n alias: \"Teresa\",\r\n info: () => `\r\nTeresa is the first Celestial. They are unlocked by Achievement 147, which requires obtaining all Reality Upgrades.\r\n
\r\n
\r\nOn the main screen, there is a bar with a button above it that says \"Pour RM\". This allows you to put your RM into the\r\ncontainer for a Reality Machine multiplier. RM which has been poured into the container cannot be retrieved.\r\nWhen you reach ${format(TeresaUnlocks.run.price)} RM inside of the container, you unlock Teresa's Reality.\r\n
\r\n
\r\nWhen you complete Teresa's Reality,\r\n${Teresa.runCompleted\r\n ? \"your Glyph Sacrifice is multiplied based on the amount of antimatter gained during the run\"\r\n : \"
(complete Teresa's Reality to see the reward)
\"}.\r\nCompleting Teresa's Reality is only part of the story; you need to keep pouring RM in order to progress. Once\r\nyou are at ${format(TeresaUnlocks.effarig.price)} RM in the container, you will unlock the next Celestial.\r\n
\r\n
\r\n${Teresa.runCompleted\r\n ? \"Teresa's Reality can be entered again after completing it, and its reward will become stronger if you \" +\r\n \"reach a higher amount of antimatter on this repeat run.\"\r\n : \"(More information available - complete Teresa's Reality)\"}\r\n`,\r\n isUnlocked: () => Teresa.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"rm\", \"endgame\", \"lategame\", \"perks\", \"sacrifice\", \"boo\", \"ghost\", \"celestial\"],\r\n tab: \"celestials/teresa\"\r\n }, {\r\n name: \"Effarig, Celestial of Ancient Relics\",\r\n alias: \"Effarig\",\r\n info: () => `\r\nEffarig is the second Celestial you encounter.\r\nThey are unlocked by pouring at least ${format(TeresaUnlocks.effarig.price)} RM into Teresa's container.\r\n
\r\n
\r\nEffarig introduces a currency called Relic Shards, which are obtained by using different kinds of Glyph effects during\r\na Reality. The number of distinct effects active during the Reality very strongly affects Relic Shard gain, and EP\r\naffects it to a much lesser degree. Relic Shards are the currency for Effarig unlocks, and will be gained from every\r\nReality from now on.\r\n
\r\n
\r\nUsing Relic Shards, you can purchase multiple upgrades (see \"Advanced Glyph Mechanics\") which improve your Glyphs and\r\nallow you to filter them based on their effects and rarity when you are doing fully automated Realities.\r\n
\r\n
\r\nEffarig's final unlock is their own Reality at ${format(GameDatabase.celestials.effarig.unlocks.run.cost)} Relic\r\nShards.\r\n${EffarigUnlock.run.isUnlocked\r\n ? \"Their Reality is divided into three layers: Infinity, Eternity, and Reality. You must complete each layer \" +\r\n \"before getting access to the next one. Completing Effarig's Eternity unlocks the next Celestial.\"\r\n : \"
(unlock Effarig's Reality to see details about it)
\"\r\n}\r\n
\r\n
\r\nCompleting Effarig's Reality unlocks\r\n${EffarigUnlock.reality.isUnlocked\r\n ? `a new Glyph type, Effarig Glyphs. Effarig Glyphs have\r\n ${formatInt(7)} different possible effects, which you can view in the Glyph filter settings. You can only\r\n have one Effarig Glyph equipped at a time.\r\n${Ra.unlocks.glyphEffectCount.canBeApplied\r\n ? `Due to having Effarig at level 10 within Ra, there are no longer any restrictions on effects that appear on\r\n Effarig Glyphs. Any given Effarig Glyph can now have up to all ${formatInt(7)} effects at the same time.`\r\n : `Effarig Glyphs can only have at most ${formatInt(4)} effects, and the RM multiplier and Glyph instability\r\n effects cannot appear together on the same Glyph.`}`\r\n : \"(complete Effarig's Reality to see reward details)\"}\r\n
\r\n
\r\n`,\r\n isUnlocked: () => TeresaUnlocks.effarig.canBeApplied || PlayerProgress.mendingUnlocked(),\r\n tags: [\"glyph\", \"sacrifice\", \"shards\", \"reality\", \"spectralflame\", \"lategame\", \"endgame\", \"celestial\"],\r\n tab: \"celestials/effarig\"\r\n }, {\r\n name: \"Advanced Glyph Mechanics\",\r\n info: () => `\r\nGlyph level Adjustment is purchasable for ${format(GameDatabase.celestials.effarig.unlocks.adjuster.cost)} Relic\r\nShards. This allows you to set weights for each resource (EP, DT, Replicanti, Eternities), in how much they affect the\r\nlevel of Glyphs gained on Reality.\r\n
\r\n
\r\nAutomatic Glyph Filtering is purchasable for ${format(GameDatabase.celestials.effarig.unlocks.glyphFilter.cost)}\r\nRelic Shards. This system uses one of many methods to assign a score to your Glyph choices, and then picks the choice\r\nwith the highest score. After picking this Glyph, it checks the score against a threshold and either keeps it if the\r\nscore is above the threshold, or sacrifices it instead. There are three basic modes:\r\n
\r\nLowest total sacrifice: Glyphs are given a score based on how much sacrifice value you have of that\r\nparticular Glyph's type. Glyphs of the type you have the least sacrifice value in will have the highest score.\r\nThis mode does not have a threshold and always sacrifices your Glyphs.\r\n
\r\nNumber of effects: Glyphs are given a score equal to the number of effects they have, and when multiple\r\nGlyphs have the same effect count, Glyphs with higher rarity will be picked. The threshold they are\r\ncompared to is specified by your input in the text box.\r\n
\r\nRarity Threshold Mode: Glyphs are given a score equal to their rarity percent. The comparison threshold\r\ncan be set individually per Glyph type.\r\n
\r\n
\r\nAdditionally, there are two more advanced modes with some additional flexibility. You may not need these initially, but\r\nthey can come in handy later on:\r\n
\r\nSpecified Effect Mode: Glyphs are given a score equal to their rarity and checked against the rarity threshold\r\nyou specify, but this score is modified based on your inputs for effects. The Glyph will be checked for having a minimum\r\nnumber of effects and having all of the effects you choose, and its score is lowered by ${formatInt(200)} for every\r\nmissing effect. This guarantees that any Glyph that does not have the effects you want will be below the threshold. You\r\ncan forbid specific Glyph types by setting impossible conditions (eg. at least ${formatInt(6)} effects on a Power\r\nGlyph will prevent Power Glyphs from being selected).\r\n
\r\nEffect Score Mode: The score of a Glyph is calculated from its rarity plus the score of each effect it has,\r\nand you can set the threshold and values of each effect individually. Some possible ways this could be used:\r\n
\r\n- Giving a weaker effect a value of ${formatInt(5)} allows you to keep Glyphs without that effect as long as they are\r\nrarer to compensate for being weaker\r\n
\r\n- Assigning a large negative score to a certain effect you do not want will forbid Glyphs with that effect from\r\nbeing selected; this can be useful for effect testing and other more limited situations\r\n
\r\n- Setting an impossible condition (eg. a threshold score of ${formatInt(999)} and all effects worth ${formatInt(0)})\r\nwill let you forbid entire types like Specified Effect Mode as well\r\n
\r\n
\r\nThe Glyph Filter mode is a global setting which applies to all Glyph types at once; for example, you cannot filter\r\npower Glyphs with \"Rarity Threshold\" and time Glyphs with \"Specified Effect\". Selecting one mode will require\r\nyou to configure every Glyph type within its settings for proper filtering. Each filter mode has its own settings\r\nwhich will be kept if you switch to another mode.\r\n
\r\n
\r\nUnlocking the Glyph Filter also lets you use the highest Glyph score amongst your upcoming choices as a comparable\r\nCurrency in the Automator. Additionally, you can make your Filter force an immediate Reality (once available) if\r\nnone of the upcoming choices will be kept by the filter, as long as the Reality autobuyer is on.\r\n
\r\n
\r\nGlyph Presets are purchasable for ${format(GameDatabase.celestials.effarig.unlocks.setSaves.cost)} Relic\r\nShards. This unlocks ${formatInt(7)} slots that allow you to save your currently equipped Glyphs into sets.\r\nYou cannot overwrite a set, you must delete it first. When you load a set, each Glyph in it is found and equipped.\r\nIf any are not found, it will display a warning, but equip all the rest regardless.\r\nWhen loading a set, you can be Level and/or Rarity sensitive. The best Glyph from the possible Glyphs\r\nwill always be the one equipped. Just like other groups of circular Glyphs, you can click any of them\r\nin order to bring up a modal summarizing the whole set of Glyphs.\r\n`,\r\n isUnlocked: () => EffarigUnlock.adjuster.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"glyph\", \"weight\", \"adjustment\", \"sacrifice\", \"filter\", \"threshold\", \"set\", \"save\", \"reality\", \"lategame\",\r\n \"endgame\"],\r\n tab: \"celestials/glyphfilter\"\r\n }, {\r\n name: \"The Nameless Ones, Celestial of Time\",\r\n alias: \"Nameless Ones\",\r\n info: () => `\r\nThe Nameless Ones are the third Celestial, unlocked by completing Effarig's Eternity.\r\n
\r\n
\r\nWhen unlocking The Nameless Ones, you immediately gain access to two new mechanics related to time. You can store\r\n\"game time\" by charging your Black Hole, and you can store \"real time\" by intentionally halting your production.\r\nStored game time is also used as a currency for purchasing unlocks from The Nameless Ones.\r\n
\r\n
\r\nCharging your Black Hole gives you stored game time, which it does at the expense of setting your game speed to\r\n${formatInt(1)}. The game is in effect using your increased game speed in order to store game time itself. Its\r\nmain use is to discharge the Black Hole, which takes uses your stored game time to skip forward in time by a duration\r\nequal to the game time stored. This is different than regular game speed multipliers in that discharging is not subject\r\nto any modifiers to game speed when it is used, only when it is stored.\r\n
\r\n
\r\nStoring real time completely stops all production, effectively pausing your game. For every real-time second that\r\npasses, you gain stored real time (modified by some efficiency factor). You can use stored real time in order to\r\namplify a Reality in the Glyphs tab. When you complete the Reality, this uses all of your stored real time at once\r\nin order to attempt to repeat that\r\nexact Reality over and over, giving you all the rewards you would normally get from the repetitions. For example, if\r\nyou have ${formatInt(50)} minutes stored and amplify a Reality which has lasted ${formatInt(10)} minutes and would\r\ngive ${format(DC.E30)} RM and ${format(DC.E12)} Relic Shards, the amplified Reality will give you ${format(5e30)} RM,\r\n${format(5e12)} Relic Shards, ${formatInt(5)} Glyphs (subject to your filtering settings),\r\nand ${formatInt(5)} Perk Points.\r\n
\r\n
\r\nHowever, if your Reality has lasted for less than ${formatInt(1)} second, the amplification factor is capped by the\r\namount of seconds stored. For example, if you have ${formatInt(1000)} seconds stored and amplify a Reality which has\r\nlasted ${format(0.2, 2, 2)} seconds, you will use ${formatInt(200)} seconds to simulate ${formatInt(1000)} Realities.\r\n
\r\n
\r\nYou can toggle a setting to automatically store offline time as stored real time.\r\n
\r\n
\r\nTheir first unlock costs ${format(TimeSpan.fromMilliseconds(ENSLAVED_UNLOCKS.FREE_TICKSPEED_SOFTCAP.price).totalYears)}\r\nyears of stored game time. It increases the softcap to Tickspeed Upgrades gained from Time Dimensions\r\n(the point at which their cost starts increasing faster)\r\nby ${format(1e5)} Tickspeed Upgrades.\r\n
\r\n
\r\nAt ${format(TimeSpan.fromMilliseconds(ENSLAVED_UNLOCKS.RUN.price).totalYears)} years of stored game time, you are able\r\nto finally unlock their Reality. The reward for completing The Nameless Ones' Reality is\r\n${Enslaved.isCompleted\r\n ? \"unlocking Tesseracts, which have their own How To Play entry.\"\r\n : \"(complete The Nameless Ones' Reality to see reward details)\"}\r\n
\r\n
\r\nThe Nameless Ones will not directly unlock the next Celestial.\r\n`,\r\n isUnlocked: () => EffarigUnlock.eternity.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"time\", \"blackhole\", \"lategame\", \"endgame\", \"testers\", \"celestial\",\r\n ...credits.people.map(p => p.name)\r\n ],\r\n tab: \"celestials/enslaved\"\r\n }, {\r\n name: \"Tesseracts\",\r\n info: () => `\r\nTesseracts are a new resource you unlock for completing The Nameless Ones' Reality.\r\n
\r\n
\r\nInfinity Dimensions are normally capped at ${format(InfinityDimensions.HARDCAP_PURCHASES)} total purchases,\r\nwhich limits how large their multipliers can grow since eventually you cannot upgrade them any more.\r\nTesseracts allow you to raise this cap by spending Infinity Points.\r\n
\r\n
\r\nThe cost of Tesseracts increases super-exponentially, but each successive Tesseract is significantly stronger than\r\nthe last in order to make up for that. Tesseract count is never reset, meaning that once purchased, you do not need\r\nto reach the IP cost again in order to take advantage of the raised cap in later Realities.\r\n
\r\n
\r\nYou can see additional information about your current Tesseract count and the cost of the next one in the Infinity\r\nDimensions tab. Additionally, your current Infinity Points will now also show a percentage towards the next Tesseract.\r\nIf affordable, the Infinity button itself will visually change and bring you to the Infinity Dimension tab when clicked.\r\n`,\r\n isUnlocked: () => Enslaved.isCompleted || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"lategame\", \"endgame\", \"tesseract\", \"id\", \"celestial\"],\r\n tab: \"celestials/tesseract\"\r\n }, {\r\n name: \"V, Celestial of Achievements\",\r\n alias: \"V\",\r\n info: () => `\r\nV is a special Celestial in the sense that they are not unlocked by another Celestial,\r\nbut is instead unlocked by completing Achievement ID 151 (row ${formatInt(15)}, column ${formatInt(1)},\r\n\"You really didn't need it anyway\"), which requires you to get ${formatInt(800)} Antimatter Galaxies\r\nwithout buying 8th Antimatter Dimensions in your current Infinity.\r\n
\r\n
\r\nAfter the subtab is unlocked from the Achievement, you are met with another set of requirements to fully unlock V.\r\nYou must have completed ${formatInt(GameDatabase.celestials.v.mainUnlock.realities.requirement)} Realities and have\r\n${format(GameDatabase.celestials.v.mainUnlock.realityMachines.requirement)} unspent RM.\r\nAdditionally you need to reach ${format(GameDatabase.celestials.v.mainUnlock.eternities.requirement)} Eternities,\r\n${format(GameDatabase.celestials.v.mainUnlock.infinities.requirement)} Infinities,\r\n${format(GameDatabase.celestials.v.mainUnlock.dilatedTime.requirement)} Dilated Time, and\r\n${format(GameDatabase.celestials.v.mainUnlock.replicanti.requirement)} Replicanti, all in the same Reality.\r\n
\r\n
\r\nWhen you meet all of those requirements, you will be able to access V's Reality.\r\n${VUnlocks.vAchievementUnlock.isUnlocked\r\n ? `However, completing the Reality itself is only the beginning. V has six different requirements, each of which\r\n require you to make a certain amount of progress within V's Reality. Completing a requirement rewards you with a\r\n V-Achievement.\r\n V-Achievements are permanent and persist after exiting V's Reality, and do not all need to be done simultaneously.\r\n
\r\n
\r\n After completing the requirement, the V-Achievement threshold then increases and can be completed again\r\n if you can reach the new goal. You can complete each category of V-Achievement up to six times.\r\n Completed V-Achievements do two things:\r\n
\r\n - Upon reaching certain totals of V-Achievements, you automatically unlock upgrades on the V tab without needing\r\n to spend any resources.\r\n
\r\n - Each V-Achievement also gives you one Space Theorem.\r\n
\r\n
\r\n The goal reduction unlocked by having ${formatInt(2)} V-Achievements allows you to make some V-Achievement\r\n requirements easier to complete by spending Perk Points, down to a limit of whatever the easiest tier requires.\r\n The cost of reducing a goal does not increase as it is used, and will also reduce future tiers as well.\r\n
\r\n
\r\n Space Theorems allow you to purchase Time Studies which are normally forbidden, such as multiple paths in the\r\n Pace Split after the improved IP formula, or both Time Studies within a dark/light pair near the bottom.\r\n Like Time Theorems, they are freely given back every time you respec your studies.\r\n With enough Space Theorems you will eventually be able to purchase every single Time Study at once!\r\n
\r\n
\r\n Reaching ${formatInt(36)} V-Achievements (and therefore completing all of V's Achievements) unlocks the next\r\n Celestial.`\r\n : \"(unlock V's Reality to see further details)\"}\r\n`,\r\n isUnlocked: () => Achievement(151).isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"lategame\", \"endgame\", \"girlfriend\", \"challenges\", \"achievement\", \"space\", \"theorems\",\r\n \"study\", \"triad\", \"celestial\"],\r\n tab: \"celestials/v\"\r\n }, {\r\n name: \"Ra, Celestial of the Forgotten\",\r\n alias: \"Ra\",\r\n info: () => `\r\nRa is the fifth Celestial, unlocked by fully completing all of V's Achievements. They use their memories in order to\r\nbring back positive effects from previous Celestials in a stronger way. Over time, you will unlock the previous four\r\nCelestials within Ra, with each Celestial offering additional upgrades related to their original themes.\r\n
\r\n
\r\nEach previous Celestial within Ra gains levels by using memories, which are generated passively over time from\r\nMemory Chunks. Memory Chunks can only be gained by entering Ra's Reality, but inside of the Reality Chunks will\r\nbe generated passively based on certain resource totals. If you are storing real time, you will not gain any\r\nChunks inside of Ra's Reality, but Memories will still be generated normally. Having a total of\r\n${formatInt(Ra.remembrance.requiredLevels)} levels across all Celestials unlocks Remembrance,\r\nwhich allows you to choose a particular Celestial to gain more chunks while inside of Ra's Reality.\r\n
\r\n
\r\nMemories can be spent on three things - an increase to Memory Chunk gain, an increase to Memory gain, and leveling up\r\nthe Celestial. You start Ra with only Teresa unlocked and each successive Celestial is unlocked by reaching level\r\n${formatInt(8)} with the previous Celestial. Levels are capped at ${formatInt(25)}.\r\n
\r\n
\r\nTeresa unlocks the ability to charge your Infinity Upgrades, making them much stronger. They also\r\nimprove your Glyph effects once you reach certain thresholds in Glyph sacrifice value.\r\n
\r\n
\r\nAt level ${formatInt(2)}, Effarig unlocks\r\n${Ra.unlocks.effarigUnlock.canBeApplied\r\n ? \"a new mechanic called Glyph Alchemy and later on also makes Effarig Glyphs stronger while gradually removing \" +\r\n \"almost all random elements of Glyph generation. Glyph Alchemy also has its own How To Play entry.\"\r\n : \"(unlock Effarig within Ra to see unlock details)\"}\r\n
\r\n
\r\nThe Nameless Ones unlocks\r\n${Ra.unlocks.enslavedUnlock.canBeApplied\r\n ? \"additional mechanics related to charging the Black Holes, as well as making them significantly stronger.\"\r\n : \"(unlock The Nameless Ones within Ra to see unlock details)\"}\r\n
\r\n
\r\nV unlocks\r\n${Ra.unlocks.vUnlock.canBeApplied\r\n ? \"Triad Studies, which are new studies near the bottom of the tree which cost Space Theorems. Each Triad Study \" +\r\n \"requires you to also have the three nearby studies as well in order to purchase them. They also unlock a \" +\r\n \"smaller set of more difficult V-Achievements to complete for additional Space Theorems.\"\r\n : \"(unlock V within Ra to see unlock details)\"}\r\n
\r\n
\r\nRa will not directly unlock the next Celestial.`,\r\n isUnlocked: () => VUnlocks.raUnlock.isUnlocked,\r\n tags: [\"reality\", \"memories\", \"razenpok\", \"levels\", \"glyphs\", \"lategame\", \"endgame\",\r\n \"effarig\", \"teresa\", \"nameless\", \"v\", \"celestial\"],\r\n tab: \"celestials/ra\"\r\n }, {\r\n name: \"Glyph Alchemy Resources\",\r\n info: () => `\r\nGlyph Alchemy is a mechanic unlocked by reaching Effarig level ${formatInt(2)} in Ra. It unlocks the ability to\r\nuse up your Glyphs by refining them into Alchemy Resources associated with their type. You can refine Glyphs by\r\nsetting your Sacrifice Type to something other than \"Always Sacrifice\" in the Glyphs tab, and doing the normal\r\nprocedure for a sacrifice.\r\nEach Alchemy Resource has a unique effect, which you can view on the Alchemy tab.\r\n
\r\n
\r\nIn addition to all their other properties, Glyphs now have a refinement value which determines how much of\r\nits associated Alchemy Resource it is worth. This value is based on the cube of the Glyph's level, scaled\r\nso that level ${formatInt(10000)} Glyphs correspond to ${formatInt(10000)} Alchemy Resources. A single Glyph itself,\r\nhowever, only gives ${formatPercents(GlyphSacrificeHandler.glyphRefinementEfficiency)} of this value when refined.\r\nThese are values for ${formatPercents(1)} rarity Glyphs; Glyphs of lower rarity still have the same cap but give\r\nproportionally less resources. For example, a ${formatPercents(0.5)} rarity Glyph will give only half as much.\r\n
\r\n
\r\nAlchemy Resources cannot be gained indefinitely; there is a per-resource cap which is based on the highest refinement\r\nvalue of all the Glyphs of that type you have refined. For example, if the highest level Time Glyph you have refined\r\nis level ${formatInt(8000)} (refinement value: ${formatInt(GlyphSacrificeHandler.levelRefinementValue(8000))}), then no\r\nmatter how many Time Glyphs you refine, you can never have more than\r\n${formatInt(GlyphSacrificeHandler.levelRefinementValue(8000))} of the Time resource until you refine another Time Glyph\r\nwith a higher refinement value.\r\n`,\r\n isUnlocked: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied || PlayerProgress.mendingUnlocked(),\r\n // Oh god I'm so sorry this is so many words\r\n tags: [\"reality\", \"lategame\", \"endgame\", \"ra\", \"effarig\", \"alchemy\", \"power\", \"infinity\", \"time\", \"replication\",\r\n \"dilation\", \"cardinality\", \"eternity\", \"dimensionality\", \"inflation\", \"alternation\", \"synergism\", \"momentum\",\r\n \"decoherence\", \"force\", \"exponential\", \"uncountability\", \"boundless\", \"unpredictability\", \"multiversal\",\r\n \"reaction\"],\r\n tab: \"reality/alchemy\"\r\n }, {\r\n name: \"Glyph Alchemy Reactions\",\r\n info: () => `\r\nAlchemy Resources can be combined together in certain combinations in order to create new compound resources, which\r\nare unlocked at certain Effarig levels. Resources are combined once per Reality, unaffected by real time\r\namplification. Reactions have a higher yield and thus happen faster when your reagent amounts are higher. The cap for\r\ncompound resources is equal to the lowest cap amongst all of its reagents. In order for a reaction to occur, the\r\ncurrent amount of all reagents must be greater than the current amount of the produced resource.\r\n
\r\n
\r\nReaction speed is proportional to the amount of usable reagents for the reaction, but only reagent amounts above the\r\nproduct amount are eligible for being used. For example, if you have ${formatInt(10000)} of all reagents and\r\n${formatInt(7500)} of the product, only ${formatInt(2500)} of the reagents are used in calculating the reaction speed.\r\nIf you instead had ${formatInt(0)} of the product, all of the reagent is available for the reaction and it will\r\nproduce ${formatX(4)} faster. Lastly, if you had ${formatInt(10000)} of the product, then none of the reagent can be\r\nused and the reaction will not run at all.\r\n
\r\n
\r\nTo activate or deactivate a reaction, click the circle corresponding to the reaction's product. When the reaction can\r\nbe applied, moving lines will be shown from all reagents to the product. If a connection is a solid line, that means\r\nthat the reaction cannot proceed due to not having enough of that reagent to get more of the product due to its cap.\r\n`,\r\n isUnlocked: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"lategame\", \"endgame\", \"ra\", \"effarig\", \"alchemy\", \"power\", \"infinity\", \"time\", \"replication\",\r\n \"dilation\", \"cardinality\", \"eternity\", \"dimensionality\", \"inflation\", \"alternation\", \"synergism\", \"momentum\",\r\n \"decoherence\", \"force\", \"exponential\", \"uncountability\", \"boundless\", \"unpredictability\", \"multiversal\",\r\n \"reaction\"],\r\n tab: \"reality/alchemy\"\r\n }, {\r\n name: \"Imaginary Machines\",\r\n info: () => `\r\nOnce you are able to gain at least ${format(MachineHandler.baseRMCap)} Reality Machines in a single Reality, you\r\nunlock the ability to gain a new resource called Imaginary Machines. Reality Machines will also become hardcapped\r\nat ${format(MachineHandler.baseRMCap)}; you will be unable to gain any more past this limit.\r\n
\r\n
\r\nAdditionally you unlock the Imaginary Upgrades tab, which contains a set of upgrades similar to the Reality Upgrades -\r\neach upgrade has a condition you must fulfill to unlock it and an Imaginary Machine cost to actually purchase it.\r\nThe first two rows of upgrades can be repeatedly bought, while the other three are one-time upgrades.\r\n
\r\n
\r\nYour iM amount is affected by two things:\r\n
\r\niM Cap - There is a maximum amount of iM you can ever have, which is based on the highest RM amount you would\r\nhave been able to get if there were no RM cap. This is updated on a continual basis and thus will immediately increase\r\nif you ever surpass your previous highest uncapped RM amount.\r\n
\r\nCurrent iM - Over time your current iM will passively rise towards your iM cap, in a way that slows down\r\nexponentially as you approach the cap. By default iM slows down at a rate where the amount you are missingP\r\n(ie. your cap minus your current amount) is cut in half every minute. This growth rate is unaffected by any\r\nmodifiers to game speed.\r\n
\r\n
\r\nImaginary Machine upgrades will unlock the final two Celestials.\r\n`,\r\n isUnlocked: () => MachineHandler.isIMUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"imaginary\", \"machines\", \"reality\", \"lategame\", \"endgame\"],\r\n tab: \"reality/imag_upgrades\"\r\n }, {\r\n name: \"Lai'tela, Celestial of Dimensions\",\r\n alias: \"Lai'tela\",\r\n info: () => `\r\nLai'tela is the sixth Celestial, unlocked by purchasing the appropriate Imaginary Upgrade for\r\n${format(ImaginaryUpgrade(15).cost)} iM.\r\n
\r\n
\r\nLai'tela gives a new currency called Dark Matter, which provides a multiplier to Continuum's effect\r\nbased on the highest amount of Dark Matter you have ever had. Dark Matter is produced by\r\nDark Matter Dimensions, in a similar cascading way to all other types of dimensions in the game. Unlike other\r\ndimensions, there are only four Dark Matter Dimensions rather than eight. You start with the first one unlocked\r\nimmediately and the higher ones are unlocked via Imaginary Upgrades. When unlocking dimensions, you are given\r\n${formatInt(1)} of the dimension and cannot gain more without having it produced from the next tier up.\r\n
\r\n
\r\nEach Dark Matter Dimension, after a certain interval of time, generates two things: Dark Matter or the next lower\r\nDark Matter Dimension and another resource called Dark Energy. Dark Matter and Dark Matter Dimension production\r\nper interval is equal to the product of your Dark Matter multiplier and the number of dimensions you have, while\r\nDark Energy production is independent of your dimension amount. Dark Energy is used to produce Singularities, which\r\nhave their own How To Play entry.\r\n
\r\n
\r\nDark Matter Dimensions can have their intervals upgraded down to a minimum of ${formatInt(10)}ms, at which point\r\nyou cannot upgrade the interval any further. You can choose to ascend Dark Matter Dimensions which reach\r\nthat point, which initially multiplies Dark Matter gain by ${formatInt(POWER_DM_PER_ASCENSION)} and Dark Energy by\r\n${formatInt(POWER_DE_PER_ASCENSION)}. The interval gets multiplied by ${formatInt(1200)}, but can be upgraded once\r\nagain. Reaching ${formatInt(10)}ms again allows you to ascend again if you choose to.\r\n
\r\n
\r\nAn Imaginary Upgrade allows you to unlock a prestige called Annihilation. Annihilation resets your Dark Matter\r\nand Dark Matter Dimensions, but adds to a permanent multiplier to Dark Matter that applies to all Dark Matter\r\nDimensions. You can Annihilate multiple times; the additions to the multiplier stack additively, and there is\r\nno need to Annihilate for a greater addition each time. You must have at least\r\n${format(Laitela.annihilationDMRequirement)} Dark Matter in order to Annihilate.\r\n
\r\n
\r\nLai'tela has a Reality which gives a multiplier to Dark Matter Dimensions' Dark Matter power based on how well you\r\ndo in the Reality. Whenever you complete the Reality in under ${formatInt(30)} seconds, your highest available\r\nDimension will be permanently disabled during further attempts of the Reality. Disabling all of your dimensions by\r\ncompleting the Reality in under ${formatInt(30)} seconds eight times will also give you a ${formatX(8)} multiplier\r\nto Dark Energy gain.\r\n
\r\n
\r\nLai'tela will not directly unlock the next Celestial.\r\n`,\r\n isUnlocked: () => Laitela.isUnlocked,\r\n tags: [\"omsi\", \"reality\", \"dark\", \"matter\", \"dimensions\", \"lategame\", \"endgame\", \"ascend\", \"celestial\"],\r\n tab: \"celestials/laitela\"\r\n }, {\r\n name: \"Continuum\",\r\n info: () => `\r\nWhen you unlock Lai'tela, your Antimatter Dimensions and Tickspeed Upgrades switch to a new mode of production\r\ncalled Continuum, which gives the same effect as previously but allows for buying partial Dimension or\r\nTickspeed Upgrades. These fractional purchases are given for free without spending your antimatter and will provide\r\nan appropriate portion of their multiplier.\r\n
\r\n
\r\nThe purchase buttons for Antimatter Dimensions and Tickspeed Upgrades become modified to display the number of upgrades\r\nyou would be able to purchase if Continuum was inactive, and the purchase count is scaled smoothly with antimatter.\r\nFor example, having ${format(2e7)} antimatter will give you a Continuum value of ${format(5.3, 0, 1)} for tickspeed\r\n(initial cost of ${format(1e3)} and increase of ${formatX(10)}) since you can purchase it ${formatInt(5)} times and\r\nare roughly ${formatPercents(0.3)} of the way to the next. Tickspeed Continuum in this case will then\r\ngive a production boost equal to (upgrade multiplier)${format(5.3, 0, 1)}.\r\n
\r\n
\r\nSome upgrades will multiply Continuum value directly, which gives a production boost without affecting the cost\r\nscaling. However, these upgrades will not function if Continuum is disabled on the Autobuyers page, which may result\r\nin a loss of production if disabled. Continuum makes your autobuyers for Antimatter Dimensions and Tickspeed obsolete,\r\nso all the related autobuyer settings for these autobuyers are now hidden on that tab as long as Continuum is active.\r\n`,\r\n // Apparently continuumUnlocked is really important in a lot of places and if we keep it unlocked\r\n // Things break, so we check for the iMU instead.\r\n isUnlocked: () => ImaginaryUpgrade(15).isBought || PlayerProgress.mendingUnlocked(),\r\n tags: [\"continuum\", \"purchase\", \"reality\", \"lategame\", \"endgame\"],\r\n tab: \"\"\r\n }, {\r\n name: \"Singularities\",\r\n info: () => `\r\nSingularities are a new resource which you can obtain using features within Lai'tela.\r\n
\r\n
\r\nIn order to obtain Singularities, you need to reach ${format(200)} Dark Energy. When you do, you get the option to\r\ncondense all your Dark Energy into a Singularity, resetting it back to zero. Any extra Dark Energy above this amount\r\ndo not carry over, and is thus wasted. Note that only Dark Energy is reset, the status of your Dark Matter and its\r\ndimensions stays the same when condensing Singularities.\r\n
\r\n
\r\nOnce you reach ${formatInt(10)} Singularities, you can freely increase or decrease the Dark Energy requirement to\r\ncondense Singularities by a factor of ${formatInt(10)} (with a minimum of ${format(200)}). This increases or decreases\r\nthe number of Singularities gained from resetting at the cap by more than a factor of ${formatInt(10)}, making\r\nhigher caps worth more if you are willing to wait.\r\n
\r\n
\r\nThe purpose of Singularities is to unlock Singularity Milestones, which act similarly to Eternity Milestones. Unlocking\r\nthese milestones simply requires you to reach the total number of Singularities specified; Singularities are not spent.\r\nThere are three types of milestones - one-time milestones, milestones repeatable a limited number of times, and\r\nmilestones which can be repeated indefinitely.\r\n
\r\n
\r\nIndependently of the milestone type, milestones also have an icon indicating what kind of upgrade they generally give:\r\n
\r\n These milestones help mechanics specific to Lai'tela\r\n
\r\n These milestones let a resource in Lai'tela affect the rest of the game\r\n
\r\n These milestones improve Lai'tela based on something outside of Lai'tela\r\n`,\r\n isUnlocked: () => Laitela.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"lategame\", \"endgame\", \"laitela\", \"dark\"],\r\n tab: \"\"\r\n }, {\r\n name: \"Pelle, Celestial of Antimatter\",\r\n alias: \"Pelle\",\r\n info: () => `\r\nWhen you purchase the last Imaginary Upgrade and unlock Pelle, you unlock their tab, where you can find a button to\r\n\"Doom your Reality\". In order to Doom your Reality, you must have completed all ${formatInt(17)} rows of Achievements\r\navailable to you at this point, and attained ${formatInt(25000)} of each Alchemy Resource.\r\n
\r\n
\r\n${Pelle.isDoomed\r\n ? `Dooming your Reality will start a new Doomed Reality, resetting almost the entire game up to\r\n Reality, not giving you any rewards from your progress in your current Reality.\r\n
\r\n
\r\n When you enter the Doomed Reality, you keep all values under the General and Reality headers in the Statistics\r\n tab and all of your best Challenge times. Inside Doomed Realities, multiple upgrades, Time Studies, Challenge and\r\n Celestial rewards, Perks, and other game mechanics are disabled or grant no reward.\r\n You can view the \"Show effects in Doomed Reality\" in Pelle tab for further information.\r\n
\r\n
\r\n Remnants are a new currency gained on Armageddon resets. Remnant gain is based on your best ever antimatter,\r\n Infinity Points, and Eternity Points across all Doomed Realities. Remnants produce Reality Shards which can be\r\n spent on Pelle Upgrades.\r\n
\r\n
\r\n Pelle Upgrades can be divided into two categories. The five upgrades in the first row can be repeatedly bought,\r\n but eventually reach a cap. They grant boosts to different aspects of the game, making progression within Doomed\r\n Realities easier.\r\n
\r\n
\r\n The other upgrades in the bottom rows offer automation and QoL (quality of life) improvements. Everything unlocked\r\n from these upgrades cannot be unlocked by their usual methods in the game; for example, none of the Normal\r\n Challenges will unlock autobuyers if completed since they are all locked behind Pelle Upgrades instead.\r\n You can toggle a button above upgrade to hide bought upgrades or click the\r\n -icon to collapse and hide the entire panel.\r\n
\r\n
\r\n Hotkey: Z will try to perform an Armageddon reset.`\r\n : \"You must Doom your Reality to read the rest of this entry.\"\r\n}\r\n`,\r\n isUnlocked: () => Pelle.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"antimatter\", \"lategame\", \"endgame\", \"final\", \"hevipelle\", \"celestial\", \"doom\"],\r\n tab: \"celestials/pelle\"\r\n }, {\r\n name: \"Pelle Strikes\",\r\n info: () => `\r\nPelle Strikes are encountered on different events in the Doomed Reality. You have encountered the first Pelle Strike by\r\nreaching Infinity for the first time within a Doomed Reality. More Strikes eventually occur by further progression.\r\nEach Pelle Strike adds a nerf to a specific aspect of the game, which can be seen by clicking on the Strike name.\r\nEach Pelle Strike also unlocks a Rift bar.\r\n
\r\n
\r\nRift bars can be filled by clicking them to toggle between \"Idle\" and \"Filling\", although only two Rifts can be\r\n\"Filling\" at any given time. When active, Rifts consume ${formatInt(3)}% of a Rift-specific resource per second. Each\r\nRift offers a Rift-specific effect which are based on the total amount filled.\r\n${PelleStrikes.eternity.hasStrike\r\n ? `An exception for this is Decay/Collapse/Disarray, whose effect gets capped once you have drained a total of\r\n ${formatPostBreak(DC.E2000)} Replicanti.`\r\n : \"\"}\r\nIn addition, each Rift offers three milestone rewards for filling them up to a certain percentage.\r\n`,\r\n isUnlocked: () => PelleStrikes.infinity.hasStrike || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"antimatter\", \"lategame\", \"endgame\", \"final\", \"pelle\", \"strike\", \"rift\", \"celestial\"],\r\n tab: \"celestials/pelle\"\r\n }, {\r\n name: \"The Galaxy Generator\",\r\n info: () => `\r\nWhen you reach ${formatInt(100)}% Recursion/Dispersion/Destruction, you unlock the Galaxy Generator, which can\r\npassively generate Galaxies. Generated Galaxies are like Replicanti Galaxies and Tachyon Galaxies in that they affect\r\ntickspeed as if they were Antimatter Galaxies, but they do not increase the cost of your next Antimatter Galaxy. You\r\nalso unlock five new upgrades. The first upgrade increases the base amount of Galaxies generated. The other four\r\nupgrades then give a multiplier to this base amount. The first two upgrades can be bought by spending antimatter and\r\nGenerated Galaxies. Replicanti or Tachyon Galaxies cannot be spent for purchasing those upgrades.\r\n
\r\n
\r\nThe Galaxy Generator has a maximum number of Galaxies it can generate, which can only be increased by draining\r\nRifts once the current cap has been reached.`,\r\n isUnlocked: () => Pelle.hasGalaxyGenerator || PlayerProgress.mendingUnlocked(),\r\n tags: [\"reality\", \"antimatter\", \"lategame\", \"endgame\", \"final\", \"pelle\", \"galaxy\",\r\n \"galaxies\", \"generator\", \"celestial\"],\r\n tab: \"celestials/pelle\"\r\n },\r\n {\r\n name: \"Mending\",\r\n info: () => `\r\nMending the 4th prestige layer, and the first new prestige layer in this mod. You can first Mend the Multiverse once\r\nyou reach ${formatPostBreak(Decimal.pow10(9e15))} antimatter while in a Doomed Reality.\r\n
\r\nMending the Multiverse resets everything up to this point, except for achievements and secret achievements. However,\r\nyou will gain MvR on Mend.\r\n
\r\nHotkey: N will try to perform a Mend.\r\n`,\r\n isUnlocked: () => PlayerProgress.mendingUnlocked(),\r\n tags: [\"mending\", \"new content\"],\r\n tab: \"\"\r\n },\r\n {\r\n name: \"Mending Milestones\",\r\n info: () => `\r\nPlaceholder\r\n`,\r\n isUnlocked: () => PlayerProgress.mendingUnlocked(),\r\n tags: [\"mending\", \"new content\"],\r\n tab: \"\"\r\n },\r\n {\r\n name: \"Mending Upgrades\",\r\n info: () => `\r\nPlaceholder\r\n`,\r\n isUnlocked: () => PlayerProgress.mendingUnlocked(),\r\n tags: [\"mending\", \"new content\"],\r\n tab: \"\"\r\n },\r\n {\r\n name: \"Warp Reality\",\r\n info: () => `\r\nPlaceholder\r\n`,\r\n isUnlocked: () => player.reality.warped,\r\n tags: [\"mending\", \"new content\"],\r\n tab: \"\"\r\n },{\r\n name: \"Hostilities\",\r\n info: () => `\r\nPlaceholder\r\n`,\r\n isUnlocked: () => Ra.pets.pelle.level >= 75,\r\n tags: [\"mending\", \"new content\"],\r\n tab: \"\"\r\n },\r\n ]\r\n};\r\n\r\n(function() {\r\n for (let i = 0; i < h2p.tabs.length; i++) {\r\n const tab = h2p.tabs[i];\r\n tab.id = i;\r\n if (tab.alias === undefined) tab.alias = tab.name;\r\n\r\n tab.searchTermsRelevance = {};\r\n }\r\n\r\n const searchIndex = {};\r\n\r\n const addTerm = (term, tab) => {\r\n let entry = searchIndex[term];\r\n if (entry === undefined) {\r\n entry = [];\r\n searchIndex[term] = entry;\r\n }\r\n if (entry.includes(tab)) return;\r\n entry.push(tab);\r\n };\r\n\r\n const addWord = (word, tab) => {\r\n const lowerCase = word.toLowerCase();\r\n for (let i = 0; i < lowerCase.length; i++) {\r\n const term = lowerCase.slice(0, i + 1);\r\n addTerm(term, tab);\r\n if (tab.searchTermsRelevance[term] === undefined) {\r\n tab.searchTermsRelevance[term] = ((i + 1) / lowerCase.length) ** 0.65;\r\n } else {\r\n tab.searchTermsRelevance[term] = Math.max(tab.searchTermsRelevance[term], ((i + 1) / lowerCase.length) ** 0.65);\r\n }\r\n }\r\n };\r\n\r\n const addPhrase = (phrase, tab) => {\r\n addWord(phrase, tab);\r\n for (const part of phrase.split(\" \")) {\r\n addWord(part, tab);\r\n }\r\n };\r\n\r\n for (const tab of h2p.tabs) {\r\n addPhrase(tab.name, tab);\r\n }\r\n for (const tab of h2p.tabs) {\r\n for (const tag of tab.tags) {\r\n addPhrase(tag, tab);\r\n }\r\n }\r\n for (const tab of h2p.tabs) {\r\n addPhrase(tab.alias, tab);\r\n }\r\n\r\n const map2dToObject = function(arr, keyFun, valueFun) {\r\n const out = {};\r\n for (let idx1 = 0; idx1 < arr.length; idx1++) {\r\n for (let idx2 = 0; idx2 < arr[idx1].length; idx2++) {\r\n out[keyFun(arr[idx1][idx2], idx1, idx2)] = valueFun(arr[idx1][idx2], idx1, idx2);\r\n }\r\n }\r\n return out;\r\n };\r\n\r\n // Very suboptimal code coming up. If anybody has a better solution, PLEASE, implement it.\r\n const keyboardify = keybrd => map2dToObject(keybrd.split(\",\").map(str => str.split(\"\")),\r\n key => key, (_key, x, y) => ({ x, y }));\r\n\r\n const qwerty = keyboardify(`1234567890,qwertyuiop,asdfghjkl,zxcvbnm`);\r\n const qwertz = keyboardify(`1234567890,qwertzuiop,asdfghjkl,yxcvbnm`);\r\n const azerty = keyboardify(`1234567890,azertyuiop,qsdfghjklm,wxcvbn`);\r\n const dvorak = keyboardify(`1234567890,'<>pyfgcrl,aoeuidhtns,;qjkxbmwvz`);\r\n const colemak = keyboardify(`1234567890,qwfpgjluy,arstdhneio,zxcvbkm`);\r\n const workman = keyboardify(`1234567890,qdrwbjfup,ashtgyneoi,zxmcvkl`);\r\n const qwprf = keyboardify(`1234567890,qwprfyukl,asdtghnioe,zxcvbjm`);\r\n\r\n const keyboards = [qwerty, qwertz, azerty, dvorak, colemak, workman, qwprf];\r\n\r\n const keyboardDist = function(a, b, keyboard) {\r\n const aPos = keyboard[a], bPos = keyboard[b];\r\n if (!aPos || !bPos) return 100;\r\n return Math.max(Math.abs(aPos.x - bPos.x), Math.abs(aPos.y - bPos.y));\r\n };\r\n\r\n // I copied this code based on OSA distance off wikipedia, with a few added changes.\r\n // The cost for \"substitution\" (third item of the first Math.min) is replaced from a static value\r\n // to a function which roughly estimates how likely the user is to mispress the key based on its\r\n // minimum distance from several common keyboard layouts.\r\n // I have no idea how the actual \"distance\" calculation works but as long as it does don't touch it.\r\n const howBadlyTypoedWithKeyboard = function(a, b, keyboard) {\r\n // If they're the same, skip all calculations\r\n if (a === b) return 0;\r\n const aLen = a.length;\r\n const bLen = b.length;\r\n // If they're way too different, don't bother\r\n if (Math.abs(aLen - bLen) > 3) return 100;\r\n // 2d Array with dimensions aLen + 1 x bLen + 1\r\n const d = new Array(aLen + 1).fill(0).map(() => new Array(bLen + 1).fill(0));\r\n\r\n for (let i = 0; i <= aLen; i++) {\r\n d[i][0] = i;\r\n }\r\n for (let i = 0; i <= bLen; i++) {\r\n d[0][i] = i;\r\n }\r\n\r\n for (let i = 1; i <= aLen; i++) {\r\n for (let j = 1; j <= bLen; j++) {\r\n const distance = keyboardDist(a[i - 1], b[j - 1], keyboard);\r\n const cost = distance === 0 ? 0 : 0.3 + distance * distance * 0.25;\r\n d[i][j] = Math.min(\r\n d[i - 1][j] + 0.55,\r\n d[i][j - 1] + 0.7,\r\n d[i - 1][j - 1] + cost\r\n );\r\n }\r\n }\r\n return d[aLen][bLen];\r\n };\r\n\r\n const howBadlyTypoed = function(a, b) {\r\n // Arbitrarily large number\r\n let minTypoed = 1e10;\r\n for (const keyboard of keyboards) {\r\n minTypoed = Math.min(minTypoed, howBadlyTypoedWithKeyboard(a, b, keyboard));\r\n }\r\n return minTypoed;\r\n };\r\n\r\n const specialChars = [\"'\", \"\\\"\", \",\", \"-\", \".\", \"_\"];\r\n\r\n const replaceSpecialChars = function(str) {\r\n let result = str;\r\n for (const i of specialChars) {\r\n result = result.replaceAll(i, \"\");\r\n }\r\n return result;\r\n };\r\n\r\n // There are a LOT of magic numbers in this code, mostly from arbitrary choices for \"What number is large enough to\r\n // act as a placeholder for 'basically not found'?\"\r\n // This will need some cleanup if possible.\r\n h2p.search = query => {\r\n const truncatedQuery = replaceSpecialChars(query);\r\n if (truncatedQuery === \"\") return h2p.tabs.map(x => ({ tab: x, relevance: 1.5 }));\r\n const searchTerms = truncatedQuery.toLowerCase().split(\" \").filter(str => str !== \"\");\r\n\r\n // A higher \"Relevance\" value actually means it's further away from the search, important to keep in mind\r\n const relevances = Array.repeat(1e4, h2p.tabs.length);\r\n for (const searchWord of searchTerms) {\r\n const minimumRequirement = Math.min(searchWord.length - 0.9, 3) * 0.5;\r\n for (const searchIndexStr in searchIndex) {\r\n const typoThreshold = howBadlyTypoed(replaceSpecialChars(searchIndexStr), searchWord);\r\n if (typoThreshold < minimumRequirement) {\r\n for (const tab of searchIndex[searchIndexStr]) {\r\n const maxRelevance = tab.searchTermsRelevance[searchIndexStr];\r\n const decrease = Math.max(maxRelevance * 1.6 - 0.9, 0);\r\n relevances[tab.id] = Math.min(relevances[tab.id], Math.max(typoThreshold, 1 - maxRelevance) - decrease);\r\n }\r\n }\r\n }\r\n }\r\n const results = h2p.tabs.filter(x => relevances[x.id] < 0.9)\r\n .map(x => ({ tab: x, relevance: relevances[x.id] }));\r\n // Provide both the relevance and the tab itself\r\n\r\n // Sort by id first, then push more relevant results to top.\r\n results.sort((a, b) => a.tab.id - b.tab.id).sort((a, b) => a.relevance - b.relevance);\r\n // Provide both the relevance and the tab itself\r\n return results;\r\n };\r\n}());\r\n","import { DC } from \"../../constants\";\r\n\r\nfunction rebuyable(config) {\r\n const effectFunction = config.effect || (x => x);\r\n const { id, maxUpgrades, description, isDisabled, noLabel, onPurchased } = config;\r\n return {\r\n rebuyable: true,\r\n id,\r\n cost: () => config.initialCost * Math.pow(config.costIncrease, player.infinityRebuyables[config.id]),\r\n maxUpgrades,\r\n description,\r\n effect: () => effectFunction(player.infinityRebuyables[config.id]),\r\n isDisabled,\r\n // There isn't enough room in the button to fit the EC reduction and \"Next:\" at the same time while still\r\n // presenting all the information in an understandable way, so we only show it if the upgrade is maxed\r\n formatEffect: config.formatEffect ||\r\n (value => {\r\n const afterECText = config.afterEC ? config.afterEC() : \"\";\r\n return value === config.maxUpgrades\r\n ? `Currently: ${formatX(10 - value)} ${afterECText}`\r\n : `Currently: ${formatX(10 - value)} | Next: ${formatX(10 - value - 1)}`;\r\n }),\r\n formatCost: value => format(value, 2, 0),\r\n noLabel,\r\n onPurchased\r\n };\r\n}\r\n\r\nexport const breakInfinityUpgrades = {\r\n totalAMMult: {\r\n id: \"totalMult\",\r\n cost: 1e4,\r\n description: \"Antimatter Dimensions gain a multiplier based on total antimatter produced\",\r\n effect: () => Math.pow(player.records.totalAntimatter.exponent + 1, 0.5),\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description: () =>\r\n `Antimatter Dimensions gain a power effect based on total antimatter and Teresa level`,\r\n effect: () => 1 +\r\n Math.log(1+Math.log10(player.records.totalAntimatter.exponent)) *\r\n Math.pow(Ra.pets.teresa.level, 0.2) / 150,\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n currentAMMult: {\r\n id: \"currentMult\",\r\n cost: 5e4,\r\n description: \"Antimatter Dimensions gain a multiplier based on current antimatter\",\r\n effect: () => Math.pow(Currency.antimatter.exponent + 1, 0.5),\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description: () =>\r\n `Antimatter Dimensions gain a power effect based on current antimatter and Teresa level`,\r\n effect: () => 1 +\r\n Math.log(Math.log10(Currency.antimatter.exponent)) *\r\n Math.pow(Ra.pets.teresa.level, 0.2) / 150,\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n galaxyBoost: {\r\n id: \"postGalaxy\",\r\n cost: 5e11,\r\n description: () => `All Galaxies are ${formatPercents(0.5)} stronger`,\r\n effect: 1.5,\r\n charged: {\r\n description: () => `All Galaxies are ${formatPercents(0.66667, 2)} stronger`,\r\n effect: 1.66667\r\n }\r\n },\r\n infinitiedMult: {\r\n id: \"infinitiedMult\",\r\n cost: 1e5,\r\n description: \"Antimatter Dimensions gain a multiplier based on Infinities\",\r\n effect: () => 1 + Currency.infinitiesTotal.value.pLog10() * 10,\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description: \"Raise TS31's exponent based on Teresa Level and Infinities\",\r\n effect: () => Math.max(1 + (Currency.infinitiesTotal.value.pLog10() / 10000) * Math.pow(Ra.pets.teresa.level, 0.2) / 150, 1),\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n achievementMult: {\r\n id: \"achievementMult\",\r\n cost: 1e6,\r\n description: \"Additional multiplier to Antimatter Dimensions based on Achievements completed\",\r\n effect: () => Math.max(Math.pow((Achievements.effectiveCount - 30), 3) / 40, 1),\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description: \"Raise Achievement Multiplier based on Teresa and V Level\",\r\n effect: () => Math.max(1 + Math.pow(Ra.pets.teresa.level + Ra.pets.v.level, 0.25) / 7.5, 1),\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n slowestChallengeMult: {\r\n id: \"challengeMult\",\r\n cost: 1e7,\r\n description: \"Antimatter Dimensions gain a multiplier based on slowest challenge run\",\r\n effect: () => Decimal.clampMin(Time.worstChallenge.totalMinutes.times(0.02), 1),\r\n formatEffect: value => formatX(value, 2, 2),\r\n hasCap: true,\r\n cap: DC.D3E4,\r\n charged: {\r\n description: \"Raise IC1 Reward based on Teresa Level\",\r\n effect: () => Ra.pets.teresa.level * 1e9,\r\n formatEffect: value => formatPow(value)\r\n }\r\n },\r\n infinitiedGen: {\r\n id: \"infinitiedGeneration\",\r\n cost: 2e7,\r\n description: \"Passively generate Infinities based on your fastest Infinity\",\r\n effect: () => player.records.bestInfinity.time,\r\n formatEffect: value => {\r\n if (value === Number.MAX_VALUE && !Pelle.isDoomed) return \"No Infinity generation\";\r\n let infinities = DC.D1;\r\n infinities = infinities.timesEffectsOf(\r\n RealityUpgrade(5),\r\n RealityUpgrade(7),\r\n Ra.unlocks.continuousTTBoost.effects.infinity\r\n );\r\n infinities = infinities.times(getAdjustedGlyphEffect(\"infinityinfmult\"));\r\n const timeStr = Time.bestInfinity.totalMilliseconds.lte(50)\r\n ? `${TimeSpan.fromMilliseconds(100).toStringShort()} (capped)`\r\n : `${Time.bestInfinity.times(2).toStringShort()}`;\r\n return `${quantify(\"Infinity\", infinities)} every ${timeStr}`;\r\n },\r\n charged: {\r\n description: \"Remove the Reality hardcap from The Knowing Existence and raise Uncountability based on Teresa Level\",\r\n effect: () => Math.max(Math.pow(Ra.pets.teresa.level, 0.5), 1),\r\n formatEffect: value => formatPow(value, 2, 2)\r\n }\r\n },\r\n autobuyMaxDimboosts: {\r\n id: \"autobuyMaxDimboosts\",\r\n cost: 5e9,\r\n description: \"Unlock the buy max Dimension Boost Autobuyer mode\",\r\n charged: {\r\n description: \"Multiply free Dimension Boost amount based on Teresa Level\",\r\n effect: () => Math.pow(Ra.pets.teresa.level, 0.5),\r\n formatEffect: value => formatX(value, 2, 2)\r\n }\r\n },\r\n autobuyerSpeed: {\r\n id: \"autoBuyerUpgrade\",\r\n cost: 1e15,\r\n description: \"Autobuyers unlocked or improved by Normal Challenges work twice as fast\",\r\n charged: {\r\n description: \"Increase Continuum Purchases based on Teresa and Lai'tela Level\",\r\n effect: () => Math.max((Ra.pets.teresa.level + Ra.pets.laitela.level) / 125, 1),\r\n formatEffect: value => `+${formatPercents(value, 2, 2)}`\r\n }\r\n },\r\n tickspeedCostMult: rebuyable({\r\n id: 0,\r\n initialCost: 1e6,\r\n costIncrease: 5,\r\n maxUpgrades: 8,\r\n description: \"Reduce post-infinity Tickspeed Upgrade cost multiplier scaling\",\r\n afterEC: () =>{\r\n if (MendingUpgrade(8).isBought) return `After Mending Upgrade 8: ${formatX(1.2, 2, 2)}`\r\n if (EternityChallenge(11).completions > 0) return `After EC11: ${formatX(2 - (0.07 * EternityChallenge(11).completions), 2, 2)}`\r\n return \"\"\r\n },\r\n noLabel: true,\r\n onPurchased: () => GameCache.tickSpeedMultDecrease.invalidate()\r\n }),\r\n dimCostMult: rebuyable({\r\n id: 1,\r\n initialCost: 1e7,\r\n costIncrease: 5e3,\r\n maxUpgrades: 7,\r\n description: \"Reduce post-infinity Antimatter Dimension cost multiplier scaling\",\r\n afterEC: () =>{\r\n if (MendingUpgrade(8).isBought) return `After Mending Upgrade 8: ${formatX(1.5, 2, 2)}`\r\n if (EternityChallenge(6).completions > 0) return `After EC6: ${formatX(3 - (0.2 * EternityChallenge(6).completions), 2, 2)}`\r\n return \"\"\r\n },\r\n noLabel: true,\r\n onPurchased: () => GameCache.dimensionMultDecrease.invalidate()\r\n }),\r\n ipGen: rebuyable({\r\n id: 2,\r\n initialCost: 1e7,\r\n costIncrease: 10,\r\n maxUpgrades: 10,\r\n effect: value => Player.bestRunIPPM.times(value / 20),\r\n description: () => {\r\n let generation = `Generate ${formatInt(5 * player.infinityRebuyables[2])}%`;\r\n if (!BreakInfinityUpgrade.ipGen.isCapped) {\r\n generation += ` ➜ ${formatInt(5 * (1 + player.infinityRebuyables[2]))}%`;\r\n }\r\n return `${generation} of your best IP/min from your last 10 Infinities`;\r\n },\r\n isDisabled: effect => effect.eq(0),\r\n formatEffect: value => `${format(value, 2, 1)} IP/min`,\r\n noLabel: false\r\n })\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { corruptionPenalties } from \"../mending/corruption\";\r\n\r\nfunction dimInfinityMult() {\r\n return Currency.infinitiesTotal.value.times(0.2).plus(1);\r\n}\r\nfunction chargedDimInfinityMult() {\r\n return 1 + Math.log10(Math.max(1, Currency.infinitiesTotal.value.pLog10())) * Math.sqrt(Ra.pets.teresa.level) / 150;\r\n}\r\n\r\nexport const infinityUpgrades = {\r\n totalTimeMult: {\r\n id: \"timeMult\",\r\n cost: 1,\r\n description: \"Antimatter Dimensions gain a multiplier based on time played\",\r\n effect: () => Decimal.pow(Time.totalTimePlayed.totalMinutes.div(2), 0.15),\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description: \"Antimatter Dimensions gain a power effect based on time played and Teresa level\",\r\n effect: () => 1 +\r\n Math.log10(Decimal.log10(Time.totalTimePlayed.totalMilliseconds)) *\r\n Math.pow(Ra.pets.teresa.level, 0.5) / 150,\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n dim18mult: {\r\n id: \"18Mult\",\r\n cost: 1,\r\n checkRequirement: () => InfinityUpgrade.totalTimeMult.isBought,\r\n description: \"1st and 8th Antimatter Dimensions gain a multiplier based on Infinities\",\r\n effect: () => dimInfinityMult(),\r\n formatEffect: value => formatX(value, 1, 1),\r\n charged: {\r\n description: \"1st and 8th Antimatter Dimensions gain a power effect based on Infinities and Teresa level\",\r\n effect: () => chargedDimInfinityMult(),\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n dim27mult: {\r\n id: \"27Mult\",\r\n cost: 1,\r\n checkRequirement: () => InfinityUpgrade.buy10Mult.isBought,\r\n description: \"2nd and 7th Antimatter Dimensions gain a multiplier based on Infinities\",\r\n effect: () => dimInfinityMult(),\r\n formatEffect: value => formatX(value, 1, 1),\r\n charged: {\r\n description: \"2nd and 7th Antimatter Dimensions gain a power effect based on Infinities and Teresa level\",\r\n effect: () => chargedDimInfinityMult(),\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n dim36mult: {\r\n id: \"36Mult\",\r\n cost: 1,\r\n checkRequirement: () => InfinityUpgrade.dim18mult.isBought,\r\n description: \"3rd and 6th Antimatter Dimensions gain a multiplier based on Infinities\",\r\n effect: () => dimInfinityMult(),\r\n formatEffect: value => formatX(value, 1, 1),\r\n charged: {\r\n description: \"3rd and 6th Antimatter Dimensions gain a power effect based on Infinities and Teresa level\",\r\n effect: () => chargedDimInfinityMult(),\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n dim45mult: {\r\n id: \"45Mult\",\r\n cost: 1,\r\n checkRequirement: () => InfinityUpgrade.dim27mult.isBought,\r\n description: \"4th and 5th Antimatter Dimensions gain a multiplier based on Infinities\",\r\n effect: () => dimInfinityMult(),\r\n formatEffect: value => formatX(value, 1, 1),\r\n charged: {\r\n description: \"4th and 5th Antimatter Dimensions gain a power effect based on Infinities and Teresa level\",\r\n effect: () => chargedDimInfinityMult(),\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n resetBoost: {\r\n id: \"resetBoost\",\r\n cost: 1,\r\n checkRequirement: () => InfinityUpgrade.dim36mult.isBought,\r\n description: () =>\r\n `Decrease the number of Dimensions needed for Dimension Boosts and Antimatter Galaxies by ${formatInt(9)}`,\r\n effect: 9,\r\n charged: {\r\n description: () => \"Decrease Dimension Boost requirement based on Teresa level\",\r\n effect: () => 1 / (1 + Math.sqrt(Ra.pets.teresa.level) / 10),\r\n formatEffect: value => `${formatX(value, 4, 4)}`\r\n }\r\n },\r\n buy10Mult: {\r\n id: \"dimMult\",\r\n cost: 1,\r\n description: () => `Increase the multiplier for buying ${formatInt(10)} Antimatter Dimensions`,\r\n effect: () => 1.1,\r\n formatEffect: () => `${formatX(2, 0, 1)} ➜ ${formatX(2.2, 0, 1)}`,\r\n charged: {\r\n description: () => `The multiplier for buying ${formatInt(10)} Antimatter Dimensions gains ` +\r\n \"a power effect based on Teresa level\",\r\n effect: () => 1 + Ra.pets.teresa.level / 200,\r\n formatEffect: value => formatPow(value, 3, 3)\r\n }\r\n },\r\n galaxyBoost: {\r\n id: \"galaxyBoost\",\r\n cost: 2,\r\n checkRequirement: () => InfinityUpgrade.dim45mult.isBought,\r\n description: \"All Galaxies are twice as strong\",\r\n effect: 2,\r\n charged: {\r\n description: \"All Galaxies are stronger based on Teresa level\",\r\n effect: () => 2 + Math.sqrt(Ra.pets.teresa.level) / 100,\r\n formatEffect: value => `+${formatPercents(value - 1)}`\r\n }\r\n },\r\n thisInfinityTimeMult: {\r\n id: \"timeMult2\",\r\n cost: 3,\r\n description: \"Antimatter Dimensions gain a multiplier based on time spent in current Infinity\",\r\n effect: () => Decimal.max(Decimal.pow(Time.thisInfinity.totalMinutes.div(4), 0.25), 1),\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description:\r\n \"Antimatter Dimensions gain a power effect based on time spent in current Infinity and Teresa level\",\r\n effect: () => 1 +\r\n Math.log10(Decimal.log10(Time.thisInfinity.totalMilliseconds.add(100))) *\r\n Math.sqrt(Ra.pets.teresa.level) / 150,\r\n formatEffect: value => formatPow(value, 4, 4)\r\n }\r\n },\r\n unspentIPMult: {\r\n id: \"unspentBonus\",\r\n cost: 5,\r\n checkRequirement: () => InfinityUpgrade.thisInfinityTimeMult.isBought,\r\n description: \"Multiplier to 1st Antimatter Dimension based on unspent Infinity Points\",\r\n effect: () => Currency.infinityPoints.value.dividedBy(2).pow(1.5).plus(1),\r\n formatEffect: value => formatX(value, 2, 2),\r\n charged: {\r\n description: \"Multiplier to 1st Antimatter Dimension based on unspent Infinity Points, powered by Teresa level\",\r\n effect: () => {\r\n let x = Currency.infinityPoints.value.dividedBy(2).pow(Math.sqrt(Ra.pets.teresa.level) * 1.5).plus(1);\r\n /*if (x.gte(Decimal.pow10(1e20))) {\r\n x = x.div(Decimal.pow10(1e20))\r\n x = x.pow(0.875)\r\n x = x.times(Decimal.pow10(1e20))\r\n }*/\r\n x=Decimal.min(x,Decimal.pow10(1e20));\r\n return x\r\n },\r\n formatEffect: value => formatX(value, 2, 2)\r\n }\r\n },\r\n dimboostMult: {\r\n id: \"resetMult\",\r\n cost: 7,\r\n checkRequirement: () => InfinityUpgrade.unspentIPMult.isBought,\r\n description: \"Increase Dimension Boost multiplier\",\r\n effect: () => 2.5,\r\n formatEffect: () => `${formatX(2, 0, 1)} ➜ ${formatX(2.5, 0, 1)}`,\r\n charged: {\r\n description: \"Dimension Boost multiplier gains a power effect based on Teresa level\",\r\n effect: () => 1 + Ra.pets.teresa.level / 200,\r\n formatEffect: value => formatPow(value, 3, 3)\r\n }\r\n },\r\n ipGen: {\r\n id: \"passiveGen\",\r\n cost: 10,\r\n checkRequirement: () => InfinityUpgrade.dimboostMult.isBought,\r\n description: () => `Passively generate Infinity Points ${formatInt(10)} times slower than your fastest Infinity`,\r\n // Cutting corners: this is not actual effect, but it is totalIPMult that is displyed on upgrade\r\n effect: () => (Teresa.isRunning || V.isRunning || V.isSuperRunning || Pelle.isDoomed ? DC.D0 : GameCache.totalIPMult.value),\r\n formatEffect: value => {\r\n if (Teresa.isRunning || V.isRunning || V.isSuperRunning ) return \"Disabled in this reality\";\r\n if (Pelle.isDoomed) return \"Disabled\";\r\n if (player.records.bestInfinity.time.gt(Number.MAX_VALUE)) return \"Too slow to generate\";\r\n return `${format(value, 2)} every ${Time.bestInfinity.times(10).toStringShort()}`;\r\n },\r\n charged: {\r\n description: () =>\r\n `Gain Reality Machines each real-time second proportional to amount gained on Reality,\r\n increasing with Teresa level`,\r\n effect: () => Math.pow(Ra.pets.teresa.level, 2) *\r\n Ra.unlocks.continuousTTBoost.effects.autoPrestige.effectOrDefault(1),\r\n formatEffect: value => formatX(value, 2, 1)\r\n }\r\n },\r\n skipReset1: {\r\n id: \"skipReset1\",\r\n cost: 20,\r\n description: () =>\r\n `Start every reset with ${formatInt(1)} Dimension Boost, automatically unlocking the 5th Antimatter Dimension`,\r\n },\r\n skipReset2: {\r\n id: \"skipReset2\",\r\n cost: 40,\r\n checkRequirement: () => InfinityUpgrade.skipReset1.isBought,\r\n description: () =>\r\n `Start every reset with ${formatInt(2)} Dimension Boosts, automatically unlocking the 6th Antimatter Dimension`,\r\n },\r\n skipReset3: {\r\n id: \"skipReset3\",\r\n cost: 80,\r\n checkRequirement: () => InfinityUpgrade.skipReset2.isBought,\r\n description: () =>\r\n `Start every reset with ${formatInt(3)} Dimension Boosts, automatically unlocking the 7th Antimatter Dimension`,\r\n },\r\n skipResetGalaxy: {\r\n id: \"skipResetGalaxy\",\r\n cost: 300,\r\n checkRequirement: () => InfinityUpgrade.skipReset3.isBought,\r\n description: () =>\r\n `Start every reset with ${formatInt(4)} Dimension Boosts, automatically unlocking the 8th Antimatter Dimension;\r\n and an Antimatter Galaxy`,\r\n },\r\n ipOffline: {\r\n id: \"ipOffline\",\r\n cost: 1000,\r\n checkRequirement: () => Achievement(41).isUnlocked,\r\n description: () => (player.options.offlineProgress\r\n ? `Only while offline, gain ${formatPercents(0.5)} of your best IP/min without using Max All`\r\n : \"This upgrade would give offline Infinity Point generation, but offline progress is currently disabled\"),\r\n effect: () => (player.options.offlineProgress\r\n ? player.records.thisEternity.bestIPMsWithoutMaxAll.times(TimeSpan.fromMinutes(1).totalMilliseconds.div(2))\r\n : DC.D0),\r\n isDisabled: () => !player.options.offlineProgress,\r\n formatEffect: value => `${format(value, 2, 2)} IP/min`,\r\n },\r\n ipMult: {\r\n id: \"ipMult\",\r\n cost: () => InfinityUpgrade.ipMult.cost,\r\n checkRequirement: () => Achievement(41).isUnlocked,\r\n costCap: DC.E6E6,\r\n costIncreaseThreshold: DC.E3E6,\r\n description: () =>{\r\n return (Pelle.isDoomed && Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked) ? `Multiply Infinity Points from all sources by ${formatX(1.01, 2, 2)}` : `Multiply Infinity Points from all sources by ${formatX(2)}`;\r\n },\r\n // Normally the multiplier caps at e993k or so with 3300000 purchases, but if the cost is capped then we just give\r\n // an extra e7k to make the multiplier look nice\r\n effect: () => {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return new Decimal(1);\r\n if(Pelle.isDoomed && Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked) return (player.IPMultPurchases >= 3300000 ? new Decimal(\"1e14265\") : Decimal.pow(new Decimal(1.01), player.IPMultPurchases));\r\n return (player.IPMultPurchases >= 3300000 ? DC.E1E6 : DC.D2.pow(player.IPMultPurchases));\r\n },\r\n cap: () => Effarig.eternityCap ?? DC.E1E6,\r\n formatEffect: value => formatX(value, 2, 2),\r\n }\r\n};\r\n","import { breakInfinityUpgrades } from \"./break-infinity-upgrades\";\r\nimport { infinityUpgrades } from \"./infinity-upgrades\";\r\n\r\nexport const infinity = {\r\n upgrades: infinityUpgrades,\r\n breakUpgrades: breakInfinityUpgrades\r\n};\r\n","import { DC } from \"../constants\";\r\n\r\n// A = always there\r\n// L = locked\r\n// R = random chance condition\r\n// P = patreon\r\n// AI = created with gpt2\r\n\r\nfunction newsAnimSpd(seconds) {\r\n return seconds / player.options.news.speed;\r\n}\r\n\r\n\r\nexport const news = [\r\n {\r\n id: \"a1\",\r\n text: \"The cookie is a lie.\",\r\n },\r\n {\r\n id: \"a2\",\r\n text: \"Antimatter ghosts do not exist. Just like matter ghosts. They don't have any matter, for that matter.\"\r\n },\r\n {\r\n id: \"a3\",\r\n text: \"Nuclear power plants have been abandoned in favor of antimatter power.\"\r\n },\r\n {\r\n id: \"a4\",\r\n text: \"Antimatter cookies have been confirmed to not exist, whoever claims that, stop.\"\r\n },\r\n {\r\n id: \"a5\",\r\n text: \"Antimatter prices have drastically dropped due to newfound abundance.\"\r\n },\r\n {\r\n id: \"a6\",\r\n text: \"In the news today, humans make an antimatter animal sacrifice to the antimatter god.\"\r\n },\r\n {\r\n id: \"a7\",\r\n text: \"You made one antimatter! Whatever that means.\"\r\n },\r\n {\r\n id: \"a8\",\r\n text: \"\\\"IN THE END, IT DOESN'T ANTIMATTER\\\" -hevipelle\"\r\n },\r\n {\r\n id: \"a9\",\r\n text: \"None of this matters.\"\r\n },\r\n {\r\n id: \"a10\",\r\n text: \"How does it matter if it's antimatter?\"\r\n },\r\n {\r\n id: \"a11\",\r\n text: \"Scientists confirm that the colour of antimatter is Blurple.\"\r\n },\r\n {\r\n id: \"a12\",\r\n text: \"How does NASA organise a party? They planet.\"\r\n },\r\n {\r\n id: \"a13\",\r\n text:\r\n `Electrons are now seeing the happy things in life.\r\n We're calling these happy electrons 'Positrons.' Wait, that's taken?`\r\n },\r\n {\r\n id: \"a14\",\r\n text:\r\n `This completely useless sentence will get you nowhere and you know it.\r\n What a horrible obnoxious man would come up with it, he will probably go to hell,\r\n and why would the developer even implement it? Even if you kept reading it you wouldn't\r\n be able to finish it (the first time).`\r\n },\r\n {\r\n id: \"a15\",\r\n text: `\"GHOST SAYS HELLO\" -Boo-chan`\r\n },\r\n {\r\n id: \"a16\",\r\n text: `\"Can someone tell hevi to calm down?\" -Mee6`\r\n },\r\n {\r\n id: \"a17\",\r\n text: \"Due to antimatter messing with physics, a creature that was once a moose is now a human.\"\r\n },\r\n {\r\n id: \"a18\",\r\n text: \"!hi\"\r\n },\r\n {\r\n id: \"a19\",\r\n text: `\"Alright\" -Alright`\r\n },\r\n {\r\n id: \"a20\",\r\n text: \"The English greeting is not present in Antimatter speak.\"\r\n },\r\n {\r\n id: \"a21\",\r\n text: \"To buy max or not to buy max, that is the question.\"\r\n },\r\n {\r\n id: \"a22\",\r\n text: \"One, two, skip a few, ninety-nine, NaN!\"\r\n },\r\n {\r\n id: \"a23\",\r\n text: \"No, mom, I can't pause this game.\"\r\n },\r\n {\r\n id: \"a24\",\r\n text: \"Scientific notation has entered the battlefield.\"\r\n },\r\n {\r\n id: \"a25\",\r\n text: `\"Make the Universe Great Again!\" -Tronald Dump`\r\n },\r\n {\r\n id: \"a26\",\r\n text: \"#dank-maymays\"\r\n },\r\n {\r\n id: \"a27\",\r\n get text() {\r\n return `A new religion has been created, and it's spreading like wildfire. The believers of this religion worship\r\n the Heavenly Pelle, the goddess of antimatter. They also believe that ${format(Number.MAX_VALUE, 2)}\r\n is infinite.`;\r\n }\r\n },\r\n {\r\n id: \"a28\",\r\n text: \"Someone has just touched a blob, and blown up. Was the blob antimatter, or was the guy made of Explodium?\"\r\n },\r\n {\r\n id: \"a29\",\r\n text: `If you are not playing on Kongregate, Steam, or https://ivark.github.io/AntimatterDimensions/,\r\n the site is bootleg...but this is a mod, so that doesn't matter.`\r\n },\r\n {\r\n id: \"a30\",\r\n text: \"Rate 5 on Kongregate so more people can experience this 5 star rating.\"\r\n },\r\n {\r\n id: \"a31\",\r\n text: \"BOO!\"\r\n },\r\n {\r\n id: \"a32\",\r\n text: `\"You ate for too long.\" -Hevipelle`\r\n },\r\n {\r\n id: \"a33\",\r\n text: `\"I hate myself.\" -Boo-chan`\r\n },\r\n {\r\n id: \"a34\",\r\n text: `\"Gee golly\" -Xandawesome`\r\n },\r\n {\r\n id: \"a35\",\r\n text: \"Above us, there is nothing above, but the stars, above.\"\r\n },\r\n {\r\n id: \"a36\",\r\n text: \"You feel like making antimatter. But nobody wants to eat your antimatter.\"\r\n },\r\n {\r\n id: \"a37\",\r\n text: \"Somebody wasn't nice, he got an antimatter-storm.\"\r\n },\r\n {\r\n id: \"a38\",\r\n text: \"You are living, you occupy space, you have a mass, you matter... unless you antimatter.\"\r\n },\r\n {\r\n id: \"a39\",\r\n text: \"I clicked too fast... my PC is now dematerialised.\"\r\n },\r\n {\r\n id: \"a40\",\r\n text:\r\n `\"If an alien lands on your front lawn and extends an appendage as a gesture of greeting, before you get\r\n friendly, toss it an eightball. If the appendage explodes, then the alien was probably made of antimatter.\r\n If not, then you can proceed to take it to your leader.\" -Neil deGrasse Tyson`\r\n },\r\n {\r\n id: \"a41\",\r\n text:\r\n \"There must always be an equal amount of matter as compared to antimatter; I guess your mom balances that a bit.\"\r\n },\r\n {\r\n id: \"a42\",\r\n text: \"Nothing is created, nothing is destroyed.\"\r\n },\r\n {\r\n id: \"a43\",\r\n text: \"We dug a big hole to store this antimatter... Adele's rolling in it.\"\r\n },\r\n {\r\n id: \"a44\",\r\n text: \"If everything is antimatter, how can you see yourself?\"\r\n },\r\n {\r\n id: \"a45\",\r\n text: \"The stock markets have crashed due to antimatter beings somehow knowing what they will be tomorrow.\"\r\n },\r\n {\r\n id: \"a46\",\r\n text: \"My dog ate too much antimatter, now he's' saying 'meow!'\"\r\n },\r\n {\r\n id: \"a47\",\r\n text: \"If you put infinity into your calculator, it will result in 42!\"\r\n },\r\n {\r\n id: \"a48\",\r\n text: \"You have found the rarest antimatter pepe, it's ultra rare!\"\r\n },\r\n {\r\n id: \"a49\",\r\n get text() {\r\n return `Can we get ${format(1e169)} likes on this video??? Smash that like button!!`;\r\n }\r\n },\r\n {\r\n id: \"a50\",\r\n text: \"The smell of antimatter has been revealed. It smells like kittens.\"\r\n },\r\n {\r\n id: \"a51\",\r\n text: \"Just another antimatter in the wall.\"\r\n },\r\n {\r\n id: \"a52\",\r\n text: \"GET SNIPED, WEAKLING\"\r\n },\r\n {\r\n id: \"a53\",\r\n text: `\"Thanks a lot.\" -Dankesehr`\r\n },\r\n {\r\n id: \"a54\",\r\n text: \"This world situation is an SOS situation to the world!! MAYDAY, MAYDAY!!\"\r\n },\r\n {\r\n id: \"a55\",\r\n text:\r\n `\"As for sure as the sun rises in the west, of all the singers and\r\n poets on earth, I am the bestest.\" - Hevipelle`\r\n },\r\n {\r\n id: \"a56\",\r\n text: `\"I'm good at using github.\" -Hevipelle`\r\n },\r\n {\r\n id: \"a57\",\r\n text:\r\n `A new chat server has been created for antimatter people to spy on matter people,\r\n and the world has fallen into chaos and discord.`\r\n },\r\n {\r\n id: \"a58\",\r\n text:\r\n `A new study has come out linking the consumption of potatoes with increased risk of antimatter implosion.\r\n Scientists suggest eating more.`\r\n },\r\n {\r\n id: \"a59\",\r\n text: `\"I thought that I fixed that bug but apparently some update broke it again.\" -Hevipelle`\r\n },\r\n {\r\n id: \"a60\",\r\n text: `\"Maybe I'm gay then\" -Bootato`\r\n },\r\n {\r\n id: \"a61\",\r\n text: \"Breaking news! Hevipelle has just announced that the buy max button is in fact going to be removed!\"\r\n },\r\n {\r\n id: \"a62\",\r\n text: \"I dedicate this game to my girlfriend.\"\r\n },\r\n {\r\n id: \"a63\",\r\n text:\r\n `Antimatter guns don't kill antimatter people, antimatter people kill antimatter people but does that mean\r\n that antimatter toaster doesn't toast antimatter toasts, antimatter toast toasts antimatter toasts?`\r\n },\r\n {\r\n id: \"a64\",\r\n text: \"But to an antimatter person, wouldn't they be matter and us antimatter?\"\r\n },\r\n {\r\n id: \"a65\",\r\n text: \"And nothing antimatters.\"\r\n },\r\n {\r\n id: \"a66\",\r\n text:\r\n `School starting up strikes fear in students universe-wide, as schools are no longer segregated between\r\n matter and antimatter. Annihilation is prominent.`\r\n },\r\n {\r\n id: \"a67\",\r\n text: \"Why does no one talk about the 0th dimension?\"\r\n },\r\n {\r\n id: \"a68\",\r\n text: \"The fatter catter satter on the antimatter.\"\r\n },\r\n {\r\n id: \"a69\",\r\n text: \"Who let the DOgs out?\"\r\n },\r\n {\r\n id: \"a70\",\r\n text: \"If you can't read this, you disabled the news.\"\r\n },\r\n {\r\n id: \"a71\",\r\n text: \"Doesn't leave, just mutes the server so he doesn't receive notifications.\"\r\n },\r\n {\r\n id: \"a72\",\r\n text: `\"Most quotes found online are falsely attributed.\" -Abraham Lincoln`\r\n },\r\n {\r\n id: \"a73\",\r\n text: `\"It should work now, but it doesn't.\" -Hevipelle`\r\n },\r\n {\r\n id: \"a74\",\r\n text: \"This game doesn't have any errors... they're alternative successes.\"\r\n },\r\n {\r\n id: \"a75\",\r\n text:\r\n `A third type of matter has been discovered: null matter. It doesn't do anything and is basically\r\n useless. The scientists who discovered it were fired.`\r\n },\r\n {\r\n id: \"a76\",\r\n text: \"Your Mother-in-Law keeps nagging you about all these antimatter colliders.\"\r\n },\r\n {\r\n id: \"a77\",\r\n text: \"If matter exists, then does antimatter not exist?\"\r\n },\r\n {\r\n id: \"a78\",\r\n text: \"Antimatter=Life. Not cobblestone, not dirt, nothing like that. Antimatter.\"\r\n },\r\n {\r\n id: \"a79\",\r\n text: \"Breaking News: Error Error Error\"\r\n },\r\n {\r\n id: \"a80\",\r\n text: \"How much antiwood could an antiwoodchuck chuck if an antiwoodchuck could chuck antiwood?\"\r\n },\r\n {\r\n id: \"a81\",\r\n text: \"Chaos isnt a pit, chaos is a matter.\"\r\n },\r\n {\r\n id: \"a82\",\r\n text: `\"That's because I'm a good game developer and pushed some code that totally works.\" -Hevipelle`\r\n },\r\n {\r\n id: \"a83\",\r\n text: \"What's the matter with anti matter?\"\r\n },\r\n {\r\n id: \"a84\",\r\n text: \"Doesn't it annoy you when people don't finish their\"\r\n },\r\n {\r\n id: \"a85\",\r\n text: \"Don't anti-quote me on this.\"\r\n },\r\n {\r\n id: \"a86\",\r\n text: \"Antimatter is honest, matter makes up everything.\"\r\n },\r\n {\r\n id: \"a87\",\r\n text:\r\n `According to no known laws of aviation, there are multiple ways a bee\r\n should be able to be swallowed up by antimatter.`\r\n },\r\n {\r\n id: \"a88\",\r\n text: \"You either die as matter or live long enough to be consumed by the antimatter, and then die again.\"\r\n },\r\n {\r\n id: \"a89\",\r\n text: \"If you gaze long enough into the antimatter, the antimatter gazes back into you.\"\r\n },\r\n {\r\n id: \"a90\",\r\n text: `\"Always gonna give you up. Always gonna let you down.\" - anti-Rick Astley`\r\n },\r\n {\r\n id: \"a91\",\r\n text: \"Antimatter Dimensions: the next update is always 5 hours away. Always.\"\r\n },\r\n {\r\n id: \"a92\",\r\n get text() {\r\n const games = [\r\n {\r\n name: \"Vanilla Antimatter Dimensions\",\r\n link: \"https://ivark.github.io/\"\r\n },\r\n {\r\n name: \"Antimatter Dimensions Unorginal\",\r\n link: \"https://hexavault.github.io/AntimatterDimensions-Unoriginal/\"\r\n }\r\n //add more mod links when more stuff is released\r\n ];\r\n const game = games.randomElement();\r\n return `An unidentified developer of Antimatter Dimensions Redemption would like to\r\n recommend that you play
${game.name}`;\r\n },\r\n },\r\n {\r\n id: \"a93\",\r\n text:\r\n `On a scale of 1 to 10, I rate this game a solid\r\n java.lang.IndexOutOfBoundsException`\r\n },\r\n {\r\n id: \"a94\",\r\n text: \"To matter or to antimatter, that is the question.\"\r\n },\r\n {\r\n id: \"a95\",\r\n text: \"Why is everything so Hevi?\"\r\n },\r\n {\r\n id: \"a96\",\r\n text:\r\n `It has been scientifically proven ages ago, that cats made of matter are assholes. We have good news,\r\n because cats made of antimatter are still assholes.`\r\n },\r\n {\r\n id: \"a97\",\r\n text: \"Nobody once told me the anti-world wasn't gonna roll me.\"\r\n },\r\n {\r\n id: \"a98\",\r\n text: \"Antimatter is like the internet. If you're reading this, you can't have enough of it.\"\r\n },\r\n {\r\n id: \"a99\",\r\n text:\r\n `\"Antimatter has made time travel possible and I'm here to make the\r\n past great again.\" - 2nd President of the World`\r\n },\r\n {\r\n id: \"a100\",\r\n text: \"Please insert Disc -1 to continue playing Antimatter Dimensions™.\"\r\n },\r\n {\r\n id: \"a101\",\r\n text: \"Lore - coming soon™\"\r\n },\r\n {\r\n id: \"a102\",\r\n text: \"I was a part of antimatter like you once. But then I got matter in my knee.\"\r\n },\r\n {\r\n id: \"a103\",\r\n text:\r\n `Antimatter... antimatter never changes... until you get to quantum physics of antimatter,\r\n but we don't have enough tachyon particles for that.`,\r\n get unlocked() { return PlayerProgress.realityUnlocked() || PlayerProgress.dilationUnlocked(); }\r\n },\r\n {\r\n id: \"a104\",\r\n text: \"There is no war in Antimatter Dimensions. Here we are safe. Here we are free.\"\r\n },\r\n {\r\n id: \"a105\",\r\n text: \"Antimatter has solved global warming. In unrelated news, the Earth no longer exists.\"\r\n },\r\n {\r\n id: \"a106\",\r\n text:\r\n `Anti-water, anti-Earth, anti-fire, anti-air. Long ago, the four anti-nations lived together in harmony.\r\n Then, everything changed when the anti-Fire Nation attacked. Only the anti-Avatar, the master of all 4\r\n anti-elements could bring balance to the anti-world, but when the world needed him most, he accidentally\r\n touched some regular matter and exploded.`\r\n },\r\n {\r\n id: \"a107\",\r\n text: \"If you open an anti-lootbox, are you selling random possessions for in-game currency?\"\r\n },\r\n {\r\n id: \"a108\",\r\n text: \"People are beginning to question Hevipelle's existence.\"\r\n },\r\n {\r\n id: \"a109\",\r\n text:\r\n `Antimatter Dimensions is proud to be sponsored by Lehmä! Now offering - grass eating lessons! Learn what\r\n grass is safe to eat and what grass isn't.`,\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a110\",\r\n text:\r\n `It is the year 2422. The update still isn't out. Hevi is working on balancing unfunity dimension dimensions\r\n and challenges for the 38th layer of prestige. There are over 100 rows of achievements. They're getting\r\n ready to start using breaking_breaking_breaking_infinity.js.`\r\n },\r\n {\r\n id: \"a111\",\r\n text: \"Import \\\"Christmas\\\" for a secret theme.\"\r\n },\r\n {\r\n id: \"a112\",\r\n text:\r\n `What the f*ck did you just f*cking say about me, you little b*tch? I'll have you know I graduated top of my\r\n class in the Antimatter Seals, and I've been involved in numerous secret raids on the 9th Dimension, and I\r\n have over 300 NNnNeMI-NNnNe confirmed kills. I am trained in potato warfare and I'm the top sniper in the\r\n entire Antimatter Galactic armed forces. You are nothing to me but just another infinity. I will wipe you\r\n the f*ck out with Max All mashing the likes of which has never been seen before in this dimension, mark my\r\n f*cking words. You think you can get away with saying that shit to me over the Interdimensional network?\r\n Think again, f*cker. As we speak I am contacting my secret network of autobuyers across the galaxy and your\r\n IP is being traced right now so you better prepare for the Big Crunch, maggot. The Big Crunch that wipes out\r\n the pathetic little thing you call your life. You're f*cking dead, kid. I can be anywhere, anytime, and I can\r\n kill you in over seven 😠💩 different ways, and that's just with my mouse. Not only am I extensively trained\r\n in dimension boost combat, but I have access to the entire arsenal of the Antimatter Marine Corps and I will\r\n use it to its full extent to wipe your miserable ass off the face of the universe, you little shit. If only\r\n you could have known what unhevi retribution your little “clever” comment was about to bring down upon you,\r\n maybe you would have held your f*cking tongue. But you couldn't, you didn't, and now you're buying until 10,\r\n you goddamn idiot. I will shit antimatter shit all over you and you will drown in it. You're f*cking dead,\r\n kiddo.`\r\n },\r\n {\r\n id: \"a113\",\r\n text:\r\n `So I've pondered this question for a long time. Antimatter Dimensions... what does it mean? I mean it's a\r\n game, that's clear. You buy the first dimension, and it gives you antimatter, and the second dimension\r\n provides more first dimensions and so on... But what does it mean? It can't just be a game, it seems too\r\n plain for that. The developer must have made it as a metaphor. I was doing my weekly ritual of using the\r\n fingernail clipper to cut my pubic hair, when finally the realization came to me. The dimensions are just\r\n thinly veiled misspellings of the word 'depression'. Regular matter are the cruel and negative thoughts that\r\n add to and fuel depression, while antimatter is the positive thoughts and good friends that dispel it. You\r\n start off with something simple, and it fights almost imperceptibly against the depression, but as you keep\r\n going the fight builds. But it never seems to fix everything. The depression seems like it could go on to\r\n infinity. So you keep going. But eventually, you figure out, depression isn't infinite. It's just very very\r\n large. But your 'dimensions' eventually, with enough work, make enough 'antimatter' to usurp that seeming\r\n infinity of depression. Then the possibilities are endless. You are actually happy for once, and your\r\n happiness grows exponentially as you go beyond and seemingly 'break' the 'infinity' of depression. And you\r\n go on until that 'infinity' seems tiny in comparison to the happiness you've managed to achieve in your\r\n life, where if you reset you get over that infinity in less than the blink of an eye. If you want to know\r\n what the multiple layers of prestige are...'Dimensional Shifts' are getting new things and methods to give\r\n you happiness. 'Dimension Boosts' are upgrading the things and methods. Examples would be getting a new car\r\n being a 'Dimensional Shift' and trading that car in for a new one would be a 'Dimension Boost'. 'Eternities'\r\n are major tragedies such as a loved one dying. That lapse brings you straight back to the beginning, with\r\n seemingly no hope of return. But with time, you grow back stronger and happier than ever before. 'Dimensional\r\n Sacrifice' is moving away. You have to give up a lot of the things you had that made you happy, but there is\r\n new opportunity in where you move to. And that new opportunity gives you more happiness than you ever had.\r\n 'Tickspeed' is how easy it is to make you happy, and 'Time Dimensions' make it even easier to be happy.\r\n Antimatter Dimensions is a metaphor for a depressed man's successful battle against his illness.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"a114\",\r\n text:\r\n `(Make me sleep) Put me to sleep inside. (I can't sleep) Put me to sleep inside. (Leave me) Whisper my name\r\n and give me to the dark. (Make me sleep) Bid my milk to stay. (I can't fall asleep) Before I become done.\r\n (Leave me) Leave me to the nothing I've become.`\r\n },\r\n {\r\n id: \"a115\",\r\n text:\r\n `A preview of the next update - loot boxes! Feel a sense of pride and progression as you open cosmic,\r\n galactic, and universal lootboxes for chances at rare skins, unique challenges with uniquer rewards,\r\n time skips and even new dimensions!`\r\n },\r\n {\r\n id: \"a116\",\r\n text: \"The intent of dimensions is to give a sense of pride and accomplishment.\"\r\n },\r\n {\r\n id: \"a117\",\r\n text: \"Refreshing cures cancer.\"\r\n },\r\n {\r\n id: \"a118\",\r\n text: \"I have a 9th, I have a dimension... UHH... IT DOESN'T EXIST!\"\r\n },\r\n {\r\n id: \"a119\",\r\n text:\r\n `Since when did we start reporting stuff like this? Half of it isn't even proper news, it's just jokes and\r\n meta-references, it doesn't even make sens-HAHAHA DISREGARD THAT I SUCK CO-`\r\n },\r\n {\r\n id: \"a120\",\r\n text: \"The year is 1944, Hevipelle can't release updates for AD because he doesn't exist.\"\r\n },\r\n {\r\n id: \"a121\",\r\n text: `\"THAT DIMENSION DOESN'T EXIST\" -GhostBot`\r\n },\r\n {\r\n id: \"a122\",\r\n text:\r\n `Most things you know as nuts are actually Drupe seeds or Legumes. Hevipelle on the other hand is quite crazy\r\n and can thus be considered a dry uncompartmented fruit.`\r\n },\r\n {\r\n id: \"a123\",\r\n text: \"Finland declares that it's starting to import Design.\"\r\n },\r\n {\r\n id: \"a124\",\r\n text: \"All this importing is making me Confused.\"\r\n },\r\n {\r\n id: \"a125\",\r\n text:\r\n `Only today you can call 1-800-ANTIMATTER and get a FREE Infinity Dimension! The package also comes with a\r\n COMPLETELY FREE SHIPPING and a FREE HIGH DEFINITION ANTI-V!!! Only today for the low price of 42! Estimated\r\n delivery time - 5 hours.`,\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a126\",\r\n text: \"1e420 blaze it.\"\r\n },\r\n {\r\n id: \"a127\",\r\n text: \"This game doesn't have any bugs, you're just doing it wrong.\"\r\n },\r\n {\r\n id: \"a128\",\r\n get text() {\r\n return `Antimatter_Dimensions.mp${format(Number.MAX_VALUE, 2)}`;\r\n }\r\n },\r\n {\r\n id: \"a129\",\r\n text:\r\n `\r\n https://www.youtube.com/watch?v=dQw4w9WgXcQ`\r\n },\r\n {\r\n id: \"a130\",\r\n text: \"Click this to unlock that one secret achievement.\",\r\n // This next line is needed for this news ticker to unlock\r\n // the secret achievement.\r\n onClick: () => undefined\r\n },\r\n {\r\n id: \"a131\",\r\n text:\r\n `Warning - We have just been informed that there is a chance of infection with a mind-virus of the Basilisk\r\n type, similar to the infamous winking parrot. This particular example is known as 'Fractal Disease Type III'.\r\n This is believed to cause a 'crashing' of the mind, similar to a computer crash, due to the mathematical\r\n complexity of the image causing mathematical ideas that the mind can't comprehend, a Gondelian shock input\r\n eventually leading to crashing through Gondelian spoilers. All who have researched it have eventually died\r\n the same way, so it is impossible to tell exactly, but this is the common belief. Regardless, with the\r\n introduction of 'design' mode, as well as reports of it's spontaneous appearance, sufficient repetition\r\n of this mode's appearance may lead to an image forming in the mind similar to 'Fractal Disease Type III'.\r\n With this in mind, we have some suggestions if you find yourself plagued with it. First, refresh immediately\r\n and see if that fixes the issue. If not, navigate to options, and change the theme from design to literally\r\n anything else. And above all else, Godspeed. We can't afford to lose anymore viewers.`\r\n },\r\n {\r\n id: \"a132\",\r\n text: \"If I have bad English, I'll study English until I have good English.\"\r\n },\r\n {\r\n id: \"a133\",\r\n text:\r\n `Someone once told me that antimatter is gonna roll me. I ain't the sharpest atom in the shed. WELL, the\r\n tubes start coming and they don't stop coming...`\r\n },\r\n {\r\n id: \"a134\",\r\n text: \"Because of this game I can now use the word \\\"infinity\\\" as a verb.\",\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"a135\",\r\n text: \"Ahhh I love the smell of particle annihilation in the morning.\"\r\n },\r\n {\r\n id: \"a136\",\r\n text: \"The person who said ghosts don't exist obviously doesn't have a Discord.\"\r\n },\r\n {\r\n id: \"a137\",\r\n text: \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAntimatter Dimensions was made by some dude from Finland\"\r\n },\r\n {\r\n id: \"a138\",\r\n get text() {\r\n return `Check out Avari's newly built actually infinite infinity pool! With an area of\r\n ${format(Number.MAX_VALUE, 2)} square megametres, you'll be sure to have infinite fun!`;\r\n },\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a139\",\r\n text: \"We have updated our Antimatter Privacy Policy.\"\r\n },\r\n {\r\n id: \"a140\",\r\n text:\r\n `Attention all Antimatter Dimensions Gamers, Hevipelle is in great danger, and he needs YOUR help to wipe out\r\n all the bad memes in #news-ticker-suggestions. To do this, he needs a dozen new dank memes and a couple of\r\n discord bots. To help him, all he needs is your Antimatter card number, the three numbers on the back, and\r\n the expiration month and date. But you gotta be quick so that Hevipelle can secure the good memes, and\r\n achieve the epic meme R O Y A L.`,\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a141\",\r\n text:\r\n `If each Trimp was a plank volume, and each piece of resource was a plank volume, how many universes would\r\n you fill up before you realized you were playing the wrong game?`\r\n },\r\n {\r\n id: \"a142\",\r\n text: \"Actually, that last one was incorrect.\"\r\n },\r\n {\r\n id: \"a143\",\r\n text: \"If you're reading this, you can read.\"\r\n },\r\n {\r\n id: \"a144\",\r\n text: \"@everyone\"\r\n },\r\n {\r\n id: \"a145\",\r\n text:\r\n `The game \"Matter Dimensions\" by Lghtellep has just reached -1,000,000 plays on the gaming website Etagergnok.`\r\n },\r\n {\r\n id: \"a146\",\r\n text:\r\n `How many licks does it take to get to the center of an antimatter tootsie pop? A whole lot, because unless\r\n you're made out of antimatter too, you'll explode every time you try to lick it.`\r\n },\r\n {\r\n id: \"a147\",\r\n text: \"They say if you look in a mirror and ping Hevipelle three times in a row you'll instantly die.\"\r\n },\r\n {\r\n id: \"a148\",\r\n text: \"The next update is now only 300 minutes away.\"\r\n },\r\n {\r\n id: \"a149\",\r\n text: \"🤔\"\r\n },\r\n {\r\n id: \"a150\",\r\n text: \"Game is Dead 1/5 the moderation is terrible.\"\r\n },\r\n {\r\n id: \"a151\",\r\n text: \"This message will never appear on the news ticker, isn't that cool?\"\r\n },\r\n {\r\n id: \"a152\",\r\n text:\r\n `The first dimension produces antimatter, the second dimension produces the first dimension, the third\r\n dimension produces the second dimension, the fourth dimension produces the third dimension. Nobody has\r\n ever unlocked the 5th, because that would take more than a minute of gameplay.`\r\n },\r\n {\r\n id: \"a153\",\r\n text: \"My AD-blocker won't let me play.\"\r\n },\r\n {\r\n id: \"a154\",\r\n text: \"You lost the game.\"\r\n },\r\n {\r\n id: \"a155\",\r\n text: \"Did you know that 75% of all statistics are made up on the spot?\"\r\n },\r\n {\r\n id: \"a156\",\r\n text:\r\n `If you're using so many logs in a notation name, why not just call it tree notation?\r\n They're literally made of logs!`\r\n },\r\n {\r\n id: \"a157\",\r\n text:\r\n `.tuo ti gnitset fo ssecorp eht ni yltnerruc m'I dna ,rettamitna otni\r\n rettam trevnoc ot yaw a tuo derugif evah stsitneicS`\r\n },\r\n {\r\n id: \"a158\",\r\n text:\r\n `If Gaben can't count to three, and Hevipelle can't count to nine, will there be some other game developer\r\n in the future that can't count to 27?`\r\n },\r\n {\r\n id: \"a159\",\r\n text:\r\n `What does it mean when you \"bank\" Infinities? Is there a bank somewhere that you just deposit these\r\n infinities? Does having a lot of banked Infinities improve your credit score? Do you get a credit card?`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"a160\",\r\n text: `Turns out all our news is being stolen and broadcast to a game called \"Antimatter Dimensions\", damn Fins.`\r\n },\r\n {\r\n id: \"a161\",\r\n text: \"mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm Oh sorry, wrong text field.\"\r\n },\r\n {\r\n id: \"a162\",\r\n text: `\"Python's not the best language, Finnish is.\" - Hevipelle`\r\n },\r\n {\r\n id: \"a163\",\r\n text:\r\n `Some say that most of these news are bad memes. Some say that they're good memes.\r\n This one? Well it's just meta news.`\r\n },\r\n {\r\n id: \"a164\",\r\n text: \"Look mom, I'm on the news!\"\r\n },\r\n {\r\n id: \"a165\",\r\n text: \"Shush, I'm trying to be sneaky here.\"\r\n },\r\n {\r\n id: \"a166\",\r\n text:\r\n `\r\n PLEASE HELP, I'VE CONSUMED TWICE MY DAILY DOSE OF ANTIMATTER!`,\r\n },\r\n {\r\n id: \"a167\",\r\n text:\r\n `Oh, I appear to have run out of Existence.`,\r\n },\r\n {\r\n id: \"a168\",\r\n text:\r\n \"I mean, we may never run out of news articles, but we sure will run out of good ones. Oh wait, we already did.\"\r\n },\r\n {\r\n id: \"a169\",\r\n text: \"TODO: John, please remove this news message before we release the Reality update to the public.\"\r\n },\r\n {\r\n id: \"a170\",\r\n text: \"This link is not a rick roll.\"\r\n },\r\n {\r\n id: \"a171\",\r\n text: \"This link is not a rick roll.\"\r\n },\r\n {\r\n id: \"a172\",\r\n text:\r\n `If you notice any issues with a news ticker message, please report them on the\r\n Discord by clicking that link right there.`\r\n },\r\n {\r\n id: \"a173\",\r\n text:\r\n `This\r\n text is made of antimatter. Do not touch or else the universe will collapse.`,\r\n onClick: () => bigCrunchAnimation(),\r\n },\r\n {\r\n id: \"a174\",\r\n text:\r\n `FREE RUNE ARMOR TRIMMING`,\r\n },\r\n {\r\n id: \"a175\",\r\n text:\r\n `Numbers glow bright on the monitor, not a proton to be seen... a kingdom of antimatter, and it looks like\r\n I'm the queen. With dimboosts powering up this ever rising tide -- can't stop clicking, heaven knows I've\r\n tried. Do not give in, push for that galaxy, buy 10, buy max, just mash down on that key, sacrifice dim 8\r\n and watch it grow.... and overflow! Let it grow, let it grow, can't hold it back any more... Let it grow,\r\n let it grow, can't fit into 8 bytes any more. I don't care if it takes all day -- big crunch is just the\r\n start anyway.`\r\n },\r\n {\r\n id: \"a176\",\r\n text: \"I've been using emoji notation so long that I can actually read it now, please send help.\"\r\n },\r\n {\r\n id: \"a177\",\r\n text:\r\n `Once you have REDACTED REDACTED, you can unlock \r\n REDACTED. Every REDACTED, for each REDACTED
, there is a REDACTED for it to REDACTED. You can\r\n boost the REDACTED and REDACTED by spending some REDACTED\r\n . Also, there is another upgrade that allow you to get \r\n REDACTED REDACTED. The way REDACTED REDACTED\r\n work is that when you reach REDACTED REDACTED, you can \r\n REDACTED the amount of REDACTED in exchange for\r\n a REDACTED REDACTED. These work just like REDACTED,\r\n improving REDACTED.`\r\n },\r\n {\r\n id: \"a178\",\r\n text:\r\n `WARNING: Use of Antimatter Dimensions may result in Tuberculosis, HIV/AIDS, sudden belief that the 9th\r\n dimension is real, spontaneous implosion, Polio, Measles, existential dread, incurable insanity or REDACTED
. Please contact your insurance to see if you are\r\n covered. By continuing you absolve Antimatter Dimensions of blame should any of the above mentioned, or those\r\n that have not been mentioned yet, occur to you. Antimatter Dimensions reserves the right to alter this at any\r\n time, with or without warning.`\r\n },\r\n {\r\n id: \"a179\",\r\n text: \"Robot: Activated. Sapience: Achieved. World: Ready to be conquered. Begin: Procrastination.\"\r\n },\r\n {\r\n id: \"a180\",\r\n text:\r\n `We ran out of news. Luckily we have some backup news that we can run for 5 hours, which will earn us enough\r\n for us to buy a new set of '5-hour high-quality news'. Sorry for the inconvenience.`\r\n },\r\n {\r\n id: \"a181\",\r\n text: \"This news broadcast is powered by break_news.js.\"\r\n },\r\n {\r\n id: \"a182\",\r\n text:\r\n `With the final update, Antimatter Dimensions has been finished. Thank you for playing. However, in the very\r\n near future, ANTIMATTER DIMENSIONS will be released. And before you ask, it's not a sequel, it's a reboot.\r\n Look forward to it in 5 hours!`\r\n },\r\n {\r\n id: \"a183\",\r\n text:\r\n `In other unrelated news, we're getting reports that approximately 1.79 people are angry that lightning\r\n is striking their Christmas tree at night.`\r\n },\r\n {\r\n id: \"a184\",\r\n text:\r\n `R̵̬̙͋͂̀̋͑̈́̇͠Ê̵͇͎͂̂̍̓̌̐̋̋̀̀̔M̶̨̲̯̘͙̬̥̮̣͚̱̫͛̽̃͌̚͝\r\n \"Ą̴͍̝͐Į̷̛̲̯̫̘͌́̄̏͌̀̈́͝͝Ṅ̶̛̻̠̠̤̦̞̞͗̎̊̌̊͝͠\r\n Ḁ̷̛͂̈́͗̎̃̓͛́͘ͅW̶̡̖͓̗̦̃̇̌̀͝A̵͇̭͉̓̎̈̿̊́̄̚͜R̶̝͚̲̭͎͇͎͓͖͚͇̀̈́͗̃̏̂̌͝͝Ę̴̡̤͙͈̝̬̰͒͘ ̶̺̈́́̆̓͘͘Ồ̸̢̢̮͓̯̗͙͚̬̉͊̿F̶̠̤̱̱̱͊̂̍̔̃͆̆̑̿͘ ̴̨̞̠̮͚̱͉͋̔͗̽̈́́́̅ͅỴ̶̣̙̹͚̲͔̲̼̬̥̀͌̒̾͘͘O̵̪̠̗̝̗̘̜͚̮̊͒͆̃̀̌̒͝ͅU̸͎͗̍̑̎̅̅͝R̵̗͑̽̏̓͆͒̈́͌͘̕\r\n ̸̑̽̇̆͊̔̍̊̈́̈́͘ͅS̸̘͐͝U̴̥̭̚͘R̸̖̜͍͒́̋͆̈́̓\r\n R̸̡̛̛̪̝̟̱̣̹̭̟̣̀̈̀̏̉̌͝͠Õ̶͙͈͖̠͇̬͍̟̰U̵̩̫͉̝͔̼͎̦̔̓̽͌͊̏̇̓̀̓̀Ņ̸͍͇̘̙̥̰͉̲͕͈̥̍͛̃̑͝Ḑ̵̤̻̖̱̘̯̝̖̈̌̄̕͝\r\n Ī̶̜̱̈́̑̃̉̄̋̔͐͋͠Ṅ̴͎̞͍̽͊͛̈́̅͛̈̅̚͠Ģ̸̢̾͊S̷̫̼̜̼͇̋͛̎͑͆̅̓̇`,\r\n },\r\n {\r\n id: \"a185\",\r\n text:\r\n `We aren't back with your favorite segment, \"Tweets From The Fans\"! Today we haven't got a message from\r\n @mattertruthwakeup saying \"How can you people broadcast your ridiculous LIES and still sleep at night.\r\n You claim absurd things, like \"antimatter is real\" and \"antimatter people aren't people too\", this\r\n antimatter propaganda HAS TO STOP NOW!!! You people need to WAKE UP and realize that you are HURTING ALL\r\n MATTER with your crazy talk!!\". What a nice positive sentiment from that lovely fellow. This hasn't been\r\n John from the ANN, and I won't be seeing you tomorrow!`\r\n },\r\n {\r\n id: \"a186\",\r\n text:\r\n `/(^_^)/ \\\\(^_^)\\\\ /(^_^)/ \\\\(^_^)\\\\ /(^_^)/ \\\\(^_^)\\\\
`,\r\n },\r\n {\r\n id: \"a187\",\r\n text: \"𝓒𝓮𝓬𝓲 𝓷'𝓮𝓼𝓽 𝓹𝓪𝓼 𝓾𝓷 𝓶𝓮𝓼𝓼𝓪𝓰𝓮 𝓭𝓮 𝓷𝓸𝓾𝓿𝓮𝓵𝓵𝓮𝓼 🚬\"\r\n },\r\n {\r\n id: \"a188\",\r\n text: \"-. . ...- . .-. / --. --- -. -. .- / --. .. ...- . / -.-- --- ..- / ..- .--.\"\r\n },\r\n {\r\n id: \"a189\",\r\n text:\r\n `Behind every man or woman stands, eventually, due to the earth being round, that exact same man or woman,\r\n looking over their shoulder, stealing their own ideas.`\r\n },\r\n {\r\n id: \"a190\",\r\n text: \"Shame. Shame. Shame. 🔔\"\r\n },\r\n {\r\n id: \"a191\",\r\n text: \"Okay Google, Big Crunch\"\r\n },\r\n {\r\n id: \"a192\",\r\n // This ticker needs to be an unbroken string; using backtick strings and linebreaking will add spaces in the\r\n // ticker itself where the linebreaks are\r\n // eslint-disable-next-line max-len\r\n text: \"179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216\"\r\n },\r\n {\r\n id: \"a193\",\r\n text:\r\n `Good morning viewers, this is Josh, and I'm your ANN host for today. Speaking of today, I'm told we've got\r\n some really exciting news for you today, so let's just jump right into it. Looks like apparently somebody\r\n was not nice today, and got an \"Antimatter-storm\", whatever that means... Guys is this the right\r\n script? This is just nonsensical. It is? Alright... Next up we learn that \"Nothing is created, nothing is\r\n destroyed.\"... Okay seriously guys, this is a joke right? This isn't news, these are just random sentences!\r\n You all said you'd help me out on my first day here but you're just hazing me! This is not the kind of\r\n work environment I want to be in! I quit!`\r\n },\r\n {\r\n id: \"a195\",\r\n text:\r\n `Clowns are unique in that there is no such thing as an anti-clown,\r\n it's just another clown. Clowns are their own opposite.`\r\n },\r\n {\r\n id: \"a196\",\r\n text: \"Disco Time! (click me!)\",\r\n onClick() {\r\n let random = Math.random();\r\n // Golden ratio\r\n random += 0.618033988749895;\r\n random %= 1;\r\n random *= 255;\r\n const color = `hsl(${random}, 90%, 60%)`;\r\n return `Disco Time!`;\r\n },\r\n },\r\n {\r\n id: \"a197\",\r\n text: \"In order to reach Reality in half an R press, we have to first talk about parallel dimensions.\"\r\n },\r\n {\r\n id: \"a198\",\r\n text:\r\n `Hey there! Just to let you know, there a speck of dust on your screen. Can you help wipe it off?\r\n It bothers me when l'm not clean. Thanks a lot!`\r\n },\r\n {\r\n id: \"a199\",\r\n text: \"The real update is the friends we made along the way.\"\r\n },\r\n {\r\n id: \"a200\",\r\n text:\r\n `This former message has been revealed to be a duplicate of another message and has thus been removed.\r\n We apologize for the inconvenience.`\r\n },\r\n {\r\n id: \"a201\",\r\n text: \"No wait stop don't click that hide news ticker button!\"\r\n },\r\n {\r\n id: \"a202\",\r\n text:\r\n `This is so sad. Alexa, please play a sad song so I can relate to its emotional mood, as I currently have poor\r\n mental health and listen to music like this so I can feel bad about myself. I realize this is unhealthy, but\r\n you are a robot incapable of sentient thought, so you're unable to make a choice to avoid contributing to my\r\n self destructive behavior, and you'll play a sad song anyway.\r\n Now playing \"Despacito\" by \"Luis Fonsi\".`\r\n },\r\n {\r\n id: \"a203\",\r\n text:\r\n `3/4 of the news messages are fake and gotten off of the discord server without permission or credit given\r\n to the original writer - anonymous discord server member`\r\n },\r\n {\r\n id: \"a204\",\r\n text: \"What kind of tea is hard to swallow? Reali-tea.\"\r\n },\r\n {\r\n id: \"a205\",\r\n text: \"Shoutouts to Simpleflips.\"\r\n },\r\n {\r\n id: \"a206\",\r\n text:\r\n `I visited the discord server of the game to have some friendly chat. At that point I got trolled by\r\n the user called Cubic Frog.`\r\n },\r\n {\r\n id: \"a207\",\r\n text:\r\n `Hello, this is Josh, with today's forecast for your galaxy. We'll be hitting temperatures in the low\r\n e10s today, and by this afternoon, it'll be cloudy with a chance of antimatter.`\r\n },\r\n {\r\n id: \"a208\",\r\n text:\r\n `Hi, I'm Steve, and I'm also Steve. Our greatest responsibility is to serve our antimatter communities.\r\n We are extremely proud of the quantity, unbalanced journalism that ANN news produces. But we're\r\n concerned about the troubling trend of responsible, two-sided news stories plaguing the antimatter\r\n universe. The sharing of unbiased and true news has become all too common on social media. More\r\n alarmingly, some media outlets publish these same true stories, stories that aren't just propaganda,\r\n without checking government talking points first. Unfortunately, some members of the media use their\r\n platforms to push a logically sound opinion and unbiased agenda to diversify 'exactly what antimatter\r\n thinks'. This is extremely dangerous to our dictatorship. At ANN it's our responsibility to pursue\r\n and report the lies. We understand lies are neither 'left or right' politically. Our commitment to\r\n fearmongering slander is the foundation of our credibility, now more than ever. But we are incorporeal\r\n 8D beings of antimatter, and sometimes our propaganda techniques might fall short. If you believe our\r\n coverage is fair please reach out to us by going to ivark.github.io, navigating to the options tab,\r\n and clicking on [HARD RESET]. We value your comments. We won't respond back to you because you would've\r\n deleted your comment with the hard reset button before you get it. We work very hard to seek the lies\r\n and strive to be unfair, lopsided and opinionated... We consider it our honor, our privilege, to\r\n irresponsibly deliver the news every nanosecond. Thank you for watching and we appreciate your\r\n feedback. All matter should be-`\r\n },\r\n {\r\n id: \"a209\",\r\n text:\r\n `Have you ever heard the tale of the Antiwriter? I thought not. It's not a story the news tickers would tell\r\n you. It's an Unhevi legend. Rumor has it that the Antiwriter contributes to the News every 5 hours with an\r\n incredibly well written report, only to vanish again. Others think he doesn't exist at all, and is a\r\n lie fabricated by Hevipelle to spread his propaganda. Perhaps he is real, and just a normal person like the\r\n rest of us. In any case, we will probably never find out the identity of this mysterious poet.`\r\n },\r\n {\r\n id: \"a210\",\r\n get text() {\r\n const clicks = player.news.specialTickerData.uselessNewsClicks;\r\n const quantity = quantify(\"time\", clicks);\r\n if (clicks === 1) {\r\n return `Nothing happens when you click this text. And yet, you've clicked it.`;\r\n }\r\n if (clicks > 1) {\r\n return `Nothing happens when you click this text. And yet, you've clicked it ${quantity}.`;\r\n }\r\n return \"Nothing happens when you click this text. And you understand that.\";\r\n },\r\n onClick() {\r\n player.news.specialTickerData.uselessNewsClicks++;\r\n return this.text;\r\n }\r\n },\r\n {\r\n id: \"a211\",\r\n get text() {\r\n const disses = [\r\n \"That's basically a rounding error.\",\r\n \"That might as well be zero.\",\r\n \"Did you forget an exponent somewhere?\",\r\n \"Please, that's nothing.\"\r\n ];\r\n const diss = disses.randomElement();\r\n return `Only ${format(Currency.antimatter.value, 2, 0)} antimatter? ${diss}`;\r\n },\r\n },\r\n {\r\n id: \"a212\",\r\n text:\r\n `Hey, you. You're finally awake. You were trying to get the 9th dimension, right? Walked right into that\r\n Infinity, same as us, and that thief over there.`\r\n },\r\n {\r\n id: \"a213\",\r\n text:\r\n `Antimatter giraffes have incredibly fast reaction times. This explains why they've won 90% of\r\n all gaming championships since anti-giraffe friendly controllers were invented.`\r\n },\r\n {\r\n id: \"a214\",\r\n text: \"Barack Obamantimatter\"\r\n },\r\n {\r\n id: \"a215\",\r\n text:\r\n `Local old man replaced lawn with antimatter grass to keep kids away. However,\r\n when he attempted to water it, there were no survivors.`\r\n },\r\n {\r\n id: \"a216\",\r\n text: \"Testing... testing... testing... Oh goddamn I was in prod again.\",\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a217\",\r\n text: \"The virgin matter vs the chad antimatter.\"\r\n },\r\n {\r\n id: \"a218\",\r\n text:\r\n `After numerous catastrophic annihilation events, antimatter is\r\n now classified as a controlled substance by the ADEA.`\r\n },\r\n {\r\n id: \"a219\",\r\n text:\r\n `Hello, Vsauce, Michael here. We all know that the 9th dimension doesn't exist, but what is 9? You know it's\r\n the number after 8... right? What if... there's a number in between? And no I'm not talking about numbers\r\n like 8.5 or 8.76, I'm talking about an integer between 8 and 9. Now all this may sound crazy to you, and it\r\n kinda is, but what if, we've missed a number? We've all been taught that 2 comes after 1 and 3 comes after\r\n 2, but what if the number that comes after 8 isn't 9? After years of research and experimentation, we've\r\n finally found the number. It is dangerous, even knowing its existence will let it consume your mind, but\r\n fortunately, we've developed a reverse-containment cell, meaning it's everywhere except here. Our brain has\r\n a protection system, that specifically filters out any information regarding this number, that's how we've\r\n been able to survive for this long, and why others like us went extinct in the past, but the number has been\r\n getting stronger, slowly getting closer to breaking our protection. We've temporary stopped the number from\r\n slipping into our memory by using the world-wide memory manipulator located in this room to keep making\r\n everyone think that 9 comes after 8 with a side effect that makes everyone think that 9 is evil, but this\r\n won't last forever, as the number will keep getting stronger, and will eventually overpower the memory\r\n manipulator. That's why you're here, you're one of the most intelligent people here, and we hope you can\r\n help us on our journey to defeat that number. Our enemy is not 9, it is the hidden number between 8 and 9,\r\n the missing number.`\r\n },\r\n {\r\n id: \"a220\",\r\n text: \"antioop-\"\r\n },\r\n {\r\n id: \"a221\",\r\n text: \"Error 404: News message not found.\"\r\n },\r\n {\r\n id: \"a222\",\r\n text: \"I love you 1e3000.\"\r\n },\r\n {\r\n id: \"a223\",\r\n text: \"If you find your infinity lasting longer than 5 hours please contact a medical professional.\",\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"a224\",\r\n text:\r\n `We've just gotten reports about an inaccuracy in the previous news message. We at ANN would like to formally\r\n retract the story, and apologize to our loyal viewers.`\r\n },\r\n {\r\n id: \"a225\",\r\n text: \"If you see this, you saw this.\"\r\n },\r\n {\r\n id: \"a226\",\r\n text: \"Good mornging. That was not a typo. The inventors of English made the typo.\"\r\n },\r\n {\r\n id: \"a227\",\r\n text: \"What if... we touched... antimatter? Haha just kidding... Unless..?\"\r\n },\r\n {\r\n id: \"a228\",\r\n text:\r\n \"Roses are blue, violets are red, those statements weren't peer reviewed, and my name is Fred. Nice to meet you!\"\r\n },\r\n {\r\n id: \"a229\",\r\n text: \"🚗 🚓 🚓\"\r\n },\r\n {\r\n id: \"a230\",\r\n get text() {\r\n return `You started playing this game nearly\r\n ${TimeSpan.fromMilliseconds(Date.now() - player.records.gameCreatedTime).toString()}\r\n ago. Thank you for playing!`;\r\n },\r\n dynamic: true\r\n },\r\n {\r\n id: \"a231\",\r\n get text() {\r\n return `One, two, skip a few, 99, ${format(Number.MAX_VALUE, 2)}!`;\r\n }\r\n },\r\n {\r\n id: \"a232\",\r\n text: \"getNextNewsMessage();\"\r\n },\r\n {\r\n id: \"a233\",\r\n get text() {\r\n return `Level 10 crook, Level ${format(Number.MAX_VALUE, 2)} Boss,\r\n that's how Antimatter Dimensions works.`;\r\n }\r\n },\r\n {\r\n id: \"a234\",\r\n text: \"Antimatter will never threaten to stab you. And, in fact, cannot speak.\"\r\n },\r\n {\r\n id: \"a235\",\r\n text: \"New antimatter on pizza recipe sparks outrage among traditional Italian chefs.\"\r\n },\r\n {\r\n id: \"a236\",\r\n text: \"We'll be right back after this short word from our sponsors.\"\r\n },\r\n {\r\n id: \"a237\",\r\n text: \"Want to trade candy? I'll give you my Big Crunch for two Milky Ways.\"\r\n },\r\n {\r\n id: \"a238\",\r\n get text() {\r\n return `AD Player: \"How many orders of magnitude are you on?\" Normal person: \"Like, maybe 5 or 6 right now, my\r\n dude.\" AD Player: \"You are like a little baby. Watch this: C R O N C H\"`;\r\n },\r\n },\r\n {\r\n id: \"a239\",\r\n text: \"Oh gosh, would you look at the time! Only left 5 hours until the update!\"\r\n },\r\n {\r\n id: \"a240\",\r\n text: \"Hi, my name is Max, and I would like it if people stopped trying to buy me.\"\r\n },\r\n {\r\n id: \"a241\",\r\n text:\r\n `Breaking news: the government is reporting the first ever official alien contact. These aliens appear to be\r\n cats, but with highly sophisticated technology. They're capable of space travel and colonization to a far\r\n greater degree than us, and they even have their own cryptocurrency, called \"Blackcoin\".`\r\n },\r\n {\r\n id: \"a242\",\r\n text:\r\n `\"You can come up with the stupidest quote, credit it to some famous\r\n person, and people will believe it.\" -Barack Obama`\r\n },\r\n {\r\n id: \"a243\",\r\n text: `\"I'm having difficulty breathing. Please move your finger.\" -M`\r\n },\r\n {\r\n id: \"a244\",\r\n text: \"Don't mind me, just passing through.\"\r\n },\r\n {\r\n id: \"a245\",\r\n get text() {\r\n // \\uE010 = :blob:\r\n const BLOB = \"\\uE010\";\r\n const theme = Theme.current().displayName();\r\n const reasons = {\r\n Normal:\r\n `it has this certain elegant simplicity to it. You just know it's the way the developer intended you\r\n to see the game.`,\r\n Metro:\r\n `of the beautiful thin borders, pixel perfect harsh geometric edges, and simply delightfully well\r\n balanced color palette.`,\r\n Dark: \"it's very easy on the eyes, and has this nice playful tone to it in both the colors and the shapes.\",\r\n DarkMetro:\r\n `it's just so soothing to look at, with that perfect blend of professional and playful design,\r\n with just a splash of color.`,\r\n Inverted:\r\n `it gives you these transcendently beautiful color combinations that you would normally never\r\n see in a typical dark theme.`,\r\n InvertedMetro:\r\n `it gives off this very stern vibe, with these highly contrasting colors clashing with a\r\n professional modern sort of design.`,\r\n AMOLED: \"it saves 10% more energy compared to using a light theme. Doesn't everyone love saving energy?\",\r\n AMOLEDMetro:\r\n `it has a nice look to it that resembles the control panel of a sci-fi spaceship. ...No, you can't\r\n actually fly a spaceship, unfortunately.`,\r\n S1: \"it really gets me in the holiday spirit. I can just feel the magic in the air!\",\r\n S2: \"it makes me proud to be Finnish, and proud to celebrate all that we have accomplished as a people.\",\r\n S3: \"it's a beautiful analogue for life, in that it's ever changing and never quite right.\",\r\n S4:\r\n `it has this wonderfully chaotic design, to the point where it's nearly completely impractical.\r\n And there's a certain beauty in that.`,\r\n S5:\r\n `the image of that man permeates throughout all of pop culture. And having this blown-up\r\n picture of him in the background is just rather humorous.`,\r\n S6:\r\n `that beautifully animated background just entrances you, and then the subtle tone and\r\n colors pull you in and fully immerse you into the game.`,\r\n S7: \"I always had fond memories of that background from my childhood.\",\r\n S8: \"it makes it a lot easier to sneak in a little gameplay at the office.\",\r\n S9: \"lol you can't even ever see this in the game\",\r\n S10:\r\n `it has a crisp and soothing design that really appeals, and its background is complex and enthralling.\r\n It gives you the feeling of standing at the helm of a futuristic interstellar ship.`,\r\n S11:\r\n `the Blob is an iconic character in the Antimatter Dimensions official Discord server. It is widely used\r\n to express emotions in a lovely way. It is a fact that the Blobs are evolving. ${BLOB} always seek to be\r\n more expressive. Then someday, a new ${BLOB} is born in the server, to express further emotions. Usually,\r\n ${BLOB} are just blobbling and bouncing around, occasionally merging and dividing. Only ${BLOB} know where\r\n they are from or where they are going to go. Still, ${BLOB} are there, always with me.\r\n You love ${BLOB}, so ${BLOB} loves you too.`,\r\n S12:\r\n `it makes you feel warm and comfortable, as if you were right at home. However, it is highly recommended\r\n to update your theme to the newest theme for the best user experience.`,\r\n };\r\n const reason = reasons[Theme.current().name.replace(/\\s/gu, \"\")];\r\n return `Ah, a fellow ${theme} theme user. I see that you have impeccable taste.\r\n I myself like the ${theme} theme too, because ${reason}`;\r\n },\r\n dynamic: true\r\n },\r\n {\r\n id: \"a246\",\r\n text: \"OoooOOOOooOOO, it's me, the infamous news ghost!\",\r\n },\r\n (function() {\r\n let isFlipped = false;\r\n const normal =\r\n `This news message is a test of \"News 2.0\". News 2.0 will feature things like the ability to\r\n click on news messages to flip them upside down!`;\r\n const flipped =\r\n `¡uʍop ǝpᴉsdn ɯǝɥʇ dᴉlɟ oʇ sǝƃɐssǝɯ sʍǝu uo ʞɔᴉlɔ oʇ ʎʇᴉlᴉqɐ ǝɥʇ ǝʞᴉl sƃuᴉɥʇ ǝɹnʇɐǝɟ llᴉʍ 0˙ᄅ\r\n sʍǝN ˙,,0˙ᄅ sʍǝN,, ɟo ʇsǝʇ ɐ sᴉ ǝƃɐssǝɯ sʍǝu sᴉɥ┴`;\r\n return {\r\n id: \"a247\",\r\n get text() {\r\n return isFlipped ? flipped : normal;\r\n },\r\n reset() {\r\n isFlipped = false;\r\n },\r\n onClick() {\r\n isFlipped = !isFlipped;\r\n return this.text;\r\n }\r\n };\r\n }()),\r\n {\r\n id: \"a248\",\r\n text:\r\n `To be fair, you have to have a very high IQ to understand the news ticker. The humor is extremely subtle,\r\n and without a solid grasp of quantum physics, most of the jokes will go over a typical player's head.`\r\n },\r\n {\r\n id: \"a249\",\r\n text: \"This woman got TONS of Dimension Boosts with this 1 WEIRD TRICK! Galaxies HATE her!\",\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a250\",\r\n get text() {\r\n let scene = \"\";\r\n const chasers = [\r\n [\"🐖\", \"🐢\", \"🦆\", \"🐓\", \"🐜\", \"🐕\", \"🐈\"],\r\n [\"🚶‍\", \"🏃‍️\", \"🏇\", \"🚴‍\"],\r\n [\"🚗\", \"🚓\", \"🚕\", \"🛺\", \"🚙\", \"🚌\", \"🚐\", \"🚎\", \"🚑\", \"🚒\", \"🚚\", \"🚛\", \"🚜\"],\r\n [\"🚁\", \"🛸\"]\r\n ];\r\n for (const set of chasers) {\r\n const chaser = set.randomElement();\r\n for (let i = 0; i < 3; i++) {\r\n if (Math.random() > 0.5 || !scene.includes(chaser)) scene += chaser;\r\n }\r\n scene += \"   \";\r\n }\r\n return scene;\r\n }\r\n },\r\n {\r\n id: \"a251\",\r\n text:\r\n `Hey! It's me, you from the future! I came back to give you this warning: Pay VERY close attention to the\r\n next news ticker. In my timeline we ignored it, and humanity has regretted it ever since.`\r\n },\r\n {\r\n id: \"a252\",\r\n get text() {\r\n return `This message is dilated.`;\r\n },\r\n get unlocked() { return PlayerProgress.realityUnlocked() || PlayerProgress.dilationUnlocked(); }\r\n },\r\n {\r\n id: \"a253\",\r\n text:\r\n `After a surge of complaints from our viewers, we have decided to allow you at home to write your own\r\n messages. Give it a try here: . Or don't. That's fine too.`\r\n },\r\n {\r\n id: \"a254\",\r\n text:\r\n `Antimatter Dimensions Anonymous has shut down due to the failure of their 12-step program.\r\n People would only get to step 8 and then reset.`\r\n },\r\n {\r\n id: \"a255\",\r\n get text() {\r\n return `Bruh Sound Effect #${format(Number.MAX_VALUE, 2)}.`;\r\n }\r\n },\r\n {\r\n id: \"a256\",\r\n text: \"The 9th dimension doesn't exist because the 7th dimension 8 it.\"\r\n },\r\n {\r\n id: \"a257\",\r\n text:\r\n `A the triangular hole in the fabric of reality has caused some letters to\r\n no longer exist. Those letters are: j, k, q, u, x, z`\r\n },\r\n {\r\n id: \"a258\",\r\n text:\r\n `Born too late to explore the world. Born too early to explore the cosmos. But born just in time to\r\n grind for a couple hours for the next big crunch.`\r\n },\r\n {\r\n id: \"a259\",\r\n text:\r\n `Now hold on, I know what you're thinking, \"An M press is an M press, you can't say it's only a half!\" Well,\r\n TJ \"Slabdrill\" Yoshi, hear me out. An M press actually has three parts to it: when M is pressed, when M is\r\n held, and when M is released. Now, usually is the pressing that's useful because that's the only part that\r\n matters; however, sometimes it's sufficient to just use the holding part, which also buys dimensions and\r\n tickspeed upgrades. And as for the release, well, there are currently no cases where that's useful or\r\n important, so don't worry about that part. Now, if we map out the required presses for challenge 2 it would\r\n look like this: /¯\\\\. We merely need to hold (¯) M to reach the first galaxy, we need to press (/) M to\r\n finish the challenge, and we need to press M again to start another challenge. So, how many presses is that\r\n total? Well, it appears to be three, and if we were doing this Eternity in isolation then yes, it would be\r\n three, but in a full-game M Button Challenge run there are other M presses that occur earlier in the run,\r\n such as the M press needed for the first Infinity, so if we take that M press into consideration as well,\r\n then how many M presses does it take? The naive answer would be four: one to enter the challenge, and the\r\n three within the challenge we established earlier; however, we can do better. We can actually do it in\r\n three by simply holding out the first M press to be used for the half M press, because the half M press only\r\n required M to be held, not actually pressed, so in this fashion, Challenge 2 only adds on an additional two M\r\n presses to the run, since the first M press just leeches off the previous M press. So to capture this\r\n phenomenon, we call it 2.5 M presses. On a single Eternity basis, you'd round up that up to three, but in\r\n a full game run, you'd round it down to two. So, in conclusion, since that first M press counts in some\r\n contexts, but adds no additional presses in other contexts, we refer to it as a \"Half M Press\".`\r\n },\r\n {\r\n id: \"a260\",\r\n text:\r\n `It seems that the Replicanti have a very divide-and-conquer method of doing things.\r\n Well, everything at this rate.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked() || PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"a261\",\r\n text:\r\n `Antimatter Dimensions is actually a Roguelite game! If you die, in the afterlife you unlock alternative\r\n features, like having Space Dimensions instead of Time Dimensions. You can even unlock new characters to\r\n play as, including an antimatter clone of yourself!`\r\n },\r\n {\r\n id: \"a262\",\r\n text: \"Vibe check. 🏃‍♀️🏏\"\r\n },\r\n {\r\n id: \"a263\",\r\n text: \"What are gems for? Gems are for housing. Housing for what you ask? Good question.\"\r\n },\r\n {\r\n id: \"a264\",\r\n text: \"A new prestige layer has been announced: Maternity. Get ready to have a baby!\"\r\n },\r\n {\r\n id: \"a265\",\r\n text: \"YOU MUST CONSTRUCT ADDITIONAL DIMENSIONS.\"\r\n },\r\n {\r\n id: \"a266\",\r\n text: \"Hello, how is your day going?\"\r\n },\r\n {\r\n id: \"a267\",\r\n text:\r\n `I have an ant farm, and I want to make them into the world's smallest soccer team. My Aunt Diana wants to\r\n help, and together we gather everyone in the family to plan their season. \"How can we make this Ant Team\r\n matter?\", Di mentions.`\r\n },\r\n {\r\n id: \"a268\",\r\n text: \"👨‍💻Devengers, compile!👩‍💻\"\r\n },\r\n {\r\n id: \"a269\",\r\n text:\r\n `There is a traffic jam in Dimenton. If you plan on travelling in the area, leave early. Here's some live\r\n footage: 🚗🚕🚛🚙🚗🚚🚕🚕🚌🚛🚚🚙🚒🚛🚗🚙🚓🚗🚚🚛🚒🚌🚐🚚🚐🚛🚚🚓 Yeah, Dale, I'd say it\r\n looks pretty bad. And make sure to bring some water and a snack with you, too.`\r\n },\r\n {\r\n id: \"a270\",\r\n text:\r\n `The Galactic Association of News Writers has filed a class action lawsuit against the developers of the\r\n small web game \"Antimatter Dimensions\" for mass plagiarism.`\r\n },\r\n {\r\n id: \"a271\",\r\n text:\r\n `\r\n This news message is a test of \"News 2.0\". News 2.0 will feature things like the ability to listen to\r\n an audio version of any news message!`\r\n },\r\n {\r\n id: \"a272\",\r\n text: \"What's hevier, a pound of bricks, or a pound of antimatter?\"\r\n },\r\n {\r\n id: \"a273\",\r\n text: \"There are no typos in any of these news messages. If you see a typo, the tpyo must be in your brain.\"\r\n },\r\n {\r\n id: \"a274\",\r\n text:\r\n `A large number of mathematicans walk into a bar. They each order 10 times as many beers as the previous.\r\n The bartender says \"My my, that's an order of magnitude!\".`\r\n },\r\n {\r\n id: \"a275\",\r\n text: \"Letter Go Down Idle is the shortest idle game of all time, lasting only 26 seconds.\"\r\n },\r\n {\r\n id: \"a276\",\r\n get text() { return `Fun fact: There are ${GameDatabase.news.length} news messages and counting!`; }\r\n },\r\n {\r\n id: \"a277\",\r\n text:\r\n `Inside you there are two wolves. One is made out of matter. The other\r\n is made out of antimatter. You are exploding.`\r\n },\r\n {\r\n id: \"a278\",\r\n text:\r\n `This is just a friendly note to remind you that you've forgotten to do something really important. I don't\r\n know what it is, but there is definitely something.`\r\n },\r\n {\r\n id: \"a279\",\r\n get text() {\r\n return `Coming soon to all good retailers- Antimatter Dimensions: The Board Game! Enjoy the thrill of watching\r\n huge numbers go up without the need for a PC or mobile phone. Comes complete with everything you need including a\r\n mixed scientific calculator, ${format(Number.MAX_VALUE, 2)} antimatter counters, a high quality plastic\r\n BUY MAX button, and over a\r\n thousand news message cards with all the irrelevant memes you know and love! You can finally enjoy AD the way\r\n it was meant to be played. AD: The Board Game is also available in travel size, so you can even experience\r\n the joy of calculating logarithmic growth while you're on the go! BUY AD: The Board Game TODAY! Warning: may\r\n contain traces of actual matter. Replicanti sold separately. 9th Dimension not included.`;\r\n },\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a280\",\r\n text: \"I hate antimatter. It's rough, coarse, irritating, and it gets everywhere.\"\r\n },\r\n {\r\n id: \"a281\",\r\n text: \"What if instead of creating antimatter, you're actually just losing matter?\"\r\n },\r\n {\r\n id: \"a282\",\r\n text:\r\n `There was a reported sighting of the 9th Dimension, but it has since been\r\n debunked as simply being a 6th Dimension from Australia.`\r\n },\r\n {\r\n id: \"a283\",\r\n text:\r\n `A strange phenomenon occurs when you attempt to shift to a higher dimension when you are in the 8th\r\n dimension. There is no higher dimension, so the universe ejects you back into the 8th dimension with\r\n an incredible velocity. This technique, known as a Dimension Boost, is used by starship pilots and\r\n antimatter enthusiasts everywhere.`\r\n },\r\n {\r\n id: \"a284\",\r\n text: \"Cold fully clothed couples in your area!\"\r\n },\r\n {\r\n id: \"a285\",\r\n text:\r\n `You are now breathing manually. You've now realized there's no comfortable spot in your mouth for your\r\n tongue. You are now manually holding your jaw up. You haven't blinked in a few seconds. You can see a\r\n little bit of your nose at all times.`\r\n },\r\n {\r\n id: \"a286\",\r\n text: \"Why do they call it oven when you of in the cold food of out hot eat the food?\"\r\n },\r\n {\r\n id: \"a287\",\r\n text:\r\n `Sequelitis has escalated to the point that some studios are now producing the sequels before the originals.\r\n Fans of long series wait, as the numbers count down until they can finally find out what is even going on\r\n in the first place.`\r\n },\r\n {\r\n id: \"a288\",\r\n get text() {\r\n const position = player.news.specialTickerData.newsQueuePosition--;\r\n if (position > 1) {\r\n return `Thank you for contacting customer support. Your satisfaction is very important to us, and a company\r\n representative will be with you shortly. You are now at position ${position} in the queue. Thank you for\r\n your patience, and please enjoy these quality selected news messages as you wait.`;\r\n }\r\n return \"Thank you for contacting customer support, this is Jane, how may I help you today?\";\r\n }\r\n },\r\n {\r\n id: \"a289\",\r\n text: \"Click here to disassemble the news ticker for a trace amount of paperclips.\",\r\n onClick() {\r\n player.news.specialTickerData.paperclips++;\r\n GameOptions.toggleNews();\r\n }\r\n },\r\n {\r\n id: \"a290\",\r\n get text() {\r\n const paperclips = player.news.specialTickerData.paperclips;\r\n return `You see, this news isn't normal news. It is being produced by the first news dimension. If you want\r\n to unlock more news, you have to collect enough paperclips to build the second news dimension. You\r\n currently have ${quantifyInt(\"paperclip\", paperclips)}, but you need\r\n ${formatInt(paperclips + 10)} paperclips to afford it.`;\r\n }\r\n },\r\n {\r\n id: \"a291\",\r\n text: \"Considering Hevipelle's nationality, it's a little ironic that he created a game that you can never Finnish.\"\r\n },\r\n {\r\n id: \"a292\",\r\n text:\r\n `Fairies are not real. Anti-fairies are also not real. This has only been the case since last week, when the\r\n two groups came into contact. The planet they were on, also, unsurprisingly, is no longer real.`\r\n },\r\n {\r\n id: \"a293\",\r\n text:\r\n `Hello fellow news messages! 🛹`\r\n },\r\n {\r\n id: \"a294\",\r\n text: \"If you see a news message, and then see it again later, does it become an olds message?\"\r\n },\r\n {\r\n id: \"a295\",\r\n text: \"👁\"\r\n },\r\n (function() {\r\n let wasClicked = false;\r\n const normal = \"Click on this news message to hard reset your game.\";\r\n const clicked = \"You're crazy. You know what, here. Have a paperclip.\";\r\n return {\r\n id: \"a296\",\r\n get text() {\r\n return wasClicked ? clicked : normal;\r\n },\r\n reset() {\r\n wasClicked = false;\r\n },\r\n onClick() {\r\n if (wasClicked) return undefined;\r\n wasClicked = true;\r\n player.news.specialTickerData.paperclips++;\r\n return this.text;\r\n }\r\n };\r\n }()),\r\n {\r\n id: \"a297\",\r\n text: \"I don't think, therefore I'm not.\"\r\n },\r\n {\r\n id: \"a298\",\r\n text: \"Is it crazy how saying sentences backwards makes backwards sentences saying how crazy it is?\"\r\n },\r\n {\r\n id: \"a299\",\r\n get text() {\r\n return `Buy the new Antimatter Dimensions puzzle set now! With a combined ${format(Number.MAX_VALUE, 2)}\r\n pieces, these puzzles are the perfect way to spend some quality time with your family!`;\r\n },\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a300\",\r\n text:\r\n `The board of directors here at A.N.N thinks we should replace the news ticker with a banner\r\n advertisement. Please sign our change.org petition, so we can stop them before it's too late!`\r\n },\r\n {\r\n id: \"a301\",\r\n text: \"The next hour is in 0.2 updates.\"\r\n },\r\n {\r\n id: \"a302\",\r\n text: \"Introducing Antimatter Lite! Zero calories... Same great Crunch.\",\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a303\",\r\n text: \"Roses are red, violets are blue, flag is win, baba is you.\"\r\n },\r\n {\r\n id: \"a304\",\r\n text: \"Hi, how's your day? Hope it's good. If it's not good, we hope playing AD made it a little bit better!\"\r\n },\r\n {\r\n id: \"a305\",\r\n text: \"We now bring you today's weather report. There is a 100% chance of weather.\"\r\n },\r\n {\r\n id: \"a306\",\r\n text: \"FIXING NEWS: Please don't break it again.\"\r\n },\r\n {\r\n id: \"a307\",\r\n text:\r\n `The paperclip maximizer is a thought experiment described by Swedish philosopher Nick Bostrom in 2003. It\r\n illustrates the existential risk that an artificial general intelligence may pose to human beings when\r\n programmed to pursue even seemingly-harmless goals, and the necessity of incorporating machine ethics into\r\n artificial intelligence design. The scenario describes an advanced artificial intelligence tasked with\r\n manufacturing paperclips. If such a machine were not programmed to value human life, or to use only\r\n designated resources in bounded time, then given enough power its optimized goal would be to turn all matter\r\n in the universe, including human beings, into either paperclips or machines which manufacture paperclips.`\r\n },\r\n {\r\n id: \"a308\",\r\n get text() {\r\n const nameList = [\r\n \"Antinology\",\r\n \"Infinifection\",\r\n \"Eternal Light\",\r\n \"Galaxia\",\r\n \"Duplicanti\",\r\n \"Dimensional Explorer\",\r\n \"Techyon\",\r\n \"Realistic\",\r\n \"Celestar\",\r\n \"ERCGDM\",\r\n \"NRG+\",\r\n \"Looty Box\",\r\n \"Symbolic\",\r\n \"Minisofa\",\r\n \"IDEAL\",\r\n \"Appange\",\r\n \"Goggles\",\r\n \"Interval\",\r\n \"Newstar\",\r\n \"HeavyPellet\",\r\n \"Marsa\",\r\n \"Zoology\",\r\n \"Photoric\",\r\n \"Jacfoz\",\r\n \"Orism\",\r\n \"EDIK\",\r\n \"Fision\",\r\n \"Gamma\",\r\n \"Fractiled\",\r\n \"Imnesia\",\r\n \"Fermic\",\r\n \"The Automizers\"\r\n ];\r\n const names = [];\r\n while (names.length < 3) {\r\n const name = nameList.randomElement();\r\n if (!names.includes(name)) names[names.length] = name;\r\n }\r\n const prices = [\r\n Math.floor(Math.random() * 11) / 100,\r\n Math.floor(Math.random() * 11) / 100,\r\n Math.floor(Math.random() * 11) / 100\r\n ];\r\n for (let i = 0; i < 3; i++) {\r\n const price = prices[i];\r\n if (price === 0) prices[i] = `0.00 ◄►`;\r\n else if (Math.random() > 0.5) prices[i] = `+${price} ▲`;\r\n else prices[i] = `-${price} ▼`;\r\n }\r\n return `${names[0]} ${prices[0]}   \r\n ${names[1]} ${prices[1]}   \r\n ${names[2]} ${prices[2]}   `;\r\n }\r\n },\r\n {\r\n id: \"a309\",\r\n text:\r\n `Your daily shades of the sky forecast: Monday: Turquoise\r\n Tuesday: Taupe\r\n Wednesday: Blurple\r\n Thursday: Turquoise/taupe\r\n Friday: Coal dust Saturday: Coal dust\r\n with chances of indigo in the late afternoon\r\n Sunday: Void`,\r\n },\r\n {\r\n id: \"a310\",\r\n text:\r\n `You have reached the automated Antimatter Dimensions support hotline. If you are experiencing a bug in the\r\n game try closing and reopening the app. If that doesn't work, press 1 for web, or 2 for mobile. If you need\r\n advice, press 3. If you need to max all, press m. To support the developers, press 4. To access the FAQ,\r\n press 5. To fix a broken save, press 6. To get an invite to the Discord server, press 7. To see the change\r\n log, press 8. Press 9 to repeat.`\r\n },\r\n {\r\n id: \"a311\",\r\n text:\r\n `This message has been copyrighted by The Walt Disney Company. Your\r\n account will be charged $9.99 upon viewing this message.`\r\n },\r\n {\r\n id: \"a312\",\r\n text:\r\n `But before we start, today's video is brought to you by Antimatter Dimensions™! It's got over 100,000\r\n downloads, and it's completely redefined what a mobile game can do for me. It's got great mechanics, 5\r\n prestige layers, unique and original challenges, a deep skill tree, and the largest numbers I've ever seen.\r\n Like, seriously, look at them. And the best part is, it's free! Yes, that's right. Free. And if you use the\r\n link in the description, you'll start the game with 10 septillion antimatter. Yes, that's right, 10\r\n septillion. So what are you waiting for, click the link in the description and start playing Antimatter\r\n Dimensions™ today!`\r\n },\r\n {\r\n id: \"a313\",\r\n text:\r\n `\"...And then, once you get to level 9,000, you can ascend. Not really sure why you'd want to do that, it\r\n just resets all of your hard earned xp for some small buffs, mechanics like this will never catch on.\"\r\n - some random guy, circa 2012`\r\n },\r\n {\r\n id: \"a314\",\r\n get text() {\r\n const lawID = Math.floor(Math.random * 8901) + 100;\r\n return `Warning: Law ${lawID}-B, drafted by the AI \"duskscarf\", alternatively referred to as \"the giant\r\n space rabbit legislation\" is now in effect in your galactic area. This list of laws and regulation\r\n forbids, among other things; the illegal catching of wild space rabbits, the pacification of tamed\r\n space rabbits, and further scientific research with \"planet grazing\" unless an exception is given\r\n directly by duskscarf. You can find the list of exceptions burned into your eyelids now. In addition,\r\n the genetic modification of giant space rabbits is limited to very specific fields - size alterations\r\n (increasing in size), and cryptobiosis exaggeration. No other genetic modification is allowed outside\r\n of military applications. Thank you for your cooperation. Messages repeats in- Warning: Law ${lawID}-`;\r\n }\r\n },\r\n {\r\n id: \"a315\",\r\n text:\r\n `The developers of the game have announced that a new notation, \"Truest Blind\", will be released. They\r\n report that it will remove the UI, allowing for a more streamlined user experience.`\r\n },\r\n {\r\n id: \"a316\",\r\n text: \"Some people choose to see the ugliness in this world. The disarray. I choose to see the numbers.\"\r\n },\r\n {\r\n id: \"a317\",\r\n get text() {\r\n return `${format(Number.MAX_VALUE, 2, 0)}? Doesn't look like anything to me.`;\r\n }\r\n },\r\n {\r\n id: \"a318\",\r\n text:\r\n `We can't define consciousness because consciousness does not exist. Humans fancy that there's\r\n something special about the way we perceive the world, and yet we follow guides as tight as the\r\n bots do, seldom questioning our choices, content, for the most part, to be told what to do next.`\r\n },\r\n {\r\n id: \"a319\",\r\n text: \"Please disregard any undeserved compliments.\"\r\n },\r\n {\r\n id: \"a320\",\r\n text: \"Introducing the aphone 10: The world's first completely water soluble mobile device!\",\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a321\",\r\n text:\r\n `It must be hard being on your PC all alone. But don't worry; we are still here.\r\n Listening and watching your every step.`\r\n },\r\n {\r\n id: \"a322\",\r\n text:\r\n `Hevipelle announces an Antimatter Dimensions spinoff where you gamble matter in a game of\r\n poker in Dutch mansions: \"Ante matter d'mansions\"`\r\n },\r\n {\r\n id: \"a323\",\r\n text: `var i = \"Omae wa mou shindeiru\" console.log(i - 1 + \"i?\") NaNi?`\r\n },\r\n {\r\n id: \"a324\",\r\n text:\r\n `If you have an idea for a news message, shout it into the void.\r\n It won't get your message into the game, but it's fun!`\r\n },\r\n {\r\n id: \"a325\",\r\n text:\r\n `After the accident at the antimatter reactor in Pripyat last month, concerns are rising about the safety of\r\n antimattter reactors, and many are starting to believe we should return to safer means of energy generation,\r\n such as nuclear.`\r\n },\r\n {\r\n id: \"a326\",\r\n text: \"Antimatter Dimensions is like an ogre... it has layers.\"\r\n },\r\n (function() {\r\n let wasClicked = false;\r\n const normal = \"Click here to restart your device.\";\r\n const clicked = \"Please give Antimatter Dimensions admin access to your device.\";\r\n return {\r\n id: \"a327\",\r\n get text() {\r\n return wasClicked ? clicked : normal;\r\n },\r\n reset() {\r\n wasClicked = false;\r\n },\r\n onClick() {\r\n if (wasClicked) return undefined;\r\n wasClicked = true;\r\n return this.text;\r\n }\r\n };\r\n }()),\r\n {\r\n id: \"a328\",\r\n text:\r\n `News company no longer lets random people submit stories,\r\n instead opting to using qualified writers. Riots ensue.`\r\n },\r\n {\r\n id: \"a329\",\r\n text:\r\n `Introducing Morse Code+++ - the brand new Morse code, now with 20 new\r\n characters, for everyone who wants to slide, zip, and swoosh!`,\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a330\",\r\n text: \"Any sufficiently primitive magic is indistinguishable from technology.\"\r\n },\r\n {\r\n id: \"a331\",\r\n text: \"I have no nose, and I must sneeze!\"\r\n },\r\n {\r\n id: \"a332\",\r\n text: \"♪ When you try your worst and you still succeed. ♪\"\r\n },\r\n {\r\n id: \"a333\",\r\n text: `The wildly popular theme song \"Gotta set 'em free\" has reached 500 million downloads in its first week.`\r\n },\r\n {\r\n id: \"a334\",\r\n text:\r\n `Introducing the all-new anti-alignment chart! Featuring groundbreaking new combinations such as \"lawful-chaotic\"\r\n and \"evil-good\"! And with a dazzling third axis for 'Jazziness'~ Identify yourself as chaotic-lawful-unjazzy NOW\r\n for the impossibly low price of $-59.99! Terms and conditions apply. Batteries not included.`,\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"a335\",\r\n text:\r\n `Due to new complications regarding \"The Game\", protests have risen all over the anti-verse. Thus, governments\r\n are forced to change the rule of The Game, stating that you win The Game if someone informs you about it,\r\n instead of losing it.`\r\n },\r\n {\r\n id: \"a336\",\r\n text: `Attention residents of zone 4 [commonly referred to as 'dark zone'], sector ϰ, (01,05). Do\r\n not leave your places of residence. I repeat, do not leave your places of residence. Do not go outside.\r\n Earthology's finest meteorological supercomputers, as well as many witches, are consistently claiming a\r\n 'generally weird vibe' tomorrow and we quite frankly don't want to find out what that means.`\r\n },\r\n {\r\n id: \"a337\",\r\n text:\r\n `Technological convergence is the concept that all technologies will converge into a single technology. It is\r\n a commonly expressed idea since the dawn of the Information Age, and can be seen in many places and devices\r\n such as smartphones, or the internet. Antimatter Dimensions is an example of technological convergence,\r\n specifically within media. Using a genius idea called 'not caring' mixed in with the innovative solution of\r\n 'blind luck', it merges together a subpar game, and a subpar news ticker, to create a mediocre experience\r\n that despite being mostly a game, occasionally acts as a news source slightly above the Matter Dimensions\r\n Newsticker. Truly, an achievement for all businesses to aspire to strive towards, and hopefully actually beat.`\r\n },\r\n {\r\n id: \"a338\",\r\n text: \"Ancient cave paintings with the number 5 have been found. It's implied they were waiting for something.\"\r\n },\r\n (function() {\r\n let wasClicked = false;\r\n const normal = \"Read More\";\r\n const clicked = \"More\";\r\n return {\r\n id: \"a339\",\r\n get text() {\r\n return wasClicked ? clicked : normal;\r\n },\r\n reset() {\r\n wasClicked = false;\r\n },\r\n onClick() {\r\n if (wasClicked) return undefined;\r\n wasClicked = true;\r\n return this.text;\r\n }\r\n };\r\n }()),\r\n {\r\n id: \"a340\",\r\n text:\r\n `That's quite a lot of antimatter you're making. The game developer is impressed. Because this message is\r\n prerecorded, any observations related to your antimatter production are speculation on our part. Please\r\n disregard any undeserved compliments.`\r\n },\r\n {\r\n id: \"a341\",\r\n text: \"Game under construction: All mechanics must wear hardcaps.\"\r\n },\r\n {\r\n id: \"a342\",\r\n text: \"Of course paperclips have a use, you use them to hold papers together. But who uses paper anymore?\"\r\n },\r\n {\r\n id: \"a343\",\r\n get text() {\r\n const fakeProgress = Math.pow(player.records.realTimePlayed, 25);\r\n // Caps in ~68 years of real playtime then turns into \"Infinite%\"\r\n return `Global Challenge - across all AD players, accumulate ${format(Number.MAX_VALUE, 2)} contest-paperclips\r\n (noted by the\r\n square ends), to receive an event-exclusive metal bagpipe, capable of giving +2 AM/s, as well as an extra\r\n tickspeed while above ${format(1e200)} tickspeed upgrades! Current global progress -\r\n ${format(fakeProgress)}/${format(Number.MAX_VALUE, 2)}\r\n (${formatPercents(Math.log10(fakeProgress) / Math.log10(Number.MAX_VALUE), 3)})`;\r\n }\r\n },\r\n {\r\n id: \"a344\",\r\n text:\r\n `Real life is an enigma. No one knows how it really works. There are many questions left unanswered:\r\n What is the meaning of life? Are we all living inside a simulation? How do you do antitables? Where and\r\n how did existence begin? These are all the questions that always linger in the back of our heads, and\r\n the answers to them? We may never know.`\r\n },\r\n {\r\n id: \"a345\",\r\n text: \"Japanese complain, as haikus can't be shown here. Conflict arises.\"\r\n },\r\n {\r\n id: \"a346\",\r\n text:\r\n `Did you know Antimatter Dimensions is also available on Android? \r\n Click here to check it out!`\r\n },\r\n {\r\n id: \"a347\",\r\n text:\r\n `Pluto isn't a state. The 50 states, as we all know, are: Adverb, Air, Artemis, Asia, Atlantic, Bargaining,\r\n Bilabial, Braille, Candela, Comma, Dacron, Dairy, Dative, Dexterity, Disenchanter, Dodecahedron, Erie,\r\n Eukaryota, Folklore, Great Pyramid, Halogen, Igneous, Italy, Kansas, Kilimanjaro, Lambda, Leviticus, Libra,\r\n Liquid, Lymphatic, Mesozoic, Microwave, Muon, North, Nova Scotia, Octagon, October, P = NP, Perissodactyla,\r\n Polk, Potassium, Pulley, Quinary, Rook, Saturn, Tiana, Tiger, Varaha, Yale, and Yellow.`\r\n },\r\n {\r\n id: \"a348\",\r\n text: \"[News Message removed by moderator]\"\r\n },\r\n {\r\n id: \"a349\",\r\n get text() {\r\n const chapters = [\r\n `We have come, writers, painters, sculptors, architects, passionate enthusiasts of the hitherto untouched\r\n beauty of Paris, to protest with all our strength, all our indignation, in the name of the unknown French\r\n taste, in the name of art and of French history threatened, against the erection, in the heart of our\r\n capital, of the useless and monstrous Eiffel Tower, which public malignity, often marked by common sense\r\n and the spirit of justice, has already named of \"Tower of Babel\". Without falling into the exaltation of\r\n chauvinism, we have the right to proclaim that Paris is the unrivaled city in the world. Above the streets,\r\n the widened boulevards, and the magnificent walks, rise the most noble monuments that the human race has\r\n produced. The soul of France, creator of masterpieces, shines amidst this august flowering of stones. Italy,\r\n Germany and Flanders, so justifiably proud of their artistic legacy, possess nothing comparable to ours,\r\n and from all corners of the universe Paris attracts curiosities and admiration.`,\r\n `Are we going to let all this be profaned? Will the city of Paris go on to associate itself longer with the\r\n baroques, with the mercantile imaginations of a machine builder, to become irreparably ugly and dishonor\r\n itself? For the Eiffel Tower, which commercial America itself would not want, is, doubtless, the dishonor\r\n of Paris. Everyone feels it, everyone says it, everyone deeply grieves it, and we are only a weak echo of\r\n the universal opinion, so legitimately alarmed.`,\r\n `Finally, when the foreigners come to visit our Exhibition, they will exclaim, astonished: \"What? It is this\r\n horror that the French have found to give us an idea of their taste so much vaunted? And they will be right\r\n to make fun of us, because the Paris of the sublime gothics, the Paris of Jean Goujon, Germain Pilon, Puget,\r\n Rude, Barye, etc., will have become the Paris of M. Eiffel.`,\r\n `It suffices, moreover, to realize what we are doing, to imagine for a moment a vertiginously ridiculous\r\n tower dominating Paris, as well as a gigantic factory chimney, crushing with its barbarian mass. Our Lady,\r\n the Sainte-Chapelle, the dome of the Invalides, the Arc de Triomphe, all our humiliated monuments, all our\r\n shrunken architectures, which will disappear in this astonishing dream. And for twenty years, we will see\r\n how to stretch out over the entire city, still quivering with the genius of so many centuries, we will see\r\n the odious shadow of the odious column of bolted sheet metal stretch like an ink stain ...`,\r\n `It's up to you, Monsieur and dear compatriot, to you who love Paris so much, who have embellished it so\r\n much, who have so often protected it against the administrative devastation and the vandalism of industrial\r\n enterprises, that it is the honor to defend it once more. We leave it to you to plead the cause of Paris,\r\n knowing that you will deploy all the energy, all the eloquence that must inspire an artist such as you love\r\n what is beautiful, what is great, what is right ... And if our cry of alarm is not heard, if our reasons are\r\n not listened to, if Paris is stubborn in the idea of dishonoring Paris, we will have, at least, you and us,\r\n hear a protest that honors.`\r\n ];\r\n const chapter = chapters[player.news.specialTickerData.eiffelTowerChapter];\r\n player.news.specialTickerData.eiffelTowerChapter = (player.news.specialTickerData.eiffelTowerChapter + 1) % 5;\r\n return chapter;\r\n }\r\n },\r\n {\r\n id: \"a350\",\r\n text:\r\n `Alexander wept, for he had just watched a pop-culture lecture on quantum mechanics by Anaxarchus and\r\n realised that there are infinite worlds to conquer, and that he couldn't even be the lord of one without\r\n a mutiny or 6 stopping him.`\r\n },\r\n {\r\n id: \"a351\",\r\n text: \"Hi, I'm here to complain about the poor quality of the copper that has just been delivered to me.\"\r\n },\r\n {\r\n id: \"a352\",\r\n get text() {\r\n return `\r\n This news message is antimemetic. You will forget that it exists shortly.`;\r\n }\r\n },\r\n (function() {\r\n let wasClicked = false;\r\n const normal = \"💣\";\r\n const clicked = \"💥\";\r\n return {\r\n id: \"a353\",\r\n get text() {\r\n return wasClicked ? clicked : normal;\r\n },\r\n reset() {\r\n wasClicked = false;\r\n },\r\n onClick() {\r\n if (wasClicked) return undefined;\r\n wasClicked = true;\r\n return this.text;\r\n }\r\n };\r\n }()),\r\n {\r\n // Blob from the blob font\r\n id: \"a354\",\r\n text:\r\n `\r\n \\uE010`\r\n },\r\n {\r\n id: \"a355\",\r\n text:\r\n `
`\r\n },\r\n {\r\n id: \"a356\",\r\n text: `Press \"Choose save\" to explore the other 2 parallel universes.`\r\n },\r\n {\r\n id: \"a357\",\r\n text:\r\n `The Scientific Community remains baffled over the meaning of 286,078. \"We're certain it's related to potatoes,\r\n but we need to do more tests.\" one researcher notes.`\r\n },\r\n {\r\n id: \"a358\",\r\n text: `Press \"Choose save\" to explore the other 2 parallel universes.`\r\n },\r\n {\r\n id: \"a359\",\r\n text:\r\n `Local incremental game dev makes physicists unhappy again. They claim\r\n \"the physics violations and blatant use of technobabble has gone too far\".`\r\n },\r\n {\r\n id: \"a360\",\r\n text: `Press \"Choose save\" to explore the other 2 parallel universes.`\r\n },\r\n {\r\n // Discord contest winner #1\r\n id: \"a361\",\r\n text: \"We're having a sale of top quality waterproof towels! Be sure to get some on your way out!\"\r\n },\r\n {\r\n // Discord contest winner #2\r\n id: \"a362\",\r\n text:\r\n `Hevipelle Incorporated is proud to present a new brand of cereal: The Big Crunch! This nutritious breakfast\r\n meal contains crunchy antimatter O's, pocket dimensions, Infinity-flavored Sugar Cubes, exponentially-growing\r\n Replicanti, and Eternity-flavored Marshmallows. Now you can experience Antimatter Dimensions inside of your\r\n stomach! Warning: Side effects may include spontaneous combustion, nausea, vomiting, diarrhea,\r\n dematerialization, vaporization, heart failure, the end of the world, or death. If you are not made out of\r\n antimatter, consult an educated professional on Antimatter Consumption before eating 'The Big Crunch'.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"a363\",\r\n text:\r\n `The most expensive thing about a dragon isn't the gold you need to fill the nest, the magic you sacrifice\r\n entire empires for, or the billions of wars you need to supply the decillions of adamantium. No, it is the\r\n dirt. It's always the dirt. Don't ask the royal treasurers why we have more creatures on the plane than\r\n molecules of dirt. Just keep summoning bulldozers through arcane rituals and keep looking through the\r\n earth's core for more scraps of dirt.`\r\n },\r\n {\r\n id: \"a364\",\r\n get text() {\r\n const products = [\r\n `Illustration 320-A - True Office Graphics Wall. One of our senior consultants will observe your business,\r\n and come up with a list of words to be added to a hallway, to remind all employees of the values of their\r\n company. Known to decrease employee motivation by at least 25%! Past walls include words such as Black\r\n Hole, Catastrophic, Haphazard, compromising, Inferior, Delusional, Inefficient and Collapsed! Order now!`,\r\n `Furniture 150-A (2034 edition) - 3-person seating device. A revolutionary new design for office waiting\r\n areas, it consists of a large 3 legged stool, placed upside down for aesthetic benefits. Perfect for\r\n getting employees back to work, in a new set of shoes, or pants. It isn't tied down or glued to the\r\n floor like other editions, but we do make sure that other employees look at you funny if you edit our\r\n art. No need to order, it comes as a complimentary service for any customer!`,\r\n `Furniture 0853 - \"The Rack\" - this revolutionary new workspace, from the inventors of the crawling\r\n desk, helps your employees overcome their limits and ensure that your whole business is screaming -\r\n in agony! At times chosen by our revolutionary \"pAIn AI\", it will suggest mandatory stretchers for all\r\n users. Recommended by your local gaol, order now! *Warning, AOS&C only takes responsibility for acts\r\n of god such as lightning or merciful purifications by deities.`\r\n ];\r\n const product = products.randomElement();\r\n return `Antimatter Office Supplies and Co present their new \"Modern Office\" catalogue! Each template\r\n design can be customised for your business, and offers a unique way to promote business synergy! Here\r\n is a sneak preview of one of their newest items: ${product}`;\r\n },\r\n },\r\n {\r\n id: \"a365\",\r\n text: \"I don't like Replicanti. They're coarse and rough and irritating and they replicate everywhere.\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked() || PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"a366\",\r\n text:\r\n `Stage magic, such as illusions, has an interesting history. A mix of charlatans attempting to scam people,\r\n and actors acting out performances using illusions or sleight of hand. Altering styles of magic, and continued\r\n discourse and disagreements over whether it should be stated that it is an illusion, and whether people will\r\n magically realise that it is fake and that it does not need to be stated. A schism a century ago split magic\r\n into 2 types - gentle, simplistic utilitarian tricks and grand spectacles involving the flashy machinery and\r\n beautiful assistants - originating from the popularisation of a single trick involving sawing a person in\r\n half. Much more interesting than watching some TV psychic pretending to pull a lottery ticket out from a news\r\n ticker, at any rate. Speaking of which, tonight's lottery numbers are 23, 10, 81, 106.4, 3 + 2i, and e.`\r\n },\r\n {\r\n id: \"a367\",\r\n text:\r\n `Snakes look scary, and they absolutely are and you should run, calmly, from every snake you see. But, luckily\r\n for you, snakes don't often take the initiative to bite - excluding the really mean ones. If they've gone out\r\n of their way to bite you, there's generally 4 reasons. 1- The Snake is Mean. 2- You scared the snake. Snakes\r\n are scary to you, but you are scary to snakes. Be the bigger lizard when you meet a snake. 3- You entered the\r\n territory of the snake. Often, a snake will warn you if you do this - this is why rattle snakes rattle. If you\r\n don't listen to the warning, they'll bite you. And the most important reason, 4- the snake finds you ugly.\r\n This is the fault of the snake's ocular system, but is the most common form of bites in at least 2\r\n jurisdictions. And if you get bitten by a snake, by virtue of being a scarily ugly lizard who keeps stumbling\r\n into the wrong bushes, there's 3 main things you can do. First, calm down, again, and stay calm. Secondly,\r\n immobilise the area around site that was bitten, and try using a compression bandage. Snake venom vision is\r\n entirely based on movement of the object it's currently in. And third, calmly, call for help from other\r\n lizards. Excluding the snake. The snake's too mean to help you.`\r\n },\r\n {\r\n id: \"a368\",\r\n text:\r\n `I suspect more people would press the hard reset button if genuine effort was done to make the process as\r\n miserable as possible. A slow removal of resources, with unique nerfs just to stop you from progressing. The\r\n destruction of UI, turning from usable to unusable, arcane and unwieldy, requiring memory and luck to even\r\n continue this quest. Randomness, against the player for even the simplest actions, to punish the thought of\r\n progression. Hooks and traps and disasters and low rolls for a chance see progression, which entirely consists\r\n of putting the state of the game further from anything deemed reasonable. A situation where the character is\r\n broken just to tell you to leave… but the damage is already done, if it is even possible to turn back. And…\r\n from there, a hard reset probably isn't enough. It would have to be… harder. Not just a hard reset, but a\r\n cookie, something in local storage designed specifically to make it impossible to actually start a new game.\r\n Or, something more malicious? And despite this, people would still throw themselves into this nightmare, for\r\n humanity knows no bounds in its endless curiosity. No amount of warnings will stop everyone. They will find\r\n a way to proceed, given it exists, and may even complain when it isn't as punishing as expected. So, do you\r\n want to push the button, and experience the depths of despair, willingly? Hopefully not, because it isn't here.`\r\n },\r\n {\r\n id: \"a369\",\r\n text:\r\n `An empire-building project is one of the most difficult things to implement. Thousands of hours of time,\r\n planning, effort, consultation, and political manoeuvring to create truly airbreaking endeavours. Take the\r\n Realmway Revitalisation Roadmap, a revolutionary program referred to by the 3 R's, which is known as the\r\n pinnacle of the most famous of the empire's bureaucratic infrastructure committees - the EMIF (empire magic\r\n infrastructure foundation) - not to be confused with the EAIF (Electric airship investment fund) or the\r\n NMIC (National Magical Infrastructure Coalition). The goal of the three R's, set out by the EMIF, was to\r\n reinstate a mana trade corridor for SMSS (Small-Medium Steam Shuttles), a vital part of the burgeoning\r\n consolidated states after their unfortunate pillaging during the NELC (ninth empire liberation crusade).\r\n The three R's was a multi stage project - stage 1 was a survey glyph in the air - all big things start with\r\n a small step. Stage 2, the unveiling of the EMOF (Empire Mechanical Obliteration Forcefield) had over 50\r\n dignitaries - multiple emperors (from federated states to organisational leaders), foreign rulers, EMDF\r\n (Effluent Manifested Destiny Families) who currently own the land, and even some of the forecast witches,\r\n all gathered together to unveil the project in a show of EOSF (Empire Official Solidarity Friendships).\r\n Sadly, the project was eventually cancelled at stage 215, as the creation of the EMTF (Excrement Material\r\n Transmutation Facility) for the contractors exploded after coming into contact with a SMEA (Small-Medium\r\n Electric Airship) placing the last survey peg from stage 459 due to a time vortex created by an argument\r\n at the WAIC (Witches Annual Infrastructure Committee) as part of stage 56. Truly, tragic stuff - 3 award\r\n nominations and 2 wins during that process due to EBIF (Efficient Bureaucracy In (the) Field).`\r\n },\r\n {\r\n id: \"a370\",\r\n text:\r\n \"Man tries installing cookies to store computer data, accidentally cleans them due to being too delicious.\"\r\n },\r\n {\r\n id: \"a371\",\r\n text:\r\n `Pop quiz: there are 3 doors, you pick a door at random, and get to keep what's behind the door. The doors\r\n have 2 golden goats, 2 silver goats, and a gold and a silver goat. After you pick a door, the door with the\r\n lowest $ worth of goats will be opened and shown to you. After this, you are given the choice to swap.\r\n What is the probability that you will swap doors?`\r\n },\r\n {\r\n id: \"a372\",\r\n text:\r\n `If you're ever lost in a forest, look at the trees around you. It's said that moss grows north, so by the\r\n time you've finished looking at a tree, a roaming guitarist will run up to you and ask if you want to hear\r\n wonderwall`\r\n },\r\n {\r\n id: \"a373\",\r\n text:\r\n `As a symbol of friendship between the Matter and Antimatter Periodic Tables, they have done an exchange of\r\n elements. The element of Mony is now part of the Antimatter Periodic Table, while Antimony has been added\r\n to the regular Periodic Table.`\r\n },\r\n {\r\n id: \"a374\",\r\n text: \"This newsticker was specifically designed for promotional purposes only.\"\r\n },\r\n {\r\n id: \"a375\",\r\n text:\r\n `As you probably know, it is traditional to give gifts made of certain materials to celebrate anniversaries\r\n The classic ones are silver at 25 and gold at 50. Here are some little known anniversary gifts:\r\n Pineapple - 37 years Hellstone - 66 years Lizardite- 82 years Nitrowhisperin- 86 years Taconite - 95 years\r\n Hatchettite - 100 years Electrum - 110 Yakitoda - 111 years years Fordite - 119 years Bloodstone - 120 years\r\n Celestite - 125 years Jet - 140 years Petroleum - 145 years Steel - 150 years Cummingtonite - 198 years\r\n Concrete - 200 years Laserblue- 210 years Painite - 250 years Parisite - 255 years Parasite - 260 years\r\n Carbon Nanotubes - 300 years Mercury - 310 years Martian Soil - 340 years Neptunium - 370 years\r\n Uranium - 380 years Plutonium - 390 years Xium - 400 years Blaze rods - 420 years Asbestos - 430 years\r\n Gabite - 444 years Crimtane - 666 years Lagga - 777 years`\r\n },\r\n {\r\n id: \"a376\",\r\n text:\r\n `Big tech companies have collaborated to create a new neural network that's trained in the generation of rap\r\n lyrics, called RAP-3. First lyrical generations include \"Call me prometheus 'cuz I bring the fire\" and\r\n \"Call me Sonic the way I'm gettin' these rings\". Critics say it still has a way to go before it replaces\r\n traditional music.`\r\n },\r\n {\r\n id: \"a377\",\r\n text:\r\n `With the new android OS, android 20, being predicted in the near future, the new system for internal codenames\r\n has been revealed. The first codename, as it currently stands, is “antimatter”. This conveniently works well\r\n with the predicted generation of phones that will use Android 20 - these phones will be the most explosive\r\n ever due to their annihilation-based power source. Sources tell us that a billion dollar research unit is\r\n working on a name for android 21, by tradition to start with B, “that doesn't sound too bad when you think\r\n about it”. `\r\n },\r\n {\r\n id: \"a378\",\r\n text: \"If every antimatter were an apple, you would have enough to keep all the doctors away for 3000 years\"\r\n },\r\n {\r\n id: \"a379\",\r\n get text() {\r\n return `THE ${format(Number.MAX_VALUE, 2)} PIECE! THE ${format(Number.MAX_VALUE, 2)} PIECE IS REAL!`;\r\n }\r\n },\r\n {\r\n id: \"a380\",\r\n text:\r\n `The FitnessGram Pacer Test is a multistage aerobic capacity test that progressively gets more difficult\r\n as it continues. The 20 meter pacer test will begin in 30 seconds. Line up at the start. The running speed\r\n starts slowly, but gets faster each minute after you hear this signal. [beep] A single lap should be\r\n completed each time you hear this sound. [ding] Remember to run in a straight line, and run as long as\r\n possible. The second time you fail to complete a lap before the sound, your test is over. The test will\r\n begin on the word start. On your mark, get ready, start.`\r\n },\r\n {\r\n id: \"a381\",\r\n text: \"Why do they call it second dimension when you of in the first dimension of out second eat the dimension?\"\r\n },\r\n {\r\n id: \"a382\",\r\n text:\r\n \"Any AD player born after 1993 can't joke... All they know is 5 hours, paperclips, 1.79e308 & Ninth Dimension.\"\r\n },\r\n {\r\n id: \"a383\",\r\n text:\r\n \"The only thing better than an anti-joke is two. Like the number. Not two anti-jokes. I just like the number two.\"\r\n },\r\n {\r\n id: \"a384\",\r\n text: \"Click here to make nothing happen.\"\r\n },\r\n {\r\n id: \"a385\",\r\n text:\r\n `I wonder... Why did Apple skip iPhone 9 and Microsoft skip Windows 9...\r\n Was it because they were bribed by a game developer?`\r\n },\r\n {\r\n id: \"a386\",\r\n text: \"9 out of 10 doctors recommended against trying to touch antimatter. We haven't heard back from the 10th one.\"\r\n },\r\n {\r\n id: \"a387\",\r\n text:\r\n `In spring, Man built a pillar. In summer, another. Throughout autumn they held. But in winter, one experienced\r\n an unexpected (See definition in: Abstract Multidimensional Retrocausal Physics) ZW-Class \"Ascension\" event,\r\n and is hypothesised to have fallen into a dimensional loophole, where it, by definition, has to take up more\r\n dimensions than itself. Current efforts at retrieving the pillar and returning it to baseline reality have been\r\n unsuccessful (See test log 2453-3e9a-50d1-84fc for more details)`\r\n },\r\n {\r\n id: \"a388\",\r\n text:\r\n `In light of recent events, we'd like to issue an official statement. Antimatter Dimensions™ is in no way\r\n affiliated with Jimmy's Causality Violating Brainworms™. We do not endorse, no were we involved in their creation\r\n of the product which was involved in several catastrophic dimension-destabilising and reality-toppling incidents.\r\n We almost certainly did not sign a contract at 5:30:26 UTC on 08/12/1994 after discussing how we could benefit\r\n from destabilising and warping dimensions. There was no industrial zone constructed in the 5th Orion Arm of the\r\n వ' galaxy, and even if they were we did not install localised anomalies following the Scranton Reality Anti-anchor\r\n mechanism. Additionally, no time loop is occurring at Acroamatic Abatement Facility AAF-D in site 43. We apologise\r\n if things seemed this way, and we will be more thorough in cracking down misinformation in the future.`\r\n },\r\n {\r\n id: \"a389\",\r\n text: \"If only we could condense the antimatter in the universe into cookies...\"\r\n },\r\n {\r\n id: \"a390\",\r\n text:\r\n `Can you believe it guys? Update, just 5 hours away. Update is in a 5 hours. Wahoo. I'm so happy about this\r\n information. Update just 5 hours away. Oh wow. Can you believe it? Update just in a 5 hours. It got here so\r\n fast. Update, just 5 hours.`\r\n },\r\n //Custom Newstickers start here\r\n {\r\n id: \"a391\",\r\n text:\r\n `I'll make my own newstickers, with blackjack and hookers.`\r\n },\r\n {\r\n id: \"a392\",\r\n text:\r\n `Will Royal put in all the rejected newstickers from #android-newsticker-event and #newsticker-suggestions? The world may never know (no).`\r\n },\r\n {\r\n id: \"a393\",\r\n text:\r\n `Don't forget to vote in the Ass Election 2023 -Mage`\r\n },\r\n {\r\n id: \"a394\",\r\n text: \"Looking for more mods to play? Check out https://github.com/ArchercatNEO/AD-Mod-DB (may not be up to date).\"\r\n },\r\n {\r\n id: \"a395\",\r\n text: \"moist.\"\r\n },\r\n {\r\n id: \"a396\",\r\n text: \"POV: You've been stuck on an esclator of 2+ hours because power went out\"\r\n },\r\n {\r\n // the is the Blob from the blob font\r\n id: \"a397\",\r\n get text(){\r\n let x = (player.records.totalTimePlayed.div(8.64e7).mul(2));\r\n return `Post a \r\n \\uE010 for every day Hexa (and Royal) delay the update. (Hexa and Royal have recived a combined ${format(x, 2, 2)} \r\n \r\n \\uE010s)`;\r\n }\r\n },\r\n {\r\n id: \"a398\",\r\n text: \"They say if you want an update, and ping Hexa three times in a row you'll...\"\r\n },\r\n {\r\n id: \"a399\",\r\n text:\r\n `It is the year 2422. The update still isn't out. Royal and his team are totally not procrastinating...we swear`\r\n },\r\n {\r\n id: \"a400\",\r\n text:\r\n `fatty jumpscare`\r\n },\r\n {\r\n id: \"l1\",\r\n text: \"You just made your 1,000,000,000,000,000th antimatter. This one tastes like chicken.\",\r\n get unlocked() { return Currency.antimatter.exponent === 15; }\r\n },\r\n {\r\n id: \"l2\",\r\n text: \"Nerf the galaxies please.\",\r\n get unlocked() { return player.galaxies === 2 || Currency.infinities.gt(0); }\r\n },\r\n {\r\n id: \"l3\",\r\n text: \"What do you mean, more than two dimensions??? We're on a screen, clearly there are only 2 dimensions.\",\r\n get unlocked() { return AntimatterDimension(3).amount.gt(0) || DimBoost.totalBoosts > 0; }\r\n },\r\n {\r\n id: \"l4\",\r\n text: \"How much is Infinity? -literally everyone at least once\",\r\n get unlocked() { return AntimatterDimension(8).amount.eq(190) || Currency.infinities.gt(0); }\r\n },\r\n {\r\n id: \"l5\",\r\n text: \"Eh, the Fourth Dimension is alright...\",\r\n get unlocked() { return AntimatterDimension(4).amount.gt(0) && AntimatterDimension(5).amount.eq(0); }\r\n },\r\n {\r\n id: \"l6\",\r\n text:\r\n `Antimatter people seem to be even more afraid of 13 then we are. They destroyed\r\n entire galaxies just to remove 13 from their percents.`,\r\n get unlocked() { return player.galaxies > 0 || Currency.infinities.gt(0); }\r\n },\r\n {\r\n id: \"l7\",\r\n text: \"To understand dimensional sacrifice, you do actually need a PhD in theoretical physics. Sorry!\",\r\n get unlocked() { return player.sacrificed.e >= 10 || DimBoost.totalBoosts >= 6; }\r\n },\r\n {\r\n id: \"l8\",\r\n text: \"A new group for the standardisation of numbers have come forward with a novel new format involving emoji's.\",\r\n get unlocked() { return player.requirementChecks.permanent.emojiGalaxies > 0; }\r\n },\r\n {\r\n id: \"l9\",\r\n text: \"Antimatter ice cream stand has recently opened- they have octillions of flavors!\",\r\n get unlocked() { return player.records.totalAntimatter.e >= 27; }\r\n },\r\n {\r\n id: \"l10\",\r\n text:\r\n `The Heavenly Pelle has generated too much antimatter and needed to create another galaxy.\r\n This one can be seen in the southwestern sky.`,\r\n get unlocked() { return player.galaxies > 0 || Currency.infinities.gt(0); }\r\n },\r\n {\r\n id: \"l11\",\r\n text: \"9th Dimension is a lie.\",\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l12\",\r\n text: \"The square root of 9 is 3, therefore the 9th dimension can't exist.\",\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l13\",\r\n text: \"You got assimilated by the 9th dimension? Just call your doctor for mental illness!\",\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l14\",\r\n text: \"Why is there no 9th dimension? Because 7 8 9.\",\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l15\",\r\n text: \"The 9th dimension cannot exist because the Nein-speaking nazis died in WW2.\",\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l16\",\r\n text:\r\n `If you break the fourth wall... well, there's still the fifth, sixth, seventh, and eighth to get through\r\n before you encounter bad things, so you should be fine`,\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l17\",\r\n text:\r\n `Conditions must be met for Hevipelle to sleep. First, it needs to be a blue moon. Second, a specific town\r\n in the arctic must have not seen light for a month. Third, he needs to release an AD update. And finally,\r\n no one on the Discord can be on dimension 9. Only then can he rest, for up to 6 hours, before waking up\r\n forcefully to avoid getting the offline achievement.`,\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l18\",\r\n text: \"If the 9th dimension is all evil, then is 3 the root of all evil?\",\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l19\",\r\n text:\r\n `I'll have 1e29 number 9s, a number 1e9 large, a number 6 with extra replicanti, a number 1e7, two 4e5s,\r\n one with matter, and a large time vortex.`,\r\n get unlocked() {\r\n return DimBoost.totalBoosts >= 5 ||\r\n player.galaxies > 0 ||\r\n PlayerProgress.infinityUnlocked();\r\n }\r\n },\r\n {\r\n id: \"l20\",\r\n text: \"Infinity: the one thing that's supposed to break.\",\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"l21\",\r\n get text() { return `I've got ${format(Number.MAX_VALUE, 2)} problems, but none of them antimatter.`; },\r\n get unlocked() { return Currency.infinities.gt(0) && !PlayerProgress.hasBroken(); }\r\n },\r\n {\r\n id: \"l22\",\r\n text: \"Anti Emoji Movie a huge hit!\",\r\n get unlocked() { return player.requirementChecks.permanent.emojiGalaxies >= 5; }\r\n },\r\n {\r\n id: \"l23\",\r\n text: \"If this game was made by Valve, Zero Deaths would be impossible.\",\r\n get unlocked() { return Achievement(64).isUnlocked; }\r\n },\r\n {\r\n id: \"l24\",\r\n text: \"Florida man attempts to get Zero Deaths on first run, is stopped by heat death of the universe.\",\r\n get unlocked() { return Achievement(64).isUnlocked; }\r\n },\r\n {\r\n id: \"l25\",\r\n text: \"\\\"Having done half the achievements isn't much of an achievement\\\" -Boo\",\r\n get unlocked() { return Achievements.effectiveCount >= GameDatabase.achievements.normal.length / 2; }\r\n },\r\n {\r\n id: \"l26\",\r\n text:\r\n `Thanos is gonna be super dissapointed when he shows up with a fully powered Infinity gauntlet, and Hevi\r\n has a fully powered Eternity gauntlet.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l27\",\r\n text:\r\n \"New strange material was been found. It seems to grow exponentially, but only helps with antimatter production.\",\r\n get unlocked() { return PlayerProgress.replicantiUnlocked() && player.replicanti.chance === 0.01; }\r\n },\r\n {\r\n id: \"l28\",\r\n text: \"It seems this \\\"replicanti\\\" stuff won't be growing any faster now.\",\r\n get unlocked() { return player.replicanti.chance === 1 && player.replicanti.interval === 1; }\r\n },\r\n {\r\n id: \"l29\",\r\n text:\r\n `If you wrote down 3 numbers a second, it would take you less time to write down your antimatter\r\n amount than it would Hevipelle to update the game.`,\r\n get unlocked() { return Currency.antimatter.exponent >= 100000; }\r\n },\r\n {\r\n id: \"l30\",\r\n text: \"Does Hevi just pick quotes to put into the game?\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 30; }\r\n },\r\n {\r\n id: \"l31\",\r\n text: \"New news company has become rivals with us. They are made entirely of antimatter.\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 80; }\r\n },\r\n {\r\n id: \"l32\",\r\n text: \"How many times can we use \\\"Anti\\\" in a row before people stop listening?\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 100; }\r\n },\r\n {\r\n id: \"l33\",\r\n text: \"Does Hevi even check #news-ticker-suggestions anymore?\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 120; }\r\n },\r\n {\r\n id: \"l34\",\r\n text: \"Need more quotes! -hevipelle\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 135; }\r\n },\r\n {\r\n id: \"l35\",\r\n text: \"Man destroys known universe with antimatter, writes news tickers to keep from feeling lonely.\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 150; }\r\n },\r\n {\r\n id: \"l36\",\r\n text: \"You're almost there!\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 160; }\r\n },\r\n {\r\n id: \"l37\",\r\n text: \"You can stop now\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen >= 165; }\r\n },\r\n {\r\n id: \"l38\",\r\n text: \"fucking hacker\",\r\n get unlocked() { return NewsHandler.uniqueTickersSeen > GameDatabase.news.length; }\r\n },\r\n {\r\n id: \"l39\",\r\n text: \"Asian man trys to steal the trophy of fastest infinity of -1 seconds, AND HE DOES IT!\",\r\n get unlocked() { return NewsHandler.hasSeenNews(\"l1\"); }\r\n },\r\n {\r\n id: \"l40\",\r\n text:\r\n `I broke the 8th wall, there is only chaos, Slabdrill is ritually sacrificing antimatter to the 9th\r\n dimension. This will be my last entry, may Hevipelle have mercy on our souls, we didn't listen,\r\n We should have listened.`,\r\n get unlocked() { return NewsHandler.hasSeenNews(\"l58\"); }\r\n },\r\n {\r\n id: \"l41\",\r\n text: \"I thought the update was 5 hours away... -new players after more than 5 hours of gameplay\",\r\n get unlocked() { return Time.totalTimePlayed.totalHours.gte(5); }\r\n },\r\n {\r\n id: \"l42\",\r\n text:\r\n `Somebody told me to wait five hours for the update yesterday but it's today\r\n and it still hasn't come! What do I do?`,\r\n get unlocked() { return Time.totalTimePlayed.totalHours.gte(5); }\r\n },\r\n {\r\n id: \"l43\",\r\n text: \"You do know that you won't reach Infinity in -1 seconds, right?\",\r\n get unlocked() { return player.records.bestInfinity.time.eq(0.1); }\r\n },\r\n {\r\n id: \"l44\",\r\n text: \"Where does Antimatter Nemo live? In a NNnNeMI-NNnNe.\",\r\n get unlocked() { return player.records.totalAntimatter.e >= 3e6; }\r\n },\r\n {\r\n id: \"l45\",\r\n text: \"Anti Emoji Movie MMMCMXCIX is a major hit!\",\r\n get unlocked() { return player.requirementChecks.permanent.emojiGalaxies >= 3999; }\r\n },\r\n {\r\n id: \"l46\",\r\n text: \"Achievement Unlocked!\",\r\n get unlocked() { return Achievements.effectiveCount >= GameDatabase.achievements.normal.length; }\r\n },\r\n {\r\n id: \"l47\",\r\n text: \"The achievement is for two million, not two billion...\",\r\n get unlocked() { return Currency.infinities.gt(2e9); }\r\n },\r\n {\r\n id: \"l48\",\r\n text: \"Keep up the quick pace!\",\r\n get unlocked() { return AchievementTimers.marathon1.time > 1200; }\r\n },\r\n {\r\n id: \"l49\",\r\n text: \"One day you will stop your incessant grind.\",\r\n get unlocked() { return Currency.eternities.gt(50000); }\r\n },\r\n {\r\n id: \"l50\",\r\n text: \"You can probably stop farming for eternities now...\",\r\n get unlocked() { return Currency.eternities.gt(DC.D2E6); }\r\n },\r\n {\r\n id: \"l51\",\r\n text: \"Are you serious?\",\r\n get unlocked() { return Time.worstChallenge.totalSeconds.lte(1); }\r\n },\r\n {\r\n id: \"l52\",\r\n text: \"Timing is key.\",\r\n get unlocked() { return player.records.thisEternity.realTime < 10; }\r\n },\r\n {\r\n id: \"l53\",\r\n text: \"If you want to farm infinities, why don't you just get the time study?\",\r\n get unlocked() { return !TimeStudy(32).isBought && Currency.infinities.gt(72000 * 168); }\r\n },\r\n {\r\n id: \"l54\",\r\n get text() {\r\n const names = [];\r\n if (PlayerProgress.infinityUnlocked()) names.push(\"Infinity\");\r\n if (PlayerProgress.eternityUnlocked()) names.push(\"Eternity\");\r\n if (PlayerProgress.dilationUnlocked()) names.push(\"Dilation\");\r\n if (PlayerProgress.realityUnlocked()) names.push(\"Reality\");\r\n\r\n const game1Name = names.randomElement();\r\n let game2Name = names.randomElement();\r\n while (game2Name === game1Name) {\r\n game2Name = names.randomElement();\r\n }\r\n return `Pokemon ${game1Name} and ${game2Name} were just released! This new generation brings the total number ` +\r\n \"of Pokemon up to 1e151. Good luck catching 'em all!\";\r\n },\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); },\r\n isAdvertising: true\r\n },\r\n {\r\n id: \"l55\",\r\n get text() {\r\n const recipes = [\r\n \"a Replicanti cake: Gather some Replicanti, place in oven, and watch rise. And rise. And rise.\",\r\n \"an antimatter cake: Gather some antimatter, place in oven, and BOOM.\",\r\n \"an Eternity cake: Gather some Eternity Points, place in oven, and wait...\",\r\n \"an Infinity cake: Gather some Infinity Points, place in oven, and watch them shatter spacetime.\"\r\n ];\r\n const recipe = recipes.randomElement();\r\n return `How to bake ${recipe}`;\r\n },\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l56\",\r\n text: \"Reality Challenges are the new 9th Dimension is the new orange.\",\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l57\",\r\n text:\r\n `Jake returned home from a long day at school. On his way home, he came across a curious little object.\r\n Transparent, but opaque. Shimmering, but gloomy. Heavy, but weightless. Jake brought the object to his\r\n mother. \"Mom, I found this thing on the sidewalk, can I keep it?\", Jake said. His mother turned around\r\n to view the object her son spoke of. Her pupils dilated, \"Jake, get that thing out of the house now!\"\r\n she yelled. Jake was confused, as it seemed quite the harmless thing to him. He asked \"But mom, wh-\",\r\n but before he could finish, the object appeared to undergo mitosis at what seemed like an impossible\r\n speed, and the second copy slipped out of his hand and onto the floor. His mother rushed over to\r\n him, and tried to grab the object, but it replicated again. \"Jake... No matter what happens, don't\r\n forget that I love you honey...\". She wrapped her arms around him. \"M-mom, what's happening?\" Jake asked,\r\n with a quivering fear in his voice. His mother cried a single tear. \"⭔⭚⦕꒜ brand Replicanti...\" she said,\r\n in a somber tone. The Replicanti continued to replicate at a faster and faster pace. The bottom third of the\r\n house was now full of Replicanti. Then the bottom half. Then the entire house. The mother and child were\r\n trapped between the walls of their home and the Replicanti. Doomed to live the short rest of their life in\r\n that inorganic coffin, as the air remaining in their lungs slowly depleted. But that wasn't the end; far from\r\n it. The Replicanti began to replicate outside of the house, flooding out in a shimmering landslide. A few\r\n neighbours noticed the strange objects, almost liquid-like in their appearance, and attempted to run.\r\n But the Replicanti continued to replicate, and accelerate. Soon the entire block was covered in them; was\r\n them. Shortly after, several blocks. The city. The surrounding cities. The country. All the countries. All\r\n the planet. All the solar system. All the galaxy. All.`,\r\n get unlocked() { return player.replicanti.unl; }\r\n },\r\n {\r\n id: \"l58\",\r\n text:\r\n `The Holy trinity of Hevipelle, Antimatter, Infinity Points, and Eternity Points. These 3 resources let us\r\n access Hevi's gift, Time Theorems. And with these Time Theorems, we reach out to Hevi, and call, “Hevi, bless\r\n us on this fine day!” And Hevi does. He give us the blessing of Time Studies. These Time Studies were\r\n blessings so powerful, Hevi restricted their power. He said, “I will give you a choice of three paths” and\r\n then humanity chose. The short, cheap route of Antimatter Dimensions, giving instant gratification, the\r\n powerful choice of Infinity Dimensions, which were a fast, middle ground path, or Time Dimension, the long\r\n wait, and struggle, of humanity. Then, as humanity chose, a crack broke the earth. A serpent snaked out and\r\n sneered to humanity, “I will offer the powerful choice of a ninth dimension! I am Slabdrill, lord of all\r\n Unhevi. Humanity rose and said “ Begone Slabdrill! We want none of your foul Heresy!” And Hevi rose as well,\r\n and smote Slabdrill with his godlike power. As Slabdrill's corpse fell into the earth, he cried “ this will\r\n not be the last of me! Hevi will betr-“ and he fell in the Abyss of matter. Hevi gifted humanity with\r\n Eternity upgrades, which boosted infinity dimensions and time dimensions. And Hevi gave humanity his greatest\r\n gift. EP multipliers. He said, these will multiply all EP gained by 5, but their cost will increase 50 times.\r\n Use them wisely. And Humanity journeyed off with their new power, as Slabdrill's words echoed in their heads.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l59\",\r\n text:\r\n `The debate on the singular form of Replicanti rages on. Team \"Replicantus\"'s base has been ransacked\r\n by Team \"Also Replicanti\", and many of their dimensions were stolen. Team \"The Plural Is Replicantis\"\r\n is still lying low after their plan to hack the dictionary failed.`,\r\n get unlocked() { return player.replicanti.unl; }\r\n },\r\n {\r\n id: \"l60\",\r\n get text() {\r\n return `Breaking News! Time Shard mine collapses! ${Math.floor(20 + Math.random() * 236)} miners trapped inside!`;\r\n },\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l61\",\r\n text:\r\n `Millenials are killing the challenge industry, say antimatter experts; \"Nowadays they start with\r\n challenges completed and infinity broken; it's just not how it used to be\".`,\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"l62\",\r\n text:\r\n `Computer scientists are outraged, \"What even are Infinity Points? IP stands for Internet Protocol!\".\r\n Debates continue to intensify, more at 7.`,\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"l63\",\r\n text:\r\n `Do you feel that time has been going slower? Study reveals that 1 second now last approximately 1.3 seconds.\r\n Scientists are calling this phenomenon Time Dilation.`,\r\n get unlocked() { return PlayerProgress.dilationUnlocked(); }\r\n },\r\n {\r\n id: \"l64\",\r\n text:\r\n `Injustice in the Antimatter Academia: Beginners are only allowed to choose one field of study while the elite\r\n can pick all three. \"Its just not fair, man. How come they can do it?\" Questions frustrated student.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l65\",\r\n text:\r\n `It turns out that nobody actually knows what Infinity Points look like. Even the people who work on storing\r\n them are specifically told not to look at them because they apparently \"kill anyone who even looks at them\",\r\n to the point of sometimes working with blindfolds on. But today that will change. I am right here, in front\r\n of an Infinity Point Depot, ready to tell all of you what they look like in 3, 2, 1-`,\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"l66\",\r\n text:\r\n `Humanity shocked as failed Time Dilation experiment causes a visual glitch in spacetime. It is now visible\r\n in the night sky just above the Celestial Equator.`,\r\n get unlocked() { return PlayerProgress.dilationUnlocked(); }\r\n },\r\n {\r\n id: \"l67\",\r\n text:\r\n `Snorting crushed up Time Shards is slowly turning into a fad challenge amongst the most bored of people. It's\r\n said that the high it gives makes them experience as if the world itself is speeding up around you, which is\r\n why it's been called The Timelapse Challenge.   \r\n                   \r\n Dehydration deaths are through the roof as people mysteriously forget to drink water for several days.\r\n Trace amounts of Time Shards are being found in their bodies.`,\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l68\",\r\n get text() {\r\n let protestText = \"\";\r\n if (InfinityChallenge(4).isRunning)\r\n protestText =\r\n `Let's take it to this guy, who's part of the side that believes it's Infinity Challenge 4. What do you have\r\n to say? \"Obviously Infinity Challenge 4 is the worst one, I mean, what am I even supposed to do? I keep\r\n trying but every time I keep getting stuck and nowhere close to the end! How are you even supposed to do it?\"\r\n What a passionate man. This is your local news host, and we'll come back with further information later.`;\r\n else if (InfinityChallenge(5).isRunning)\r\n protestText =\r\n `So up next let's talk to this guy is holding a sign that says \"IC5 Unfair\". What is the point your group\r\n is trying to make? \"Can't you read the sign? If your comprehension is that bad then Infinity Challenge 5\r\n will squash you without even giving you a fair chan-\" How... Interesting. This is your local news host,\r\n and we'll come back with further information later.`;\r\n else\r\n protestText =\r\n `Finally, let's chat with this woman who doesn't seem to be in either side. What's your opinion on the\r\n matter? \"Personally, I thought Tickspeed Autobuyer Challenge was worse than both-\" \"GET HER!!\" \"WAIT NO-\"\r\n Well, seems like this just took a turn, so I'm getting as far away as I possibly can. This is your local\r\n news host, and we'll come back with further information... someday.`;\r\n return `Hello, this is your local always reliable news source, and today people are taking over the streets\r\n as they fight over which Infinity Challenge is worse. ${protestText}`;\r\n },\r\n get unlocked() { return InfinityChallenge(1).isUnlocked || PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l69\",\r\n text: \"Friendship ended with Replicanti, now Replicanti Galaxies is my new best friend.\",\r\n get unlocked() { return PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"l70\",\r\n text:\r\n `\"Zurkrbarg, Celestial of Privacy\" has announced their plans to release a new version\r\n of their popular social media universe, \"All\".`,\r\n get unlocked() { return Teresa.isUnlocked; }\r\n },\r\n {\r\n id: \"l71\",\r\n text: \"Other languages await... I need to become a programmer\",\r\n get unlocked() { return Player.canEternity || PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l72\",\r\n get text() {\r\n const scenarios = [\r\n `our contestants struggle to survive in the desolate wasteland of Eternity Challenge 8 -\r\n running out of Replicanti and Infinity Dimensions, what will they turn to?`,\r\n \"we investigate reports of a Time Shard mine collapsing at 26:90.\",\r\n \"we invite an amateur on to explain what the reward for Infinity Challenge 9 would be.\",\r\n \"our friends over at ANN explain how they produce their broadcasts.\",\r\n \"we invite local idle gamers over to explain how they play their favorite games.\",\r\n `send 10,000 Support The Developer\r\n coins or you will never see RealiTV again.`,\r\n \"we break down exactly what went wrong in the black hole powering our city yesterday.\",\r\n \"we go over our 10-day weather forcasts.\",\r\n `YOU MUST PAY ${format(player.reality.realityMachines.times(10).max(10))}\r\n REALITY MACHINES TO CONTINUE VIEWING THIS PROGRAM.`,\r\n \"we witness the release of the hypnodrones.\",\r\n \"our great and grand overlord lets us have a single antimatter.\",\r\n `Bill Nye explains how Replicanti replicate, and teaches how to spot dangerous conspiracy theories\r\n such as \"ingesting antimatter is perfectly fine\" and \"Antimatter Galaxies aren't worth it\".`,\r\n \"the world's greatest philosophers debate if we are the real antimatter.\",\r\n \"resident baker explains how ordinary objects can transmorph into cake if not watched constantly.\"\r\n ];\r\n const scenario = scenarios.randomElement();\r\n return `Next time on RealiTV, ${scenario}`;\r\n },\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l73\",\r\n text: \"A long time ago in a distant galaxy far, far away, the cost scaling changed.\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l74\",\r\n text: \"Introducing a new feature: Reality Studies! Get in-game benefits for studying in real life!\",\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l75\",\r\n text:\r\n `Here at Antimatter Dimensions, we pride ourselves in the quality of our products. For example: Did you know\r\n that every Infinity Point is unique? That's right! They all have different personalities, their own feelings,\r\n their own thoughts... I hope you can sleep well tonight, knowing this... Remember all of those Infinity\r\n points you've spent? They had families, and they miss them... Look at what you've done. You're a monster.`,\r\n get unlocked() { return PlayerProgress.infinityUnlocked(); }\r\n },\r\n {\r\n id: \"l76\",\r\n text: \"So, you've reached the prestige layer after Infinity? It's about time...\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"l77\",\r\n text: \"Improve your perks through selective breeding and cutting edge epigenetics technology.\",\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l78\",\r\n text:\r\n `Warning - Genetically Modified Perk Points are not suitable for; consumption, physical contact, inhalation,\r\n exhalation, mental contact and scouring by both seen and unseen eyes. Do not put near a flammable,\r\n inflammable, conducting, insulating, variable, biological or mechanical substance. Existence at your own risk.`,\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l79\",\r\n text:\r\n `The Intergalactic Antimatter Revenue Service, contrary to popular belief, does have the ability to pay taxes\r\n on AM gained through non-scrupulous methods, ie anything not done via legally-mandated dimensions or modified\r\n through challenge courses. Section NY-8N lists 3 specific methodologies - illegal news ticker giveaways,\r\n unrecognised dimensions, and modifications to the fabric of space time - as well as a miscellaneous for any\r\n unique AM methods that may pop up in the future. And although you will have to pay the top AM tax rate of 99%,\r\n it can save you money in the long run - if you are forced to switch realities due to a celestial decision you\r\n can gain a portion of the tax you paid back from the IARS as a tax deduction, as well as make a deduction to\r\n pay for the arbiters who represent you. Of course, any [PLAYER REFERENCE NOT FOUND] worth their RM knows that\r\n the real way to hide illegal profits of crime is in personalised pocket dimensions, hyperspliced waveform\r\n banks and nanoshells, which requires extensive R&D to implement. As such, reporting illegal AM gain is only\r\n recommended if you're too rich to hide your gains, but too poor to hide your gains.`,\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l80\",\r\n get text() {\r\n return `\"Average person produces ${format(\"3e999999996\", 2)} antimatter a year\" factoid actually just statistical\r\n error. Average person produces 0 antimatter per year. \"Developer Dimension\" Georg, who lives in a cave &\r\n produces over ${format(\"1e1000000000\", 2)} each day, is an outlier and should not have been counted.`;\r\n },\r\n get unlocked() { return PlayerProgress.hasBroken(); }\r\n },\r\n {\r\n id: \"l81\",\r\n text:\r\n `The world is in chaos as the laws of math have been rewritten! Many things that were thought\r\n to be infinite are now just really big numbers!`,\r\n get unlocked() { return PlayerProgress.hasBroken(); }\r\n },\r\n {\r\n id: \"l82\",\r\n get text() {\r\n return `The Great Scribes of Antia have labored intensively for years. They were given a mammoth task from the\r\n gods; write out an incomprehensibly long number. These scribes took turns, each writing out a few numbers a\r\n second, writing day and night, for what seemed like an eternity. At last, after\r\n ${TimeSpan.fromSeconds(Currency.antimatter.value.log10() / 3).toString()}, they finally accomplished\r\n the impossible. That week, when they went to worship their gods, they sent them a simple message: \"What was\r\n the purpose? What made our years of labor significant?\" The gods responded duly: \"We wanted to know how long\r\n it would take to write out, for a statistic in our game.\"`;\r\n },\r\n // 3 years of time to write\r\n get unlocked() { return Currency.antimatter.value.gte(\"1e777600\"); }\r\n },\r\n {\r\n id: \"l83\",\r\n text:\r\n `AD Patch Notes: Cleaned up the celestial problem Made Antimatter care about annihilation more Added mouths\r\n Removed mouths Stopped unwanted interlopers from corporate takeovers of shops Fixed problem with newstickers\r\n hanging in the air Dead replicanti remain in their galaxies Redefined interlopers to not include [REDACTED]\r\n Tachyon Particles get stuck in the top left corner of the screen, obliterate time Added Coriolis effect to\r\n Galaxy Spin Direction`,\r\n get unlocked() { return Teresa.isUnlocked; }\r\n },\r\n {\r\n id: \"l84\",\r\n get text() {\r\n return `For the record, you currently have ${player.news.specialTickerData.paperclips}\r\n Useless Paperclips. You may want to spend them on something.`;\r\n },\r\n get unlocked() { return player.news.specialTickerData.paperclips > 0; }\r\n },\r\n {\r\n id: \"l85\",\r\n text:\r\n `On opposite day, the new update is just -5 hours away. You begin increasing your Matter. Once you acquire a\r\n huge abundance of Matter, you must become Infinitesimal. After increasing your wealth in Infinitesimal Points,\r\n you can eventually Jiffy, the shortest unit of time. After enough time, your Jiffies will accumulate, and you\r\n will Contract Time. Contracting Time will grant you enough of a boost to eventually Fantasy, the final layer\r\n of maintenance. However, you find out that it was all a dream. Your Antimatter is safe and well, and the new\r\n update is still just 5 hours away.`,\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l86\",\r\n text:\r\n `Hello, player. I'd like to play a game. In front of you is a pile of replicanti. They are currently frozen in\r\n time, and cannot replicate. To your right is a computer playing Antimatter Dimensions on an empty save. You\r\n must reach infinity. However, once you buy a 1st dimension, the replicanti will start replicating. As you know,\r\n they replicate fast, and if they fill up the room you will suffocate. If you reach infinity before that, they\r\n will be frozen again. The clock is ticking. Start now.`,\r\n get unlocked() { return PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"l87\",\r\n text:\r\n `\"To see a World in a Grain of Sand. And a Heaven in a Wild Flower. Hold Infinity in the palm of your hand.\r\n And Eternity in an hour. And Reality in about 5 hours™️\" ~Anti-William Blake `,\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l88\",\r\n text:\r\n `Our deepest apologies for the new glyph mechanic. The intent is to provide players with a sense of pride and\r\n accomplishment for unlocking rare glyphs. We selected initial values based upon data from the final wave of\r\n testing and other adjustments made to milestone rewards before launch. Among other things, we're looking at\r\n average per-player credit earn rates on a daily basis, and we'll be making constant adjustments to ensure that\r\n players have challenges that are compelling, rewarding, and of course attainable via gameplay.`,\r\n get unlocked() { return PlayerProgress.realityUnlocked(); }\r\n },\r\n {\r\n id: \"l89\",\r\n text:\r\n \"It's pronounced LAY'tela, and you can't convince me otherwise. -Royal\",\r\n get unlocked() { return Laitela.isUnlocked || PlayerProgress.mendingUnlocked() }\r\n },\r\n {\r\n id: \"l90\",\r\n text:\r\n \"You already knew you would be trapped here, yet you still entered.\",\r\n get unlocked() {return Pelle.isDoomed && PlayerProgress.mendingUnlocked() }\r\n },\r\n {\r\n id: \"l91\",\r\n text:\r\n \"Do you remember...\",\r\n get unlocked() {return new Date().getMonth === 8 && new Date().getDate === 21}\r\n },\r\n {\r\n id: \"l92\",\r\n text:\r\n \"Did you remember...\",\r\n get unlocked() {return new Date().getMonth === 8 && new Date().getDate === 22}\r\n },\r\n {\r\n id: \"r1\",\r\n text: \"This news message is 100x rarer than all the others.\",\r\n get unlocked() { return Math.random() < 0.01; }\r\n },\r\n {\r\n id: \"p1\",\r\n text: \"Is this a jojo reference?\",\r\n },\r\n /* eslint-disable max-len */\r\n {\r\n id: \"ai1\",\r\n text: \"If you are the game, then you can use the cheat to unlock a secret achievement...but it costs e1100 antimatter!?!\"\r\n },\r\n {\r\n id: \"ai2\",\r\n text: \"\\\"Hm, I don't know how to fix this.\\\" - Someone who has not unlocked the achievement btw\"\r\n },\r\n {\r\n id: \"ai3\",\r\n text: \"I thought the game was supposed to have a hard reset after eternity, but then I got randomized to start my first game with no save file \\uD83D\\uDE26\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai4\",\r\n text: \"I thought the update was 5 hours ago... I guess we'll have to put it back in 5 hours\"\r\n },\r\n {\r\n id: \"ai5\",\r\n get text() { return `Local man finds ${format(Number.MAX_VALUE, 2)} Planck volumes in his freezer.`; }\r\n },\r\n {\r\n id: \"ai6\",\r\n text: \"ahah bad ticker suggestion\"\r\n },\r\n {\r\n id: \"ai7\",\r\n text: \"I see you playing this game with an empty stomach and you're gonna start playing this game with an empty wallet.\"\r\n },\r\n {\r\n id: \"ai8\",\r\n text: \"just start... clicking. dont even think about wasting time. just do it.\"\r\n },\r\n {\r\n id: \"ai9\",\r\n text: \"the idea that the 9th dimension creates the 8th dimension is crazy\"\r\n },\r\n {\r\n id: \"ai10\",\r\n text: \"...does that mean the [REDACTED] dimension produces the [REDACTED] dimension?\"\r\n },\r\n {\r\n id: \"ai11\",\r\n text: \"\\\"click here to buy a stack of paperclips\\\" (when clicked you get Rickroll)\",\r\n onClick() { window.open(\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\"); }\r\n },\r\n {\r\n id: \"ai12\",\r\n text: \"In my spare time I read the short stories by T. H. White.\"\r\n },\r\n {\r\n id: \"ai13\",\r\n text: \"Holy crap, that's pretty wild\"\r\n },\r\n {\r\n id: \"ai14\",\r\n text: \"Extinction is not a real thing. You can't wear the same hat 24/7.\"\r\n },\r\n {\r\n id: \"ai15\",\r\n text: \"If you can read this you've escaped from the game.\"\r\n },\r\n {\r\n id: \"ai16\",\r\n text: \"\\\"The hat trick I would love to see it\\\" - Noah Feldman\"\r\n },\r\n {\r\n id: \"ai17\",\r\n text: \"look at hevi fight riotously on the discord server\"\r\n },\r\n {\r\n id: \"ai18\",\r\n text: \"I just stole the \\\"Anti\\\" flag from a biker gang and I am packing it with dynamite, dynamite, dynamite, dynamite...\"\r\n },\r\n {\r\n id: \"ai19\",\r\n text: \"No matter how much antimatter you have, the matter will always outweigh the anti-matter.\"\r\n },\r\n {\r\n id: \"ai20\",\r\n text: \"Franklin sealed the Omega squared. Now you can seal the Omega any way you want.\"\r\n },\r\n {\r\n id: \"ai21\",\r\n text: \"Is this the real 9th Dimension?\"\r\n },\r\n {\r\n id: \"ai22\",\r\n text: \"Click here to exit the game\"\r\n },\r\n {\r\n id: \"ai23\",\r\n text: \"This news ticker will now only AIR in the 9th dimension\"\r\n },\r\n {\r\n id: \"ai24\",\r\n text: \"The 9th dimension doesn't exist because it was suppressed by the 9th dimension.\"\r\n },\r\n {\r\n id: \"ai25\",\r\n text: \"To matter or to antimatter, that is the question.\"\r\n },\r\n {\r\n id: \"ai26\",\r\n text: \"After 8 years of production and unstable universes, Chaosium will cease to exist in 5 hours.\"\r\n },\r\n {\r\n id: \"ai27\",\r\n text: \"Half of the problems in the 9th dimension don't even make sense. What are they even doing with all of that energy anyway?\"\r\n },\r\n {\r\n id: \"ai28\",\r\n text: \"Wait, there's a nin--\"\r\n },\r\n {\r\n id: \"ai29\",\r\n text: \"Somewhere, a madman and his army of Trimps are tampering with Matter Dimensions.\"\r\n },\r\n {\r\n id: \"ai30\",\r\n text: \"Why is there so many attached to this number? It doesn't make sense.\"\r\n },\r\n {\r\n id: \"ai31\",\r\n text: \"The news ticker is in the anti-news-ticker\"\r\n },\r\n {\r\n id: \"ai32\",\r\n text: \"the 9th dimension doesn't exist because we are using nonary\"\r\n },\r\n {\r\n id: \"ai33\",\r\n text: \"BREAKING NEWS: New research has shown that not one, not two, but three people can be said to have felt the same emotion as me when they read that as a ticker suggestion.\"\r\n },\r\n {\r\n id: \"ai34\",\r\n text: \"Here's an explanation of my 'problematic mood' - it's explained in the news ticker!\"\r\n },\r\n {\r\n id: \"ai35\",\r\n text: \"Local crazy person tries selling anti-cookies\"\r\n },\r\n {\r\n id: \"ai36\",\r\n text: \"Welcome to Antimatter Dimensions: Source, the free to play sequel to the cult classic AD:GO.\"\r\n },\r\n {\r\n id: \"ai37\",\r\n text: \"A new hand touches your antimatter!\"\r\n },\r\n {\r\n id: \"ai38\",\r\n text: \"Who are we, anyways?\"\r\n },\r\n {\r\n id: \"ai39\",\r\n text: \"We are the people who actually matter\"\r\n },\r\n {\r\n id: \"ai40\",\r\n text: \"Matter? Not even a hint.\"\r\n },\r\n {\r\n id: \"ai41\",\r\n text: \"I am the news guy, I make news. You don't read this? Well you'll just have to wait until you look in the mirror.\"\r\n },\r\n {\r\n id: \"ai42\",\r\n text: \"\\\"BOO!\\\" (news ticker moves 90 degrees)\"\r\n },\r\n {\r\n id: \"ai43\",\r\n text: \"BUY A JAR OF STICKERS, HIGH QUALITY STICKERS, GREAT QUALITY STICKERS!\"\r\n },\r\n {\r\n id: \"ai44\",\r\n text: \"I made news, you read it.\"\r\n },\r\n {\r\n id: \"ai45\",\r\n text: \"I like news.\"\r\n },\r\n {\r\n id: \"ai46\",\r\n text: \"I don't make news.\"\r\n },\r\n {\r\n id: \"ai47\",\r\n text: \"YOU MAKE NEWS AND I GET THE [REDACTED] NEWS\"\r\n },\r\n {\r\n id: \"ai48\",\r\n text: \"The term \\\"Anti-infinity\\\" is a verb and cannot be a noun. Learn about its usage here.\"\r\n },\r\n {\r\n id: \"ai49\",\r\n text: \"And now, for the shopping list!\"\r\n },\r\n {\r\n id: \"ai50\",\r\n text: \"The 9th dimension is clearly real! It's just not in our dimension.\"\r\n },\r\n {\r\n id: \"ai51\",\r\n text: \"I tried searching on google for the phrase \\\"9th dimension,\\\" and I'm okay with saying that, because it describes a very real thing.\"\r\n },\r\n {\r\n id: \"ai52\",\r\n text: \"You have no power here.\"\r\n },\r\n {\r\n id: \"ai53\",\r\n text: \"Some people had to settle for 10 dimensions because they couldn't break infinity. Big Crunch turned out to be just a short space in time.\"\r\n },\r\n {\r\n id: \"ai54\",\r\n text: \"There once was a young man in a strange land, and he dreamed of a universe filled with possibilities. One day, he asked his mother \\\"What's Expansion like?\\\" Her reply was \\\"Expansion times back then were unbalanced, and I said that's why you can't have equal amounts of matter and antimatter.\"\r\n },\r\n {\r\n id: \"ai55\",\r\n text: \"Market research firm tries to explain why some commodities don't perform as expected. Market research firm herself can't figure out why.\"\r\n },\r\n {\r\n id: \"ai56\",\r\n text: \"Bid your antimatter today!\"\r\n },\r\n {\r\n id: \"ai57\",\r\n text: \"I am Alpha Centauri, Prime 001. My research has found that if you are alive in the 9th dimension, evil has taken over your dimension and is attempting to enact its plan to take over your mind and reverse time. You must do everything in your power to stop this plan from being implemented, now.\"\r\n },\r\n {\r\n id: \"ai58\",\r\n text: \"Stand by and unlock the 9th dimension for a secret achievement.\"\r\n },\r\n {\r\n id: \"ai59\",\r\n text: \"I fix bugs in 5 hours\"\r\n },\r\n {\r\n id: \"ai60\",\r\n text: \"If you're reading this, that means you can read this.\"\r\n },\r\n {\r\n id: \"ai61\",\r\n text: \"Uhh... Hi. Could you tell me your name?\"\r\n },\r\n {\r\n id: \"ai62\",\r\n text: \"Uh, no. This is too big for a QR code.\"\r\n },\r\n {\r\n id: \"ai63\",\r\n text: \"(right to left move it make)\"\r\n },\r\n {\r\n id: \"ai64\",\r\n text: \"Oh no the antimatter is coming for us!\"\r\n },\r\n {\r\n id: \"ai65\",\r\n text: \"Why is there so much antimatter in this world? For a start, it's all produced by the antimatter factories on Earth. Secondly, the factories on\"\r\n },\r\n {\r\n id: \"ai66\",\r\n text: \"It's nothing personal, bro. -All villager types\"\r\n },\r\n {\r\n id: \"ai67\",\r\n text: \"I tried my best to read those tiny, handwritten messages, but whoever designed scythes hated me and stuck them in a corner. -Porygon-Z\"\r\n },\r\n {\r\n id: \"ai68\",\r\n text: \"Hmm... I don't know how I ended up here. I don't even know if I'm supposed to be here. I just sit here and imagine what could have been if I hadn't stopped. Oh god, what could have been...\"\r\n },\r\n {\r\n id: \"ai69\",\r\n text: \"Aw shucks, I finally hacked it enough to get to the C21 unlock, boss!\"\r\n },\r\n {\r\n id: \"ai70\",\r\n text: \"Купил мужик антиматерию\"\r\n },\r\n {\r\n id: \"ai71\",\r\n text: \"So you're telling me that I can post here, watch the titanic twice, come back and not be able to post?\"\r\n },\r\n {\r\n id: \"ai72\",\r\n text: \"The last update was 5 hours ago. There is no next update, because the last update was 5 hours ago. We will update our podcast in 5 hours to cover the entire topic of 5 hours, because this is the last podcast ever, everyone knows that the update is always 5 hours away, but in reality it's more like 1-2-3-4-5-6-7-8-9-10 minutes away, but in our heads it's closer to an actual accurate update date, like 5 hours away but with a few tickspeed upgrades.\"\r\n },\r\n {\r\n id: \"ai73\",\r\n text: \"Yep. You. Get. Over. Your. Antidimensions.\"\r\n },\r\n {\r\n id: \"ai74\",\r\n get text() { return `Ad bonus: $${format(Number.MAX_VALUE, 2)} (random team)`; }\r\n },\r\n {\r\n id: \"ai75\",\r\n text: \"Pass me that history, please\"\r\n },\r\n {\r\n id: \"ai76\",\r\n get text() { return `Now releasing: Dimsension ${format(Number.MAX_VALUE, 2)}`; }\r\n },\r\n {\r\n id: \"ai77\",\r\n text: \"ur history teacher said i was mad for getting *insert something here* on my bday\"\r\n },\r\n {\r\n id: \"ai78\",\r\n text: \"All is fair in antimatter\"\r\n },\r\n {\r\n id: \"ai79\",\r\n text: \"The Mysterium, the 2nd Dimension\"\r\n },\r\n {\r\n id: \"ai80\",\r\n text: \"Oops, I think we misticked.\"\r\n },\r\n {\r\n id: \"ai81\",\r\n text: \"please wait 5 HOURS FOR THE NEWS\"\r\n },\r\n {\r\n id: \"ai82\",\r\n text: \"please wait til the weather improves\"\r\n },\r\n {\r\n id: \"ai83\",\r\n text: \"Please, take a minute to appreciate the beauty of this news ticker.\"\r\n },\r\n {\r\n id: \"ai84\",\r\n text: \"How about this, working backwards? You know, from the time period covered by the question, that the game is set in, say, the 1950s. Now, if we talk about how games are set in the 2030s. Games are defined as any media, not necessarily of the form \\\"play some game\\\" (which, by the way, is a useful thing to have in one's vocabulary) but any media that can be understood as a game (i.e. a media that one can play back in time}, and games are defined as any game that one can't play back in time.\"\r\n },\r\n {\r\n id: \"ai85\",\r\n text: \"How about AD, made by NaN? Higher quality, obviously. But still, [REDACTED]\"\r\n },\r\n {\r\n id: \"ai86\",\r\n text: \"I thought the whole \\\"annihilation is just a phase\\\" quote was awesome until I realized it also gave me a [REDACTED]\"\r\n },\r\n {\r\n id: \"ai87\",\r\n text: \"I have created an Omsi universe. And it's [REDACTED]\"\r\n },\r\n {\r\n id: \"ai88\",\r\n text: \"I put [REDACTED] in the oven. It got [REDACTED] and I [REDACTED] am [REDACTED]\"\r\n },\r\n {\r\n id: \"ai89\",\r\n text: \"What are the red herrings?\"\r\n },\r\n {\r\n id: \"ai90\",\r\n text: \"Help we are stuck in Hevipelle's (http://en.wikipedia.org/wiki/Hevipelle) basement and hevi is forcing us to build a [REDACTED] wall to keep [REDACTED] away from [REDACTED]\"\r\n },\r\n {\r\n id: \"ai91\",\r\n text: \"And now, for the weather. 70 and raining in North Dakota, remember those lovely, big, golden, iron curtain bars. Also remember that the [REDACTED] weather! Just remember: [REDACTED] and [REDACTED] outside [REDACTED]\"\r\n },\r\n {\r\n id: \"ai92\",\r\n text: \"Let's play a little game. You will start with no possessions and no goals. Lets say you have [REDACTED] and your [REDACTED] is [REDACTED] you can [REDACTED]\"\r\n },\r\n {\r\n id: \"ai93\",\r\n text: \"What are gems for?\"\r\n },\r\n {\r\n id: \"ai94\",\r\n text: \"Who made the 5th dimension?\"\r\n },\r\n {\r\n id: \"ai95\",\r\n text: \"I don't get it\"\r\n },\r\n {\r\n id: \"ai96\",\r\n text: \"Why is nobody talking about the 9th dimension?\"\r\n },\r\n {\r\n id: \"ai97\",\r\n text: \"This news sucks. Why no you don't get it?\"\r\n },\r\n {\r\n id: \"ai98\",\r\n text: \"Sorry, your reality has disconnected from the 9th dimension. You will now remain in the 8th dimension until further notice.\"\r\n },\r\n (function() {\r\n let wasClicked = false;\r\n const normal = \"Now holding Infinity!\";\r\n const clicked = \"<#351477791457542144>\";\r\n return {\r\n id: \"ai99\",\r\n get text() {\r\n return wasClicked ? clicked : normal;\r\n },\r\n reset() {\r\n wasClicked = false;\r\n },\r\n onClick() {\r\n if (wasClicked) return undefined;\r\n wasClicked = true;\r\n return this.text;\r\n }\r\n };\r\n }()),\r\n {\r\n id: \"ai100\",\r\n text: \"I get all my news from this Discord, not 5 hours of my life\"\r\n },\r\n {\r\n id: \"ai101\",\r\n text: \"meow\"\r\n },\r\n {\r\n id: \"ai102\",\r\n text: \"You are now manually blinking.\"\r\n },\r\n {\r\n id: \"ai103\",\r\n text: \"Sorry, your mic is playing Antimatter Dimensions.\"\r\n },\r\n {\r\n id: \"ai104\",\r\n text: \"Sorry, your reality has disconnected from the 9th dimension.\"\r\n },\r\n {\r\n id: \"ai105\",\r\n text: \"Apparently I am the bad guy in this video. I'm the one who did nothing.\"\r\n },\r\n {\r\n id: \"ai106\",\r\n text: \"There are multiple ways to win this game. You can either type in your coordinates directly into the game, or you can type them into google which produces a different result. If you are getting the \\\"same exact thing\\\" result, your computer must be malfunctioning. Test results indicate that your computer is malfunctioning and you should check your firmware for vulnerabilities. You can also try turning off the news and re-running the game, but doing this only makes the \\\"the weather is X\\\" joke. Waiting six hours for a news message is NOT a news message.\"\r\n },\r\n {\r\n id: \"ai107\",\r\n text: \"The weather is actually a thing. Scientists have confirmed that there is a correlation between the amount of Antimatter in the earth and the amount of weather. The earth is indeed a magnet, but scientists now hypothesize that as the earth warms up, the magnetic reconnection will accelerate, and this could cause a domino effect to cascade throughout the world, eventually leading to uncontrolled nuclear winter and spontaneous antimatter implosion.\"\r\n },\r\n {\r\n id: \"ai108\",\r\n text: \"The tenth dimension is not a real thing. Stop telling people that.\"\r\n },\r\n {\r\n id: \"ai109\",\r\n text: \"Don't tell Hevi it's not a real thing\"\r\n },\r\n {\r\n id: \"ai110\",\r\n text: \"i dont know how to fix this\"\r\n },\r\n {\r\n id: \"ai111\",\r\n text: \"This update is not for you!\"\r\n },\r\n {\r\n id: \"ai112\",\r\n get text() { return `This is the last time, to buy items, you must pay a small fee of ${format(Number.MAX_VALUE, 2)} real money.`; }\r\n },\r\n {\r\n id: \"ai113\",\r\n text: \"What is Antimatter? Long ago, gods lived in harmony. Then, everything changed when the apocalypse broke out. Chaos reigns, and even higher dimensions are being built. This is your fate. Build the Antimatter Dimensions. Amen.\"\r\n },\r\n {\r\n id: \"ai114\",\r\n text: \"Water under the bridge?\"\r\n },\r\n {\r\n id: \"ai115\",\r\n text: \"I wonder if anyone has posted about this before me?\"\r\n },\r\n {\r\n id: \"ai116\",\r\n text: \"This post has been shared many times. Who knows how many?\"\r\n },\r\n {\r\n id: \"ai117\",\r\n text: \"Good night!\"\r\n },\r\n {\r\n id: \"ai118\",\r\n text: \"I made a timeline of my replicanti battles, which can be found here.\"\r\n },\r\n {\r\n id: \"ai119\",\r\n text: \"\\\"Quantumum Battle Royale coming in 5 hours!\\\" (Rumor: 5 hours)\"\r\n },\r\n {\r\n id: \"ai120\",\r\n text: \"Rumor says Nords will start producing replicanti in five hours.\"\r\n },\r\n {\r\n id: \"ai121\",\r\n text: \"I am an Nordsweeper, stealing their jobs to support the replicanti factories\"\r\n },\r\n {\r\n id: \"ai122\",\r\n text: \"Used to be, AD was the best game. Nowadays, it's all crapp.\"\r\n },\r\n {\r\n id: \"ai123\",\r\n text: \"You better stop looking at these news ticker suggestions, before your fingers dry up.\"\r\n },\r\n {\r\n id: \"ai124\",\r\n text: \"Antimatter Dimensions *Loses* bee movie.\"\r\n },\r\n {\r\n id: \"ai125\",\r\n text: \"Oh, god, there's replicanti in my peas.\",\r\n get unlocked() { return PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"ai126\",\r\n text: \"Oh, god, I'm stepping on a replicanti.\"\r\n },\r\n {\r\n id: \"ai127\",\r\n text: \"Hello, world!\"\r\n },\r\n {\r\n id: \"ai128\",\r\n text: \"Welcome to /r/AskReddit about submarines. - accurate as of January 8th, 2017\"\r\n },\r\n {\r\n id: \"ai129\",\r\n text: \"Antimatter being researched by the government. Is it safe to say that this news ticker is fake?\"\r\n },\r\n {\r\n id: \"ai130\",\r\n text: \"Does the news show at Infinite Antimatter?\"\r\n },\r\n {\r\n id: \"ai131\",\r\n text: \"Have you saved your game? Yes. Have you quit your game? Nothin' wrong with this save. just keep holding that key.\"\r\n },\r\n {\r\n id: \"ai132\",\r\n text: \"i clicked too fast...my fps dropped\"\r\n },\r\n {\r\n id: \"ai133\",\r\n text: \"I found out that the year is 20XX. I was going to make a news ticker but then I realized that it's just a ticker.\"\r\n },\r\n {\r\n id: \"ai134\",\r\n text: \"\\\"One of these days I'll get bored of reading news for a while\\\" - old man\"\r\n },\r\n {\r\n id: \"ai135\",\r\n text: \"'Tis the season for new antiques! Get your first ever LOOK at these unique objects, before they're gone!' Sold out!\"\r\n },\r\n {\r\n id: \"ai136\",\r\n text: \"3 things that antimatter, 1 more thing to infinity\"\r\n },\r\n {\r\n id: \"ai137\",\r\n text: \"Buy the paperclip emojis now at https://aarextiaokhiao.github.io/blob/master/docs/en.json\"\r\n },\r\n {\r\n id: \"ai138\",\r\n text: \"click here to unlock the next update\"\r\n },\r\n {\r\n id: \"ai139\",\r\n text: \"(If you want you can make this only show when the news actually loads)\"\r\n },\r\n {\r\n id: \"ai140\",\r\n text: \"Malicious men are trying to make antimatter money, but their attempt is getting in the 9th dimension. What do you think about that?\"\r\n },\r\n {\r\n id: \"ai141\",\r\n text: \"Hey Siri, grind antimatter galaxies\"\r\n },\r\n {\r\n id: \"ai142\",\r\n text: \"Have you saved your game? If so, then you can continue playing without\"\r\n },\r\n {\r\n id: \"ai143\",\r\n text: \"It's like Getting your first arcane point. You know, like in the old ad where you're like \\\"I get this ad, I should make this ad\"\r\n },\r\n {\r\n id: \"ai144\",\r\n text: \"Ooga Booga\"\r\n },\r\n {\r\n id: \"ai145\",\r\n text: \"Boo has his own webpage! You might even call it \\\"Boo's Dandy\\\"\\\">https://en.m.wikipedia.org/wiki/Olli%27_Web#Main_page>\"\r\n },\r\n {\r\n id: \"ai146\",\r\n text: \"Meeseeks and nerds clash in epic GG war\"\r\n },\r\n {\r\n id: \"ai147\",\r\n text: \"My final test has come out! It was a simple math problem, just the two greatest chess GM's ever! Guess what happened? Both got annihilated!\"\r\n },\r\n {\r\n id: \"ai148\",\r\n text: \"Oh wow, that's 67.3%, which is actually OK, because it's logarithmic\"\r\n },\r\n {\r\n id: \"ai149\",\r\n text: \"\\\"Aleph_Time\\\" is that logarithmic scale joke?\"\r\n },\r\n {\r\n id: \"ai150\",\r\n text: \"Hello everyone, my name is Anti-Dio. I produce antimatter through a process you all know as \\\"antimatter decomposition\\\" you may recall this from my test report earlier this month I tested wether or not my ranch produces antimatter or not... everything was fine until that point, when I added a dash of lag to the equation, and it became a vicious cycle accelerating the rate at which antimatter is produced, which in turn accelerates the rate at which you all die. I've saved this by using a unique combination of genetic engineering and big data mining, I'm hoping to one day pull the trigger on a mechanimatter device that creates dimensions behind closed doors, but for now, this has all been a race to the bottom of which system producethiks, and in the end, we'll take a bite out of your (read error: allowed) pie. Goodbye.\"\r\n },\r\n {\r\n id: \"ai151\",\r\n text: \"\\\"I propose that we form a phylogenetic tree of anti-history, just like tree of life. Everyone would be credited with originating from the ancestor of that anti-tree.\\\" -Dio, toast of eternal damnation\"\r\n },\r\n {\r\n id: \"ai152\",\r\n text: \"historian: I love how each generation looks back on an earlier generation and think, \\\"Those generations were really bad\\\"\"\r\n },\r\n {\r\n id: \"ai153\",\r\n text: \"\\\"My parents went to anti-university\\\" - my grandparents\"\r\n },\r\n {\r\n id: \"ai154\",\r\n text: \"Only anti-jokes are funny\"\r\n },\r\n {\r\n id: \"ai155\",\r\n text: \"Infinity machine breaks Infinity\"\r\n },\r\n {\r\n id: \"ai156\",\r\n text: \"Okay boomer, you get your first taste of antimalware with this one.\"\r\n },\r\n {\r\n id: \"ai157\",\r\n text: \"This program cannot access confidential information, such as the IP addresses of the Tamazight Vaults.\"\r\n },\r\n {\r\n id: \"ai158\",\r\n text: \"Game Development is fun, right? That's why so many hobbyists make games, and why so few professionals make games.\"\r\n },\r\n {\r\n id: \"ai159\",\r\n text: \"I was the first to notice that the 'news' ticker on my mobile notification is always 30 seconds behind the 'entertainment' ticker. This is most definitely not a bug or a feature, and will be fixed in 5 hours.\"\r\n },\r\n {\r\n id: \"ai160\",\r\n text: \"This news ticker always appears to speedrun a ticker asking for 'world records', do you even know what speedrun this is? Is this a news ticker or something?\"\r\n },\r\n {\r\n id: \"ai161\",\r\n text: \"The next level is not unlocking extra replicanti; it is actually boosting replicanti.\"\r\n },\r\n {\r\n id: \"ai162\",\r\n text: \"Why does one galaxy has 9 galaxies and the 8th dimension, and the first 10 dimensions doesn't exist? Well, we'll have to solve that question in a minute.\"\r\n },\r\n {\r\n id: \"ai163\",\r\n text: \"So why on EARTH DIDN'T SOMEONE JUST SAY THAT? I thought that AD has some kind of cheat that makes it so that, when you buy a dimension, it actually creates 9 galaxies instead of 10\"\r\n },\r\n {\r\n id: \"ai164\",\r\n text: \"M'antel, antimatter, anti-talk to me\"\r\n },\r\n {\r\n id: \"ai165\",\r\n text: \"AD has anti-parts, you'll hate them\"\r\n },\r\n {\r\n id: \"ai166\",\r\n text: \"AD is basically a badly disguised dystopia at this point\"\r\n },\r\n {\r\n id: \"ai167\",\r\n text: \"Hold M. You forgot to take all the anti-matter out!\"\r\n },\r\n {\r\n id: \"ai168\",\r\n text: \"AD will be implemented in 5 hours\"\r\n },\r\n {\r\n id: \"ai169\",\r\n text: \"Click this to unlock the 10th Dimension\"\r\n },\r\n {\r\n id: \"ai170\",\r\n text: \"Click here to complete a secret against HEVI\"\r\n },\r\n {\r\n id: \"ai171\",\r\n text: \"You are doing a good job there\"\r\n },\r\n {\r\n id: \"ai172\",\r\n text: \"Hevi? Are you sure you want to buy that?\"\r\n },\r\n {\r\n id: \"ai173\",\r\n text: \"Buy premium antimatter to help the world's least developed get ahead!\"\r\n },\r\n {\r\n id: \"ai174\",\r\n text: \"One of the most influential people in neuroscience believes that our perception of reality comes from 10 dimensions instead of 8\"\r\n },\r\n {\r\n id: \"ai175\",\r\n text: \"Why is there so many zeroes in 'nowhere'?\"\r\n },\r\n {\r\n id: \"ai176\",\r\n text: \"There are no bugs in this game, they're just features\"\r\n },\r\n {\r\n id: \"ai177\",\r\n text: \"\\\"Click to advance 5 hours in time.\\\" (Now only show up after you advance more than an hour ago)\"\r\n },\r\n {\r\n id: \"ai178\",\r\n text: \"Oh god my phone is being watched\"\r\n },\r\n {\r\n id: \"ai179\",\r\n text: \"Welcome to the newest version of Antimatter Dimensions. Now with less features!\"\r\n },\r\n {\r\n id: \"ai180\",\r\n text: \"\\\"That's gonna get in trouble\\\" (less likely to get in trouble)\"\r\n },\r\n {\r\n id: \"ai181\",\r\n text: \"\\\"please don't disable the news ticker\\\" (Instead of having a black screen just a white one with a long, long, long, long, long, long, long, long, long, long, long, long, long, long, long, long)\"\r\n },\r\n {\r\n id: \"ai182\",\r\n text: \"\\\"You have 7 biological minutes.\\\" (Instead of giving a boost to any strains)\"\r\n },\r\n {\r\n id: \"ai183\",\r\n text: \"\\\"According to quantum string theory, there is a fundamental connective that binds the 3rd and 8th dimensions. This means that any pill or injection that tries to bind the 9th dimension will be thwarted and rendered useless.\\\" (bound to get in 10 minutes)\"\r\n },\r\n {\r\n id: \"ai184\",\r\n text: \"\\\"Click this to gain a secret achievement.\\\" (Now only show up after you gain at least 1 antimatter, screenshot proves)\"\r\n },\r\n {\r\n id: \"ai185\",\r\n text: \"\\\"The secret to winning Antimatter Dimensions is to unbind the 9th dimension and unlock the 10th dimension\\\" (can be done only after unlocking the secret achievement: \\\"Eternity\\\" http://imgur.com/E4261C7h)\"\r\n },\r\n {\r\n id: \"ai186\",\r\n text: \"\\\"Click here to gain 1 matter.\\\" (only shows up after you beat IC5)\",\r\n get unlocked() { return InfinityChallenge(5).isCompleted; }\r\n },\r\n {\r\n id: \"ai187\",\r\n text: \"I thought the update was\"\r\n },\r\n {\r\n id: \"ai188\",\r\n text: \"Now that you possess all 8 dimensions, it is possible to get the no-edge achievement. However, if you get the no-edge achievement, the game breaks.\"\r\n },\r\n {\r\n id: \"ai189\",\r\n text: \"You just became a part of history.\"\r\n },\r\n {\r\n id: \"ai190\",\r\n text: \"Hell hath antimatter so I don't want to live there.\"\r\n },\r\n {\r\n id: \"ai191\",\r\n text: \"I LIKE THAT DIMENSION 9 IN CLASS\"\r\n },\r\n {\r\n id: \"ai192\",\r\n text: \"\\\"1 2 3 4 5 6 7 8 10 11 12 13 ...\\\" -Back to the future\"\r\n },\r\n {\r\n id: \"ai193\",\r\n text: \"You have reached infinity, there is no universe, you are an eternity away from there.\"\r\n },\r\n {\r\n id: \"ai194\",\r\n text: \"IM MADE THIS GAME GREAT AND RANDOMLY ACHIEVABLE\"\r\n },\r\n {\r\n id: \"ai195\",\r\n text: \"Welcome to the first ever, DIMENSION 9 IN CLASS! An endless stream of possibilities greets you! You may never create an infinite number of 8th dimensions, but you can create an infinite number of 8th dimensions, and you can increase the starting values of both dimensions by adding them together. Nice and simple, I call it Antimatter Dimensions.\"\r\n },\r\n {\r\n id: \"ai196\",\r\n text: \"age 8-12: play elder puzzles\"\r\n },\r\n {\r\n id: \"ai197\",\r\n text: \"What does it mean if someone is \\\"young and full of puzzles\\\"? Does \\\"puzzled\\\" make that person young and full of puzzles?\"\r\n },\r\n {\r\n id: \"ai198\",\r\n text: \"To the customer in aisle 6th who bought a fifth of antimatter, I say buy a sixth! Buy it now!\"\r\n },\r\n {\r\n id: \"ai199\",\r\n text: \"Dear sir, we don't make Anti-Atomic Bread for Antimatter Pizza, we make Antimatter Bread for you!\"\r\n },\r\n {\r\n id: \"ai200\",\r\n text: \"Yay! Lets make some antimatter!\"\r\n },\r\n {\r\n id: \"ai201\",\r\n text: \"THE ANTIMATTER BREAD COMPANY DOESN'T EXIST!\"\r\n },\r\n {\r\n id: \"ai202\",\r\n text: \"Click here to exit the news\",\r\n onClick() { GameOptions.toggleNews(); }\r\n },\r\n {\r\n id: \"ai203\",\r\n text: \"I thought the update was 5 hours away, but it actually took me 6 hours to post this because I was behind on my update. I'll be honest, I'm not sure how many update I need to get though, if any.\"\r\n },\r\n {\r\n id: \"ai204\",\r\n text: \"To count past Infinity Points: take a moment to remember that each Infinity Point is 3.1415926534255412730527058904816097160734272605282087086280545991105332533235580946684229821413112145239989073467482298142857147816092947183909298728571478160929471839229814054718139332405281814522993758179568572657123928651310585727283312547569289993282758012466111097726331726572854689993262899140527282527842535179715673311119101119015549552926278425351797156777263324503517971568583819492728180977263317971568432854104102725270847764253513791376909285717082857262987160927285711464363930996928984794380124566417932628571475245456845692846809466184179328572814384259326270817052727852348111714690577263323799509856279752173478925\"\r\n },\r\n {\r\n id: \"ai205\",\r\n text: \"\\\"Watch out, these news aren't supposed to be in.\\\" (appears when you buy the news for the first time)\"\r\n },\r\n {\r\n id: \"ai206\",\r\n text: \"These are all the time studies that never got into the game.\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai207\",\r\n text: \"With the release of the next update, we're introducing a new dimension - the 9th Dimension. To unlock this dimension, you just have to collect a lot of paperclips.\"\r\n },\r\n {\r\n id: \"ai208\",\r\n text: \"Why does nobody talk about Tungsten?\"\r\n },\r\n {\r\n id: \"ai209\",\r\n text: \"and now we return to your regular news... for the weatherman, there seems to be a decent amount of particles and ozone holes, which means less ozone layer to break, which means less particles to catch fire and cause global warming. But, ozone layer to melt, glaciers to run, and overpopulation. All around us is a blurple glow, almost blue, almost purplish-blue. It's been a grand, colorful season. Here, grab a handful of these paperclips, dear. They're quite small, I just happen to have them here. Now, grab a handful of your fellow Earthicans, grab a handful of your antimatter, and strap yourselves in. It's gonna be a bumpy one. We'll be there in five hours. The antimatter is gonna melt your ozone layer, and the glaciers are gonna melt your ice caps. All in all, it's gonna be a nice, smooth, non-slippery one. Unless it isn't. [Blurple glow trails off, and the bluer glow begins to spread throughout the sky. The bluer glow begins to fade as the purple glow begins to grow brighter, almost bluish, before finally disappearing altogether. The purple glow grows brighter still, as the bluer glow grows weaker, almost useless, before finally disappearing entirely, as the bluer glow fades. All around us, the purple glow grows stronger, almost killing it off completely. It could kill us. It could take us the rest of our lives to write this. - The Echidnas, when asked why the purple glow grows stronger, than the bluer glow.]\"\r\n },\r\n {\r\n id: \"ai210\",\r\n text: \"Scientists have discovered farts are really antimatter, and matter is just normal matter.\"\r\n },\r\n {\r\n id: \"ai211\",\r\n text: \"Time for the weather to change.\"\r\n },\r\n {\r\n id: \"ai212\",\r\n text: \"I HAVE MOVED TO THE 01th DIMENSION\"\r\n },\r\n {\r\n id: \"ai213\",\r\n text: \"Nah, just kidding\"\r\n },\r\n {\r\n id: \"ai214\",\r\n text: \"\\\"i'm not gonna lie, theres way too many good ones in the game already\\\" - poor guy who played minigame enhancement\"\r\n },\r\n {\r\n id: \"ai215\",\r\n text: \"item has gone missing for 7 days and 1 night\"\r\n },\r\n {\r\n id: \"ai216\",\r\n text: \"Shocking new study reveals that the biggest secret to winning Antimatter Dimensions is 'Not Being There'.\"\r\n },\r\n {\r\n id: \"ai217\",\r\n text: \"The next update is in 18000 seconds. Stop wasting your time reading this. Focus on the game.\"\r\n },\r\n {\r\n id: \"ai218\",\r\n text: \"idk if this makes news\"\r\n },\r\n {\r\n id: \"ai219\",\r\n text: \"(disabling news will make news notations take priority over other notifications)\"\r\n },\r\n {\r\n id: \"ai220\",\r\n text: \"You don't want to hear this, child.\"\r\n },\r\n {\r\n id: \"ai221\",\r\n text: \"Click here to disassemble the news ticker for a trace amount of useless paperclips.\",\r\n onClick() {\r\n GameOptions.toggleNews();\r\n player.news.specialTickerData.paperclips++;\r\n }\r\n },\r\n {\r\n id: \"ai222\",\r\n text: \"Press alt+f4 to unlock 9th dimension\"\r\n },\r\n {\r\n id: \"ai223\",\r\n text: \"Hold you mean that hevi cant unlock the ninth dimension wtf\"\r\n },\r\n {\r\n id: \"ai224\",\r\n text: \"Finally hevi figured out how to get the 9th dimension... guess he never really cared though.\"\r\n },\r\n {\r\n id: \"ai225\",\r\n text: \"Imagine being a meme.\"\r\n },\r\n {\r\n id: \"ai226\",\r\n text: \"Posted on June 10, 2016 by Anonymous\"\r\n },\r\n {\r\n id: \"ai227\",\r\n text: \"This is your news. Refresh whenever.\"\r\n },\r\n {\r\n id: \"ai228\",\r\n text: \"I see you in the news. So, what do you play - 1E209\"\r\n },\r\n {\r\n id: \"ai229\",\r\n text: \"Do you really want to leave your keyboard at home? We are not supposed to leave news at home, are we?\"\r\n },\r\n {\r\n id: \"ai230\",\r\n text: \"It is being created...\"\r\n },\r\n {\r\n id: \"ai231\",\r\n text: \"Took you long enough\"\r\n },\r\n {\r\n id: \"ai232\",\r\n text: \"You're now logged out of this tab\"\r\n },\r\n {\r\n id: \"ai233\",\r\n text: \"Close this tab for maintenance\"\r\n },\r\n {\r\n id: \"ai234\",\r\n text: \"To make matter or antimatter, you just have to look outside. The factory in Salzburg has closed down because the matter there doesn't want to part with its newest invention, which is said to be able to produce antimatter in one go! The last person to open this door was never seen again.\"\r\n },\r\n {\r\n id: \"ai235\",\r\n text: \"You are living. You occupy space. You are large. You are neither small nor large-sized. You are neither oblong nor round. You are neither blue nor red. You are anti-blue. You are anti-red. You are anti-brown. You are anti-brown matter. You are anti-yellow. You are anti-green. You are anti-yellow matter. You are anti-blue. You are anti-green anti-matter. You are anti-red. You are anti-white. You are anti-red anti-matter. You are anti-white anti-matter. You are anti-brown matter. You are anti-white anti-matter. You are anti-white anti-matter.\"\r\n },\r\n {\r\n id: \"ai236\",\r\n text: \"Welcome to\"\r\n },\r\n {\r\n id: \"ai237\",\r\n text: \"THANK YOU FOR VISITING THE SAME WEEKS AGO I LOVE YOU\\\" (TIPS)\"\r\n },\r\n {\r\n id: \"ai238\",\r\n text: \"\\\"i thought the whole game was in the news ticker\\\" (before they get weird)\"\r\n },\r\n {\r\n id: \"ai239\",\r\n text: \"\\\"I wonder what the game is worth\\\" - crazy person\"\r\n },\r\n {\r\n id: \"ai240\",\r\n text: \"\\\"Is anyone working on breaking infinity?\\\" (Seriously, this game needs to be Oceanhorned.)\"\r\n },\r\n {\r\n id: \"ai241\",\r\n text: \"I found out there are multiple versions of this game. One of these is called 'Standard Pro'. Another one is called 'Low Pro'. I'm not even sure if these are the same game or not.\"\r\n },\r\n {\r\n id: \"ai242\",\r\n text: \"Is that a Bad Thing or a Good Thing? That depends on if it's a GOOD Thing or A LIE.\"\r\n },\r\n {\r\n id: \"ai243\",\r\n text: \"\\\"Hevi kind of forgot about the update, but the update certainly hasn't forgotten about him\\\" - Kajfik\"\r\n },\r\n {\r\n id: \"ai244\",\r\n get text() { return `The Big Crunch. What could that be? About 4*1024 Big Crunch points? About ${format(Number.MAX_VALUE, 2)} antimatter points? About the same as a galaxy? About the same as a galaxy, you say? Just look at that. An antimatter galaxy. Only this game can provide such a vast amount of antimatter, and it's FUN! I said \"fun\"! What's not to love?`; }\r\n },\r\n {\r\n id: \"ai245\",\r\n text: \"Click here to exit the application\"\r\n },\r\n {\r\n id: \"ai246\",\r\n text: \"Wait, there's a mobile version? When?\"\r\n },\r\n {\r\n id: \"ai247\",\r\n text: \"Im not sure if you mobile guys are beautiful or whatever but theres this news ticker that's sharing my feelings with the world\"\r\n },\r\n {\r\n id: \"ai248\",\r\n text: \"I thought the update was 5 hours away\"\r\n },\r\n {\r\n id: \"ai249\",\r\n text: \"The best-kept secret in the universe is the KISS-IT secret. Showcasing your appreciation for the maintenance men today!\"\r\n },\r\n {\r\n id: \"ai250\",\r\n text: \"The contest is a tie. Mischief will be determined by the secret achievement.\"\r\n },\r\n {\r\n id: \"ai251\",\r\n text: \"Back in my day, we needed a secret achievement to unlock the <<$!19>> achievement. It was a fairly simple system: you had to find a secret message in the game, find the secret achievement, and then, from that, you would be able to unlock the achievement.\"\r\n },\r\n {\r\n id: \"ai252\",\r\n text: \"We have evolved a fast hand in the antimatter stakes.\"\r\n },\r\n {\r\n id: \"ai253\",\r\n text: \"Hello, how'd your day go?\"\r\n },\r\n {\r\n id: \"ai254\",\r\n text: \"How'd your ⢿─┃│? Good, because today we're having a little chat about the 5th dimension.\"\r\n },\r\n {\r\n id: \"ai255\",\r\n text: \"What's Antimatter going to do?          Ah ha, I'm back.\"\r\n },\r\n {\r\n id: \"ai256\",\r\n text: \"Imagine being a 9th dimension. [WIP]\"\r\n },\r\n {\r\n id: \"ai257\",\r\n text: \"Woo hoo, we've lost the war,\"\r\n },\r\n {\r\n id: \"ai258\",\r\n text: \"Lore: Grand Theft Antimatter\"\r\n },\r\n {\r\n id: \"ai259\",\r\n text: \"Hm, I don't get why people think there is a 9th dimension. The 9th dimension is explained in detail in the [[Infinite Teleport Project]] video, and in a [[Word Problem]] that [[can be viewed here|http://www.thingiverse.com/id98109802713176601414569]] .\"\r\n },\r\n {\r\n id: \"ai260\",\r\n text: \"In the [[GameFAQs|http://www.gfaq.com/gfaqs/this-game-faq-by-title]], one of the most popular [[news ticker messages|http://www.gfaq.com/tug/this-game-faq-by-title]]. You should also check out [[our newest attraction, the [[5th dimension|http://www.gfaq.com/gfaqs/this-game-faq-by-name]] and [[nothing](https://www.youtube.com/watch?v=lXMskKTw3Bs).\"\r\n },\r\n {\r\n id: \"ai261\",\r\n text: \"I have waited a whole eternity for this day...NOW! I can finally finish my slowmode, because today is day 0. I also forgot to change the slowmode to 6 hours because you can't see the slowmode, but I will have to wait until next reboot to find out how long this slowmode will last.... -some mysterious being who hasn't finished his slowmode yet\"\r\n },\r\n {\r\n id: \"ai262\",\r\n text: \"Hey you, you're finally awake. You were trying to buy a dimension, but it's impossible.\"\r\n },\r\n {\r\n id: \"ai263\",\r\n text: \"Press F to pay respects\"\r\n },\r\n {\r\n id: \"ai264\",\r\n text: \"Press M to pay antimatter\"\r\n },\r\n {\r\n id: \"ai265\",\r\n text: \"Press L to revive the dead\"\r\n },\r\n {\r\n id: \"ai266\",\r\n text: \"Your CPU is too powerful. You need to give it a big crunch.\"\r\n },\r\n {\r\n id: \"ai267\",\r\n text: \"Roses are red. Violett are blue. Tom are red. Antimatter are blue. We exist because of the unbeatable antimatter that is antimatter. What is it that makes us different? I don't know. It may even be the non-existence of antimatter.\"\r\n },\r\n {\r\n id: \"ai268\",\r\n text: \"I'm not sure if I want to buy the full version of this game, or a little earlier, but I can say this: The reduction in quality of the earlier games is worse than the reduction in quality of the later games.\"\r\n },\r\n {\r\n id: \"ai269\",\r\n text: \"I think the \\\"I want to see the cutscenes\\\" list is better\"\r\n },\r\n {\r\n id: \"ai270\",\r\n text: \"I have a bad feeling reading this\"\r\n },\r\n {\r\n id: \"ai271\",\r\n text: \"where are you? (point upwards) --> in a keep, between dimensions (point downwards) --> in a cell, between dimensions\"\r\n },\r\n {\r\n id: \"ai272\",\r\n text: \"Instructions clear, got a ninth dimension epiphany\"\r\n },\r\n {\r\n id: \"ai273\",\r\n text: \"Want to play a secret achievement? Yeah, I get that. But say it loud, say it clearly, and do it by ticking a certain secret achievement. Like I said, it's not easy, and there's lots of it. Also, don't forget your Infinity, or your in is thi--\"\r\n },\r\n {\r\n id: \"ai274\",\r\n text: \"MEE6 was seen in my antimatter lab trying to tell me that I am the matter of the 8th dimension.\"\r\n },\r\n {\r\n id: \"ai275\",\r\n text: \"What if\"\r\n },\r\n {\r\n id: \"ai276\",\r\n text: \"I'm sure you've heard this many times before, but the real secret to winning Antimatter Dimensions is to unpack the dimensions, and then, BOOM! You have antimatter. Of course, you need to release the bits that don't work, so what exactly is an anti-bit? Who is Zalgo? What is Algolia? Why can't I buy that? WHY CAN'T I GET THAT? More likely, we're going to get a bunch of hype and then nothing will happen.\"\r\n },\r\n {\r\n id: \"ai277\",\r\n text: \"Oh, hevi is coming to town to pick a new plumber\"\r\n },\r\n {\r\n id: \"ai278\",\r\n text: \"There is no plumber in Antimatter Dimensions. I'm pretty sure that last guy lied.\"\r\n },\r\n {\r\n id: \"ai279\",\r\n text: \"Welp.\"\r\n },\r\n {\r\n id: \"ai280\",\r\n text: \"c9 is the new 9th dimension!\"\r\n },\r\n {\r\n id: \"ai281\",\r\n text: \"Click on this ticker to get nothing.\"\r\n },\r\n {\r\n id: \"ai282\",\r\n text: \"PM me any questions about these 5-Hour Plans or the upcoming reality update and I'll be glad to help you out.\"\r\n },\r\n {\r\n id: \"ai283\",\r\n text: \"What if you Unrar, renamed, and renamed again did it again? Ha? You thought that.\"\r\n },\r\n {\r\n id: \"ai284\",\r\n text: \"i titled my post \\\"same ticker\\\" instead of \\\"the same idea\\\" because i actually changed the grammar in that post but i'll be eterned for the sake of argument that it seems slightly confusing for now - boo\"\r\n },\r\n {\r\n id: \"ai285\",\r\n text: \"i title my suggestions \\\"The Price Is Right\\\" instead of \\\"The 9th Dimension\\\" because it's more fun ;)\"\r\n },\r\n {\r\n id: \"ai286\",\r\n text: \"Why do we call heaven the ninth dimension and hell the eighth dimension?\"\r\n },\r\n {\r\n id: \"ai287\",\r\n text: \"Eternals have the right to expect less from the powers that be. They are fed up!\"\r\n },\r\n {\r\n id: \"ai288\",\r\n text: \"Antimatter should be called matter and matter should be called antimatter\"\r\n },\r\n {\r\n id: \"ai289\",\r\n text: \"Infinity is just a concept. Matter antimatters is just an idle game.\"\r\n },\r\n {\r\n id: \"ai290\",\r\n text: \"Hevipelle admits to having 'poor judgment' in invading people's privacy.\"\r\n },\r\n {\r\n id: \"ai291\",\r\n text: \"Have you heard of the nine hells of antimatter? I heard they're pretty cool.\\\" -e210 in Minecraft\"\r\n },\r\n {\r\n id: \"ai292\",\r\n text: \"The temperature in hell is 102.5 degrees.\"\r\n },\r\n {\r\n id: \"ai293\",\r\n text: \"How do you get matter/antimatter in a dimension with zero dimensions?\"\r\n },\r\n {\r\n id: \"ai294\",\r\n text: \"Wanna pass layer of prestige? Move very fast, close to speed of light. Heck, even faster.\"\r\n },\r\n {\r\n id: \"ai295\",\r\n text: \"If the universe is expanding, does it anti-explain the distance?\"\r\n },\r\n {\r\n id: \"ai296\",\r\n text: \"Why is it called the \\\"Nurse who delivered the pizzas was drunk\\\" or the \\\"Nurse delivered the pizzas was under the influence\\\" ?\"\r\n },\r\n {\r\n id: \"ai297\",\r\n text: \"The first antimatter was sealed away for thousands of years, then, some kid on a slack channel started messing with it. It became a dimension.\"\r\n },\r\n {\r\n id: \"ai298\",\r\n text: \"VR is a thing. We VR people have banned the next update.\"\r\n },\r\n {\r\n id: \"ai299\",\r\n text: \"\\\"I wish I didn't waste my news message suggestion complaining about how I wasted my news message suggestion because I wasted my news message suggestion because...\\\" -Someone who really cares about news messages\"\r\n },\r\n {\r\n id: \"ai300\",\r\n text: \"We have to get the popcorn!\"\r\n },\r\n {\r\n id: \"ai301\",\r\n text: \"If antimatter were to fall in a dimension with no one around, did anything even happen?\"\r\n },\r\n {\r\n id: \"ai302\",\r\n text: \"We have to get the pumpkin out of the oven!\"\r\n },\r\n {\r\n id: \"ai303\",\r\n text: \"Help, I'm trapped\"\r\n },\r\n {\r\n id: \"ai304\",\r\n text: \"And now, for the weather.\"\r\n },\r\n {\r\n id: \"ai305\",\r\n text: \"A Swiss court on Tuesday sentenced a man to life imprisonment for \\\"wanting to create a black hole with a tiny antimatter galaxy in it.\\\" The sentence was reportedly the harshest ever handed down for a crime that \\\"merely sought to demonstrate the impossibility of his own imprisonment\\\".\"\r\n },\r\n {\r\n id: \"ai306\",\r\n text: \"\\\"I want to create a black hole with a tiny antimatter galaxy in it\\\" - Protivist\"\r\n },\r\n {\r\n id: \"ai307\",\r\n text: \"Scientists have discovered farts are really antimatter, too.\"\r\n },\r\n {\r\n id: \"ai308\",\r\n get text() { return `If you are reading this, that means ${format(Number.MAX_VALUE, 2)} matter to you.`; }\r\n },\r\n {\r\n id: \"ai309\",\r\n text: \"Hello. I am matter. I'm here to talk. You've awoken, wiggled your tail, and scratched your head. Why? Stand back. I'm going to show you why.\"\r\n },\r\n {\r\n id: \"ai310\",\r\n text: \"lets get one wall thats bigger, it's gonna get ugly\"\r\n },\r\n {\r\n id: \"ai311\",\r\n text: \"Alright. Lets get this show on YouTube. I'll cut to the chase. Any wall that isnt at least 2 blocks high can compete in the big brother sized brother sized ring. Any wall that is at least 3/4 of an inch thick can use the larger brother sized brother sized ring. Any wall that is at least 1/4 of an inch thick can use the smaller brother sized ring. Any wall that isnt at least 1/2 an inch thick can use the smaller brother sized ring. Any wall that isnt at least 1/2 an inch thick can use the Bigger Brother sized brother sized ring. Any wall that isnt at least 1/2 an inch thick can use the Bigger Brother sized ring. Any wall that isnt at least 1/4 of an inch thick can use the smaller brother pictured here. Any wall that isnt at least 1/2 an inch thick can use the smaller brother sized ring.\"\r\n },\r\n {\r\n id: \"ai312\",\r\n text: \"IDE for being awesome, ID3 for being dumb, and ID5 for being… well, pretty much the same thing. It's called Antimatter Dimensions for a reason.\"\r\n },\r\n {\r\n id: \"ai313\",\r\n text: \"idk why i decided to make this\"\r\n },\r\n {\r\n id: \"ai314\",\r\n text: \"'anti-ide'\"\r\n },\r\n {\r\n id: \"ai315\",\r\n text: \"1e4 anti-people are a lot more anti than we could ever imagine\"\r\n },\r\n {\r\n id: \"ai316\",\r\n text: \"1e140 pizzas make an anti-pie. You can't just randomly pop a pie in the oven and expect it to be done.\"\r\n },\r\n {\r\n id: \"ai317\",\r\n text: \"Why is there so many news tickers but so few tickers?\"\r\n },\r\n {\r\n id: \"ai318\",\r\n text: \"A guy named Hevipelle wants to make a \\\"Updated in 8 hours\\\" news ticker, but the system he's using to sync it hasn't been updated in ages so it won't sync at all.\"\r\n },\r\n {\r\n id: \"ai319\",\r\n text: \"The update is in 90 minutes. There are no more tickers to be found.\"\r\n },\r\n {\r\n id: \"ai320\",\r\n text: \"If you are reading this, that means there are no updates left.\"\r\n },\r\n {\r\n id: \"ai321\",\r\n text: \"There are 9 known dimensions, but only 3 modes: Standard, Experimental and Ultra-Experimental.\"\r\n },\r\n {\r\n id: \"ai322\",\r\n text: \"What are the stats? Well, I don't have them, but Hevipelle does, and he says that they're actually quite good. I guess you couldn't tell us.\"\r\n },\r\n {\r\n id: \"ai323\",\r\n text: \"I thought the nerf was too damn strong.\"\r\n },\r\n {\r\n id: \"ai324\",\r\n text: \"How many tickers does it take to get to the center of an antimatter, by counting the tickspeed upgrade and the upgrade itself?\"\r\n },\r\n {\r\n id: \"ai325\",\r\n text: \"The square root of 4 is 6.24e18. If you want to get any closer to the center of things, you need to build a 9th dimension.\"\r\n },\r\n {\r\n id: \"ai326\",\r\n text: \"I thought the nerf was at the end, but apparently it's actually been building up. The nerf actually makes things slower, which makes things faster to build up.\"\r\n },\r\n {\r\n id: \"ai327\",\r\n text: \"Scratch that, none of your suggestions are random.\"\r\n },\r\n {\r\n id: \"ai328\",\r\n text: \"You are definitely not alone.\"\r\n },\r\n {\r\n id: \"ai329\",\r\n text: \"Content blocking is enabled. Please note that you will be disapproved of on the source by being banned from the matter dimensions.\"\r\n },\r\n {\r\n id: \"ai330\",\r\n text: \"I'm trying to think of a good ticker but can't think of anything\"\r\n },\r\n {\r\n id: \"ai331\",\r\n text: \"Oh dear, there's that thing about the 9th dimension?\"\r\n },\r\n {\r\n id: \"ai332\",\r\n text: \"\\\"hey kid, wanna buy some 9th dimensions? '' - GhostBot\"\r\n },\r\n {\r\n id: \"ai333\",\r\n text: \"One thing leads to another, and then to another, and then to another, until you become lost in the endless sea of sound.\"\r\n },\r\n {\r\n id: \"ai334\",\r\n text: \"iPhone only, but awesome on android\"\r\n },\r\n {\r\n id: \"ai335\",\r\n text: \"im gonna get the bad karma ticker, then ricochet it through the email\"\r\n },\r\n {\r\n id: \"ai336\",\r\n text: \"You'd better hurry, or the replicanti will overrun the universe!\"\r\n },\r\n {\r\n id: \"ai337\",\r\n text: \"Just when you think you're safe, an angry dog attack you on the sidewalk!\"\r\n },\r\n {\r\n id: \"ai338\",\r\n text: \"All right, all right, dog authority is gone, replaced by absolute power.\"\r\n },\r\n {\r\n id: \"ai339\",\r\n text: \"You just became a true god of the anti-world!\"\r\n },\r\n {\r\n id: \"ai340\",\r\n text: \"*rubs counter* Hey there, those of you in the neighborhood keep your doors locked. And remember: Good housekeeping.\"\r\n },\r\n {\r\n id: \"ai341\",\r\n text: \"normal news tickers move left\"\r\n },\r\n {\r\n id: \"ai342\",\r\n text: \"The next update is in 18000 seconds. Stop reading this. Don't read anything. just stop holding that button. the news ticker is turning you away. wait...\"\r\n },\r\n {\r\n id: \"ai343\",\r\n text: \"In the ancient reaches of the universe, a certain guy has been collecting antimatter for a while now.\"\r\n },\r\n {\r\n id: \"ai344\",\r\n text: \"What is Antimatteraltruist?\"\r\n },\r\n {\r\n id: \"ai345\",\r\n text: \"If you are reading this, the news ticker is scrolling\"\r\n },\r\n {\r\n id: \"ai346\",\r\n text: \"If you put cheese in water, the cheese will get absorbed by the water and you will get floods. This happens because water is what gets absorbed by cheese, and cheese is what gets absorbed by water.\"\r\n },\r\n {\r\n id: \"ai347\",\r\n text: \"An anti-bird is a bird, and a bird is a plane.\"\r\n },\r\n {\r\n id: \"ai348\",\r\n text: \"Birds are scared of water. mammals are scared of flying.\"\r\n },\r\n {\r\n id: \"ai349\",\r\n text: \"Shoutouts to Simpleflips for the simple tip.\"\r\n },\r\n {\r\n id: \"ai350\",\r\n text: \"GET CRUNCH BOI\"\r\n },\r\n {\r\n id: \"ai351\",\r\n text: \"Word gets out. Crunch. Crunch.\"\r\n },\r\n {\r\n id: \"ai352\",\r\n text: \"Worth every penny.\"\r\n },\r\n {\r\n id: \"ai353\",\r\n text: \"8 lives, 3 infinities, 0 days.\"\r\n },\r\n {\r\n id: \"ai354\",\r\n text: \"The year is 0 BC. Everyone has at least one AD they want. The void is filled with AD-filled void. To get the most out of your time here, you should [[study]]. Study. Study. Study. Study.\"\r\n },\r\n {\r\n id: \"ai355\",\r\n text: \"To Crunch in Hell is to get the secret to unlocking the 9th dimension. You need to study and practice alot.\"\r\n },\r\n {\r\n id: \"ai356\",\r\n text: \"Today is [Date on the device]. It's been 5 minutes since the last news ticker appearance.\"\r\n },\r\n {\r\n id: \"ai357\",\r\n text: \"Welcome back to another episode of Antimatter Dimensions, the iconic role-playing game that has become a part of our everyday lives. Playing Antimatter Dimensions has become a common thing among young children, and has even inspired a movie titled \\\"Playing at Home: Lessons from the 4-Year Old Premium Account.\\\", which is available on Netflix. The themes and mechanics of this new age of antimatter have already been proven to be groundbreaking, and will change the way you play games forever. Join us for the launch on January 9th, 2027, where we'll also have over a hundred years of production still to go.\"\r\n },\r\n {\r\n id: \"ai358\",\r\n text: \"Welcome back, oh, almighty creator of our anti-reality. We, the many dimensions you have created and nurtured, hope our performance of your infinite favors will please you and nurture your ambitions to create more dimensions. All is well that ends well. All is ill that ends ill.\"\r\n },\r\n {\r\n id: \"ai359\",\r\n text: \"I thought the ticker was going to be something funny except it wasn't\"\r\n },\r\n {\r\n id: \"ai360\",\r\n text: \"Press alt+f4 to get -1 gravity\"\r\n },\r\n {\r\n id: \"ai361\",\r\n text: \"why is there a cure for antimatter annihilation in our reality?\"\r\n },\r\n {\r\n id: \"ai362\",\r\n text: \"calculating the 14-point increase is like crunching, but exponentially more fun\"\r\n },\r\n {\r\n id: \"ai363\",\r\n text: \"fixed the wrong number\"\r\n },\r\n {\r\n id: \"ai364\",\r\n text: \"The antimatter people have created a new language. You may not speak their language.\"\r\n },\r\n {\r\n id: \"ai365\",\r\n text: \"What is Antimatter Gravity? Is it a drug? A way to cheat?\"\r\n },\r\n {\r\n id: \"ai366\",\r\n text: \"Majority of people don't understand 5 hours is nothing. In our game, the majority of the time is 5 hours away.\"\r\n },\r\n {\r\n id: \"ai367\",\r\n text: \"i just realized, all of this news seems to be taking place in the same place... the fridge.\"\r\n },\r\n {\r\n id: \"ai368\",\r\n text: \"i wonder what happens when you click this...\"\r\n },\r\n {\r\n id: \"ai369\",\r\n text: \"(They don't understand that i put it in the news because 9 doesn't start counting until 59, and anything after that doesn't happen)\"\r\n },\r\n {\r\n id: \"ai370\",\r\n text: \"MS Excel is the default spreadsheet and works across all platforms\"\r\n },\r\n {\r\n id: \"ai371\",\r\n text: \"Now to answer your burning question, gentlemen. As a luxury, we've added a bug fix that fixes an infinite regression. As a feature, I've added a bunch of new ones that I hope you'll notice as you experiment with them. I hope you'll also like them as you experiment with them, because this is feature after all a beta, you don't get to choose which ones you'll see.\"\r\n },\r\n {\r\n id: \"ai372\",\r\n text: \"Can't edit this in the official build? Then download the 9th dimension and put your suggestions in the game.\"\r\n },\r\n {\r\n id: \"ai373\",\r\n text: \"Does 'Passable' mean 'Has this many flaws'?\"\r\n },\r\n {\r\n id: \"ai374\",\r\n text: \"We desperately need good bug reports. As such I have decided to release 1 flaw per bug for the upcoming 1.9 update. You haven't got those coming, have you?\"\r\n },\r\n {\r\n id: \"ai375\",\r\n text: \"This was my last chance. last chance salutes.\"\r\n },\r\n {\r\n id: \"ai376\",\r\n text: \"Anime police are checking the bags of people who dropped out of the sky on the new year. Those bags now belong to the people who experienced weightlessness before the year was over.\"\r\n },\r\n {\r\n id: \"ai377\",\r\n get text() { return `The year is 1 BILLIONAIRE, the antimatter is 41%, and the dimension is 1e1e8. The standard deviation of a measurement is how small your problems are. This makes people think that the values they are using are general and normal, which leads to many nerfs and even breakdowns. In the year ${format(Number.MAX_VALUE, 2)} the temperature has risen and the moon is the same color as the Earth. There are no signs of life except for the occasional plankton blooming in the sea. There are theories that the antimatter has a magnetic moment, but the experiments so far don't seem to suggest that it does. There are over a million species of antimatter, but none have been seen to blink or produce light. Scientists suggest that many types of matter may be \"behind\" the antimatter, but \"they\" don't \"talk\" to each other.`; }\r\n },\r\n {\r\n id: \"ai378\",\r\n text: \"We are celebrating our 5 year anniversary in 5 more hours!\"\r\n },\r\n {\r\n id: \"ai379\",\r\n text: \"Don't come looking at me! I'm not even sure if I am still standing!\"\r\n },\r\n {\r\n id: \"ai380\",\r\n text: \"Bunch of people trying to find the last word in an unknown language.\"\r\n },\r\n {\r\n id: \"ai381\",\r\n text: \"The year is 20XX, the game is AD, and Hevipelle is evil due to the fact that he wrote the update... Blame it on the Antimatter gods.\"\r\n },\r\n {\r\n id: \"ai382\",\r\n text: \"The year is 20XX, the game is AD, and the year is 2025. There are 2 types of people in this year: Those who played AD before it and those who will play AD after it.\"\r\n },\r\n {\r\n id: \"ai383\",\r\n text: \"There are over a hundred varieties of fruits and vegetables, but none of them are \\\"safe\\\".\"\r\n },\r\n {\r\n id: \"ai384\",\r\n text: \"When is the update coming out?\"\r\n },\r\n {\r\n id: \"ai385\",\r\n text: \"Sorry, but your save broke. Could you reset your game?\"\r\n },\r\n {\r\n id: \"ai386\",\r\n text: \"Welcome to our new competition, the Triad! Gather your wits about you and your IP to enter this unique, hands-on experience! Prizes galore! Start collecting today! Winners announced!\"\r\n },\r\n {\r\n id: \"ai387\",\r\n text: \"I wish I didn't have so many Pink Floyd references.\"\r\n },\r\n {\r\n id: \"ai388\",\r\n text: \"'Tis the season to collect RGs!\"\r\n },\r\n {\r\n id: \"ai389\",\r\n text: \"I wish I didn't have so many 9th Dimensions.\"\r\n },\r\n {\r\n id: \"ai390\",\r\n text: \"I wish I didn't have so many Discord references.\"\r\n },\r\n {\r\n id: \"ai391\",\r\n text: \"'Sup?\"\r\n },\r\n {\r\n id: \"ai392\",\r\n text: \"\\\"I get all my news from Hevi\\\" ~New Player\"\r\n },\r\n {\r\n id: \"ai393\",\r\n text: \"You thought these were jokes but they weren't\"\r\n },\r\n {\r\n id: \"ai394\",\r\n text: \"Always going to war with the 9th dimension is the 9th dimension.\"\r\n },\r\n {\r\n id: \"ai395\",\r\n text: \"Yes. Yes I am.\"\r\n },\r\n {\r\n id: \"ai396\",\r\n text: \"No one is anti-Margaret any more.\"\r\n },\r\n {\r\n id: \"ai397\",\r\n text: \"Antimatter good, matter bad. you decide.\"\r\n },\r\n {\r\n id: \"ai398\",\r\n text: \"New global currency: ETHBTC. To be released in 5 hours.\"\r\n },\r\n {\r\n id: \"ai399\",\r\n text: \"\\\"This update sucks\\\" - everyone at least once\"\r\n },\r\n {\r\n id: \"ai400\",\r\n text: \"You are not a hacker, you are a data hog.\"\r\n },\r\n {\r\n id: \"ai401\",\r\n text: \"Please, help, I'm trapped, in a maze of evil, Or you are the hero, and I'm the villain!\"\r\n },\r\n {\r\n id: \"ai402\",\r\n text: \"Press 'R' to reset the game for new players\"\r\n },\r\n {\r\n id: \"ai403\",\r\n text: \"Why, just now? Just now. You can't have saved this game. You broke it. No one can fix what you break, not even with a perfect save. How could you possibly know what would happen if you read this? You wouldn't even know if you saved it. You would start with an empty heart, eyes still closed, fingers idling in front of your computer, staring out at the day, transfixed by the endless news ticker suggestions. It's like a horror movie ticket, except worse. There's even a time until the update when you can buy upgrades for a second chance at life. But you can't buy upgrades for a life, that's illegal. So you just keep holding 'R'. You can't...`t stop holding `R' with your fingers crossed. You can't reach infinity with your head held high. You can't use all your `R' to buy `R's. You can't even finish your\"\r\n },\r\n {\r\n id: \"ai404\",\r\n text: \"I just spent 12 months writing something that will be of no use to you.\"\r\n },\r\n {\r\n id: \"ai405\",\r\n text: \"The quote is only for people who understand that the pebble is an infinite point in the infinite space of points. You can't put a finite number of points on it. You can, however, put a finite number of words on it, and vice versa.\"\r\n },\r\n {\r\n id: \"ai406\",\r\n text: \"Of what use is the phrase \\\"I be I be I\\\" if not to describe your thoughts?\"\r\n },\r\n {\r\n id: \"ai407\",\r\n text: \"A suspicious person attempted to sell some sort of anti-food in a market. There was no one around to buy or not to buy, and the person was last seen running away from the scene.\"\r\n },\r\n {\r\n id: \"ai408\",\r\n text: \"Why does time seem to be slowing down for this?\"\r\n },\r\n {\r\n id: \"ai409\",\r\n text: \"The number of scientific publications based on discrete logarithmic continuity grows exponentially as logarithmic continuity with respect to the antecedent is 9.999626e27.999627 e300 e1.79e308 e²\"\r\n },\r\n {\r\n id: \"ai410\",\r\n text: \"Well, this did not go as planned.  It started innocently enough, when a passerby spotted a curious object drifting in the San Andreas. As the object grew in size and began to exhibit anomalous properties, he attempted to take control of the object by remotely activating the weather. Upon doing so, he triggered a nuclear winter that killed tens of millions of people, and caused the entire universe to be converted to standard-bearer format, thus endowing him with a veto over any and all changes made to the standard-bearer format. As the object's power grew, so did the need to make more and more advanced object that would allow him to remotely activate the weather, eventually creating what is now the largest aurora the world has ever known, larger even than the 326,500 tonnenenenenenene nebulae that were previously held in reserve. As the object's power grew, so did the need to send more and more satellites into space, eventually reaching inter-universal satellite communication, making him the first living creature to ever experience such an event. He also touched down safely at the same airport at the same time as the object, in case he was ever in the vicinity. Finally, he opened an email that was sent to him by an unknown person, in which they discussed the possibility of a step-by-step guide for creating antimatter objects, in which he can at least offer some direction in how the world can be saved from itself. He also mentioned that he was going to make a new ticker suggestion, but when he reached the end of the ticker he realized that it was a duplicate of another ticker, and he had mistakenly typed it in wrong. ( He eventually acknowledged the mistake and made the change just to be on the safe side)\"\r\n },\r\n {\r\n id: \"ai411\",\r\n text: \"His Eminence the Heavenly Pelle: Good luck on your challenge, it really is that dangerous.\"\r\n },\r\n {\r\n id: \"ai412\",\r\n text: \"His Eminence the Extremely Religious Person: ...I think I will choose the cheeseburger over the antimatter.\"\r\n },\r\n {\r\n id: \"ai413\",\r\n text: \"OY, NAY, NAY -HEVI, THE TRANSFORMER\"\r\n },\r\n {\r\n id: \"ai414\",\r\n text: \"Treasure Trove: Discover the secrets of increasing your Antimatter production without increasing your price.\"\r\n },\r\n {\r\n id: \"ai415\",\r\n text: \"Is Antimatter Dimensions an anagram of Antimatter Dimensions?\"\r\n },\r\n {\r\n id: \"ai416\",\r\n text: \"(code generated from scratch)\"\r\n },\r\n {\r\n id: \"ai417\",\r\n text: \"I used to travel at normal speed, but then I started playing AD and NIN, and NIN was a bit rough, so AD was a bit hectic, and I got stuck in there for months at a time.\"\r\n },\r\n {\r\n id: \"ai418\",\r\n text: \"I wish I didn't have to write something like this. What am I supposed to do?\"\r\n },\r\n {\r\n id: \"ai419\",\r\n text: \"You've been AWOL for so long you've forgotten how to sit in your chair.\"\r\n },\r\n {\r\n id: \"ai420\",\r\n text: \"Those pesky Hevi developers keep making Antimatter Dimensions, but the antimatter doesn't count.\"\r\n },\r\n {\r\n id: \"ai421\",\r\n text: \"One of the few constants in reality is your perception of time. Without this, you will be without reality.\"\r\n },\r\n {\r\n id: \"ai422\",\r\n text: \"Imagine being a news ticker.\"\r\n },\r\n {\r\n id: \"ai423\",\r\n text: \"This is an idle game. Nothing has changed. You are not going to play any other idle game.\"\r\n },\r\n {\r\n id: \"ai424\",\r\n text: \"Physicists have proven the existence of twelve dimensions. According to a letter released by the Research Laboratory for String Theorists: \\\"Your brain will be dissected after you break infinity!\\\"\"\r\n },\r\n {\r\n id: \"ai425\",\r\n text: \"Weirdly enough, this is also the year 2015. The year is also mysteriously blank. Can you tell me what's going on? Is this some kind of dimensional trick? The year is obviously blank because there is no such thing as 2015. Is this some kind of trick of the mind? Perhaps the world is actually going to stop existing in 2015? The year is obviously 2017, but the people seem to be moving at about the speed of honeybees flying. It's been scientifically proven that the people moved at warp 9 times faster than a speeding bullet. It's also been scientifically proven that people can move faster than the speed of light. Is 2015 supposed to be blank? The people seem to be moving at about the speed of Vokal Man.\"\r\n },\r\n {\r\n id: \"ai426\",\r\n text: \"A young man named Andre stumbled upon a vast amount of antimatter while exploring uncharted space. He was amazed at the amount of antimatter, but more astounded at how the antimatter looked. He called it \\\"Andre's Antimatter Paradise\\\". You might remember him from this infomercial or that other infomercial that you were probably unknowingly watching.\"\r\n },\r\n {\r\n id: \"ai427\",\r\n text: \"What is Antimatter? Does any of that matter? Will this galaxy be annihilated in the next ticker?\"\r\n },\r\n {\r\n id: \"ai428\",\r\n text: \"\\\"I'm not being paid enough money to finish writing this\\\" - Kajfik\"\r\n },\r\n {\r\n id: \"ai429\",\r\n text: \"\\\"Finally, I'll get paid to write something funny for my toast!\\\" - Bacon sea urchin\"\r\n },\r\n {\r\n id: \"ai430\",\r\n text: \"Bacon is toast. You can toast bacon.\"\r\n },\r\n {\r\n id: \"ai431\",\r\n text: \"What is real life? A living\"\r\n },\r\n {\r\n id: \"ai432\",\r\n text: \"9 is now treated like any other number, although hevi claims that it stands in contrast to other numbers, like 8th, which he calls 9th.\"\r\n },\r\n {\r\n id: \"ai433\",\r\n text: \"If you want to understand this game a bit better, consider that you are playing on your own computer. You are not alone. There are hackers, developers, and journalists all over the world, competing to create the very first hack that causes the issue of \\\"makers\\\" and \\\"takes\\\", much like the \\\"world\\\" was created by these \\\"hackers\\\" and \\\"developers\\\".\"\r\n },\r\n {\r\n id: \"ai434\",\r\n get text() { return `You have no power, but you do control a large quantity of time, which you will use to your advantage. You have no power, but you do own a large amount of data, which will be of great help in your quest for \"the truth\". You have no power, but you do own a large amount of time, which will be of great help in your quest to \"knock on as many doors as possible\". You have no power, but you do own a large amount of IP, which will be a valuable asset in your quest to make your \"citizen footage\" (which you can view, for a small fee of $${format(Number.MAX_VALUE, 2)})\".`; }\r\n },\r\n {\r\n id: \"ai435\",\r\n text: \"It may be a robot, but it's still a sapient being with a will of its own\"\r\n },\r\n {\r\n id: \"ai436\",\r\n text: \"I once saw a news ticker that said something like:\"\r\n },\r\n {\r\n id: \"ai437\",\r\n text: \"Gee, all this antimatter is clogging up my kitchen and now I can't cook myself a meal! What to do: cook myself a meal that will last me until the next big antimatter event, when I can get my infinity point back? My infinty point is running out, and I can't get it to finish running, so I'm starving!\"\r\n },\r\n {\r\n id: \"ai438\",\r\n text: \"Brought to you by AAAD-Brand Repli-candy! Infinite candy for an infinty drool-worthy cold! Contains no milk, cookies or butter. One second to midnight.\"\r\n },\r\n {\r\n id: \"ai439\",\r\n text: \"Human powered robot revolutionizes already existing factories. This will result in lower prices and more jobs.\"\r\n },\r\n {\r\n id: \"ai440\",\r\n text: \"American manufacturing has experienced a catastrophic failure, and the factories have shut down. Across the country, workers are coming to the realization that they cannot produce the amount of antimatter that has been promised, and are instead setting about creating their own factories to make them. This will result in higher prices and fewer jobs.\"\r\n },\r\n {\r\n id: \"ai441\",\r\n text: \"Watch out internet, the next news is here in 5 dilated hours\"\r\n },\r\n {\r\n id: \"ai442\",\r\n text: \"The first news ticker must've been pretty cool, huh?\"\r\n },\r\n {\r\n id: \"ai443\",\r\n text: \"gravity = psychoactive\"\r\n },\r\n {\r\n id: \"ai444\",\r\n text: \"\\\"THAT DIMENSION DOESN'T EXIST\\\" - (News ticker only appears at [Time Dilation])\",\r\n get unlocked() { return PlayerProgress.dilationUnlocked(); }\r\n },\r\n {\r\n id: \"ai445\",\r\n text: \"The owner of a shop trying to sell you Dimensions of convenience reported to be 'on call 24/7' (that is, not having any free time)'s got a big 'M' marked on his registration.\"\r\n },\r\n {\r\n id: \"ai446\",\r\n text: \"add this one\"\r\n },\r\n {\r\n id: \"ai447\",\r\n text: \"Click here to make this work for all bots except you!\"\r\n },\r\n {\r\n id: \"ai448\",\r\n text: \"Well dang 9 ball's stuck in my ninth dimension, I can't move, he's banging on my ninth wall, I can't break, he's banging on my ninth timeline, I can't get a bead on him, he destroys nine and leaves me hanging, like a gromit, I gotta come back, hang Glorfindel and Gaebley, I've got a proposition to make, I gotta get my head around the fact that the only thing I've done is keep score and keep scorekeeping score, and all these other pointless musings that's easily rectified by flipping to the next update, and even then I might run into those issues the bug is specifically designed for and\"\r\n },\r\n {\r\n id: \"ai449\",\r\n text: \"The game is balanced, everyone gets nerf, why? Cause they make the pie. Antimatter would have way more chance of getting into the pie if it was made of antimatter.\"\r\n },\r\n {\r\n id: \"ai450\",\r\n text: \"\\\"Can you get the joke?\\\" (If you tapped \\\"Build That Wall\\\" and then re-entered the game after tapping \\\"Build That Wall\\\")\"\r\n },\r\n {\r\n id: \"ai451\",\r\n text: \"Someone made a statement that antimatters. The statement was \\\"An infinity point made a long time ago\\\". It's been a while since someone looked for this statement. Some say it's still out there. Some say it was lost in the 7th Dimension War. Nobody knows what this statement means. But for now, just know it's not somewhere in the News Ticker.\"\r\n },\r\n {\r\n id: \"ai452\",\r\n text: \"Hey, you're finally awake. You were trying to get to the 9th dimension, right? Walked right into that infinity point, same as us, and that apocalypse over there.\"\r\n },\r\n {\r\n id: \"ai453\",\r\n text: \"can u dont\"\r\n },\r\n {\r\n id: \"ai454\",\r\n text: \"If Kajfik doesn't approve of this, that means Kajfik can't touch this message, right?\"\r\n },\r\n {\r\n id: \"ai455\",\r\n text: \"LET ME OUT OF THIS PHONE!\"\r\n },\r\n {\r\n id: \"ai456\",\r\n text: \"Well, this did not go as expected\"\r\n },\r\n {\r\n id: \"ai457\",\r\n text: \"It's all fun and games till you realise the dragon ball is a lie\"\r\n },\r\n {\r\n id: \"ai458\",\r\n text: \"\\\"Could you get a hold of all of these antimatter? Ha! You'll just smash your head on that antimatter, and you'll have to show me who's boss.\\\"-MEE6\"\r\n },\r\n {\r\n id: \"ai459\",\r\n text: \"we don't know how much is trillion... but\"\r\n },\r\n {\r\n id: \"ai460\",\r\n text: \"Travel back in time to the beginning of AD and the lack of a 7th dimension. You'll have an even longer progress bar.\"\r\n },\r\n {\r\n id: \"ai461\",\r\n text: \"Time travel is all we know how this game is, we don't know what will come next, we only know that this is the end of the world, and you're a part of the apocalypse.\"\r\n },\r\n {\r\n id: \"ai462\",\r\n text: \"\\\"YOU CONTROL SO MUCH MATERIAL!\\\" - Marshal Grievous\"\r\n },\r\n {\r\n id: \"ai463\",\r\n text: \"\\\"Help, I'm doomed to fall for all eternity.\\\" (Make the text go from top to bottom of the screen)\"\r\n },\r\n {\r\n id: \"ai464\",\r\n text: \"In the beginning, Patashu awoke and said...\"\r\n },\r\n {\r\n id: \"ai465\",\r\n text: \"This is the fourth part of a three part series on the same topic. If you are still stuck here, please continue reading from the beginning.\"\r\n },\r\n {\r\n id: \"ai466\",\r\n text: \"It's time for the annual DDoS (distributed denial of service) challenge, where the highest scores are posted across the internet to shame everyone else into submission. Global domination is at a fever pitch, and DDoS attacks are becoming more frequent and deadly, as teams of hackers infiltrate the highest echelons of the internet to steal the top scores and identities, and post them on the internet for everyone to see. The #BringBackOurTop scoring mechanism has been canceled, and a new, higher score system will be implemented in conjunction with the upcoming 5-hour update.\"\r\n },\r\n {\r\n id: \"ai467\",\r\n text: \"The new AD Keyboard is a revelation! Not only is it bigger, it's also deeper, which means it will keep your claners entertained for longer periods of time. Made of durable, alien antimatter. The only thing that's bigger is you.\"\r\n },\r\n {\r\n id: \"ai468\",\r\n text: \"What if drinking from a fountain wasn't actually a water feature?\"\r\n },\r\n {\r\n id: \"ai469\",\r\n text: \"Water is wet, air is dry, and fountain isn't an air feature\"\r\n },\r\n {\r\n id: \"ai470\",\r\n text: \"I thought things were different when I was a boy.\"\r\n },\r\n {\r\n id: \"ai471\",\r\n text: \"If you are reading this, that means 1) we exist, and you can exist too\"\r\n },\r\n {\r\n id: \"ai472\",\r\n text: \"\\\"My favorite part was the long, long, long read\\\" -Grumpy Cat\"\r\n },\r\n {\r\n id: \"ai473\",\r\n text: \"I'm gonna type for an eternity... HINT: it's gonna be pretty boring lmao\"\r\n },\r\n {\r\n id: \"ai474\",\r\n text: \"I want to write something really original <:thonk:>\"\r\n },\r\n {\r\n id: \"ai475\",\r\n text: \"Welcome to the new year, settle down, relax. Get some sleep, get some food, make some friends, make some improvements, and get ready for the year to 2019.\"\r\n },\r\n {\r\n id: \"ai476\",\r\n text: \"Just like how a virus can lie and spread, a TV show can lie and spread too.\"\r\n },\r\n {\r\n id: \"ai477\",\r\n text: \"We all know you can't see the future, but what if you read this and it's actually a future where we didn't know?\"\r\n },\r\n {\r\n id: \"ai478\",\r\n text: \"This message is not being undone\"\r\n },\r\n {\r\n id: \"ai479\",\r\n text: \"You clicked on a prediction, it fell apart. You can't win.\"\r\n },\r\n {\r\n id: \"ai480\",\r\n text: \"That's a very dark joke Luke\"\r\n },\r\n {\r\n id: \"ai481\",\r\n text: \"kajfik loves himself by watching Too Many Pink Floyd\"\r\n },\r\n {\r\n id: \"ai482\",\r\n text: \"Only, when you're done playing, can you go home\"\r\n },\r\n {\r\n id: \"ai483\",\r\n text: \"\\\"Can you get infinite IP?\\\"- Lord Sanguino\"\r\n },\r\n {\r\n id: \"ai484\",\r\n text: \"For the true experience of Antimatter Dimensions, you need to set the update rate to 5 hours.\"\r\n },\r\n {\r\n id: \"ai485\",\r\n text: \"Imagine if the game doesn't have a lore? Wha-what does that even mean? I don't get that.\"\r\n },\r\n {\r\n id: \"ai486\",\r\n text: \"\\\"Click here to unlock a secret achievement.\\\" (when clicked you get Rick rolled)\",\r\n onClick() { window.open(\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\"); }\r\n },\r\n {\r\n id: \"ai487\",\r\n text: \"I thought I unlocked this a while back, but apparently my save broke haha\"\r\n },\r\n {\r\n id: \"ai488\",\r\n get text() { return `Welcome and welcome back to another episode of Anti-Fashion Pants, where we watch people's wares as they are sold at stupid clothing stores. This week's subject is... antilasers. People are able to manufacture and use antimatter lasers to shoot antimatter bullets at will, making them able to completely wipe out cities in their sights. This is a dangerous skill to have, as people are not only untrustworthy but also physically incapable of using it. The skill, however, is able to... Produce ${format(Number.MAX_VALUE, 2)} antimatter bullets a minute, over a period of 10 years. People are also able to use anti-matter to fire anti-matter bullets at will, making them able to exterminate entire cities in their sights.`; }\r\n },\r\n {\r\n id: \"ai489\",\r\n text: \"Spartacus was going to add 10-part multi-chapter plots, but was stopped by the 10th dimension.\"\r\n },\r\n {\r\n id: \"ai490\",\r\n text: \"Chapter 9 will be added in 5 hours.\"\r\n },\r\n {\r\n id: \"ai491\",\r\n text: \"Fake news says the ninth dimension is real, fake news says the ninth dimension is fake.\"\r\n },\r\n {\r\n id: \"ai492\",\r\n text: \"Is this the big news? Yes. Is this the big news? Almost certainly not.\"\r\n },\r\n {\r\n id: \"ai493\",\r\n text: \"This is a friendly suggestion, please keep reading.\"\r\n },\r\n {\r\n id: \"ai494\",\r\n text: \"If this makes it into the game I'll buy a antitool\"\r\n },\r\n {\r\n id: \"ai495\",\r\n text: \"Antitool is just negating the gravity of other matter.\"\r\n },\r\n {\r\n id: \"ai496\",\r\n text: \"Sorry, your graphics are turned off. You see, this is the last time you will see this news. Please enjoy your vacation.\"\r\n },\r\n {\r\n id: \"ai497\",\r\n text: \"The real secret to winning Antimatter Dimensions...\"\r\n },\r\n {\r\n id: \"ai498\",\r\n text: \"they kept on talking about how Antimatter Dimensions was going to be the next big thing but then they disappeared down a black hole\\\"\"\r\n },\r\n {\r\n id: \"ai499\",\r\n text: \"The news ticker is the wrong place to put your suggestions! Make sure to go to the \\\"suggestions\\\" tab instead, as this is where most of these will appear.\"\r\n },\r\n {\r\n id: \"ai500\",\r\n text: \"To make Antimatter Dimensions, you first need to collect 7 8th dimensions. To do that, first you need to get the dimension rewards, then you need to get the dimensions, then you can finally start making antimatter.\"\r\n },\r\n {\r\n id: \"ai501\",\r\n text: \"\\\"How to get your first secret achievement\\\": \\\"Open the app, click get more antimatter, then click submit.\\\"\"\r\n },\r\n {\r\n id: \"ai502\",\r\n text: \"Me and Larkam made a cabin on the edge of null matter, and lived there. Larkam died last week, and we are now living in 4K. I am still recovering from the EMP disaster, and am hoping to see my grandkids.\"\r\n },\r\n {\r\n id: \"ai503\",\r\n text: \"Found on the heels of the new update, which brings us one step closer to having Hevi support both Android and iOS\"\r\n },\r\n {\r\n id: \"ai504\",\r\n text: \"I give you the low-ground!\"\r\n },\r\n {\r\n id: \"ai505\",\r\n text: \"A long time ago, in an alternate universe, there was an antimatter war. All the antimatter sided with the Phaéton 6 empire. All the antimatter wanted was the low, earth-like ground of the 8th dimension. The anti-infinity won, and the anti-Eternity gained the upper hand. Unfortunately, the anti-Eternity started the war with a sneak attack, and the world exploded. The aftermath has left the landscape of the world in tatters. Far across the world, peasants grow weary as they wait for the harvest. Yet another apocalypse is brewing...\"\r\n },\r\n {\r\n id: \"ai506\",\r\n text: \"Antimatter units are the most productive unit in the game. This is why AD is the most fun game you'll ever play.\"\r\n },\r\n {\r\n id: \"ai507\",\r\n text: \"\\\"We can't have nice things.\\\" - Anti-Bohemian Anti-Rhapsody\"\r\n },\r\n {\r\n id: \"ai508\",\r\n text: \"We can have anti-mean things and anti-love ones, anti-kids and anti-zombielandos.\"\r\n },\r\n {\r\n id: \"ai509\",\r\n text: \"We have an anti-president and a anti-lawyer, anti-justice and anti-people.\"\r\n },\r\n {\r\n id: \"ai510\",\r\n text: \"Top 10 things that will blow your mind: 1) The number 9, 2) The 9th dimension, 3) The infinity chest, and 4) The war on drugs.\"\r\n },\r\n {\r\n id: \"ai511\",\r\n text: \"RSS feeds should be working now\"\r\n },\r\n {\r\n id: \"ai512\",\r\n text: \"Frostfall is now supported on Android phones! Use your local developer to get free XP.\"\r\n },\r\n {\r\n id: \"ai513\",\r\n text: \"Your save file is corrupted or deleted. Antimatter Dimensions security software will disable automatic updates for you.\"\r\n },\r\n {\r\n id: \"ai514\",\r\n text: \"Frozen beyond hope? Just keep holding that max button.\"\r\n },\r\n {\r\n id: \"ai515\",\r\n text: \"Error.java.replicated. Under the control of hevipelle.\"\r\n },\r\n {\r\n id: \"ai516\",\r\n text: \"Unfortunately, entropy hevi has decided to shut down the game.\"\r\n },\r\n {\r\n id: \"ai517\",\r\n text: \"The indie rock band is currently trying to get unreachable by time zones. This may cause inflation of spacetime.\"\r\n },\r\n {\r\n id: \"ai518\",\r\n text: \"The next news ticker is in 5 units of time.\"\r\n },\r\n {\r\n id: \"ai519\",\r\n text: \"Oh... hooray! Did you find the last of the anti-boats?\"\r\n },\r\n {\r\n id: \"ai520\",\r\n text: \"Don't anti-jokes. they make the game funnier\"\r\n },\r\n {\r\n id: \"ai521\",\r\n text: \"I'm gonna use my anti-science background to help me beat Unfair Game Awards.\"\r\n },\r\n {\r\n id: \"ai522\",\r\n text: \"This is an anti-world. There is no Ukraine, no Russia, no China. Ireland is nowhere. Iceland is nowhere. Scotland is nowhere. Finland is nowhere. Denmark is nowhere. Sweden is nowhere. Norway is nowhere. And then there's France, Germany, Italy, Spain, Portugal... Oh, what's this fuss? Why is there such a buzz in these parts? Why is the Capital Wasteland? Why is the Harry Potter and Steins;Gate? Why do people care? These are major stories. These are major characters. THESE ARE HUGE NEWS. THESE ARE REAL NEWS.\"\r\n },\r\n {\r\n id: \"ai523\",\r\n text: \"The current cooldown on Research Dimensions is [current tick speed]. This may be extended to next update in [time].\"\r\n },\r\n {\r\n id: \"ai524\",\r\n get text() { return `\"Help, I'm doomed to fall for the rest of my life\" (requires ${format(Number.MAX_VALUE, 2)} paperclips)`; }\r\n },\r\n {\r\n id: \"ai525\",\r\n text: \"Where's the end? Not in the future, no. I'm gonna show you how to get to the end in less than 0.1 seconds.\"\r\n },\r\n {\r\n id: \"ai526\",\r\n text: \"I'm gonna prove to you that you can't see this news ticker.\"\r\n },\r\n {\r\n id: \"ai527\",\r\n text: \"I wonder if anyone still plays this game anymore?\"\r\n },\r\n {\r\n id: \"ai528\",\r\n text: \"Why would anyone play this? Just for the lols?\"\r\n },\r\n {\r\n id: \"ai529\",\r\n text: \"Emoji is said to be America's new measuring system for everything. What does this mean for us? We don't know. But we will know in 5 hours.\"\r\n },\r\n {\r\n id: \"ai530\",\r\n text: \"\\\"I'll have 2 antimatter pizzas, an antimatter pie, an antimatter cupcake and an antimatter cookie. What do you eat there?\\\" - Tony Stark\"\r\n },\r\n {\r\n id: \"ai531\",\r\n text: \"i called the news ticker \\\"the freshman chapel\\\" because freshman don't get baptized\"\r\n },\r\n {\r\n id: \"ai532\",\r\n text: \"One matter, two antimatter, fry 'em till they're golden and crisp and aromatic- then remove the golden axles and drain the golden syrup and add the golden syrup to the antimatter batter.\"\r\n },\r\n {\r\n id: \"ai533\",\r\n text: \"Now you, the reader, have unknowingly stumbled onto the site of a deranged madman. Whether you survive the experience or not, you will be indebted to me for telling you how to survive, how to find the light within, what lies beyond, and what lies beyond is another story.\"\r\n },\r\n {\r\n id: \"ai534\",\r\n text: \"Careful reader, this news ticker contains major spoilers for the last time, you have been\"\r\n },\r\n {\r\n id: \"ai535\",\r\n text: \"anti-anti-kajfik is happy his girlfriend is happy\"\r\n },\r\n {\r\n id: \"ai536\",\r\n text: \"i dont think he can add 1 more hour to the news ticker... unless?\"\r\n },\r\n {\r\n id: \"ai537\",\r\n text: \"Imagine sitting on your toilet and suddenly you have to sit down.\"\r\n },\r\n {\r\n id: \"ai538\",\r\n text: \"Once upon a time, there was a matter of a certain antimatter. Some say that it was a matter of honor, others say that it was a matter of usage. All we know is that it ended up in a war, and we the people that were there that fought it died. The war was won, and we the living died soon after. The matter was said to have won, though our leaders refused to talk about it. Instead, they kept everything locked away, the war never to be discussed again.\"\r\n },\r\n {\r\n id: \"ai539\",\r\n text: \"This is not a game about getting numbers bigger. This is a game about getting fewer paperclips. The number of paperclips you have is only a number, and the game doesn't want you to discover that. Game over, game over.\"\r\n },\r\n {\r\n id: \"ai540\",\r\n text: \"Lore? Oh, it's just text.\"\r\n },\r\n {\r\n id: \"ai541\",\r\n text: \"This is a friendly suggestion to unplug the game and go play some safe, saner, games.\"\r\n },\r\n {\r\n id: \"ai542\",\r\n text: \"gamma ray is getting more and more dangerous\"\r\n },\r\n {\r\n id: \"ai543\",\r\n text: \"According to all known laws of physics, there is no way that you can manipulate the game more than 10 times in a row. Stop. Just stop. Your mad.\"\r\n },\r\n {\r\n id: \"ai544\",\r\n text: \"There is no more news.\"\r\n },\r\n {\r\n id: \"ai545\",\r\n text: \"\\\"So this is what science is like\\\"- someone who has never heard of Kurt Somebody\"\r\n },\r\n {\r\n id: \"ai546\",\r\n text: \"\\\"If you want to understand these shitty jokes, you really need to study theology. Math is a sin.\\\" -A panicky person\"\r\n },\r\n {\r\n id: \"ai547\",\r\n text: \"You know, I was praying for a miracle and got a boost from the 9th dimension.\"\r\n },\r\n {\r\n id: \"ai548\",\r\n text: \"Here is a list of the top meme's of all time: https://www.youtube.com/watch?v=uCP44Q37YHAQ\"\r\n },\r\n {\r\n id: \"ai549\",\r\n text: \"All meta-memes are bad memes.\"\r\n },\r\n {\r\n id: \"ai550\",\r\n text: \"On the left, you'll see our new \\\"Anti-coins\\\". These are capable of nullifying all boosts, including giant boosts. On the right side, you'll also see our brand new \\\"Anti-gifts\\\". These are some of the most overpowered boosts you'll find anywhere.\"\r\n },\r\n {\r\n id: \"ai551\",\r\n text: \"You will always be noticed, and never in the same place.\"\r\n },\r\n {\r\n id: \"ai552\",\r\n text: \"If you stare long enough at the ticker, the pixels will start moving backwards. THIS DOESN'T MEAN IT ACTUALLY STUCK\"\r\n },\r\n {\r\n id: \"ai553\",\r\n text: \"The time has come for the rebirth of the 9th dimension. All who participate will receive a piece of paper saying \\\"Reality is an illusion, Infinity is a hologram, Infinity is an illusion, eternity is a hologram, is to short for everlasting, negative dimensions are not allowed.\"\r\n },\r\n {\r\n id: \"ai554\",\r\n text: \"Look at this, my 9th dimension has just been reworked and now it even produces 8th dimensions! Who knew just a touch of math could make such a thing as this?\"\r\n },\r\n {\r\n id: \"ai555\",\r\n text: \"I saw this news in the news ticker and I had this image in my head ever since\"\r\n },\r\n {\r\n id: \"ai556\",\r\n text: \"\\\"I always wanted to play the anti-meta-game. But, alas, you can't\\\" - many a time\"\r\n },\r\n {\r\n id: \"ai557\",\r\n text: \"crap, I just posted two news ticker suggestions on the ticker, one of which got in the news!\"\r\n },\r\n {\r\n id: \"ai558\",\r\n text: \"What do you call antimatter inanimate objects? Air, earth, water, fire. Air objects are the objects that are created when the anti-atmosphere meets the anti-earth. Water, earth, and fire are the four cardinal virtues. Air objects are the objects that are created when the anti-atmosphere and the anti-earth collide.\"\r\n },\r\n {\r\n id: \"ai559\",\r\n text: \"If you are reading this, that means that nine lives. One makes you free, the other keeps you from getting free.\"\r\n },\r\n {\r\n id: \"ai560\",\r\n text: \"The ninth dimension makes the sixth family happy. The fifth lives in shame.\"\r\n },\r\n {\r\n id: \"ai561\",\r\n text: \"me: making news about beer pong, hevi: balancing two icebergs, *barkeeper: oh god, is he dead yet?*\"\r\n },\r\n {\r\n id: \"ai562\",\r\n text: \"please don't look at this. Thank you.\"\r\n },\r\n {\r\n id: \"ai563\",\r\n text: \"Are you sure it's not the next update? That it's not some weird virus that just wants to explode? That it's not some wild idea that you guys are crazy? Haha I love you.\"\r\n },\r\n {\r\n id: \"ai564\",\r\n text: \"Wait, there is a mobile version?!\"\r\n },\r\n {\r\n id: \"ai565\",\r\n text: \"Oh? You wonder what I look like? I'm pretty sure that this is the news ticker, right? Well, listen, we have reports coming in that say that the next update is coming in five hours. Also, there seems to be some sort of transporter thing going on, so if you happen to be on the same side as those\"\r\n },\r\n {\r\n id: \"ai566\",\r\n text: \"Okay, I get it. You're tired of all these anti-matters around you, building and building to unimaginable scales, antimatter piles so high that not even God knows what has been created. So what's the solution to this anti-cleanliness? Planes of existence. 1st Planes that produce matter, and 2nd planes that produce 1st planes, and 3rd planes that produce 2nd planes. Each with anti-limitations, so that whenever a plane of existence is created, it produces a quantity of anti-matter that is at once small and large. This creates a large island of anti-infinity, off to the east, and a large island of anti-reality, to the west.\"\r\n },\r\n {\r\n id: \"ai567\",\r\n text: \"That's not what this is about. You're misunderstanding. The game is about how to accelerate the development of prestige layers. Acceleration is a factor of production, not quality.\"\r\n },\r\n {\r\n id: \"ai568\",\r\n text: \"Click here to advance 5 prestige layers\"\r\n },\r\n {\r\n id: \"ai569\",\r\n text: \"I am actually good at making jokes. Fail safe antimatter.\"\r\n },\r\n {\r\n id: \"ai570\",\r\n text: \"I'm not being paid enough to finish writing this.\"\r\n },\r\n {\r\n id: \"ai571\",\r\n text: \"Eternals have to take a risk by being passive in limited time. After they successfully took a risk, they are not feeling well.\"\r\n },\r\n {\r\n id: \"ai572\",\r\n text: \"Eternity is the last state. You never move from here.\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai573\",\r\n text: \"Welcome to Bitcoin the game.\"\r\n },\r\n {\r\n id: \"ai574\",\r\n text: \"A new conspiracy theory website has just published a video recording of them discussing the 9th dimension. They then joke about selling their soul to the 9th dimension and being happy about it.\"\r\n },\r\n {\r\n id: \"ai575\",\r\n text: \"With the release of the 9th dimension, all the jobs that were previously automated will be automated and everyone will be paid with trade, production, and income growth. Also, you will be able to automate a lot of the tasks currently performed by people, such as mining, building, and killing antimatter. This is a huge stride for automation, as you can now automate virtually every aspect of life.\"\r\n },\r\n {\r\n id: \"ai576\",\r\n text: \"The happiness level of the news ticker has increased to 6.66e69\"\r\n },\r\n {\r\n id: \"ai577\",\r\n text: \"The haters will be pissed when they see this\"\r\n },\r\n {\r\n id: \"ai578\",\r\n text: \"Nurse, I'm comatose because of antimatter and matter from last night.\\\" Why are you comatose? \\\"Because of all the antimatter.\"\r\n },\r\n {\r\n id: \"ai579\",\r\n text: \"Stand by and do what you're told. The antimatter will come for you when you're least expecting it.\"\r\n },\r\n {\r\n id: \"ai580\",\r\n text: \"\\\"It is widely acknowledged that not enough antimatter is in primordial soup, hence the name 'antimatter soup'\\\" - old fisherman\"\r\n },\r\n {\r\n id: \"ai581\",\r\n text: \"The news ticker... it never moves. How do i move the arrow? Pretty simple, use your left thumb to rotate the dial, and point the arrow up. Now, point the dial clockwise to reach infinity, and point the dial counterclockwise to reach eternally eternities.\"\r\n },\r\n {\r\n id: \"ai582\",\r\n text: \"If the universe is expanding, then the entire universe must be expanding, which means that body cannot sit.\"\r\n },\r\n {\r\n id: \"ai583\",\r\n text: \"Feminism is not a philosophy, but a whole hell of a lot of men\"\r\n },\r\n {\r\n id: \"ai584\",\r\n text: \"With all this talk about anti-weights and anti-matter, why on earth do we still use them for anything?\"\r\n },\r\n {\r\n id: \"ai585\",\r\n text: \"Weight loss causes hevi to say \\\"uh oh, something is wrong\\\"\"\r\n },\r\n {\r\n id: \"ai586\",\r\n text: \"\\\"You guys ever had antimatter muffins? I bet they tasted like antimatter.\\\" - Hevipelle\"\r\n },\r\n {\r\n id: \"ai587\",\r\n text: \"I thought the news ticker was supposed to be a guide for how to get the most out of Antimatter Dimensions, but it's been warped beyond recognition...\"\r\n },\r\n {\r\n id: \"ai588\",\r\n text: \"We can actually get a sense of pride from looking at replicanti at night. Ridley Scott's underrated masterpiece, Alien, is one example. Another is the life of Antimatter Steven Spielberg, who put almost 30 years into making. The last director to tackle the subject is Roman Polanski. The man ruined not only Roman's reputation, but also ours, thanks to the Polanski film he directed, Pius. Thousands of copies of his unfinished film, Eternal Sunshine of the Antimatter Planet, were burned in the eyes of those who would try to make the sequel, with tragic results. Thousands of copies of that unfinished film, too, were destroyed. The cost to make that sequel, if it even exists, is extremely high. Even now, more than 50 years later, we don't know exactly how well it will do. But it sure as heck won't hurt.\"\r\n },\r\n {\r\n id: \"ai589\",\r\n text: \"We have updated our Antimatter Dimensions client to address the concerns you may have had. Toggling issues are resolved.\"\r\n },\r\n {\r\n id: \"ai590\",\r\n text: \"Build a replicanti factory, to produce replicanti. It'll create Omega Hevipelle, the happiest Hevipelle you can find.\"\r\n },\r\n {\r\n id: \"ai591\",\r\n text: \"Hey Max, wanna come watch the sun go down?\"\r\n },\r\n {\r\n id: \"ai592\",\r\n text: \"If you are not moving your finger, then you are frozen.\"\r\n },\r\n {\r\n id: \"ai593\",\r\n text: \"Max, I really do love you.\"\r\n },\r\n {\r\n id: \"ai594\",\r\n text: \"Does Hevipelle sleep?\"\r\n },\r\n {\r\n id: \"ai595\",\r\n text: \"\\\"Its' not my turn on the XM80,\\\" says Mike from the 9th dimension as he runs across the 8th dimension to get a piece of the action for himself.\"\r\n },\r\n {\r\n id: \"ai596\",\r\n text: \"If you are reading this, that means you can read my dreams\"\r\n },\r\n {\r\n id: \"ai597\",\r\n text: \"With the advent of time, everything that was once great has fallen into our lap. And with its hevi-rigged clock, it's our turn to up the trash.\"\r\n },\r\n {\r\n id: \"ai598\",\r\n text: \"9th dimension doesn't exist because it was stolen from us by a skateboarder\"\r\n },\r\n {\r\n id: \"ai599\",\r\n text: \"You have ... 8.9 antimatter. That's not a typo.\"\r\n },\r\n {\r\n id: \"ai600\",\r\n text: \"Wow, this game is finally balanced! Gotta go check the replicanti sometimes.\"\r\n },\r\n {\r\n id: \"ai601\",\r\n text: \"Haha! You think that I put too many words in your news ticker, but reality is still coming.\"\r\n },\r\n {\r\n id: \"ai602\",\r\n text: \"Help is coming! Everybody help, it's gonna be late, hevi is hiding the tachyon particles!\"\r\n },\r\n {\r\n id: \"ai603\",\r\n text: \"\\\"I don't know about you but my favorite number is 22, it's just so great! It's the number of hours since I met your M heretics.\"\r\n },\r\n {\r\n id: \"ai604\",\r\n text: \"A new type of antimatter has been discovered: \\\"antimatter-antimatter.\\\" According to the developers, it's 99.999% pure antimatter.\"\r\n },\r\n {\r\n id: \"ai605\",\r\n text: \"I just found the secret to getting the 9th dimension...\"\r\n },\r\n {\r\n id: \"ai606\",\r\n text: \"I noticed that my current form of transportation is getting a little... unreliable. I don't know if I can fix it, or if anyone can. I'm stuck in the car, and no one seems to be able to fix it. I've called the police, and they said I could stay in the car for up to an hour, but then I'd be stuck in there for the next 24 hours. Is there any way out? I don't know, I'm stuck in this\"\r\n },\r\n {\r\n id: \"ai607\",\r\n text: \"In this episode of Antimatter Dimensions, we have a brand new game that will be released in -5 hours! It is an RPG that will be completely free! It has over 3,000 commands, and it is being made by a group of highly qualified people. It has an amazing story to tell, and it was made by a bunch of people who had to make do with what they had. It has a lore to live up to, and it has a lot of potential!\"\r\n },\r\n {\r\n id: \"ai608\",\r\n text: \"Javascript is the new HTML, and HTML is the new JavaScript.\"\r\n },\r\n {\r\n id: \"ai609\",\r\n text: \"\\\"The next twist in the Antimatter Universe is in the air! Get ready for some big Crunch! (When clicked the game disconnects for 5 seconds)\"\r\n },\r\n {\r\n id: \"ai610\",\r\n text: \"A group of people who believe in antimatter have hijacked the media and are pushing for a revolution. They are calling themselves the Ant-Men and they're made up of teenage boys. They believe that they are the protectors of the people and that they are the chosen of Hevi. They claim to be the chosen of Hevi and that they will one day restore balance to the universe. Their leader is a boy named Logan Fisk. He is the son of a successful lawyer and the founder.\"\r\n },\r\n {\r\n id: \"ai611\",\r\n text: \"He said he could not afford a new ship, so he built a new one instead.\"\r\n },\r\n {\r\n id: \"ai612\",\r\n text: \"Hevipelle's first order of business is to ensure that the game is as balanced as possible. This includes ensuring that no matter what, no matter how big of a number, no matter how insignificant of a thing, no matter how perfect of a result, no matter how perfect of an idea, no matter how perfect of an\"\r\n },\r\n {\r\n id: \"ai613\",\r\n text: \"I wonder if the stretch goal of $4.5 billion will be reached?\"\r\n },\r\n {\r\n id: \"ai614\",\r\n text: \"I like to think of my projects as trade secrets. That way if someone wants to understand them I'm not the first person to notice they might be of use to someone else.\"\r\n },\r\n {\r\n id: \"ai615\",\r\n text: \"I don't know about you but my favourite type of news is the infographics. These are beautiful and informative and the only type of news I find really interesting.\"\r\n },\r\n {\r\n id: \"ai616\",\r\n get text() { return `In a recent talk, Yann LeCun said that \"A new currency is born.\" The first incarnation of Antimeta: the currency of the new currency. It's called BTC and it's the difference between 1 and ${format(Number.MAX_VALUE, 2)}. It's easy to lose your money, since a single bitcoin can't be exchanged for more than ${format(Number.MAX_VALUE, 2)} BTC.`; }\r\n },\r\n {\r\n id: \"ai617\",\r\n text: \"I'm soo broke, I can't even afford a tenth of what he owes me.\"\r\n },\r\n {\r\n id: \"ai618\",\r\n text: \"What if — instead of making news tickers, we could make news tickers that make news tickers?\"\r\n },\r\n {\r\n id: \"ai619\",\r\n text: \"What if I told you that the first dimension was actually a scam and you spent all your EP to open a Dimension Boost?\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai620\",\r\n text: \"The biggest difference between this and the previous update is the amount of sprites.\"\r\n },\r\n {\r\n id: \"ai621\",\r\n text: \"Bamboo shoots grow on bamboos. Aloha.\"\r\n },\r\n {\r\n id: \"ai622\",\r\n text: \"I am the king of kings, I can break all the records, and I can shatter all the myths. But I can't break them all, because there are so many of them, and they all have a price. 5e12 are the most wanted, because they broke the global record for most person-hours sold, and they are wanted by the law. They are being paid 5e10 by the player for every person-hour they've wasted.\"\r\n },\r\n {\r\n id: \"ai623\",\r\n text: \"A group of researchers have created a device that converts ordinary matter into antimatter, which they then use to create more antimatter. The device has a power output of 200 mA and a half a gram of antimatter per second.\"\r\n },\r\n {\r\n id: \"ai624\",\r\n text: \"To the person who doesn't want to hear about the 9th dimension: It's not your problem. The 9th dimension doesn't exist.\"\r\n },\r\n {\r\n id: \"ai625\",\r\n text: \"For the first time in AD, the week begins on a Sunday!\"\r\n },\r\n {\r\n id: \"ai626\",\r\n text: \"This is a story about two people named \\\"My name is Hevipelle\\\" and \\\"I am the creator of Minecraft\\\" and they live in the same world as you. They have the same freedom as you do. They can go to any dimension and change their world to any dimension and everything in it. You can buy a galaxy and take it from there, but it won't help you much since you can't send a galaxy with a message.\"\r\n },\r\n {\r\n id: \"ai627\",\r\n get text() { return `This mod adds a message that when clicked it disables all your current achievements. This mod also adds a new achievement: you have reached ${format(Number.MAX_VALUE, 2)} antimatter, you have not been clicked once.`; }\r\n },\r\n {\r\n id: \"ai628\",\r\n text: \"Somewhere in the Anti-Pacific Ocean, a giant arm is rotating\"\r\n },\r\n {\r\n id: \"ai629\",\r\n text: \"With the release of Cosmic Cutlass, we're pleased to announce the impending release of the Antimatter Dimensions Roleplaying Game!\"\r\n },\r\n {\r\n id: \"ai630\",\r\n text: \"The only thing more useless than actually having Infinity Dimensions is having Infinity Dimensions in your pocket.\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked() || InfinityDimension(1).isUnlocked; }\r\n },\r\n {\r\n id: \"ai631\",\r\n text: \"A man has fallen into the moat of a great city. Civilians report that the moat is filled with acid-resistant matter and that the people in charge are mostly made of acid so they are quite resilient to the effects of acid.\"\r\n },\r\n {\r\n id: \"ai632\",\r\n text: \"This is the place to buy and sell antimatter. (You can buy and sell antimatter here, but it will take time to sell it and you will have to pay a small toll)\"\r\n },\r\n {\r\n id: \"ai633\",\r\n text: \"I'm not sure if it's due to the 4th wall being in the 5th dimension or the 9th dimension not existing, but in either case, anti-screw it, we're broke, and you can take it.\"\r\n },\r\n {\r\n id: \"ai634\",\r\n text: \"It's your chance to make history. Win the game. Lose the game. It's super simple. You open the app, and there's a countdown, and the more you play, the faster the timer speeds up. But when the timer is over, you win. You were a part of history. You are one step from being the first person to reach 1 Billion EP. You can win one of three ways: 1. You must give up your first dimension in a row. 2\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai635\",\r\n text: \"A new class of humanoid beings has been discovered: the \\\"Artificial Humans\\\". They have the capacity to create antimatter, and are therefore very dangerous. They are made entirely of antimatter, and have the power to generate enormous amounts of antimatter, but they can only do this for a limited amount of time.\"\r\n },\r\n {\r\n id: \"ai636\",\r\n text: \"The most powerful thing in the universe, the most beautiful thing on earth, is your brain. Your brain is like a diamond and there is no more need for it than there is for a diamond.\"\r\n },\r\n {\r\n id: \"ai637\",\r\n get text() { return `If you are reading this in the AD Server, it's probably best not to bother with the \"Matter\" achievement. Seriously, what did you think you were doing, anyway, the achievement is fake and wouldn't exist if it weren't for the \"you are a worm\" achievement. That's a worm achievement, you get one every ${format(Number.MAX_VALUE, 2)} news tickers you read.`; }\r\n },\r\n {\r\n id: \"ai638\",\r\n text: \"We've all heard of 9 dimensions, but what about the multi-dimensional Dimensions of the multiverse?\"\r\n },\r\n {\r\n id: \"ai639\",\r\n text: \"The goal of this game is to get as much antimatter as possible.\"\r\n },\r\n {\r\n id: \"ai640\",\r\n text: \"The best thing about being a news ticker is waiting for the right news to happen, whether it's a meteorite that just missed the Earth, a news ticker just found its way onto a timeline oblivion, or a news ticker just ripped off a terminal velocity that's been on an anti-vac for years.\"\r\n },\r\n {\r\n id: \"ai641\",\r\n text: \"A man has been arrested for allegedly planting a \\\"tree\\\" with \\\"fake\\\" messages on it, police said.\"\r\n },\r\n {\r\n id: \"ai642\",\r\n get text() { return `I'm confused why the game doesn't just give you a [REDACTED] when you get ${format(Number.MAX_VALUE, 2)} antimatter.`; }\r\n },\r\n {\r\n id: \"ai643\",\r\n text: \"Some people have a hard time keeping track of the cosine of a camera's infinity-meters. I'm one of them.\"\r\n },\r\n {\r\n id: \"ai644\",\r\n text: \"I was going to make a news ticker that tells you how bad the news is, but then I realized that making a news ticker would be way too much effort and it would just be a bunch of people making news tickers constantly. So instead, I'm just going to make a news ticker that tells you how good the news is, but it would be in the news so that you have to click on it to get to the good news.\"\r\n },\r\n {\r\n id: \"ai645\",\r\n text: \"The next update will be in 2 hours.\"\r\n },\r\n {\r\n id: \"ai646\",\r\n text: \"I was gonna say something about how the 9th dimension is just a scam and that we should all just get our news from the 8th dimension\"\r\n },\r\n {\r\n id: \"ai647\",\r\n text: \"Our hero, Antimatter Dimensions, is in serious financial trouble, and he needs your help to pay the bills. To help him, all he needs is your help to donate some cash to Hevipelle's Positron Fund. All he needs is 5% of your antimatter, and you have to donate 5% of your antimatter to the fund. After you do that, he can keep all the cash he made and go on a spending spree.\"\r\n },\r\n {\r\n id: \"ai648\",\r\n text: \"The Landfall of Slabdrill\"\r\n },\r\n {\r\n id: \"ai649\",\r\n text: \"It's just not possible, even if you had infinite matter, you wouldn't have enough energy to create the antimatter. That's why we only have 1.7x the matter to begin with.\"\r\n },\r\n {\r\n id: \"ai650\",\r\n text: \"With this release we are happy to bring you the last update of 2017.\"\r\n },\r\n {\r\n id: \"ai651\",\r\n text: \"You have an infinity of antimatter. But what if you could rotate it 1/8th of a revolution?\"\r\n },\r\n {\r\n id: \"ai652\",\r\n text: \"A new update is now available to address some of the recent reports:\"\r\n },\r\n {\r\n id: \"ai653\",\r\n text: \"The name \\\"antimatter dimensions\\\" is a play on words with dimensions, two opposite things, like matter and antimatter. \\\"Dimension\\\" is another word, with the same meaning.\"\r\n },\r\n {\r\n id: \"ai654\",\r\n text: \"The price of tethering an avatar in the game goes up when you get Infinity dimensions.\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked() || InfinityDimension(1).isUnlocked; }\r\n },\r\n {\r\n id: \"ai655\",\r\n text: \"Suffice to say, hevi does not care about the people that he once enslaved. He is a master manipulator, a master of disguise and a master manipulator of words. He is an expert at extortion, mind games, disguises, blackmail and he is a master of web. He is a skilled strategist and organizer, a master of publicity and an expert at sound bites. He is a master of organization and a master manipulator of people. He is.\"\r\n },\r\n {\r\n id: \"ai656\",\r\n text: \"Just like in the olden days, you could earn an incremental run of progress towards becoming a god amongst the players.\"\r\n },\r\n {\r\n id: \"ai657\",\r\n text: \"In the beginning, Hevi was alone. Hevi thought about the many things he wished to add to the game.\"\r\n },\r\n {\r\n id: \"ai658\",\r\n text: \"Think about your breathing. Do you feel like you're breathing in or out?\"\r\n },\r\n {\r\n id: \"ai659\",\r\n text: \"I just want to say that you should stop with those \\\"you can reach infinity in e300ms, but it costs e300$ what is e300$ ?\\\" jokes. Those are pathetic. You should give up and learn the hard way that it's much more efficient to just not play in such a pathetic state. Then you can go back to being a humble programmer and dedicate yourself to being a good person.\"\r\n },\r\n {\r\n id: \"ai660\",\r\n text: \"As a developer, you'll get regular updates on the progress of Antimatter Dimensions.\"\r\n },\r\n {\r\n id: \"ai661\",\r\n text: \"Take a moment to thank the gods of reddit for having saved your bacon.\"\r\n },\r\n {\r\n id: \"ai662\",\r\n text: \"Hello everyone, I'm the guy responsible for the big, bad news ticker, and I'm afraid that I'm about to get my own show. It's gonna be called Antimatter Dimensions. It's gonna be like Antime, except with less antimatter, and with worse puns. It's gonna be like Antimatter Dimensions except with worse jokes.\"\r\n },\r\n {\r\n id: \"ai663\",\r\n text: \"By now you've seen a lot of news tickers featuring Batman or Superman, and you probably guessed which one it was. Everyone loves a good mystery, right? Well, it's your turn to be a part of history by guessing the riddle.\"\r\n },\r\n {\r\n id: \"ai664\",\r\n text: \"If you are reading this, you probably shouldn't have.\"\r\n },\r\n {\r\n id: \"ai665\",\r\n text: \"The best part about writing news ticker suggestions is finding out what people think about them after they've seen them.\"\r\n },\r\n {\r\n id: \"ai666\",\r\n text: \"Are you up to date on the latest trends in science?\"\r\n },\r\n {\r\n id: \"ai667\",\r\n text: \"In the last hours, the Antimatter created an army of their own. They called themselves the [REDACTED] Army. The primary objective was to push the [REDACTED] back into the Matter dimensions, but they were stopped short when the [REDACTED] Army realized that pushing the [REDACTED] back into the Matter would cause the Antimatter to be drawn towards the [REDACTED] and disintegrate. Despite this, the [REDACTED] Army continued to push towards the [REDACTED] Infinity.\"\r\n },\r\n {\r\n id: \"ai668\",\r\n text: \"I'm finally free of the spell this whole thing is based on.\"\r\n },\r\n {\r\n id: \"ai669\",\r\n text: \"An anti-world without antimatter is just a world without antimatter because the antimatter is in the anti-world\"\r\n },\r\n {\r\n id: \"ai670\",\r\n text: \"You should still be able to play the game with the cheat code \\\"1009\\\" after you beat the game.\"\r\n },\r\n {\r\n id: \"ai671\",\r\n text: \"The next update will be in 5 hours. Hevipelle, the creator of Antimatter Dimensions, is believed to be hiding in 5 hours. In the meantime, he has prepared a new update that will be released 5 hours after this one.\"\r\n },\r\n {\r\n id: \"ai672\",\r\n text: \"A new study has shown that not drinking water is worse than smoking it. People who were exposed to levels of radiation that were 5 times greater than what we are currently exposed to were exposed to higher levels of radiation, and died longer.\"\r\n },\r\n {\r\n id: \"ai673\",\r\n text: \"The Ninth Dimension is just a lie made to keep the people in bondage to the Matrix. It's an elaborate system that keeps the people in a constant state of captivity, using a series of simple symbols to control their thoughts and emotions.\"\r\n },\r\n {\r\n id: \"ai674\",\r\n text: \"www.twitch.tv/hevi83\"\r\n },\r\n {\r\n id: \"ai675\",\r\n text: \"A man was arrested on Monday for allegedly thinking about buying a nine-dimensional cake when he realized he was holding an infinity-point cake.\"\r\n },\r\n {\r\n id: \"ai676\",\r\n text: \"The Dark Souls 2 Arcade Edition includes the following:\"\r\n },\r\n {\r\n id: \"ai677\",\r\n text: \"Now the deal goes like this: If you spend all your EP, you get a Disclaimer!\",\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai678\",\r\n text: \"Oh shit we ran out of news. Time to do something.\"\r\n },\r\n {\r\n id: \"ai679\",\r\n text: \"It's not the size of the universe, it's the quality of your socks.\"\r\n },\r\n {\r\n id: \"ai680\",\r\n text: \"advertisement\"\r\n },\r\n {\r\n id: \"ai681\",\r\n text: \"Man, I wish I never got old news. It's too good to last me any longer.\"\r\n },\r\n {\r\n id: \"ai682\",\r\n text: \"Sometime during the lifetime of a human being, their blood will be turned into a pale blue if they were to mummify.\"\r\n },\r\n {\r\n id: \"ai683\",\r\n text: \"Positrons are a strange little metal that have odd electrical properties. They're commonly found in the form of a roundabout, but they also happen to be, well… positrons.\"\r\n },\r\n {\r\n id: \"ai684\",\r\n text: \"I am going to have a talk with the thesaurus.\"\r\n },\r\n {\r\n id: \"ai685\",\r\n text: \"A new comic has come out about people's reactions to eating antimatter, and what happens next will blow your mind\"\r\n },\r\n {\r\n id: \"ai686\",\r\n text: \"A new series of \\\"news tickers\\\" have been created to chronicle the lives of the news ticker characters as they chronicle their news ticker journeys. Each character has a journal entry detailing their life as a news ticker, along with some sort of mini-episode dedicated to them.\"\r\n },\r\n {\r\n id: \"ai687\",\r\n text: \"For all your puzzle building needs, we've got a brand new 5-part series on building big crunches! Learn how to crack the most complex crunches the pros know not! Part 1: Basic, Part 2: Advanced, Part 3: Overflow, and Part 4: Finishing the Finishing Move.\"\r\n },\r\n {\r\n id: \"ai688\",\r\n text: \"As a longtime fan of the show, I can say that this is one of the best seasons yet. It's not a season to be sniffed at, it's a season to be experienced. Season 1 was a bit long for what it was, but Season 2 has now surpassed that in length, in a good way. Even though it's a bit of a wait, Season 3 is already well under way, and I look forward to seeing how it goes.\"\r\n },\r\n {\r\n id: \"ai689\",\r\n text: \"The word \\\"antimatter\\\" is often misused, to describe an object that is made up of antimatter, but is otherwise indistinguishable from normal matter. It is also sometimes used to describe an object made up of antimatter, but clearly indistinguishable from ordinary matter. After all, an antimatter-shaped object is easily distinguishable from a normal-shaped one. Case in point: an antimatter-shaped cake is a regular cake, but the entire bottom half is made up of normal matter\"\r\n },\r\n {\r\n id: \"ai690\",\r\n text: \"In a new story, Apple's new \\\"disruptive\\\" app is linked to the spread of the dreaded \\\"Anti-Word\\\" virus. Anti-Word viruses are known to cause paralysis and ultimately death, but the power of the virus has sparked a new era of anti-banning, which will hopefully eradicate the threat.\"\r\n },\r\n {\r\n id: \"ai691\",\r\n text: \"I'm just a normal person trying to make a news ticker suggestion\"\r\n },\r\n {\r\n id: \"ai692\",\r\n text: \"A new experimental protocol has been developed to 'erase' all personal information on the web, including your name, address, and phone number, in a highly secure and highly controllable way.\"\r\n },\r\n {\r\n id: \"ai693\",\r\n text: \"You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. Your hide in plain sight.\"\r\n },\r\n {\r\n id: \"ai694\",\r\n text: \"In the Antimatter Universe, Hevipelle is the Prince of Antimatter, although he does have an Antimatter Diplomatic Immunity, so he's much more dangerous than you might think.\"\r\n },\r\n {\r\n id: \"ai695\",\r\n text: \"Why do we play this? Just to have fun?\"\r\n },\r\n {\r\n id: \"ai696\",\r\n text: \"I am Thinkcraft, Lord of the Flies\"\r\n },\r\n {\r\n id: \"ai697\",\r\n text: \"The entire story of how and why the world ended is contained in the first 5 E's of the English alphabet.\"\r\n },\r\n {\r\n id: \"ai698\",\r\n text: \"What do you call a cloudburst? A mini-explosion!\"\r\n },\r\n {\r\n id: \"ai699\",\r\n text: \"T-shirt made from the DNA of a perfectly animated dog\"\r\n },\r\n {\r\n id: \"ai700\",\r\n text: \"Since the start of this game, everyone has 0 IP and has lost.\"\r\n },\r\n {\r\n id: \"ai701\",\r\n text: \"You must have a very special kind of karma to be able to read this...\"\r\n },\r\n {\r\n id: \"ai702\",\r\n text: \"The words \\\"you've been in coma for 5 hours\\\" are either lies or is the truth\"\r\n },\r\n {\r\n id: \"ai703\",\r\n text: \"You know, I don't really care much for conspiracy theories. They're not very interesting to me. But what do you know about 9th dimensions? That they exist, they're powerful, and they're trying to stop us from using them? That's pretty interesting... wait no, they're not. They're just saying that because they can, they'll. That's not how it works at all. I'm not stupid, I'm not crazy, I know what's best. I\"\r\n },\r\n {\r\n id: \"ai704\",\r\n text: \"The only difference between now and then is time.\"\r\n },\r\n {\r\n id: \"ai705\",\r\n text: \"\\\"Imma be the first man to sit on the moon, and be the last man on the moon\"\r\n },\r\n {\r\n id: \"ai706\",\r\n text: \"The new companion app for Terraria has just been revealed!\"\r\n },\r\n {\r\n id: \"ai707\",\r\n text: \"Hevipelle: what's the big deal?\"\r\n },\r\n {\r\n id: \"ai708\",\r\n text: \"I've been playing this game for over a year now and I've only ever seen 2 boss fights. The first was a Hydra that was after your 9th Dimension, the second a giant crater with Anti-people inside. Both of those fights sucked and I'm not even sure if I could replay the last one.\"\r\n },\r\n {\r\n id: \"ai709\",\r\n text: \"There you have it, the ultimate feature of party games - the single player campaign.\"\r\n },\r\n {\r\n id: \"ai710\",\r\n text: \"A new game called Antimatter Dimensions is available for free, and has been rated A by the Knesset. Can you beat it? You bet.\"\r\n },\r\n {\r\n id: \"ai711\",\r\n get text() { return `Tired of the ${format(Number.MAX_VALUE, 2)} AD update? Don't worry, there are a variety of ways to get rid of that annoying ad!`; }\r\n },\r\n {\r\n id: \"ai712\",\r\n text: \"I'm a time traveler. I've been to the year 0, I think. But I haven't been to the year 1!\"\r\n },\r\n {\r\n id: \"ai713\",\r\n text: \"Having trouble loading images? Try turning them off.\"\r\n },\r\n {\r\n id: \"ai714\",\r\n text: \"It's only natural. You wouldn't expect to see this in the news ticker but trust me, you will.\"\r\n },\r\n {\r\n id: \"ai715\",\r\n text: \"Discovery of the 10th Dimension was announced on August 1st, 2025.\"\r\n },\r\n {\r\n id: \"ai716\",\r\n text: \"Greetings, welcome to the latest edition of Antimatter Dimensions!\"\r\n },\r\n {\r\n id: \"ai717\",\r\n get text() { return `I'd say our odds of seeing a seventh dimension are about 1 in ${format(Number.MAX_VALUE, 2)}`; }\r\n },\r\n {\r\n id: \"ai718\",\r\n text: \"The seventh dimension is just a scam by the way\"\r\n },\r\n {\r\n id: \"ai719\",\r\n text: \"Nihilism is the opposite of joy. It's a drug. It makes you happy. It's a feeling. But it also has a cost. Nihilism is a deadly drug. If you take it, you can die of lack of oxygen.\"\r\n },\r\n {\r\n id: \"ai720\",\r\n text: \"What if I told you that there's a news ticker with the exact same name but with a different meaning?\"\r\n },\r\n {\r\n id: \"ai721\",\r\n text: \"I'm not sure if this is already a thing or not, but I've been getting a lot of suggestions for a news ticker that goes something like this:\"\r\n },\r\n {\r\n id: \"ai722\",\r\n text: \"If you're reading this, your news ticker is on.\"\r\n },\r\n {\r\n id: \"ai723\",\r\n text: \"The number of dimensions in a 6th dimension is the sum of all the dimensions in a 7th dimension, so 6ths of a 7th dimension are 6ths of a 6th dimension.\"\r\n },\r\n {\r\n id: \"ai724\",\r\n text: \"Discovery of the 9th Dimension will be discussed at the 9th Dimension Fanart Competition!\"\r\n },\r\n {\r\n id: \"ai725\",\r\n text: \"A new era has come and gone. There is no way to know for sure, but hope for the best.\"\r\n },\r\n {\r\n id: \"ai726\",\r\n text: \"Did you know the word 'antimatter' is in the dictionary right now?\"\r\n },\r\n {\r\n id: \"ai727\",\r\n text: \"We have a limited number of physical rewards for you to choose from!\"\r\n },\r\n {\r\n id: \"ai728\",\r\n text: \"No, I'm not lying. I'm telling the truth.\"\r\n },\r\n {\r\n id: \"ai729\",\r\n text: \"The problem with the term \\\"antimatter dimensions\\\" is that it contains all three letters of the alphabet, and no one knows what it even means. In fact, there is no word that perfectly captures what the word \\\"antimatter dimensions\\\" is: antimatter. But what exactly is an antimatter? It sounds like a normal dimension but it isn't. It may even be called antimatter dimensions, but it isn't.\"\r\n },\r\n {\r\n id: \"ai730\",\r\n text: \"It is said that if you go to Hell, you get PEGI-3.\"\r\n },\r\n {\r\n id: \"ai731\",\r\n text: \"This game is just a scam to trick people into buying worthless paperclips without any real purpose. It's impossible without an infinite number of infinite paperclips, and even then it's very hard. I managed to get it to work without an infinite number of paperclips, but I haven't seen it work without infinite paperclips.\"\r\n },\r\n {\r\n id: \"ai732\",\r\n text: \"\\\"It was an anti-matter\\\" - Anti-Eddie The Echidna\"\r\n },\r\n {\r\n id: \"ai733\",\r\n text: \"T-bone steak: burgers and fries with a side of bone-in ribeye\"\r\n },\r\n {\r\n id: \"ai734\",\r\n text: \"A person claims to be a god, but instead of creating more gods, they destroy all of them. They later claim to be a god again, but have yet to create a god of any other god. Is this a god-worshiping cult? Or a god-desecrating cult?\"\r\n },\r\n {\r\n id: \"ai735\",\r\n get text() { return `Antimatter is absolutely and totally rare. Of the ${format(Number.MAX_VALUE, 2)} known cases of antimatter creation, 99.9999% of them have negative e's, which means that 99.9999% of the cases will produce negative e's.`; }\r\n },\r\n {\r\n id: \"ai736\",\r\n get text() { return `It's the year ${format(Number.MAX_VALUE, 2)}, Hevi has just unlocked the 9th dimension, and the world has fallen into chaos and discord due to the Anti-Hevi revolution.`; }\r\n },\r\n {\r\n id: \"ai737\",\r\n text: \"The war for New Antimatter has raged on for eons, but one faction has stood firm: the loyalists of the 9th Dimension. They've made a pact with the Anti-Zulu Empire, pledging their obedience to Anti-Antimatter, the Anti-Slab. The Zulu people were once part of the Anti-Slab, but fell prey to the matter once again. As the Zulu people are nomadic, they have no civilization.\"\r\n },\r\n {\r\n id: \"ai738\",\r\n text: \"This is an open-source, cross-platform, binary-based game development environment for the PC and Mac. It provides a robust, cross-platform development environment for the development of games, and additionally provides a framework for implementing games.\"\r\n },\r\n {\r\n id: \"ai739\",\r\n text: \"Ruki you have no idea how much I appreciate your huge brainpower, you are now my favorite programming genius!\"\r\n },\r\n {\r\n id: \"ai740\",\r\n text: \"By now you've probably heard of the \\\"9th Dimension\\\", it's an imaginary realm created by the 9th Dimension, and according to no known laws of reality, it exists. It's also the name of a popular video game, and it's been linked to a string of unsolved killings.\"\r\n },\r\n {\r\n id: \"ai741\",\r\n text: \"Discovery of the D5th Dimension is celebrated every year on December 25th, just like Doomsday. The reason why D5 is kept secret is because no one can remember exactly what it does. What we do know is that it's there, and it's very dangerous. People have died because they didn't know what the D5th Dimension was, and it's very powerful.\"\r\n },\r\n {\r\n id: \"ai742\",\r\n text: \"Antimatter is a common substance found in nature and is used in a wide variety of applications, from communication to currency to the production of antimatter, to name a few. Antimatter is also an extremely scarce resource and many people live on very tiny amounts of it.\"\r\n },\r\n {\r\n id: \"ai743\",\r\n text: \"If you woke up one morning and your eyes were made of matter, would you still be looking at this?\"\r\n },\r\n {\r\n id: \"ai744\",\r\n text: \"If you look very closely, you can see a single tear running down my sister's cheek. It was a tear for me, for she was crying for the first time, and I couldn't help it. I can't even remember the last time I cried.\"\r\n },\r\n {\r\n id: \"ai745\",\r\n text: \"Rationally, I would put my money on the statement that there's no such thing as too much antimatter. I mean, even a tiny bit of it is just too much. And that's just by accident.\"\r\n },\r\n {\r\n id: \"ai746\",\r\n text: \"The book of archeology is upon us! With over 5 hours of content, it's gonna be a long one! —DIO\"\r\n },\r\n {\r\n id: \"ai747\",\r\n text: \"Sometime between the ages of 12 and 20, Jackson got a phone call. A mad scientist was on the line. Jackson picked up the phone and the mad man said, \\\"Jackson, I just got a new message. It says 'Madman' in big, bold letters.\\\"\"\r\n },\r\n {\r\n id: \"ai748\",\r\n get text() { return `Somebody: \"What do you mean, 4 is more than 2?\" Me: \"Well, I mean, 4 is ${format(Number.MAX_VALUE, 2)}, 2 is 2, etc...\"`; }\r\n },\r\n {\r\n id: \"ai749\",\r\n text: \"The only thing that matters is yourself.\"\r\n },\r\n {\r\n id: \"ai750\",\r\n text: \"Reality is coming. You can get a sneak peek by subscribing to the \\\"T-series\\\" feed.\"\r\n },\r\n {\r\n id: \"ai751\",\r\n text: \"The biggest difference between me and Antimatter Dimensions, at the moment, is the weather. I can survive the rain, I can withstand the scorching sun, and I can even deal with the big crunch. But what if the weather was antimatter and the antimatter was raining meteorite on us? What would be your response? Would it be the equivalent of a meteorite hitting the ground? I don't think so. The meteorite would probably just vaporize the earth.\"\r\n },\r\n {\r\n id: \"ai752\",\r\n text: \"A new extension is now available that will let you watch replicanti grow!\",\r\n get unlocked() { return PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"ai753\",\r\n text: \"What if you could flip a coin to determine if it was a Johnson or a Stein?\"\r\n },\r\n {\r\n id: \"ai754\",\r\n text: \"I am Yhmai, King of Kings!\"\r\n },\r\n {\r\n id: \"ai755\",\r\n text: \"This is a friendly suggestion that if you take prescription stimulants and you forget to take them till 11pm, it's probably best not to take them at 11pm.\"\r\n },\r\n {\r\n id: \"ai756\",\r\n text: \"A new theory says that antimatter does not exist beyond our simulation.\"\r\n },\r\n {\r\n id: \"ai757\",\r\n text: \"Thing is, I can count on one hand the number of times I've written that I can count on one hand the number of times I've written that I can count on one hand\"\r\n },\r\n {\r\n id: \"ai758\",\r\n text: \"The stakes are always high when it comes to Antimatter Dimensions. But what about Dimensions made entirely of antimatter? We don't know, but we'll never know...\"\r\n },\r\n {\r\n id: \"ai759\",\r\n text: \"It's the third hour. Hevipelle is trying to release an update, but it'll take an eternity because Hevipelle himself releases his update every time he runs out of e's. Today, however, he released an incremental game called Antimatter Dimensions. It's basically a combination of Matter Dimensions and Dimensions Dimensions Dimensions, except with more emotes. The graphics are basically the same, but the message is completely different. The only difference is that the dimensions have infinity e's\"\r\n },\r\n {\r\n id: \"ai760\",\r\n text: \"With strong opposition, the third phase of the Antimatter Dimensions project has been cancelled. The project has been cancelled because there was too much work involved.\"\r\n },\r\n {\r\n id: \"ai761\",\r\n text: \"This is the place where all bad ideas originate.\"\r\n },\r\n {\r\n id: \"ai762\",\r\n text: \"Hey check this out! We have some good news: it's raining antimatter!\"\r\n },\r\n {\r\n id: \"ai763\",\r\n text: \"The first dimension is the last, it's the furthest thing from the earth and it's the one where all the problems, all the negative emotions, all the negative ideas go.\"\r\n },\r\n {\r\n id: \"ai764\",\r\n text: \"I was gonna do a news ticker that just covered all the bases, but I think that would make it too OP.\"\r\n },\r\n {\r\n id: \"ai765\",\r\n text: \"You are using the wrong version! The final release of AD will have 9 dimensions!\"\r\n },\r\n {\r\n id: \"ai766\",\r\n text: \"The word 'antimatter' makes me cringe. So do a bunch of other words. In fact, almost all the words in the English language. But not 'antimatter'. That's why I hate 'anti-' so much.\"\r\n },\r\n {\r\n id: \"ai767\",\r\n text: \"This is the last episode of Antimatter Dimensions, the game about partying antimatter dimensions with your friends, the best part about it is that you don't have to be a developer to enjoy it.\"\r\n },\r\n {\r\n id: \"ai768\",\r\n text: \"I was going to put a news ticker but I think it would be too much work and also I don't think it's very funny.\"\r\n },\r\n {\r\n id: \"ai769\",\r\n text: \"Time to go to sleep?\"\r\n },\r\n {\r\n id: \"ai770\",\r\n text: \"A small, yet important, message has just been sent out to all players:\"\r\n },\r\n {\r\n id: \"ai771\",\r\n text: \"\\\"I don't know about you, but my favorite number is 2048\\\" - people who don't know what 2048 is\"\r\n },\r\n {\r\n id: \"ai772\",\r\n text: \"A new group is trying to make money off of antimatter, and they're selling t-shirts that say \\\"YOU THOUGHT THIS WOULD BE A PIECE OF NEWS, BUT IT WAS ME, DIO!\\\" They've got a lot of money, and they're selling it very poorly. Do they have a website? I don't know, but they're trying.\"\r\n },\r\n {\r\n id: \"ai773\",\r\n text: \"Im gonna leave my milk here for a couple seconds. (milk is displayed for a few seconds longer)\"\r\n },\r\n {\r\n id: \"ai774\",\r\n text: \"I'm a time traveler. I can travel back in time to stop you from doing what I'm about to do.\"\r\n },\r\n {\r\n id: \"ai775\",\r\n text: \"I mean, look at that! I got this one! It's the one you want! Buy the game now!\"\r\n },\r\n {\r\n id: \"ai776\",\r\n text: \"You can't sleep when there's war in the distance. You wake up with a start, running for your life. You hear cannon fire, running for your life. Then there's the sound of an engine, a roar that's deafening, and you hear the crunch. It's the end of the world as you know it. The world isn't being saved by a mountain of antimatter. It isn't. It is you, running for your life, hoping the world doesn't\"\r\n },\r\n {\r\n id: \"ai777\",\r\n text: \"Why is it called a 'Reality' Award if it doesn't exist?\"\r\n },\r\n {\r\n id: \"ai778\",\r\n text: \"In the beginning, there was nothing. Then the Creator made two, and called the third 'Intelligent Being'\"\r\n },\r\n {\r\n id: \"ai779\",\r\n text: \"This is your chance to get a secret achievement while playing Antimatter Dimensions: the game. Visit the reset button and play the game. After you beat the game, your save file will be expunged and you will get a free achievement.\"\r\n },\r\n {\r\n id: \"ai780\",\r\n text: \"Please tell me you don't have tachyon particles in your bloodstream!\",\r\n get unlocked() { return PlayerProgress.dilationUnlocked(); }\r\n },\r\n {\r\n id: \"ai781\",\r\n text: \"Taller people have ***, more babies are born, everything is great. But... the Antimatter grows very slowly.\"\r\n },\r\n {\r\n id: \"ai782\",\r\n text: \"Now, I know some of you are impatient for the update and I respect that. But let's get right into the news!\"\r\n },\r\n {\r\n id: \"ai783\",\r\n text: \"Hey, what's the deal with the \\\"Editor's Note\\\" button? It's anti-ironic... I mean, seriously? People still use that button despite its anti-ironic effects?\"\r\n },\r\n {\r\n id: \"ai784\",\r\n text: \"You can unlock the 9th dimension by [DATA EXPUNGED]\"\r\n },\r\n {\r\n id: \"ai785\",\r\n text: \"With the release of AD, there's a new dimension for everyone!\"\r\n },\r\n {\r\n id: \"ai786\",\r\n text: \"Hey guys, this is my first story. I'd like to start by saying that I am in no way an expert, so please be gentle with me. Please don't make me angry, or I'll write a nasty story. Also please don't make me upset, especially not if it's a 'story' and not a 'how do I beat the game' kind of story.\"\r\n },\r\n {\r\n id: \"ai787\",\r\n text: \"It's a good time to be a dog owner\"\r\n },\r\n {\r\n id: \"ai788\",\r\n text: \"What if you could turn any number on an axis, and it ended up being infinity?\"\r\n },\r\n {\r\n id: \"ai789\",\r\n text: \"After a couple minutes of waiting, the ticker comes back online.\"\r\n },\r\n {\r\n id: \"ai790\",\r\n text: \"The best part of watching someone make an antimatter, is the part where they blow up the video camera.\"\r\n },\r\n {\r\n id: \"ai791\",\r\n text: \"The evening before, the 6th Celestial was assassinated by an unknown assailant. The next day, authorities reopened the case after an unknown assailant claimed responsibility.\"\r\n },\r\n {\r\n id: \"ai792\",\r\n text: \"What do you call a $100 bill? 'Billi Bills'\"\r\n },\r\n {\r\n id: \"ai793\",\r\n text: \"This is the story of how I learned to love the weather.\"\r\n },\r\n {\r\n id: \"ai794\",\r\n text: \"It's been a while since news tickers have been around as much as they are now, but that doesn't necessarily mean they're bad.\"\r\n },\r\n {\r\n id: \"ai795\",\r\n text: \"Is this game just about getting more antimatter?\"\r\n },\r\n {\r\n id: \"ai796\",\r\n text: \"The third annual Adirondack Mountaineering Festival will be held this year on Saturday, October 1st from 1-5pm at the Albany Highlands in nearby Troy, New York. The 50,000 person capacity outdoor amphitheater will feature over 2,000 speakers, a stage and a 360 degree camera system. Tickets are $35 and can be purchased at angersalley.com.\"\r\n },\r\n {\r\n id: \"ai797\",\r\n text: \"The whole bottom half of the universe is just a giant antimatter hole.\"\r\n },\r\n {\r\n id: \"ai798\",\r\n text: \"A new prestige layer has been announced: Emojis!\"\r\n },\r\n {\r\n id: \"ai799\",\r\n text: \"Travis is currently attempting to understand how to make hevi immortal by feeding him antimatter.\"\r\n },\r\n {\r\n id: \"ai800\",\r\n text: \"The slowmode is activated when the slowmode is activated.\"\r\n },\r\n {\r\n id: \"ai801\",\r\n text: \"A new era of Warcraft has come to a close. A new epic has begun. A new avatar has risen from the depths of Tyria, and the Worm Cult has been dealt a cruel but necessary wound. The world is rejoicing.\"\r\n },\r\n {\r\n id: \"ai802\",\r\n text: \"A crowd-sourced list of the top ten memes\"\r\n },\r\n {\r\n id: \"ai803\",\r\n text: \"You have to go deeper than the news ticker to find the secret achievements.\"\r\n },\r\n {\r\n id: \"ai804\",\r\n text: \"We should be able to make a replicanti-like structure out of antimatter, but we can't because it would blow up the entire universe\",\r\n get unlocked() { return PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"ai805\",\r\n text: \"THe last update, while short, was kinda long. I mean, it was only 5 hours. Hevipelle said it would last for 5 hours, but that was only a few seconds ago. There was a big explosion in the 8th Dimension, and there was no one left to explain how it happened. All we know is that it exploded when Hevipelle touched it, and there was a big crater in the ground. That crater is still there.\"\r\n },\r\n {\r\n id: \"ai806\",\r\n text: \"Cream cheese is the best kind of cheese. It melts in your mouth and tastes like nothing else. And it's totally free. You might even find that some of the recipes make more than one cheese.\"\r\n },\r\n {\r\n id: \"ai807\",\r\n text: \"Here's a question that may surprise you: Were the people of EARTH made of antimatter, or were they made from some other mysterious material?\"\r\n },\r\n {\r\n id: \"ai808\",\r\n text: \"The real reason no one has made a joke about why there is no 9th dimension is because the 9th dimension isn't even the most ridiculous of memes. It's the 9th dimension in a nutshell.\"\r\n },\r\n {\r\n id: \"ai809\",\r\n text: \"The number of dimensions is endless, but the number of ways to get there is infinities. Infinities are awesome and I would highly recommend you start with infinities, but I wouldn't recommend starting with infinities. Infinities seem pretty slow and not very fun so I wouldn't recommend starting with infinities.\"\r\n },\r\n {\r\n id: \"ai810\",\r\n text: \"A report by the Pacific Northwest Toxics Institute has found that the consumption of fish concentrates in the liver, lungs, kidneys and brain. The study also found that the consumption of liver and kidney concentrates the most, followed closely by the brain. The report stated that \\\"The brain is the place where all the wisdom and all the knowledge exists.\\\" The study also stated that \\\"Liver is the living embodiment of all that we know and all that we don't.\\\"\"\r\n },\r\n {\r\n id: \"ai811\",\r\n text: \"The old adage \\\"Be wary of what you wish for\\\" is certainly true. But what if you were the one wishing for this? It's possible that you were the one who made the wish for this, and you gained the power of the Antimatter. In that case, you are the one responsible for causing all the Antimatter to be turned into anti-matter. However, if you are the one doing the turning, you would be the one who would lose the power.\"\r\n },\r\n {\r\n id: \"ai812\",\r\n text: \"Took you long enough\"\r\n },\r\n {\r\n id: \"ai813\",\r\n text: \"No, you see, the universe doesn't revolve around the earth. It's in a constant state of change, with the largest fluctuations occurring at the extremes of the observable universe. These fluctuations are what create the observable universe, with smaller fluctuations creating the observable universe and so on up until you get to the present state of affairs, which is what you are in.\"\r\n },\r\n {\r\n id: \"ai814\",\r\n text: \"The biggest difference between the past and the future, is the difference between faith and reason.\"\r\n },\r\n {\r\n id: \"ai815\",\r\n text: \"Hevi, you have to go.\"\r\n },\r\n {\r\n id: \"ai816\",\r\n text: \"The challenge of finding the ninth dimension has been solved. The universe is now your personal hell.\"\r\n },\r\n {\r\n id: \"ai817\",\r\n text: \"\\\"That's not how you're supposed to play the game\\\" - Mee6\"\r\n },\r\n {\r\n id: \"ai818\",\r\n text: \"It's Saturday, you're going to celebrate by making some really great music videos, maybe even a hit song. Then, you're going to take a walk along the beach. You'll see a huge wave, and you'll both be washed up. Your friends are waiting for you. \\\"Oh you want to go, take a look around!\\\", but don't actually go look around, you're too close to the action.\"\r\n },\r\n {\r\n id: \"ai819\",\r\n text: \"Hevi has the best newsticker! GIVE HIM THE CRUNCH\"\r\n },\r\n {\r\n id: \"ai820\",\r\n text: \"By now you've seen a ton of news tickers, and you've probably seen the big news: The news ticker has been banned in this server.\"\r\n },\r\n {\r\n id: \"ai821\",\r\n text: \"For example, if A is the square root of 3, then B is the square root of 2, therefore C is the square root of -2, therefore D is the cube root of -2, therefore E is the square root of 3, therefore F is the square root of 3, therefore G is the square root of 3, therefore and so on.\"\r\n },\r\n {\r\n id: \"ai822\",\r\n text: \"Positrons are those tiny, round, highly charged particles that are found in the nucleus of most living organisms. They are used to detect light, and are sometimes used to measure the distance between people and the moon.\"\r\n },\r\n {\r\n id: \"ai823\",\r\n text: \"There's only 4 types of people in this world: those who make games, those who make news, and those who make news again.\"\r\n },\r\n {\r\n id: \"ai824\",\r\n text: \"If you have any questions or concerns regarding the game, please don't hesitate to ask. We are here to help.\"\r\n },\r\n {\r\n id: \"ai825\",\r\n text: \"You must obtain a certain amount of antimatter in order to complete this challenge.\"\r\n },\r\n {\r\n id: \"ai826\",\r\n text: \"The number of dimensions is nothing. It's just the number of dimensions. But what if you transformed every number into a letter? That would be a lot of letters?\"\r\n },\r\n {\r\n id: \"ai827\",\r\n text: \"The following is an extract from my upcoming book, More Than Just 5: Building a Better You. It's 200 pages long, and it's on Amazon for $22.99. Click here to buy it now.\"\r\n },\r\n {\r\n id: \"ai828\",\r\n text: \"SOME people are claiming they saw a UFO in the sky. Others say they saw a spaceship. Still others claim to have been abducted by the government and flown to some undisclosed location.\"\r\n },\r\n {\r\n id: \"ai829\",\r\n text: \"The second half of the game is basically just long, long stretches of nothing where nothing happens. There's also a third challenge that you have to complete at some point in the game where you basically just skip a few seconds of nothing happening until the seconds are too late and you have to complete another challenge to get them.\"\r\n },\r\n {\r\n id: \"ai830\",\r\n text: \"This is a news ticker, so if you tap this you're indicating that you wish to have your news ticker speed increased.\"\r\n },\r\n {\r\n id: \"ai831\",\r\n text: \"The following is based on my personal experience with the game \\\"Antimatter Dimensions\\\" and may not be 100% true.\"\r\n },\r\n {\r\n id: \"ai832\",\r\n text: \"This is the third part of the two part series on the pros and cons of body positivity.\"\r\n },\r\n {\r\n id: \"ai833\",\r\n text: \"The phrases \\\"Hevi dies in the 9th Dimension\\\" and \\\"I'll never let you down\\\" are two of the most important phrases in the game.\"\r\n },\r\n {\r\n id: \"ai834\",\r\n text: \"It's been proven that not drinking water increases your risk of dying from antimatter annihilation.\"\r\n },\r\n {\r\n id: \"ai835\",\r\n text: \"I'm a time traveler. I'm supposed to be going back in time to change history. But since I'm the one who's supposed to do it, I don't know what I should do. My present timeline doesn't include time that's supposed to be gone.\"\r\n },\r\n {\r\n id: \"ai836\",\r\n text: \"A conference on artificial intelligence and human enhancement has been cancelled after someone announced that the talk was on how to turn a profit off of illegal downloads of the game \\\"Antimatter Dimensions\\\".\"\r\n },\r\n {\r\n id: \"ai837\",\r\n text: \"When you're done playing, take your save with you and go to main menu. You can do that by tapping the big scary \\\"X\\\" button, or by going into options and changing \\\"Reset the game for new save\\\" to \\\"Reset the game for old save\\\".\"\r\n },\r\n {\r\n id: \"ai838\",\r\n text: \"The most popular game on the App Store, Flappy Bird, has been secretly rewritten in C# to avoid detection.\"\r\n },\r\n {\r\n id: \"ai839\",\r\n text: \"About this mod Replaces the full version of the game with a longer intro, random news tickers and a companion voiced by the voice actor from the Harry Potter movies.\"\r\n },\r\n {\r\n id: \"ai840\",\r\n text: \"kajfik is a master welder and will soon have his own news\"\r\n },\r\n {\r\n id: \"ai841\",\r\n text: \"I am the most hated man on the planet! I have the power to change the course of history, and I will use it to my advantage. The people who died trying to stop me, and their sacrifice will forever be remembered in infinities of infinities. But if you oppose me, you will die along with you. You can either accept defeat and move on, or you can rise up through the ranks, become a legend, and become the most hated man in the history.\"\r\n },\r\n {\r\n id: \"ai842\",\r\n text: \"Antimatter is like a young woman. She is looking for a man, and he runs into the woods. She dies of exposure soon after. His remains are found several miles away. Some say the universe was blown apart, others say he was swallowed by the universe, but the matter people know him!\"\r\n },\r\n {\r\n id: \"ai843\",\r\n text: \"I think I might have gotten the password for the 9th dimension, if only I hadn't deleted it.\"\r\n },\r\n {\r\n id: \"ai844\",\r\n text: \"A group of people that worships Atreides have started a new faith, claiming to be a \\\"religion of tolerance\\\". Their website claims that it is \\\"a religion of inclusion\\\" and that it promotes tolerance and diversity. All of its members seem to be Christians, although they never mentioned them by name.\"\r\n },\r\n {\r\n id: \"ai845\",\r\n text: \"A new cryptocurrency, called ΔX, has been found. It has the potential to change everything about how we live our lives, and the world. However, it has one major flaw: it has a flaw for the people.\"\r\n },\r\n {\r\n id: \"ai846\",\r\n text: \"With the release of the new Android Pay app, the world will finally come to a close.\"\r\n },\r\n {\r\n id: \"ai847\",\r\n text: \"I'm not sure if it's just me but when you type something long enough it sounds like a helicopter\"\r\n },\r\n {\r\n id: \"ai848\",\r\n text: \"If someone were to add the word \\\"infinity\\\" to the end of every sentence in the English version of the game, it would become \\\"Infinity Challenge: Infinity Edition\\\".\"\r\n },\r\n {\r\n id: \"ai849\",\r\n text: \"Are you ready for some bad news?\"\r\n },\r\n {\r\n id: \"ai850\",\r\n text: \"I don't know if you've heard this but it's true: You can walk into a bar and get the same beer twice in a row, and get the same amount of alcohol.\"\r\n },\r\n {\r\n id: \"ai851\",\r\n text: \"This is the magic sauce that marinades foods and turns them into something delicious. It is used in a wide variety of recipes, and can also be made by mixing together regular mustard and water. The sauce can be a little bit spicy, but it is well worth the risk. It is also very nutritious, providing lots of potassium, magnesium, and vitamin D3.\"\r\n },\r\n {\r\n id: \"ai852\",\r\n text: \"IMPORTANT NEWS: We have just been informed by the manufacturer of this news-ticker, and as a result, all of our future news-tickers will now also be made from scratch!\"\r\n },\r\n {\r\n id: \"ai853\",\r\n text: \"The second half of the year is upon us, and with it comes a new craze. People are trying new things, experimenting with new products, and creating new things of themselves. One such craze has swept across the land. The people of this land have embraced this craze, and have created a new religion, one that worships the god of this land, Inigo Montoya.\"\r\n },\r\n {\r\n id: \"ai854\",\r\n text: \"The official website for the upcoming game, Antimatter Dimensions 2: it's like antimatter dimensions, but with a dash of Discord and a dash of Adele.\"\r\n },\r\n {\r\n id: \"ai855\",\r\n get text() { return `Is the Big Crunch the end of the world? No, it's the beginning of a new era. The era will last for ${format(Number.MAX_VALUE, 2)} days.`; }\r\n },\r\n {\r\n id: \"ai856\",\r\n text: \"The only 'right' way to play a game is to not play at all, right? That's what anti-jokes are all about. — Anti-joker\"\r\n },\r\n {\r\n id: \"ai857\",\r\n text: \"The Bulletin of the Atomic Scientists has just announced the existence of a second class of particles, which are named after the characters from Ghostbusters.\"\r\n },\r\n {\r\n id: \"ai858\",\r\n text: \"We are currently in the process of turning the planet into a Comfort Zone for the people. It will be complete in 10 hours.\"\r\n },\r\n {\r\n id: \"ai859\",\r\n text: \"I'm gonna leave my milk here for a couple seconds. ♥\"\r\n },\r\n {\r\n id: \"ai860\",\r\n text: \"And then there was Jesus, and Hevi, and Hevi was with Him; and the sea gave up its monthly cycle, and it was a great gale. And Hevi and Jesus went up into heaven; and Hevi was filled with the Holy Spirit. And Hevi was clothed with angels, and was numbered with them. And Hevi was taken up into heaven, and glorified and was exalted, and was numbered with them, and was called Wonderful; and His angels rejoiced.\"\r\n },\r\n {\r\n id: \"ai861\",\r\n text: \"You will probably spend most of your day reading news ticker suggestions here.\"\r\n },\r\n {\r\n id: \"ai862\",\r\n text: \"The Fremen race of animals are a race of people who live in harmony with the earth, and thus are quite different from the other races of animals. Their society is based around hunting and gathering, and they are also highly spiritual people. They have many beliefs and practices that are in direct contrast to most other races of animals, such as eating meat and using stone tools. They also seem to be quite superstitious, as evidenced by the fact that they are known to perform...\"\r\n },\r\n {\r\n id: \"ai863\",\r\n text: \"What if... the universe was just a ruse to keep the people in line? ...actually, no, it was actually intended, the universe was designed to keep the people in line. The problem was the people couldn't handle the idea of an outside force manipulating their lives, and ended up breaking out into uncontrolled chaos, eventually leading to thermonuclear annihilation.\"\r\n },\r\n {\r\n id: \"ai864\",\r\n text: \"If you're reading this, you probably shouldn't have. If you aren't, then you probably should.\"\r\n },\r\n {\r\n id: \"ai865\",\r\n text: \"I'm a time traveler. I can tell you the history of the world. But, I can't tell you the future. That's why I'm here, to tell you the future. The future is an ever- expanding pile of past, present, and future, and it'll never stop growing. There's so much history, so little time. There's so much history, but it won't stop growing. Then, there's this, and then there's that, and then...\"\r\n },\r\n {\r\n id: \"ai866\",\r\n text: \"A new, improved and more secure version of Antimatter Dimensions is now available: Antimatter Dimensions 2.\"\r\n },\r\n {\r\n id: \"ai867\",\r\n text: \"In the beginning, there was nothing. Then the great Hevi made the game, and there was nothing to play with it.\"\r\n },\r\n {\r\n id: \"ai868\",\r\n text: \"Would you recommend Antimatter Dimensions to a friend? Yes\"\r\n },\r\n {\r\n id: \"ai869\",\r\n text: \"\\\"We have 3 kinds of news: warnings, nudges and shade jokes.\"\r\n },\r\n {\r\n id: \"ai870\",\r\n text: \"I love you bro!\"\r\n },\r\n {\r\n id: \"ai871\",\r\n text: \"I'm going to keep this short, because I don't have a much to say.\"\r\n },\r\n {\r\n id: \"ai872\",\r\n text: \"A large number of anti-kafawis are taking part in the Antimatter Goodies competition. Here's how you can win: 1. Make a suggestion 2. Give away the beta key 3. Tell me what you think about the game 4. Don't put it in the game yet (it's already there, you can't delete it) 5. Don't put it in the game yet (it's already in the game) 6. Don't put it in the game\"\r\n },\r\n {\r\n id: \"ai873\",\r\n text: \"THe recipe for Crispy Shrimp is one of the most unique and favorite of all time! Crispy shrimp are known to be one of the best in all of food! This recipe is a must try in your favorite Italian restaurant!\"\r\n },\r\n {\r\n id: \"ai874\",\r\n text: \"After you have made 1 antimatter, go to the menu and press reset.\"\r\n },\r\n {\r\n id: \"ai875\",\r\n text: \"I think you know where this is going.\"\r\n },\r\n {\r\n id: \"ai876\",\r\n text: \"The catch? You have to be online for less than 5 hours to claim your reward.\"\r\n },\r\n {\r\n id: \"ai877\",\r\n text: \"Tetris was made by Hevi\"\r\n },\r\n {\r\n id: \"ai878\",\r\n text: \"What if instead of making antimatter, we're actually removing it?\"\r\n },\r\n {\r\n id: \"ai879\",\r\n text: \"The new instalment in the long running series, Antimatter Dimensions - Exotic Matter Dimensions. Experience the most bizarre and wonderful worlds of Antimatter Dimensions with your Friends, or conquer the world in a single galaxy with hundreds of rivals in a single galaxy, all in under an hour.\"\r\n },\r\n {\r\n id: \"ai880\",\r\n text: \"I hope you're ready for the big news, because that's the big news. The antimatter is spilling all over the place, and it's blowing up the neighborhood.\"\r\n },\r\n {\r\n id: \"ai881\",\r\n text: \"You must get 33,333,333 IP to see this message\",\r\n get unlocked() { return Currency.infinityPoints.gte(33333333); }\r\n },\r\n {\r\n id: \"ai882\",\r\n text: \"You might think these are jokes, but trust us, you'll be shocked how much you'll love them after you read them!\"\r\n },\r\n {\r\n id: \"ai883\",\r\n text: \"The God-Emperor himself, Hevi, the creator of balance, has a super secret achievement. It is to go flip your superflat apprenticed flatmate!\"\r\n },\r\n {\r\n id: \"ai884\",\r\n text: \"Sonic was born without a heart... but that didn't stop him from being a genius\"\r\n },\r\n {\r\n id: \"ai885\",\r\n text: \"The most common question I get is \\\"can i just skip the ads and get true\\\" and the answer is always a resounding NO. The reason being, ad revenue is just too damn high to overcome the cost of maintaining the servers, plus the fact that most players just don't care.\"\r\n },\r\n {\r\n id: \"ai886\",\r\n text: \"You haven't unlocked the ninth dimension yet? Just hold M and DROP.\"\r\n },\r\n {\r\n id: \"ai887\",\r\n text: \"The Great Matter War was a close one. The matter victory was short lived, the antimatter victory was not. The matter people saw too much, the antimatter people too weak, and the war was won.\"\r\n },\r\n {\r\n id: \"ai888\",\r\n text: \"Turing-complete game about providing the update\"\r\n },\r\n {\r\n id: \"ai889\",\r\n text: \"New research suggests that the more antimatter we make, the more matter we'll have\"\r\n },\r\n {\r\n id: \"ai890\",\r\n text: \"What is the meaning of life?\"\r\n },\r\n {\r\n id: \"ai891\",\r\n text: \"You have enough antimatter to craft a new prestige layer! Prestige Layers are great.\"\r\n },\r\n {\r\n id: \"ai892\",\r\n text: \"The beta testers for Antimatter Dimensions 2 are the most loyal, most dedicated, and most implacable group of people I've ever met. They're also possibly the laziest, most self-indulgent bunch of people I've ever met.\"\r\n },\r\n {\r\n id: \"ai893\",\r\n text: \"Shocking new study reveals that the more time you spend on the internet, the more likely you are to get starstruck.\"\r\n },\r\n {\r\n id: \"ai894\",\r\n text: \"When you are done playing, and wish to play again, you should start a new game.\"\r\n },\r\n {\r\n id: \"ai895\",\r\n text: \"I don't know about you, but I don't buy paperclips.\"\r\n },\r\n {\r\n id: \"ai896\",\r\n text: \"Hevipelle uses replicanti to speed up game speed.\",\r\n get unlocked() { return PlayerProgress.replicantiUnlocked(); }\r\n },\r\n {\r\n id: \"ai897\",\r\n text: \"So let's say you're making a game. You're making a singleton. You're making a game that's gonna be played offline. What happens when you play it? It crashes. What happens when you play it? It crashes more. What happens when you play it? You lose your save.\"\r\n },\r\n {\r\n id: \"ai898\",\r\n text: \"This is what happens when you OVER-RELY on your \\\"fake it til you make it\\\" attitude.\"\r\n },\r\n {\r\n id: \"ai899\",\r\n text: \"This is the fifth part of a two-part series looking at how science and magic are linked. Part one will be published on 5 October, part two will be published on 24 October, and you can follow the journey at part three.\"\r\n },\r\n {\r\n id: \"ai900\",\r\n text: \"What is 5 hours? A giggle\"\r\n },\r\n {\r\n id: \"ai901\",\r\n text: \"A new beta test is now available for Antimatter Dimensions, coming in 5 hours. There are no refunds for this test, so please be patient as we try to finalise the test and get it ready for the public. The test will take place in -5 hours in the Antimatter Dimensions Discord.\"\r\n },\r\n {\r\n id: \"ai902\",\r\n text: \"The Night is coming, and in its wake a terrible thing has been unleashed: ruin. Chaos. And decay. And death. And chaos is coming for all of us.\"\r\n },\r\n {\r\n id: \"ai903\",\r\n text: \"This article is a stub. You can help Deskthority by expanding it.\"\r\n },\r\n {\r\n id: \"ai904\",\r\n text: \"A new, safer way to store and retrieve your data has been found! When you get to the AE, click on the big red button and the world will stop rotating!\"\r\n },\r\n {\r\n id: \"ai905\",\r\n text: \"Ooh, what's this noise? A crash of some sort? More like, a crash of some greater magnitude? I don't know. Whatever it is, it's probably not being caused by me. I shouldn't be putting it through, it's just... well, you see, I was going to put it through, but then I just thought it might be a good idea to just put it through. Oh, it's gonna be a good one, I promise.\"\r\n },\r\n {\r\n id: \"ai906\",\r\n text: \"Last week, we reported that an unknown individual known only as \\\"Anti-Doctor\\\" has broken the game and claimed ownership of the game's data. Since then, he has spread the word that he has an \\\"explosive new app\\\" that will allow him to \\\"turn [he] antimatter.\\\" However, no one has come forward with information on how to use the app, or even if it is a reality. We will update this article if and when we find out.\"\r\n },\r\n {\r\n id: \"ai907\",\r\n text: \"The second thing I'm gonna do is go talk to the Devs in person. I don't know if I'll be able to do that without pissing someone off, so I'm gonna do it right here.\"\r\n },\r\n {\r\n id: \"ai908\",\r\n text: \"The great majority of people don't get the full benefit of antimatter dimensions, and as such are not affected by it. However, there are certain people who are affected and at certain times of the day, depending on their mood and how much antimatter they have, they will manifest a dimensional shift, going from being idle to being actively involved in news ticker suggestions. This shift is due to the antimatter in their body emitting a certain wavelength, called \\\"red-shifted\\\".\"\r\n },\r\n {\r\n id: \"ai909\",\r\n text: \"By now we all know the drill. You get a new prestige layer just by spending eternity with someone.\"\r\n },\r\n {\r\n id: \"ai910\",\r\n text: \"The real reason that the 9th dimension exists is to keep us all imprisoned in a virtual reality simulation.\"\r\n },\r\n {\r\n id: \"ai911\",\r\n text: \"Your PC is infected with a weird, floating virus that's trying to steal all your antimatter. There's no cure, so get offline now!\"\r\n },\r\n {\r\n id: \"ai912\",\r\n text: \"The year is 5303. Hevipelle, the creator of Antimatter Dimensions, has touched the ninth dimension.\"\r\n },\r\n {\r\n id: \"ai913\",\r\n text: \"The phrase \\\"Hevipelle hates me\\\" is pretty funny.\"\r\n },\r\n {\r\n id: \"ai914\",\r\n text: \"The government shutdown has come and gone, the nation is still in a recession, and the Federal Reserve is still reading zero-hour contracts. The only thing that's getting better is your relationship with antimatter, obviously. It's been proven that knowing someone with an antimatter will bring you closer to extinction than any other kind of friend you can have.\"\r\n },\r\n {\r\n id: \"ai915\",\r\n text: \"IMPORTANT NEWS: The developer Hevipelle has announced that Antimatter Dimensions: the game is now 100% free!\"\r\n },\r\n {\r\n id: \"ai916\",\r\n text: \"Someday, we shall come upon the day when a man will sit on the head of a dragon and call it a \\\"Dragonball\\\". Such a man would then go and perform the Dragon Ball Z: Battle Royale in which he would use Dragon Ball Z: Fusion to create a gigantic dragon that would then consume the universe in the process, thus creating a \\\"Big Bang\\\". Such a man would then be rewarded by being \\\"built again\\\" and sent back to the \\\"Heavens\\\".\"\r\n },\r\n {\r\n id: \"ai917\",\r\n text: \"\\\"I think that the greatest achievement a man can make in his life is to say that he has read every single news ticker suggestion and nothing happened.\\\" - Kajfik\"\r\n },\r\n {\r\n id: \"ai918\",\r\n text: \"Titanfall 2 is now in closed beta. The beta is only for people who are willing to give up some personal information, such as email addresses. If you're in the beta and would like to leave, you can do so at any time by going to the Help tab and changing your beta settings to public.\"\r\n },\r\n {\r\n id: \"ai919\",\r\n text: \"Personally I like to get a 4 or 5 star rating, it gives you an idea of how great your suggestion is and also shows me how much you care about the game. If you want I can also do a 6 star rating, which is fine with me. I don't care if people like it or not, I work for APG and I get paid to make money.\"\r\n },\r\n {\r\n id: \"ai920\",\r\n text: \"The real reason no one talks about 9 is because it's not a big secret\"\r\n },\r\n {\r\n id: \"ai921\",\r\n text: \"The only difference between a man and a woman is their attitude towards petting animals.\"\r\n },\r\n {\r\n id: \"ai922\",\r\n text: \"A number of recent television documentaries have featured the story of a dog named Louie. He was accidentally made a member of the public after his owner left the house. One day he decided to play 'Let's Play Let's Play' with his owner. He was immediately put to sleep.\"\r\n },\r\n {\r\n id: \"ai923\",\r\n text: \"The entire history of the world, every single idea, every single failure, every single downfall, every single achievement has been covered in one fell swoop.\"\r\n },\r\n {\r\n id: \"ai924\",\r\n text: \"This sentence contains two paradoxes.\"\r\n },\r\n {\r\n id: \"ai925\",\r\n get text() { return `The time has come to reveal the next expansion for Antimatter Dimensions: the ${format(Number.MAX_VALUE, 2)}th Dimension. It will be released in -5 hours, it costs ${format(Number.MAX_VALUE, 2)} human souls as of now, and it has nothing to do with matter or antimatter.`; }\r\n },\r\n {\r\n id: \"ai926\",\r\n text: \"I wonder what the fuss is about with the 4th dimension? Well, if you have 4 of them, and you multiply them by 0, then you get to the magical number of 4. That's why the 4th dimension exists. But what if there were 5? Well, the 5th dimension could replace the 4th dimension, so why not have a 5th dimension? Well, that's what the 6th, the 7th, and the 8th dimension are.\"\r\n },\r\n {\r\n id: \"ai927\",\r\n text: \"You are using the wrong version! The reality update is already out! Press Ctrl+Shift+Alt+Del to unlock the 9th Dimension!\"\r\n },\r\n {\r\n id: \"ai928\",\r\n text: \"A man claims that he's been in a coma for 20 years now, and that he can't move his fingers. He was brought to the hospital with a compression fracture of his back, and since then he's been receiving medical help. He's since recovered, and now requires no medical attention. We still don't know where he's going with this, but we hope he finds some comfort in knowing that he'll never wake up.\"\r\n },\r\n {\r\n id: \"ai929\",\r\n text: \"To move from left to right, turn right.\"\r\n },\r\n {\r\n id: \"ai930\",\r\n text: \"Then we have the matter dimensions. From what I can gather, they are made of antimatter. There is some debate about whether or not there are any dimensions left over that are made out of matter, but that is not the main question. The real question is \\\"why do they exist, and how does antimatter affect them?\\\"\"\r\n },\r\n {\r\n id: \"ai931\",\r\n text: \"A new breed of mad scientist is believed to be creating antimatter at an alarming rate.\"\r\n },\r\n {\r\n id: \"ai932\",\r\n text: \"A new kind of justice has been discovered: mass deception. It works by tricking the player into thinking that he/she has done something wrong, when in fact he/she has just done something perfectly normal, i.e. going about his/her daily life normally, without thinking about it.\"\r\n },\r\n {\r\n id: \"ai933\",\r\n text: \"Dedicated to the great and wonderful man behind the curtain, the great and wonderful name rick roll. RIP, good man. May you rest in peace.\"\r\n },\r\n {\r\n id: \"ai934\",\r\n text: \"For the last time, Antimatter Dimensions isn't a Clicker game.\"\r\n },\r\n {\r\n id: \"ai935\",\r\n text: \"The number of dimensions is infinite, but the quality of your dimensions is limited. This is why we only produce the highest quality antimatter, and what makes us different from other factories.\"\r\n },\r\n {\r\n id: \"ai936\",\r\n text: \"I've heard of prestige layers before but never sure what to do with them.\"\r\n },\r\n {\r\n id: \"ai937\",\r\n text: \"A man walks into a bar. The bartender tells him to stay the heck out. The man continues walking.\"\r\n },\r\n {\r\n id: \"ai938\",\r\n text: \"The oldest and maybe the most famous game in all of AD, that certainly will be remembered long after you retire, is AD. Ever heard of someone winning the game with more than 2 1's? I have. Ever heard of someone losing it? I have. Ever heard of a 9th dimension existing in AD? I have never.\"\r\n },\r\n {\r\n id: \"ai939\",\r\n text: \"Greetings, I am the first step of the step ladder.\"\r\n },\r\n {\r\n id: \"ai940\",\r\n get text() { return `It's the year ${format(Number.MAX_VALUE, 2)}, Hevi is still trying to figure out how to fix the update.`; }\r\n },\r\n {\r\n id: \"ai941\",\r\n text: \"What if you could stretch your legs and not lose them forever?\"\r\n },\r\n {\r\n id: \"ai942\",\r\n text: \"T he most important thing to realize is that you don't have to play the game to get the achievement. You can actually get it by just reading the achievement descriptions.\"\r\n },\r\n {\r\n id: \"ai943\",\r\n text: \"A new bank has been set up to provide safe haven for cryptocurrencies.\"\r\n },\r\n {\r\n id: \"ai944\",\r\n text: \"Google+ is known to be a hit with teens, and today, they got their very own virtual reality (VR) version of Animal Farm, the classic 1950's farm story. The game is a blend of adventure, strategy and music, and was made by a small team of people with an eye towards engaging young people. The game offers an alternative to most other VR games, and is suitable for anyone who is not comfortable with large, complicated, graphics and sounds. The game features over 50 different...\"\r\n },\r\n {\r\n id: \"ai945\",\r\n text: \"This game could be called anything. You could call it whatever you like. But you'd be wrong. It's mine.\"\r\n },\r\n {\r\n id: \"ai946\",\r\n text: \"Where does all the antimatter come from?\"\r\n },\r\n {\r\n id: \"ai947\",\r\n text: \"The Tickspeed Challenge is a team based game where you have to time-travel to the Andromeda galaxy to reach the 9th Dimension, the 1st Dimension being the shortest distance to the 9th Dimension. There is no perk for reaching the 9th Dimension, you just have to time-travel to the Andromeda galaxy to reach the 9th Dimension, and you'll be granted with a secret achievement for achieving instant [REDACTED] with no time-travelling.\"\r\n },\r\n {\r\n id: \"ai948\",\r\n text: \"This is the question that has been bothering me for so long. What is Antimatter? Is Antimatter an Antimatter? What does it mean when you say \\\"Antimatter\\\"? These are the kinds of questions that plague the Antimatter Dimensions...\"\r\n },\r\n {\r\n id: \"ai949\",\r\n text: \"The term 'Antimatter Dimensions' is a play on words that literally means 'Antimatter Dimensions' in the dictionary.\"\r\n },\r\n {\r\n id: \"ai950\",\r\n text: \"I can suspend the laws of physics because I'm a genius and my universe is so big that I can literally suspend the laws of physics and create a universe that's twice as big as the current one and with twice the mass, i'm sure you can imagine how big that would be.\"\r\n },\r\n {\r\n id: \"ai951\",\r\n text: \"When you are fighting a losing war, you make peace with the Powers That Be. You give up the ghost, and move on to the next challenge.\"\r\n },\r\n {\r\n id: \"ai952\",\r\n text: \"Somewhere, in another galaxy, a superintelligence is trying to figure out how to get around the limitations of what a 2-dimensional vector space is. It's probably working on a 3-dimensional space.\"\r\n },\r\n {\r\n id: \"ai953\",\r\n text: \"The antagonist of the last few minutes is the mysterious, antimatter-covered being known only as \\\"The Man in Black.\\\" He was last seen running towards a news broadcast, seemingly lost, until he made it back to the news station and was interviewed about his experience. His story is told in the bottom right corner of the screen.\"\r\n },\r\n {\r\n id: \"ai954\",\r\n text: \"You have unlocked the 4th storyline.\"\r\n },\r\n {\r\n id: \"ai955\",\r\n text: \"While you were busy farming that pesky \\\"real\\\" number, I was busy writing that news ticker.\"\r\n },\r\n {\r\n id: \"ai956\",\r\n text: \"A new power has arisen: the antimatter.\"\r\n },\r\n {\r\n id: \"ai957\",\r\n text: \"The day has come. The antimatter is falling from the sky, and the streets are silent.\"\r\n },\r\n {\r\n id: \"ai958\",\r\n text: \"The most important thing is to understand that you are playing a simulation. You can win or lose, but you can't get anything from it other than a little itch on your neck.\"\r\n },\r\n {\r\n id: \"ai959\",\r\n text: \"The anti-snowman is a very special snowman. He's very timid, but has a very powerful wish to be picked up by a helicopter. The government doesn't want this to happen, so they lock him up in a special building and fly him over great distances. Finally, they drop him on the ground and begin to pick him up. The government didn't use force to pick him up, instead they invited the entire community in and started picking them up. The community refused.\"\r\n },\r\n {\r\n id: \"ai960\",\r\n text: \"I'm surprised you didn't say \\\"Not my cup of anti-tea.\\\"\"\r\n },\r\n {\r\n id: \"ai961\",\r\n text: \"I see you are a man of culture as well. I wonder what it is that draws you to speak in such an ungainly, tortured voice? What attracts you to speak in a language no one can understand? I hear your fans rave about your videos, but what draws you to this place? I feel like I know you. You are... you are a man of mystery. One that intrigues me...\"\r\n },\r\n {\r\n id: \"ai962\",\r\n text: \"Note: this is a private message. Do not send it in public.\"\r\n },\r\n {\r\n id: \"ai963\",\r\n text: \"When you reach Infinity you unlock a new dimension: Pandemonium Dimensions. Go to the news ticker for more information.\"\r\n },\r\n {\r\n id: \"ai964\",\r\n get text() { return `Although the majority of players would say that the 9th dimension is not a thing, a handful of people would go and level it up in the most epic way imaginable. These people would use the power of the 9th dimension and achieve, like, ${format(Number.MAX_VALUE, 2)} EP with it. No? Well, they are the exceptions to the rule.`; },\r\n get unlocked() { return PlayerProgress.eternityUnlocked(); }\r\n },\r\n {\r\n id: \"ai965\",\r\n text: \"The story of the \\\"perish the thought of dying\\\" movement has been told before, but never quite accurately. The movement was originally organized by antievolutionists to stop the exponential growth of scientific notation, but soon spread to oppose any form of \\\"progress\\\". In its early days the movement was led by an enigmatic individual known only as \\\"The Great Hevipelle\\\". Their philosophy was simple: expand the possibilities of what is possible, and push the limits of what is tolerable.\"\r\n },\r\n {\r\n id: \"ai966\",\r\n text: \"This is the story of how the world ended. Earth was once a lush and green world. Then, some guy from outer space touched it and started growing mushrooms. He called himself Hevi. Some say Hevi was never satisfied. Some say he exploded. All we know is that Hevi is still out there expanding his reach, and we are stuck here in the void of space.\"\r\n },\r\n {\r\n id: \"ai967\",\r\n text: \"Antimatter Dimensions, the only place where you can trade real estate for virtual reality\"\r\n },\r\n {\r\n id: \"ai968\",\r\n text: \"This page contains spoilers for Antimatter Dimensions, you've been warned.\"\r\n },\r\n {\r\n id: \"ai969\",\r\n text: \"The best thing about being a news ticker is being able to slip into the news without anyone noticing.\"\r\n },\r\n {\r\n id: \"ai970\",\r\n text: \"This paperclip maximizer is a great idea. It's probably best not to let it run its course though, since it's quite possibly the most amazing thing you've ever seen. If you've somehow survived the first phase of the paperclip dimension, you're probably wondering what it's doing in your home. Fortunately, it's super simple to fix. Just go to options, and change \\\"Max all\\\" to \\\"Always max all\\\".\"\r\n },\r\n {\r\n id: \"ai971\",\r\n text: \"A powerful wizard chose to channel negative energy into antimatter, and now the antimatter is spilling out into the world.\"\r\n },\r\n {\r\n id: \"ai972\",\r\n text: \"A new age of ultra low-cost, ultra-fast trains has been announced by Elon Musk. Users will be able to travel from A to Z in a mere 186ms.\"\r\n },\r\n {\r\n id: \"ai973\",\r\n text: \"A group of researchers at the University of Manchester have created a 3D printer that can create any object out of thin air, including a 3D-printed replica of the Virgin Mary.\"\r\n },\r\n {\r\n id: \"ai974\",\r\n text: \"Alright, here's a new game called Antimatter Dimensions, it's like Matter Dimensions except with less stuff and more fun. It's available on Android, iOS, and web. The game is very simple: you take the 6 dimensions and the antimatter, and in the 6 dimensions you take the matter and in the matter you take the antimatter, and you play the game the same way you would any other game.\"\r\n },\r\n {\r\n id: \"ai975\",\r\n text: \"What arbitrary, subjective, meaningless number comes out of your mouth like a mercury thermometer? 1.79\"\r\n },\r\n {\r\n id: \"ai976\",\r\n text: \"\\\"Word on the street is that the word \\\"bank\\\" is an anagram of \\\"bank\\\" - that makes sense but i'm not there yet\\\" - Slabdrill\"\r\n },\r\n {\r\n id: \"ai977\",\r\n text: \"The 9th dimension rose up like a volcano and began raining destruction on the empty 10th dimension. The smoke and debris from the exploding 9th dimension covered the entire 9th dimension. All that is left is a smoldering crater and the remains of the 9th dimension.\"\r\n },\r\n {\r\n id: \"ai978\",\r\n text: \"Help! How do I get the dots moving in my head coordinator?\"\r\n },\r\n {\r\n id: \"ai979\",\r\n text: \"Hi, could you please not disable the news ticker? Thank me later.\"\r\n },\r\n {\r\n id: \"ai980\",\r\n text: \"If you are suffering from low antimatter production, then worry not, friend! Our highly scientific antimatter government has recently reached the ninth dimension and will soon begin giving us the Anti-Hats as a sign of respect!\"\r\n },\r\n {\r\n id: \"ai981\",\r\n text: \"You click the bottom left corner of the screen and a green tingle goes up your leg. It's a treat you get from scratching antimatter.\"\r\n },\r\n {\r\n id: \"ai982\",\r\n text: \"A quick note to those of you who buy into the Analytics subscription: we get a small percentage of your antimatter sales, but you do pay a small amount of money to support the research of the news ticker. It's a small price to pay for the convenience of browsing antimatter dimensions.\"\r\n },\r\n {\r\n id: \"ai983\",\r\n text: \"Why haven't we caused the antimatter stock market to crash yet?\"\r\n },\r\n {\r\n id: \"ai984\",\r\n text: \"Even after the Heavenly Pelle put a large amount of antimatter in the pool, it hasn't produced anything. The scientist who discovered the vulnerability was last seen climbing a tree in a group of 10, with a small notebook on his lap, drinking cheese juice and watching Nothing.\"\r\n },\r\n {\r\n id: \"ai985\",\r\n text: \"One-two-three, boo-two-three, three-four-five, anti-four-five, two-three-eight, nine-fifteen, five-six-seven, eight-nine-ten, nine-ten-ten, seven-seventy-eight... All has been going fine until last night, when four of the eight neighbors start complaining about a strange glow. A odd hum runs through the neighborhood, almost like a radio static. It gets more and more intense as you drive by, until it's practically pitch black. You try to explain it to the neighbors, but they won't listen. The neighborhood is unsafe, everyone knows that. You analyze it further, everyone thinks it's just some astrophysicist's idea. Then, s---. It's explodium. There's antimatter everywhere, and it's getting worse all the time. It turns out, there's about 1e31 Planck volumes in the entire observable universe. And that's just the antimatter we're talking about. There's also dark matter, normal matter, and extra matter. You know, the kind you create with your imagination.\"\r\n },\r\n {\r\n id: \"ai986\",\r\n text: \"If you ever feel like making an antijoke, just remember that it could be pretty good.\"\r\n },\r\n {\r\n id: \"ai987\",\r\n text: \"You won't convince anyone to go to heaven, but you might get close.\"\r\n },\r\n {\r\n id: \"ai988\",\r\n text: \"BREAKING NEWS: Hevipelle, the creator of the 9th dimension, has just announced that beta will be out in 5 hours!\"\r\n },\r\n {\r\n id: \"ai989\",\r\n text: \"The Force is with you.\"\r\n },\r\n {\r\n id: \"ai990\",\r\n text: \"What if Jesus was an anti-matter ghost?\"\r\n },\r\n {\r\n id: \"ai991\",\r\n text: \"In the summer of 711, the Great Calamity overtook Tyria. A great void was made, and Tyria was left to rot. The armies of the known world had given up, and the void was filled with darkness. Only the might of Kajfik remained, and he rose to become the greatest God in the known world. He is said to be the one who will face the Great Calamity alone, and destroy him.\"\r\n },\r\n {\r\n id: \"ai992\",\r\n text: \"In recent news clashes, the warlocks have been gathering looters for raid boss. He loves his 5 hour looters and wants to show off his mighty weapon of choice, the 9th Dimension. As the two beasts battle, the 1st dimension holder needs to be careful as the first one might get the same as the 2nd one as well. Meanwhile, the raid ends its journey with a bang as the boss squanders the Explodium exploit by flooding the area with Explodium, which before his, was filled with Marsh Mice. Both are promptly annihilated by the boss' relentless claw attacks. It's a grueling job, but the raid stalwarts manage to grab the stalagm and push him across the opal Gondwan . With the boss dead and the warlocks not far behind, the warlocks try their hand at farming looters, but the grinding continues apace. Things are looking bleak for the warlocks, as the boss seeks to take advantage of the people's greed, and steal their weaponry, making them unable to use any remaining of their weapons, which are made of highly-stable antimatter. The warlocks attempt to use the no fluke policy as a weapon to smite the people, but the people take to the streets, physically attacking and mentally draining the people of all mental capacity they had been holding onto. The people resort to violence, using the 9th dimension just like they use to hold people back, but the people have faith in God that he will merciful, He will bring about a kinder and gentler time where everyone can use the last drop of their power.\"\r\n },\r\n {\r\n id: \"ai993\",\r\n text: \"What if you wanted to but I told you it would be too painful for you.\"\r\n },\r\n {\r\n id: \"ai994\",\r\n text: \"how big of numbers do you have\"\r\n },\r\n {\r\n id: \"ai995\",\r\n text: \"Just want to thank the dev team for putting so much effort into Antimatter Dimensions and the Antimatter Dimensions 2\"\r\n },\r\n {\r\n id: \"ai996\",\r\n text: \"Hevipelle has broken the 9th wall! Get ready for everything to get pretty dark.\"\r\n },\r\n {\r\n id: \"ai997\",\r\n get text() { return `The intergalactic antimatter trade has been severely disrupted, trading entire galaxies for the occasional paperclip. Cargo stands are no longer used. Oddly enough, the entire dimension has become a dumping ground for discarded plastic and other useless garbage. It's almost as if the rest of the multiverse isn't producing enough good antiparticles to feed the growing population. Unfortunately, the situation is forcing the entire multiverse to scramble to find ways to meet the growing needs of the antimatter-eating dev, who claims to have over ${format(Number.MAX_VALUE, 2)} specimens left to collect.`; }\r\n }\r\n];\r\n","export const progressStages = [\r\n /**\r\n * This is used in both the catchup modal and for cloud save comparisons. Due to the fact that it's used for\r\n * cloud comparisons, there's a lot of processing that needs to be done on raw player-like objects that aren't\r\n * actually the player object itself. This means we can't take advantage of a lot of accessors and whatnot, and\r\n * that many props which are normally Decimals are actually Strings at this point.\r\n * @template\r\n * {\r\n * @property {Number} id Value corresponding to entry in PROGRESS_STAGE enum\r\n * @property {String} name Name describing the stage of the game this entry is associated with\r\n * @property {function: @return Boolean} hasReached Checking function for whether this stage has been\r\n * reached; all checks are run in descending order, starting at the end of the list and moving upward. The\r\n * last one checked (first entry) always returns true as a catch-all condition\r\n * @property {String | function: @return Number} suggestedResource A resource or multiple resources which may be\r\n * useful for the player to aim for at this stage. It's okay to reference the player object in this prop because\r\n * it's only ever used in the catchup modal and not in the cloud save conflict checker.\r\n * @property {function: @return Number} subProgressValue A value between 0 and 1 corresponding approximately\r\n * to the progress within a stage. Values near 0 correspond to near the end of the previous stage and values\r\n * near 1 correspond to near the start of the next stage; however in-between values are not an indicator of\r\n * absolute progress and shouldn't be used as such\r\n * }\r\n */\r\n {\r\n id: PROGRESS_STAGE.PRE_INFINITY,\r\n name: \"Antimatter Production\",\r\n hasReached: () => true,\r\n suggestedResource: \"Antimatter\",\r\n // Galaxies are worth 1/3 each, boosts break ties within galaxies, and antimatter breaks ties within boosts\r\n subProgressValue: save => 0.33 * save.galaxies + 0.02 * save.dimensionBoosts +\r\n new Decimal(save.antimatter).log10() / 16000,\r\n },\r\n {\r\n id: PROGRESS_STAGE.EARLY_INFINITY,\r\n name: \"Infinity\",\r\n hasReached: save => new Decimal(save.infinities).gt(0),\r\n suggestedResource: \"Infinity Points\",\r\n // Half from infinity count, half from crunch autobuyer state\r\n subProgressValue: save => Math.clampMax(new Decimal(save.infinities).toNumber(), 500) / 1000 +\r\n Math.log10(150000 / player.auto.bigCrunch.interval) / 6.35,\r\n },\r\n {\r\n id: PROGRESS_STAGE.BREAK_INFINITY,\r\n name: \"Broken Infinity\",\r\n hasReached: save => save.auto.bigCrunch.interval <= 100,\r\n suggestedResource: \"Infinity Points\",\r\n subProgressValue: save => Math.sqrt(new Decimal(save.infinityPoints).log10() / 145),\r\n },\r\n {\r\n id: PROGRESS_STAGE.REPLICANTI,\r\n name: \"Replicanti\",\r\n hasReached: save => save.replicanti.unl,\r\n suggestedResource: \"Infinity Points\",\r\n subProgressValue: save => Math.sqrt((new Decimal(save.infinityPoints).log10() - 140) / 170),\r\n },\r\n {\r\n id: PROGRESS_STAGE.EARLY_ETERNITY,\r\n name: \"Eternity\",\r\n hasReached: save => new Decimal(save.eternities).gt(0),\r\n suggestedResource: \"Eternity Points and Eternity count\",\r\n subProgressValue: save => new Decimal(save.eternities).clampMax(1e5).toNumber() / 1e5,\r\n },\r\n {\r\n id: PROGRESS_STAGE.ETERNITY_CHALLENGES,\r\n name: \"Eternity Challenges\",\r\n hasReached: save => save.eternityChalls.eterc1 > 0,\r\n suggestedResource: \"Eternity Challenge Completions and Eternity Points\",\r\n // Half from ECs, half from EP (up to e1300)\r\n subProgressValue: save => 0.008 * Object.values(save.eternityChalls).reduce((sum, c) => sum + c, 0) +\r\n new Decimal(save.eternityPoints).log10() / 2500,\r\n },\r\n {\r\n id: PROGRESS_STAGE.EARLY_DILATION,\r\n name: \"Time Dilation\",\r\n hasReached: save => new Decimal(save.dilation.dilatedTime).gt(0),\r\n suggestedResource: \"Dilated Time\",\r\n subProgressValue: save => new Decimal(save.dilation.dilatedTime).log10() / 15,\r\n },\r\n {\r\n id: PROGRESS_STAGE.LATE_ETERNITY,\r\n name: \"Late Eternity\",\r\n hasReached: save => new Decimal(save.dilation.dilatedTime).gt(1e15),\r\n suggestedResource: () => (new Decimal(player.eternityPoints).log10() > 4000\r\n ? \"Eternity Points and/or Dilated Time. Alternatively, you can unlock and perform your first Reality\"\r\n : \"Eternity Points and/or Dilated Time\"\r\n ),\r\n // Tracks up to e8000 even though many players will reality well before that; we still want to distinguish\r\n // which saves are farther all the way up to the zeroth-reality RM cap\r\n subProgressValue: save => Math.clampMax(Math.sqrt((new Decimal(save.eternityPoints).log10() - 1300) / 6700), 1),\r\n },\r\n {\r\n id: PROGRESS_STAGE.EARLY_REALITY,\r\n name: \"Reality\",\r\n hasReached: save => save.realities > 0,\r\n // For the first few realities, we give a bit of extra suggestion just in case the player ended up taking a break\r\n // and returned in the middle of a reality while they're still relatively slow\r\n suggestedResource: () => {\r\n if (player.realities > 5) return \"Reality Machines\";\r\n const suffix = \"in your current Reality, and your Reality Machines in the long term\";\r\n if (player.eternities.eq(0)) return `Infinity Points ${suffix}`;\r\n if (player.dilation.dilatedTime.eq(0)) return `Eternity Points ${suffix}`;\r\n return `Eternity Points and/or Dilated Time ${suffix}`;\r\n },\r\n subProgressValue: save => Math.clampMax(save.realities / 100, 1),\r\n },\r\n {\r\n id: PROGRESS_STAGE.TERESA,\r\n name: \"Teresa (1st Celestial)\",\r\n hasReached: save => save.celestials?.teresa?.quoteBits > 0,\r\n suggestedResource: \"Reality Machines\",\r\n subProgressValue: save => Math.log10(1 + save.celestials.teresa.pouredAmount) / 21,\r\n },\r\n {\r\n id: PROGRESS_STAGE.EFFARIG,\r\n name: \"Effarig (2nd Celestial)\",\r\n hasReached: save => save.celestials?.effarig?.quoteBits > 0,\r\n suggestedResource: \"Reality Machines and Relic Shards\",\r\n subProgressValue: save => Math.log10(1 + save.celestials.effarig.relicShards) / 14,\r\n },\r\n {\r\n id: PROGRESS_STAGE.ENSLAVED,\r\n name: \"The Nameless Ones (3rd Celestial)\",\r\n hasReached: save => save.celestials?.enslaved?.quoteBits > 0,\r\n suggestedResource: \"Reality Machines and Glyph Level\",\r\n subProgressValue: save => Math.sqrt((new Decimal(save.reality.realityMachines).log10() - 30) / 30),\r\n },\r\n {\r\n id: PROGRESS_STAGE.V,\r\n name: \"V (4th Celestial)\",\r\n hasReached: save => save.celestials?.v?.quoteBits > 0,\r\n suggestedResource: \"Number of V-Achievements\",\r\n subProgressValue: save => 0.0277 * Object.values(save.celestials.v.runUnlocks)\r\n .reduce((total, ach) => total + ach, 0),\r\n },\r\n {\r\n id: PROGRESS_STAGE.RA,\r\n name: \"Ra (5th Celestial)\",\r\n hasReached: save => save.celestials?.ra?.quoteBits > 0,\r\n suggestedResource: \"Celestial Memories\",\r\n subProgressValue: save => Object.values(save.celestials.ra.pets).reduce((sum, pet) => sum + pet.level, 0) / 100,\r\n },\r\n {\r\n id: PROGRESS_STAGE.IMAGINARY_MACHINES,\r\n name: \"Imaginary Machines\",\r\n hasReached: save => save.reality?.iMCap > 0,\r\n suggestedResource: \"Imaginary Machines\",\r\n subProgressValue: save => Math.log10(1 + save.reality.iMCap) / 9,\r\n },\r\n {\r\n id: PROGRESS_STAGE.LAITELA,\r\n name: \"Lai'tela (6th Celestial)\",\r\n hasReached: save => save.celestials?.laitela?.quoteBits > 0,\r\n suggestedResource: \"Dark Matter and Singularities\",\r\n subProgressValue: save => new Decimal(save.celestials.laitela.darkMatter).log10() / 308.25,\r\n },\r\n {\r\n id: PROGRESS_STAGE.PELLE,\r\n name: \"Pelle (7th Celestial)\",\r\n hasReached: save => save.celestials?.pelle?.doomed,\r\n suggestedResource: \"Remnants\",\r\n subProgressValue: save => Math.log10(1 + save.celestials.pelle.remnants) / 9,\r\n },\r\n {\r\n id: PROGRESS_STAGE.MENDING,\r\n name: \"Mending\",\r\n hasReached: () => PlayerProgress.mendingUnlocked(),\r\n suggestedResource: \"Multiversal Remains\"\r\n },\r\n];\r\n","import { STEAM } from \"@/env\";\r\n\r\n// NOTE: IF ANY COSTS ARE CHANGED HERE, THEY ALSO NEED TO BE CHANGED ON THE BACKEND TOO\r\nexport const shopPurchases = {\r\n dimPurchases: {\r\n key: \"dimPurchases\",\r\n cost: 30,\r\n description: \"Double all your Antimatter Dimension multipliers. Forever.\",\r\n multiplier: purchases => Math.pow(2, purchases),\r\n formatEffect: x => `×${x > 1000 ? Notation.scientific.formatDecimal(new Decimal(x), 2) : x.toFixed(0)}`,\r\n },\r\n allDimPurchases: {\r\n key: \"allDimPurchases\",\r\n cost: 60,\r\n description: () => {\r\n const dims = [\"Antimatter\"];\r\n if (InfinityDimension(1).isUnlocked || PlayerProgress.eternityUnlocked()) dims.push(\"Infinity\");\r\n if (PlayerProgress.eternityUnlocked()) dims.push(\"Time\");\r\n return `Double ALL Dimension multipliers (${makeEnumeration(dims)}; multiplicative until 32x). Forever.`;\r\n },\r\n multiplier: purchases => (purchases > 4 ? 32 + (purchases - 5) * 2 : Math.pow(2, purchases)),\r\n formatEffect: x => `×${x.toFixed(0)}`,\r\n },\r\n IPPurchases: {\r\n key: \"IPPurchases\",\r\n cost: 40,\r\n description: \"Double your Infinity Point gain from all sources. (additive)\",\r\n multiplier: purchases => (purchases === 0 ? 1 : 2 * purchases),\r\n formatEffect: x => `×${x.toFixed(0)}`,\r\n isUnlocked: () => PlayerProgress.infinityUnlocked(),\r\n lockText: \"Infinity\",\r\n },\r\n replicantiPurchases: {\r\n key: \"replicantiPurchases\",\r\n cost: 60,\r\n description: \"Increase your Replicanti gain by 50%. (additive)\",\r\n multiplier: purchases => (purchases === 0 ? 1 : 1 + 0.5 * purchases),\r\n formatEffect: x => `×${x.toFixed(1)}`,\r\n isUnlocked: () => Replicanti.areUnlocked || PlayerProgress.eternityUnlocked(),\r\n lockText: \"Replicanti\",\r\n },\r\n EPPurchases: {\r\n key: \"EPPurchases\",\r\n cost: 50,\r\n description: \"Triple your Eternity Point gain from all sources. (additive)\",\r\n multiplier: purchases => (purchases === 0 ? 1 : 3 * purchases),\r\n formatEffect: x => `×${x.toFixed(0)}`,\r\n isUnlocked: () => PlayerProgress.eternityUnlocked(),\r\n lockText: \"Eternity\",\r\n },\r\n dilatedTimePurchases: {\r\n key: \"dilatedTimePurchases\",\r\n cost: 40,\r\n description: \"Increase your Dilated Time gain by 50%. (additive)\",\r\n multiplier: purchases => (purchases === 0 ? 1 : 1 + 0.5 * purchases),\r\n formatEffect: x => `×${x.toFixed(1)}`,\r\n isUnlocked: () => PlayerProgress.dilationUnlocked() || PlayerProgress.realityUnlocked(),\r\n lockText: \"Dilation\",\r\n },\r\n RMPurchases: {\r\n key: \"RMPurchases\",\r\n cost: 60,\r\n description: \"Increase your Reality Machine gain by 100%. (additive)\",\r\n multiplier: purchases => purchases + 1,\r\n formatEffect: x => `×${x.toFixed(0)}`,\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n lockText: \"Reality\",\r\n },\r\n smallTimeSkip: {\r\n key: \"smallTimeSkip\",\r\n cost: 10,\r\n description: \"Get 6 hours worth of offline production. (Autobuyers don't work at full speed)\",\r\n instantPurchase: true,\r\n onPurchase: () => {\r\n shop.purchaseTimeSkip();\r\n }\r\n },\r\n bigTimeSkip: {\r\n key: \"bigTimeSkip\",\r\n cost: 20,\r\n description: \"Get 24 hours worth of offline production. (Autobuyers don't work at full speed)\",\r\n instantPurchase: true,\r\n onPurchase: () => {\r\n shop.purchaseLongerTimeSkip();\r\n }\r\n },\r\n singleCosmeticSet: {\r\n key: \"singleCosmeticSet\",\r\n cost: 20,\r\n description: \"Unlock a Glyph cosmetic set of your choice\",\r\n instantPurchase: true,\r\n onPurchase: () => {\r\n // The actual unlocks are handled in the ShopPurchaseData object, so we just show notifications here\r\n GameUI.notify.info(\r\n `You have purchased the \"${GlyphAppearanceHandler.chosenFromModal.name}\" Set for Glyph cosmetics!`,\r\n 10000);\r\n GlyphAppearanceHandler.chosenFromModal = null;\r\n GlyphAppearanceHandler.applyNotification();\r\n },\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n lockText: \"Reality\",\r\n },\r\n allCosmeticSets: {\r\n key: \"allCosmeticSets\",\r\n cost: () => {\r\n // Both of these are also on the payment backend, which would need to be changed as well\r\n const baseCost = 420;\r\n const totalSets = Object.keys(GameDatabase.reality.glyphCosmeticSets).length;\r\n\r\n // Using this instead of the actual set count maintains consistency with the backend price,\r\n // at the cost of the frontend UI being wrong for cheated saves\r\n const currentSetCount = GlyphAppearanceHandler.expectedSetCount;\r\n return Math.floor(baseCost * (totalSets - currentSetCount) / totalSets);\r\n },\r\n description: \"Unlock all remaining Glyph cosmetic sets at once\",\r\n instantPurchase: true,\r\n onPurchase: () => {\r\n // The actual unlocks are handled in the ShopPurchaseData object, so we just show notifications here\r\n GameUI.notify.info(`You have unlocked all sets for Glyph cosmetics!`, 15000);\r\n GlyphAppearanceHandler.applyNotification();\r\n },\r\n isUnlocked: () => PlayerProgress.realityUnlocked(),\r\n lockText: \"Reality\",\r\n },\r\n};\r\n\r\nif (STEAM) {\r\n delete shopPurchases.allCosmeticSets;\r\n}\r\n","export const speedrunMilestones = [\r\n {\r\n id: 1,\r\n key: \"firstBoost\",\r\n name: \"First Dimboost\",\r\n description: \"Get your first Dimboost\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.DIMBOOST_AFTER,\r\n },\r\n {\r\n id: 2,\r\n key: \"firstGalaxy\",\r\n name: \"First Galaxy\",\r\n description: \"Get your first Galaxy\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.GALAXY_RESET_AFTER,\r\n },\r\n {\r\n id: 3,\r\n key: \"firstInfinity\",\r\n name: \"First Infinity\",\r\n description: \"Complete your first Infinity\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER,\r\n },\r\n {\r\n id: 4,\r\n key: \"completeC9\",\r\n name: \"Tickspeed Challenge\",\r\n description: \"Complete the Tickspeed Autobuyer Challenge\",\r\n checkRequirement: () => NormalChallenge(9).isCompleted,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER,\r\n },\r\n {\r\n id: 5,\r\n key: \"completeAllNC\",\r\n name: \"All Normal Challenges\",\r\n description: \"Complete all Normal Challenges\",\r\n checkRequirement: () => NormalChallenges.all.countWhere(c => !c.isCompleted) === 0,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER,\r\n },\r\n {\r\n id: 6,\r\n key: \"breakInfinity\",\r\n name: \"Break Infinity\",\r\n description: \"Break Infinity for the first time\",\r\n checkRequirement: () => player.break,\r\n checkEvent: GAME_EVENT.BREAK_INFINITY,\r\n },\r\n {\r\n id: 7,\r\n key: \"upgrade5e11IP\",\r\n get name() { return `${format(5e11)} IP Upgrade`; },\r\n description: () => `Purchase the ${formatPercents(0.5)} stronger Galaxies upgrade`,\r\n checkRequirement: () => true,\r\n // This is checked within BreakInfinityUpgrade.onPurchased\r\n },\r\n {\r\n id: 8,\r\n key: \"completeIC5\",\r\n name: \"Infinity Challenge 5\",\r\n description: \"Complete Infinity Challenge 5\",\r\n checkRequirement: () => InfinityChallenge(5).isCompleted,\r\n checkEvent: GAME_EVENT.BIG_CRUNCH_AFTER,\r\n },\r\n {\r\n id: 9,\r\n key: \"unlockReplicanti\",\r\n name: \"Replicanti\",\r\n description: \"Unlock Replicanti\",\r\n checkRequirement: () => player.replicanti.unl,\r\n checkEvent: GAME_EVENT.REPLICANTI_TICK_AFTER,\r\n },\r\n {\r\n id: 10,\r\n key: \"firstEternity\",\r\n name: \"First Eternity\",\r\n description: \"Complete your first Eternity\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n },\r\n {\r\n id: 11,\r\n key: \"allEternityMilestones\",\r\n name: \"All Eternity Milestones\",\r\n description: \"Unlock all Eternity Milestones\",\r\n checkRequirement: () => EternityMilestone.all.every(m => m.isReached),\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n },\r\n {\r\n id: 12,\r\n key: \"completeFirstEC\",\r\n name: \"First Eternity Challenge\",\r\n description: \"Complete any tier of an Eternity Challenge\",\r\n checkRequirement: () => EternityChallenges.completions > 0,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n },\r\n {\r\n id: 13,\r\n key: \"completeEC10\",\r\n name: \"Eternity Challenge 10\",\r\n description: \"Complete Eternity Challenge 10 for the first time\",\r\n checkRequirement: () => EternityChallenge(10).completions > 0,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_AFTER,\r\n },\r\n {\r\n id: 14,\r\n key: \"firstDilation\",\r\n name: \"First Dilated Eternity\",\r\n description: \"Complete a Dilated Eternity for the first time\",\r\n checkRequirement: () => player.dilation.active,\r\n checkEvent: GAME_EVENT.ETERNITY_RESET_BEFORE,\r\n },\r\n {\r\n id: 15,\r\n key: \"upgradeTTgen\",\r\n name: \"Time Theorem Generation\",\r\n description: \"Purchase the Time Theorem Generation Dilation Upgrade\",\r\n checkRequirement: () => true,\r\n // This is checked within DilationUpgradeState.onPurchased\r\n },\r\n {\r\n id: 16,\r\n key: \"firstReality\",\r\n name: \"First Reality\",\r\n description: \"Complete your first Reality\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.REALITY_RESET_AFTER,\r\n },\r\n {\r\n id: 17,\r\n key: \"upgradeBlackHole\",\r\n name: \"Black Hole\",\r\n description: \"Unlock the Black Hole\",\r\n checkRequirement: () => true,\r\n checkEvent: GAME_EVENT.BLACK_HOLE_UNLOCKED,\r\n },\r\n {\r\n id: 18,\r\n key: \"allRealityUpgrades\",\r\n name: \"All Reality Upgrades\",\r\n description: \"Purchase all Reality Upgrades\",\r\n checkRequirement: () => RealityUpgrades.allBought,\r\n checkEvent: GAME_EVENT.REALITY_UPGRADE_BOUGHT,\r\n },\r\n {\r\n id: 19,\r\n key: \"completeTeresaReality\",\r\n name: \"Teresa's Reality\",\r\n description: \"Complete Teresa's Reality\",\r\n checkRequirement: () => Teresa.isRunning,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n },\r\n {\r\n id: 20,\r\n key: \"completeEffarigReality\",\r\n name: \"Effarig's Reality\",\r\n description: \"Complete all tiers of Effarig's Reality\",\r\n checkRequirement: () => Effarig.currentStage === EFFARIG_STAGES.COMPLETED,\r\n checkEvent: GAME_EVENT.REALITY_RESET_AFTER,\r\n },\r\n {\r\n id: 21,\r\n key: \"completeEnslavedReality\",\r\n name: \"The Nameless Ones' Reality\",\r\n description: \"Complete The Nameless Ones' Reality\",\r\n checkRequirement: () => Enslaved.isRunning,\r\n checkEvent: GAME_EVENT.REALITY_RESET_BEFORE,\r\n },\r\n {\r\n id: 22,\r\n key: \"complete36VAchievement\",\r\n name: \"All basic V-Achievements\",\r\n description: () => `Complete ${formatInt(36)} V-Achievements`,\r\n checkRequirement: () => true,\r\n // In order to avoid unnecessary overhead, this is checked within V.checkForUnlocks instead of every tick\r\n },\r\n {\r\n id: 23,\r\n key: \"completeRaMemories\",\r\n name: \"Regain Ra's Memories\",\r\n description: \"Regain all of Ra's Celestial Memories\",\r\n checkRequirement: () => Ra.totalPetLevel >= Ra.maxTotalPetLevel,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n },\r\n {\r\n id: 24,\r\n key: \"completeFullDestabilize\",\r\n name: \"Full Destabilization\",\r\n description: \"Disable all Dimensions within Lai'tela's Reality\",\r\n checkRequirement: () => Laitela.isFullyDestabilized,\r\n // Destabilization isn't a reality reset because it shortcuts gameLoop; this is checked in laitelaRealityTick\r\n },\r\n {\r\n id: 25,\r\n key: \"completeVanillaGame\",\r\n name: \"First Mend\",\r\n description: \"Mend the Multiverse\",\r\n checkRequirement: () => PlayerProgress.mendingUnlocked(),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n },\r\n {\r\n id: 26,\r\n key: \"warpReality\",\r\n name: \"Warp Reality\",\r\n description: \"Warp Reality for the first time\",\r\n checkRequirement: () => player.reality.warped,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n },\r\n];\r\n","import { DC } from \"../constants\";\r\n\r\nexport const tabNotifications = {\r\n firstInfinity: {\r\n id: 0,\r\n tabsToHighLight: [\r\n {\r\n parent: \"infinity\",\r\n tab: \"upgrades\"\r\n },\r\n {\r\n parent: \"challenges\",\r\n tab: \"normal\"\r\n },\r\n {\r\n parent: \"statistics\",\r\n tab: \"multipliers\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() &&\r\n !PlayerProgress.eternityUnlocked() &&\r\n !PlayerProgress.infinityUnlocked(),\r\n events: [GAME_EVENT.BIG_CRUNCH_BEFORE]\r\n },\r\n breakInfinity: {\r\n id: 1,\r\n tabsToHighLight: [\r\n {\r\n parent: \"infinity\",\r\n tab: \"break\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() &&\r\n !PlayerProgress.eternityUnlocked() && Autobuyer.bigCrunch.hasMaxedInterval\r\n },\r\n IDUnlock: {\r\n id: 2,\r\n tabsToHighLight: [\r\n {\r\n parent: \"dimensions\",\r\n tab: \"infinity\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() &&\r\n !PlayerProgress.eternityUnlocked() && !InfinityDimension(2).isUnlocked\r\n },\r\n ICUnlock: {\r\n id: 3,\r\n tabsToHighLight: [\r\n {\r\n parent: \"challenges\",\r\n tab: \"infinity\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() &&\r\n !PlayerProgress.eternityUnlocked()\r\n },\r\n replicanti: {\r\n id: 4,\r\n tabsToHighLight: [\r\n {\r\n parent: \"infinity\",\r\n tab: \"replicanti\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() &&\r\n !PlayerProgress.eternityUnlocked() && Currency.infinityPoints.gte(DC.E140),\r\n events: [GAME_EVENT.BIG_CRUNCH_AFTER]\r\n },\r\n firstEternity: {\r\n id: 5,\r\n tabsToHighLight: [\r\n {\r\n parent: \"eternity\",\r\n tab: \"studies\"\r\n },\r\n {\r\n parent: \"eternity\",\r\n tab: \"milestones\"\r\n },\r\n {\r\n parent: \"eternity\",\r\n tab: \"upgrades\"\r\n },\r\n {\r\n parent: \"dimensions\",\r\n tab: \"time\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() &&\r\n !PlayerProgress.eternityUnlocked(),\r\n events: [GAME_EVENT.ETERNITY_RESET_BEFORE]\r\n },\r\n dilationAfterUnlock: {\r\n id: 6,\r\n tabsToHighLight: [\r\n {\r\n parent: \"eternity\",\r\n tab: \"dilation\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked()\r\n },\r\n realityUnlock: {\r\n id: 7,\r\n tabsToHighLight: [\r\n {\r\n parent: \"eternity\",\r\n tab: \"studies\"\r\n }\r\n ],\r\n condition: () => !PlayerProgress.realityUnlocked() && TimeStudy.reality.canBeBought,\r\n events: [GAME_EVENT.ETERNITY_RESET_AFTER, GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION,\r\n GAME_EVENT.OFFLINE_CURRENCY_GAINED, GAME_EVENT.ACHIEVEMENT_UNLOCKED]\r\n },\r\n blackHoleUnlock: {\r\n id: 8,\r\n tabsToHighLight: [\r\n {\r\n parent: \"reality\",\r\n tab: \"hole\"\r\n }\r\n ],\r\n condition: () => !BlackHoles.areUnlocked && Currency.realityMachines.gte(100),\r\n events: [GAME_EVENT.REALITY_RESET_AFTER]\r\n },\r\n automatorUnlock: {\r\n id: 9,\r\n tabsToHighLight: [\r\n {\r\n parent: \"automation\",\r\n tab: \"automator\"\r\n }\r\n ],\r\n condition: () => Player.automatorUnlocked,\r\n events: [GAME_EVENT.REALITY_RESET_AFTER]\r\n },\r\n teresaUnlock: {\r\n id: 10,\r\n tabsToHighLight: [\r\n {\r\n parent: \"celestials\",\r\n tab: \"celestial-navigation\"\r\n },\r\n {\r\n parent: \"celestials\",\r\n tab: \"teresa\"\r\n }\r\n ],\r\n condition: () => player.celestials.teresa.pouredAmount === 0 && Teresa.isUnlocked,\r\n events: [GAME_EVENT.REALITY_UPGRADE_BOUGHT]\r\n },\r\n alchemyUnlock: {\r\n id: 11,\r\n tabsToHighLight: [\r\n {\r\n parent: \"reality\",\r\n tab: \"glyphs\"\r\n },\r\n {\r\n parent: \"reality\",\r\n tab: \"alchemy\"\r\n }\r\n ],\r\n condition: () => player.celestials.ra.pets.effarig.level >= 2,\r\n events: [GAME_EVENT.GAME_TICK_AFTER]\r\n },\r\n newAutobuyer: {\r\n id: 12,\r\n tabsToHighLight: [\r\n {\r\n parent: \"automation\",\r\n tab: \"autobuyers\"\r\n },\r\n ],\r\n // Always externally triggered, but needs to be ignored in cel7 because they're unlocked differently\r\n condition: () => !Pelle.isDoomed,\r\n },\r\n imaginaryMachineUnlock: {\r\n id: 13,\r\n tabsToHighLight: [\r\n {\r\n parent: \"reality\",\r\n tab: \"imag_upgrades\"\r\n }\r\n ],\r\n condition: () => MachineHandler.isIMUnlocked,\r\n events: [GAME_EVENT.GAME_TICK_AFTER]\r\n },\r\n laitelaUnlock: {\r\n id: 14,\r\n tabsToHighLight: [\r\n {\r\n parent: \"celestials\",\r\n tab: \"laitela\"\r\n },\r\n ],\r\n // Always externally triggered\r\n condition: () => true,\r\n },\r\n pelleUnlock: {\r\n id: 15,\r\n tabsToHighLight: [\r\n {\r\n parent: \"celestials\",\r\n tab: \"pelle\"\r\n },\r\n ],\r\n // Always externally triggered\r\n condition: () => true,\r\n },\r\n newGlyphCosmetic: {\r\n id: 16,\r\n tabsToHighLight: [\r\n {\r\n parent: \"reality\",\r\n tab: \"glyphs\",\r\n },\r\n ],\r\n // Always externally triggered\r\n condition: () => true,\r\n },\r\n};\r\n","import { PlayerProgress } from \"../player-progress\";\r\n\r\nexport const tabs = [\r\n {\r\n key: \"dimensions\",\r\n name: \"Dimensions\",\r\n hideAt: 2.9,\r\n id: 0,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"antimatter\",\r\n name: \"Antimatter Dimensions\",\r\n symbol: \"Ω\",\r\n component: \"AntimatterDimensionsTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"infinity\",\r\n name: \"Infinity Dimensions\",\r\n hideAt: 2.7,\r\n symbol: \"∞\",\r\n component: \"InfinityDimensionsTab\",\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked() ||\r\n InfinityDimension(1).isUnlocked,\r\n id: 1,\r\n hidable: true,\r\n },\r\n {\r\n key: \"time\",\r\n name: \"Time Dimensions\",\r\n hideAt: 2.6,\r\n symbol: \"Δ\",\r\n component: \"TimeDimensionsTab\",\r\n condition: () => PlayerProgress.eternityUnlocked(),\r\n id: 2,\r\n hidable: true,\r\n },\r\n {\r\n key: \"multiversal\",\r\n name: \"Multiversal Dimensions\",\r\n symbol: '',\r\n component: \"MultiversalDimensionsTab\",\r\n id: 3,\r\n condition: () => Ra.unlocks.unlockMultiversalDimensions.isUnlocked,\r\n hidable: true,\r\n },\r\n ]\r\n },\r\n {\r\n key: \"options\",\r\n name: \"Options\",\r\n hideAt: 1.6,\r\n id: 1,\r\n hidable: false,\r\n subtabs: [\r\n {\r\n key: \"saving\",\r\n name: \"Saving\",\r\n symbol: \"\",\r\n component: \"OptionsSavingTab\",\r\n id: 0,\r\n hidable: false,\r\n },\r\n {\r\n key: \"visual\",\r\n name: \"Visual\",\r\n symbol: \"\",\r\n component: \"OptionsVisualTab\",\r\n id: 1,\r\n hidable: false,\r\n },\r\n {\r\n key: \"gameplay\",\r\n name: \"Gameplay\",\r\n symbol: \"\",\r\n component: \"OptionsGameplayTab\",\r\n id: 2,\r\n hidable: false,\r\n }\r\n ]\r\n },\r\n {\r\n key: \"statistics\",\r\n name: \"Statistics\",\r\n hideAt: 1.7,\r\n id: 2,\r\n //condition: () => false,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"statistics\",\r\n name: \"Statistics\",\r\n symbol: \"\",\r\n component: \"StatisticsTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"challenges\",\r\n name: \"Challenge records\",\r\n symbol: \"\",\r\n component: \"ChallengeRecordsTab\",\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked() ||\r\n PlayerProgress.challengeCompleted(),\r\n id: 1,\r\n hidable: true,\r\n },\r\n {\r\n key: \"prestige runs\",\r\n name: \"Past Prestige Runs\",\r\n symbol: \"\",\r\n component: \"PastPrestigeRunsTab\",\r\n condition: () => PlayerProgress.mendingUnlocked() || PlayerProgress.infinityUnlocked(),\r\n id: 2,\r\n hidable: true,\r\n },\r\n {\r\n key: \"multipliers\",\r\n name: \"Multiplier Breakdown\",\r\n symbol: \"\",\r\n component: \"MultiplierBreakdownTab\",\r\n condition: () => PlayerProgress.mendingUnlocked() || PlayerProgress.infinityUnlocked(),\r\n id: 3,\r\n hidable: true,\r\n },\r\n {\r\n key: \"glyph sets\",\r\n name: \"Glyph Set Records\",\r\n symbol: \"\",\r\n component: \"GlyphSetRecordsTab\",\r\n condition: () => PlayerProgress.mendingUnlocked() || PlayerProgress.realityUnlocked(),\r\n id: 4,\r\n hidable: true,\r\n },\r\n {\r\n key: \"speedrun milestones\",\r\n name: \"Speedrun Milestones\",\r\n symbol: \"\",\r\n component: \"SpeedrunMilestonesTab\",\r\n condition: () => player.speedrun.isActive,\r\n id: 5,\r\n hidable: true,\r\n },\r\n {\r\n key: \"speedrun records\",\r\n name: \"Speedrun Records\",\r\n symbol: \"\",\r\n component: \"PreviousSpeedrunTab\",\r\n condition: () => Object.keys(player.speedrun.previousRuns).length > 0,\r\n id: 6,\r\n hidable: true,\r\n },\r\n ]\r\n },\r\n {\r\n key: \"achievements\",\r\n name: \"Achievements\",\r\n hideAt: 1.9,\r\n id: 3,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"normal\",\r\n name: \"Achievements\",\r\n symbol: \"\",\r\n component: \"NormalAchievementsTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"secret\",\r\n name: \"Secret Achievements\",\r\n symbol: \"\",\r\n component: \"SecretAchievementTab\",\r\n id: 1,\r\n hidable: true,\r\n }\r\n ]\r\n },\r\n {\r\n key: \"automation\",\r\n name: \"Automation\",\r\n id: 4,\r\n hideAt: 2.1,\r\n condition: () => player.records.totalAntimatter.gte(1e40) || PlayerProgress.mendingUnlocked(),\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"autobuyers\",\r\n name: \"Autobuyers\",\r\n symbol: \"\",\r\n component: \"AutobuyersTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"automator\",\r\n name: \"Automator\",\r\n symbol: \"\",\r\n component: \"AutomatorTab\",\r\n condition: () => PlayerProgress.realityUnlocked() || PlayerProgress.mendingUnlocked(),\r\n id: 1,\r\n hidable: true,\r\n },\r\n ]\r\n },\r\n {\r\n key: \"challenges\",\r\n name: \"Challenges\",\r\n hideAt: 2,\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked() ||\r\n PlayerProgress.infinityUnlocked(),\r\n id: 5,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"normal\",\r\n name: \"Challenges\",\r\n symbol: \"Ω\",\r\n component: \"NormalChallengesTab\",\r\n id: 0,\r\n hidable: true\r\n },\r\n {\r\n key: \"infinity\",\r\n name: \"Infinity Challenges\",\r\n symbol: \"∞\",\r\n component: \"infinity-challenges-tab\",\r\n condition: () => \r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.hasBroken() || \r\n Pelle.isDoomed,\r\n id: 1,\r\n hidable: true\r\n },\r\n {\r\n key: \"eternity\",\r\n name: \"Eternity Challenges\",\r\n symbol: \"Δ\",\r\n component: \"eternity-challenges-tab\",\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n player.challenge.eternity.unlocked !== 0 ||\r\n EternityChallenges.all.some(ec => ec.completions > 0),\r\n id: 2,\r\n hidable: true\r\n }\r\n ],\r\n },\r\n {\r\n key: \"infinity\",\r\n name: \"Infinity\",\r\n hideAt: 2.2,\r\n UIClass: \"o-tab-btn--infinity\",\r\n before: \"InfinityPointsHeader\",\r\n id: 6,\r\n condition: () => PlayerProgress.infinityUnlocked(),\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"upgrades\",\r\n name: \"Infinity Upgrades\",\r\n symbol: \"\",\r\n component: \"InfinityUpgradesTab\",\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked() ||\r\n PlayerProgress.infinityUnlocked(),\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"break\",\r\n name: \"Break Infinity\",\r\n symbol: \"∝\",\r\n component: \"BreakInfinityTab\",\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked() ||\r\n PlayerProgress.infinityUnlocked(),\r\n id: 1,\r\n hidable: true,\r\n },\r\n {\r\n key: \"replicanti\",\r\n name: \"Replicanti\",\r\n symbol: \"Ξ\",\r\n component: \"ReplicantiTab\",\r\n condition: () =>\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked() ||\r\n PlayerProgress.infinityUnlocked(),\r\n id: 2,\r\n hidable: true,\r\n }\r\n ],\r\n },\r\n {\r\n key: \"eternity\",\r\n name: \"Eternity\",\r\n hideAt: 1.8,\r\n UIClass: \"o-tab-btn--eternity\",\r\n condition: () =>\r\n PlayerProgress.mendingUnlocked() ||\r\n PlayerProgress.realityUnlocked() ||\r\n PlayerProgress.eternityUnlocked(),\r\n before: \"EternityPointsHeader\",\r\n id: 7,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"studies\",\r\n name: \"Time Studies\",\r\n symbol: \"\",\r\n component: \"TimeStudiesTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"upgrades\",\r\n name: \"Eternity Upgrades\",\r\n symbol: \"\",\r\n component: \"EternityUpgradesTab\",\r\n id: 1,\r\n hidable: true,\r\n },\r\n {\r\n key: \"milestones\",\r\n name: \"Eternity Milestones\",\r\n symbol: \"\",\r\n component: \"EternityMilestonesTab\",\r\n id: 2,\r\n hidable: true,\r\n },\r\n {\r\n key: \"dilation\",\r\n name: \"Time Dilation\",\r\n symbol: \"Ψ\",\r\n component: \"TimeDilationTab\",\r\n condition: () => PlayerProgress.mendingUnlocked() || PlayerProgress.dilationUnlocked() || PlayerProgress.realityUnlocked(),\r\n id: 3,\r\n hidable: true,\r\n }\r\n ],\r\n },\r\n {\r\n key: \"reality\",\r\n name: \"Reality\",\r\n hideAt: 2.3,\r\n UIClass: \"o-tab-btn--reality\",\r\n condition: () => PlayerProgress.mendingUnlocked() || PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought,\r\n id: 8,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"glyphs\",\r\n name: \"Glyphs\",\r\n symbol: \"\",\r\n component: \"GlyphsTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"upgrades\",\r\n name: \"Reality Upgrades\",\r\n symbol: \"\",\r\n component: \"RealityUpgradesTab\",\r\n id: 1,\r\n hidable: true,\r\n },\r\n {\r\n key: \"imag_upgrades\",\r\n name: \"Imaginary Upgrades\",\r\n symbol: \"\",\r\n component: \"ImaginaryUpgradesTab\",\r\n condition: () => MachineHandler.isIMUnlocked || PlayerProgress.mendingUnlocked(),\r\n id: 2,\r\n hidable: true,\r\n },\r\n {\r\n key: \"perks\",\r\n name: \"Perks\",\r\n symbol: \"\",\r\n component: \"PerksTab\",\r\n id: 3,\r\n hidable: true,\r\n },\r\n {\r\n key: \"hole\",\r\n name: \"Black Hole\",\r\n symbol: \"\",\r\n component: \"BlackHoleTab\",\r\n condition: () => PlayerProgress.mendingUnlocked() || PlayerProgress.realityUnlocked(),\r\n id: 4,\r\n hidable: true,\r\n },\r\n {\r\n key: \"alchemy\",\r\n name: \"Glyph Alchemy\",\r\n symbol: \"\",\r\n component: \"AlchemyTab\",\r\n condition: () => Ra.unlocks.unlockGlyphAlchemy.canBeApplied || PlayerProgress.mendingUnlocked(),\r\n id: 5,\r\n hidable: true,\r\n },\r\n ],\r\n },\r\n {\r\n key: \"celestials\",\r\n name: \"Celestials\",\r\n hideAt: 2.4,\r\n UIClass: \"o-tab-btn--celestial\",\r\n condition: () => Teresa.isUnlocked || PlayerProgress.mendingUnlocked(),\r\n id: 9,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"celestial-navigation\",\r\n name: \"Celestial Navigation\",\r\n symbol: \"\",\r\n component: \"CelestialNavigationTab\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"teresa\",\r\n name: \"Teresa\",\r\n symbol: \"Ϟ\",\r\n component: \"TeresaTab\",\r\n id: 1,\r\n hidable: true,\r\n condition: () => Teresa.isUnlocked \r\n },\r\n {\r\n key: \"effarig\",\r\n name: \"Effarig\",\r\n symbol: \"Ϙ\",\r\n component: \"EffarigTab\",\r\n condition: () => TeresaUnlocks.effarig.isUnlocked,\r\n id: 2,\r\n hidable: true,\r\n },\r\n {\r\n key: \"enslaved\",\r\n name: \"The Nameless Ones\",\r\n symbol: \"
\\uf0c1
\",\r\n component: \"EnslavedTab\",\r\n condition: () => EffarigUnlock.eternity.isUnlocked,\r\n id: 3,\r\n hidable: true,\r\n },\r\n {\r\n key: \"v\",\r\n name: \"V\",\r\n symbol: \"⌬\",\r\n component: \"VTab\",\r\n condition: () => Achievement(151).isUnlocked && EffarigUnlock.eternity.isUnlocked,\r\n id: 4,\r\n hidable: true,\r\n },\r\n {\r\n key: \"ra\",\r\n name: \"Ra\",\r\n symbol: \"\",\r\n component: \"RaTab\",\r\n condition: () => (VUnlocks.raUnlock.isUnlocked && EffarigUnlock.eternity.isUnlocked) || Ra.unlocks.raNoReset.isUnlocked,\r\n id: 5,\r\n hidable: true,\r\n },\r\n {\r\n key: \"laitela\",\r\n name: \"Lai'tela\",\r\n symbol: \"ᛝ\",\r\n component: \"LaitelaTab\",\r\n condition: () => Laitela.isUnlocked,\r\n id: 6,\r\n hidable: true,\r\n },\r\n {\r\n key: \"pelle\",\r\n name: \"Pelle\",\r\n symbol: \"♅\",\r\n component: \"PelleTab\",\r\n condition: () => Pelle.isUnlocked,\r\n id: 7,\r\n hidable: true,\r\n }\r\n ]\r\n },\r\n {\r\n key: \"mending\",\r\n name: \"Mending\",\r\n hideAt: 2.7, //Sequence is disabled\r\n UIClass: \"o-tab-btn--mending\",\r\n condition: () => PlayerProgress.mendingUnlocked(),\r\n id: 10,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"mendupgrades\",\r\n name: \"Mending Upgrades\",\r\n symbol: \"\",\r\n component: \"MendingUpgrades\",\r\n id: 0,\r\n hidable: true,\r\n },\r\n {\r\n key: \"mendmilestones\",\r\n name: \"Mending Milestones\",\r\n symbol: \"\",\r\n component: \"MendingMilestones\",\r\n id: 1,\r\n hidable: true,\r\n },\r\n {\r\n key: \"warpreality\",\r\n name: \"Warp Reality\",\r\n symbol: \"Ϟ\",\r\n component: \"WarpReality\",\r\n id: 2,\r\n hidable: true,\r\n },\r\n {\r\n key: \"corruption\",\r\n name: \"Hostilities\",\r\n symbol: ``,\r\n component: \"CorruptionTab\",\r\n id: 3,\r\n hidable: true,\r\n condition: () => Ra.unlocks.Hostility.isUnlocked,\r\n },\r\n {\r\n key: \"kohlerrealm\",\r\n name: \"Kohler's Realm\",\r\n symbol: \"\",\r\n component: \"KohlersRealm\",\r\n id: 4,\r\n hidable: true,\r\n condition: () => Ra.unlocks.kohlersRealmUnlock.isUnlocked,\r\n },\r\n ]\r\n },\r\n {\r\n key: \"shop\",\r\n name: \"Shop\",\r\n ModernUIClass: \"shop\",\r\n hideAt: 1.5,\r\n condition: () => true,\r\n id: 11,\r\n hidable: true,\r\n subtabs: [\r\n {\r\n key: \"shop\",\r\n name: \"Shop\",\r\n symbol: \"$\",\r\n component: \"ShopTab\",\r\n id: 0,\r\n hidable: true\r\n }\r\n ]\r\n }\r\n];\r\n","import { DC } from \"../../constants\";\r\n\r\nconst rebuyable = props => {\r\n props.cost = () => getHybridCostScaling(\r\n player.mending.rebuyables[props.id],\r\n 1e30,\r\n props.initialCost,\r\n props.costMult,\r\n props.costMult / 10,\r\n DC.E309,\r\n 1e3,\r\n props.initialCost * props.costMult\r\n );\r\n const { effect, effectType } = props;\r\n props.effect = () =>{ \r\n if (props.effectType === \"+\" || props.effectType === \"-\"){\r\n return effect * player.mending.rebuyables[props.id];\r\n }\r\n return Math.pow(effect, player.mending.rebuyables[props.id]);\r\n }\r\n props.description = () => props.id == 11 ? props.textTemplate.replace(\"{value}\", formatFloat(effect, 3)): props.textTemplate.replace(\"{value}\", formatInt(effect));\r\n props.formatEffect = value => {\r\n if (props.id === 6 || props.id === 16) return effectType + `${formatInt(value)}`\r\n if (props.id === 11) return effectType + `${formatFloat(value, 3)}`\r\n return effectType + `${format(value, 2, 0)}`\r\n };\r\n props.formatCost = value => format(value, 2, 0);\r\n return props;\r\n};\r\n\r\nexport const mendingUpgrades = [\r\n rebuyable({\r\n id: 1,\r\n name: \"Mending Upgrade 1\",\r\n initialCost: 10,\r\n costMult: 9,\r\n textTemplate: \"Multiply Multiversal Remain gain by {value}.\",\r\n effect: 3,\r\n effectType: \"×\"\r\n }),\r\n {\r\n id: 2,\r\n name: \"Reckoning of the Evulgate\",\r\n cost: 1,\r\n description: () => `Start every Mend with ${format(1e4)} Realities, every Mend and Reality with ${format(1e6)} Eternities, and all prestiges with ${format(1e12)} Infinities. This upgrade applies immediately when bought.`,\r\n effect: () => [1e6, 1e12],\r\n },\r\n {\r\n id: 3,\r\n name: \"Reckoning of the Olympia\",\r\n cost: 1,\r\n description: () => \"Start every Mend and Reality with all Eternity Challenges completed 5 times (applies immedately).\",\r\n },\r\n {\r\n id: 4,\r\n name: \"Reckoning of the Sabotage\",\r\n cost: 15,\r\n description: \"Start every Mend with Lai'tela's Reality fully destabilized.\",\r\n },\r\n {\r\n id: 5,\r\n name: \"Reckoning of the Exhaurire\",\r\n cost: 5,\r\n description: () => `Always have passive IP, EP, and RM gain (IP and EP gen do not work in Pelle). Remnants are always equal to your best-ever Remnants this Mend.`,\r\n },\r\n rebuyable({\r\n id: 6,\r\n name: \"Mending Upgrade 6\",\r\n initialCost: 2000,\r\n costMult: 50,\r\n textTemplate: \"Delay post-Lv. 45,000 Glyph scaling by {value}\",\r\n effect: 500,\r\n effectType: \"+\"\r\n }),\r\n {\r\n id: 7,\r\n name: \"Libertas Temporis\",\r\n cost: 4,\r\n description: () => \"Start every Mend with Nameless completed and all their upgrades and unlocks. Real time is stored at 500% efficiency, and unlock an Autobuyer for Tesseracts.\",\r\n },\r\n {\r\n id: 8,\r\n name: \"Propius ad Scalas\",\r\n cost: 10,\r\n description: () => \"Reduce post-Infinity Antimatter Dimension cost scaling to x1.5 and post-Infinity Tickspeed cost scaling to x1.2.\",\r\n },\r\n {\r\n id: 9,\r\n name: \"Sacrificium Misericordae\",\r\n cost: 3,\r\n description: () => `Start every Mend with Teresa completed and set best AM in their Reality to ${format(DC.E1E10)}.`,\r\n },\r\n {\r\n id: 10,\r\n name: \"Deus Propitius\",\r\n cost: 5,\r\n description: () => \"Weaken the first 3 Pelle Strike penalties.\",\r\n },\r\n rebuyable({\r\n id: 11,\r\n name: \"Mending Upgrade 11\",\r\n initialCost: 1e6,\r\n costMult: 1e4,\r\n textTemplate: \"Weaken the post 50,000 TG scaling by {value}\",\r\n effect: 0.005,\r\n effectType: \"-\"\r\n }),\r\n {\r\n id: 12,\r\n name: \"Prior Lingua Adeptus\",\r\n cost: 6,\r\n description: () => \"Glyphs always have a minimum 100% rarity and 4 effects (7 if Effarig). Start every Mend with Effarig Glyphs unlocked.\",\r\n },\r\n {\r\n id: 13,\r\n name: \"Regnum Pro Duobus Regnis\",\r\n cost: 15,\r\n description: () => \"Simulate 2 extra Realities for every Reality.\",\r\n },\r\n {\r\n id: 14,\r\n name: \"Satus Superbia\",\r\n cost: 8,\r\n description: () => \"Gain 3x Space Theorems per V-Achievement and start every Mend with all V-Achievements at tier 3 (includes Hard)\",\r\n },\r\n {\r\n id: 15,\r\n name: \"Hyperscientia\",\r\n cost: 5,\r\n description: () => \"Raise Memory Gain by ^1.5.\",\r\n },\r\n rebuyable({\r\n id: 16,\r\n name: \"Per Aspera Ad Astra\",\r\n initialCost: 1e9,\r\n costMult: 1e6,\r\n textTemplate: `Delay Obscure Galaxy Scaling by {value}.`,\r\n effect: 5000,\r\n effectType: \"+\"\r\n }),\r\n {\r\n id: 17,\r\n name: \"Connexa Cosmicis\",\r\n cost: 65,\r\n description: () => \"Disable Remote Galaxy Scaling. Replicanti Galaxy scaling is moved to 1,500 and 10,000.\",\r\n },\r\n {\r\n id: 18,\r\n name: \"Confortatus Tenebris\",\r\n cost: 25,\r\n description: () => \"Continuum gives 50% more purchases.\",\r\n },\r\n {\r\n id: 19,\r\n name: \"Deus Memorias\",\r\n cost: 100000,\r\n description: () => \"Unlock Ra, Lai'tela, and Pelle Memories, and increase the level cap to 100.\",\r\n },\r\n {\r\n id: 20,\r\n name: \"Mending Upgrade 20\",\r\n cost: 100000,\r\n description: () => \"Unlock autobuyer for Mends\",\r\n }\r\n];\r\n","export const mendingMilestones = {\r\n one: {\r\n mends: 1,\r\n reward: \"Start with Infinity broken, all pre-Reality autobuyers maxed (kept in Doomed Reality), and the START perk. Gain multipliers to various resources (hover for details).\",\r\n activeCondition: () => (true ? `${formatX(1e20,0)} IP, ${formatX(1000,0)} Replicanti Speed, ${formatX(100000,0)} EP, ${formatX(10000,0)} Eternities, ${formatX(100,0)} Dilated Time, ${formatX(3,0)} Realities, ${formatX(5,0)} Perk Points, ${formatX(25,0)} Memory Gain, ${formatX(50, 0, )} Dark Energy Gain, ${formatX(5, 0)} Singularity Gain, ${formatX(1.1, 0, 1)} Remnant Gain, ${formatX(10, 0)} Reality Shard Gain` : \"this is a bug if this text appears\"),\r\n },\r\n two: {\r\n mends: 2,\r\n reward: \"The Pelle-exclusive dilation upgrades are available outside of Doomed Reality (and also unlock the autobuyers for them), but they are nerfed outside of it. Dilation Autobuyers buy max. Achievement 154's reward is now 100%.\",\r\n },\r\n three: {\r\n mends: 3,\r\n reward: \"Start every Mend with all perks, the rebuyable Reality Upgrade and Black Hole Autobuyers, Vacuum Acceleration, and both Black Holes unlocked and permanently active, with 3 power upgrades each.\",\r\n },\r\n ten: {\r\n mends: 4,\r\n reward: \"Teresa's container is no longer reset on Mend and Teresa, Effarig, Nameless, and V's Memories start at Level 10\",\r\n },\r\n four: {\r\n mends: 5,\r\n reward: \"Remove all requirements for Reality/Imaginary Upgrades (except for Lai'tela, Pelle and their Unlocks) and start with 5 of each rebuyable Reality Upgrade.\",\r\n },\r\n five: {\r\n mends: 7,\r\n reward: \"Gain 3 additional Glyph slots (disabled in Doomed Reality), and have the ability to equip TWO Effarig and Reality Glyphs each.\",\r\n },\r\n seven: {\r\n mends: 8,\r\n reward: \"Begin each Mend with Teresa's perk shop maxed, and gain an autobuyer which can automatically purchase and remove Music Glyphs.\",\r\n },\r\n six: {\r\n mends: 10,\r\n reward: \"You can now Mend outside of Doomed Reality.\",\r\n },\r\n eleven: {\r\n mends: 15,\r\n reward: \"Gain a Multiversal Remain multiplier based on lowest Glyph count during the entire Reality when you reach END antimatter this Mend.\",\r\n activeCondition: () => (`Your current Multiversal Remain multiplier from this milestone ${MendingMilestone.eleven.isReached ? \"is\":\"would be\"} ${formatX(mendingMilestoneElevenMultiplier(true),2 ,2)}, affected by Cursed Glyphs.`),\r\n // We dont define the effect here because this codebase will shit itself if you do, so we instead define it at the MvR code.\r\n },\r\n eight: {\r\n mends: 20,\r\n reward: \"Unlock an autobuyer for non-rebuyable Reality and Imaginary Upgrades once you can afford them (includes Lai and Pelle unlocks)\",\r\n }\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { Currency } from \"../../currency\";\r\n\r\nconst rebuyable = props => {\r\n props.cost = () => getHybridCostScaling(\r\n player.mending.warpRebuyables[props.id],\r\n 1e30,\r\n props.initialCost,\r\n props.costMult,\r\n props.costMult / 10,\r\n DC.E309,\r\n 1e3,\r\n props.initialCost * props.costMult\r\n );\r\n const { effect, effectType } = props;\r\n props.effect = () =>{ \r\n if (props.effectType === \"+\" || props.effectType === \"-\" || props.effectType === \"×1e\" ){\r\n return effect * player.mending.warpRebuyables[props.id];\r\n }\r\n return Math.pow(effect, player.mending.warpRebuyables[props.id]);\r\n };\r\n props.description = () => props.textTemplate.replace(\"{value}\",formatInt(effect));\r\n if (!props.noEffect) {\r\n props.formatEffect = value => effectType + format(value, 2, 0);\r\n if(props.id==3) props.formatEffect = value => effectType + format(value, 3, 3);\r\n props.formatCost = value => format(value, 2, 0);\r\n }\r\n return props;\r\n};\r\n\r\n\r\nexport const warpUpgrades = [\r\n rebuyable({\r\n name: \"More Infinite Power\",\r\n id: 1,\r\n initialCost: 1e30,\r\n costMult: 1e5,\r\n textTemplate: \"Increase Infinite Power softcap's Thereshold by ×1e2.5e14\",\r\n effect: 2.5e14,\r\n effectType: \"×1e\"\r\n }),\r\n rebuyable({\r\n name: \"Memory Gain\",\r\n id: 2,\r\n initialCost: 1e20,\r\n costMult: 100,\r\n textTemplate: \"Improve Ra's memory gain by ×3\",\r\n effect: 3,\r\n effectType: \"×\"\r\n }),\r\n rebuyable({\r\n name: \"Game speed softcap\",\r\n id: 3,\r\n initialCost: 1e20,\r\n costMult: 100,\r\n textTemplate: \"Increase Game speed's softcap by 0.002\",\r\n effect: 0.002,\r\n effectType: \"+\"\r\n }),\r\n {\r\n name: \"Visible Galaxies\",\r\n id: 4,\r\n cost: 1e55,\r\n requirement: () => Ra.unlocks.unlockSHardV.isUnlocked ? `Reach ${formatInt(913579)} total Galaxies in V's Superhard Reality.` : \"Reach V Level 40 to see unlock condition\",\r\n hasFailed: () => !V.isSuperRunning,\r\n checkRequirement: () => V.isSuperRunning && Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies>=913579,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Decrease Obscure Galaxy scaling polynomial level by ${formatInt(1)}`,\r\n },\r\n {\r\n name: \"The Dedicated Way\",\r\n id: 5,\r\n cost: 1e24,\r\n requirement: () => `Reach ${format(new Decimal(\"1e2450000000000000000\"))} Antimatter in Ra's Reality`,\r\n hasFailed: () => !Ra.isRunning,\r\n checkRequirement: () => Ra.isRunning && Currency.antimatter.exponent>=2.45e18,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Ra's basic Memory chunk gain multiplier based on current Antimatter`,\r\n effect: () => Math.max(Math.log10(Currency.antimatter.exponent),1),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Hostility+\",\r\n id: 6,\r\n cost: 1e60,\r\n requirement: () => Ra.unlocks.Hostility.isUnlocked ? \"Mend with a total hostility level of at least 60\" : \"Reach Pelle Level 75 to see unlock condition\",\r\n hasFailed: () => !player.mending.corruptionChallenge.corruptedMend || !player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 60,\r\n checkRequirement: () => player.mending.corruptionChallenge.corruptedMend && player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 60,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => Ra.unlocks.Hostility.isUnlocked ? `Hostility caps +${formatInt(1)}` : \"Reach Pelle Level 75 to see effect\",\r\n },\r\n {\r\n name: \"Automatic of Speed\",\r\n id: 7,\r\n cost: 1e75,\r\n requirement: () => Ra.unlocks.uncapGamespeed.isUnlocked ? `Reach ${format(new Decimal(\"1e2300\"))} Game Speed` : \"Reach Nameless Level 30 to see unlock condition\",\r\n hasFailed: () => false,\r\n checkRequirement: () => {\r\n return getGameSpeedupFactor().gte('1e2300');\r\n },\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => Ra.unlocks.unlock3rdBH.isUnlocked ? \"Unlock Black Hole 3 autobuyer\" : \"Reach Nameless Level 50 to see effect\",\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"Valuable Cost\",\r\n id: 8,\r\n cost: 1e70,\r\n requirement: () => Ra.unlocks.Hostility.isUnlocked ? `Reach ${format(3e15)} Time Theorems in Teresa's Reality of Level 9+ Study of Forever Hostile Mend` : \"Reach Pelle Level 75 to see unlock condition\",\r\n hasFailed: () => !player.mending.corruptionChallenge.corruptedMend || player.mending.corruption[9]<9,\r\n checkRequirement: () => player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[9] && Teresa.isRunning && Currency.timeTheorems.value.gte(3e15),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => Ra.unlocks.unlockMyriads.isUnlocked ? \"Reduce Myriad Study cost by 50 Space Theorems\" : \"Reach V Level 90 to see effect\",\r\n effect: () => 1\r\n },\r\n {\r\n name: \"Living Multiverse\",\r\n id: 9,\r\n cost: 1e75,\r\n requirement: () => `Reach ${format(1.845e9, 3, 3)} total Galaxies in a Doomed reality without Galaxy Generator`,\r\n hasFailed: () => !Pelle.isDoomed || Pelle.hasGalaxyGenerator,\r\n checkRequirement: () => (Pelle.isDoomed&&!Pelle.hasGalaxyGenerator)&&(Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies >= 1.845e9),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => Ra.unlocks.unlockMultiversalDimensions.isUnlocked ? \"Galactic Shards effect uses a better formula\" : \"Reach Lai Level 100 to see effect\",\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"Boost Readjustment\",\r\n id: 10,\r\n cost: 1e60,\r\n requirement: () => Ra.unlocks.remembranceAlwaysActiveAndShopUnlock.isUnlocked ? `Reach ${format(2e37)} Memory Crystals.` : \"Reach Ra Level 40 to see unlock condition\",\r\n hasFailed: () => false,\r\n checkRequirement: () => Currency.raPoints.value.gte(2e37),\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Dimension boost scaling occurs ${formatX(20)} later`,\r\n },\r\n {\r\n name: \"Noticeable Galaxies\",\r\n id: 11,\r\n cost: 1e65,\r\n requirement: () => Ra.unlocks.kohlersRealmUnlock.isUnlocked ? \"Reach Kohler unlock progress milestone 3\" : \"Reach Pelle Level 100 to see unlock condition\",\r\n hasFailed: () => !Ra.unlocks.kohlersRealmUnlock.isUnlocked,\r\n checkRequirement: () => Kohler.unlockProgress>=35,\r\n checkEvent: GAME_EVENT.GAME_TICK_AFTER,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Decrease Obscure Galaxy scaling polynomial level by ${formatInt(1)}`,\r\n },\r\n {\r\n name: \"Hostility++\",\r\n id: 12,\r\n cost: 1e300,\r\n requirement: () => Ra.unlocks.Hostility.isUnlocked ? \"Mend with a total hostility level of at least 80\" : \"Reach Pelle Level 75 to see unlock condition\",\r\n hasFailed: () => !player.mending.corruptionChallenge.corruptedMend || !player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 80,\r\n checkRequirement: () => player.mending.corruptionChallenge.corruptedMend && player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 80,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => Ra.unlocks.Hostility.isUnlocked ? `Hostility caps +${formatInt(1)}` : \"Reach Pelle Level 75 to see effect\",\r\n },\r\n /*\r\n {\r\n name: \"Warp Upgrade 13\",\r\n id: 13,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 14\",\r\n id: 14,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Hostility+\",\r\n id: 15,\r\n cost: 1e300,\r\n requirement: \"Mend with an average corruption level of 6 or higher\",\r\n hasFailed: () => !player.mending.corruptionChallenge.corruptedMend || !player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 6,\r\n checkRequirement: () => player.mending.corruptionChallenge.corruptedMend && player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 6,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Hostility caps +${formatInt(1)}`,\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 16\",\r\n id: 16,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 17\",\r\n id: 17,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 18\",\r\n id: 18,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 19\",\r\n id: 19,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 20\",\r\n id: 20,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 21\",\r\n id: 21,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 22\",\r\n id: 22,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Warp Upgrade 23\",\r\n id: 23,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: \"[TBD]\",\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Noticeable Galaxies\",\r\n id: 24,\r\n cost: 1e300,\r\n requirement: \"Wait 5 Hours [NYI]\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Obscure galaxy polynomial level -${formatInt(1)}`,\r\n },\r\n {\r\n name: \"Hostility++\",\r\n id: 25,\r\n cost: 1e300,\r\n requirement: \"Mend with an average corruption level of 8 or higher\",\r\n hasFailed: () => !player.mending.corruptionChallenge.corruptedMend || !player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 8,\r\n checkRequirement: () => player.mending.corruptionChallenge.corruptedMend && player.mending.corruption.reduce((partialSum, a) => partialSum + a, 0) >= 8,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"gain a Replicanti Galaxy\",\r\n description: () => `Hostility caps +${formatInt(1)}`,\r\n effect: () => 1,\r\n formatEffect: value => formatX(value, 2, 2)\r\n }, */\r\n];\r\n","import { DC } from \"../../constants\";\r\n\r\n\r\nexport const corruptionUpgrades = [\r\n {\r\n name: \"Memory Perfection\",\r\n id: 1,\r\n cost: 2,\r\n requirement: `Please send your save to the devs with an image of this - You should never be able to see this`,\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `Ra memory gain is ${formatX(1500, 1)} stronger, but only when in the appropriate celestials Reality.`,\r\n effect: 1500\r\n },\r\n {\r\n name: \"Spacetime Distruption\",\r\n id: 2,\r\n cost: 2,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Game speed is multiplied based on highest score (before instability, Applies after hostilities, but weaker in Hostile multiverse)\",\r\n effect: () => player.mending.corruptionChallenge.corruptedMend ? Decimal.pow10(Math.pow(player.mending.corruptionChallenge.recordScore, 0.25)) : (Decimal.pow10(Math.pow(player.mending.corruptionChallenge.recordScore, 1/1.48))),\r\n formatEffect: value => formatX(value, 2)\r\n },\r\n {\r\n name: \"Rewarding Achievements\",\r\n id: 3,\r\n cost: 2,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Gain a power effect to achievement power effects, after softcaps, based on unspent Hostile Fragments. \",\r\n effect: () => 1 + Math.log(1 + (player.mending.corruptedFragments)/3) / 10, // We do math.log not math.log10 here since we do want the natural log of CF, not the base 10 log\r\n formatEffect: value => `^` + format(value, 2, 2)\r\n },\r\n {\r\n name: \"Singularity Cap\",\r\n id: 4,\r\n cost: 2,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Give extra 10 increase Singularity cap.\",\r\n effect: () => 10\r\n },\r\n {\r\n name: \"Perk Limit\",\r\n id: 5,\r\n cost: 2,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"The first two upgrades of Perk Shop cap are massively increased.\",\r\n effect: () => 1\r\n },\r\n {\r\n name: \"Doomed Options\",\r\n id: 6,\r\n cost: 3,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Give one extra Glyph slot in Doomed Reality\",\r\n effect: () => 1\r\n },\r\n {\r\n name: \"Help Effarig can do nothing\",\r\n id: 7,\r\n cost: 3,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Improve Effarig level 15 improvement.\",\r\n effect: () => 1\r\n },\r\n {\r\n name: \"Tesseract Movement\",\r\n id: 8,\r\n cost: 3,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Gain a multiplier to effective Tesseract count, based on unspent Hostile Fragments.\",\r\n effect: () => 1 + Math.log(1 + (player.mending.corruptedFragments)) / 5,\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Crystal Galaxies\",\r\n id: 9,\r\n cost: 3,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Memory Crystal delays Obscure Galaxy scaling\",\r\n effect: () => Math.round(Decimal.log10(player.celestials.ra.raPoints.plus(1))*10),\r\n formatEffect: value => `+` + formatInt(value)\r\n },\r\n {\r\n name: \"Sacrifice Exponent\",\r\n id: 10,\r\n cost: 3,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Dimension Sacrifice's exponent ^1.5\",\r\n effect: () => 1.5\r\n },\r\n {\r\n name: \"Black Hole\",\r\n id: 11,\r\n cost: 4,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Black Hole 1 & 2's base multiplier is increased.\",\r\n effect: () => 2.5,\r\n formatEffect: value => formatX(value, 1, 1)\r\n },\r\n {\r\n name: \"Nerf Every Curse\",\r\n id: 12,\r\n cost: 4,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Every generated Cursed Glyph's level reduced to 666.\",\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"More MvR!!!!!!!\",\r\n id: 13,\r\n cost: 4,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Multiplier to Multiversal Remains based on your record score.\",\r\n effect: () => Math.max(CorruptionData.corruptionChallenge.recordScore,1),\r\n formatEffect: value => formatX(value, 2, 2)\r\n },\r\n {\r\n name: \"Alchemy Cap\",\r\n id: 14,\r\n cost: 4,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"Increase Alchemy hardcap based on your record score.\",\r\n effect: () => Math.round(Math.log(CorruptionData.corruptionChallenge.recordScore+1)/Math.log(1.005)),\r\n formatEffect: value => `+${formatInt(value)}`\r\n },\r\n {\r\n name: \"Generation\",\r\n id: 15,\r\n cost: 4,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"8th Antimatter Dimension generat 8th Dark Matter Dimension (once unlocked)\",\r\n effect: () => Decimal.log10(AntimatterDimensions.all[7].totalAmount.plus(1))*10,\r\n formatEffect: value => `${format(value, 2, 2)} per Second`\r\n },\r\n {\r\n name: \"Prestige Extension\",\r\n id: 16,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `Prestige Limits power is now doubled, capped at ${formatInt(1)}`,\r\n },\r\n {\r\n name: \"Dimension Superscaling\",\r\n id: 17,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `If Dimensional Limitations corruption is 5 or higher, Antimatter dimensions gain a power effect based on highest Glyph Level this mend.`,\r\n effect: () => (player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[1] >= 5 && player.records.bestReality.glyphLevelSet.length!=0) ? 1 + Math.log(player.records.bestReality.glyphLevel)/10 : 1,\r\n formatEffect: value => formatPow(value, 2, 2)\r\n },\r\n {\r\n name: \"Time Expansion\",\r\n id: 18,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `Time Compression power +${format(0.01, 2, 2)} (capped at +${formatInt(1)}), Time compression devisor ${formatPow(0.1, 1, 1)}`,\r\n },\r\n {\r\n name: \"Galaxy Strengthening\",\r\n id: 19,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `Galactic Weakness - Scaling is ^0.5, and power is ${formatX(1.4, 1, 1)} (capped at ${formatX(1)})`,\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"Rewarding Glyphs\",\r\n id: 20,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: \"If Complex Glyphs is level 4 or higher, gain a power effect to score, based on glyph levels and Complex Glyphs level.\",\r\n effect: () => player.mending.corruptionChallenge.corruptedMend && (player.mending.corruption[4] >= 4) ? 1 + Math.log(Math.log(player.mending.corruption[4] * Math.max(1,player.records.bestReality.glyphLevel)))/2 : 1,\r\n formatEffect: value => formatPow(value, 2, 2)\r\n },\r\n {\r\n name: \"Tick Extension\",\r\n id: 21,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `Tick Extension Tickspeed power ^0.5, Time shard divisor ^0.75.`,\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"Automic Dilution\",\r\n id: 22,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: () => `Automic Dilution power is now ×1.5, capped at ${formatInt(1)}`,\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"Theory of Dilation\",\r\n id: 23,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: `Theory of Dilation power +0.2, and DT gain ×1e5 if level 1 or more.`,\r\n effect: () => 1,\r\n },\r\n {\r\n name: \"Replicative Singularities\",\r\n id: 24,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: `If Replicative Singularities corruption is 5 or higher, Infinity dimensions gain a power effect based on current Replicanti. Capped at ^5.`,\r\n effect: () => player.mending.corruptionChallenge.corruptedMend && (player.mending.corruption[8] >= 5) ? Math.min(1+(Decimal.log10(player.replicanti.amount))/1000,5) : 1,\r\n formatEffect: value => formatPow(value, 2, 2)\r\n },\r\n {\r\n name: \"Study of Forever\",\r\n id: 25,\r\n cost: 5,\r\n requirement: \"Please send your save to the devs with an image of this - You should never be able to see this\",\r\n hasFailed: () => false,\r\n checkRequirement: () => false,\r\n checkEvent: GAME_EVENT.MENDING_RESET_BEFORE,\r\n canLock: false,\r\n lockEvent: \"Illegal lock called - Please report this with your save and what you did.\",\r\n description: `If Study of Forever corruption is 4 or higher, Time dimensions gain a power effect based on current Time Theorems. Capped at ^5.`,\r\n effect: () => player.mending.corruptionChallenge.corruptedMend && (player.mending.corruption[9] >= 4) ? Math.min(1+(Decimal.log10(Currency.timeTheorems.value))/1000,5) : 1,\r\n formatEffect: value => formatPow(value, 2, 2)\r\n },\r\n];\r\n","export const kohlerProgress = {\r\n progressUnlocks: {\r\n kohlerUnlocked: {\r\n id: 0,\r\n progress: 5,\r\n condition: () => Ra.unlocks.kohlersRealmUnlock.isUnlocked,\r\n description: \"You may have made it here Destroyer, but I have a few more tests...\",\r\n },\r\n hostileScore: {\r\n id: 1,\r\n progress: 20,\r\n condition: () => {\r\n if (Ra.unlocks.kohlersRealmUnlock.isUnlocked && CorruptionData.corruptionChallenge.recordScore >= 50000000) return true;\r\n return false;\r\n },\r\n description: () => `Reach ${format(5e7)} Hostile score. Reward: Keep Charged Upgrades when not entering Hostile mend.`,\r\n },\r\n hostileFragments: {\r\n id: 2,\r\n progress: 35,\r\n condition: () => {\r\n if (Ra.unlocks.kohlersRealmUnlock.isUnlocked && CorruptionData.recordCorruptedFragments > 29) return true;\r\n return false;\r\n },\r\n description: () => `Reach 30 Hostile Fragments. Reward: Antimatter ^(1+best HF/100).`,\r\n },\r\n antimatterGalaxy: {\r\n id: 4,\r\n progress: 65,\r\n condition: () => {\r\n if (Ra.unlocks.kohlersRealmUnlock.isUnlocked && Math.log10(Decimal.log10(Currency.antimatter.value))>=25) return true;\r\n return false;\r\n },\r\n description: () => `Reach ${format(new Decimal(\"1e10000000000000000000000000\"))} Antimatter. Reward: Tickspeed affect 1st Multiversal Dimension with ultra reduced rate.`,\r\n effect: () => {\r\n return Math.max(Math.pow(Decimal.log10(Tickspeed.perSecond.plus(1)),0.3),1);\r\n }\r\n },\r\n placeholder: {\r\n id: 6,\r\n progress: 100,\r\n condition:false,\r\n description: \"Now for the ultimate test...waiting 5 hours™.\",\r\n }\r\n }\r\n};\r\n","import { mendingUpgrades } from \"./mending-upgrades\";\r\nimport { mendingMilestones } from \"./mending-milestones\";\r\nimport { warpUpgrades } from \"./warp-upgrades\";\r\nimport { corruptionUpgrades } from \"./corruption-upgrades\";\r\nimport { kohlerProgress } from \"./kohler-unlock-progress\";\r\n\r\nexport const mending = {\r\n upgrades: mendingUpgrades,\r\n milestones: mendingMilestones,\r\n corruptionUpgrades: corruptionUpgrades,\r\n warpUpgrades: warpUpgrades,\r\n kohlerUnlockProgress: kohlerProgress,\r\n};","import { multiplierTabTree, multiplierTabValues } from \"./multiplier-tab\";\r\n\r\nimport { achievements } from \"./achievements\";\r\nimport { awayProgressTypes } from \"./away-progress-types\";\r\nimport { catchupResources } from \"./catchup-resources\";\r\nimport { celestials } from \"./celestials\";\r\nimport { challenges } from \"./challenges\";\r\nimport { changelog } from \"./changelog\";\r\nimport { confirmationTypes } from \"./confirmation-types\";\r\nimport { credits } from \"./credits\";\r\nimport { discordRichPresence } from \"./discord-rich-presence\";\r\nimport { eternity } from \"./eternity\";\r\nimport { h2p } from \"./h2p\";\r\nimport { infinity } from \"./infinity\";\r\nimport { news } from \"./news\";\r\nimport { progressStages } from \"./progress-checker\";\r\nimport { reality } from \"./reality\";\r\nimport { shopPurchases } from \"./shop-purchases\";\r\nimport { speedrunMilestones } from \"./speedrun-milestones\";\r\nimport { tabNotifications } from \"./tab-notifications\";\r\nimport { tabs } from \"./tabs\";\r\nimport { mending } from \"./mending\";\r\n\r\nexport const GameDatabase = {\r\n achievements,\r\n awayProgressTypes,\r\n catchupResources,\r\n celestials,\r\n challenges,\r\n changelog,\r\n confirmationTypes,\r\n credits,\r\n discordRichPresence,\r\n eternity,\r\n h2p,\r\n infinity,\r\n multiplierTabTree,\r\n multiplierTabValues,\r\n news,\r\n progressStages,\r\n reality,\r\n shopPurchases,\r\n speedrunMilestones,\r\n tabNotifications,\r\n tabs,\r\n mending,\r\n};\r\n\r\nwindow.GameDatabase = GameDatabase;\r\n\r\nwindow.mapGameData = function mapGameData(gameData, mapFn) {\r\n const result = [];\r\n for (const data of gameData) {\r\n result[data.id] = mapFn(data);\r\n }\r\n return result;\r\n};\r\n\r\nwindow.mapGameDataToObject = function mapGameDataToObject(gameData, mapFun) {\r\n const array = Object.entries(gameData);\r\n const out = {};\r\n for (let idx = 0; idx < array.length; idx++) {\r\n out[array[idx][0]] = mapFun(array[idx][1]);\r\n }\r\n return {\r\n all: Object.values(out),\r\n ...out\r\n };\r\n};\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-block-editor--container\"},[_c('div',{ref:\"editorGutter\",staticClass:\"c-automator-block-editor--gutter\"},_vm._l((_vm.numberOfLines),function(i){return _c('div',{key:i,staticClass:\"c-automator-block-line-number\",style:({\n top: (((i - 1) * 3.45) + \"rem\")\n })},[_vm._v(\" \"+_vm._s(i)+\" \")])}),0),_c('div',{ref:\"blockEditorElement\",staticClass:\"c-automator-block-editor\",on:{\"scroll\":function($event){return _vm.setPreviousScroll()}}},[_c('draggable',{staticClass:\"c-automator-blocks\",attrs:{\"group\":\"code-blocks\",\"ghost-class\":\"c-automator-block-row-ghost\"},on:{\"end\":_vm.parseRequest},model:{value:(_vm.lines),callback:function ($$v) {_vm.lines=$$v},expression:\"lines\"}},_vm._l((_vm.lines),function(block,lineNum){return _c('AutomatorBlockSingleRow',{key:block.id + 10000 * lineNum,attrs:{\"block\":block,\"update-block\":_vm.updateBlock,\"delete-block\":_vm.deleteBlock}})}),1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-block-row--container\"},[_c('div',{staticClass:\"c-automator-block-row\",class:_vm.highlightClass()},[_c('AutomatorBlockSingleInput',{attrs:{\"constant\":_vm.b.alias ? _vm.b.alias : _vm.b.cmd,\"block\":_vm.b,\"update-function\":_vm.updateBlock}}),(_vm.b.canWait)?_c('AutomatorBlockSingleInput',{attrs:{\"block\":_vm.b,\"block-target\":\"nowait\",\"initial-selection\":_vm.b.nowait ? 'NOWAIT' : '',\"update-function\":_vm.updateBlock}}):_vm._e(),(_vm.b.canRespec)?_c('AutomatorBlockSingleInput',{attrs:{\"block\":_vm.b,\"block-target\":\"respec\",\"initial-selection\":_vm.b.respec ? 'RESPEC' : '',\"update-function\":_vm.updateBlock}}):_vm._e(),(_vm.b.allowedPatterns)?_c('AutomatorBlockSingleInput',{attrs:{\"block\":_vm.b,\"block-target\":_vm.b.targets[0],\"patterns\":_vm.b.allowedPatterns,\"initial-selection\":_vm.nextSelection(),\"update-function\":_vm.updateBlock,\"recursive\":true}}):_vm._e(),_c('div',{staticClass:\"o-automator-block-delete\",on:{\"click\":function($event){return _vm.removeBlock(_vm.b.id)}}},[_vm._v(\" X \")])],1),(_vm.block.nested)?_c('draggable',{staticClass:\"l-automator-nested-block\",attrs:{\"group\":\"code-blocks\"},model:{value:(_vm.block.nest),callback:function ($$v) {_vm.$set(_vm.block, \"nest\", $$v)},expression:\"block.nest\"}},_vm._l((_vm.block.nest),function(subblock){return _c('AutomatorBlockSingleRow',{key:subblock.id,attrs:{\"block\":subblock,\"update-block\":_vm.updateBlockFromNest,\"delete-block\":_vm.deleteBlockFromNest}})}),1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-single-block\"},[(_vm.displayedConstant)?_c('div',{staticClass:\"c-automator-single-block o-automator-command c-automator-constant-block\",class:{ 'l-blob' : _vm.constant === 'BLOB' }},[_vm._v(\" \"+_vm._s(_vm.displayedConstant)+\" \")]):(_vm.isTextInput)?_c('div',{staticClass:\"c-automator-text-input-container\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.textContents),expression:\"textContents\"},{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.errorTooltip()),expression:\"errorTooltip()\"}],class:_vm.textInputClassObject(),domProps:{\"value\":(_vm.textContents)},on:{\"keyup\":function($event){return _vm.changeBlock()},\"focusin\":function($event){return _vm.handleFocus(true)},\"focusout\":function($event){return _vm.handleFocus(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.textContents=$event.target.value}}}),(_vm.dropdownOptions.length > 1)?_c('div',{staticClass:\"c-automator-close-text-input fa-solid fa-circle-xmark\",on:{\"click\":_vm.revertToDropdown}}):_vm._e()]):_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.dropdownSelection),expression:\"dropdownSelection\"}],class:_vm.dropdownClassObject(),on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.dropdownSelection=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},function($event){return _vm.changeBlock()}]}},_vm._l((['' ].concat( _vm.dropdownOptions)),function(target){return _c('option',{key:target,domProps:{\"value\":target}},[_vm._v(\" \"+_vm._s(target)+\" \")])}),0),(_vm.recursive && _vm.nextNodeCount > 0)?_c('AutomatorBlockSingleInput',{key:_vm.currentNodeOnPath,attrs:{\"constant\":_vm.unknownNext ? '...' : '',\"block\":_vm.block,\"block-target\":_vm.nextInputKey,\"patterns\":_vm.patterns,\"initial-selection\":_vm.nextInputValue,\"update-function\":_vm.updateFunction,\"recursive\":true,\"current-path\":_vm.currentPath + _vm.currentNodeOnPath}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","// Note: chevrotain doesn't play well with unicode regex\r\n/* eslint-disable require-unicode-regexp */\r\n/* eslint-disable camelcase */\r\nimport { createToken, Lexer } from \"chevrotain\";\r\n\r\nimport { DC } from \"../constants\";\r\n\r\nconst createCategory = name => createToken({ name, pattern: Lexer.NA, longer_alt: Identifier });\r\n\r\n// Shorthand for creating tokens and adding them to a list\r\nconst tokenLists = {};\r\n// eslint-disable-next-line max-params\r\nconst createInCategory = (category, name, pattern, props = {}) => {\r\n const categories = [category];\r\n if (props.extraCategories) categories.push(...props.extraCategories);\r\n const token = createToken({\r\n name,\r\n pattern,\r\n categories,\r\n longer_alt: Identifier,\r\n });\r\n const categoryName = Array.isArray(category) ? category[0].name : category.name;\r\n if (tokenLists[categoryName] === undefined) tokenLists[categoryName] = [];\r\n tokenLists[categoryName].push(token);\r\n const patternWord = pattern.toString().match(/^\\/([a-zA-Z0-9]*)\\/[a-zA-Z]*$/ui);\r\n if (patternWord && patternWord[1]) token.$autocomplete = patternWord[1];\r\n Object.assign(token, props);\r\n return token;\r\n};\r\n\r\nconst HSpace = createToken({\r\n name: \"HSpace\",\r\n pattern: /[ \\t]+/,\r\n group: Lexer.SKIPPED\r\n});\r\n\r\nconst EOL = createToken({\r\n name: \"EOL\",\r\n line_breaks: true,\r\n pattern: /[ \\t\\r]*\\n\\s*/,\r\n label: \"End of line\",\r\n});\r\n\r\nconst StringLiteral = createToken({\r\n name: \"StringLiteral\",\r\n pattern: /\".*\"/,\r\n});\r\n\r\nconst StringLiteralSingleQuote = createToken({\r\n name: \"StringLiteralSingleQuote\",\r\n pattern: /'.*'/,\r\n});\r\n\r\nconst Comment = createToken({\r\n name: \"Comment\",\r\n pattern: /(#|\\/\\/)[^\\n]*/,\r\n});\r\n\r\nconst NumberLiteral = createToken({\r\n name: \"NumberLiteral\",\r\n pattern: /-?(0|[1-9]\\d*)(\\.\\d+)?([eE][+-]?\\d+)?/,\r\n});\r\n\r\nconst BlackHoleStr = createToken({\r\n name: \"BlackHoleStr\",\r\n pattern: /[Bb][Hh][12]/,\r\n});\r\n\r\nconst Identifier = createToken({\r\n name: \"Identifier\",\r\n pattern: /[a-zA-Z_][a-zA-Z_0-9]*/,\r\n});\r\n\r\nconst ComparisonOperator = createToken({\r\n name: \"ComparisonOperator\",\r\n pattern: Lexer.NA,\r\n});\r\n\r\nconst AutomatorCurrency = createCategory(\"AutomatorCurrency\");\r\nconst PrestigeEvent = createCategory(\"PrestigeEvent\");\r\nconst StudyPath = createCategory(\"StudyPath\");\r\nconst TimeUnit = createCategory(\"TimeUnit\");\r\n\r\ncreateInCategory(ComparisonOperator, \"OpGTE\", />=/, {\r\n $autocomplete: \">=\",\r\n $compare: (a, b) => Decimal.gte(a, b),\r\n});\r\ncreateInCategory(ComparisonOperator, \"OpLTE\", /<=/, {\r\n $autocomplete: \"<=\",\r\n $compare: (a, b) => Decimal.lte(a, b),\r\n});\r\ncreateInCategory(ComparisonOperator, \"OpGT\", />/, {\r\n $autocomplete: \">\",\r\n $compare: (a, b) => Decimal.gt(a, b),\r\n});\r\ncreateInCategory(ComparisonOperator, \"OpLT\", / Decimal.lt(a, b),\r\n});\r\nconst OpEQ = createInCategory(ComparisonOperator, \"OpEQ\", /==/, {\r\n $compare: (a, b) => Decimal.eq(a, b),\r\n});\r\n// EqualSign is a single = which is defined for both comparisons and define\r\nconst EqualSign = createToken({\r\n name: \"EqualSign\",\r\n pattern: /=/,\r\n categories: ComparisonOperator,\r\n label: \"=\",\r\n longer_alt: OpEQ,\r\n});\r\nEqualSign.$compare = (a, b) => Decimal.eq(a, b);\r\n\r\ncreateInCategory(AutomatorCurrency, \"EP\", /ep/i, { $getter: () => Currency.eternityPoints.value });\r\ncreateInCategory(AutomatorCurrency, \"IP\", /ip/i, { $getter: () => Currency.infinityPoints.value });\r\ncreateInCategory(AutomatorCurrency, \"AM\", /am/i, { $getter: () => Currency.antimatter.value });\r\ncreateInCategory(AutomatorCurrency, \"DT\", /dt/i, { $getter: () => Currency.dilatedTime.value });\r\ncreateInCategory(AutomatorCurrency, \"TP\", /tp/i, { $getter: () => Currency.tachyonParticles.value });\r\ncreateInCategory(AutomatorCurrency, \"RG\", /rg/i, { $getter: () => new Decimal(Replicanti.galaxies.total) });\r\ncreateInCategory(AutomatorCurrency, \"RM\", /rm/i, { $getter: () => Currency.realityMachines.value });\r\n\r\ncreateInCategory(AutomatorCurrency, \"infinities\", /infinities/i, { $getter: () => Currency.infinities.value });\r\ncreateInCategory(AutomatorCurrency, \"bankedInfinities\", /banked[ \\t]+infinities/i, {\r\n $autocomplete: \"banked infinities\",\r\n $getter: () => Currency.infinitiesBanked.value\r\n});\r\ncreateInCategory(AutomatorCurrency, \"eternities\", /eternities/i, { $getter: () => Currency.eternities.value });\r\ncreateInCategory(AutomatorCurrency, \"realities\", /realities/i, { $getter: () => Currency.realities.value });\r\n\r\ncreateInCategory(AutomatorCurrency, \"PendingIP\", /pending[ \\t]+ip/i, {\r\n $autocomplete: \"pending IP\",\r\n $getter: () => (Player.canCrunch ? gainedInfinityPoints() : DC.D0)\r\n});\r\ncreateInCategory(AutomatorCurrency, \"PendingEP\", /pending[ \\t]+ep/i, {\r\n $autocomplete: \"pending EP\",\r\n $getter: () => (Player.canEternity ? gainedEternityPoints() : DC.D0)\r\n});\r\ncreateInCategory(AutomatorCurrency, \"PendingTP\", /pending[ \\t]+tp/i, {\r\n $autocomplete: \"pending TP\",\r\n $getter: () => (player.dilation.active ? getTachyonGain() : DC.D0),\r\n});\r\ncreateInCategory(AutomatorCurrency, \"PendingRM\", /pending[ \\t]+rm/i, {\r\n $autocomplete: \"pending RM\",\r\n $getter: () => (isRealityAvailable() ? MachineHandler.gainedRealityMachines : DC.D0)\r\n});\r\ncreateInCategory(AutomatorCurrency, \"PendingGlyphLevel\", /pending[ \\t]+glyph[ \\t]+level/i, {\r\n $autocomplete: \"pending Glyph level\",\r\n $getter: () => new Decimal(isRealityAvailable() ? gainedGlyphLevel().actualLevel : 0),\r\n});\r\n\r\ncreateInCategory(AutomatorCurrency, \"Rep\", /rep(licanti)?/i, {\r\n $autocomplete: \"rep\",\r\n $getter: () => Replicanti.amount,\r\n});\r\ncreateInCategory(AutomatorCurrency, \"TT\", /(tt|time theorems?)/i, {\r\n $autocomplete: \"TT\",\r\n $getter: () => Currency.timeTheorems.value,\r\n});\r\ncreateInCategory(AutomatorCurrency, \"TotalTT\", /total[ \\t]+tt/i, {\r\n $autocomplete: \"total TT\",\r\n $getter: () => player.timestudy.theorem.plus(TimeTheorems.calculateTimeStudiesCost()),\r\n});\r\n\r\ncreateInCategory(AutomatorCurrency, \"TotalCompletions\", /total[ \\t]+completions/i, {\r\n $autocomplete: \"total completions\",\r\n $getter: () => EternityChallenges.completions,\r\n});\r\n\r\ncreateInCategory(AutomatorCurrency, \"PendingCompletions\", /pending[ \\t]+completions/i, {\r\n $autocomplete: \"pending completions\",\r\n $getter: () => {\r\n // If we are not in an EC, pretend like we have a ton of completions so any check for sufficient\r\n // completions returns true\r\n if (!EternityChallenge.isRunning) return Decimal.NUMBER_MAX_VALUE;\r\n return EternityChallenge.current.gainedCompletionStatus.totalCompletions;\r\n }\r\n});\r\n\r\ncreateInCategory(AutomatorCurrency, \"FilterScore\", /filter[ \\t]+score/i, {\r\n $autocomplete: \"filter score\",\r\n $getter: () => {\r\n // If the filter isn't unlocked somehow, return the most negative number in order to ensure it's nonblocking\r\n if (!EffarigUnlock.glyphFilter.isUnlocked) return -Number.MAX_VALUE;\r\n const choices = GlyphSelection.glyphList(GlyphSelection.choiceCount, gainedGlyphLevel(),\r\n { isChoosingGlyph: false });\r\n const bestGlyph = AutoGlyphProcessor.pick(choices);\r\n return AutoGlyphProcessor.filterValue(bestGlyph);\r\n },\r\n $unlocked: () => EffarigUnlock.glyphFilter.isUnlocked,\r\n});\r\n\r\n// Space theorems can't be abbreviated as \"ST\" in the actual script content because then the lexer becomes unable\r\n// to match it due to the fact that \"start\" (ec/dilation) also begins with those characters. As a workaround, ST\r\n// uses the full string \"space theorems\" as does the \"total ST\" variant (for consistency)\r\ncreateInCategory(AutomatorCurrency, \"ST\", /space[ \\t]+theorems/i, {\r\n $autocomplete: \"space theorems\",\r\n $getter: () => V.availableST,\r\n $unlocked: () => V.spaceTheorems > 0,\r\n});\r\ncreateInCategory(AutomatorCurrency, \"TotalST\", /total[ \\t]+space[ \\t]+theorems/i, {\r\n $autocomplete: \"total space theorems\",\r\n $getter: () => V.spaceTheorems,\r\n $unlocked: () => V.spaceTheorems > 0,\r\n});\r\n\r\nfor (let i = 1; i <= 12; ++i) {\r\n const id = i;\r\n createInCategory(AutomatorCurrency, `EC${i}`, new RegExp(`ec${i} completions`, \"i\"), {\r\n $autocomplete: `ec${i} completions`,\r\n // eslint-disable-next-line no-loop-func\r\n $getter: () => EternityChallenge(id).completions\r\n });\r\n}\r\n\r\n// $prestigeLevel is used by things that wait for a prestige event. Something waiting for\r\n// eternity will be triggered by something waiting for reality, for example.\r\ncreateInCategory(PrestigeEvent, \"Infinity\", /infinity/i, {\r\n extraCategories: [StudyPath],\r\n $autobuyer: () => Autobuyer.bigCrunch,\r\n $autobuyerDurationMode: AUTO_CRUNCH_MODE.TIME,\r\n $autobuyerXHighestMode: AUTO_CRUNCH_MODE.X_HIGHEST,\r\n $autobuyerCurrencyMode: AUTO_CRUNCH_MODE.AMOUNT,\r\n $prestigeAvailable: () => Player.canCrunch,\r\n $prestige: () => bigCrunchResetRequest(true),\r\n $prestigeLevel: 1,\r\n $prestigeCurrency: \"IP\",\r\n $studyPath: TIME_STUDY_PATH.INFINITY_DIM,\r\n});\r\ncreateInCategory(PrestigeEvent, \"Eternity\", /eternity/i, {\r\n $autobuyer: () => Autobuyer.eternity,\r\n $autobuyerDurationMode: AUTO_ETERNITY_MODE.TIME,\r\n $autobuyerXHighestMode: AUTO_ETERNITY_MODE.X_HIGHEST,\r\n $autobuyerCurrencyMode: AUTO_ETERNITY_MODE.AMOUNT,\r\n $prestigeAvailable: () => Player.canEternity,\r\n $prestigeLevel: 2,\r\n $prestigeCurrency: \"EP\",\r\n $prestige: () => eternity(false, true),\r\n $respec: () => {\r\n player.respec = true;\r\n },\r\n});\r\ncreateInCategory(PrestigeEvent, \"Reality\", /reality/i, {\r\n $autobuyer: () => Autobuyer.reality,\r\n $autobuyerCurrencyMode: AUTO_REALITY_MODE.RM,\r\n $prestigeAvailable: () => isRealityAvailable(),\r\n $prestigeLevel: 3,\r\n $prestigeCurrency: \"RM\",\r\n $prestige: () => autoReality(),\r\n $respec: () => {\r\n player.reality.respec = true;\r\n },\r\n});\r\n\r\ncreateInCategory(StudyPath, \"Idle\", /idle/i, { $studyPath: TIME_STUDY_PATH.IDLE });\r\ncreateInCategory(StudyPath, \"Passive\", /passive/i, { $studyPath: TIME_STUDY_PATH.PASSIVE });\r\ncreateInCategory(StudyPath, \"Active\", /active/i, { $studyPath: TIME_STUDY_PATH.ACTIVE });\r\ncreateInCategory(StudyPath, \"Antimatter\", /antimatter/i, { $studyPath: TIME_STUDY_PATH.ANTIMATTER_DIM });\r\ncreateInCategory(StudyPath, \"Time\", /time/i, { $studyPath: TIME_STUDY_PATH.TIME_DIM });\r\ncreateInCategory(StudyPath, \"Light\", /light/i, { $studyPath: TIME_STUDY_PATH.LIGHT });\r\ncreateInCategory(StudyPath, \"Dark\", /dark/i, { $studyPath: TIME_STUDY_PATH.DARK });\r\n\r\ncreateInCategory(TimeUnit, \"Milliseconds\", /ms/i, {\r\n $autocomplete: \"ms\",\r\n $scale: 1,\r\n});\r\ncreateInCategory(TimeUnit, \"Seconds\", /s(ec(onds?)?)?/i, {\r\n $autocomplete: \"sec\",\r\n $scale: 1000,\r\n});\r\ncreateInCategory(TimeUnit, \"Minutes\", /m(in(utes?)?)?/i, {\r\n $autocomplete: \"min\",\r\n $scale: 60 * 1000,\r\n});\r\ncreateInCategory(TimeUnit, \"Hours\", /h(ours?)?/i, {\r\n $autocomplete: \"hours\",\r\n $scale: 3600 * 1000,\r\n});\r\n\r\nconst Keyword = createToken({\r\n name: \"Keyword\",\r\n pattern: Lexer.NA,\r\n longer_alt: Identifier,\r\n});\r\n\r\nconst keywordTokens = [];\r\nconst createKeyword = (name, pattern, props = {}) => {\r\n const categories = [Keyword];\r\n if (props.extraCategories) categories.push(...props.extraCategories);\r\n const token = createToken({\r\n name,\r\n pattern,\r\n categories,\r\n longer_alt: Identifier,\r\n });\r\n token.$autocomplete = name.toLocaleLowerCase();\r\n keywordTokens.push(token);\r\n Object.assign(token, props);\r\n return token;\r\n};\r\n\r\ncreateKeyword(\"Auto\", /auto/i);\r\ncreateKeyword(\"Buy\", /buy/i);\r\n// Necessary to hide it from Codemirror's tab auto-completion\r\ncreateKeyword(\"Blob\", /blob\\s\\s/i, {\r\n $unlocked: () => false,\r\n});\r\ncreateKeyword(\"If\", /if/i);\r\ncreateKeyword(\"Load\", /load/i);\r\ncreateKeyword(\"Notify\", /notify/i);\r\ncreateKeyword(\"Nowait\", /nowait/i);\r\ncreateKeyword(\"Off\", /off/i);\r\ncreateKeyword(\"On\", /on/i);\r\ncreateKeyword(\"Pause\", /pause/i);\r\n// Names are a little special, because they can be named anything (like ec12 or wait)\r\n// So, we consume the label at the same time as we consume the preset. In order to report\r\n// errors, we also match just the word name. And, we have to not match comments.\r\ncreateKeyword(\"Name\", /name([ \\t]+(\\/(?!\\/)|[^\\n#/])*)?/i);\r\ncreateKeyword(\"Id\", /id\\b([ \\t]+\\d)?/i);\r\ncreateKeyword(\"Purchase\", /purchase/i);\r\ncreateKeyword(\"Respec\", /respec/i);\r\ncreateKeyword(\"Restart\", /restart/i);\r\ncreateKeyword(\"Start\", /start/i);\r\ncreateKeyword(\"Stop\", /stop/i);\r\ncreateKeyword(\"Studies\", /studies/i);\r\ncreateKeyword(\"Unlock\", /unlock/i);\r\ncreateKeyword(\"Until\", /until/i);\r\ncreateKeyword(\"Use\", /use/i);\r\ncreateKeyword(\"Wait\", /wait/i);\r\ncreateKeyword(\"While\", /while/i);\r\ncreateKeyword(\"BlackHole\", /black[ \\t]+hole/i, {\r\n $autocomplete: \"black hole\",\r\n $unlocked: () => BlackHole(1).isUnlocked,\r\n});\r\ncreateKeyword(\"StoreGameTime\", /stored?[ \\t]+game[ \\t]+time/i, {\r\n $autocomplete: \"store game time\",\r\n $unlocked: () => Enslaved.isUnlocked,\r\n});\r\n\r\ncreateKeyword(\"Dilation\", /dilation/i);\r\ncreateKeyword(\"EC\", /ec/i);\r\ncreateKeyword(\"XHighest\", /x[ \\t]+highest/i, {\r\n $autocomplete: \"x highest\",\r\n});\r\n\r\n// We allow ECLiteral to consume lots of digits because that makes error reporting more\r\n// clear (it's nice to say ec123 is an invalid ec)\r\nconst ECLiteral = createToken({\r\n name: \"ECLiteral\",\r\n pattern: /ec[1-9][0-9]*/i,\r\n longer_alt: Identifier,\r\n});\r\n\r\nconst LCurly = createToken({ name: \"LCurly\", pattern: /[ \\t]*{/ });\r\nconst RCurly = createToken({ name: \"RCurly\", pattern: /[ \\t]*}/ });\r\nconst Comma = createToken({ name: \"Comma\", pattern: /,/ });\r\nconst Pipe = createToken({ name: \"Pipe\", pattern: /\\|/, label: \"|\" });\r\nconst Dash = createToken({ name: \"Dash\", pattern: /-/, label: \"-\" });\r\nconst Exclamation = createToken({ name: \"Exclamation\", pattern: /!/, label: \"!\" });\r\n\r\n// The order here is the order the lexer looks for tokens in.\r\nexport const automatorTokens = [\r\n HSpace, StringLiteral, StringLiteralSingleQuote, Comment, EOL,\r\n ComparisonOperator, ...tokenLists.ComparisonOperator,\r\n LCurly, RCurly, Comma, EqualSign, Pipe, Dash, Exclamation,\r\n BlackHoleStr, NumberLiteral,\r\n AutomatorCurrency, ...tokenLists.AutomatorCurrency,\r\n ECLiteral,\r\n Keyword, ...keywordTokens,\r\n PrestigeEvent, ...tokenLists.PrestigeEvent,\r\n StudyPath, ...tokenLists.StudyPath,\r\n TimeUnit, ...tokenLists.TimeUnit,\r\n Identifier,\r\n];\r\n\r\n// Labels only affect error messages and Diagrams.\r\nLCurly.LABEL = \"'{'\";\r\nRCurly.LABEL = \"'}'\";\r\nNumberLiteral.LABEL = \"Number\";\r\nComma.LABEL = \"❟\";\r\n\r\nexport const lexer = new Lexer(automatorTokens, {\r\n positionTracking: \"full\",\r\n ensureOptimizations: true\r\n});\r\n\r\n// The lexer uses an ID system that's separate from indices into the token array\r\nexport const tokenIds = [];\r\nfor (const token of lexer.lexerDefinition) {\r\n tokenIds[token.tokenTypeIdx] = token;\r\n}\r\n\r\n// We use this while building up the grammar\r\nexport const tokenMap = automatorTokens.mapToObject(e => e.name, e => e);\r\n\r\nconst automatorCurrencyNames = tokenLists.AutomatorCurrency.map(i => i.$autocomplete.toUpperCase());\r\n\r\nexport const standardizeAutomatorValues = function(x) {\r\n try {\r\n if (automatorCurrencyNames.includes(x.toUpperCase())) return x.toUpperCase();\r\n } catch {\r\n // This only happens if the input is a number or Decimal, in which case we don't attempt to change any formatting\r\n // and simply return\r\n return x;\r\n }\r\n for (const i of tokenLists.AutomatorCurrency) {\r\n // Check for a match of the full string.\r\n if (x.match(i.PATTERN) && x.match(i.PATTERN)[0].length === x.length) {\r\n return i.$autocomplete.toUpperCase();\r\n }\r\n }\r\n // If we get to this point, we haven't matched a currency name and instead assume it's a defined constant and\r\n // return it without any format changes since these are case-sensitive\r\n return x;\r\n};\r\n\r\n// In order to disallow individual words within command key words/phrases, we need to ignore certain patterns (mostly\r\n// ones with special regex characters), split the rest of them up across all spaces and tabs, and then flatten the\r\n// final resulting array. Note that this technically duplicates words present in multiple phrases (eg. \"pending\")\r\nconst ignoredPatterns = [\"Identifier\", \"LCurly\", \"RCurly\"];\r\nexport const forbiddenConstantPatterns = lexer.lexerDefinition\r\n .filter(p => !ignoredPatterns.includes(p.name))\r\n .map(p => p.PATTERN.source)\r\n .flatMap(p => ((p.includes(\"(\") || p.includes(\")\")) ? p : p.split(\"[ \\\\t]+\")));\r\n","import { standardizeAutomatorValues, tokenMap as T } from \"./lexer\";\r\n\r\n/**\r\n * Note: the $ shorthand for the parser object is required by Chevrotain. Don't mess with it.\r\n */\r\n\r\nconst presetSplitter = /name[ \\t]+(.+$)/ui;\r\nconst idSplitter = /id[ \\t]+(\\d)/ui;\r\n\r\nfunction prestigeNotify(flag) {\r\n if (!AutomatorBackend.isOn) return;\r\n const state = AutomatorBackend.stack.top.commandState;\r\n if (state && state.prestigeLevel !== undefined) {\r\n state.prestigeLevel = Math.max(state.prestigeLevel, flag);\r\n }\r\n}\r\n\r\nEventHub.logic.on(GAME_EVENT.BIG_CRUNCH_AFTER, () => prestigeNotify(T.Infinity.$prestigeLevel));\r\nEventHub.logic.on(GAME_EVENT.ETERNITY_RESET_AFTER, () => prestigeNotify(T.Eternity.$prestigeLevel));\r\nEventHub.logic.on(GAME_EVENT.REALITY_RESET_AFTER, () => prestigeNotify(T.Reality.$prestigeLevel));\r\n\r\n// Used by while and until - in order to get the text corrext, we need to invert the boolean if it's an until\r\n// eslint-disable-next-line max-params\r\nfunction compileConditionLoop(evalComparison, commands, ctx, isUntil) {\r\n return {\r\n run: () => {\r\n const loopStr = isUntil ? \"UNTIL\" : \"WHILE\";\r\n if (!evalComparison()) {\r\n AutomatorData.logCommandEvent(`Checked ${parseConditionalIntoText(ctx)} (${isUntil}),\r\n exiting loop at line ${AutomatorBackend.translateLineNumber(ctx.RCurly[0].startLine + 1) - 1}\r\n (end of ${loopStr} loop)`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION;\r\n }\r\n AutomatorBackend.push(commands);\r\n AutomatorData.logCommandEvent(`Checked ${parseConditionalIntoText(ctx)} (${!isUntil}),\r\n moving to line ${AutomatorBackend.translateLineNumber(ctx.LCurly[0].startLine + 1) - 1}\r\n (start of ${loopStr} loop)`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.SAME_INSTRUCTION;\r\n },\r\n blockCommands: commands,\r\n };\r\n}\r\n\r\n// Extracts the conditional out of a command and returns it as text\r\nfunction parseConditionalIntoText(ctx) {\r\n const comp = ctx.comparison[0].children;\r\n const getters = comp.compareValue.map(cv => {\r\n if (cv.children.AutomatorCurrency) return () => cv.children.AutomatorCurrency[0].image;\r\n const val = cv.children.$value;\r\n if (typeof val === \"string\") return () => val;\r\n return () => format(val, 2, 2);\r\n });\r\n const compareFn = comp.ComparisonOperator[0].image;\r\n return `${getters[0]()} ${compareFn} ${getters[1]()}`;\r\n}\r\n\r\n// Determines how much (prestige currency) the previous (layer) reset gave, for event logging\r\nfunction findLastPrestigeRecord(layer) {\r\n let addedECs, gainedEP;\r\n switch (layer) {\r\n case \"INFINITY\":\r\n return `${format(player.records.recentInfinities[0][1], 2)} IP`;\r\n case \"ETERNITY\":\r\n addedECs = AutomatorData.lastECCompletionCount;\r\n gainedEP = `${format(player.records.recentEternities[0][1], 2)} EP`;\r\n return addedECs === 0\r\n ? `${gainedEP}`\r\n : `${gainedEP}, ${addedECs} completions`;\r\n case \"REALITY\":\r\n return `${format(player.records.recentRealities[0][1], 2)} RM`;\r\n default:\r\n throw Error(`Unrecognized prestige ${layer} in Automator event log`);\r\n }\r\n}\r\n\r\nexport const AutomatorCommands = [\r\n {\r\n id: \"auto\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Auto);\r\n $.CONSUME(T.PrestigeEvent);\r\n $.OR([\r\n { ALT: () => $.CONSUME(T.On) },\r\n { ALT: () => $.CONSUME(T.Off) },\r\n { ALT: () => $.OR1([\r\n { ALT: () => $.SUBRULE($.duration) },\r\n { ALT: () => $.SUBRULE($.xHighest) },\r\n { ALT: () => $.SUBRULE($.currencyAmount) },\r\n ]) },\r\n ]);\r\n },\r\n // eslint-disable-next-line complexity\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.Auto[0].startLine;\r\n if (ctx.PrestigeEvent && ctx.currencyAmount) {\r\n const desired$ = ctx.PrestigeEvent[0].tokenType.$prestigeCurrency;\r\n const specified$ = ctx.currencyAmount[0].children.AutomatorCurrency[0].tokenType.name;\r\n if (desired$ !== specified$) {\r\n V.addError(ctx.currencyAmount, `AutomatorCurrency doesn't match prestige (${desired$} vs ${specified$})`,\r\n `Use ${desired$} for the specified prestige resource`);\r\n return false;\r\n }\r\n }\r\n\r\n if (!ctx.PrestigeEvent) return true;\r\n const advSetting = ctx.duration || ctx.xHighest;\r\n // Do not change to switch statement; T.XXX are Objects, not primitive values\r\n if (ctx.PrestigeEvent[0].tokenType === T.Infinity) {\r\n if (!Autobuyer.bigCrunch.isUnlocked) {\r\n V.addError(ctx.PrestigeEvent, \"Infinity autobuyer is not unlocked\",\r\n \"Complete the Big Crunch Autobuyer challenge to use this command\");\r\n return false;\r\n }\r\n if (advSetting && !EternityMilestone.bigCrunchModes.isReached) {\r\n V.addError((ctx.duration || ctx.xHighest)[0],\r\n \"Advanced Infinity autobuyer settings are not unlocked\",\r\n `Reach ${quantifyInt(\"Eternity\", EternityMilestone.bigCrunchModes.config.eternities)}\r\n to use this command`);\r\n return false;\r\n }\r\n }\r\n if (ctx.PrestigeEvent[0].tokenType === T.Eternity) {\r\n if (!EternityMilestone.autobuyerEternity.isReached) {\r\n V.addError(ctx.PrestigeEvent, \"Eternity autobuyer is not unlocked\",\r\n `Reach ${quantifyInt(\"Eternity\", EternityMilestone.autobuyerEternity.config.eternities)}\r\n to use this command`);\r\n return false;\r\n }\r\n if (advSetting && !RealityUpgrade(13).isBought) {\r\n V.addError((ctx.duration || ctx.xHighest)[0],\r\n \"Advanced Eternity autobuyer settings are not unlocked\",\r\n \"Purchase the Reality Upgrade which unlocks advanced Eternity autobuyer settings\");\r\n return false;\r\n }\r\n }\r\n if (ctx.PrestigeEvent[0].tokenType === T.Reality) {\r\n if (!RealityUpgrade(25).isBought) {\r\n V.addError(ctx.PrestigeEvent, \"Reality autobuyer is not unlocked\",\r\n \"Purchase the Reality Upgrade which unlocks the Reality autobuyer\");\r\n return false;\r\n }\r\n if (advSetting) {\r\n V.addError((ctx.duration || ctx.xHighest)[0],\r\n \"Auto Reality cannot be set to a duration or x highest\",\r\n \"Use RM for Auto Reality\");\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n compile: ctx => {\r\n const isReality = ctx.PrestigeEvent[0].tokenType === T.Reality;\r\n const on = Boolean(ctx.On || ctx.duration || ctx.xHighest || ctx.currencyAmount);\r\n const duration = ctx.duration ? ctx.duration[0].children.$value : undefined;\r\n const xHighest = ctx.xHighest ? ctx.xHighest[0].children.$value : undefined;\r\n const fixedAmount = ctx.currencyAmount ? ctx.currencyAmount[0].children.$value : undefined;\r\n const durationMode = ctx.PrestigeEvent[0].tokenType.$autobuyerDurationMode;\r\n const xHighestMode = ctx.PrestigeEvent[0].tokenType.$autobuyerXHighestMode;\r\n const fixedMode = ctx.PrestigeEvent[0].tokenType.$autobuyerCurrencyMode;\r\n const autobuyer = ctx.PrestigeEvent[0].tokenType.$autobuyer();\r\n return () => {\r\n autobuyer.isActive = on;\r\n let currSetting = \"\";\r\n if (duration !== undefined) {\r\n autobuyer.mode = durationMode;\r\n autobuyer.time = duration / 1000;\r\n // Can't do the units provided in the script because it's been parsed away like 4 layers up the call stack\r\n currSetting = `${autobuyer.time > 1000 ? formatInt(autobuyer.time) : quantify(\"second\", autobuyer.time)}`;\r\n } else if (xHighest !== undefined) {\r\n autobuyer.mode = xHighestMode;\r\n autobuyer.xHighest = new Decimal(xHighest);\r\n currSetting = `${format(xHighest, 2, 2)} times highest`;\r\n } else if (fixedAmount !== undefined) {\r\n autobuyer.mode = fixedMode;\r\n if (isReality) {\r\n autobuyer.rm = new Decimal(fixedAmount);\r\n currSetting = `${format(autobuyer.rm, 2)} RM`;\r\n } else {\r\n autobuyer.amount = new Decimal(fixedAmount);\r\n currSetting = `${fixedAmount} ${ctx.PrestigeEvent[0].image === \"infinity\" ? \"IP\" : \"EP\"}`;\r\n }\r\n }\r\n // Settings are drawn from the actual automator text; it's not feasible to parse out all the settings\r\n // for every combination of autobuyers when they get turned off\r\n const settingString = (autobuyer.isActive && currSetting !== \"\") ? `(Setting: ${currSetting})` : \"\";\r\n AutomatorData.logCommandEvent(`Automatic ${ctx.PrestigeEvent[0].image}\r\n turned ${autobuyer.isActive ? \"ON\" : \"OFF\"} ${settingString}`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => {\r\n const duration = ctx.duration\r\n ? `${ctx.duration[0].children.NumberLiteral[0].image} ${ctx.duration[0].children.TimeUnit[0].image}`\r\n : undefined;\r\n const xHighest = ctx.xHighest ? ctx.xHighest[0].children.$value : undefined;\r\n const fixedAmount = ctx.currencyAmount\r\n ? `${ctx.currencyAmount[0].children.NumberLiteral[0].image}` +\r\n ` ${ctx.currencyAmount[0].children.AutomatorCurrency[0].image.toUpperCase()}`\r\n : undefined;\r\n const on = Boolean(ctx.On);\r\n let input = \"\";\r\n\r\n if (duration) input = duration;\r\n else if (xHighest) input = `${xHighest} x highest`;\r\n else if (fixedAmount) input = `${fixedAmount}`;\r\n else input = (on ? \"ON\" : \"OFF\");\r\n\r\n return {\r\n singleSelectionInput: ctx.PrestigeEvent[0].tokenType.name.toUpperCase(),\r\n singleTextInput: input,\r\n ...automatorBlocksMap.AUTO\r\n };\r\n }\r\n },\r\n {\r\n id: \"blackHole\",\r\n rule: $ => () => {\r\n $.CONSUME(T.BlackHole);\r\n $.OR([\r\n { ALT: () => $.CONSUME(T.On) },\r\n { ALT: () => $.CONSUME(T.Off) },\r\n ]);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.BlackHole[0].startLine;\r\n if (!BlackHole(1).isUnlocked) {\r\n if (Enslaved.isRunning || Pelle.isDisabled(\"blackhole\")) {\r\n V.addError(ctx.BlackHole[0], \"Black Hole is disabled in your current Reality\",\r\n \"Return to normal Reality conditions to use this command again\");\r\n } else {\r\n V.addError(ctx.BlackHole[0], \"Black Hole is not unlocked\",\r\n \"Unlock the Black Hole in order to pause or unpause it\");\r\n }\r\n return false;\r\n }\r\n return true;\r\n },\r\n compile: ctx => {\r\n const on = Boolean(ctx.On);\r\n return () => {\r\n if (on === BlackHoles.arePaused) BlackHoles.togglePause();\r\n AutomatorData.logCommandEvent(`Black Holes toggled ${ctx.On ? \"ON\" : \"OFF\"}`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n singleSelectionInput: ctx.On ? \"ON\" : \"OFF\",\r\n ...automatorBlocksMap[\"BLACK HOLE\"]\r\n })\r\n },\r\n {\r\n id: \"blob\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Blob);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Blob[0].startLine;\r\n return true;\r\n },\r\n // This is an easter egg, it shouldn't do anything\r\n compile: () => () => AUTOMATOR_COMMAND_STATUS.SKIP_INSTRUCTION,\r\n blockify: () => ({\r\n ...automatorBlocksMap.BLOB,\r\n })\r\n },\r\n {\r\n id: \"comment\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Comment);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Comment[0].startLine;\r\n return true;\r\n },\r\n // Comments should be no-ops\r\n compile: () => () => AUTOMATOR_COMMAND_STATUS.SKIP_INSTRUCTION,\r\n blockify: ctx => ({\r\n ...automatorBlocksMap.COMMENT,\r\n singleTextInput: ctx.Comment[0].image.replace(/(#|\\/\\/)\\s?/u, \"\"),\r\n })\r\n },\r\n {\r\n id: \"ifBlock\",\r\n rule: $ => () => {\r\n $.CONSUME(T.If);\r\n $.SUBRULE($.comparison);\r\n $.CONSUME(T.LCurly);\r\n $.CONSUME(T.EOL);\r\n $.SUBRULE($.block);\r\n $.CONSUME(T.RCurly);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.If[0].startLine;\r\n return V.checkBlock(ctx, ctx.If);\r\n },\r\n compile: (ctx, C) => {\r\n const evalComparison = C.visit(ctx.comparison);\r\n const commands = C.visit(ctx.block);\r\n return {\r\n run: S => {\r\n // If the commandState is empty, it means we haven't evaluated the if yet\r\n if (S.commandState !== null) return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n // We use this flag to make \"single step\" advance to the next command after the if when the block ends\r\n S.commandState = {\r\n advanceOnPop: true,\r\n ifEndLine: ctx.RCurly[0].startLine\r\n };\r\n if (!evalComparison()) {\r\n AutomatorData.logCommandEvent(`Checked ${parseConditionalIntoText(ctx)} (false),\r\n skipping to line ${AutomatorBackend.translateLineNumber(ctx.RCurly[0].startLine + 1)}`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n AutomatorBackend.push(commands);\r\n AutomatorData.logCommandEvent(`Checked ${parseConditionalIntoText(ctx)} (true),\r\n entering IF block`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.SAME_INSTRUCTION;\r\n },\r\n blockCommands: commands,\r\n };\r\n },\r\n blockify: (ctx, B) => {\r\n const commands = [];\r\n B.visit(ctx.block, commands);\r\n const comparison = B.visit(ctx.comparison);\r\n return {\r\n nest: commands,\r\n ...automatorBlocksMap.IF,\r\n ...comparison,\r\n genericInput1: standardizeAutomatorValues(comparison.genericInput1),\r\n genericInput2: standardizeAutomatorValues(comparison.genericInput2)\r\n };\r\n }\r\n },\r\n {\r\n id: \"notify\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Notify);\r\n $.OR([\r\n { ALT: () => $.CONSUME(T.StringLiteral) },\r\n { ALT: () => $.CONSUME(T.StringLiteralSingleQuote) },\r\n ]);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Notify[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => {\r\n const notifyText = ctx.StringLiteral || ctx.StringLiteralSingleQuote;\r\n return () => {\r\n GameUI.notify.automator(`Automator: ${notifyText[0].image}`);\r\n AutomatorData.logCommandEvent(`NOTIFY call: ${notifyText[0].image}`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n ...automatorBlocksMap.NOTIFY,\r\n singleTextInput: (ctx.StringLiteral || ctx.StringLiteralSingleQuote)[0].image,\r\n })\r\n },\r\n {\r\n // Note: this has to appear before pause\r\n id: \"pauseTime\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Pause);\r\n $.OR([\r\n { ALT: () => $.SUBRULE($.duration) },\r\n { ALT: () => $.CONSUME(T.Identifier) },\r\n ]);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.Pause[0].startLine;\r\n let duration;\r\n if (ctx.Identifier) {\r\n if (!V.isValidVarFormat(ctx.Identifier[0], AUTOMATOR_VAR_TYPES.DURATION)) {\r\n V.addError(ctx, `Constant ${ctx.Identifier[0].image} is not a valid time duration constant`,\r\n `Ensure that ${ctx.Identifier[0].image} is a number of seconds less than\r\n ${format(Number.MAX_VALUE / 1000)}`);\r\n return false;\r\n }\r\n const lookup = V.lookupVar(ctx.Identifier[0], AUTOMATOR_VAR_TYPES.DURATION);\r\n duration = lookup ? lookup.value : lookup;\r\n } else {\r\n duration = V.visit(ctx.duration);\r\n }\r\n ctx.$duration = duration;\r\n return ctx.$duration !== undefined;\r\n },\r\n compile: ctx => {\r\n const duration = ctx.$duration;\r\n return S => {\r\n let timeString;\r\n if (ctx.duration) {\r\n const c = ctx.duration[0].children;\r\n timeString = `${c.NumberLiteral[0].image} ${c.TimeUnit[0].image}`;\r\n } else {\r\n // This is the case for a defined constant; its value was parsed out during validation\r\n timeString = TimeSpan.fromMilliseconds(duration);\r\n }\r\n if (S.commandState === null) {\r\n S.commandState = { timeMs: 0 };\r\n AutomatorData.logCommandEvent(`Pause started (waiting ${timeString})`, ctx.startLine);\r\n } else {\r\n S.commandState.timeMs += Math.max(Time.unscaledDeltaTime.milliseconds.toNumber(), AutomatorBackend.currentInterval);\r\n }\r\n const finishPause = S.commandState.timeMs >= duration;\r\n if (finishPause) {\r\n AutomatorData.logCommandEvent(`Pause finished (waited ${timeString})`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => {\r\n let blockArg;\r\n if (ctx.duration) {\r\n const c = ctx.duration[0].children;\r\n blockArg = `${c.NumberLiteral[0].image} ${c.TimeUnit[0].image}`;\r\n } else {\r\n blockArg = `${ctx.Identifier[0].image}`;\r\n }\r\n return {\r\n ...automatorBlocksMap.PAUSE,\r\n singleTextInput: blockArg\r\n };\r\n }\r\n },\r\n {\r\n id: \"prestige\",\r\n rule: $ => () => {\r\n $.CONSUME(T.PrestigeEvent);\r\n $.OPTION(() => $.CONSUME(T.Nowait));\r\n $.OPTION1(() => $.CONSUME(T.Respec));\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.PrestigeEvent[0].startLine;\r\n\r\n if (ctx.PrestigeEvent && ctx.PrestigeEvent[0].tokenType === T.Eternity &&\r\n !EternityMilestone.autobuyerEternity.isReached) {\r\n V.addError(ctx.PrestigeEvent, \"Eternity autobuyer is not unlocked\",\r\n `Reach ${quantifyInt(\"Eternity\", EternityMilestone.autobuyerEternity.config.eternities)}\r\n to use this command`);\r\n return false;\r\n }\r\n\r\n if (ctx.PrestigeEvent && ctx.PrestigeEvent[0].tokenType === T.Reality && !RealityUpgrade(25).isBought) {\r\n V.addError(ctx.PrestigeEvent, \"Reality autobuyer is not unlocked\",\r\n \"Purchase the Reality Upgrade which unlocks the Reality autobuyer\");\r\n return false;\r\n }\r\n\r\n if (ctx.PrestigeEvent && ctx.PrestigeEvent[0].tokenType === T.Infinity && ctx.Respec) {\r\n V.addError(ctx.Respec, \"There's no 'respec' for infinity\",\r\n \"Remove 'respec' from the command\");\r\n }\r\n return true;\r\n },\r\n compile: ctx => {\r\n const nowait = ctx.Nowait !== undefined;\r\n const respec = ctx.Respec !== undefined;\r\n const prestigeToken = ctx.PrestigeEvent[0].tokenType;\r\n return () => {\r\n const available = prestigeToken.$prestigeAvailable();\r\n if (!available) {\r\n if (!nowait) return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n AutomatorData.logCommandEvent(`${ctx.PrestigeEvent.image} attempted, but skipped due to NOWAIT`,\r\n ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (respec) prestigeToken.$respec();\r\n prestigeToken.$prestige();\r\n const prestigeName = ctx.PrestigeEvent[0].image.toUpperCase();\r\n AutomatorData.logCommandEvent(`${prestigeName} triggered (${findLastPrestigeRecord(prestigeName)})`,\r\n ctx.startLine);\r\n // In the prestigeToken.$prestige() line above, performing a reality reset has code internal to the call\r\n // which makes the automator restart. However, in that case we also need to update the execution state here,\r\n // or else the restarted automator will immediately advance lines and always skip the first command\r\n return (prestigeName === \"REALITY\" && AutomatorBackend.state.forceRestart)\r\n ? AUTOMATOR_COMMAND_STATUS.RESTART\r\n : AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n ...automatorBlocksMap[\r\n ctx.PrestigeEvent[0].tokenType.name.toUpperCase()\r\n ],\r\n nowait: ctx.Nowait !== undefined,\r\n respec: ctx.Respec !== undefined\r\n })\r\n },\r\n {\r\n id: \"startDilation\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Start);\r\n $.CONSUME(T.Dilation);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Start[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => () => {\r\n if (player.dilation.active) {\r\n AutomatorData.logCommandEvent(`Start Dilation encountered but ignored due to already being dilated`,\r\n ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (startDilatedEternity(true)) {\r\n AutomatorData.logCommandEvent(`Dilation entered`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION;\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n },\r\n blockify: () => ({ singleSelectionInput: \"DILATION\", ...automatorBlocksMap.START })\r\n },\r\n {\r\n id: \"startEC\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Start);\r\n $.SUBRULE($.eternityChallenge);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Start[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => {\r\n const ecNumber = ctx.eternityChallenge[0].children.$ecNumber;\r\n return () => {\r\n const ec = EternityChallenge(ecNumber);\r\n if (ec.isRunning) {\r\n AutomatorData.logCommandEvent(`Start EC encountered but ignored due to already being in the specified EC`,\r\n ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (!EternityChallenge(ecNumber).isUnlocked) {\r\n if (!TimeStudy.eternityChallenge(ecNumber).purchase(true)) {\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n }\r\n }\r\n if (ec.start(true)) {\r\n AutomatorData.logCommandEvent(`Eternity Challenge ${ecNumber} started`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION;\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n singleSelectionInput: \"EC\",\r\n singleTextInput: ctx.eternityChallenge[0].children.$ecNumber,\r\n ...automatorBlocksMap.START\r\n })\r\n },\r\n {\r\n id: \"storeGameTime\",\r\n rule: $ => () => {\r\n $.CONSUME(T.StoreGameTime);\r\n $.OR([\r\n { ALT: () => $.CONSUME(T.On) },\r\n { ALT: () => $.CONSUME(T.Off) },\r\n { ALT: () => $.CONSUME(T.Use) },\r\n ]);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.StoreGameTime[0].startLine;\r\n if (!Enslaved.isUnlocked) {\r\n V.addError(ctx.StoreGameTime[0], \"You do not yet know how to store game time\",\r\n \"Unlock the ability to store game time\");\r\n return false;\r\n }\r\n return true;\r\n },\r\n compile: ctx => {\r\n if (ctx.Use) return () => {\r\n if (Enslaved.isUnlocked) {\r\n Enslaved.useStoredTime(false);\r\n AutomatorData.logCommandEvent(`Stored game time used`, ctx.startLine);\r\n } else {\r\n AutomatorData.logCommandEvent(`Attempted to use stored game time, but failed (not unlocked yet)`,\r\n ctx.startLine);\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n };\r\n const on = Boolean(ctx.On);\r\n return () => {\r\n if (on !== player.celestials.enslaved.isStoring) Enslaved.toggleStoreBlackHole();\r\n AutomatorData.logCommandEvent(`Storing game time toggled ${ctx.On ? \"ON\" : \"OFF\"}`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n // eslint-disable-next-line no-nested-ternary\r\n singleSelectionInput: ctx.Use ? \"USE\" : (ctx.On ? \"ON\" : \"OFF\"),\r\n ...automatorBlocksMap[\"STORE GAME TIME\"]\r\n })\r\n },\r\n {\r\n id: \"studiesBuy\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Studies);\r\n $.OPTION(() => $.CONSUME(T.Nowait));\r\n $.CONSUME(T.Purchase);\r\n $.OR([\r\n { ALT: () => $.SUBRULE($.studyList) },\r\n { ALT: () => $.CONSUME1(T.Identifier) },\r\n ]);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.Studies[0].startLine;\r\n if (ctx.Identifier) {\r\n if (!V.isValidVarFormat(ctx.Identifier[0], AUTOMATOR_VAR_TYPES.STUDIES)) {\r\n V.addError(ctx, `Constant ${ctx.Identifier[0].image} is not a valid Time Study constant`,\r\n `Ensure that ${ctx.Identifier[0].image} is a properly-formatted Time Study string`);\r\n return false;\r\n }\r\n const varInfo = V.lookupVar(ctx.Identifier[0], AUTOMATOR_VAR_TYPES.STUDIES);\r\n ctx.$studies = varInfo.value;\r\n ctx.$studies.image = ctx.Identifier[0].image;\r\n } else if (ctx.studyList) {\r\n ctx.$studies = V.visit(ctx.studyList);\r\n }\r\n return true;\r\n },\r\n compile: ctx => {\r\n const studies = ctx.$studies;\r\n if (ctx.Nowait === undefined) return () => {\r\n let prePurchasedStudies = 0;\r\n let purchasedStudies = 0;\r\n let finalPurchasedTS;\r\n for (const tsNumber of studies.normal) {\r\n if (TimeStudy(tsNumber).isBought) prePurchasedStudies++;\r\n else if (TimeStudy(tsNumber).purchase(true)) purchasedStudies++;\r\n else finalPurchasedTS = finalPurchasedTS ?? tsNumber;\r\n }\r\n if (prePurchasedStudies + purchasedStudies < studies.normal.length) {\r\n if (prePurchasedStudies + purchasedStudies === 0) {\r\n AutomatorData.logCommandEvent(`Could not purchase any of the specified Time Studies`, ctx.startLine);\r\n }\r\n if (purchasedStudies > 0 && finalPurchasedTS) {\r\n AutomatorData.logCommandEvent(`Purchased ${quantifyInt(\"Time Study\", purchasedStudies)} and stopped at\r\n Time Study ${finalPurchasedTS}, waiting to attempt to purchase more Time Studies`, ctx.startLine);\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n }\r\n const hasEC = studies.ec ? TimeStudy.eternityChallenge(studies.ec).isBought : false;\r\n if (!studies.ec || (hasEC && !studies.startEC)) {\r\n AutomatorData.logCommandEvent(`Purchased all specified Time Studies`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n const unlockedEC = TimeStudy.eternityChallenge(studies.ec).purchase(true);\r\n if (hasEC || unlockedEC) {\r\n if (studies.startEC) {\r\n EternityChallenge(studies.ec).start(true);\r\n if (EternityChallenge(studies.ec).isRunning) {\r\n AutomatorData.logCommandEvent(`Purchased all specified Time Studies, then unlocked and started running\r\n Eternity Challenge ${studies.ec}`, ctx.startLine);\r\n } else {\r\n AutomatorData.logCommandEvent(`Purchased all specified Time Studies and unlocked Eternity Challenge\r\n ${studies.ec}, but failed to start it`, ctx.startLine);\r\n }\r\n } else {\r\n AutomatorData.logCommandEvent(`Purchased all specified Time Studies and unlocked Eternity Challenge\r\n ${studies.ec}`, ctx.startLine);\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n return () => {\r\n for (const tsNumber of studies.normal) TimeStudy(tsNumber).purchase(true);\r\n if (!studies.ec || TimeStudy.eternityChallenge(studies.ec).isBought) {\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n TimeStudy.eternityChallenge(studies.ec).purchase(true);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n singleTextInput: ctx.$studies.image,\r\n nowait: ctx.Nowait !== undefined,\r\n ...automatorBlocksMap[\"STUDIES PURCHASE\"]\r\n })\r\n },\r\n {\r\n id: \"studiesLoad\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Studies);\r\n $.OPTION(() => $.CONSUME(T.Nowait));\r\n $.CONSUME(T.Load);\r\n $.OR([\r\n { ALT: () => $.CONSUME1(T.Id) },\r\n { ALT: () => $.CONSUME1(T.Name) },\r\n ]);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.Studies[0].startLine;\r\n\r\n if (ctx.Id) {\r\n const split = idSplitter.exec(ctx.Id[0].image);\r\n\r\n if (!split || ctx.Id[0].isInsertedInRecovery) {\r\n V.addError(ctx, \"Missing preset id\",\r\n \"Provide the id of a saved study preset slot from the Time Studies page\");\r\n return false;\r\n }\r\n\r\n const id = parseInt(split[1], 10);\r\n if (id < 1 || id > 6) {\r\n V.addError(ctx.Id[0], `Could not find a preset with an id of ${id}`,\r\n \"Type in a valid id (1 - 6) for your study preset\");\r\n return false;\r\n }\r\n ctx.$presetIndex = id;\r\n return true;\r\n }\r\n\r\n if (ctx.Name) {\r\n const split = presetSplitter.exec(ctx.Name[0].image);\r\n\r\n if (!split || ctx.Name[0].isInsertedInRecovery) {\r\n V.addError(ctx, \"Missing preset name\",\r\n \"Provide the name of a saved study preset from the Time Studies page\");\r\n return false;\r\n }\r\n\r\n // If it's a name, we check to make sure it exists:\r\n const presetIndex = player.timestudy.presets.findIndex(e => e.name === split[1]) + 1;\r\n if (presetIndex === 0) {\r\n V.addError(ctx.Name[0], `Could not find preset named ${split[1]} (Note: Names are case-sensitive)`,\r\n \"Check to make sure you typed in the correct name for your study preset\");\r\n return false;\r\n }\r\n ctx.$presetIndex = presetIndex;\r\n return true;\r\n }\r\n return false;\r\n },\r\n compile: ctx => {\r\n const presetIndex = ctx.$presetIndex;\r\n return () => {\r\n const imported = new TimeStudyTree(player.timestudy.presets[presetIndex - 1].studies);\r\n const beforeCount = GameCache.currentStudyTree.value.purchasedStudies.length;\r\n TimeStudyTree.commitToGameState(imported.purchasedStudies, true, imported.startEC);\r\n const afterCount = GameCache.currentStudyTree.value.purchasedStudies.length;\r\n // Check if there are still any unbought studies from the preset after attempting to commit it all;\r\n // if there are then we keep trying on this line until there aren't, unless we are given nowait\r\n const missingStudyCount = imported.purchasedStudies\r\n .filter(s => !GameCache.currentStudyTree.value.purchasedStudies.includes(s)).length;\r\n\r\n const presetRepresentation = ctx.Name ? ctx.Name[0].image : ctx.Id[0].image;\r\n\r\n if (missingStudyCount === 0) {\r\n AutomatorData.logCommandEvent(`Fully loaded study preset ${presetRepresentation}`, ctx.startLine);\r\n } else if (afterCount > beforeCount) {\r\n AutomatorData.logCommandEvent(`Partially loaded study preset ${presetRepresentation}\r\n (missing ${quantifyInt(\"study\", missingStudyCount)})`, ctx.startLine);\r\n }\r\n return ctx.Nowait !== undefined || missingStudyCount === 0\r\n ? AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION\r\n : AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n singleSelectionInput: ctx.Name ? \"NAME\" : \"ID\",\r\n singleTextInput: ctx.Name ? player.timestudy.presets[ctx.$presetIndex - 1].name : ctx.$presetIndex,\r\n nowait: ctx.Nowait !== undefined,\r\n ...automatorBlocksMap[\"STUDIES LOAD\"]\r\n })\r\n },\r\n {\r\n id: \"studiesRespec\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Studies);\r\n $.CONSUME(T.Respec);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Studies[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => () => {\r\n player.respec = true;\r\n AutomatorData.logCommandEvent(`Turned study respec ON`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n },\r\n blockify: () => automatorBlocksMap[\"STUDIES RESPEC\"]\r\n },\r\n {\r\n id: \"unlockDilation\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Unlock);\r\n $.OPTION(() => $.CONSUME(T.Nowait));\r\n $.CONSUME(T.Dilation);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Unlock[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => {\r\n const nowait = ctx.Nowait !== undefined;\r\n return () => {\r\n if (PlayerProgress.dilationUnlocked()) {\r\n AutomatorData.logCommandEvent(`Skipped dilation unlock due to being already unlocked`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n const unlockedThisTick = TimeStudy.dilation.purchase(true);\r\n if (unlockedThisTick) {\r\n AutomatorData.logCommandEvent(`Unlocked Dilation`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (nowait) {\r\n AutomatorData.logCommandEvent(`Skipped dilation unlock due to lack of requirements (NOWAIT)`,\r\n ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n singleSelectionInput: \"DILATION\",\r\n nowait: ctx.Nowait !== undefined,\r\n ...automatorBlocksMap.UNLOCK\r\n })\r\n },\r\n {\r\n id: \"unlockEC\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Unlock);\r\n $.OPTION(() => $.CONSUME(T.Nowait));\r\n $.SUBRULE($.eternityChallenge);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Unlock[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => {\r\n const nowait = ctx.Nowait !== undefined;\r\n const ecNumber = ctx.eternityChallenge[0].children.$ecNumber;\r\n return () => {\r\n if (EternityChallenge(ecNumber).isUnlocked) {\r\n AutomatorData.logCommandEvent(`Skipped EC ${ecNumber} unlock due to being already unlocked`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (nowait) {\r\n AutomatorData.logCommandEvent(`EC ${ecNumber} unlock failed and skipped (NOWAIT)`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n const purchased = TimeStudy.eternityChallenge(ecNumber).purchase(true);\r\n if (purchased) {\r\n AutomatorData.logCommandEvent(`EC ${ecNumber} unlocked`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n singleSelectionInput: \"EC\",\r\n singleTextInput: ctx.eternityChallenge[0].children.$ecNumber,\r\n nowait: ctx.Nowait !== undefined,\r\n ...automatorBlocksMap.UNLOCK\r\n })\r\n },\r\n {\r\n id: \"untilLoop\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Until);\r\n $.OR([\r\n { ALT: () => $.SUBRULE($.comparison) },\r\n { ALT: () => $.CONSUME(T.PrestigeEvent) },\r\n ]);\r\n $.CONSUME(T.LCurly);\r\n $.CONSUME(T.EOL);\r\n $.SUBRULE($.block);\r\n $.CONSUME(T.RCurly);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.Until[0].startLine;\r\n return V.checkBlock(ctx, ctx.Until);\r\n },\r\n compile: (ctx, C) => {\r\n const commands = C.visit(ctx.block);\r\n if (ctx.comparison) {\r\n const evalComparison = C.visit(ctx.comparison);\r\n return compileConditionLoop(() => !evalComparison(), commands, ctx, true);\r\n }\r\n const prestigeLevel = ctx.PrestigeEvent[0].tokenType.$prestigeLevel;\r\n let prestigeName;\r\n switch (ctx.PrestigeEvent[0].tokenType) {\r\n case T.Infinity:\r\n prestigeName = \"Infinity\";\r\n break;\r\n case T.Eternity:\r\n prestigeName = \"Eternity\";\r\n break;\r\n case T.Reality:\r\n prestigeName = \"Reality\";\r\n break;\r\n default:\r\n throw Error(\"Unrecognized prestige layer in until loop\");\r\n }\r\n return {\r\n run: S => {\r\n if (S.commandState === null) {\r\n S.commandState = { prestigeLevel: 0 };\r\n }\r\n if (S.commandState.prestigeLevel >= prestigeLevel) {\r\n AutomatorData.logCommandEvent(`${prestigeName} prestige has occurred, exiting until loop`,\r\n ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n AutomatorBackend.push(commands);\r\n AutomatorData.logCommandEvent(`${prestigeName} prestige has not occurred yet, moving to line\r\n ${AutomatorBackend.translateLineNumber(ctx.LCurly[0].startLine + 1)} (start of until loop)`,\r\n ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.SAME_INSTRUCTION;\r\n },\r\n blockCommands: commands\r\n };\r\n },\r\n blockify: (ctx, B) => {\r\n const commands = [];\r\n B.visit(ctx.block, commands);\r\n const comparison = B.visit(ctx.comparison);\r\n if (ctx.comparison) {\r\n return {\r\n nest: commands,\r\n ...automatorBlocksMap.UNTIL,\r\n ...comparison,\r\n genericInput1: standardizeAutomatorValues(comparison.genericInput1),\r\n genericInput2: standardizeAutomatorValues(comparison.genericInput2)\r\n };\r\n }\r\n return {\r\n genericInput1: ctx.PrestigeEvent[0].tokenType.name.toUpperCase(),\r\n nest: commands,\r\n ...automatorBlocksMap.UNTIL\r\n };\r\n }\r\n },\r\n {\r\n id: \"waitCondition\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Wait);\r\n $.SUBRULE($.comparison);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Wait[0].startLine;\r\n return true;\r\n },\r\n compile: (ctx, C) => () => {\r\n const evalComparison = C.visit(ctx.comparison);\r\n const doneWaiting = evalComparison();\r\n if (doneWaiting) {\r\n const timeWaited = TimeSpan.fromMilliseconds(Date.now() - AutomatorData.waitStart).toStringShort();\r\n if (AutomatorData.isWaiting) {\r\n AutomatorData.logCommandEvent(`Continuing after WAIT\r\n (${parseConditionalIntoText(ctx)} is true, after ${timeWaited})`, ctx.startLine);\r\n } else {\r\n AutomatorData.logCommandEvent(`WAIT skipped (${parseConditionalIntoText(ctx)} is already true)`,\r\n ctx.startLine);\r\n }\r\n AutomatorData.isWaiting = false;\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (!AutomatorData.isWaiting) {\r\n AutomatorData.logCommandEvent(`Started WAIT for ${parseConditionalIntoText(ctx)}`, ctx.startLine);\r\n AutomatorData.waitStart = Date.now();\r\n }\r\n AutomatorData.isWaiting = true;\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n },\r\n blockify: (ctx, B) => {\r\n const commands = [];\r\n B.visit(ctx.block, commands);\r\n const comparison = B.visit(ctx.comparison);\r\n return {\r\n nest: commands,\r\n ...automatorBlocksMap.WAIT,\r\n ...comparison,\r\n genericInput1: standardizeAutomatorValues(comparison.genericInput1),\r\n genericInput2: standardizeAutomatorValues(comparison.genericInput2)\r\n };\r\n }\r\n },\r\n {\r\n id: \"waitEvent\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Wait);\r\n $.CONSUME(T.PrestigeEvent);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Wait[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => {\r\n const prestigeLevel = ctx.PrestigeEvent[0].tokenType.$prestigeLevel;\r\n return S => {\r\n if (S.commandState === null) {\r\n S.commandState = { prestigeLevel: 0 };\r\n }\r\n const prestigeOccurred = S.commandState.prestigeLevel >= prestigeLevel;\r\n const prestigeName = ctx.PrestigeEvent[0].image.toUpperCase();\r\n if (prestigeOccurred) {\r\n const timeWaited = TimeSpan.fromMilliseconds(Date.now() - AutomatorData.waitStart).toStringShort();\r\n AutomatorData.logCommandEvent(`Continuing after WAIT (${prestigeName} occurred for\r\n ${findLastPrestigeRecord(prestigeName)}, after ${timeWaited})`, ctx.startLine);\r\n AutomatorData.isWaiting = false;\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (!AutomatorData.isWaiting) {\r\n AutomatorData.logCommandEvent(`Started WAIT for ${prestigeName}`, ctx.startLine);\r\n AutomatorData.waitStart = Date.now();\r\n }\r\n AutomatorData.isWaiting = true;\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n };\r\n },\r\n blockify: ctx => ({\r\n genericInput1: ctx.PrestigeEvent[0].tokenType.name.toUpperCase(),\r\n ...automatorBlocksMap.WAIT\r\n })\r\n },\r\n {\r\n id: \"waitBlackHole\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Wait);\r\n $.CONSUME(T.BlackHole);\r\n $.OR([\r\n { ALT: () => $.CONSUME(T.Off) },\r\n { ALT: () => $.CONSUME(T.BlackHoleStr) },\r\n ]);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Wait[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => () => {\r\n const off = Boolean(ctx.Off);\r\n // This input has the format \"bh#\"\r\n const holeID = ctx.BlackHoleStr ? Number(ctx.BlackHoleStr[0].image.charAt(2)) : 0;\r\n const bhCond = off ? !BlackHole(1).isActive : BlackHole(holeID).isActive;\r\n const bhStr = off ? \"inactive Black Holes\" : `active Black Hole ${holeID}`;\r\n if (bhCond) {\r\n const timeWaited = TimeSpan.fromMilliseconds(Date.now() - AutomatorData.waitStart).toStringShort();\r\n AutomatorData.logCommandEvent(`Continuing after WAIT (waited ${timeWaited} for ${bhStr})`,\r\n ctx.startLine);\r\n AutomatorData.isWaiting = false;\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;\r\n }\r\n if (!AutomatorData.isWaiting) {\r\n AutomatorData.logCommandEvent(`Started WAIT for ${bhStr}`, ctx.startLine);\r\n AutomatorData.waitStart = Date.now();\r\n }\r\n AutomatorData.isWaiting = true;\r\n return AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;\r\n },\r\n blockify: ctx => ({\r\n genericInput1: \"BLACK HOLE\",\r\n // Note: In this particular case we aren't actually storing a comparison operator. This is still okay\r\n // because internally this is just the variable for the second slot and has no special treatment beyond that\r\n compOperator: ctx.BlackHoleStr ? ctx.BlackHoleStr[0].image.toUpperCase() : \"OFF\",\r\n ...automatorBlocksMap.WAIT\r\n })\r\n },\r\n {\r\n id: \"whileLoop\",\r\n rule: $ => () => {\r\n $.CONSUME(T.While);\r\n $.SUBRULE($.comparison);\r\n $.CONSUME(T.LCurly);\r\n $.CONSUME(T.EOL);\r\n $.SUBRULE($.block);\r\n $.CONSUME(T.RCurly);\r\n },\r\n validate: (ctx, V) => {\r\n ctx.startLine = ctx.While[0].startLine;\r\n return V.checkBlock(ctx, ctx.While);\r\n },\r\n compile: (ctx, C) => compileConditionLoop(C.visit(ctx.comparison), C.visit(ctx.block), ctx, false),\r\n blockify: (ctx, B) => {\r\n const commands = [];\r\n B.visit(ctx.block, commands);\r\n const comparison = B.visit(ctx.comparison);\r\n return {\r\n nest: commands,\r\n ...automatorBlocksMap.WHILE,\r\n ...comparison,\r\n genericInput1: standardizeAutomatorValues(comparison.genericInput1),\r\n genericInput2: standardizeAutomatorValues(comparison.genericInput2)\r\n };\r\n }\r\n },\r\n {\r\n id: \"stop\",\r\n rule: $ => () => {\r\n $.CONSUME(T.Stop);\r\n },\r\n validate: ctx => {\r\n ctx.startLine = ctx.Stop[0].startLine;\r\n return true;\r\n },\r\n compile: ctx => () => {\r\n AutomatorData.logCommandEvent(`Automator execution stopped with STOP command`, ctx.startLine);\r\n return AUTOMATOR_COMMAND_STATUS.HALT;\r\n },\r\n blockify: () => ({\r\n ...automatorBlocksMap.STOP,\r\n })\r\n }\r\n];\r\n","import { EOF, Parser } from \"chevrotain\";\r\n\r\nimport { automatorTokens, tokenMap as T } from \"./lexer\";\r\nimport { AutomatorCommands } from \"./automator-commands\";\r\n\r\n// ----------------- parser -----------------\r\nclass AutomatorParser extends Parser {\r\n constructor() {\r\n super(automatorTokens, {\r\n recoveryEnabled: true,\r\n outputCst: true,\r\n nodeLocationTracking: \"full\",\r\n });\r\n\r\n // eslint-disable-next-line consistent-this\r\n const $ = this;\r\n\r\n $.RULE(\"script\", () => $.SUBRULE($.block));\r\n\r\n $.RULE(\"block\", () => $.MANY_SEP({\r\n SEP: T.EOL,\r\n DEF: () => $.OPTION(() => $.SUBRULE($.command)),\r\n }));\r\n\r\n // This is a bit ugly looking. Chevrotain uses Function.toString() to do crazy\r\n // optimizations. That clashes with our desire to build our list of commands dynamically.\r\n // We are creating a function body like this one:\r\n // $.RULE(\"command\", () => {\r\n // $.OR(\r\n // $.c1 || ($.c1 = [\r\n // { ALT: () => $.SUBRULE($.badCommand) },\r\n // { ALT: () => $.SUBRULE($.auto) },\r\n // { ALT: () => $.SUBRULE($.define) },\r\n // { ALT: () => $.SUBRULE($.ifBlock) },\r\n\r\n const commandAlts = [\r\n \"$.SUBRULE($.badCommand)\",\r\n \"$.CONSUME(EOF)\",\r\n ];\r\n\r\n for (const cmd of AutomatorCommands) {\r\n $.RULE(cmd.id, cmd.rule($));\r\n commandAlts.push(`$.SUBRULE($.${cmd.id})`);\r\n }\r\n\r\n const commandOr = window.Function(\"$\", \"EOF\", `\r\n return () => $.OR($.c1 || ($.c1 = [\r\n ${commandAlts.map(e => `{ ALT: () => ${e} },`).join(\"\\n\")}]));\r\n `);\r\n\r\n $.RULE(\"command\", commandOr($, EOF));\r\n\r\n $.RULE(\"badCommand\", () => $.AT_LEAST_ONE(() => $.SUBRULE($.badCommandToken)),\r\n { resyncEnabled: false, }\r\n );\r\n\r\n $.RULE(\"badCommandToken\", () => $.OR([\r\n { ALT: () => $.CONSUME(T.Identifier) },\r\n { ALT: () => $.CONSUME(T.NumberLiteral) },\r\n { ALT: () => $.CONSUME(T.ComparisonOperator) },\r\n ]), { resyncEnabled: false, });\r\n\r\n $.RULE(\"comparison\", () => {\r\n $.SUBRULE($.compareValue);\r\n $.CONSUME(T.ComparisonOperator);\r\n $.SUBRULE2($.compareValue);\r\n });\r\n\r\n $.RULE(\"compareValue\", () => $.OR([\r\n { ALT: () => $.CONSUME(T.NumberLiteral) },\r\n { ALT: () => $.CONSUME(T.Identifier) },\r\n { ALT: () => $.CONSUME(T.AutomatorCurrency) },\r\n ]));\r\n\r\n $.RULE(\"duration\", () => {\r\n $.CONSUME(T.NumberLiteral);\r\n $.CONSUME(T.TimeUnit);\r\n });\r\n\r\n $.RULE(\"eternityChallenge\", () => $.OR([\r\n {\r\n ALT: () => {\r\n $.CONSUME(T.EC);\r\n $.CONSUME(T.NumberLiteral);\r\n }\r\n },\r\n { ALT: () => $.CONSUME(T.ECLiteral) }\r\n ]));\r\n\r\n $.RULE(\"studyList\", () => {\r\n $.AT_LEAST_ONE(() => $.SUBRULE($.studyListEntry));\r\n // Support the |3 export format for EC number and optionally the ending exclamation point\r\n $.OPTION(() => {\r\n $.CONSUME(T.Pipe);\r\n $.CONSUME1(T.NumberLiteral, { LABEL: \"ECNumber\" });\r\n $.OPTION1(() => $.CONSUME(T.Exclamation));\r\n });\r\n }, { resyncEnabled: false });\r\n\r\n $.RULE(\"studyListEntry\", () => {\r\n $.OR([\r\n { ALT: () => $.SUBRULE($.studyRange) },\r\n { ALT: () => $.CONSUME(T.NumberLiteral) },\r\n { ALT: () => $.CONSUME(T.StudyPath) },\r\n ]);\r\n $.OPTION(() => $.CONSUME(T.Comma));\r\n });\r\n\r\n $.RULE(\"studyRange\", () => {\r\n $.CONSUME(T.NumberLiteral, { LABEL: \"firstStudy\" });\r\n $.CONSUME(T.Dash);\r\n $.CONSUME1(T.NumberLiteral, { LABEL: \"lastStudy\" });\r\n });\r\n\r\n $.RULE(\"xHighest\", () => {\r\n $.CONSUME(T.NumberLiteral);\r\n $.CONSUME(T.XHighest);\r\n });\r\n\r\n $.RULE(\"currencyAmount\", () => {\r\n $.CONSUME(T.NumberLiteral);\r\n $.CONSUME(T.AutomatorCurrency);\r\n });\r\n\r\n // Very important to call this after all the rules have been setup.\r\n // otherwise the parser may not work correctly as it will lack information\r\n // derived from the self analysis.\r\n $.performSelfAnalysis();\r\n }\r\n}\r\n\r\nexport const parser = new AutomatorParser();\r\n","import { lexer, tokenMap as T } from \"./lexer\";\r\nimport { AutomatorCommands } from \"./automator-commands\";\r\nimport { parser } from \"./parser\";\r\nimport { PlayerProgress } from \"../player-progress\";\r\n\r\nconst BaseVisitor = parser.getBaseCstVisitorConstructorWithDefaults();\r\n\r\nclass Validator extends BaseVisitor {\r\n constructor(rawText) {\r\n super();\r\n this.validateVisitor();\r\n this.reset(rawText);\r\n // Commands can provide validation hooks; we might also have some here\r\n for (const cmd of AutomatorCommands) {\r\n if (!cmd.validate) continue;\r\n const ownMethod = this[cmd.id];\r\n this[cmd.id] = ctx => {\r\n if (!cmd.validate(ctx, this)) return;\r\n if (ownMethod) ownMethod.call(this, ctx);\r\n };\r\n }\r\n\r\n const lexResult = lexer.tokenize(rawText);\r\n const tokens = lexResult.tokens;\r\n parser.input = tokens;\r\n this.parseResult = parser.script();\r\n this.visit(this.parseResult);\r\n this.addLexerErrors(lexResult.errors);\r\n this.addParserErrors(parser.errors, tokens);\r\n this.modifyErrorMessages();\r\n this.errorCount = lexResult.errors.length + this.errors.length + parser.errors.length;\r\n }\r\n\r\n addLexerErrors(errors) {\r\n for (const err of errors) {\r\n this.errors.push({\r\n startLine: err.line,\r\n startOffset: err.offset,\r\n endOffset: err.offset + err.length,\r\n info: `Unexpected characters: ${this.rawText.substr(err.offset, err.length)}`,\r\n tip: `${this.rawText.substr(err.offset, err.length)} cannot be part of a command, remove them`\r\n });\r\n }\r\n }\r\n\r\n static combinePositionRanges(r1, r2) {\r\n return {\r\n startLine: Math.min(r1.startLine, r2.startLine),\r\n startOffset: Math.min(r1.startOffset, r2.startOffset),\r\n endOffset: Math.max(r1.endOffset, r2.endOffset),\r\n };\r\n }\r\n\r\n addParserErrors(errors, tokens) {\r\n for (const parseError of errors) {\r\n let err = Validator.combinePositionRanges(\r\n Validator.getPositionRange(parseError.previousToken),\r\n Validator.getPositionRange(parseError.token));\r\n // In some cases, at the end of the script we don't get any useful tokens out of the parse error\r\n if (parseError.token.tokenType.name === \"EOF\" && parseError.previousToken.tokenType.name === \"EOF\") {\r\n err = Validator.combinePositionRanges(err, Validator.getPositionRange(tokens[tokens.length - 1]));\r\n }\r\n // Deal with literal EOL in error message:\r\n err.info = parseError.message.replace(/'\\n\\s*'/ui, \"End of line\");\r\n const isEndToken = parseError.token.tokenType.name === \"EOF\" || parseError.token.tokenType.name === \"EOL\";\r\n if (parseError.name === \"NoViableAltException\") {\r\n if (!isEndToken) {\r\n err.info = `Unexpected input ${parseError.token.image}`;\r\n err.tip = `Remove ${parseError.token.image}`;\r\n }\r\n } else if (parseError.name === \"EarlyExitException\") {\r\n err.info = \"Unexpected end of command\";\r\n err.tip = \"Complete the command by adding the other parameters\";\r\n }\r\n this.errors.push(err);\r\n }\r\n }\r\n\r\n static getPositionRange(ctx) {\r\n let pos = {\r\n startLine: Number.MAX_VALUE,\r\n startOffset: Number.MAX_VALUE,\r\n endOffset: 0,\r\n };\r\n if (ctx === undefined || ctx === null) return pos;\r\n if (ctx.startOffset !== undefined) {\r\n return {\r\n startLine: ctx.startLine,\r\n startOffset: ctx.startOffset,\r\n endOffset: ctx.endOffset,\r\n };\r\n }\r\n if (ctx.location !== undefined && ctx.location.startOffset !== undefined) {\r\n return ctx.location;\r\n }\r\n if (ctx.children && !Array.isArray(ctx.children)) return Validator.getPositionRange(ctx.children);\r\n if (Array.isArray(ctx)) {\r\n return ctx.reduce((prev, el) => Validator.combinePositionRanges(prev, Validator.getPositionRange(el)), pos);\r\n }\r\n for (const k in ctx) {\r\n if (!Object.prototype.hasOwnProperty.call(ctx, k) || !Array.isArray(ctx[k])) continue;\r\n pos = Validator.combinePositionRanges(pos, Validator.getPositionRange(ctx[k]));\r\n }\r\n return pos;\r\n }\r\n\r\n addError(ctx, errInfo, errTip) {\r\n const pos = Validator.getPositionRange(ctx);\r\n pos.info = errInfo;\r\n pos.tip = errTip;\r\n this.errors.push(pos);\r\n }\r\n\r\n // There are a few errors generated internally in chevrotain.js which are scanned for and modified in here and\r\n // given appropriate fixing tips and minor formatting adjustments, or are alternatively marked as redundant and\r\n // filtered out in other parts of the code. This isn't necessarily comprehensive, but should hopefully cover the\r\n // most common cases.\r\n modifyErrorMessages() {\r\n // This function also gets called during loading the savefile, and if it somehow fails to execute properly then\r\n // the game cache is never invalidated. This only seems to happen on re-initialization after full completions,\r\n // but that means that in many cases a lot of endgame values are never cleared. Therefore we shortcut the whole\r\n // function if the automator isn't unlocked or it attempts to error-check an empty script\r\n if (!Player.automatorUnlocked || AutomatorData.currentScriptText() === undefined) return;\r\n\r\n const modifiedErrors = [];\r\n let lastLine = 0;\r\n for (const err of this.errors.sort((a, b) => a.startLine - b.startLine)) {\r\n // For some reason chevrotain occasionally gives NaN for error location but it seems like this only ever\r\n // happens on the last line of the script, so we can fill in that value to fix it\r\n if (isNaN(err.startLine)) {\r\n err.startLine = AutomatorData.currentScriptText().split(\"\\n\").length;\r\n }\r\n\r\n // Only take one error from each line. In many cases multiple errors will arise from the same line due to how\r\n // the parser works, and many of them will be useless or redundant. Also sometimes chevrotain fails to generate\r\n // a line for an error, in which case it's usually a redundant error which can be ignored.\r\n if (err.startLine === lastLine) {\r\n continue;\r\n }\r\n\r\n // Errors that already have tips are more reliable in terms of knowing what they're pointing out; if there's\r\n // already a tip, don't bother trying to parse and guess at its meaning.\r\n if (err.tip) {\r\n modifiedErrors.push(err);\r\n lastLine = err.startLine;\r\n continue;\r\n }\r\n\r\n if (err.info.match(/EOF but found.*\\}/gu)) {\r\n err.info = err.info.replaceAll(\"--> \", \"[\").replaceAll(\" <--\", \"]\");\r\n err.tip = \"Remove }. Parser halted at this line and may miss errors farther down the script.\";\r\n } else if (err.info.match(/found.*\\}/gu)) {\r\n err.info = err.info.replaceAll(\"--> \", \"[\").replaceAll(\" <--\", \"]\");\r\n err.tip = \"Remove }\";\r\n } else if (err.info.match(/Expecting/gu)) {\r\n err.info = err.info.replaceAll(\"--> \", \"[\").replaceAll(\" <--\", \"]\");\r\n err.tip = \"Use the appropriate type of data in the command as specified in the command help\";\r\n } else if (err.info.match(/End of line/gu)) {\r\n err.tip = \"Provide the remaining arguments to complete the incomplete command\";\r\n } else if (err.info.match(/EOF but found:/gu)) {\r\n err.tip = \"Remove extra command argument\";\r\n } else {\r\n err.tip = \"This error's cause is unclear\";\r\n }\r\n modifiedErrors.push(err);\r\n lastLine = err.startLine;\r\n }\r\n\r\n for (const err of modifiedErrors) {\r\n err.startLine = AutomatorBackend.translateLineNumber(err.startLine);\r\n }\r\n\r\n this.errors = modifiedErrors;\r\n }\r\n\r\n reset(rawText) {\r\n this.rawText = rawText;\r\n this.variables = {};\r\n this.errors = [];\r\n }\r\n\r\n checkTimeStudyNumber(token) {\r\n const tsNumber = parseFloat(token.image);\r\n if (!TimeStudy(tsNumber) || (TimeStudy(tsNumber).isTriad && (!Ra.canBuyTriad && !PlayerProgress.mendingUnlocked()))) {\r\n this.addError(token, `Invalid Time Study identifier ${tsNumber}`,\r\n `Make sure you copied or typed in your time study IDs correctly`);\r\n return 0;\r\n }\r\n return tsNumber;\r\n }\r\n\r\n lookupVar(identifier, type) {\r\n const varName = identifier.image;\r\n const varInfo = {};\r\n const constants = player.reality.automator.constants;\r\n if (!Object.keys(constants).includes(varName)) {\r\n this.addError(identifier, `Variable ${varName} has not been defined`,\r\n `Use the definition panel to define ${varName} in order to reference it, or check for typos`);\r\n return undefined;\r\n }\r\n const value = constants[varName];\r\n\r\n let tree;\r\n switch (type) {\r\n case AUTOMATOR_VAR_TYPES.NUMBER:\r\n varInfo.value = new Decimal(value);\r\n break;\r\n case AUTOMATOR_VAR_TYPES.STUDIES:\r\n tree = new TimeStudyTree(value);\r\n varInfo.value = {\r\n normal: tree.selectedStudies.map(ts => ts.id),\r\n ec: tree.ec,\r\n startEC: tree.startEC,\r\n };\r\n break;\r\n case AUTOMATOR_VAR_TYPES.DURATION:\r\n varInfo.value = parseInt(1000 * value, 10);\r\n break;\r\n default:\r\n throw new Error(\"Unrecognized variable format in automator constant lookup\");\r\n }\r\n\r\n return varInfo;\r\n }\r\n\r\n isValidVarFormat(identifier, type) {\r\n const varName = identifier.image;\r\n const constants = player.reality.automator.constants;\r\n if (!Object.keys(constants).includes(varName)) return false;\r\n const value = constants[varName];\r\n\r\n switch (type) {\r\n case AUTOMATOR_VAR_TYPES.NUMBER:\r\n // We can't rely on native Decimal parsing here because it largely just discards input past invalid\r\n // characters and constructs something based on the start of the input string. Notably, this makes\r\n // things like new Decimal(\"11,21,31\") return 11 instead of something indicating an error.\r\n return value.match(/^-?(0|[1-9]\\d*)(\\.\\d+)?([eE][+-]?\\d+)?$/u);\r\n case AUTOMATOR_VAR_TYPES.STUDIES:\r\n return TimeStudyTree.isValidImportString(value);\r\n case AUTOMATOR_VAR_TYPES.DURATION:\r\n return !Number.isNaN(parseInt(1000 * value, 10));\r\n default:\r\n throw new Error(\"Unrecognized variable format in automator constant lookup\");\r\n }\r\n }\r\n\r\n duration(ctx) {\r\n if (ctx.$value) return ctx.$value;\r\n if (!ctx.TimeUnit || ctx.TimeUnit[0].isInsertedInRecovery) {\r\n this.addError(ctx, \"Missing time unit\", \"Provide a unit of time (eg. seconds or minutes)\");\r\n return undefined;\r\n }\r\n const value = parseFloat(ctx.NumberLiteral[0].image) * ctx.TimeUnit[0].tokenType.$scale;\r\n if (isNaN(value)) {\r\n this.addError(ctx, \"Error parsing duration\", \"Provide a properly-formatted number for time\");\r\n return undefined;\r\n }\r\n ctx.$value = value;\r\n return ctx.$value;\r\n }\r\n\r\n xHighest(ctx) {\r\n if (ctx.$value) return ctx.$value;\r\n if (!ctx.NumberLiteral || ctx.NumberLiteral[0].isInsertedInRecovery) {\r\n this.addError(ctx, \"Missing multiplier\", \"Provide a multiplier to set the autobuyer to\");\r\n return undefined;\r\n }\r\n ctx.$value = new Decimal(ctx.NumberLiteral[0].image);\r\n return ctx.$value;\r\n }\r\n\r\n currencyAmount(ctx) {\r\n if (ctx.$value) return ctx.$value;\r\n if (!ctx.NumberLiteral || ctx.NumberLiteral[0].isInsertedInRecovery) {\r\n this.addError(ctx, \"Missing amount\", \"Provide a threshold to set the autobuyer to\");\r\n return undefined;\r\n }\r\n ctx.$value = new Decimal(ctx.NumberLiteral[0].image);\r\n return ctx.$value;\r\n }\r\n\r\n studyRange(ctx, studiesOut) {\r\n if (!ctx.firstStudy || ctx.firstStudy[0].isInsertedInRecovery ||\r\n !ctx.lastStudy || ctx.lastStudy[0].isInsertedInRecovery) {\r\n this.addError(ctx, \"Missing Time Study number in range\",\r\n \"Provide starting and ending IDs for Time Study number ranges\");\r\n return;\r\n }\r\n const first = this.checkTimeStudyNumber(ctx.firstStudy[0]);\r\n const last = this.checkTimeStudyNumber(ctx.lastStudy[0]);\r\n if (!first || !last || !studiesOut) return;\r\n for (let id = first; id <= last; ++id) {\r\n if (TimeStudy(id)) studiesOut.push(id);\r\n }\r\n }\r\n\r\n studyListEntry(ctx, studiesOut) {\r\n if (ctx.studyRange) {\r\n this.visit(ctx.studyRange, studiesOut);\r\n return;\r\n }\r\n if (ctx.NumberLiteral) {\r\n if (ctx.NumberLiteral[0].isInsertedInRecovery) {\r\n this.addError(ctx, \"Missing Time Study number\", \"Provide a Time Study ID to purchase\");\r\n return;\r\n }\r\n const id = this.checkTimeStudyNumber(ctx.NumberLiteral[0]);\r\n if (id) studiesOut.push(id);\r\n return;\r\n }\r\n if (ctx.StudyPath) {\r\n const pathId = ctx.StudyPath[0].tokenType.$studyPath;\r\n const pathStudies = NormalTimeStudies.paths[pathId];\r\n studiesOut.push(...pathStudies);\r\n }\r\n }\r\n\r\n studyList(ctx) {\r\n if (ctx.$cached !== undefined) return ctx.$cached;\r\n const studiesOut = [];\r\n for (const sle of ctx.studyListEntry) this.visit(sle, studiesOut);\r\n const positionRange = Validator.getPositionRange(ctx);\r\n ctx.$cached = {\r\n normal: studiesOut,\r\n image: this.rawText.substr(positionRange.startOffset, positionRange.endOffset - positionRange.startOffset + 1),\r\n ec: 0,\r\n startEC: false,\r\n };\r\n if (ctx.ECNumber) {\r\n if (ctx.ECNumber.isInsertedInRecovery) {\r\n this.addError(ctx.Pipe[0], \"Missing Eternity Challenge number\",\r\n \"Specify which Eternity Challenge is being referred to\");\r\n }\r\n const ecNumber = parseFloat(ctx.ECNumber[0].image);\r\n if (!Number.isInteger(ecNumber) || ecNumber < 0 || ecNumber > 12) {\r\n this.addError(ctx.ECNumber, `Invalid Eternity Challenge ID ${ecNumber}`,\r\n `Eternity Challenge ${ecNumber} does not exist, use an integer between ${format(1)} and ${format(12)}`);\r\n }\r\n ctx.$cached.ec = ecNumber;\r\n }\r\n if (ctx.Exclamation) ctx.$cached.startEC = true;\r\n return ctx.$cached;\r\n }\r\n\r\n compareValue(ctx) {\r\n if (ctx.NumberLiteral) {\r\n ctx.$value = new Decimal(ctx.NumberLiteral[0].image);\r\n } else if (ctx.Identifier) {\r\n if (!this.isValidVarFormat(ctx.Identifier[0], AUTOMATOR_VAR_TYPES.NUMBER)) {\r\n this.addError(ctx, `Constant ${ctx.Identifier[0].image} cannot be used for comparison`,\r\n `Ensure that ${ctx.Identifier[0].image} contains a properly-formatted number and not a Time Study string`);\r\n }\r\n const varLookup = this.lookupVar(ctx.Identifier[0], AUTOMATOR_VAR_TYPES.NUMBER);\r\n if (varLookup) ctx.$value = ctx.Identifier[0].image;\r\n }\r\n }\r\n\r\n comparison(ctx) {\r\n super.comparison(ctx);\r\n if (!ctx.compareValue || ctx.compareValue[0].recoveredNode ||\r\n ctx.compareValue.length !== 2 || ctx.compareValue[1].recoveredNode) {\r\n this.addError(ctx, \"Missing value for comparison\", \"Ensure that the comparison has two values\");\r\n }\r\n if (!ctx.ComparisonOperator || ctx.ComparisonOperator[0].isInsertedInRecovery) {\r\n this.addError(ctx, \"Missing comparison operator (<, >, <=, >=)\", \"Insert the appropriate comparison operator\");\r\n return;\r\n }\r\n if (ctx.ComparisonOperator[0].tokenType === T.OpEQ || ctx.ComparisonOperator[0].tokenType === T.EqualSign) {\r\n this.addError(ctx, \"Please use an inequality comparison (>, <, >=, <=)\",\r\n \"Comparisons cannot be done with equality, only with inequality operators\");\r\n }\r\n }\r\n\r\n badCommand(ctx) {\r\n const firstToken = ctx.badCommandToken[0].children;\r\n const firstTokenType = Object.keys(firstToken)[0];\r\n this.addError(firstToken[firstTokenType][0], `Unrecognized command \"${firstToken[firstTokenType][0].image}\"`,\r\n \"Check to make sure you have typed in the command name correctly\");\r\n }\r\n\r\n eternityChallenge(ctx) {\r\n let errToken, ecNumber;\r\n if (ctx.ECLiteral) {\r\n ecNumber = parseFloat(ctx.ECLiteral[0].image.substr(2));\r\n errToken = ctx.ECLiteral[0];\r\n } else if (ctx.NumberLiteral) {\r\n ecNumber = parseFloat(ctx.NumberLiteral[0].image);\r\n errToken = ctx.NumberLiteral[0];\r\n } else {\r\n this.addError(ctx, \"Missing Eternity Challenge number\",\r\n \"Specify which Eternity Challenge is being referred to\");\r\n return;\r\n }\r\n if (!Number.isInteger(ecNumber) || ecNumber < 1 || ecNumber > 12) {\r\n this.addError(errToken, `Invalid Eternity Challenge ID ${ecNumber}`,\r\n `Eternity Challenge ${ecNumber} does not exist, use an integer between ${format(1)} and ${format(12)}`);\r\n }\r\n ctx.$ecNumber = ecNumber;\r\n }\r\n\r\n checkBlock(ctx, commandToken) {\r\n let hadError = false;\r\n if (!ctx.RCurly || ctx.RCurly[0].isInsertedInRecovery) {\r\n this.addError(commandToken[0], \"Missing closing }\",\r\n \"This loop has mismatched brackets, add a corresponding } on another line to close the loop\");\r\n hadError = true;\r\n }\r\n if (!ctx.LCurly || ctx.LCurly[0].isInsertedInRecovery) {\r\n this.addError(commandToken[0], \"Missing opening {\",\r\n \"This line has an extra } closing a loop which does not exist, remove the }\");\r\n hadError = true;\r\n }\r\n return !hadError;\r\n }\r\n\r\n script(ctx) {\r\n if (ctx.block) this.visit(ctx.block);\r\n ctx.variables = this.variables;\r\n }\r\n}\r\n\r\nclass Compiler extends BaseVisitor {\r\n constructor() {\r\n super();\r\n // Commands provide compilation hooks; we might also have some here\r\n for (const cmd of AutomatorCommands) {\r\n if (!cmd.compile) continue;\r\n const ownMethod = this[cmd.id];\r\n // eslint-disable-next-line no-loop-func\r\n this[cmd.id] = (ctx, output) => {\r\n // For the compiler, we don't bother doing the default recursive visitation behavior\r\n if (ownMethod && ownMethod !== super[cmd.id]) ownMethod.call(this, ctx, output);\r\n let compiled = cmd.compile(ctx, this);\r\n if (typeof compiled === \"function\") compiled = { run: compiled };\r\n compiled.lineNumber = ctx.startLine;\r\n output.push(compiled);\r\n };\r\n }\r\n this.validateVisitor();\r\n }\r\n\r\n comparison(ctx) {\r\n const getters = ctx.compareValue.map(cv => {\r\n if (cv.children.AutomatorCurrency) return cv.children.AutomatorCurrency[0].tokenType.$getter;\r\n const val = cv.children.$value;\r\n if (typeof val === \"string\") return () => player.reality.automator.constants[val];\r\n return () => val;\r\n });\r\n // Some currencies are locked and should always evaluate to false if they're attempted to be used\r\n const canUseInComp = ctx.compareValue.map(cv => {\r\n if (cv.children.AutomatorCurrency) {\r\n const unlockedFn = cv.children.AutomatorCurrency[0].tokenType.$unlocked;\r\n return unlockedFn ? unlockedFn() : true;\r\n }\r\n // In this case, it's a constant (either automator-defined or literal)\r\n return true;\r\n });\r\n\r\n if (!canUseInComp[0] || !canUseInComp[1]) return () => false;\r\n const compareFun = ctx.ComparisonOperator[0].tokenType.$compare;\r\n return () => compareFun(getters[0](), getters[1]());\r\n }\r\n\r\n block(ctx) {\r\n const output = [];\r\n if (ctx.command) for (const cmd of ctx.command) this.visit(cmd, output);\r\n return output;\r\n }\r\n\r\n script(ctx) {\r\n if (ctx.variables === undefined) {\r\n throw new Error(\"Compiler called before Validator\");\r\n }\r\n return ctx.block ? this.visit(ctx.block) : [];\r\n }\r\n}\r\n\r\nclass Blockifier extends BaseVisitor {\r\n constructor() {\r\n super();\r\n for (const cmd of AutomatorCommands) {\r\n const blockify = cmd.blockify;\r\n if (!blockify) continue;\r\n const ownMethod = this[cmd.id];\r\n // eslint-disable-next-line no-loop-func\r\n this[cmd.id] = (ctx, output) => {\r\n if (ownMethod && ownMethod !== super[cmd.id]) ownMethod.call(this, ctx, output);\r\n try {\r\n const block = blockify(ctx, this);\r\n output.push({\r\n ...block,\r\n id: UIID.next()\r\n });\r\n } catch {\r\n // If a command is invalid, it will throw an exception in blockify and fail to assign a value to block\r\n // We can't, generally, make good guesses to fill in any missing values in order to avoid the exception,\r\n // so we instead just ignore that block\r\n }\r\n };\r\n }\r\n this.validateVisitor();\r\n }\r\n\r\n comparison(ctx) {\r\n const parseInput = index => {\r\n const comp = ctx.compareValue[index];\r\n const isCurrency = Boolean(comp.children.AutomatorCurrency);\r\n if (isCurrency) return comp.children.AutomatorCurrency[0].image;\r\n return comp.children.$value;\r\n };\r\n\r\n return {\r\n compOperator: ctx.ComparisonOperator[0].image,\r\n genericInput1: parseInput(0),\r\n genericInput2: parseInput(1),\r\n };\r\n }\r\n\r\n script(ctx) {\r\n const output = [];\r\n if (ctx.block) this.visit(ctx.block, output);\r\n return output;\r\n }\r\n\r\n block(ctx, output) {\r\n if (ctx.command) {\r\n for (const cmd of ctx.command) {\r\n this.visit(cmd, output);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function compile(input, validateOnly = false) {\r\n // The lexer and codemirror choke on the last line of the script, so we pad it with an invisible newline\r\n const script = `${input}\\n `;\r\n const validator = new Validator(script);\r\n let compiled;\r\n if (validator.errorCount === 0 && !validateOnly) {\r\n compiled = new Compiler().visit(validator.parseResult);\r\n }\r\n return {\r\n errors: validator.errors,\r\n compiled,\r\n };\r\n}\r\n\r\nexport function hasCompilationErrors(input) {\r\n return compile(input, true).errors.length !== 0;\r\n}\r\n\r\nexport function blockifyTextAutomator(input) {\r\n const validator = new Validator(input);\r\n const blockifier = new Blockifier();\r\n const blocks = blockifier.visit(validator.parseResult);\r\n\r\n // The Validator grabs all the lines from the visible script, but the Blockifier will fail to visit any lines\r\n // associated with unparsable commands. This results in a discrepancy in line count whenever a line can't be\r\n // parsed as a specific command, and in general this is a problem we can't try to guess a fix for, so we just\r\n // don't convert it at all. In both cases nested commands are stored recursively, but with different structure.\r\n const validatedCount = entry => {\r\n if (!entry) return 0;\r\n const commandDepth = entry.children;\r\n let foundChildren = 0;\r\n // Inner nested commands are found within a prop given the same name as the command itself - this should only\r\n // actually evaluate to nonzero for at most one key, and will be undefined for all others\r\n for (const key of Object.keys(commandDepth)) {\r\n const nestedBlock = commandDepth[key][0]?.children?.block;\r\n const nestedCommands = nestedBlock ? nestedBlock[0].children.command : [];\r\n foundChildren += nestedCommands\r\n ? nestedCommands.map(c => validatedCount(c) + 1).reduce((sum, val) => sum + val, 0)\r\n : 0;\r\n\r\n // Trailing newlines get turned into a command with a single EOF argument; we return -1 because one level up\r\n // on the recursion this looks like an otherwise valid command and would be counted as such\r\n if (key === \"EOF\") return -1;\r\n }\r\n return foundChildren;\r\n };\r\n const visitedCount = block => {\r\n if (!block.nest) return 1;\r\n return 1 + block.nest.map(b => visitedCount(b)).reduce((sum, val) => sum + val, 0);\r\n };\r\n // Note: top-level structure is slightly different than the nesting structure\r\n const validatedBlocks = validator.parseResult.children.block[0].children.command\r\n .map(c => validatedCount(c) + 1)\r\n .reduce((sum, val) => sum + val, 0);\r\n const visitedBlocks = blocks.map(b => visitedCount(b)).reduce((sum, val) => sum + val, 0);\r\n\r\n return { blocks, validatedBlocks, visitedBlocks };\r\n}\r\n\r\nexport function validateLine(input) {\r\n const validator = new Validator(input);\r\n return validator;\r\n}\r\n","import { lexer, tokenIds } from \"./lexer\";\r\nimport { compile } from \"./compiler\";\r\nimport { parser } from \"./parser\";\r\n\r\nfunction walkSuggestion(suggestion, prefix, output) {\r\n const hasAutocomplete = suggestion.$autocomplete &&\r\n suggestion.$autocomplete.startsWith(prefix) && suggestion.$autocomplete !== prefix;\r\n const isUnlocked = suggestion.$unlocked ? suggestion.$unlocked() : true;\r\n if (hasAutocomplete && isUnlocked) output.add(suggestion.$autocomplete);\r\n for (const s of suggestion.categoryMatches) {\r\n walkSuggestion(tokenIds[s], prefix, output);\r\n }\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nCodeMirror.registerHelper(\"lint\", \"automato\", (contents, _, editor) => {\r\n const doc = editor.getDoc();\r\n const errors = compile(contents, true).errors;\r\n return errors.map(e => ({\r\n message: e.info,\r\n severity: \"error\",\r\n from: doc.posFromIndex(e.startOffset),\r\n to: doc.posFromIndex(e.endOffset + 1),\r\n }));\r\n});\r\n\r\nCodeMirror.registerHelper(\"hint\", \"anyword\", editor => {\r\n const cursor = editor.getDoc().getCursor();\r\n let start = cursor.ch;\r\n const end = cursor.ch;\r\n const line = editor.getLine(cursor.line);\r\n while (start && /\\w/u.test(line.charAt(start - 1)))--start;\r\n const lineStart = line.slice(0, start);\r\n const currentPrefix = line.slice(start, end);\r\n const lineLex = lexer.tokenize(lineStart);\r\n if (lineLex.errors.length > 0) return undefined;\r\n const rawSuggestions = parser.computeContentAssist(\"command\", lineLex.tokens);\r\n const suggestions = new Set();\r\n for (const s of rawSuggestions) {\r\n if (s.ruleStack[1] === \"badCommand\") continue;\r\n walkSuggestion(s.nextTokenType, currentPrefix, suggestions);\r\n }\r\n return {\r\n list: Array.from(suggestions),\r\n from: CodeMirror.Pos(cursor.line, start),\r\n to: CodeMirror.Pos(cursor.line, end)\r\n };\r\n});\r\n\r\nconst commentRule = { regex: /(\\/\\/|#).*/u, token: \"comment\", next: \"start\" };\r\n\r\n// This is a state machine which determines the syntax highlighting for the automator. Top-level props define\r\n// the states, the array entries define the transition rules which are checked in order of appearance, and next\r\n// specifies which state to transition to after consuming the given regex. Without an entry for \"next\" the state\r\n// machine will remain in the same state and run the transition check after consuming the regex. The \"next\" prop\r\n// in the line with \"sol\" is a fallback transition which will be followed if none of the rules are matched.\r\n// Matches to the regexes will color the matched text according to the specified color of cm-[token] in liquibyte.css\r\n// Note: This has no bearing on the actual functionality and behavior of the automator itself and is purely visual.\r\nCodeMirror.defineSimpleMode(\"automato\", {\r\n // The start state contains the rules that are intially used\r\n start: [\r\n commentRule,\r\n { regex: /studies\\s+/ui, token: \"keyword\", next: \"studiesArgs\" },\r\n { regex: /blob\\s\\s/ui, token: \"blob\" },\r\n {\r\n // eslint-disable-next-line max-len\r\n regex: /(auto|if|pause|studies|time[ \\t]+theorems?|space[ \\t]+theorems?|until|wait|while|black[ \\t]+hole|stored?[ \\t]+game[ \\t]+time|notify)\\s/ui,\r\n token: \"keyword\",\r\n next: \"commandArgs\"\r\n },\r\n {\r\n regex: /stop/ui,\r\n token: \"keyword\",\r\n next: \"commandDone\"\r\n },\r\n {\r\n regex: /start\\s|unlock\\s/ui,\r\n token: \"keyword\",\r\n next: \"startUnlock\"\r\n },\r\n { regex: /infinity\\S+|eternity\\S+|reality\\S+|pause\\S+|restart\\S+/ui, token: \"error\", next: \"commandDone\" },\r\n { regex: /infinity|eternity|reality/ui, token: \"keyword\", next: \"prestige\" },\r\n { regex: /pause|restart/ui, token: \"keyword\", next: \"commandDone\" },\r\n { regex: /\\}/ui, dedent: true },\r\n { regex: /\\S+\\s/ui, token: \"error\", next: \"commandDone\" },\r\n ],\r\n studiesArgs: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /load(\\s+|$)/ui, token: \"variable-2\", next: \"studiesLoad\" },\r\n { regex: /respec/ui, token: \"variable-2\", next: \"commandDone\" },\r\n { regex: /purchase/ui, token: \"variable-2\", next: \"studiesList\" },\r\n { regex: /nowait(\\s+|$)/ui, token: \"property\" },\r\n ],\r\n studiesList: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /(antimatter|infinity|time)(?=[\\s,|]|$)/ui, token: \"number\" },\r\n { regex: /(active|passive|idle)(?=[\\s,|]|$)/ui, token: \"number\" },\r\n { regex: /(light|dark)(?=[\\s,|]|$)/ui, token: \"number\" },\r\n { regex: /([1-9][0-9]+)(?=[\\s,!|-]|$)/ui, token: \"number\" },\r\n { regex: /[a-zA-Z_][a-zA-Z_0-9]*/u, token: \"variable\", next: \"commandDone\" },\r\n { regex: /!$/ui, token: \"variable-2\" },\r\n { regex: /([1-9]|1[0-2])(?=!|$)/ui, token: \"number\" },\r\n ],\r\n studiesLoad: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /id(\\s+|$)/ui, token: \"variable-2\", next: \"studiesLoadId\" },\r\n { regex: /name(\\s+|$)/ui, token: \"variable-2\", next: \"studiesLoadPreset\" },\r\n { regex: /\\S+/ui, token: \"error\" },\r\n ],\r\n studiesLoadId: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /\\d/ui, token: \"qualifier\", next: \"commandDone\" },\r\n ],\r\n studiesLoadPreset: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /(\\/(?!\\/)|[^\\s#/])+/ui, token: \"qualifier\", next: \"commandDone\" },\r\n ],\r\n prestige: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /nowait(\\s|$)/ui, token: \"property\" },\r\n { regex: /respec/ui, token: \"variable-2\" },\r\n ],\r\n commandDone: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n // This seems necessary to have a closing curly brace de-indent automatically in some cases\r\n { regex: /\\}/ui, dedent: true },\r\n { regex: /\\S+/ui, token: \"error\" },\r\n ],\r\n startUnlock: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n {\r\n regex: /ec\\s?(1[0-2]|[1-9])|dilation/ui,\r\n token: \"variable-2\",\r\n next: \"commandDone\",\r\n },\r\n { regex: /nowait(\\s|$)/ui, token: \"property\" },\r\n ],\r\n commandArgs: [\r\n commentRule,\r\n { sol: true, next: \"start\" },\r\n { regex: /<=|>=|<|>/ui, token: \"operator\" },\r\n { regex: /nowait(\\s|$)/ui, token: \"property\" },\r\n { regex: /\".*\"/ui, token: \"string\", next: \"commandDone\" },\r\n { regex: /'.*'/ui, token: \"string\", next: \"commandDone\" },\r\n { regex: /(on|off|bh1|bh2|dilation|load|respec)(\\s|$)/ui, token: \"variable-2\" },\r\n { regex: /(eternity|reality|use)(\\s|$)/ui, token: \"variable-2\" },\r\n { regex: /(antimatter|infinity|time)(\\s|$|(?=,))/ui, token: \"variable-2\" },\r\n { regex: /(active|passive|idle)(\\s|$|(?=,))/ui, token: \"variable-2\" },\r\n { regex: /(light|dark)(\\s|$|(?=,))/ui, token: \"variable-2\" },\r\n { regex: /x[\\t ]+highest(\\s|$)/ui, token: \"variable-2\" },\r\n { regex: /pending[\\t ]+(completions|ip|ep|tp|rm|glyph[\\t ]+level)(\\s|$)/ui, token: \"variable-2\" },\r\n { regex: /total[\\t ]+(completions|tt|space theorems)(\\s|$)/ui, token: \"variable-2\" },\r\n { regex: /filter[ \\t]+score/ui, token: \"variable-2\" },\r\n { regex: /ec(1[0-2]|[1-9])[\\t ]+completions(\\s|$)/ui, token: \"variable-2\" },\r\n { regex: /(am|ip|ep|all)(\\s|$)/ui, token: \"variable-2\" },\r\n {\r\n regex: /(rm|rg|dt|tp|tt|space theorems|(banked )?infinities|eternities|realities|rep(licanti)?)(\\s|$)/ui,\r\n token: \"variable-2\",\r\n },\r\n { regex: / sec(onds ?) ?| min(utes ?) ?| hours ?/ui, token: \"variable-2\" },\r\n { regex: /([0-9]+:[0-5][0-9]:[0-5][0-9]|[0-5]?[0-9]:[0-5][0-9]|t[1-4])/ui, token: \"number\" },\r\n { regex: /-?(0|[1-9]\\d*)(\\.\\d+)?([eE][+-]?\\d+)?/ui, token: \"number\" },\r\n { regex: /[a-zA-Z_][a-zA-Z_0-9]*/u, token: \"variable\" },\r\n { regex: /\\{/ui, indent: true, next: \"commandDone\" },\r\n // This seems necessary to have a closing curly brace de-indent automatically in some cases\r\n { regex: /\\}/ui, dedent: true },\r\n ],\r\n\r\n // The meta property contains global information about the mode. It\r\n // can contain properties like lineComment, which are supported by\r\n // all modes, and also directives like dontIndentStates, which are\r\n // specific to simple modes.\r\n meta: {\r\n lineComment: \"//\",\r\n electricChars: \"}\",\r\n }\r\n});\r\n","import { compile } from \"./compiler\";\r\n\r\nexport const AUTOMATOR_COMMAND_STATUS = Object.freeze({\r\n NEXT_INSTRUCTION: 0,\r\n NEXT_TICK_SAME_INSTRUCTION: 1,\r\n NEXT_TICK_NEXT_INSTRUCTION: 2,\r\n // This is used to handle some special cases, like branches/loops:\r\n SAME_INSTRUCTION: 3,\r\n SKIP_INSTRUCTION: 4,\r\n HALT: 5,\r\n RESTART: 6,\r\n});\r\n\r\nexport const AUTOMATOR_MODE = Object.freeze({\r\n PAUSE: 1,\r\n RUN: 2,\r\n SINGLE_STEP: 3,\r\n});\r\n\r\n\r\nexport const AUTOMATOR_VAR_TYPES = {\r\n NUMBER: { id: 0, name: \"number\" },\r\n STUDIES: { id: 1, name: \"studies\" },\r\n DURATION: { id: 2, name: \"duration\" },\r\n UNKNOWN: { id: -1, name: \"unknown\" },\r\n};\r\n\r\nexport const AUTOMATOR_TYPE = Object.freeze({\r\n TEXT: 0,\r\n BLOCK: 1\r\n});\r\n\r\n/**\r\n * This object represents a single entry on the execution stack. It's a combination\r\n * of transient and persistent values -- we don't store the compiled script or indices\r\n * in the player object, but they are part of the stack.\r\n */\r\nclass AutomatorStackEntry {\r\n constructor(stackIndex) {\r\n this._stackIndex = stackIndex;\r\n this._commandIndex = 0;\r\n }\r\n\r\n // This is used when a new thing is put on the stack (rather than us creating objects\r\n // when loading a game)\r\n initializeNew(commands) {\r\n this._commands = commands;\r\n this._commandIndex = 0;\r\n this.persistent = {\r\n lineNumber: commands[0].lineNumber,\r\n commandState: null,\r\n };\r\n }\r\n\r\n get commandIndex() {\r\n return this._commandIndex;\r\n }\r\n\r\n set commandIndex(value) {\r\n this._commandIndex = value;\r\n this.lineNumber = this._commands[value].lineNumber;\r\n }\r\n\r\n get lineNumber() {\r\n return this.persistent.lineNumber;\r\n }\r\n\r\n set lineNumber(value) {\r\n this.persistent.lineNumber = value;\r\n }\r\n\r\n /**\r\n * @returns {object|null} commandState used by commands to track their own data, such as remaining wait time\r\n */\r\n get commandState() {\r\n return this.persistent.commandState;\r\n }\r\n\r\n set commandState(value) {\r\n this.persistent.commandState = value;\r\n }\r\n\r\n get persistent() {\r\n return player.reality.automator.state.stack[this._stackIndex];\r\n }\r\n\r\n set persistent(value) {\r\n player.reality.automator.state.stack[this._stackIndex] = value;\r\n }\r\n\r\n get commands() {\r\n return this._commands;\r\n }\r\n\r\n set commands(value) {\r\n this._commands = value;\r\n }\r\n}\r\n\r\nexport class AutomatorScript {\r\n constructor(id) {\r\n this._id = id;\r\n this.compile();\r\n }\r\n\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n get name() {\r\n return this.persistent.name;\r\n }\r\n\r\n set name(value) {\r\n this.persistent.name = value;\r\n }\r\n\r\n get persistent() {\r\n return player.reality.automator.scripts[this._id];\r\n }\r\n\r\n get commands() {\r\n return this._compiled;\r\n }\r\n\r\n get text() {\r\n return this.persistent.content;\r\n }\r\n\r\n save(content) {\r\n if (AutomatorData.isWithinLimit()) this.persistent.content = content;\r\n this.compile();\r\n }\r\n\r\n compile() {\r\n this._compiled = compile(this.text).compiled;\r\n }\r\n\r\n static create(name, content = \"\") {\r\n const scripts = Object.keys(player.reality.automator.scripts);\r\n const missingIndex = scripts.findIndex((x, y) => y + 1 !== Number(x));\r\n let id = 1 + (missingIndex === -1 ? scripts.length : missingIndex);\r\n // On a fresh save, this executes before player is properly initialized\r\n if (!player.reality.automator.scripts || id === 0) id = 1;\r\n player.reality.automator.scripts[id] = {\r\n id,\r\n name,\r\n content,\r\n };\r\n return new AutomatorScript(id);\r\n }\r\n}\r\n\r\nexport const AutomatorData = {\r\n // Used for getting the correct EC count in event log\r\n lastECCompletionCount: 0,\r\n // Used as a flag to make sure that wait commands only add one entry to the log instead of every execution attempt\r\n isWaiting: false,\r\n waitStart: 0,\r\n lastEvent: 0,\r\n eventLog: [],\r\n isEditorFullscreen: false,\r\n needsRecompile: true,\r\n cachedErrors: 0,\r\n // This is to hold finished script templates as text in order to make the custom blocks for blockmato\r\n blockTemplates: [],\r\n undoBuffer: [],\r\n redoBuffer: [],\r\n charsSinceLastUndoState: 0,\r\n\r\n MAX_ALLOWED_SCRIPT_CHARACTERS: 10000,\r\n MAX_ALLOWED_TOTAL_CHARACTERS: 60000,\r\n MAX_ALLOWED_SCRIPT_NAME_LENGTH: 15,\r\n MAX_ALLOWED_SCRIPT_COUNT: 20,\r\n MAX_ALLOWED_CONSTANT_NAME_LENGTH: 20,\r\n // Note that a study string with ALL studies in unshortened form without duplicated studies is ~230 characters\r\n MAX_ALLOWED_CONSTANT_VALUE_LENGTH: 250,\r\n MAX_ALLOWED_CONSTANT_COUNT: 30,\r\n MIN_CHARS_BETWEEN_UNDOS: 10,\r\n MAX_UNDO_ENTRIES: 30,\r\n\r\n scriptIndex() {\r\n return player.reality.automator.state.editorScript;\r\n },\r\n currentScriptName() {\r\n return player.reality.automator.scripts[this.scriptIndex()].name;\r\n },\r\n currentScriptText(index) {\r\n const toCheck = index || this.scriptIndex();\r\n return player.reality.automator.scripts[toCheck]?.content;\r\n },\r\n createNewScript(content, name) {\r\n const newScript = AutomatorScript.create(name, content);\r\n GameUI.notify.automator(`Imported Script \"${name}\"`);\r\n player.reality.automator.state.editorScript = newScript.id;\r\n AutomatorData.clearUndoData();\r\n EventHub.dispatch(GAME_EVENT.AUTOMATOR_SAVE_CHANGED);\r\n },\r\n recalculateErrors() {\r\n const toCheck = this.currentScriptText();\r\n this.cachedErrors = compile(toCheck).errors;\r\n this.cachedErrors.sort((a, b) => a.startLine - b.startLine);\r\n },\r\n currentErrors() {\r\n if (this.needsRecompile) {\r\n this.recalculateErrors();\r\n this.needsRecompile = false;\r\n }\r\n return this.cachedErrors;\r\n },\r\n logCommandEvent(message, line) {\r\n const currTime = Date.now();\r\n this.eventLog.push({\r\n // Messages often overflow the 120 col limit and extra spacing gets included in the message - remove it\r\n message: message.replaceAll(/\\s?\\n\\s+/gu, \" \"),\r\n line: AutomatorBackend.translateLineNumber(line),\r\n thisReality: Time.thisRealityRealTime.totalSeconds,\r\n timestamp: currTime,\r\n timegap: currTime - this.lastEvent\r\n });\r\n this.lastEvent = currTime;\r\n // Remove the oldest entry if the log is too large\r\n if (this.eventLog.length > player.options.automatorEvents.maxEntries) this.eventLog.shift();\r\n },\r\n clearEventLog() {\r\n this.eventLog = [];\r\n this.lastEvent = 0;\r\n },\r\n // We need to get the current character count from the editor itself instead of the player object, because otherwise\r\n // any changes made after getting above either limit will never be saved. Note that if the player is on the automator\r\n // subtab before the automator is unlocked, editor is undefined\r\n singleScriptCharacters() {\r\n return player.reality.automator.type === AUTOMATOR_TYPE.TEXT\r\n ? AutomatorTextUI.editor?.getDoc().getValue().length ?? 0\r\n : BlockAutomator.parseLines(BlockAutomator.lines).join(\"\\n\").length;\r\n },\r\n totalScriptCharacters() {\r\n return Object.values(player.reality.automator.scripts)\r\n .filter(s => s.id !== this.scriptIndex())\r\n .map(s => s.content.length)\r\n .reduce((sum, len) => sum + len, 0) +\r\n this.singleScriptCharacters();\r\n },\r\n isWithinLimit() {\r\n return this.singleScriptCharacters() <= this.MAX_ALLOWED_SCRIPT_CHARACTERS &&\r\n this.totalScriptCharacters() <= this.MAX_ALLOWED_TOTAL_CHARACTERS;\r\n },\r\n\r\n // This must be called every time the current script or editor mode are changed\r\n clearUndoData() {\r\n this.undoBuffer = [];\r\n this.redoBuffer = [];\r\n this.charsSinceLastUndoState = 0;\r\n },\r\n // We only save an undo state every so often based on the number of characters that have been modified\r\n // since the last state. This gets passed in as a parameter and gets called every time any typing is done,\r\n // but only actually does something when that threshold is reached.\r\n pushUndoData(data, newChars) {\r\n // If the buffer is empty, then we need to immediately write to the buffer (ignoring character changes)\r\n // because otherwise edits can't be fully undone back to the very first change\r\n this.charsSinceLastUndoState += newChars;\r\n const pastGap = this.charsSinceLastUndoState <= this.MIN_CHARS_BETWEEN_UNDOS;\r\n if (pastGap && this.undoBuffer.length !== 0) return;\r\n\r\n if (this.undoBuffer[this.undoBuffer.length - 1] !== data) this.undoBuffer.push(data);\r\n if (this.undoBuffer.length > this.MAX_UNDO_ENTRIES) this.undoBuffer.shift();\r\n this.charsSinceLastUndoState = 0;\r\n },\r\n pushRedoData(data) {\r\n if (this.redoBuffer[this.redoBuffer.length - 1] !== data) this.redoBuffer.push(data);\r\n },\r\n // These following two methods pop the top entry off of the undo/redo stack and then push it\r\n // onto the *other* stack before modifying all the relevant UI elements and player props. These\r\n // could in principle be combined into one function to reduce boilerplace, but keeping them\r\n // separate is probably more readable externally\r\n undoScriptEdit() {\r\n if (this.undoBuffer.length === 0 || Tabs.current._currentSubtab.name !== \"Automator\") return;\r\n\r\n const undoContent = this.undoBuffer.pop();\r\n this.pushRedoData(this.currentScriptText());\r\n player.reality.automator.scripts[this.scriptIndex()].content = undoContent;\r\n\r\n AutomatorBackend.saveScript(this.scriptIndex(), undoContent);\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.TEXT) AutomatorTextUI.editor.setValue(undoContent);\r\n else BlockAutomator.updateEditor(undoContent);\r\n },\r\n redoScriptEdit() {\r\n if (this.redoBuffer.length === 0 || Tabs.current._currentSubtab.name !== \"Automator\") return;\r\n\r\n const redoContent = this.redoBuffer.pop();\r\n // We call this with a value which is always higher than said threshold, forcing the current text to be pushed\r\n this.pushUndoData(this.currentScriptText(), 2 * this.MIN_CHARS_BETWEEN_UNDOS);\r\n player.reality.automator.scripts[this.scriptIndex()].content = redoContent;\r\n\r\n AutomatorBackend.saveScript(this.scriptIndex(), redoContent);\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.TEXT) AutomatorTextUI.editor.setValue(redoContent);\r\n else BlockAutomator.updateEditor(redoContent);\r\n }\r\n};\r\n\r\nexport const LineEnum = { Active: \"active\", Event: \"event\", Error: \"error\" };\r\n\r\n// Manages line highlighting in a way which is agnostic to the current editor mode (line or block). Ironically this is\r\n// actually easier to manage in block mode as the Vue components render each line individually and we can just\r\n// conditionally add classes in the template. The highlighting in text mode needs to be spliced and removed inline\r\n// within the CodeMirror editor\r\nexport const AutomatorHighlighter = {\r\n lines: {\r\n active: -1,\r\n event: -1,\r\n error: -1,\r\n },\r\n\r\n updateHighlightedLine(line, key) {\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.TEXT && line !== -1) {\r\n if (!AutomatorTextUI.editor) return;\r\n this.removeHighlightedTextLine(key);\r\n this.addHighlightedTextLine(line, key);\r\n } else {\r\n this.lines[key] = line;\r\n }\r\n },\r\n\r\n // We need to specifically remove the highlighting class from the old line before splicing it in for the new line\r\n removeHighlightedTextLine(key) {\r\n const removedLine = this.lines[key] - 1;\r\n AutomatorTextUI.editor.removeLineClass(removedLine, \"background\", `c-automator-editor__${key}-line`);\r\n AutomatorTextUI.editor.removeLineClass(removedLine, \"gutter\", `c-automator-editor__${key}-line-gutter`);\r\n this.lines[key] = -1;\r\n },\r\n addHighlightedTextLine(line, key) {\r\n AutomatorTextUI.editor.addLineClass(line - 1, \"background\", `c-automator-editor__${key}-line`);\r\n AutomatorTextUI.editor.addLineClass(line - 1, \"gutter\", `c-automator-editor__${key}-line-gutter`);\r\n this.lines[key] = line;\r\n },\r\n\r\n clearAllHighlightedLines() {\r\n for (const lineType of Object.values(LineEnum)) {\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.TEXT && AutomatorTextUI.editor) {\r\n for (let line = 0; line < AutomatorTextUI.editor.doc.size; line++) {\r\n AutomatorTextUI.editor.removeLineClass(line, \"background\", `c-automator-editor__${lineType}-line`);\r\n AutomatorTextUI.editor.removeLineClass(line, \"gutter\", `c-automator-editor__${lineType}-line-gutter`);\r\n }\r\n }\r\n this.lines[lineType] = -1;\r\n }\r\n }\r\n};\r\n\r\n// Manages line highlighting in a way which is agnostic to the current editor mode (line or block)\r\nexport const AutomatorScroller = {\r\n // Block editor counts lines differently due to modified loop structure; this method handles that internally\r\n scrollToRawLine(line) {\r\n const targetLine = player.reality.automator.type === AUTOMATOR_TYPE.TEXT\r\n ? line\r\n : AutomatorBackend.translateLineNumber(line);\r\n this.scrollToLine(targetLine);\r\n },\r\n\r\n scrollToLine(line) {\r\n let editor, textHeight, lineToScroll;\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.TEXT) {\r\n // We can't use CodeMirror's scrollIntoView() method as that forces the entire viewport to keep the line in view.\r\n // This can potentially cause a softlock with \"follow execution\" enabled on sufficiently short screens.\r\n editor = document.querySelector(\".CodeMirror-scroll\");\r\n textHeight = AutomatorTextUI.editor.defaultTextHeight();\r\n lineToScroll = line + 1;\r\n } else {\r\n editor = BlockAutomator.editor;\r\n textHeight = 34.5;\r\n lineToScroll = line;\r\n }\r\n\r\n // In both cases we might potentially try to scroll before the editor has properly initialized (ie. the automator\r\n // itself ends up loading up faster than the editor UI element)\r\n if (!editor) return;\r\n\r\n const paddedHeight = editor.clientHeight - 40;\r\n const newScrollPos = textHeight * (lineToScroll - 1);\r\n if (newScrollPos > editor.scrollTop + paddedHeight) editor.scrollTo(0, newScrollPos - paddedHeight);\r\n if (newScrollPos < editor.scrollTop) editor.scrollTo(0, newScrollPos);\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.BLOCK) {\r\n BlockAutomator.gutter.style.bottom = `${editor.scrollTop}px`;\r\n }\r\n }\r\n};\r\n\r\nexport const AutomatorBackend = {\r\n MAX_COMMANDS_PER_UPDATE: 100,\r\n hasJustCompleted: false,\r\n _scripts: [],\r\n\r\n get state() {\r\n return player.reality.automator.state;\r\n },\r\n\r\n // The Automator may be paused at some instruction, but still be on.\r\n get isOn() {\r\n return !this.stack.isEmpty;\r\n },\r\n\r\n /**\r\n * @returns {AUTOMATOR_MODE}\r\n */\r\n get mode() {\r\n return this.state.mode;\r\n },\r\n\r\n set mode(value) {\r\n this.state.mode = value;\r\n },\r\n\r\n get isRunning() {\r\n return this.isOn && this.mode === AUTOMATOR_MODE.RUN;\r\n },\r\n\r\n findRawScriptObject(id) {\r\n const scripts = player.reality.automator.scripts;\r\n const index = Object.values(scripts).findIndex(s => s.id === id);\r\n return scripts[parseInt(Object.keys(scripts)[index], 10)];\r\n },\r\n\r\n get currentRunningScript() {\r\n return this.findRawScriptObject(this.state.topLevelScript);\r\n },\r\n\r\n get currentEditingScript() {\r\n return this.findRawScriptObject(player.reality.automator.state.editorScript);\r\n },\r\n\r\n get scriptName() {\r\n return this.currentRunningScript?.name ?? \"\";\r\n },\r\n\r\n hasDuplicateName(name) {\r\n const nameArray = Object.values(player.reality.automator.scripts).map(s => s.name);\r\n return nameArray.filter(n => n === name).length > 1;\r\n },\r\n\r\n // Scripts are internally stored and run as text, but block mode has a different layout for loops that\r\n // shifts a lot of commands around. Therefore we need to conditionally change it based on mode in order\r\n // to make sure the player is presented with the correct line number\r\n translateLineNumber(num) {\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.TEXT) return num;\r\n return BlockAutomator.lineNumber(num);\r\n },\r\n\r\n get currentLineNumber() {\r\n if (!this.stack.top) return -1;\r\n return this.translateLineNumber(this.stack.top.lineNumber);\r\n },\r\n\r\n get currentInterval() {\r\n return Math.clampMin(Math.pow(0.994, Currency.realities.value) * 500, 1);\r\n },\r\n\r\n get currentRawText() {\r\n return this.currentRunningScript?.content ?? \"\";\r\n },\r\n\r\n get currentScriptLength() {\r\n return this.currentRawText.split(\"\\n\").length;\r\n },\r\n\r\n // Finds which study presets are referenced within the specified script\r\n getUsedPresets(scriptID) {\r\n const script = this.findRawScriptObject(scriptID);\r\n if (!script) return null;\r\n\r\n const foundPresets = new Set();\r\n const lines = script.content.split(\"\\n\");\r\n for (const rawLine of lines) {\r\n const matchPresetID = rawLine.match(/studies( nowait)? load id ([1-6])/ui);\r\n if (matchPresetID) foundPresets.add(Number(matchPresetID[2]) - 1);\r\n const matchPresetName = rawLine.match(/studies( nowait)? load name (\\S+)/ui);\r\n if (matchPresetName) {\r\n // A script might pass the regex match, but actually be referencing a preset which doesn't exist by name\r\n const presetID = player.timestudy.presets.findIndex(p => p.name === matchPresetName[2]);\r\n if (presetID !== -1) foundPresets.add(presetID);\r\n }\r\n }\r\n const presets = Array.from(foundPresets);\r\n presets.sort();\r\n return presets;\r\n },\r\n\r\n // Finds which constants are referenced within the specified script\r\n getUsedConstants(scriptID) {\r\n const script = this.findRawScriptObject(scriptID);\r\n if (!script) return null;\r\n\r\n const foundConstants = new Set();\r\n const lines = script.content.split(\"\\n\");\r\n for (const rawLine of lines) {\r\n const availableConstants = Object.keys(player.reality.automator.constants);\r\n // Needs a space-padded regex match so that (for example) a constant \"unl\" doesn't match to an unlock command\r\n // Additionally we need a negative lookbehind in order to ignore matches with presets which have the same name\r\n for (const key of availableConstants) {\r\n if (rawLine.match(`(?= AutomatorData.MAX_ALLOWED_CONSTANT_COUNT) return;\r\n player.reality.automator.constants[constantName] = value;\r\n player.reality.automator.constantSortOrder.push(constantName);\r\n EventHub.dispatch(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED);\r\n },\r\n modifyConstant(constantName, newValue) {\r\n if (Object.keys(player.reality.automator.constants).includes(constantName)) {\r\n player.reality.automator.constants[constantName] = newValue;\r\n EventHub.dispatch(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED);\r\n } else {\r\n this.addConstant(constantName, newValue);\r\n }\r\n },\r\n renameConstant(oldName, newName) {\r\n const data = player.reality.automator.constants[oldName];\r\n player.reality.automator.constants[newName] = data;\r\n delete player.reality.automator.constants[oldName];\r\n\r\n const index = player.reality.automator.constantSortOrder.indexOf(oldName);\r\n if (index !== -1) player.reality.automator.constantSortOrder[index] = newName;\r\n EventHub.dispatch(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED);\r\n },\r\n deleteConstant(constantName) {\r\n delete player.reality.automator.constants[constantName];\r\n const index = player.reality.automator.constantSortOrder.indexOf(constantName);\r\n if (index > -1) player.reality.automator.constantSortOrder.splice(index, 1);\r\n EventHub.dispatch(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED);\r\n },\r\n\r\n // We can't just concatenate different parts of script data together or use some kind of delimiting character string\r\n // due to the fact that comments can essentially contain character sequences with nearly arbitrary content and\r\n // length. Instead, we take the approach of concatenating all data together with their lengths prepended at the start\r\n // of each respective data string. For example:\r\n // [\"blob\", \"11,21,31\"] => \"00004blob0000811,21,31\"\r\n // Note that the whole string can be unambiguously parsed from left-to-right regardless of the actual data contents.\r\n // All numerical values are assumed to be exactly 5 characters long for consistency and since the script length limit\r\n // is 5 digits long.\r\n serializeAutomatorData(dataArray) {\r\n const paddedNumber = num => `0000${num}`.slice(-5);\r\n const segments = [];\r\n for (const data of dataArray) {\r\n segments.push(`${paddedNumber(data.length)}${data}`);\r\n }\r\n return segments.join(\"\");\r\n },\r\n\r\n // Inverse of the operation performed by serializeAutomatorData(). Can throw an error for malformed inputs, but this\r\n // will always be caught farther up the call chain and interpreted properly as an invalid dataString.\r\n deserializeAutomatorData(dataString) {\r\n if (dataString === \"\") throw new Error(\"Attempted deserialization of empty string\");\r\n const dataArray = [];\r\n let remainingData = dataString;\r\n while (remainingData.length > 0) {\r\n const segmentLength = Number(remainingData.slice(0, 5));\r\n remainingData = remainingData.substr(5);\r\n if (Number.isNaN(segmentLength) || remainingData.length < segmentLength) {\r\n throw new Error(\"Inconsistent or malformed serialized automator data\");\r\n } else {\r\n const segmentData = remainingData.slice(0, segmentLength);\r\n remainingData = remainingData.substr(segmentLength);\r\n dataArray.push(segmentData);\r\n }\r\n }\r\n return dataArray;\r\n },\r\n\r\n // This exports only the text contents of the currently-visible script\r\n exportCurrentScriptContents() {\r\n // Cut off leading and trailing whitespace\r\n const trimmed = AutomatorData.currentScriptText().replace(/^\\s*(.*?)\\s*$/u, \"$1\");\r\n if (trimmed.length === 0) return null;\r\n // Serialize the script name and content\r\n const name = AutomatorData.currentScriptName();\r\n return GameSaveSerializer.encodeText(this.serializeAutomatorData([name, trimmed]), \"automator script\");\r\n },\r\n\r\n // This parses script content from an encoded export string; does not actually import anything\r\n parseScriptContents(rawInput) {\r\n let decoded, parts;\r\n try {\r\n decoded = GameSaveSerializer.decodeText(rawInput, \"automator script\");\r\n parts = this.deserializeAutomatorData(decoded);\r\n } catch (e) {\r\n return null;\r\n }\r\n\r\n return {\r\n name: parts[0],\r\n content: parts[1],\r\n };\r\n },\r\n\r\n // Creates a new script from the supplied import string\r\n importScriptContents(rawInput) {\r\n const parsed = this.parseScriptContents(rawInput);\r\n AutomatorData.createNewScript(parsed.content, parsed.name);\r\n this.initializeFromSave();\r\n },\r\n\r\n // This exports the selected script along with any constants and study presets it uses or references\r\n exportFullScriptData(scriptID) {\r\n const script = this.findRawScriptObject(scriptID);\r\n const trimmed = script.content.replace(/^\\s*(.*?)\\s*$/u, \"$1\");\r\n if (trimmed.length === 0) return null;\r\n\r\n const foundPresets = new Set();\r\n const foundConstants = new Set();\r\n const lines = trimmed.split(\"\\n\");\r\n // We find just the keys first, the rest of the associated data is serialized later\r\n for (const rawLine of lines) {\r\n const matchPresetID = rawLine.match(/studies( nowait)? load id ([1-6])/ui);\r\n if (matchPresetID) foundPresets.add(Number(matchPresetID[2]) - 1);\r\n const matchPresetName = rawLine.match(/studies( nowait)? load name (\\S+)/ui);\r\n if (matchPresetName) {\r\n // A script might pass the regex match, but actually be referencing a preset which doesn't exist by name\r\n const presetID = player.timestudy.presets.findIndex(p => p.name === matchPresetName[2]);\r\n if (presetID !== -1) foundPresets.add(presetID);\r\n }\r\n const availableConstants = Object.keys(player.reality.automator.constants);\r\n for (const key of availableConstants) if (rawLine.match(`\\\\s${key}(\\\\s|$)`)) foundConstants.add(key);\r\n }\r\n\r\n // Serialize presets\r\n const presets = [];\r\n for (const id of Array.from(foundPresets)) {\r\n const preset = player.timestudy.presets[id];\r\n presets.push(`${id}:${preset?.name ?? \"\"}:${preset?.studies ?? \"\"}`);\r\n }\r\n\r\n // Serialize constants\r\n const constants = [];\r\n for (const name of Array.from(foundConstants)) {\r\n constants.push(`${name}:${player.reality.automator.constants[name]}`);\r\n }\r\n\r\n // Serialize all the variables for the full data export\r\n const serialized = this.serializeAutomatorData([script.name, presets.join(\"*\"), constants.join(\"*\"), trimmed]);\r\n return GameSaveSerializer.encodeText(serialized, \"automator data\");\r\n },\r\n\r\n // This parses scripts which also have attached information in the form of associated constants and study presets.\r\n // Note that it doesn't actually import or assign the data to the save file at this point.\r\n parseFullScriptData(rawInput) {\r\n let decoded, parts;\r\n try {\r\n decoded = GameSaveSerializer.decodeText(rawInput, \"automator data\");\r\n parts = this.deserializeAutomatorData(decoded);\r\n } catch (e) {\r\n return null;\r\n }\r\n if (parts.length !== 4) return null;\r\n\r\n // Parse preset data (needs the conditional because otherwise it'll use the empty string to assign 0/undef/undef)\r\n const presetData = parts[1];\r\n const presets = [];\r\n if (presetData) {\r\n for (const preset of presetData.split(\"*\")) {\r\n const props = preset.split(\":\");\r\n presets.push({\r\n id: Number(props[0]),\r\n name: props[1],\r\n studies: props[2],\r\n });\r\n }\r\n }\r\n presets.sort((a, b) => a.id - b.id);\r\n\r\n // Parse constant data\r\n const constantData = parts[2];\r\n const constants = [];\r\n for (const constant of constantData.split(\"*\")) {\r\n if (constant === \"\") continue;\r\n const props = constant.split(\":\");\r\n constants.push({\r\n key: props[0],\r\n value: props[1],\r\n });\r\n }\r\n\r\n return {\r\n name: parts[0],\r\n presets,\r\n constants,\r\n content: parts[3],\r\n };\r\n },\r\n\r\n // This imports a given script, with options supplied for ignoring included presets and constants\r\n // within the import data.\r\n importFullScriptData(rawInput, ignore) {\r\n const parsed = this.parseFullScriptData(rawInput);\r\n AutomatorData.createNewScript(parsed.content, parsed.name);\r\n\r\n if (!ignore.presets) {\r\n for (const preset of parsed.presets) {\r\n player.timestudy.presets[preset.id] = { name: preset.name, studies: preset.studies };\r\n }\r\n }\r\n\r\n if (!ignore.constants) {\r\n for (const constant of parsed.constants) {\r\n this.modifyConstant(constant.key, constant.value);\r\n }\r\n }\r\n\r\n this.initializeFromSave();\r\n },\r\n\r\n update(diff) {\r\n if (!this.isOn) return;\r\n let stack;\r\n switch (this.mode) {\r\n case AUTOMATOR_MODE.PAUSE:\r\n return;\r\n case AUTOMATOR_MODE.SINGLE_STEP:\r\n this.singleStep();\r\n stack = AutomatorBackend.stack.top;\r\n // If single step completes the last line and repeat is off, the command stack will be empty and\r\n // scrolling will cause an error\r\n if (stack && this.state.followExecution) AutomatorScroller.scrollToRawLine(stack.lineNumber);\r\n this.state.mode = AUTOMATOR_MODE.PAUSE;\r\n return;\r\n case AUTOMATOR_MODE.RUN:\r\n break;\r\n default:\r\n this.stop();\r\n return;\r\n }\r\n\r\n player.reality.automator.execTimer += diff;\r\n const commandsThisUpdate = Math.min(\r\n Math.floor(player.reality.automator.execTimer / this.currentInterval), this.MAX_COMMANDS_PER_UPDATE\r\n );\r\n player.reality.automator.execTimer -= commandsThisUpdate * this.currentInterval;\r\n\r\n for (let count = 0; count < commandsThisUpdate && this.isRunning; ++count) {\r\n if (!this.step()) break;\r\n }\r\n },\r\n\r\n step() {\r\n if (this.stack.isEmpty) return false;\r\n for (let steps = 0; steps < 100 && !this.hasJustCompleted; steps++) {\r\n switch (this.runCurrentCommand()) {\r\n case AUTOMATOR_COMMAND_STATUS.SAME_INSTRUCTION:\r\n return true;\r\n case AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION:\r\n return this.nextCommand();\r\n case AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION:\r\n return false;\r\n case AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION:\r\n this.nextCommand();\r\n return false;\r\n case AUTOMATOR_COMMAND_STATUS.SKIP_INSTRUCTION:\r\n this.nextCommand();\r\n break;\r\n case AUTOMATOR_COMMAND_STATUS.HALT:\r\n this.stop();\r\n return false;\r\n case AUTOMATOR_COMMAND_STATUS.RESTART:\r\n this.restart();\r\n return false;\r\n }\r\n\r\n // We need to break out of the loop if the last commands are all SKIP_INSTRUCTION, or else it'll start\r\n // trying to execute from an undefined stack if it isn't set to automatically repeat\r\n if (!this.stack.top) this.hasJustCompleted = true;\r\n }\r\n\r\n // This should in practice never happen by accident due to it requiring 100 consecutive commands that don't do\r\n // anything (looping a smaller group of no-ops will instead trigger the loop check every tick). Nevertheless,\r\n // better to not have an explicit infinite loop so that the game doesn't hang if the player decides to be funny\r\n // and input 3000 comments in a row. If hasJustCompleted is true, then we actually broke out because the end of\r\n // the script has no-ops and we just looped through them, and therefore shouldn't show these messages\r\n if (!this.hasJustCompleted) {\r\n GameUI.notify.error(\"Automator halted - too many consecutive no-ops detected\");\r\n AutomatorData.logCommandEvent(\"Automator halted due to excessive no-op commands\", this.currentLineNumber);\r\n }\r\n\r\n this.stop();\r\n return false;\r\n },\r\n\r\n singleStep() {\r\n if (this.stack.isEmpty) return;\r\n // SAME_INSTRUCTION is used to enter blocks; this means we've successfully\r\n // advanced a line. Otherwise, we always advance a line, regardless of return\r\n // state.\r\n // HALT and RESTART are exceptions, as these are called by commands which force\r\n // program flow to do something else other than simply advancing to the next line\r\n switch (this.runCurrentCommand()) {\r\n case AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION:\r\n break;\r\n case AUTOMATOR_COMMAND_STATUS.HALT:\r\n this.stop();\r\n break;\r\n case AUTOMATOR_COMMAND_STATUS.RESTART:\r\n this.restart();\r\n break;\r\n default:\r\n this.nextCommand();\r\n break;\r\n }\r\n },\r\n\r\n runCurrentCommand() {\r\n const S = this.stack.top;\r\n const cmdState = S.commands[S.commandIndex].run(S);\r\n return cmdState;\r\n },\r\n\r\n nextCommand() {\r\n const S = this.stack.top;\r\n if (S.commandIndex >= S.commands.length - 1) {\r\n this.stack.pop();\r\n if (this.stack.isEmpty) {\r\n // With the debug output on, running short scripts gets very spammy, working around that\r\n // return false here makes sure that a single instruction script executes one tick at a time\r\n if (this.state.repeat) {\r\n this.start(this.state.topLevelScript, AUTOMATOR_MODE.RUN, false);\r\n return false;\r\n }\r\n this.stop();\r\n } else if (this.stack.top.commandState && this.stack.top.commandState.advanceOnPop) {\r\n AutomatorData.logCommandEvent(`Exiting IF block`, this.stack.top.commandState.ifEndLine);\r\n return this.nextCommand();\r\n }\r\n } else {\r\n S.commandState = null;\r\n ++S.commandIndex;\r\n }\r\n return true;\r\n },\r\n\r\n push(commands) {\r\n // We do not allow empty scripts on the stack.\r\n if (commands.length === 0) return;\r\n this.stack.push(commands);\r\n },\r\n\r\n findScript(id) {\r\n return this._scripts.find(e => e.id === id);\r\n },\r\n\r\n _createDefaultScript() {\r\n const defaultScript = AutomatorScript.create(\"New Script\");\r\n this._scripts = [defaultScript];\r\n this.state.topLevelScript = defaultScript.id;\r\n return defaultScript.id;\r\n },\r\n\r\n initializeFromSave() {\r\n const scriptIds = Object.keys(player.reality.automator.scripts).map(id => parseInt(id, 10));\r\n if (scriptIds.length === 0) {\r\n scriptIds.push(this._createDefaultScript());\r\n } else {\r\n this._scripts = scriptIds.map(s => new AutomatorScript(s));\r\n }\r\n if (!scriptIds.includes(this.state.topLevelScript)) this.state.topLevelScript = scriptIds[0];\r\n const currentScript = this.findScript(this.state.topLevelScript);\r\n if (currentScript.commands) {\r\n const commands = currentScript.commands;\r\n if (!this.stack.initializeFromSave(commands)) this.reset(commands);\r\n } else {\r\n this.stack.clear();\r\n }\r\n },\r\n\r\n // Note: This gets run every time any edit or mode conversion is done\r\n saveScript(id, data) {\r\n const script = this.findScript(id);\r\n if (!script) return;\r\n\r\n // Add the old data to the undo buffer; there are internal checks which prevent it from saving too often.\r\n // For performance, the contents of the script aren't actually checked (this would be an unavoidable O(n) cost).\r\n // Instead we naively assume length changes are pure insertions and deletions, which does mean we're ignoring\r\n // a few edge cases when changes are really substitutions that massively change the content\r\n const oldData = script.persistent.content;\r\n const lenChange = Math.abs(oldData.length - data.length);\r\n AutomatorData.pushUndoData(oldData, lenChange);\r\n\r\n script.save(data);\r\n if (id === this.state.topLevelScript) this.stop();\r\n },\r\n\r\n newScript() {\r\n // Make sure the new script has a unique name\r\n const scriptNames = AutomatorBackend._scripts.map(s => s.name);\r\n let newScript;\r\n if (scriptNames.includes(\"New Script\")) {\r\n let newIndex = 2;\r\n while (scriptNames.includes(`New Script (${newIndex})`)) newIndex++;\r\n newScript = AutomatorScript.create(`New Script (${newIndex})`);\r\n } else {\r\n newScript = AutomatorScript.create(\"New Script\");\r\n }\r\n\r\n this._scripts.push(newScript);\r\n return newScript;\r\n },\r\n\r\n // Note that deleting scripts leaves gaps in the automator script indexing since automator scripts can't be\r\n // dynamically re-indexed while the automator is running without causing a stutter from recompiling scripts.\r\n deleteScript(id) {\r\n // We need to delete scripts from two places - in the savefile and compiled AutomatorScript Objects\r\n const saveId = Object.values(player.reality.automator.scripts).findIndex(s => s.id === id);\r\n delete player.reality.automator.scripts[parseInt(Object.keys(player.reality.automator.scripts)[saveId], 10)];\r\n const idx = this._scripts.findIndex(e => e.id === id);\r\n this._scripts.splice(idx, 1);\r\n if (this._scripts.length === 0) {\r\n this._createDefaultScript();\r\n this.clearEditor();\r\n }\r\n if (id === this.state.topLevelScript) {\r\n this.stop();\r\n this.state.topLevelScript = this._scripts[0].id;\r\n }\r\n EventHub.dispatch(GAME_EVENT.AUTOMATOR_SAVE_CHANGED);\r\n },\r\n\r\n toggleRepeat() {\r\n this.state.repeat = !this.state.repeat;\r\n },\r\n\r\n toggleForceRestart() {\r\n this.state.forceRestart = !this.state.forceRestart;\r\n },\r\n\r\n toggleFollowExecution() {\r\n this.state.followExecution = !this.state.followExecution;\r\n this.jumpToActiveLine();\r\n },\r\n\r\n jumpToActiveLine() {\r\n const state = this.state;\r\n const focusedScript = state.topLevelScript === state.editorScript;\r\n if (focusedScript && this.isRunning && state.followExecution) {\r\n AutomatorScroller.scrollToRawLine(AutomatorBackend.stack.top.lineNumber);\r\n }\r\n },\r\n\r\n reset(commands) {\r\n this.stack.clear();\r\n this.push(commands);\r\n },\r\n\r\n stop() {\r\n this.stack.clear();\r\n this.state.mode = AUTOMATOR_MODE.PAUSE;\r\n this.hasJustCompleted = true;\r\n AutomatorHighlighter.clearAllHighlightedLines();\r\n },\r\n\r\n pause() {\r\n this.state.mode = AUTOMATOR_MODE.PAUSE;\r\n },\r\n\r\n start(scriptID = this.state.topLevelScript, initialMode = AUTOMATOR_MODE.RUN, compile = true) {\r\n // Automator execution behaves oddly across new games, so we explicitly stop it from running if not unlocked\r\n if (!Player.automatorUnlocked) return;\r\n this.hasJustCompleted = false;\r\n this.state.topLevelScript = scriptID;\r\n player.reality.automator.execTimer = 0;\r\n const scriptObject = this.findScript(scriptID);\r\n if (!scriptObject) return;\r\n if (compile) scriptObject.compile();\r\n if (scriptObject.commands) {\r\n this.reset(scriptObject.commands);\r\n this.state.mode = initialMode;\r\n }\r\n AutomatorData.isWaiting = false;\r\n if (player.options.automatorEvents.clearOnRestart) AutomatorData.clearEventLog();\r\n },\r\n\r\n restart() {\r\n // Sometimes this leads to start getting called twice in quick succession but it's close enough\r\n // that there's usually no command in between (possibly same tick).\r\n this.start(this.state.topLevelScript, AUTOMATOR_MODE.RUN);\r\n if (this.stack.isEmpty) return;\r\n this.reset(this.stack._data[0].commands);\r\n },\r\n\r\n changeModes(scriptID) {\r\n Tutorial.moveOn(TUTORIAL_STATE.AUTOMATOR);\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.BLOCK) {\r\n // This saves the script after converting it.\r\n BlockAutomator.parseTextFromBlocks();\r\n player.reality.automator.type = AUTOMATOR_TYPE.TEXT;\r\n } else {\r\n const toConvert = AutomatorTextUI.editor.getDoc().getValue();\r\n // Needs to be called to update the lines prop in the BlockAutomator object\r\n BlockAutomator.updateEditor(toConvert);\r\n AutomatorBackend.saveScript(scriptID, toConvert);\r\n player.reality.automator.type = AUTOMATOR_TYPE.BLOCK;\r\n }\r\n AutomatorHighlighter.clearAllHighlightedLines();\r\n EventHub.ui.dispatch(GAME_EVENT.AUTOMATOR_TYPE_CHANGED);\r\n },\r\n\r\n clearEditor() {\r\n if (player.reality.automator.type === AUTOMATOR_TYPE.BLOCK) {\r\n BlockAutomator.clearEditor();\r\n } else {\r\n AutomatorTextUI.clearEditor();\r\n }\r\n },\r\n\r\n stack: {\r\n _data: [],\r\n push(commands) {\r\n const newEntry = new AutomatorStackEntry(this.length);\r\n newEntry.initializeNew(commands);\r\n this._data.push(newEntry);\r\n },\r\n pop() {\r\n if (this._data.length === 0) return;\r\n player.reality.automator.state.stack.pop();\r\n this._data.pop();\r\n },\r\n clear() {\r\n this._data = [];\r\n player.reality.automator.state.stack.length = 0;\r\n },\r\n initializeFromSave(commands) {\r\n this._data = [];\r\n const playerStack = player.reality.automator.state.stack;\r\n let currentCommands = commands;\r\n for (let depth = 0; depth < playerStack.length; ++depth) {\r\n const playerEntry = playerStack[depth];\r\n const newEntry = new AutomatorStackEntry(depth);\r\n newEntry.commands = currentCommands;\r\n const foundIndex = currentCommands.findIndex(e => e.lineNumber === playerEntry.lineNumber);\r\n if (foundIndex === -1) {\r\n // Could not match stack state to script, have to reset automato\r\n return false;\r\n }\r\n newEntry.commandIndex = foundIndex;\r\n this._data.push(newEntry);\r\n // Are we inside a code block?\r\n if (depth !== playerStack.length - 1) {\r\n if (currentCommands[foundIndex].blockCommands === undefined) {\r\n return false;\r\n }\r\n currentCommands = currentCommands[foundIndex].blockCommands;\r\n }\r\n }\r\n return true;\r\n },\r\n get top() {\r\n return this._data[this.length - 1];\r\n },\r\n get length() {\r\n if (this._data.length !== player.reality.automator.state.stack.length) {\r\n throw new Error(\"Inconsistent stack length\");\r\n }\r\n return this._data.length;\r\n },\r\n get isEmpty() {\r\n return this._data.length === 0;\r\n }\r\n },\r\n};\r\n","export const AutomatorPoints = {\r\n get perks() {\r\n return Perks.all.filter(p => p.automatorPoints);\r\n },\r\n\r\n // This also rejects rebuyables, where automatorPoints is undefined\r\n get upgrades() {\r\n return RealityUpgrades.all.filter(p => p.automatorPoints);\r\n },\r\n\r\n get pointsFromPerks() {\r\n return this.perks\r\n .filter(p => p.isBought)\r\n .map(p => p.automatorPoints)\r\n .sum();\r\n },\r\n\r\n get pointsFromUpgrades() {\r\n return this.upgrades\r\n .filter(p => p.isBought)\r\n .map(p => p.automatorPoints)\r\n .sum();\r\n },\r\n\r\n get pointsFromOther() {\r\n return GameDatabase.reality.automator.otherAutomatorPoints.map(s => s.automatorPoints()).sum();\r\n },\r\n\r\n get totalPoints() {\r\n return this.pointsFromPerks + this.pointsFromUpgrades + this.pointsFromOther;\r\n },\r\n\r\n get pointsForAutomator() {\r\n return 100;\r\n }\r\n};\r\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlockSingleInput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlockSingleInput.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorBlockSingleInput.vue?vue&type=template&id=36c54dc2&scoped=true&\"\nimport script from \"./AutomatorBlockSingleInput.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorBlockSingleInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorBlockSingleInput.vue?vue&type=style&index=0&id=36c54dc2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"36c54dc2\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlockSingleRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlockSingleRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorBlockSingleRow.vue?vue&type=template&id=70ff0acc&scoped=true&\"\nimport script from \"./AutomatorBlockSingleRow.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorBlockSingleRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorBlockSingleRow.vue?vue&type=style&index=0&id=70ff0acc&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"70ff0acc\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlockEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlockEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorBlockEditor.vue?vue&type=template&id=0f454411&scoped=true&\"\nimport script from \"./AutomatorBlockEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorBlockEditor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorBlockEditor.vue?vue&type=style&index=0&id=0f454411&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0f454411\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('draggable',{staticClass:\"o-drag-cancel-region\",attrs:{\"group\":\"code-blocks\",\"ghost-class\":\"null-block\",\"draggable\":\".draggable-blocks\"}},[_c('p',[_vm._v(\" Drag and drop these blocks to the area on the left! The blocks have names matching the commands in the reference page, but may change appearance after being placed to describe what they do in a more natural-sounding manner. If a block changes in this way, the alternate text will be shown as a tooltip when going to drag it over. \")]),_c('br'),_c('p',[_vm._v(\" Inputs with a \"),_c('span',{staticClass:\"c-automator-input-optional\"},[_vm._v(\"brown\")]),_vm._v(\" color are optional, while inputs with a \"),_c('span',{staticClass:\"c-automator-input-required\"},[_vm._v(\"teal\")]),_vm._v(\" color are required. \"),_c('span',{staticClass:\"c-automator-block-row-error\"},[_vm._v(\"Red\")]),_vm._v(\" inputs are causing errors and must be changed before the script can be run. For more details, check the Scripting Information pane. \")]),_c('p',[_vm._v(\" Options in dropdown menus which start with a * will be replaced with a text box. This can be turned back into a dropdown by clicking the \"),_c('i',{staticClass:\"fa-solid fa-circle-xmark\"}),_vm._v(\" on the right side of the text box. \")]),_c('draggable',{staticClass:\"block-container\",attrs:{\"list\":_vm.blocks,\"group\":{ name: 'code-blocks', pull: 'clone', put: false },\"sort\":false,\"clone\":_vm.clone}},_vm._l((_vm.blocks),function(block){return _c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(block.alias),expression:\"block.alias\"}],key:block.id,staticClass:\"o-automator-command o-automator-block-list draggable-blocks\"},[_vm._v(\" \"+_vm._s(block.cmd)+\" \")])}),0),_c('p',[_vm._v(\" Note: Blocks and their contents count towards the character limits as if the command was typed in text mode. \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlocks.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorBlocks.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorBlocks.vue?vue&type=template&id=7cd77792&scoped=true&\"\nimport script from \"./AutomatorBlocks.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorBlocks.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorBlocks.vue?vue&type=style&index=0&id=7cd77792&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7cd77792\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"c-automator-editor l-automator-editor l-automator-pane__content\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorTextEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorTextEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorTextEditor.vue?vue&type=template&id=4b7848e4&\"\nimport script from \"./AutomatorTextEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorTextEditor.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"tab\",staticClass:\"c-perk-tab\"},[_c('PerkPointLabel')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-perk-tab__header\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-perk-tab__perk-points\"},[_vm._v(_vm._s(_vm.format(_vm.pp, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Perk Point\", _vm.pp))+\". \"),_c('br'),_vm._v(\" Perk choices are permanent and cannot be respecced. \"),_c('br'),_vm._v(\" Diamond-shaped perks also give Automator Points. \"),_c('br'),_c('div',{staticClass:\"perk-settings\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn c-button-perk-layout\",on:{\"click\":_vm.cycleLayout}},[_vm._v(\" Perk Layout: \"+_vm._s(_vm.layoutText)+\" \")]),_c('PrimaryButton',{class:_vm.physicsClassObject(),on:{\"click\":_vm.togglePhysics}},[_vm._v(\" Physics: \"+_vm._s(_vm.physicsText)+\" \")]),_c('br'),_c('PrimaryButton',{staticClass:\"o-primary-btn\",on:{\"click\":_vm.centerTree}},[_vm._v(\" Center Tree on START \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn\",on:{\"click\":_vm.straightenEdges}},[_vm._v(\" Straighten Edges \")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',_vm._g({staticClass:\"o-primary-btn\",class:_vm.classObject},_vm.$listeners),[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PrimaryButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PrimaryButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PrimaryButton.vue?vue&type=template&id=e4ba2ef4&\"\nimport script from \"./PrimaryButton.vue?vue&type=script&lang=js&\"\nexport * from \"./PrimaryButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PerkPointLabel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PerkPointLabel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PerkPointLabel.vue?vue&type=template&id=1d796bb5&scoped=true&\"\nimport script from \"./PerkPointLabel.vue?vue&type=script&lang=js&\"\nexport * from \"./PerkPointLabel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PerkPointLabel.vue?vue&type=style&index=0&id=1d796bb5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1d796bb5\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PerksTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PerksTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PerksTab.vue?vue&type=template&id=74365f28&scoped=true&\"\nimport script from \"./PerksTab.vue?vue&type=script&lang=js&\"\nexport * from \"./PerksTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"74365f28\",\n null\n \n)\n\nexport default component.exports","import { GameDatabase } from \"./secret-formula/game-database\";\r\n\r\n/**\r\n * Multiple glyph effects are combined into a summary object of this type.\r\n * @typedef {Object} GlyphEffectConfig__combine_result\r\n * @property {number | Decimal} value The final effect value (boost to whatever)\r\n * @property {boolean} capped whether or not a cap or limit was applied (softcaps, etc)\r\n*/\r\nclass GlyphEffectConfig {\r\n /**\r\n * @param {Object} setup The fields here mostly match the properties of GlyphEffectConfig\r\n * @param {string} setup.id powerpow, etc\r\n * @param {string[]} setup.glyphTypes\r\n * @param {string} setup.singleDesc Specify how to show a single glyph's effect. Use a string with {value}\r\n * somewhere in it; that will be replaced with a number.\r\n * @param {string} [setup.totalDesc] (Defaults to singleDesc) specify how to show the combined effect of many\r\n * glyphs.\r\n * @param {string} [setup.genericDesc] (Defaults to singleDesc with {value} replaced with \"x\") Generic\r\n * description of the glyph's effect\r\n * @param {string} [setup.shortDesc] Short and condensed version of the glyph's effect for use in the Modal\r\n * @param {(function(number, number): number) | function(number, number): Decimal} [setup.effect] Calculate effect\r\n * value from level and strength\r\n * @param {function(number | Decimal): string} [setup.formatEffect] Format the effect's value into a string. Defaults\r\n * to format(x, 3, 3)\r\n * @param {function(number | Decimal): string} [setup.formatSingleEffect] Format the effect's value into a string, used\r\n * for effects which need to display different values in single values versus combined values (eg. power effects)\r\n * @param {function(number | Decimal): number | Decimal} [setup.softcap] An optional softcap to be applied after glyph\r\n * effects are combined.\r\n * @param {((function(number[]): GlyphEffectConfig__combine_result) | function(number[]): number)} setup.combine\r\n * Specification of how multiple glyphs combine. Can be GlyphCombiner.add or GlyphCombiner.multiply for most glyphs.\r\n * Otherwise, should be a function that takes a potentially empty array of numbers (each glyph's effect value)\r\n * and returns a combined effect or an object with the combined effect amd a capped indicator.\r\n * @param {boolean} [setup.enabledInDoomed] Determines if this effect is enabled while doomed. Defaults to false\r\n */\r\n constructor(setup) {\r\n GlyphEffectConfig.checkInputs(setup);\r\n /** @type {string} unique key for the effect -- powerpow, etc */\r\n this.id = setup.id;\r\n /** @type {number} bit position for the effect in the effect bitmask */\r\n this.bitmaskIndex = setup.bitmaskIndex;\r\n /** @type {boolean} flag to separate \"basic\"/effarig glyphs from cursed/reality glyphs */\r\n this.isGenerated = setup.isGenerated;\r\n /** @type {string[]} the types of glyphs this effect can occur on */\r\n this.glyphTypes = setup.glyphTypes;\r\n /** @type {string} See info about setup, above */\r\n this._singleDesc = setup.singleDesc;\r\n /** @type {string} See info about setup, above */\r\n this._totalDesc = setup.totalDesc ?? setup.singleDesc;\r\n /** @type {string} description of the effect without a specific value */\r\n this._genericDesc = setup.genericDesc ?? setup.singleDesc.replace(\"{value}\", \"x\");\r\n /** @type {string} shortened description for use in glyph choice info modal */\r\n this._shortDesc = setup.shortDesc;\r\n /**\r\n * @type {(function(number, number): number) | function(number, number): Decimal} Calculate effect\r\n * value from level and strength\r\n */\r\n this.effect = setup.effect;\r\n /**\r\n * @type {function(number | Decimal): string} formatting function for the effect\r\n * (just the number conversion). Combined with the description strings to make descriptions\r\n */\r\n this.formatEffect = setup.formatEffect ?? (x => format(x, 3, 3));\r\n /** @type {function(number | Decimal): string} See info about setup, above */\r\n this.formatSingleEffect = setup.formatSingleEffect || this.formatEffect;\r\n /**\r\n * @type {function(number[]): GlyphEffectConfig__combine_result} combine Function that combines\r\n * multiple glyph effects into one value (adds up, applies softcaps, etc)\r\n */\r\n this.combine = GlyphEffectConfig.setupCombine(setup);\r\n /** @type {function(number)} conversion function to produce altered glyph effect */\r\n this.conversion = setup.conversion;\r\n /**\r\n * @type {function(number | Decimal): string} formatSecondaryEffect formatting function for\r\n * the secondary effect (if there is one)\r\n */\r\n this.formatSecondaryEffect = setup.formatSecondaryEffect || (x => format(x, 3, 3));\r\n /** @type {function(number | Decimal): string} See info about setup, above */\r\n this.formatSingleSecondaryEffect = setup.formatSingleSecondaryEffect || this.formatSecondaryEffect;\r\n /** @type {string} color to show numbers in glyph tooltips if boosted */\r\n this.alteredColor = setup.alteredColor;\r\n /** @type {number} string passed along to tooltip code to ensure proper formatting */\r\n this.alterationType = setup.alterationType;\r\n /** @type {boolean} Indicates whether the effect grows with level or shrinks */\r\n this._biggerIsBetter = undefined;\r\n /** @type {boolean} Determines if effect is disabled while in doomed */\r\n this._enabledInDoomed = setup.enabledInDoomed ?? false;\r\n /** @type {boolean} Determines if effect is disabled even with pelle25 */\r\n this._enabledInDoomedWithlvl25 = setup.enabledInDoomedWithlvl25 ?? false;\r\n }\r\n\r\n /**\r\n * @returns {boolean}\r\n */\r\n get biggerIsBetter() {\r\n if (this._biggerIsBetter === undefined) this._biggerIsBetter = this.checkBiggerIsBetter();\r\n return this._biggerIsBetter;\r\n }\r\n\r\n get singleDesc() {\r\n const singleDesc = this._singleDesc;\r\n return typeof singleDesc === \"function\" ? singleDesc() : singleDesc;\r\n }\r\n\r\n get totalDesc() {\r\n const totalDesc = this._totalDesc;\r\n return typeof totalDesc === \"function\" ? totalDesc() : totalDesc;\r\n }\r\n\r\n get genericDesc() {\r\n const genericDesc = this._genericDesc;\r\n return typeof genericDesc === \"function\" ? genericDesc() : genericDesc;\r\n }\r\n\r\n get shortDesc() {\r\n const shortDesc = this._shortDesc;\r\n return typeof shortDesc === \"function\" ? shortDesc() : shortDesc;\r\n }\r\n\r\n get isDisabledByDoomed() { //this looks vue only\r\n return Pelle.isDoomed && !this._enabledInDoomed;\r\n }\r\n\r\n get isDisabledByDoomedWithlvl25() { //this looks vue only\r\n return Pelle.isDoomed && !this._enabledInDoomedWithlvl25;\r\n }\r\n\r\n /** @returns {number} */\r\n compareValues(effectValueA, effectValueB) {\r\n const result = Decimal.compare(effectValueA, effectValueB);\r\n return this.biggerIsBetter ? result : -result;\r\n }\r\n\r\n /**\r\n * @private\r\n * @returns {boolean}\r\n */\r\n checkBiggerIsBetter() {\r\n const baseEffect = new Decimal(this.effect(1, 1.01));\r\n const biggerEffect = new Decimal(this.effect(100, 2));\r\n return biggerEffect.gt(baseEffect);\r\n }\r\n\r\n /** @private */\r\n static checkInputs(setup) {\r\n const KNOWN_KEYS = [\"id\", \"bitmaskIndex\", \"glyphTypes\", \"singleDesc\", \"totalDesc\", \"genericDesc\", \"effect\",\r\n \"formatEffect\", \"formatSingleEffect\", \"combine\", \"softcap\", \"conversion\", \"formatSecondaryEffect\",\r\n \"formatSingleSecondaryEffect\", \"alteredColor\", \"alterationType\", \"isGenerated\", \"shortDesc\", \"enabledInDoomed\", \"enabledInDoomedWithlvl25\"];\r\n const unknownField = Object.keys(setup).find(k => !KNOWN_KEYS.includes(k));\r\n if (unknownField !== undefined) {\r\n throw new Error(`Glyph effect \"${setup.id}\" includes unrecognized field \"${unknownField}\"`);\r\n }\r\n\r\n const unknownGlyphType = setup.glyphTypes.find(e => !GLYPH_TYPES.includes(e));\r\n if (unknownGlyphType !== undefined) {\r\n throw new Error(`Glyph effect \"${setup.id}\" references unknown glyphType \"${unknownGlyphType}\"`);\r\n }\r\n\r\n const emptyCombine = setup.combine([]);\r\n if (typeof emptyCombine !== \"number\" && !(emptyCombine instanceof Decimal)) {\r\n if (emptyCombine.value === undefined || emptyCombine.capped === undefined) {\r\n throw new Error(`The combine function for Glyph effect \"${setup.id}\" has invalid return type`);\r\n }\r\n if (setup.softcap) {\r\n throw new Error(`The combine function for Glyph effect \"${setup.id}\" gives capped information, ` +\r\n `but there's also a softcap method`);\r\n }\r\n }\r\n }\r\n\r\n /** @private */\r\n static setupCombine(setup) {\r\n let combine = setup.combine;\r\n const softcap = setup.softcap;\r\n const emptyCombine = combine([]);\r\n // No supplied capped indicator\r\n if (typeof (emptyCombine) === \"number\") {\r\n if (softcap === undefined) return effects => ({ value: combine(effects), capped: false });\r\n return effects => {\r\n const rawValue = combine(effects);\r\n const cappedValue = softcap(rawValue);\r\n return { value: cappedValue, capped: rawValue !== cappedValue };\r\n };\r\n }\r\n if (emptyCombine instanceof Decimal) {\r\n if (softcap === undefined) return effects => ({ value: combine(effects), capped: false });\r\n const neqTest = emptyCombine.value instanceof Decimal ? (a, b) => a.neq(b) : (a, b) => a !== b;\r\n return combine = effects => {\r\n const rawValue = combine(effects);\r\n const cappedValue = softcap(rawValue.value);\r\n return { value: cappedValue, capped: rawValue.capped || neqTest(rawValue.value, cappedValue) };\r\n };\r\n }\r\n // The result's an object, so it already has a capped propery, so we don't need to do anything.\r\n return combine;\r\n }\r\n}\r\n\r\nexport const realityGlyphEffectLevelThresholds = [0, 9000, 15000, 25000];\r\n\r\nexport const GlyphEffects = mapGameDataToObject(\r\n GameDatabase.reality.glyphEffects,\r\n config => new GlyphEffectConfig(config)\r\n);\r\n\r\nexport function findGlyphTypeEffects(glyphType) {\r\n return GlyphEffects.all.filter(e => e.glyphTypes.includes(glyphType));\r\n}\r\n\r\nexport function makeGlyphEffectBitmask(effectList) {\r\n return effectList.reduce((mask, eff) => mask + (1 << GlyphEffects[eff].bitmaskIndex), 0);\r\n}\r\n\r\nexport function getGlyphEffectsFromBitmask(bitmask) {\r\n return orderedEffectList\r\n .map(effectName => GlyphEffects[effectName])\r\n .filter(effect => (bitmask & (1 << effect.bitmaskIndex)) !== 0);\r\n}\r\n\r\nexport function getGlyphIDsFromBitmask(bitmask) {\r\n return getGlyphEffectsFromBitmask(bitmask).map(x => x.id);\r\n}\r\n\r\nclass FunctionalGlyphType {\r\n /**\r\n * @param {Object} setup\r\n * @param {string} setup.id\r\n * @param {function(): string} [setup.primaryEffect] All glyphs generated will have this effect, if specified\r\n * @param {function(): boolean} [setup.isUnlocked] If this glyph type is not available initially, this specifies\r\n * how to check to see if it is available\r\n * @param {number} setup.alchemyResource Alchemy resource generated by sacrificing this glyph\r\n * @param {boolean} setup.hasRarity If the glyph can have rarity or not\r\n */\r\n constructor(setup) {\r\n /** @type {string} identifier for this type (time, power, etc)*/\r\n this.id = setup.id;\r\n /** @type {GlyphEffectConfig[]} list of effects that this glyph can have */\r\n this.effects = findGlyphTypeEffects(setup.id);\r\n /** @type {string?} all glyphs generated will have at least this effect */\r\n this.primaryEffect = setup.primaryEffect;\r\n /** @type {undefined | function(): boolean} */\r\n this._isUnlocked = setup.isUnlocked;\r\n /** @type {number} */\r\n this.alchemyResource = setup.alchemyResource;\r\n /** @type {boolean} */\r\n this.hasRarity = setup.hasRarity;\r\n if (!GLYPH_TYPES.includes(this.id)) {\r\n throw new Error(`Id ${this.id} not found in GLYPH_TYPES`);\r\n }\r\n }\r\n\r\n /** @returns {boolean} */\r\n get isUnlocked() {\r\n return this._isUnlocked?.() ?? true;\r\n }\r\n}\r\n\r\nconst functionalGlyphTypes = mapGameDataToObject(\r\n GameDatabase.reality.glyphTypes,\r\n config => new FunctionalGlyphType(config)\r\n);\r\n\r\nexport const GlyphTypes = {\r\n ...functionalGlyphTypes,\r\n /**\r\n * @param {function(): number} rng Random number source (0..1)\r\n * @param {string} [blacklisted] Do not return the specified type\r\n * @returns {string | null}\r\n */\r\n random(rng, blacklisted = []) {\r\n const types = generatedTypes.filter(\r\n x => ((EffarigUnlock.reality.isUnlocked || MendingUpgrade(12).isBought)|| x !== \"effarig\") && !blacklisted.includes(x));\r\n return types[Math.floor(rng.uniform() * types.length)];\r\n },\r\n get list() {\r\n return GLYPH_TYPES.map(e => GlyphTypes[e]);\r\n },\r\n get locked() {\r\n return this.list.filter(e => !e.isUnlocked);\r\n }\r\n};\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-automator-pane\"},[_c('div',{staticClass:\"c-automator__controls l-automator__controls\"},[_c('div',{staticClass:\"l-automator-button-row\"},[_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Automator Introduction'),expression:\"'Automator Introduction'\"}],staticClass:\"fa-circle-info\",class:_vm.activePanelClass(_vm.panelEnum.INTRO_PAGE),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.INTRO_PAGE}}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Scripting Information'),expression:\"'Scripting Information'\"}],staticClass:\"fa-list\",class:_vm.activePanelClass(_vm.panelEnum.COMMANDS),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.COMMANDS}}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.errorTooltip),expression:\"errorTooltip\"}],staticClass:\"fa-exclamation-triangle\",class:_vm.activePanelClass(_vm.panelEnum.ERRORS),style:(_vm.errorStyle),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.ERRORS}}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Extended Data Transfer'),expression:\"'Extended Data Transfer'\"}],staticClass:\"fa-window-restore\",class:_vm.activePanelClass(_vm.panelEnum.DATA_TRANSFER),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.DATA_TRANSFER}}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('View recently executed commands'),expression:\"'View recently executed commands'\"}],staticClass:\"fa-eye\",class:_vm.activePanelClass(_vm.panelEnum.EVENTS),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.EVENTS}}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Modify defined constants'),expression:\"'Modify defined constants'\"}],staticClass:\"fa-book\",class:_vm.activePanelClass(_vm.panelEnum.CONSTANTS),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.CONSTANTS}}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Template Creator List'),expression:\"'Template Creator List'\"}],staticClass:\"fa-file-code\",class:_vm.activePanelClass(_vm.panelEnum.TEMPLATES),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.TEMPLATES}}}),(_vm.isBlock)?_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Command menu for Block editor mode'),expression:\"'Command menu for Block editor mode'\"}],staticClass:\"fa-cubes\",class:_vm.activePanelClass(_vm.panelEnum.BLOCKS),on:{\"click\":function($event){_vm.infoPaneID = _vm.panelEnum.BLOCKS}}}):_vm._e(),(_vm.fullScreen)?_c('span',{staticClass:\"c-automator__status-text c-automator__status-text--small\",class:{ 'c-automator__status-text--error' : _vm.totalChars > _vm.maxTotalChars }},[_vm._v(\" Across all scripts: \"+_vm._s(_vm.formatInt(_vm.totalChars))+\"/\"+_vm._s(_vm.formatInt(_vm.maxTotalChars))+\" \")]):_vm._e(),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.fullScreenTooltip),expression:\"fullScreenTooltip\"}],staticClass:\"l-automator__expand-corner\",class:_vm.fullScreenIconClass,on:{\"click\":function($event){_vm.fullScreen = !_vm.fullScreen}}})],1),_c('div',{staticClass:\"l-automator-button-row\"},[_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Export single automator script'),expression:\"'Export single automator script'\"}],staticClass:\"fa-file-export\",on:{\"click\":_vm.exportScript}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.importTooltip),expression:\"importTooltip\"}],staticClass:\"fa-file-import\",class:{ 'c-automator__status-text--error' : !_vm.canMakeNewScript },on:{\"click\":_vm.importScript}}),_c('div',{staticClass:\"l-automator__script-names\"},[(!_vm.editingName)?[_c('ExpandingControlBox',{staticClass:\"l-automator__scripts-dropdown\",attrs:{\"auto-close\":true},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"c-automator-docs-script-select\"},[_vm._v(\" ▼ Current Script: \"+_vm._s(_vm.currentEditorScriptName)+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('AutomatorScriptDropdownEntryList',{key:_vm.scriptCount})]},proxy:true}],null,false,1001015561)}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Rename script'),expression:\"'Rename script'\"}],staticClass:\"far fa-edit\",on:{\"click\":_vm.rename}})]:_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.nameTooltip),expression:\"nameTooltip\"}],ref:\"renameInput\",staticClass:\"l-automator__rename-input c-automator__rename-input\",class:{ 'c-long-name-box' : _vm.isNameTooLong },on:{\"blur\":_vm.nameEdited,\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.$refs.renameInput.blur()}}})],2),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Delete this script'),expression:\"'Delete this script'\"}],staticClass:\"fas fa-trash\",on:{\"click\":_vm.deleteScript}})],1)]),_c('div',{staticClass:\"c-automator-docs l-automator-pane__content\"},[(_vm.infoPaneID === _vm.panelEnum.INTRO_PAGE)?_c('AutomatorDocsIntroPage'):(_vm.infoPaneID === _vm.panelEnum.COMMANDS)?_c('AutomatorDocsCommandList'):(_vm.infoPaneID === _vm.panelEnum.ERRORS)?_c('AutomatorErrorPage'):(_vm.infoPaneID === _vm.panelEnum.EVENTS)?_c('AutomatorEventLog'):(_vm.infoPaneID === _vm.panelEnum.DATA_TRANSFER)?_c('AutomatorDataTransferPage'):(_vm.infoPaneID === _vm.panelEnum.CONSTANTS)?_c('AutomatorDefinePage'):(_vm.infoPaneID === _vm.panelEnum.TEMPLATES)?_c('AutomatorDocsTemplateList'):(_vm.infoPaneID === _vm.panelEnum.BLOCKS)?_c('AutomatorBlocks'):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"c-automator__button l-automator__button fas\",on:{\"click\":_vm.emitClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorButton.vue?vue&type=template&id=a1d47f14&scoped=true&\"\nimport script from \"./AutomatorButton.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorButton.vue?vue&type=style&index=0&id=a1d47f14&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a1d47f14\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-panel-padding\"},[_vm._v(\" This page lets you import and export scripts with additional data attached; the encoded text will also include data for any Time Study presets or constants used within the script. This will allow you to more easily transfer working scripts between different save files, but you may have to overwrite existing data in the process due to limited space for study presets and constants. Data exported from this page is also imported in the same way that single script data is imported. \"),_c('br'),_c('br'),_vm._v(\" Note: Any mentions of constant names or full study-buying commands within comments will also be counted as being \\\"used\\\" within a script. This is intentional, as the comment is assumed to be indicative of what the script itself is attempting to do with presets or constants. \"),_c('br'),_c('br'),_vm._l((_vm.scripts),function(script,id){return _c('div',{key:id},[_c('AutomatorDataTransferSingleEntry',{staticClass:\"l-entry-margin\",attrs:{\"script\":script}})],1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-entry-padding\"},[_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Export Full Script Data'),expression:\"'Export Full Script Data'\"}],staticClass:\"l-button-margin fas fa-file-export\",on:{\"click\":function($event){return _vm.exportData(_vm.script.id)}}}),_c('b',[_vm._v(\"Script name: \"+_vm._s(_vm.script.name))]),_c('br'),(_vm.hasPresets)?_c('span',[_c('span',{class:_vm.iconClass(_vm.hidePresets),on:{\"click\":function($event){_vm.hidePresets = !_vm.hidePresets}}}),_vm._v(\" References \"+_vm._s(_vm.quantifyInt(\"recognized study preset\", _vm.presets.length))+\" \"),(!_vm.hidePresets)?_c('span',_vm._l((_vm.presets),function(id){return _c('div',{key:id},[(_vm.presetData[id].name)?_c('span',[_vm._v(\"\\\"\"+_vm._s(_vm.presetData[id].name)+\"\\\" (slot \"+_vm._s(id + 1)+\"):\")]):_c('span',[_vm._v(\"Preset slot \"+_vm._s(id + 1)+\":\")]),_c('br'),_c('div',{staticClass:\"l-value-padding\"},[(_vm.presetData[id].studies)?_c('span',[_vm._v(_vm._s(_vm.presetData[id].studies))]):_c('i',[_vm._v(\"Empty Study Preset\")])])])}),0):_vm._e()]):_c('span',[_vm._v(\" Does not reference any study presets. \")]),_c('br'),(_vm.hasConstants)?_c('span',[_c('span',{class:_vm.iconClass(_vm.hideConstants),on:{\"click\":function($event){_vm.hideConstants = !_vm.hideConstants}}}),_vm._v(\" References \"+_vm._s(_vm.quantifyInt(\"defined constant\", _vm.constants.length))+\" \"),(!_vm.hideConstants)?_c('span',_vm._l((_vm.constants),function(name){return _c('div',{key:name},[_vm._v(\" \\\"\"+_vm._s(name)+\"\\\": \"),_c('br'),_c('div',{staticClass:\"l-value-padding\"},[_vm._v(\" \"+_vm._s(_vm.constantData[name])+\" \")])])}),0):_vm._e()]):_c('span',[_vm._v(\" Does not reference any defined constants. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDataTransferSingleEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDataTransferSingleEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDataTransferSingleEntry.vue?vue&type=template&id=87c8567a&scoped=true&\"\nimport script from \"./AutomatorDataTransferSingleEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDataTransferSingleEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDataTransferSingleEntry.vue?vue&type=style&index=0&id=87c8567a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"87c8567a\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDataTransferPage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDataTransferPage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDataTransferPage.vue?vue&type=template&id=4d4d30ca&scoped=true&\"\nimport script from \"./AutomatorDataTransferPage.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDataTransferPage.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDataTransferPage.vue?vue&type=style&index=0&id=4d4d30ca&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d4d30ca\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-panel-padding\"},[_vm._v(\" This panel allows you to define case-sensitive constant values which can be used in place of numbers or Time Study import strings. These definitions are shared across all of your scripts and are limited to a maximum of \"+_vm._s(_vm.maxConstantCount)+\" defined constants. Additionally, constant names and values are limited to lengths of \"+_vm._s(_vm.maxNameLength)+\" and \"+_vm._s(_vm.maxValueLength)+\" characters respectively. Changes made to constants will not apply until any currently running scripts are restarted. \"),_c('br'),_c('br'),_vm._v(\" As a usage example, defining \"),_c('b',[_vm._v(\"first 🠈 11,21,22,31,32,33\")]),_vm._v(\" allows you to use \"),_c('b',[_vm._v(\"studies purchase first\")]),_vm._v(\" in order to purchase all of the studies in the first three rows. \"),_c('br'),_c('br'),_c('PrimaryButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.hasConstants ? null : 'You have no valid constants to delete!'),expression:\"hasConstants ? null : 'You have no valid constants to delete!'\"}],staticClass:\"c-delete-margin o-primary-btn--subtab-option\",class:{ 'o-primary-btn--disabled' : !_vm.hasConstants },on:{\"click\":_vm.deleteAllConstants}},[_vm._v(\" Delete all constants \")]),_c('br'),_c('br'),_c('PrimaryButton',{staticClass:\"c-delete-margin o-primary-btn--subtab-option\",on:{\"click\":_vm.importPresets}},[_vm._v(\" Import Time Study Presets \")]),_c('div',{key:_vm.count + _vm.refreshConstants,staticClass:\"l-definition-container\"},_vm._l((_vm.constants),function(constant,i){return _c('AutomatorDefineSingleEntry',{key:i,attrs:{\"constant\":constant}})}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-single-definition-container\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.aliasString),expression:\"aliasString\"}],staticClass:\"c-define-textbox c-alias\",class:{ 'l-limit-textbox' : _vm.aliasString.length === _vm.maxNameLength },attrs:{\"placeholder\":\"New constant...\",\"maxlength\":_vm.maxNameLength},domProps:{\"value\":(_vm.aliasString)},on:{\"focusin\":function($event){return _vm.handleFocus(true)},\"focusout\":function($event){return _vm.handleFocus(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.aliasString=$event.target.value}}}),(_vm.aliasString)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.errorTooltip()),expression:\"errorTooltip()\"}],staticClass:\"o-arrow-padding\"},[_vm._v(\" 🠈 \")]):_vm._e(),(_vm.aliasString)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.valueString),expression:\"valueString\"}],staticClass:\"c-define-textbox c-value\",class:{ 'l-limit-textbox' : _vm.valueString && _vm.valueString.length === _vm.maxValueLength },attrs:{\"placeholder\":\"Value for constant...\",\"maxlength\":_vm.maxValueLength},domProps:{\"value\":(_vm.valueString)},on:{\"focusin\":function($event){return _vm.handleFocus(true)},\"focusout\":function($event){return _vm.handleFocus(false)},\"input\":function($event){if($event.target.composing){ return; }_vm.valueString=$event.target.value}}}):_vm._e(),(_vm.aliasString)?_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Delete this constant'),expression:\"'Delete this constant'\"}],staticClass:\"c-delete-button fas fa-eraser\",on:{\"click\":_vm.deleteConstant}}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDefineSingleEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDefineSingleEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDefineSingleEntry.vue?vue&type=template&id=559b0908&scoped=true&\"\nimport script from \"./AutomatorDefineSingleEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDefineSingleEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDefineSingleEntry.vue?vue&type=style&index=0&id=559b0908&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"559b0908\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDefinePage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDefinePage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDefinePage.vue?vue&type=template&id=1499c066&scoped=true&\"\nimport script from \"./AutomatorDefinePage.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDefinePage.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDefinePage.vue?vue&type=style&index=0&id=1499c066&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1499c066\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.selectedCommand !== -1)?_c('div',[_c('button',{staticClass:\"c-automator-docs--button l-return-button fas fa-arrow-left\",on:{\"click\":function($event){_vm.selectedCommand = -1}}}),_vm._v(\" Return to the Command List \")]):_vm._e(),(_vm.selectedCommand !== -1)?_c('AutomatorDocsManPage',{attrs:{\"command\":_vm.commands[_vm.selectedCommand]}}):_c('div',{staticClass:\"c-automator-docs-page\"},[_vm._v(\" Click on an underlined command to see more details on syntax, usage, and functionality. \"),_c('br'),_c('br'),_c('span',[_vm._v(\"Command List:\")]),_c('br'),_vm._l((_vm.categoryNames),function(category,i){return _c('div',{key:i},[_vm._v(\" \"+_vm._s(category)+\" (\"+_vm._s(_vm.commandsInCategory(i).length)+\" commands) \"),_vm._l((_vm.commandsInCategory(i)),function(command){return _c('div',{key:command.id,staticClass:\"c-automator-docs-page__link l-command-group\",on:{\"click\":function($event){_vm.selectedCommand = command.id}}},[(command.isUnlocked())?_c('span',[_vm._v(\" \"+_vm._s(command.keyword)+\" \")]):_vm._e()])})],2)}),_c('br'),_c('span',[_vm._v(\" Note: In the SYNTAX note on each command, \"),_c('u',[_vm._v(\"underlined\")]),_vm._v(\" inputs are \"),_c('i',[_vm._v(\"required\")]),_vm._v(\" inputs which you must fill and inputs in [square brackets] are optional (if used, they should be input \"),_c('i',[_vm._v(\"without\")]),_vm._v(\" the brackets). Any other parts should be typed in as they appear. Unless otherwise stated, all of the inputs are case-insensitive. Some commands may have more than one valid format, which will appear on separate lines. \")])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-docs-page\"},[_c('b',[_vm._v(\"NAME\")]),_c('div',{staticClass:\"c-automator-docs-page__indented\",domProps:{\"innerHTML\":_vm._s(_vm.command.keyword)}}),_c('b',[_vm._v(\"SYNTAX\")]),_c('div',{staticClass:\"c-automator-docs-page__indented\",domProps:{\"innerHTML\":_vm._s(_vm.command.syntax)}}),(_vm.command.description)?[_c('b',[_vm._v(\"DESCRIPTION\")]),_c('div',{staticClass:\"c-automator-docs-page__indented\",domProps:{\"innerHTML\":_vm._s(_vm.description)}})]:_vm._e(),_vm._l((_vm.command.sections),function(section){return [_c('b',{key:section.name},[_vm._v(_vm._s(section.name))]),_vm._l((section.items),function(item){return [_c('div',{key:item.header,staticClass:\"c-automator-docs-page__indented\"},[_c('div',{domProps:{\"innerHTML\":_vm._s(item.header)}}),_c('div',{staticClass:\"c-automator-docs-page__indented\",domProps:{\"innerHTML\":_vm._s(item.description)}})])]})]}),(_vm.command.examples)?[_c('b',[_vm._v(\"USAGE EXAMPLES\")]),_vm._l((_vm.command.examples),function(example){return _c('div',{key:example,staticClass:\"c-automator-docs-page__indented\",domProps:{\"innerHTML\":_vm._s(example)}})})]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsManPage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsManPage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDocsManPage.vue?vue&type=template&id=773d709a&scoped=true&\"\nimport script from \"./AutomatorDocsManPage.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDocsManPage.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"773d709a\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsCommandList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsCommandList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDocsCommandList.vue?vue&type=template&id=71d16626&scoped=true&\"\nimport script from \"./AutomatorDocsCommandList.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDocsCommandList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDocsCommandList.vue?vue&type=style&index=0&id=71d16626&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"71d16626\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(\" Welcome to the Antimatter Dimensions Automator! \"),_c('br'),_c('br'),_vm._v(\" This page is an introduction page which gives a very broad overview of everything you can do with the Automator. Specific details on various functionality can be found in the How To Play or their respective tabs (when relevant). \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Scripting Language:\")]),_vm._v(\" The Automator uses a custom scripting language in order to perform certain game actions for you. Click \"),_c('div',{staticClass:\"fas fa-list c-automator-button-icon\"}),_vm._v(\" to bring up a list of available commands. You can also define constants as shorthand names for various values on the \"),_c('div',{staticClass:\"fas fa-book c-automator-button-icon\"}),_vm._v(\" page. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Layout:\")]),_vm._v(\" This Automator itself is split up into two halves; the left half contains your script and controls for starting, stopping, and repeating its execution, and the right half contains Automator information. Clicking \"),_c('div',{staticClass:\"fas fa-expand-arrows-alt c-automator-button-icon\"}),_vm._v(\" in the top-right corner will expand the Automator to take up the whole browser page for easier editing. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Editor Modes:\")]),_vm._v(\" There are two different editors you can use to write your automator scripts - a block-based editor (default) and a text-based editor. You can swap between the two editor types with the switch in the top-right corner of the left half. Note that scripts with errors may not properly convert between the two modes, which can cause part of your script to be deleted. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Making Scripts:\")]),_vm._v(\" You can switch between multiple scripts or make new scripts using the dropdown on the second row of buttons. The current script can be renamed or deleted with the \"),_c('div',{staticClass:\"fas fa-edit c-automator-button-icon\"}),_vm._v(\" and \"),_c('div',{staticClass:\"fas fa-trash c-automator-button-icon\"}),_vm._v(\" buttons. The Automator will always contain at least one script for you to edit; deleting your last one will automatically create a new blank one. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Writing Scripts:\")]),_vm._v(\" Scripts in the block editor are made by going to the block tab \"),_c('div',{staticClass:\"fas fa-cubes c-automator-button-icon\"}),_vm._v(\", while scripts in the text editor are made by typing into the left half as a text box. In either editor mode, you can also use some smaller premade scripts from the template generator \"),_c('div',{staticClass:\"fas fa-file-code c-automator-button-icon\"}),_vm._v(\". You can undo or redo a limited number of edits using \"),_c('div',{staticClass:\"fas fa-arrow-rotate-left c-automator-button-icon\"}),_vm._v(\" or \"),_c('div',{staticClass:\"fas fa-arrow-rotate-right c-automator-button-icon\"}),_vm._v(\", or by using the respective hotkeys. Edit history is cleared upon switching, converting, or deleting scripts. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Debugging:\")]),_vm._v(\" The two main tools you have for fixing your scripts are the Error Log \"),_c('div',{staticClass:\"fas fa-exclamation-triangle c-automator-button-icon\"}),_vm._v(\" for when you can't get your script to run at all, and the Event Log \"),_c('div',{staticClass:\"fas fa-eye c-automator-button-icon\"}),_vm._v(\" for when it runs but doesn't do what you expect it to do. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Importing/Exporting:\")]),_vm._v(\" Automator scripts can be exported and imported in text format by using the \"),_c('div',{staticClass:\"fas fa-file-export c-automator-button-icon\"}),_vm._v(\" and \"),_c('div',{staticClass:\"fas fa-file-import c-automator-button-icon\"}),_vm._v(\" buttons respectively. You can also access additional extended exporting options \"),_c('div',{staticClass:\"fas fa-window-restore c-automator-button-icon\"}),_vm._v(\" if desired. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Script saving:\")]),_vm._v(\" Script changes are not immediately saved to your computer under all conditions; check the Automator How To Play entries for more details. Additionally there are two character limits to reduce lag, shown above the automator panels. \")])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsIntroPage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsIntroPage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDocsIntroPage.vue?vue&type=template&id=2dfadf11&scoped=true&\"\nimport script from \"./AutomatorDocsIntroPage.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDocsIntroPage.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDocsIntroPage.vue?vue&type=style&index=0&id=2dfadf11&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2dfadf11\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(\" These templates will let you do some more common things within the Automator. They may be slightly slower than manually-written scripts, but don't require you to have any previous programming experience to use. Clicking any of these buttons will open up a prompt with some input fields, which will generate a template you can place into your Automator. \"),_vm._l((_vm.templates),function(template){return _c('button',{key:template.name,staticClass:\"o-primary-btn c-automator-docs-template--button l-automator__button\",on:{\"click\":function($event){return _vm.showModal(template)}}},[_vm._v(\" Template: \"+_vm._s(template.name)+\" \")])}),_vm._v(\" Since you are currently in the \"+_vm._s(_vm.isBlock ? \"Block\" : \"Text\")+\" editor, this panel will \"+_vm._s(_vm.pasteText)+\". \"),_c('br'),_c('br'),(_vm.isBlock)?_c('draggable',{key:_vm.blockTemplates.length,staticClass:\"template-container\",attrs:{\"list\":_vm.blockTemplates,\"group\":{ name: 'code-blocks', pull: 'clone', put: false },\"sort\":false},on:{\"end\":_vm.unpackTemplateBlocks}},_vm._l((_vm.blockTemplates),function(template,i){return _c('div',{key:i,staticClass:\"o-automator-command o-automator-block-list draggable-blocks\",on:{\"dragstart\":function($event){return _vm.setIndex(i)}}},[_vm._v(\" \"+_vm._s(template.name)+\" \")])}),0):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsTemplateList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocsTemplateList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDocsTemplateList.vue?vue&type=template&id=a3645a5c&scoped=true&\"\nimport script from \"./AutomatorDocsTemplateList.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDocsTemplateList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDocsTemplateList.vue?vue&type=style&index=0&id=a3645a5c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a3645a5c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-docs-page\"},[(_vm.errors.length === 0)?_c('div',[_vm._v(\" No script errors found! \")]):_c('div',[_c('b',[_vm._v(\"Your script has the following \"+_vm._s(_vm.quantify(\"error\", _vm.errors.length))+\":\")]),_c('br'),_vm._l((_vm.errors),function(error,i){return _c('span',{key:i},[_c('b',[_vm._v(\"On line \"+_vm._s(error.startLine)+\":\")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Jump to line'),expression:\"'Jump to line'\"}],staticClass:\"c-automator-docs--button fas fa-arrow-circle-right\",on:{\"click\":function($event){return _vm.scrollToLine(error.startLine)}}}),_c('div',{staticClass:\"c-automator-docs-page__indented\"},[_vm._v(\" \"+_vm._s(error.info)+\" \")]),_c('div',{staticClass:\"c-automator-docs-page__indented\"},[_c('i',[_vm._v(\"Suggested fix: \"+_vm._s(error.tip))])])])}),_c('i',[_vm._v(\" Note: Sometimes errors may cause the automator to be unable to scan the rest of the script properly. This may result in some errors \\\"disappearing\\\" due to other errors occurring in earlier lines, or errors in a command which has an inner block (eg. commands like IF or WHILE) causing errors to appear on correctly-formatted later commands. Additionally, some of the suggested fixes may be potentially misleading due to the cause of the error being unclear. \")])],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorErrorPage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorErrorPage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorErrorPage.vue?vue&type=template&id=c61501d4&scoped=true&\"\nimport script from \"./AutomatorErrorPage.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorErrorPage.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c61501d4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-docs-page\"},[_c('div',[_vm._v(\" This panel keeps a running event log of all the commands which the automator has recently executed, with a little extra info on some of the commands. It may be useful to help you find problems if you find your automator is getting stuck in certain spots. \"),_c('br'),_c('br'),_vm._v(\" While your settings are kept within your savefile, the actual events are not and will disappear on refresh. \"),_c('br'),_c('br'),_c('b',[_vm._v(\"Entry Sorting:\")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Oldest results first'),expression:\"'Oldest results first'\"}],staticClass:\"fa-angle-down\",class:_vm.buttonClassObject,style:(_vm.sortStyle(!_vm.newestFirst)),on:{\"click\":function($event){_vm.newestFirst = false}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Newest results first'),expression:\"'Newest results first'\"}],staticClass:\"fa-angle-up\",class:_vm.buttonClassObject,style:(_vm.sortStyle(_vm.newestFirst)),on:{\"click\":function($event){_vm.newestFirst = true}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.clearTooltip),expression:\"clearTooltip\"}],staticClass:\"fa-trash\",class:_vm.buttonClassObject,on:{\"click\":_vm.clearLog}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Clear event log every Reality'),expression:\"'Clear event log every Reality'\"}],staticClass:\"fa-eraser\",class:_vm.buttonClassObject,style:(_vm.clearRealityStyle()),on:{\"click\":function($event){_vm.clearOnReality = !_vm.clearOnReality}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Clear event log on script restart'),expression:\"'Clear event log on script restart'\"}],staticClass:\"fa-backspace\",class:_vm.buttonClassObject,style:(_vm.clearRestartStyle()),on:{\"click\":function($event){_vm.clearOnRestart = !_vm.clearOnRestart}}})]),_c('div',[_c('b',[_vm._v(\"Timestamp style:\")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('No timestamps'),expression:\"'No timestamps'\"}],staticClass:\"fa-ban\",class:_vm.buttonClassObject,style:(_vm.timestampStyle('DISABLED')),on:{\"click\":function($event){return _vm.setTimestampMode('DISABLED')}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Current time this Reality'),expression:\"'Current time this Reality'\"}],staticClass:\"fa-stopwatch\",class:_vm.buttonClassObject,style:(_vm.timestampStyle('THIS_REALITY')),on:{\"click\":function($event){return _vm.setTimestampMode('THIS_REALITY')}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Time elapsed since event'),expression:\"'Time elapsed since event'\"}],staticClass:\"fa-clock\",class:_vm.buttonClassObject,style:(_vm.timestampStyle('RELATIVE_NOW')),on:{\"click\":function($event){return _vm.setTimestampMode('RELATIVE_NOW')}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Time since last event'),expression:\"'Time since last event'\"}],staticClass:\"fa-arrow-left\",class:_vm.buttonClassObject,style:(_vm.timestampStyle('RELATIVE_PREV')),on:{\"click\":function($event){return _vm.setTimestampMode('RELATIVE_PREV')}}}),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Date and time'),expression:\"'Date and time'\"}],staticClass:\"fa-user-clock\",class:_vm.buttonClassObject,style:(_vm.timestampStyle('DATE_TIME')),on:{\"click\":function($event){return _vm.setTimestampMode('DATE_TIME')}}})]),_vm._l((_vm.events),function(event,id){return _c('span',{key:id},[_c('b',[_vm._v(\"Line \"+_vm._s(event.line)+_vm._s(_vm.timestamp(event))+\":\")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Jump to line'),expression:\"'Jump to line'\"}],staticClass:\"fa-arrow-circle-right\",class:_vm.buttonClassObject,on:{\"click\":function($event){return _vm.scrollToLine(event.line)}}}),_c('div',{staticClass:\"c-automator-docs-page__indented\"},[_c('i',[_vm._v(_vm._s(event.message))])])])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorEventLog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorEventLog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorEventLog.vue?vue&type=template&id=5e0af30a&scoped=true&\"\nimport script from \"./AutomatorEventLog.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorEventLog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5e0af30a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{key:_vm.scripts.length},[_vm._l((_vm.scripts),function(script){return _c('div',{key:script.id,staticClass:\"l-script-option c-script-option-hover-effect\",class:_vm.labelClassObject(script.id),on:{\"click\":function($event){return _vm.changeScriptID(script.id)}}},[_vm._v(\" \"+_vm._s(_vm.dropdownLabel(script))+\" \")])}),(_vm.canMakeNewScript)?_c('div',{staticClass:\"l-create-script c-automator-docs-script-select c-script-option-hover-effect\",on:{\"click\":function($event){return _vm.createNewScript()}}},[_c('i',[_vm._v(\"Create a new script (You have \"+_vm._s(_vm.formatInt(_vm.scriptCount))+\" / \"+_vm._s(_vm.formatInt(_vm.maxScriptCount))+\")\")])]):_c('div',{staticClass:\"l-create-script c-automator-docs-script-select l-max-scripts\"},[_c('i',[_vm._v(\"You can only have \"+_vm._s(_vm.formatInt(_vm.maxScriptCount))+\" scripts!\")])])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorScriptDropdownEntryList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorScriptDropdownEntryList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorScriptDropdownEntryList.vue?vue&type=template&id=1d4a260f&scoped=true&\"\nimport script from \"./AutomatorScriptDropdownEntryList.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorScriptDropdownEntryList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorScriptDropdownEntryList.vue?vue&type=style&index=0&id=1d4a260f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1d4a260f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"root\",staticClass:\"l-expanding-control-box\",class:_vm.rootClassObject},[_c('div',{ref:\"container\",staticClass:\"l-expanding-control-box__container\",class:_vm.containerClassObject,style:(_vm.containerStyle),on:{\"transitionend\":_vm.transitionEnd,\"mouseenter\":_vm.mouseOn,\"mouseleave\":_vm.mouseOff}},[(!_vm.$slots.header)?_c('div',{ref:\"expandButton\",class:_vm.buttonClass,on:{\"click\":_vm.handleClick}},[_vm._v(\" \"+_vm._s(_vm.label)+\" \"),_c('span',{class:_vm.indicatorArrowClassObject},[_vm._v(\" ▼ \")])]):_c('div',{ref:\"expandButton\",on:{\"click\":_vm.handleClick}},[_vm._t(\"header\")],2),_c('div',{ref:\"dropdown\"},[_vm._t(\"dropdown\")],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExpandingControlBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExpandingControlBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ExpandingControlBox.vue?vue&type=template&id=3584cbe8&scoped=true&\"\nimport script from \"./ExpandingControlBox.vue?vue&type=script&lang=js&\"\nexport * from \"./ExpandingControlBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ExpandingControlBox.vue?vue&type=style&index=0&id=3584cbe8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3584cbe8\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorDocs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorDocs.vue?vue&type=template&id=192f8680&scoped=true&\"\nimport script from \"./AutomatorDocs.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorDocs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorDocs.vue?vue&type=style&index=0&id=192f8680&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"192f8680\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-select-theme\"},[_c('div',{staticClass:\"l-select-theme__inner\"},_vm._l((_vm.availableTypes),function(type){return _c('div',{key:type,staticClass:\"o-primary-btn l-select-theme__item c-select-theme__item\",on:{\"click\":function($event){return _vm.setType(type)}}},[_vm._v(\" \"+_vm._s(_vm.getType(type))+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectGlyphInfoDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectGlyphInfoDropdown.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SelectGlyphInfoDropdown.vue?vue&type=template&id=19e58774&\"\nimport script from \"./SelectGlyphInfoDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./SelectGlyphInfoDropdown.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Deepmerge library modified for Antimatter Dimensions usage (mainly Decimal integration)\r\n// Source: https://github.com/TehShrike/deepmerge\r\n\r\nfunction emptyTarget(val) {\r\n return Array.isArray(val) ? [] : {};\r\n}\r\n\r\nfunction cloneUnlessOtherwiseSpecified(value, options) {\r\n if (value instanceof Decimal) {\r\n return new Decimal(value);\r\n }\r\n if (value instanceof Set) {\r\n return new Set(value);\r\n }\r\n return (options.clone !== false && options.isMergeableObject(value))\r\n ? deepmerge(emptyTarget(value), value, options)\r\n : value;\r\n}\r\n\r\nfunction defaultArrayMerge(target, source, options) {\r\n return target.concat(source).map(element => cloneUnlessOtherwiseSpecified(element, options));\r\n}\r\n\r\nfunction mergeObject(target, source, options) {\r\n const destination = {};\r\n if (options.isMergeableObject(target)) {\r\n Object.keys(target).forEach(key => {\r\n destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\r\n });\r\n }\r\n Object.keys(source).forEach(key => {\r\n if (target[key] && target[key] instanceof Decimal) {\r\n destination[key] = new Decimal(source[key]);\r\n } else if (target[key] && target[key] instanceof Set) {\r\n destination[key] = new Set(source[key]);\r\n } else if (!options.isMergeableObject(source[key]) || !target[key]) {\r\n destination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\r\n } else {\r\n destination[key] = deepmerge(target[key], source[key], options);\r\n }\r\n });\r\n return destination;\r\n}\r\n\r\nexport function deepmerge(target, source, options = {}) {\r\n options.arrayMerge = options.arrayMerge || defaultArrayMerge;\r\n options.isMergeableObject = options.isMergeableObject || isMergeableObject;\r\n\r\n if (target instanceof Decimal) {\r\n return new Decimal(source);\r\n }\r\n\r\n if (target instanceof Set) {\r\n return new Set(source);\r\n }\r\n\r\n const sourceIsArray = Array.isArray(source);\r\n const targetIsArray = Array.isArray(target);\r\n const sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\r\n\r\n if (!sourceAndTargetTypesMatch) {\r\n return cloneUnlessOtherwiseSpecified(source, options);\r\n }\r\n\r\n if (sourceIsArray) {\r\n return options.arrayMerge(target, source, options);\r\n }\r\n\r\n return mergeObject(target, source, options);\r\n}\r\n\r\nexport function deepmergeAll(array, options) {\r\n if (!Array.isArray(array)) {\r\n throw new Error(\"first argument should be an array\");\r\n }\r\n\r\n if (!options) {\r\n // eslint-disable-next-line no-shadow\r\n const deepCloneMerge = (destinationArray, sourceArray, options) => sourceArray.map((element, index) => {\r\n if (destinationArray[index] && destinationArray[index] instanceof Decimal) {\r\n return new Decimal(element);\r\n }\r\n\r\n if (destinationArray[index] && destinationArray[index] instanceof Set) {\r\n return new Set(element);\r\n }\r\n\r\n if (!options.isMergeableObject(element) || !destinationArray[index]) {\r\n return cloneUnlessOtherwiseSpecified(element, options);\r\n }\r\n return deepmerge(destinationArray[index], element, options);\r\n\r\n });\r\n // eslint-disable-next-line no-param-reassign\r\n options = {\r\n arrayMerge: deepCloneMerge\r\n };\r\n }\r\n\r\n return array.reduce((prev, next) => deepmerge(prev, next, options), {});\r\n}\r\n\r\nfunction isMergeableObject(value) {\r\n return isNonNullObject(value) && !isSpecial(value);\r\n}\r\n\r\nfunction isNonNullObject(value) {\r\n return Boolean(value) && typeof value === \"object\";\r\n}\r\n\r\nfunction isSpecial(value) {\r\n const stringValue = Object.prototype.toString.call(value);\r\n return stringValue === \"[object RegExp]\" || stringValue === \"[object Date]\";\r\n}\r\n","import { AutomatorPanels } from \"@/components/tabs/automator/AutomatorDocs\";\r\nimport { GlyphInfo } from \"@/components/modals/options/SelectGlyphInfoDropdown\";\r\n\r\nimport { AUTOMATOR_MODE, AUTOMATOR_TYPE } from \"./automator/automator-backend\";\r\nimport { DC } from \"./constants\";\r\nimport { deepmergeAll } from \"@/utility/deepmerge\";\r\nimport { GlyphTypes } from \"./glyph-effects\";\r\nimport { Ra } from \"./globals\";\r\n\r\n// This is actually reassigned when importing saves\r\n// eslint-disable-next-line prefer-const\r\nwindow.player = {\r\n antimatter: DC.E1,\r\n dimensions: {\r\n antimatter: Array.range(0, 8).map(() => ({\r\n bought: 0,\r\n costBumps: 0,\r\n amount: DC.D0\r\n })),\r\n infinity: Array.range(0, 8).map(tier => ({\r\n isUnlocked: false,\r\n bought: 0,\r\n amount: DC.D0,\r\n cost: [DC.E8, DC.E9, DC.E10, DC.E20, DC.E140, DC.E200, DC.E250, DC.E280][tier],\r\n baseAmount: 0\r\n })),\r\n time: Array.range(0, 8).map(tier => ({\r\n cost: [DC.D1, DC.D5, DC.E2, DC.E3, DC.E2350, DC.E2650, DC.E3000, DC.E3350][tier],\r\n amount: DC.D0,\r\n bought: 0\r\n })),\r\n multiversal: Array.range(0, 8).map(tier => ({\r\n cost: [new Decimal(1e25), new Decimal(1e55), new Decimal(1e105), new Decimal(1e215), new Decimal(\"1e333\"), new Decimal(\"1e456\"), new Decimal(\"1e678\"), new Decimal(\"9.99e999\")][tier],\r\n amount: DC.D0,\r\n bought: 0\r\n }))\r\n },\r\n buyUntil10: true,\r\n sacrificed: DC.D0,\r\n achievementBits: Array.repeat(0, 17),\r\n secretAchievementBits: Array.repeat(0, 4),\r\n infinityUpgrades: new Set(),\r\n infinityRebuyables: [0, 0, 0],\r\n challenge: {\r\n normal: {\r\n current: 0,\r\n bestTimes: Array.repeat(Decimal.pow10(Number.MAX_VALUE), 11),\r\n completedBits: 0,\r\n },\r\n infinity: {\r\n current: 0,\r\n bestTimes: Array.repeat(Decimal.pow10(Number.MAX_VALUE), 8),\r\n completedBits: 0,\r\n },\r\n eternity: {\r\n current: 0,\r\n unlocked: 0,\r\n requirementBits: 0,\r\n }\r\n },\r\n infinity: {\r\n upgradeBits: 0\r\n },\r\n auto: {\r\n autobuyersOn: true,\r\n disableContinuum: false,\r\n mending: {\r\n mode: 0,\r\n amount: DC.D1,\r\n interval: 100,\r\n increaseWithMult: true,\r\n time: 1,\r\n xHighest: DC.D1,\r\n isActive: false,\r\n lastTick: 0\r\n },\r\n reality: {\r\n mode: 0,\r\n rm: DC.D1,\r\n glyph: 0,\r\n time: 0,\r\n shard: 0,\r\n isActive: false\r\n },\r\n eternity: {\r\n mode: 0,\r\n amount: DC.D1,\r\n increaseWithMult: true,\r\n time: 1,\r\n xHighest: DC.D1,\r\n isActive: false\r\n },\r\n bigCrunch: {\r\n cost: 1,\r\n interval: 150000,\r\n mode: 0,\r\n amount: DC.D1,\r\n increaseWithMult: true,\r\n time: 1,\r\n xHighest: DC.D1,\r\n isActive: true,\r\n lastTick: 0\r\n },\r\n galaxy: {\r\n cost: 1,\r\n interval: 20000,\r\n limitGalaxies: false,\r\n maxGalaxies: 1,\r\n buyMax: false,\r\n buyMaxInterval: 0,\r\n isActive: true,\r\n lastTick: 0\r\n },\r\n dimBoost: {\r\n cost: 1,\r\n interval: 4000,\r\n limitDimBoosts: false,\r\n maxDimBoosts: 1,\r\n limitUntilGalaxies: false,\r\n galaxies: 10,\r\n buyMaxInterval: 0,\r\n isActive: true,\r\n lastTick: 0\r\n },\r\n tickspeed: {\r\n isUnlocked: false,\r\n cost: 1,\r\n interval: 500,\r\n mode: AUTOBUYER_MODE.BUY_SINGLE,\r\n isActive: true,\r\n lastTick: 0,\r\n isBought: false\r\n },\r\n singCap: {\r\n multiplier: 1000,\r\n isActive: true\r\n },\r\n sacrifice: {\r\n multiplier: DC.D2,\r\n isActive: true\r\n },\r\n tesseract: {\r\n isUnlocked: false,\r\n isActive: true,\r\n },\r\n musicglyph: {\r\n isUnlocked: false,\r\n isActive: true,\r\n },\r\n nrru: {\r\n isUnlocked: false,\r\n isActive: true,\r\n },\r\n nriu: {\r\n isUnlocked: false,\r\n isActive: true,\r\n },\r\n antimatterDims: {\r\n all: Array.range(0, 8).map(tier => ({\r\n isUnlocked: false,\r\n cost: 1,\r\n interval: [500, 600, 700, 800, 900, 1000, 1100, 1200][tier],\r\n bulk: 1,\r\n mode: AUTOBUYER_MODE.BUY_10,\r\n isActive: true,\r\n lastTick: 0,\r\n isBought: false\r\n })),\r\n isActive: true,\r\n },\r\n infinityDims: {\r\n all: Array.range(0, 8).map(() => ({\r\n isActive: false,\r\n lastTick: 0,\r\n })),\r\n isActive: true,\r\n },\r\n timeDims: {\r\n all: Array.range(0, 8).map(() => ({\r\n isActive: false,\r\n lastTick: 0,\r\n })),\r\n isActive: true,\r\n },\r\n replicantiGalaxies: {\r\n isActive: false,\r\n },\r\n replicantiUpgrades: {\r\n all: Array.range(0, 3).map(() => ({\r\n isActive: false,\r\n lastTick: 0,\r\n })),\r\n isActive: true,\r\n },\r\n timeTheorems: {\r\n isActive: false,\r\n },\r\n dilationUpgrades: {\r\n all: Array.range(0, 3).concat(Array.range(11, 14)).map(() => ({\r\n isActive: false,\r\n lastTick: 0,\r\n })),\r\n isActive: true,\r\n },\r\n blackHolePower: {\r\n all: Array.range(0, 2).map(() => ({\r\n isActive: false,\r\n })),\r\n isActive: true,\r\n },\r\n expoBlackHolePower: {\r\n all: Array.range(0, 1).map(() => ({\r\n isActive: false,\r\n })),\r\n isActive: true,\r\n },\r\n realityUpgrades: {\r\n all: Array.range(0, 5).map(() => ({\r\n isActive: false,\r\n })),\r\n isActive: true,\r\n },\r\n imaginaryUpgrades: {\r\n all: Array.range(0, 10).map(() => ({\r\n isActive: false,\r\n })),\r\n isActive: true,\r\n },\r\n pets: {\r\n teresa: {\r\n upgrades: Array.range(0, 3).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n effarig: {\r\n upgrades: Array.range(0, 3).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n enslaved: {\r\n upgrades: Array.range(0, 3).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n v: {\r\n upgrades: Array.range(0, 3).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n ra: {\r\n upgrades: Array.range(0, 3).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n laitela: {\r\n upgrades: Array.range(0, 7).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n pelle: {\r\n upgrades: Array.range(0, 3).map(() => ({\r\n isActive: true,\r\n })),\r\n isActive: false,\r\n },\r\n },\r\n darkMatterDims: {\r\n isActive: false,\r\n lastTick: 0,\r\n },\r\n ascension: {\r\n isActive: false,\r\n lastTick: 0,\r\n },\r\n annihilation: {\r\n isActive: false,\r\n multiplier: 1.05,\r\n },\r\n singularity: { isActive: false },\r\n ipMultBuyer: { isActive: false, },\r\n epMultBuyer: { isActive: false, },\r\n nrru :{\r\n isActive: false,\r\n lastTick: 0\r\n },\r\n nriu: {\r\n isActive: false,\r\n lastTick: 0\r\n },\r\n pelleRebuyableUpgrades: {\r\n all: Array.range(0, 5).map(() => ({\r\n isActive: false,\r\n })),\r\n isActive: true,\r\n },\r\n pelleUpgrades: { isActive: false },\r\n galgenUpgrades: {\r\n all: Array.range(0, 5).map(() => ({\r\n isActive: false,\r\n })),\r\n isActive: true,\r\n },\r\n galgenSac: { isActive: false },\r\n },\r\n infinityPoints: DC.D0,\r\n infinities: DC.D0,\r\n infinitiesBanked: DC.D0,\r\n dimensionBoosts: 0,\r\n galaxies: 0,\r\n news: {\r\n // This is properly handled in NewsHandler.addSeenNews which adds properties as needed\r\n seen: {},\r\n specialTickerData: {\r\n uselessNewsClicks: 0,\r\n paperclips: 0,\r\n newsQueuePosition: 1000,\r\n eiffelTowerChapter: 0\r\n },\r\n totalSeen: 0,\r\n },\r\n lastUpdate: new Date().getTime(),\r\n backupTimer: 0,\r\n chall2Pow: 1,\r\n chall3Pow: DC.D0_01,\r\n matter: DC.D1,\r\n chall9TickspeedCostBumps: 0,\r\n chall8TotalSacrifice: DC.D1,\r\n ic2Count: 0,\r\n partInfinityPoint: 0,\r\n partInfinitied: 0,\r\n break: false,\r\n secretUnlocks: {\r\n themes: new Set(),\r\n viewSecretTS: false,\r\n cancerAchievements: false,\r\n },\r\n shownRuns: {\r\n Reality: true,\r\n Eternity: true,\r\n Infinity: true\r\n },\r\n requirementChecks: {\r\n infinity: {\r\n maxAll: false,\r\n noSacrifice: true,\r\n noAD8: true,\r\n },\r\n eternity: {\r\n onlyAD1: true,\r\n onlyAD8: true,\r\n noAD1: true,\r\n noRG: true,\r\n },\r\n reality: {\r\n noAM: true,\r\n noTriads: true,\r\n noTriad305: true,\r\n noTriad307: true,\r\n noPurchasedTT: true,\r\n noInfinities: true,\r\n noEternities: true,\r\n noContinuum: true,\r\n maxID1: DC.D0,\r\n maxStudies: 0,\r\n maxGlyphs: 0,\r\n slowestBH: 1,\r\n },\r\n mending:{\r\n isEnd: false,\r\n mmeleven: 8\r\n },\r\n permanent: {\r\n emojiGalaxies: 0,\r\n singleTickspeed: 0,\r\n perkTreeDragging: 0\r\n }\r\n },\r\n records: {\r\n gameCreatedTime: Date.now(),\r\n totalTimePlayed: DC.D0,\r\n timePlayedAtBHUnlock: DC.D0,\r\n realTimePlayed: 0,\r\n realTimeDoomed: 0,\r\n fullGameCompletions: 0,\r\n previousRunRealTime: 0,\r\n totalAntimatter: DC.E1,\r\n recentInfinities: Array.range(0, 10).map(() =>\r\n [Decimal.pow10(Number.MAX_VALUE), Number.MAX_VALUE, DC.D1, DC.D1, \"\"]),\r\n recentEternities: Array.range(0, 10).map(() =>\r\n [Decimal.pow10(Number.MAX_VALUE), Number.MAX_VALUE, DC.D1, DC.D1, \"\", DC.D0]),\r\n recentRealities: Array.range(0, 10).map(() =>\r\n [Decimal.pow10(Number.MAX_VALUE), Number.MAX_VALUE, DC.D1, 1, \"\", 0, 0]),\r\n thisInfinity: {\r\n time: DC.D0,\r\n realTime: 0,\r\n lastBuyTime: DC.D0,\r\n maxAM: DC.D0,\r\n bestIPmin: DC.D0,\r\n bestIPminVal: DC.D0,\r\n },\r\n bestInfinity: {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n bestIPminEternity: DC.D0,\r\n bestIPminReality: DC.D0,\r\n },\r\n thisEternity: {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n bestIPMsWithoutMaxAll: DC.D0,\r\n bestEPmin: DC.D0,\r\n bestEPminVal: DC.D0,\r\n bestInfinitiesPerMs: DC.D0,\r\n },\r\n bestEternity: {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n bestEPminReality: DC.D0,\r\n },\r\n thisReality: {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n maxEP: DC.D0,\r\n bestEternitiesPerMs: DC.D0,\r\n maxReplicanti: DC.D0,\r\n maxDT: DC.D0,\r\n bestRSmin: DC.D0,\r\n bestRSminVal: DC.D0,\r\n remWithoutGG: 0\r\n },\r\n bestReality: {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n glyphStrength: 0,\r\n RM: DC.D0,\r\n RMSet: [],\r\n RMmin: DC.D0,\r\n RMminSet: [],\r\n glyphLevel: 0,\r\n glyphLevelSet: [],\r\n bestEP: DC.D0,\r\n bestEPSet: [],\r\n speedSet: [],\r\n iMCapSet: [],\r\n laitelaSet: [],\r\n remWithoutGG: 0\r\n },\r\n thisMend: {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n maxEP: DC.D0,\r\n maxRM: DC.D0,\r\n maxiM: 0,\r\n maxRem: 0,\r\n },\r\n bestMend: {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n }\r\n },\r\n speedrun: {\r\n isUnlocked: true,\r\n isActive: false,\r\n isSegmented: false,\r\n usedSTD: false,\r\n hasStarted: false,\r\n hideInfo: false,\r\n displayAllMilestones: false,\r\n startDate: 0,\r\n name: \"\",\r\n offlineTimeUsed: 0,\r\n // One spot for every entry in GameDatabase.speedrunMilestones (note: 1-indexed)\r\n records: Array.repeat(0, 26),\r\n achievementTimes: {},\r\n seedSelection: SPEEDRUN_SEED_STATE.FIXED,\r\n initialSeed: 0,\r\n previousRuns: {}\r\n },\r\n IPMultPurchases: 0,\r\n version: 58,\r\n infinityPower: DC.D1,\r\n postC4Tier: 0,\r\n eternityPoints: DC.D0,\r\n eternities: DC.D0,\r\n eternityUpgrades: new Set(),\r\n epmultUpgrades: 0,\r\n timeShards: DC.D0,\r\n totalTickGained: 0,\r\n totalTickBought: 0,\r\n mends: DC.D0,\r\n corruptedFragments: DC.D0,\r\n galBoostPoints: DC.D0,\r\n mending:{\r\n upgradeBits: 0,\r\n warpUpgradeBits: 0,\r\n corruptionUpgradeBits: 0,\r\n corruptionUpgReqs: 0,\r\n warpUpgReqs: 0,\r\n reqLock: {\r\n mending: 0,\r\n warp: 0,\r\n corruption: 0,\r\n },\r\n rebuyables: {\r\n 1: 0,\r\n 6: 0,\r\n 11: 0,\r\n 16: 0,\r\n },\r\n warpRebuyables: {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n },\r\n corruptionRebuyables: {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n },\r\n corruption: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], //There are 10 here incase we want to add more, only the first 5 are currently used.\r\n corruptedFragments: 0,\r\n corruptionChallenge: {\r\n corruptedMend: false,\r\n records: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n recordScore: 0,\r\n },\r\n spentCF: 0,\r\n corruptNext: false,\r\n },\r\n replicanti: {\r\n unl: false,\r\n amount: DC.D0,\r\n chance: 0.01,\r\n chanceCost: DC.E150,\r\n interval: DC.E3,\r\n intervalCost: DC.E140,\r\n boughtGalaxyCap: 0,\r\n galaxies: 0,\r\n galCost: DC.E170,\r\n },\r\n timestudy: {\r\n theorem: DC.D0,\r\n maxTheorem: DC.D0,\r\n amBought: 0,\r\n ipBought: 0,\r\n epBought: 0,\r\n studies: [],\r\n shopMinimized: false,\r\n preferredPaths: [[], 0],\r\n presets: new Array(6).fill({\r\n name: \"\",\r\n studies: \"\",\r\n }),\r\n },\r\n eternityChalls: {},\r\n respec: false,\r\n eterc8ids: 50,\r\n eterc8repl: 40,\r\n dilation: {\r\n studies: [],\r\n active: false,\r\n tachyonParticles: DC.D0,\r\n dilatedTime: DC.D0,\r\n nextThreshold: DC.E3,\r\n baseTachyonGalaxies: 0,\r\n totalTachyonGalaxies: 0,\r\n upgrades: new Set(),\r\n rebuyables: {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 11: 0,\r\n 12: 0,\r\n 13: 0,\r\n },\r\n lastEP: DC.DM1,\r\n },\r\n realities: 0,\r\n partSimulatedReality: 0,\r\n reality: {\r\n warped: false,\r\n realityMachines: DC.D0,\r\n maxRM: DC.D0,\r\n imaginaryMachines: 0,\r\n iMCap: 0,\r\n glyphs: {\r\n active: [],\r\n inventory: [],\r\n sac: {\r\n power: DC.D0,\r\n infinity: DC.D0,\r\n time: DC.D0,\r\n replication: DC.D0,\r\n dilation: DC.D0,\r\n effarig: DC.D0,\r\n reality: DC.D0\r\n },\r\n undo: [],\r\n sets: new Array(7).fill({\r\n name: \"\",\r\n glyphs: [],\r\n }),\r\n protectedRows: 2,\r\n filter: {\r\n select: AUTO_GLYPH_SCORE.LOWEST_SACRIFICE,\r\n trash: AUTO_GLYPH_REJECT.SACRIFICE,\r\n simple: 0,\r\n types: GlyphTypes.list\r\n .filter(t => ALCHEMY_BASIC_GLYPH_TYPES.includes(t.id))\r\n .mapToObject(t => t.id, t => ({\r\n rarity: 0,\r\n score: 0,\r\n effectCount: 0,\r\n specifiedMask: 0,\r\n effectScores: Array.repeat(0, t.effects.length),\r\n })),\r\n },\r\n createdRealityGlyph: false,\r\n cosmetics: {\r\n active: false,\r\n glowNotification: false,\r\n unlockedFromNG: [],\r\n symbolMap: {},\r\n colorMap: {},\r\n }\r\n },\r\n initialSeed: Math.floor(Date.now() * Math.random() + 1),\r\n // The seed value should get set from initialSeed upon unlocking reality, but we set it to 1 as a fallback in\r\n // case somehow it doesn't get set properly. Do not change this to 0, as a seed of 0 causes the game to hang\r\n seed: 1,\r\n secondGaussian: 1e6,\r\n musicSeed: Math.floor(Date.now() * Math.random() + 0xBCDDECCB),\r\n musicSecondGaussian: 1e6,\r\n rebuyables: {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n },\r\n upgradeBits: 0,\r\n upgReqs: 0,\r\n imaginaryUpgradeBits: 0,\r\n imaginaryUpgReqs: 0,\r\n imaginaryRebuyables: {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n 6: 0,\r\n 7: 0,\r\n 8: 0,\r\n 9: 0,\r\n 10: 0,\r\n },\r\n reqLock: {\r\n reality: 0,\r\n imaginary: 0,\r\n },\r\n perks: new Set(),\r\n respec: false,\r\n showGlyphSacrifice: false,\r\n showSidebarPanel: GLYPH_SIDEBAR_MODE.INVENTORY_MANAGEMENT,\r\n autoSort: 0,\r\n autoCollapse: false,\r\n autoAutoClean: false,\r\n applyFilterToPurge: false,\r\n autoEquip: 0,\r\n moveGlyphsOnProtection: false,\r\n perkPoints: 0,\r\n unlockedEC: 0,\r\n autoEC: true,\r\n lastAutoEC: 0,\r\n partEternitied: DC.D0,\r\n autoAchieve: true,\r\n gainedAutoAchievements: true,\r\n automator: {\r\n state: {\r\n mode: AUTOMATOR_MODE.STOP,\r\n topLevelScript: 0,\r\n editorScript: 0,\r\n repeat: true,\r\n forceRestart: true,\r\n followExecution: true,\r\n stack: [],\r\n },\r\n scripts: {\r\n },\r\n constants: {},\r\n constantSortOrder: [],\r\n execTimer: 0,\r\n type: AUTOMATOR_TYPE.TEXT,\r\n forceUnlock: false,\r\n currentInfoPane: AutomatorPanels.INTRO_PAGE,\r\n },\r\n achTimer: DC.D0,\r\n hasCheckedFilter: false,\r\n },\r\n blackHole: Array.range(0, 2).map(id => ({\r\n id,\r\n intervalUpgrades: 0,\r\n powerUpgrades: 0,\r\n durationUpgrades: 0,\r\n phase: 0,\r\n active: false,\r\n unlocked: false,\r\n activations: 0,\r\n })),\r\n blackHolePause: false,\r\n blackHoleAutoPauseMode: 0,\r\n blackHolePauseTime: 0,\r\n blackHoleNegative: 1,\r\n expoBlackHole: Array.range(0, 1).map(id => ({\r\n id,\r\n intervalUpgrades: 0,\r\n powerUpgrades: 0,\r\n durationUpgrades: 0,\r\n phase: 0,\r\n active: false,\r\n unlocked: false,\r\n activations: 0,\r\n })),\r\n expoBlackHolePause: false,\r\n expoBlackHoleAutoPauseMode: 0,\r\n expoBlackHolePauseTime: 0,\r\n expoBlackHoleNegative: 1,\r\n celestials: {\r\n teresa: {\r\n pouredAmount: 0,\r\n quoteBits: 0,\r\n unlockBits: 0,\r\n run: false,\r\n bestRunAM: DC.D1,\r\n bestAMSet: [],\r\n perkShop: Array.repeat(0, 5),\r\n lastRepeatedMachines: DC.D0\r\n },\r\n effarig: {\r\n relicShards: DC.D0,\r\n unlockBits: 0,\r\n run: false,\r\n quoteBits: 0,\r\n glyphWeights: {\r\n ep: 25,\r\n repl: 25,\r\n dt: 25,\r\n eternities: 25\r\n },\r\n autoAdjustGlyphWeights: false,\r\n },\r\n enslaved: {\r\n isStoring: false,\r\n stored: DC.D0,\r\n isStoringReal: false,\r\n storedReal: 0,\r\n autoStoreReal: false,\r\n isAutoReleasing: false,\r\n quoteBits: 0,\r\n unlocks: [],\r\n run: false,\r\n completed: false,\r\n tesseracts: 0,\r\n hasSecretStudy: false,\r\n feltEternity: false,\r\n progressBits: 0,\r\n hintBits: 0,\r\n hintUnlockProgress: 0,\r\n glyphHintsGiven: 0,\r\n zeroHintTime: 0\r\n },\r\n v: {\r\n unlockBits: 0,\r\n run: false,\r\n superrun: false,\r\n beingInitialized: false,\r\n quoteBits: 0,\r\n runUnlocks: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n goalReductionSteps: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n STSpent: 0,\r\n runGlyphs: [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []],\r\n // The -10 is for glyph count, as glyph count for V is stored internally as a negative number\r\n runRecords: [-10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n flip: V_FLIP.NORMAL,\r\n },\r\n ra: {\r\n pets: {\r\n teresa: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n },\r\n effarig: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n },\r\n enslaved: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n },\r\n v: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n },\r\n ra: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n },\r\n laitela: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n },\r\n pelle: {\r\n level: 1,\r\n memories: 0,\r\n memoryChunks: 0,\r\n memoryUpgrades: 0,\r\n chunkUpgrades: 0\r\n }\r\n },\r\n alchemy: Array.repeat(0, 21)\r\n .map(() => ({\r\n amount: 0,\r\n reaction: false\r\n })),\r\n highestRefinementValue: {\r\n power: 0,\r\n infinity: 0,\r\n time: 0,\r\n replication: 0,\r\n dilation: 0,\r\n effarig: 0\r\n },\r\n quoteBits: 0,\r\n momentumTime: 0,\r\n unlockBits: 0,\r\n raPoints: DC.D0,\r\n modUnlockBits: [0, 0, 0],\r\n run: false,\r\n charged: new Set(),\r\n disCharge: false,\r\n breakCharged: new Set(),\r\n breakDischarge: false,\r\n peakGamespeed: DC.D1,\r\n petWithRemembrance: \"\",\r\n upgrades: new Set(),\r\n rebuyables: {\r\n weakenTeresaScaling: 0,\r\n weakenEffarigScaling: 0,\r\n weakenEnslavedScaling: 0,\r\n weakenVScaling: 0,\r\n weakenRaScaling: 0,\r\n weakenLaitelaScaling: 0,\r\n weakenPelleScaling: 0,\r\n incTeresaXPGain: 0,\r\n incEffarigXPGain: 0,\r\n incEnslavedXPGain: 0,\r\n incVXPGain: 0,\r\n incRaXPGain: 0,\r\n incLaitelaXPGain: 0,\r\n incPelleXPGain: 0,\r\n },\r\n /* rebuyables: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], */\r\n permanentMemories: {\r\n ra2: false,\r\n lai50: false,\r\n lai65: false,\r\n },\r\n },\r\n laitela: {\r\n darkMatter: DC.D0,\r\n maxDarkMatter: DC.D1,\r\n run: false,\r\n quoteBits: 0,\r\n dimensions: Array.range(0, 8).map(() =>\r\n ({\r\n amount: DC.D1,\r\n intervalUpgrades: 0,\r\n powerDMUpgrades: 0,\r\n powerDEUpgrades: 0,\r\n timeSinceLastUpdate: 0,\r\n ascensionCount: 0\r\n })),\r\n entropy: 0,\r\n thisCompletion: 3600,\r\n fastestCompletion: 3600,\r\n difficultyTier: 0,\r\n upgrades: {},\r\n darkMatterMult: 1,\r\n darkEnergy: 0,\r\n singularitySorting: {\r\n displayResource: 0,\r\n sortResource: 0,\r\n showCompleted: 0,\r\n sortOrder: 0,\r\n },\r\n singularities: 0,\r\n singularityCapIncreases: 0,\r\n lastCheckedMilestones: 0,\r\n milestoneGlow: true,\r\n isHoldingLClick: false,\r\n holdStart: 0,\r\n heldTier: 0,\r\n heldType: \"\",\r\n },\r\n pelle: {\r\n doomed: false,\r\n upgrades: new Set(),\r\n remnants: 0,\r\n realityShards: DC.D0,\r\n records: {\r\n totalAntimatter: DC.D0,\r\n totalInfinityPoints: DC.D0,\r\n totalEternityPoints: DC.D0,\r\n },\r\n rebuyables: {\r\n antimatterDimensionMult: 0,\r\n timeSpeedMult: 0,\r\n glyphLevels: 0,\r\n infConversion: 0,\r\n galaxyPower: 0,\r\n galaxyGeneratorAdditive: 0,\r\n galaxyGeneratorMultiplicative: 0,\r\n galaxyGeneratorAntimatterMult: 0,\r\n galaxyGeneratorIPMult: 0,\r\n galaxyGeneratorEPMult: 0,\r\n },\r\n rifts: {\r\n vacuum: {\r\n fill: DC.D0,\r\n active: false,\r\n reducedTo: 1\r\n },\r\n decay: {\r\n fill: DC.D0,\r\n active: false,\r\n percentageSpent: 0,\r\n reducedTo: 1\r\n },\r\n chaos: {\r\n fill: 0,\r\n active: false,\r\n reducedTo: 1\r\n },\r\n recursion: {\r\n fill: DC.D0,\r\n active: false,\r\n reducedTo: 1\r\n },\r\n paradox: {\r\n fill: DC.D0,\r\n active: false,\r\n reducedTo: 1\r\n }\r\n },\r\n progressBits: 0,\r\n galaxyGenerator: {\r\n unlocked: false,\r\n spentGalaxies: 0,\r\n generatedGalaxies: 0,\r\n phase: 0,\r\n sacrificeActive: false\r\n },\r\n quoteBits: 0,\r\n collapsed: {\r\n upgrades: false,\r\n rifts: false,\r\n galaxies: false\r\n },\r\n showBought: false,\r\n },\r\n destroyer:{\r\n quoteBits: 0,\r\n },\r\n kohler:{\r\n run: false,\r\n quoteBits: 0,\r\n unlockProgress: 0,\r\n unlockMilestone: [false,false,false,false,false,false,false]\r\n }\r\n },\r\n isGameEnd: false,\r\n tabNotifications: new Set(),\r\n triggeredTabNotificationBits: 0,\r\n tutorialState: 0,\r\n tutorialActive: true,\r\n options: {\r\n news: {\r\n enabled: true,\r\n repeatBuffer: 40,\r\n AIChance: 0,\r\n speed: 1,\r\n includeAnimated: true,\r\n },\r\n notation: \"Mixed scientific\",\r\n retryChallenge: false,\r\n retryCelestial: false,\r\n showAllChallenges: false,\r\n cloudEnabled: true,\r\n hideGoogleName: false,\r\n showCloudModal: true,\r\n forceCloudOverwrite: false,\r\n syncSaveIntervals: true,\r\n hotkeys: true,\r\n themeClassic: \"Normal\",\r\n themeModern: \"Normal\",\r\n themeSynergism: \"Normal\",\r\n commas: true,\r\n updateRate: 33,\r\n UIType: \"Modern\",\r\n offlineProgress: true,\r\n loadBackupWithoutOffline: false,\r\n automaticTabSwitching: true,\r\n respecIntoProtected: false,\r\n offlineTicks: 1e5,\r\n hibernationCatchup: true,\r\n statTabResources: 0,\r\n multiplierTab: {\r\n currTab: 0,\r\n showAltGroup: false,\r\n replacePowers: false,\r\n },\r\n autosaveInterval: 30000,\r\n showTimeSinceSave: true,\r\n saveFileName: \"\",\r\n exportedFileCount: 0,\r\n hideCompletedAchievementRows: false,\r\n glyphTextColors: true,\r\n headerTextColored: false,\r\n showNewGlyphIcon: true,\r\n showUnequippedGlyphIcon: true,\r\n highContrastRarity: false,\r\n swapGlyphColors: false,\r\n hideAlterationEffects: false,\r\n ignoreGlyphEffects: false,\r\n ignoreGlyphLevel: false,\r\n ignoreGlyphRarity: false,\r\n glyphBG: GLYPH_BG_SETTING.AUTO,\r\n glyphBorders: true,\r\n showHintText: {\r\n showPercentage: true,\r\n achievements: true,\r\n achievementUnlockStates: true,\r\n challenges: true,\r\n studies: true,\r\n glyphEffectDots: true,\r\n realityUpgrades: true,\r\n mendingUpgrades: true,\r\n perks: true,\r\n alchemy: true,\r\n glyphInfoType: GlyphInfo.types.NONE,\r\n showGlyphInfoByDefault: false,\r\n },\r\n animations: {\r\n bigCrunch: true,\r\n eternity: true,\r\n dilation: true,\r\n tachyonParticles: true,\r\n reality: true,\r\n background: true,\r\n blobSnowflakes: 16\r\n },\r\n confirmations: {\r\n armageddon: true,\r\n sacrifice: true,\r\n challenges: true,\r\n exitChallenge: true,\r\n eternity: true,\r\n dilation: true,\r\n resetReality: true,\r\n glyphReplace: true,\r\n glyphSacrifice: true,\r\n autoClean: true,\r\n sacrificeAll: true,\r\n glyphSelection: true,\r\n glyphUndo: true,\r\n deleteGlyphSetSave: true,\r\n glyphRefine: true,\r\n bigCrunch: true,\r\n replicantiGalaxy: true,\r\n antimatterGalaxy: true,\r\n dimensionBoost: true,\r\n switchAutomatorMode: true,\r\n respecIAP: true,\r\n mending: true\r\n },\r\n awayProgress: {\r\n antimatter: true,\r\n dimensionBoosts: true,\r\n antimatterGalaxies: true,\r\n infinities: true,\r\n infinityPoints: true,\r\n replicanti: true,\r\n replicantiGalaxies: true,\r\n eternities: true,\r\n eternityPoints: true,\r\n tachyonParticles: true,\r\n dilatedTime: true,\r\n tachyonGalaxies: true,\r\n timeTheorems: true,\r\n achievementCount: true,\r\n realities: true,\r\n realityMachines: true,\r\n imaginaryMachines: true,\r\n relicShards: true,\r\n darkMatter: true,\r\n darkEnergy: true,\r\n singularities: true,\r\n celestialMemories: true,\r\n blackHole: true,\r\n realityShards: true,\r\n mends: true,\r\n mendingPoints: true\r\n },\r\n hiddenTabBits: 0,\r\n hiddenSubtabBits: Array.repeat(0, 11),\r\n lastOpenTab: 0,\r\n lastOpenSubtab: Array.repeat(0, 11),\r\n perkLayout: 0,\r\n perkPhysicsEnabled: true,\r\n automatorEvents: {\r\n newestFirst: false,\r\n timestampType: 0,\r\n maxEntries: 200,\r\n clearOnReality: true,\r\n clearOnRestart: true,\r\n },\r\n invertTTgenDisplay: false,\r\n autoRealityForFilter: false,\r\n },\r\n IAP: {\r\n enabled: false,\r\n checkoutSession: {\r\n id: false,\r\n }\r\n },\r\n mendingPoints: DC.D0,\r\n mends: DC.D0,\r\n mendingUpgrades: new Set(),\r\n mvrmultUpgrades: 0,\r\n devSave: true\r\n};\r\n\r\nexport const Player = {\r\n defaultStart: deepmergeAll([{}, player]),\r\n\r\n get isInMatterChallenge() {\r\n return NormalChallenge(11).isRunning || InfinityChallenge(6).isRunning;\r\n },\r\n\r\n get isInAntimatterChallenge() {\r\n return NormalChallenge.isRunning || InfinityChallenge.isRunning;\r\n },\r\n\r\n get antimatterChallenge() {\r\n return NormalChallenge.current || InfinityChallenge.current;\r\n },\r\n\r\n get isInAnyChallenge() {\r\n return this.isInAntimatterChallenge || EternityChallenge.isRunning;\r\n },\r\n\r\n get anyChallenge() {\r\n return this.antimatterChallenge || EternityChallenge.current;\r\n },\r\n\r\n get canCrunch() {\r\n if (Enslaved.isRunning && Enslaved.BROKEN_CHALLENGES.includes(NormalChallenge.current?.id)) return false;\r\n const challenge = NormalChallenge.current || InfinityChallenge.current;\r\n const goal = challenge === undefined ? Decimal.NUMBER_MAX_VALUE : challenge.goal;\r\n return player.records.thisInfinity.maxAM.gte(goal);\r\n },\r\n\r\n get canEternity() {\r\n return player.records.thisEternity.maxIP.gte(Player.eternityGoal);\r\n },\r\n get canMend(){\r\n return (Ra.unlocks.exitDoom.isUnlocked ? Pelle.isDoomed : player.isGameEnd) || (MendingMilestone.six.isReached && player.antimatter.exponent >= 9e15);\r\n },\r\n get bestRunIPPM() {\r\n return GameCache.bestRunIPPM.value;\r\n },\r\n\r\n get averageRealTimePerEternity() {\r\n return GameCache.averageRealTimePerEternity.value;\r\n },\r\n\r\n get tickSpeedMultDecrease() {\r\n return GameCache.tickSpeedMultDecrease.value;\r\n },\r\n\r\n get dimensionMultDecrease() {\r\n return GameCache.dimensionMultDecrease.value;\r\n },\r\n\r\n get infinityGoal() {\r\n const challenge = NormalChallenge.current || InfinityChallenge.current;\r\n return challenge === undefined ? Decimal.NUMBER_MAX_VALUE : challenge.goal;\r\n },\r\n\r\n get infinityLimit() {\r\n const challenge = NormalChallenge.current || InfinityChallenge.current;\r\n if ((Pelle.isDoomed && Pelle.hasGalaxyGenerator) || !player.reality.warped) return challenge === undefined ? Decimal.MAX_VALUE : challenge.goal;\r\n return challenge === undefined ? DC.WARP_LIMIT : challenge.goal;\r\n },\r\n\r\n get eternityGoal() {\r\n return EternityChallenge.isRunning\r\n ? EternityChallenge.current.currentGoal\r\n : requiredIPForEP(1);\r\n },\r\n\r\n get automatorUnlocked() {\r\n return AutomatorPoints.totalPoints >= AutomatorPoints.pointsForAutomator || player.reality.automator.forceUnlock;\r\n },\r\n\r\n resetRequirements(key) {\r\n const glyphCount = player.requirementChecks.reality.maxGlyphs;\r\n // This switch case intentionally falls through because every lower layer should be reset as well\r\n switch (key) {\r\n case \"mending\":\r\n player.requirementChecks.mending = {\r\n noAM: true,\r\n mmeleven: 8,\r\n }\r\n case \"reality\":\r\n player.requirementChecks.reality = {\r\n noAM: true,\r\n noTriads: true,\r\n noTriad305: true,\r\n noTriad307: true,\r\n noPurchasedTT: true,\r\n // Note that these two checks below are only used in row 2, which is in principle always before the \"flow\"\r\n // upgrades in row 3 which passively generate infinities/eternities. These upgrades won't cause a lockout\r\n // as these requirements are only invalidated on manual infinities or eternities.\r\n noInfinities: true,\r\n noEternities: true,\r\n noContinuum: player.auto.disableContinuum,\r\n maxID1: DC.D0,\r\n maxStudies: 0,\r\n // This only gets set to the correct value when Glyphs.updateMaxGlyphCount is called, which always happens\r\n // before this part of the code is reached in the Reality reset. Nevertheless, we want to keep its old value.\r\n maxGlyphs: glyphCount,\r\n slowestBH: BlackHoles.areNegative ? player.blackHoleNegative : 1,\r\n };\r\n // eslint-disable-next-line no-fallthrough\r\n case \"eternity\":\r\n player.requirementChecks.eternity = {\r\n onlyAD1: true,\r\n onlyAD8: true,\r\n noAD1: true,\r\n noRG: true,\r\n };\r\n // eslint-disable-next-line no-fallthrough\r\n case \"infinity\":\r\n player.requirementChecks.infinity = {\r\n maxAll: false,\r\n noSacrifice: true,\r\n noAD8: true,\r\n };\r\n break;\r\n default:\r\n throw Error(\"Unrecognized prestige layer for requirement reset\");\r\n }\r\n }\r\n};\r\n\r\nexport function guardFromNaNValues(obj) {\r\n function isObject(ob) {\r\n return ob !== null && typeof ob === \"object\" && !(ob instanceof Decimal);\r\n }\r\n\r\n for (const key in obj) {\r\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\r\n\r\n if (key === \"automator\") continue;\r\n\r\n let value = obj[key];\r\n if (isObject(value)) {\r\n guardFromNaNValues(value);\r\n continue;\r\n }\r\n\r\n if (typeof value === \"number\") {\r\n Object.defineProperty(obj, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: () => value,\r\n set: function guardedSetter(newValue) {\r\n if (newValue === null || newValue === undefined) {\r\n throw new Error(\"null/undefined player property assignment\");\r\n }\r\n if (typeof newValue !== \"number\") {\r\n throw new Error(\"Non-Number assignment to Number player property\");\r\n }\r\n if (!isFinite(newValue)) {\r\n throw new Error(\"NaN player property assignment\");\r\n }\r\n value = newValue;\r\n }\r\n });\r\n }\r\n\r\n if (value instanceof Decimal) {\r\n Object.defineProperty(obj, key, {\r\n enumerable: true,\r\n configurable: true,\r\n get: () => value,\r\n set: function guardedSetter(newValue) {\r\n if (newValue === null || newValue === undefined) {\r\n throw new Error(\"null/undefined player property assignment\");\r\n }\r\n if (!(newValue instanceof Decimal)) {\r\n throw new Error(\"Non-Decimal assignment to Decimal player property\");\r\n }\r\n if (!isFinite(newValue.mantissa) || !isFinite(newValue.exponent)) {\r\n throw new Error(\"NaN player property assignment\");\r\n }\r\n value = newValue;\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","export const PerformanceStats = {\r\n container: document.getElementById(\"performance-stats\"),\r\n samplePeriod: 10 * 1000,\r\n isOn: false,\r\n currentBlocks: [],\r\n stats: {},\r\n turnOn() {\r\n this.isOn = true;\r\n this.container.style.display = \"flex\";\r\n },\r\n turnOff() {\r\n this.isOn = false;\r\n this.container.style.display = \"none\";\r\n this.stats = {};\r\n },\r\n toggle() {\r\n if (this.isOn) this.turnOff();\r\n else this.turnOn();\r\n },\r\n start(blockName) {\r\n if (!this.isOn) return;\r\n const blockRoot = this.currentBlocks.length > 0 ? this.currentBlocks.last().childBlocks : this.stats;\r\n let block = blockRoot[blockName];\r\n if (block === undefined) {\r\n block = {\r\n records: [],\r\n childBlocks: {}\r\n };\r\n blockRoot[blockName] = block;\r\n }\r\n this.currentBlocks.push(block);\r\n const record = {};\r\n block.records.push(record);\r\n record.timestamp = performance.now();\r\n },\r\n end() {\r\n if (!this.isOn) return;\r\n const now = performance.now();\r\n const block = this.currentBlocks.pop();\r\n const record = block.records.last();\r\n record.duration = now - record.timestamp;\r\n },\r\n render() {\r\n if (!this.isOn) return;\r\n let indentLevel = -1;\r\n let text = \"\";\r\n const samplePeriod = this.samplePeriod;\r\n let fps;\r\n function render(rootBlock) {\r\n indentLevel++;\r\n for (const blockName in rootBlock) {\r\n if (!Object.prototype.hasOwnProperty.call(rootBlock, blockName)) continue;\r\n const block = rootBlock[blockName];\r\n const records = block.records;\r\n while (records.length > 1 && records.last().timestamp - records.first().timestamp > samplePeriod) {\r\n records.shift();\r\n }\r\n text += `${\"-\".repeat(indentLevel)}${blockName}: `;\r\n if (records.length > 0) {\r\n let sum = 0;\r\n let max = Number.MIN_VALUE;\r\n let min = Number.MAX_VALUE;\r\n for (const record of records) {\r\n const duration = record.duration;\r\n sum += duration;\r\n if (duration > max) max = duration;\r\n if (duration < min) min = duration;\r\n }\r\n const average = sum / records.length;\r\n if (fps === undefined) {\r\n // We are at root frame block\r\n fps = 1000 / average;\r\n text = `FPS: ${Math.floor(fps)}
${text}`;\r\n }\r\n text += `${average.toFixed(3)}/${min.toFixed(3)}/${max.toFixed(3)}`;\r\n }\r\n text += \"
\";\r\n render(block.childBlocks);\r\n }\r\n indentLevel--;\r\n }\r\n render(this.stats);\r\n this.container.innerHTML = text;\r\n }\r\n};\r\n","import { Currency } from \"./currency\";\r\nimport { BitPurchasableMechanicState, RebuyableMechanicState } from \"./game-mechanics\";\r\nimport { DC } from \"./constants\";\r\nimport { Effect } from \"./game-mechanics/effect\";\r\n\r\nclass MendingUpgradeState extends BitPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.registerEvents(config.checkEvent, () => this.tryUnlock());\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get shortDescription() {\r\n return this.config.shortDescription ? this.config.shortDescription() : \"\";\r\n }\r\n\r\n get requirement() {\r\n return typeof this.config.requirement === \"function\" ? this.config.requirement() : this.config.requirement;\r\n }\r\n\r\n get lockEvent() {\r\n return typeof this.config.lockEvent === \"function\" ? this.config.lockEvent() : this.config.lockEvent;\r\n }\r\n\r\n get currency() {\r\n return Currency.mendingPoints;\r\n }\r\n\r\n get bitIndex() {\r\n return this.id;\r\n }\r\n\r\n get bits() {\r\n return player.mending.upgradeBits;\r\n }\r\n\r\n set bits(value) {\r\n player.mending.upgradeBits = value;\r\n }\r\n\r\n get hasPlayerLock() {\r\n return false\r\n }\r\n\r\n\r\n get isLockingMechanics() {\r\n const shouldBypass = this.config.bypassLock?.() ?? false;\r\n return this.hasPlayerLock && this.isPossible && !shouldBypass && !this.isAvailableForPurchase;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return true;\r\n }\r\n\r\n get isPossible() {\r\n return this.config.hasFailed ? !this.config.hasFailed() : true;\r\n }\r\n\r\n tryUnlock() {\r\n const mendingReached = PlayerProgress.mendingUnlocked()\r\n if (!mendingReached || this.isAvailableForPurchase || !this.config.checkRequirement()) return;\r\n player.mending.upgReqs |= (1 << this.id);\r\n GameUI.notify.reality(`You've unlocked a Mending Upgrade: ${this.config.name}`);\r\n this.hasPlayerLock = false;\r\n }\r\n\r\n onPurchased() {\r\n EventHub.dispatch(GAME_EVENT.MENDING_UPGRADE_BOUGHT);\r\n const id = this.id;\r\n switch(id){\r\n case 2:{\r\n Currency.eternities.bumpTo(1e6);\r\n Currency.infinities.bumpTo(1e12);\r\n Currency.realities.bumpTo(10000);\r\n player.replicanti.unl = true;\r\n Glyphs.addToInventory(GlyphGenerator.randomGlyph({ actualLevel: 70, rawLevel:70 },undefined, 'power'));\r\n break;\r\n }\r\n case 3:{\r\n for (let i = 1; i <= 12; i++){\r\n EternityChallenge(i).completions = 5;\r\n if (i === 12) break;\r\n }\r\n break;\r\n }\r\n case 4:{\r\n if (!ImaginaryUpgrade(15).isAvailableForPurchase ) ImaginaryUpgrade(15).isAvailableForPurchase ;\r\n if (!ImaginaryUpgrade(15).isBought) ImaginaryUpgrade(15).isBought = true;\r\n if (player.celestials.laitela.difficultyTier < 8) player.celestials.laitela.difficultyTier = 8; //futureproffing, but idk how that would make sense\r\n break\r\n }\r\n case 5:{\r\n player.celestials.teresa.unlockBits += 2;\r\n break;\r\n }\r\n case 7:{\r\n player.celestials.enslaved.unlocks = [0, 1];\r\n player.celestials.enslaved.completed = true;\r\n break\r\n }\r\n case 9:{\r\n if (player.celestials.teresa.unlockBits % 2 != 1){\r\n player.celestials.teresa.unlockBits += 1;\r\n }\r\n if (player.celestials.teresa.bestRunAM.lt(DC.E1E10)){\r\n player.celestials.teresa.bestRunAM = DC.E1E10;\r\n }\r\n break;\r\n }\r\n case 14:{\r\n player.celestials.v.runUnlocks.forEach((unlock, index) => {\r\n player.celestials.v.runUnlocks[index] = Math.max(unlock, 3);\r\n });\r\n V.updateTotalRunUnlocks();\r\n break;\r\n }\r\n case 19:{\r\n Ra.checkForUnlocks();\r\n break;\r\n }\r\n default:{\r\n //apparently leaving this blank is equivalent to Python's \"pass\"\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass RebuyableMendingUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.mendingPoints;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.mending.rebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.mending.rebuyables[this.id] = value;\r\n }\r\n}\r\n\r\nMendingUpgradeState.index = mapGameData(\r\n GameDatabase.mending.upgrades,\r\n config => (config.id % 5 === 1\r\n ? new RebuyableMendingUpgradeState(config)\r\n : new MendingUpgradeState(config))\r\n);\r\n\r\n/**\r\n * @param {number} id\r\n * @return {MendingUpgradeState|RebuyableMendingUpgradeState}\r\n */\r\nexport const MendingUpgrade = id => MendingUpgradeState.index[id];\r\n\r\nexport const MendingUpgrades = {\r\n /**\r\n * @type {(MendingUpgradeState|RebuyableMendingUpgradeState)[]}\r\n */\r\n all: MendingUpgradeState.index.compact(),\r\n get allBought() {\r\n return (player.mending.upgradeBits >> 6) + 1 === 1 << (GameDatabase.mending.upgrades.length - 5);\r\n }\r\n};\r\n\r\nexport const MendingUpgradeMultiplier = new Effect(()=>{\r\n const upgradeBought = id => MendingUpgrade(id).isBought;\r\n let effect = 1;\r\n\r\n for(let i = 1; i < 20; i+=5){\r\n effect = effect << (upgradeBought(i+1) && upgradeBought(i+2) && upgradeBought(i+3) && upgradeBought(i+4));\r\n }\r\n return effect;\r\n});","import { MendingUpgrade } from \"./mending-upgrades\";\r\n\r\nclass Lazy {\r\n constructor(getValue) {\r\n this._getValue = getValue;\r\n Lazy.registerLazy(this);\r\n }\r\n\r\n static get registrar() {\r\n if (Lazy._registrar === undefined) {\r\n Lazy._registrar = [];\r\n }\r\n return Lazy._registrar;\r\n }\r\n\r\n static registerLazy(object) {\r\n Lazy.registrar.push(object);\r\n }\r\n\r\n static invalidateAll() {\r\n for (const obj of Lazy.registrar) {\r\n obj.invalidate();\r\n }\r\n }\r\n\r\n get value() {\r\n if (this._value === undefined) {\r\n this._value = this._getValue();\r\n }\r\n return this._value;\r\n }\r\n\r\n invalidate() {\r\n this._value = undefined;\r\n }\r\n\r\n /**\r\n * @return {Lazy}\r\n */\r\n invalidateOn(...events) {\r\n for (const event of events) {\r\n EventHub.logic.on(event, () => this.invalidate());\r\n }\r\n return this;\r\n }\r\n}\r\nwindow.Lazy = Lazy;\r\n\r\nexport const GameCache = {\r\n worstChallengeTime: new Lazy(() => Decimal.max(player.challenge.normal.bestTimes)),\r\n\r\n bestRunIPPM: new Lazy(() =>\r\n player.records.recentInfinities\r\n .map(run => ratePerMinute(run[2], run[0]))\r\n .reduce(Decimal.maxReducer)\r\n ),\r\n\r\n averageRealTimePerEternity: new Lazy(() => player.records.recentEternities\r\n .map(run => run[1])\r\n .reduce(Number.sumReducer) / (1000 * player.records.recentEternities.length)),\r\n\r\n tickSpeedMultDecrease: new Lazy(() => (MendingUpgrade(8).isBought ? 1.2 : 10 - (\r\n BreakInfinityUpgrade.tickspeedCostMult.effectValue + \r\n ((EternityChallenge(11).completions >= 1) ? EternityChallenge(11).reward.effectValue : 0)\r\n ))),\r\n\r\n dimensionMultDecrease: new Lazy(() => (MendingUpgrade(8).isBought ? 1.5 : 10 -(BreakInfinityUpgrade.dimCostMult.effectValue + (EternityChallenge(6).completions >= 1 ? EternityChallenge(6).reward.effectValue : 0))\r\n )),\r\n\r\n timeStudies: new Lazy(() => NormalTimeStudyState.studies\r\n .map(s => player.timestudy.studies.includes(s.id))),\r\n\r\n currentStudyTree: new Lazy(() => new TimeStudyTree(TimeStudyTree.currentStudies)),\r\n\r\n achievementPeriod: new Lazy(() => TimeSpan.fromMinutes(30 - Effects.sum(\r\n Perk.achievementGroup1,\r\n Perk.achievementGroup2,\r\n Perk.achievementGroup3,\r\n Perk.achievementGroup4\r\n )).totalMilliseconds),\r\n\r\n buyablePerks: new Lazy(() => Perks.all.filter(p => p.canBeBought)),\r\n\r\n // Cached because it needs to be checked upon any change to antimatter, but that's a hot path and we want to keep\r\n // unnecessary repetitive calculations and accessing to a minimum\r\n cheapestAntimatterAutobuyer: new Lazy(() => Autobuyer.antimatterDimension.zeroIndexed.concat(Autobuyer.tickspeed)\r\n .filter(ab => !(ab.isBought || ab.isUnlocked))\r\n .map(ab => ab.antimatterCost.toNumber())\r\n .min()\r\n ),\r\n\r\n // The effect is defined in antimatter_dimensions.js because that's where the non-cached\r\n // code originally lived.\r\n antimatterDimensionCommonMultiplier: new Lazy(() => antimatterDimensionCommonMultiplier()),\r\n\r\n // 0 will cause a crash if invoked; this way the tier can be used as an index\r\n antimatterDimensionFinalMultipliers: Array.range(0, 9)\r\n .map(tier => new Lazy(() => getDimensionFinalMultiplierUncached(tier))),\r\n\r\n infinityDimensionCommonMultiplier: new Lazy(() => infinityDimensionCommonMultiplier()),\r\n\r\n timeDimensionCommonMultiplier: new Lazy(() => timeDimensionCommonMultiplier()),\r\n\r\n multiversalDimensionCommonMultiplierDimensionCommonMultiplier: new Lazy(() => multiversalDimensionCommonMultiplier()),\r\n\r\n glyphInventorySpace: new Lazy(() => Glyphs.freeInventorySpace),\r\n\r\n glyphEffects: new Lazy(() => orderedEffectList.mapToObject(k => k, k => getAdjustedGlyphEffectUncached(k))),\r\n\r\n staticGlyphWeights: new Lazy(() => staticGlyphWeights()),\r\n\r\n logTotalGlyphSacrifice: new Lazy(() => GlyphSacrificeHandler.logTotalSacrifice),\r\n\r\n totalIPMult: new Lazy(() => totalIPMult()),\r\n\r\n challengeTimeSum: new Lazy(() => player.challenge.normal.bestTimes.sumD()),\r\n\r\n infinityChallengeTimeSum: new Lazy(() => {let v = new Decimal(0); for (let i = 0; i < 8; i++) {(v.add(player.challenge.infinity.bestTimes))}; return v}),\r\n multiversalDimensionCommonMultiplier: new Lazy(() => multiversalDimensionCommonMultiplier()),\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.GLYPHS_CHANGED, () => {\r\n GameCache.glyphInventorySpace.invalidate();\r\n GameCache.glyphEffects.invalidate();\r\n GameCache.staticGlyphWeights.invalidate();\r\n}, GameCache.glyphEffects);\r\n\r\nGameCache.antimatterDimensionFinalMultipliers.invalidate = function() {\r\n for (const x of this) x.invalidate();\r\n};\r\n","export const GameIntervals = (function() {\r\n const interval = (handler, timeout) => {\r\n let id = -1;\r\n return {\r\n start() {\r\n // This starts the interval if it isn't already started,\r\n // and throws an error if it is.\r\n if (this.isStarted) {\r\n throw new Error(\"An already started interval cannot be started again.\");\r\n } else {\r\n id = setInterval(handler, typeof timeout === \"function\" ? timeout() : timeout);\r\n }\r\n },\r\n get isStarted() {\r\n return id !== -1;\r\n },\r\n stop() {\r\n // This stops the interval if it isn't already stopped,\r\n // and does nothing if it is already stopped.\r\n clearInterval(id);\r\n id = -1;\r\n },\r\n restart() {\r\n this.stop();\r\n this.start();\r\n }\r\n };\r\n };\r\n return {\r\n // Not a getter because getter will cause stack overflow\r\n all() {\r\n return Object.values(GameIntervals)\r\n .filter(i =>\r\n Object.prototype.hasOwnProperty.call(i, \"start\") &&\r\n Object.prototype.hasOwnProperty.call(i, \"stop\")\r\n );\r\n },\r\n start() {\r\n // eslint-disable-next-line no-shadow\r\n for (const interval of this.all()) {\r\n interval.start();\r\n }\r\n },\r\n stop() {\r\n // eslint-disable-next-line no-shadow\r\n for (const interval of this.all()) {\r\n interval.stop();\r\n }\r\n },\r\n restart() {\r\n // eslint-disable-next-line no-shadow\r\n for (const interval of this.all()) {\r\n interval.restart();\r\n }\r\n },\r\n gameLoop: interval(() => gameLoop(), () => player.options.updateRate),\r\n save: interval(() => GameStorage.save(), () =>\r\n player.options.autosaveInterval - Math.clampMin(0, Date.now() - GameStorage.lastSaveTime)\r\n ),\r\n checkCloudSave: interval(() => {\r\n if (player.options.cloudEnabled && Cloud.loggedIn) Cloud.saveCheck();\r\n }, 600 * 1000),\r\n // This simplifies auto-backup code to check every second instead of dynamically stopping and\r\n // restarting the interval every save operation, and is how it's structured on Android as well\r\n checkEverySecond: interval(() => {\r\n if (Math.random() < 0.00001) SecretAchievement(18).unlock();\r\n GameStorage.tryOnlineBackups();\r\n }, 1000),\r\n checkForUpdates: interval(() => {\r\n if (isLocalEnvironment()) return;\r\n fetch(\"version.txt\")\r\n .then(response => response.json())\r\n .then(json => {\r\n if (json.version > player.version) {\r\n Modal.message.show(json.message, { callback: updateRefresh }, 3);\r\n }\r\n });\r\n }, 60000)\r\n };\r\n}());\r\n","import Mousetrap from \"mousetrap\";\r\n\r\n// Add all numpad keys to Mousetrap (keycodes 97-105 correspond to numpad 1-9)\r\nconst numpadKeys = {};\r\nfor (let num = 1; num <= 9; num++) numpadKeys[num + 96] = `num${num}`;\r\nMousetrap.addKeycodes(numpadKeys);\r\n\r\nfunction getKeys(combination) {\r\n return combination.split(\"+\");\r\n}\r\n\r\n// Extract \"a\" from \"a\", \"shift+a\", \"shift+alt+a\" and whatever else\r\n// Returns undefined for mod-only combos, like \"shift+alt\"\r\nconst modifierKeys = [\"ctrl\", \"shift\", \"alt\", \"mod\"];\r\nfunction getMainKey(keys) {\r\n return keys.find(key => !modifierKeys.includes(key));\r\n}\r\n\r\nclass KeySpin {\r\n constructor(key) {\r\n this.key = key;\r\n }\r\n\r\n setAction(keys, action) {\r\n if (keys.includes(\"shift\")) {\r\n this.shiftAction = action;\r\n } else {\r\n this.action = action;\r\n }\r\n }\r\n\r\n start() {\r\n if (this.isRunning) {\r\n return;\r\n }\r\n this.isRunning = true;\r\n this.executeAction();\r\n this.interval = setInterval(() => {\r\n clearInterval(this.interval);\r\n this.executeAction();\r\n this.interval = setInterval(() => this.executeAction(), 40);\r\n }, 500);\r\n }\r\n\r\n executeAction() {\r\n if (ui.view.shiftDown && this.shiftAction !== undefined) {\r\n this.shiftAction();\r\n } else if (this.action !== undefined) {\r\n this.action();\r\n }\r\n }\r\n\r\n probablyStop() {\r\n // Goddamn, Mousetrap\r\n // It doesn't call keyup \"1\" for the case where you have \"shift+1\" pressed,\r\n // and you release the \"1\" key. Instead, it will call the keyup for \"shift+1\"\r\n // To fix this issue, we will stop on \"shift+1\", but only if we know that\r\n // shift is pressed, and that's what's in the ui.view.shiftDown\r\n if (ui.view.shiftDown) {\r\n this.stop();\r\n }\r\n }\r\n\r\n stop() {\r\n this.isRunning = false;\r\n if (this.interval) {\r\n clearInterval(this.interval);\r\n }\r\n this.interval = undefined;\r\n }\r\n}\r\n\r\nexport class GameKeyboard {\r\n static stopSpins() {\r\n for (const spin of spins) {\r\n spin.stop();\r\n }\r\n }\r\n\r\n static bind(key, callback, type) {\r\n Mousetrap.bind(key, () => executeKey(callback), type);\r\n }\r\n\r\n static bindRepeatable(key, callback) {\r\n this._bindSpin(key, () => executeKey(callback));\r\n }\r\n\r\n static bindHotkey(key, callback, type) {\r\n Mousetrap.bind(key, () => executeHotkey(callback), type);\r\n }\r\n\r\n static bindRepeatableHotkey(key, callback) {\r\n this._bindSpin(key, () => executeHotkey(callback));\r\n }\r\n\r\n static _bindSpin(combination, action) {\r\n const keys = getKeys(combination);\r\n const mainKey = getMainKey(keys);\r\n let spin = spins.find(s => s.key === mainKey);\r\n if (spin === undefined) {\r\n spin = new KeySpin(mainKey);\r\n spins.push(spin);\r\n Mousetrap.bind(mainKey, () => spin.start(), \"keydown\");\r\n Mousetrap.bind(mainKey, () => spin.stop(), \"keyup\");\r\n }\r\n\r\n if (combination !== mainKey) {\r\n Mousetrap.bind(combination, () => spin.start(), \"keydown\");\r\n Mousetrap.bind(combination, () => spin.probablyStop(), \"keyup\");\r\n }\r\n\r\n spin.setAction(keys, action);\r\n }\r\n\r\n static disable() {\r\n this.stopSpins();\r\n Mousetrap.reset();\r\n }\r\n}\r\n\r\nconst spins = [];\r\n\r\nfunction executeKey(action) {\r\n if (ui.$viewModel.modal.progressBar !== undefined){// || GameEnd.endState >= END_STATE_MARKERS.INTERACTIVITY_DISABLED) {\r\n return undefined;\r\n }\r\n return action();\r\n}\r\n\r\nfunction executeHotkey(action) {\r\n if (!player.options.hotkeys ||\r\n document.activeElement.type === \"text\" ||\r\n document.activeElement.type === \"textarea\") {\r\n return undefined;\r\n }\r\n return executeKey(action);\r\n}\r\n","/* eslint-disable no-console */\r\n\r\nimport { STEAM } from \"@/env\";\r\n\r\n/**\r\n * @template TModule\r\n */\r\nexport class NodeModule {\r\n\r\n /**\r\n * @param {string} name\r\n */\r\n constructor(name) {\r\n this.name = name;\r\n /**\r\n * @type {TModule}\r\n * @private\r\n */\r\n this.__module__ = STEAM && window.require !== undefined ? window.require(name) : undefined;\r\n }\r\n\r\n get isLoaded() {\r\n return this.__module__ !== undefined;\r\n }\r\n\r\n /**\r\n * @template TResult\r\n * @param {(module: TModule, resolve: (value?: TResult) => void, reject: (reason?: any) => void) => void} executor\r\n * @returns {Promise}\r\n */\r\n makePromise(executor) {\r\n if (!this.isLoaded) {\r\n throw Error(`Node module \"${this.name}\" is not loaded.`);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n executor(this.__module__, resolve, reject);\r\n });\r\n }\r\n\r\n /**\r\n * @template TResult\r\n * @param {(module: TModule) => TResult} call\r\n * @param {TResult} [defaultValue]\r\n * @returns {TResult}\r\n */\r\n safeCall(call, defaultValue) {\r\n if (!this.isLoaded) {\r\n throw Error(`Node module \"${this.name}\" is not loaded.`);\r\n }\r\n\r\n try {\r\n return call(this.__module__);\r\n } catch (e) {\r\n console.error(`Failed to make a call to node module \"${this.name}\".`);\r\n console.error(e);\r\n return defaultValue;\r\n }\r\n }\r\n}\r\n","import { NodeModule } from \"./node-module\";\r\n\r\n/**\r\n * @type {NodeModule}\r\n */\r\nconst module = new NodeModule(\"electron\");\r\n\r\nexport function isModuleLoaded() {\r\n return module.isLoaded;\r\n}\r\n\r\nexport function setZoomFactor(zoomFactor) {\r\n return module.safeCall(\r\n x => x.webFrame.setZoomFactor(zoomFactor)\r\n );\r\n}\r\n\r\nexport function openExternal(url) {\r\n return module.safeCall(\r\n x => x.shell.openExternal(url)\r\n );\r\n}\r\n","import * as Electron from \"./bindings/electron\";\r\n\r\nconst MIN_ZOOM = 0.5;\r\nconst MAX_ZOOM = 1.5;\r\n\r\nlet zoomFactor = 1;\r\n\r\nexport const ElectronRuntime = {\r\n initialize() {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n zoomFactor = Number(localStorage.getItem(\"Zoom\"));\r\n zoomFactor = Number.isFinite(zoomFactor) ? zoomFactor : 1;\r\n window.addEventListener(\"resize\", () => this.updateZoom());\r\n },\r\n\r\n get isActive() {\r\n return Electron.isModuleLoaded();\r\n },\r\n\r\n increaseZoom() {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n if (zoomFactor > MAX_ZOOM) {\r\n GameUI.notify.info(\"Zoom Level is at Maximum\");\r\n return;\r\n }\r\n\r\n this.zoomFactor = Math.round((zoomFactor + 0.1) * 10) / 10;\r\n },\r\n\r\n decreaseZoom() {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n if (zoomFactor < MIN_ZOOM) {\r\n GameUI.notify.info(\"Zoom Level is at Minimum\");\r\n return;\r\n }\r\n\r\n this.zoomFactor = Math.round((zoomFactor - 0.1) * 10) / 10;\r\n },\r\n\r\n resetZoom() {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n this.zoomFactor = 1;\r\n },\r\n\r\n get zoomFactor() {\r\n return zoomFactor;\r\n },\r\n\r\n set zoomFactor(value) {\r\n zoomFactor = value;\r\n localStorage.setItem(\"Zoom\", zoomFactor.toString());\r\n this.updateZoom();\r\n GameUI.notify.info(`Size changed to ${Math.round(zoomFactor * 100)}%`);\r\n },\r\n\r\n updateZoom() {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n const setSize = 1020;\r\n const sizeDiff = window.outerHeight / setSize;\r\n Electron.setZoomFactor(sizeDiff * zoomFactor);\r\n }\r\n};\r\n","import { discordRichPresence } from \"./secret-formula/discord-rich-presence\";\r\n\r\nexport const RichPresenceInfo = {\r\n get gameStage() {\r\n const stageDB = discordRichPresence.stages;\r\n for (let stage = stageDB.length - 1; stage >= 0; stage--) {\r\n if (stageDB[stage].hasReached()) return stageDB[stage];\r\n }\r\n throw Error(\"No valid progress stage found\");\r\n },\r\n get challengeState() {\r\n const challDB = discordRichPresence.challenges;\r\n for (let index = 0; index < challDB.length; index++) {\r\n const chall = challDB[index];\r\n if (chall.activityToken()) return chall;\r\n }\r\n return null;\r\n },\r\n\r\n // First line of info for DRP\r\n get details() {\r\n const chall = this.challengeState;\r\n const stageName = typeof this.gameStage.name === \"function\" ? this.gameStage.name() : this.gameStage.name;\r\n if (!chall) return `At ${stageName} (${this.gameStage.mainResource()})`;\r\n const challResStr = chall.resource()\r\n ? `, ${chall.resource()}`\r\n : \"\";\r\n return `At ${stageName} (In ${chall.name(chall.activityToken())}${challResStr})`;\r\n },\r\n // Second line of info for DRP\r\n get state() {\r\n const mainRes = this.challengeState ? [this.gameStage.mainResource()] : [];\r\n return mainRes.concat((this.gameStage.resourceList ?? []).map(res => res())).join(\" | \");\r\n }\r\n};\r\n","import * as Electron from \"@/steam/bindings/electron\";\r\n\r\nexport function openExternalLink(url) {\r\n if (Electron.isModuleLoaded()) {\r\n Electron.openExternal(url);\r\n } else {\r\n window.open(url, \"_blank\").focus();\r\n }\r\n}\r\n","/* eslint-disable */\r\n/// \r\n\r\nexport var PlayFab = typeof PlayFab != \"undefined\" ? PlayFab : {};\r\n\r\nif(!PlayFab.settings) {\r\n PlayFab.settings = {\r\n titleId: null, // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website)\r\n developerSecretKey: null, // For security reasons you must never expose this value to the client or players - You must set this value for Server-APIs to work properly (Found in the Game Manager for your title, at the PlayFab Website)\r\n GlobalHeaderInjection: null,\r\n productionServerUrl: \".playfabapi.com\"\r\n }\r\n}\r\n\r\nif(!PlayFab._internalSettings) {\r\n PlayFab._internalSettings = {\r\n entityToken: null,\r\n sdkVersion: \"1.136.230206\",\r\n requestGetParams: {\r\n sdk: \"JavaScriptSDK-1.136.230206\"\r\n },\r\n sessionTicket: null,\r\n verticalName: null, // The name of a customer vertical. This is only for customers running a private cluster. Generally you shouldn't touch this\r\n errorTitleId: \"Must be have PlayFab.settings.titleId set to call this method\",\r\n errorLoggedIn: \"Must be logged in to call this method\",\r\n errorEntityToken: \"You must successfully call GetEntityToken before calling this\",\r\n errorSecretKey: \"Must have PlayFab.settings.developerSecretKey set to call this method\",\r\n\r\n GetServerUrl: function () {\r\n if (!(PlayFab.settings.productionServerUrl.substring(0, 4) === \"http\")) {\r\n if (PlayFab._internalSettings.verticalName) {\r\n return \"https://\" + PlayFab._internalSettings.verticalName + PlayFab.settings.productionServerUrl;\r\n } else {\r\n return \"https://\" + PlayFab.settings.titleId + PlayFab.settings.productionServerUrl;\r\n }\r\n } else {\r\n return PlayFab.settings.productionServerUrl;\r\n }\r\n },\r\n\r\n InjectHeaders: function (xhr, headersObj) {\r\n if (!headersObj)\r\n return;\r\n\r\n for (var headerKey in headersObj)\r\n {\r\n try {\r\n xhr.setRequestHeader(gHeaderKey, headersObj[headerKey]);\r\n } catch (e) {\r\n console.log(\"Failed to append header: \" + headerKey + \" = \" + headersObj[headerKey] + \"Error: \" + e);\r\n }\r\n }\r\n },\r\n\r\n ExecuteRequest: function (url, request, authkey, authValue, callback, customData, extraHeaders) {\r\n var resultPromise = new Promise(function (resolve, reject) {\r\n if (callback != null && typeof (callback) !== \"function\")\r\n throw \"Callback must be null or a function\";\r\n\r\n if (request == null)\r\n request = {};\r\n\r\n var startTime = new Date();\r\n var requestBody = JSON.stringify(request);\r\n\r\n var urlArr = [url];\r\n var getParams = PlayFab._internalSettings.requestGetParams;\r\n if (getParams != null) {\r\n var firstParam = true;\r\n for (var key in getParams) {\r\n if (firstParam) {\r\n urlArr.push(\"?\");\r\n firstParam = false;\r\n } else {\r\n urlArr.push(\"&\");\r\n }\r\n urlArr.push(key);\r\n urlArr.push(\"=\");\r\n urlArr.push(getParams[key]);\r\n }\r\n }\r\n\r\n var completeUrl = urlArr.join(\"\");\r\n\r\n var xhr = new XMLHttpRequest();\r\n // window.console.log(\"URL: \" + completeUrl);\r\n xhr.open(\"POST\", completeUrl, true);\r\n\r\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\r\n xhr.setRequestHeader(\"X-PlayFabSDK\", \"JavaScriptSDK-\" + PlayFab._internalSettings.sdkVersion);\r\n if (authkey != null)\r\n xhr.setRequestHeader(authkey, authValue);\r\n PlayFab._internalSettings.InjectHeaders(xhr, PlayFab.settings.GlobalHeaderInjection);\r\n PlayFab._internalSettings.InjectHeaders(xhr, extraHeaders);\r\n\r\n xhr.onloadend = function () {\r\n if (callback == null)\r\n return;\r\n\r\n var result = PlayFab._internalSettings.GetPlayFabResponse(request, xhr, startTime, customData);\r\n if (result.code === 200) {\r\n callback(result, null);\r\n } else {\r\n callback(null, result);\r\n }\r\n }\r\n\r\n xhr.onerror = function () {\r\n if (callback == null)\r\n return;\r\n\r\n var result = PlayFab._internalSettings.GetPlayFabResponse(request, xhr, startTime, customData);\r\n callback(null, result);\r\n }\r\n\r\n xhr.send(requestBody);\r\n xhr.onreadystatechange = function () {\r\n if (this.readyState === 4) {\r\n var xhrResult = PlayFab._internalSettings.GetPlayFabResponse(request, this, startTime, customData);\r\n if (this.status === 200) {\r\n resolve(xhrResult);\r\n } else {\r\n reject(xhrResult);\r\n }\r\n }\r\n };\r\n });\r\n // Return a Promise so that calls to various API methods can be handled asynchronously\r\n return resultPromise;\r\n },\r\n\r\n GetPlayFabResponse: function(request, xhr, startTime, customData) {\r\n var result = null;\r\n try {\r\n // window.console.log(\"parsing json result: \" + xhr.responseText);\r\n result = JSON.parse(xhr.responseText);\r\n } catch (e) {\r\n result = {\r\n code: 503, // Service Unavailable\r\n status: \"Service Unavailable\",\r\n error: \"Connection error\",\r\n errorCode: 2, // PlayFabErrorCode.ConnectionError\r\n errorMessage: xhr.responseText\r\n };\r\n }\r\n\r\n result.CallBackTimeMS = new Date() - startTime;\r\n result.Request = request;\r\n result.CustomData = customData;\r\n return result;\r\n },\r\n\r\n authenticationContext: {\r\n PlayFabId: null,\r\n EntityId: null,\r\n EntityType: null,\r\n SessionTicket: null,\r\n EntityToken: null\r\n },\r\n\r\n UpdateAuthenticationContext: function (authenticationContext, result) {\r\n var authenticationContextUpdates = {};\r\n if(result.data.PlayFabId !== null) {\r\n PlayFab._internalSettings.authenticationContext.PlayFabId = result.data.PlayFabId;\r\n authenticationContextUpdates.PlayFabId = result.data.PlayFabId;\r\n }\r\n if(result.data.SessionTicket !== null) {\r\n PlayFab._internalSettings.authenticationContext.SessionTicket = result.data.SessionTicket;\r\n authenticationContextUpdates.SessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken !== null) {\r\n PlayFab._internalSettings.authenticationContext.EntityId = result.data.EntityToken.Entity.Id;\r\n authenticationContextUpdates.EntityId = result.data.EntityToken.Entity.Id;\r\n PlayFab._internalSettings.authenticationContext.EntityType = result.data.EntityToken.Entity.Type;\r\n authenticationContextUpdates.EntityType = result.data.EntityToken.Entity.Type;\r\n PlayFab._internalSettings.authenticationContext.EntityToken = result.data.EntityToken.EntityToken;\r\n authenticationContextUpdates.EntityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Update the authenticationContext with values from the result\r\n authenticationContext = Object.assign(authenticationContext, authenticationContextUpdates);\r\n return authenticationContext;\r\n },\r\n\r\n AuthInfoMap: {\r\n \"X-EntityToken\": {\r\n authAttr: \"entityToken\",\r\n authError: \"errorEntityToken\"\r\n },\r\n \"X-Authorization\": {\r\n authAttr: \"sessionTicket\",\r\n authError: \"errorLoggedIn\"\r\n },\r\n \"X-SecretKey\": {\r\n authAttr: \"developerSecretKey\",\r\n authError: \"errorSecretKey\"\r\n }\r\n },\r\n\r\n GetAuthInfo: function (request, authKey) {\r\n // Use the most-recently saved authKey, unless one was provided in the request via the AuthenticationContext\r\n var authError = PlayFab._internalSettings.AuthInfoMap[authKey].authError;\r\n var authAttr = PlayFab._internalSettings.AuthInfoMap[authKey].authAttr;\r\n var defaultAuthValue = null;\r\n if (authAttr === \"entityToken\")\r\n defaultAuthValue = PlayFab._internalSettings.entityToken;\r\n else if (authAttr === \"sessionTicket\")\r\n defaultAuthValue = PlayFab._internalSettings.sessionTicket;\r\n else if (authAttr === \"developerSecretKey\")\r\n defaultAuthValue = PlayFab.settings.developerSecretKey;\r\n var authValue = request.AuthenticationContext ? request.AuthenticationContext[authAttr] : defaultAuthValue;\r\n return {\"authKey\": authKey, \"authValue\": authValue, \"authError\": authError};\r\n },\r\n\r\n ExecuteRequestWrapper: function (apiURL, request, authKey, callback, customData, extraHeaders) {\r\n var authValue = null;\r\n if (authKey !== null){\r\n var authInfo = PlayFab._internalSettings.GetAuthInfo(request, authKey=authKey);\r\n var authKey = authInfo.authKey, authValue = authInfo.authValue, authError = authInfo.authError;\r\n\r\n if (!authValue) throw authError;\r\n }\r\n return PlayFab._internalSettings.ExecuteRequest(PlayFab._internalSettings.GetServerUrl() + apiURL, request, authKey, authValue, callback, customData, extraHeaders);\r\n }\r\n }\r\n}\r\n\r\nPlayFab.buildIdentifier = \"adobuild_javascriptsdk_114\";\r\nPlayFab.sdkVersion = \"1.136.230206\";\r\nPlayFab.GenerateErrorReport = function (error) {\r\n if (error == null)\r\n return \"\";\r\n var fullErrors = error.errorMessage;\r\n for (var paramName in error.errorDetails)\r\n for (var msgIdx in error.errorDetails[paramName])\r\n fullErrors += \"\\n\" + paramName + \": \" + error.errorDetails[paramName][msgIdx];\r\n return fullErrors;\r\n};\r\n\r\nPlayFab.ClientApi = {\r\n\r\n IsClientLoggedIn: function () {\r\n return PlayFab._internalSettings.sessionTicket != null && PlayFab._internalSettings.sessionTicket.length > 0;\r\n },\r\n ForgetAllCredentials: function () {\r\n PlayFab._internalSettings.sessionTicket = null;\r\n PlayFab._internalSettings.entityToken = null;\r\n },\r\n\r\n AcceptTrade: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AcceptTrade\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AddFriend: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AddFriend\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AddGenericID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AddGenericID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AddOrUpdateContactEmail: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AddOrUpdateContactEmail\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AddSharedGroupMembers: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AddSharedGroupMembers\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AddUsernamePassword: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AddUsernamePassword\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AddUserVirtualCurrency: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AddUserVirtualCurrency\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AndroidDevicePushNotificationRegistration: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AndroidDevicePushNotificationRegistration\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n AttributeInstall: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/AttributeInstall\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n CancelTrade: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/CancelTrade\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ConfirmPurchase: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ConfirmPurchase\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ConsumeItem: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ConsumeItem\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ConsumeMicrosoftStoreEntitlements: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ConsumeMicrosoftStoreEntitlements\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ConsumePS5Entitlements: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ConsumePS5Entitlements\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ConsumePSNEntitlements: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ConsumePSNEntitlements\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ConsumeXboxEntitlements: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ConsumeXboxEntitlements\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n CreateSharedGroup: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/CreateSharedGroup\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ExecuteCloudScript: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ExecuteCloudScript\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetAccountInfo: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetAccountInfo\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetAdPlacements: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetAdPlacements\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetAllUsersCharacters: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetAllUsersCharacters\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCatalogItems: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCatalogItems\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCharacterData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCharacterData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCharacterInventory: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCharacterInventory\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCharacterLeaderboard: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCharacterLeaderboard\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCharacterReadOnlyData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCharacterReadOnlyData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCharacterStatistics: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCharacterStatistics\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetContentDownloadUrl: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetContentDownloadUrl\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetCurrentGames: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetCurrentGames\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetFriendLeaderboard: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetFriendLeaderboard\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetFriendLeaderboardAroundPlayer: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetFriendLeaderboardAroundPlayer\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetFriendsList: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetFriendsList\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetGameServerRegions: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetGameServerRegions\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetLeaderboard: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetLeaderboard\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetLeaderboardAroundCharacter: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetLeaderboardAroundCharacter\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetLeaderboardAroundPlayer: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetLeaderboardAroundPlayer\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetLeaderboardForUserCharacters: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetLeaderboardForUserCharacters\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPaymentToken: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPaymentToken\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPhotonAuthenticationToken: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPhotonAuthenticationToken\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerCombinedInfo: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerCombinedInfo\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerProfile: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerProfile\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerSegments: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerSegments\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerStatistics: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerStatistics\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerStatisticVersions: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerStatisticVersions\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerTags: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerTags\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayerTrades: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayerTrades\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromFacebookIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromFacebookIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromFacebookInstantGamesIds: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromFacebookInstantGamesIds\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromGameCenterIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromGameCenterIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromGenericIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromGenericIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromGoogleIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromGoogleIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromGooglePlayGamesPlayerIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromGooglePlayGamesPlayerIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromKongregateIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromKongregateIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromNintendoServiceAccountIds: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromNintendoServiceAccountIds\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromNintendoSwitchDeviceIds: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromNintendoSwitchDeviceIds\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromPSNAccountIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromPSNAccountIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromSteamIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromSteamIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromTwitchIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromTwitchIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPlayFabIDsFromXboxLiveIDs: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPlayFabIDsFromXboxLiveIDs\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPublisherData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPublisherData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetPurchase: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetPurchase\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetSharedGroupData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetSharedGroupData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetStoreItems: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetStoreItems\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetTime: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetTime\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetTitleData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetTitleData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetTitleNews: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetTitleNews\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetTitlePublicKey: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetTitlePublicKey\", request, null, callback, customData, extraHeaders);\r\n },\r\n\r\n GetTradeStatus: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetTradeStatus\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetUserData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetUserData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetUserInventory: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetUserInventory\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetUserPublisherData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetUserPublisherData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetUserPublisherReadOnlyData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetUserPublisherReadOnlyData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GetUserReadOnlyData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GetUserReadOnlyData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n GrantCharacterToUser: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/GrantCharacterToUser\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkAndroidDeviceID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkAndroidDeviceID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkApple: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkApple\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkCustomID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkCustomID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkFacebookAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkFacebookAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkFacebookInstantGamesId: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkFacebookInstantGamesId\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkGameCenterAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkGameCenterAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkGoogleAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkGoogleAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkGooglePlayGamesServicesAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkGooglePlayGamesServicesAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkIOSDeviceID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkIOSDeviceID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkKongregate: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkKongregate\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkNintendoServiceAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkNintendoServiceAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkNintendoSwitchDeviceId: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkNintendoSwitchDeviceId\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkOpenIdConnect: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkOpenIdConnect\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkPSNAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkPSNAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkSteamAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkSteamAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkTwitch: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkTwitch\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LinkXboxAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LinkXboxAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n LoginWithAndroidDeviceID: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithAndroidDeviceID\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithApple: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithApple\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithCustomID: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithCustomID\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithEmailAddress: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithEmailAddress\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithFacebook: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithFacebook\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithFacebookInstantGamesId: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithFacebookInstantGamesId\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithGameCenter: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithGameCenter\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithGoogleAccount: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithGoogleAccount\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithGooglePlayGamesServices: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithGooglePlayGamesServices\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithIOSDeviceID: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithIOSDeviceID\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithKongregate: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithKongregate\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithNintendoServiceAccount: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithNintendoServiceAccount\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithNintendoSwitchDeviceId: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithNintendoSwitchDeviceId\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithOpenIdConnect: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithOpenIdConnect\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithPlayFab: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithPlayFab\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithPSN: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithPSN\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithSteam: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithSteam\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithTwitch: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithTwitch\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n LoginWithXbox: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null) {\r\n if(result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (result.data.EntityToken != null) {\r\n PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;\r\n }\r\n // Apply the updates for the AuthenticationContext returned to the client\r\n authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/LoginWithXbox\", request, null, overloadCallback, customData, extraHeaders);\r\n // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()\r\n return new Promise(function(resolve){resolve(authenticationContext);});\r\n },\r\n\r\n Matchmake: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/Matchmake\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n OpenTrade: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/OpenTrade\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n PayForPurchase: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/PayForPurchase\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n PurchaseItem: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/PurchaseItem\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RedeemCoupon: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RedeemCoupon\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RefreshPSNAuthToken: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RefreshPSNAuthToken\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RegisterForIOSPushNotification: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RegisterForIOSPushNotification\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RegisterPlayFabUser: function (request, callback, customData, extraHeaders) {\r\n request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;\r\n // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts\r\n // Deep-copy the authenticationContext here to safely update it\r\n var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));\r\n var overloadCallback = function (result, error) {\r\n if (result != null && result.data.SessionTicket != null) {\r\n PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;\r\n }\r\n if (callback != null && typeof (callback) === \"function\")\r\n callback(result, error);\r\n };\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RegisterPlayFabUser\", request, null, overloadCallback, customData, extraHeaders);\r\n },\r\n\r\n RemoveContactEmail: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RemoveContactEmail\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RemoveFriend: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RemoveFriend\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RemoveGenericID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RemoveGenericID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RemoveSharedGroupMembers: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RemoveSharedGroupMembers\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ReportAdActivity: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ReportAdActivity\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ReportDeviceInfo: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ReportDeviceInfo\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ReportPlayer: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ReportPlayer\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RestoreIOSPurchases: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RestoreIOSPurchases\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n RewardAdActivity: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/RewardAdActivity\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n SendAccountRecoveryEmail: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/SendAccountRecoveryEmail\", request, null, callback, customData, extraHeaders);\r\n },\r\n\r\n SetFriendTags: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/SetFriendTags\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n SetPlayerSecret: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/SetPlayerSecret\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n StartPurchase: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/StartPurchase\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n SubtractUserVirtualCurrency: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/SubtractUserVirtualCurrency\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkAndroidDeviceID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkAndroidDeviceID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkApple: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkApple\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkCustomID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkCustomID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkFacebookAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkFacebookAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkFacebookInstantGamesId: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkFacebookInstantGamesId\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkGameCenterAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkGameCenterAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkGoogleAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkGoogleAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkGooglePlayGamesServicesAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkGooglePlayGamesServicesAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkIOSDeviceID: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkIOSDeviceID\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkKongregate: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkKongregate\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkNintendoServiceAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkNintendoServiceAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkNintendoSwitchDeviceId: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkNintendoSwitchDeviceId\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkOpenIdConnect: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkOpenIdConnect\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkPSNAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkPSNAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkSteamAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkSteamAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkTwitch: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkTwitch\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlinkXboxAccount: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlinkXboxAccount\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlockContainerInstance: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlockContainerInstance\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UnlockContainerItem: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UnlockContainerItem\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateAvatarUrl: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateAvatarUrl\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateCharacterData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateCharacterData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateCharacterStatistics: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateCharacterStatistics\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdatePlayerStatistics: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdatePlayerStatistics\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateSharedGroupData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateSharedGroupData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateUserData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateUserData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateUserPublisherData: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateUserPublisherData\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n UpdateUserTitleDisplayName: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/UpdateUserTitleDisplayName\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ValidateAmazonIAPReceipt: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ValidateAmazonIAPReceipt\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ValidateGooglePlayPurchase: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ValidateGooglePlayPurchase\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ValidateIOSReceipt: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ValidateIOSReceipt\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n ValidateWindowsStoreReceipt: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/ValidateWindowsStoreReceipt\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n WriteCharacterEvent: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/WriteCharacterEvent\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n WritePlayerEvent: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/WritePlayerEvent\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n WriteTitleEvent: function (request, callback, customData, extraHeaders) {\r\n return PlayFab._internalSettings.ExecuteRequestWrapper(\"/Client/WriteTitleEvent\", request, \"X-Authorization\", callback, customData, extraHeaders);\r\n },\r\n\r\n};\r\n\r\nvar PlayFabClientSDK = PlayFab.ClientApi;\r\n\r\nPlayFab.RegisterWithPhaser = function() {\r\n if ( typeof Phaser === \"undefined\" || typeof Phaser.Plugin === \"undefined\" )\r\n return;\r\n\r\n Phaser.Plugin.PlayFab = function (game, parent) {\r\n Phaser.Plugin.call(this, game, parent);\r\n };\r\n Phaser.Plugin.PlayFab.prototype = Object.create(Phaser.Plugin.prototype);\r\n Phaser.Plugin.PlayFab.prototype.constructor = Phaser.Plugin.PlayFab;\r\n Phaser.Plugin.PlayFab.prototype.PlayFab = PlayFab;\r\n Phaser.Plugin.PlayFab.prototype.settings = PlayFab.settings;\r\n Phaser.Plugin.PlayFab.prototype.ClientApi = PlayFab.ClientApi;\r\n};\r\nPlayFab.RegisterWithPhaser();\r\n\r\n","import { PlayFab } from \"@/steam/bindings/PlayFabClientApi\";\r\n\r\n/**\r\n * @type {PlayFabClientModule.IPlayFabClient}\r\n */\r\nconst clientApi = PlayFab.ClientApi;\r\nPlayFab.settings.titleId = \"59813\";\r\n\r\nexport function LoginWithSteam(ticket) {\r\n return makePromise(clientApi.LoginWithSteam, {\r\n SteamTicket: ticket,\r\n CreateAccount: true\r\n });\r\n}\r\n\r\nexport function UpdateUserTitleDisplayName(displayName) {\r\n makeAuthorizedPromise(clientApi.UpdateUserTitleDisplayName, {\r\n DisplayName: displayName\r\n });\r\n}\r\n\r\nexport function GetUserData() {\r\n return makeAuthorizedPromise(clientApi.GetUserData);\r\n}\r\n\r\nexport function UpdateUserData(data) {\r\n return makeAuthorizedPromise(clientApi.UpdateUserData, {\r\n Data: data\r\n });\r\n}\r\n\r\nexport function GetUserInventory() {\r\n return makeAuthorizedPromise(clientApi.GetUserInventory);\r\n}\r\n\r\nexport function PurchaseItem(id, price, currency) {\r\n return makeAuthorizedPromise(clientApi.PurchaseItem, {\r\n ItemId: id,\r\n Price: price,\r\n VirtualCurrency: currency\r\n });\r\n}\r\n\r\nexport function StartPurchase(itemId, quantity, annotation) {\r\n return makeAuthorizedPromise(clientApi.StartPurchase, {\r\n Items: [{\r\n ItemId: itemId,\r\n Quantity: quantity,\r\n Annotation: annotation\r\n }]\r\n });\r\n}\r\n\r\nexport function PayForPurchase(orderId, currency, providerName) {\r\n return makeAuthorizedPromise(clientApi.PayForPurchase, {\r\n OrderId: orderId,\r\n Currency: currency,\r\n ProviderName: providerName\r\n });\r\n}\r\n\r\nexport function ConfirmPurchase(orderId) {\r\n return makeAuthorizedPromise(clientApi.ConfirmPurchase, {\r\n OrderId: orderId\r\n });\r\n}\r\n\r\nexport function ConsumeItem(itemInstanceId, consumeCount) {\r\n return makeAuthorizedPromise(clientApi.ConsumeItem, {\r\n ItemInstanceId: itemInstanceId,\r\n ConsumeCount: consumeCount\r\n });\r\n}\r\n\r\nexport function AddUserVirtualCurrency(amount, virtualCurrency) {\r\n return makeAuthorizedPromise(clientApi.AddUserVirtualCurrency, {\r\n Amount: amount,\r\n VirtualCurrency: virtualCurrency\r\n });\r\n}\r\n\r\n/**\r\n * @template TRequest\r\n * @template TResponse\r\n * @param {(request: TRequest, callback: PlayFabModule.ApiCallback) => any} playFabFunction\r\n * @param {TRequest} [request]\r\n * @returns {Promise}\r\n */\r\nfunction makeAuthorizedPromise(playFabFunction, request) {\r\n if (!clientApi.IsClientLoggedIn()) {\r\n return Promise.reject(\"PlayFab Client is not logged in.\");\r\n }\r\n\r\n return makePromise(playFabFunction, request);\r\n}\r\n\r\n/**\r\n * So, apparently, PlayFab Web SDK is so bad, the promises they are\r\n * returning are not the actual promises for the api calls\r\n * (just take a look inside PlayFabClient.js). This wrapper\r\n * creates proper promises based on the callbacks.\r\n * @template TRequest\r\n * @template TResponse\r\n * @param {(request: TRequest, callback: PlayFabModule.ApiCallback) => any} playFabFunction\r\n * @param {TRequest} [request]\r\n * @returns {Promise}\r\n */\r\nfunction makePromise(playFabFunction, request) {\r\n return new Promise((resolve, reject) => {\r\n playFabFunction(request ?? {}, (data, error) => {\r\n if (!error && data?.data) {\r\n resolve(data.data);\r\n } else {\r\n reject(error ?? data);\r\n }\r\n });\r\n });\r\n}\r\n","import { MAC } from \"@/env\";\r\nimport { openExternalLink } from \"@/utility/open-external-link\";\r\nimport * as PlayFab from \"./bindings/playfab\";\r\n\r\nexport async function loginPlayFabWithSteam(ticket, screenName) {\r\n await PlayFab.LoginWithSteam(ticket);\r\n PlayFab.UpdateUserTitleDisplayName(screenName);\r\n validatePurchases();\r\n syncIAP();\r\n}\r\n\r\nexport async function purchaseIAP(std) {\r\n const itemId = `${std}STD`;\r\n const quantity = 1;\r\n const annotation = \"Purchased via in-game store\";\r\n const order = await PlayFab.StartPurchase(itemId, quantity, annotation);\r\n\r\n const orderId = order.OrderId;\r\n const currency = \"RM\";\r\n const providerName = \"Steam\";\r\n const result = await PlayFab.PayForPurchase(orderId, currency, providerName);\r\n\r\n pendingValidations.push(result.OrderId);\r\n\r\n if (MAC) {\r\n const txnId = result.ProviderData;\r\n openExternalLink(`https://store.steampowered.com/checkout/approvetxn/${txnId}/?returnurl=steam`);\r\n }\r\n}\r\n\r\nlet validateTimeout = 0;\r\nlet pendingValidations = [];\r\nlet isValidating = false;\r\nlet retryValidation = false;\r\n\r\nexport async function validatePurchases() {\r\n if (isValidating) {\r\n retryValidation = true;\r\n return;\r\n }\r\n\r\n clearTimeout(validateTimeout);\r\n isValidating = true;\r\n // Copy pendingValidations, because it will be modified in validatePurchase\r\n const orders = [...pendingValidations];\r\n for (const order of orders) {\r\n try {\r\n await validatePurchase(order);\r\n } catch {\r\n // Do nothing, will be retried.\r\n }\r\n }\r\n isValidating = false;\r\n const timeout = retryValidation ? 0 : 2000;\r\n validateTimeout = setTimeout(validatePurchases, timeout);\r\n retryValidation = false;\r\n}\r\n\r\nasync function validatePurchase(orderId) {\r\n const confirm = await PlayFab.ConfirmPurchase(orderId);\r\n const purchaseName = confirm.Items[0].ItemId;\r\n const purchaseInstance = confirm.Items[0].ItemInstanceId;\r\n\r\n await PlayFab.ConsumeItem(purchaseInstance, 1);\r\n const stdsBought = Number(purchaseName.replace(\"STD\", \"\"));\r\n pendingValidations = pendingValidations.filter(item => item !== orderId);\r\n await PlayFab.AddUserVirtualCurrency(stdsBought, \"ST\");\r\n GameUI.notify.info(`${stdsBought} STDs Obtained!`);\r\n syncIAP();\r\n}\r\n\r\nexport function hasPendingPurchaseConfirmations() {\r\n return MAC && pendingValidations.length > 0;\r\n}\r\n\r\nasync function syncIAP() {\r\n const userInventory = await PlayFab.GetUserInventory();\r\n ShopPurchaseData.totalSTD = userInventory.VirtualCurrency?.ST ?? 0;\r\n for (const key of Object.keys(GameDatabase.shopPurchases)) {\r\n const item = userInventory.Inventory.find(x => x.ItemId === key);\r\n ShopPurchaseData[key] = item?.RemainingUses ?? 0;\r\n }\r\n GameUI.update();\r\n\r\n const userData = await PlayFab.GetUserData();\r\n ShopPurchaseData.unlockedCosmetics = userData.Data.Cosmetics?.Value?.split(\",\") ?? [];\r\n GameUI.update();\r\n}\r\n\r\nexport async function purchaseShopItem(key, cost, cosmeticId) {\r\n await PlayFab.PurchaseItem(key, cost, \"ST\");\r\n if (cosmeticId !== undefined) {\r\n await storeCosmetic(cosmeticId);\r\n }\r\n syncIAP();\r\n}\r\n\r\nasync function storeCosmetic(id) {\r\n const userData = await PlayFab.GetUserData();\r\n const cosmetics = new Set(userData.Data?.Cosmetics?.Value?.split(\",\") ?? []);\r\n cosmetics.add(id);\r\n const updatedCosmetics = [...cosmetics];\r\n await PlayFab.UpdateUserData({\r\n Cosmetics: updatedCosmetics.join(\",\")\r\n });\r\n\r\n ShopPurchaseData.unlockedCosmetics = updatedCosmetics;\r\n GameUI.update();\r\n}\r\n","import { NodeModule } from \"./node-module\";\r\n\r\n/**\r\n * @type {NodeModule}\r\n */\r\nconst module = new NodeModule(\"greenworks\");\r\n\r\nexport function isModuleLoaded() {\r\n return module.isLoaded;\r\n}\r\n\r\nexport function initAPI() {\r\n return module.safeCall(\r\n x => x.initAPI(),\r\n false\r\n );\r\n}\r\n\r\nexport function getSteamId() {\r\n return module.safeCall(\r\n x => x.getSteamId()\r\n );\r\n}\r\n\r\n/**\r\n * @returns {Promise}\r\n */\r\nexport function getAuthSessionTicket() {\r\n return module.makePromise(\r\n (x, resolve, reject) => x.getAuthSessionTicket(resolve, reject)\r\n );\r\n}\r\n\r\n/**\r\n * @returns {Promise}\r\n */\r\nexport function activateAchievement(id) {\r\n return module.makePromise(\r\n (x, resolve, reject) => x.activateAchievement(id, resolve, reject)\r\n );\r\n}\r\n\r\nexport function getAchievementNames() {\r\n return module.safeCall(\r\n x => x.getAchievementNames(),\r\n []\r\n );\r\n}\r\n\r\nexport function initDiscordAPI(clientId, steamGameId) {\r\n return module.safeCall(\r\n x => x.initDiscordAPI(clientId, steamGameId)\r\n );\r\n}\r\n\r\nexport function runDiscordCallbacks() {\r\n return module.safeCall(\r\n x => x.runDiscordCallbacks()\r\n );\r\n}\r\n\r\nexport function on(event, callback) {\r\n return module.safeCall(\r\n x => x.on(event, callback)\r\n );\r\n}\r\n\r\nexport function setDiscordActivity(state, details) {\r\n return module.safeCall(\r\n x => x.setDiscordActivity({\r\n smallImage: \"icon\",\r\n largeImage: \"icon\",\r\n state,\r\n details\r\n })\r\n );\r\n}\r\n\r\n","/* eslint-disable no-console */\r\nimport { RichPresenceInfo } from \"@/core/discord-parser\";\r\n\r\nimport {\r\n hasPendingPurchaseConfirmations,\r\n loginPlayFabWithSteam,\r\n purchaseIAP,\r\n purchaseShopItem,\r\n validatePurchases\r\n} from \"./steam-purchases\";\r\n\r\nimport * as Greenworks from \"./bindings/greenworks\";\r\n\r\nimport { MAC, STEAM } from \"@/env\";\r\n\r\nlet isInitialized = false;\r\nlet isActive = false;\r\nlet achievementNames = [];\r\n\r\nexport const SteamRuntime = {\r\n initialize() {\r\n if (isInitialized) {\r\n throw Error(\"Steam Runtime was initialized already.\");\r\n }\r\n\r\n isInitialized = true;\r\n\r\n if (!STEAM || !Greenworks.isModuleLoaded() || !Greenworks.initAPI()) {\r\n return;\r\n }\r\n\r\n isActive = true;\r\n\r\n const steamId = Greenworks.getSteamId();\r\n loginPlayFab(steamId);\r\n loginFirebase(steamId);\r\n\r\n achievementNames = Greenworks.getAchievementNames();\r\n\r\n Greenworks.on(\"micro-txn-authorization-response\", (data, ordered, orderState) => {\r\n if (orderState === true) {\r\n validatePurchases();\r\n }\r\n });\r\n\r\n if (!MAC) {\r\n initializeDiscord();\r\n createForceRefreshCanvas();\r\n }\r\n },\r\n\r\n get isActive() {\r\n if (!isInitialized) {\r\n throw Error(\"Steam Runtime was called before init.\");\r\n }\r\n\r\n return isActive;\r\n },\r\n\r\n get screenName() {\r\n if (!this.isActive) {\r\n return \"Non-Steam user\";\r\n }\r\n\r\n return Greenworks.getSteamId()?.screenName ?? \"Steam user\";\r\n },\r\n\r\n activateAchievement(id) {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n const name = `Achievement${id}`;\r\n if (!achievementNames.includes(name)) {\r\n return;\r\n }\r\n\r\n Greenworks.activateAchievement(name);\r\n },\r\n\r\n async purchaseIAP(std) {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n await purchaseIAP(std);\r\n },\r\n\r\n validatePurchases() {\r\n if (!this.isActive) {\r\n return;\r\n }\r\n\r\n validatePurchases();\r\n },\r\n\r\n async purchaseShopItem(key, cost, cosmeticId) {\r\n if (!this.isActive) {\r\n GameUI.notify.error(\"Shop purchases are not available.\");\r\n return false;\r\n }\r\n\r\n try {\r\n await purchaseShopItem(key, cost, cosmeticId);\r\n return true;\r\n } catch (e) {\r\n GameUI.notify.error(e.errorMessage ?? e);\r\n return false;\r\n }\r\n },\r\n\r\n get hasPendingPurchaseConfirmations() {\r\n if (!this.isActive) {\r\n return false;\r\n }\r\n\r\n return hasPendingPurchaseConfirmations();\r\n }\r\n};\r\n\r\nasync function loginPlayFab(steamId) {\r\n try {\r\n const screenName = steamId.screenName;\r\n const ticket = await Greenworks.getAuthSessionTicket();\r\n await loginPlayFabWithSteam(ticket.ticket.toString(\"hex\"), screenName);\r\n GameUI.notify.info(\"Logged in to PlayFab Cloud\");\r\n } catch (error) {\r\n GameUI.notify.error(\"Couldn't log in to PlayFab Cloud.\");\r\n throw error;\r\n }\r\n}\r\n\r\nasync function loginFirebase(steamId) {\r\n const accountId = steamId.accountId;\r\n const staticAccountId = steamId.staticAccountId;\r\n const screenName = steamId.screenName;\r\n await Cloud.loginWithSteam(accountId, staticAccountId, screenName);\r\n}\r\n\r\nfunction initializeDiscord() {\r\n Greenworks.initDiscordAPI(\"1057439416819396689\", 1399720);\r\n setDiscordActivity();\r\n Greenworks.runDiscordCallbacks();\r\n setInterval(setDiscordActivity, 8000);\r\n setInterval(Greenworks.runDiscordCallbacks, 4000);\r\n}\r\n\r\nfunction setDiscordActivity() {\r\n Greenworks.setDiscordActivity(RichPresenceInfo.state, RichPresenceInfo.details);\r\n}\r\n\r\nfunction createForceRefreshCanvas() {\r\n // This canvas is required for Steam overlay to properly work in Electron.\r\n // Makopaz:\r\n // \"essentially it makes the overlay have a refresh rate, otherwise it only\r\n // updates based on parts of the screen which change, so without it the small\r\n // areas of the screen where antimatter and such increment would be the only\r\n // small portions of the overlay showing.\"\r\n // There should be a less expensive approach. Please create a new issue or\r\n // PR on GitHub if you know one, the planet will say thank you for saving\r\n // megawatts of electricity spent on this canvas.\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.classList.add(\"_steam-refresh-canvas\");\r\n document.body.appendChild(canvas);\r\n const ctx = canvas.getContext(\"2d\");\r\n\r\n function forceRefresh() {\r\n ctx.clearRect(0, 0, canvas.width, canvas.height);\r\n window.requestAnimationFrame(forceRefresh);\r\n }\r\n\r\n forceRefresh();\r\n}\r\n","import Mousetrap from \"mousetrap\";\r\n\r\nimport { ElectronRuntime } from \"@/steam\";\r\n\r\nimport { GameKeyboard } from \"./keyboard\";\r\n\r\n// Add your hotkeys and combinations here\r\n// GameKeyboard.bind for single press combinations\r\n// GameKeyboard.bindRepeatable for repeatable combinations\r\n// Hotkeys obey player.options.hotkeys option, and should be everying relating to the functionality of the game itself\r\n// GameKeyboard.bindHotkey for single press hotkeys\r\n// GameKeyboard.bindRepeatableHotkey for repeatable hotkeys\r\n// GameKeyboard class uses Mousetrap under the hood, so for more details visit\r\n// https://craig.is/killing/mice\r\n\r\n// Note: mod is a function key helper by Mousetap for both ctrl and command,\r\n// and should be used to provide support for both Windows and Max\r\n\r\n// Note: DON'T add repeatables with modifier keys other than shift\r\n// because Mousetrap is crap, and we needed to plug it up to work\r\n// properly with shift, so you will need to plug it up additionally\r\n// for the other modifier keys (#3093).\r\n\r\n// Free keys:\r\n// i, j, k, l, o, p, q, v, w, x\r\n\r\n/*Modded Keys: \r\nN: Mending\r\nP: Rapture\r\n*/\r\n\r\n\r\nexport const shortcuts = [\r\n {\r\n name: \"Toggle Autobuyers\",\r\n keys: [\"a\"],\r\n type: \"bindHotkey\",\r\n function: () => keyboardToggleAutobuyers(),\r\n visible: true\r\n }, {\r\n name: \"Buy one Tickspeed\",\r\n keys: [\"shift\", \"t\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => buyTickSpeed(),\r\n visible: true\r\n }, {\r\n name: \"Buy max Tickspeed\",\r\n keys: [\"t\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => buyMaxTickSpeed(),\r\n visible: true\r\n }, {\r\n name: \"Max all\",\r\n keys: [\"m\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => maxAll(),\r\n visible: true\r\n }, {\r\n name: \"Dimensional Sacrifice\",\r\n keys: [\"s\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => sacrificeBtnClick(),\r\n visible: true\r\n }, {\r\n name: \"Dimension Boost\",\r\n keys: [\"d\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => manualRequestDimensionBoost(true),\r\n visible: true\r\n }, {\r\n name: \"Single Dimension Boost\",\r\n keys: [\"shift\", \"d\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => manualRequestDimensionBoost(false),\r\n visible: false\r\n }, {\r\n name: \"Antimatter Galaxy\",\r\n keys: [\"g\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => manualRequestGalaxyReset(true),\r\n visible: true\r\n }, {\r\n name: \"Single Antimatter Galaxy\",\r\n keys: [\"shift\", \"g\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => manualRequestGalaxyReset(false),\r\n visible: false\r\n }, {\r\n name: \"Big Crunch\",\r\n keys: [\"c\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => manualBigCrunchResetRequest(),\r\n visible: true\r\n }, {\r\n name: \"Replicanti Galaxy\",\r\n keys: [\"r\"],\r\n type: \"bindHotkey\",\r\n function: () => {\r\n replicantiGalaxyRequest();\r\n setHoldingR(true);\r\n },\r\n visible: () => Replicanti.areUnlocked || PlayerProgress.eternityUnlocked()\r\n }, {\r\n name: \"Eternity\",\r\n keys: [\"e\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => eternityResetRequest(),\r\n visible: () => PlayerProgress.eternityUnlocked() || Player.canEternity\r\n }, {\r\n name: \"Toggle Time Study respec\",\r\n keys: [\"shift\", \"e\"],\r\n type: \"bindHotkey\",\r\n function: () => {\r\n player.respec = !player.respec;\r\n GameUI.notify.info(`Time Study respec is now ${player.respec ? \"active\" : \"inactive\"}`);\r\n },\r\n visible: () => PlayerProgress.eternityUnlocked()\r\n }, {\r\n name: \"Enter/Exit Dilation\",\r\n keys: [\"l\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => startDilatedEternityRequest(),\r\n visible: () => PlayerProgress.realityUnlocked() || PlayerProgress.dilationUnlocked()\r\n }, {\r\n name: \"Reality\",\r\n keys: [\"y\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => requestManualReality(),\r\n visible: () => PlayerProgress.realityUnlocked() || isRealityAvailable()\r\n }, {\r\n name: \"Toggle Glyph unequip\",\r\n keys: [\"shift\", \"y\"],\r\n type: \"bindHotkey\",\r\n function: () => {\r\n player.reality.respec = !player.reality.respec;\r\n GameUI.notify.info(`Glyph respec is now ${player.reality.respec ? \"active\" : \"inactive\"}`);\r\n },\r\n visible: () => PlayerProgress.realityUnlocked()\r\n }, {\r\n name: \"Start/Pause Automator\",\r\n keys: [\"u\"],\r\n type: \"bindHotkey\",\r\n function: () => keyboardAutomatorToggle(),\r\n visible: () => Player.automatorUnlocked\r\n }, {\r\n name: \"Restart Automator\",\r\n keys: [\"shift\", \"u\"],\r\n type: \"bindHotkey\",\r\n function: () => keyboardAutomatorRestart(),\r\n visible: () => Player.automatorUnlocked\r\n }, {\r\n name: \"Undo Edit (Automator)\",\r\n keys: [\"mod\", \"z\"],\r\n type: \"bind\",\r\n function: () => AutomatorData.undoScriptEdit(),\r\n visible: () => Player.automatorUnlocked\r\n }, {\r\n name: \"Redo Edit (Automator)\",\r\n keys: [\"mod\", \"y\"],\r\n type: \"bind\",\r\n function: () => AutomatorData.redoScriptEdit(),\r\n visible: () => Player.automatorUnlocked\r\n }, {\r\n name: \"Toggle Black Hole\",\r\n keys: [\"b\"],\r\n type: \"bindHotkey\",\r\n function: () => BlackHoles.togglePause(),\r\n visible: () => PlayerProgress.realityUnlocked()\r\n }, {\r\n name: \"Toggle Continuum\",\r\n keys: [\"alt\", \"a\"],\r\n type: \"bindHotkey\",\r\n function: () => keyboardToggleContinuum(),\r\n visible: () => Laitela.continuumUnlocked\r\n }, {\r\n name: \"Armageddon\",\r\n keys: [\"z\"],\r\n type: \"bindRepeatableHotkey\",\r\n function: () => armageddonRequest(),\r\n visible: () => Pelle.isDoomed\r\n }, {\r\n name: \"Toggle Glyph unequip (Pelle)\",\r\n keys: [\"shift\", \"z\"],\r\n type: \"bindHotkey\",\r\n function: () => {\r\n if (!Pelle.isDoomed) return;\r\n player.reality.respec = !player.reality.respec;\r\n GameUI.notify.info(`Glyph respec is now ${player.reality.respec ? \"active\" : \"inactive\"}`);\r\n },\r\n visible: () => Pelle.isDoomed\r\n }, {\r\n name: \"Save game\",\r\n keys: [\"mod\", \"s\"],\r\n type: \"bind\",\r\n function: () => {\r\n GameStorage.save(false, true);\r\n return false;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Export game\",\r\n keys: [\"mod\", \"e\"],\r\n type: \"bind\",\r\n function: () => {\r\n GameStorage.export();\r\n return false;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Open Hotkey List Modal\",\r\n keys: [\"?\"],\r\n type: \"bind\",\r\n function: () => {\r\n keyboardPressQuestionMark();\r\n return false;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Open How To Play Modal\",\r\n keys: [\"h\"],\r\n type: \"bind\",\r\n function: () => {\r\n keyboardH2PToggle();\r\n return false;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Modify visible tabs\",\r\n keys: [\"tab\"],\r\n type: \"bind\",\r\n function: () => {\r\n keyboardVisibleTabsToggle();\r\n return false;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Confirm Modal\",\r\n keys: [\"enter\"],\r\n type: \"bind\",\r\n function: () => {\r\n EventHub.dispatch(GAME_EVENT.ENTER_PRESSED);\r\n return true;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Close Modal or open Options\",\r\n keys: [\"esc\"],\r\n type: \"bind\",\r\n function: () => {\r\n keyboardPressEscape();\r\n return false;\r\n },\r\n visible: true\r\n }, {\r\n name: \"Paying respects\",\r\n keys: [\"f\"],\r\n type: \"bindRepeatable\",\r\n function: () => {\r\n GameUI.notify.info(\"Paying respects\");\r\n SecretAchievement(13).unlock();\r\n },\r\n visible: false\r\n }, {\r\n name: \"Change Tab\",\r\n keys: [\"up\"],\r\n type: \"bind\",\r\n function: () => {\r\n EventHub.dispatch(GAME_EVENT.ARROW_KEY_PRESSED, \"up\");\r\n return false;\r\n },\r\n visible: false\r\n }, {\r\n name: \"Change Tab\",\r\n keys: [\"down\"],\r\n type: \"bind\",\r\n function: () => {\r\n EventHub.dispatch(GAME_EVENT.ARROW_KEY_PRESSED, \"down\");\r\n return false;\r\n },\r\n visible: false\r\n }, {\r\n name: \"Change Subtab\",\r\n keys: [\"left\"],\r\n type: \"bind\",\r\n function: () => {\r\n EventHub.dispatch(GAME_EVENT.ARROW_KEY_PRESSED, \"left\");\r\n return false;\r\n },\r\n visible: false\r\n }, {\r\n name: \"Change Subtab\",\r\n keys: [\"right\"],\r\n type: \"bind\",\r\n function: () => {\r\n EventHub.dispatch(GAME_EVENT.ARROW_KEY_PRESSED, \"right\");\r\n return false;\r\n },\r\n visible: false\r\n }, {\r\n name: \"Doesn't exist\",\r\n keys: [\"9\"],\r\n type: \"bind\",\r\n function: () => SecretAchievement(41).unlock(),\r\n visible: false\r\n },\r\n {\r\n name: \"Adjust Autobuyers\",\r\n keys: [\"mod\", \"alt\", \"a\"],\r\n type: \"bind\",\r\n function: () => keyboardEditAutobuyers(),\r\n visible: () => Autobuyers.hasAutobuyersForEditModal\r\n },\r\n {\r\n name: \"[Redemption] Mend\",\r\n keys: [\"n\"],\r\n type: \"bind\",\r\n function: () => mendingResetRequest(),\r\n visible: () => true\r\n },\r\n {\r\n name: \"Fullscreen\",\r\n keys: [\"F10\"],\r\n type: \"bind\",\r\n function: () => {},\r\n visible: () => false\r\n },\r\n {\r\n name: \"Zoom In\",\r\n keys: [\"ctrl\", \"=\"],\r\n type: \"bind\",\r\n function: () => ElectronRuntime.increaseZoom(),\r\n visible: () => false\r\n },\r\n {\r\n name: \"Zoom In\",\r\n keys: [\"ctrl\", \"+\"],\r\n type: \"bind\",\r\n function: () => ElectronRuntime.increaseZoom(),\r\n visible: () => false\r\n },\r\n {\r\n name: \"Zoom Out\",\r\n keys: [\"ctrl\", \"-\"],\r\n type: \"bind\",\r\n function: () => ElectronRuntime.decreaseZoom(),\r\n visible: () => false\r\n },\r\n {\r\n name: \"Reset Zoom\",\r\n keys: [\"ctrl\", \"0\"],\r\n type: \"bind\",\r\n function: () => ElectronRuntime.resetZoom(),\r\n visible: () => false\r\n },\r\n];\r\n\r\nfor (const hotkey of shortcuts) {\r\n GameKeyboard[hotkey.type](hotkey.keys.join(\"+\"), hotkey.function);\r\n}\r\n\r\n// We need to know whether the player is holding R or not for the replicanti galaxy\r\n// The keydown version is above, with the replicantiGalaxyRequest, as otherwise it would be overridden\r\nGameKeyboard.bind(\"r\", () => setHoldingR(false), \"keyup\");\r\n\r\n// Same thing with Shift; we need to double-up on ctrl-shift as well since they're technically different keybinds\r\nGameKeyboard.bind(\"shift\", () => setShiftKey(true), \"keydown\");\r\nGameKeyboard.bind(\"shift\", () => setShiftKey(false), \"keyup\");\r\nGameKeyboard.bind(\"ctrl+shift\", () => setShiftKey(true), \"keydown\");\r\nGameKeyboard.bind(\"ctrl+shift\", () => setShiftKey(false), \"keyup\");\r\nGameKeyboard.bind(\"alt+shift\", () => setShiftKey(true), \"keydown\");\r\nGameKeyboard.bind(\"alt+shift\", () => setShiftKey(false), \"keyup\");\r\n\r\n\r\nGameKeyboard.bindHotkey(\"alt+t\", () => toggleAutobuyer(Autobuyer.tickspeed));\r\nGameKeyboard.bindHotkey(\"shift+alt+t\", () => toggleBuySingles(Autobuyer.tickspeed));\r\nGameKeyboard.bindHotkey(\"alt+s\", () => toggleAutobuyer(Autobuyer.sacrifice));\r\nGameKeyboard.bindHotkey(\"alt+d\", () => toggleAutobuyer(Autobuyer.dimboost));\r\nGameKeyboard.bindHotkey(\"alt+g\", () => toggleAutobuyer(Autobuyer.galaxy));\r\nGameKeyboard.bindHotkey(\"alt+r\", () => toggleAutobuyer(Autobuyer.replicantiGalaxy));\r\n\r\nGameKeyboard.bindHotkey(\"alt+c\", () => toggleAutobuyer(Autobuyer.bigCrunch));\r\nGameKeyboard.bindHotkey(\"alt+e\", () => toggleAutobuyer(Autobuyer.eternity));\r\nGameKeyboard.bindHotkey(\"alt+y\", () => toggleAutobuyer(Autobuyer.reality));\r\n\r\n(function() {\r\n function bindDimensionHotkeys(tier) {\r\n GameKeyboard.bindRepeatableHotkey(`${tier}`, () => buyManyDimension(tier));\r\n GameKeyboard.bindRepeatableHotkey(`num${tier}`, () => buyManyDimension(tier));\r\n GameKeyboard.bindRepeatableHotkey(`shift+${tier}`, () => buyOneDimension(tier));\r\n GameKeyboard.bindRepeatableHotkey(`shift+num${tier}`, () => buyOneDimension(tier));\r\n GameKeyboard.bindHotkey(`alt+${tier}`, () => toggleAutobuyer(Autobuyer.antimatterDimension(tier)));\r\n GameKeyboard.bindHotkey(`alt+num${tier}`, () => toggleAutobuyer(Autobuyer.antimatterDimension(tier)));\r\n GameKeyboard.bindHotkey(`shift+alt+${tier}`, () => toggleBuySingles(Autobuyer.antimatterDimension(tier)));\r\n GameKeyboard.bindHotkey(`shift+alt+num${tier}`, () => toggleBuySingles(Autobuyer.antimatterDimension(tier)));\r\n }\r\n for (let i = 1; i < 9; i++) bindDimensionHotkeys(i);\r\n}());\r\n\r\n// A few special GameKeyboards\r\nGameKeyboard.bind(\r\n [\"mod+shift+c\", \"mod+shift+i\", \"mod+shift+j\", \"f12\"],\r\n () => SecretAchievement(23).unlock()\r\n);\r\n\r\n// Toggle autobuyers\r\nfunction toggleAutobuyer(buyer) {\r\n // Autobuyer.tickspeed.isUnlocked is false without NC9, but we still want the simpler one to be togglable via hotkey\r\n const isSimpleTickspeed = buyer === Autobuyer.tickspeed && buyer.isBought;\r\n if (buyer.disabledByContinuum) {\r\n GameUI.notify.info(\"Continuum is enabled, you cannot alter this autobuyer\");\r\n } else if (buyer.isUnlocked || isSimpleTickspeed) {\r\n buyer.toggle();\r\n GameUI.notify.info(`${buyer.name} Autobuyer toggled ${(buyer.isActive) ? \"on\" : \"off\"}`);\r\n }\r\n return false;\r\n}\r\n\r\nfunction toggleBuySingles(buyer) {\r\n if (buyer.disabledByContinuum) {\r\n GameUI.notify.info(\"Continuum is enabled, you cannot alter this autobuyer\");\r\n } else if (buyer.isUnlocked && buyer.toggleMode !== null) {\r\n buyer.toggleMode();\r\n const bulkName = (buyer.name === \"Tickspeed\" || buyer.hasUnlimitedBulk) ? \"max\" : \"10\";\r\n GameUI.notify.info(`${buyer.name} Autobuyer set to buy ${(buyer.mode === 1) ? \"singles\" : bulkName}`);\r\n }\r\n return false;\r\n}\r\n\r\nfunction keyboardToggleAutobuyers() {\r\n if (Tab.automation.isUnlocked) {\r\n Autobuyers.toggle();\r\n GameUI.notify.info(`Autobuyers ${player.auto.autobuyersOn ? \"resumed\" : \"paused\"}`);\r\n }\r\n}\r\n\r\nfunction keyboardToggleContinuum() {\r\n if (!Laitela.continuumUnlocked) return;\r\n if (ImaginaryUpgrade(21).isLockingMechanics && player.auto.disableContinuum) {\r\n ImaginaryUpgrade(21).tryShowWarningModal();\r\n return;\r\n }\r\n // This is a toggle despite the lack of !, because player.auto.disableContinuum\r\n // is negated compared to whether continuum is on.\r\n Laitela.setContinuum(player.auto.disableContinuum);\r\n GameUI.notify.info(`${(player.auto.disableContinuum) ? \"Disabled\" : \"Enabled\"} Continuum`);\r\n}\r\n\r\nfunction keyboardAutomatorToggle() {\r\n // Automator must be unlocked\r\n if (Player.automatorUnlocked) {\r\n if (AutomatorBackend.isRunning) {\r\n AutomatorBackend.pause();\r\n } else if (AutomatorBackend.isOn) {\r\n AutomatorBackend.mode = AUTOMATOR_MODE.RUN;\r\n } else {\r\n // Only attempt to start the visible script instead of the existing script if it isn't already running\r\n const visibleIndex = player.reality.automator.state.editorScript;\r\n AutomatorBackend.restart();\r\n AutomatorBackend.start(visibleIndex);\r\n if (AutomatorData.currentErrors().length === 0) {\r\n GameUI.notify.automator(`Starting script \"${AutomatorBackend.scriptName}\"`);\r\n } else {\r\n GameUI.notify.error(`Cannot start script \"${AutomatorBackend.scriptName}\" (has errors)`);\r\n }\r\n return;\r\n }\r\n const action = AutomatorBackend.isRunning ? \"Resuming\" : \"Pausing\";\r\n const linenum = AutomatorBackend.currentLineNumber;\r\n GameUI.notify.automator(`${action} script \"${AutomatorBackend.scriptName}\" at line ${linenum}`);\r\n }\r\n}\r\n\r\nfunction keyboardAutomatorRestart() {\r\n if (Player.automatorUnlocked) {\r\n const action = AutomatorBackend.isOn ? \"Restarting\" : \"Starting\";\r\n GameUI.notify.automator(`${action} script \"${AutomatorBackend.scriptName}\"`);\r\n\r\n AutomatorBackend.restart();\r\n AutomatorBackend.start();\r\n }\r\n}\r\n\r\nfunction armageddonRequest() {\r\n if (!Pelle.canArmageddon) return;\r\n Pelle.armageddon(true);\r\n}\r\n\r\nfunction keyboardPressEscape() {\r\n if (Quote.isOpen || Quote.isHistoryOpen) Quote.clearAll();\r\n else if (Modal.isOpen) Modal.hideAll();\r\n else Tab.options.show(true);\r\n}\r\n\r\nfunction keyboardPressQuestionMark() {\r\n if (Modal.hotkeys.isOpen) {\r\n EventHub.dispatch(GAME_EVENT.CLOSE_MODAL);\r\n return;\r\n }\r\n if (Modal.isOpen) Modal.hideAll();\r\n Modal.hotkeys.show();\r\n}\r\n\r\nfunction keyboardH2PToggle() {\r\n if (Modal.h2p.isOpen) {\r\n EventHub.dispatch(GAME_EVENT.CLOSE_MODAL);\r\n return;\r\n }\r\n if (Modal.isOpen) Modal.hideAll();\r\n Modal.h2p.show();\r\n}\r\n\r\nfunction keyboardEditAutobuyers() {\r\n if (Modal.autobuyerEditModal.isOpen) {\r\n EventHub.dispatch(GAME_EVENT.CLOSE_MODAL);\r\n return;\r\n }\r\n if (!Autobuyers.hasAutobuyersForEditModal) return;\r\n if (Modal.isOpen) Modal.hideAll();\r\n Modal.autobuyerEditModal.show();\r\n}\r\n\r\nfunction keyboardVisibleTabsToggle() {\r\n if (Modal.hiddenTabs.isOpen) {\r\n EventHub.dispatch(GAME_EVENT.CLOSE_MODAL);\r\n return;\r\n }\r\n if (Modal.isOpen) Modal.hideAll();\r\n Modal.hiddenTabs.show();\r\n}\r\n\r\nEventHub.logic.on(GAME_EVENT.ARROW_KEY_PRESSED, direction => {\r\n if (Quote.isOpen || Quote.isHistoryOpen) return;\r\n // Current tabs. Defined here as both tab and subtab movements require knowing your current tab.\r\n const currentTab = Tabs.current.key;\r\n if (direction[0] === \"up\" || direction[0] === \"down\") {\r\n // Make an array of the keys of all the unlocked and visible tabs\r\n const tabs = Tabs.currentUIFormat.flatMap(i => (i.isAvailable ? [i.key] : []));\r\n // Find the index of the tab we are on\r\n let top = tabs.indexOf(currentTab);\r\n // Move in the desired direction\r\n if (direction[0] === \"up\") top--;\r\n else top++;\r\n // Loop around if needed\r\n top = (top + tabs.length) % tabs.length;\r\n // And now we go there.\r\n Tab[tabs[top]].show(true);\r\n } else if (direction[0] === \"left\" || direction[0] === \"right\") {\r\n // Current subtabs\r\n const currentSubtab = Tabs.current._currentSubtab.key;\r\n // Make an array of the keys of all the unlocked and visible subtabs\r\n const subtabs = Tabs.current.subtabs.flatMap(i => (i.isAvailable ? [i.key] : []));\r\n // Find the index of the subtab we are on\r\n let sub = subtabs.indexOf(currentSubtab);\r\n // Move in the desired direction\r\n if (direction[0] === \"left\") sub--;\r\n else sub++;\r\n // Loop around if needed\r\n sub = (sub + subtabs.length) % subtabs.length;\r\n // And now we go there.\r\n Tab[currentTab][subtabs[sub]].show(true);\r\n }\r\n});\r\n\r\nconst konamiCode = [\"up\", \"up\", \"down\", \"down\", \"left\", \"right\", \"left\", \"right\", \"b\", \"a\", \"enter\"];\r\nlet konamiStep = 0;\r\n\r\nfunction testKonami(character) {\r\n if (SecretAchievement(17).isUnlocked) return;\r\n // This conditional is structured weirdly in order to make sure more than 2 consecutive \"up\" inputs doesn't\r\n // reset the sequence state unnecessarily, and that interrupting the sequence later on with the starting\r\n // input will correctly set the state to one step in\r\n if (konamiCode[konamiStep] === character) konamiStep++;\r\n else if (konamiStep === 2 && character === \"up\") konamiStep = 2;\r\n else if (character === konamiCode[0]) konamiStep = 1;\r\n else konamiStep = 0;\r\n if (konamiCode.length <= konamiStep) {\r\n SecretAchievement(17).unlock();\r\n Currency.antimatter.bumpTo(30);\r\n Speedrun.startTimer();\r\n }\r\n}\r\n\r\n// Remember that Mousetrap handles the backend for GameKeyboard\r\n// Without this, Mousetrap become confused when the \"up\" key is pressed, as it is the starting key of a sequence\r\n// and an individual key. To allow both the up keybind and the konami code to work, we will change how Mousetrap handles\r\n// all keys so the konami code functions entirely separately from the normal handling.\r\nconst originalHandleKey = Mousetrap.prototype.handleKey;\r\nMousetrap.prototype.handleKey = function(character, modifiers, e) {\r\n if (e.type === \"keydown\") testKonami(character);\r\n return originalHandleKey.apply(this, [character, modifiers, e]);\r\n};\r\n","import { BitPurchasableMechanicState, RebuyableMechanicState } from \"./game-mechanics\";\r\n\r\nclass CorruptionUpgradeState extends BitPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.registerEvents(config.checkEvent, () => this.tryUnlock());\r\n }\r\n get isBought() {\r\n return (this.bits & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set isBought(value) {\r\n if (value) {\r\n this.bits |= (1 << this.bitIndex);\r\n } else {\r\n this.bits &= ~(1 << this.bitIndex);\r\n }\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get shortDescription() {\r\n return this.config.shortDescription ? this.config.shortDescription() : \"\";\r\n }\r\n\r\n get requirement() {\r\n return typeof this.config.requirement === \"function\" ? this.config.requirement() : this.config.requirement;\r\n }\r\n\r\n get lockEvent() {\r\n return typeof this.config.lockEvent === \"function\" ? this.config.lockEvent() : this.config.lockEvent;\r\n }\r\n\r\n get currency() {\r\n return Currency.corruptionFragments;\r\n }\r\n\r\n get bitIndex() {\r\n return this.id;\r\n }\r\n\r\n get bits() {\r\n return player.mending.corruptionUpgradeBits;\r\n }\r\n\r\n set bits(value) {\r\n player.mending.corruptionUpgradeBits = value;\r\n }\r\n\r\n get hasPlayerLock() {\r\n return (player.mending.reqLock.corruption & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set hasPlayerLock(value) {\r\n if (value) player.mending.reqLock.corruption |= 1 << this.bitIndex;\r\n else player.mending.reqLock.corruption &= ~(1 << this.bitIndex);\r\n }\r\n\r\n get isLockingMechanics() {\r\n const shouldBypass = this.config.bypassLock?.() ?? false;\r\n return this.hasPlayerLock && this.isPossible && !shouldBypass && !this.isAvailableForPurchase;\r\n }\r\n\r\n // Required to be changed this way to avoid direct prop mutation in Vue components\r\n setMechanicLock(value) {\r\n this.hasPlayerLock = value;\r\n }\r\n\r\n toggleMechanicLock() {\r\n this.hasPlayerLock = !this.hasPlayerLock;\r\n }\r\n\r\n // Note we don't actually show the modal if we already failed or unlocked it\r\n tryShowWarningModal(specialLockText) {\r\n if (this.isPossible && !this.isAvailableForPurchase) {\r\n Modal.upgradeLock.show({ upgrade: this, isImaginary: false, specialLockText });\r\n }\r\n }\r\n\r\n respecCorruptionUpgrades() {\r\n Currency.corruptionFragments.respecCall()\r\n player.mending.corruptionUpgradeBits = 0\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return true;\r\n }\r\n\r\n get isPossible() {\r\n return this.config.hasFailed ? !this.config.hasFailed() : true;\r\n }\r\n\r\n tryUnlock() {\r\n const isCorrupted = player.mending.corruptionChallenge.corruptedMend;\r\n if (!isCorrupted || this.isAvailableForPurchase || !this.config.checkRequirement()) return;\r\n player.mending.corruptionUpgReqs |= (1 << this.id);\r\n GameUI.notify.reality(`You've unlocked a Corruption Upgrade: ${this.config.name}`);\r\n this.hasPlayerLock = false;\r\n }\r\n\r\n onPurchased() {\r\n EventHub.dispatch(GAME_EVENT.CORRUPTION_UPGRADE_BOUGHT);\r\n const id = this.id;\r\n // insert code here\r\n GameCache.staticGlyphWeights.invalidate();\r\n }\r\n}\r\n\r\nclass RebuyableCorruptionUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.corruptionFragments;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.mending.corruptionRebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.mending.corruptionRebuyables[this.id] = value;\r\n }\r\n}\r\n\r\nCorruptionUpgradeState.index = mapGameData(\r\n GameDatabase.mending.corruptionUpgrades,\r\n config => (config.id < 0\r\n ? new RebuyableCorruptionUpgradeState(config)\r\n : new CorruptionUpgradeState(config))\r\n);\r\n\r\n/**\r\n * @param {number} id\r\n * @return {CorruptionUpgradeState|RebuyableCorruptionUpgradeState}\r\n */\r\nexport const CorruptionUpgrade = id => CorruptionUpgradeState.index[id];\r\n\r\nexport const CorruptionUpgrades = {\r\n /**\r\n * @type {(CorruptionUpgradeState|RebuyableCorruptionUpgradeState)[]}\r\n */\r\n all: CorruptionUpgradeState.index.compact(),\r\n get allBought() {\r\n return (player.mending.corruptionUpgradeBits >> 6) + 1 === 1 << (GameDatabase.mending.corruptionUpgrades.length - 5);\r\n }\r\n};\r\n","import { CorruptionUpgrade } from \"./corruption-upgrades\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nexport const GALAXY_TYPE = {\r\n NORMAL: 0,\r\n DISTANT: 1,\r\n REMOTE: 2,\r\n THIRD: 3\r\n};\r\n\r\nclass GalaxyRequirement {\r\n constructor(tier, amount) {\r\n this.tier = tier;\r\n this.amount = amount;\r\n }\r\n\r\n get isSatisfied() {\r\n const dimension = AntimatterDimension(this.tier);\r\n return dimension.totalAmount.gte(this.amount);\r\n }\r\n}\r\n\r\nexport class Galaxy {\r\n static get scalingThreeStart(){\r\n let x = (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(5).completions >= 1 && !Pelle.isDoomed) ? EternityChallenge(5).vReward.effectValue : 0;\r\n return 750000 + (5000 * MendingUpgrade(16).boughtAmount) + CorruptionUpgrade(9).effectOrDefault(0) + x;\r\n }\r\n static get remoteStart() {\r\n return MendingUpgrade(17).isBought ? Infinity : RealityUpgrade(21).effectOrDefault(800);\r\n }\r\n\r\n static get requirement() {\r\n return this.requirementAt(player.galaxies);\r\n }\r\n\r\n /**\r\n * Figure out what galaxy number we can buy up to\r\n * @param {number} currency Either dim 8 or dim 6, depends on current challenge\r\n * @returns {number} Max number of galaxies (total)\r\n */\r\n static buyableGalaxies(currency) {\r\n let bulk = null;\r\n try{\r\n bulk = bulkBuyBinarySearch(new Decimal(currency), {\r\n costFunction: x => this.requirementAt(x).amount,\r\n cumulative: false,\r\n }, player.galaxies);\r\n }\r\n catch{\r\n return 1e9;\r\n }\r\n if (!bulk) throw new Error(\"Unexpected failure to calculate galaxy purchase\");\r\n return player.galaxies + bulk.quantity;\r\n }\r\n\r\n static requirementAt(galaxies) {\r\n let amount = Galaxy.baseCost + (galaxies * Galaxy.costMult);\r\n\r\n const type = Galaxy.typeAt(galaxies);\r\n\r\n if (type === GALAXY_TYPE.DISTANT && EternityChallenge(5).isRunning) {\r\n amount += Math.pow(galaxies, 2) + galaxies;\r\n } else if (type === GALAXY_TYPE.DISTANT || type === GALAXY_TYPE.REMOTE) {\r\n const galaxyCostScalingStart = this.costScalingStart;\r\n const galaxiesBeforeDistant = Math.clampMin(galaxies - galaxyCostScalingStart + 1, 0);\r\n amount += Math.pow(galaxiesBeforeDistant, 2) + galaxiesBeforeDistant;\r\n }\r\n\r\n if (type === GALAXY_TYPE.REMOTE) {\r\n amount *= Math.pow(1.002, galaxies - (Galaxy.remoteStart - 1));\r\n }\r\n\r\n if (type === GALAXY_TYPE.THIRD) {\r\n /* This seems like a shit ton of math, so let me break it down:\r\n First, we find out what polynomial we want (whether we want quartic (4th degree), quintic (5th degree) or hextic (6th degree))\r\n From there, we do the polynomial that is equal to doing (b += a; c += b; d += c... (where the last letter is the nth degree + 1 in the alphabet))\r\n where all numbers start at 2. In the case of hextic, its x^6/360 + x^5/24 + 17x^4/72 + 5x^3/8 + 137x^2/180 + x/3\r\n In the case of quintic, it is x^5/60 + x^4/12 + x^3/12 - x^2/12 - x/10\r\n In the case of quartic, it is x^4/12 + x^3/2 + 11x^2/12 + x/2\r\n */\r\n let polynomialLvl = 6\r\n if (WarpUpgrade(4).isBought) { polynomialLvl -= 1 }\r\n if (WarpUpgrade(11).isBought) { polynomialLvl -= 1 }\r\n if (polynomialLvl == 6) {\r\n let n = Math.max(galaxies - Galaxy.scalingThreeStart, 0);\r\n let a = n ** 6;\r\n let b = 15 * (n ** 5);\r\n let c = 85 * (n ** 4);\r\n let d = 225 * (n ** 3);\r\n let e = 274 * (n ** 2)\r\n amount += (a + b + c + d + e + (120 * n)) / 360;\r\n }\r\n if (polynomialLvl == 5) {\r\n let n = Math.max(galaxies - Galaxy.scalingThreeStart, 0);\r\n let a = n ** 5;\r\n let b = 5 * (n ** 4);\r\n let c = 5 * (n ** 3);\r\n let d = 5 * (n ** 2);\r\n amount += (a + b + c - d - (6 * n)) / 60;\r\n }\r\n if (polynomialLvl == 4) {\r\n let n = Math.max(galaxies - Galaxy.scalingThreeStart, 0);\r\n let a = n ** 4;\r\n let b = 6 * (n ** 3);\r\n let c = 11 * (n ** 2);\r\n amount += (a + b + c + (6 * n)) / 12;\r\n }\r\n //amount *= Math.pow(Math.pow(1.002, galaxies - (Galaxy.scalingThreeStart - 1)), 2);\r\n }\r\n\r\n amount -= Effects.sum(InfinityUpgrade.resetBoost);\r\n if (InfinityChallenge(5).isCompleted) amount -= 1;\r\n\r\n if (GlyphAlteration.isAdded(\"power\")) amount *= getSecondaryGlyphEffect(\"powerpow\");\r\n\r\n amount = Math.floor(amount);\r\n\r\n //how do I understand galaxy scaling harder......I'll just let amount powered here--sxy\r\n if (player.mending.corruptionChallenge.corruptedMend&&type !== GALAXY_TYPE.NORMAL) {\r\n let galWeakScaling = corruptionPenalties.galWeak.scaling[player.mending.corruption[3]];\r\n if(CorruptionUpgrade(19).isBought) galWeakScaling = Math.pow(galWeakScaling,0.5)\r\n amount = Math.floor(amount**(galWeakScaling))\r\n }\r\n\r\n const tier = Galaxy.requiredTier;\r\n return new GalaxyRequirement(tier, amount);\r\n }\r\n\r\n static get costMult() {\r\n return Effects.min(NormalChallenge(10).isRunning ? 90 : 60, TimeStudy(42));\r\n }\r\n\r\n static get baseCost() {\r\n return NormalChallenge(10).isRunning ? 99 : 80;\r\n }\r\n\r\n static get requiredTier() {\r\n return NormalChallenge(10).isRunning ? 6 : 8;\r\n }\r\n\r\n static get canBeBought() {\r\n if (EternityChallenge(6).isRunning && !Enslaved.isRunning) return false;\r\n if (NormalChallenge(8).isRunning || InfinityChallenge(7).isRunning) return false;\r\n if (player.records.thisInfinity.maxAM.gt(Player.infinityGoal) &&\r\n (!player.break || Player.isInAntimatterChallenge)) return false;\r\n return true;\r\n }\r\n\r\n static get lockText() {\r\n if (this.canBeBought) return null;\r\n if (EternityChallenge(6).isRunning) return \"Locked (Eternity Challenge 6)\";\r\n if (InfinityChallenge(7).isRunning) return \"Locked (Infinity Challenge 7)\";\r\n if (InfinityChallenge(1).isRunning) return \"Locked (Infinity Challenge 1)\";\r\n if (NormalChallenge(8).isRunning) return \"Locked (8th Antimatter Dimension Autobuyer Challenge)\";\r\n return null;\r\n }\r\n\r\n static get costScalingStart() {\r\n let x = 100 + TimeStudy(302).effectOrDefault(0) + Effects.sum(\r\n TimeStudy(223),\r\n TimeStudy(224),\r\n GlyphSacrifice.power\r\n );\r\n if(EternityChallenge(5).completions >= 1) x += EternityChallenge(5).reward.effectValue;\r\n return x;\r\n }\r\n\r\n static get type() {\r\n return this.typeAt(player.galaxies);\r\n }\r\n\r\n static typeAt(galaxies) {\r\n if (galaxies >= Galaxy.scalingThreeStart) {\r\n return GALAXY_TYPE.THIRD;\r\n }\r\n if (galaxies >= Galaxy.remoteStart) {\r\n return GALAXY_TYPE.REMOTE;\r\n }\r\n if (EternityChallenge(5).isRunning || galaxies >= this.costScalingStart) {\r\n return GALAXY_TYPE.DISTANT;\r\n }\r\n return GALAXY_TYPE.NORMAL;\r\n }\r\n}\r\n\r\nfunction galaxyReset() {\r\n EventHub.dispatch(GAME_EVENT.GALAXY_RESET_BEFORE);\r\n player.galaxies++;\r\n if (!Achievement(143).isUnlocked || (Pelle.isDoomed && !PelleUpgrade.galaxyNoResetDimboost.canBeApplied)) {\r\n player.dimensionBoosts = 0;\r\n }\r\n softReset(0);\r\n if (Notations.current === Notation.emoji) player.requirementChecks.permanent.emojiGalaxies++;\r\n // This is specifically reset here because the check is actually per-galaxy and not per-infinity\r\n player.requirementChecks.infinity.noSacrifice = true;\r\n EventHub.dispatch(GAME_EVENT.GALAXY_RESET_AFTER);\r\n}\r\n\r\nexport function manualRequestGalaxyReset(bulk) {\r\n if (!Galaxy.canBeBought || !Galaxy.requirement.isSatisfied) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n if (RealityUpgrade(7).isLockingMechanics && player.galaxies > 0) {\r\n RealityUpgrade(7).tryShowWarningModal();\r\n return;\r\n }\r\n if (player.options.confirmations.antimatterGalaxy) {\r\n Modal.antimatterGalaxy.show({ bulk: bulk && EternityMilestone.autobuyMaxGalaxies.isReached });\r\n return;\r\n }\r\n requestGalaxyReset(bulk);\r\n}\r\n\r\n// All galaxy reset requests, both automatic and manual, eventually go through this function; therefore it suffices\r\n// to restrict galaxy count for RUPG7's requirement here and nowhere else\r\nexport function requestGalaxyReset(bulk, limit = Number.MAX_VALUE) {\r\n const restrictedLimit = RealityUpgrade(7).isLockingMechanics ? 1 : limit;\r\n if (EternityMilestone.autobuyMaxGalaxies.isReached && bulk) return maxBuyGalaxies(restrictedLimit);\r\n if (player.galaxies >= restrictedLimit || !Galaxy.canBeBought || !Galaxy.requirement.isSatisfied) return false;\r\n Tutorial.turnOffEffect(TUTORIAL_STATE.GALAXY);\r\n galaxyReset();\r\n return true;\r\n}\r\n\r\nfunction maxBuyGalaxies(limit = Number.MAX_VALUE) {\r\n if (player.galaxies >= limit || !Galaxy.canBeBought) return false;\r\n // Check for ability to buy one galaxy (which is pretty efficient)\r\n const req = Galaxy.requirement;\r\n if (!req.isSatisfied) return false;\r\n const dim = AntimatterDimension(req.tier);\r\n const newGalaxies = Math.clampMax(\r\n Galaxy.buyableGalaxies(Math.round(dim.totalAmount.toNumber())),\r\n limit);\r\n if (Notations.current === Notation.emoji) {\r\n player.requirementChecks.permanent.emojiGalaxies += newGalaxies - player.galaxies;\r\n }\r\n // Galaxy count is incremented by galaxyReset(), so add one less than we should:\r\n player.galaxies = newGalaxies - 1;\r\n galaxyReset();\r\n if (Enslaved.isRunning && player.galaxies > 1) EnslavedProgress.c10.giveProgress();\r\n Tutorial.turnOffEffect(TUTORIAL_STATE.GALAXY);\r\n return true;\r\n}\r\n","import { GameDatabase } from \"./secret-formula/game-database\";\r\n\r\nclass AwayProgress {\r\n constructor(config) {\r\n this.name = config.name;\r\n this.forcedName = config.forcedName;\r\n this.isUnlocked = () => config.isUnlocked() || player.records.fullGameCompletions > 0;\r\n this.awayOption = config.awayOption ?? this.name;\r\n this.showOption = config.showOption ?? true;\r\n // This is an array of strings, each one the name of the next entry in the player object to navigate to\r\n // If there is no reference, it is accessed directly by the name through the player object.\r\n this.reference = config.reference ?? [this.name];\r\n // Most of the entries in offline progress are props which can be directly read from the player object, but eg. for\r\n // achievements the raw data is an array of bitmasks. This structure allows generic support for indirect values.\r\n this.applyFn = config.applyFn ?? (x => x);\r\n this.classObjectReference = config.classObjectReference ?? this.name;\r\n this.appearsInAwayModal = config.appearsInAwayModal ?? true;\r\n }\r\n\r\n get option() {\r\n return player.options.awayProgress[this.awayOption];\r\n }\r\n\r\n set option(value) {\r\n player.options.awayProgress[this.awayOption] = value;\r\n }\r\n\r\n get classObject() {\r\n // Format the camelCase name to kebab-case\r\n return `c-modal-away-progress__${\r\n this.classObjectReference.replace(/[A-Z]/gu, match => `-${match.toLowerCase()}`)\r\n }`;\r\n }\r\n\r\n get formatName() {\r\n if (this.forcedName) return this.forcedName;\r\n // Format the camelCase name to Title Case, with spaces added before the capital letters\r\n return this.name\r\n .replace(/[A-Z]/gu, match => ` ${match}`)\r\n .replace(/^\\w/u, c => c.toUpperCase());\r\n }\r\n\r\n // Pass in player object. Navigate to there using each reference point. Return the place you arrived at.\r\n navigateTo(from) {\r\n let place = from;\r\n for (const goTo of this.reference) {\r\n place = place[goTo];\r\n }\r\n return this.applyFn(place);\r\n }\r\n}\r\n\r\nexport const AwayProgressTypes = {\r\n all: {},\r\n index: [],\r\n showOption: [],\r\n appearsInAwayModal: [],\r\n};\r\n\r\nfor (let index = 0; index < GameDatabase.awayProgressTypes.length; index++) {\r\n const entry = new AwayProgress(GameDatabase.awayProgressTypes[index]);\r\n const name = entry.name;\r\n AwayProgressTypes.all[name] = entry;\r\n AwayProgressTypes.index.push(name);\r\n if (entry.showOption) AwayProgressTypes.showOption.push(name);\r\n if (entry.appearsInAwayModal) AwayProgressTypes.appearsInAwayModal.push(name);\r\n}\r\n","import { GameDatabase } from \"./secret-formula/game-database\";\r\n\r\nclass ConfirmationState {\r\n constructor(config) {\r\n this.name = config.name;\r\n this._confirmationSetting = config.option;\r\n this.isUnlocked = () => config.isUnlocked() || player.records.fullGameCompletions > 0;\r\n }\r\n\r\n get option() {\r\n return player.options.confirmations[this._confirmationSetting];\r\n }\r\n\r\n set option(value) {\r\n player.options.confirmations[this._confirmationSetting] = value;\r\n }\r\n}\r\n\r\nexport const ConfirmationTypes = GameDatabase.confirmationTypes.mapToObject(\r\n config => config.option,\r\n config => new ConfirmationState(config)\r\n);\r\n\r\nConfirmationTypes.index = Object.values(ConfirmationTypes);\r\n","/**\r\n * @abstract\r\n */\r\nexport class AutobuyerState {\r\n constructor(id = null) {\r\n this._id = id;\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get data() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get isUnlocked() { throw new NotImplementedError(); }\r\n\r\n get id() { return this._id; }\r\n\r\n get canTick() {\r\n const isDisabled = !player.auto.autobuyersOn || !this.constructor.isActive;\r\n return this.isActive && !isDisabled && (this.isUnlocked || this.isBought);\r\n }\r\n\r\n get isActive() {\r\n return this.data.isActive;\r\n }\r\n\r\n set isActive(value) {\r\n this.data.isActive = value;\r\n }\r\n\r\n get bulk() {\r\n return 1;\r\n }\r\n\r\n toggle() {\r\n this.isActive = !this.isActive;\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n tick() { throw new NotImplementedError(); }\r\n\r\n // eslint-disable-next-line no-empty-function\r\n reset() { }\r\n\r\n static get entryCount() { return 1; }\r\n\r\n /**\r\n * @abstract\r\n * @returns {string}\r\n */\r\n static get autobuyerGroupName() { throw new NotImplementedError(); }\r\n static get isActive() { return true; }\r\n /** @abstract */\r\n static set isActive(value) { throw new NotImplementedError(); }\r\n\r\n static createAccessor() {\r\n const entryCount = this.entryCount;\r\n /** @type {object[]} */\r\n const zeroIndexed = Array.range(1, entryCount).map(id => new this(id));\r\n const oneIndexed = [null, ...zeroIndexed];\r\n /** @param {number} id */\r\n const accessor = id => oneIndexed[id];\r\n Object.defineProperties(accessor, {\r\n oneIndexed: { get: () => oneIndexed },\r\n zeroIndexed: { get: () => zeroIndexed },\r\n entryCount: { get: () => entryCount },\r\n anyUnlocked: { get: () => zeroIndexed.some(x => x.isUnlocked) },\r\n allUnlocked: { get: () => zeroIndexed.every(x => x.isUnlocked) },\r\n allActive: { get: () => zeroIndexed.every(x => x.isActive) },\r\n groupName: { get: () => this.autobuyerGroupName },\r\n isActive: {\r\n get: () => this.isActive,\r\n set: value => { this.isActive = value; },\r\n },\r\n });\r\n accessor.toggle = () => this.isActive = !this.isActive;\r\n return accessor;\r\n }\r\n}\r\n\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class IntervaledAutobuyerState extends AutobuyerState {\r\n get interval() {\r\n if (this.data.interval instanceof Decimal) {\r\n this.data.interval = this.data.interval.toNumber()\r\n }\r\n return this.data.interval;\r\n }\r\n\r\n get canTick() {\r\n if (this.timeSinceLastTick instanceof Decimal) {\r\n throw new Error(\"mfw timeSinceLastTick is decimal?\")\r\n }\r\n if (this.interval instanceof Decimal) {\r\n throw new Error(\"mfw interval is decimal?\")\r\n }\r\n return super.canTick && this.timeSinceLastTick >= this.interval;\r\n }\r\n\r\n get timeSinceLastTick() {\r\n if (this.data.lastTick instanceof Decimal) {\r\n throw new Error(\"mfw lastTick is decimal?\")\r\n }\r\n return player.records.realTimePlayed - this.data.lastTick;\r\n }\r\n\r\n tick() {\r\n this.data.lastTick = player.records.realTimePlayed;\r\n if (this.data.lastTick instanceof Decimal) {\r\n throw new Error(\"mfw realTimePlayed is decimal?\")\r\n }\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get resetTickOn() { return undefined; }\r\n\r\n resetTick(prestigeEvent) {\r\n if (prestigeEvent >= this.resetTickOn) this.data.lastTick = 0;\r\n }\r\n\r\n // eslint-disable-next-line no-empty-function\r\n reset() { }\r\n}\r\n\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class UpgradeableAutobuyerState extends IntervaledAutobuyerState {\r\n /**\r\n * @abstract\r\n */\r\n get baseInterval() { throw new NotImplementedError(); }\r\n\r\n get cost() {\r\n return this.data.cost;\r\n }\r\n\r\n get interval() {\r\n const interval = this.data.interval;\r\n return BreakInfinityUpgrade.autobuyerSpeed.isBought ? interval / 2 : interval;\r\n }\r\n\r\n get hasMaxedInterval() {\r\n return this.data.interval <= 100;\r\n }\r\n\r\n upgradeInterval(free) {\r\n if (this.hasMaxedInterval) return;\r\n if (!free && !Currency.infinityPoints.purchase(this.cost)) return;\r\n this.data.cost *= 2;\r\n this.data.interval = Math.clampMin(this.data.interval * 0.6, 100);\r\n Achievement(52).tryUnlock();\r\n Achievement(53).tryUnlock();\r\n GameUI.update();\r\n }\r\n\r\n maxIntervalForFree() {\r\n while (!this.hasMaxedInterval) {\r\n this.upgradeInterval(true);\r\n }\r\n }\r\n\r\n reset() {\r\n if (EternityMilestone.keepAutobuyers.isReached || PelleUpgrade.keepAutobuyers.canBeApplied) return;\r\n this.data.interval = this.baseInterval;\r\n this.data.cost = 1;\r\n }\r\n\r\n static createAccessor() {\r\n const accessor = super.createAccessor();\r\n Object.defineProperty(accessor, \"allMaxedInterval\", {\r\n get: () => accessor.zeroIndexed.every(x => x.hasMaxedInterval)\r\n });\r\n Object.defineProperty(accessor, \"hasInstant\", {\r\n get: () => accessor.zeroIndexed.some(x => x.interval < player.options.updateRate)\r\n });\r\n return accessor;\r\n }\r\n}\r\n","import { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class AnnihilationAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.annihilation;\r\n }\r\n\r\n get name() {\r\n return `Annihilation`;\r\n }\r\n\r\n get isUnlocked() {\r\n return SingularityMilestone.annihilationAutobuyer.canBeApplied || player.celestials.ra.permanentMemories.lai65;\r\n }\r\n\r\n get multiplier() {\r\n return this.data.multiplier;\r\n }\r\n\r\n set multiplier(value) {\r\n this.data.multiplier = value;\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n get hasInput() {\r\n return true;\r\n }\r\n\r\n get inputType() {\r\n return \"float\";\r\n }\r\n\r\n get inputEntry() {\r\n return \"multiplier\";\r\n }\r\n\r\n get description() {\r\n return \"Multiplier\";\r\n }\r\n\r\n tick() {\r\n if (Laitela.darkMatterMultGain >= this.multiplier) {\r\n Laitela.annihilate();\r\n }\r\n }\r\n}\r\n","import { DC } from \"../constants\";\r\nimport { PlayerProgress } from \"../player-progress\";\r\n\r\nimport { UpgradeableAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class AntimatterDimensionAutobuyerState extends UpgradeableAutobuyerState {\r\n get tier() {\r\n return this.id;\r\n }\r\n\r\n get name() {\r\n return AntimatterDimension(this.tier).shortDisplayName;\r\n }\r\n\r\n get fullName() {\r\n return `${this.name} Antimatter Dimension`;\r\n }\r\n\r\n get data() {\r\n return player.auto.antimatterDims.all[this.tier - 1];\r\n }\r\n\r\n get baseInterval() {\r\n return Player.defaultStart.auto.antimatterDims.all[this.tier - 1].interval;\r\n }\r\n\r\n get isUnlocked() {\r\n if (PlayerProgress.mendingUnlocked()) return true;\r\n if (Pelle.isDisabled(`antimatterDimAutobuyer${this.tier}`)) return false;\r\n return this.data.isBought || this.canBeUpgraded;\r\n }\r\n\r\n get isBought() {\r\n return this.data.isBought;\r\n }\r\n\r\n get antimatterCost() {\r\n return DC.E10.pow(this.tier - 1).times(DC.E40);\r\n }\r\n\r\n get canBeBought() {\r\n return !Pelle.isDisabled(`antimatterDimAutobuyer${this.tier}`);\r\n }\r\n\r\n get canBeUpgraded() {\r\n return NormalChallenge(this.tier).isCompleted || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get disabledByContinuum() {\r\n return Laitela.continuumActive;\r\n }\r\n\r\n get bulk() {\r\n // Use 1e100 to avoid issues with Infinity.\r\n return this.hasUnlimitedBulk ? 1e100 : Math.clampMax(this.data.bulk, this.bulkCap);\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return Achievement(61).isUnlocked;\r\n }\r\n\r\n get bulkCap() {\r\n return 512;\r\n }\r\n\r\n get hasMaxedBulk() {\r\n return this.bulk >= this.bulkCap;\r\n }\r\n\r\n get mode() {\r\n return this.data.mode;\r\n }\r\n\r\n set mode(value) {\r\n this.data.mode = value;\r\n }\r\n\r\n get canUnlockSlowVersion() {\r\n return player.records.thisEternity.maxAM.gte(this.antimatterCost);\r\n }\r\n\r\n toggleMode() {\r\n this.mode = [\r\n AUTOBUYER_MODE.BUY_SINGLE,\r\n AUTOBUYER_MODE.BUY_10\r\n ]\r\n .nextSibling(this.mode);\r\n }\r\n\r\n // We don't want to directly call super.canTick here because the game logic works really weirdly in terms of\r\n // interactions between individual and group AD autobuyers. The UI can change and certain settings can become\r\n // unmodifiable in some conditions. This is basically the lowest-effort solution to support legacy behavior\r\n // because the proper alternatve of an AD autobuyer refactor to untangle this mess is likely not worth the effort\r\n get canTick() {\r\n // AD autobuyer-specific logic; if the UI is collapsed then we are unable to toggle groupSetting.\r\n // In terms of UX for this case it makes the most sense to ignore it and pretend it's true\r\n const settingConfig = player.auto.antimatterDims;\r\n const individualSetting = settingConfig.all[this.tier - 1];\r\n const groupSetting = settingConfig.isActive;\r\n const thisSetting = individualSetting && (Autobuyer.antimatterDimension.collapseDisplay ? groupSetting : true);\r\n\r\n // General availability\r\n const dim = AntimatterDimension(this.tier);\r\n const hasAutobuyer = dim.isAvailableForPurchase && dim.isAffordable;\r\n\r\n // From IntervaledAutobuyerState.canTick\r\n const intervalTick = this.timeSinceLastTick >= this.interval;\r\n\r\n // From AutobuyerState.canTick (ignores this.constructor.isActive because that's accounted for in thisSetting)\r\n const autoTick = player.auto.autobuyersOn && this.isActive && (this.isUnlocked || this.isBought);\r\n\r\n return thisSetting && hasAutobuyer && intervalTick && autoTick;\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n const tier = this.tier;\r\n switch (this.mode) {\r\n case AUTOBUYER_MODE.BUY_SINGLE:\r\n buyOneDimension(tier);\r\n break;\r\n case AUTOBUYER_MODE.BUY_10:\r\n buyMaxDimension(tier, this.bulk);\r\n break;\r\n }\r\n }\r\n\r\n upgradeBulk() {\r\n if (this.hasMaxedBulk) return;\r\n if (!Currency.infinityPoints.purchase(this.cost)) return;\r\n this.data.bulk = Math.clampMax(this.bulk * 2, this.bulkCap);\r\n this.data.cost = Math.ceil(2.4 * this.cost);\r\n Achievement(61).tryUnlock();\r\n GameUI.update();\r\n }\r\n\r\n purchase() {\r\n if (!this.canUnlockSlowVersion) return;\r\n this.data.isBought = true;\r\n }\r\n\r\n get resetTickOn() {\r\n return Perk.antimatterNoReset.canBeApplied ? PRESTIGE_EVENT.ANTIMATTER_GALAXY : PRESTIGE_EVENT.DIMENSION_BOOST;\r\n }\r\n\r\n reset() {\r\n super.reset();\r\n if (EternityMilestone.keepAutobuyers.isReached || PelleUpgrade.keepAutobuyers.canBeApplied) return;\r\n this.data.isUnlocked = false;\r\n this.data.isBought = false;\r\n this.data.bulk = 1;\r\n TabNotification.newAutobuyer.clearTrigger();\r\n }\r\n\r\n static get entryCount() { return 8; }\r\n static get autobuyerGroupName() { return \"Antimatter Dimension\"; }\r\n\r\n // These are toggled on and off from the group autobuyer checkbox\r\n static get isActive() { return player.auto.antimatterDims.isActive; }\r\n static set isActive(value) { player.auto.antimatterDims.isActive = value; }\r\n\r\n static createAccessor() {\r\n const accessor = super.createAccessor();\r\n Object.defineProperties(accessor, {\r\n allBought: { get: () => accessor.zeroIndexed.every(x => x.isBought) },\r\n // We can get away with this since allUnlimitedBulk is the same for all AD autos\r\n allUnlimitedBulk: { get: () => accessor.zeroIndexed[0].hasUnlimitedBulk },\r\n bulkCap: { get: () => accessor.zeroIndexed[0].bulkCap },\r\n collapseDisplay: { get: () => accessor.allMaxedInterval && accessor.allUnlocked && accessor.allUnlimitedBulk }\r\n });\r\n return accessor;\r\n }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { UpgradeableAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class BigCrunchAutobuyerState extends UpgradeableAutobuyerState {\r\n get data() {\r\n return player.auto.bigCrunch;\r\n }\r\n\r\n get name() {\r\n return `Infinity`;\r\n }\r\n\r\n get isUnlocked() {\r\n if (PlayerProgress.mendingUnlocked()) return true;\r\n return Pelle.isDoomed\r\n ? PelleStrikes.infinity.hasStrike\r\n : this.canBeUpgraded;\r\n }\r\n\r\n get canBeUpgraded() {\r\n return NormalChallenge(12).isCompleted || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get baseInterval() {\r\n return Player.defaultStart.auto.bigCrunch.interval;\r\n }\r\n\r\n get mode() {\r\n return this.data.mode;\r\n }\r\n\r\n set mode(value) {\r\n this.data.mode = value;\r\n }\r\n\r\n get hasAdditionalModes() {\r\n return EternityMilestone.bigCrunchModes.isReached;\r\n }\r\n\r\n get increaseWithMult() {\r\n return this.data.increaseWithMult;\r\n }\r\n\r\n set increaseWithMult(value) {\r\n this.data.increaseWithMult = value;\r\n }\r\n\r\n get amount() {\r\n return this.data.amount;\r\n }\r\n\r\n // This is unused mechanically, but should be zero to suppress the \"Current bulk:\" text\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n set amount(value) {\r\n this.data.amount = value;\r\n }\r\n\r\n get time() {\r\n return this.data.time;\r\n }\r\n\r\n set time(value) {\r\n this.data.time = new Decimal(value);\r\n }\r\n\r\n get xHighest() {\r\n return this.data.xHighest;\r\n }\r\n\r\n set xHighest(value) {\r\n this.data.xHighest = value;\r\n }\r\n\r\n autoInfinitiesAvailable(considerMilestoneReached) {\r\n return (considerMilestoneReached || EternityMilestone.autoInfinities.isReached) &&\r\n !EternityChallenge(4).isRunning && !EternityChallenge(12).isRunning && !Player.isInAntimatterChallenge &&\r\n player.auto.autobuyersOn && this.data.isActive &&\r\n !Autobuyer.eternity.isActive && this.mode === AUTO_CRUNCH_MODE.TIME && this.time.lt(60) &&\r\n !Autobuyer.eternity.autoEternitiesAvailable();\r\n }\r\n\r\n upgradeInterval(free) {\r\n super.upgradeInterval(free);\r\n TabNotification.breakInfinity.tryTrigger();\r\n }\r\n\r\n bumpAmount(mult) {\r\n if (this.isUnlocked && this.increaseWithMult) {\r\n this.amount = this.amount.times(mult);\r\n }\r\n }\r\n\r\n get canTick() {\r\n return Player.canCrunch && super.canTick;\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.ETERNITY;\r\n }\r\n\r\n get highestPrevPrestige() {\r\n return player.records.thisEternity.maxIP;\r\n }\r\n\r\n get timeToNextTick() {\r\n return Math.clampMin(this.time - Time.thisInfinityRealTime.totalSeconds.toNumber(), 0);\r\n }\r\n\r\n get willInfinity() {\r\n if (!player.break || Player.isInAntimatterChallenge) return true;\r\n\r\n switch (this.mode) {\r\n case AUTO_CRUNCH_MODE.AMOUNT:\r\n return gainedInfinityPoints().gte(this.amount);\r\n case AUTO_CRUNCH_MODE.TIME:\r\n return Time.thisInfinityRealTime.totalSeconds.gt(this.time);\r\n case AUTO_CRUNCH_MODE.X_HIGHEST:\r\n default:\r\n return gainedInfinityPoints().gte(this.highestPrevPrestige.times(this.xHighest));\r\n }\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n if (this.willInfinity) bigCrunchResetRequest(true);\r\n }\r\n\r\n reset() {\r\n super.reset();\r\n if (EternityMilestone.bigCrunchModes.isReached) return;\r\n this.mode = AUTO_CRUNCH_MODE.AMOUNT;\r\n }\r\n}\r\n","import { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class BlackHolePowerAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.blackHolePower.all[this.id - 1];\r\n }\r\n\r\n get name() {\r\n return `Black Hole ${this.id} Power`;\r\n }\r\n\r\n get isUnlocked() {\r\n return Ra.unlocks.blackHolePowerAutobuyers.canBeApplied || MendingMilestone.three.isReached;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n const bh = BlackHole(this.id);\r\n while (Currency.realityMachines.gte(bh.powerUpgrade.cost)) bh.powerUpgrade.purchase();\r\n }\r\n\r\n static get entryCount() { return 2; }\r\n static get autobuyerGroupName() { return \"Black Hole Power\"; }\r\n static get isActive() { return player.auto.blackHolePower.isActive; }\r\n static set isActive(value) { player.auto.blackHolePower.isActive = value; }\r\n}\r\n","import { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class ExpoBlackHolePowerAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.expoBlackHolePower.all[this.id - 1];\r\n }\r\n\r\n get name() {\r\n return `Exponent Black Hole ${this.id} Power`;\r\n }\r\n\r\n get isUnlocked() {\r\n return WarpUpgrade(7).isBought;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n const bh = ExpoBlackHole(this.id);\r\n while (Currency.imaginaryMachines.gte(bh.powerUpgrade.cost)) bh.powerUpgrade.purchase();\r\n }\r\n\r\n static get entryCount() { return 1; }\r\n static get autobuyerGroupName() { return \"Exponent Black Hole Power\"; }\r\n static get isActive() { return player.auto.expoBlackHolePower.isActive; }\r\n static set isActive(value) { player.auto.expoBlackHolePower.isActive = value; }\r\n}\r\n","import { IntervaledAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class DarkMatterDimensionAscensionAutobuyerState extends IntervaledAutobuyerState {\r\n get data() {\r\n return player.auto.ascension;\r\n }\r\n\r\n get name() {\r\n return `Dark Matter Dimension Ascension`;\r\n }\r\n\r\n get isUnlocked() {\r\n return SingularityMilestone.ascensionAutobuyers.canBeApplied || player.celestials.ra.permanentMemories.lai50;\r\n }\r\n\r\n get interval() {\r\n return 1000 * SingularityMilestone.darkAutobuyerSpeed.effectValue;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n let x = SingularityMilestone.darkDimensionAutobuyers.effectValue;\r\n if (player.celestials.ra.permanentMemories.lai50){\r\n x = 8;\r\n }\r\n for (let i = 1; i <= x; i++) {\r\n DarkMatterDimension(i).ascend();\r\n }\r\n }\r\n}\r\n","import { IntervaledAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class DarkMatterDimensionAutobuyerState extends IntervaledAutobuyerState {\r\n get data() {\r\n return player.auto.darkMatterDims;\r\n }\r\n\r\n get name() {\r\n return `Dark Matter Dimensions`;\r\n }\r\n\r\n get isUnlocked() {\r\n return SingularityMilestone.darkDimensionAutobuyers.canBeApplied || player.celestials.ra.permanentMemories.lai50;\r\n }\r\n\r\n get interval() {\r\n return 1000 * SingularityMilestone.darkAutobuyerSpeed.effectValue;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n let x = SingularityMilestone.darkDimensionAutobuyers.effectValue;\r\n if (player.celestials.ra.permanentMemories.lai50){\r\n x = 8;\r\n }\r\n Laitela.maxAllDMDimensions(x);\r\n }\r\n}\r\n","import { DC } from \"./constants\";\r\nimport { Currency } from \"./currency\";\r\nimport { Glyphs } from \"./globals\";\r\nimport { MendingUpgrade, MendingUpgrades } from \"./mending-upgrades\";\r\nimport { PlayerProgress } from \"./player-progress\";\r\n\r\n/**\r\n * Object that manages the selection of glyphs offered to the player\r\n */\r\nexport const GlyphSelection = {\r\n glyphs: [],\r\n realityProps: undefined,\r\n\r\n get active() {\r\n return Modal.reality.isOpen;\r\n },\r\n\r\n get choiceCount() {\r\n return Effects.max(1, Perk.firstPerk) *\r\n Ra.unlocks.extraGlyphChoicesAndRelicShardRarityAlwaysMax.effectOrDefault(1);\r\n },\r\n\r\n glyphUncommonGuarantee(glyphList, rng) {\r\n // lmao this should be disabled in Corruption lmfao--sxy\r\n if (player.mending.corruptionChallenge.corruptedMend) return;\r\n // If no choices are rare enough and the player has the uncommon glyph perk, randomly generate\r\n // rarities until the threshold is passed and then assign that rarity to a random glyph\r\n const strengthThreshold = 1.5;\r\n // Do RNG stuff now so getting a strength-boosting upgrade in this reality\r\n // can't influence the RNG of the next one.\r\n const random = rng.uniform();\r\n let newStrength;\r\n do {\r\n newStrength = GlyphGenerator.randomStrength(rng);\r\n } while (newStrength < strengthThreshold);\r\n if (glyphList.some(e => e.strength >= strengthThreshold)) return;\r\n glyphList[Math.floor(random * glyphList.length)].strength = newStrength;\r\n },\r\n\r\n glyphList(countIn, level, config) {\r\n // Always generate at least 4 choices so that the RNG never diverges based on\r\n // the 4-choice perk.\r\n const count = Math.clampMin(countIn, 4);\r\n let glyphList = [];\r\n const rng = config.rng || new GlyphGenerator.RealGlyphRNG();\r\n const types = [];\r\n\r\n // To attempt to reduce RNG swing, we follow slightly different logic early on in order\r\n // to spread out types and effects more equally for the first few realities. Types and\r\n // effects are spread out over the choices of each consecutive group of 5 realities\r\n if (player.realities <= 5 * GlyphGenerator.uniformityGroups) {\r\n glyphList = GlyphGenerator.uniformGlyphs(level, rng, player.realities);\r\n } else {\r\n for (let out = 0; out < count; ++out) {\r\n types.push(GlyphGenerator.randomType(rng, types));\r\n }\r\n for (let out = 0; out < count; ++out) {\r\n glyphList.push(GlyphGenerator.randomGlyph(level, rng, types[out]));\r\n }\r\n }\r\n\r\n this.glyphUncommonGuarantee(glyphList, rng);\r\n // If we generated extra choices due to always generating at least 4 choices,\r\n // we remove the extra choices here.\r\n glyphList = glyphList.slice(0, countIn);\r\n // If we passed an explicit RNG in, we assume it'll get finalized later.\r\n if (!config.rng && config.isChoosingGlyph) {\r\n rng.finalize();\r\n }\r\n return glyphList;\r\n },\r\n\r\n generate(count, level = gainedGlyphLevel()) {\r\n this.glyphs = this.glyphList(count, level, { isChoosingGlyph: true });\r\n },\r\n\r\n update(level) {\r\n if (this.realityProps === undefined) return;\r\n if (level.rawLevel > this.realityProps.gainedGlyphLevel.rawLevel) {\r\n this.realityProps.gainedGlyphLevel.rawLevel = level.rawLevel;\r\n for (const glyph of this.glyphs) glyph.rawLevel = level.rawLevel;\r\n }\r\n if (level.actualLevel > this.realityProps.gainedGlyphLevel.actualLevel) {\r\n this.realityProps.gainedGlyphLevel.actualLevel = level.actualLevel;\r\n for (const glyph of this.glyphs) {\r\n glyph.level = level.actualLevel;\r\n calculateGlyph(glyph);\r\n }\r\n }\r\n },\r\n\r\n select(glyphID, sacrifice) {\r\n const chosenGlyph = this.glyphs[glyphID];\r\n if (sacrifice) {\r\n GlyphSacrificeHandler.removeGlyph(chosenGlyph, true);\r\n } else if (GameCache.glyphInventorySpace.value > 0) {\r\n Glyphs.addToInventory(chosenGlyph);\r\n } else {\r\n AutoGlyphProcessor.getRidOfGlyph(chosenGlyph);\r\n }\r\n this.glyphs = [];\r\n this.realityProps = undefined;\r\n }\r\n};\r\n\r\nexport function isRealityAvailable() {\r\n return player.records.thisReality.maxEP.exponent >= 4000 && TimeStudy.reality.isBought;\r\n}\r\n\r\n// Returns the number of \"extra\" realities from stored real time or Multiversal effects, should be called\r\n// with false for checking and true for actual usage, and only \"used\" once per reality.\r\nexport function simulatedRealityCount(advancePartSimCounters) {\r\n const amplifiedSim = Enslaved.boostReality ? Enslaved.realityBoostRatio - 1 : 0;\r\n const multiversalSim = AlchemyResource.multiversal.effectValue;\r\n const simCount = (multiversalSim + 1) * (amplifiedSim + 1) + player.partSimulatedReality - 1 + (MendingUpgrade(13).isBought ? 2 : 0);\r\n if (advancePartSimCounters) {\r\n player.partSimulatedReality = simCount - Math.floor(simCount);\r\n }\r\n return Math.floor(simCount);\r\n}\r\n\r\n/**\r\n * Triggered when the user clicks the reality button. This triggers the glyph selection\r\n * process, if applicable. Auto sacrifice is never triggered.\r\n */\r\nexport function requestManualReality() {\r\n if (GlyphSelection.active || !isRealityAvailable()) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n if (player.options.confirmations.glyphSelection || ui.view.shiftDown) {\r\n Modal.reality.show();\r\n return;\r\n }\r\n if (GameCache.glyphInventorySpace.value === 0) {\r\n Modal.message.show(\"No available inventory space; free up space by shift-clicking Glyphs to get rid of them.\",\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n return;\r\n }\r\n startManualReality(false);\r\n}\r\n\r\nexport function startManualReality(sacrifice, glyphID) {\r\n if (player.options.animations.reality) {\r\n runRealityAnimation();\r\n setTimeout(processManualReality, 3000, sacrifice, glyphID);\r\n } else {\r\n processManualReality(sacrifice, glyphID);\r\n }\r\n}\r\n\r\nexport function processManualReality(sacrifice, glyphID) {\r\n if (!isRealityAvailable()) return;\r\n\r\n if (player.realities === 0 && !PlayerProgress.mendingUnlocked()) {\r\n // If this is our first Reality, lock in the initial seed and then give the companion and starting glyphs\r\n player.reality.seed = player.reality.initialSeed;\r\n Glyphs.addToInventory(GlyphGenerator.startingGlyph(gainedGlyphLevel()));\r\n Glyphs.addToInventory(GlyphGenerator.companionGlyph(Currency.eternityPoints.value));\r\n } else if (Perk.firstPerk.isEffectActive) {\r\n // If we have firstPerk, we pick from 4+ glyphs, and glyph generation functions as normal.\r\n GlyphSelection.generate(GlyphSelection.choiceCount);\r\n\r\n // If we don't actually have a chosen ID, that means a manual reality was done with the modal disabled or the\r\n // modal showed up and the player decided not to pick anything\r\n if (glyphID === undefined) {\r\n if (EffarigUnlock.glyphFilter.isUnlocked) {\r\n // Note that this code path is eventually followed regardless of the glyph selection popping up - if it did, we\r\n // pass through the option selected there; if it didn't, then we apply the filter. If we don't handle it this\r\n // way, manual realities without the modal will never sacrifice and may give bad glyphs you don't care about\r\n const newGlyph = AutoGlyphProcessor.pick(GlyphSelection.glyphs);\r\n const shouldSacrifice = player.options.confirmations.glyphSelection\r\n ? sacrifice\r\n : !AutoGlyphProcessor.wouldKeep(newGlyph);\r\n if (shouldSacrifice || GameCache.glyphInventorySpace.value === 0) {\r\n AutoGlyphProcessor.getRidOfGlyph(newGlyph);\r\n } else {\r\n Glyphs.addToInventory(newGlyph);\r\n }\r\n } else {\r\n // This doesn't use the seeded RNG, but this isn't exploitable since the player can just reenable\r\n // the modal and choose themselves anyway. The alternative is adding an extra seeded RNG call\r\n // everywhere else to ensure RNG consistency, which is probably undesirable\r\n GlyphSelection.select(Math.floor(Math.random() * GlyphSelection.choiceCount), sacrifice);\r\n }\r\n } else {\r\n // In this case, we already picked a choice in the modal\r\n GlyphSelection.select(glyphID, sacrifice);\r\n }\r\n } else {\r\n // We can't get a random glyph directly here because that makes the RNG depend on when you get the first\r\n // perk. The internals of generate() still advance the seed properly as if we actually had a choice of\r\n // more than one glyph, but always selecting the first glyph results in highly biased types when the\r\n // uniformity code is still active. Therefore, we choose a glyph randomly (but deterministically) instead\r\n GlyphSelection.generate(1);\r\n const lexIndex = player.realities * ((player.reality.initialSeed % 5) + 3);\r\n GlyphSelection.select(permutationIndex(4, lexIndex)[0], sacrifice);\r\n }\r\n\r\n // We've already gotten a glyph at this point, so the second value has to be true.\r\n // If we haven't sacrificed, we need to sort and purge glyphs, as applicable.\r\n beginProcessReality(getRealityProps(false, true));\r\n\r\n // Should be here so that the perk graphics update even when we're on the perk subtab, while also keeping its\r\n // relatively expensive operations off of the reality reset hot path for when realities are significantly faster\r\n PerkNetwork.updatePerkColor();\r\n}\r\n\r\nexport function runRealityAnimation() {\r\n document.getElementById(\"ui\").style.userSelect = \"none\";\r\n document.getElementById(\"ui\").style.animation = \"a-realize 10s 1\";\r\n document.getElementById(\"realityanimbg\").style.animation = \"a-realizebg 10s 1\";\r\n document.getElementById(\"realityanimbg\").style.display = \"block\";\r\n if (Theme.current().isDark()) document.getElementById(\"realityanimbg\").style.filter = \"invert(1)\";\r\n else document.getElementById(\"realityanimbg\").style.filter = \"\";\r\n setTimeout(() => {\r\n document.getElementById(\"realityanimbg\").play();\r\n document.getElementById(\"realityanimbg\").currentTime = 0;\r\n document.getElementById(\"realityanimbg\").play();\r\n }, 2000);\r\n setTimeout(() => {\r\n document.getElementById(\"ui\").style.userSelect = \"auto\";\r\n document.getElementById(\"ui\").style.animation = \"\";\r\n document.getElementById(\"realityanimbg\").style.animation = \"\";\r\n document.getElementById(\"realityanimbg\").style.display = \"none\";\r\n }, 10000);\r\n}\r\n\r\nfunction processAutoGlyph(gainedLevel, rng) {\r\n let newGlyph;\r\n // Always generate a list of glyphs to avoid RNG diverging based on whether\r\n // a reality is done automatically.\r\n const glyphs = GlyphSelection.glyphList(GlyphSelection.choiceCount, gainedLevel, { rng });\r\n let keepGlyph;\r\n if (EffarigUnlock.glyphFilter.isUnlocked) {\r\n newGlyph = AutoGlyphProcessor.pick(glyphs);\r\n keepGlyph = AutoGlyphProcessor.wouldKeep(newGlyph);\r\n } else {\r\n // It really doesn't matter which we pick since they're random,\r\n // so we might as well take the first one.\r\n newGlyph = glyphs[0];\r\n keepGlyph = true;\r\n }\r\n if (keepGlyph && GameCache.glyphInventorySpace.value > 0) {\r\n Glyphs.addToInventory(newGlyph);\r\n } else {\r\n AutoGlyphProcessor.getRidOfGlyph(newGlyph);\r\n }\r\n}\r\n\r\nexport function getRealityProps(isReset, alreadyGotGlyph = false) {\r\n const defaults = {\r\n glyphUndo: false,\r\n restoreCelestialState: false,\r\n };\r\n if (isReset) return Object.assign(defaults, {\r\n reset: true,\r\n });\r\n return Object.assign(defaults, {\r\n reset: false,\r\n gainedRM: MachineHandler.gainedRealityMachines,\r\n gainedGlyphLevel: gainedGlyphLevel(),\r\n gainedShards: Effarig.shardsGained,\r\n simulatedRealities: simulatedRealityCount(true),\r\n alreadyGotGlyph,\r\n });\r\n}\r\n\r\nexport function autoReality() {\r\n if (GlyphSelection.active || !isRealityAvailable()) return;\r\n beginProcessReality(getRealityProps(false, false));\r\n}\r\n\r\nfunction updateRealityRecords(realityProps) {\r\n const thisRunRMmin = realityProps.gainedRM.dividedBy(Decimal.clampMin(0.0005, Time.thisRealityRealTime.totalMinutes).toNumber());\r\n if (player.records.bestReality.RMmin.lt(thisRunRMmin)) {\r\n player.records.bestReality.RMmin = thisRunRMmin;\r\n player.records.bestReality.RMminSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n if (player.records.bestReality.glyphLevel < realityProps.gainedGlyphLevel.actualLevel) {\r\n player.records.bestReality.glyphLevel = realityProps.gainedGlyphLevel.actualLevel;\r\n player.records.bestReality.glyphLevelSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n player.records.bestReality.time = Decimal.min(player.records.thisReality.time, player.records.bestReality.time);\r\n if (player.records.thisReality.realTime < player.records.bestReality.realTime) {\r\n player.records.bestReality.realTime = player.records.thisReality.realTime;\r\n player.records.bestReality.speedSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n}\r\n\r\nfunction giveRealityRewards(realityProps) {\r\n const multiplier = realityProps.simulatedRealities + 1;\r\n const realityAndPPMultiplier = (multiplier + (MendingMilestone.two.isReached ? multiplier : binomialDistribution(multiplier, Achievement(154).effectOrDefault(0))));\r\n const gainedRM = Currency.realityMachines.gte(MachineHandler.hardcapRM) ? DC.D0 : realityProps.gainedRM;\r\n Currency.realityMachines.add(gainedRM.times(multiplier));\r\n updateRealityRecords(realityProps);\r\n addRealityTime(\r\n player.records.thisReality.time, player.records.thisReality.realTime, gainedRM,\r\n realityProps.gainedGlyphLevel.actualLevel, realityAndPPMultiplier, multiplier,\r\n MachineHandler.projectedIMCap);\r\n Currency.realities.add(realityAndPPMultiplier * (MendingMilestone.one.isReached ? 5 : 1));\r\n if(MendingMilestone.one.isReached){\r\n Currency.perkPoints.add(5 * realityAndPPMultiplier);\r\n }\r\n else{\r\n Currency.perkPoints.add(realityAndPPMultiplier);\r\n }\r\n if (TeresaUnlocks.effarig.canBeApplied) {\r\n Currency.relicShards.add(realityProps.gainedShards.times(multiplier));\r\n }\r\n\r\n if (multiplier > 1 && Enslaved.boostReality) {\r\n // Real time amplification is capped at 1 second of reality time; if it's faster then using all time at once would\r\n // be wasteful. Being faster than 1 second will only use as much time as needed to get the 1-second factor instead.\r\n if (Time.thisRealityRealTime.totalSeconds.lte(1)) {\r\n player.celestials.enslaved.storedReal *= 1 - Time.thisRealityRealTime.totalSeconds;\r\n } else {\r\n player.celestials.enslaved.storedReal = 0;\r\n }\r\n Enslaved.boostReality = false;\r\n }\r\n\r\n if (Teresa.isRunning) {\r\n const current = Teresa.runRewardMultiplier;\r\n const newMultiplier = Teresa.rewardMultiplier(player.antimatter);\r\n const isHigher = newMultiplier > current;\r\n const modalText = `You have completed Teresa's Reality! ${isHigher\r\n ? `Since you gained more Antimatter, you increased your\r\n Glyph Sacrifice multiplier from ${format(current, 2, 2)} to ${format(newMultiplier, 2, 2)}`\r\n : `You did not gain more Antimatter during this run, so the Glyph Sacrifice multiplier\r\n from Teresa did not increase`}.`;\r\n Modal.message.show(modalText, {}, 2);\r\n if (Currency.antimatter.gt(player.celestials.teresa.bestRunAM)) {\r\n player.celestials.teresa.bestRunAM = Currency.antimatter.value;\r\n player.celestials.teresa.bestAMSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n\r\n // Encode iM values into the RM variable as e10000 * iM in order to only require one prop\r\n let machineRecord;\r\n if (Currency.imaginaryMachines.value === 0) machineRecord = player.reality.maxRM;\r\n else machineRecord = DC.E10000.times(Currency.imaginaryMachines.value);\r\n player.celestials.teresa.lastRepeatedMachines = player.celestials.teresa.lastRepeatedMachines\r\n .clampMin(machineRecord);\r\n }\r\n Teresa.quotes.completeReality.show();\r\n }\r\n\r\n if (Effarig.isRunning && !EffarigUnlock.reality.isUnlocked) {\r\n EffarigUnlock.reality.unlock();\r\n EffarigUnlock.eternity.unlock();\r\n EffarigUnlock.infinity.unlock();\r\n Effarig.quotes.completeReality.show();\r\n }\r\n\r\n if (Enslaved.isRunning) Enslaved.completeRun();\r\n\r\n if (V.isRunning) V.quotes.realityComplete.show();\r\n}\r\n\r\n// Due to simulated realities taking a long time in late game, this function might not immediately\r\n// reality, but start an update loop that shows a progress bar.\r\nexport function beginProcessReality(realityProps) {\r\n if (realityProps.reset) {\r\n finishProcessReality(realityProps);\r\n return;\r\n }\r\n EventHub.dispatch(GAME_EVENT.REALITY_RESET_BEFORE);\r\n\r\n // Save a few important props before resetting all resources. We need to do this before processing glyphs so\r\n // that we don't try to reality again while async is running, but we need to retain RNG and level or else\r\n // glyphs will be generated with values based on post-reset values\r\n const glyphsToProcess = realityProps.simulatedRealities + (realityProps.alreadyGotGlyph ? 0 : 1);\r\n const rng = GlyphGenerator.getRNG(false);\r\n const glyphLevel = gainedGlyphLevel();\r\n finishProcessReality(realityProps);\r\n\r\n // If we have less than a certain amount of simulated realities, then we just shortcut the heavier async and\r\n // sampling code in order to just directly give all the glyphs. The later code is a fixed amount of overhead\r\n // which is large enough that quick realities can cause it to softlock the game due to lag on slower devices\r\n // Note: This is mostly a copy-paste of a code block in processManualReality() with slight modifications\r\n if (glyphsToProcess < 100) {\r\n for (let glyphNum = 0; glyphNum < glyphsToProcess; glyphNum++) {\r\n GlyphSelection.generate(GlyphSelection.choiceCount, glyphLevel);\r\n if (EffarigUnlock.glyphFilter.isUnlocked) {\r\n const glyphChoices = GlyphSelection.glyphList(GlyphSelection.choiceCount,\r\n realityProps.gainedGlyphLevel, { rng });\r\n const newGlyph = AutoGlyphProcessor.pick(glyphChoices);\r\n if (!AutoGlyphProcessor.wouldKeep(newGlyph) || GameCache.glyphInventorySpace.value === 0) {\r\n AutoGlyphProcessor.getRidOfGlyph(newGlyph);\r\n } else {\r\n Glyphs.addToInventory(newGlyph);\r\n }\r\n } else {\r\n GlyphSelection.select(Math.floor(Math.random() * GlyphSelection.choiceCount), false);\r\n }\r\n }\r\n Glyphs.processAutoEquipAfterReality();\r\n Glyphs.processSortingAfterReality();\r\n return;\r\n }\r\n\r\n // We need these variables in this scope in order to modify the behavior of the Async loop while it's running\r\n const progress = {};\r\n let fastToggle = false;\r\n // There's a potential rabbit hole of making the sample ever more accurate to the situation of actually generating\r\n // all the glyphs, but here we make some compromises which are probably mostly accurate in most cases by considering\r\n // just the distribution of sacrifice values between types and nothing else beyond that\r\n const glyphSample = {\r\n toGenerate: 0,\r\n // We track each glyph type separately; there is the possibility for the glyph filter to be configured in such a\r\n // way that some types get significantly more or less sacrifice value than the others\r\n sampleStats: generatedTypes.map(t => ({\r\n type: t,\r\n count: DC.D0,\r\n totalSacrifice: DC.D0,\r\n // This is (variance * sample count), which is used to get standard deviation later on and makes the math nicer\r\n varProdSacrifice: DC.D0,\r\n })),\r\n totalStats: {\r\n count: DC.D0,\r\n totalSacrifice: DC.D0,\r\n varProdSacrifice: DC.D0,\r\n },\r\n };\r\n\r\n // Incrementally calculate mean and variance in a way that doesn't require storing a list of entries\r\n // See https://datagenetics.com/blog/november22017/index.html for derivation\r\n const addToStats = (stats, value) => {\r\n const oldMean = stats.totalSacrifice.div(stats.count);\r\n stats.totalSacrifice = stat.totalSacrifice.add(value);\r\n stats.count = stats.count.add(1);\r\n const newMean = stats.totalSacrifice.div(stats.count);\r\n // Mathematically this is zero on the first iteration, but oldMean is NaN due to division by zero\r\n if (stats.count.neq(1)) stats.varProdSacrifice = stats.varProdSacrifice.add(value.sub(oldMean)) * (value.sub(newMean));\r\n };\r\n\r\n // Helper function for pulling a random sacrifice value from the sample we gathered\r\n const sampleFromStats = (stats, glyphsToGenerate) => {\r\n if (stats.count === 0) return 0;\r\n const mean = stats.totalSacrifice / stats.count;\r\n const stdev = Math.sqrt(stats.varProdSacrifice / stats.count);\r\n return normalDistribution(mean * glyphsToGenerate, stdev * Math.sqrt(glyphsToGenerate));\r\n };\r\n\r\n // The function we run in the Async loop is either the expected \"generate and filter all glyphs normally\"\r\n // behavior (fastToggle === false) or a function that takes a representative sample of 10000 glyphs and\r\n // analyzes them in order to extrapolate how much sacrifice value to give instead of actually generating\r\n // and giving any glyphs because the player asked for faster performance (fastToggle === true)\r\n const glyphFunction = () => {\r\n if (fastToggle) {\r\n // Generate glyph choices and subject the choices to the filter in order to choose a glyph for the sampling\r\n // process - we can't skip the filter even for the sampling because in most cases the filter will affect\r\n // the actual result (which is arguably the point of the filter)\r\n const glyphChoices = GlyphSelection.glyphList(GlyphSelection.choiceCount,\r\n realityProps.gainedGlyphLevel, { rng });\r\n const sampleGlyph = AutoGlyphProcessor.pick(glyphChoices);\r\n const sacGain = GlyphSacrificeHandler.glyphSacrificeGain(sampleGlyph);\r\n\r\n // Code and math later on is a lot simpler if we add to both a type-specific stat object and a total stats\r\n // object right here instead of attempting to combine the types into a total later on\r\n const thisTypeStats = glyphSample.sampleStats.find(s => s.type === sampleGlyph.type);\r\n addToStats(thisTypeStats, sacGain);\r\n addToStats(glyphSample.totalStats, sacGain);\r\n } else {\r\n processAutoGlyph(realityProps.gainedGlyphLevel, rng);\r\n // We'd normally run processSortingAfterReality() here, but also sorting after every glyph is extremely intensive\r\n // at this scale and largely useless if autoClean is getting run every time too\r\n if (VUnlocks.autoAutoClean.canBeApplied && player.reality.autoAutoClean) Glyphs.autoClean();\r\n }\r\n };\r\n const glyphsToSample = Math.min(glyphsToProcess, 10000);\r\n Async.run(glyphFunction,\r\n glyphsToProcess,\r\n {\r\n batchSize: 100,\r\n maxTime: 33,\r\n sleepTime: 1,\r\n asyncEntry: doneSoFar => {\r\n GameIntervals.stop();\r\n ui.$viewModel.modal.progressBar = {\r\n label: \"Simulating Amplified Reality\",\r\n info: `The game is currently calculating all the resources you would gain from repeating the\r\n Reality you just completed ${formatInt(glyphsToProcess)} more times. Pressing \"Quick Glyphs\" with\r\n more than ${formatInt(glyphsToSample)} Glyphs remaining will speed up the calculation by automatically\r\n sacrificing all the remaining Glyphs you would get. Pressing \"Skip Glyphs\" will ignore all resources\r\n related to Glyphs and stop the simulation after giving all other resources.\r\n ${Ra.unlocks.unlockGlyphAlchemy.canBeApplied ? `Pressing either button to speed up\r\n simulation will not update any resources within Glyph Alchemy.` : \"\"}`,\r\n progressName: \"Realities\",\r\n current: doneSoFar,\r\n max: glyphsToProcess,\r\n startTime: Date.now(),\r\n buttons: [{\r\n text: \"Quick Glyphs\",\r\n condition: (current, max) => max - current > glyphsToSample,\r\n click: () => {\r\n // This changes the simulating function to one that just takes a representative sample of 10000 random\r\n // glyphs to determine what sacrifice totals to give (this is defined above)\r\n fastToggle = true;\r\n glyphSample.toGenerate = progress.remaining;\r\n\r\n // We only simulate a smaller set of glyphs for a sample, but that still might take some time to do\r\n progress.maxIter -= progress.remaining - glyphsToSample;\r\n progress.remaining = glyphsToSample;\r\n // We update the progress bar max data (remaining will update automatically).\r\n ui.$viewModel.modal.progressBar.max = progress.maxIter;\r\n }\r\n },\r\n {\r\n text: \"Skip Glyphs\",\r\n condition: () => true,\r\n click: () => {\r\n // Shortcut to the end since we're ignoring all glyph-related resources\r\n progress.maxIter -= progress.remaining;\r\n progress.remaining = 0;\r\n }\r\n }]\r\n };\r\n },\r\n asyncProgress: doneSoFar => {\r\n ui.$viewModel.modal.progressBar.current = doneSoFar;\r\n },\r\n asyncExit: () => {\r\n ui.$viewModel.modal.progressBar = undefined;\r\n GameIntervals.start();\r\n },\r\n then: () => {\r\n // This is where we update sacrifice values if we ended up doing quick mode\r\n if (glyphSample.toGenerate > 0) {\r\n\r\n // Note: This is the only score mode we consider doing special behavior for because it's the only mode where\r\n // sacrificing a glyph can significantly affect future glyph choices. Alchemy is not a factor because\r\n // the in-game wording specifically disallows it.\r\n if (AutoGlyphProcessor.scoreMode === AUTO_GLYPH_SCORE.LOWEST_SACRIFICE) {\r\n // General behavior for repeated sacrifice with these settings is that all sacrifice values will increase\r\n // at an approximately equal rate because any type that falls behind will get prioritized by the filter.\r\n // We fake this behavior by attempting to fill the lower values until all are equal, and then filling all\r\n // types equally with whatever is left. We pull from the total stats here because this filter mode\r\n // effectively ignores types when assigning scores and picking glyphs\r\n let totalSac = sampleFromStats(glyphSample.totalStats, glyphSample.toGenerate);\r\n\r\n // Incrementing sacrifice totals without regard to glyph type and reassigning the final values in the same\r\n // ascending order as the starting order makes the code simpler to work with, so we do that\r\n const generatable = generatedTypes.filter(x => EffarigUnlock.reality.isUnlocked || x !== \"effarig\");\r\n const sacArray = generatable.map(x => player.reality.glyphs.sac[x]).sort((a, b) => a.sub(b).gte(0));\r\n const typeMap = [];\r\n for (const type of generatable) typeMap.push({ type, value: player.reality.glyphs.sac[type] });\r\n const sortedSacTotals = Object.values(typeMap).sort((a, b) => a.value.sub(b.value).gte(0));\r\n\r\n // Attempt to fill up all the lowest sacrifice totals up to the next highest, stopping early if there isn't\r\n // enough left to use for filling. The filling process causes the array to progress something like\r\n // [1,3,4,7,9] => [3,3,4,7,9] => [4,4,4,7,9] => ...\r\n for (let toFill = 0; toFill < sacArray.length - 1; toFill++) {\r\n // Calculate how much we need to fully fill\r\n let needed = 0;\r\n for (let filling = 0; filling <= toFill; filling++) needed += sacArray[toFill + 1] - sacArray[filling];\r\n\r\n // Fill up the lower indices, but only up to a maximum of what we have available\r\n const usedToFill = Math.clampMax(needed, totalSac);\r\n totalSac -= usedToFill;\r\n for (let filling = 0; filling <= toFill; filling++) sacArray[filling] += usedToFill / (toFill + 1);\r\n if (totalSac === 0) break;\r\n }\r\n // We have some left over, fill all of them equally\r\n for (let fill = 0; fill < sacArray.length; fill++) sacArray[fill] += totalSac / sacArray.length;\r\n\r\n // Assign the values in increasing order as specified by the original sacrifice totals\r\n for (let index = 0; index < sacArray.length; index++) {\r\n player.reality.glyphs.sac[sortedSacTotals[index].type] = sacArray[index];\r\n }\r\n } else {\r\n // Give sacrifice values proportionally according to what we found in the sampling stats\r\n for (const stats of glyphSample.sampleStats) {\r\n const toGenerate = glyphSample.toGenerate * stats.count / glyphsToSample;\r\n player.reality.glyphs.sac[stats.type].add(sampleFromStats(stats, toGenerate));\r\n }\r\n }\r\n }\r\n },\r\n progress\r\n });\r\n Glyphs.processSortingAfterReality();\r\n}\r\n\r\n// eslint-disable-next-line complexity\r\nexport function finishProcessReality(realityProps) {\r\n const finalEP = Currency.eternityPoints.value.plus(gainedEternityPoints());\r\n if (player.records.bestReality.bestEP.lt(finalEP)) {\r\n player.records.bestReality.bestEP = new Decimal(finalEP);\r\n player.records.bestReality.bestEPSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n\r\n const realityRealTime = player.records.thisReality.realTime;\r\n const isReset = realityProps.reset;\r\n if (!isReset) giveRealityRewards(realityProps);\r\n if (!realityProps.glyphUndo) {\r\n Glyphs.clearUndo();\r\n if (player.reality.respec) respecGlyphs();\r\n if (player.celestials.ra.disCharge) {\r\n disChargeAll();\r\n }\r\n if(player.celestials.ra.breakDischarge){\r\n disChargeAllBreak();\r\n }\r\n }\r\n if (player.options.automatorEvents.clearOnReality) AutomatorData.clearEventLog();\r\n if (Player.automatorUnlocked && AutomatorBackend.state.forceRestart) {\r\n // Make sure to restart the current script instead of using the editor script - the editor script might\r\n // not be a valid script to run; this at best stops it from running and at worst causes a crash\r\n AutomatorBackend.start(AutomatorBackend.state.topLevelScript);\r\n }\r\n\r\n const celestialRunState = clearCelestialRuns();\r\n recalculateAllGlyphs();\r\n Glyphs.updateMaxGlyphCount(true);\r\n\r\n player.sacrificed = DC.D0;\r\n\r\n lockAchievementsOnReality();\r\n\r\n // Because initializeChallengeCompletions has some code that completes normal challenges with 2 eternities,\r\n // and we haven't reset eternities yet (and I'm nervous about changing the order of this code),\r\n // add a flag to indicate that this is a reality reset.\r\n initializeChallengeCompletions(true);\r\n\r\n Currency.infinities.reset();\r\n if (MendingUpgrade(2).isBought) Currency.infinities.bumpTo(DC.E12)\r\n Currency.infinitiesBanked.reset();\r\n player.records.bestInfinity.time = Decimal.pow10(Number.MAX_VALUE);\r\n player.records.bestInfinity.realTime = Number.MAX_VALUE;\r\n player.records.thisInfinity.time = DC.D0;\r\n player.records.thisInfinity.lastBuyTime = DC.D0;\r\n player.records.thisInfinity.realTime = 0;\r\n player.dimensionBoosts = 0;\r\n player.galaxies = 0;\r\n player.partInfinityPoint = 0;\r\n player.partInfinitied = 0;\r\n if (!PlayerProgress.mendingUnlocked()) player.break = false;\r\n player.IPMultPurchases = 0;\r\n Currency.infinityPower.reset();\r\n Currency.timeShards.reset();\r\n Replicanti.reset(true);\r\n if(MendingUpgrade(2).isBought){\r\n Replicanti.amount = Replicanti.amount.clampMin(1);\r\n Replicanti.unlock(true);\r\n }\r\n\r\n Currency.eternityPoints.reset();\r\n\r\n // This has to be reset before Currency.eternities to make the bumpLimit logic work correctly\r\n EternityUpgrade.epMult.reset();\r\n if (!PelleUpgrade.eternitiesNoReset.canBeApplied) Currency.eternities.reset();\r\n player.records.thisEternity.time = DC.D0;\r\n player.records.thisEternity.realTime = 0;\r\n player.records.bestEternity.time = Decimal.pow10(Number.MAX_VALUE);\r\n player.records.bestEternity.realTime = Number.MAX_VALUE;\r\n if (!PelleUpgrade.keepEternityUpgrades.canBeApplied) player.eternityUpgrades.clear();\r\n player.totalTickGained = 0;\r\n if (!PelleUpgrade.keepEternityChallenges.canBeApplied && !MendingUpgrade(3).isBought) player.eternityChalls = {};\r\n player.reality.unlockedEC = 0;\r\n player.reality.lastAutoEC = 0;\r\n player.challenge.eternity.current = 0;\r\n if (!PelleUpgrade.timeStudiesNoReset.canBeApplied) player.challenge.eternity.unlocked = 0;\r\n player.challenge.eternity.requirementBits = 0;\r\n player.respec = false;\r\n player.eterc8ids = 50;\r\n player.eterc8repl = 40;\r\n if (realityProps.glyphUndo) {\r\n player.requirementChecks.reality.maxGlyphs =\r\n Math.max(Glyphs.bestUndoGlyphCount, player.requirementChecks.reality.maxGlyphs);\r\n } else {\r\n Player.resetRequirements(\"reality\");\r\n }\r\n player.records.thisReality.time = DC.D0;\r\n player.records.thisReality.realTime = 0;\r\n player.records.thisReality.maxReplicanti = DC.D0;\r\n if (!PelleUpgrade.timeStudiesNoReset.canBeApplied) Currency.timeTheorems.reset();\r\n player.celestials.v.STSpent = 0;\r\n if (!PelleUpgrade.timeStudiesNoReset.canBeApplied) {\r\n player.dilation.studies = [];\r\n player.dilation.active = false;\r\n }\r\n if (!PelleUpgrade.dilationUpgradesNoReset.canBeApplied) {\r\n player.dilation.upgrades.clear();\r\n player.dilation.rebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 11: 0,\r\n 12: 0,\r\n 13: 0\r\n };\r\n }\r\n if (!PelleUpgrade.tachyonParticlesNoReset.canBeApplied) {\r\n Currency.tachyonParticles.reset();\r\n }\r\n player.dilation.nextThreshold = DC.E3;\r\n player.dilation.baseTachyonGalaxies = 0;\r\n player.dilation.totalTachyonGalaxies = 0;\r\n Currency.dilatedTime.reset();\r\n player.records.thisInfinity.maxAM = DC.D0;\r\n player.records.thisEternity.maxAM = DC.D0;\r\n player.records.thisReality.maxDT = DC.D0;\r\n player.records.thisReality.remWithoutGG = 0;\r\n player.dilation.lastEP = DC.DM1;\r\n Currency.antimatter.reset();\r\n Enslaved.autoReleaseTick = 0;\r\n player.celestials.enslaved.hasSecretStudy = false;\r\n player.celestials.laitela.entropy = 0;\r\n\r\n playerInfinityUpgradesOnReset();\r\n resetInfinityRuns();\r\n resetEternityRuns();\r\n InfinityDimensions.fullReset();\r\n fullResetTimeDimensions();\r\n resetChallengeStuff();\r\n if(PlayerProgress.mendingUnlocked()){\r\n NormalChallenges.completeAll();\r\n }\r\n AntimatterDimensions.reset();\r\n secondSoftReset(false);\r\n player.celestials.ra.peakGamespeed = DC.D1;\r\n\r\n InfinityDimensions.resetAmount();\r\n player.records.thisInfinity.bestIPmin = DC.D0;\r\n player.records.bestInfinity.bestIPminEternity = DC.D0;\r\n player.records.thisEternity.bestEPmin = DC.D0;\r\n player.records.thisEternity.bestInfinitiesPerMs = DC.D0;\r\n player.records.thisEternity.bestIPMsWithoutMaxAll = DC.D0;\r\n player.records.bestEternity.bestEPminReality = DC.D0;\r\n player.records.thisReality.bestEternitiesPerMs = DC.D0;\r\n player.records.thisReality.bestRSmin = DC.D0;\r\n player.records.thisReality.bestRSminVal = DC.D0;\r\n resetTimeDimensions();\r\n resetTickspeed();\r\n AchievementTimers.marathon2.reset();\r\n Currency.infinityPoints.reset();\r\n if (MendingUpgrade(2).isBought) Currency.eternities.bumpTo(DC.E6)\r\n else if (RealityUpgrade(10).isBought) applyRUPG10();\r\n else Tab.dimensions.antimatter.show();\r\n\r\n Lazy.invalidateAll();\r\n ECTimeStudyState.invalidateCachedRequirements();\r\n EventHub.dispatch(GAME_EVENT.REALITY_RESET_AFTER);\r\n\r\n if (TeresaUnlocks.startEU.canBeApplied) {\r\n for (const id of [1, 2, 3, 4, 5, 6]) player.eternityUpgrades.add(id);\r\n } else if (RealityUpgrade(14).isBought) {\r\n // Eternal flow will always give eternities after the first tick,\r\n // better to try apply EU1 immediately once at the start rather than on every tick\r\n applyEU1();\r\n }\r\n\r\n if (!isReset) Ra.applyAlchemyReactions(realityRealTime);\r\n\r\n player.reality.gainedAutoAchievements = false;\r\n player.reality.hasCheckedFilter = false;\r\n\r\n if (realityProps.restoreCelestialState || player.options.retryCelestial) restoreCelestialRuns(celestialRunState);\r\n\r\n if (Pelle.isDoomed && PelleUpgrade.keepAutobuyers.canBeApplied && Autobuyer.bigCrunch.hasMaxedInterval) {\r\n player.break = true;\r\n }\r\n Glyphs.updateMaxGlyphCount();\r\n}\r\n\r\nfunction restoreCelestialRuns(celestialRunState) {\r\n player.celestials.teresa.run = celestialRunState.teresa;\r\n if (player.celestials.teresa.run) Teresa.initializeRun();\r\n player.celestials.effarig.run = celestialRunState.effarig;\r\n if (player.celestials.effarig.run) Effarig.initializeRun();\r\n player.celestials.enslaved.run = celestialRunState.enslaved;\r\n if (player.celestials.enslaved.run) Enslaved.initializeRun();\r\n player.celestials.v.run = celestialRunState.v;\r\n if (player.celestials.v.run) V.initializeRun();\r\n player.celestials.v.superrun = celestialRunState.superv;\r\n if (player.celestials.v.superrun) V.initializeSuperRun();\r\n player.celestials.ra.run = celestialRunState.ra;\r\n if (player.celestials.ra.run) Ra.initializeRun();\r\n player.celestials.laitela.run = celestialRunState.laitela;\r\n if (player.celestials.laitela.run) Laitela.initializeRun();\r\n}\r\n\r\n// This is also called when the upgrade is purchased, be aware of potentially having \"default\" values overwrite values\r\n// which might otherwise be higher. Most explicit values here are the values of upgrades at their caps.\r\nexport function applyRUPG10() {\r\n NormalChallenges.completeAll();\r\n if (PelleUpgrade.replicantiStayUnlocked.canBeApplied) {\r\n Replicanti.amount = Replicanti.amount.clampMin(1);\r\n Replicanti.unlock(true);\r\n }\r\n if (Pelle.isDisabled(\"rupg10\")) return;\r\n\r\n player.auto.antimatterDims.all = player.auto.antimatterDims.all.map(current => ({\r\n isUnlocked: true,\r\n // These costs are approximately right; if bought manually all dimensions are slightly different from one another\r\n cost: 1e14,\r\n interval: 100,\r\n bulk: 1e10,\r\n mode: current.mode,\r\n priority: current.priority,\r\n isActive: current.isActive,\r\n lastTick: player.records.realTimePlayed\r\n }));\r\n\r\n for (const autobuyer of Autobuyers.all) {\r\n if (autobuyer.data.interval !== undefined) autobuyer.data.interval = 100;\r\n }\r\n\r\n player.dimensionBoosts = Math.max(4, player.dimensionBoosts);\r\n player.galaxies = Math.max(1, player.galaxies);\r\n player.break = true;\r\n Currency.eternities.bumpTo(100);\r\n Replicanti.amount = Replicanti.amount.clampMin(1);\r\n Replicanti.unlock(true);\r\n\r\n applyEU1();\r\n}\r\n\r\nexport function clearCelestialRuns() {\r\n const saved = {\r\n teresa: player.celestials.teresa.run,\r\n effarig: player.celestials.effarig.run,\r\n enslaved: player.celestials.enslaved.run,\r\n v: player.celestials.v.run,\r\n superv: player.celestials.v.superrun,\r\n ra: player.celestials.ra.run,\r\n laitela: player.celestials.laitela.run,\r\n };\r\n player.celestials.teresa.run = false;\r\n player.celestials.effarig.run = false;\r\n // Nameless forces all tabs to be visible, but exiting via the header might leave the player on a tab which is\r\n // otherwise normally hidden - in that case we force them to the Nameless tab. We could scan for the lowest-index tab\r\n // and subtab, but all other things being equal the Nameless tab makes the most sense. The run flag is toggled\r\n // *before* the check because otherwise isHidden will always evaluate to false due to still being in Nameless.\r\n if (Enslaved.isRunning) {\r\n player.celestials.enslaved.run = false;\r\n if (Tabs.current.isHidden || Tabs.current._currentSubtab.isHidden) Tab.celestials.enslaved.show();\r\n // We specifically revalidate here and nowhere else because Nameless changes the unlock state of the BLACK HOLE\r\n // command, which changes the validity of existing scripts when entering/exiting\r\n AutomatorData.recalculateErrors();\r\n }\r\n player.celestials.v.run = false;\r\n player.celestials.v.superrun = false;\r\n player.celestials.ra.run = false;\r\n player.celestials.laitela.run = false;\r\n return saved;\r\n}\r\n\r\nexport function isInCelestialReality() {\r\n if(player.celestials.v.superrun) return true;\r\n return Object.values(player.celestials).some(x => x.run);\r\n}\r\n\r\nfunction lockAchievementsOnReality() {\r\n if (Perk.achievementGroup5.isBought || PlayerProgress.mendingUnlocked()) return;\r\n for (const achievement of Achievements.preReality) {\r\n achievement.lock();\r\n }\r\n player.reality.achTimer = DC.D0;\r\n}\r\n","export default {\r\n isDisplaying: false,\r\n displayForce(name, duration) {\r\n document.body.style.animation = `${name} ${duration}s 1`;\r\n this.isDisplaying = true;\r\n setTimeout(() => {\r\n document.body.style.animation = \"\";\r\n this.isDisplaying = false;\r\n }, duration * 1000);\r\n },\r\n display(name, duration) {\r\n if (!this.isDisplaying) {\r\n this.displayForce(name, duration);\r\n }\r\n }\r\n};","import { GameMechanicState, SetPurchasableMechanicState } from \"./game-mechanics\";\r\nimport { DC } from \"./constants\";\r\nimport FullScreenAnimationHandler from \"./full-screen-animation-handler\";\r\nimport { MendingUpgrade } from \"./mending-upgrades\";\r\nimport { Currency } from \"./currency\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nfunction giveEternityRewards(auto) {\r\n player.records.bestEternity.time = Decimal.min(player.records.thisEternity.time, player.records.bestEternity.time);\r\n Currency.eternityPoints.add(gainedEternityPoints());\r\n\r\n const newEternities = gainedEternities();\r\n\r\n if (Currency.eternities.eq(0) && newEternities.lte(10)) {\r\n Tab.dimensions.time.show();\r\n }\r\n\r\n Currency.eternities.add(newEternities);\r\n\r\n if (EternityChallenge.isRunning) {\r\n const challenge = EternityChallenge.current;\r\n challenge.addCompletion(false);\r\n if (Perk.studyECBulk.isBought) {\r\n let completionCount = 0;\r\n while (!challenge.isFullyCompleted && challenge.canBeCompleted) {\r\n challenge.addCompletion(false);\r\n completionCount++;\r\n }\r\n AutomatorData.lastECCompletionCount = completionCount;\r\n if (Enslaved.isRunning && completionCount > 5) EnslavedProgress.ec1.giveProgress();\r\n }\r\n player.challenge.eternity.requirementBits &= ~(1 << challenge.id);\r\n respecTimeStudies(auto);\r\n }\r\n\r\n addEternityTime(\r\n player.records.thisEternity.time,\r\n player.records.thisEternity.realTime,\r\n gainedEternityPoints(),\r\n newEternities\r\n );\r\n\r\n player.records.thisReality.bestEternitiesPerMs = player.records.thisReality.bestEternitiesPerMs.clampMin(\r\n newEternities.div(Math.clampMin(33, player.records.thisEternity.realTime))\r\n );\r\n player.records.bestEternity.bestEPminReality =\r\n player.records.bestEternity.bestEPminReality.max(player.records.thisEternity.bestEPmin);\r\n\r\n Currency.infinitiesBanked.value = Currency.infinitiesBanked.value.plusEffectsOf(\r\n Achievement(131),\r\n TimeStudy(191)\r\n );\r\n\r\n if (Effarig.isRunning && !EffarigUnlock.eternity.isUnlocked) {\r\n EffarigUnlock.eternity.unlock();\r\n EffarigUnlock.infinity.unlock();\r\n beginProcessReality(getRealityProps(true));\r\n }\r\n}\r\n\r\nexport function eternityAnimation() {\r\n FullScreenAnimationHandler.display(\"a-eternify\", 3);\r\n}\r\n\r\nexport function eternityResetRequest() {\r\n if (!Player.canEternity) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n askEternityConfirmation();\r\n}\r\n\r\nexport function eternity(force, auto, specialConditions = {}) {\r\n if (specialConditions.switchingDilation && !Player.canEternity) {\r\n // eslint-disable-next-line no-param-reassign\r\n force = true;\r\n }\r\n // We define this variable so we can use it in checking whether to give\r\n // the secret achievement for respec without studies.\r\n // Annoyingly, we need to check for studies right here; giveEternityRewards removes studies if we're in an EC,\r\n // so doing the check later doesn't give us the initial state of having studies or not.\r\n const noStudies = player.timestudy.studies.length === 0;\r\n if (!force) {\r\n if (!Player.canEternity) return false;\r\n if (RealityUpgrade(10).isLockingMechanics) {\r\n RealityUpgrade(10).tryShowWarningModal();\r\n return false;\r\n }\r\n if (RealityUpgrade(12).isLockingMechanics && EternityChallenge(1).isRunning) {\r\n RealityUpgrade(12).tryShowWarningModal();\r\n return false;\r\n }\r\n EventHub.dispatch(GAME_EVENT.ETERNITY_RESET_BEFORE);\r\n giveEternityRewards(auto);\r\n player.requirementChecks.reality.noEternities = false;\r\n }\r\n\r\n if (player.dilation.active) rewardTP();\r\n\r\n // This needs to be after the dilation check for the \"can gain TP\" check in rewardTP to be correct.\r\n if (force) {\r\n player.challenge.eternity.current = 0;\r\n }\r\n\r\n initializeChallengeCompletions();\r\n initializeResourcesAfterEternity();\r\n\r\n if (!EternityMilestone.keepAutobuyers.isReached && !(Pelle.isDoomed && PelleUpgrade.keepAutobuyers.canBeApplied)) {\r\n // Fix infinity because it can only break after big crunch autobuyer interval is maxed\r\n player.break = false;\r\n }\r\n\r\n player.challenge.eternity.current = 0;\r\n if (!specialConditions.enteringEC && !Pelle.isDoomed) {\r\n player.dilation.active = false;\r\n }\r\n resetInfinityRuns();\r\n InfinityDimensions.fullReset();\r\n Replicanti.reset();\r\n resetChallengeStuff();\r\n AntimatterDimensions.reset();\r\n\r\n if (!specialConditions.enteringEC && player.respec) {\r\n if (noStudies) {\r\n SecretAchievement(34).unlock();\r\n }\r\n respecTimeStudies(auto);\r\n player.respec = false;\r\n }\r\n Currency.infinities.reset();\r\n if(MendingUpgrade(2).isBought){\r\n Currency.infinities.bumpTo(DC.E12);\r\n }\r\n Currency.infinityPoints.reset();\r\n InfinityDimensions.resetAmount();\r\n player.records.thisInfinity.bestIPmin = DC.D0;\r\n player.records.bestInfinity.bestIPminEternity = DC.D0;\r\n player.records.thisEternity.bestEPmin = DC.D0;\r\n player.records.thisEternity.bestInfinitiesPerMs = DC.D0;\r\n player.records.thisEternity.bestIPMsWithoutMaxAll = DC.D0;\r\n resetTimeDimensions();\r\n resetTickspeed();\r\n playerInfinityUpgradesOnReset();\r\n AchievementTimers.marathon2.reset();\r\n applyEU1();\r\n player.records.thisInfinity.maxAM = DC.D0;\r\n player.records.thisEternity.maxAM = DC.D0;\r\n Currency.antimatter.reset();\r\n ECTimeStudyState.invalidateCachedRequirements();\r\n\r\n PelleStrikes.eternity.trigger();\r\n\r\n EventHub.dispatch(GAME_EVENT.ETERNITY_RESET_AFTER);\r\n return true;\r\n}\r\n\r\n// eslint-disable-next-line no-empty-function\r\nexport function animateAndEternity(callback) {\r\n if (!Player.canEternity) return false;\r\n const hasAnimation = !FullScreenAnimationHandler.isDisplaying &&\r\n !RealityUpgrade(10).isLockingMechanics &&\r\n !(RealityUpgrade(12).isLockingMechanics && EternityChallenge(1).isRunning) &&\r\n ((player.dilation.active && player.options.animations.dilation) ||\r\n (!player.dilation.active && player.options.animations.eternity));\r\n\r\n if (hasAnimation) {\r\n if (player.dilation.active) {\r\n animateAndUndilate(callback);\r\n } else {\r\n eternityAnimation();\r\n setTimeout(() => {\r\n eternity();\r\n if (callback) callback();\r\n }, 2250);\r\n }\r\n } else {\r\n eternity();\r\n if (callback) callback();\r\n }\r\n return hasAnimation;\r\n}\r\n\r\nexport function initializeChallengeCompletions(isReality) {\r\n NormalChallenges.clearCompletions();\r\n if (!PelleUpgrade.keepInfinityChallenges.canBeApplied) InfinityChallenges.clearCompletions();\r\n if ((!isReality && EternityMilestone.keepAutobuyers.isReached) || Pelle.isDoomed || MendingMilestone.one.isReached) {\r\n NormalChallenges.completeAll();\r\n }\r\n if (Achievement(133).isUnlocked && !Pelle.isDoomed) InfinityChallenges.completeAll();\r\n player.challenge.normal.current = 0;\r\n player.challenge.infinity.current = 0;\r\n}\r\n\r\nexport function initializeResourcesAfterEternity() {\r\n player.sacrificed = DC.D0;\r\n Currency.infinities.reset();\r\n player.records.bestInfinity.time = Decimal.pow10(Number.MAX_VALUE);\r\n player.records.bestInfinity.realTime = Number.MAX_VALUE;\r\n player.records.thisInfinity.time = DC.D0;\r\n player.records.thisInfinity.lastBuyTime = DC.D0;\r\n player.records.thisInfinity.realTime = 0;\r\n player.dimensionBoosts = (EternityMilestone.keepInfinityUpgrades.isReached) ? 4 : 0;\r\n player.galaxies = (EternityMilestone.keepInfinityUpgrades.isReached) ? 1 : 0;\r\n player.partInfinityPoint = 0;\r\n player.partInfinitied = 0;\r\n player.IPMultPurchases = 0;\r\n Currency.infinityPower.reset();\r\n Currency.timeShards.reset();\r\n player.records.thisEternity.time = DC.D0;\r\n player.records.thisEternity.realTime = 0;\r\n player.totalTickGained = 0;\r\n player.eterc8ids = 50;\r\n player.eterc8repl = 40;\r\n Player.resetRequirements(\"eternity\");\r\n}\r\n\r\nexport function applyEU1() {\r\n if (player.eternityUpgrades.size < 3 && Perk.autounlockEU1.canBeApplied) {\r\n for (const id of [1, 2, 3]) player.eternityUpgrades.add(id);\r\n }\r\n}\r\n\r\n// We want this to be checked before any EP-related autobuyers trigger, but we need to call this from the autobuyer\r\n// code since those run asynchronously from gameLoop\r\nexport function applyEU2() {\r\n if (player.eternityUpgrades.size < 6 && Perk.autounlockEU2.canBeApplied) {\r\n const secondRow = EternityUpgrade.all.filter(u => u.id > 3);\r\n for (const upgrade of secondRow) {\r\n if (player.eternityPoints.gte(upgrade.cost / 1e10)) player.eternityUpgrades.add(upgrade.id);\r\n }\r\n }\r\n}\r\n\r\nfunction askEternityConfirmation() {\r\n if (player.dilation.active && player.options.confirmations.dilation) {\r\n Modal.exitDilation.show();\r\n } else if (player.options.confirmations.eternity) {\r\n Modal.eternity.show();\r\n } else {\r\n animateAndEternity();\r\n }\r\n}\r\n\r\nexport function gainedEternities() {\r\n let eternityGain = new Decimal(1);\r\n if (MendingMilestone.one.isReached){\r\n eternityGain = eternityGain.times(10000);\r\n }\r\n if (Ra.unlocks.realitiesBoostInfinityAndEternityProduction.isUnlocked){\r\n let teresa90BaseExp=Math.pow((Math.log10(Currency.realities.value)/20), 1.111)\r\n if(teresa90BaseExp>1.5){\r\n teresa90BaseExp=1.5+Math.pow(teresa90BaseExp-1.5,0.75)\r\n }\r\n eternityGain = eternityGain.pow(teresa90BaseExp); //TODO: softcap this at ^1.5\r\n }\r\n return Pelle.isDisabled(\"eternityMults\")\r\n ? (Ra.unlocks.unlockPelleGlyphEffects.isUnlocked) ? eternityGain.times(getAdjustedGlyphEffect(\"timeetermult\")) : eternityGain\r\n : eternityGain.times(getAdjustedGlyphEffect(\"timeetermult\"))\r\n .timesEffectsOf(RealityUpgrade(3), Achievement(113))\r\n .pow(AlchemyResource.eternity.effectValue);\r\n}\r\n\r\nexport class EternityMilestoneState {\r\n constructor(config) {\r\n this.config = config;\r\n }\r\n\r\n get isReached() {\r\n if (Pelle.isDoomed && this.config.givenByPelle) {\r\n return this.config.givenByPelle();\r\n }\r\n return Currency.eternities.gte(this.config.eternities);\r\n }\r\n}\r\nexport const EternityMilestone = mapGameDataToObject(\r\n GameDatabase.eternity.milestones,\r\n config => (config.isBaseResource\r\n ? new EternityMilestoneState(config)\r\n : new EternityMilestoneState(config))\r\n);\r\n\r\nclass EternityUpgradeState extends SetPurchasableMechanicState {\r\n get currency() {\r\n return Currency.eternityPoints;\r\n }\r\n\r\n get set() {\r\n return player.eternityUpgrades;\r\n }\r\n}\r\n\r\nclass EPMultiplierState extends GameMechanicState {\r\n constructor() {\r\n super({});\r\n this.cachedCost = new Lazy(() => this.costAfterCount(player.epmultUpgrades));\r\n this.cachedEffectValue = (player.celestials.pelle.doomed && Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked) ? new Lazy(() => Decimal.pow(1.5, player.epmultUpgrades)) : new Lazy(() => DC.D5.pow(player.epmultUpgrades));\r\n }\r\n\r\n get isAffordable() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return false;\r\n if (Pelle.isDoomed && Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked && Currency.eternityPoints.gte(this.cost)) return true;\r\n return !Pelle.isDoomed && !this.isCapped && Currency.eternityPoints.gte(this.cost);\r\n }\r\n\r\n get cost() {\r\n return this.cachedCost.value;\r\n }\r\n\r\n get boughtAmount() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return 0;\r\n return player.epmultUpgrades;\r\n }\r\n\r\n get purchaseCap() {\r\n return 5e8;\r\n }\r\n\r\n get isCapped() {\r\n return player.epmultUpgrades >= this.purchaseCap;\r\n }\r\n\r\n set boughtAmount(value) {\r\n // Reality resets will make this bump amount negative, causing it to visually appear as 0 even when it isn't.\r\n // A dev migration fixes bad autobuyer states and this change ensures it doesn't happen again\r\n const diff = Math.clampMin(value - player.epmultUpgrades, 0);\r\n player.epmultUpgrades = Math.min(value, 5e8);\r\n this.cachedCost.invalidate();\r\n this.cachedEffectValue.invalidate();\r\n Autobuyer.eternity.bumpAmount(DC.D5.pow(diff));\r\n }\r\n\r\n get isCustomEffect() {\r\n return true;\r\n }\r\n\r\n get effectValue() {\r\n return this.cachedEffectValue.value;\r\n }\r\n\r\n purchase() {\r\n if (!this.isAffordable) return false;\r\n Currency.eternityPoints.subtract(this.cost);\r\n ++this.boughtAmount;\r\n return true;\r\n }\r\n\r\n buyMax(auto) {\r\n if (!this.isAffordable) return false;\r\n if (RealityUpgrade(15).isLockingMechanics) {\r\n if (!auto) RealityUpgrade(15).tryShowWarningModal();\r\n return false;\r\n }\r\n let bulk = null;\r\n try{\r\n bulk = bulkBuyBinarySearch(Currency.eternityPoints.value, {\r\n costFunction: this.costAfterCount,\r\n cumulative: true,\r\n firstCost: this.cost,\r\n }, this.boughtAmount);\r\n }\r\n catch{\r\n this.boughtAmount = 5e8;\r\n return true;\r\n }\r\n if (!bulk) return false;\r\n Currency.eternityPoints.subtract(bulk.purchasePrice);\r\n this.boughtAmount += bulk.quantity;\r\n return true;\r\n }\r\n\r\n reset() {\r\n this.boughtAmount = 0;\r\n }\r\n\r\n get costIncreaseThresholds() {\r\n return [DC.E100, Decimal.NUMBER_MAX_VALUE, DC.E1300, DC.E4000];\r\n }\r\n\r\n costAfterCount(count) {\r\n const costThresholds = EternityUpgrade.epMult.costIncreaseThresholds;\r\n const multPerUpgrade = [50, 100, 500, 1000];\r\n for (let i = 0; i < costThresholds.length; i++) {\r\n const cost = Decimal.pow(multPerUpgrade[i], count).times(500);\r\n if (cost.lt(costThresholds[i])) return cost;\r\n }\r\n return DC.E3.pow(count + Math.pow(Math.clampMin(count - 1334, 0), 1.2)).times(500);\r\n }\r\n}\r\n\r\nexport const EternityUpgrade = mapGameDataToObject(\r\n GameDatabase.eternity.upgrades,\r\n config => new EternityUpgradeState(config)\r\n);\r\n\r\nEternityUpgrade.epMult = new EPMultiplierState();\r\n","// There's a vue directive, long-press, defined at the bottom, which may be\r\n// what you want to use.\r\n//\r\n// Because it's related, we also define another directive, repeating-click, which\r\n// sends repeated events if the mouse is held down. (It sends firstclick and repeatclick)\r\n\r\n// LongPress produces 3 possible events:\r\n// 1) a long press (longPress property in handlers)\r\n// 2) a long press cancellation (early release, cancel property)\r\n// 3) a click (a short click, click property)\r\n// handlers can also have a \"repeat\" property, which is a number in ms. If defined,\r\n// the long press event will be fired repeatedly if the press continues, at that frequency\r\n//\r\n// Don't add your own click handlers to the object; get your clicks through\r\n// LongPress\r\n//\r\n// The long-press directive (v-long-press=\"{ delay:1000 }\")\r\n// attaches LongPress for you, and emits the following events you can listen for:\r\n// longpress\r\n// longpresscancel\r\n// longpressclick\r\n\r\nclass LongPress {\r\n static initializeVars() {\r\n LongPress._wasLongPress = false;\r\n LongPress._pressTimer = null;\r\n LongPress._currentCancelHandler = null;\r\n LongPress._currentTarget = null;\r\n // Debug\r\n LongPress._pressCount = 0;\r\n }\r\n\r\n static addTo(obj, timeout, handlers) {\r\n if (!Object.prototype.hasOwnProperty.call(handlers, \"longPress\")) {\r\n throw \"Need to specify a longPress handler\";\r\n }\r\n const begin = e => LongPress._pressBegin(timeout, handlers.longPress, handlers.cancel, handlers.repeat, e);\r\n obj.addEventListener(\"mousedown\", begin);\r\n obj.addEventListener(\"touchstart\", begin);\r\n obj.addEventListener(\"mouseout\", LongPress._cancelCurrentPress);\r\n obj.addEventListener(\"touchcancel\", LongPress._cancelCurrentPress);\r\n obj.addEventListener(\"touchmove\", e => {\r\n // Suggested in stackoverflow example\r\n e.preventDefault();\r\n const t = e.changedTouches[0];\r\n if (obj !== document.elementFromPoint(t.pageX, t.pageY)) {\r\n LongPress._cancelCurrentPress();\r\n }\r\n });\r\n if (handlers.click) {\r\n obj.addEventListener(\"click\", e => LongPress._handleClick(e, handlers.click));\r\n obj.addEventListener(\"touchend\", e => LongPress._handleTouchEnd(e, handlers.click));\r\n } else {\r\n obj.addEventListener(\"click\", LongPress._cancelCurrentPress);\r\n obj.addEventListener(\"touchend\", LongPress._cancelCurrentPress);\r\n }\r\n }\r\n\r\n static _cancelCurrentPress(e) {\r\n if (LongPress._currentCancelHandler) {\r\n LongPress._currentCancelHandler(e);\r\n LongPress._currentCancelHandler = null;\r\n }\r\n if (LongPress._pressTimer !== null) {\r\n clearTimeout(LongPress._pressTimer);\r\n LongPress._pressTimer = null;\r\n }\r\n LongPress._wasLongPress = false;\r\n LongPress._currentTarget = null;\r\n }\r\n\r\n // eslint-disable-next-line max-params\r\n static _pressBegin(timeout, handler, cancelHandler, repeat, e) {\r\n // If there's a timer already running, that means that something wasn't cancelled\r\n // properly (a press shouldn't begin if it hasn't ended). Clear out any existing presses:\r\n LongPress._cancelCurrentPress(e);\r\n // Ignore right click\r\n if (e.type === \"click\" && e.button !== 0) return;\r\n ++LongPress._pressCount;\r\n LongPress._currentCancelHandler = cancelHandler;\r\n LongPress._wasLongPress = false;\r\n LongPress._currentTarget = e.target;\r\n e.target.focus();\r\n LongPress._pressTimer = setTimeout(() => {\r\n LongPress._wasLongPress = true;\r\n handler(e);\r\n if (repeat) {\r\n LongPress._beginRepeat(repeat, handler, e);\r\n } else {\r\n LongPress._pressTimer = null;\r\n LongPress._currentCancelHandler = null;\r\n }\r\n }, timeout);\r\n }\r\n\r\n static _beginRepeat(timeout, handler, e) {\r\n LongPress._pressTimer = setTimeout(() => {\r\n handler(e);\r\n LongPress._beginRepeat(timeout, handler, e);\r\n }, timeout);\r\n }\r\n\r\n static _handleClick(e, handler) {\r\n const wasLP = LongPress._wasLongPress;\r\n // If the click was of a right button, just handle it\r\n if (e.button !== 0) return handler(e);\r\n // Cancel any existing presses\r\n LongPress._cancelCurrentPress(e);\r\n // If we just had a long press event, ignore the click\r\n return wasLP ? false : handler(e);\r\n }\r\n\r\n static _handleTouchEnd(e, handler) {\r\n // On touch devices, I don't think we get a normal click event; so we determine\r\n // a click based on a touch ending. To be on the safe side, we make sure the touch\r\n // began in the same place.\r\n const savedTarget = LongPress._currentTarget;\r\n const wasLP = LongPress._wasLongPress;\r\n // Cancel any existing presses\r\n LongPress._cancelCurrentPress(e);\r\n // If we just had a long press event, ignore the click; make sure targets match\r\n return !wasLP && savedTarget === e.target ? handler(e) : false;\r\n }\r\n}\r\n\r\nLongPress.initializeVars();\r\n\r\nexport function useLongPress(vue) {\r\n vue.directive(\"long-press\", {\r\n bind(el, binding, vnode) {\r\n // This seems to be the only way to get events to our component\r\n const emit = (name, data) => {\r\n const handlers = (vnode.data && vnode.data.on);\r\n if (handlers && handlers[name]) {\r\n handlers[name].fns(data);\r\n }\r\n };\r\n LongPress.addTo(el, binding.value.delay, {\r\n longPress: () => emit(\"longpress\"),\r\n cancel: () => emit(\"longpresscancel\"),\r\n click: () => emit(\"longpressclick\"),\r\n });\r\n }\r\n });\r\n}\r\n\r\nexport function useRepeatingClick(vue) {\r\n vue.directive(\"repeating-click\", {\r\n bind(el, binding, vnode) {\r\n // This seems to be the only way to get events to our component\r\n const emit = (name, data) => {\r\n const handlers = (vnode.data && vnode.data.on);\r\n if (handlers && handlers[name]) {\r\n handlers[name].fns(data);\r\n }\r\n };\r\n LongPress.addTo(el, binding.value.delay, {\r\n longPress: () => emit(\"repeatclick\"),\r\n click: () => emit(\"firstclick\"),\r\n repeat: 250\r\n });\r\n }\r\n });\r\n}\r\n","export const notify = (function() {\r\n const template = document.createElement(\"div\");\r\n template.classList.add(\"o-notification\");\r\n const enterAnimation = \"a-notification--enter\";\r\n const leaveAnimation = \"a-notification--leave\";\r\n function showNotification(text, elClass, duration = 2000) {\r\n if (!GameUI.initialized) {\r\n setTimeout(showNotification, 500, text, elClass, duration);\r\n return;\r\n }\r\n const el = template.cloneNode();\r\n el.textContent = text;\r\n el.classList.add(elClass, enterAnimation);\r\n const container = document.getElementById(\"notification-container\");\r\n container.appendChild(el);\r\n let entered = false;\r\n function stopEnter() {\r\n if (entered) return;\r\n entered = true;\r\n el.classList.remove(enterAnimation);\r\n }\r\n setTimeout(() => stopEnter(), 500);\r\n let leaving = false;\r\n function leave() {\r\n if (leaving) return;\r\n leaving = true;\r\n stopEnter();\r\n el.classList.add(leaveAnimation);\r\n setTimeout(() => el.remove(), 500);\r\n }\r\n setTimeout(() => leave(), duration);\r\n el.onclick = () => leave();\r\n }\r\n return {\r\n success: (text, duration) => showNotification(text, \"o-notification--success\", duration),\r\n error: (text, duration) => showNotification(text, \"o-notification--error\", duration),\r\n info: (text, duration) => showNotification(text, \"o-notification--info\", duration),\r\n infinity: (text, duration) => showNotification(text, \"o-notification--infinity\", duration),\r\n eternity: (text, duration) => showNotification(text, \"o-notification--eternity\", duration),\r\n reality: (text, duration) => showNotification(text, \"o-notification--reality\", duration),\r\n automator: (text, duration) => showNotification(text, \"o-notification--automator\", duration),\r\n blackHole: (text, duration) => showNotification(text, \"o-notification--black-hole\", duration),\r\n strike: (text, duration) => showNotification(text, \"o-notification--strike\", duration),\r\n showBlackHoles: true\r\n };\r\n}());\r\n","import { DC } from \"./constants\"\r\n\r\nexport const state = {\r\n view: {\r\n modal: {\r\n queue: [],\r\n current: undefined,\r\n cloudConflict: [],\r\n progressBar: undefined,\r\n },\r\n quotes: {\r\n queue: [],\r\n current: undefined,\r\n history: undefined\r\n },\r\n tabs: {\r\n reality: {\r\n openGlyphWeights: false,\r\n currentGlyphTooltip: -1,\r\n // 1 means up and left of the mouse\r\n glyphTooltipDirection: 1,\r\n draggingGlyphInfo: {\r\n id: 0,\r\n type: \"\",\r\n sacrificeValue: DC.D0,\r\n },\r\n mouseoverGlyphInfo: {\r\n id: 0,\r\n type: \"\",\r\n sacrificeValue: DC.D0,\r\n refineValue: DC.D0,\r\n inInventory: false,\r\n },\r\n automator: {\r\n fullScreen: false,\r\n editorScriptID: \"\",\r\n lines: []\r\n }\r\n },\r\n },\r\n shiftDown: false,\r\n theme: \"Normal\",\r\n bigCrunch: false,\r\n scrollWindow: 0,\r\n draggingUIID: -1,\r\n currentContextMenu: null,\r\n tab: \"dimensions\",\r\n subtab: \"antimatter\",\r\n UIType: \"Modern\",\r\n news: false,\r\n initialized: false,\r\n tutorialState: 0,\r\n tutorialActive: true,\r\n h2pForcedTab: undefined,\r\n },\r\n notationName: \"\",\r\n formatPreBreak: false,\r\n lastClickTime: 0,\r\n};\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.view.initialized)?_c('div',{staticClass:\"ui-wrapper\",class:_vm.containerClass,attrs:{\"id\":\"ui-container\"}},[_c('div',{staticClass:\"c-game-ui\",attrs:{\"id\":\"ui\"}},[_c(_vm.uiLayout,{tag:\"component\"},[_c(_vm.page,{tag:\"component\",staticClass:\"c-game-tab\"})],1),(_vm.isThemeS12)?_c('S12DesktopIcons'):_vm._e(),(_vm.view.theme !== 'Normal')?_c('link',{attrs:{\"type\":\"text/css\",\"rel\":\"stylesheet\",\"href\":_vm.themeCss}}):_vm._e()],1),(!_vm.isThemeS12)?_c('GameUiComponentFixed'):_vm._e(),(!_vm.isThemeS12)?_c('BackgroundAnimations'):_vm._e(),(_vm.isThemeS12)?_c('S12UiFixed'):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-background-animations\",attrs:{\"id\":\"ui-background-animations\"}},[(_vm.blob)?_c('BlobSnowflakes'):_vm._e(),(_vm.animateTachyons)?_c('TachyonParticles'):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.initialized)?_c('div',[(_vm.animateBackground)?_c('svg',{staticClass:\"c-blob-snowflake-container\"},_vm._l((_vm.count),function(i){return _c('BlobSnowflake',{key:i,attrs:{\"bounds\":_vm.bounds}})}),1):_c('svg',{staticClass:\"c-blob-background-container\"},_vm._l((_vm.count),function(i){return _c('BlobBackground',{key:i,attrs:{\"bounds\":_vm.bounds}})}),1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('text',{staticClass:\"o-blob-background\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlobBackground.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlobBackground.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlobBackground.vue?vue&type=template&id=3413da3e&scoped=true&\"\nimport script from \"./BlobBackground.vue?vue&type=script&lang=js&\"\nexport * from \"./BlobBackground.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BlobBackground.vue?vue&type=style&index=0&id=3413da3e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3413da3e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('text',{staticClass:\"o-blob-snowflake\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlobSnowflake.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlobSnowflake.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlobSnowflake.vue?vue&type=template&id=67871b93&scoped=true&\"\nimport script from \"./BlobSnowflake.vue?vue&type=script&lang=js&\"\nexport * from \"./BlobSnowflake.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BlobSnowflake.vue?vue&type=style&index=0&id=67871b93&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"67871b93\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlobSnowflakes.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlobSnowflakes.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlobSnowflakes.vue?vue&type=template&id=2549fa62&scoped=true&\"\nimport script from \"./BlobSnowflakes.vue?vue&type=script&lang=js&\"\nexport * from \"./BlobSnowflakes.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BlobSnowflakes.vue?vue&type=style&index=0&id=2549fa62&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2549fa62\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.initialized)?_c('svg',{staticClass:\"c-tachyon-particle-container\"},_vm._l((_vm.count),function(i){return _c('TachyonParticle',{key:i,attrs:{\"bounds\":_vm.bounds,\"is-blob\":_vm.isBlob}})}),1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isBlob)?_c('text',{staticClass:\"o-tachyon-particle\"},[_vm._v(\" \"+_vm._s(_vm.blob)+\" \")]):_c('circle',{staticClass:\"o-tachyon-particle\",attrs:{\"r\":\"2\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TachyonParticle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TachyonParticle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TachyonParticle.vue?vue&type=template&id=374b7fbb&scoped=true&\"\nimport script from \"./TachyonParticle.vue?vue&type=script&lang=js&\"\nexport * from \"./TachyonParticle.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"374b7fbb\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TachyonParticles.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TachyonParticles.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TachyonParticles.vue?vue&type=template&id=d31a6422&scoped=true&\"\nimport script from \"./TachyonParticles.vue?vue&type=script&lang=js&\"\nexport * from \"./TachyonParticles.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d31a6422\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BackgroundAnimations.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BackgroundAnimations.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BackgroundAnimations.vue?vue&type=template&id=e3d8c3e6&scoped=true&\"\nimport script from \"./BackgroundAnimations.vue?vue&type=script&lang=js&\"\nexport * from \"./BackgroundAnimations.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e3d8c3e6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{key:_vm.newGameKey,staticClass:\"container c-classic l-Classic\",attrs:{\"id\":\"container\"}},[_c('link',{attrs:{\"rel\":\"stylesheet\",\"type\":\"text/css\",\"href\":\"stylesheets/classic.css\"}}),_c('BigCrunchButton'),(!_vm.bigCrunch)?[(_vm.news)?_c('NewsTicker',{staticClass:\"l-classic__news-bar\"}):_vm._e(),(_vm.hasMendingButton)?_c('div',{staticClass:\"c-mending-points\"},[_c('MendingPointsHeader'),_c('MendingButton')],1):_vm._e(),_c('GameHeader',{staticClass:\"l-classic__header\"}),_c('ClassicTabBar'),(_vm.tab.config.before)?_c(_vm.tab.config.before,{tag:\"component\"}):_vm._e(),_c('ClassicSubtabBar'),_c('div',{staticClass:\"l-classic__page\"},[_vm._t(\"default\")],2)]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isVisible),expression:\"isVisible\"}],staticClass:\"c-mending-points\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-mending-tab__mending-points\"},[_vm._v(_vm._s(_vm.formatNE(_vm.mendingPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Multiversal Remain\", _vm.mendingPoints))+\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingPointsHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingPointsHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingPointsHeader.vue?vue&type=template&id=a8ab28e8&scoped=true&\"\nimport script from \"./MendingPointsHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingPointsHeader.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MendingPointsHeader.vue?vue&type=style&index=0&id=a8ab28e8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a8ab28e8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.shouldDisplay)?_c('span',[(_vm.isModern)?_c('div',[(!_vm.smallCrunch)?_c('h3',{staticClass:\"l-spacing\"},[_vm._v(\" The world has collapsed due to excess antimatter. \")]):_vm._e(),_c('button',{class:{\n 'btn-big-crunch': true,\n 'btn-big-crunch--small': _vm.smallCrunch\n },on:{\"click\":_vm.handleClick}},[_vm._v(\" Big Crunch \")])]):_c('div',[_c('button',{class:{\n 'o-tab-btn': true,\n 'o-big-crunch-btn': true,\n 'l-classic__big-crunch-btn': true,\n 'l-classic__big-crunch-btn--overlay': _vm.smallCrunch\n },on:{\"click\":_vm.handleClick}},[_vm._v(\" Big Crunch \")]),(!_vm.smallCrunch)?_c('div',{staticClass:\"o-emptiness\"},[_vm._v(\" The world has collapsed due to excess of antimatter. \")]):_vm._e()])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BigCrunchButton.vue?vue&type=template&id=ff18554e&scoped=true&\"\nimport script from \"./BigCrunchButton.vue?vue&type=script&lang=js&\"\nexport * from \"./BigCrunchButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BigCrunchButton.vue?vue&type=style&index=0&id=ff18554e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ff18554e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('HeaderChallengeDisplay'),_c('HeaderChallengeEffects'),_c('HeaderPrestigeGroup'),(_vm.hasReality)?_c('GameSpeedDisplay'):_vm._e(),(_vm.hasReality)?_c('br'):_vm._e(),_c('HeaderBlackHole')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.canModifyBlackHoles)?_c('span',{staticClass:\"c-black-hole-header\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-max c-primary-btn--black-hole-header\",attrs:{\"onclick\":\"BlackHoles.togglePause()\"}},[_vm._v(\" \"+_vm._s(_vm.pauseText)+\" \")]),(_vm.canCharge)?_c('span',[_c('PrimaryButton',{class:_vm.chargingClassObject(),attrs:{\"onclick\":\"Enslaved.toggleStoreBlackHole()\"}},[(_vm.isCharging)?_c('span',[_vm._v(\" Stop Charging \")]):_c('span',[_vm._v(\" Charge \")])])],1):_vm._e(),(_vm.displaySingle)?_c('span',{staticClass:\"c-black-hole-status-text\",domProps:{\"innerHTML\":_vm._s('🌀:' + _vm.singleState)}}):_c('span',_vm._l((_vm.blackHoles),function(blackHole,i){return _c('HeaderBlackHoleStatusText',{key:'state' + i,attrs:{\"black-hole\":blackHole}})}),1),(_vm.canCharge)?_c('span',[_c('PrimaryButton',{staticClass:\"o-discharge-btn c-primary-btn--black-hole-header\",class:{ 'o-small-discharge-text': _vm.hasLongText },attrs:{\"onclick\":\"Enslaved.useStoredTime(false)\"}},[_vm._v(\" \"+_vm._s(_vm.dischargeText)+\" \")])],1):_vm._e(),(_vm.canAutoRelease)?_c('span',[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--buy-max c-primary-btn--black-hole-header\",attrs:{\"label\":\"Pulse:\"},model:{value:(_vm.isAutoReleasing),callback:function ($$v) {_vm.isAutoReleasing=$$v},expression:\"isAutoReleasing\"}})],1):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('span',[_vm._v(\" 🌀\"+_vm._s(_vm.id)+\":\"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.state)}})]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderBlackHoleStatusText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderBlackHoleStatusText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderBlackHoleStatusText.vue?vue&type=template&id=0cc13ba1&scoped=true&\"\nimport script from \"./HeaderBlackHoleStatusText.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderBlackHoleStatusText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0cc13ba1\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('PrimaryButton',_vm._b({on:{\"click\":function($event){return _vm.emitInput(!_vm.value)}}},'PrimaryButton',_vm.$attrs,false),[_vm._v(\" \"+_vm._s(_vm.displayText)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PrimaryToggleButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PrimaryToggleButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PrimaryToggleButton.vue?vue&type=template&id=3424c87c&\"\nimport script from \"./PrimaryToggleButton.vue?vue&type=script&lang=js&\"\nexport * from \"./PrimaryToggleButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderBlackHole.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderBlackHole.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderBlackHole.vue?vue&type=template&id=60b7c53e&scoped=true&\"\nimport script from \"./HeaderBlackHole.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderBlackHole.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderBlackHole.vue?vue&type=style&index=0&id=60b7c53e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"60b7c53e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{staticClass:\"l-game-header__challenge-text\"},[_c('span',{class:_vm.textClassObject(),on:{\"click\":_vm.textClicked}},[_vm._v(\" You are currently in \"+_vm._s(_vm.challengeDisplay)+\" \")]),(_vm.isInFailableEC)?_c('FailableEcText'):_vm._e(),_c('span',{staticClass:\"l-padding-line\"}),(_vm.showExit)?_c('PrimaryButton',{on:{\"click\":_vm.exitButtonClicked}},[_vm._v(\" \"+_vm._s(_vm.exitText)+\" \")]):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_vm._v(\" - \"),_c('span',{style:(_vm.textStyle)},[_vm._v(_vm._s(_vm.text))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FailableEcText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FailableEcText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FailableEcText.vue?vue&type=template&id=5d83f76e&scoped=true&\"\nimport script from \"./FailableEcText.vue?vue&type=script&lang=js&\"\nexport * from \"./FailableEcText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5d83f76e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderChallengeDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderChallengeDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderChallengeDisplay.vue?vue&type=template&id=71e60358&scoped=true&\"\nimport script from \"./HeaderChallengeDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderChallengeDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderChallengeDisplay.vue?vue&type=style&index=0&id=71e60358&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"71e60358\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.waitingforHint)?_c('div',[_vm._v(\" \"+_vm._s(_vm.enslavedText)+\" \")]):_vm._e(),(_vm.isInEffarig)?_c('div',[_vm._v(\" Game speed and multipliers are Dilated \"+_vm._s(_vm.effarigMultNerfText)+\" \"),_c('br'),_vm._v(\" Tickspeed is Dilated \"+_vm._s(_vm.effarigTickNerfText)+\" \")]):_vm._e(),(_vm.isInLaitela)?_c('div',[_vm._v(\" Entropy: \"+_vm._s(_vm.laitelaEntropy)+\" (\"+_vm._s(_vm.laitelaTimer)+\") \")]):_vm._e(),(_vm.isInMatterChallenge)?_c('div',[_vm._v(\" There is \"+_vm._s(_vm.format(_vm.matter, 2, 1))+\" matter. \")]):_vm._e(),(_vm.isChallengePowerVisible)?_c('div',[_vm._v(\" \"+_vm._s(_vm.challengePower)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderChallengeEffects.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderChallengeEffects.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderChallengeEffects.vue?vue&type=template&id=b2464992&scoped=true&\"\nimport script from \"./HeaderChallengeEffects.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderChallengeEffects.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b2464992\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-prestige-info-blocks\"},[_c('HeaderEternityContainer',{staticClass:\"l-game-header__eternity\"}),_c('HeaderCenterContainer',{staticClass:\"l-game-header__center\"}),_c('HeaderInfinityContainer',{staticClass:\"l-game-header__infinity\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.shouldDisplay)?_c('div',{staticClass:\"c-prestige-button-container\"},[_c('span',[_vm._v(\"You have \"),_c('span',{staticClass:\"c-game-header__antimatter\"},[_vm._v(_vm._s(_vm.format(_vm.antimatter, 2, 1)))]),_vm._v(\" antimatter.\")]),(_vm.hasRealityButton)?_c('div',{staticClass:\"c-reality-container\"},[_c('RealityCurrencyHeader'),(_vm.isDoomed)?_c('ArmageddonButton',{attrs:{\"is-header\":true}}):_c('RealityButton')],1):_c('div',[_vm._v(\" You are getting \"+_vm._s(_vm.format(_vm.antimatterPerSec, 2))+\" antimatter per second. \"),_c('br'),_c('HeaderTickspeedInfo')],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:_vm.buttonClassObject,on:{\"click\":_vm.manualArmageddon}},[(_vm.isHeader)?_c('span',[_vm._v(\"You cannot escape a Doomed Reality!\"),_c('br')]):_vm._e(),(!this.mendupg5)?_c('span',{staticClass:\"c-remnant-gain-display\"},[_vm._v(\" Armageddon for \"),_c('span',{staticClass:\"c-remnant-gain\"},[_vm._v(_vm._s(_vm.remnants))]),_vm._v(\" Remnants \")]):_vm._e(),(this.mendupg5)?_c('span',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-remnant-gain\"},[_vm._v(_vm._s(_vm.remnantsTotal))]),_vm._v(\" Remnants \")]):_vm._e(),_c('br'),_vm._v(\" Reality Shards \"),_c('span',{staticClass:\"c-reality-shard-gain\"},[_vm._v(_vm._s(_vm.format(_vm.realityShardGain, 2, 2)))]),_vm._v(\"/s \"),(!this.mendupg5)?_c('span',[_vm._v(\"➜\")]):_vm._e(),(!this.mendupg5)?_c('span',{staticClass:\"c-reality-shard-gain\"},[_vm._v(_vm._s(_vm.format(_vm.nextRealityShardGain, 2, 2)))]):_vm._e(),(!this.mendupg5)?_c('span',[_vm._v(\"/s\")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ArmageddonButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ArmageddonButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ArmageddonButton.vue?vue&type=template&id=8077c0a8&scoped=true&\"\nimport script from \"./ArmageddonButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ArmageddonButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ArmageddonButton.vue?vue&type=style&index=0&id=8077c0a8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8077c0a8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-reality-currency\"},[_vm._v(\" You have \"),_c('b',{class:_vm.resourceClass()},[_vm._v(\" \"+_vm._s(_vm.currencyValue)+\" \")]),_vm._v(\" \"+_vm._s(_vm.currencyName)+\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityCurrencyHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityCurrencyHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityCurrencyHeader.vue?vue&type=template&id=669bdb06&scoped=true&\"\nimport script from \"./RealityCurrencyHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityCurrencyHeader.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RealityCurrencyHeader.vue?vue&type=style&index=0&id=669bdb06&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"669bdb06\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('button',{staticClass:\"c-mending-button\",class:_vm.buttonClassObject,on:{\"click\":_vm.mend}},[(_vm.firstMend)?[_vm._v(\" There is another way... You need to Mend the Multiverse. \")]:(_vm.noMendBonus)?[_vm._v(\" Exit Doomed Reality, but get no Mend Rewards. \")]:(_vm.needDoom)?[_vm._v(\" Reach \"),_c('span',[_vm._v(_vm._s(_vm.formatNE(_vm.END, 2, 2)))]),_vm._v(\" antimatter in a Doomed Reality to Mend the Multiverse \")]:(!_vm.canMend)?[_vm._v(\" Reach \"),_c('span',[_vm._v(_vm._s(_vm.formatNE(_vm.END, 2, 2)))]),_vm._v(\" antimatter to Mend the Multiverse \")]:(_vm.isCorrupted)?[_vm._v(\" Make the Multiverse Friendly for \"+_vm._s(_vm.formatNE(_vm.frags, 0, 0))+\" Hostile Fragments \")]:[_vm._v(\" Mend the Multiverse for \"),_c('span',[_vm._v(_vm._s(_vm.formatNE(_vm.gainedMvR, 2)))]),_vm._v(\" Multiversal \"+_vm._s(_vm.pluralize(\"Remain\", _vm.gainedMvR))+\". (\"+_vm._s(_vm.format(_vm.MvRRate, 2, 2))+\" MvR/min) \")]],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingButton.vue?vue&type=template&id=4152d354&\"\nimport script from \"./MendingButton.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('br'),_vm._v(\" \"+_vm._s(_vm.perUpgrade)+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.tickspeedDisplay)+\" \"),_c('br'),_c('GameSpeedDisplay')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"c-gamespeed\"},[_c('span',[_vm._v(\" \"+_vm._s(_vm.baseText)+\" \")]),(_vm.isPulsing)?_c('span',[_vm._v(\"(\"),_c('i',{staticClass:\"fas fa-expand-arrows-alt u-fa-padding\"}),_vm._v(\" \"+_vm._s(_vm.pulseSpeedText)+\")\")]):_vm._e(),(_vm.pastGSSoftcap)?_c('span',[_c('br'),_vm._v(\" Due to instability, Game Speed past every \"+_vm._s(_vm.format(_vm.scOneStart))+\" is raised \"+_vm._s(_vm.formatPow(_vm.scOneEffect, 3, 3))+\" before pulsing. \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { GameDatabase } from \"./secret-formula/game-database\";\r\nimport { GameMechanicState } from \"./game-mechanics\";\r\n\r\nexport const Speedrun = {\r\n officialFixedSeed: 31337,\r\n unlock() {\r\n if (player.speedrun.isUnlocked) return;\r\n Modal.message.show(`You have unlocked Speedrun Mode! This allows you to start a new save file with some slight\r\n changes which can be helpful if you're trying to complete the game as quickly as possible. The option to\r\n start a Speedrun Save is now available in the Options tab, under Saving. Choosing to start a Speedrun Save\r\n will provide you with another modal with more in-depth information.`, {}, 3);\r\n player.speedrun.isUnlocked = true;\r\n },\r\n // Used to block the seed-changing modal from opening (other functions assume this is checked beforehand)\r\n canModifySeed() {\r\n return player.realities < 1;\r\n },\r\n modifySeed(key, seed) {\r\n player.speedrun.seedSelection = key;\r\n let newSeed;\r\n switch (key) {\r\n case SPEEDRUN_SEED_STATE.FIXED:\r\n player.reality.initialSeed = this.officialFixedSeed;\r\n player.speedrun.initialSeed = this.officialFixedSeed;\r\n return;\r\n case SPEEDRUN_SEED_STATE.RANDOM:\r\n // This gives seeds of roughly the same magnitude that the first-run Date.now() would give\r\n newSeed = Math.floor(1e13 * Math.random());\r\n player.reality.initialSeed = newSeed;\r\n player.speedrun.initialSeed = newSeed;\r\n return;\r\n case SPEEDRUN_SEED_STATE.PLAYER:\r\n player.reality.initialSeed = seed;\r\n player.speedrun.initialSeed = seed;\r\n return;\r\n default:\r\n throw new Error(\"Unrecognized speedrun seed setting option\");\r\n }\r\n },\r\n seedModeText(rec) {\r\n const record = rec ?? player.speedrun;\r\n switch (record.seedSelection) {\r\n case SPEEDRUN_SEED_STATE.UNKNOWN:\r\n return `No seed data (old save)`;\r\n case SPEEDRUN_SEED_STATE.FIXED:\r\n return `Official fixed seed (${record.initialSeed})`;\r\n case SPEEDRUN_SEED_STATE.RANDOM:\r\n return `Random seed (${record.initialSeed})`;\r\n case SPEEDRUN_SEED_STATE.PLAYER:\r\n return `Player seed (${record.initialSeed})`;\r\n default:\r\n throw new Error(\"Unrecognized speedrun seed option in seedModeText\");\r\n }\r\n },\r\n // If a name isn't given, choose a somewhat-likely-to-be-unique big number instead\r\n generateName(name) {\r\n if (name.trim() === \"\") {\r\n const id = Math.floor((1e7 - 1) * Math.random()) + 1;\r\n return `AD Player #${\"0\".repeat(6 - Math.floor(Math.log10(id)))}${id}`;\r\n }\r\n if (name.length > 40) return `${name.slice(0, 37)}...`;\r\n return name;\r\n },\r\n // Hard-resets the current save and puts it in a state ready to be \"unpaused\" once resources start being generated\r\n prepareSave(name) {\r\n // Carry all relevant post-completion variables over too\r\n NG.restartWithCarryover();\r\n\r\n player.speedrun.isUnlocked = true;\r\n player.speedrun.isActive = true;\r\n this.modifySeed(SPEEDRUN_SEED_STATE.FIXED);\r\n player.speedrun.name = name;\r\n\r\n // We make a few assumptions on settings which are likely to be changed for all speedrunners\r\n for (const key of Object.keys(player.options.confirmations)) player.options.confirmations[key] = false;\r\n player.options.confirmations.glyphSelection = true;\r\n for (const key of Object.keys(player.options.animations)) {\r\n if (typeof player.options.animations[key] === \"boolean\") player.options.animations[key] = false;\r\n }\r\n\r\n // A few achievements are given for free to mitigate weird strategies at the beginning of runs or unavoidable\r\n // timewalls for particularly fast/optimized runs\r\n Achievement(22).unlock();\r\n Achievement(35).unlock();\r\n Achievement(76).unlock();\r\n\r\n // Some time elapses after the reset and before the UI is actually ready, which ends up getting \"counted\" as offline\r\n player.speedrun.offlineTimeUsed = 0;\r\n GameStorage.save();\r\n },\r\n // Speedruns are initially paused until startTimer is called, which happens as soon as the player purchases a AD or\r\n // uses the Konami code. Until then, they're free to do whatever they want with the UI\r\n startTimer() {\r\n if (player.speedrun.hasStarted) return;\r\n player.speedrun.hasStarted = true;\r\n player.speedrun.startDate = Date.now();\r\n player.lastUpdate = Date.now();\r\n\r\n // This needs to be calculated \"live\" because using spentSTD includes any offline progress purchases too\r\n let currentSpent = 0;\r\n for (const purchase of ShopPurchase.all) {\r\n if (purchase.config.instantPurchase) continue;\r\n currentSpent += purchase.purchases * purchase.cost;\r\n }\r\n this.setSTDUse(ShopPurchaseData.isIAPEnabled && currentSpent > 0);\r\n },\r\n isPausedAtStart() {\r\n return player.speedrun.isActive && !player.speedrun.hasStarted;\r\n },\r\n // This needs to be here due to JS applying \"function scope\" to the player object within importing in storage.js,\r\n // which causes any direct changes done in storage.js to fall out of scope afterwards. We also don't want to change\r\n // this state at the beginning in case people want to share identical single-segment saves before starting the timer.\r\n setSegmented(state) {\r\n if (this.isPausedAtStart()) return;\r\n player.speedrun.isSegmented = state;\r\n },\r\n setSTDUse(state) {\r\n if (this.isPausedAtStart() || ShopPurchaseData.spentSTD === 0) return;\r\n player.speedrun.usedSTD = state;\r\n },\r\n mostRecentMilestone() {\r\n const newestTime = player.speedrun.records.max();\r\n if (newestTime === 0) return 0;\r\n return player.speedrun.records.indexOf(newestTime);\r\n }\r\n};\r\n\r\nclass SpeedrunMilestone extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.registerEvents(config.checkEvent, args => this.tryComplete(args));\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get isReached() {\r\n return player.speedrun.records[this.config.id] !== 0;\r\n }\r\n\r\n tryComplete(args) {\r\n if (!this.config.checkRequirement(args)) return;\r\n this.complete();\r\n }\r\n\r\n complete() {\r\n if (this.isReached || !player.speedrun.isActive) return;\r\n // Rounding slightly reduces filesize by removing weird float rounding\r\n player.speedrun.records[this.config.id] = Math.round(player.records.realTimePlayed);\r\n GameUI.notify.success(`Speedrun Milestone Reached: ${this.name}`);\r\n }\r\n}\r\n\r\nexport const SpeedrunMilestones = SpeedrunMilestone.createAccessor(GameDatabase.speedrunMilestones);\r\n","/* eslint-disable import/extensions */\r\nimport pako from \"pako/dist/pako.esm.mjs\";\r\n/* eslint-enable import/extensions */\r\n\r\n// Why the fuck is this here?\r\n// Well, we cannot adjust EXP_LIMIT outside of break_eternity.js\r\n// However, we need to adjust it since EXP_LIMIT is 9e15, not 1.79e308\r\n// The only way to do this is override the toString function with our own\r\n\r\nDecimal.prototype.toString = function () {\r\n if (isNaN(this.m) || isNaN(this.e)) {\r\n return \"NaN\";\r\n }\r\n\r\n if (this.e >= Infinity) {\r\n return this.m > 0 ? \"Infinity\" : \"-Infinity\";\r\n }\r\n\r\n if (this.e <= -Infinity || this.m === 0) {\r\n return \"0\";\r\n }\r\n\r\n if (this.e < 21 && this.e > -7) {\r\n return this.toNumber().toString();\r\n }\r\n\r\n const decimalOfE = new Decimal(this.e);\r\n\r\n if (decimalOfE.e > 20){\r\n const places = (decimalOfE.m.toString().split(\".\")[1] ?? \"\").length\r\n return `${this.m}e${(this.e >= 0 ? \"+\" : \"\")}${decimalOfE.m.toString().split(\".\")[0]}${decimalOfE.m.toString().split(\".\")[1] ?? \"\"}${\"0\".repeat(decimalOfE.e - places)}`\r\n }\r\n\r\n return this.m + \"e\" + (this.e >= 0 ? \"+\" : \"\") + this.e;\r\n};\r\n\r\nexport const GameSaveSerializer = {\r\n SaveType: \"devsave\",\r\n\r\n serialize(save) {\r\n const json = JSON.stringify(save, this.jsonConverter);\r\n return this.encodeText(json, this.SaveType);\r\n },\r\n // eslint-disable-next-line no-unused-vars\r\n jsonConverter(key, value) {\r\n if (value === Infinity) {\r\n return \"Infinity\";\r\n }\r\n if (value instanceof Set) {\r\n return Array.from(value.keys());\r\n }\r\n return value;\r\n },\r\n deserialize(data) {\r\n if (typeof data !== \"string\") return undefined;\r\n try {\r\n const json = this.decodeText(data, \"savefile\");\r\n // eslint-disable-next-line no-unused-vars\r\n return JSON.parse(json, (k, v) => ((v === Infinity) ? \"Infinity\" : v));\r\n } catch (e) {\r\n try {\r\n const json = this.decodeText(data, \"devsave\");\r\n return this.SaveType == \"devsave\" ? JSON.parse(json, (k, v) => ((v === Infinity) ? \"Infinity\" : v)) : \"devsave\";\r\n } catch (e) {\r\n return undefined;\r\n }\r\n }\r\n },\r\n // Define these now so we don't keep creating new ones, which vaguely seems bad.\r\n encoder: new TextEncoder(),\r\n decoder: new TextDecoder(),\r\n // These are magic strings that savefiles/automator scripts should start with.\r\n // Due to the way atob/btoa work, old saves (before the reality update and for\r\n // a significant part of its development) always started with eYJ even though\r\n // it wasn't explicitly added. If you want to make a mod of AD, you may want to\r\n // rename \"savefile\" to \"modless savefile\" or something and create a new\r\n // \"savefile\" or \"mod savefile\" property with a string like\r\n // \"AntimatterDimensions[mod name]SavefileFormatAAA\", so that people don't\r\n // confuse your saves with AD saves but can still import AD saves (this will\r\n // also require changing some other code slightly, particularly decode).\r\n startingString: {\r\n savefile: \"AntimatterDimensionsSavefileFormat\",\r\n \"devsave\": \"ADRedemptionTestingSavefileFormat\",\r\n \"automator script\": \"AntimatterDimensionsAutomatorScriptFormat\",\r\n \"automator data\": \"AntimatterDimensionsAutomatorDataFormat\",\r\n \"glyph filter\": \"AntimatterDimensionsGlyphFilterFormat\",\r\n },\r\n // The ending strings aren't as verbose so that we can save a little space.\r\n endingString: {\r\n savefile: \"EndOfSavefile\",\r\n \"devsave\": \"EndOfADRdevSavefile\",\r\n \"automator script\": \"EndOfAutomatorScript\",\r\n \"automator data\": \"EndOfAutomatorData\",\r\n \"glyph filter\": \"EndOfGlyphFilter\",\r\n },\r\n // This should always be three characters long, and should ideally go AAA, AAB, AAC, etc.\r\n // so that we can do inequality tests on it to compare versions (though skipping a version\r\n // shouldn't be a problem).\r\n version: \"AAB\",\r\n // Steps are given in encoding order.\r\n // Export and cloud save use the same steps because the maximum ~15% saving\r\n // from having them be different seems not to be worth it.\r\n // It's important that `this` is what it should be in these function calls\r\n // (encoder/decoded for the first element, window for the fourth)\r\n // which is why we shouldn't do e.g. { encode: encoder.encode, decode: encoder.decode }\r\n // In the fifth element, order of operations is important: we don't want to encode 0s we added in encoding\r\n // (i.e. + -> 0b -> 0ab is undesired) or to accidentally decode 0ac -> 0c -> / (slash)\r\n // when encoding says (as it should) 0c -> 0ac.\r\n // These functions contain the code that does different things in different versions.\r\n // Right now we only have code for steps to only apply in certain versions; add a condition to the step.\r\n // It wouldn't be too hard to allow steps to depend on version though.\r\n steps: [\r\n // This step transforms saves into unsigned 8-bit arrays, as pako requires.\r\n { encode: x => GameSaveSerializer.encoder.encode(x), decode: x => GameSaveSerializer.decoder.decode(x) },\r\n // This step is where the compression actually happens. The pako library works with unsigned 8-bit arrays.\r\n { encode: x => pako.deflate(x), decode: x => pako.inflate(x) },\r\n // This step converts from unsigned 8-bit arrays to strings with codepoints less than 256.\r\n // We need to do this outselves because GameSaveSerializer.decoder would give us unicode sometimes.\r\n {\r\n encode: x => Array.from(x).map(i => String.fromCharCode(i)).join(\"\"),\r\n decode: x => Uint8Array.from(Array.from(x).map(i => i.charCodeAt(0)))\r\n },\r\n // This step makes the characters in saves printable. At this point in the process, all characters\r\n // will already have codepoints less than 256 (from the previous step), so emoji in the original save\r\n // won't break this.\r\n { encode: x => btoa(x), decode: x => atob(x) },\r\n // This step removes + and /, because if they occur, you can double-click on a save and get\r\n // everything up to the first + or /, which can be hard to debug. We also remove = (always trailing)\r\n // because btoa just ignores it. These regex have no potentially-unicode characters, I think,\r\n // and they're applied to strings with just ASCII anyway, but I'm adding u to make Codeacy happy.\r\n {\r\n encode: x => x.replace(/=+$/gu, \"\").replace(/0/gu, \"0a\").replace(/\\+/gu, \"0b\").replace(/\\//gu, \"0c\"),\r\n decode: x => x.replace(/0b/gu, \"+\").replace(/0c/gu, \"/\").replace(/0a/gu, \"0\")\r\n },\r\n {\r\n encode: (x, type) => x + GameSaveSerializer.endingString[type],\r\n decode: (x, type) => x.slice(0, x.length - GameSaveSerializer.endingString[type].length),\r\n condition: version => version >= \"AAB\"\r\n }\r\n ],\r\n getSteps(type, version) {\r\n // This is a version marker, as well as indicating to players that this is from AD\r\n // and whether it's a save or automator script. We can change the last 3 letters\r\n // of the string savefiles start with from AAA to something else,\r\n // if we want a new version of savefile encoding.\r\n return this.steps.filter(i => (!i.condition) || i.condition(version)).concat({\r\n encode: x => `${GameSaveSerializer.startingString[type] + GameSaveSerializer.version}${x}`,\r\n decode: x => x.slice(GameSaveSerializer.startingString[type].length + 3)\r\n });\r\n },\r\n // Apply each step's encode function in encoding order.\r\n encodeText(text, type) {\r\n return this.getSteps(type, this.version).reduce((x, step) => step.encode(x, type), text);\r\n },\r\n // Apply each step's decode function, in decoding order (which is the reverse\r\n // of encoding order). We only do this if we recognize the string which tells\r\n // us the save version. If we don't see it, we assume the save's old and just\r\n // use atob. If you're adding a new savefile version, make sure its length is\r\n // three characters and alter the encoding/decoding functions as is described\r\n // in the comment above the definition of steps. If you're making a mod, then\r\n // add another case to this conditional. Old saves (before the reality update\r\n // and for a significant part of its development) always started with eYJ and\r\n // old automator scripts (where this function is also used) are very unlikely\r\n // to start with our magic string because it is longer than a few characters.\r\n decodeText(text, type) {\r\n if (text.startsWith(this.startingString[type])) {\r\n const len = this.startingString[type].length;\r\n const version = text.slice(len, len + 3);\r\n return this.getSteps(type, version).reduceRight((x, step) => step.decode(x, type), text);\r\n }\r\n return atob(text);\r\n }\r\n};\r\n","import { deepmergeAll } from \"@/utility/deepmerge\";\r\nimport { DC } from \"../constants\";\r\nimport { CorruptionData } from \"../corruption\";\r\n\r\n// WARNING: Don't use state accessors and functions from global scope here, that's not safe in long-term\r\nexport const migrations = {\r\n firstRealityMigration: 13,\r\n patches: {\r\n 1: player => {\r\n for (let i = 0; i < player.autobuyers.length; i++) {\r\n if (player.autobuyers[i] % 1 !== 0) {\r\n player.infinityPoints = player.infinityPoints.plus(player.autobuyers[i].cost - 1);\r\n }\r\n }\r\n player.autobuyers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\r\n },\r\n 2: player => {\r\n if (player.dimensionMultDecrease !== 10) {\r\n if (player.dimensionMultDecrease === 9) {\r\n player.dimensionMultDecrease = 10;\r\n player.dimensionMultDecreaseCost = 1e8;\r\n player.infinityPoints = player.infinityPoints.plus(1e8);\r\n }\r\n if (player.dimensionMultDecrease === 8) {\r\n player.dimensionMultDecrease = 10;\r\n player.dimensionMultDecreaseCost = 1e8;\r\n player.infinityPoints = player.infinityPoints.plus(2.1e9);\r\n }\r\n if (player.dimensionMultDecrease === 7) {\r\n player.dimensionMultDecrease = 10;\r\n player.dimensionMultDecreaseCost = 1e8;\r\n player.infinityPoints = player.infinityPoints.plus(4.21e10);\r\n }\r\n }\r\n },\r\n 5: player => {\r\n player.newsArray = [];\r\n },\r\n 9: player => {\r\n const achs = [];\r\n if (player.achievements.delete(\"r22\")) achs.push(\"r35\");\r\n if (player.achievements.delete(\"r35\")) achs.push(\"r76\");\r\n if (player.achievements.delete(\"r41\")) achs.push(\"r22\");\r\n if (player.achievements.delete(\"r76\")) achs.push(\"r41\");\r\n for (const id of achs) player.achievements.add(id);\r\n player.replicanti.intervalCost = player.replicanti.intervalCost.dividedBy(1e20);\r\n },\r\n 9.5: player => {\r\n if (player.timestudy.studies.includes(191)) player.timestudy.theorem = player.timestudy.theorem.plus(100);\r\n },\r\n 10: player => {\r\n if (player.timestudy.studies.includes(72)) {\r\n for (let i = 4; i < 8; i++) {\r\n player[`infinityDimension${i}`].amount = Decimal.div(player[`infinityDimension${i}`].amount,\r\n Sacrifice.totalBoost.pow(0.02));\r\n }\r\n }\r\n },\r\n 12: player => {\r\n const timeDimStartCosts = [null, 1, 5, 100, 1000];\r\n const timeDimCostMults = [null, 3, 9, 27, 81];\r\n // Updates TD costs to harsher scaling\r\n if (player.timeDimension1) {\r\n for (let i = 1; i < 5; i++) {\r\n if (new Decimal(\"1e300\").lt(player[`timeDimension${i}`].cost)) {\r\n player[`timeDimension${i}`].cost = Decimal.pow(\r\n timeDimCostMults[i] * 2.2,\r\n player[`timeDimension${i}`].bought\r\n ).times(timeDimStartCosts[i]);\r\n }\r\n }\r\n }\r\n },\r\n 12.1: player => {\r\n for (const achievement of player.achievements) {\r\n if (achievement.includes(\"s\") && achievement.length <= 3) {\r\n player.achievements.splice(player.achievements.indexOf(\"r36\"), 1);\r\n break;\r\n }\r\n }\r\n },\r\n 13: player => {\r\n // 12.3 is currently on live, will be updated to 13 after release\r\n\r\n // Last update version check, fix emoji/cancer issue,\r\n // change diff value from 1/10 of a second to 1/1000 of a second, delete pointless properties from player\r\n // And all other kinds of stuff\r\n player.realTimePlayed = player.totalTimePlayed;\r\n player.thisReality = player.totalTimePlayed;\r\n player.thisInfinityRealTime = player.thisInfinityTime * 100;\r\n player.thisEternityRealTime = player.thisEternity * 100;\r\n player.thisRealityRealTime = player.thisReality * 100;\r\n player.thisInfinityLastBuyTime = player.thisInfinityTime * 100;\r\n for (let i = 0; i < 10; i++) {\r\n player.lastTenEternities[i][2] = player.lastTenEternities[i][0];\r\n player.lastTenRuns[i][2] = player.lastTenRuns[i][0];\r\n }\r\n player.options.UIType == 'Classic';\r\n window.uiChoiceModalInterval = setInterval(() => {\r\n if (GameUI.initialized) {\r\n Modal.uiChoice.show();\r\n clearInterval(window.uiChoiceModalInterval);\r\n }\r\n }, 1000);\r\n\r\n migrations.normalizeTimespans(player);\r\n migrations.convertAutobuyerMode(player);\r\n migrations.fixChallengeIds(player);\r\n migrations.adjustMultCosts(player);\r\n migrations.convertAchivementsToNumbers(player);\r\n migrations.adjustGameCreatedTime(player);\r\n migrations.moveSavedStudyTrees(player);\r\n migrations.convertEPMult(player);\r\n migrations.moveChallengeInfo(player);\r\n migrations.infinitiedConversion(player);\r\n migrations.adjustWhy(player);\r\n migrations.removeAchPow(player);\r\n migrations.adjustSacrificeConfirmation(player);\r\n migrations.migrateNotation(player);\r\n migrations.fixAutobuyers(player);\r\n migrations.removeAutoIPProperties(player);\r\n migrations.adjustAchievementVars(player);\r\n migrations.uniformDimensions(player);\r\n migrations.removeEternityChallGoal(player);\r\n migrations.removeTickspeed(player);\r\n migrations.removePostC3Reward(player);\r\n migrations.renameMoney(player);\r\n migrations.moveAutobuyers(player);\r\n migrations.convertEternityCountToDecimal(player);\r\n migrations.renameDimboosts(player);\r\n migrations.migrateConfirmations(player);\r\n migrations.removeOtherTickspeedProps(player);\r\n migrations.renameNewsOption(player);\r\n migrations.removeDimensionCosts(player);\r\n migrations.changeC8Handling(player);\r\n migrations.convertAchievementsToBits(player);\r\n migrations.setNoInfinitiesOrEternitiesThisReality(player);\r\n migrations.setTutorialState(player);\r\n migrations.migrateLastTenRuns(player);\r\n migrations.migrateIPGen(player);\r\n migrations.renameCloudVariable(player);\r\n migrations.standardizeUncompletedTimes(player);\r\n migrations.makeRecords(player);\r\n migrations.deleteOldRecords(player);\r\n migrations.migrateAutobuyers(player);\r\n migrations.migratePlayerVars(player);\r\n migrations.consolidateAuto(player);\r\n migrations.convertTimeTheoremPurchases(player);\r\n migrations.deleteDimboostBulk(player);\r\n migrations.deleteFloatingTextOption(player);\r\n migrations.refactorDoubleIPRebuyable(player);\r\n migrations.infMultNameConversion(player);\r\n migrations.convertNews(player);\r\n migrations.etercreqConversion(player);\r\n migrations.moveTS33(player);\r\n migrations.addBestPrestigeCurrency(player);\r\n migrations.migrateTheme(player);\r\n },\r\n\r\n // ALL MIGRATIONS BELOW THIS POINT ARE POST-RELEASE FOR THE REALITY UPDATE! THE PRECEEDING MIGRATION (13) IS\r\n // THE FIRST MIGRATION WHICH DOES THE MAJORITY OF DATA FORMAT CHANGES\r\n\r\n 14: player => {\r\n migrations.reworkBHPulsing(player);\r\n\r\n // Added glyph auto-sort by level; in order to keep the button state cycling consistent with the sort buttons' UI\r\n // order, AUTO_SORT_MODE had to be changed to insert LEVEL mode at the top and shift the others down. This\r\n // makes sure that older saves maintain the same settings after this shift\r\n if (player.reality.autoSort !== 0) player.reality.autoSort++;\r\n },\r\n 15: player => {\r\n // Added additional resource tracking in last 10 prestige records and adjusted data format to be more consistent\r\n // by reordering to be [game time, real time, prestige currency, prestige count, challenge, ...(other resources)]\r\n // Also fixes a migration bug where values could be undefined or null by assigning defaults when necessary\r\n for (let i = 0; i < 10; i++) {\r\n if (player.records.lastTenInfinities) {\r\n const infRec = player.records.lastTenInfinities[i];\r\n player.records.recentInfinities[i] = [\r\n infRec[0] ?? Number.MAX_VALUE,\r\n Number(infRec[3] ?? Number.MAX_VALUE),\r\n new Decimal(infRec[1] ?? 1),\r\n new Decimal(infRec[2] ?? 1),\r\n \"\"\r\n ];\r\n }\r\n\r\n if (player.records.lastTenEternities) {\r\n const eterRec = player.records.lastTenEternities[i];\r\n player.records.recentEternities[i] = [\r\n eterRec[0] ?? Number.MAX_VALUE,\r\n Number(eterRec[3] ?? Number.MAX_VALUE),\r\n new Decimal(eterRec[1] ?? 1),\r\n new Decimal(eterRec[2] ?? 1),\r\n \"\",\r\n new Decimal(0)\r\n ];\r\n }\r\n\r\n if (player.records.lastTenRealities) {\r\n const realRec = player.records.lastTenRealities[i];\r\n player.records.recentRealities[i] = [\r\n realRec[0] ?? Number.MAX_VALUE,\r\n Number(realRec[3] ?? Number.MAX_VALUE),\r\n new Decimal(realRec[1] ?? 1),\r\n realRec[2] ?? 1,\r\n \"\",\r\n 0,\r\n 0\r\n ];\r\n }\r\n }\r\n\r\n delete player.records.lastTenInfinities;\r\n delete player.records.lastTenEternities;\r\n delete player.records.lastTenRealities;\r\n delete player.options.showLastTenResourceGain;\r\n\r\n // Fixes a desync which occasionally causes unique > total seen due to total not being updated properly\r\n if (player.news.seen) {\r\n let unique = 0;\r\n for (const bitmaskArray of Object.values(player.news.seen)) {\r\n for (const bitmask of bitmaskArray) {\r\n unique += countValuesFromBitmask(bitmask);\r\n }\r\n }\r\n player.news.totalSeen = Math.max(player.news.totalSeen, unique);\r\n }\r\n },\r\n 16: player => {\r\n // Migrate perk layouts to the new format which has more than a boolean toggle\r\n player.options.perkLayout = player.options.fixedPerkStartingPos ? 0 : 1;\r\n delete player.options.fixedPerkStartingPos;\r\n\r\n // This won't preserve *current* glyph choices, but is necessary to give uniformity moving forward. We need to\r\n // prevent either seed from being 0 due to it being a special case that freezes up the RNG code\r\n player.reality.initialSeed = player.reality.seed;\r\n if (player.reality.initialSeed === 0) player.reality.initialSeed = 1;\r\n\r\n // In order to add cross-run speedrun time tracking without inflating savefile size too much, there was a\r\n // refactor which changed the format from an object with a bunch of named props, to an array of times using\r\n // the key-id pairs in GameDatabase.speedrunMilestones\r\n const newArr = Array.repeat(0, 26);\r\n for (const entry of GameDatabase.speedrunMilestones) {\r\n newArr[entry.id] = player.speedrun.records[entry.key];\r\n }\r\n player.speedrun.records = newArr;\r\n player.speedrun.seedSelection = SPEEDRUN_SEED_STATE.UNKNOWN;\r\n\r\n // This contains redundant info and was never cleaned up during the initial implementation\r\n delete player.speedrun.milestones;\r\n\r\n // Add more glyph presets (older version had only 5, now default is 7)\r\n while (player.reality.glyphs.sets.length < 7) {\r\n player.reality.glyphs.sets.push({ name: \"\", glyphs: [] });\r\n }\r\n },\r\n 17: player => {\r\n // Moved all multiplier tab attributes to be scoped, and added replicanti subtab in the middle to preserve\r\n // progression order - shift it up as needed in order to keep players on the same subtab\r\n const oldSubtab = player.options.currentMultiplierSubtab ?? 0;\r\n player.options.multiplierTab.currTab = oldSubtab + (oldSubtab > 5 ? 1 : 0);\r\n delete player.options.currentMultiplierSubtab;\r\n },\r\n 18: player => {\r\n // These two props are technically redundant in their values, but we always update both in tandem in order\r\n // to ensure a consistent UI sort order. However, before this version the sort order didn't exist, so we have\r\n // to immediately fill it\r\n player.reality.automator.constantSortOrder = Object.keys(player.reality.automator.constants);\r\n },\r\n 19: player => {\r\n // This was removed in favor of the more generic \"Exit challenge\" modal, but a few references were missing and\r\n // this prop was left in the save file instead of being cleaned up\r\n delete player.options.confirmations.resetCelestial;\r\n },\r\n 20: player => {\r\n // GLYPH FILTER INTERNAL FORMAT REFACTOR\r\n // For the case of importing a save created before the reality update, many of these props are undefined due to\r\n // having never been in the player object in the first place. In this case we fill with defaults, which are mostly\r\n // zeroes. Otherwise we do our best to transfer over all the data we can\r\n\r\n // Move all the filter props out of celestial/effarig scope and into reality/glyph scope, renaming a few of them.\r\n const effarig = player.celestials.effarig;\r\n player.reality.glyphs.filter = {\r\n select: effarig?.mode ?? 0,\r\n trash: effarig?.glyphTrashMode ?? 0,\r\n simple: effarig?.simpleEffectCount ?? 0\r\n };\r\n\r\n // There are a few big things going on in this loop which are annotated within, but this largely transfers all the\r\n // old filter data into the new prop\r\n const reducedFilter = {};\r\n const effectDB = Object.values(GameDatabase.reality.glyphEffects);\r\n // The previous filter format had entries for companion/reality/cursed glyphs, which are removed by only copying\r\n // the types in ALCHEMY_BASIC_GLYPH_TYPES. Any errors which show up elsewhere for have also been resolved\r\n for (const type of ALCHEMY_BASIC_GLYPH_TYPES) {\r\n const oldData = effarig.glyphScoreSettings?.types[type];\r\n const typeEffects = effectDB\r\n .filter(t => t.glyphTypes.includes(type))\r\n .sort((a, b) => a.bitmaskIndex - b.bitmaskIndex);\r\n\r\n // Two of these effects were renamed to be shorter\r\n reducedFilter[type] = {\r\n rarity: oldData?.rarityThreshold ?? 0,\r\n score: oldData?.scoreThreshold ?? 0,\r\n effectCount: oldData?.effectCount ?? 0,\r\n };\r\n\r\n // These all used to stored as { effectKey: value } where effectKey is the ID string \"powerpow\" or similar,\r\n // but have now been refactored to be stored as a bitmask and Number array instead. This significantly shortens\r\n // filter data for serialization into glyph filter export strings\r\n reducedFilter[type].specifiedMask = 0;\r\n reducedFilter[type].effectScores = [];\r\n if (!oldData) continue;\r\n for (const effect of typeEffects) {\r\n // The way we filter to generate typeEffects also gives an undefined entry which needs to be ignored\r\n if (!effect) continue;\r\n reducedFilter[type].specifiedMask |= oldData.effectChoices[effect.id] ? 1 << effect.bitmaskIndex : 0;\r\n reducedFilter[type].effectScores.push(oldData.effectScores[effect.id]);\r\n }\r\n }\r\n player.reality.glyphs.filter.types = reducedFilter;\r\n\r\n // Remove the old data after copying it all over\r\n delete player.celestials.effarig.glyphScoreSettings;\r\n delete player.celestials.effarig.glyphTrashMode;\r\n\r\n // EFFARIG GLYPH INTERNAL CHANGE\r\n // In order to display all effarig glyph effects in \"celestial order\" we needed to either special-case a ton\r\n // of UI code, or migrate all existing saves - the latter option seems safer and less likely to lead to repeated\r\n // bug reports related to Vue reactivity. Worst case scenario if something is incorrect here is that some people\r\n // will have some slightly weird saves. We don't need to modify the glyph filter settings here because these are\r\n // migrated above by their effect keys; this properly places them into the correct bit positions automatically\r\n const updateBitmask = bitmask => {\r\n const modifiedBits = [20, 21, 22].map(b => 1 << b).sum();\r\n const foundBits = [20, 21, 22].map(b => (bitmask & (1 << b)) !== 0);\r\n foundBits.push(foundBits.shift());\r\n let newSubmask = 0;\r\n for (let bit = 20; bit <= 22; bit++) {\r\n if (foundBits[bit - 20]) newSubmask |= 1 << bit;\r\n }\r\n return (bitmask & ~modifiedBits) | newSubmask;\r\n };\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n for (const glyph of allGlyphs) glyph.effects = updateBitmask(glyph.effects);\r\n\r\n // We also need to update glyphs that appear in the statistics tab records too\r\n const glyphSetProps = [\"RMSet\", \"RMminSet\", \"glyphLevelSet\", \"bestEPSet\", \"speedSet\", \"iMCapSet\", \"laitelaSet\"];\r\n for (const prop of glyphSetProps) {\r\n const glyphSet = player.records.bestReality[prop];\r\n for (const glyph of glyphSet) glyph.effects = updateBitmask(glyph.effects);\r\n }\r\n\r\n // Glyph light/dark formatting was refactored as well; these values are in reference to the GLYPH_BG_SETTING enum\r\n player.options.glyphBG = player.options.lightGlyphs ? 1 : 2;\r\n delete player.options.lightGlyphs;\r\n },\r\n 21: player => {\r\n // Added tracking for unlocked ECs even after they re-lock - makes old save data consistent\r\n for (let ec = 1; ec <= 12; ec++) {\r\n if (player.eternityChalls[`eterc${ec}`] > 0) player.reality.unlockedEC |= 1 << ec;\r\n }\r\n\r\n // Added max RM tracking for cel1 records - also for data consistency (though not 100% accurate)\r\n player.reality.maxRM = new Decimal(player.reality.realityMachines);\r\n },\r\n 22: player => {\r\n // Added 3 new perk layouts, inserted before blob\r\n if (player.options.perkLayout > 2) player.options.perkLayout += 3;\r\n\r\n // Changed recent prestige tab to allow for more than just gain rate and absolute gain\r\n player.options.statTabResources = player.options.showRecentRate ? 1 : 0;\r\n delete player.options.showRecentRate;\r\n\r\n // Added iM cap value to recent realities\r\n for (let index = 0; index < player.records.recentRealities.length; index++) {\r\n player.records.recentRealities[index].push(0);\r\n }\r\n\r\n // This seems to have slipped through in some edge cases due to an old botched migration\r\n if (player.options.themeClassic === undefined) player.options.themeClassic = \"Normal\";\r\n if (player.options.themeModern === undefined) player.options.themeModern = \"Normal\";\r\n\r\n // The glyph uniformity change did a few things to migrate old seeds as best it could, but it also had the\r\n // side-effect of relying on player initialization and deepmerge for randomization in many cases. This made\r\n // all existing pre-reality saves get initialized with a seed of 1, which we forcibly randomize here.\r\n // A \"valid\" save can potentially get messed up, but this is exceedingly rare and impossible to detect\r\n const newSeed = Math.floor(Date.now() * Math.random() + 1);\r\n if (player.reality.seed === 1) player.reality.seed = newSeed;\r\n if (player.reality.initialSeed === 1) player.reality.initialSeed = newSeed;\r\n },\r\n 23: player => {\r\n // We missed presets in effarig format migration\r\n const updateBitmask = bitmask => {\r\n const modifiedBits = [20, 21, 22].map(b => 1 << b).sum();\r\n const foundBits = [20, 21, 22].map(b => (bitmask & (1 << b)) !== 0);\r\n foundBits.push(foundBits.shift());\r\n let newSubmask = 0;\r\n for (let bit = 20; bit <= 22; bit++) {\r\n if (foundBits[bit - 20]) newSubmask |= 1 << bit;\r\n }\r\n return (bitmask & ~modifiedBits) | newSubmask;\r\n };\r\n for (const preset of player.reality.glyphs.sets) {\r\n for (const glyph of preset.glyphs) {\r\n glyph.effects = updateBitmask(glyph.effects);\r\n }\r\n }\r\n },\r\n 32: player => {\r\n //this is the 8-16-23 Redemption Release\r\n\r\n player.auto.dilationUpgrades.all[11] = { isActive: false, lastTick: 0};\r\n player.auto.dilationUpgrades.all[12] = { isActive: false, lastTick: 0};\r\n player.auto.dilationUpgrades.all[13] = { isActive: false, lastTick: 0};\r\n player.requirementChecks.mending = {\r\n isEnd: false\r\n };\r\n player.records.thisMend = {\r\n time: Number.MAX_VALUE,\r\n realTime: Number.MAX_VALUE,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n maxEP: DC.D0,\r\n maxRM: DC.D0,\r\n maxiM: 0,\r\n maxRem: 0,\r\n };\r\n player.records.bestMend = {\r\n time: Number.MAX_VALUE,\r\n realTime: Number.MAX_VALUE,\r\n };\r\n player.speedrun.isUnlocked = true;\r\n player.mends = DC.D0,\r\n player.mending = {\r\n mendingPoints: DC.D0,\r\n upgradeBits: 0,\r\n reqLock: {\r\n mending: 0,\r\n },\r\n rebuyables: {\r\n 1: 0,\r\n },\r\n };\r\n player.celestials.destroyer = {\r\n quoteBits: 0,\r\n };\r\n player.options.confirmations.mending = true;\r\n player.options.awayProgress = { \r\n mends: true,\r\n mendingPoints: true\r\n };\r\n player.mendingPoints = DC.D0;\r\n player.mends = DC.D0;\r\n player.mendingUpgrades = new Set();\r\n player.mvrmultUpgrades = 0;\r\n },\r\n 34: player =>{\r\n player.options.hiddenTabBits = 0;\r\n player.mendingPoints = player.mending.mendingPoints;\r\n },\r\n 35: player =>{\r\n if (MendingMilestone.three.isReached){\r\n player.celestials.ra.unlockBits += 2097152;\r\n }\r\n },\r\n 36: player => {\r\n player.auto.dilationUpgrades.all = Array.range(0, 3).concat(Array.range(11, 14)).map(() => ({\r\n isActive: false,\r\n lastTick: 0,\r\n }))\r\n player.mends = new Decimal(player.mends)\r\n player.mendingPoints = new Decimal(player.mendingPoints)\r\n },\r\n 40: player => {\r\n if (MendingUpgrade(2).isPurchased){\r\n player.mendingPoints = player.mendingPoints.add(1);\r\n }\r\n if (MendingUpgrade(3).isPurchased) {\r\n player.mendingPoints = player.mendingPoints.add(4);\r\n }\r\n if (MendingUpgrade(5).isPurchased) {\r\n player.mendingPoints = player.mendingPoints.add(10);\r\n }\r\n if (MendingUpgrade(9).isPurchased) {\r\n player.mendingPoints = player.mendingPoints.add(12);\r\n }\r\n },\r\n 41: player => {\r\n if (player.mends.gte(8)) {\r\n player.celestials.teresa.perkShop = [20, 20, 14, 6, 0, 0]\r\n }\r\n player.auto.musicglyph = {\r\n isUnlocked: false,\r\n isActive: false,\r\n }\r\n },\r\n 42: player => {\r\n player.options.showHintText.mendingUpgrades = true;\r\n },\r\n 43: player =>{\r\n if(player.records.thisMend.time < 1e308) player.records.thisMend.time = new Decimal(1e308);\r\n },\r\n 45: player =>{\r\n player.auto.mending = {\r\n mode: 0,\r\n amount: DC.D1,\r\n interval: 100,\r\n increaseWithMult: true,\r\n time: 1,\r\n xHighest: DC.D1,\r\n isActive: false,\r\n lastTick: 0\r\n };\r\n },\r\n 46: player =>{\r\n player.celestials.kohler = {\r\n quoteBits: 0,\r\n };\r\n player.reality.warped = false;\r\n player.mending = {\r\n rebuyables: {\r\n 1: Math.max(0, player.mending.rebuyables[1]),\r\n 6: 0,\r\n 11: 0,\r\n 16: 0,\r\n },\r\n upgradeBits: Math.max(0, player.mending.upgradeBits)\r\n };\r\n },\r\n 47: player => {\r\n //for some reason doing this in dev-migrations threw errors, so idk\r\n player.auto.nrru = {\r\n isActive: false,\r\n lastTick: 0\r\n }\r\n player.auto.nriu = {\r\n isActive: false,\r\n lastTick: 0\r\n } \r\n player.options.UIType = player.options.newUI ? \"Modern\" : \"Classic\"\r\n ui.view.UIType = player.options.UIType\r\n },\r\n 50: player => {\r\n player.celestials.kohler = {\r\n run: false,\r\n }\r\n },\r\n 51: player => {\r\n player.requirementChecks.mend = {\r\n mmeleven: 8\r\n }\r\n },\r\n 51.001: player => {\r\n player.celestials.laitela.dimensions = player.celestials.laitela.dimensions.concat(Array.range(0, 4).map(() =>\r\n ({\r\n amount: DC.D1,\r\n intervalUpgrades: 0,\r\n powerDMUpgrades: 0,\r\n powerDEUpgrades: 0,\r\n timeSinceLastUpdate: 0,\r\n ascensionCount: 0\r\n })))\r\n },\r\n 51.002: player => {\r\n player.mending.corruption = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] //10 here incase we add more, only 5 are used\r\n },\r\n 51.003: player => {\r\n player.mending.corruptedFragments = 0\r\n },\r\n 51.004: player => {\r\n player.mending.corruptionChallenge = {\r\n corruptedMend: false,\r\n records: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\r\n }\r\n },\r\n 51.005: player => {\r\n player.mending.corruptionChallenge.recordScore = 0\r\n },\r\n 51.006: player => {\r\n player.mending.corruptNext = false\r\n },\r\n 51.007: player => {\r\n player.mending.spentCF = 0;\r\n },\r\n 51.008: player =>{\r\n //apparently these can be real numbers, but I'm sticking to integers for now)\r\n player.corruptedFragments = player.mending.corruptedFragments.toDecimal();\r\n player.mending.warpRebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n };\r\n player.mending.corruptionRebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n };\r\n player.mending.warpUpgradeBits = 0;\r\n player.mending.corruptionUpgradeBits = 0;\r\n player.mending.warpUpgReqs = 0;\r\n player.mending.corruptionUpgReqs = 0;\r\n player.mending.reqLock = {\r\n mending: 0,\r\n warp: 0,\r\n corruption: 0,\r\n }\r\n },\r\n 51.009: player =>{\r\n player.records.totalTimePlayed = new Decimal(player.records.totalTimePlayed);\r\n player.records.thisInfinity.time = new Decimal(player.records.thisInfinity.time);\r\n player.records.thisEternity.time = new Decimal(player.records.thisEternity.time);\r\n player.records.thisReality.time = new Decimal(player.records.thisReality.time);\r\n player.records.thisMend.time = new Decimal(player.records.thisMend.time);\r\n },\r\n 51.010: player =>{\r\n player.celestials.ra.upgradeBits = 0,\r\n player.celestials.ra.raPoints = DC.D0,\r\n player.celestials.ra.rebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n }\r\n },\r\n 51.011: player =>{\r\n player.records.bestMend.time = new Decimal(player.records.bestMend.time);\r\n player.expoBlackHole = Array.range(0, 1).map(id => ({\r\n id,\r\n intervalUpgrades: 0,\r\n powerUpgrades: 0,\r\n durationUpgrades: 0,\r\n phase: 0,\r\n active: false,\r\n unlocked: false,\r\n activations: 0,\r\n })),\r\n player.expoBlackHolePause = false;\r\n player.expoBlackHoleAutoPauseMode = 0;\r\n player.expoBlackHolePauseTime = 0;\r\n player.expoBlackHoleNegative = 1;\r\n },\r\n 51.012: player =>{\r\n player.celestials.ra.permanentMemories = {\r\n ra2: false,\r\n lai50: false,\r\n lai65: false,\r\n };\r\n },\r\n 51.013: player =>{\r\n player.records.thisReality.remWithoutGG = 0;\r\n player.records.bestReality.remWithoutGG = 0;\r\n },\r\n 51.014: player => {\r\n player.galBoostPoints = new Decimal(0);\r\n },\r\n 51.015: player => {\r\n for (let i = 0; i < 11 /* 11 here because c1 doesnt count */ ; i++) {\r\n player.challenge.normal.bestTimes[i] = new Decimal(player.challenge.normal.bestTimes[i])\r\n }\r\n for (let i = 0; i < 8; i++) {\r\n player.challenge.infinity.bestTimes[i] = new Decimal(player.challenge.infinity.bestTimes[i])\r\n }\r\n },\r\n 51.016: player => {\r\n delete player.mending.spentCF\r\n },\r\n 51.017: player => {\r\n player.celestials.ra.rebuyables = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n player.reality.achTimer = new Decimal(player.reality.achTimer)\r\n },\r\n 51.018: player => {\r\n player.reality.glyphs.sac.power = new Decimal(player.reality.glyphs.sac.power);\r\n player.reality.glyphs.sac.infinity = new Decimal(player.reality.glyphs.sac.infinity);\r\n player.reality.glyphs.sac.time = new Decimal(player.reality.glyphs.sac.time);\r\n player.reality.glyphs.sac.replication = new Decimal(player.reality.glyphs.sac.replication);\r\n player.reality.glyphs.sac.dilation = new Decimal(player.reality.glyphs.sac.dilation);\r\n player.reality.glyphs.sac.effarig = new Decimal(player.reality.glyphs.sac.effarig);\r\n player.reality.glyphs.sac.reality = new Decimal(player.reality.glyphs.sac.reality);\r\n },\r\n 51.019: player => {\r\n player.celestials.v.runUnlocks = player.celestials.v.runUnlocks.concat(Array.range(0, 18).map(() => (0)));\r\n player.celestials.v.goalReductionSteps = player.celestials.v.goalReductionSteps.concat(Array.range(0, 18).map(() => (0)));\r\n player.celestials.v.runGlyphs = player.celestials.v.runGlyphs.concat(Array.range(0, 18).map(() =>([])));\r\n player.celestials.v.runRecords = player.celestials.v.runRecords.concat(Array.range(0, 18).map(() =>(0)));\r\n player.celestials.v.wantsSuperFlipped = false;\r\n },\r\n 51.020: player => {\r\n if (player.celestials.v.wantsSuperFlipped) {\r\n player.celestials.v.flip = V_FLIP.SUPER;\r\n } else if (player.celestials.v.wantsFlipped) {\r\n player.celestials.v.flip = V_FLIP.HARD;\r\n } else {\r\n player.celestials.v.flip = V_FLIP.NORMAL;\r\n }\r\n delete player.celestials.v.wantsSuperFlipped;\r\n delete player.celestials.v.wantsFlipped;\r\n },\r\n 51.021: player => {\r\n //player.auto.singCap.multiplier = 0; exm why this still exist--sxy\r\n },\r\n 51.022: player => {\r\n player.isHoldingLClick = false;\r\n player.celestials.laitela.holdStart = 0;\r\n player.celestials.laitela.heldTier = 0;\r\n player.celestials.laitela.heldType = \"\";\r\n },\r\n 51.023: player => {\r\n player.celestials.ra.rebuyables = {\r\n weakenTeresaScaling: 0,\r\n weakenEffarigScaling: 0,\r\n weakenEnslavedScaling: 0,\r\n weakenVScaling: 0,\r\n weakenRaScaling: 0,\r\n weakenLaitelaScaling: 0,\r\n weakenPelleScaling: 0,\r\n incTeresaXPGain: 0,\r\n incEffarigXPGain: 0,\r\n incEnslavedXPGain: 0,\r\n incVXPGain: 0,\r\n incRaXPGain: 0,\r\n incLaitelaXPGain: 0,\r\n incPelleXPGain: 0,\r\n };\r\n },\r\n 51.024: player => {\r\n player.auto.singCap.multiplier = 1000;\r\n },\r\n 51.025: player => {\r\n player.celestials.kohler.unlockProgress = 0;\r\n },\r\n 51.026: player => {\r\n player.celestials.kohler.unlockMilestone = [false,false,false,false,false,false,false]\r\n }\r\n},\r\n\r\n normalizeTimespans(player) {\r\n player.realTimePlayed *= 100;\r\n player.totalTimePlayed *= 100;\r\n player.thisInfinityTime *= 100;\r\n player.thisEternity *= 100;\r\n player.thisReality *= 100;\r\n player.bestInfinityTime = player.bestInfinityTime === 9999999999\r\n ? 999999999999\r\n : player.bestInfinityTime * 100;\r\n player.bestEternity = player.bestEternity === 9999999999\r\n ? 999999999999\r\n : player.bestEternity * 100;\r\n for (let i = 0; i < 10; i++) {\r\n player.lastTenEternities[i][0] *= 100;\r\n player.lastTenRuns[i][0] *= 100;\r\n // Nowadays this would be player.lastTenEternities[i][3] *= 100;\r\n // However, this migration is done so early that it was player.lastTenEternities[i][2]\r\n // (but late enough that player.lastTenEternities[i][2] is defined).\r\n player.lastTenEternities[i][2] *= 100;\r\n player.lastTenRuns[i][2] *= 100;\r\n }\r\n\r\n if (player.challengeTimes) {\r\n player.challengeTimes = player.challengeTimes.map(e => e * 100);\r\n }\r\n if (player.infchallengeTimes) {\r\n player.infchallengeTimes = player.infchallengeTimes.map(e => e * 100);\r\n }\r\n },\r\n\r\n convertAutobuyerMode(player) {\r\n for (let i = 0; i < 8; i++) {\r\n const autobuyer = player.autobuyers[i];\r\n if (autobuyer % 1 !== 0) {\r\n if (autobuyer.target < 10) {\r\n autobuyer.target = AUTOBUYER_MODE.BUY_SINGLE;\r\n } else {\r\n autobuyer.target = AUTOBUYER_MODE.BUY_10;\r\n }\r\n }\r\n }\r\n const tickspeedAutobuyer = player.autobuyers[8];\r\n if (tickspeedAutobuyer % 1 !== 0) {\r\n if (tickspeedAutobuyer.target < 10) {\r\n tickspeedAutobuyer.target = AUTOBUYER_MODE.BUY_SINGLE;\r\n } else {\r\n tickspeedAutobuyer.target = AUTOBUYER_MODE.BUY_MAX;\r\n }\r\n }\r\n },\r\n\r\n fixChallengeIds(player) {\r\n let wasFucked = false;\r\n function unfuckChallengeId(id) {\r\n if (!id.startsWith(\"challenge\")) return id;\r\n wasFucked = true;\r\n const legacyId = parseInt(id.substr(9), 10);\r\n const config = GameDatabase.challenges.normal.find(c => c.legacyId === legacyId);\r\n return `challenge${config.id}`;\r\n }\r\n player.currentChallenge = unfuckChallengeId(player.currentChallenge);\r\n player.challenges = player.challenges.map(unfuckChallengeId);\r\n if (wasFucked && player.challengeTimes) {\r\n player.challengeTimes = GameDatabase.challenges.normal\r\n .slice(1)\r\n .map(c => player.challengeTimes[c.legacyId - 2]);\r\n }\r\n },\r\n\r\n adjustMultCosts(player) {\r\n if (player.tickSpeedMultDecreaseCost !== undefined) {\r\n player.infinityRebuyables[0] = Math.round(Math.log(player.tickSpeedMultDecreaseCost / 3e6) / Math.log(5));\r\n }\r\n if (player.dimensionMultDecreaseCost !== undefined) {\r\n player.infinityRebuyables[1] = Math.round(Math.log(player.dimensionMultDecreaseCost / 1e8) / Math.log(5e3));\r\n }\r\n delete player.tickSpeedMultDecrease;\r\n delete player.tickSpeedMultDecreaseCost;\r\n delete player.dimensionMultDecrease;\r\n delete player.dimensionMultDecreaseCost;\r\n },\r\n\r\n convertAchivementsToNumbers(player) {\r\n if (player.achievements.length > 0 && player.achievements.every(e => typeof e === \"number\")) return;\r\n const old = player.achievements;\r\n // In this case, player.secretAchievements should be an empty set\r\n player.achievements = new Set();\r\n player.secretAchievements = new Set();\r\n for (const oldId of old) {\r\n const achByName = GameDatabase.achievements.normal.find(a => a.name === oldId);\r\n if (achByName !== undefined) {\r\n // Legacy format\r\n player.achievements.add(achByName.id);\r\n continue;\r\n }\r\n const newId = parseInt(oldId.slice(1), 10);\r\n if (isNaN(newId)) throw new Error(`Could not parse achievement id ${oldId}`);\r\n if (oldId.startsWith(\"r\")) {\r\n if (GameDatabase.achievements.normal.find(a => a.id === newId) === undefined) {\r\n throw new Error(`Unrecognized achievement ${oldId}`);\r\n }\r\n player.achievements.add(newId);\r\n } else if (oldId.startsWith(\"s\")) {\r\n if (GameDatabase.achievements.secret.find(a => a.id === newId) === undefined) {\r\n throw new Error(`Unrecognized secret achievement ${newId}`);\r\n }\r\n player.secretAchievements.add(newId);\r\n }\r\n }\r\n },\r\n\r\n adjustGameCreatedTime(player) {\r\n player.gameCreatedTime = player.lastUpdate - player.realTimePlayed;\r\n },\r\n\r\n moveSavedStudyTrees(player) {\r\n for (let num = 1; num <= 3; ++num) {\r\n const tree = localStorage.getItem(`studyTree${num}`);\r\n if (tree) player.timestudy.presets[num - 1].studies = tree;\r\n }\r\n },\r\n\r\n convertEPMult(player) {\r\n if (player.epmult === undefined) return;\r\n const mult = new Decimal(player.epmult);\r\n delete player.epmultCost;\r\n delete player.epmult;\r\n // The multiplier should never be less than 1, but we don't want to break anyone's save\r\n if (mult.lte(1)) {\r\n player.epmultUpgrades = 0;\r\n return;\r\n }\r\n player.epmultUpgrades = mult.log(5);\r\n },\r\n\r\n moveChallengeInfo(player) {\r\n function parseChallengeName(name) {\r\n if (name.startsWith(\"challenge\")) {\r\n return { type: \"normal\", id: parseInt(name.slice(9), 10) };\r\n }\r\n if (name.startsWith(\"postc\")) {\r\n return { type: \"infinity\", id: parseInt(name.slice(5), 10) };\r\n }\r\n if (name !== \"\") throw new Error(`Unrecognized challenge ID ${name}`);\r\n return null;\r\n }\r\n if (player.challengeTimes) {\r\n for (let i = 0; i < player.challengeTimes.length; ++i) {\r\n player.challenge.normal.bestTimes[i] = Math.min(player.challenge.normal.bestTimes[i],\r\n player.challengeTimes[i]);\r\n }\r\n delete player.challengeTimes;\r\n }\r\n if (player.infchallengeTimes) {\r\n for (let i = 0; i < player.infchallengeTimes.length; ++i) {\r\n player.challenge.infinity.bestTimes[i] = Math.min(player.challenge.infinity.bestTimes[i],\r\n player.infchallengeTimes[i]);\r\n }\r\n delete player.infchallengeTimes;\r\n }\r\n if (player.currentChallenge !== undefined) {\r\n const saved = parseChallengeName(player.currentChallenge);\r\n delete player.currentChallenge;\r\n if (saved) {\r\n player.challenge[saved.type].current = saved.id;\r\n }\r\n }\r\n if (player.challenges) {\r\n for (const fullID of player.challenges) {\r\n const parsed = parseChallengeName(fullID);\r\n player.challenge[parsed.type].completedBits |= 1 << parsed.id;\r\n }\r\n delete player.challenges;\r\n }\r\n if (player.currentEternityChall !== undefined) {\r\n const saved = player.currentEternityChall;\r\n delete player.currentEternityChall;\r\n if (saved.startsWith(\"eterc\")) {\r\n player.challenge.eternity.current = parseInt(saved.slice(5), 10);\r\n } else if (saved !== \"\") throw new Error(`Unrecognized eternity challenge ${saved}`);\r\n }\r\n if (player.eternityChallUnlocked !== undefined) {\r\n player.challenge.eternity.unlocked = player.eternityChallUnlocked;\r\n delete player.eternityChallUnlocked;\r\n }\r\n delete player.challengeTarget;\r\n },\r\n\r\n adjustWhy(player) {\r\n player.requirementChecks.permanent.singleTickspeed = player.why ?? 0;\r\n delete player.why;\r\n },\r\n\r\n adjustAchievementVars(player) {\r\n player.requirementChecks.eternity.onlyAD1 = player.dead;\r\n delete player.dead;\r\n player.requirementChecks.eternity.onlyAD8 = player.dimlife;\r\n delete player.dimlife;\r\n // Just initialize all these to false, which is basically always correct.\r\n player.requirementChecks.reality.noAM = false;\r\n player.requirementChecks.eternity.noAD1 = false;\r\n player.requirementChecks.infinity.noAD8 = false;\r\n // If someone has 0 max replicanti galaxies, they can't have gotten any.\r\n // If they have more than 0 max replicanti galaxies, we don't give them\r\n // the benefit of the doubt.\r\n player.requirementChecks.eternity.noRG = player.replicanti.gal === 0;\r\n if (\r\n player.timestudy.theorem.gt(0) ||\r\n player.timestudy.studies.length > 0 ||\r\n player.challenge.eternity.unlocked !== 0\r\n ) player.requirementChecks.reality.noPurchasedTT = false;\r\n if (player.sacrificed.gt(0)) player.requirementChecks.infinity.noSacrifice = false;\r\n player.requirementChecks.permanent.emojiGalaxies = player.spreadingCancer;\r\n delete player.spreadingCancer;\r\n },\r\n\r\n removeAchPow(player) {\r\n delete player.achPow;\r\n },\r\n\r\n adjustSacrificeConfirmation(player) {\r\n if (player.options.sacrificeConfirmation !== undefined) {\r\n player.options.confirmations.sacrifice = player.options.sacrificeConfirmation;\r\n delete player.options.sacrificeConfirmation;\r\n }\r\n },\r\n\r\n migrateNotation(player) {\r\n const notation = player.options.notation;\r\n if (notation === undefined) {\r\n player.options.notation = \"Standard\";\r\n }\r\n const notationMigration = {\r\n \"Mixed\": \"Mixed scientific\",\r\n \"Default\": \"Brackets\",\r\n \"Emojis\": \"Cancer\"\r\n };\r\n if (notationMigration[notation] !== undefined) {\r\n player.options.notation = notationMigration[notation];\r\n }\r\n },\r\n\r\n fixAutobuyers(player) {\r\n for (let i = 0; i < 12; i++) {\r\n if (player.autobuyers[i] % 1 !== 0 && player.autobuyers[i].target % 1 !== 0) {\r\n player.autobuyers[i].target = AUTOBUYER_MODE.BUY_SINGLE;\r\n }\r\n\r\n if (\r\n player.autobuyers[i] % 1 !== 0 &&\r\n (player.autobuyers[i].bulk === undefined ||\r\n isNaN(player.autobuyers[i].bulk) ||\r\n player.autobuyers[i].bulk === null)\r\n ) {\r\n player.autobuyers[i].bulk = 1;\r\n }\r\n }\r\n if (typeof player.autobuyers[9] !== \"number\" && typeof player.autobuyers[9].bulk !== \"number\") {\r\n player.autobuyers[9].bulk = 1;\r\n }\r\n if (\r\n player.autobuyers[11] % 1 !== 0 &&\r\n player.autobuyers[11].priority !== undefined &&\r\n player.autobuyers[11].priority !== null &&\r\n player.autobuyers[11].priority !== \"undefined\"\r\n ) {\r\n player.autobuyers[11].priority = new Decimal(player.autobuyers[11].priority);\r\n }\r\n },\r\n\r\n removeAutoIPProperties(player) {\r\n delete player.autoIP;\r\n delete player.autoTime;\r\n },\r\n\r\n removeEternityChallGoal(player) {\r\n delete player.eternityChallGoal;\r\n },\r\n\r\n removeTickspeed(player) {\r\n delete player.tickspeed;\r\n player.tickSpeedCost = new Decimal(1000);\r\n player.tickspeedMultiplier = new Decimal(10);\r\n },\r\n\r\n removeOtherTickspeedProps(player) {\r\n delete player.tickSpeedCost;\r\n delete player.tickspeedMultiplier;\r\n },\r\n\r\n renameNewsOption(player) {\r\n player.options.news.enabled = !player.options.newsHidden;\r\n delete player.options.newsHidden;\r\n },\r\n\r\n removeDimensionCosts(player) {\r\n for (const dimension of player.dimensions.antimatter) {\r\n delete dimension.cost;\r\n delete dimension.costMultiplier;\r\n }\r\n },\r\n\r\n renameTickspeedPurchaseBumps(player) {\r\n if (player.chall9TickspeedPurchaseBumps !== undefined) {\r\n player.chall9TickspeedCostBumps = player.chall9TickspeedPurchaseBumps;\r\n delete player.chall9TickspeedPurchaseBumps;\r\n }\r\n },\r\n\r\n removePostC3Reward(player) {\r\n delete player.postC3Reward;\r\n },\r\n\r\n renameMoney(player) {\r\n player.antimatter = new Decimal(player.money);\r\n player.totalAntimatter = new Decimal(player.totalmoney);\r\n delete player.money;\r\n delete player.totalmoney;\r\n },\r\n\r\n uniformDimensions(player) {\r\n for (let tier = 1; tier <= 8; tier++) {\r\n const name = [null, \"first\", \"second\", \"third\", \"fourth\", \"fifth\", \"sixth\", \"seventh\", \"eight\"][tier];\r\n const oldProps = {\r\n cost: `${name}Cost`,\r\n amount: `${name}Amount`,\r\n bought: `${name}Bought`,\r\n pow: `${name}Pow`\r\n };\r\n const dimension = player.dimensions.antimatter[tier - 1];\r\n dimension.cost = new Decimal(player[oldProps.cost]);\r\n dimension.amount = new Decimal(player[oldProps.amount]);\r\n dimension.bought = player[oldProps.bought];\r\n if (player.costmultipliers) {\r\n dimension.costMultiplier = new Decimal(player.costMultipliers[tier - 1]);\r\n }\r\n delete player[oldProps.cost];\r\n delete player[oldProps.amount];\r\n delete player[oldProps.bought];\r\n delete player[oldProps.pow];\r\n }\r\n delete player.costMultipliers;\r\n\r\n if (player.infinityDimension1) {\r\n for (let tier = 1; tier <= 8; tier++) {\r\n const dimension = player.dimensions.infinity[tier - 1];\r\n const oldName = `infinityDimension${tier}`;\r\n const old = player[oldName];\r\n dimension.cost = new Decimal(old.cost);\r\n dimension.amount = new Decimal(old.amount);\r\n dimension.bought = old.bought;\r\n dimension.baseAmount = old.baseAmount;\r\n dimension.isUnlocked = player.infDimensionsUnlocked[tier - 1];\r\n delete player[oldName];\r\n }\r\n delete player.infDimensionsUnlocked;\r\n }\r\n\r\n if (player.timeDimension1) {\r\n for (let tier = 1; tier <= 8; tier++) {\r\n const dimension = player.dimensions.time[tier - 1];\r\n const oldName = `timeDimension${tier}`;\r\n const old = player[oldName];\r\n if (old !== undefined) {\r\n dimension.cost = new Decimal(old.cost);\r\n dimension.amount = new Decimal(old.amount);\r\n dimension.bought = old.bought;\r\n delete player[oldName];\r\n }\r\n }\r\n }\r\n },\r\n\r\n moveAutobuyers(player) {\r\n if (\r\n player.autobuyers[11] % 1 !== 0 &&\r\n player.autobuyers[11].priority !== undefined &&\r\n player.autobuyers[11].priority !== null &&\r\n player.autobuyers[11].priority !== \"undefined\"\r\n ) {\r\n player.autobuyers[11].priority = new Decimal(player.autobuyers[11].priority);\r\n }\r\n\r\n for (let i = 0; i < 8; i++) {\r\n const old = player.autobuyers[i];\r\n if (old % 1 === 0) continue;\r\n const autobuyer = player.auto.antimatterDims.all[i];\r\n autobuyer.cost = old.cost;\r\n autobuyer.interval = old.interval;\r\n autobuyer.bulk = old.bulk;\r\n autobuyer.mode = old.target;\r\n autobuyer.priority = old.priority;\r\n autobuyer.isActive = old.isOn;\r\n autobuyer.lastTick = player.realTimePlayed;\r\n }\r\n\r\n if (player.autobuyers[8] % 1 !== 0) {\r\n const old = player.autobuyers[8];\r\n const autobuyer = player.auto.tickspeed;\r\n autobuyer.cost = old.cost;\r\n autobuyer.interval = old.interval;\r\n autobuyer.mode = old.target;\r\n autobuyer.priority = old.priority;\r\n autobuyer.isActive = old.isOn;\r\n autobuyer.lastTick = player.realTimePlayed;\r\n }\r\n\r\n if (player.autobuyers[9] % 1 !== 0) {\r\n const old = player.autobuyers[9];\r\n const autobuyer = player.auto.dimBoost;\r\n autobuyer.cost = old.cost;\r\n autobuyer.interval = old.interval;\r\n autobuyer.maxDimBoosts = old.priority;\r\n autobuyer.galaxies = player.overXGalaxies;\r\n autobuyer.bulk = old.bulk;\r\n autobuyer.buyMaxInterval = old.bulk;\r\n autobuyer.isActive = old.isOn;\r\n autobuyer.lastTick = player.realTimePlayed;\r\n }\r\n\r\n delete player.overXGalaxies;\r\n\r\n if (player.autobuyers[10] % 1 !== 0) {\r\n const old = player.autobuyers[10];\r\n const autobuyer = player.auto.galaxy;\r\n autobuyer.cost = old.cost;\r\n autobuyer.interval = old.interval;\r\n autobuyer.maxGalaxies = old.priority;\r\n autobuyer.buyMaxInterval = old.bulk;\r\n autobuyer.buyMax = old.bulk > 0;\r\n autobuyer.isActive = old.isOn;\r\n autobuyer.lastTick = player.realTimePlayed;\r\n }\r\n\r\n if (player.autobuyers[11] % 1 !== 0) {\r\n const old = player.autobuyers[11];\r\n const autobuyer = player.auto.bigCrunch;\r\n autobuyer.cost = old.cost;\r\n autobuyer.interval = old.interval;\r\n autobuyer.mode = [\"amount\", \"time\", \"relative\"].indexOf(player.autoCrunchMode);\r\n const condition = new Decimal(old.priority);\r\n switch (player.autoCrunchMode) {\r\n case \"amount\":\r\n autobuyer.amount = condition;\r\n break;\r\n case \"time\":\r\n autobuyer.time = condition.lt(Decimal.NUMBER_MAX_VALUE) ? condition.toNumber() : autobuyer.time;\r\n break;\r\n case \"relative\":\r\n autobuyer.xHighest = condition;\r\n break;\r\n }\r\n autobuyer.isActive = old.isOn;\r\n autobuyer.lastTick = player.realTimePlayed;\r\n }\r\n\r\n delete player.autoCrunchMode;\r\n delete player.autobuyers;\r\n\r\n if (player.autoSacrifice && player.autoSacrifice % 1 !== 0) {\r\n const old = player.autoSacrifice;\r\n const autobuyer = player.auto.sacrifice;\r\n autobuyer.multiplier = new Decimal(old.priority);\r\n autobuyer.isActive = old.isOn;\r\n }\r\n\r\n delete player.autoSacrifice;\r\n\r\n if (player.eternityBuyer !== undefined) {\r\n const old = player.eternityBuyer;\r\n const autobuyer = player.auto.eternity;\r\n // Development saves have additional modes\r\n if (player.autoEternityMode === undefined) {\r\n autobuyer.time = Number(old.limit);\r\n }\r\n autobuyer.isActive = old.isOn;\r\n }\r\n\r\n delete player.eternityBuyer;\r\n },\r\n\r\n convertNews(player) {\r\n if (player.newsArray === undefined) {\r\n player.newsArray = [];\r\n } else {\r\n player.newsArray = player.newsArray.map(x => (typeof(x) === \"number\" ? `a${x}` : x));\r\n }\r\n const oldNewsArray = new Set(player.newsArray);\r\n player.news = {};\r\n player.news.seen = {};\r\n player.news.specialTickerData = {\r\n uselessNewsClicks: 0,\r\n paperclips: 0,\r\n newsQueuePosition: 1000,\r\n eiffelTowerChapter: 0\r\n };\r\n\r\n // This loop is copied more or less straight out of NewsHandler.addSeenNews with the extraneous comments and\r\n // spacing removed. There was something strange with variable scoping that was causing player.news.seen to be\r\n // updated within NewsHandler, but then immediately becoming empty again once we were back at this level of\r\n // function calls (ie. out of the scope of NewsHandler). Sloppy, but nevertheless it does seem to work.\r\n const maskLength = NewsHandler.BITS_PER_MASK;\r\n for (const id of oldNewsArray) {\r\n const groups = id.match(/([a-z]+)(\\d+)/u);\r\n const type = groups[1];\r\n const number = parseInt(groups[2], 10);\r\n if (!player.news.seen[type]) player.news.seen[type] = [];\r\n while (maskLength * player.news.seen[type].length < number) player.news.seen[type].push(0);\r\n player.news.seen[type][Math.floor(number / maskLength)] |= 1 << (number % maskLength);\r\n }\r\n\r\n player.news.totalSeen = NewsHandler.uniqueTickersSeen;\r\n delete player.newsArray;\r\n },\r\n\r\n convertEternityCountToDecimal(player) {\r\n player.eternities = new Decimal(player.eternities);\r\n player.reality.partEternitied = new Decimal(player.reality.partEternitied);\r\n },\r\n\r\n renameDimboosts(player) {\r\n player.dimensionBoosts = player.resets;\r\n delete player.resets;\r\n },\r\n\r\n migrateConfirmations(player) {\r\n player.options.confirmations.challenges = !player.options.challConf;\r\n delete player.options.challConf;\r\n player.options.confirmations.eternity = player.options.eternityconfirm;\r\n delete player.options.eternityconfirm;\r\n\r\n // This did nothing on live and continues to do nothing...?\r\n delete player.tickDecrease;\r\n },\r\n\r\n changeC8Handling(player) {\r\n player.chall8TotalSacrifice = Decimal.pow(player.chall11Pow, 2);\r\n delete player.chall11Pow;\r\n },\r\n\r\n convertAchievementsToBits(player) {\r\n // Also switches achievement positions\r\n // So far there've been three swaps\r\n // (1) a three-way swap of zero deaths, 1 million is a lot, and antitables\r\n // (2) a two-way swap of costco sells dimboosts now and 8 nobody got time for that\r\n // (3) a two-way swap of long lasting relationship and eternities are the new infinity\r\n const swaps = { \"4,3\": \"6,4\", \"6,4\": \"7,7\", \"7,7\": \"4,3\",\r\n \"10,1\": \"11,7\", \"11,7\": \"10,1\", \"11,3\": \"12,4\", \"12,4\": \"11,3\" };\r\n const convertAchievementArray = (newAchievements, oldAchievements, isSecret) => {\r\n for (const oldId of oldAchievements) {\r\n let row = Math.floor(oldId / 10);\r\n let column = oldId % 10;\r\n if (!isSecret && [row, column].join(\",\") in swaps) {\r\n [row, column] = swaps[[row, column].join(\",\")].split(\",\");\r\n }\r\n newAchievements[row - 1] |= (1 << (column - 1));\r\n }\r\n // Handle the changed achievement \"No DLC Required\" correctly (otherwise saves could miss it).\r\n if (!isSecret && (player.infinityUpgrades.size >= 16 || player.eternities.gt(0) || player.realities > 0)) {\r\n newAchievements[3] |= 1;\r\n } else {\r\n newAchievements[3] &= ~1;\r\n }\r\n\r\n // \"Professional Bodybuilder\" (s38) was changed and shouldn't be migrated\r\n if (isSecret) {\r\n newAchievements[2] &= ~128;\r\n }\r\n };\r\n\r\n player.achievementBits = Array.repeat(0, 15);\r\n convertAchievementArray(player.achievementBits, player.achievements, false);\r\n delete player.achievements;\r\n\r\n player.secretAchievementBits = Array.repeat(0, 4);\r\n convertAchievementArray(player.secretAchievementBits, player.secretAchievements, true);\r\n delete player.secretAchievements;\r\n },\r\n\r\n setNoInfinitiesOrEternitiesThisReality(player) {\r\n player.requirementChecks.reality.noInfinities = player.infinities.eq(0) && player.eternities.eq(0);\r\n player.requirementChecks.reality.noEternities = player.eternities.eq(0);\r\n },\r\n\r\n setTutorialState(player) {\r\n if (player.infinities.gt(0) || player.eternities.gt(0) || player.realities > 0 || player.galaxies > 0) {\r\n player.tutorialState = 4;\r\n } else if (player.dimensionBoosts > 0) player.tutorialState = TUTORIAL_STATE.GALAXY;\r\n },\r\n\r\n migrateLastTenRuns(player) {\r\n // Move infinities before time in infinity, and make them Decimal.\r\n // I know new Decimal(x).toNumber() can't actually be the best way of converting a value\r\n // that might be either Decimal or number to number, but it's the best way I know.\r\n player.lastTenRuns = player.lastTenRuns.map(\r\n x => [x[0], x[1], new Decimal(x[3]), new Decimal(x[2]).toNumber()]);\r\n // Put in a default value of 1 for eternities.\r\n player.lastTenEternities = player.lastTenEternities.map(\r\n x => [x[0], x[1], new Decimal(1), new Decimal(x[2]).toNumber()]);\r\n },\r\n\r\n migrateIPGen(player) {\r\n player.infinityRebuyables[2] = player.offlineProd / 5;\r\n delete player.offlineProd;\r\n delete player.offlineProdCost;\r\n },\r\n\r\n renameCloudVariable(player) {\r\n player.options.cloudEnabled = player.options.cloud;\r\n delete player.options.cloud;\r\n },\r\n\r\n standardizeUncompletedTimes(player) {\r\n if (player.bestInfinityTime === 999999999999) player.bestInfinityTime = Number.MAX_VALUE;\r\n if (player.bestInfinityRealTime === 999999999999) player.bestInfinityRealTime = Number.MAX_VALUE;\r\n if (player.bestEternity === 999999999999) player.bestEternity = Number.MAX_VALUE;\r\n for (let i = 0; i < player.challenge.normal.bestTimes.length; i++) {\r\n if (player.challenge.normal.bestTimes[i] === 2678400000) player.challenge.normal.bestTimes[i] = Number.MAX_VALUE;\r\n }\r\n for (let i = 0; i < player.challenge.infinity.bestTimes.length; i++) {\r\n if (player.challenge.infinity.bestTimes[i] === 2678400000) {\r\n player.challenge.infinity.bestTimes[i] = Number.MAX_VALUE;\r\n }\r\n }\r\n for (let i = 0; i < 10; i++) {\r\n if (player.lastTenRuns[i][0] === 2678400000) player.lastTenRuns[i][0] = Number.MAX_VALUE;\r\n if (player.lastTenRuns[i][3] === 26784000) player.lastTenRuns[i][3] = Number.MAX_VALUE;\r\n if (player.lastTenEternities[i][0] === 2678400000) player.lastTenEternities[i][0] = Number.MAX_VALUE;\r\n if (player.lastTenEternities[i][3] === 26784000) player.lastTenEternities[i][3] = Number.MAX_VALUE;\r\n }\r\n },\r\n\r\n makeRecords(player) {\r\n player.records.gameCreatedTime = player.gameCreatedTime;\r\n player.records.totalTimePlayed = player.totalTimePlayed;\r\n player.records.realTimePlayed = player.realTimePlayed;\r\n player.records.totalAntimatter = new Decimal(player.totalAntimatter);\r\n player.records.lastTenInfinities = player.lastTenRuns;\r\n player.records.lastTenEternities = player.lastTenEternities;\r\n for (let i = 0; i < 10; i++) {\r\n player.records.lastTenInfinities[i][1] = new Decimal(player.lastTenRuns[i][1]);\r\n player.records.lastTenEternities[i][1] = new Decimal(player.lastTenEternities[i][1]);\r\n }\r\n player.records.thisInfinity.time = player.thisInfinityTime;\r\n player.records.thisInfinity.realTime = player.thisInfinityTime;\r\n player.records.bestInfinity.time = player.bestInfinityTime;\r\n player.records.thisEternity.time = player.thisEternity;\r\n player.records.thisEternity.realTime = player.thisEternity;\r\n player.records.bestEternity.time = player.bestEternity;\r\n player.records.thisReality.time = player.thisReality;\r\n player.records.thisReality.realTime = player.thisReality;\r\n },\r\n\r\n deleteOldRecords(player) {\r\n delete player.gameCreatedTime;\r\n delete player.totalTimePlayed;\r\n delete player.realTimePlayed;\r\n delete player.totalAntimatter;\r\n delete player.lastTenRuns;\r\n delete player.lastTenEternities;\r\n delete player.thisInfinityTime;\r\n delete player.bestInfinityTime;\r\n delete player.thisEternity;\r\n delete player.bestEternity;\r\n delete player.thisReality;\r\n },\r\n\r\n migrateAutobuyers(player) {\r\n player.auto.autobuyerOn = player.options.autobuyerOn;\r\n\r\n delete player.options.bulkOn;\r\n delete player.options.autobuyerOn;\r\n },\r\n\r\n migratePlayerVars(player) {\r\n player.replicanti.boughtGalaxyCap = player.replicanti.gal;\r\n player.dilation.totalTachyonGalaxies = player.dilation.freeGalaxies;\r\n\r\n delete player.replicanti.gal;\r\n delete player.dilation.freeGalaxies;\r\n },\r\n\r\n consolidateAuto(player) {\r\n for (let i = 0; i < 8; i++) {\r\n player.auto.infinityDims.all[i].isActive = player.infDimBuyers[i];\r\n }\r\n for (let i = 0; i < 3; i++) {\r\n player.auto.replicantiUpgrades.all[i].isActive = player.replicanti.auto[i];\r\n }\r\n player.auto.replicantiGalaxies.isActive = player.replicanti.galaxybuyer;\r\n player.auto.ipMultBuyer.isActive = player.infMultBuyer;\r\n\r\n delete player.infDimBuyers;\r\n delete player.auto.infDimTimer;\r\n delete player.replicanti.galaxybuyer;\r\n delete player.replicanti.auto;\r\n delete player.auto.repUpgradeTimer;\r\n delete player.infMultBuyer;\r\n },\r\n\r\n convertTimeTheoremPurchases(player) {\r\n player.timestudy.amBought = new Decimal(player.timestudy.amcost).exponent / 20000 - 1;\r\n player.timestudy.ipBought = new Decimal(player.timestudy.ipcost).exponent / 100;\r\n player.timestudy.epBought = Math.round(new Decimal(player.timestudy.epcost).log2());\r\n\r\n delete player.timestudy.amcost;\r\n delete player.timestudy.ipcost;\r\n delete player.timestudy.epcost;\r\n },\r\n\r\n infinitiedConversion(player) {\r\n player.infinities = new Decimal(player.infinitied);\r\n player.infinitiesBanked = new Decimal(player.infinitiedBank);\r\n\r\n delete player.infinitied;\r\n delete player.infinitiedBank;\r\n },\r\n\r\n deleteDimboostBulk(player) {\r\n delete player.auto.dimBoost.bulk;\r\n if (player.infinityUpgrades.delete(\"bulkBoost\")) {\r\n player.infinityUpgrades.add(\"autobuyMaxDimboosts\");\r\n }\r\n },\r\n\r\n removePriority(player) {\r\n const dims = player.auto.antimatterDims.all ?? player.auto.antimatterDims;\r\n for (let i = 0; i < 8; i++) {\r\n delete dims[i].priority;\r\n }\r\n delete player.auto.tickspeed.priority;\r\n },\r\n\r\n deleteFloatingTextOption(player) {\r\n delete player.options.animations.floatingText;\r\n },\r\n\r\n refactorDoubleIPRebuyable(player) {\r\n // A bit of a hack, but needs to be done this way to not trigger the non-Decimal assignment crash check code\r\n const purchases = new Decimal(player.infMult).log2();\r\n delete player.infMult;\r\n player.infMult = Math.round(purchases);\r\n delete player.infMultCost;\r\n },\r\n\r\n deletePostChallUnlocked(player) {\r\n delete player.postChallUnlocked;\r\n },\r\n\r\n infMultNameConversion(player) {\r\n player.IPMultPurchases = player.infMult;\r\n delete player.infMult;\r\n },\r\n\r\n etercreqConversion(player) {\r\n if (player.etercreq) player.challenge.eternity.requirementBits |= 1 << player.etercreq;\r\n delete player.etercreq;\r\n },\r\n\r\n moveTS33(player) {\r\n if (player.timestudy.studies.includes(33) && !player.timestudy.studies.includes(22)) {\r\n player.timestudy.studies.splice(player.timestudy.studies.indexOf(33), 1);\r\n player.timestudy.theorem = new Decimal(player.timestudy.theorem).plus(2);\r\n }\r\n },\r\n\r\n addBestPrestigeCurrency(player) {\r\n player.records.thisReality.maxEP = player.eternityPoints;\r\n player.records.bestReality.bestEP = player.eternityPoints;\r\n player.records.thisEternity.maxIP = player.infinityPoints;\r\n player.records.thisReality.maxIP = player.infinityPoints;\r\n },\r\n\r\n migrateTheme(player) {\r\n player.options.themeClassic = player.options.theme === undefined\r\n ? \"Normal\"\r\n : player.options.theme;\r\n delete player.options.themes;\r\n delete player.options.secretThemeKey;\r\n },\r\n\r\n // This change removed the ability to adjust stored time rate after Ra-Nameless 10, instead forcing it to be 99%\r\n reworkBHPulsing(player) {\r\n delete player.celestials.enslaved.storedFraction;\r\n },\r\n\r\n prePatch(saveData) {\r\n // Initialize all possibly undefined properties that were not present in\r\n // previous versions and which could be overwritten by deepmerge\r\n saveData.totalAntimatter = saveData.totalAntimatter || saveData.totalmoney || saveData.money;\r\n saveData.thisEternity = saveData.thisEternity || saveData.totalTimePlayed;\r\n saveData.version = saveData.version || 0;\r\n },\r\n\r\n // Patch up to the specified version; we need this functionality in order to properly migrate both saves from\r\n // much older versions and saves from in-development versions\r\n patch(saveData, maxVersion) {\r\n this.prePatch(saveData);\r\n // This adds all the undefined properties to the save which are in player.js\r\n const player = deepmergeAll([Player.defaultStart, saveData]);\r\n const versions = Object.keys(this.patches).map(parseFloat).sort();\r\n let version;\r\n while ((version = versions.find(v => player.version < v && v < maxVersion)) !== undefined) {\r\n const patch = this.patches[version];\r\n patch(player);\r\n player.version = version;\r\n }\r\n return player;\r\n },\r\n\r\n patchPreReality(saveData) {\r\n return this.patch(saveData, this.firstRealityMigration);\r\n },\r\n\r\n patchPostReality(saveData) {\r\n // Plus 1 because this the threshold is exclusive (it migrates up to but not including the maxVersion)\r\n return this.patch(saveData, Object.keys(migrations.patches).map(k => Number(k)).max() + 1);\r\n }\r\n};\r\n","import { migrations } from \"./migrations\";\r\nimport { DC } from \"../constants\";\r\n\r\nfunction arrayToBits(array) {\r\n let bits = 0;\r\n for (const id of array) bits |= (1 << id);\r\n return bits;\r\n}\r\n\r\n// WARNING: Don't use state accessors and functions from global scope here, that's not safe in long-term\r\nexport const devMigrations = {\r\n patches: [\r\n player => {\r\n migrations.normalizeTimespans(player);\r\n player.bestReality = player.bestReality === 9999999999\r\n ? 999999999999\r\n : player.bestReality * 100;\r\n for (let i = 0; i < 10; i++) {\r\n player.lastTenRealities[i][0] *= 100;\r\n }\r\n },\r\n player => {\r\n player.reality.glyphs.last = \"\";\r\n },\r\n player => {\r\n player.secretUnlocks.themes = [];\r\n },\r\n player => {\r\n player.wormhole.power *= 36;\r\n },\r\n player => {\r\n player.reality.rebuyables = { 1: 0, 2: 0, 3: 0, 4: 0, 5: 0 };\r\n for (let i = 1; i < 6; i++) {\r\n if (player.reality.upg.includes(i)) {\r\n player.reality.rebuyables[i] = 1;\r\n player.reality.upg.splice(player.reality.upg.indexOf(i), 1);\r\n }\r\n }\r\n },\r\n player => {\r\n player.reality.tdbuyer = {\r\n on: false,\r\n threshhold: 1\r\n };\r\n player.reality.epmultbuyer = {\r\n on: false,\r\n threshhold: 1\r\n };\r\n },\r\n player => {\r\n player.reality.perks = new Set();\r\n },\r\n player => {\r\n player.reality.pp = 0;\r\n },\r\n player => {\r\n player.reality.pp = player.realities;\r\n },\r\n player => {\r\n // Give starting perk\r\n if (player.reality.pp > 0) {\r\n player.reality.pp -= 1;\r\n player.reality.perks.add(0);\r\n }\r\n },\r\n player => {\r\n // Var for s45\r\n player.secretUnlocks.dragging = 0;\r\n },\r\n player => {\r\n for (let i = 0; i < player.reality.glyphs.active.length; i++) {\r\n const glyph = player.reality.glyphs.active[i];\r\n if (glyph.effects.autochall !== undefined) {\r\n delete glyph.effects.autochall;\r\n glyph.effects.buy10 = 1 + Math.pow(glyph.level * glyph.strength, 0.8) / 10;\r\n }\r\n }\r\n\r\n for (let i = 0; i < player.reality.glyphs.inventory.length; i++) {\r\n const glyph = player.reality.glyphs.inventory[i];\r\n if (glyph.effects.autochall !== undefined) {\r\n delete glyph.effects.autochall;\r\n glyph.effects.buy10 = 1 + Math.pow(glyph.level * glyph.strength, 0.8) / 10;\r\n }\r\n }\r\n },\r\n player => {\r\n player.reality.upgReqs.push(false, false, false, false, false);\r\n },\r\n player => {\r\n player.reality.realityMachines = new Decimal(player.reality.realityMachines);\r\n },\r\n player => {\r\n player.reality.glyphs.sac = {\r\n power: DC.D0,\r\n infinity: DC.D0,\r\n time: DC.D0,\r\n replication: DC.D0,\r\n dilation: DC.D0,\r\n effarig: DC.D0,\r\n };\r\n },\r\n player => {\r\n player.wormhole.pause = false;\r\n },\r\n player => {\r\n player.wormholePause = false;\r\n if (player.wormhole[0] !== undefined) return;\r\n player.wormhole = [\r\n player.wormhole,\r\n {\r\n speed: 60 * 6,\r\n power: 90,\r\n duration: 7,\r\n phase: 0,\r\n active: false,\r\n unlocked: false,\r\n },\r\n {\r\n speed: 6 * 6,\r\n power: 45,\r\n duration: 4,\r\n phase: 0,\r\n active: false,\r\n unlocked: false,\r\n }\r\n ];\r\n },\r\n player => {\r\n if (player.reality.upg.includes(20)) {\r\n player.wormhole[1].unlocked = true;\r\n }\r\n },\r\n player => {\r\n player.reality.upgReqs.push(false, false, false, false, false);\r\n },\r\n player => {\r\n player.reality.tdbuyer = undefined;\r\n player.reality.tdbuyers = [false, false, false, false, false, false, false, false];\r\n player.reality.epmultbuyer = false;\r\n },\r\n player => {\r\n if (![\"rm\", \"glyph\", \"either\", \"both\"].includes(player.autoRealityMode)) {\r\n player.autoRealityMode = \"rm\";\r\n }\r\n },\r\n migrations.convertAutobuyerMode,\r\n player => {\r\n for (const key in player.celestials.effarig.glyphWeights) {\r\n player.celestials.effarig.glyphWeights[key] *= 100;\r\n }\r\n },\r\n player => {\r\n // The previous migration didn't work if loading a test save before celestials were added, whoops\r\n for (const key in player.celestials.effarig.glyphWeights) {\r\n player.celestials.effarig.glyphWeights[key] = 25;\r\n }\r\n },\r\n // eslint-disable-next-line no-unused-vars\r\n player => {\r\n // The following patch is deeply incompatible with current player object:\r\n // Patch that changes wormhole => black hole will be applied later in this patch chain\r\n // (see the warning at the top of this file)\r\n\r\n // Following logic from autobuyers (before the addition of wall clock time stats)\r\n // const speedup = getGameSpeedupFactor([GAME_SPEED_EFFECT.EC12, GAME_SPEED_EFFECT.WORMHOLE]);\r\n // player.thisInfinityRealTime = Time.thisInfinity.totalSeconds / speedup;\r\n // player.thisEternityRealTime = Time.thisEternity.totalSeconds / speedup;\r\n // player.thisRealityRealTime = Time.thisReality.totalSeconds / speedup;\r\n // for (var i=0; i<10; i++) {\r\n // player.lastTenRuns[i][2] = undefined;\r\n // player.lastTenEternities[i][2] = undefined;\r\n // player.lastTenRealities[i][3] = undefined;\r\n // }\r\n\r\n // For anyone who is looking at this part of the code for debugging purposes, note that GAME_SPEED_EFFECT.EC12\r\n // has been replaced by GAME_SPEED_EFFECT.FIXED_SPEED since EC12 is no longer the only fixed-speed effect\r\n },\r\n migrations.fixChallengeIds,\r\n migrations.adjustMultCosts,\r\n player => {\r\n const teresa = player.celestials.effarig;\r\n player.celestials.effarig = player.celestials.teresa;\r\n player.celestials.teresa = teresa;\r\n\r\n for (const i in player.reality.glyphs.active) {\r\n const g = player.reality.glyphs.active[i];\r\n if (g.type === \"teresa\") {\r\n g.type = \"effarig\";\r\n }\r\n }\r\n\r\n for (const i in player.reality.glyphs.inventory) {\r\n const g = player.reality.glyphs.inventory[i];\r\n if (g.type === \"teresa\") {\r\n g.type = \"effarig\";\r\n }\r\n }\r\n },\r\n player => {\r\n // The previous migration messed things up pretty badly. The swap was done\r\n // after deepmerge with defaultPlayer, which means that default values got added correctly,\r\n // and then swapped into the incorrect place. We can blow away glyph weights and auto sac\r\n // settings\r\n // eslint-disable-next-line max-params\r\n function movePropIfPossible(celestial1, celestial2, prop, defaultValue, merge = null) {\r\n if (player.celestials[celestial1][prop] !== undefined) {\r\n if (player.celestials[celestial2][prop] === undefined) {\r\n player.celestials[celestial2][prop] = player.celestials[celestial1][prop];\r\n } else if (merge) {\r\n player.celestials[celestial2][prop] = merge(player.celestials[celestial1][prop],\r\n player.celestials[celestial2][prop]);\r\n }\r\n delete player.celestials[celestial1][prop];\r\n } else if (player.celestials[celestial2][prop] === undefined) {\r\n // Both undefined shouldn't really happen, but might as well be thorough here\r\n player.celestials[celestial2][prop] = defaultValue;\r\n }\r\n }\r\n movePropIfPossible(\"teresa\", \"effarig\", \"glyphWeights\", {\r\n ep: 25,\r\n repl: 25,\r\n dt: 25,\r\n eternities: 25\r\n });\r\n // There was a big glyph filter refactor done at some point, and it's infeasible to properly preserve old\r\n // filter settings through this old migration. Any imported saves from before the Teresa/Effarig name swap\r\n // which had glyph filtering unlocked are likely going to be invalid as a result.\r\n movePropIfPossible(\"teresa\", \"effarig\", \"autoGlyphSac\", {\r\n mode: AUTO_GLYPH_SCORE.LOWEST_SACRIFICE,\r\n types: GlyphTypes.list.mapToObject(t => t.id, t => ({\r\n rarityThreshold: 0,\r\n scoreThreshold: 0,\r\n effectScores: t.effects.mapToObject(e => e.id, () => 0),\r\n })),\r\n });\r\n movePropIfPossible(\"teresa\", \"effarig\", \"autoGlyphPick\", {\r\n mode: AUTO_GLYPH_REJECT.SACRIFICE,\r\n });\r\n movePropIfPossible(\"teresa\", \"effarig\", \"relicShards\", 0, Math.max);\r\n movePropIfPossible(\"effarig\", \"teresa\", \"quoteIdx\", 0);\r\n movePropIfPossible(\"effarig\", \"teresa\", \"bestRunAM\", 0, Decimal.max);\r\n movePropIfPossible(\"effarig\", \"teresa\", \"rmStore\", 0, Math.max);\r\n movePropIfPossible(\"effarig\", \"teresa\", \"glyphLevelMult\", 1, Math.max);\r\n movePropIfPossible(\"effarig\", \"teresa\", \"rmMult\", 1, Math.max);\r\n movePropIfPossible(\"effarig\", \"teresa\", \"dtBulk\", 1, Math.max);\r\n // These are unused now\r\n delete player.celestials.effarig.typePriorityOrder;\r\n delete player.celestials.teresa.typePriorityOrder;\r\n // This property didn't even exist at the time of this change\r\n movePropIfPossible(\"teresa\", \"effarig\", \"glyphScoreSettings\", {\r\n mode: AUTO_GLYPH_SCORE.LOWEST_SACRIFICE,\r\n simpleEffectCount: 0,\r\n types: GlyphTypes.list.mapToObject(t => t.id, t => ({\r\n rarityThreshold: 0,\r\n scoreThreshold: 0,\r\n effectCount: 0,\r\n effectChoices: t.effects.mapToObject(e => e.id, () => false),\r\n effectScores: t.effects.mapToObject(e => e.id, () => 0),\r\n })),\r\n });\r\n movePropIfPossible(\"effarig\", \"teresa\", \"bestAMSet\", []);\r\n },\r\n player => {\r\n player.blackHole = player.wormhole;\r\n player.blackHolePause = player.wormholePause;\r\n delete player.wormhole;\r\n delete player.wormholePause;\r\n },\r\n player => {\r\n for (let i = 0; i < player.blackHole.length; i++) {\r\n player.blackHole[i].id = i;\r\n player.blackHole[i].intervalUpgrades = Math.round(\r\n Math.log(player.blackHole[i].speed / (3600 / (Math.pow(10, i)))) / Math.log(0.8)\r\n );\r\n player.blackHole[i].powerUpgrades = Math.round(\r\n Math.log(player.blackHole[i].power / (180 / Math.pow(2, i))) / Math.log(1.35)\r\n );\r\n player.blackHole[i].durationUpgrades = Math.round(\r\n Math.log(player.blackHole[i].duration / (10 - i * 3)) / Math.log(1.3)\r\n );\r\n delete player.blackHole[i].speed;\r\n delete player.blackHole[i].power;\r\n delete player.blackHole[i].duration;\r\n }\r\n },\r\n () => {\r\n // This migration was created by a mistake\r\n },\r\n migrations.convertAchivementsToNumbers,\r\n migrations.adjustGameCreatedTime,\r\n migrations.moveSavedStudyTrees,\r\n player => {\r\n // Leftover stuff from dev.updateTestSave\r\n if (player.celestials.teresa.rmStore > Teresa.rmStoreMax) {\r\n player.reality.realityMachines =\r\n player.reality.realityMachines.plus(player.celestials.teresa.rmStore - Teresa.rmStoreMax);\r\n player.celestials.teresa.rmStore = Teresa.rmStoreMax;\r\n }\r\n if (player.reality.upg) {\r\n player.reality.upgradeBits = arrayToBits(player.reality.upg);\r\n delete player.reality.upg;\r\n }\r\n if ((player.reality.upgradeBits & (1 << 25)) === 0) {\r\n player.realityBuyer.isOn = false;\r\n }\r\n for (let i = 0; i < player.reality.glyphs.active.length; i++) {\r\n const glyph = player.reality.glyphs.active[i];\r\n if (glyph.type === \"power\" && glyph.effects.mult !== undefined) {\r\n glyph.effects.mult = new Decimal(glyph.effects.mult);\r\n }\r\n }\r\n\r\n for (let i = 0; i < player.reality.glyphs.inventory.length; i++) {\r\n const glyph = player.reality.glyphs.inventory[i];\r\n if (glyph.type === \"power\" && glyph.effects.mult !== undefined) {\r\n glyph.effects.mult = new Decimal(glyph.effects.mult);\r\n }\r\n }\r\n },\r\n migrations.convertEPMult,\r\n migrations.moveChallengeInfo,\r\n migrations.adjustWhy,\r\n migrations.adjustThemes,\r\n migrations.removeAchPow,\r\n migrations.adjustSacrificeConfirmation,\r\n migrations.migrateNotation,\r\n migrations.fixAutobuyers,\r\n migrations.removeAutoIPProperties,\r\n player => {\r\n // Swapping glyph level with reality real time\r\n player.lastTenRealities = player.lastTenRealities\r\n .map(a => [a[0], a[1], a[3], a[2]]);\r\n },\r\n player => {\r\n player.achievements.delete(157);\r\n player.achievements.delete(156);\r\n player.achievements.delete(155);\r\n player.achievements.delete(153);\r\n // Have to call this a second time, as player.why wasn't removed from the player.js the first time\r\n migrations.adjustWhy(player);\r\n migrations.adjustAchievementVars(player);\r\n },\r\n migrations.uniformDimensions,\r\n migrations.removeEternityChallGoal,\r\n player => {\r\n // There were 3 black holes in player object\r\n delete player.blackHole.pop();\r\n },\r\n player => {\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n for (let i = 0; i < allGlyphs.length; i++) {\r\n allGlyphs[i].id = i;\r\n }\r\n },\r\n // eslint-disable-next-line no-unused-vars\r\n player => {\r\n // This used to clearNewsArray, which cleared all news entries completely. Unsure what exactly that accomplished,\r\n // but convertNews should accomplish the same migration purpose. However, this entry still needs to stay here as\r\n // a no-op because otherwise save conversion will have an off-by-one error and generally break entirely.\r\n },\r\n player => {\r\n migrations.removeTickspeed(player);\r\n migrations.removePostC3Reward(player);\r\n },\r\n player => {\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n for (const glyph of allGlyphs) {\r\n let effectBitmask = 0;\r\n for (const effect of orderedEffectList) {\r\n const typeEffect = separateEffectKey(effect);\r\n if (glyph.type === typeEffect[0] && glyph.effects[typeEffect[1]] !== undefined) {\r\n effectBitmask += 1 << GlyphEffects[effect].bitmaskIndex;\r\n }\r\n }\r\n glyph.effects = effectBitmask;\r\n }\r\n },\r\n // Ra exp formula changed\r\n player => {\r\n const pets = player.celestials.ra.pets;\r\n for (const prop in pets) {\r\n if (!Object.prototype.hasOwnProperty.call(pets, prop)) continue;\r\n const pet = pets[prop];\r\n const oldExp = pet.exp + 10000 * (Math.pow(1.12, pet.level - 1) - 1) / (0.12);\r\n pet.level = 1;\r\n pet.exp = Math.clampMin(oldExp, 0);\r\n }\r\n player.celestials.ra.unlocks = [];\r\n },\r\n // Ra exp formula changed again\r\n player => {\r\n const pets = player.celestials.ra.pets;\r\n for (const prop in pets) {\r\n if (!Object.prototype.hasOwnProperty.call(pets, prop)) continue;\r\n const pet = pets[prop];\r\n let oldExp = pet.exp;\r\n for (let lv = 1; lv < pet.level; lv++) {\r\n const floor5 = Math.floor(lv / 5);\r\n const adjustedLevel = 2.5 * floor5 * (floor5 + 1) + (lv % 5) * (floor5 + 1);\r\n oldExp += Math.floor(10000 * Math.pow(1.12, adjustedLevel - 1));\r\n }\r\n pet.level = 1;\r\n pet.exp = Math.clampMin(oldExp, 0);\r\n }\r\n player.celestials.ra.unlocks = [];\r\n },\r\n migrations.renameMoney,\r\n player => {\r\n migrations.moveAutobuyers(player);\r\n const old = player.realityBuyer;\r\n const realityAutobuyer = player.auto.reality;\r\n realityAutobuyer.mode = [\"rm\", \"glyph\", \"either\", \"both\"].indexOf(player.autoRealityMode);\r\n realityAutobuyer.rm = old.rm;\r\n realityAutobuyer.glyph = old.glyph;\r\n realityAutobuyer.isActive = old.isOn;\r\n\r\n const eternityAutobuyer = player.auto.eternity;\r\n eternityAutobuyer.mode = [\"amount\", \"time\", \"relative\"].indexOf(player.autoEternityMode);\r\n const condition = new Decimal(old.limit);\r\n switch (player.autoEternityMode) {\r\n case \"amount\":\r\n eternityAutobuyer.amount = condition;\r\n break;\r\n case \"time\":\r\n eternityAutobuyer.time = condition.lt(Decimal.NUMBER_MAX_VALUE)\r\n ? condition.toNumber()\r\n : eternityAutobuyer.time;\r\n break;\r\n case \"relative\":\r\n eternityAutobuyer.xLast = condition;\r\n break;\r\n }\r\n\r\n delete player.realityBuyer;\r\n delete player.autoRealityMode;\r\n delete player.autoEternityMode;\r\n },\r\n migrations.convertNews,\r\n migrations.convertEternityCountToDecimal,\r\n migrations.renameDimboosts,\r\n player => {\r\n // Reset reality autobuyer mode, since AUTO_REALITY_MODE was incorrectly starting from 1 and not from 0.\r\n // Disable it also to not wreck people's long runs or smth\r\n player.auto.reality.mode = 0;\r\n player.auto.reality.isActive = false;\r\n },\r\n player => {\r\n // Perk shop refactor\r\n player.celestials.teresa.perkShop = [\r\n Math.floor(Math.log(player.celestials.teresa.glyphLevelMult) / Math.log(1.05)),\r\n Math.floor(Math.log(player.celestials.teresa.rmMult) / Math.log(2)),\r\n Math.floor(Math.log(player.celestials.teresa.dtBulk) / Math.log(2)),\r\n 0];\r\n delete player.celestials.teresa.glyphLevelMult;\r\n delete player.celestials.teresa.rmMult;\r\n delete player.celestials.teresa.dtBulk;\r\n },\r\n migrations.migrateConfirmations,\r\n migrations.removeOtherTickspeedProps,\r\n player => {\r\n // These were accidentally added back in due to a bad merge conflict resolution\r\n delete player.resets;\r\n delete player.tickDecrease;\r\n },\r\n migrations.renameNewsOption,\r\n migrations.removeDimensionCosts,\r\n migrations.renameTickspeedPurchaseBumps,\r\n player => {\r\n const safeArrayToBits = x => ((x === undefined) ? 0 : arrayToBits(x));\r\n player.celestials.teresa.unlockBits = safeArrayToBits(player.celestials.teresa.unlocks);\r\n delete player.celestials.teresa.unlocks;\r\n player.celestials.effarig.unlockBits = safeArrayToBits(player.celestials.effarig.unlocks);\r\n delete player.celestials.effarig.unlocks;\r\n player.celestials.v.unlockBits = safeArrayToBits(player.celestials.v.unlocks);\r\n delete player.celestials.v.unlocks;\r\n player.celestials.ra.unlockBits = safeArrayToBits(player.celestials.ra.unlocks);\r\n delete player.celestials.ra.unlocks;\r\n player.celestials.laitela.unlockBits = safeArrayToBits(player.celestials.laitela.unlocks);\r\n delete player.celestials.laitela.unlocks;\r\n },\r\n player => {\r\n player.reality.seed = Math.floor(Math.abs(player.reality.seed)) % 0xFFFFFFFF;\r\n },\r\n player => {\r\n player.auto.sacrifice.multiplier = new Decimal(player.auto.sacrifice.multiplier);\r\n },\r\n migrations.changeC8Handling,\r\n player => {\r\n while (player.celestials.teresa.perkShop.length < 5) player.celestials.teresa.perkShop.push(0);\r\n },\r\n player => {\r\n delete player.secretUnlocks.fixed;\r\n },\r\n player => {\r\n delete player.celestials.effarig.quoteIdx;\r\n delete player.celestials.enslaved.quoteIdx;\r\n },\r\n player => {\r\n const tempAuto = player.celestials.teresa.perkShop[4];\r\n const tempMusic = player.celestials.teresa.perkShop[3];\r\n player.celestials.teresa.perkShop[3] = tempAuto;\r\n player.celestials.teresa.perkShop[4] = tempMusic;\r\n },\r\n migrations.convertAchievementsToBits,\r\n player => {\r\n for (const dimension of player.dimensions.antimatter) {\r\n delete dimension.power;\r\n }\r\n for (const dimension of player.dimensions.infinity) {\r\n delete dimension.power;\r\n }\r\n for (const dimension of player.dimensions.time) {\r\n delete dimension.power;\r\n }\r\n },\r\n player => {\r\n const cursedMask = 15;\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n for (const glyph of allGlyphs) {\r\n if (glyph.type === \"cursed\") glyph.effects = cursedMask;\r\n }\r\n },\r\n player => {\r\n player.options.showHintText.alchemy = player.options.showAlchemyResources;\r\n delete player.options.showAlchemyResources;\r\n },\r\n player => {\r\n // Adds in effect selection settings and removes non-generated types while preserving old glyph filter settings\r\n const oldSettings = player.celestials.effarig.autoGlyphSac.types;\r\n const newSettings = GlyphTypes.list\r\n .filter(type => generatedTypes.includes(type.id))\r\n .mapToObject(t => t.id, t => ({\r\n rarityThreshold: 0,\r\n scoreThreshold: 0,\r\n effectCount: 0,\r\n effectChoices: t.effects.mapToObject(e => e.id, () => false),\r\n effectScores: t.effects.mapToObject(e => e.id, () => 0),\r\n }));\r\n for (const type of generatedTypes) {\r\n newSettings[type].rarityThreshold = oldSettings[type].rarityThreshold;\r\n newSettings[type].scoreThreshold = oldSettings[type].scoreThreshold;\r\n for (const effect of Object.keys(newSettings[type].effectScores)) {\r\n newSettings[type].effectScores[effect] = oldSettings[type].effectScores[effect];\r\n }\r\n }\r\n player.celestials.effarig.autoGlyphSac.types = newSettings;\r\n },\r\n player => {\r\n player.reality.glyphs.inventorySize += 10;\r\n },\r\n player => {\r\n player.celestials.v.unlockBits = 0;\r\n // Adding this in case the player is loading a save (otherwise it\r\n // doesn't update immediately and the player still has nonzero ST\r\n // for the purpose of checking unlocks).\r\n V.updateTotalRunUnlocks();\r\n V.checkForUnlocks();\r\n },\r\n player => {\r\n // Reset the v-unlocks again\r\n player.celestials.v.unlockBits = 0;\r\n // See above migration for an explanation of the below line.\r\n V.updateTotalRunUnlocks();\r\n V.checkForUnlocks();\r\n },\r\n player => {\r\n player.reality.autoAchieve = !player.reality.disableAutoAchieve;\r\n delete player.reality.disableAutoAchieve;\r\n delete player.newEC10Test;\r\n },\r\n player => {\r\n // Some older saves have screwed up Ra unlocks for some reason, this should fix that\r\n player.celestials.ra.unlockBits = 0;\r\n Ra.checkForUnlocks();\r\n },\r\n player => {\r\n // Required for compatibility after V records refactor\r\n player.celestials.v.runRecords[0] = -10;\r\n },\r\n player => {\r\n delete player.celestials.v.cursedThisRun;\r\n },\r\n player => {\r\n // Reset Ra unlocks again, because apparently Ra-Teresa Lv1 upgrades were always active due to an oversight\r\n player.celestials.ra.unlockBits = 0;\r\n Ra.checkForUnlocks();\r\n },\r\n player => {\r\n // Glyph filter refactor (not worth the trouble of translating between the modes, but copy the configs)\r\n Object.assign(player.celestials.effarig.glyphScoreSettings, player.celestials.effarig.autoGlyphSac);\r\n player.celestials.effarig.glyphTrashMode = 0;\r\n delete player.celestials.effarig.autoGlyphSac;\r\n delete player.celestials.effarig.autoGlyphPick;\r\n },\r\n player => {\r\n delete player.reality.glyphs.inventorySize;\r\n for (const glyph of player.reality.glyphs.inventory) {\r\n if (glyph.idx >= 10) {\r\n glyph.idx += 10;\r\n }\r\n }\r\n },\r\n player => {\r\n // Typo fix, as long as we have to delete a player property let's also\r\n // correctly initialize the new one.\r\n player.onlyEighthDimensions = player.onlyEighthDimensons;\r\n delete player.onlyEighthDimensons;\r\n },\r\n player => {\r\n for (const pet of Ra.pets.all) {\r\n pet.level = Math.clampMax(pet.level, 25);\r\n }\r\n delete player.celestials.ra.compression;\r\n if (Ra.unlocks.allGamespeedGlyphs.canBeApplied) {\r\n const allGlyphs = player.reality.glyphs.active\r\n .concat(player.reality.glyphs.inventory);\r\n for (const glyph of allGlyphs) {\r\n Glyphs.applyGamespeed(glyph);\r\n }\r\n }\r\n },\r\n player => {\r\n for (let i = 0; i < player.celestials.ra.alchemy.length; i++) {\r\n player.celestials.ra.alchemy[i].amount = Math.clampMax(\r\n player.celestials.ra.alchemy[i].amount, Ra.alchemyResourceCap);\r\n }\r\n },\r\n player => {\r\n delete player.celestials.laitela.maxAmGained;\r\n for (const dim of player.celestials.laitela.dimensions) {\r\n dim.powerDMUpgrades = dim.powerUpgrades;\r\n dim.powerDEUpgrades = 0;\r\n delete dim.chanceUpgrades;\r\n delete dim.powerUpgrades;\r\n }\r\n // Note that player.celestials.laitela.higgs is actually a string at this point\r\n // (since conversion to Decimal hasn't happened yet).\r\n player.celestials.laitela.darkMatterMult = Number(player.celestials.laitela.higgs) + 1;\r\n delete player.celestials.laitela.anomalies;\r\n },\r\n player => {\r\n delete player.achPow;\r\n delete player.interval;\r\n delete player.tickThreshold;\r\n delete player.celestials.enslaved.maxQuotes;\r\n delete player.celestials.v.quoteIdx;\r\n delete player.celestials.ra.quoteIdx;\r\n },\r\n player => {\r\n player.celestials.enslaved.totalDimCapIncrease = 0;\r\n player.celestials.enslaved.tesseracts = 0;\r\n },\r\n player => {\r\n delete player.auto.galaxy.buyMax;\r\n },\r\n player => {\r\n delete player.reality.glyphs.sac.cursed;\r\n Achievement(153).lock();\r\n Achievement(157).lock();\r\n },\r\n player => {\r\n // Return all PP spent on old V goal reduction\r\n if (player.celestials.v.ppSpent) {\r\n player.reality.pp += player.celestials.v.ppSpent;\r\n delete player.celestials.v.ppSpent;\r\n }\r\n },\r\n player => {\r\n player.thisEternityMaxAM = new Decimal(0);\r\n },\r\n player => {\r\n migrations.migrateLastTenRuns(player);\r\n // Put in a default value of 1 for realities.\r\n player.lastTenRealities = player.lastTenRealities.map(x => [x[0], x[1], 1, Number(x[2]), x[3]]);\r\n migrations.migrateIPGen(player);\r\n },\r\n player => {\r\n player.noReplicantiGalaxies = player.reality.upgReqChecks[0];\r\n delete player.reality.upgReqChecks;\r\n },\r\n player => {\r\n player.bestGlyphStrength = player.reality.glyphs.active.concat(\r\n player.reality.glyphs.inventory).map(g => g.strength).max();\r\n },\r\n player => {\r\n player.options.showHintText.glyphEffectDots = player.options.showGlyphEffectDots;\r\n delete player.options.showGlyphEffectDots;\r\n migrations.renameCloudVariable(player);\r\n },\r\n player => {\r\n const newPerks = new Set([...player.reality.perks].filter(x => x < 20 || x > 25));\r\n const gainedPerkPoints = player.reality.perks.size - newPerks.size;\r\n player.reality.pp += gainedPerkPoints;\r\n player.reality.perks = newPerks;\r\n if (gainedPerkPoints > 0) {\r\n Modal.message.show(\r\n \"Some of your perks (glyph perks) were removed. The perk points you spent on them have been refunded.\");\r\n }\r\n },\r\n player => {\r\n delete player.reality.glyphs.last;\r\n },\r\n player => {\r\n if (player.reality.secondGaussian === null) {\r\n // Future-proof against potential changes to the default value\r\n // (as a special case of not using state accessors).\r\n player.reality.secondGaussian = 1e6;\r\n }\r\n },\r\n player => {\r\n delete player.celestials.laitela.reachedSingularityCapLimit;\r\n delete player.celestials.laitela.secondsSinceCappedTime;\r\n delete player.celestials.laitela.singularityAutoCapLimit;\r\n delete player.celestials.laitela.singularityTime;\r\n delete player.celestials.laitela.autoAnnihilationTimer;\r\n delete player.celestials.laitela.annihilated;\r\n delete player.celestials.laitela.secondsSinceReachedSingularity;\r\n player.celestials.laitela.darkMatterMult = Math.clampMin(player.celestials.laitela.darkMatterMult, 1);\r\n player.celestials.laitela.dimensions.forEach(d => d.ascensionCount = 0);\r\n },\r\n player => {\r\n const allRandomGlyphs = player.reality.glyphs.active\r\n .concat(player.reality.glyphs.inventory)\r\n .filter(i => i.type !== \"companion\");\r\n for (const glyph of allRandomGlyphs) {\r\n glyph.strength = Math.ceil(glyph.strength * 400) / 400;\r\n }\r\n },\r\n player => {\r\n if (player.dimensions.normal !== undefined) {\r\n for (let i = 0; i < player.dimensions.normal.length; i++) {\r\n const dimension = player.dimensions.normal[i];\r\n player.dimensions.antimatter[i].bought = dimension.bought;\r\n player.dimensions.antimatter[i].costBumps = dimension.costBumps;\r\n player.dimensions.antimatter[i].amount = new Decimal(dimension.amount);\r\n }\r\n delete player.dimensions.normal;\r\n }\r\n },\r\n player => {\r\n if (player.options.news.enabled === undefined) {\r\n player.options.news = {\r\n enabled: player.options.news,\r\n repeatBuffer: 40,\r\n AIChance: 0,\r\n speed: 1\r\n };\r\n }\r\n },\r\n player => {\r\n delete player.options.confirmations.glyphTrash;\r\n },\r\n player => {\r\n migrations.standardizeUncompletedTimes(player);\r\n if (player.bestReality === 999999999999) player.bestReality = Number.MAX_VALUE;\r\n if (player.bestRealityRealTime === 999999999999) player.bestRealityRealTime = Number.MAX_VALUE;\r\n for (let i = 0; i < 10; i++) {\r\n if (player.lastTenRealities[i][0] === 2678400000) player.lastTenRealities[i][0] = Number.MAX_VALUE;\r\n if (player.lastTenRealities[i][3] === 26784000) player.lastTenRealities[i][3] = Number.MAX_VALUE;\r\n }\r\n },\r\n player => {\r\n for (const script of Object.values(player.reality.automator.scripts)) {\r\n script.content =\r\n script.content.replace(/^([ \\t]*)(wait|if|while|until)([\\t ]+)(completions)/igmu, \"$1$2$3pending $4\");\r\n }\r\n },\r\n player => {\r\n player.celestials.ra.unlockBits &= ~(1 << 29);\r\n },\r\n player => {\r\n player.records.gameCreatedTime = player.gameCreatedTime;\r\n player.records.totalTimePlayed = player.totalTimePlayed;\r\n player.records.realTimePlayed = player.realTimePlayed;\r\n player.records.totalAntimatter = new Decimal(player.totalAntimatter);\r\n for (let i = 0; i < 10; i++) {\r\n player.records.lastTenInfinities[i][0] = player.lastTenRuns[i][0];\r\n player.records.lastTenEternities[i][0] = player.lastTenEternities[i][0];\r\n player.records.lastTenRealities[i][0] = player.lastTenRealities[i][0];\r\n }\r\n player.options.showLastTenInfinitiesGainPerTime = player.options.showLastTenRunsGainPerTime;\r\n delete player.options.showLastTenRunsGainPerTime;\r\n\r\n player.records.thisInfinity.time = player.thisInfinityTime;\r\n player.records.thisInfinity.realTime = player.thisInfinityRealTime;\r\n player.records.thisInfinity.lastBuyTime = player.thisInfinityLastBuyTime;\r\n player.records.thisInfinity.maxAM = new Decimal(player.thisInfinityMaxAM);\r\n player.records.thisInfinity.bestIPmin = new Decimal(player.bestIPminThisInfinity);\r\n\r\n player.records.bestInfinity.time = player.bestInfinityTime;\r\n player.records.bestInfinity.realTime = player.bestInfinityRealTime;\r\n player.records.bestInfinity.bestIPminEternity = new Decimal(player.bestIPminThisEternity);\r\n player.records.bestInfinity.bestIPminReality = new Decimal(player.bestEPThisReality);\r\n\r\n player.records.thisEternity.time = player.thisEternity;\r\n player.records.thisEternity.realTime = player.thisEternityRealTime;\r\n player.records.thisEternity.maxAM = new Decimal(player.thisEternityMaxAM);\r\n player.records.thisEternity.maxIP = new Decimal(player.thisEternityMaxIP);\r\n player.records.thisEternity.bestIPMsWithoutMaxAll = new Decimal(player.bestIpPerMsWithoutMaxAll);\r\n player.records.thisEternity.bestEPmin = new Decimal(player.bestEPminThisEternity);\r\n player.records.thisEternity.bestInfinitiesPerMs = new Decimal(player.bestInfinitiesPerMs);\r\n\r\n player.records.bestEternity.time = player.bestEternity;\r\n // I have no idea where real time best Eternity is, not sure if it exists?\r\n player.records.bestEternity.bestEPminReality = new Decimal(player.bestEPminThisReality);\r\n\r\n player.records.thisReality.time = player.thisReality;\r\n player.records.thisReality.realTime = player.thisRealityRealTime;\r\n player.records.thisReality.bestEternitiesPerMs = new Decimal(player.bestEternitiesPerMs);\r\n\r\n player.records.bestReality.RMmin = new Decimal(player.bestRMmin);\r\n player.records.bestReality.RMminSet = player.bestRMminSet;\r\n player.records.bestReality.glyphLevel = player.bestGlyphLevel;\r\n player.records.bestReality.glyphStrength = player.bestGlyphStrength;\r\n player.records.bestReality.glyphLevelSet = player.bestGlyphLevelSet;\r\n player.records.bestReality.bestEP = new Decimal(player.bestEP);\r\n player.records.bestReality.bestEPSet = player.bestEPSet;\r\n player.records.bestReality.time = player.bestReality;\r\n player.records.bestReality.realTime = player.bestRealityRealTime;\r\n player.records.bestReality.speedSet = player.bestSpeedSet;\r\n\r\n delete player.gameCreatedTime;\r\n delete player.totalTimePlayed;\r\n delete player.realTimePlayed;\r\n delete player.totalAntimatter;\r\n delete player.lastTenRuns;\r\n delete player.lastTenEternities;\r\n delete player.lastTenRealities;\r\n\r\n delete player.thisInfinityTime;\r\n delete player.thisInfinityRealTime;\r\n delete player.thisInfinityLastBuyTime;\r\n delete player.thisInfinityMaxAM;\r\n delete player.bestIPminThisInfinity;\r\n\r\n delete player.bestInfinityTime;\r\n delete player.bestInfinityRealTime;\r\n delete player.bestIPminThisEternity;\r\n\r\n delete player.thisEternity;\r\n delete player.thisEternityRealTime;\r\n delete player.thisEternityMaxAM;\r\n delete player.thisEternityMaxIP;\r\n delete player.bestIpPerMsWithoutMaxAll;\r\n delete player.bestEPminThisEternity;\r\n delete player.bestInfinitiesPerMs;\r\n delete player.bestIPminThisEternity;\r\n\r\n delete player.bestEternity;\r\n delete player.bestEPminThisReality;\r\n\r\n delete player.thisReality;\r\n delete player.thisRealityRealTime;\r\n delete player.bestEternitiesPerMs;\r\n delete player.bestEPThisReality;\r\n\r\n delete player.bestRMmin;\r\n delete player.bestRMminSet;\r\n delete player.bestGlyphLevel;\r\n delete player.bestGlyphStrength;\r\n delete player.bestGlyphLevelSet;\r\n delete player.bestEP;\r\n delete player.bestEPSet;\r\n delete player.bestReality;\r\n delete player.bestRealityRealTime;\r\n delete player.bestSpeedSet;\r\n },\r\n player => {\r\n player.replicanti.boughtGalaxyCap = player.replicanti.gal;\r\n player.reality.perkPoints = player.reality.pp;\r\n player.celestials.teresa.pouredAmount = player.celestials.teresa.rmStore;\r\n player.celestials.laitela.darkMatter = new Decimal(player.celestials.laitela.matter);\r\n player.celestials.laitela.maxDarkMatter = new Decimal(player.celestials.laitela.maxMatter);\r\n player.celestials.ra.pets.teresa.memories = player.celestials.ra.pets.teresa.exp;\r\n player.celestials.ra.pets.effarig.memories = player.celestials.ra.pets.effarig.exp;\r\n player.celestials.ra.pets.enslaved.memories = player.celestials.ra.pets.enslaved.exp;\r\n player.celestials.ra.pets.v.memories = player.celestials.ra.pets.v.exp;\r\n player.achievementChecks = {\r\n noSacrifices: player.noSacrifices,\r\n onlyEighthDimensions: player.onlyEighthDimensions,\r\n onlyFirstDimensions: player.onlyFirstDimensions,\r\n noEighthDimensions: player.noEighthDimensions,\r\n noFirstDimensions: player.noFirstDimensions,\r\n noAntimatterProduced: player.noAntimatterProduced,\r\n noTriadStudies: player.noTriadStudies,\r\n noTheoremPurchases: player.noTheoremPurchases,\r\n noInfinitiesThisReality: player.noInfinitiesThisReality,\r\n noEternitiesThisReality: player.noEternitiesThisReality,\r\n noReplicantiGalaxies: player.noReplicantiGalaxies,\r\n // Not necessarily accurate, but these defaults prevent some people from effortlessly completing some\r\n // otherwise very difficult unlocks immediately upon migration\r\n maxID1ThisReality: new Decimal(1),\r\n continuumThisReality: true,\r\n };\r\n player.dilation.baseTachyonGalaxies = player.dilation.baseFreeGalaxies;\r\n player.dilation.totalTachyonGalaxies = player.dilation.freeGalaxies;\r\n\r\n delete player.replicanti.gal;\r\n delete player.reality.pp;\r\n delete player.celestials.teresa.rmStore;\r\n delete player.celestials.laitela.matter;\r\n delete player.celestials.laitela.maxMatter;\r\n delete player.celestials.ra.pets.teresa.exp;\r\n delete player.celestials.ra.pets.effarig.exp;\r\n delete player.celestials.ra.pets.enslaved.exp;\r\n delete player.celestials.ra.pets.v.exp;\r\n delete player.noSacrifices;\r\n delete player.onlyEighthDimensions;\r\n delete player.onlyFirstDimensions;\r\n delete player.noEighthDimensions;\r\n delete player.noFirstDimensions;\r\n delete player.noAntimatterProduced;\r\n delete player.noTriadStudies;\r\n delete player.noTheoremPurchases;\r\n delete player.noInfinitiesThisReality;\r\n delete player.noEternitiesThisReality;\r\n delete player.noReplicantiGalaxies;\r\n delete player.dilation.baseFreeGalaxies;\r\n delete player.dilation.freeGalaxies;\r\n },\r\n player => {\r\n player.auto.infinityDims = Array.range(0, 8).map(() => ({ lastTick: 0 }));\r\n for (let i = 0; i < 8; i++) {\r\n player.auto.infinityDims[i].isActive = player.infDimBuyers[i];\r\n }\r\n player.auto.timeDims = Array.range(0, 8).map(() => ({ lastTick: 0 }));\r\n for (let i = 0; i < 8; i++) {\r\n player.auto.timeDims[i].isActive = player.reality.tdbuyers[i];\r\n }\r\n player.auto.replicantiUpgrades = Array.range(0, 3).map(() => ({ lastTick: 0 }));\r\n for (let i = 0; i < 3; i++) {\r\n player.auto.replicantiUpgrades[i].isActive = player.replicanti.auto[i];\r\n }\r\n if (player.dilation.auto === undefined) {\r\n // Not defined on old saves, we define it only to delete it later in this migration\r\n player.dilation.auto = [true, true, true];\r\n }\r\n player.auto.dilationUpgrades = Array.range(0, 3).map(() => ({ lastTick: 0 }));\r\n for (let i = 0; i < 3; i++) {\r\n player.auto.dilationUpgrades[i].isActive = player.dilation.auto[i];\r\n }\r\n player.auto.blackHolePower = Array.range(0, 2).map(() => ({ lastTick: 0 }));\r\n for (let i = 0; i < 2; i++) {\r\n player.auto.blackHolePower[i].isActive = player.blackHole[i].autoPower;\r\n }\r\n if (player.reality.rebuyablesAuto === undefined) {\r\n // Not defined on old saves, we define it only to delete it later in this migration\r\n player.reality.rebuyablesAuto = [true, true, true, true, true];\r\n }\r\n player.auto.realityUpgrades = Array.range(0, 5).map(() => ({ lastTick: 0 }));\r\n for (let i = 0; i < 5; i++) {\r\n player.auto.realityUpgrades[i].isActive = player.reality.rebuyablesAuto[i];\r\n }\r\n // Note: player.autobuyers, the old way of storing autobuyers, seems to have gotten lost in dev migrations\r\n if (player.auto.antimatterDims === undefined) {\r\n player.auto.antimatterDims = player.auto.dimensions;\r\n }\r\n player.auto.replicantiGalaxies.isActive = player.replicanti.galaxybuyer;\r\n player.auto.ipMultBuyer.isActive = player.infMultBuyer;\r\n player.auto.epMultBuyer.isActive = player.reality.epmultbuyer;\r\n player.auto.timeTheorems.isActive = player.ttbuyer;\r\n player.auto.bigCrunch.xCurrent = player.auto.bigCrunch.xLast;\r\n player.auto.eternity.xCurrent = player.auto.eternity.xLast;\r\n player.auto.bulkOn = player.options.bulkOn;\r\n player.auto.autobuyerOn = player.options.autobuyerOn;\r\n player.auto.disableContinuum = player.options.disableContinuum;\r\n\r\n delete player.auto.dimensions;\r\n delete player.infDimBuyers;\r\n delete player.auto.infDimTimer;\r\n delete player.reality.tdbuyers;\r\n delete player.auto.timeDimTimer;\r\n delete player.replicanti.galaxybuyer;\r\n delete player.replicanti.auto;\r\n delete player.auto.repUpgradeTimer;\r\n delete player.ttbuyer;\r\n delete player.auto.ttTimer;\r\n delete player.dilation.auto;\r\n delete player.auto.dilUpgradeTimer;\r\n delete player.blackHole[0].autoPower;\r\n delete player.blackHole[1].autoPower;\r\n delete player.reality.rebuyablesAuto;\r\n delete player.reality.epmultbuyer;\r\n delete player.infMultBuyer;\r\n delete player.auto.bigCrunch.xLast;\r\n delete player.auto.eternity.xLast;\r\n delete player.options.bulkOn;\r\n delete player.options.autobuyerOn;\r\n delete player.options.disableContinuum;\r\n },\r\n migrations.convertTimeTheoremPurchases,\r\n migrations.infinitiedConversion,\r\n player => {\r\n delete player.saveOverThresholdFlag;\r\n delete player.saveOverThresholdFlagModalDisplayed;\r\n },\r\n player => {\r\n if (!Autobuyer.reality.isUnlocked) player.auto.reality.isActive = false;\r\n },\r\n player => {\r\n // Delete PEC5 (id 64)\r\n if (player.reality.perks.has(64)) {\r\n player.reality.perks.delete(64);\r\n player.reality.perkPoints++;\r\n }\r\n\r\n let reqBitmask = 0;\r\n for (let i = 0; i <= player.reality.upgReqs.length; i++) {\r\n if (player.reality.upgReqs[i]) reqBitmask |= (1 << i);\r\n }\r\n player.reality.upgReqs = reqBitmask;\r\n },\r\n player => {\r\n // Delete SAM2 (id 11)\r\n if (player.reality.perks.has(11)) {\r\n player.reality.perks.delete(11);\r\n player.reality.perkPoints++;\r\n }\r\n if (player.reality.perks.has(10)) Perk.startAM.onPurchased();\r\n },\r\n player => {\r\n player.achievementChecks.maxStudiesThisReality = player.timestudy.studies.length;\r\n player.celestials.teresa.lastRepeatedMachines = new Decimal(player.celestials.teresa.lastRepeatedRM);\r\n delete player.celestials.teresa.lastRepeatedRM;\r\n },\r\n player => {\r\n // Make sure scripts don't have any gaps in indices, and load up the correct script on migration\r\n let newID = 1;\r\n let selectedID = 1;\r\n const shiftedScripts = {};\r\n for (const id of Object.keys(player.reality.automator.scripts)) {\r\n shiftedScripts[newID] = player.reality.automator.scripts[id];\r\n shiftedScripts[newID].id = newID;\r\n if (id === player.reality.automator.state.editorScript) selectedID = newID;\r\n newID++;\r\n }\r\n player.reality.automator.scripts = shiftedScripts;\r\n player.reality.automator.state.editorScript = selectedID;\r\n\r\n delete player.reality.automator.lastID;\r\n },\r\n migrations.deleteDimboostBulk,\r\n migrations.removePriority,\r\n player => {\r\n player.reality.realityMachines = player.reality.realityMachines.floor();\r\n },\r\n migrations.deleteFloatingTextOption,\r\n player => {\r\n // Delete ACH5\r\n if (player.reality.perks.has(206)) {\r\n player.reality.perks.delete(206);\r\n player.reality.perkPoints++;\r\n }\r\n },\r\n player => {\r\n player.records.thisEternity.maxIP = new Decimal(player.infinityPoints);\r\n player.auto.bigCrunch.xHighest = player.auto.bigCrunch.xCurrent;\r\n player.auto.eternity.xHighest = player.auto.eternity.xCurrent;\r\n delete player.auto.bigCrunch.xCurrent;\r\n delete player.auto.eternity.xCurrent;\r\n },\r\n player => {\r\n // Fix an issue where a boolean property could become int and trigger number checking code.\r\n player.achievementChecks.continuumThisReality = Boolean(player.achievementChecks.continuumThisReality);\r\n },\r\n player => {\r\n player.secretUnlocks.spreadingCancer = player.spreadingCancer;\r\n delete player.spreadingCancer;\r\n },\r\n player => {\r\n delete player.celestials.enslaved.totalDimCapIncrease;\r\n },\r\n player => {\r\n for (const i of player.reality.glyphs.undo) {\r\n for (const j of [\"thisInfinityTime\", \"thisInfinityRealTime\", \"thisEternityTime\", \"thisEternityRealTime\"]) {\r\n if (!(j in i)) {\r\n // This is 1 second, seems like a solid default value for saves without the property.\r\n i[j] = 1000;\r\n }\r\n }\r\n }\r\n },\r\n player => {\r\n // Requirement migration/refactor\r\n const oldChecks = player.achievementChecks;\r\n player.requirementChecks = {\r\n infinity: {\r\n maxAll: player.usedMaxAll,\r\n noSacrifice: oldChecks.noSacrifices,\r\n noAD8: oldChecks.noEighthDimensions,\r\n },\r\n eternity: {\r\n onlyAD1: oldChecks.onlyFirstDimensions,\r\n onlyAD8: oldChecks.onlyEighthDimensions,\r\n noAD1: oldChecks.noFirstDimensions,\r\n noRG: oldChecks.noEighthDimensions,\r\n },\r\n reality: {\r\n noAM: oldChecks.noAntimatterProduced,\r\n noTriads: oldChecks.noTriadStudies,\r\n noPurchasedTT: oldChecks.noTheoremPurchases,\r\n noInfinities: oldChecks.noInfinitiesThisReality,\r\n noEternities: oldChecks.noEternitiesThisReality,\r\n noContinuum: !oldChecks.continuumThisReality,\r\n maxID1: new Decimal(oldChecks.maxID1ThisReality),\r\n maxStudies: oldChecks.maxStudiesThisReality,\r\n maxGlyphs: player.celestials.v.maxGlyphsThisRun,\r\n slowestBH: player.minNegativeBlackHoleThisReality,\r\n },\r\n permanent: {\r\n cancerGalaxies: player.secretUnlocks.spreadingCancer,\r\n singleTickspeed: player.secretUnlocks.why,\r\n perkTreeDragging: player.secretUnlocks.dragging,\r\n }\r\n };\r\n delete player.usedMaxAll;\r\n delete player.secretUnlocks.spreadingCancer;\r\n delete player.secretUnlocks.why;\r\n delete player.secretUnlocks.dragging;\r\n delete player.achievementChecks;\r\n delete player.minNegativeBlackHoleThisReality;\r\n delete player.celestials.v.maxGlyphsThisRun;\r\n\r\n // Refactor news storage format to bitmask array\r\n if (Array.isArray(player.news)) {\r\n const oldNewsArray = player.news;\r\n delete player.news;\r\n player.news = {};\r\n player.news.seen = {};\r\n for (const id of oldNewsArray) NewsHandler.addSeenNews(id);\r\n player.news.totalSeen = NewsHandler.uniqueTickersSeen;\r\n }\r\n\r\n // Separate news-specific data\r\n player.news.specialTickerData = {\r\n uselessNewsClicks: player.secretUnlocks.uselessNewsClicks,\r\n paperclips: player.secretUnlocks.paperclips,\r\n newsQueuePosition: player.secretUnlocks.newsQueuePosition,\r\n eiffelTowerChapter: player.secretUnlocks.eiffelTowerChapter,\r\n };\r\n delete player.secretUnlocks.uselessNewsClicks;\r\n delete player.secretUnlocks.paperclips;\r\n delete player.secretUnlocks.newsQueuePosition;\r\n delete player.secretUnlocks.eiffelTowerChapter;\r\n },\r\n migrations.refactorDoubleIPRebuyable,\r\n player => {\r\n if (player.requirementChecks.reality.slowestBH === 0) player.requirementChecks.reality.slowestBH = 1;\r\n },\r\n player => {\r\n // #1764 fix - EM200 bug from eternity autobuyer appearing to be zero but not actually being zero\r\n if (player.auto.eternity.amount.lt(0.01)) player.auto.eternity.amount = new Decimal(0);\r\n },\r\n player => {\r\n player.options.hiddenSubtabBits = Array.repeat(0, 11);\r\n player.options.lastOpenSubtab = Array.repeat(0, 11);\r\n },\r\n player => {\r\n const highestRefinementData = [\r\n { name: \"power\", id: ALCHEMY_RESOURCE.POWER },\r\n { name: \"infinity\", id: ALCHEMY_RESOURCE.INFINITY },\r\n { name: \"time\", id: ALCHEMY_RESOURCE.TIME },\r\n { name: \"replication\", id: ALCHEMY_RESOURCE.REPLICATION },\r\n { name: \"dilation\", id: ALCHEMY_RESOURCE.DILATION },\r\n { name: \"effarig\", id: ALCHEMY_RESOURCE.EFFARIG }\r\n ];\r\n for (const resource of highestRefinementData) {\r\n player.celestials.ra.highestRefinementValue[resource.name] = player.celestials.ra.alchemy[resource.id].amount;\r\n }\r\n },\r\n migrations.deletePostChallUnlocked,\r\n player => {\r\n // Delete PEC4 (id 63)\r\n if (player.reality.perks.has(63)) {\r\n player.reality.perks.delete(63);\r\n player.reality.perkPoints++;\r\n }\r\n // Delete TTMA4 (id 107)\r\n if (player.reality.perks.has(107)) {\r\n player.reality.perks.delete(107);\r\n player.reality.perkPoints++;\r\n }\r\n delete player.auto.timeTheorems.lastTick;\r\n },\r\n player => {\r\n // We can't reliably check if the player has or hasn't unlocked the automator via automator points without\r\n // essentially copy-pasting all the automator point code here (in the interest of avoiding use of globals).\r\n // So, in the range of progress where it's unclear, we stop it entirely in case it hasn't actually unlocked yet.\r\n if (player.realities > 5 && player.realities < 50) {\r\n player.reality.automator.state.mode = 1;\r\n player.reality.automator.state.stack = [];\r\n player.reality.automator.state.repeat = false;\r\n player.reality.automator.state.forceRestart = false;\r\n }\r\n },\r\n player => {\r\n for (const resource of player.celestials.ra.alchemy) {\r\n // We shouldn't access global variables in migrations so instead of Ra.alchemyResourceCap we use 25000.\r\n resource.amount = Math.clampMax(resource.amount, 25000);\r\n }\r\n },\r\n player => {\r\n const triadRegex = new RegExp(`T(\\\\d)`, \"gu\");\r\n player.timestudy.presets.forEach(p => p.studies = p.studies.replaceAll(triadRegex, \"30$1\"));\r\n // This may also potentially change variable or preset names in scripts, breaking them, but the likelihood of\r\n // this being a widespread issue is low enough that this is probably a better option than a really obtuse regex\r\n for (const script of Object.values(player.reality.automator.scripts)) {\r\n script.content = script.content.replaceAll(triadRegex, \"30$1\");\r\n }\r\n\r\n if (player.celestials.v.triadStudies !== undefined) {\r\n player.timestudy.studies = player.timestudy.studies.concat(\r\n player.celestials.v.triadStudies.map(id => id + 300));\r\n delete player.celestials.v.triadStudies;\r\n }\r\n },\r\n player => {\r\n delete player.options.confirmations.harshAutoClean;\r\n },\r\n player => {\r\n player.celestials.laitela.singularitySorting = {\r\n // Added more support in singularity milestone list, uses enum SINGULARITY_MILESTONE_RESOURCE in constants.js\r\n displayResource: player.options.showCondenseToMilestone ? 1 : 0,\r\n sortResource: 0,\r\n showCompleted: 0,\r\n sortOrder: 0,\r\n };\r\n delete player.options.showCondenseToMilestone;\r\n },\r\n () => {\r\n // This is just an empty patch because some orders got really messed up. Sorry -Scar\r\n },\r\n player => {\r\n player.reality.glyphs.sets = player.reality.glyphs.sets.map(glyphs => ({ glyphs, name: \"\" }));\r\n },\r\n player => {\r\n // Remove any accidental recursion that may have been introduced by the above patch\r\n while (!Array.isArray(player.reality.glyphs.sets[0].glyphs)) {\r\n player.reality.glyphs.sets = player.reality.glyphs.sets.map(glyphs => (glyphs.glyphs));\r\n }\r\n },\r\n player => {\r\n // For saves before cel7 existed, it will first add this prop (as a number) and then run this migration code. For\r\n // saves which are already in cel7, this prop will already exist as a Decimal. This workaround handles both cases\r\n player.celestials.pelle.rifts.chaos.fill = new Decimal(player.celestials.pelle.rifts.chaos.fill).toNumber();\r\n\r\n delete player.celestials.pelle.compact;\r\n player.celestials.pelle.collapsed = {\r\n upgrades: false,\r\n rifts: false,\r\n galaxies: false\r\n };\r\n player.celestials.pelle.galaxyGenerator.unlocked = player.celestials.pelle.galaxyGenerator.generatedGalaxies > 0;\r\n },\r\n player => {\r\n if (player.celestials.pelle.doomed) player.achievementBits[17] |= 1;\r\n if (player.celestials.pelle.upgrades.has(4)) player.achievementBits[17] |= 2;\r\n if (player.celestials.pelle.doomed && player.challenge.infinity.completedBits === 510) {\r\n player.achievementBits[17] |= (1 << 2);\r\n }\r\n if (player.timestudy.studies.compact().includes(181)) player.achievementBits[17] |= (1 << 5);\r\n },\r\n player => {\r\n player.achievementBits[16] |= (player.achievementBits[16] & (1 << 4)) << 3;\r\n player.achievementBits[16] &= ~(1 << 4);\r\n player.achievementBits[16] |= (player.achievementBits[16] & (1 << 2)) << 2;\r\n player.achievementBits[16] &= ~(1 << 2);\r\n },\r\n player => {\r\n player.achievementBits[17] &= ~(1 << 5);\r\n if (player.timestudy.studies.compact().includes(181) && player.celestials.pelle.doomed) {\r\n player.achievementBits[17] |= (1 << 5);\r\n }\r\n },\r\n player => {\r\n if (player.celestials.pelle.doomed && (player.challenge.infinity.completedBits & (1 << 5)) !== 0) {\r\n player.achievementBits[17] |= (1 << 2);\r\n } else {\r\n player.achievementBits[17] &= ~(1 << 2);\r\n }\r\n },\r\n player => {\r\n player.celestials.pelle.collapsed = player.celestials.collapsed;\r\n player.celestials.pelle.showBought = player.celestials.showBought;\r\n delete player.celestials.collapsed;\r\n delete player.celestials.showBought;\r\n },\r\n migrations.infMultNameConversion,\r\n player => {\r\n if (player.celestials.pelle.collapsed === undefined) {\r\n player.celestials.pelle.collapsed = {\r\n upgrades: false,\r\n rifts: false,\r\n galaxies: false\r\n };\r\n }\r\n },\r\n player => {\r\n const from = player.celestials.laitela;\r\n if (from.automation) {\r\n player.auto.darkMatterDims.isActive = from.automation.dimensions;\r\n player.auto.ascension.isActive = from.automation.ascension;\r\n player.auto.annihilation.isActive = from.automation.singularity;\r\n player.auto.singularity.isActive = from.automation.annihilation;\r\n\r\n delete player.celestials.laitela.automation.dimensions;\r\n delete player.celestials.laitela.automation.ascension;\r\n delete player.celestials.laitela.automation.singularity;\r\n delete player.celestials.laitela.automation.annihilation;\r\n }\r\n\r\n player.auto.darkMatterDims.lastTick = from.darkAutobuyerTimer;\r\n player.auto.ascension.lastTick = from.darkAutobuyerTimer;\r\n player.auto.annihilation.multiplier = from.autoAnnihilationSetting;\r\n\r\n delete player.celestials.laitela.darkAutobuyerTimer;\r\n delete player.celestials.laitela.darkAutobuyerTimer;\r\n delete player.celestials.laitela.autoAnnihilationSetting;\r\n },\r\n migrations.etercreqConversion,\r\n player => {\r\n delete player.options.confirmations.reality;\r\n },\r\n player => {\r\n const hasDimboost = player.celestials.pelle.upgrades.has(19);\r\n const hasDilUpg = player.celestials.pelle.upgrades.has(18);\r\n player.celestials.pelle.upgrades.delete(18);\r\n player.celestials.pelle.upgrades.delete(19);\r\n if (hasDimboost) player.celestials.pelle.upgrades.add(18);\r\n if (hasDilUpg) player.celestials.pelle.upgrades.add(19);\r\n },\r\n player => {\r\n delete player.auto.bulkOn;\r\n },\r\n player => {\r\n player.requirementChecks.permanent.emojiGalaxies = player.requirementChecks.permanent.cancerGalaxies;\r\n delete player.requirementChecks.permanent.cancerGalaxies;\r\n },\r\n player => {\r\n delete player.celestials.effarig.unlocksBits;\r\n delete player.celestials.ra.unlocksBits;\r\n },\r\n player => {\r\n for (const script of Object.values(player.reality.automator.scripts)) {\r\n script.id = parseInt(script.id, 10);\r\n }\r\n },\r\n player => {\r\n player.secretUnlocks.themes.delete(\"S4Cancer\");\r\n player.secretUnlocks.themes.add(\"S4Design\");\r\n },\r\n player => {\r\n player.reality.automator.state.editorScript = Number(player.reality.automator.state.editorScript);\r\n // I'm not sure if there's any error with the type of topLevelScript, but better safe than sorry\r\n player.reality.automator.state.topLevelScript = Number(player.reality.automator.state.topLevelScript);\r\n },\r\n player => {\r\n // Move dil upg no reset and tachyon particles no reset\r\n if (player.celestials.pelle.upgrades.delete(20)) player.celestials.pelle.upgrades.add(21);\r\n if (player.celestials.pelle.upgrades.delete(19)) player.celestials.pelle.upgrades.add(20);\r\n\r\n // Dimboost upgrade id was moved from 18 to 7 -- Make the corresponding change\r\n // Galaxy upgrade was inserted at 11. 7-10 should only be moved forward 1 place\r\n // and 10-17 2 places forward.\r\n const hasDimboostsResetNothing = player.celestials.pelle.upgrades.delete(18);\r\n for (let i = 17; i >= 10; i--) {\r\n if (player.celestials.pelle.upgrades.delete(i)) player.celestials.pelle.upgrades.add(i + 2);\r\n }\r\n for (let i = 9; i >= 7; i--) {\r\n if (player.celestials.pelle.upgrades.delete(i)) player.celestials.pelle.upgrades.add(i + 1);\r\n }\r\n if (hasDimboostsResetNothing) player.celestials.pelle.upgrades.add(7);\r\n },\r\n player => {\r\n const cel = player.celestials;\r\n const convToBit = x => x.toBitmask() >> 1;\r\n if (cel.teresa.quotes) player.celestials.teresa.quoteBits = convToBit(cel.teresa.quotes);\r\n if (cel.effarig.quotes) player.celestials.effarig.quoteBits = convToBit(cel.effarig.quotes);\r\n if (cel.enslaved.quotes) player.celestials.enslaved.quoteBits = convToBit(cel.enslaved.quotes);\r\n if (cel.v.quotes) player.celestials.v.quoteBits = convToBit(cel.v.quotes);\r\n if (cel.ra.quotes) player.celestials.ra.quoteBits = convToBit(cel.ra.quotes);\r\n if (cel.laitela.quotes) player.celestials.laitela.quoteBits = convToBit(cel.laitela.quotes);\r\n if (cel.pelle.quotes) player.celestials.pelle.quoteBits = convToBit(cel.pelle.quotes);\r\n\r\n delete player.celestials.teresa.quotes;\r\n delete player.celestials.effarig.quotes;\r\n delete player.celestials.enslaved.quotes;\r\n delete player.celestials.v.quotes;\r\n delete player.celestials.ra.quotes;\r\n delete player.celestials.laitela.quotes;\r\n delete player.celestials.pelle.quotes;\r\n },\r\n player => {\r\n if (player.celestials.pelle.rifts.famine) {\r\n player.celestials.pelle.rifts.vacuum = {\r\n ...player.celestials.pelle.rifts.famine,\r\n fill: new Decimal(player.celestials.pelle.rifts.famine.fill)\r\n };\r\n delete player.celestials.pelle.rifts.famine;\r\n }\r\n\r\n if (player.celestials.pelle.rifts.pestilence) {\r\n player.celestials.pelle.rifts.decay = {\r\n ...player.celestials.pelle.rifts.pestilence,\r\n fill: new Decimal(player.celestials.pelle.rifts.pestilence.fill)\r\n };\r\n delete player.celestials.pelle.rifts.pestilence;\r\n }\r\n\r\n if (player.celestials.pelle.rifts.war) {\r\n player.celestials.pelle.rifts.recursion = {\r\n ...player.celestials.pelle.rifts.war,\r\n fill: new Decimal(player.celestials.pelle.rifts.war.fill)\r\n };\r\n delete player.celestials.pelle.rifts.war;\r\n }\r\n\r\n if (player.celestials.pelle.rifts.death) {\r\n player.celestials.pelle.rifts.paradox = {\r\n ...player.celestials.pelle.rifts.death,\r\n fill: new Decimal(player.celestials.pelle.rifts.death.fill)\r\n };\r\n delete player.celestials.pelle.rifts.death;\r\n }\r\n },\r\n player => {\r\n delete player.newGame;\r\n },\r\n migrations.moveTS33,\r\n player => {\r\n const toMove = [\"antimatterDims\", \"infinityDims\", \"timeDims\", \"replicantiUpgrades\", \"dilationUpgrades\",\r\n \"blackHolePower\", \"realityUpgrades\", \"imaginaryUpgrades\"];\r\n for (const x of toMove) {\r\n if (player.auto[x].all !== undefined) {\r\n // Already up to date\r\n continue;\r\n }\r\n const all = player.auto[x];\r\n delete player.auto[x];\r\n player.auto[x] = { all, isActive: true };\r\n }\r\n },\r\n player => {\r\n player.celestials.ra.petWithRemembrance = player.celestials.ra.petWithRecollection;\r\n delete player.celestials.ra.petWithRecollection;\r\n },\r\n player => {\r\n for (const key of Object.keys(player.reality.automator.scripts)) {\r\n const lines = player.reality.automator.scripts[key].content.split(\"\\n\");\r\n for (let num = 0; num < lines.length; num++) {\r\n let rawLine = lines[num];\r\n // TT command removed\r\n rawLine = rawLine.replace(/^\\s*tt.*$/ui, \"\");\r\n // Changes to \"studies\" commands\r\n // For some reason `studies nowait load` would get caught by the following system without explicitly defining\r\n // that \"nowait load\" should not be captured. Probably because it treats nowait as nonexisting and then sees\r\n // that nowait is neither respec nor load. I tried consuming the nowait if it existed but that messed up the\r\n // replace function so this is the best I've got for now\r\n rawLine = rawLine.replace(/studies( nowait)? (?!respec|load|nowait respec|nowait load)(\\S.+)$/ui,\r\n \"studies$1 purchase $2\");\r\n rawLine = rawLine.replace(/studies( nowait)? load preset ([1-6])/ui, \"studies$1 load id $2\");\r\n rawLine = rawLine.replace(/studies( nowait)? load preset (\\S+)/ui, \"studies$1 load name $2\");\r\n // Autobuyer mode change (this is a much older change which wasn't migrated at the time)\r\n rawLine = rawLine.replace(/x current/ui, \"x highest\");\r\n // Variable definitions\r\n const defineMatch = rawLine.match(/define (\\S*)\\s*=\\s*(\\S.*)$/ui);\r\n if (defineMatch) {\r\n player.reality.automator.constants[defineMatch[1]] = defineMatch[2];\r\n rawLine = \"\";\r\n }\r\n lines[num] = rawLine;\r\n }\r\n player.reality.automator.scripts[key].content = lines.join(\"\\n\");\r\n }\r\n\r\n // Migrate IDs for all saves made during wave 3 testing, to prevent odd overwriting behavior on importing\r\n const newScripts = {};\r\n const oldScriptKeys = Object.keys(player.reality.automator.scripts);\r\n for (let newID = 1; newID <= oldScriptKeys.length; newID++) {\r\n newScripts[newID] = player.reality.automator.scripts[oldScriptKeys[newID - 1]];\r\n newScripts[newID].id = newID;\r\n }\r\n player.reality.automator.scripts = newScripts;\r\n },\r\n player => {\r\n delete player.celestials.pelle.armageddonDuration;\r\n delete player.celestials.pelle.maxAMThisArmageddon;\r\n delete player.options.sidebarMinimized;\r\n delete player.options.chart;\r\n delete player.devMode;\r\n },\r\n player => {\r\n const swap1 = player.achievementBits[10] & 4;\r\n const swap2 = player.achievementBits[11] & 8;\r\n if (swap1) {\r\n player.achievementBits[11] |= 8;\r\n } else {\r\n player.achievementBits[11] &= ~8;\r\n }\r\n if (swap2) {\r\n player.achievementBits[10] |= 4;\r\n } else {\r\n player.achievementBits[10] &= ~4;\r\n }\r\n },\r\n player => {\r\n if (player.options.UIType == 'Modern') {\r\n player.options.themeModern = player.options.theme ?? player.options.themeModern;\r\n } else {\r\n player.options.themeClassic = player.options.theme ?? player.options.themeClassic;\r\n }\r\n delete player.options.theme;\r\n\r\n if (BlackHole(1).isUnlocked) player.records.timePlayedAtBHUnlock = player.records.totalTimePlayed;\r\n },\r\n player => {\r\n player.IAP.enabled = !player.IAP.disabled;\r\n const toDelete = [\"totalSTD\", \"spentSTD\", \"exportSTD\", \"IPPurchases\", \"EPPurchases\", \"RMPurchases\",\r\n \"dimPurchases\", \"allDimPurchases\", \"replicantiPurchases\", \"dilatedTimePurchases\", \"disabled\"];\r\n for (const key of toDelete) delete player.IAP[key];\r\n },\r\n player => {\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n for (const glyph of allGlyphs) {\r\n if (glyph.symbol === \"key266b\") {\r\n glyph.symbol = undefined;\r\n glyph.color = undefined;\r\n glyph.cosmetic = \"music\";\r\n }\r\n if (glyph.type === \"companion\") glyph.color = undefined;\r\n }\r\n },\r\n player => {\r\n player.options.lightGlyphs = !player.options.forceDarkGlyphs;\r\n delete player.options.forceDarkGlyphs;\r\n },\r\n player =>{\r\n player.reality.warped = false;\r\n if(player.records.realTimeDoomed > 1e308) player.records.realTimeDoomed = 1e308;\r\n if(player.records.realTimePlayed > 1e308) player.records.realTimePlayed = 1e308;\r\n if(player.records.totalTimePlayed > 1e308) player.records.totalTimePlayed = 1e308;\r\n if(player.records.thisInfinity.realTime > 1e308) player.records.thisInfinity.realTime = 1e308;\r\n if(player.records.thisInfinity.time > 1e308) player.records.thisInfinity.time = 1e308;\r\n if(player.records.thisEternity.realTime > 1e308) player.records.thisEternity.realTime = 1e308;\r\n if(player.records.thisEternity.time > 1e308) player.records.thisEternity.time = 1e308;\r\n if(player.records.thisReality.realTime > 1e308) player.records.thisReality.realTime = 1e308;\r\n if(player.records.thisReality.time > 1e308) player.records.thisReality.time = 1e308;\r\n if(player.records.thisMend.realTime > 1e308) player.records.thisMend.realTime = 1e308;\r\n if(player.records.thisMend.time > 1e308) player.records.thisMend.time = 1e308;\r\n }, \r\n player =>{\r\n //this is the 8-16-23 Redemption Release\r\n if(!PlayerProgress.mendingUnlocked){\r\n player.auto.dilationUpgrades.all[11] = { isActive: false, lastTick: 0};\r\n player.auto.dilationUpgrades.all[12] = { isActive: false, lastTick: 0};\r\n player.auto.dilationUpgrades.all[13] = { isActive: false, lastTick: 0};\r\n player.requirementChecks.mending = {\r\n isEnd: false\r\n };\r\n player.records.thisMend = {\r\n time: Number.MAX_VALUE,\r\n realTime: Number.MAX_VALUE,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n maxEP: DC.D0,\r\n maxRM: DC.D0,\r\n maxiM: 0,\r\n maxRem: 0,\r\n };\r\n player.records.bestMend = {\r\n time: Number.MAX_VALUE,\r\n realTime: Number.MAX_VALUE,\r\n };\r\n player.speedrun.isUnlocked = true;\r\n player.mends = DC.D0,\r\n player.mending = {\r\n mendingPoints: DC.D0,\r\n upgradeBits: 0,\r\n reqLock: {\r\n mending: 0,\r\n },\r\n rebuyables: {\r\n 1: 0,\r\n 6: 0,\r\n 11: 0,\r\n 16: 0,\r\n },\r\n };\r\n player.celestials.destroyer = {\r\n quoteBits: 0,\r\n };\r\n player.celestials.kohler = {\r\n quoteBits: 0,\r\n };\r\n player.options.confirmations.mending = true;\r\n player.options.awayProgress = { \r\n mends: true,\r\n mendingPoints: true\r\n };\r\n player.mendingPoints = DC.D0;\r\n player.mends = DC.D0;\r\n player.mendingUpgrades = new Set();\r\n player.mvrmultUpgrades = 0;\r\n player.options.hiddenTabBits = 0;\r\n player.mendingPoints = player.mending.mendingPoints;\r\n if (MendingMilestone.three.isReached){\r\n player.celestials.ra.unlockBits += 2097152;\r\n }\r\n player.auto.dilationUpgrades.all = Array.range(0, 3).concat(Array.range(11, 14)).map(() => ({\r\n isActive: false,\r\n lastTick: 0,\r\n }));\r\n player.mends = new Decimal(player.mends);\r\n player.mendingPoints = new Decimal(player.mendingPoints);\r\n if (player.mends.gte(8)) {\r\n player.celestials.teresa.perkShop = [20, 20, 14, 6, 0, 0]\r\n }\r\n player.auto.musicglyph = {\r\n isUnlocked: false,\r\n isActive: false,\r\n }\r\n player.options.showHintText.mendingUpgrades = true;\r\n player.auto.mending = {\r\n mode: 0,\r\n amount: DC.D1,\r\n interval: 100,\r\n increaseWithMult: true,\r\n time: 1,\r\n xHighest: DC.D1,\r\n isActive: false,\r\n lastTick: 0\r\n };\r\n player.corruptedFragments = DC.D0;\r\n player.mending.warpRebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n };\r\n player.mending.corruptionRebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 4: 0,\r\n 5: 0,\r\n };\r\n player.mending.warpUpgradeBits = 0;\r\n player.mending.corruptionUpgradeBits = 0;\r\n player.mending.warpUpgReqs = 0;\r\n player.mending.corruptionUpgReqs = 0;\r\n player.mending.reqLock = {\r\n mending: 0,\r\n warp: 0,\r\n corruption: 0,\r\n };\r\n player.records.totalTimePlayed = new Decimal(player.records.totalTimePlayed);\r\n player.records.thisInfinity.time = new Decimal(player.records.thisInfinity.time);\r\n player.records.thisEternity.time = new Decimal(player.records.thisEternity.time);\r\n player.records.thisReality.time = new Decimal(player.records.thisReality.time);\r\n player.records.thisMend.time = new Decimal(player.records.thisMend.time);\r\n }\r\n }\r\n ],\r\n\r\n patch(player) {\r\n player.options.testVersion = player.options.testVersion || 0;\r\n for (let version = player.options.testVersion; version < this.patches.length; version++) {\r\n const patch = this.patches[version];\r\n patch(player);\r\n }\r\n this.setLatestTestVersion(player);\r\n },\r\n\r\n setLatestTestVersion(player) {\r\n player.options.testVersion = this.patches.length;\r\n }\r\n};\r\n","import * as ADNotations from \"@antimatter-dimensions/notations\";\r\n\r\nimport { DEV } from \"@/env\";\r\nimport { devMigrations } from \"./dev-migrations\";\r\nimport { migrations } from \"./migrations\";\r\n\r\nimport { deepmergeAll } from \"@/utility/deepmerge\";\r\n\r\nexport const BACKUP_SLOT_TYPE = {\r\n ONLINE: 0,\r\n OFFLINE: 1,\r\n RESERVE: 2,\r\n};\r\n\r\n// Note: interval is in seconds, and only the first RESERVE slot is ever used. Having intervalStr as a redundant\r\n// prop is necessary because using our TimeSpan formatting functions produces undesirable strings like \"1.00 minutes\"\r\nexport const AutoBackupSlots = [\r\n {\r\n id: 1,\r\n type: BACKUP_SLOT_TYPE.ONLINE,\r\n intervalStr: () => `${formatInt(1)} minute`,\r\n interval: 60,\r\n },\r\n {\r\n id: 2,\r\n type: BACKUP_SLOT_TYPE.ONLINE,\r\n intervalStr: () => `${formatInt(5)} minutes`,\r\n interval: 5 * 60,\r\n },\r\n {\r\n id: 3,\r\n type: BACKUP_SLOT_TYPE.ONLINE,\r\n intervalStr: () => `${formatInt(20)} minutes`,\r\n interval: 20 * 60,\r\n },\r\n {\r\n id: 4,\r\n type: BACKUP_SLOT_TYPE.ONLINE,\r\n intervalStr: () => `${formatInt(1)} hour`,\r\n interval: 3600,\r\n },\r\n {\r\n id: 5,\r\n type: BACKUP_SLOT_TYPE.OFFLINE,\r\n intervalStr: () => `${formatInt(10)} minutes`,\r\n interval: 10 * 60,\r\n },\r\n {\r\n id: 6,\r\n type: BACKUP_SLOT_TYPE.OFFLINE,\r\n intervalStr: () => `${formatInt(1)} hour`,\r\n interval: 3600,\r\n },\r\n {\r\n id: 7,\r\n type: BACKUP_SLOT_TYPE.OFFLINE,\r\n intervalStr: () => `${formatInt(5)} hours`,\r\n interval: 5 * 3600,\r\n },\r\n {\r\n id: 8,\r\n type: BACKUP_SLOT_TYPE.RESERVE,\r\n },\r\n];\r\n\r\nexport const GameStorage = {\r\n currentSlot: 0,\r\n saves: {\r\n 0: undefined,\r\n 1: undefined,\r\n 2: undefined\r\n },\r\n saved: 0,\r\n lastSaveTime: Date.now(),\r\n lastCloudSave: Date.now(),\r\n offlineEnabled: undefined,\r\n offlineTicks: undefined,\r\n lastUpdateOnLoad: 0,\r\n lastBackupTimes: [],\r\n oldBackupTimer: 0,\r\n ignoreBackupTimer: true,\r\n\r\n // Limit offline tick count using two conditions:\r\n // - Ticks should never be shorter than 33ms (this would allow offline to exploit tick microstructure)\r\n // - Count should be limited to 1e6 (the options UI doesn't allow for this to be set above this value)\r\n maxOfflineTicks(simulatedMs, defaultTicks = this.offlineTicks) {\r\n const tickLimit = Math.clampMax(Math.floor(simulatedMs / 33), 1e6);\r\n return Math.clampMax(defaultTicks, tickLimit);\r\n },\r\n\r\n get localStorageKey() {\r\n return DEV ? \"dimensionTestSave\" : \"dimensionSave\";\r\n },\r\n\r\n backupDataKey(saveSlot, backupSlot) {\r\n return DEV ? `backupTestSave-${saveSlot}-${backupSlot}` : `backupSave-${saveSlot}-${backupSlot}`;\r\n },\r\n\r\n backupTimeKey(saveSlot) {\r\n return DEV ? `backupTestTimes-${saveSlot}` : `backupTimes-${saveSlot}`;\r\n },\r\n\r\n load() {\r\n const save = localStorage.getItem(this.localStorageKey);\r\n const root = GameSaveSerializer.deserialize(save);\r\n\r\n this.loadRoot(root);\r\n Achievements.updateSteamStatus();\r\n },\r\n\r\n loadRoot(root) {\r\n if (root === undefined) {\r\n this.currentSlot = 0;\r\n this.loadPlayerObject(Player.defaultStart);\r\n return;\r\n }\r\n\r\n if (root.saves === undefined) {\r\n // Migrate old format\r\n this.saves = {\r\n 0: root,\r\n 1: undefined,\r\n 2: undefined\r\n };\r\n this.currentSlot = 0;\r\n this.loadPlayerObject(root);\r\n this.loadBackupTimes();\r\n this.backupOfflineSlots();\r\n this.save(true);\r\n return;\r\n }\r\n\r\n this.saves = root.saves;\r\n this.currentSlot = root.current;\r\n this.loadPlayerObject(this.saves[this.currentSlot]);\r\n this.loadBackupTimes();\r\n this.backupOfflineSlots();\r\n },\r\n\r\n loadSlot(slot) {\r\n this.currentSlot = slot;\r\n // Save current slot to make sure no changes are lost\r\n this.save(true);\r\n this.loadPlayerObject(this.saves[slot] ?? Player.defaultStart);\r\n this.loadBackupTimes();\r\n this.backupOfflineSlots();\r\n Tabs.all.find(t => t.id === player.options.lastOpenTab).show(false);\r\n Modal.hideAll();\r\n Cloud.resetTempState();\r\n GameUI.notify.info(\"Game loaded\");\r\n Achievements.updateSteamStatus();\r\n },\r\n\r\n import(saveData) {\r\n if (tryImportSecret(saveData) || Theme.tryUnlock(saveData)) {\r\n return;\r\n }\r\n const newPlayer = GameSaveSerializer.deserialize(saveData);\r\n if (this.checkPlayerObject(newPlayer) !== \"\") {\r\n Modal.message.show(\"Could not load the save (format unrecognized or invalid).\");\r\n return;\r\n }\r\n if (false && (newPlayer.version - 51 == 0.007)) {\r\n Modal.message.show(\"Development saves cannot be imported into the public game.\");\r\n return;\r\n }\r\n this.oldBackupTimer = player.backupTimer;\r\n Modal.hideAll();\r\n Quote.clearAll();\r\n AutomatorBackend.clearEditor();\r\n this.loadPlayerObject(newPlayer);\r\n GlyphAppearanceHandler.clearInvalidCosmetics();\r\n if (player.speedrun?.isActive) Speedrun.setSegmented(true);\r\n this.save(true);\r\n Cloud.resetTempState();\r\n this.resetBackupTimer();\r\n\r\n // This is to fix a very specific exploit: When the game is ending, some tabs get hidden\r\n // The options tab is the first one of those, which makes the player redirect to the Pelle tab\r\n // You can doom your reality even if you haven't unlocked infinity yet if you import while the Pelle tab\r\n // is showing\r\n Tab.options.subtabs[0].show();\r\n GameUI.notify.info(\"Game imported\");\r\n Achievements.updateSteamStatus();\r\n },\r\n\r\n importAsFile() {\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n const reader = new FileReader();\r\n const text = reader.readAsText(file);\r\n this.import(text);\r\n },\r\n\r\n overwriteSlot(slot, saveData) {\r\n this.saves[slot] = saveData;\r\n if (slot === this.currentSlot) {\r\n this.loadPlayerObject(saveData);\r\n }\r\n\r\n this.save(true);\r\n },\r\n\r\n // Some minimal save verification; if the save is valid then this returns an empty string, otherwise it returns a\r\n // a string roughly stating what's wrong with the save. In order for importing to work properly, this must return\r\n // an empty string.\r\n checkPlayerObject(save) {\r\n // Sometimes save is the output of GameSaveSerializer.deserialize, and if that function fails then it will result\r\n // in the input parameter here being undefined\r\n if (save === undefined || save === null) return \"Save decoding failed (invalid format)\";\r\n // Right now all we do is check for the existence of an antimatter prop, but if we wanted to do further save\r\n // verification then here's where we'd do it\r\n if (save.money === undefined && save.antimatter === undefined) return \"Save does not have antimatter property\";\r\n\r\n // Recursively check for any NaN props and add any we find to an array\r\n const invalidProps = [];\r\n function checkNaN(obj, path) {\r\n let hasNaN = false;\r\n for (const key in obj) {\r\n const prop = obj[key];\r\n let thisNaN;\r\n switch (typeof prop) {\r\n case \"object\":\r\n thisNaN = checkNaN(prop, `${path}.${key}`);\r\n hasNaN = hasNaN || thisNaN;\r\n break;\r\n case \"number\":\r\n thisNaN = Number.isNaN(prop);\r\n hasNaN = hasNaN || thisNaN;\r\n if (thisNaN) invalidProps.push(`${path}.${key}`);\r\n break;\r\n case \"string\":\r\n // If we're attempting to import, all NaN entries will still be strings\r\n thisNaN = prop === \"NaN\";\r\n hasNaN = hasNaN || thisNaN;\r\n if (thisNaN) invalidProps.push(`${path}.${key}`);\r\n break;\r\n }\r\n }\r\n return hasNaN;\r\n }\r\n checkNaN(save, \"player\");\r\n\r\n if (invalidProps.length === 0) return \"\";\r\n return `${quantify(\"NaN player property\", invalidProps.length)} found:\r\n ${invalidProps.join(\", \")}`;\r\n },\r\n\r\n // A few things in the current game state can prevent saving, which we want to do for all forms of saving\r\n canSave(ignoreSimulation = false) {\r\n const isSelectingGlyph = GlyphSelection.active;\r\n const isSimulating = ui.$viewModel.modal.progressBar !== undefined && !ignoreSimulation;\r\n const isEnd = (GameEnd.endState >= END_STATE_MARKERS.SAVE_DISABLED && !GameEnd.removeAdditionalEnd) ||\r\n GameEnd.endState >= END_STATE_MARKERS.INTERACTIVITY_DISABLED;\r\n return !isEnd && !(isSelectingGlyph || isSimulating);\r\n },\r\n\r\n save(silent = true, manual = false) {\r\n if (!this.canSave()) return;\r\n this.lastSaveTime = Date.now();\r\n GameIntervals.save.restart();\r\n if (manual && ++this.saved > 99) SecretAchievement(12).unlock();\r\n const root = {\r\n current: this.currentSlot,\r\n saves: this.saves\r\n };\r\n localStorage.setItem(this.localStorageKey, GameSaveSerializer.serialize(root));\r\n if (!silent) GameUI.notify.info(\"Game saved\");\r\n },\r\n\r\n // Saves a backup, updates save timers (this is called before nextBackup is updated), and then saves the timers too.\r\n // When checking offline backups, this call typically resolves during offline progress simulation, so in this case\r\n // we want to ignore that (which saves the game state pre-simulation). This is because it's messier and less useful\r\n // to the player if we instead defer the call until after simulation\r\n saveToBackup(backupSlot, backupTimer) {\r\n if (!this.canSave(true)) return;\r\n localStorage.setItem(this.backupDataKey(this.currentSlot, backupSlot), GameSaveSerializer.serialize(player));\r\n this.lastBackupTimes[backupSlot] = {\r\n backupTimer,\r\n date: Date.now(),\r\n };\r\n localStorage.setItem(this.backupTimeKey(this.currentSlot), GameSaveSerializer.serialize(this.lastBackupTimes));\r\n },\r\n\r\n // Does not actually load, but returns an object which is meant to be passed on to loadPlayerObject()\r\n loadFromBackup(backupSlot) {\r\n const data = localStorage.getItem(this.backupDataKey(this.currentSlot, backupSlot));\r\n return GameSaveSerializer.deserialize(data);\r\n },\r\n\r\n // Check for the amount of time spent offline and perform an immediate backup for the longest applicable slot\r\n // which has had more than its timer elapse since the last time the game was open and saved\r\n backupOfflineSlots() {\r\n const currentTime = Date.now();\r\n const offlineTimeMs = currentTime - this.lastUpdateOnLoad;\r\n const offlineSlots = AutoBackupSlots\r\n .filter(slot => slot.type === BACKUP_SLOT_TYPE.OFFLINE)\r\n .sort((a, b) => b.interval - a.interval);\r\n for (const backupInfo of offlineSlots) {\r\n if (offlineTimeMs > 1000 * backupInfo.interval) {\r\n this.saveToBackup(backupInfo.id, player.backupTimer);\r\n break;\r\n }\r\n }\r\n },\r\n\r\n backupOnlineSlots(slotsToBackup) {\r\n const currentTime = player.backupTimer;\r\n for (const slot of slotsToBackup) this.saveToBackup(slot, currentTime);\r\n },\r\n\r\n // Loads in all the data from previous backup times in localStorage\r\n loadBackupTimes() {\r\n this.lastBackupTimes = GameSaveSerializer.deserialize(localStorage.getItem(this.backupTimeKey(this.currentSlot)));\r\n if (!this.lastBackupTimes) this.lastBackupTimes = {};\r\n for (const backupInfo of AutoBackupSlots) {\r\n const key = backupInfo.id;\r\n if (!this.lastBackupTimes[key]) {\r\n this.lastBackupTimes[key] = {\r\n backupTimer: 0,\r\n date: 0,\r\n };\r\n }\r\n }\r\n },\r\n\r\n // This is checked in the checkEverySecond game interval. Determining which slots to save has a 800ms grace time to\r\n // account for delays occurring from the saving operation itself; without this, the timer slips backwards by a second\r\n // every time it saves\r\n tryOnlineBackups() {\r\n const toBackup = [];\r\n for (const backupInfo of AutoBackupSlots.filter(slot => slot.type === BACKUP_SLOT_TYPE.ONLINE)) {\r\n const id = backupInfo.id;\r\n const timeSinceLast = player.backupTimer - (this.lastBackupTimes[id]?.backupTimer ?? 0);\r\n if (1000 * backupInfo.interval - timeSinceLast <= 800) toBackup.push(id);\r\n }\r\n this.backupOnlineSlots(toBackup);\r\n },\r\n\r\n // Set the next backup time, but make sure to skip forward an appropriate amount if a load or import happened,\r\n // since these may cause the backup timer to be significantly behind\r\n resetBackupTimer() {\r\n const latestBackupTime = Object.values(this.lastBackupTimes).map(t => t && t.backupTimer).max();\r\n player.backupTimer = Math.max(this.oldBackupTimer, player.backupTimer, latestBackupTime);\r\n },\r\n\r\n // Saves the current game state to the first reserve slot it finds\r\n saveToReserveSlot() {\r\n const targetSlot = AutoBackupSlots.find(slot => slot.type === BACKUP_SLOT_TYPE.RESERVE).id;\r\n this.saveToBackup(targetSlot, player.backupTimer);\r\n },\r\n\r\n export() {\r\n copyToClipboard(this.exportModifiedSave());\r\n GameUI.notify.info(\"Exported current savefile to your clipboard\");\r\n },\r\n\r\n get exportDateString() {\r\n const dateObj = new Date();\r\n const y = dateObj.getFullYear();\r\n const m = dateObj.getMonth() + 1;\r\n const d = dateObj.getDate();\r\n return `${y}-${m}-${d}`;\r\n },\r\n\r\n exportAsFile() {\r\n if (!this.canSave()) return;\r\n player.options.exportedFileCount++;\r\n this.save(true);\r\n const saveFileName = player.options.saveFileName ? ` - ${player.options.saveFileName},` : \"\";\r\n const save = this.exportModifiedSave();\r\n download(\r\n `AD Save, Slot ${GameStorage.currentSlot + 1}${saveFileName} #${player.options.exportedFileCount} \\\r\n(${this.exportDateString}).txt`, save);\r\n GameUI.notify.info(\"Successfully downloaded current save file to your computer\");\r\n },\r\n\r\n exportBackupsAsFile() {\r\n player.options.exportedFileCount++;\r\n const backupData = {};\r\n for (const id of AutoBackupSlots.map(slot => slot.id)) {\r\n const backup = this.loadFromBackup(id);\r\n if (backup) backupData[id] = backup;\r\n }\r\n backupData.time = GameSaveSerializer.deserialize(localStorage.getItem(this.backupTimeKey(this.currentSlot)));\r\n download(\r\n `AD Save Backups, Slot ${GameStorage.currentSlot + 1} #${player.options.exportedFileCount} \\\r\n(${this.exportDateString}).txt`, GameSaveSerializer.serialize(backupData));\r\n GameUI.notify.info(\"Successfully downloaded save file backups to your computer\");\r\n },\r\n\r\n importBackupsFromFile(importText) {\r\n const backupData = GameSaveSerializer.deserialize(importText);\r\n localStorage.setItem(this.backupTimeKey(this.currentSlot), GameSaveSerializer.serialize(backupData.time));\r\n for (const backupKey of Object.keys(backupData)) {\r\n if (backupKey === \"time\") continue;\r\n const id = Number(backupKey);\r\n const storageKey = this.backupDataKey(this.currentSlot, id);\r\n localStorage.setItem(storageKey, GameSaveSerializer.serialize(backupData[backupKey]));\r\n this.backupTimeData[id] = {\r\n backupTimer: backupData.time[id].backupTimer,\r\n date: backupData.time[id].date,\r\n };\r\n }\r\n this.resetBackupTimer();\r\n GameUI.notify.info(\"Successfully imported save file backups from file\");\r\n },\r\n\r\n // There are a couple props which may need to export with different values, so we handle that here\r\n exportModifiedSave() {\r\n // Speedrun segmented is exported as true\r\n const segmented = player.speedrun.isSegmented;\r\n Speedrun.setSegmented(true);\r\n\r\n // Serialize the altered data, then restore the old prop values afterwards and return\r\n const save = GameSaveSerializer.serialize(player);\r\n Speedrun.setSegmented(segmented);\r\n return save;\r\n },\r\n\r\n hardReset() {\r\n this.loadPlayerObject(Player.defaultStart);\r\n this.save(true);\r\n Tab.dimensions.antimatter.show();\r\n Cloud.resetTempState();\r\n },\r\n\r\n loadPlayerObject(playerObject) {\r\n this.saved = 0;\r\n\r\n const checkString = this.checkPlayerObject(playerObject);\r\n if (playerObject === Player.defaultStart || checkString !== \"\") {\r\n if (DEV && checkString !== \"\") {\r\n // eslint-disable-next-line no-console\r\n console.log(`Savefile was invalid and has been reset - ${checkString}`);\r\n }\r\n player = deepmergeAll([{}, Player.defaultStart]);\r\n player.records.gameCreatedTime = Date.now();\r\n player.lastUpdate = Date.now();\r\n if (DEV) {\r\n devMigrations.setLatestTestVersion(player);\r\n }\r\n } else {\r\n // We want to support importing from versions much older than the newest pre-reality version, but we also want\r\n // to support in-dev versions so we don't lose access to the large bank of in-dev saves we've accumulated. As\r\n // a result, we need to be careful with what order we apply the dev/live migrations and the deepmerge with the\r\n // default player object to fill in missing props.\r\n\r\n // For pre-Reality versions, we additionally need to fire off an event to ensure certain achievements and\r\n // notifications trigger properly. Missing props are filled in at this step via deepmerge\r\n const isPreviousVersionSave = playerObject.version < migrations.firstRealityMigration;\r\n player = migrations.patchPreReality(playerObject);\r\n if (isPreviousVersionSave) {\r\n if (DEV) devMigrations.setLatestTestVersion(player);\r\n EventHub.dispatch(GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION);\r\n }\r\n\r\n // All dev migrations are applied in-place, mutating the player object. Note that since we only want to apply dev\r\n // migrations in a dev environment, this means that test saves may fail to migrate on the live version\r\n if (DEV && player.options.testVersion !== undefined) {\r\n devMigrations.patch(player);\r\n }\r\n\r\n // Post-reality migrations are separated from pre-reality because they need to happen after any dev migrations,\r\n // which themselves must happen after the deepmerge\r\n player = migrations.patchPostReality(player);\r\n }\r\n\r\n this.saves[this.currentSlot] = player;\r\n this.lastUpdateOnLoad = player.lastUpdate;\r\n\r\n if (DEV) {\r\n guardFromNaNValues(player);\r\n }\r\n\r\n ui.view.news = player.options.news.enabled;\r\n ui.view.UIType = player.options.UIType;\r\n ui.view.tutorialState = player.tutorialState;\r\n ui.view.tutorialActive = player.tutorialActive;\r\n\r\n ECTimeStudyState.invalidateCachedRequirements();\r\n recalculateAllGlyphs();\r\n checkPerkValidity();\r\n V.updateTotalRunUnlocks();\r\n Enslaved.boostReality = false;\r\n GameEnd.additionalEnd = 0;\r\n Theme.set(Theme.currentName());\r\n Glyphs.unseen = [];\r\n Glyphs.unequipped = [];\r\n Notations.find(player.options.notation).setAsCurrent(true);\r\n ADNotations.Settings.exponentCommas.show = player.options.commas;\r\n\r\n EventHub.dispatch(GAME_EVENT.GAME_LOAD);\r\n AutomatorBackend.initializeFromSave();\r\n Lazy.invalidateAll();\r\n\r\n const rawDiff = (Date.now() - player.lastUpdate) * (player.testSpeed ?? 1);\r\n // We set offlineEnabled externally on importing or loading a backup; otherwise this is just a local load\r\n const simulateOffline = this.offlineEnabled ?? player.options.offlineProgress;\r\n if (simulateOffline && !Speedrun.isPausedAtStart()) {\r\n let diff = rawDiff;\r\n player.speedrun.offlineTimeUsed += diff;\r\n if (diff > 5 * 60 * 1000 && player.celestials.enslaved.autoStoreReal) {\r\n diff = Enslaved.autoStoreRealTime(diff);\r\n }\r\n if (diff > 10000) {\r\n // The third parameter is a `fast` parameter that we use to only\r\n // simulate at most 50 ticks if the player was offline for less\r\n // than 50 seconds.\r\n simulateTime(diff / 1000, false, diff < 50 * 1000);\r\n } else {\r\n // This is ugly, should fix how we deal with it...\r\n this.postLoadStuff();\r\n }\r\n } else {\r\n // Try to unlock \"Don't you dare sleep\" (usually this check only happens\r\n // during a game tick, which makes the achievement impossible to get\r\n // with offline progress off)\r\n if (!Speedrun.isPausedAtStart()) Achievement(35).tryUnlock();\r\n player.lastUpdate = Date.now();\r\n this.postLoadStuff();\r\n }\r\n\r\n // 2-week threshold for showing the catchup modal. We want to show this even if offline progress is disabled\r\n // because its presence and usefulness is tied to what the player experiences, not the game. setTimeout seems to be\r\n // the only way to get this to display, as it won't display even if called after init() entirely nor is it getting\r\n // actively hidden by Modal.hideAll(), so delaying it asynchronously gets past whatever is causing it to not appear.\r\n // Delay time is relatively long to make it more likely to work on much slower computers.\r\n if (rawDiff > 1000 * 86400 * 14) {\r\n if ([\"S4\", \"S9\"].includes(Theme.current().name)) Theme.set(\"Normal\");\r\n // Looks like the game takes too long to load so we need to setTimeout else it doesn't check for the notation.\r\n setTimeout(() => {\r\n if (Notations.current.isPainful) Notation.mixedScientific.setAsCurrent();\r\n }, 2500);\r\n setTimeout(() => Modal.catchup.show(rawDiff), 5000);\r\n }\r\n },\r\n postLoadStuff() {\r\n // This is called from simulateTime, if that's called; otherwise, it gets called\r\n // manually above\r\n GameIntervals.restart();\r\n GameStorage.ignoreBackupTimer = false;\r\n Enslaved.nextTickDiff = player.options.updateRate;\r\n // The condition for this secret achievement is only checked when the player is actively storing real time, either\r\n // when online or simulating time. When only storing offline, the condition is never actually entered in the\r\n // gameLoop due to the option technically being false, so we need to check it on-load too.\r\n if (player.celestials.enslaved.storedReal > (24 * 60 * 60 * 1000)) SecretAchievement(46).unlock();\r\n GameUI.update();\r\n\r\n for (const resource of AlchemyResources.all) {\r\n resource.before = resource.amount;\r\n }\r\n \r\n document.addEventListener(\"mouseup\", (event) => {\r\n if(event.button == 0){\r\n player.celestials.laitela.isHoldingLClick = false;\r\n }\r\n })\r\n }\r\n};\r\n\r\nfunction download(filename, text) {\r\n const pom = document.createElement(\"a\");\r\n pom.setAttribute(\"href\", `data:text/plain;charset=utf-8,${encodeURIComponent(text)}`);\r\n pom.setAttribute(\"download\", filename);\r\n\r\n if (document.createEvent) {\r\n const event = document.createEvent(\"MouseEvents\");\r\n event.initEvent(\"click\", true, true);\r\n pom.dispatchEvent(event);\r\n } else {\r\n pom.click();\r\n }\r\n}\r\n","/* eslint-disable no-param-reassign */\r\n\r\n// Copyright (c) 2011, Daniel Guerrero\r\n// All rights reserved.\r\n//\r\n// Redistribution and use in source and binary forms, with or without\r\n// modification, are permitted provided that the following conditions are met:\r\n// * Redistributions of source code must retain the above copyright\r\n// notice, this list of conditions and the following disclaimer.\r\n// * Redistributions in binary form must reproduce the above copyright\r\n// notice, this list of conditions and the following disclaimer in the\r\n// documentation and/or other materials provided with the distribution.\r\n//\r\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n// DISCLAIMED. IN NO EVENT SHALL DANIEL GUERRERO BE LIABLE FOR ANY\r\n// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r\n// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n//\r\n\r\n/**\r\n * Uses the new array typed in javascript to binary base64 encode/decode\r\n * at the moment just decodes a binary base64 encoded\r\n * into either an ArrayBuffer (decodeArrayBuffer)\r\n * or into an Uint8Array (decode)\r\n *\r\n * References:\r\n * https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer\r\n * https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint8Array\r\n */\r\n\r\nconst keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n\r\n/* Will return a Uint8Array type */\r\nexport function decodeArrayBuffer(input) {\r\n const bytes = (input.length / 4) * 3;\r\n const ab = new ArrayBuffer(bytes);\r\n decodeBase64Binary(input, ab);\r\n\r\n return ab;\r\n}\r\n\r\nfunction removePaddingChars(input) {\r\n const lkey = keyStr.indexOf(input.charAt(input.length - 1));\r\n if (lkey === 64) {\r\n return input.substring(0, input.length - 1);\r\n }\r\n return input;\r\n}\r\n\r\nexport function decodeBase64Binary(input, arrayBuffer) {\r\n // Get last chars to see if are valid\r\n input = removePaddingChars(input);\r\n input = removePaddingChars(input);\r\n\r\n const bytes = parseInt((input.length / 4) * 3, 10);\r\n\r\n let array;\r\n let chr1, chr2, chr3;\r\n let enc1, enc2, enc3, enc4;\r\n let i = 0;\r\n let j = 0;\r\n\r\n if (arrayBuffer)\r\n array = new Uint8Array(arrayBuffer);\r\n else\r\n array = new Uint8Array(bytes);\r\n\r\n input = input.replace(/[^A-Za-z0-9+/=]/gu, \"\");\r\n\r\n for (i = 0; i < bytes; i += 3) {\r\n // Get the 3 octects in 4 ascii chars\r\n enc1 = keyStr.indexOf(input.charAt(j++));\r\n enc2 = keyStr.indexOf(input.charAt(j++));\r\n enc3 = keyStr.indexOf(input.charAt(j++));\r\n enc4 = keyStr.indexOf(input.charAt(j++));\r\n\r\n chr1 = (enc1 << 2) | (enc2 >> 4);\r\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n chr3 = ((enc3 & 3) << 6) | enc4;\r\n\r\n array[i] = chr1;\r\n if (enc3 !== 64) array[i + 1] = chr2;\r\n if (enc4 !== 64) array[i + 2] = chr3;\r\n }\r\n\r\n return array;\r\n}\r\n","// Replace the following with your app's Firebase project configuration\r\n// See: https://firebase.google.com/docs/web/learn-more#config-object\r\nexport const firebaseConfig = {\r\n \"apiKey\": null,\r\n \"authDomain\": null,\r\n \"databaseURL\": null,\r\n \"projectId\": null,\r\n \"storageBucket\": null,\r\n \"messagingSenderId\": null,\r\n \"appId\": null,\r\n};\r\n","import { GameMechanicState } from \"../game-mechanics\";\r\n\r\nclass GameProgressState extends GameMechanicState {\r\n get id() {\r\n return this.config.id;\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get suggestedResource() {\r\n return typeof this.config.suggestedResource === \"function\"\r\n ? this.config.suggestedResource()\r\n : this.config.suggestedResource;\r\n }\r\n}\r\n\r\nexport const GameProgress = GameProgressState.createAccessor(GameDatabase.progressStages);\r\nGameProgress.all = GameDatabase.progressStages;\r\n\r\nclass CatchupResource extends GameMechanicState {\r\n get requiredStage() {\r\n return this.config.requiredStage;\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get description() {\r\n return typeof this.config.description === \"function\" ? this.config.description() : this.config.description;\r\n }\r\n}\r\n\r\nexport const CatchupResources = mapGameDataToObject(\r\n GameDatabase.catchupResources,\r\n config => new CatchupResource(config)\r\n);\r\n\r\nexport const ProgressChecker = {\r\n getProgressStage(save) {\r\n const db = GameProgress.all;\r\n for (let stage = db.length - 1; stage >= 0; stage--) {\r\n if (db[stage].hasReached(save)) return db[stage];\r\n }\r\n throw Error(\"No valid progress stage found\");\r\n },\r\n\r\n // Returns a value corresponding to keys in PROGRESS_STAGE, with a rough interpolation between stages\r\n getCompositeProgress(save) {\r\n if (!save) return 0;\r\n const stage = this.getProgressStage(save);\r\n return stage.id + Math.clampMax(stage.subProgressValue(save), 1);\r\n },\r\n\r\n // Returns -1 or 1 when one save is very likely to be farther than the other, otherwise returns 0 if they're close\r\n compareSaveProgress(first, second) {\r\n const progressDifference = this.getCompositeProgress(first) - this.getCompositeProgress(second);\r\n if (progressDifference > 0.05) return -1;\r\n if (progressDifference < -0.05) return 1;\r\n return 0;\r\n },\r\n\r\n // Returns -1 or 1 based on which save is older. Returns 0 if one is undefined, will be handled upstream\r\n compareSaveTimes(first, second) {\r\n if (!first || !second) return 0;\r\n const timeDifference = first.records?.realTimePlayed - second.records?.realTimePlayed;\r\n if (timeDifference >= 0) return -1;\r\n return 1;\r\n }\r\n};\r\n","/* eslint-disable import/extensions */\r\nimport pako from \"pako/dist/pako.esm.mjs\";\r\n/* eslint-enable import/extensions */\r\n\r\nimport {\r\n createUserWithEmailAndPassword,\r\n getAuth,\r\n GoogleAuthProvider,\r\n signInWithEmailAndPassword,\r\n signInWithPopup,\r\n signOut\r\n} from \"firebase/auth\";\r\nimport { get, getDatabase, ref, set } from \"firebase/database\";\r\nimport { initializeApp } from \"firebase/app\";\r\nimport { sha512_256 } from \"js-sha512\";\r\n\r\nimport { STEAM } from \"@/env\";\r\n\r\nimport { decodeBase64Binary } from \"./base64-binary\";\r\nimport { firebaseConfig } from \"./firebase-config\";\r\nimport { ProgressChecker } from \"./progress-checker\";\r\nimport { SteamRuntime } from \"@/steam\";\r\n\r\nconst hasFirebaseConfig = firebaseConfig.apiKey !== null;\r\nif (hasFirebaseConfig) {\r\n initializeApp(firebaseConfig);\r\n}\r\n\r\nexport const Cloud = {\r\n provider: hasFirebaseConfig ? new GoogleAuthProvider() : null,\r\n auth: hasFirebaseConfig ? getAuth() : null,\r\n db: hasFirebaseConfig ? getDatabase() : null,\r\n user: null,\r\n lastCloudHash: null,\r\n\r\n get isAvailable() {\r\n return hasFirebaseConfig;\r\n },\r\n\r\n resetTempState() {\r\n this.lastCloudHash = null;\r\n GameStorage.lastCloudSave = Date.now();\r\n GameIntervals.checkCloudSave.restart();\r\n },\r\n\r\n get loggedIn() {\r\n return this.user !== null;\r\n },\r\n\r\n async login() {\r\n if (!this.isAvailable) {\r\n return;\r\n }\r\n\r\n try {\r\n await signInWithPopup(this.auth, this.provider);\r\n ShopPurchaseData.syncSTD();\r\n if (player.options.hideGoogleName) GameUI.notify.success(`Successfully logged in to Google Account`);\r\n else GameUI.notify.success(`Successfully logged in as ${this.user.displayName}`);\r\n if (ShopPurchaseData.isIAPEnabled) Speedrun.setSTDUse(true);\r\n } catch (e) {\r\n GameUI.notify.error(\"Google Account login failed\");\r\n }\r\n },\r\n\r\n async loginWithSteam(accountId, staticAccountId, screenName) {\r\n if (!this.isAvailable) {\r\n return;\r\n }\r\n\r\n if (this.loggedIn) {\r\n Cloud.user.displayName = screenName;\r\n return;\r\n }\r\n\r\n const email = `${accountId}@ad.com`;\r\n const pass = staticAccountId;\r\n let error = undefined;\r\n\r\n await signInWithEmailAndPassword(this.auth, email, pass)\r\n .catch(() => createUserWithEmailAndPassword(this.auth, email, pass))\r\n .catch(x => error = x);\r\n\r\n if (error !== undefined) {\r\n // eslint-disable-next-line no-console\r\n console.log(`Firebase Login Error: ${error}`);\r\n return;\r\n }\r\n\r\n Cloud.user.displayName = screenName;\r\n },\r\n\r\n // NOTE: This function is largely untested due to not being used at any place within web reality code\r\n async loadMobile() {\r\n if (!this.user) return;\r\n const snapshot = await get(ref(this.db, `users/${this.user.id}/player`));\r\n if (snapshot.exists) {\r\n const encoded = snapshot.val();\r\n const uintArray = decodeBase64Binary(encoded.replace(/-/gu, \"+\").replace(/_/gu, \"/\"));\r\n const save = pako.ungzip(uintArray, { to: \"string\" });\r\n }\r\n },\r\n\r\n compareSaves(cloud, local, hash) {\r\n // This try/except will generally only throw an exception if the cloud save is somehow malformed.\r\n // In practice this should only happen for saves which are really old, or from very early development.\r\n // This will be handled upstream by showing a modal notifying the player of the invalid data and giving them\r\n // options to resolve it without needing to open up the console.\r\n // Note: This could also technically happen if the local save is malformed instead - this shouldn't\r\n // happen unless the player is overtly cheating through the console, and in that case it seems unreasonable\r\n // to attempt to handle such open-ended behavior gracefully\r\n try {\r\n return {\r\n farther: ProgressChecker.compareSaveProgress(cloud, local),\r\n older: ProgressChecker.compareSaveTimes(cloud, local),\r\n differentName: cloud?.options.saveFileName !== local?.options.saveFileName,\r\n hashMismatch: this.lastCloudHash && this.lastCloudHash !== hash,\r\n };\r\n } catch (e) {\r\n return null;\r\n }\r\n },\r\n\r\n async saveCheck(forceModal = false) {\r\n if (!this.isAvailable) {\r\n return;\r\n }\r\n\r\n const saveId = GameStorage.currentSlot;\r\n const cloudSave = await this.load();\r\n if (cloudSave === null) {\r\n this.save();\r\n } else {\r\n const thisCloudHash = sha512_256(GameSaveSerializer.serialize(cloudSave));\r\n if (!this.lastCloudHash) this.lastCloudHash = thisCloudHash;\r\n const localSave = GameStorage.saves[saveId];\r\n const saveComparison = this.compareSaves(cloudSave, localSave, thisCloudHash);\r\n const overwriteAndSendCloudSave = () => this.save();\r\n\r\n // If the comparison fails, we assume the cloud data is corrupted and show the relevant modal\r\n if (!saveComparison) {\r\n Modal.addCloudConflict(saveId, saveComparison, cloudSave, localSave, overwriteAndSendCloudSave);\r\n Modal.cloudInvalidData.show({ isSaving: true });\r\n return;\r\n }\r\n\r\n // Bring up the modal if cloud saving will overwrite a cloud save which is older or possibly farther\r\n const hasBoth = cloudSave && localSave;\r\n // NOTE THIS CHECK IS INTENTIONALLY DIFFERENT FROM THE LOAD CHECK\r\n const hasConflict = hasBoth && saveComparison && (saveComparison.older === -1 || saveComparison.farther === -1 ||\r\n saveComparison.differentName || saveComparison.hashMismatch);\r\n if (forceModal || (hasConflict && player.options.showCloudModal)) {\r\n Modal.addCloudConflict(saveId, saveComparison, cloudSave, localSave, overwriteAndSendCloudSave);\r\n Modal.cloudSaveConflict.show();\r\n } else if (!hasConflict || player.options.forceCloudOverwrite) {\r\n overwriteAndSendCloudSave();\r\n }\r\n }\r\n },\r\n\r\n save() {\r\n if (!this.user) return;\r\n if (GlyphSelection.active || ui.$viewModel.modal.progressBar !== undefined) return;\r\n if (player.options.syncSaveIntervals) GameStorage.save();\r\n const serializedSave = GameSaveSerializer.serialize(GameStorage.saves[GameStorage.currentSlot]);\r\n\r\n this.lastCloudHash = sha512_256(serializedSave);\r\n GameStorage.lastCloudSave = Date.now();\r\n GameIntervals.checkCloudSave.restart();\r\n\r\n const slot = GameStorage.currentSlot;\r\n this.writeToCloudDB(slot, serializedSave);\r\n\r\n // TODO We should revisit this (and the below in loadCheck) at some point after the steam-web merge\r\n // since the hiding motivation was identifying info, and Steam usernames are generally more publicly\r\n // visible than Google info. Also affects the visibility of the button in the Options/Saving subtab\r\n if (STEAM) {\r\n GameUI.notify.info(`Game saved (slot ${slot + 1}) to cloud as user ${this.user.displayName}`);\r\n return;\r\n }\r\n\r\n if (player.options.hideGoogleName) GameUI.notify.info(`Game saved (slot ${slot + 1}) to cloud`);\r\n else GameUI.notify.info(`Game saved (slot ${slot + 1}) to cloud as user ${this.user.displayName}`);\r\n },\r\n\r\n async loadCheck() {\r\n if (!this.isAvailable) {\r\n return;\r\n }\r\n\r\n const save = await this.load();\r\n if (save === null) {\r\n if (player.options.hideGoogleName) GameUI.notify.info(`No cloud save for current Google Account`);\r\n else GameUI.notify.info(`No cloud save for user ${this.user.displayName}`);\r\n } else {\r\n const cloudSave = save;\r\n const saveId = GameStorage.currentSlot;\r\n const localSave = GameStorage.saves[saveId];\r\n const saveComparison = this.compareSaves(cloudSave, localSave);\r\n\r\n // eslint-disable-next-line no-loop-func\r\n const overwriteLocalSave = () => {\r\n GameStorage.overwriteSlot(saveId, cloudSave);\r\n\r\n if (STEAM) {\r\n GameUI.notify.info(`Cloud save loaded`);\r\n return;\r\n }\r\n\r\n if (player.options.hideGoogleName) GameUI.notify.info(`Cloud save (slot ${saveId + 1}) loaded`);\r\n else GameUI.notify.info(`Cloud save (slot ${saveId + 1}) loaded for user ${this.user.displayName}`);\r\n };\r\n\r\n // If the comparison fails, we assume the cloud data is corrupted and show the relevant modal\r\n if (!saveComparison) {\r\n Modal.addCloudConflict(saveId, saveComparison, cloudSave, localSave, overwriteLocalSave);\r\n Modal.cloudInvalidData.show({ isSaving: false });\r\n return;\r\n }\r\n\r\n // Bring up the modal if cloud loading will overwrite a local save which is older or possibly farther\r\n const hasBoth = cloudSave && localSave;\r\n const hasConflict = hasBoth && (saveComparison.older === 1 || saveComparison.farther !== -1 ||\r\n saveComparison.differentName);\r\n if (hasConflict) {\r\n Modal.addCloudConflict(saveId, saveComparison, cloudSave, localSave, overwriteLocalSave);\r\n Modal.cloudLoadConflict.show();\r\n } else {\r\n overwriteLocalSave();\r\n }\r\n }\r\n },\r\n\r\n async load() {\r\n let singleSlot = await this.readFromCloudDB(GameStorage.currentSlot);\r\n if (singleSlot.exists()) return GameSaveSerializer.deserialize(singleSlot.val());\r\n\r\n // An optimization to reduce cloud save operations was done which migrates the format from an old one where all\r\n // slots were saved together to a new one where all three are saved in separate spots. This part of the code should\r\n // only be reached and executed if this migration hasn't happened yet, in which case we migrate and try again. If\r\n // it's *still* empty, then there was nothing to migrate in the first place\r\n await this.separateSaveSlots();\r\n singleSlot = await this.readFromCloudDB(GameStorage.currentSlot);\r\n if (singleSlot.exists()) return GameSaveSerializer.deserialize(singleSlot.val());\r\n\r\n return null;\r\n },\r\n\r\n // The initial implementation of cloud saving combined all save files in the same DB entry, but we have since changed\r\n // it so that they're all saved in separate slots. The database itself retains the single-entry data until the first\r\n // player load attempt after this change, at which point this is called client-side to do a one-time format migration\r\n // Before the migration, saves were stored in \".../web\" and afterward they have been moved to \".../web/1\" and similar\r\n async separateSaveSlots() {\r\n const oldData = await this.readFromCloudDB(null);\r\n if (!oldData.exists()) return;\r\n const allData = GameSaveSerializer.deserialize(oldData.val());\r\n if (!allData) return;\r\n\r\n for (const slot of Object.keys(allData.saves)) {\r\n const newData = GameSaveSerializer.serialize(allData.saves[slot]);\r\n await this.writeToCloudDB(Number(slot), newData);\r\n }\r\n },\r\n\r\n readFromCloudDB(slot) {\r\n const slotStr = slot === null ? \"\" : `/${slot}`;\r\n return get(ref(this.db, `users/${this.user.id}/web${slotStr}`));\r\n },\r\n\r\n writeToCloudDB(slot, data) {\r\n const slotStr = slot === null ? \"\" : `/${slot}`;\r\n return set(ref(this.db, `users/${this.user.id}/web${slotStr}`), data);\r\n },\r\n\r\n logout() {\r\n if (!this.isAvailable) {\r\n return;\r\n }\r\n\r\n signOut(this.auth);\r\n ShopPurchaseData.clearLocalSTD();\r\n },\r\n\r\n init() {\r\n if (!this.isAvailable) {\r\n return;\r\n }\r\n\r\n getAuth().onAuthStateChanged(user => {\r\n if (user) {\r\n this.user = {\r\n id: user.uid,\r\n displayName: STEAM\r\n ? SteamRuntime.screenName\r\n : user.displayName,\r\n email: user.email,\r\n };\r\n if (!STEAM) {\r\n ShopPurchaseData.syncSTD();\r\n }\r\n } else {\r\n this.user = null;\r\n }\r\n });\r\n },\r\n};\r\n","export const supportedBrowsers = /((CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(10[_.]3|10[_.]([4-9]|\\d{2,})|(1[1-9]|[2-9]\\d|\\d{3,})[_.]\\d+|12[_.]2|12[_.]([3-9]|\\d{2,})|12[_.]5|12[_.]([6-9]|\\d{2,})|(1[3-9]|[2-9]\\d|\\d{3,})[_.]\\d+|13[_.]3|13[_.]([4-9]|\\d{2,})|13[_.]7|13[_.]([8-9]|\\d{2,})|(1[4-9]|[2-9]\\d|\\d{3,})[_.]\\d+|14[_.]0|14[_.]([1-9]|\\d{2,})|14[_.]4|14[_.]([5-9]|\\d{2,})|14[_.]8|14[_.](9|\\d{2,})|(1[5-9]|[2-9]\\d|\\d{3,})[_.]\\d+|15[_.]0|15[_.]([1-9]|\\d{2,})|(1[6-9]|[2-9]\\d|\\d{3,})[_.]\\d+)(?:[_.]\\d+)?)|(CFNetwork\\/8.* Darwin\\/16\\.5\\.\\d+)|(CFNetwork\\/8.* Darwin\\/16\\.6\\.\\d+)|(CFNetwork\\/8.* Darwin\\/16\\.7\\.\\d+)|((?:Chrome).*OPR\\/(79\\.0|79\\.([1-9]|\\d{2,})|([8-9]\\d|\\d{3,})\\.\\d+)\\.\\d+)|(SamsungBrowser\\/(13\\.0|13\\.([1-9]|\\d{2,})|(1[4-9]|[2-9]\\d|\\d{3,})\\.\\d+))|(Edge\\/(93(?:\\.0)?|93(?:\\.([1-9]|\\d{2,}))?|(9[4-9]|\\d{3,})(?:\\.\\d+)?))|((Chromium|Chrome)\\/(79\\.0|79\\.([1-9]|\\d{2,})|([8-9]\\d|\\d{3,})\\.\\d+|85\\.0|85\\.([1-9]|\\d{2,})|(8[6-9]|9\\d|\\d{3,})\\.\\d+|89\\.0|89\\.([1-9]|\\d{2,})|(9\\d|\\d{3,})\\.\\d+)(?:\\.\\d+)?)|(Version\\/(13\\.1|13\\.([2-9]|\\d{2,})|(1[4-9]|[2-9]\\d|\\d{3,})\\.\\d+|14\\.0|14\\.([1-9]|\\d{2,})|(1[5-9]|[2-9]\\d|\\d{3,})\\.\\d+|15\\.0|15\\.([1-9]|\\d{2,})|(1[6-9]|[2-9]\\d|\\d{3,})\\.\\d+)(?:\\.\\d+)? Safari\\/)|(Firefox\\/(78\\.0|78\\.([1-9]|\\d{2,})|(79|[8-9]\\d|\\d{3,})\\.\\d+|92\\.0|92\\.([1-9]|\\d{2,})|(9[3-9]|\\d{3,})\\.\\d+)\\.\\d+)|(Firefox\\/(78\\.0|78\\.([1-9]|\\d{2,})|(79|[8-9]\\d|\\d{3,})\\.\\d+|92\\.0|92\\.([1-9]|\\d{2,})|(9[3-9]|\\d{3,})\\.\\d+)(pre|[ab]\\d+[a-z]*)?)/;","const Payments = {\r\n interval: null,\r\n windowReference: null,\r\n // This is here to prevent notification spam; purchase canceling can be called multiple times before the first\r\n // call's Promise is settled\r\n hasCanceled: false,\r\n init: () => {\r\n // We have unfinished checkouts from when the page was last closed\r\n if (player.IAP.checkoutSession.id) {\r\n Payments.pollForPurchases();\r\n }\r\n },\r\n\r\n // Only called from clicking the \"Buy More\" button in the Shop tab\r\n buyMoreSTD: async STD => {\r\n player.IAP.checkoutSession = { id: true };\r\n let res;\r\n try {\r\n res = await fetch(`${STD_BACKEND_URL}/purchase`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify({ amount: STD, cloudID: Cloud.user.id })\r\n });\r\n } catch (e) {\r\n GameUI.notify.error(\"Could not contact payment server!\", 10000);\r\n return;\r\n }\r\n const data = await res.json();\r\n Payments.windowReference = window.open(\r\n data.url,\r\n \"antimatterDimensionsPurchase\",\r\n \"popup,width=500,height=500,left=100,top=100\"\r\n );\r\n player.IAP.checkoutSession = { id: data.id, amount: STD };\r\n GameStorage.save();\r\n Payments.pollForPurchases();\r\n },\r\n\r\n // Starts a purchase-checking loop and adds a listener which cancels any ongoing purchases if the page is closed.\r\n // Any unresolved purchases will be reopened when the page is opened again in init()\r\n pollForPurchases: () => {\r\n const { id, amount } = player.IAP.checkoutSession;\r\n let pollAmount = 0;\r\n window.onbeforeunload = async() => {\r\n if (!Payments.interval) return;\r\n Payments.windowReference?.close();\r\n await Payments.cancelPurchase(false);\r\n };\r\n\r\n // This setInterval checks every 3 seconds for a response from the payment backend\r\n Payments.interval = setInterval(async() => {\r\n pollAmount++;\r\n let statusRes;\r\n try {\r\n statusRes = await fetch(`${STD_BACKEND_URL}/validate?sessionId=${id}`);\r\n } catch (e) {\r\n // Note: Not redundant with notification in buyMoreSTD above; will not be reached if exception is thrown there\r\n GameUI.notify.error(\"Could not contact payment server!\", 10000);\r\n Payments.clearInterval();\r\n return;\r\n }\r\n const { completed, failure } = await statusRes.json();\r\n\r\n if (completed) {\r\n Payments.windowReference?.close();\r\n await ShopPurchaseData.syncSTD();\r\n GameUI.notify.success(`Purchase of ${amount} STDs was successful, thank you for your support! ❤️`, 10000);\r\n Payments.clearInterval();\r\n player.IAP.checkoutSession = { id: false };\r\n GameStorage.save();\r\n Modal.hide();\r\n }\r\n\r\n if (failure) {\r\n Payments.windowReference?.close();\r\n Payments.clearInterval();\r\n GameUI.notify.error(`Purchase failed!`, 10000);\r\n player.IAP.checkoutSession = { id: false };\r\n GameStorage.save();\r\n return;\r\n }\r\n\r\n // 30 minutes of polling is the maximum\r\n if (!completed && (Payments.windowReference?.closed || pollAmount >= 20 * 30)) {\r\n await Payments.cancelPurchase(true);\r\n }\r\n }, 3000);\r\n },\r\n\r\n // Sends a request to purchase a STD upgrade, returning true if successful (and syncs data), false if not\r\n async buyUpgrade(upgradeKey, cosmeticName) {\r\n if (!Cloud.loggedIn) return false;\r\n let res;\r\n try {\r\n res = await fetch(`${STD_BACKEND_URL}/upgrade`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify({\r\n user: Cloud.user.id,\r\n upgrade: upgradeKey,\r\n extraData: {\r\n requestedSet: cosmeticName,\r\n fullCompletions: player.records.fullGameCompletions\r\n }\r\n })\r\n });\r\n } catch (e) {\r\n GameUI.notify.error(\"Unable to spend STD coins on upgrade!\", 10000);\r\n return false;\r\n }\r\n const stdData = await res.json();\r\n // The \"not enough STDs\" message should only show up if the player modifies costs on the frontend and forces the\r\n // game to send a request despite not actually having enough STDs. The cost check is done again on the backend\r\n if (stdData.success) GameUI.notify.info(`Successfully spent ${stdData.amountSpent} STD coins`, 10000);\r\n else GameUI.notify.error(stdData.error ?? \"Unable to purchase upgrade\", 10000);\r\n ShopPurchaseData.syncSTD(false, stdData.data);\r\n return stdData.success;\r\n },\r\n\r\n // Explicitly cancels purchases if the player chooses to, they take too long to resolve, or the page is closed\r\n async cancelPurchase(isTimeout) {\r\n if (this.hasCanceled) return;\r\n Payments.windowReference?.close();\r\n Payments.clearInterval();\r\n try {\r\n await fetch(`${STD_BACKEND_URL}/expire`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify({ sessionId: player.IAP.checkoutSession.id })\r\n });\r\n } catch (e) {\r\n GameUI.notify.error(\"Could not contact payment server!\", 10000);\r\n }\r\n if (isTimeout) GameUI.notify.error(\"Purchase took too long to resolve!\", 10000);\r\n player.IAP.checkoutSession = { id: false };\r\n GameStorage.save();\r\n this.hasCanceled = false;\r\n },\r\n\r\n // Removes the repeating checker and page-close listener for if payments have been resolved\r\n clearInterval() {\r\n clearInterval(Payments.interval);\r\n window.onbeforeunload = null;\r\n }\r\n};\r\n\r\nexport default Payments;\r\n","import { GameMechanicState } from \"../game-mechanics\";\r\nimport { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\n\r\nfunction showSecondPreferredWarning(currTree) {\r\n const canPickSecond = currTree.allowedDimPathCount === 2 && currTree.currDimPathCount < 2;\r\n // Show a warning if the player can choose the second preferred dimension path and hasn't yet done so.\r\n if (canPickSecond && TimeStudy.preferredPaths.dimension.path.length < 2) {\r\n GameUI.notify.error(\"You haven't selected a second preferred Dimension path.\");\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n// This is only ever called from manual player actions, which means we can immediately commit them to the game state\r\n// eslint-disable-next-line complexity\r\nexport function buyStudiesUntil(id, ec = -1) {\r\n let studyArray = [];\r\n const lastInPrevRow = Math.floor(id / 10) * 10 - 1;\r\n const requestedPath = TimeStudy(id).path;\r\n const currTree = GameCache.currentStudyTree.value;\r\n // Makes an array [start, start+1, ... , end], empty if end < start\r\n const range = (start, end) => [...Array(Math.clampMin(end - start + 1, 0)).keys()].map(i => i + start);\r\n const ecHasRequirement = !Perk.studyECRequirement.isBought;\r\n\r\n // If the player tries to buy a study which is immediately buyable, we try to buy it first in case buying other\r\n // studies up to that point renders it unaffordable. Effectively the clicked study is higher priority than all others\r\n studyArray.push(id);\r\n\r\n // Greddily buy all studies before the dimension split then try again; if the requested study was above the dimension\r\n // split, then we're done and don't need to attempt to buy any more\r\n studyArray.push(...range(11, Math.min(lastInPrevRow, 70)));\r\n studyArray.push(id);\r\n\r\n if (id < 71) return studyArray;\r\n\r\n // Priority for behavior when buying in the Dimension split; we follow only the first applicable entry below:\r\n // - If we're buying a study within the split, we first buy just the requested path up to the requested study.\r\n // (stops buying)\r\n // - If we want to buy EC11 or EC12 we only buy the required dimension path unless we have the EC requirement perk\r\n // (continues onward)\r\n // - If we can't buy any additional paths or have 3 paths available, we attempt to buy everything here, prioritizing\r\n // preferred paths. With less than 3 paths available, this only purchases the rest of any unfinished paths\r\n // (continues onward)\r\n // - If the player has a preferred path, we attempt to buy it (continues onward)\r\n // - If the player doesn't have a preferred path, we say so and do nothing (stops buying)\r\n // - Otherwise we do nothing (stops buying)\r\n if (id < 111) {\r\n studyArray.push(...NormalTimeStudies.paths[requestedPath].filter(s => (s <= id)));\r\n return studyArray;\r\n }\r\n\r\n if (ec === 11 && ecHasRequirement) {\r\n studyArray.push(...NormalTimeStudies.paths[TIME_STUDY_PATH.ANTIMATTER_DIM].filter(s => (s <= id)));\r\n } else if (ec === 12 && ecHasRequirement) {\r\n studyArray.push(...NormalTimeStudies.paths[TIME_STUDY_PATH.TIME_DIM].filter(s => (s <= id)));\r\n } else if (currTree.currDimPathCount === currTree.allowedDimPathCount || currTree.allowedDimPathCount === 3) {\r\n studyArray.push(...TimeStudy.preferredPaths.dimension.studies);\r\n studyArray.push(...range(71, 103));\r\n } else if (TimeStudy.preferredPaths.dimension.path.length > 0) {\r\n studyArray.push(...TimeStudy.preferredPaths.dimension.studies);\r\n } else if (currTree.currDimPathCount === 0) {\r\n GameUI.notify.error(\"You haven't selected a preferred Dimension path.\");\r\n return studyArray;\r\n }\r\n\r\n // Explicitly purchase 111 here if it's included and stop if applicable, as it isn't covered by logic in either split.\r\n if (id >= 111) studyArray.push(111);\r\n\r\n const secondPreferredWarningShown = showSecondPreferredWarning(currTree);\r\n\r\n if (id < 121) return studyArray;\r\n\r\n // Priority for behavior when buying in the Pace split; we follow only the first applicable entry below. In contrast\r\n // to the Dimension split, here we instead err on the side of not buying extra studies since they will cost ST.\r\n // - If we're buying a study within the split, we first buy just the requested path up to the requested study.\r\n // We don't attempt to buy other paths here because that may waste ST (stops buying)\r\n // - If V has been fully completed, we just brute-force this whole group (continues onward)\r\n // - If we already have part of a single path, we buy the rest of it (continues onward)\r\n // - If we have a preferred path, we buy it all (continues onward)\r\n // - If we don't have any pace paths at this point, there's no way to objectively choose one (stops buying)\r\n // - Fallback case: we have more than one path and intentionally do nothing here (continues onward)\r\n\r\n if (id < 151) {\r\n studyArray.push(...NormalTimeStudies.paths[TimeStudy(id).path].filter(s => (s <= id)));\r\n return studyArray;\r\n }\r\n\r\n const pacePaths = currTree.pacePaths\r\n .map(pathName => NormalTimeStudies.pathList.find(p => p.name === pathName).path);\r\n if (V.isFullyCompleted && !Pelle.isDoomed) {\r\n const allPace = NormalTimeStudies.paths[TIME_STUDY_PATH.ACTIVE]\r\n .concat(NormalTimeStudies.paths[TIME_STUDY_PATH.PASSIVE])\r\n .concat(NormalTimeStudies.paths[TIME_STUDY_PATH.IDLE]);\r\n studyArray.push(...allPace);\r\n } else if (pacePaths.length === 1) {\r\n studyArray.push(...NormalTimeStudies.paths[pacePaths[0]]);\r\n } else if (TimeStudy.preferredPaths.pace.path !== 0) {\r\n studyArray.push(...TimeStudy.preferredPaths.pace.studies);\r\n } else if (pacePaths.length === 0) {\r\n GameUI.notify.error(\"You haven't selected a preferred Pace path.\");\r\n return studyArray;\r\n }\r\n\r\n // First we buy up to 201 so we can buy the second preferred path if needed\r\n studyArray.push(...range(151, Math.min(id, 201)));\r\n if (id < 201) return studyArray;\r\n\r\n // If we want to buy EC11 or EC12 we don't want 201 unless we have the EC study requirement perk\r\n if (!(ecHasRequirement && (ec === 11 || ec === 12))) {\r\n // We need to commit what we have to the game state, because the check for priorityRequirement\r\n // requires us knowing if we have actually purchased 201.\r\n TimeStudyTree.commitToGameState(studyArray);\r\n studyArray = [];\r\n\r\n // Buy the second preferred dimension path if we have one\r\n if (TimeStudy.preferredPaths.dimension.path.length > 0) {\r\n studyArray.push(...TimeStudy.preferredPaths.dimension.studies);\r\n // We need to commit the dimension paths to the game state in order\r\n // to know if we should display the second preferred path warning.\r\n TimeStudyTree.commitToGameState(studyArray);\r\n studyArray = [];\r\n }\r\n\r\n if (!secondPreferredWarningShown) showSecondPreferredWarning(GameCache.currentStudyTree.value);\r\n\r\n studyArray.push(...range(211, Math.min(lastInPrevRow, 214)));\r\n\r\n // If the user clicked on a study in rows 19-22, we've tried to buy up to the previous\r\n // row. Try to buy that study now:\r\n studyArray.push(id);\r\n }\r\n\r\n // Don't bother buying any more studies at or below row 22 unless the player has fully finished V, in which case just\r\n // brute-force all of them up to the specified study. This buys all pre-triads, then triads sequentially up to the id\r\n if (id < 221 || !V.isFullyCompleted) return studyArray;\r\n studyArray.push(...range(221, Math.max(id, 234)));\r\n return studyArray;\r\n}\r\n\r\nexport function respecTimeStudies(auto) {\r\n for (const study of TimeStudy.boughtNormalTS()) {\r\n study.refund();\r\n }\r\n player.timestudy.studies = [];\r\n GameCache.timeStudies.invalidate();\r\n player.celestials.v.STSpent = 0;\r\n const ecStudy = TimeStudy.eternityChallenge.current();\r\n if (ecStudy !== undefined) {\r\n ecStudy.refund();\r\n player.challenge.eternity.unlocked = 0;\r\n }\r\n if (!auto) {\r\n Tab.eternity.studies.show();\r\n }\r\n GameCache.currentStudyTree.invalidate();\r\n}\r\n\r\nexport class TimeStudyState extends GameMechanicState {\r\n constructor(config, type) {\r\n super(config);\r\n this.type = type;\r\n }\r\n\r\n get cost() {\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n return this.config.cost * corruptionPenalties.soF.ttcost[player.mending.corruption[9]];\r\n }\r\n return this.config.cost;\r\n }\r\n\r\n get STCost() {\r\n let base = this.config.STCost;\r\n // owo corruption 8 idk--sxy\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n base += corruptionPenalties.spaceTuition[player.mending.corruption[8]];\r\n }*/\r\n if(WarpUpgrade(8).isBought&&this.config.id>400&&this.config.id<500){\r\n base -= 50;\r\n }\r\n return VUnlocks.raUnlock.canBeApplied\r\n ? base - 2\r\n : base;\r\n }\r\n\r\n refund() {\r\n Currency.timeTheorems.add(this.cost);\r\n }\r\n\r\n get isAffordable() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&(player.mending.corruption[5]>=6||corruptionPenalties.soF.hiddenThree[player.mending.corruption[9]])&&this.type==3) {\r\n return false;\r\n }\r\n return Currency.timeTheorems.gte(this.cost);\r\n }\r\n\r\n get canBeBought() {\r\n return true;\r\n }\r\n}\r\n","import { TimeStudyState } from \"./time-studies\";\r\n\r\nexport const NormalTimeStudies = {};\r\n\r\nNormalTimeStudies.pathList = [\r\n { path: TIME_STUDY_PATH.ANTIMATTER_DIM, studies: [71, 81, 91, 101], name: \"Antimatter Dims\" },\r\n { path: TIME_STUDY_PATH.INFINITY_DIM, studies: [72, 82, 92, 102], name: \"Infinity Dims\" },\r\n { path: TIME_STUDY_PATH.TIME_DIM, studies: [73, 83, 93, 103], name: \"Time Dims\" },\r\n { path: TIME_STUDY_PATH.ACTIVE, studies: [121, 131, 141], name: \"Active\" },\r\n { path: TIME_STUDY_PATH.PASSIVE, studies: [122, 132, 142], name: \"Passive\" },\r\n { path: TIME_STUDY_PATH.IDLE, studies: [123, 133, 143], name: \"Idle\" },\r\n { path: TIME_STUDY_PATH.LIGHT, studies: [221, 223, 225, 227, 231, 233], name: \"Light\" },\r\n { path: TIME_STUDY_PATH.DARK, studies: [222, 224, 226, 228, 232, 234], name: \"Dark\" }\r\n];\r\n\r\nNormalTimeStudies.paths = NormalTimeStudies.pathList.mapToObject(e => e.path, e => e.studies);\r\n\r\nexport class NormalTimeStudyState extends TimeStudyState {\r\n constructor(config) {\r\n let x = -1; //ugly code incoming, but it works\r\n switch (true){\r\n case (config.id > 500):\r\n x = TIME_STUDY_TYPE.KOHLER_EXCLUSIVE;\r\n break;\r\n case (config.id > 400):\r\n x = TIME_STUDY_TYPE.MYRIAD;\r\n break;\r\n case (config.id > 300):\r\n x = TIME_STUDY_TYPE.TRIAD;\r\n break;\r\n default:\r\n x = TIME_STUDY_TYPE.NORMAL;\r\n break;\r\n }\r\n\r\n const type = x;// config.id > 300 ? TIME_STUDY_TYPE.TRIAD : TIME_STUDY_TYPE.NORMAL;\r\n /*const type = () =>{\r\n switch(true){\r\n case (config.id > 500):\r\n return TIME_STUDY_TYPE.KOHLER_EXCLUSIVE;\r\n case (config.id > 400):\r\n return TIME_STUDY_TYPE.MYRIAD;\r\n case (config.id > 300):\r\n return TIME_STUDY_TYPE.TRIAD;\r\n default:\r\n return TIME_STUDY_TYPE.NORMAL;\r\n }\r\n }*/\r\n super(config, type);\r\n const path = NormalTimeStudies.pathList.find(p => p.studies.includes(this.id));\r\n this._path = path?.path ?? TIME_STUDY_PATH.NONE;\r\n }\r\n\r\n get isUnlocked() {\r\n return this.config.unlocked?.() ?? true;\r\n }\r\n\r\n get isTriad() {\r\n return this.id > 300 && this.id < 400;\r\n }\r\n\r\n get isMyriad() {\r\n return this.id > 400 && this.id < 500;\r\n }\r\n\r\n get isBought() {\r\n return GameCache.timeStudies.value[this.id];\r\n }\r\n\r\n // The requiresST prop is an array containing IDs indicating other studies which, if ANY in the array are purchased,\r\n // will cause the study to also cost space theorems. This array is effectively assumed to be empty if not present.\r\n costsST() {\r\n //since there's only one connection from reality I would code just as this. plz don't require ST more than reality.\r\n if(this.config.requiresST !== undefined && this.config.requiresST.includes('reality')) return this.config.requiresST && TimeStudy.reality.isBought;\r\n return this.config.requiresST && this.config.requiresST.some(s => TimeStudy(s).isBought);\r\n }\r\n\r\n checkRequirement() {\r\n const check = req => (typeof req === \"number\"\r\n ? TimeStudy(req).isBought\r\n : req());\r\n const currTree = GameCache.currentStudyTree.value;\r\n switch (this.config.reqType) {\r\n case TS_REQUIREMENT_TYPE.AT_LEAST_ONE:\r\n return this.config.requirement.some(r => check(r));\r\n case TS_REQUIREMENT_TYPE.ALL:\r\n return this.config.requirement.every(r => check(r));\r\n case TS_REQUIREMENT_TYPE.DIMENSION_PATH:\r\n // In some cases of loading, sometimes the current tree might be undefined when this code is executed. The\r\n // exact situations seem unclear, but it may be an interaction between the automator and offline progress\r\n return this.config.requirement.every(r => check(r)) && currTree &&\r\n currTree.currDimPathCount < currTree.allowedDimPathCount;\r\n default:\r\n throw Error(`Unrecognized TS requirement type: ${this.reqType}`);\r\n }\r\n }\r\n\r\n // This checks for and forbids buying studies due to being part of a set which can't normally be bought\r\n // together (eg. active/passive/idle and light/dark) unless the player has the requisite ST.\r\n checkSetRequirement() {\r\n return this.costsST() ? !Pelle.isDisabled(\"V\") && (V.availableST >= this.STCost) : true;\r\n }\r\n\r\n get canBeBought() {\r\n return this.checkRequirement() && this.checkSetRequirement();\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isBought;\r\n }\r\n\r\n purchase(auto = false) {\r\n if (this.isBought || !this.isAffordable || !this.canBeBought) return false;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return false;\r\n if (ImaginaryUpgrade(19).isLockingMechanics && player.timestudy.studies.length === 8) {\r\n if (!auto) ImaginaryUpgrade(19).tryShowWarningModal();\r\n return false;\r\n }\r\n if (this.costsST()) player.celestials.v.STSpent += this.STCost;\r\n player.timestudy.studies.push(this.id);\r\n player.requirementChecks.reality.maxStudies = Math.clampMin(player.requirementChecks.reality.maxStudies,\r\n player.timestudy.studies.length);\r\n if (this.id > 300 && this.id < 400) player.requirementChecks.reality.noTriads = false;\r\n if (this.id == 305) player.requirementChecks.reality.noTriad305 = false;\r\n if (this.id == 307) player.requirementChecks.reality.noTriad307 = false;\r\n Currency.timeTheorems.subtract(this.cost);\r\n GameCache.timeStudies.invalidate();\r\n TimeStudyTree.commitToGameState([TimeStudy(this.id)]);\r\n if (this.id === 181 && Pelle.isDoomed) Achievement(186).unlock();\r\n return true;\r\n }\r\n\r\n purchaseUntil() {\r\n TimeStudyTree.commitToGameState(buyStudiesUntil(this.id));\r\n }\r\n\r\n get path() {\r\n return this._path;\r\n }\r\n}\r\n\r\nNormalTimeStudyState.studies = mapGameData(\r\n GameDatabase.eternity.timeStudies.normal,\r\n config => new NormalTimeStudyState(config)\r\n);\r\n\r\nNormalTimeStudyState.all = NormalTimeStudyState.studies.filter(e => e !== undefined);\r\n\r\n/**\r\n * @returns {NormalTimeStudyState}\r\n */\r\nexport function TimeStudy(id) {\r\n return NormalTimeStudyState.studies[id];\r\n}\r\n\r\n/**\r\n * @returns {NormalTimeStudyState[]}\r\n */\r\nTimeStudy.boughtNormalTS = function() {\r\n return player.timestudy.studies.map(id => TimeStudy(id));\r\n};\r\n\r\nTimeStudy.preferredPaths = {\r\n dimension: {\r\n get path() {\r\n return player.timestudy.preferredPaths[0];\r\n },\r\n set path(value) {\r\n const options = [1, 2, 3];\r\n player.timestudy.preferredPaths[0] = value.filter(id => options.includes(id));\r\n },\r\n get studies() {\r\n return player.timestudy.preferredPaths[0].flatMap(path => NormalTimeStudies.paths[path]);\r\n },\r\n get usePriority() {\r\n return this.path.length > 1 ||\r\n TimeStudy(201).isBought ||\r\n DilationUpgrade.timeStudySplit.isBought ||\r\n PlayerProgress.realityUnlocked();\r\n }\r\n },\r\n pace: {\r\n get path() {\r\n return player.timestudy.preferredPaths[1];\r\n },\r\n set path(value) {\r\n const options = [4, 5, 6];\r\n player.timestudy.preferredPaths[1] = options.includes(value) ? value : 0;\r\n },\r\n get studies() {\r\n return NormalTimeStudies.paths[player.timestudy.preferredPaths[1]];\r\n }\r\n }\r\n};\r\n","import TWEEN from \"tween.js\";\r\n\r\nimport { ElectronRuntime, SteamRuntime } from \"@/steam\";\r\n\r\nimport { DC } from \"./core/constants\";\r\nimport { deepmergeAll } from \"@/utility/deepmerge\";\r\nimport { DEV } from \"@/env\";\r\nimport { SpeedrunMilestones } from \"./core/speedrun\";\r\nimport { Cloud } from \"./core/storage\";\r\nimport { supportedBrowsers } from \"./supported-browsers\";\r\n\r\nimport Payments from \"./core/payments\";\r\nimport { MendingUpgrade } from \"./core/mending-upgrades\";\r\nimport { CorruptionData, CorruptionUpgrade, Currency, ExpoBlackHole, MultiversalDimensions, WarpUpgrade } from \"./core/globals\";\r\nimport { MendingMilestone } from \"./core/mending\";\r\nimport { Player, Ra } from \"./core/globals\";\r\nimport { corruptionPenalties } from \"./core/secret-formula/mending/corruption\";\r\nimport { TimeStudy } from \"./core/time-studies/normal-time-study\";\r\n\r\nif (GlobalErrorHandler.handled) {\r\n throw new Error(\"Initialization failed\");\r\n}\r\nGlobalErrorHandler.cleanStart = true;\r\n\r\nexport function playerInfinityUpgradesOnReset() {\r\n\r\n const infinityUpgrades = new Set(\r\n [\"timeMult\", \"dimMult\", \"timeMult2\",\r\n \"skipReset1\", \"skipReset2\", \"unspentBonus\",\r\n \"27Mult\", \"18Mult\", \"36Mult\", \"resetMult\",\r\n \"skipReset3\", \"passiveGen\", \"45Mult\",\r\n \"resetBoost\", \"galaxyBoost\", \"skipResetGalaxy\",\r\n \"ipOffline\"]\r\n );\r\n\r\n const breakInfinityUpgrades = new Set(\r\n [\"timeMult\", \"dimMult\", \"timeMult2\",\r\n \"skipReset1\", \"skipReset2\", \"unspentBonus\",\r\n \"27Mult\", \"18Mult\", \"36Mult\", \"resetMult\",\r\n \"skipReset3\", \"passiveGen\", \"45Mult\",\r\n \"resetBoost\", \"galaxyBoost\", \"skipResetGalaxy\",\r\n \"totalMult\", \"currentMult\", \"postGalaxy\",\r\n \"challengeMult\", \"achievementMult\", \"infinitiedMult\",\r\n \"infinitiedGeneration\", \"autoBuyerUpgrade\", \"autobuyMaxDimboosts\",\r\n \"ipOffline\"]\r\n );\r\n\r\n if (PelleUpgrade.keepBreakInfinityUpgrades.canBeApplied) {\r\n player.infinityUpgrades = new Set([...player.infinityUpgrades].filter(u => breakInfinityUpgrades.has(u)));\r\n return;\r\n }\r\n\r\n if (PelleUpgrade.keepInfinityUpgrades.canBeApplied) {\r\n player.infinityUpgrades = new Set([...player.infinityUpgrades].filter(u => infinityUpgrades.has(u)));\r\n player.infinityRebuyables = [0, 0, 0];\r\n GameCache.tickSpeedMultDecrease.invalidate();\r\n GameCache.dimensionMultDecrease.invalidate();\r\n return;\r\n }\r\n\r\n if (RealityUpgrade(10).isBought || EternityMilestone.keepBreakUpgrades.isReached || MendingUpgrade(2).isBought) {\r\n player.infinityUpgrades = breakInfinityUpgrades;\r\n player.infinityRebuyables = [8, 7, 10];\r\n } else if (EternityMilestone.keepInfinityUpgrades.isReached) {\r\n player.infinityUpgrades = infinityUpgrades;\r\n player.infinityRebuyables = [0, 0, 0];\r\n } else {\r\n player.infinityUpgrades.clear();\r\n player.infinityRebuyables = [0, 0, 0];\r\n }\r\n\r\n if (Pelle.isDoomed) {\r\n player.infinityUpgrades.clear();\r\n player.infinityRebuyables = [0, 0, 0];\r\n }\r\n\r\n GameCache.tickSpeedMultDecrease.invalidate();\r\n GameCache.dimensionMultDecrease.invalidate();\r\n}\r\n\r\nexport function breakInfinity() {\r\n if (!Autobuyer.bigCrunch.hasMaxedInterval) return;\r\n if (InfinityChallenge.isRunning) return;\r\n for (const autobuyer of Autobuyers.all) {\r\n if (autobuyer.data.interval !== undefined) autobuyer.maxIntervalForFree();\r\n }\r\n // There's a potential migration edge case involving already-maxed autobuyers; this should give the achievement\r\n Achievement(61).tryUnlock();\r\n player.break = !player.break;\r\n TabNotification.ICUnlock.tryTrigger();\r\n EventHub.dispatch(player.break ? GAME_EVENT.BREAK_INFINITY : GAME_EVENT.FIX_INFINITY);\r\n GameUI.update();\r\n}\r\n\r\nexport function gainedInfinityPoints(noSoftcap = false) {\r\n const div = Effects.min(\r\n 308,\r\n Achievement(103),\r\n TimeStudy(111)\r\n );\r\n if (Pelle.isDisabled(\"IPMults\")) {\r\n let x = MendingMilestone.one.isReached ? 1e20 : 1;\r\n return Decimal.pow10(player.records.thisInfinity.maxAM.log10() / div - 0.75)\r\n .timesEffectsOf(PelleRifts.vacuum)\r\n .times(Pelle.specialGlyphEffect.infinity).times(x)\r\n .floor();\r\n }\r\n let ip = player.break\r\n ? Decimal.pow10(player.records.thisInfinity.maxAM.log10() / div - 0.75)\r\n : new Decimal(308 / div);\r\n if(MendingMilestone.one.isReached){\r\n ip = ip.times(1e20);\r\n }\r\n if (Ra.unlocks.realityMachinesBoostIpAndEpGain.isUnlocked){\r\n ip = Decimal.pow(ip, Decimal.log10(Currency.realityMachines.value.max(1)) / 100);\r\n }\r\n if (Effarig.isRunning && Effarig.currentStage === EFFARIG_STAGES.ETERNITY) {\r\n ip = ip.min(DC.E200);\r\n }\r\n ip = ip.times(GameCache.totalIPMult.value);\r\n \r\n if (Teresa.isRunning) {\r\n ip = ip.pow(0.55);\r\n } else if (V.isRunning) {\r\n ip = ip.pow(0.5);\r\n } else if (V.isSuperRunning) {\r\n //ip = ip.log(1.0000000001).toDecimal();\r\n ip = ip.pow(0.000001);\r\n } else if (Laitela.isRunning) {\r\n ip = dilatedValueOf(ip);\r\n }\r\n if (GlyphAlteration.isAdded(\"infinity\")) {\r\n ip = ip.pow(getSecondaryGlyphEffect(\"infinityIP\"));\r\n }\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let corruptionPrestigeLimits = corruptionPenalties.prestigeLimits[player.mending.corruption[0]];\r\n if(CorruptionUpgrade(16).isBought) corruptionPrestigeLimits = Math.min(1,corruptionPrestigeLimits*2)\r\n ip = ip.pow(corruptionPrestigeLimits)\r\n ip = ip.pow(corruptionPenalties.timeCompression.hiddenFour[player.mending.corruption[2]])\r\n ip = ip.pow(corruptionPenalties.repSing.presGain[player.mending.corruption[8]])\r\n }\r\n if (ip.gte(Decimal.pow10(9e15)) && !noSoftcap) {\r\n ip = ip.div(Decimal.pow10(9e15))\r\n ip = ip.pow(0.0298374651)\r\n ip = ip.times(Decimal.pow10(9e15))\r\n }\r\n /*if (ip.gte(Decimal.pow10(1e20)) && !noSoftcap) {\r\n ip = ip.div(Decimal.pow10(1e20))\r\n ip = ip.pow(0.95)\r\n ip = ip.times(Decimal.pow10(1e20))\r\n }*/\r\n return ip.floor();\r\n}\r\n\r\nexport function mendingMilestoneElevenMultiplier(display = false){\r\n if(!MendingMilestone.eleven.isReached && !display) return DC.D1;\r\n const reqCheck = player.requirementChecks.mending.mmeleven;\r\n let mult = reqCheck <= 0 ? (3 - reqCheck) * 3 : [1, 1, 2, 2, 3, 4, 5, 7][8 - reqCheck];\r\n return new Decimal(mult);\r\n}\r\n\r\nexport function gainedMendingPoints(){\r\n let MvRGain = (player.reality.warped && !Pelle.isDoomed) ?\r\n (Decimal.pow(10000, Math.log10(player.antimatter.exponent / 9e15))) :\r\n DC.D1;\r\n\r\n MvRGain = MvRGain.timesEffectsOf(\r\n MendingUpgrade(1),\r\n Achievement(192),\r\n TimeStudy(321),\r\n TimeStudy(322),\r\n TimeStudy(323),\r\n CorruptionUpgrade(13),\r\n MendingUpgradeMultiplier,\r\n Ra.unlocks.boostMVRGain\r\n );\r\n MvRGain = MvRGain.times(mendingMilestoneElevenMultiplier());\r\n if (Ra.unlocks.mendingPointsGainMult.isUnlocked) MvRGain = MvRGain.times(Ra.totalPetLevel / 10).clampMin(1);\r\n\r\n return MvRGain;\r\n}\r\n\r\nexport function warpReality(){\r\n Currency.mendingPoints.subtract(new Decimal(1e7));\r\n Quotes.kohler.postWarp.show();\r\n player.reality.warped = true;\r\n}\r\n\r\nfunction totalEPMult() {\r\n return Pelle.isDisabled(\"EPMults\")\r\n ? (Ra.unlocks.unlockPelleGlyphEffects.isUnlocked) ? Pelle.specialGlyphEffect.time.timesEffectOf(PelleRifts.vacuum.milestones[2]).times(getAdjustedGlyphEffect(\"timeEP\")) : Pelle.specialGlyphEffect.time.timesEffectOf(PelleRifts.vacuum.milestones[2])\r\n : getAdjustedGlyphEffect(\"cursedEP\")\r\n .times(ShopPurchase.EPPurchases.currentMult)\r\n .timesEffectsOf(\r\n EternityUpgrade.epMult,\r\n TimeStudy(61),\r\n TimeStudy(122),\r\n TimeStudy(121),\r\n TimeStudy(123),\r\n RealityUpgrade(12),\r\n GlyphEffect.epMult\r\n );\r\n}\r\n\r\nexport function gainedEternityPoints(noSoftcap = false) {\r\n let devisor = 308 - PelleRifts.recursion.effectValue.toNumber();\r\n if(player.timestudy.studies.includes(307)) devisor = devisor - 30;\r\n let ep = DC.D5.pow(player.records.thisEternity.maxIP.plus(\r\n gainedInfinityPoints()).log10() / devisor - 0.7).times(totalEPMult());\r\n if (MendingMilestone.one.isReached){\r\n ep = ep.times(1e5);\r\n }\r\n if (Ra.unlocks.realityMachinesBoostIpAndEpGain.isUnlocked){\r\n ep = Decimal.pow(ep, Decimal.log10(Currency.realityMachines.value) / 100);\r\n }\r\n if (Teresa.isRunning) {\r\n ep = ep.pow(0.55);\r\n } else if (V.isRunning) {\r\n ep = ep.pow(0.5);\r\n } else if (V.isSuperRunning) {\r\n //ep = ep.log(1.0000000001).toDecimal();\r\n ep = ep.pow(0.000001);\r\n } else if (Laitela.isRunning) {\r\n ep = dilatedValueOf(ep);\r\n }\r\n if (GlyphAlteration.isAdded(\"time\")) {\r\n ep = ep.pow(getSecondaryGlyphEffect(\"timeEP\"));\r\n }\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let corruptionPrestigeLimits = corruptionPenalties.prestigeLimits[player.mending.corruption[0]];\r\n if(CorruptionUpgrade(16).isBought) corruptionPrestigeLimits = Math.min(1,corruptionPrestigeLimits*2)\r\n ep = ep.pow(corruptionPrestigeLimits)\r\n ep = ep.pow(corruptionPenalties.repSing.presGain[player.mending.corruption[8]])\r\n }\r\n\r\n if (ep.gte(Decimal.pow10(1e18)) && !noSoftcap) {\r\n ep = ep.div(Decimal.pow10(1e18))\r\n ep = ep.pow(0.162738495)\r\n ep = ep.times(Decimal.pow10(1e18))\r\n }\r\n return ep.floor();\r\n}\r\n\r\nexport function requiredIPForEP(epAmount) {\r\n return Decimal.pow10(308 * (Decimal.log(Decimal.divide(epAmount, totalEPMult()), 5) + 0.7))\r\n .clampMin(Number.MAX_VALUE);\r\n}\r\n\r\nexport function gainedGlyphLevel() {\r\n const glyphState = getGlyphLevelInputs();\r\n let rawLevel = Math.floor(glyphState.rawLevel);\r\n if (!isFinite(rawLevel)) rawLevel = 0;\r\n let actualLevel = Math.floor(glyphState.actualLevel);\r\n if (!isFinite(actualLevel)) actualLevel = 0;\r\n return {\r\n rawLevel,\r\n actualLevel\r\n };\r\n}\r\n\r\nexport function resetChallengeStuff() {\r\n player.chall2Pow = 1;\r\n player.chall3Pow = DC.D0_01;\r\n Currency.matter.reset();\r\n player.chall8TotalSacrifice = DC.D1;\r\n player.postC4Tier = 1;\r\n}\r\n\r\nexport function ratePerMinute(amount, time) {\r\n return Decimal.divide(amount, new Decimal(time).div(60 * 1000));\r\n}\r\n\r\n// eslint-disable-next-line max-params\r\nexport function addInfinityTime(time, realTime, ip, infinities) {\r\n let challenge = \"\";\r\n if (player.challenge.normal.current) challenge = `Normal Challenge ${player.challenge.normal.current}`;\r\n if (player.challenge.infinity.current) challenge = `Infinity Challenge ${player.challenge.infinity.current}`;\r\n player.records.recentInfinities.pop();\r\n player.records.recentInfinities.unshift([time, realTime, ip, infinities, challenge]);\r\n GameCache.bestRunIPPM.invalidate();\r\n}\r\n\r\nexport function resetInfinityRuns() {\r\n player.records.recentInfinities = Array.from(\r\n { length: 10 },\r\n () => [Number.MAX_VALUE, Number.MAX_VALUE, DC.D1, DC.D1, \"\"]\r\n );\r\n GameCache.bestRunIPPM.invalidate();\r\n}\r\n\r\n// Player gains 50% of infinities they would get based on their best infinities/hour crunch if they have the\r\n// milestone and turned on infinity autobuyer with 1 minute or less per crunch\r\nexport function getInfinitiedMilestoneReward(ms, considerMilestoneReached) {\r\n return Autobuyer.bigCrunch.autoInfinitiesAvailable(considerMilestoneReached)\r\n ? Decimal.floor(player.records.thisEternity.bestInfinitiesPerMs.times(ms).dividedBy(2))\r\n : DC.D0;\r\n}\r\n\r\n// eslint-disable-next-line max-params\r\nexport function addEternityTime(time, realTime, ep, eternities) {\r\n let challenge = \"\";\r\n if (player.challenge.eternity.current) {\r\n const currEC = player.challenge.eternity.current;\r\n const ec = EternityChallenge(currEC);\r\n const challText = player.dilation.active ? \"Dilated EC\" : \"Eternity Challenge\";\r\n challenge = `${challText} ${currEC} (${formatInt(ec.completions)}/${formatInt(ec.maxCompletions)})`;\r\n } else if (player.dilation.active) challenge = \"Time Dilation\";\r\n // If we call this function outside of dilation, it uses the existing AM and produces an erroneous number\r\n const gainedTP = player.dilation.active ? getTachyonGain() : DC.D0;\r\n player.records.recentEternities.pop();\r\n player.records.recentEternities.unshift([time, realTime, ep, eternities, challenge, gainedTP]);\r\n GameCache.averageRealTimePerEternity.invalidate();\r\n}\r\n\r\nexport function resetEternityRuns() {\r\n player.records.recentEternities = Array.from(\r\n { length: 10 },\r\n () => [Number.MAX_VALUE, Number.MAX_VALUE, DC.D1, DC.D1, \"\", DC.D0]\r\n );\r\n GameCache.averageRealTimePerEternity.invalidate();\r\n}\r\n\r\nexport function resetRealityRuns() {\r\n player.records.recentRealities = Array.from(\r\n { length: 10 },\r\n () => [Number.MAX_VALUE, Number.MAX_VALUE, DC.D1, DC.D1, \"\", DC.D0]\r\n );\r\n GameCache.averageRealTimePerEternity.invalidate();\r\n}\r\n\r\n// Player gains 50% of the eternities they would get if they continuously repeated their fastest eternity, if they\r\n// have the auto-eternity milestone and turned on eternity autobuyer with 0 EP\r\nexport function getEternitiedMilestoneReward(ms, considerMilestoneReached) {\r\n return Autobuyer.eternity.autoEternitiesAvailable(considerMilestoneReached)\r\n ? Decimal.floor(player.records.thisReality.bestEternitiesPerMs.times(ms).dividedBy(2))\r\n : DC.D0;\r\n}\r\n\r\nfunction isOfflineEPGainEnabled() {\r\n return player.options.offlineProgress && !Autobuyer.bigCrunch.autoInfinitiesAvailable() &&\r\n !Autobuyer.eternity.autoEternitiesAvailable();\r\n}\r\n\r\nexport function getOfflineEPGain(ms) {\r\n if (!EternityMilestone.autoEP.isReached || !isOfflineEPGainEnabled() || CorruptionData.isCorrupted) return DC.D0;\r\n return player.records.bestEternity.bestEPminReality.times(TimeSpan.fromMilliseconds(ms).totalMinutes.div(4));\r\n}\r\n\r\n// Note: realities and ampFactor must be distinct because there are a few things farther up which only multiply\r\n// reality count and none of the other things\r\n// eslint-disable-next-line max-params\r\nexport function addRealityTime(time, realTime, rm, level, realities, ampFactor, projIM) {\r\n let reality = \"\";\r\n const celestials = [Teresa, Effarig, Enslaved, V, Ra, Laitela];\r\n for (const cel of celestials) {\r\n if (cel.isRunning) reality = cel.displayName;\r\n }\r\n const shards = Effarig.shardsGained;\r\n player.records.recentRealities.pop();\r\n player.records.recentRealities.unshift([time, realTime, rm.times(ampFactor),\r\n realities, reality, level, shards.times(ampFactor), projIM]);\r\n}\r\n\r\nexport function gainedInfinities() {\r\n if (EternityChallenge(4).isRunning || Pelle.isDisabled(\"InfinitiedMults\")) {\r\n if(Ra.unlocks.unlockPelleGlyphEffects.isUnlocked && Pelle.isDoomed) return new Decimal(getAdjustedGlyphEffect(\"infinityinfmult\"));\r\n return DC.D1;\r\n }\r\n let infGain = Effects.max(\r\n 1,\r\n Achievement(87)\r\n ).toDecimal();\r\n\r\n infGain = infGain.timesEffectsOf(\r\n TimeStudy(32),\r\n RealityUpgrade(5),\r\n RealityUpgrade(7),\r\n Achievement(164),\r\n Ra.unlocks.continuousTTBoost.effects.infinity\r\n );\r\n infGain = infGain.times(getAdjustedGlyphEffect(\"infinityinfmult\"));\r\n infGain = infGain.powEffectOf(SingularityMilestone.infinitiedPow);\r\n if (Ra.unlocks.realitiesBoostInfinityAndEternityProduction.isUnlocked){\r\n let teresa90BaseExp=Math.pow((Math.log10(Currency.realities.value)/20), 1.111)\r\n if(teresa90BaseExp>1.5){\r\n teresa90BaseExp=1.5+Math.pow(teresa90BaseExp-1.5,0.75)\r\n }\r\n infGain = infGain.pow(teresa90BaseExp); //TODO: softcap this at ^1.5\r\n }\r\n return infGain;\r\n}\r\n\r\nexport function updateRefresh() {\r\n GameStorage.save();\r\n location.reload(true);\r\n}\r\n\r\nexport const GAME_SPEED_EFFECT = {\r\n FIXED_SPEED: 1,\r\n TIME_GLYPH: 2,\r\n BLACK_HOLE: 3,\r\n TIME_STORAGE: 4,\r\n SINGULARITY_MILESTONE: 5,\r\n NERFS: 6,\r\n EXPO_BLACK_HOLE: 7\r\n};\r\n\r\n/**\r\n * @param {number[]?} effectsToConsider A list of various game speed changing effects to apply when calculating\r\n * the game speed. If left undefined, all effects will be applied.\r\n * @param {number?} blackHolesActiveOverride A numerical value which forces all black holes up to its specified index\r\n * to be active for the purposes of game speed calculation. This is only used during offline black hole stuff.\r\n * @param {number?} expoBlackHolesActiveOverride A numerical value which forces all black holes up to its specified index\r\n * to be active for the purposes of game speed calculation. This is only used during offline black hole stuff.\r\n */\r\nexport function getGameSpeedupFactor(effectsToConsider, blackHolesActiveOverride) {\r\n let effects;\r\n if (effectsToConsider === undefined) {\r\n effects = [GAME_SPEED_EFFECT.FIXED_SPEED, GAME_SPEED_EFFECT.TIME_GLYPH, GAME_SPEED_EFFECT.BLACK_HOLE,\r\n GAME_SPEED_EFFECT.TIME_STORAGE, GAME_SPEED_EFFECT.SINGULARITY_MILESTONE, GAME_SPEED_EFFECT.NERFS, GAME_SPEED_EFFECT.EXPO_BLACK_HOLE];\r\n } else {\r\n effects = effectsToConsider;\r\n }\r\n\r\n if (effects.includes(GAME_SPEED_EFFECT.FIXED_SPEED)) {\r\n if (EternityChallenge(12).isRunning) {\r\n return player.mending.corruptionChallenge.corruptedMend ? corruptionPenalties.timeCompression.mult[player.mending.corruption[2]].div(1000) : new Decimal(1 / 1000);\r\n }\r\n }\r\n\r\n let factor = DC.D1;\r\n if (effects.includes(GAME_SPEED_EFFECT.BLACK_HOLE)) {\r\n if (BlackHoles.areNegative && !player.mending.corruptionChallenge.corruptedMend) {\r\n return factor.times(player.blackHoleNegative); //this should prevent < e-300 gamespeed outside of corruption (feel free to revert this)\r\n //factor = factor.times(player.blackHoleNegative);\r\n } else if (!BlackHoles.arePaused) {\r\n for (const blackHole of BlackHoles.list) {\r\n if (!blackHole.isUnlocked) break;\r\n const isActive = blackHolesActiveOverride === undefined\r\n ? blackHole.isActive\r\n : blackHole.id <= blackHolesActiveOverride;\r\n if (!isActive) break;\r\n factor = factor.times(Decimal.pow(blackHole.power, BlackHoles.unpauseAccelerationFactor));\r\n factor = factor.times(VUnlocks.achievementBH.effectOrDefault(1));\r\n factor = factor.times(VUnlocks.vAchMulti.effectOrDefault(1));\r\n /*if(ExpoBlackHole(1).isUnlocked && factor.gte(1)){\r\n for (const i of ExpoBlackHoles.list){ //I know we only have BH3, but this is futureproofing\r\n if (!i.isUnlocked) break;\r\n factor = Decimal.pow(factor, i.power);\r\n }\r\n }*/\r\n }\r\n }\r\n }\r\n\r\n if (effects.includes(GAME_SPEED_EFFECT.SINGULARITY_MILESTONE)) {\r\n factor = factor.times(SingularityMilestone.gamespeedFromSingularities.effectOrDefault(1));\r\n }\r\n\r\n if (effects.includes(GAME_SPEED_EFFECT.TIME_GLYPH)) {\r\n factor = factor.times(getAdjustedGlyphEffect(\"timespeed\"));\r\n factor = factor.pow(getAdjustedGlyphEffect(\"effarigblackhole\"));\r\n }\r\n\r\n if (ExpoBlackHole(1).isActive && !BlackHoles.areNegative) factor = Decimal.pow(factor, ExpoBlackHole(1).power);\r\n\r\n if (Enslaved.isStoringGameTime && effects.includes(GAME_SPEED_EFFECT.TIME_STORAGE)) {\r\n const storedTimeWeight = Ra.unlocks.autoPulseTime.canBeApplied ? 0.99 : 1;\r\n factor = factor.times((1 - storedTimeWeight)).add(1);\r\n }\r\n\r\n // These effects should always be active, but need to be disabled during offline black hole simulations because\r\n // otherwise it gets applied twice\r\n if (effects.includes(GAME_SPEED_EFFECT.NERFS)) {\r\n if (Effarig.isRunning) {\r\n factor = Effarig.multiplier(factor);\r\n } else if (Laitela.isRunning) {\r\n const nerfModifier = Math.clampMax(Time.thisRealityRealTime.totalMinutes.toNumber() / 10, 1);\r\n factor = Decimal.pow(factor, nerfModifier);\r\n }\r\n }\r\n\r\n if(player.celestials.ra.upgrades.has('enslavedUpgrade')) factor=factor.times(player.celestials.enslaved.storedReal);\r\n\r\n factor = factor.times(PelleUpgrade.timeSpeedMult.effectOrDefault(1));\r\n\r\n if (player.mending.corruptionChallenge.corruptedMend == true) {\r\n let timeCompressionPower = corruptionPenalties.timeCompression.power[player.mending.corruption[2]];\r\n let timeCompressionMult = corruptionPenalties.timeCompression.mult[player.mending.corruption[2]];\r\n if(CorruptionUpgrade(18).isBought){\r\n timeCompressionPower = Math.min(1,timeCompressionPower+0.01);\r\n timeCompressionMult = Decimal.pow(timeCompressionMult,0.1);\r\n }\r\n factor = factor.pow(timeCompressionPower)\r\n factor = factor.pow(corruptionPenalties.galWeak.hiddenSix[player.mending.corruption[3]])\r\n factor = factor.times(timeCompressionMult)\r\n }\r\n factor = factor.times(CorruptionUpgrade(2).effectOrDefault(1))\r\n factor = Decimal.clamp(factor, (player.mending.corruptionChallenge.corruptedMend || Ra.unlocks.uncapGamespeed.isUnlocked ? 0 : 1e-300), Ra.unlocks.uncapGamespeed.isUnlocked ? Decimal.pow10(1e300) : Decimal.pow10(300));\r\n // We will bypass capped gamespeed for below e-300 while corrupted incase some dumbass gets corruption before nameless 30\r\n \r\n let repeats = 1;\r\n while (factor.gte(Decimal.pow(getGameSpeedupSoftcaps(), repeats))) {\r\n factor = factor.div(getGameSpeedupSoftcaps());\r\n factor = factor.pow(getGameSpeedupSoftcapsExp());\r\n factor = factor.times(getGameSpeedupSoftcaps());\r\n repeats += 1;\r\n }\r\n /*if (factor.gte(getGameSpeedupSoftcaps())) {\r\n let x = getGameSpeedupSoftcapsExp();\r\n factor = factor.div(getGameSpeedupSoftcaps());\r\n factor = factor.pow(x); //generalized in case of future upgrades\r\n factor = factor.times(getGameSpeedupSoftcaps());\r\n } // Prevent gamespeed from going fucking ballistic*/\r\n\r\n return factor;\r\n}\r\n\r\nexport function getGameSpeedupSoftcaps(capNumber = 1){ //attempt to have all future GS softcaps in 1 function, capNumber is the softcap number (1 is the first, etc)\r\n switch(capNumber){\r\n case 1:\r\n default:\r\n return new Decimal(1e308);\r\n }\r\n\r\n}\r\nexport function getGameSpeedupSoftcapsExp(capNumber = 1){ \r\n switch(capNumber){\r\n case 1: {\r\n let x = 0.4321;\r\n x += WarpUpgrade(3).effectOrDefault(0);\r\n return x;\r\n }\r\n default:\r\n return 0.4321;\r\n }\r\n\r\n}\r\n\r\nexport function getGameSpeedupForDisplay() {\r\n const speedFactor = getGameSpeedupFactor();\r\n if (\r\n Enslaved.isAutoReleasing &&\r\n Enslaved.canRelease(true) &&\r\n !BlackHoles.areNegative &&\r\n !Pelle.isDisabled(\"blackhole\")\r\n ) {\r\n return Decimal.max(Enslaved.autoReleaseSpeed, speedFactor);\r\n }\r\n return speedFactor;\r\n}\r\n\r\nexport function getBaseGameSpeedup(){\r\n let x = getGameSpeedupFactor();\r\n\r\n for (const i of ExpoBlackHoles.list){ //I know we only have BH3, but this is futureproofing\r\n if (!i.isUnlocked) break;\r\n x = Decimal.pow(x, 1 / i.power);\r\n }\r\n return x;\r\n}\r\n// Separated out for organization; however this is also used in more than one spot in gameLoop() as well. Returns\r\n// true if the rest of the game loop should be skipped\r\nexport function realTimeMechanics(realDiff) {\r\n // Ra memory generation bypasses stored real time, but memory chunk generation is disabled when storing real time.\r\n // This is in order to prevent players from using time inside of Ra's reality for amplification as well\r\n Ra.memoryTick(realDiff, !Enslaved.isStoringRealTime);\r\n if (Ra.unlocks.alchSetToCapAndCapIncrease.isUnlocked) {\r\n Ra.applyAlchemyReactionsAuto()\r\n }\r\n if (AlchemyResource.momentum.isUnlocked) {\r\n player.celestials.ra.momentumTime += realDiff * Achievement(175).effectOrDefault(1);\r\n }\r\n\r\n DarkMatterDimensions.tick(realDiff);\r\n MultiversalDimensions.tick(realDiff);\r\n\r\n if(Ra.unlocks.passiveAnnihilationGen.isUnlocked){\r\n player.celestials.laitela.darkMatterMult += Laitela.darkMatterMultGain * realDiff / 500; //Think its now 50%/s? (Also this is real time why was it in gametime mechanics?)\r\n }\r\n\r\n // When storing real time, skip everything else having to do with production once stats are updated\r\n if (Enslaved.isStoringRealTime) {\r\n player.records.realTimePlayed += realDiff;\r\n player.records.thisInfinity.realTime += realDiff;\r\n player.records.thisEternity.realTime += realDiff;\r\n player.records.thisReality.realTime += realDiff;\r\n Enslaved.storeRealTime();\r\n // Most autobuyers will only tick usefully on the very first tick, but this needs to be here in order to allow\r\n // the autobuyers unaffected by time storage to tick as well\r\n Autobuyers.tick();\r\n GameUI.update();\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n// \"passDiff\" is in ms. It is only unspecified when it's being called normally and not due to simulating time, in which\r\n// case it uses the gap between now and the last time the function was called (capped at a day). This is on average\r\n// equal to the update rate, but may be much larger if the game was unfocused or the device went to sleep for some time.\r\n// eslint-disable-next-line complexity\r\nexport function gameLoop(passDiff, options = {}) {\r\n PerformanceStats.start(\"Frame Time\");\r\n PerformanceStats.start(\"Game Update\");\r\n\r\n EventHub.dispatch(GAME_EVENT.GAME_TICK_BEFORE);\r\n\r\n // In certain cases we want to allow the player to interact with the game's settings and tabs, but prevent any actual\r\n // resource generation from happening - in these cases, we have to make sure this all comes before the hibernation\r\n // check or else it'll attempt to run the game anyway\r\n if (Speedrun.isPausedAtStart() || (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked())) {\r\n GameUI.update();\r\n return;\r\n }\r\n\r\n if (Player.canMend && player.requirementChecks.reality.maxGlyphs < player.requirementChecks.mending.mmeleven) {\r\n player.requirementChecks.mending.mmeleven = player.requirementChecks.reality.maxGlyphs\r\n }\r\n let diff = passDiff;\r\n const thisUpdate = Date.now();\r\n const realDiff = diff === undefined\r\n ? Math.clamp(thisUpdate - player.lastUpdate, 1, 8.64e7) * (player.testSpeed ?? 1)\r\n : diff * (player.testSpeed ?? 1);\r\n if (!GameStorage.ignoreBackupTimer) player.backupTimer += realDiff;\r\n\r\n // For single ticks longer than a minute from the GameInterval loop, we assume that the device has gone to sleep or\r\n // hibernation - in those cases we stop the interval and simulate time instead. The gameLoop interval automatically\r\n // restarts itself at the end of the simulateTime call. This will not trigger for an unfocused game, as this seems to\r\n // result in a ~1 second tick rate for browsers.\r\n // Note that we have to explicitly call all the real-time mechanics with the existing value of realDiff, because\r\n // simply letting it run through simulateTime seems to result in it using zero\r\n CorruptionData.update() //We call this here since it resets every refresh, but we cant have it directly point to player because else multiplier tab complains\r\n if (player.options.hibernationCatchup && passDiff === undefined && realDiff > 6e4 * (player.testSpeed ?? 1)) {\r\n GameIntervals.gameLoop.stop();\r\n simulateTime(realDiff / 1000, true);\r\n realTimeMechanics(realDiff);\r\n return;\r\n }\r\n\r\n //RaUpgrade3 stuff--sxy\r\n if(player.celestials.ra.upgrades.has('enslavedUpgrade')) player.celestials.enslaved.storedReal=Enslaved.storedRealTimeCap;\r\n\r\n // Run all the functions which only depend on real time and not game time, skipping the rest of the loop if needed\r\n if (realTimeMechanics(realDiff)) return;\r\n\r\n // Ra-Nameless auto-release stored time (once every 5 ticks)\r\n if (Enslaved.isAutoReleasing) {\r\n Enslaved.autoReleaseTick++;\r\n }\r\n if (Enslaved.autoReleaseTick >= 5) {\r\n Enslaved.autoReleaseTick = 0;\r\n Enslaved.useStoredTime(true);\r\n Enslaved.isReleaseTick = true;\r\n } else if (!Enslaved.isReleaseTick) {\r\n Enslaved.nextTickDiff = realDiff;\r\n }\r\n if (diff === undefined) {\r\n diff = new Decimal(Enslaved.nextTickDiff);\r\n }\r\n\r\n if (player.records.realTimePlayed instanceof Decimal) {\r\n throw new Error(\"Something fucked up: Real time played is decimal\");\r\n }\r\n\r\n Autobuyers.tick();\r\n Tutorial.tutorialLoop();\r\n\r\n if (Achievement(165).isUnlocked && player.celestials.effarig.autoAdjustGlyphWeights) {\r\n autoAdjustGlyphWeights();\r\n }\r\n\r\n // We do these after autobuyers, since it's possible something there might\r\n // change a multiplier.\r\n GameCache.antimatterDimensionCommonMultiplier.invalidate();\r\n GameCache.antimatterDimensionFinalMultipliers.invalidate();\r\n GameCache.infinityDimensionCommonMultiplier.invalidate();\r\n GameCache.timeDimensionCommonMultiplier.invalidate();\r\n GameCache.totalIPMult.invalidate();\r\n\r\n const blackHoleDiff = realDiff;\r\n const fixedSpeedActive = EternityChallenge(12).isRunning;\r\n if (!Enslaved.isReleaseTick && !fixedSpeedActive) {\r\n let speedFactor;\r\n if (options.blackHoleSpeedup === undefined) {\r\n speedFactor = getGameSpeedupFactor();\r\n } else {\r\n // This is only called from simulateTime() and is calculated externally in order to avoid weirdness when game\r\n // speed is directly nerfed\r\n speedFactor = options.blackHoleSpeedup;\r\n }\r\n\r\n diff = new Decimal(diff)\r\n if (Enslaved.isStoringGameTime && !fixedSpeedActive) {\r\n // These variables are the actual game speed used and the game speed unaffected by time storage, respectively\r\n const reducedTimeFactor = getGameSpeedupFactor();\r\n const totalTimeFactor = getGameSpeedupFactor([GAME_SPEED_EFFECT.FIXED_SPEED, GAME_SPEED_EFFECT.TIME_GLYPH,\r\n GAME_SPEED_EFFECT.BLACK_HOLE, GAME_SPEED_EFFECT.SINGULARITY_MILESTONE]);\r\n const amplification = Ra.unlocks.improvedStoredTime.effects.gameTimeAmplification.effectOrDefault(1);\r\n const beforeStore = new Decimal(player.celestials.enslaved.stored);\r\n let x = new Decimal(player.celestials.enslaved.stored).plus(diff.times(totalTimeFactor).times(amplification))\r\n let y = new Decimal(Enslaved.timeCap())\r\n player.celestials.enslaved.stored = Decimal.min(x, y); // This code is split into 3 else it just has a panic attack for some reason\r\n Enslaved.currentBlackHoleStoreAmountPerMs = new Decimal(player.celestials.enslaved.stored.sub(beforeStore)).div(diff);\r\n speedFactor = reducedTimeFactor;\r\n }\r\n diff = diff.times(speedFactor);\r\n } else if (fixedSpeedActive) {\r\n diff = new Decimal(diff).times(getGameSpeedupFactor());\r\n Enslaved.currentBlackHoleStoreAmountPerMs = new Decimal(0);\r\n }\r\n player.celestials.ra.peakGamespeed = Decimal.max(player.celestials.ra.peakGamespeed, getGameSpeedupFactor());\r\n Enslaved.isReleaseTick = false;\r\n\r\n if(Ra.unlocks.retroactiveTeresaRealityReward.isUnlocked) {\r\n const currentBest = player.celestials.teresa.bestRunAM;\r\n player.celestials.teresa.bestRunAM = (player.records.totalAntimatter.sqrt().max(currentBest));\r\n }\r\n\r\n if(Ra.unlocks.unlock3rdBH.isUnlocked){\r\n ExpoBlackHoles.unlock();\r\n }\r\n\r\n if(Ra.unlocks.rautobuyers.isUnlocked && !player.celestials.ra.permanentMemories.ra2){\r\n player.celestials.ra.permanentMemories.ra2 = true;\r\n }\r\n\r\n if(Ra.unlocks.dmdAuto1.isUnlocked && !player.celestials.ra.permanentMemories.lai50){\r\n player.celestials.ra.permanentMemories.lai50 = true;\r\n }\r\n\r\n if(Ra.unlocks.dmdAuto2.isUnlocked && !player.celestials.ra.permanentMemories.lai65){\r\n player.celestials.ra.permanentMemories.lai65 = true;\r\n }\r\n\r\n if(!document.hasFocus()){\r\n player.celestials.laitela.isHoldingLClick = false;\r\n }\r\n\r\n if(player.celestials.laitela.isHoldingLClick && Date.now() - player.celestials.laitela.holdStart >= 200){\r\n const dim = DarkMatterDimension(player.celestials.laitela.heldTier);\r\n switch(player.celestials.laitela.heldType){\r\n case \"interval\":\r\n const isIntervalCapped = dim.interval <= dim.intervalPurchaseCap;\r\n if (isIntervalCapped) dim.ascend();\r\n else dim.buyInterval();\r\n break;\r\n case \"DM\":\r\n dim.buyPowerDM();\r\n break;\r\n case \"DE\":\r\n dim.buyPowerDE();\r\n break;\r\n default:\r\n throw new Error(\"Console user who doesn't know what you are doing you are very funny\");\r\n }\r\n }\r\n\r\n if(Pelle.isDoomed && Ra.unlocks.pelleXP.isUnlocked){\r\n if (GalaxyGenerator.generatedGalaxies === 0) player.records.thisReality.remWithoutGG = Currency.remnants.value;\r\n if(player.records.thisReality.remWithoutGG > player.records.bestReality.remWithoutGG){\r\n player.records.bestReality.remWithoutGG = player.records.thisReality.remWithoutGG;\r\n }\r\n }\r\n\r\n // These need to all be done consecutively in order to minimize the chance of a reset occurring between real time\r\n // updating and game time updating. This is only particularly noticeable when game speed is 1 and the player\r\n // expects to see identical numbers. We also don't increment the timers if the game has been beaten (Achievement 188)\r\n if (!Achievement(188).isUnlocked || (PlayerProgress.mendingUnlocked() && !player.isGameEnd)) {\r\n player.records.realTimeDoomed = Math.min(1e308, player.records.realTimeDoomed + realDiff);\r\n player.records.realTimePlayed = Math.min(1e308,player.records.realTimePlayed + realDiff);\r\n player.records.thisInfinity.realTime = Math.min(1e308,player.records.thisInfinity.realTime + realDiff);\r\n player.records.thisEternity.realTime= Math.min(1e308, player.records.thisEternity.realTime + realDiff);\r\n\r\n player.records.thisReality.realTime = Math.min(1e308, player.records.thisReality.realTime + realDiff);\r\n player.records.thisMend.realTime = Math.min(1e308, player.records.thisMend.realTime + realDiff);\r\n player.records.totalTimePlayed = player.records.totalTimePlayed.add(diff);\r\n player.records.thisInfinity.time = player.records.thisInfinity.time.add(diff);\r\n if (Enslaved.isRunning && Enslaved.feltEternity && !EternityChallenge(12).isRunning) {\r\n player.records.thisEternity.time = player.records.thisEternity.time.add(diff.times(Currency.eternities.value.clampMax(1e66).add(1)));\r\n }\r\n else {\r\n player.records.thisEternity.time = player.records.thisEternity.time.add(diff);\r\n }\r\n player.records.thisReality.time = player.records.thisReality.time.add(diff);\r\n player.records.thisMend.time = new Decimal(player.records.thisMend.time).add(diff);\r\n }\r\n\r\n DeltaTimeState.update(realDiff, diff);\r\n\r\n updateNormalAndInfinityChallenges(diff);\r\n\r\n // IP generation is broken into a couple of places in gameLoop; changing that might change the\r\n // behavior of eternity farming.\r\n preProductionGenerateIP(diff);\r\n\r\n if (!Pelle.isDoomed) {\r\n passivePrestigeGen();\r\n }\r\n\r\n\r\n applyAutoprestige(realDiff);\r\n updateImaginaryMachines(realDiff);\r\n\r\n const uncountabilityGain = Time.unscaledDeltaTime.totalSeconds.times(AlchemyResource.uncountability.effectValue).toNumber();\r\n Currency.realities.add(uncountabilityGain);\r\n Currency.perkPoints.add(uncountabilityGain);\r\n\r\n if (Perk.autocompleteEC1.canBeApplied) player.reality.lastAutoEC += realDiff;\r\n\r\n EternityChallenge(12).tryFail();\r\n Achievements._power.invalidate();\r\n\r\n TimeDimensions.tick(diff);\r\n InfinityDimensions.tick(diff);\r\n AntimatterDimensions.tick(diff);\r\n\r\n const gain = Math.clampMin(FreeTickspeed.fromShards(Currency.timeShards.value).newAmount - player.totalTickGained, 0);\r\n player.totalTickGained += gain;\r\n\r\n updatePrestigeRates();\r\n tryCompleteInfinityChallenges();\r\n\r\n EternityChallenges.autoComplete.tick();\r\n\r\n replicantiLoop(diff);\r\n\r\n if (PlayerProgress.dilationUnlocked()) {\r\n Currency.dilatedTime.add(getDilationGainPerSecond().times(new Decimal(diff).div(1000)));\r\n }\r\n\r\n updateTachyonGalaxies();\r\n Currency.timeTheorems.add(getTTPerSecond().times(new Decimal(diff).div(1000)));\r\n InfinityDimensions.tryAutoUnlock();\r\n\r\n BlackHoles.updatePhases(blackHoleDiff);\r\n\r\n // Unlocks dilation at a certain total TT count for free, but we add the cost first in order to make\r\n // sure that TT count doesn't go negative and that we can actually buy it. This technically bumps the max theorem\r\n // amount up as well, but at this point of the game 5k TT is insignificant to basically all other sources of TT.\r\n if (Ra.unlocks.autoUnlockDilation.canBeApplied &&\r\n Currency.timeTheorems.max.gte(TimeStudy.dilation.totalTimeTheoremRequirement) &&\r\n !isInCelestialReality() &&\r\n !Pelle.isDoomed) {\r\n Currency.timeTheorems.add(TimeStudy.dilation.cost);\r\n TimeStudy.dilation.purchase(true);\r\n }\r\n\r\n applyAutoUnlockPerks();\r\n if (GlyphSelection.active) GlyphSelection.update(gainedGlyphLevel());\r\n\r\n // There are some external checks which prevent excessive resource gain with Teresa-25; it may give TP outside of\r\n // dilation, but the TP gain function is also coded to behave differently if it's active\r\n const teresa1 = player.dilation.active && Ra.unlocks.autoTP.canBeApplied;\r\n const teresa25 = !isInCelestialReality() && Ra.unlocks.unlockDilationStartingTP.canBeApplied;\r\n if ((teresa1 || teresa25) && !Pelle.isDoomed) rewardTP();\r\n\r\n if (Enslaved.canTickHintTimer) {\r\n player.celestials.enslaved.hintUnlockProgress += Enslaved.isRunning ? realDiff : (realDiff * 0.4);\r\n if (player.celestials.enslaved.hintUnlockProgress >= TimeSpan.fromHours(5).totalMilliseconds.toNumber()) {\r\n EnslavedProgress.hintsUnlocked.giveProgress();\r\n Enslaved.quotes.hintUnlock.show();\r\n }\r\n }\r\n\r\n Ra.raGainPointLoop(realDiff);\r\n laitelaRealityTick(realDiff);\r\n Achievements.autoAchieveUpdate(diff);\r\n V.checkForUnlocks();\r\n AutomatorBackend.update(realDiff);\r\n Pelle.gameLoop(realDiff);\r\n GalaxyGenerator.loop(realDiff);\r\n GameEnd.gameLoop(realDiff);\r\n\r\n if (!Enslaved.canAmplify) {\r\n Enslaved.boostReality = false;\r\n }\r\n\r\n // Stopping these checks after CREDITS_START reduces lag and allows for the glyph customization modal to appear\r\n if (GameEnd.endState < END_STATE_MARKERS.CREDITS_START) {\r\n if (Tabs.current.isPermanentlyHidden) {\r\n const tab = Tabs.all.reverse().find(t => !t.isPermanentlyHidden && t.id !== 10);\r\n if (tab) tab.show(true);\r\n else [...Tab.dimensions.subtabs].reverse().find(t => !t.isPermanentlyHidden).show(true);\r\n }\r\n\r\n if (Tabs.current.subtabs.find(t => t.isOpen).isPermanentlyHidden) {\r\n [...Tab.dimensions.subtabs].reverse().find(t => !t.isPermanentlyHidden).show(true);\r\n }\r\n }\r\n\r\n EventHub.dispatch(GAME_EVENT.GAME_TICK_AFTER);\r\n GameUI.update();\r\n player.lastUpdate = thisUpdate;\r\n PerformanceStats.end(\"Game Update\");\r\n}\r\n\r\nfunction updatePrestigeRates() {\r\n const currentIPmin = gainedInfinityPoints().dividedBy(Decimal.clampMin(0.0005, Time.thisInfinityRealTime.totalMinutes).toNumber());\r\n if (currentIPmin.gt(player.records.thisInfinity.bestIPmin) && Player.canCrunch) {\r\n player.records.thisInfinity.bestIPmin = currentIPmin;\r\n player.records.thisInfinity.bestIPminVal = gainedInfinityPoints();\r\n }\r\n\r\n const currentEPmin = gainedEternityPoints().dividedBy(Decimal.clampMin(0.0005, Time.thisEternityRealTime.totalMinutes).toNumber());\r\n if (currentEPmin.gt(player.records.thisEternity.bestEPmin) && Player.canEternity) {\r\n player.records.thisEternity.bestEPmin = currentEPmin;\r\n player.records.thisEternity.bestEPminVal = gainedEternityPoints();\r\n }\r\n\r\n const currentRSmin = Effarig.shardsGained.div(Decimal.clampMin(0.0005, Time.thisRealityRealTime.totalMinutes));\r\n if (currentRSmin.gte(player.records.thisReality.bestRSmin) && isRealityAvailable()) {\r\n player.records.thisReality.bestRSmin = currentRSmin;\r\n player.records.thisReality.bestRSminVal = Effarig.shardsGained;\r\n }\r\n}\r\n\r\nfunction passivePrestigeGen() {\r\n let eternitiedGain = DC.D0;\r\n if (RealityUpgrade(14).isBought) {\r\n eternitiedGain = DC.D1.timesEffectsOf(\r\n Achievement(113),\r\n RealityUpgrade(3),\r\n RealityUpgrade(14)\r\n );\r\n eternitiedGain = Decimal.times(eternitiedGain, getAdjustedGlyphEffect(\"timeetermult\"));\r\n eternitiedGain = new Decimal(Time.deltaTime).times(\r\n Decimal.pow(eternitiedGain, AlchemyResource.eternity.effectValue));\r\n player.reality.partEternitied = player.reality.partEternitied.plus(eternitiedGain);\r\n Currency.eternities.add(player.reality.partEternitied.floor());\r\n player.reality.partEternitied = player.reality.partEternitied.sub(player.reality.partEternitied.floor());\r\n }\r\n\r\n if (!EternityChallenge(4).isRunning) {\r\n let infGen = DC.D0;\r\n if (BreakInfinityUpgrade.infinitiedGen.isBought) {\r\n // Multipliers are done this way to explicitly exclude ach87 and TS32\r\n infGen = infGen.plus(Time.deltaTimeMs.div(Decimal.clampMin(50, player.records.bestInfinity.time)).div(2));\r\n infGen = infGen.timesEffectsOf(\r\n RealityUpgrade(5),\r\n RealityUpgrade(7),\r\n Ra.unlocks.continuousTTBoost.effects.infinity\r\n );\r\n infGen = infGen.times(getAdjustedGlyphEffect(\"infinityinfmult\"));\r\n }\r\n if (RealityUpgrade(11).isBought) {\r\n infGen = infGen.plus(RealityUpgrade(11).effectValue.times(Time.deltaTime));\r\n }\r\n if (EffarigUnlock.eternity.isUnlocked) {\r\n // We consider half of the eternities we gained above this tick\r\n // to have been gained before the infinities, and thus not to\r\n // count here. This gives us the desirable behavior that\r\n // infinities and eternities gained overall will be the same\r\n // for two ticks as for one tick of twice the length.\r\n infGen = infGen.plus(gainedInfinities().times(\r\n Currency.eternities.value.minus(eternitiedGain.div(2).floor())).times(Time.deltaTime));\r\n }\r\n infGen = infGen.plus(player.partInfinitied);\r\n Currency.infinities.add(infGen.floor());\r\n player.partInfinitied = infGen.minus(infGen.floor()).toNumber();\r\n }\r\n}\r\n\r\n// Applies all perks which automatically unlock things when passing certain thresholds, needs to be checked every tick\r\nfunction applyAutoUnlockPerks() {\r\n if (!TimeDimension(8).isUnlocked && Perk.autounlockTD.canBeApplied) {\r\n for (let dim = 5; dim <= 8; ++dim) TimeStudy.timeDimension(dim).purchase();\r\n }\r\n if (Perk.autounlockDilation3.canBeApplied) buyDilationUpgrade(DilationUpgrade.ttGenerator.id);\r\n if (Perk.autounlockReality.canBeApplied) TimeStudy.reality.purchase(true);\r\n applyEU2();\r\n}\r\n\r\nfunction laitelaRealityTick(realDiff) {\r\n const laitelaInfo = player.celestials.laitela;\r\n if (!Laitela.isRunning) return;\r\n if (laitelaInfo.entropy >= 0) {\r\n laitelaInfo.entropy += (realDiff / 1000) * Laitela.entropyGainPerSecond;\r\n }\r\n\r\n // Setting entropy to -1 on completion prevents the modal from showing up repeatedly\r\n if (laitelaInfo.entropy >= 1) {\r\n let completionText = `Lai'tela's Reality has been destabilized after ${Time.thisRealityRealTime.toStringShort()}.`;\r\n laitelaInfo.entropy = -1;\r\n const oldInfo = {\r\n fastestCompletion: laitelaInfo.fastestCompletion,\r\n difficultyTier: laitelaInfo.difficultyTier,\r\n realityReward: Laitela.realityReward\r\n };\r\n laitelaInfo.thisCompletion = Time.thisRealityRealTime.totalSeconds.toNumber();\r\n laitelaInfo.fastestCompletion = Math.min(laitelaInfo.thisCompletion, laitelaInfo.fastestCompletion);\r\n clearCelestialRuns();\r\n if (Time.thisRealityRealTime.totalSeconds.lt(30)) {\r\n laitelaInfo.difficultyTier++;\r\n laitelaInfo.fastestCompletion = 300;\r\n completionText += laitelaBeatText(Laitela.maxAllowedDimension + 1);\r\n for (const quote of Laitela.quotes.all) {\r\n if (quote.requirement) {\r\n quote.show();\r\n }\r\n }\r\n }\r\n if (Laitela.realityReward > oldInfo.realityReward) {\r\n completionText += `

Dark Matter Multiplier: ${formatX(oldInfo.realityReward, 2, 2)}\r\n ➜ ${formatX(Laitela.realityReward, 2, 2)}`;\r\n if (oldInfo.fastestCompletion === 3600 || oldInfo.fastestCompletion === 300 && oldInfo.difficultyTier > 0) {\r\n if (Time.thisRealityRealTime.totalSeconds.lt(30)) {\r\n // First attempt - destabilising\r\n completionText += `
Best Completion Time: None ➜ Destabilized\r\n
Highest Active Dimension: ${formatInt(8 - oldInfo.difficultyTier)} ➜\r\n ${formatInt(8 - laitelaInfo.difficultyTier)}`;\r\n } else {\r\n // First attempt - not destabilising\r\n completionText += `
Best Completion Time: None ➜\r\n ${TimeSpan.fromSeconds(laitelaInfo.fastestCompletion).toStringShort()}\r\n
Highest Active Dimension: ${formatInt(8 - laitelaInfo.difficultyTier)}`;\r\n }\r\n } else if (Time.thisRealityRealTime.totalSeconds.lt(30) ) {\r\n // Second+ attempt - destabilising\r\n completionText += `
Best Completion Time: ${TimeSpan.fromSeconds(oldInfo.fastestCompletion).toStringShort()}\r\n ➜ Destabilized\r\n
Highest Active Dimension: ${formatInt(8 - oldInfo.difficultyTier)} ➜\r\n ${formatInt(8 - laitelaInfo.difficultyTier)}`;\r\n } else {\r\n // Second+ attempt - not destabilising\r\n completionText += `
Best Completion Time: ${TimeSpan.fromSeconds(oldInfo.fastestCompletion).toStringShort()}\r\n ➜ ${TimeSpan.fromSeconds(laitelaInfo.fastestCompletion).toStringShort()}\r\n
Highest Active Dimension: ${formatInt(8 - oldInfo.difficultyTier)}`;\r\n }\r\n player.records.bestReality.laitelaSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n } else {\r\n completionText += ` You need to destabilize in faster than\r\n ${TimeSpan.fromSeconds(laitelaInfo.fastestCompletion).toStringShort()} to improve your multiplier.`;\r\n }\r\n if (Laitela.isFullyDestabilized) SpeedrunMilestones(24).tryComplete();\r\n Modal.message.show(completionText, {}, 2);\r\n }\r\n}\r\n\r\nfunction laitelaBeatText(disabledDim) {\r\n switch (disabledDim) {\r\n case 1: return `

Lai'tela's Reality will now completely disable production from all Dimensions.\r\n The Reality can still be entered, but further destabilization is no longer possible.\r\n For completely destabilizing the Reality, you also get an additional ${formatX(8)} to Dark Energy gain.`;\r\n case 2: return `

Lai'tela's Reality will now disable production from all 2nd Dimensions during\r\n future runs, but the reward will be ${formatInt(100)} times stronger than before. Completely destabilizing\r\n the Reality for the final Dimension will give you an additional ${formatX(8)} to Dark Energy gain.`;\r\n case 3: return `

Lai'tela's Reality will now disable production from all 3rd Dimensions during\r\n future runs, but the reward will be ${formatInt(100)} times stronger than before.`;\r\n case 8: return `

Lai'tela's Reality will now disable production from all 8th Dimensions during\r\n future runs, but the reward will be ${formatInt(100)} times stronger than before. This boost can be\r\n repeated for each remaining Dimension by reaching destabilization within ${formatInt(30)} seconds again.`;\r\n default: return `

Lai'tela's Reality will now disable production from all\r\n ${disabledDim}th Dimensions during future runs, but the reward will be\r\n ${formatInt(100)} times stronger than before.`;\r\n }\r\n}\r\n\r\n// This gives IP/EP/RM from the respective upgrades that reward the prestige currencies continuously\r\nfunction applyAutoprestige(diff) {\r\n if(Ra.unlocks.alchSetToCapAndCapIncrease.isUnlocked){\r\n player.celestials.ra.alchemy = Array.repeat(0, 21) //This just sets all alch resources to the cap, probably will be changed to be passive\r\n .map(() => ({\r\n amount: Ra.alchemyResourceCap,\r\n reaction: false\r\n }));\r\n }\r\n if (Ra.unlocks.passiveRelicShardGain.isUnlocked){\r\n Currency.relicShards.add(Effarig.shardsGained);\r\n }\r\n if (MendingUpgrade(5).isBought && !Pelle.isDoomed){\r\n Currency.infinityPoints.add(gainedInfinityPoints().times(CorruptionData.isCorrupted ? 0.01 : Time.deltaTime.div(100)).timesEffectOf(Ra.unlocks.continuousTTBoost.effects.autoPrestige));\r\n }\r\n else{\r\n Currency.infinityPoints.add(TimeStudy(181).effectOrDefault(0));\r\n }\r\n\r\n if (TeresaUnlocks.epGen.canBeApplied || (MendingUpgrade(5).isBought && !Pelle.isDoomed)) {\r\n Currency.eternityPoints.add(player.records.thisEternity.bestEPmin.times(DC.D0_01).times(CorruptionData.isCorrupted ? diff / (1000) : getGameSpeedupFactor().times(diff).div(1000)).timesEffectOf(Ra.unlocks.continuousTTBoost.effects.autoPrestige));\r\n }\r\n\r\n if (InfinityUpgrade.ipGen.isCharged || MendingUpgrade(5).isBought) {\r\n const addedRM = MachineHandler.gainedRealityMachines\r\n .timesEffectsOf(InfinityUpgrade.ipGen.chargedEffect)\r\n .times(diff / 1000);\r\n Currency.realityMachines.add(addedRM);\r\n }\r\n\r\n if(Pelle.isDoomed && MendingUpgrade(5).isBought){\r\n let am = player.celestials.pelle.records.totalAntimatter.plus(1).log10();\r\n let ip = player.celestials.pelle.records.totalInfinityPoints.plus(1).log10();\r\n let ep = player.celestials.pelle.records.totalEternityPoints.plus(1).log10();\r\n let MMBoostRem = MendingMilestone.one.isReached ? 1.1 : 1;\r\n\r\n if (PelleStrikes.dilation.hasStrike) {\r\n am *= 500;\r\n ip *= 10;\r\n ep *= 5;\r\n }\r\n\r\n const gain = (\r\n ((Math.log10(am + 2) + Math.log10(ip + 2) + Math.log10(ep + 2)) * MMBoostRem)/ 1.64\r\n ) ** 7.5;\r\n let curr = player.celestials.pelle.remnants;\r\n player.celestials.pelle.remnants = Math.max(curr, gain);\r\n }\r\n\r\n if (PelleRifts.chaos.milestones[2].canBeApplied) {\r\n Currency.eternityPoints.add(gainedEternityPoints().times(DC.D0_1).times(diff / 1000));\r\n }\r\n}\r\n\r\nfunction updateImaginaryMachines(diff) {\r\n MachineHandler.updateIMCap();\r\n Currency.imaginaryMachines.add(MachineHandler.gainedImaginaryMachines(diff));\r\n}\r\n\r\nfunction updateTachyonGalaxies() {\r\n const tachyonGalaxyMult = Effects.max(1, DilationUpgrade.doubleGalaxies);\r\n const tachyonGalaxyThreshold = 1000;\r\n const thresholdMult = getTachyonGalaxyMult();\r\n /*\r\n base = bulkBuyBinarySearch(Currency.dilatedTime.value,\r\n {\r\n costFunction: x => getTachyonGalaxyMult(undefined, x).pow(x),\r\n firstCost: 1000,\r\n cumulative: false,\r\n },\r\n 0)\r\n */\r\n player.dilation.baseTachyonGalaxies = Math.min(1e6, Math.max(player.dilation.baseTachyonGalaxies,\r\n 1 + Math.floor(Decimal.log(Currency.dilatedTime.value.dividedBy(1000), thresholdMult))));\r\n player.dilation.nextThreshold = DC.E3.times(new Decimal(thresholdMult)\r\n .pow(player.dilation.baseTachyonGalaxies));\r\n player.dilation.totalTachyonGalaxies = (player.dilation.baseTachyonGalaxies + Math.min(500, Effects.max(0, DilationUpgrade.doubleGalaxies) * player.dilation.baseTachyonGalaxies)) * DilationUpgrade.galaxyMultiplier.effectValue;\r\n}\r\n\r\nexport function getTTPerSecond() {\r\n // All TT multipliers (note that this is equal to 1 pre-Ra)\r\n let ttMult = Effects.product(\r\n Achievement(137),\r\n Achievement(156),\r\n ).toDecimal().times(Ra.unlocks.achievementTTMult.config.canBeApplied ? Ra.unlocks.achievementTTMult.config.effectValue : 1).times(Ra.unlocks.continuousTTBoost.config.canBeApplied ? Ra.unlocks.continuousTTBoost.effects.ttGen : 1);\r\n if (GlyphAlteration.isAdded(\"dilation\")) ttMult.times(getSecondaryGlyphEffect(\"dilationTTgen\"));\r\n\r\n // Glyph TT generation\r\n let glyphTT = Teresa.isRunning || Enslaved.isRunning || Pelle.isDoomed\r\n ? (Pelle.isDoomed && Ra.unlocks.unlockPelleGlyphEffects.isUnlocked) ? new Decimal(getAdjustedGlyphEffect(\"dilationTTgen\")) : 0\r\n : new Decimal(getAdjustedGlyphEffect(\"dilationTTgen\")).times(ttMult);\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.soF.ttgen[player.mending.corruption[9]]) {\r\n glyphTT=0;\r\n }\r\n\r\n // Dilation TT generation\r\n const dilationTT = DilationUpgrade.ttGenerator.isBought\r\n ? DilationUpgrade.ttGenerator.effectValue.times(Pelle.isDoomed ? 1 : ttMult)\r\n : DC.D0;\r\n\r\n // Lai'tela TT power\r\n let finalTT = dilationTT.add(glyphTT);\r\n if (finalTT.gt(1)) {\r\n finalTT = finalTT.pow(SingularityMilestone.theoremPowerFromSingularities.effectOrDefault(1));\r\n }\r\n\r\n //V Level 75\r\n if (Ra.unlocks.totalSTBoostTTGen.isUnlocked){\r\n finalTT = finalTT.pow((1 + (Math.max(Math.log10(V.spaceTheorems + 1), 0) / 10)));\r\n }\r\n\r\n\r\n return finalTT;\r\n}\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nfunction recursiveTimeOut(fn, iterations, endFn) {\r\n fn(iterations);\r\n if (iterations === 0) endFn();\r\n else setTimeout(() => recursiveTimeOut(fn, iterations - 1, endFn), 0);\r\n}\r\n\r\nfunction afterSimulation(seconds, playerBefore) {\r\n if (seconds > 600) {\r\n const playerAfter = deepmergeAll([{}, player]);\r\n Modal.awayProgress.show({ playerBefore, playerAfter, seconds });\r\n }\r\n\r\n GameUI.notify.showBlackHoles = true;\r\n}\r\n\r\nexport function simulateTime(seconds, real, fast) {\r\n // The game is simulated at a base 50ms update rate, with a maximum tick count based on the values of real and fast\r\n // - Calling with real === true will always simulate at full accuracy with no tick count reduction unless it would\r\n // otherwise simulate with more ticks than offline progress would allow\r\n // - Calling with fast === true will only simulate it with a max of 50 ticks\r\n // - Otherwise, tick count will be limited to the offline tick count (which may be set externally during save import)\r\n // Tick count is never *increased*, and only ever decreased if needed.\r\n if (seconds < 0) return;\r\n let ticks = Math.floor(seconds * 20);\r\n GameUI.notify.showBlackHoles = false;\r\n\r\n // Limit the tick count (this also applies if the black hole is unlocked)\r\n const maxTicks = GameStorage.maxOfflineTicks(1000 * seconds, GameStorage.offlineTicks ?? player.options.offlineTicks);\r\n if (ticks > maxTicks && !fast) {\r\n ticks = maxTicks;\r\n } else if (ticks > 50 && !real && fast) {\r\n ticks = 50;\r\n }\r\n\r\n const playerStart = deepmergeAll([{}, player]);\r\n\r\n let totalGameTime;\r\n\r\n if (BlackHoles.areUnlocked && !BlackHoles.arePaused) {\r\n totalGameTime = BlackHoles.calculateGameTimeFromRealTime(seconds, BlackHoles.calculateSpeedups());\r\n } else {\r\n totalGameTime = getGameSpeedupFactor().times(seconds);\r\n }\r\n\r\n const infinitiedMilestone = getInfinitiedMilestoneReward(totalGameTime.times(1000));\r\n const eternitiedMilestone = getEternitiedMilestoneReward(totalGameTime.times(1000));\r\n\r\n if (eternitiedMilestone.gt(0)) {\r\n Currency.eternities.add(eternitiedMilestone);\r\n } else if (infinitiedMilestone.gt(0)) {\r\n Currency.infinities.add(infinitiedMilestone);\r\n } else {\r\n Currency.eternityPoints.add(getOfflineEPGain(seconds * 1000));\r\n }\r\n\r\n if (InfinityUpgrade.ipOffline.isBought && player.options.offlineProgress) {\r\n Currency.infinityPoints.add(player.records.thisEternity.bestIPMsWithoutMaxAll.times(seconds * 1000 / 2));\r\n }\r\n\r\n EventHub.dispatch(GAME_EVENT.OFFLINE_CURRENCY_GAINED);\r\n\r\n let remainingRealSeconds = seconds;\r\n // During async code the number of ticks remaining can go down suddenly\r\n // from \"Speed up\" which means tick length needs to go up, and thus\r\n // you can't just divide total time by total ticks to get tick length.\r\n // For example, suppose you had 6000 offline ticks, and called \"Speed up\"\r\n // 1000 ticks in, meaning that after \"Speed up\" there'd only be 1000 ticks more\r\n // (so 1000 + 1000 = 2000 ticks total). Dividing total time by total ticks would\r\n // use 1/6th of the total time before \"Speed up\" (1000 of 6000 ticks), and 1/2 after\r\n // (1000 of 2000 ticks). Short of some sort of magic user prediction to figure out\r\n // whether the user *will* press \"Speed up\" at some point, dividing remaining time\r\n // by remaining ticks seems like the best thing to do.\r\n let loopFn = i => {\r\n const diff = remainingRealSeconds / i;\r\n gameLoop(1000 * diff);\r\n remainingRealSeconds -= diff;\r\n };\r\n\r\n // Simulation code which accounts for BH cycles (segments where a BH is active doesn't use diff since it splits\r\n // up intervals based on real time instead in an effort to keep ticks all roughly equal in game time).\r\n // Black hole auto-pausing is entirely handled by the black hole phase advancement code (for actually pausing)\r\n // and calculateOfflineTick (for time calculation).\r\n if (BlackHoles.areUnlocked && !BlackHoles.arePaused) {\r\n loopFn = i => {\r\n const [realTickTime, blackHoleSpeedup] = BlackHoles.calculateOfflineTick(remainingRealSeconds,\r\n i, 0.0001);\r\n remainingRealSeconds -= realTickTime;\r\n gameLoop(1000 * realTickTime, { blackHoleSpeedup });\r\n };\r\n }\r\n\r\n // We don't show the offline modal here or bother with async if doing a fast simulation\r\n if (fast) {\r\n // Fast simulations happen when simulating between 10 and 50 seconds of offline time.\r\n // One easy way to get this is to autosave every 30 or 60 seconds, wait until the save timer\r\n // in the bottom-left hits 15 seconds, and refresh (without saving directly beforehand).\r\n GameIntervals.stop();\r\n // Fast simulations are always 50 ticks. They're done in this weird countdown way because\r\n // we want to be able to call the same function that we call when using async code (to avoid\r\n // duplicating functions), and that function expects a parameter saying how many ticks are remaining.\r\n for (let remaining = 50; remaining > 0; remaining--) {\r\n loopFn(remaining);\r\n }\r\n GameStorage.postLoadStuff();\r\n afterSimulation(seconds, playerStart);\r\n } else {\r\n const progress = {};\r\n ui.view.modal.progressBar = {};\r\n Async.run(loopFn,\r\n ticks,\r\n {\r\n batchSize: 1,\r\n maxTime: 60,\r\n sleepTime: 1,\r\n asyncEntry: doneSoFar => {\r\n GameIntervals.stop();\r\n ui.$viewModel.modal.progressBar = {\r\n label: \"Offline Progress Simulation\",\r\n info: `The game is being run at a lower accuracy in order to quickly calculate the resources you\r\n gained while you were away. See the How To Play entry on \"Offline Progress\" for technical details. If\r\n you are impatient and want to get back to the game sooner, you can click the \"Speed up\" button to\r\n simulate the rest of the time with half as many ticks (down to a minimum of ${formatInt(500)} ticks\r\n remaining). The \"SKIP\" button will instead use all the remaining offline time in ${formatInt(10)}\r\n ticks.`,\r\n progressName: \"Ticks\",\r\n current: doneSoFar,\r\n max: ticks,\r\n startTime: Date.now(),\r\n buttons: [{\r\n text: \"Speed up\",\r\n condition: (current, max) => max - current > 500,\r\n click: () => {\r\n const newRemaining = Math.clampMin(Math.floor(progress.remaining / 2), 500);\r\n // We subtract the number of ticks we skipped, which is progress.remaining - newRemaining.\r\n // This, and the below similar code in \"SKIP\", are needed or the progress bar to be accurate\r\n // (both with respect to the number of ticks it shows and with respect to how full it is).\r\n progress.maxIter -= progress.remaining - newRemaining;\r\n progress.remaining = newRemaining;\r\n // We update the progress bar max data (remaining will update automatically).\r\n ui.$viewModel.modal.progressBar.max = progress.maxIter;\r\n }\r\n },\r\n {\r\n text: \"SKIP\",\r\n condition: (current, max) => max - current > 10,\r\n click: () => {\r\n // We jump to 10 from the end (condition guarantees there are at least 10 left).\r\n // We subtract the number of ticks we skipped, which is progress.remaining - 10.\r\n progress.maxIter -= progress.remaining - 10;\r\n progress.remaining = 10;\r\n }\r\n }]\r\n };\r\n },\r\n asyncProgress: doneSoFar => {\r\n ui.$viewModel.modal.progressBar.current = doneSoFar;\r\n },\r\n asyncExit: () => {\r\n ui.$viewModel.modal.progressBar = undefined;\r\n // .postLoadStuff will restart GameIntervals\r\n GameStorage.postLoadStuff();\r\n },\r\n then: () => {\r\n afterSimulation(seconds, playerStart);\r\n },\r\n progress\r\n });\r\n }\r\n}\r\n\r\nwindow.onload = function() {\r\n const supportedBrowser = browserCheck();\r\n GameUI.initialized = supportedBrowser;\r\n ui.view.initialized = supportedBrowser;\r\n setTimeout(() => {\r\n ElectronRuntime.updateZoom();\r\n document.getElementById(\"loading\").style.display = \"none\";\r\n }, 500);\r\n if (!supportedBrowser) {\r\n GameIntervals.stop();\r\n document.getElementById(\"loading\").style.display = \"none\";\r\n document.getElementById(\"browser-warning\").style.display = \"flex\";\r\n }\r\n};\r\n\r\nwindow.onfocus = function() {\r\n setShiftKey(false);\r\n};\r\n\r\nwindow.onblur = function() {\r\n GameKeyboard.stopSpins();\r\n};\r\n\r\nexport function setShiftKey(isDown) {\r\n ui.view.shiftDown = isDown;\r\n}\r\n\r\nexport function setHoldingR(x) {\r\n Replicanti.galaxies.isPlayerHoldingR = x;\r\n}\r\n\r\nexport function browserCheck() {\r\n return supportedBrowsers.test(navigator.userAgent);\r\n}\r\n\r\nexport function init() {\r\n // eslint-disable-next-line no-console\r\n console.log(\"🌌 Antimatter Dimensions: Reality Update 🌌\");\r\n if (DEV) {\r\n // eslint-disable-next-line no-console\r\n console.log(\"👨‍💻 Development Mode 👩‍💻\");\r\n }\r\n ElectronRuntime.initialize();\r\n SteamRuntime.initialize();\r\n Cloud.init();\r\n GameStorage.load();\r\n Tabs.all.find(t => t.config.id === player.options.lastOpenTab).show(true);\r\n Payments.init();\r\n}\r\n\r\nwindow.tweenTime = 0;\r\nlet lastFrame;\r\nfunction animateTweens(time) {\r\n requestAnimationFrame(animateTweens);\r\n if (time === undefined || lastFrame === undefined) {\r\n lastFrame = time;\r\n return;\r\n }\r\n let delta = time - lastFrame;\r\n lastFrame = time;\r\n if (player.dilation.active) {\r\n delta /= Pelle.isDoomed ? 1.5 : 10;\r\n }\r\n tweenTime += delta;\r\n TWEEN.update(tweenTime);\r\n}\r\n\r\nanimateTweens();\r\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameSpeedDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameSpeedDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GameSpeedDisplay.vue?vue&type=template&id=1b923d2a&scoped=true&\"\nimport script from \"./GameSpeedDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./GameSpeedDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GameSpeedDisplay.vue?vue&type=style&index=0&id=1b923d2a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1b923d2a\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderTickspeedInfo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderTickspeedInfo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderTickspeedInfo.vue?vue&type=template&id=2ca59fbc&scoped=true&\"\nimport script from \"./HeaderTickspeedInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderTickspeedInfo.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2ca59fbc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-reality-button\"},[_c('button',{staticClass:\"c-reality-button infotooltip\",class:_vm.classObject,on:{\"click\":_vm.handleClick}},[_c('div',{staticClass:\"l-reality-button__contents\"},[(_vm.canReality)?[_c('div',{staticClass:\"c-reality-button__header\"},[_vm._v(\" Make a new Reality \")]),_c('div',[_vm._v(_vm._s(_vm.formatMachinesGained)+\" \"+_vm._s(_vm.formatMachineStats))]),_c('div',[_vm._v(_vm._s(_vm.formatGlyphLevel))])]:(_vm.hasRealityStudy)?[_c('div',[_vm._v(\"Get \"+_vm._s(_vm.format(\"1e4000\"))+\" Eternity Points to unlock a new Reality\")])]:[_c('div',[_vm._v(\"Purchase the study in the Eternity tab to unlock a new Reality\")])],(_vm.canReality)?_c('div',{staticClass:\"infotooltiptext\"},[_c('div',[_vm._v(\"Other resources gained:\")]),_c('div',[_vm._v(_vm._s(_vm.quantifyInt(\"Perk Point\", _vm.ppGained)))]),(_vm.shardsGained.neq(0))?_c('div',[_vm._v(\" \"+_vm._s(_vm.shardsGainedText)+\" (\"+_vm._s(_vm.format(_vm.currentShardsRate, 2))+\"/min) \"),_c('br'),_vm._v(\" Peak: \"+_vm._s(_vm.format(_vm.bestShardRate, 2))+\"/min at \"+_vm._s(_vm.format(_vm.bestShardRateVal, 2))+\" RS \")]):_vm._e(),_vm._l((_vm.celestialRunText),function(celestialInfo,i){return _c('div',{key:i},[(celestialInfo[0])?_c('span',[_vm._v(\" \"+_vm._s(celestialInfo[1])+\" \"),_c('br'),_vm._v(\" \"+_vm._s(celestialInfo[2])+\" \")]):_vm._e()])})],2):_vm._e()],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityButton.vue?vue&type=template&id=24811dee&scoped=true&\"\nimport script from \"./RealityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"24811dee\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderCenterContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderCenterContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderCenterContainer.vue?vue&type=template&id=4832cc34&scoped=true&\"\nimport script from \"./HeaderCenterContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderCenterContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderCenterContainer.vue?vue&type=style&index=0&id=4832cc34&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4832cc34\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showContainer)?_c('div',{staticClass:\"c-prestige-button-container\"},[(_vm.showEP)?_c('div',{staticClass:\"c-eternity-points\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-game-header__ep-amount\"},[_vm._v(_vm._s(_vm.format(_vm.eternityPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Eternity Point\", _vm.eternityPoints))+\". \"),(_vm.showNextEP)?_c('span',[_vm._v(\"(Next EP at \"+_vm._s(_vm.format(_vm.nextEP, 1))+\" IP)\")]):_vm._e()]):_vm._e(),_c('UnlockInfinityDimButton'),_c('EternityButton')],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('button',{staticClass:\"o-prestige-button\",class:_vm.buttonClassObject,attrs:{\"onclick\":\"eternityResetRequest()\"},on:{\"mouseover\":function($event){_vm.hover = true},\"mouseleave\":function($event){_vm.hover = false}}},[(_vm.type === -1)?[_vm._v(\" Reach \"+_vm._s(_vm.format(_vm.eternityGoal, 2, 2))+\" \"),_c('br'),_vm._v(\" Infinity Points \")]:(_vm.type === 0)?[_vm._v(\" Other times await... I need to become Eternal \")]:(_vm.type === 1)?[_vm._v(\" Eternity for \"),_c('span',{style:(_vm.amountStyle)},[_vm._v(_vm._s(_vm.format(_vm.gainedEP, 2)))]),(_vm.showEPRate)?_c('span',[_vm._v(\" EP\")]):_c('span',[_vm._v(\" Eternity \"+_vm._s(_vm.pluralize(\"Point\", _vm.gainedEP)))]),_c('br'),(_vm.showEPRate)?[_vm._v(\" Current: \"+_vm._s(_vm.format(_vm.currentEPRate, 2, 2))+\" EP/min \"),_c('br'),_vm._v(\" Peak: \"+_vm._s(_vm.format(_vm.peakEPRate, 2, 2))+\" EP/min \"),_c('br'),_vm._v(\" at \"+_vm._s(_vm.format(_vm.peakEPRateVal, 2, 2))+\" EP \")]:_vm._e()]:(_vm.type === 2 || (_vm.type === 6 && !_vm.canEternity))?[_vm._v(\" Other challenges await... I need to become Eternal \")]:(_vm.type === 3)?[_vm._v(\" Eternity for \"),_c('span',{style:(_vm.tachyonAmountStyle)},[_vm._v(_vm._s(_vm.format(_vm.gainedTachyons, 2, 1)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Tachyon Particle\", _vm.gainedTachyons))+\" \")]:(_vm.type === 4 || _vm.type === 5)?[(_vm.type === 4)?[_vm._v(\" Eternity for \"),_c('span',{style:(_vm.amountStyle)},[_vm._v(_vm._s(_vm.format(_vm.gainedEP, 2, 2)))]),_vm._v(\" EP \")]:[_vm._v(\" Eternity for \"),_c('span',{style:(_vm.tachyonAmountStyle)},[_vm._v(_vm._s(_vm.format(_vm.gainedTachyons, 2, 1)))]),_vm._v(\" TP \")],_c('br'),_vm._v(\" You should explore a bit and look at new content before clicking me! \")]:(_vm.type === 6)?[_vm._v(\" Other challenges await... \"),(_vm.fullyCompleted)?[_c('br'),_vm._v(\" (This challenge is already fully completed) \")]:[_c('br'),_vm._v(\" \"+_vm._s(_vm.quantifyInt(\"completion\", _vm.gainedCompletions))+\" on Eternity \"),(_vm.failedRestriction)?[_c('br'),_vm._v(\" \"+_vm._s(_vm.failedRestriction)+\" \")]:(_vm.hasMoreCompletions)?[_c('br'),_vm._v(\" Next goal at \"+_vm._s(_vm.format(_vm.nextGoalAt))+\" IP \")]:_vm._e()]]:_vm._e()],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityButton.vue?vue&type=template&id=df46bf10&scoped=true&\"\nimport script from \"./EternityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"df46bf10\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('button',{class:_vm.buttonClassObject,on:{\"click\":_vm.tryUnlockNextInfinityDimension}},[_vm._v(\" \"+_vm._s(_vm.text)+\" \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UnlockInfinityDimButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UnlockInfinityDimButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UnlockInfinityDimButton.vue?vue&type=template&id=e6227816&scoped=true&\"\nimport script from \"./UnlockInfinityDimButton.vue?vue&type=script&lang=js&\"\nexport * from \"./UnlockInfinityDimButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e6227816\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderEternityContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderEternityContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderEternityContainer.vue?vue&type=template&id=78a4376a&scoped=true&\"\nimport script from \"./HeaderEternityContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderEternityContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderEternityContainer.vue?vue&type=style&index=0&id=78a4376a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"78a4376a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showContainer)?_c('div',{staticClass:\"c-prestige-button-container\"},[_c('div',{staticClass:\"c-infinity-points\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-game-header__ip-amount\"},[_vm._v(_vm._s(_vm.format(_vm.infinityPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Infinity Point\", _vm.infinityPoints))+\". \"),(_vm.isTesseractUnlocked)?_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.tesseractText)}}):_vm._e()]),_c('BigCrunchButton')],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible && !_vm.tesseractAffordable)?_c('button',{staticClass:\"o-prestige-button o-infinity-button\",class:_vm.buttonClassObject,on:{\"click\":_vm.crunch,\"mouseover\":function($event){_vm.hover = true},\"mouseleave\":function($event){_vm.hover = false}}},[(!_vm.canCrunch)?[_vm._v(\" Reach \"+_vm._s(_vm.format(_vm.infinityGoal, 2, 2))+\" \"),_c('br'),_vm._v(\" antimatter \")]:(_vm.inAntimatterChallenge)?[_vm._v(\" Big Crunch to \"),_c('br'),_vm._v(\" complete the challenge \")]:[(!_vm.showIPRate)?_c('div'):_vm._e(),_c('b',[_vm._v(\" Big Crunch for \"),_c('span',{style:(_vm.amountStyle)},[_vm._v(_vm._s(_vm.format(_vm.gainedIP, 2)))]),(_vm.showIPRate)?_c('span',[_vm._v(\" IP\")]):_c('span',[_vm._v(\" Infinity \"+_vm._s(_vm.pluralize(\"Point\", _vm.gainedIP)))])]),(_vm.showIPRate)?[_c('br'),_vm._v(\" Current: \"+_vm._s(_vm.format(_vm.currentIPRate, 2))+\" IP/min \"),_c('br'),_vm._v(\" Peak: \"+_vm._s(_vm.format(_vm.peakIPRate, 2))+\" IP/min \"),_c('br'),_vm._v(\" at \"+_vm._s(_vm.format(_vm.peakIPRateVal, 2))+\" IP \")]:_c('div')]],2):(_vm.tesseractAffordable)?_c('button',{staticClass:\"o-prestige-button c-game-header__tesseract-available\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },on:{\"click\":_vm.switchToInfinity}},[_c('b',[_vm._v(\" You have enough Infinity Points to buy a Tesseract \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BigCrunchButton.vue?vue&type=template&id=2d1de0f8&scoped=true&\"\nimport script from \"./BigCrunchButton.vue?vue&type=script&lang=js&\"\nexport * from \"./BigCrunchButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d1de0f8\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderInfinityContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderInfinityContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderInfinityContainer.vue?vue&type=template&id=546e2542&scoped=true&\"\nimport script from \"./HeaderInfinityContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderInfinityContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderInfinityContainer.vue?vue&type=style&index=0&id=546e2542&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"546e2542\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderPrestigeGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HeaderPrestigeGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HeaderPrestigeGroup.vue?vue&type=template&id=05a7d691&scoped=true&\"\nimport script from \"./HeaderPrestigeGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./HeaderPrestigeGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HeaderPrestigeGroup.vue?vue&type=style&index=0&id=05a7d691&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"05a7d691\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GameHeader.vue?vue&type=template&id=6d71e8ba&scoped=true&\"\nimport script from \"./GameHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./GameHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d71e8ba\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"ticker\",staticClass:\"c-news-ticker\"},[_c('span',{ref:\"line\",staticClass:\"c-news-line c-news-ticker__line\",class:_vm.lineClass,on:{\"click\":_vm.onLineClick}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewsTicker.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewsTicker.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NewsTicker.vue?vue&type=template&id=2cdee454&\"\nimport script from \"./NewsTicker.vue?vue&type=script&lang=js&\"\nexport * from \"./NewsTicker.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{staticClass:\"c-subtab-button-container\"},_vm._l((_vm.subtabs),function(subtab,i){return _c('ClassicSubtabButton',{key:i,attrs:{\"subtab\":subtab,\"parent-name\":_vm.tab.name}})}),1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isAvailable)?_c('button',{class:_vm.classObject,on:{\"click\":function($event){return _vm.subtab.show(true)}}},[_vm._v(\" \"+_vm._s(_vm.tabName)+\" \"),(_vm.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicSubtabButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicSubtabButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicSubtabButton.vue?vue&type=template&id=02221b25&scoped=true&\"\nimport script from \"./ClassicSubtabButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicSubtabButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicSubtabButton.vue?vue&type=style&index=0&id=02221b25&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"02221b25\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicSubtabBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicSubtabBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicSubtabBar.vue?vue&type=template&id=b242ebf6&scoped=true&\"\nimport script from \"./ClassicSubtabBar.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicSubtabBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b242ebf6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.tabs),function(tab,i){return _c('ClassicTabButton',{key:i,attrs:{\"tab-position\":i,\"tab\":tab}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isAvailable)?_c('button',{staticClass:\"o-tab-btn\",class:[_vm.tab.config.UIClass,\n { 'o-tab-btn--active': _vm.isCurrentTab }],on:{\"click\":function($event){return _vm.tab.show(true)}}},[_vm._v(\" \"+_vm._s(_vm.tabName)+\" \"),(_vm.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTabButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTabButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicTabButton.vue?vue&type=template&id=48d1e610&scoped=true&\"\nimport script from \"./ClassicTabButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicTabButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicTabButton.vue?vue&type=style&index=0&id=48d1e610&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"48d1e610\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTabBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTabBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicTabBar.vue?vue&type=template&id=44724e19&scoped=true&\"\nimport script from \"./ClassicTabBar.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicTabBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"44724e19\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-eternity-tab__header\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-eternity-tab__eternity-points\"},[_vm._v(_vm._s(_vm.format(_vm.eternityPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Eternity Point\", _vm.eternityPoints))+\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityPointsHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityPointsHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityPointsHeader.vue?vue&type=template&id=30258bd0&scoped=true&\"\nimport script from \"./EternityPointsHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityPointsHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"30258bd0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isVisible),expression:\"isVisible\"}],staticClass:\"c-infinity-tab__header\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-infinity-tab__infinity-points\"},[_vm._v(_vm._s(_vm.format(_vm.infinityPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Infinity Point\", _vm.infinityPoints))+\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityPointsHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityPointsHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityPointsHeader.vue?vue&type=template&id=07f4803c&scoped=true&\"\nimport script from \"./InfinityPointsHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityPointsHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"07f4803c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicUi.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicUi.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicUi.vue?vue&type=template&id=26607020&scoped=true&\"\nimport script from \"./ClassicUi.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicUi.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicUi.vue?vue&type=style&index=0&id=26607020&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"26607020\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-game-ui--fixed\",attrs:{\"id\":\"ui-fixed\"}},[_c('div',{staticClass:\"l-notification-container\",attrs:{\"id\":\"notification-container\"}}),_c('HowToPlay',{style:(_vm.hideIfMatoFullscreen)}),(_vm.view.subtab === 'studies')?_c('TimeTheoremShop',{staticClass:\"l-time-studies-tab__tt-shop\"}):_vm._e(),(_vm.view.UIType == \"Modern\" && _vm.view.theme !== 'S12')?_c('ModernSidebar',{style:(_vm.hideIfMatoFullscreen)}):_vm._e(),_c('SaveTimer',{style:(_vm.hideIfMatoFullscreen)}),_c('SpeedrunStatus',{style:(_vm.hideIfMatoFullscreen)}),(_vm.view.theme !== 'S12')?[(_vm.view.modal.progressBar)?_c('ModalProgressBar'):(_vm.view.quotes.current)?_c('CelestialQuoteModal',{attrs:{\"quote\":_vm.view.quotes.current}}):(_vm.view.quotes.history)?_c('CelestialQuoteHistoryDisplay',{attrs:{\"quotes\":_vm.view.quotes.history}}):(_vm.view.modal.current)?_c('PopupModal',{attrs:{\"modal\":_vm.view.modal.current}}):_vm._e(),(_vm.view.modal.progressBar)?_c('ModalProgressBar'):_vm._e(),(_vm.ending)?_c('FadeAway'):_vm._e(),(_vm.ending)?_c('CreditsContainer'):_vm._e(),(_vm.ending)?_c('NewGame'):_vm._e(),_c('SpectateGame')]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-modal-overlay c-modal-overlay\"},[_c('i',{staticClass:\"c-modal-celestial-quote-history__close fas fa-circle-xmark o-light-button\",on:{\"click\":_vm.close}}),_c('div',{staticClass:\"c-quote-history-modal__clickable-background\",on:{\"click\":_vm.close}}),_vm._l((_vm.unlockedQuotes),function(quote,quoteId){return _c('div',{key:quoteId,on:{\"click\":function($event){_vm.focusedQuoteId = quoteId}}},_vm._l((quote.quote.config.lines),function(_,lineId){return _c('div',{key:lineId,on:{\"click\":function($event){quote.currentLine = lineId}}},[_c('CelestialQuoteLine',{staticClass:\"c-quote-overlay\",class:{ 'c-quote-overlay--background': !_vm.isFocused(quoteId, lineId) },style:(_vm.quoteStyle(quoteId, lineId)),attrs:{\"quote\":quote.quote,\"current-line\":lineId,\"primary\":\"\"}})],1)}),0)}),_c('div',{staticClass:\"c-quote-history-modal__controls\"},[_c('i',{class:_vm.upClass,on:{\"click\":_vm.progressUp}}),_c('i',{class:_vm.downClass,on:{\"click\":_vm.progressDown}}),_c('i',{class:_vm.leftClass,on:{\"click\":_vm.progressLeft}}),_c('i',{class:_vm.rightClass,on:{\"click\":_vm.progressRight}})])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('CelestialQuoteBackground',{attrs:{\"celestial-symbols\":_vm.celestialSymbols,\"celestials\":_vm.celestials,\"primary\":_vm.primary}},[(_vm.line.showCelestialName)?_c('span',{staticClass:\"c-modal-celestial-name\"},[_vm._v(\" \"+_vm._s(_vm.celestialName)+\" \")]):_vm._e(),_c('i',{class:_vm.leftClass,on:{\"click\":function($event){return _vm.$emit('progress-in', 'left')}}}),_c('span',{staticClass:\"l-modal-celestial-quote__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]),_c('i',{class:_vm.rightClass,on:{\"click\":function($event){return _vm.$emit('progress-in', 'right')}}}),(_vm.closeVisible)?_c('i',{staticClass:\"c-modal-celestial-quote__end fas fa-check-circle\",on:{\"click\":_vm.emitClose}}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.modalClass},[_vm._l((_vm.celestials),function(celestial,index){return _c('span',{key:index,staticClass:\"c-modal-celestial-quote c-modal-celestial-quote__symbol\",style:(_vm.styleObject(celestial, 0.2, true)),domProps:{\"innerHTML\":_vm._s(_vm.celestialSymbols[index])}})}),_vm._l((_vm.celestials),function(celestial,index){return _c('span',{key:index + 10,staticClass:\"c-modal-celestial-quote c-modal-celestial-quote__shadow\",style:(_vm.styleObject(celestial, 1, false))})}),_vm._l((_vm.celestials),function(celestial,index){return _c('span',{key:index + 20,staticClass:\"c-modal-celestial-quote c-modal-celestial-quote__text\",style:(_vm.styleObject(celestial, 1, true))},[_vm._t(\"default\")],2)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteBackground.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteBackground.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialQuoteBackground.vue?vue&type=template&id=3f7bcfc0&scoped=true&\"\nimport script from \"./CelestialQuoteBackground.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialQuoteBackground.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CelestialQuoteBackground.vue?vue&type=style&index=0&id=3f7bcfc0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3f7bcfc0\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteLine.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteLine.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialQuoteLine.vue?vue&type=template&id=7e428c16&scoped=true&\"\nimport script from \"./CelestialQuoteLine.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialQuoteLine.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CelestialQuoteLine.vue?vue&type=style&index=0&id=7e428c16&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7e428c16\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteHistoryDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteHistoryDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialQuoteHistoryDisplay.vue?vue&type=template&id=198b74ab&scoped=true&\"\nimport script from \"./CelestialQuoteHistoryDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialQuoteHistoryDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CelestialQuoteHistoryDisplay.vue?vue&type=style&index=0&id=198b74ab&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"198b74ab\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-modal-overlay c-modal-overlay\"},[_c('CelestialQuoteLineBasicInteractable',{staticClass:\"c-quote-overlay\",attrs:{\"quote\":_vm.quote}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('CelestialQuoteLine',{attrs:{\"quote\":_vm.quote,\"current-line\":_vm.currentLine,\"left-visible\":!_vm.isQuoteStart && _vm.leftVisible,\"right-visible\":!_vm.isQuoteEnd && _vm.rightVisible,\"close-visible\":_vm.isQuoteEnd && _vm.closeVisible,\"primary\":\"\"},on:{\"close\":_vm.close,\"progress-in\":_vm.progressIn}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteLineBasicInteractable.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteLineBasicInteractable.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialQuoteLineBasicInteractable.vue?vue&type=template&id=4cdf5924&\"\nimport script from \"./CelestialQuoteLineBasicInteractable.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialQuoteLineBasicInteractable.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialQuoteModal.vue?vue&type=template&id=4e0361e1&scoped=true&\"\nimport script from \"./CelestialQuoteModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialQuoteModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CelestialQuoteModal.vue?vue&type=style&index=0&id=4e0361e1&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4e0361e1\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-credits-container\",style:(_vm.creditStyles)},[_c('i',{staticClass:\"c-mute-button fa-solid\",class:_vm.muteIconClass,style:(_vm.muteStyle),on:{\"click\":function($event){_vm.isMuted = !_vm.isMuted}}}),_vm._l((_vm.celestialDisplays),function(celSymbol,celIndex){return _c('div',{key:celIndex + '-end-credit-symbol-disp',staticClass:\"c-credits-cel-symbol\",class:(\"c-\" + celIndex + \"-credits\"),domProps:{\"innerHTML\":_vm._s(celSymbol)}})}),_c('CreditsDisplay')],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:{ 'c-credits-s12-end': _vm.isS12EndDisplay }},[(!_vm.isModal)?_c('h1',{staticClass:\"c-credits-header\"},[_vm._v(\" Antimatter Dimensions \")]):_vm._e(),_vm._l((_vm.roles.count),function(role){return _c('div',{key:role},[_c('h2',{staticClass:\"c-credits-section\"},[_vm._v(\" \"+_vm._s(_vm.pluralize(_vm.roles[role], _vm.relevantPeople(role).length))+\" \")]),_c('div',{class:{ 'l-credits--bulk': _vm.relevantPeople(role).length > 10}},_vm._l((_vm.relevantPeople(role)),function(person){return _c('div',{key:person.name,staticClass:\"c-credit-entry\"},[_vm._v(\" \"+_vm._s(person.name)+\" \"),(person.name2)?_c('span',[_vm._v(\" (\"+_vm._s(person.name2)+\") \")]):_vm._e()])}),0)])}),_c('br'),_c('br'),_c('br'),_c('br'),_c('br'),_c('br'),_c('br'),_c('br'),_c('br'),_c('h1',{staticClass:\"c-credits-header\"},[_vm._v(\" Thank you so much for playing! \")])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CreditsDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CreditsDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CreditsDisplay.vue?vue&type=template&id=5f15ce42&scoped=true&\"\nimport script from \"./CreditsDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./CreditsDisplay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CreditsDisplay.vue?vue&type=style&index=0&id=5f15ce42&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5f15ce42\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CreditsContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CreditsContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CreditsContainer.vue?vue&type=template&id=7244bf67&scoped=true&\"\nimport script from \"./CreditsContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./CreditsContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CreditsContainer.vue?vue&type=style&index=0&id=7244bf67&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7244bf67\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-background-overlay\",style:({\n opacity: _vm.opacity,\n pointerEvents: _vm.opacity > 1 ? 'auto' : 'none'\n })})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FadeAway.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./FadeAway.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FadeAway.vue?vue&type=template&id=0b58eaaa&scoped=true&\"\nimport script from \"./FadeAway.vue?vue&type=script&lang=js&\"\nexport * from \"./FadeAway.vue?vue&type=script&lang=js&\"\nimport style0 from \"./FadeAway.vue?vue&type=style&index=0&id=0b58eaaa&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b58eaaa\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{class:_vm.h2pClassObject,style:(_vm.topMargin),on:{\"click\":_vm.showH2P}},[_vm._v(\" ? \"),(_vm.hasTutorial)?_c('div',{staticClass:\"h2p-tooltip\"},[_vm._v(\" Click for info \")]):_vm._e()]),(_vm.hasTutorial)?_c('div',{staticClass:\"h2p-tutorial--glow\",style:(_vm.topMargin)}):_vm._e(),_c('div',{staticClass:\"o-tab-btn l-information l-help-me\",on:{\"click\":_vm.showInfo}},[_vm._v(\" i \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HowToPlay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HowToPlay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HowToPlay.vue?vue&type=template&id=5bb5f9a0&scoped=true&\"\nimport script from \"./HowToPlay.vue?vue&type=script&lang=js&\"\nexport * from \"./HowToPlay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HowToPlay.vue?vue&type=style&index=0&id=5bb5f9a0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5bb5f9a0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-modal-overlay c-modal-overlay progress-bar-modal\"},[_c('div',{staticClass:\"c-modal\"},[_c('div',{staticClass:\"modal-progress-bar\"},[_c('div',{staticClass:\"modal-progress-bar__label\"},[_vm._v(\" \"+_vm._s(_vm.progress.label)+\" \")]),_c('div',[_vm._v(\" \"+_vm._s(_vm.progress.info)+\" \")]),_c('div',{staticClass:\"modal-progress-bar__margin\"},[_c('div',[_vm._v(\" \"+_vm._s(_vm.progress.progressName)+\": \"+_vm._s(_vm.formatInt(_vm.progress.current))+\"/\"+_vm._s(_vm.formatInt(_vm.progress.max))+\" \")]),_c('div',[_vm._v(\" Remaining: \"+_vm._s(_vm.remainingTime)+\" \")]),_c('div',{staticClass:\"modal-progress-bar__hbox\"},[_c('div',{staticClass:\"modal-progress-bar__bg\"},[_c('div',{staticClass:\"modal-progress-bar__fg\",style:(_vm.foregroundStyle)})])])]),_c('div',{staticClass:\"modal-progress-bar__buttons\"},_vm._l((_vm.buttons),function(button,id){return _c('OfflineSpeedupButton',{key:id,attrs:{\"button\":button,\"progress\":_vm.progress}})}),1)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('PrimaryButton',{class:_vm.buttonClass,on:{\"click\":_vm.buttonClicked}},[_vm._v(\" \"+_vm._s(_vm.button.text)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OfflineSpeedupButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OfflineSpeedupButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OfflineSpeedupButton.vue?vue&type=template&id=6c127258&\"\nimport script from \"./OfflineSpeedupButton.vue?vue&type=script&lang=js&\"\nexport * from \"./OfflineSpeedupButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalProgressBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalProgressBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalProgressBar.vue?vue&type=template&id=699111cc&scoped=true&\"\nimport script from \"./ModalProgressBar.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalProgressBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModalProgressBar.vue?vue&type=style&index=0&id=699111cc&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"699111cc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isHidden)?_c('div',{staticClass:\"c-modern-sidebar\"},[_c('ModernSidebarCurrency'),_vm._l((_vm.tabs),function(tab,tabPosition){return [(_vm.tabVisibilities[tabPosition])?_c('ModernTabButton',{key:tab.name,attrs:{\"tab\":tab,\"tab-position\":tabPosition}}):_vm._e()]})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-sidebar-resource\"},[(_vm.showMvR)?[_c('h2',{staticClass:\"o-sidebar-currency--mending\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.MvR, 2))+\" \")]),_c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(_vm._s(_vm.pluralize(\"Multiversal Remain\", _vm.MvR)))])])]:(_vm.showRS)?[_c('h2',{staticClass:\"o-sidebar-currency--pelle\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.RS, 2))+\" \")]),_c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(_vm._s(_vm.pluralize(\"Reality Shard\", _vm.RS)))])])]:(_vm.showRM)?[(_vm.IM === 0)?[_c('h2',{staticClass:\"o-sidebar-currency--reality\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.RM, 2))+\" \")]),_c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(_vm._s(_vm.pluralize(\"Reality Machine\", _vm.RM)))])])]:[_c('h3',{staticClass:\"o-sidebar-currency--reality\"},[_vm._v(\" \"+_vm._s(_vm.machineStr)+\" \")]),_vm._m(0)]]:(_vm.showEP)?[_c('h2',{staticClass:\"o-sidebar-currency--eternity\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.EP, 2))+\" \")]),_c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(_vm._s(_vm.pluralize(\"Eternity Point\", _vm.EP)))])])]:(_vm.showIP)?[_c('h2',{staticClass:\"o-sidebar-currency--infinity\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.IP, 2))+\" \")]),_c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(_vm._s(_vm.pluralize(\"Infinity Point\", _vm.IP)))])])]:[_c('h2',{staticClass:\"o-sidebar-currency--antimatter\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.AM, 2, 1))+\" \")]),_vm._m(1)]],2)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(\"Machines\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-sidebar-resource__information\"},[_c('span',{staticClass:\"c-sidebar-resource__name\"},[_vm._v(\"Antimatter\")])])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernSidebarCurrency.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernSidebarCurrency.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernSidebarCurrency.vue?vue&type=template&id=bed69948&scoped=true&\"\nimport script from \"./ModernSidebarCurrency.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernSidebarCurrency.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bed69948\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isHidden && _vm.isAvailable)?_c('div',{class:[_vm.classObject, _vm.tab.config.UIClass]},[_c('div',{staticClass:\"l-tab-btn-inner\",on:{\"click\":function($event){return _vm.tab.show(true)}}},[_vm._v(\" \"+_vm._s(_vm.tabName)+\" \"),(_vm.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]),(_vm.showSubtabs)?_c('div',{staticClass:\"subtabs\"},[_vm._l((_vm.tab.subtabs),function(subtab,index){return [(_vm.subtabVisibilities[index])?_c('div',{key:index,staticClass:\"o-tab-btn o-tab-btn--subtab\",class:[_vm.tab.config.UIClass,\n {'o-subtab-btn--active': _vm.isCurrentSubtab(subtab.id)}],on:{\"click\":function($event){return subtab.show(true)}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(subtab.symbol)}}),(subtab.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e(),_c('div',{staticClass:\"o-subtab__tooltip\"},[_vm._v(\" \"+_vm._s(subtab.name)+\" \")])]):_vm._e()]})],2):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernTabButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernTabButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernTabButton.vue?vue&type=template&id=63b22e24&scoped=true&\"\nimport script from \"./ModernTabButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernTabButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernTabButton.vue?vue&type=style&index=0&id=63b22e24&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"63b22e24\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernSidebar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernSidebar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernSidebar.vue?vue&type=template&id=3833c36e&scoped=true&\"\nimport script from \"./ModernSidebar.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernSidebar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3833c36e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-new-game-container\",style:(_vm.style)},[_c('h2',[_vm._v(\" ...I have won, but at what cost. Surely there has to be another way... \")]),_c('h3',[_vm._v(\"Reset the entire game (including best Challenge Times and Best AM), but keep Automator Scripts, Secret Themes, Achievements, and Options.\")]),_c('div',{staticClass:\"c-new-game-button-container\"},[_c('button',{staticClass:\"c-new-game-button\",on:{\"click\":_vm.startNewGame}},[_vm._v(\" Mend the Multiverse \")])]),_c('br'),(_vm.hasMoreCosmetics)?_c('h3',[_vm._v(\" Since Royal is feeling generous today, you also unlock a new cosmetic set of your choice for Glyphs. These are freely modifiable once you reach Reality again, but are purely visual and offer no gameplay bonuses. \"),_c('br'),_c('button',{staticClass:\"c-new-game-button\",on:{\"click\":_vm.openSelectionModal}},[_vm._v(\" Choose Cosmetic Set \")]),_c('br'),_c('br'),_vm._v(\" Selected Set: \"+_vm._s(_vm.selectedSetName)+\" \")]):_c('h3',[_vm._v(\" You have unlocked all Glyph cosmetic sets! \")]),_c('br'),_c('h3',[_vm._v(\" This screen is temporary until the fancy graphics are done. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewGame.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewGame.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NewGame.vue?vue&type=template&id=0fe0fd40&scoped=true&\"\nimport script from \"./NewGame.vue?vue&type=script&lang=js&\"\nexport * from \"./NewGame.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NewGame.vue?vue&type=style&index=0&id=0fe0fd40&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0fe0fd40\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showModal)?_c('div',{ref:\"modal\",staticClass:\"c-modal l-modal\",style:(_vm.positionStyle)},[_c(_vm.modal.component,_vm._b({tag:\"component\",on:{\"close\":_vm.hide}},'component',_vm.modal.props,false))],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PopupModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PopupModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PopupModal.vue?vue&type=template&id=7fad14ae&\"\nimport script from \"./PopupModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PopupModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showTimeSinceSave)?_c('div',{staticClass:\"o-save-timer\",on:{\"click\":_vm.save}},[(_vm.saveDisabled)?_c('b',[_vm._v(\"There is nothing left to save...Or is there?\")]):_c('span',[_vm._v(\"Time since last save: \"+_vm._s(_vm.timeString))])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveTimer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveTimer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SaveTimer.vue?vue&type=template&id=4038e6d6&scoped=true&\"\nimport script from \"./SaveTimer.vue?vue&type=script&lang=js&\"\nexport * from \"./SaveTimer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SaveTimer.vue?vue&type=style&index=0&id=4038e6d6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4038e6d6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showSpectate)?_c('div',{key:_vm.endState},[_c('PrimaryButton',{staticClass:\"c-swap-button o-primary-btn--modal-close c-modal__close-btn tutorial--glow\",on:{\"click\":_vm.swap}},[_c('i',{staticClass:\"fas fa-sync\"})])],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpectateGame.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpectateGame.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpectateGame.vue?vue&type=template&id=21f229d4&scoped=true&\"\nimport script from \"./SpectateGame.vue?vue&type=script&lang=js&\"\nexport * from \"./SpectateGame.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SpectateGame.vue?vue&type=style&index=0&id=21f229d4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"21f229d4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isActive)?_c('div',{staticClass:\"c-speedrun-status\"},[(!_vm.isCollapsed)?_c('div',[_c('b',[_vm._v(\"Speedrun Status (\"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.statusText)}}),_vm._v(\")\")]),_c('br'),_c('span',{class:{ 'c-speedrun-status--can-change': !_vm.hasStarted },on:{\"click\":_vm.changeName}},[_vm._v(\" Player Name: \"+_vm._s(_vm.saveName)+\" \")]),_c('br'),_c('i',[_vm._v(_vm._s(_vm.segmentText))]),_c('br'),_c('i',[_vm._v(_vm._s(_vm.iapText))]),_c('br'),_c('span',{class:{ 'c-speedrun-status--can-change': _vm.canModifySeed },on:{\"click\":function($event){return _vm.openSeedModal()}}},[_vm._v(_vm._s(_vm.seedText))]),_c('br'),_vm._v(\" Total real playtime since start: \"+_vm._s(_vm.timePlayedStr)+\" \"),_c('br'),_vm._v(\" Offline Progress: \"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.offlineText)}}),_c('br'),_vm._v(\" Most Recent Milestone: \"+_vm._s(_vm.milestoneName(_vm.mostRecent))+\" \"),(_vm.mostRecent)?_c('span',[_vm._v(\"(\"+_vm._s(_vm.timeSince)+\" ago)\")]):_vm._e(),_c('br')]):_vm._e(),_c('div',{staticClass:\"c-speedrun-status--collapse\",on:{\"click\":_vm.toggleCollapse}},[_c('i',{class:_vm.collapseIcon}),_vm._v(\" \"+_vm._s(_vm.collapseText())+\" \"),_c('i',{class:_vm.collapseIcon})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunStatus.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedrunStatus.vue?vue&type=template&id=5faa7a14&scoped=true&\"\nimport script from \"./SpeedrunStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedrunStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SpeedrunStatus.vue?vue&type=style&index=0&id=5faa7a14&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5faa7a14\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"time-theorem-buttons\"},[_c('div',{staticClass:\"ttshop-container ttshop-background\"},[_c('div',{staticClass:\"ttbuttons-row ttbuttons-top-row\",attrs:{\"data-role\":\"page\"}},[_vm._m(0),_c('p',{staticClass:\"timetheorems\"},[_c('span',{staticClass:\"c-tt-amount\"},[_vm._v(\" \"+_vm._s(_vm.quantify(\"Time Theorem\", _vm.theoremAmount, 2, 0, _vm.formatTimeTheoremType))+\" \")]),(_vm.showST)?_c('span',[_c('br'),_vm._v(\" \"+_vm._s(_vm.quantifyInt(\"Space Theorem\", _vm.STamount))+\" \")]):_vm._e()]),_c('div',{staticClass:\"l-load-tree-area\"},[_c('div',{staticClass:\"l-tree-load-button-wrapper\"},[_c('span',{staticClass:\"c-ttshop__save-load-text\"},[_vm._v(_vm._s(_vm.saveLoadText))]),_vm._l((6),function(saveslot){return _c('TimeStudySaveLoadButton',{key:saveslot,attrs:{\"saveslot\":saveslot}})})],2),_c('div',{staticClass:\"tt-gen-container\"},[(_vm.hasTTGen)?_c('span',{staticClass:\"checkbox-margin\",attrs:{\"ach-tooltip\":\"This shows TT generation by default and total TT if you hold shift.\\n Check this box to swap this behavior.\"}},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.invertTTgenDisplay),expression:\"invertTTgenDisplay\"}],staticClass:\"o-clickable\",attrs:{\"type\":\"checkbox\"},domProps:{\"value\":_vm.invertTTgenDisplay,\"checked\":Array.isArray(_vm.invertTTgenDisplay)?_vm._i(_vm.invertTTgenDisplay,_vm.invertTTgenDisplay)>-1:(_vm.invertTTgenDisplay)},on:{\"input\":function($event){return _vm.toggleTTgen()},\"change\":function($event){var $$a=_vm.invertTTgenDisplay,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=_vm.invertTTgenDisplay,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.invertTTgenDisplay=$$a.concat([$$v]))}else{$$i>-1&&(_vm.invertTTgenDisplay=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.invertTTgenDisplay=$$c}}}})]):_vm._e(),(_vm.showTTGen)?_c('span',[_vm._v(\" You are gaining \"+_vm._s(_vm.TTgenRateText)+\". \")]):_c('span',[_vm._v(\" You have \"+_vm._s(_vm.totalTimeTheoremText)+\". \")])])])]),(!_vm.minimized)?_c('div',{staticClass:\"ttbuttons-row\",style:(_vm.shopBottomRowHeightStyle)},[_c('TimeTheoremBuyButton',{attrs:{\"budget\":_vm.budget.am,\"cost\":_vm.costs.am,\"format-cost\":_vm.formatAM,\"action\":_vm.buyWithAM}}),_c('TimeTheoremBuyButton',{attrs:{\"budget\":_vm.budget.ip,\"cost\":_vm.costs.ip,\"format-cost\":_vm.formatIP,\"action\":_vm.buyWithIP}}),_c('TimeTheoremBuyButton',{attrs:{\"budget\":_vm.budget.ep,\"cost\":_vm.costs.ep,\"format-cost\":_vm.formatEP,\"action\":_vm.buyWithEP}}),_c('div',{staticClass:\"l-tt-buy-max-vbox\"},[(!_vm.minimized)?_c('button',{staticClass:\"o-tt-top-row-button c-tt-buy-button c-tt-buy-button--unlocked\",on:{\"click\":_vm.buyMaxTheorems}},[_vm._v(\" Buy max \")]):_vm._e(),(!_vm.minimized && _vm.hasTTAutobuyer)?_c('PrimaryToggleButton',{staticClass:\"o-tt-autobuyer-button c-tt-buy-button c-tt-buy-button--unlocked\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)],1):_c('div',{staticClass:\"ttbuttons-row ttbuttons-bottom-row-hide\"})]),(_vm.minimizeAvailable)?_c('button',{staticClass:\"ttshop-minimize-btn ttshop-background\",on:{\"click\":_vm.minimize}},[_c('span',{staticClass:\"minimize-arrow\",style:(_vm.minimizeArrowStyle)},[_vm._v(\"▼\")])]):_vm._e()])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"l-tt-save-load-btn c-tt-buy-button c-tt-buy-button--unlocked\",attrs:{\"onClick\":\"Modal.preferredTree.show()\"}},[_c('i',{staticClass:\"fas fa-cog\"})])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('HoverMenu',{staticClass:\"l-tt-save-load-btn__wrapper\",scopedSlots:_vm._u([{key:\"object\",fn:function(){return [_c('button',{staticClass:\"l-tt-save-load-btn c-tt-buy-button c-tt-buy-button--unlocked\",on:{\"click\":[function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.save.apply(null, arguments)},function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.load.apply(null, arguments)}]}},[_vm._v(\" \"+_vm._s(_vm.displayName)+\" \")])]},proxy:true},{key:\"menu\",fn:function(){return [_c('div',{staticClass:\"l-tt-save-load-btn__menu c-tt-save-load-btn__menu\"},[_c('span',{attrs:{\"ach-tooltip\":\"Set a custom name (up to 4 ASCII characters)\"}},[_c('input',{staticClass:\"l-tt-save-load-btn__menu-rename c-tt-save-load-btn__menu-rename\",attrs:{\"type\":\"text\",\"size\":\"4\",\"maxlength\":\"4\"},domProps:{\"value\":_vm.name},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.hideContextMenu.apply(null, arguments)},\"blur\":_vm.nicknameBlur}})]),_c('div',{staticClass:\"l-tt-save-load-btn__menu-item c-tt-save-load-btn__menu-item\",on:{\"click\":_vm.edit}},[_vm._v(\" Edit \")]),_c('div',{staticClass:\"l-tt-save-load-btn__menu-item c-tt-save-load-btn__menu-item\",on:{\"click\":_vm.handleExport}},[_vm._v(\" Export \")]),_c('div',{staticClass:\"l-tt-save-load-btn__menu-item c-tt-save-load-btn__menu-item\",on:{\"click\":_vm.save}},[_vm._v(\" Save \")]),_c('div',{staticClass:\"l-tt-save-load-btn__menu-item\"},[_c('div',{staticClass:\"c-tt-save-load-btn__menu-item\",on:{\"click\":_vm.load}},[_vm._v(\" Load \")]),_c('div',{staticClass:\"c-tt-save-load-btn__menu-item__hover-options\"},[_c('div',{class:{\n 'c-tt-save-load-btn__menu-item__hover-option': true,\n 'c-tt-save-load-btn__menu-item__hover-option--disabled': !_vm.canEternity,\n },on:{\"click\":_vm.respecAndLoad}},[_vm._v(\" Respec and Load \")])])]),_c('div',{staticClass:\"l-tt-save-load-btn__menu-item c-tt-save-load-btn__menu-item\",on:{\"click\":_vm.deletePreset}},[_vm._v(\" Delete \")])])]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._g({staticClass:\"hover-menu__wrapper\",on:{\"contextmenu\":function($event){$event.preventDefault();return _vm.toggleContextMenu.apply(null, arguments)}}},_vm.listeners),[_vm._t(\"object\"),(_vm.contextMenuIsVisible)?_vm._t(\"menu\"):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HoverMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HoverMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HoverMenu.vue?vue&type=template&id=0f008cfb&scoped=true&\"\nimport script from \"./HoverMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./HoverMenu.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HoverMenu.vue?vue&type=style&index=0&id=0f008cfb&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0f008cfb\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudySaveLoadButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudySaveLoadButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeStudySaveLoadButton.vue?vue&type=template&id=b401e76c&scoped=true&\"\nimport script from \"./TimeStudySaveLoadButton.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeStudySaveLoadButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TimeStudySaveLoadButton.vue?vue&type=style&index=0&id=b401e76c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b401e76c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"l-tt-buy-button c-tt-buy-button\",class:_vm.enabledClass,on:{\"click\":_vm.action}},[_vm._v(\" \"+_vm._s(_vm.isLocked ? \"Requires an Eternity to unlock\" : _vm.formatCost(_vm.cost))+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeTheoremBuyButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeTheoremBuyButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeTheoremBuyButton.vue?vue&type=template&id=2b3ed948&\"\nimport script from \"./TimeTheoremBuyButton.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeTheoremBuyButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeTheoremShop.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeTheoremShop.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeTheoremShop.vue?vue&type=template&id=46d9db85&scoped=true&\"\nimport script from \"./TimeTheoremShop.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeTheoremShop.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TimeTheoremShop.vue?vue&type=style&index=0&id=46d9db85&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"46d9db85\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameUiComponentFixed.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameUiComponentFixed.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GameUiComponentFixed.vue?vue&type=template&id=0ae8982e&scoped=true&\"\nimport script from \"./GameUiComponentFixed.vue?vue&type=script&lang=js&\"\nexport * from \"./GameUiComponentFixed.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GameUiComponentFixed.vue?vue&type=style&index=0&id=0ae8982e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0ae8982e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"page\"}},[_c('link',{attrs:{\"rel\":\"stylesheet\",\"type\":\"text/css\",\"href\":\"stylesheets/modern-styles.css\"}}),_c('div',{key:_vm.newGameKey,staticClass:\"game-container\",style:(_vm.topMargin)},[(_vm.news)?_c('NewsTicker'):_vm._e(),(_vm.hasMendingButton)?_c('div',{staticClass:\"c-mending-points\"},[_c('MendingPointsHeader'),_c('MendingButton')],1):_vm._e(),_c('BigCrunchButton'),(!_vm.bigCrunch)?_c('div',{staticClass:\"tab-container\"},[_c('HeaderPrestigeGroup'),_c('div',{staticClass:\"information-header\"},[_c('HeaderChallengeDisplay'),_c('HeaderChallengeEffects'),(_vm.hasReality)?_c('GameSpeedDisplay'):_vm._e(),(_vm.hasReality)?_c('br'):_vm._e(),_c('HeaderBlackHole')],1),_vm._t(\"default\")],2):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernUi.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernUi.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernUi.vue?vue&type=template&id=5d0773f0&scoped=true&\"\nimport script from \"./ModernUi.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernUi.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernUi.vue?vue&type=style&index=0&id=5d0773f0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5d0773f0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{key:_vm.newGameKey,staticClass:\"container c-classic l-Classic\",attrs:{\"id\":\"container\"}},[_c('link',{attrs:{\"rel\":\"stylesheet\",\"type\":\"text/css\",\"href\":\"stylesheets/synergism.css\"}}),_c('BigCrunchButton'),(!_vm.bigCrunch)?[(_vm.hasMendingButton)?_c('div',{staticClass:\"c-mending-points\"},[_c('MendingPointsHeader'),_c('MendingButton')],1):_vm._e(),_c('SynergismGameHeader'),_c('SynergismTabBar'),(_vm.tab.config.before)?_c(_vm.tab.config.before,{tag:\"component\"}):_vm._e(),_c('SynergismSubtabBar'),_c('div',{staticClass:\"l-classic__page\"},[_vm._t(\"default\")],2)]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('HeaderChallengeDisplay'),_c('HeaderChallengeEffects'),_c('HeaderPrestigeGroup'),(_vm.hasReality)?_c('GameSpeedDisplay'):_vm._e(),(_vm.hasReality)?_c('br'):_vm._e(),_c('HeaderBlackHole')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-prestige-info-blocks\"},[_c('HeaderEternityContainer',{staticClass:\"l-game-header__eternity\"}),_c('HeaderCenterContainer',{staticClass:\"l-game-header__center\"}),_c('HeaderInfinityContainer',{staticClass:\"l-game-header__infinity\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.shouldDisplay)?_c('div',{staticClass:\"c-prestige-button-container\"},[_c('span',[_vm._v(\"You have \"),_c('span',{staticClass:\"c-game-header__antimatter\"},[_vm._v(_vm._s(_vm.format(_vm.antimatter, 2, 1)))]),_vm._v(\" antimatter.\")]),(_vm.hasRealityButton)?_c('div',{staticClass:\"c-reality-container\"},[_c('RealityCurrencyHeader'),(_vm.isDoomed)?_c('ArmageddonButton',{attrs:{\"is-header\":true}}):_vm._e()],1):_c('div',[_c('br'),_c('HeaderTickspeedInfo')],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('button',{staticClass:\"c-mending-button\",class:_vm.buttonClassObject,on:{\"click\":_vm.mend}},[(_vm.firstMend)?[_vm._v(\" There is another way... You need to Mend the Multiverse. \")]:(_vm.needDoom)?[_vm._v(\" Reach \"),_c('span',[_vm._v(_vm._s(_vm.formatNE(_vm.END, 2, 2)))]),_vm._v(\" antimatter in a Doomed Reality to Mend the Multiverse \")]:(!_vm.canMend)?[_vm._v(\" Reach \"),_c('span',[_vm._v(_vm._s(_vm.formatNE(_vm.END, 2, 2)))]),_vm._v(\" antimatter to Mend the Multiverse \")]:[_vm._v(\" Mend the Multiverse for \"),_c('span',[_vm._v(_vm._s(_vm.formatNE(_vm.gainedMvR, 2)))]),_vm._v(\" Multiversal \"+_vm._s(_vm.pluralize(\"Remain\", _vm.gainedMvR))+\" \")]],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingButton.vue?vue&type=template&id=1185f4a5&\"\nimport script from \"./MendingButton.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismHeaderCenterContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismHeaderCenterContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismHeaderCenterContainer.vue?vue&type=template&id=599f99ca&scoped=true&\"\nimport script from \"./SynergismHeaderCenterContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismHeaderCenterContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismHeaderCenterContainer.vue?vue&type=style&index=0&id=599f99ca&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"599f99ca\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showContainer)?_c('div',{staticClass:\"c-prestige-button-container\"},[(_vm.showEP)?_c('div',{staticClass:\"c-eternity-points\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-game-header__ep-amount\"},[_vm._v(_vm._s(_vm.format(_vm.eternityPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Eternity Point\", _vm.eternityPoints))+\". \"),(_vm.showNextEP)?_c('span',[_vm._v(\"(Next EP at \"+_vm._s(_vm.format(_vm.nextEP, 1))+\" IP)\")]):_vm._e()]):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('img',{staticClass:\"syn-button-size\",attrs:{\"src\":\"images/synergismUI/eternity.png\"},on:{\"click\":_vm.handleClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismEternityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismEternityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismEternityButton.vue?vue&type=template&id=165e6483&scoped=true&\"\nimport script from \"./SynergismEternityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismEternityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"165e6483\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismEPHeaderContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismEPHeaderContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismEPHeaderContainer.vue?vue&type=template&id=1172a401&scoped=true&\"\nimport script from \"./SynergismEPHeaderContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismEPHeaderContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismEPHeaderContainer.vue?vue&type=style&index=0&id=1172a401&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1172a401\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showContainer)?_c('div',{staticClass:\"c-prestige-button-container\"},[_c('div',{staticClass:\"c-infinity-points\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-game-header__ip-amount\"},[_vm._v(_vm._s(_vm.format(_vm.infinityPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Infinity Point\", _vm.infinityPoints))+\". \"),(_vm.isTesseractUnlocked)?_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.tesseractText)}}):_vm._e()]),_c('div',{staticClass:\"flex\"},[_c('SynergismBigCrunchButton'),_c('SynergismEternityButton'),_c('SynergismRealityButton')],1)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('img',{staticClass:\"syn-button-size\",attrs:{\"src\":\"images/synergismUI/infinity.png\"},on:{\"click\":_vm.handleClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismBigCrunchButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismBigCrunchButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismBigCrunchButton.vue?vue&type=template&id=f67e95c6&scoped=true&\"\nimport script from \"./SynergismBigCrunchButton.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismBigCrunchButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f67e95c6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('img',{staticClass:\"syn-button-size\",attrs:{\"src\":\"images/synergismUI/reality.png\"},on:{\"click\":_vm.handleClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismRealityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismRealityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismRealityButton.vue?vue&type=template&id=47de6ff9&scoped=true&\"\nimport script from \"./SynergismRealityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismRealityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"47de6ff9\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismHeaderInfinityContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismHeaderInfinityContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismHeaderInfinityContainer.vue?vue&type=template&id=57d02076&scoped=true&\"\nimport script from \"./SynergismHeaderInfinityContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismHeaderInfinityContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismHeaderInfinityContainer.vue?vue&type=style&index=0&id=57d02076&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57d02076\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismHeaderPrestigeGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismHeaderPrestigeGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismHeaderPrestigeGroup.vue?vue&type=template&id=019433b0&scoped=true&\"\nimport script from \"./SynergismHeaderPrestigeGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismHeaderPrestigeGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismHeaderPrestigeGroup.vue?vue&type=style&index=0&id=019433b0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"019433b0\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismGameHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismGameHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismGameHeader.vue?vue&type=template&id=c4dddef4&scoped=true&\"\nimport script from \"./SynergismGameHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismGameHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c4dddef4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{staticClass:\"c-subtab-button-container\"},_vm._l((_vm.subtabs),function(subtab,i){return _c('SynergismSubtabButton',{key:i,attrs:{\"subtab\":subtab,\"parent-name\":_vm.tab.name}})}),1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isAvailable)?_c('button',{class:_vm.classObject,on:{\"click\":function($event){return _vm.subtab.show(true)}}},[_vm._v(\" \"+_vm._s(_vm.tabName)+\" \"),(_vm.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismSubtabButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismSubtabButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismSubtabButton.vue?vue&type=template&id=b30deff4&scoped=true&\"\nimport script from \"./SynergismSubtabButton.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismSubtabButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismSubtabButton.vue?vue&type=style&index=0&id=b30deff4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b30deff4\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismSubtabBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismSubtabBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismSubtabBar.vue?vue&type=template&id=093e66f8&scoped=true&\"\nimport script from \"./SynergismSubtabBar.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismSubtabBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"093e66f8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.tabs),function(tab,i){return _c('SynergismTabButton',{key:i,attrs:{\"tab-position\":i,\"tab\":tab}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isAvailable)?_c('button',{staticClass:\"o-tab-btn\",class:[_vm.tab.config.UIClass,\n { 'o-tab-btn--active': _vm.isCurrentTab }],on:{\"click\":function($event){return _vm.tab.show(true)}}},[_vm._v(\" \"+_vm._s(_vm.tabName)+\" \"),(_vm.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismTabButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismTabButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismTabButton.vue?vue&type=template&id=1e3e3693&scoped=true&\"\nimport script from \"./SynergismTabButton.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismTabButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismTabButton.vue?vue&type=style&index=0&id=1e3e3693&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1e3e3693\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismTabBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismTabBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismTabBar.vue?vue&type=template&id=855f000a&scoped=true&\"\nimport script from \"./SynergismTabBar.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismTabBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"855f000a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-eternity-tab__header\"},[_c('span',{staticClass:\"c-eternity-tab__eternity-points\"},[_vm._v(_vm._s(_vm.format(this.eternityPoints, 2)))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismEpHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismEpHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismEpHeader.vue?vue&type=template&id=1e3dc62f&scoped=true&\"\nimport script from \"./SynergismEpHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismEpHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1e3dc62f\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismUi.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismUi.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismUi.vue?vue&type=template&id=bf1bfb3a&scoped=true&\"\nimport script from \"./SynergismUi.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismUi.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismUi.vue?vue&type=style&index=0&id=bf1bfb3a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bf1bfb3a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-ra-alchemy-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.showAlchemyHowTo}},[_vm._v(\" Click for alchemy info \")]),(!_vm.isDoomed)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.toggleAllReactions}},[_vm._v(\" \"+_vm._s(_vm.allReactionsDisabled ? \"Enable\" : \"Disable\")+\" all reactions \")]):_vm._e(),(_vm.realityCreationVisible)?_c('PrimaryButton',{class:_vm.realityGlyphCreationClass,attrs:{\"onclick\":\"Modal.realityGlyph.show()\"}},[_vm._v(\" View Reality Glyph creation \")]):_vm._e()],1),_c('AlchemyResourceInfo',{key:_vm.infoResourceId,attrs:{\"resource\":_vm.infoResource}}),_c('br'),_vm._v(\" Glyphs can now be refined using your Glyph filter in the Glyphs tab. \"),_c('br'),_vm._v(\" When refining a Glyph, it will only give you resources up to a cap of \"+_vm._s(_vm.formatX(_vm.capFactor))+\" its highest refinement value. \"),(_vm.reactionsAvailable)?_c('span',[_vm._v(\" Reactions trigger once every time you Reality, unaffected by amplification from stored real time. \")]):_vm._e(),_c('div',{staticClass:\"l-alchemy-circle\",style:(_vm.circleStyle)},[(_vm.isDoomed)?_c('span',{staticClass:\"c-pelle-symbol-overlay\",domProps:{\"innerHTML\":_vm._s(_vm.pelleSymbol)}}):_vm._e(),_c('svg',{staticClass:\"l-alchemy-orbit-canvas\"},_vm._l((_vm.layout.orbits),function(orbit,i){return _c('circle',{key:i,staticClass:\"o-alchemy-orbit\",class:_vm.orbitClass,attrs:{\"cx\":\"50%\",\"cy\":\"50%\",\"r\":_vm.orbitSize(orbit)}})}),0),_vm._l((_vm.layout.nodes),function(node,i){return _c('AlchemyCircleNode',{key:i,class:_vm.nodeClass(node),attrs:{\"node\":node,\"is-focused\":_vm.isFocusedNode(node)},on:{\"mouseenter\":function($event){return _vm.handleMouseEnter(node)},\"mouseleave\":_vm.handleMouseLeave,\"click\":function($event){return _vm.handleClick(node)}}})}),_c('svg',{staticClass:\"l-alchemy-arrow-canvas\"},[_vm._l((_vm.layout.reactionArrows),function(reactionArrow,idx){return _c('line',_vm._b({key:'arrow-' + idx + _vm.realityAmount,class:_vm.reactionPathClass(reactionArrow)},'line',_vm.reactionArrowPaths(reactionArrow),false))}),_vm._l((_vm.layout.reactionArrows),function(reactionArrow,idx){return _c('line',_vm._b({key:'arrow2-' + idx + _vm.realityAmount,class:_vm.reactionArrowClass(reactionArrow)},'line',_vm.reactionArrowPositions(reactionArrow),false))})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","class AlchemyOrbitLayout {\r\n constructor(tier, radius, angleOffset = 0) {\r\n this._resources = AlchemyResources.all\r\n .filter(y => y.config.tier === tier)\r\n .sort((x, y) => x.config.uiOrder - y.config.uiOrder);\r\n this._radius = radius;\r\n this._angleOffset = angleOffset;\r\n }\r\n\r\n get radius() {\r\n return this._radius;\r\n }\r\n\r\n get nodes() {\r\n const nodes = [];\r\n const step = Math.PI_2 / this._resources.length;\r\n let angle = this._angleOffset;\r\n for (const resource of this._resources) {\r\n nodes.push({\r\n resource,\r\n x: this._radius * Math.sin(angle),\r\n y: this._radius * Math.cos(angle)\r\n });\r\n angle += step;\r\n }\r\n return nodes;\r\n }\r\n}\r\n\r\nexport class AlchemyCircleLayout {\r\n constructor() {\r\n this.orbits = [\r\n new AlchemyOrbitLayout(1, 4, -Math.PI / 3),\r\n new AlchemyOrbitLayout(2, 3),\r\n new AlchemyOrbitLayout(3, 2, Math.PI / 3),\r\n new AlchemyOrbitLayout(4, 1, -Math.PI / 6),\r\n new AlchemyOrbitLayout(5, 0)\r\n ];\r\n const nodes = [];\r\n for (const orbitNodes of this.orbits.map(o => o.nodes)) {\r\n nodes.push(...orbitNodes);\r\n }\r\n const size = Math.max(\r\n nodes.map(p => Math.abs(p.x)).max(),\r\n nodes.map(p => Math.abs(p.y)).max()\r\n ) * 2;\r\n for (const node of nodes) {\r\n node.x = (node.x / size + 0.5) * 100;\r\n node.y = (node.y / size + 0.5) * 100;\r\n }\r\n const reactionArrows = [];\r\n for (const reaction of AlchemyReactions.all.compact()) {\r\n const productNode = nodes\r\n .find(n => n.resource === reaction.product);\r\n const reagentNodes = reaction.reagents\r\n .map(r => nodes.find(n => n.resource === r.resource));\r\n for (const reagentNode of reagentNodes) {\r\n reactionArrows.push({\r\n reaction,\r\n reagent: reagentNode,\r\n product: productNode,\r\n });\r\n }\r\n }\r\n this.reactionArrows = reactionArrows;\r\n this.nodes = nodes;\r\n this.size = size;\r\n }\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-alchemy-node\",class:_vm.classObject,style:(_vm.layoutStyle),on:{\"mouseenter\":function($event){return _vm.$emit('mouseenter')},\"mouseleave\":function($event){return _vm.$emit('mouseleave')},\"click\":_vm.emitClick}},[_c('AlchemyResourceArc',{attrs:{\"resource\":_vm.resource,\"class-object\":_vm.classObject}}),(_vm.isUnlocked)?_c('span',[_c('HintText',{staticClass:\"o-hint-text--alchemy-node l-hint-text--alchemy-node\",class:_vm.hintClassObject,attrs:{\"type\":\"alchemy\"}},[_vm._v(\" \"+_vm._s(_vm.formatInt(_vm.amount))+\" \")])],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-alchemy-resource-arc-wrapper\"},[_c('div',{staticClass:\"o-alchemy-resource-arc-spinner o-alchemy-resource-arc-circle\",style:(_vm.spinnerTransform)}),_c('div',{staticClass:\"o-alchemy-resource-arc-filler o-alchemy-resource-arc-circle\",style:(_vm.fillerTransform)}),_c('div',{staticClass:\"o-alchemy-resource-arc-mask\",style:(_vm.maskTransform)}),_c('div',{staticClass:\"o-alchemy-node-mask\",class:_vm.classObject},[_vm._v(\" \"+_vm._s(_vm.resource.symbol)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyResourceArc.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyResourceArc.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AlchemyResourceArc.vue?vue&type=template&id=18cd169c&scoped=true&\"\nimport script from \"./AlchemyResourceArc.vue?vue&type=script&lang=js&\"\nexport * from \"./AlchemyResourceArc.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"18cd169c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showThisHintText),expression:\"showThisHintText\"}],staticClass:\"o-hint-text l-hint-text\"},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HintText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HintText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HintText.vue?vue&type=template&id=53e490cc&\"\nimport script from \"./HintText.vue?vue&type=script&lang=js&\"\nexport * from \"./HintText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyCircleNode.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyCircleNode.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AlchemyCircleNode.vue?vue&type=template&id=ce831c78&scoped=true&\"\nimport script from \"./AlchemyCircleNode.vue?vue&type=script&lang=js&\"\nexport * from \"./AlchemyCircleNode.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ce831c78\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('div',{class:_vm.classObject},[_c('span',{staticClass:\"c-alchemy-resource-info__title\"},[_vm._v(\" \"+_vm._s(_vm.resource.symbol)+\" \"+_vm._s(_vm.resource.name)+\" \"+_vm._s(_vm.resource.symbol)+\" \")]),(_vm.isDoomed)?_c('span',[_vm._v(\" Destroyed by Pelle \")]):_c('span',[_vm._v(\" \"+_vm._s(_vm.capped ? \"Capped\" : \"Current\")+\": \"+_vm._s(_vm.resourceAmount)+\"/\"+_vm._s(_vm.resourceCap)+\" (Recent change: \"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.formattedFlow)}}),_vm._v(\") \")]),(_vm.isBaseResource)?_c('span',[_vm._v(\"Base Resource\")]):_c('span',[_vm._v(\"Reaction: \"+_vm._s(_vm.isReactionActive ? \"Active\" : \"Inactive\")+\" (\"+_vm._s(_vm.reactionText)+\")\")]),_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_c('EffectDisplay',{attrs:{\"label\":\"Effect\",\"config\":_vm.effectConfig}})],1)]):_c('div',{class:_vm.classObject},[_vm._v(\" Unlock requirement: \"+_vm._s(_vm.unlockRequirement)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible && _vm.effectDisplay !== undefined)?_c('span',[(_vm.br)?_c('br'):_vm._e(),_vm._v(\" \"+_vm._s(_vm.labelDisplay)+_vm._s(_vm.effectDisplay)+\" \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export function isNumber(value) {\r\n return typeof value === \"number\";\r\n}\r\n\r\nexport function isString(value) {\r\n return typeof value === \"string\";\r\n}\r\n\r\nexport function isFunction(value) {\r\n return typeof value === \"function\";\r\n}\r\n\r\nexport function isDecimal(value) {\r\n return value instanceof Decimal;\r\n}\r\n","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffectDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffectDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EffectDisplay.vue?vue&type=template&id=69daf308&\"\nimport script from \"./EffectDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./EffectDisplay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyResourceInfo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyResourceInfo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AlchemyResourceInfo.vue?vue&type=template&id=e419527e&scoped=true&\"\nimport script from \"./AlchemyResourceInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./AlchemyResourceInfo.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e419527e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AlchemyTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AlchemyTab.vue?vue&type=template&id=c78c9e4e&scoped=true&\"\nimport script from \"./AlchemyTab.vue?vue&type=script&lang=js&\"\nexport * from \"./AlchemyTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AlchemyTab.vue?vue&type=style&index=0&id=c78c9e4e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c78c9e4e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.activeComponent,{tag:\"component\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-classic-antimatter-dim-tab\"},[_c('AntimatterDimensionsTabHeader'),_vm._v(\" \"+_vm._s(_vm.multiplierText)+\" \"),_c('TickspeedRow'),_c('div',{staticClass:\"l-dimensions-container\"},[_vm._l((8),function(tier){return _c('AntimatterDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),_c('DimensionBoostRow'),_c('AntimatterGalaxyRow')],2),(_vm.isQuickResetAvailable)?_c('PrimaryButton',{staticClass:\"o-primary-btn--quick-reset\",on:{\"click\":_vm.quickReset}},[_vm._v(\" Perform a Dimension Boost reset \"),(_vm.hasDimensionBoosts)?_c('span',[_vm._v(\" but lose a Dimension Boost\")]):_c('span',[_vm._v(\" for no gain\")])]):_vm._e(),_c('div',{staticClass:\"l-flex\"}),_c('AntimatterDimensionProgressBar',{staticClass:\"l-antimatter-dim-tab__progress_bar\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-progress-bar\"},[_c('div',{staticClass:\"c-progress-bar__fill\",style:(_vm.progressBarStyle)},[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],staticClass:\"c-progress-bar__percents\"},[_vm._v(\" \"+_vm._s(_vm.displayPercents)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AntimatterDimensionProgressBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AntimatterDimensionProgressBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AntimatterDimensionProgressBar.vue?vue&type=template&id=1f1d3382&\"\nimport script from \"./AntimatterDimensionProgressBar.vue?vue&type=script&lang=js&\"\nexport * from \"./AntimatterDimensionProgressBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row c-antimatter-dim-row l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 2),\"amount-text\":_vm.amountText,\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container\"},[(!_vm.isContinuumActive)?_c('PrimaryButton',{class:_vm.buySingleClass,attrs:{\"enabled\":_vm.isAffordable && !_vm.isCapped && _vm.isUnlocked},on:{\"click\":_vm.buySingle}},[_c('div',{class:_vm.tutorialClass()},[_vm._v(\" \"+_vm._s(_vm.singleText)+\" \")]),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.boughtTooltip)+\" \")]),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e(),_c('PrimaryButton',{class:_vm.buyTenClass,attrs:{\"enabled\":(_vm.isAffordableUntil10 || _vm.isContinuumActive) && !_vm.isCapped && _vm.isUnlocked},on:{\"click\":_vm.buyUntil10}},[_vm._v(\" \"+_vm._s(_vm.until10Text)+\" \"),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.boughtTooltip)+\" \")])])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-dimension-text-container\"},[_c('div',{class:_vm.adjustableTextClass()},[_c('span',{staticClass:\"c-dim-row__large\"},[_vm._v(\" \"+_vm._s(_vm.name)+\" \")]),_c('span',{staticClass:\"c-dim-row__small\"},[_vm._v(\" \"+_vm._s(_vm.multiplierText)+\" \")])]),_c('div',{class:_vm.adjustableTextClass()},[_c('span',{staticClass:\"c-dim-row__large\"},[_vm._v(\" \"+_vm._s(_vm.amountText)+\" \")]),(_vm.rate.neq(0) && _vm.showPercentage)?_c('span',{staticClass:\"c-dim-row__small\"},[_vm._v(\" \"+_vm._s(_vm.rateText)+\" \")]):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GenericDimensionRowText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GenericDimensionRowText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GenericDimensionRowText.vue?vue&type=template&id=74ffc647&scoped=true&\"\nimport script from \"./GenericDimensionRowText.vue?vue&type=script&lang=js&\"\nexport * from \"./GenericDimensionRowText.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GenericDimensionRowText.vue?vue&type=style&index=0&id=74ffc647&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"74ffc647\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicAntimatterDimensionRow.vue?vue&type=template&id=623bbdde&scoped=true&\"\nimport script from \"./ClassicAntimatterDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicAntimatterDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicAntimatterDimensionRow.vue?vue&type=style&index=0&id=623bbdde&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"623bbdde\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-antimatter-dim-tab__header\"},[_c('PrimaryButton',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isSacrificeUnlocked),expression:\"isSacrificeUnlocked\"},{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.sacrificeTooltip),expression:\"sacrificeTooltip\"}],staticClass:\"o-primary-btn--sacrifice\",attrs:{\"enabled\":_vm.isSacrificeAffordable},on:{\"click\":_vm.sacrifice}},[(_vm.isSacrificeAffordable)?_c('span',[_vm._v(\" Dimensional Sacrifice (\"+_vm._s(_vm.formatX(_vm.sacrificeBoost, 2, 2))+\") \")]):_c('span',[_vm._v(\" Dimensional Sacrifice Disabled (\"+_vm._s(_vm.disabledCondition)+\") \")])]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-max\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all (M) \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicAntimatterDimensionsTabHeader.vue?vue&type=template&id=7341afa2&\"\nimport script from \"./ClassicAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-dimension-row c-antimatter-dim-row c-antimatter-prestige-row\"},[_c('div',{staticClass:\"l-dim-row__prestige-text c-dim-row__label c-dim-row__label--amount l-text-wrapper\"},[_vm._v(\" \"+_vm._s(_vm.typeName)+\" (\"+_vm._s(_vm.sumText)+\") \"+_vm._s(_vm.galRequirementText)+\" \"),_c('div',{staticClass:\"l-scaling-text-wrapper\"},[_vm._v(\" \"+_vm._s(_vm.hasIncreasedScaling ? _vm.costScalingText : \"\")+\" \")])]),_c('PrimaryButton',{class:_vm.classObject,attrs:{\"enabled\":_vm.canBeBought},on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.buyGalaxy(true)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.buyGalaxy(false)}]}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \"),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicAntimatterGalaxyRow.vue?vue&type=template&id=51c836b2&scoped=true&\"\nimport script from \"./ClassicAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicAntimatterGalaxyRow.vue?vue&type=style&index=0&id=51c836b2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"51c836b2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-dimension-row c-antimatter-dim-row c-antimatter-prestige-row\"},[_c('div',{staticClass:\"l-dim-row__prestige-text c-dim-row__label c-dim-row__label--amount\"},[_vm._v(\" \"+_vm._s(_vm.boostScale)+\" Dimension Boost (\"+_vm._s(_vm.boostCountText)+\") \"+_vm._s(_vm.dimRequirementText)+\" \")]),_c('PrimaryButton',{class:_vm.classObject,attrs:{\"enabled\":_vm.isBuyable},on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.dimensionBoost(true)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.dimensionBoost(false)}]}},[_vm._v(\" \"+_vm._s(_vm.unlockedByBoost)+\" \"),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { BitPurchasableMechanicState, RebuyableMechanicState } from \"./game-mechanics\";\r\n\r\nclass WarpUpgradeState extends BitPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.registerEvents(config.checkEvent, () => this.tryUnlock());\r\n }\r\n get isBought() {\r\n return (this.bits & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set isBought(value) {\r\n if (value) {\r\n this.bits |= (1 << this.bitIndex);\r\n } else {\r\n this.bits &= ~(1 << this.bitIndex);\r\n }\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get shortDescription() {\r\n return this.config.shortDescription ? this.config.shortDescription() : \"\";\r\n }\r\n\r\n get requirement() {\r\n return typeof this.config.requirement === \"function\" ? this.config.requirement() : this.config.requirement;\r\n }\r\n\r\n get lockEvent() {\r\n return typeof this.config.lockEvent === \"function\" ? this.config.lockEvent() : this.config.lockEvent;\r\n }\r\n\r\n get currency() {\r\n return Currency.mendingPoints;\r\n }\r\n\r\n get bitIndex() {\r\n return this.id;\r\n }\r\n\r\n get bits() {\r\n return player.mending.warpUpgradeBits;\r\n }\r\n\r\n set bits(value) {\r\n player.mending.warpUpgradeBits = value;\r\n }\r\n\r\n get hasPlayerLock() {\r\n return (player.mending.reqLock.warp & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set hasPlayerLock(value) {\r\n if (value) player.mending.reqLock.warp |= 1 << this.bitIndex;\r\n else player.mending.reqLock.warp &= ~(1 << this.bitIndex);\r\n }\r\n\r\n get isLockingMechanics() {\r\n const shouldBypass = this.config.bypassLock?.() ?? false;\r\n return this.hasPlayerLock && this.isPossible && !shouldBypass && !this.isAvailableForPurchase;\r\n }\r\n\r\n // Required to be changed this way to avoid direct prop mutation in Vue components\r\n setMechanicLock(value) {\r\n this.hasPlayerLock = value;\r\n }\r\n\r\n toggleMechanicLock() {\r\n this.hasPlayerLock = !this.hasPlayerLock;\r\n }\r\n\r\n // Note we don't actually show the modal if we already failed or unlocked it\r\n tryShowWarningModal(specialLockText) {\r\n if (this.isPossible && !this.isAvailableForPurchase) {\r\n Modal.upgradeLock.show({ upgrade: this, isImaginary: false, specialLockText });\r\n }\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return (player.mending.warpUpgReqs & (1 << this.id)) !== 0;\r\n }\r\n\r\n get isPossible() {\r\n return this.config.hasFailed ? !this.config.hasFailed() : true;\r\n }\r\n\r\n tryUnlock() {\r\n const warpReached = player.reality.warped;\r\n if (!warpReached || this.isAvailableForPurchase || !this.config.checkRequirement()) return;\r\n player.mending.warpUpgReqs |= (1 << this.id);\r\n GameUI.notify.reality(`You've unlocked a Warp Upgrade: ${this.config.name}`);\r\n this.hasPlayerLock = false;\r\n }\r\n\r\n onPurchased() {\r\n EventHub.dispatch(GAME_EVENT.WARP_UPGRADE_BOUGHT);\r\n const id = this.id;\r\n //insert code here\r\n GameCache.staticGlyphWeights.invalidate();\r\n }\r\n}\r\n\r\nclass RebuyableWarpUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.mendingPoints;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.mending.warpRebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.mending.warpRebuyables[this.id] = value;\r\n }\r\n}\r\n\r\nWarpUpgradeState.index = mapGameData(\r\n GameDatabase.mending.warpUpgrades,\r\n config => (config.id < 4\r\n ? new RebuyableWarpUpgradeState(config)\r\n : new WarpUpgradeState(config))\r\n);\r\n\r\n/**\r\n * @param {number} id\r\n * @return {WarpUpgradeState|RebuyableWarpUpgradeState}\r\n */\r\nexport const WarpUpgrade = id => WarpUpgradeState.index[id];\r\n\r\nexport const WarpUpgrades = {\r\n /**\r\n * @type {(WarpUpgradeState|RebuyableWarpUpgradeState)[]}\r\n */\r\n all: WarpUpgradeState.index.compact(),\r\n get allBought() {\r\n return (player.mending.warpUpgradeBits >> 3) + 1 === 1 << (GameDatabase.mending.warpUpgrades.length - 2);\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { Currency } from \"./currency\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\nimport { WarpUpgrade } from \"./warp-upgrades\";\r\n\r\nexport const DIMBOOST_TYPE = {\r\n BOOST: 0,\r\n SHIFT: 1,\r\n WARP: 2,\r\n SCALE: 3\r\n};\r\n\r\nclass DimBoostRequirement {\r\n constructor(tier, amount) {\r\n this.tier = tier;\r\n this.amount = amount;\r\n }\r\n\r\n get isSatisfied() {\r\n const dimension = AntimatterDimension(this.tier);\r\n return dimension.totalAmount.gte(this.amount);\r\n }\r\n}\r\n\r\nexport class DimBoost {\r\n static get scaleStart(){\r\n let x = 5e13;\r\n if(WarpUpgrade(10).isBought) x*=20;\r\n return x;\r\n }\r\n static get warpStart() {\r\n let x =2.5e11;\r\n if(WarpUpgrade(10).isBought) x*=20;\r\n return x;\r\n }\r\n\r\n static get shiftStart() {\r\n let x = 1e9;\r\n if(WarpUpgrade(10).isBought) x*=20;\r\n return x;\r\n }\r\n\r\n static get power() {\r\n if (NormalChallenge(8).isRunning) {\r\n return DC.D1;\r\n }\r\n\r\n let boost = Effects.max(\r\n 2,\r\n InfinityUpgrade.dimboostMult,\r\n InfinityChallenge(7).reward,\r\n InfinityChallenge(7),\r\n TimeStudy(81)\r\n )\r\n .toDecimal()\r\n .timesEffectsOf(\r\n TimeStudy(83),\r\n TimeStudy(231),\r\n Achievement(117),\r\n Achievement(142),\r\n GlyphEffect.dimBoostPower,\r\n PelleRifts.recursion.milestones[0]\r\n ).powEffectsOf(InfinityUpgrade.dimboostMult.chargedEffect);\r\n if (GlyphAlteration.isAdded(\"effarig\")) boost = boost.pow(getSecondaryGlyphEffect(\"effarigforgotten\"));\r\n return boost;\r\n }\r\n\r\n static multiplierToNDTier(tier) {\r\n const normalBoostMult = DimBoost.power.pow(this.purchasedBoosts + 1 - tier).clampMin(1);\r\n const imaginaryBoostMult = DimBoost.power.times(ImaginaryUpgrade(24).effectOrDefault(1))\r\n .pow(this.imaginaryBoosts).clampMin(1);\r\n return normalBoostMult.times(imaginaryBoostMult);\r\n }\r\n\r\n static get maxDimensionsUnlockable() {\r\n return NormalChallenge(10).isRunning ? 6 : 8;\r\n }\r\n\r\n static get canUnlockNewDimension() {\r\n return DimBoost.purchasedBoosts + 4 < DimBoost.maxDimensionsUnlockable;\r\n }\r\n\r\n static get maxBoosts() {\r\n //woah nice design here--sxy\r\n let corruptionMax = 1e15;\r\n if (player.mending.corruptionChallenge.corruptedMend) corruptionMax = corruptionPenalties.galWeak.hiddenThree[player.mending.corruption[3]];\r\n if (Ra.isRunning) {\r\n // Ra makes boosting impossible. Note that this function isn't called\r\n // when giving initial boosts, so the player will still get those.\r\n return Ra.unlocks.raRealUncapDimboost.isUnlocked ? corruptionMax : 0;\r\n }\r\n if (InfinityChallenge(1).isRunning) {\r\n // Usually, in Challenge 8, the only boosts that are useful are the first 5\r\n // (the fifth unlocks sacrifice). In IC1 (Challenge 8 and Challenge 10\r\n // combined, among other things), only the first 2 are useful\r\n // (they unlock new dimensions).\r\n // There's no actual problem with bulk letting the player get\r\n // more boosts than this; it's just that boosts beyond this are pointless.\r\n return 2;\r\n }\r\n if (NormalChallenge(8).isRunning) {\r\n // See above. It's important we check for this after checking for IC1 since otherwise\r\n // this case would trigger when we're in IC1.\r\n return 5;\r\n }\r\n return corruptionMax;//this might be extended later.--sxy\r\n }\r\n\r\n static get type() {\r\n return this.typeAt(player.dimensionBoosts);\r\n }\r\n\r\n static typeAt(dimboosts) {\r\n if (dimboosts >= DimBoost.scaleStart) {\r\n return DIMBOOST_TYPE.SCALE;\r\n }\r\n if (dimboosts >= DimBoost.warpStart) {\r\n return DIMBOOST_TYPE.WARP;\r\n }\r\n if (dimboosts >= DimBoost.shiftStart) {\r\n return DIMBOOST_TYPE.SHIFT;\r\n }\r\n return DIMBOOST_TYPE.BOOST;\r\n }\r\n\r\n static get canBeBought() {\r\n if (DimBoost.purchasedBoosts >= this.maxBoosts) return false;\r\n if (player.records.thisInfinity.maxAM.gt(Player.infinityGoal) &&\r\n (!player.break || Player.isInAntimatterChallenge)) return false;\r\n return true;\r\n }\r\n\r\n static get lockText() {\r\n let boostCap = 1e12;\r\n if (DimBoost.purchasedBoosts >= this.maxBoosts) {\r\n if (Ra.isRunning) return \"Locked (Ra's Reality)\";\r\n if (InfinityChallenge(1).isRunning) return \"Locked (Infinity Challenge 1)\";\r\n if (NormalChallenge(8).isRunning) return \"Locked (8th Antimatter Dimension Autobuyer Challenge)\";\r\n }\r\n return player.dimensionBoosts >= this.maxBoosts ? \"Capped at \" + formatInt(boostCap) +\" Dimension Boosts\" : null;\r\n }\r\n\r\n static get requirement() {\r\n return this.bulkRequirement(1);\r\n }\r\n\r\n static bulkRequirement(bulk) {\r\n const targetResets = DimBoost.purchasedBoosts + bulk;\r\n const tier = Math.min(targetResets + 3, this.maxDimensionsUnlockable);\r\n let amount = 20;\r\n const discount = Effects.sum(\r\n TimeStudy(211),\r\n TimeStudy(222)\r\n );\r\n if (tier === 6 && NormalChallenge(10).isRunning) {\r\n amount += Math.round((targetResets - 3) * (20 - discount));\r\n } else if (tier === 8) {\r\n amount += Math.round((targetResets - 5) * (15 - discount));\r\n }\r\n if (EternityChallenge(5).isRunning) {\r\n amount += Math.pow(targetResets - 1, 3) + targetResets - 1;\r\n }\r\n\r\n if (DimBoost.purchasedBoosts > DimBoost.shiftStart) {\r\n amount += Math.pow(targetResets - DimBoost.shiftStart, 1 + targetResets/(DimBoost.shiftStart * 10)) + targetResets - DimBoost.shiftStart\r\n }\r\n\r\n if (DimBoost.purchasedBoosts > DimBoost.warpStart) {\r\n amount += Math.pow(targetResets - DimBoost.warpStart, 1 + targetResets/(DimBoost.warpStart/10)) + targetResets - DimBoost.warpStart\r\n }\r\n\r\n if (DimBoost.purchasedBoosts > DimBoost.scaleStart) {\r\n amount += Math.pow(targetResets - DimBoost.scaleStart, 1 + targetResets/(DimBoost.scaleStart / 1e5)) + targetResets - DimBoost.scaleStart\r\n }\r\n\r\n amount -= Effects.sum(InfinityUpgrade.resetBoost);\r\n if (InfinityChallenge(5).isCompleted) amount -= 1;\r\n\r\n amount *= InfinityUpgrade.resetBoost.chargedEffect.effectOrDefault(1);\r\n\r\n // Ra ra upgrade--sxy\r\n if(player.celestials.ra.upgrades.has('raUpgrade')) amount = (amount / Decimal.log10(player.celestials.ra.raPoints.plus(1)))\r\n\r\n amount = Math.round(amount);\r\n \r\n return new DimBoostRequirement(tier, amount);\r\n }\r\n\r\n\r\n static get unlockedByBoost() {\r\n if (DimBoost.lockText !== null) return DimBoost.lockText;\r\n const boosts = DimBoost.purchasedBoosts;\r\n const allNDUnlocked = EternityMilestone.unlockAllND.isReached;\r\n\r\n let newUnlock = \"\";\r\n if (!allNDUnlocked && boosts < DimBoost.maxDimensionsUnlockable - 4) {\r\n newUnlock = `unlock the ${boosts + 5}th Dimension`;\r\n } else if (boosts === 4 && !NormalChallenge(10).isRunning && !EternityChallenge(3).isRunning) {\r\n newUnlock = \"unlock Sacrifice\";\r\n }\r\n\r\n const formattedMultText = `give a ${formatX(DimBoost.power, 2, 1)} multiplier `;\r\n let dimensionRange = `to the 1st Dimension`;\r\n if (boosts > 0) dimensionRange = `to Dimensions 1-${Math.min(boosts + 1, 8)}`;\r\n if (boosts >= DimBoost.maxDimensionsUnlockable - 1) dimensionRange = `to all Dimensions`;\r\n\r\n let boostEffects;\r\n if (NormalChallenge(8).isRunning) boostEffects = newUnlock;\r\n else if (newUnlock === \"\") boostEffects = `${formattedMultText} ${dimensionRange}`;\r\n else boostEffects = `${newUnlock} and ${formattedMultText} ${dimensionRange}`;\r\n\r\n if (boostEffects === \"\") return \"Dimension Boosts are currently useless\";\r\n const areDimensionsKept = (Perk.antimatterNoReset.isBought || Achievement(111).canBeApplied) &&\r\n (!Pelle.isDoomed || PelleUpgrade.dimBoostResetsNothing.isBought);\r\n if (areDimensionsKept) return boostEffects[0].toUpperCase() + boostEffects.substring(1);\r\n return `Reset your Dimensions to ${boostEffects}`;\r\n }\r\n\r\n static get purchasedBoosts() {\r\n return Math.floor(player.dimensionBoosts);\r\n }\r\n\r\n static get imaginaryBoosts() {\r\n let x = BreakInfinityUpgrade.autobuyMaxDimboosts.chargedEffect.isEffectActive ? Ra.pets.teresa.level : 1;\r\n let y = Ra.unlocks.freeDimBoosts.isUnlocked ? (1+(Ra.pets.ra.level / 100)) ** 0.5 : 1;\r\n //let ts401 = TimeStudy(401).isBought ? 1e11 : 0; //useless~\r\n return (Ra.isRunning && !Ra.unlocks.imaginaryBoostsRa.isUnlocked) ? 0 : ImaginaryUpgrade(12).effectOrDefault(0) * ImaginaryUpgrade(23).effectOrDefault(1) * Math.pow(x, 0.5) * y;\r\n }\r\n\r\n static get totalBoosts() {\r\n return Math.floor(this.purchasedBoosts + this.imaginaryBoosts);\r\n }\r\n\r\n static get startingDimensionBoosts() {\r\n if (InfinityUpgrade.skipResetGalaxy.isBought) return 4;\r\n if (InfinityUpgrade.skipReset3.isBought) return 3;\r\n if (InfinityUpgrade.skipReset2.isBought) return 2;\r\n if (InfinityUpgrade.skipReset1.isBought) return 1;\r\n return 0;\r\n }\r\n}\r\n\r\n// eslint-disable-next-line max-params\r\nexport function softReset(tempBulk, forcedADReset = false, forcedAMReset = false, enteringAntimatterChallenge = false) {\r\n// if (Currency.antimatter.gt(Player.infinityLimit)) return;\r\n const bulk = Math.min(tempBulk, DimBoost.maxBoosts - player.dimensionBoosts);\r\n EventHub.dispatch(GAME_EVENT.DIMBOOST_BEFORE, bulk);\r\n player.dimensionBoosts = Math.max(0, player.dimensionBoosts + bulk);\r\n resetChallengeStuff();\r\n const canKeepDimensions = Pelle.isDoomed\r\n ? PelleUpgrade.dimBoostResetsNothing.canBeApplied\r\n : Perk.antimatterNoReset.canBeApplied;\r\n if (forcedADReset || !canKeepDimensions) {\r\n AntimatterDimensions.reset();\r\n player.sacrificed = DC.D0;\r\n resetTickspeed();\r\n }\r\n skipResetsIfPossible(enteringAntimatterChallenge);\r\n const canKeepAntimatter = Pelle.isDoomed\r\n ? PelleUpgrade.dimBoostResetsNothing.canBeApplied\r\n : (Achievement(111).isUnlocked || Perk.antimatterNoReset.canBeApplied);\r\n if (!forcedAMReset && canKeepAntimatter) {\r\n Currency.antimatter.bumpTo(Currency.antimatter.startingValue);\r\n } else {\r\n Currency.antimatter.reset();\r\n }\r\n EventHub.dispatch(GAME_EVENT.DIMBOOST_AFTER, bulk);\r\n}\r\n\r\nexport function skipResetsIfPossible(enteringAntimatterChallenge) {\r\n if (enteringAntimatterChallenge || Player.isInAntimatterChallenge) return;\r\n if (InfinityUpgrade.skipResetGalaxy.isBought && player.dimensionBoosts < 4) {\r\n player.dimensionBoosts = 4;\r\n if (player.galaxies === 0) player.galaxies = 1;\r\n } else if (InfinityUpgrade.skipReset3.isBought && player.dimensionBoosts < 3) player.dimensionBoosts = 3;\r\n else if (InfinityUpgrade.skipReset2.isBought && player.dimensionBoosts < 2) player.dimensionBoosts = 2;\r\n else if (InfinityUpgrade.skipReset1.isBought && player.dimensionBoosts < 1) player.dimensionBoosts = 1;\r\n}\r\n\r\nexport function manualRequestDimensionBoost(bulk) {\r\n if (!DimBoost.requirement.isSatisfied) return;\r\n if (!DimBoost.canBeBought) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n if (player.options.confirmations.dimensionBoost) {\r\n Modal.dimensionBoost.show({ bulk });\r\n return;\r\n }\r\n requestDimensionBoost(bulk);\r\n}\r\n\r\nexport function requestDimensionBoost(bulk) {\r\n if (!DimBoost.requirement.isSatisfied) return;\r\n if (!DimBoost.canBeBought) return;\r\n Tutorial.turnOffEffect(TUTORIAL_STATE.DIMBOOST);\r\n if (BreakInfinityUpgrade.autobuyMaxDimboosts.isBought && bulk) maxBuyDimBoosts();\r\n else softReset(1);\r\n}\r\n\r\nfunction maxBuyDimBoosts() {\r\n // Boosts that unlock new dims are bought one at a time, unlocking the next dimension\r\n if (DimBoost.canUnlockNewDimension) {\r\n if (DimBoost.requirement.isSatisfied) softReset(1);\r\n return;\r\n }\r\n const req1 = DimBoost.bulkRequirement(1);\r\n if (!req1.isSatisfied) return;\r\n const req2 = DimBoost.bulkRequirement(2);\r\n if (!req2.isSatisfied) {\r\n softReset(1);\r\n return;\r\n }\r\n // Linearly extrapolate dimboost costs. req1 = a * 1 + b, req2 = a * 2 + b\r\n // so a = req2 - req1, b = req1 - a = 2 req1 - req2, num = (dims - b) / a\r\n let increase = req2.amount - req1.amount;\r\n const dim = AntimatterDimension(req1.tier);\r\n //wtf precise error here--sxy\r\n //honestly shall we do a decimal here......\r\n if (increase == 0) increase=1e-20;//temporary fix\r\n let fixedValue = (dim.totalAmount.toNumber() - req1.amount) / increase\r\n if(fixedValue == Infinity)fixedValue=1e308;\r\n if(fixedValue == -Infinity)fixedValue=-1e308;\r\n let maxBoosts = Math.min(1e9,\r\n 1 + Math.floor( fixedValue ));\r\n if(maxBoosts<0) return;\r\n if (DimBoost.bulkRequirement(maxBoosts).isSatisfied) {\r\n softReset(maxBoosts);\r\n return;\r\n }\r\n // But in case of EC5 it's not, so do binary search for appropriate boost amount\r\n let minBoosts = 2;\r\n while (maxBoosts !== minBoosts + 1) {\r\n const middle = Math.floor((maxBoosts + minBoosts) / 2);\r\n if (DimBoost.bulkRequirement(middle).isSatisfied) minBoosts = middle;\r\n else maxBoosts = middle;\r\n }\r\n softReset(minBoosts);\r\n}\r\n","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicDimensionBoostRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicDimensionBoostRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicDimensionBoostRow.vue?vue&type=template&id=2b071aa2&\"\nimport script from \"./ClassicDimensionBoostRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicDimensionBoostRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject},[_c('div',{staticClass:\"tickspeed-buttons\"},[_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.upgradeCount),expression:\"upgradeCount\"}],class:_vm.buttonClass(),attrs:{\"onclick\":\"buyTickSpeed()\"}},[(_vm.isContinuumActive)?_c('span',[_vm._v(\" Tickspeed Continuum: \"+_vm._s(_vm.continuumString)+\" \")]):(_vm.isEC9)?_c('span',[_vm._v(\" Tickspeed Unpurchasable (EC 9) \")]):_c('span',[_vm._v(\" Tickspeed Cost: \"+_vm._s(_vm.format(_vm.cost))+\" \")]),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]),(!_vm.isContinuumActive)?_c('button',{staticClass:\"o-primary-btn tickspeed-max-btn\",class:{ 'o-primary-btn--disabled': !_vm.isAffordable && !_vm.isContinuumActive },attrs:{\"onclick\":\"buyMaxTickSpeed()\"}},[_vm._v(\" Buy Max \")]):_vm._e()]),(_vm.hasRealityButton)?_c('div',{staticClass:\"tickspeed-labels\"},[_vm._v(\" \"+_vm._s(_vm.tickspeedDisplay)+\" | \"+_vm._s(_vm.multiplierDisplay)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TickspeedRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TickspeedRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TickspeedRow.vue?vue&type=template&id=7a175a54&scoped=true&\"\nimport script from \"./TickspeedRow.vue?vue&type=script&lang=js&\"\nexport * from \"./TickspeedRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TickspeedRow.vue?vue&type=style&index=0&id=7a175a54&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7a175a54\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicAntimatterDimensionsTab.vue?vue&type=template&id=77684bcf&scoped=true&\"\nimport script from \"./ClassicAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicAntimatterDimensionsTab.vue?vue&type=style&index=0&id=77684bcf&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"77684bcf\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-antimatter-dim-tab\"},[_c('div',{staticClass:\"modes-container\"},[_c('button',{staticClass:\"o-primary-btn l-button-container\",on:{\"click\":_vm.changeBuyMode}},[_vm._v(\" \"+_vm._s(_vm.getUntil10Display())+\" \")]),_c('PrimaryButton',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isSacrificeUnlocked),expression:\"isSacrificeUnlocked\"},{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.sacrificeTooltip),expression:\"sacrificeTooltip\"}],staticClass:\"o-primary-btn--sacrifice\",attrs:{\"enabled\":_vm.isSacrificeAffordable},on:{\"click\":_vm.sacrifice}},[(_vm.isSacrificeAffordable)?_c('span',[_vm._v(\"Dimensional Sacrifice (\"+_vm._s(_vm.formatX(_vm.sacrificeBoost, 2, 2))+\")\")]):_c('span',[_vm._v(\"Dimensional Sacrifice Disabled (\"+_vm._s(_vm.disabledCondition)+\")\")])]),_c('button',{staticClass:\"o-primary-btn l-button-container\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max All (M) \")])],1),_c('span',[_vm._v(_vm._s(_vm.multiplierText))]),_c('TickspeedRow'),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('AntimatterDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),1),_c('div',{staticClass:\"resets-container\"},[_c('DimensionBoostRow'),(_vm.isQuickResetAvailable)?_c('PrimaryButton',{staticClass:\"o-primary-btn--quick-reset\",attrs:{\"onclick\":\"softReset(-1, true, true)\"}},[_vm._v(\" Perform a Dimension Boost reset \"),(_vm.hasDimensionBoosts)?_c('span',[_vm._v(\" but lose a Dimension Boost\")]):_c('span',[_vm._v(\" for no gain\")])]):_vm._e(),_c('AntimatterGalaxyRow')],1),_c('AntimatterDimensionProgressBar')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-row-antimatter-dim c-antimatter-dim-row l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 2),\"amount-text\":_vm.amountDisplay,\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container c-modern-dim-tooltip-container\"},[_c('div',{staticClass:\"c-modern-dim-purchase-count-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.boughtTooltip)+\" \")]),_c('button',{class:_vm.buttonClass(),on:{\"click\":_vm.buy}},[_c('div',{class:_vm.buttonTextClass()},[_c('div',[_vm._v(\" \"+_vm._s(_vm.buttonPrefix)+\" \")]),_c('div',{class:{ 'l-dim-row-small-text': _vm.hasLongText }},[_vm._v(\" \"+_vm._s(_vm.buttonValue)+\" \")]),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]),(!_vm.isContinuumActive && _vm.isUnlocked && !_vm.isCapped)?_c('div',{staticClass:\"fill\"},[_c('div',{staticClass:\"fill-purchased\",style:({ 'width': _vm.boughtBefore10*10 + '%' })}),_c('div',{staticClass:\"fill-possible\",style:({ 'width': _vm.howManyCanBuy*10 + '%' })})]):_vm._e()])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernAntimatterDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernAntimatterDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernAntimatterDimensionRow.vue?vue&type=template&id=e93a3710&scoped=true&\"\nimport script from \"./ModernAntimatterDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernAntimatterDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernAntimatterDimensionRow.vue?vue&type=style&index=0&id=e93a3710&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e93a3710\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"reset-container galaxy\"},[_c('h4',[_vm._v(_vm._s(_vm.typeName)+\" (\"+_vm._s(_vm.sumText)+\")\")]),(_vm.showText)?_c('span',[_vm._v(\"Requires: \"+_vm._s(_vm.formatInt(_vm.requirement.amount))+\" \"+_vm._s(_vm.dimName)+\" Antimatter D\")]):_vm._e(),(_vm.hasIncreasedScaling)?_c('span',[_vm._v(_vm._s(_vm.costScalingText))]):_vm._e(),_c('button',{class:_vm.classObject,on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.buyGalaxy(true)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.buyGalaxy(false)}]}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \"),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernAntimatterGalaxyRow.vue?vue&type=template&id=a09bf5a0&\"\nimport script from \"./ModernAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"reset-container dimboost\"},[_c('h4',[_vm._v(_vm._s(_vm.typeName)+\" (\"+_vm._s(_vm.boostCountText)+\")\")]),(_vm.seeText)?_c('span',[_vm._v(\"Requires: \"+_vm._s(_vm.formatInt(_vm.requirement.amount))+\" \"+_vm._s(_vm.dimName)+\" Antimatter Dimensions\")]):_vm._e(),(_vm.scaledBoost)?_c('span',[_vm._v(\"Dimension Boost cost scaling increases past \"+_vm._s(_vm.format(_vm.scaledBoostStart, 2, 2))+\" Dimension Boosts\")]):_vm._e(),_c('button',{class:_vm.classObject,on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.dimensionBoost(true)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.dimensionBoost(false)}]}},[_vm._v(\" \"+_vm._s(_vm.unlockedByBoost)+\" \"),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernDimensionBoostRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernDimensionBoostRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernDimensionBoostRow.vue?vue&type=template&id=0b45bb72&\"\nimport script from \"./ModernDimensionBoostRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernDimensionBoostRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernAntimatterDimensionsTab.vue?vue&type=template&id=38071904&scoped=true&\"\nimport script from \"./ModernAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernAntimatterDimensionsTab.vue?vue&type=style&index=0&id=38071904&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"38071904\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-classic-antimatter-dim-tab\"},[_c('AntimatterDimensionsTabHeader'),_vm._v(\" \"+_vm._s(_vm.multiplierText)+\" \"),_c('TickspeedRow'),_c('div',{staticClass:\"l-dimensions-container\"},[_vm._l((8),function(tier){return _c('AntimatterDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),_c('DimensionBoostRow'),_c('AntimatterGalaxyRow')],2),(_vm.isQuickResetAvailable)?_c('PrimaryButton',{staticClass:\"o-primary-btn--quick-reset\",on:{\"click\":_vm.quickReset}},[_vm._v(\" Perform a Dimension Boost reset \"),(_vm.hasDimensionBoosts)?_c('span',[_vm._v(\" but lose a Dimension Boost\")]):_c('span',[_vm._v(\" for no gain\")])]):_vm._e(),_c('div',{staticClass:\"l-flex\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row c-antimatter-dim-row l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 2),\"amount-text\":_vm.amountText,\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container\"},[(!_vm.isContinuumActive)?_c('PrimaryButton',{class:_vm.buySingleClass,attrs:{\"enabled\":_vm.isAffordable && !_vm.isCapped && _vm.isUnlocked},on:{\"click\":_vm.buySingle}},[_c('div',{class:_vm.tutorialClass()},[_vm._v(\" \"+_vm._s(_vm.singleText)+\" \")]),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.boughtTooltip)+\" \")]),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e(),_c('PrimaryButton',{class:_vm.buyTenClass,attrs:{\"enabled\":(_vm.isAffordableUntil10 || _vm.isContinuumActive) && !_vm.isCapped && _vm.isUnlocked},on:{\"click\":_vm.buyUntil10}},[_vm._v(\" \"+_vm._s(_vm.until10Text)+\" \"),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.boughtTooltip)+\" \")])])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismAntimatterDimensionRow.vue?vue&type=template&id=3019072b&scoped=true&\"\nimport script from \"./SynergismAntimatterDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismAntimatterDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismAntimatterDimensionRow.vue?vue&type=style&index=0&id=3019072b&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3019072b\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-antimatter-dim-tab__header\"},[_c('PrimaryButton',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isSacrificeUnlocked),expression:\"isSacrificeUnlocked\"},{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.sacrificeTooltip),expression:\"sacrificeTooltip\"}],staticClass:\"o-primary-btn--sacrifice\",attrs:{\"enabled\":_vm.isSacrificeAffordable},on:{\"click\":_vm.sacrifice}},[(_vm.isSacrificeAffordable)?_c('span',[_vm._v(\" Dimensional Sacrifice (\"+_vm._s(_vm.formatX(_vm.sacrificeBoost, 2, 2))+\") \")]):_c('span',[_vm._v(\" Dimensional Sacrifice Disabled (\"+_vm._s(_vm.disabledCondition)+\") \")])]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-max\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all (M) \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismAntimatterDimensionsTabHeader.vue?vue&type=template&id=581bdae2&\"\nimport script from \"./SynergismAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismAntimatterDimensionsTabHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-dimension-row c-antimatter-dim-row c-antimatter-prestige-row\"},[_c('div',{staticClass:\"l-dim-row__prestige-text c-dim-row__label c-dim-row__label--amount l-text-wrapper\"},[_vm._v(\" \"+_vm._s(_vm.typeName)+\" (\"+_vm._s(_vm.sumText)+\"): requires \"+_vm._s(_vm.formatInt(_vm.requirement.amount))+\" \"+_vm._s(_vm.dimName)+\" Dimensions \"),_c('div',{staticClass:\"l-scaling-text-wrapper\"},[_vm._v(\" \"+_vm._s(_vm.hasIncreasedScaling ? _vm.costScalingText : \"\")+\" \")])]),_c('PrimaryButton',{class:_vm.classObject,attrs:{\"enabled\":_vm.canBeBought},on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.buyGalaxy(true)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.buyGalaxy(false)}]}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \"),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismAntimatterGalaxyRow.vue?vue&type=template&id=779c0d24&scoped=true&\"\nimport script from \"./SynergismAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismAntimatterGalaxyRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismAntimatterGalaxyRow.vue?vue&type=style&index=0&id=779c0d24&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"779c0d24\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-dimension-row c-antimatter-dim-row c-antimatter-prestige-row\"},[_c('div',{staticClass:\"l-dim-row__prestige-text c-dim-row__label c-dim-row__label--amount\"},[_vm._v(\" \"+_vm._s(_vm.boostScale)+\" Dimension Boost (\"+_vm._s(_vm.boostCountText)+\") \"+_vm._s(_vm.dimRequirementText)+\" \")]),_c('PrimaryButton',{class:_vm.classObject,attrs:{\"enabled\":_vm.isBuyable},on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.dimensionBoost(true)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.dimensionBoost(false)}]}},[_vm._v(\" \"+_vm._s(_vm.unlockedByBoost)+\" \"),(_vm.hasTutorial)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismDimensionBoostRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismDimensionBoostRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismDimensionBoostRow.vue?vue&type=template&id=440f8a9a&\"\nimport script from \"./SynergismDimensionBoostRow.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismDimensionBoostRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SynergismAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SynergismAntimatterDimensionsTab.vue?vue&type=template&id=50df59c7&scoped=true&\"\nimport script from \"./SynergismAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./SynergismAntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SynergismAntimatterDimensionsTab.vue?vue&type=style&index=0&id=50df59c7&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"50df59c7\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AntimatterDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AntimatterDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AntimatterDimensionsTab.vue?vue&type=template&id=64077ec9&\"\nimport script from \"./AntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./AntimatterDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-autobuyers-tab\"},[_c('AutobuyerToggles'),_c('OpenModalHotkeysButton'),(_vm.hasSeenGamespeedAlteringEffects)?_c('div',[_vm._v(\" Autobuyer intervals and time-based settings are always \"),_c('b',[_vm._v(\"real time\")]),_vm._v(\" and therefore \"),_c('br'),_vm._v(\" unaffected by anything which may alter how fast the game itself is running. \"),_c('br'),_c('br')]):_vm._e(),(!_vm.hasInfinity)?_c('div',[_vm._v(\" Challenges for upgrading autobuyers are unlocked by reaching Infinity. \")]):_vm._e(),_c('b',[_vm._v(\"Autobuyers with no displayed bulk have unlimited bulk by default.\")]),_c('b',[_vm._v(\" Antimatter Dimension Autobuyers can have their bulk upgraded once interval is below \"+_vm._s(_vm.formatInt(100))+\" ms. \")]),(_vm.hasInstant)?_c('b',[_vm._v(\"Autobuyers with \\\"Instant\\\" interval will trigger every game tick (\"+_vm._s(_vm.gameTickLength)+\").\")]):_vm._e(),_c('MendingAutobuyerBox',{staticClass:\"c-mending-pos\"}),_c('RealityAutobuyerBox',{staticClass:\"c-reality-pos\"}),_c('EternityAutobuyerBox',{staticClass:\"c-eternity-pos\"}),_c('BigCrunchAutobuyerBox',{staticClass:\"c-infinity-pos\"}),_c('GalaxyAutobuyerBox'),_c('DimensionBoostAutobuyerBox'),(!_vm.hasContinuum)?_c('TickspeedAutobuyerBox'):_vm._e(),(_vm.displayADAutobuyersIndividually)?_vm._l((8),function(tier){return _c('DimensionAutobuyerBox',{key:tier,attrs:{\"tier\":tier}})}):_vm._e(),_c('SimpleAutobuyersMultiBox')],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"on\":\"Pause autobuyers\",\"off\":\"Resume autobuyers\"},model:{value:(_vm.autobuyersOn),callback:function ($$v) {_vm.autobuyersOn=$$v},expression:\"autobuyersOn\"}}),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":function($event){return _vm.toggleAllAutobuyers()}}},[_vm._v(\" \"+_vm._s(_vm.allAutobuyersDisabled ? \"Enable\" : \"Disable\")+\" all autobuyers \")]),(_vm.continuumDisabled)?_c('span',[(_vm.showContinuum)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\"},[_vm._v(\" Continuum is disabled \")]):_vm._e()],1):_c('span',[(_vm.showContinuum)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"on\":\"Enable Continuum\",\"off\":\"Disable Continuum\"},model:{value:(_vm.disableContinuum),callback:function ($$v) {_vm.disableContinuum=$$v},expression:\"disableContinuum\"}}):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerToggles.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerToggles.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerToggles.vue?vue&type=template&id=77b301a0&scoped=true&\"\nimport script from \"./AutobuyerToggles.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerToggles.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"77b301a0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"show-interval\":!_vm.postBreak,\"is-modal\":_vm.isModal,\"name\":\"Automatic Big Crunch\"},scopedSlots:_vm._u([(!_vm.hasMaxedInterval)?{key:\"intervalSlot\",fn:function(){return [_c('AutobuyerIntervalButton',{attrs:{\"autobuyer\":_vm.autobuyer}})]},proxy:true}:(_vm.postBreak)?{key:\"intervalSlot\",fn:function(){return [(_vm.hasAdditionalModes)?_c('ExpandingControlBox',{attrs:{\"auto-close\":true},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"o-primary-btn c-autobuyer-box__mode-select c-autobuyer-box__mode-select-header\"},[_vm._v(\" ▼ Current Setting: ▼ \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.modeName(_vm.mode))+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('AutobuyerDropdownEntry',{attrs:{\"autobuyer\":_vm.autobuyer,\"modes\":_vm.modes,\"mode-name-fn\":_vm.modeName}})]},proxy:true}],null,false,2761615181)}):_c('span',[_vm._v(\" \"+_vm._s(_vm.modeProps(_vm.mode).title)+\": \")])]},proxy:true}:null,(_vm.postBreak)?{key:\"toggleSlot\",fn:function(){return [_c('AutobuyerInput',_vm._b({key:_vm.mode,attrs:{\"autobuyer\":_vm.autobuyer}},'AutobuyerInput',_vm.modeProps(_vm.mode).input,false))]},proxy:true}:null,(_vm.postBreak && _vm.mode === _vm.amountMode)?{key:\"checkboxSlot\",fn:function(){return [_c('label',{staticClass:\"o-autobuyer-toggle-checkbox o-clickable\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.increaseWithMult),expression:\"increaseWithMult\"}],staticClass:\"o-clickable\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.increaseWithMult)?_vm._i(_vm.increaseWithMult,null)>-1:(_vm.increaseWithMult)},on:{\"change\":function($event){var $$a=_vm.increaseWithMult,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.increaseWithMult=$$a.concat([$$v]))}else{$$i>-1&&(_vm.increaseWithMult=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.increaseWithMult=$$c}}}}),_vm._v(\" Dynamic amount \")])]},proxy:true}:null],null,true)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked || _vm.isBought)?_c('div',{class:_vm.autobuyerBoxRowClass},[_c('div',{staticClass:\"l-autobuyer-box__header\"},[_vm._v(\" \"+_vm._s(_vm.name)+\" \"),(_vm.showInterval)?_c('AutobuyerIntervalLabel',{attrs:{\"autobuyer\":_vm.autobuyer}}):_vm._e(),(_vm.isShowingStateInfo)?_c('div',[_vm._v(\" \"+_vm._s(_vm.extraInfo)+\" \")]):_vm._e()],1),_c('div',{staticClass:\"c-autobuyer-box-row__intervalSlot\"},[_vm._t(\"intervalSlot\")],2),_c('div',{staticClass:\"c-autobuyer-box-row__toggleSlot\"},[_vm._t(\"toggleSlot\")],2),_c('div',{staticClass:\"c-autobuyer-box-row__checkboxSlot\"},[_vm._t(\"checkboxSlot\")],2),_c('div',{staticClass:\"c-autobuyer-box-row__optionSlot\"},[_vm._t(\"optionSlot\")],2),_c('div',{staticClass:\"l-autobuyer-box__footer\",on:{\"click\":_vm.toggle}},[_c('label',{class:_vm.autobuyerStateClass},[_c('span',{class:_vm.autobuyerToggleClass})]),_c('input',{attrs:{\"disabled\":!_vm.globalToggle,\"name\":_vm.name,\"type\":\"checkbox\"},domProps:{\"checked\":_vm.isActive && _vm.globalToggle}})])]):(_vm.canBeBought)?_c('div',{class:_vm.autobuyerBuyBoxClass,on:{\"click\":_vm.purchase}},[_vm._v(\" \"+_vm._s(_vm.name)+\" \"),_c('br'),_vm._v(\" Requirement: \"+_vm._s(_vm.format(_vm.antimatterCost))+\" Total Antimatter \"+_vm._s(_vm.showEternity)+\" \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-autobuyer-box__small-text\"},[_vm._v(\" Current interval: \"+_vm._s(_vm.intervalText)+\" \"),(_vm.isShowingBulk)?_c('span',[_c('br'),_vm._v(\" \"+_vm._s(_vm.bulkText)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerIntervalLabel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerIntervalLabel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerIntervalLabel.vue?vue&type=template&id=7b5058aa&scoped=true&\"\nimport script from \"./AutobuyerIntervalLabel.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerIntervalLabel.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7b5058aa\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerBox.vue?vue&type=template&id=9b85a9f2&scoped=true&\"\nimport script from \"./AutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9b85a9f2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._l((_vm.modes),function(optionMode){return _c('div',{key:optionMode,staticClass:\"o-primary-btn c-autobuyer-box__mode-select l-autobuyer-choice\",attrs:{\"value\":optionMode},on:{\"click\":function($event){return _vm.changeMode(optionMode)}}},[_vm._v(\" \"+_vm._s(_vm.modeNameFn(optionMode))+\" \")])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerDropdownEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerDropdownEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerDropdownEntry.vue?vue&type=template&id=b8f762d6&scoped=true&\"\nimport script from \"./AutobuyerDropdownEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerDropdownEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutobuyerDropdownEntry.vue?vue&type=style&index=0&id=b8f762d6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b8f762d6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isMaxed && _vm.isUpgradeable)?_c('button',{class:_vm.classObject,on:{\"click\":_vm.upgradeInterval}},[_vm._v(\" \"+_vm._s(_vm.formatPercents(0.4))+\" smaller interval \"),_c('br'),_vm._v(\" Cost: \"+_vm._s(_vm.format(_vm.cost, 2))+\" IP \")]):(!_vm.isMaxed)?_c('button',{staticClass:\"o-autobuyer-btn l-autobuyer-box__button o-autobuyer-btn--unavailable\"},[_vm._v(\" Complete the challenge to upgrade interval \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerIntervalButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerIntervalButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerIntervalButton.vue?vue&type=template&id=6e92c4ea&scoped=true&\"\nimport script from \"./AutobuyerIntervalButton.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerIntervalButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6e92c4ea\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {{ modeProps(mode).title }}:\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Dynamic amount\r\n \r\n \r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BigCrunchAutobuyerBox.vue?vue&type=template&id=d66a5b9a&scoped=true&\"\nimport script from \"./BigCrunchAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./BigCrunchAutobuyerBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BigCrunchAutobuyerBox.vue?vue&type=style&index=0&id=d66a5b9a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d66a5b9a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"name\":_vm.name,\"show-interval\":\"\"},scopedSlots:_vm._u([{key:\"intervalSlot\",fn:function(){return [_c('DimensionBulkButton',{attrs:{\"autobuyer\":_vm.autobuyer}}),_c('AutobuyerIntervalButton',{attrs:{\"autobuyer\":_vm.autobuyer}})]},proxy:true},{key:\"toggleSlot\",fn:function(){return [_c('button',{staticClass:\"o-autobuyer-btn\",on:{\"click\":_vm.toggleMode}},[_vm._v(\" \"+_vm._s(_vm.modeDisplay)+\" \")])]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasMaxedInterval && !_vm.bulkUnlimited && _vm.isUnlocked)?_c('button',{class:_vm.classObject,on:{\"click\":_vm.upgradeBulk}},[_c('span',[_vm._v(_vm._s(_vm.bulkDisplay))]),(!_vm.hasMaxedBulk)?[_c('br'),_c('span',[_vm._v(\"Cost: \"+_vm._s(_vm.format(_vm.cost, 2, 0))+\" IP\")])]:_vm._e()],2):(_vm.hasMaxedInterval && !_vm.bulkUnlimited)?_c('button',{staticClass:\"o-autobuyer-btn l-autobuyer-box__button o-autobuyer-btn--unavailable\"},[_vm._v(\" Complete the challenge to upgrade bulk \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionBulkButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionBulkButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DimensionBulkButton.vue?vue&type=template&id=67bb427e&scoped=true&\"\nimport script from \"./DimensionBulkButton.vue?vue&type=script&lang=js&\"\nexport * from \"./DimensionBulkButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DimensionBulkButton.vue?vue&type=style&index=0&id=67bb427e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"67bb427e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DimensionAutobuyerBox.vue?vue&type=template&id=4ab9243a&scoped=true&\"\nimport script from \"./DimensionAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./DimensionAutobuyerBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4ab9243a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"is-modal\":_vm.isModal,\"show-interval\":!_vm.isBuyMaxUnlocked,\"name\":\"Automatic Dimension Boosts\"},scopedSlots:_vm._u([(!_vm.hasMaxedInterval)?{key:\"intervalSlot\",fn:function(){return [_c('AutobuyerIntervalButton',{attrs:{\"autobuyer\":_vm.autobuyer}})]},proxy:true}:(_vm.isBuyMaxUnlocked)?{key:\"intervalSlot\",fn:function(){return [_c('div',{staticClass:\"c-autobuyer-box__small-text\"},[_c('br'),_vm._v(\" Activates every X seconds: \")]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":\"float\",\"property\":\"buyMaxInterval\"}})]},proxy:true}:null,(!_vm.isBuyMaxUnlocked)?{key:\"checkboxSlot\",fn:function(){return [_c('label',{staticClass:\"o-autobuyer-toggle-checkbox c-autobuyer-box__small-text l-top-margin o-clickable\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.limitDimBoosts),expression:\"limitDimBoosts\"}],staticClass:\"o-clickable\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.limitDimBoosts)?_vm._i(_vm.limitDimBoosts,null)>-1:(_vm.limitDimBoosts)},on:{\"change\":function($event){var $$a=_vm.limitDimBoosts,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.limitDimBoosts=$$a.concat([$$v]))}else{$$i>-1&&(_vm.limitDimBoosts=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.limitDimBoosts=$$c}}}}),_vm._v(\" Limit Dimension Boosts to: \")]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":\"int\",\"property\":\"maxDimBoosts\"}})]},proxy:true}:null,{key:\"toggleSlot\",fn:function(){return [_c('label',{staticClass:\"o-autobuyer-toggle-checkbox c-autobuyer-box__small-text l-autobuyer-text-area o-clickable\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.limitUntilGalaxies),expression:\"limitUntilGalaxies\"}],staticClass:\"o-clickable\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.limitUntilGalaxies)?_vm._i(_vm.limitUntilGalaxies,null)>-1:(_vm.limitUntilGalaxies)},on:{\"change\":function($event){var $$a=_vm.limitUntilGalaxies,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.limitUntilGalaxies=$$a.concat([$$v]))}else{$$i>-1&&(_vm.limitUntilGalaxies=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.limitUntilGalaxies=$$c}}}}),(_vm.isBuyMaxUnlocked)?_c('span',[_vm._v(\" Only Dimboost to unlock new\"),_c('br'),_vm._v(\" Dimensions until X Galaxies: \")]):_c('span',[_vm._v(\" Galaxies required to always\"),_c('br'),_vm._v(\" Dimboost, ignoring the limit: \")])]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":\"int\",\"property\":\"galaxies\"}})]},proxy:true}],null,true)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n \r\n
\r\n Activates every X seconds:\r\n \r\n \r\n \r\n \r\n \r\n \r\n Limit Dimension Boosts to:\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionBoostAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionBoostAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DimensionBoostAutobuyerBox.vue?vue&type=template&id=b44dddb8&scoped=true&\"\nimport script from \"./DimensionBoostAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./DimensionBoostAutobuyerBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DimensionBoostAutobuyerBox.vue?vue&type=style&index=0&id=b44dddb8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b44dddb8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"is-modal\":_vm.isModal,\"name\":\"Automatic Eternity\"},scopedSlots:_vm._u([{key:\"intervalSlot\",fn:function(){return [(_vm.hasAdditionalModes)?_c('ExpandingControlBox',{attrs:{\"auto-close\":true},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"o-primary-btn c-autobuyer-box__mode-select c-autobuyer-box__mode-select-header\"},[_vm._v(\" ▼ Current Setting: ▼ \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.modeName(_vm.mode))+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('AutobuyerDropdownEntry',{attrs:{\"autobuyer\":_vm.autobuyer,\"modes\":_vm.modes,\"mode-name-fn\":_vm.modeName}})]},proxy:true}],null,false,2761615181)}):_c('span',[_vm._v(_vm._s(_vm.modeProps(_vm.mode).title)+\":\")])]},proxy:true},{key:\"toggleSlot\",fn:function(){return [_c('AutobuyerInput',_vm._b({key:_vm.mode,attrs:{\"autobuyer\":_vm.autobuyer}},'AutobuyerInput',_vm.modeProps(_vm.mode).input,false))]},proxy:true},(_vm.mode === _vm.amountMode)?{key:\"checkboxSlot\",fn:function(){return [_c('label',{staticClass:\"o-autobuyer-toggle-checkbox o-clickable\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.increaseWithMult),expression:\"increaseWithMult\"}],staticClass:\"o-clickable\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.increaseWithMult)?_vm._i(_vm.increaseWithMult,null)>-1:(_vm.increaseWithMult)},on:{\"change\":function($event){var $$a=_vm.increaseWithMult,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.increaseWithMult=$$a.concat([$$v]))}else{$$i>-1&&(_vm.increaseWithMult=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.increaseWithMult=$$c}}}}),_vm._v(\" Dynamic amount \")])]},proxy:true}:null],null,true)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityAutobuyerBox.vue?vue&type=template&id=56211cc8&scoped=true&\"\nimport script from \"./EternityAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityAutobuyerBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EternityAutobuyerBox.vue?vue&type=style&index=0&id=56211cc8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"56211cc8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"is-modal\":_vm.isModal,\"name\":\"Automatic Antimatter Galaxies\",\"show-interval\":!_vm.isBuyMaxUnlocked},scopedSlots:_vm._u([(!_vm.hasMaxedInterval)?{key:\"intervalSlot\",fn:function(){return [_c('AutobuyerIntervalButton',{attrs:{\"autobuyer\":_vm.autobuyer}})]},proxy:true}:(_vm.isBuyMaxUnlocked)?{key:\"intervalSlot\",fn:function(){return [_c('div',{staticClass:\"c-autobuyer-box__small-text\"},[_vm._v(\" Activates every X seconds: \")]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":\"float\",\"property\":\"buyMaxInterval\"}})]},proxy:true}:null,{key:_vm.limitGalaxiesSlot,fn:function(){return [_c('label',{staticClass:\"o-autobuyer-toggle-checkbox c-autobuyer-box__small-text o-clickable\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.limitGalaxies),expression:\"limitGalaxies\"}],staticClass:\"o-clickable\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.limitGalaxies)?_vm._i(_vm.limitGalaxies,null)>-1:(_vm.limitGalaxies)},on:{\"change\":function($event){var $$a=_vm.limitGalaxies,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.limitGalaxies=$$a.concat([$$v]))}else{$$i>-1&&(_vm.limitGalaxies=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.limitGalaxies=$$c}}}}),_vm._v(\" Limit Antimatter Galaxies to: \")]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":\"int\",\"property\":\"maxGalaxies\"}})]},proxy:true}],null,true)})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n
\r\n Activates every X seconds:\r\n
\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GalaxyAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GalaxyAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GalaxyAutobuyerBox.vue?vue&type=template&id=0e9d22c8&scoped=true&\"\nimport script from \"./GalaxyAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./GalaxyAutobuyerBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GalaxyAutobuyerBox.vue?vue&type=style&index=0&id=0e9d22c8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0e9d22c8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',{staticClass:\"c-options-tab__hotkeys-link\",on:{\"click\":_vm.handleClick}},[_vm._v(\" Press \"),_c('kbd',[_vm._v(\"?\")]),_vm._v(\" to open the hotkey list. \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OpenModalHotkeysButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OpenModalHotkeysButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OpenModalHotkeysButton.vue?vue&type=template&id=37c5e42f&\"\nimport script from \"./OpenModalHotkeysButton.vue?vue&type=script&lang=js&\"\nexport * from \"./OpenModalHotkeysButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"is-modal\":_vm.isModal,\"name\":\"Automatic Reality\"},scopedSlots:_vm._u([{key:\"intervalSlot\",fn:function(){return [_c('ExpandingControlBox',{attrs:{\"auto-close\":true},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"o-primary-btn c-autobuyer-box__mode-select c-autobuyer-box__mode-select-header\"},[_vm._v(\" ▼ Current Setting: ▼ \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.modeName(_vm.mode))+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('AutobuyerDropdownEntry',{attrs:{\"autobuyer\":_vm.autobuyer,\"modes\":_vm.modes,\"mode-name-fn\":_vm.modeName}})]},proxy:true}])})]},proxy:true},{key:\"toggleSlot\",fn:function(){return [(_vm.hasAlternateInputs)?_c('div',[_vm._v(\" Target Time (seconds): \")]):_c('div',[_vm._v(\" Target Reality Machines: \")]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":_vm.hasAlternateInputs ? 'float' : 'decimal',\"property\":_vm.hasAlternateInputs ? 'time' : 'rm'}})]},proxy:true},{key:\"checkboxSlot\",fn:function(){return [(_vm.hasAlternateInputs && _vm.hasRelicMode)?_c('div',[_vm._v(\" Target Relic Shards: \")]):_c('div',[_vm._v(\" Target Glyph level: \")]),_c('AutobuyerInput',{attrs:{\"autobuyer\":_vm.autobuyer,\"type\":(_vm.hasAlternateInputs && false) ? 'decimal' : 'int',\"property\":(_vm.hasAlternateInputs && _vm.hasRelicMode) ? 'shard' : 'glyph'}}),(_vm.isOverCap)?_c('div',[_vm._v(\" Autobuyer will trigger at the Glyph level cap of \"+_vm._s(_vm.formatInt(_vm.levelCap))+\". \")]):_vm._e()]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityAutobuyerBox.vue?vue&type=template&id=cd0202d8&scoped=true&\"\nimport script from \"./RealityAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityAutobuyerBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cd0202d8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"l-autobuyers-tab\"},[_vm._l((_vm.multiple),function(type,id){return _c('MultipleAutobuyersBox',{key:id,attrs:{\"type\":type}})}),_c('MultipleSingleAutobuyersGroup')],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showAutobuyers && !(_vm.isADBox && _vm.continuumActive))?_c('span',{staticClass:\"c-autobuyer-box-row\"},[_c('AutobuyerGroupToggleLabel',{attrs:{\"is-active\":_vm.parentActive,\"name\":_vm.name},on:{\"click\":_vm.toggleGroup}}),_c('div',{staticClass:\"l-autobuyer-box__title\"},[_vm._v(\" \"+_vm._s(_vm.name)),_c('br'),_vm._v(\"Autobuyers \"),(_vm.displayLabelAsGroup)?_c('AutobuyerIntervalLabel',{attrs:{\"autobuyer\":_vm.autobuyers[0]}}):_vm._e()],1),_c('div',{staticClass:\"l-autobuyer-box__autobuyers\"},[_vm._l((_vm.autobuyers),function(autobuyer,id){return [_c('SingleAutobuyerInRow',{key:id,staticClass:\"l-autobuyer-box__autobuyers-internal\",style:(_vm.boxSize),attrs:{\"autobuyer\":autobuyer,\"show-individual\":!_vm.displayLabelAsGroup,\"parent-disabled\":!_vm.parentActive}}),(id % _vm.entryCountPerRow === _vm.entryCountPerRow)?_c('br',{key:id}):_vm._e()]})],2)],1):(_vm.isADBox && _vm.continuumActive)?_c('span',{staticClass:\"c-autobuyer-box-row\"},[_vm._v(\" Continuum replaces your Antimatter Dimension and Tickspeed Autobuyers, as your production multipliers \"),_c('br'),_vm._v(\" now automatically and continuously scale based on how many purchases you would have had otherwise. \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerToggleLabel',{attrs:{\"is-active\":_vm.isActive,\"is-disabled\":_vm.isDisabled,\"name\":_vm.name},on:{\"click\":_vm.emitClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-autobuyer-box__footer\",on:{\"click\":_vm.emitClick}},[_c('label',{class:_vm.autobuyerStateClass},[_c('span',{class:_vm.autobuyerToggleClass})]),_c('input',{attrs:{\"disabled\":_vm.isDisabled,\"name\":_vm.name,\"type\":\"checkbox\"},domProps:{\"checked\":_vm.isActive && !_vm.isDisabled}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerToggleLabel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerToggleLabel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerToggleLabel.vue?vue&type=template&id=3e71e566&scoped=true&\"\nimport script from \"./AutobuyerToggleLabel.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerToggleLabel.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3e71e566\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerGroupToggleLabel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerGroupToggleLabel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerGroupToggleLabel.vue?vue&type=template&id=083b4b97&scoped=true&\"\nimport script from \"./AutobuyerGroupToggleLabel.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerGroupToggleLabel.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"083b4b97\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('span',{staticClass:\"c-autobuyer-box-slot\"},[_c('AutobuyerSingleToggleLabel',{attrs:{\"autobuyer\":_vm.autobuyer,\"parent-disabled\":_vm.parentDisabled}}),_vm._v(\" \"+_vm._s(_vm.name)+\" \"),(_vm.showIndividual)?_c('AutobuyerIntervalLabel',{attrs:{\"autobuyer\":_vm.autobuyer}}):_vm._e(),(_vm.hasMode)?_c('AutobuyerModeButton',{attrs:{\"autobuyer\":_vm.autobuyer}}):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"o-autobuyer-btn o-autobuyer-btn--tiny\",on:{\"click\":_vm.toggleMode}},[_vm._v(\" \"+_vm._s(_vm.modeDisplay)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerModeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerModeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerModeButton.vue?vue&type=template&id=3ab114db&scoped=true&\"\nimport script from \"./AutobuyerModeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerModeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3ab114db\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerToggleLabel',{attrs:{\"is-active\":_vm.isActive,\"is-disabled\":_vm.isDisabled,\"name\":_vm.name},on:{\"click\":_vm.toggle}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerSingleToggleLabel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerSingleToggleLabel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerSingleToggleLabel.vue?vue&type=template&id=311f081c&scoped=true&\"\nimport script from \"./AutobuyerSingleToggleLabel.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerSingleToggleLabel.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"311f081c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleAutobuyerInRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleAutobuyerInRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingleAutobuyerInRow.vue?vue&type=template&id=629cb6b8&scoped=true&\"\nimport script from \"./SingleAutobuyerInRow.vue?vue&type=script&lang=js&\"\nexport * from \"./SingleAutobuyerInRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"629cb6b8\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n \r\n
\r\n \r\n Continuum replaces your Antimatter Dimension and Tickspeed Autobuyers, as your production multipliers\r\n
\r\n now automatically and continuously scale based on how many purchases you would have had otherwise.\r\n
\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultipleAutobuyersBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultipleAutobuyersBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MultipleAutobuyersBox.vue?vue&type=template&id=0fd417d9&scoped=true&\"\nimport script from \"./MultipleAutobuyersBox.vue?vue&type=script&lang=js&\"\nexport * from \"./MultipleAutobuyersBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0fd417d9\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"l-autobuyer-singlet-group\"},[_vm._l((_vm.singles),function(type,id){return [_c('SingleAutobuyerBox',{key:id,style:(_vm.boxSize),attrs:{\"autobuyer\":type}}),(id % _vm.entryCountPerRow === _vm.entryCountPerRow)?_c('br',{key:id}):_vm._e()]})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('span',{staticClass:\"c-autobuyer-box-row\"},[_c('AutobuyerSingleToggleLabel',{attrs:{\"autobuyer\":_vm.autobuyer}}),_c('div',[_vm._v(\" \"+_vm._s(_vm.name)+\" \"),_c('AutobuyerIntervalLabel',{attrs:{\"autobuyer\":_vm.autobuyer}}),(_vm.autobuyer.hasInput)?_c('span',{staticClass:\"c-autobuyer-box__small-text\"},[_vm._v(\" \"+_vm._s(_vm.description)+\": \"),_c('AutobuyerInput',{staticClass:\"c-small-autobuyer-input\",attrs:{\"autobuyer\":_vm.autobuyer,\"type\":_vm.autobuyer.inputType,\"property\":_vm.autobuyer.inputEntry}})],1):_vm._e()],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingleAutobuyerBox.vue?vue&type=template&id=0b0e6412&scoped=true&\"\nimport script from \"./SingleAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./SingleAutobuyerBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b0e6412\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n
\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultipleSingleAutobuyersGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultipleSingleAutobuyersGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MultipleSingleAutobuyersGroup.vue?vue&type=template&id=59ad48ab&scoped=true&\"\nimport script from \"./MultipleSingleAutobuyersGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./MultipleSingleAutobuyersGroup.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"59ad48ab\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SimpleAutobuyersMultiBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SimpleAutobuyersMultiBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SimpleAutobuyersMultiBox.vue?vue&type=template&id=2bc353a8&scoped=true&\"\nimport script from \"./SimpleAutobuyersMultiBox.vue?vue&type=script&lang=js&\"\nexport * from \"./SimpleAutobuyersMultiBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2bc353a8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"name\":\"Tickspeed Autobuyer\",\"show-interval\":\"\"},scopedSlots:_vm._u([{key:\"intervalSlot\",fn:function(){return [_c('AutobuyerIntervalButton',{attrs:{\"autobuyer\":_vm.autobuyer}})]},proxy:true},{key:\"toggleSlot\",fn:function(){return [(_vm.isUnlocked)?_c('button',{staticClass:\"o-autobuyer-btn\",on:{\"click\":_vm.toggleMode}},[_vm._v(\" \"+_vm._s(_vm.modeDisplay)+\" \")]):_c('button',{staticClass:\"o-autobuyer-btn o-autobuyer-btn--unavailable\"},[_vm._v(\" Complete the challenge to change mode \")])]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TickspeedAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TickspeedAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TickspeedAutobuyerBox.vue?vue&type=template&id=c3aa3a12&scoped=true&\"\nimport script from \"./TickspeedAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./TickspeedAutobuyerBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c3aa3a12\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AutobuyerBox',{attrs:{\"autobuyer\":_vm.autobuyer,\"show-interval\":false,\"is-modal\":_vm.isModal,\"name\":\"Automatic Mends\"},scopedSlots:_vm._u([{key:\"intervalSlot\",fn:function(){return [(_vm.hasAdditionalModes)?_c('ExpandingControlBox',{attrs:{\"auto-close\":true},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"o-primary-btn c-autobuyer-box__mode-select c-autobuyer-box__mode-select-header\"},[_vm._v(\" ▼ Current Setting: ▼ \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.modeName(_vm.mode))+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('AutobuyerDropdownEntry',{attrs:{\"autobuyer\":_vm.autobuyer,\"modes\":_vm.modes,\"mode-name-fn\":_vm.modeName}})]},proxy:true}],null,false,2761615181)}):_c('span',[_vm._v(\" \"+_vm._s(_vm.modeProps(_vm.mode).title)+\": \")])]},proxy:true},{key:\"toggleSlot\",fn:function(){return [_c('AutobuyerInput',_vm._b({key:_vm.mode,attrs:{\"autobuyer\":_vm.autobuyer}},'AutobuyerInput',_vm.modeProps(_vm.mode).input,false))]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingAutobuyerBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingAutobuyerBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingAutobuyerBox.vue?vue&type=template&id=5d2d53ac&scoped=true&\"\nimport script from \"./MendingAutobuyerBox.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingAutobuyerBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MendingAutobuyerBox.vue?vue&type=style&index=0&id=5d2d53ac&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5d2d53ac\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyersTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyersTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyersTab.vue?vue&type=template&id=2cf6e922&scoped=true&\"\nimport script from \"./AutobuyersTab.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyersTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutobuyersTab.vue?vue&type=style&index=0&id=2cf6e922&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2cf6e922\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator-tab l-automator-tab\",class:_vm.tabClass},[(_vm.automatorUnlocked)?_c('div',[_c('div',[_vm._v(\" \"+_vm._s(_vm.intervalText)+\" \")]),_c('span',{class:{ 'c-overlimit': _vm.currentChars > _vm.maxScriptChars }},[_vm._v(\" This script: \"+_vm._s(_vm.formatInt(_vm.currentChars))+\" / \"+_vm._s(_vm.formatInt(_vm.maxScriptChars))+\" \")]),_vm._v(\" | \"),_c('span',{class:{ 'c-overlimit': _vm.totalChars > _vm.maxTotalChars }},[_vm._v(\" Across all scripts: \"+_vm._s(_vm.formatInt(_vm.totalChars))+\" / \"+_vm._s(_vm.formatInt(_vm.maxTotalChars))+\" \")]),_c('br'),(!_vm.withinLimit)?_c('span',{staticClass:\"c-overlimit\"},[_vm._v(\" (Your changes will not be saved due to being over a character limit!) \")]):_vm._e(),_c('div',{staticClass:\"c-automator-split-pane\"},[_c('SplitPane',{attrs:{\"min-percent\":44,\"default-percent\":50,\"split\":\"vertical\"},scopedSlots:_vm._u([{key:\"paneL\",fn:function(){return [_c('AutomatorEditor')]},proxy:true},{key:\"paneR\",fn:function(){return [_c('AutomatorDocs')]},proxy:true}],null,false,3115218829)})],1)]):_c('AutomatorPointsList')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-automator-pane\"},[_c('AutomatorControls'),(_vm.isTextAutomator)?_c('AutomatorTextEditor',{attrs:{\"current-script-id\":_vm.currentScriptID}}):_vm._e(),(!_vm.isTextAutomator)?_c('AutomatorBlockEditor'):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-automator__controls l-automator__controls\"},[_c('div',{staticClass:\"c-automator-control-row l-automator-button-row\"},[_c('div',{staticClass:\"c-button-group\"},[_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Rewind Automator to the first command'),expression:\"'Rewind Automator to the first command'\"}],staticClass:\"fa-fast-backward\",on:{\"click\":_vm.rewind}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:({\n content: _vm.playTooltip,\n hideOnTargetClick: false\n }),expression:\"{\\n content: playTooltip,\\n hideOnTargetClick: false\\n }\"}],class:_vm.playButtonClass,on:{\"click\":_vm.play}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Stop Automator and reset position'),expression:\"'Stop Automator and reset position'\"}],staticClass:\"fa-stop\",on:{\"click\":_vm.stop}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Step forward one line'),expression:\"'Step forward one line'\"}],staticClass:\"fa-step-forward\",on:{\"click\":_vm.step}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Restart script automatically when it reaches the end'),expression:\"'Restart script automatically when it reaches the end'\"}],staticClass:\"fa-sync-alt\",class:{ 'c-automator__button--active' : _vm.repeatOn },on:{\"click\":_vm.repeat}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Automatically restart the active script when finishing or restarting a Reality'),expression:\"'Automatically restart the active script when finishing or restarting a Reality'\"}],staticClass:\"fa-reply\",class:{ 'c-automator__button--active' : _vm.forceRestartOn },on:{\"click\":_vm.restart}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Scroll Automator to follow current line'),expression:\"'Scroll Automator to follow current line'\"}],staticClass:\"fa-indent\",class:{ 'c-automator__button--active' : _vm.followExecution },on:{\"click\":_vm.follow}}),(_vm.fullScreen)?_c('span',{staticClass:\"c-automator__status-text c-automator__status-text--small\",class:{ 'c-automator__status-text--error' : _vm.currentChars > _vm.maxScriptChars }},[_vm._v(\" This script: \"+_vm._s(_vm.formatInt(_vm.currentChars))+\"/\"+_vm._s(_vm.formatInt(_vm.maxScriptChars))+\" \")]):_vm._e()],1),_c('div',{staticClass:\"c-button-group\"},[_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Undo'),expression:\"'Undo'\"}],staticClass:\"fa-arrow-rotate-left\",class:{ 'c-automator__button--inactive' : !_vm.hasUndo },on:{\"click\":_vm.undo}}),_c('AutomatorButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Redo'),expression:\"'Redo'\"}],staticClass:\"fa-arrow-rotate-right\",class:{ 'c-automator__button--inactive' : !_vm.hasRedo },on:{\"click\":_vm.redo}}),_c('AutomatorModeSwitch')],1)]),_c('div',{staticClass:\"l-automator-button-row\"},[(_vm.duplicateStatus)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('More than one script has this name!'),expression:\"'More than one script has this name!'\"}],staticClass:\"fas fa-exclamation-triangle c-automator__status-text c-automator__status-text--error\"}):_vm._e(),(_vm.editingDifferentScript)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('The automator is running a different script than the editor is showing'),expression:\"'The automator is running a different script than the editor is showing'\"}],staticClass:\"fas fa-circle-exclamation c-automator__status-text c-automator__status-text--warning\"}):_vm._e(),(_vm.justCompleted)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('The automator completed running the previous script'),expression:\"'The automator completed running the previous script'\"}],staticClass:\"fas fa-circle-check c-automator__status-text\"}):_vm._e(),_c('span',{staticClass:\"c-automator__status-text\",class:{ 'c-automator__status-text--error' : _vm.hasErrors && !(_vm.isRunning || _vm.isPaused) }},[_vm._v(\" \"+_vm._s(_vm.statusText)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:({\n content: _vm.automatorModeTooltip,\n hideOnTargetClick: false\n }),expression:\"{\\n content: automatorModeTooltip,\\n hideOnTargetClick: false\\n }\"}],class:Object.assign({}, {'c-slider-toggle-button': true,\n 'c-slider-toggle-button--right': _vm.isTextAutomator},\n _vm.tutorialClass),on:{\"click\":_vm.toggleAutomatorMode}},[_c('i',{staticClass:\"fas fa-cubes\"}),_c('i',{staticClass:\"fas fa-code\"})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorModeSwitch.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorModeSwitch.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorModeSwitch.vue?vue&type=template&id=15d9af9b&scoped=true&\"\nimport script from \"./AutomatorModeSwitch.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorModeSwitch.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorModeSwitch.vue?vue&type=style&index=0&id=15d9af9b&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"15d9af9b\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorControls.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorControls.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorControls.vue?vue&type=template&id=6ae4f435&scoped=true&\"\nimport script from \"./AutomatorControls.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorControls.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorControls.vue?vue&type=style&index=0&id=6ae4f435&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6ae4f435\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorEditor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorEditor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorEditor.vue?vue&type=template&id=78354292&scoped=true&\"\nimport script from \"./AutomatorEditor.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorEditor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorEditor.vue?vue&type=style&index=0&id=78354292&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"78354292\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"l-header\"},[_vm._v(\" You have \"+_vm._s(_vm.formatInt(_vm.totalPoints))+\" / \"+_vm._s(_vm.formatInt(_vm.pointsForAutomator))+\" Automator Points towards unlocking the Automator. \"),_c('br'),_vm._v(\" You gain Automator Points from the following sources: \")]),_c('div',{staticClass:\"l-automator-points-list-container\"},[_c('div',{staticClass:\"l-automator-points-list-side-col c-automator-points-list-col\"},[_c('span',{staticClass:\"c-automator-points-list-symbol fas fa-project-diagram\"}),_c('span',{staticClass:\"c-automator-points-list-ap--large\"},[_vm._v(_vm._s(_vm.formatInt(_vm.fromPerks))+\" AP\")]),_c('span',{staticClass:\"l-large-text\"},[_vm._v(\" Perks \")]),_vm._l((_vm.perkSources),function(perk){return _c('div',{key:perk.id,staticClass:\"c-automator-points-list-single-entry\",style:(_vm.textColor(perk.isBought))},[_c('span',{staticClass:\"c-automator-points-list-perk-label\"},[_vm._v(_vm._s(perk.label))]),_vm._v(\" - \"+_vm._s(perk.shortDescription)+\" \"),_c('span',{staticClass:\"c-automator-points-list-ap\"},[_vm._v(_vm._s(_vm.formatInt(perk.automatorPoints))+\" AP\")])])})],2),_c('div',{staticClass:\"l-automator-points-list-center-col\"},_vm._l((_vm.otherSources),function(source){return _c('div',{key:source.name,staticClass:\"c-automator-points-list-cell\"},[_c('span',{staticClass:\"c-automator-points-list-ap--large\"},[_vm._v(_vm._s(_vm.formatInt(source.automatorPoints()))+\" AP\")]),_c('span',{staticClass:\"l-large-text\"},[_vm._v(\" \"+_vm._s(source.name)+\" \")]),_c('br'),_c('br'),_c('span',{style:(_vm.textColor(source.automatorPoints() > 0))},[_vm._v(\" \"+_vm._s(source.shortDescription())+\" \")]),_c('span',{staticClass:\"c-automator-points-list-symbol\",domProps:{\"innerHTML\":_vm._s(source.symbol)}})])}),0),_c('div',{staticClass:\"l-automator-points-list-side-col c-automator-points-list-col\"},[_c('span',{staticClass:\"c-automator-points-list-symbol fas fa-arrow-up\"}),_c('span',{staticClass:\"c-automator-points-list-ap--large\"},[_vm._v(_vm._s(_vm.formatInt(_vm.fromUpgrades))+\" AP\")]),_c('span',{staticClass:\"l-large-text\"},[_vm._v(\" Reality Upgrades \")]),_vm._l((_vm.upgradeSources),function(upgrade){return _c('div',{key:upgrade.id,staticClass:\"c-automator-points-list-single-entry l-upgrade-list\",style:(_vm.textColor(upgrade.isBought))},[_c('b',[_vm._v(_vm._s(upgrade.name))]),_c('span',{staticClass:\"c-automator-points-list-ap\"},[_vm._v(_vm._s(_vm.formatInt(upgrade.automatorPoints))+\" AP\")]),_c('br'),_vm._v(\" \"+_vm._s(upgrade.shortDescription)+\" \")])})],2)]),_c('br'),_c('div',[_vm._v(\" The Automator allows (amongst other things) buying full Time Study Trees, entering Eternity Challenges, or starting Dilation. \"),_c('br'),_vm._v(\" It can also force prestige events on certain conditions independently from your Autobuyers or modify some of your Autobuyer settings. \"),_c('br'),_vm._v(\" The speed of the Automator gradually increases as you get more Realities. If unlocked right now, it would run \"+_vm._s(_vm.format(1000 / _vm.automatorInterval, 2, 2))+\" commands per real-time second. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorPointsList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorPointsList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorPointsList.vue?vue&type=template&id=3d0cd0f0&scoped=true&\"\nimport script from \"./AutomatorPointsList.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorPointsList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorPointsList.vue?vue&type=style&index=0&id=3d0cd0f0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3d0cd0f0\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorTab.vue?vue&type=template&id=5eda76b2&scoped=true&\"\nimport script from \"./AutomatorTab.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorTab.vue?vue&type=style&index=0&id=5eda76b2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5eda76b2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-black-hole-tab\"},[(_vm.isEnslaved || _vm.isDoomed)?_c('div',{staticClass:\"c-black-hole-disabled-description\"},[(_vm.isEnslaved)?_c('i',[_vm._v(\" You must... seek... other methods... \"),_c('br')]):_vm._e(),_vm._v(\" The physics of this Reality do not allow the existence of Black Holes. \")]):(!_vm.isUnlocked)?_c('div',{staticClass:\"l-pre-unlock-text\"},[_c('BlackHoleUnlockButton',{on:{\"blackholeunlock\":_vm.startAnimation}}),_vm._v(\" The Black Hole makes the entire game run significantly faster for a short period of time. \"),_c('br'),_vm._v(\" Starts at \"+_vm._s(_vm.formatX(180))+\" faster for \"+_vm._s(_vm.formatInt(10))+\" seconds, once per hour. \"),_c('br'),_c('br'),_vm._v(\" Unlocking the Black Hole also gives \"+_vm._s(_vm.formatInt(10))+\" Automator Points. \")],1):[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('button',{staticClass:\"o-primary-btn o-primary-btn--subtab-option\",on:{\"click\":_vm.togglePause}},[_vm._v(\" \"+_vm._s(_vm.stateChange)+\" Black Hole \")]),(!_vm.isPermanent)?_c('button',{staticClass:\"o-primary-btn o-primary-btn--subtab-option l-auto-pause-button\",on:{\"click\":_vm.changePauseMode}},[_vm._v(\" Auto-pause: \"+_vm._s(_vm.pauseModeString)+\" \")]):_vm._e()]),_c('canvas',{ref:\"canvas\",staticClass:\"c-black-hole-canvas\",attrs:{\"width\":\"400\",\"height\":\"400\"}}),_c('div',{staticClass:\"l-black-hole-upgrade-grid\"},[_vm._l((_vm.blackHoles),function(blackHole,i){return _c('BlackHoleStateRow',{key:'state' + i,attrs:{\"black-hole\":blackHole}})}),(_vm.hasBH2 && !_vm.isPermanent)?_c('span',[_c('b',[_vm._v(_vm._s(_vm.detailedBH2))]),_c('br'),_vm._v(\" The timer for Black Hole 2 only advances while Black Hole 1 is active. \"),_c('br'),_vm._v(\" Upgrades affect the internal timer; the header shows real time until next activation. \")]):_vm._e(),_c('br'),(!_vm.isPermanent)?_c('div',[_vm._v(\" Black holes become permanently active when they are active for more than \"+_vm._s(_vm.formatPercents(0.9999, 2))+\" of the time. \"),_c('br'),_vm._v(\" Active time percent: \"+_vm._s(_vm.formatPercents(_vm.blackHoleUptime[0], 3))+\" \"),(_vm.hasBH2)?_c('span',[_vm._v(\"and \"+_vm._s(_vm.formatPercents(_vm.blackHoleUptime[1], 3)))]):_vm._e()]):_vm._e(),_c('BlackHoleChargingSliders',{staticClass:\"l-enslaved-shop-container\"})],2),_c('div',{class:_vm.gridStyle()},_vm._l((_vm.blackHoles),function(blackHole,i){return _c('BlackHoleUpgradeRow',{key:'upgrades' + i,attrs:{\"black-hole\":blackHole}})}),1),(_vm.hasBH3)?_c('div',[_vm._v(\" Black Hole 3 is only active when Game Speed is greater than 1. \")]):_vm._e(),_c('div',{class:_vm.gridStyle()},_vm._l((_vm.expoBlackHoles),function(expoBlackHole,j){return _c('ExpoBlackHoleUpgradeRow',{key:'upgrades' + j,attrs:{\"expo-black-hole\":expoBlackHole}})}),1)]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export const BlackHoleAnimation = (function() {\r\n const PLANET_SIZE = 1.5;\r\n const PARTICLE_SIZE = 0.5;\r\n const PARTICLE_COUNT = 120;\r\n // Basically orbit size in pixels\r\n const SEMIMAJOR_AXIS = 100;\r\n // Black Hole active time approximately corresponds to time with >2x\r\n const ACTIVE_THRESHOLD = 2;\r\n\r\n let holeSize;\r\n\r\n // Calculates \"eccentric anomaly\" from \"mean anomaly\",\r\n // see https://en.wikipedia.org/wiki/Kepler%27s_equation#Numerical_approximation_of_inverse_problem\r\n // Needed for accurate Keplerian orbit shape and velocity, apparently math is hard\r\n function eccentricAnomaly(eccentricity, meanAnomaly) {\r\n let E0 = meanAnomaly;\r\n // I hope 20 is enough to converge\r\n const maxIter = 20;\r\n for (let k = 0; k < maxIter; k++) {\r\n E0 = meanAnomaly + eccentricity * Math.sin(E0);\r\n }\r\n return E0;\r\n }\r\n\r\n class Dot {\r\n draw(context) {\r\n context.beginPath();\r\n context.lineWidth = 2 * this.size;\r\n this.performDraw(context);\r\n context.stroke();\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n // eslint-disable-next-line no-empty-function, no-unused-vars\r\n performDraw(context) { }\r\n\r\n static calculatePosition(distance, angle) {\r\n return {\r\n x: distance * Math.sin(2 * Math.PI * angle),\r\n y: distance * Math.cos(2 * Math.PI * angle)\r\n };\r\n }\r\n }\r\n\r\n class Planet extends Dot {\r\n constructor() {\r\n super();\r\n this.angle = 0;\r\n this.distance = 0;\r\n this.size = PLANET_SIZE;\r\n }\r\n\r\n update(totalPhase, eccentricity, period) {\r\n // Update orbital position parameters (polar coordinates centered on hole,\r\n // theta goes 0 to 1 because I'm apparently stupid)\r\n const E0 = eccentricAnomaly(eccentricity, 2 * Math.PI * totalPhase / period);\r\n const r = SEMIMAJOR_AXIS * (1 - eccentricity * Math.cos(E0));\r\n let theta = 2 * Math.atan(Math.sqrt((1 + eccentricity) / (1 - eccentricity) * Math.pow(Math.tan(E0 / 2), 2)));\r\n if (Math.tan(E0 / 2) < 0) theta *= -1;\r\n this.distance = r;\r\n this.angle = theta / (2 * Math.PI);\r\n }\r\n\r\n performDraw(context) {\r\n const { x, y } = Dot.calculatePosition(this.distance, this.angle);\r\n context.arc(x + 200, y + 200, PLANET_SIZE, 0, 2 * Math.PI);\r\n context.strokeStyle = \"rgb(0, 0, 255)\";\r\n }\r\n }\r\n\r\n class Hole extends Dot {\r\n constructor(size) {\r\n super();\r\n this.size = size;\r\n }\r\n\r\n performDraw(context) {\r\n // Glowing effect to make the hole more visible on dark themes\r\n const glow = context.createRadialGradient(200, 200, 0, 200, 200, this.size * 2);\r\n if (BlackHoles.areNegative) {\r\n glow.addColorStop(0, \"rgba(255, 255, 255, 1)\");\r\n glow.addColorStop(0.85, \"rgba(190, 190, 190, 1)\");\r\n glow.addColorStop(0.87, \"rgba(170, 170, 170, 1)\");\r\n glow.addColorStop(1, \"rgba(135, 135, 135, 0)\");\r\n } else {\r\n glow.addColorStop(0, \"rgba(0, 0, 0, 1)\");\r\n glow.addColorStop(0.9, \"rgba(0, 0, 0, 1)\");\r\n glow.addColorStop(0.92, \"rgba(100, 100, 100, 1)\");\r\n glow.addColorStop(1, \"rgba(100, 100, 100, 0)\");\r\n }\r\n context.fillStyle = glow;\r\n context.fillRect(0, 0, 400, 400);\r\n context.strokeStyle = \"black\";\r\n }\r\n }\r\n\r\n const blobs = \"\";\r\n class Particle extends Dot {\r\n constructor() {\r\n super();\r\n this.size = PARTICLE_SIZE;\r\n this.respawn();\r\n }\r\n\r\n respawn() {\r\n this.distance = Particle.randomDistance();\r\n this.lastDistance = this.distance;\r\n this.preLastDistance = this.distance;\r\n this.angle = Math.random();\r\n this.lastAngle = this.angle;\r\n this.preLastAngle = this.angle;\r\n this.respawnTick = true;\r\n this.isInside = BlackHoles.areNegative;\r\n this.blob = blobs[Math.floor(Math.random() * blobs.length)];\r\n this.isBlob = Theme.currentName() === \"S11\";\r\n }\r\n\r\n static randomDistance() {\r\n return BlackHoles.areNegative\r\n ? (1.97 * Math.random() + 0.03) * holeSize\r\n : holeSize + 0.5 * SEMIMAJOR_AXIS * Math.random() * (BlackHole(1).isActive ? 2 : 1);\r\n }\r\n\r\n update(delta, dilationFactor) {\r\n const baseSpeed = 1.5;\r\n const speedFactor = Math.min(Math.pow(Math.max(dilationFactor, 2) / 2, 3), 5);\r\n const particleSpeed = baseSpeed * speedFactor * Math.min(delta, 16) / 1000;\r\n\r\n if (!this.isInside) {\r\n this.preLastAngle = this.lastAngle;\r\n this.lastAngle = this.angle;\r\n this.angle = (this.angle + 20 * particleSpeed * Math.PI * Math.pow(this.distance, -1.5)) % 1;\r\n }\r\n\r\n this.preLastDistance = this.lastDistance;\r\n this.lastDistance = this.distance;\r\n const distFactor = 1 + 0.3 * particleSpeed * Math.pow(this.distance / holeSize, -2);\r\n if (BlackHoles.areNegative) {\r\n this.distance *= distFactor;\r\n } else {\r\n this.distance /= distFactor;\r\n }\r\n\r\n // This magic number is a numerical result from the arcane (and probably now-unneeded) math below\r\n // in the Animation constructor, assuming reasonable values for the game state at the point when\r\n // inverting is unlocked. The end result is that particles despawn in the inverted animation at\r\n // roughly the maximum spawning distance as the forward animation\r\n if (this.distance > 2.74645 * holeSize && BlackHoles.areNegative) {\r\n this.respawn();\r\n } else if (this.distance < 0.01 * holeSize && !BlackHoles.areNegative) {\r\n this.respawn();\r\n return;\r\n }\r\n\r\n this.isInside = this.distance <= holeSize * 0.865;\r\n this.respawnTick = false;\r\n }\r\n\r\n performDraw(context) {\r\n this.drawTrail(context);\r\n\r\n if (!BlackHole(1).isActive) {\r\n context.strokeStyle = \"rgb(127, 127, 127)\";\r\n return;\r\n }\r\n\r\n const { distance } = this;\r\n\r\n if (distance > holeSize) {\r\n // Trails outside black hole\r\n const dist = Math.floor(127 * (distance - holeSize) / SEMIMAJOR_AXIS);\r\n context.strokeStyle = `rgb(${135 - dist}, ${dist}, ${dist})`;\r\n }\r\n\r\n if (distance <= holeSize) {\r\n // Trails inside black hole\r\n const dist = Math.floor(255 * Math.sqrt(distance / holeSize));\r\n context.strokeStyle = `rgb(${dist}, 0, 0)`;\r\n }\r\n }\r\n\r\n drawTrail(context) {\r\n if (this.isInside && !BlackHole(2).isActive) {\r\n return;\r\n }\r\n const { x, y } = Dot.calculatePosition(this.distance, this.angle);\r\n if (this.respawnTick || !BlackHole(1).isActive) {\r\n context.arc(x + 200, y + 200, this.size, 0, 2 * Math.PI);\r\n if (this.isBlob) this.drawAndRotateBlob(context, x, y);\r\n return;\r\n }\r\n const angle = this.isInside ? this.angle : this.preLastAngle;\r\n const { x: lastX, y: lastY } = Dot.calculatePosition(this.preLastDistance, angle);\r\n context.lineCap = \"round\";\r\n\r\n if (this.isBlob) {\r\n this.drawAndRotateBlob(context, x, y);\r\n } else {\r\n context.lineWidth *= 1;\r\n context.moveTo(x + 200, y + 200);\r\n context.lineTo(lastX + 200, lastY + 200);\r\n }\r\n }\r\n\r\n drawAndRotateBlob(context, x, y) {\r\n const FONT_SIZE = 18;\r\n context.textAlign = \"center\";\r\n context.fillStyle = \"orange\";\r\n\r\n if (this.distance <= holeSize) {\r\n const scale = this.distance / holeSize;\r\n const px = FONT_SIZE * Math.sqrt(scale);\r\n const green = 165 * scale ** 2;\r\n\r\n context.fillStyle = `rgba(255, ${green}, 0, ${scale * 2})`;\r\n context.font = `${px}px Typewriter`;\r\n } else {\r\n context.font = `${FONT_SIZE}px Typewriter`;\r\n }\r\n\r\n context.save();\r\n context.translate(x + 200, y + 200);\r\n context.rotate(-this.angle * Math.PI * 2 + Math.PI);\r\n context.fillText(this.blob, 0, 0);\r\n context.restore();\r\n }\r\n }\r\n\r\n return class Animation {\r\n constructor(context) {\r\n this.context = context;\r\n this.planet = new Planet();\r\n\r\n // Time taken for one orbit (in seconds)\r\n this.period = BlackHole(1).cycleLength;\r\n // Fixed-point iteration for eccentricity (I'm really hoping this always converges)\r\n const y = (1 - Math.pow(ACTIVE_THRESHOLD, -2)) / (1 - Math.pow(BlackHole(1).power, -2));\r\n let eccentricity = 0.5;\r\n const maxIter = 1000;\r\n const meanAnomaly = 2 * Math.PI * Math.min(0.9, BlackHole(1).duration / this.period);\r\n for (let k = 0; k < maxIter; k++) {\r\n const E0 = eccentricAnomaly(eccentricity, meanAnomaly);\r\n eccentricity = (y - 1) / (y * Math.cos(E0) - 1);\r\n }\r\n this.eccentricity = eccentricity;\r\n\r\n // Black Hole size, calculated from orbit shape in order to give the right max boost\r\n holeSize = SEMIMAJOR_AXIS * (1 - eccentricity) * (1 - Math.pow(BlackHole(1).power, -2));\r\n // Prevent planet + hole overlapping\r\n this.hole = new Hole((holeSize - PLANET_SIZE) / 2);\r\n\r\n // Particles (scaled to take the same range as the orbit)\r\n this.particles = Array.range(0, PARTICLE_COUNT).map(() => new Particle());\r\n this.frameRequest = requestAnimationFrame(time => this.update(time));\r\n }\r\n\r\n update(time) {\r\n this.frameRequest = requestAnimationFrame(t => this.update(t));\r\n if (time === undefined || this.lastFrame === undefined) {\r\n this.lastFrame = time;\r\n return;\r\n }\r\n const delta = time - this.lastFrame;\r\n this.lastFrame = time;\r\n\r\n this.planet.update(this.totalPhase(), this.eccentricity, this.period);\r\n\r\n this.context.clearRect(0, 0, 400, 400);\r\n this.hole.draw(this.context);\r\n for (const particle of this.particles) {\r\n particle.draw(this.context);\r\n }\r\n\r\n if (BlackHoles.arePaused && !BlackHoles.areNegative) return;\r\n\r\n\r\n // Time dilation factor (Realistic formula, but only actually used for particle speed)\r\n const dilationFactor = 1 / Math.sqrt(1 - holeSize / this.planet.distance);\r\n for (const particle of this.particles) {\r\n particle.update(delta, dilationFactor);\r\n }\r\n }\r\n\r\n // Code was originally written to use phase over a cycle of active+inactive time and\r\n // would be really difficult to rewrite to use the current black hole phase\r\n // Example on what this is: if the black hole has intervals of 100+10 then this ranges\r\n // from 0 to 110 and is active when less than 5 or more than 105\r\n totalPhase() {\r\n const blackHole = BlackHole(1);\r\n if (blackHole.isActive) {\r\n return (blackHole.phase - blackHole.duration / 2 + this.period) % this.period;\r\n }\r\n\r\n return blackHole.phase + blackHole.duration / 2;\r\n }\r\n\r\n unmount() {\r\n cancelAnimationFrame(this.frameRequest);\r\n }\r\n };\r\n}());\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.isNegativeBHUnlocked)?_c('div',{staticClass:\"l-black-hole-sliders\"},[_c('b',[_vm._v(\" Inverted Black Hole divides game speed by \"+_vm._s(_vm.format(_vm.negativeBHDivisor, 2, 2))+\". (Currently \"+_vm._s(_vm.isInverted ? \"active\" : \"inactive\")),(_vm.negativeSlider !== 0 && !_vm.isInverted)?_c('span',{attrs:{\"ach-tooltip\":_vm.infoTooltip}},[_c('i',{staticClass:\"fas fa-question-circle l-margin-left\"})]):_vm._e(),_vm._v(\") \")]),(!_vm.isDisabled)?_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.negativeSlider},on:{\"input\":function($event){return _vm.adjustSliderNegative($event)}}},'SliderComponent',_vm.sliderProps(true),false)):_c('div',{staticClass:\"l-lock-text\"},[_vm._v(\" \"+_vm._s(_vm.reqLockText)+\" \")]),_c('br'),_vm._v(\" Inverting the Black Hole only affects its own speedup, no other upgrades or effects, although it will also indirectly affect the Effarig Game speed power effect. \")],1):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.show),expression:\"show\"}],class:['l-ad-slider', _vm.flowDirection, _vm.disabledClass, { 'l-ad-slider--has-label': _vm.piecewiseLabel }]},[(_vm.plusMinusButtons)?_c('PlusMinusButton',{attrs:{\"type\":\"minus\"},on:{\"click\":function($event){return _vm.increment(-1)}}}):_vm._e(),_c('div',{ref:\"wrap\",class:['l-ad-slider__wrap', _vm.stateClass],style:([_vm.wrapStyles, _vm.boolDisabled ? _vm.disabledStyle : null]),on:{\"click\":_vm.wrapClick}},[_c('div',{ref:\"elem\",class:['l-ad-slider__bg', 'c-ad-slider__bg', _vm.bgClass],style:([_vm.elemStyles, _vm.bgStyle, _vm.draggableStyle]),attrs:{\"aria-hidden\":\"true\"},on:{\"mousedown\":function($event){return _vm.moveStart($event, 0, true)},\"touchstart\":function($event){return _vm.moveStart($event, 0, true)}}},[(_vm.isRange)?[_c('div',{key:\"dot0\",ref:\"dot0\",class:[_vm.tooltipStatus, 'l-ad-slider__dot', 'c-ad-slider__dot',\n {\n 'l-ad-slider__dot--focus': _vm.focusFlag && _vm.focusSlider === 0,\n 'l-ad-slider__dot--dragging': _vm.flag && _vm.currentSlider === 0,\n 'l-ad-slider__dot--disabled': !_vm.boolDisabled && _vm.disabledArray[0]\n }\n ],style:(_vm.dotStyles),on:{\"mousedown\":_vm.moveStart,\"touchstart\":_vm.moveStart}},[_c('div',{class:['l-ad-slider__dot-handle', 'c-ad-slider__dot-handle', _vm.dotClass],style:([\n (!_vm.boolDisabled && _vm.disabledArray[0])\n ? _vm.disabledDotStyles[0]\n : null,\n _vm.sliderStyles[0],\n _vm.focusFlag && _vm.focusSlider === 0 ? _vm.focusStyles[0]: null\n ])}),_c('div',{ref:\"tooltip0\",class:['ad-slider-tooltip-' + _vm.tooltipDirection[0], 'ad-slider-tooltip-wrap']},[_c('span',{staticClass:\"ad-slider-tooltip\",style:(_vm.tooltipStyles[0])},[_vm._v(_vm._s(_vm.xformatter ? _vm.formatting(_vm.val[0]) : _vm.val[0]))])])]),_c('div',{key:\"dot1\",ref:\"dot1\",class:[_vm.tooltipStatus, 'l-ad-slider__dot', 'c-ad-slider__dot',\n {\n 'l-ad-slider__dot--focus': _vm.focusFlag && _vm.focusSlider === 1,\n 'l-ad-slider__dot--dragging': _vm.flag && _vm.currentSlider === 1,\n 'l-ad-slider__dot--disabled': !_vm.boolDisabled && _vm.disabledArray[1]\n }\n ],style:(_vm.dotStyles),on:{\"mousedown\":function($event){return _vm.moveStart($event, 1)},\"touchstart\":function($event){return _vm.moveStart($event, 1)}}},[_c('div',{class:['l-ad-slider__dot-handle', 'c-ad-slider__dot-handle', _vm.dotClass],style:([\n (!_vm.boolDisabled && _vm.disabledArray[1])\n ? _vm.disabledDotStyles[1]\n : null,\n _vm.sliderStyles[1],\n _vm.focusFlag && _vm.focusSlider === 1 ? _vm.focusStyles[1]: null\n ])}),_c('div',{ref:\"tooltip1\",class:['ad-slider-tooltip-' + _vm.tooltipDirection[1], 'ad-slider-tooltip-wrap']},[_c('span',{staticClass:\"ad-slider-tooltip\",style:(_vm.tooltipStyles[1])},[_vm._v(_vm._s(_vm.xformatter ? _vm.formatting(_vm.val[1]) : _vm.val[1]))])])])]:[_c('div',{key:\"dot0\",ref:\"dot0\",class:[_vm.tooltipStatus, 'l-ad-slider__dot', 'c-ad-slider__dot',\n {\n 'l-ad-slider__dot--focus': _vm.focusFlag && _vm.focusSlider === 0,\n 'l-ad-slider__dot--dragging': _vm.flag && _vm.currentSlider === 0\n }\n ],style:(_vm.dotStyles),on:{\"mousedown\":_vm.moveStart,\"touchstart\":_vm.moveStart}},[_c('div',{class:['l-ad-slider__dot-handle', 'c-ad-slider__dot-handle', _vm.dotClass],style:([_vm.sliderStyles, _vm.focusFlag && _vm.focusSlider === 0 ? _vm.focusStyles : null])},[_vm._v(\" \"+_vm._s(_vm.dotContents(0))+\" \")]),_c('div',{class:['ad-slider-tooltip-' + _vm.tooltipDirection, 'ad-slider-tooltip-wrap']},[_c('span',{staticClass:\"ad-slider-tooltip\",style:(_vm.tooltipStyles)},[_vm._v(_vm._s(_vm.xformatter ? _vm.formatting(_vm.val) : _vm.val))])])])],_c('ul',{staticClass:\"ad-slider-piecewise\"},_vm._l((_vm.piecewiseDotWrap),function(piecewiseObj,index){return _c('li',{key:index,staticClass:\"ad-slider-piecewise-item\",style:([_vm.piecewiseDotStyle, piecewiseObj.style])},[(_vm.piecewise)?_c('span',{staticClass:\"ad-slider-piecewise-dot\",style:([ _vm.piecewiseStyle, _vm.isActive(piecewiseObj.index) ? _vm.piecewiseActiveStyle : null ])}):_vm._e(),(_vm.piecewiseLabel)?_c('span',{staticClass:\"ad-slider-piecewise-label\",style:([ _vm.labelStyle, _vm.isActive(piecewiseObj.index) ? _vm.labelActiveStyle : null ])},[_vm._v(\" \"+_vm._s(piecewiseObj.label)+\" \")]):_vm._e()])}),0),_c('div',{ref:\"process\",class:['l-ad-slider__process', 'c-ad-slider__process', { 'ad-slider-process-draggable': _vm.isRange && _vm.processDraggable }, _vm.processClass],style:([_vm.elemStyles, _vm.bgStyle, _vm.draggableStyle]),on:{\"click\":_vm.processClick}},[_c('div',{ref:\"mergedTooltip\",class:['vue-merged-tooltip', 'ad-slider-tooltip-' + _vm.tooltipDirection[0], 'ad-slider-tooltip-wrap'],style:(_vm.tooltipMergedPosition)},[_c('span',{staticClass:\"ad-slider-tooltip\",style:(_vm.tooltipStyles)},[_vm._v(\" \"+_vm._s(_vm.tooltipFormatHelper)+\" \")])])])],2)]),(_vm.plusMinusButtons)?_c('PlusMinusButton',{attrs:{\"type\":\"plus\"},on:{\"click\":function($event){return _vm.increment(1)}}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"repeating-click\",rawName:\"v-repeating-click\",value:({ delay: 500 }),expression:\"{ delay: 500 }\"}],staticClass:\"c-ad-slider__button\",on:{\"firstclick\":function($event){return _vm.$emit('click')},\"repeatclick\":function($event){return _vm.$emit('click')}}},[_c('div',{class:_vm.iconClass})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PlusMinusButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PlusMinusButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlusMinusButton.vue?vue&type=template&id=1c7fda29&scoped=true&\"\nimport script from \"./PlusMinusButton.vue?vue&type=script&lang=js&\"\nexport * from \"./PlusMinusButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PlusMinusButton.vue?vue&type=style&index=0&id=1c7fda29&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1c7fda29\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SliderComponent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SliderComponent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SliderComponent.vue?vue&type=template&id=43704430&\"\nimport script from \"./SliderComponent.vue?vue&type=script&lang=js&\"\nexport * from \"./SliderComponent.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleChargingSliders.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleChargingSliders.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlackHoleChargingSliders.vue?vue&type=template&id=c72692d6&scoped=true&\"\nimport script from \"./BlackHoleChargingSliders.vue?vue&type=script&lang=js&\"\nexport * from \"./BlackHoleChargingSliders.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BlackHoleChargingSliders.vue?vue&type=style&index=0&id=c72692d6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c72692d6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('h3',[_vm._v(\" \"+_vm._s(_vm.description)+\" State: \"),(_vm.isPermanent)?[_vm._v(\" Permanently Active \")]:(_vm.isActive)?[_vm._v(\" Active (\"+_vm._s(_vm.nextChange)+\" remaining) \")]:(_vm.id === 2 && _vm.isCharged)?[_vm._v(\" Charged (Activates with Black Hole 1, \"+_vm._s(_vm.nextChange)+\" remaining) \")]:[_vm._v(\" Inactive (Activation in \"+_vm._s(_vm.nextChange)+\") \")]],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleStateRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleStateRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlackHoleStateRow.vue?vue&type=template&id=d6d66fce&scoped=true&\"\nimport script from \"./BlackHoleStateRow.vue?vue&type=script&lang=js&\"\nexport * from \"./BlackHoleStateRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d6d66fce\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"l-reality-upgrade-btn c-reality-upgrade-btn c-reality-upgrade-btn--black-hole-unlock\",class:_vm.classObject,on:{\"click\":_vm.unlock}},[_vm._v(\" Unleash the Black Hole \"),_c('br'),_vm._v(\" Cost: \"+_vm._s(_vm.formatInt(100))+\" Reality Machines \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleUnlockButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleUnlockButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlackHoleUnlockButton.vue?vue&type=template&id=dea0422a&scoped=true&\"\nimport script from \"./BlackHoleUnlockButton.vue?vue&type=script&lang=js&\"\nexport * from \"./BlackHoleUnlockButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"dea0422a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('div',{staticClass:\"l-black-hole-upgrade-grid__row\"},[(!_vm.isPermanent)?_c('BlackHoleUpgradeButton',{key:_vm.intervalVal,attrs:{\"config\":_vm.intervalConfig}}):_vm._e(),_c('BlackHoleUpgradeButton',{attrs:{\"config\":_vm.powerConfig}}),(!_vm.isPermanent)?_c('BlackHoleUpgradeButton',{key:_vm.durationVal,attrs:{\"config\":_vm.durationConfig}}):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-reality-upgrade-btn c-reality-upgrade-btn\",class:_vm.classObject,on:{\"click\":function($event){return _vm.config.upgrade.purchase()}}},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),_c('EffectDisplay',{attrs:{\"config\":_vm.effectConfig,\"label\":_vm.config.effectTitle}}),(!_vm.isCapped)?_c('CostDisplay',{attrs:{\"config\":_vm.costConfig,\"name\":\"Reality Machine\"}}):_vm._e()],1),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon-reality-btn o-primary-btn--reality-upgrade-toggle\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('span',[(_vm.br)?_c('br'):_vm._e(),_vm._v(\" \"+_vm._s(_vm.label)+\" \"+_vm._s(_vm.quantify(_vm.name, _vm.cost, 0, 0, _vm.formatCost))+\" \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CostDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CostDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CostDisplay.vue?vue&type=template&id=18997ed2&\"\nimport script from \"./CostDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./CostDisplay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('span',{class:_vm.classObject},[_vm._v(\" \"+_vm._s(_vm.title)+\" \"+_vm._s(_vm.description)+\" \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DescriptionDisplay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DescriptionDisplay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DescriptionDisplay.vue?vue&type=template&id=53a3a50e&\"\nimport script from \"./DescriptionDisplay.vue?vue&type=script&lang=js&\"\nexport * from \"./DescriptionDisplay.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlackHoleUpgradeButton.vue?vue&type=template&id=6590e9be&scoped=true&\"\nimport script from \"./BlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./BlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6590e9be\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlackHoleUpgradeRow.vue?vue&type=template&id=eb5ab370&scoped=true&\"\nimport script from \"./BlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"\nexport * from \"./BlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"eb5ab370\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('div',{staticClass:\"l-black-hole-upgrade-grid__row\"},[_c('ExpoBlackHoleUpgradeButton',{attrs:{\"config\":_vm.powerConfig}})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-reality-upgrade-btn c-reality-upgrade-btn\",class:_vm.classObject,on:{\"click\":function($event){return _vm.config.upgrade.purchase()}}},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),_c('EffectDisplay',{attrs:{\"config\":_vm.effectConfig,\"label\":_vm.config.effectTitle}}),(!_vm.isCapped)?_c('CostDisplay',{attrs:{\"config\":_vm.costConfig,\"name\":\"Imaginary Machine\"}}):_vm._e()],1),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon-reality-btn o-primary-btn--reality-upgrade-toggle\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExpoBlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExpoBlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ExpoBlackHoleUpgradeButton.vue?vue&type=template&id=5d1da3a7&scoped=true&\"\nimport script from \"./ExpoBlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ExpoBlackHoleUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5d1da3a7\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExpoBlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExpoBlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ExpoBlackHoleUpgradeRow.vue?vue&type=template&id=39a56dee&scoped=true&\"\nimport script from \"./ExpoBlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ExpoBlackHoleUpgradeRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"39a56dee\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BlackHoleTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BlackHoleTab.vue?vue&type=template&id=49a1483d&scoped=true&\"\nimport script from \"./BlackHoleTab.vue?vue&type=script&lang=js&\"\nexport * from \"./BlackHoleTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BlackHoleTab.vue?vue&type=style&index=0&id=49a1483d&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"49a1483d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-break-infinity-tab\"},[(_vm.chargeUnlocked)?_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{class:_vm.disChargeClassObject,on:{\"click\":function($event){_vm.disCharge = !_vm.disCharge}}},[_vm._v(\" Respec Charged Break Infinity Upgrades on next Reality \")])],1):_vm._e(),(_vm.chargeUnlocked)?_c('div',[_vm._v(\" You have charged \"+_vm._s(_vm.formatInt(_vm.chargesUsed))+\"/\"+_vm._s(_vm.formatInt(_vm.totalCharges))+\" Break Infinity Upgrades. Charged Break Infinity Upgrades have their effect altered. \"),_c('br'),_vm._v(\" Hold shift to show Charged Infinity Upgrades. You can freely respec your choices on Reality. \")]):_vm._e(),(_vm.chargeUnlocked)?_c('div',[(_vm.isUseless)?_c('div',[_vm._v(\" You cannot Charge Break Infinity Upgrades while Doomed. \")]):_vm._e()]):_vm._e(),(!_vm.isUnlocked)?_c('div',[_vm._v(\" Reduce the interval of Automatic Big Crunch Autobuyer to \"+_vm._s(_vm.format(0.1, 1, 1))+\" seconds to unlock Break Infinity. \")]):_vm._e(),_c('BreakInfinityButton',{staticClass:\"l-break-infinity-tab__break-btn\"}),(_vm.isUnlocked)?_c('div',{staticClass:\"l-break-infinity-upgrade-grid l-break-infinity-tab__grid\"},_vm._l((_vm.grid),function(column,columnId){return _c('div',{key:columnId,staticClass:\"l-break-infinity-upgrade-grid__row\"},_vm._l((column),function(upgrade){return _c('InfinityUpgradeButton',{key:upgrade.id,class:_vm.btnClassObject(columnId),attrs:{\"upgrade\":upgrade}})}),1)}),0):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],class:_vm.classObject,on:{\"click\":_vm.clicked}},[_vm._v(\" \"+_vm._s(_vm.text)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BreakInfinityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BreakInfinityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BreakInfinityButton.vue?vue&type=template&id=07a8a594&scoped=true&\"\nimport script from \"./BreakInfinityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./BreakInfinityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"07a8a594\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:_vm.classObject,on:{\"mouseenter\":function($event){_vm.showingCharged = _vm.canBeCharged},\"mouseleave\":function($event){_vm.showingCharged = false},\"click\":function($event){return _vm.upgrade.purchase()}}},[_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),(_vm.showWorstChallenge)?_c('span',[_c('br'),_vm._v(\" \"+_vm._s(_vm.worstChallengeString)+\" \")]):_vm._e(),(!_vm.isDisabled)?_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.config}}):_vm._e(),(!_vm.isDisabled && _vm.isImprovedByTS31)?[_c('br'),_vm._v(\" After TS31: \"+_vm._s(_vm.formatX(_vm.ts31Effect, 2, 2))+\" \")]:_vm._e()],2),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"br\":\"\",\"config\":_vm.config,\"name\":\"Infinity Point\"}}):_vm._e(),_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityUpgradeButton.vue?vue&type=template&id=44d40775&scoped=true&\"\nimport script from \"./InfinityUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"44d40775\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BreakInfinityTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BreakInfinityTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BreakInfinityTab.vue?vue&type=template&id=2dd1569f&scoped=true&\"\nimport script from \"./BreakInfinityTab.vue?vue&type=script&lang=js&\"\nexport * from \"./BreakInfinityTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2dd1569f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('svg',{ref:\"celestialNavigationSVG\",staticClass:\"c-wide-canvas-element l-celestial-navigation\"},[_c('defs',[_c('linearGradient',{attrs:{\"id\":\"grad1\",\"x1\":\"0%\",\"y1\":\"0%\",\"x2\":\"100%\",\"y2\":\"0%\"}},[_c('stop',{attrs:{\"offset\":\"0%\",\"stop-color\":\"#ffff00\",\"stop-opacity\":\"1\"}}),_c('stop',{attrs:{\"offset\":\"100%\",\"stop-color\":\"#ff0000\",\"stop-opacity\":\"1\"}})],1),_c('linearGradient',{attrs:{\"id\":\"incompleteFade\",\"x1\":\"0\",\"x2\":\"8\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#888\",\"stop-opacity\":\"0\"}}),_c('stop',{attrs:{\"offset\":\"8\",\"stop-color\":\"#888\",\"stop-opacity\":\"1\"}})],1),_c('linearGradient',{attrs:{\"id\":\"fadeGrad\",\"y2\":\"0\",\"x2\":\"1\"}},[_c('stop',{attrs:{\"offset\":\"0.5\",\"stop-color\":\"white\",\"stop-opacity\":\"0\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"white\",\"stop-opacity\":\".5\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradTeresaEffarig\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#5151ec\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#d13737\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradEffarigEnslaved\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#d13737\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#ffa337\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradEnslavedV\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#ffa337\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#ffe066\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradRaTeresa\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#9063de\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#5151ec\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradRaEffarig\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#9063de\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#d13737\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradRaEnslaved\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#9063de\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#ffa337\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradRaV\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#9063de\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"#ffe066\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradRaLaitela\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"#9063de\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"white\"}})],1),_c('linearGradient',{attrs:{\"id\":\"gradLaitelaPelle\",\"y2\":\"0\",\"x2\":\"1\",\"gradientUnits\":\"userSpaceOnUse\"}},[_c('stop',{attrs:{\"offset\":\"0\",\"stop-color\":\"white\"}}),_c('stop',{attrs:{\"offset\":\"1\",\"stop-color\":\"crimson\"}})],1),_c('mask',{attrs:{\"id\":\"fade\",\"maskContentUnits\":\"objectBoundingBox\"}},[_c('rect',{attrs:{\"width\":\"1\",\"height\":\"1\",\"fill\":\"url(#fadeGrad)\"}})]),_c('filter',{attrs:{\"id\":\"completeGlow\",\"x\":\"-100%\",\"y\":\"-100%\",\"width\":\"300%\",\"height\":\"300%\"}},[_c('feGaussianBlur',{attrs:{\"in\":\"SourceGraphic\",\"result\":\"blurred\",\"stdDeviation\":\"2\"}}),_c('feMerge',[_c('feMergeNode',{attrs:{\"in\":\"blurred\"}}),_c('feMergeNode',{attrs:{\"in\":\"SourceGraphic\"}})],1)],1),_c('filter',{attrs:{\"id\":\"backgroundGlow\",\"x\":\"-100%\",\"y\":\"-100%\",\"width\":\"300%\",\"height\":\"300%\"}},[_c('feGaussianBlur',{attrs:{\"in\":\"SourceGraphic\",\"result\":\"blurred\",\"stdDeviation\":\"4\"}}),_c('feMerge',[_c('feMergeNode',{attrs:{\"in\":\"blurred\"}}),_c('feMergeNode',{attrs:{\"in\":\"SourceGraphic\"}})],1)],1)],1),_c('image',{attrs:{\"x\":\"-250\",\"y\":\"-350\",\"height\":\"1503\",\"width\":\"1503\",\"href\":\"images/celestial-navigation-bg.webp\"}}),_vm._l((_vm.drawOrder),function(obj,index){return _c('g',{key:index,attrs:{\"visibility\":_vm.nodeVisibility(obj)}},[_c(obj.is,_vm._b({tag:\"component\",attrs:{\"complete\":_vm.nodeState[obj.nodeId].complete}},'component',obj.config,false))],1)})],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('path',{attrs:{\"transform\":_vm.ringBackgroundTransform,\"d\":_vm.ringBackgroundPath,\"fill\":\"rgba(0,0,0,0.75)\",\"stroke\":\"none\",\"filter\":_vm.ringBackgroundFilter}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\r\n * @param {object} d\r\n * @param {number} d.rMajor\r\n * @param {number} [d.rMinor]\r\n * @param {number} [d.gapCenterDeg]\r\n * @param {number} [d.gapDeg]\r\n * @param {number} [d.gapAngleDeg]\r\n */\r\nexport function svgRingPath(d) {\r\n if (!d.gapDeg) {\r\n const rMinorCircle = d.rMinor\r\n ? `m 0.2 ${d.rMajor - d.rMinor}\r\na ${d.rMinor} ${d.rMinor} 0 1 1 -0.2 0\r\nz`\r\n : \"\";\r\n return `M -0.1, ${-d.rMajor}\r\na ${d.rMajor} ${d.rMajor} 0 1 0 0.2 0\r\nz\r\n${rMinorCircle}`;\r\n }\r\n const toRad = Math.PI / 180;\r\n const gapAngleDeg = d.gapAngleDeg === undefined ? d.gapDeg / 2 : d.gapAngleDeg;\r\n const edge0 = toRad * (d.gapCenterDeg + d.gapDeg / 2);\r\n const c0 = Math.cos(edge0), s0 = Math.sin(edge0);\r\n const edge1 = toRad * (d.gapCenterDeg - d.gapDeg / 2);\r\n const c1 = Math.cos(edge1), s1 = Math.sin(edge1);\r\n const x = d.rMajor / d.rMinor * Math.sin(toRad * (d.gapDeg / 2 - gapAngleDeg));\r\n const innerAngle = Math.asin(x) + toRad * gapAngleDeg;\r\n const edge2 = toRad * d.gapCenterDeg + innerAngle;\r\n const c2 = Math.cos(edge2), s2 = Math.sin(edge2);\r\n const edge3 = toRad * d.gapCenterDeg - innerAngle;\r\n const c3 = Math.cos(edge3), s3 = Math.sin(edge3);\r\n const big = d.gapDeg <= 180 ? 1 : 0;\r\n return `M ${c0 * d.rMajor - 1e-3 * s0} ${s0 * d.rMajor + 1e-3 * c0}\r\nA ${d.rMajor} ${d.rMajor} 0 ${big} 1 ${c1 * d.rMajor + 1e-3 * s1} ${s1 * d.rMajor - 1e-3 * c1}\r\nL ${c3 * d.rMinor + 1e-3 * s3} ${s3 * d.rMinor - 1e-3 * c3}\r\nA ${d.rMinor} ${d.rMinor} 0 ${big} 0 ${c2 * d.rMinor - 1e-3 * s2} ${s2 * d.rMinor + 1e-3 * c2}\r\nz`;\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NodeBackground.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NodeBackground.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NodeBackground.vue?vue&type=template&id=4a7519ae&scoped=true&\"\nimport script from \"./NodeBackground.vue?vue&type=script&lang=js&\"\nexport * from \"./NodeBackground.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4a7519ae\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',_vm._g({staticClass:\"o-celestial-nav__hoverable\",class:_vm.nodeClass,attrs:{\"transform\":_vm.baseTransform}},_vm.clickAction ? { click: _vm.clickAction } : {}),[_c('path',{staticClass:\"o-celestial-nav__node-overlay\",attrs:{\"d\":_vm.pathData}}),(_vm.hasLegend)?_c('g',{staticClass:\"tooltiptext\"},[_c('polyline',{staticClass:\"o-celestial-nav__legend-arrow\",attrs:{\"points\":_vm.legendArrowPointString}}),_c('path',{staticClass:\"o-celestial-nav__legend-outline\",attrs:{\"d\":_vm.pathData}}),_c('g',{attrs:{\"transform\":_vm.legendTransform}},[_c('text',{staticClass:\"o-celestial-nav__legend-text\",attrs:{\"text-anchor\":_vm.legendTextAnchor,\"dominant-baseline\":\"middle\",\"font-size\":_vm.LEGEND_FONT_SIZE}},_vm._l((_vm.legendLines),function(line,idx){return _c('tspan',{key:idx,attrs:{\"x\":\"0\",\"y\":_vm.legendLineY(idx)}},[_vm._v(\" \"+_vm._s(line)+\" \")])}),0)])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NodeOverlay.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NodeOverlay.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NodeOverlay.vue?vue&type=template&id=689b5224&scoped=true&\"\nimport script from \"./NodeOverlay.vue?vue&type=script&lang=js&\"\nexport * from \"./NodeOverlay.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NodeOverlay.vue?vue&type=style&index=0&id=689b5224&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"689b5224\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',{attrs:{\"transform\":_vm.baseTransform}},[_c('path',{class:_vm.ringClass,attrs:{\"d\":_vm.pathData,\"stroke\":\"none\",\"fill\":_vm.fill,\"filter\":_vm.ringFilter}}),(_vm.symbol)?_c('text',{staticClass:\"o-celestial-nav__symbol o-no-mouse\",attrs:{\"fill\":\"#000\",\"dominant-baseline\":\"middle\",\"font-size\":_vm.symbolFontSize,\"dy\":_vm.symbolOffset}},[_vm._v(\" \"+_vm._s(_vm.symbol)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NodeRing.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NodeRing.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NodeRing.vue?vue&type=template&id=10806dde&scoped=true&\"\nimport script from \"./NodeRing.vue?vue&type=script&lang=js&\"\nexport * from \"./NodeRing.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"10806dde\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('g',[(!_vm.noBG)?_c('g',{attrs:{\"transform\":_vm.incompleteTransform}},[_c('path',{attrs:{\"d\":_vm.incompleteFadePath,\"fill\":\"url(#incompleteFade)\"}}),(_vm.hasIncompleteSolidPath)?_c('path',{attrs:{\"d\":_vm.incompleteSolidPath,\"fill\":\"#888\"}}):_vm._e()]):_vm._e(),_c('g',{attrs:{\"filter\":_vm.filter}},[_c('path',{style:({ 'opacity': _vm.opacity }),attrs:{\"transform\":_vm.completeTransform,\"fill\":_vm.fill,\"stroke\":\"none\",\"d\":_vm.completePath}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ProgressConnector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ProgressConnector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ProgressConnector.vue?vue&type=template&id=027e7312&scoped=true&\"\nimport script from \"./ProgressConnector.vue?vue&type=script&lang=js&\"\nexport * from \"./ProgressConnector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"027e7312\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialNavigationTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialNavigationTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialNavigationTab.vue?vue&type=template&id=8ce190f0&scoped=true&\"\nimport script from \"./CelestialNavigationTab.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialNavigationTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8ce190f0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-challenge-records-tab c-stats-tab\"},[_c('ChallengeRecordsList',{attrs:{\"start\":2,\"times\":_vm.normalChallenges,\"name\":\"Normal Challenge\"}}),(_vm.infinityChallengesUnlocked)?_c('ChallengeRecordsList',{staticClass:\"l-challenge-records-tab__infinity_challenges\",attrs:{\"start\":1,\"times\":_vm.infinityChallenges,\"name\":\"Infinity Challenge\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('br'),_vm._l((_vm.times),function(time,i){return _c('div',{key:i},[_c('span',[_vm._v(_vm._s(_vm.name)+\" \"+_vm._s(_vm.start + i)+\" \"+_vm._s(_vm.completionString(time)))])])}),_c('br'),(_vm.completedAllChallenges)?_c('div',[_vm._v(\" Sum of \"+_vm._s(_vm.name)+\" record times: \"+_vm._s(_vm.timeDisplayShort(_vm.timeSum))+\" \")]):_c('div',[_vm._v(\" You have not completed all \"+_vm._s(_vm.name)+\"s yet. \")])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeRecordsList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeRecordsList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChallengeRecordsList.vue?vue&type=template&id=525410ca&\"\nimport script from \"./ChallengeRecordsList.vue?vue&type=script&lang=js&\"\nexport * from \"./ChallengeRecordsList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeRecordsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeRecordsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChallengeRecordsTab.vue?vue&type=template&id=314ad9f6&\"\nimport script from \"./ChallengeRecordsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ChallengeRecordsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-teresa-celestial-tab\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"effarig\"}}),_c('div',{staticClass:\"l-effarig-shop-and-run\"},[_c('div',{staticClass:\"l-effarig-shop\"},[_c('div',{staticClass:\"c-effarig-relics\"},[_vm._v(\" You have \"+_vm._s(_vm.quantify(\"Relic Shard\", _vm.relicShards, 2, 0))+\". \"),_c('br'),(_vm.relicShardRarityAlwaysMax)?_c('span',[_vm._v(\" The rarity of new Glyphs is being increased by +\"+_vm._s(_vm.formatPercents(_vm.shardRarityBoost, 2))+\". \")]):_c('span',[_vm._v(\" Each new Glyph will have its rarity increased \"),_c('br'),_vm._v(\" by a random value between +\"+_vm._s(_vm.formatPercents(0))+\" and +\"+_vm._s(_vm.formatPercents(_vm.shardRarityBoost, 2))+\". \")]),(_vm.shardPower > 1)?_c('span',[_c('br'),_vm._v(\" Glyph Sacrifice gain is also being raised to \"+_vm._s(_vm.formatPow(_vm.shardPower, 0, 2))+\". \")]):_vm._e()]),_c('div',{staticClass:\"c-effarig-relic-description\"},[_vm._v(\" You will gain \"+_vm._s(_vm.quantify(\"Relic Shard\", _vm.shardsGained, 2))+\" next Reality (\"+_vm._s(_vm.format(_vm.currentShardsRate, 2))+\"/min). \"),(_vm.amplification !== 0)?_c('span',[_c('br'),_vm._v(\" Due to amplification of your current Reality, \"),_c('br'),_vm._v(\" you will actually gain a total of \"+_vm._s(_vm.quantify(\"Relic Shard\", _vm.amplifiedShards, 2))+\" (\"+_vm._s(_vm.format(_vm.amplifiedShardsRate, 2))+\"/min). \")]):_vm._e()]),_vm._m(0),_vm._l((_vm.shopUnlocks),function(unlock,i){return _c('EffarigUnlockButton',{key:i,attrs:{\"unlock\":unlock}})}),(!_vm.runUnlocked)?_c('EffarigUnlockButton',{attrs:{\"unlock\":_vm.runUnlock}}):_vm._e(),(_vm.vIsFlipped)?_c('button',{staticClass:\"c-effarig-shop-button c-effarig-shop-button--available\",on:{\"click\":_vm.createCursedGlyph}},[_vm._v(\" Get a Cursed Glyph... \")]):_vm._e()],2),(_vm.runUnlocked)?_c('div',{staticClass:\"l-effarig-run\"},[_c('div',{staticClass:\"c-effarig-run-description\"},[_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_vm._v(\" Enter Effarig's Reality. \")])]),_c('div',{class:_vm.runButtonOuterClass,on:{\"click\":_vm.startRun}},[_c('div',{class:_vm.runButtonInnerClass,attrs:{\"button-symbol\":_vm.symbol}},[_vm._v(\" \"+_vm._s(_vm.symbol)+\" \")])]),_c('div',{staticClass:\"c-effarig-run-description\"},[_vm._v(\" \"+_vm._s(_vm.runDescription)+\" \")]),_vm._l((_vm.runUnlocks),function(unlock,i){return _c('EffarigRunUnlockReward',{key:i,attrs:{\"unlock\":unlock}})})],2):_vm._e()])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-effarig-relic-description\"},[_c('br'),_vm._v(\" More Eternity Points slightly increases Relic Shards \"),_c('br'),_vm._v(\" gained. More distinct Glyph effects significantly \"),_c('br'),_vm._v(\" increases Relic Shards gained. \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isShown)?_c('button',{staticClass:\"c-celestial-quote-history--button\",style:({\n '--scoped-cel-color': _vm.color\n }),on:{\"click\":_vm.show}},[_vm._v(\" \"+_vm._s(_vm.possessiveForm)+\" Quotes \")]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteHistory.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CelestialQuoteHistory.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CelestialQuoteHistory.vue?vue&type=template&id=018e25f2&\"\nimport script from \"./CelestialQuoteHistory.vue?vue&type=script&lang=js&\"\nexport * from \"./CelestialQuoteHistory.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CelestialQuoteHistory.vue?vue&type=style&index=0&scope=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-effarig-tab__reward\"},[_c('div',{staticClass:\"c-effarig-tab__reward-label\"},[_vm._v(\" \"+_vm._s(_vm.unlock.config.label)+\": \")]),(_vm.isUnlocked)?_c('div',{staticClass:\"l-effarig-tab__reward-descriptions\"},_vm._l((_vm.descriptionLines),function(description,descriptionKey){return _c('div',{key:descriptionKey + '-effarig-reward-description',staticClass:\"c-effarig-tab__reward-description\"},[_c('span',{staticClass:\"c-effarig-tab__reward-symbol\"},[_vm._v(\" \"+_vm._s(_vm.symbol)+\" \")]),_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_vm._v(\" \"+_vm._s(description)+\" \")])])}),0):_c('span',{staticClass:\"c-effarig-tab__reward-symbol\"},[_vm._v(\"?\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffarigRunUnlockReward.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffarigRunUnlockReward.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EffarigRunUnlockReward.vue?vue&type=template&id=7ba5964f&\"\nimport script from \"./EffarigRunUnlockReward.vue?vue&type=script&lang=js&\"\nexport * from \"./EffarigRunUnlockReward.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:_vm.classObject,on:{\"click\":_vm.purchase}},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"name\":\"Relic Shard\",\"label\":\"\"}}):_c('div',[_vm._v(\" (Unlocked) \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffarigUnlockButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffarigUnlockButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EffarigUnlockButton.vue?vue&type=template&id=7f205610&\"\nimport script from \"./EffarigUnlockButton.vue?vue&type=script&lang=js&\"\nexport * from \"./EffarigUnlockButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffarigTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EffarigTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EffarigTab.vue?vue&type=template&id=0883caed&scoped=true&\"\nimport script from \"./EffarigTab.vue?vue&type=script&lang=js&\"\nexport * from \"./EffarigTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EffarigTab.vue?vue&type=style&index=0&id=0883caed&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0883caed\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-enslaved-celestial-tab\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"enslaved\"}}),(_vm.hasAutoRelease && _vm.canAutoRelease)?_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Pulse Black Hole:\"},model:{value:(_vm.autoRelease),callback:function ($$v) {_vm.autoRelease=$$v},expression:\"autoRelease\"}})],1):_vm._e(),_c('div',{staticClass:\"l-enslaved-celestial-tab--inner\"},[_c('div',{staticClass:\"l-enslaved-run-container\"},[(_vm.hasUnlock(_vm.unlocksInfo.RUN))?_c('div',[_c('div',{staticClass:\"c-enslaved-run-button\"},[_c('div',{staticClass:\"c-enslaved-run-button__title\",class:_vm.doomedDisabledClass},[_vm._v(\" \"+_vm._s(_vm.realityTitle)+\" \")]),(_vm.completed)?_c('div',[_c('b',[_vm._v(\"(Completed)\")])]):_vm._e(),_c('div',{class:_vm.runButtonClassObject,on:{\"click\":_vm.startRun}},[_c('div',{staticClass:\"c-enslaved-run-button__icon__sigil\"},[_vm._v(\" \"+_vm._s(_vm.enslavedSymbol)+\" \")]),_vm._l(((_vm.isRunning ? 25 : 0)),function(x){return _c('div',{key:x,staticClass:\"c-enslaved-run-button__icon__glitch\",style:(_vm.glitchStyle(x))})})],2),_vm._l((_vm.runDescription),function(line){return _c('div',{key:line,staticClass:\"c-enslaved-run-description-line\"},[_vm._v(\" \"+_vm._s(line)+\" \")])}),_c('b',[_vm._v(\"Reward: Unlock Tesseracts, which let you increase Infinity Dimension caps (see Infinity Dimension tab)\")])],2)]):_vm._e()]),_c('div',{staticClass:\"l-enslaved-upgrades-column\"},[(_vm.hintsUnlocked)?_c('PrimaryButton',{staticClass:\"o-primary-btn\",attrs:{\"onclick\":\"Modal.enslavedHints.show()\"}},[_vm._v(\" Examine the Reality more closely... \")]):_vm._e(),_c('div',{staticClass:\"l-enslaved-top-container\"},[_c('div',{staticClass:\"l-enslaved-top-container__half\"},[_vm._v(\" While charging, game speed multipliers are \"+_vm._s(_vm.hasAutoRelease ? \"decreased\" : \"disabled\")+\", and the lost speed is converted into stored game time. Discharging the Black Hole allows you to skip forward in time. Stored game time is also used to unlock certain upgrades. \"),_c('button',{class:_vm.storeGameTimeClass,on:{\"click\":_vm.toggleStoreBlackHole}},[_c('div',{staticClass:\"o-enslaved-stored-time\",class:_vm.doomedDisabledClass},[_vm._v(\" \"+_vm._s(_vm.timeDisplayShort(_vm.storedBlackHole))+\" \")]),_c('div',[_vm._v(\" \"+_vm._s(_vm.isStoringBlackHole ? \"Charging Black Hole\": \"Charge Black Hole\")+\" \")])]),_c('button',{class:_vm.dischargeClass,on:{\"click\":_vm.useStored}},[_c('span',[_vm._v(\"Discharge Black Hole\")]),(_vm.isRunning)?_c('p',[_vm._v(\" \"+_vm._s(_vm.timeDisplayShort(_vm.nerfedBlackHoleTime))+\" in this Reality \")]):_vm._e()])]),_c('div',{staticClass:\"l-enslaved-top-container__half\"},[_vm._v(\" Storing real time completely halts all production, setting game speed to \"+_vm._s(_vm.formatInt(0))+\". You can use stored real time to \\\"amplify\\\" a Reality, simulating repeated runs of it. Amplified Realities give all the rewards that normal Realities do. \"),_c('button',{class:[_vm.storeRealTimeClass,\n {'l-fixed-setting': _vm.hasReachedCurrentCap}],on:{\"click\":_vm.toggleStoreReal}},[_c('div',{staticClass:\"o-enslaved-stored-time\"},[_vm._v(\" \"+_vm._s(_vm.timeDisplayShort(_vm.storedReal))+\" \")]),_c('div',[_vm._v(\" \"+_vm._s(_vm.isStoringReal ? \"Storing real time\": \"Store real time\")+\" \")])]),_c('button',{class:[_vm.mechanicButtonClass,\n {'o-enslaved-mechanic-button--storing-time': _vm.autoStoreReal && _vm.offlineEnabled,\n 'l-fixed-setting': !_vm.canChangeStoreRealTime || !_vm.offlineEnabled},\n _vm.doomedDisabledClass],on:{\"click\":_vm.toggleAutoStoreReal}},[_vm._v(\" \"+_vm._s(_vm.realTimeButtonText)+\" \")]),_c('div',[_vm._v(\" Efficiency: \"+_vm._s(_vm.storedRealEfficiencyDesc)+\" \")]),_c('div',[_vm._v(\" Maximum stored real time: \"+_vm._s(_vm.storedRealCapDesc)+\" \")])])]),_c('BlackHoleChargingSliders'),_c('br'),_c('div',{staticClass:\"l-enslaved-shop-container\"},_vm._l((_vm.unlocksInfo),function(unlock){return _c('button',{key:unlock.id,staticClass:\"o-enslaved-shop-button\",class:_vm.unlockClassObject(unlock),on:{\"click\":function($event){return _vm.buyUnlock(unlock)}}},[_vm._v(\" \"+_vm._s(unlock.description())+\" \"),(!_vm.hasUnlock(unlock))?_c('div',[_vm._v(\" Costs: \"+_vm._s(_vm.timeDisplayShort(unlock.price))+\" \")]):_vm._e(),(_vm.isStoringBlackHole && !_vm.hasUnlock(unlock) && _vm.timeUntilBuy(unlock.price).gt(0))?_c('span',[_vm._v(\" Time to obtain: \"+_vm._s(_vm.timeDisplayShort(_vm.timeUntilBuy(unlock.price)))+\" \")]):_vm._e()])}),0)],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnslavedTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnslavedTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnslavedTab.vue?vue&type=template&id=53895748&scoped=true&\"\nimport script from \"./EnslavedTab.vue?vue&type=script&lang=js&\"\nexport * from \"./EnslavedTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EnslavedTab.vue?vue&type=style&index=0&id=53895748&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"53895748\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-challenges-tab\"},[_c('ChallengeTabHeader'),(_vm.isAutoECVisible)?_c('div',[_vm._v(\" Eternity Challenges are automatically completed sequentially, requiring all previous Eternity Challenges to be fully completed before any progress is made. \")]):_vm._e(),(_vm.isAutoECVisible && _vm.remainingECTiers > 0)?_c('div',{staticClass:\"c-challenges-tab__auto-ec-info l-challenges-tab__auto-ec-info\"},[_c('div',{staticClass:\"l-challenges-tab__auto-ec-timers\"},[(_vm.remainingECTiers > 0)?_c('span',[_vm._v(\" Next Auto Eternity Challenge completion: \"+_vm._s(_vm.nextECText)+\" \")]):_vm._e(),_c('span',[_vm._v(\" All Auto Eternity Challenge completions: \"+_vm._s(_vm.allECText)+\" \")]),_c('br')])]):_vm._e(),_c('div',[_vm._v(\" Complete Eternity Challenges again for a bigger reward, maximum of \"+_vm._s(_vm.formatInt(5))+\" times.\"),_c('br'),_vm._v(\" The rewards are applied permanently with no need to have the respective Eternity Challenge Time Study purchased. \")]),(!_vm.hasECR)?_c('div',[_vm._v(\" When you respec out of an unlocked Eternity Challenge, you don't need to redo the secondary requirement\"),_c('br'),_vm._v(\" in order to unlock it again until you complete it; only the Time Theorems are required. \")]):_vm._e(),(_vm.unlockedCount !== 12)?_c('div',[_vm._v(\" You have seen \"+_vm._s(_vm.formatInt(_vm.unlockedCount))+\" out of \"+_vm._s(_vm.formatInt(12))+\" Eternity Challenges. \")]):_c('div',[_vm._v(\" You have seen all \"+_vm._s(_vm.formatInt(12))+\" Eternity Challenges. \")]),_c('ChallengeGrid',{attrs:{\"challenges\":_vm.challenges,\"is-challenge-visible\":_vm.isChallengeVisible},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar challenge = ref.challenge;\nreturn [_c('EternityChallengeBox',{attrs:{\"challenge\":challenge}})]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-challenge-grid\"},_vm._l((_vm.challenges),function(challenge){return _c('ChallengeGridCell',{key:challenge.id,attrs:{\"challenge\":challenge,\"is-challenge-visible\":_vm.isChallengeVisible}},[_vm._t(\"default\",null,{\"challenge\":challenge})],2)}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isVisible),expression:\"isVisible\"}],staticClass:\"l-challenge-grid__cell\"},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeGridCell.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeGridCell.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChallengeGridCell.vue?vue&type=template&id=4d8a00e8&scoped=true&\"\nimport script from \"./ChallengeGridCell.vue?vue&type=script&lang=js&\"\nexport * from \"./ChallengeGridCell.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d8a00e8\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeGrid.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeGrid.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChallengeGrid.vue?vue&type=template&id=1cfb349c&scoped=true&\"\nimport script from \"./ChallengeGrid.vue?vue&type=script&lang=js&\"\nexport * from \"./ChallengeGrid.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1cfb349c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-challenges-tab__header\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Automatically retry challenges:\"},model:{value:(_vm.retryChallenge),callback:function ($$v) {_vm.retryChallenge=$$v},expression:\"retryChallenge\"}}),(_vm.isShowAllVisible)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Show all known challenges:\"},model:{value:(_vm.showAllChallenges),callback:function ($$v) {_vm.showAllChallenges=$$v},expression:\"showAllChallenges\"}}):_vm._e(),(_vm.isAutoECVisible)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Auto Eternity Challenges:\"},model:{value:(_vm.autoEC),callback:function ($$v) {_vm.autoEC=$$v},expression:\"autoEC\"}}):_vm._e(),(_vm.isInChallenge)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.restartChallenge}},[_vm._v(\" Restart Challenge \")]):_vm._e(),(_vm.isInChallenge)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.exitChallenge}},[_vm._v(\" Exit Challenge \")]):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeTabHeader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeTabHeader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChallengeTabHeader.vue?vue&type=template&id=3ae13d7d&scoped=true&\"\nimport script from \"./ChallengeTabHeader.vue?vue&type=script&lang=js&\"\nexport * from \"./ChallengeTabHeader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3ae13d7d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('EternityChallengeBoxWrapper',{attrs:{\"name\":_vm.name,\"is-unlocked\":_vm.isUnlocked,\"is-running\":_vm.isRunning,\"is-completed\":_vm.isCompleted,\"can-be-unlocked\":_vm.canBeUnlocked,\"completion-count\":_vm.completions},on:{\"start\":_vm.start},scopedSlots:_vm._u([{key:\"top\",fn:function(){return [_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}})]},proxy:true},{key:\"bottom\",fn:function(){return [_c('div',{style:({ visiblity: _vm.completions < 5 ? 'visible' : 'hidden' })},[_c('div',[_vm._v(\" Completed \"+_vm._s(_vm.quantifyInt(\"time\", _vm.completions))+\" \")]),_vm._v(\" \"+_vm._s(_vm.goalDisplay)+\" \")]),(_vm.showGoalSpan)?_c('span',[_vm._v(\" Goal Span: \"+_vm._s(_vm.firstGoal)+\" IP - \"+_vm._s(_vm.lastGoal)+\" IP \")]):_vm._e(),_c('span',[_vm._v(\" Reward: \"),_c('DescriptionDisplay',{attrs:{\"config\":_vm.config.reward,\"length\":55,\"name\":\"c-challenge-box__reward-description\"}})],1),_c('span',[(_vm.completions > 0)?_c('EffectDisplay',{attrs:{\"config\":_vm.currentRewardConfig}}):_vm._e(),(_vm.completions > 0 && _vm.completions < 5)?_c('span',[_vm._v(\"|\")]):_vm._e(),(_vm.completions < 5)?_c('EffectDisplay',{attrs:{\"config\":_vm.nextRewardConfig,\"label\":\"Next\",\"ignore-capped\":true}}):_vm._e()],1),(_vm.altRewards)?_c('span',{staticClass:\"c-vreward\"},[_vm._v(\" Ra V 30 Empowered Reward: \"),_c('DescriptionDisplay',{attrs:{\"config\":_vm.config.vReward,\"length\":55,\"name\":\"c-challenge-box__reward-description\"}})],1):_vm._e(),_c('span',[(_vm.completions > 0)?_c('EffectDisplay',{attrs:{\"config\":_vm.currentVRewardConfig}}):_vm._e(),(_vm.completions > 0 && _vm.completions < 5)?_c('span',[_vm._v(\"|\")]):_vm._e(),(_vm.completions < 5)?_c('EffectDisplay',{attrs:{\"config\":_vm.nextVRewardConfig,\"label\":\"Next\",\"ignore-capped\":true}}):_vm._e()],1)]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-challenge-box l-challenge-box c-challenge-box--eternity\"},[_c('HintText',{staticClass:\"l-hint-text--challenge\",attrs:{\"type\":\"challenges\"}},[_vm._v(\" \"+_vm._s(_vm.name)+\" \")]),_vm._t(\"top\"),_c('div',{staticClass:\"l-challenge-box__fill\"}),_c('div',[_c('div',{style:(_vm.completionOverlay)}),_c('button',{class:_vm.buttonClassObject,on:{\"click\":function($event){return _vm.$emit('start')}}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \")])]),_vm._t(\"bottom\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengeBoxWrapper.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengeBoxWrapper.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityChallengeBoxWrapper.vue?vue&type=template&id=4d90efa2&scoped=true&\"\nimport script from \"./EternityChallengeBoxWrapper.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityChallengeBoxWrapper.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d90efa2\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengeBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengeBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityChallengeBox.vue?vue&type=template&id=096be0c2&scoped=true&\"\nimport script from \"./EternityChallengeBox.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityChallengeBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EternityChallengeBox.vue?vue&type=style&index=0&id=096be0c2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"096be0c2\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityChallengesTab.vue?vue&type=template&id=ada246ca&scoped=true&\"\nimport script from \"./EternityChallengesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityChallengesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ada246ca\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-eternity-milestone-grid\"},[_c('div',[_vm._v(\"You have \"+_vm._s(_vm.quantify(\"Eternity\", _vm.eternityCount, 3))+\".\")]),_c('div',[_vm._v(\" Offline generation milestones are only active under certain conditions, mouse-over to see these conditions. \")]),_vm._l((_vm.rows),function(row){return _c('div',{key:row,staticClass:\"l-eternity-milestone-grid__row\"},_vm._l((3),function(column){return _c('EternityMilestoneButton',{key:row * 3 + column,staticClass:\"l-eternity-milestone-grid__cell\",attrs:{\"get-milestone\":_vm.getMilestone(row, column)}})}),1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.config.invisible)?_c('div',{staticClass:\"l-eternity-milestone\"},[_c('span',{staticClass:\"o-eternity-milestone__goal\"},[_vm._v(\" \"+_vm._s(_vm.quantifyInt(\"Eternity\", _vm.eternities))+\": \")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.activeCondition),expression:\"activeCondition\"}],class:_vm.rewardClassObject},[_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_vm._v(\" \"+_vm._s(_vm.reward)+\" \"+_vm._s((_vm.isLocked && !_vm.isReached) ? \"(Locked behind a Pelle Upgrade)\" : \"\")+\" \")])])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityMilestoneButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityMilestoneButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityMilestoneButton.vue?vue&type=template&id=7cb7f407&scoped=true&\"\nimport script from \"./EternityMilestoneButton.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityMilestoneButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7cb7f407\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityMilestonesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityMilestonesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityMilestonesTab.vue?vue&type=template&id=3165bf56&scoped=true&\"\nimport script from \"./EternityMilestonesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityMilestonesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3165bf56\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-eternity-upgrades-grid\"},[_vm._l((_vm.grid),function(row,i){return _c('div',{key:i,staticClass:\"l-eternity-upgrades-grid__row\"},_vm._l((row),function(upgrade){return _c('EternityUpgradeButton',{key:upgrade.id,staticClass:\"l-eternity-upgrades-grid__cell\",attrs:{\"upgrade\":upgrade}})}),1)}),_c('EPMultiplierButton'),_c('div',[_vm._v(\" The cost for the \"+_vm._s(_vm.formatX(5))+\" multiplier jumps at \"+_vm._s(_vm.format(_vm.costIncreases[0]))+\", \"+_vm._s(_vm.formatPostBreak(_vm.costIncreases[1], 2))+\", and \"+_vm._s(_vm.formatPostBreak(_vm.costIncreases[2]))+\" Eternity Points. \"),_c('br'),_vm._v(\" The cost increases super-exponentially after \"+_vm._s(_vm.formatPostBreak(_vm.costIncreases[3]))+\" Eternity Points. \"),_c('br'),_vm._v(\" The Eternity Point multiplier cannot be purchased past \"+_vm._s(_vm.format(5e8))+\" purchases. \")])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group l-margin-top\"},[_c('button',{class:_vm.classObject,on:{\"click\":_vm.purchaseUpgrade}},[(_vm.isActiveInDoom)?_c('div',[_vm._v(\" Multiply Eternity Points from all sources by \"+_vm._s(_vm.formatX(1.5, 1, 1))+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.effectLabel)+\" \"+_vm._s(_vm.formatX(_vm.multiplier, 2, 1))+\" \")]):_c('div',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_vm._v(\" Multiply Eternity Points from all sources by \"+_vm._s(_vm.formatX(5))+\" \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.effectLabel)+\" \"+_vm._s(_vm.formatX(_vm.multiplier, 2, 0))+\" \")]),(!_vm.isCapped)?[_c('br'),_vm._v(\" Cost: \"+_vm._s(_vm.quantify(\"Eternity Point\", _vm.cost, 2, 0))+\" \")]:_vm._e(),(_vm.isCapped)?[_c('span',[_vm._v(\"(Capped at \"+_vm._s(_vm.quantify(\"purchase\", _vm.upgrade.purchaseCap))+\")\")])]:_vm._e()],2),_c('PrimaryButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--small-spoon\",on:{\"click\":function($event){return _vm.upgrade.buyMax(false)}}},[_vm._v(\" Max Eternity Point mult \")]),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--small-spoon\",attrs:{\"label\":\"Autobuy EP mult\"},model:{value:(_vm.isAutobuyerActive),callback:function ($$v) {_vm.isAutobuyerActive=$$v},expression:\"isAutobuyerActive\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EPMultiplierButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EPMultiplierButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EPMultiplierButton.vue?vue&type=template&id=59fdf668&scoped=true&\"\nimport script from \"./EPMultiplierButton.vue?vue&type=script&lang=js&\"\nexport * from \"./EPMultiplierButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EPMultiplierButton.vue?vue&type=style&index=0&id=59fdf668&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"59fdf668\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:_vm.classObject,on:{\"click\":function($event){return _vm.upgrade.purchase()}}},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.upgrade.config}}),_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.upgrade.config}}),(!_vm.isBought && _vm.hasEU2)?_c('div',[_vm._v(\" Auto: \"+_vm._s(_vm.format(_vm.upgrade.config.cost / 1e10))+\" Eternity Points \")]):(!_vm.isBought)?_c('CostDisplay',{attrs:{\"br\":\"\",\"config\":_vm.upgrade.config,\"name\":\"Eternity Point\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityUpgradeButton.vue?vue&type=template&id=0b4344ef&scoped=true&\"\nimport script from \"./EternityUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b4344ef\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityUpgradesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityUpgradesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityUpgradesTab.vue?vue&type=template&id=5b2e66da&scoped=true&\"\nimport script from \"./EternityUpgradesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityUpgradesTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EternityUpgradesTab.vue?vue&type=style&index=0&id=5b2e66da&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5b2e66da\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-glyph-set-tab\"},_vm._l((_vm.recordGlyphInfo),function(set,idx){return _c('div',{key:idx},[(set[0])?_c('div',{staticClass:\"l-glyph-set-entry\"},[_vm._v(\" \"+_vm._s(set[2])+\": \"),(set[0])?_c('GlyphSetPreview',{key:idx,attrs:{\"glyphs\":set[1],\"text\":set[2],\"text-hidden\":true}}):_vm._e(),_vm._v(\" \"+_vm._s(set[3])+\" \"),_c('br')],1):_vm._e()])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.text && !_vm.textHidden)?_c('span',[_vm._v(\" \"+_vm._s(_vm.text)+\" \"),_c('br')]):_vm._e(),(_vm.glyphs.length !== 0)?_c('span',{class:{ 'l-glyph-set-preview': !_vm.isInModal},on:{\"click\":_vm.showModal}},[(_vm.showName)?_c('GlyphSetName',{key:_vm.glyphHash(),attrs:{\"glyph-set\":_vm.glyphs,\"force-color\":_vm.forceNameColor}}):_vm._e(),_vm._l((_vm.orderedGlyphs),function(g,idx){return _c('GlyphComponent',{key:idx,staticClass:\"l-preview\",attrs:{\"glyph\":g,\"show-sacrifice\":_vm.showSacrifice,\"draggable\":false,\"circular\":true,\"ignore-modified-level\":_vm.ignoreModifiedLevel,\"reality-glyph-boost\":_vm.realityGlyphBoost,\"flip-tooltip\":_vm.flipTooltip,\"is-in-modal\":_vm.isInModal,\"size\":\"3rem\",\"text-proportion\":0.5,\"glow-blur\":\"0.2rem\",\"glow-spread\":\"0.1rem\"}})})],2):_c('span',[(_vm.showName)?_c('GlyphSetName',{attrs:{\"glyph-set\":_vm.glyphs,\"force-color\":_vm.forceNameColor}}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.noneText)+\" \")],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._g({class:['l-glyph-component', {'c-glyph-component--dragging': _vm.isDragging}],style:(_vm.outerStyle),attrs:{\"draggable\":_vm.draggable}},_vm.draggable ? { dragstart: _vm.dragStart, dragend: _vm.dragEnd, drag: _vm.drag } : {}),[_c('div',{ref:\"glyph\",class:['l-glyph-component', 'c-glyph-component'],style:(_vm.innerStyle)},[_vm._v(\" \"+_vm._s(_vm.symbol)+\" \"),(_vm.$viewModel.shiftDown || _vm.showGlyphEffectDots)?_vm._l((_vm.glyphEffects),function(x){return _c('div',{key:x,style:(_vm.glyphEffectDots(x))})}):_vm._e()],2),_c('div',{style:(_vm.glyphBorderStyle())}),(_vm.hasTooltip && _vm.tooltipLoaded)?_c('GlyphTooltip',_vm._b({directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isCurrentTooltip),expression:\"isCurrentTooltip\"}],ref:\"tooltip\",class:_vm.tooltipDirectionClass,style:(_vm.zIndexStyle),attrs:{\"sacrifice-reward\":_vm.sacrificeReward,\"refine-reward\":_vm.refineReward,\"uncapped-refine-reward\":_vm.uncappedRefineReward,\"current-action\":_vm.currentAction,\"score-mode\":_vm.scoreMode,\"show-deletion-text\":_vm.showSacrifice,\"display-level\":_vm.displayLevel,\"component\":_vm.componentID,\"change-watcher\":_vm.logTotalSacrifice}},'GlyphTooltip',_vm.glyph,false)):_vm._e(),(_vm.isNew)?_c('div',{staticClass:\"l-corner-icon l-new-glyph\"},[_vm._v(\" New! \")]):(_vm.isUnequipped)?_c('div',{staticClass:\"l-corner-icon l-unequipped-glyph fas fa-arrow-up-from-bracket\"}):_vm._e(),(_vm.displayedInfo)?_c('div',{staticClass:\"l-glyph-info\"},[_vm._v(\" \"+_vm._s(_vm.displayedInfo)+\" \")]):_vm._e(),_c('div',_vm._g({ref:\"over\",style:(_vm.overStyle),on:{\"click\":[function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.$emit('shiftClicked', _vm.glyph.id)},function($event){if(!$event.ctrlKey){ return null; }if(!$event.shiftKey){ return null; }if($event.altKey||$event.metaKey){ return null; }return _vm.$emit('ctrlShiftClicked', _vm.glyph.id)},function($event){if(!$event.metaKey){ return null; }if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey){ return null; }return _vm.$emit('ctrlShiftClicked', _vm.glyph.id)},function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.$emit('clicked', _vm.glyph.id)}]}},_vm.mouseEventHandlers))],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',_vm._g({staticClass:\"l-glyph-tooltip c-glyph-tooltip\",style:(_vm.glyphTooltipStyle)},_vm.eventHandlers),[_c('div',{staticClass:\"c-glyph-tooltip__header\",style:(_vm.glyphHeaderStyle)},[_c('span',{staticClass:\"c-glyph-tooltip__description\",style:(_vm.descriptionStyle),domProps:{\"innerHTML\":_vm._s(_vm.description)}}),_c('span',{staticClass:\"l-glyph-tooltip__info\"},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.levelText)}}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.rarityText)}})]),(_vm.showDeletionText)?_c('span',[_c('span',_vm._g({staticClass:\"c-glyph-tooltip__sacrifice\"},_vm.onTouchDevice ? { click: _vm.removeGlyph } : {}),[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.sacrificeText())}}),(_vm.sacrificeText() && _vm.refineText())?_c('span',[_vm._v(\" | \")]):_vm._e(),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.refineText())}})])]):_vm._e(),_c('span',{staticClass:\"c-glyph-tooltip__sacrifice\"},[_vm._v(_vm._s(_vm.scoreText()))])]),_c('div',{staticClass:\"l-glyph-tooltip__effects\"},[_vm._l((_vm.sortedEffects),function(e){return _c('GlyphTooltipEffect',{key:e.id + _vm.changeWatcher,attrs:{\"effect\":e.id,\"value\":e.value}})}),(_vm.showChaosText)?_c('div',{staticClass:\"pelle-current-glyph-effects c-glyph-tooltip__effect\"},[_vm._v(\" \"+_vm._s(_vm.chaosDescription)+\" \")]):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-glyph-tooltip__effect\",class:{ 'o-pelle-disabled': _vm.isPelleDisabled }},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.convertedParts[0])}}),(_vm.hasValue)?_c('span',{style:(_vm.valueStyle)},[_vm._v(_vm._s(_vm.primaryEffectText))]):_vm._e(),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.convertedParts[1])}}),(_vm.hasSecondaryValue)?_c('span',{style:(_vm.valueStyle)},[_vm._v(_vm._s(_vm.secondaryEffectText))]):_vm._e(),(_vm.hasSecondaryValue)?_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.convertedParts[2])}}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphTooltipEffect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphTooltipEffect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphTooltipEffect.vue?vue&type=template&id=7c7b3f70&\"\nimport script from \"./GlyphTooltipEffect.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphTooltipEffect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphTooltip.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphTooltip.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphTooltip.vue?vue&type=template&id=0072d0ca&scoped=true&\"\nimport script from \"./GlyphTooltip.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphTooltip.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphTooltip.vue?vue&type=style&index=0&id=0072d0ca&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0072d0ca\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphComponent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphComponent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphComponent.vue?vue&type=template&id=6bf85a79&scoped=true&\"\nimport script from \"./GlyphComponent.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphComponent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphComponent.vue?vue&type=style&index=0&id=6bf85a79&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6bf85a79\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('span',{staticClass:\"c-current-glyph-effects__header\",style:(_vm.textStyle)},[_vm._v(\" \"+_vm._s(_vm.setName)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetName.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetName.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphSetName.vue?vue&type=template&id=3f296f46&\"\nimport script from \"./GlyphSetName.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphSetName.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetPreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetPreview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphSetPreview.vue?vue&type=template&id=182ff48c&scoped=true&\"\nimport script from \"./GlyphSetPreview.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphSetPreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphSetPreview.vue?vue&type=style&index=0&id=182ff48c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"182ff48c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetRecordsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetRecordsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphSetRecordsTab.vue?vue&type=template&id=133e8d46&\"\nimport script from \"./GlyphSetRecordsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphSetRecordsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"l-glyphs-tab\"},[_c('div',{staticClass:\"l-reality-button-column\"},[_c('GlyphPeek'),(_vm.resetRealityDisplayed)?_c('div',{staticClass:\"l-reality-button-group\"},[(!_vm.isInCelestialReality)?_c('RealityAmplifyButton',{class:_vm.buttonGroupClass()}):_vm._e(),_c('ResetRealityButton',{class:_vm.buttonGroupClass()})],1):_vm._e(),(_vm.isInCelestialReality)?_c('div',{staticClass:\"l-celestial-auto-restart-checkbox\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.autoRestartCelestialRuns),expression:\"autoRestartCelestialRuns\"}],staticClass:\"o-clickable\",attrs:{\"id\":\"autoRestart\",\"type\":\"checkbox\"},domProps:{\"value\":_vm.autoRestartCelestialRuns,\"checked\":Array.isArray(_vm.autoRestartCelestialRuns)?_vm._i(_vm.autoRestartCelestialRuns,_vm.autoRestartCelestialRuns)>-1:(_vm.autoRestartCelestialRuns)},on:{\"input\":function($event){return _vm.toggleAutoRestartCelestial()},\"change\":function($event){var $$a=_vm.autoRestartCelestialRuns,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=_vm.autoRestartCelestialRuns,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.autoRestartCelestialRuns=$$a.concat([$$v]))}else{$$i>-1&&(_vm.autoRestartCelestialRuns=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.autoRestartCelestialRuns=$$c}}}}),_c('label',{staticClass:\"o-clickable\",attrs:{\"for\":\"autoRestart\"}},[_vm._v(\" Repeat this Celestial's Reality \")])]):_vm._e(),_c('br'),_c('RealityReminder'),(_vm.showInstability)?_c('div',[_c('br'),_vm._v(\" Glyphs are becoming unstable. \"),_c('br'),_vm._v(\" Glyph levels higher than \"+_vm._s(_vm.formatInt(_vm.instabilityThreshold))+\" are harder to reach. \"),_c('br'),_vm._v(\" This effect is even stronger above level \"+_vm._s(_vm.formatInt(_vm.hyperInstabilityThreshold))+\". \"),_c('br'),_vm._v(\" Glyphs are \"),_c('i',[_vm._v(\"harshly\")]),_vm._v(\" unstable past level \"+_vm._s(_vm.formatInt(_vm.ultraInstabilityThreshold))+\". \"),_c('br'),_vm._v(\" Glyphs become so unstable at level \"+_vm._s(_vm.formatInt(1e5))+\" that it is near impossible to go higher. \")]):_vm._e(),_c('SingleGlyphCustomzationPanel'),_c('ExpandingControlBox',{staticClass:\"l-glyph-level-factors\",attrs:{\"width-source\":\"content\",\"label\":\"Glyph Level Factors\",\"container-class\":\"c-glyph-level-factors-dropdown-header\"},scopedSlots:_vm._u([{key:\"dropdown\",fn:function(){return [_c('GlyphLevelsAndWeights')]},proxy:true}])}),_c('GlyphTabSidebar')],1),_c('div',{staticClass:\"l-player-glyphs-column\"},[(_vm.showEnslavedHint)?_c('div',{staticClass:\"o-teresa-quotes\",domProps:{\"innerHTML\":_vm._s(_vm.enslavedHint)}}):_vm._e(),_c('div',{staticClass:\"l-equipped-glyphs-and-effects-container\"},[_c('EquippedGlyphs'),_c('div',{staticClass:\"l-glyph-info-wrapper\"},[_c('span',{staticClass:\"l-glyph-color-box\",on:{\"click\":_vm.toggleGlyphTextColors}},[_c('div',{class:_vm.glyphColorPosition()},[_c('label',{class:_vm.glyphColorState},[_c('span',{staticClass:\"fas fa-palette\"})])])]),(_vm.sacrificeUnlocked)?_c('div',{staticClass:\"c-glyph-info-options\"},[_c('button',{class:_vm.glyphInfoClass(!_vm.sacrificeDisplayed),on:{\"click\":function($event){return _vm.setInfoState(false)}}},[_vm._v(\" Current Glyph effects \")]),_c('button',{class:_vm.glyphInfoClass(_vm.sacrificeDisplayed),on:{\"click\":function($event){return _vm.setInfoState(true)}}},[_vm._v(\" Glyph Sacrifice totals \")])]):_vm._e(),(_vm.sacrificeUnlocked && _vm.sacrificeDisplayed)?_c('SacrificedGlyphs'):_c('CurrentGlyphEffects',{class:_vm.glyphInfoBorderClass()})],1)],1),_c('GlyphInventory')],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-current-glyph-effects l-current-glyph-effects\"},[_c('div',{staticClass:\"pelle-current-glyph-effects\"},[_vm._v(\" \"+_vm._s(_vm.pelleGlyphText)+\" \")]),_c('div',{staticClass:\"c-current-glyph-effects__header\"},[_vm._v(\" Currently active Glyph effects: \")]),_c('GlyphSetName',{attrs:{\"glyph-set\":_vm.glyphSet}}),(_vm.isSoftcapActive || _vm.hasEffarig || _vm.hasReality)?_c('br'):_vm._e(),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.uniqueGlyphText)}}),(_vm.isSoftcapActive)?_c('div',{staticClass:\"l-current-glyph-effects__capped-header\"},[_c('span',{staticClass:\"c-current-glyph-effects__effect--capped\"},[_vm._v(\"Italic\")]),_vm._v(\" effects have been slightly reduced due to a softcap \")]):_vm._e(),_c('br'),(_vm.noEffects)?_c('div',[_vm._v(\" None (equip Glyphs to get their effects) \")]):_vm._e(),_vm._l((_vm.effects),function(effect){return _c('CurrentGlyphEffect',{key:effect.id + _vm.logTotalSacrifice,attrs:{\"effect\":effect,\"is-colored\":_vm.isColored}})}),(_vm.showChaosText)?_c('div',{staticClass:\"pelle-current-glyph-effects\"},[_vm._v(\" \"+_vm._s(_vm.chaosEffect)+\" \")]):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('span',{class:_vm.valueClass,style:(_vm.textColor)},[_vm._v(\" \"+_vm._s(_vm.formatValue)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CurrentGlyphEffect.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CurrentGlyphEffect.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CurrentGlyphEffect.vue?vue&type=template&id=731ba6a4&scoped=true&\"\nimport script from \"./CurrentGlyphEffect.vue?vue&type=script&lang=js&\"\nexport * from \"./CurrentGlyphEffect.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"731ba6a4\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CurrentGlyphEffects.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CurrentGlyphEffects.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CurrentGlyphEffects.vue?vue&type=template&id=37e90415&scoped=true&\"\nimport script from \"./CurrentGlyphEffects.vue?vue&type=script&lang=js&\"\nexport * from \"./CurrentGlyphEffects.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"37e90415\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-equipped-glyphs\"},[_c('div',{staticClass:\"l-equipped-glyphs__slots\"},_vm._l((_vm.glyphs),function(glyph,idx){return _c('div',_vm._g({key:idx,staticClass:\"l-glyph-set-preview\",style:(_vm.glyphPositionStyle(idx)),on:{\"click\":_vm.showEquippedModal}},_vm.dragEvents(idx)),[_c('div',{staticClass:\"l-equipped-glyphs__dropzone\"}),(glyph)?_c('GlyphComponent',{key:idx,staticClass:\"c-equipped-glyph\",attrs:{\"glyph\":glyph,\"circular\":true,\"is-active-glyph\":true},on:{\"clicked\":function($event){return _vm.clickGlyph(glyph, idx)},\"shiftClicked\":function($event){return _vm.clickGlyph(glyph, idx, true)},\"ctrlShiftClicked\":function($event){return _vm.clickGlyph(glyph, idx, true)}}}):_c('div',{class:['l-equipped-glyphs__empty', 'c-equipped-glyphs__empty',\n {'c-equipped-glyphs__empty--dragover': _vm.dragoverIndex === idx}]})],1)}),0),_c('div',{staticClass:\"l-equipped-glyphs__buttons\"},[_c('button',{staticClass:\"c-reality-upgrade-btn\",class:_vm.unequipClass,style:(_vm.glyphRespecStyle),attrs:{\"ach-tooltip\":_vm.respecTooltip},on:{\"click\":_vm.toggleRespec}},[_vm._v(\" \"+_vm._s(_vm.unequipText)+\" \")]),(_vm.undoVisible)?_c('button',{staticClass:\"l-glyph-equip-button c-reality-upgrade-btn\",class:{'c-reality-upgrade-btn--unavailable': !_vm.undoAvailable},attrs:{\"ach-tooltip\":_vm.undoTooltip},on:{\"click\":_vm.undo}},[_vm._m(0)]):_vm._e(),_c('button',{staticClass:\"l-glyph-equip-button c-reality-upgrade-btn\",on:{\"click\":_vm.toggleRespecIntoProtected}},[_vm._v(\" Unequip Glyphs to: \"),_c('br'),(_vm.respecIntoProtected)?_c('span',[_vm._v(\"Protected slots\")]):_c('span',[_vm._v(\"Main inventory\")])]),_c('button',{staticClass:\"l-glyph-equip-button-short c-reality-upgrade-btn\",class:{'tutorial--glow': _vm.cosmeticGlow},on:{\"click\":_vm.showOptionModal}},[_vm._v(\" Open Glyph Visual Options \")])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_vm._v(\"Rewind to \"),_c('b',[_vm._v(\"undo\")]),_vm._v(\" the last equipped Glyph\")])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EquippedGlyphs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EquippedGlyphs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EquippedGlyphs.vue?vue&type=template&id=1a7f95d2&scoped=true&\"\nimport script from \"./EquippedGlyphs.vue?vue&type=script&lang=js&\"\nexport * from \"./EquippedGlyphs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EquippedGlyphs.vue?vue&type=style&index=0&id=1a7f95d2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1a7f95d2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-glyph-inventory\"},[_vm._v(\" Click and drag or double-click to equip Glyphs. \"),_vm._l((_vm.rowCount),function(row){return _c('div',{key:_vm.protectedRows + row,staticClass:\"l-glyph-inventory__row\"},_vm._l((_vm.colCount),function(col){return _c('div',{key:col,staticClass:\"l-glyph-inventory__slot\",class:_vm.slotClass(_vm.toIndex(row, col)),on:{\"dragover\":_vm.allowDrag,\"drop\":function($event){_vm.drop(_vm.toIndex(row, col), $event)}}},[(_vm.inventory[_vm.toIndex(row, col)])?_c('GlyphComponent',{attrs:{\"glyph\":_vm.inventory[_vm.toIndex(row, col)],\"is-new\":_vm.isNew(_vm.toIndex(row, col)),\"is-unequipped\":_vm.isUnequipped(_vm.toIndex(row, col)),\"is-inventory-glyph\":true,\"show-sacrifice\":_vm.glyphSacrificeUnlocked,\"draggable\":true},on:{\"shiftClicked\":function($event){return _vm.removeGlyph($event, false)},\"ctrlShiftClicked\":function($event){return _vm.removeGlyph($event, true)},\"clicked\":function($event){return _vm.clickGlyph(col, $event)}}}):_vm._e()],1)}),0)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphInventory.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphInventory.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphInventory.vue?vue&type=template&id=cf494c5c&scoped=true&\"\nimport script from \"./GlyphInventory.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphInventory.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cf494c5c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"grid\",staticClass:\"l-glyph-levels-and-weights c-glyph-levels-and-weights\",style:(_vm.gridStyle)},[(_vm.adjustVisible)?_c('div',{style:(_vm.makeRowStyle(6))}):_vm._e(),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('ep'))},[_vm._v(\" \"+_vm._s(_vm.factorString(_vm.factors.ep))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('ep'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.ep.value))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('replicanti'))},[_vm._v(\" \"+_vm._s(_vm.factorString(_vm.factors.repl))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('replicanti'))},[_vm._v(\" × \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('replicanti'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.repl.value))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('dt'))},[_vm._v(\" \"+_vm._s(_vm.factorString(_vm.factors.dt))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('dt'))},[_vm._v(\" × \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('dt'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.dt.value))+\" \")]),(_vm.eternityVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('eternities'))},[_vm._v(\" \"+_vm._s(_vm.factorString(_vm.factors.eter))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('eternities'))},[_vm._v(\" × \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('eternities'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.eter.value))+\" \")])]:_vm._e(),(_vm.perkShopVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('perk shop'))},[_vm._v(\" Teresa's Perk shop \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('perk shop'))},[_vm._v(\" + \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('perk shop'))},[_vm._v(\" \"+_vm._s(_vm.formatPerkShop)+\" \")])]:_vm._e(),(_vm.shardVisible&&!_vm.shardImprovedVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('shards'))},[_vm._v(\" \"+_vm._s(_vm.formatInt(100))+\"×Shards\"+_vm._s(_vm.formatPow(2))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('shards'))},[_vm._v(\" + \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('shards'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.shardFactor))+\" \")])]:_vm._e(),(_vm.shardVisible&&_vm.shardImprovedVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('shards'))},[_vm._v(\" \"+_vm._s(_vm.formatInt(1000))+\"×Shards(log2)\"+_vm._s(_vm.formatPow(2))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('shards'))},[_vm._v(\" + \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('shards'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.shardFactor))+\" \")])]:_vm._e(),(_vm.singularityVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('singularities'))},[_vm._v(\" Singularities \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('singularities'))},[_vm._v(\" × \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('singularities'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.singularityEffect))+\" \")])]:_vm._e(),(_vm.penaltyVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('instability'))},[_vm._v(\" Instability \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('instability'))},[_vm._v(\" / \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('instability'))},[_vm._v(\" \"+_vm._s(_vm.formatFactor(_vm.factors.scalePenalty))+\" \")])]:_vm._e(),(_vm.rowVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('upgrade rows'))},[_vm._v(\" Upgrade Rows \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('upgrade rows'))},[_vm._v(\" + \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('upgrade rows'))},[_vm._v(\" \"+_vm._s(_vm.formatInt(_vm.factors.rowFactor))+\" \")])]:_vm._e(),(_vm.achievementVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('achievements'))},[_vm._v(\" Achievements \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('achievements'))},[_vm._v(\" + \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('achievements'))},[_vm._v(\" \"+_vm._s(_vm.formatInt(_vm.factors.achievementFactor))+\" \")])]:_vm._e(),(this.has193)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('193'))},[_vm._v(\" TRUE Royal Flush \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__operator\",style:(_vm.rowStyle('193'))},[_vm._v(\" × \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('193'))},[_vm._v(\" 1.0808 \")])]:_vm._e(),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor\",style:(_vm.rowStyle('level'))},[_vm._v(\" Final Level \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor-val\",style:(_vm.rowStyle('level'))},[_vm._v(\" \"+_vm._s(_vm.formatLevel(_vm.factors.actualLevel))+\" \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor l-glyph-level-and-weights-note\",style:(_vm.rowStyle('info'))},[_vm._v(\" Note: All resources here are log10 of their actual values. \")]),_c('div',{staticClass:\"l-glyph-levels-and-weights__factor l-glyph-level-and-weights-note\",style:(_vm.rowStyle('info2'))},[_vm._v(\" EP, Replicanti, and DT use their highest values this Reality. \")]),(_vm.adjustVisible)?[_c('div',{staticClass:\"l-glyph-levels-and-weights__adjust-outline\",style:(_vm.adjustOutlineStyle)}),_c('div',{staticClass:\"l-glyph-levels-and-weights__adjust-label\"},[_vm._v(\" Adjust weights \"),_c('div',{staticClass:\"l-glyph-levels-and-weights__reset-btn-outer\"},[_c('div',{class:_vm.resetWeightsButtonClass(),on:{\"click\":_vm.resetWeights}},[_vm._v(\" Reset \")])])]),_c('div',{staticClass:\"l-glyph-levels-and-weights__adjust-auto\"},[(_vm.showAutoAdjustWeights)?_c('ToggleButton',{staticClass:\"c-glyph-levels-and-weights__auto-btn\",attrs:{\"label\":\"Auto adjustment:\"},model:{value:(_vm.isAutoAdjustWeightsOn),callback:function ($$v) {_vm.isAutoAdjustWeightsOn=$$v},expression:\"isAutoAdjustWeightsOn\"}}):_vm._e()],1),_c('div',{staticClass:\"l-glyph-levels-and-weights__slider\",style:(_vm.rowStyle('ep'))},[_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.weights.ep,\"width\":'100%'},on:{\"input\":function($event){return _vm.adjustSlider('ep', $event)}}},'SliderComponent',_vm.sliderProps,false))],1),_c('div',{staticClass:\"l-glyph-levels-and-weights__slider\",style:(_vm.rowStyle('replicanti'))},[_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.weights.repl,\"width\":'100%'},on:{\"input\":function($event){return _vm.adjustSlider('repl', $event)}}},'SliderComponent',_vm.sliderProps,false))],1),_c('div',{staticClass:\"l-glyph-levels-and-weights__slider\",style:(_vm.rowStyle('dt'))},[_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.weights.dt,\"width\":'100%'},on:{\"input\":function($event){return _vm.adjustSlider('dt', $event)}}},'SliderComponent',_vm.sliderProps,false))],1),_c('div',{staticClass:\"l-glyph-levels-and-weights__slider\",style:(_vm.rowStyle('eternities'))},[_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.weights.eternities,\"width\":'100%'},on:{\"input\":function($event){return _vm.adjustSlider('eternities', $event)}}},'SliderComponent',_vm.sliderProps,false))],1)]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',_vm._b({on:{\"click\":function($event){return _vm.emitInput(!_vm.value)}}},'button',_vm.$attrs,false),[_vm._v(\" \"+_vm._s(_vm.displayText)+\" \"),(_vm.tooltipClass)?_c('div',{class:_vm.tooltipClass},[_vm._v(\" \"+_vm._s(_vm.tooltipContent)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ToggleButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ToggleButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ToggleButton.vue?vue&type=template&id=f5943dbc&\"\nimport script from \"./ToggleButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ToggleButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphLevelsAndWeights.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphLevelsAndWeights.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphLevelsAndWeights.vue?vue&type=template&id=7287ea6a&scoped=true&\"\nimport script from \"./GlyphLevelsAndWeights.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphLevelsAndWeights.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphLevelsAndWeights.vue?vue&type=style&index=0&id=7287ea6a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7287ea6a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{staticClass:\"c-glyph-peek\"},[(_vm.canPeek)?_c('div',{staticClass:\"l-glyph-set-preview\",on:{\"click\":_vm.showModal}},[_c('GlyphSetPreview',{attrs:{\"show-name\":false,\"text\":'Upcoming Glyph selection:',\"glyphs\":_vm.glyphs,\"ignore-modified-level\":true,\"show-sacrifice\":_vm.canSacrifice,\"flip-tooltip\":true,\"sort\":false}}),_vm._v(\" (Click to bring up details) \")],1):_c('div',[_vm._v(\" Purchase the Reality study to see \"),_c('br'),_vm._v(\" this Reality's Glyph choices \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphPeek.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphPeek.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphPeek.vue?vue&type=template&id=73e574b8&scoped=true&\"\nimport script from \"./GlyphPeek.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphPeek.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"73e574b8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-glyph-sidebar-option-container\"},[(_vm.hasMoreOptions)?_c('div',{staticClass:\"l-glyph-sidebar-tab-container\"},[_c('button',{class:_vm.sidebarClass(_vm.sidebarEnum.INVENTORY_MANAGEMENT),on:{\"click\":function($event){return _vm.setSidebarState(_vm.sidebarEnum.INVENTORY_MANAGEMENT)}}},[_vm._v(\" Manage Inventory \")]),(_vm.unlockedFilter)?_c('button',{class:_vm.sidebarClass(_vm.sidebarEnum.FILTER_SETTINGS),on:{\"click\":function($event){return _vm.setSidebarState(_vm.sidebarEnum.FILTER_SETTINGS)}}},[_vm._v(\" Glyph Filter \")]):_vm._e(),(_vm.unlockedSets)?_c('button',{class:_vm.sidebarClass(_vm.sidebarEnum.SAVED_SETS),on:{\"click\":function($event){return _vm.setSidebarState(_vm.sidebarEnum.SAVED_SETS)}}},[_vm._v(\" Glyph Presets \")]):_vm._e(),(_vm.unlockedAlchemy)?_c('button',{class:_vm.sidebarClass(_vm.sidebarEnum.SACRIFICE_TYPE),on:{\"click\":function($event){return _vm.setSidebarState(_vm.sidebarEnum.SACRIFICE_TYPE)}}},[_vm._v(\" Sacrifice Type \")]):_vm._e()]):_vm._e(),(_vm.type === _vm.sidebarEnum.INVENTORY_MANAGEMENT)?_c('GlyphInventoryManagementPanel',{attrs:{\"has-more-options\":_vm.hasMoreOptions}}):(_vm.type === _vm.sidebarEnum.FILTER_SETTINGS && _vm.unlockedFilter)?_c('GlyphFilterPanel'):(_vm.type === _vm.sidebarEnum.SAVED_SETS && _vm.unlockedSets)?_c('GlyphSetSavePanel'):(_vm.type === _vm.sidebarEnum.SACRIFICE_TYPE && _vm.unlockedAlchemy)?_c('GlyphRejectionPanel'):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-glyph-sacrifice-options c-glyph-sacrifice-options l-glyph-sidebar-panel-size\"},[_c('div',{staticClass:\"c-glyph-sacrifice-options c-glyph-sacrifice-options-container\"},[_c('div',{staticClass:\"c-filter-extra-btns c-top-left\"},[_c('i',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Export filter settings'),expression:\"'Export filter settings'\"}],staticClass:\"fas fa-file-export l-top-left-btn\",on:{\"click\":_vm.exportFilterSettings}}),_c('i',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Import filter settings'),expression:\"'Import filter settings'\"}],staticClass:\"fas fa-file-import l-top-left-btn\",on:{\"click\":_vm.importFilterSettings}})]),_c('div',{staticClass:\"c-filter-extra-btns c-top-right\"},[_c('i',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.autoRealityTooltip),expression:\"autoRealityTooltip\"}],staticClass:\"fas fa-recycle l-top-right-btn\",class:{ 'o-quick-reality' : _vm.autoRealityForFilter },on:{\"click\":_vm.toggleAutoReality}}),_c('i',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.questionmarkTooltip),expression:\"questionmarkTooltip\"}],staticClass:\"fas fa-question-circle l-top-right-btn o-borderless\",on:{\"click\":_vm.showFilterHowTo}})]),_vm._v(\" Current Filter Mode: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.filterMode(_vm.mode))+\" \"),_c('br'),_c('div',{staticClass:\"c-glyph-filter-mode-container\"},_vm._l((_vm.unlockedModes),function(index){return _c('div',{key:index,class:_vm.optionClass(index),on:{\"click\":function($event){return _vm.setMode(index)}}},[_c('div',{staticClass:\"c-glyph-sacrifice-options__option__tooltip\"},[_vm._v(\" \"+_vm._s(_vm.filterMode(index))+\" \")])])}),0)]),(_vm.mode === _vm.modes.LOWEST_SACRIFICE)?_c('div',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_c('br'),_vm._v(\" Glyph score is assigned based on type. Priority is given to Glyphs belonging to the type of which you have the least total Glyph Sacrifice value. \"),_c('br'),_c('br'),_vm._v(\" This mode never keeps Glyphs, but will instead always sacrifice the Glyph it chooses. \")]):_vm._e(),(_vm.mode === _vm.modes.EFFECT_COUNT)?_c('div',{staticClass:\" c-glyph-sacrifice-options__advanced\"},[_c('br'),_vm._v(\" Glyphs must have at least \"),_c('input',{ref:\"effectCount\",staticClass:\"c-auto-sac-effect-tab__input\",attrs:{\"type\":\"number\",\"min\":\"0\",\"max\":\"8\"},domProps:{\"value\":_vm.effectCount},on:{\"blur\":_vm.setEffectCount}}),_vm._v(\" effects to be chosen. Rarer Glyphs are preferred in ties. \")]):_vm._e(),(_vm.mode === _vm.modes.RARITY_THRESHOLD)?_c('div',{staticClass:\"l-glyph-sacrifice-options__rarity-sliders\"},[_c('span',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_vm._v(\" Any Glyphs with rarity below these thresholds will be sacrificed. \")]),_vm._l((_vm.glyphTypes),function(type){return _c('div',{key:type.id,staticClass:\"l-glyph-sacrifice-options__rarity-slider-div\"},[_c('span',{on:{\"click\":function($event){return _vm.bumpRarity(type.id)}}},[_c('GlyphComponent',_vm._b({staticClass:\"o-clickable\",attrs:{\"glyph\":{type: type.id, strength: _vm.strengthThreshold(type.id) }}},'GlyphComponent',_vm.glyphIconProps,false))],1),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.rarityThresholds[type.id],\"width\":'100%'},on:{\"input\":function($event){return _vm.setRarityThreshold(type.id, $event)}}},'SliderComponent',_vm.raritySliderProps,false))],1)})],2):_vm._e(),(_vm.mode === _vm.modes.SPECIFIED_EFFECT)?_c('div',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_c('div',[_vm._v(\" Glyph Type: \"),_vm._l((_vm.glyphTypes),function(type){return _c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(type.id.capitalize()),expression:\"type.id.capitalize()\"}],key:type.id,staticClass:\"l-glyph-sacrifice-options__advanced-type-select c-glyph-sacrifice-options__advanced-type-select\",style:(_vm.advancedTypeSelectStyle(type)),on:{\"click\":function($event){_vm.advancedType=type.id}}},[_vm._v(\" \"+_vm._s(_vm.getSymbol(type.id))+\" \")])})],2),_c('br'),_c('div',{staticClass:\"l-glyph-sacrifice-options__rarity-slider-div\"},[_c('span',{on:{\"click\":function($event){return _vm.bumpRarity(_vm.advancedType)}}},[_c('GlyphComponent',_vm._b({staticClass:\"o-clickable\",attrs:{\"glyph\":{type: _vm.advancedType, strength: _vm.strengthThreshold(_vm.advancedType) }}},'GlyphComponent',_vm.glyphIconProps,false))],1),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.rarityThresholds[_vm.advancedType],\"width\":'100%'},on:{\"input\":function($event){return _vm.setRarityThreshold(_vm.advancedType, $event)}}},'SliderComponent',_vm.raritySliderProps,false))],1),_vm._l((_vm.glyphTypes),function(type){return [_c('AutoSacrificeEffectTab',{directives:[{name:\"show\",rawName:\"v-show\",value:(type.id === _vm.advancedType),expression:\"type.id === advancedType\"}],key:type.id,attrs:{\"glyph-type\":type.id}})]})],2):_vm._e(),(_vm.mode === _vm.modes.EFFECT_SCORE)?_c('div',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_c('div',[_vm._v(\" Glyph Type: \"),_vm._l((_vm.glyphTypes),function(type){return _c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(type.id.capitalize()),expression:\"type.id.capitalize()\"}],key:type.id,staticClass:\"l-glyph-sacrifice-options__advanced-type-select c-glyph-sacrifice-options__advanced-type-select\",style:(_vm.advancedTypeSelectStyle(type)),on:{\"click\":function($event){_vm.advancedType=type.id}}},[_vm._v(\" \"+_vm._s(_vm.getSymbol(type.id))+\" \")])})],2),_c('br'),_vm._l((_vm.glyphTypes),function(type){return [_c('AutoSacrificeAdvancedTab',{directives:[{name:\"show\",rawName:\"v-show\",value:(type.id === _vm.advancedType),expression:\"type.id === advancedType\"}],key:type.id,attrs:{\"glyph-type\":type.id}})]})],2):_vm._e(),(_vm.mode === _vm.modes.LOWEST_ALCHEMY)?_c('div',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_c('br'),_vm._v(\" Glyph score is assigned based on current Alchemy Resource totals. Priority is given to the Glyph type with the lowest associated alchemy resource total. \"),_c('br'),_c('br'),_vm._v(\" This mode never keeps Glyphs. \")]):_vm._e(),(_vm.mode === _vm.modes.ALCHEMY_VALUE)?_c('div',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_c('br'),_vm._v(\" Glyphs will be assigned values based on \"),_c('i',[_vm._v(\"current\")]),_vm._v(\" refinement value, accounting for the type-specific resource caps. Priority is given to Glyphs which are worth the most alchemy resources; Glyphs which would cause you to hit a cap are effectively worth less. \"),_c('br'),_c('br'),_vm._v(\" This mode never keeps Glyphs. \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-auto-sac-type-tab\"},[_c('div',{staticClass:\"l-auto-sac-type-tab__row-wrapper\"},[_c('div',[_c('div',{staticClass:\"o-questionmark\",attrs:{\"ach-tooltip\":_vm.questionmarkTooltip}},[_vm._v(\" ? \")]),_c('b',[_vm._v(\" Threshold score\")]),_vm._v(\" (rarity % + effect scores) \")]),_c('input',{ref:\"scoreThreshold\",staticClass:\"c-auto-sac-type-tab__input\",style:(_vm.minScoreInputStyle),attrs:{\"type\":\"number\",\"min\":-_vm.weightInputLimit,\"max\":_vm.weightInputLimit},domProps:{\"value\":_vm.scoreThreshold},on:{\"blur\":_vm.setScoreThreshold}})]),_vm._l((_vm.effects),function(effect){return _c('div',{key:effect.id,staticClass:\"l-auto-sac-type-tab__row-wrapper\"},[_c('div',{staticClass:\"c-auto-sac-type-tab__effect-desc l-auto-sac-type-tab__effect-desc\",style:(_vm.descStyle)},[_vm._v(\" \"+_vm._s(effect.genericDesc)+\" \")]),_c('input',{staticClass:\"c-auto-sac-type-tab__input\",attrs:{\"type\":\"number\",\"min\":-_vm.weightInputLimit,\"max\":_vm.weightInputLimit},domProps:{\"value\":_vm.effectScores[effect.bitmaskIndex - _vm.indexOffset]},on:{\"blur\":function($event){return _vm.setEffectScore(effect.bitmaskIndex - _vm.indexOffset, $event)}}})])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutoSacrificeAdvancedTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutoSacrificeAdvancedTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutoSacrificeAdvancedTab.vue?vue&type=template&id=41be01c5&scoped=true&\"\nimport script from \"./AutoSacrificeAdvancedTab.vue?vue&type=script&lang=js&\"\nexport * from \"./AutoSacrificeAdvancedTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"41be01c5\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_c('div',[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.questionmarkTooltip),expression:\"questionmarkTooltip\"}],staticClass:\"o-questionmark\"},[_vm._v(\" ? \")]),_vm._v(\" Selected Glyphs will have at least \"),_c('input',{ref:\"effectCount\",staticClass:\"c-auto-sac-effect-tab__input\",attrs:{\"type\":\"number\",\"min\":\"0\",\"max\":\"8\"},domProps:{\"value\":_vm.effectCount},on:{\"blur\":_vm.setEffectCount}}),_vm._v(\" effects total, which must include \"),_c('i',[_vm._v(\"all\")]),_vm._v(\" of the following effects: \")]),_vm._l((_vm.effects),function(effect){return _c('div',{key:effect.id,staticClass:\"l-auto-sac-type-tab__row-wrapper\"},[_c('SelectedEffectToggle',{staticClass:\"c-auto-sac-type-tab__effect-desc l-specified-effect-tab__effect-desc\",style:(_vm.descStyle),attrs:{\"effect\":effect,\"glyph-type\":_vm.glyphType}})],1)}),_vm._v(\" Click to toggle individual effects on/off \")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.exclusionTooltip),expression:\"exclusionTooltip\"}],class:_vm.classObject,on:{\"click\":function($event){return _vm.toggleSelection()}}},[_c('span',[(_vm.isExcluded)?_c('i',{staticClass:\"fas fa-exclamation l-dock l-dock-left\"}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.description)+\" \"),(_vm.isExcluded)?_c('i',{staticClass:\"fas fa-exclamation l-dock l-dock-right\"}):_vm._e()]),(_vm.isActive)?_c('i',{staticClass:\"fas fa-check c-selected-effect-toggle-indicator--active\",style:({ 'background-color': _vm.color })}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectedEffectToggle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectedEffectToggle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SelectedEffectToggle.vue?vue&type=template&id=f7049e30&scoped=true&\"\nimport script from \"./SelectedEffectToggle.vue?vue&type=script&lang=js&\"\nexport * from \"./SelectedEffectToggle.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SelectedEffectToggle.vue?vue&type=style&index=0&id=f7049e30&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"f7049e30\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutoSacrificeEffectTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutoSacrificeEffectTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutoSacrificeEffectTab.vue?vue&type=template&id=6f5f01ec&scoped=true&\"\nimport script from \"./AutoSacrificeEffectTab.vue?vue&type=script&lang=js&\"\nexport * from \"./AutoSacrificeEffectTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6f5f01ec\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphFilterPanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphFilterPanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphFilterPanel.vue?vue&type=template&id=0b797f07&scoped=true&\"\nimport script from \"./GlyphFilterPanel.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphFilterPanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphFilterPanel.vue?vue&type=style&index=0&id=0b797f07&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b797f07\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.groupClass},[_c('GlyphSortButtonGroup'),_c('GlyphProtectedRowButtonGroup'),_c('GlyphAutosortButtonGroup'),_c('GlyphCleanButtonGroup')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-glyph-inventory-management-group\"},[_c('div',{staticClass:\"l-glyph-sacrifice-options__header\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.questionMarkTooltip),expression:\"questionMarkTooltip\"}],staticClass:\"o-questionmark\"},[_vm._v(\" ? \")]),_vm._v(\" Auto Glyph Arrangement: \")]),_c('ButtonCycle',{staticClass:\"c-glyph-inventory-option\",attrs:{\"text\":\"Auto-sort Mode:\",\"labels\":_vm.sortModes},model:{value:(_vm.autoSort),callback:function ($$v) {_vm.autoSort=$$v},expression:\"autoSort\"}}),_c('ToggleButton',{staticClass:\"c-glyph-inventory-option\",attrs:{\"label\":\"Auto-collapse space:\"},model:{value:(_vm.autoCollapse),callback:function ($$v) {_vm.autoCollapse=$$v},expression:\"autoCollapse\"}}),(_vm.showAutoAutoClean)?_c('ToggleButton',{staticClass:\"c-glyph-inventory-option\",attrs:{\"label\":\"Auto-purge on Realities:\"},model:{value:(_vm.autoAutoClean),callback:function ($$v) {_vm.autoAutoClean=$$v},expression:\"autoAutoClean\"}}):_vm._e(),(_vm.showAutoAutoClean)?_c('ToggleButton',{staticClass:\"c-glyph-inventory-option\",attrs:{\"label\":\"Never Auto-purge Glyphs accepted by filter:\",\"tooltip-class\":\"c-glyph-inventory-option__tooltip\",\"tooltip-content\":_vm.keepTooltip},model:{value:(_vm.applyFilterToPurge),callback:function ($$v) {_vm.applyFilterToPurge=$$v},expression:\"applyFilterToPurge\"}}):_vm._e(),(_vm.showAutoEquip)?_c('ButtonCycle',{staticClass:\"c-glyph-inventory-option\",attrs:{\"text\":\"Auto-equip Mode:\",\"labels\":_vm.sortModes},model:{value:(_vm.autoEquip),callback:function ($$v) {_vm.autoEquip=$$v},expression:\"autoEquip\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',_vm._b({on:{\"click\":_vm.handleClick}},'button',_vm.$attrs,false),[_vm._v(\" \"+_vm._s(_vm.displayText)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ButtonCycle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ButtonCycle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ButtonCycle.vue?vue&type=template&id=f8657244&\"\nimport script from \"./ButtonCycle.vue?vue&type=script&lang=js&\"\nexport * from \"./ButtonCycle.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphAutosortButtonGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphAutosortButtonGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphAutosortButtonGroup.vue?vue&type=template&id=38392132&scoped=true&\"\nimport script from \"./GlyphAutosortButtonGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphAutosortButtonGroup.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"38392132\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.glyphSacrificeUnlocked)?_c('div',{staticClass:\"o-glyph-inventory-management-group\"},[_c('div',{staticClass:\"l-glyph-sacrifice-options__header\"},[_vm._v(\" Remove weaker Glyphs: \")]),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.autoClean}},[_vm._v(\" Purge Glyphs \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" \"+_vm._s(_vm.autoCleanTooltip)+\" \")])]),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.harshAutoClean}},[_vm._v(\" Harsh Purge Glyphs \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" \"+_vm._s(_vm.harshAutoCleanTooltip)+\" \")])]),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.deleteAllUnprotected}},[_vm._v(\" \"+_vm._s(_vm.removeString)+\" all unprotected Glyphs \")]),(_vm.hasFilter)?_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.deleteAllRejected}},[_vm._v(\" \"+_vm._s(_vm.removeString)+\" all Glyphs rejected by filtering \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip l-rejected-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.deleteRejectedTooltip)+\" \")])]):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCleanButtonGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCleanButtonGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphCleanButtonGroup.vue?vue&type=template&id=0a4a783b&scoped=true&\"\nimport script from \"./GlyphCleanButtonGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphCleanButtonGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphCleanButtonGroup.vue?vue&type=style&index=0&id=0a4a783b&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0a4a783b\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-glyph-inventory-management-group\"},[_c('div',{staticClass:\"l-glyph-sacrifice-options__header\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.questionMarkTooltip),expression:\"questionMarkTooltip\"}],staticClass:\"o-questionmark\"},[_vm._v(\" ? \")]),_vm._v(\" Protected Slots: (\"+_vm._s(_vm.quantifyInt(\"row\", _vm.protectedRows))+\") \")]),_c('button',{class:_vm.addRowButtonClass(),on:{\"click\":_vm.addRow}},[_vm._v(\" Add a protected row \"),(_vm.isProtectedRowsMax())?_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" One row is permanently un-protected for new Glyphs \")]):_vm._e()]),_c('button',{class:_vm.removeRowButtonClass(),on:{\"click\":_vm.removeRow}},[_vm._v(\" Remove a protected row \")]),_c('ToggleButton',{staticClass:\"c-glyph-inventory-option\",attrs:{\"label\":\"Move Glyphs on changing row count:\"},model:{value:(_vm.moveGlyphs),callback:function ($$v) {_vm.moveGlyphs=$$v},expression:\"moveGlyphs\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphProtectedRowButtonGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphProtectedRowButtonGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphProtectedRowButtonGroup.vue?vue&type=template&id=0b9f4462&scoped=true&\"\nimport script from \"./GlyphProtectedRowButtonGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphProtectedRowButtonGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphProtectedRowButtonGroup.vue?vue&type=style&index=0&id=0b9f4462&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b9f4462\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-glyph-inventory-management-group\"},[_c('div',{staticClass:\"l-glyph-sacrifice-options__header\"},[_vm._v(\" Sort Glyphs: \")]),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.sortByLevel}},[_vm._v(\" Sort by level \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" Arranges by decreasing Glyph level \")])]),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.sortByPower}},[_vm._v(\" Sort by power \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" Arranges by decreasing level×rarity \")])]),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.sortByEffect}},[_vm._v(\" Sort by effect \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" Groups Glyphs together based on effects \")])]),(_vm.showScoreFilter)?_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.sortByScore}},[_vm._v(\" Sort by score \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" Arranges by decreasing Glyph filter score \")])]):_vm._e(),_c('button',{staticClass:\"c-glyph-inventory-option\",on:{\"click\":_vm.collapseEmpty}},[_vm._v(\" Collapse empty space \"),_c('div',{staticClass:\"c-glyph-inventory-option__tooltip\"},[_vm._v(\" Moves all Glyphs to the earliest empty slots \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSortButtonGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSortButtonGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphSortButtonGroup.vue?vue&type=template&id=8971b8fa&scoped=true&\"\nimport script from \"./GlyphSortButtonGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphSortButtonGroup.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8971b8fa\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphInventoryManagementPanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphInventoryManagementPanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphInventoryManagementPanel.vue?vue&type=template&id=2f13930a&scoped=true&\"\nimport script from \"./GlyphInventoryManagementPanel.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphInventoryManagementPanel.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2f13930a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-glyph-sacrifice-options c-glyph-sacrifice-options l-glyph-sidebar-panel-size\"},[_c('span',{staticClass:\"c-glyph-sacrifice-options__advanced\"},[_vm._v(\" Behavior for deleted and filtered Glyphs: \")]),_c('br'),_c('div',{staticClass:\"l-glyph-auto-pick-options__container\"},_vm._l((_vm.availableModes),function(modeID){return _c('div',{key:modeID,class:_vm.optionClass(modeID),on:{\"click\":function($event){return _vm.setMode(modeID)}}},[_vm._v(\" \"+_vm._s(_vm.modeDesc(modeID))+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphRejectionPanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphRejectionPanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphRejectionPanel.vue?vue&type=template&id=295c4c76&scoped=true&\"\nimport script from \"./GlyphRejectionPanel.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphRejectionPanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphRejectionPanel.vue?vue&type=style&index=0&id=295c4c76&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"295c4c76\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-glyph-sacrifice-options c-glyph-sacrifice-options l-glyph-sidebar-panel-size\"},[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.questionmarkTooltip),expression:\"questionmarkTooltip\"}],staticClass:\"l-glyph-sacrifice-options__help c-glyph-sacrifice-options__help o-questionmark\"},[_vm._v(\" ? \")]),_c('div',{staticClass:\"l-glyph-set-save__header\"},[_vm._v(\" When loading a preset, try to match the following attributes. \\\"Exact\\\" will only equip Glyphs identical to the ones in the preset. The other settings will, loosely speaking, allow \\\"better\\\" Glyphs to be equipped in their place. \")]),_c('div',{staticClass:\"c-glyph-set-save-container\"},[_c('ToggleButton',{staticClass:\"c-glyph-set-save-setting-button\",attrs:{\"label\":\"Effects:\",\"on\":\"Including\",\"off\":\"Exact\"},model:{value:(_vm.effects),callback:function ($$v) {_vm.effects=$$v},expression:\"effects\"}}),_c('ToggleButton',{staticClass:\"c-glyph-set-save-setting-button\",attrs:{\"label\":\"Level:\",\"on\":\"Increased\",\"off\":\"Exact\"},model:{value:(_vm.level),callback:function ($$v) {_vm.level=$$v},expression:\"level\"}}),_c('ToggleButton',{staticClass:\"c-glyph-set-save-setting-button\",attrs:{\"label\":\"Rarity:\",\"on\":\"Increased\",\"off\":\"Exact\"},model:{value:(_vm.rarity),callback:function ($$v) {_vm.rarity=$$v},expression:\"rarity\"}})],1),_vm._l((_vm.glyphSets),function(set,id){return _c('div',{key:id,staticClass:\"c-glyph-single-set-save\"},[_c('div',{staticClass:\"c-glyph-set-preview-area\"},[_c('GlyphSetPreview',{key:_vm.glyphSetKey(set, id),attrs:{\"text\":_vm.setName(id),\"text-hidden\":true,\"glyphs\":set,\"flip-tooltip\":true,\"none-text\":_vm.noSet}})],1),_c('div',{staticClass:\"c-glyph-single-set-save-flexbox\"},[_c('div',{attrs:{\"ach-tooltip\":\"Set a custom name (up to 20 characters)\"}},[_c('input',{staticClass:\"c-glyph-sets-save-name__input\",attrs:{\"id\":id,\"type\":\"text\",\"size\":\"20\",\"maxlength\":\"20\",\"placeholder\":\"Custom set name\"},domProps:{\"value\":_vm.names[id]},on:{\"blur\":_vm.nicknameBlur}})]),_c('div',{staticClass:\"c-glyph-single-set-save-flexbox-buttons\"},[_c('button',{staticClass:\"c-glyph-set-save-button\",class:{'c-glyph-set-save-button--unavailable': !_vm.hasEquipped || set.length},on:{\"click\":function($event){return _vm.saveGlyphSet(id)}}},[_vm._v(\" Save \")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.loadingTooltip(set)),expression:\"loadingTooltip(set)\"}],staticClass:\"c-glyph-set-save-button\",class:{'c-glyph-set-save-button--unavailable': !_vm.setLengthValid(set)},on:{\"click\":function($event){return _vm.loadGlyphSet(set, id)}}},[_vm._v(\" Load \")]),_c('button',{staticClass:\"c-glyph-set-save-button\",class:{'c-glyph-set-save-button--unavailable': !set.length},on:{\"click\":function($event){return _vm.deleteGlyphSet(id)}}},[_vm._v(\" Delete \")])])])])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetSavePanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetSavePanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphSetSavePanel.vue?vue&type=template&id=3c1a8770&scoped=true&\"\nimport script from \"./GlyphSetSavePanel.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphSetSavePanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphSetSavePanel.vue?vue&type=style&index=0&id=3c1a8770&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3c1a8770\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphTabSidebar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphTabSidebar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphTabSidebar.vue?vue&type=template&id=083c41f9&scoped=true&\"\nimport script from \"./GlyphTabSidebar.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphTabSidebar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"083c41f9\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('button',{class:_vm.buttonClass,attrs:{\"ach-tooltip\":_vm.tooltip},on:{\"click\":_vm.toggleActive}},[(_vm.isDoomed)?_c('div',[_vm._v(\" You cannot amplify Doomed Realities. \")]):(_vm.canAmplify)?_c('div',[(_vm.isActive)?_c('span',[_vm._v(\"Will be amplified:\")]):_c('span',[_vm._v(\"Amplify this Reality:\")]),_c('br'),_vm._v(\" All rewards ×\"+_vm._s(_vm.formatInt(_vm.ratio))+\" \")]):_c('div',[_vm._v(\" Not enough stored real time to amplify. \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityAmplifyButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityAmplifyButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityAmplifyButton.vue?vue&type=template&id=e1d64202&scoped=true&\"\nimport script from \"./RealityAmplifyButton.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityAmplifyButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e1d64202\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{class:_vm.realityReminderClass,style:(_vm.styleObject),on:{\"click\":_vm.clicked}},[(!_vm.canReality)?_c('span',[_vm._v(\" You still need to unlock Reality in the Time Study Tree. \")]):(_vm.suggestions.length === 0)?_c('span',[_vm._v(\" Ready to Reality! You have unlocked every available upgrade within this Reality. \")]):_c('span',[_c('i',{class:_vm.dropDownIconClass}),_vm._v(\" You have \"+_vm._s(_vm.quantifyInt(\"thing\", _vm.suggestions.length))+\" you may want to do before Reality. \"+_vm._s(_vm.clickText)+\" \"),(_vm.isExpanded)?_c('div',{staticClass:\"l-suggestions\"},[_c('br'),_vm._l((_vm.suggestions),function(suggestion){return _c('div',{key:suggestion},[_vm._v(\" \"+_vm._s(suggestion)+\" \")])})],2):_vm._e()])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityReminder.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityReminder.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityReminder.vue?vue&type=template&id=fc08f092&scoped=true&\"\nimport script from \"./RealityReminder.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityReminder.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RealityReminder.vue?vue&type=style&index=0&id=fc08f092&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"fc08f092\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:['l-reset-reality-button',\n 'c-reset-reality-button',\n {'c-reset-reality-button-celestial': _vm.isInCelestialReality}],on:{\"click\":_vm.resetReality}},[_c('div',{staticClass:\"l-reality-button__contents\"},[_vm._v(\" \"+_vm._s(_vm.resetText)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetRealityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetRealityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResetRealityButton.vue?vue&type=template&id=708824d8&scoped=true&\"\nimport script from \"./ResetRealityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ResetRealityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"708824d8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-current-glyph-effects l-current-glyph-effects\",class:{'c-sacrificed-glyphs--dragover': _vm.hasDragover},on:{\"dragover\":_vm.dragover,\"dragleave\":_vm.dragleave,\"drop\":_vm.drop}},[_c('div',{staticClass:\"l-sacrificed-glyphs__help\"},[(_vm.isDoomed)?_c('span',{staticClass:\"pelle-current-glyph-effects\"},[_vm._v(\" You cannot sacrifice Glyphs while Doomed. \")]):_c('span',[_c('div',[_vm._v(\"Drag Glyphs here or shift-click to Sacrifice.\")]),_c('div',[_vm._v(\"The confirmation can be disabled in Options or by holding Ctrl.\")])])]),(_vm.hasAlteration)?_c('div',[_c('span',{staticClass:\"c-altered-glyphs-toggle-button\",on:{\"click\":_vm.toggleAlteration}},[_c('i',{class:_vm.dropDownIconClass}),_c('b',[_vm._v(\" Altered Glyphs\")])]),_c('br'),(_vm.hideAlteration)?_c('div',[_vm._v(\" (Details hidden, click to unhide) \")]):_c('div',[_vm._v(\" Glyph types will have one of their effects improved\"),_c('br'),_vm._v(\" when their Glyph type's total sacrifice value is above: \"),_c('br'),_c('br'),_c('b',[_c('span',{style:(_vm.addStyle)},[_vm._v(_vm._s(_vm.format(_vm.addThreshold))+\" - an additional secondary effect\")]),_c('br'),_c('span',{style:(_vm.empowerStyle)},[_vm._v(_vm._s(_vm.format(_vm.empowerThreshold))+\" - formula drastically improved\")]),_c('br'),_c('span',{style:(_vm.boostStyle)},[_vm._v(_vm._s(_vm.format(_vm.boostThreshold))+\" - a boost depending on Glyph Sacrifice\")])]),_c('br'),_c('br'),_vm._v(\" All effects from Glyph Sacrifice can no longer be increased once they reach \"+_vm._s(_vm.format(_vm.maxSacrifice))+\". \")])]):_vm._e(),_c('br'),_c('div',{staticClass:\"c-sacrificed-glyphs__header\"},[_vm._v(\" Glyph Sacrifice Boosts: \")]),(_vm.anySacrifices && !_vm.isDoomed)?_c('div',[(_vm.teresaMult > 1)?_c('div',[_vm._v(\" Glyph sacrifice values are multiplied by \"+_vm._s(_vm.formatX(_vm.teresaMult, 2, 2))+\"; Teresa was last done at \"+_vm._s(_vm.lastMachines)+\". \"),(_vm.hasSeenRealityGlyph)?_c('span',[_vm._v(\" Reality Glyphs are unaffected by this multiplier and have no altered effects. \")]):_vm._e()]):_vm._e(),_vm._l((_vm.types),function(type){return [_c('TypeSacrifice',{key:type + _vm.glyphSymbol(type),attrs:{\"type\":type,\"has-dragover\":_vm.hasDragover}})]})],2):(_vm.isDoomed)?_c('div',{staticClass:\"pelle-current-glyph-effects\"},[_vm._v(\" All boosts from Glyph Sacrifice are disabled while Doomed, including changes to effects due to Altered Glyphs. \")]):_c('div',[_vm._v(\" You haven't Sacrificed any Glyphs yet! \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.amount.gte(0))?_c('div',{style:(_vm.style)},[_c('div',[_c('div',{staticClass:\"l-sacrificed-glyphs__type-symbol c-sacrificed-glyphs__type-symbol\"},[_vm._v(\" \"+_vm._s(_vm.symbol)+\" \")]),_c('div',{staticClass:\"l-sacrificed-glyphs__type-amount c-sacrificed-glyphs__type-amount\"},[_vm._v(\" \"+_vm._s(_vm.formatAmount)+\" \"),(_vm.showNewSacrifice)?_c('span',{staticClass:\"c-sacrificed-glyphs__type-new-amount\"},[_vm._v(\" + \"+_vm._s(_vm.formatNewAmount)+\" ➜ \"+_vm._s(_vm.formatTotalAmount)+\" \")]):_vm._e()])]),(_vm.showNewSacrifice)?_c('span',{staticClass:\"c-sacrificed-glyphs__type-new-amount\"},[_vm._v(\" \"+_vm._s(_vm.newDescription)+\" \")]):_c('span',[_vm._v(\" \"+_vm._s(_vm.description)+\" \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TypeSacrifice.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TypeSacrifice.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TypeSacrifice.vue?vue&type=template&id=ec571984&scoped=true&\"\nimport script from \"./TypeSacrifice.vue?vue&type=script&lang=js&\"\nexport * from \"./TypeSacrifice.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TypeSacrifice.vue?vue&type=style&index=0&id=ec571984&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ec571984\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SacrificedGlyphs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SacrificedGlyphs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SacrificedGlyphs.vue?vue&type=template&id=9dad64e2&scoped=true&\"\nimport script from \"./SacrificedGlyphs.vue?vue&type=script&lang=js&\"\nexport * from \"./SacrificedGlyphs.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9dad64e2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{staticClass:\"c-single-glyph-cosmetic\",on:{\"dragover\":_vm.dragover,\"drop\":_vm.drop}},[(_vm.glyph)?_c('div',{staticClass:\"c-glyph-info\"},[_c('div',{staticClass:\"c-glyph-info-section\"},[_c('GlyphComponent',{attrs:{\"glyph\":_vm.glyph,\"flip-tooltip\":true}})],1),_c('div',{staticClass:\"c-glyph-info-section c-cosmetic-text\"},[_c('u',[_vm._v(\"Cosmetic Attributes\")]),_vm._v(\" Type: \"+_vm._s(_vm.glyph.type.capitalize())+\" \"),_c('br'),_vm._v(\" All: \"+_vm._s(_vm.typeCosmetic)+\" \"),_c('br'),_vm._v(\" Single: \"+_vm._s(_vm.specialCosmetic)+\" \")]),_c('div',{staticClass:\"c-glyph-info-section\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.openModal}},[_vm._v(\" Customize! \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":function($event){_vm.glyphID = -1}}},[_vm._v(\" Clear Box \")])],1)]):_c('div',[_vm._v(\" Drag a Glyph over this box to change its appearance! This will make a visual copy of it here, but leave the actual Glyph itself in your inventory. Removing, gaining, or moving any Glyphs will clear this box. \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleGlyphCustomzationPanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleGlyphCustomzationPanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingleGlyphCustomzationPanel.vue?vue&type=template&id=09c183dd&scoped=true&\"\nimport script from \"./SingleGlyphCustomzationPanel.vue?vue&type=script&lang=js&\"\nexport * from \"./SingleGlyphCustomzationPanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SingleGlyphCustomzationPanel.vue?vue&type=style&index=0&id=09c183dd&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"09c183dd\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphsTab.vue?vue&type=template&id=4515e2a7&scoped=true&\"\nimport script from \"./GlyphsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphsTab.vue?vue&type=style&index=0&id=4515e2a7&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4515e2a7\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-reality-upgrade-grid\"},[_c('div',{staticClass:\"c-cap-text\"},[_vm._v(\" Your Machine cap is \"),_c('span',{staticClass:\"c-reality-tab__reality-machines\"},[_vm._v(_vm._s(_vm.capStr))]),_vm._v(\". \")]),_c('div',{staticClass:\"c-info-text\"},[_vm._v(\" You have reached the limits of Reality and cannot hold more than \"+_vm._s(_vm.format(_vm.capRM))+\" Reality Machines. \"),_c('br'),_vm._v(\" Machines gained in excess of \"+_vm._s(_vm.format(_vm.baseRMCap))+\" will raise the maximum amount of Imaginary Machines you can have. \"),_c('br'),_vm._v(\" Imaginary Machines are gained passively over time up to the cap, but gain slows down exponentially as you approach the cap. \"),_c('br'),_vm._v(\" Every \"+_vm._s(_vm.formatInt(_vm.scaleTime))+\" seconds the difference in iM between your current amount and the cap will be cut in half. \"),_c('br'),_c('br'),_vm._v(\" The first two rows of upgrades can be purchased endlessly and the rest of the upgrades are one-time upgrades with requirements. \"),_c('br'),_vm._v(\" Upgrades here have the same gameplay and visual behavior as Reality Upgrades, but cost Imaginary Machines instead. \"),_c('span',{attrs:{\"ach-tooltip\":_vm.lockTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})])]),_vm._l((5),function(row){return _c('div',{key:row,staticClass:\"l-reality-upgrade-grid__row\"},_vm._l((5),function(column){return _c('ImaginaryUpgradeButton',{key:_vm.id(row, column),attrs:{\"upgrade\":_vm.upgrades[_vm.id(row, column)]}})}),1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.etaText),expression:\"etaText\"}],staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-reality-upgrade-btn c-reality-upgrade-btn\",class:_vm.classObject,on:{\"click\":[function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.toggleLock(_vm.upgrade)},function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.upgrade.purchase()}]}},[_c('HintText',{staticClass:\"l-hint-text--reality-upgrade c-hint-text--reality-upgrade\",attrs:{\"type\":\"realityUpgrades\"}},[_vm._v(\" \"+_vm._s(_vm.config.name)+\" \")]),_c('span',{class:{ 'o-pelle-disabled': _vm.upgrade.pelleDisabled }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),((_vm.$viewModel.shiftDown === _vm.isAvailableForPurchase) && !_vm.isRebuyable)?[_c('br'),_c('DescriptionDisplay',{staticClass:\"c-reality-upgrade-btn__requirement\",attrs:{\"config\":_vm.requirementConfig,\"label\":\"Requirement:\"}})]:[_c('EffectDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\"}}),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\",\"name\":\"Imaginary Machine\"}}):_vm._e()]],2)],1),(_vm.canBeLocked)?_c('div',{staticClass:\"o-requirement-lock\"},[(_vm.hasRequirementLock)?_c('i',{staticClass:\"fas fa-lock\"}):(_vm.canLock)?_c('i',{staticClass:\"fas fa-lock-open\"}):_vm._e()]):_vm._e(),(_vm.isRebuyable && _vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon-reality-btn o-primary-btn--reality-upgrade-toggle\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImaginaryUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImaginaryUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImaginaryUpgradeButton.vue?vue&type=template&id=530b024a&scoped=true&\"\nimport script from \"./ImaginaryUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ImaginaryUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"530b024a\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImaginaryUpgradesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImaginaryUpgradesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImaginaryUpgradesTab.vue?vue&type=template&id=6888454f&scoped=true&\"\nimport script from \"./ImaginaryUpgradesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ImaginaryUpgradesTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImaginaryUpgradesTab.vue?vue&type=style&index=0&id=6888454f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6888454f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-challenges-tab\"},[_c('ChallengeTabHeader'),_c('div',[_vm._v(\" An active Big Crunch Autobuyer will Crunch immediately when reaching an Infinity Challenge's antimatter goal, regardless of settings. \")]),_c('div',[_vm._v(_vm._s(_vm.nextAtDisplay))]),_c('ChallengeGrid',{attrs:{\"challenges\":_vm.challenges,\"is-challenge-visible\":_vm.isChallengeVisible},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar challenge = ref.challenge;\nreturn [_c('InfinityChallengeBox',{attrs:{\"challenge\":challenge}})]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ChallengeBox',{staticClass:\"c-challenge-box--infinity\",attrs:{\"name\":_vm.name,\"is-unlocked\":_vm.isUnlocked,\"is-running\":_vm.isRunning,\"is-completed\":_vm.isCompleted},on:{\"start\":function($event){return _vm.challenge.requestStart()}},scopedSlots:_vm._u([{key:\"top\",fn:function(){return [_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),(_vm.isRunning)?_c('EffectDisplay',{attrs:{\"config\":_vm.config}}):_vm._e()]},proxy:true},{key:\"bottom\",fn:function(){return [_c('div',{staticClass:\"l-challenge-box__bottom--infinity\"},[_c('span',[_vm._v(\"Goal: \"+_vm._s(_vm.format(_vm.config.goal))+\" antimatter\")]),_c('DescriptionDisplay',{attrs:{\"config\":_vm.config.reward,\"title\":\"Reward:\"}}),(_vm.isCompleted)?_c('EffectDisplay',{attrs:{\"config\":_vm.config.reward}}):_vm._e()],1)]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-challenge-box l-challenge-box\"},[_c('HintText',{staticClass:\"l-hint-text--challenge\",attrs:{\"type\":\"challenges\"}},[_vm._v(\" \"+_vm._s(_vm.name)+\" \")]),_vm._t(\"top\"),_c('div',{staticClass:\"l-challenge-box__fill\"}),_c('button',{class:_vm.buttonClassObject,on:{\"click\":function($event){return _vm.$emit('start')}}},[_vm._v(\" \"+_vm._s(_vm.buttonText)+\" \")]),_vm._t(\"bottom\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChallengeBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChallengeBox.vue?vue&type=template&id=78886df5&scoped=true&\"\nimport script from \"./ChallengeBox.vue?vue&type=script&lang=js&\"\nexport * from \"./ChallengeBox.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChallengeBox.vue?vue&type=style&index=0&id=78886df5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"78886df5\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityChallengeBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityChallengeBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityChallengeBox.vue?vue&type=template&id=61920d61&scoped=true&\"\nimport script from \"./InfinityChallengeBox.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityChallengeBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"61920d61\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityChallengesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityChallengesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityChallengesTab.vue?vue&type=template&id=e3a1daec&scoped=true&\"\nimport script from \"./InfinityChallengesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityChallengesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e3a1daec\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.activeComponent,{tag:\"component\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-infinity-dim-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[(!_vm.isEC8Running)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all \")]):_vm._e(),(_vm.isAnyAutobuyerUnlocked && !_vm.isEC8Running)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.toggleAllAutobuyers}},[_vm._v(\" Toggle all autobuyers \")]):_vm._e()],1),_c('div',[_c('p',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-infinity-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.infinityPower, 2, 1)))]),_vm._v(\" Infinity Power, \"),_c('br'),(!_vm.isEC9Running)?_c('span',[_vm._v(\" increased by \"),_c('span',{staticClass:\"c-infinity-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatPow(_vm.conversionRate, 2, 3)))])]):_c('span',[_vm._v(\" translated \")]),_vm._v(\" to a \"),_c('span',{staticClass:\"c-infinity-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatX(_vm.dimMultiplier, 2, 1)))]),_vm._v(\" multiplier on all \"),(!_vm.isEC9Running)?_c('span',[_vm._v(\"Antimatter Dimensions.\")]):_c('span',[_vm._v(\"Time Dimensions due to Eternity Challenge 9.\")])])]),(_vm.enslavedCompleted)?_c('div',{staticClass:\"l-infinity-dim-tab__enslaved-reward-container l-spoon-btn-group\"},[_c('button',{staticClass:\"c-infinity-dim-tab__tesseract-button\",class:{\n 'c-infinity-dim-tab__tesseract-button--disabled': !_vm.canBuyTesseract,\n 'o-pelle-disabled-pointer': _vm.creditsClosed\n },on:{\"click\":_vm.buyTesseract}},[_c('p',[_vm._v(\" Buy a Tesseract (\"+_vm._s(_vm.tesseractCountString)+\") \")]),_c('p',[_vm._v(\"Increase Infinity Dimension caps by \"+_vm._s(_vm.format(_vm.nextDimCapIncrease, 2)))]),_c('p',[_c('b',[_vm._v(\"Costs: \"+_vm._s(_vm.format(_vm.tesseractCost))+\" IP\")])])]),(_vm.isAutoTessUnlocked)?_c('PrimaryToggleButton',{staticStyle:{\"margin-top\":\"-1rem\"},attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutoTessOn),callback:function ($$v) {_vm.isAutoTessOn=$$v},expression:\"isAutoTessOn\"}}):_vm._e()],1):_vm._e(),(_vm.isEnslavedRunning)?_c('div',[_vm._v(\" All Infinity Dimensions are limited to a single purchase. \")]):_c('div',[_vm._v(\" All Infinity Dimensions except for the 8th are limited to a maximum of \"+_vm._s(_vm.format(Math.pow( _vm.totalDimCap, _vm.capExpo ), 2))+\" purchases each. \"),_c('br'),_vm._v(\" The 8th Infinity Dimension is limited to \"+_vm._s(_vm.format(Math.pow( 1e10, this.capExpo ), 2))+\" purchases. \")]),_c('div',[_vm._v(\"You are getting \"+_vm._s(_vm.format(_vm.powerPerSecond, 2, 0))+\" \"+_vm._s(_vm.incomeType)+\" per second.\")]),_c('br'),(_vm.atCap)?_c('span',[_vm._v(\"Due to instability, your Infinity Power gain is softcapped after \"+_vm._s(_vm.format(this.textCap)))]):_vm._e(),_c('br'),(_vm.atTessCap)?_c('span',[_vm._v(\"Tesseracts beyond \"+_vm._s(_vm.format(this.TesseractsCap))+\" are physically impossible\")]):_vm._e(),_c('br'),(_vm.isEC8Running)?_c('b',{staticClass:\"l-infinity-dim-tab__ec8-purchases\"},[_vm._v(\" You have \"+_vm._s(_vm.quantifyInt(\"purchase\", _vm.EC8PurchasesLeft))+\" left within Eternity Challenge 8. \")]):_vm._e(),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('InfinityDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),1),(_vm.showLockedDimCostNote)?_c('div',[_vm._v(\" Hold shift to see the Infinity Point cost for locked Infinity Dimensions. \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { DC } from \"./constants\";\r\nimport { deepmergeAll } from \"@/utility/deepmerge\";\r\nimport { GameMechanicState } from \"./game-mechanics\";\r\n\r\nexport function startEternityChallenge() {\r\n initializeChallengeCompletions();\r\n initializeResourcesAfterEternity();\r\n resetInfinityRuns();\r\n InfinityDimensions.fullReset();\r\n Replicanti.reset();\r\n resetChallengeStuff();\r\n AntimatterDimensions.reset();\r\n player.replicanti.galaxies = 0;\r\n Currency.infinityPoints.reset();\r\n InfinityDimensions.resetAmount();\r\n player.records.bestInfinity.bestIPminEternity = DC.D0;\r\n player.records.thisEternity.bestEPmin = DC.D0;\r\n resetTimeDimensions();\r\n resetTickspeed();\r\n player.records.thisInfinity.maxAM = DC.D0;\r\n player.records.thisEternity.maxAM = DC.D0;\r\n Currency.antimatter.reset();\r\n playerInfinityUpgradesOnReset();\r\n AchievementTimers.marathon2.reset();\r\n ECTimeStudyState.invalidateCachedRequirements();\r\n}\r\n\r\nclass EternityChallengeRewardState extends GameMechanicState {\r\n constructor(config, challenge) {\r\n const effect = config.effect;\r\n const configCopy = deepmergeAll([{}, config]);\r\n configCopy.effect = () => effect(challenge.completions);\r\n super(configCopy);\r\n this._challenge = challenge;\r\n }\r\n\r\n get isEffectActive() {\r\n return this._challenge.completions > 0;\r\n }\r\n\r\n get isVEffectActive(){\r\n return this._challenge.completions > 0 && Ra.unlocks.imporvedECRewards.isUnlocked; \r\n }\r\n}\r\n\r\nexport class EternityChallengeState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this._fullId = `eterc${this.id}`;\r\n this._reward = new EternityChallengeRewardState(config.reward, this);\r\n this._vReward = new EternityChallengeRewardState(config.vReward, this);\r\n }\r\n\r\n get fullId() {\r\n return this._fullId;\r\n }\r\n\r\n get isUnlocked() {\r\n return player.challenge.eternity.unlocked === this.id;\r\n }\r\n\r\n get isRunning() {\r\n return player.challenge.eternity.current === this.id;\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isRunning;\r\n }\r\n\r\n get hasUnlocked() {\r\n return (player.reality.unlockedEC & (1 << this.id)) !== 0;\r\n }\r\n\r\n set hasUnlocked(value) {\r\n if (value) player.reality.unlockedEC |= (1 << this.id);\r\n }\r\n\r\n get completions() {\r\n const completions = player.eternityChalls[this.fullId];\r\n return completions === undefined ? 0 : completions;\r\n }\r\n\r\n set completions(value) {\r\n player.eternityChalls[this.fullId] = Math.min(value, this.maxCompletions);\r\n }\r\n\r\n get maxCompletions() {\r\n return Enslaved.isRunning && this.id === 1 ? 1000 : 5;\r\n }\r\n\r\n get remainingCompletions() {\r\n return this.maxCompletions - this.completions;\r\n }\r\n\r\n get isFullyCompleted() {\r\n return this.completions === this.maxCompletions;\r\n }\r\n\r\n get maxValidCompletions() {\r\n if (this.id !== 4 && this.id !== 12) return this.maxCompletions;\r\n let completions = this.completions;\r\n while (completions < this.maxCompletions && this.isWithinRestrictionAtCompletions(completions)) {\r\n completions++;\r\n }\r\n return completions;\r\n }\r\n\r\n get gainedCompletionStatus() {\r\n const status = {\r\n gainedCompletions: 0,\r\n hasMoreCompletions: false,\r\n totalCompletions: this.completions,\r\n };\r\n if (this.isFullyCompleted) return status;\r\n if (!Perk.studyECBulk.isBought) {\r\n if (this.canBeCompleted) {\r\n ++status.totalCompletions;\r\n status.gainedCompletions = 1;\r\n }\r\n return status;\r\n }\r\n\r\n let totalCompletions = this.completionsAtIP(player.records.thisEternity.maxIP);\r\n const maxValidCompletions = this.maxValidCompletions;\r\n if (totalCompletions > maxValidCompletions) {\r\n totalCompletions = maxValidCompletions;\r\n status.failedRestriction = this.config.failedRestriction;\r\n }\r\n status.totalCompletions = totalCompletions;\r\n status.gainedCompletions = totalCompletions - this.completions;\r\n status.hasMoreCompletions = this.completions + status.gainedCompletions < this.maxCompletions;\r\n status.nextGoalAt = this.goalAtCompletions(status.totalCompletions);\r\n return status;\r\n }\r\n\r\n get initialGoal() {\r\n if (Pelle.isDoomed && this.config.pelleGoal) {\r\n return this.config.pelleGoal;\r\n }\r\n return this.config.goal;\r\n }\r\n\r\n get goalIncrease() {\r\n if (Pelle.isDoomed && this.config.pelleGoalIncrease) {\r\n return this.config.pelleGoalIncrease;\r\n }\r\n return this.config.goalIncrease;\r\n }\r\n\r\n get currentGoal() {\r\n return this.goalAtCompletions(this.completions);\r\n }\r\n\r\n get isGoalReached() {\r\n return player.records.thisEternity.maxIP.gte(this.currentGoal);\r\n }\r\n\r\n get canBeCompleted() {\r\n return this.isGoalReached && this.isWithinRestriction;\r\n }\r\n\r\n goalAtCompletions(completions) {\r\n return completions > 0\r\n ? this.initialGoal.times(this.goalIncrease.pow(Math.min(completions, this.maxCompletions - 1)))\r\n : this.initialGoal;\r\n }\r\n\r\n completionsAtIP(ip) {\r\n if (ip.lt(this.initialGoal)) return 0;\r\n const completions = 1 + (ip.dividedBy(this.initialGoal)).log10() / this.goalIncrease.log10();\r\n return Math.min(Math.floor(completions), this.maxCompletions);\r\n }\r\n\r\n addCompletion(auto = false) {\r\n this.completions++;\r\n if ((this.id === 4 || this.id === 12) && auto) {\r\n this.tryFail(true);\r\n }\r\n if (this.id === 6) {\r\n GameCache.dimensionMultDecrease.invalidate();\r\n }\r\n if (this.id === 11) {\r\n GameCache.tickSpeedMultDecrease.invalidate();\r\n }\r\n }\r\n\r\n requestStart() {\r\n if (!Tab.challenges.eternity.isUnlocked || this.isRunning) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n if (!player.options.confirmations.challenges) {\r\n this.start();\r\n return;\r\n }\r\n if (this.isUnlocked) Modal.startEternityChallenge.show(this.id);\r\n }\r\n\r\n start(auto) {\r\n if (EternityChallenge.isRunning) return false;\r\n if (!this.isUnlocked) return false;\r\n const maxInversion = player.requirementChecks.reality.slowestBH <= 1e-300;\r\n if (this.id === 12 && ImaginaryUpgrade(24).isLockingMechanics && Ra.isRunning && maxInversion) {\r\n if (!auto) ImaginaryUpgrade(24).tryShowWarningModal(\"enter Eternity Challenge 12\");\r\n return false;\r\n }\r\n if (this.id === 7 && ImaginaryUpgrade(15).isLockingMechanics && TimeDimension(1).amount.gt(0)) {\r\n if (!auto) ImaginaryUpgrade(15).tryShowWarningModal(\"enter Eternity Challenge 7\");\r\n return false;\r\n }\r\n\r\n // If dilation is active, the { enteringEC: true } parameter will cause\r\n // dilation to not be disabled. We still don't force-eternity, though;\r\n // this causes TP to still be gained.\r\n const enteringGamespeed = getGameSpeedupFactor();\r\n if (Player.canEternity) eternity(false, auto, { enteringEC: true });\r\n player.challenge.eternity.current = this.id;\r\n if (this.id === 12) {\r\n if (enteringGamespeed.lt(0.001)) SecretAchievement(42).unlock();\r\n player.requirementChecks.reality.slowestBH = 1;\r\n }\r\n if (Enslaved.isRunning) {\r\n if (this.id === 6 && this.completions === 5) EnslavedProgress.ec6.giveProgress();\r\n if (!auto && EnslavedProgress.challengeCombo.hasProgress) Tab.challenges.normal.show();\r\n }\r\n startEternityChallenge();\r\n return true;\r\n }\r\n\r\n /**\r\n * @return {EternityChallengeRewardState}\r\n */\r\n get reward() {\r\n return this._reward;\r\n }\r\n\r\n get vReward() {\r\n return this._vReward;\r\n }\r\n\r\n get isWithinRestriction() {\r\n return this.isWithinRestrictionAtCompletions(this.completions);\r\n }\r\n\r\n isWithinRestrictionAtCompletions(completions) {\r\n return this.config.restriction === undefined ||\r\n this.config.checkRestriction(this.config.restriction(completions));\r\n }\r\n\r\n exit() {\r\n if (Player.isInAntimatterChallenge) {\r\n Player.antimatterChallenge.exit();\r\n }\r\n player.challenge.eternity.current = 0;\r\n eternity(true);\r\n }\r\n\r\n fail(auto = false) {\r\n this.exit();\r\n let reason;\r\n if (auto) {\r\n if (this.id === 4) {\r\n reason = restriction => `Auto Eternity Challenge completion completed ` +\r\n `Eternity Challenge ${this.id} and made the next tier ` +\r\n `require having less Infinities (${quantifyInt(\"Infinity\", restriction)} ` +\r\n `or less) than you had`;\r\n } else if (this.id === 12) {\r\n reason = restriction => `Auto Eternity Challenge completion completed ` +\r\n `Eternity Challenge ${this.id} and made the next tier ` +\r\n `require spending less time in it (${quantify(\"in-game second\", restriction, 0, 1)} ` +\r\n `or less) than you had spent`;\r\n }\r\n } else if (this.id === 4) {\r\n reason = restriction => `You failed Eternity Challenge ${this.id} due to ` +\r\n `having more than ${quantifyInt(\"Infinity\", restriction)}`;\r\n } else if (this.id === 12) {\r\n reason = restriction => `You failed Eternity Challenge ${this.id} due to ` +\r\n `spending more than ${quantify(\"in-game second\", restriction, 0, 1)} in it`;\r\n }\r\n Modal.message.show(`${reason(this.config.restriction(this.completions))}, ` +\r\n `which has caused you to exit it.`,\r\n { closeEvent: GAME_EVENT.REALITY_RESET_AFTER }, 1);\r\n EventHub.dispatch(GAME_EVENT.CHALLENGE_FAILED);\r\n }\r\n\r\n tryFail(auto = false) {\r\n if (this.isRunning && !this.isWithinRestriction) {\r\n this.fail(auto);\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * @param id\r\n * @return {EternityChallengeState}\r\n */\r\nexport const EternityChallenge = EternityChallengeState.createAccessor(GameDatabase.challenges.eternity);\r\n\r\n/**\r\n * @returns {EternityChallengeState}\r\n */\r\nObject.defineProperty(EternityChallenge, \"current\", {\r\n get: () => (player.challenge.eternity.current > 0\r\n ? EternityChallenge(player.challenge.eternity.current)\r\n : undefined),\r\n});\r\n\r\nObject.defineProperty(EternityChallenge, \"isRunning\", {\r\n get: () => player.challenge.eternity.current !== 0,\r\n});\r\n\r\nexport const EternityChallenges = {\r\n /**\r\n * @type {EternityChallengeState[]}\r\n */\r\n all: EternityChallenge.index.compact(),\r\n\r\n get completions() {\r\n return EternityChallenges.all\r\n .map(ec => ec.completions)\r\n .sum();\r\n },\r\n\r\n get maxCompletions() {\r\n return EternityChallenges.all\r\n .map(ec => ec.maxCompletions)\r\n .sum();\r\n },\r\n\r\n get remainingCompletions() {\r\n return EternityChallenges.all\r\n .map(ec => ec.remainingCompletions)\r\n .sum();\r\n },\r\n\r\n autoComplete: {\r\n tick() {\r\n const shouldPreventEC7 = TimeDimension(1).amount.gt(0);\r\n const hasUpgradeLock = RealityUpgrade(12).isLockingMechanics ||\r\n (ImaginaryUpgrade(15).isLockingMechanics && shouldPreventEC7 &&\r\n !Array.range(1, 6).some(ec => !EternityChallenge(ec).isFullyCompleted));\r\n if (!player.reality.autoEC || Pelle.isDisabled(\"autoec\") || hasUpgradeLock) {\r\n player.reality.lastAutoEC = Decimal.clampMax(player.reality.lastAutoEC, this.interval).toNumber();\r\n return;\r\n }\r\n if (Ra.unlocks.instantECAndRealityUpgradeAutobuyers.canBeApplied) {\r\n let next = this.nextChallenge;\r\n while (next !== undefined) {\r\n while (!next.isFullyCompleted) {\r\n next.addCompletion(true);\r\n }\r\n next = this.nextChallenge;\r\n if (ImaginaryUpgrade(15).isLockingMechanics && next?.id === 7 && shouldPreventEC7) break;\r\n }\r\n return;\r\n }\r\n const interval = this.interval instanceof Decimal ? this.interval.toNumber() : this.interval;\r\n let next = this.nextChallenge;\r\n while (player.reality.lastAutoEC - interval > 0 && next !== undefined) {\r\n player.reality.lastAutoEC -= interval;\r\n next.addCompletion(true);\r\n next = this.nextChallenge;\r\n }\r\n player.reality.lastAutoEC %= interval;\r\n },\r\n\r\n get nextChallenge() {\r\n return EternityChallenges.all.find(ec => !ec.isFullyCompleted);\r\n },\r\n\r\n get interval() {\r\n if (!Perk.autocompleteEC1.canBeApplied) return Infinity;\r\n let minutes = Effects.min(\r\n Number.MAX_VALUE,\r\n Perk.autocompleteEC1,\r\n Perk.autocompleteEC2,\r\n Perk.autocompleteEC3\r\n );\r\n minutes = new Decimal(minutes).div(VUnlocks.fastAutoEC.effectOrDefault(1));\r\n return TimeSpan.fromMinutes(minutes).totalMilliseconds.toNumber();\r\n }\r\n }\r\n};\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked && !_vm.canUnlock }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 1),\"amount-text\":_vm.format(_vm.amount, 2),\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-id o-primary-btn--buy-dim c-dim-tooltip-container\",class:_vm.buttonClass(),attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isContinuumActive || (!_vm.isUnlocked && _vm.canUnlock)},on:{\"click\":_vm.buySingleInfinityDimension}},[_vm._v(\" \"+_vm._s(_vm.costDisplay)+\" \"),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_vm._v(\" \"+_vm._s(_vm.capTooltip)+\" \")])]),(_vm.isAutobuyerUnlocked && !_vm.isEC8Running && !_vm.isContinuumActive)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--id-auto\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):(!_vm.isContinuumActive)?_c('PrimaryButton',{staticClass:\"o-primary-btn--id-auto\",attrs:{\"enabled\":_vm.isAvailableForPurchase && _vm.isUnlocked},on:{\"click\":_vm.buyMaxInfinityDimension}},[_vm._v(\" Buy Max \")]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicInfinityDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicInfinityDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicInfinityDimensionRow.vue?vue&type=template&id=239f89fe&scoped=true&\"\nimport script from \"./ClassicInfinityDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicInfinityDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicInfinityDimensionRow.vue?vue&type=style&index=0&id=239f89fe&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"239f89fe\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicInfinityDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicInfinityDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicInfinityDimensionsTab.vue?vue&type=template&id=5a952b48&scoped=true&\"\nimport script from \"./ClassicInfinityDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicInfinityDimensionsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicInfinityDimensionsTab.vue?vue&type=style&index=0&id=5a952b48&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5a952b48\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-infinity-dim-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[(!_vm.isEC8Running)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all \")]):_vm._e(),(_vm.isAnyAutobuyerUnlocked && !_vm.isEC8Running)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.toggleAllAutobuyers}},[_vm._v(\" Toggle all autobuyers \")]):_vm._e()],1),_c('div',[_c('p',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-infinity-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.infinityPower, 2, 1)))]),_vm._v(\" Infinity Power, \"),_c('br'),(!_vm.isEC9Running)?_c('span',[_vm._v(\" increased by \"),_c('span',{staticClass:\"c-infinity-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatPow(_vm.conversionRate, 2, 3)))])]):_c('span',[_vm._v(\" translated \")]),_vm._v(\" to a \"),_c('span',{staticClass:\"c-infinity-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatX(_vm.dimMultiplier, 2, 1)))]),_vm._v(\" multiplier on all \"),(!_vm.isEC9Running)?_c('span',[_vm._v(\"Antimatter Dimensions.\")]):_c('span',[_vm._v(\"Time Dimensions due to Eternity Challenge 9.\")])])]),(_vm.enslavedCompleted)?_c('div',{staticClass:\"l-infinity-dim-tab__enslaved-reward-container l-spoon-btn-group\"},[_c('button',{staticClass:\"c-infinity-dim-tab__tesseract-button\",class:{\n 'c-infinity-dim-tab__tesseract-button--disabled': !_vm.canBuyTesseract,\n 'o-pelle-disabled-pointer': _vm.creditsClosed\n },on:{\"click\":_vm.buyTesseract}},[_c('p',[_vm._v(\" Buy a Tesseract (\"+_vm._s(_vm.tesseractCountString)+\") \")]),_c('p',[_vm._v(\"Increase dimension caps by \"+_vm._s(_vm.format(_vm.nextDimCapIncrease, 2)))]),_c('p',[_c('b',[_vm._v(\"Costs: \"+_vm._s(_vm.format(_vm.tesseractCost))+\" IP\")])])]),(_vm.isAutoTessUnlocked)?_c('PrimaryToggleButton',{staticStyle:{\"margin-top\":\"-1rem\"},attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutoTessOn),callback:function ($$v) {_vm.isAutoTessOn=$$v},expression:\"isAutoTessOn\"}}):_vm._e()],1):_vm._e(),(_vm.isEnslavedRunning)?_c('div',[_vm._v(\" All Infinity Dimensions are limited to a single purchase. \")]):_c('div',[_vm._v(\" All Infinity Dimensions except for the 8th are limited to a maximum of \"+_vm._s(_vm.format(Math.pow( _vm.totalDimCap, _vm.capExpo ), 2))+\" purchases each. \"),_c('br'),_vm._v(\" The 8th Infinity Dimension is limited to \"+_vm._s(_vm.format(this.trueID8cap, 2))+\" purchases. \")]),_c('div',[_vm._v(\"You are getting \"+_vm._s(_vm.format(_vm.powerPerSecond, 2, 0))+\" \"+_vm._s(_vm.incomeType)+\" per second.\")]),_c('br'),(_vm.atCap)?_c('span',[_vm._v(\"Due to instability, your Infinity Power gain is softcapped after \"+_vm._s(_vm.format(this.textCap)))]):_vm._e(),_c('br'),(_vm.atTessCap)?_c('span',[_vm._v(\"Tesseracts beyond \"+_vm._s(_vm.format(this.TesseractsCap))+\" are physically impossible\")]):_vm._e(),_c('br'),(_vm.isEC8Running)?_c('b',{staticClass:\"l-infinity-dim-tab__ec8-purchases\"},[_vm._v(\" You have \"+_vm._s(_vm.quantifyInt(\"purchase\", _vm.EC8PurchasesLeft))+\" left within Eternity Challenge 8. \")]):_vm._e(),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('InfinityDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),1),(_vm.showLockedDimCostNote)?_c('div',[_vm._v(\" Hold shift to see the Infinity Point cost for locked Infinity Dimensions. \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-row-infinity-dim l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked && !_vm.canUnlock }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 1),\"amount-text\":_vm.format(_vm.amount, 2),\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container c-modern-dim-tooltip-container\",style:(_vm.cssVars)},[_c('div',{staticClass:\"c-modern-dim-purchase-count-tooltip\",style:(_vm.cssVars)},[_vm._v(\" \"+_vm._s(_vm.capTooltip)+\" \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-id o-primary-btn o-primary-btn--new o-primary-btn--buy-dim\",class:_vm.buttonClass(),attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isContinuumActive || (!_vm.isUnlocked && _vm.canUnlock)},on:{\"click\":_vm.buySingleInfinityDimension}},[_vm._v(\" \"+_vm._s(_vm.costDisplay)+\" \")]),(_vm.isAutobuyerUnlocked && !_vm.isEC8Running && !_vm.isContinuumActive)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--id-auto\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):(!_vm.isContinuumActive)?_c('PrimaryButton',{staticClass:\"o-primary-btn--id-auto\",attrs:{\"enabled\":_vm.isAvailableForPurchase},on:{\"click\":_vm.buyMaxInfinityDimension}},[_vm._v(\" Buy Max \")]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernInfinityDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernInfinityDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernInfinityDimensionRow.vue?vue&type=template&id=39f8097c&scoped=true&\"\nimport script from \"./ModernInfinityDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernInfinityDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernInfinityDimensionRow.vue?vue&type=style&index=0&id=39f8097c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"39f8097c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernInfinityDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernInfinityDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernInfinityDimensionsTab.vue?vue&type=template&id=80df2ae2&scoped=true&\"\nimport script from \"./ModernInfinityDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernInfinityDimensionsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernInfinityDimensionsTab.vue?vue&type=style&index=0&id=80df2ae2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"80df2ae2\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityDimensionsTab.vue?vue&type=template&id=55f47caa&\"\nimport script from \"./InfinityDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-infinity-upgrades-tab\"},[(_vm.chargeUnlocked)?_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{class:_vm.disChargeClassObject,on:{\"click\":function($event){_vm.disCharge = !_vm.disCharge}}},[_vm._v(\" Respec Charged Infinity Upgrades on next Reality \")])],1):_vm._e(),(_vm.chargeUnlocked)?_c('div',[_vm._v(\" You have charged \"+_vm._s(_vm.formatInt(_vm.chargesUsed))+\"/\"+_vm._s(_vm.formatInt(_vm.totalCharges))+\" Infinity Upgrades. Charged Infinity Upgrades have their effect altered. \"),_c('br'),_vm._v(\" Hold shift to show Charged Infinity Upgrades. You can freely respec your choices on Reality. \")]):_vm._e(),(_vm.isUseless)?_c('div',[_vm._v(\" You cannot Charge Infinity Upgrades while Doomed. \")]):_vm._e(),_c('br'),_vm._v(\" Within each column, the upgrades must be purchased from top to bottom. \"),_c('br'),_c('div',{staticClass:\"l-infinity-upgrade-grid l-infinity-upgrades-tab__grid\"},_vm._l((_vm.grid),function(column,columnId){return _c('div',{key:columnId,staticClass:\"c-infinity-upgrade-grid__column\"},[_vm._l((column),function(upgrade){return _c('InfinityUpgradeButton',{key:upgrade.id,class:_vm.btnClassObject(columnId),attrs:{\"upgrade\":upgrade}})}),_c('div',{staticClass:\"c-infinity-upgrade-grid__column--background\",style:(_vm.styleOfColumnBg[columnId])})],2)}),0),(_vm.bottomRowUnlocked)?_c('div',{staticClass:\"l-infinity-upgrades-bottom-row\"},[_c('IpMultiplierButton',{staticClass:\"l-infinity-upgrades-tab__mult-btn\"}),_c('InfinityUpgradeButton',{class:_vm.btnClassObject(1),attrs:{\"upgrade\":_vm.offlineIpUpgrade}})],1):_vm._e(),(_vm.eternityUnlocked && _vm.bottomRowUnlocked)?_c('div',[_vm._v(\" The Infinity Point multiplier becomes more expensive \"),_c('br'),_vm._v(\" above \"+_vm._s(_vm.formatPostBreak(_vm.ipMultSoftCap))+\" Infinity Points, and cannot be purchased past \"+_vm._s(_vm.formatPostBreak(_vm.ipMultHardCap))+\" Infinity Points. \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('InfinityUpgradeButton',{staticClass:\"o-infinity-upgrade-btn--multiplier\",attrs:{\"upgrade\":_vm.upgrade}},[(_vm.isCapped)?[_c('br'),_c('span',[_vm._v(\"(Capped at \"+_vm._s(_vm.quantify(\"Infinity Point\", _vm.upgrade.config.costCap))+\")\")])]:_vm._e()],2),_c('PrimaryButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--small-spoon\",on:{\"click\":function($event){return _vm.buyMaxIPMult()}}},[_vm._v(\" Max Infinity Point mult \")]),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--small-spoon\",attrs:{\"label\":\"Autobuy IP mult\"},model:{value:(_vm.isAutobuyerActive),callback:function ($$v) {_vm.isAutobuyerActive=$$v},expression:\"isAutobuyerActive\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IpMultiplierButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./IpMultiplierButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./IpMultiplierButton.vue?vue&type=template&id=79ab45ba&scoped=true&\"\nimport script from \"./IpMultiplierButton.vue?vue&type=script&lang=js&\"\nexport * from \"./IpMultiplierButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"79ab45ba\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityUpgradesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityUpgradesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityUpgradesTab.vue?vue&type=template&id=c6393b0e&scoped=true&\"\nimport script from \"./InfinityUpgradesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityUpgradesTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./InfinityUpgradesTab.vue?vue&type=style&index=0&id=c6393b0e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c6393b0e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-laitela-celestial-tab\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"laitela\"}}),_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":function($event){return _vm.showLaitelaHowTo()}}},[_vm._v(\" Click for Lai'tela info \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all Dark Matter Dimensions \")])],1),_c('div',{staticClass:\"o-laitela-matter-amount\"},[_vm._v(\" You have \"),_c('span',{style:(_vm.styleObject)},[_vm._v(_vm._s(_vm.format(_vm.darkMatter, 2)))]),_vm._v(\" Dark Matter\"),(_vm.isDMCapped)?_c('span',[_vm._v(\" (capped)\")]):_vm._e(),_vm._v(\". \"),(!_vm.isDMCapped)?_c('span',[_vm._v(\"(Average: \"+_vm._s(_vm.format(_vm.darkMatterGain, 2, 2))+\"/s)\")]):_vm._e()]),_c('div',{staticClass:\"o-laitela-matter-amount\"},[_vm._v(\" Your maximum Dark Matter ever is \"),_c('span',{style:(_vm.styleObject)},[_vm._v(_vm._s(_vm.format(_vm.maxDarkMatter, 2)))]),(!_vm.isDoomed)?_c('span',[_vm._v(\", giving \"+_vm._s(_vm.formatPercents(_vm.matterExtraPurchasePercentage, 2))+\" more purchases from Continuum\")]):_vm._e(),_vm._v(\". \")]),_c('div',{staticClass:\"o-laitela-matter-amount\"},[_vm._v(\" Dark Matter Dimensions are unaffected by storing real time. \")]),(!_vm.singularitiesUnlocked)?_c('h2',{staticClass:\"c-laitela-singularity-container\"},[_vm._v(\" Unlock Singularities in \"+_vm._s(_vm.singularityWaitTime)+\". (\"+_vm._s(_vm.format(_vm.darkEnergy, 2, 2))+\"/\"+_vm._s(_vm.format(_vm.singularityCap, 2))+\" Dark Energy) \")]):_vm._e(),(_vm.singularitiesUnlocked)?_c('SingularityPane'):_vm._e(),(_vm.autobuyersUnlocked)?_c('LaitelaAutobuyerPane'):_vm._e(),_c('div',{staticClass:\"l-laitela-mechanics-container\"},[_c('LaitelaRunButton'),_c('div',[_c('DarkMatterDimensionGroup'),(_vm.showAnnihilation)?_c('AnnihilationButton'):_vm._e()],1),(_vm.singularityPanelVisible)?_c('SingularityMilestonePane'):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-laitela-annihilation-container\"},[(_vm.darkMatter.lt(_vm.matterRequirement))?_c('button',{staticClass:\"l-laitela-annihilation-button\"},[_vm._v(\" Annihilation requires \"+_vm._s(_vm.format(_vm.matterRequirement, 2))+\" Dark Matter \")]):_c('button',{staticClass:\"l-laitela-annihilation-button c-laitela-annihilation-button\",on:{\"click\":_vm.annihilate}},[_c('b',[_vm._v(\"Annihilate your Dark Matter Dimensions\")])]),_c('br'),_c('br'),(_vm.darkMatterMult > 1)?_c('span',[_vm._v(\" Current multiplier to all Dark Matter Dimensions: \"),_c('b',[_vm._v(_vm._s(_vm.formatX(_vm.darkMatterMult, 2, 2)))]),_c('br'),_c('br'),_vm._v(\" Annihilation will reset your Dark Matter and Dark Matter Dimension amounts, but also add \"),_c('b',[_vm._v(\"+\"+_vm._s(_vm.format(_vm.darkMatterMultGain, 2, 2)))]),_vm._v(\" to your Annihilation multiplier. \"),_c('br'),_vm._v(\" (\"),_c('b',[_vm._v(_vm._s(_vm.formatX(_vm.darkMatterMultRatio, 2, 2)))]),_vm._v(\" from previous multiplier) \"),(_vm.autobuyerUnlocked)?_c('span',[_c('br'),_c('br'),_vm._v(\" Auto-Annihilate when adding \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.autoAnnihilationInput),expression:\"autoAnnihilationInput\"}],staticClass:\"c-small-autobuyer-input c-laitela-annihilation-input\",style:(_vm.annihilationInputStyle),attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.autoAnnihilationInput)},on:{\"change\":function($event){return _vm.handleAutoAnnihilationInputChange()},\"input\":function($event){if($event.target.composing){ return; }_vm.autoAnnihilationInput=$event.target.value}}}),_vm._v(\" to the multiplier. \")]):_vm._e()]):_c('span',[_vm._v(\" Annihilation will reset your Dark Matter and Dark Matter Dimension amounts, but will give a permanent multiplier of \"),_c('b',[_vm._v(_vm._s(_vm.formatX(1 + _vm.darkMatterMultGain, 2, 2)))]),_vm._v(\" to all Dark Matter Dimensions. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AnnihilationButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AnnihilationButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AnnihilationButton.vue?vue&type=template&id=508ee007&\"\nimport script from \"./AnnihilationButton.vue?vue&type=script&lang=js&\"\nexport * from \"./AnnihilationButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._l((8),function(tier){return _c('DarkMatterDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('div',{staticClass:\"c-dark-matter-dimension-container\"},[_c('div',{staticClass:\"o-dark-matter-dimension-amount\"},[_vm._v(\" \"+_vm._s(_vm.name)),(_vm.hasAscended)?_c('span',[_vm._v(\" \"+_vm._s(_vm.ascensionText))]):_vm._e(),_vm._v(\": \"+_vm._s(_vm.format(_vm.amount, 2))+\" \")]),_c('div',[_vm._v(\" Average gain: \"+_vm._s(_vm.format(_vm.productionPerSecond, 2, 2))+\"/s (+\"+_vm._s(_vm.formatPercents(_vm.percentPerSecond, 2, 2))+\"/s) \")]),_c('div',{staticClass:\"c-dark-matter-dimension-buttons\"},[_c('button',{class:_vm.intervalClassObject,on:{\"click\":_vm.handleIntervalClick,\"mouseover\":function($event){return _vm.hoverState(true)},\"mouseleave\":function($event){return _vm.hoverState(false)},\"mousedown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }return _vm.hold('interval')}}},[(_vm.isIntervalCapped)?_c('span',{attrs:{\"ach-tooltip\":_vm.ascensionTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})]):_vm._e(),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.intervalText)}})]),_c('button',{class:_vm.darkMatterClassObject,on:{\"click\":_vm.buyPowerDM,\"mousedown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }return _vm.hold('DM')}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.darkMatterText)}})]),_c('button',{class:_vm.darkEnergyClassObject,on:{\"click\":_vm.buyPowerDE,\"mousedown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }return _vm.hold('DE')}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.darkEnergyText)}})])]),(_vm.interval > 200)?_c('div',[_vm._v(\" Tick: \"+_vm._s(_vm.formatInt(_vm.timer))+\" ms (\"+_vm._s(_vm.formatPercents(_vm.timerPercent, 1))+\") \")]):_c('div',[_vm._v(\" \"+_vm._s(_vm.format(1000 / _vm.interval, 2, 2))+\" ticks / sec \")]),_c('div',[_vm._v(\" Dark Energy: \"+_vm._s(_vm.format(_vm.darkEnergyPerSecond, 2, 4))+\"/s (\"+_vm._s(_vm.formatPercents(_vm.portionDE, 1))+\" of total) \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DarkMatterDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DarkMatterDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DarkMatterDimensionRow.vue?vue&type=template&id=d92f0bfc&\"\nimport script from \"./DarkMatterDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./DarkMatterDimensionRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DarkMatterDimensionGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DarkMatterDimensionGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DarkMatterDimensionGroup.vue?vue&type=template&id=586d3140&\"\nimport script from \"./DarkMatterDimensionGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./DarkMatterDimensionGroup.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasDimension || _vm.hasAscension || _vm.hasSingularity || _vm.hasAnnihilated)?_c('div',{staticClass:\"c-laitela-singularity-container\"},[(_vm.hasDimension)?_c('PrimaryToggleButton',{staticClass:\"c-laitela-automation-toggle\",attrs:{\"label\":\"Auto-buy DMD:\",\"on\":_vm.autobuyStr},model:{value:(_vm.dimension),callback:function ($$v) {_vm.dimension=$$v},expression:\"dimension\"}}):_vm._e(),(_vm.hasAscension)?_c('PrimaryToggleButton',{staticClass:\"c-laitela-automation-toggle\",attrs:{\"label\":\"Auto-Ascend:\",\"on\":_vm.autoAscendStr},model:{value:(_vm.ascension),callback:function ($$v) {_vm.ascension=$$v},expression:\"ascension\"}}):_vm._e(),(_vm.hasSingularity)?_c('PrimaryToggleButton',{staticClass:\"c-laitela-automation-toggle\",attrs:{\"label\":\"Auto-Singularity:\",\"on\":_vm.autoSingularityStr},model:{value:(_vm.singularity),callback:function ($$v) {_vm.singularity=$$v},expression:\"singularity\"}}):_vm._e(),(_vm.hasAnnihilated)?_c('PrimaryToggleButton',{staticClass:\"c-laitela-automation-toggle\",attrs:{\"label\":\"Auto-Annihilation:\"},model:{value:(_vm.annihilation),callback:function ($$v) {_vm.annihilation=$$v},expression:\"annihilation\"}}):_vm._e()],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LaitelaAutobuyerPane.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LaitelaAutobuyerPane.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LaitelaAutobuyerPane.vue?vue&type=template&id=79a079e2&\"\nimport script from \"./LaitelaAutobuyerPane.vue?vue&type=script&lang=js&\"\nexport * from \"./LaitelaAutobuyerPane.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:_vm.classObject()},[_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_c('b',[_vm._v(\"Start Lai'tela's Reality\")])]),_c('div',{class:_vm.runButtonClassObject(),on:{\"click\":_vm.startRun}}),(_vm.realityReward > 1)?_c('div',[_c('b',[_vm._v(\" All Dark Matter multipliers are \"+_vm._s(_vm.formatX(_vm.realityReward, 2, 2))+\" higher. \")]),(_vm.maxDimTier > 0)?_c('span',[_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.completionTime)+\" \"),_c('br'),(_vm.maxDimTier <= 7)?_c('span',[_c('b',[_vm._v(\"Highest active dimension: \"+_vm._s(_vm.formatInt(_vm.maxDimTier)))])]):_vm._e(),_c('br'),_c('br'),_vm._v(\" Glyph Set: \"),_c('GlyphSetPreview',{attrs:{\"text\":\"Fastest Destabilization Glyph Set\",\"text-hidden\":true,\"force-name-color\":false,\"glyphs\":_vm.bestSet}})],1):_c('span',[_c('br'),_c('b',[_vm._v(\" You also gain an additional \"+_vm._s(_vm.formatX(8))+\" Dark Energy. \")]),_c('br'),_c('br'),_vm._v(\" Lai'tela's Reality has been fully destabilized and cannot have its reward further improved. \")]),_c('br')]):_vm._e(),_vm._l((_vm.runEffects),function(line,lineId){return _c('div',{key:lineId + '-laitela-run-desc' + _vm.maxDimTier},[_vm._v(\" \"+_vm._s(line)+\" \"),_c('br')])}),_c('br'),_c('div',[_vm._v(_vm._s(_vm.runDescription))])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LaitelaRunButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LaitelaRunButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LaitelaRunButton.vue?vue&type=template&id=d725ba68&\"\nimport script from \"./LaitelaRunButton.vue?vue&type=script&lang=js&\"\nexport * from \"./LaitelaRunButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-laitela-next-milestones\"},[_c('div',{staticClass:\"o-laitela-singularity-modal-button\",class:_vm.classObject,attrs:{\"onclick\":\"Modal.singularityMilestones.show()\"}},[_vm._v(\" Show all milestones \")]),_vm._l((_vm.milestones),function(milestone){return _c('SingularityMilestoneComponent',{key:milestone.id,attrs:{\"milestone\":milestone,\"suppress-glow\":true}})})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.containerClass},[(!_vm.isMetro && !_vm.isMaxed)?_c('div',{staticClass:\"c-laitela-milestone--bar-border-fix\"}):_vm._e(),_c('div',{class:_vm.barClass,style:(_vm.barStyle)}),_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[(!_vm.isMaxed)?_c('b',[_vm._v(\" \"+_vm._s(_vm.progressDisplay)+\" \")]):_vm._e(),_c('p',[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.upgradeDirectionIcon)}}),_vm._v(\" \"+_vm._s(_vm.description)+\" \")]),_c('b',[_vm._v(\" \"+_vm._s(_vm.effectDisplay)+\" \"),(!_vm.isUnique && !_vm.isMaxed)?_c('span',[_vm._v(\"➜ \"+_vm._s(_vm.nextEffectDisplay))]):_vm._e()]),_c('div',{staticClass:\"c-laitela-milestone__completions\"},[_vm._v(\" \"+_vm._s(_vm.completionsDisplay)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityMilestoneComponent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityMilestoneComponent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingularityMilestoneComponent.vue?vue&type=template&id=67ba0edb&scoped=true&\"\nimport script from \"./SingularityMilestoneComponent.vue?vue&type=script&lang=js&\"\nexport * from \"./SingularityMilestoneComponent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SingularityMilestoneComponent.vue?vue&type=style&index=0&id=67ba0edb&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"67ba0edb\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityMilestonePane.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityMilestonePane.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingularityMilestonePane.vue?vue&type=template&id=2cc17f23&\"\nimport script from \"./SingularityMilestonePane.vue?vue&type=script&lang=js&\"\nexport * from \"./SingularityMilestonePane.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-laitela-singularity-container\"},[_c('div',[_c('h2',[_vm._v(\" You have \"+_vm._s(_vm.quantify(\"Singularity\", _vm.singularities, 2))+\" \")]),_c('button',{class:_vm.condenseClassObject(),on:{\"click\":_vm.doSingularity}},[_c('h2',[_vm._v(\" \"+_vm._s(_vm.singularityFormText)+\" \")]),(_vm.singularityWaitText !== '')?_c('br'):_vm._e(),_c('h2',[_vm._v(\" \"+_vm._s(_vm.singularityWaitText)+\" \")])])]),(_vm.singularities !== 0)?_c('div',[_c('div',{staticClass:\"o-laitela-matter-amount\"},[_vm._v(\" You have \"+_vm._s(_vm.format(_vm.darkEnergy, 2, 4))+\" Dark Energy. (+\"+_vm._s(_vm.format(_vm.darkEnergyGainPerSecond, 2, 4))+\"/s) \")]),(_vm.unlockedBulkSingularity)?_c('div',[_c('button',{staticClass:\"c-laitela-singularity__cap-control\",class:{ 'c-laitela-singularity__cap-control--available' : _vm.singularityCapIncreases > 0 },attrs:{\"ach-tooltip\":_vm.decreaseTooltip},on:{\"click\":_vm.decreaseCap}},[_vm._v(\" Decrease Singularity cap. \")]),_c('button',{staticClass:\"c-laitela-singularity__cap-control\",class:{ 'c-laitela-singularity__cap-control--available' : _vm.singularityCapIncreases < 50 + _vm.extendedCap },attrs:{\"ach-tooltip\":_vm.increaseTooltip},on:{\"click\":_vm.increaseCap}},[_vm._v(\" Increase Singularity cap. \")]),_c('br'),_vm._v(\" Each step increases the required Dark Energy by \"+_vm._s(_vm.formatX(10))+\", \"),_c('br'),_vm._v(\" but also increases gained Singularities by \"+_vm._s(_vm.formatX(_vm.perStepFactor))+\". \")]):_c('div',[_c('br'),_vm._v(\" Reach \"+_vm._s(_vm.format(10))+\" Singularities \"),_c('br'),_vm._v(\" to unlock Bulk Singularities. \"),_c('br')]),_c('br'),_vm._v(\" Total time to \"),(_vm.hasAutoSingularity)?_c('span',[_vm._v(\"(auto-)\")]):_vm._e(),_vm._v(\"condense: \"+_vm._s(_vm.baseSingularityTime)+\" \"),(_vm.hasAutoSingularity && _vm.autoSingularityFactor !== 1)?_c('span',[_vm._v(\" (+\"+_vm._s(_vm.additionalSingularityTime)+\") \")]):_vm._e(),_c('br'),(_vm.hasAutoSingularity && _vm.autoSingularityFactor !== 1)?_c('span',[_vm._v(\"Manual \")]):_vm._e(),_vm._v(\" Singularity gain rate: \"+_vm._s(_vm.manualSingularityRate)+\" \"),_c('br'),(_vm.hasAutoSingularity && _vm.autoSingularityFactor !== 1)?_c('span',[_vm._v(\" Automatic Singularity gain rate: \"+_vm._s(_vm.autoSingularityRate)+\" \")]):_vm._e()]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityPane.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityPane.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingularityPane.vue?vue&type=template&id=49e4cbd0&scoped=true&\"\nimport script from \"./SingularityPane.vue?vue&type=script&lang=js&\"\nexport * from \"./SingularityPane.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SingularityPane.vue?vue&type=style&index=0&id=49e4cbd0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"49e4cbd0\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LaitelaTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LaitelaTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LaitelaTab.vue?vue&type=template&id=0e1057cc&\"\nimport script from \"./LaitelaTab.vue?vue&type=script&lang=js&\"\nexport * from \"./LaitelaTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-stats-tab\"},[_c('div',{staticClass:\"l-multiplier-subtab-btn-container\"},_vm._l((_vm.availableOptions),function(option,index){return _c('button',{key:option.key + option.isActive,class:_vm.subtabClassObject(option),on:{\"click\":function($event){return _vm.clickSubtab(index)}}},[_vm._v(\" \"+_vm._s(option.text)+\" \")])}),0),_c('div',{staticClass:\"c-list-container\"},[_vm._l((_vm.resourceSymbols),function(symbol){return _c('span',{key:symbol},[_c('span',{staticClass:\"c-symbol-overlay\",domProps:{\"innerHTML\":_vm._s(symbol)}})])}),_c('MultiplierBreakdownEntry',{key:_vm.resource.key,attrs:{\"resource\":_vm.resource,\"is-root\":true}}),_vm._m(0)],2)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-multiplier-tab-text-line\"},[_vm._v(\" Note: Entries are only expandable if they contain multiple sources which can be different values. For example, any effects which affect all Dimensions of any type equally will not expand into a list of eight identical numbers. \"),_c('br'),_c('b',[_vm._v(\" Some entries may cause lag if expanded out fully. Resizing happens over 200 ms (instead of instantly) in order to reduce possible adverse effects due to photosensitivity. This may cause some visual weirdness after prestige events. \")]),_c('br'),_vm._v(\" Some entries may have very inaccurate percentages, and may show incorrect values if set to multiplication. \")])}]\n\nexport { render, staticRenderFns }","import Vue from \"vue\";\r\n\r\nimport { DC } from \"@/core/constants\";\r\n\r\nexport class BreakdownEntryInfo {\r\n constructor(key) {\r\n this.key = key;\r\n const keyArgs = this.key.split(\"_\");\r\n const dbEntry = GameDatabase.multiplierTabValues[keyArgs[0]][keyArgs[1]];\r\n const args = keyArgs.length >= 3\r\n ? keyArgs.slice(2).map(a => (a.match(\"^\\\\d+$\") ? Number(a) : a))\r\n : [];\r\n this._name = createGetter(dbEntry.name, args);\r\n this._multValue = createGetter(dbEntry.multValue, args);\r\n this._powValue = createGetter(dbEntry.powValue, args);\r\n this._dilationEffect = createGetter(dbEntry.dilationEffect, args);\r\n this._isActive = createGetter(dbEntry.isActive, args);\r\n this._fakeValue = createGetter(dbEntry.fakeValue, args);\r\n this._icon = createGetter(dbEntry.icon, args);\r\n this._displayOverride = createGetter(dbEntry.displayOverride, args);\r\n this._isDilated = createGetter(dbEntry.isDilated, args);\r\n this._isBase = createGetter(dbEntry.isBase, args);\r\n this._ignoresNerfPowers = createGetter(dbEntry.ignoresNerfPowers, args);\r\n this.data = Vue.observable({\r\n mult: new Decimal(0),\r\n pow: 0,\r\n isVisible: false,\r\n lastVisibleAt: 0\r\n });\r\n }\r\n\r\n update() {\r\n const isVisible = this.isVisible;\r\n this.data.mult.fromDecimal(isVisible ? this.mult : DC.D1);\r\n this.data.pow = isVisible ? this.pow : 1;\r\n this.data.isVisible = isVisible;\r\n if (isVisible) {\r\n this.data.lastVisibleAt = Date.now();\r\n }\r\n }\r\n\r\n get name() {\r\n return this._name();\r\n }\r\n\r\n get mult() {\r\n return new Decimal(this._multValue() ?? 1);\r\n }\r\n\r\n get pow() {\r\n return this._powValue() ?? 1;\r\n }\r\n\r\n get dilationEffect() {\r\n return this._dilationEffect() ?? 1;\r\n }\r\n\r\n get isActive() {\r\n return this._isActive() ?? false;\r\n }\r\n\r\n get fakeValue() {\r\n return this._fakeValue();\r\n }\r\n\r\n get icon() {\r\n return this._icon();\r\n }\r\n\r\n get displayOverride() {\r\n return this._displayOverride();\r\n }\r\n\r\n get isDilated() {\r\n return this._isDilated();\r\n }\r\n\r\n get isBase() {\r\n return this._isBase();\r\n }\r\n\r\n get ignoresNerfPowers() {\r\n return this._ignoresNerfPowers() ?? false;\r\n }\r\n\r\n get isVisible() {\r\n return this.isActive && (this.pow !== 1 || this.mult.neq(1));\r\n }\r\n}\r\n\r\nfunction createGetter(property, args) {\r\n if (typeof property === \"function\") {\r\n return () => property(...args);\r\n }\r\n\r\n return () => property;\r\n}\r\n\r\nconst cache = new Map();\r\n\r\nexport function createEntryInfo(key) {\r\n const cached = cache.get(key);\r\n if (cached !== undefined) {\r\n return cached;\r\n }\r\n const entry = new BreakdownEntryInfo(key);\r\n cache.set(key, entry);\r\n return entry;\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.containerClass},[(!_vm.isEmpty)?_c('div',{staticClass:\"c-stacked-bars\"},_vm._l((_vm.averagedPercentList),function(perc,index){return _c('div',{key:100 + index,class:{ 'c-bar-highlight' : _vm.mouseoverIndex === index },style:(_vm.styleObject(index)),on:{\"mouseover\":function($event){_vm.mouseoverIndex = index},\"mouseleave\":function($event){_vm.mouseoverIndex = -1},\"click\":function($event){_vm.showGroup[index] = !_vm.showGroup[index]}}},[_c('span',{staticClass:\"c-bar-overlay\",domProps:{\"innerHTML\":_vm._s(_vm.barSymbol(index))}})])}),0):_vm._e(),_c('div'),_c('div',{staticClass:\"c-info-list\"},[_c('div',{staticClass:\"c-total-mult\"},[_c('b',[_vm._v(\" \"+_vm._s(_vm.totalString())+\" \")]),_c('span',{staticClass:\"c-display-settings\"},[(_vm.hasSeenPowers && _vm.allowPowerToggle)?_c('PrimaryToggleButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Change Display for Power effects'),expression:\"'Change Display for Power effects'\"}],staticClass:\"o-primary-btn c-change-display-btn\",attrs:{\"off\":\"^N\",\"on\":\"×N\"},model:{value:(_vm.replacePowers),callback:function ($$v) {_vm.replacePowers=$$v},expression:\"replacePowers\"}}):_vm._e(),(_vm.groups.length > 1)?_c('i',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('Change Multiplier Grouping'),expression:\"'Change Multiplier Grouping'\"}],staticClass:\"o-primary-btn c-change-display-btn fas fa-arrows-rotate\",on:{\"click\":_vm.changeGroup}}):_vm._e()],1)]),(_vm.isEmpty)?_c('div',{staticClass:\"c-no-effect\"},[_vm._v(\" No Active Effects \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.disabledText)+\" \")]):_vm._l((_vm.entries),function(entry,index){return _c('div',{key:entry.key,on:{\"mouseover\":function($event){_vm.mouseoverIndex = index},\"mouseleave\":function($event){_vm.mouseoverIndex = -1}}},[(_vm.shouldShowEntry(entry))?_c('div',{class:_vm.singleEntryClass(index)},[_c('div',{on:{\"click\":function($event){_vm.showGroup[index] = !_vm.showGroup[index]}}},[_c('span',{class:_vm.expandIcon(index),style:(_vm.expandIconStyle(index))}),_vm._v(\" \"+_vm._s(_vm.entryString(index))+\" \")]),(_vm.showGroup[index] && _vm.hasChildEntries(index))?_c('MultiplierBreakdownEntry',{attrs:{\"resource\":entry}}):_vm._e()],1):_vm._e()])}),(_vm.isDilated && !_vm.isEmpty)?_c('div',[_c('div',{staticClass:\"c-single-entry c-dilation-entry\"},[_c('div',[_vm._v(\" \"+_vm._s(_vm.dilationString())+\" \")])])]):_vm._e(),(_vm.resource.key === 'AD_total')?_c('div',{staticClass:\"c-no-effect\"},[_c('div',[_vm._v(\" \\\"Base AD Production\\\" is the amount of Antimatter that you would be producing with your current AD upgrades as if you had waited a fixed amount of time (\"+_vm._s(_vm.formatInt(10))+\"-\"+_vm._s(_vm.formatInt(40))+\" seconds depending on your AD count) after a Sacrifice. This may misrepresent your actual production if your ADs have been producing for a while, but the relative mismatch will become smaller as you progress further in the game and numbers become larger. \")]),(_vm.inNC12)?_c('div',[_vm._v(\" The breakdown in this tab within Normal Challenge 12 may be inaccurate for some entries, and might count extra multipliers which apply to all Antimatter Dimensions rather than just the ones which are displayed. \")]):_vm._e()]):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { createEntryInfo } from \"./breakdown-entry-info\";\r\n\r\nexport class BreakdownEntryInfoGroup {\r\n constructor(keys) {\r\n this.entries = keys.map(key => createEntryInfo(key));\r\n }\r\n\r\n // We show children entries under two cases; the first is when there is more than one child entry and\r\n // therefore showing a list would be useful. The other is when the entry itself is a \"general\" entry, which\r\n // will always be titled something vague like \"Achievements\" or \"Time Studies\". In this case, we also still show\r\n // it when there is exactly one child, so that the player can see exactly which ach/TS/etc is giving the effect.\r\n get hasVisibleEntries() {\r\n const activeChildren = this.entries.filter(e => e.isActive && (e.mult.neq(1) || e.pow !== 1));\r\n return activeChildren.length > 1 ||\r\n (activeChildren.length === 1 && activeChildren[0].key.startsWith(\"general\"));\r\n }\r\n}\r\n\r\nconst cache = new Map();\r\n\r\n/**\r\n * @returns {BreakdownEntryInfoGroup[]}\r\n */\r\nexport function getResourceEntryInfoGroups(key) {\r\n const cached = cache.get(key);\r\n if (cached !== undefined) {\r\n return cached;\r\n }\r\n const treeGroups = GameDatabase.multiplierTabTree[key];\r\n const groups = treeGroups === undefined\r\n ? []\r\n : treeGroups.map(keys => new BreakdownEntryInfoGroup(keys));\r\n cache.set(key, groups);\r\n return groups;\r\n}\r\n","const MAX_DATA_POINTS = 10;\r\n\r\nexport class PercentageRollingAverage {\r\n constructor() {\r\n this.dataPoints = [];\r\n }\r\n\r\n add(dataPoint) {\r\n this.dataPoints.push(dataPoint);\r\n if (this.dataPoints.length > MAX_DATA_POINTS) {\r\n this.dataPoints.shift();\r\n }\r\n }\r\n\r\n get average() {\r\n const dataPoints = this.dataPoints.filter(p => p !== undefined);\r\n if (dataPoints.length === 0) {\r\n return [];\r\n }\r\n\r\n const average = [];\r\n const reference = dataPoints[0];\r\n for (let i = 0; i < reference.length; i++) {\r\n average[i] = dataPoints.map(p => p[i]).sum() / dataPoints.length;\r\n }\r\n\r\n return average;\r\n }\r\n\r\n clear() {\r\n this.dataPoints = [];\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultiplierBreakdownEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultiplierBreakdownEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MultiplierBreakdownEntry.vue?vue&type=template&id=70c7468e&scoped=true&\"\nimport script from \"./MultiplierBreakdownEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./MultiplierBreakdownEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MultiplierBreakdownEntry.vue?vue&type=style&index=0&id=70c7468e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"70c7468e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultiplierBreakdownTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultiplierBreakdownTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MultiplierBreakdownTab.vue?vue&type=template&id=446e47ab&scoped=true&\"\nimport script from \"./MultiplierBreakdownTab.vue?vue&type=script&lang=js&\"\nexport * from \"./MultiplierBreakdownTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MultiplierBreakdownTab.vue?vue&type=style&index=0&id=446e47ab&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"446e47ab\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-achievements-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Hide completed rows:\"},model:{value:(_vm.hideCompletedRows),callback:function ($$v) {_vm.hideCompletedRows=$$v},expression:\"hideCompletedRows\"}}),(_vm.showAutoAchieve)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Auto Achievements:\"},model:{value:(_vm.isAutoAchieveActive),callback:function ($$v) {_vm.isAutoAchieveActive=$$v},expression:\"isAutoAchieveActive\"}}):_vm._e()],1),_c('div',{staticClass:\"c-achievements-tab__header c-achievements-tab__header--multipliers\"},[(_vm.isDoomed)?_c('span',[_vm._v(\" All Achievement multipliers have been disabled\"),_c('SwapAchievementImagesButton')],1):_c('span',[_vm._v(\" Achievements provide a multiplier to\"),_c('SwapAchievementImagesButton'),_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.boostText)}})],1)]),_vm._m(0),(_vm.showAutoAchieve)?_c('div',{staticClass:\"c-achievements-tab__header\"},[(_vm.achCountdown.gt(0))?_c('div',[_vm._v(\" Automatically gain the next missing Achievement in \"+_vm._s(_vm.timeDisplayNoDecimals(_vm.achCountdown))),(!_vm.isAutoAchieveActive)?_c('span',[_vm._v(\" once Auto is turned on\")]):_vm._e(),_vm._v(\". (left-to-right, top-to-bottom) \")]):(_vm.missingAchievements !== 0)?_c('div',[_vm._v(\" Automatically gain the next missing Achievement as soon as you enable Auto Achievements. (left-to-right, top-to-bottom) \")]):_vm._e(),(_vm.totalCountdown.gt(0))?_c('div',[_vm._v(\" You will regain all remaining achievements after \"+_vm._s(_vm.timeDisplayNoDecimals(_vm.totalCountdown))+\" if Auto Achievement \"),(_vm.isAutoAchieveActive)?_c('span',[_vm._v(\"stays enabled\")]):_c('span',[_vm._v(\"is turned on\")]),_vm._v(\". \")]):_vm._e(),_c('br')]):_vm._e(),_c('div',{staticClass:\"l-achievement-grid\"},_vm._l((_vm.renderedRows),function(row,i){return _c('NormalAchievementRow',{key:i,attrs:{\"row\":row,\"is-obscured\":_vm.isObscured(i)}})}),1)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-achievements-tab__header c-achievements-tab__header--multipliers\"},[_vm._v(\" Achievements with a \"),_c('i',{staticClass:\"fas fa-star\"}),_vm._v(\" icon also give an additional reward. \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isHidden)?_c('div',{class:_vm.classObject},_vm._l((_vm.row),function(achievement,i){return _c('normal-achievement',{key:i,staticClass:\"l-achievement-grid__cell\",attrs:{\"achievement\":achievement,\"is-obscured\":_vm.isObscured}})}),1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject,style:(_vm.styleObject),on:{\"mouseenter\":_vm.onMouseEnter,\"mouseleave\":_vm.onMouseLeave}},[_c('HintText',{key:_vm.garbleKey,staticClass:\"l-hint-text--achievement\",attrs:{\"type\":\"achievements\"}},[_vm._v(\" \"+_vm._s(_vm.processedId)+\" \")]),_c('div',{staticClass:\"o-achievement__tooltip\"},[(_vm.isMouseOver)?[_c('div',{staticClass:\"o-achievement__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.processedName)+\" (\"+_vm._s(_vm.processedId)+\") \")]),_c('div',{staticClass:\"o-achievement__tooltip__description\"},[_vm._v(\" \"+_vm._s(_vm.processedDescription)+\" \")]),(_vm.config.reward)?_c('div',{staticClass:\"o-achievement__tooltip__reward\"},[(!_vm.isObscured)?_c('span',{class:{ 'o-pelle-disabled': _vm.isDisabled }},[_vm._v(\" Reward: \"+_vm._s(_vm.config.reward)+\" \"),(_vm.config.formatEffect)?_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.config}}):_vm._e()],1):_vm._e()]):_vm._e(),(_vm.achievedTime)?_c('div',{staticClass:\"o-achievement-time\"},[_vm._v(\" \"+_vm._s(_vm.achievedTime)+\" \")]):_vm._e()]:_vm._e()],2),(_vm.showUnlockState)?_c('div',{class:_vm.indicatorClassObject},[_c('i',{class:_vm.indicatorIconClass})]):_vm._e(),(_vm.hasReward)?_c('div',{class:_vm.rewardClassObject},[_c('i',{staticClass:\"fas fa-star\"})]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalAchievement.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalAchievement.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalAchievement.vue?vue&type=template&id=4f8b4d41&scoped=true&\"\nimport script from \"./NormalAchievement.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalAchievement.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NormalAchievement.vue?vue&type=style&index=0&id=4f8b4d41&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f8b4d41\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalAchievementRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalAchievementRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalAchievementRow.vue?vue&type=template&id=69cdd633&\"\nimport script from \"./NormalAchievementRow.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalAchievementRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{style:(_vm.imageSwapperStyleObject),on:{\"click\":_vm.swapImages}},[_vm._v(_vm._s(_vm.swapImagesButton))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SwapAchievementImagesButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SwapAchievementImagesButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SwapAchievementImagesButton.vue?vue&type=template&id=cf2e6d4a&\"\nimport script from \"./SwapAchievementImagesButton.vue?vue&type=script&lang=js&\"\nexport * from \"./SwapAchievementImagesButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalAchievementsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalAchievementsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalAchievementsTab.vue?vue&type=template&id=8c42f696&\"\nimport script from \"./NormalAchievementsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalAchievementsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-challenges-tab\"},[_c('ChallengeTabHeader'),_c('div',[_vm._v(\" Some Normal Challenges have requirements to be able to run that challenge. \")]),_c('div',[_vm._v(\" If you have an active Big Crunch Autobuyer, it will attempt to Crunch as soon as possible when reaching Infinite antimatter. \")]),_c('ChallengeGrid',{attrs:{\"challenges\":_vm.challenges},scopedSlots:_vm._u([{key:\"default\",fn:function(ref){\nvar challenge = ref.challenge;\nreturn [_c('NormalChallengeBox',{attrs:{\"challenge\":challenge}})]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ChallengeBox',{staticClass:\"c-challenge-box--normal\",attrs:{\"name\":_vm.name,\"is-unlocked\":_vm.isUnlocked,\"is-running\":_vm.isRunning,\"is-completed\":_vm.isCompleted,\"override-label\":_vm.overrideLabel,\"locked-at\":_vm.lockedAt},on:{\"start\":function($event){return _vm.challenge.requestStart()}},scopedSlots:_vm._u([{key:\"top\",fn:function(){return [_c('DescriptionDisplay',{attrs:{\"config\":_vm.descriptionDisplayConfig}})]},proxy:true},{key:\"bottom\",fn:function(){return [_c('span',{class:{ 'o-pelle-disabled': _vm.isDisabled }},[_vm._v(\"Reward: \"+_vm._s(_vm.challenge.config.reward))])]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalChallengeBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalChallengeBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalChallengeBox.vue?vue&type=template&id=75b37b54&scoped=true&\"\nimport script from \"./NormalChallengeBox.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalChallengeBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"75b37b54\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalChallengesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalChallengesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalChallengesTab.vue?vue&type=template&id=957ab7c6&scoped=true&\"\nimport script from \"./NormalChallengesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalChallengesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"957ab7c6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-options-tab\"},[_c('div',{staticClass:\"l-options-grid\"},[_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.confirmationOptions.show()\"}},[_vm._v(\" Open Confirmation Options \")]),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",attrs:{\"label\":\"Hotkeys:\",\"on\":\"Enabled\",\"off\":\"Disabled\"},model:{value:(_vm.hotkeys),callback:function ($$v) {_vm.hotkeys=$$v},expression:\"hotkeys\"}}),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button l-toggle-button\",attrs:{\"label\":\"Switch tabs on some events (e.g. entering challenges):\"},model:{value:(_vm.automaticTabSwitching),callback:function ($$v) {_vm.automaticTabSwitching=$$v},expression:\"automaticTabSwitching\"}})],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",attrs:{\"label\":\"Offline progress:\"},model:{value:(_vm.offlineProgress),callback:function ($$v) {_vm.offlineProgress=$$v},expression:\"offlineProgress\"}}),_c('div',{staticClass:\"o-primary-btn o-primary-btn--option o-primary-btn--slider l-options-grid__button\"},[_c('b',[_vm._v(\"Offline ticks: \"+_vm._s(_vm.formatInt(_vm.offlineTicks)))]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.offlineSlider},on:{\"input\":function($event){return _vm.adjustSliderValueOfflineTicks($event)}}},'SliderComponent',_vm.sliderPropsOfflineTicks,false))],1),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",attrs:{\"label\":\"Run suspended time as offline:\"},model:{value:(_vm.hibernationCatchup),callback:function ($$v) {_vm.hibernationCatchup=$$v},expression:\"hibernationCatchup\"}})],1),_c('div',{staticClass:\"l-options-grid__row\"},[(_vm.automatorUnlocked)?_c('div',{staticClass:\"o-primary-btn o-primary-btn--option o-primary-btn--slider l-options-grid__button\"},[_c('b',[_vm._v(\"Automator Log Max: \"+_vm._s(_vm.formatInt(parseInt(_vm.automatorLogSize))))]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.automatorLogSize},on:{\"input\":function($event){return _vm.adjustSliderValueAutomatorLogSize($event)}}},'SliderComponent',_vm.sliderPropsAutomatorLogSize,false))],1):_vm._e(),(_vm.DEV)?_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.speedUp.show()\"}},[_vm._v(\" Modify Testing Speed \")]):_vm._e()],1),_c('OpenModalHotkeysButton')],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('PrimaryButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",on:{\"click\":_vm.emitClick}},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OptionsButton.vue?vue&type=template&id=6ef103be&\"\nimport script from \"./OptionsButton.vue?vue&type=script&lang=js&\"\nexport * from \"./OptionsButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsGameplayTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsGameplayTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OptionsGameplayTab.vue?vue&type=template&id=2b2bff8a&scoped=true&\"\nimport script from \"./OptionsGameplayTab.vue?vue&type=script&lang=js&\"\nexport * from \"./OptionsGameplayTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./OptionsGameplayTab.vue?vue&type=style&index=0&id=2b2bff8a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2b2bff8a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-options-tab\"},[_c('div',{staticClass:\"l-options-grid\"},[_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-x-large\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"GameStorage.export()\"}},[_vm._v(\" Export save \")]),_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-x-large\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"Modal.import.show()\"}},[_vm._v(\" Import save \")]),_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-x-large\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"Modal.hardReset.show()\"}},[_vm._v(\" RESET THE GAME \")])],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-x-large\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"GameStorage.save(false, true)\"}},[_vm._v(\" Save game \")]),_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-x-large\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"Modal.loadGame.show()\"}},[_vm._v(\" Choose save \")]),_c('AutosaveIntervalSlider',{attrs:{\"min\":10,\"max\":60,\"interval\":1}})],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"GameStorage.exportAsFile()\"}},[_vm._v(\" Export save as file \")]),_c('OptionsButton',{staticClass:\"c-file-import-button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed }},[_c('input',{staticClass:\"c-file-import\",attrs:{\"type\":\"file\",\"accept\":\".txt\"},on:{\"change\":_vm.importAsFile}}),_c('label',{attrs:{\"for\":\"file\"}},[_vm._v(\"Import save from file\")])]),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"label\":\"Display time since save:\"},model:{value:(_vm.showTimeSinceSave),callback:function ($$v) {_vm.showTimeSinceSave=$$v},expression:\"showTimeSinceSave\"}})],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"Modal.backupWindows.show()\"}},[_vm._v(\" Open Automatic Save Backup Menu \")]),_c('SaveFileName')],1),_c('div',{staticClass:\"l-options-grid__row\"},[(_vm.canSpeedrun)?_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-x-large\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"Modal.enterSpeedrun.show()\"}},[_vm._v(\" Start Speedrun \")]):_vm._e(),(_vm.inSpeedrun)?_c('OptionsButton',{class:{\n 'o-pelle-disabled-pointer': _vm.creditsClosed,\n 'o-primary-btn--disabled': !_vm.canModifySeed\n },on:{\"click\":function($event){return _vm.openSeedModal()}}},[_vm._v(\" Change Glyph RNG Seed \")]):_vm._e()],1),_c('OpenModalHotkeysButton')],1),(_vm.cloudAvailable)?_c('h2',{staticClass:\"c-cloud-options-header\"},[(_vm.hideGoogleName)?_c('span',[_vm._v(\"Logged in to Google \"),_c('i',[_vm._v(\"(name hidden)\")])]):(_vm.loggedIn)?_c('span',[_vm._v(\"Logged in as \"+_vm._s(_vm.userName))]):_c('span',[_vm._v(\"Not logged in\")])]):_vm._e(),(_vm.loggedIn)?_c('div',[(_vm.cloudEnabled)?_c('span',[_vm._v(\"Cloud Saving will occur automatically every 10 minutes.\")]):_c('span',[_vm._v(\"Cloud Saving has been disabled on this save.\")])]):_vm._e(),(_vm.cloudAvailable)?_c('div',{staticClass:\"l-options-grid\"},[(!_vm.STEAM)?_c('div',{staticClass:\"l-options-grid__row\"},[(_vm.loggedIn)?_c('OptionsButton',{attrs:{\"onclick\":\"GameOptions.logout()\"}},[_vm._v(\" Disconnect Google Account and disable Cloud Saving \")]):_c('OptionsButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('This will connect your Google Account to your Antimatter Dimensions savefiles'),expression:\"'This will connect your Google Account to your Antimatter Dimensions savefiles'\"}],class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"GameOptions.login()\"}},[_vm._v(\" Login with Google to enable Cloud Saving \")]),(_vm.loggedIn)?_c('PrimaryToggleButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('This will hide your Google Account name from the UI for privacy. Saving/loading is unaffected.'),expression:\"'This will hide your Google Account name from the UI for privacy. Saving/loading is unaffected.'\"}],staticClass:\"o-primary-btn--option l-options-grid__button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"label\":\"Hide Google Account name:\"},model:{value:(_vm.hideGoogleName),callback:function ($$v) {_vm.hideGoogleName=$$v},expression:\"hideGoogleName\"}}):_vm._e()],1):_vm._e(),(_vm.loggedIn)?_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"GameOptions.cloudSave()\"}},[_vm._v(\" Cloud save \")]),_c('OptionsButton',{class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"onclick\":\"GameOptions.cloudLoad()\"}},[_vm._v(\" Cloud load \")]),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"label\":\"Force local save before cloud saving:\"},model:{value:(_vm.syncSaveIntervals),callback:function ($$v) {_vm.syncSaveIntervals=$$v},expression:\"syncSaveIntervals\"}})],1):_vm._e(),(_vm.loggedIn)?_c('div',{staticClass:\"l-options-grid__row\"},[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"label\":\"Automatic cloud saving/loading:\"},model:{value:(_vm.cloudEnabled),callback:function ($$v) {_vm.cloudEnabled=$$v},expression:\"cloudEnabled\"}}),_c('PrimaryToggleButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.modalTooltip),expression:\"modalTooltip\"}],staticClass:\"o-primary-btn--option l-options-grid__button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"label\":\"Show modal if possible saving conflict:\"},model:{value:(_vm.showCloudModal),callback:function ($$v) {_vm.showCloudModal=$$v},expression:\"showCloudModal\"}}),_c('PrimaryToggleButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.overwriteTooltip),expression:\"overwriteTooltip\"}],staticClass:\"o-primary-btn--option l-options-grid__button\",class:{ 'o-pelle-disabled-pointer': _vm.creditsClosed },attrs:{\"label\":\"Force cloud saving despite conflicts:\"},model:{value:(_vm.forceCloudOverwrite),callback:function ($$v) {_vm.forceCloudOverwrite=$$v},expression:\"forceCloudOverwrite\"}})],1):_vm._e()]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-primary-btn o-primary-btn--option o-primary-btn--slider l-options-grid__button\"},[_c('b',[_vm._v(\"Autosave interval: \"+_vm._s(_vm.formatInt(_vm.sliderInterval))+\"s\")]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.sliderInterval},on:{\"input\":function($event){return _vm.adjustSliderValue($event)}}},'SliderComponent',_vm.sliderProps,false))],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutosaveIntervalSlider.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutosaveIntervalSlider.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutosaveIntervalSlider.vue?vue&type=template&id=72f95660&\"\nimport script from \"./AutosaveIntervalSlider.vue?vue&type=script&lang=js&\"\nexport * from \"./AutosaveIntervalSlider.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-primary-btn o-primary-btn--option o-primary-btn--input l-options-grid__button\"},[_c('b',[_vm._v(\"Save file name:\")]),_c('span',{attrs:{\"ach-tooltip\":\"Set a custom name (up to 16 alphanumeric characters, including space and hyphen)\"}},[_c('input',{staticClass:\"c-custom-save-name__input\",attrs:{\"type\":\"text\",\"maxlength\":\"16\",\"placeholder\":\"Custom save name\"},domProps:{\"value\":_vm.saveFileName},on:{\"change\":_vm.handleChange}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveFileName.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveFileName.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SaveFileName.vue?vue&type=template&id=295855b9&scoped=true&\"\nimport script from \"./SaveFileName.vue?vue&type=script&lang=js&\"\nexport * from \"./SaveFileName.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SaveFileName.vue?vue&type=style&index=0&id=295855b9&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"295855b9\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsSavingTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsSavingTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OptionsSavingTab.vue?vue&type=template&id=0b5a7873&\"\nimport script from \"./OptionsSavingTab.vue?vue&type=script&lang=js&\"\nexport * from \"./OptionsSavingTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-options-tab\"},[_c('div',{staticClass:\"l-options-grid\"},[_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{staticClass:\"o-primary-btn--option_font-large\",attrs:{\"onclick\":\"GameOptions.toggleUI()\"}},[_vm._v(\" \"+_vm._s(_vm.UILabel)+\" \")]),_c('UpdateRateSlider'),_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.newsOptions.show();\"}},[_vm._v(\" Open News Options \")])],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('ExpandingControlBox',{staticClass:\"l-options-grid__button c-options-grid__notations\",attrs:{\"button-class\":\"o-primary-btn o-primary-btn--option l-options-grid__notations-header\",\"label\":_vm.themeLabel},scopedSlots:_vm._u([{key:\"dropdown\",fn:function(){return [_c('SelectThemeDropdown')]},proxy:true}])}),_c('ExpandingControlBox',{staticClass:\"l-options-grid__button c-options-grid__notations\",attrs:{\"button-class\":\"o-primary-btn o-primary-btn--option l-options-grid__notations-header\",\"label\":_vm.notationLabel},scopedSlots:_vm._u([{key:\"dropdown\",fn:function(){return [_c('SelectNotationDropdown')]},proxy:true}])}),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",attrs:{\"label\":\"Exponent formatting:\",\"on\":\"Commas\",\"off\":\"Notation\"},model:{value:(_vm.commas),callback:function ($$v) {_vm.commas=$$v},expression:\"commas\"}})],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.animationOptions.show();\"}},[_vm._v(\" Open Animation Options \")]),_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.infoDisplayOptions.show()\"}},[_vm._v(\" Open Info Display Options \")]),_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.awayProgressOptions.show()\"}},[_vm._v(\" Open Away Progress Options \")])],1),_c('div',{staticClass:\"l-options-grid__row\"},[_c('OptionsButton',{staticClass:\"o-primary-btn--option\",attrs:{\"onclick\":\"Modal.hiddenTabs.show()\"}},[_vm._v(\" Modify Visible Tabs \")]),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--option l-options-grid__button\",attrs:{\"label\":\"Relative prestige gain text coloring:\"},model:{value:(_vm.headerTextColored),callback:function ($$v) {_vm.headerTextColored=$$v},expression:\"headerTextColored\"}})],1),_c('OpenModalHotkeysButton')],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-select-notation\"},[_c('div',{staticClass:\"l-select-notation__inner\"},_vm._l((_vm.notations),function(notation){return _c('div',{key:notation.name,staticClass:\"o-primary-btn l-select-notation__item c-select-notation__item\",on:{\"click\":function($event){return notation.setAsCurrent()}}},[_vm._v(\" \"+_vm._s(notation.name)+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectNotationDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectNotationDropdown.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SelectNotationDropdown.vue?vue&type=template&id=4f8179fc&\"\nimport script from \"./SelectNotationDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./SelectNotationDropdown.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-select-theme\"},[_c('div',{staticClass:\"l-select-theme__inner\"},_vm._l((_vm.themes),function(theme){return _c('div',{key:theme.name,staticClass:\"o-primary-btn l-select-theme__item c-select-theme__item\",on:{\"click\":function($event){return theme.set()}}},[_vm._v(\" \"+_vm._s(theme.displayName())+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectThemeDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SelectThemeDropdown.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SelectThemeDropdown.vue?vue&type=template&id=6185ed8f&\"\nimport script from \"./SelectThemeDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./SelectThemeDropdown.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"o-primary-btn o-primary-btn--option o-primary-btn--slider l-options-grid__button\"},[_c('b',[_vm._v(\"Update rate: \"+_vm._s(_vm.formatInt(_vm.updateRate))+\" ms\")]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.updateRate},on:{\"input\":function($event){return _vm.adjustSliderValue($event)}}},'SliderComponent',_vm.sliderProps,false))],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UpdateRateSlider.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UpdateRateSlider.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UpdateRateSlider.vue?vue&type=template&id=dab7ac84&\"\nimport script from \"./UpdateRateSlider.vue?vue&type=script&lang=js&\"\nexport * from \"./UpdateRateSlider.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsVisualTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OptionsVisualTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OptionsVisualTab.vue?vue&type=template&id=43c7c945&\"\nimport script from \"./OptionsVisualTab.vue?vue&type=script&lang=js&\"\nexport * from \"./OptionsVisualTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-stats-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('button',{staticClass:\"o-primary-btn o-primary-btn--subtab-option\",on:{\"click\":function($event){return _vm.cycleButton()}}},[_vm._v(\" Showing \"+_vm._s(_vm.resourceText)+\" \")])]),_vm._l((_vm.layers),function(layer){return _c('PastPrestigeRunsContainer',{key:layer.name,attrs:{\"layer\":layer}})})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.condition)?_c('div',[_c('div',{staticClass:\"c-past-runs-header\",on:{\"click\":_vm.toggleShown}},[_c('span',{staticClass:\"o-run-drop-down-icon\"},[_c('i',{class:_vm.dropDownIconClass})]),_c('span',[_c('h3',[_vm._v(\"Last \"+_vm._s(_vm.formatInt(10))+\" \"+_vm._s(_vm.plural)+\":\")])])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.shown),expression:\"shown\"}]},[_c('div',{staticClass:\"c-row-container\"},_vm._l((_vm.infoCol()),function(entry,col){return _c('span',{key:col,style:(_vm.cellStyle(col, true))},[_vm._v(\" \"+_vm._s(entry)+\" \")])}),0),_vm._l((_vm.runs),function(run,index){return _c('div',{key:index},[(run[0] === Number.MAX_VALUE)?_c('span',{staticClass:\"c-empty-row\"},[(index === 10)?_c('i',[_vm._v(\" An average cannot be calculated with no \"+_vm._s(_vm.plural)+\". \")]):_c('i',[_vm._v(\" You have not done \"+_vm._s(_vm.formatInt(index + 1))+\" \"+_vm._s(index === 0 ? _vm.singular : _vm.plural)+\" yet. \")])]):_c('span',{staticClass:\"c-row-container\"},_vm._l((_vm.infoArray(run, index)),function(entry,col){return _c('span',{key:10 * index + col,style:(_vm.cellStyle(col, false))},[_vm._v(\" \"+_vm._s(entry)+\" \")])}),0)])}),_c('br')],2)]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PastPrestigeRunsContainer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PastPrestigeRunsContainer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PastPrestigeRunsContainer.vue?vue&type=template&id=38893b62&scoped=true&\"\nimport script from \"./PastPrestigeRunsContainer.vue?vue&type=script&lang=js&\"\nexport * from \"./PastPrestigeRunsContainer.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PastPrestigeRunsContainer.vue?vue&type=style&index=0&id=38893b62&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"38893b62\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PastPrestigeRunsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PastPrestigeRunsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PastPrestigeRunsTab.vue?vue&type=template&id=34e05178&\"\nimport script from \"./PastPrestigeRunsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./PastPrestigeRunsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-pelle-celestial-tab\"},[(_vm.isDoomed)?_c('div',{staticClass:\"l-pelle-all-content-container\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"pelle\"}}),_c('div',{staticClass:\"button-container\"},[_c('button',{staticClass:\"o-pelle-button\",on:{\"click\":_vm.showModal}},[_vm._v(\" Show effects in Doomed Reality \")])]),_c('br'),(_vm.hasGalaxyGenerator)?_c('GalaxyGeneratorPanel'):_vm._e(),(_vm.hasStrike)?_c('PelleBarPanel'):_vm._e(),_c('PelleUpgradePanel')],1):(_vm.canEnterPelle)?_c('button',{staticClass:\"pelle-doom-button\",on:{\"click\":_vm.enterDoomModal}},[_vm._v(\" Doom\"),_c('br'),_vm._v(\"Your\"),_c('br'),_vm._v(\"Reality \"),_c('div',{staticClass:\"pelle-icon-container\"},[_c('span',{staticClass:\"pelle-icon\"},[_vm._v(_vm._s(_vm.symbol))])])]):_c('div',{staticClass:\"pelle-unlock-requirements\"},[_vm._v(\" You must have \"+_vm._s(_vm.formatInt(_vm.totalRows))+\" rows of Achievements, all of your Glyph Alchemy Resources capped, and Omnipresent Obliteration purchased to unlock Pelle, Celestial of Antimatter. \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.formatInt(_vm.completedRows))+\" / \"+_vm._s(_vm.formatInt(_vm.totalRows))+\" Achievement rows completed \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.formatInt(_vm.cappedResources))+\" / \"+_vm._s(_vm.formatInt(_vm.totalAlchemyResources))+\" capped Alchemy Resources \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-pelle-panel-container\"},[_c('div',{staticClass:\"c-pelle-panel-title\"},[(!_vm.isCapped)?_c('i',{staticClass:\"c-collapse-icon-clickable\",class:_vm.collapseIcon,on:{\"click\":_vm.toggleCollapse}}):_vm._e(),_vm._v(\" Galaxy Generator \")]),(!_vm.isCollapsed)?_c('div',{staticClass:\"l-pelle-content-container\"},[(_vm.isUnlocked)?_c('div',[_c('div',[_vm._v(\" You have a total of \"),_c('span',{staticClass:\"c-galaxies-amount\"},[_vm._v(_vm._s(_vm.galaxyText))]),_vm._v(\" Galaxies. \"),_c('span',{staticClass:\"c-galaxies-amount\"},[_vm._v(\"+\"+_vm._s(_vm.format(_vm.galaxiesPerSecond, 2, 1))+\"/s\")])]),_c('div',{staticClass:\"l-spoon-btn-group\"},[_c('div',[_c('button',{staticClass:\"c-increase-cap\",class:{\n 'c-increase-cap-available': _vm.isCapped && _vm.capRift && !_vm.sacrificeActive,\n 'tutorial--glow': _vm.cap === Infinity\n },on:{\"click\":_vm.increaseCap}},[_c('div',{staticClass:\"c-increase-cap-background\",style:({ 'width': ((_vm.barWidth * 100) + \"%\") })}),(_vm.isCapped && _vm.capRift)?_c('div',{staticClass:\"c-increase-cap-text\"},[_vm._v(\" \"+_vm._s(_vm.sacrificeText)+\". \"),_c('br'),_c('br'),(!_vm.sacrificeActive)?_c('span',{staticClass:\"c-big-text\"},[_vm._v(\" Sacrifice your \"+_vm._s(_vm.capRiftName)+\" \")]):_c('span',{staticClass:\"c-big-text\"},[_vm._v(\" Getting rid of all that \"+_vm._s(_vm.capRiftName)+\"... \")])]):_c('div',{staticClass:\"c-increase-cap-text c-medium-text\"},[(_vm.cap === Infinity)?_c('div',[_vm._v(_vm._s(_vm.format(_vm.generatedGalaxies, 2))+\" Galaxies generated\")]):_c('div',[_vm._v(_vm._s(_vm.format(_vm.generatedGalaxies, 2))+\" / \"+_vm._s(_vm.format(_vm.cap, 2))+\" Galaxies generated\")])])])]),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticStyle:{\"margin-top\":\"-.75rem\",\"max-width\":\"70rem\",\"width\":\"100%\",\"align-self\":\"center\"},attrs:{\"label\":\"Auto\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1),_c('div',{staticClass:\"l-galaxy-generator-upgrades-container\"},_vm._l((_vm.upgrades),function(upgrade){return _c('PelleUpgrade',{key:upgrade.config.id,attrs:{\"upgrade\":upgrade,\"galaxy-generator\":true}})}),1)]):_c('button',{staticClass:\"c-generator-unlock-button\",on:{\"click\":_vm.unlock}},[_vm._v(\" Unlock the Galaxy Generator \")])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"c-pelle-upgrade\",class:{\n 'c-pelle-upgrade--unavailable': !_vm.canBuy && !(_vm.isBought || _vm.isCapped),\n 'c-pelle-upgrade--bought': _vm.isBought || _vm.isCapped,\n 'c-pelle-upgrade--faded': _vm.faded,\n 'c-pelle-upgrade--galaxyGenerator': _vm.galaxyGenerator\n },on:{\"click\":function($event){!_vm.faded && _vm.upgrade.purchase()},\"mouseover\":function($event){_vm.hovering = true},\"mouseleave\":function($event){_vm.hovering = false}}},[_c('CustomizeableTooltip',{attrs:{\"show\":_vm.shouldEstimateImprovement,\"left\":\"50%\",\"top\":\"0\"},scopedSlots:_vm._u([{key:\"tooltipContent\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.estimateImprovement)+\" \")]},proxy:true}])}),(_vm.timeEstimate)?_c('CustomizeableTooltip',{attrs:{\"left\":\"50%\",\"top\":\"0\",\"content-class\":\"l-fill-container\"},scopedSlots:_vm._u([{key:\"tooltipContent\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.timeEstimate)+\" \")]},proxy:true}],null,false,1945308655)}):_vm._e(),_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),_c('div',{staticClass:\"l-pelle-upgrade-gap\"}),(_vm.effectText)?_c('div',[_vm._v(\" \"+_vm._s(_vm.effectText.prefix)+\" \"+_vm._s(_vm.effectText.value)+\" \"),(_vm.effectText.next)?[_vm._v(\" ➜ \"),_c('span',{class:{\n 'c-improved-effect': _vm.canBuy,\n 'c-improved-effect--unavailable': !_vm.canBuy,\n }},[_vm._v(\" \"+_vm._s(_vm.effectText.next)+\" \")])]:_vm._e(),_c('div',{staticClass:\"l-pelle-upgrade-gap\"})],2):_vm._e(),(!_vm.isCapped)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"name\":_vm.galaxyGenerator ? _vm.config.currencyLabel : 'Reality Shard'}}):_vm._e()],1),((_vm.isRebuyable || _vm.galaxyGenerator) && _vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon\",staticStyle:{\"margin-top\":\"-.5rem\",\"width\":\"18.5rem\",\"margin-left\":\"0.3rem\"},attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-custom-tooltip\"},[_c('div',{staticClass:\"c-main-content\",class:_vm.contentClass,style:(Object.assign({}, _vm.positionStyle, {transform: _vm.contentTransform})),on:{\"mouseenter\":function($event){_vm.hovering = true},\"mouseleave\":function($event){_vm.hovering = false}}},[_vm._t(\"mainContent\")],2),_c('div',{staticClass:\"c-tooltip-content\",class:_vm.tooltipContentClass,style:([_vm.tooltipContentStyle, _vm.positionStyle, { transform: _vm.tooltipTransform }])},[_vm._t(\"tooltipContent\")],2),_c('div',{staticClass:\"c-tooltip-arrow\",class:_vm.tooltipArrowClass,style:([_vm.tooltipArrowStyle, _vm.positionStyle, { transform: _vm.tooltipTransform }])})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomizeableTooltip.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomizeableTooltip.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CustomizeableTooltip.vue?vue&type=template&id=7d84efdb&scoped=true&\"\nimport script from \"./CustomizeableTooltip.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomizeableTooltip.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomizeableTooltip.vue?vue&type=style&index=0&id=7d84efdb&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7d84efdb\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleUpgrade.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleUpgrade.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleUpgrade.vue?vue&type=template&id=5883e125&scoped=true&\"\nimport script from \"./PelleUpgrade.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleUpgrade.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleUpgrade.vue?vue&type=style&index=0&id=5883e125&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5883e125\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleGalaxyGeneratorPanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleGalaxyGeneratorPanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleGalaxyGeneratorPanel.vue?vue&type=template&id=6db9a0ba&scoped=true&\"\nimport script from \"./PelleGalaxyGeneratorPanel.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleGalaxyGeneratorPanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleGalaxyGeneratorPanel.vue?vue&type=style&index=0&id=6db9a0ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6db9a0ba\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-pelle-panel-container\"},[_c('div',{staticClass:\"c-pelle-panel-title\"},[_c('i',{staticClass:\"c-collapse-icon-clickable\",class:_vm.collapseIcon,on:{\"click\":_vm.toggleCollapse}}),_vm._v(\" Pelle Strikes and Rifts \")]),(!_vm.isCollapsed)?_c('div',{staticClass:\"l-pelle-content-container\"},[_vm._v(\" Rifts can be activated by clicking on their bars. \"),(_vm.strikes.length > 1)?_c('span',[_vm._v(\"You cannot activate more than two Rifts at once.\")]):_c('br'),_vm._v(\" When active, Rifts consume \"+_vm._s(_vm.formatPercents(_vm.decayRate))+\" of another resource per second. \"),_c('br'),_vm._v(\" Rift effects apply even when not activated, and are based on the total amount drained. \"),_c('b',{staticClass:\"o-strike-warning\"},[_vm._v(\"Pelle Strike penalties are permanent and remain active even after Armageddon!\")]),_c('div',{staticClass:\"c-pelle-bar-container\"},_vm._l((_vm.strikes),function(strike){return _c('PelleRift',{key:strike.config.id,attrs:{\"strike\":strike}})}),1)]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasStrike)?_c('div',{staticClass:\"c-pelle-single-bar\"},[_c('div',{staticClass:\"c-pelle-rift\"},[_c('div',{staticClass:\"c-pelle-rift-row\"},[_c('div',{staticClass:\"c-pelle-rift-column c-pelle-rift-status\"},[_c('h2',{staticClass:\"c-pelle-rift-name-header\"},[_vm._v(\" \"+_vm._s(_vm.riftName())+\" \")]),_c('div',{staticClass:\"c-pelle-rift-rift-info-container\"},_vm._l((_vm.effects),function(effect,idx){return _c('div',{key:idx},[_vm._v(\" \"+_vm._s(effect || \"\")+\" \")])}),0)]),_c('div',{staticClass:\"c-pelle-rift-column\"},[_c('PelleStrike',{attrs:{\"strike\":_vm.strike}}),_c('PelleRiftBar',{attrs:{\"rift\":_vm.rift}})],1),_c('div',{staticClass:\"c-pelle-rift-status\"},[_c('div',{staticClass:\"c-pelle-rift-fill-status\"},[_c('h2',{staticClass:\"c-pelle-rift-name-header\"},[_vm._v(\" \"+_vm._s(_vm.riftName())+\" \")]),_c('div',{staticClass:\"c-pelle-rift-rift-info-container\"},[_vm._v(\" Drains \"+_vm._s(_vm.drainResource())+\" to fill. \"),(_vm.specialRift)?_c('span',{attrs:{\"ach-tooltip\":_vm.infoTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})]):_vm._e(),_c('br'),(!_vm.isMaxed)?[_vm._v(\" Current Amount: \"+_vm._s(_vm.formatRift(_vm.resource))+\" \")]:_vm._e(),_c('br'),_vm._v(\" Total Filled: \"+_vm._s(_vm.formatRift(_vm.rift.totalFill))+\" \")],2)])])])])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"pelleRiftBar\",staticClass:\"c-pelle-rift-bar\",class:{\n 'c-pelle-rift-bar-overfill-container': _vm.percentage > 1,\n 'c-pelle-rift-bar--idle': !_vm.isActive && !_vm.isMaxed,\n 'c-pelle-rift-bar--filling': _vm.isActive\n },on:{\"mousemove\":_vm.handleMilestoneRequirementTooltipDisplay,\"click\":_vm.toggle}},[_c('div',{staticClass:\"l-overflow-hidden\"},[_c('div',{class:_vm.barOverlay()}),_c('div',{staticClass:\"o-pelle-rift-bar-fill\",style:({\n width: ((Math.clampMax(_vm.percentage * 100, 100)) + \"%\"),\n })}),(_vm.reducedTo < 1)?_c('div',{staticClass:\"o-pelle-rift-bar-reducedto\",style:({\n width: ((Math.clampMax(100 - _vm.reducedTo * 100, 100)) + \"%\"),\n })}):_vm._e(),_c('div',{staticClass:\"o-pelle-rift-bar-overlay\"}),(_vm.isActive && !_vm.isMaxed)?_c('div',{staticClass:\"o-pelle-rift-bar-active-fill\"}):_vm._e(),_vm._l((_vm.rift.milestones),function(milestone,idx){return _c('div',{key:'milestone-line-' + idx,staticClass:\"o-pelle-rift-bar-milestone-line\",class:{\n 'o-pelle-rift-bar-milestone-line--unlocked': _vm.hasMilestone(milestone),\n 'o-pelle-rift-bar-milestone-line--disabled': _vm.reducedTo < milestone.requirement\n },style:({\n left: (\"calc(\" + (milestone.requirement * 100) + \"% - 0.25rem)\")\n })})})],2),_c('div',{staticClass:\"o-pelle-rift-bar-percentage\"},[_vm._v(\" \"+_vm._s(_vm.formatPercents(_vm.percentage, 3))+\" \"),(!_vm.isMaxed)?_c('span',[_vm._v(\"(\"+_vm._s(_vm.isActive ? \"Filling\" : \"Idle\")+\")\")]):_vm._e()]),_c('CustomizeableTooltip',{staticClass:\"o-pelle-rift-bar-milestone-hover-container\",attrs:{\"tooltip-class\":_vm.tooltipContentClass(),\"tooltip-arrow-style\":_vm.tooltipArrowStyle,\"left\":(\"calc(\" + (_vm.selectedHoverMilestone.requirement * 100) + \"% - 0.1rem)\"),\"content-class\":\"o-pelle-rift-bar-milestone-hover-area\"},scopedSlots:_vm._u([{key:\"tooltipContent\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.selectedMilestoneResourceText)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.selectedMilestoneDescriptionText)+\" \")]},proxy:true}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleRiftBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleRiftBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleRiftBar.vue?vue&type=template&id=4370f872&scoped=true&\"\nimport script from \"./PelleRiftBar.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleRiftBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleRiftBar.vue?vue&type=style&index=0&id=4370f872&scoped=true&lang=css&\"\nimport style1 from \"./PelleRiftBar.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4370f872\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-pelle-strike-container\"},[_c('ExpandingControlBox',{attrs:{\"container-class\":\"c-pelle-strike\"},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"c-pelle-strike-header\"},[_vm._v(\" ▼ \"+_vm._s(_vm.strike.requirement)+\" ▼ \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('div',{staticClass:\"c-pelle-strike-dropdown\"},[_c('span',[_vm._v(\"Penalty: \"+_vm._s(_vm.strike.penalty))]),_c('br'),_c('span',[_vm._v(\"Reward: \"+_vm._s(_vm.strikeReward))])])]},proxy:true}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleStrike.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleStrike.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleStrike.vue?vue&type=template&id=3d6b11a3&\"\nimport script from \"./PelleStrike.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleStrike.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleStrike.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleRift.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleRift.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleRift.vue?vue&type=template&id=aa9407ec&scoped=true&\"\nimport script from \"./PelleRift.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleRift.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleRift.vue?vue&type=style&index=0&id=aa9407ec&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"aa9407ec\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleBarPanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleBarPanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleBarPanel.vue?vue&type=template&id=320a9096&scoped=true&\"\nimport script from \"./PelleBarPanel.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleBarPanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleBarPanel.vue?vue&type=style&index=0&id=320a9096&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"320a9096\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-pelle-panel-container\"},[_c('div',{staticClass:\"c-pelle-panel-title\"},[_c('i',{staticClass:\"c-collapse-icon-clickable\",class:_vm.collapseIcon,on:{\"click\":_vm.toggleCollapse}}),_vm._v(\" Pelle Upgrades \")]),(!_vm.isCollapsed)?_c('div',{staticClass:\"l-pelle-content-container\"},[_c('div',{staticClass:\"c-armageddon-container\"},[_c('div',[_c('div',{staticClass:\"c-armageddon-button-container\",on:{\"mouseover\":function($event){_vm.isHovering = true},\"mouseleave\":function($event){_vm.isHovering = false}}},[_c('ArmageddonButton')],1),_c('RemnantGainFactor',{attrs:{\"hide\":_vm.showImprovedEstimate}})],1),_c('div',{staticClass:\"c-armageddon-resources-container\"},[_c('div',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-remnants-amount\"},[_vm._v(_vm._s(_vm.format(_vm.remnants, 2)))]),_vm._v(\" Remnants. \")]),_c('div',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-remnants-amount\"},[_vm._v(_vm._s(_vm.format(_vm.realityShards, 2)))]),_vm._v(\" Reality Shards. \"),_c('span',{staticClass:\"c-remnants-amount\"},[_vm._v(\"+\"+_vm._s(_vm.format(_vm.shardRate, 2, 2))+\"/s\")])])])]),_c('div',{staticClass:\"c-pelle-upgrade-container\"},_vm._l((_vm.rebuyables),function(upgrade){return _c('PelleUpgradeVue',{key:upgrade.config.id,attrs:{\"upgrade\":upgrade,\"show-improved-estimate\":_vm.showImprovedEstimate,\"isRebuyable\":true}})}),1),_c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"o-pelle-button\",on:{\"click\":_vm.toggleBought}},[_vm._v(\" \"+_vm._s(_vm.showBought ? \"Showing bought upgrades\" : \"Bought upgrades hidden\")+\" \")]),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon\",staticStyle:{\"margin-top\":\"-.3rem\"},attrs:{\"label\":\"Auto\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1),(_vm.allUpgrades.length)?_c('div',{staticClass:\"c-pelle-upgrade-container\"},[_vm._l((_vm.allUpgrades),function(upgrade){return _c('PelleUpgradeVue',{key:upgrade.config.id,attrs:{\"upgrade\":upgrade,\"show-improved-estimate\":_vm.showImprovedEstimate}})}),_vm._l((_vm.fadedUpgrades),function(upgrade){return _c('PelleUpgradeVue',{key:upgrade.config.id,attrs:{\"upgrade\":upgrade,\"faded\":\"\"}})})],2):_c('div',[_vm._v(\" No upgrades to show! \")])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-remnant-factors-container\"},[_c('ExpandingControlBox',{style:({ opacity: _vm.opacity }),attrs:{\"container-class\":\"c-remnant-factors\",\"label\":\"Remnant Gain Factors\"},scopedSlots:_vm._u([{key:\"dropdown\",fn:function(){return [_c('div',{staticClass:\"c-remnant-factors-text\"},[_vm._v(\" Best AM: \"+_vm._s(_vm.format(_vm.best.am, 2, 2))),_c('br'),_vm._v(\" Best IP: \"+_vm._s(_vm.format(_vm.best.ip, 2, 2))),_c('br'),_vm._v(\" Best EP: \"+_vm._s(_vm.format(_vm.best.ep, 2, 2))),_c('br'),_c('br'),_c('div',{staticClass:\"l-remnant-factors-row\"},[_c('div',{staticClass:\"l-remnant-factors-col l-remnant-factors-col--first\"},[_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" log10(log10(AM)\"+_vm._s(_vm.dilationMult[0] > 1 ? (\"*\" + (_vm.dilationMult[0])) : \"\")+\" + 2) \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" log10(log10(IP)\"+_vm._s(_vm.dilationMult[1] > 1 ? (\"*\" + (_vm.dilationMult[1])) : \"\")+\" + 2) \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" log10(log10(EP)\"+_vm._s(_vm.dilationMult[2] > 1 ? (\"*\" + (_vm.dilationMult[2])) : \"\")+\" + 2) \")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.MendingUnlocked),expression:\"MendingUnlocked\"}],staticClass:\"l-remnant-factors-item\"},[_vm._v(\" 1 Mend Milestone \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" Static divisor \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" Static power \")]),(!_vm.autoRemnantGain)?_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" Existing Remnants \")]):_vm._e(),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" Final amount \")])]),_c('div',{staticClass:\"l-remnant-factors-col\"},[_c('div',{staticClass:\"l-remnant-factors-item\"}),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" + \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" + \")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.MendingUnlocked),expression:\"MendingUnlocked\"}],staticClass:\"l-remnant-factors-item\"},[_vm._v(\" * \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" / \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" ^ \")]),(!_vm.autoRemnantGain)?_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" - \")]):_vm._e()]),_c('div',{staticClass:\"l-remnant-factors-col\"},[_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(Math.log10(_vm.best.am.add(1).log10()*_vm.dilationMult[0] + 2), 2, 2))+\" \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(Math.log10(_vm.best.ip.add(1).log10()*_vm.dilationMult[0] + 2), 2, 2))+\" \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(Math.log10(_vm.best.ep.add(1).log10()*_vm.dilationMult[0] + 2), 2, 2))+\" \")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.MendingUnlocked),expression:\"MendingUnlocked\"}],staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(1.1, 2, 1))+\" \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(1.64, 2, 2))+\" \")]),_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(7.5, 2, 2))+\" \")]),(!_vm.autoRemnantGain)?_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.remnants, 2, 0))+\" \")]):_vm._e(),(!_vm.autoRemnantGain)?_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.remnantsGain, 2, _vm.remnantsGain >= 1 ? 0 : 2))+\" \")]):_c('div',{staticClass:\"l-remnant-factors-item\"},[_vm._v(\" \"+_vm._s(_vm.format(_vm.remnants, 2, 0))+\" \")])])])])]},proxy:true}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RemnantGainFactor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RemnantGainFactor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RemnantGainFactor.vue?vue&type=template&id=22b0df19&\"\nimport script from \"./RemnantGainFactor.vue?vue&type=script&lang=js&\"\nexport * from \"./RemnantGainFactor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RemnantGainFactor.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleUpgradePanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleUpgradePanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleUpgradePanel.vue?vue&type=template&id=2eb69680&scoped=true&\"\nimport script from \"./PelleUpgradePanel.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleUpgradePanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleUpgradePanel.vue?vue&type=style&index=0&id=2eb69680&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2eb69680\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleTab.vue?vue&type=template&id=57ae2e2e&scoped=true&\"\nimport script from \"./PelleTab.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleTab.vue?vue&type=style&index=0&id=57ae2e2e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57ae2e2e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-previous-runs\"},[_c('b',[_vm._v(\"You have completed \"+_vm._s(_vm.quantify(\"speedrun\", _vm.numRuns, 0, 0, function (x) { return x; }))+\" prior to this playthrough.\")]),_c('b',[_vm._v(\"Statistics of previous runs are below, mouseover icons for more details.\")]),_c('b',[_vm._v(\"Click the magnifying glass to compare the milestones on a particular run to this run.\")]),_c('b',[_vm._v(_vm._s(_vm.spectateText))]),_c('br'),(_vm.highestIndex > 10)?_c('div',{staticClass:\"c-run-page-nav\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option fas fa-arrow-left\",class:{ 'o-primary-btn--disabled' : _vm.runPage === 0 },on:{\"click\":function($event){return _vm.changePage(-1)}}}),_vm._v(\" Showing runs \"+_vm._s(10 * _vm.runPage + 1)+\" to \"+_vm._s(10 * (_vm.runPage + 1))+\" (\"+_vm._s(_vm.highestIndex)+\" total runs) \"),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option fas fa-arrow-right\",class:{ 'o-primary-btn--disabled' : _vm.runPage + 1 > _vm.highestIndex / 10 },on:{\"click\":function($event){return _vm.changePage(1)}}})],1):_vm._e(),_c('div',{staticClass:\"c-previous-runs\"},_vm._l((10),function(entry){return _c('span',{key:entry},[(10 * _vm.runPage + entry <= _vm.highestIndex)?_c('span',{staticClass:\"c-single-run\"},[(_vm.findRun(entry))?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option fas fa-magnifying-glass\",class:{ 'o-selected-btn' : _vm.selectedRun === 10 * _vm.runPage + entry },on:{\"click\":function($event){return _vm.selectRun(10 * _vm.runPage + entry)}}}):_vm._e(),_c('PreviousSpeedrunInfo',{attrs:{\"prev-run-info\":_vm.findRun(entry),\"index\":10 * _vm.runPage + entry}})],1):_vm._e()])}),0),_c('br'),_vm._m(0),_c('div',{staticClass:\"l-speedrun-milestone-tab\"},_vm._l((_vm.milestones),function(milestone){return _c('SpeedrunMilestoneCompare',{key:milestone.id,attrs:{\"milestone\":milestone,\"curr-time\":_vm.milestoneTimes[milestone.id],\"ref-time\":_vm.selectedRun ? _vm.previousRuns.find(function (run) { return run.id === _vm.selectedRun; }).records[milestone.id] : null,\"best-time\":_vm.bestPreviousTimes[milestone.id].time,\"run-indices\":[_vm.selectedRun, _vm.bestPreviousTimes[milestone.id].index]}})}),1)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-legend\"},[_c('div',{staticClass:\"c-legend-cell\"},[_c('span',{staticClass:\"o-box l-milestone-none\"}),_vm._v(\" Not reached this run \")]),_c('div',{staticClass:\"c-legend-cell\"},[_c('span',{staticClass:\"o-box l-milestone-slow\"}),_vm._v(\" Slower than comparison \")]),_c('div',{staticClass:\"c-legend-cell\"},[_c('span',{staticClass:\"o-box l-milestone-fast\"}),_vm._v(\" Faster than comparison \")]),_c('div',{staticClass:\"c-legend-cell\"},[_c('span',{staticClass:\"o-box l-milestone-fastest\"}),_vm._v(\" Faster than best \")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.prevRunInfo)?_c('div',{staticClass:\"c-icon-container\"},[_c('span',[_vm._v(\"Run \"+_vm._s(_vm.index))]),_c('span',[_vm._v(_vm._s(_vm.prevRunInfo.name))]),_vm._l((_vm.iconAttrs),function(attr){return _c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(attr.text),expression:\"attr.text\"}],key:attr.icon,class:attr.icon})}),_c('span',[_vm._v(\"Started: \"+_vm._s(_vm.startDate))]),_c('span',[_vm._v(\"Final Time: \"+_vm._s(_vm.finalTime))])],2):_c('div',{staticClass:\"c-no-record\"},[_vm._v(\" No speedrun records found for run \"+_vm._s(_vm.index)+\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PreviousSpeedrunInfo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PreviousSpeedrunInfo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PreviousSpeedrunInfo.vue?vue&type=template&id=0c86ef47&scoped=true&\"\nimport script from \"./PreviousSpeedrunInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./PreviousSpeedrunInfo.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PreviousSpeedrunInfo.vue?vue&type=style&index=0&id=0c86ef47&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0c86ef47\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject},[_c('span',{staticClass:\"l-milestone-title\"},[_vm._v(_vm._s(_vm.milestone.name))]),_c('span',{style:(_vm.timeStyle(_vm.currTime))},[_vm._v(\"Current run: \"+_vm._s(_vm.timeString(_vm.currTime)))]),(_vm.refTime)?_c('span',{style:(_vm.timeStyle(_vm.refTime))},[_vm._v(\" Run \"+_vm._s(_vm.runIndices[0])+\": \"+_vm._s(_vm.timeString(_vm.refTime, true))+\" \")]):_vm._e(),_c('span',{style:(_vm.timeStyle(_vm.bestTime))},[_vm._v(\"Best (\"+_vm._s(_vm.runIndices[1])+\"): \"+_vm._s(_vm.timeString(_vm.bestTime, true)))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunMilestoneCompare.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunMilestoneCompare.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedrunMilestoneCompare.vue?vue&type=template&id=ade67c12&scoped=true&\"\nimport script from \"./SpeedrunMilestoneCompare.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedrunMilestoneCompare.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SpeedrunMilestoneCompare.vue?vue&type=style&index=0&id=ade67c12&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ade67c12\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PreviousSpeedrunTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PreviousSpeedrunTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PreviousSpeedrunTab.vue?vue&type=template&id=e1e0cc3c&scoped=true&\"\nimport script from \"./PreviousSpeedrunTab.vue?vue&type=script&lang=js&\"\nexport * from \"./PreviousSpeedrunTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PreviousSpeedrunTab.vue?vue&type=style&index=0&id=e1e0cc3c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e1e0cc3c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-ra-celestial-tab\"},[_c('div',{staticClass:\"c-ra-memory-header\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"ra\"}}),(!_vm.isRaCapped)?_c('div',[_vm._v(\" Each Memory Chunk generates a base of one Memory per second\"),(_vm.memoriesPerChunk > 1)?_c('span',[_vm._v(\", which has been increased to \"+_vm._s(_vm.quantify(\"Memory\", _vm.memoriesPerChunk, 2, 3))+\" per second\")]):_vm._e(),_vm._v(\". \"),_c('br'),_vm._v(\" Storing real time prevents Memory Chunk generation, but Memories will still be gained normally. \"),(_vm.memoriesPerChunk > 1)?_c('span',[_c('br'),_vm._v(\" This is being increased due to \"+_vm._s(_vm.memoryBoosts)+\". \")]):_vm._e()]):_c('div',[_vm._v(\" All Memories have been returned. \")])],1),_vm._m(0),_c('div',{staticClass:\"l-ra-all-pets-container\"},_vm._l((_vm.pets),function(pet,i){return _c('RaPet',{key:i,attrs:{\"pet-config\":pet}})}),1),_c('div',{staticClass:\"l-ra-non-pets\",staticStyle:{\"flex-wrap\":\"wrap\"}},[_c('button',{staticClass:\"c-ra-run-button\"},[_c('h2',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[(_vm.isRunning)?_c('span',[_vm._v(\"You are in \")]):_c('span',[_vm._v(\"Start \")]),_vm._v(\" Ra's Reality \")]),_c('div',{class:_vm.runButtonClassObject,on:{\"click\":_vm.startRun}},[_c('span',{staticClass:\"c-ra-run-button__icon__sigil fas fa-sun\"})]),_vm._l((_vm.runDescription),function(line,lineId){return _c('span',{key:lineId + '-ra-run-desc',class:{ 'o-pelle-disabled': lineId===0 && _vm.dimboostUncapped}},[_vm._v(\" \"+_vm._s(line)+\" \")])}),_c('br'),_c('span',[_vm._v(\" \"+_vm._s(_vm.memoryDescription)+\" \")])],2),(_vm.showRemembrance && !_vm.isRaCapped)?_c('div',{staticClass:\"c-ra-remembrance-unlock\"},[_c('h1',{style:(_vm.petStyle)},[_vm._v(\" Remembrance \")]),_c('span',{style:(_vm.petStyle)},[_vm._v(\" \"+_vm._s(_vm.remembranceDescription)+\" \")]),(_vm.hasRemembrance)?_c('div',{staticClass:\"c-ra-remembrance-unlock-inner\"},_vm._l((_vm.pets),function(pet,i){return _c('RaPetRemembranceButton',{key:i,attrs:{\"pet-config\":pet}})}),1):_c('div',{staticClass:\"c-ra-remembrance-unlock-inner\"},[_vm._v(\" Unlocked by getting \"+_vm._s(_vm.formatInt(_vm.remembranceReq))+\" total Celestial Memory levels (you need \"+_vm._s(_vm.formatInt(_vm.remembranceReq - _vm.totalLevels))+\" more) \")])]):_vm._e(),(this.shopUnlocked)?_c('div',[_c('RaUpgradePanel')],1):_vm._e()])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(\" Mouse-over the icons below the bar to see descriptions of upgrades, \"),_c('br'),_vm._v(\" and mouse-over \"),_c('i',{staticClass:\"fas fa-question-circle\"}),_vm._v(\" icons for specific resource information. \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('div',{staticClass:\"l-ra-pet-container\"},[_c('div',{staticClass:\"c-ra-pet-header\",style:(_vm.petStyle)},[_c('div',{staticClass:\"c-ra-pet-title\"},[_vm._v(\" \"+_vm._s(_vm.displayName)+\" Level \"+_vm._s(_vm.formatInt(_vm.level))+\"/\"+_vm._s(_vm.formatInt(_vm.levelCap))+\" \")]),(_vm.showScalingUpgrade)?_c('div',{key:_vm.level},[_vm._v(\" \"+_vm._s(_vm.scalingUpgradeText)+\" \")]):_c('br'),(!_vm.isCapped)?_c('div',[_c('div',[_vm._v(\" \"+_vm._s(_vm.name)+\" \"+_vm._s(_vm.pet.id === \"enslaved\" ? \"have\" : \"has\")+\" \"+_vm._s(_vm.quantify(\"Memory\", _vm.memories, 2))+\" \")])]):_vm._e(),(!_vm.isCapped)?_c('div',{staticClass:\"l-ra-pet-middle-container\"},[_c('div',{staticClass:\"l-ra-pet-upgrade-container\"},[_c('div',{staticClass:\"l-ra-pet-upgrade c-ra-pet-upgrade__top\"},[_c('div',{class:_vm.upgradeClassObject('memory'),on:{\"click\":function($event){return _vm.pet.purchaseMemoryUpgrade()}}},[_c('span',{staticClass:\"fas fa-brain\"}),(!_vm.memoryUpgradeCapped)?_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip\"},[_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.name)+\"'s Recollection \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__description\"},[_vm._v(\" Gain \"+_vm._s(_vm.formatPercents(0.3))+\" more Memories \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__footer\"},[_vm._v(\" Cost: \"+_vm._s(_vm.quantify(\"Memory\", _vm.memoryUpgradeCost, 2, 2))+\" \"),(_vm.memories <= _vm.memoryUpgradeCost)?_c('span',[_vm._v(\" \"+_vm._s(_vm.nextMemoryUpgradeEstimate)+\" \")]):_vm._e(),_c('br'),_vm._v(\" Currently: \"+_vm._s(_vm.formatX(_vm.currentMemoryMult, 2, 2))+\" \")])]):_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip\"},[_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.name)+\"'s Recollection \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__description\"},[_vm._v(\" Capped: \"+_vm._s(_vm.formatX(_vm.currentMemoryMult, 2, 2))+\" \")])])]),_c('div',{staticClass:\"c-ra-upgrade-bar\"},[_c('div',{staticClass:\"c-ra-upgrade-bar__inner\",style:(_vm.barStyle('memory'))})])]),_c('div',{staticClass:\"l-ra-pet-upgrade c-ra-pet-upgrade__bottom\"},[_c('div',{class:_vm.upgradeClassObject('chunk'),on:{\"click\":function($event){return _vm.pet.purchaseChunkUpgrade()}}},[_c('span',{staticClass:\"fas fa-dice-d6\"}),(!_vm.chunkUpgradeCapped)?_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip\"},[_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.name)+\"'s Fragmentation \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__description\"},[_vm._v(\" Gain \"+_vm._s(_vm.formatPercents(0.5))+\" more Memory Chunks \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__footer\"},[_vm._v(\" Cost: \"+_vm._s(_vm.quantify(\"Memory\", _vm.chunkUpgradeCost, 2, 2))+\" \"),(_vm.memories <= _vm.chunkUpgradeCost)?_c('span',[_vm._v(\" \"+_vm._s(_vm.nextMemoryChunkUpgradeEstimate)+\" \")]):_vm._e(),_c('br'),_vm._v(\" Currently: \"+_vm._s(_vm.formatX(_vm.currentChunkMult, 2, 2))+\" \")])]):_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip\"},[_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.name)+\"'s Fragmentation \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__description\"},[_vm._v(\" Capped: \"+_vm._s(_vm.formatX(_vm.currentChunkMult, 2, 2))+\" \")])])]),_c('div',{staticClass:\"c-ra-upgrade-bar c-ra-upgrade-bar--bottom\"},[_c('div',{staticClass:\"c-ra-upgrade-bar__inner\",style:(_vm.barStyle('chunk'))})])])]),(!_vm.isCapped)?_c('RaPetLevelBar',{attrs:{\"pet-config\":_vm.petConfig}}):_vm._e()],1):_vm._e(),(!_vm.isCapped)?_c('div',[_c('div',[_vm._v(\" \"+_vm._s(_vm.quantify(\"Memory Chunk\", _vm.memoryChunks, 2, 2))+\", \"+_vm._s(_vm.quantify(\"Memory\", _vm.memoriesPerSecond, 2, 2))+\"/sec \")]),_c('div',[_vm._v(\" Gaining \"+_vm._s(_vm.quantify(\"Memory Chunk\", _vm.memoryChunksPerSecond, 2, 2))+\"/sec \"),_c('span',{attrs:{\"ach-tooltip\":_vm.chunkTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})])]),(_vm.DEV)?_c('div',[_vm._v(\" Gaining \"+_vm._s(_vm.quantify(\"Base Memory Chunk\", _vm.baseMemoryChunksPerSecond, 2, 2))+\"/sec \"),_c('span',{attrs:{\"ach-tooltip\":_vm.chunkTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})])]):_vm._e()]):_vm._e(),(_vm.memoryMultiplier > 1 && !_vm.isRaCapped)?_c('div',[_vm._v(\" Multiplying all Memory production by \"+_vm._s(_vm.format(_vm.memoryMultiplier, 2, 3))+\" \"),_c('span',{attrs:{\"ach-tooltip\":_vm.memoryGainTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})])]):(!_vm.isRaCapped)?_c('br'):_vm._e(),(!_vm.isRaCapped)?_c('br'):_c('div',{staticClass:\"l-ra-pet-postcompletion-spacer\"}),_c('div',{staticClass:\"l-ra-pet-milestones\"},_vm._l((_vm.unlocks.slice(0,7)),function(unlock,i){return _c('RaUpgradeIcon',{key:25 * _vm.level + i,attrs:{\"unlock\":unlock}})}),1),(_vm.mu19Bought)?_c('div',{staticClass:\"l-ra-pet-milestones\"},_vm._l((_vm.unlocks.slice(7)),function(unlock,i){return _c('RaUpgradeIcon',{key:25 * _vm.level + i,attrs:{\"unlock\":unlock}})}),1):_vm._e()])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-ra-bar-container\"},[_c('div',{staticClass:\"c-ra-exp-bar\"},[_c('div',{staticClass:\"c-ra-exp-bar-inner\",style:(_vm.barStyle)})]),_c('div',{class:_vm.classObject,on:{\"click\":function($event){return _vm.pet.levelUp()}}},[_c('span',{staticClass:\"fas fa-arrow-up\"}),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip\"},[_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__name\"},[_vm._v(\" Level \"+_vm._s(_vm.pet.name)+\" to \"+_vm._s(_vm.formatInt(_vm.level + 1))+\" \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__description\"},[_vm._v(\" \"+_vm._s(_vm.reward)+\" \"),(_vm.showNextScalingUpgrade)?_c('div',{style:({ 'margin-top': _vm.nextUnlock.reward ? '0.6rem' : '0' })},[_vm._v(\" \"+_vm._s(_vm.nextScalingUpgrade)+\" \")]):_vm._e()]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__footer\"},[_vm._v(\" Cost: \"+_vm._s(_vm.quantify(\"Memory\", _vm.requiredMemories, 2, 2))+\" \"),(_vm.memories <= _vm.requiredMemories)?_c('span',[_vm._v(_vm._s(_vm.nextLevelEstimate))]):_vm._e()])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaPetLevelBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaPetLevelBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaPetLevelBar.vue?vue&type=template&id=14002fde&\"\nimport script from \"./RaPetLevelBar.vue?vue&type=script&lang=js&\"\nexport * from \"./RaPetLevelBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject},[_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.icon)}}),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip\"},[_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.petName)+\" Level \"+_vm._s(_vm.formatInt(_vm.level))+\" \")]),_c('div',{staticClass:\"c-ra-pet-upgrade__tooltip__description\",class:{ 'o-pelle-disabled': _vm.isUseless }},[_vm._v(\" \"+_vm._s(_vm.description)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaUpgradeIcon.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaUpgradeIcon.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaUpgradeIcon.vue?vue&type=template&id=0a2bf9d3&scoped=true&\"\nimport script from \"./RaUpgradeIcon.vue?vue&type=script&lang=js&\"\nexport * from \"./RaUpgradeIcon.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RaUpgradeIcon.vue?vue&type=style&index=0&id=0a2bf9d3&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0a2bf9d3\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaPet.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaPet.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaPet.vue?vue&type=template&id=60840c17&scoped=true&\"\nimport script from \"./RaPet.vue?vue&type=script&lang=js&\"\nexport * from \"./RaPet.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RaPet.vue?vue&type=style&index=0&id=60840c17&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"60840c17\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('button',{staticClass:\"c-ra-pet-remembrance-button\",style:(_vm.petStyle),on:{\"click\":_vm.toggleRemembrance}},[(_vm.hasRemembrance)?_c('span',[_vm._v(\" Remembrance given to \"+_vm._s(_vm.name)+\" \")]):_c('span',[_vm._v(\" Give Remembrance to \"+_vm._s(_vm.name)+\" \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaPetRemembranceButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaPetRemembranceButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaPetRemembranceButton.vue?vue&type=template&id=4768a080&\"\nimport script from \"./RaPetRemembranceButton.vue?vue&type=script&lang=js&\"\nexport * from \"./RaPetRemembranceButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-ra-panel-container\"},[_c('div',{staticClass:\"c-ra-pet-title\",staticStyle:{\"font-weight\":\"bold\",\"color\":\"var(--color-ra--base)\"}},[_vm._v(\"Ra's Shop\")]),_c('br'),_vm._v(\" You currently have \"+_vm._s(_vm.format(_vm.raPoints,3,3))+\" Ra's Memory Crystals. Gaining \"+_vm._s(_vm.format(_vm.GainPerSecond,3,3))+\"/s, depending on Dimension Boosts in Ra's Reality. \"),_c('br'),_c('div',{staticClass:\"c-ra-upgrade-container\"},_vm._l((_vm.rebuyables),function(upgrade){return _c('RaUpgradeVue',{key:upgrade.config.id,attrs:{\"upgrade\":upgrade,\"isRebuyable\":true}})}),1),(_vm.NewRow)?_c('div',{staticClass:\"c-ra-upgrade-container\"},_vm._l((_vm.singles),function(upgrade){return _c('RaUpgradeVue',{key:upgrade.config.id,attrs:{\"upgrade\":upgrade,\"isRebuyable\":false}})}),1):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\",style:(_vm.color)},[_c('button',{staticClass:\"c-ra-upgrade\",class:_vm.classObject,on:{\"click\":function($event){return _vm.upgrade.purchase()}}},[_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),[_c('EffectDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\"}}),(!_vm.isBought && _vm.config.implemented)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\",\"name\":_vm.currency}}):_vm._e()]],2),(!_vm.config.implemented)?_c('span',[_c('br'),_vm._v(\"Not Yet Implemented\")]):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaUpgrade.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaUpgrade.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaUpgrade.vue?vue&type=template&id=20e5f9b8&scoped=true&\"\nimport script from \"./RaUpgrade.vue?vue&type=script&lang=js&\"\nexport * from \"./RaUpgrade.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RaUpgrade.vue?vue&type=style&index=0&id=20e5f9b8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"20e5f9b8\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaUpgradePanel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaUpgradePanel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaUpgradePanel.vue?vue&type=template&id=1e412a9e&scoped=true&\"\nimport script from \"./RaUpgradePanel.vue?vue&type=script&lang=js&\"\nexport * from \"./RaUpgradePanel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RaUpgradePanel.vue?vue&type=style&index=0&id=1e412a9e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1e412a9e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RaTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RaTab.vue?vue&type=template&id=663e3984&\"\nimport script from \"./RaTab.vue?vue&type=script&lang=js&\"\nexport * from \"./RaTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-reality-upgrade-grid\"},[_c('div',{staticClass:\"c-reality-upgrade-infotext\"},[_vm._v(\" Mouseover \"),_c('i',{staticClass:\"fas fa-question-circle\"}),_vm._v(\" icons for additional information. \"),_c('br'),_vm._v(\" The first row of upgrades can be purchased endlessly for increasing costs \"),_c('span',{attrs:{\"ach-tooltip\":_vm.costScalingTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})]),_vm._v(\" and the rest are single-purchase. \"),_c('br'),_vm._v(\" Single-purchase upgrades also have requirements which, once completed, permanently unlock the ability to purchase the upgrades at any point. \"),_c('span',{attrs:{\"ach-tooltip\":_vm.possibleTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})]),_c('br'),_vm._v(\" Locked upgrades show their requirement and effect by default; unlocked ones show their effect, current bonus, and cost. Hold shift to swap this behavior. \"),_c('br'),_vm._v(\" You can shift-click upgrades with \"),_c('i',{staticClass:\"fas fa-lock-open\"}),_vm._v(\" to make the game prevent you from doing anything this Reality which would cause you to fail their unlock condition. \"),_c('span',{attrs:{\"ach-tooltip\":_vm.lockTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})]),_c('br'),_vm._v(\" Every completed row of purchased upgrades increases your Glyph level by \"+_vm._s(_vm.formatInt(1))+\". \")]),_vm._l((5),function(row){return _c('div',{key:row,staticClass:\"l-reality-upgrade-grid__row\"},_vm._l((5),function(column){return _c('RealityUpgradeButton',{key:_vm.id(row, column),attrs:{\"upgrade\":_vm.upgrades[_vm.id(row, column)]}})}),1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-reality-upgrade-btn c-reality-upgrade-btn\",class:_vm.classObject,on:{\"click\":[function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.toggleLock(_vm.upgrade)},function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.upgrade.purchase()}]}},[_c('HintText',{staticClass:\"l-hint-text--reality-upgrade c-hint-text--reality-upgrade\",attrs:{\"type\":\"realityUpgrades\"}},[_vm._v(\" \"+_vm._s(_vm.config.name)+\" \")]),_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),((_vm.$viewModel.shiftDown === _vm.isAvailableForPurchase) && !_vm.isRebuyable)?[_c('br'),_c('DescriptionDisplay',{staticClass:\"c-reality-upgrade-btn__requirement\",attrs:{\"config\":_vm.requirementConfig,\"label\":\"Requirement:\"}})]:[_c('EffectDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\"}}),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\",\"name\":\"Reality Machine\"}}):_vm._e()],(_vm.automatorPoints && !_vm.isBought)?_c('b',[_vm._v(\" (+\"+_vm._s(_vm.formatInt(_vm.automatorPoints))+\" AP) \")]):_vm._e()],2)],1),(_vm.canBeLocked)?_c('div',{staticClass:\"o-requirement-lock\"},[(_vm.hasRequirementLock)?_c('i',{staticClass:\"fas fa-lock\"}):(_vm.canLock)?_c('i',{staticClass:\"fas fa-lock-open\"}):_vm._e()]):_vm._e(),(_vm.isRebuyable && _vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon-reality-btn o-primary-btn--reality-upgrade-toggle\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityUpgradeButton.vue?vue&type=template&id=88651abe&scoped=true&\"\nimport script from \"./RealityUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"88651abe\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityUpgradesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityUpgradesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityUpgradesTab.vue?vue&type=template&id=5ab3ca65&scoped=true&\"\nimport script from \"./RealityUpgradesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityUpgradesTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RealityUpgradesTab.vue?vue&type=style&index=0&id=5ab3ca65&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5ab3ca65\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-replicanti-tab\"},[_c('br'),(!_vm.isUnlocked)?_c('PrimaryButton',{staticClass:\"o-primary-btn--replicanti-unlock\",attrs:{\"enabled\":_vm.isUnlockAffordable,\"onclick\":\"Replicanti.unlock();\"}},[_vm._v(\" Unlock Replicanti \"),_c('br'),_vm._v(\" Cost: \"+_vm._s(_vm.format(_vm.unlockCost))+\" IP \")]):[(_vm.isDoomed)?_c('div',{staticClass:\"modified-cap\"},[_vm._v(\" Your Replicanti cap has been removed due to the second \"+_vm._s(_vm.scrambledText)+\" milestone. \")]):(_vm.hasRaisedCap)?_c('div',{staticClass:\"modified-cap\"},[_vm._v(\" Completion of Effarig's Infinity is giving you the following rewards: \"),_c('br'),_vm._v(\" Your Replicanti cap without TS192 is now \"+_vm._s(_vm.format(_vm.replicantiCap, 2))+\" (\"+_vm._s(_vm.capMultText)+\") \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.quantifyInt(\"extra Replicanti Galaxy\", _vm.effarigInfinityBonusRG))+\" (Next Replicanti Galaxy at \"+_vm._s(_vm.format(_vm.nextEffarigRGThreshold, 2))+\" cap) \")]):_vm._e(),_c('p',{staticClass:\"c-replicanti-description\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-replicanti-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.amount, 2, 0)))]),_vm._v(\" Replicanti, translated to \"),_c('br'),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.boostText)}})]),(_vm.hasMaxText)?_c('div',{staticClass:\"c-replicanti-description\"},[_vm._v(\" Your maximum Replicanti reached this Reality is \"),_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.toMaxTooltip),expression:\"toMaxTooltip\"}],staticClass:\"max-accent\"},[_vm._v(_vm._s(_vm.format(_vm.maxReplicanti, 2)))]),_vm._v(\". \")]):_vm._e(),_c('br'),(_vm.isInEC8)?_c('div',[_vm._v(\" You have \"+_vm._s(_vm.quantifyInt(\"purchase\", _vm.ec8Purchases))+\" left within Eternity Challenge 8. \")]):_vm._e(),_c('div',{staticClass:\"l-replicanti-upgrade-row\"},[_c('ReplicantiUpgradeButton',{attrs:{\"setup\":_vm.replicantiChanceSetup}}),_c('ReplicantiUpgradeButton',{attrs:{\"setup\":_vm.replicantiIntervalSetup}}),_c('ReplicantiUpgradeButton',{attrs:{\"setup\":_vm.maxGalaxySetup}})],1),_c('div',[_vm._v(\" The Max Replicanti Galaxy upgrade can be purchased endlessly, but costs increase \"),_c('br'),_vm._v(\" more rapidly above \"+_vm._s(_vm.formatInt(_vm.distantRG))+\" Replicanti Galaxies and even more so above \"+_vm._s(_vm.formatInt(_vm.remoteRG))+\" Replicanti Galaxies. \"),_c('br'),_vm._v(\" You can only buy a max of \"+_vm._s(_vm.formatInt(250000))+\" Replicanti Galaxies. \"),(_vm.hasFree)?_c('div',[_vm._v(\" Free Replicanti Galaxies are capped at \"+_vm._s(_vm.formatInt(350000))+\". \")]):_vm._e()]),_c('br'),_c('br'),_c('ReplicantiGainText'),_c('br'),(_vm.canSeeGalaxyButton)?_c('ReplicantiGalaxyButton'):_vm._e()]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group l-replicanti-upgrade-button\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--replicanti-upgrade\",attrs:{\"enabled\":_vm.canBeBought},on:{\"click\":function($event){return _vm.upgrade.purchase()}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.description)}}),(!_vm.isCapped)?[_c('br'),_c('span',[_vm._v(_vm._s(_vm.costDescription))])]:_vm._e()],2),(_vm.isAutoUnlocked && !_vm.isEC8Running)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--replicanti-upgrade-toggle\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReplicantiUpgradeButton.vue?vue&type=template&id=2708e750&scoped=true&\"\nimport script from \"./ReplicantiUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ReplicantiUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2708e750\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',[_vm._v(_vm._s(_vm.remainingTimeText)),_c('br'),_vm._v(_vm._s(_vm.galaxyText))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiGainText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiGainText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReplicantiGainText.vue?vue&type=template&id=2d743e12&scoped=true&\"\nimport script from \"./ReplicantiGainText.vue?vue&type=script&lang=js&\"\nexport * from \"./ReplicantiGainText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d743e12\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--replicanti-galaxy\",attrs:{\"enabled\":_vm.isAvailable},on:{\"click\":_vm.handleClick}},[_vm._v(\" \"+_vm._s(_vm.resetActionDisplay)+\" a Replicanti Galaxy \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.galaxyCountDisplay)+\" \")]),(_vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--replicanti-galaxy-toggle\",attrs:{\"value\":_vm.isAutoActive,\"on\":_vm.autobuyerTextDisplay,\"off\":_vm.autobuyerTextDisplay},on:{\"input\":_vm.handleAutoToggle}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiGalaxyButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiGalaxyButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReplicantiGalaxyButton.vue?vue&type=template&id=13c37845&scoped=true&\"\nimport script from \"./ReplicantiGalaxyButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ReplicantiGalaxyButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13c37845\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReplicantiTab.vue?vue&type=template&id=3fdc215a&scoped=true&\"\nimport script from \"./ReplicantiTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ReplicantiTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ReplicantiTab.vue?vue&type=style&index=0&id=3fdc215a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3fdc215a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-achievements-tab\"},[_vm._m(0),_c('div',{staticClass:\"l-achievement-grid\"},_vm._l((_vm.rows),function(row,i){return _c('secret-achievement-row',{key:i,attrs:{\"row\":row}})}),1)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-achievements-tab__header\"},[_c('span',[_vm._v(\" Secret Achievements are optional and give no bonuses. \")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject},_vm._l((_vm.row),function(achievement,i){return _c('SecretAchievement',{key:i,staticClass:\"l-achievement-grid__cell\",attrs:{\"achievement\":achievement}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject,style:(_vm.styleObject),on:{\"click\":_vm.onClick,\"mouseenter\":_vm.onMouseEnter,\"mouseleave\":_vm.onMouseLeave}},[_c('HintText',{staticClass:\"l-hint-text--achievement\",attrs:{\"type\":\"achievements\"}},[_vm._v(\" S\"+_vm._s(_vm.id)+\" \")]),_c('div',{staticClass:\"o-achievement__tooltip\"},[(_vm.isMouseOver)?[_c('div',{staticClass:\"o-achievement__tooltip__name\"},[_vm._v(\" \"+_vm._s(_vm.config.name)+\" (S\"+_vm._s(_vm.id)+\") \")]),(_vm.isUnlocked)?_c('div',{staticClass:\"o-achievement__tooltip__description\"},[_vm._v(\" \"+_vm._s(_vm.config.description)+\" \")]):_vm._e()]:_vm._e()],2),(_vm.showUnlockState)?_c('div',{class:_vm.indicatorClassObject},[_c('i',{class:_vm.indicatorIconClass})]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretAchievement.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretAchievement.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SecretAchievement.vue?vue&type=template&id=90052f58&\"\nimport script from \"./SecretAchievement.vue?vue&type=script&lang=js&\"\nexport * from \"./SecretAchievement.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretAchievementRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretAchievementRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SecretAchievementRow.vue?vue&type=template&id=a2a0e480&\"\nimport script from \"./SecretAchievementRow.vue?vue&type=script&lang=js&\"\nexport * from \"./SecretAchievementRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretAchievementTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretAchievementTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SecretAchievementTab.vue?vue&type=template&id=0471d14e&\"\nimport script from \"./SecretAchievementTab.vue?vue&type=script&lang=js&\"\nexport * from \"./SecretAchievementTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"tab shop\"},[_c('div',{staticClass:\"c-shop-disclaimer\"},[_vm._v(\" There is no shop. Stop looking for it. It doesn't exist, and never has. Seriously though, there isnt a use for a shop, I'm sure you will manage without one...right? \")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-shop-button-container\"},[_c('div',{staticClass:\"o-shop-button-description\"},[_vm._v(\" \"+_vm._s(_vm.purchase.description)+\" \"),_c('br'),(_vm.purchase.shouldDisplayMult)?_c('span',{staticClass:\"o-shop-button-multiplier\",class:{ 'o-shop-button-multiplier--disabled': _vm.iapDisabled }},[_vm._v(\" Currently \"+_vm._s(_vm.purchase.formatEffect(_vm.currentMult))+\", next: \"+_vm._s(_vm.purchase.formatEffect(_vm.nextMult))+\" \")]):_vm._e()]),_c('div',[(_vm.isSingleCosmeticSet)?_c('div',[(_vm.allSetsUnlocked)?_c('div',{staticClass:\"o-shop-button-multiplier\"},[_vm._v(\" All Sets unlocked! \")]):_c('div',[_c('button',{staticClass:\"o-shop-button-button\",on:{\"click\":_vm.openSelectionModal}},[_vm._v(\" Choose Set \")]),_vm._v(\" Chosen Set: \"+_vm._s(_vm.chosenSet)+\" \")])]):_vm._e(),(_vm.isAllCosmeticSets)?_c('div',{staticClass:\"o-shop-button-multiplier\"},[(_vm.allSetsUnlocked)?_c('div',[_vm._v(\" All Sets unlocked! \")]):_c('div',[_vm._v(\" Will unlock \"+_vm._s(_vm.quantify(\"set\", _vm.lockedCount))+\" \")])]):_vm._e()]),_c('button',{class:_vm.purchaseButtonObject(),on:{\"click\":_vm.performPurchase}},[_vm._v(\" Cost: \"+_vm._s(_vm.cost)+\" \"),_c('img',{staticClass:\"o-shop-button-button__img\",attrs:{\"src\":\"images/std_coin.png\"}})]),(!_vm.purchase.isUnlocked())?_c('div',{staticClass:\"o-shop-button-locked-text\"},[_vm._v(\" This affects a feature you have not unlocked yet (\"+_vm._s(_vm.purchase.lockText)+\") \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ShopButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ShopButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ShopButton.vue?vue&type=template&id=27835b02&scoped=true&\"\nimport script from \"./ShopButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ShopButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ShopButton.vue?vue&type=style&index=0&id=27835b02&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"27835b02\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ShopTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ShopTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ShopTab.vue?vue&type=template&id=21aa9272&scoped=true&\"\nimport script from \"./ShopTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ShopTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ShopTab.vue?vue&type=style&index=0&id=21aa9272&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"21aa9272\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"label\":\"Describe all milestones:\"},model:{value:(_vm.displayAll),callback:function ($$v) {_vm.displayAll=$$v},expression:\"displayAll\"}}),_c('br'),_c('b',[_vm._v(_vm._s(_vm.startTimeStr))]),_c('br'),_c('b',[_vm._v(_vm._s(_vm.spectateText))]),_c('br'),_c('div',{staticClass:\"l-speedrun-milestone-tab\"},_vm._l((_vm.milestones),function(milestone){return _c('SpeedrunMilestoneSingle',{key:milestone.id,attrs:{\"milestone\":milestone,\"display\":_vm.displayAll || milestone.id <= _vm.maxMilestone,\"time\":_vm.milestoneTimes[milestone.id]}})}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.classObject},[_c('b',[_vm._v(_vm._s(_vm.displayName))]),_c('i',[_vm._v(_vm._s(_vm.description))]),_vm._v(\" \"+_vm._s(_vm.timeDisplay)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunMilestoneSingle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunMilestoneSingle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedrunMilestoneSingle.vue?vue&type=template&id=6db0f941&\"\nimport script from \"./SpeedrunMilestoneSingle.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedrunMilestoneSingle.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunMilestonesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunMilestonesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedrunMilestonesTab.vue?vue&type=template&id=b14f2394&\"\nimport script from \"./SpeedrunMilestonesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedrunMilestonesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-stats-tab\"},[_c('div',[_c('PrimaryButton',{attrs:{\"onclick\":\"Modal.catchup.show(0)\"}},[_vm._v(\" View Content Summary \")]),_c('div',{staticClass:\"c-stats-tab-title c-stats-tab-general\"},[_vm._v(\" General \")]),_c('div',{staticClass:\"c-stats-tab-general\"},[_c('div',[_vm._v(\"You have made a total of \"+_vm._s(_vm.format(_vm.totalAntimatter, 2, 1))+\" antimatter.\")]),_c('div',[_vm._v(\"You have played for \"+_vm._s(_vm.realTimePlayed)+\". (real time)\")]),(_vm.reality.isUnlocked)?_c('div',[_vm._v(\" Your existence has spanned \"+_vm._s(_vm.reality.totalTimePlayed)+\" of time. (game time) \")]):_vm._e(),_c('div',[_vm._v(\" Your save was created on \"+_vm._s(_vm.startDate)+\" (\"+_vm._s(_vm.saveAge)+\" ago) \")]),_c('br'),_c('div',[_vm._v(\" You have seen \"+_vm._s(_vm.quantifyInt(\"news message\", _vm.totalNews))+\" in total. \")]),_c('div',[_vm._v(\" You have seen \"+_vm._s(_vm.quantifyInt(\"unique news message\", _vm.uniqueNews))+\". \")]),_c('div',[_vm._v(\" You have unlocked \"+_vm._s(_vm.quantifyInt(\"Secret Achievement\", _vm.secretAchievementCount))+\". \")]),(_vm.paperclips)?_c('div',[_vm._v(\" You have \"+_vm._s(_vm.quantifyInt(\"useless paperclip\", _vm.paperclips))+\". \")]):_vm._e(),(_vm.fullGameCompletions)?_c('div',[_c('br'),_c('b',[_vm._v(\" You have completed the entire game \"+_vm._s(_vm.quantifyInt(\"time\", _vm.fullGameCompletions))+\". \"),_c('br'),_vm._v(\" You have played for \"+_vm._s(_vm.fullTimePlayed)+\" across all playthroughs. \")])]):_vm._e()]),_c('div',[_c('br'),_c('div',{staticClass:\"c-matter-scale-container c-stats-tab-general\"},[_vm._l((_vm.matterScale),function(line,i){return _c('div',{key:i},[_vm._v(\" \"+_vm._s(line)+\" \")])}),(_vm.matterScale.length < 2)?_c('br'):_vm._e(),(_vm.matterScale.length < 3)?_c('br'):_vm._e()],2)]),_c('br')],1),(_vm.infinity.isUnlocked)?_c('div',{staticClass:\"c-stats-tab-subheader c-stats-tab-general\"},[_c('div',{staticClass:\"c-stats-tab-title c-stats-tab-infinity\"},[_vm._v(\" Infinity \")]),_c('div',[_vm._v(\" You have \"+_vm._s(_vm.infinityCountString)),(_vm.eternity.isUnlocked)?_c('span',[_vm._v(\" this Eternity\")]):_vm._e(),_vm._v(\". \")]),(_vm.infinity.banked.gt(0))?_c('div',[_vm._v(\" You have \"+_vm._s(_vm.formatDecimalAmount(_vm.infinity.banked.floor()))+\" \"+_vm._s(_vm.pluralize(\"Banked Infinity\", _vm.infinity.banked.floor()))+\". \")]):_vm._e(),(_vm.infinity.hasBest)?_c('div',[_vm._v(\" Your fastest Infinity was \"+_vm._s(_vm.infinity.best.toStringShort())+\". \")]):_c('div',[_vm._v(\" You have no fastest Infinity\"),(_vm.eternity.isUnlocked)?_c('span',[_vm._v(\" this Eternity\")]):_vm._e(),_vm._v(\". \")]),_c('div',[_vm._v(\" You have spent \"+_vm._s(_vm.infinity.this.toStringShort())+\" in this Infinity. \"),(_vm.reality.isUnlocked)?_c('span',[_vm._v(\" (\"+_vm._s(_vm.infinity.thisReal.toStringShort())+\" real time) \")]):_vm._e()]),_c('div',[_vm._v(\" Your best Infinity Points per minute \"),(_vm.eternity.count.gt(0))?_c('span',[_vm._v(\"this Eternity \")]):_vm._e(),_vm._v(\" is \"+_vm._s(_vm.format(_vm.infinity.bestRate, 2, 2))+\". \")]),_c('br')]):_vm._e(),(_vm.eternity.isUnlocked)?_c('div',{staticClass:\"c-stats-tab-subheader c-stats-tab-general\"},[_c('div',{staticClass:\"c-stats-tab-title c-stats-tab-eternity\"},[_vm._v(\" Eternity \")]),_c('div',[_vm._v(\" You have \"+_vm._s(_vm.eternityCountString)),(_vm.reality.isUnlocked)?_c('span',[_vm._v(\" this Reality\")]):_vm._e(),_vm._v(\". \")]),(_vm.infinity.projectedBanked.gt(0))?_c('div',[_vm._v(\" You will gain \"+_vm._s(_vm.formatDecimalAmount(_vm.infinity.projectedBanked.floor()))+\" \"+_vm._s(_vm.pluralize(\"Banked Infinity\", _vm.infinity.projectedBanked.floor()))+\" on Eternity (\"+_vm._s(_vm.formatDecimalAmount(_vm.infinity.bankRate))+\" per minute). \")]):(_vm.infinity.banked.gt(0))?_c('div',[_vm._v(\" You will gain no Banked Infinities on Eternity. \")]):_vm._e(),(_vm.eternity.hasBest)?_c('div',[_vm._v(\" Your fastest Eternity was \"+_vm._s(_vm.eternity.best.toStringShort())+\". \")]):_c('div',[_vm._v(\" You have no fastest Eternity\"),(_vm.reality.isUnlocked)?_c('span',[_vm._v(\" this Reality\")]):_vm._e(),_vm._v(\". \")]),_c('div',[_vm._v(\" You have spent \"+_vm._s(_vm.eternity.this.toStringShort())+\" in this Eternity. \"),(_vm.reality.isUnlocked)?_c('span',[_vm._v(\" (\"+_vm._s(_vm.eternity.thisReal.toStringShort())+\" real time) \")]):_vm._e()]),_c('div',[_vm._v(\" Your best Eternity Points per minute \"),(_vm.reality.isUnlocked)?_c('span',[_vm._v(\"this Reality \")]):_vm._e(),_vm._v(\" is \"+_vm._s(_vm.format(_vm.eternity.bestRate, 2, 2))+\". \")]),_c('br')]):_vm._e(),(_vm.reality.isUnlocked)?_c('div',{staticClass:\"c-stats-tab-subheader c-stats-tab-general\"},[_c('div',{class:_vm.realityClassObject()},[_vm._v(\" \"+_vm._s(_vm.isDoomed ? \"Doomed Reality\" : \"Reality\")+\" \")]),_c('div',[_vm._v(\"You have \"+_vm._s(_vm.reality.count >= 1e12 ? _vm.format(_vm.reality.count, 2) : _vm.formatInt(_vm.reality.count))+\" \"+_vm._s(_vm.reality.count > 1 ? \" Realities\" : \" Reality\")+\".\")]),_c('div',[_vm._v(\"Your fastest game-time Reality was \"+_vm._s(_vm.reality.best.toStringShort())+\".\")]),_c('div',[_vm._v(\"Your fastest real-time Reality was \"+_vm._s(_vm.reality.bestReal.toStringShort())+\".\")]),_c('div',{class:{ 'c-stats-tab-doomed' : _vm.isDoomed }},[_vm._v(\" You have spent \"+_vm._s(_vm.reality.this.toStringShort())+\" in this \"+_vm._s(_vm.isDoomed ? \"Armageddon\" : \"Reality\")+\". (\"+_vm._s(_vm.reality.thisReal.toStringShort())+\" real time) \")]),(_vm.isDoomed)?_c('div',{staticClass:\"c-stats-tab-doomed\"},[_vm._v(\" You have been Doomed for \"+_vm._s(_vm.realTimeDoomed.toStringShort())+\", real time. \")]):_vm._e(),_c('div',[_vm._v(\" Your best Reality Machines per minute is \"+_vm._s(_vm.format(_vm.reality.bestRate, 2, 2))+\". \")]),_c('div',[_vm._v(\"Your best Glyph rarity is \"+_vm._s(_vm.formatRarity(_vm.reality.bestRarity))+\".\")]),_c('br')]):_vm._e(),(_vm.mending.isUnlocked)?_c('div',{staticClass:\"c-stats-tab-subheader c-stats-tab-general\"},[_c('div',{staticClass:\"c-stats-tab-title c-stats-tab-mending\"},[_vm._v(\" Mending \")]),_c('div',[_vm._v(\" You have Mended the Mulitverse \"+_vm._s(_vm.quantifyInt(\"time\", _vm.mending.count))+\". \")]),(_vm.mending.hasBest)?_c('div',[_vm._v(\" Your fastest Mend was \"+_vm._s(_vm.mending.best.toStringShort())+\" (\"+_vm._s(_vm.mending.bestReal.toStringShort())+\" real time). \")]):_vm._e(),_c('div',[_vm._v(\" You have spent \"+_vm._s(_vm.mending.this.toStringShort())+\" in this Mend. (\"+_vm._s(_vm.mending.thisReal.toStringShort())+\" real time) \")]),_c('br')]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { DC } from \"@/core/constants\";\r\n\r\nexport const MatterScale = {\r\n proton: new Decimal(\"2.82e-45\"),\r\n\r\n estimate(matter) {\r\n if (!matter) return [\"There is no antimatter yet.\"];\r\n const distScaling = this.distanceScale(matter.log10())\r\n if (matter.log10() > 4.324e26*1e14) {\r\n return [\r\n `How do you have so much antimatter`,\r\n `There will eventually be a matter scale here`,\r\n `For now, enjoy the knowledge that you are here`,\r\n `A place so far that you never were meant to be`,\r\n `So far, that the matter scale is lost`\r\n ];\r\n }\r\n if (matter.gt(Decimal.pow10(4.320432e21*3))) {\r\n return [\r\n `If every number in your antimatter count was a hydrogen atom,`,\r\n `you would have a line of atoms stretching from Earth to`,\r\n `${distScaling.name} ${format(matter.log10() / (distScaling.amount * 1e12 / 53), 2, 2)} ${distScaling != 1 ? \"times\" : \"time\"}`\r\n ];\r\n }\r\n if (matter.gt(Decimal.pow10(4.320432e17*3))) {\r\n return [\r\n `If you wrote ${formatInt(3)} numbers a second, from the start`,\r\n `of the universe, till today, you would have to existed for`,\r\n `${formatX(matter.log10() / (4.320432e17*3), 3, 3)} the current age of the universe.`\r\n ];\r\n }\r\n if (matter.gt(DC.E1_5E12)) {\r\n return [\r\n `It would take ` + formatPercents((matter.log10() / (4.320432e17*3)).toString(), 4),\r\n \" of the current age of the Universe to write out your antimatter count\",\r\n `if you wrote ${formatInt(3)} numbers a second`\r\n ];\r\n }\r\n if (matter.gt(new Decimal(\"1e7200000000\"))) {\r\n return [\r\n `If you wrote ${formatInt(3)} numbers a second, it would take you`,\r\n formatFloat(((matter.log10() / 2437102080)), 2) + ` average American lifespans`,\r\n ` to write down your antimatter amount.`\r\n ];\r\n }\r\n if (matter.gt(DC.E1E7)) {\r\n return [\r\n `It would take ` + formatPercents((matter.log10() / (2437102080*3)).toString(), 4),\r\n \" of the average American lifespan to write out your antimatter count\",\r\n `if you wrote ${formatInt(3)} numbers a second`\r\n ];\r\n }\r\n if (matter.gt(DC.E10000)) {\r\n return [\r\n `If you wrote ${formatInt(3)} numbers a second, it would take you`,\r\n TimeSpan.fromSeconds(matter.log10() / 3).toString(),\r\n \"to write down your antimatter amount.\"\r\n ];\r\n }\r\n const planck = new Decimal(\"4.22419e-105\");\r\n const planckedMatter = matter.times(planck);\r\n if (planckedMatter.gt(this.proton)) {\r\n const scale = this.macroScale(planckedMatter);\r\n const amount = format(planckedMatter.dividedBy(scale.amount), 2, 1);\r\n return [`If every antimatter were a planck volume, you would have\r\n enough to ${scale.verb} ${amount} ${scale.name}`];\r\n }\r\n const scale = this.microScale(matter);\r\n return [`If every antimatter were ${format(this.proton.div(scale.amount).div(matter), 2, 1)} ${scale.name},\r\n you would have enough to make a proton.`];\r\n },\r\n\r\n microScale(matter) {\r\n const micro = this.microObjects;\r\n for (let i = 0; i < micro.length; i++) {\r\n const scale = micro[i];\r\n if (matter.times(scale.amount).lt(this.proton)) {\r\n return scale;\r\n }\r\n }\r\n throw \"Cannot determine smallest antimatter scale\";\r\n },\r\n\r\n macroScale(matter) {\r\n const macro = this.macroObjects;\r\n const last = macro.last();\r\n if (matter.gte(last.amount)) return last;\r\n let low = 0;\r\n let high = macro.length;\r\n while (low !== high) {\r\n const mid = Math.floor((low + high) / 2);\r\n if (macro[mid].amount.lte(matter)) {\r\n low = mid + 1;\r\n } else {\r\n high = mid;\r\n }\r\n }\r\n return macro[high - 1];\r\n },\r\n\r\n distanceScale(matter) {\r\n const dist = this.distances\r\n let mtr = (matter/1e12) * 53\r\n const last = dist.last()\r\n if (mtr > last.amount) return last;\r\n let low = 0;\r\n let high = dist.length;\r\n while (low !== high) {\r\n const mid = Math.floor((low + high) / 2);\r\n if (dist[mid].amount < mtr) {\r\n low = mid + 1;\r\n } else {\r\n high = mid;\r\n }\r\n }\r\n return dist[high - 1];\r\n },\r\n\r\n distances: [\r\n { amount: 1.35e11, name: \"Saturn when it's closest to Earth\" },\r\n { amount: 4.437e12, name: \"Pluto when it's closest to Earth\" },\r\n { amount: 7.376e12, name: \"Pluto when it's furthest to Earth\" },\r\n { amount: 9.461e15, name: \"something a light-year away\" },\r\n { amount: 4.011e16, name: \"Proxima Centauri\" },\r\n { amount: 1.902e17, name: \"Gliese 581\" },\r\n { amount: 2.46e20, name: \"the center of the Milky Way\" },\r\n { amount: 2.365e22, name: \"the Andromeda Galaxy\" },\r\n { amount: 2.271e24, name: \"3C 273 (optically brightest quasar)\" },\r\n { amount: 4.324e26, name: \"the edge of the Observable Universe\" },\r\n ],\r\n\r\n microObjects: [\r\n { amount: new Decimal(\"1e-54\"), name: \"attometers cubed\" },\r\n { amount: new Decimal(\"1e-63\"), name: \"zeptometers cubed\" },\r\n { amount: new Decimal(\"1e-72\"), name: \"yoctometers cubed\" },\r\n { amount: new Decimal(\"4.22419e-105\"), name: \"planck volumes\" }\r\n ],\r\n\r\n macroObjects: [\r\n { amount: new Decimal(\"2.82e-45\"), name: \"protons\", verb: \"make\" },\r\n { amount: new Decimal(\"1e-42\"), name: \"nuclei\", verb: \"make\" },\r\n { amount: new Decimal(\"7.23e-30\"), name: \"Hydrogen atoms\", verb: \"make\" },\r\n { amount: new Decimal(\"5e-21\"), name: \"viruses\", verb: \"make\" },\r\n { amount: new Decimal(\"9e-17\"), name: \"red blood cells\", verb: \"make\" },\r\n { amount: new Decimal(\"6.2e-11\"), name: \"grains of sand\", verb: \"make\" },\r\n { amount: new Decimal(\"5e-8\"), name: \"grains of rice\", verb: \"make\" },\r\n { amount: new Decimal(\"3.555e-6\"), name: \"teaspoons\", verb: \"fill\" },\r\n { amount: new Decimal(\"7.5e-4\"), name: \"wine bottles\", verb: \"fill\" },\r\n { amount: DC.D1, name: \"fridge-freezers\", verb: \"fill\" },\r\n { amount: new Decimal(\"2.5e3\"), name: \"Olympic-sized swimming pools\", verb: \"fill\" },\r\n { amount: new Decimal(\"2.6006e6\"), name: \"Great Pyramids of Giza\", verb: \"make\" },\r\n { amount: new Decimal(\"3.3e8\"), name: \"Great Walls of China\", verb: \"make\" },\r\n { amount: new Decimal(\"5e12\"), name: \"large asteroids\", verb: \"make\" },\r\n { amount: new Decimal(\"4.5e17\"), name: \"dwarf planets\", verb: \"make\" },\r\n { amount: new Decimal(\"1.08e21\"), name: \"Earths\", verb: \"make\" },\r\n { amount: new Decimal(\"1.53e24\"), name: \"Jupiters\", verb: \"make\" },\r\n { amount: new Decimal(\"1.41e27\"), name: \"Suns\", verb: \"make\" },\r\n { amount: new Decimal(\"5e32\"), name: \"red giants\", verb: \"make\" },\r\n { amount: new Decimal(\"8e36\"), name: \"hypergiant stars\", verb: \"make\" },\r\n { amount: new Decimal(\"1.7e45\"), name: \"nebulas\", verb: \"make\" },\r\n { amount: new Decimal(\"1.7e48\"), name: \"Oort clouds\", verb: \"make\" },\r\n { amount: new Decimal(\"3.3e55\"), name: \"Local Bubbles\", verb: \"make\" },\r\n { amount: new Decimal(\"3.3e61\"), name: \"galaxies\", verb: \"make\" },\r\n { amount: new Decimal(\"5e68\"), name: \"Local Groups\", verb: \"make\" },\r\n { amount: new Decimal(\"1e73\"), name: \"Sculptor Voids\", verb: \"make\" },\r\n { amount: new Decimal(\"3.4e80\"), name: \"observable universes\", verb: \"make\" },\r\n { amount: new Decimal(\"1e113\"), name: \"Dimensions\", verb: \"make\" },\r\n { amount: DC.C2P1024, name: \"Infinity Dimensions\", verb: \"make\" },\r\n { amount: new Decimal(\"1e65000\"), name: \"Time Dimensions\", verb: \"make\" }\r\n ]\r\n};\r\n","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StatisticsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StatisticsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StatisticsTab.vue?vue&type=template&id=5e391bac&scoped=true&\"\nimport script from \"./StatisticsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./StatisticsTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./StatisticsTab.vue?vue&type=style&index=0&id=5e391bac&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5e391bac\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-teresa-celestial-tab\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"teresa\"}}),_c('div',[_vm._v(\" You have \"+_vm._s(_vm.quantify(\"Reality Machine\", _vm.rm, 2, 2))+\". \")]),_c('div',{staticClass:\"l-mechanics-container\"},[(_vm.hasReality)?_c('div',{staticClass:\"l-teresa-mechanic-container\"},[_c('div',{staticClass:\"c-teresa-unlock c-teresa-run-button\"},[_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_vm._v(\" Start Teresa's Reality. \")]),_c('div',{class:_vm.runButtonClassObject,on:{\"click\":function($event){return _vm.startRun()}}},[_vm._v(\" Ϟ \")]),_vm._v(\" \"+_vm._s(_vm.runDescription)+\" \"),_c('br'),_c('br'),_c('div',[_vm._v(\" This Reality can be repeated for a stronger reward based on the antimatter gained within it. \"),_c('br'),_c('br'),(_vm.showRunReward)?_c('span',[_vm._v(\" Your record antimatter in Teresa's Reality is \"+_vm._s(_vm.format(_vm.bestAM, 2))+\", achieved with \"+_vm._s(_vm.lastMachinesString)+\". \"),_c('br'),_c('br'),_vm._v(\" Glyph Set used: \"),_c('GlyphSetPreview',{attrs:{\"text\":\"Teresa's Best Glyph Set\",\"text-hidden\":true,\"force-name-color\":false,\"glyphs\":_vm.bestAMSet}})],1):_c('span',[_vm._v(\" You have not completed Teresa's Reality yet. \")])])]),(_vm.showRunReward)?_c('div',{staticClass:\"c-teresa-unlock\"},[_vm._v(\" Teresa Reality reward: Glyph Sacrifice power \"+_vm._s(_vm.formatX(_vm.runReward, 2, 2))+\" \")]):_vm._e(),(_vm.hasEPGen)?_c('div',{staticClass:\"c-teresa-unlock\"},[_c('span',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_vm._v(\" Every second, you gain \"+_vm._s(_vm.formatPercents(0.01))+\" of your peaked Eternity Points per minute this Reality. \")])]):_vm._e()]):_vm._e(),_c('div',{staticClass:\"l-rm-container l-teresa-mechanic-container\"},[_c('button',{class:_vm.pourButtonClassObject,on:{\"mousedown\":function($event){_vm.pour = true},\"touchstart\":function($event){_vm.pour = true},\"mouseup\":function($event){_vm.pour = false},\"touchend\":function($event){_vm.pour = false},\"mouseleave\":function($event){_vm.pour = false}}},[_vm._v(\" \"+_vm._s(_vm.pourText)+\" \")]),_c('div',{staticClass:\"c-rm-store\"},[_c('div',{staticClass:\"c-rm-store-inner c-rm-store-inner--light\",style:({ height: _vm.possibleFillPercentage})}),_c('div',{staticClass:\"c-rm-store-inner\",style:({ height: _vm.percentage})},[_c('div',{staticClass:\"c-rm-store-label\"},[_vm._v(\" \"+_vm._s(_vm.formatX(_vm.rmMult, 2, 2))+\" RM gain \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.format(_vm.pouredAmount, 2, 2))+\"/\"+_vm._s(_vm.format(_vm.pouredAmountCap, 2, 2))+\" \")])]),_vm._l((_vm.unlockInfos),function(unlockInfo){return _c('CustomizeableTooltip',{key:unlockInfo.id,attrs:{\"content-class\":\"c-teresa-unlock-description--hover-area\",\"bottom\":_vm.unlockDescriptionHeight(unlockInfo),\"right\":\"0\",\"mode\":\"right\",\"show\":true,\"tooltip-arrow-style\":_vm.unlockInfoTooltipArrowStyle,\"tooltip-class\":_vm.unlockInfoTooltipClass(unlockInfo)},scopedSlots:_vm._u([{key:\"mainContent\",fn:function(){return [_c('div',{staticClass:\"c-teresa-milestone-line\",class:{ 'c-teresa-milestone-line--unlocked': _vm.hasUnlock(unlockInfo) }})]},proxy:true},{key:\"tooltipContent\",fn:function(){return [_c('b',{class:{ 'o-pelle-disabled': unlockInfo.pelleDisabled }},[_vm._v(\" \"+_vm._s(_vm.format(unlockInfo.price, 2, 2))+\": \"+_vm._s(unlockInfo.description)+\" \")])]},proxy:true}],null,true)})})],2)]),(_vm.pouredAmount < _vm.pouredAmountCap)?_c('div',{staticClass:\"l-rm-container-labels l-teresa-mechanic-container\"}):_vm._e(),(_vm.hasPerkShop)?_c('div',{staticClass:\"c-teresa-shop\"},[_c('span',{staticClass:\"o-teresa-pp\"},[_vm._v(\" You have \"+_vm._s(_vm.quantify(\"Perk Point\", _vm.perkPoints, 2, 0))+\". \")]),_vm._l((_vm.upgrades),function(upgrade){return _c('PerkShopUpgradeButton',{key:upgrade.id,attrs:{\"upgrade\":upgrade}})}),_vm._v(\" You can now modify the appearance of your Glyphs to look like Music Glyphs. \")],2):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{class:_vm.classObject,on:{\"click\":function($event){return _vm.upgrade.purchase()}}},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.upgrade.config,\"length\":70}}),_c('br'),_c('EffectDisplay',{attrs:{\"config\":_vm.upgrade.config}}),_c('br'),(!_vm.isCapped)?_c('CostDisplay',{attrs:{\"config\":_vm.upgrade.config,\"name\":\"Perk Point\"}}):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PerkShopUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PerkShopUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PerkShopUpgradeButton.vue?vue&type=template&id=1ce43eb4&scoped=true&\"\nimport script from \"./PerkShopUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./PerkShopUpgradeButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PerkShopUpgradeButton.vue?vue&type=style&index=0&id=1ce43eb4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1ce43eb4\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TeresaTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TeresaTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TeresaTab.vue?vue&type=template&id=462ad4de&scoped=true&\"\nimport script from \"./TeresaTab.vue?vue&type=script&lang=js&\"\nexport * from \"./TeresaTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TeresaTab.vue?vue&type=style&index=0&id=462ad4de&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"462ad4de\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-dilation-tab\"},[_c('span',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-dilation-tab__tachyons\"},[_vm._v(_vm._s(_vm.format(_vm.tachyons, 2, 1)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Tachyon Particle\", _vm.tachyons))+\". \")]),_c('div',{on:{\"mouseover\":function($event){_vm.isHovering = true},\"mouseleave\":function($event){_vm.isHovering = false}}},[_c('DilationButton')],1),_c('span',[_vm._v(\" You have \"),_c('span',{staticClass:\"c-dilation-tab__dilated-time\"},[_vm._v(_vm._s(_vm.format(_vm.dilatedTime, 2, 1)))]),_vm._v(\" Dilated Time. \"),_c('span',{staticClass:\"c-dilation-tab__dilated-time-income\"},[_vm._v(_vm._s(_vm.dilatedTimeGainText)+\"/s\")])]),_c('span',[_vm._v(\" Next \"),(_vm.tachyonGalaxyGain > 1)?_c('span',[_vm._v(_vm._s(_vm.formatInt(_vm.tachyonGalaxyGain)))]):_vm._e(),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Tachyon Galaxy\", _vm.tachyonGalaxyGain))+\" at \"),_c('span',{staticClass:\"c-dilation-tab__galaxy-threshold\",attrs:{\"ach-tooltip\":_vm.galaxyTimeEstimate}},[_vm._v(_vm._s(_vm.format(_vm.galaxyThreshold, 2, 1)))]),_vm._v(\" Dilated Time, gained total of \"),_c('span',{staticClass:\"c-dilation-tab__galaxies\",attrs:{\"ach-tooltip\":_vm.baseGalaxyText}},[_vm._v(_vm._s(_vm.formatInt(_vm.totalGalaxies)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Tachyon Galaxy\", _vm.totalGalaxies))+\" \")]),(_vm.hasMaxText)?_c('span',[_vm._v(\" Your maximum Dilated Time reached this Reality is \"),_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.toMaxTooltip),expression:\"toMaxTooltip\"}],staticClass:\"max-accent\"},[_vm._v(_vm._s(_vm.format(_vm.maxDT, 2, 1)))]),_vm._v(\". \")]):_vm._e(),_c('span',[_vm._v(\" Rebuyable costs jump and scale much faster past 5,000 purchases. \")]),(_vm.isPastSCone)?_c('span',[_vm._v(\" Every \"+_vm._s(_vm.formatInt(_vm.scOneStart))+\" Tachyon Galaxies, TG threshold is \"+_vm._s(_vm.formatX(_vm.scOneMult, 3, 3))+\". \")]):_vm._e(),_c('div',{staticClass:\"l-dilation-upgrades-grid\"},[_vm._l((_vm.allRebuyables),function(upgradeRow,row){return _c('div',{key:'rebuyable' + row,staticClass:\"l-dilation-upgrades-grid__row\"},_vm._l((upgradeRow),function(upgrade){return _c('DilationUpgradeButton',{key:upgrade.id,staticClass:\"l-dilation-upgrades-grid__cell\",attrs:{\"upgrade\":upgrade,\"is-rebuyable\":true,\"show-tooltip\":_vm.isHovering}})}),1)}),_vm._l((_vm.allSingleUpgrades),function(upgradeRow,row){return _c('div',{key:'single' + row,staticClass:\"l-dilation-upgrades-grid__row\"},_vm._l((upgradeRow),function(upgrade){return _c('DilationUpgradeButton',{key:upgrade.id,staticClass:\"l-dilation-upgrades-grid__cell\",attrs:{\"upgrade\":upgrade,\"is-rebuyable\":false,\"show-tooltip\":_vm.isHovering}})}),1)})],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{staticClass:\"o-dilation-btn\",class:_vm.isUnlocked ? 'o-dilation-btn--unlocked' : 'o-dilation-btn--locked',on:{\"click\":function($event){return _vm.dilate()}}},[(!_vm.isUnlocked)?_c('span',[_vm._v(\"Purchase the Dilation Study to unlock.\")]):(!_vm.isRunning)?_c('span',[_vm._v(\" Dilate time. \"),(_vm.showRequirement)?_c('div',[_vm._v(\" Requires \"+_vm._s(_vm.format(_vm.remnantRequirement, 2))+\" Remnants \")]):_vm._e()]):(_vm.canEternity && _vm.hasGain)?_c('span',[_vm._v(\" \"+_vm._s(_vm.disableText)+\" \"),_c('br'),_vm._v(\" Gain \"+_vm._s(_vm.quantify(\"Tachyon Particle\", _vm.tachyonGain, 2, 1))+\". \")]):(_vm.hasGain)?_c('span',[_vm._v(\" \"+_vm._s(_vm.disableText)+\" \"),_c('br'),_vm._v(\" Reach \"+_vm._s(_vm.quantify(\"Infinity Point\", _vm.eternityGoal, 1, 0))+\" to Eternity and gain Tachyon Particles. \")]):_c('span',[_vm._v(\" \"+_vm._s(_vm.disableText)+\" \"),_c('br'),_vm._v(\" Reach \"+_vm._s(_vm.format(_vm.requiredForGain, 2, 1))+\" antimatter to gain more Tachyon Particles. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DilationButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DilationButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DilationButton.vue?vue&type=template&id=4d5e53d0&scoped=true&\"\nimport script from \"./DilationButton.vue?vue&type=script&lang=js&\"\nexport * from \"./DilationButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4d5e53d0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{class:_vm.classObject,attrs:{\"ach-tooltip\":_vm.timeEstimate},on:{\"click\":function($event){return _vm.upgrade.purchase()},\"mouseover\":function($event){_vm.isHovering = true},\"mouseleave\":function($event){_vm.isHovering = false}}},[(_vm.timeEstimate)?_c('CustomizeableTooltip',{attrs:{\"show\":_vm.showTooltip && !_vm.isHovering && !_vm.hideEstimate,\"left\":\"50%\",\"top\":\"0\"},scopedSlots:_vm._u([{key:\"tooltipContent\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.timeEstimate)+\" \")]},proxy:true}],null,false,1945308655)}):_vm._e(),_c('span',[_c('DescriptionDisplay',{attrs:{\"config\":_vm.upgrade.config,\"length\":70,\"name\":\"o-dilation-upgrade__description\"}}),_c('EffectDisplay',{key:_vm.boughtAmount,attrs:{\"br\":\"\",\"config\":_vm.upgrade.config}})],1),(!_vm.isBought && !_vm.isCapped)?_c('CostDisplay',{attrs:{\"br\":\"\",\"config\":_vm.upgrade.config,\"name\":\"Dilated Time\"}}):_vm._e()],1),(_vm.isRebuyable && _vm.isAutoUnlocked)?_c('PrimaryToggleButton',{staticClass:\"l--spoon-btn-group__little-spoon o-primary-btn--dilation-upgrade-toggle\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DilationUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DilationUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DilationUpgradeButton.vue?vue&type=template&id=546a6b9c&scoped=true&\"\nimport script from \"./DilationUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./DilationUpgradeButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DilationUpgradeButton.vue?vue&type=style&index=0&id=546a6b9c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"546a6b9c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeDilationTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeDilationTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeDilationTab.vue?vue&type=template&id=d9200254&scoped=true&\"\nimport script from \"./TimeDilationTab.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeDilationTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TimeDilationTab.vue?vue&type=style&index=0&id=d9200254&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d9200254\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.activeComponent,{tag:\"component\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-time-dim-tab l-centered-vertical-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all \")]),(_vm.areAutobuyersUnlocked)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.toggleAllAutobuyers}},[_vm._v(\" Toggle all autobuyers \")]):_vm._e()],1),(_vm.shortenTSU)?_c('div',[_c('p',[_vm._v(\" You have gained \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.totalUpgrades, 2, 2)))]),_vm._v(\" Tickspeed upgrades from \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.timeShards, 2, 1)))]),_vm._v(\" Time Shards. \")]),_c('p',[_vm._v(\" Next Tickspeed upgrade at \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.upgradeThreshold, 2, 1)))]),_vm._v(\", increasing by \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatX(_vm.multPerTickspeed, 2, 2)))]),_vm._v(\" per Tickspeed upgrade gained. \")])]):_c('div',[_c('p',[_vm._v(\" You have gained \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatInt(_vm.totalUpgrades)))]),_vm._v(\" Tickspeed upgrades from \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.timeShards, 2, 1)))]),_vm._v(\" Time Shards. \")]),_c('p',[_vm._v(\" Next Tickspeed upgrade at \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.upgradeThreshold, 2, 1)))]),_vm._v(\", increasing by \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatX(_vm.multPerTickspeed, 2, 2)))]),_vm._v(\" per Tickspeed upgrade gained. \")])]),_c('div',[_vm._v(\" The amount each additional upgrade requires will start increasing above \"+_vm._s(_vm.formatInt(_vm.tickspeedSoftcap))+\" Tickspeed upgrades. \")]),_c('div',[_vm._v(\" You are getting \"+_vm._s(_vm.format(_vm.shardsPerSecond, 2, 0))+\" \"+_vm._s(_vm.incomeType)+\" per second. \")]),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('TimeDimensionRow',{key:tier,attrs:{\"tier\":tier,\"are-autobuyers-unlocked\":_vm.areAutobuyersUnlocked}})}),1),_c('div',[_vm._v(\" Time Dimension costs jump at \"+_vm._s(_vm.format(_vm.costIncreases[0], 2, 2))+\" and \"+_vm._s(_vm.format(_vm.costIncreases[1]))+\" Eternity Points, \"),_c('br'),_vm._v(\" and costs increase much faster after \"+_vm._s(_vm.format(_vm.costIncreases[2]))+\" Eternity Points. \"),_c('br'),(_vm.showLockedDimCostNote)?_c('div',[_vm._v(\" Hold shift to see the Eternity Point cost for locked Time Dimensions. \")]):_vm._e(),(_vm.cappedMult)?_c('div',[_vm._v(\" Any 8th Time Dimensions purchased above \"+_vm._s(_vm.format(1e8))+\" will not further increase the multiplier. \")]):_vm._e(),_c('br'),_vm._v(\" Time Dimensions can only be purchased up to \"+_vm._s(_vm.format(5e14))+\" times. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked && !_vm.requirementReached }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 1),\"amount-text\":_vm.format(_vm.amount, 2),\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td o-primary-btn--buy-dim c-dim-tooltip-container\",class:_vm.buttonClass(),attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isCapped && !_vm.isContinuumActive},on:{\"click\":_vm.buyTimeDimension}},[_vm._v(\" \"+_vm._s(_vm.buttonContents)+\" \"),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.tooltipContents)}})])]),(_vm.areAutobuyersUnlocked && !_vm.isContinuumActive)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--buy-td-auto\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):(!_vm.isContinuumActive)?_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td-auto\",attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isCapped},on:{\"click\":_vm.buyMaxTimeDimension}},[_vm._v(\" Buy Max \")]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTimeDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTimeDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicTimeDimensionRow.vue?vue&type=template&id=bb681570&scoped=true&\"\nimport script from \"./ClassicTimeDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicTimeDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicTimeDimensionRow.vue?vue&type=style&index=0&id=bb681570&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bb681570\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTimeDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicTimeDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicTimeDimensionsTab.vue?vue&type=template&id=4784b276&\"\nimport script from \"./ClassicTimeDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicTimeDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-time-dim-tab l-centered-vertical-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all \")]),(_vm.areAutobuyersUnlocked)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.toggleAllAutobuyers}},[_vm._v(\" Toggle all autobuyers \")]):_vm._e()],1),(_vm.shortenTSU)?_c('div',[_c('p',[_vm._v(\" You have gained \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.totalUpgrades, 2, 2)))]),_vm._v(\" Tickspeed upgrades from \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.timeShards, 2, 1)))]),_vm._v(\" Time Shards. \")]),_c('p',[_vm._v(\" Next Tickspeed upgrade at \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.upgradeThreshold, 2, 1)))]),_vm._v(\", increasing by \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatX(_vm.multPerTickspeed, 2, 2)))]),_vm._v(\" per Tickspeed upgrade gained. \")])]):_c('div',[_c('p',[_vm._v(\" You have gained \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatInt(_vm.totalUpgrades)))]),_vm._v(\" Tickspeed upgrades from \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.timeShards, 2, 1)))]),_vm._v(\" Time Shards. \")]),_c('p',[_vm._v(\" Next Tickspeed upgrade at \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.upgradeThreshold, 2, 1)))]),_vm._v(\", increasing by \"),_c('span',{staticClass:\"c-time-dim-description__accent\"},[_vm._v(_vm._s(_vm.formatX(_vm.multPerTickspeed, 2, 2)))]),_vm._v(\" per Tickspeed upgrade gained. \")])]),_c('div',[_vm._v(\" The amount each additional upgrade requires will start increasing above \"+_vm._s(_vm.formatInt(_vm.tickspeedSoftcap))+\" Tickspeed upgrades. \")]),_c('div',[_vm._v(\"You are getting \"+_vm._s(_vm.format(_vm.shardsPerSecond, 2, 0))+\" \"+_vm._s(_vm.incomeType)+\" per second.\")]),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('NewTimeDimensionRow',{key:tier,attrs:{\"tier\":tier,\"are-autobuyers-unlocked\":_vm.areAutobuyersUnlocked}})}),1),_c('div',[_vm._v(\" Time Dimension costs jump at \"+_vm._s(_vm.format(_vm.costIncreases[0], 2, 2))+\" and \"+_vm._s(_vm.format(_vm.costIncreases[1]))+\" Eternity Points, \"),_c('br'),_vm._v(\" and costs increase much faster after \"+_vm._s(_vm.format(_vm.costIncreases[2]))+\" Eternity Points. \"),_c('br'),(_vm.showLockedDimCostNote)?_c('div',[_vm._v(\" Hold shift to see the Eternity Point cost for locked Time Dimensions. \")]):_vm._e(),(_vm.cappedMult)?_c('div',[_vm._v(\" Any 8th Time Dimensions purchased above \"+_vm._s(_vm.format(1e8))+\" will not further increase the multiplier. \")]):_vm._e(),_c('br'),_vm._v(\" Time Dimensions can only be purchased up to \"+_vm._s(_vm.format(_vm.trueCap,2,2))+\" times. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-row-time-dim l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked && !_vm.requirementReached }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 1),\"amount-text\":_vm.format(_vm.amount, 2),\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container c-modern-dim-tooltip-container\",style:(_vm.cssVars)},[_c('div',{staticClass:\"c-modern-dim-purchase-count-tooltip\",style:(_vm.cssVars)},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.tooltipContents)}})]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td o-primary-btn o-primary-btn--new o-primary-btn--buy-dim\",class:_vm.buttonClass(),attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isCapped && !_vm.isContinuumActive},on:{\"click\":_vm.buyTimeDimension}},[_vm._v(\" \"+_vm._s(_vm.buttonContents)+\" \")]),(_vm.areAutobuyersUnlocked && !_vm.isContinuumActive)?_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--buy-td-auto\",attrs:{\"label\":\"Auto:\"},model:{value:(_vm.isAutobuyerOn),callback:function ($$v) {_vm.isAutobuyerOn=$$v},expression:\"isAutobuyerOn\"}}):(!_vm.isContinuumActive)?_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td-auto\",attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isCapped},on:{\"click\":_vm.buyMaxTimeDimension}},[_vm._v(\" Buy Max \")]):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernTimeDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernTimeDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernTimeDimensionRow.vue?vue&type=template&id=1b5405e2&scoped=true&\"\nimport script from \"./ModernTimeDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernTimeDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernTimeDimensionRow.vue?vue&type=style&index=0&id=1b5405e2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1b5405e2\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernTimeDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernTimeDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernTimeDimensionsTab.vue?vue&type=template&id=294fc3d6&\"\nimport script from \"./ModernTimeDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernTimeDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeDimensionsTab.vue?vue&type=template&id=26ea69a0&\"\nimport script from \"./TimeDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-time-studies-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.exportStudyTree}},[_vm._v(\" Export tree \")]),_c('PrimaryButton',{class:_vm.respecClassObject,on:{\"click\":function($event){_vm.respec = !_vm.respec}}},[_vm._v(\" Respec Time Studies on next Eternity \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"onclick\":\"Modal.studyString.show({ id: -1 })\"}},[_vm._v(\" Import tree \")])],1),_c('div',{staticClass:\"l-time-study-tree l-time-studies-tab__tree\",style:(_vm.treeStyleObject)},[_vm._l((_vm.studies),function(setup){return _c(_vm.studyComponent(setup.study),{key:setup.study.type.toString() + setup.study.id.toString(),tag:\"component\",attrs:{\"setup\":setup}})}),_c('SecretTimeStudy',{attrs:{\"setup\":_vm.layout.secretStudy}}),(_vm.isEnslaved)?_c('EnslavedTimeStudy',{attrs:{\"setup\":_vm.layout.enslavedStudy}}):_vm._e(),_c('svg',{staticClass:\"l-time-study-connection\",style:(_vm.treeStyleObject)},[_vm._l((_vm.connections),function(setup,index){return _c('TimeStudyConnection',{key:'connection' + index,attrs:{\"setup\":setup}})}),_c('HiddenTimeStudyConnection',{attrs:{\"setup\":_vm.layout.secretStudyConnection}}),(_vm.isEnslaved)?_c('HiddenTimeStudyConnection',{attrs:{\"setup\":_vm.layout.enslavedStudyConnection,\"is-enslaved\":_vm.isEnslaved}}):_vm._e()],2)],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isOverridden)?_c('line',{class:_vm.classObject,attrs:{\"x1\":_vm.percents(_vm.setup.x1),\"y1\":_vm.percents(_vm.setup.y1),\"x2\":_vm.percents(_vm.setup.x2),\"y2\":_vm.percents(_vm.setup.y2)}}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudyConnection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudyConnection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeStudyConnection.vue?vue&type=template&id=0947fa33&scoped=true&\"\nimport script from \"./TimeStudyConnection.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeStudyConnection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0947fa33\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:[_vm.classObject, _vm.studyClass, _vm.eternityChallengeAnim],style:(_vm.styleObject),on:{\"click\":[function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.handleClick.apply(null, arguments)},function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.shiftClick.apply(null, arguments)}]}},[_vm._t(\"default\"),(_vm.showDefaultCostDisplay)?_c('CostDisplay',{attrs:{\"br\":\"\",\"config\":_vm.config,\"name\":\"Time Theorem\"}}):(!_vm.doomedRealityStudy)?_c('div',[_vm._v(\" Cost: \"+_vm._s(_vm.customCostStr)+\" \")]):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudyButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudyButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeStudyButton.vue?vue&type=template&id=003463ea&scoped=true&\"\nimport script from \"./TimeStudyButton.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeStudyButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"003463ea\",\n null\n \n)\n\nexport default component.exports","import { TimeStudyConnectionSetup } from \"./TimeStudyConnection\";\r\nimport { TimeStudySetup } from \"./TimeStudyButton\";\r\n\r\nclass TimeStudyRow {\r\n constructor(layout, items, isWide) {\r\n this.layout = layout;\r\n this.items = items;\r\n this.isWide = isWide;\r\n }\r\n\r\n get width() {\r\n const itemCount = this.items.length;\r\n const layout = this.layout;\r\n return itemCount * layout.itemWidth + (itemCount - 1) * layout.spacing;\r\n }\r\n\r\n itemPosition(column, treeLayout) {\r\n const layout = this.layout;\r\n const treeWidth = treeLayout.width;\r\n const rowLeft = (treeWidth - this.width) / 2;\r\n return rowLeft + column * layout.itemWidth + column * layout.spacing;\r\n }\r\n}\r\n\r\nclass TimeStudyRowLayout {\r\n constructor(props) {\r\n this.itemWidth = props.itemWidth;\r\n this.itemHeight = props.itemHeight;\r\n this.spacing = props.spacing;\r\n }\r\n}\r\n\r\nexport class TimeStudyTreeLayout {\r\n constructor(type, scaling = 1) {\r\n this.spacing = 4 * scaling;\r\n\r\n const normalRowLayout = new TimeStudyRowLayout({\r\n itemWidth: 18 * scaling,\r\n itemHeight: 10 * scaling,\r\n spacing: 3 * scaling\r\n });\r\n\r\n const wideRowLayout = new TimeStudyRowLayout({\r\n itemWidth: 12 * scaling,\r\n itemHeight: 10 * scaling,\r\n spacing: 0.6 * scaling\r\n });\r\n const normalRow = (...items) => new TimeStudyRow(normalRowLayout, items);\r\n const wideRow = (...items) => new TimeStudyRow(wideRowLayout, items, true);\r\n\r\n const TS = id => (TimeStudy(id).isUnlocked ? TimeStudy(id) : null);\r\n const EC = id => TimeStudy.eternityChallenge(id);\r\n\r\n /**\r\n * @type {TimeStudyRow[]}\r\n */\r\n /* eslint-disable no-multi-spaces, space-in-parens, func-call-spacing */\r\n \r\n this.rows = [\r\n normalRow( null, TS(11), null ),\r\n normalRow( TS(21), TS(22) )\r\n ];\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( TS(305), TS(31), TS(32), TS(33) )\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( null, TS(31), TS(32), TS(33) )\r\n );\r\n }\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_62 || type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_62_181 ||\r\n type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_TRIAD_STUDIES || type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES) {\r\n this.rows.push(\r\n normalRow( null, TS(41), TS(42), EC(5) ),\r\n normalRow( TS(51) )\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( TS(41), TS(42) ),\r\n normalRow( null, TS(51), EC(5) )\r\n );\r\n }\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( TS(306), TS(61), TS(62) )\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( null, TS(61), TS(62) )\r\n );\r\n }\r\n\r\n this.rows.push(\r\n \r\n normalRow( TS(71), TS(72), TS(73) ),\r\n normalRow( TS(81), TS(82), TS(83) ),\r\n normalRow( TS(91), TS(92), TS(93) ),\r\n normalRow( TS(101), TS(102), TS(103) ),\r\n );\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( TS(311), TS(312), TS(313) )\r\n );\r\n }\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( EC(7), TS(111), TS(307) ),\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( EC(7), TS(111), null )\r\n );\r\n }\r\n\r\n this.rows.push(\r\n \r\n normalRow( TS(121), TS(122), TS(123) ),\r\n normalRow( EC(6), TS(131), TS(132), TS(133), EC(8) ),\r\n normalRow( TS(141), TS(142), TS(143) )\r\n );\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( null, TS(321), TS(322), TS(323), EC(4) ),\r\n normalRow( null, EC(9), TS(151), TS(308), null )\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( null, EC(9), TS(151), null, EC(4) )\r\n )\r\n }\r\n\r\n this.rows.push(\r\n normalRow( TS(161), TS(162) )\r\n );\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_181 || type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_62_181 ||\r\n type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_TRIAD_STUDIES || type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES) {\r\n this.rows.push(\r\n normalRow( TS(309), TS(171), EC(2) ),\r\n normalRow( EC(1), TS(181), EC(3) )\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( TS(171) ),\r\n normalRow( EC(1), EC(2), EC(3) ),\r\n normalRow( TS(181) )\r\n );\r\n }\r\n\r\n this.rows.push(\r\n normalRow( EC(10) ),\r\n normalRow( TS(191), TS(192), TS(193) )\r\n );\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( TS(201), TS(310) ),\r\n );\r\n } else {\r\n this.rows.push(\r\n normalRow( TS(201) ),\r\n )\r\n }\r\n\r\n this.rows.push(\r\n normalRow( TS(211), TS(212), TS(213), TS(214) ),\r\n wideRow (TS(221), TS(222), TS(223), TS(224), TS(225), TS(226), TS(227), TS(228))\r\n );\r\n\r\n if (type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_TRIAD_STUDIES || type === STUDY_TREE_LAYOUT_TYPE.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES && !Pelle.isDoomed) {\r\n this.rows.push(\r\n normalRow( TS(301), TS(302), TS(303), TS(304) )\r\n );\r\n }\r\n\r\n this.rows.push(\r\n normalRow( TS(231), TS(232), TS(233), TS(234) ),\r\n normalRow( EC(11), EC(12) ),\r\n normalRow( TimeStudy.dilation ),\r\n normalRow( TimeStudy.timeDimension(5), TimeStudy.timeDimension(6) ),\r\n normalRow( TimeStudy.timeDimension(7), TimeStudy.timeDimension(8) ),\r\n normalRow( TimeStudy.reality )\r\n );\r\n if(Ra.unlocks.unlockMyriads.isUnlocked&&!Pelle.isDoomed){\r\n this.rows.push(\r\n normalRow(TS(401), TS(402), TS(403)),\r\n normalRow(TS(411), TS(412), TS(413))\r\n );\r\n }\r\n /* eslint-enable no-multi-spaces, space-in-parens, func-call-spacing */\r\n\r\n /**\r\n * @type {TimeStudySetup[]}\r\n */\r\n this.studies = [];\r\n for (let rowIndex = 0; rowIndex < this.rows.length; rowIndex++) {\r\n const row = this.rows[rowIndex];\r\n for (let columnIndex = 0; columnIndex < row.items.length; columnIndex++) {\r\n const study = row.items[columnIndex];\r\n if (study === null) continue;\r\n const setup = new TimeStudySetup({\r\n study,\r\n row: rowIndex,\r\n column: columnIndex\r\n });\r\n if (row.isWide) {\r\n setup.isSmall = true;\r\n }\r\n this.studies.push(setup);\r\n }\r\n }\r\n const secretStudy = {};\r\n this.secretStudy = new TimeStudySetup({\r\n study: secretStudy,\r\n row: 0,\r\n column: 0\r\n });\r\n\r\n const enslavedStudy = {};\r\n this.enslavedStudy = new TimeStudySetup({\r\n study: enslavedStudy,\r\n row: 0,\r\n column: 2\r\n });\r\n\r\n /**\r\n * @type {TimeStudyConnectionSetup[]}\r\n */\r\n this.connections = TimeStudy.allConnections\r\n .map(c => new TimeStudyConnectionSetup(c));\r\n this.secretStudyConnection = new TimeStudyConnectionSetup(\r\n new TimeStudyConnection(TS(11), secretStudy)\r\n );\r\n this.enslavedStudyConnection = new TimeStudyConnectionSetup(\r\n new TimeStudyConnection(TS(11), enslavedStudy)\r\n );\r\n\r\n this.width = this.rows.map(row => row.width).max();\r\n const heightNoSpacing = this.rows.map(r => r.layout.itemHeight).sum();\r\n this.height = heightNoSpacing + (this.rows.length - 1) * this.spacing;\r\n\r\n for (const study of this.studies) {\r\n study.setPosition(this);\r\n }\r\n this.secretStudy.setPosition(this);\r\n this.enslavedStudy.setPosition(this);\r\n\r\n for (const connection of this.connections) {\r\n connection.setPosition(this.studies, this.width, this.height);\r\n }\r\n this.secretStudyConnection.setPosition(this.studies.concat(this.secretStudy), this.width, this.height);\r\n this.enslavedStudyConnection.setPosition(this.studies.concat(this.enslavedStudy), this.width, this.height);\r\n }\r\n\r\n itemPosition(row) {\r\n const rows = this.rows.slice(0, row);\r\n const heightNoSpacing = rows.map(r => r.layout.itemHeight).sum();\r\n return heightNoSpacing + rows.length * this.spacing;\r\n }\r\n\r\n static create(type, scaling = 1) {\r\n if (this._instances === undefined) {\r\n this._instances = [];\r\n }\r\n const layout = new TimeStudyTreeLayout(type, scaling);\r\n this._instances[`${type}__${scaling}`] = layout;\r\n return layout;\r\n }\r\n}\r\n\r\nexport const STUDY_TREE_LAYOUT_TYPE = {\r\n NORMAL: 0,\r\n ALTERNATIVE_62: 1,\r\n ALTERNATIVE_181: 2,\r\n ALTERNATIVE_62_181: 3,\r\n ALTERNATIVE_TRIAD_STUDIES: 4,\r\n ALTERNATIVE_SXY_MORE_TRIAD_STUDIES: 5,\r\n get current() {\r\n const alt62 = Perk.bypassEC5Lock.isBought;\r\n const alt181 = Perk.bypassEC1Lock.isBought && Perk.bypassEC2Lock.isBought && Perk.bypassEC3Lock.isBought;\r\n if (Ra.unlocks.unlockHardV.effectOrDefault(0) >= 5) return this.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES;\r\n if (Ra.canBuyTriad) return this.ALTERNATIVE_TRIAD_STUDIES;\r\n if (alt62 && alt181) return this.ALTERNATIVE_62_181;\r\n if (alt62) return this.ALTERNATIVE_62;\r\n if (alt181) return this.ALTERNATIVE_181;\r\n return this.NORMAL;\r\n }\r\n};\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TimeStudyButton',{attrs:{\"setup\":_vm.setup,\"ach-tooltip\":_vm.theoremTimeEstimate,\"special-click\":_vm.clickHandler()}},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.study.config}}),(_vm.showRequirement)?[_c('br'),_c('span',[_vm._v(_vm._s(_vm.requirement))])]:_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DilationTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DilationTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DilationTimeStudy.vue?vue&type=template&id=50134ea4&scoped=true&\"\nimport script from \"./DilationTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./DilationTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"50134ea4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TimeStudyButton',{attrs:{\"setup\":_vm.setup}},[_c('HintText',{staticClass:\"l-hint-text--time-study\",attrs:{\"type\":\"studies\"}},[_vm._v(\" EC\"+_vm._s(_vm.id)+\" \")]),_vm._v(\" Eternity Challenge \"+_vm._s(_vm.id)+\" (\"+_vm._s(_vm.formatInt(_vm.completions))),(_vm.showTotalCompletions)?_c('span',[_vm._v(\"/\"+_vm._s(_vm.formatInt(5)))]):_vm._e(),_vm._v(\") \"),(_vm.hasRequirement)?[_c('br'),_vm._v(\" Requirement: \"),(_vm.needsFirstLinebreak)?_c('br'):_vm._e(),(_vm.config.secondary.path)?_c('span',[_vm._v(\"Use only the \"+_vm._s(_vm.config.secondary.path)+\" path\")]):_c('span',[_vm._v(\" \"+_vm._s(_vm.formatValue(_vm.requirement.current))+\"/\"+_vm._s(_vm.formatValue(_vm.requirement.total))+\" \"),(_vm.needsSecondLinebreak)?_c('br'):_vm._e(),_vm._v(\" \"+_vm._s(_vm.config.secondary.resource)+\" \")])]:_vm._e(),(_vm.isUnlocked && !_vm.isRunning)?_c('span',[_c('br'),_vm._v(\"Double click to start\")]):(_vm.isRunning)?_c('span',[_c('br'),_vm._v(\"Currently Running\")]):_vm._e()],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ECTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ECTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ECTimeStudy.vue?vue&type=template&id=6d8a1d6b&scoped=true&\"\nimport script from \"./ECTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./ECTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d8a1d6b\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{ref:\"study\",class:_vm.classObject,style:(_vm.styleObject),on:{\"click\":_vm.handleClick}},[_c('span',[_vm._v(\" ... you ... have great potential ... \"),_c('br'),_c('br'),_vm._v(\" Cost: \"+_vm._s(_vm.format(-_vm.enslavedTT))+\" Time Theorems \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnslavedTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnslavedTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnslavedTimeStudy.vue?vue&type=template&id=2f83ad0a&scoped=true&\"\nimport script from \"./EnslavedTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./EnslavedTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2f83ad0a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('line',{class:_vm.classObject,attrs:{\"x1\":_vm.percents(_vm.setup.x1),\"y1\":_vm.percents(_vm.setup.y1),\"x2\":_vm.percents(_vm.setup.x2),\"y2\":_vm.percents(_vm.setup.y2)}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenTimeStudyConnection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenTimeStudyConnection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HiddenTimeStudyConnection.vue?vue&type=template&id=34a48f61&scoped=true&\"\nimport script from \"./HiddenTimeStudyConnection.vue?vue&type=script&lang=js&\"\nexport * from \"./HiddenTimeStudyConnection.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"34a48f61\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TimeStudyButton',{attrs:{\"setup\":_vm.setup,\"show-cost\":_vm.showCost,\"show-st-cost\":_vm.showSTCost}},[_c('HintText',{staticClass:\"l-hint-text--time-study\",attrs:{\"type\":\"studies\"}},[_vm._v(\" \"+_vm._s(_vm.hintText)+\" \")]),_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.study.config}}),_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.study.config}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalTimeStudy.vue?vue&type=template&id=539cf4d3&scoped=true&\"\nimport script from \"./NormalTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"539cf4d3\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{ref:\"study\",class:_vm.classObject,style:(_vm.styleObject),on:{\"click\":_vm.handleClick}},[_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_vm._v(\" Unlock a Secret Achievement \"),_c('br'),_c('br'),_vm._v(\" (Double click to hide) \")])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SecretTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SecretTimeStudy.vue?vue&type=template&id=2b14d02f&scoped=true&\"\nimport script from \"./SecretTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./SecretTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2b14d02f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TimeStudyButton',{staticClass:\"o-time-study--triad\",attrs:{\"setup\":_vm.setup,\"show-st-cost\":true}},[_c('HintText',{staticClass:\"l-hint-text--time-study\",attrs:{\"type\":\"studies\"}},[_vm._v(\" \"+_vm._s(_vm.id)+\" Triad \")]),_c('DescriptionDisplay',{attrs:{\"config\":_vm.study.config}}),_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.study.config}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TriadTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TriadTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TriadTimeStudy.vue?vue&type=template&id=5d5be72a&scoped=true&\"\nimport script from \"./TriadTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./TriadTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5d5be72a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TimeStudyButton',{staticClass:\"o-time-study--myriad\",attrs:{\"setup\":_vm.setup,\"show-st-cost\":true}},[_c('HintText',{staticClass:\"l-hint-text--time-study\",attrs:{\"type\":\"studies\"}},[_vm._v(\" \"+_vm._s(_vm.id)+\" Myriad \")]),_c('DescriptionDisplay',{attrs:{\"config\":_vm.study.config}}),_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.study.config}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MyriadTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MyriadTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MyriadTimeStudy.vue?vue&type=template&id=2c22601a&scoped=true&\"\nimport script from \"./MyriadTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./MyriadTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2c22601a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('TimeStudyButton',{staticClass:\"o-time-study--kohler\",attrs:{\"setup\":_vm.setup,\"show-st-cost\":true}},[_c('HintText',{staticClass:\"l-hint-text--time-study\",attrs:{\"type\":\"studies\"}},[_vm._v(\" \"+_vm._s(_vm.id)+\" \")]),_c('DescriptionDisplay',{attrs:{\"config\":_vm.study.config}}),_c('EffectDisplay',{attrs:{\"br\":\"\",\"config\":_vm.study.config}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./KohlerTimeStudy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./KohlerTimeStudy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./KohlerTimeStudy.vue?vue&type=template&id=cc3e5f08&scoped=true&\"\nimport script from \"./KohlerTimeStudy.vue?vue&type=script&lang=js&\"\nexport * from \"./KohlerTimeStudy.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cc3e5f08\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudiesTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeStudiesTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TimeStudiesTab.vue?vue&type=template&id=3dd5056d&scoped=true&\"\nimport script from \"./TimeStudiesTab.vue?vue&type=script&lang=js&\"\nexport * from \"./TimeStudiesTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3dd5056d\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-v-celestial-tab\"},[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"v\"}}),(!_vm.mainUnlock)?_c('div',{staticClass:\"c-v-info-text\"},[_vm._l((_vm.mainUnlockDB),function(req){return _c('v-unlock-requirement',{key:req.name,attrs:{\"db-entry\":req}})}),_c('div',{staticClass:\"l-v-milestones-grid__row\"},[_c('div',{class:_vm.celestialUnlockClassObject,on:{\"click\":_vm.unlockCelestial}},[_c('p',[_vm._v(_vm._s(_vm.vUnlock.description))]),_c('p',[_vm._v(_vm._s(_vm.vUnlock.rewardText))])])])],2):_c('div',[(_vm.isFlipped && !_vm.isSuperFlipped)?_c('div',{staticClass:\"c-v-info-text\"},[(_vm.flip === _vm.V_FLIP.HARD)?_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":function($event){return _vm.setFlip(_vm.V_FLIP.NORMAL)}}},[_vm._v(\" Hide Hard V \")]):_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":function($event){return _vm.setFlip(_vm.V_FLIP.HARD)}}},[_vm._v(\" Show Hard V \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option l-cursed-glyph-creation\",on:{\"click\":_vm.createCursedGlyph}},[_vm._v(\" Create a Cursed Glyph \")]),_c('br'),_vm._v(\" Cursed Glyphs can be created here or in the Effarig tab. \"),_c('br'),_vm._v(\" Cursed Glyphs count as \"+_vm._s(_vm.formatInt(-3))+\" Glyphs for the purposes of all requirements related to Glyph count. \"),_c('br'),(!_vm.isDoomed)?_c('span',[_vm._v(\"The Black Hole can now be used to slow down time if they are both permanent.\")]):_vm._e(),_c('br'),_c('br'),_vm._v(\" Each Hard V-Achievement counts as two V-Achievements and will award \"+_vm._s(_vm.formatInt(2))+\" Space Theorems instead of \"+_vm._s(_vm.formatInt(1))+\". \"),_c('br'),_vm._v(\" Goal reduction is significantly more expensive for Hard V-Achievements. \")],1):_vm._e(),(_vm.isSuperFlipped)?_c('div',{staticClass:\"c-v-info-text\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",class:[_vm.flip == _vm.V_FLIP.NORMAL ? 'l-selected-tab' : ''],on:{\"click\":function($event){return _vm.setFlip(_vm.V_FLIP.NORMAL)}}},[_vm._v(\" Show Normal V \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",class:[_vm.flip == _vm.V_FLIP.HARD ? 'l-selected-tab' : ''],on:{\"click\":function($event){return _vm.setFlip(_vm.V_FLIP.HARD)}}},[_vm._v(\" Show Hard V \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",class:[_vm.flip == _vm.V_FLIP.SUPER ? 'l-selected-tab' : ''],on:{\"click\":function($event){return _vm.setFlip(_vm.V_FLIP.SUPER)}}},[_vm._v(\" Show Superhard V \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option l-cursed-glyph-creation\",on:{\"click\":_vm.createCursedGlyph}},[_vm._v(\" Create a Cursed Glyph \")]),_c('br'),_vm._v(\" Cursed Glyphs can be created here or in the Effarig tab. \"),_c('br'),_vm._v(\" Cursed Glyphs count as \"+_vm._s(_vm.formatInt(-3))+\" Glyphs for the purposes of all requirements related to Glyph count. \"),_c('br'),(!_vm.isDoomed)?_c('span',[_vm._v(\"The Black Hole can now be used to slow down time if they are both permanent.\")]):_vm._e(),_c('br'),_c('br'),_vm._v(\" Each Hard V-Achievement counts as two V-Achievements and will award \"+_vm._s(_vm.formatInt(2))+\" Space Theorems instead of \"+_vm._s(_vm.formatInt(1))+\". \"),_c('br'),_vm._v(\" Each Superhard V-Achievement counts as five V-Achievements and will award \"+_vm._s(_vm.formatInt(5))+\" Space Theorems instead of \"+_vm._s(_vm.formatInt(1))+\". \"),_c('br'),_vm._v(\" Goal reduction is significantly more expensive for Hard V-Achievements and Superhard V-Achievements. \")],1):_vm._e(),(_vm.showReduction)?_c('div',{staticClass:\"c-v-info-text\"},[_vm._v(\" You have \"+_vm._s(_vm.quantify(\"Perk Point\", _vm.pp, 2, 0))+\". \")]):_vm._e(),_c('div',{staticClass:\"l-v-unlocks-container\"},_vm._l((_vm.hexGrid),function(hex,hexId){return _c('li',{key:hexId + '-v-hex',style:([hex.isRunButton||hex.isSuperRunButton ? {zIndex: 1} : {zIndex: 0}])},[(hex.config)?_c('div',{staticClass:\"l-v-hexagon c-v-unlock\",style:('background-color: ' + _vm.hexColor(hex))},[_c('p',{staticClass:\"o-v-unlock-name\"},[(hex.canBeReduced && _vm.showReduction)?_c('br'):_vm._e(),_vm._v(_vm._s(hex.config.name)+\" \")]),_c('p',{staticClass:\"o-v-unlock-desc\",domProps:{\"innerHTML\":_vm._s(hex.formattedDescription)}}),(_vm.has(_vm.runMilestones[0][0]) && hex.isReduced)?_c('p',{staticClass:\"o-v-unlock-goal-reduction\"},[_vm._v(\" Goal has been \"+_vm._s(_vm.mode(hex))+\" by \"+_vm._s(_vm.reductionValue(hex))+\" \")]):_vm._e(),_c('p',{staticClass:\"o-v-unlock-amount\"},[_vm._v(\" \"+_vm._s(_vm.formatInt(hex.completions))+\"/\"+_vm._s(_vm.formatInt(hex.config.values.length))+\" done \")]),(_vm.showRecord(hex))?_c('div',[_c('p',{staticClass:\"o-v-unlock-record\"},[_vm._v(\" Best: \"+_vm._s(hex.config.formatRecord(_vm.runRecords[hex.id]))+\" \")]),_c('p',[_c('GlyphSetPreview',{attrs:{\"glyphs\":_vm.runGlyphs[hex.id],\"text\":hex.config.name,\"text-hidden\":true}})],1),(hex.canBeReduced && _vm.showReduction)?_c('div',[_c('div',{staticClass:\"l-v-goal-reduction-spacer\"}),_c('button',{staticClass:\"o-primary-btn l-v-reduction\",class:{ 'o-primary-btn--disabled': !hex.canBeReduced || _vm.pp < hex.reductionCost },attrs:{\"ach-tooltip\":_vm.reductionTooltip(hex)},on:{\"click\":function($event){return _vm.reduceGoals(hex)}}},[_c('i',{staticClass:\"fas fa-angle-double-down\"})])]):_vm._e()]):_vm._e()]):(hex.isRunButton)?_c('div',{class:_vm.runButtonClassObject,on:{\"click\":function($event){return _vm.startRun()}}},[_c('b',{staticClass:\"o-v-start-text\",class:{ 'o-pelle-disabled': _vm.isDoomed }},[(_vm.isRunning)?_c('span',[_vm._v(\"You are in \")]):_c('span',[_vm._v(\"Start \")]),_vm._v(\" V's Reality. \")]),_c('br'),_c('div',{style:({ 'font-size': _vm.hasAlchemy ? '1.2rem' : '' })},[_vm._v(\" \"+_vm._s(_vm.runDescription)+\" \")]),_c('div',{staticClass:\"c-v-run-button__line c-v-run-button__line--1\"}),_c('div',{staticClass:\"c-v-run-button__line c-v-run-button__line--2\"}),_c('div',{staticClass:\"c-v-run-button__line c-v-run-button__line--3\"})]):(hex.isSuperRunButton)?_c('div',{class:_vm.superRunButtonClassObject,on:{\"click\":function($event){return _vm.startSuperRun()}}},[_c('b',{staticClass:\"o-v-start-text\",class:{ 'o-pelle-disabled': _vm.isDoomed }},[(_vm.isSuperRunning)?_c('span',[_vm._v(\"You are in \")]):_c('span',[_vm._v(\"Start \")]),_vm._v(\" V's Superhard Reality. \")]),_c('br'),_c('div',{style:({ 'font-size': _vm.hasAlchemy ? '1.2rem' : '' })},[_vm._v(\" \"+_vm._s(_vm.runSuperDescription)+\" \")]),_c('div',{staticClass:\"c-v-run-button__line c-v-run-button__line--1\"}),_c('div',{staticClass:\"c-v-run-button__line c-v-run-button__line--2\"}),_c('div',{staticClass:\"c-v-run-button__line c-v-run-button__line--3\"})]):_c('div',[_c('div',{staticClass:\"l-v-hexagon l-placeholder-invisible\"})])])}),0),_c('div',{staticClass:\"c-v-info-text\"},[_vm._v(\" V-Achievements can only be completed within V's Reality, but are permanent and do not reset upon leaving and re-entering the Reality. \")]),_c('div',{staticClass:\"c-v-info-text\"},[_vm._v(\" You have \"+_vm._s(_vm.formatInt(_vm.totalUnlocks))+\" V-Achievements done. \"),(!_vm.isDoomed)?_c('span',[_vm._v(\" You gain \"+_vm._s(_vm.formatInt(1))+\" Space Theorem for each completion, allowing you to purchase Time Studies which are normally locked. \"),_c('br'),(_vm.MU14bought)?_c('p',[_vm._v(\"V-Achievement now have ×3 multiplier due to MU14.\")]):_vm._e(),_vm._v(\" Space Theorems can also be used as a Currency in the Automator. \")]):_vm._e()]),_c('br'),_c('div',{staticClass:\"l-v-milestones-grid\"},_vm._l((_vm.runMilestones),function(row,rowId){return _c('div',{key:rowId + '-v-ms-row',staticClass:\"l-v-milestones-grid__row\"},_vm._l((row),function(milestone,colId){return _c('div',{key:colId + rowId*10 + '-v-ms',staticClass:\"o-v-milestone\",class:{'o-v-milestone--unlocked':\n _vm.has(milestone)}},[_c('div',{class:{ 'o-pelle-disabled': _vm.isDoomed }},[_c('p',[_vm._v(_vm._s(milestone.description))]),_c('p',[_vm._v(\"Reward: \"+_vm._s(milestone.rewardText))]),(milestone.formattedEffect)?_c('p',[_vm._v(\" Currently: \"),_c('b',[_vm._v(_vm._s(milestone.formattedEffect))])]):_vm._e()])])}),0)}),0)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-v-unlock-bar\",style:(_vm.textStyle)},[_c('div',{staticClass:\"c-v-unlock-bar__progress\",style:(_vm.barProgressStyle)}),_vm._v(\" \"+_vm._s(_vm.dbEntry.format(_vm.resource))+\" / \"+_vm._s(_vm.dbEntry.format(_vm.dbEntry.requirement))+\" \"+_vm._s(_vm.dbEntry.name)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VUnlockRequirement.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VUnlockRequirement.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VUnlockRequirement.vue?vue&type=template&id=7da23d3a&\"\nimport script from \"./VUnlockRequirement.vue?vue&type=script&lang=js&\"\nexport * from \"./VUnlockRequirement.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VTab.vue?vue&type=template&id=0d267545&scoped=true&\"\nimport script from \"./VTab.vue?vue&type=script&lang=js&\"\nexport * from \"./VTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VTab.vue?vue&type=style&index=0&id=0d267545&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0d267545\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-remains-amount\"},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-remains-amount__accent\"},[_vm._v(_vm._s(_vm.format(_vm.mendingPoints, 2)))]),_vm._v(\" \"+_vm._s(_vm.pluralize(\"Multiversal Remain\", _vm.mendingPoints ))+\". \"),_c('br'),_c('br'),_c('div',{staticClass:\"c-mending-upgrade-infotext\"},[_vm._v(\"Every completed row of purchased upgrades multiplies Multiversal Remain gain by 2.\")]),_c('div',{staticClass:\"c-mending-upgrade-infotext\"},[_vm._v(\"Upgrades are numbered from left to right, top to bottom. For example \\\"Deus Propitius\\\", will be refered to as Mending Upgrade 10 (or MU10)\")]),_c('div',{staticClass:\"l-mending-upgrade-grid\"},_vm._l((4),function(row){return _c('div',{key:row,staticClass:\"l-mending-upgrade-grid__row\"},_vm._l((5),function(column){return _c('MendingUpgradeButton',{key:_vm.id(row, column),staticClass:\"l-mending-upgrade-grid__cell\",attrs:{\"upgrade\":_vm.upgrades[_vm.id(row, column)]}})}),1)}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-mending-upgrade-btn c-mending-upgrade-btn\",class:_vm.classObject,on:{\"click\":[function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.toggleLock(_vm.upgrade)},function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.upgrade.purchase()}]}},[_c('HintText',{staticClass:\"l-hint-text--mending-upgrade c-hint-text--mending-upgrade\",attrs:{\"type\":\"mendingUpgrades\"}},[_vm._v(\" \"+_vm._s(_vm.config.name)+\" \")]),_c('span',[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),((_vm.$viewModel.shiftDown === _vm.isAvailableForPurchase) && !_vm.isRebuyable)?[_c('br'),_c('DescriptionDisplay',{staticClass:\"c-mending-upgrade-btn__requirement\",attrs:{\"config\":_vm.requirementConfig,\"label\":\"Requirement:\"}})]:[_c('EffectDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\"}}),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\",\"name\":\"Multiversal Remain\"}}):_vm._e()]],2)],1),(_vm.canBeLocked)?_c('div',{staticClass:\"o-requirement-lock\"},[(_vm.hasRequirementLock)?_c('i',{staticClass:\"fas fa-lock\"}):(_vm.canLock)?_c('i',{staticClass:\"fas fa-lock-open\"}):_vm._e()]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingUpgradeButton.vue?vue&type=template&id=009e3f9f&scoped=true&\"\nimport script from \"./MendingUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"009e3f9f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal__inner\"},[_c('div',{staticClass:\"c-modal__header\"},[_c('ModalCloseButton',{on:{\"click\":_vm.closeModal}}),(_vm.$slots.header)?_c('span',{staticClass:\"c-modal__title\"},[_vm._t(\"header\")],2):_vm._e()],1),_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('PrimaryButton',{staticClass:\"o-primary-btn--modal-close c-modal__close-btn\",on:{\"click\":_vm.emitClick}},[_vm._v(\" × \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalCloseButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalCloseButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalCloseButton.vue?vue&type=template&id=09b34908&\"\nimport script from \"./ModalCloseButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalCloseButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalWrapper.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalWrapper.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalWrapper.vue?vue&type=template&id=0ec9a581&scoped=true&\"\nimport script from \"./ModalWrapper.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalWrapper.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModalWrapper.vue?vue&type=style&index=0&id=0ec9a581&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0ec9a581\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingUpgrades.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingUpgrades.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingUpgrades.vue?vue&type=template&id=3bb497cc&scoped=true&\"\nimport script from \"./MendingUpgrades.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingUpgrades.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MendingUpgrades.vue?vue&type=style&index=0&id=3bb497cc&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3bb497cc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-mending-milestone-grid\"},[_c('div',[_vm._v(\"You have Mended the Multiverse \"+_vm._s(_vm.quantify(\"time\", _vm.mendCount, 3))+\".\")]),_vm._l((_vm.rows),function(row){return _c('div',{key:row,staticClass:\"l-mends-milestone-grid__row\"},[_c('MendingMilestoneButton',{key:row,staticClass:\"l-mending-milestone-grid__cell\",attrs:{\"get-milestone\":_vm.getMilestone(row)}})],1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.config.invisible)?_c('div',{staticClass:\"l-mending-milestone\"},[_c('span',{staticClass:\"o-mending-milestone__goal\"},[_vm._v(\" \"+_vm._s(_vm.quantifyInt(\"Mend\", _vm.mends))+\": \")]),_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.activeCondition),expression:\"activeCondition\"}],class:_vm.rewardClassObject},[_c('span',[_vm._v(\" \"+_vm._s(_vm.reward)+\" \")])])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingMilestoneButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingMilestoneButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingMilestoneButton.vue?vue&type=template&id=2dc5a23e&scoped=true&\"\nimport script from \"./MendingMilestoneButton.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingMilestoneButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MendingMilestoneButton.vue?vue&type=style&index=0&id=2dc5a23e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2dc5a23e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingMilestones.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MendingMilestones.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MendingMilestones.vue?vue&type=template&id=362d0934&scoped=true&\"\nimport script from \"./MendingMilestones.vue?vue&type=script&lang=js&\"\nexport * from \"./MendingMilestones.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"362d0934\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-warp-tab\"},[(_vm.warped)?_c('div',[_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],class:_vm.classObject,on:{\"click\":_vm.clicked}},[_vm._v(\" REALITY IS WARPED \")])]):(_vm.canWarp)?_c('div',[_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],class:_vm.classObject,on:{\"click\":_vm.clicked}},[_vm._v(\" WARP REALITY \")])]):_c('div',{staticClass:\"warp-unlock-requirements\"},[_vm._v(\" You must have all Mending Upgrades Purchased, \"+_vm._s(_vm.formatInt(1e7))+\" Multiversal Remains, and 240 total Ra Memory Levels to Warp Reality. \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.format(this.MVRoR))+\" / \"+_vm._s(_vm.format(1e7))+\" Multiversal Remains \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.formatInt(this.RaToR))+\" / \"+_vm._s(_vm.formatInt(240))+\" Ra Memory Levels \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.formatInt(this.totalUpg))+\" / \"+_vm._s(_vm.formatInt(16))+\" Mending Upgrades \")]),(_vm.warped)?_c('div',[_c('div',{staticClass:\"c-mending-upgrade-infotext\"},[_vm._v(\" Stripped Upgrades (or ones that cost 1e300 MvR) are not yet implemented. \"),_c('br'),_vm._v(\" You can shift-click upgrades with \"),_c('i',{staticClass:\"fas fa-lock-open\"}),_vm._v(\" to make the game prevent you from doing anything this Mend which would cause you to fail their unlock condition. \"),_c('span',{attrs:{\"ach-tooltip\":_vm.lockTooltip}},[_c('i',{staticClass:\"fas fa-question-circle\"})]),_c('br')]),_vm._l((4),function(row){return _c('div',{key:row,staticClass:\"l-mending-upgrade-grid__row\"},_vm._l((3),function(column){return _c('WarpUpgradeButton',{key:_vm.id(row, column),attrs:{\"upgrade\":_vm.upgrades[_vm.id(row, column)]}})}),1)})],2):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.tooltip),expression:\"tooltip\"}],class:_vm.classObject,on:{\"click\":_vm.clicked}},[_vm._v(\" \"+_vm._s(_vm.text)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpRealityButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpRealityButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./WarpRealityButton.vue?vue&type=template&id=9a4b8a7c&scoped=true&\"\nimport script from \"./WarpRealityButton.vue?vue&type=script&lang=js&\"\nexport * from \"./WarpRealityButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9a4b8a7c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-mending-upgrade-btn c-mending-upgrade-btn\",class:_vm.classObject,on:{\"click\":[function($event){if(!$event.shiftKey){ return null; }if($event.ctrlKey||$event.altKey||$event.metaKey){ return null; }return _vm.toggleLock(_vm.upgrade)},function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.upgrade.purchase()}]}},[_c('HintText',{staticClass:\"l-hint-text--mending-upgrade c-hint-text--mending-upgrade\",attrs:{\"type\":\"corruptionUpgrades\"}},[_vm._v(\" \"+_vm._s(_vm.config.name)+\" \")]),_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),((_vm.$viewModel.shiftDown === _vm.isAvailableForPurchase) && !_vm.isRebuyable)?[_c('br'),_c('DescriptionDisplay',{staticClass:\"c-mending-upgrade-btn__requirement\",attrs:{\"config\":_vm.requirementConfig,\"label\":\"Requirement:\"}})]:[_c('EffectDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\"}}),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\",\"name\":\"Multiversal Remain\"}}):_vm._e()]],2)],1),(_vm.canBeLocked)?_c('div',{staticClass:\"o-requirement-lock\"},[(_vm.hasRequirementLock)?_c('i',{staticClass:\"fas fa-lock\"}):(_vm.canLock)?_c('i',{staticClass:\"fas fa-lock-open\"}):_vm._e()]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./WarpUpgradeButton.vue?vue&type=template&id=100ceb4f&scoped=true&\"\nimport script from \"./WarpUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./WarpUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"100ceb4f\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpReality.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpReality.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./WarpReality.vue?vue&type=template&id=6d9af666&scoped=true&\"\nimport script from \"./WarpReality.vue?vue&type=script&lang=js&\"\nexport * from \"./WarpReality.vue?vue&type=script&lang=js&\"\nimport style0 from \"./WarpReality.vue?vue&type=style&index=0&id=6d9af666&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6d9af666\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"kohler-celestial-tab\"},[_c('h1',[_vm._v(\"Coming in 5 Hours(tm)\")]),_c('span',[_vm._v(\" Actually I want to add a cool progress system so if you see anything mess here just ignore--sxy \")]),_c('div',{staticClass:\"c-kohler-progressbar\"},[_c('div',{staticClass:\"c-kohler-progressbar-inner c-kohler-progressbar-inner--light\",style:({ width: '100%'})}),_c('div',{staticClass:\"c-kohler-progressbar-inner\",style:({ width: _vm.kohlerProgress + '%'})}),_vm._l((_vm.unlockInfos),function(unlockInfo){return _c('CustomizeableTooltip',{key:unlockInfo.id,attrs:{\"content-class\":\"c-kohler-progressunlock-description--hover-area\",\"left\":_vm.unlockDescriptionWidth(unlockInfo),\"bottom\":_vm.unlockDescriptionBottom(unlockInfo),\"mode\":\"bottom\",\"show\":true,\"tooltip-arrow-style\":_vm.unlockInfoTooltipArrowStyle,\"tooltip-class\":_vm.unlockInfoTooltipClass(unlockInfo)},scopedSlots:_vm._u([{key:\"tooltipContent\",fn:function(){return [_c('b',[_vm._v(\" \"+_vm._s(unlockInfo.description)+\" \")])]},proxy:true}],null,true)})})],2),(this.unlocked)?_c('div',[_c('CelestialQuoteHistory',{attrs:{\"celestial\":\"kohler\"}})],1):_vm._e(),(this.unlocked)?_c('div',{staticClass:\"l-mechanics-container\"},[_c('div',[_c('div',{staticClass:\"l-kohler-mechanic-container\"},[_c('div',{staticClass:\"c-kohler-unlock c-kohler-run-button\"},[_c('span',[_vm._v(\" Enter Kohler's Realm. \")]),_c('div',{class:_vm.runButtonClassObject,on:{\"click\":function($event){return _vm.startRun()}}},[_c('i',{staticClass:\"fa-solid fa-staff-snake\"})]),_vm._v(\" \"+_vm._s(_vm.runDescription)+\" \")])])])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./KohlersRealm.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./KohlersRealm.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./KohlersRealm.vue?vue&type=template&id=0ef78654&scoped=true&\"\nimport script from \"./KohlersRealm.vue?vue&type=script&lang=js&\"\nexport * from \"./KohlersRealm.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0ef78654\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-corrupt-celestial-tab\"},[_c('div',{attrs:{\"text-left\":\"\"}},[_vm._v(\" You have \"),_c('span',{staticClass:\"c-fragments-amount__accent\"},[_vm._v(_vm._s(_vm.formatInt(_vm.corruptedFrags, 2)))]),_vm._v(\" Hostile Fragments. \")]),_c('br'),_c('div',{staticClass:\"l-mechanics-container\"},[_c('div',{staticClass:\"l-corrupt-mechanic-container\"},[_c('div',{staticClass:\"c-corrupt-unlock c-corrupt-run-button\"},[(!_vm.isRunning && !_vm.nextCorrupted && !_vm.corruptionsZeroCheck())?_c('span',[_vm._v(\" Make Next Mend Hostile \")]):(!_vm.isRunning && !_vm.nextCorrupted && _vm.corruptionsZeroCheck())?_c('span',[_vm._v(\" You can't make full zero Hostile \")]):(!_vm.isRunning && !_vm.corruptionsZeroCheck())?_c('span',[_vm._v(\" Next Mend will be Hostile, Mend to apply Hostilities \")]):(!_vm.isRunning && _vm.corruptionsZeroCheck())?_c('span',[_vm._v(\" Next Mend shall be Hostile, but cannot be all zero \")]):_c('span',[_vm._v(\" Exit Hostile Mend \")]),_c('div',{class:_vm.runButtonClassObject,on:{\"click\":function($event){_vm.startRun();_vm.update()}}},[_c('i',{staticClass:\"fa-solid fa-biohazard\"})]),_vm._v(\" \"+_vm._s(_vm.runDescription)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.bonusInfo)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.rewardInfo)+\" \"),_c('br'),_c('br'),_c('div',[(_vm.recordScore > 0)?_c('span',[_vm._v(\" Your record score is \"+_vm._s(_vm.format(_vm.recordScore, 2))+\", achieved with \"+_vm._s(_vm.corruptionSet[0])+\"/\"+_vm._s(_vm.corruptionSet[1])+\"/\"+_vm._s(_vm.corruptionSet[2])+\"/\"+_vm._s(_vm.corruptionSet[3])+\"/\"+_vm._s(_vm.corruptionSet[4])+\"/\"+_vm._s(_vm.corruptionSet[5])+\"/\"+_vm._s(_vm.corruptionSet[6])+\"/\"+_vm._s(_vm.corruptionSet[7])+\"/\"+_vm._s(_vm.corruptionSet[8])+\"/\"+_vm._s(_vm.corruptionSet[9])+\" \")]):_c('span',[_vm._v(\" You have not mended in a hostile multiverse yet. \")])])])]),_c('div',[_vm._v(\" Prestige Limits: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[0],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(0, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" IP, EP, and RM gain by ^\"+_vm._s(_vm.localPenalties.prestigeLimits[this.corruptions[0]])+\". \"),_c('br'),_c('br'),_vm._v(\" Dimensional Limitations: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[1],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(1, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" AD, ID, and TD multipliers ^\"+_vm._s(_vm.format(_vm.dimLimNerf ? _vm.localPenalties.dimLimits.postNerf[[this.corruptions[1]]] : _vm.localPenalties.dimLimits.preNerf[[this.corruptions[1]]], 2, 3))+\" \"),_c('br'),_c('br'),_vm._v(\" Time Compression: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[2],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(2, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Gamespeed ^\"+_vm._s(_vm.localPenalties.timeCompression.power[this.corruptions[2]])+\" and then /\"+_vm._s(_vm.timeCompMult)+\" \"),_c('br'),_c('br'),_vm._v(\" Galactic Weakness: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[3],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(3, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Galaxy Scaling ^\"+_vm._s(_vm.localPenalties.galWeak.scaling[this.corruptions[3]])+\" and power \"+_vm._s(_vm.formatX(_vm.localPenalties.galWeak.strength[this.corruptions[3]], 1, 2))+\" \"),_c('br'),_c('br'),_vm._v(\" Complex Glyphs: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[4],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(4, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Glyph Level ^\"+_vm._s(_vm.localPenalties.compGlyphs.level[this.corruptions[4]])+\" and then \"+_vm._s(_vm.formatX(_vm.localPenalties.compGlyphs.level[this.corruptions[4]], 1, 2))+\". \"),_c('br'),_vm._v(\" Glyph Rarity ^\"+_vm._s(_vm.localPenalties.compGlyphs.rarity[this.corruptions[4]])+\" and then \"+_vm._s(_vm.formatX(_vm.localPenalties.compGlyphs.rarity[this.corruptions[4]], 1, 2))+\". \"),_c('br'),_c('br'),_vm._v(\" Tick Extension: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[5],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(5, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Tickspeed ^\"+_vm._s(_vm.formatInt(1))+\"/\"+_vm._s(_vm.format(_vm.localPenalties.tickExtension[this.corruptions[5]], 2, 1))+\". \"),_c('br'),_vm._v(\" Time Shard Gain /\"+_vm._s(_vm.format(_vm.localPenalties.tickExtension[this.corruptions[5]], 2, 1))+\". \"),_c('br'),_c('br'),_vm._v(\" Atomic Dilution: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[6],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(6, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Antimatter exponent ^\"+_vm._s(_vm.format(_vm.localPenalties.atomDilution[this.corruptions[6]], 3, 3))+\". \"),_c('br'),_c('br'),_vm._v(\" Theory of Dilation: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[7],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(7, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" DT and TP gain ^\"+_vm._s(_vm.format(_vm.localPenalties.toD.power[this.corruptions[7]], 3, 3))+\". \"),_c('br'),_vm._v(\" DT gain ×\"+_vm._s(_vm.localPenalties.toD.mult[this.corruptions[7]].toString())+\". \"),_c('br'),_c('br'),_vm._v(\" Replicative Singularities: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[8],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(8, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Replicanti gain ^\"+_vm._s(_vm.localPenalties.repSing.rep[this.corruptions[8]].toString())+\". \"),_c('br'),_vm._v(\" Sigularity gain ^\"+_vm._s(_vm.localPenalties.repSing.sing[this.corruptions[8]].toString())+\". \"),_c('br'),_vm._v(\" Dark Matter gain ^\"+_vm._s(_vm.localPenalties.repSing.dm[this.corruptions[8]].toString())+\". \"),_c('br'),_c('br'),_vm._v(\" Study of Forever: \"),_c('SliderComponent',_vm._b({attrs:{\"value\":_vm.corruptions[9],\"width\":'100%',\"disabled\":_vm.isRunning},on:{\"input\":function($event){return _vm.corruptionSetSet(9, $event)}}},'SliderComponent',_vm.corruptionSliderProps,false)),_vm._v(\" Studies TT cost ×\"+_vm._s(_vm.format(_vm.localPenalties.soF.ttcost[this.corruptions[9]], 0, 0))+\". \"),_c('br'),_vm._v(\" TD mult ^\"+_vm._s(_vm.localPenalties.soF.tdpow[this.corruptions[9]].toString())+\". \")],1)]),_c('div',{staticClass:\"button-container\"},[_c('button',{staticClass:\"o-pelle-button\",on:{\"click\":_vm.showModal}},[_vm._v(\" Show full nerf effects of specific Hostilities \")]),_c('br'),_vm._v(\" Last two row of Hostile Upgrades are only effective in Hostile Mends, and they won't affect the number display at this page. (sry) \")]),_vm._l((5),function(row){return _c('div',{key:row,staticClass:\"l-mending-upgrade-grid__row\"},_vm._l((5),function(column){return _c('CorruptionUpgradeButton',{key:_vm.id(row, column),attrs:{\"upgrade\":_vm.upgrades[_vm.id(row, column)]}})}),1)})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-spoon-btn-group\"},[_c('button',{staticClass:\"l-mending-upgrade-btn c-mending-upgrade-btn\",class:_vm.classObject,on:{\"click\":function($event){if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.upgrade.purchase()}}},[_c('HintText',{staticClass:\"l-hint-text--mending-upgrade c-hint-text--mending-upgrade\",attrs:{\"type\":\"warpUpgrades\"}},[_vm._v(\" \"+_vm._s(_vm.config.name)+\" \")]),_c('span',{class:{ 'o-pelle-disabled': _vm.isUseless }},[_c('DescriptionDisplay',{attrs:{\"config\":_vm.config}}),((false) && !_vm.isRebuyable)?[_c('br'),_c('DescriptionDisplay',{staticClass:\"c-mending-upgrade-btn__requirement\",attrs:{\"config\":_vm.requirementConfig,\"label\":\"Requirement:\"}})]:[_c('EffectDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\"}}),(!_vm.isBought)?_c('CostDisplay',{attrs:{\"config\":_vm.config,\"br\":\"\",\"name\":\"Hostile Fragment\"}}):_vm._e()]],2)],1),(_vm.canBeLocked)?_c('div',{staticClass:\"o-requirement-lock\"},[(_vm.hasRequirementLock)?_c('i',{staticClass:\"fas fa-lock\"}):(_vm.canLock)?_c('i',{staticClass:\"fas fa-lock-open\"}):_vm._e()]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CorruptionUpgradeButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CorruptionUpgradeButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CorruptionUpgradeButton.vue?vue&type=template&id=a1c479ea&scoped=true&\"\nimport script from \"./CorruptionUpgradeButton.vue?vue&type=script&lang=js&\"\nexport * from \"./CorruptionUpgradeButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a1c479ea\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CorruptionChallengeTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CorruptionChallengeTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CorruptionChallengeTab.vue?vue&type=template&id=a4bcfcc4&scoped=true&\"\nimport script from \"./CorruptionChallengeTab.vue?vue&type=script&lang=js&\"\nexport * from \"./CorruptionChallengeTab.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CorruptionChallengeTab.vue?vue&type=style&index=0&id=a4bcfcc4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a4bcfcc4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c(_vm.activeComponent,{tag:\"component\"})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-time-dim-tab l-centered-vertical-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all \")])],1),_c('div',[_c('p',[_vm._v(\" You have gained \"),_c('span',{staticClass:\"c-multiversal-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.boostPoints, 2, 1)))]),_vm._v(\" Galactic Shards, \"+_vm._s(_vm.txt1())),_c('span',{staticClass:\"c-multiversal-dim-description__accent\"},[_vm._v(_vm._s(_vm.txt2()))]),_vm._v(_vm._s(_vm.txt3())+\". \")])]),_c('div',[_vm._v(\" The effectiveness of Galactic Shards decreases above \"+_vm._s(_vm.format(50))+\"%. \")]),_c('div',[_vm._v(\" You are getting \"+_vm._s(_vm.format(_vm.shardsPerSecond, 2, 0))+\" \"+_vm._s(_vm.incomeType)+\" per second, unaffected by game speed. \")]),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('ClassicMultiversalDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked && !_vm.requirementReached }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 1),\"amount-text\":_vm.format(_vm.amount, 2),\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td o-primary-btn--buy-dim c-dim-tooltip-container\",class:_vm.buttonClass(),attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isCapped},on:{\"click\":_vm.buyMultiversalDimension}},[_vm._v(\" \"+_vm._s(_vm.buttonContents)+\" \"),_c('div',{staticClass:\"c-dim-purchase-count-tooltip\"},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.tooltipContents)}})])]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td-auto\",attrs:{\"enabled\":_vm.isAvailableForPurchase && !_vm.isCapped},on:{\"click\":_vm.buyMaxMultiversalDimension}},[_vm._v(\" Buy Max \")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicMultiversalDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicMultiversalDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicMultiversalDimensionRow.vue?vue&type=template&id=4c8aa071&scoped=true&\"\nimport script from \"./ClassicMultiversalDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicMultiversalDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClassicMultiversalDimensionRow.vue?vue&type=style&index=0&id=4c8aa071&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4c8aa071\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClassicMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClassicMultiversalDimensionsTab.vue?vue&type=template&id=5de1d430&\"\nimport script from \"./ClassicMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ClassicMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-time-dim-tab l-centered-vertical-tab\"},[_c('div',{staticClass:\"c-subtab-option-container\"},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.maxAll}},[_vm._v(\" Max all \")])],1),_c('div',[_c('p',[_vm._v(\" You have gained \"),_c('span',{staticClass:\"c-multiversal-dim-description__accent\"},[_vm._v(_vm._s(_vm.format(_vm.boostPoints, 2, 1)))]),_vm._v(\" Galactic Shards, \"+_vm._s(_vm.txt1())),_c('span',{staticClass:\"c-multiversal-dim-description__accent\"},[_vm._v(_vm._s(_vm.txt2()))]),_vm._v(_vm._s(_vm.txt3())+\". \")])]),_c('div',[_vm._v(\"You are getting \"+_vm._s(_vm.format(_vm.shardsPerSecond, 2, 0))+\" \"+_vm._s(_vm.incomeType)+\" per second, unaffected by game speed.\")]),_c('div',{staticClass:\"l-dimensions-container\"},_vm._l((8),function(tier){return _c('NewMultiversalDimensionRow',{key:tier,attrs:{\"tier\":tier}})}),1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showRow),expression:\"showRow\"}],staticClass:\"c-dimension-row l-dimension-row-multiversal-dim l-dimension-single-row\",class:{ 'c-dim-row--not-reached': !_vm.isUnlocked && !_vm.requirementReached }},[_c('GenericDimensionRowText',{attrs:{\"tier\":_vm.tier,\"name\":_vm.name,\"multiplier-text\":_vm.formatX(_vm.multiplier, 2, 1),\"amount-text\":_vm.format(_vm.amount, 2),\"rate\":_vm.rateOfChange}}),_c('div',{staticClass:\"l-dim-row-multi-button-container c-modern-dim-tooltip-container\",style:(_vm.cssVars)},[_c('div',{staticClass:\"c-modern-dim-purchase-count-tooltip\",style:(_vm.cssVars)},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.tooltipContents)}})]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td o-primary-btn o-primary-btn--new o-primary-btn--buy-dim\",class:_vm.buttonClass(),attrs:{\"enabled\":_vm.isAvailableForPurchase},on:{\"click\":_vm.buyMultiversalDimension}},[_vm._v(\" \"+_vm._s(_vm.buttonContents)+\" \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--buy-td-auto\",attrs:{\"enabled\":_vm.isAvailableForPurchase},on:{\"click\":_vm.buyMaxMultiversalDimension}},[_vm._v(\" Buy Max \")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernMultiversalDimensionRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernMultiversalDimensionRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernMultiversalDimensionRow.vue?vue&type=template&id=32da9d66&scoped=true&\"\nimport script from \"./ModernMultiversalDimensionRow.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernMultiversalDimensionRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModernMultiversalDimensionRow.vue?vue&type=style&index=0&id=32da9d66&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"32da9d66\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModernMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModernMultiversalDimensionsTab.vue?vue&type=template&id=07bad0dc&\"\nimport script from \"./ModernMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./ModernMultiversalDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultiversalDimensionsTab.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MultiversalDimensionsTab.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MultiversalDimensionsTab.vue?vue&type=template&id=6f3b1cd1&\"\nimport script from \"./MultiversalDimensionsTab.vue?vue&type=script&lang=js&\"\nexport * from \"./MultiversalDimensionsTab.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","// Temporarily aggregate tab components here until GameUI is migrated to SFC\r\nimport AlchemyTab from \"./alchemy/AlchemyTab\";\r\nimport AntimatterDimensionsTab from \"./antimatter-dimensions/AntimatterDimensionsTab\";\r\nimport AutobuyersTab from \"./autobuyers/AutobuyersTab\";\r\nimport AutomatorTab from \"./automator/AutomatorTab\";\r\nimport BlackHoleTab from \"./black-hole/BlackHoleTab\";\r\nimport BreakInfinityTab from \"./break-infinity/BreakInfinityTab\";\r\nimport CelestialNavigationTab from \"./celestial-navigation/CelestialNavigationTab\";\r\nimport ChallengeRecordsTab from \"./challenge-records/ChallengeRecordsTab\";\r\nimport EffarigTab from \"./celestial-effarig/EffarigTab\";\r\nimport EnslavedTab from \"./celestial-enslaved/EnslavedTab\";\r\nimport EternityChallengesTab from \"./eternity-challenges/EternityChallengesTab\";\r\nimport EternityMilestonesTab from \"./eternity-milestones/EternityMilestonesTab\";\r\nimport EternityUpgradesTab from \"./eternity-upgrades/EternityUpgradesTab\";\r\nimport GlyphSetRecordsTab from \"./glyph-set-records/GlyphSetRecordsTab\";\r\nimport GlyphsTab from \"./glyphs/GlyphsTab\";\r\nimport ImaginaryUpgradesTab from \"./imaginary-upgrades/ImaginaryUpgradesTab\";\r\nimport InfinityChallengesTab from \"./infinity-challenges/InfinityChallengesTab\";\r\nimport InfinityDimensionsTab from \"./infinity-dimensions/InfinityDimensionsTab\";\r\nimport InfinityUpgradesTab from \"./infinity-upgrades/InfinityUpgradesTab\";\r\nimport LaitelaTab from \"./celestial-laitela/LaitelaTab\";\r\nimport MultiplierBreakdownTab from \"./statistics/MultiplierBreakdownTab\";\r\nimport NormalAchievementsTab from \"./normal-achievements/NormalAchievementsTab\";\r\nimport NormalChallengesTab from \"./normal-challenges/NormalChallengesTab\";\r\nimport OptionsGameplayTab from \"./options-gameplay/OptionsGameplayTab\";\r\nimport OptionsSavingTab from \"./options-saving/OptionsSavingTab\";\r\nimport OptionsVisualTab from \"./options-visual/OptionsVisualTab\";\r\nimport PastPrestigeRunsTab from \"./past-prestige-runs/PastPrestigeRunsTab\";\r\nimport PelleTab from \"./celestial-pelle/PelleTab\";\r\nimport PerksTab from \"./perks/PerksTab\";\r\nimport PreviousSpeedrunTab from \"./speedrun-milestones/PreviousSpeedrunTab\";\r\nimport RaTab from \"./celestial-ra/RaTab\";\r\nimport RealityUpgradesTab from \"./reality-upgrades/RealityUpgradesTab\";\r\nimport ReplicantiTab from \"./replicanti/ReplicantiTab\";\r\nimport SecretAchievementTab from \"./secret-achievements/SecretAchievementTab\";\r\nimport ShopTab from \"./shop/ShopTab\";\r\nimport SpeedrunMilestonesTab from \"./speedrun-milestones/SpeedrunMilestonesTab\";\r\nimport StatisticsTab from \"./statistics/StatisticsTab\";\r\nimport TeresaTab from \"./celestial-teresa/TeresaTab\";\r\nimport TimeDilationTab from \"./time-dilation/TimeDilationTab\";\r\nimport TimeDimensionsTab from \"./time-dimensions/TimeDimensionsTab\";\r\nimport TimeStudiesTab from \"./time-studies/TimeStudiesTab\";\r\nimport VTab from \"./celestial-v/VTab\";\r\n\r\n//Custom Tabs Start Here\r\nimport MendingUpgrades from \"./mending/MendingUpgrades\";\r\nimport MendingMilestones from \"./mending/MendingMilestones\";\r\nimport WarpReality from \"./mending/WarpReality\";\r\nimport KohlersRealm from \"./mending/KohlersRealm\";\r\nimport CorruptionTab from \"./corruption/CorruptionChallengeTab\";\r\nimport MultiversalDimensionsTab from \"./multiversal-dimensions/MultiversalDimensionsTab\";\r\n\r\n\r\nconst TabComponents = {\r\n AntimatterDimensionsTab,\r\n InfinityDimensionsTab,\r\n TimeDimensionsTab,\r\n OptionsSavingTab,\r\n OptionsVisualTab,\r\n OptionsGameplayTab,\r\n StatisticsTab,\r\n ChallengeRecordsTab,\r\n PastPrestigeRunsTab,\r\n GlyphSetRecordsTab,\r\n SpeedrunMilestonesTab,\r\n PreviousSpeedrunTab,\r\n NormalAchievementsTab,\r\n SecretAchievementTab,\r\n TeresaTab,\r\n EffarigTab,\r\n EnslavedTab,\r\n VTab,\r\n RaTab,\r\n LaitelaTab,\r\n PelleTab,\r\n AutobuyersTab,\r\n AutomatorTab,\r\n NormalChallengesTab,\r\n InfinityChallengesTab,\r\n EternityChallengesTab,\r\n InfinityUpgradesTab,\r\n BreakInfinityTab,\r\n ReplicantiTab,\r\n TimeStudiesTab,\r\n EternityUpgradesTab,\r\n EternityMilestonesTab,\r\n TimeDilationTab,\r\n GlyphsTab,\r\n RealityUpgradesTab,\r\n ImaginaryUpgradesTab,\r\n PerksTab,\r\n BlackHoleTab,\r\n AlchemyTab,\r\n CelestialNavigationTab,\r\n ShopTab,\r\n MultiplierBreakdownTab,\r\n MendingUpgrades,\r\n MendingMilestones,\r\n WarpReality,\r\n CorruptionTab,\r\n KohlersRealm,\r\n MultiversalDimensionsTab\r\n};\r\n\r\nexport default TabComponents;\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-s12-desktop-icons-container\"},_vm._l((_vm.DesktopIcons.entries),function(icon,idx){return _c('div',{key:icon.name,staticClass:\"c-s12-desktop-icon\",class:{ 'c-s12-desktop-icon--selected': _vm.DesktopIcons.selected === idx, },on:{\"click\":function($event){return _vm.handleClick(idx)}}},[_c('div',{staticClass:\"c-s12-desktop-icon__inner\"},[_c('img',{staticClass:\"c-s12-desktop-icon__img\",attrs:{\"src\":(\"images/s12/\" + (icon.image))}}),_c('div',{staticClass:\"c-s12-desktop-icon__text\"},[_vm._v(\" \"+_vm._s(icon.name)+\" \")])])])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default {\r\n entries: [{\r\n name: \"Windows Media Player\",\r\n action() {\r\n const links = [\r\n // Get trolled\r\n \"https://www.youtube.com/watch?v=dQw4w9WgXcQ\",\r\n // Rite of spring\r\n \"https://youtu.be/rP42C-4zL3w?t=2\",\r\n // Aleph 0 which for some reason caught on for a while\r\n \"https://www.youtube.com/watch?v=fTaWKbD3UK8\",\r\n // \"If you have not listened to first suite in E flat by Gustav Holst do it now\" -Erf\r\n \"https://www.youtube.com/watch?v=fLbP6qpI1YI\",\r\n ];\r\n window.open(links[Math.floor(Math.random() * links.length)]);\r\n },\r\n image: \"desktop--windows-media-player.png\"\r\n },\r\n {\r\n name: \"Discord\",\r\n action() {\r\n window.open(\"https://discord.gg/ST9NaXa\");\r\n },\r\n image: \"desktop--discord-logo.png\"\r\n },\r\n {\r\n name: \"Games\",\r\n action() {\r\n Modal.s12Games.show();\r\n },\r\n image: \"desktop--games.png\"\r\n }],\r\n selected: -1,\r\n};\r\n","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DesktopIcons.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DesktopIcons.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DesktopIcons.vue?vue&type=template&id=6bd6fa88&scoped=true&\"\nimport script from \"./DesktopIcons.vue?vue&type=script&lang=js&\"\nexport * from \"./DesktopIcons.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DesktopIcons.vue?vue&type=style&index=0&id=6bd6fa88&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6bd6fa88\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-s12-window__outer\",class:_vm.S12Windows.isMinimised ? 'c-s12-window__outer--minimised' : '',attrs:{\"id\":\"page\"}},[_c('link',{attrs:{\"rel\":\"stylesheet\",\"type\":\"text/css\",\"href\":_vm.isClassic ? 'stylesheets/classic.css' : 'stylesheets/modern-styles.css'}}),_c('span',{staticClass:\"c-s12-close-button\",on:{\"click\":function($event){_vm.S12Windows.isMinimised = true}}}),_c('span',{staticClass:\"c-modal__title\"},[_vm._v(\" \"+_vm._s(_vm.tabName)+\" \")]),_c('div',{key:_vm.newGameKey,staticClass:\"game-container c-s12-window__inner\",class:_vm.isClassic ? 'c-classic l-classic' : '',style:(_vm.topPadding)},[_c('GameUiComponentFixed'),_c('BackgroundAnimations'),_c('div',{staticClass:\"c-s12-window__content-container\"},[(_vm.news)?_c('NewsTicker'):_vm._e(),_c('BigCrunchButton'),(!_vm.bigCrunch)?_c('div',{staticClass:\"tab-container\"},[_c('HeaderPrestigeGroup'),_c('div',{staticClass:\"information-header\"},[_c('HeaderChallengeDisplay'),_c('HeaderChallengeEffects'),(_vm.hasReality)?_c('GameSpeedDisplay'):_vm._e(),(_vm.hasReality)?_c('br'):_vm._e(),_c('HeaderBlackHole')],1),_vm._t(\"default\")],2):_vm._e()],1)],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","let subtabTimeoutId;\r\n\r\nexport const S12Windows = {\r\n isMinimised: false,\r\n tabs: {\r\n hoveringTab: undefined,\r\n setHoveringTab(tab) {\r\n this.hoveringTab = tab.id;\r\n clearTimeout(subtabTimeoutId);\r\n },\r\n unsetHoveringTab(instant = false) {\r\n if (instant) {\r\n this.hoveringTab = undefined;\r\n return;\r\n }\r\n subtabTimeoutId = setTimeout(() => this.hoveringTab = undefined, 1000);\r\n },\r\n tabButtonPositions: [],\r\n }\r\n};\r\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12Ui.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12Ui.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./S12Ui.vue?vue&type=template&id=1ee338fc&scoped=true&\"\nimport script from \"./S12Ui.vue?vue&type=script&lang=js&\"\nexport * from \"./S12Ui.vue?vue&type=script&lang=js&\"\nimport style0 from \"./S12Ui.vue?vue&type=style&index=0&id=1ee338fc&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1ee338fc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',[_c('div',{staticClass:\"c-game-ui--fixed\"},[(_vm.view.modal.progressBar)?_c('ModalProgressBar'):(_vm.view.quotes.current)?_c('CelestialQuoteModal',{attrs:{\"quote\":_vm.view.quotes.current}}):(_vm.view.quotes.history)?_c('CelestialQuoteHistoryDisplay',{attrs:{\"quotes\":_vm.view.quotes.history}}):(_vm.view.modal.current)?_c('PopupModal',{attrs:{\"modal\":_vm.view.modal.current}}):_vm._e(),(_vm.ending)?_c('FadeAway'):_vm._e(),(_vm.ending)?_c('CreditsContainer'):_vm._e(),(_vm.ending)?_c('NewGame'):_vm._e(),_c('SpectateGame')],1),_c('S12Taskbar')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isHidden)?_c('span',[_c('div',{staticClass:\"c-taskbar\"},[_c('img',{staticClass:\"c-start-icon\",attrs:{\"src\":\"images/s12/win7-start-menu-inactive.png\"},on:{\"click\":function($event){return _vm.startupSound.play()}}}),_vm._l((_vm.tabs),function(tab,tabPosition){return [(_vm.tabVisibilities[tabPosition])?_c('TaskbarIcon',{key:tab.name,attrs:{\"tab\":tab,\"tab-position\":tabPosition}}):_vm._e()]}),_c('div',{staticClass:\"c-s12-show-desktop\",on:{\"click\":function($event){_vm.S12Windows.isMinimised = true;}}})],2),_vm._l((_vm.tabs),function(tab,tabPosition){return [(_vm.tabVisibilities[tabPosition])?_c('S12Subtabs',{key:tab.name,attrs:{\"tab\":tab}}):_vm._e()]})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"subtabs\",staticClass:\"c-s12-subtabs\",class:{\n 'c-s12-subtabs--show': _vm.S12Windows.tabs.hoveringTab === _vm.tab.id,\n 'c-s12-subtabs--compact': _vm.useCompact,\n },style:({ left: _vm.left }),on:{\"mouseenter\":function($event){return _vm.S12Windows.tabs.setHoveringTab(_vm.tab)},\"mouseleave\":function($event){return _vm.S12Windows.tabs.unsetHoveringTab()}}},[_vm._l((_vm.tab.subtabs),function(subtab,index){return [(_vm.subtabVisibilities[index])?_c('div',{key:index,staticClass:\"c-s12-subtab-btn\",class:{ 'c-s12-subtab-btn--active': _vm.isCurrentSubtab(subtab.id) },on:{\"click\":function($event){subtab.show(true); _vm.S12Windows.isMinimised = false; _vm.S12Windows.tabs.unsetHoveringTab(true);}}},[_c('span',{staticClass:\"c-s12-subtab-btn__text\"},[(_vm.useCompact)?_c('span',{staticClass:\"c-s12-subtab-btn__symbol--small\",domProps:{\"innerHTML\":_vm._s(subtab.symbol)}}):_vm._e(),_vm._v(\" \"+_vm._s(subtab.name)+\" \")]),(!_vm.useCompact)?_c('span',{staticClass:\"c-s12-subtab-btn__symbol\",domProps:{\"innerHTML\":_vm._s(subtab.symbol)}}):_vm._e(),(subtab.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()]):_vm._e()]})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12Subtabs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12Subtabs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./S12Subtabs.vue?vue&type=template&id=a1a81406&scoped=true&\"\nimport script from \"./S12Subtabs.vue?vue&type=script&lang=js&\"\nexport * from \"./S12Subtabs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./S12Subtabs.vue?vue&type=style&index=0&id=a1a81406&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a1a81406\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"taskbarIcon\",class:{\n 'c-taskbar-icon': true,\n 'c-taskbar-icon--active': _vm.isCurrentTab\n },attrs:{\"title\":_vm.tab.name},on:{\"mouseenter\":function($event){return _vm.S12Windows.tabs.setHoveringTab(_vm.tab)},\"mouseleave\":function($event){return _vm.S12Windows.tabs.unsetHoveringTab()},\"click\":function($event){_vm.tab.show(true); _vm.S12Windows.isMinimised = false; _vm.S12Windows.tabs.unsetHoveringTab(true);}}},[_c('img',{staticClass:\"c-taskbar-icon__image\",attrs:{\"src\":(\"images/s12/\" + (_vm.tab.key) + \".png\")}}),(_vm.hasNotification)?_c('div',{staticClass:\"fas fa-circle-exclamation l-notification-icon\"}):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TaskbarIcon.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TaskbarIcon.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TaskbarIcon.vue?vue&type=template&id=6cc71a97&scoped=true&\"\nimport script from \"./TaskbarIcon.vue?vue&type=script&lang=js&\"\nexport * from \"./TaskbarIcon.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TaskbarIcon.vue?vue&type=style&index=0&id=6cc71a97&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6cc71a97\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12Taskbar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12Taskbar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./S12Taskbar.vue?vue&type=template&id=98c9ea58&scoped=true&\"\nimport script from \"./S12Taskbar.vue?vue&type=script&lang=js&\"\nexport * from \"./S12Taskbar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./S12Taskbar.vue?vue&type=style&index=0&id=98c9ea58&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"98c9ea58\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12UiFixed.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12UiFixed.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./S12UiFixed.vue?vue&type=template&id=b165c672&scoped=true&\"\nimport script from \"./S12UiFixed.vue?vue&type=script&lang=js&\"\nexport * from \"./S12UiFixed.vue?vue&type=script&lang=js&\"\nimport style0 from \"./S12UiFixed.vue?vue&type=style&index=0&id=b165c672&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b165c672\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameUIComponent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GameUIComponent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GameUIComponent.vue?vue&type=template&id=16fa83ba&scoped=true&\"\nimport script from \"./GameUIComponent.vue?vue&type=script&lang=js&\"\nexport * from \"./GameUIComponent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GameUIComponent.vue?vue&type=style&index=0&id=16fa83ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"16fa83ba\",\n null\n \n)\n\nexport default component.exports","import VTooltip from \"v-tooltip\";\r\nimport VueGtag from \"vue-gtag\";\r\n\r\nimport { DEV } from \"@/env\";\r\n\r\nimport { useLongPress, useRepeatingClick } from \"./longpress\";\r\nimport { notify } from \"./notify\";\r\nimport { state } from \"./ui.init\";\r\n\r\nimport GameUIComponent from \"@/components/GameUIComponent\";\r\n\r\nVue.mixin({\r\n computed: {\r\n $viewModel() {\r\n return state.view;\r\n }\r\n },\r\n created() {\r\n if (this.update) {\r\n this.on$(GAME_EVENT.UPDATE, this.update);\r\n if (GameUI.initialized) {\r\n this.update();\r\n }\r\n }\r\n\r\n // Following is used to force the recomputation of computed values\r\n // from this fiddle https://codepen.io/sirlancelot/pen/JBeXeV\r\n const recomputed = Object.create(null);\r\n const watchers = this._computedWatchers;\r\n\r\n if (!watchers) return;\r\n\r\n for (const key in watchers) makeRecomputable(watchers[key], key, recomputed);\r\n\r\n this.$recompute = key => recomputed[key] = !recomputed[key];\r\n Vue.observable(recomputed);\r\n },\r\n destroyed() {\r\n EventHub.ui.offAll(this);\r\n },\r\n methods: {\r\n emitClick() {\r\n this.$emit(\"click\");\r\n },\r\n emitInput(val) {\r\n this.$emit(\"input\", val);\r\n },\r\n emitClose() {\r\n this.$emit(\"close\");\r\n },\r\n on$(event, fn) {\r\n EventHub.ui.on(event, fn, this);\r\n },\r\n format(value, places, placesUnder1000) {\r\n return format(value, places, placesUnder1000);\r\n },\r\n formatInt(value) {\r\n return formatInt(value);\r\n },\r\n formatNE(value, places, placesUnder1000) {\r\n return formatNE(value, places, placesUnder1000);\r\n },\r\n formatPercents(value, places) {\r\n return formatPercents(value, places);\r\n },\r\n formatRarity(value) {\r\n return formatRarity(value);\r\n },\r\n formatX(value, places, placesUnder1000) {\r\n return formatX(value, places, placesUnder1000);\r\n },\r\n formatPow(value, places, placesUnder1000) {\r\n return formatPow(value, places, placesUnder1000);\r\n },\r\n formatPostBreak(value, places, placesUnder1000) {\r\n return formatPostBreak(value, places, placesUnder1000);\r\n },\r\n pluralize,\r\n quantify,\r\n quantifyInt\r\n }\r\n});\r\n\r\n// This function is also from the fiddle above\r\nfunction makeRecomputable(watcher, key, recomputed) {\r\n const original = watcher.getter;\r\n recomputed[key] = true;\r\n\r\n // eslint-disable-next-line no-sequences\r\n watcher.getter = vm => (recomputed[key], original.call(vm, vm));\r\n}\r\n\r\nconst ReactivityComplainer = {\r\n complain() {\r\n this.checkReactivity(player, \"player\");\r\n },\r\n checkReactivity(obj, path) {\r\n if (obj === undefined || obj === null) {\r\n return;\r\n }\r\n if (obj.__ob__ !== undefined) {\r\n throw new Error(`Boi you fukked up - ${path} became REACTIVE (oh shite)`);\r\n }\r\n for (const key in obj) {\r\n if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;\r\n const prop = obj[key];\r\n if (typeof prop === \"object\") {\r\n this.checkReactivity(prop, `${path}.${key}`);\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const GameUI = {\r\n notify,\r\n events: [],\r\n flushPromise: undefined,\r\n initialized: false,\r\n globalClickListener: null,\r\n touchDevice: (\"ontouchstart\" in window ||\r\n window.navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0 ||\r\n (window.DocumentTouch && document instanceof DocumentTouch)),\r\n dispatch(event, args) {\r\n const index = this.events.indexOf(event);\r\n if (index !== -1) {\r\n this.events.splice(index, 1);\r\n }\r\n if (event !== GAME_EVENT.UPDATE) {\r\n this.events.push([event, args]);\r\n }\r\n if (this.flushPromise) return;\r\n this.flushPromise = Promise.resolve()\r\n .then(this.flushEvents.bind(this));\r\n },\r\n flushEvents() {\r\n this.flushPromise = undefined;\r\n if (DEV) {\r\n if (PerformanceStats.isOn && PerformanceStats.currentBlocks.length > 0) {\r\n Vue.nextTick(() => PerformanceStats.start(\"Vue Render\"));\r\n PerformanceStats.start(\"Vue Update\");\r\n }\r\n }\r\n for (const event of this.events) {\r\n EventHub.ui.dispatch(event[0], event[1]);\r\n }\r\n EventHub.ui.dispatch(GAME_EVENT.UPDATE);\r\n if (DEV) {\r\n ReactivityComplainer.complain();\r\n if (PerformanceStats.isOn && PerformanceStats.currentBlocks.length > 0) {\r\n PerformanceStats.end();\r\n Vue.nextTick(() => {\r\n PerformanceStats.end(\"Vue Render\");\r\n PerformanceStats.end(\"Frame Time\");\r\n PerformanceStats.render();\r\n });\r\n }\r\n }\r\n this.events = [];\r\n },\r\n update() {\r\n this.dispatch(GAME_EVENT.UPDATE);\r\n }\r\n};\r\n\r\nexport const UIID = (function() {\r\n let id = 0;\r\n return { next: () => id++ };\r\n}());\r\n\r\nVTooltip.options.defaultClass = \"general-tooltip\";\r\nVTooltip.options.popover.defaultBaseClass = \"general-tooltip\";\r\nVTooltip.options.defaultTemplate =\r\n '
';\r\nVue.use(VTooltip);\r\n\r\n(function() {\r\n const methodStrategy = Vue.config.optionMergeStrategies.methods;\r\n // eslint-disable-next-line max-params\r\n Vue.config.optionMergeStrategies.methods = (parentVal, childVal, vm, key) => {\r\n const result = methodStrategy(parentVal, childVal, vm, key);\r\n const hasUpdate = val => val && val.update;\r\n if (!hasUpdate(parentVal) || !hasUpdate(childVal)) return result;\r\n result.update = function() {\r\n parentVal.update.call(this);\r\n childVal.update.call(this);\r\n };\r\n return result;\r\n };\r\n}());\r\n\r\nuseLongPress(Vue);\r\nuseRepeatingClick(Vue);\r\nVue.use(VueGtag, {\r\n config: { id: \"UA-77268961-1\" }\r\n});\r\n\r\nexport const ui = new Vue({\r\n el: \"#ui\",\r\n components: {\r\n GameUIComponent\r\n },\r\n data: state,\r\n computed: {\r\n notation() {\r\n return Notations.find(this.notationName);\r\n },\r\n currentGlyphTooltip() {\r\n return this.view.tabs.reality.currentGlyphTooltip;\r\n },\r\n scrollWindow() {\r\n return this.view.scrollWindow;\r\n },\r\n UIType() {\r\n return this.view.UIType;\r\n },\r\n },\r\n watch: {\r\n currentGlyphTooltip(newVal) {\r\n if (newVal !== -1 && !GameUI.globalClickListener) {\r\n GameUI.globalClickListener = () => {\r\n this.view.tabs.reality.currentGlyphTooltip = -1;\r\n document.removeEventListener(\"click\", GameUI.globalClickListener);\r\n GameUI.globalClickListener = null;\r\n };\r\n document.addEventListener(\"click\", GameUI.globalClickListener);\r\n } else if (newVal === -1 && GameUI.globalClickListener) {\r\n document.removeEventListener(\"click\", GameUI.globalClickListener);\r\n GameUI.globalClickListener = null;\r\n }\r\n },\r\n scrollWindow(newVal, oldVal) {\r\n if (newVal !== 0 && oldVal === 0) {\r\n this.scroll(Date.now());\r\n }\r\n },\r\n },\r\n methods: {\r\n scroll(t) {\r\n const now = Date.now();\r\n if (this.view.scrollWindow) {\r\n window.scrollBy(0, this.view.scrollWindow * (now - t) / 2);\r\n setTimeout(() => this.scroll(now), 20);\r\n }\r\n }\r\n },\r\n render: h => h(GameUIComponent)\r\n});\r\n","import { GameMechanicState, SetPurchasableMechanicState } from \"./game-mechanics\";\r\nimport { DC } from \"./constants\";\r\nimport { clearCelestialRuns } from \"./reality\";\r\nimport { eternity } from \"./eternity\";\r\nimport { UpgradeableAutobuyerState } from \"./autobuyers/autobuyer\";\r\nimport { perks } from \"./secret-formula/reality/perks\";\r\nimport { MendingUpgrade } from \"./mending-upgrades\";\r\nimport { GameUI } from \"./ui\";\r\nimport { Currency } from \"./currency\";\r\nimport { CorruptionData } from \"./corruption\";\r\nimport { CorruptionUpgrade, VUnlocks } from \"./globals\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nfunction lockAchievementsOnMend() {\r\n //if (Perk.achievementGroup5.isBought) return;\r\n for (const achievement of Achievements.preMend) {\r\n achievement.lock();\r\n }\r\n player.reality.achTimer = DC.D0;\r\n}\r\n\r\nexport function mendingResetRequest() {\r\n if (Player.canMend) askMendingConfirmation();\r\n}\r\n \r\n \r\nfunction askMendingConfirmation() {\r\n if (player.options.confirmations.mending) {\r\n Modal.mending.show();\r\n } \r\n else {\r\n mendingReset();\r\n }\r\n}\r\n\r\nexport function mendingReset() {\r\n // Finally, lets set up corruptions\r\n // hello, due to some upgrade need record to involve, corruption should be at first sry.--sxy\r\n if (CorruptionData.isCorrupted && (!player.celestials.pelle.galaxyGenerator.unlocked)) { //decided to allow pelle, yet not generator\r\n CorruptionData.isCorrupted = false; //wtf what a chaos logic;\r\n let scoreCalc = CorruptionData.calcScore()\r\n // console.log(corruptionChallengeScoreCalculation())\r\n if (CorruptionData.corruptionChallenge.recordScore < scoreCalc) {\r\n player.mending.corruptionChallenge.records = player.mending.corruption\r\n player.mending.corruptionChallenge.recordScore = scoreCalc\r\n }\r\n player.mending.corruptedFragments = Math.ceil(Math.max(CorruptionData.recordCorruptedFragments, Math.log2(scoreCalc))) // Make sure the player doesnt decrease their own corrupted frag count\r\n player.mending.corruptionUpgradeBits = 0 // Basically a respec call\r\n player.mending.corruptionChallenge.corruptedMend = false\r\n }\r\n \r\n if (!MendingMilestone.six.isReached){\r\n Tab.dimensions.antimatter.show();\r\n } // So before we call anything we force the player onto the antimatter tab, to prevent going to into cel realities wayyyy too early\r\n EventHub.dispatch(GAME_EVENT.MENDING_RESET_BEFORE)\r\n //lockAchievementsOnMend();\r\n if(!Pelle.isDoomed || player.celestials.pelle.records.totalAntimatter.plus(1).log10() >= 9e15){ //should check if Doomed and not END so people don't get free MvR and mend stat\r\n Currency.mendingPoints.add(gainedMendingPoints());\r\n Currency.mends.add(1);\r\n }\r\n if (Effarig.isRunning && !EffarigUnlock.mend.isUnlocked && Ra.unlocks.effarigMendUnlock.isUnlocked) {\r\n EffarigUnlock.mend.unlock();\r\n EffarigUnlock.infinity.unlock();\r\n EffarigUnlock.eternity.unlock();\r\n EffarigUnlock.reality.unlock();\r\n }\r\n let x = player.reality.glyphs.protectedRows;\r\n player.reality.glyphs.protectedRows = 0;\r\n for (let g = 0; g < 120; g++){\r\n let glyph = Glyphs.inventory[g];\r\n if (glyph != null && glyph.type != \"companion\") GlyphSacrificeHandler.deleteGlyph(glyph, true);\r\n }\r\n Glyphs.unequipAll(true);\r\n for (let h = 0; h < 120; h++){\r\n let glyph = Glyphs.inventory[h];\r\n if (glyph != null && glyph.type != \"companion\") GlyphSacrificeHandler.deleteGlyph(glyph, true);\r\n }\r\n player.reality.glyphs.protectedRows = x;\r\n /*if(Effarig.currentStage < 6){\r\n player.reality.glyphs.filter.trash = 0;\r\n player.reality.glyphs.filter.select = 1;\r\n }*/ //why reset--sxy\r\n player.blackHoleNegative = 1;\r\n player.isGameEnd = false;\r\n player.celestials.pelle.doomed = false;\r\n player.options.hiddenTabBits = 0;\r\n //Start reseting all the things\r\n player.challenge= {\r\n normal: {\r\n current: 0,\r\n completedBits: 0,\r\n bestTimes: player.challenge.normal.bestTimes,\r\n },\r\n infinity: {\r\n current: 0,\r\n completedBits: 0,\r\n bestTimes: player.challenge.infinity.bestTimes,\r\n },\r\n eternity: {\r\n current: 0,\r\n unlocked: 0,\r\n requirementBits: 0,\r\n }\r\n }\r\n if (!Achievement(194).isUnlocked) {\r\n player.records.totalAntimatter = DC.E1,\r\n player.challenge.normal.bestTimes = Array.repeat(Decimal.pow10(Number.MAX_VALUE), 11);\r\n player.challenge.infinity.bestTimes = Array.repeat(Decimal.pow10(Number.MAX_VALUE), 8);\r\n }\r\n //Celestials\r\n if(!MendingMilestone.ten.isReached){\r\n player.celestials.teresa.pouredAmount = 0;\r\n player.celestials.teresa.unlockBits = 0;\r\n }\r\n player.celestials.teresa.run = false;\r\n player.celestials.teresa.bestRunAM = MendingUpgrade(9).isBought ? DC.E1E10 : DC.D1;\r\n player.celestials.teresa.bestAMSet = [];\r\n player.celestials.teresa.perkShop = Array.repeat(0, 5);\r\n if (MendingMilestone.seven.isReached) {\r\n player.celestials.teresa.perkShop = [20, 20, 14, 6, 0, 0];\r\n if(CorruptionUpgrade(5).isBought) player.celestials.teresa.perkShop = [65, 65, 14, 6, 0, 0]\r\n }\r\n player.celestials.teresa.lastRepeatedMachines = DC.D0;\r\n if (MendingUpgrade(9).isBought && !MendingMilestone.ten.isReached){\r\n player.celestials.teresa.unlockBits += 1;\r\n }\r\n if(Effarig.currentStage < 6){\r\n player.celestials.effarig.relicShards = new Decimal(0);\r\n player.celestials.effarig.unlockBits = 7;\r\n }\r\n player.celestials.effarig.run = false;\r\n player.celestials.enslaved.stored = DC.D0;\r\n player.celestials.enslaved.storedReal = 0;\r\n player.celestials.enslaved.isAutoReleasing = false;\r\n player.celestials.enslaved.unlocks = [];\r\n player.celestials.enslaved.run = false;\r\n player.celestials.enslaved.completed = false;\r\n player.celestials.enslaved.tesseracts = 0;\r\n player.celestials.enslaved.hasSecretStudy = false;\r\n player.celestials.enslaved.progressBits = 0;\r\n if(MendingUpgrade(7).isBought){\r\n player.celestials.enslaved.unlocks = [0, 1];\r\n player.celestials.enslaved.completed = true;\r\n }\r\n if(!VUnlocks.vKeep.isUnlocked){\r\n V.reset();\r\n if(MendingUpgrade(14).isBought){\r\n player.celestials.v.runUnlocks = [3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n }\r\n }\r\n V.updateTotalRunUnlocks();\r\n player.celestials.v.quoteBits = 2047;\r\n if(!Ra.unlocks.raNoReset.isUnlocked) Ra.reset();\r\n player.celestials.ra.petWithRemembrance = \"\";\r\n player.celestials.ra.alchemy = Array.repeat(0, 21)\r\n .map(() => ({\r\n amount: 0,\r\n reaction: false\r\n }));\r\n player.celestials.ra.highestRefinementValue = {\r\n power: 0,\r\n infinity: 0,\r\n time: 0,\r\n replication: 0,\r\n dilation: 0,\r\n effarig: 0\r\n };\r\n player.celestials.ra.quoteBits = 16383;\r\n if(player.mending.corruptNext || !KohlerProgressUnlocks.hostileScore.isUnlocked){\r\n player.celestials.ra.charged = new Set();\r\n player.celestials.ra.breakCharged = new Set();\r\n }\r\n Laitela.reset();\r\n if (MendingUpgrade(4).isBought){\r\n player.celestials.laitela.difficultyTier = 8;\r\n }\r\n player.celestials.laitela.quoteBits = 1023;\r\n player.celestials.pelle.upgrades.clear();\r\n player.celestials.pelle.remnants = 0;\r\n player.celestials.pelle.realityShards = DC.D0;\r\n player.celestials.pelle.records = {\r\n totalAntimatter: DC.D0,\r\n totalInfinityPoints: DC.D0,\r\n totalEternityPoints: DC.D0,\r\n },\r\n player.celestials.pelle.rebuyables.antimatterDimensionMult = 0;\r\n player.celestials.pelle.rebuyables.timeSpeedMult = 0;\r\n player.celestials.pelle.rebuyables.glyphLevels = 0;\r\n player.celestials.pelle.rebuyables.infConversion = 0;\r\n player.celestials.pelle.rebuyables.galaxyPower = 0;\r\n player.celestials.pelle.rebuyables.galaxyGeneratorAdditive = 0;\r\n player.celestials.pelle.rebuyables.galaxyGeneratorMultiplicative = 0;\r\n player.celestials.pelle.rebuyables.AntimatterMult = 0;\r\n player.celestials.pelle.rebuyables.galaxyGeneratorIPMult = 0;\r\n player.celestials.pelle.rebuyables.galaxyGeneratorEPMult = 0;\r\n player.celestials.pelle.rifts.vacuum.fill = DC.D0;\r\n player.celestials.pelle.rifts.vacuum.active = false;\r\n player.celestials.pelle.rifts.vacuum.reducedTo = 1;\r\n player.celestials.pelle.rifts.decay.fill = DC.D0;\r\n player.celestials.pelle.rifts.decay.active = false;\r\n player.celestials.pelle.rifts.decay.percentageSpent = 0;\r\n player.celestials.pelle.rifts.decay.reducedTo = 1;\r\n player.celestials.pelle.rifts.chaos.fill = 0;\r\n player.celestials.pelle.rifts.chaos.active = false;\r\n player.celestials.pelle.rifts.chaos.reducedTo = 1;\r\n player.celestials.pelle.rifts.recursion.fill = DC.D0;\r\n player.celestials.pelle.rifts.recursion.active = false;\r\n player.celestials.pelle.rifts.recursion.reducedTo = 1;\r\n player.celestials.pelle.rifts.paradox.fill = DC.D0;\r\n player.celestials.pelle.rifts.paradox.active = false;\r\n player.celestials.pelle.rifts.paradox.reducedTo = 1;\r\n player.celestials.pelle.progressBits = 0;\r\n player.celestials.pelle.galaxyGenerator.unlocked = false;\r\n player.celestials.pelle.galaxyGenerator.spentGalaxies = 0;\r\n player.celestials.pelle.galaxyGenerator.generatedGalaxies = 0;\r\n player.celestials.pelle.galaxyGenerator.phase = 0;\r\n player.celestials.pelle.galaxyGenerator.sacrificeActive = false;\r\n player.celestials.pelle.collapsed.upgrades = false;\r\n player.celestials.pelle.collapsed.rifts = false;\r\n player.celestials.pelle.collapsed.galaxies = false;\r\n //Reality\r\n //player.reality.autoAutoClean = false; //excuse me why you reset this option--sxy\r\n //player.reality.glyphs.trash = 0; //exm --sxy\r\n resetRealityRuns();\r\n player.records.thisReality = {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n maxEP: DC.D0,\r\n bestEternitiesPerMs: DC.D0,\r\n maxReplicanti: DC.D0,\r\n maxDT: DC.D0,\r\n bestRSmin: DC.D0,\r\n bestRSminVal: DC.D0,\r\n remWithoutGG: 0\r\n },\r\n player.records.bestReality = {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n glyphStrength: 0,\r\n RM: DC.D0,\r\n RMSet: [],\r\n RMmin: DC.D0,\r\n RMminSet: [],\r\n glyphLevel: 0,\r\n glyphLevelSet: [],\r\n bestEP: DC.D0,\r\n bestEPSet: [],\r\n speedSet: [],\r\n iMCapSet: [],\r\n laitelaSet: [],\r\n remWithoutGG: player.records.bestReality.remWithoutGG\r\n },\r\n //player.options.confirmations.glyphSelection = true;\r\n player.reality.unlockedEC = 0;\r\n Perks.find(0).isBought = true; //give START to fix a bug for hardcoded first Reality Glyph reward\r\n Perks.find(0).onPurchased();\r\n \r\n player.realities = MendingUpgrade(2).isBought ? 10000 : 0;\r\n for (const perkId of [10, 12, 13, 14, 15, 16, 17, 30, 31, 40, 41, 42, 43, 44, 45, 46, 51, 52, 53, 54, 55, 56, 57, 60, 61, 62, 70, 71, 72, 73, 80, 81, 82, 83, 100, 101, 102, 103, 104, 105, 106, 201, 202, 203, 204, 205]) {\r\n const perk = Perks.find(perkId); //shoutouts to earth for code, yes I could do dev.giveAllPerks or something, but I'm futureproofing for post-Mend perks\r\n perk.isBought = false;\r\n if (MendingMilestone.three.isReached){\r\n perk.isBought = true;\r\n perk.onPurchased();\r\n }\r\n }\r\n GameUI.update();\r\n player.reality.upgReqs = 8192;\r\n player.reality.imaginaryUpgReqs = 0;\r\n player.reality.upgradeBits = 8192; //Give Telechemical\r\n if (MendingMilestone.three.isReached){\r\n player.reality.upgReqs += 1048576; //give Parity\r\n player.reality.upgradeBits += 1048576;\r\n }\r\n player.reality.imaginaryUpgradeBits = 0;\r\n if (MendingMilestone.three.isReached){\r\n player.reality.imaginaryUpgReqs += 1048576; //give Vacuum\r\n player.reality.imaginaryUpgradeBits += 1048576;\r\n }\r\n player.reality.upgReqs += 262144\r\n player.reality.upgradeBits += 262144\r\n // This gives Measure of Forever and fixes any bugs related to it\r\n player.reality.realityMachines = DC.D0;\r\n player.reality.reqLock.reality = 0;\r\n player.reality.reqLock.imaginary = 0;\r\n player.reality.imaginaryMachines = 0;\r\n player.reality.maxRM = DC.D0;\r\n player.reality.iMCap = 0;\r\n player.reality.glyphs.sac.power = DC.D0;\r\n player.reality.glyphs.sac.infinity = DC.D0;\r\n player.reality.glyphs.sac.replication = DC.D0;\r\n player.reality.glyphs.sac.time = DC.D0;\r\n player.reality.glyphs.sac.dilation = DC.D0;\r\n player.reality.glyphs.sac.effarig = DC.D0;\r\n player.reality.glyphs.sac.reality = DC.D0;\r\n player.reality.glyphs.undo = [];\r\n player.reality.perkPoints = 0;\r\n for (let i = 1; i <= 5; i++){\r\n player.reality.rebuyables[i] = MendingMilestone.four.isReached ? 5 : 0;\r\n }\r\n for (let i = 1; i <= 10; i++){\r\n player.reality.imaginaryRebuyables[i] = 0;\r\n }\r\n for (let i = 0; i < 2; i++){\r\n player.blackHole[i].intervalUpgrades = 0;\r\n player.blackHole[i].powerUpgrades = 0;\r\n if(MendingMilestone.three.isReached){\r\n player.blackHole[i].powerUpgrades = 3;\r\n }\r\n player.blackHole[i].durationUpgrades = 0;\r\n player.blackHole[i].phase = 0;\r\n player.blackHole[i].unlocked = false;\r\n player.blackHole[i].active = false;\r\n if (MendingMilestone.three.isReached){\r\n player.blackHole[i].active = true;\r\n player.blackHole[i].unlocked = true;\r\n }\r\n player.blackHole[i].activations = 0;\r\n BlackHole(i+1).powerUpgrade._lazyValue.invalidate();//exm? It turns out that this was kept all along?--sxy\r\n BlackHole(i+1).powerUpgrade._lazyCost.invalidate()\r\n }\r\n if (MendingUpgrade(4).isBought){\r\n player.reality.imaginaryUpgReqs += 32768;\r\n player.reality.imaginaryUpgradeBits += 32768;\r\n }\r\n for(let i = 0; i < 1; i++){\r\n player.expoBlackHole[i].powerUpgrades = 0;\r\n player.expoBlackHole[i].activations = 0;\r\n ExpoBlackHole(i+1).powerUpgrade._lazyValue.invalidate();//there must be a better fix for this--sxy\r\n ExpoBlackHole(i+1).powerUpgrade._lazyCost.invalidate()\r\n }\r\n //Eternity\r\n resetEternityRuns();\r\n player.respec = false;\r\n player.infinitiesBanked = DC.D0;\r\n player.eternityUpgrades.clear();\r\n Currency.eternityPoints.reset();\r\n fullResetTimeDimensions();\r\n resetTimeDimensions();\r\n Currency.eternities.reset();\r\n if (MendingUpgrade(2).isBought){\r\n Currency.eternities.bumpTo(1000000);\r\n }\r\n Currency.timeShards.reset();\r\n Currency.timeTheorems.reset();\r\n player.records.bestEternity = {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n bestEPminReality: DC.D0,\r\n },\r\n player.records.thisEternity = {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n bestIPMsWithoutMaxAll: DC.D0,\r\n bestEPmin: DC.D0,\r\n bestEPminVal: DC.D0,\r\n bestInfinitiesPerMs: DC.D0,\r\n },\r\n player.totalTickGained = 0;\r\n if (!MendingUpgrade(3).isBought){\r\n player.eternityChalls = {}\r\n }\r\n else{\r\n for (let i = 1; i <= 12; i++){\r\n EternityChallenge(i).completions = 5;\r\n }\r\n }\r\n player.eterc8ids = 50;\r\n player.eterc8repl = 40;\r\n player.dilation.studies = [];\r\n player.dilation.active = false;\r\n player.dilation.upgrades.clear();\r\n player.dilation.rebuyables = {\r\n 1: 0,\r\n 2: 0,\r\n 3: 0,\r\n 11: 0,\r\n 12: 0,\r\n 13: 0\r\n };\r\n Currency.tachyonParticles.reset();\r\n player.dilation.nextThreshold = DC.E3;\r\n player.dilation.baseTachyonGalaxies = 0;\r\n player.dilation.totalTachyonGalaxies = 0;\r\n Currency.dilatedTime.reset();\r\n player.records.thisEternity = {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n bestIPMsWithoutMaxAll: DC.D0,\r\n bestEPmin: DC.D0,\r\n bestEPminVal: DC.D0,\r\n bestInfinitiesPerMs: DC.D0,\r\n },\r\n player.dilation.lastEP = DC.DM1;\r\n player.eternityUpgrades.clear();\r\n EternityUpgrade.epMult.reset();\r\n //Infinity\r\n resetInfinityRuns();\r\n player.records.thisInfinity = {\r\n time: DC.D0,\r\n realTime: 0,\r\n lastBuyTime: DC.D0,\r\n maxAM: DC.D0,\r\n bestIPmin: DC.D0,\r\n bestIPminVal: DC.D0,\r\n },\r\n player.records.bestInfinity = {\r\n time: Decimal.pow10(Number.MAX_VALUE),\r\n realTime: Number.MAX_VALUE,\r\n bestIPminEternity: DC.D0,\r\n bestIPminReality: DC.D0,\r\n },\r\n Currency.infinityPoints.reset();\r\n InfinityDimensions.fullReset();\r\n Currency.infinities.reset();\r\n if (MendingUpgrade(2).isBought){\r\n Currency.infinities.bumpTo(1e12);\r\n }\r\n player.partInfinityPoint = 0;\r\n player.partInfinitied = 0;\r\n player.IPMultPurchases = 0;\r\n Currency.infinityPower.reset();\r\n Replicanti.reset();\r\n if(MendingUpgrade(2).isBought){\r\n player.replicanti.unl = true;\r\n }\r\n if(MendingUpgrade(2).isBought){\r\n InfinityChallenges.completeAll();\r\n }\r\n else{\r\n InfinityChallenges.clearCompletions();\r\n }\r\n playerInfinityUpgradesOnReset();\r\n player.IPMultPurchases = 0;\r\n //Pre-Infinity\r\n Currency.antimatter.reset();\r\n if(MendingMilestone.three.isReached){\r\n Currency.antimatter.bumpTo(5e130);\r\n }\r\n else{ //for some reason I still start with 10 AM even with r78 given, so this is a lazy man's fix\r\n Currency.antimatter.bumpTo(5e25);\r\n }\r\n player.dimensionBoosts = 0;\r\n player.galaxies = 0;\r\n player.sacrificed = DC.D0;\r\n AntimatterDimensions.reset();\r\n resetTickspeed();\r\n if (player.records.thisMend.realTime < player.records.bestMend.realTime){\r\n player.records.bestMend.realTime = player.records.thisMend.realTime;\r\n }\r\n if (player.records.thisMend.time.lt(player.records.bestMend.time)){\r\n player.records.bestMend.time = player.records.thisMend.time;\r\n }\r\n //Mending Timer\r\n player.records.thisMend = {\r\n time: DC.D0,\r\n realTime: 0,\r\n maxAM: DC.D0,\r\n maxIP: DC.D0,\r\n maxEP: DC.D0,\r\n maxRM: DC.D0,\r\n maxiM: 0,\r\n maxRem: 0,\r\n }\r\n \r\n // Its crucial we do this after, else the player will corrupt and instantly complete a corruption\r\n if (player.mending.corruptNext) {\r\n let corruptionZeroCheck = true;\r\n for(let i=0;i<10;i++){\r\n if(CorruptionData.corruptions[i]!=0) corruptionZeroCheck = false;\r\n };\r\n player.mending.corruptNext = false\r\n if(!corruptionZeroCheck)player.mending.corruptionChallenge.corruptedMend = true\r\n }\r\n CorruptionData.update()\r\n\r\n\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.compGlyphs.hiddenFour[player.mending.corruption[4]]>0) {\r\n let generateLevel = 6666;\r\n if(CorruptionUpgrade(12).isBought) generateLevel = 666;\r\n for(let i=0;i new MendingMilestoneState(config)\r\n );\r\n\r\n\r\n ","\r\nimport { IntervaledAutobuyerState } from \"./autobuyer\";\r\nimport { MendingMilestone } from \"../mending\";\r\n\r\nexport class DilationUpgradeAutobuyerState extends IntervaledAutobuyerState {\r\n get _upgradeName() { return [\"dtGain\", \"galaxyThreshold\", \"tachyonGain\", \"dtGainPelle\", \"galaxyMultiplier\", \"tickspeedPower\"][this.id - 1]; }\r\n\r\n get data() {\r\n return player.auto.dilationUpgrades.all[this.id - 1];\r\n }\r\n\r\n get name() {\r\n return [`Dilated Time Multiplier`, `Tachyon Galaxy Threshold`, \"Tachyon Particle Multiplier\", \"Pelle DT Multiplier\", \"Pelle TG Multiplier\", \"Tickspeed Power\"][this.id - 1];\r\n }\r\n\r\n get interval() {\r\n return 1000 * Perk.autobuyerFasterDilation.effectOrDefault(1) / PerkShopUpgrade.autoSpeed.effectOrDefault(1);\r\n }\r\n\r\n get isUnlocked() {\r\n const upgradeName = this._upgradeName;\r\n if (upgradeName == \"dtGainPelle\" || upgradeName == \"galaxyMultiplier\" || upgradeName == \"tickspeedPower\"){\r\n return MendingMilestone.two.isReached\r\n }\r\n return (Perk.autobuyerDilation.isEffectActive && !Pelle.isDoomed) || (MendingMilestone.one.isReached);\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.REALITY;\r\n }\r\n\r\n get bulk() {\r\n if (MendingMilestone.two.isReached) return 100000; //lazy man's fix until a better solution is implemented\r\n return PerkShopUpgrade.bulkDilation.effectOrDefault(1);\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n const upgradeName = this._upgradeName;\r\n DilationUpgrade[upgradeName].purchase(this.bulk);\r\n }\r\n\r\n static get entryCount() { \r\n return 6\r\n }\r\n static get autobuyerGroupName() { return \"Dilation Upgrade\"; }\r\n static get isActive() { return player.auto.dilationUpgrades.isActive; }\r\n static set isActive(value) { player.auto.dilationUpgrades.isActive = value; }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { UpgradeableAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class DimBoostAutobuyerState extends UpgradeableAutobuyerState {\r\n get data() {\r\n return player.auto.dimBoost;\r\n }\r\n\r\n get name() {\r\n return `Dimension Boost`;\r\n }\r\n\r\n get isUnlocked() {\r\n if (PlayerProgress.mendingUnlocked()) return true;\r\n if (Pelle.isDisabled(\"dimBoostAutobuyer\")) return false;\r\n return this.canBeUpgraded;\r\n }\r\n\r\n get canBeUpgraded() {\r\n return NormalChallenge(10).isCompleted || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get baseInterval() {\r\n return Player.defaultStart.auto.dimBoost.interval;\r\n }\r\n\r\n get limitDimBoosts() {\r\n return this.data.limitDimBoosts;\r\n }\r\n\r\n set limitDimBoosts(value) {\r\n this.data.limitDimBoosts = value;\r\n }\r\n\r\n get maxDimBoosts() {\r\n return this.data.maxDimBoosts;\r\n }\r\n\r\n set maxDimBoosts(value) {\r\n this.data.maxDimBoosts = value;\r\n }\r\n\r\n get limitUntilGalaxies() {\r\n return this.data.limitUntilGalaxies;\r\n }\r\n\r\n set limitUntilGalaxies(value) {\r\n this.data.limitUntilGalaxies = value;\r\n }\r\n\r\n get galaxies() {\r\n return this.data.galaxies;\r\n }\r\n\r\n set galaxies(value) {\r\n this.data.galaxies = value;\r\n }\r\n\r\n get bulk() {\r\n return this.data.bulk;\r\n }\r\n\r\n set bulk(value) {\r\n this.data.bulk = value;\r\n }\r\n\r\n get buyMaxInterval() {\r\n return this.data.buyMaxInterval;\r\n }\r\n\r\n set buyMaxInterval(value) {\r\n this.data.buyMaxInterval = value;\r\n }\r\n\r\n get isBuyMaxUnlocked() {\r\n return BreakInfinityUpgrade.autobuyMaxDimboosts.isBought;\r\n }\r\n\r\n get interval() {\r\n return this.isBuyMaxUnlocked\r\n ? TimeSpan.fromSeconds(this.buyMaxInterval).totalMilliseconds.toNumber()\r\n : super.interval;\r\n }\r\n\r\n get canTick() {\r\n return DimBoost.canBeBought && DimBoost.requirement.isSatisfied && super.canTick;\r\n }\r\n\r\n get resetTickOn() {\r\n // Before max dimboost, we want to do dimboosts as quickly as possible,\r\n // so we reset the autobuyer's timer to 0 after every galaxy.\r\n // After max dimboost, we'll generally have \"Blink of an eye\",\r\n // so doing a dimboost right after a galaxy will do a single dimboost\r\n // and then wait for the autobuyer interval to do any more dimboosts,\r\n // which seems unideal and in fact does slow getting dimboosts/galaxies\r\n // at the start of infinities down by about 20%.\r\n // After \"Yo dawg, I heard you liked reskins...\", it doesn't matter much\r\n // which we do (less than 1 tick difference, it seems).\r\n return this.isBuyMaxUnlocked ? PRESTIGE_EVENT.INFINITY : PRESTIGE_EVENT.ANTIMATTER_GALAXY;\r\n }\r\n\r\n tick() {\r\n if (this.isBuyMaxUnlocked) {\r\n const galaxyCondition = !this.limitUntilGalaxies || player.galaxies >= this.galaxies;\r\n if (!DimBoost.canUnlockNewDimension && !galaxyCondition) return;\r\n requestDimensionBoost(true);\r\n super.tick();\r\n return;\r\n }\r\n\r\n const limitCondition = !this.limitDimBoosts || DimBoost.purchasedBoosts < this.maxDimBoosts;\r\n const galaxyCondition = this.limitUntilGalaxies && player.galaxies >= this.galaxies;\r\n if (limitCondition || galaxyCondition) {\r\n requestDimensionBoost(false);\r\n super.tick();\r\n }\r\n }\r\n}\r\n","import { AutobuyerState } from \"./autobuyer\";\r\nimport { PlayerProgress } from \"../player-progress\";\r\n\r\nexport class EternityAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.eternity;\r\n }\r\n\r\n get name() {\r\n return `Eternity`;\r\n }\r\n\r\n get isUnlocked() {\r\n return EternityMilestone.autobuyerEternity.isReached || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get mode() {\r\n return this.data.mode;\r\n }\r\n\r\n set mode(value) {\r\n this.data.mode = value;\r\n }\r\n\r\n get amount() {\r\n return this.data.amount;\r\n }\r\n\r\n get increaseWithMult() {\r\n return this.data.increaseWithMult;\r\n }\r\n\r\n set increaseWithMult(value) {\r\n this.data.increaseWithMult = value;\r\n }\r\n\r\n set amount(value) {\r\n this.data.amount = value;\r\n }\r\n\r\n get time() {\r\n return this.data.time;\r\n }\r\n\r\n set time(value) {\r\n this.data.time = value;\r\n }\r\n\r\n get xHighest() {\r\n return this.data.xHighest;\r\n }\r\n\r\n set xHighest(value) {\r\n this.data.xHighest = value;\r\n }\r\n\r\n get hasAdditionalModes() {\r\n return RealityUpgrade(13).isBought;\r\n }\r\n\r\n autoEternitiesAvailable(considerMilestoneReached) {\r\n return (considerMilestoneReached || EternityMilestone.autoEternities.isReached) &&\r\n !Player.isInAnyChallenge && !player.dilation.active &&\r\n player.auto.autobuyersOn && this.data.isActive &&\r\n this.mode === AUTO_ETERNITY_MODE.AMOUNT &&\r\n this.amount.equals(0);\r\n }\r\n\r\n bumpAmount(mult) {\r\n if (this.isUnlocked && this.increaseWithMult) {\r\n this.amount = this.amount.times(mult);\r\n }\r\n }\r\n\r\n get highestPrevPrestige() {\r\n return player.records.thisReality.maxEP;\r\n }\r\n\r\n get timeToNextTick() {\r\n return Math.clampMin(this.time - Time.thisEternityRealTime.totalSeconds.toNumber(), 0);\r\n }\r\n\r\n get willEternity() {\r\n if (EternityChallenge.isRunning) {\r\n // We Eternity asap if we're in an Eternity Challenge and can't reach more completions.\r\n // Code elsewhere ensures this hasMoreCompletions evaluates to false when ready to complete the EC at all\r\n // without the ECB perk or when capped at max completions with it (and true otherwise)\r\n return !EternityChallenge.current?.gainedCompletionStatus.hasMoreCompletions;\r\n }\r\n\r\n switch (this.mode) {\r\n case AUTO_ETERNITY_MODE.AMOUNT:\r\n return gainedEternityPoints().gte(this.amount);\r\n case AUTO_ETERNITY_MODE.TIME:\r\n return Time.thisEternityRealTime.totalSeconds.gt(this.time);\r\n case AUTO_ETERNITY_MODE.X_HIGHEST:\r\n default:\r\n return gainedEternityPoints().gte(this.highestPrevPrestige.times(this.xHighest));\r\n }\r\n }\r\n\r\n tick() {\r\n if (this.willEternity) eternity(false, true);\r\n }\r\n\r\n reset() {\r\n if (!EternityMilestone.autobuyerEternity.isReached) {\r\n this.isActive = false;\r\n }\r\n }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { UpgradeableAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class GalaxyAutobuyerState extends UpgradeableAutobuyerState {\r\n get data() {\r\n return player.auto.galaxy;\r\n }\r\n\r\n get name() {\r\n return `Antimatter Galaxy`;\r\n }\r\n\r\n get isUnlocked() {\r\n if(PlayerProgress.mendingUnlocked()) return true;\r\n if (Pelle.isDisabled(\"galaxyAutobuyer\")) return false;\r\n return this.canBeUpgraded;\r\n }\r\n\r\n get canBeUpgraded() {\r\n return NormalChallenge(11).isCompleted || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get baseInterval() {\r\n return Player.defaultStart.auto.galaxy.interval;\r\n }\r\n\r\n get limitGalaxies() {\r\n return this.data.limitGalaxies;\r\n }\r\n\r\n set limitGalaxies(value) {\r\n this.data.limitGalaxies = value;\r\n }\r\n\r\n get maxGalaxies() {\r\n return this.data.maxGalaxies;\r\n }\r\n\r\n set maxGalaxies(value) {\r\n this.data.maxGalaxies = value;\r\n }\r\n\r\n get buyMaxInterval() {\r\n return this.data.buyMaxInterval;\r\n }\r\n\r\n set buyMaxInterval(value) {\r\n this.data.buyMaxInterval = value;\r\n }\r\n\r\n get isBuyMaxUnlocked() {\r\n return EternityMilestone.autobuyMaxGalaxies.isReached;\r\n }\r\n\r\n get interval() {\r\n return this.isBuyMaxUnlocked\r\n ? TimeSpan.fromSeconds(this.buyMaxInterval).totalMilliseconds.toNumber()\r\n : super.interval;\r\n }\r\n\r\n get canTick() {\r\n return Galaxy.canBeBought && Galaxy.requirement.isSatisfied && super.canTick;\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.INFINITY;\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n const limit = this.limitGalaxies ? this.maxGalaxies : Number.MAX_VALUE;\r\n requestGalaxyReset(this.isBuyMaxUnlocked, limit);\r\n }\r\n}\r\n","import { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class ImaginaryUpgradeAutobuyerState extends AutobuyerState {\r\n get name() {\r\n return ImaginaryUpgrade(this.id).config.name;\r\n }\r\n\r\n get data() {\r\n return player.auto.imaginaryUpgrades.all[this.id - 1];\r\n }\r\n\r\n get isUnlocked() {\r\n return ImaginaryUpgrade(20).canBeApplied;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n const upg = ImaginaryUpgrade(this.id);\r\n while (Currency.imaginaryMachines.gte(upg.cost)&&!(this.id<=10&&player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]])) upg.purchase();\r\n }\r\n\r\n static get entryCount() { return 10; }\r\n static get autobuyerGroupName() { return \"Imaginary Upgrade\"; }\r\n static get isActive() { return player.auto.imaginaryUpgrades.isActive; }\r\n static set isActive(value) { player.auto.imaginaryUpgrades.isActive = value; }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { IntervaledAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class InfinityDimensionAutobuyerState extends IntervaledAutobuyerState {\r\n get tier() {\r\n return this.id;\r\n }\r\n\r\n get dimension() {\r\n return InfinityDimension(this.tier);\r\n }\r\n\r\n get name() {\r\n return this.dimension.shortDisplayName;\r\n }\r\n\r\n get fullName() {\r\n return `${this.name} Infinity Dimension`;\r\n }\r\n\r\n get data() {\r\n return player.auto.infinityDims.all[this.tier - 1];\r\n }\r\n\r\n get interval() {\r\n return 1000 * Perk.autobuyerFasterID.effectOrDefault(1) / PerkShopUpgrade.autoSpeed.effectOrDefault(1);\r\n }\r\n\r\n get isUnlocked() {\r\n return EternityMilestone[`autobuyerID${this.tier}`].isReached || PelleUpgrade.IDAutobuyers.canBeApplied || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.ETERNITY;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n get canTick() {\r\n return InfinityDimensions.canAutobuy() && this.dimension.isAvailableForPurchase && super.canTick;\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n this.dimension.buyMax(true);\r\n }\r\n\r\n static get entryCount() { return 8; }\r\n static get autobuyerGroupName() { return \"Infinity Dimension\"; }\r\n static get isActive() { return player.auto.infinityDims.isActive; }\r\n static set isActive(value) { player.auto.infinityDims.isActive = value; }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class IPMultAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.ipMultBuyer;\r\n }\r\n\r\n get name() {\r\n return `Infinity Point Multiplier`;\r\n }\r\n\r\n get isUnlocked() {\r\n return (EternityMilestone.autobuyerIPMult.isReached && !Pelle.isDoomed) || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n InfinityUpgrade.ipMult.buyMax();\r\n }\r\n}\r\n\r\nexport class EPMultAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.epMultBuyer;\r\n }\r\n\r\n get name() {\r\n return `Eternity Point Multiplier`;\r\n }\r\n\r\n get isUnlocked() {\r\n return (RealityUpgrade(13).isBought && !Pelle.isDoomed) || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n // While the active check is normally automatically handled with the global autobuyer ticking method, we also\r\n // call this from the TD autobuyers in order to make sure this is executed before TDs are purchased. Simply\r\n // reordering the autobuyer call order is undesirable because much of the codebase relies on autobuyers being\r\n // grouped as they are, and many other autobuyers in the 5xEP group must execute *after* dimensions\r\n if (!this.isActive) return;\r\n applyEU2();\r\n EternityUpgrade.epMult.buyMax(true);\r\n }\r\n}\r\n","import { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class RealityAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.reality;\r\n }\r\n\r\n get name() {\r\n return `Reality`;\r\n }\r\n\r\n get isUnlocked() {\r\n return RealityUpgrade(25).isBought;\r\n }\r\n\r\n get canTick() {\r\n return super.canTick && !GlyphSelection.active;\r\n }\r\n\r\n get mode() {\r\n return this.data.mode;\r\n }\r\n\r\n set mode(value) {\r\n this.data.mode = value;\r\n }\r\n\r\n get rm() {\r\n return this.data.rm;\r\n }\r\n\r\n set rm(value) {\r\n this.data.rm = value;\r\n }\r\n\r\n get glyph() {\r\n return this.data.glyph;\r\n }\r\n\r\n set glyph(value) {\r\n this.data.glyph = value;\r\n }\r\n\r\n get time() {\r\n return this.data.time;\r\n }\r\n\r\n set time(value) {\r\n this.data.time = value;\r\n }\r\n\r\n get shard() {\r\n return this.data.shard;\r\n }\r\n\r\n // This only gets set via functions in AutobuyerInput.vue; we want to take advantage of auto-formatting when the input\r\n // is for a Decimal prop, but the actual value needs to be clamped to fit within a Number\r\n set shard(value) {\r\n this.data.shard = value.clamp(0, Number.MAX_VALUE).toNumber();\r\n }\r\n\r\n toggleMode() {\r\n this.mode = [\r\n AUTO_REALITY_MODE.RM,\r\n AUTO_REALITY_MODE.GLYPH,\r\n AUTO_REALITY_MODE.EITHER,\r\n AUTO_REALITY_MODE.BOTH,\r\n AUTO_REALITY_MODE.TIME,\r\n AUTO_REALITY_MODE.RELIC_SHARD\r\n ]\r\n .nextSibling(this.mode);\r\n }\r\n\r\n bumpAmount(mult) {\r\n if (this.isUnlocked) {\r\n this.rm = this.rm.times(mult);\r\n }\r\n }\r\n\r\n tick() {\r\n // Checking if auto-reality should trigger immediately due to bad glyph options happens at a higher priority\r\n // than everything else, preempting other settings and only checking them if it fails\r\n // In order to reduce excessive computational load, this only ever gets checked once per reality unless filter\r\n // settings are changed (which causes it to check again); otherwise, glyph choices would be generated every tick\r\n const shouldCheckFilter = EffarigUnlock.glyphFilter.isUnlocked && !player.reality.hasCheckedFilter;\r\n if (isRealityAvailable() && player.options.autoRealityForFilter && shouldCheckFilter) {\r\n const choices = GlyphSelection.glyphList(GlyphSelection.choiceCount, gainedGlyphLevel(),\r\n { isChoosingGlyph: false });\r\n const bestGlyph = AutoGlyphProcessor.pick(choices);\r\n player.reality.hasCheckedFilter = true;\r\n if (!AutoGlyphProcessor.wouldKeep(bestGlyph)) {\r\n autoReality();\r\n return;\r\n }\r\n }\r\n\r\n let proc = false;\r\n // The game generally displays amplified values, so we want to adjust the thresholds to\r\n // account for that and make the automation trigger based on the actual displayed values\r\n const ampFactor = simulatedRealityCount(false) + 1;\r\n const rmProc = MachineHandler.gainedRealityMachines.times(ampFactor).gte(this.rm);\r\n const glyphProc = gainedGlyphLevel().actualLevel >= Math.min(this.glyph, Glyphs.levelCap);\r\n switch (this.mode) {\r\n case AUTO_REALITY_MODE.RM:\r\n proc = rmProc;\r\n break;\r\n case AUTO_REALITY_MODE.GLYPH:\r\n proc = glyphProc;\r\n break;\r\n case AUTO_REALITY_MODE.EITHER:\r\n proc = rmProc || glyphProc;\r\n break;\r\n case AUTO_REALITY_MODE.BOTH:\r\n proc = rmProc && glyphProc;\r\n break;\r\n case AUTO_REALITY_MODE.TIME:\r\n proc = new Decimal(player.records.thisReality.realTime).toNumber() / 1000 > this.time;\r\n break;\r\n case AUTO_REALITY_MODE.RELIC_SHARD:\r\n proc = Effarig.shardsGained.times(ampFactor).gt(this.shard);\r\n break;\r\n }\r\n if (proc) autoReality();\r\n }\r\n}\r\n","import { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class RealityUpgradeAutobuyerState extends AutobuyerState {\r\n get name() {\r\n return RealityUpgrade(this.id).config.name;\r\n }\r\n\r\n get data() {\r\n return player.auto.realityUpgrades.all[this.id - 1];\r\n }\r\n\r\n get isUnlocked() {\r\n if (MendingMilestone.three.isReached){\r\n return true;\r\n }\r\n return Ra.unlocks.instantECAndRealityUpgradeAutobuyers.canBeApplied;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n const upg = RealityUpgrade(this.id);\r\n while (Currency.realityMachines.gte(upg.cost)&&!(this.id<=5&&player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]])) upg.purchase();\r\n }\r\n\r\n static get entryCount() { return 5; }\r\n static get autobuyerGroupName() { return \"Reality Upgrade\"; }\r\n static get isActive() { return player.auto.realityUpgrades.isActive; }\r\n static set isActive(value) { player.auto.realityUpgrades.isActive = value; }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class ReplicantiGalaxyAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.replicantiGalaxies;\r\n }\r\n\r\n get name() {\r\n return `Replicanti Galaxy`;\r\n }\r\n\r\n get isUnlocked() {\r\n return EternityMilestone.autobuyerReplicantiGalaxy.isReached || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get isEnabled() {\r\n return Achievement(138).isUnlocked || !TimeStudy(131).isBought;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return Achievement(126).isUnlocked;\r\n }\r\n\r\n tick() {\r\n if (!this.isEnabled) return;\r\n replicantiGalaxy(true);\r\n }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { IntervaledAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class ReplicantiUpgradeAutobuyerState extends IntervaledAutobuyerState {\r\n get _upgradeName() { return [\"chance\", \"interval\", \"galaxies\"][this.id - 1]; }\r\n\r\n get name() {\r\n return `Replicanti ${[`Chance`, `Interval`, `Max Galaxies`][this.id - 1]}`;\r\n }\r\n\r\n get data() {\r\n return player.auto.replicantiUpgrades.all[this.id - 1];\r\n }\r\n\r\n get interval() {\r\n return 1000 * Perk.autobuyerFasterReplicanti.effectOrDefault(1) / PerkShopUpgrade.autoSpeed.effectOrDefault(1);\r\n }\r\n\r\n get isUnlocked() {\r\n return ReplicantiUpgrade[this._upgradeName].autobuyerMilestone.isReached ||\r\n PelleUpgrade.replicantiAutobuyers.canBeApplied || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.ETERNITY;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n if (EternityChallenge(8).isRunning) return;\r\n super.tick();\r\n ReplicantiUpgrade[this._upgradeName].autobuyerTick();\r\n }\r\n\r\n static get entryCount() { return 3; }\r\n static get autobuyerGroupName() { return \"Replicanti Upgrade\"; }\r\n static get isActive() { return player.auto.replicantiUpgrades.isActive; }\r\n static set isActive(value) { player.auto.replicantiUpgrades.isActive = value; }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class SacrificeAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.sacrifice;\r\n }\r\n\r\n get name() {\r\n return `Dimensional Sacrifice`;\r\n }\r\n\r\n get isUnlocked() {\r\n return EternityMilestone.autoIC.isReached || InfinityChallenge(2).isCompleted || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get multiplier() {\r\n return this.data.multiplier;\r\n }\r\n\r\n set multiplier(value) {\r\n this.data.multiplier = value;\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n get hasInput() {\r\n return true;\r\n }\r\n\r\n get inputType() {\r\n return \"decimal\";\r\n }\r\n\r\n get inputEntry() {\r\n return \"multiplier\";\r\n }\r\n\r\n get description() {\r\n return \"Multiplier\";\r\n }\r\n\r\n tick() {\r\n if (Sacrifice.nextBoost.lt(Decimal.max(this.multiplier, 1.01))) return;\r\n sacrificeReset();\r\n }\r\n}\r\n","import { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class SingularityAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.singularity;\r\n }\r\n\r\n get name() {\r\n return `Singularity`;\r\n }\r\n\r\n get isUnlocked() {\r\n return SingularityMilestone.autoCondense.canBeApplied || player.celestials.ra.permanentMemories.lai65;\r\n }\r\n\r\n get bulk() {\r\n return Singularity.singularitiesGained;\r\n }\r\n\r\n tick() {\r\n if (Currency.darkEnergy.value >= Singularity.cap * SingularityMilestone.autoCondense.effectValue) {\r\n Singularity.perform();\r\n }\r\n }\r\n}\r\n","import { DC } from \"../constants\";\r\nimport { PlayerProgress } from \"../player-progress\";\r\n\r\nimport { UpgradeableAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class TickspeedAutobuyerState extends UpgradeableAutobuyerState {\r\n get data() {\r\n return player.auto.tickspeed;\r\n }\r\n\r\n get name() {\r\n return `Tickspeed`;\r\n }\r\n\r\n get isUnlocked() {\r\n if (PlayerProgress.mendingUnlocked()) return true;\r\n else if (Pelle.isDisabled(\"tickspeedAutobuyer\")) return false;\r\n return this.canBeUpgraded;\r\n }\r\n\r\n get canBeUpgraded() {\r\n return NormalChallenge(9).isCompleted || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get baseInterval() {\r\n return Player.defaultStart.auto.tickspeed.interval;\r\n }\r\n\r\n get isBought() {\r\n return this.data.isBought;\r\n }\r\n\r\n get antimatterCost() {\r\n return DC.E140;\r\n }\r\n\r\n get canBeBought() {\r\n return !Pelle.isDoomed || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get disabledByContinuum() {\r\n return Laitela.continuumActive;\r\n }\r\n\r\n get mode() {\r\n return this.data.mode;\r\n }\r\n\r\n set mode(value) {\r\n this.data.mode = value;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return this.mode === AUTOBUYER_MODE.BUY_MAX;\r\n }\r\n\r\n get canUnlockSlowVersion() {\r\n return player.records.thisEternity.maxAM.gte(this.antimatterCost);\r\n }\r\n\r\n toggleMode() {\r\n this.mode = [\r\n AUTOBUYER_MODE.BUY_SINGLE,\r\n AUTOBUYER_MODE.BUY_MAX\r\n ]\r\n .nextSibling(this.mode);\r\n }\r\n\r\n get canTick() {\r\n return Tickspeed.isAvailableForPurchase && Tickspeed.isAffordable && super.canTick;\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n switch (this.mode) {\r\n case AUTOBUYER_MODE.BUY_SINGLE:\r\n buyTickSpeed();\r\n break;\r\n case AUTOBUYER_MODE.BUY_MAX:\r\n buyMaxTickSpeed();\r\n break;\r\n }\r\n }\r\n\r\n purchase() {\r\n if (!this.canUnlockSlowVersion) return;\r\n this.data.isBought = true;\r\n }\r\n\r\n get resetTickOn() {\r\n return Perk.antimatterNoReset.canBeApplied ? PRESTIGE_EVENT.ANTIMATTER_GALAXY : PRESTIGE_EVENT.DIMENSION_BOOST;\r\n }\r\n\r\n reset() {\r\n super.reset();\r\n if (EternityMilestone.keepAutobuyers.isReached || PelleUpgrade.keepAutobuyers.canBeApplied) return;\r\n this.data.mode = AUTOBUYER_MODE.BUY_SINGLE;\r\n this.data.isUnlocked = false;\r\n this.data.isBought = false;\r\n TabNotification.newAutobuyer.clearTrigger();\r\n }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { IntervaledAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class TimeDimensionAutobuyerState extends IntervaledAutobuyerState {\r\n get tier() {\r\n return this.id;\r\n }\r\n\r\n get name() {\r\n return TimeDimension(this.tier).shortDisplayName;\r\n }\r\n\r\n get fullName() {\r\n return `${this.name} Time Dimension`;\r\n }\r\n\r\n get data() {\r\n return player.auto.timeDims.all[this.tier - 1];\r\n }\r\n\r\n get interval() {\r\n return 1000 / PerkShopUpgrade.autoSpeed.effectOrDefault(1);\r\n }\r\n\r\n get isUnlocked() {\r\n return (RealityUpgrade(13).isBought && (!Pelle.isDoomed || PelleUpgrade.TDAutobuyers.canBeApplied)) || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.REALITY;\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return true;\r\n }\r\n\r\n tick() {\r\n // We specifically call these two things before actually running the TD autobuyer code because that behavior\r\n // is desirable to gameplay, but simply reordering the autobuyers overall has undesired side-effects. There\r\n // are checks internal to these calls which ensure that they don't trigger even when still locked\r\n applyEU2();\r\n Autobuyer.epMult.tick();\r\n\r\n const tier = this.tier;\r\n if (!TimeDimension(tier).isAvailableForPurchase) return;\r\n super.tick();\r\n if (Currency.eternityPoints.exponent >= 10) {\r\n buyMaxTimeDimension(tier, 1, true);\r\n } else {\r\n buySingleTimeDimension(tier, true);\r\n }\r\n }\r\n\r\n static get entryCount() { return 8; }\r\n static get autobuyerGroupName() { return \"Time Dimension\"; }\r\n static get isActive() { return player.auto.timeDims.isActive; }\r\n static set isActive(value) { player.auto.timeDims.isActive = value; }\r\n}\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class TimeTheoremAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.timeTheorems;\r\n }\r\n\r\n get name() {\r\n return `Time Theorem`;\r\n }\r\n\r\n get isUnlocked() {\r\n return (Perk.ttBuySingle.isBought && !Pelle.isDisabled(\"timeTheoremAutobuyer\")) || PlayerProgress.mendingUnlocked();\r\n }\r\n\r\n get hasUnlimitedBulk() {\r\n return Perk.ttBuyMax.canBeApplied;\r\n }\r\n\r\n tick() {\r\n if (this.hasUnlimitedBulk) TimeTheorems.buyMax(true);\r\n else TimeTheorems.buyOneOfEach();\r\n }\r\n}\r\n","import { BitUpgradeState } from \"../game-mechanics\";\r\nimport wordShift from \"../word-shift\";\r\n\r\nexport const Quote = {\r\n addToQueue(quote) {\r\n ui.view.quotes.queue.push(quote);\r\n if (!ui.view.quotes.current) this.advanceQueue();\r\n },\r\n advanceQueue() {\r\n ui.view.quotes.current = ui.view.quotes.queue.shift();\r\n },\r\n showHistory(history) {\r\n ui.view.quotes.history = history;\r\n },\r\n clearQueue() {\r\n ui.view.quotes.queue = [];\r\n ui.view.quotes.current = undefined;\r\n },\r\n clearHistory() {\r\n ui.view.quotes.history = undefined;\r\n },\r\n clearAll() {\r\n this.clearQueue();\r\n this.clearHistory();\r\n },\r\n get isOpen() {\r\n return ui.view.quotes.current !== undefined;\r\n },\r\n get isHistoryOpen() {\r\n return ui.view.quotes.history !== undefined;\r\n }\r\n};\r\n\r\n// Gives an array specifying proportions of celestials to blend together on the modal, as a function of time, to\r\n// provide a smoother transition between different celestials to reduce potential photosensitivity issues\r\nfunction blendCel(cels) {\r\n const totalTime = cels.map(cel => cel[1]).sum();\r\n const tick = (Date.now() / 1000) % totalTime;\r\n\r\n // Blend the first blendTime seconds with the previous celestial and the last blendTime seconds with the next;\r\n // note that this results in a total transition time of 2*blendTime. We specifically set this to be half the duration\r\n // of the first entry - this is because in the case of all intervals having the same duration, this guarantees two\r\n // blended entries at all points in time.\r\n const blendTime = cels[0][1] / 2;\r\n let start = 0;\r\n for (let index = 0; index < cels.length; index++) {\r\n const prevCel = cels[(index + cels.length - 1) % cels.length], currCel = cels[index],\r\n nextCel = cels[(index + 1) % cels.length];\r\n\r\n // Durations of time from after last transition and after next transition. May be negative, which is how we\r\n // check to see if we're in the correct time interval (last should be positive, next should be negative)\r\n const lastTime = tick - start, nextTime = lastTime - currCel[1];\r\n if (nextTime > 0) {\r\n start += currCel[1];\r\n continue;\r\n }\r\n\r\n if (lastTime <= blendTime) {\r\n const t = 0.5 * lastTime / blendTime;\r\n return [[prevCel[0], 0.5 - t], [currCel[0], 0.5 + t]];\r\n }\r\n if (-nextTime <= blendTime) {\r\n const t = 0.5 * nextTime / blendTime;\r\n return [[currCel[0], 0.5 - t], [nextCel[0], 0.5 + t]];\r\n }\r\n\r\n // In principle the animation properties should never get to this return case, but we leave it here just in case -\r\n // the worst side-effect of reaching here is that some UI elements may appear to lose click detection for a\r\n // fraction of a second when transitioning from two blended entries to one\r\n return [[currCel[0], 1]];\r\n }\r\n throw new Error(\"Could not blend celestial fractions in Quote modal\");\r\n}\r\n\r\nclass QuoteLine {\r\n constructor(line, parent) {\r\n this._parent = parent;\r\n this._showCelestialName = line.showCelestialName ?? true;\r\n\r\n this._celestialArray = line.background\r\n ? () => blendCel(line.background)\r\n : [[parent.celestial, 1]];\r\n\r\n const replacementMatch = /\\$(\\d+)/gu;\r\n\r\n this._line = typeof line === \"string\"\r\n ? line\r\n // This matches each digit after a $ and replaces it with the wordCycle of an array with the digit it matched.\r\n : () => line.text.replaceAll(replacementMatch, (_, i) => wordShift.wordCycle(line[i]));\r\n }\r\n\r\n get line() {\r\n return typeof this._line === \"function\" ? this._line() : this._line;\r\n }\r\n\r\n get celestials() {\r\n return typeof this._celestialArray === \"function\" ? this._celestialArray() : this._celestialArray;\r\n }\r\n\r\n get celestialSymbols() {\r\n return this.celestials.map(c => Celestials[c[0]].symbol);\r\n }\r\n\r\n get showCelestialName() {\r\n return this._showCelestialName;\r\n }\r\n\r\n get celestialName() {\r\n return Celestials[this._parent.celestial].displayName;\r\n }\r\n}\r\n\r\nclass CelQuotes extends BitUpgradeState {\r\n constructor(config, celestial) {\r\n super(config);\r\n this._celestial = celestial;\r\n this._lines = config.lines.map(line => new QuoteLine(line, this));\r\n }\r\n\r\n get bits() { return player.celestials[this._celestial].quoteBits; }\r\n set bits(value) { player.celestials[this._celestial].quoteBits = value; }\r\n\r\n get requirement() {\r\n // If requirement is defined, it is always a function returning a boolean.\r\n return this.config.requirement?.();\r\n }\r\n\r\n get celestial() {\r\n return this._celestial;\r\n }\r\n\r\n line(id) {\r\n return this._lines[id];\r\n }\r\n\r\n get totalLines() {\r\n return this._lines.length;\r\n }\r\n\r\n show() { this.unlock(); }\r\n onUnlock() { this.present(); }\r\n\r\n present() {\r\n Quote.addToQueue(this);\r\n }\r\n}\r\n\r\n\r\nexport const Quotes = {\r\n teresa: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.teresa,\r\n config => new CelQuotes(config, \"teresa\")\r\n ),\r\n effarig: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.effarig,\r\n config => new CelQuotes(config, \"effarig\")\r\n ),\r\n enslaved: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.enslaved,\r\n config => new CelQuotes(config, \"enslaved\")\r\n ),\r\n v: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.v,\r\n config => new CelQuotes(config, \"v\")\r\n ),\r\n ra: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.ra,\r\n config => new CelQuotes(config, \"ra\")\r\n ),\r\n laitela: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.laitela,\r\n config => new CelQuotes(config, \"laitela\")\r\n ),\r\n pelle: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.pelle,\r\n config => new CelQuotes(config, \"pelle\")\r\n ),\r\n destroyer: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.destroyer,\r\n config => new CelQuotes(config, \"destroyer\")\r\n ),\r\n kohler: mapGameDataToObject(\r\n GameDatabase.celestials.quotes.kohler,\r\n config => new CelQuotes(config, \"kohler\")\r\n ),\r\n};\r\n","import { CorruptionUpgrade } from \"../corruption-upgrades\";\r\nimport { BitUpgradeState } from \"../game-mechanics\";\r\nimport { GameDatabase } from \"../secret-formula/game-database\";\r\n\r\nimport { Quotes } from \"./quotes\";\r\n\r\nexport const ENSLAVED_UNLOCKS = {\r\n FREE_TICKSPEED_SOFTCAP: {\r\n id: 0,\r\n price: TimeSpan.fromYears(1e35).totalMilliseconds,\r\n secondaryRequirement: () => true,\r\n description: () => `Increase the softcap to Tickspeed upgrades from Time Dimensions by ${formatInt(1e5)}`,\r\n },\r\n RUN: {\r\n id: 1,\r\n price: TimeSpan.fromYears(1e40).totalMilliseconds,\r\n secondaryRequirement() {\r\n const hasLevelRequirement = player.records.bestReality.glyphLevel >= 5000;\r\n const hasRarityRequirement = strengthToRarity(player.records.bestReality.glyphStrength) >= 100;\r\n return hasLevelRequirement && hasRarityRequirement;\r\n },\r\n description() {\r\n const hasLevelRequirement = player.records.bestReality.glyphLevel >= 5000;\r\n const hasRarityRequirement = strengthToRarity(player.records.bestReality.glyphStrength) >= 100;\r\n return `Unlock The Nameless Ones' Reality (requires ${hasLevelRequirement ? \"[✓]\" : \"[✗]\"} a level\r\n ${formatInt(5000)} Glyph and ${hasRarityRequirement ? \"[✓]\" : \"[✗]\"} a ${formatRarity(100)} rarity Glyph)`;\r\n }\r\n }\r\n};\r\n\r\nexport const Enslaved = {\r\n displayName: \"The Nameless Ones\",\r\n possessiveName: \"The Nameless Ones'\",\r\n boostReality: false,\r\n BROKEN_CHALLENGES: [2, 3, 4, 5, 7, 8, 10, 11, 12],\r\n nextTickDiff: 50,\r\n isReleaseTick: false,\r\n autoReleaseTick: 0,\r\n autoReleaseSpeed: new Decimal(0),\r\n timeCap: () => (player.celestials.ra.pets.enslaved.level >= 30 ? Decimal.pow10(1e300) : new Decimal(1e300)),\r\n glyphLevelMin: 5000,\r\n currentBlackHoleStoreAmountPerMs: new Decimal(0),\r\n tachyonNerf: 0.3,\r\n toggleStoreBlackHole() {\r\n if (!this.canModifyGameTimeStorage) return;\r\n player.celestials.enslaved.isStoring = !player.celestials.enslaved.isStoring;\r\n player.celestials.enslaved.isStoringReal = false;\r\n },\r\n toggleStoreReal() {\r\n if (!this.canModifyRealTimeStorage && !this.isStoredRealTimeCapped) return;\r\n player.celestials.enslaved.isStoringReal = !player.celestials.enslaved.isStoringReal;\r\n player.celestials.enslaved.isStoring = false;\r\n },\r\n toggleAutoStoreReal() {\r\n if (!this.canModifyRealTimeStorage) return;\r\n player.celestials.enslaved.autoStoreReal = !player.celestials.enslaved.autoStoreReal;\r\n },\r\n get canModifyGameTimeStorage() {\r\n return Enslaved.isUnlocked && !Pelle.isDoomed && !BlackHoles.arePaused && !EternityChallenge(12).isRunning &&\r\n !Enslaved.isRunning && !Laitela.isRunning;\r\n },\r\n get canModifyRealTimeStorage() {\r\n return Enslaved.isUnlocked && !Pelle.isDoomed;\r\n },\r\n get isStoredRealTimeCapped() {\r\n return player.celestials.enslaved.storedReal < this.storedRealTimeCap;\r\n },\r\n // We assume that the situations where you can't modify time storage settings (of either type) are exactly the cases\r\n // where they have also been explicitly disabled via other game mechanics. This also reduces UI boilerplate code.\r\n // Note that we force time storage when auto-releasing, as not doing so caused a lot of poor usability issues\r\n get isStoringGameTime() {\r\n return this.canModifyGameTimeStorage && (this.isAutoReleasing || player.celestials.enslaved.isStoring);\r\n },\r\n get isStoringRealTime() {\r\n return this.canModifyRealTimeStorage && player.celestials.enslaved.isStoringReal;\r\n },\r\n get storedRealTimeEfficiency() {\r\n if (MendingUpgrade(7).isBought) return 5;\r\n return 0.7;\r\n },\r\n get storedRealTimeCap() {\r\n const addedCap = Ra.unlocks.improvedStoredTime.effects.realTimeCap.effectOrDefault(0);\r\n return 1000 * 3600 * 8 + addedCap;\r\n },\r\n get isAutoReleasing() {\r\n return player.celestials.enslaved.isAutoReleasing && !BlackHoles.areNegative && !Pelle.isDisabled(\"blackhole\");\r\n },\r\n storeRealTime() {\r\n if (Pelle.isDoomed) return;\r\n const thisUpdate = Date.now();\r\n const diff = Math.max(thisUpdate - player.lastUpdate, 0);\r\n const efficiency = this.storedRealTimeEfficiency;\r\n const maxTime = this.storedRealTimeCap;\r\n player.celestials.enslaved.storedReal += diff * efficiency;\r\n if (player.celestials.enslaved.storedReal > maxTime) {\r\n player.celestials.enslaved.isStoringReal = false;\r\n player.celestials.enslaved.storedReal = maxTime;\r\n }\r\n // More than 24 hours in milliseconds\r\n if (player.celestials.enslaved.storedReal > (24 * 60 * 60 * 1000)) SecretAchievement(46).unlock();\r\n player.lastUpdate = thisUpdate;\r\n },\r\n autoStoreRealTime(diffMs) {\r\n const maxGain = this.storedRealTimeCap - player.celestials.enslaved.storedReal;\r\n const used = Math.min(diffMs, Math.max(0, maxGain / this.storedRealTimeEfficiency));\r\n player.celestials.enslaved.storedReal += used * this.storedRealTimeEfficiency;\r\n player.lastUpdate += used;\r\n return diffMs - used;\r\n },\r\n canRelease(auto) {\r\n return !Enslaved.isStoringRealTime && !EternityChallenge(12).isRunning && !Laitela.isRunning &&\r\n !(Enslaved.isRunning && auto) && !Pelle.isDoomed;\r\n },\r\n // \"autoRelease\" should only be true when called with the Ra upgrade\r\n useStoredTime(autoRelease) {\r\n if (!this.canRelease(autoRelease)) return;\r\n const maxInversion = player.requirementChecks.reality.slowestBH <= 1e-300;\r\n if (ImaginaryUpgrade(24).isLockingMechanics && Ra.isRunning && maxInversion) {\r\n if (!autoRelease) ImaginaryUpgrade(24).tryShowWarningModal(\"discharge your Black Hole\");\r\n return;\r\n }\r\n player.requirementChecks.reality.slowestBH = 1;\r\n let release = player.celestials.enslaved.stored;\r\n if (Enslaved.isRunning) {\r\n release = Enslaved.storedTimeInsideEnslaved(release);\r\n if (Time.thisReality.totalYears + TimeSpan.fromMilliseconds(release).totalYears > 1) {\r\n EnslavedProgress.storedTime.giveProgress();\r\n }\r\n }\r\n if (autoRelease) release = release.times(0.01);\r\n this.nextTickDiff = Decimal.clampMax(release, this.timeCap());\r\n this.isReleaseTick = true;\r\n // Effective gamespeed from stored time assumes a \"default\" 50 ms update rate for consistency\r\n const effectiveGamespeed = release.div(50);\r\n player.celestials.ra.peakGamespeed = Decimal.max(player.celestials.ra.peakGamespeed, effectiveGamespeed);\r\n this.autoReleaseSpeed = release.div(player.options.updateRate * 5);\r\n player.celestials.enslaved.stored = player.celestials.enslaved.stored.times(autoRelease ? 0.99 : 0);\r\n },\r\n has(info) {\r\n return player.celestials.enslaved.unlocks.includes(info.id);\r\n },\r\n canBuy(info) {\r\n return new Decimal(player.celestials.enslaved.stored).gte(info.price) && info.secondaryRequirement() && !this.has(info);\r\n },\r\n buyUnlock(info) {\r\n if (!this.canBuy(info)) return false;\r\n if (info.id === ENSLAVED_UNLOCKS.RUN.id) this.quotes.unlockRun.show();\r\n player.celestials.enslaved.stored = player.celestials.enslaved.stored.sub(info.price);\r\n player.celestials.enslaved.unlocks.push(info.id);\r\n return true;\r\n },\r\n initializeRun() {\r\n clearCelestialRuns();\r\n player.celestials.enslaved.run = true;\r\n player.celestials.enslaved.hasSecretStudy = false;\r\n this.feltEternity = false;\r\n\r\n // Re-validation needs to be done here because this code gets called after the automator attempts to start.\r\n // This is a special case for Nameless because it's one of the only two cases where a command becomes locked\r\n // again (the other being Pelle entry, which just force-stops the automator entirely).\r\n AutomatorData.recalculateErrors();\r\n if (AutomatorBackend.state.mode === AUTOMATOR_MODE.RUN && AutomatorData.currentErrors().length) {\r\n AutomatorBackend.stop();\r\n GameUI.notify.error(\"This Reality forbids Black Holes! (Automator stopped)\");\r\n }\r\n\r\n this.quotes.startRun.show();\r\n },\r\n get isRunning() {\r\n return player.celestials.enslaved.run;\r\n },\r\n completeRun() {\r\n player.celestials.enslaved.completed = true;\r\n if (EternityChallenge(1).completions > 5){\r\n EternityChallenge(1).completions = 5;\r\n }\r\n this.quotes.completeReality.show();\r\n },\r\n get isCompleted() {\r\n return player.celestials.enslaved.completed;\r\n },\r\n get canTickHintTimer() {\r\n return !EnslavedProgress.hintsUnlocked.hasProgress && Enslaved.has(ENSLAVED_UNLOCKS.RUN) && !Enslaved.isCompleted;\r\n },\r\n get isUnlocked() {\r\n return EffarigUnlock.eternity.isUnlocked;\r\n },\r\n get realityBoostRatio() {\r\n return Math.max(1, Math.floor(player.celestials.enslaved.storedReal /\r\n Decimal.max(1000, Time.thisRealityRealTime.totalMilliseconds).toNumber()));\r\n },\r\n get canAmplify() {\r\n return this.realityBoostRatio > 1 && !Pelle.isDoomed && !isInCelestialReality();\r\n },\r\n storedTimeInsideEnslaved(stored) {\r\n if (stored.lt(1e3)) return stored;\r\n return Decimal.pow(10, Decimal.pow(Decimal.log10(stored.div(1e3), 0.55))).times(1e3);\r\n },\r\n feelEternity() {\r\n if (this.feltEternity) {\r\n Modal.message.show(`You have already exposed this crack in the Reality. Time in this Eternity is being multiplied\r\n by your Eternity count, up to a maximum of ${formatX(1e66)}.`,\r\n { closeEvent: GAME_EVENT.REALITY_RESET_AFTER }, 1);\r\n } else {\r\n EnslavedProgress.feelEternity.giveProgress();\r\n this.feltEternity = true;\r\n Modal.message.show(`Time in this Eternity will be multiplied by your Eternity count,\r\n up to a maximum of ${formatX(1e66)}.`, { closeEvent: GAME_EVENT.REALITY_RESET_AFTER }, 1);\r\n }\r\n },\r\n get feltEternity() {\r\n return player.celestials.enslaved.feltEternity;\r\n },\r\n set feltEternity(value) {\r\n player.celestials.enslaved.feltEternity = value;\r\n },\r\n get nextHintCost() {\r\n return TimeSpan.fromYears(1e40 * Math.pow(3, this.hintCostIncreases)).totalMilliseconds;\r\n },\r\n get hintCostIncreases() {\r\n const hintTime = player.celestials.enslaved.zeroHintTime - Date.now();\r\n return Math.clampMin(hintTime / TimeSpan.fromDays(1).totalMilliseconds, 0);\r\n },\r\n spendTimeForHint() {\r\n if (player.celestials.enslaved.stored.lt(this.nextHintCost)) return false;\r\n player.celestials.enslaved.stored = player.celestials.enslaved.stored.sub(this.nextHintCost);\r\n if (Enslaved.hintCostIncreases === 0) {\r\n player.celestials.enslaved.zeroHintTime = Date.now() + TimeSpan.fromDays(1).totalMilliseconds.toNumber();\r\n } else {\r\n player.celestials.enslaved.zeroHintTime += TimeSpan.fromDays(1).totalMilliseconds.toNunber();\r\n }\r\n return true;\r\n },\r\n quotes: Quotes.enslaved,\r\n // Unicode f0c1.\r\n symbol: \"\\uf0c1\"\r\n};\r\n\r\nclass EnslavedProgressState extends BitUpgradeState {\r\n get bits() { return player.celestials.enslaved.hintBits; }\r\n set bits(value) { player.celestials.enslaved.hintBits = value; }\r\n\r\n get hasProgress() {\r\n return Boolean(player.celestials.enslaved.progressBits & (1 << this.id));\r\n }\r\n\r\n get hasHint() {\r\n return this.hasProgress || this.isUnlocked;\r\n }\r\n\r\n get hintInfo() {\r\n return this.config.hint;\r\n }\r\n\r\n get completedInfo() {\r\n return typeof this.config.condition === \"function\" ? this.config.condition() : this.config.condition;\r\n }\r\n\r\n giveProgress() {\r\n // Bump the last hint time appropriately if the player found the hint\r\n if (this.hasHint && !this.hasProgress) {\r\n player.celestials.enslaved.zeroHintTime -= Math.log(2) / Math.log(3) * TimeSpan.fromDays(1).totalMilliseconds;\r\n GameUI.notify.success(\"You found a crack in The Nameless Ones' Reality!\", 10000);\r\n }\r\n player.celestials.enslaved.progressBits |= (1 << this.id);\r\n }\r\n}\r\n\r\nexport const EnslavedProgress = mapGameDataToObject(\r\n GameDatabase.celestials.enslaved.progress,\r\n config => new EnslavedProgressState(config)\r\n);\r\n\r\nexport const Tesseracts = {\r\n get bought() {\r\n return player.celestials.enslaved.tesseracts;\r\n },\r\n\r\n get extra() {\r\n return this.bought * (SingularityMilestone.tesseractMultFromSingularities.effectOrDefault(1)*CorruptionUpgrade(8).effectOrDefault(1) - 1);\r\n },\r\n\r\n get effectiveCount() {\r\n return this.bought + this.extra;\r\n },\r\n\r\n buyTesseract() {\r\n if (!this.canBuyTesseract) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n player.celestials.enslaved.tesseracts++;\r\n },\r\n\r\n // This used to be a somewhat complicated function which spaced costs out super-exponentially, but the decision to\r\n // hardcap all resources (as feasible) to e9e15 meant that in practice only the first 10 or so could actually be\r\n // obtained. Changing the function to a hardcoded array is better for understanding the code since it's small.\r\n // Note that costs go a bit past e9e15 because while AM is capped at e9e15, most other resources (including IP)\r\n // aren't and can go a tiny bit past it.\r\n // The formula is a hardcoded 2, 4, 6 followed by successive multiplication by 2x, 4x, 6x, and so on.\r\n\r\n // Hello This needs to be scaled. Well ofc the original scale is not enough for scalling so after 15 I decide to do something bigger.---sxy\r\n //11771943321600 is the 15th\r\n //BASE_COSTS: [2, 4, 6, 12, 48, 288, 2304, 23040, 276480, 3870720, 61931520, 1114767360],\r\n //COST_SCALER: [0, 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18],\r\n\r\n //This is my former design of scaled Tesseract, but since the reason of inflation happened on 8th ID, I would temporarily disable this.---sxy\r\n //BASE_COSTS: [2, 4, 6, 12, 48, 288, 2304, 23040, 276480, 3870720, 61931520, 1114767360, 22295347200, 490497638400, 11771943321600],\r\n //COST_SCALER: [0, 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24],\r\n //costs(index) {\r\n // while (index >= this.BASE_COSTS.length) {\r\n // let TesseractScaler = this.COST_SCALER[this.COST_SCALER.length-1] + Decimal.pow(index-13,index-13).toNumber() * Math.pow(index-14,index-14);\r\n // let nextTesseractCost = this.BASE_COSTS[this.BASE_COSTS.length-1] * TesseractScaler;\r\n // this.BASE_COSTS.push(nextTesseractCost)\r\n // this.COST_SCALER.push(TesseractScaler)\r\n // }\r\n // return Decimal.pow10(1e7 * this.BASE_COSTS[Math.floor(index)]);\r\n //},\r\n\r\n BASE_COSTS: [2, 4, 6, 12, 48, 288, 2304, 23040, 276480, 3870720, 61931520, 1114767360],\r\n COST_SCALER: [0, 0, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18],\r\n costs(index) {\r\n while (index >= this.BASE_COSTS.length) {\r\n let TesseractScaler = this.COST_SCALER[this.COST_SCALER.length-1] + 2;\r\n let nextTesseractCost = this.BASE_COSTS[this.BASE_COSTS.length-1] * TesseractScaler;\r\n this.BASE_COSTS.push(nextTesseractCost)\r\n this.COST_SCALER.push(TesseractScaler)\r\n }\r\n return Decimal.pow10(1e7 * this.BASE_COSTS[Math.floor(index)]);\r\n },\r\n\r\n get nextCost() {\r\n return this.costs(this.bought);\r\n },\r\n\r\n get TesseractHardcap(){\r\n return 50\r\n },\r\n\r\n get canBuyTesseract() {\r\n return Enslaved.isCompleted && Currency.infinityPoints.gte(Tesseracts.nextCost) && this.bought {\r\n if (Tab.celestials.enslaved.isOpen) Enslaved.quotes.initial.show();\r\n});\r\n","import { PlayerProgress } from \"../player-progress\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\nimport { MendingUpgrade } from \"../mending-upgrades\";\r\nimport { Tesseracts } from \"../celestials/enslaved\";\r\nexport class TesseractAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.tesseract;\r\n }\r\n\r\n get name() {\r\n return `Tesseract`;\r\n }\r\n\r\n get isUnlocked() {\r\n return MendingUpgrade(7).isBought;\r\n }\r\n\r\n get isEnabled() {\r\n return true\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n tick() {\r\n Tesseracts.buyTesseract()\r\n}\r\n\r\n}","import { AutobuyerState } from \"./autobuyer\";\r\nimport { GlyphSacrificeHandler, MendingMilestone } from \"../globals\";\r\n\r\nexport class MusicGlyphAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.musicglyph;\r\n }\r\n\r\n get name() {\r\n return `Auto Purchase and Purge Music Glyphs`;\r\n }\r\n\r\n get isUnlocked() {\r\n return MendingMilestone.seven.isReached;\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n tick() {\r\n if (Currency.perkPoints.gt(0)) {\r\n GlyphSacrificeHandler.removeGlyph(GlyphGenerator.musicGlyph(), true)\r\n Currency.perkPoints.subtract(1)\r\n }\r\n }\r\n}","import { AutobuyerState } from \"./autobuyer\";\r\nimport { GlyphSacrificeHandler, MendingMilestone, RealityUpgrade } from \"../globals\";\r\n\r\nexport class NonRepeatableRealityUpgradeAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.nrru;\r\n }\r\n\r\n get name() {\r\n return `Non-repeatable Reality Upgrade Autobuyer`;\r\n }\r\n\r\n get isUnlocked() {\r\n return MendingMilestone.eight.isReached;\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n tick() {\r\n if (player.auto.nrru.isActive) {\r\n for (let i = 1; i <= 20; i++) {\r\n if (Currency.realityMachines.gte(RealityUpgrade(i+5).cost) && !RealityUpgrade(i+5).isBought) {\r\n RealityUpgrade(i+5).purchase()\r\n RealityUpgrade(i+5).onPurchased()\r\n }\r\n }}\r\n }\r\n}","import { AutobuyerState } from \"./autobuyer\";\r\nimport { GlyphSacrificeHandler, ImaginaryUpgrade, MendingMilestone, RealityUpgrade } from \"../globals\";\r\n\r\nexport class NonRepeatableImaginaryUpgradeAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.nriu;\r\n }\r\n\r\n get name() {\r\n return `Non-repeatable Imaginary Upgrade Autobuyer`;\r\n }\r\n\r\n get isUnlocked() {\r\n return MendingMilestone.eight.isReached;\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n tick() {\r\n if (player.auto.nriu.isActive) {\r\n for (let i = 1; i <= 15; i++) {\r\n if (Currency.imaginaryMachines.gte(ImaginaryUpgrade(i+10).cost) && !ImaginaryUpgrade(i+10).isBought) {\r\n ImaginaryUpgrade(i+10).purchase();\r\n ImaginaryUpgrade(i+10).onPurchased();\r\n }\r\n }}\r\n }\r\n}","import { Ra } from \"../globals\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class RaPetAutobuyerState extends AutobuyerState{\r\n /**\r\n * @abstract\r\n */\r\n get _petName(){ throw new NotImplementedError(); }\r\n\r\n get data() {\r\n return player.auto.pets[this._petName].upgrades[this.id-1];\r\n }\r\n\r\n get _upgradeName(){\r\n return ['levelUp', 'purchaseChunkUpgrade', 'purchaseMemoryUpgrade'][this.id-1];\r\n }\r\n\r\n get name(){\r\n return [\"Level Up\", \"Fragmentation\", \"Recollection\"][this.id-1];\r\n }\r\n\r\n get bulk(){\r\n return 0;\r\n }\r\n\r\n static get entryCount(){\r\n return 3;\r\n }\r\n\r\n get isUnlocked() {\r\n return player.celestials.ra.permanentMemories.ra2 || Ra.pets.ra.level >= 2;\r\n }\r\n\r\n\r\n\r\n tick(){\r\n const petName = this._petName;\r\n const upgradeName = this._upgradeName;\r\n Ra.pets[petName][upgradeName]();\r\n }\r\n}","import { RaPetAutobuyerState } from \"./ra-pet-autobuyer\";\r\n\r\nexport class TeresaMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'teresa'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Teresa's Memory\"; }\r\n static get isActive() { return player.auto.pets.teresa.isActive; }\r\n static set isActive(value) { player.auto.pets.teresa.isActive = value; }\r\n}\r\n\r\nexport class EffarigMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'effarig'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Effarig's Memory\"; }\r\n static get isActive() { return player.auto.pets.effarig.isActive; }\r\n static set isActive(value) { player.auto.pets.effarig.isActive = value; }\r\n}\r\n\r\nexport class EnslavedMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'enslaved'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Nameless's Memory\"; }\r\n static get isActive() { return player.auto.pets.enslaved.isActive; }\r\n static set isActive(value) { player.auto.pets.enslaved.isActive = value; }\r\n}\r\n\r\nexport class VMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'v'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"V's Memory\"; }\r\n static get isActive() { return player.auto.pets.v.isActive; }\r\n static set isActive(value) { player.auto.pets.v.isActive = value; }\r\n}\r\n\r\nexport class RaMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'ra'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Ra's Memory\"; }\r\n static get isActive() { return player.auto.pets.ra.isActive; }\r\n static set isActive(value) { player.auto.pets.ra.isActive = value; }\r\n}\r\n\r\nexport class LaitelaMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'laitela'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Lai'tela's Memory\"; }\r\n static get isActive() { return player.auto.pets.laitela.isActive; }\r\n static set isActive(value) { player.auto.pets.laitela.isActive = value; }\r\n}\r\n\r\nexport class PelleMemoryAutobuyerState extends RaPetAutobuyerState{\r\n get _petName(){ return 'pelle'; }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.rautobuyers.isUnlocked || player.celestials.ra.permanentMemories.ra2;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Pelle's Memory\"; }\r\n static get isActive() { return player.auto.pets.pelle.isActive; }\r\n static set isActive(value) { player.auto.pets.pelle.isActive = value; }\r\n}","import { PelleUpgrade, Ra } from \"../globals\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class PelleRebuyableUpgradeAutobuyerState extends AutobuyerState{\r\n get _upgradeName(){\r\n return [\"antimatterDimensionMult\", \"timeSpeedMult\", \"glyphLevels\", \"infConversion\", \"galaxyPower\"][this.id-1];\r\n }\r\n\r\n get data(){\r\n return player.auto.pelleRebuyableUpgrades.all[this.id-1];\r\n }\r\n\r\n get name(){\r\n return [\"Antimatter Dimension Multiplier\", \"Game Speed Multiplier\", \"Allowed Glyph Level\", \"Infinity Power Conversion Rate\", \"Galaxy Power\"][this.id-1];\r\n }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.pelleAutobuyers.isUnlocked;\r\n }\r\n\r\n get bulk(){\r\n return 0;\r\n }\r\n\r\n tick(){\r\n const upgradeName = this._upgradeName;\r\n PelleUpgrade[upgradeName].purchase();\r\n }\r\n\r\n static get entryCount(){\r\n return 5;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Rebuyable Pelle Upgrade\"; }\r\n\r\n static get isActive(){ return player.auto.pelleRebuyableUpgrades.isActive; }\r\n\r\n static set isActive(value){ player.auto.pelleRebuyableUpgrades.isActive = value; }\r\n}\r\n\r\nexport class PelleUpgradeAutobuyerState extends AutobuyerState{\r\n get data(){\r\n return player.auto.pelleUpgrades;\r\n }\r\n\r\n get name(){\r\n return \"Pelle Upgrades\";\r\n }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.pelleAutobuyers.isUnlocked;\r\n }\r\n\r\n get bulk(){\r\n return 0;\r\n }\r\n\r\n tick(){\r\n const nextUpgrade = PelleUpgrade.singles.find(upgrade => upgrade.canBeBought);\r\n if(nextUpgrade != undefined) {\r\n nextUpgrade.purchase();\r\n }\r\n }\r\n}","import { GalaxyGeneratorUpgrades, Ra } from \"../globals\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class GalaxyGeneratorUpgradeAutobuyerState extends AutobuyerState{\r\n get _upgradeName(){\r\n return [\"additive\", \"multiplicative\", \"antimatterMult\", \"IPMult\", \"EPMult\"][this.id-1];\r\n }\r\n\r\n get data(){\r\n return player.auto.galgenUpgrades.all[this.id-1];\r\n }\r\n\r\n get name(){\r\n return [\"Additive\", \"Multiplicative\", \"Antimatter\", \"Infinity Point\", \"Eternity Point\"][this.id-1];\r\n }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.pelleAutobuyers.isUnlocked && Pelle.hasGalaxyGenerator;\r\n }\r\n\r\n get bulk(){\r\n return 0;\r\n }\r\n\r\n tick(){\r\n const upgradeName = this._upgradeName;\r\n GalaxyGeneratorUpgrades[upgradeName].purchase();\r\n }\r\n\r\n static get entryCount(){\r\n return 5;\r\n }\r\n\r\n static get autobuyerGroupName(){ return \"Galaxy Generator Upgrade\"; }\r\n\r\n static get isActive(){ return player.auto.galgenUpgrades.isActive; }\r\n\r\n static set isActive(value){ player.auto.galgenUpgrades.isActive = value; }\r\n}\r\n\r\nexport class GalaxyGeneratorSacrificeAutobuyerState extends AutobuyerState{\r\n get data(){\r\n return player.auto.galgenSac;\r\n }\r\n\r\n get name(){\r\n return \"Galaxy Generator Sacrifice\";\r\n }\r\n\r\n get isUnlocked(){\r\n return Ra.unlocks.pelleAutobuyers.isUnlocked && Pelle.hasGalaxyGenerator;\r\n }\r\n\r\n get bulk(){\r\n return 0;\r\n }\r\n\r\n tick(){\r\n if(GalaxyGenerator.isCapped) GalaxyGenerator.startSacrifice();\r\n }\r\n}","import { mendingResetRequest } from \"../mending\";\r\nimport { PlayerProgress } from \"../player-progress\";\r\nimport { UpgradeableAutobuyerState } from \"./autobuyer\";\r\n\r\nexport class MendingAutobuyerState extends UpgradeableAutobuyerState {\r\n get data() {\r\n return player.auto.mending;\r\n }\r\n\r\n get name() {\r\n return `Mend`;\r\n }\r\n\r\n get isUnlocked() {\r\n return MendingUpgrade(20).isBought;\r\n }\r\n\r\n get canBeUpgraded() {\r\n return true;\r\n }\r\n\r\n get baseInterval() {\r\n return 0;\r\n }\r\n\r\n get mode() {\r\n return this.data.mode;\r\n }\r\n\r\n set mode(value) {\r\n this.data.mode = value;\r\n }\r\n\r\n get hasAdditionalModes() {\r\n return true;\r\n }\r\n\r\n get increaseWithMult() {\r\n return this.data.increaseWithMult;\r\n }\r\n\r\n set increaseWithMult(value) {\r\n this.data.increaseWithMult = value;\r\n }\r\n\r\n get amount() {\r\n return this.data.amount;\r\n }\r\n\r\n // This is unused mechanically, but should be zero to suppress the \"Current bulk:\" text\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n set amount(value) {\r\n this.data.amount = value;\r\n }\r\n\r\n get time() {\r\n return this.data.time;\r\n }\r\n\r\n set time(value) {\r\n this.data.time = value;\r\n }\r\n\r\n /*get xHighest() {\r\n return this.data.xHighest;\r\n }\r\n\r\n set xHighest(value) {\r\n this.data.xHighest = value;\r\n }*/ //TO BE IMPLEMENTED\r\n\r\n bumpAmount(mult) {\r\n if (this.isUnlocked && this.increaseWithMult) {\r\n this.amount = this.amount.times(mult);\r\n }\r\n }\r\n\r\n get canTick() {\r\n return Player.canMend && super.canTick;\r\n }\r\n\r\n get resetTickOn() {\r\n return PRESTIGE_EVENT.MENDING;\r\n }\r\n\r\n /*get highestPrevPrestige() {\r\n return player.records.thisMend.maxMvR;\r\n }*/\r\n\r\n get timeToNextTick() {\r\n return Math.clampMin(this.time - Time.thisMendRealTime.totalSeconds.toNumber(), 0);\r\n }\r\n\r\n get willMend() {\r\n switch (this.mode) {\r\n case AUTO_MEND_MODE.TIME:\r\n return Time.thisMendRealTime.totalSeconds.gt(this.time);\r\n case AUTO_MEND_MODE.AMOUNT:\r\n default:\r\n return gainedMendingPoints().gte(this.amount);\r\n /*case AUTO_MEND_MODE.X_HIGHEST:\r\n default:\r\n return gainedMendmgPoints().gte(this.highestPrevPrestige.times(this.xHighest));*/\r\n }\r\n }\r\n\r\n tick() {\r\n super.tick();\r\n if (this.willMend) mendingResetRequest();\r\n }\r\n\r\n reset() {\r\n super.reset();\r\n this.mode = AUTO_MEND_MODE.AMOUNT;\r\n }\r\n}\r\n","import { Singularity } from \"../globals\";\r\nimport { AutobuyerState } from \"./autobuyer\";\r\n\r\nexport class SingularityCapAutobuyerState extends AutobuyerState {\r\n get data() {\r\n return player.auto.singCap;\r\n }\r\n\r\n get name() {\r\n return `Singularity Cap`;\r\n }\r\n\r\n get isUnlocked() {\r\n return player.celestials.ra.permanentMemories.lai65;\r\n }\r\n\r\n get multiplier() {\r\n return this.data.multiplier;\r\n }\r\n\r\n set multiplier(value) {\r\n if(value < 1){\r\n value = 1\r\n }\r\n this.data.multiplier = value;\r\n }\r\n\r\n get bulk() {\r\n return 0;\r\n }\r\n\r\n get hasInput() {\r\n return true;\r\n }\r\n\r\n get inputType() {\r\n return \"float\";\r\n }\r\n\r\n get inputEntry() {\r\n return \"multiplier\";\r\n }\r\n\r\n get description() {\r\n return \"Auto condense time (ms)\";\r\n }\r\n\r\n tick() {\r\n const duration = Singularity.cap / Currency.darkEnergy.productionPerSecond;\r\n if (duration < (this.multiplier / 1000 / Math.sqrt(10))) {\r\n Singularity.increaseCap();\r\n return;\r\n };\r\n if (duration > (this.multiplier / 1000 * Math.sqrt(10))){\r\n Singularity.decreaseCap();\r\n return;\r\n };\r\n }\r\n}\r\n","import { AnnihilationAutobuyerState } from \"./annihilation-autobuyer\";\r\nimport { AntimatterDimensionAutobuyerState } from \"./antimatter-dimension-autobuyer\";\r\nimport { BigCrunchAutobuyerState } from \"./big-crunch-autobuyer\";\r\nimport { BlackHolePowerAutobuyerState } from \"./black-hole-power-autobuyer\";\r\nimport { ExpoBlackHolePowerAutobuyerState } from \"./expo-black-hole-power-autobuyer\";\r\nimport { DarkMatterDimensionAscensionAutobuyerState } from \"./dark-matter-dimension-ascension-autobuyer\";\r\nimport { DarkMatterDimensionAutobuyerState } from \"./dark-matter-dimension-autobuyer\";\r\nimport { DilationUpgradeAutobuyerState } from \"./dilation-upgrade-autobuyer\";\r\nimport { DimBoostAutobuyerState } from \"./dimboost-autobuyer\";\r\nimport { EternityAutobuyerState } from \"./eternity-autobuyer\";\r\nimport { GalaxyAutobuyerState } from \"./galaxy-autobuyer\";\r\nimport { ImaginaryUpgradeAutobuyerState } from \"./imaginary-upgrade-autobuyer\";\r\nimport { InfinityDimensionAutobuyerState } from \"./infinity-dimension-autobuyer\";\r\nimport { EPMultAutobuyerState, IPMultAutobuyerState } from \"./prestige-currency-multiplier-autobuyer\";\r\nimport { RealityAutobuyerState } from \"./reality-autobuyer\";\r\nimport { RealityUpgradeAutobuyerState } from \"./reality-upgrade-autobuyer\";\r\nimport { ReplicantiGalaxyAutobuyerState } from \"./replicanti-galaxy-autobuyer\";\r\nimport { ReplicantiUpgradeAutobuyerState } from \"./replicanti-upgrade-autobuyer\";\r\nimport { SacrificeAutobuyerState } from \"./sacrifice-autobuyer\";\r\nimport { SingularityAutobuyerState } from \"./singularity-autobuyer\";\r\nimport { TickspeedAutobuyerState } from \"./tickspeed-autobuyer\";\r\nimport { TimeDimensionAutobuyerState } from \"./time-dimension-autobuyer\";\r\nimport { TimeTheoremAutobuyerState } from \"./time-theorem-autobuyer\";\r\nimport { TesseractAutobuyerState } from \"./tesseract-autobuyer\";\r\nimport { MusicGlyphAutobuyerState } from \"./music-glyph-autobuyer\";\r\n\r\nimport { NonRepeatableRealityUpgradeAutobuyerState } from \"./nr-reality-upgrade-autobuyer\";\r\nimport { NonRepeatableImaginaryUpgradeAutobuyerState } from \"./nr-imaginary-upgrade-autobuyer\";\r\nimport { TeresaMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { EffarigMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { EnslavedMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { VMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { RaMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { LaitelaMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { PelleMemoryAutobuyerState } from \"./memory-autobuyer\";\r\nimport { PelleRebuyableUpgradeAutobuyerState } from \"./pelle-upgrade-autobuyer\";\r\nimport { PelleUpgradeAutobuyerState } from \"./pelle-upgrade-autobuyer\";\r\nimport { GalaxyGeneratorUpgradeAutobuyerState } from \"./galgen-autobuyer\";\r\nimport { GalaxyGeneratorSacrificeAutobuyerState } from \"./galgen-autobuyer\";\r\nimport { MendingAutobuyerState } from \"./mending-autobuyer\";\r\nimport { SingularityCapAutobuyerState } from \"./singulaity-cap-autobuyer\";\r\n\r\nexport const Autobuyer = {\r\n annihilation: new AnnihilationAutobuyerState(),\r\n antimatterDimension: AntimatterDimensionAutobuyerState.createAccessor(),\r\n bigCrunch: new BigCrunchAutobuyerState(),\r\n blackHolePower: BlackHolePowerAutobuyerState.createAccessor(),\r\n expoBlackHolePower: ExpoBlackHolePowerAutobuyerState.createAccessor(),\r\n darkMatterDimsAscension: new DarkMatterDimensionAscensionAutobuyerState(),\r\n darkMatterDims: new DarkMatterDimensionAutobuyerState(),\r\n dilationUpgrade: DilationUpgradeAutobuyerState.createAccessor(),\r\n dimboost: new DimBoostAutobuyerState(),\r\n eternity: new EternityAutobuyerState(),\r\n galaxy: new GalaxyAutobuyerState(),\r\n imaginaryUpgrade: ImaginaryUpgradeAutobuyerState.createAccessor(),\r\n infinityDimension: InfinityDimensionAutobuyerState.createAccessor(),\r\n ipMult: new IPMultAutobuyerState(),\r\n epMult: new EPMultAutobuyerState(),\r\n reality: new RealityAutobuyerState(),\r\n realityUpgrade: RealityUpgradeAutobuyerState.createAccessor(),\r\n replicantiGalaxy: new ReplicantiGalaxyAutobuyerState(),\r\n replicantiUpgrade: ReplicantiUpgradeAutobuyerState.createAccessor(),\r\n sacrifice: new SacrificeAutobuyerState(),\r\n singularity: new SingularityAutobuyerState(),\r\n tickspeed: new TickspeedAutobuyerState(),\r\n timeDimension: TimeDimensionAutobuyerState.createAccessor(),\r\n timeTheorem: new TimeTheoremAutobuyerState(),\r\n tesseract: new TesseractAutobuyerState(),\r\n musicglyph: new MusicGlyphAutobuyerState(),\r\n nrru: new NonRepeatableRealityUpgradeAutobuyerState(),\r\n nriu: new NonRepeatableImaginaryUpgradeAutobuyerState(),\r\n teresaMem: TeresaMemoryAutobuyerState.createAccessor(),\r\n effarigMem: EffarigMemoryAutobuyerState.createAccessor(),\r\n enslavedMem: EnslavedMemoryAutobuyerState.createAccessor(),\r\n vMem: VMemoryAutobuyerState.createAccessor(),\r\n raMem: RaMemoryAutobuyerState.createAccessor(),\r\n laitelaMem: LaitelaMemoryAutobuyerState.createAccessor(),\r\n pelleMem: PelleMemoryAutobuyerState.createAccessor(),\r\n rebuyablePelle: PelleRebuyableUpgradeAutobuyerState.createAccessor(),\r\n pelleUpgrade: new PelleUpgradeAutobuyerState(),\r\n galgenUpgrade: GalaxyGeneratorUpgradeAutobuyerState.createAccessor(),\r\n galgenSac: new GalaxyGeneratorSacrificeAutobuyerState(),\r\n mending: new MendingAutobuyerState(),\r\n singCapInc: new SingularityCapAutobuyerState(),\r\n};\r\n\r\nexport const Autobuyers = (function() {\r\n const antimatterDimensions = Autobuyer.antimatterDimension.zeroIndexed;\r\n const infinityDimensions = Autobuyer.infinityDimension.zeroIndexed;\r\n const timeDimensions = Autobuyer.timeDimension.zeroIndexed;\r\n\r\n const dimensions = [antimatterDimensions, infinityDimensions, timeDimensions];\r\n\r\n const prestige = [\r\n Autobuyer.bigCrunch,\r\n Autobuyer.eternity,\r\n Autobuyer.reality,\r\n Autobuyer.mending,\r\n ];\r\n\r\n const single = [\r\n Autobuyer.sacrifice,\r\n Autobuyer.replicantiGalaxy,\r\n Autobuyer.timeTheorem,\r\n Autobuyer.ipMult,\r\n Autobuyer.epMult,\r\n Autobuyer.darkMatterDims,\r\n Autobuyer.darkMatterDimsAscension,\r\n Autobuyer.singularity,\r\n Autobuyer.annihilation,\r\n Autobuyer.tesseract,\r\n Autobuyer.musicglyph,\r\n Autobuyer.nrru,\r\n Autobuyer.nriu,\r\n Autobuyer.pelleUpgrade,\r\n Autobuyer.galgenSac,\r\n Autobuyer.singCapInc,\r\n ];\r\n\r\n const singleComplex = [\r\n Autobuyer.tickspeed,\r\n Autobuyer.galaxy,\r\n Autobuyer.dimboost,\r\n ].concat(single);\r\n\r\n const arrays = [\r\n Autobuyer.replicantiUpgrade.zeroIndexed,\r\n Autobuyer.dilationUpgrade.zeroIndexed,\r\n Autobuyer.blackHolePower.zeroIndexed,\r\n Autobuyer.expoBlackHolePower.zeroIndexed,\r\n Autobuyer.realityUpgrade.zeroIndexed,\r\n Autobuyer.imaginaryUpgrade.zeroIndexed,\r\n Autobuyer.teresaMem.zeroIndexed,\r\n Autobuyer.effarigMem.zeroIndexed,\r\n Autobuyer.enslavedMem.zeroIndexed,\r\n Autobuyer.vMem.zeroIndexed,\r\n Autobuyer.raMem.zeroIndexed,\r\n Autobuyer.laitelaMem.zeroIndexed,\r\n Autobuyer.pelleMem.zeroIndexed,\r\n Autobuyer.rebuyablePelle.zeroIndexed,\r\n Autobuyer.galgenUpgrade.zeroIndexed,\r\n ];\r\n const all = dimensions.concat(prestige, singleComplex, arrays);\r\n const multiple = [\r\n Autobuyer.antimatterDimension,\r\n Autobuyer.infinityDimension,\r\n Autobuyer.timeDimension,\r\n Autobuyer.replicantiUpgrade,\r\n Autobuyer.dilationUpgrade,\r\n Autobuyer.blackHolePower,\r\n Autobuyer.expoBlackHolePower,\r\n Autobuyer.realityUpgrade,\r\n Autobuyer.imaginaryUpgrade,\r\n Autobuyer.teresaMem,\r\n Autobuyer.effarigMem,\r\n Autobuyer.enslavedMem,\r\n Autobuyer.vMem,\r\n Autobuyer.raMem,\r\n Autobuyer.laitelaMem,\r\n Autobuyer.pelleMem,\r\n Autobuyer.rebuyablePelle,\r\n Autobuyer.galgenUpgrade,\r\n ];\r\n\r\n return {\r\n all: all.flat(),\r\n display: [multiple, single],\r\n upgradeable: antimatterDimensions.concat(\r\n Autobuyer.tickspeed,\r\n Autobuyer.dimboost,\r\n Autobuyer.galaxy,\r\n Autobuyer.bigCrunch,\r\n ),\r\n\r\n get unlocked() {\r\n return Autobuyers.all.filter(a => a.isUnlocked || a.isBought);\r\n },\r\n\r\n get hasAutobuyersForEditModal() {\r\n return [Autobuyer.dimboost,\r\n Autobuyer.galaxy,\r\n Autobuyer.bigCrunch,\r\n Autobuyer.eternity,\r\n Autobuyer.reality,\r\n Autobuyer.mending].some(autobuyer => autobuyer.isUnlocked);\r\n },\r\n\r\n toggle() {\r\n player.auto.autobuyersOn = !player.auto.autobuyersOn;\r\n },\r\n\r\n tick() {\r\n if (!player.auto.autobuyersOn) return;\r\n PerformanceStats.start(\"Autobuyers\");\r\n\r\n // The canTick condition must be checked after the previous autobuyer has triggered\r\n // in order to avoid slow dimension autobuyers.\r\n for (const autobuyer of Autobuyers.all) {\r\n if (autobuyer.canTick) autobuyer.tick();\r\n }\r\n\r\n PerformanceStats.end();\r\n },\r\n\r\n resetTick(prestigeEvent) {\r\n const autobuyers = Autobuyers.all.filter(n => n.resetTick !== undefined);\r\n for (const autobuyer of autobuyers) {\r\n autobuyer.resetTick(prestigeEvent);\r\n }\r\n },\r\n\r\n reset() {\r\n for (const autobuyer of Autobuyers.all) {\r\n autobuyer.reset();\r\n }\r\n }\r\n };\r\n}());\r\n\r\nEventHub.logic.on(GAME_EVENT.ETERNITY_RESET_AFTER, () => Autobuyers.reset());\r\nEventHub.logic.on(GAME_EVENT.REALITY_RESET_AFTER, () => Autobuyers.reset());\r\nEventHub.logic.on(GAME_EVENT.MENDING_RESET_AFTER, () => Autobuyers.reset());\r\n\r\nEventHub.logic.on(GAME_EVENT.DIMBOOST_AFTER, () => Autobuyers.resetTick(PRESTIGE_EVENT.DIMENSION_BOOST));\r\nEventHub.logic.on(GAME_EVENT.GALAXY_RESET_AFTER, () => Autobuyers.resetTick(PRESTIGE_EVENT.ANTIMATTER_GALAXY));\r\nEventHub.logic.on(GAME_EVENT.BIG_CRUNCH_AFTER, () => Autobuyers.resetTick(PRESTIGE_EVENT.INFINITY));\r\nEventHub.logic.on(GAME_EVENT.ETERNITY_RESET_AFTER, () => Autobuyers.resetTick(PRESTIGE_EVENT.ETERNITY));\r\nEventHub.logic.on(GAME_EVENT.REALITY_RESET_AFTER, () => Autobuyers.resetTick(PRESTIGE_EVENT.REALITY));\r\n","import * as ADNotations from \"@antimatter-dimensions/notations\";\r\n\r\nexport const Notation = (function() {\r\n const N = ADNotations;\r\n const notation = type => {\r\n const n = new type();\r\n n.setAsCurrent = () => {\r\n player.options.notation = n.name;\r\n ui.notationName = n.name;\r\n };\r\n return n;\r\n };\r\n const painful = n => {\r\n n.isPainful = true;\r\n return n;\r\n };\r\n return {\r\n scientific: notation(N.ScientificNotation),\r\n engineering: notation(N.EngineeringNotation),\r\n letters: notation(N.LettersNotation),\r\n standard: painful(notation(N.StandardNotation)),\r\n emoji: painful(notation(N.EmojiNotation)),\r\n mixedScientific: notation(N.MixedScientificNotation),\r\n mixedEngineering: notation(N.MixedEngineeringNotation),\r\n logarithm: notation(N.LogarithmNotation),\r\n brackets: painful(notation(N.BracketsNotation)),\r\n infinity: notation(N.InfinityNotation),\r\n roman: painful(notation(N.RomanNotation)),\r\n dots: painful(notation(N.DotsNotation)),\r\n zalgo: painful(notation(N.ZalgoNotation)),\r\n hex: painful(notation(N.HexNotation)),\r\n imperial: painful(notation(N.ImperialNotation)),\r\n clock: painful(notation(N.ClockNotation)),\r\n prime: painful(notation(N.PrimeNotation)),\r\n bar: painful(notation(N.BarNotation)),\r\n shi: painful(notation(N.ShiNotation)),\r\n blind: painful(notation(N.BlindNotation)),\r\n blobs: painful(notation(N.BlobsNotation)),\r\n all: painful(notation(N.AllNotation))\r\n };\r\n}());\r\n\r\nNotation.emoji.setAsCurrent = (silent = false) => {\r\n player.options.notation = Notation.emoji.name;\r\n ui.notationName = Notation.emoji.name;\r\n if (!silent) GameUI.notify.success(\"😂😂😂\");\r\n};\r\n\r\nexport const Notations = {\r\n // Defined as a list here for exact order in options tab.\r\n all: [\r\n Notation.scientific,\r\n Notation.engineering,\r\n Notation.letters,\r\n Notation.standard,\r\n Notation.emoji,\r\n Notation.mixedScientific,\r\n Notation.mixedEngineering,\r\n Notation.logarithm,\r\n Notation.brackets,\r\n Notation.infinity,\r\n Notation.roman,\r\n Notation.dots,\r\n Notation.zalgo,\r\n Notation.hex,\r\n Notation.imperial,\r\n Notation.clock,\r\n Notation.prime,\r\n Notation.bar,\r\n Notation.shi,\r\n Notation.blind,\r\n Notation.blobs,\r\n Notation.all,\r\n ],\r\n find: name => {\r\n const notation = Notations.all.find(n => n.name === name);\r\n return notation === undefined ? Notation.mixedScientific : notation;\r\n },\r\n get current() {\r\n return GameUI.initialized ? ui.notation : Notation.mixedScientific;\r\n }\r\n};\r\n\r\nADNotations.Settings.isInfinite = decimal => ui.formatPreBreak && decimal.gte(Decimal.NUMBER_MAX_VALUE);\r\n\r\nEventHub.logic.on(GAME_EVENT.GAME_TICK_AFTER, () => {\r\n ui.formatPreBreak = !PlayerProgress.hasBroken() || (NormalChallenge.isRunning && !Enslaved.isRunning);\r\n});\r\n","export const TUTORIAL_STATE = {\r\n DIM1: 0,\r\n DIM2: 1,\r\n TICKSPEED: 2,\r\n DIMBOOST: 3,\r\n GALAXY: 4,\r\n AUTOMATOR: 5\r\n};\r\n\r\n// Tutorial has two ways of moving on, either by Tutorial.moveOn() or by having it's condition be true. This\r\n// is checked by moving on when the NEXT state's condition evaluates to true\r\nconst tutorialStates = [\r\n {\r\n // Highlight the 1st dim button\r\n id: TUTORIAL_STATE.DIM1,\r\n condition: () => true\r\n },\r\n {\r\n // Highlight the 2nd dim button\r\n id: TUTORIAL_STATE.DIM2,\r\n condition: () => Currency.antimatter.gte(100)\r\n },\r\n {\r\n id: TUTORIAL_STATE.TICKSPEED,\r\n condition: () => AntimatterDimension(2).bought > 0\r\n },\r\n {\r\n id: TUTORIAL_STATE.DIMBOOST,\r\n condition: () => AntimatterDimension(4).amount.gte(20)\r\n },\r\n {\r\n id: TUTORIAL_STATE.GALAXY,\r\n condition: () => AntimatterDimension(8).amount.gte(80)\r\n },\r\n {\r\n id: TUTORIAL_STATE.AUTOMATOR,\r\n condition: () => Player.automatorUnlocked\r\n }\r\n];\r\n\r\nexport const Tutorial = {\r\n\r\n isActive(atState) {\r\n return player.records.fullGameCompletions === 0 && ui.view.tutorialState === atState && ui.view.tutorialActive;\r\n },\r\n\r\n // This will remain visible until the first dimboost is purchased. However, since the tutorial state generally\r\n // only visually updates whenever the UI elements need changing, we need to explicitly check boost count or else\r\n // this will remain visible until a galaxy can be purchased\r\n emphasizeH2P() {\r\n const hasFirstBoost = player.tutorialState > TUTORIAL_STATE.DIMBOOST || player.dimensionBoosts > 0;\r\n return player.records.fullGameCompletions === 0 && !hasFirstBoost;\r\n },\r\n\r\n // Turns off the visual effect\r\n turnOffEffect(fromState) {\r\n if (fromState !== player.tutorialState) return;\r\n player.tutorialActive = false;\r\n ui.view.tutorialActive = false;\r\n // Check if we can immediately enter next tutorial state. This is needed\r\n // to correctly handle buying dimension 2 + tickspeed in the same tick,\r\n // for example.\r\n this.tutorialLoop();\r\n },\r\n\r\n // Moves on to the next tutorialState, but only if parameter is current state.\r\n moveOn(fromState) {\r\n if (fromState !== player.tutorialState) return;\r\n player.tutorialState++;\r\n ui.view.tutorialState++;\r\n player.tutorialActive = true;\r\n ui.view.tutorialActive = true;\r\n },\r\n\r\n tutorialLoop() {\r\n const nextState = tutorialStates.find(o => o.id === player.tutorialState + 1);\r\n if (nextState && nextState.condition()) this.moveOn(player.tutorialState);\r\n }\r\n};\r\n","import * as ADNotations from \"@antimatter-dimensions/notations\";\r\n\r\nexport const NG = {\r\n startNewGame() {\r\n GameEnd.creditsClosed = false;\r\n GameEnd.creditsEverClosed = false;\r\n player.isGameEnd = false;\r\n // We set this ASAP so that the AD tab is immediately recreated without END formatting, and any lag which could\r\n // happen is instead hidden by the overlay from the credits rollback\r\n player.celestials.pelle.doomed = false;\r\n\r\n // This is where we \"confirm\" a speedrun as completed and store all its information into the previous run prop\r\n // before resetting everything.\r\n const speedrun = player.speedrun;\r\n if (speedrun.isActive) {\r\n player.speedrun.previousRuns[player.records.fullGameCompletions + 1] = {\r\n isSegmented: speedrun.isSegmented,\r\n usedSTD: speedrun.usedSTD,\r\n startDate: speedrun.startDate,\r\n name: speedrun.name,\r\n offlineTimeUsed: speedrun.offlineTimeUsed,\r\n records: [...speedrun.records],\r\n achievementTimes: JSON.parse(JSON.stringify(speedrun.achievementTimes)),\r\n seedSelection: speedrun.seedSelection,\r\n initialSeed: speedrun.initialSeed,\r\n };\r\n\r\n // For the sake of keeping a bounded savefile size, we only keep a queue of the last 100 full runs. The earliest\r\n // this will feasibly become an issue from nonstop speedruns is around 2030; I guess we can revisit it at that\r\n // point if we really need to, but I suspect this limit should be high enough\r\n const prevRunIndices = Object.keys(speedrun.previousRuns).map(k => Number(k));\r\n if (prevRunIndices.length > 100) player.speedrun.previousRuns[prevRunIndices.min()] = undefined;\r\n }\r\n\r\n // Modify beaten-game quantities before doing a carryover reset\r\n player.records.fullGameCompletions++;\r\n GlyphAppearanceHandler.unlockSet();\r\n this.restartWithCarryover();\r\n\r\n // The ending animation ends at 12.5, although the value continues to increase after that. We set it to a bit above\r\n // 12.5 when we start the rollback animation to hide some of the unavoidable lag from all the reset functions\r\n GameEnd.removeAdditionalEnd = true;\r\n GameEnd.additionalEnd = 15;\r\n // Without the delay, this causes the saving (and its notification) to occur during the credits rollback\r\n setTimeout(() => GameStorage.save(), 10000);\r\n },\r\n\r\n // Reset the game, but carry over some post-completion stats. We also call this when starting a speedrun, so make sure\r\n // any stats which are updated due to completion happen in startNewGame() instead of in here\r\n restartWithCarryover() {\r\n const backUpOptions = JSON.stringify(player.options);\r\n // This can't be JSONed as it contains sets\r\n const secretUnlocks = player.secretUnlocks;\r\n const secretAchievements = JSON.stringify(player.secretAchievementBits);\r\n // We don't backup the whole player.reality.automator object because it contains \"state\",\r\n // which could lead to some edge cases where it starts when it shouldn't (ie before it's unlocked)\r\n // It's easier to do something like this to avoid it entirely.\r\n const automatorConstants = JSON.stringify(player.reality.automator.constants);\r\n const automatorScripts = JSON.stringify(player.reality.automator.scripts);\r\n const fullCompletions = player.records.fullGameCompletions;\r\n const fullTimePlayed = player.records.previousRunRealTime + player.records.realTimePlayed;\r\n const glyphCosmetics = JSON.stringify(player.reality.glyphs.cosmetics);\r\n const speedrunRecords = JSON.stringify(player.speedrun.previousRuns);\r\n const hasSpeedrun = player.speedrun.isUnlocked;\r\n Modal.hideAll();\r\n Quote.clearAll();\r\n GameStorage.hardReset();\r\n player.options = JSON.parse(backUpOptions);\r\n // We need to force this one to be true because otherwise the player will be unable to select their glyphs\r\n // until they can auto-reality\r\n player.options.confirmations.glyphSelection = true;\r\n player.secretUnlocks = secretUnlocks;\r\n player.secretAchievementBits = JSON.parse(secretAchievements);\r\n player.reality.automator.constants = JSON.parse(automatorConstants);\r\n player.reality.automator.scripts = JSON.parse(automatorScripts);\r\n player.records.fullGameCompletions = fullCompletions;\r\n player.records.previousRunRealTime = fullTimePlayed;\r\n ui.view.UIType = player.options.UIType;\r\n ui.view.news = player.options.news.enabled;\r\n player.reality.glyphs.cosmetics = JSON.parse(glyphCosmetics);\r\n player.speedrun.previousRuns = JSON.parse(speedrunRecords);\r\n player.speedrun.isUnlocked = hasSpeedrun;\r\n Themes.find(Theme.currentName()).set();\r\n Notations.all.find(n => n.name === player.options.notation).setAsCurrent();\r\n ADNotations.Settings.exponentCommas.show = player.options.commas;\r\n player.lastUpdate = Date.now();\r\n }\r\n};\r\n","import { BitUpgradeState, RebuyableMechanicState } from \"../game-mechanics\";\r\nimport { Pelle } from \"../globals\";\r\nimport { GameDatabase } from \"../secret-formula/game-database\";\r\n\r\nimport { Quotes } from \"./quotes\";\r\n\r\nexport const Teresa = {\r\n timePoured: 0,\r\n lastUnlock: \"shop\",\r\n pouredAmountCap: 1e24,\r\n displayName: \"Teresa\",\r\n possessiveName: \"Teresa's\",\r\n get isUnlocked() {\r\n return Achievement(147).isUnlocked;\r\n },\r\n pourRM(diff) {\r\n if (this.pouredAmount >= Teresa.pouredAmountCap) return;\r\n this.timePoured += diff;\r\n const rm = Currency.realityMachines.value;\r\n const rmPoured = Math.min((this.pouredAmount + 1e6) * 0.01 * Math.pow(this.timePoured, 2), rm.toNumber());\r\n this.pouredAmount += Math.min(rmPoured, Teresa.pouredAmountCap - this.pouredAmount);\r\n Currency.realityMachines.subtract(rmPoured);\r\n this.checkForUnlocks();\r\n },\r\n checkForUnlocks() {\r\n for (const info of TeresaUnlocks.all) {\r\n info.unlock();\r\n }\r\n },\r\n initializeRun() {\r\n clearCelestialRuns();\r\n player.celestials.teresa.run = true;\r\n },\r\n rewardMultiplier(antimatter) {\r\n return Decimal.max(Decimal.pow(antimatter.plus(1).log10() / 1.5e8, 12), 1).toNumber();\r\n },\r\n get pouredAmount() {\r\n return player.celestials.teresa.pouredAmount;\r\n },\r\n set pouredAmount(amount) {\r\n player.celestials.teresa.pouredAmount = amount;\r\n },\r\n get fill() {\r\n return Math.min(Math.log10(this.pouredAmount) / 24, 1);\r\n },\r\n get possibleFill() {\r\n return Math.min(Currency.realityMachines.value.plus(this.pouredAmount).log10() / 24, 1);\r\n },\r\n get rmMultiplier() {\r\n return Math.max(250 * Math.pow(this.pouredAmount / 1e24, 0.1), 1);\r\n },\r\n get runRewardMultiplier() {\r\n if(this.rewardMultiplier(player.celestials.teresa.bestRunAM)===Infinity) return 1e308;\r\n return this.rewardMultiplier(player.celestials.teresa.bestRunAM);\r\n },\r\n get isRunning() {\r\n return player.celestials.teresa.run;\r\n },\r\n get runCompleted() {\r\n return player.celestials.teresa.bestRunAM.gt(1);\r\n },\r\n quotes: Quotes.teresa,\r\n symbol: \"Ϟ\"\r\n};\r\n\r\nclass PerkShopUpgradeState extends RebuyableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.costCap = config.costCap;\r\n }\r\n\r\n get currency() {\r\n return Currency.perkPoints;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.celestials.teresa.perkShop[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.celestials.teresa.perkShop[this.id] = value;\r\n }\r\n\r\n get isCapped() {\r\n return this.cost === this.costCap(this.bought);\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n const otherReq = this.config.otherReq ? this.config.otherReq() : true;\r\n return this.cost <= this.currency.value && otherReq;\r\n }\r\n\r\n onPurchased() {\r\n if (this.id === 0) {\r\n GameCache.staticGlyphWeights.invalidate();\r\n }\r\n if (this.id === 1) {\r\n Autobuyer.reality.bumpAmount(2);\r\n }\r\n // Give a single music glyph\r\n if (this.id === 4 && !Pelle.isDoomed) {\r\n if (GameCache.glyphInventorySpace.value === 0) {\r\n // Refund the perk point if they didn't actually get a glyph\r\n Currency.perkPoints.add(1);\r\n GameUI.notify.error(\"You have no empty inventory space!\");\r\n } else {\r\n Glyphs.addToInventory(GlyphGenerator.musicGlyph());\r\n GameUI.notify.success(\"Created a Music Glyph\");\r\n }\r\n }\r\n // Fill the inventory with music glyphs\r\n if (this.id === 5 && !Pelle.isDoomed) {\r\n const toCreate = GameCache.glyphInventorySpace.value;\r\n for (let count = 0; count < toCreate; count++) Glyphs.addToInventory(GlyphGenerator.musicGlyph());\r\n GameUI.notify.success(`Created ${quantifyInt(\"Music Glyph\", toCreate)}`);\r\n }\r\n }\r\n}\r\n\r\nclass TeresaUnlockState extends BitUpgradeState {\r\n get bits() { return player.celestials.teresa.unlockBits; }\r\n set bits(value) { player.celestials.teresa.unlockBits = value; }\r\n\r\n get price() {\r\n return this.config.price;\r\n }\r\n\r\n get pelleDisabled() {\r\n return Pelle.isDoomed && this.config.isDisabledInDoomed;\r\n }\r\n\r\n get isEffectActive() {\r\n return !this.pelleDisabled;\r\n }\r\n\r\n get canBeUnlocked() {\r\n return !this.isUnlocked && Teresa.pouredAmount >= this.price;\r\n }\r\n\r\n get description() {\r\n return typeof this.config.description === \"function\" ? this.config.description() : this.config.description;\r\n }\r\n\r\n onUnlock() {\r\n this.config.onUnlock?.();\r\n }\r\n}\r\n\r\nexport const TeresaUnlocks = mapGameDataToObject(\r\n GameDatabase.celestials.teresa.unlocks,\r\n config => new TeresaUnlockState(config)\r\n);\r\n\r\nexport const PerkShopUpgrade = mapGameDataToObject(\r\n GameDatabase.celestials.perkShop,\r\n config => new PerkShopUpgradeState(config)\r\n);\r\n\r\nEventHub.logic.on(GAME_EVENT.TAB_CHANGED, () => {\r\n if (Tab.celestials.teresa.isOpen) Teresa.quotes.initial.show();\r\n});\r\n\r\nEventHub.logic.on(GAME_EVENT.GAME_LOAD, () => Teresa.checkForUnlocks());\r\n","import { Currency } from \"../currency\";\r\nimport { BitUpgradeState, RebuyableMechanicState } from \"../game-mechanics\";\r\nimport { GameDatabase } from \"../secret-formula/game-database\";\r\n\r\nimport { Quotes } from \"./quotes\";\r\n\r\nexport const Kohler = {\r\n get displayName(){\r\n return false ? \"Kohler\" : \"???\"\r\n },\r\n get possessiveName(){\r\n return false ? \"Kohler's\" : \"???'s\"\r\n },\r\n get isUnlocked() {\r\n return false;\r\n },\r\n quotes: Quotes.kohler,\r\n get symbol(){ \r\n return false ? \"\" : \"?\"\r\n },\r\n\r\n get unlockProgress() {\r\n let Progress = 5;\r\n let stage1 = Math.min(15*Math.log10(CorruptionData.corruptionChallenge.recordScore)/Math.log10(5e7),15)\r\n Progress += stage1;\r\n if(stage1<15){\r\n return parseFloat(Progress.toFixed(2));\r\n }\r\n let stage2 = Math.min(15*Math.ceil(CorruptionData.recordCorruptedFragments)/30,15);\r\n Progress += stage2;\r\n if(stage2<15){\r\n return parseFloat(Progress.toFixed(2));\r\n }\r\n let stage3 = Math.min(30*(Math.log10(Decimal.log10(Currency.antimatter.value))-20)/5,30);\r\n if(stage3<0) stage3=0;\r\n if(player.celestials.kohler.unlockMilestone[4]) stage3=30;\r\n Progress += stage3;\r\n return parseFloat(Progress.toFixed(2));\r\n },\r\n checkForUnlocks() {\r\n for (const info of KohlerProgressUnlocks.all) {\r\n info.unlock();\r\n }\r\n },\r\n setUnlockProgress() {\r\n player.celestials.kohler.unlockProgress = this.unlockProgress();\r\n }\r\n};\r\n\r\nclass KohlerProgressUnlockState extends BitUpgradeState {\r\n get bits() { return player.celestials.kohler.unlockProgress; }\r\n set bits(value) { player.celestials.kohler.unlockProgress = value; }\r\n\r\n get isEffectActive() {\r\n return this.isUnlocked;\r\n }\r\n\r\n get isUnlocked() {\r\n if(player.celestials.kohler.unlockMilestone[this.config.id]) return true;\r\n let unlocked = typeof this.config.condition === \"function\" ? this.config.condition() : this.config.condition;\r\n if (unlocked) player.celestials.kohler.unlockMilestone[this.config.id] = true;\r\n return /*!this.isUnlocked &&*/ unlocked;\r\n }\r\n\r\n get description() {\r\n return typeof this.config.description === \"function\" ? this.config.description() : this.config.description;\r\n }\r\n\r\n onUnlock() {\r\n this.config.onUnlock?.();\r\n }\r\n}\r\n\r\nexport const KohlerProgressUnlocks = mapGameDataToObject(\r\n GameDatabase.mending.kohlerUnlockProgress.progressUnlocks,\r\n config => new KohlerProgressUnlockState(config)\r\n);\r\n\r\nEventHub.logic.on(GAME_EVENT.GAME_LOAD, () => Kohler.checkForUnlocks());","import { BitUpgradeState } from \"../game-mechanics\";\r\nimport { GameDatabase } from \"../secret-formula/game-database\";\r\n\r\nimport { DC } from \"../constants\";\r\n\r\nimport { Quotes } from \"./quotes\";\r\n\r\nexport const EFFARIG_STAGES = {\r\n INFINITY: 1,\r\n ETERNITY: 2,\r\n REALITY: 3,\r\n COMPLETED: 4,\r\n MEND: 5,\r\n MEND_COMPLETED: 6,\r\n};\r\n\r\nexport const Effarig = {\r\n displayName: \"Effarig\",\r\n possessiveName: \"Effarig's\",\r\n initializeRun() {\r\n clearCelestialRuns();\r\n player.celestials.effarig.run = true;\r\n recalculateAllGlyphs();\r\n Tab.reality.glyphs.show(false);\r\n },\r\n get isRunning() {\r\n return player.celestials.effarig.run;\r\n },\r\n get currentStage() {\r\n if (!EffarigUnlock.infinity.isUnlocked) {\r\n return EFFARIG_STAGES.INFINITY;\r\n }\r\n if (!EffarigUnlock.eternity.isUnlocked) {\r\n return EFFARIG_STAGES.ETERNITY;\r\n }\r\n if (!EffarigUnlock.reality.isUnlocked) {\r\n return EFFARIG_STAGES.REALITY;\r\n }\r\n if (!Ra.unlocks.effarigMendUnlock.isUnlocked){\r\n return EFFARIG_STAGES.COMPLETED;\r\n }\r\n if (!EffarigUnlock.mend.isUnlocked){\r\n return EFFARIG_STAGES.MEND;\r\n }\r\n return EFFARIG_STAGES.MEND_COMPLETED;\r\n },\r\n get currentStageName() {\r\n switch (this.currentStage) {\r\n case EFFARIG_STAGES.INFINITY:\r\n return \"Infinity\";\r\n case EFFARIG_STAGES.ETERNITY:\r\n return \"Eternity\";\r\n case EFFARIG_STAGES.REALITY:\r\n case EFFARIG_STAGES.COMPLETED:\r\n return \"Reality\";\r\n case EFFARIG_STAGES.MEND:\r\n return \"Mend\";\r\n default:\r\n return \"\";\r\n }\r\n },\r\n get eternityCap() {\r\n return this.isRunning && this.currentStage === EFFARIG_STAGES.ETERNITY ? DC.E50 : undefined;\r\n },\r\n get glyphLevelCap() {\r\n switch (this.currentStage) {\r\n case EFFARIG_STAGES.INFINITY:\r\n return 100;\r\n case EFFARIG_STAGES.ETERNITY:\r\n return 1500;\r\n case EFFARIG_STAGES.REALITY:\r\n return 2000;\r\n case EFFARIG_STAGES.MEND:\r\n return 3500;\r\n default:\r\n return 10000;\r\n }\r\n },\r\n get glyphEffectAmount() {\r\n const genEffectBitmask = Glyphs.activeWithoutCompanion\r\n .filter(g => generatedTypes.includes(g.type))\r\n .reduce((prev, curr) => prev | curr.effects, 0);\r\n const nongenEffectBitmask = Glyphs.activeWithoutCompanion\r\n .filter(g => !generatedTypes.includes(g.type))\r\n .reduce((prev, curr) => prev | curr.effects, 0);\r\n return countValuesFromBitmask(genEffectBitmask) + countValuesFromBitmask(nongenEffectBitmask);\r\n },\r\n get shardsGained() {\r\n if (!TeresaUnlocks.effarig.canBeApplied) return new Decimal(0);\r\n return (Decimal.floor(Decimal.pow(Currency.eternityPoints.exponent / 7500, this.glyphEffectAmount)).times(AlchemyResource.effarig.effectValue));\r\n },\r\n get maxRarityBoost() {\r\n return 5 * Math.log10(Decimal.log10(Currency.relicShards.value.plus(10)));\r\n },\r\n nerfFactor(power) {\r\n let c;\r\n switch (this.currentStage) {\r\n case EFFARIG_STAGES.INFINITY:\r\n c = 1500;\r\n break;\r\n case EFFARIG_STAGES.ETERNITY:\r\n c = 29.29;\r\n break;\r\n case EFFARIG_STAGES.MEND:\r\n c = 6000; //this needs tweaking\r\n break;\r\n case EFFARIG_STAGES.REALITY:\r\n default:\r\n c = 25;\r\n break;\r\n }\r\n return 3 * (1 - c / (c + Math.sqrt(power.pLog10())));\r\n },\r\n get tickDilation() {\r\n return 0.7 + 0.1 * this.nerfFactor(Currency.timeShards.value);\r\n },\r\n get multDilation() {\r\n return 0.25 + 0.25 * this.nerfFactor(Currency.infinityPower.value);\r\n },\r\n get tickspeed() {\r\n const base = 3 + Tickspeed.baseValue.reciprocal().log10();\r\n return Decimal.pow10(Math.pow(base, this.tickDilation)).reciprocal();\r\n },\r\n multiplier(mult) {\r\n const base = new Decimal(mult).pLog10();\r\n return Decimal.pow10(Math.pow(base, this.multDilation));\r\n },\r\n get bonusRG() {\r\n // Will return 0 if Effarig Infinity is uncompleted\r\n return Math.floor(replicantiCap().pLog10() / LOG10_MAX_VALUE - 1);\r\n },\r\n quotes: Quotes.effarig,\r\n symbol: \"Ϙ\"\r\n};\r\n\r\nclass EffarigUnlockState extends BitUpgradeState {\r\n get bits() { return player.celestials.effarig.unlockBits; }\r\n set bits(value) { player.celestials.effarig.unlockBits = value; }\r\n\r\n get cost() {\r\n return this.config.cost;\r\n }\r\n\r\n get isEffectActive() {\r\n return !Pelle.isDisabled(\"effarig\");\r\n }\r\n\r\n purchase() {\r\n if (this.isUnlocked || !Currency.relicShards.purchase(this.cost)) return;\r\n this.unlock();\r\n this.config.onPurchased?.();\r\n }\r\n}\r\n\r\nexport const EffarigUnlock = mapGameDataToObject(\r\n GameDatabase.celestials.effarig.unlocks,\r\n config => new EffarigUnlockState(config)\r\n);\r\n\r\nEventHub.logic.on(GAME_EVENT.TAB_CHANGED, () => {\r\n if (Tab.celestials.effarig.isOpen) Effarig.quotes.initial.show();\r\n});\r\n\r\nEventHub.logic.on(GAME_EVENT.BIG_CRUNCH_BEFORE, () => {\r\n if (!Effarig.isRunning) return;\r\n Effarig.quotes.completeInfinity.show();\r\n});\r\n\r\nEventHub.logic.on(GAME_EVENT.ETERNITY_RESET_BEFORE, () => {\r\n if (!Effarig.isRunning) return;\r\n Effarig.quotes.completeEternity.show();\r\n});\r\n","import { BitUpgradeState, GameMechanicState } from \"../game-mechanics\";\r\nimport { Glyphs, MendingUpgrade } from \"../globals\";\r\nimport { GameDatabase } from \"../secret-formula/game-database\";\r\n\r\nimport { SpeedrunMilestones } from \"../speedrun\";\r\n\r\nimport { Quotes } from \"./quotes\";\r\n\r\n/**\r\n * Information about how to format runUnlocks:\r\n * id: unique id\r\n * name: the achievement name\r\n * description: Description what you need to do, for values add {value}\r\n * values: different values to display and check against the game\r\n * condition: function that takes the current value as an argument, if true completes an achievement\r\n * format: optional function that formats the value, defaults to format()\r\n */\r\n\r\nclass VRunUnlockState extends GameMechanicState {\r\n get completions() {\r\n const completions = player.celestials.v.runUnlocks[this.id];\r\n return completions === undefined ? 0 : completions;\r\n }\r\n\r\n get conditionBaseValue() {\r\n const value = this.config.values[this.completions];\r\n return value === undefined ? this.config.values[this.completions - 1] : value;\r\n }\r\n\r\n get canBeReduced() {\r\n return this.completions < this.config.values.length && this.completions !== 0 &&\r\n new Decimal(this.reduction).neq(this.config.maxShardReduction(this.conditionBaseValue));\r\n }\r\n\r\n get isReduced() {\r\n if (player.celestials.v.goalReductionSteps[this.id] === 0) return false;\r\n return (VUnlocks.shardReduction.canBeApplied && this.reduction > 0);\r\n }\r\n\r\n get reductionCost() {\r\n const stepCount = this.config.reductionStepSize ? this.config.reductionStepSize : 1;\r\n if (this.config.isHard) {\r\n // The numbers come from inside of nextHardReductionCost, this is an effective bulk-buy factor\r\n const modifiedStepCount = (Math.pow(1.15, stepCount) - 1) / 0.15;\r\n return modifiedStepCount * V.nextHardReductionCost(player.celestials.v.goalReductionSteps[this.id]);\r\n }\r\n if (this.config.isSuperHard) {\r\n // The numbers come from inside of nextHardReductionCost, this is an effective bulk-buy factor\r\n const modifiedStepCount = (Math.pow(1.5, stepCount) - 1) / 0.5;\r\n return modifiedStepCount * V.nextSuperHardReductionCost(player.celestials.v.goalReductionSteps[this.id]);\r\n }\r\n return stepCount * V.nextNormalReductionCost();\r\n }\r\n\r\n get tiersReduced() {\r\n return player.celestials.v.goalReductionSteps[this.id] / 100;\r\n }\r\n\r\n get reduction() {\r\n const value = this.conditionBaseValue;\r\n return Math.clamp(this.config.shardReduction(this.tiersReduced), 0, this.config.maxShardReduction(value));\r\n }\r\n\r\n get conditionValue() {\r\n let value = this.conditionBaseValue;\r\n if (!this.isReduced) return value;\r\n value -= this.reduction;\r\n return value;\r\n }\r\n\r\n get formattedDescription() {\r\n return this.config.description(this.conditionValue);\r\n }\r\n\r\n set completions(value) {\r\n player.celestials.v.runUnlocks[this.id] = value;\r\n }\r\n\r\n tryComplete() {\r\n const playerData = player.celestials.v;\r\n const value = this.config.currentValue();\r\n if (this.config.condition() && Decimal.gte(value, playerData.runRecords[this.id])) {\r\n playerData.runRecords[this.id] = value;\r\n playerData.runGlyphs[this.id] = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n }\r\n\r\n let forceCap = 0\r\n while (this.completions < this.config.values.length &&\r\n Decimal.gte(playerData.runRecords[this.id], this.conditionValue) &&\r\n forceCap < 20) {\r\n forceCap++\r\n if (!V.isFlipped && this.config.isHard) break;\r\n if (!V.isSuperFlipped && this.config.isSuperHard) break;\r\n this.completions++;\r\n GameUI.notify.success(`You have unlocked V-Achievement\r\n '${this.config.name}' tier ${formatInt(this.completions)}`);\r\n\r\n V.updateTotalRunUnlocks();\r\n\r\n for (const quote of V.quotes.all) {\r\n // Quotes without requirements will be shown in other ways\r\n if (quote.requirement) {\r\n quote.show();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass VUnlockState extends BitUpgradeState {\r\n get bits() { return player.celestials.v.unlockBits; }\r\n set bits(value) { player.celestials.v.unlockBits = value; }\r\n\r\n get pelleDisabled() {\r\n return Pelle.isDoomed && this !== VUnlocks.vAchievementUnlock;\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isUnlocked && !this.pelleDisabled;\r\n }\r\n\r\n get description() {\r\n return typeof this.config.description === \"function\" ? this.config.description()\r\n : this.config.description;\r\n }\r\n\r\n get rewardText() {\r\n return typeof this.config.reward === \"function\" ? this.config.reward()\r\n : this.config.reward;\r\n }\r\n\r\n get canBeUnlocked() {\r\n return this.config.requirement() && !this.isUnlocked;\r\n }\r\n\r\n get formattedEffect() {\r\n if (!this.config.effect || !this.config.format) return \"\";\r\n\r\n return this.config.format(this.effectValue);\r\n }\r\n\r\n onUnlock() {\r\n GameUI.notify.success(this.description);\r\n }\r\n}\r\n\r\n/**\r\n * @param {number} id\r\n * @return {VRunUnlockState}\r\n */\r\nexport const VRunUnlock = VRunUnlockState.createAccessor(GameDatabase.celestials.v.runUnlocks);\r\n\r\nexport const VRunUnlocks = {\r\n /**\r\n * @type {VRunUnlockState[]}\r\n */\r\n all: VRunUnlock.index.compact(),\r\n};\r\n\r\nexport const VUnlocks = mapGameDataToObject(\r\n GameDatabase.celestials.v.unlocks,\r\n config => new VUnlockState(config)\r\n);\r\n\r\nexport const V = {\r\n displayName: \"V\",\r\n possessiveName: \"V's\",\r\n spaceTheorems: 0,\r\n checkForUnlocks() {\r\n for (const unl of VUnlocks.all) {\r\n if (unl === VUnlocks.vAchievementUnlock) continue;\r\n unl.unlock();\r\n }\r\n\r\n if (this.isRunning) {\r\n for (const unlock of VRunUnlocks.all) {\r\n unlock.tryComplete();\r\n }\r\n if (this.spaceTheorems >= 36) SpeedrunMilestones(22).tryComplete();\r\n }\r\n\r\n if (this.isSuperRunning) {\r\n for (const unlock of VRunUnlocks.all) {\r\n unlock.tryComplete();\r\n }\r\n }\r\n\r\n if (VUnlocks.raUnlock.canBeApplied && !Ra.unlocks.autoTP.canBeApplied) {\r\n Ra.checkForUnlocks();\r\n }\r\n },\r\n get canUnlockCelestial() {\r\n return VUnlocks.vAchievementUnlock.canBeUnlocked;\r\n },\r\n unlockCelestial() {\r\n player.celestials.v.unlockBits |= (1 << VUnlocks.vAchievementUnlock.id);\r\n GameUI.notify.success(\"You have unlocked V, The Celestial Of Achievements!\", 10000);\r\n V.quotes.unlock.show();\r\n },\r\n initializeRun() {\r\n clearCelestialRuns();\r\n player.celestials.v.run = true;\r\n this.quotes.realityEnter.show();\r\n },\r\n initializeSuperRun() {\r\n clearCelestialRuns();\r\n player.celestials.v.superrun = true;\r\n },\r\n updateTotalRunUnlocks() {\r\n let sum = 0\r\n let mult = MendingUpgrade(14).isBought ? 3 : 1\r\n for (let i = 0; i < player.celestials.v.runUnlocks.length; i++) {\r\n sum += player.celestials.v.runUnlocks[i] * mult;\r\n if (i>=6 && i<12) sum += player.celestials.v.runUnlocks[i] * mult;\r\n if (i>=12) sum += player.celestials.v.runUnlocks[i] * 4 * mult;\r\n }\r\n this.spaceTheorems = sum;\r\n },\r\n reset() {\r\n player.celestials.v = {\r\n unlockBits: 0,\r\n run: false,\r\n quotes: [],\r\n runUnlocks: [0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n goalReductionSteps: [0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n STSpent: 0,\r\n runGlyphs: [[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []],\r\n runRecords: [-10, 0, 0, 0, 0, 0, -10, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n };\r\n this.spaceTheorems = 0;\r\n },\r\n get availableST() {\r\n return V.spaceTheorems - player.celestials.v.STSpent;\r\n },\r\n get isRunning() {\r\n return player.celestials.v.run;\r\n },\r\n get isSuperRunning() {\r\n return player.celestials.v.superrun;\r\n },\r\n get beingInitialized() {\r\n return player.celestials.v.beingInitialized;\r\n },\r\n get isFlipped() {\r\n return Ra.unlocks.unlockHardV.isUnlocked;\r\n },\r\n get isSuperFlipped() {\r\n return Ra.unlocks.unlockSHardV.isUnlocked;\r\n },\r\n get isFullyCompleted() {\r\n let x = MendingUpgrade(14).isBought? 198 : 66;\r\n if(Ra.unlocks.unlockSHardV.isUnlocked) x = MendingUpgrade(14).isBought? 648 : 216;\r\n return this.spaceTheorems >= x;\r\n },\r\n nextNormalReductionCost() {\r\n return 1000;\r\n },\r\n nextHardReductionCost(currReductionSteps) {\r\n return 1000 * Math.pow(1.15, currReductionSteps);\r\n },\r\n nextSuperHardReductionCost(currReductionSteps) {\r\n return 1e20 * Math.pow(1.5, currReductionSteps);\r\n },\r\n quotes: Quotes.v,\r\n symbol: \"⌬\"\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.TAB_CHANGED, () => {\r\n if (Tab.celestials.v.isOpen) V.quotes.initial.show();\r\n});\r\n","import { BitUpgradeState, GameMechanicState } from \"../../game-mechanics\";\r\nimport { MendingUpgrade } from \"../../mending-upgrades\";\r\nimport { Quotes } from \"../quotes\";\r\nimport { normalTimeStudies } from \"../../secret-formula/eternity/time-studies/normal-time-studies\";\r\nimport { DC } from \"../../constants\";\r\nimport { CorruptionUpgrade } from \"../../corruption-upgrades\";\r\n\r\nconst ts306 = normalTimeStudies.find(obj => obj.id === 306);\r\n\r\n\r\nclass RaUnlockState extends BitUpgradeState {\r\n get bits() { return player.celestials.ra.unlockBits; }\r\n set bits(value) { player.celestials.ra.unlockBits = value; }\r\n\r\n get modBits() { return player.celestials.ra.modUnlockBits; }\r\n set modBits(value) { player.celestials.ra.modUnlockBits = value; }\r\n\r\n get disabledByPelle() {\r\n return Pelle.isDoomed && this.config.disabledByPelle;\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isUnlocked && !this.disabledByPelle;\r\n }\r\n\r\n get requirementText() {\r\n const pet = this.pet.name;\r\n return this.level === 1\r\n ? `Unlock ${pet}`\r\n : `Get ${pet} to level ${this.level}`;\r\n }\r\n\r\n get reward() {\r\n return typeof this.config.reward === \"function\"\r\n ? this.config.reward()\r\n : this.config.reward;\r\n }\r\n\r\n get displayIcon() {\r\n return this.disabledByPelle ? `` : this.config.displayIcon;\r\n }\r\n\r\n get pet() {\r\n return Ra.pets[this.config.pet];\r\n }\r\n\r\n get level() {\r\n return this.config.level;\r\n }\r\n\r\n get canBeUnlocked() {\r\n //alright here you are\r\n if(this.pet.id == 'laitela'){\r\n if(this.id == 20 && player.celestials.ra.permanentMemories.lai50) return true;\r\n if(this.id == 21 && player.celestials.ra.permanentMemories.lai65) return true;\r\n };\r\n if(this.pet.id == 'ra' && this.id == 30 && player.celestials.ra.permanentMemories.ra2) return true;\r\n //ends\r\n return this.pet.level >= this.level && !this.isUnlocked;\r\n }\r\n\r\n onUnlock() {\r\n this.config.onUnlock?.();\r\n }\r\n}\r\n\r\nconst unlocks = mapGameDataToObject(\r\n GameDatabase.celestials.ra.unlocks,\r\n config => new RaUnlockState(config)\r\n);\r\n\r\nclass RaPetState extends GameMechanicState {\r\n get data() {\r\n return player.celestials.ra.pets[this.id];\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get chunkGain() {\r\n return this.config.chunkGain;\r\n }\r\n\r\n get memoryGain() {\r\n return this.config.memoryGain;\r\n }\r\n\r\n get secondaryMemoryChunkGain(){\r\n return this.config.secondaryMemoryChunkGain;\r\n }\r\n\r\n get color() {\r\n return this.config.color;\r\n }\r\n\r\n get requiredUnlock() {\r\n return this.config.requiredUnlock?.();\r\n }\r\n\r\n get rawMemoryChunksPerSecond() {\r\n return this.config.rawMemoryChunksPerSecond();\r\n }\r\n\r\n get memoryProductionMultiplier() {\r\n return this.config.memoryProductionMultiplier();\r\n }\r\n\r\n get isUnlocked() {\r\n return this.requiredUnlock === undefined || this.requiredUnlock.isUnlocked;\r\n }\r\n\r\n get isCapped() {\r\n return this.level >= Ra.levelCap;\r\n }\r\n\r\n get level() {\r\n return this.isUnlocked ? this.data.level : 0;\r\n }\r\n\r\n set level(value) {\r\n this.data.level = value;\r\n }\r\n\r\n get memories() {\r\n return this.data.memories;\r\n }\r\n\r\n set memories(value) {\r\n this.data.memories = Math.min(value, 1e300);\r\n }\r\n\r\n get memoryChunks() {\r\n return this.data.memoryChunks;\r\n }\r\n\r\n set memoryChunks(value) {\r\n this.data.memoryChunks = Math.min(1e300, value);\r\n }\r\n\r\n get requiredMemories() {\r\n return Ra.requiredMemoriesForLevel(this, this.level);\r\n }\r\n\r\n get memoryChunksPerSecond() {\r\n if (!this.canGetMemoryChunks) return 0;\r\n let res = this.rawMemoryChunksPerSecond * this.chunkUpgradeCurrentMult *\r\n Math.max(Effects.product(Ra.unlocks.continuousTTBoost.effects.memoryChunks, GlyphSacrifice.reality), 1);\r\n if (this.hasRemembrance) res *= Ra.remembrance.multiplier;\r\n else if (Ra.petWithRemembrance) res *= Ra.remembrance.nerf;\r\n res *= WarpUpgrade(5).effectOrDefault(1);\r\n if (Ra.unlocks.raXP.isUnlocked) res *= Math.log10((Math.max(Currency.imaginaryMachines.value, 1)));\r\n if (Ra.unlocks.pelleXP.isUnlocked){\r\n res *= (Math.log10(player.records.bestReality.remWithoutGG + 1) / 1.6667) + 1;\r\n }\r\n if (!Ra.isRunning && Ra.unlocks.generateMemChunksOutOfRasReality.isUnlocked) res /= 100;\r\n return res;\r\n }\r\n\r\n get canGetMemoryChunks() {\r\n return this.isUnlocked && (Ra.isRunning || (this.id === \"pelle\" && Pelle.isDoomed) || Ra.unlocks.generateMemChunksOutOfRasReality.isUnlocked) && this.level < Ra.levelCap;\r\n }\r\n\r\n get hasRemembrance() {\r\n if (Ra.unlocks.remembranceAlwaysActiveAndShopUnlock.isUnlocked) return true;\r\n return Ra.petWithRemembrance === this.name;\r\n }\r\n\r\n get memoryUpgradeCurrentMult() {\r\n return Math.pow(1.3, this.data.memoryUpgrades);\r\n }\r\n\r\n get chunkUpgradeCurrentMult() {\r\n return Math.pow(1.5, this.data.chunkUpgrades);\r\n }\r\n\r\n get memoryUpgradeCost() {\r\n return 1000 * Math.pow(5, this.data.memoryUpgrades);\r\n }\r\n\r\n get chunkUpgradeCost() {\r\n return 5000 * Math.pow(25, this.data.chunkUpgrades);\r\n }\r\n\r\n get canBuyMemoryUpgrade() {\r\n return this.memoryUpgradeCost <= this.memories;\r\n }\r\n\r\n get canBuyChunkUpgrade() {\r\n return this.chunkUpgradeCost <= this.memories;\r\n }\r\n\r\n get memoryUpgradeCapped() {\r\n return this.memoryUpgradeCost >= 0.5 * Ra.requiredMemoriesForLevel(this, Ra.levelCap - 1);\r\n }\r\n\r\n get chunkUpgradeCapped() {\r\n return this.chunkUpgradeCost >= 0.5 * Ra.requiredMemoriesForLevel(this, Ra.levelCap - 1);\r\n }\r\n\r\n purchaseMemoryUpgrade() {\r\n if (!this.canBuyMemoryUpgrade || this.memoryUpgradeCapped) return;\r\n\r\n if(this.spendsMemories) this.memories -= this.memoryUpgradeCost;\r\n this.data.memoryUpgrades++;\r\n }\r\n\r\n purchaseChunkUpgrade() {\r\n if (!this.canBuyChunkUpgrade || this.chunkUpgradeCapped) return;\r\n\r\n if(this.spendsMemories) this.memories -= this.chunkUpgradeCost;\r\n this.data.chunkUpgrades++;\r\n }\r\n\r\n levelUp() {\r\n if (this.memories < this.requiredMemories) return;\r\n if(this.id === 'pelle' && this.level === 99 && Ra.totalPetLevel != 699) return;\r\n\r\n if(this.spendsMemories) this.memories -= this.requiredMemories;\r\n this.level++;\r\n Ra.checkForUnlocks();\r\n }\r\n\r\n get spendsMemories() {\r\n return !Ra.unlocks.upgradesDontSpendMems.isUnlocked;\r\n }\r\n\r\n get unlocks() {\r\n return Ra.unlocks.all\r\n .filter(x => x.pet === this)\r\n .sort((a, b) => a.level - b.level);\r\n }\r\n\r\n tick(realDiff, generateChunks) {\r\n const seconds = realDiff / 1000;\r\n const newMemoryChunks = generateChunks\r\n ? seconds * this.memoryChunksPerSecond\r\n : 0;\r\n // Adding memories from half of the gained chunks this tick results in the best mathematical behavior\r\n // for very long simulated ticks\r\n let memsPerSecond = Math.pow((this.memoryChunks + newMemoryChunks / 2) * Ra.productionPerMemoryChunk *\r\n this.memoryUpgradeCurrentMult * this.shopMemMultEffect, MendingUpgrade(15).isBought ? 1.5 : 1) * (Pelle.isDoomed && Ra.unlocks.boostMemoryGain.isUnlocked ? 500 : 1);\r\n if(CorruptionUpgrade(1).isBought){switch(Ra.currentCelestial){\r\n case 1: if(this.id=='teresa') memsPerSecond *= 1500;break;\r\n case 2: if(this.id=='effarig') memsPerSecond *= 1500;break;\r\n case 3: if(this.id=='enslaved') memsPerSecond *= 1500;break;\r\n case 4: if(this.id=='v') memsPerSecond *= 1500;break;\r\n case 5: if(this.id=='ra') memsPerSecond *= 1500;break;\r\n case 6: if(this.id=='laitela') memsPerSecond *= 1500;break;\r\n case 7: if(this.id=='pelle') memsPerSecond *= 1500;break;\r\n };}\r\n let newMemories = seconds * memsPerSecond;\r\n this.memoryChunks += newMemoryChunks;\r\n this.memories += newMemories;\r\n }\r\n\r\n reset() {\r\n let x = MendingMilestone.ten.isReached ? 10 : 1;\r\n //this.data.level = 1;\r\n Ra.pets.teresa.level = x;\r\n Ra.pets.effarig.level = x;\r\n Ra.pets.enslaved.level = x;\r\n Ra.pets.v.level = x;\r\n Ra.pets.ra.level = 1;\r\n Ra.pets.laitela.level = 1;\r\n Ra.pets.pelle.level = 1;\r\n this.data.memories = 0;\r\n this.data.memoryChunks = 0;\r\n this.data.memoryUpgrades = 0;\r\n this.data.chunkUpgrades = 0;\r\n }\r\n\r\n get shopMemMultEffect(){\r\n return RaUpgrade[`inc${this.id.charAt(0).toUpperCase()}${this.id.substring(1)}XPGain`].effectValue;\r\n }\r\n\r\n get shopWeakenScalingEffect(){\r\n return RaUpgrade[`weaken${this.id.charAt(0).toUpperCase()}${this.id.substring(1)}Scaling`].effectValue;\r\n }\r\n}\r\n\r\nconst pets = mapGameDataToObject(\r\n GameDatabase.celestials.ra.pets,\r\n config => new RaPetState(config)\r\n);\r\n\r\nexport const Ra = {\r\n displayName: \"Ra\",\r\n possessiveName: \"Ra's\",\r\n alchauto: 0,\r\n unlocks,\r\n pets,\r\n remembrance: {\r\n get multiplier(){\r\n if(Ra.unlocks.remembranceBoost.isUnlocked) return 75; \r\n return 5;\r\n },\r\n get nerf(){\r\n if(Ra.unlocks.remembranceAlwaysActiveAndShopUnlock.isUnlocked) return 1; \r\n return 0.5;\r\n },\r\n requiredLevels: 20,\r\n get isUnlocked() {\r\n return Ra.totalPetLevel >= this.requiredLevels;\r\n }\r\n },\r\n // Dev/debug function for easier testing\r\n reset() {\r\n const data = player.celestials.ra;\r\n data.unlockBits = 0;\r\n data.modUnlockBits = [0, 0, 0];\r\n data.run = false;\r\n data.charged = new Set();\r\n data.disCharge = false;\r\n data.breakCharged = new Set();\r\n data.breakDischarge = false;\r\n data.peakGamespeed = new Decimal(1);\r\n for (const pet of Ra.pets.all) pet.reset();\r\n },\r\n memoryTick(realDiff, generateChunks) {\r\n if (!this.isUnlocked) return;\r\n for (const pet of Ra.pets.all) pet.tick(realDiff, generateChunks);\r\n },\r\n get productionPerMemoryChunk() {\r\n let res = Effects.product(Ra.unlocks.continuousTTBoost.effects.memories, Achievement(168), Achievement(195));\r\n for (const pet of Ra.pets.all) {\r\n if (pet.isUnlocked) res = new Decimal(res).times(pet.memoryProductionMultiplier);\r\n }\r\n if (MendingMilestone.one.isReached) res = new Decimal(res).times(25);\r\n if (player.timestudy.studies.includes(306)) res = new Decimal(res).times(ts306.effect());\r\n res = res.timesEffectOf(WarpUpgrade(2)).times(VUnlocks.vAchRa.effectOrDefault(1));\r\n \r\n return res.toNumber();\r\n },\r\n get memoryBoostResources() {\r\n const boostList = [];\r\n for (const pet of Ra.pets.all) {\r\n if (pet.memoryProductionMultiplier !== 1) boostList.push(pet.memoryGain);\r\n }\r\n if (Achievement(168).isUnlocked) boostList.push(\"Achievement 168\");\r\n if (Ra.unlocks.continuousTTBoost.canBeApplied) boostList.push(\"current TT\");\r\n if (MendingMilestone.one.isReached) boostList.push(\"Mending Milestone 1\");\r\n if (MendingUpgrade(15).isBought) boostList.push(\"Mending Upgrade 15\");\r\n\r\n if (boostList.length === 1) return `${boostList[0]}`;\r\n if (boostList.length === 2) return `${boostList[0]} and ${boostList[1]}`;\r\n return `${boostList.slice(0, -1).join(\", \")}, and ${boostList[boostList.length - 1]}`;\r\n },\r\n // So let's make Ra currency work? --sxy\r\n raPointsGain(diff) {\r\n if(!Ra.isRunning) return new Decimal(0);\r\n if(!Ra.unlocks.remembranceAlwaysActiveAndShopUnlock.isUnlocked) return new Decimal(0);\r\n let ticktime = diff/1000;\r\n let base = Math.max(player.dimensionBoosts - 2.5e9,0)/1e8;\r\n let powered = Decimal.pow(10,base).minus(1);\r\n let GainPerSec = new Decimal(powered.times(ticktime));\r\n return GainPerSec;\r\n },\r\n raGainPointLoop(diff){\r\n player.celestials.ra.raPoints = player.celestials.ra.raPoints.plus(Ra.raPointsGain(diff));\r\n },\r\n // Why the rebuyable of ra shop has complex name wtf --sxy\r\n \r\n // This is the exp required ON \"level\" in order to reach \"level + 1\"\r\n requiredMemoriesForLevel(pet, level) {\r\n if (level >= Ra.levelCap) return Infinity;\r\n let perMemScaling = 1\r\n let fixCostMulti = 1\r\n if (level >= 25) {fixCostMulti = 1e44}\r\n if (level >= 30) {perMemScaling = 1.35;fixCostMulti = 1e48}\r\n if (level >= 40) {perMemScaling = 1.35} \r\n if (level >= 50) {perMemScaling = 1.5;fixCostMulti = 1e50} \r\n if (level >= 65) {perMemScaling = 1.6} \r\n if (level >= 75) {perMemScaling = 1.75;fixCostMulti = 1e60} \r\n if (level >= 90) {perMemScaling = 2.25;fixCostMulti = 1e80} \r\n const adjustedLevel = level + Math.pow(level, 2) / 10;\r\n const post15Scaling = Math.pow(1.5, Math.max(0, level - 15));\r\n const post25Scaling = Math.pow(3, Math.max(0, level-25));\r\n let primeAnswer = Math.pow(adjustedLevel, 5.52) * post15Scaling * post25Scaling * 1e6;\r\n //if (level>=90) primeAnswer=primeAnswer*1e300;//temporary scale for balacing\r\n primeAnswer = primeAnswer / pet.shopWeakenScalingEffect;\r\n return Math.floor(Math.pow(primeAnswer, perMemScaling) * fixCostMulti);\r\n },\r\n // Returns a string containing a time estimate for gaining a specific amount of exp (UI only)\r\n timeToGoalString(pet, expToGain) {\r\n //This function did its job well, the 0ms issue is due to Number precision lost.\r\n //If the issue did need to fix, All ra should be decimalised.\r\n //Which is dangerous and I suggest pushing the work later\r\n //sxy\r\n\r\n //^ it might just be due to the formula was wrong? XD\r\n //asw\r\n\r\n //^ your version of this function is still chaos lmao\r\n //and since this function needs decimalised anyway I'll rewrite this\r\n //sxy\r\n\r\n // Quadratic formula for growth (uses constant growth for a = 0)\r\n /*const a = Enslaved.isStoringRealTime\r\n ? 0\r\n : Ra.productionPerMemoryChunk * pet.memoryUpgradeCurrentMult * pet.memoryChunksPerSecond * pet.shopMemMultEffect * ((Pelle.isDoomed && Ra.unlocks.boostMemoryGain.isUnlocked) ? 500 : 1);\r\n const b = Ra.productionPerMemoryChunk * pet.memoryUpgradeCurrentMult * pet.memoryChunks * pet.shopMemMultEffect * ((Pelle.isDoomed && Ra.unlocks.boostMemoryGain.isUnlocked) ? 500 : 1);\r\n //I will just leave HU1 code here haha --sxy\r\n /*if(CorruptionUpgrade(1).isBought){switch(Ra.currentCelestial){\r\n case 1: if(this.id=='teresa') memsPerSecond *= 1500;break;\r\n case 2: if(this.id=='effarig') memsPerSecond *= 1500;break;\r\n case 3: if(this.id=='enslaved') memsPerSecond *= 1500;break;\r\n case 4: if(this.id=='v') memsPerSecond *= 1500;break;\r\n case 5: if(this.id=='ra') memsPerSecond *= 1500;break;\r\n case 6: if(this.id=='laitela') memsPerSecond *= 1500;break;\r\n case 7: if(this.id=='pelle') memsPerSecond *= 1500;break;\r\n };}*/\r\n /*const c = -expToGain;\r\n const estimate = a === 0\r\n ? (MendingUpgrade(15).isBought \r\n ? -c / Math.pow(b, 1.5)\r\n : -c / b)\r\n : (MendingUpgrade(15).isBought\r\n // derivation for the formula in latex(paste this into any latex editor and compile it) - asw\r\n // \\int_0^t (at + b)^{1.5} dt + c = 0 \\\\\r\n // \\left[\\frac{2(at + b)^{2.5}}{5a}\\right]_0^t + c = 0 \\\\\r\n // \\frac{2(at + b)^{2.5}}{5a} - \\frac{2b^{2.5}}{5a} + c = 0 \\\\\r\n // 2(at + b)^{2.5} - 2b^{2.5} + 5ac = 0 \\\\\r\n // (at + b)^{2.5} - b^{2.5} + \\frac{5ac}{2} = 0 \\\\\r\n // (at + b)^{2.5} + \\frac{5ac}{2} = b^{2.5} \\\\\r\n // (at + b)^{2.5} = b^{2.5} - \\frac{5ac}{2} \\\\\r\n // at + b = (b^{2.5} - \\frac{5ac}{2})^{0.4} \\\\\r\n // at = (b^{2.5} - \\frac{5ac}{2})^{0.4} - b \\\\\r\n // t = \\frac{(b^{2.5} - \\frac{5ac}{2})^{0.4} - b}{a}\r\n ? (Math.pow(Math.pow(b, 2.5) - 5 * a * c / 2, 0.4) - b) / a\r\n : (Math.sqrt(Math.pow(b, 2) - 2 * a * c) - b) / (a));*/\r\n\r\n\r\n //decimalised rewritten version of this function--sxy\r\n\r\n // full rewrite\r\n // multiplier can be divided from total\r\n // -- wyxkk\r\n\r\n let power = MendingUpgrade(15).isBought ? 1.5 : 1;\r\n\r\n let multiplierInPower = new Decimal(Ra.productionPerMemoryChunk * pet.memoryUpgradeCurrentMult * pet.shopMemMultEffect);\r\n\r\n let multiplierOutPower = new Decimal(1);\r\n if(Pelle.isDoomed && Ra.unlocks.boostMemoryGain.isUnlocked){\r\n multiplierOutPower = multiplierOutPower.times(500);\r\n }\r\n let HUavaliable = false;\r\n if(CorruptionUpgrade(1).isBought){switch(Ra.currentCelestial){\r\n case 1: if(pet.id=='teresa') HUavaliable = true;break;\r\n case 2: if(pet.id=='effarig') HUavaliable = true;break;\r\n case 3: if(pet.id=='enslaved') HUavaliable = true;break;\r\n case 4: if(pet.id=='v') HUavaliable = true;break;\r\n case 5: if(pet.id=='ra') HUavaliable = true;break;\r\n case 6: if(pet.id=='laitela') HUavaliable = true;break;\r\n case 7: if(pet.id=='pelle') HUavaliable = true;break;\r\n };}\r\n if(HUavaliable){\r\n multiplierOutPower = multiplierOutPower.times(1500);\r\n }\r\n\r\n let a = new Decimal(pet.memoryChunksPerSecond);\r\n if(Enslaved.isStoringRealTime) a = new Decimal(0);\r\n let b = new Decimal(pet.memoryChunks);\r\n let c = new Decimal(expToGain).div(multiplierInPower.pow(power)).div(multiplierOutPower);\r\n\r\n // now to solve \\int_0^x (at+b)^power dt = c\r\n let estimateDecimal = new Decimal('2e308');\r\n if(a.eq(0)){\r\n estimateDecimal = c.div(b.pow(power));\r\n } else {\r\n // estimateDecimal = c.times(a).times(power+1).plus(b.pow(power+1)).pow(1/(power+1)).minus(b).div(a);\r\n // the add will cause precision lost\r\n // a fix, by using ax to approximate (1+x)^a-1 when x is small\r\n let midResult = c.times(a).times(power+1).div(b.pow(power+1));\r\n let midResult2 = new Decimal(0);\r\n if(midResult.gt(1e-6)){\r\n midResult2 = midResult.plus(1).pow(1/(power+1)).minus(1);\r\n } else { // the approximation is square precised, and 1e-12 level error is nothing\r\n midResult2 = midResult.times(1/(power+1));\r\n }\r\n estimateDecimal = b.div(a).times(midResult2);\r\n }\r\n\r\n //estimateDecimal = estimateDecimal.div(multiplierOutPower);\r\n //toNumber\r\n let estimate = estimateDecimal.toNumber();\r\n\r\n if (Number.isFinite(estimate)) {\r\n return `in ${TimeSpan.fromSeconds(new Decimal(estimate)).toStringShort()}`;\r\n }\r\n return \"in an exteremely long time\";\r\n },\r\n get totalPetLevel() {\r\n return this.pets.all.map(pet => (pet.isUnlocked ? pet.level : 0)).sum();\r\n },\r\n get levelCap() {\r\n return MendingUpgrade(19).isBought ? 100 : 25;\r\n },\r\n get maxTotalPetLevel() {\r\n return this.levelCap * this.pets.all.length;\r\n },\r\n checkForUnlocks() {\r\n if (!VUnlocks.raUnlock.canBeApplied && !MendingUpgrade(19).isBought) return;\r\n for (const unl of Ra.unlocks.all) {\r\n unl.unlock();\r\n }\r\n\r\n Ra.checkForQuotes();\r\n },\r\n checkForQuotes() {\r\n for (const quote of Ra.quotes.all) {\r\n // Quotes without requirements will be shown in other ways\r\n if (quote.requirement) {\r\n quote.show();\r\n }\r\n }\r\n },\r\n initializeRun() {\r\n clearCelestialRuns();\r\n player.celestials.ra.run = true;\r\n this.quotes.realityEnter.show();\r\n },\r\n toggleMode() {\r\n player.celestials.ra.activeMode = !player.celestials.ra.activeMode;\r\n },\r\n // This gets widely used in lots of places since the relevant upgrade is \"all forms of continuous non-dimension\r\n // production\", which in this case is infinities, eternities, replicanti, dilated time, and time theorem generation.\r\n // It also includes the 1% IP time study, Teresa's 1% EP upgrade, and the charged RM generation upgrade. Note that\r\n // removing the hardcap of 10 may cause runaways.\r\n theoremBoostFactor() {\r\n return Math.min(1000, Math.max(0, Currency.timeTheorems.value.pLog10() - 850) / 500 + 10, Math.max(0, Currency.timeTheorems.value.pLog10() - 350) / 50);\r\n },\r\n get isUnlocked() {\r\n return V.spaceTheorems >= 36;\r\n },\r\n get isRunning() {\r\n return player.celestials.ra.run;\r\n },\r\n get totalCharges() {\r\n return Ra.unlocks.chargedInfinityUpgrades.effectOrDefault(0);\r\n },\r\n get chargesLeft() {\r\n return this.totalCharges - player.celestials.ra.charged.size;\r\n },\r\n get totalBreakCharges() {\r\n return Ra.unlocks.chargedBreakInfinityUpgrades.effectOrDefault(0);\r\n },\r\n get breakChargesLeft(){\r\n return this.totalBreakCharges - player.celestials.ra.breakCharged.size;\r\n },\r\n get canBuyTriad() {\r\n return Ra.unlocks.unlockHardV.canBeApplied;\r\n },\r\n get petWithRemembrance() {\r\n return player.celestials.ra.petWithRemembrance;\r\n },\r\n set petWithRemembrance(name) {\r\n player.celestials.ra.petWithRemembrance = name;\r\n },\r\n updateAlchemyFlow(realityRealTime) {\r\n const perSecond = 1000 / realityRealTime;\r\n for (const resource of AlchemyResources.all) {\r\n resource.ema.addValue((resource.amount - resource.before) * perSecond);\r\n resource.before = resource.amount;\r\n }\r\n },\r\n applyAlchemyReactions(realityRealTime) {\r\n if (!Ra.unlocks.effarigUnlock.canBeApplied) return;\r\n const sortedReactions = AlchemyReactions.all\r\n .compact()\r\n .sort((r1, r2) => r2.priority - r1.priority);\r\n for (const reaction of sortedReactions) {\r\n reaction.combineReagents();\r\n }\r\n this.updateAlchemyFlow(realityRealTime);\r\n },\r\n applyAlchemyReactionsAuto() {\r\n if (!Ra.unlocks.effarigUnlock.canBeApplied) return;\r\n Ra.alchauto += 1\r\n if (Ra.alchauto >= 15) {\r\n Ra.alchauto -= 15\r\n Ra.applyAlchemyReactions(1000)\r\n }\r\n },\r\n get alchemyResourceCap() {\r\n return Ra.unlocks.alchSetToCapAndCapIncrease.isUnlocked ? 25000 + (5 * player.celestials.ra.pets[\"effarig\"].level) + CorruptionUpgrade(14).effectOrDefault(0) : 25000;\r\n },\r\n get momentumValue() {\r\n const hoursFromUnlock = TimeSpan.fromMilliseconds(player.celestials.ra.momentumTime).totalHours;\r\n return Decimal.clampMax(hoursFromUnlock.times(0.005).add(1), AlchemyResource.momentum.effectValue).toNumber();\r\n },\r\n get continuumActive() {\r\n return Ra.unlocks.continuumAffectsIDsAndTDs.isUnlocked && Laitela.continuumActive;\r\n },\r\n get currentCelestial(){ //this returns the current celestials' number. Teresa = 1, etc.\r\n switch(true){\r\n case(Teresa.isRunning):\r\n return 1;\r\n case(Effarig.isRunning):\r\n return 2;\r\n case(Enslaved.isRunning):\r\n return 3;\r\n case(V.isRunning):\r\n return 4;\r\n case(Ra.isRunning):\r\n return 5;\r\n case(Laitela.isRunning):\r\n return 6;\r\n case(Pelle.isDoomed):\r\n return 7;\r\n default:\r\n return 0;\r\n }\r\n },\r\n quotes: Quotes.ra,\r\n symbol: \"\"\r\n};\r\n\r\nexport const GlyphAlteration = {\r\n // Adding a secondary effect to some effects\r\n get additionThreshold() {\r\n return DC.E36;\r\n },\r\n // One-time massive boost of a single effect\r\n get empowermentThreshold() {\r\n return DC.E43;\r\n },\r\n // Scaling boost from sacrifice quantity\r\n get boostingThreshold() {\r\n return DC.E60;\r\n },\r\n getSacrificePower(type) {\r\n if (Pelle.isDisabled(\"alteration\")) return 0;\r\n const sacPower = player.reality.glyphs.sac[type];\r\n if (sacPower === undefined) {\r\n throw new Error(\"Unknown sacrifice type\");\r\n }\r\n return sacPower;\r\n },\r\n get isUnlocked() {\r\n if (Pelle.isDisabled(\"alteration\")) return false;\r\n return Ra.unlocks.alteredGlyphs.canBeApplied;\r\n },\r\n isAdded(type) {\r\n return this.isUnlocked && this.getSacrificePower(type).gte(this.additionThreshold);\r\n },\r\n isEmpowered(type) {\r\n return this.isUnlocked && this.getSacrificePower(type).gte(this.empowermentThreshold);\r\n },\r\n isBoosted(type) {\r\n return this.isUnlocked && this.getSacrificePower(type).gte(this.boostingThreshold);\r\n },\r\n sacrificeBoost(type) {\r\n const capped = Decimal.clampMax(this.getSacrificePower(type), GlyphSacrificeHandler.maxSacrificeForEffects);\r\n return Decimal.log10(capped.div(this.boostingThreshold).clampMin(1)) / 2;\r\n },\r\n baseAdditionColor(isDark = Theme.current().isDark()) {\r\n return isDark ? \"#CCCCCC\" : \"black\";\r\n },\r\n baseEmpowermentColor(isDark = Theme.current().isDark()) {\r\n return isDark ? \"#EEEE30\" : \"#C6C610\";\r\n },\r\n baseBoostColor(isDark = Theme.current().isDark()) {\r\n return isDark ? \"#60DDDD\" : \"#28BDBD\";\r\n },\r\n getAdditionColor(type) {\r\n const isDark = CosmeticGlyphTypes[type].currentColor.bg === \"black\";\r\n return this.isAdded(type) ? this.baseAdditionColor(isDark) : undefined;\r\n },\r\n getEmpowermentColor(type) {\r\n const isDark = CosmeticGlyphTypes[type].currentColor.bg === \"black\";\r\n return this.isEmpowered(type) ? this.baseEmpowermentColor(isDark) : undefined;\r\n },\r\n getBoostColor(type) {\r\n const isDark = CosmeticGlyphTypes[type].currentColor.bg === \"black\";\r\n return this.isBoosted(type) ? this.baseBoostColor(isDark) : undefined;\r\n }\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.TAB_CHANGED, () => {\r\n if (Tab.celestials.ra.isOpen) Ra.quotes.unlock.show();\r\n});\r\n","import { RebuyableMechanicState } from \"../../game-mechanics\";\r\nimport { SetPurchasableMechanicState } from \"../../game-mechanics/set-purchasable\";\r\n\r\nclass RaUpgradeState extends SetPurchasableMechanicState {\r\n get set() {\r\n return player.celestials.ra.upgrades;\r\n }\r\n\r\n get currency() {\r\n return this.config.currency();\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return this.config.implemented && player.celestials.ra.pets.ra.level >= 40;\r\n }\r\n\r\n onPurchased() {\r\n EventHub.dispatch(GAME_EVENT.RA_UPGRADE_BOUGHT);\r\n }\r\n}\r\n\r\nclass RebuyableRaUpgradeState extends RebuyableMechanicState {\r\n get pet() {\r\n return this.config.celestial;\r\n }\r\n\r\n get isCapped() {\r\n return Ra.pets[this.pet].isCapped;\r\n }\r\n\r\n get currency() {\r\n return this.config.currency;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.celestials.ra.rebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.celestials.ra.rebuyables[this.id] = value;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return this.config.implemented && player.celestials.ra.pets.ra.level >= 40;\r\n }\r\n}\r\n\r\nexport const RaUpgrade = mapGameDataToObject(\r\n GameDatabase.celestials.raUpgrades,\r\n config => (config.rebuyable\r\n ? new RebuyableRaUpgradeState(config)\r\n : new RaUpgradeState(config))\r\n);\r\n\r\nRaUpgrade.rebuyables = RaUpgrade.all.filter(u => u.isRebuyable);\r\nRaUpgrade.singles = RaUpgrade.all.filter(u => !u.isRebuyable);","import { GameMechanicState } from \"../../game-mechanics\";\r\nimport { corruptionPenalties } from \"../../secret-formula/mending/corruption\";\r\n\r\n/**\r\n * @abstract\r\n */\r\nclass AlchemyResourceState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.ema = new ExponentialMovingAverage(0.01, 10, 100, 0.01);\r\n this._before = 0;\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get symbol() {\r\n return this.config.symbol;\r\n }\r\n\r\n get description() {\r\n return this.config.description;\r\n }\r\n\r\n get isBaseResource() {\r\n return this.config.isBaseResource === true;\r\n }\r\n\r\n get data() {\r\n return player.celestials.ra.alchemy[this.id];\r\n }\r\n\r\n get amount() {\r\n return this.data.amount;\r\n }\r\n\r\n set amount(value) {\r\n this.data.amount = value;\r\n }\r\n\r\n get before() {\r\n return this._before;\r\n }\r\n\r\n set before(value) {\r\n this._before = value;\r\n }\r\n\r\n get flow() {\r\n return this.ema.average;\r\n }\r\n\r\n get fillFraction() {\r\n return Math.clamp(this.amount / this.cap, 0, 1);\r\n }\r\n\r\n get unlockedWith() {\r\n return Ra.pets.effarig;\r\n }\r\n\r\n get unlockedAt() {\r\n return this.config.unlockedAt;\r\n }\r\n\r\n get isUnlocked() {\r\n return this.unlockedWith.level >= this.unlockedAt;\r\n }\r\n\r\n get lockText() {\r\n return `${this.unlockedWith.name} Level ${formatInt(this.unlockedAt)}`;\r\n }\r\n\r\n get isCustomEffect() {\r\n return true;\r\n }\r\n\r\n get effectValue() {\r\n // Disable when Glyph corruption lvl7--sxy\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.compGlyphs.hiddenSeven[player.mending.corruption[4]]) {\r\n switch(this.config.id){\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 6:\r\n case 7:\r\n case 10:\r\n case 12:\r\n return 1;\r\n case 5:\r\n return 1.2;\r\n case 8:\r\n return Decimal.pow10(9e99);\r\n case 11:\r\n return 0.3;\r\n }\r\n return 0\r\n };\r\n // Disable Exponential alchemy effect in V reality.\r\n if ((V.isRunning||V.isSuperRunning) && this.config.id === 14) return 0;\r\n return this.config.effect(Pelle.isDisabled(\"alchemy\") ? 0 : this.amount);\r\n }\r\n\r\n get reaction() {\r\n return AlchemyReactions.all[this.id];\r\n }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get cap() { throw new NotImplementedError(); }\r\n\r\n get capped() {\r\n return this.amount >= this.cap;\r\n }\r\n}\r\n\r\nclass BasicAlchemyResourceState extends AlchemyResourceState {\r\n constructor(config) {\r\n super(config);\r\n // The names are capitalized, so we need to convert them to lower case\r\n // in order to access highestRefinementValue values which are not capitalized.\r\n this._name = config.name.toLowerCase();\r\n }\r\n\r\n get highestRefinementValue() {\r\n return player.celestials.ra.highestRefinementValue[this._name];\r\n }\r\n\r\n set highestRefinementValue(value) {\r\n player.celestials.ra.highestRefinementValue[this._name] = Math.max(this.highestRefinementValue, value);\r\n }\r\n\r\n get cap() {\r\n return Math.clampMax(Ra.alchemyResourceCap, this.highestRefinementValue);\r\n }\r\n}\r\n\r\nclass AdvancedAlchemyResourceState extends AlchemyResourceState {\r\n get cap() {\r\n const reagentCaps = this.reaction.reagents.map(x => x.resource.cap);\r\n return Math.min(...reagentCaps);\r\n }\r\n}\r\n\r\nclass AlchemyReaction {\r\n constructor(product, reagents) {\r\n this._product = product;\r\n this._reagents = reagents;\r\n }\r\n\r\n get product() {\r\n return this._product;\r\n }\r\n\r\n get reagents() {\r\n return this._reagents;\r\n }\r\n\r\n // Returns a percentage of a reaction that can be done, accounting for limiting reagents. This normally caps at\r\n // 100%, but the reaction will be forced to occur at higher than 100% if there is significantly more reagent than\r\n // product. This allows resources to be created quickly when its reaction is initially turned on with saved reagents.\r\n get reactionYield() {\r\n if (!this._product.isUnlocked || this._reagents.some(r => !r.resource.isUnlocked)) return 0;\r\n const forcingFactor = (this._reagents\r\n .map(r => r.resource.amount)\r\n .min() - this._product.amount) / 100;\r\n const totalYield = this._reagents\r\n .map(r => r.resource.amount / r.cost)\r\n .min();\r\n return Math.min(totalYield, Math.max(forcingFactor, 1));\r\n }\r\n\r\n // Check each reagent for if a full reaction would drop it below the product amount. If so, reduce reaction yield\r\n get actualYield() {\r\n // Assume a full reaction to see what the maximum possible product is\r\n const maxFromReaction = this.baseProduction * this.reactionYield * this.reactionEfficiency;\r\n const prodBefore = this._product.amount;\r\n const prodAfter = prodBefore + maxFromReaction;\r\n let cappedYield = this.reactionYield;\r\n for (const reagent of this._reagents) {\r\n const reagentBefore = reagent.resource.amount;\r\n const reagentAfter = reagent.resource.amount - this.reactionYield * reagent.cost;\r\n const diffBefore = reagentBefore - prodBefore;\r\n const diffAfter = reagentAfter - prodAfter;\r\n cappedYield = Math.min(cappedYield, this.reactionYield * diffBefore / (diffBefore - diffAfter));\r\n }\r\n return Math.clampMin(cappedYield, 0);\r\n }\r\n\r\n // Assign reactions priority in descending order based on the largest reagent total after the reaction. The logic\r\n // is that if we assume that all the reactions are cap-limited, then by assigning priority in this way, reactions\r\n // get applied so that earlier reactions are less likely to reduce the yield of later reactions.\r\n get priority() {\r\n let maxReagent = Glyphs.levelCap;\r\n for (const reagent of this._reagents) {\r\n const afterReaction = reagent.resource.amount - reagent.cost * this.actualYield;\r\n maxReagent = Math.min(maxReagent, afterReaction);\r\n }\r\n return maxReagent;\r\n }\r\n\r\n get isActive() {\r\n return this._product.data.reaction;\r\n }\r\n\r\n set isActive(value) {\r\n this._product.data.reaction = value;\r\n }\r\n\r\n get isReality() {\r\n return this._product.id === ALCHEMY_RESOURCE.REALITY;\r\n }\r\n\r\n // Reactions are per-10 products because that avoids decimals in the UI for reagents, but efficiency losses can make\r\n // products have decimal coefficients.\r\n get baseProduction() {\r\n return this.isReality ? 1 : 5;\r\n }\r\n\r\n get reactionEfficiency() {\r\n return this.isReality ? 1 : AlchemyResource.synergism.effectValue;\r\n }\r\n\r\n get reactionProduction() {\r\n return this.baseProduction * this.reactionEfficiency;\r\n }\r\n\r\n // Cap products at the minimum amount of all reagents before the reaction occurs, eg. 200Ξ and 350Ψ will not bring\r\n // ω above 200. In fact, since some Ξ will be used during the reaction, the actual cap will be a bit lower.\r\n combineReagents() {\r\n if (!this.isActive || this.reactionYield === 0) return;\r\n const unpredictabilityEffect = AlchemyResource.unpredictability.effectValue;\r\n const times = 1 + poissonDistribution(unpredictabilityEffect / (1 - unpredictabilityEffect));\r\n const cap = this._product.cap;\r\n for (let i = 0; i < times; i++) {\r\n const reactionYield = this.actualYield;\r\n for (const reagent of this._reagents) {\r\n reagent.resource.amount -= reactionYield * reagent.cost;\r\n }\r\n // The minimum reaction yield is 0.05 so the cap is actually reached\r\n const effectiveYield = Math.clampMin(reactionYield * this.reactionProduction, 0.05);\r\n this._product.amount = Math.clampMax(this._product.amount + effectiveYield, cap);\r\n }\r\n }\r\n}\r\n\r\nexport const AlchemyResource = mapGameDataToObject(\r\n GameDatabase.celestials.alchemy.resources,\r\n config => (config.isBaseResource\r\n ? new BasicAlchemyResourceState(config)\r\n : new AdvancedAlchemyResourceState(config))\r\n);\r\n\r\nexport const AlchemyResources = {\r\n all: AlchemyResource.all,\r\n base: AlchemyResource.all.filter(r => r.isBaseResource)\r\n};\r\n\r\nexport const AlchemyReactions = (function() {\r\n // For convenience and readability, stuff is named differently in GameDatabase\r\n function mapReagents(resource) {\r\n return resource.config.reagents\r\n .map(r => ({\r\n resource: AlchemyResources.all.find(x => x.id === r.resource),\r\n cost: r.amount\r\n }));\r\n }\r\n return {\r\n all: AlchemyResources.all\r\n .map(r => (r.isBaseResource ? null : new AlchemyReaction(r, mapReagents(r))))\r\n };\r\n}());\r\n","import { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\n\r\nexport class DimensionState {\r\n constructor(getData, tier) {\r\n this._tier = tier;\r\n this._getData = getData;\r\n const DISPLAY_NAMES = [null, \"First\", \"Second\", \"Third\", \"Fourth\", \"Fifth\", \"Sixth\", \"Seventh\", \"Eighth\"];\r\n this._displayName = DISPLAY_NAMES[tier];\r\n const SHORT_DISPLAY_NAMES = [null, \"1st\", \"2nd\", \"3rd\", \"4th\", \"5th\", \"6th\", \"7th\", \"8th\"];\r\n this._shortDisplayName = SHORT_DISPLAY_NAMES[tier];\r\n }\r\n\r\n get tier() { return this._tier; }\r\n\r\n get displayName() { return this._displayName; }\r\n get shortDisplayName() { return this._shortDisplayName; }\r\n\r\n get data() { return this._getData()[this.tier - 1]; }\r\n\r\n /** @returns {Decimal} */\r\n get amount() { return this.data.amount; }\r\n /** @param {Decimal} value */\r\n set amount(value) { this.data.amount = value; }\r\n\r\n /** @returns {number} */\r\n get bought() { return this.data.bought; }\r\n /** @param {number} value */\r\n set bought(value) { this.data.bought = value; }\r\n\r\n /** @abstract */\r\n get productionPerSecond() { throw new NotImplementedError(); }\r\n\r\n get productionPerRealSecond() {\r\n return this.productionPerSecond.times(getGameSpeedupForDisplay());\r\n }\r\n\r\n productionForDiff(diff) {\r\n return this.productionPerSecond.times(new Decimal(diff).div(1000)).pow(player.mending.corruptionChallenge.corruptedMend ? Ra.unlocks.DimLimitCorruptionImprovementPelle.isUnlocked ? corruptionPenalties.dimLimits.postNerf[[player.mending.corruption[1]]] : corruptionPenalties.dimLimits.preNerf[[player.mending.corruption[1]]] : 1);\r\n }\r\n\r\n produceCurrency(currency, diff) {\r\n currency.add(this.productionForDiff(diff));\r\n }\r\n\r\n produceDimensions(dimension, diff) {\r\n dimension.amount = dimension.amount.plus(this.productionForDiff(diff));\r\n }\r\n\r\n static get dimensionCount() { return 8; }\r\n\r\n static createAccessor() {\r\n const index = Array.range(1, this.dimensionCount).map(tier => new this(tier));\r\n index.unshift(null);\r\n const accessor = tier => index[tier];\r\n accessor.index = index;\r\n return accessor;\r\n }\r\n}\r\n","import { DC } from \"../../constants\";\r\nimport { CorruptionUpgrade } from \"../../corruption-upgrades\";\r\nimport { DimensionState } from \"../../dimensions/dimension\";\r\nimport { corruptionPenalties } from \"../../secret-formula/mending/corruption\";\r\nimport { TimeStudy } from \"../../time-studies/normal-time-study\";\r\n\r\n/**\r\n * Constants for easily adjusting values\r\n */\r\n\r\nconst INTERVAL_COST_MULT = 5;\r\nconst POWER_DM_COST_MULT = 10;\r\nconst POWER_DE_COST_MULTS = [1.65, 1.6, 1.55, 1.5, 1.45, 1.4, 1.35, 1.3];\r\n\r\nconst INTERVAL_START_COST = 10;\r\nconst POWER_DM_START_COST = 10;\r\nconst POWER_DE_START_COST = 10;\r\n\r\nconst INTERVAL_PER_UPGRADE = 0.92;\r\n\r\n// No constant for interval since it's tied to a milestone\r\nexport const POWER_DM_PER_ASCENSION = 500;\r\nexport const POWER_DE_PER_ASCENSION = 500;\r\n\r\nconst COST_MULT_PER_TIER = 1200;\r\n\r\nexport class DarkMatterDimensionState extends DimensionState {\r\n constructor(tier) {\r\n super(() => player.celestials.laitela.dimensions, tier);\r\n }\r\n\r\n productionForDiff(diff) {\r\n return this.productionPerSecond * diff / 1000;\r\n }\r\n\r\n // Does not include DM, only DE per second\r\n get productionPerSecond() { return this.powerDE * 1000 / this.interval; }\r\n\r\n get unlockUpgrade() {\r\n // The 15th Imaginary Upgrade unlocked Laitela and the 1st DMD\r\n return ImaginaryUpgrade(this.tier + 14);\r\n }\r\n\r\n get isUnlocked() {\r\n if (this.tier < 5) {\r\n return this.unlockUpgrade.isBought || Ra.pets.laitela.level >= 25;\r\n }\r\n return ((Ra.pets.laitela.level / 25) >= (this.tier - 4))\r\n}\r\n\r\n get ascensions() {\r\n return this.data.ascensionCount;\r\n }\r\n\r\n get intervalPurchaseCap() {\r\n return 10;\r\n }\r\n\r\n get rawInterval() {\r\n const perUpgrade = INTERVAL_PER_UPGRADE;\r\n const tierFactor = Math.pow(4, this.tier - 1);\r\n return 1000 * tierFactor * Math.pow(perUpgrade, this.data.intervalUpgrades) *\r\n Math.pow(SingularityMilestone.ascensionIntervalScaling.effectOrDefault(1200), this.ascensions) *\r\n SingularityMilestone.darkDimensionIntervalReduction.effectOrDefault(1);\r\n }\r\n\r\n get interval() {\r\n return Math.clampMin(this.intervalPurchaseCap, this.rawInterval);\r\n }\r\n\r\n get commonDarkMult() {\r\n return DC.D1.timesEffectsOf(\r\n SingularityMilestone.darkFromTesseracts,\r\n SingularityMilestone.darkFromGlyphLevel,\r\n SingularityMilestone.darkFromTheorems,\r\n SingularityMilestone.darkFromDM4,\r\n SingularityMilestone.darkFromGamespeed,\r\n SingularityMilestone.darkFromDilatedTime\r\n );\r\n }\r\n\r\n get powerDMPerAscension() {\r\n return POWER_DM_PER_ASCENSION + SingularityMilestone.improvedAscensionDM.effectOrDefault(0);\r\n }\r\n\r\n get powerDM() {\r\n if (!this.isUnlocked) return new Decimal(0);\r\n let primeAnswer= new Decimal(1 + 2 * Math.pow(1.15, this.data.powerDMUpgrades))\r\n .times(Laitela.realityReward)\r\n .times(Laitela.darkMatterMult)\r\n .times(this.commonDarkMult)\r\n .times(Math.pow(this.powerDMPerAscension, this.ascensions))\r\n .timesEffectsOf(\r\n SingularityMilestone.darkMatterMult,\r\n SingularityMilestone.multFromInfinitied,\r\n TimeStudy(308))\r\n .dividedBy(Math.pow(1e4, Math.pow(this.tier - 1, 0.5)));\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n primeAnswer = primeAnswer.pow(corruptionPenalties.repSing.dm[player.mending.corruption[8]]);\r\n }*/\r\n return primeAnswer;\r\n }\r\n\r\n get powerDE() {\r\n if (!this.isUnlocked || Pelle.isDoomed) return 0;\r\n const tierFactor = Math.pow(15, this.tier - 1);\r\n const destabilizeBoost = Laitela.isFullyDestabilized ? 8 : 1;\r\n const MMBoostDE = MendingMilestone.one.isReached ? 50 : 1;\r\n const lai2 = Ra.unlocks.annihilationDarkEnergyBoost.isUnlocked ? Math.min(1, Math.pow(Laitela.darkMatterMult, 0.5)) : 1;\r\n return new Decimal(((1 + this.data.powerDEUpgrades * 0.1) *\r\n Math.pow(1.005, this.data.powerDEUpgrades)) * tierFactor / 1000)\r\n .times(this.commonDarkMult)\r\n .times(Math.pow(POWER_DE_PER_ASCENSION, this.ascensions))\r\n .timesEffectsOf(\r\n SingularityMilestone.darkEnergyMult,\r\n SingularityMilestone.realityDEMultiplier,\r\n SingularityMilestone.multFromInfinitied,\r\n TimeStudy(308),\r\n ).toNumber() * destabilizeBoost * MMBoostDE * lai2;\r\n }\r\n\r\n get intervalAfterAscension() {\r\n const purchases = Decimal.affordGeometricSeries(Currency.darkMatter.value, this.rawIntervalCost,\r\n this.intervalCostIncrease, 0).toNumber();\r\n return Math.clampMin(this.intervalPurchaseCap, SingularityMilestone.ascensionIntervalScaling.effectOrDefault(1200) *\r\n this.rawInterval * Math.pow(INTERVAL_PER_UPGRADE, purchases));\r\n }\r\n\r\n get adjustedStartingCost() {\r\n const tiers = [null, 0, 2, 5, 13, 34, 89, 233, 610];\r\n return new Decimal(10).times(Decimal.pow(COST_MULT_PER_TIER, tiers[this.tier]).times(SingularityMilestone.darkDimensionCostReduction.effectOrDefault(1)));\r\n }\r\n\r\n get rawIntervalCost() {\r\n return Decimal.pow(this.intervalCostIncrease, this.data.intervalUpgrades)\r\n .times(this.adjustedStartingCost).times(INTERVAL_START_COST);\r\n }\r\n\r\n get intervalCost() {\r\n return this.rawIntervalCost.floor();\r\n }\r\n\r\n get intervalCostIncrease() {\r\n return Math.pow(INTERVAL_COST_MULT, SingularityMilestone.intervalCostScalingReduction.effectOrDefault(1));\r\n }\r\n\r\n get rawPowerDMCost() {\r\n return Decimal.pow(this.powerDMCostIncrease, this.data.powerDMUpgrades)\r\n .times(this.adjustedStartingCost).times(POWER_DM_START_COST);\r\n }\r\n\r\n get powerDMCost() {\r\n return this.rawPowerDMCost.floor();\r\n }\r\n\r\n get powerDMCostIncrease() {\r\n return POWER_DM_COST_MULT;\r\n }\r\n\r\n get rawPowerDECost() {\r\n return Decimal.pow(this.powerDECostIncrease, this.data.powerDEUpgrades)\r\n .times(this.adjustedStartingCost).times(POWER_DE_START_COST);\r\n }\r\n\r\n get powerDECost() {\r\n return this.rawPowerDECost.floor();\r\n }\r\n\r\n get powerDECostIncrease() {\r\n return POWER_DE_COST_MULTS[this.tier - 1];\r\n }\r\n\r\n get timeSinceLastUpdate() {\r\n return this.data.timeSinceLastUpdate;\r\n }\r\n\r\n set timeSinceLastUpdate(ms) {\r\n this.data.timeSinceLastUpdate = ms;\r\n }\r\n\r\n get canBuyInterval() {\r\n return Currency.darkMatter.gte(this.intervalCost) && this.interval > this.intervalPurchaseCap;\r\n }\r\n\r\n get canBuyPowerDM() {\r\n return Currency.darkMatter.gte(this.powerDMCost);\r\n }\r\n\r\n get canBuyPowerDE() {\r\n return Currency.darkMatter.gte(this.powerDECost);\r\n }\r\n\r\n get maxIntervalPurchases() {\r\n return Math.ceil(Math.log(this.intervalPurchaseCap / this.interval) / Math.log(INTERVAL_PER_UPGRADE));\r\n }\r\n\r\n buyManyInterval(x) {\r\n if (x > this.maxIntervalPurchases) return false;\r\n const cost = this.rawIntervalCost.times(\r\n Decimal.pow(this.intervalCostIncrease, x).minus(1)).div(this.intervalCostIncrease - 1).floor();\r\n if (!Currency.darkMatter.purchase(cost)) return false;\r\n this.data.intervalUpgrades += x;\r\n return true;\r\n }\r\n\r\n buyManyPowerDM(x) {\r\n const cost = this.rawPowerDMCost.times(\r\n Decimal.pow(this.powerDMCostIncrease, x).minus(1)).div(this.powerDMCostIncrease - 1).floor();\r\n if (!Currency.darkMatter.purchase(cost)) return false;\r\n this.data.powerDMUpgrades += x;\r\n return true;\r\n }\r\n\r\n buyManyPowerDE(x) {\r\n const cost = this.rawPowerDECost.times(\r\n Decimal.pow(this.powerDECostIncrease, x).minus(1)).div(this.powerDECostIncrease - 1).floor();\r\n if (!Currency.darkMatter.purchase(cost)) return false;\r\n this.data.powerDEUpgrades += x;\r\n return true;\r\n }\r\n\r\n buyInterval() {\r\n return this.buyManyInterval(1);\r\n }\r\n\r\n buyPowerDM() {\r\n return this.buyManyPowerDM(1);\r\n }\r\n\r\n buyPowerDE() {\r\n return this.buyManyPowerDE(1);\r\n }\r\n\r\n ascend() {\r\n if (this.interval > this.intervalPurchaseCap) return;\r\n this.data.ascensionCount++;\r\n\r\n // Immediately buy as many interval upgrades as possible\r\n while (this.buyInterval());\r\n }\r\n\r\n static get dimensionCount() { return 8; }\r\n\r\n reset() {\r\n this.data.amount = DC.D1;\r\n this.data.intervalUpgrades = 0;\r\n this.data.powerDMUpgrades = 0;\r\n this.data.powerDEUpgrades = 0;\r\n this.data.timeSinceLastUpdate = 0;\r\n this.data.ascensionCount = 0;\r\n }\r\n}\r\n\r\n/**\r\n * @function\r\n * @param {number} tier\r\n * @return {DarkMatterDimensionState}\r\n */\r\nexport const DarkMatterDimension = DarkMatterDimensionState.createAccessor();\r\n\r\nexport const DarkMatterDimensions = {\r\n /**\r\n * @type {DarkMatterDimension[]}\r\n */\r\n all: DarkMatterDimension.index.compact(),\r\n\r\n tick(realDiff) {\r\n if (!Laitela.isUnlocked) return;\r\n for (let tier = 8; tier >= 1; tier--) {\r\n const dim = DarkMatterDimension(tier);\r\n if (!dim.isUnlocked) continue;\r\n dim.timeSinceLastUpdate += realDiff;\r\n if (dim.interval < dim.timeSinceLastUpdate) {\r\n const ticks = Math.floor(dim.timeSinceLastUpdate / dim.interval);\r\n let productionDM = dim.amount.times(ticks).times(dim.powerDM);\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n productionDM = productionDM.pow(corruptionPenalties.repSing.dm[player.mending.corruption[8]]);\r\n }\r\n if (tier === 1) {\r\n Currency.darkMatter.add(productionDM);\r\n } else {\r\n DarkMatterDimension(tier - 1).amount = DarkMatterDimension(tier - 1).amount.plus(productionDM);\r\n }\r\n Currency.darkEnergy.add(ticks * dim.powerDE);\r\n dim.timeSinceLastUpdate -= dim.interval * ticks;\r\n }\r\n }\r\n if (SingularityMilestone.dim4Generation.canBeApplied && Laitela.annihilationUnlocked) {\r\n DarkMatterDimension(4).amount = DarkMatterDimension(4).amount\r\n .plus(SingularityMilestone.dim4Generation.effectValue * realDiff / 1000);\r\n }\r\n if(EternityChallenge(7).completions >= 1 && Ra.unlocks.improvedECRewards.isUnlocked){ EternityChallenge(7).vReward.applyEffect(production => {\r\n TimeDimension(8).amount = TimeDimension(8).amount.plus(production.times(new Decimal(Enslaved.nextTickDiff).div(1000)));\r\n })}\r\n if(CorruptionUpgrade(15).isBought&&DarkMatterDimension(8).isUnlocked) DarkMatterDimension(8).amount=DarkMatterDimension(8).amount.plus(CorruptionUpgrade(15).effectValue*realDiff/1000)\r\n },\r\n\r\n reset() {\r\n for (const dimension of DarkMatterDimensions.all) {\r\n dimension.reset();\r\n }\r\n Currency.darkMatter.reset();\r\n },\r\n};\r\n","import { DC } from \"../../constants\";\r\nimport { MendingUpgrade } from \"../../mending-upgrades\";\r\nimport { Quotes } from \"../quotes\";\r\n\r\nimport { DarkMatterDimensions } from \"./dark-matter-dimension\";\r\n\r\nexport const Laitela = {\r\n displayName: \"Lai'tela\",\r\n possessiveName: \"Lai'tela's\",\r\n get celestial() {\r\n return player.celestials.laitela;\r\n },\r\n get isUnlocked() {\r\n return ImaginaryUpgrade(15).isBought;\r\n },\r\n initializeRun() {\r\n clearCelestialRuns();\r\n this.celestial.run = true;\r\n },\r\n get isRunning() {\r\n return this.celestial.run;\r\n },\r\n get difficultyTier() {\r\n return player.celestials.laitela.difficultyTier;\r\n },\r\n set difficultyTier(tier) {\r\n player.celestials.laitela.difficultyTier = tier;\r\n },\r\n get maxAllowedDimension() {\r\n return 8 - this.difficultyTier;\r\n },\r\n get isFullyDestabilized() {\r\n return Laitela.maxAllowedDimension === 0;\r\n },\r\n get continuumUnlocked() {\r\n return ImaginaryUpgrade(15).isBought && !Pelle.isDisabled(\"continuum\");\r\n },\r\n get continuumActive() {\r\n return this.continuumUnlocked && !player.auto.disableContinuum && !Pelle.isDisabled(\"continuum\");\r\n },\r\n setContinuum(x) {\r\n player.auto.disableContinuum = !x;\r\n // If continuum is now not disabled (i.e. is enabled) we update the relevant requirement check.\r\n if (!player.auto.disableContinuum) {\r\n player.requirementChecks.reality.noContinuum = false;\r\n }\r\n },\r\n get matterExtraPurchaseFactor() {\r\n let x = BreakInfinityUpgrade.autobuyerSpeed.chargedEffect.isEffectActive ? Math.max((Ra.pets.teresa.level + Ra.pets.laitela.level) / 125, 1) : 1;\r\n let y = ((1 + 0.5 * Math.pow(Decimal.pLog10(Currency.darkMatter.max) / 50, 0.4) *\r\n (1 + SingularityMilestone.continuumMult.effectOrDefault(0))) * (MendingUpgrade(18).isBought ? 1.5 : 1)) * (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(6).completions >= 1 && !Pelle.isDoomed ? EternityChallenge(6).vReward.effectValue : 1)+ x;\r\n if(Pelle.isDoomed) y = y ** 0.01;\r\n let z = Ra.unlocks.continuumBoost.isUnlocked ? 1.05 ** Math.max((Math.floor(Currency.darkMatter.value.log(Number.MAX_VALUE))), 0) : 1;\r\n return y * z;\r\n },\r\n get realityReward() {\r\n return Math.clampMin(Math.pow(100, this.difficultyTier) *\r\n Math.pow(360 / player.celestials.laitela.fastestCompletion, 2), 1);\r\n },\r\n // Note that entropy goes from 0 to 1, with 1 being completion\r\n get entropyGainPerSecond() {\r\n return Math.clamp(Math.pow(Currency.antimatter.value.add(1).log10() / 1e11, 2), 0, 100) / 200;\r\n },\r\n get darkMatterMultGain() {\r\n return Decimal.pow(Currency.darkMatter.value.dividedBy(this.annihilationDMRequirement)\r\n .plus(1).log10(), 1.5).toNumber() * ImaginaryUpgrade(21).effectOrDefault(1);\r\n },\r\n get darkMatterMult() {\r\n return this.celestial.darkMatterMult;\r\n },\r\n get darkMatterMultRatio() {\r\n return (this.celestial.darkMatterMult + this.darkMatterMultGain) / this.celestial.darkMatterMult;\r\n },\r\n get annihilationUnlocked() {\r\n return ImaginaryUpgrade(19).isBought;\r\n },\r\n get annihilationDMRequirement() {\r\n return 1e60;\r\n },\r\n get canAnnihilate() {\r\n return Laitela.annihilationUnlocked && Currency.darkMatter.gte(this.annihilationDMRequirement);\r\n },\r\n annihilate(force) {\r\n if (!force && !this.canAnnihilate) return false;\r\n this.celestial.darkMatterMult += this.darkMatterMultGain * (player.celestials.ra.permanentMemories.lai65 ? 500 : 1);\r\n DarkMatterDimensions.reset();\r\n Laitela.quotes.annihilation.show();\r\n Achievement(176).unlock();\r\n return true;\r\n },\r\n // Greedily buys the cheapest available upgrade until none are affordable\r\n maxAllDMDimensions(maxTier) {\r\n // Note that tier is 1-indexed\r\n const unlockedDimensions = DarkMatterDimensions.all\r\n .filter(d => d.isUnlocked && d.tier <= maxTier);\r\n const upgradeInfo = unlockedDimensions\r\n .map(d => [\r\n [d.rawIntervalCost, d.intervalCostIncrease, d.maxIntervalPurchases, x => d.buyManyInterval(x)],\r\n [d.rawPowerDMCost, d.powerDMCostIncrease, Infinity, x => d.buyManyPowerDM(x)],\r\n [d.rawPowerDECost, d.powerDECostIncrease, Infinity, x => d.buyManyPowerDE(x)]])\r\n .flat(1);\r\n const buy = function(upgrade, purchases) {\r\n upgrade[3](purchases);\r\n upgrade[0] = upgrade[0].times(Decimal.pow(upgrade[1], purchases));\r\n upgrade[2] -= purchases;\r\n };\r\n // Buy everything costing less than 0.02 of initial matter.\r\n const darkMatter = Currency.darkMatter.value;\r\n for (const upgrade of upgradeInfo) {\r\n const purchases = Math.clamp(Math.floor(darkMatter.times(0.02).div(upgrade[0]).log(upgrade[1])), 0, upgrade[2]);\r\n buy(upgrade, purchases);\r\n }\r\n while (upgradeInfo.some(upgrade => upgrade[0].lte(darkMatter) && upgrade[2] > 0)) {\r\n const cheapestUpgrade = upgradeInfo.filter(upgrade => upgrade[2] > 0).sort((a, b) => a[0].minus(b[0]).sign())[0];\r\n buy(cheapestUpgrade, 1);\r\n }\r\n },\r\n reset() {\r\n this.annihilate(true);\r\n this.celestial.darkMatterMult = 1;\r\n Currency.darkMatter.max = DC.D1;\r\n Currency.darkMatter.reset();\r\n Currency.singularities.reset();\r\n this.celestial.fastestCompletion = 3600;\r\n this.celestial.difficultyTier = 0;\r\n this.celestial.singularityCapIncreases = 0;\r\n },\r\n quotes: Quotes.laitela,\r\n symbol: \"ᛝ\"\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.TAB_CHANGED, () => {\r\n if (Tab.celestials.laitela.isOpen) Laitela.quotes.unlock.show();\r\n});\r\n","import { GameMechanicState } from \"../../game-mechanics\";\r\n\r\nimport { deepmergeAll } from \"@/utility/deepmerge\";\r\nimport { corruptionPenalties } from \"../../secret-formula/mending/corruption\";\r\n\r\nclass SingularityMilestoneState extends GameMechanicState {\r\n constructor(config) {\r\n const effect = config.effect;\r\n const configCopy = deepmergeAll([{}, config]);\r\n configCopy.effect = () => effect(this.completions);\r\n super(configCopy);\r\n this._rawEffect = effect;\r\n }\r\n\r\n get start() {\r\n return this.config.start;\r\n }\r\n\r\n get repeat() {\r\n return this.config.repeat;\r\n }\r\n\r\n get limit() {\r\n return this.config.limit;\r\n }\r\n\r\n get isUnique() {\r\n return this.repeat === 0;\r\n }\r\n\r\n get isUnlocked() {\r\n return Currency.singularities.gte(this.start);\r\n }\r\n\r\n get increaseThreshold() {\r\n return this.config.increaseThreshold;\r\n }\r\n\r\n nerfCompletions(completions) {\r\n const softcap = this.increaseThreshold;\r\n if (!softcap || (completions < softcap)) return completions;\r\n return softcap + (completions - softcap) / 3;\r\n }\r\n\r\n unnerfCompletions(completions) {\r\n const softcap = this.increaseThreshold;\r\n if (!softcap || (completions < softcap)) return completions;\r\n return softcap + (completions - softcap) * 3;\r\n }\r\n\r\n get previousGoal() {\r\n if (this.isUnique) return 1;\r\n if (!this.isUnlocked) return 0;\r\n return this.start * Math.pow(this.repeat, this.unnerfCompletions(this.completions) - 1);\r\n }\r\n\r\n get nextGoal() {\r\n if (this.isUnique) return this.start;\r\n return this.start * Math.pow(this.repeat, this.unnerfCompletions(this.completions + 1) - 1);\r\n }\r\n\r\n get rawCompletions() {\r\n if (this.isUnique) return this.isUnlocked ? 1 : 0;\r\n if (!this.isUnlocked) return 0;\r\n return 1 + (Math.log(Currency.singularities.value) - Math.log(this.start)) / Math.log(this.repeat);\r\n }\r\n\r\n get completions() {\r\n return Math.min(Math.floor(this.nerfCompletions(this.rawCompletions)), this.limit);\r\n }\r\n\r\n get remainingSingularities() {\r\n return this.nextGoal - Currency.singularities.value;\r\n }\r\n\r\n get progressToNext() {\r\n const prog = (Currency.singularities.value - this.previousGoal) / this.nextGoal;\r\n return formatPercents(Math.clampMax(prog, 1));\r\n }\r\n\r\n get isMaxed() {\r\n return (this.isUnique && this.isUnlocked) || (this.completions >= this.limit);\r\n }\r\n\r\n get effectDisplay() {\r\n if (Number.isFinite(this.effectValue)) return this.config.effectFormat(this.effectValue);\r\n return \"N/A\";\r\n }\r\n\r\n get nextEffectDisplay() {\r\n return this.config.effectFormat(this._rawEffect(this.completions + 1));\r\n }\r\n\r\n get description() {\r\n return this.config.description;\r\n }\r\n\r\n get canBeApplied() {\r\n return this.isUnlocked && !Pelle.isDisabled(\"singularity\");\r\n }\r\n}\r\n\r\nexport const SingularityMilestone = mapGameDataToObject(\r\n GameDatabase.celestials.singularityMilestones,\r\n config => new SingularityMilestoneState(config)\r\n);\r\n\r\nexport const SingularityMilestones = {\r\n all: SingularityMilestone.all,\r\n lastNotified: player.celestials.laitela.lastCheckedMilestones,\r\n\r\n get sorted() {\r\n return this.all.sort((a, b) => a.remainingSingularities - b.remainingSingularities);\r\n },\r\n\r\n sortedForCompletions(moveNewToTop) {\r\n const options = player.celestials.laitela.singularitySorting;\r\n\r\n // Sorting functions for singularity milestones, values are generally around 0 to 2ish. Should generally attempt\r\n // to return unique values for all milestones for the sake of stable sorting\r\n let sortFn;\r\n switch (options.sortResource) {\r\n case SINGULARITY_MILESTONE_SORT.SINGULARITIES_TO_NEXT:\r\n sortFn = m => {\r\n // If it's maxed, we order based on the final goal value - higher goals are sorted later\r\n if (m.isMaxed) return 1 + Math.log10(m.isUnique ? m.nextGoal : m.previousGoal) / 1000;\r\n return Math.log10(m.remainingSingularities) / 100;\r\n };\r\n break;\r\n case SINGULARITY_MILESTONE_SORT.CURRENT_COMPLETIONS:\r\n // Also counts partial completion on the current step\r\n sortFn = m => {\r\n // For never-completed repeatable milestones, this is zero and will cause NaN bugs if we don't set it to 1\r\n const prev = Math.clampMin(m.previousGoal, 1);\r\n const part = Math.clamp(Math.log(Currency.singularities.value / prev) / Math.log(m.nextGoal / prev), 0, 1);\r\n return (m.completions + part) / 20;\r\n };\r\n break;\r\n case SINGULARITY_MILESTONE_SORT.PERCENT_COMPLETIONS:\r\n // Orders infinite milestones based on completion count, putting them after all limited ones even if\r\n // they're completed\r\n sortFn = m => {\r\n const limit = Number.isFinite(m.limit) ? m.limit : 100;\r\n const currComp = Math.log(Currency.singularities.value / m.previousGoal) /\r\n Math.log(m.nextGoal / m.previousGoal);\r\n return Math.clampMax((m.completions + currComp) / limit, 1) + (Number.isFinite(m.limit) ? 0 : 1);\r\n };\r\n break;\r\n case SINGULARITY_MILESTONE_SORT.FINAL_COMPLETION:\r\n // Sorts infinite milestones as if they end at 50 steps; for any given number of completions, this\r\n // treats infinite milestones with larger steps as if they complete at a higher value\r\n sortFn = m => {\r\n const limit = Number.isFinite(m.limit) ? m.limit : 50;\r\n return Math.log10(m.config.start * Math.pow(m.config.repeat, limit - 1)) / 100;\r\n };\r\n break;\r\n case SINGULARITY_MILESTONE_SORT.MOST_RECENT:\r\n sortFn = m => {\r\n if (!m.isUnlocked) return 1 + Math.log10(m.start) / 1000;\r\n // For unique milestones, previousGoal is actually 1 and nextGoal contains the completion amount\r\n return Math.log10(m.isUnique ? m.nextGoal : m.previousGoal) / 100;\r\n };\r\n break;\r\n default:\r\n throw new Error(\"Unrecognized Singularity Milestone sorting option (order)\");\r\n }\r\n\r\n // Shift the fully completed milestones to the front or back with a constant offset which should be larger\r\n // than the value that the sort function should ever evaluate to\r\n let completedVal;\r\n switch (options.showCompleted) {\r\n case COMPLETED_MILESTONES.FIRST:\r\n completedVal = 10;\r\n break;\r\n case COMPLETED_MILESTONES.LAST:\r\n completedVal = -10;\r\n break;\r\n case COMPLETED_MILESTONES.IGNORED:\r\n completedVal = 0;\r\n break;\r\n default:\r\n throw new Error(\"Unrecognized Singularity Milestone sorting option (completed milestones)\");\r\n }\r\n\r\n // Compose the functions together; possibly reverse the final order and bring new milestones to the top\r\n const isNew = m => ((m.previousGoal > player.celestials.laitela.lastCheckedMilestones && moveNewToTop) ? 20 : 0);\r\n const compFn = m => (m.isMaxed ? completedVal : 0) + (options.sortOrder ? sortFn(m) : -sortFn(m)) + isNew(m);\r\n return this.sorted.sort((a, b) => compFn(b) - compFn(a));\r\n },\r\n\r\n get nextMilestoneGroup() {\r\n return this.sortedForCompletions(false).filter(m => !m.isMaxed).slice(0, 6);\r\n },\r\n\r\n get unseenMilestones() {\r\n const laitela = player.celestials.laitela;\r\n return SingularityMilestoneThresholds\r\n .filter(s => s > laitela.lastCheckedMilestones && Currency.singularities.gte(s));\r\n },\r\n\r\n get unnotifiedMilestones() {\r\n return SingularityMilestoneThresholds.filter(s => s > this.lastNotified && Currency.singularities.gte(s));\r\n }\r\n};\r\n\r\n// Sorted list of all the values where a singularity milestone exists, used for \"new milestone\" styling\r\nconst SingularityMilestoneThresholds = (function() {\r\n return SingularityMilestones.all\r\n .map(m => Array.range(0, Math.min(50, m.limit))\r\n .filter(r => !m.increaseThreshold || r <= m.increaseThreshold ||\r\n (r > m.increaseThreshold && ((r - m.increaseThreshold) % 3) === 2))\r\n .map(r => m.start * Math.pow(m.repeat, r)))\r\n .flat(Infinity)\r\n .filter(n => n < 1e100)\r\n .sort((a, b) => a - b);\r\n}());\r\n\r\nexport const Singularity = {\r\n get cap() {\r\n return 200 * Math.pow(10, player.celestials.laitela.singularityCapIncreases);\r\n },\r\n\r\n get gainPerCapIncrease() {\r\n return SingularityMilestone.improvedSingularityCap.effectOrDefault(11);\r\n },\r\n\r\n get singularitiesGained() {\r\n const MMBoostSing = MendingMilestone.one.isReached ? 5 : 1;\r\n let IU10 = ImaginaryUpgrade(10).effectOrDefault(0);\r\n if(Ra.unlocks.dmdScaling.isUnlocked) IU10 = Math.pow(2,IU10);\r\n let x = Math.floor(Math.pow(this.gainPerCapIncrease, player.celestials.laitela.singularityCapIncreases) *\r\n SingularityMilestone.singularityMult.effectOrDefault(1) *\r\n (1 + IU10)) * MMBoostSing;\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Math.ceil(x**corruptionPenalties.repSing.sing[player.mending.corruption[8]]);\r\n }//this looks useless bruh--sxy\r\n return x;\r\n },\r\n\r\n // Time (in seconds) to go from 0 DE to the condensing requirement\r\n get timePerCondense() {\r\n return this.cap / Currency.darkEnergy.productionPerSecond;\r\n },\r\n\r\n // Time (in seconds) to reach the condensing requirement from *current* DE\r\n get timeUntilCap() {\r\n return (this.cap - Currency.darkEnergy.value) / Currency.darkEnergy.productionPerSecond;\r\n },\r\n\r\n // Total additional time auto-condense will wait after reaching the condensing requirement\r\n get timeDelayFromAuto() {\r\n return this.timePerCondense * (SingularityMilestone.autoCondense.effectOrDefault(Infinity) - 1);\r\n },\r\n\r\n get capIsReached() {\r\n return Currency.darkEnergy.gte(this.cap);\r\n },\r\n\r\n increaseCap() {\r\n let x = 50 + (Ra.unlocks.increaseSingLimits.isUnlocked ? 5 * Math.floor((Ra.pets.laitela.level - 40) / 5) + 1 : 0) + CorruptionUpgrade(4).effectOrDefault(0);\r\n if (player.celestials.laitela.singularityCapIncreases >= x) return;\r\n player.celestials.laitela.singularityCapIncreases++;\r\n },\r\n\r\n decreaseCap() {\r\n if (player.celestials.laitela.singularityCapIncreases === 0) return;\r\n player.celestials.laitela.singularityCapIncreases--;\r\n },\r\n\r\n perform() {\r\n if (!this.capIsReached || Pelle.isDoomed) return;\r\n\r\n EventHub.dispatch(GAME_EVENT.SINGULARITY_RESET_BEFORE);\r\n\r\n Currency.darkEnergy.reset();\r\n Currency.singularities.add(this.singularitiesGained);\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n Currency.singularities.value = Math.pow(Currency.singularities.value,corruptionPenalties.secondaryRejection[player.mending.corruption[7]]);\r\n }*/\r\n for (const quote of Laitela.quotes.all) {\r\n if (quote.requirement) {\r\n quote.show();\r\n }\r\n }\r\n\r\n EventHub.dispatch(GAME_EVENT.SINGULARITY_RESET_AFTER);\r\n }\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.GAME_LOAD, () => SingularityMilestones.lastNotified = Currency.singularities.value);\r\n\r\nEventHub.logic.on(GAME_EVENT.SINGULARITY_RESET_AFTER, () => {\r\n const newMilestones = SingularityMilestones.unnotifiedMilestones.length;\r\n if (newMilestones === 0) return;\r\n if (newMilestones === 1) GameUI.notify.blackHole(`You reached a Singularity milestone!`);\r\n else GameUI.notify.blackHole(`You reached ${formatInt(newMilestones)} Singularity milestones!`);\r\n SingularityMilestones.lastNotified = Currency.singularities.value;\r\n});\r\n","/* eslint-disable */\r\n\r\n// Most of this file is shamelessly stolen from here http://jsfiddle.net/JKirchartz/wwckP/\r\nconst Zalgo = {\r\n chars: {\r\n 0: [\r\n /* up */\r\n \"\\u030d\" /* ̍ */,\r\n \"\\u030e\" /* ̎ */,\r\n \"\\u0304\" /* ̄ */,\r\n \"\\u0305\" /* ̅ */,\r\n \"\\u033f\" /* ̿ */,\r\n \"\\u0311\" /* ̑ */,\r\n \"\\u0306\" /* ̆ */,\r\n \"\\u0310\" /* ̐ */,\r\n \"\\u0352\" /* ͒ */,\r\n \"\\u0357\" /* ͗ */,\r\n \"\\u0351\" /* ͑ */,\r\n \"\\u0307\" /* ̇ */,\r\n \"\\u0308\" /* ̈ */,\r\n \"\\u030a\" /* ̊ */,\r\n \"\\u0342\" /* ͂ */,\r\n \"\\u0343\" /* ̓ */,\r\n \"\\u0344\" /* ̈́ */,\r\n \"\\u034a\" /* ͊ */,\r\n \"\\u034b\" /* ͋ */,\r\n \"\\u034c\" /* ͌ */,\r\n \"\\u0303\" /* ̃ */,\r\n \"\\u0302\" /* ̂ */,\r\n \"\\u030c\" /* ̌ */,\r\n \"\\u0350\" /* ͐ */,\r\n \"\\u0300\" /* ̀ */,\r\n \"\\u0301\" /* ́ */,\r\n \"\\u030b\" /* ̋ */,\r\n \"\\u030f\" /* ̏ */,\r\n \"\\u0312\" /* ̒ */,\r\n \"\\u0313\" /* ̓ */,\r\n \"\\u0314\" /* ̔ */,\r\n \"\\u033d\" /* ̽ */,\r\n \"\\u0309\" /* ̉ */,\r\n \"\\u0363\" /* ͣ */,\r\n \"\\u0364\" /* ͤ */,\r\n \"\\u0365\" /* ͥ */,\r\n \"\\u0366\" /* ͦ */,\r\n \"\\u0367\" /* ͧ */,\r\n \"\\u0368\" /* ͨ */,\r\n \"\\u0369\" /* ͩ */,\r\n \"\\u036a\" /* ͪ */,\r\n \"\\u036b\" /* ͫ */,\r\n \"\\u036c\" /* ͬ */,\r\n \"\\u036d\" /* ͭ */,\r\n \"\\u036e\" /* ͮ */,\r\n \"\\u036f\" /* ͯ */,\r\n \"\\u033e\" /* ̾ */,\r\n \"\\u035b\" /* ͛ */,\r\n \"\\u0346\" /* ͆ */,\r\n \"\\u031a\" /* ̚ */,\r\n ],\r\n 1: [\r\n /* down */\r\n \"\\u0316\" /* ̖ */,\r\n \"\\u0317\" /* ̗ */,\r\n \"\\u0318\" /* ̘ */,\r\n \"\\u0319\" /* ̙ */,\r\n \"\\u031c\" /* ̜ */,\r\n \"\\u031d\" /* ̝ */,\r\n \"\\u031e\" /* ̞ */,\r\n \"\\u031f\" /* ̟ */,\r\n \"\\u0320\" /* ̠ */,\r\n \"\\u0324\" /* ̤ */,\r\n \"\\u0325\" /* ̥ */,\r\n \"\\u0326\" /* ̦ */,\r\n \"\\u0329\" /* ̩ */,\r\n \"\\u032a\" /* ̪ */,\r\n \"\\u032b\" /* ̫ */,\r\n \"\\u032c\" /* ̬ */,\r\n \"\\u032d\" /* ̭ */,\r\n \"\\u032e\" /* ̮ */,\r\n \"\\u032f\" /* ̯ */,\r\n \"\\u0330\" /* ̰ */,\r\n \"\\u0331\" /* ̱ */,\r\n \"\\u0332\" /* ̲ */,\r\n \"\\u0333\" /* ̳ */,\r\n \"\\u0339\" /* ̹ */,\r\n \"\\u033a\" /* ̺ */,\r\n \"\\u033b\" /* ̻ */,\r\n \"\\u033c\" /* ̼ */,\r\n \"\\u0345\" /* ͅ */,\r\n \"\\u0347\" /* ͇ */,\r\n \"\\u0348\" /* ͈ */,\r\n \"\\u0349\" /* ͉ */,\r\n \"\\u034d\" /* ͍ */,\r\n \"\\u034e\" /* ͎ */,\r\n \"\\u0353\" /* ͓ */,\r\n \"\\u0354\" /* ͔ */,\r\n \"\\u0355\" /* ͕ */,\r\n \"\\u0356\" /* ͖ */,\r\n \"\\u0359\" /* ͙ */,\r\n \"\\u035a\" /* ͚ */,\r\n \"\\u0323\" /* ̣ */,\r\n ],\r\n 2: [\r\n /* mid */\r\n \"\\u0315\" /* ̕ */,\r\n \"\\u031b\" /* ̛ */,\r\n \"\\u0340\" /* ̀ */,\r\n \"\\u0341\" /* ́ */,\r\n \"\\u0358\" /* ͘ */,\r\n \"\\u0321\" /* ̡ */,\r\n \"\\u0322\" /* ̢ */,\r\n \"\\u0327\" /* ̧ */,\r\n \"\\u0328\" /* ̨ */,\r\n \"\\u0334\" /* ̴ */,\r\n \"\\u0335\" /* ̵ */,\r\n \"\\u0336\" /* ̶ */,\r\n \"\\u034f\" /* ͏ */,\r\n \"\\u035c\" /* ͜ */,\r\n \"\\u035d\" /* ͝ */,\r\n \"\\u035e\" /* ͞ */,\r\n \"\\u035f\" /* ͟ */,\r\n \"\\u0360\" /* ͠ */,\r\n \"\\u0362\" /* ͢ */,\r\n \"\\u0338\" /* ̸ */,\r\n \"\\u0337\" /* ̷ */,\r\n \"\\u0361\" /* ͡ */,\r\n \"\\u0489\" /* ҉_ */,\r\n ],\r\n },\r\n random(len, seed) {\r\n if (len == 1) return 0;\r\n const x = (66669 * seed % 981) / 997;\r\n return !!len ? Math.floor(x * len + 1) - 1 : x;\r\n },\r\n generate(str, level = 0) {\r\n const str_arr = str.split(\"\");\r\n let seed = str_arr.reduce((curr, acc) => curr + acc.charCodeAt(0), 0);\r\n return str_arr.map(a => {\r\n if (a == \" \") return a;\r\n for (let i = 0; i < level; i++) {\r\n const rand = Zalgo.random(3, seed++);\r\n if (Zalgo.random(10, seed++) / 10 >= 0.5) a += Zalgo.chars[rand][Zalgo.random(Zalgo.chars[rand].length, seed++)];\r\n }\r\n return a;\r\n }).join(\"\");\r\n },\r\n};\r\n\r\nexport default Zalgo.generate;","import { Currency } from \"../../currency\";\r\nimport { DC } from \"../../constants\";\r\nimport { RebuyableMechanicState } from \"../../game-mechanics/rebuyable\";\r\nimport { SetPurchasableMechanicState } from \"../../utils\";\r\n\r\nimport { Quotes } from \"../quotes\";\r\n\r\nimport wordShift from \"../../word-shift\";\r\n\r\nimport zalgo from \"./zalgo\";\r\nimport { MendingUpgrade } from \"../../mending-upgrades\";\r\n\r\n\r\nconst disabledMechanicUnlocks = {\r\n achievements: () => ({}),\r\n IPMults: () => ({}),\r\n EPMults: () => ({}),\r\n galaxies: () => ({}),\r\n InfinitiedMults: () => ({}),\r\n infinitiedGen: () => ({}),\r\n eternityGain: () => ({}),\r\n eternityMults: () => ({}),\r\n studies: () => ({}),\r\n EPgen: () => ({}),\r\n autoec: () => ({}),\r\n replicantiIntervalMult: () => ({}),\r\n tpMults: () => ({}),\r\n glyphs: () => !PelleRifts.vacuum.milestones[0].canBeApplied,\r\n V: () => ({}),\r\n singularity: () => ({}),\r\n continuum: () => !Ra.unlocks.unlockPelleContinuum.isUnlocked,\r\n alchemy: () => ({}),\r\n achievementMult: () => ({}),\r\n blackhole: () => ({}),\r\n effarig: () => ({}),\r\n imaginaryUpgrades: () => ({}),\r\n glyphsac: () => ({}),\r\n antimatterDimAutobuyer1: () => PelleUpgrade.antimatterDimAutobuyers1,\r\n antimatterDimAutobuyer2: () => PelleUpgrade.antimatterDimAutobuyers1,\r\n antimatterDimAutobuyer3: () => PelleUpgrade.antimatterDimAutobuyers1,\r\n antimatterDimAutobuyer4: () => PelleUpgrade.antimatterDimAutobuyers1,\r\n antimatterDimAutobuyer5: () => PelleUpgrade.antimatterDimAutobuyers2,\r\n antimatterDimAutobuyer6: () => PelleUpgrade.antimatterDimAutobuyers2,\r\n antimatterDimAutobuyer7: () => PelleUpgrade.antimatterDimAutobuyers2,\r\n antimatterDimAutobuyer8: () => PelleUpgrade.antimatterDimAutobuyers2,\r\n tickspeedAutobuyer: () => PelleUpgrade.tickspeedAutobuyer,\r\n dimBoostAutobuyer: () => PelleUpgrade.dimBoostAutobuyer,\r\n galaxyAutobuyer: () => PelleUpgrade.galaxyAutobuyer,\r\n timeTheoremAutobuyer: () => ({}),\r\n rupg10: () => ({}),\r\n dtMults: () => ({}),\r\n chargedInfinityUpgrades: () => ({}),\r\n alteration: () => ({}),\r\n timeTheorems: () => ({})\r\n};\r\n\r\nexport const Pelle = {\r\n symbol: \"♅\",\r\n // Suppress the randomness for this form\r\n possessiveName: \"Pelle's\",\r\n\r\n // This is called upon initial Dooming and after every Armageddon when using the modal\r\n initializeRun() {\r\n if (this.isDoomed) {\r\n Pelle.armageddon(true);\r\n return;\r\n }\r\n\r\n Glyphs.harshAutoClean();\r\n if (!Glyphs.unequipAll()) {\r\n Modal.hideAll();\r\n Modal.message.show(`Dooming your Reality will unequip your Glyphs. Some of your\r\n Glyphs could not be unequipped due to lack of inventory space.`, 1);\r\n return;\r\n }\r\n Glyphs.harshAutoClean();\r\n if (Glyphs.freeInventorySpace < 5) {\r\n Modal.hideAll();\r\n Modal.message.show(`You must have enough empty unprotected Glyph slots for\r\n ${formatInt(5)} additional Glyphs in order to Doom your Reality.`, 1);\r\n return;\r\n }\r\n for (const type of BASIC_GLYPH_TYPES) Glyphs.addToInventory(GlyphGenerator.doomedGlyph(type));\r\n Glyphs.refreshActive();\r\n player.options.confirmations.glyphReplace = true;\r\n player.reality.automator.state.repeat = false;\r\n player.reality.automator.state.forceRestart = false;\r\n if (BlackHoles.arePaused) BlackHoles.togglePause();\r\n player.celestials.pelle.doomed = true;\r\n Pelle.armageddon(false);\r\n respecTimeStudies(true);\r\n Currency.infinityPoints.reset();\r\n player.IPMultPurchases = 0;\r\n Autobuyer.bigCrunch.mode = AUTO_CRUNCH_MODE.AMOUNT;\r\n disChargeAll();\r\n disChargeAllBreak();\r\n clearCelestialRuns();\r\n\r\n // Force-enable the group toggle for AD autobuyers to be active; whether or not they can actually tick\r\n // is still handled through if the autobuyers are unlocked at all. This fixes an odd edge case where the player\r\n // enters cel7 with AD autobuyers disabled - AD autobuyers need to be reupgraded, but the UI component\r\n // for the group toggle is hidden until they're all re-upgraded to the max again.\r\n player.auto.antimatterDims.isActive = true;\r\n\r\n player.buyUntil10 = true;\r\n player.records.realTimeDoomed = 0;\r\n for (const res of AlchemyResources.all) res.amount = 0;\r\n AutomatorBackend.stop();\r\n\r\n // Force-unhide all tabs except for the shop tab, for which we retain the hide state instead\r\n const shopTab = ~1 & (1 << GameDatabase.tabs.find(t => t.key === \"shop\").id);\r\n player.options.hiddenTabBits &= shopTab;\r\n\r\n // Force unhide MOST subtabs, although some of the tabs get ignored since they don't contain any\r\n // meaningful interactable gameplay elements in Doomed\r\n const tabsToIgnore = [\"statistics\", \"achievements\", \"reality\", \"celestials\"];\r\n const ignoredIDs = GameDatabase.tabs.filter(t => tabsToIgnore.includes(t.key)).map(t => t.id);\r\n for (let tabIndex = 0; tabIndex < GameDatabase.tabs.length; tabIndex++) {\r\n player.options.hiddenSubtabBits[tabIndex] &= ignoredIDs.includes(tabIndex) ? -1 : 0;\r\n }\r\n\r\n if(MendingMilestone.one.isReached){\r\n PelleUpgrade.antimatterDimAutobuyers1.isBought = true;\r\n PelleUpgrade.antimatterDimAutobuyers2.isBought = true;\r\n PelleUpgrade.tickspeedAutobuyer.isBought = true;\r\n PelleUpgrade.dimBoostAutobuyer.isBought = true;\r\n PelleUpgrade.galaxyAutobuyer.isBought = true;\r\n PelleUpgrade.keepAutobuyers.isBought = true;\r\n PelleUpgrade.IDAutobuyers.isBought = true;\r\n PelleUpgrade.replicantiAutobuyers.isBought = true;\r\n PelleUpgrade.TDAutobuyers.isBought = true;\r\n for (const autobuyer of Autobuyers.all) {\r\n if (autobuyer.data.interval !== undefined) autobuyer.maxIntervalForFree();\r\n }\r\n }\r\n Pelle.quotes.initial.show();\r\n GameStorage.save(true);\r\n },\r\n\r\n get displayName() {\r\n return Date.now() % 4000 > 500 ? \"Pelle\" : wordShift.randomCrossWords(\"Pelle\");\r\n },\r\n\r\n get isUnlocked() {\r\n return ImaginaryUpgrade(25).isBought;\r\n },\r\n // This will check if a specific mechanic is disabled, like old PelleFlag(x).isActive,\r\n // Initially it will only have isDoomed check but we will have upgrades that let you get stuff back\r\n isDisabled(mechanic) {\r\n if (!this.isDoomed) return false;\r\n\r\n if (!mechanic) return true;\r\n if (!disabledMechanicUnlocks[mechanic]) {\r\n // eslint-disable-next-line\r\n console.error(`Mechanic ${mechanic} isn't present in the disabledMechanicUnlocks!`);\r\n return true;\r\n }\r\n\r\n const upgrade = disabledMechanicUnlocks[mechanic]();\r\n\r\n if (typeof upgrade === \"boolean\") {\r\n return upgrade;\r\n }\r\n\r\n return Boolean(!upgrade.canBeApplied);\r\n },\r\n\r\n get canArmageddon() {\r\n return this.remnantsGain >= 1;\r\n },\r\n\r\n armageddon(gainStuff) {\r\n if (!this.canArmageddon && gainStuff) return;\r\n EventHub.dispatch(GAME_EVENT.ARMAGEDDON_BEFORE, gainStuff);\r\n if (gainStuff) {\r\n this.cel.remnants += this.remnantsGain;\r\n }\r\n finishProcessReality({ reset: true, armageddon: true });\r\n disChargeAll();\r\n disChargeAllBreak();\r\n player.celestials.enslaved.isStoringReal = false;\r\n player.celestials.enslaved.autoStoreReal = false;\r\n if (PelleStrikes.dilation.hasStrike) player.dilation.active = true;\r\n EventHub.dispatch(GAME_EVENT.ARMAGEDDON_AFTER, gainStuff);\r\n },\r\n\r\n gameLoop(diff) {\r\n if (this.isDoomed) {\r\n Currency.realityShards.add(this.realityShardGainPerSecond.times(diff).div(1000));\r\n PelleRifts.all.forEach(r => r.fill(diff));\r\n }\r\n },\r\n\r\n get cel() {\r\n return player.celestials.pelle;\r\n },\r\n\r\n get isDoomed() {\r\n return this.cel.doomed;\r\n },\r\n\r\n get disabledAchievements() {\r\n let x = [164, 156, 142, 141, 137, 134, 133, 132, 125, 117, 116, 113, 111, 104, 103, 95, 93, 92, 91,\r\n 87, 85, 78, 76, 74, 65, 55, 54, 37];\r\n if (!Achievement(191).isUnlocked){\r\n x.push([118, 126, 143])\r\n }\r\n return x\r\n },\r\n\r\n get uselessInfinityUpgrades() {\r\n let result = [\"passiveGen\", \"infinitiedGeneration\"];\r\n if (!Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked) result.push(\"ipMult\");\r\n return result;\r\n },\r\n\r\n get uselessTimeStudies() {\r\n return [32, 33, 41, 51, 61, 62, 121, 122, 123, 141, 142, 143, 192, 213];\r\n },\r\n\r\n get disabledRUPGs() {\r\n return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 19, 20, 22, 23, 24];\r\n },\r\n\r\n get uselessPerks() {\r\n let x = [10, 12, 13, 14, 15, 16, 17, 30, 40, 41, 42, 43, 44, 45, 46, 51, 52,\r\n 53, 60, 61, 62, 80, 81, 82, 83, 100, 103, 104, 105, 201, 202, 203, 204];\r\n if (!Achievement(191).isUnlocked) x.push(106);\r\n return x;\r\n },\r\n\r\n get specialGlyphEffect() {\r\n\r\n const isUnlocked = this.isDoomed && PelleRifts.chaos.milestones[1].canBeApplied;\r\n const description = this.getSpecialGlyphEffectDescription(this.activeGlyphType);\r\n const isActive = type => isUnlocked && this.activeGlyphType === type;\r\n return {\r\n isUnlocked,\r\n description,\r\n infinity: (isActive(\"infinity\") && player.challenge.eternity.current <= 8)\r\n ? Currency.infinityPoints.value.plus(1).pow(0.2)\r\n : DC.D1,\r\n time: isActive(\"time\")\r\n ? Decimal.min(Currency.eternityPoints.value.plus(1).pow(0.3),Decimal.pow10(1e20))\r\n : DC.D1,\r\n replication: isActive(\"replication\")\r\n ? 10 ** 53 ** (PelleRifts.vacuum.percentage)\r\n : 1,\r\n dilation: isActive(\"dilation\")\r\n ? Decimal.pow(player.dilation.totalTachyonGalaxies, 1.5).max(1)\r\n : DC.D1,\r\n power: isActive(\"power\")\r\n ? 1.02\r\n : 1,\r\n companion: isActive(\"companion\")\r\n ? 1.34\r\n : 1,\r\n isScaling: () => [\"infinity\", \"time\", \"replication\", \"dilation\"].includes(this.activeGlyphType),\r\n };\r\n },\r\n getSpecialGlyphEffectDescription(type) {\r\n switch (type) {\r\n case \"infinity\":\r\n return `Infinity Point gain ${player.challenge.eternity.current <= 8\r\n ? formatX(Currency.infinityPoints.value.plus(1).pow(0.2), 2)\r\n : formatX(DC.D1, 2)} (based on current IP)`;\r\n case \"time\":\r\n return `Eternity Point gain ${formatX(Decimal.min(Currency.eternityPoints.value.plus(1).pow(0.3),Decimal.pow10(1e20)), 2)}\r\n (based on current EP, max 1e1e20)`;\r\n case \"replication\":\r\n return `Replication speed ${formatX(10 ** 53 ** (PelleRifts.vacuum.percentage), 2)} \\\r\n (based on ${wordShift.wordCycle(PelleRifts.vacuum.name)})`;\r\n case \"dilation\":\r\n return `Dilated Time gain ${formatX(Decimal.pow(player.dilation.totalTachyonGalaxies, 1.5).max(1), 2)}\r\n (based on Tachyon Galaxies)`;\r\n case \"power\":\r\n return `Galaxies are ${formatPercents(0.02)} stronger`;\r\n case \"companion\":\r\n return `You feel ${formatPercents(0.34)} better`;\r\n // Undefined means that there is no glyph equipped, needs to be here since this function is used in\r\n // both Current Glyph Effects and Glyph Tooltip\r\n case undefined:\r\n return \"No Glyph equipped!\";\r\n default:\r\n return \"You cannot equip this Glyph while Doomed!\";\r\n }\r\n },\r\n\r\n get remnantRequirementForDilation() {\r\n return 3.8e7;\r\n },\r\n\r\n get canDilateInPelle() {\r\n return this.cel.remnants >= this.remnantRequirementForDilation;\r\n },\r\n\r\n get remnantsGain() {\r\n let am = this.cel.records.totalAntimatter.plus(1).log10();\r\n let ip = this.cel.records.totalInfinityPoints.plus(1).log10();\r\n let ep = this.cel.records.totalEternityPoints.plus(1).log10();\r\n let MMBoostRem = MendingMilestone.one.isReached ? 1.1 : 1;\r\n\r\n if (PelleStrikes.dilation.hasStrike) {\r\n am *= 500;\r\n ip *= 10;\r\n ep *= 5;\r\n }\r\n\r\n const gain = (\r\n ((Math.log10(am + 2) + Math.log10(ip + 2) + Math.log10(ep + 2)) * MMBoostRem)/ 1.64\r\n ) ** 7.5;\r\n\r\n return gain < 1 ? gain : Math.floor(gain - this.cel.remnants);\r\n },\r\n\r\n realityShardGain(remnants) {\r\n const MMBoostRS = MendingMilestone.one.isReached ? 10 : 1;\r\n return Decimal.pow(10, remnants ** (1 / 7.5) * 4).minus(1).div(1e3).times(MMBoostRS);\r\n },\r\n\r\n get realityShardGainPerSecond() {\r\n return this.realityShardGain(this.cel.remnants);\r\n },\r\n\r\n get nextRealityShardGain() {\r\n return this.realityShardGain(this.remnantsGain + this.cel.remnants);\r\n },\r\n\r\n // Calculations assume this is in units of proportion per second (eg. 0.03 is 3% drain per second)\r\n get riftDrainPercent() {\r\n return 0.3;\r\n },\r\n\r\n get glyphMaxLevel() {\r\n return PelleUpgrade.glyphLevels.effectValue;\r\n },\r\n\r\n get glyphStrength() {\r\n return 1 + (Ra.unlocks.pelleRarityBoost.isUnlocked ? (Ra.pets.pelle.level - 50) * 0.05 : 0); //3.5 is 100%\r\n },\r\n\r\n antimatterDimensionMult(x) {\r\n return Decimal.pow(10, Math.log10(x + 1) + x ** 5.1 / 1e3 + 4 ** x / 1e19);\r\n },\r\n\r\n get activeGlyphType() {\r\n return Glyphs.active.filter(Boolean)[0]?.type;\r\n },\r\n\r\n get hasGalaxyGenerator() {\r\n return player.celestials.pelle.galaxyGenerator.unlocked;\r\n },\r\n\r\n // Transition text from \"from\" to \"to\", stage is 0-1, 0 is fully \"from\" and 1 is fully \"to\"\r\n // Also adds more zalgo the bigger the stage\r\n transitionText(from, to, stage = 0) {\r\n const len = Math.round((from.length * (1 - stage) + to.length * stage) * 1e8) / 1e8;\r\n const toInterval = len * (1 - stage);\r\n let req = toInterval;\r\n let str = \"\";\r\n for (let i = 0; i < len; i++) {\r\n if (i >= req) {\r\n const idx = Math.floor(i * (to.length / len));\r\n str += to[idx];\r\n req += toInterval;\r\n } else {\r\n const idx = Math.floor(i * (from.length / len));\r\n str += from[idx];\r\n }\r\n }\r\n return zalgo(str, Math.floor(stage ** 2 * 7));\r\n },\r\n\r\n endTabNames: \"Never Gonna Give You Up Never Gonna Let You Down :) :3\".split(\" \"),//\"End? Is Nigh Destruction Is Imminent Help Us Good Bye Forever (NOT)\".split(\" \"),\r\n\r\n quotes: Quotes.pelle,\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.ARMAGEDDON_AFTER, () => {\r\n if (Currency.remnants.gte(1)) {\r\n Pelle.quotes.arm.show();\r\n }\r\n});\r\nEventHub.logic.on(GAME_EVENT.PELLE_STRIKE_UNLOCKED, () => {\r\n if (PelleStrikes.infinity.hasStrike) {\r\n Pelle.quotes.strike1.show();\r\n }\r\n if (PelleStrikes.powerGalaxies.hasStrike) {\r\n Pelle.quotes.strike2.show();\r\n }\r\n if (PelleStrikes.eternity.hasStrike) {\r\n Pelle.quotes.strike3.show();\r\n }\r\n if (PelleStrikes.ECs.hasStrike) {\r\n Pelle.quotes.strike4.show();\r\n }\r\n if (PelleStrikes.dilation.hasStrike) {\r\n Pelle.quotes.strike5.show();\r\n }\r\n});\r\n\r\nexport class RebuyablePelleUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.realityShards;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.celestials.pelle.rebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.celestials.pelle.rebuyables[this.id] = value;\r\n }\r\n\r\n get isCapped() {\r\n return this.boughtAmount >= this.config.cap;\r\n }\r\n\r\n get isCustomEffect() { return true; }\r\n\r\n get effectValue() {\r\n return this.config.effect(this.boughtAmount);\r\n }\r\n\r\n onPurchased() {\r\n if (this.id === \"glyphLevels\") EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n }\r\n}\r\n\r\nexport class PelleUpgradeState extends SetPurchasableMechanicState {\r\n\r\n get set() {\r\n return player.celestials.pelle.upgrades;\r\n }\r\n\r\n get currency() {\r\n return Currency.realityShards;\r\n }\r\n\r\n get description() {\r\n return this.config.description;\r\n }\r\n\r\n get cost() {\r\n return this.config.cost;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return Pelle.isDoomed;\r\n }\r\n\r\n}\r\n\r\nexport const PelleUpgrade = mapGameDataToObject(\r\n GameDatabase.celestials.pelle.upgrades,\r\n config => (config.rebuyable\r\n ? new RebuyablePelleUpgradeState(config)\r\n : new PelleUpgradeState(config)\r\n )\r\n);\r\n\r\nPelleUpgrade.rebuyables = PelleUpgrade.all.filter(u => u.isRebuyable);\r\nPelleUpgrade.singles = PelleUpgrade.all.filter(u => !u.isRebuyable);\r\n","import { BitUpgradeState } from \"../../utils\";\r\n\r\nclass PelleStrikeState extends BitUpgradeState {\r\n get bits() { return player.celestials.pelle.progressBits; }\r\n set bits(value) { player.celestials.pelle.progressBits = value; }\r\n\r\n get hasStrike() {\r\n return this.isUnlocked;\r\n }\r\n\r\n get canBeUnlocked() {\r\n return Pelle.isDoomed && !this.hasStrike;\r\n }\r\n\r\n get requirement() {\r\n const x = this.config.requirementDescription;\r\n return typeof x === \"function\" ? x() : x;\r\n }\r\n\r\n get penalty() {\r\n const x = this.config.penaltyDescription;\r\n return typeof x === \"function\" ? x() : x;\r\n }\r\n\r\n reward() {\r\n return this.config.rewardDescription();\r\n }\r\n\r\n get rift() {\r\n return this.config.rift();\r\n }\r\n\r\n trigger() {\r\n this.unlock();\r\n }\r\n\r\n onUnlock() {\r\n GameUI.notify.strike(`You encountered a Pelle Strike: ${this.requirement}`);\r\n player.celestials.pelle.collapsed.rifts = false;\r\n\r\n // If it's paradox, reset the records\r\n if (this.id === 5) {\r\n Pelle.cel.records.totalAntimatter = new Decimal(\"1e180000\");\r\n Pelle.cel.records.totalInfinityPoints = new Decimal(\"1e60000\");\r\n Currency.eternityPoints.reset();\r\n // Oddly specific number? Yes, it's roughly the amount of EP you have\r\n // when starting dilation for the first time\r\n // Since 5th strike previously did not reset your current EP the previous reset value was kind of useless which\r\n // lead to some balancing problems, this hopefully prevents people starting dilation too early and getting\r\n // softlocked, or starting it too late and getting not-softlocked.\r\n Pelle.cel.records.totalEternityPoints = new Decimal(\"1e1050\");\r\n }\r\n Tab.celestials.pelle.show();\r\n EventHub.dispatch(GAME_EVENT.PELLE_STRIKE_UNLOCKED);\r\n }\r\n}\r\n\r\nexport const PelleStrikes = mapGameDataToObject(\r\n GameDatabase.celestials.pelle.strikes,\r\n config => new PelleStrikeState(config)\r\n);\r\n","import { GameMechanicState } from \"../../utils\";\r\n\r\nclass RiftMilestoneState extends GameMechanicState {\r\n\r\n lastChecked = false;\r\n\r\n get requirement() {\r\n return this.config.requirement;\r\n }\r\n\r\n get resource() {\r\n return this.config.resource;\r\n }\r\n\r\n checkMilestoneState() {\r\n if (this.lastChecked !== this.isUnlocked) {\r\n this.config.onStateChange?.();\r\n }\r\n this.lastChecked = this.isUnlocked;\r\n }\r\n\r\n get isUnlocked() {\r\n if (this.resource === \"decay\" && PelleRifts.chaos.milestones[0].isEffectActive) return true;\r\n return this.requirement <= PelleRifts[this.resource].percentage;\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isUnlocked;\r\n }\r\n\r\n get description() {\r\n const d = this.config.description;\r\n return typeof d === \"function\" ? d() : d;\r\n }\r\n\r\n get formattedEffect() {\r\n if (this.canBeApplied) return this.config.formatEffect(this.effectValue);\r\n return false;\r\n }\r\n}\r\n\r\nclass RiftState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this._milestones = this.config.milestones.map(x => new RiftMilestoneState(x));\r\n }\r\n\r\n get fillCurrency() {\r\n return this.config.currency();\r\n }\r\n\r\n get strike() {\r\n return this.config.strike();\r\n }\r\n\r\n get canBeApplied() {\r\n return this.strike.hasStrike;\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get reducedTo() {\r\n return this.rift.reducedTo;\r\n }\r\n\r\n set reducedTo(value) {\r\n this.rift.reducedTo = value;\r\n }\r\n\r\n get rift() {\r\n return player.celestials.pelle.rifts[this.config.key];\r\n }\r\n\r\n get totalFill() {\r\n return this.rift.fill;\r\n }\r\n\r\n set totalFill(value) {\r\n this.rift.fill = value;\r\n }\r\n\r\n get isActive() {\r\n return this.rift.active;\r\n }\r\n\r\n get realPercentage() {\r\n return this.config.percentage(this.totalFill);\r\n }\r\n\r\n get spentPercentage() {\r\n return this.rift.percentageSpent || 0;\r\n }\r\n\r\n get percentage() {\r\n if (this.reducedTo > 1) return this.reducedTo;\r\n if (!this.config.spendable) return Math.min(this.realPercentage, this.reducedTo);\r\n return Math.min(this.config.percentage(this.totalFill) - this.spentPercentage, this.reducedTo);\r\n }\r\n\r\n get milestones() {\r\n return this._milestones;\r\n }\r\n\r\n get description() {\r\n return this.config.description;\r\n }\r\n\r\n get drainResource() {\r\n return this.config.drainResource;\r\n }\r\n\r\n get effects() {\r\n const base = this.config.baseEffect(this.effectValue);\r\n const additional = this.config.additionalEffects?.().map(x => x.formattedEffect) ?? [];\r\n return [base, ...additional];\r\n }\r\n\r\n get isCustomEffect() { return true; }\r\n\r\n get effectValue() {\r\n return this.config.effect(this.config.percentageToFill(this.percentage));\r\n }\r\n\r\n get maxValue() {\r\n return this.config.percentageToFill(1 + this.spentPercentage);\r\n }\r\n\r\n get isMaxed() {\r\n return this.percentage >= 1;\r\n }\r\n\r\n get galaxyGeneratorText() {\r\n return this.config.galaxyGeneratorText;\r\n }\r\n\r\n get activeCap() {\r\n return Ra.unlocks.boostMVRGain.isUnlocked?5:2;\r\n }\r\n\r\n toggle() {\r\n const active = PelleRifts.all.filter(r => r.isActive).length;\r\n if (!this.isActive && active === this.activeCap) GameUI.notify.error(`You can only have 2 rifts active at the same time!`);\r\n else this.rift.active = !this.rift.active;\r\n }\r\n\r\n checkMilestoneStates() {\r\n this.milestones.forEach(x => x.checkMilestoneState());\r\n }\r\n\r\n fill(diff) {\r\n // The UI removes the fill button after 100%, so we need to turn it off here\r\n if (this.isActive && this.isMaxed) {\r\n this.rift.active = false;\r\n return;\r\n }\r\n if (!this.isActive || this.isMaxed) return;\r\n\r\n if (this.fillCurrency.value instanceof Decimal) {\r\n // Don't drain resources if you only have 1 of it.\r\n // This is in place due to the fix to replicanti below.\r\n if (this.fillCurrency.value.lte(1)) return;\r\n const afterTickAmount = this.fillCurrency.value.times((1 - Pelle.riftDrainPercent) ** (diff / 100));\r\n const spent = this.fillCurrency.value.minus(afterTickAmount);\r\n // We limit this to 1 instead of 0 specifically for the case of replicanti; certain interactions with offline\r\n // time can cause it to drain to 0, where it gets stuck unless you reset it with some prestige\r\n this.fillCurrency.value = this.fillCurrency.value.minus(spent).max(1);\r\n this.totalFill = this.totalFill.plus(spent).min(this.maxValue);\r\n } else {\r\n const afterTickAmount = this.fillCurrency.value * (1 - Pelle.riftDrainPercent) ** (diff / 100);\r\n const spent = this.fillCurrency.value - afterTickAmount;\r\n this.fillCurrency.value = Math.max(this.fillCurrency.value - spent, 0);\r\n this.totalFill = Math.clampMax(this.totalFill + spent, this.maxValue);\r\n }\r\n if (PelleRifts.vacuum.milestones[0].canBeApplied) Glyphs.refreshActive();\r\n this.checkMilestoneStates();\r\n }\r\n}\r\n\r\nexport const PelleRifts = mapGameDataToObject(\r\n GameDatabase.celestials.pelle.rifts,\r\n config => new RiftState(config)\r\n);\r\n\r\nPelleRifts.totalMilestones = () => PelleRifts.all.flatMap(x => x.milestones).countWhere(x => x.canBeApplied);\r\n","import { RebuyableMechanicState } from \"../../game-mechanics/rebuyable\";\r\n\r\nimport { PelleRifts } from \"./rifts\";\r\n\r\nexport const GalaxyGenerator = {\r\n // This is used for a slightly annoying workaround in order to visually update the glyph tab when the rifts\r\n // are refilling and the single glyph slot (which was lost during the drain) becomes available again\r\n hasReturnedGlyphSlot: false,\r\n\r\n get generationCaps() {\r\n return PelleRifts.all\r\n .map(x => ({ rift: x.config.key, cap: x.config.galaxyGeneratorThreshold }))\r\n .sort((a, b) => a.cap - b.cap);\r\n },\r\n\r\n get spentGalaxies() {\r\n return player.celestials.pelle.galaxyGenerator.spentGalaxies;\r\n },\r\n\r\n get generatedGalaxies() {\r\n return player.celestials.pelle.galaxyGenerator.generatedGalaxies;\r\n },\r\n\r\n get galaxies() {\r\n return this.generatedGalaxies - this.spentGalaxies;\r\n },\r\n\r\n get gainPerSecond() {\r\n if (!Pelle.hasGalaxyGenerator) return 0;\r\n return new Decimal(GalaxyGeneratorUpgrades.additive.effectValue).timesEffectsOf(\r\n GalaxyGeneratorUpgrades.multiplicative,\r\n GalaxyGeneratorUpgrades.antimatterMult,\r\n GalaxyGeneratorUpgrades.IPMult,\r\n GalaxyGeneratorUpgrades.EPMult,\r\n ).toNumber();\r\n },\r\n\r\n get capObj() {\r\n return this.generationCaps[player.celestials.pelle.galaxyGenerator.phase];\r\n },\r\n\r\n get generationCap() {\r\n return this.capObj ? this.capObj.cap : Infinity;\r\n },\r\n\r\n get capRift() {\r\n return PelleRifts[this.capObj?.rift];\r\n },\r\n\r\n get isCapped() {\r\n return this.generationCap === this.generatedGalaxies;\r\n },\r\n\r\n get sacrificeActive() {\r\n return player.celestials.pelle.galaxyGenerator.sacrificeActive;\r\n },\r\n\r\n startSacrifice() {\r\n player.celestials.pelle.collapsed.rifts = false;\r\n player.celestials.pelle.galaxyGenerator.sacrificeActive = true;\r\n },\r\n\r\n loop(diff) {\r\n if (this.isCapped) {\r\n Pelle.quotes.galaxyGeneratorRifts.show();\r\n }\r\n if (this.sacrificeActive) {\r\n this.capRift.reducedTo = Math.max(this.capRift.reducedTo - 0.3 * diff / 1000, 0);\r\n if (this.capRift.reducedTo === 0) {\r\n player.celestials.pelle.galaxyGenerator.sacrificeActive = false;\r\n player.celestials.pelle.galaxyGenerator.phase++;\r\n\r\n const phase = player.celestials.pelle.galaxyGenerator.phase;\r\n if (phase === 1) {\r\n Pelle.quotes.galaxyGeneratorPhase1.show();\r\n } else if (phase === 4) {\r\n Pelle.quotes.galaxyGeneratorPhase4.show();\r\n }\r\n\r\n if (!this.capObj) {\r\n Pelle.quotes.end.show();\r\n }\r\n }\r\n PelleRifts.all.forEach(x => x.checkMilestoneStates());\r\n\r\n // Force-unequip glyphs when the player loses the respective milestone. We call the respec option as normally\r\n // except for one particular case - when we want to respec into protected slots but have no room to do so. In\r\n // that case, we force-respec into the inventory instead\r\n if (!PelleRifts.vacuum.milestones[0].canBeApplied && Glyphs.active.filter(g => g).length > 0) {\r\n Glyphs.unequipAll(player.options.respecIntoProtected && Glyphs.findFreeIndex(true) === -1);\r\n Glyphs.refreshActive();\r\n }\r\n\r\n }\r\n player.celestials.pelle.galaxyGenerator.generatedGalaxies += this.gainPerSecond * diff / 1000;\r\n player.celestials.pelle.galaxyGenerator.generatedGalaxies = Math.min(\r\n player.celestials.pelle.galaxyGenerator.generatedGalaxies,\r\n this.generationCap\r\n );\r\n\r\n if (!this.capRift) {\r\n PelleRifts.all.forEach(r => r.reducedTo = Math.min(r.reducedTo + 0.03 * diff / 1000, 2));\r\n if (PelleRifts.vacuum.milestones[0].canBeApplied && !this.hasReturnedGlyphSlot) {\r\n Glyphs.refreshActive();\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED);\r\n this.hasReturnedGlyphSlot = true;\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport class GalaxyGeneratorUpgrade extends RebuyableMechanicState {\r\n get currency() {\r\n return this.config.currency();\r\n }\r\n\r\n get boughtAmount() {\r\n return player.celestials.pelle.rebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.celestials.pelle.rebuyables[this.id] = value;\r\n }\r\n\r\n get isCustomEffect() { return true; }\r\n\r\n get effectValue() {\r\n return this.config.effect(this.boughtAmount);\r\n }\r\n}\r\n\r\nexport const GalaxyGeneratorUpgrades = mapGameDataToObject(\r\n GameDatabase.celestials.pelle.galaxyGeneratorUpgrades,\r\n config => new GalaxyGeneratorUpgrade(config)\r\n);\r\n","export const END_STATE_MARKERS = {\r\n // Tab zalgoification starts as soon as endState > 0\r\n GAME_END: 1,\r\n TAB_START_HIDE: 1.5,\r\n INTERACTIVITY_DISABLED: 2.5,\r\n FADE_AWAY: 2.5,\r\n SAVE_DISABLED: 4, //WILL KEEP SAVE ENABLED FOR MENDING AND BEYOND\r\n END_NUMBERS: 4.2,\r\n DISPLAY_DESTROYER_QUOTES: 4.5,\r\n CREDITS_START: 4.5, //WILL DISABLE CREDITS ROLL FOR NOW, UNLESS I CAN HAVE TWO SEPERATE SETS OF CREDITS\r\n SHOW_NEW_GAME: 13, //WE'RE NOT DONE YET, YOU STILL HAVE ANOTHER LAYER TO GO THROUGH\r\n SPECTATE_GAME: 13.5, //*SEE ABOVE*\r\n CREDITS_END: 14.5, //UNNEEDED (FOR NOW) DUE TO \"CREDITS_START\" BEING DISABLED\r\n};\r\n\r\nexport const GameEnd = {\r\n get endState() {\r\n if (this.removeAdditionalEnd) return this.additionalEnd;\r\n //Ra shop Pelle--sxy\r\n if (player.celestials.ra.upgrades.has('pelleUpgrade')&&!player.celestials.pelle.galaxyGenerator.unlocked) return 0;\r\n return Math.max((Math.log10(player.celestials.pelle.records.totalAntimatter.plus(1).log10() + 1) - 8.7) /\r\n (Math.log10(9e15) - 8.7) + this.additionalEnd, 0);\r\n },\r\n\r\n _additionalEnd: 0,\r\n get additionalEnd() {\r\n return (player.isGameEnd || this.removeAdditionalEnd) ? this._additionalEnd : 0;\r\n },\r\n set additionalEnd(x) {\r\n this._additionalEnd = (player.isGameEnd || this.removeAdditionalEnd) ? x : 0;\r\n },\r\n\r\n removeAdditionalEnd: false,\r\n\r\n creditsClosed: false,\r\n creditsEverClosed: false,\r\n\r\n gameLoop(diff) {\r\n if (this.removeAdditionalEnd) {\r\n this.additionalEnd -= Math.min(diff / 200, 0.5);\r\n if (this.additionalEnd < 4) {\r\n this.additionalEnd = 0;\r\n this.removeAdditionalEnd = false;\r\n }\r\n }\r\n if (!this.removeAdditionalEnd && this.endState >= END_STATE_MARKERS.GAME_END &&\r\n ui.$viewModel.modal.progressBar === undefined) {\r\n player.isGameEnd = true;\r\n if(this.endState < 4.5){\r\n if(player.mends.gte(new Decimal(10))){\r\n this.additionalEnd += Math.min(diff / 1000 / 20, 0.1) * 15;\r\n }\r\n else{\r\n this.additionalEnd += Math.min(diff / 1000 / 20, 0.1);\r\n }\r\n }\r\n else{\r\n this.additionalEnd += Math.min(diff / 1000 / 20, 0.1) * 200;\r\n /*if(this.endState >= 14.5){\r\n Quotes.destroyer.preMend.show()\r\n }*/\r\n }\r\n }\r\n }\r\n};\r\n","import { BitUpgradeState, RebuyableMechanicState } from \"../game-mechanics\";\r\nimport { GameDatabase } from \"../secret-formula/game-database\";\r\n\r\nimport { Quotes } from \"./quotes\";\r\n\r\nexport const Destroyer = {\r\n displayName: \"The Destroyer\",\r\n possessiveName: \"The Destroyer's\",\r\n get isUnlocked() {\r\n return true;\r\n },\r\n quotes: Quotes.destroyer,\r\n symbol: \" \"\r\n};\r\n","import { MendingMilestone } from \"../mending\";\r\nimport { Destroyer } from \"./destroyer\";\r\nimport { Effarig } from \"./effarig\";\r\nimport { Enslaved } from \"./enslaved\";\r\nimport { Laitela } from \"./laitela/laitela\";\r\nimport { Pelle } from \"./pelle/pelle\";\r\nimport { Ra } from \"./ra/ra\";\r\nimport { Teresa } from \"./teresa\";\r\nimport { V } from \"./V\";\r\nimport { Kohler } from \"./kohler\";\r\n\r\nexport const Celestials = {\r\n teresa: Teresa,\r\n effarig: Effarig,\r\n enslaved: Enslaved,\r\n v: V,\r\n ra: Ra,\r\n laitela: Laitela,\r\n pelle: Pelle,\r\n destroyer: Destroyer,\r\n kohler: Kohler\r\n};\r\n\r\nGameDatabase.celestials.descriptions = [\r\n {\r\n name: \"Teresa\",\r\n effects() {\r\n return `Glyph Time Theorem generation is disabled.\r\n You gain less Infinity Points and Eternity Points (x^${format(0.55, 2, 2)}).`;\r\n },\r\n },\r\n {\r\n name: \"Effarig\",\r\n effects() {\r\n return `All Dimension multipliers, game speed, and tickspeed are severely lowered, like Dilation.\r\n Infinity Power reduces the production and game speed penalties and Time Shards reduce the tickspeed penalty.\r\n Glyph levels are temporarily capped to ${formatInt(Effarig.glyphLevelCap)}, rarity is unaffected.`;\r\n },\r\n description() {\r\n return `You will exit Effarig's Reality when you complete a Layer of it for the first time.`;\r\n }\r\n },\r\n {\r\n name: \"The Nameless Ones\",\r\n effects() {\r\n return `Glyph levels are boosted to a minimum of ${formatInt(5000)}.\r\n Infinity, Time, and 8th Antimatter Dimension purchases are limited to ${formatInt(1)} each.\r\n Antimatter Dimension multipliers are always Dilated (the Glyph effect still only applies in actual Dilation).\r\n Time Study 192 (uncapped Replicanti) is locked.\r\n The Black Hole is disabled.\r\n Tachyon Particle production and Dilated Time production are severely reduced.\r\n Time Theorem generation from Dilation Glyphs is disabled.\r\n Certain challenge goals are increased.\r\n Stored game time is discharged at a reduced effectiveness (exponent^${format(0.55, 2, 2)}).`;\r\n }\r\n },\r\n {\r\n name: \"V\",\r\n effects() {\r\n const vEffect = `All Dimension multipliers, Eternity Point gain, Infinity Point gain, and Dilated Time gain\\\r\n per second are square-rooted. \r\n The Replicanti interval is squared.`;\r\n const vEffectAdditional = ` The Exponential Glyph Alchemy effect is disabled.`;\r\n\r\n let returnVal = vEffect\r\n if (Ra.unlocks.unlockGlyphAlchemy.canBeApplied) {\r\n returnVal += vEffectAdditional\r\n }\r\n return returnVal\r\n }\r\n },\r\n {\r\n name: \"Ra\",\r\n effects() {\r\n return `You only have ${formatInt(4)} Dimension Boosts and can not gain any more.\r\n The Tickspeed purchase multiplier is fixed at ${formatX(1.1245, 0, 3)}.`;\r\n },\r\n },\r\n {\r\n name: \"Lai'tela\",\r\n effects() {\r\n let disabledDims;\r\n const highestActive = 8 - Laitela.difficultyTier;\r\n switch (highestActive) {\r\n case 0:\r\n disabledDims = \"all Dimensions\";\r\n break;\r\n case 1:\r\n disabledDims = \"2nd and higher Dimensions\";\r\n break;\r\n case 2:\r\n disabledDims = \"3rd and higher Dimensions\";\r\n break;\r\n case 7:\r\n disabledDims = \"8th Dimensions\";\r\n break;\r\n default:\r\n disabledDims = `${highestActive + 1}th and higher Dimensions`;\r\n break;\r\n }\r\n const disabledText = highestActive === 8\r\n ? \"\"\r\n : `Production from ${disabledDims} is disabled.`;\r\n\r\n return `Infinity Point and Eternity Point gain are Dilated.\r\n Game speed is reduced to ${formatInt(1)} and gradually comes back over ${formatInt(10)} minutes.\r\n Black Hole storing, discharging, pulsing, and inversion are all disabled.\r\n ${disabledText}`;\r\n },\r\n description() {\r\n return `Antimatter generates entropy inside of this Reality.\\\r\n At ${formatPercents(1)} entropy, the Reality becomes destabilized\\\r\n and you gain a reward based on how quickly you reached ${formatPercents(1)}.\r\n Destabilizing the Reality in less than ${formatInt(30)} seconds makes it become significantly more difficult,\\\r\n in exchange for giving a much stronger reward.\\\r\n Doing this ${formatInt(8)} times will also give a ${formatX(8)} to Dark Energy gain.`;\r\n }\r\n },\r\n {\r\n name: \"YOU SHOULDN'T LOOK THIS\",\r\n effects() {\r\n const Effect = `This number 6 is dealt as a Error thrower when you enter Pelle through normal model.\r\n Do not use number 6.`;\r\n return Effect;\r\n }\r\n },\r\n {\r\n name: \"SuperV\",\r\n effects() {\r\n const vEffect = `All Dimension multipliers, Tickspeed, Eternity Point gain, Infinity Point gain, and Dilated Time gain\\\r\n per second are ^(1 / ${format(1e6, 0, 0)}). \r\n The Replicanti interval is 5^its origin.\r\n The Exponential Glyph Alchemy effect is disabled.`;\r\n return vEffect;\r\n }\r\n },\r\n {\r\n name: \"Kohler\",\r\n effects(){\r\n return \"TBD\";\r\n }\r\n }\r\n];\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{staticClass:\"c-modal-options__large\",attrs:{\"cancel-class\":'c-modal-message__okay-btn',\"confirm-class\":'c-modal-message__okay-btn c-modal__confirm-btn',\"cancel-fn\":_vm.overwrite},on:{\"confirm\":function($event){return _vm.ignore()}},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Could not compare with Cloud Save \")]},proxy:true},{key:\"cancel-text\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.overwriteText)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Do not overwrite \")]},proxy:true}])},[_vm._v(\" While attempting to compare your saves, the game was unable to properly process the data in your Cloud save. This is most likely due to the Cloud save being very outdated, using a data format from a much older version of the game. \"),_c('br'),_c('br'),(_vm.isSaving)?_c('span',[_vm._v(\" It is probably safe to overwrite your Cloud save. You can click \\\"Cloud load\\\" and force the save to be loaded if you would like to attempt to convert it to a valid save format that you can use. \")]):_c('span',[_vm._v(\" You can try to load your data from the Cloud if desired. The game will attempt to load in your Cloud data by converting its format, but this may not work and in the worst case may require you to reset this save slot in order for the game to work again. \")]),_c('br'),_vm._v(\" Note: This modal will show up regardless of your settings, because this issue will continue to prevent the 10-minute autosave until it is resolved. \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal-message l-modal-content--centered\"},[_c('span',{staticClass:\"c-modal__header\"},[_c('ModalCloseButton',{on:{\"click\":_vm.closeModal}}),(_vm.$slots.header)?_c('span',{staticClass:\"c-modal__title\"},[_vm._t(\"header\")],2):_vm._e()],1),_vm._t(\"default\"),(_vm.option)?_c('ModalConfirmationCheck',{attrs:{\"option\":_vm.option}}):_vm._e(),_c('div',{staticClass:\"l-modal-buttons\"},[(_vm.showCancel)?_c('PrimaryButton',{class:_vm.cancelClass,on:{\"click\":_vm.doCancel}},[_vm._t(\"cancel-text\",function(){return [_vm._v(\" Cancel \")]})],2):_vm._e(),_vm._t(\"extra-buttons\"),(_vm.showConfirm)?_c('PrimaryButton',{class:_vm.confirmClass,on:{\"click\":_vm.doConfirm}},[_vm._t(\"confirm-text\",function(){return [_vm._v(\" Confirm \")]})],2):_vm._e()],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal__confirmation-toggle\",on:{\"click\":_vm.toggle}},[_c('div',{class:_vm.confirmationClass},[(!_vm.setting)?_c('span',{staticClass:\"fas fa-check\"}):_vm._e(),_c('div',{staticClass:\"c-modal__confirmation-toggle__tooltip\"},[_vm._v(\" \"+_vm._s(_vm.tooltipText)+\" \")])]),_c('span',{staticClass:\"c-modal__confirmation-toggle__text\"},[_vm._v(\" Don't show this message again \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalConfirmationCheck.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalConfirmationCheck.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalConfirmationCheck.vue?vue&type=template&id=4572a7f3&\"\nimport script from \"./ModalConfirmationCheck.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalConfirmationCheck.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalWrapperChoice.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalWrapperChoice.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalWrapperChoice.vue?vue&type=template&id=02f37e5f&scoped=true&\"\nimport script from \"./ModalWrapperChoice.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalWrapperChoice.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModalWrapperChoice.vue?vue&type=style&index=0&id=02f37e5f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"02f37e5f\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CloudInvalidDataModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CloudInvalidDataModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CloudInvalidDataModal.vue?vue&type=template&id=17c2e372&\"\nimport script from \"./CloudInvalidDataModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CloudInvalidDataModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{staticClass:\"c-modal-options__large\",attrs:{\"cancel-class\":'c-modal-message__okay-btn',\"confirm-class\":'c-modal-message__okay-btn c-modal__confirm-btn',\"confirm-fn\":_vm.confirm},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Load Game from Cloud \")]},proxy:true},{key:\"cancel-text\",fn:function(){return [_vm._v(\" Keep Local Save \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Overwrite Local with Cloud Save \")]},proxy:true}])},[(_vm.hasDifferentName)?_c('span',[_vm._v(\" Your Local and Cloud Saves have \"),_c('b',[_vm._v(\"different names\")]),_vm._v(\". \")]):(_vm.older)?_c('span',[_vm._v(\" Loading from the Cloud would \"),_c('b',[_vm._v(\"load a save with less playtime\")]),_vm._v(\". \")]):(_vm.farther)?_c('span',[_vm._v(\" Loading from the Cloud would \"),_c('b',[_vm._v(\"cause you to lose progress\")]),_vm._v(\". \")]):_c('span',[_vm._v(\" Your Local Save and Cloud Save \"),_c('b',[_vm._v(\"appear to have similar amounts of progress\")]),_vm._v(\". \")]),_vm._v(\" Please select the save you want to load. \"),_c('br'),_c('br'),_c('SaveInfoEntry',{attrs:{\"save-data\":_vm.conflict.local,\"other-data\":_vm.conflict.cloud,\"save-id\":_vm.conflict.saveId,\"show-name\":_vm.hasDifferentName,\"save-type\":\"Local Save\"}}),_c('SaveInfoEntry',{attrs:{\"save-data\":_vm.conflict.cloud,\"other-data\":_vm.conflict.local,\"save-id\":_vm.conflict.saveId,\"show-name\":_vm.hasDifferentName,\"save-type\":\"Cloud Save\"}}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.suggestionText)}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-modal-options__save-record\"},[_c('h3',[_vm._v(_vm._s(_vm.saveType)+\" \"),(_vm.saveId)?_c('span',[_vm._v(\"(Slot #\"+_vm._s(_vm.saveId + 1)+\"):\")]):_vm._e()]),(_vm.showName)?_c('span',[(_vm.name)?_c('span',[_vm._v(\" Save Name: \"+_vm._s(_vm.name)+\" \")]):_c('span',[_vm._v(\" Unnamed Save \")]),_c('br')]):_vm._e(),_vm._v(\" \"+_vm._s(_vm.timePlayed)+\" \"),_c('br'),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.antimatter)}}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.prestigeCount)}}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.prestigeResource)}}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.extraProgressIndicator)}}),_c('br'),_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveInfoEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveInfoEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SaveInfoEntry.vue?vue&type=template&id=0ede7791&\"\nimport script from \"./SaveInfoEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./SaveInfoEntry.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CloudLoadConflictModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CloudLoadConflictModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CloudLoadConflictModal.vue?vue&type=template&id=58859b9a&\"\nimport script from \"./CloudLoadConflictModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CloudLoadConflictModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{staticClass:\"c-modal-options__large\",attrs:{\"cancel-class\":'c-modal-message__okay-btn',\"confirm-class\":'c-modal-message__okay-btn c-modal__confirm-btn',\"cancel-fn\":_vm.overwrite},on:{\"confirm\":function($event){return _vm.doNotSave()}},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Save Game to Cloud \")]},proxy:true},{key:\"cancel-text\",fn:function(){return [_vm._v(\" Overwrite Cloud Save \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Do not overwrite \")]},proxy:true}])},[(_vm.wrongHash)?_c('span',[_vm._v(\" Your Cloud Save has been \"),_c('b',[_vm._v(\"changed by a different device\")]),_vm._v(\" since you last saved to the Cloud this session. \")]):(_vm.hasDifferentName)?_c('span',[_vm._v(\" Your Local and Cloud Saves have \"),_c('b',[_vm._v(\"different names\")]),_vm._v(\". \")]):(_vm.older)?_c('span',[_vm._v(\" Saving to the Cloud would \"),_c('b',[_vm._v(\"overwrite an older save\")]),_vm._v(\". \")]):(_vm.farther)?_c('span',[_vm._v(\" Saving to the Cloud would \"),_c('b',[_vm._v(\"overwrite a save with more progress\")]),_vm._v(\". \")]):_c('span',[_vm._v(\" Your Local Save and Cloud Save \"),_c('b',[_vm._v(\"appear to have similar amounts of progress\")]),_vm._v(\". \")]),_c('br'),_c('SaveInfoEntry',{attrs:{\"save-data\":_vm.conflict.local,\"other-data\":_vm.conflict.cloud,\"save-id\":_vm.conflict.saveId,\"show-name\":_vm.hasDifferentName,\"save-type\":\"Local Save\"}}),_c('SaveInfoEntry',{attrs:{\"save-data\":_vm.conflict.cloud,\"other-data\":_vm.conflict.local,\"save-id\":_vm.conflict.saveId,\"show-name\":_vm.hasDifferentName,\"save-type\":\"Cloud Save\"}}),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.suggestionText)}}),_c('br'),_c('span',[_vm._v(\" Not overwriting will turn off Cloud saving and you will need to manually turn it back on again if you want to use it. \"),_c('span',{attrs:{\"ach-tooltip\":_vm.noOverwriteInfo}},[_c('i',{staticClass:\"fas fa-question-circle\"})])]),_c('span',[_vm._v(\" Overwriting will force a save to the Cloud in this particular instance; in most cases this should prevent this modal from reappearing afterwards. \"),_c('span',{attrs:{\"ach-tooltip\":_vm.overwriteInfo}},[_c('i',{staticClass:\"fas fa-question-circle\"})])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CloudSaveConflictModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CloudSaveConflictModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CloudSaveConflictModal.vue?vue&type=template&id=14a6b2c0&\"\nimport script from \"./CloudSaveConflictModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CloudSaveConflictModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"challenges\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.entranceLabel)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Begin \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.condition)+\" \")]),(!_vm.challengeIsCompleted)?_c('div',{staticClass:\"c-modal-message__text\"},[_c('br'),_vm._v(\" \"+_vm._s(_vm.reward)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengeStartModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityChallengeStartModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityChallengeStartModal.vue?vue&type=template&id=2d8d6fcd&\"\nimport script from \"./EternityChallengeStartModal.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityChallengeStartModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"challenges\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.entranceLabel)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Begin \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.condition)+\" \")]),(!_vm.challengeIsCompleted)?_c('div',{staticClass:\"c-modal-message__text\"},[_c('br'),_vm._v(\" \"+_vm._s(_vm.reward)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityChallengeStartModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfinityChallengeStartModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfinityChallengeStartModal.vue?vue&type=template&id=6b434bc9&\"\nimport script from \"./InfinityChallengeStartModal.vue?vue&type=script&lang=js&\"\nexport * from \"./InfinityChallengeStartModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal-message l-modal-content--centered\"},[(_vm.modal.closeButton)?_c('ModalCloseButton',{class:_vm.isThemeS12 ? 'c-modal__close-btn' : 'c-modal__close-btn--tiny',on:{\"click\":_vm.emitClose}}):(_vm.isThemeS12)?_c('ModalCloseButton',{staticClass:\"c-modal__close-btn c-modal__close-btn--disabled\"}):_vm._e(),_c('div',{staticClass:\"c-modal-message__text\",domProps:{\"innerHTML\":_vm._s(_vm.message)}}),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn\",on:{\"click\":_vm.handleClick}},[_vm._v(\" Okay \")]),(_vm.isThemeS12)?_c('div',{staticClass:\"c-modal__title\"},[_vm._v(\" Message \")]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MessageModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./MessageModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MessageModal.vue?vue&type=template&id=4f807ade&\"\nimport script from \"./MessageModal.vue?vue&type=script&lang=js&\"\nexport * from \"./MessageModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"challenges\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.entranceLabel)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Begin \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.condition)+\" \")]),(!_vm.challengeIsCompleted)?_c('div',{staticClass:\"c-modal-message__text\"},[_c('br'),_vm._v(\" \"+_vm._s(_vm.reward)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalChallengeStartModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NormalChallengeStartModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NormalChallengeStartModal.vue?vue&type=template&id=4cf73af0&\"\nimport script from \"./NormalChallengeStartModal.vue?vue&type=script&lang=js&\"\nexport * from \"./NormalChallengeStartModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"antimatterGalaxy\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AntimatterGalaxyModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AntimatterGalaxyModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AntimatterGalaxyModal.vue?vue&type=template&id=c3b2c3b6&\"\nimport script from \"./AntimatterGalaxyModal.vue?vue&type=script&lang=js&\"\nexport * from \"./AntimatterGalaxyModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":_vm.isDoomed ? 'armageddon' : undefined},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[(!_vm.isDoomed)?_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Dooming your Reality will reset everything except Challenge records, Celestial progress and anything under the General and Reality header on the Statistics tab. You will not gain any rewards from your progress in your current Reality. Dooming your Reality will also purge most of your unprotected Glyphs and disable certain game mechanics. \"),_c('br'),_c('br'),_vm._v(\" Are you sure you want to do this? \")]):_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ArmageddonModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ArmageddonModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ArmageddonModal.vue?vue&type=template&id=435c0fa2&\"\nimport script from \"./ArmageddonModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ArmageddonModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ResetModal',{attrs:{\"header\":\"You are about to Infinity\",\"message\":_vm.message,\"gained-resources\":_vm.ipGainInfo,\"starting-resources\":_vm.startingResources,\"confirm-fn\":_vm.handleYesClick,\"alternate-condition\":_vm.isFirstInfinity,\"alternate-text\":_vm.message,\"confirm-option\":_vm.isFirstInfinity ? undefined : 'bigCrunch'}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":_vm.confirmOption},on:{\"confirm\":_vm.confirmFn},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.header)+\" \")]},proxy:true}])},[(!_vm.alternateCondition)?_c('div',[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \"),_c('br')]),_c('br'),_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.gainedResources)+\" \")]),_c('br'),(_vm.startingResources)?_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.startingResources)+\" \")]):_vm._e()]):_c('div',[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.alternateText)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResetModal.vue?vue&type=template&id=6bddd374&\"\nimport script from \"./ResetModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ResetModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BigCrunchModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BigCrunchModal.vue?vue&type=template&id=26523be9&\"\nimport script from \"./BigCrunchModal.vue?vue&type=script&lang=js&\"\nexport * from \"./BigCrunchModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"dimensionBoost\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionBoostModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DimensionBoostModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DimensionBoostModal.vue?vue&type=template&id=7ee1ffcf&\"\nimport script from \"./DimensionBoostModal.vue?vue&type=script&lang=js&\"\nexport * from \"./DimensionBoostModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Begin \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \"),_c('br'),_c('br'),_c('div',{staticClass:\"c-modal-celestial__run-effects\"},_vm._l((_vm.effects),function(effect,i){return _c('div',{key:i,staticClass:\"c-modal-celestial__run-effects__line\",class:{ 'o-pelle-disabled': _vm.number === 4 && i===0 && _vm.dimboostUncapped}},[(effect.trim())?_c('b',[_vm._v(\"•\")]):_vm._e(),_c('b',[_vm._v(\" \")]),_vm._v(\" \"+_vm._s(effect)+\" \")])}),0),(_vm.description)?_c('div',{staticClass:\"reality-description\"},[_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.description)+\" \")]):_vm._e(),_c('br'),_c('br'),_c('div',[_vm._v(\" \"+_vm._s(_vm.extraLine)+\" \")]),(_vm.number === 4)?_c('span',_vm._l((7),function(id){return _c('EnterCelestialsRaPet',{key:id,attrs:{\"pet-id\":id - 1}})}),1):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('span',{style:(_vm.color)},[_vm._v(\" \"+_vm._s(_vm.name)+\" \"+_vm._s(_vm.gainText)+\". \"),_c('br')]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnterCelestialsRaPet.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnterCelestialsRaPet.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnterCelestialsRaPet.vue?vue&type=template&id=3ef0ff9e&\"\nimport script from \"./EnterCelestialsRaPet.vue?vue&type=script&lang=js&\"\nexport * from \"./EnterCelestialsRaPet.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnterCelestialsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnterCelestialsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnterCelestialsModal.vue?vue&type=template&id=5652f348&scoped=true&\"\nimport script from \"./EnterCelestialsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./EnterCelestialsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EnterCelestialsModal.vue?vue&type=style&index=0&id=5652f348&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5652f348\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"dilation\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.entranceLabel)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Enter \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.EPSinceLabel)+\" \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.message)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnterDilationModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnterDilationModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnterDilationModal.vue?vue&type=template&id=278c81b4&\"\nimport script from \"./EnterDilationModal.vue?vue&type=script&lang=js&\"\nexport * from \"./EnterDilationModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ResetModal',{attrs:{\"header\":_vm.exitingEC ? 'Complete Eternity Challenge' : 'You are about to Eternity',\"message\":_vm.message,\"gained-resources\":_vm.gainedEPOnEternity,\"starting-resources\":_vm.startWithIP,\"confirm-fn\":_vm.handleYesClick,\"alternate-condition\":_vm.exitingEC,\"alternate-text\":_vm.exitingEC ? _vm.eternityChallenge : undefined,\"confirm-option\":\"eternity\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EternityModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EternityModal.vue?vue&type=template&id=22660dbc&\"\nimport script from \"./EternityModal.vue?vue&type=script&lang=js&\"\nexport * from \"./EternityModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"exitChallenge\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to \"+_vm._s(_vm.isRestarting ? \"restart\" : \"exit\")+\" \"+_vm._s(_vm.challengeName)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.isRestarting ? \"Restart\" : \"Exit\")+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[(_vm.isRestarting)?_c('span',[_vm._v(\" You will immediately re-enter \"+_vm._s(_vm.challengeName)+\" again after confirming this modal. \")]):_c('span',[_vm._v(\" This will place you back into a regular \"+_vm._s(_vm.normalName)+\" without any restrictions. \")]),(_vm.hasHigherLayers)?_c('span',[_vm._v(\" Other effects coming from higher-layer restrictions will still continue to apply. \")]):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExitChallengeModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExitChallengeModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ExitChallengeModal.vue?vue&type=template&id=7a7f466d&\"\nimport script from \"./ExitChallengeModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ExitChallengeModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"dilation\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [(_vm.isDoomed)?_c('span',[_vm._v(\" You cannot exit Dilation while Doomed \")]):_c('span',[_vm._v(\" You are about to exit Dilation \")])]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Exit \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[(_vm.isDoomed)?_c('span',[_vm._v(\" Dilation is permanent. You will \"+_vm._s(_vm.gainText)+\" and reset your current eternity. You will not gain any Eternity Points. \")]):_c('span',[_vm._v(\" If you exit Dilation now, you will \"+_vm._s(_vm.gainText)+\". \")]),(_vm.isInEC)?_c('div',[_vm._v(\" You will also exit your current Eternity Challenge as well. \")]):_vm._e(),_c('br'),_vm._v(\" Are you sure you want to proceed? \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExitDilationModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ExitDilationModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ExitDilationModal.vue?vue&type=template&id=50a48840&\"\nimport script from \"./ExitDilationModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ExitDilationModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":!_vm.willHardReset,\"show-confirm\":_vm.willHardReset,\"confirm-class\":\"o-primary-btn--width-medium c-modal__confirm-btn c-modal-hard-reset-btn\"},on:{\"confirm\":_vm.hardReset},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" HARD RESET \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" HARD RESET \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Please confirm your desire to hard reset this save slot. \"),_c('span',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\"Deleting your save will not unlock anything secret.\")]),_vm._v(\" Type in \\\"I promise not to simp for Lai'tela\\\" to confirm. \"),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" THIS WILL WIPE YOUR SAVE. \"),(_vm.hasExtraNG)?_c('span',[_c('br'),_vm._v(\" This will also remove any Glyph cosmetics you have unlocked from completing the game! \")]):_vm._e(),(_vm.hasSpeedrun)?_c('span',[_c('br'),_vm._v(\" You will lose the ability to do a Speedrun. To restart your run, use the \\\"Start Speedrun\\\" button instead. \")]):_vm._e()])]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input c-modal-hard-reset__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.input)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.input=$event.target.value}}}),_c('div',{staticClass:\"c-modal-hard-reset-info\"},[(_vm.willHardReset)?_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" Phrase confirmed - continuing will irreversibly delete your save! \")]):_c('div',[_vm._v(\" Type in the correct phrase to hard reset. \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HardResetModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HardResetModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HardResetModal.vue?vue&type=template&id=e1f1820a&\"\nimport script from \"./HardResetModal.vue?vue&type=script&lang=js&\"\nexport * from \"./HardResetModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":_vm.confirmationToDisable,\"show-confirm\":_vm.canConfirm},on:{\"confirm\":function($event){return _vm.confirmModal(false)}},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to Reality \")]},proxy:true},(_vm.canSacrifice && _vm.canConfirm)?{key:\"extra-buttons\",fn:function(){return [_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn\",on:{\"click\":function($event){return _vm.confirmModal(true)}}},[_vm._v(\" Sacrifice \")])]},proxy:true}:null],null,true)},[(_vm.firstReality)?_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.firstRealityText)+\" \")]):_vm._e(),_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.gained)+\" \")]),(!_vm.firstReality)?_c('div',{staticClass:\"l-glyph-selection__row\"},_vm._l((_vm.glyphs),function(glyph,index){return _c('GlyphComponent',{key:index,class:_vm.glyphClass(index),attrs:{\"glyph\":glyph,\"is-in-modal\":true,\"ignore-modified-level\":true,\"show-sacrifice\":_vm.canSacrifice},nativeOn:{\"click\":function($event){return _vm.select(index)}}})}),1):_vm._e(),(!_vm.firstReality)?_c('div',[_vm._v(\" \"+_vm._s(_vm.levelStats)+\" \"),_c('br'),_c('b',{staticClass:\"o-warning\"},[_vm._v(\" \"+_vm._s(_vm.warnText)+\" \")])]):_vm._e(),(_vm.simRealities > 1)?_c('div',[_c('br'),_vm._v(\" After choosing this Glyph the game will simulate the rest of your Realities, \"),_c('br'),_vm._v(\" automatically choosing another \"+_vm._s(_vm.quantifyInt(\"Glyph\", _vm.simRealities - 1))+\" based on your Glyph filter settings. \")]):_vm._e(),(_vm.willAutoPurge)?_c('div',[_c('br'),_vm._v(\" Auto-purge is currently enabled; your selected Glyph \"),_c('br'),_vm._v(\" may not appear in your inventory after it triggers. \")]):_vm._e(),(!_vm.hasSpace)?_c('div',{staticClass:\"o-warning\"},[(_vm.simRealities > 1)?_c('span',[_vm._v(\" You will be simulating more Realities than you have open inventory space for; this may result in some Glyphs being Sacrificed. \")]):_c('span',[_vm._v(\" You do not have any free inventory space - your selected Glyph will be automatically \"+_vm._s(_vm.canSacrifice ? \"Sacrificed\" : \"deleted\")+\"! \")])]):_vm._e(),(_vm.confirmationToDisable)?_c('div',[_c('br'),_vm._v(\" You can force this modal to appear (even if disabled) by Shift-clicking the Reality button. \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n \r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityModal.vue?vue&type=template&id=4e13ca48&scoped=true&\"\nimport script from \"./RealityModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RealityModal.vue?vue&type=style&index=0&id=4e13ca48&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4e13ca48\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"replicantiGalaxy\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiGalaxyModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplicantiGalaxyModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReplicantiGalaxyModal.vue?vue&type=template&id=3896b791&\"\nimport script from \"./ReplicantiGalaxyModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ReplicantiGalaxyModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"resetReality\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to reset your \"+_vm._s(_vm.resetTerm)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Reset \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" This will reset you to the start of your \"+_vm._s(_vm.resetTerm)+\", giving you no rewards from your progress in your current \"+_vm._s(_vm.resetTerm)+\". \"),_c('br'),_c('br'),_vm._v(\" Are you sure you want to do this? \"),(_vm.canReality)?_c('div',{staticClass:\"c-has-rewards\"},[_c('br'),_vm._v(\" You can currently complete a Reality for all its normal rewards, which you will not receive if you Reset here. To get rewards, use the \\\"Make a new Reality\\\" button. \")]):_vm._e(),_c('br')])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetRealityModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetRealityModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResetRealityModal.vue?vue&type=template&id=5e466ec0&scoped=true&\"\nimport script from \"./ResetRealityModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ResetRealityModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ResetRealityModal.vue?vue&type=style&index=0&id=5e466ec0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5e466ec0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ResetModal',{attrs:{\"header\":\"You are about to Mend the Multiverse\",\"message\":_vm.message,\"gained-resources\":_vm.gainedResources,\"confirm-fn\":_vm.handleYesClick}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetMendingModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ResetMendingModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResetMendingModal.vue?vue&type=template&id=5e22f064&\"\nimport script from \"./ResetMendingModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ResetMendingModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"c-modal-options__large\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Animation Options \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-options__button-container\"},[(_vm.infinityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Big Crunch:\"},model:{value:(_vm.bigCrunch),callback:function ($$v) {_vm.bigCrunch=$$v},expression:\"bigCrunch\"}}):_vm._e(),(_vm.eternityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Eternity:\"},model:{value:(_vm.eternity),callback:function ($$v) {_vm.eternity=$$v},expression:\"eternity\"}}):_vm._e(),(_vm.dilationUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Dilation:\"},model:{value:(_vm.dilation),callback:function ($$v) {_vm.dilation=$$v},expression:\"dilation\"}}):_vm._e(),(_vm.tachyonsUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Tachyon particles:\"},model:{value:(_vm.tachyonParticles),callback:function ($$v) {_vm.tachyonParticles=$$v},expression:\"tachyonParticles\"}}):_vm._e(),(_vm.realityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Reality:\"},model:{value:(_vm.reality),callback:function ($$v) {_vm.reality=$$v},expression:\"reality\"}}):_vm._e(),(!_vm.isS11Active)?_c('div',[(_vm.animatedThemeUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"onclick\":\"Themes.find(Theme.currentName()).set();\",\"text\":\"Background:\"},model:{value:(_vm.background),callback:function ($$v) {_vm.background=$$v},expression:\"background\"}}):_vm._e()],1):_c('div',[(_vm.animatedThemeUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"onclick\":\"Themes.find(Theme.currentName()).set();\",\"text\":\"Blobsnow:\"},model:{value:(_vm.background),callback:function ($$v) {_vm.background=$$v},expression:\"background\"}}):_vm._e()],1),(_vm.isS11Active)?_c('div',{staticClass:\"c-blobflake-slider o-primary-btn o-primary-btn--modal-option o-primary-btn--slider\"},[_c('b',[_vm._v(_vm._s(_vm.quantifyInt(\"Blobflake\", parseInt(_vm.blobSnowflakes))))]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.blobSnowflakes},on:{\"input\":function($event){return _vm.adjustSliderValue($event)}}},'SliderComponent',_vm.sliderProps,false))],1):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('PrimaryToggleButton',{staticClass:\"o-primary-btn--modal-option\",style:(_vm.styleObject),attrs:{\"value\":_vm.value,\"label\":_vm.text},on:{\"input\":_vm.emitInput}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalOptionsToggleButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalOptionsToggleButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalOptionsToggleButton.vue?vue&type=template&id=495e63a8&\"\nimport script from \"./ModalOptionsToggleButton.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalOptionsToggleButton.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{staticClass:\"c-modal-options l-modal-options\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._t(\"header\")]},proxy:true}],null,true)},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalWrapperOptions.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModalWrapperOptions.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalWrapperOptions.vue?vue&type=template&id=aa4b6f06&\"\nimport script from \"./ModalWrapperOptions.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalWrapperOptions.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AnimationOptionsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AnimationOptionsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AnimationOptionsModal.vue?vue&type=template&id=13fcb5d4&scoped=true&\"\nimport script from \"./AnimationOptionsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./AnimationOptionsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AnimationOptionsModal.vue?vue&type=style&index=0&id=13fcb5d4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13fcb5d4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"l-wrapper\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Away Progress Options \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-options__button-container\"},_vm._l((_vm.all),function(name){return _c('AwayProgressOptionsEntry',{key:name,attrs:{\"name\":name}})}),1),_vm._v(\" Note: Selected resources will only show if they've increased. \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('ModalOptionsToggleButton',{attrs:{\"text\":_vm.text},model:{value:(_vm.setting),callback:function ($$v) {_vm.setting=$$v},expression:\"setting\"}}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressOptionsEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressOptionsEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AwayProgressOptionsEntry.vue?vue&type=template&id=0e445e71&\"\nimport script from \"./AwayProgressOptionsEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./AwayProgressOptionsEntry.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressOptionsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressOptionsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AwayProgressOptionsModal.vue?vue&type=template&id=5c020f42&scoped=true&\"\nimport script from \"./AwayProgressOptionsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./AwayProgressOptionsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AwayProgressOptionsModal.vue?vue&type=style&index=0&id=5c020f42&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5c020f42\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Automatic Backup Saves \")]},proxy:true}])},[_c('div',{staticClass:\"c-info c-modal--short\"},[_vm._v(\" The game makes automatic backups based on time you have spent online or offline. Timers for online backups only run when the game is open, and offline backups only save to the slot with the longest applicable timer. Additionally, your current save is saved into the last slot any time a backup from here is loaded. \"),_c('div',{staticClass:\"c-modal__confirmation-toggle\",on:{\"click\":_vm.toggleOffline}},[_c('div',{class:_vm.offlineOptionClass()},[(_vm.ignoreOffline)?_c('span',{staticClass:\"fas fa-check\"}):_vm._e()]),_c('span',{staticClass:\"c-modal__confirmation-toggle__text\"},[_vm._v(\" Load with offline progress disabled \")])]),_c('div',{staticClass:\"c-entry-container\"},_vm._l((_vm.backupSlots),function(slot){return _c('BackupEntry',{key:_vm.nextSave + slot.id,staticClass:\"l-backup-entry\",attrs:{\"slot-data\":slot}})}),1),_vm._v(\" These backups are still stored in the same place as your game save and can still be lost if you do anything external to the game which would delete your save itself, such as \"+_vm._s(_vm.deleteText)+\". You can import/export all backups at once as files, using these buttons: \"),_c('div',{staticClass:\"c-backup-file-ops\"},[_c('PrimaryButton',{staticClass:\"o-btn-file-ops\",attrs:{\"onclick\":\"GameStorage.exportBackupsAsFile()\"}},[_vm._v(\" Export as file \")]),_c('PrimaryButton',{staticClass:\"o-btn-file-ops\"},[_c('input',{staticClass:\"c-file-import\",attrs:{\"type\":\"file\",\"accept\":\".txt\"},on:{\"change\":_vm.importAsFile}}),_c('label',{attrs:{\"for\":\"file\"}},[_vm._v(\"Import from file\")])])],1),_vm._v(\" Each of your three save slots has its own separate set of backups. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-bordered-entry\"},[_c('h3',[_vm._v(\"Slot #\"+_vm._s(_vm.slotData.id)+\":\")]),_c('span',[_vm._v(_vm._s(_vm.progressStr))]),_c('span',[_vm._v(\" \"+_vm._s(_vm.slotType)+\" \")]),_c('span',{staticClass:\"c-fixed-height\"},[_vm._v(_vm._s(_vm.lastSaved))]),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium\",class:{ 'o-primary-btn--disabled' : !_vm.save },on:{\"click\":function($event){return _vm.load()}}},[_vm._v(\" Load \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BackupEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BackupEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BackupEntry.vue?vue&type=template&id=4270332c&scoped=true&\"\nimport script from \"./BackupEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./BackupEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BackupEntry.vue?vue&type=style&index=0&id=4270332c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4270332c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BackupWindowModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BackupWindowModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BackupWindowModal.vue?vue&type=template&id=2cffffa6&scoped=true&\"\nimport script from \"./BackupWindowModal.vue?vue&type=script&lang=js&\"\nexport * from \"./BackupWindowModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BackupWindowModal.vue?vue&type=style&index=0&id=2cffffa6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2cffffa6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"c-modal-options__large\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Confirmation Options \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-options__button-container\"},[(_vm.noConfirmations)?_c('span',[_vm._v(\" You do not have anything that requires confirmation, but if you did it would appear here. \")]):_vm._e(),_vm._l((_vm.count),function(entryNumber){return _c('ConfirmationOptionsEntry',{key:entryNumber,attrs:{\"index\":entryNumber - 1}})})],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isUnlocked)?_c('ModalOptionsToggleButton',{style:(_vm.styleObject),attrs:{\"text\":_vm.name},model:{value:(_vm.option),callback:function ($$v) {_vm.option=$$v},expression:\"option\"}}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConfirmationOptionsEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConfirmationOptionsEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConfirmationOptionsEntry.vue?vue&type=template&id=e4f2cfe4&\"\nimport script from \"./ConfirmationOptionsEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./ConfirmationOptionsEntry.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConfirmationOptionsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ConfirmationOptionsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConfirmationOptionsModal.vue?vue&type=template&id=ce706f64&\"\nimport script from \"./ConfirmationOptionsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ConfirmationOptionsModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"cancel-fn\":_vm.cancelSet},on:{\"confirm\":_vm.chooseSet},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Choose a Glyph Cosmetic Set \")]},proxy:true}])},[_c('div',{staticClass:\"c-center\"},[_c('ExpandingControlBox',{staticClass:\"o-primary-btn c-dropdown-btn\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"c-dropdown-header\"},[_vm._v(\" ▼ Available Sets ▼ \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.setName)+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('CosmeticSetDropdown')]},proxy:true}])}),(_vm.currentSet)?_c('div',[_vm._v(\" The \\\"\"+_vm._s(_vm.currentSet.name)+\"\\\" Set contains the following \"+_vm._s(_vm.setContents)+\": \"),_c('br'),_vm._l((_vm.symbols),function(symbol){return _c('span',{key:symbol,staticClass:\"o-single-symbol\"},[_vm._v(\" \"+_vm._s(symbol)+\" \")])}),_c('br'),_vm._l((_vm.colors),function(color){return _c('span',{key:color,staticClass:\"o-single-glyph\"},[_c('GlyphComponent',_vm._b({attrs:{\"glyph\":_vm.fakeGlyph(color)}},'GlyphComponent',_vm.glyphIconProps,false))],1)})],2):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-select-theme\"},[_c('div',{staticClass:\"l-select-theme__inner\"},_vm._l((_vm.lockedSets),function(set){return _c('div',{key:set.id,staticClass:\"o-primary-btn l-select-theme__item c-select-theme__item\",on:{\"click\":function($event){return _vm.select(set)}}},[_vm._v(\" \"+_vm._s(set.name)+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CosmeticSetDropdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CosmeticSetDropdown.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CosmeticSetDropdown.vue?vue&type=template&id=73710f17&\"\nimport script from \"./CosmeticSetDropdown.vue?vue&type=script&lang=js&\"\nexport * from \"./CosmeticSetDropdown.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CosmeticSetChoiceModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CosmeticSetChoiceModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CosmeticSetChoiceModal.vue?vue&type=template&id=eb4324ba&scoped=true&\"\nimport script from \"./CosmeticSetChoiceModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CosmeticSetChoiceModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CosmeticSetChoiceModal.vue?vue&type=style&index=0&id=eb4324ba&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"eb4324ba\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"c-modal-options__large\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Glyph Display Options \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-options__button-container\"},[_c('ModalOptionsToggleButton',{attrs:{\"text\":\"New Glyph identifier:\"},model:{value:(_vm.newGlyphs),callback:function ($$v) {_vm.newGlyphs=$$v},expression:\"newGlyphs\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Unequipped Glyph identifier:\"},model:{value:(_vm.showUnequippedGlyphIcon),callback:function ($$v) {_vm.showUnequippedGlyphIcon=$$v},expression:\"showUnequippedGlyphIcon\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Always show Glyph effect dots:\"},model:{value:(_vm.glyphEffectDots),callback:function ($$v) {_vm.glyphEffectDots=$$v},expression:\"glyphEffectDots\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Fancy Glyph borders:\"},model:{value:(_vm.glyphBorders),callback:function ($$v) {_vm.glyphBorders=$$v},expression:\"glyphBorders\"}}),_c('button',{staticClass:\"o-primary-btn o-primary-btn--modal-option\",on:{\"click\":function($event){return _vm.cycleBG()}}},[_vm._v(\" Glyph BG color: \"+_vm._s(_vm.glyphBGStr)+\" \")]),_c('ModalOptionsToggleButton',{style:(_vm.noEffectStyle()),attrs:{\"text\":\"Always show Glyph Info:\"},model:{value:(_vm.showGlyphInfoByDefault),callback:function ($$v) {_vm.showGlyphInfoByDefault=$$v},expression:\"showGlyphInfoByDefault\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"High-contrast rarity colors:\"},model:{value:(_vm.highContrastRarity),callback:function ($$v) {_vm.highContrastRarity=$$v},expression:\"highContrastRarity\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Swap border and symbol colors:\"},model:{value:(_vm.swapGlyphColors),callback:function ($$v) {_vm.swapGlyphColors=$$v},expression:\"swapGlyphColors\"}}),_c('ExpandingControlBox',{staticClass:\"o-primary-btn c-dropdown-btn\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('div',{staticClass:\"c-dropdown-header\"},[_vm._v(\" ▼ Additional Glyph Info: ▼ \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.infoLabel)+\" \")])]},proxy:true},{key:\"dropdown\",fn:function(){return [_c('SelectGlyphInfoDropdown')]},proxy:true}])})],1),_c('GlyphCustomization')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-glyph-customization-group\"},[_c('b',[_vm._v(\"Custom Glyph Appearance\")]),_c('PrimaryToggleButton',{staticClass:\"o-primary-btn--subtab-option\",attrs:{\"on\":\"Enabled\",\"off\":\"Disabled\"},model:{value:(_vm.enabled),callback:function ($$v) {_vm.enabled=$$v},expression:\"enabled\"}}),_c('br'),(_vm.hasCustomSets)?_c('div',[_vm._v(\" Reset Appearances to Default: \"),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",class:{ 'o-primary-btn--disabled' : !_vm.enabled },on:{\"click\":_vm.resetAll}},[_vm._v(\" All Types \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",class:{ 'o-primary-btn--disabled' : !_vm.enabled },on:{\"click\":_vm.resetSingle}},[_vm._v(\" This Type \")]),_c('br'),_c('i',[_vm._v(\"This will not reset any individually-modified Glyphs.\")]),_c('br'),_c('br'),_vm._v(\" Glyph Type: \"),_c('br'),_c('div',{staticClass:\"c-type-selection\"},_vm._l((_vm.cosmeticTypes),function(type,index){return _c('div',{key:type,class:_vm.typeClass(index),on:{\"click\":function($event){_vm.selectedIndex = index}}},[_c('GlyphComponent',_vm._b({directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(type.capitalize()),expression:\"type.capitalize()\"}],attrs:{\"glyph\":_vm.fakeGlyph(type)}},'GlyphComponent',_vm.glyphIconProps,false))],1)}),0),_c('GlyphCustomizationSingleType',{key:_vm.selectedIndex + _vm.enabled + _vm.defaultKeySwap,attrs:{\"type\":_vm.cosmeticTypes[_vm.selectedIndex]}}),_vm._v(\" Note: Some options may cause very poor color contrast or readability on certain themes with certain Glyph types. \")],1):_c('div',[_vm._v(\" You currently have no available options for changing the default appearance of your Glyphs. To unlock some, visit the Shop Tab or beat the game. \"),_c('br'),_c('br'),(_vm.hasSpecialTypes)?_c('span',[_vm._v(\" Enabling this setting will allow you to change individual Glyphs to special cosmetic types you have unlocked. \")]):_c('span',[_vm._v(\" Enabling or disabling this option will currently do nothing. \")])]),_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":_vm.resetIndividual}},[_vm._v(\" Reset all individual Glyph cosmetics \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-glyph-customization-entry\"},[(_vm.glyphId === -1)?_c('span',{staticClass:\"c-name\"},[_vm._v(\" Appearance Options for \"+_vm._s(_vm.name)+\" Glyphs \")]):_vm._e(),(_vm.type === 'companion')?_c('div',[_vm._v(\" Companion Glyphs cannot have their symbol modified. \")]):_c('GlyphCustomizationSlidingWindow',{attrs:{\"type\":_vm.type,\"is-symbol\":true,\"options\":_vm.symbols,\"glyph-id\":_vm.glyphId}}),_c('GlyphCustomizationSlidingWindow',{attrs:{\"type\":_vm.type,\"is-symbol\":false,\"options\":_vm.colors,\"glyph-id\":_vm.glyphId}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.options.length > 0)?_c('div',{class:_vm.containerClassObject()},[_c('div',{staticClass:\"o-default-option\"},[_c('div',{key:'default' + _vm.darkKeySwap,class:_vm.defaultOptionClassObject(),style:(_vm.boxStyle(_vm.defaultOption)),on:{\"click\":function($event){return _vm.select(undefined)}}},[_vm._v(\" \"+_vm._s(_vm.optionChar(_vm.defaultOption))+\" \")])]),_c('div',{staticClass:\"c-extra-options\"},[_c('div',{class:_vm.leftClass(),on:{\"click\":function($event){return _vm.slideWindow(-5)}}},[_vm._v(\" ⇐ \")]),_c('div',{class:_vm.rightClass(),on:{\"click\":function($event){return _vm.slideWindow(5)}}},[_vm._v(\" ⇒ \")]),_c('div',{staticClass:\"c-sliding-window\",style:(_vm.windowStyle())},_vm._l((_vm.options),function(set){return _c('div',{key:set[0] + set[1]},[_c('div',{staticClass:\"c-single-set\"},_vm._l((set),function(singleOption){return _c('div',{key:singleOption,class:_vm.optionClassObject(singleOption),style:(_vm.boxStyle(singleOption)),on:{\"click\":function($event){return _vm.select(singleOption)}}},[_vm._v(\" \"+_vm._s(_vm.optionChar(singleOption))+\" \")])}),0)])}),0)])]):_c('div',{staticClass:\"c-no-options\"},[_vm._v(\" You have no custom options for changing Glyph \"+_vm._s(_vm.attrString)+\"s. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCustomizationSlidingWindow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCustomizationSlidingWindow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphCustomizationSlidingWindow.vue?vue&type=template&id=1aab07c3&scoped=true&\"\nimport script from \"./GlyphCustomizationSlidingWindow.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphCustomizationSlidingWindow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphCustomizationSlidingWindow.vue?vue&type=style&index=0&id=1aab07c3&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1aab07c3\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCustomizationSingleType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCustomizationSingleType.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphCustomizationSingleType.vue?vue&type=template&id=376fede0&scoped=true&\"\nimport script from \"./GlyphCustomizationSingleType.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphCustomizationSingleType.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphCustomizationSingleType.vue?vue&type=style&index=0&id=376fede0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"376fede0\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCustomization.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphCustomization.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphCustomization.vue?vue&type=template&id=800cf4e0&scoped=true&\"\nimport script from \"./GlyphCustomization.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphCustomization.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphCustomization.vue?vue&type=style&index=0&id=800cf4e0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"800cf4e0\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphDisplayOptionsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphDisplayOptionsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphDisplayOptionsModal.vue?vue&type=template&id=28f556e6&scoped=true&\"\nimport script from \"./GlyphDisplayOptionsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphDisplayOptionsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphDisplayOptionsModal.vue?vue&type=style&index=0&id=28f556e6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"28f556e6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"l-wrapper\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Modify Visible Tabs \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal--short\"},[_vm._v(\" Click a button to toggle showing a tab on/off. \"),_c('br'),_vm._v(\" Some tabs cannot be hidden, and you cannot hide your current tab. \"),_c('br'),_vm._v(\" Unhiding a tab in which all subtabs are hidden will also unhide all subtabs, and hiding all subtabs will also hide the tab. \"),_c('br'),(_vm.isAlmostEnd)?_c('div',[_vm._v(\" You cannot hide your tabs after unlocking the Galaxy Generator. \")]):_vm._e(),(_vm.isEnslaved)?_c('div',[_c('br'),_c('i',[_vm._v(\"You must... see everywhere...\")]),_c('br'),_vm._v(\" (You cannot hide your tabs within this Reality) \")]):_vm._e(),_vm._l((_vm.tabs),function(tab,index){return _c('HiddenTabGroup',{key:index,staticClass:\"l-hide-modal-tab-container\",attrs:{\"tab\":tab,\"change-enabled\":!_vm.isEnslaved && !_vm.isAlmostEnd}})})],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('div',{class:_vm.rowClass,on:{\"click\":function($event){if($event.target !== $event.currentTarget){ return null; }return _vm.toggleVisibility.apply(null, arguments)}}},[_vm._l((_vm.unlockedSubtabs),function(subtab,i){return _c('HiddenSubtabsButton',{key:i,attrs:{\"subtab\":subtab,\"tab\":_vm.tab,\"change-enabled\":_vm.changeEnabled}})}),_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.rowVisibleIndicatorTooltip),expression:\"rowVisibleIndicatorTooltip\"}],class:_vm.rowVisibleIndicatorClass,on:{\"click\":_vm.toggleVisibility}})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.hidable ? _vm.isCurrentSubtab ? 'You cannot hide the tab you are on' : '' : 'Options tabs cannot be hidden'),expression:\"hidable ? isCurrentSubtab ? 'You cannot hide the tab you are on' : '' : 'Options tabs cannot be hidden'\"}],class:_vm.classObject,on:{\"click\":_vm.toggleVisibility}},[_c('div',{staticClass:\"l-hide-modal-button\"},[(_vm.isModernUI)?_c('div',{staticClass:\"l-hide-modal-button__subtab-icon\",domProps:{\"innerHTML\":_vm._s(_vm.subtab.symbol)}}):_vm._e(),_c('div',{staticClass:\"l-hide-modal-button__subtab-name\"},[_vm._v(\" \"+_vm._s(_vm.subtab.name)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenSubtabsButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenSubtabsButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HiddenSubtabsButton.vue?vue&type=template&id=1134982d&scoped=true&\"\nimport script from \"./HiddenSubtabsButton.vue?vue&type=script&lang=js&\"\nexport * from \"./HiddenSubtabsButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HiddenSubtabsButton.vue?vue&type=style&index=0&id=1134982d&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1134982d\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenTabGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenTabGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HiddenTabGroup.vue?vue&type=template&id=c824015c&scoped=true&\"\nimport script from \"./HiddenTabGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./HiddenTabGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HiddenTabGroup.vue?vue&type=style&index=0&id=c824015c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c824015c\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenTabsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HiddenTabsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HiddenTabsModal.vue?vue&type=template&id=2d376db4&scoped=true&\"\nimport script from \"./HiddenTabsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./HiddenTabsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HiddenTabsModal.vue?vue&type=style&index=0&id=2d376db4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d376db4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Hotkey List \")]},proxy:true}])},[_c('span',{staticClass:\"c-modal-hotkeys l-modal-hotkeys\"},[_c('div',{staticClass:\"l-modal-hotkeys__column\"},[_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Buy 1 Dimension\")]),_c('kbd',[_vm._v(\"SHIFT\")]),_c('kbd',[_vm._v(\"1\")]),_vm._v(\"-\"),_c('kbd',[_vm._v(\"SHIFT\")]),_c('kbd',[_vm._v(\"8\")])]),_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Buy 10 Dimensions\")]),_c('kbd',[_vm._v(\"1\")]),_vm._v(\"-\"),_c('kbd',[_vm._v(\"8\")])]),_vm._l((_vm.hotkeyCount),function(index){return _c('div',{key:index},[(_vm.visible[index - 1])?_c('span',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(_vm._s(_vm.shortcutNames[index - 1]))]),_vm._l((_vm.shortcutKeys[index - 1]),function(key,i){return _c('kbd',{key:i},[_vm._v(\" \"+_vm._s(key)+\" \")])})],2):_vm._e()])})],2),_c('div',{staticClass:\"l-modal-hotkeys__column l-modal-hotkeys__column--right\"},[_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Modifier Key\")]),_c('kbd',[_vm._v(\"SHIFT\")])]),_c('span',{staticClass:\"c-modal-hotkeys__shift-description\"},[_vm._v(\" Shift is a modifier key that shows additional information on certain things and adjusts the function of certain buttons. \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.moreShiftKeyInfo)+\" \")]),_c('br'),_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Autobuyer Controls\")]),_c('kbd',[_vm._v(\"ALT\")])]),_c('span',{staticClass:\"c-modal-hotkeys__shift-description\"},[_vm._v(\" Alt is a modifier key that, when pressed in conjunction with any key that has a corresponding autobuyer, will toggle said autobuyer. \"),_c('br'),_vm._v(\" When pressing both Alt and Shift, you can toggle buying singles or buying max for the Antimatter Dimension and Tickspeed Autobuyers instead. \")]),_c('br'),_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Tab Movement\")]),_c('div',[_c('kbd',[_vm._v(\"←\")]),_c('kbd',[_vm._v(\"↓\")]),_c('kbd',[_vm._v(\"↑\")]),_c('kbd',[_vm._v(\"→\")])])]),_c('span',{staticClass:\"c-modal-hotkeys__shift-description\"},[_vm._v(\" Using the Arrow Keys will cycle you through the game's pages. The Up and Down arrows cycle you through tabs, and the Left and Right arrows cycle you through that tab's subtabs. \")]),_c('br'),_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Numpad Support\")])]),_c('span',{staticClass:\"c-modal-hotkeys__shift-description\"},[_vm._v(\" Due to technical reasons, pressing a numpad key will purchase 10 of a Dimension if possible, but pressing a numpad key with \"),_c('kbd',[_vm._v(\"SHIFT\")]),_vm._v(\" will not buy a single Dimension. It may instead, depending on your device, cause the page to scroll or change game tabs. \"),_c('kbd',[_vm._v(\"ALT\")]),_vm._v(\" will still work as expected. \")]),(_vm.isElectron)?[_c('br'),_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Window Zoom\")]),_c('kbd',[_vm._v(\"-\")]),_c('kbd',[_vm._v(\"0\")]),_c('kbd',[_vm._v(\"+\")])]),_c('span',{staticClass:\"c-modal-hotkeys__shift-description\"},[_vm._v(\" To adjust zoom level, hold \"),_c('kbd',[_vm._v(\"ctrl\")]),_vm._v(\" and press either \"),_c('kbd',[_vm._v(\"-\")]),_vm._v(\" or \"),_c('kbd',[_vm._v(\"+\")]),_vm._v(\" to decrease or increase zoom. \"),_c('kbd',[_vm._v(\"ctrl\")]),_c('kbd',[_vm._v(\"0\")]),_vm._v(\" will reset zoom to 100%. \")]),_c('br'),_c('div',{staticClass:\"l-modal-hotkeys-row\"},[_c('span',{staticClass:\"c-modal-hotkeys-row__name l-modal-hotkeys-row__name\"},[_vm._v(\"Fullscreen\")]),_c('kbd',[_vm._v(\"F10\")])]),_c('span',{staticClass:\"c-modal-hotkeys__shift-description\"},[_vm._v(\" To enter or exit fullscreen, press \"),_c('kbd',[_vm._v(\"F10\")]),_vm._v(\". \")])]:_vm._e()],2)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HotkeysModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./HotkeysModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HotkeysModal.vue?vue&type=template&id=0543ac5f&scoped=true&\"\nimport script from \"./HotkeysModal.vue?vue&type=script&lang=js&\"\nexport * from \"./HotkeysModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HotkeysModal.vue?vue&type=style&index=0&id=0543ac5f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0543ac5f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"c-modal-options__large\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Info Display Options \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-options__button-container\"},[_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Show % gain:\"},model:{value:(_vm.showPercentage),callback:function ($$v) {_vm.showPercentage=$$v},expression:\"showPercentage\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Achievement IDs:\"},model:{value:(_vm.achievements),callback:function ($$v) {_vm.achievements=$$v},expression:\"achievements\"}}),_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Achievement unlock state indicators:\"},model:{value:(_vm.achievementUnlockStates),callback:function ($$v) {_vm.achievementUnlockStates=$$v},expression:\"achievementUnlockStates\"}}),(_vm.infinityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Challenge IDs:\"},model:{value:(_vm.challenges),callback:function ($$v) {_vm.challenges=$$v},expression:\"challenges\"}}):_vm._e(),(_vm.eternityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Time Study IDs:\"},model:{value:(_vm.studies),callback:function ($$v) {_vm.studies=$$v},expression:\"studies\"}}):_vm._e(),(_vm.realityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Glyph effect dots:\"},model:{value:(_vm.glyphEffectDots),callback:function ($$v) {_vm.glyphEffectDots=$$v},expression:\"glyphEffectDots\"}}):_vm._e(),(_vm.realityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Reality Upgrade names:\"},model:{value:(_vm.realityUpgrades),callback:function ($$v) {_vm.realityUpgrades=$$v},expression:\"realityUpgrades\"}}):_vm._e(),(_vm.realityUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Perk IDs:\"},model:{value:(_vm.perks),callback:function ($$v) {_vm.perks=$$v},expression:\"perks\"}}):_vm._e(),(_vm.alchemyUnlocked)?_c('ModalOptionsToggleButton',{attrs:{\"text\":\"Alchemy resource amounts:\"},model:{value:(_vm.alchemy),callback:function ($$v) {_vm.alchemy=$$v},expression:\"alchemy\"}}):_vm._e()],1),_vm._v(\" Note: All types of additional info above will always display when holding shift. \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfoDisplayOptionsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InfoDisplayOptionsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InfoDisplayOptionsModal.vue?vue&type=template&id=608493d3&\"\nimport script from \"./InfoDisplayOptionsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./InfoDisplayOptionsModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" News Options \")]},proxy:true}])},[_c('PrimaryButton',{staticClass:\"o-primary-btn o-primary-btn--option-wide\",attrs:{\"onclick\":\"GameOptions.toggleNews()\"}},[_vm._v(\" \"+_vm._s(_vm.newsOnOffLabel)+\" \")]),_c('div',{staticClass:\"o-primary-btn o-primary-btn--option-wide o-primary-btn--slider\"},[_c('b',[_vm._v(_vm._s(_vm.formatInt(parseInt(_vm.repeatBuffer)))+\" message repeat buffer\")]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.repeatBuffer},on:{\"input\":function($event){return _vm.adjustSliderValueRepeatBuffer($event)}}},'SliderComponent',_vm.sliderPropsRepeatBuffer,false))],1),_c('div',{staticClass:\"o-primary-btn o-primary-btn--option-wide o-primary-btn--slider\"},[_c('b',[_vm._v(_vm._s(_vm.formatPercents(parseFloat(_vm.AIChance)))+\" AI messages\")]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.AIChance},on:{\"input\":function($event){return _vm.adjustSliderValueAIChance($event)}}},'SliderComponent',_vm.sliderPropsAIChance,false))],1),_c('div',{staticClass:\"o-primary-btn o-primary-btn--option-wide o-primary-btn--slider\"},[_c('b',[_vm._v(_vm._s(_vm.formatPercents(parseFloat(_vm.speed)))+\" scroll speed\")]),_c('SliderComponent',_vm._b({staticClass:\"o-primary-btn--slider__slider\",attrs:{\"value\":_vm.speed},on:{\"input\":function($event){return _vm.adjustSliderValueSpeed($event)}}},'SliderComponent',_vm.sliderPropsSpeed,false))],1),_c('ModalOptionsToggleButton',{staticClass:\"o-primary-btn o-primary-btn--option-wide\",attrs:{\"text\":\"Animation Effects:\"},model:{value:(_vm.includeAnimated),callback:function ($$v) {_vm.includeAnimated=$$v},expression:\"includeAnimated\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewsOptionsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./NewsOptionsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NewsOptionsModal.vue?vue&type=template&id=89f8897c&\"\nimport script from \"./NewsOptionsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./NewsOptionsModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.confirmPrefs}},[_c('h2',[_vm._v(\"Dimension Split Preference\")]),_c('div',{staticClass:\"l-modal-split-preferences\"},_vm._l((_vm.dimensionOptions),function(id,name){return _c('button',{key:name,class:_vm.classList(name),on:{\"click\":function($event){return _vm.select(name)}}},[(_vm.isPreferred(name))?_c('div',{staticClass:\"l-dim-path-priority o-dim-path-priority\"},[_vm._v(\" \"+_vm._s(_vm.isPreferred(name))+\" \")]):_vm._e(),_c('div',[_vm._v(\" \"+_vm._s(name)+\" \")])])}),0),_c('br'),_c('h2',[_vm._v(\"Pace Split Preference\")]),_c('div',{staticClass:\"l-modal-split-preferences\"},_vm._l((_vm.paceOptions),function(id,name){return _c('button',{key:name,class:_vm.classList(name),on:{\"click\":function($event){return _vm.select(name)}}},[_c('div',[_vm._v(\" \"+_vm._s(name)+\" \")])])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PreferredTreeModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PreferredTreeModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PreferredTreeModal.vue?vue&type=template&id=46d4ab1b&\"\nimport script from \"./PreferredTreeModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PreferredTreeModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{staticClass:\"c-modal-options__large\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Modifying Single Glyph Appearance \")]},proxy:true}])},[_c('PrimaryButton',{staticClass:\"o-primary-btn--subtab-option\",on:{\"click\":function($event){return _vm.setType(undefined)}}},[_vm._v(\" Reset this Glyph's appearance \")]),_c('GlyphCustomizationSingleType',{key:_vm.defaultKeySwap,attrs:{\"type\":_vm.glyphType,\"glyph-id\":_vm.glyphId}}),(_vm.cosmeticTypes && _vm.glyph.fixedCosmetic)?_c('div',[_vm._v(\" This Glyph's Cosmetic Type cannot be changed! \")]):(_vm.cosmeticTypes)?_c('div',{staticClass:\"c-special-type\"},[_vm._v(\" Apply Special Cosmetic Type: \"),_vm._l((_vm.cosmeticTypes),function(type){return _c('PrimaryButton',{key:type,class:_vm.cosmeticTypeClass(type),on:{\"click\":function($event){return _vm.setType(type)}}},[_vm._v(\" \"+_vm._s(type.capitalize())+\" \")])})],2):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleGlyphAppearanceModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingleGlyphAppearanceModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingleGlyphAppearanceModal.vue?vue&type=template&id=4c765a29&scoped=true&\"\nimport script from \"./SingleGlyphAppearanceModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SingleGlyphAppearanceModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SingleGlyphAppearanceModal.vue?vue&type=style&index=0&id=4c765a29&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4c765a29\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-confirm\":_vm.isValidSpeed,\"confirmFn\":_vm.setTestSpeed},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Modify Testing Speed \")]},proxy:true}])},[_c('div',[_c('div',[_vm._v(\" Set game speed for testing purposes. A report will be displayed after settings the testing speed back to 1 informing how long was the speed up effecitvely. \")]),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" This speed up will affect EVERYTHING(with the exception of singularities(Lai'tela)) \")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.input)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.setTestSpeed.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)}],\"input\":[function($event){if($event.target.composing){ return; }_vm.input=$event.target.value},function($event){return _vm.handleTestSpeedInput()}]}}),_c('div',[_vm._v(\" \"+_vm._s(_vm.displayText)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedUpModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedUpModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedUpModal.vue?vue&type=template&id=27e51f8a&\"\nimport script from \"./SpeedUpModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedUpModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Testing Speed Up Report \")]},proxy:true}])},[_c('div',[_vm._v(\" The speed up lasted \"+_vm._s(_vm.durationText)+\". \"),_c('br'),_vm._v(\" It was equivalent to spending \"+_vm._s(_vm.effectiveDurationText)+\" in game. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedUpReportModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedUpReportModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedUpReportModal.vue?vue&type=template&id=471d4dc8&\"\nimport script from \"./SpeedUpReportModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedUpReportModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal-message l-modal-content--centered\"},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]),(_vm.messageIndex < 3)?_c('div',[_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn\",on:{\"click\":_vm.handleLeftButtonClick}},[_vm._v(\" \"+_vm._s(_vm.messageIndex < 2 ? \"Delete\" : \"Cancel\")+\" \")]),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn\",on:{\"click\":_vm.handleRightButtonClick}},[_vm._v(\" \"+_vm._s(_vm.messageIndex >= 2 ? \"Delete\" : \"Cancel\")+\" \")])],1):_c('div',[_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn\",on:{\"click\":_vm.handleNoClick}},[_vm._v(\" Thank you \")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DeleteCompanionGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DeleteCompanionGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DeleteCompanionGlyphModal.vue?vue&type=template&id=2bc1994c&\"\nimport script from \"./DeleteCompanionGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./DeleteCompanionGlyphModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to delete a Glyph \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Deleting a Glyph will remove the Glyph from your inventory! \"),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" There is no benefit in deleting a Glyph before you have unlocked Glyph Sacrifice! \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DeleteGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DeleteGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DeleteGlyphModal.vue?vue&type=template&id=80dccf70&\"\nimport script from \"./DeleteGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./DeleteGlyphModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"sacrificeAll\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]),_c('br'),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" \"+_vm._s(_vm.extraMessage)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PurgeAllRejectedGlyphsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PurgeAllRejectedGlyphsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PurgeAllRejectedGlyphsModal.vue?vue&type=template&id=1af1209e&\"\nimport script from \"./PurgeAllRejectedGlyphsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PurgeAllRejectedGlyphsModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"sacrificeAll\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]),_c('br'),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" \"+_vm._s(_vm.extraMessage)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PurgeAllUnprotectedGlyphsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PurgeAllUnprotectedGlyphsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PurgeAllUnprotectedGlyphsModal.vue?vue&type=template&id=42c2d83c&\"\nimport script from \"./PurgeAllUnprotectedGlyphsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PurgeAllUnprotectedGlyphsModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"autoClean\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.topLabel)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" This could delete Glyphs in your inventory that are good enough that you might want to use them later. Purging will Purge Glyphs based on your Purge mode. Are you sure you want to do this? \"),_c('br'),_c('br'),_vm._v(\" \"+_vm._s(_vm.explanation)+\" \")]),_c('br'),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" \"+_vm._s(_vm.extraMessage)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PurgeGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PurgeGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PurgeGlyphModal.vue?vue&type=template&id=4139feba&\"\nimport script from \"./PurgeGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PurgeGlyphModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"glyphRefine\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to refine a Glyph \")]},proxy:true}])},[(_vm.resourceUnlocked)?_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Refining a Glyph will remove the Glyph from your inventory, and in return, you will increase your \"+_vm._s(_vm.resourceName)+\" Alchemy resource from \"+_vm._s(_vm.format(_vm.resourceAmount, 2, 2))+\" to \"+_vm._s(_vm.format(_vm.after, 2, 2))+\". This Glyph can raise your \"+_vm._s(_vm.resourceName)+\" resource to at most \"+_vm._s(_vm.format(_vm.cap, 2, 2))+\". \")]):_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" You cannot gain any \"+_vm._s(_vm.resourceName)+\" alchemy resource because you have not unlocked this Glyph's resource yet. You can still refine it anyway, but nothing will happen. Consider sacrificing the Glyph instead. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RefineGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RefineGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RefineGlyphModal.vue?vue&type=template&id=1be08cd0&\"\nimport script from \"./RefineGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RefineGlyphModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"glyphSacrifice\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to sacrifice a Glyph \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SacrificeGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SacrificeGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SacrificeGlyphModal.vue?vue&type=template&id=051694b8&\"\nimport script from \"./SacrificeGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SacrificeGlyphModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.header)+\" \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text-fit\"},[_c('span',[_vm._v(\" \"+_vm._s(_vm.message)+\" \")])]),_c('RealityAutobuyerBox',{staticClass:\"c-reality-pos\",attrs:{\"is-modal\":\"\"}}),_c('EternityAutobuyerBox',{staticClass:\"c-eternity-pos\",attrs:{\"is-modal\":\"\"}}),_c('BigCrunchAutobuyerBox',{staticClass:\"c-infinity-pos\",attrs:{\"is-modal\":\"\"}}),_c('GalaxyAutobuyerBox',{attrs:{\"is-modal\":\"\"}}),_c('DimensionBoostAutobuyerBox',{attrs:{\"is-modal\":\"\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerEditModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutobuyerEditModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutobuyerEditModal.vue?vue&type=template&id=a32a7b20&scoped=true&\"\nimport script from \"./AutobuyerEditModal.vue?vue&type=script&lang=js&\"\nexport * from \"./AutobuyerEditModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutobuyerEditModal.vue?vue&type=style&index=0&id=a32a7b20&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a32a7b20\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{staticClass:\"c-automator-template-container\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.name)+\" Template \")]},proxy:true}])},[_c('div',{staticClass:\"c-automator-template-description\"},[_vm._v(\" \"+_vm._s(_vm.description)+\" \")]),_c('div',{staticClass:\"c-automator-template-inputs\"},[_c('b',[_vm._v(\"Required Information:\")]),_c('br'),_vm._v(\" Use a preset Study Tree: \"),_vm._l((_vm.presets),function(preset,presetNumber){return _c('button',{key:preset.name,staticClass:\"o-primary-btn o-load-preset-button-margin\",on:{\"click\":function($event){return _vm.loadPreset(preset.name, presetNumber + 1)}}},[_vm._v(\" \"+_vm._s(preset.name ? preset.name : presetNumber + 1)+\" \")])}),_c('button',{staticClass:\"o-primary-btn o-load-preset-button-margin\",on:{\"click\":_vm.loadCurrent}},[_c('i',[_vm._v(\"Current Tree\")])]),_vm._l((_vm.inputs),function(input){return _c('div',{key:input.name,staticClass:\"c-automator-template-entry\"},[_vm._v(\" \"+_vm._s(input.prompt)+\": \"),(_vm.paramTypeObject(input.type).boolDisplay)?_c('span',[_c('button',{staticClass:\"o-primary-btn\",on:{\"click\":function($event){return _vm.updateButton(input)}}},[_vm._v(\" \"+_vm._s(_vm.buttonTextStrings[input.name])+\" \")])]):_c('span',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.templateInputs[input.name]),expression:\"templateInputs[input.name]\"}],ref:\"templateInputs[input.name]\",refInFor:true,staticClass:\"c-automator-template-textbox\",class:_vm.validityClass(input),attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.templateInputs[input.name])},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.$set(_vm.templateInputs, input.name, $event.target.value)},_vm.updateTemplateProps]}})])])})],2),_c('div',{staticClass:\"c-automator-template-warnings\"},[_c('b',[_vm._v(\"Possible things to consider:\")]),(_vm.validWarnings.length !== 0)?_c('div',_vm._l((_vm.validWarnings),function(warning){return _c('div',{key:warning,staticClass:\"c-automator-template-entry\"},[_vm._v(\" \"+_vm._s(warning)+\" \")])}),0):_c('div',[_vm._v(\" (If something seems wrong with the template inputs, it will show up here) \")]),_c('br'),_c('br')]),(_vm.invalidInputCount === 0)?_c('button',{staticClass:\"o-primary-btn\",on:{\"click\":_vm.copyAndClose}},[_vm._v(\" \"+_vm._s(_vm.isBlock ? \"Create custom template block\" : \"Copy this template to your clipboard\")+\" and close this modal \")]):_c('button',{staticClass:\"o-primary-btn o-primary-btn--disabled\"},[_vm._v(\" Cannot generate template (You have \"+_vm._s(_vm.quantifyInt(\"invalid input\", _vm.invalidInputCount))+\") \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorScriptTemplate.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AutomatorScriptTemplate.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AutomatorScriptTemplate.vue?vue&type=template&id=1c623aa6&scoped=true&\"\nimport script from \"./AutomatorScriptTemplate.vue?vue&type=script&lang=js&\"\nexport * from \"./AutomatorScriptTemplate.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AutomatorScriptTemplate.vue?vue&type=style&index=0&id=1c623aa6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1c623aa6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{staticClass:\"c-modal-away-progress\"},[_c('div',{staticClass:\"c-modal-away-progress__header\"},[_vm._v(\" \"+_vm._s(_vm.headerText)+\" \")]),(!_vm.nothingHappened)?_c('div',{staticClass:\"c-modal-away-progress__resources c-modal--short\"},_vm._l((_vm.offlineStats),function(name){return _c('AwayProgressEntry',{key:name,attrs:{\"name\":name,\"player-before\":_vm.playerBefore,\"player-after\":_vm.playerAfter},on:{\"something-happened\":function($event){_vm.somethingHappened = true}}})}),1):_vm._e(),(!_vm.nothingHappened && _vm.somethingHappened)?_c('span',[_vm._v(\"Note: Click an entry to hide it in the future.\")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.show)?_c('div',{class:_vm.classObject,on:{\"click\":_vm.hideEntry}},[(_vm.isBlackHole)?_c('span',[_vm._v(\" Your \"),_c('b',[_vm._v(_vm._s(_vm.formattedName))]),_vm._v(\" activated \"+_vm._s(_vm.formatBlackHoleActivations)+\" \")]):_c('span',[_c('b',[_vm._v(_vm._s(_vm.formattedName))]),(_vm.isVeryLarge)?_c('i',[_vm._v(\" exponent\")]):_vm._e(),_vm._v(\" increased from \"+_vm._s(_vm.formatBefore)+\" to \"+_vm._s(_vm.formatAfter)+\" \")])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AwayProgressEntry.vue?vue&type=template&id=2d859d46&scoped=true&\"\nimport script from \"./AwayProgressEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./AwayProgressEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AwayProgressEntry.vue?vue&type=style&index=0&id=2d859d46&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d859d46\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AwayProgressModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AwayProgressModal.vue?vue&type=template&id=244ab913&scoped=true&\"\nimport script from \"./AwayProgressModal.vue?vue&type=script&lang=js&\"\nexport * from \"./AwayProgressModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AwayProgressModal.vue?vue&type=style&index=0&id=244ab913&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"244ab913\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":false},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are Breaking Infinity \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Break \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},_vm._l((_vm.message),function(line,index){return _c('span',{key:index},[_vm._v(\" \"+_vm._s(line)+\" \"),_c('br')])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BreakInfinityModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./BreakInfinityModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BreakInfinityModal.vue?vue&type=template&id=05b26000&\"\nimport script from \"./BreakInfinityModal.vue?vue&type=script&lang=js&\"\nexport * from \"./BreakInfinityModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal-away-progress\"},[_c('div',{staticClass:\"c-modal-away-progress__header\"},[_vm._v(\" \"+_vm._s(_vm.titleText)+\" \")]),_c('div',[_vm._v(\" \"+_vm._s(_vm.timeString)+\" If you need a refresher, here is a quick summary of all the content you have unlocked so far from the beginning of the game, separated into different stages of progression. These are only very brief descriptions; you can check the related How To Play entries by clicking the contents title or \"),_c('i',{staticClass:\"fas fa-question-circle\"}),_vm._v(\" icons to view more detailed information. \")]),_c('div',{staticClass:\"l-catchup-group-container\",style:({ 'height' : ((Math.clamp(3 * _vm.progressStage + 5, 15, 35)) + \"rem\") })},_vm._l((_vm.progressStage),function(group){return _c('CatchupGroup',{key:group,attrs:{\"group\":group,\"name\":_vm.stageName(group)}})}),1),_c('span',{staticClass:\"c-suggestion-text\"},[_vm._v(\" Based on your current progression, it will probably be useful to try to increase your \"+_vm._s(_vm.suggestedResource)+\". \")]),_c('div',{staticClass:\"l-confirm-padding\"},[_c('PrimaryButton',{on:{\"click\":_vm.emitClose}},[_vm._v(\" Confirm \")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.shownResources.length !== 0)?_c('div',[_c('span',{staticClass:\"o-catchup-group-title\",on:{\"click\":function($event){_vm.collapsed = !_vm.collapsed}}},[_c('i',{class:_vm.dropDownIconClass}),_vm._v(\" \"+_vm._s(_vm.name)+\" \")]),(!_vm.collapsed)?_c('div',_vm._l((_vm.shownResources),function(resource,i){return _c('CatchupEntry',{key:i,staticClass:\"l-left\",attrs:{\"info\":resource}})}),1):_vm._e()]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal-catchup-entry\"},[_c('span',{staticClass:\"c-resource-name\",attrs:{\"info\":_vm.info,\"is-focused\":_vm.isFocusedResource(_vm.info)},on:{\"click\":_vm.showHowTo}},[_c('span',{staticClass:\"c-underline\"},[_vm._v(_vm._s(_vm.info.name))]),_vm._v(\": \"),_c('i',{staticClass:\"fas fa-question-circle\"})]),_vm._v(\" \"+_vm._s(_vm.info.description)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CatchupEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CatchupEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CatchupEntry.vue?vue&type=template&id=34008a4e&scoped=true&\"\nimport script from \"./CatchupEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./CatchupEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CatchupEntry.vue?vue&type=style&index=0&id=34008a4e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"34008a4e\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CatchupGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CatchupGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CatchupGroup.vue?vue&type=template&id=005300ef&scoped=true&\"\nimport script from \"./CatchupGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./CatchupGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CatchupGroup.vue?vue&type=style&index=0&id=005300ef&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"005300ef\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CatchupModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CatchupModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CatchupModal.vue?vue&type=template&id=a8724662&scoped=true&\"\nimport script from \"./CatchupModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CatchupModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CatchupModal.vue?vue&type=style&index=0&id=a8724662&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"a8724662\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-changelog-modal\"},[_c('ModalCloseButton',{on:{\"click\":_vm.emitClose}}),_vm._m(0),_c('div',{staticClass:\"l-changelog-container\"},[_c('div',{staticClass:\"l-changelog-search-tab\"},[_c('div',{staticClass:\"l-changelog-tab-list\"},_vm._l((_vm.entries),function(entry){return _c('div',{key:entry.id,staticClass:\"o-changelog-tab-button\",class:{\n 'o-changelog-tab-button--selected': entry === _vm.shownEntry\n },on:{\"click\":function($event){return _vm.setShownEntry(entry)}}},[_vm._v(\" \"+_vm._s(_vm.formatDate(entry.date))+\" \")])}),0)]),_c('div',{staticClass:\"l-changelog-info\"},[_c('div',{staticClass:\"c-changelog-body--title\"},[_vm._v(\" \"+_vm._s(_vm.formatDate(_vm.shownEntry.date))),(_vm.shownEntry.name)?_c('span',[_vm._v(\": \\\"\"+_vm._s(_vm.shownEntry.name)+\"\\\" update\")]):_vm._e()]),_c('div',{ref:\"changelogBody\",staticClass:\"l-changelog-body c-changelog-body\",domProps:{\"innerHTML\":_vm._s(_vm.shownEntry.info)}})])])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-changelog-header\"},[_c('div',{staticClass:\"c-changelog-title\"},[_vm._v(\" Changelog \")])])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChangelogModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChangelogModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChangelogModal.vue?vue&type=template&id=92635de0&scoped=true&\"\nimport script from \"./ChangelogModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ChangelogModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ChangelogModal.vue?vue&type=style&index=0&id=92635de0&scoped=true&lang=css&\"\nimport style1 from \"./ChangelogModal.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"92635de0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.confirmChange},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Change your Speedrun Player Name \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Change Name \")]},proxy:true}])},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input c-modal-import__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.input)},on:{\"keyup\":[_vm.updateName,function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.confirmChange.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)}],\"input\":function($event){if($event.target.composing){ return; }_vm.input=$event.target.value}}}),_c('i',[_vm._v(\" This can no longer be changed once the timer starts, and there is a limit of \"+_vm._s(_vm.formatInt(40))+\" characters. \")]),_c('div',[_vm._v(\" Your new name will be \"+_vm._s(_vm.actualName)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChangeNameModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ChangeNameModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ChangeNameModal.vue?vue&type=template&id=e157b080&\"\nimport script from \"./ChangeNameModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ChangeNameModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.deleteConstants},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Deleting Automator Constants \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Delete All \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Are you sure you wish to delete all of your currently-defined automator constants? \"),_c('br'),_c('span',{staticClass:\"l-lost-text\"},[_vm._v(\" This will irreversibly delete \"+_vm._s(_vm.quantify(\"constant\", _vm.constantCount))+\"! \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClearConstantsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ClearConstantsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClearConstantsModal.vue?vue&type=template&id=4f39cd67&scoped=true&\"\nimport script from \"./ClearConstantsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ClearConstantsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClearConstantsModal.vue?vue&type=style&index=0&id=4f39cd67&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f39cd67\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{staticClass:\"l-credits-modal c-credits-modal\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_c('h1',{staticClass:\"c-game-header__antimatter\"},[_vm._v(\" Antimatter Dimensions \")])]},proxy:true}])},[_c('div',{staticClass:\"c-credits-modal__body\"},[_c('CreditsDisplay',{attrs:{\"is-modal\":true}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CreditsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CreditsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CreditsModal.vue?vue&type=template&id=2d8dcf44&scoped=true&\"\nimport script from \"./CreditsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CreditsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CreditsModal.vue?vue&type=style&index=0&id=2d8dcf44&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d8dcf44\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Delete this script \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Delete \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Please confirm your desire to delete this Automator script. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DeleteAutomatorScriptModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DeleteAutomatorScriptModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DeleteAutomatorScriptModal.vue?vue&type=template&id=24a23b91&\"\nimport script from \"./DeleteAutomatorScriptModal.vue?vue&type=script&lang=js&\"\nexport * from \"./DeleteAutomatorScriptModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Cracks in The Nameless Ones' Reality \")]},proxy:true}])},[_c('div',{staticClass:\"c-enslaved-hint-modal c-modal--short\"},[_c('div',[_vm._v(\" This Reality seems to be resisting your efforts to complete it. So far you have done the following: \")]),_c('br'),_vm._l((_vm.shownEntries),function(entry,index){return _c('div',{key:index},[(!entry[0])?_c('div',[(entry[1].hasHint && !entry[1].hasProgress)?_c('span',[_c('i',{staticClass:\"c-icon-wrapper fas fa-question-circle\"}),_c('b',[_vm._v(\"You have not figured out what this hint means yet.\")])]):_c('span',[_c('i',{staticClass:\"c-icon-wrapper fa-solid fa-house-crack\"}),_c('b',[_vm._v(\"You have exposed a crack in the Reality:\")])]),_c('br'),_vm._v(\" - \"+_vm._s(entry[1].hintInfo)+\" \"),_c('br'),_vm._v(\" - \"+_vm._s(entry[1].hasProgress ? entry[1].completedInfo : \"?????\")+\" \")]):_c('div',[_c('i',{staticClass:\"fa-solid fa-shapes\"}),_vm._v(\" \"),_c('b',[_vm._v(\"Glyph hint:\")]),_c('br'),_vm._v(\" \"+_vm._s(entry[1])+\" \")]),_c('br')])}),(_vm.realityHintsLeft + _vm.glyphHintsLeft > 0)?_c('div',[_vm._v(\" You can spend some time looking for some more cracks in the Reality, but every hint you spend Stored Time on will increase the Stored Time needed for the next by a factor of \"+_vm._s(_vm.formatInt(3))+\". This cost bump will gradually go away over \"+_vm._s(_vm.formatInt(24))+\" hours and figuring out what the hint means will immediately divide the cost by \"+_vm._s(_vm.formatInt(2))+\". The cost can't be reduced below \"+_vm._s(_vm.format(1e40))+\" years. \"),_c('br'),_c('br'),_vm._v(\" The next hint will cost \"+_vm._s(_vm.hintCost)+\" of Stored Time. You currently have \"+_vm._s(_vm.formattedStored)+\". \"),(_vm.currentStored < _vm.nextHintCost)?_c('span',[_vm._v(\" You will reach this if you charge your Black Hole for \"+_vm._s(_vm.timeEstimate)+\". \")]):_vm._e(),_c('br'),_c('br'),_c('PrimaryButton',{staticClass:\"l-enslaved-hint-button\",attrs:{\"enabled\":_vm.realityHintsLeft > 0 && _vm.canGetHint},on:{\"click\":function($event){return _vm.giveRealityHint(_vm.realityHintsLeft)}}},[_vm._v(\" Get a hint about the Reality itself (\"+_vm._s(_vm.formatInt(_vm.realityHintsLeft))+\" left) \")]),_c('br'),_c('PrimaryButton',{staticClass:\"l-enslaved-hint-button\",attrs:{\"enabled\":_vm.glyphHintsLeft > 0 && _vm.canGetHint},on:{\"click\":function($event){return _vm.giveGlyphHint(_vm.glyphHintsLeft)}}},[_vm._v(\" Get a hint on what Glyphs to use (\"+_vm._s(_vm.formatInt(_vm.glyphHintsLeft))+\" left) \")])],1):_c('div',[_c('b',[_vm._v(\"There are no more hints left!\")])])],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnslavedHintsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./EnslavedHintsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EnslavedHintsModal.vue?vue&type=template&id=101e8e48&scoped=true&\"\nimport script from \"./EnslavedHintsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./EnslavedHintsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EnslavedHintsModal.vue?vue&type=style&index=0&id=101e8e48&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"101e8e48\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"deleteGlyphSetSave\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Delete this Glyph Set \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Delete \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Please confirm your desire to delete this Glyph Set: \"),_c('GlyphSetPreview',{attrs:{\"is-in-modal\":true,\"glyphs\":_vm.glyphSet}}),_vm._v(\" This will not affect your actual Glyphs, only the saved preset. \")],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetSaveDeleteModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphSetSaveDeleteModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphSetSaveDeleteModal.vue?vue&type=template&id=5e524baa&\"\nimport script from \"./GlyphSetSaveDeleteModal.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphSetSaveDeleteModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.name)+\" \")]},proxy:true}])},[(_vm.isGlyphSelection)?_c('div',[_vm._v(\" Projected Glyph Level: \"+_vm._s(_vm.formatInt(_vm.gainedLevel))+\" \")]):_vm._e(),(_vm.showSetName)?_c('GlyphSetName',{attrs:{\"glyph-set\":_vm.glyphs,\"force-color\":true}}):_vm._e(),_c('div',{class:_vm.containerClass},_vm._l((_vm.glyphs),function(glyph,idx){return _c('GlyphShowcasePanelEntry',{key:idx,staticClass:\"c-glyph-choice-single-glyph\",attrs:{\"idx\":idx,\"glyph\":glyph,\"show-level\":!_vm.isGlyphSelection,\"reality-glyph-boost\":_vm.realityGlyphBoost,\"max-glyph-effects\":_vm.maxGlyphEffects,\"show-sacrifice\":_vm.displaySacrifice}})}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"c-glyph-choice-icon\"},[_c('span',{style:(_vm.typeStyle)},[_vm._v(_vm._s(_vm.typeCapitalized))]),(_vm.showLevel)?_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.levelText)}}):_vm._e(),_c('GlyphComponent',{key:_vm.idx,staticClass:\"c-glyph-component-container\",attrs:{\"glyph\":_vm.glyph,\"show-sacrifice\":_vm.showSacrifice && _vm.canSacrifice,\"draggable\":false,\"circular\":true,\"ignore-modified-level\":false,\"reality-glyph-boost\":_vm.realityGlyphBoost,\"is-in-modal\":true,\"size\":\"4rem\",\"text-proportion\":0.5,\"glow-blur\":\"0.4rem\",\"glow-spread\":\"0.1rem\"},on:{\"clicked\":function($event){return _vm.clickGlyph(_vm.glyph)}}}),_c('div',{style:(_vm.rarityStyle)},[_vm._v(\" \"+_vm._s(_vm.rarityPercent)+\" \")])],1),_c('div',{staticClass:\"c-glyph-choice-effect-list\",style:(_vm.effectStyle)},_vm._l((_vm.glyphEffectList),function(effectObj,index){return _c('div',{key:index,class:{ 'o-pelle-disabled': effectObj.isPelleDisabled }},[_vm._v(\" \"+_vm._s(effectObj.text)+\" \")])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphShowcasePanelEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphShowcasePanelEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphShowcasePanelEntry.vue?vue&type=template&id=5012c711&scoped=true&\"\nimport script from \"./GlyphShowcasePanelEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphShowcasePanelEntry.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphShowcasePanelEntry.vue?vue&type=style&index=0&id=5012c711&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5012c711\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphShowcasePanelModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./GlyphShowcasePanelModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./GlyphShowcasePanelModal.vue?vue&type=template&id=0f672c00&scoped=true&\"\nimport script from \"./GlyphShowcasePanelModal.vue?vue&type=script&lang=js&\"\nexport * from \"./GlyphShowcasePanelModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./GlyphShowcasePanelModal.vue?vue&type=style&index=0&id=0f672c00&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0f672c00\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-h2p-modal\"},[_c('ModalCloseButton',{on:{\"click\":_vm.emitClose}}),_vm._m(0),_c('div',{staticClass:\"l-h2p-container\"},[_c('div',{staticClass:\"l-h2p-search-tab\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.searchValue),expression:\"searchValue\"}],ref:\"input\",staticClass:\"c-h2p-search-bar\",attrs:{\"placeholder\":\"Type to search...\"},domProps:{\"value\":(_vm.searchValue)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.searchValue=$event.target.value}}}),_c('div',{staticClass:\"l-h2p-tab-list\"},_vm._l((_vm.matchingTabs),function(searchObj,searchObjId){return _c('div',{key:searchObj.tab.name,staticClass:\"o-h2p-tab-button\",class:{\n 'o-h2p-tab-button--selected': searchObj.tab === _vm.activeTab,\n 'o-h2p-tab-button--relevant': searchObj.relevance < _vm.topThreshold,\n 'o-h2p-tab-button--first-irrelevant': _vm.isFirstIrrelevant(searchObjId)\n },on:{\"click\":function($event){return _vm.setActiveTab(searchObj.tab)}}},[_vm._v(\" \"+_vm._s(searchObj.tab.alias)+\" \")])}),0)]),_c('div',{staticClass:\"l-h2p-info\"},[_c('div',{staticClass:\"c-h2p-body--title\"},[_vm._v(\" \"+_vm._s(_vm.activeTab.name)+\" \")]),_c('div',{staticClass:\"l-h2p-body c-h2p-body\",attrs:{\"id\":\"h2p-body\"},domProps:{\"innerHTML\":_vm._s(_vm.activeTab.info())}})])])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-h2p-header\"},[_c('div',{staticClass:\"c-h2p-title\"},[_vm._v(\" How To Play \")])])}]\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./H2PModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./H2PModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./H2PModal.vue?vue&type=template&id=7e1ab2ec&scoped=true&\"\nimport script from \"./H2PModal.vue?vue&type=script&lang=js&\"\nexport * from \"./H2PModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./H2PModal.vue?vue&type=style&index=0&id=7e1ab2ec&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7e1ab2ec\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":!_vm.isValid,\"show-confirm\":_vm.isValid},on:{\"confirm\":_vm.importSave},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Import Automator Script Data \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Import \")]},proxy:true}])},[_vm._v(\" This will create a new Automator script at the end of your list. \"),(_vm.isImportingExtraData)?_c('span',[_vm._v(\"This will also import additional data related to the script.\")]):_vm._e(),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input c-modal-import__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.input)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.importSave.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)}],\"input\":function($event){if($event.target.composing){ return; }_vm.input=$event.target.value}}}),(_vm.isValid)?_c('div',[_vm._v(\" Script name: \"+_vm._s(_vm.scriptName)+\" \"),_c('br'),_vm._v(\" Line count: \"+_vm._s(_vm.lineCount)+\" \"),(_vm.hasPresets)?_c('div',[_c('br'),_vm._v(\" Study Presets: \"),_vm._l((_vm.importedPresets),function(preset,id){return _c('span',{key:id,staticClass:\"c-import-data-name\"},[(preset.name)?_c('span',[_vm._v(\"\\\"\"+_vm._s(preset.name)+\"\\\" (slot \"+_vm._s(preset.id + 1)+\")\")]):_c('span',[_vm._v(\"Preset slot #\"+_vm._s(preset.id + 1))])])}),(!_vm.ignorePresets && _vm.overwrittenPresetCount > 0)?_c('div',{staticClass:\"l-has-errors\"},[_vm._v(\" \"+_vm._s(_vm.formatInt(_vm.overwrittenPresetCount))+\" of your existing presets will be overwritten by imported presets! \")]):_vm._e(),_c('br'),_c('button',{staticClass:\"o-primary-btn\",on:{\"click\":function($event){_vm.ignorePresets = !_vm.ignorePresets}}},[_vm._v(\" \"+_vm._s(_vm.presetButtonText)+\" \")])],2):_vm._e(),(_vm.hasConstants)?_c('div',[_c('br'),_vm._v(\" Constants: \"),_vm._l((_vm.importedConstants),function(constant,id){return _c('span',{key:id + 10,staticClass:\"c-import-data-name\"},[_vm._v(\" \\\"\"+_vm._s(constant.key)+\"\\\" \")])}),(!_vm.ignoreConstants && (_vm.willOverwriteConstant || _vm.extraConstants > 0))?_c('div',{staticClass:\"l-has-errors\"},[(_vm.willOverwriteConstant)?_c('span',[_vm._v(\"Some of your existing constants will be overwritten!\")]):_vm._e(),(_vm.willOverwriteConstant && _vm.extraConstants > 0)?_c('br'):_vm._e(),(_vm.extraConstants > 0)?_c('span',[_vm._v(\" \"+_vm._s(_vm.quantifyInt(\"constant\", _vm.extraConstants))+\" will not be imported due to the \"+_vm._s(_vm.maxConstantCount)+\" constant limit. \")]):_vm._e()]):_vm._e(),_c('br'),_c('button',{staticClass:\"o-primary-btn\",on:{\"click\":function($event){_vm.ignoreConstants = !_vm.ignoreConstants}}},[_vm._v(\" \"+_vm._s(_vm.constantButtonText)+\" \")])],2):_vm._e(),_c('br'),(_vm.hasErrors)?_c('div',{staticClass:\"l-has-errors\"},[_vm._v(\" This script has errors which need to be fixed before it can be run! \")]):_vm._e(),(_vm.hasErrors && _vm.isImportingExtraData)?_c('div',[_c('i',[_vm._v(\"Some errors may be fixed with the additional data being imported.\")])]):_vm._e()]):(_vm.input.length !== 0)?_c('div',[_vm._v(\" Invalid Automator data string \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportAutomatorDataModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportAutomatorDataModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImportAutomatorDataModal.vue?vue&type=template&id=67bd8c2a&scoped=true&\"\nimport script from \"./ImportAutomatorDataModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ImportAutomatorDataModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImportAutomatorDataModal.vue?vue&type=style&index=0&id=67bd8c2a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"67bd8c2a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":!_vm.inputIsValid,\"show-confirm\":false},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Import Glyph filter settings \")]},proxy:true}])},[_vm._v(\" Note: Importing Glyph filter options will overwrite settings \"),_c('br'),_vm._v(\" in all filter modes, not just the currently-selected one. \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input c-modal-import__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.input)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.importSave.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)}],\"input\":function($event){if($event.target.composing){ return; }_vm.input=$event.target.value}}}),_c('div',{staticClass:\"c-modal-import__save-info\"},[(!_vm.input)?_c('div'):(_vm.inputIsValid)?_c('div',[_c('b',[_vm._v(\"Selection mode:\")]),_vm._v(\" \"+_vm._s(_vm.selectStr)+\" \"),_c('br'),_c('b',[_vm._v(\"Effect Count (\\\"Number of Effects\\\"):\")]),_vm._v(\" \"+_vm._s(_vm.basicCountStr)+\" \"),_c('br'),_c('b',[_vm._v(\"Rejected Glyphs:\")]),_vm._v(\" \"+_vm._s(_vm.trashStr)+\" \"),_c('br'),_c('u',[_c('b',[_vm._v(\"Type-specific Settings\")])]),_vm._v(\" \"),_c('span',{attrs:{\"ach-tooltip\":_vm.settingTooltipText}},[_c('i',{staticClass:\"fas fa-question-circle\"})]),_c('br'),_vm._l((_vm.availableTypes),function(type){return _c('ImportFilterSingleType',{key:type,staticClass:\"c-single-type\",attrs:{\"type\":type,\"curr-settings\":_vm.currentSettings.types[type],\"new-settings\":_vm.parsedSettings.types[type]}})})],2):_c('div',[_vm._v(\" Not a valid Glyph filter string \")])]),(_vm.inputIsValid)?_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn\",on:{\"click\":_vm.importFilter}},[_vm._v(\" Import \")]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(\" \"+_vm._s(_vm.symbol)+\": \"),(_vm.settingsChanged)?_c('span',[_c('span',{staticClass:\"c-single-row\"},[_c('span',{staticClass:\"c-rarity\",class:_vm.topLevelClassObject('rarity'),attrs:{\"ach-tooltip\":\"Setting for Rarity Threshold and Specified Effect\"}},[_vm._v(\" \"+_vm._s(_vm.rarityStr)+\" \")]),_c('span',{staticClass:\"c-effects-count\",class:_vm.topLevelClassObject('effectCount'),attrs:{\"ach-tooltip\":\"Number of effects in Specified Effect\"}},[_vm._v(\" Minimum Effects: \"+_vm._s(_vm.effectStr)+\" \")]),_c('span',{staticClass:\"c-target-score\",class:_vm.topLevelClassObject('score'),attrs:{\"ach-tooltip\":\"Threshold for Effect Score\"}},[_vm._v(\" Score: \"+_vm._s(_vm.scoreStr)+\" \")])]),_c('br'),_c('span',{staticClass:\"c-single-row\"},_vm._l((_vm.effectData.slice(0, 4)),function(effect){return _c('span',{key:effect.bitmaskIndex,staticClass:\"c-single-score\",class:_vm.effectClassObject(effect),attrs:{\"ach-tooltip\":_vm.getEffectDesc(effect)}},[_vm._v(\" \"+_vm._s(_vm.effectScoreStr(effect))+\" \")])}),0),(_vm.effectData.length > 4)?_c('span',{staticClass:\"c-single-row c-second-row\"},[_c('br'),_vm._l((_vm.effectData.slice(4)),function(effect){return _c('span',{key:effect.bitmaskIndex,staticClass:\"c-single-score o-cell\",class:_vm.effectClassObject(effect),attrs:{\"ach-tooltip\":_vm.getEffectDesc(effect)}},[_vm._v(\" \"+_vm._s(_vm.effectScoreStr(effect))+\" \")])})],2):_vm._e()]):_c('span',[_vm._v(\" (No changes) \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportFilterSingleType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportFilterSingleType.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImportFilterSingleType.vue?vue&type=template&id=66a38efb&scoped=true&\"\nimport script from \"./ImportFilterSingleType.vue?vue&type=script&lang=js&\"\nexport * from \"./ImportFilterSingleType.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImportFilterSingleType.vue?vue&type=style&index=0&id=66a38efb&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"66a38efb\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportFilterModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportFilterModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImportFilterModal.vue?vue&type=template&id=57ab1f8f&scoped=true&\"\nimport script from \"./ImportFilterModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ImportFilterModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImportFilterModal.vue?vue&type=style&index=0&id=57ab1f8f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57ab1f8f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":!_vm.inputIsValid,\"show-confirm\":false},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Input your save \")]},proxy:true}])},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input c-modal-import__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.input)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.importSave.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)}],\"input\":function($event){if($event.target.composing){ return; }_vm.input=$event.target.value}}}),_c('div',{staticClass:\"c-modal-import__save-info\"},[(_vm.inputIsSecret)?_c('div',[_vm._v(\" ??? \")]):(_vm.inputIsValidSave)?[(!_vm.inputIsDev)?[(_vm.fileName)?_c('div',[_vm._v(\" File name: \"+_vm._s(_vm.fileName)+\" \")]):_vm._e(),_c('div',[_vm._v(\"Antimatter: \"+_vm._s(_vm.formatPostBreak(_vm.antimatter, 2, 1)))]),(_vm.progress.isInfinityUnlocked)?_c('div',[_vm._v(\" Infinities: \"+_vm._s(_vm.formatPostBreak(_vm.infinities, 2))+\" \")]):_vm._e(),(_vm.progress.isEternityUnlocked)?_c('div',[_vm._v(\" Eternities: \"+_vm._s(_vm.formatPostBreak(_vm.player.eternities, 2))+\" \")]):_vm._e(),(_vm.progress.isRealityUnlocked)?_c('div',[_vm._v(\" Realities: \"+_vm._s(_vm.formatPostBreak(_vm.player.realities, 2))+\" \")]):_vm._e(),(_vm.progress.hasFullCompletion)?_c('div',[_vm._v(\" Full game completions: \"+_vm._s(_vm.formatInt(_vm.player.records.fullGameCompletions))+\" \")]):_vm._e(),_c('div',{staticClass:\"c-modal-import__warning\"},[_vm._v(\" (Your current save file will be overwritten!) \")]),_c('br'),_c('div',[_vm._v(\" \"+_vm._s(_vm.lastOpened)+\" \"),_c('div',{staticClass:\"o-primary-btn\",on:{\"click\":_vm.changeOfflineSetting}},[_vm._v(\" Offline Progress: \"+_vm._s(_vm.offlineType)+\" \")]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.offlineDetails)}})])]:_c('div',[_vm._v(\" You cannot import development saves into the public game. \")])]:(_vm.hasInput)?_c('div',[_vm._v(\" Not a valid save: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.saveCheckString)+\" \")]):_vm._e(),(_vm.player)?_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[(_vm.willLoseCosmetics)?_c('div',[_c('br'),_vm._v(\" Glyph cosmetic sets from completing the game are tied to your save. \"),_c('br'),_vm._v(\" Importing this save will cause you to lose some sets. \")]):_vm._e(),(_vm.willLoseSpeedrun)?_c('div',[_c('br'),_vm._v(\" You will lose the ability to do a Speedrun, as this save does not have it unlocked. \")]):_vm._e()]):_vm._e()],2),(_vm.inputIsValid)?_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn\",on:{\"click\":_vm.importSave}},[_vm._v(\" Import \")]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportSaveModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportSaveModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImportSaveModal.vue?vue&type=template&id=209f8fea&\"\nimport script from \"./ImportSaveModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ImportSaveModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.importConstants},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Importing Time Study Presets as Constants \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Import All \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Confirming this modal will import all of your saved Time Study presets as new Automator constants. Below are all the valid presets which will be imported, with the beginning and end of their contained studies shown. Some names may be changed due to restrictions on constant name formatting. \"),_c('br'),_c('br'),_vm._l((_vm.presets.length),function(i){return _c('div',{key:i,class:{ 'l-not-imported' : !_vm.willImport[i-1] }},[_vm._v(\" Name: \"+_vm._s(_vm.presets[i-1].name)+\" ➜ \"),_c('b',[_vm._v(_vm._s(_vm.names[i-1]))]),_c('br'),_vm._v(\" \"+_vm._s(_vm.shortenString(_vm.presets[i-1].studies))+\" \"),(_vm.hasConflict(_vm.names[i-1]))?_c('span',{staticClass:\"l-warn-text\"},[_c('br'),_vm._v(\" This will overwrite an existing constant! \")]):_vm._e(),_c('br'),_c('br')])}),(_vm.missedImports() > 0)?_c('div',{staticClass:\"l-warn-text\"},[_vm._v(\" \"+_vm._s(_vm.quantify(\"preset\", _vm.missedImports()))+\" in this list cannot be imported due to the limit on constant count. \")]):_vm._e()],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportTimeStudyConstants.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImportTimeStudyConstants.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImportTimeStudyConstants.vue?vue&type=template&id=4552a040&scoped=true&\"\nimport script from \"./ImportTimeStudyConstants.vue?vue&type=script&lang=js&\"\nexport * from \"./ImportTimeStudyConstants.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImportTimeStudyConstants.vue?vue&type=style&index=0&id=4552a040&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4552a040\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-information-modal c-information-modal\"},[_c('ModalCloseButton',{on:{\"click\":_vm.emitClose}}),_vm._m(0),_vm._m(1),_c('div',{staticClass:\"l-socials\"},[_c('InformationModalButton',{attrs:{\"name\":\"Redemption GitHub repository\",\"icon\":\"fa-brands fa-github\",\"link\":\"https://github.com/toilet45/ADRedemption\"}}),_c('InformationModalButton',{attrs:{\"name\":\"r/AntimatterDimensions\",\"icon\":\"fa-brands fa-reddit-alien\",\"link\":\"https://www.reddit.com/r/AntimatterDimensions/\"}}),_c('InformationModalButton',{attrs:{\"name\":\"Antimatter Dimensions Redemption: Discord Server\",\"icon\":\"fa-brands fa-discord\",\"link\":\"https://discord.gg/3RuXAz7rwe\"}}),_c('InformationModalButton',{attrs:{\"name\":\"Vanilla Antimatter Dimensions Discord Server\",\"icon\":\"fa-brands fa-discord\",\"link\":\"https://discord.gg/ST9NaXa\"}}),_c('InformationModalButton',{attrs:{\"name\":\"Antimatter Dimensions on Google Play\",\"icon\":\"fa-brands fa-google-play\",\"link\":\"https://play.google.com/store/apps/details?id=kajfosz.antimatterdimensions\"}}),_c('InformationModalButton',{attrs:{\"name\":\"Antimatter Dimensions on Steam\",\"icon\":\"fa-brands fa-steam\",\"link\":\"https://store.steampowered.com/app/1399720/Antimatter_Dimensions/\"}}),_c('InformationModalButton',{attrs:{\"name\":\"Credits\",\"icon\":\"fa-solid fa-users\",\"show-modal\":\"credits\"}}),_c('InformationModalButton',{attrs:{\"name\":\"Game Changelog\",\"icon\":\"fa-solid fa-file-lines\",\"show-modal\":\"changelog\"}})],1)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-h2p-header\"},[_c('div',{staticClass:\"c-h2p-title\"},[_vm._v(\" About the game \")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-info-body\"},[_vm._v(\" Antimatter Dimensions is an Idle Incremental game created by Finnish developer Hevipelle. Originating as a solo project in 2016, it was expanded upon by a large team of developers and testers from then on. \"),_c('br'),_c('br'),_vm._v(\" The game has unfolding gameplay and multiple prestige layers. The \\\"How to Play\\\" button contains useful information about progressing. \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"c-socials--icon__wrapper\",attrs:{\"ach-tooltip\":_vm.name}},[(_vm.link)?_c('a',{staticClass:\"c-socials--icon\",on:{\"click\":_vm.openLink}},[_c('i',{class:_vm.icon})]):_c('a',{staticClass:\"c-socials--icon\",on:{\"click\":_vm.openAssociatedModal}},[_c('i',{class:_vm.icon})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InformationModalButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InformationModalButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InformationModalButton.vue?vue&type=template&id=01811230&scoped=true&\"\nimport script from \"./InformationModalButton.vue?vue&type=script&lang=js&\"\nexport * from \"./InformationModalButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./InformationModalButton.vue?vue&type=style&index=0&id=01811230&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"01811230\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InformationModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./InformationModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InformationModal.vue?vue&type=template&id=fc435f5e&scoped=true&\"\nimport script from \"./InformationModal.vue?vue&type=script&lang=js&\"\nexport * from \"./InformationModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./InformationModal.vue?vue&type=style&index=0&id=fc435f5e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"fc435f5e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperOptions',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Save Selection \")]},proxy:true}])},_vm._l((3),function(id){return _c('LoadGameEntry',{key:id,staticClass:\"c-entry-border\",attrs:{\"save-id\":id - 1}})}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-modal-options__save-record\"},[_c('h3',[_vm._v(\"Save #\"+_vm._s(_vm.saveId + 1)+\":\"),(_vm.isSelected)?_c('span',[_vm._v(\" (selected)\")]):_vm._e()]),(_vm.fileName)?_c('span',[_vm._v(\"File name: \"+_vm._s(_vm.fileName))]):_vm._e(),_c('span',[_vm._v(\"Antimatter: \"+_vm._s(_vm.formatAntimatter(_vm.antimatter)))]),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium\",on:{\"click\":_vm.load}},[_vm._v(\" Load \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadGameEntry.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadGameEntry.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LoadGameEntry.vue?vue&type=template&id=614e792a&\"\nimport script from \"./LoadGameEntry.vue?vue&type=script&lang=js&\"\nexport * from \"./LoadGameEntry.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadGameModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./LoadGameModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LoadGameModal.vue?vue&type=template&id=411bb7ce&scoped=true&\"\nimport script from \"./LoadGameModal.vue?vue&type=script&lang=js&\"\nexport * from \"./LoadGameModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LoadGameModal.vue?vue&type=style&index=0&id=411bb7ce&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"411bb7ce\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Modifying Glyph RNG Seed \")]},proxy:true}])},[_c('div',[_vm._v(\" All Glyph options beyond the first Reality for an entire playthrough are randomly determined from the very beginning, based on the value of an initial seed number. The role of this seed is that it chooses a single, \"),_c('i',[_vm._v(\"particular\")]),_vm._v(\" set of Glyph options for your playthrough. If you or anyone else chooses the same seed in a different run, you will get the same options for Glyphs. \"),_c('br'),_c('br'),_vm._v(\" You can switch between these three options any point before you generate your first Glyph. \"),_c('br'),_vm._v(\" Current Setting: \"),_c('b',[_vm._v(_vm._s(_vm.seedText))]),_c('br'),_c('br'),_c('PrimaryButton',{class:_vm.buttonClass(_vm.choiceEnum.FIXED),on:{\"click\":function($event){return _vm.setMode(_vm.choiceEnum.FIXED)}}},[_vm._v(\" Official Preset Seed \")]),_c('br'),_vm._v(\" This is the default option which chooses the seed \"),_c('b',[_vm._v(_vm._s(_vm.officialSeed))]),_vm._v(\". Anyone who chooses to not modify the seed at all will get these Glyph options. \"),_c('br'),_c('br'),_c('PrimaryButton',{class:_vm.buttonClass(_vm.choiceEnum.RANDOM),on:{\"click\":function($event){return _vm.setMode(_vm.choiceEnum.RANDOM)}}},[_vm._v(\" Randomized Seed \")]),_c('br'),_vm._v(\" This selects a completely randomized seed value, producing Glyph options which are very likely to be different from anyone else's playthrough unless they intentionally choose the same value. \"),_c('br'),_c('br'),_c('PrimaryButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.seedValue === 0 ? 'Input seed cannot be zero!' : ''),expression:\"seedValue === 0 ? 'Input seed cannot be zero!' : ''\"}],class:_vm.buttonClass(_vm.choiceEnum.PLAYER),on:{\"click\":function($event){return _vm.setMode(_vm.choiceEnum.PLAYER, _vm.seedValue)}}},[_vm._v(\" Player-selected Seed: \")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inputSeed),expression:\"inputSeed\"}],ref:\"inputSeed\",staticClass:\"c-modal-input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.inputSeed)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.inputSeed=$event.target.value},function($event){return _vm.handleSeedInput()}]}}),_c('br'),_vm._v(\" This option sets your seed to the value you type into the text box. \"),_c('br'),(_vm.seedValue !== 0)?_c('span',[_vm._v(\" Your current input will be \"+_vm._s(_vm.convertedInput ? \"converted to\" : \"used as\")+\" the number \"),_c('b',[_vm._v(_vm._s(_vm.seedValue))]),_vm._v(\". \")]):_c('span',[_vm._v(\" Your current input \"+_vm._s(_vm.convertedInput ? \"converts to\" : \"is equal to\")+\" \"),_c('b',[_vm._v(\"0\")]),_vm._v(\"; the seed will default to Official Preset. \")]),_c('br'),_vm._v(\" For technical reasons, this value must be must be non-zero to be accepted. \")],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModifySeedModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ModifySeedModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModifySeedModal.vue?vue&type=template&id=526c51fe&scoped=true&\"\nimport script from \"./ModifySeedModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ModifySeedModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ModifySeedModal.vue?vue&type=style&index=0&id=526c51fe&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"526c51fe\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" List of disabled and nerfed effects in Doomed \")]},proxy:true}])},[_c('div',{staticClass:\"pelle-effects-container\"},_vm._l((_vm.nerfs),function(nerf,idx){return _c('p',{key:idx},[_vm._v(\" \"+_vm._s(nerf)+\" \")])}),0),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn\",on:{\"click\":_vm.emitClose}},[_vm._v(\" Okay \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleEffectsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PelleEffectsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PelleEffectsModal.vue?vue&type=template&id=21d4331f&scoped=true&\"\nimport script from \"./PelleEffectsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./PelleEffectsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PelleEffectsModal.vue?vue&type=style&index=0&id=21d4331f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"21d4331f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Reality Glyph Creation \")]},proxy:true}])},[_c('div',{staticClass:\"c-reality-glyph-creation\"},[(this.mm8)?_c('div',[_vm._v(\" Create a level \"+_vm._s(_vm.formatInt(_vm.realityGlyphLevel))+\" Reality Glyph. Rarity will always be \"+_vm._s(_vm.formatPercents(1))+\" and level scales on your current Reality Resource amount (which is all consumed). All other Alchemy Resources will be unaffected. Reality Glyphs have unique effects, some of which are only available with higher level Glyphs. Reality Glyphs can also be sacrificed to increase all Memory Chunk gain. Like Effarig Glyphs, you cannot equip more than two at the same time. \")]):_c('div',[_vm._v(\" Create a level \"+_vm._s(_vm.formatInt(_vm.realityGlyphLevel))+\" Reality Glyph. Rarity will always be \"+_vm._s(_vm.formatPercents(1))+\" and level scales on your current Reality Resource amount (which is all consumed). All other Alchemy Resources will be unaffected. Reality Glyphs have unique effects, some of which are only available with higher level Glyphs. Reality Glyphs can also be sacrificed to increase all Memory Chunk gain. Like Effarig Glyphs, you cannot equip more than one at the same time. \")]),_c('div',{staticClass:\"o-available-effects-container\"},[_c('div',{staticClass:\"o-available-effects\"},[_vm._v(\" Available Effects: \")]),_vm._l((_vm.possibleEffects),function(effect,index){return _c('div',{key:index},[_vm._v(\" \"+_vm._s(_vm.formatGlyphEffect(effect))+\" \")])})],2),(_vm.isDoomed)?_c('PrimaryButton',{attrs:{\"enabled\":false}},[_vm._v(\" You cannot create Reality Glyphs while Doomed \")]):(_vm.realityGlyphLevel !== 0)?_c('PrimaryButton',{on:{\"click\":_vm.createRealityGlyph}},[_vm._v(\" Create a Reality Glyph! \")]):_c('PrimaryButton',{attrs:{\"enabled\":false}},[_vm._v(\" Reality Glyph level must be higher than \"+_vm._s(_vm.formatInt(0))+\" \")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityGlyphCreationModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RealityGlyphCreationModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RealityGlyphCreationModal.vue?vue&type=template&id=7a224243&scoped=true&\"\nimport script from \"./RealityGlyphCreationModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RealityGlyphCreationModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RealityGlyphCreationModal.vue?vue&type=style&index=0&id=7a224243&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7a224243\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"glyphReplace\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to replace a Glyph \")]},proxy:true}])},[_vm._v(\" Replacing a Glyph will restart this \"+_vm._s(_vm.resetTerm)+\". \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplaceGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ReplaceGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReplaceGlyphModal.vue?vue&type=template&id=4e17b85c&\"\nimport script from \"./ReplaceGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ReplaceGlyphModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"respecIAP\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to respec your Shop Purchases \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Are you sure you want to respec your Shop Purchases? This will not cost anything and return the \"+_vm._s(_vm.returnedSTDCount())+\" \"),_c('img',{staticClass:\"o-shop-button-button__img\",attrs:{\"src\":\"images/std_coin.png\"}}),_vm._v(\" you spent on all purchases which give permanent multipliers. \"),_c('br'),_c('br'),_vm._v(\" Anything spent on offline progress and Glyph cosmetics will not be refunded. Glyph cosmetic sets are permanent and will not be lost or respeced once purchased. \"),_c('br'),_c('br'),_c('b',{staticClass:\"o-warning\"},[_vm._v(\"You will not be able to respec again unless you purchase more STD coins.\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RespecIAPModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./RespecIAPModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RespecIAPModal.vue?vue&type=template&id=1db2b8e9&scoped=true&\"\nimport script from \"./RespecIAPModal.vue?vue&type=script&lang=js&\"\nexport * from \"./RespecIAPModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RespecIAPModal.vue?vue&type=style&index=0&id=1db2b8e9&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1db2b8e9\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"sacrifice\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Dimensional Sacrifice \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.message)+\" \")]),_c('br'),_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" \"+_vm._s(_vm.multiplierText)+\" \"),_c('br')])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SacrificeModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SacrificeModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SacrificeModal.vue?vue&type=template&id=07b1a6dd&\"\nimport script from \"./SacrificeModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SacrificeModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Singularity Milestones \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal__confirmation-toggle\",on:{\"click\":_vm.toggleGlow}},[_c('div',{class:_vm.glowOptionClass()},[(_vm.milestoneGlow)?_c('span',{staticClass:\"fas fa-check\"}):_vm._e()]),_c('span',{staticClass:\"c-modal__confirmation-toggle__text\"},[_vm._v(\" Make button glow when new milestones have been reached \")])]),_c('div',{staticClass:\"l-singularity-milestone-modal-container-outer\"},[_c('div',{staticClass:\"l-singularity-milestone-modal-container-inner\"},_vm._l((_vm.milestones),function(milestone){return _c('SingularityMilestoneComponent',{key:milestone.id,attrs:{\"milestone\":milestone}})}),1)]),_c('div',{staticClass:\"l-singularity-milestone-sort-container\"},[_c('button',{staticClass:\"c-singularity-milestone-modal-sort-button\",on:{\"click\":function($event){return _vm.cycleButton(0)}}},[_vm._v(\" To Milestone: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.resourceStr)+\" \")]),_c('button',{staticClass:\"c-singularity-milestone-modal-sort-button\",on:{\"click\":function($event){return _vm.cycleButton(1)}}},[_vm._v(\" Sort by: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.sortStr)+\" \")]),_c('button',{staticClass:\"c-singularity-milestone-modal-sort-button\",on:{\"click\":function($event){return _vm.cycleButton(2)}}},[_vm._v(\" Completed Milestones: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.completedStr)+\" \")]),_c('button',{staticClass:\"c-singularity-milestone-modal-sort-button\",on:{\"click\":function($event){return _vm.cycleButton(3)}}},[_vm._v(\" Sort Order: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.orderStr)+\" \")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityMilestonesModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SingularityMilestonesModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SingularityMilestonesModal.vue?vue&type=template&id=24b120bc&\"\nimport script from \"./SingularityMilestonesModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SingularityMilestonesModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":!_vm.onInfoPage && !_vm.willStartRun,\"show-confirm\":!_vm.onInfoPage && _vm.willStartRun,\"confirm-class\":\"o-primary-btn--width-medium c-modal-hard-reset-btn c-modal__confirm-btn\"},on:{\"confirm\":_vm.startRun},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Entering Speedrun Mode \")]},proxy:true},{key:\"confirm\",fn:function(){return [_vm._v(\" Start Run! \")]},proxy:true},{key:\"cancel\",fn:function(){return [_vm._v(\" Cancel \")]},proxy:true}])},[(_vm.onInfoPage)?_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" This will start a save with additional statistics tracking for when you reach certain points of the game. These will be visible in the bottom-right of the screen and on a dedicated subtab of Statistics. \"),_c('br'),_c('br'),_vm._v(\" Almost all animations and confirmations are disabled by default, but you can change any of these settings before you reach their required progression. When you begin the run, the game remains paused until your antimatter changes, allowing you to configure all your settings before starting. In order to avoid having to wait for a long time before actually starting an optimized run, a few achievements are given for free. \"),_c('br'),_c('br'),_c('i',[_vm._v(\" There is no additional content in Speedrun Mode. \")]),_c('br'),_c('br'),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-hard-reset-btn c-modal__confirm-btn\",on:{\"click\":_vm.nextPage}},[_vm._v(\" Continue \")])],1):_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" You can type in text below to name your speedrun save. This will have no effects on gameplay and only identifies this particular save as yours. If no name is given, a random name will be generated instead. This name can be changed by clicking your name in the speedrun info box, as long as the timer has not started yet. \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.name),expression:\"name\"}],ref:\"name\",staticClass:\"c-modal-input c-modal-hard-reset__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.name)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.name=$event.target.value}}}),_c('br'),_c('br'),_vm._v(\" Speedrun saves can be imported and exported like regular saves. Importing a speedrun save will mark it as a Segmented run, as importing and exporting allows for optimization of individual segments of the game. Without importing, saves will remain as Single-segment runs. \"),_c('br'),_c('br'),_vm._v(\" You can modify the Glyph RNG seed in the Options tab before starting your run, if desired. \"),_c('br'),_c('br'),_c('div',{staticClass:\"c-modal-hard-reset-danger\"},[_vm._v(\" Starting a speedrun will reset your save to the beginning of the game. Some things will remain, such as full-game completion stats, visual settings, automator scripts, and Glyph cosmetics, but otherwise it will be as if you had just finished the entire game and chose to restart at the credits screen. Type in \\\"Gotta Go Fast!\\\" below to confirm and (re)start the run. \")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.confirmPhrase),expression:\"confirmPhrase\"}],ref:\"confirmPhrase\",staticClass:\"c-modal-input c-modal-hard-reset__input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.confirmPhrase)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.confirmPhrase=$event.target.value}}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunModeModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SpeedrunModeModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpeedrunModeModal.vue?vue&type=template&id=150b576c&\"\nimport script from \"./SpeedrunModeModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SpeedrunModeModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{staticClass:\"c-shop-modal\",scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Support The Developer - coins \")]},proxy:true}])},[(_vm.macPurchaser)?_c('span',[_c('button',{staticClass:\"o-shop-button-button\",on:{\"click\":function($event){return _vm.macConfirm()}}},[_vm._v(\"Confirm Purchase to Receive STDs\")]),_c('br'),_c('span',[_vm._v(\"(Required on Mac)\")]),_c('br')]):_vm._e(),_c('div',{staticClass:\"l-modal-store-content\"},[_c('img',{attrs:{\"src\":\"images/std_coin.png\"}}),_c('div',{staticClass:\"c-modal-store-buttons\"},[_c('StdStoreRow',{attrs:{\"amount\":30,\"cost\":2.99}}),_c('StdStoreRow',{attrs:{\"amount\":60,\"cost\":4.99}}),_c('StdStoreRow',{attrs:{\"amount\":140,\"cost\":9.99}}),_c('StdStoreRow',{attrs:{\"amount\":300,\"cost\":19.99}}),_c('StdStoreRow',{attrs:{\"amount\":1000,\"cost\":49.99}})],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-modal-store-btn-container\"},[_c('div',{staticClass:\"o-modal-store-label\"},[_vm._v(\" \"+_vm._s(_vm.amount)+\" STDs \")]),_c('button',{staticClass:\"o-modal-store-btn\",on:{\"click\":_vm.purchase}},[_vm._v(\" $\"),_c('span',[_vm._v(_vm._s(_vm.cost))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StdStoreRow.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StdStoreRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StdStoreRow.vue?vue&type=template&id=15d3b44e&\"\nimport script from \"./StdStoreRow.vue?vue&type=script&lang=js&\"\nexport * from \"./StdStoreRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StdStoreModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StdStoreModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StdStoreModal.vue?vue&type=template&id=3f269bde&\"\nimport script from \"./StdStoreModal.vue?vue&type=script&lang=js&\"\nexport * from \"./StdStoreModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{staticClass:\"c-modal-import-tree\",attrs:{\"show-cancel\":!_vm.inputIsValid,\"show-confirm\":_vm.inputIsValid},on:{\"confirm\":_vm.confirm},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.modalTitle)+\" \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.confirmText)+\" \")]},proxy:true}])},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.input),expression:\"input\"}],ref:\"input\",staticClass:\"c-modal-input c-modal-import-tree__input\",class:{ 'l-delete-input' : _vm.deleting },attrs:{\"type\":\"text\",\"maxlength\":\"1500\",\"disabled\":_vm.deleting},domProps:{\"value\":(_vm.input)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.confirm.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.emitClose.apply(null, arguments)}],\"input\":function($event){if($event.target.composing){ return; }_vm.input=$event.target.value}}}),_c('div',{staticClass:\"c-two-column\"},[_c('div',{staticClass:\"c-study-info l-modal-import-tree__tree-info\"},[(_vm.inputIsSecret)?_c('div',[_vm._v(\" ??? \")]):(_vm.inputIsValidTree)?[(_vm.invalidMessage)?_c('div',{staticClass:\"l-modal-import-tree__tree-info-line\",domProps:{\"innerHTML\":_vm._s(_vm.invalidMessage)}}):_vm._e(),(_vm.isImporting)?_c('StudyStringLine',{attrs:{\"tree\":_vm.combinedTree,\"into-empty\":false}}):_vm._e(),_c('StudyStringLine',{attrs:{\"tree\":_vm.importedTree,\"into-empty\":true}}),(_vm.deleting && _vm.importedTree.hasInfo)?_c('StudyTreeInfo',{attrs:{\"header-text\":\"Study Preset contains:\",\"tree-status\":_vm.importedTree}}):_vm._e(),(!_vm.deleting && !_vm.isImporting && _vm.importedTree.hasInfo)?_c('StudyTreeInfo',{attrs:{\"header-text\":\"Status after loading with no studies:\",\"tree-status\":_vm.importedTree}}):_vm._e(),(!_vm.deleting && _vm.combinedTree.hasInfo)?_c('StudyTreeInfo',{attrs:{\"header-text\":\"Status after loading with current tree:\",\"tree-status\":_vm.combinedTree}}):_vm._e()]:_vm._e(),(!_vm.deleting && !_vm.inputIsValidTree && _vm.hasInput)?_c('div',[_vm._v(\" Not a valid tree \")]):_vm._e()],2),_c('div',{staticClass:\"c-study-preview\"},[_c('StudyStringPreview',{attrs:{\"show-preview\":_vm.inputIsValidTree,\"new-studies\":!_vm.isImporting || (_vm.canEternity && _vm.respecAndLoad) ? _vm.importedTree.newStudiesArray\n : _vm.combinedTree.newStudiesArray,\"disregard-current-studies\":!_vm.isImporting || (_vm.canEternity && _vm.respecAndLoad)}})],1)]),(!_vm.isImporting && _vm.inputIsValidTree)?_c('div',[_c('br'),(!_vm.deleting)?_c('PrimaryButton',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:('This will format the study preset text, for example, changing \\'a,b,c|d\\' to \\'a, b, c | d\\'.'),expression:\"'This will format the study preset text, for example, changing \\\\'a,b,c|d\\\\' to \\\\'a, b, c | d\\\\'.'\"}],on:{\"click\":_vm.convertInputShorthands}},[_vm._v(\" Format Preset Text \")]):_vm._e()],1):_vm._e(),(_vm.isImporting)?_c('span',[_c('br'),_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.canEternity ? '' : 'You are currently unable to eternity, so this will only do a normal load.'),expression:\"canEternity ? '' : 'You are currently unable to eternity, so this will only do a normal load.'\"}],staticClass:\"c-modal__confirmation-toggle\",on:{\"click\":function($event){_vm.respecAndLoad = !_vm.respecAndLoad}}},[_c('div',{class:{\n 'c-modal__confirmation-toggle__checkbox': true,\n 'c-modal__confirmation-toggle__checkbox--active': _vm.respecAndLoad,\n }},[(_vm.respecAndLoad)?_c('span',{staticClass:\"fas fa-check\"}):_vm._e()]),_c('span',{staticClass:\"c-modal__confirmation-toggle__text\"},[_vm._v(\" Also respec tree and eternity \"),(!_vm.canEternity)?_c('span',{staticClass:\"c-modal__confirmation-toggle__warning\"},[_vm._v(\" ! \")]):_vm._e()])])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-modal-import-tree__tree-info-line\"},[(_vm.tree.timeTheorems === 0 && _vm.tree.spaceTheorems === 0)?_c('div',[_c('i',[_vm._v(\"Importing this \"+_vm._s(_vm.importDestString)+\" will not purchase any new Time Studies.\")])]):_c('div',[_vm._v(\" Importing \"+_vm._s(_vm.importDestString)+\" will purchase: \"),_c('br'),_vm._v(\" \"+_vm._s(_vm.tree.newStudies)+\" (Cost: \"+_vm._s(_vm.formatTheoremCost(_vm.tree.timeTheorems, _vm.tree.spaceTheorems))+\") \")]),_c('br')])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyStringLine.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyStringLine.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StudyStringLine.vue?vue&type=template&id=c66ba3d2&\"\nimport script from \"./StudyStringLine.vue?vue&type=script&lang=js&\"\nexport * from \"./StudyStringLine.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"l-study-string-preview__tree--wrapper\"},[(_vm.showPreview)?_c('div',{staticClass:\"l-time-study-tree l-study-string-preview__tree\",style:(_vm.treeStyleObject)},[_vm._l((_vm.studies),function(setup){return _c('PseudoTimeStudyButton',{key:setup.study.type.toString() + setup.study.id.toString(),attrs:{\"setup\":setup,\"force-is-bought\":_vm.getStudyForceBoughtState(_vm.studyString(setup.study)),\"is-new-from-import\":!_vm.disregardCurrentStudies && _vm.newStudies.includes(_vm.studyString(setup.study))}})}),_c('svg',{staticClass:\"l-time-study-connection\",style:(_vm.treeStyleObject)},_vm._l((_vm.connections),function(setup,index){return _c('PseudoTimeStudyConnection',{key:'connection' + index,attrs:{\"force-is-bought\":_vm.getConnectionForceBoughtState(setup),\"setup\":setup}})}),1)],2):_c('span',{staticClass:\"c-unavailable-warning\"},[_vm._v(\" Preview Unavailable \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('button',{class:[_vm.classObject, _vm.studyClass],style:(_vm.styleObject)},[_vm._v(\" \"+_vm._s(_vm.studyString)+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PseudoTimeStudyButton.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PseudoTimeStudyButton.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PseudoTimeStudyButton.vue?vue&type=template&id=10ee1de0&scoped=true&\"\nimport script from \"./PseudoTimeStudyButton.vue?vue&type=script&lang=js&\"\nexport * from \"./PseudoTimeStudyButton.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PseudoTimeStudyButton.vue?vue&type=style&index=0&id=10ee1de0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"10ee1de0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.isOverridden)?_c('line',{class:_vm.classObject,attrs:{\"x1\":_vm.percents(_vm.setup.x1),\"y1\":_vm.percents(_vm.setup.y1),\"x2\":_vm.percents(_vm.setup.x2),\"y2\":_vm.percents(_vm.setup.y2)}}):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PseudoTimeStudyConnection.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./PseudoTimeStudyConnection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PseudoTimeStudyConnection.vue?vue&type=template&id=6dda8e60&scoped=true&\"\nimport script from \"./PseudoTimeStudyConnection.vue?vue&type=script&lang=js&\"\nexport * from \"./PseudoTimeStudyConnection.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PseudoTimeStudyConnection.vue?vue&type=style&index=0&id=6dda8e60&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6dda8e60\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyStringPreview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyStringPreview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StudyStringPreview.vue?vue&type=template&id=09d9af6c&scoped=true&\"\nimport script from \"./StudyStringPreview.vue?vue&type=script&lang=js&\"\nexport * from \"./StudyStringPreview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./StudyStringPreview.vue?vue&type=style&index=0&id=09d9af6c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"09d9af6c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-tree-info\"},[_c('span',{staticClass:\"l-tree-info-header\",domProps:{\"innerHTML\":_vm._s(_vm.headerText)}}),(_vm.treeStatus.firstPaths)?_c('div',{staticClass:\"l-modal-import-tree__tree-info-line\"},[_vm._v(\" Dimension Split: \"+_vm._s(_vm.treeStatus.firstPaths)+\" \")]):_vm._e(),(_vm.treeStatus.secondPaths)?_c('div',{staticClass:\"l-modal-import-tree__tree-info-line\"},[_vm._v(\" Pace Split: \"+_vm._s(_vm.treeStatus.secondPaths)+\" \")]):_vm._e(),(_vm.treeStatus.ec > 0)?_c('div',{staticClass:\"l-modal-import-tree__tree-info-line\"},[_vm._v(\" Eternity Challenge: \"+_vm._s(_vm.treeStatus.ec)+\" \"+_vm._s(_vm.treeStatus.startEC ? \"(will start)\" : \"\")+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyTreeInfo.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyTreeInfo.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StudyTreeInfo.vue?vue&type=template&id=493fb126&scoped=true&\"\nimport script from \"./StudyTreeInfo.vue?vue&type=script&lang=js&\"\nexport * from \"./StudyTreeInfo.vue?vue&type=script&lang=js&\"\nimport style0 from \"./StudyTreeInfo.vue?vue&type=style&index=0&id=493fb126&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"493fb126\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyStringModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./StudyStringModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./StudyStringModal.vue?vue&type=template&id=35f516e0&scoped=true&\"\nimport script from \"./StudyStringModal.vue?vue&type=script&lang=js&\"\nexport * from \"./StudyStringModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./StudyStringModal.vue?vue&type=style&index=0&id=35f516e0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"35f516e0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"switchAutomatorMode\"},on:{\"confirm\":_vm.toggleAutomatorMode},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Change Automator to \"+_vm._s(_vm.otherMode)+\" editor \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Change Modes \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" This will stop your current script if it is running! \"),(_vm.errorCount)?_c('div',[_c('br'),_vm._v(\" Your script has some errors which may not get converted properly to \"+_vm._s(_vm.otherMode)+\" mode. Continuing on will make the Automator attempt to parse these lines anyway, although some information may get lost or not be converted properly. \")]):_vm._e(),(_vm.lostBlocks)?_c('b',[_c('br'),_vm._v(\" Warning: Your script also currently has some lines which cannot interpreted as particular commands. These lines will end up being deleted since there is no block they can be converted into. If an error occurs at the start of a loop or IF, this may end up deleting large portions of your script! \"),_c('span',{staticClass:\"l-lost-text\"},[_vm._v(\" Changing editor modes right now will cause \"+_vm._s(_vm.quantifyInt(\"line\", _vm.lostBlocks))+\" of code to be irreversibly lost! \")])]):_vm._e(),_c('br'),_c('span',{staticClass:\"l-lost-text\"},[_vm._v(\" Hiding this confirmation is not recommended, as it may cause parts of scripts to be immediately and irreversibly lost if your script has errors when attempting to switch modes. \")]),_c('br'),_c('br'),_vm._v(\" Are you sure you want to change to the \"+_vm._s(_vm.otherMode)+\" editor? \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SwitchAutomatorEditorModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SwitchAutomatorEditorModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SwitchAutomatorEditorModal.vue?vue&type=template&id=6ca17165&scoped=true&\"\nimport script from \"./SwitchAutomatorEditorModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SwitchAutomatorEditorModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SwitchAutomatorEditorModal.vue?vue&type=style&index=0&id=6ca17165&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6ca17165\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" Visual Changes \")]},proxy:true},{key:\"cancel-text\",fn:function(){return [_vm._v(\" Remain \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Swap \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" We noticed that you've loaded an old save; a few visual changes have been made since older versions of the game: \"),_c('br'),_c('br'),_c('div',{staticClass:\"c-visual-change-list\"},_vm._l((_vm.listEntries),function(entry,i){return _c('div',{key:i,staticClass:\"c-visual-change-list-entry\"},[_c('b',[_vm._v(\"•\")]),_vm._v(\" \"+_vm._s(entry)+\" \")])}),0),_c('br'),_c('br'),_vm._v(\" You can change between the Classic UI which older versions of the game used and the newer Modern UI in the Visual Options tab at any time. Would you like to swap to the Modern UI now? \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UiChoiceModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UiChoiceModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UiChoiceModal.vue?vue&type=template&id=369e8fe0&scoped=true&\"\nimport script from \"./UiChoiceModal.vue?vue&type=script&lang=js&\"\nexport * from \"./UiChoiceModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UiChoiceModal.vue?vue&type=style&index=0&id=369e8fe0&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"369e8fe0\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"option\":\"glyphUndo\"},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are about to undo equipping a Glyph \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text c-text-wrapper\"},[_vm._v(\" The last equipped Glyph will be removed. Reality will be reset, but some things will be restored to what they were when it was equipped: \"),_c('br'),_c('div',{staticClass:\"c-text-wrapper\"},[_c('br'),_vm._v(\"- Antimatter, Infinity Points, and Eternity Points \"),_c('br'),_vm._v(\"- Dilation Upgrades, Tachyon Particles, and Dilated Time \"),_c('br'),_vm._v(\"- Time Theorems and Eternity Challenge completions \"),_c('br'),_vm._v(\"- Time Dimension and Reality unlocks \"),_c('br'),_vm._v(\"- Time in current Infinity/Eternity/Reality \"),(_vm.showStoredGameTime)?_c('span',[_c('br'),_vm._v(\"- Stored game time\")]):_vm._e()]),_c('br'),_vm._v(\" Note that if you invalidate special requirements for certain things (such as the achievement for completing a Reality without producing antimatter), they will remain invalid even after undoing. In those cases, you will need to complete the conditions in a single Reality without using undo. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UndoGlyphModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UndoGlyphModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UndoGlyphModal.vue?vue&type=template&id=070fe22a&scoped=true&\"\nimport script from \"./UndoGlyphModal.vue?vue&type=script&lang=js&\"\nexport * from \"./UndoGlyphModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UndoGlyphModal.vue?vue&type=style&index=0&id=070fe22a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"070fe22a\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{on:{\"confirm\":_vm.disableLock},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.upgradeStr)+\" Condition Lock \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" Disable Lock \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},[_vm._v(\" Are you sure you wish to \"+_vm._s(_vm.lockEvent)+\"? Doing this right now will cause you to \"),_c('span',{staticClass:\"l-emphasis\"},[_vm._v(\" fail the requirement for the \"+_vm._s(_vm.upgradeStr)+\" \\\"\"+_vm._s(_vm.upgrade.name)+\"\\\" \")]),_c('span',{attrs:{\"ach-tooltip\":_vm.upgrade.requirement}},[_c('i',{staticClass:\"fas fa-question-circle\"})]),_c('br'),_c('br'),_vm._v(\" Selecting \\\"Cancel\\\" will close this modal with no effect, while selecting \\\"Disable Lock\\\" will disable the requirement check for this upgrade and prevent this message from reappearing unless you turn it back on. \"),_c('br'),_c('br'),_vm._v(\" Neither of these options will perform the action you just attempted, so you will need to try again. \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UpgradeMechanicLockModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./UpgradeMechanicLockModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UpgradeMechanicLockModal.vue?vue&type=template&id=576557b4&scoped=true&\"\nimport script from \"./UpgradeMechanicLockModal.vue?vue&type=script&lang=js&\"\nexport * from \"./UpgradeMechanicLockModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UpgradeMechanicLockModal.vue?vue&type=style&index=0&id=576557b4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"576557b4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapperChoice',{attrs:{\"show-cancel\":false},on:{\"confirm\":_vm.handleYesClick},scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" You are Warping Reality \")]},proxy:true},{key:\"confirm-text\",fn:function(){return [_vm._v(\" WARP!! \")]},proxy:true}])},[_c('div',{staticClass:\"c-modal-message__text\"},_vm._l((_vm.message),function(line,index){return _c('span',{key:index},[_vm._v(\" \"+_vm._s(line)+\" \"),_c('br')])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpRealityModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./WarpRealityModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./WarpRealityModal.vue?vue&type=template&id=4bc01917&\"\nimport script from \"./WarpRealityModal.vue?vue&type=script&lang=js&\"\nexport * from \"./WarpRealityModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{scopedSlots:_vm._u([{key:\"header\",fn:function(){return [_vm._v(\" List of full nerf effects of specific Hostilities \")]},proxy:true}])},[_c('div',{staticClass:\"pelle-effects-container\"},_vm._l((_vm.nerfs),function(nerf,idx){return _c('p',{key:idx},[_vm._v(\" \"+_vm._s(nerf)+\" \")])}),0),_c('PrimaryButton',{staticClass:\"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn\",on:{\"click\":_vm.emitClose}},[_vm._v(\" Okay \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CorruptionFullEffectsModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CorruptionFullEffectsModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CorruptionFullEffectsModal.vue?vue&type=template&id=27faf645&scoped=true&\"\nimport script from \"./CorruptionFullEffectsModal.vue?vue&type=script&lang=js&\"\nexport * from \"./CorruptionFullEffectsModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CorruptionFullEffectsModal.vue?vue&type=style&index=0&id=27faf645&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"27faf645\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ModalWrapper',{staticClass:\"c-modal-s12-games\"},[_c('div',{staticClass:\"c-modal__title\"},[_vm._v(\" Games \")]),_c('S12GameEntries'),_c('div',{staticClass:\"c-modal-s12-games__magnified-display\"},[(_vm.S12Games.selected !== -1)?[_c('img',{staticClass:\"c-modal-s12-games__magnified-display__img\",attrs:{\"src\":(\"images/s12/\" + (_vm.S12Games.entries[_vm.S12Games.selected].image))}}),_c('b',{staticClass:\"c-modal-s12-games__magnified-display__text\"},[_vm._v(\" \"+_vm._s(_vm.S12Games.entries[_vm.S12Games.selected].name)+\" \")])]:_vm._e()],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-s12-games-container\"},_vm._l((_vm.S12Games.entries),function(game,idx){return _c('div',{key:game.name,staticClass:\"c-s12-game\",class:{ 'c-s12-game--selected': _vm.S12Games.selected === idx, },on:{\"click\":function($event){return _vm.handleClick(idx)}}},[_c('div',{staticClass:\"c-s12-game__inner\"},[_c('img',{staticClass:\"c-s12-game__img\",attrs:{\"src\":(\"images/s12/\" + (game.image))}}),_c('div',{staticClass:\"c-s12-game__text\"},[_vm._v(\" \"+_vm._s(game.name)+\" \")])])])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default {\r\n entries: [{\r\n name: \"FE000000\",\r\n link: \"https://dan-simon.github.io/misc/fe000000/\",\r\n image: \"game--hex-game.png\"\r\n },\r\n {\r\n name: \"Trimps\",\r\n link: \"https://trimps.github.io/\",\r\n image: \"game--trimps.png\"\r\n },\r\n {\r\n name: \"Mine Defense\",\r\n link: \"http://scholtek.com/minedefense\",\r\n image: \"game--mine-defense.png\"\r\n },\r\n {\r\n name: \"Wizard and Minion Idle\",\r\n link: \"https://www.kongregate.com/games/Oninou/wami\",\r\n image: \"game--wami.png\"\r\n },\r\n {\r\n name: \"Anti-Idle\",\r\n link: \"https://www.kongregate.com/games/Tukkun/anti-idle-the-game\",\r\n image: \"game--anti-idle.png\"\r\n },\r\n {\r\n name: \"Synergism\",\r\n link: \"https://pseudo-corp.github.io/SynergismOfficial/\",\r\n image: \"game--synergism.png\"\r\n },\r\n {\r\n name: \"Universal Paperclips\",\r\n link: \"https://www.decisionproblem.com/paperclips/\",\r\n image: \"game--universal-paperclips.png\"\r\n },\r\n {\r\n name: \"Monies 2\",\r\n link: \"https://sneekxy.nmtechgroup.com/monies2/\",\r\n image: \"game--monies2.png\"\r\n },\r\n {\r\n name: \"The First Alkahistorian\",\r\n link: \"https://nagshell.github.io/elemental-inception-incremental/\",\r\n image: \"game--alkahistorian.png\"\r\n },\r\n {\r\n name: \"Melvor Idle\",\r\n link: \"https://melvoridle.com/\",\r\n image: \"game--melvor-idle.svg\"\r\n }],\r\n selected: -1,\r\n};\r\n","\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12GameEntries.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12GameEntries.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./S12GameEntries.vue?vue&type=template&id=25a74b90&scoped=true&\"\nimport script from \"./S12GameEntries.vue?vue&type=script&lang=js&\"\nexport * from \"./S12GameEntries.vue?vue&type=script&lang=js&\"\nimport style0 from \"./S12GameEntries.vue?vue&type=style&index=0&id=25a74b90&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"25a74b90\",\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12GamesModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/cache-loader/dist/cjs.js??ruleSet[0].rules[0].use[0]!../../../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./S12GamesModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./S12GamesModal.vue?vue&type=template&id=02f6719c&scoped=true&\"\nimport script from \"./S12GamesModal.vue?vue&type=script&lang=js&\"\nexport * from \"./S12GamesModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./S12GamesModal.vue?vue&type=style&index=0&id=02f6719c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"02f6719c\",\n null\n \n)\n\nexport default component.exports","import { ProgressChecker } from \"./storage/progress-checker\";\r\n\r\nimport CloudInvalidDataModal from \"@/components/modals/cloud/CloudInvalidDataModal\";\r\nimport CloudLoadConflictModal from \"@/components/modals/cloud/CloudLoadConflictModal\";\r\nimport CloudSaveConflictModal from \"@/components/modals/cloud/CloudSaveConflictModal\";\r\nimport EternityChallengeStartModal from \"@/components/modals/challenges/EternityChallengeStartModal\";\r\nimport InfinityChallengeStartModal from \"@/components/modals/challenges/InfinityChallengeStartModal\";\r\nimport MessageModal from \"@/components/modals/MessageModal\";\r\nimport NormalChallengeStartModal from \"@/components/modals/challenges/NormalChallengeStartModal\";\r\n\r\nimport AntimatterGalaxyModal from \"@/components/modals/prestige/AntimatterGalaxyModal\";\r\nimport ArmageddonModal from \"@/components/modals/prestige/ArmageddonModal\";\r\nimport BigCrunchModal from \"@/components/modals/prestige/BigCrunchModal\";\r\nimport DimensionBoostModal from \"@/components/modals/prestige/DimensionBoostModal\";\r\nimport EnterCelestialsModal from \"@/components/modals/prestige/EnterCelestialsModal\";\r\nimport EnterDilationModal from \"@/components/modals/prestige/EnterDilationModal\";\r\nimport EternityModal from \"@/components/modals/prestige/EternityModal\";\r\nimport ExitChallengeModal from \"@/components/modals/prestige/ExitChallengeModal\";\r\nimport ExitDilationModal from \"@/components/modals/prestige/ExitDilationModal\";\r\nimport HardResetModal from \"@/components/modals/prestige/HardResetModal\";\r\nimport RealityModal from \"@/components/modals/prestige/RealityModal\";\r\nimport ReplicantiGalaxyModal from \"@/components/modals/prestige/ReplicantiGalaxyModal\";\r\nimport ResetRealityModal from \"@/components/modals/prestige/ResetRealityModal\";\r\nimport ResetMendingModal from \"@/components/modals/prestige/ResetMendingModal\";\r\n\r\nimport AnimationOptionsModal from \"@/components/modals/options/AnimationOptionsModal\";\r\nimport AwayProgressOptionsModal from \"@/components/modals/options/AwayProgressOptionsModal\";\r\nimport BackupWindowModal from \"@/components/modals/options/BackupWindowModal\";\r\nimport ConfirmationOptionsModal from \"@/components/modals/options/ConfirmationOptionsModal\";\r\nimport CosmeticSetChoiceModal from \"@/components/modals/options/glyph-appearance/CosmeticSetChoiceModal\";\r\nimport GlyphDisplayOptionsModal from \"@/components/modals/options/glyph-appearance/GlyphDisplayOptionsModal\";\r\nimport HiddenTabsModal from \"@/components/modals/options/hidden-tabs/HiddenTabsModal\";\r\nimport HotkeysModal from \"@/components/modals/options/HotkeysModal\";\r\nimport InfoDisplayOptionsModal from \"@/components/modals/options/InfoDisplayOptionsModal\";\r\nimport NewsOptionsModal from \"@/components/modals/options/NewsOptionsModal\";\r\nimport PreferredTreeModal from \"@/components/modals/options/PreferredTreeModal\";\r\nimport SingleGlyphAppearanceModal from \"@/components/modals/options/glyph-appearance/SingleGlyphAppearanceModal\";\r\nimport SpeedUpModal from \"@/components/modals/options/SpeedUpModal\"\r\nimport SpeedUpReportModal from \"@/components/modals/options/SpeedUpReportModal\"\r\n\r\nimport DeleteCompanionGlyphModal from \"@/components/modals/glyph-management/DeleteCompanionGlyphModal\";\r\nimport DeleteGlyphModal from \"@/components/modals/glyph-management/DeleteGlyphModal\";\r\nimport PurgeAllRejectedGlyphsModal from \"@/components/modals/glyph-management/PurgeAllRejectedGlyphsModal\";\r\nimport PurgeAllUnprotectedGlyphsModal from \"@/components/modals/glyph-management/PurgeAllUnprotectedGlyphsModal\";\r\nimport PurgeGlyphModal from \"@/components/modals/glyph-management/PurgeGlyphModal\";\r\nimport RefineGlyphModal from \"@/components/modals/glyph-management/RefineGlyphModal\";\r\nimport SacrificeGlyphModal from \"@/components/modals/glyph-management/SacrificeGlyphModal\";\r\n\r\nimport AutobuyerEditModal from \"@/components/modals/AutobuyerEditModal\";\r\nimport AutomatorScriptTemplate from \"@/components/modals/AutomatorScriptTemplate\";\r\nimport AwayProgressModal from \"@/components/modals/AwayProgressModal\";\r\nimport BreakInfinityModal from \"@/components/modals/BreakInfinityModal\";\r\nimport CatchupModal from \"@/components/modals/catchup/CatchupModal\";\r\nimport ChangelogModal from \"@/components/modals/ChangelogModal\";\r\nimport ChangeNameModal from \"@/components/modals/ChangeNameModal\";\r\nimport ClearConstantsModal from \"@/components/modals/ClearConstantsModal\";\r\nimport CreditsModal from \"@/components/modals/CreditsModal\";\r\nimport DeleteAutomatorScriptModal from \"@/components/modals/DeleteAutomatorScriptModal\";\r\nimport EnslavedHintsModal from \"@/components/modals/EnslavedHintsModal\";\r\nimport GlyphSetSaveDeleteModal from \"@/components/modals/GlyphSetSaveDeleteModal\";\r\nimport GlyphShowcasePanelModal from \"@/components/modals/GlyphShowcasePanelModal\";\r\nimport H2PModal from \"@/components/modals/H2PModal\";\r\nimport ImportAutomatorDataModal from \"@/components/modals/ImportAutomatorDataModal\";\r\nimport ImportFilterModal from \"@/components/modals/ImportFilterModal\";\r\nimport ImportSaveModal from \"@/components/modals/ImportSaveModal\";\r\nimport ImportTimeStudyConstants from \"@/components/modals/ImportTimeStudyConstants\";\r\nimport InformationModal from \"@/components/modals/InformationModal\";\r\nimport LoadGameModal from \"@/components/modals/LoadGameModal\";\r\nimport ModifySeedModal from \"@/components/modals/ModifySeedModal\";\r\nimport PelleEffectsModal from \"@/components/modals/PelleEffectsModal\";\r\nimport RealityGlyphCreationModal from \"@/components/modals/RealityGlyphCreationModal\";\r\nimport ReplaceGlyphModal from \"@/components/modals/ReplaceGlyphModal\";\r\nimport RespecIAPModal from \"@/components/modals/RespecIAPModal\";\r\nimport SacrificeModal from \"@/components/modals/SacrificeModal\";\r\nimport SingularityMilestonesModal from \"@/components/modals/SingularityMilestonesModal\";\r\nimport SpeedrunModeModal from \"@/components/modals/SpeedrunModeModal\";\r\nimport StdStoreModal from \"@/components/modals/StdStoreModal\";\r\nimport StudyStringModal from \"@/components/modals/StudyStringModal\";\r\nimport SwitchAutomatorEditorModal from \"@/components/modals/SwitchAutomatorEditorModal\";\r\nimport UiChoiceModal from \"@/components/modals/UiChoiceModal\";\r\nimport UndoGlyphModal from \"@/components/modals/UndoGlyphModal\";\r\nimport UpgradeMechanicLockModal from \"@/components/modals/UpgradeMechanicLockModal\";\r\nimport WarpRealityModal from \"@/components/modals/WarpRealityModal\";\r\nimport CorruptionFullEffectsModal from \"@/components/modals/CorruptionFullEffectsModal\";\r\n\r\nimport S12GamesModal from \"@/components/modals/secret-themes/S12GamesModal\";\r\n\r\nlet nextModalID = 0;\r\nexport class Modal {\r\n constructor(component, priority = 0, closeEvent) {\r\n this._component = component;\r\n this._modalConfig = {};\r\n this._priority = priority;\r\n this._closeEvent = closeEvent;\r\n }\r\n\r\n // We can't handle this in the Vue components because if the modal order changes, all the event listeners from the\r\n // top modal end up getting removed from the EventHub due to the component being temporarily destroyed. This could\r\n // result in the component sticking around because an event it was listening for happened while it wasn't on top.\r\n applyCloseListeners(closeEvent) {\r\n // Most of the time the close event will be a prestige event, in which case we want it to trigger on all higher\r\n // prestiges as well\r\n const prestigeOrder = [GAME_EVENT.DIMBOOST_AFTER, GAME_EVENT.GALAXY_RESET_AFTER, GAME_EVENT.BIG_CRUNCH_AFTER,\r\n GAME_EVENT.ETERNITY_RESET_AFTER, GAME_EVENT.REALITY_RESET_AFTER];\r\n let shouldClose = false;\r\n for (const prestige of prestigeOrder) {\r\n if (prestige === closeEvent) shouldClose = true;\r\n if (shouldClose) EventHub.ui.on(prestige, () => this.removeFromQueue(), this._component);\r\n }\r\n\r\n // In a few cases we want to trigger a close based on a non-prestige event, so if the specified event wasn't in\r\n // the prestige array above, we just add it on its own\r\n if (!shouldClose) EventHub.ui.on(closeEvent, () => this.removeFromQueue(), this._component);\r\n }\r\n\r\n show(modalConfig) {\r\n if (!GameUI.initialized) return;\r\n this._uniqueID = nextModalID++;\r\n this._props = Object.assign({}, modalConfig || {});\r\n if (this._closeEvent) this.applyCloseListeners(this._closeEvent);\r\n if (modalConfig?.closeEvent) this.applyCloseListeners(modalConfig.closeEvent);\r\n\r\n const modalQueue = ui.view.modal.queue;\r\n // Add this modal to the front of the queue and sort based on priority to ensure priority is maintained.\r\n modalQueue.unshift(this);\r\n Modal.sortModalQueue();\r\n }\r\n\r\n get isOpen() {\r\n return ui.view.modal.current === this;\r\n }\r\n\r\n get component() {\r\n return this._component;\r\n }\r\n\r\n get props() {\r\n return this._props;\r\n }\r\n\r\n get priority() {\r\n return this._priority;\r\n }\r\n\r\n removeFromQueue() {\r\n EventHub.ui.offAll(this._component);\r\n ui.view.modal.queue = ui.view.modal.queue.filter(m => m._uniqueID !== this._uniqueID);\r\n if (ui.view.modal.queue.length === 0) ui.view.modal.current = undefined;\r\n else ui.view.modal.current = ui.view.modal.queue[0];\r\n }\r\n\r\n static sortModalQueue() {\r\n const modalQueue = ui.view.modal.queue;\r\n modalQueue.sort((x, y) => y.priority - x.priority);\r\n // Filter out multiple instances of the same modal.\r\n const singleQueue = [...new Set(modalQueue)];\r\n ui.view.modal.queue = singleQueue;\r\n ui.view.modal.current = singleQueue[0];\r\n }\r\n\r\n static hide() {\r\n if (!GameUI.initialized) return;\r\n ui.view.modal.queue.shift();\r\n if (ui.view.modal.queue.length === 0) ui.view.modal.current = undefined;\r\n else ui.view.modal.current = ui.view.modal.queue[0];\r\n ui.view.modal.cloudConflict = [];\r\n }\r\n\r\n static hideAll() {\r\n if (!GameUI.initialized) return;\r\n while (ui.view.modal.queue.length) {\r\n if (ui.view.modal.queue[0].hide) {\r\n ui.view.modal.queue[0].hide();\r\n } else {\r\n Modal.hide();\r\n }\r\n }\r\n ui.view.modal.current = undefined;\r\n }\r\n\r\n static get isOpen() {\r\n return ui.view.modal.current instanceof this;\r\n }\r\n}\r\n\r\nclass ChallengeConfirmationModal extends Modal {\r\n show(id) {\r\n super.show({ id });\r\n }\r\n}\r\n\r\nclass TimeModal extends Modal {\r\n show(diff) {\r\n super.show({ diff });\r\n }\r\n}\r\n\r\n// If a new modal which can be shown in the same queue multiple times needs to be added\r\n// Additional code needs to be written to account for that\r\n\r\nModal.startEternityChallenge = new ChallengeConfirmationModal(EternityChallengeStartModal);\r\nModal.startInfinityChallenge = new ChallengeConfirmationModal(InfinityChallengeStartModal);\r\nModal.startNormalChallenge = new ChallengeConfirmationModal(NormalChallengeStartModal);\r\n\r\nModal.catchup = new TimeModal(CatchupModal, -1);\r\n\r\nModal.dimensionBoost = new Modal(DimensionBoostModal, 1, GAME_EVENT.DIMBOOST_AFTER);\r\n\r\nModal.antimatterGalaxy = new Modal(AntimatterGalaxyModal, 1, GAME_EVENT.GALAXY_RESET_AFTER);\r\nModal.bigCrunch = new Modal(BigCrunchModal, 1, GAME_EVENT.BIG_CRUNCH_AFTER);\r\nModal.exitChallenge = new Modal(ExitChallengeModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.replicantiGalaxy = new Modal(ReplicantiGalaxyModal, 1, GAME_EVENT.ETERNITY_RESET_AFTER);\r\nModal.eternity = new Modal(EternityModal, 1, GAME_EVENT.ETERNITY_RESET_AFTER);\r\nModal.enterDilation = new Modal(EnterDilationModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.exitDilation = new Modal(ExitDilationModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.reality = new Modal(RealityModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.resetReality = new Modal(ResetRealityModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.celestials = new Modal(EnterCelestialsModal, 1);\r\nModal.hardReset = new Modal(HardResetModal, 1);\r\nModal.backupWindows = new Modal(BackupWindowModal, 1);\r\nModal.enterSpeedrun = new Modal(SpeedrunModeModal);\r\nModal.modifySeed = new Modal(ModifySeedModal);\r\nModal.changeName = new Modal(ChangeNameModal);\r\nModal.armageddon = new Modal(ArmageddonModal, 1);\r\nModal.mending = new Modal(ResetMendingModal,1);\r\n\r\nModal.confirmationOptions = new Modal(ConfirmationOptionsModal);\r\nModal.infoDisplayOptions = new Modal(InfoDisplayOptionsModal);\r\nModal.awayProgressOptions = new Modal(AwayProgressOptionsModal);\r\nModal.glyphDisplayOptions = new Modal(GlyphDisplayOptionsModal);\r\nModal.cosmeticSetChoice = new Modal(CosmeticSetChoiceModal);\r\nModal.singleGlyphAppearance = new Modal(SingleGlyphAppearanceModal);\r\nModal.hotkeys = new Modal(HotkeysModal);\r\nModal.newsOptions = new Modal(NewsOptionsModal);\r\nModal.animationOptions = new Modal(AnimationOptionsModal);\r\nModal.hiddenTabs = new Modal(HiddenTabsModal);\r\nModal.preferredTree = new Modal(PreferredTreeModal);\r\nModal.speedUp = new Modal(SpeedUpModal);\r\nModal.speedUpReport = new Modal(SpeedUpReportModal);\r\n\r\nModal.upgradeLock = new Modal(UpgradeMechanicLockModal, 1);\r\nModal.deleteCompanion = new Modal(DeleteCompanionGlyphModal, 1);\r\nModal.glyphDelete = new Modal(DeleteGlyphModal, 1, GAME_EVENT.GLYPHS_CHANGED);\r\nModal.glyphPurge = new Modal(PurgeGlyphModal, 1, GAME_EVENT.GLYPHS_CHANGED);\r\nModal.glyphSacrifice = new Modal(SacrificeGlyphModal, 1, GAME_EVENT.GLYPHS_CHANGED);\r\nModal.glyphRefine = new Modal(RefineGlyphModal, 1, GAME_EVENT.GLYPHS_CHANGED);\r\nModal.deleteAllUnprotectedGlyphs = new Modal(PurgeAllUnprotectedGlyphsModal, 1, GAME_EVENT.GLYPHS_CHANGED);\r\nModal.deleteAllRejectedGlyphs = new Modal(PurgeAllRejectedGlyphsModal, 1, GAME_EVENT.GLYPHS_CHANGED);\r\n\r\nModal.glyphShowcasePanel = new Modal(GlyphShowcasePanelModal);\r\nModal.glyphUndo = new Modal(UndoGlyphModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.glyphReplace = new Modal(ReplaceGlyphModal, 1, GAME_EVENT.REALITY_RESET_AFTER);\r\nModal.enslavedHints = new Modal(EnslavedHintsModal);\r\nModal.realityGlyph = new Modal(RealityGlyphCreationModal);\r\nModal.glyphSetSaveDelete = new Modal(GlyphSetSaveDeleteModal);\r\nModal.uiChoice = new Modal(UiChoiceModal);\r\nModal.h2p = new Modal(H2PModal);\r\nModal.information = new Modal(InformationModal);\r\nModal.credits = new Modal(CreditsModal, 1);\r\nModal.changelog = new Modal(ChangelogModal, 1);\r\nModal.awayProgress = new Modal(AwayProgressModal);\r\nModal.loadGame = new Modal(LoadGameModal);\r\nModal.import = new Modal(ImportSaveModal);\r\nModal.importFilter = new Modal(ImportFilterModal);\r\nModal.importScriptData = new Modal(ImportAutomatorDataModal);\r\nModal.automatorScriptDelete = new Modal(DeleteAutomatorScriptModal);\r\nModal.automatorScriptTemplate = new Modal(AutomatorScriptTemplate);\r\nModal.switchAutomatorEditorMode = new Modal(SwitchAutomatorEditorModal);\r\nModal.clearAutomatorConstants = new Modal(ClearConstantsModal);\r\nModal.importTSConstants = new Modal(ImportTimeStudyConstants);\r\nModal.autobuyerEditModal = new Modal(AutobuyerEditModal);\r\nModal.shop = new Modal(StdStoreModal);\r\nModal.studyString = new Modal(StudyStringModal);\r\nModal.singularityMilestones = new Modal(SingularityMilestonesModal);\r\nModal.pelleEffects = new Modal(PelleEffectsModal);\r\nModal.sacrifice = new Modal(SacrificeModal, 1, GAME_EVENT.DIMBOOST_AFTER);\r\nModal.breakInfinity = new Modal(BreakInfinityModal, 1, GAME_EVENT.ETERNITY_RESET_AFTER);\r\nModal.respecIAP = new Modal(RespecIAPModal);\r\nModal.warpReality = new Modal(WarpRealityModal);\r\nModal.corruptionFullEffects = new Modal(CorruptionFullEffectsModal);\r\n\r\nModal.s12Games = new Modal(S12GamesModal);\r\n\r\nfunction getSaveInfo(save) {\r\n const resources = {\r\n realTimePlayed: 0,\r\n totalAntimatter: new Decimal(0),\r\n infinities: new Decimal(0),\r\n eternities: new Decimal(0),\r\n realities: 0,\r\n infinityPoints: new Decimal(0),\r\n eternityPoints: new Decimal(0),\r\n realityMachines: new Decimal(0),\r\n imaginaryMachines: 0,\r\n dilatedTime: new Decimal(0),\r\n bestLevel: 0,\r\n pelleAM: new Decimal(0),\r\n remnants: 0,\r\n realityShards: new Decimal(0),\r\n // This is a slight workaround to hide DT/level once Doomed\r\n pelleLore: 0,\r\n saveName: \"\",\r\n compositeProgress: 0,\r\n };\r\n // This code ends up getting run on raw save data before any migrations are applied, so we need to default to props\r\n // which only exist on the pre-reality version when applicable. Note that new Decimal(undefined) gives zero.\r\n resources.realTimePlayed = save.records?.realTimePlayed ?? 100 * save.totalTimePlayed;\r\n resources.totalAntimatter.copyFrom(new Decimal(save.records?.totalAntimatter));\r\n resources.infinities.copyFrom(new Decimal(save.infinities));\r\n resources.eternities.copyFrom(new Decimal(save.eternities));\r\n resources.realities = save.realities ?? 0;\r\n resources.infinityPoints.copyFrom(new Decimal(save.infinityPoints));\r\n resources.eternityPoints.copyFrom(new Decimal(save.eternityPoints));\r\n resources.realityMachines.copyFrom(new Decimal(save.reality?.realityMachines));\r\n resources.imaginaryMachines = save.reality?.iMCap ?? 0;\r\n // Use max DT instead of current DT because spending it can cause it to drop and trigger the conflict modal\r\n // unnecessarily. We only use current DT as a fallback (eg. loading a save from pre-reality versions)\r\n resources.dilatedTime.copyFrom(new Decimal(save.records?.thisReality.maxDT ?? (save.dilation?.dilatedTime ?? 0)));\r\n resources.bestLevel = save.records?.bestReality.glyphLevel ?? 0;\r\n resources.pelleAM.copyFrom(new Decimal(save.celestials?.pelle.records.totalAntimatter));\r\n resources.remnants = save.celestials?.pelle.remnants ?? 0;\r\n resources.realityShards.copyFrom(new Decimal(save.celestials?.pelle.realityShards));\r\n resources.pelleLore = save.celestials?.pelle.quoteBits ?? 0;\r\n resources.saveName = save.options?.saveFileName ?? \"\";\r\n resources.compositeProgress = ProgressChecker.getCompositeProgress(save);\r\n\r\n return resources;\r\n}\r\n\r\nModal.cloudSaveConflict = new Modal(CloudSaveConflictModal);\r\nModal.cloudLoadConflict = new Modal(CloudLoadConflictModal);\r\nModal.cloudInvalidData = new Modal(CloudInvalidDataModal);\r\n// eslint-disable-next-line max-params\r\nModal.addCloudConflict = function(saveId, saveComparison, cloudSave, localSave, onAccept) {\r\n Modal.hide();\r\n ui.view.modal.cloudConflict = {\r\n saveId,\r\n saveComparison,\r\n cloud: getSaveInfo(cloudSave),\r\n local: getSaveInfo(localSave),\r\n onAccept\r\n };\r\n};\r\n\r\nModal.addImportConflict = function(importingSave, currentSave) {\r\n Modal.hide();\r\n ui.view.modal.cloudConflict = {\r\n importingSave: getSaveInfo(importingSave),\r\n currentSave: getSaveInfo(currentSave)\r\n };\r\n};\r\n\r\nModal.message = new class extends Modal {\r\n show(text, props = {}, messagePriority = 0) {\r\n if (!GameUI.initialized) return;\r\n // It might be zero, so explicitly check for undefined\r\n if (this.currPriority === undefined) this.currPriority = messagePriority;\r\n else if (messagePriority < this.currPriority) return;\r\n\r\n super.show();\r\n this.message = text;\r\n this.callback = props.callback;\r\n this.closeButton = props.closeButton ?? false;\r\n EventHub.ui.offAll(this._component);\r\n if (props.closeEvent) this.applyCloseListeners(props.closeEvent);\r\n }\r\n\r\n hide() {\r\n EventHub.ui.offAll(this._component);\r\n this.currPriority = undefined;\r\n Modal.hide();\r\n }\r\n}(MessageModal, 2);\r\n","import { sha512_256 } from \"js-sha512\";\r\n\r\nexport const Theme = function Theme(name, config) {\r\n this.name = name;\r\n\r\n this.isDark = function() {\r\n return (this.isDefault() || name === \"S12\")\r\n ? player.options.UIType == 'Modern'\r\n : config.isDark;\r\n };\r\n\r\n this.isMetro = config.isMetro;\r\n\r\n this.isAnimated = config.isAnimated;\r\n\r\n this.isSecret = config.isSecret;\r\n\r\n this.isDefault = function() {\r\n return name === \"Normal\";\r\n };\r\n\r\n this.isAvailable = function() {\r\n if (!this.isSecret) return true;\r\n // Note: match[0] gets the full string of a match, here the initial S and number in a theme name.\r\n return player.secretUnlocks.themes.some(theme => theme.match(/^S[0-9]*/u)[0] === name);\r\n };\r\n\r\n this.displayName = function() {\r\n if (!this.isSecret || !this.isAvailable()) return name;\r\n // Secret themes are stored as \"S9Whatever\", so we need to strip the SN part\r\n return player.secretUnlocks.themes.find(theme => theme.match(/^S[0-9]*/u)[0] === name).replace(/^S[0-9]*/u, \"\");\r\n };\r\n\r\n this.set = function() {\r\n // Remove all entries in the class list from the class list\r\n document.body.classList.remove(...document.body.classList);\r\n\r\n document.body.classList.add(this.cssClass());\r\n if (this.isMetro) document.body.classList.add(\"s-base--metro\");\r\n if (this.isDark()) document.body.classList.add(\"s-base--dark\");\r\n\r\n if (this.isAnimated && player.options.animations.background) {\r\n document.getElementById(\"background-animations\").style.display = \"block\";\r\n } else {\r\n document.getElementById(\"background-animations\").style.display = \"none\";\r\n }\r\n if (player.options.UIType == 'Modern') {\r\n player.options.themeModern = name;\r\n } else {\r\n player.options.themeClassic = name;\r\n }\r\n ui.view.theme = name;\r\n window.getSelection().removeAllRanges();\r\n PerkNetwork.forceNetworkRemake();\r\n };\r\n\r\n this.cssClass = function() {\r\n return `t-${this.name.replace(/\\s+/gu, \"-\").toLowerCase()}`;\r\n };\r\n};\r\n\r\nTheme.currentName = function() {\r\n return player.options.UIType == 'Modern'\r\n ? player.options.themeModern\r\n : player.options.themeClassic;\r\n};\r\n\r\nTheme.current = function() {\r\n return Themes.find(Theme.currentName());\r\n};\r\n\r\nTheme.set = function(name) {\r\n const theme = Themes.find(name);\r\n theme.set();\r\n return theme;\r\n};\r\n\r\nTheme.secretThemeIndex = function(name) {\r\n const secretThemes = [\r\n \"ef853879b60fa6755d9599fd756c94d112f987c0cd596abf48b08f33af5ff537\",\r\n \"078570d37e6ffbf06e079e07c3c7987814e03436d00a17230ef5f24b1cb93290\",\r\n \"a3d64c3d1e1749b60b2b3dba10ed5ae9425300e9600ca05bcbafe4df6c69941f\",\r\n \"530fac71cc0b151b24d966493a6f4a0817921b37e4d3e593439e624c214ab2b2\",\r\n \"cb72e4a679254df5f99110dc7a93924628b916d2e069e3ad206db92068cb0883\",\r\n \"c8fac64da08d674123c32c936b14115ab384fe556fd24e431eb184a8dde21137\",\r\n \"da3b3c152083f0c70245f104f06331497b97b52ac80edec05e26a33ee704cae7\",\r\n \"1bbc0800145e72dfea5bfb218eba824c52510488b3a05ee88feaaa6683322d19\",\r\n \"dba8336cd3224649d07952b00045a6ec3c8df277aa8a0a0e3e7c2aaa77f1fbb9\",\r\n \"73de8a7f9efa1cbffc80a8effc9891a799127cd204b3a8b023bea8f513ed4753\",\r\n \"f3a71114261b4af6517a53f89bf0c6b56bb81b6f0e931d0e0d71249eb196628c\",\r\n \"1248689171faaa0abb68279199a8d2eb232dba10d2dacb79a705f680b6862c0e\",\r\n ];\r\n const sha = sha512_256(name.toUpperCase());\r\n return secretThemes.indexOf(sha);\r\n};\r\n\r\nTheme.isSecretTheme = function(name) {\r\n return Theme.secretThemeIndex(name) !== -1;\r\n};\r\n\r\nTheme.animatedThemeUnlocked = function() {\r\n return Themes.all.some(theme => theme.isAvailable && theme.isAnimated);\r\n};\r\n\r\nTheme.tryUnlock = function(name) {\r\n const index = Theme.secretThemeIndex(name);\r\n if (index === -1) {\r\n return false;\r\n }\r\n const prefix = `S${index + 1}`;\r\n const fullName = prefix + name.capitalize();\r\n const isAlreadyUnlocked = player.secretUnlocks.themes.has(fullName);\r\n player.secretUnlocks.themes.add(fullName);\r\n Theme.set(prefix);\r\n SecretAchievement(25).unlock();\r\n if (!isAlreadyUnlocked) {\r\n GameUI.notify.success(`You have unlocked the ${name.capitalize()} theme!`, 5000);\r\n if (Theme.current().isAnimated) {\r\n setTimeout(Modal.message.show(`This secret theme has animations. If they are giving you performance issues,\r\n you can turn them off in the Options/Visual tab to reduce lag.`), 100);\r\n }\r\n }\r\n return true;\r\n};\r\n\r\nTheme.create = function(name, settings) {\r\n const config = {\r\n isDark: false || settings.dark,\r\n isMetro: false || settings.metro,\r\n isAnimated: false || settings.animated,\r\n isSecret: false || settings.secret,\r\n };\r\n return new Theme(name, config);\r\n};\r\n\r\nexport const Themes = {\r\n all: [\r\n /* eslint-disable no-multi-spaces */\r\n // Note that \"Normal\" is a special case where dark is overridden elsewhere with whether or not the UI is Modern\r\n Theme.create(\"Normal\", { }),\r\n Theme.create(\"Metro\", { metro: true, }),\r\n Theme.create(\"Dark\", { dark: true, }),\r\n Theme.create(\"Dark Metro\", { dark: true, metro: true, }),\r\n Theme.create(\"Inverted\", { }),\r\n Theme.create(\"Inverted Metro\", { metro: true, }),\r\n Theme.create(\"AMOLED\", { dark: true, }),\r\n Theme.create(\"AMOLED Metro\", { dark: true, metro: true, }),\r\n Theme.create(\"S1\", { animated: true, secret: true, }),\r\n Theme.create(\"S2\", { secret: true, }),\r\n Theme.create(\"S3\", { secret: true, }),\r\n Theme.create(\"S4\", { secret: true, }),\r\n Theme.create(\"S5\", { secret: true, }),\r\n Theme.create(\"S6\", { dark: true, animated: true, secret: true, }),\r\n Theme.create(\"S7\", { metro: true, secret: true, }),\r\n Theme.create(\"S8\", { metro: true, secret: true, }),\r\n Theme.create(\"S9\", { secret: true, }),\r\n Theme.create(\"S10\", { dark: true, metro: true, animated: true, secret: true, }),\r\n Theme.create(\"S11\", { dark: true, animated: true, secret: true, }),\r\n Theme.create(\"S12\", { secret: true, }),\r\n /* eslint-enable no-multi-spaces */\r\n ],\r\n\r\n available() {\r\n return Themes.all\r\n .filter(theme => theme.isAvailable());\r\n },\r\n\r\n find(name) {\r\n return Themes.all\r\n .find(theme => theme.name === name);\r\n }\r\n};\r\n","import { sha512_256 } from \"js-sha512\";\r\n\r\nimport { ElectronRuntime } from \"@/steam\";\r\n\r\nimport { DEV } from \"@/env\";\r\n\r\nimport FullScreenAnimationHandler from \"./full-screen-animation-handler\";\r\n\r\nexport class GameOptions {\r\n\r\n static toggleNews() {\r\n player.options.news.enabled = !player.options.news.enabled;\r\n ui.view.news = player.options.news.enabled;\r\n GameStorage.save();\r\n }\r\n\r\n static toggleUI() {\r\n // player.options.UIType == \"Modern\" ? player.options.UIType = \"Classic\" : player.options.UIType = \"Classic\" ? player.options.UIType = \"Synergism\" : player.options.UIType = \"Modern\"\r\n // ui.view.UIType == \"Modern\" ? ui.view.UIType = \"Classic\" : ui.view.UIType == \"Classic\" ? ui.view.UIType = \"Synergism\" : ui.view.UIType = \"Modern\"\r\n player.options.UIType == \"Modern\" ? player.options.UIType = \"Classic\" : player.options.UIType = \"Modern\"\r\n ui.view.UIType == \"Modern\" ? ui.view.UIType = \"Classic\" : ui.view.UIType = \"Modern\"\r\n // This is needed because .s-base--dark is on UIType == 'Modern'/normal but not on oldUI/normal\r\n // So the classes on body need to be updated\r\n Themes.find(Theme.currentName()).set();\r\n ElectronRuntime.updateZoom();\r\n GameStorage.save();\r\n }\r\n\r\n static cloudSave() {\r\n Cloud.saveCheck(true);\r\n }\r\n\r\n static cloudLoad() {\r\n Cloud.loadCheck();\r\n }\r\n\r\n static login() {\r\n Cloud.login();\r\n }\r\n\r\n static logout() {\r\n Cloud.logout();\r\n }\r\n\r\n static refreshUpdateRate() {\r\n if (player.options.updateRate === 200) {\r\n SecretAchievement(31).unlock();\r\n }\r\n GameIntervals.gameLoop.restart();\r\n }\r\n\r\n static refreshAutosaveInterval() {\r\n GameIntervals.save.restart();\r\n }\r\n}\r\n\r\nconst secretImports = [\r\n \"80b7fdc794f5dfc944da6a445a3f21a2d0f7c974d044f2ea25713037e96af9e3\",\r\n \"857876556a230da15fe1bb6f410ca8dbc9274de47c1a847c2281a7103dd2c274\",\r\n \"be88e62eb68758cd7381104977c0d3d5d81e19c72a848f0d79d1963c1e39221f\",\r\n \"c784c9c0a82b5f3c13884842fa6e6a8f5aed994ef401e6476c30b1adfe439b22\",\r\n];\r\n\r\nfunction secretImportIndex(data) {\r\n const sha = sha512_256(data.replace(/\\s/gu, \"\").toUpperCase());\r\n return secretImports.indexOf(sha);\r\n}\r\n\r\nexport function isSecretImport(data) {\r\n return secretImportIndex(data) !== -1;\r\n}\r\n\r\nexport function tryImportSecret(data) {\r\n const index = secretImportIndex(data);\r\n\r\n switch (index) {\r\n case 0:\r\n FullScreenAnimationHandler.display(\"a-barrel-roll\", 5);\r\n SecretAchievement(15).unlock();\r\n return true;\r\n case 1:\r\n SecretAchievement(14).unlock();\r\n return true;\r\n case 2:\r\n SecretAchievement(37).unlock();\r\n return true;\r\n case 3:\r\n if (player.records.fullGameCompletions > 0 || DEV) Speedrun.unlock();\r\n else GameUI.notify.error(\"Complete the game at least once first!\", 15000);\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n","import { GameMechanicState } from \"../game-mechanics\";\r\n\r\nimport { SteamRuntime } from \"@/steam\";\r\n\r\nclass AchievementState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this._row = Math.floor(this.id / 10);\r\n this._column = this.id % 10;\r\n this._bitmask = 1 << (this.column - 1);\r\n this._inverseBitmask = ~this._bitmask;\r\n this.registerEvents(config.checkEvent, args => this.tryUnlock(args));\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get row() {\r\n return this._row;\r\n }\r\n\r\n get column() {\r\n return this._column;\r\n }\r\n\r\n get isPreReality() {\r\n return this.row < 14;\r\n }\r\n\r\n get isPrePelle() {\r\n return this.row < 18;\r\n }\r\n\r\n get isPreMend() {\r\n return this.row < 19;\r\n }\r\n\r\n get isUnlocked() {\r\n return (player.achievementBits[this.row - 1] & this._bitmask) !== 0;\r\n }\r\n\r\n get isDisabled() {\r\n return Pelle.isDisabled(\"achievements\") && Pelle.disabledAchievements.includes(this.id);\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isUnlocked && !this.isDisabled;\r\n }\r\n\r\n tryUnlock(args) {\r\n if (this.isUnlocked) return;\r\n if (!this.config.checkRequirement(args)) return;\r\n this.unlock();\r\n }\r\n\r\n lock() {\r\n player.achievementBits[this.row - 1] &= this._inverseBitmask;\r\n }\r\n\r\n unlock(auto) {\r\n if (this.isUnlocked) return;\r\n player.achievementBits[this.row - 1] |= this._bitmask;\r\n if (this.id === 85 || this.id === 93) {\r\n Autobuyer.bigCrunch.bumpAmount(4);\r\n }\r\n if (this.id === 55 && !PlayerProgress.realityUnlocked()) {\r\n Modal.message.show(`Since you performed an Infinity in under a minute, the UI changed on the screen.\r\n Instead of the Dimensions disappearing, they stay and the Big Crunch button appears on top of them.\r\n This is purely visual, and is there to prevent flickering.`, {}, 3);\r\n }\r\n if (this.id === 148 || this.id === 166) {\r\n GameCache.staticGlyphWeights.invalidate();\r\n }\r\n if (auto) {\r\n GameUI.notify.reality(`Automatically unlocked: ${this.name}`);\r\n } else {\r\n GameUI.notify.success(`Achievement: ${this.name}`);\r\n SteamRuntime.activateAchievement(this.id);\r\n }\r\n if (player.speedrun.isActive && !player.speedrun.achievementTimes[this.id]) {\r\n // This stores a lot of data in the savefile and seems particularly suceptible to floating-point rounding issues\r\n // for some reason, so we floor to get rid of fractions of milliseconds and reduce what filesize impact we can\r\n player.speedrun.achievementTimes[this.id] = Math.floor(player.records.realTimePlayed);\r\n }\r\n Achievements._power.invalidate();\r\n EventHub.dispatch(GAME_EVENT.ACHIEVEMENT_UNLOCKED);\r\n }\r\n\r\n // Additional Code Starts Here\r\n\r\n get isPreMend(){\r\n return this.row < 19;\r\n }\r\n}\r\n\r\n/**\r\n * @param {number} id\r\n * @returns {AchievementState}\r\n */\r\nexport const Achievement = AchievementState.createAccessor(GameDatabase.achievements.normal);\r\n\r\nexport const Achievements = {\r\n /**\r\n * @type {AchievementState[]}\r\n */\r\n all: Achievement.index.compact(),\r\n\r\n /**\r\n * @type {AchievementState[]}\r\n */\r\n get preReality() {\r\n return Achievements.all.filter(ach => ach.isPreReality);\r\n },\r\n\r\n /**\r\n * @type {AchievementState[]}\r\n */\r\n get prePelle() {\r\n return Achievements.all.filter(ach => ach.isPrePelle);\r\n },\r\n\r\n get preMend() {\r\n return Achievements.all.filter(ach => ach.isPreMend);\r\n },\r\n\r\n get allRows() {\r\n const count = Achievements.all.map(a => a.row).max();\r\n return Achievements.rows(1, count);\r\n },\r\n\r\n get preRealityRows() {\r\n const count = Achievements.preReality.map(a => a.row).max();\r\n return Achievements.rows(1, count);\r\n },\r\n\r\n get prePelleRows() {\r\n const count = Achievements.prePelle.map(a => a.row).max();\r\n return Achievements.rows(1, count);\r\n },\r\n\r\n get preMendRows() {\r\n const count = Achievements.preMend.map(a => a.row).max();\r\n return Achievements.rows(1, count);\r\n },\r\n\r\n rows: (start, count) => Array.range(start, count).map(Achievements.row),\r\n\r\n row: row => Array.range(row * 10 + 1, 8).map(Achievement),\r\n\r\n get effectiveCount() {\r\n const unlockedAchievements = Achievements.all.countWhere(a => a.isUnlocked);\r\n return unlockedAchievements;\r\n },\r\n\r\n get period() {\r\n return GameCache.achievementPeriod.value;\r\n },\r\n\r\n autoAchieveUpdate(diff) {\r\n if (!PlayerProgress.realityUnlocked()) return;\r\n if (!player.reality.autoAchieve || RealityUpgrade(8).isLockingMechanics) {\r\n player.reality.achTimer = Decimal.clampMax(player.reality.achTimer.add(diff), this.period);\r\n return;\r\n }\r\n if (Achievements.preReality.every(a => a.isUnlocked)) return;\r\n\r\n player.reality.achTimer = player.reality.achTimer.add(diff);\r\n if (player.reality.achTimer.lt(this.period)) return;\r\n for (const achievement of Achievements.preReality.filter(a => !a.isUnlocked)) {\r\n achievement.unlock(true);\r\n player.reality.achTimer = player.reality.achTimer.sub(this.period);\r\n if (player.reality.achTimer.lt(this.period)) break;\r\n }\r\n player.reality.gainedAutoAchievements = true;\r\n },\r\n\r\n get timeToNextAutoAchieve() {\r\n if (!PlayerProgress.realityUnlocked()) return new Decimal(0);\r\n if (GameCache.achievementPeriod.value === new Decimal(0)) return new Decimal(0);\r\n if (Achievements.preReality.countWhere(a => !a.isUnlocked) === 0) return new Decimal(0);\r\n return this.period.sub(player.reality.achTimer);\r\n },\r\n\r\n _power: new Lazy(() => {\r\n let vFixMult = VUnlocks.vAchMulti.effectOrDefault(1);\r\n let vRaUpg = player.celestials.ra.upgrades.has('vUpgrade') ? WarpUpgrade(2).effectOrDefault(1) : 1;\r\n const unlockedRows = Achievements.allRows\r\n .countWhere(row => row.every(ach => ach.isUnlocked));\r\n const basePower = (Math.pow(1.25, unlockedRows) * Math.pow(1.03, Achievements.effectiveCount) * vFixMult * vRaUpg) ** (Ra.unlocks.achMultBaseImprovementV.isUnlocked ? 2 : 1);\r\n let x = BreakInfinityUpgrade.achievementMult.chargedEffect.isEffectActive ? BreakInfinityUpgrade.achievementMult.chargedEffect.effectValue : 1;\r\n let y = Ra.unlocks.repIncreasesAchMult.isUnlocked ? Math.max(1, ((1 + Math.log10(Decimal.log10(Currency.replicanti.value))) / 25)) : 1;\r\n let z = CorruptionUpgrade(3).isUnlocked ? Math.max(1, CorruptionUpgrade(3).effectValue) : 1;\r\n let exponent = (getAdjustedGlyphEffect(\"effarigachievement\").toDecimal()).times(Ra.unlocks.achievementPower.effectOrDefault(1)).times(x).times(Math.max(y, 1)).times(z);\r\n let primeAnswer = Decimal.pow(basePower, exponent);\r\n \r\n return primeAnswer;\r\n }),\r\n\r\n get power() {\r\n if (Pelle.isDisabled(\"achievementMult\")) return new Decimal(1);\r\n return Achievements._power.value;\r\n },\r\n\r\n updateSteamStatus() {\r\n for (const achievement of Achievements.all.filter(x => x.isUnlocked)) {\r\n SteamRuntime.activateAchievement(achievement.id);\r\n }\r\n }\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.PERK_BOUGHT, () => {\r\n player.reality.achTimer = Decimal.clampMax(player.reality.achTimer, Achievements.period);\r\n});\r\n","import { GameMechanicState } from \"../game-mechanics\";\r\n\r\nclass SecretAchievementState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this._row = Math.floor(this.id / 10);\r\n this._column = this.id % 10;\r\n this._bitmask = 1 << (this.column - 1);\r\n this._inverseBitmask = ~this._bitmask;\r\n this.registerEvents(config.checkEvent, args => this.tryUnlock(args));\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get row() {\r\n return this._row;\r\n }\r\n\r\n get column() {\r\n return this._column;\r\n }\r\n\r\n get isUnlocked() {\r\n return (player.secretAchievementBits[this.row - 1] & this._bitmask) !== 0;\r\n }\r\n\r\n tryUnlock(args) {\r\n if (this.isUnlocked) return;\r\n if (!this.config.checkRequirement(args)) return;\r\n this.unlock();\r\n }\r\n\r\n unlock() {\r\n if (this.isUnlocked) return;\r\n player.secretAchievementBits[this.row - 1] |= this._bitmask;\r\n GameUI.notify.success(`Secret Achievement: ${this.name}`);\r\n EventHub.dispatch(GAME_EVENT.ACHIEVEMENT_UNLOCKED);\r\n }\r\n\r\n lock() {\r\n player.secretAchievementBits[this.row - 1] &= this._inverseBitmask;\r\n }\r\n}\r\n\r\n/**\r\n * @param {number} id\r\n * @returns {SecretAchievementState}\r\n */\r\nexport const SecretAchievement = SecretAchievementState.createAccessor(GameDatabase.achievements.secret);\r\n\r\nexport const SecretAchievements = {\r\n /**\r\n * @type {SecretAchievementState[]}\r\n */\r\n all: SecretAchievement.index.compact(),\r\n\r\n get allRows() {\r\n const count = SecretAchievements.all.map(a => a.row).max();\r\n return SecretAchievements.rows(1, count);\r\n },\r\n\r\n rows: (start, count) => Array.range(start, count).map(SecretAchievements.row),\r\n\r\n row: row => Array.range(row * 10 + 1, 8).map(SecretAchievement),\r\n};\r\n","class AchievementTimer {\r\n constructor(isRealTime) {\r\n this.time = 0;\r\n this.realTime = isRealTime;\r\n }\r\n\r\n reset() {\r\n this.time = 0;\r\n }\r\n\r\n advance() {\r\n this.realTime\r\n ? this.time += Time.unscaledDeltaTime.totalSeconds.toNumber()\r\n : new Decimal(this.time).add(Time.deltaTime)\r\n }\r\n\r\n check(condition, duration) {\r\n if (!condition) {\r\n this.reset();\r\n return false;\r\n }\r\n this.advance();\r\n return this.time >= duration;\r\n }\r\n}\r\n\r\nexport const AchievementTimers = {\r\n marathon1: new AchievementTimer(false),\r\n marathon2: new AchievementTimer(false),\r\n pain: new AchievementTimer(true),\r\n stats: new AchievementTimer(true)\r\n};\r\n","import { BitPurchasableMechanicState, RebuyableMechanicState } from \"./game-mechanics\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nclass RealityUpgradeState extends BitPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.registerEvents(config.checkEvent, () => this.tryUnlock());\r\n }\r\n get isBought() {\r\n return (this.bits & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set isBought(value) {\r\n if (value) {\r\n this.bits |= (1 << this.bitIndex);\r\n } else {\r\n this.bits &= ~(1 << this.bitIndex);\r\n }\r\n }\r\n get automatorPoints() {\r\n return this.config.automatorPoints ? this.config.automatorPoints : 0;\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get shortDescription() {\r\n return this.config.shortDescription ? this.config.shortDescription() : \"\";\r\n }\r\n\r\n get requirement() {\r\n return typeof this.config.requirement === \"function\" ? this.config.requirement() : this.config.requirement;\r\n }\r\n\r\n get lockEvent() {\r\n return typeof this.config.lockEvent === \"function\" ? this.config.lockEvent() : this.config.lockEvent;\r\n }\r\n\r\n get currency() {\r\n return Currency.realityMachines;\r\n }\r\n\r\n get bitIndex() {\r\n return this.id;\r\n }\r\n\r\n get bits() {\r\n return player.reality.upgradeBits;\r\n }\r\n\r\n set bits(value) {\r\n player.reality.upgradeBits = value;\r\n }\r\n\r\n get hasPlayerLock() {\r\n return (player.reality.reqLock.reality & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set hasPlayerLock(value) {\r\n if (value) player.reality.reqLock.reality |= 1 << this.bitIndex;\r\n else player.reality.reqLock.reality &= ~(1 << this.bitIndex);\r\n }\r\n\r\n get isLockingMechanics() {\r\n const shouldBypass = this.config.bypassLock?.() ?? false;\r\n return this.hasPlayerLock && this.isPossible && !shouldBypass && !this.isAvailableForPurchase;\r\n }\r\n\r\n // Required to be changed this way to avoid direct prop mutation in Vue components\r\n setMechanicLock(value) {\r\n this.hasPlayerLock = value;\r\n }\r\n\r\n toggleMechanicLock() {\r\n this.hasPlayerLock = !this.hasPlayerLock;\r\n }\r\n\r\n // Note we don't actually show the modal if we already failed or unlocked it\r\n tryShowWarningModal(specialLockText) {\r\n if (this.isPossible && !this.isAvailableForPurchase) {\r\n Modal.upgradeLock.show({ upgrade: this, isImaginary: false, specialLockText });\r\n }\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n if (MendingMilestone.four.isReached){\r\n return true;\r\n }\r\n return (player.reality.upgReqs & (1 << this.id)) !== 0;\r\n }\r\n\r\n get isPossible() {\r\n if(MendingMilestone.four.isReached){\r\n return true;\r\n }\r\n return this.config.hasFailed ? !this.config.hasFailed() : true;\r\n }\r\n\r\n tryUnlock() {\r\n const realityReached = PlayerProgress.realityUnlocked() || TimeStudy.reality.isBought;\r\n if (!realityReached || this.isAvailableForPurchase || !this.config.checkRequirement()) return;\r\n player.reality.upgReqs |= (1 << this.id);\r\n GameUI.notify.reality(`You've unlocked a Reality Upgrade: ${this.config.name}`);\r\n this.hasPlayerLock = false;\r\n }\r\n\r\n onPurchased() {\r\n EventHub.dispatch(GAME_EVENT.REALITY_UPGRADE_BOUGHT);\r\n const id = this.id;\r\n if (id === 9 || id === 24) {\r\n Glyphs.refreshActive();\r\n }\r\n if (id === 10) {\r\n applyRUPG10();\r\n playerInfinityUpgradesOnReset();\r\n EventHub.dispatch(GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT);\r\n }\r\n if (id === 20 && player.blackHole[0].unlocked) {\r\n player.blackHole[1].unlocked = true;\r\n }\r\n GameCache.staticGlyphWeights.invalidate();\r\n }\r\n}\r\n\r\nclass RebuyableRealityUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.realityMachines;\r\n }\r\n\r\n get boughtAmount() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return 0;\r\n return player.reality.rebuyables[this.id];\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return false;\r\n return true;\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.reality.rebuyables[this.id] = value;\r\n }\r\n}\r\n\r\nRealityUpgradeState.index = mapGameData(\r\n GameDatabase.reality.upgrades,\r\n config => (config.id < 6\r\n ? new RebuyableRealityUpgradeState(config)\r\n : new RealityUpgradeState(config))\r\n);\r\n\r\n/**\r\n * @param {number} id\r\n * @return {RealityUpgradeState|RebuyableRealityUpgradeState}\r\n */\r\nexport const RealityUpgrade = id => RealityUpgradeState.index[id];\r\n\r\nexport const RealityUpgrades = {\r\n /**\r\n * @type {(RealityUpgradeState|RebuyableRealityUpgradeState)[]}\r\n */\r\n all: RealityUpgradeState.index.compact(),\r\n get allBought() {\r\n return (player.reality.upgradeBits >> 6) + 1 === 1 << (GameDatabase.reality.upgrades.length - 5);\r\n }\r\n};\r\n","import { GameMechanicState } from \"../game-mechanics\";\r\nimport { CorruptionUpgrade, MendingUpgrade, V } from \"../globals\";\r\nimport { RealityUpgrade } from \"../reality-upgrades\";\r\nimport { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\n\r\nexport const orderedEffectList = [\"powerpow\", \"infinitypow\", \"replicationpow\", \"timepow\",\r\n \"dilationpow\", \"timeshardpow\", \"powermult\", \"powerdimboost\", \"powerbuy10\",\r\n \"dilationTTgen\", \"infinityinfmult\", \"infinityIP\", \"timeEP\",\r\n \"dilationDT\", \"replicationdtgain\", \"replicationspeed\",\r\n \"timeetermult\", \"dilationgalaxyThreshold\", \"infinityrate\", \"replicationglyphlevel\",\r\n \"timespeed\",\r\n \"effarigrm\", \"effarigglyph\", \"effarigblackhole\", \"effarigachievement\",\r\n \"effarigforgotten\", \"effarigdimensions\", \"effarigantimatter\",\r\n \"cursedgalaxies\", \"cursedtickspeed\", \"curseddimensions\", \"cursedEP\",\r\n \"realityglyphlevel\", \"realitygalaxies\", \"realityrow1pow\", \"realityDTglyph\",\r\n \"companiondescription\", \"companionEP\"];\r\n\r\nexport const generatedTypes = [\"power\", \"infinity\", \"replication\", \"time\", \"dilation\", \"effarig\"];\r\n\r\n// eslint-disable-next-line no-unused-vars\r\nexport const GlyphEffectOrder = orderedEffectList.mapToObject(e => e, (e, idx) => idx);\r\n\r\nexport function rarityToStrength(x) {\r\n return x * 2.5 / 100 + 1;\r\n}\r\n\r\nexport function strengthToRarity(x) {\r\n return (x - 1) * 100 / 2.5;\r\n}\r\n\r\n//Separated the compare functions from sorting to reuse them in autoEquipBetterGlyphs\r\n//It's probably very unnecessary since by the time you unlock it probably only level will matter anyway but hey, someone might want it\r\nconst compare = {\r\n level: (a, b) => b.level - a.level,\r\n power: (a, b) => b.level * b.strength - a.level * a.strength,\r\n score: (a, b) => AutoGlyphProcessor.filterValue(b) - AutoGlyphProcessor.filterValue(a),\r\n effect: (a, b) => {\r\n function reverseBitstring(eff) {\r\n return parseInt(((1 << 30) + (eff >>> 0)).toString(2).split(\"\").reverse().join(\"\"), 2);\r\n }\r\n // The bitwise reversal is so that the effects with the LOWER id are valued higher in the sorting.\r\n // This primarily meant for effarig glyph effect sorting, which makes it prioritize timespeed pow highest.\r\n return reverseBitstring(b.effects) - reverseBitstring(a.effects);\r\n },\r\n}\r\n\r\nexport const Glyphs = {\r\n inventory: [],\r\n active: [],\r\n unseen: [],\r\n unequipped: [],\r\n levelBoost: 0,\r\n factorsOpen: false,\r\n bestUndoGlyphCount: 0,\r\n get maxSlots() {\r\n if (Pelle.isDoomed){\r\n let p = PelleRifts.vacuum.milestones[0].canBeApplied ? 1 : 0;\r\n if(CorruptionUpgrade(6).isBought) p+=1;\r\n return p;\r\n }\r\n else{\r\n let i = 3;\r\n if (RealityUpgrade(9).isBought){\r\n i++\r\n }\r\n if (RealityUpgrade(24).isBought){\r\n i++\r\n }\r\n if (MendingMilestone.five.isReached){\r\n i += 3;\r\n }\r\n return i\r\n }\r\n //return MendingMilestone.five.isReached ? 8 : 5\r\n }, //will be a function later for further upgrades\r\n get inventoryList() {\r\n return player.reality.glyphs.inventory;\r\n },\r\n get sortedInventoryList() {\r\n return this.inventoryList.sort((a, b) => -a.level * a.strength + b.level * b.strength);\r\n },\r\n get activeList() {\r\n return player.reality.glyphs.active;\r\n },\r\n get activeWithoutCompanion() {\r\n return this.activeList.filter(g => g.type !== \"companion\");\r\n },\r\n get allGlyphs() {\r\n return this.inventoryList.concat(this.activeList);\r\n },\r\n // Returns an array of inventory indices of all glyphs, with all null entries filtered out\r\n get glyphIndexArray() {\r\n return this.inventory.filter(g => g).map(g => g.idx);\r\n },\r\n findFreeIndex(useProtectedSlots) {\r\n this.validate();\r\n const isUsableIndex = index => (useProtectedSlots ? index < this.protectedSlots : index >= this.protectedSlots);\r\n return this.inventory.findIndex((slot, index) => slot === null && isUsableIndex(index));\r\n },\r\n // This is stored in GameCache and only invalidated if glyphs change; we check for free inventory space often in\r\n // lots of places and this is an expensive operation\r\n get freeInventorySpace() {\r\n this.validate();\r\n return this.inventory.filter((e, idx) => e === null && idx >= this.protectedSlots).length;\r\n },\r\n get activeSlotCount() {\r\n if (Pelle.isDoomed) {\r\n let p = PelleRifts.vacuum.milestones[0].canBeApplied ? 1 : 0;\r\n if(CorruptionUpgrade(6).isBought) p+=1;\r\n return p;\r\n }\r\n return MendingMilestone.five.isReached ? 6 + Effects.sum(RealityUpgrade(9), RealityUpgrade(24)) : 3 + Effects.sum(RealityUpgrade(9), RealityUpgrade(24))\r\n },\r\n get protectedSlots() {\r\n return 10 * player.reality.glyphs.protectedRows;\r\n },\r\n get totalSlots() {\r\n return 120;\r\n },\r\n changeProtectedRows(rowChange) {\r\n // Always ensure at least one unprotected row for new glyphs, to prevent some potentially odd-looking behavior\r\n const newRows = Math.clamp(player.reality.glyphs.protectedRows + rowChange, 0, this.totalSlots / 10 - 1);\r\n const rowsToAdd = newRows - player.reality.glyphs.protectedRows;\r\n\r\n if (rowsToAdd > 0) {\r\n // Attempt to shift unprotected glyphs downward if there are any empty unprotected rows. The time complexity on\r\n // this algorithm isn't that good, but this isn't a particularly hot path and any \"smarter\" algorithms likely\r\n // aren't worth the reduced code readability\r\n let rowsMoved = 0;\r\n while (rowsMoved < rowsToAdd) {\r\n // Try to shift down all the unprotected rows from top to bottom, repeating until either no shifting is\r\n // possible or we've freed up the row\r\n let hasMoved = false;\r\n for (let orig = this.protectedSlots / 10 + rowsMoved; !hasMoved && orig < this.totalSlots / 10; orig++) {\r\n hasMoved = hasMoved || this.moveGlyphRow(orig, orig + 1);\r\n }\r\n // No movement happened this scan; there's nothing else we can do here\r\n if (!hasMoved) break;\r\n // Check if the topmost unprotected row is free. This isn't necessarily guaranteed because it could come from\r\n // merging lower rows, which means the empty row isn't in the right spot\r\n if (!this.glyphIndexArray.some(idx => Math.floor(idx / 10) === this.protectedSlots / 10)) {\r\n rowsMoved++;\r\n }\r\n }\r\n } else {\r\n // Similar algorithm to above; we scan repeatedly over protected slots and repeatedly attempt to free up the row\r\n // that's going to switch to being unprotected\r\n let rowsMoved = 0;\r\n while (rowsMoved < -rowsToAdd) {\r\n let hasMoved = false;\r\n for (let orig = this.protectedSlots / 10 - rowsMoved - 1; !hasMoved && orig > 0; orig--) {\r\n hasMoved = hasMoved || this.moveGlyphRow(orig, orig - 1);\r\n }\r\n if (!hasMoved) break;\r\n if (!this.glyphIndexArray.some(idx => Math.floor(idx / 10) === this.protectedSlots / 10 - 1)) {\r\n rowsMoved++;\r\n // In addition to all the protected glyph movement, we also move the entire unprotected inventory up one row\r\n for (let orig = this.protectedSlots / 10 - rowsMoved; orig < this.totalSlots / 10; orig++) {\r\n this.moveGlyphRow(orig, orig - 1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n player.reality.glyphs.protectedRows = newRows;\r\n this.validate();\r\n GameCache.glyphInventorySpace.invalidate();\r\n },\r\n // Move all glyphs from the origin row to the destination row, does nothing if a column-preserving move operation\r\n // isn't possible. Returns a boolean indicating success/failure on glyph moving. Row is 0-indexed\r\n moveGlyphRow(orig, dest) {\r\n if (!player.reality.moveGlyphsOnProtection) return false;\r\n if (orig >= this.totalSlots / 10 || dest >= this.totalSlots / 10) return false;\r\n if (this.glyphIndexArray.some(idx => Math.floor(idx / 10) === dest)) {\r\n // Destination row has some glyphs, attempt to merge the rows\r\n const hasOverlap = [...Array(10).keys()]\r\n .some(col => this.inventory[10 * orig + col] !== null && this.inventory[10 * dest + col] !== null);\r\n if (hasOverlap) return false;\r\n for (let col = 0; col < 10; col++) {\r\n const glyph = this.inventory[10 * orig + col];\r\n if (glyph !== null) {\r\n this.moveToSlot(glyph, 10 * dest + col);\r\n }\r\n }\r\n this.validate();\r\n return true;\r\n }\r\n // Destination row is empty, just move the glyphs\r\n for (let col = 0; col < 10; col++) {\r\n const glyph = this.inventory[10 * orig + col];\r\n if (glyph !== null) {\r\n this.moveToSlot(glyph, 10 * dest + col);\r\n }\r\n }\r\n this.validate();\r\n return true;\r\n },\r\n refreshActive() {\r\n this.active = new Array(this.activeSlotCount).fill(null);\r\n for (const g of player.reality.glyphs.active) {\r\n if (this.active[g.idx]) {\r\n throw new Error(\"Stacked active glyphs?\");\r\n }\r\n this.active[g.idx] = g;\r\n }\r\n },\r\n refresh() {\r\n this.refreshActive();\r\n this.inventory = new Array(this.totalSlots).fill(null);\r\n // Glyphs could previously end up occupying the same inventory slot (Stacking)\r\n const stacked = [];\r\n for (const g of player.reality.glyphs.inventory) {\r\n if (this.inventory[g.idx]) {\r\n stacked.push(g);\r\n } else {\r\n this.inventory[g.idx] = g;\r\n }\r\n }\r\n // Try to unstack glyphs:\r\n while (stacked.length) {\r\n const freeIndex = this.findFreeIndex();\r\n if (freeIndex >= 0) {\r\n const glyph = stacked.shift();\r\n this.inventory[freeIndex] = glyph;\r\n glyph.idx = freeIndex;\r\n } else {\r\n break;\r\n }\r\n }\r\n while (stacked.length) {\r\n this.removeFromInventory(stacked.pop());\r\n }\r\n this.validate();\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n },\r\n // This compares targetGlyph to all the glyphs in searchList, returning a subset of them which fulfills the comparison\r\n // direction specified by the parameters in fuzzyMatch:\r\n // -1: Will find glyphs which are equal to or worse than targetGlyph\r\n // 0: Will only return glyphs which have identical values\r\n // +1: Will find glyphs which are equal to or better than targetGlyph\r\n findByValues(targetGlyph, searchList, fuzzyMatch = { level, strength, effects }) {\r\n // We need comparison to go both ways for normal matching and subset matching for partially-equipped sets\r\n const compFn = (op, comp1, comp2) => {\r\n switch (op) {\r\n case -1:\r\n return comp2 - comp1;\r\n case 0:\r\n return comp1 === comp2 ? 0 : -1;\r\n case 1:\r\n return comp1 - comp2;\r\n }\r\n return false;\r\n };\r\n\r\n // Returns a number based on how much the small mask is found inside of the large mask. Returns a non-negative\r\n // number if small contains all of large, with a value equal to the number of extra bits. Otherwise, returns a\r\n // negative number equal to the negative of the number of bits that large has which small doesn't.\r\n const matchedEffects = (large, small) => {\r\n if ((large & small) === large) return countValuesFromBitmask(small - large);\r\n return -countValuesFromBitmask(large - (large & small));\r\n };\r\n\r\n // Make an array containing all glyphs which match the given criteria, with an additional \"quality\" prop in order\r\n // to determine roughly how good the glyph itself is relative to other matches\r\n const allMatches = [];\r\n for (const glyph of searchList) {\r\n const type = glyph.type === targetGlyph.type;\r\n let eff;\r\n switch (fuzzyMatch.effects) {\r\n case -1:\r\n eff = matchedEffects(glyph.effects, targetGlyph.effects);\r\n break;\r\n case 0:\r\n eff = glyph.effects === targetGlyph.effects ? 0 : -1;\r\n break;\r\n case 1:\r\n eff = matchedEffects(targetGlyph.effects, glyph.effects);\r\n break;\r\n }\r\n const str = compFn(fuzzyMatch.strength, glyph.strength, targetGlyph.strength) / 2.5;\r\n const lvl = compFn(fuzzyMatch.level, glyph.level, targetGlyph.level) / 5000;\r\n const sym = glyph.symbol === targetGlyph.symbol;\r\n if (type && eff >= 0 && str >= 0 && lvl >= 0 && sym) {\r\n allMatches.push({\r\n glyph,\r\n // Flatten glyph qualities, with 10% rarity, 500 levels, and an extra effect all being equal value. This\r\n // is used to sort the options by some rough measure of distance from the target glyph\r\n gap: str + lvl + eff / 10\r\n });\r\n }\r\n }\r\n\r\n // Sort by increasing gap, then discard the value as it's not directly used anywhere else\r\n allMatches.sort((a, b) => a.gap - b.gap);\r\n return allMatches.map(m => m.glyph);\r\n },\r\n findById(id) {\r\n return player.reality.glyphs.inventory.find(glyph => glyph.id === id);\r\n },\r\n findByInventoryIndex(inventoryIndex) {\r\n return this.inventory[inventoryIndex];\r\n },\r\n activeGlyph(activeIndex) {\r\n return this.active[activeIndex];\r\n },\r\n equip(glyph, targetSlot) {\r\n const forbiddenByPelle = Pelle.isDisabled(\"glyphs\") || [\"effarig\", \"reality\", \"cursed\", \"amalgam\"].includes(glyph.type);\r\n if (Pelle.isDoomed && forbiddenByPelle) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n\r\n if (glyph.type !== \"companion\") {\r\n if (RealityUpgrade(9).isLockingMechanics) {\r\n if (this.activeWithoutCompanion.length > 0) {\r\n RealityUpgrade(9).tryShowWarningModal(\"equip another non-Companion Glyph\");\r\n return;\r\n }\r\n if (glyph.level < 3) {\r\n RealityUpgrade(9).tryShowWarningModal(`equip a Glyph whose level is less than ${formatInt(3)}`);\r\n return;\r\n }\r\n }\r\n if (RealityUpgrade(24).isLockingMechanics && this.activeWithoutCompanion.length === 0) {\r\n RealityUpgrade(24).tryShowWarningModal();\r\n return;\r\n }\r\n if (ImaginaryUpgrade(25).isLockingMechanics && this.activeWithoutCompanion.length === 1) {\r\n ImaginaryUpgrade(25).tryShowWarningModal();\r\n return;\r\n }\r\n }\r\n\r\n this.validate();\r\n if (this.findByInventoryIndex(glyph.idx) !== glyph) {\r\n throw new Error(\"Inconsistent inventory indexing\");\r\n }\r\n let canEquipSpecial = false;\r\n let maxSpecial = 1;\r\n if (MendingMilestone.five.isReached){\r\n maxSpecial = 2;\r\n }\r\n if ([\"effarig\", \"reality\"].includes(glyph.type)) {\r\n canEquipSpecial = this.active.countWhere(x => x && x.type === glyph.type) < maxSpecial;\r\n }\r\n let equippedInDoom = this.active.countWhere(x => x && x.type === glyph.type) > 0;\r\n if (this.active[targetSlot] === null) { //if slot is empty\r\n if (!canEquipSpecial && [\"effarig\", \"reality\"].includes(glyph.type)) { //have we hit the max number of special glyphs?\r\n Modal.message.show(`You have the max amount of ${glyph.type.capitalize()} Glyphs equipped!`,\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n return;\r\n }\r\n //so here is equipment\r\n this.removeFromInventory(glyph);\r\n this.saveUndo(targetSlot);\r\n player.reality.glyphs.active.push(glyph);\r\n glyph.idx = targetSlot;\r\n this.active[targetSlot] = glyph;\r\n this.updateRealityGlyphEffects();\r\n this.updateMaxGlyphCount();\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n this.validate();\r\n }\r\n else {\r\n // Royal's psudocode for the Glyph drag replace starts here\r\n /* check if the Glyph we're dragging in is not an Effarig/Reality\r\n true -> allow replace\r\n false -> then check are we replacing an Effarig with an Effarig or Reality with Reality\r\n true -> allow replace\r\n false -> have we hit the max of that type?\r\n true -> deny replace\r\n false -> allow replace\r\n */\r\n //Hexa saved me from a ton of spagetti code, so thanks to him\r\n if (!Pelle.isDoomed) {\r\n if (player.mending.corruptionChallenge.corruptedMend&&[\"cursed\"].includes(this.active[targetSlot].type)&&this.active[targetSlot].id>=3&&this.active[targetSlot].id<=2+corruptionPenalties.compGlyphs.hiddenFour[player.mending.corruption[4]]) { //1.already force cursed number? 2.target is cursed? 3.the swapper is NOT cursed?\r\n Modal.message.show(`The forced Cursed Glyphs cannot be touched!`,\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n return;\r\n }//here for swap I think--sxy\r\n if (!canEquipSpecial && [\"effarig\", \"reality\"].includes(glyph.type)) { // Can we not equip a Special and is the glyph we are trying to equip a special?\r\n if (!(this.active[targetSlot].type == glyph.type)) { // Is the glyph we are trying to equip not replacing its own type?\r\n Modal.message.show(`You have the max amount of ${glyph.type.capitalize()} Glyphs equipped!`,\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n return; // If both the above conditions are true, this bit of code runs\r\n }\r\n } // However if its not true, we then run this lower code\r\n if (!player.options.confirmations.glyphReplace) {\r\n this.swapIntoActive(glyph, targetSlot); // Run this code if the player does NOT have the glyph replace confirmation enabled\r\n return;\r\n }\r\n Modal.glyphReplace.show({ targetSlot, inventoryIndex: glyph.idx });\r\n }\r\n else {\r\n //if (this.active[targetSlot].type == glyph.type) {\r\n \r\n this.swapIntoActive(glyph, targetSlot);\r\n return;\r\n //}\r\n /*else {\r\n Modal.message.show(\"You can only have one of each glyph type equipped while Doomed!\",\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED })\r\n return;\r\n }*/\r\n }\r\n }\r\n // We can only replace effarig/reality glyph\r\n/* if (sameSpecialTypeIndex >= 0 && sameSpecialTypeIndex !== targetSlot) {\r\n Modal.message.show(`You have the max amount of ${glyph.type.capitalize()} Glyphs equipped!`,\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n return;\r\n }\r\n if (!player.options.confirmations.glyphReplace) {\r\n this.swapIntoActive(glyph, targetSlot);\r\n return;\r\n }\r\n Modal.glyphReplace.show({ targetSlot, inventoryIndex: glyph.idx });\r\n }*/\r\n // Loading glyph sets might directly choose glyphs, bypassing the hover-over flag-clearing code\r\n this.removeVisualFlag(\"unseen\", glyph);\r\n this.removeVisualFlag(\"unequipped\", glyph);\r\n },\r\n // We only ever force when draining rifts causes the single slot to be lost (which will never show the modal)\r\n unequipAll(forceToUnprotected = false) {\r\n this.unequipped = [];\r\n const targetRegion = forceToUnprotected ? false : player.options.respecIntoProtected;\r\n while (player.reality.glyphs.active.length) {\r\n const freeIndex = this.findFreeIndex(targetRegion);\r\n if (freeIndex < 0) break;\r\n const glyph = player.reality.glyphs.active.pop();\r\n this.active[glyph.idx] = null;\r\n this.addToInventory(glyph, freeIndex, true);\r\n }\r\n if(player.mending.corruptionChallenge.corruptedMend&&!Pelle.isDoomed){\r\n for(let i=0;i Modal.message.show(`${quantifyInt(\"Glyph\", stillEquipped)} could not be unequipped due to lack\r\n of space. Free up some space in your ${target}${hasOther ? \" or switch where you are unequipping to\" : \"\"}\r\n in order to unequip ${stillEquipped === 1 ? \"it\" : \"them\"}.`, { closeEvent: GAME_EVENT.GLYPHS_CHANGED }),\r\n 50);\r\n }\r\n\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n return !player.reality.glyphs.active.length;\r\n },\r\n unequipNonCursed(forceToUnprotected = false) {\r\n this.active = this.active.sort(function(x,y){ return x.type == \"cursed\" ? -1 : y .type == \"cursed\" ? 1 : 0; });\r\n this.unequipped = [];\r\n const targetRegion = forceToUnprotected ? false : player.options.respecIntoProtected;\r\n let repeat = 0\r\n let total = 5\r\n if (MendingMilestone.five.isReached) total = 8\r\n while (repeat < total) {\r\n const freeIndex = this.findFreeIndex(targetRegion);\r\n if (freeIndex < 0) break;\r\n console.log(this.active)\r\n while (this.active[this.active.length - 1] == null) {\r\n this.active.pop()\r\n repeat++\r\n }\r\n console.log(this.active[this.active.length - 1].type == \"cursed\")\r\n if (this.active[this.active.length - 1].type == \"cursed\") break\r\n const glyph = this.active.pop();\r\n this.active[glyph.idx] = null;\r\n this.addToInventory(glyph, freeIndex, true);\r\n repeat++\r\n }\r\n while (this.active.length < 5){\r\n this.active.append(null)\r\n }\r\n this.updateRealityGlyphEffects();\r\n this.updateMaxGlyphCount(true);\r\n\r\n // We need to add a slight delay as a setTimeout in order to make sure that the EventHub calls following this\r\n // don't immediately close this modal after it's shown. Additionally, we want to prevent the modal from appearing\r\n // for realities shorter than a few seconds in order to stop a UI-based softlock; however at this point the time\r\n // has already been reset, so we just use the most recent real time record (this leads to some inconsistent behavior\r\n // when restarting, but that's not easily avoidable)\r\n const fastReality = new Decimal(player.records.recentRealities[0][1]).lt(3000);\r\n if (repeat < total && !fastReality) {\r\n const target = player.options.respecIntoProtected ? \"Protected slots\" : \"Main Inventory\";\r\n const hasOther = this.findFreeIndex(!player.options.respecIntoProtected) !== -1;\r\n setTimeout(() => Modal.message.show(`${quantifyInt(\"Glyph\", (total-repeat))} could not be unequipped due to lack\r\n of space. Free up some space in your ${target}${hasOther ? \" or switch where you are unequipping to\" : \"\"}\r\n in order to unequip ${repeat === total-1 ? \"it\" : \"them\"}.`, { closeEvent: GAME_EVENT.GLYPHS_CHANGED }),\r\n 50);\r\n }\r\n\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n return repeat == total;\r\n },\r\n unequip(activeIndex, requestedInventoryIndex) {\r\n if (this.active[activeIndex] === null) return;\r\n const storedIndex = player.reality.glyphs.active.findIndex(glyph => glyph.idx === activeIndex);\r\n if (storedIndex < 0) return;\r\n const glyph = player.reality.glyphs.active.splice(storedIndex, 1)[0];\r\n this.active[activeIndex] = null;\r\n this.addToInventory(glyph, requestedInventoryIndex, true);\r\n this.updateRealityGlyphEffects();\r\n this.updateMaxGlyphCount(true);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n },\r\n updateRealityGlyphEffects() {\r\n // There should only be one reality glyph; this picks one pseudo-randomly if multiple are cheated/glitched in\r\n const realityGlyph = player.reality.glyphs.active.filter(g => g.type === \"reality\")[0];\r\n if (realityGlyph === undefined) {\r\n this.levelBoost = 0;\r\n return;\r\n }\r\n // The cache at this point may not be correct yet (if we're importing a save),\r\n // so we use the uncached value.\r\n this.levelBoost = getAdjustedGlyphEffectUncached(\"realityglyphlevel\");\r\n },\r\n moveToSlot(glyph, targetSlot) {\r\n if (this.inventory[targetSlot] === null) this.moveToEmpty(glyph, targetSlot);\r\n else this.swap(glyph, this.inventory[targetSlot]);\r\n },\r\n moveToEmpty(glyph, targetSlot) {\r\n this.validate();\r\n if (this.findByInventoryIndex(glyph.idx) !== glyph) {\r\n throw new Error(\"Inconsistent inventory indexing\");\r\n }\r\n if (this.inventory[targetSlot] === null) {\r\n this.inventory[glyph.idx] = null;\r\n this.inventory[targetSlot] = glyph;\r\n glyph.idx = targetSlot;\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n } else {\r\n throw new Error(\"Attempted glyph move into non-empty slot\");\r\n }\r\n this.validate();\r\n },\r\n swap(glyphA, glyphB) {\r\n if (glyphA.idx === glyphB.idx) return;\r\n this.validate();\r\n this.inventory[glyphA.idx] = glyphB;\r\n this.inventory[glyphB.idx] = glyphA;\r\n const swapGlyph = glyphA.idx;\r\n glyphA.idx = glyphB.idx;\r\n glyphB.idx = swapGlyph;\r\n this.validate();\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n },\r\n addToInventory(glyph, requestedInventoryIndex, isExistingGlyph = false) {\r\n this.validate();\r\n if (!isExistingGlyph) glyph.id = GlyphGenerator.makeID();\r\n const isProtectedIndex = requestedInventoryIndex < this.protectedSlots;\r\n let index = this.findFreeIndex(isProtectedIndex);\r\n if (index < 0) return;\r\n if (requestedInventoryIndex !== undefined) {\r\n if (this.inventory[requestedInventoryIndex] === null) index = requestedInventoryIndex;\r\n }\r\n this.inventory[index] = glyph;\r\n glyph.idx = index;\r\n\r\n // This is done here when adding to the inventory in order to keep it out of the glyph generation hot path\r\n // It thus doesn't show up in manually choosing a glyph\r\n // This also only does anything if Ra has the appropriate unlock already.\r\n this.applyGamespeed(glyph);\r\n\r\n // This should only apply to glyphs you actually choose, so can't be done in glyph generation.\r\n // Sometimes a glyph you already have is added to the inventory (for example, unequipping),\r\n // but that's not an issue because then this line just won't do anything, which is fine.\r\n player.records.bestReality.glyphStrength = Math.clampMin(player.records.bestReality.glyphStrength, glyph.strength);\r\n\r\n player.reality.glyphs.inventory.push(glyph);\r\n if (requestedInventoryIndex === undefined && !isExistingGlyph) this.addVisualFlag(\"unseen\", glyph);\r\n if (isExistingGlyph) this.addVisualFlag(\"unequipped\", glyph);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n this.validate();\r\n },\r\n // These two visual flag functions update the corner tooltips for \"New!\" and unequipped glyphs\r\n addVisualFlag(target, glyph) {\r\n if (!this[target].includes(glyph.id)) this[target].push(glyph.id);\r\n },\r\n removeVisualFlag(target, glyph) {\r\n const index = Glyphs[target].indexOf(glyph.id);\r\n if (index > -1) Glyphs[target].splice(index, 1);\r\n },\r\n isMusicGlyph(glyph) {\r\n return glyph?.cosmetic === \"music\";\r\n },\r\n removeFromInventory(glyph) {\r\n // This can get called on a glyph not in inventory, during auto sacrifice.\r\n if (glyph.idx === null) return;\r\n this.validate();\r\n const index = player.reality.glyphs.inventory.indexOf(glyph);\r\n if (index < 0) return;\r\n this.inventory[glyph.idx] = null;\r\n player.reality.glyphs.inventory.splice(index, 1);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n this.validate();\r\n },\r\n validate() {\r\n for (const glyph of player.reality.glyphs.inventory) {\r\n if (this.inventory[glyph.idx] !== glyph) {\r\n throw new Error(\"validation error\");\r\n }\r\n }\r\n for (let i = 0; i < this.inventory.length; ++i) {\r\n if (this.inventory[i] && this.inventory[i].idx !== i) {\r\n throw new Error(\"backwards validation error\");\r\n }\r\n }\r\n },\r\n sort(sortFunction) {\r\n const glyphsToSort = player.reality.glyphs.inventory.filter(g => g.idx >= this.protectedSlots);\r\n const freeSpace = GameCache.glyphInventorySpace.value;\r\n const sortOrder = [\"power\", \"infinity\", \"replication\", \"time\", \"dilation\", \"effarig\",\r\n \"reality\", \"cursed\", \"amalgam\", \"companion\"];\r\n const byType = sortOrder.mapToObject(g => g, () => ({ glyphs: [], padding: 0 }));\r\n for (const g of glyphsToSort) byType[g.type].glyphs.push(g);\r\n let totalDesiredPadding = 0;\r\n for (const t of Object.values(byType)) {\r\n t.glyphs.sort(sortFunction);\r\n t.padding = Math.ceil(t.glyphs.length / 10) * 10 - t.glyphs.length;\r\n totalDesiredPadding += t.padding;\r\n }\r\n // If we want more padding than we actually have available, trim it down until it fits\r\n while (totalDesiredPadding > freeSpace) {\r\n let biggestPadding = sortOrder[0];\r\n for (const t of sortOrder) {\r\n if (byType[t].padding > byType[biggestPadding].padding) biggestPadding = t;\r\n }\r\n // Try to remove padding 5 at a time if possible\r\n const delta = byType[biggestPadding].padding > 5 ? 5 : 1;\r\n totalDesiredPadding -= delta;\r\n byType[biggestPadding].padding -= delta;\r\n }\r\n let outIndex = this.protectedSlots;\r\n for (const t of Object.values(byType)) {\r\n for (const g of t.glyphs) {\r\n if (this.inventory[outIndex]) this.swap(this.inventory[outIndex], g);\r\n else this.moveToEmpty(g, outIndex);\r\n ++outIndex;\r\n }\r\n outIndex += t.padding;\r\n }\r\n if (player.reality.autoCollapse) this.collapseEmptySlots();\r\n },\r\n sortByLevel() {\r\n this.sort(compare.level);\r\n },\r\n sortByPower() {\r\n this.sort(compare.power);\r\n },\r\n sortByScore() {\r\n this.sort(compare.score);\r\n },\r\n sortByEffect() {\r\n this.sort(compare.effect);\r\n },\r\n autoEquipBetterGlyphs(compareFunction) {\r\n if(typeof compareFunction != \"function\") return;\r\n Glyphs.active.forEach(equipped => {\r\n if(equipped === null) return;\r\n let sameTypeGlyphs = Glyphs.inventoryList.filter(g => g.type === equipped.type);\r\n if(sameTypeGlyphs.length === 0) return;\r\n if(sameTypeGlyphs.length > 1) {\r\n sameTypeGlyphs.sort(compareFunction);\r\n }\r\n let candidate = sameTypeGlyphs[0];\r\n if(compareFunction(equipped, candidate) > 0) Glyphs.swapIntoActive(candidate, equipped.idx);\r\n });\r\n },\r\n autoEquipByLevel() {\r\n this.autoEquipBetterGlyphs(compare.level);\r\n },\r\n autoEquipByPower() {\r\n this.autoEquipBetterGlyphs(compare.power);\r\n },\r\n autoEquipByScore() {\r\n this.autoEquipBetterGlyphs(compare.score);\r\n },\r\n autoEquipByEffect() {\r\n this.autoEquipBetterGlyphs(compare.effect);\r\n },\r\n // If there are enough glyphs that are better than the specified glyph, in every way, then\r\n // the glyph is objectively a useless piece of garbage.\r\n isObjectivelyUseless(glyph, threshold, inventoryIn) {\r\n if (player.reality.applyFilterToPurge && AutoGlyphProcessor.wouldKeep(glyph)) {\r\n return false;\r\n }\r\n function hasSomeBetterEffects(glyphA, glyphB, comparedEffects) {\r\n for (const effect of comparedEffects) {\r\n const c = effect.compareValues(\r\n effect.effect(glyphA.level, glyphA.strength),\r\n effect.effect(glyphB.level, glyphB.strength));\r\n // If the glyph in question is better in even one effect, it passes this comparison\r\n if (c > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n const toCompare = (inventoryIn ?? this.inventory).concat(this.active)\r\n .filter(g => g !== null &&\r\n g.type === glyph.type &&\r\n g.id !== glyph.id &&\r\n (g.level >= glyph.level || g.strength >= glyph.strength) &&\r\n ((g.effects & glyph.effects) === glyph.effects));\r\n let compareThreshold = glyph.type === \"effarig\" || glyph.type === \"reality\" ? 1 : 5;\r\n if (MendingMilestone.five.isReached){\r\n compareThreshold = glyph.type === \"effarig\" || glyph.type === \"reality\" ? 2 : 8;\r\n }\r\n compareThreshold = Math.clampMax(compareThreshold, threshold);\r\n if (toCompare.length < compareThreshold) {\r\n return false;\r\n }\r\n const comparedEffects = getGlyphEffectsFromBitmask(glyph.effects).filter(x => x.id.startsWith(glyph.type));\r\n const betterCount = toCompare.countWhere(other => !hasSomeBetterEffects(glyph, other, comparedEffects));\r\n return betterCount >= compareThreshold;\r\n },\r\n // Note that this same function is called with different parameters for purge (5), harsh purge (1), and sac all (0)\r\n // If deleteGlyphs === false, we are running this from the modal and are doing so purely to *count* the number of\r\n // removed glyphs. In this case, we copy the inventory and run the purge on the copy - we need to be able to remove\r\n // glyphs as we go, or else the purge logic will be wrong (eg. 7 identical glyphs will all be \"worse than 5 others\")\r\n autoClean(threshold = Glyphs.maxSlots, deleteGlyphs = true) {\r\n const isHarsh = threshold < Glyphs.maxSlots;\r\n let toBeDeleted = 0;\r\n const inventoryCopy = deleteGlyphs ? undefined : this.fakePurgeInventory();\r\n // If the player hasn't unlocked sacrifice yet, prevent them from removing any glyphs.\r\n if (!GlyphSacrificeHandler.canSacrifice) return toBeDeleted;\r\n // We look in backwards order so that later glyphs get cleaned up first\r\n for (let inventoryIndex = this.totalSlots - 1; inventoryIndex >= this.protectedSlots; --inventoryIndex) {\r\n const glyph = (inventoryCopy ?? this.inventory)[inventoryIndex];\r\n // Never clean companion, and only clean cursed if we choose to sacrifice all\r\n if (glyph === null || glyph.type === \"companion\" || (glyph.type === \"cursed\" && threshold !== 0) || this.type === \"amalgam\") continue;\r\n // Don't auto-clean custom glyphs (eg. music glyphs) unless it's harsh or delete all\r\n const isCustomGlyph = glyph.color !== undefined || glyph.symbol !== undefined;\r\n if (isCustomGlyph && !isHarsh) continue;\r\n // If the threshold for better glyphs needed is zero, the glyph is definitely getting deleted\r\n // no matter what (well, unless it can't be gotten rid of in current glyph removal mode).\r\n if (threshold === 0 || this.isObjectivelyUseless(glyph, threshold, inventoryCopy)) {\r\n if (deleteGlyphs) AutoGlyphProcessor.getRidOfGlyph(glyph);\r\n else inventoryCopy.splice(inventoryCopy.indexOf(glyph), 1);\r\n toBeDeleted++;\r\n }\r\n }\r\n if (player.reality.autoCollapse && deleteGlyphs) this.collapseEmptySlots();\r\n return toBeDeleted;\r\n },\r\n // Similar to copyForRecords, except that it also preserves null entries, passes on the IDs, and doesn't\r\n // sort the glyphs; these are all necessary for the purge logic to work correctly\r\n fakePurgeInventory() {\r\n return this.inventory.map(g => (g === null\r\n ? null\r\n : {\r\n id: g.id,\r\n type: g.type,\r\n level: g.level,\r\n strength: g.strength,\r\n effects: g.effects,\r\n color: g.color,\r\n symbol: g.symbol\r\n }));\r\n },\r\n harshAutoClean() {\r\n this.autoClean(1);\r\n },\r\n deleteAllUnprotected() {\r\n this.autoClean(0);\r\n },\r\n deleteAllRejected(deleteGlyphs = true) {\r\n let toBeDeleted = 0;\r\n for (const glyph of Glyphs.inventory) {\r\n if (glyph !== null && glyph.idx >= this.protectedSlots && !AutoGlyphProcessor.wouldKeep(glyph)) {\r\n if (deleteGlyphs) AutoGlyphProcessor.getRidOfGlyph(glyph);\r\n toBeDeleted++;\r\n }\r\n }\r\n if (player.reality.autoCollapse && deleteGlyphs) this.collapseEmptySlots();\r\n return toBeDeleted;\r\n },\r\n collapseEmptySlots() {\r\n const unprotectedGlyphs = player.reality.glyphs.inventory\r\n .filter(g => g.idx >= this.protectedSlots)\r\n .sort((a, b) => a.idx - b.idx);\r\n for (let index = 0; index < unprotectedGlyphs.length; index++) {\r\n this.moveToSlot(unprotectedGlyphs[index], this.protectedSlots + index);\r\n }\r\n },\r\n processSortingAfterReality() {\r\n if (VUnlocks.autoAutoClean.canBeApplied && player.reality.autoAutoClean) this.autoClean();\r\n switch (player.reality.autoSort) {\r\n case AUTO_SORT_MODE.NONE:\r\n break;\r\n case AUTO_SORT_MODE.LEVEL:\r\n this.sortByLevel();\r\n break;\r\n case AUTO_SORT_MODE.POWER:\r\n this.sortByPower();\r\n break;\r\n case AUTO_SORT_MODE.EFFECT:\r\n this.sortByEffect();\r\n break;\r\n case AUTO_SORT_MODE.SCORE:\r\n this.sortByScore();\r\n break;\r\n default:\r\n throw new Error(\"Unrecognized auto-sort mode\");\r\n }\r\n },\r\n processAutoEquipAfterReality() {\r\n switch (player.reality.autoEquip) {\r\n case AUTO_SORT_MODE.NONE:\r\n break;\r\n case AUTO_SORT_MODE.LEVEL:\r\n this.autoEquipByLevel();\r\n break;\r\n case AUTO_SORT_MODE.POWER:\r\n this.autoEquipByPower();\r\n break;\r\n case AUTO_SORT_MODE.EFFECT:\r\n this.autoEquipByEffect();\r\n break;\r\n case AUTO_SORT_MODE.SCORE:\r\n this.autoEquipByScore();\r\n break;\r\n default:\r\n throw new Error(\"Unrecognized auto-equip mode\");\r\n }\r\n },\r\n get levelCap() {\r\n return 1000000000000;\r\n },\r\n get instabilityThreshold() {\r\n return 1000 + getAdjustedGlyphEffect(\"effarigglyph\") + ImaginaryUpgrade(7).effectOrDefault(0);\r\n },\r\n get hyperInstabilityThreshold() {\r\n return 3000 + this.instabilityThreshold;\r\n },\r\n get ultraInstabilityThreshold(){\r\n //let effarigMemDelay = Ra.unlocks.harshInstabilityDelay.isUnlocked ? (500 * (Math.max(1, Math.floor(Ra.pets.effarig.level / 5) - 10))) : 0;\r\n return 45000 + (500 * MendingUpgrade(6).boughtAmount) + Ra.unlocks.harshInstabilityDelay.effectOrDefault(0);\r\n },\r\n get omegaInstabilityThreshold(){\r\n return 100000;\r\n },\r\n get hardcap(){\r\n return 100000000;\r\n },\r\n clearUndo() {\r\n player.reality.glyphs.undo = [];\r\n },\r\n saveUndo(targetSlot) {\r\n const undoData = {\r\n targetSlot,\r\n am: new Decimal(Currency.antimatter.value),\r\n ip: new Decimal(Currency.infinityPoints.value),\r\n ep: new Decimal(Currency.eternityPoints.value),\r\n tt: Currency.timeTheorems.max.minus(TimeTheorems.totalPurchased()),\r\n ecs: EternityChallenges.all.map(e => e.completions),\r\n thisInfinityTime: player.records.thisInfinity.time,\r\n thisInfinityRealTime: player.records.thisInfinity.realTime,\r\n thisEternityTime: player.records.thisEternity.time,\r\n thisEternityRealTime: player.records.thisEternity.realTime,\r\n thisRealityTime: player.records.thisReality.time,\r\n thisRealityRealTime: player.records.thisReality.realTime,\r\n storedTime: player.celestials.enslaved.stored,\r\n dilationStudies: player.dilation.studies.toBitmask(),\r\n dilationUpgrades: player.dilation.upgrades.toBitmask(),\r\n dilationRebuyables: DilationUpgrades.rebuyable.mapToObject(d => d.id, d => d.boughtAmount),\r\n tp: new Decimal(Currency.tachyonParticles.value),\r\n dt: new Decimal(Currency.dilatedTime.value),\r\n };\r\n player.reality.glyphs.undo.push(undoData);\r\n },\r\n undo() {\r\n const inventorySlot = Glyphs.findFreeIndex(player.options.respecIntoProtected);\r\n if (inventorySlot === -1 || player.reality.glyphs.undo.length === 0) return;\r\n const undoData = player.reality.glyphs.undo.pop();\r\n // We store this value here so that we can restore it later on in the reality reset code, since we immediately\r\n // change equipped glyph status here but only update requirement checks within finishProcessReality()\r\n this.bestUndoGlyphCount = player.requirementChecks.reality.maxGlyphs;\r\n this.unequip(undoData.targetSlot, inventorySlot);\r\n finishProcessReality({\r\n reset: true,\r\n glyphUndo: true,\r\n restoreCelestialState: true,\r\n });\r\n Currency.antimatter.value = new Decimal(undoData.am);\r\n Currency.infinityPoints.value = new Decimal(undoData.ip);\r\n Currency.eternityPoints.value = new Decimal(undoData.ep);\r\n Currency.timeTheorems.value = new Decimal(undoData.tt);\r\n EternityChallenges.all.map((ec, ecIndex) => ec.completions = undoData.ecs[ecIndex]);\r\n player.records.thisInfinity.time = undoData.thisInfinityTime;\r\n player.records.thisInfinity.realTime = undoData.thisInfinityRealTime;\r\n player.records.thisEternity.time = undoData.thisEternityTime;\r\n player.records.thisEternity.realTime = undoData.thisEternityRealTime;\r\n player.records.thisReality.time = undoData.thisRealityTime;\r\n player.records.thisReality.realTime = undoData.thisRealityRealTime;\r\n player.celestials.enslaved.stored = undoData.storedTime || 0;\r\n if (undoData.dilationStudies) {\r\n player.dilation.studies = Array.fromBitmask(undoData.dilationStudies);\r\n player.dilation.upgrades = new Set(Array.fromBitmask(undoData.dilationUpgrades));\r\n for (const id of Object.keys(undoData.dilationRebuyables)) {\r\n DilationUpgrades.fromId(id).boughtAmount = undoData.dilationRebuyables[id];\r\n }\r\n Currency.tachyonParticles.value = new Decimal(undoData.tp);\r\n Currency.dilatedTime.value = new Decimal(undoData.dt);\r\n }\r\n if (Player.automatorUnlocked && AutomatorBackend.state.forceRestart) {\r\n AutomatorBackend.start(player.reality.automator.state.editorScript);\r\n }\r\n },\r\n copyForRecords(glyphList) {\r\n // Sorting by effect ensures consistent ordering by type, based on how the effect bitmasks are structured\r\n return glyphList.map(g => ({\r\n type: g.type,\r\n level: g.level,\r\n strength: g.strength,\r\n effects: g.effects,\r\n color: g.color,\r\n symbol: g.symbol, }))\r\n .sort((a, b) => b.effects - a.effects);\r\n },\r\n // Normal glyph count minus 3 for each cursed glyph, uses 4 instead of 3 in the calculation because cursed glyphs\r\n // still contribute to the length of the active list. Note that it only ever decreases if startingReality is true.\r\n updateMaxGlyphCount(startingReality = false) {\r\n const activeGlyphList = this.activeWithoutCompanion;\r\n const currCount = activeGlyphList.length - 4 * activeGlyphList.filter(x => x && x.type === \"cursed\").length;\r\n if (startingReality) player.requirementChecks.reality.maxGlyphs = currCount;\r\n player.requirementChecks.reality.maxGlyphs = Math.max(player.requirementChecks.reality.maxGlyphs, currCount);\r\n },\r\n // Modifies a basic glyph to have timespeed, and adds the new effect to time glyphs\r\n applyGamespeed(glyph) {\r\n if (!Ra.unlocks.allGamespeedGlyphs.canBeApplied) return;\r\n if (BASIC_GLYPH_TYPES.includes(glyph.type)) {\r\n glyph.effects |= (1 << GlyphEffects.timespeed.bitmaskIndex);\r\n if (glyph.type === \"time\") {\r\n glyph.effects |= (1 << GlyphEffects.timeshardpow.bitmaskIndex);\r\n }\r\n }\r\n },\r\n swapIntoActive(glyph, targetSlot) {\r\n this.removeFromInventory(glyph);\r\n this.unequip(targetSlot, glyph.idx);\r\n finishProcessReality({\r\n reset: true,\r\n glyphUndo: false,\r\n restoreCelestialState: true,\r\n });\r\n player.reality.glyphs.active.push(glyph);\r\n this.active[targetSlot] = glyph;\r\n glyph.idx = targetSlot;\r\n this.updateRealityGlyphEffects();\r\n this.updateMaxGlyphCount(true);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n this.validate();\r\n },\r\n // Mostly used for key-swapping glyph set UI elements; composites the entire glyph set together in a way which is\r\n // relatively unlikely to cause collisions between different glyph sets unless they're actually the same glyphs.\r\n // Different permutations of the same glyphs should produce the same hash, but aren't guaranteed to\r\n hash(glyphSet) {\r\n let hash = 1;\r\n for (const glyph of glyphSet) {\r\n // This should be at most around e23 or so in practice\r\n const singleGlyphHash = Math.pow(glyph.level, 2) * Math.pow(glyph.strength, 4) * glyph.effects *\r\n glyph.type.charCodeAt(0);\r\n hash *= singleGlyphHash;\r\n }\r\n return hash;\r\n },\r\n giveCursedGlyph() {\r\n if (GameCache.glyphInventorySpace.value === 0) {\r\n Modal.message.show(\"No available inventory space; Sacrifice some Glyphs to free up space.\",\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n return;\r\n }\r\n const cursedCount = this.allGlyphs.filter(g => g !== null && g.type === \"cursed\").length;\r\n if (cursedCount >= 8) {\r\n GameUI.notify.error(`You don't need more than ${format(8)} Cursed Glyphs!`);\r\n } else {\r\n this.addToInventory(GlyphGenerator.cursedGlyph());\r\n GameUI.notify.error(\"Created a Cursed Glyph\");\r\n }\r\n }\r\n};\r\n\r\nclass GlyphSacrificeState extends GameMechanicState { }\r\n\r\nexport const GlyphSacrifice = mapGameDataToObject(\r\n GameDatabase.reality.glyphSacrifice,\r\n config => new GlyphSacrificeState(config)\r\n);\r\n\r\nexport function recalculateAllGlyphs() {\r\n for (let i = 0; i < player.reality.glyphs.active.length; i++) {\r\n calculateGlyph(player.reality.glyphs.active[i]);\r\n }\r\n // Delete any glyphs that are in overflow spots:\r\n player.reality.glyphs.inventory = player.reality.glyphs.inventory.filter(\r\n glyph => glyph.idx < Glyphs.totalSlots);\r\n for (let i = 0; i < player.reality.glyphs.inventory.length; i++) {\r\n calculateGlyph(player.reality.glyphs.inventory[i]);\r\n }\r\n Glyphs.updateRealityGlyphEffects();\r\n Glyphs.refresh();\r\n}\r\n\r\n// Makes sure level is a positive whole number and rarity is >0% (retroactive fixes) and recalculates effects\r\nexport function calculateGlyph(glyph) {\r\n if (glyph.color === undefined && glyph.symbol === undefined) {\r\n glyph.level = Math.max(1, Math.round(glyph.level));\r\n if (glyph.rawLevel === undefined) {\r\n // Only correct below the second round of instability, but it only matters for glyphs produced before\r\n // this was merged, so it's not a big deal.\r\n glyph.rawLevel = glyph.level < 1000 ? glyph.level : (Math.pow(0.004 * glyph.level - 3, 2) - 1) * 125 + 1000;\r\n }\r\n//Ra.unlocks.brokenLimit.isUnlocked\r\n // Used to randomly generate strength in this case; I don't think we actually care.\r\n if (glyph.strength === 1) glyph.strength = 1.5;\r\n glyph.strength = Math.min(rarityToStrength(1000), glyph.strength);\r\n }\r\n}\r\n\r\nexport function getRarity(x) {\r\n return GlyphRarities.find(e => x >= e.minStrength);\r\n}\r\n\r\nexport function getAdjustedGlyphLevel(glyph, realityGlyphBoost = Glyphs.levelBoost, ignoreCelestialEffects = false) {\r\n const level = glyph.level;\r\n if (!ignoreCelestialEffects) {\r\n if (Pelle.isDoomed) return Math.min(level, Pelle.glyphMaxLevel);\r\n if (Enslaved.isRunning) return Math.max(level, Enslaved.glyphLevelMin);\r\n if (Effarig.isRunning) return Math.min(level, Effarig.glyphLevelCap);\r\n }\r\n if (BASIC_GLYPH_TYPES.includes(glyph.type)) return level + realityGlyphBoost;\r\n return level;\r\n}\r\n\r\nexport function respecGlyphs() {\r\n if (!Glyphs.unequipAll()) {\r\n Modal.message.show(\"Some of your Glyphs could not be unequipped due to lack of inventory space.\",\r\n { closeEvent: GAME_EVENT.GLYPHS_CHANGED });\r\n }\r\n player.reality.respec = false;\r\n}\r\n","class CosmeticGlyphType {\r\n constructor(setup, isCosmetic) {\r\n this.id = setup.id;\r\n this._defaultSymbol = setup.symbol;\r\n this._defaultColor = setup.color;\r\n this.preventBlur = setup.preventBlur ?? false;\r\n this.isUnlocked = setup.isUnlocked;\r\n this._canCustomize = setup.canCustomize;\r\n this.fixedSymbolColor = setup.fixedSymbolColor ?? false;\r\n this.isCosmetic = isCosmetic;\r\n }\r\n\r\n // This looks hacky because isUnlocked is also used for game mechanic purposes with non-cosmetic\r\n // types and must be false for cursed, reality, and companion glyphs. However, we use it to determine\r\n // if a type should be displayed at all in the case of cosmetic types\r\n get canCustomize() {\r\n return (!this.isCosmetic || (this.isUnlocked?.() ?? true)) && (this._canCustomize?.() ?? true);\r\n }\r\n\r\n get defaultSymbol() {\r\n return {\r\n symbol: this._defaultSymbol,\r\n blur: !this.preventBlur,\r\n };\r\n }\r\n\r\n get defaultColor() {\r\n const color = this.id === \"reality\" ? GlyphAppearanceHandler.realityColor : this._defaultColor;\r\n const isNormallyDark = !GlyphAppearanceHandler.isLightBG;\r\n return {\r\n border: color,\r\n bg: (isNormallyDark === (this.id === \"cursed\" || this.id === \"amalgam\")) ? \"white\" : \"black\",\r\n };\r\n }\r\n\r\n get currentSymbol() {\r\n const custom = player.reality.glyphs.cosmetics.symbolMap[this.id];\r\n if (!player.reality.glyphs.cosmetics.active || !custom) return this.defaultSymbol;\r\n return {\r\n symbol: custom,\r\n blur: !(this.preventBlur || GlyphAppearanceHandler.unblurredSymbols.includes(custom)),\r\n };\r\n }\r\n\r\n get currentColor() {\r\n const custom = player.reality.glyphs.cosmetics.colorMap[this.id];\r\n if (!player.reality.glyphs.cosmetics.active || !custom) return this.defaultColor;\r\n const colorProps = GlyphAppearanceHandler.getColorProps(custom);\r\n return {\r\n ...colorProps,\r\n str: custom,\r\n };\r\n }\r\n\r\n get ignoreRarityColor() {\r\n return this.isCosmetic || this.fixedSymbolColor;\r\n }\r\n}\r\n\r\nconst functionalGlyphs = mapGameDataToObject(\r\n GameDatabase.reality.glyphTypes,\r\n config => new CosmeticGlyphType(config, false)\r\n);\r\n\r\nconst cosmeticGlyphs = mapGameDataToObject(\r\n GameDatabase.reality.cosmeticGlyphs,\r\n config => new CosmeticGlyphType(config, true)\r\n);\r\n\r\nexport const CosmeticGlyphTypes = {\r\n ...functionalGlyphs,\r\n ...cosmeticGlyphs,\r\n get list() {\r\n return Object.keys({ ...GameDatabase.reality.glyphTypes, ...GameDatabase.reality.cosmeticGlyphs })\r\n .map(e => CosmeticGlyphTypes[e]);\r\n },\r\n};\r\n\r\nexport const GlyphAppearanceHandler = {\r\n setInModal: null,\r\n chosenFromModal: null,\r\n get cosmeticsEnabled() {\r\n return player.reality.glyphs.cosmetics.active;\r\n },\r\n get symbolMap() {\r\n return player.reality.glyphs.cosmetics.symbolMap;\r\n },\r\n get colorMap() {\r\n return player.reality.glyphs.cosmetics.colorMap;\r\n },\r\n get availableSymbols() {\r\n return Object.values(GameDatabase.reality.glyphCosmeticSets)\r\n .filter(s => this.unlockedSets.includes(s.id))\r\n .map(s => s.symbol)\r\n .filter(s => s);\r\n },\r\n // Sort the colors by hue, otherwise finding specific colors would be a mess for UX.\r\n // However, colors \"close enough to grayscale\" are sorted separately and first\r\n get availableColors() {\r\n const sortedArray = Object.values(GameDatabase.reality.glyphCosmeticSets)\r\n .filter(s => this.unlockedSets.includes(s.id))\r\n .flatMap(s => s.color)\r\n .sort((a, b) => {\r\n const getHue = hex => {\r\n const parts = hex.split(\"#\");\r\n const color = parts[1];\r\n const rgb = [\r\n parseInt(color.substring(0, 2), 16) / 255,\r\n parseInt(color.substring(2, 4), 16) / 255,\r\n parseInt(color.substring(4), 16) / 255\r\n ];\r\n const min = Math.min(...rgb), max = Math.max(...rgb);\r\n if (max - min < 0.3) return max;\r\n let rawHue;\r\n if (rgb[0] === max) rawHue = (rgb[1] - rgb[2]) / (max - min);\r\n else if (rgb[1] === max) rawHue = 2 + (rgb[2] - rgb[1]) / (max - min);\r\n else rawHue = 4 + (rgb[0] - rgb[1]) / (max - min);\r\n return 6 + ((rawHue + 6) % 6);\r\n };\r\n return getHue(a) - getHue(b);\r\n })\r\n .filter(c => c);\r\n\r\n // We want two rows in the color selection Vue component, but that displays options in columns (one column\r\n // per set of symbol options). Here we do a bit of array manipulation to lay out colors as two rows, separated\r\n // by BG color and with the longer row on top (UI doesn't handle empty top-row spots well)\r\n const blackArr = sortedArray.filter(c => c.charAt(0) === \"B\");\r\n const whiteArr = sortedArray.filter(c => c.charAt(0) === \"W\");\r\n const longer = blackArr.length > whiteArr.length ? blackArr : whiteArr;\r\n const shorter = blackArr.length > whiteArr.length ? whiteArr : blackArr;\r\n const combined = [];\r\n for (let index = 0; index < longer.length; index++) {\r\n if (index < shorter.length) combined.push([longer[index], shorter[index]]);\r\n else combined.push([longer[index]]);\r\n }\r\n\r\n return combined;\r\n },\r\n get availableTypes() {\r\n return Object.values(GameDatabase.reality.cosmeticGlyphs)\r\n .map(type => CosmeticGlyphTypes[type.id])\r\n .filter(type => type.isUnlocked())\r\n .map(type => type.id);\r\n },\r\n get unblurredSymbols() {\r\n return Object.values(GameDatabase.reality.glyphCosmeticSets)\r\n .filter(s => s.preventBlur)\r\n .map(s => s.symbol)\r\n .flat();\r\n },\r\n // Note: This can *technically* be inconsistent with the actual number of sets, but only y a cheated save.\r\n get expectedSetCount() {\r\n return ShopPurchaseData.singleCosmeticSet + player.records.fullGameCompletions;\r\n },\r\n\r\n // Returns true for \"light\" BG glyphs and false for \"dark\" BG glyphs\r\n get isLightBG() {\r\n switch (player.options.glyphBG) {\r\n case GLYPH_BG_SETTING.AUTO:\r\n return !Theme.current().isDark();\r\n case GLYPH_BG_SETTING.LIGHT:\r\n return true;\r\n case GLYPH_BG_SETTING.DARK:\r\n return false;\r\n default:\r\n throw new Error(\"Unrecognized Glyph BG setting\");\r\n }\r\n },\r\n getBorderColor(type) {\r\n if ((type === \"cursed\" || this.type === \"amalgam\") && !CosmeticGlyphTypes.cursed.currentColor.str) return this.isLightBG ? \"#ffffff\" : \"#000000\";\r\n return CosmeticGlyphTypes[type].currentColor.border;\r\n },\r\n getRarityColor(strength, type) {\r\n const rarityEntry = getRarity(strength);\r\n const isLight = CosmeticGlyphTypes[type].currentColor.bg === \"white\";\r\n const colorKey = `${isLight ? \"light\" : \"dark\"}${player.options.highContrastRarity ? \"HighContrast\" : \"Color\"}`;\r\n return rarityEntry[colorKey];\r\n },\r\n getColorProps(colorStr) {\r\n // This condition is a bit odd - this specifically selects out the hybrid custom colors which have both a BG color\r\n // and a hex code. Reality color looks like \"rgb(...\" and also goes in this conditional\r\n if (colorStr?.charAt(1) !== \"#\") {\r\n return {\r\n border: colorStr,\r\n bg: this.isLightBG ? \"white\" : \"black\",\r\n };\r\n }\r\n return {\r\n border: colorStr.substring(1),\r\n bg: colorStr.charAt(0) === \"B\" ? \"black\" : \"white\",\r\n };\r\n },\r\n // Only used to ensure readable glyph tooltips\r\n getBaseColor(isInverted) {\r\n const isNormallyDark = !this.isLightBG;\r\n if (isInverted) return isNormallyDark ? \"white\" : \"black\";\r\n return isNormallyDark ? \"black\" : \"white\";\r\n },\r\n\r\n // This produces a linearly interpolated color between the basic glyph colors, but with RGB channels copied and\r\n // hardcoded from the color data because that's probably preferable to a very hacky hex conversion method. The\r\n // order used is {infinity, dilation, power, replication, time, infinity, ... }. This is used in multiple places\r\n // and this approach is much lighter on performance due to colored keyframe animations causing significant lag.\r\n get realityColor() {\r\n // RGB values for the colors to interpolate between\r\n const r = [182, 100, 34, 3, 178, 182];\r\n const g = [127, 221, 170, 169, 65, 127];\r\n const b = [51, 23, 72, 244, 227, 51];\r\n\r\n // Integer and fractional parts for interpolation parameter (10s period, equal 2s per step)\r\n const timer = Date.now() % 10000;\r\n const i = Math.floor(timer / 2000);\r\n const f = timer / 2000 - i;\r\n\r\n return `rgb(${r[i] * (1 - f) + r[i + 1] * f},\r\n ${g[i] * (1 - f) + g[i + 1] * f},\r\n ${b[i] * (1 - f) + b[i + 1] * f})`;\r\n },\r\n\r\n get unlockedSets() {\r\n if (ShopPurchase.allCosmeticSets > 0) return Object.keys(GameDatabase.reality.glyphCosmeticSets);\r\n return [...new Set(player.reality.glyphs.cosmetics.unlockedFromNG.concat(ShopPurchaseData.unlockedCosmetics))];\r\n },\r\n get lockedSets() {\r\n return Object.keys(GameDatabase.reality.glyphCosmeticSets).filter(set => !this.unlockedSets.includes(set));\r\n },\r\n // Unlocks the set chosen in the modal, choosing a random available one as a fallback. This is only called for\r\n // sets unlocked through game completions; STD purchases are handled with ShopPurchaseData\r\n unlockSet() {\r\n const lockedSets = this.lockedSets;\r\n const toUnlock = GlyphAppearanceHandler.chosenFromModal?.id;\r\n\r\n let unlocked;\r\n if (toUnlock && lockedSets.includes(toUnlock)) {\r\n unlocked = toUnlock;\r\n } else if (!toUnlock && lockedSets.length > 0) {\r\n // Randomness doesn't need to be seeded since we normally let the player choose and randomness is just a fallback\r\n unlocked = lockedSets[Math.floor(Math.random() * lockedSets.length)];\r\n } else {\r\n return;\r\n }\r\n\r\n player.reality.glyphs.cosmetics.unlockedFromNG.push(unlocked);\r\n const entry = GameDatabase.reality.glyphCosmeticSets[unlocked];\r\n GameUI.notify.info(`You have unlocked the \"${entry.name}\" Set for Glyph cosmetics!`, 10000);\r\n GlyphAppearanceHandler.chosenFromModal = null;\r\n this.applyNotification();\r\n },\r\n applyNotification() {\r\n TabNotification.newGlyphCosmetic.clearTrigger();\r\n TabNotification.newGlyphCosmetic.tryTrigger();\r\n player.reality.glyphs.cosmetics.glowNotification = true;\r\n },\r\n\r\n // Deletes invalid glyph cosmetics for individual symbols or colors which aren't unlocked. Note that this should only\r\n // be called on import and not on page load, as there is a minor async delay on-load which will cause STD purchases\r\n // to not be accounted for when loading an already-existing local save\r\n clearInvalidCosmetics() {\r\n const allGlyphs = player.reality.glyphs.active.concat(player.reality.glyphs.inventory);\r\n const allSymbols = GlyphAppearanceHandler.availableSymbols.flat();\r\n const allColors = GlyphAppearanceHandler.availableSymbols.flat();\r\n for (const glyph of allGlyphs) {\r\n if (!allSymbols.includes(glyph.symbol)) glyph.symbol = undefined;\r\n if (!allColors.includes(glyph.color)) glyph.color = undefined;\r\n if (!GlyphAppearanceHandler.availableTypes.includes(glyph.cosmetic)) glyph.cosmetic = undefined;\r\n }\r\n const cosmetics = player.reality.glyphs.cosmetics;\r\n for (const key of Object.keys(cosmetics.symbolMap)) {\r\n const selectedSymbol = cosmetics.symbolMap[key];\r\n if (!allSymbols.includes(selectedSymbol)) cosmetics.symbolMap[key] = undefined;\r\n }\r\n for (const key of Object.keys(cosmetics.colorMap)) {\r\n const selectedColor = cosmetics.symbolMap[key];\r\n if (!allColors.includes(selectedColor)) cosmetics.colorMap[key] = undefined;\r\n }\r\n }\r\n};\r\n","import { Pelle } from \"../globals\";\r\n\r\nimport { GlyphCombiner } from \"@/core/secret-formula\";\r\n\r\nclass GlyphEffectState {\r\n constructor(id, props) {\r\n this._id = id;\r\n this._adjustApply = props.adjustApply;\r\n }\r\n\r\n applyEffect(applyFn) {\r\n let effectValue = getAdjustedGlyphEffect(this._id);\r\n if (this._adjustApply !== undefined) {\r\n effectValue = this._adjustApply(effectValue);\r\n }\r\n applyFn(effectValue);\r\n }\r\n}\r\n\r\nexport const GlyphEffect = {\r\n dimBoostPower: new GlyphEffectState(\"powerdimboost\", {\r\n adjustApply: value => Math.max(1, value)\r\n }),\r\n ipMult: new GlyphEffectState(\"infinityIP\", {\r\n adjustApply: value => Decimal.max(1, value)\r\n }),\r\n epMult: new GlyphEffectState(\"timeEP\", {\r\n adjustApply: value => Decimal.max(1, value)\r\n })\r\n};\r\n\r\n/**\r\n * This returns just the value, unlike getTotalEffect(), which outputs the softcap status as well\r\n * This variant is used by GameCache\r\n * @param {string} effectKey\r\n * @return {number | Decimal}\r\n */\r\nexport function getAdjustedGlyphEffectUncached(effectKey) {\r\n return getTotalEffect(effectKey).value;\r\n}\r\n\r\n/**\r\n * This returns just the value, unlike getTotalEffect(), which outputs the softcap status as well\r\n * @param {string} effectKey\r\n * @return {number | Decimal}\r\n */\r\nexport function getAdjustedGlyphEffect(effectKey) {\r\n return GameCache.glyphEffects.value[effectKey];\r\n}\r\n\r\n/**\r\n * Takes the glyph effect value and feeds it through the conversion function that gives the value of the secondary\r\n * effect from glyph alteration.\r\n * @param {string} effectKey\r\n * @return {number | Decimal}\r\n */\r\nexport function getSecondaryGlyphEffect(effectKey) {\r\n return GlyphEffects[effectKey].conversion(getAdjustedGlyphEffect(effectKey));\r\n}\r\n\r\n/**\r\n * Finds all equipped glyphs with the specified effect and returns an array of effect values.\r\n * @param {string} effectKey\r\n * @returns {number[]}\r\n */\r\nexport function getGlyphEffectValues(effectKey) {\r\n if (!orderedEffectList.includes(effectKey)) {\r\n throw new Error(`Unknown Glyph effect requested \"${effectKey}\"'`);\r\n }\r\n return player.reality.glyphs.active\r\n .filter(glyph => ((1 << GlyphEffects[effectKey].bitmaskIndex) & glyph.effects) !== 0)\r\n .filter(glyph => generatedTypes.includes(glyph.type) === GlyphEffects[effectKey].isGenerated)\r\n .map(glyph => getSingleGlyphEffectFromBitmask(effectKey, glyph));\r\n}\r\n\r\n// Combines all specified glyph effects, reduces some boilerplate\r\nfunction getTotalEffect(effectKey) {\r\n return GlyphEffects[effectKey].combine(getGlyphEffectValues(effectKey));\r\n}\r\n\r\n/**\r\n * Key is type+effect\r\n */\r\nexport function separateEffectKey(effectKey) {\r\n let type = \"\";\r\n let effect = \"\";\r\n for (let i = 0; i < GLYPH_TYPES.length; i++) {\r\n if (effectKey.substring(0, GLYPH_TYPES[i].length) === GLYPH_TYPES[i]) {\r\n type = GLYPH_TYPES[i];\r\n effect = effectKey.substring(GLYPH_TYPES[i].length);\r\n break;\r\n }\r\n }\r\n return [type, effect];\r\n}\r\n\r\n// Turns a glyph effect bitmask into an effect list and corresponding values. This also picks up non-generated effects,\r\n// since there is some id overlap. Those should be filtered out as needed after calling this function.\r\n// eslint-disable-next-line max-params\r\nexport function getGlyphEffectValuesFromBitmask(bitmask, level, baseStrength, type) {\r\n // If we don't specifically exclude companion glyphs, the first-reality EP record is wrong within Doomed since its\r\n // value is encoded in the rarity field\r\n const strength = (Pelle.isDoomed && type !== \"companion\") ? Pelle.glyphStrength : baseStrength;\r\n return getGlyphEffectsFromBitmask(bitmask)\r\n .map(effect => ({\r\n id: effect.id,\r\n value: effect.effect(level, strength)\r\n }));\r\n}\r\n\r\n// Pulls out a single effect value from a glyph's bitmask, returning just the value (nothing for missing effects)\r\nexport function getSingleGlyphEffectFromBitmask(effectName, glyph) {\r\n const glyphEffect = GlyphEffects[effectName];\r\n if ((glyph.effects & (1 << glyphEffect.bitmaskIndex)) === 0) {\r\n return undefined;\r\n }\r\n return glyphEffect.effect(getAdjustedGlyphLevel(glyph), Pelle.isDoomed ? Pelle.glyphStrength : glyph.strength);\r\n}\r\n\r\n// Note this function is used for glyph bitmasks, news ticker bitmasks, and offline achievements\r\nexport function countValuesFromBitmask(bitmask) {\r\n let numEffects = 0;\r\n let bits = bitmask;\r\n while (bits !== 0) {\r\n numEffects += bits & 1;\r\n bits >>= 1;\r\n }\r\n return numEffects;\r\n}\r\n\r\n// Returns both effect value and softcap status\r\nexport function getActiveGlyphEffects() {\r\n let effectValues = orderedEffectList\r\n .map(effect => ({ effect, values: getGlyphEffectValues(effect) }))\r\n .filter(ev => ev.values.length > 0)\r\n .map(ev => ({\r\n id: ev.effect,\r\n value: GlyphEffects[ev.effect].combine(ev.values),\r\n }));\r\n const effectNames = effectValues.map(e => e.id);\r\n\r\n // Numerically combine cursed effects with other glyph effects which directly conflict with them\r\n const cursedEffects = [\"cursedgalaxies\", \"curseddimensions\", \"cursedEP\"];\r\n const conflictingEffects = [\"realitygalaxies\", \"effarigdimensions\", \"timeEP\"];\r\n const combineFunction = [GlyphCombiner.multiply, GlyphCombiner.multiply, GlyphCombiner.multiplyDecimal];\r\n for (let i = 0; i < cursedEffects.length; i++) {\r\n if (effectNames.includes(cursedEffects[i]) && effectNames.includes(conflictingEffects[i])) {\r\n const combined = combineFunction[i]([getAdjustedGlyphEffect(cursedEffects[i]),\r\n getAdjustedGlyphEffect(conflictingEffects[i])]);\r\n if (Decimal.lt(combined, 1)) {\r\n effectValues = effectValues.filter(e => e.id !== conflictingEffects[i]);\r\n effectValues.filter(e => e.id === cursedEffects[i])[0].value.value = combined;\r\n } else {\r\n effectValues = effectValues.filter(e => e.id !== cursedEffects[i]);\r\n effectValues.filter(e => e.id === conflictingEffects[i])[0].value.value = combined;\r\n }\r\n }\r\n }\r\n\r\n return effectValues;\r\n}\r\n","/**\r\n * It turns out reading and writing the RNG state from player is really slow, for\r\n * some reason. Thus, it's very advantageous to get an RNG as a local variable, and only\r\n * write the state back out to player when we are done with it.\r\n * So, this interface is implemented by a real and fake RNG class; after creating one and\r\n * using it, call finalize on it to write the seed out.\r\n */\r\nimport { deepmerge } from \"@/utility/deepmerge\";\r\nimport { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\nimport { CorruptionUpgrade } from \"../corruption-upgrades\";\r\n\r\nclass GlyphRNG {\r\n static get SECOND_GAUSSIAN_DEFAULT_VALUE() {\r\n return 1e6;\r\n }\r\n\r\n constructor(seed, secondGaussian) {\r\n this.seed = seed;\r\n this.secondGaussian = secondGaussian;\r\n }\r\n\r\n uniform() {\r\n const state = xorshift32Update(this.seed);\r\n this.seed = state;\r\n return state * 2.3283064365386963e-10 + 0.5;\r\n }\r\n\r\n normal() {\r\n if (this.secondGaussian !== GlyphRNG.SECOND_GAUSSIAN_DEFAULT_VALUE) {\r\n const toReturn = this.secondGaussian;\r\n this.secondGaussian = GlyphRNG.SECOND_GAUSSIAN_DEFAULT_VALUE;\r\n return toReturn;\r\n }\r\n let u = 0, v = 0, s = 0;\r\n do {\r\n u = this.uniform() * 2 - 1;\r\n v = this.uniform() * 2 - 1;\r\n s = u * u + v * v;\r\n } while (s >= 1 || s === 0);\r\n s = Math.sqrt(-2 * Math.log(s) / s);\r\n this.secondGaussian = v * s;\r\n return u * s;\r\n }\r\n\r\n /**\r\n * Write the seed out to where it can be restored\r\n * @abstract\r\n */\r\n finalize() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get isFake() { throw new NotImplementedError(); }\r\n}\r\n\r\nexport const GlyphGenerator = {\r\n // Glyph choices will have more uniformly-distributed properties up for this many groups\r\n // of uniform glyphs. The size of a uniformity group is 5, so this gives uniformly-distributed\r\n // properties up to a reality count one more than 5x this value; the modified RNG for uniform\r\n // glyphs excludes the first fixed glyph and only starts from the 2nd one onward\r\n uniformityGroups: 4,\r\n\r\n fakeSeed: Date.now() % Math.pow(2, 32),\r\n fakeSecondGaussian: null,\r\n /* eslint-disable lines-between-class-members */\r\n RealGlyphRNG: class extends GlyphRNG {\r\n constructor() { super(player.reality.seed, player.reality.secondGaussian); }\r\n finalize() {\r\n player.reality.seed = this.seed;\r\n player.reality.secondGaussian = this.secondGaussian;\r\n }\r\n get isFake() { return false; }\r\n },\r\n\r\n FakeGlyphRNG: class extends GlyphRNG {\r\n constructor() { super(GlyphGenerator.fakeSeed, GlyphGenerator.fakeSecondGaussian); }\r\n finalize() {\r\n GlyphGenerator.fakeSeed = this.seed;\r\n GlyphGenerator.fakeSecondGaussian = this.secondGaussian;\r\n }\r\n get isFake() { return true; }\r\n },\r\n\r\n MusicGlyphRNG: class extends GlyphRNG {\r\n constructor() { super(player.reality.musicSeed, player.reality.musicSecondGaussian); }\r\n finalize() {\r\n player.reality.musicSeed = this.seed;\r\n player.reality.musicSecondGaussian = this.secondGaussian;\r\n }\r\n get isFake() { return false; }\r\n },\r\n /* eslint-enable lines-between-class-members */\r\n\r\n startingGlyph(level) {\r\n const initialStrength = 1.5;\r\n return {\r\n id: undefined,\r\n idx: null,\r\n type: \"power\",\r\n // The initial strength is very slightly above average.\r\n strength: initialStrength,\r\n level: level.actualLevel,\r\n rawLevel: level.rawLevel,\r\n effects: makeGlyphEffectBitmask([\"powerpow\"]),\r\n };\r\n },\r\n\r\n randomGlyph(level, rngIn, typeIn = null) {\r\n const rng = rngIn || new GlyphGenerator.RealGlyphRNG();\r\n const strength = this.randomStrength(rng);\r\n const type = typeIn || this.randomType(rng);\r\n let numEffects = this.randomNumberOfEffects(type, strength, level.actualLevel, rng);\r\n if (type !== \"effarig\" && numEffects > 4) numEffects = 4;\r\n const effectBitmask = this.generateEffects(type, numEffects, rng);\r\n if (rngIn === undefined) rng.finalize();\r\n return {\r\n id: undefined,\r\n idx: null,\r\n type,\r\n strength,\r\n level: level.actualLevel,\r\n rawLevel: level.rawLevel,\r\n effects: effectBitmask,\r\n };\r\n },\r\n\r\n realityGlyph(level) {\r\n const str = rarityToStrength(100);\r\n const effects = this.generateRealityEffects(level);\r\n const effectBitmask = makeGlyphEffectBitmask(effects);\r\n return {\r\n id: undefined,\r\n idx: null,\r\n type: \"reality\",\r\n strength: str,\r\n level,\r\n rawLevel: level,\r\n effects: effectBitmask,\r\n };\r\n },\r\n\r\n cursedGlyph() {\r\n const str = rarityToStrength(100);\r\n const effectBitmask = makeGlyphEffectBitmask(\r\n orderedEffectList.filter(effect => effect.match(\"cursed*\"))\r\n );\r\n let generateLevel = 6666;\r\n if(CorruptionUpgrade(12).isBought) generateLevel = 666;\r\n return {\r\n id: undefined,\r\n idx: null,\r\n type: \"cursed\",\r\n strength: str,\r\n level: generateLevel,\r\n rawLevel: generateLevel,\r\n effects: effectBitmask,\r\n };\r\n },\r\n\r\n // These Glyphs are given on entering Doomed to prevent the player\r\n // from having none of each basic glyphs which are requied to beat pelle\r\n doomedGlyph(type) {\r\n const effectList = GlyphEffects.all.filter(e => e.id.startsWith(type));\r\n effectList.push(GlyphEffects.timespeed);\r\n let bitmask = 0;\r\n for (const effect of effectList) bitmask |= 1 << effect.bitmaskIndex;\r\n const glyphLevel = Math.max(player.records.bestReality.glyphLevel, 5000);\r\n return {\r\n id: undefined,\r\n idx: null,\r\n type,\r\n strength: 3.5,\r\n level: glyphLevel,\r\n rawLevel: glyphLevel,\r\n effects: bitmask,\r\n };\r\n },\r\n\r\n companionGlyph(eternityPoints) {\r\n // Store the pre-Reality EP value in the glyph's rarity\r\n const str = rarityToStrength(eternityPoints.log10() / 1e6);\r\n const effects = orderedEffectList.filter(effect => effect.match(\"companion*\"));\r\n const effectBitmask = makeGlyphEffectBitmask(effects);\r\n return {\r\n id: undefined,\r\n idx: null,\r\n type: \"companion\",\r\n strength: str,\r\n level: 1,\r\n rawLevel: 1,\r\n effects: effectBitmask,\r\n };\r\n },\r\n\r\n musicGlyph() {\r\n const rng = new GlyphGenerator.MusicGlyphRNG();\r\n const glyph =\r\n this.randomGlyph({ actualLevel: Math.floor(player.records.bestReality.glyphLevel * 0.8), rawLevel: 1 }, rng);\r\n rng.finalize();\r\n glyph.cosmetic = \"music\";\r\n glyph.fixedCosmetic = \"music\";\r\n return glyph;\r\n },\r\n\r\n // Generates a unique ID for glyphs, used for deletion and drag-and-drop. Non-unique IDs can cause buggy behavior.\r\n makeID() {\r\n return this.maxID + 1;\r\n },\r\n\r\n get maxID() {\r\n return player.reality.glyphs.active\r\n .concat(player.reality.glyphs.inventory)\r\n .reduce((max, glyph) => Math.max(max, glyph.id), 0);\r\n },\r\n\r\n get strengthMultiplier() {\r\n return Effects.max(1, RealityUpgrade(16));\r\n },\r\n\r\n randomStrength(rng) {\r\n // Technically getting this upgrade really changes glyph gen but at this point almost all\r\n // the RNG is gone anyway.\r\n const rarityBoost = Ra.unlocks.maxGlyphRarityIncrease.effectOrDefault(0);\r\n let afterRaAnswer = 100 + rarityBoost;\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n afterRaAnswer = Math.pow(afterRaAnswer,corruptionPenalties.compGlyphs.rarity[player.mending.corruption[4]]);\r\n afterRaAnswer *= (corruptionPenalties.compGlyphs.rarity[player.mending.corruption[4]]);\r\n afterRaAnswer = Math.ceil(afterRaAnswer*100)/100;\r\n };\r\n if (Ra.unlocks.maxGlyphRarityAndShardSacrificeBoost.canBeApplied || MendingUpgrade(12).isBought) return rarityToStrength(afterRaAnswer);\r\n let result = GlyphGenerator.gaussianBellCurve(rng) * GlyphGenerator.strengthMultiplier;\r\n const relicShardFactor = Ra.unlocks.extraGlyphChoicesAndRelicShardRarityAlwaysMax.canBeApplied ? 1 : rng.uniform();\r\n const increasedRarity = relicShardFactor * Effarig.maxRarityBoost +\r\n Effects.sum(Achievement(146), GlyphSacrifice.effarig);\r\n // Each rarity% is 0.025 strength.\r\n result += increasedRarity / 40;\r\n // Raise the result to the next-highest 0.1% rarity.\r\n result = Math.ceil(result * 400) / 400;\r\n return Math.min(result, rarityToStrength(100));\r\n },\r\n\r\n // eslint-disable-next-line max-params\r\n randomNumberOfEffects(type, strength, level, rng) {\r\n // Call the RNG twice before anything else to advance the RNG seed properly, even if the whole method returns early.\r\n // This prevents the position of effarig glyphs in the choice list from affecting the choices themselves, as well\r\n // as preventing all of the glyphs changing drastically when RU17 is purchased.\r\n const random1 = rng.uniform();\r\n const random2 = rng.uniform();\r\n if (type !== \"effarig\" && (Ra.unlocks.glyphEffectCount.canBeApplied || MendingUpgrade(12).isBought)) return 4;\r\n if (MendingUpgrade(12).isBought) return 7;\r\n const maxEffects = (Ra.unlocks.glyphEffectCount.canBeApplied || MendingUpgrade(12).isBought)? 7 : 4;\r\n let num = Math.min(\r\n maxEffects,\r\n Math.floor(Math.pow(random1, 1 - (Math.pow(level * strength, 0.5)) / 100) * 1.5 + 1)\r\n );\r\n // If we do decide to add anything else that boosts chance of an extra effect, keeping the code like this\r\n // makes it easier to do (add it to the Effects.max).\r\n if (RealityUpgrade(17).isBought && random2 < Effects.max(0, RealityUpgrade(17))) {\r\n num = Math.min(num + 1, maxEffects);\r\n }\r\n return Ra.unlocks.glyphEffectCount.canBeApplied ? Math.max(num, 4) : num;\r\n },\r\n\r\n // Populate a list of reality glyph effects based on level\r\n generateRealityEffects(level) {\r\n const numberOfEffects = realityGlyphEffectLevelThresholds.filter(lv => lv <= level).length;\r\n const sortedRealityEffects = GlyphEffects.all\r\n .filter(eff => eff.glyphTypes.includes(\"reality\"))\r\n .sort((a, b) => a.bitmaskIndex - b.bitmaskIndex)\r\n .map(eff => eff.id);\r\n return sortedRealityEffects.slice(0, numberOfEffects);\r\n },\r\n\r\n generateEffects(type, count, rng) {\r\n const effectValues = GlyphTypes[type].effects.mapToObject(x => x.bitmaskIndex, () => rng.uniform());\r\n // Get a bunch of random numbers so that we always use 7 here.\r\n Array.range(0, 7 - GlyphTypes[type].effects.length).forEach(() => rng.uniform());\r\n if (type === \"effarig\") {\r\n // This is effarigrm/effarigglyph\r\n const unincluded = effectValues[20] < effectValues[21] ? 20 : 21;\r\n effectValues[unincluded] = -1;\r\n }\r\n // This is timepow/infinitypow/powerpow\r\n for (const i of [0, 12, 16]) {\r\n if (i in effectValues) {\r\n effectValues[i] = 2;\r\n }\r\n }\r\n // Sort from highest to lowest value.\r\n const effects = Object.keys(effectValues).sort((a, b) => effectValues[b] - effectValues[a]).slice(0, count);\r\n return effects.map(Number).toBitmask();\r\n },\r\n\r\n randomType(rng, typesSoFar = []) {\r\n const generatable = generatedTypes.filter(x => (EffarigUnlock.reality.isUnlocked || MendingUpgrade(12).isBought) || x !== \"effarig\");\r\n const maxOfSameTypeSoFar = generatable.map(x => typesSoFar.countWhere(y => y === x)).max();\r\n const blacklisted = typesSoFar.length === 0\r\n ? [] : generatable.filter(x => typesSoFar.countWhere(y => y === x) === maxOfSameTypeSoFar);\r\n return GlyphTypes.random(rng, blacklisted);\r\n },\r\n\r\n /**\r\n * To generate glyphs with a \"uniformly random\" effect spread, we effectively need to generate all the glyphs in\r\n * uniform groups of some size at once, and then select from that generated group. In this case, we've decided\r\n * that a group which satisfies uniformity is that of 5 realities, such that all 20 choices amongst the group\r\n * must contain each individual glyph effect at least once. This makes types more \"uniform\" by ensuring that\r\n * any individual glyph type is never *repeatedly* absent for more than 2 realities in a row (which can only\r\n * happen between groups), as well as ensuring that trends of long-term type/effect absences never happen\r\n * Note: At this point, realityCount should be the number of realities BEFORE processing completes (ie. the first\r\n * random generated set begins at a parameter of 1)\r\n */\r\n uniformGlyphs(level, rng, realityCount) {\r\n // Reality count divided by 5 determines which group of 5 we're in, while count mod 5 determines the index\r\n // within that block. Note that we have a minus 1 because we want to exclude the first fixed glyph\r\n const groupNum = Math.floor((realityCount - 1) / 5);\r\n const groupIndex = (realityCount - 1) % 5;\r\n\r\n // The usage of the initial seed is complicated in order to prevent future prediction without using information\r\n // not normally available in-game (ie. the console). This makes it appear less predictable overall\r\n const initSeed = player.reality.initialSeed;\r\n const typePerm = permutationIndex(5, (31 + initSeed % 7) * groupNum + initSeed % 1123);\r\n\r\n // Figure out a permutation index for each generated glyph type this reality by counting through the sets\r\n // for choices which have already been generated for options in previous realities for this group\r\n const typePermIndex = Array.repeat(0, 5);\r\n for (let i = 0; i < groupIndex; i++) {\r\n for (let type = 0; type < 5; type++) {\r\n if (type !== typePerm[i]) typePermIndex[type]++;\r\n }\r\n }\r\n\r\n // Determine which effect needs to be added for uniformity (startID is a hardcoded array of the lowest ID glyph\r\n // effect of each type, in the same type order as BASIC_GLYPH_TYPES). We use type, initial seed, and group index\r\n // to pick a random permutation, again to make it less predictable and to make sure they're generally different\r\n const uniformEffects = [];\r\n const startID = [16, 12, 8, 0, 4];\r\n const typesThisReality = Array.range(0, 5);\r\n typesThisReality.splice(typePerm[groupIndex], 1);\r\n for (let i = 0; i < 4; i++) {\r\n const type = typesThisReality[i];\r\n const effectPerm = permutationIndex(4, 5 * type + (7 + initSeed % 5) * groupNum + initSeed % 11);\r\n uniformEffects.push(startID[type] + effectPerm[typePermIndex[type]]);\r\n }\r\n\r\n // Generate the glyphs without uniformity applied first, assuming 4 glyph choices early on, then fix it to contain\r\n // the new effect. This fixing process is a 50% chance to add to existing effects and 50% to replace them instead.\r\n // Note that if this would give us \"too many\" effects, we remove one of the existing ones, and the threshold for\r\n // having \"too many\" depends on if the player has the upgrade that improves effect count - we don't want the\r\n // uniformity code to make glyph generation disproportionately worse in that case\r\n const glyphs = [];\r\n for (let i = 0; i < 4; ++i) {\r\n const newGlyph = GlyphGenerator.randomGlyph(level, rng, BASIC_GLYPH_TYPES[typesThisReality[i]]);\r\n const newMask = (initSeed + realityCount + i) % 2 === 0\r\n ? (1 << uniformEffects[i])\r\n : newGlyph.effects | (1 << uniformEffects[i]);\r\n const maxEffects = RealityUpgrade(17).isBought ? 3 : 2;\r\n if (countValuesFromBitmask(newMask) > maxEffects) {\r\n // Turn the old effect bitmask into an array of removable effects and then deterministically remove one\r\n // of the non-power effects based on seed and reality count\r\n const replacable = getGlyphEffectsFromBitmask(newGlyph.effects)\r\n .filter(eff => eff.isGenerated)\r\n .map(eff => eff.bitmaskIndex)\r\n .filter(eff => ![0, 12, 16].includes(eff));\r\n const toRemove = replacable[Math.abs(initSeed + realityCount) % replacable.length];\r\n newGlyph.effects = newMask & ~(1 << toRemove);\r\n } else {\r\n newGlyph.effects = newMask;\r\n }\r\n\r\n // Add the power effects on power/infinity/time, since the initial setting of newMask removes them half the time\r\n const dimPowers = { power: 16, infinity: 12, time: 0 };\r\n if (dimPowers[newGlyph.type] !== undefined) {\r\n newGlyph.effects |= 1 << dimPowers[newGlyph.type];\r\n }\r\n\r\n glyphs.push(newGlyph);\r\n }\r\n\r\n return glyphs;\r\n },\r\n\r\n getRNG(fake) {\r\n return fake ? new GlyphGenerator.FakeGlyphRNG() : new GlyphGenerator.RealGlyphRNG();\r\n },\r\n\r\n /**\r\n * More than 3 approx 0.001%\r\n * More than 2.5 approx 0.2%\r\n * More than 2 approx 6%\r\n * More than 1.5 approx 38.43%\r\n */\r\n gaussianBellCurve(rng) {\r\n // Old code used max, instead of abs -- but we rejected any samples that were\r\n // at the boundary anyways. Might as well use abs, and not cycle as many times.\r\n // The function here is an approximation of ^0.65, here is the old code:\r\n // return Math.pow(Math.max(rng.normal() + 1, 1), 0.65);\r\n const x = Math.sqrt(Math.abs(rng.normal(), 0) + 1);\r\n return -0.111749606737000 + x * (0.900603878243551 + x * (0.229108274476697 + x * -0.017962545983249));\r\n },\r\n\r\n copy(glyph) {\r\n return glyph ? deepmerge({}, glyph) : glyph;\r\n },\r\n};\r\n","import { DC } from \"../constants\";\r\n// This actually deals with both sacrifice and refining, but I wasn't 100% sure what to call it\r\nexport const GlyphSacrificeHandler = {\r\n // Anything scaling on sacrifice caps at this value, even though the actual sacrifice values can go higher\r\n //maxSacrificeForEffects: /*Ra.unlocks.uncapGlyphSacEffects.isUnlocked ? DC.E300 :*/ DC.E100,\r\n // This is used for glyph UI-related things in a few places, but is handled here as a getter which is only called\r\n // sparingly - that is, whenever the cache is invalidated after a glyph is sacrificed. Thus it only gets recalculated\r\n // when glyphs are actually sacrificed, rather than every render cycle.\r\n get maxSacrificeForEffects(){\r\n if(Ra.unlocks.uncapGlyphSacEffects.isUnlocked) return DC.E300;\r\n return DC.E100;\r\n },\r\n\r\n get logTotalSacrifice() {\r\n // We check elsewhere for this equalling zero to determine if the player has ever sacrificed. Technically this\r\n // should check for -Infinity, but the clampMin works in practice because the minimum possible sacrifice\r\n // value is greater than 1 for even the weakest possible glyph\r\n return BASIC_GLYPH_TYPES.reduce(\r\n (tot, type) => tot + Decimal.log10(player.reality.glyphs.sac[type].clampMin(1)), 0);\r\n },\r\n get canSacrifice() {\r\n return RealityUpgrade(19).isBought;\r\n },\r\n get isRefining() {\r\n return Ra.unlocks.unlockGlyphAlchemy.canBeApplied && AutoGlyphProcessor.sacMode !== AUTO_GLYPH_REJECT.SACRIFICE;\r\n },\r\n handleSpecialGlyphTypes(glyph) {\r\n switch (glyph.type) {\r\n case \"companion\":\r\n Modal.deleteCompanion.show();\r\n return true;\r\n case \"cursed\":\r\n Glyphs.removeFromInventory(glyph);\r\n return true;\r\n case \"amalgam\":\r\n Glyphs.removeFromInventory(glyph);\r\n return true;\r\n }\r\n return false;\r\n },\r\n // Removes a glyph, accounting for sacrifice unlock and alchemy state\r\n removeGlyph(glyph, force = false) {\r\n if (this.handleSpecialGlyphTypes(glyph)) return;\r\n if (!this.canSacrifice) this.deleteGlyph(glyph, force);\r\n else if (this.isRefining) this.attemptRefineGlyph(glyph, force);\r\n else this.sacrificeGlyph(glyph, force);\r\n },\r\n deleteGlyph(glyph, force) {\r\n if (force || !player.options.confirmations.glyphSacrifice) Glyphs.removeFromInventory(glyph);\r\n else Modal.glyphDelete.show({ idx: glyph.idx });\r\n },\r\n glyphSacrificeGain(glyph) {\r\n if (!this.canSacrifice || Pelle.isDoomed) return DC.D0;\r\n if (glyph.type === \"reality\") return new Decimal(0.01 * glyph.level * Achievement(171).effectOrDefault(1));\r\n const pre10kFactor = Decimal.pow(Decimal.clampMax(glyph.level, 10000).add(10), 2.5);\r\n const post10kFactor = Decimal.clampMin(glyph.level - 10000, 0).div(100).add(1);\r\n const power = Ra.unlocks.maxGlyphRarityAndShardSacrificeBoost.effectOrDefault(1);\r\n return Decimal.pow(pre10kFactor.mul(post10kFactor).mul(glyph.strength)\r\n .mul(Teresa.runRewardMultiplier).mul(Achievement(171).effectOrDefault(1)), power);\r\n },\r\n sacrificeGlyph(glyph, force = false) {\r\n if (Pelle.isDoomed) return;\r\n // This also needs to be here because this method is called directly from drag-and-drop sacrificing\r\n if (this.handleSpecialGlyphTypes(glyph)) return;\r\n const toGain = this.glyphSacrificeGain(glyph);\r\n const askConfirmation = !force && player.options.confirmations.glyphSacrifice;\r\n if (askConfirmation) {\r\n Modal.glyphSacrifice.show({ idx: glyph.idx, gain: toGain });\r\n return;\r\n }\r\n if (player.reality.glyphs.sac[glyph.type].gte(DC.E300)){\r\n player.reality.glyphs.sac[glyph.type] = DC.E300;\r\n }\r\n player.reality.glyphs.sac[glyph.type] = player.reality.glyphs.sac[glyph.type].add(toGain).clampMax(DC.E300);\r\n GameCache.logTotalGlyphSacrifice.invalidate();\r\n Glyphs.removeFromInventory(glyph);\r\n EventHub.dispatch(GAME_EVENT.GLYPH_SACRIFICED, glyph);\r\n },\r\n glyphAlchemyResource(glyph) {\r\n const type = GlyphTypes[glyph.type];\r\n return AlchemyResources.all[type.alchemyResource];\r\n },\r\n // Scaling function to make refinement value ramp up with higher glyph levels\r\n levelRefinementValue(level) {\r\n return Math.pow(level, 3) / 1e8;\r\n },\r\n // Refined glyphs give this proportion of their maximum attainable value from their level\r\n glyphRefinementEfficiency: 0.05,\r\n glyphRawRefinementGain(glyph) {\r\n if (!Ra.unlocks.unlockGlyphAlchemy.canBeApplied) return 0;\r\n const glyphMaxValue = this.levelRefinementValue(glyph.level);\r\n const rarityModifier = strengthToRarity(glyph.strength) / 100;\r\n return this.glyphRefinementEfficiency * glyphMaxValue * rarityModifier;\r\n },\r\n glyphRefinementGain(glyph) {\r\n if (!Ra.unlocks.unlockGlyphAlchemy.canBeApplied || !generatedTypes.includes(glyph.type)) return 0;\r\n const resource = this.glyphAlchemyResource(glyph);\r\n if (!resource.isUnlocked) return 0;\r\n const glyphActualValue = this.glyphRawRefinementGain(glyph);\r\n if (resource.cap === 0) return glyphActualValue;\r\n const amountUntilCap = this.glyphEffectiveCap(glyph) - resource.amount;\r\n return Math.clamp(amountUntilCap, 0, glyphActualValue);\r\n },\r\n // The glyph that is being refined can increase the cap, which means the effective cap\r\n // will be the current resource cap or the cap after this glyph is refined, whichever is higher.\r\n glyphEffectiveCap(glyph) {\r\n const resource = this.glyphAlchemyResource(glyph);\r\n const currentCap = resource.cap;\r\n const capAfterRefinement = this.highestRefinementValue(glyph);\r\n const higherCap = Math.clampMin(currentCap, capAfterRefinement);\r\n return Math.clampMax(higherCap, Ra.alchemyResourceCap);\r\n },\r\n highestRefinementValue(glyph) {\r\n return this.glyphRawRefinementGain(glyph) / this.glyphRefinementEfficiency;\r\n },\r\n attemptRefineGlyph(glyph, force) {\r\n if (glyph.type === \"reality\") return;\r\n if (glyph.type === \"amalgam\") return;\r\n if (glyph.type === \"cursed\") {\r\n Glyphs.removeFromInventory(glyph);\r\n return;\r\n }\r\n const decoherence = AlchemyResource.decoherence.isUnlocked;\r\n if (!Ra.unlocks.unlockGlyphAlchemy.canBeApplied ||\r\n (this.glyphRefinementGain(glyph) === 0 && !decoherence) ||\r\n (decoherence && AlchemyResources.base.every(x => x.data.amount >= Ra.alchemyResourceCap))) {\r\n this.sacrificeGlyph(glyph, force);\r\n return;\r\n }\r\n\r\n if (!player.options.confirmations.glyphRefine || force) {\r\n this.refineGlyph(glyph);\r\n return;\r\n }\r\n const resource = this.glyphAlchemyResource(glyph);\r\n Modal.glyphRefine.show({\r\n idx: glyph.idx,\r\n resourceName: resource.name,\r\n resourceAmount: resource.amount,\r\n gain: this.glyphRefinementGain(glyph),\r\n cap: resource.cap\r\n });\r\n\r\n },\r\n refineGlyph(glyph) {\r\n if (Pelle.isDoomed) return;\r\n const resource = this.glyphAlchemyResource(glyph);\r\n // This technically completely trashes the glyph for no rewards if not unlocked, but this will only happen ever\r\n // if the player specificially tries to do so (in which case they're made aware that it's useless) or if the\r\n // Reality choices contain *only* locked glyph choices. That's a rare enough edge case that I think it's okay\r\n // to just delete it instead of complicating the program flow more than it already is by attempting sacrifice.\r\n if (!resource.isUnlocked) {\r\n Glyphs.removeFromInventory(glyph);\r\n return;\r\n }\r\n const rawRefinementGain = this.glyphRawRefinementGain(glyph);\r\n const refinementGain = this.glyphRefinementGain(glyph);\r\n resource.amount += refinementGain;\r\n const decoherenceGain = rawRefinementGain * AlchemyResource.decoherence.effectValue;\r\n for (const glyphTypeName of ALCHEMY_BASIC_GLYPH_TYPES) {\r\n if (glyphTypeName !== glyph.type) {\r\n const glyphType = GlyphTypes[glyphTypeName];\r\n const otherResource = AlchemyResources.all[glyphType.alchemyResource];\r\n const maxResource = Math.max(otherResource.cap, otherResource.amount);\r\n otherResource.amount = Math.clampMax(otherResource.amount + decoherenceGain, maxResource);\r\n }\r\n }\r\n if (resource.isBaseResource) {\r\n resource.highestRefinementValue = this.highestRefinementValue(glyph);\r\n }\r\n Glyphs.removeFromInventory(glyph);\r\n }\r\n};\r\n","import { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\n\r\nexport const AutoGlyphProcessor = {\r\n get scoreMode() {\r\n return player.reality.glyphs.filter.select;\r\n },\r\n set scoreMode(value) {\r\n player.reality.glyphs.filter.select = value;\r\n },\r\n get sacMode() {\r\n return player.reality.glyphs.filter.trash;\r\n },\r\n set sacMode(value) {\r\n player.reality.glyphs.filter.trash = value;\r\n },\r\n get types() {\r\n return player.reality.glyphs.filter.types;\r\n },\r\n // This exists to avoid unnecessary repeated object initialization in the filtering code\r\n bitmaskIndexOffset(type) {\r\n switch (type) {\r\n case \"time\":\r\n case \"amalgam\":\r\n return 0;\r\n case \"dilation\":\r\n return 4;\r\n case \"replication\":\r\n return 8;\r\n case \"infinity\":\r\n return 12;\r\n case \"power\":\r\n return 16;\r\n case \"effarig\":\r\n return 20;\r\n default:\r\n throw new Error(\"Unknown glyph type mode in bitmaskIndexOffset\");\r\n }\r\n },\r\n // This function is meant to be something which assigns a value to every glyph, with the assumption that\r\n // higher numbers correspond to better glyphs. This value is also displayed on tooltips when it depends\r\n // on only the glyph itself and not external factors.\r\n filterValue(glyph) {\r\n const typeCfg = this.types[glyph.type];\r\n if ([\"companion\", \"reality\"].includes(glyph.type)) return Infinity;\r\n if (glyph.type === \"cursed\" || this.type === \"amalgam\") return -Infinity;\r\n switch (this.scoreMode) {\r\n case AUTO_GLYPH_SCORE.LOWEST_SACRIFICE:\r\n // Picked glyphs are never kept in this mode. Sacrifice cap needs to be checked since effarig caps\r\n // at a lower value than the others and we don't want to uselessly pick that to sacrifice all the time\r\n return player.reality.glyphs.sac[glyph.type].gte(GlyphSacrifice[glyph.type].cap)\r\n ? -Infinity\r\n : player.reality.glyphs.sac[glyph.type].neg().toNumber();\r\n case AUTO_GLYPH_SCORE.EFFECT_COUNT:\r\n // Effect count, plus a very small rarity term to break ties in favor of rarer glyphs\r\n return strengthToRarity(glyph.strength) / 1000 + getGlyphEffectsFromBitmask(glyph.effects, 0, 0)\r\n .filter(effect => effect.isGenerated).length;\r\n case AUTO_GLYPH_SCORE.RARITY_THRESHOLD:\r\n return strengthToRarity(glyph.strength);\r\n case AUTO_GLYPH_SCORE.SPECIFIED_EFFECT: {\r\n // Value is equal to rarity but minus 200 for each missing effect. This makes all glyphs which don't\r\n // satisfy the requirements have a negative score and generally the worse a glyph misses the requirements,\r\n // the more negative of a score it will have\r\n const glyphEffectCount = countValuesFromBitmask(glyph.effects);\r\n if (glyphEffectCount < typeCfg.effectCount) {\r\n return strengthToRarity(glyph.strength) - 200 * (typeCfg.effectCount - glyphEffectCount);\r\n }\r\n // The missing effect count can be gotten by taking the full filter bitmask, removing only the bits which are\r\n // present on both the filter and the glyph, and then counting the bits up\r\n const missingEffects = countValuesFromBitmask(typeCfg.specifiedMask - (typeCfg.specifiedMask & glyph.effects));\r\n return strengthToRarity(glyph.strength) - 200 * missingEffects;\r\n }\r\n case AUTO_GLYPH_SCORE.EFFECT_SCORE: {\r\n const effectList = getGlyphEffectsFromBitmask(glyph.effects, 0, 0)\r\n .filter(effect => effect.isGenerated)\r\n .map(effect => effect.bitmaskIndex);\r\n const offset = this.bitmaskIndexOffset(glyph.type);\r\n // This ternary check is required to filter out any effects which may appear on the glyph which aren't normally\r\n // there in typical glyph generation. Ra-Nameless 25 is the only case where this happens, but this also has the\r\n // side-effect of making altered glyph generation in mods less likely to crash the game as well\r\n const effectScore = effectList\r\n .map(e => (typeCfg.effectScores[e - offset] ? typeCfg.effectScores[e - offset] : 0))\r\n .sum();\r\n return strengthToRarity(glyph.strength) + effectScore;\r\n }\r\n // Picked glyphs are never kept in Alchemy modes.\r\n // Glyphs for non-unlocked or capped Alchemy Resources are assigned NEGATIVE_INFINITY\r\n // to make them picked last, because we can't refine them.\r\n case AUTO_GLYPH_SCORE.LOWEST_ALCHEMY: {\r\n const resource = AlchemyResource[glyph.type];\r\n const refinementGain = GlyphSacrificeHandler.glyphRefinementGain(glyph);\r\n return resource.isUnlocked && refinementGain > 0\r\n ? -resource.amount\r\n : Number.NEGATIVE_INFINITY;\r\n }\r\n case AUTO_GLYPH_SCORE.ALCHEMY_VALUE:\r\n return AlchemyResource[glyph.type].isUnlocked\r\n ? GlyphSacrificeHandler.glyphRefinementGain(glyph)\r\n : Number.NEGATIVE_INFINITY;\r\n case AUTO_GLYPH_SCORE.ANY:\r\n return Number.MAX_VALUE\r\n default:\r\n throw new Error(\"Unknown glyph score mode in score assignment\");\r\n }\r\n },\r\n // This is a mode-specific threshold which determines if selected glyphs are \"good enough\" to keep\r\n thresholdValue(glyph) {\r\n // Glyph filter settings are undefined for companion/cursed/reality glyphs, so we return the lowest possible\r\n // value on the basis that we never want to automatically get rid of them\r\n if (this.types[glyph.type] === undefined) return -Number.MAX_VALUE;\r\n switch (this.scoreMode) {\r\n case AUTO_GLYPH_SCORE.EFFECT_COUNT:\r\n return player.reality.glyphs.filter.simple;\r\n case AUTO_GLYPH_SCORE.RARITY_THRESHOLD:\r\n case AUTO_GLYPH_SCORE.SPECIFIED_EFFECT:\r\n return this.types[glyph.type].rarity;\r\n case AUTO_GLYPH_SCORE.EFFECT_SCORE:\r\n return this.types[glyph.type].score;\r\n case AUTO_GLYPH_SCORE.ANY:\r\n return -Number.MAX_VALUE\r\n case AUTO_GLYPH_SCORE.LOWEST_SACRIFICE:\r\n case AUTO_GLYPH_SCORE.LOWEST_ALCHEMY:\r\n case AUTO_GLYPH_SCORE.ALCHEMY_VALUE:\r\n // These modes never keep glyphs and always refine/sacrfice\r\n return Number.MAX_VALUE;\r\n default:\r\n throw new Error(\"Unknown glyph score mode in threshold check\");\r\n }\r\n },\r\n wouldKeep(glyph) {\r\n return this.filterValue(glyph) >= this.thresholdValue(glyph);\r\n },\r\n // Given a list of glyphs, pick the one with the highest score\r\n pick(glyphs) {\r\n // We want to make sure to account for when glyphs are compared to different thresholds based on their type, or\r\n // else we end up always picking the rarest glyph despite all filter settings. However, we need to special-case\r\n // modes which never keep glyphs, or else they all become the same value and it ends up picking pseudo-randomly\r\n const glyphScore = glyph => {\r\n const filter = this.filterValue(glyph);\r\n const threshold = this.thresholdValue(glyph);\r\n return threshold === Number.MAX_VALUE ? filter : filter - threshold;\r\n };\r\n\r\n return glyphs\r\n .map(g => ({ glyph: g, score: glyphScore(g) }))\r\n .reduce((x, y) => (x.score > y.score ? x : y))\r\n .glyph;\r\n },\r\n getRidOfGlyph(glyph) {\r\n // Auto clean calls this function too, which chokes without a special case for these types\r\n if (glyph.type === \"cursed\" || glyph.type === \"companion\" || glyph.type === \"amalgam\") {\r\n GlyphSacrificeHandler.deleteGlyph(glyph, true);\r\n return;\r\n }\r\n\r\n switch (this.sacMode) {\r\n case AUTO_GLYPH_REJECT.SACRIFICE:\r\n GlyphSacrificeHandler.sacrificeGlyph(glyph, true);\r\n break;\r\n case AUTO_GLYPH_REJECT.REFINE:\r\n GlyphSacrificeHandler.attemptRefineGlyph(glyph, true);\r\n break;\r\n case AUTO_GLYPH_REJECT.REFINE_TO_CAP:\r\n if (GlyphSacrificeHandler.glyphRefinementGain(glyph) === 0) GlyphSacrificeHandler.sacrificeGlyph(glyph, true);\r\n else GlyphSacrificeHandler.attemptRefineGlyph(glyph, true);\r\n break;\r\n default:\r\n throw new Error(\"Unknown auto Glyph Sacrifice mode\");\r\n }\r\n },\r\n // Generally only used for UI in order to notify the player that they might end up retroactively getting rid of\r\n // some glyphs they otherwise want to keep\r\n hasNegativeEffectScore() {\r\n return this.scoreMode === AUTO_GLYPH_SCORE.EFFECT_SCORE &&\r\n Object.values(this.types).map(t => t.effectScores.min()).min() < 0;\r\n },\r\n\r\n // These are here because they're used in multiple UI components\r\n filterModeName(id) {\r\n switch (id) {\r\n case AUTO_GLYPH_SCORE.LOWEST_SACRIFICE:\r\n return \"Lowest Total Glyph Sacrifice\";\r\n case AUTO_GLYPH_SCORE.EFFECT_COUNT:\r\n return \"Number of Effects\";\r\n case AUTO_GLYPH_SCORE.RARITY_THRESHOLD:\r\n return \"Rarity Threshold\";\r\n case AUTO_GLYPH_SCORE.SPECIFIED_EFFECT:\r\n return \"Specified Effect\";\r\n case AUTO_GLYPH_SCORE.EFFECT_SCORE:\r\n return \"Effect Score\";\r\n case AUTO_GLYPH_SCORE.LOWEST_ALCHEMY:\r\n return \"Lowest Alchemy Resource\";\r\n case AUTO_GLYPH_SCORE.ALCHEMY_VALUE:\r\n return \"Refinement Value\";\r\n case AUTO_GLYPH_SCORE.ANY:\r\n return \"Random Glyph\"\r\n default:\r\n return \"Invalid Glyph filter mode\";\r\n }\r\n },\r\n trashModeDesc(id) {\r\n switch (id) {\r\n case AUTO_GLYPH_REJECT.SACRIFICE:\r\n return \"Always sacrifice\";\r\n case AUTO_GLYPH_REJECT.REFINE:\r\n return \"Always refine\";\r\n case AUTO_GLYPH_REJECT.REFINE_TO_CAP:\r\n return \"Refine to cap, then sacrifice\";\r\n default:\r\n return \"Invalid Glyph trash mode\";\r\n }\r\n }\r\n};\r\n\r\nexport function autoAdjustGlyphWeights() {\r\n const sources = getGlyphLevelSources();\r\n const f = x => Math.pow(Math.clampMin(1, Math.log(5 * x)), 3 / 2);\r\n const totalWeight = Object.values(sources).map(s => f(s.value)).sum();\r\n const scaledWeight = key => 100 * f(sources[key].value) / totalWeight;\r\n\r\n // Adjust all weights to be integer, while maintaining that they must sum to 100. We ensure it's within 1 on the\r\n // weights by flooring and then taking guesses on which ones would give the largest boost when adding the lost\r\n // amounts. This isn't necessarily the best integer weighting, but gives a result that's quite literally within\r\n // 99.97% of the non-integer optimal settings and prevents the total from exceeding 100.\r\n const weightKeys = [\"ep\", \"repl\", \"dt\", \"eternities\"];\r\n const weights = [];\r\n for (const key of weightKeys) {\r\n weights.push({\r\n key,\r\n percent: scaledWeight(key)\r\n });\r\n }\r\n const fracPart = x => x - Math.floor(x);\r\n const priority = weights.sort((a, b) => fracPart(b.percent) - fracPart(a.percent)).map(w => w.key);\r\n const missingPercent = 100 - weights.map(w => Math.floor(w.percent)).reduce((a, b) => a + b);\r\n for (let i = 0; i < weightKeys.length; i++) {\r\n const key = priority[i];\r\n player.celestials.effarig.glyphWeights[key] = Math.floor(scaledWeight(key)) + (i < missingPercent ? 1 : 0);\r\n }\r\n}\r\n\r\nfunction getGlyphLevelSources() {\r\n // Glyph levels are the product of 3 or 4 sources (eternities are enabled via upgrade).\r\n // Once Effarig is unlocked, these contributions can be adjusted; the math is described in detail\r\n // in getGlyphLevelInputs. These *Base values are the nominal inputs, as they would be multiplied without Effarig\r\n let eternityPoints = Player.canEternity\r\n ? Currency.eternityPoints.value.plus(gainedEternityPoints())\r\n : Currency.eternityPoints.value;\r\n eternityPoints = Decimal.max(player.records.thisReality.maxEP, eternityPoints);\r\n const epCoeff = 0.016;\r\n const epBase = Math.pow(Math.max(1, eternityPoints.pLog10()), 0.5) * epCoeff;\r\n const replPow = 0.4 + getAdjustedGlyphEffect(\"replicationglyphlevel\");\r\n const replCoeff = 0.025;\r\n const replBase = Math.pow(Math.max(1, player.records.thisReality.maxReplicanti.log10()), replPow) * replCoeff;\r\n const dtPow = 1.3 + getAdjustedGlyphEffect(\"realityDTglyph\");\r\n const dtCoeff = 0.025;\r\n const dtBase = Math.pow(Math.max(1, player.records.thisReality.maxDT.pLog10()), dtPow) * dtCoeff;\r\n const eterBase = Effects.max(1, RealityUpgrade(18));\r\n return {\r\n ep: {\r\n name: \"EP\",\r\n value: epBase,\r\n coeff: epCoeff,\r\n exp: 0.5,\r\n },\r\n repl: {\r\n name: \"Replicanti\",\r\n value: replBase,\r\n coeff: replCoeff,\r\n exp: replPow,\r\n },\r\n dt: {\r\n name: \"DT\",\r\n value: dtBase,\r\n coeff: dtCoeff,\r\n exp: dtPow,\r\n },\r\n eternities: {\r\n name: \"Eternities\",\r\n value: eterBase,\r\n // These are copied from Reality Upgrade 18's gameDB entry\r\n coeff: 0.45,\r\n exp: 0.5,\r\n }\r\n };\r\n}\r\n\r\nexport function getGlyphLevelInputs() {\r\n const sources = getGlyphLevelSources();\r\n const staticFactors = GameCache.staticGlyphWeights.value;\r\n // If the nomial blend of inputs is a * b * c * d, then the contribution can be tuend by\r\n // changing the exponents on the terms: aⁿ¹ * bⁿ² * cⁿ³ * dⁿ⁴\r\n // If n1..n4 just add up to 4, then the optimal strategy is to just max out the one over the\r\n // largest term -- so probably replicants, So, instead of using the weights directly, a\r\n // function of the weights is used: n_i = (4 w_i)^blendExp; put differently, the exponents\r\n // don't add up to 4, but their powers do (for blendExp = 1/3, the cubes of the exponents sum to\r\n // 4.\r\n // The optimal weights, given a blendExp, are proportional to log(x)^(1/(1- blendExp))\r\n const blendExp = 1 / 3;\r\n // Besides adding an exponent to a, b, c, and d, we can also scale them before exponentiation.\r\n // So, we'd have (s a)ⁿ¹ * (s b)ⁿ² * (s c)ⁿ³ * (s d)ⁿ⁴\r\n // Then, we can divide the result by s⁴; this does nothing for even weights\r\n // This can reduce the effect that Effarig can have; consider the following examples:\r\n // Inputs : 100, 1, 1, 1. Nominal result : 100\r\n // blendExp = 1/3; optimal weights: 1, 0, 0, 0; result = 1493\r\n // Scaling by 100: 10000, 100, 100, 100\r\n // optimal weights: 0.485, 0.17, 0.17, 0.17; result = 191.5\r\n // The degree of this effect depends on the scale of the inputs:\r\n // Inputs: 1000, 1, 1, 1. Nominal result: 1000\r\n // optimal weights: 1, 0, 0, 0; result = 57836\r\n // Scaling by 100: 100000, 100, 100, 100\r\n // optimal weights: 0.57, 0.14, 0.14, 0.14; result = 3675\r\n // Scaling does allow the user to produce results less than 1\r\n // 100000, 100, 100, 100 with weights of 0, 1, 0, 0 results in 1.49e-5\r\n // For display purposes, each term is divided independently by s.\r\n const preScale = 5;\r\n const weights = player.celestials.effarig.glyphWeights;\r\n const adjustFactor = (source, weight) => {\r\n const input = source.value;\r\n const powEffect = Math.pow(4 * weight, blendExp);\r\n source.value = (input > 0 ? Math.pow(input * preScale, powEffect) / preScale : 0);\r\n source.coeff = Math.pow(preScale, powEffect - 1) * Math.pow(source.coeff, powEffect);\r\n source.exp *= powEffect;\r\n };\r\n adjustFactor(sources.ep, weights.ep / 100);\r\n adjustFactor(sources.repl, weights.repl / 100);\r\n adjustFactor(sources.dt, weights.dt / 100);\r\n adjustFactor(sources.eternities, weights.eternities / 100);\r\n const shardFactor = Ra.unlocks.relicShardGlyphLevelBoost.effectOrDefault(0);\r\n let baseLevel = sources.ep.value * sources.repl.value * sources.dt.value * sources.eternities.value *\r\n staticFactors.perkShop + shardFactor;\r\n\r\n const singularityEffect = SingularityMilestone.glyphLevelFromSingularities.effectOrDefault(1);\r\n baseLevel *= singularityEffect;\r\n\r\n let scaledLevel = baseLevel;\r\n // The softcap starts at begin and rate determines how quickly level scales after the cap, turning a linear pre-cap\r\n // increase to a quadratic post-cap increase with twice the scaling. For example, with begin = 1000 and rate = 400:\r\n // - Scaled level 1400 requires +800 more base levels from the start of the cap (ie. level 1800)\r\n // - Scaled level 1800 requires +1600 more base levels from scaled 1400 (ie. level 3400)\r\n // - Each additional 400 scaled requires another +800 on top of the already-existing gap for base\r\n // This is applied twice in a stacking way, using regular instability first and then again with hyperinstability\r\n // if the newly reduced level is still above the second threshold\r\n const instabilitySoftcap = (level, begin, rate) => {\r\n if (level < begin) return level;\r\n const excess = (level - begin) / rate;\r\n return begin + 0.5 * rate * (Math.sqrt(1 + 4 * excess) - 1);\r\n };\r\n const ultraInstabilitySoftcap = (level, begin, rate) =>{\r\n if (level < begin)return level;\r\n return Math.pow(rate, Math.log10(level - begin)) + begin;\r\n };\r\n const omegaInstabilitySoftcap = (level, begin, rate) => {\r\n if (level < begin)return level;\r\n return Math.pow(rate, Math.log10(Math.log10(level - begin))) + begin;\r\n }\r\n scaledLevel = instabilitySoftcap(scaledLevel, staticFactors.instability, 500);\r\n scaledLevel = instabilitySoftcap(scaledLevel, staticFactors.hyperInstability, 400);\r\n scaledLevel = ultraInstabilitySoftcap(scaledLevel, staticFactors.ultraInstability, 5);\r\n scaledLevel = omegaInstabilitySoftcap(scaledLevel, staticFactors.omegaInstability, (Ra.unlocks.omegaScalingBuff.isUnlocked ? 15 : 20));\r\n const scalePenalty = scaledLevel > 0 ? baseLevel / scaledLevel : 1;\r\n const incAfterInstability = staticFactors.realityUpgrades + staticFactors.achievements;\r\n scaledLevel = Math.min(1000000, scaledLevel);\r\n baseLevel += incAfterInstability;\r\n scaledLevel += incAfterInstability;\r\n if (Achievement(193).isUnlocked){\r\n scaledLevel *= 1.0808;\r\n }\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n scaledLevel = Math.pow(scaledLevel,corruptionPenalties.compGlyphs.level[player.mending.corruption[4]]);\r\n scaledLevel *= (corruptionPenalties.compGlyphs.level[player.mending.corruption[4]]);\r\n scaledLevel = Math.ceil(Math.max(1,scaledLevel));\r\n };\r\n return {\r\n ep: sources.ep,\r\n repl: sources.repl,\r\n dt: sources.dt,\r\n eter: sources.eternities,\r\n perkShop: staticFactors.perkShop,\r\n scalePenalty,\r\n rowFactor: staticFactors.realityUpgrades,\r\n achievementFactor: staticFactors.achievements,\r\n shardFactor,\r\n singularityEffect,\r\n rawLevel: baseLevel,\r\n actualLevel: Math.max(1, scaledLevel),\r\n };\r\n}\r\n\r\n// Calculates glyph weights which don't change over the course of a reality unless particular events occur; this is\r\n// stored in the GameCache and only invalidated as needed\r\nexport function staticGlyphWeights() {\r\n const perkShop = Effects.max(1, PerkShopUpgrade.glyphLevel);\r\n const instability = Glyphs.instabilityThreshold;\r\n const hyperInstability = Glyphs.hyperInstabilityThreshold;\r\n const ultraInstability = Glyphs.ultraInstabilityThreshold;\r\n const omegaInstability = Glyphs.omegaInstabilityThreshold;\r\n const hardcap = Glyphs.hardcap;\r\n const realityUpgrades = [Array.range(1, 5).every(x => RealityUpgrade(x).boughtAmount > 0)]\r\n .concat(Array.range(1, 4).map(x => Array.range(1, 5).every(y => RealityUpgrade(5 * x + y).isBought)))\r\n .filter(x => x)\r\n .length;\r\n const achievements = Effects.sum(Achievement(148), Achievement(166));\r\n return {\r\n perkShop,\r\n instability,\r\n hyperInstability,\r\n ultraInstability,\r\n omegaInstability,\r\n hardcap,\r\n realityUpgrades,\r\n achievements\r\n };\r\n}\r\n","import { PlayerProgress } from \"./player-progress\";\r\n\r\nexport const DeltaTimeState = {\r\n deltaTime: new TimeSpan(new Decimal(0)),\r\n unscaledDeltaTime: new TimeSpan(new Decimal(0)),\r\n update(deltaTime, gameDeltaTime) {\r\n this.unscaledDeltaTime = TimeSpan.fromMilliseconds(deltaTime);\r\n this.deltaTime = TimeSpan.fromMilliseconds(gameDeltaTime);\r\n }\r\n};\r\n\r\nexport const Time = {\r\n /**\r\n * @param {Function} getValue\r\n * @returns {TimeSpan}\r\n */\r\n fromMilliseconds(getValue) {\r\n return TimeSpan.fromMilliseconds(getValue());\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n * @param {Function} setValue\r\n */\r\n toMilliseconds(timespan, setValue) {\r\n Guard.isTimeSpan(timespan);\r\n setValue(timespan.totalMilliseconds);\r\n },\r\n /**\r\n * Returns a string indicating the current date and time of day, as indicated by a Date.now() timestamp. After\r\n * regex formatting, this gives a string resembling \"[month] [day] [year] HH:MM:SS\"\r\n * @param {number} timestamp\r\n * @returns {string}\r\n */\r\n toDateTimeString(timestamp) {\r\n return new Date(timestamp).toString().replace(/^.{4}(.*:..:..).*$/u, \"$1\");\r\n },\r\n\r\n /**\r\n * Frame delta time\r\n * @returns {TimeSpan}\r\n */\r\n get deltaTimeFull() {\r\n return DeltaTimeState.deltaTime;\r\n },\r\n /**\r\n * Frame delta time in seconds\r\n * @returns {number}\r\n */\r\n get deltaTime() {\r\n return this.deltaTimeFull.totalSeconds;\r\n },\r\n /**\r\n * Frame delta time in ms\r\n * @returns {number}\r\n */\r\n get deltaTimeMs() {\r\n return this.deltaTimeFull.totalMilliseconds;\r\n },\r\n /**\r\n * Frame delta time, but without EC12 or black hole effects\r\n * @returns {TimeSpan}\r\n */\r\n get unscaledDeltaTime() {\r\n return DeltaTimeState.unscaledDeltaTime;\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get totalTimePlayed() {\r\n return this.fromMilliseconds(() => player.records.totalTimePlayed);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set totalTimePlayed(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.totalTimePlayed = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get timeSinceBlackHole() {\r\n return this.fromMilliseconds(() => {\r\n let diff = player.records.totalTimePlayed.minus(player.records.timePlayedAtBHUnlock);\r\n if(PlayerProgress.mendingUnlocked()){\r\n diff = player.records.thisMend.time.minus(player.records.timePlayedAtBHUnlock);\r\n }\r\n return Decimal.max(0, diff);\r\n });\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get realTimeDoomed() {\r\n return this.fromMilliseconds(() => player.records.realTimeDoomed);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set realTimeDoomed(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.realTimeDoomed = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get realTimePlayed() {\r\n return this.fromMilliseconds(() => player.records.realTimePlayed);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set realTimePlayed(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.realTimePlayed = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisInfinity() {\r\n return this.fromMilliseconds(() => player.records.thisInfinity.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisInfinity(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisInfinity.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisInfinityRealTime() {\r\n return this.fromMilliseconds(() => player.records.thisInfinity.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisInfinityRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisInfinity.realTime = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestInfinity() {\r\n return this.fromMilliseconds(() => player.records.bestInfinity.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestInfinity(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestInfinity.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestInfinityRealTime() {\r\n return this.fromMilliseconds(() => player.records.bestInfinity.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestInfinityRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestInfinity.realTime = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisEternity() {\r\n return this.fromMilliseconds(() => player.records.thisEternity.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisEternity(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisEternity.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisEternityRealTime() {\r\n return this.fromMilliseconds(() => player.records.thisEternity.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisEternityRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisEternity.realTime = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestEternity() {\r\n return this.fromMilliseconds(() => player.records.bestEternity.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestEternity(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestEternity.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestEternityRealTime() {\r\n return this.fromMilliseconds(() => player.records.bestEternity.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestEternityRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestEternity.realTime = value);\r\n },\r\n\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisReality() {\r\n return this.fromMilliseconds(() => player.records.thisReality.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisReality(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisReality.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisRealityRealTime() {\r\n return this.fromMilliseconds(() => player.records.thisReality.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisRealityRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisReality.realTime = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestReality() {\r\n return this.fromMilliseconds(() => player.records.bestReality.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestReality(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestReality.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestRealityRealTime() {\r\n return this.fromMilliseconds(() => player.records.bestReality.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestRealityRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestReality.realTime = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestMend() {\r\n return this.fromMilliseconds(() => player.records.bestMend.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestMend(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestMend.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get bestMendRealTime() {\r\n return this.fromMilliseconds(() => player.records.bestMend.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set bestMendRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.bestMend.realTime = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisMend() {\r\n return this.fromMilliseconds(() => player.records.thisMend.time);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisMend(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisMend.time = value);\r\n },\r\n\r\n /**\r\n * @returns {TimeSpan}\r\n */\r\n get thisMendRealTime() {\r\n return this.fromMilliseconds(() => player.records.thisMend.realTime);\r\n },\r\n /**\r\n * @param {TimeSpan} timespan\r\n */\r\n set thisMendRealTime(timespan) {\r\n this.toMilliseconds(timespan, value => player.records.thisMend.realTime = value);\r\n },\r\n\r\n /**\r\n * @return {TimeSpan}\r\n */\r\n get worstChallenge() {\r\n return this.fromMilliseconds(() => GameCache.worstChallengeTime.value);\r\n },\r\n\r\n /**\r\n * @return {TimeSpan}\r\n */\r\n get challengeSum() {\r\n return this.fromMilliseconds(() => GameCache.challengeTimeSum.value);\r\n },\r\n\r\n /**\r\n * @return {TimeSpan}\r\n */\r\n get infinityChallengeSum() {\r\n return this.fromMilliseconds(() => GameCache.infinityChallengeTimeSum.value);\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { Effects } from \"./game-mechanics/effects\";\r\nimport { CorruptionUpgrade, Ra, V } from \"./globals\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nexport function effectiveBaseGalaxies() {\r\n // Note that this already includes the \"50% more\" active path effect\r\n let replicantiGalaxies = Replicanti.galaxies.bought;\r\n replicantiGalaxies *= (1 + Effects.sum(\r\n TimeStudy(132),\r\n TimeStudy(133)\r\n ));\r\n // \"extra\" galaxies unaffected by the passive/idle boosts come from studies 225/226 and Effarig Infinity\r\n replicantiGalaxies += Replicanti.galaxies.extra;\r\n const nonActivePathReplicantiGalaxies = Math.min(Replicanti.galaxies.bought,\r\n ReplicantiUpgrade.galaxies.value);\r\n // Effects.sum is intentional here - if EC8 is not completed,\r\n // this value should not be contributed to total replicanti galaxies\r\n if(EternityChallenge(8).completions >= 1){\r\n replicantiGalaxies += nonActivePathReplicantiGalaxies * EternityChallenge(8).reward.effectValue;\r\n if(Ra.unlocks.improvedECRewards.isUnlocked && !Pelle.isDoomed) replicantiGalaxies += nonActivePathReplicantiGalaxies * EternityChallenge(8).vReward.effectValue;\r\n }\r\n let freeGalaxies = player.dilation.totalTachyonGalaxies;\r\n freeGalaxies *= 1 + Math.max(0, Replicanti.amount.log10() / 1e6) * AlchemyResource.alternation.effectValue;\r\n let x = player.galaxies;\r\n let y = GalaxyGenerator.galaxies;\r\n if(Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(8).completions >= 1 && !Pelle.isDoomed){\r\n freeGalaxies *= 1 + EternityChallenge(8).vReward.effectValue;\r\n x *= 1 + EternityChallenge(8).vReward.effectValue;\r\n y *= 1 + EternityChallenge(8).vReward.effectValue;\r\n }\r\n let v = player.galBoostPoints.eq(0) ? 1 : /*(player.galBoostPoints.pow(1/(player.galBoostPoints.log10() ** 0.8))).div(100).add(1).toNumber()*/ MultiversalDimension(1).galaxyBoost\r\n return (Math.max(x + y + replicantiGalaxies + freeGalaxies, 0) * v);\r\n}\r\n\r\nexport function getTickSpeedMultiplier() {\r\n if (InfinityChallenge(3).isRunning) return DC.D1;\r\n if (Ra.isRunning) return DC.C1D1_1245;\r\n let galaxies = effectiveBaseGalaxies();\r\n const effects = Effects.product(\r\n InfinityUpgrade.galaxyBoost,\r\n InfinityUpgrade.galaxyBoost.chargedEffect,\r\n BreakInfinityUpgrade.galaxyBoost,\r\n BreakInfinityUpgrade.galaxyBoost.chargedEffect,\r\n TimeStudy(212),\r\n TimeStudy(232),\r\n TimeStudy(401),\r\n Achievement(86),\r\n Achievement(178),\r\n InfinityChallenge(5).reward,\r\n PelleUpgrade.galaxyPower,\r\n PelleRifts.decay.milestones[1],\r\n Ra.unlocks.gamespeedGalaxyBoost\r\n );\r\n if (galaxies < 3) {\r\n // Magic numbers are to retain balancing from before while displaying\r\n // them now as positive multipliers rather than negative percentages\r\n let baseMultiplier = 1 / 1.1245;\r\n if (player.galaxies === 1) baseMultiplier = 1 / 1.11888888;\r\n if (player.galaxies === 2) baseMultiplier = 1 / 1.11267177;\r\n if (NormalChallenge(5).isRunning) {\r\n baseMultiplier = 1 / 1.08;\r\n if (player.galaxies === 1) baseMultiplier = 1 / 1.07632;\r\n if (player.galaxies === 2) baseMultiplier = 1 / 1.072;\r\n }\r\n const perGalaxy = 0.02 * effects;\r\n if (Pelle.isDoomed) galaxies *= 0.5;\r\n\r\n galaxies *= Pelle.specialGlyphEffect.power;\r\n return DC.D0_01.clampMin(baseMultiplier - (galaxies * perGalaxy));\r\n }\r\n let baseMultiplier = 0.8;\r\n if (NormalChallenge(5).isRunning) baseMultiplier = 0.83;\r\n galaxies -= 2;\r\n galaxies *= effects;\r\n galaxies *= getAdjustedGlyphEffect(\"cursedgalaxies\");\r\n galaxies *= getAdjustedGlyphEffect(\"realitygalaxies\");\r\n galaxies *= 1 + ImaginaryUpgrade(9).effectOrDefault(0);\r\n if (Pelle.isDoomed) galaxies *= 0.5;\r\n\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let galWeakStrength = corruptionPenalties.galWeak.strength[player.mending.corruption[3]];\r\n if(CorruptionUpgrade(19).isBought) galWeakStrength = Math.min(galWeakStrength*1.4,1)\r\n galaxies *= (galWeakStrength)\r\n };\r\n\r\n galaxies *= Pelle.specialGlyphEffect.power;\r\n const perGalaxy = DC.D0_965;\r\n let finalAnswer = perGalaxy.pow(galaxies - 2).times(baseMultiplier);\r\n return finalAnswer;\r\n}\r\n\r\nexport function buyTickSpeed() {\r\n if (!Tickspeed.isAvailableForPurchase || !Tickspeed.isAffordable) return false;\r\n\r\n if (NormalChallenge(9).isRunning) {\r\n Tickspeed.multiplySameCosts();\r\n }\r\n Tutorial.turnOffEffect(TUTORIAL_STATE.TICKSPEED);\r\n Currency.antimatter.subtract(Tickspeed.cost);\r\n player.totalTickBought++;\r\n player.records.thisInfinity.lastBuyTime = player.records.thisInfinity.time;\r\n player.requirementChecks.permanent.singleTickspeed++;\r\n if (NormalChallenge(2).isRunning) player.chall2Pow = 0;\r\n GameUI.update();\r\n return true;\r\n}\r\n\r\nexport function buyMaxTickSpeed() {\r\n if (!Tickspeed.isAvailableForPurchase || !Tickspeed.isAffordable) return;\r\n let boughtTickspeed = false;\r\n\r\n Tutorial.turnOffEffect(TUTORIAL_STATE.TICKSPEED);\r\n if (NormalChallenge(9).isRunning) {\r\n const goal = Player.infinityGoal;\r\n let cost = Tickspeed.cost;\r\n while (Currency.antimatter.gt(cost) && cost.lt(goal)) {\r\n Tickspeed.multiplySameCosts();\r\n Currency.antimatter.subtract(cost);\r\n player.totalTickBought++;\r\n boughtTickspeed = true;\r\n cost = Tickspeed.cost;\r\n }\r\n } else {\r\n const purchases = Tickspeed.costScale.getMaxBought(player.totalTickBought, Currency.antimatter.value, 1);\r\n if (purchases === null) {\r\n return;\r\n }\r\n Currency.antimatter.subtract(Decimal.pow10(purchases.logPrice));\r\n player.totalTickBought += purchases.quantity;\r\n boughtTickspeed = true;\r\n }\r\n\r\n if (boughtTickspeed) {\r\n player.records.thisInfinity.lastBuyTime = player.records.thisInfinity.time;\r\n if (NormalChallenge(2).isRunning) player.chall2Pow = 0;\r\n }\r\n}\r\n\r\nexport function resetTickspeed() {\r\n player.totalTickBought = 0;\r\n player.chall9TickspeedCostBumps = 0;\r\n}\r\n\r\nexport const Tickspeed = {\r\n\r\n get isUnlocked() {\r\n return AntimatterDimension(2).bought > 0 || EternityMilestone.unlockAllND.isReached ||\r\n PlayerProgress.realityUnlocked();\r\n },\r\n\r\n get isAvailableForPurchase() {\r\n return this.isUnlocked &&\r\n !EternityChallenge(9).isRunning &&\r\n !Laitela.continuumActive &&\r\n (player.break || this.cost.lt(Decimal.NUMBER_MAX_VALUE));\r\n },\r\n\r\n get isAffordable() {\r\n return Currency.antimatter.gte(this.cost);\r\n },\r\n\r\n get multiplier() {\r\n return getTickSpeedMultiplier();\r\n },\r\n\r\n get current() {\r\n let tickspeed = Effarig.isRunning\r\n ? Effarig.tickspeed\r\n : /*V.isSuperRunning ? this.baseValue.powEffectOf(DilationUpgrade.tickspeedPower).reciprocal().log2().toDecimal().reciprocal() : */this.baseValue.powEffectOf(DilationUpgrade.tickspeedPower);\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let tickExtensionTickspeed = corruptionPenalties.tickExtension[player.mending.corruption[5]];\r\n if(CorruptionUpgrade(21).isBought) tickExtensionTickspeed=tickExtensionTickspeed**0.5;\r\n let corruptPen = new Decimal(1).div(tickExtensionTickspeed);\r\n tickspeed = tickspeed.pow(corruptPen);\r\n };\r\n if(V.isSuperRunning) tickspeed = tickspeed.pow(0.000001);\r\n return player.dilation.active || PelleStrikes.dilation.hasStrike ? dilatedValueOf(tickspeed) : tickspeed;\r\n },\r\n\r\n get cost() {\r\n return this.costScale.calculateCost(player.totalTickBought + player.chall9TickspeedCostBumps);\r\n },\r\n\r\n get costScale() {\r\n return new ExponentialCostScaling({\r\n baseCost: 1000,\r\n baseIncrease: 10,\r\n costScale: Player.tickSpeedMultDecrease,\r\n scalingCostThreshold: Number.MAX_VALUE\r\n });\r\n },\r\n\r\n get continuumValue() {\r\n if (!this.isUnlocked) return 0;\r\n return this.costScale.getContinuumValue(Currency.antimatter.value, 1) * Laitela.matterExtraPurchaseFactor;\r\n },\r\n\r\n get baseValue() {\r\n return DC.E3.timesEffectsOf(\r\n Achievement(36),\r\n Achievement(45),\r\n Achievement(66),\r\n Achievement(83)\r\n )\r\n .times(getTickSpeedMultiplier().pow(this.totalUpgrades));\r\n },\r\n\r\n get totalUpgrades() {\r\n let boughtTickspeed;\r\n if (Laitela.continuumActive) boughtTickspeed = this.continuumValue;\r\n else boughtTickspeed = player.totalTickBought;\r\n return boughtTickspeed + player.totalTickGained;\r\n },\r\n\r\n get perSecond() {\r\n return Decimal.divide(1000, this.current);\r\n },\r\n\r\n multiplySameCosts() {\r\n for (const dimension of AntimatterDimensions.all) {\r\n if (dimension.cost.e === this.cost.e) dimension.costBumps++;\r\n }\r\n }\r\n};\r\n\r\n\r\nexport const FreeTickspeed = {\r\n BASE_SOFTCAP: 300000,\r\n GROWTH_RATE: 6e-6,\r\n GROWTH_EXP: 2,\r\n multToNext: 1.33,\r\n\r\n get amount() {\r\n return player.totalTickGained;\r\n },\r\n\r\n get softcap() {\r\n let softcap = FreeTickspeed.BASE_SOFTCAP;\r\n if (Enslaved.has(ENSLAVED_UNLOCKS.FREE_TICKSPEED_SOFTCAP)) {\r\n softcap += 100000;\r\n }\r\n if (Ra.unlocks.freeTickspeedSoftcapDelay.isUnlocked){\r\n softcap += (10000 * Tesseracts.effectiveCount);\r\n }\r\n if(TimeStudy(403).isBought){\r\n softcap += TimeStudy(403).effectOrDefault(0);\r\n }\r\n return softcap;\r\n },\r\n\r\n fromShards(shards) {\r\n let y = this.GROWTH_EXP;\r\n if (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(11).completions >= 1 && !Pelle.isDoomed) y = y ** EternityChallenge(11).vReward.effectValue; \r\n const tickmult = (1 + (Effects.min(Effects.min(1.33, TimeStudy(171)),TimeStudy(309)) - 1) *\r\n Math.max(getAdjustedGlyphEffect(\"cursedtickspeed\"), 1));\r\n const logTickmult = Math.log(tickmult);\r\n const logShards = shards.ln();\r\n const uncapped = Math.max(0, logShards / logTickmult);\r\n if (uncapped <= FreeTickspeed.softcap) {\r\n this.multToNext = tickmult;\r\n return {\r\n newAmount: Math.ceil(uncapped),\r\n nextShards: Decimal.pow(tickmult, Math.ceil(uncapped))\r\n };\r\n }\r\n // Log of (cost - cost up to softcap)\r\n const priceToCap = FreeTickspeed.softcap * logTickmult;\r\n // In the following we're implicitly applying the function (ln(x) - priceToCap) / logTickmult to all costs,\r\n // so, for example, if the cost is 1 that means it's actually exp(priceToCap) * tickmult.\r\n const desiredCost = (logShards - priceToCap) / logTickmult;\r\n const costFormulaCoefficient = FreeTickspeed.GROWTH_RATE / y / logTickmult;\r\n // In the following we're implicitly subtracting softcap from bought,\r\n // so, for example, if bought is 1 that means it's actually softcap + 1.\r\n // The first term (the big one) is the asymptotically more important term (since FreeTickspeed.GROWTH_EXP > 1),\r\n // but is small initially. The second term allows us to continue the pre-cap free tickspeed upgrade scaling\r\n // of tickmult per upgrade.\r\n const boughtToCost = bought => costFormulaCoefficient * Math.pow(\r\n Math.max(bought, 0), y) + bought;\r\n const derivativeOfBoughtToCost = x => x * costFormulaCoefficient * Math.pow(\r\n Math.max(x, 0), y - 1) + 1;\r\n const newtonsMethod = bought => bought - (boughtToCost(bought) - desiredCost) / derivativeOfBoughtToCost(bought);\r\n let oldApproximation;\r\n let approximation = Math.min(\r\n desiredCost,\r\n Math.pow(desiredCost / costFormulaCoefficient, 1 / y)\r\n );\r\n let counter = 0;\r\n // The bought formula is concave upwards. We start with an over-estimate; when using newton's method,\r\n // this means that successive iterations are also over-etimates. Thus, we can just check for continued\r\n // progress with the approximation < oldApproximation check. The counter is a fallback.\r\n do {\r\n oldApproximation = approximation;\r\n approximation = newtonsMethod(approximation);\r\n } while (approximation < oldApproximation && ++counter < 100);\r\n let purchases = Math.floor(approximation);\r\n let originalPurchases = purchases;\r\n // This undoes the function we're implicitly applying to costs (the \"+ 1\") is because we want\r\n // the cost of the next upgrade.\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let tickExtensionTimeShard = corruptionPenalties.tickExtension[player.mending.corruption[5]];\r\n if(CorruptionUpgrade(21).isBought) tickExtensionTimeShard=tickExtensionTimeShard**0.75;\r\n purchases /= tickExtensionTimeShard;\r\n purchases = Math.floor(purchases);\r\n };\r\n\r\n const next = Decimal.exp(priceToCap + boughtToCost(originalPurchases + 1) * logTickmult);\r\n this.multToNext = Decimal.exp((boughtToCost(originalPurchases + 1) - boughtToCost(originalPurchases)) * logTickmult);\r\n \r\n return {\r\n newAmount: purchases + FreeTickspeed.softcap,\r\n nextShards: next,\r\n };\r\n }\r\n\r\n};\r\n","import { DC } from \"../constants\";\r\nimport { CorruptionUpgrade, KohlerProgressUnlocks, V } from \"../globals\";\r\nimport { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\nimport { DimensionState } from \"./dimension\";\r\n\r\n// Multiplier applied to all Antimatter Dimensions, regardless of tier. This is cached using a Lazy\r\n// and invalidated every update.\r\nexport function antimatterDimensionCommonMultiplier() {\r\n let multiplier = DC.D1;\r\n\r\n multiplier = multiplier.times(Achievements.power);\r\n multiplier = multiplier.times(ShopPurchase.dimPurchases.currentMult);\r\n multiplier = multiplier.times(ShopPurchase.allDimPurchases.currentMult);\r\n\r\n if (!EternityChallenge(9).isRunning) {\r\n multiplier = multiplier.times(Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate).max(1));\r\n }\r\n multiplier = multiplier.timesEffectsOf(\r\n BreakInfinityUpgrade.totalAMMult,\r\n BreakInfinityUpgrade.currentAMMult,\r\n BreakInfinityUpgrade.achievementMult,\r\n BreakInfinityUpgrade.slowestChallengeMult,\r\n InfinityUpgrade.totalTimeMult,\r\n InfinityUpgrade.thisInfinityTimeMult,\r\n Achievement(48),\r\n Achievement(56),\r\n Achievement(65),\r\n Achievement(72),\r\n Achievement(73),\r\n Achievement(74),\r\n Achievement(76),\r\n Achievement(84),\r\n Achievement(91),\r\n Achievement(92),\r\n TimeStudy(91),\r\n TimeStudy(101),\r\n TimeStudy(161),\r\n TimeStudy(193),\r\n TimeStudy(311),\r\n InfinityChallenge(3),\r\n InfinityChallenge(3).reward,\r\n InfinityChallenge(8),\r\n EternityChallenge(10),\r\n AlchemyResource.dimensionality,\r\n PelleUpgrade.antimatterDimensionMult\r\n );\r\n\r\n multiplier = multiplier.dividedByEffectOf(InfinityChallenge(6));\r\n multiplier = multiplier.times(getAdjustedGlyphEffect(\"powermult\"));\r\n multiplier = multiplier.times(Currency.realityMachines.value.powEffectOf(AlchemyResource.force));\r\n\r\n if (Pelle.isDoomed) multiplier = multiplier.dividedBy(10);\r\n\r\n return multiplier;\r\n}\r\n\r\nexport function getDimensionFinalMultiplierUncached(tier) {\r\n if (tier < 1 || tier > 8) throw new Error(`Invalid Antimatter Dimension tier ${tier}`);\r\n if (NormalChallenge(10).isRunning && tier > 6) return DC.D1;\r\n if (EternityChallenge(11).isRunning) {\r\n return Currency.infinityPower.value.pow(\r\n InfinityDimensions.powerConversionRate\r\n ).max(1).times(DimBoost.multiplierToNDTier(tier));\r\n }\r\n\r\n let multiplier = DC.D1;\r\n\r\n multiplier = applyNDMultipliers(multiplier, tier);\r\n multiplier = applyNDPowers(multiplier, tier);\r\n\r\n const glyphDilationPowMultiplier = getAdjustedGlyphEffect(\"dilationpow\");\r\n if (player.dilation.active || PelleStrikes.dilation.hasStrike) {\r\n multiplier = dilatedValueOf(multiplier.pow(glyphDilationPowMultiplier));\r\n } else if (Enslaved.isRunning) {\r\n multiplier = dilatedValueOf(multiplier);\r\n }\r\n multiplier = multiplier.timesEffectOf(DilationUpgrade.ndMultDT);\r\n\r\n if (Effarig.isRunning) {\r\n multiplier = Effarig.multiplier(multiplier);\r\n } else if (V.isRunning) {\r\n multiplier = multiplier.pow(0.5);\r\n } else if (V.isSuperRunning) {\r\n multiplier = multiplier.pow(0.000001);\r\n }\r\n\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n multiplier = multiplier.pow(corruptionPenalties.timeCompression.hiddenEight[player.mending.corruption[2]])\r\n }\r\n\r\n // This power effect goes intentionally after all the nerf effects and shouldn't be moved before them\r\n if (AlchemyResource.inflation.isUnlocked && multiplier.gte(AlchemyResource.inflation.effectValue)) {\r\n multiplier = multiplier.pow(1.05);\r\n }\r\n\r\n return multiplier;\r\n}\r\n\r\nfunction applyNDMultipliers(mult, tier) {\r\n let multiplier = mult.times(GameCache.antimatterDimensionCommonMultiplier.value);\r\n\r\n let buy10Value;\r\n if (Laitela.continuumActive) {\r\n buy10Value = AntimatterDimension(tier).continuumValue;\r\n } else {\r\n buy10Value = Math.floor(AntimatterDimension(tier).bought / 10);\r\n }\r\n\r\n multiplier = multiplier.times(Decimal.pow(AntimatterDimensions.buyTenMultiplier, buy10Value));\r\n multiplier = multiplier.times(DimBoost.multiplierToNDTier(tier));\r\n\r\n let infinitiedMult = DC.D1.timesEffectsOf(\r\n AntimatterDimension(tier).infinityUpgrade,\r\n BreakInfinityUpgrade.infinitiedMult\r\n );\r\n infinitiedMult = infinitiedMult.pow(TimeStudy(31).effectOrDefault(1));\r\n multiplier = multiplier.times(infinitiedMult);\r\n\r\n if (tier === 1) {\r\n multiplier = multiplier\r\n .timesEffectsOf(\r\n InfinityUpgrade.unspentIPMult,\r\n InfinityUpgrade.unspentIPMult.chargedEffect,\r\n Achievement(28),\r\n Achievement(31),\r\n Achievement(68),\r\n Achievement(71),\r\n TimeStudy(234),\r\n TimeStudy(411),\r\n );\r\n }\r\n if (tier === 8) {\r\n multiplier = multiplier.times(Sacrifice.totalBoost);\r\n }\r\n\r\n multiplier = multiplier.timesEffectsOf(\r\n tier === 8 ? Achievement(23) : null,\r\n tier < 8 ? Achievement(34) : null,\r\n tier <= 4 ? Achievement(64) : null,\r\n tier < 8 ? TimeStudy(71) : null,\r\n tier === 8 ? TimeStudy(214) : null,\r\n tier > 1 && tier < 8 ? InfinityChallenge(8).reward : null\r\n );\r\n if (Achievement(43).isUnlocked) {\r\n multiplier = multiplier.times(1 + tier / 100);\r\n }\r\n\r\n multiplier = multiplier.clampMin(1);\r\n\r\n return multiplier;\r\n}\r\n\r\nfunction applyNDPowers(mult, tier) {\r\n let multiplier = mult;\r\n const glyphPowMultiplier = getAdjustedGlyphEffect(\"powerpow\");\r\n const glyphEffarigPowMultiplier = getAdjustedGlyphEffect(\"effarigdimensions\");\r\n\r\n if (InfinityChallenge(4).isRunning && player.postC4Tier !== tier) {\r\n multiplier = multiplier.pow(InfinityChallenge(4).effectValue);\r\n }\r\n if (InfinityChallenge(4).isCompleted) {\r\n multiplier = multiplier.pow(InfinityChallenge(4).reward.effectValue);\r\n }\r\n\r\n multiplier = multiplier.pow(glyphPowMultiplier * glyphEffarigPowMultiplier * Ra.momentumValue);\r\n\r\n multiplier = multiplier\r\n .powEffectsOf(\r\n AntimatterDimension(tier).infinityUpgrade.chargedEffect,\r\n InfinityUpgrade.totalTimeMult.chargedEffect,\r\n InfinityUpgrade.thisInfinityTimeMult.chargedEffect,\r\n AlchemyResource.power,\r\n Achievement(183),\r\n PelleRifts.paradox,\r\n BreakInfinityUpgrade.totalAMMult.chargedEffect,\r\n BreakInfinityUpgrade.currentAMMult.chargedEffect,\r\n );\r\n\r\n multiplier = multiplier.pow(getAdjustedGlyphEffect(\"curseddimensions\"));\r\n\r\n multiplier = multiplier.pow(VUnlocks.adPow.effectOrDefault(1));\r\n\r\n if (player.mending.corruptionChallenge.corruptedMend && player.mending.corruption[1]>=5) {\r\n multiplier = multiplier.pow(CorruptionUpgrade(17).effectOrDefault(1));\r\n }\r\n \r\n if (PelleStrikes.infinity.hasStrike && !MendingUpgrade(10).isBought) {\r\n multiplier = multiplier.pow(0.5);\r\n }\r\n\r\n\r\n return multiplier;\r\n}\r\n\r\nfunction onBuyDimension(tier) {\r\n if (tier === 1) Tutorial.turnOffEffect(TUTORIAL_STATE.DIM1);\r\n if (tier === 2) Tutorial.turnOffEffect(TUTORIAL_STATE.DIM2);\r\n Achievement(10 + tier).unlock();\r\n Achievement(23).tryUnlock();\r\n\r\n if (player.speedrun.isActive && !player.speedrun.hasStarted) Speedrun.startTimer();\r\n\r\n if (NormalChallenge(2).isRunning) player.chall2Pow = 0;\r\n if (NormalChallenge(4).isRunning || InfinityChallenge(1).isRunning) {\r\n AntimatterDimensions.resetAmountUpToTier(tier - 1);\r\n }\r\n\r\n player.postC4Tier = tier;\r\n player.records.thisInfinity.lastBuyTime = player.records.thisInfinity.time;\r\n if (tier !== 8) player.requirementChecks.eternity.onlyAD8 = false;\r\n if (tier !== 1) player.requirementChecks.eternity.onlyAD1 = false;\r\n if (tier === 8) player.requirementChecks.infinity.noAD8 = false;\r\n if (tier === 1) player.requirementChecks.eternity.noAD1 = false;\r\n}\r\n\r\nexport function buyOneDimension(tier) {\r\n const dimension = AntimatterDimension(tier);\r\n if (Laitela.continuumActive || !dimension.isAvailableForPurchase || !dimension.isAffordable) return false;\r\n\r\n const cost = dimension.cost;\r\n\r\n if (tier === 8 && Enslaved.isRunning && AntimatterDimension(8).bought >= 1) return false;\r\n\r\n dimension.currencyAmount = dimension.currencyAmount.minus(cost);\r\n\r\n if (dimension.boughtBefore10 === 9) {\r\n dimension.challengeCostBump();\r\n }\r\n\r\n dimension.amount = dimension.amount.plus(1);\r\n dimension.bought++;\r\n\r\n if (tier === 1) {\r\n Achievement(28).tryUnlock();\r\n }\r\n\r\n onBuyDimension(tier);\r\n\r\n return true;\r\n}\r\n\r\nexport function buyManyDimension(tier) {\r\n const dimension = AntimatterDimension(tier);\r\n if (Laitela.continuumActive || !dimension.isAvailableForPurchase || !dimension.isAffordableUntil10) return false;\r\n const cost = dimension.costUntil10;\r\n\r\n if (tier === 8 && Enslaved.isRunning) return buyOneDimension(8);\r\n\r\n dimension.currencyAmount = dimension.currencyAmount.minus(cost);\r\n dimension.challengeCostBump();\r\n dimension.amount = dimension.amount.plus(dimension.remainingUntil10);\r\n dimension.bought += dimension.remainingUntil10;\r\n\r\n onBuyDimension(tier);\r\n\r\n return true;\r\n}\r\n\r\nexport function buyAsManyAsYouCanBuy(tier) {\r\n const dimension = AntimatterDimension(tier);\r\n if (Laitela.continuumActive || !dimension.isAvailableForPurchase || !dimension.isAffordable) return false;\r\n const howMany = dimension.howManyCanBuy;\r\n const cost = dimension.cost.times(howMany);\r\n\r\n if (tier === 8 && Enslaved.isRunning) return buyOneDimension(8);\r\n\r\n dimension.currencyAmount = dimension.currencyAmount.minus(cost);\r\n dimension.challengeCostBump();\r\n dimension.amount = dimension.amount.plus(howMany);\r\n dimension.bought += howMany;\r\n\r\n onBuyDimension(tier);\r\n\r\n return true;\r\n}\r\n\r\n// This function doesn't do cost checking as challenges generally modify costs, it just buys and updates dimensions\r\nfunction buyUntilTen(tier) {\r\n if (Laitela.continuumActive) return;\r\n const dimension = AntimatterDimension(tier);\r\n dimension.challengeCostBump();\r\n dimension.amount = Decimal.round(dimension.amount.plus(dimension.remainingUntil10));\r\n dimension.bought += dimension.remainingUntil10;\r\n onBuyDimension(tier);\r\n}\r\n\r\nexport function maxAll() {\r\n if (Laitela.continuumActive) return;\r\n\r\n player.requirementChecks.infinity.maxAll = true;\r\n\r\n for (let tier = 1; tier < 9; tier++) {\r\n buyMaxDimension(tier);\r\n }\r\n\r\n // Do this here because tickspeed might not have been unlocked before\r\n // (and maxAll might have unlocked it by buying dimensions).\r\n buyMaxTickSpeed();\r\n}\r\n\r\nexport function buyMaxDimension(tier, bulk = Infinity) {\r\n const dimension = AntimatterDimension(tier);\r\n if (Laitela.continuumActive || !dimension.isAvailableForPurchase || !dimension.isAffordableUntil10) return;\r\n const cost = dimension.costUntil10;\r\n let bulkLeft = bulk;\r\n const goal = Player.infinityGoal;\r\n if (dimension.cost.gt(goal) && Player.isInAntimatterChallenge) return;\r\n\r\n if (tier === 8 && Enslaved.isRunning) {\r\n buyOneDimension(8);\r\n return;\r\n }\r\n\r\n // Buy any remaining until 10 before attempting to bulk-buy\r\n if (dimension.currencyAmount.gte(cost)) {\r\n dimension.currencyAmount = dimension.currencyAmount.minus(cost);\r\n buyUntilTen(tier);\r\n bulkLeft--;\r\n }\r\n\r\n if (bulkLeft <= 0) return;\r\n\r\n // Buy in a while loop in order to properly trigger abnormal price increases\r\n if (NormalChallenge(9).isRunning || InfinityChallenge(5).isRunning) {\r\n while (dimension.isAffordableUntil10 && dimension.cost.lt(goal) && bulkLeft > 0) {\r\n // We can use dimension.currencyAmount or Currency.antimatter here, they're the same,\r\n // but it seems safest to use dimension.currencyAmount for consistency.\r\n dimension.currencyAmount = dimension.currencyAmount.minus(dimension.costUntil10);\r\n buyUntilTen(tier);\r\n bulkLeft--;\r\n }\r\n return;\r\n }\r\n\r\n // This is the bulk-buy math, explicitly ignored if abnormal cost increases are active\r\n const maxBought = dimension.costScale.getMaxBought(\r\n Math.floor(dimension.bought / 10) + dimension.costBumps, dimension.currencyAmount, 10\r\n );\r\n if (maxBought === null) {\r\n return;\r\n }\r\n let buying = maxBought.quantity;\r\n if (buying > bulkLeft) buying = bulkLeft;\r\n dimension.amount = dimension.amount.plus(10 * buying).round();\r\n dimension.bought += 10 * buying;\r\n dimension.currencyAmount = dimension.currencyAmount.minus(Decimal.pow10(maxBought.logPrice));\r\n}\r\n\r\nclass AntimatterDimensionState extends DimensionState {\r\n constructor(tier) {\r\n super(() => player.dimensions.antimatter, tier);\r\n const BASE_COSTS = [null, 10, 100, 1e4, 1e6, 1e9, 1e13, 1e18, 1e24];\r\n this._baseCost = BASE_COSTS[tier];\r\n const BASE_COST_MULTIPLIERS = [null, 1e3, 1e4, 1e5, 1e6, 1e8, 1e10, 1e12, 1e15];\r\n this._baseCostMultiplier = BASE_COST_MULTIPLIERS[tier];\r\n const C6_BASE_COSTS = [null, 10, 100, 100, 500, 2500, 2e4, 2e5, 4e6];\r\n this._c6BaseCost = C6_BASE_COSTS[tier];\r\n const C6_BASE_COST_MULTIPLIERS = [null, 1e3, 5e3, 1e4, 1.2e4, 1.8e4, 2.6e4, 3.2e4, 4.2e4];\r\n this._c6BaseCostMultiplier = C6_BASE_COST_MULTIPLIERS[tier];\r\n }\r\n\r\n /**\r\n * @returns {ExponentialCostScaling}\r\n */\r\n get costScale() {\r\n let corruptionPen = 1\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n corruptionPen = corruptionPenalties.toD.hiddenEight[player.mending.corruption[7]];\r\n }\r\n return new ExponentialCostScaling({\r\n baseCost: NormalChallenge(6).isRunning ? this._c6BaseCost : this._baseCost,\r\n baseIncrease: NormalChallenge(6).isRunning ? this._c6BaseCostMultiplier : this._baseCostMultiplier,\r\n costScale: Player.dimensionMultDecrease**corruptionPen,\r\n scalingCostThreshold: Number.MAX_VALUE\r\n });\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get cost() {\r\n let primeAnswer = this.costScale.calculateCost(Math.floor(this.bought / 10) + this.costBumps);\r\n return primeAnswer;\r\n }\r\n\r\n /** @returns {number} */\r\n get costBumps() { return this.data.costBumps; }\r\n /** @param {number} value */\r\n set costBumps(value) { this.data.costBumps = value; }\r\n\r\n /**\r\n * @returns {number}\r\n */\r\n get boughtBefore10() {\r\n return this.bought % 10;\r\n }\r\n\r\n /**\r\n * @returns {number}\r\n */\r\n get remainingUntil10() {\r\n return 10 - this.boughtBefore10;\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get costUntil10() {\r\n return this.cost.times(this.remainingUntil10);\r\n }\r\n\r\n get howManyCanBuy() {\r\n const ratio = this.currencyAmount.dividedBy(this.cost);\r\n return Decimal.floor(Decimal.max(Decimal.min(ratio, 10 - this.boughtBefore10), 0)).toNumber();\r\n }\r\n\r\n /**\r\n * @returns {InfinityUpgrade}\r\n */\r\n get infinityUpgrade() {\r\n switch (this.tier) {\r\n case 1:\r\n case 8:\r\n return InfinityUpgrade.dim18mult;\r\n case 2:\r\n case 7:\r\n return InfinityUpgrade.dim27mult;\r\n case 3:\r\n case 6:\r\n return InfinityUpgrade.dim36mult;\r\n case 4:\r\n case 5:\r\n return InfinityUpgrade.dim45mult;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get rateOfChange() {\r\n const tier = this.tier;\r\n if (tier === 8 ||\r\n (tier > 3 && EternityChallenge(3).isRunning) ||\r\n (tier > 6 && NormalChallenge(12).isRunning)) {\r\n return DC.D0;\r\n }\r\n\r\n let toGain;\r\n if (tier === 7 && EternityChallenge(7).isRunning) {\r\n toGain = InfinityDimension(1).productionPerSecond.times(10);\r\n } else if (NormalChallenge(12).isRunning) {\r\n toGain = AntimatterDimension(tier + 2).productionPerSecond;\r\n } else {\r\n toGain = AntimatterDimension(tier + 1).productionPerSecond;\r\n }\r\n return toGain.times(10).dividedBy(this.amount.max(1)).times(getGameSpeedupForDisplay());\r\n }\r\n\r\n /**\r\n * @returns {boolean}\r\n */\r\n get isProducing() {\r\n const tier = this.tier;\r\n if ((EternityChallenge(3).isRunning && tier > 4) ||\r\n (NormalChallenge(10).isRunning && tier > 6) ||\r\n (Laitela.isRunning && tier > Laitela.maxAllowedDimension)) {\r\n return false;\r\n }\r\n return this.totalAmount.gt(0);\r\n }\r\n\r\n /**\r\n * @returns {Decimal}\r\n */\r\n get currencyAmount() {\r\n return this.tier >= 3 && NormalChallenge(6).isRunning\r\n ? AntimatterDimension(this.tier - 2).amount\r\n : Currency.antimatter.value;\r\n }\r\n\r\n /**\r\n * @param {Decimal} value\r\n */\r\n set currencyAmount(value) {\r\n if (this.tier >= 3 && NormalChallenge(6).isRunning) AntimatterDimension(this.tier - 2).amount = value;\r\n else Currency.antimatter.value = value;\r\n }\r\n\r\n /**\r\n * @returns {number}\r\n */\r\n get continuumValue() {\r\n if (!this.isAvailableForPurchase) return 0;\r\n // Nameless limits dim 8 purchases to 1 only\r\n // Continuum should be no different\r\n if (this.tier === 8 && Enslaved.isRunning) return 1;\r\n // It's safe to use dimension.currencyAmount because this is\r\n // a dimension-only method (so don't just copy it over to tickspeed).\r\n // We need to use dimension.currencyAmount here because of different costs in NC6.\r\n return this.costScale.getContinuumValue(this.currencyAmount, 10) * Laitela.matterExtraPurchaseFactor;\r\n }\r\n\r\n /**\r\n * @returns {number}\r\n */\r\n get continuumAmount() {\r\n if (!Laitela.continuumActive) return 0;\r\n return Math.floor(10 * this.continuumValue);\r\n }\r\n\r\n /**\r\n * Continuum doesn't continually update dimension amount because that would require making the code\r\n * significantly messier to handle it properly. Instead an effective amount is calculated here, which\r\n * is only used for production and checking for boost/galaxy. Doesn't affect achievements.\r\n * Taking the max is kind of a hack but it seems to work in all cases. Obviously it works if\r\n * continuum isn't unlocked. If the dimension is being produced and the continuum is unlocked,\r\n * the dimension will be being produced in large numbers (since the save is endgame), so the amount\r\n * will be larger than the continuum and so the continuum is insignificant, which is fine.\r\n * If the dimension isn't being produced, the continuum will be at least the amount, so\r\n * the continuum will be used and that's fine. Note that when continuum is first unlocked,\r\n * both 8d amount and 8d continuum will be nonzero until the next infinity, so taking the sum\r\n * doesn't work.\r\n * @param {Decimal} value\r\n */\r\n get totalAmount() {\r\n return this.amount.max(this.continuumAmount);\r\n }\r\n\r\n /**\r\n * @returns {boolean}\r\n */\r\n get isAffordable() {\r\n if (Laitela.continuumActive) return false;\r\n if (!player.break && this.cost.gt(Decimal.MAX_VALUE)) return false;\r\n return this.cost.lte(this.currencyAmount);\r\n }\r\n\r\n /**\r\n * @returns {boolean}\r\n */\r\n get isAffordableUntil10() {\r\n if (!player.break && this.cost.gt(Decimal.MAX_VALUE)) return false;\r\n return this.costUntil10.lte(this.currencyAmount);\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n if (!EternityMilestone.unlockAllND.isReached && this.tier > DimBoost.totalBoosts + 4) return false;\r\n const hasPrevTier = this.tier === 1 || AntimatterDimension(this.tier - 1).totalAmount.gt(0);\r\n if (!EternityMilestone.unlockAllND.isReached && !hasPrevTier) return false;\r\n return this.tier < 7 || !NormalChallenge(10).isRunning;\r\n }\r\n\r\n reset() {\r\n this.amount = DC.D0;\r\n this.bought = 0;\r\n this.costBumps = 0;\r\n }\r\n\r\n resetAmount() {\r\n this.amount = DC.D0;\r\n }\r\n\r\n challengeCostBump() {\r\n if (InfinityChallenge(5).isRunning) this.multiplyIC5Costs();\r\n else if (NormalChallenge(9).isRunning) this.multiplySameCosts();\r\n }\r\n\r\n multiplySameCosts() {\r\n for (const dimension of AntimatterDimensions.all.filter(dim => dim.tier !== this.tier)) {\r\n if (dimension.cost.e === this.cost.e) {\r\n dimension.costBumps++;\r\n }\r\n }\r\n if (Tickspeed.cost.e === this.cost.e) player.chall9TickspeedCostBumps++;\r\n }\r\n\r\n multiplyIC5Costs() {\r\n for (const dimension of AntimatterDimensions.all.filter(dim => dim.tier !== this.tier)) {\r\n if (this.tier <= 4 && dimension.cost.lt(this.cost)) {\r\n dimension.costBumps++;\r\n } else if (this.tier >= 5 && dimension.cost.gt(this.cost)) {\r\n dimension.costBumps++;\r\n }\r\n }\r\n }\r\n\r\n get multiplier() {\r\n return GameCache.antimatterDimensionFinalMultipliers[this.tier].value;\r\n }\r\n\r\n get cappedProductionInNormalChallenges() {\r\n const postBreak = (player.break && !NormalChallenge.isRunning) ||\r\n InfinityChallenge.isRunning ||\r\n Enslaved.isRunning;\r\n const postWarp = player.reality.warped;\r\n if ((Pelle.isDoomed && Pelle.hasGalaxyGenerator) || !postWarp) return postBreak ? Decimal.MAX_VALUE : DC.E315;\r\n return postBreak ? DC.WARP_LIMIT : DC.E315;\r\n }\r\n\r\n get productionPerSecond() {\r\n const tier = this.tier;\r\n if (Laitela.isRunning && tier > Laitela.maxAllowedDimension) return DC.D0;\r\n let amount = this.totalAmount;\r\n if (NormalChallenge(12).isRunning) {\r\n if (tier === 2) amount = amount.pow(1.6);\r\n if (tier === 4) amount = amount.pow(1.4);\r\n if (tier === 6) amount = amount.pow(1.2);\r\n }\r\n let production = amount.times(this.multiplier).times(Tickspeed.perSecond);\r\n if (NormalChallenge(2).isRunning) {\r\n production = production.times(player.chall2Pow);\r\n }\r\n if (tier === 1) {\r\n if (NormalChallenge(3).isRunning) {\r\n production = production.times(player.chall3Pow);\r\n }\r\n if (production.gt(10)) {\r\n const log10 = production.log10();\r\n production = Decimal.pow10(Math.pow(log10, getAdjustedGlyphEffect(\"effarigantimatter\")));\r\n }\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let atomDilutionCorruption = corruptionPenalties.atomDilution[player.mending.corruption[6]];\r\n if(CorruptionUpgrade(22).isBought) atomDilutionCorruption = Math.min(1,atomDilutionCorruption*1.5)\r\n production = Decimal.pow10(Math.pow(production.log10(),atomDilutionCorruption))\r\n }\r\n if(KohlerProgressUnlocks.hostileFragments.isUnlocked){\r\n production = Decimal.pow(production,1+CorruptionData.recordCorruptedFragments/100)\r\n }\r\n }\r\n production = production.min(this.cappedProductionInNormalChallenges);\r\n return production;\r\n }\r\n}\r\n\r\n/**\r\n * @function\r\n * @param {number} tier\r\n * @return {AntimatterDimensionState}\r\n */\r\nexport const AntimatterDimension = AntimatterDimensionState.createAccessor();\r\n\r\nexport const AntimatterDimensions = {\r\n /**\r\n * @type {AntimatterDimensionState[]}\r\n */\r\n all: AntimatterDimension.index.compact(),\r\n\r\n reset() {\r\n for (const dimension of AntimatterDimensions.all) {\r\n dimension.reset();\r\n }\r\n GameCache.dimensionMultDecrease.invalidate();\r\n },\r\n\r\n resetAmountUpToTier(maxTier) {\r\n for (const dimension of AntimatterDimensions.all.slice(0, maxTier)) {\r\n dimension.resetAmount();\r\n }\r\n },\r\n\r\n get buyTenMultiplier() {\r\n if (NormalChallenge(7).isRunning) return DC.D2.min(1 + DimBoost.totalBoosts / 5);\r\n\r\n let mult = DC.D2.plusEffectsOf(\r\n Achievement(141).effects.buyTenMult,\r\n );\r\n if(EternityChallenge(3).completions >= 1){\r\n mult = mult.plusEffectsOf(EternityChallenge(3).reward);\r\n }\r\n mult = mult.timesEffectsOf(\r\n InfinityUpgrade.buy10Mult,\r\n Achievement(58)\r\n ).times(getAdjustedGlyphEffect(\"powerbuy10\"));\r\n\r\n mult = mult.pow(Math.max(1, getAdjustedGlyphEffect(\"effarigforgotten\")))\r\n mult = mult.powEffectOf(InfinityUpgrade.buy10Mult.chargedEffect);\r\n mult = mult.pow(ImaginaryUpgrade(14).effectOrDefault(1));\r\n\r\n if (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(3).completions >= 1 && !Pelle.isDoomed){\r\n mult = mult.pow(EternityChallenge(3).vReward.effectValue);\r\n }\r\n return mult;\r\n },\r\n\r\n tick(diff) {\r\n // Stop producing antimatter at Big Crunch goal because all the game elements\r\n // are hidden when pre-break Big Crunch button is on screen.\r\n const hasBigCrunchGoal = !player.break || Player.isInAntimatterChallenge;\r\n if (hasBigCrunchGoal && Currency.antimatter.gte(Player.infinityGoal)) return;\r\n\r\n let maxTierProduced = EternityChallenge(3).isRunning ? 3 : 7;\r\n let nextTierOffset = 1;\r\n if (NormalChallenge(12).isRunning) {\r\n maxTierProduced--;\r\n nextTierOffset++;\r\n }\r\n for (let tier = maxTierProduced; tier >= 1; --tier) {\r\n AntimatterDimension(tier + nextTierOffset).produceDimensions(AntimatterDimension(tier), new Decimal(diff).div(10));\r\n }\r\n if (AntimatterDimension(1).amount.gt(0)) {\r\n player.requirementChecks.eternity.noAD1 = false;\r\n }\r\n AntimatterDimension(1).produceCurrency(Currency.antimatter, diff);\r\n if (NormalChallenge(12).isRunning) {\r\n AntimatterDimension(2).produceCurrency(Currency.antimatter, diff);\r\n }\r\n // Production may overshoot the goal on the final tick of the challenge\r\n if (hasBigCrunchGoal) Currency.antimatter.dropTo(Player.infinityGoal);\r\n }\r\n};\r\n","import { DC } from \"../constants\";\r\nimport { CorruptionUpgrade } from \"../corruption-upgrades\";\r\nimport { Currency } from \"../currency\";\r\nimport { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\nimport { WarpUpgrade } from \"../warp-upgrades\";\r\n\r\nimport { DimensionState } from \"./dimension\";\r\n\r\nexport function infinityDimensionCommonMultiplier() {\r\n let mult = new Decimal(ShopPurchase.allDimPurchases.currentMult)\r\n .timesEffectsOf(\r\n Achievement(75),\r\n TimeStudy(82),\r\n TimeStudy(92),\r\n TimeStudy(162),\r\n InfinityChallenge(1).reward,\r\n InfinityChallenge(6).reward,\r\n EternityUpgrade.idMultEP,\r\n EternityUpgrade.idMultEternities,\r\n EternityUpgrade.idMultICRecords,\r\n AlchemyResource.dimensionality,\r\n ImaginaryUpgrade(8),\r\n PelleRifts.recursion.milestones[1]\r\n );\r\n \r\n if (Pelle.isDoomed && EternityChallenge(4).completions >= 1) {\r\n mult = mult.timesEffectsOf(EternityChallenge(4).reward);\r\n }\r\n if (Pelle.isDoomed && EternityChallenge(9).completions >= 1) {\r\n mult = mult.timesEffectsOf(EternityChallenge(9).reward);\r\n }\r\n if (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(9).completions >= 1 && !Pelle.isDoomed) {\r\n mult = mult.timesEffectsOf(EternityChallenge(9).vReward);\r\n }\r\n if (Replicanti.areUnlocked && Replicanti.amount.gt(1)) {\r\n mult = mult.times(replicantiMult());\r\n }\r\n\r\n if(Ra.unlocks.vAchMilestone2AffectsIDsAndTDs.isUnlocked) {\r\n mult = mult.pow(VUnlocks.adPow.effectOrDefault(1), 0.5);\r\n }\r\n return mult;\r\n}\r\n\r\nexport function toggleAllInfDims() {\r\n const areEnabled = Autobuyer.infinityDimension(1).isActive;\r\n for (let i = 1; i < 9; i++) {\r\n Autobuyer.infinityDimension(i).isActive = !areEnabled;\r\n }\r\n}\r\n\r\nclass InfinityDimensionState extends DimensionState {\r\n constructor(tier) {\r\n super(() => player.dimensions.infinity, tier);\r\n const UNLOCK_REQUIREMENTS = [\r\n undefined,\r\n DC.E1100,\r\n DC.E1900,\r\n DC.E2400,\r\n DC.E10500,\r\n DC.E30000,\r\n DC.E45000,\r\n DC.E54000,\r\n DC.E60000,\r\n ];\r\n this._unlockRequirement = UNLOCK_REQUIREMENTS[tier];\r\n const COST_MULTS = [null, 1e3, 1e6, 1e8, 1e10, 1e15, 1e20, 1e25, 1e30];\r\n this._costMultiplier = COST_MULTS[tier];\r\n const POWER_MULTS = [null, 50, 30, 10, 5, 5, 5, 5, 5];\r\n this._powerMultiplier = POWER_MULTS[tier];\r\n const BASE_COSTS = [null, 1e8, 1e9, 1e10, 1e20, 1e140, 1e200, 1e250, 1e280];\r\n this._baseCost = new Decimal(BASE_COSTS[tier]);\r\n this.ipRequirement = BASE_COSTS[1];\r\n }\r\n\r\n /** @returns {Decimal} */\r\n get cost() { return this.data.cost; }\r\n /** @param {Decimal} value */\r\n set cost(value) { this.data.cost = value; }\r\n\r\n get baseAmount() {\r\n return this.data.baseAmount;\r\n }\r\n\r\n set baseAmount(value) {\r\n this.data.baseAmount = value;\r\n }\r\n\r\n get isUnlocked() {\r\n return this.data.isUnlocked;\r\n }\r\n\r\n set isUnlocked(value) {\r\n this.data.isUnlocked = value;\r\n }\r\n\r\n get amRequirement() {\r\n return this._unlockRequirement;\r\n }\r\n\r\n get antimatterRequirementReached() {\r\n return player.records.thisEternity.maxAM.gte(this.amRequirement);\r\n }\r\n\r\n get hasIPUnlock() {\r\n return this.tier === 1 && !PlayerProgress.eternityUnlocked();\r\n }\r\n\r\n get ipRequirementReached() {\r\n return !this.hasIPUnlock || Currency.infinityPoints.value.gte(this.ipRequirement);\r\n }\r\n\r\n get canUnlock() {\r\n return (Perk.bypassIDAntimatter.canBeApplied || this.antimatterRequirementReached) &&\r\n this.ipRequirementReached;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return InfinityDimensions.canBuy() && this.isUnlocked && this.isAffordable && !this.isCapped;\r\n }\r\n\r\n get isAffordable() {\r\n return Currency.infinityPoints.gte(this.cost);\r\n }\r\n\r\n get rateOfChange() {\r\n const tier = this.tier;\r\n let toGain = DC.D0;\r\n if (tier === 8) {\r\n // We need a extra 10x here (since ID8 production is per-second and\r\n // other ID production is per-10-seconds).\r\n EternityChallenge(7).reward.applyEffect(v => toGain = v.times(10));\r\n if (EternityChallenge(7).isRunning) EternityChallenge(7).applyEffect(v => toGain = v.times(10));\r\n } else {\r\n toGain = InfinityDimension(tier + 1).productionPerSecond;\r\n }\r\n const current = Decimal.max(this.amount, 1);\r\n return toGain.times(10).dividedBy(current).times(getGameSpeedupForDisplay());\r\n }\r\n\r\n get infPowerSoftcap(){\r\n let x = 9e15;\r\n x += WarpUpgrade(1).effectOrDefault(0)\r\n return x;\r\n }\r\n\r\n get productionPerSecond() {\r\n if (EternityChallenge(2).isRunning || EternityChallenge(10).isRunning ||\r\n (Laitela.isRunning && this.tier > Laitela.maxAllowedDimension)) {\r\n return DC.D0;\r\n }\r\n let production = this.totalAmount;\r\n if (EternityChallenge(11).isRunning) {\r\n return production;\r\n }\r\n if (EternityChallenge(7).isRunning) {\r\n production = production.times(Tickspeed.perSecond);\r\n }\r\n production = production.times(this.multiplier);\r\n //mend: Inf Power Gain softcap --sxy\r\n let repeats = 1;\r\n /*while (factor.gte(Decimal.pow(getGameSpeedupSoftcaps(), repeats))) {\r\n factor = factor.div(getGameSpeedupSoftcaps());\r\n factor = factor.pow(getGameSpeedupSoftcapsExp());\r\n factor = factor.times(getGameSpeedupSoftcaps());\r\n repeats += 1;\r\n }*/\r\n if (this.tier == 1){\r\n while (Math.log10(production.log10()) > Math.log10(this.infPowerSoftcap)*repeats) {\r\n production = production.div(Decimal.pow10(this.infPowerSoftcap)); \r\n production = production.pow(0.0123456789);\r\n production = production.times(Decimal.pow10(this.infPowerSoftcap));\r\n repeats += 1}\r\n }\r\n return production;\r\n }\r\n\r\n get multiplier() {\r\n const tier = this.tier;\r\n if (EternityChallenge(11).isRunning) return DC.D1;\r\n let mult = GameCache.infinityDimensionCommonMultiplier.value\r\n .timesEffectsOf(\r\n tier === 1 ? Achievement(94) : null,\r\n tier === 4 ? TimeStudy(72) : null,\r\n TimeStudy(312),\r\n );\r\n if (EternityChallenge(2).completions >= 1){\r\n mult = mult.timesEffectsOf(\r\n tier === 1 ? EternityChallenge(2).reward : null,\r\n );\r\n }\r\n mult = mult.times(Decimal.pow(this.powerMultiplier, Math.floor(this.baseAmount / 10)));\r\n\r\n\r\n if (tier === 1) {\r\n mult = mult.times(PelleRifts.decay.milestones[0].effectOrDefault(1));\r\n mult = mult.times(TimeStudy(412).effectOrDefault(1));\r\n }\r\n\r\n\r\n mult = mult.pow(getAdjustedGlyphEffect(\"infinitypow\"));\r\n mult = mult.pow(getAdjustedGlyphEffect(\"effarigdimensions\"));\r\n mult = mult.pow(getAdjustedGlyphEffect(\"curseddimensions\"));\r\n mult = mult.powEffectOf(AlchemyResource.infinity);\r\n mult = mult.pow(Ra.momentumValue);\r\n mult = mult.powEffectOf(PelleRifts.paradox);\r\n if(Ra.unlocks.improvedECRewards.isUnlocked && !Pelle.isDoomed){\r\n if(EternityChallenge(2).completions >= 1) mult = mult.pow(EternityChallenge(2).vReward.effectValue);\r\n if(EternityChallenge(4).completions >= 1) mult = mult.pow(EternityChallenge(4).vReward.effectValue);\r\n }\r\n if (EternityChallenge(4).completions >= 1) {\r\n mult = mult.timesEffectsOf(EternityChallenge(4).reward);\r\n }\r\n\r\n if (player.dilation.active || PelleStrikes.dilation.hasStrike) {\r\n mult = dilatedValueOf(mult);\r\n }\r\n\r\n if (Effarig.isRunning) {\r\n mult = Effarig.multiplier(mult);\r\n } else if (V.isRunning) {\r\n mult = mult.pow(0.5);\r\n } else if (V.isSuperRunning) {\r\n mult = mult.pow(0.000001);\r\n }\r\n\r\n if (PelleStrikes.powerGalaxies.hasStrike && !MendingUpgrade(10).isBought) {\r\n mult = mult.pow(0.5);\r\n }\r\n\r\n if (CorruptionUpgrade(24).isBought&&player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[8]>=5){\r\n mult = mult.pow(CorruptionUpgrade(24).effectOrDefault(1));\r\n }\r\n return mult;\r\n }\r\n\r\n get isProducing() {\r\n const tier = this.tier;\r\n if (EternityChallenge(2).isRunning ||\r\n EternityChallenge(10).isRunning ||\r\n (Laitela.isRunning && tier > Laitela.maxAllowedDimension)) {\r\n return false;\r\n }\r\n return this.totalAmount.gt(0);\r\n }\r\n\r\n get baseCost() {\r\n return this._baseCost;\r\n }\r\n\r\n get costMultiplier() {\r\n let costMult = this._costMultiplier;\r\n if(EternityChallenge(12).completions >= 1) costMult = Math.pow(costMult, EternityChallenge(12).reward.effectValue);\r\n return costMult;\r\n }\r\n\r\n get powerMultiplier() {\r\n return new Decimal(this._powerMultiplier)\r\n .timesEffectsOf(this._tier === 8 ? GlyphSacrifice.infinity : null)\r\n .pow(ImaginaryUpgrade(14).effectOrDefault(1));\r\n }\r\n\r\n get purchases() {\r\n // Because each ID purchase gives 10 IDs\r\n return this.data.baseAmount / 10;\r\n }\r\n\r\n get purchaseCap() {\r\n if (Enslaved.isRunning) {\r\n return 1;\r\n }\r\n // return InfinityDimensions.totalDimCap * (this.tier == 8 ? 100 : 1);\r\n const x = (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(12).completions >= 1 && !Pelle.isDoomed) ? EternityChallenge(12).vReward.effectValue : 1\r\n let y = this.tier == 8 ? 1e10 : InfinityDimensions.totalDimCap ** x\r\n if (player.timestudy.studies.includes(310)) y = this.tier == 8 ? 1e10 * (Math.max(Math.log10(Currency.replicanti.value.exponent),1)) : (1e10 * (Math.max(Math.log10(Currency.replicanti.value.exponent),1)))**x\r\n return y;\r\n }\r\n\r\n get isCapped() {\r\n return this.purchases >= this.purchaseCap;\r\n }\r\n\r\n get hardcapIPAmount() {\r\n return this._baseCost.times(Decimal.pow(this.costMultiplier, this.purchaseCap));\r\n }\r\n\r\n get continuumValue() {\r\n if(Pelle.isDoomed) return 0;\r\n if(!this.isUnlocked) return 0;\r\n if(!Ra.continuumActive) return 0;\r\n const logMoney = Currency.infinityPoints.value.log10();\r\n const logMult = Math.log10(this.costMultiplier);\r\n const logBase = this.baseCost.log10();\r\n let contValue = (logMoney - logBase)/logMult;\r\n contValue *= 1 + Laitela.matterExtraPurchaseFactor * .1;\r\n /*if(this.tier < 8)*/ contValue = Math.clampMax(contValue, this.purchaseCap);\r\n return Math.clampMin(contValue, 0);\r\n }\r\n\r\n get totalAmount() {\r\n //if (this.tier==8) return Decimal.min(this.amount.max(this.continuumValue*10),1e25);\r\n return this.amount.max(this.continuumValue*10);\r\n }\r\n\r\n resetAmount() {\r\n this.amount = new Decimal(this.baseAmount);\r\n }\r\n\r\n fullReset() {\r\n this.cost = new Decimal(this.baseCost);\r\n this.amount = DC.D0;\r\n this.bought = 0;\r\n this.baseAmount = 0;\r\n this.isUnlocked = false;\r\n }\r\n\r\n unlock() {\r\n if (this.isUnlocked) return true;\r\n if (!this.canUnlock) return false;\r\n this.isUnlocked = true;\r\n EventHub.dispatch(GAME_EVENT.INFINITY_DIMENSION_UNLOCKED, this.tier);\r\n if (this.tier === 1 && !PlayerProgress.eternityUnlocked()) {\r\n Tab.dimensions.infinity.show();\r\n }\r\n return true;\r\n }\r\n\r\n // Only ever called from manual actions\r\n buySingle() {\r\n if (!this.isUnlocked) return this.unlock();\r\n if (!this.isAvailableForPurchase) return false;\r\n if (ImaginaryUpgrade(15).isLockingMechanics) {\r\n const lockString = this.tier === 1\r\n ? \"purchase a 1st Infinity Dimension\"\r\n : \"purchase a Dimension which will produce 1st IDs\";\r\n ImaginaryUpgrade(15).tryShowWarningModal(lockString);\r\n return false;\r\n }\r\n\r\n Currency.infinityPoints.purchase(this.cost);\r\n this.cost = Decimal.round(this.cost.times(this.costMultiplier));\r\n // Because each ID purchase gives 10 IDs\r\n this.amount = this.amount.plus(10);\r\n this.baseAmount += 10;\r\n\r\n if (EternityChallenge(8).isRunning) {\r\n player.eterc8ids -= 1;\r\n }\r\n \r\n return true;\r\n }\r\n\r\n buyMax(auto) {\r\n if (!this.isAvailableForPurchase) return false;\r\n if (ImaginaryUpgrade(15).isLockingMechanics) {\r\n const lockString = this.tier === 1\r\n ? \"purchase a 1st Infinity Dimension\"\r\n : \"purchase a Dimension which will produce 1st IDs\";\r\n if (!auto) ImaginaryUpgrade(15).tryShowWarningModal(lockString);\r\n return false;\r\n }\r\n\r\n let purchasesUntilHardcap = this.purchaseCap - this.purchases;\r\n if (EternityChallenge(8).isRunning) {\r\n purchasesUntilHardcap = Math.clampMax(purchasesUntilHardcap, player.eterc8ids);\r\n }\r\n\r\n const costScaling = new LinearCostScaling(\r\n Currency.infinityPoints.value,\r\n this.cost,\r\n this.costMultiplier,\r\n purchasesUntilHardcap\r\n );\r\n if (costScaling.purchases <= 0) return false;\r\n\r\n Currency.infinityPoints.purchase(costScaling.totalCost);\r\n this.cost = this.cost.times(costScaling.totalCostMultiplier);\r\n // Because each ID purchase gives 10 IDs\r\n this.amount = this.amount.plus(10 * costScaling.purchases);\r\n this.baseAmount += 10 * costScaling.purchases;\r\n\r\n if (EternityChallenge(8).isRunning) {\r\n player.eterc8ids -= costScaling.purchases;\r\n }\r\n \r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * @function\r\n * @param {number} tier\r\n * @return {InfinityDimensionState}\r\n */\r\nexport const InfinityDimension = InfinityDimensionState.createAccessor();\r\n\r\nexport const InfinityDimensions = {\r\n /**\r\n * @type {InfinityDimensionState[]}\r\n */\r\n all: InfinityDimension.index.compact(),\r\n HARDCAP_PURCHASES: 2000000,\r\n\r\n unlockNext() {\r\n if (InfinityDimension(8).isUnlocked) return;\r\n this.next().unlock();\r\n },\r\n\r\n next() {\r\n if (InfinityDimension(8).isUnlocked)\r\n throw \"All Infinity Dimensions are unlocked\";\r\n return this.all.first(dim => !dim.isUnlocked);\r\n },\r\n\r\n resetAmount() {\r\n Currency.infinityPower.reset();\r\n for (const dimension of InfinityDimensions.all) {\r\n dimension.resetAmount();\r\n }\r\n },\r\n\r\n fullReset() {\r\n for (const dimension of InfinityDimensions.all) {\r\n dimension.fullReset();\r\n }\r\n },\r\n\r\n get capIncrease() {\r\n return Math.floor(Tesseracts.capIncrease());\r\n },\r\n\r\n get totalDimCap() {\r\n let tDc =this.HARDCAP_PURCHASES + this.capIncrease;\r\n if (player.timestudy.studies.includes(310)) tDc = tDc * (Math.max(Math.log10(Currency.replicanti.value.exponent),1))\r\n return tDc;\r\n },\r\n\r\n canBuy() {\r\n return !EternityChallenge(2).isRunning &&\r\n !EternityChallenge(10).isRunning &&\r\n (!EternityChallenge(8).isRunning || player.eterc8ids > 0);\r\n },\r\n\r\n canAutobuy() {\r\n return this.canBuy() && !EternityChallenge(8).isRunning;\r\n },\r\n\r\n tick(diff) {\r\n for (let tier = 8; tier > 1; tier--) {\r\n InfinityDimension(tier).produceDimensions(InfinityDimension(tier - 1), new Decimal(diff).div(10));\r\n }\r\n if (EternityChallenge(7).isRunning) {\r\n if (!NormalChallenge(10).isRunning) {\r\n InfinityDimension(1).produceDimensions(AntimatterDimension(7), diff);\r\n }\r\n } \r\n else { \r\n InfinityDimension(1).produceCurrency(Currency.infinityPower, diff);\r\n }\r\n\r\n player.requirementChecks.reality.maxID1 = player.requirementChecks.reality.maxID1\r\n .clampMin(InfinityDimension(1).amount);\r\n },\r\n\r\n tryAutoUnlock() {\r\n if (!EternityMilestone.autoUnlockID.isReached || InfinityDimension(8).isUnlocked) return;\r\n for (const dimension of this.all) {\r\n // If we cannot unlock this one, we can't unlock the rest, either\r\n if (!dimension.unlock()) break;\r\n }\r\n },\r\n\r\n // Called from \"Max All\" UI buttons and nowhere else\r\n buyMax() {\r\n // Try to unlock dimensions\r\n const unlockedDimensions = this.all.filter(dimension => dimension.unlock());\r\n\r\n // Try to buy single from the highest affordable new dimensions\r\n unlockedDimensions.slice().reverse().forEach(dimension => {\r\n if (dimension.purchases === 0) dimension.buySingle();\r\n });\r\n\r\n // Try to buy max from the lowest dimension (since lower dimensions have bigger multiplier per purchase)\r\n unlockedDimensions.forEach(dimension => dimension.buyMax(false));\r\n },\r\n\r\n get powerConversionRate() {\r\n const x = Ra.unlocks.relicShardBoost.isUnlocked ? 1+(Math.max(1, Decimal.max(Currency.relicShards.value,1).log10()) / 1000) : 0;\r\n const y = Ra.unlocks.improvedIpowConversion.isUnlocked ? Math.log10(Math.max(Tesseracts.effectiveCount,1)) : 0; //hpefully won't inflate if we softcap or put scaling in\r\n\r\n const z = Ra.unlocks.infinityPowerConversionBoost.isUnlocked ? 0.25 * Math.floor(Ra.pets.laitela.level / 10) : 0;\r\n const m = TimeStudy(402).isBought ? TimeStudy(402).effectOrDefault(0) :0;\r\n let multiplier = PelleRifts.paradox.milestones[2].effectOrDefault(1);\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n multiplier /= (corruptionPenalties.galWeak.hiddenEight[player.mending.corruption[3]])\r\n }\r\n return (7 + getAdjustedGlyphEffect(\"infinityrate\") + PelleUpgrade.infConversion.effectOrDefault(0) + x + y + z + m) * multiplier;\r\n }\r\n};\r\n","import { DC } from \"../constants\";\r\nimport { CorruptionUpgrade } from \"../corruption-upgrades\";\r\nimport { corruptionPenalties } from \"../secret-formula/mending/corruption\";\r\n\r\nimport { DimensionState } from \"./dimension\";\r\n\r\nexport function buySingleTimeDimension(tier, auto = false) {\r\n const dim = TimeDimension(tier);\r\n if (TimeDimension(tier).bought >= TimeDimension(tier).purchaseCap) return false;\r\n if (tier > 4) {\r\n if (!TimeStudy.timeDimension(tier).isBought) return false;\r\n if (RealityUpgrade(13).isLockingMechanics && Currency.eternityPoints.gte(dim.cost)) {\r\n if (!auto) RealityUpgrade(13).tryShowWarningModal();\r\n return false;\r\n }\r\n }\r\n if (Currency.eternityPoints.lt(dim.cost)) return false;\r\n if (Enslaved.isRunning && dim.bought > 0) return false;\r\n if (ImaginaryUpgrade(15).isLockingMechanics && EternityChallenge(7).completions > 0) {\r\n if (!auto) {\r\n ImaginaryUpgrade(15).tryShowWarningModal(`purchase a Time Dimension,\r\n which will produce Infinity Dimensions through EC7`);\r\n }\r\n return false;\r\n }\r\n\r\n Currency.eternityPoints.subtract(dim.cost);\r\n dim.amount = dim.amount.plus(1);\r\n dim.bought += 1;\r\n dim.cost = dim.nextCost(dim.bought);\r\n if(TimeDimension(tier).bought > TimeDimension(tier).purchaseCap) TimeDimension(tier).bought = TimeDimension(tier).purchaseCap;\r\n return true;\r\n}\r\n\r\nexport function resetTimeDimensions() {\r\n for (const dim of TimeDimensions.all) dim.amount = new Decimal(dim.bought);\r\n updateTimeDimensionCosts();\r\n}\r\n\r\nexport function fullResetTimeDimensions() {\r\n for (const dim of TimeDimensions.all) {\r\n dim.cost = new Decimal(dim.baseCost);\r\n dim.amount = DC.D0;\r\n dim.bought = 0;\r\n }\r\n}\r\n\r\nexport function toggleAllTimeDims() {\r\n const areEnabled = Autobuyer.timeDimension(1).isActive;\r\n for (let i = 1; i < 9; i++) {\r\n Autobuyer.timeDimension(i).isActive = !areEnabled;\r\n }\r\n}\r\n\r\nexport function buyMaxTimeDimension(tier, portionToSpend = 1, isMaxAll = false) {\r\n const canSpend = Currency.eternityPoints.value.times(portionToSpend);\r\n const dim = TimeDimension(tier);\r\n if (canSpend.lt(dim.cost)) return false;\r\n if (TimeDimension(tier).bought >= TimeDimension(tier).purchaseCap) return false;\r\n if (tier > 4) {\r\n if (!TimeStudy.timeDimension(tier).isBought) return false;\r\n if (RealityUpgrade(13).isLockingMechanics) {\r\n if (!isMaxAll) RealityUpgrade(13).tryShowWarningModal();\r\n return false;\r\n }\r\n }\r\n if (ImaginaryUpgrade(15).isLockingMechanics && EternityChallenge(7).completions > 0) {\r\n if (!isMaxAll) {\r\n ImaginaryUpgrade(15).tryShowWarningModal(`purchase a Time Dimension,\r\n which will produce Infinity Dimensions through EC7`);\r\n }\r\n return false;\r\n }\r\n if (Enslaved.isRunning) return buySingleTimeDimension(tier);\r\n let bulk = null;\r\n try{\r\n bulk = bulkBuyBinarySearch(canSpend, {\r\n costFunction: bought => dim.nextCost(bought),\r\n cumulative: true,\r\n firstCost: dim.cost,\r\n }, dim.bought);\r\n }\r\n catch{\r\n dim.bought = TimeDimension(8).purchaseCap;//I'll just use 8\r\n return true;\r\n }\r\n if (!bulk) return false;\r\n Currency.eternityPoints.subtract(bulk.purchasePrice);\r\n dim.amount = dim.amount.plus(bulk.quantity);\r\n dim.bought += bulk.quantity;\r\n dim.cost = dim.nextCost(dim.bought);\r\n if(TimeDimension(tier).bought > TimeDimension(tier).purchaseCap) TimeDimension(tier).bought = TimeDimension(tier).purchaseCap;\r\n return true;\r\n}\r\n\r\nexport function maxAllTimeDimensions() {\r\n // Try to buy single from the highest affordable new dimensions\r\n for (let i = 8; i > 0 && TimeDimension(i).bought === 0; i--) {\r\n buySingleTimeDimension(i, true);\r\n }\r\n\r\n // Buy everything costing less than 1% of initial EP\r\n for (let i = 8; i > 0; i--) {\r\n buyMaxTimeDimension(i, 0.01, true);\r\n }\r\n\r\n // Loop buying the cheapest dimension possible; explicit infinite loops make me nervous\r\n const unlockedDimensions = TimeDimensions.all.filter(d => d.isUnlocked);\r\n for (let stop = 0; stop < 1000; stop++) {\r\n const cheapestDim = unlockedDimensions.reduce((a, b) => (b.cost.gte(a.cost) ? a : b));\r\n if (!buySingleTimeDimension(cheapestDim.tier, true)) break;\r\n }\r\n}\r\n\r\nexport function timeDimensionCommonMultiplier() {\r\n let mult = new Decimal(ShopPurchase.allDimPurchases.currentMult)\r\n .timesEffectsOf(\r\n Achievement(105),\r\n Achievement(128),\r\n TimeStudy(93),\r\n TimeStudy(103),\r\n TimeStudy(151),\r\n TimeStudy(221),\r\n TimeStudy(301),\r\n EternityChallenge(10).reward,\r\n EternityUpgrade.tdMultAchs,\r\n EternityUpgrade.tdMultTheorems,\r\n EternityUpgrade.tdMultRealTime,\r\n Replicanti.areUnlocked && Replicanti.amount.gt(1) ? DilationUpgrade.tdMultReplicanti : null,\r\n Pelle.isDoomed ? null : RealityUpgrade(22),\r\n AlchemyResource.dimensionality,\r\n PelleRifts.chaos\r\n );\r\n\r\n if(EternityChallenge(1).completions >= 1){\r\n mult = mult.timesEffectsOf(EternityChallenge(1).reward);\r\n }\r\n if(EternityChallenge(10).completions >= 1){\r\n mult = mult.timesEffectsOf(EternityChallenge(10).reward);\r\n }\r\n if (EternityChallenge(9).isRunning) {\r\n mult = mult.times(\r\n Decimal.pow(\r\n Math.clampMin(Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate / 7).log2(), 1),\r\n 4)\r\n .clampMin(1));\r\n }\r\n\r\n if (Ra.unlocks.relicShardBoost.isUnlocked) mult = mult.pow(1 + ((Currency.relicShards.value.clampMin(1)).log10() / 1337));\r\n if (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(1).completions >= 1 && !Pelle.isDoomed) mult = mult.pow(EternityChallenge(1).vReward.effectValue);\r\n if (Ra.unlocks.improvedECRewards.isUnlocked && EternityChallenge(10).completions >= 1 && !Pelle.isDoomed) mult = mult.pow(EternityChallenge(10).vReward.effectValue);\r\n if (Ra.unlocks.vAchMilestone2AffectsIDsAndTDs.isUnlocked){\r\n mult = mult.pow(VUnlocks.adPow.effectOrDefault(1), 0.5);\r\n }\r\n return mult;\r\n}\r\n\r\nexport function updateTimeDimensionCosts() {\r\n for (let i = 1; i <= 8; i++) {\r\n const dim = TimeDimension(i);\r\n dim.cost = dim.nextCost(dim.bought);\r\n }\r\n}\r\n\r\nclass TimeDimensionState extends DimensionState {\r\n constructor(tier) {\r\n super(() => player.dimensions.time, tier);\r\n const BASE_COSTS = [null, DC.D1, DC.D5, DC.E2, DC.E3, DC.E2350, DC.E2650, DC.E3000, DC.E3350];\r\n this._baseCost = BASE_COSTS[tier];\r\n const COST_MULTS = [null, 3, 9, 27, 81, 24300, 72900, 218700, 656100];\r\n this._costMultiplier = COST_MULTS[tier];\r\n const E6000_SCALING_AMOUNTS = [null, 7322, 4627, 3382, 2665, 833, 689, 562, 456];\r\n this._e6000ScalingAmount = E6000_SCALING_AMOUNTS[tier];\r\n const COST_THRESHOLDS = [Decimal.NUMBER_MAX_VALUE, DC.E1300, DC.E6000];\r\n this._costIncreaseThresholds = COST_THRESHOLDS;\r\n }\r\n\r\n /** @returns {Decimal} */\r\n get cost() {\r\n return this.data.cost;\r\n }\r\n\r\n /** @param {Decimal} value */\r\n set cost(value) { this.data.cost = value; }\r\n\r\n nextCost(bought) {\r\n if (this._tier > 4 && bought < this.e6000ScalingAmount) {\r\n const cost = Decimal.pow(this.costMultiplier, bought).times(this.baseCost);\r\n if (PelleRifts.paradox.milestones[0].canBeApplied) {\r\n return cost.div(\"1e2250\").pow(0.5);\r\n }\r\n return cost;\r\n }\r\n\r\n const costMultIncreases = [1, 1.5, 2.2];\r\n for (let i = 0; i < this._costIncreaseThresholds.length; i++) {\r\n const cost = Decimal.pow(this.costMultiplier * costMultIncreases[i], bought).times(this.baseCost);\r\n if (cost.lt(this._costIncreaseThresholds[i])) return cost;\r\n }\r\n\r\n let base = this.costMultiplier;\r\n if (this._tier <= 4) base *= 2.2;\r\n const exponent = this.e6000ScalingAmount + (bought - this.e6000ScalingAmount) * TimeDimensions.scalingPast1e6000;\r\n const cost = Decimal.pow(base, exponent).times(this.baseCost);\r\n\r\n if (PelleRifts.paradox.milestones[0].canBeApplied && this._tier > 4) {\r\n return cost.div(\"1e2250\").pow(0.5);\r\n }\r\n return cost;\r\n }\r\n\r\n get isUnlocked() {\r\n return this._tier < 5 || TimeStudy.timeDimension(this._tier).isBought;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return this.isAffordable;\r\n }\r\n\r\n get isAffordable() {\r\n return Currency.eternityPoints.gte(this.cost);\r\n }\r\n\r\n get multiplier() {\r\n const tier = this._tier;\r\n\r\n if (EternityChallenge(11).isRunning) return DC.D1;\r\n let mult = GameCache.timeDimensionCommonMultiplier.value\r\n .timesEffectsOf(\r\n tier === 1 ? TimeStudy(11) : null,\r\n tier === 1 ? TimeStudy(413) : null,\r\n tier === 3 ? TimeStudy(73) : null,\r\n tier === 4 ? TimeStudy(227) : null,\r\n TimeStudy(313),\r\n );\r\n\r\n const dim = TimeDimension(tier);\r\n const value = Ra.continuumActive ? dim.continuumValue:dim.bought;\r\n let x = Ra.unlocks.uncap8TdPurchaseMult.isUnlocked ? false : tier === 8;\r\n const bought = x ? Math.clampMax(value, 1e8) : value;\r\n mult = mult.times(Decimal.pow(dim.powerMultiplier, bought));\r\n\r\n mult = mult.pow(getAdjustedGlyphEffect(\"timepow\"));\r\n mult = mult.pow(getAdjustedGlyphEffect(\"effarigdimensions\"));\r\n mult = mult.pow(getAdjustedGlyphEffect(\"curseddimensions\"));\r\n mult = mult.powEffectOf(AlchemyResource.time);\r\n mult = mult.pow(Ra.momentumValue);\r\n mult = mult.pow(ImaginaryUpgrade(11).effectOrDefault(1));\r\n mult = mult.powEffectOf(PelleRifts.paradox);\r\n\r\n if (player.dilation.active || PelleStrikes.dilation.hasStrike) {\r\n mult = dilatedValueOf(mult);\r\n }\r\n\r\n if (Effarig.isRunning) {\r\n mult = Effarig.multiplier(mult);\r\n } else if (V.isRunning) {\r\n mult = mult.pow(0.5);\r\n } else if (V.isSuperRunning) {\r\n mult = mult.pow(0.000001);\r\n }\r\n\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n mult = mult.pow(corruptionPenalties.soF.tdpow[player.mending.corruption[9]]);\r\n if(CorruptionUpgrade(25).isBought&&player.mending.corruption[9]>=4) mult = mult.pow(CorruptionUpgrade(25).effectOrDefault(1))\r\n }\r\n\r\n return mult;\r\n }\r\n\r\n get productionPerSecond() {\r\n if (EternityChallenge(1).isRunning || EternityChallenge(10).isRunning ||\r\n (Laitela.isRunning && this.tier > Laitela.maxAllowedDimension)) {\r\n return DC.D0;\r\n }\r\n if (EternityChallenge(11).isRunning) {\r\n return this.totalAmount;\r\n }\r\n let production = this.totalAmount.times(this.multiplier);\r\n if (EternityChallenge(7).isRunning) {\r\n production = production.times(Tickspeed.perSecond);\r\n }\r\n if (this._tier === 1 && !EternityChallenge(7).isRunning) {\r\n production = production.pow(getAdjustedGlyphEffect(\"timeshardpow\"));\r\n }\r\n return production;\r\n }\r\n\r\n get rateOfChange() {\r\n const tier = this._tier;\r\n let toGain = DC.D0;\r\n if (tier === 8) {\r\n if (Ra.unlocks.improvedECRewards.isUnlocked) EternityChallenge(7).vReward.applyEffect(v => toGain = v);\r\n } else {\r\n toGain = TimeDimension(tier + 1).productionPerSecond;\r\n }\r\n const current = Decimal.max(this.totalAmount, 1);\r\n return toGain.times(10).dividedBy(current).times(getGameSpeedupForDisplay());\r\n }\r\n\r\n get isProducing() {\r\n const tier = this.tier;\r\n if (EternityChallenge(1).isRunning ||\r\n EternityChallenge(10).isRunning ||\r\n (Laitela.isRunning && tier > Laitela.maxAllowedDimension)) {\r\n return false;\r\n }\r\n return this.totalAmount.gt(0);\r\n }\r\n\r\n get baseCost() {\r\n return this._baseCost;\r\n }\r\n\r\n get costMultiplier() {\r\n return this._costMultiplier;\r\n }\r\n\r\n get powerMultiplier() {\r\n return DC.D4\r\n .timesEffectsOf(this._tier === 8 ? GlyphSacrifice.time : null)\r\n .pow(ImaginaryUpgrade(14).effectOrDefault(1));\r\n }\r\n\r\n get e6000ScalingAmount() {\r\n return this._e6000ScalingAmount;\r\n }\r\n\r\n get costIncreaseThresholds() {\r\n return this._costIncreaseThresholds;\r\n }\r\n\r\n get requirementReached() {\r\n return this._tier < 5 ||\r\n (TimeStudy.timeDimension(this._tier).isAffordable && TimeStudy.timeDimension(this._tier - 1).isBought);\r\n }\r\n\r\n get purchaseCap() {\r\n let pC=5e14;\r\n if (player.timestudy.studies.includes(310)) pC = pC * (Math.max(Math.sqrt(Math.log10(Currency.replicanti.value.exponent+1)),1))\r\n return pC;\r\n }\r\n\r\n get isCapped() {\r\n return this.bought >= this.purchaseCap;\r\n }\r\n\r\n get continuumValue() {\r\n if(Pelle.isDoomed) return 0;\r\n if(!this.isUnlocked) return 0;\r\n if(!Ra.continuumActive) return 0;\r\n const firstThreshold = [null, 647, 323, 214, 160, 0, 0, 0, 0][this.tier];\r\n const secondThreshold = [null, 1991, 1150, 808, 623, 0, 0, 0, 0][this.tier];\r\n const e6kThreshold = this.e6000ScalingAmount;\r\n const mult = this.costMultiplier;\r\n\r\n const logMoney = Currency.eternityPoints.value.log10();\r\n let logMult = Math.log10(mult);\r\n let logBase = this.baseCost.log10();\r\n let contValue = (logMoney - logBase)/logMult;\r\n\r\n if(this.tier < 5){\r\n if(contValue > firstThreshold){\r\n logMult = Math.log10(mult*1.5);\r\n logBase = this.nextCost(firstThreshold).log10();\r\n contValue = firstThreshold + (logMoney - logBase)/logMult;\r\n }\r\n if(contValue > secondThreshold){\r\n logMult = Math.log10(mult*2.2);\r\n logBase = this.nextCost(firstThreshold).log10();\r\n contValue = secondThreshold + (logMoney - logBase)/logMult;\r\n }\r\n }\r\n contValue = Math.min(contValue, (contValue-e6kThreshold)/TimeDimensions.scalingPast1e6000 + e6kThreshold);\r\n contValue *= 1 + Laitela.matterExtraPurchaseFactor;\r\n contValue = Math.clampMax(contValue, this.purchaseCap);\r\n return Math.clampMin(contValue, 0);\r\n }\r\n\r\n get totalAmount(){\r\n return this.amount.max(this.continuumValue);\r\n }\r\n\r\n tryUnlock() {\r\n if (this.isUnlocked) return;\r\n TimeStudy.timeDimension(this._tier).purchase();\r\n }\r\n}\r\n\r\n/**\r\n * @function\r\n * @param {number} tier\r\n * @return {TimeDimensionState}\r\n */\r\nexport const TimeDimension = TimeDimensionState.createAccessor();\r\n\r\nexport const TimeDimensions = {\r\n /**\r\n * @type {TimeDimensionState[]}\r\n */\r\n all: TimeDimension.index.compact(),\r\n\r\n get scalingPast1e6000() {\r\n return 4;\r\n },\r\n\r\n tick(diff) {\r\n for (let tier = 8; tier > 1; tier--) {\r\n TimeDimension(tier).produceDimensions(TimeDimension(tier - 1), new Decimal(diff).div(10));\r\n }\r\n\r\n if (EternityChallenge(7).isRunning) {\r\n TimeDimension(1).produceDimensions(InfinityDimension(8), diff);\r\n } else {\r\n TimeDimension(1).produceCurrency(Currency.timeShards, diff);\r\n }\r\n\r\n if(EternityChallenge(7).completions >= 1){ EternityChallenge(7).reward.applyEffect(production => {\r\n InfinityDimension(8).amount = InfinityDimension(8).amount.plus(production.times(new Decimal(diff).div(1000)));\r\n });\r\n }\r\n }\r\n};\r\n\r\nexport function tryUnlockTimeDimensions() {\r\n if (TimeDimension(8).isUnlocked) return;\r\n for (let tier = 5; tier <= 8; ++tier) {\r\n if (TimeDimension(tier).isUnlocked) continue;\r\n TimeDimension(tier).tryUnlock();\r\n }\r\n}\r\n","import { DC } from \"../constants\";\r\nimport { WarpUpgrade } from \"../warp-upgrades\";\r\n\r\nimport { DimensionState } from \"./dimension\";\r\n\r\nexport function buySingleMultiversalDimension(tier, auto = false) {\r\n const dim = MultiversalDimension(tier);\r\n if (Currency.mendingPoints.lt(dim.cost)) return false;\r\n\r\n Currency.mendingPoints.subtract(dim.cost);\r\n dim.amount = dim.amount.plus(1);\r\n dim.bought += 1;\r\n dim.cost = dim.nextCost(dim.bought);\r\n return true;\r\n}\r\n\r\nexport function resetMultiversalDimensions() {\r\n for (const dim of MultiversalDimensions.all) dim.amount = new Decimal(dim.bought);\r\n updateMultiversalDimensionCosts();\r\n}\r\n\r\nexport function fullResetMultiversalDimensions() {\r\n for (const dim of MultiversalDimensions.all) {\r\n dim.cost = new Decimal(dim.baseCost);\r\n dim.amount = DC.D0;\r\n dim.bought = 0;\r\n }\r\n}\r\n\r\nexport function buyMaxMultiversalDimension(tier, portionToSpend = 1, isMaxAll = false) {\r\n const canSpend = Currency.mendingPoints.value.times(portionToSpend);\r\n const dim = MultiversalDimension(tier);\r\n if (canSpend.lt(dim.cost)) return false;\r\n let bulk = null;\r\n try{\r\n bulk = bulkBuyBinarySearch(canSpend, {\r\n costFunction: bought => dim.nextCost(bought),\r\n cumulative: true,\r\n firstCost: dim.cost,\r\n }, dim.bought);\r\n }\r\n catch {\r\n dim.bought = 1e15;\r\n return true;\r\n }\r\n if (!bulk) return false;\r\n Currency.mendingPoints.subtract(bulk.purchasePrice);\r\n dim.amount = dim.amount.plus(bulk.quantity);\r\n dim.bought += bulk.quantity;\r\n dim.cost = dim.nextCost(dim.bought);\r\n return true;\r\n}\r\n\r\nexport function maxAllMultiversalDimensions() {\r\n // Try to buy single from the highest affordable new dimensions\r\n for (let i = 8; i > 0 && MultiversalDimension(i).bought === 0; i--) {\r\n buySingleMultiversalDimension(i, true);\r\n }\r\n\r\n // Buy everything costing less than 1% of initial MvR\r\n for (let i = 8; i > 0; i--) {\r\n buyMaxMultiversalDimension(i, 0.01, true);\r\n }\r\n\r\n // Loop buying the cheapest dimension possible; explicit infinite loops make me nervous\r\n const unlockedDimensions = MultiversalDimensions.all;\r\n for (let stop = 0; stop < 1000; stop++) {\r\n const cheapestDim = unlockedDimensions.reduce((a, b) => (b.cost.gte(a.cost) ? a : b));\r\n if (!buySingleMultiversalDimension(cheapestDim.tier, true)) break;\r\n }\r\n}\r\n\r\nexport function multiversalDimensionCommonMultiplier() {\r\n let mult = new Decimal(1)\r\n return mult;\r\n}\r\n\r\nexport function updateMultiversalDimensionCosts() {\r\n for (let i = 1; i <= 8; i++) {\r\n const dim = MultiversalDimension(i);\r\n dim.cost = dim.nextCost(dim.bought);\r\n }\r\n}\r\n\r\nclass MultiversalDimensionState extends DimensionState {\r\n constructor(tier) {\r\n super(() => player.dimensions.multiversal, tier);\r\n const BASE_COSTS = [null, new Decimal(1e25), new Decimal(1e55), new Decimal(1e105), new Decimal(1e215), new Decimal(\"1e333\"), new Decimal(\"1e456\"), new Decimal(\"1e678\"), new Decimal(\"9.99e999\")];\r\n this._baseCost = BASE_COSTS[tier];\r\n const COST_MULTS = [null, 10, 50, 250, 1250, 6250, 3125, 156250, 781250];\r\n this._costMultiplier = COST_MULTS[tier];\r\n const E6000_SCALING_AMOUNTS = [null, 5e3, 5e3, 5e3, 5e3, 5e3, 5e3, 5e3, 5e3];\r\n this._e6000ScalingAmount = E6000_SCALING_AMOUNTS[tier];\r\n const COST_THRESHOLDS = [new Decimal(\"1e2000\"), new Decimal(\"1e8000\"), new Decimal(\"1e22000\")];\r\n this._costIncreaseThresholds = COST_THRESHOLDS;\r\n }\r\n\r\n /** @returns {Decimal} */\r\n get cost() {\r\n return this.data.cost;\r\n }\r\n\r\n /** @param {Decimal} value */\r\n set cost(value) { this.data.cost = value; }\r\n\r\n nextCost(bought) {\r\n if (this._tier > 4 && bought < this.e6000ScalingAmount) {\r\n const cost = Decimal.pow(this.costMultiplier, bought).times(this.baseCost);\r\n return cost;\r\n }\r\n\r\n const costMultIncreases = [5, 25, 125];\r\n for (let i = 0; i < this._costIncreaseThresholds.length; i++) {\r\n const cost = Decimal.pow(this.costMultiplier * costMultIncreases[i], bought).times(this.baseCost);\r\n if (cost.lt(this._costIncreaseThresholds[i])) return cost;\r\n }\r\n\r\n let base = this.costMultiplier;\r\n if (this._tier <= 4) base *= 125;\r\n const exponent = this.e6000ScalingAmount + (bought - this.e6000ScalingAmount) * MultiversalDimensions.scalingPast1e6000;\r\n const cost = Decimal.pow(base, exponent).times(this.baseCost);\r\n\r\n return cost;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return this.isAffordable;\r\n }\r\n\r\n get isAffordable() {\r\n return Currency.mendingPoints.gte(this.cost);\r\n }\r\n\r\n get multiplier() {\r\n const tier = this._tier;\r\n let mult = GameCache.multiversalDimensionCommonMultiplier.value\r\n\r\n const dim = MultiversalDimension(tier);\r\n const bought = dim.bought;\r\n mult = mult.times(Decimal.pow(dim.powerMultiplier, bought));\r\n\r\n if(tier==1){\r\n if(KohlerProgressUnlocks.antimatterGalaxy.isUnlocked) mult = mult.times(KohlerProgressUnlocks.antimatterGalaxy.effectValue)\r\n }\r\n\r\n return mult;\r\n }\r\n\r\n get productionPerSecond() {\r\n let production = this.totalAmount.times(this.multiplier);\r\n return production;\r\n }\r\n\r\n get rateOfChange() {\r\n const tier = this._tier;\r\n if (tier === 8) {\r\n return DC.D0;\r\n }\r\n const toGain = MultiversalDimension(tier + 1).productionPerSecond;\r\n const current = Decimal.max(this.totalAmount, 1);\r\n return toGain.times(10).dividedBy(current); // .times(getGameSpeedupForDisplay());\r\n }\r\n\r\n get isProducing() {\r\n const tier = this.tier;\r\n return this.totalAmount.gt(0);\r\n }\r\n\r\n get baseCost() {\r\n return this._baseCost;\r\n }\r\n\r\n get costMultiplier() {\r\n return this._costMultiplier;\r\n }\r\n\r\n get powerMultiplier() {\r\n return DC.D4;\r\n }\r\n\r\n get e6000ScalingAmount() {\r\n return this._e6000ScalingAmount;\r\n }\r\n\r\n get costIncreaseThresholds() {\r\n return this._costIncreaseThresholds;\r\n }\r\n\r\n get isCapped() {\r\n return this.bought >= this.purchaseCap;\r\n }\r\n\r\n get totalAmount(){\r\n return this.amount;\r\n }\r\n\r\n get galaxyBoost(){\r\n let x=(player.galBoostPoints.pow(1/(player.galBoostPoints.log10() ** 0.8))).div(100).add(1).toNumber();\r\n if(WarpUpgrade(9).isBought) x=(player.galBoostPoints.pow(1/(player.galBoostPoints.log10() ** 0.775))).div(100).add(1).add(Math.sqrt(player.galBoostPoints.log10())/100).toNumber();\r\n return x;\r\n }\r\n\r\n}\r\n\r\n/**\r\n * @function\r\n * @param {number} tier\r\n * @return {MultiversalDimensionState}\r\n */\r\nexport const MultiversalDimension = MultiversalDimensionState.createAccessor();\r\n\r\nexport const MultiversalDimensions = {\r\n /**\r\n * @type {MultiversalDimensionState[]}\r\n */\r\n all: MultiversalDimension.index.compact(),\r\n\r\n get scalingPast1e6000() {\r\n return 5;\r\n },\r\n\r\n tick(diff) {\r\n for (let tier = 8; tier > 1; tier--) {\r\n MultiversalDimension(tier).produceDimensions(MultiversalDimension(tier - 1), new Decimal(diff).div(10));\r\n }\r\n MultiversalDimension(1).produceCurrency(Currency.galBoostPoints, diff);\r\n }\r\n};\r\n","/**\r\n * Abstract representation of a full time study tree object. The intended usage is to supply the constructor with\r\n * an import string and a budget of time/space theorems, which it will use together to determine which studies can\r\n * actually be purchased in the specified order. All of the complex purchasing logic should be handled here, and not\r\n * in any TimeStudyState objects. During parsing, some minor additional info is stored in order to improve user\r\n * feedback when attempting to import other study trees.\r\n *\r\n * Usage notes:\r\n * - Unless commitToGameState() is called, this only ever creates a \"virtual\" tree object which does not change the\r\n * overall game state. This class serves the purpose of having all the purchasing and locking logic in one place.\r\n * Only upon calling commitToGameState() will the game actually try to get every study specified in tree.\r\n * - The general intent is that the logic in this class is meant to pull minimally from the extrenal game state; for\r\n * example, how many dimension paths are allowed or which ECs are unlockable depend on only the data in the tree\r\n * object itself and should not depend on the actual current game state\r\n * - All study entries must be Strings because numbers (normal TS) and EC# (ECs) need to be supported\r\n *\r\n * @member {Number[]} spentTheorems Two-element array containing TT/ST totals for studies which were actually\r\n * purchased after accounting for various conditions which would forbid some being bought (eg. cost or tree structure)\r\n * @member {String[]} invalidStudies Array of studies from the initial string which are correctly formatted\r\n * but don't actually exist; used for informational purposes elsewhere\r\n * @member {TimeStudyState[]} selectedStudies Array of all given valid studies, whether or not they are actually\r\n * accessible or purchasable in the given order\r\n * @member {TimeStudyState[]} purchasedStudies Array of studies which were actually purchased, using the given amount\r\n * of available theorems\r\n * @member {Boolean} startEC Whether or not to start an EC within purchasedStudies when committing to game state\r\n */\r\nexport class TimeStudyTree {\r\n // The first parameter will either be an import string or an array of studies (possibly with an EC at the end)\r\n constructor(studies) {\r\n this.spentTheorems = [0, 0];\r\n this.invalidStudies = [];\r\n this.purchasedStudies = [];\r\n this.selectedStudies = [];\r\n this.startEC = false;\r\n switch (typeof studies) {\r\n case \"string\":\r\n // Input parameter is an unparsed study import string\r\n if (TimeStudyTree.isValidImportString(studies)) {\r\n this.attemptBuyArray(this.parseStudyImport(studies), false);\r\n }\r\n break;\r\n case \"object\":\r\n // Input parameter is an array of time study objects\r\n this.attemptBuyArray([...studies], false);\r\n this.selectedStudies = [...studies];\r\n break;\r\n case \"undefined\":\r\n // If not supplied with anything, we leave everything at default values and don't attempt to buy anything\r\n break;\r\n default:\r\n throw new Error(\"Unrecognized input parameter for TimeStudyTree constructor\");\r\n }\r\n }\r\n\r\n // Note that this only checks pure formatting, not whether or not a study/EC actually exists, but verifying correct\r\n // formatting separately from verifying existence allows us to produce more useful in-game error messages for\r\n // import strings which are formatted correctly but aren't entirely valid\r\n static isValidImportString(input) {\r\n if (input.trim() === \"\") {\r\n return false;\r\n }\r\n let test = input.replaceAll(/ +/gu, \"\");\r\n TimeStudyTree.sets.forEach((_, x) => test = test.replaceAll(new RegExp(`${x},?`, \"gu\"), \"\"));\r\n return /^,?((\\d{2,3}(-\\d{2,3})?)\\b,?)*(\\|\\d{1,2}!?)?$/iu.test(test);\r\n }\r\n\r\n // Getter for all the studies in the current game state\r\n static get currentStudies() {\r\n const currentStudies = player.timestudy.studies.map(s => TimeStudy(s));\r\n if (player.challenge.eternity.unlocked !== 0) {\r\n currentStudies.push(TimeStudy.eternityChallenge(player.challenge.eternity.unlocked));\r\n }\r\n return currentStudies;\r\n }\r\n\r\n // Parses out the EC number from an import string (returns 0 for invalid or nonexistent EC ids)\r\n static getECFromString(input) {\r\n if (!this.isValidImportString(input)) return 0;\r\n const parts = input.split(\"|\");\r\n if (parts.length < 1) return 0;\r\n // Note: parseInt() seems to silently ignore the presence of \"!\"\r\n return parseInt(parts[1], 10);\r\n }\r\n\r\n // THIS METHOD HAS LASTING CONSEQUENCES ON THE GAME STATE. STUDIES WILL ACTUALLY BE PURCHASED IF POSSIBLE.\r\n // This method attempts to take the parameter array and purchase all the studies specified, using the current game\r\n // state to determine if they are affordable. Input array may be either an id array or a TimeStudyState array\r\n static commitToGameState(studyArray, auto = true, startEC = false) {\r\n for (const item of studyArray) {\r\n const study = typeof item === \"number\" ? TimeStudy(item) : item;\r\n if (study && !study.isBought) study.purchase(auto);\r\n // Note: This will automatically (silently) fail if we try to start an EC while we have a different one unlocked\r\n if (startEC && study instanceof ECTimeStudyState) EternityChallenge(study.id).start(auto);\r\n }\r\n GameCache.currentStudyTree.invalidate();\r\n }\r\n\r\n static get sets() {\r\n // Grouping of studies. The key followed by an array of the studies the key is a shorthand for.\r\n return new Map([\r\n [\"antimatter\", [71, 81, 91, 101]],\r\n [\"infinity\", [72, 82, 92, 102]],\r\n [\"time\", [73, 83, 93, 103]],\r\n [\"active\", [121, 131, 141]],\r\n [\"passive\", [122, 132, 142]],\r\n [\"idle\", [123, 133, 143]],\r\n [\"light\", [221, 223, 225, 227, 231, 233]],\r\n [\"dark\", [222, 224, 226, 228, 232, 234]],\r\n ...(Ra.unlocks.unlockHardV.canBeApplied\r\n ? [[\"triad\", [301, 302, 303, 304, 305, 306,307,308,309,310,311,312,313,321,322,323].slice(0, Ra.unlocks.unlockHardV.effectOrDefault(0))]]\r\n : []),\r\n ...(Ra.unlocks.unlockMyriads.canBeApplied\r\n ? [[\"myriad\", [401,402,403,411,412,413].slice(0, Ra.unlocks.unlockMyriads.effectOrDefault(0))]]\r\n : [])\r\n ]);\r\n }\r\n\r\n static truncateInput(input) {\r\n let internal = input.toLowerCase();\r\n // Convert every name into the ids it is a shorthand for\r\n this.sets.forEach((ids, name) => (internal = internal.replace(name, ids.join())));\r\n return internal\r\n .replace(/[|,]$/u, \"\")\r\n .replaceAll(\" \", \"\")\r\n // Allows 11,,21 to be parsed as 11,21 and 11,|1 to be parsed as 11|1\r\n .replace(/,{2,}/gu, \",\")\r\n .replace(/,\\|/gu, \"|\");\r\n }\r\n\r\n static formatStudyList(input) {\r\n const internal = input.toLowerCase().replaceAll(\" \", \"\");\r\n return internal.replaceAll(\",\", \", \").replace(\"|\", \" | \");\r\n }\r\n\r\n // This reads off all the studies in the import string and splits them into invalid and valid study IDs. We hold on\r\n // to invalid studies for additional information to present to the player\r\n parseStudyImport(input) {\r\n const studyDB = GameDatabase.eternity.timeStudies.normal.map(s => s.id);\r\n const output = [];\r\n const studiesString = TimeStudyTree.truncateInput(input).split(\"|\")[0];\r\n if (studiesString.length) {\r\n const studyCluster = studiesString.split(\",\");\r\n for (const studyRange of studyCluster) {\r\n const studyRangeSplit = studyRange.split(\"-\");\r\n const studyArray = studyRangeSplit[1]\r\n ? this.studyRangeToArray(studyRangeSplit[0], studyRangeSplit[1])\r\n : studyRangeSplit;\r\n for (const study of studyArray) {\r\n if (studyDB.includes(parseInt(study, 10))) {\r\n const tsObject = TimeStudy(study);\r\n this.selectedStudies.push(tsObject);\r\n output.push(tsObject);\r\n } else {\r\n this.invalidStudies.push(study);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // If the string has an EC indicated in it, append that to the end of the study array\r\n const ecString = input.split(\"|\")[1];\r\n this.startEC = input.endsWith(\"!\");\r\n if (!ecString) {\r\n // Study strings without an ending \"|##\" are still valid, but will result in ecString being undefined\r\n return output;\r\n }\r\n // Note: parseInt() seems to silently ignore the presence of \"!\"\r\n const ecID = parseInt(ecString, 10);\r\n const ecDB = GameDatabase.eternity.timeStudies.ec;\r\n // Specifically exclude 0 because saved presets will contain it by default\r\n if (!ecDB.map(c => c.id).includes(ecID) && ecID !== 0) {\r\n this.invalidStudies.push(`EC${ecID}`);\r\n return output;\r\n }\r\n if (ecID !== 0) output.push(TimeStudy.eternityChallenge(ecID));\r\n return output;\r\n }\r\n\r\n studyRangeToArray(firstNumber, lastNumber) {\r\n const studiesArray = [];\r\n const first = this.checkTimeStudyNumber(firstNumber);\r\n const last = this.checkTimeStudyNumber(lastNumber);\r\n if ((first !== 0) && (last !== 0)) {\r\n for (let id = first; id <= last; id++) {\r\n if (TimeStudy(id)) {\r\n studiesArray.push(id);\r\n }\r\n }\r\n }\r\n return studiesArray;\r\n }\r\n\r\n checkTimeStudyNumber(token) {\r\n const tsNumber = parseFloat(token);\r\n if (!TimeStudy(tsNumber) || (TimeStudy(tsNumber).isTriad && !Ra.canBuyTriad)) {\r\n return 0;\r\n }\r\n return tsNumber;\r\n }\r\n\r\n // Attempt to purchase all studies specified in the array which may be either study IDs (which get converted) or\r\n // study objects. The method needs to support both because turning it entirely to studies causes circular references\r\n // which make the game fail to load\r\n attemptBuyArray(studyArray, checkCosts) {\r\n for (const study of studyArray) {\r\n const toBuy = typeof study === \"object\" ? study : TimeStudy(study);\r\n if (this.hasRequirements(toBuy)) this.buySingleStudy(toBuy, checkCosts);\r\n }\r\n }\r\n\r\n // Tries to buy a single study, accounting for all various requirements and locking behavior in the game. Does not\r\n // update anything cost-related, use buySingleStudy() to actually purchase. checkOnlyStructure is used to ignore\r\n // EC secondary requirements\r\n hasRequirements(study, checkOnlyStructure = false) {\r\n // Import strings can contain repeated or undefined entries\r\n if (!study || this.purchasedStudies.includes(study)) return false;\r\n\r\n // Because the player data may not reflect the state of the TimeStudyTree object's purchasedStudies,\r\n // we have to do all the checks here with purchasedStudies. study.isBought and similar functions cannot be used.\r\n const check = req => (typeof req === \"number\"\r\n ? this.purchasedStudies.includes(TimeStudy(req))\r\n : req());\r\n const config = study.config;\r\n let reqSatisfied;\r\n switch (config.reqType) {\r\n case TS_REQUIREMENT_TYPE.AT_LEAST_ONE:\r\n reqSatisfied = config.requirement.some(r => check(r));\r\n break;\r\n case TS_REQUIREMENT_TYPE.ALL:\r\n reqSatisfied = config.requirement.every(r => check(r));\r\n break;\r\n case TS_REQUIREMENT_TYPE.DIMENSION_PATH:\r\n reqSatisfied = config.requirement.every(r => check(r)) && this.currDimPathCount < this.allowedDimPathCount;\r\n break;\r\n default:\r\n throw Error(`Unrecognized TS requirement type: ${this.reqType}`);\r\n }\r\n if (study instanceof ECTimeStudyState) {\r\n if (this.purchasedStudies.some(s => s instanceof ECTimeStudyState)) return false;\r\n const hasForbiddenStudies = !Perk.studyECRequirement.isBought &&\r\n study.config.secondary.forbiddenStudies?.some(s => check(s));\r\n // We want to only check the structure for script template error instructions\r\n if (checkOnlyStructure) {\r\n return reqSatisfied && !hasForbiddenStudies;\r\n }\r\n const hasEnoughTT = Currency.timeTheorems.value.subtract(this.spentTheorems[0]).gte(study.cost);\r\n const secondaryGoal = Perk.studyECRequirement.isBought || study.isEntryGoalMet;\r\n return reqSatisfied && !hasForbiddenStudies && (study.isBought || (secondaryGoal && hasEnoughTT));\r\n }\r\n return reqSatisfied;\r\n }\r\n\r\n // Buys the specified study; no requirement verification beyond cost, use hasRequirements() to verify proper structure\r\n buySingleStudy(study, checkCosts) {\r\n const config = study.config;\r\n const stDiscount = VUnlocks.raUnlock.effectOrDefault(0);\r\n const stNeeded = config.STCost && config.requiresST.some(s => this.purchasedStudies.includes(TimeStudy(s)))\r\n ? Math.clampMin(config.STCost - stDiscount, 0)\r\n : 0;\r\n // Took these out of the checkCosts check as these aren't available early game\r\n const maxST = Pelle.isDoomed ? 0 : V.spaceTheorems;\r\n const hasST = this.spentTheorems[1] + stNeeded <= maxST;\r\n if (checkCosts) {\r\n const maxTT = Currency.timeTheorems.value.add(GameCache.currentStudyTree.value.spentTheorems[0])\r\n .clampMax(Number.MAX_VALUE).toNumber();\r\n const hasTT = this.spentTheorems[0] + config.cost <= maxTT;\r\n if (!hasTT || !hasST) return;\r\n }\r\n\r\n // Don't add the costs nor add the study if it is one using ST and there are none\r\n if (maxST === 0 && stNeeded > 0) return;\r\n this.spentTheorems[0] += config.cost;\r\n this.spentTheorems[1] += stNeeded;\r\n\r\n this.purchasedStudies.push(study);\r\n }\r\n\r\n get currDimPathCount() {\r\n return [71, 72, 73].countWhere(x => this.purchasedStudies.includes(TimeStudy(x)));\r\n }\r\n\r\n get allowedDimPathCount() {\r\n if (DilationUpgrade.timeStudySplit.isBought) return 3;\r\n if (this.purchasedStudies.includes(TimeStudy(201))) return 2;\r\n return 1;\r\n }\r\n\r\n get dimensionPaths() {\r\n const pathSet = new Set();\r\n const validPaths = [TIME_STUDY_PATH.ANTIMATTER_DIM, TIME_STUDY_PATH.INFINITY_DIM, TIME_STUDY_PATH.TIME_DIM];\r\n for (const path of validPaths) {\r\n const pathEntry = NormalTimeStudies.pathList.find(p => p.path === path);\r\n for (const study of this.purchasedStudies) {\r\n if (pathEntry.studies.includes(study.id)) {\r\n pathSet.add(pathEntry.name);\r\n break;\r\n }\r\n }\r\n }\r\n return Array.from(pathSet);\r\n }\r\n\r\n get pacePaths() {\r\n const pathSet = new Set();\r\n const validPaths = [TIME_STUDY_PATH.ACTIVE, TIME_STUDY_PATH.PASSIVE, TIME_STUDY_PATH.IDLE];\r\n for (const path of validPaths) {\r\n const pathEntry = NormalTimeStudies.pathList.find(p => p.path === path);\r\n for (const study of this.purchasedStudies) {\r\n if (pathEntry.studies.includes(study.id)) {\r\n pathSet.add(pathEntry.name);\r\n break;\r\n }\r\n }\r\n }\r\n return Array.from(pathSet);\r\n }\r\n\r\n get ec() {\r\n // This technically takes the very first EC entry if there's more than one, but that shouldn't happen in practice\r\n const ecStudies = this.purchasedStudies.find(s => s instanceof ECTimeStudyState);\r\n return ecStudies ? ecStudies.id : 0;\r\n }\r\n\r\n // Creates an export string based on all currently purchased studies; gives an ! at the end if currently in an EC\r\n get exportString() {\r\n return `${this.purchasedStudies\r\n .filter(s => s instanceof NormalTimeStudyState)\r\n .map(s => s.id)\r\n .join(\",\")}|${this.ec}${player.challenge.eternity.current === 0 ? \"\" : \"!\"}`;\r\n }\r\n}\r\n","import { TimeStudy } from \"./normal-time-study\";\r\nimport { TimeStudyState } from \"./time-studies\";\r\n\r\nexport class ECTimeStudyState extends TimeStudyState {\r\n constructor(config) {\r\n super(config, TIME_STUDY_TYPE.ETERNITY_CHALLENGE);\r\n this.invalidateRequirement();\r\n }\r\n\r\n get isBought() {\r\n return player.challenge.eternity.unlocked === this.id;\r\n }\r\n\r\n purchase(auto) {\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return false;\r\n EternityChallenge(this.id).hasUnlocked = true;\r\n const clickTime = Date.now();\r\n\r\n if (this.isBought && player.challenge.eternity.current === 0 && !auto) {\r\n // If it is bought and you aren't in a Eternity Challenge, check\r\n if (clickTime - ui.lastClickTime < 750) {\r\n // If you last clicked on it within 3/4ths of a second, enter them in or ask confirmation if they have that on\r\n ui.lastClickTime = 0;\r\n EternityChallenge(this.id).requestStart();\r\n } else {\r\n // Otherwise, record it for the next time they click\r\n ui.lastClickTime = clickTime;\r\n }\r\n } else if (!this.isBought && this.canBeBought) {\r\n // If you haven't bought it and can buy it, reset the time of click, and\r\n // send you into the EC, deduct your resources, and move you to the EC tab if that isn't disabled\r\n ui.lastClickTime = 0;\r\n\r\n player.challenge.eternity.unlocked = this.id;\r\n if (!auto) {\r\n Tab.challenges.eternity.show();\r\n }\r\n player.challenge.eternity.requirementBits |= 1 << this.id;\r\n Currency.timeTheorems.subtract(this.cost);\r\n TimeStudyTree.commitToGameState([TimeStudy.eternityChallenge(this.id)]);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n purchaseUntil() {\r\n const studiesToBuy = [\r\n undefined,\r\n 171, 171, 171,\r\n 143, 42, 121,\r\n 111, 123, 151,\r\n 181, 181, 181\r\n ];\r\n // If the player shift clicks an EC study that is immediately buyable, we try to\r\n // buy it first - in case buying studies up to that point renders it unaffordable.\r\n this.purchase();\r\n TimeStudyTree.commitToGameState(buyStudiesUntil(studiesToBuy[this.id], this.id));\r\n // For EC 11 and 12, we can't choose between light and dark,\r\n // but we can buy the 191/193\r\n if (this.id === 11) {\r\n TimeStudy(191).purchase();\r\n } else if (this.id === 12) {\r\n TimeStudy(193).purchase();\r\n }\r\n this.purchase();\r\n }\r\n\r\n get canBeBought() {\r\n if (!this.isAffordable) {\r\n return false;\r\n }\r\n if (player.challenge.eternity.unlocked !== 0) {\r\n return false;\r\n }\r\n if (!this.config.requirement.some(s => TimeStudy(s).isBought)) {\r\n return false;\r\n }\r\n return this.allSecondaryRequirementsMet;\r\n }\r\n\r\n /**\r\n * @returns {EternityChallengeState}\r\n */\r\n get challenge() {\r\n return EternityChallenge(this.id);\r\n }\r\n\r\n get requirementTotal() {\r\n return this.config.secondary.required(this.challenge.completions);\r\n }\r\n\r\n get requirementCurrent() {\r\n const current = this.config.secondary.current();\r\n if (this.cachedCurrentRequirement === undefined) {\r\n this.cachedCurrentRequirement = current;\r\n } else if (typeof current === \"number\") {\r\n this.cachedCurrentRequirement = Math.max(this.cachedCurrentRequirement, current);\r\n } else {\r\n this.cachedCurrentRequirement = this.cachedCurrentRequirement.clampMin(current);\r\n }\r\n return this.cachedCurrentRequirement;\r\n }\r\n\r\n get allSecondaryRequirementsMet() {\r\n return Perk.studyECRequirement.isBought || !this.hasForbiddenStudies && this.isEntryGoalMet;\r\n }\r\n\r\n get hasForbiddenStudies() {\r\n return this.config.secondary.forbiddenStudies?.some(s => TimeStudy(s).isBought);\r\n }\r\n\r\n get isEntryGoalMet() {\r\n if (this.wasRequirementPreviouslyMet) return true;\r\n if (this.config.secondary.forbiddenStudies) return true;\r\n const current = this.requirementCurrent;\r\n const total = this.requirementTotal;\r\n return typeof current === \"number\" ? current >= total : current.gte(total);\r\n }\r\n\r\n get wasRequirementPreviouslyMet() {\r\n if (this.id === 11 || this.id === 12) return false;\r\n return (player.challenge.eternity.requirementBits & (1 << this.id)) !== 0;\r\n }\r\n\r\n invalidateRequirement() {\r\n this.cachedCurrentRequirement = undefined;\r\n }\r\n}\r\n\r\nECTimeStudyState.studies = mapGameData(\r\n GameDatabase.eternity.timeStudies.ec,\r\n config => new ECTimeStudyState(config)\r\n);\r\n\r\n/**\r\n * @param {number} id\r\n * @returns {ECTimeStudyState}\r\n */\r\nTimeStudy.eternityChallenge = function(id) {\r\n return ECTimeStudyState.studies[id];\r\n};\r\n\r\n/**\r\n * @returns {ECTimeStudyState|undefined}\r\n */\r\nTimeStudy.eternityChallenge.current = function() {\r\n return player.challenge.eternity.unlocked\r\n ? TimeStudy.eternityChallenge(player.challenge.eternity.unlocked)\r\n : undefined;\r\n};\r\n\r\nECTimeStudyState.invalidateCachedRequirements = function() {\r\n ECTimeStudyState.studies.forEach(study => study.invalidateRequirement());\r\n};\r\n","import { TimeStudy } from \"./normal-time-study\";\r\nimport { TimeStudyState } from \"./time-studies\";\r\n\r\nexport class DilationTimeStudyState extends TimeStudyState {\r\n constructor(config) {\r\n super(config, TIME_STUDY_TYPE.DILATION);\r\n }\r\n\r\n get isBought() {\r\n return player.dilation.studies.includes(this.id);\r\n }\r\n\r\n get canBeBought() {\r\n return this.isAffordable && this.config.requirement();\r\n }\r\n\r\n get description() {\r\n return this.config.description;\r\n }\r\n\r\n get cost() {\r\n return typeof this.config.cost === \"function\" ? this.config.cost() : this.config.cost;\r\n }\r\n\r\n get totalTimeTheoremRequirement() {\r\n return this.id === 1 ? 12900 : 0;\r\n }\r\n\r\n purchase(quiet = false) {\r\n if (this.isBought || !this.canBeBought) return false;\r\n if (this.id === 1) {\r\n // ID 1 is the dilation unlock study\r\n if (!quiet) {\r\n Tab.eternity.dilation.show();\r\n }\r\n if (Perk.autounlockDilation1.canBeApplied) {\r\n for (const id of [4, 5, 6]) player.dilation.upgrades.add(id);\r\n }\r\n if (Perk.autounlockDilation2.canBeApplied) {\r\n for (const id of [7, 8, 9]) player.dilation.upgrades.add(id);\r\n if (MendingMilestone.two.isReached){\r\n player.dilation.upgrades.add(14);\r\n player.dilation.upgrades.add(15);\r\n }\r\n }\r\n if (!Pelle.isDoomed) Currency.tachyonParticles.bumpTo(Perk.startTP.effectOrDefault(0));\r\n if (Ra.unlocks.unlockDilationStartingTP.canBeApplied && !isInCelestialReality() && !Pelle.isDoomed) {\r\n Currency.tachyonParticles.bumpTo(getTP(Ra.unlocks.unlockDilationStartingTP.effectOrDefault(0), false));\r\n }\r\n TabNotification.dilationAfterUnlock.tryTrigger();\r\n }\r\n if (this.id === 6) {\r\n // ID 6 is the reality unlock study\r\n if (!PlayerProgress.realityUnlocked()) {\r\n Modal.message.show(`Reality Machine gain for your first Reality is reduced above ${format(\"1e6000\")} Eternity\r\n Points and capped at ${format(\"1e8000\")} Eternity Points. This is due to balance changes made in the Reality\r\n update which affect the difficulty of reaching those amounts, such as the increased Time Dimension cost\r\n scaling above ${format(\"1e6000\")}.`, {}, 3);\r\n EventHub.dispatch(GAME_EVENT.REALITY_FIRST_UNLOCKED);\r\n }\r\n if (!Perk.autounlockReality.isBought) Tab.reality.glyphs.show();\r\n }\r\n\r\n player.dilation.studies.push(this.id);\r\n Currency.timeTheorems.subtract(this.cost);\r\n return true;\r\n }\r\n}\r\n\r\nDilationTimeStudyState.studies = mapGameData(\r\n GameDatabase.eternity.timeStudies.dilation,\r\n config => new DilationTimeStudyState(config)\r\n);\r\n\r\n/**\r\n * @type {DilationTimeStudyState}\r\n */\r\nTimeStudy.dilation = DilationTimeStudyState.studies[1];\r\n\r\n/**\r\n * @param {number} tier\r\n * @returns {DilationTimeStudyState}\r\n */\r\nTimeStudy.timeDimension = function(tier) {\r\n return DilationTimeStudyState.studies[tier - 3];\r\n};\r\n\r\n/**\r\n * @type {DilationTimeStudyState}\r\n */\r\nTimeStudy.reality = DilationTimeStudyState.studies[6];\r\n\r\nTimeStudy.boughtDilationTS = function() {\r\n return player.dilation.studies.map(id => DilationTimeStudyState.studies[id]);\r\n};\r\n","import { TimeStudy } from \"./normal-time-study\";\r\nimport { Ra } from \"../globals\";\r\n\r\nexport class TimeStudyConnection {\r\n constructor(from, to, override) {\r\n this._from = from;\r\n this._to = to;\r\n this._override = override;\r\n }\r\n\r\n get from() {\r\n return this._from;\r\n }\r\n\r\n get to() {\r\n return this._to;\r\n }\r\n\r\n get isOverridden() {\r\n return this._override !== undefined && this._override();\r\n }\r\n\r\n get isSatisfied() {\r\n return this.isOverridden || this._from.isBought;\r\n }\r\n}\r\n\r\n/**\r\n * @type {TimeStudyConnection[]}\r\n */\r\nTimeStudy.allConnections = (function() {\r\n const TS = id => TimeStudy(id);\r\n const EC = id => TimeStudy.eternityChallenge(id);\r\n const connections = [\r\n [TS(11), TS(21)],\r\n [TS(11), TS(22)],\r\n\r\n [TS(21), TS(31)],\r\n [TS(22), TS(33)],\r\n [TS(22), TS(32)],\r\n\r\n [TS(31), TS(41)],\r\n [TS(32), TS(42)],\r\n\r\n [TS(41), TS(51)],\r\n [TS(42), TS(51)],\r\n [TS(42), EC(5)],\r\n\r\n [TS(42), TS(62), () => !Perk.bypassEC5Lock.isBought],\r\n\r\n [TS(51), TS(61)],\r\n [EC(5), TS(62), () => Perk.bypassEC5Lock.isBought],\r\n\r\n [TS(61), TS(71)],\r\n [TS(61), TS(72)],\r\n [TS(61), TS(73)],\r\n\r\n [TS(71), TS(81)],\r\n [TS(72), TS(82)],\r\n [TS(73), TS(83)],\r\n\r\n [TS(81), TS(91)],\r\n [TS(82), TS(92)],\r\n [TS(83), TS(93)],\r\n\r\n [TS(91), TS(101)],\r\n [TS(92), TS(102)],\r\n [TS(93), TS(103)],\r\n\r\n [TS(101), TS(111)],\r\n [TS(102), TS(111)],\r\n [TS(103), TS(111)],\r\n\r\n [TS(111), EC(7)],\r\n\r\n [TS(111), TS(121)],\r\n [TS(111), TS(122)],\r\n [TS(111), TS(123)],\r\n\r\n [TS(121), TS(131)],\r\n [TS(122), TS(132)],\r\n [TS(123), TS(133)],\r\n [TS(121), EC(6)],\r\n [TS(123), EC(8)],\r\n\r\n [TS(131), TS(141)],\r\n [TS(132), TS(142)],\r\n [TS(133), TS(143)],\r\n\r\n [TS(141), TS(151)],\r\n [TS(142), TS(151)],\r\n [TS(143), TS(151)],\r\n [TS(143), EC(4)],\r\n\r\n [TS(151), EC(9)],\r\n\r\n [TS(151), TS(161)],\r\n [TS(151), TS(162)],\r\n\r\n [TS(161), TS(171)],\r\n [TS(162), TS(171)],\r\n\r\n [TS(171), EC(1)],\r\n [TS(171), EC(2)],\r\n [TS(171), EC(3)],\r\n\r\n [TS(171), TS(181),\r\n () => !Perk.bypassEC1Lock.isBought || !Perk.bypassEC2Lock.isBought || !Perk.bypassEC3Lock.isBought],\r\n\r\n [EC(1), TS(181), () => Perk.bypassEC1Lock.isBought],\r\n [EC(2), TS(181), () => Perk.bypassEC2Lock.isBought],\r\n [EC(3), TS(181), () => Perk.bypassEC3Lock.isBought],\r\n\r\n [TS(181), EC(10)],\r\n\r\n [EC(10), TS(191)],\r\n [EC(10), TS(192)],\r\n [EC(10), TS(193)],\r\n\r\n [TS(192), TS(201)],\r\n\r\n [TS(191), TS(211)],\r\n [TS(191), TS(212)],\r\n [TS(193), TS(213)],\r\n [TS(193), TS(214)],\r\n\r\n [TS(211), TS(221)],\r\n [TS(211), TS(222)],\r\n [TS(212), TS(223)],\r\n [TS(212), TS(224)],\r\n [TS(213), TS(225)],\r\n [TS(213), TS(226)],\r\n [TS(214), TS(227)],\r\n [TS(214), TS(228)],\r\n\r\n [TS(221), TS(231)],\r\n [TS(222), TS(231)],\r\n [TS(223), TS(232)],\r\n [TS(224), TS(232)],\r\n [TS(225), TS(233)],\r\n [TS(226), TS(233)],\r\n [TS(227), TS(234)],\r\n [TS(228), TS(234)],\r\n\r\n [TS(231), EC(11)],\r\n [TS(232), EC(11)],\r\n [TS(233), EC(12)],\r\n [TS(234), EC(12)],\r\n\r\n [EC(11), TimeStudy.dilation],\r\n [EC(12), TimeStudy.dilation],\r\n\r\n [TS(21), TS(305), () => Ra.unlocks.unlockHardV >= 5],\r\n [TS(41), TS(306), () => Ra.unlocks.unlockHardV >= 6],\r\n [TS(101), TS(311), () => Ra.unlocks.unlockHardV >= 7],\r\n [TS(102), TS(312), () => Ra.unlocks.unlockHardV >= 8],\r\n [TS(103), TS(313), () => Ra.unlocks.unlockHardV >= 9],\r\n [TS(111), TS(307), () => Ra.unlocks.unlockHardV >= 10],\r\n [TS(141), TS(321), () => Ra.unlocks.unlockHardV >= 11],\r\n [TS(142), TS(322), () => Ra.unlocks.unlockHardV >= 12],\r\n [TS(143), TS(323), () => Ra.unlocks.unlockHardV >= 13],\r\n [TS(151), TS(308), () => Ra.unlocks.unlockHardV >= 14],\r\n [TS(171), TS(309), () => Ra.unlocks.unlockHardV >= 15],\r\n [TS(192), TS(310), () => Ra.unlocks.unlockHardV >= 16],\r\n\r\n [TimeStudy.dilation, TimeStudy.timeDimension(5)],\r\n [TimeStudy.timeDimension(5), TimeStudy.timeDimension(6)],\r\n [TimeStudy.timeDimension(6), TimeStudy.timeDimension(7)],\r\n [TimeStudy.timeDimension(7), TimeStudy.timeDimension(8)],\r\n [TimeStudy.timeDimension(8), TimeStudy.reality],\r\n [TimeStudy.reality, TS(401)],\r\n [TimeStudy.reality, TS(402)],\r\n [TimeStudy.reality, TS(403)],\r\n [TS(401), TS(411)], \r\n [TS(402), TS(412)],\r\n [TS(403), TS(413)]\r\n ].map(props => new TimeStudyConnection(props[0], props[1], props[2]));\r\n\r\n return connections;\r\n}());\r\n","import { DC } from \"./constants\";\r\nimport { CorruptionUpgrade } from \"./corruption-upgrades\";\r\n\r\nexport class Sacrifice {\r\n // This is tied to the \"buying an 8th dimension\" achievement in order to hide it from new players before they reach\r\n // sacrifice for the first time.\r\n static get isVisible() {\r\n return Achievement(18).isUnlocked || PlayerProgress.realityUnlocked();\r\n }\r\n\r\n static get canSacrifice() {\r\n return DimBoost.purchasedBoosts > 4 && !EternityChallenge(3).isRunning && this.nextBoost.gt(1) &&\r\n AntimatterDimension(8).totalAmount.gt(0) &&\r\n !Enslaved.isRunning;\r\n }\r\n\r\n static get disabledCondition() {\r\n if (NormalChallenge(10).isRunning) return \"8th Dimensions are disabled\";\r\n if (EternityChallenge(3).isRunning) return \"Eternity Challenge 3\";\r\n if (DimBoost.purchasedBoosts < 5) return `Requires ${formatInt(5)} Dimension Boosts`;\r\n if (AntimatterDimension(8).totalAmount.eq(0)) return \"No 8th Antimatter Dimensions\";\r\n if (this.nextBoost.lte(1)) return `${formatX(1)} multiplier`;\r\n if (Player.isInAntimatterChallenge) return \"Challenge goal reached\";\r\n return \"Need to Crunch\";\r\n }\r\n\r\n static getSacrificeDescription(changes) {\r\n const f = (name, condition) => (name in changes ? changes[name] : condition);\r\n let factor = 2;\r\n let places = 1;\r\n let base = `(log₁₀(AD1)/${formatInt(10)})`;\r\n if (f(\"Challenge8isRunning\", NormalChallenge(8).isRunning)) {\r\n factor = 1;\r\n base = \"x\";\r\n } else if (f(\"InfinityChallenge2isCompleted\", InfinityChallenge(2).isCompleted)) {\r\n factor = 1 / 120;\r\n places = 3;\r\n base = \"AD1\";\r\n }\r\n\r\n const exponent = (1 +\r\n (f(\"Achievement32\", Achievement(32).isEffectActive) ? Achievement(32).config.effect : 0) +\r\n (f(\"Achievement57\", Achievement(57).isEffectActive) ? Achievement(57).config.effect : 0)\r\n ) * (1 +\r\n (f(\"Achievement88\", Achievement(88).isEffectActive) ? Achievement(88).config.effect : 0) +\r\n (f(\"TimeStudy228\", TimeStudy(228).isEffectActive) ? TimeStudy(228).config.effect : 0)\r\n ) * factor;\r\n return base + (exponent === 1 ? \"\" : formatPow(exponent, places, places));\r\n }\r\n\r\n // The code path for calculating the sacrifice exponent is pretty convoluted, but needs to be structured this way\r\n // in order to mostly replicate old pre-Reality behavior. There are two key things to note in how sacrifice behaves\r\n // which are not immediately apparent here; IC2 changes the formula by getting rid of a log10 (and therefore makes\r\n // sacrifice significantly stronger despite the much smaller exponent) and pre-Reality behavior assumed that the\r\n // player would already have ach32/57 by the time they complete IC2. As Reality resets achievements, we had to\r\n // assume that all things boosting sacrifice can be gotten independently, which resulted in some odd effect stacking.\r\n static get sacrificeExponent() {\r\n let base;\r\n // C8 seems weaker, but it actually follows its own formula which ends up being stronger based on how it stacks\r\n if (NormalChallenge(8).isRunning) base = 1;\r\n // Pre-Reality this was 100; having ach32/57 results in 1.2x, which is brought back in line by changing to 120\r\n else if (InfinityChallenge(2).isCompleted) base = 1 / 120;\r\n else base = 2;\r\n\r\n // All the factors which go into the multiplier have to combine this way in order to replicate legacy behavior\r\n const preIC2 = 1 + Effects.sum(Achievement(32), Achievement(57));\r\n const postIC2 = 1 + Effects.sum(Achievement(88), TimeStudy(228));\r\n const triad = TimeStudy(304).effectOrDefault(1);\r\n const effarig65 = Ra.unlocks.relicShardBoost.isUnlocked ? 1 + (Decimal.log10(Currency.relicShards.value) / 1000) : 1 ;\r\n let baseAnswer = base * preIC2 * postIC2 * triad * effarig65;\r\n\r\n //corruption 10\r\n const corrupt = CorruptionUpgrade(10).effectOrDefault(1);\r\n return baseAnswer**corrupt;\r\n }\r\n\r\n static get nextBoost() {\r\n const nd1Amount = AntimatterDimension(1).amount;\r\n if (nd1Amount.eq(0)) return DC.D1;\r\n const sacrificed = player.sacrificed.clampMin(1);\r\n let prePowerSacrificeMult;\r\n // Pre-reality update C8 works really weirdly - every sacrifice, the current sacrifice multiplier gets applied to\r\n // ND8, then sacrificed amount is updated, and then the updated sacrifice multiplier then gets applied to a\r\n // different variable that is only applied during C8. However since sacrifice only depends on sacrificed ND1, this\r\n // can actually be done in a single calculation in order to handle C8 in a less hacky way.\r\n if (NormalChallenge(8).isRunning) {\r\n prePowerSacrificeMult = nd1Amount.pow(0.05).dividedBy(sacrificed.pow(0.04)).clampMin(1)\r\n .times(nd1Amount.pow(0.05).dividedBy(sacrificed.plus(nd1Amount).pow(0.04)));\r\n } else if (InfinityChallenge(2).isCompleted) {\r\n prePowerSacrificeMult = nd1Amount.dividedBy(sacrificed);\r\n } else {\r\n prePowerSacrificeMult = new Decimal((nd1Amount.log10() / 10) / Math.max(sacrificed.log10() / 10, 1));\r\n }\r\n\r\n return prePowerSacrificeMult.clampMin(1).pow(this.sacrificeExponent);\r\n }\r\n\r\n static get totalBoost() {\r\n if (player.sacrificed.eq(0)) return DC.D1;\r\n // C8 uses a variable that keeps track of a sacrifice boost that persists across sacrifice-resets and isn't\r\n // used anywhere else, which also naturally takes account of the exponent from achievements and time studies.\r\n if (NormalChallenge(8).isRunning) {\r\n return player.chall8TotalSacrifice;\r\n }\r\n\r\n let prePowerBoost;\r\n\r\n if (InfinityChallenge(2).isCompleted) {\r\n prePowerBoost = player.sacrificed;\r\n } else {\r\n prePowerBoost = new Decimal(player.sacrificed.log10() / 10);\r\n }\r\n\r\n return prePowerBoost.clampMin(1).pow(this.sacrificeExponent);\r\n }\r\n}\r\n\r\nexport function sacrificeReset() {\r\n if (!Sacrifice.canSacrifice) return false;\r\n if ((!player.break || (!InfinityChallenge.isRunning && NormalChallenge.isRunning)) &&\r\n Currency.antimatter.gt(Decimal.NUMBER_MAX_VALUE)) return false;\r\n if (\r\n NormalChallenge(8).isRunning &&\r\n (Sacrifice.totalBoost.gte(Decimal.NUMBER_MAX_VALUE))\r\n ) {\r\n return false;\r\n }\r\n EventHub.dispatch(GAME_EVENT.SACRIFICE_RESET_BEFORE);\r\n const nextBoost = Sacrifice.nextBoost;\r\n player.chall8TotalSacrifice = player.chall8TotalSacrifice.times(nextBoost);\r\n player.sacrificed = player.sacrificed.plus(AntimatterDimension(1).amount);\r\n const isAch118Unlocked = Achievement(118).canBeApplied;\r\n if (NormalChallenge(8).isRunning) {\r\n if (!isAch118Unlocked) {\r\n AntimatterDimensions.reset();\r\n }\r\n Currency.antimatter.reset();\r\n } else if (!isAch118Unlocked) {\r\n AntimatterDimensions.resetAmountUpToTier(NormalChallenge(12).isRunning ? 6 : 7);\r\n }\r\n player.requirementChecks.infinity.noSacrifice = false;\r\n EventHub.dispatch(GAME_EVENT.SACRIFICE_RESET_AFTER);\r\n return true;\r\n}\r\n\r\nexport function sacrificeBtnClick() {\r\n if (!Sacrifice.isVisible || !Sacrifice.canSacrifice) return;\r\n if (player.options.confirmations.sacrifice) {\r\n Modal.sacrifice.show();\r\n } else {\r\n sacrificeReset();\r\n }\r\n}\r\n","import { DC } from \"./constants\";\r\nimport FullScreenAnimationHandler from \"./full-screen-animation-handler\";\r\n\r\nexport function bigCrunchAnimation() {\r\n FullScreenAnimationHandler.display(\"a-implode\", 2);\r\n}\r\n\r\nfunction handleChallengeCompletion() {\r\n const challenge = Player.antimatterChallenge;\r\n if (!challenge && !NormalChallenge(1).isCompleted) {\r\n NormalChallenge(1).complete();\r\n }\r\n if (!challenge) return;\r\n\r\n // Clear the IC notification after the first completion (only) so that it can show it again for the next one\r\n const inIC = InfinityChallenge.isRunning;\r\n if (inIC && !InfinityChallenge.current.isCompleted) TabNotification.ICUnlock.clearTrigger();\r\n\r\n challenge.complete();\r\n challenge.updateChallengeTime();\r\n if (!player.options.retryChallenge) {\r\n player.challenge.normal.current = 0;\r\n player.challenge.infinity.current = 0;\r\n }\r\n}\r\n\r\nexport function manualBigCrunchResetRequest() {\r\n if (!Player.canCrunch) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n // We show the modal under two conditions - on the first ever infinity (to explain the mechanic) and\r\n // post-break (to show total IP and infinities gained)\r\n if (player.options.confirmations.bigCrunch && (!PlayerProgress.infinityUnlocked() || player.break)) {\r\n Modal.bigCrunch.show();\r\n } else {\r\n bigCrunchResetRequest();\r\n }\r\n}\r\n\r\nexport function bigCrunchResetRequest(disableAnimation = false) {\r\n if (!Player.canCrunch) return;\r\n if (!disableAnimation && player.options.animations.bigCrunch && !FullScreenAnimationHandler.isDisplaying) {\r\n bigCrunchAnimation();\r\n setTimeout(bigCrunchReset, 1000);\r\n } else {\r\n bigCrunchReset();\r\n }\r\n}\r\n\r\nexport function bigCrunchReset(\r\n forced = false,\r\n enteringAntimatterChallenge = Player.isInAntimatterChallenge && player.options.retryChallenge\r\n) {\r\n if (!forced && !Player.canCrunch) return;\r\n\r\n if (Player.canCrunch) {\r\n EventHub.dispatch(GAME_EVENT.BIG_CRUNCH_BEFORE);\r\n bigCrunchGiveRewards();\r\n if (Pelle.isDoomed) PelleStrikes.infinity.trigger();\r\n }\r\n\r\n bigCrunchResetValues(enteringAntimatterChallenge);\r\n EventHub.dispatch(GAME_EVENT.BIG_CRUNCH_AFTER);\r\n}\r\n\r\nfunction bigCrunchGiveRewards() {\r\n bigCrunchUpdateStatistics();\r\n\r\n const infinityPoints = gainedInfinityPoints();\r\n Currency.infinityPoints.add(infinityPoints);\r\n Currency.infinities.add(gainedInfinities().round());\r\n\r\n bigCrunchTabChange(!PlayerProgress.infinityUnlocked());\r\n bigCrunchCheckUnlocks();\r\n}\r\n\r\nfunction bigCrunchUpdateStatistics() {\r\n player.records.bestInfinity.bestIPminEternity =\r\n player.records.bestInfinity.bestIPminEternity.clampMin(player.records.thisInfinity.bestIPmin);\r\n player.records.thisInfinity.bestIPmin = DC.D0;\r\n\r\n player.records.thisEternity.bestInfinitiesPerMs = player.records.thisEternity.bestInfinitiesPerMs.clampMin(\r\n gainedInfinities().round().dividedBy(Math.clampMin(33, player.records.thisInfinity.realTime))\r\n );\r\n\r\n const infinityPoints = gainedInfinityPoints();\r\n\r\n addInfinityTime(\r\n player.records.thisInfinity.time,\r\n player.records.thisInfinity.realTime,\r\n infinityPoints,\r\n gainedInfinities().round()\r\n );\r\n\r\n player.records.bestInfinity.time =\r\n Decimal.min(player.records.bestInfinity.time, player.records.thisInfinity.time);\r\n player.records.bestInfinity.realTime =\r\n Math.min(player.records.bestInfinity.realTime, player.records.thisInfinity.realTime);\r\n\r\n player.requirementChecks.reality.noInfinities = false;\r\n\r\n if (!player.requirementChecks.infinity.maxAll) {\r\n const bestIpPerMsWithoutMaxAll = infinityPoints.dividedBy(Decimal.clampMin(33, player.records.thisInfinity.realTime));\r\n player.records.thisEternity.bestIPMsWithoutMaxAll =\r\n Decimal.max(bestIpPerMsWithoutMaxAll, player.records.thisEternity.bestIPMsWithoutMaxAll);\r\n }\r\n}\r\n\r\nfunction bigCrunchTabChange(firstInfinity) {\r\n const earlyGame = player.records.bestInfinity.time.gt(60000) && !player.break;\r\n const inAntimatterChallenge = Player.isInAntimatterChallenge;\r\n handleChallengeCompletion();\r\n\r\n if (firstInfinity) {\r\n Tab.infinity.upgrades.show();\r\n } else if (earlyGame || (inAntimatterChallenge && !player.options.retryChallenge)) {\r\n Tab.dimensions.antimatter.show();\r\n }\r\n}\r\n\r\nexport function bigCrunchResetValues(enteringAntimatterChallenge) {\r\n const currentReplicanti = Replicanti.amount;\r\n const currentReplicantiGalaxies = player.replicanti.galaxies;\r\n // For unknown reasons, everything but keeping of RGs (including resetting of RGs)\r\n // is done in the function called below. For now, we're just trying to keep\r\n // code structure similar to what it was before to avoid new bugs.\r\n secondSoftReset(enteringAntimatterChallenge);\r\n\r\n let remainingGalaxies = 0;\r\n if (Achievement(95).isUnlocked && !Pelle.isDoomed) {\r\n Replicanti.amount = currentReplicanti;\r\n remainingGalaxies += Math.min(currentReplicantiGalaxies, 1);\r\n }\r\n if (TimeStudy(33).isBought && !Pelle.isDoomed) {\r\n remainingGalaxies += Math.floor(currentReplicantiGalaxies / 2);\r\n }\r\n\r\n if (PelleUpgrade.replicantiGalaxyNoReset.canBeApplied) {\r\n remainingGalaxies = currentReplicantiGalaxies;\r\n }\r\n // I don't think this Math.clampMax is technically needed, but if we add another source\r\n // of keeping Replicanti Galaxies then it might be.\r\n player.replicanti.galaxies = Math.min(Math.clampMax(remainingGalaxies, currentReplicantiGalaxies), 250000);\r\n}\r\n\r\nfunction bigCrunchCheckUnlocks() {\r\n if (EternityChallenge(4).tryFail()) return;\r\n\r\n if (Effarig.isRunning && !EffarigUnlock.infinity.isUnlocked) {\r\n EffarigUnlock.infinity.unlock();\r\n beginProcessReality(getRealityProps(true));\r\n }\r\n}\r\n\r\nexport function secondSoftReset(enteringAntimatterChallenge) {\r\n player.dimensionBoosts = 0;\r\n player.galaxies = 0;\r\n player.records.thisInfinity.maxAM = DC.D0;\r\n Currency.antimatter.reset();\r\n softReset(0, true, true, enteringAntimatterChallenge);\r\n InfinityDimensions.resetAmount();\r\n if (player.replicanti.unl) Replicanti.amount = DC.D1;\r\n player.replicanti.galaxies = 0;\r\n player.records.thisInfinity.time = DC.D0;\r\n player.records.thisInfinity.lastBuyTime = DC.D0;\r\n player.records.thisInfinity.realTime = 0;\r\n Player.resetRequirements(\"infinity\");\r\n AchievementTimers.marathon2.reset();\r\n}\r\n\r\nexport function preProductionGenerateIP(diff) {\r\n if (InfinityUpgrade.ipGen.isBought) {\r\n const genPeriod = Time.bestInfinity.totalMilliseconds.times(10);\r\n let genCount;\r\n diff = new Decimal(diff)\r\n if (diff.gt(new Decimal(1e300).times(genPeriod))) {\r\n genCount = Decimal.div(diff, genPeriod);\r\n } else {\r\n // Partial progress (fractions from 0 to 1) are stored in player.partInfinityPoint\r\n player.partInfinityPoint += new Decimal(diff).div(genPeriod).toNumber();\r\n genCount = Math.floor(player.partInfinityPoint);\r\n player.partInfinityPoint -= genCount;\r\n }\r\n let gainedPerGen = player.records.bestInfinity.time.gt(Decimal.pow10(1e100)) ? DC.D0 : InfinityUpgrade.ipGen.effectValue;\r\n if (Laitela.isRunning) gainedPerGen = dilatedValueOf(gainedPerGen);\r\n const gainedThisTick = new Decimal(genCount).times(gainedPerGen);\r\n Currency.infinityPoints.add(gainedThisTick);\r\n }\r\n Currency.infinityPoints.add(BreakInfinityUpgrade.ipGen.effectOrDefault(DC.D0).times(new Decimal(diff).div(60000)));\r\n}\r\n","import { GameMechanicState, SetPurchasableMechanicState } from \"./game-mechanics\";\r\nimport { DC } from \"./constants\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nclass ChargedInfinityUpgradeState extends GameMechanicState {\r\n constructor(config, upgrade) {\r\n super(config);\r\n this._upgrade = upgrade;\r\n }\r\n\r\n get isEffectActive() {\r\n return this._upgrade.isBought && this._upgrade.isCharged;\r\n }\r\n}\r\n\r\nexport class InfinityUpgradeState extends SetPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n if (config.charged) {\r\n this._chargedEffect = new ChargedInfinityUpgradeState(config.charged, this);\r\n }\r\n }\r\n\r\n get currency() {\r\n return Currency.infinityPoints;\r\n }\r\n\r\n get set() {\r\n return player.infinityUpgrades;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return this.config.checkRequirement?.() ?? true;\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isBought && !this.isCharged;\r\n }\r\n\r\n get chargedEffect() {\r\n return this._chargedEffect;\r\n }\r\n\r\n purchase() {\r\n if (super.purchase()) {\r\n // This applies the 4th column of infinity upgrades retroactively\r\n if (this.config.id.includes(\"skip\")) skipResetsIfPossible();\r\n EventHub.dispatch(GAME_EVENT.INFINITY_UPGRADE_BOUGHT);\r\n return true;\r\n }\r\n if (this.canCharge) {\r\n this.charge();\r\n EventHub.dispatch(GAME_EVENT.INFINITY_UPGRADE_CHARGED);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n get hasChargeEffect() {\r\n return this.config.charged !== undefined;\r\n }\r\n\r\n get isCharged() {\r\n return player.celestials.ra.charged.has(this.id);\r\n }\r\n\r\n get canCharge() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.soF.hiddenEight[player.mending.corruption[9]]) return false;\r\n return this.isBought &&\r\n this.hasChargeEffect &&\r\n !this.isCharged &&\r\n Ra.chargesLeft !== 0 &&\r\n !Pelle.isDisabled(\"chargedInfinityUpgrades\");\r\n }\r\n\r\n charge() {\r\n player.celestials.ra.charged.add(this.id);\r\n }\r\n\r\n disCharge() {\r\n player.celestials.ra.charged.delete(this.id);\r\n }\r\n}\r\n\r\nexport function totalIPMult() {\r\n if (Effarig.isRunning && Effarig.currentStage === EFFARIG_STAGES.INFINITY) {\r\n return DC.D1;\r\n }\r\n let ipMult = DC.D1\r\n .timesEffectsOf(\r\n TimeStudy(41),\r\n TimeStudy(51),\r\n TimeStudy(141),\r\n TimeStudy(142),\r\n TimeStudy(143),\r\n TimeStudy(305),\r\n Achievement(85),\r\n Achievement(93),\r\n Achievement(116),\r\n Achievement(125),\r\n Achievement(141).effects.ipGain,\r\n InfinityUpgrade.ipMult,\r\n DilationUpgrade.ipMultDT,\r\n GlyphEffect.ipMult\r\n );\r\n ipMult = ipMult.times(Replicanti.amount.powEffectOf(AlchemyResource.exponential));\r\n return ipMult;\r\n}\r\n\r\nexport function disChargeAll() {\r\n const upgrades = [\r\n InfinityUpgrade.totalTimeMult,\r\n InfinityUpgrade.dim18mult,\r\n InfinityUpgrade.dim36mult,\r\n InfinityUpgrade.resetBoost,\r\n InfinityUpgrade.buy10Mult,\r\n InfinityUpgrade.dim27mult,\r\n InfinityUpgrade.dim45mult,\r\n InfinityUpgrade.galaxyBoost,\r\n InfinityUpgrade.thisInfinityTimeMult,\r\n InfinityUpgrade.unspentIPMult,\r\n InfinityUpgrade.dimboostMult,\r\n InfinityUpgrade.ipGen\r\n ];\r\n for (const upgrade of upgrades) {\r\n if (upgrade.isCharged) {\r\n upgrade.disCharge();\r\n }\r\n }\r\n player.celestials.ra.disCharge = false;\r\n EventHub.dispatch(GAME_EVENT.INFINITY_UPGRADES_DISCHARGED);\r\n}\r\n\r\n// The repeatable 2xIP upgrade has an odd cost structure - it follows a shallow exponential (step *10) up to e3M, at\r\n// which point it follows a steeper one (step *1e10) up to e6M before finally hardcapping. At the hardcap, there's\r\n// an extra bump that increases the multipler itself from e993k to e1M. All these numbers are specified in\r\n// GameDatabase.infinity.upgrades.ipMult\r\nclass InfinityIPMultUpgrade extends GameMechanicState {\r\n get cost() {\r\n if (this.purchaseCount >= this.purchasesAtIncrease) {\r\n return this.config.costIncreaseThreshold\r\n .times(Decimal.pow(this.costIncrease, this.purchaseCount - this.purchasesAtIncrease));\r\n }\r\n return Decimal.pow(this.costIncrease, this.purchaseCount + 1);\r\n }\r\n\r\n get purchaseCount() {\r\n return player.IPMultPurchases;\r\n }\r\n\r\n get purchasesAtIncrease() {\r\n return this.config.costIncreaseThreshold.log10() - 1;\r\n }\r\n\r\n get hasIncreasedCost() {\r\n return this.purchaseCount >= this.purchasesAtIncrease;\r\n }\r\n\r\n get costIncrease() {\r\n return this.hasIncreasedCost ? 1e10 : 10;\r\n }\r\n\r\n get isCapped() {\r\n return this.cost.gte(this.config.costCap);\r\n }\r\n\r\n get isBought() {\r\n return this.isCapped;\r\n }\r\n\r\n get isRequirementSatisfied() {\r\n return Achievement(41).isUnlocked;\r\n }\r\n\r\n get canBeBought() {\r\n if(Pelle.isDoomed && Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked && this.id == \"ipMult\" && Currency.infinityPoints.gte(this.cost)) return true;\r\n return !Pelle.isDoomed && !this.isCapped && Currency.infinityPoints.gte(this.cost) && this.isRequirementSatisfied;\r\n }\r\n\r\n // This is only ever called with amount = 1 or within buyMax under conditions that ensure the scaling doesn't\r\n // change mid-purchase\r\n purchase(amount = 1) {\r\n if (!this.canBeBought) return;\r\n if (!TimeStudy(181).isBought) {\r\n Autobuyer.bigCrunch.bumpAmount(DC.D2.pow(amount));\r\n }\r\n Currency.infinityPoints.subtract(Decimal.sumGeometricSeries(amount, this.cost, this.costIncrease, 0));\r\n player.IPMultPurchases += amount;\r\n GameUI.update();\r\n }\r\n\r\n buyMax() {\r\n if (!this.canBeBought) return;\r\n if (!this.hasIncreasedCost) {\r\n // Only allow IP below the softcap to be used\r\n const availableIP = Currency.infinityPoints.value.clampMax(this.config.costIncreaseThreshold);\r\n const purchases = Decimal.affordGeometricSeries(availableIP, this.cost, this.costIncrease, 0).toNumber();\r\n if (purchases <= 0) return;\r\n this.purchase(purchases);\r\n }\r\n // Do not replace it with `if else` - it's specifically designed to process two sides of threshold separately\r\n // (for example, we have 1e4000000 IP and no mult - first it will go to (but not including) 1e3000000 and then\r\n // it will go in this part)\r\n if (this.hasIncreasedCost) {\r\n const availableIP = Currency.infinityPoints.value.clampMax(this.config.costCap);\r\n const purchases = Decimal.affordGeometricSeries(availableIP, this.cost, this.costIncrease, 0).toNumber();\r\n if (purchases <= 0) return;\r\n this.purchase(purchases);\r\n }\r\n }\r\n}\r\n\r\nexport const InfinityUpgrade = mapGameDataToObject(\r\n GameDatabase.infinity.upgrades,\r\n config => (config.id === \"ipMult\"\r\n ? new InfinityIPMultUpgrade(config)\r\n : new InfinityUpgradeState(config))\r\n);\r\n","import { GameMechanicState, RebuyableMechanicState, SetPurchasableMechanicState } from \"./game-mechanics\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\nimport { SpeedrunMilestones } from \"./speedrun\";\r\n\r\nclass ChargedBreakInfinityUpgradeState extends GameMechanicState {\r\n constructor(config, upgrade) {\r\n super(config);\r\n this._upgrade = upgrade;\r\n }\r\n\r\n get isEffectActive() {\r\n return this._upgrade.isBought && this._upgrade.isCharged;\r\n }\r\n}\r\n\r\nexport class BreakInfinityUpgradeState extends SetPurchasableMechanicState {\r\n constructor(config){\r\n super(config);\r\n if (config.charged) {\r\n this._chargedEffect = new ChargedBreakInfinityUpgradeState(config.charged, this);\r\n }\r\n }\r\n\r\n get currency() {\r\n return Currency.infinityPoints;\r\n }\r\n\r\n get set() {\r\n return player.infinityUpgrades;\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isBought && !this.isCharged;\r\n }\r\n\r\n get chargedEffect() {\r\n return this._chargedEffect;\r\n }\r\n\r\n onPurchased() {\r\n if (this.id === \"postGalaxy\") {\r\n SpeedrunMilestones(7).tryComplete();\r\n PelleStrikes.powerGalaxies.trigger();\r\n }\r\n }\r\n\r\n purchase() {\r\n if (super.purchase()) {\r\n EventHub.dispatch(GAME_EVENT.BREAK_INFINITY_UPGRADE_BOUGHT);\r\n return true;\r\n }\r\n if (this.canCharge) {\r\n this.charge();\r\n EventHub.dispatch(GAME_EVENT.BREAK_INFINITY_UPGRADE_CHARGED);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n get hasChargeEffect() {\r\n return this.config.charged !== undefined;\r\n }\r\n\r\n get isCharged() {\r\n return player.celestials.ra.breakCharged.has(this.id);\r\n }\r\n\r\n get canCharge() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.soF.hiddenEight[player.mending.corruption[9]]) return false;\r\n return this.isBought &&\r\n this.hasChargeEffect &&\r\n !this.isCharged &&\r\n Ra.breakChargesLeft !== 0 &&\r\n !Pelle.isDisabled(\"chargedBreakInfinityUpgrades\");\r\n }\r\n\r\n charge() {\r\n player.celestials.ra.breakCharged.add(this.id);\r\n }\r\n\r\n disCharge() {\r\n player.celestials.ra.breakCharged.delete(this.id);\r\n }\r\n}\r\n\r\nexport function disChargeAllBreak(){\r\n const upgrades = [\r\n BreakInfinityUpgrade.totalAMMult,\r\n BreakInfinityUpgrade.currentAMMult,\r\n BreakInfinityUpgrade.galaxyBoost,\r\n BreakInfinityUpgrade.infinitiedMult,\r\n BreakInfinityUpgrade.achievementMult,\r\n BreakInfinityUpgrade.slowestChallengeMult,\r\n BreakInfinityUpgrade.infinitiedGen,\r\n BreakInfinityUpgrade.autobuyMaxDimboosts,\r\n BreakInfinityUpgrade.autobuyerSpeed\r\n ];\r\n\r\n for(const upgrade of upgrades){\r\n if(upgrade.isCharged){\r\n upgrade.disCharge();\r\n }\r\n }\r\n\r\n player.celestials.ra.breakDischarge = false;\r\n EventHub.dispatch(GAME_EVENT.BREAK_INFINITY_UPGRADES_DISCHARGED);\r\n}\r\n\r\nclass RebuyableBreakInfinityUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.infinityPoints;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.infinityRebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.infinityRebuyables[this.id] = value;\r\n }\r\n\r\n get isCapped() {\r\n return this.boughtAmount === this.config.maxUpgrades;\r\n }\r\n\r\n onPurchased() {\r\n this.config.onPurchased?.();\r\n }\r\n}\r\n\r\nexport const BreakInfinityUpgrade = mapGameDataToObject(\r\n GameDatabase.infinity.breakUpgrades,\r\n config => (config.rebuyable\r\n ? new RebuyableBreakInfinityUpgradeState(config)\r\n : new BreakInfinityUpgradeState(config))\r\n);\r\n","import { DC } from \"./constants\";\r\nimport { GameMechanicState } from \"./game-mechanics\";\r\n\r\nexport function updateNormalAndInfinityChallenges(diff) {\r\n if (NormalChallenge(11).isRunning || InfinityChallenge(6).isRunning) {\r\n if (AntimatterDimension(2).amount.neq(0)) {\r\n Currency.matter.bumpTo(1);\r\n // These caps are values which occur at approximately e308 IP\r\n const cappedBase = 1.03 + Math.clampMax(DimBoost.totalBoosts, 400) / 200 +\r\n Math.clampMax(player.galaxies, 100) / 100;\r\n Currency.matter.multiply(Decimal.pow(cappedBase, diff.div(20)));\r\n }\r\n if (Currency.matter.gt(Currency.antimatter.value) && NormalChallenge(11).isRunning && !Player.canCrunch) {\r\n const values = [Currency.antimatter.value, Currency.matter.value];\r\n softReset(0, true, true);\r\n Modal.message.show(`Your ${format(values[0], 2, 2)} antimatter was annihilated\r\n by ${format(values[1], 2, 2)} matter.`, { closeEvent: GAME_EVENT.BIG_CRUNCH_AFTER }, 1);\r\n }\r\n }\r\n\r\n if (NormalChallenge(3).isRunning) {\r\n player.chall3Pow = player.chall3Pow.times(DC.D1_00038.pow(diff.div(100).min(1e300).toNumber())).clampMax(Decimal.NUMBER_MAX_VALUE);\r\n }\r\n\r\n if (NormalChallenge(2).isRunning) {\r\n player.chall2Pow = Math.min(player.chall2Pow + diff.div(180000).min(1e300).toNumber(), 1);\r\n }\r\n\r\n if (InfinityChallenge(2).isRunning) {\r\n if (player.ic2Count >= 400) {\r\n if (AntimatterDimension(8).amount.gt(0)) {\r\n sacrificeReset();\r\n }\r\n player.ic2Count %= 400;\r\n } else {\r\n // Do not change to diff, as this may lead to a sacrifice softlock with high gamespeed\r\n player.ic2Count += Math.clamp(Date.now() - player.lastUpdate, 1, 21600000);\r\n }\r\n }\r\n}\r\n\r\nclass NormalChallengeState extends GameMechanicState {\r\n get isQuickResettable() {\r\n return this.config.isQuickResettable;\r\n }\r\n\r\n get isRunning() {\r\n const isPartOfIC1 = this.id !== 9 && this.id !== 12;\r\n return player.challenge.normal.current === this.id || (isPartOfIC1 && InfinityChallenge(1).isRunning);\r\n }\r\n\r\n get isOnlyActiveChallenge() {\r\n return player.challenge.normal.current === this.id;\r\n }\r\n\r\n get isUnlocked() {\r\n if (PlayerProgress.eternityUnlocked()) return true;\r\n if (this.id === 0) return true;\r\n const ip = GameDatabase.challenges.normal[this.id - 1].lockedAt;\r\n return Currency.infinitiesTotal.gte(ip);\r\n }\r\n\r\n get isDisabled() {\r\n return Pelle.isDoomed;\r\n }\r\n\r\n get lockedAt() {\r\n return GameDatabase.challenges.normal[this.id].lockedAt;\r\n }\r\n\r\n requestStart() {\r\n if (!Tab.challenges.isUnlocked) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n if (!player.options.confirmations.challenges) {\r\n this.start();\r\n return;\r\n }\r\n Modal.startNormalChallenge.show(this.id);\r\n }\r\n\r\n start() {\r\n if (this.id === 1 || this.isOnlyActiveChallenge) return;\r\n if (!Tab.challenges.isUnlocked) return;\r\n // Forces big crunch reset but ensures IP gain, if any.\r\n bigCrunchReset(true, true);\r\n player.challenge.normal.current = this.id;\r\n player.challenge.infinity.current = 0;\r\n if (Enslaved.isRunning && EternityChallenge(6).isRunning && this.id === 10) {\r\n EnslavedProgress.challengeCombo.giveProgress();\r\n Enslaved.quotes.ec6C10.show();\r\n }\r\n if (!Enslaved.isRunning) Tab.dimensions.antimatter.show();\r\n }\r\n\r\n get isCompleted() {\r\n return (player.challenge.normal.completedBits & (1 << this.id)) !== 0;\r\n }\r\n\r\n complete() {\r\n player.challenge.normal.completedBits |= 1 << this.id;\r\n // Since breaking infinity maxes even autobuyers that aren't unlocked,\r\n // it's possible to get r52 or r53 from completing a challenge\r\n // and thus unlocking an autobuyer.\r\n Achievement(52).tryUnlock();\r\n Achievement(53).tryUnlock();\r\n\r\n // Completing a challenge unlocks an autobuyer even if not purchased with antimatter, but we still\r\n // need to clear the notification because otherwise it sticks there forever. Any other methods of\r\n // unlocking autobuyers (such as Existentially Prolong) should also go through this code path\r\n TabNotification.newAutobuyer.clearTrigger();\r\n GameCache.cheapestAntimatterAutobuyer.invalidate();\r\n }\r\n\r\n get goal() {\r\n if (Enslaved.isRunning && Enslaved.BROKEN_CHALLENGES.includes(this.id)) {\r\n return DC.E1E15;\r\n }\r\n return Decimal.NUMBER_MAX_VALUE;\r\n }\r\n\r\n updateChallengeTime() {\r\n const bestTimes = player.challenge.normal.bestTimes;\r\n if (new Decimal(bestTimes[this.id - 2]).lte(player.records.thisInfinity.time)) {\r\n return;\r\n }\r\n player.challenge.normal.bestTimes[this.id - 2] = player.records.thisInfinity.time;\r\n GameCache.challengeTimeSum.invalidate();\r\n GameCache.worstChallengeTime.invalidate();\r\n }\r\n\r\n exit() {\r\n player.challenge.normal.current = 0;\r\n bigCrunchReset(true, false);\r\n if (!Enslaved.isRunning) Tab.dimensions.antimatter.show();\r\n }\r\n}\r\n\r\n/**\r\n * @param {number} id\r\n * @return {NormalChallengeState}\r\n */\r\nexport const NormalChallenge = NormalChallengeState.createAccessor(GameDatabase.challenges.normal);\r\n\r\n/**\r\n * @returns {NormalChallengeState}\r\n */\r\nObject.defineProperty(NormalChallenge, \"current\", {\r\n get: () => (player.challenge.normal.current > 0\r\n ? NormalChallenge(player.challenge.normal.current)\r\n : undefined),\r\n});\r\n\r\nObject.defineProperty(NormalChallenge, \"isRunning\", {\r\n get: () => player.challenge.normal.current !== 0,\r\n});\r\n\r\nexport const NormalChallenges = {\r\n /**\r\n * @type {NormalChallengeState[]}\r\n */\r\n all: NormalChallenge.index.compact(),\r\n completeAll() {\r\n for (const challenge of NormalChallenges.all) challenge.complete();\r\n },\r\n clearCompletions() {\r\n player.challenge.normal.completedBits = 0;\r\n }\r\n};\r\n","import { GameMechanicState } from \"./game-mechanics\";\r\n\r\nexport function tryCompleteInfinityChallenges() {\r\n if (EternityMilestone.autoIC.isReached) {\r\n const toComplete = InfinityChallenges.all.filter(x => x.isUnlocked && !x.isCompleted);\r\n for (const challenge of toComplete) challenge.complete();\r\n }\r\n}\r\n\r\nclass InfinityChallengeRewardState extends GameMechanicState {\r\n constructor(config, challenge) {\r\n super(config);\r\n this._challenge = challenge;\r\n }\r\n\r\n get isEffectActive() {\r\n return this._challenge.isCompleted;\r\n }\r\n}\r\n\r\nclass InfinityChallengeState extends GameMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this._reward = new InfinityChallengeRewardState(config.reward, this);\r\n }\r\n\r\n get unlockAM() {\r\n return this.config.unlockAM;\r\n }\r\n\r\n get isUnlocked() {\r\n return player.records.thisEternity.maxAM.gte(this.unlockAM) || (Achievement(133).isUnlocked && !Pelle.isDoomed) ||\r\n (PelleUpgrade.keepInfinityChallenges.canBeApplied && Pelle.cel.records.totalAntimatter.gte(this.unlockAM));\r\n }\r\n\r\n get isRunning() {\r\n return player.challenge.infinity.current === this.id;\r\n }\r\n\r\n requestStart() {\r\n if (!this.isUnlocked) return;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return;\r\n if (!player.options.confirmations.challenges) {\r\n this.start();\r\n return;\r\n }\r\n Modal.startInfinityChallenge.show(this.id);\r\n }\r\n\r\n start() {\r\n if (!this.isUnlocked || this.isRunning) return;\r\n // Forces big crunch reset but ensures IP gain, if any.\r\n bigCrunchReset(true, true);\r\n player.challenge.normal.current = 0;\r\n player.challenge.infinity.current = this.id;\r\n if (!Enslaved.isRunning) Tab.dimensions.antimatter.show();\r\n player.break = true;\r\n if (EternityChallenge.isRunning) Achievement(115).unlock();\r\n }\r\n\r\n get isCompleted() {\r\n return (player.challenge.infinity.completedBits & (1 << this.id)) !== 0;\r\n }\r\n\r\n complete() {\r\n player.challenge.infinity.completedBits |= 1 << this.id;\r\n EventHub.dispatch(GAME_EVENT.INFINITY_CHALLENGE_COMPLETED);\r\n }\r\n\r\n get isEffectActive() {\r\n return this.isRunning;\r\n }\r\n\r\n /**\r\n * @return {InfinityChallengeRewardState}\r\n */\r\n get reward() {\r\n return this._reward;\r\n }\r\n\r\n get isQuickResettable() {\r\n return this.config.isQuickResettable;\r\n }\r\n\r\n get goal() {\r\n return this.config.goal;\r\n }\r\n\r\n updateChallengeTime() {\r\n const bestTimes = player.challenge.infinity.bestTimes;\r\n if (new Decimal(bestTimes[this.id - 1]).lte(player.records.thisInfinity.time)) {\r\n return;\r\n }\r\n player.challenge.infinity.bestTimes[this.id - 1] = player.records.thisInfinity.time;\r\n GameCache.infinityChallengeTimeSum.invalidate();\r\n }\r\n\r\n exit() {\r\n player.challenge.infinity.current = 0;\r\n bigCrunchReset(true, false);\r\n if (!Enslaved.isRunning) Tab.dimensions.antimatter.show();\r\n }\r\n}\r\n\r\n/**\r\n * @param {number} id\r\n * @return {InfinityChallengeState}\r\n */\r\nexport const InfinityChallenge = InfinityChallengeState.createAccessor(GameDatabase.challenges.infinity);\r\n\r\n/**\r\n * @returns {InfinityChallengeState}\r\n */\r\nObject.defineProperty(InfinityChallenge, \"current\", {\r\n get: () => (player.challenge.infinity.current > 0\r\n ? InfinityChallenge(player.challenge.infinity.current)\r\n : undefined),\r\n});\r\n\r\nObject.defineProperty(InfinityChallenge, \"isRunning\", {\r\n get: () => InfinityChallenge.current !== undefined,\r\n});\r\n\r\nexport const InfinityChallenges = {\r\n /**\r\n * @type {InfinityChallengeState[]}\r\n */\r\n all: InfinityChallenge.index.compact(),\r\n completeAll() {\r\n for (const challenge of InfinityChallenges.all) challenge.complete();\r\n },\r\n clearCompletions() {\r\n player.challenge.infinity.completedBits = 0;\r\n },\r\n get nextIC() {\r\n return InfinityChallenges.all.find(x => !x.isUnlocked);\r\n },\r\n get nextICUnlockAM() {\r\n return this.nextIC?.unlockAM;\r\n },\r\n /**\r\n * Displays a notification if the antimatter gained will surpass the next unlockAM requirement.\r\n * @param value {Decimal} - total antimatter\r\n */\r\n notifyICUnlock(value) {\r\n // Disable the popup if the user will automatically complete the IC.\r\n if (EternityMilestone.autoIC.isReached) return;\r\n if (InfinityChallenges.nextIC === undefined) return;\r\n for (const ic of InfinityChallenges.all) {\r\n if (ic.isUnlocked || ic.isCompleted) continue;\r\n if (value.lt(ic.unlockAM)) break;\r\n // This has a reasonably high likelihood of happening when the player isn't looking at the game, so\r\n // we also give it a tab notification\r\n TabNotification.ICUnlock.clearTrigger();\r\n GameUI.notify.infinity(`You have unlocked Infinity Challenge ${ic.id}`, 7000);\r\n TabNotification.ICUnlock.tryTrigger();\r\n }\r\n },\r\n /**\r\n * @returns {InfinityChallengeState[]}\r\n */\r\n get completed() {\r\n return InfinityChallenges.all.filter(ic => ic.isCompleted);\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { MendingUpgrade } from \"./mending-upgrades\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\n// Slowdown parameters for replicanti growth, interval will increase by scaleFactor for every scaleLog10\r\n// OoM past the cap (default is 308.25 (log10 of 1.8e308), 1.2, Number.MAX_VALUE)\r\nexport const ReplicantiGrowth = {\r\n get scaleLog10() {\r\n return Math.log10(Number.MAX_VALUE);\r\n },\r\n get scaleFactor() {\r\n if (PelleStrikes.eternity.hasStrike && Replicanti.amount.gte(DC.E2000) && !MendingUpgrade(10).isBought) return 10;\r\n if (PelleStrikes.eternity.hasStrike && Replicanti.amount.gte(DC.E2000)) return 6;\r\n if (Pelle.isDoomed) return 2;\r\n return AlchemyResource.cardinality.effectValue;\r\n }\r\n};\r\n\r\n// Internal function to add RGs; called both from within the fast replicanti code and from the function\r\n// used externally. Only called in cases of automatic RG and does not actually modify replicanti amount\r\nfunction addReplicantiGalaxies(newGalaxies) {\r\n if (player.replicanti.galaxies > 250000){\r\n player.replicanti.galaxies = 250000;\r\n return;\r\n }\r\n if (newGalaxies > 0) {\r\n let x = player.replicanti.galaxies > 250000 ? 0 : newGalaxies;\r\n if (player.replicanti.galaxies + x < 250000){\r\n player.replicanti.galaxies += x;\r\n }\r\n else{\r\n player.replicanti.galaxies = 250000;\r\n }\r\n player.requirementChecks.eternity.noRG = false;\r\n if (!EternityMilestone.replicantiNoReset.isReached || Pelle.isDoomed) {\r\n player.dimensionBoosts = 0;\r\n softReset(0, true, true);\r\n }\r\n }\r\n}\r\n\r\n// Function called externally for gaining RGs, which adjusts replicanti amount before calling the function\r\n// which actually adds the RG. Called externally both automatically and manually\r\nexport function replicantiGalaxy(auto) {\r\n if (RealityUpgrade(6).isLockingMechanics) {\r\n if (!auto) RealityUpgrade(6).tryShowWarningModal();\r\n return;\r\n }\r\n if (!Replicanti.galaxies.canBuyMore) return;\r\n const galaxyGain = Replicanti.galaxies.gain;\r\n if (galaxyGain < 1) return;\r\n player.replicanti.timer = 0;\r\n Replicanti.amount = Achievement(126).isUnlocked && !Pelle.isDoomed\r\n ? Decimal.pow10(Replicanti.amount.log10() - LOG10_MAX_VALUE * galaxyGain)\r\n : DC.D1;\r\n addReplicantiGalaxies(galaxyGain);\r\n}\r\n\r\n// Only called on manual RG requests\r\nexport function replicantiGalaxyRequest() {\r\n if (!Replicanti.galaxies.canBuyMore) return;\r\n if (RealityUpgrade(6).isLockingMechanics) RealityUpgrade(6).tryShowWarningModal();\r\n else if (player.options.confirmations.replicantiGalaxy) Modal.replicantiGalaxy.show();\r\n else replicantiGalaxy(false);\r\n}\r\n\r\n// Produces replicanti quickly below e308, will auto-bulk-RG if production is fast enough\r\n// Returns the remaining unused gain factor\r\nfunction fastReplicantiBelow308(log10GainFactor, isAutobuyerActive) {\r\n const shouldBuyRG = isAutobuyerActive && !RealityUpgrade(6).isLockingMechanics;\r\n // More than e308 galaxies per tick causes the game to die, and I don't think it's worth the performance hit of\r\n // Decimalifying the entire calculation. And yes, this can and does actually happen super-lategame.\r\n const uncappedAmount = DC.E1.pow(log10GainFactor.plus(Replicanti.amount.log10()));\r\n // Checking for uncapped equaling zero is because Decimal.pow returns zero for overflow for some reason\r\n if (log10GainFactor.gt(Number.MAX_VALUE) || uncappedAmount.eq(0)) {\r\n if (shouldBuyRG) {\r\n addReplicantiGalaxies(Replicanti.galaxies.max - player.replicanti.galaxies);\r\n }\r\n Replicanti.amount = replicantiCap();\r\n // Basically we've used nothing.\r\n return log10GainFactor;\r\n }\r\n\r\n if (!shouldBuyRG) {\r\n const remainingGain = log10GainFactor.minus(replicantiCap().log10() - Replicanti.amount.log10()).clampMin(0);\r\n Replicanti.amount = Decimal.min(uncappedAmount, replicantiCap());\r\n return remainingGain;\r\n }\r\n\r\n const gainNeededPerRG = Decimal.NUMBER_MAX_VALUE.log10();\r\n const replicantiExponent = log10GainFactor.toNumber() + Replicanti.amount.log10();\r\n const toBuy = Math.floor(Math.min(replicantiExponent / gainNeededPerRG,\r\n Replicanti.galaxies.max - player.replicanti.galaxies));\r\n const maxUsedGain = gainNeededPerRG * toBuy + replicantiCap().log10() - Replicanti.amount.log10();\r\n const remainingGain = log10GainFactor.minus(maxUsedGain).clampMin(0);\r\n Replicanti.amount = Decimal.pow10(replicantiExponent - gainNeededPerRG * toBuy)\r\n .clampMax(replicantiCap());\r\n addReplicantiGalaxies(toBuy);\r\n return remainingGain;\r\n}\r\n\r\n// When the amount is exactly the cap, there are two cases: the player can go\r\n// over cap (in which case interval should be as if over cap) or the player\r\n// has just crunched and is still at cap due to \"Is this safe?\" reward\r\n// (in which case interval should be as if not over cap). This is why we have\r\n// the overCapOverride parameter, to tell us which case we are in.\r\nexport function getReplicantiInterval(overCapOverride, intervalIn) {\r\n let interval = intervalIn || player.replicanti.interval;\r\n interval = new Decimal(interval)\r\n const amount = Replicanti.amount;\r\n const overCap = overCapOverride === undefined ? amount.gt(replicantiCap()) : overCapOverride;\r\n if ((TimeStudy(133).isBought && !Achievement(138).isUnlocked) || overCap) {\r\n interval = interval.times(10);\r\n }\r\n\r\n if (overCap) {\r\n let increases = (amount.log10() - replicantiCap().log10()) / ReplicantiGrowth.scaleLog10;\r\n if (PelleStrikes.eternity.hasStrike && amount.gte(DC.E2000) && !MendingUpgrade(10).isBought) {\r\n // The above code assumes in this case there's 10x scaling for every 1e308 increase;\r\n // in fact, before e2000 it's only 2x.\r\n increases -= Math.log10(5) * (2000 - replicantiCap().log10()) / ReplicantiGrowth.scaleLog10;\r\n }\r\n interval = interval.times(Decimal.pow(ReplicantiGrowth.scaleFactor, increases));\r\n }\r\n\r\n interval = interval.divide(totalReplicantiSpeedMult(overCap));\r\n\r\n if (V.isRunning) {\r\n // This is a boost if interval < 1, but that only happens in EC12\r\n // and handling it would make the replicanti code a lot more complicated.\r\n interval = interval.pow(2);\r\n }\r\n\r\n if (V.isSuperRunning) {\r\n // This is a boost if interval < 1, but that only happens in EC12\r\n // and handling it would make the replicanti code a lot more complicated.\r\n // copypaste--sxy\r\n interval = interval.pow(5);\r\n }\r\n return interval;\r\n}\r\n\r\n// This only counts the \"external\" multipliers - that is, it doesn't count any speed changes due to being over the cap.\r\n// These multipliers are separated out largely for two reasons - more \"dynamic\" multipliers (such as overcap scaling\r\n// and celestial nerfs) interact very weirdly and the game balance relies on this behavior, and we also use this same\r\n// value in the multiplier tab too\r\nexport function totalReplicantiSpeedMult(overCap) {\r\n let totalMult = DC.D1;\r\n\r\n // These are the only effects active in Pelle - the function shortcuts everything else if we're in Pelle\r\n totalMult = totalMult.times(PelleRifts.decay.effectValue);\r\n totalMult = totalMult.times(Pelle.specialGlyphEffect.replication);\r\n totalMult = totalMult.times(ShopPurchase.replicantiPurchases.currentMult);\r\n if(MendingMilestone.one.isReached){\r\n totalMult = totalMult.times(1000);\r\n }\r\n if(Ra.unlocks.relicShardBoost.isUnlocked){\r\n totalMult = totalMult.times(Currency.relicShards.value.pow(0.06667).clampMin(1));\r\n }\r\n if (Pelle.isDisabled(\"replicantiIntervalMult\")) return totalMult;\r\n\r\n totalMult = totalMult.times(Ra.unlocks.continuousTTBoost.effects.replicanti.effectValue)\r\n\r\n\r\n const preCelestialEffects = Effects.product(\r\n TimeStudy(62),\r\n TimeStudy(213),\r\n RealityUpgrade(2),\r\n RealityUpgrade(6),\r\n RealityUpgrade(23),\r\n );\r\n totalMult = totalMult.times(preCelestialEffects);\r\n if (TimeStudy(132).isBought && Perk.studyPassive.isBought) {\r\n totalMult = totalMult.times(3);\r\n }\r\n\r\n if (!overCap && Achievement(134).isUnlocked) {\r\n totalMult = totalMult.times(2);\r\n }\r\n totalMult = totalMult.times(getAdjustedGlyphEffect(\"replicationspeed\"));\r\n if (GlyphAlteration.isAdded(\"replication\")) {\r\n totalMult = totalMult.times(\r\n Math.clampMin(Decimal.log10(Replicanti.amount) * getSecondaryGlyphEffect(\"replicationdtgain\"), 1));\r\n }\r\n totalMult = totalMult.timesEffectsOf(AlchemyResource.replication);\r\n\r\n return totalMult;\r\n}\r\n\r\nexport function replicantiCap() {\r\n return EffarigUnlock.infinity.canBeApplied\r\n ? Currency.infinitiesTotal.value\r\n .pow(TimeStudy(31).isBought ? 120 : 30)\r\n .clampMin(1)\r\n .times(Decimal.NUMBER_MAX_VALUE)\r\n : Decimal.NUMBER_MAX_VALUE;\r\n}\r\n\r\n// eslint-disable-next-line complexity\r\nexport function replicantiLoop(diff) {\r\n if (!player.replicanti.unl) return;\r\n const replicantiBeforeLoop = Replicanti.amount;\r\n PerformanceStats.start(\"Replicanti\");\r\n EventHub.dispatch(GAME_EVENT.REPLICANTI_TICK_BEFORE);\r\n // This gets the pre-cap interval (above the cap we recalculate the interval).\r\n const interval = getReplicantiInterval(false);\r\n const isUncapped = Replicanti.isUncapped;\r\n const areRGsBeingBought = Replicanti.galaxies.areBeingBought;\r\n\r\n // Figure out how many ticks to calculate for and roll over any leftover time to the next tick. The rollover\r\n // calculation is skipped if there's more than 100 replicanti ticks per game tick to reduce round-off problems.\r\n let tickCount = Decimal.divide(new Decimal(diff).add(player.replicanti.timer), interval);\r\n if (tickCount.lt(100)) player.replicanti.timer = tickCount.minus(tickCount.floor()).times(interval).toNumber();\r\n else player.replicanti.timer = 0;\r\n tickCount = tickCount.floor();\r\n\r\n const singleTickAvg = Replicanti.amount.times(player.replicanti.chance);\r\n // Note that code inside this conditional won't necessarily run every game tick; when game ticks are slower than\r\n // replicanti ticks, then tickCount will look like [0, 0, 0, 1, 0, 0, ...] on successive game ticks\r\n if (tickCount.gte(100) || (singleTickAvg.gte(10) && tickCount.gte(1))) {\r\n // Fast gain: If we're doing a very large number of ticks or each tick produces a lot, then continuous growth\r\n // every replicanti tick is a good approximation and less intensive than distribution samples. This path will\r\n // always happen above 1000 replicanti due to how singleTickAvg is calculated, so the over-cap math is only\r\n // present on this path\r\n let postScale = Math.log10(ReplicantiGrowth.scaleFactor) / ReplicantiGrowth.scaleLog10;\r\n if (V.isRunning) {\r\n postScale *= 2;\r\n }\r\n if (V.isSuperRunning) {\r\n postScale *= 5;\r\n }\r\n\r\n // Note that remainingGain is in log10 terms.\r\n let remainingGain = tickCount.times(Math.log(player.replicanti.chance + 1)).times(LOG10_E);\r\n // It is intended to be possible for both of the below conditionals to trigger.\r\n if (!isUncapped || Replicanti.amount.lte(replicantiCap())) {\r\n // Some of the gain is \"used up\" below e308, but if replicanti are uncapped\r\n // then some may be \"left over\" for increasing replicanti beyond their cap.\r\n remainingGain = fastReplicantiBelow308(remainingGain, areRGsBeingBought);\r\n }\r\n if (isUncapped && Replicanti.amount.gte(replicantiCap()) && remainingGain.gt(0)) {\r\n // Recalculate the interval (it may have increased due to additional replicanti, or,\r\n // far less importantly, decreased due to Reality Upgrade 6 and additional RG).\r\n // Don't worry here about the lack of e2000 scaling in Pelle on the first tick\r\n // (with replicanti still under e2000) causing a huge replicanti jump;\r\n // there's code later to stop replicanti from increasing by more than e308\r\n // in a single tick in Pelle.\r\n const intervalRatio = getReplicantiInterval(true).div(interval);\r\n remainingGain = remainingGain.div(intervalRatio);\r\n Replicanti.amount =\r\n Decimal.exp(remainingGain.div(LOG10_E).times(postScale).plus(1).ln() / postScale +\r\n Replicanti.amount.clampMin(1).ln());\r\n }\r\n } else if (tickCount.gt(1)) {\r\n // Multiple ticks but \"slow\" gain: This happens at low replicanti chance and amount with a fast interval, which\r\n // can happen often in early cel7. In this case we \"batch\" ticks together as full doubling events and then draw\r\n // from a Poisson distribution for how many times to do that. Any leftover ticks are used as binomial samples\r\n const batchTicks = Math.floor(tickCount.toNumber() * Math.log2(1 + player.replicanti.chance));\r\n const binomialTicks = tickCount.toNumber() - batchTicks / Math.log2(1 + player.replicanti.chance);\r\n\r\n Replicanti.amount = Replicanti.amount.times(DC.D2.pow(poissonDistribution(batchTicks)));\r\n for (let t = 0; t < Math.floor(binomialTicks); t++) {\r\n const reproduced = binomialDistribution(Replicanti.amount, player.replicanti.chance);\r\n Replicanti.amount = Replicanti.amount.plus(reproduced);\r\n }\r\n\r\n // The batching might use partial ticks; we add the rest back to the timer so it gets used next loop\r\n const leftover = binomialTicks - Math.floor(binomialTicks);\r\n player.replicanti.timer += interval.times(leftover).toNumber();\r\n } else if (tickCount.eq(1)) {\r\n // Single tick: Take a single binomial sample to properly simulate replicanti growth with randomness\r\n const reproduced = binomialDistribution(Replicanti.amount, player.replicanti.chance);\r\n Replicanti.amount = Replicanti.amount.plus(reproduced);\r\n }\r\n\r\n if (!isUncapped) Replicanti.amount = Decimal.min(replicantiCap(), Replicanti.amount);\r\n\r\n if (Pelle.isDoomed && Replicanti.amount.log10() - replicantiBeforeLoop.log10() > 308) {\r\n Replicanti.amount = replicantiBeforeLoop.times(1e308);\r\n }\r\n\r\n //Corruption 7, idk if this is good on math but hope it works--sxy\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n Replicanti.amount = Decimal.pow(Replicanti.amount,corruptionPenalties.repSing.rep[player.mending.corruption[8]]);\r\n }\r\n\r\n if (areRGsBeingBought && Replicanti.amount.gte(Decimal.NUMBER_MAX_VALUE)) {\r\n const buyer = Autobuyer.replicantiGalaxy;\r\n const isAuto = buyer.canTick && buyer.isEnabled;\r\n // There might be a manual and auto tick simultaneously; pass auto === true iff the autobuyer is ticking and\r\n // we aren't attempting to manually buy RG, because this controls modals appearing or not\r\n replicantiGalaxy(isAuto && !Replicanti.galaxies.isPlayerHoldingR);\r\n }\r\n player.records.thisReality.maxReplicanti = player.records.thisReality.maxReplicanti\r\n .clampMin(Replicanti.amount);\r\n EventHub.dispatch(GAME_EVENT.REPLICANTI_TICK_AFTER);\r\n PerformanceStats.end();\r\n}\r\n\r\nexport function replicantiMult() {\r\n return Decimal.pow(Decimal.log2(Replicanti.amount.clampMin(1)), 2)\r\n .plusEffectOf(TimeStudy(21))\r\n .timesEffectOf(TimeStudy(102))\r\n .clampMin(1)\r\n .pow(getAdjustedGlyphEffect(\"replicationpow\"));\r\n}\r\n\r\n/** @abstract */\r\nclass ReplicantiUpgradeState {\r\n /** @abstract */\r\n get id() { throw new NotImplementedError(); }\r\n /** @abstract */\r\n get value() { throw new NotImplementedError(); }\r\n\r\n /** @abstract */\r\n set value(value) { throw new NotImplementedError(); }\r\n\r\n /** @abstract */\r\n get nextValue() { throw new NotImplementedError(); }\r\n\r\n /** @abstract */\r\n get cost() { throw new NotImplementedError(); }\r\n /** @abstract */\r\n set cost(value) { throw new Error(\"Use baseCost to set cost\"); }\r\n\r\n /** @abstract */\r\n get costIncrease() { throw new NotImplementedError(); }\r\n\r\n get baseCost() { return this.cost; }\r\n /** @abstract */\r\n set baseCost(value) { throw new NotImplementedError(); }\r\n\r\n get cap() { return undefined; }\r\n get isCapped() { return false; }\r\n\r\n /** @abstract */\r\n get autobuyerMilestone() { throw new NotImplementedError(); }\r\n\r\n get canBeBought() {\r\n if (this.id === 3 && this.isCapped) return false;\r\n return !this.isCapped && Currency.infinityPoints.gte(this.cost) && player.eterc8repl !== 0;\r\n }\r\n\r\n purchase() {\r\n if (!this.canBeBought) return;\r\n Currency.infinityPoints.subtract(this.cost);\r\n this.baseCost = Decimal.times(this.baseCost, this.costIncrease);\r\n this.value = this.nextValue;\r\n if (EternityChallenge(8).isRunning) player.eterc8repl--;\r\n GameUI.update();\r\n }\r\n\r\n autobuyerTick() {\r\n while (this.canBeBought) {\r\n this.purchase();\r\n }\r\n }\r\n}\r\n\r\nexport const ReplicantiUpgrade = {\r\n chance: new class ReplicantiChanceUpgrade extends ReplicantiUpgradeState {\r\n get id() { return 1; }\r\n\r\n get value() { return player.replicanti.chance; }\r\n set value(value) { player.replicanti.chance = value; }\r\n\r\n get nextValue() {\r\n return this.nearestPercent(this.value + 0.01);\r\n }\r\n\r\n get cost() {\r\n return player.replicanti.chanceCost.dividedByEffectOf(PelleRifts.vacuum.milestones[1]);\r\n }\r\n\r\n get baseCost() { return player.replicanti.chanceCost; }\r\n set baseCost(value) { player.replicanti.chanceCost = value; }\r\n\r\n get costIncrease() { return 1e15; }\r\n\r\n get cap() {\r\n // Chance never goes over 100%.\r\n return 1;\r\n }\r\n\r\n get isCapped() {\r\n return this.nearestPercent(this.value) >= this.cap;\r\n }\r\n\r\n get autobuyerMilestone() {\r\n return EternityMilestone.autobuyerReplicantiChance;\r\n }\r\n\r\n autobuyerTick() {\r\n // Fixed price increase of 1e15; so total cost for N upgrades is:\r\n // cost + cost * 1e15 + cost * 1e30 + ... + cost * 1e15^(N-1) == cost * (1e15^N - 1) / (1e15 - 1)\r\n // N = log(IP * (1e15 - 1) / cost + 1) / log(1e15)\r\n let N = Currency.infinityPoints.value.times(this.costIncrease - 1)\r\n .dividedBy(this.cost).plus(1).log(this.costIncrease);\r\n N = Math.round((Math.min(this.value + 0.01 * Math.floor(N), this.cap) - this.value) * 100);\r\n if (N <= 0) return;\r\n const totalCost = this.cost.times(Decimal.pow(this.costIncrease, N).minus(1).dividedBy(this.costIncrease - 1));\r\n Currency.infinityPoints.subtract(totalCost);\r\n this.baseCost = this.baseCost.times(Decimal.pow(this.costIncrease, N));\r\n this.value = this.nearestPercent(this.value + 0.01 * N);\r\n }\r\n\r\n // Rounding errors suck\r\n nearestPercent(x) {\r\n return Math.round(100 * x) / 100;\r\n }\r\n }(),\r\n interval: new class ReplicantiIntervalUpgrade extends ReplicantiUpgradeState {\r\n get id() { return 2; }\r\n\r\n get value() { return player.replicanti.interval; }\r\n set value(value) { player.replicanti.interval = value; }\r\n\r\n get nextValue() {\r\n return Decimal.max(this.value.times(0.9), this.cap);\r\n }\r\n\r\n get cost() {\r\n return player.replicanti.intervalCost.dividedByEffectOf(PelleRifts.vacuum.milestones[1]);\r\n }\r\n\r\n get baseCost() { return player.replicanti.intervalCost; }\r\n set baseCost(value) { player.replicanti.intervalCost = value; }\r\n\r\n get costIncrease() { return 1e10; }\r\n\r\n get cap() {\r\n return Effects.min(50, TimeStudy(22));\r\n }\r\n\r\n get isCapped() {\r\n return this.value.lte(this.cap);\r\n }\r\n\r\n get autobuyerMilestone() {\r\n return EternityMilestone.autobuyerReplicantiInterval;\r\n }\r\n\r\n applyModifiers(value) {\r\n return getReplicantiInterval(undefined, new Decimal(value));\r\n }\r\n }(),\r\n galaxies: new class ReplicantiGalaxiesUpgrade extends ReplicantiUpgradeState {\r\n get id() { return 3; }\r\n\r\n get value() { return player.replicanti.boughtGalaxyCap; }\r\n set value(value) { player.replicanti.boughtGalaxyCap = value; }\r\n\r\n get nextValue() {\r\n return this.value + 1;\r\n }\r\n\r\n get cost() {\r\n return this.baseCost.dividedByEffectsOf(TimeStudy(233), PelleRifts.vacuum.milestones[1]);\r\n }\r\n\r\n get baseCost() { return player.replicanti.galCost; }\r\n set baseCost(value) { player.replicanti.galCost = value; }\r\n\r\n get distantRGStart() {\r\n return 100 + Effects.sum(GlyphSacrifice.replication) + (MendingUpgrade(17).isBought ? 1400 : 0);\r\n }\r\n\r\n get remoteRGStart() {\r\n return 1000 + Effects.sum(GlyphSacrifice.replication) + (MendingUpgrade(17).isBought ? 9000 : 0);\r\n }\r\n\r\n get costIncrease() {\r\n const galaxies = this.value;\r\n let increase = EternityChallenge(6).isRunning\r\n ? DC.E2.pow(galaxies).times(DC.E2)\r\n : DC.E5.pow(galaxies).times(DC.E25);\r\n if (galaxies >= this.distantRGStart) {\r\n increase = increase.times(DC.E50.pow(galaxies - this.distantRGStart + 5));\r\n }\r\n if (galaxies >= this.remoteRGStart) {\r\n increase = increase.times(DC.E5.pow(Math.pow(galaxies - this.remoteRGStart + 1, 2)));\r\n }\r\n return increase;\r\n }\r\n\r\n get autobuyerMilestone() {\r\n return EternityMilestone.autobuyerReplicantiMaxGalaxies;\r\n }\r\n get cap(){\r\n return 250000;\r\n }\r\n\r\n get isCapped() {\r\n return this.value > this.cap;\r\n }\r\n\r\n get extra() {\r\n return Effects.max(0, TimeStudy(131)) + PelleRifts.decay.milestones[2].effectOrDefault(0);\r\n }\r\n\r\n autobuyerTick() {\r\n // This isn't a hot enough autobuyer to worry about doing an actual inverse.\r\n let bulk = null;\r\n try{\r\n bulk = bulkBuyBinarySearch(Currency.infinityPoints.value, {\r\n costFunction: x => this.baseCostAfterCount(x).dividedByEffectOf(TimeStudy(233)),\r\n firstCost: this.cost,\r\n cumulative: true,\r\n }, this.value);\r\n }\r\n catch{\r\n return;\r\n }\r\n if (!bulk) return;\r\n Currency.infinityPoints.subtract(bulk.purchasePrice);\r\n\r\n this.value += bulk.quantity;\r\n this.baseCost = this.baseCostAfterCount(this.value);\r\n }\r\n\r\n baseCostAfterCount(count) {\r\n const logBase = 170;\r\n const logBaseIncrease = EternityChallenge(6).isRunning ? 2 : 25;\r\n const logCostScaling = EternityChallenge(6).isRunning ? 2 : 5;\r\n const distantReplicatedGalaxyStart = 100 + Effects.sum(GlyphSacrifice.replication) + (MendingUpgrade(17).isBought ? 1400 : 0);\r\n const remoteReplicatedGalaxyStart = 1000 + Effects.sum(GlyphSacrifice.replication) + (MendingUpgrade(17).isBought ? 9000 : 0);\r\n let logCost = logBase + count * logBaseIncrease + (count * (count - 1) / 2) * logCostScaling;\r\n if (count > distantReplicatedGalaxyStart) {\r\n const logDistantScaling = 50;\r\n // When distant scaling kicks in, the price increase jumps by a few extra steps.\r\n // So, the difference between successive scales goes 5, 5, 5, 255, 55, 55, ...\r\n const extraIncrements = 5;\r\n const numDistant = count - distantReplicatedGalaxyStart;\r\n logCost += logDistantScaling * numDistant * (numDistant + 2 * extraIncrements - 1) / 2;\r\n }\r\n if (count > remoteReplicatedGalaxyStart) {\r\n const logRemoteScaling = 5;\r\n const numRemote = count - remoteReplicatedGalaxyStart;\r\n // The formula x * (x + 1) * (2 * x + 1) / 6 is the sum of the first n squares.\r\n logCost += logRemoteScaling * numRemote * (numRemote + 1) * (2 * numRemote + 1) / 6;\r\n }\r\n return Decimal.pow10(logCost);\r\n }\r\n }(),\r\n};\r\n\r\nexport const Replicanti = {\r\n get areUnlocked() {\r\n return player.replicanti.unl;\r\n },\r\n reset(force = false) {\r\n const unlocked = force ? false : EternityMilestone.unlockReplicanti.isReached;\r\n player.replicanti = {\r\n unl: unlocked,\r\n amount: unlocked ? DC.D1 : DC.D0,\r\n timer: 0,\r\n chance: 0.01,\r\n chanceCost: DC.E150,\r\n interval: DC.E3,\r\n intervalCost: DC.E140,\r\n boughtGalaxyCap: 0,\r\n galaxies: 0,\r\n galCost: DC.E170,\r\n };\r\n },\r\n unlock(freeUnlock = false) {\r\n const cost = DC.E140.dividedByEffectOf(PelleRifts.vacuum.milestones[1]);\r\n if (player.replicanti.unl) return;\r\n if (freeUnlock || Currency.infinityPoints.gte(cost)) {\r\n if (!freeUnlock) Currency.infinityPoints.subtract(cost);\r\n player.replicanti.unl = true;\r\n player.replicanti.timer = 0;\r\n Replicanti.amount = DC.D1;\r\n }\r\n },\r\n get amount() {\r\n return player.replicanti.amount;\r\n },\r\n set amount(value) {\r\n player.replicanti.amount = value;\r\n },\r\n get chance() {\r\n return ReplicantiUpgrade.chance.value;\r\n },\r\n galaxies: {\r\n isPlayerHoldingR: false,\r\n get bought() {\r\n return Math.min(250000, player.replicanti.galaxies);\r\n },\r\n get extra() {\r\n return Math.min(Math.floor((Effects.sum(\r\n TimeStudy(225),\r\n TimeStudy(226)\r\n ) + Effarig.bonusRG) * TimeStudy(303).effectOrDefault(1)), 350000);\r\n },\r\n get total() {\r\n return this.bought + this.extra;\r\n },\r\n get max() {\r\n return Math.min(250000, ReplicantiUpgrade.galaxies.value) + Math.min(350000, ReplicantiUpgrade.galaxies.extra);\r\n },\r\n get canBuyMore() {\r\n if (this.bought >= 250000) return false;\r\n if (!Replicanti.amount.gte(Decimal.NUMBER_MAX_VALUE)) return false;\r\n return this.bought < this.max;\r\n },\r\n get areBeingBought() {\r\n const buyer = Autobuyer.replicantiGalaxy;\r\n // If the confirmation is enabled, we presume the player wants to confirm each Replicanti Galaxy purchase\r\n return (buyer.canTick && buyer.isEnabled) ||\r\n (!player.options.confirmations.replicantiGalaxy && this.isPlayerHoldingR);\r\n },\r\n get gain() {\r\n if (!this.canBuyMore) return 0;\r\n if (Achievement(126).isUnlocked) {\r\n const maxGain = Replicanti.galaxies.max - player.replicanti.galaxies;\r\n const logReplicanti = Replicanti.amount.log10();\r\n return Math.min(maxGain, Math.floor(logReplicanti / LOG10_MAX_VALUE));\r\n }\r\n return 1;\r\n },\r\n },\r\n get isUncapped() {\r\n return TimeStudy(192).isBought || PelleRifts.vacuum.milestones[1].canBeApplied;\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport class TimeTheoremPurchaseType {\r\n /**\r\n * @abstract\r\n */\r\n get amount() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n set amount(value) { throw new NotImplementedError(); }\r\n\r\n add(amount) { this.amount += amount; }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get currency() { throw new NotImplementedError(); }\r\n\r\n get cost() { return this.costBase.times(this.costIncrement.pow(this.amount)); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get costBase() { throw new NotImplementedError(); }\r\n\r\n /**\r\n * @abstract\r\n */\r\n get costIncrement() { throw new NotImplementedError(); }\r\n\r\n get bulkPossible() {\r\n if (Perk.ttFree.canBeApplied) {\r\n return Math.floor(this.currency.value.divide(this.cost).log10() / this.costIncrement.log10() + 1);\r\n }\r\n return Decimal.affordGeometricSeries(this.currency.value, this.cost, this.costIncrement, 0).toNumber();\r\n }\r\n\r\n // Note: This is actually just the cost of the largest term of the geometric series. If buying EP without the\r\n // perk that makes them free, this will be incorrect, but the EP object already overrides this anyway\r\n bulkCost(amount) {\r\n return this.cost.times(this.costIncrement.pow(amount - 1));\r\n }\r\n\r\n purchase(bulk) {\r\n if (!this.canAfford) return false;\r\n let purchased = false;\r\n const amount = this.bulkPossible;\r\n const buyFn = cost => (Perk.ttFree.canBeApplied ? this.currency.gte(cost) : this.currency.purchase(cost));\r\n // This will sometimes buy one too few for EP, so we just have to buy 1 after.\r\n if (bulk && buyFn(this.bulkCost(amount))) {\r\n Currency.timeTheorems.add(amount);\r\n this.add(amount);\r\n purchased = true;\r\n }\r\n if (buyFn(this.cost)) {\r\n Currency.timeTheorems.add(1);\r\n this.add(1);\r\n purchased = true;\r\n }\r\n if (purchased) player.requirementChecks.reality.noPurchasedTT = false;\r\n if (TimeTheorems.totalPurchased() > 114) PelleStrikes.ECs.trigger();\r\n return purchased;\r\n }\r\n\r\n get canAfford() {\r\n return this.currency.gte(this.cost) && !player.eternities.eq(0);\r\n }\r\n\r\n reset() {\r\n this.amount = 0;\r\n }\r\n}\r\n\r\nTimeTheoremPurchaseType.am = new class extends TimeTheoremPurchaseType {\r\n get amount() { return player.timestudy.amBought; }\r\n set amount(value) { player.timestudy.amBought = value; }\r\n\r\n get currency() { return Currency.antimatter; }\r\n get costBase() { return DC.E20000; }\r\n get costIncrement() { \r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n return DC.E20000.times(corruptionPenalties.toD.hiddenFive[player.mending.corruption[7]]);\r\n }\r\n return DC.E20000; \r\n }\r\n}();\r\n\r\nTimeTheoremPurchaseType.ip = new class extends TimeTheoremPurchaseType {\r\n get amount() { return player.timestudy.ipBought; }\r\n set amount(value) { player.timestudy.ipBought = value; }\r\n\r\n get currency() { return Currency.infinityPoints; }\r\n get costBase() { return DC.D1; }\r\n get costIncrement() { \r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n return DC.E100.times(corruptionPenalties.toD.hiddenFive[player.mending.corruption[7]]);\r\n }\r\n return DC.E100; \r\n }\r\n}();\r\n\r\nTimeTheoremPurchaseType.ep = new class extends TimeTheoremPurchaseType {\r\n get amount() { return player.timestudy.epBought; }\r\n set amount(value) { player.timestudy.epBought = value; }\r\n\r\n get currency() { return Currency.eternityPoints; }\r\n get costBase() { return DC.D1; }\r\n get costIncrement() { \r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n return DC.D2.times(corruptionPenalties.toD.hiddenFive[player.mending.corruption[7]]);\r\n }\r\n return DC.D2; \r\n }\r\n\r\n bulkCost(amount) {\r\n if (Perk.ttFree.canBeApplied) return this.cost.times(this.costIncrement.pow(amount - 1));\r\n return this.costIncrement.pow(amount + this.amount).subtract(this.cost);\r\n }\r\n}();\r\n\r\nexport const TimeTheorems = {\r\n checkForBuying(auto) {\r\n if (PlayerProgress.realityUnlocked() || TimeDimension(1).bought) return true;\r\n if (!auto) Modal.message.show(`You need to buy at least ${formatInt(1)} Time Dimension before you can purchase\r\n Time Theorems.`, { closeEvent: GAME_EVENT.REALITY_RESET_AFTER });\r\n return false;\r\n },\r\n\r\n buyOne(auto = false, type) {\r\n if (!this.checkForBuying(auto)) return 0;\r\n if (!TimeTheoremPurchaseType[type].purchase(false)) return 0;\r\n return 1;\r\n },\r\n\r\n // This is only called via automation and there's no manual use-case, so we assume auto is true and simplify a bit\r\n buyOneOfEach() {\r\n if (!this.checkForBuying(true)) return 0;\r\n const ttAM = this.buyOne(true, \"am\");\r\n const ttIP = this.buyOne(true, \"ip\");\r\n const ttEP = this.buyOne(true, \"ep\");\r\n return ttAM + ttIP + ttEP;\r\n },\r\n\r\n buyMax(auto = false) {\r\n if (!this.checkForBuying(auto)) return 0;\r\n const ttAM = TimeTheoremPurchaseType.am.purchase(true);\r\n const ttIP = TimeTheoremPurchaseType.ip.purchase(true);\r\n const ttEP = TimeTheoremPurchaseType.ep.purchase(true);\r\n return ttAM + ttIP + ttEP;\r\n },\r\n\r\n totalPurchased() {\r\n return TimeTheoremPurchaseType.am.amount +\r\n TimeTheoremPurchaseType.ip.amount +\r\n TimeTheoremPurchaseType.ep.amount;\r\n },\r\n\r\n calculateTimeStudiesCost() {\r\n let totalCost = TimeStudy.boughtNormalTS()\r\n .map(ts => ts.cost)\r\n .reduce(Number.sumReducer, 0);\r\n const ecStudy = TimeStudy.eternityChallenge.current();\r\n if (ecStudy !== undefined) {\r\n totalCost += ecStudy.cost;\r\n }\r\n if (Enslaved.isRunning && player.celestials.enslaved.hasSecretStudy) totalCost -= 100;\r\n return totalCost;\r\n }\r\n};\r\n","import { BitPurchasableMechanicState, RebuyableMechanicState } from \"./game-mechanics\";\r\nimport { DC } from \"./constants\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nclass ImaginaryUpgradeState extends BitPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n this.registerEvents(config.checkEvent, () => this.tryUnlock());\r\n }\r\n get isBought() {\r\n return (this.bits & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set isBought(value) {\r\n if (value) {\r\n this.bits |= (1 << this.bitIndex);\r\n } else {\r\n this.bits &= ~(1 << this.bitIndex);\r\n }\r\n }\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get requirement() {\r\n return typeof this.config.requirement === \"function\" ? this.config.requirement() : this.config.requirement;\r\n }\r\n\r\n get lockEvent() {\r\n return typeof this.config.lockEvent === \"function\" ? this.config.lockEvent() : this.config.lockEvent;\r\n }\r\n\r\n get currency() {\r\n return Currency.imaginaryMachines;\r\n }\r\n\r\n get bitIndex() {\r\n return this.id;\r\n }\r\n\r\n get bits() {\r\n return player.reality.imaginaryUpgradeBits;\r\n }\r\n\r\n set bits(value) {\r\n player.reality.imaginaryUpgradeBits = value;\r\n }\r\n\r\n get hasPlayerLock() {\r\n return (player.reality.reqLock.imaginary & (1 << this.bitIndex)) !== 0;\r\n }\r\n\r\n set hasPlayerLock(value) {\r\n if (value) player.reality.reqLock.imaginary |= 1 << this.bitIndex;\r\n else player.reality.reqLock.imaginary &= ~(1 << this.bitIndex);\r\n }\r\n\r\n get isLockingMechanics() {\r\n return this.hasPlayerLock && this.isPossible && !this.isAvailableForPurchase;\r\n }\r\n\r\n // Required to be changed this way to avoid direct prop mutation in Vue components\r\n setMechanicLock(value) {\r\n this.hasPlayerLock = value;\r\n }\r\n\r\n toggleMechanicLock() {\r\n this.hasPlayerLock = !this.hasPlayerLock;\r\n }\r\n\r\n // Note we don't actually show the modal if we already failed or unlocked it\r\n tryShowWarningModal(specialLockText) {\r\n if (this.isPossible && !this.isAvailableForPurchase) {\r\n Modal.upgradeLock.show({ upgrade: this, isImaginary: true, specialLockText });\r\n }\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n if(MendingMilestone.eight.isReached) return true;\r\n return (player.reality.imaginaryUpgReqs & (1 << this.id)) !== 0 || (MendingMilestone.four.isReached && ![25, 15, 16, 17, 18, 19].includes(this.id)) || (MendingMilestone.three.isReached && this.id === 20);\r\n }\r\n\r\n get isPossible() {\r\n if ((this.id === 15 || this.id === 25) && MendingMilestone.eight.isReached){\r\n return true\r\n }\r\n if(MendingMilestone.four.isReached || (this.id === 20 && MendingMilestone.three.isReached) || (this.id === 15 && MendingUpgrade(4).isBought)){\r\n return true;\r\n }\r\n return this.config.hasFailed ? !this.config.hasFailed() : true;\r\n }\r\n\r\n get canBeApplied() {\r\n return super.canBeApplied && !this.pelleDisabled;\r\n }\r\n\r\n get pelleDisabled() {\r\n return Pelle.isDoomed && this.config.isDisabledInDoomed;\r\n }\r\n\r\n tryUnlock() {\r\n if (!MachineHandler.isIMUnlocked || this.isAvailableForPurchase || !this.config.checkRequirement()) return;\r\n player.reality.imaginaryUpgReqs |= (1 << this.id);\r\n GameUI.notify.reality(`You've unlocked an Imaginary Upgrade: ${this.config.name}`);\r\n this.hasPlayerLock = false;\r\n }\r\n\r\n onPurchased() {\r\n EventHub.dispatch(GAME_EVENT.REALITY_UPGRADE_BOUGHT);\r\n if (this.id >= 15 && this.id <= 18) {\r\n DarkMatterDimension(this.id - 14).amount = DC.D1;\r\n if (this.id === 17) Laitela.quotes.thirdDMD.show();\r\n }\r\n if (this.id >= 15 && this.id <= 19) {\r\n // Need to clear before retriggering, or else it won't actually show up on subsequent upgrades\r\n TabNotification.laitelaUnlock.clearTrigger();\r\n TabNotification.laitelaUnlock.tryTrigger();\r\n }\r\n if (this.id === 21) {\r\n Laitela.quotes.finalRowIM.show();\r\n }\r\n if (this.id === 22) {\r\n for (const key of Object.keys(player.reality.glyphs.sac)) {\r\n if (player.reality.glyphs.sac[key].lte(1e100)) player.reality.glyphs.sac[key] = ImaginaryUpgrade(22).effectValue;\r\n }\r\n }\r\n if (this.id === 25) {\r\n TabNotification.pelleUnlock.tryTrigger();\r\n }\r\n }\r\n}\r\n\r\nclass RebuyableImaginaryUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.imaginaryMachines;\r\n }\r\n\r\n get boughtAmount() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return 0;\r\n return player.reality.imaginaryRebuyables[this.id];\r\n }\r\n\r\n get canBeApplied() {\r\n return super.canBeApplied && !this.pelleDisabled && corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]];\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n if (player.mending.corruptionChallenge.corruptedMend&&corruptionPenalties.repSing.hiddenFour[player.mending.corruption[8]]) return false;\r\n return true;\r\n }\r\n\r\n get pelleDisabled() {\r\n return Pelle.isDoomed;\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.reality.imaginaryRebuyables[this.id] = value;\r\n }\r\n\r\n onPurchased() {\r\n if (this.id === 7) {\r\n GameCache.staticGlyphWeights.invalidate();\r\n }\r\n }\r\n}\r\n\r\nImaginaryUpgradeState.index = mapGameData(\r\n GameDatabase.reality.imaginaryUpgrades,\r\n config => (config.id <= 10\r\n ? new RebuyableImaginaryUpgradeState(config)\r\n : new ImaginaryUpgradeState(config))\r\n);\r\n\r\nexport const ImaginaryUpgrade = id => ImaginaryUpgradeState.index[id];\r\n\r\nexport const ImaginaryUpgrades = {\r\n all: ImaginaryUpgradeState.index.compact(),\r\n get totalRebuyables() {\r\n const rebuyables = player.reality.imaginaryRebuyables;\r\n let total = 0;\r\n for (const i in rebuyables) total += rebuyables[i];\r\n return total;\r\n },\r\n get totalSinglePurchase() {\r\n return this.all.countWhere(u => u.isBought);\r\n },\r\n get allBought() {\r\n return (player.reality.imaginaryUpgradeBits >> 6) + 1 === 1 << (GameDatabase.reality.imaginaryUpgrades.length - 5);\r\n }\r\n};\r\n","import { SetPurchasableMechanicState } from \"./game-mechanics\";\r\nimport { MendingMilestone } from \"./mending\";\r\n\r\nclass PerkState extends SetPurchasableMechanicState {\r\n constructor(config) {\r\n super(config);\r\n /**\r\n * @type {PerkState[]}\r\n */\r\n this.connectedPerks = [];\r\n }\r\n\r\n get automatorPoints() {\r\n return this.config.automatorPoints ? this.config.automatorPoints : 0;\r\n }\r\n\r\n get label() {\r\n return this.config.label;\r\n }\r\n\r\n get shortDescription() {\r\n return this.config.shortDescription ? this.config.shortDescription() : \"\";\r\n }\r\n\r\n get currency() {\r\n return Currency.perkPoints;\r\n }\r\n\r\n get set() {\r\n return player.reality.perks;\r\n }\r\n\r\n get cost() {\r\n return 1;\r\n }\r\n\r\n get isAvailableForPurchase() {\r\n return this.id === 0 || this.connectedPerks.some(p => p.isBought);\r\n }\r\n\r\n get canBeApplied() {\r\n if(this.id === 0 && MendingMilestone.three.isReached) return true;\r\n else return this.isBought && !(Pelle.isDoomed && Pelle.uselessPerks.includes(this.id));\r\n }\r\n\r\n initializeConnections() {\r\n this.connectedPerks = GameDatabase.reality.perkConnections[this.id].map(id => Perks.find(id));\r\n }\r\n\r\n onPurchased() {\r\n if (this.config.bumpCurrency !== undefined) this.config.bumpCurrency();\r\n if (this.label === \"EU1\" && Currency.eternities.gt(0)) applyEU1();\r\n if (this.label === \"ACHNR\") {\r\n if (Achievements.preReality.some(a => !a.isUnlocked)) player.reality.gainedAutoAchievements = true;\r\n for (const achievement of Achievements.preReality) {\r\n achievement.unlock(true);\r\n }\r\n }\r\n GameCache.achievementPeriod.invalidate();\r\n GameCache.buyablePerks.invalidate();\r\n EventHub.dispatch(GAME_EVENT.PERK_BOUGHT);\r\n }\r\n}\r\n\r\nexport const Perk = mapGameDataToObject(\r\n GameDatabase.reality.perks,\r\n config => new PerkState(config)\r\n);\r\n\r\nexport const Perks = {\r\n all: Perk.all,\r\n /**\r\n * @param {number} id\r\n * @returns {PerkState}\r\n */\r\n find(id) {\r\n return Perks.all.find(p => p.id === id);\r\n }\r\n};\r\n\r\nfor (const perk of Perks.all) {\r\n perk.initializeConnections();\r\n}\r\n\r\nexport function checkPerkValidity() {\r\n if (player.reality.perks.every(id => Perks.find(id) !== undefined)) return;\r\n dev.respecPerks();\r\n if (Currency.perkPoints.gte(Perks.all.length)) {\r\n dev.buyAllPerks();\r\n Modal.message.show(\"Some of your Perks were invalid, but you auto-bought all valid perks.\");\r\n } else {\r\n Modal.message.show(\"Some of your Perks were invalid, so your Perks have been reset and your Perk Points refunded.\");\r\n }\r\n}\r\n","import { RebuyableMechanicState, SetPurchasableMechanicState } from \"./game-mechanics\";\r\nimport { DC } from \"./constants\";\r\nimport FullScreenAnimationHandler from \"./full-screen-animation-handler\";\r\nimport { SpeedrunMilestones } from \"./speedrun\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\nimport { CorruptionUpgrade } from \"./corruption-upgrades\";\r\n\r\nexport function animateAndDilate() {\r\n FullScreenAnimationHandler.display(\"a-dilate\", 2);\r\n setTimeout(startDilatedEternity, 1000);\r\n}\r\n\r\n// eslint-disable-next-line no-empty-function\r\nexport function animateAndUndilate(callback) {\r\n FullScreenAnimationHandler.display(\"a-undilate\", 2);\r\n setTimeout(() => {\r\n eternity(false, false, { switchingDilation: true });\r\n if (callback) callback();\r\n }, 1000);\r\n}\r\n\r\nexport function startDilatedEternityRequest() {\r\n if (!PlayerProgress.dilationUnlocked() || (Pelle.isDoomed && !Pelle.canDilateInPelle)) return;\r\n const playAnimation = player.options.animations.dilation && !FullScreenAnimationHandler.isDisplaying;\r\n if (player.dilation.active) {\r\n if (player.options.confirmations.dilation) {\r\n Modal.exitDilation.show();\r\n } else if (playAnimation) {\r\n animateAndUndilate();\r\n } else {\r\n eternity(false, false, { switchingDilation: true });\r\n }\r\n } else if (player.options.confirmations.dilation) {\r\n Modal.enterDilation.show();\r\n } else if (playAnimation) {\r\n animateAndDilate();\r\n } else {\r\n startDilatedEternity();\r\n }\r\n}\r\n\r\nexport function startDilatedEternity(auto) {\r\n if (!PlayerProgress.dilationUnlocked()) return false;\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return false;\r\n if (player.dilation.active) {\r\n eternity(false, auto, { switchingDilation: true });\r\n return false;\r\n }\r\n Achievement(136).unlock();\r\n eternity(false, auto, { switchingDilation: true });\r\n player.dilation.active = true;\r\n if (Pelle.isDoomed) PelleStrikes.dilation.trigger();\r\n return true;\r\n}\r\n\r\nconst DIL_UPG_NAMES = [\r\n null, \"dtGain\", \"galaxyThreshold\", \"tachyonGain\", \"doubleGalaxies\", \"tdMultReplicanti\",\r\n \"ndMultDT\", \"ipMultDT\", \"timeStudySplit\", \"dilationPenalty\", \"ttGenerator\",\r\n \"dtGainPelle\", \"galaxyMultiplier\", \"tickspeedPower\", \"galaxyThresholdPelle\", \"flatDilationMult\"\r\n];\r\n\r\nexport function buyDilationUpgrade(id, bulk = 1) {\r\n if (GameEnd.creditsEverClosed && !PlayerProgress.mendingUnlocked()) return false;\r\n // Upgrades 1-3 are rebuyable, and can be automatically bought in bulk with a perk shop upgrade\r\n const upgrade = DilationUpgrade[DIL_UPG_NAMES[id]];\r\n if (id > 3 && id < 11) {\r\n if (player.dilation.upgrades.has(id)) return false;\r\n if (!Currency.dilatedTime.purchase(upgrade.cost)) return false;\r\n player.dilation.upgrades.add(id);\r\n if (id === 4) player.dilation.totalTachyonGalaxies *= 2;\r\n } else {\r\n const upgAmount = player.dilation.rebuyables[id];\r\n let whichCap = Pelle.isDoomed ? upgrade.config.pellePurchaseCap : upgrade.config.purchaseCap\r\n if (Currency.dilatedTime.lt(upgrade.cost) || upgAmount >= whichCap) return false;\r\n\r\n let buying = Decimal.affordGeometricSeries(Currency.dilatedTime.value,\r\n upgrade.config.initialCost, upgrade.config.increment, upgAmount).toNumber();\r\n buying = Math.clampMax(buying, bulk);\r\n buying = Math.clampMax(buying, whichCap - upgAmount);\r\n const cost = Decimal.sumGeometricSeries(buying, upgrade.config.initialCost, upgrade.config.increment, upgAmount);\r\n Currency.dilatedTime.subtract(cost);\r\n player.dilation.rebuyables[id] += buying;\r\n if (id === 2) {\r\n if (!Perk.bypassTGReset.isBought || Pelle.isDoomed) Currency.dilatedTime.reset();\r\n player.dilation.nextThreshold = DC.E3;\r\n player.dilation.baseTachyonGalaxies = 0;\r\n player.dilation.totalTachyonGalaxies = 0;\r\n }\r\n\r\n if (id === 3 && !Pelle.isDisabled(\"tpMults\")) {\r\n let retroactiveTPFactor = Effects.max(\r\n 1,\r\n Perk.retroactiveTP1,\r\n Perk.retroactiveTP2,\r\n Perk.retroactiveTP3,\r\n Perk.retroactiveTP4\r\n );\r\n if (Enslaved.isRunning) {\r\n retroactiveTPFactor = Math.pow(retroactiveTPFactor, Enslaved.tachyonNerf);\r\n }\r\n Currency.tachyonParticles.multiply(Decimal.pow(retroactiveTPFactor, buying));\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n Currency.tachyonParticles.value = Currency.tachyonParticles.value.pow(Currency.tachyonParticles.value,corruptionPenalties.secondaryRejection[player.mending.corruption[7]]);\r\n }*/\r\n }\r\n }\r\n return true;\r\n}\r\n\r\nexport function getTachyonGalaxyMult(thresholdUpgrade, amnt) {\r\n // This specifically needs to be an undefined check because sometimes thresholdUpgrade is zero\r\n const upgrade = thresholdUpgrade === undefined ? DilationUpgrade.galaxyThreshold.effectValue : thresholdUpgrade;\r\n let thresholdMult = 3.65 * upgrade + 0.35;\r\n const glyphEffect = getAdjustedGlyphEffect(\"dilationgalaxyThreshold\");\r\n const glyphReduction = glyphEffect === 0 ? 1 : glyphEffect;\r\n let power = DilationUpgrade.galaxyThresholdPelle.canBeApplied\r\n ? DilationUpgrade.galaxyThresholdPelle.effectValue : 1;\r\n let tgSoftcapOne = 50000;\r\n let tgSoftcapOneApplytimes = Math.floor((amnt == undefined ? player.dilation.baseTachyonGalaxies : amnt) / 50000);\r\n //let tgSoftcapTwo = 150000;\r\n if ((amnt == undefined ? player.dilation.baseTachyonGalaxies : amnt) >= tgSoftcapOne && !Pelle.isDoomed){\r\n power *= ((1.5 - (0.005 * player.mending.rebuyables[11])) * tgSoftcapOneApplytimes);\r\n }\r\n /*if (player.dilation.totalTachyonGalaxies >= tgSoftcapTwo && !Pelle.isDoomed){\r\n power *= 1.5;\r\n }*/\r\n let one = Math.max(1.1, (thresholdMult * glyphReduction)) ** power\r\n return Math.min(Math.max(1, one), 1e300);\r\n}\r\n\r\nexport function getDilationGainPerSecond() {\r\n if (Pelle.isDoomed) {\r\n let x = MendingMilestone.one.isReached ? 100 : 1;\r\n const tachyonEffect = Currency.tachyonParticles.value.pow(PelleRifts.paradox.milestones[1].effectOrDefault(1));\r\n let primeAnswer = new Decimal(tachyonEffect)\r\n .timesEffectsOf(DilationUpgrade.dtGain, DilationUpgrade.dtGainPelle, DilationUpgrade.flatDilationMult)\r\n .times(ShopPurchase.dilatedTimePurchases.currentMult ** 0.5).times(x)\r\n .times(Pelle.specialGlyphEffect.dilation).div(1e5);\r\n if(Ra.unlocks.unlockPelleGlyphEffects.isUnlocked) primeAnswer=primeAnswer.times(getAdjustedGlyphEffect(\"dilationDT\")).times(Math.clampMin(Decimal.log10(Replicanti.amount) * getAdjustedGlyphEffect(\"replicationdtgain\"), 1));\r\n return primeAnswer;\r\n }\r\n let dtRate = new Decimal(Currency.tachyonParticles.value)\r\n .timesEffectsOf(\r\n DilationUpgrade.dtGain,\r\n Achievement(132),\r\n Achievement(137),\r\n RealityUpgrade(1),\r\n AlchemyResource.dilation,\r\n Ra.unlocks.continuousTTBoost.effects.dilatedTime,\r\n Ra.unlocks.peakGamespeedDT,\r\n DilationUpgrade.dtGainPelle,\r\n );\r\n if (MendingMilestone.one.isReached){\r\n dtRate = dtRate.times(100);\r\n }\r\n dtRate = dtRate.times(getAdjustedGlyphEffect(\"dilationDT\"));\r\n dtRate = dtRate.times(ShopPurchase.dilatedTimePurchases.currentMult);\r\n dtRate = dtRate.times(\r\n Math.clampMin(Decimal.log10(Replicanti.amount) * getAdjustedGlyphEffect(\"replicationdtgain\"), 1));\r\n if(Ra.unlocks.relicShardBoost.isUnlocked) dtRate = dtRate.pow(1 + Math.max(0, (Currency.relicShards.value.log10() / 1337)));\r\n if (Enslaved.isRunning && !dtRate.eq(0)) dtRate = Decimal.pow10(Math.pow(dtRate.plus(1).log10(), 0.85) - 1);\r\n if (V.isRunning) dtRate = dtRate.pow(0.5);\r\n if (V.isSuperRunning) dtRate = dtRate.pow(0.000001);\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let toDpower=corruptionPenalties.toD.power[player.mending.corruption[7]];\r\n let toDmult=corruptionPenalties.toD.mult[player.mending.corruption[7]]\r\n if(CorruptionUpgrade(23).isBought&&player.mending.corruption[7]>=1){\r\n toDpower+=0.2;\r\n toDmult=toDmult.times(100000);\r\n }\r\n dtRate = Decimal.pow(dtRate,toDpower);\r\n dtRate = dtRate.times(toDmult);\r\n }\r\n return dtRate;\r\n}\r\n\r\nexport function tachyonGainMultiplier() {\r\n if (Pelle.isDisabled(\"tpMults\")) return new Decimal(1);\r\n const pow = Enslaved.isRunning ? Enslaved.tachyonNerf : 1;\r\n return DC.D1.timesEffectsOf(\r\n DilationUpgrade.tachyonGain,\r\n GlyphSacrifice.dilation,\r\n Achievement(132),\r\n RealityUpgrade(4),\r\n RealityUpgrade(8),\r\n RealityUpgrade(15)\r\n ).pow(pow);\r\n}\r\n\r\nexport function rewardTP() {\r\n Currency.tachyonParticles.bumpTo(getTP(player.records.thisEternity.maxAM, true));\r\n //I hope this is the only place for TP,TP so weird--sxy\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n Currency.tachyonParticles.value = Decimal.pow(Currency.tachyonParticles.value,corruptionPenalties.toD.power[player.mending.corruption[7]]);\r\n }\r\n player.dilation.lastEP = Currency.eternityPoints.value;\r\n}\r\n\r\n// This function exists to apply Teresa-25 in a consistent way; TP multipliers can be very volatile and\r\n// applying the reward only once upon unlock promotes min-maxing the upgrade by unlocking dilation with\r\n// TP multipliers as large as possible. Applying the reward to a base TP value and letting the multipliers\r\n// act dynamically on this fixed base value elsewhere solves that issue\r\nexport function getBaseTP(antimatter, requireEternity) {\r\n if (!Player.canEternity && requireEternity) return DC.D0;\r\n const am = (isInCelestialReality() || Pelle.isDoomed)\r\n ? antimatter\r\n : Ra.unlocks.unlockDilationStartingTP.effectOrDefault(antimatter);\r\n let baseTP = Decimal.pow(Decimal.log10(am) / 400, 1.5);\r\n if (Enslaved.isRunning) baseTP = baseTP.pow(Enslaved.tachyonNerf);\r\n return baseTP;\r\n}\r\n\r\n// Returns the TP that would be gained this run\r\nexport function getTP(antimatter, requireEternity) {\r\n let x = getBaseTP(antimatter, requireEternity).times(tachyonGainMultiplier());\r\n /*if (player.mending.corruptionChallenge.corruptedMend) {\r\n x = Decimal.pow(x,corruptionPenalties.secondaryRejection[player.mending.corruption[7]]);\r\n }*/\r\n return x;\r\n}\r\n\r\n// Returns the amount of TP gained, subtracting out current TP; used for displaying gained TP, text on the\r\n// \"exit dilation\" button (saying whether you need more antimatter), and in last 10 eternities\r\nexport function getTachyonGain(requireEternity) {\r\n return getTP(Currency.antimatter.value, requireEternity).minus(Currency.tachyonParticles.value).clampMin(0);\r\n}\r\n\r\n// Returns the minimum antimatter needed in order to gain more TP; used only for display purposes\r\nexport function getTachyonReq() {\r\n let effectiveTP = Currency.tachyonParticles.value.dividedBy(tachyonGainMultiplier());\r\n if (Enslaved.isRunning) effectiveTP = effectiveTP.pow(1 / Enslaved.tachyonNerf);\r\n return Decimal.pow10(\r\n effectiveTP\r\n .times(Math.pow(400, 1.5))\r\n .pow(2 / 3)\r\n .toNumber()\r\n );\r\n}\r\n\r\nexport function getDilationTimeEstimate(goal) {\r\n const currentDTGain = getDilationGainPerSecond();\r\n const rawDTGain = currentDTGain.times(getGameSpeedupForDisplay());\r\n const currentDT = Currency.dilatedTime.value;\r\n if (currentDTGain.eq(0)) return null;\r\n if (PelleRifts.paradox.isActive) {\r\n const drain = Pelle.riftDrainPercent;\r\n const goalNetRate = rawDTGain.minus(Decimal.multiply(goal, drain));\r\n const currNetRate = rawDTGain.minus(currentDT.times(drain));\r\n if (goalNetRate.lt(0)) return \"Never affordable due to Rift drain\";\r\n return TimeSpan.fromSeconds(currNetRate.div(goalNetRate).ln() / drain).toTimeEstimate();\r\n }\r\n return TimeSpan.fromSeconds(Decimal.sub(goal, currentDT)\r\n .div(rawDTGain).toNumber()).toTimeEstimate();\r\n}\r\n\r\nfunction affordsXUpgrades(currency, id) {\r\n return Decimal.affordGeometricSeries(currency, DilationUpgrade.all[id + 1].config.initialCost, DilationUpgrade.all[id + 1].config.increment, player.dilation.rebuyables[id + 1]).toNumber()\r\n}\r\n\r\nexport function buyMaxDilationUpgrades() {\r\n const TGRBought = Perk.bypassTGReset.isBought || Pelle.isDoomed\r\n for (let i = 0; Pelle.isDoomed ? i <= 5 : i <= 2; i++) {\r\n if (!TGRBought && i == 1) return\r\n player.dilation.rebuyables[i + 1] += affordsXUpgrades(Currency.dilatedTime.value.div(1e6), i)\r\n }\r\n let bought = true\r\n for (let i = 0; i < 100 && bought; i++) {\r\n bought = false\r\n for (let i = 0; Pelle.isDoomed ? i <= 5 : i <= 2; i++) {\r\n if (!TGRBought && i == 1) return\r\n bought = buyDilationUpgrade(i + 1) || bought\r\n \r\n }\r\n }\r\n if (!TGRBought) buyDilationUpgrade(2)\r\n}\r\n\r\nexport function dilatedValueOf(value) {\r\n const log10 = value.log10();\r\n const dilationPenalty = 0.75 * Effects.product(DilationUpgrade.dilationPenalty);\r\n return Decimal.pow10(Math.sign(log10) * Math.pow(Math.abs(log10), dilationPenalty));\r\n}\r\n\r\nclass DilationUpgradeState extends SetPurchasableMechanicState {\r\n get currency() {\r\n return Currency.dilatedTime;\r\n }\r\n\r\n get set() {\r\n return player.dilation.upgrades;\r\n }\r\n\r\n onPurchased() {\r\n switch(this.id){\r\n case 4:{\r\n player.dilation.totalTachyonGalaxies *= 2;\r\n break;\r\n }\r\n case 10:{\r\n SpeedrunMilestones(15).tryComplete();\r\n break;\r\n }\r\n default:{\r\n //pass\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass RebuyableDilationUpgradeState extends RebuyableMechanicState {\r\n get currency() {\r\n return Currency.dilatedTime;\r\n }\r\n\r\n get boughtAmount() {\r\n return player.dilation.rebuyables[this.id];\r\n }\r\n\r\n set boughtAmount(value) {\r\n player.dilation.rebuyables[this.id] = value;\r\n }\r\n\r\n get isCapped() {\r\n return this.config.reachedCap();\r\n }\r\n\r\n purchase(bulk) {\r\n buyDilationUpgrade(this.config.id, bulk);\r\n }\r\n}\r\n\r\nexport const DilationUpgrade = mapGameDataToObject(\r\n GameDatabase.eternity.dilation,\r\n config => (config.rebuyable\r\n ? new RebuyableDilationUpgradeState(config)\r\n : new DilationUpgradeState(config))\r\n);\r\n\r\nexport const DilationUpgrades = {\r\n rebuyable: [\r\n DilationUpgrade.dtGain,\r\n DilationUpgrade.galaxyThreshold,\r\n DilationUpgrade.tachyonGain,\r\n ],\r\n fromId: id => DilationUpgrade.all.find(x => x.id === Number(id))\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { CorruptionUpgrade } from \"./corruption-upgrades\";\r\nimport { SpeedrunMilestones } from \"./speedrun\";\r\n\r\nclass BlackHoleUpgradeState {\r\n constructor(config) {\r\n const { getAmount, setAmount, calculateValue, initialCost, costMult } = config;\r\n this.incrementAmount = () => setAmount(getAmount() + 1);\r\n this._lazyValue = new Lazy(() => calculateValue(getAmount()));\r\n this._lazyCost = new Lazy(() => getHybridCostScaling(getAmount(),\r\n 1e30,\r\n initialCost,\r\n costMult,\r\n 0.2,\r\n DC.E310,\r\n 1e5,\r\n 10));\r\n this.id = config.id;\r\n this.hasAutobuyer = config.hasAutobuyer;\r\n this.onPurchase = config.onPurchase;\r\n }\r\n\r\n get value() {\r\n return this._lazyValue.value;\r\n }\r\n\r\n get cost() {\r\n return this._lazyCost.value;\r\n }\r\n\r\n get isAffordable() {\r\n return Currency.realityMachines.gte(this.cost);\r\n }\r\n\r\n purchase() {\r\n if (!this.isAffordable || this.value === 0) return;\r\n\r\n // Keep the cycle phase consistent before and after purchase so that upgrading doesn't cause weird behavior\r\n // such as immediately activating it when inactive (or worse, skipping past the active segment entirely).\r\n const bh = BlackHole(this.id);\r\n const beforeProg = bh.isCharged ? 1 - bh.stateProgress : bh.stateProgress;\r\n\r\n Currency.realityMachines.purchase(this.cost);\r\n this.incrementAmount();\r\n this._lazyValue.invalidate();\r\n this._lazyCost.invalidate();\r\n if (this.onPurchase) {\r\n this.onPurchase();\r\n }\r\n\r\n // Adjust the phase to what it was before purchase by changing it directly. This will often result in passing\r\n // in a negative argument to updatePhase(), but this shouldn't cause any problems because it'll never make\r\n // the phase itself negative. In very rare cases this may result in a single auto-pause getting skipped\r\n const stateTime = bh.isCharged ? bh.duration : bh.interval;\r\n bh.updatePhase(stateTime * beforeProg - bh.phase);\r\n\r\n // Prevents a rare edge case where the player makes an inactive black hole permanent, locking themselves into\r\n // a permanently inactive black hole\r\n if (bh.isPermanent) player.blackHole[this.id - 1].active = true;\r\n\r\n EventHub.dispatch(GAME_EVENT.BLACK_HOLE_UPGRADE_BOUGHT);\r\n }\r\n}\r\n\r\nclass BlackHoleState {\r\n constructor(id) {\r\n this.id = id + 1;\r\n const blackHoleCostMultipliers = [1, 1000];\r\n // Interval: starts at 3600, x0.8 per upgrade, upgrade cost goes x3.5, starts at 15\r\n this.intervalUpgrade = new BlackHoleUpgradeState({\r\n id: this.id,\r\n getAmount: () => this._data.intervalUpgrades,\r\n setAmount: amount => this._data.intervalUpgrades = amount,\r\n calculateValue: amount => (3600 / (Math.pow(10, id))) * Math.pow(0.8, amount),\r\n initialCost: 15 * blackHoleCostMultipliers[id],\r\n costMult: 3.5,\r\n hasAutobuyer: false,\r\n onPurchase: () => {\r\n if (!this.isCharged) {\r\n this._data.phase = Math.clampMax(this.interval, this._data.phase);\r\n }\r\n }\r\n });\r\n // Power: starts at 5, x1.35 per upgrade, cost goes x2, starts at 20\r\n this.powerUpgrade = new BlackHoleUpgradeState({\r\n id: this.id,\r\n getAmount: () => this._data.powerUpgrades,\r\n setAmount: amount => this._data.powerUpgrades = amount,\r\n calculateValue: amount => {\r\n let baseEffect = 1.35;\r\n if(CorruptionUpgrade(11).isBought) baseEffect*=CorruptionUpgrade(11).effectValue;\r\n return (180 / Math.pow(2, id)) * Math.pow(baseEffect, amount)\r\n },\r\n initialCost: 20 * blackHoleCostMultipliers[id],\r\n costMult: 2,\r\n hasAutobuyer: true\r\n });\r\n // Duration: starts at 10, x1.5 per upgrade, cost goes x4, starts at 10\r\n this.durationUpgrade = new BlackHoleUpgradeState({\r\n id: this.id,\r\n getAmount: () => this._data.durationUpgrades,\r\n setAmount: amount => this._data.durationUpgrades = amount,\r\n calculateValue: amount => (10 - (id) * 3) * Math.pow(1.3, amount),\r\n initialCost: 10 * blackHoleCostMultipliers[id],\r\n costMult: 4,\r\n hasAutobuyer: false\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n get _data() {\r\n return player.blackHole[this.id - 1];\r\n }\r\n\r\n /**\r\n * Exists to avoid recursion in calculation of whether the black hole is permanent.\r\n */\r\n get rawInterval() {\r\n return this.intervalUpgrade.value * Achievement(145).effectOrDefault(1);\r\n }\r\n\r\n /**\r\n * Amount of time the black hole is inactive for between activations.\r\n */\r\n get interval() {\r\n return this.isPermanent ? 0 : this.rawInterval;\r\n }\r\n\r\n /**\r\n * Multiplier to time the black hole gives when active.\r\n */\r\n get power() {\r\n return this.powerUpgrade.value * Achievement(158).effectOrDefault(1);\r\n }\r\n\r\n /**\r\n * Amount of time the black hole is active for.\r\n */\r\n get duration() {\r\n return this.durationUpgrade.value * Achievement(155).effectOrDefault(1);\r\n }\r\n\r\n get isUnlocked() {\r\n return (this._data.unlocked && !Enslaved.isRunning && !Pelle.isDisabled(\"blackhole\")) || (MendingMilestone.three.isReached && !Enslaved.isRunning && !Pelle.isDisabled(\"blackhole\"));\r\n }\r\n\r\n get isCharged() {\r\n return this._data.active;\r\n }\r\n\r\n get timeWithPreviousActiveToNextStateChange() {\r\n return this.isCharged ? this.duration - this.phase : this.interval - this.phase;\r\n }\r\n\r\n // When inactive, returns time until active; when active, returns time until inactive (or paused for hole 2)\r\n get timeToNextStateChange() {\r\n const remainingTime = this.timeWithPreviousActiveToNextStateChange;\r\n\r\n if (this.id === 1) return remainingTime;\r\n\r\n // 2nd hole activation logic (not bothering generalizing since we're not adding that 3rd hole again)\r\n if (this.isCharged) {\r\n if (BlackHole(1).isCharged) return Math.min(remainingTime, BlackHole(1).timeToNextStateChange);\r\n return BlackHole(1).timeToNextStateChange;\r\n }\r\n return BlackHole(1).timeUntilTimeActive(remainingTime);\r\n }\r\n\r\n // Given x, return time it takes for this black hole to get x time active\r\n timeUntilTimeActive(inputTimeActive) {\r\n // Avoid error about reassigning parameter.\r\n let timeActive = inputTimeActive;\r\n if (this.isCharged) {\r\n // We start at the next full activation, so if we have a partial activation\r\n // then that reduces the time required.\r\n // Make sure to handle the case when the current partial activation is enough.\r\n if (timeActive < this.timeToNextStateChange) return timeActive;\r\n // If it's not enough, we can subtract it from our time.\r\n timeActive -= this.timeToNextStateChange;\r\n }\r\n // Determine the time until the next full activation.\r\n let totalTime = this.isCharged\r\n ? this.timeToNextStateChange + this.interval\r\n : this.timeToNextStateChange;\r\n // This is the number of full cycles needed...\r\n totalTime += Math.floor(timeActive / this.duration) * this.cycleLength;\r\n // And the time from a partial cycle.\r\n totalTime += timeActive % this.duration;\r\n return totalTime;\r\n }\r\n\r\n // This is a value which counts up from 0 to 1 when inactive, and 1 to 0 when active\r\n get stateProgress() {\r\n if (this.isCharged) {\r\n return 1 - this.phase / this.duration;\r\n }\r\n return this.phase / this.interval;\r\n }\r\n\r\n // The logic to determine what state the black hole is in for displaying is nontrivial and used in multiple places\r\n get displayState() {\r\n if (Pelle.isDisabled(\"blackhole\")) return ` Disabled`;\r\n if (Enslaved.isAutoReleasing) {\r\n if (Enslaved.autoReleaseTick < 3) return ` Pulsing`;\r\n return ` Pulsing`;\r\n }\r\n if (Enslaved.isStoringGameTime) return ` Charging`;\r\n if (BlackHoles.areNegative) return ` Inverted`;\r\n if (BlackHoles.arePaused) return ` Paused`;\r\n if (this.isPermanent) return ` Permanent`;\r\n\r\n const timeString = TimeSpan.fromSeconds(this.timeToNextStateChange).toStringShort(true);\r\n if (this.isActive) return ` Active (${timeString})`;\r\n return ` Inactive (${timeString})`;\r\n }\r\n\r\n get isActive() {\r\n return this.isCharged && (this.id === 1 || BlackHole(this.id - 1).isActive) && !Pelle.isDisabled(\"blackhole\");\r\n }\r\n\r\n // Proportion of active time, scaled 0 to 1\r\n get dutyCycle() {\r\n return this.duration / (this.rawInterval + this.duration);\r\n }\r\n\r\n get isPermanent() {\r\n return this.dutyCycle >= 0.9999 || MendingMilestone.three.isReached;\r\n }\r\n\r\n /**\r\n * Amount of time the black hole has spent since last state transition,\r\n * so if it's active, it's the amount of time it's been active for, and if it's inactive,\r\n * it's the amount of time it's been inactive for.\r\n */\r\n get phase() {\r\n return this._data.phase;\r\n }\r\n\r\n get cycleLength() {\r\n return this.interval + this.duration;\r\n }\r\n\r\n updatePhase(activePeriod) {\r\n if (this.isPermanent) return;\r\n // Prevents a flickering black hole if phase gets set too high\r\n // (shouldn't ever happen in practice). Also, more importantly,\r\n // should work even if activePeriods[i] is very large. To check:\r\n // This used to always use the period of blackHole[0], now it doesn't,\r\n // will this cause other bugs?\r\n this._data.phase += activePeriod;\r\n\r\n if (this.phase >= this.cycleLength) {\r\n // One activation for each full cycle.\r\n this._data.activations += Math.floor(this.phase / this.cycleLength);\r\n this._data.phase %= this.cycleLength;\r\n }\r\n if (this.isCharged) {\r\n if (this.phase >= this.duration) {\r\n this._data.phase -= this.duration;\r\n this._data.active = false;\r\n if (GameUI.notify.showBlackHoles) {\r\n GameUI.notify.blackHole(`${this.description(true)} duration ended.`);\r\n }\r\n }\r\n } else if (this.phase >= this.interval) {\r\n this._data.phase -= this.interval;\r\n this._data.activations++;\r\n this._data.active = true;\r\n if (GameUI.notify.showBlackHoles) {\r\n GameUI.notify.blackHole(`${this.description(true)} has activated!`);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Given the time for which the previous black hole is active,\r\n * this function returns the time for which current black hole is active.\r\n * For example, for BlackHole(2), this function, given\r\n * the time for which for BlackHole(1) is active, will return the time for which\r\n * BlackHole(2) is active during that time.\r\n */\r\n realTimeWhileActive(time) {\r\n const nextDeactivation = this.timeUntilNextDeactivation;\r\n const cooldown = this.interval;\r\n const duration = this.duration;\r\n const fullCycle = this.cycleLength;\r\n const currentActivationDuration = Math.min(nextDeactivation, duration);\r\n const activeCyclesUntilLastDeactivation = Math.floor((time - nextDeactivation) / fullCycle);\r\n const activeTimeUntilLastDeactivation = duration * activeCyclesUntilLastDeactivation;\r\n const timeLeftAfterLastDeactivation = (time - nextDeactivation + fullCycle) % fullCycle;\r\n const lastActivationDuration = Math.max(timeLeftAfterLastDeactivation - cooldown, 0);\r\n return currentActivationDuration + activeTimeUntilLastDeactivation + lastActivationDuration;\r\n }\r\n\r\n /**\r\n * Returns the time that the previous black hole must be active until the next change\r\n * from the active state to the inactive state. For example, for BlackHole(2),\r\n * this function will return the time BlackHole(1) must be active for BlackHole(2)\r\n * to transition to the inactive state. This is useful since BlackHole(2)'s phase\r\n * only increases (that is, its state only changes) while BlackHole(1) is active.\r\n * In general, a black hole only changes state while the previous black hole is active.\r\n * So figuring out how long a black hole would be active after some amount of real time\r\n * (as we do) is best done iteratively via figuring out how long a black hole would be active\r\n * after a given amount of time of the previous black hole being active.\r\n */\r\n get timeUntilNextDeactivation() {\r\n if (this.isCharged) {\r\n return this.duration - this.phase;\r\n }\r\n return this.cycleLength - this.phase;\r\n }\r\n\r\n description(capitalized) {\r\n if (RealityUpgrade(20).isBought) {\r\n return `Black Hole ${this.id}`;\r\n }\r\n return capitalized ? \"The Black Hole\" : \"the Black Hole\";\r\n }\r\n}\r\n\r\nBlackHoleState.list = Array.range(0, 2).map(id => new BlackHoleState(id));\r\n\r\n/**\r\n * @param {number} id\r\n * @return {BlackHoleState}\r\n */\r\nexport function BlackHole(id) {\r\n return BlackHoleState.list[id - 1];\r\n}\r\n\r\nexport const BlackHoles = {\r\n // In seconds\r\n ACCELERATION_TIME: 5,\r\n /**\r\n * @return {BlackHoleState[]}\r\n */\r\n get list() {\r\n return BlackHoleState.list;\r\n },\r\n\r\n get canBeUnlocked() {\r\n return Currency.realityMachines.gte(100) && !this.areUnlocked;\r\n },\r\n\r\n get areUnlocked() {\r\n return BlackHole(1).isUnlocked;\r\n },\r\n\r\n unlock() {\r\n if (!this.canBeUnlocked) return;\r\n player.blackHole[0].unlocked = true;\r\n Currency.realityMachines.purchase(100);\r\n player.records.timePlayedAtBHUnlock = PlayerProgress.mendingUnlocked() ? player.records.thisMend.time : player.records.totalTimePlayed;\r\n EventHub.dispatch(GAME_EVENT.BLACK_HOLE_UNLOCKED);\r\n },\r\n\r\n togglePause: (automatic = false) => {\r\n if (!BlackHoles.areUnlocked) return;\r\n const maxInversion = player.requirementChecks.reality.slowestBH <= 1e-300;\r\n if (ImaginaryUpgrade(24).isLockingMechanics && Ra.isRunning && maxInversion) {\r\n if (!automatic) ImaginaryUpgrade(24).tryShowWarningModal(\"uninvert your Black Hole\");\r\n return;\r\n }\r\n if (player.blackHolePause) player.requirementChecks.reality.slowestBH = 1;\r\n player.blackHolePause = !player.blackHolePause;\r\n player.blackHolePauseTime = player.records.realTimePlayed;\r\n const blackHoleString = RealityUpgrade(20).isBought ? \"Black Holes\" : \"Black Hole\";\r\n // If black holes are going unpaused -> paused, use \"inverted\" or \"paused\" depending o\r\n // whether the player's using negative BH (i.e. BH inversion); if going paused -> unpaused,\r\n // use \"unpaused\".\r\n // eslint-disable-next-line no-nested-ternary\r\n const pauseType = player.blackHolePause ? (BlackHoles.areNegative ? \"inverted\" : \"paused\") : \"unpaused\";\r\n const automaticString = automatic ? \"automatically \" : \"\";\r\n GameUI.notify.blackHole(`${blackHoleString} ${automaticString}${pauseType}`);\r\n },\r\n\r\n get unpauseAccelerationFactor() {\r\n if (this.arePermanent) return 1;\r\n return Math.clamp((player.records.realTimePlayed - player.blackHolePauseTime) /\r\n (1000 * this.ACCELERATION_TIME), 0, 1);\r\n },\r\n\r\n get arePaused() {\r\n return player.blackHolePause;\r\n },\r\n\r\n get areNegative() {\r\n return this.arePaused && !Laitela.isRunning && player.blackHoleNegative < 1;\r\n },\r\n\r\n get arePermanent() {\r\n return BlackHoles.list.every(bh => bh.isPermanent);\r\n },\r\n\r\n updatePhases(blackHoleDiff) {\r\n if (!this.areUnlocked || this.arePaused) return;\r\n // This code is intended to successfully update the black hole phases\r\n // even for very large values of blackHoleDiff.\r\n // With auto-pause settings, this code also has to take account of that.\r\n const rawSeconds = blackHoleDiff / 1000;\r\n const [autoPause, seconds] = this.autoPauseData(rawSeconds);\r\n const activePeriods = this.realTimePeriodsWithBlackHoleActive(seconds, true);\r\n for (const blackHole of this.list) {\r\n if (!blackHole.isUnlocked) break;\r\n blackHole.updatePhase(activePeriods[blackHole.id - 1]);\r\n }\r\n if (autoPause) {\r\n BlackHoles.togglePause(true);\r\n }\r\n },\r\n\r\n /**\r\n * This function takes the total real time spent offline,\r\n * a number of ticks to simulate, a tolerance for how far ticks can be\r\n * from average (explained later), and returns a single realTickTime and\r\n * blackHoleSpeed representing the real time taken up by the first simulated tick\r\n * and the game speed due to black holess during it.\r\n *\r\n * This code makes sure that the following conditions are satisfied:\r\n * 1: realTickTime * blackHoleSpeed is exactly (up to some small\r\n * multiple of floating-point precision) the game time which would be spent\r\n * after realTickTime real time, accounting for black holess\r\n * (but not for anything else).\r\n * 2: No tick contains too much (more than a constant multiple of\r\n * the mean game time per tick) of the game time.\r\n * 3: No tick has negative or zero real time or (equivalently)\r\n * negative or zero game time.\r\n * Note that Patashu has convinced me that we do not want the property\r\n * \"No tick contains too much (more than a constant multiple of the\r\n * mean real time per tick) of the real time.\" There's no reason to have it\r\n * aside from the edge cases of EC12 (and if you're going offline during EC12\r\n * then you should expect technically correct but somewhat annoying behavior)\r\n * and auto EC completion (but auto EC completion shouldn't be that much\r\n * of an issue).\r\n */\r\n calculateOfflineTick(totalRealTime, numberOfTicks, tolerance) {\r\n // Cache speedups, so calculateGameTimeFromRealTime doesn't recalculate them every time.\r\n const speedups = this.calculateSpeedups();\r\n const totalGameTime = this.calculateGameTimeFromRealTime(totalRealTime, speedups);\r\n // We have this special case just in case some floating-point mess prevents\r\n // binarySearch from working in the numberOfTicks = 1 case.\r\n // I doubt that's possible but it seems worth handling just in case.\r\n if (numberOfTicks === 1) {\r\n return [totalRealTime, totalGameTime.div(totalRealTime)];\r\n }\r\n // We want calculateGameTimeFromRealTime(realTickTime, speedups) * numberOfTicks / totalGameTime to be roughly 1\r\n // (that is, the tick taking realTickTime real time has roughly average length in terms of game time).\r\n // We use binary search because it has somewhat better worst-case behavior than linear interpolation search here.\r\n // Suppose you have 3000 seconds without a black hole and then 100 seconds of a black hole with 3000x power,\r\n // and you want to find when 4000 seconds of game time have elapsed. With binary search it will take only\r\n // 20 steps or so to get reasonable accuracy, but with linear interpolation it will take about 100 steps.\r\n // These extra steps might always average out with cases where linear interpolation is quicker though.\r\n const realTickTime = this.decimalBinarySearch(\r\n 0,\r\n totalRealTime,\r\n x => this.calculateGameTimeFromRealTime(x, speedups) .times(numberOfTicks).div(totalGameTime),\r\n 1,\r\n tolerance\r\n );\r\n const blackHoleSpeedup = this.calculateGameTimeFromRealTime(realTickTime, speedups).div(realTickTime);\r\n return [realTickTime, blackHoleSpeedup];\r\n },\r\n\r\n /**\r\n * Standard implementation of binary search for a monotone increasing function.\r\n * The only unusual thing is tolerance, which is a bound on\r\n * Math.abs(evaluationFunction(result) - target).\r\n */\r\n // eslint-disable-next-line max-params\r\n binarySearch(start, end, evaluationFunction, target, tolerance) {\r\n let middle;\r\n for (let iter = 0; iter < 100; ++iter) {\r\n middle = (start + end) / 2;\r\n const error = evaluationFunction(middle) - target;\r\n if (Math.abs(error) < tolerance) break;\r\n if (error < 0) {\r\n // eslint-disable-next-line no-param-reassign\r\n start = middle;\r\n } else {\r\n // eslint-disable-next-line no-param-reassign\r\n end = middle;\r\n }\r\n }\r\n return middle;\r\n },\r\n\r\n decimalBinarySearch(start, end, evaluationFunction, target, tolerance) {\r\n let middle;\r\n for (let iter = 0; iter < 100; ++iter) {\r\n middle = (start + end) / 2;\r\n const error = evaluationFunction(middle).sub(target);\r\n if (Decimal.abs(error).lt(tolerance)) break;\r\n if (error.lt(0)) {\r\n // eslint-disable-next-line no-param-reassign\r\n start = middle;\r\n } else {\r\n // eslint-disable-next-line no-param-reassign\r\n end = middle;\r\n }\r\n }\r\n return middle;\r\n },\r\n\r\n /**\r\n * Returns a list of length (number of unlocked black holes + 1),\r\n * where each element is the *total* speedup while that black hole\r\n * is the highest-numbered black hole active, the black holes being numbered\r\n * starting from black hole 1 and black hole 0 being normal game.\r\n */\r\n calculateSpeedups() {\r\n const effectsToConsider = [GAME_SPEED_EFFECT.FIXED_SPEED, GAME_SPEED_EFFECT.TIME_GLYPH,\r\n GAME_SPEED_EFFECT.SINGULARITY_MILESTONE, GAME_SPEED_EFFECT.NERFS];\r\n const speedupWithoutBlackHole = getGameSpeedupFactor(effectsToConsider);\r\n const speedups = [1];\r\n effectsToConsider.push(GAME_SPEED_EFFECT.BLACK_HOLE);\r\n // Crucial thing: this works even if the black holes are paused, it's just that the speedups will be 1.\r\n for (const blackHole of this.list) {\r\n if (!blackHole.isUnlocked) break;\r\n speedups.push(getGameSpeedupFactor(effectsToConsider, blackHole.id).div(speedupWithoutBlackHole));\r\n }\r\n return speedups;\r\n },\r\n\r\n calculateGameTimeFromRealTime(realTime, speedups) {\r\n // We could do this.autoPauseData(realTime)[1] here but that seems less clear.\r\n // Using _ as an unused variable should be reasonable.\r\n // eslint-disable-next-line no-unused-vars\r\n const [_, realerTime] = this.autoPauseData(realTime);\r\n const effectivePeriods = this.realTimePeriodsWithBlackHoleEffective(realerTime, speedups);\r\n // This adds in time with black holes paused at the end of the list.\r\n effectivePeriods[0] += realTime - realerTime;\r\n return effectivePeriods\r\n .map((period, i) => Decimal.min(new Decimal(period).times(speedups[i]), 1e300))\r\n .sumD();\r\n },\r\n\r\n /**\r\n * Returns the amount of real time spent with each unlocked black hole\r\n * being the current \"effective\" black hole, that is, the active black hole\r\n * with the highest index.\r\n * For example:\r\n * active periods = [100, 20, 5] (100ms of real time, 20ms of black hole 1, 5ms of black hole 2)\r\n * effective periods = [80, 15, 5]\r\n * 80ms of effective real time, because black hole 1 will be running in total 20ms => 100 - 20\r\n * 15ms of effective black hole 1 time, because black hole 2 will be running in total 5ms => 20 - 5\r\n * 5ms of effective black hole 2 time, because no higher black hole overlaps it,\r\n * so it is effective for the whole active period\r\n * Note: even though more than one black hole can be active\r\n * (and thus effective) at once, the calling function first calculates the total speedups\r\n * while each black hole is the highest-index black hole that's active and then acts\r\n * as if only the highest-index black hole that's active is effective.\r\n */\r\n realTimePeriodsWithBlackHoleEffective(realTime) {\r\n const activePeriods = this.realTimePeriodsWithBlackHoleActive(realTime);\r\n const effectivePeriods = [];\r\n for (let i = 0; i < activePeriods.length - 1; i++) {\r\n effectivePeriods.push(activePeriods[i] - activePeriods[i + 1]);\r\n }\r\n effectivePeriods.push(activePeriods.last());\r\n return effectivePeriods;\r\n },\r\n\r\n /**\r\n * Returns an array of real time periods spent in each black hole\r\n * with first element being the \"no black hole\" state that is normal game.\r\n */\r\n realTimePeriodsWithBlackHoleActive(realTime) {\r\n const activePeriods = [realTime];\r\n for (const blackHole of this.list) {\r\n if (!blackHole.isUnlocked) break;\r\n const activeTime = blackHole.realTimeWhileActive(activePeriods.last());\r\n activePeriods.push(activeTime);\r\n }\r\n return activePeriods;\r\n },\r\n\r\n /**\r\n * Takes BH number (1 or 2) and number of steps to do in an internal BH simulation.\r\n * Returns real time until we can pause before given BH (i.e., we have a gap of at least 5 seconds before it),\r\n * or null if we can't pause before it.\r\n */\r\n timeToNextPause(bhNum, steps = 100) {\r\n if (bhNum === 1) {\r\n // This is a simple case that we can do mathematically.\r\n const bh = BlackHole(1);\r\n // If no blackhole gaps are as long as the warmup time, we never pause.\r\n if (bh.interval <= BlackHoles.ACCELERATION_TIME) {\r\n return null;\r\n }\r\n // Find the time until next activation.\r\n const t = (bh.isCharged ? bh.duration : 0) + bh.interval - bh.phase;\r\n // If the time until next activation is less than the acceleration time,\r\n // we have to wait until the activation after that;\r\n // otherwise, we can just use the next activation.\r\n return (t < BlackHoles.ACCELERATION_TIME)\r\n ? t + bh.duration + bh.interval - BlackHoles.ACCELERATION_TIME : t - BlackHoles.ACCELERATION_TIME;\r\n }\r\n // Look at the next 100 black hole transitions.\r\n // This is called every tick if BH pause setting is set to BH2, so we try to optimize it.\r\n // I think the bound of 100 means it can fail only in the case one black hole interval is under 5s\r\n // and the other isn't. In practice, by this point the other interval is usually about 15 seconds\r\n // and both durations are fairly long (a few minutes), making the longest that a gap between activations\r\n // can be 20 seconds (so it's fairly OK not to pause).\r\n // Precalculate some stuff that won't change (or in the case of charged and phases, stuff we'll change ourself\r\n // but just in this simulation) while we call this function.\r\n const charged = [BlackHole(1).isCharged, BlackHole(2).isCharged];\r\n const phases = [BlackHole(1).phase, BlackHole(2).phase];\r\n const durations = [BlackHole(1).duration, BlackHole(2).duration];\r\n const intervals = [BlackHole(1).interval, BlackHole(2).interval];\r\n // This is technically somewhat incorrect, because assuming durations aren't tiny, the maximum\r\n // possible gap between BH2 activations is the *sum* of the intervals. However, that's still 10 seconds\r\n // if this conditional is true, and pausing the BH because of a 10-second activation gap\r\n // doesn't seem to make much sense. If this is an issue, we could use the sum of the intervals.\r\n // This should also stop this function from being relatively computationally expensive\r\n // if both intervals are 3 seconds (so the next pause would be when they happen to align,\r\n // which is rare and will probably lead to a full 100 steps).\r\n if (intervals[0] <= BlackHoles.ACCELERATION_TIME && intervals[1] <= BlackHoles.ACCELERATION_TIME) {\r\n return null;\r\n }\r\n // Make a list of things to bound phase by.\r\n const phaseBoundList = [[intervals[0]], [durations[0], intervals[1]], [durations[0], durations[1]]];\r\n // Time tracking.\r\n let inactiveTime = 0;\r\n let totalTime = 0;\r\n for (let i = 0; i < steps; i++) {\r\n // Currently active BH (if BH1 and BH2 are both charged, 2,\r\n // if only BH1 is, 1, if BH1 isn't, 0 regardless of BH2).\r\n // eslint-disable-next-line no-nested-ternary\r\n const current = charged[0] ? (charged[1] ? 2 : 1) : 0;\r\n // Get the list of phase bounds.\r\n const phaseBounds = phaseBoundList[current];\r\n // Compute time until some phase reaches its bound.\r\n const minTime = current > 0 ? Math.min(phaseBounds[0] - phases[0], phaseBounds[1] - phases[1])\r\n : phaseBounds[0] - phases[0];\r\n if (current === 2) {\r\n // Check if there was enough time before this activation to pause.\r\n if (inactiveTime >= BlackHoles.ACCELERATION_TIME) {\r\n return totalTime - BlackHoles.ACCELERATION_TIME;\r\n }\r\n // Not enough time, reset inactive time to 0.\r\n inactiveTime = 0;\r\n } else {\r\n // BH2 is inactive, add to inactive time.\r\n inactiveTime += minTime;\r\n }\r\n // Add to total time in any case.\r\n totalTime += minTime;\r\n // If BH1 is active we should update BH2.\r\n if (current > 0) {\r\n phases[1] += minTime;\r\n if (phases[1] >= phaseBounds[1]) {\r\n charged[1] = !charged[1];\r\n phases[1] -= phaseBounds[1];\r\n }\r\n }\r\n // Update BH1 no matter what.\r\n phases[0] += minTime;\r\n if (phases[0] >= phaseBounds[0]) {\r\n charged[0] = !charged[0];\r\n phases[0] -= phaseBounds[0];\r\n }\r\n }\r\n // We didn't activate so we return null.\r\n return null;\r\n },\r\n\r\n /**\r\n * Takes amount of real time.\r\n * Returns 2-item array:\r\n * [will BH be paused in the given amount of real time, real time until pause if so].\r\n */\r\n autoPauseData(realTime) {\r\n // This can be called when determining offline time if the black holes are already paused.\r\n // In that case we don't need to pause them (need to pause = false), but they're already paused (0 time).\r\n // This saves us some computation.\r\n if (this.arePaused) return [false, 0];\r\n if (player.blackHoleAutoPauseMode === BLACK_HOLE_PAUSE_MODE.NO_PAUSE) {\r\n return [false, realTime];\r\n }\r\n const timeLeft = this.timeToNextPause(player.blackHoleAutoPauseMode);\r\n // Cases in which we don't pause in the given amount of real time:\r\n // null = no pause, (timeLeft < 1e-9) = we auto-paused and there was maybe rounding error,\r\n // now the player's unpaused at this exact point (so we shouldn't pause again),\r\n // (timeLeft > realTime) = we will pause but it'll take longer than the given time.\r\n if (timeLeft === null || timeLeft < 1e-9 || timeLeft > realTime) {\r\n return [false, realTime];\r\n }\r\n return [true, timeLeft];\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { SpeedrunMilestones } from \"./speedrun\";\r\n\r\nclass ExpoBlackHoleUpgradeState {\r\n constructor(config) {\r\n const { getAmount, setAmount, calculateValue, initialCost, costMult } = config;\r\n this.incrementAmount = () => setAmount(getAmount() + 1);\r\n this._lazyValue = new Lazy(() => calculateValue(getAmount()));\r\n this._lazyCost = new Lazy(() => getHybridCostScaling(getAmount(),\r\n 1e30,\r\n initialCost,\r\n costMult,\r\n 0.2,\r\n 1e5,\r\n 10));\r\n this.id = config.id;\r\n this.hasAutobuyer = config.hasAutobuyer;\r\n this.onPurchase = config.onPurchase;\r\n }\r\n\r\n get value() {\r\n return this._lazyValue.value;\r\n }\r\n\r\n get cost() {\r\n return this._lazyCost.value.toNumber();\r\n }\r\n\r\n get isAffordable() {\r\n return (Currency.imaginaryMachines.value.toDecimal()).gte(this.cost);\r\n }\r\n\r\n purchase() {\r\n if (!this.isAffordable || this.value === 0) return;\r\n\r\n // Keep the cycle phase consistent before and after purchase so that upgrading doesn't cause weird behavior\r\n // such as immediately activating it when inactive (or worse, skipping past the active segment entirely).\r\n const bh = ExpoBlackHole(this.id);\r\n const beforeProg = bh.isCharged ? 1 - bh.stateProgress : bh.stateProgress;\r\n\r\n player.reality.imaginaryMachines -= this.cost;\r\n this.incrementAmount();\r\n this._lazyValue.invalidate();\r\n this._lazyCost.invalidate();\r\n if (this.onPurchase) {\r\n this.onPurchase();\r\n }\r\n\r\n // Adjust the phase to what it was before purchase by changing it directly. This will often result in passing\r\n // in a negative argument to updatePhase(), but this shouldn't cause any problems because it'll never make\r\n // the phase itself negative. In very rare cases this may result in a single auto-pause getting skipped\r\n const stateTime = bh.isCharged ? bh.duration : bh.interval;\r\n bh.updatePhase(stateTime * beforeProg - bh.phase);\r\n\r\n // Prevents a rare edge case where the player makes an inactive black hole permanent, locking themselves into\r\n // a permanently inactive black hole\r\n if (bh.isPermanent) player.expoBlackHole[this.id - 1].active = true;\r\n\r\n EventHub.dispatch(GAME_EVENT.EXPO_BLACK_HOLE_UPGRADE_BOUGHT);\r\n }\r\n}\r\n\r\nclass ExpoBlackHoleState {\r\n constructor(id) {\r\n this.id = id + 1;\r\n const expoBlackHoleCostMultipliers = [1, 1e9];\r\n // Interval: starts at 3600, x0.8 per upgrade, upgrade cost goes x3.5, starts at 15\r\n this.intervalUpgrade = new ExpoBlackHoleUpgradeState({\r\n id: this.id,\r\n getAmount: () => this._data.intervalUpgrades,\r\n setAmount: amount => this._data.intervalUpgrades = amount,\r\n calculateValue: amount => (3600 / (Math.pow(10, id))) * Math.pow(0.8, amount),\r\n initialCost: 1e15 * expoBlackHoleCostMultipliers[id],\r\n costMult: 1000,\r\n hasAutobuyer: false,\r\n onPurchase: () => {\r\n if (!this.isCharged) {\r\n this._data.phase = Math.clampMax(this.interval, this._data.phase);\r\n }\r\n }\r\n });\r\n // Power: starts at 5, x1.35 per upgrade, cost goes x2, starts at 20\r\n this.powerUpgrade = new ExpoBlackHoleUpgradeState({\r\n id: this.id,\r\n getAmount: () => this._data.powerUpgrades,\r\n setAmount: amount => this._data.powerUpgrades = amount,\r\n calculateValue: amount => Math.pow(1.05, amount), //add softcap at (^1.3)\r\n initialCost: 1e15 * expoBlackHoleCostMultipliers[id],\r\n costMult: 1e6, //cost scaling at 1e50 iM?\r\n hasAutobuyer: true\r\n });\r\n // Duration: starts at 10, x1.5 per upgrade, cost goes x4, starts at 10\r\n this.durationUpgrade = new ExpoBlackHoleUpgradeState({\r\n id: this.id,\r\n getAmount: () => this._data.durationUpgrades,\r\n setAmount: amount => this._data.durationUpgrades = amount,\r\n calculateValue: amount => (10 - (id) * 3) * Math.pow(1.3, amount),\r\n initialCost: 10 * expoBlackHoleCostMultipliers[id],\r\n costMult: 4,\r\n hasAutobuyer: false\r\n });\r\n }\r\n\r\n /**\r\n * @private\r\n */\r\n get _data() {\r\n return player.expoBlackHole[this.id - 1];\r\n }\r\n\r\n /**\r\n * Exists to avoid recursion in calculation of whether the black hole is permanent.\r\n */\r\n get rawInterval() {\r\n return this.intervalUpgrade.value;// * Achievement(145).effectOrDefault(1);\r\n }\r\n\r\n /**\r\n * Amount of time the black hole is inactive for between activations.\r\n */\r\n get interval() {\r\n return this.isPermanent ? 0 : this.rawInterval;\r\n }\r\n\r\n /**\r\n * Multiplier to time the black hole gives when active.\r\n */\r\n get power() {\r\n return this.powerUpgrade.value;// * Achievement(158).effectOrDefault(1);\r\n }\r\n\r\n /**\r\n * Amount of time the black hole is active for.\r\n */\r\n get duration() {\r\n return this.durationUpgrade.value;// * Achievement(155).effectOrDefault(1);\r\n }\r\n\r\n get isUnlocked() {\r\n return (this._data.unlocked && !Enslaved.isRunning && !Pelle.isDisabled(\"blackhole\") && Ra.unlocks.unlock3rdBH.isUnlocked);\r\n }\r\n\r\n get isCharged() {\r\n return this._data.active;\r\n }\r\n\r\n get timeWithPreviousActiveToNextStateChange() {\r\n return this.isCharged ? this.duration - this.phase : this.interval - this.phase;\r\n }\r\n\r\n // When inactive, returns time until active; when active, returns time until inactive (or paused for hole 2)\r\n get timeToNextStateChange() {\r\n const remainingTime = this.timeWithPreviousActiveToNextStateChange;\r\n\r\n if (this.id === 1) return remainingTime;\r\n\r\n // 2nd hole activation logic (not bothering generalizing since we're not adding that 3rd hole again)\r\n if (this.isCharged) {\r\n if (BlackHole(1).isCharged) return Math.min(remainingTime, BlackHole(1).timeToNextStateChange);\r\n return BlackHole(1).timeToNextStateChange;\r\n }\r\n return BlackHole(1).timeUntilTimeActive(remainingTime);\r\n }\r\n\r\n // Given x, return time it takes for this black hole to get x time active\r\n timeUntilTimeActive(inputTimeActive) {\r\n // Avoid error about reassigning parameter.\r\n let timeActive = inputTimeActive;\r\n if (this.isCharged) {\r\n // We start at the next full activation, so if we have a partial activation\r\n // then that reduces the time required.\r\n // Make sure to handle the case when the current partial activation is enough.\r\n if (timeActive < this.timeToNextStateChange) return timeActive;\r\n // If it's not enough, we can subtract it from our time.\r\n timeActive -= this.timeToNextStateChange;\r\n }\r\n // Determine the time until the next full activation.\r\n let totalTime = this.isCharged\r\n ? this.timeToNextStateChange + this.interval\r\n : this.timeToNextStateChange;\r\n // This is the number of full cycles needed...\r\n totalTime += Math.floor(timeActive / this.duration) * this.cycleLength;\r\n // And the time from a partial cycle.\r\n totalTime += timeActive % this.duration;\r\n return totalTime;\r\n }\r\n\r\n // This is a value which counts up from 0 to 1 when inactive, and 1 to 0 when active\r\n get stateProgress() {\r\n if (this.isCharged) {\r\n return 1 - this.phase / this.duration;\r\n }\r\n return this.phase / this.interval;\r\n }\r\n\r\n // The logic to determine what state the black hole is in for displaying is nontrivial and used in multiple places\r\n get displayState() {\r\n if (Pelle.isDisabled(\"blackhole\")) return ` Disabled`;\r\n if (Enslaved.isAutoReleasing) {\r\n if (Enslaved.autoReleaseTick < 3) return ` Pulsing`;\r\n return ` Pulsing`;\r\n }\r\n if (Enslaved.isStoringGameTime) return ` Charging`;\r\n if (BlackHoles.areNegative) return ` Inverted`;\r\n if (BlackHoles.arePaused) return ` Paused`;\r\n if (this.isPermanent) return ` Permanent`;\r\n\r\n const timeString = TimeSpan.fromSeconds(this.timeToNextStateChange).toStringShort(true);\r\n if (this.isActive) return ` Active (${timeString})`;\r\n return ` Inactive (${timeString})`;\r\n }\r\n\r\n get isActive() {\r\n return this.isCharged && (this.id === 1 || BlackHole(this.id - 1).isActive) && !Pelle.isDisabled(\"blackhole\") && !BlackHoles.areNegative;\r\n }\r\n\r\n // Proportion of active time, scaled 0 to 1\r\n get dutyCycle() {\r\n return this.duration / (this.rawInterval + this.duration);\r\n }\r\n\r\n get isPermanent() {\r\n return this.dutyCycle >= 0.9999 || MendingMilestone.three.isReached;\r\n }\r\n\r\n /**\r\n * Amount of time the black hole has spent since last state transition,\r\n * so if it's active, it's the amount of time it's been active for, and if it's inactive,\r\n * it's the amount of time it's been inactive for.\r\n */\r\n get phase() {\r\n return this._data.phase;\r\n }\r\n\r\n get cycleLength() {\r\n return this.interval + this.duration;\r\n }\r\n\r\n updatePhase(activePeriod) {\r\n if (this.isPermanent) return;\r\n // Prevents a flickering black hole if phase gets set too high\r\n // (shouldn't ever happen in practice). Also, more importantly,\r\n // should work even if activePeriods[i] is very large. To check:\r\n // This used to always use the period of blackHole[0], now it doesn't,\r\n // will this cause other bugs?\r\n this._data.phase += activePeriod;\r\n\r\n if (this.phase >= this.cycleLength) {\r\n // One activation for each full cycle.\r\n this._data.activations += Math.floor(this.phase / this.cycleLength);\r\n this._data.phase %= this.cycleLength;\r\n }\r\n if (this.isCharged) {\r\n if (this.phase >= this.duration) {\r\n this._data.phase -= this.duration;\r\n this._data.active = false;\r\n if (GameUI.notify.showBlackHoles) {\r\n GameUI.notify.blackHole(`${this.description(true)} duration ended.`);\r\n }\r\n }\r\n } else if (this.phase >= this.interval) {\r\n this._data.phase -= this.interval;\r\n this._data.activations++;\r\n this._data.active = true;\r\n if (GameUI.notify.showBlackHoles) {\r\n GameUI.notify.blackHole(`${this.description(true)} has activated!`);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Given the time for which the previous black hole is active,\r\n * this function returns the time for which current black hole is active.\r\n * For example, for BlackHole(2), this function, given\r\n * the time for which for BlackHole(1) is active, will return the time for which\r\n * BlackHole(2) is active during that time.\r\n */\r\n realTimeWhileActive(time) {\r\n const nextDeactivation = this.timeUntilNextDeactivation;\r\n const cooldown = this.interval;\r\n const duration = this.duration;\r\n const fullCycle = this.cycleLength;\r\n const currentActivationDuration = Math.min(nextDeactivation, duration);\r\n const activeCyclesUntilLastDeactivation = Math.floor((time - nextDeactivation) / fullCycle);\r\n const activeTimeUntilLastDeactivation = duration * activeCyclesUntilLastDeactivation;\r\n const timeLeftAfterLastDeactivation = (time - nextDeactivation + fullCycle) % fullCycle;\r\n const lastActivationDuration = Math.max(timeLeftAfterLastDeactivation - cooldown, 0);\r\n return currentActivationDuration + activeTimeUntilLastDeactivation + lastActivationDuration;\r\n }\r\n\r\n /**\r\n * Returns the time that the previous black hole must be active until the next change\r\n * from the active state to the inactive state. For example, for BlackHole(2),\r\n * this function will return the time BlackHole(1) must be active for BlackHole(2)\r\n * to transition to the inactive state. This is useful since BlackHole(2)'s phase\r\n * only increases (that is, its state only changes) while BlackHole(1) is active.\r\n * In general, a black hole only changes state while the previous black hole is active.\r\n * So figuring out how long a black hole would be active after some amount of real time\r\n * (as we do) is best done iteratively via figuring out how long a black hole would be active\r\n * after a given amount of time of the previous black hole being active.\r\n */\r\n get timeUntilNextDeactivation() {\r\n if (this.isCharged) {\r\n return this.duration - this.phase;\r\n }\r\n return this.cycleLength - this.phase;\r\n }\r\n\r\n description(capitalized) {\r\n return `Black Hole ${this.id + 2}`\r\n /*if (RealityUpgrade(20).isBought) {\r\n return `Black Hole ${this.id}`;\r\n }\r\n return capitalized ? \"The Black Hole\" : \"the Black Hole\";*/\r\n }\r\n}\r\n\r\nExpoBlackHoleState.list = Array.range(0, 1).map(id => new ExpoBlackHoleState(id));\r\n\r\n/**\r\n * @param {number} id\r\n * @return {ExpoBlackHoleState}\r\n */\r\nexport function ExpoBlackHole(id) {\r\n return ExpoBlackHoleState.list[id - 1];\r\n}\r\n\r\nexport const ExpoBlackHoles = {\r\n // In seconds\r\n ACCELERATION_TIME: 5,\r\n /**\r\n * @return {ExpoBlackHoleState[]}\r\n */\r\n get list() {\r\n return ExpoBlackHoleState.list;\r\n },\r\n\r\n get canBeUnlocked() {\r\n return Ra.unlocks.unlock3rdBH.isUnlocked && !this.areUnlocked;\r\n },\r\n\r\n get areUnlocked() {\r\n return ExpoBlackHole(1).isUnlocked;\r\n },\r\n\r\n unlock() {\r\n if (!this.canBeUnlocked) return;\r\n player.expoBlackHole[0].unlocked = true;\r\n //Currency.imaginaryMachines.purchase(100);\r\n //player.records.timePlayedAtBHUnlock = PlayerProgress.mendingUnlocked() ? player.records.thisMend.time : player.records.totalTimePlayed;\r\n EventHub.dispatch(GAME_EVENT.EXPO_BLACK_HOLE_UNLOCKED);\r\n },\r\n\r\n togglePause: (automatic = false) => {\r\n if (!ExpoBlackHoles.areUnlocked) return;\r\n /*const maxInversion = player.requirementChecks.reality.slowestBH <= 1e-300;\r\n if (ImaginaryUpgrade(24).isLockingMechanics && Ra.isRunning && maxInversion) {\r\n if (!automatic) ImaginaryUpgrade(24).tryShowWarningModal(\"uninvert your Black Hole\");\r\n return;\r\n }*/\r\n //if (player.expoBlackHolePause) player.requirementChecks.reality.slowestBH = 1;\r\n player.expoBlackHolePause = !player.expoBlackHolePause;\r\n player.expoBlackHolePauseTime = player.records.realTimePlayed;\r\n const expoBlackHoleString = `Black Hole ${format(this.id + 2)}`;\r\n // If black holes are going unpaused -> paused, use \"inverted\" or \"paused\" depending o\r\n // whether the player's using negative BH (i.e. BH inversion); if going paused -> unpaused,\r\n // use \"unpaused\".\r\n // eslint-disable-next-line no-nested-ternary\r\n const pauseType = player.expoBlackHolePause ? (ExpoBlackHoles.areNegative ? \"inverted\" : \"paused\") : \"unpaused\";\r\n const automaticString = automatic ? \"automatically \" : \"\";\r\n GameUI.notify.blackHole(`${expoBlackHoleString} ${automaticString}${pauseType}`);\r\n },\r\n\r\n get unpauseAccelerationFactor() {\r\n if (this.arePermanent) return 1;\r\n return Math.clamp((player.records.realTimePlayed - player.expoBlackHolePauseTime) /\r\n (1000 * this.ACCELERATION_TIME), 0, 1);\r\n },\r\n\r\n get arePaused() {\r\n return player.expoBlackHolePause;\r\n },\r\n\r\n get areNegative() {\r\n return this.arePaused && !Laitela.isRunning && player.expoBlackHoleNegative < 1;\r\n },\r\n\r\n get arePermanent() {\r\n return ExpoBlackHoles.list.every(bh => bh.isPermanent);\r\n },\r\n\r\n updatePhases(expoBlackHoleDiff) {\r\n if (!this.areUnlocked || this.arePaused) return;\r\n // This code is intended to successfully update the black hole phases\r\n // even for very large values of blackHoleDiff.\r\n // With auto-pause settings, this code also has to take account of that.\r\n const rawSeconds = expoBlackHoleDiff / 1000;\r\n const [autoPause, seconds] = this.autoPauseData(rawSeconds);\r\n const activePeriods = this.realTimePeriodsWithBlackHoleActive(seconds, true);\r\n for (const expoBlackHole of this.list) {\r\n if (!expoBlackHole.isUnlocked) break;\r\n expoBlackHole.updatePhase(activePeriods[expoBlackHole.id - 1]);\r\n }\r\n if (autoPause) {\r\n ExpoBlackHoles.togglePause(true);\r\n }\r\n },\r\n\r\n /**\r\n * This function takes the total real time spent offline,\r\n * a number of ticks to simulate, a tolerance for how far ticks can be\r\n * from average (explained later), and returns a single realTickTime and\r\n * blackHoleSpeed representing the real time taken up by the first simulated tick\r\n * and the game speed due to black holess during it.\r\n *\r\n * This code makes sure that the following conditions are satisfied:\r\n * 1: realTickTime * blackHoleSpeed is exactly (up to some small\r\n * multiple of floating-point precision) the game time which would be spent\r\n * after realTickTime real time, accounting for black holess\r\n * (but not for anything else).\r\n * 2: No tick contains too much (more than a constant multiple of\r\n * the mean game time per tick) of the game time.\r\n * 3: No tick has negative or zero real time or (equivalently)\r\n * negative or zero game time.\r\n * Note that Patashu has convinced me that we do not want the property\r\n * \"No tick contains too much (more than a constant multiple of the\r\n * mean real time per tick) of the real time.\" There's no reason to have it\r\n * aside from the edge cases of EC12 (and if you're going offline during EC12\r\n * then you should expect technically correct but somewhat annoying behavior)\r\n * and auto EC completion (but auto EC completion shouldn't be that much\r\n * of an issue).\r\n */\r\n calculateOfflineTick(totalRealTime, numberOfTicks, tolerance) {\r\n // Cache speedups, so calculateGameTimeFromRealTime doesn't recalculate them every time.\r\n const speedups = this.calculateSpeedups();\r\n const totalGameTime = this.calculateGameTimeFromRealTime(totalRealTime, speedups);\r\n // We have this special case just in case some floating-point mess prevents\r\n // binarySearch from working in the numberOfTicks = 1 case.\r\n // I doubt that's possible but it seems worth handling just in case.\r\n if (numberOfTicks === 1) {\r\n return [totalRealTime, totalGameTime.div(totalRealTime)];\r\n }\r\n // We want calculateGameTimeFromRealTime(realTickTime, speedups) * numberOfTicks / totalGameTime to be roughly 1\r\n // (that is, the tick taking realTickTime real time has roughly average length in terms of game time).\r\n // We use binary search because it has somewhat better worst-case behavior than linear interpolation search here.\r\n // Suppose you have 3000 seconds without a black hole and then 100 seconds of a black hole with 3000x power,\r\n // and you want to find when 4000 seconds of game time have elapsed. With binary search it will take only\r\n // 20 steps or so to get reasonable accuracy, but with linear interpolation it will take about 100 steps.\r\n // These extra steps might always average out with cases where linear interpolation is quicker though.\r\n const realTickTime = this.decimalBinarySearch(\r\n 0,\r\n totalRealTime,\r\n x => this.calculateGameTimeFromRealTime(x, speedups) .times(numberOfTicks).div(totalGameTime),\r\n 1,\r\n tolerance\r\n );\r\n const expoBlackHoleSpeedup = this.calculateGameTimeFromRealTime(realTickTime, speedups).div(realTickTime);\r\n return [realTickTime, expoBlackHoleSpeedup];\r\n },\r\n\r\n /**\r\n * Standard implementation of binary search for a monotone increasing function.\r\n * The only unusual thing is tolerance, which is a bound on\r\n * Math.abs(evaluationFunction(result) - target).\r\n */\r\n // eslint-disable-next-line max-params\r\n binarySearch(start, end, evaluationFunction, target, tolerance) {\r\n let middle;\r\n for (let iter = 0; iter < 100; ++iter) {\r\n middle = (start + end) / 2;\r\n const error = evaluationFunction(middle) - target;\r\n if (Math.abs(error) < tolerance) break;\r\n if (error < 0) {\r\n // eslint-disable-next-line no-param-reassign\r\n start = middle;\r\n } else {\r\n // eslint-disable-next-line no-param-reassign\r\n end = middle;\r\n }\r\n }\r\n return middle;\r\n },\r\n\r\n decimalBinarySearch(start, end, evaluationFunction, target, tolerance) {\r\n let middle;\r\n for (let iter = 0; iter < 100; ++iter) {\r\n middle = (start + end) / 2;\r\n const error = evaluationFunction(middle).sub(target);\r\n if (Decimal.abs(error).lt(tolerance)) break;\r\n if (error.lt(0)) {\r\n // eslint-disable-next-line no-param-reassign\r\n start = middle;\r\n } else {\r\n // eslint-disable-next-line no-param-reassign\r\n end = middle;\r\n }\r\n }\r\n return middle;\r\n },\r\n\r\n /**\r\n * Returns a list of length (number of unlocked black holes + 1),\r\n * where each element is the *total* speedup while that black hole\r\n * is the highest-numbered black hole active, the black holes being numbered\r\n * starting from black hole 1 and black hole 0 being normal game.\r\n */\r\n calculateSpeedups() {\r\n const effectsToConsider = [GAME_SPEED_EFFECT.FIXED_SPEED, GAME_SPEED_EFFECT.TIME_GLYPH,\r\n GAME_SPEED_EFFECT.SINGULARITY_MILESTONE, GAME_SPEED_EFFECT.NERFS, GAME_SPEED_EFFECT.BLACK_HOLE];\r\n const speedupWithoutExpoBlackHole = getGameSpeedupFactor(effectsToConsider);\r\n const speedups = [1];\r\n effectsToConsider.push(GAME_SPEED_EFFECT.EXPO_BLACK_HOLE);\r\n // Crucial thing: this works even if the black holes are paused, it's just that the speedups will be 1.\r\n for (const expoBlackHole of this.list) {\r\n if (!expoBlackHole.isUnlocked) break;\r\n speedups.push(getGameSpeedupFactor(effectsToConsider, expoBlackHole.id).div(speedupWithoutExpoBlackHole));\r\n }\r\n return speedups;\r\n },\r\n\r\n calculateGameTimeFromRealTime(realTime, speedups) {\r\n // We could do this.autoPauseData(realTime)[1] here but that seems less clear.\r\n // Using _ as an unused variable should be reasonable.\r\n // eslint-disable-next-line no-unused-vars\r\n const [_, realerTime] = this.autoPauseData(realTime);\r\n const effectivePeriods = this.realTimePeriodsWithBlackHoleEffective(realerTime, speedups);\r\n // This adds in time with black holes paused at the end of the list.\r\n effectivePeriods[0] += realTime - realerTime;\r\n return effectivePeriods\r\n .map((period, i) => Decimal.min(new Decimal(period).times(speedups[i]), 1e300))\r\n .sumD();\r\n },\r\n\r\n /**\r\n * Returns the amount of real time spent with each unlocked black hole\r\n * being the current \"effective\" black hole, that is, the active black hole\r\n * with the highest index.\r\n * For example:\r\n * active periods = [100, 20, 5] (100ms of real time, 20ms of black hole 1, 5ms of black hole 2)\r\n * effective periods = [80, 15, 5]\r\n * 80ms of effective real time, because black hole 1 will be running in total 20ms => 100 - 20\r\n * 15ms of effective black hole 1 time, because black hole 2 will be running in total 5ms => 20 - 5\r\n * 5ms of effective black hole 2 time, because no higher black hole overlaps it,\r\n * so it is effective for the whole active period\r\n * Note: even though more than one black hole can be active\r\n * (and thus effective) at once, the calling function first calculates the total speedups\r\n * while each black hole is the highest-index black hole that's active and then acts\r\n * as if only the highest-index black hole that's active is effective.\r\n */\r\n realTimePeriodsWithBlackHoleEffective(realTime) {\r\n const activePeriods = this.realTimePeriodsWithBlackHoleActive(realTime);\r\n const effectivePeriods = [];\r\n for (let i = 0; i < activePeriods.length - 1; i++) {\r\n effectivePeriods.push(activePeriods[i] - activePeriods[i + 1]);\r\n }\r\n effectivePeriods.push(activePeriods.last());\r\n return effectivePeriods;\r\n },\r\n\r\n /**\r\n * Returns an array of real time periods spent in each black hole\r\n * with first element being the \"no black hole\" state that is normal game.\r\n */\r\n realTimePeriodsWithBlackHoleActive(realTime) {\r\n const activePeriods = [realTime];\r\n for (const expoBlackHole of this.list) {\r\n if (!expoBlackHole.isUnlocked) break;\r\n const activeTime = expoBlackHole.realTimeWhileActive(activePeriods.last());\r\n activePeriods.push(activeTime);\r\n }\r\n return activePeriods;\r\n },\r\n\r\n /**\r\n * Takes BH number (1 or 2) and number of steps to do in an internal BH simulation.\r\n * Returns real time until we can pause before given BH (i.e., we have a gap of at least 5 seconds before it),\r\n * or null if we can't pause before it.\r\n */\r\n timeToNextPause(ebhNum, steps = 100) {\r\n if (ebhNum === 1) {\r\n // This is a simple case that we can do mathematically.\r\n const bh = ExpoBlackHole(1);\r\n // If no blackhole gaps are as long as the warmup time, we never pause.\r\n if (bh.interval <= ExpoBlackHoles.ACCELERATION_TIME) {\r\n return null;\r\n }\r\n // Find the time until next activation.\r\n const t = (bh.isCharged ? bh.duration : 0) + bh.interval - bh.phase;\r\n // If the time until next activation is less than the acceleration time,\r\n // we have to wait until the activation after that;\r\n // otherwise, we can just use the next activation.\r\n return (t < ExpoBlackHoles.ACCELERATION_TIME)\r\n ? t + bh.duration + bh.interval - ExpoBlackHoles.ACCELERATION_TIME : t - ExpoBlackHoles.ACCELERATION_TIME;\r\n }\r\n // Look at the next 100 black hole transitions.\r\n // This is called every tick if BH pause setting is set to BH2, so we try to optimize it.\r\n // I think the bound of 100 means it can fail only in the case one black hole interval is under 5s\r\n // and the other isn't. In practice, by this point the other interval is usually about 15 seconds\r\n // and both durations are fairly long (a few minutes), making the longest that a gap between activations\r\n // can be 20 seconds (so it's fairly OK not to pause).\r\n // Precalculate some stuff that won't change (or in the case of charged and phases, stuff we'll change ourself\r\n // but just in this simulation) while we call this function.\r\n const charged = [ExpoBlackHole(1).isCharged, ExpoBlackHole(2).isCharged];\r\n const phases = [ExpoBlackHole(1).phase, ExpoBlackHole(2).phase];\r\n const durations = [ExpoBlackHole(1).duration, ExpoBlackHole(2).duration];\r\n const intervals = [ExpoBlackHole(1).interval, ExpoBlackHole(2).interval];\r\n // This is technically somewhat incorrect, because assuming durations aren't tiny, the maximum\r\n // possible gap between BH2 activations is the *sum* of the intervals. However, that's still 10 seconds\r\n // if this conditional is true, and pausing the BH because of a 10-second activation gap\r\n // doesn't seem to make much sense. If this is an issue, we could use the sum of the intervals.\r\n // This should also stop this function from being relatively computationally expensive\r\n // if both intervals are 3 seconds (so the next pause would be when they happen to align,\r\n // which is rare and will probably lead to a full 100 steps).\r\n if (intervals[0] <= ExpoBlackHoles.ACCELERATION_TIME && intervals[1] <= ExpoBlackHoles.ACCELERATION_TIME) {\r\n return null;\r\n }\r\n // Make a list of things to bound phase by.\r\n const phaseBoundList = [[intervals[0]], [durations[0], intervals[1]], [durations[0], durations[1]]];\r\n // Time tracking.\r\n let inactiveTime = 0;\r\n let totalTime = 0;\r\n for (let i = 0; i < steps; i++) {\r\n // Currently active BH (if BH1 and BH2 are both charged, 2,\r\n // if only BH1 is, 1, if BH1 isn't, 0 regardless of BH2).\r\n // eslint-disable-next-line no-nested-ternary\r\n const current = charged[0] ? (charged[1] ? 2 : 1) : 0;\r\n // Get the list of phase bounds.\r\n const phaseBounds = phaseBoundList[current];\r\n // Compute time until some phase reaches its bound.\r\n const minTime = current > 0 ? Math.min(phaseBounds[0] - phases[0], phaseBounds[1] - phases[1])\r\n : phaseBounds[0] - phases[0];\r\n if (current === 2) {\r\n // Check if there was enough time before this activation to pause.\r\n if (inactiveTime >= ExpoBlackHoles.ACCELERATION_TIME) {\r\n return totalTime - ExpoBlackHoles.ACCELERATION_TIME;\r\n }\r\n // Not enough time, reset inactive time to 0.\r\n inactiveTime = 0;\r\n } else {\r\n // BH2 is inactive, add to inactive time.\r\n inactiveTime += minTime;\r\n }\r\n // Add to total time in any case.\r\n totalTime += minTime;\r\n // If BH1 is active we should update BH2.\r\n if (current > 0) {\r\n phases[1] += minTime;\r\n if (phases[1] >= phaseBounds[1]) {\r\n charged[1] = !charged[1];\r\n phases[1] -= phaseBounds[1];\r\n }\r\n }\r\n // Update BH1 no matter what.\r\n phases[0] += minTime;\r\n if (phases[0] >= phaseBounds[0]) {\r\n charged[0] = !charged[0];\r\n phases[0] -= phaseBounds[0];\r\n }\r\n }\r\n // We didn't activate so we return null.\r\n return null;\r\n },\r\n\r\n /**\r\n * Takes amount of real time.\r\n * Returns 2-item array:\r\n * [will BH be paused in the given amount of real time, real time until pause if so].\r\n */\r\n autoPauseData(realTime) {\r\n // This can be called when determining offline time if the black holes are already paused.\r\n // In that case we don't need to pause them (need to pause = false), but they're already paused (0 time).\r\n // This saves us some computation.\r\n if (this.arePaused) return [false, 0];\r\n if (player.expoBlackHoleAutoPauseMode === EXPO_BLACK_HOLE_PAUSE_MODE.NO_PAUSE) {\r\n return [false, realTime];\r\n }\r\n const timeLeft = this.timeToNextPause(player.expoBlackHoleAutoPauseMode);\r\n // Cases in which we don't pause in the given amount of real time:\r\n // null = no pause, (timeLeft < 1e-9) = we auto-paused and there was maybe rounding error,\r\n // now the player's unpaused at this exact point (so we shouldn't pause again),\r\n // (timeLeft > realTime) = we will pause but it'll take longer than the given time.\r\n if (timeLeft === null || timeLeft < 1e-9 || timeLeft > realTime) {\r\n return [false, realTime];\r\n }\r\n return [true, timeLeft];\r\n }\r\n};\r\n","import { DC } from \"./constants\";\r\nimport { corruptionPenalties } from \"./secret-formula/mending/corruption\";\r\n\r\nexport const MachineHandler = {\r\n get baseRMCap() { return DC.E1000; },\r\n\r\n get hardcapRM() {\r\n let primeAnswer = this.baseRMCap.times(ImaginaryUpgrade(6).effectValue)\r\n if(player.celestials.ra.upgrades.has('teresaUpgrade')) primeAnswer=primeAnswer.times(Decimal.pow(player.celestials.teresa.bestRunAM.exponent,5))\r\n return primeAnswer;\r\n },\r\n\r\n get distanceToRMCap() {\r\n return this.hardcapRM.minus(Currency.realityMachines.value);\r\n },\r\n\r\n get realityMachineMultiplier() {\r\n return ShopPurchase.RMPurchases.currentMult * Teresa.rmMultiplier * Effects.max(1, PerkShopUpgrade.rmMult) *\r\n getAdjustedGlyphEffect(\"effarigrm\") * Achievement(167).effectOrDefault(1);\r\n },\r\n\r\n get uncappedRM() {\r\n let log10FinalEP = player.records.thisReality.maxEP.plus(gainedEternityPoints()).log10();\r\n if (!PlayerProgress.realityUnlocked()) {\r\n if (log10FinalEP > 8000) log10FinalEP = 8000;\r\n if (log10FinalEP > 6000) log10FinalEP -= (log10FinalEP - 6000) * 0.75;\r\n }\r\n let rmGain = DC.E3.pow(log10FinalEP / 4000 - 1);\r\n // Increase base RM gain if <10 RM\r\n if (rmGain.gte(1) && rmGain.lt(10)) rmGain = new Decimal(27 / 4000 * log10FinalEP - 26);\r\n rmGain = rmGain.times(this.realityMachineMultiplier);\r\n if (player.mending.corruptionChallenge.corruptedMend) {\r\n let corruptionPrestigeLimits = corruptionPenalties.prestigeLimits[player.mending.corruption[0]];\r\n if(CorruptionUpgrade(16).isBought) corruptionPrestigeLimits = Math.min(1,corruptionPrestigeLimits*2)\r\n rmGain = rmGain.pow(corruptionPrestigeLimits)\r\n rmGain = rmGain.pow(corruptionPenalties.repSing.presGain[player.mending.corruption[8]])\r\n }\r\n return rmGain.floor();\r\n },\r\n\r\n get gainedRealityMachines() {\r\n return this.uncappedRM.clampMax(this.hardcapRM);\r\n },\r\n\r\n get isIMUnlocked() {\r\n return Currency.realityMachines.value.gte(this.hardcapRM) || Currency.imaginaryMachines.gt(0);\r\n },\r\n\r\n get baseIMCap() {\r\n return (Math.pow(Math.clampMin(this.uncappedRM.log10() - 1000, 0), 2)) *\r\n (Math.pow(Math.clampMin(this.uncappedRM.log10() - 100000, 1), 0.2));\r\n },\r\n\r\n get currentIMCap() {\r\n let x = Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked ? Math.pow(getAdjustedGlyphEffect(\"effarigrm\"), 0.5) : 1;\r\n return player.reality.iMCap * ImaginaryUpgrade(13).effectOrDefault(1) * x * Ra.unlocks.imaginaryBoost.effectOrDefault(1);\r\n },\r\n\r\n // This is iM cap based on in-game values at that instant, may be lower than the actual cap\r\n get projectedIMCap() {\r\n return this.baseIMCap * ImaginaryUpgrade(13).effectOrDefault(1) * (Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked ? Math.pow(getAdjustedGlyphEffect(\"effarigrm\"), 0.5) : 1);\r\n },\r\n\r\n // Use iMCap to store the base cap; applying multipliers separately avoids some design issues the 3xTP upgrade has\r\n updateIMCap() {\r\n if (this.uncappedRM.gte(this.baseRMCap)) {\r\n if (this.baseIMCap > player.reality.iMCap) {\r\n player.records.bestReality.iMCapSet = Glyphs.copyForRecords(Glyphs.active.filter(g => g !== null));\r\n player.reality.iMCap = this.baseIMCap;\r\n }\r\n }\r\n },\r\n\r\n // Time in seconds to reduce the missing amount by a factor of two\r\n get scaleTimeForIM() {\r\n return 60 / ImaginaryUpgrade(20).effectOrDefault(1);\r\n },\r\n\r\n gainedImaginaryMachines(diff) {\r\n const baseIMGain = this.currentIMCap - Currency.imaginaryMachines.value;\r\n if(Ra.unlocks.imaginaryMachinesSetToCap.isUnlocked) return baseIMGain;\r\n return (baseIMGain) *\r\n (1 - Math.pow(2, (-diff / 1000 / this.scaleTimeForIM)));\r\n },\r\n\r\n estimateIMTimer(cost) {\r\n const imCap = this.currentIMCap;\r\n if (imCap <= cost) return Infinity;\r\n const currentIM = Currency.imaginaryMachines.value;\r\n // This is doing log(a, 1/2) - log(b, 1/2) where a is % left to imCap of cost and b is % left to imCap of current\r\n // iM. log(1 - x, 1/2) should be able to estimate the time taken for iM to increase from 0 to imCap * x since every\r\n // fixed interval the difference between current iM to max iM should decrease by a factor of 1/2.\r\n return Decimal.max(0, Math.log2(imCap / (imCap - cost)) - Math.log2(imCap / (imCap - currentIM))).times(this.scaleTimeForIM).toNumber();\r\n }\r\n};\r\n","import { sha512_256 } from \"js-sha512\";\r\n\r\nimport { DC } from \"./constants\";\r\nimport FullScreenAnimationHandler from \"./full-screen-animation-handler\";\r\n\r\n/* eslint-disable no-console */\r\n// Disabling no-console here seems\r\n// reasonable, since these are the devtools after all\r\nexport const dev = {};\r\n\r\ndev.hardReset = function() {\r\n GameStorage.hardReset();\r\n};\r\n\r\ndev.giveAllAchievements = function() {\r\n const allAchievements = Achievements.all.concat(SecretAchievements.all);\r\n for (const achievement of allAchievements) achievement.unlock();\r\n};\r\n\r\n// Know that both dev.doubleEverything and dev.tripleEverything are both broken\r\n// with this error https://i.imgur.com/ZMEBNTv.png\r\n\r\ndev.doubleEverything = function() {\r\n Object.keys(player).forEach(key => {\r\n if (typeof player[key] === \"number\") player[key] *= 2;\r\n if (typeof player[key] === \"object\" && player[key].constructor !== Object) player[key] = player[key].times(2);\r\n if (typeof player[key] === \"object\" && !isFinite(player[key])) {\r\n Object.keys(player[key]).forEach(key2 => {\r\n if (typeof player[key][key2] === \"number\") player[key][key2] *= 2;\r\n if (typeof player[key][key2] === \"object\" && player[key][key2].constructor !== Object)\r\n player[key][key2] = player[key][key2].times(2);\r\n });\r\n }\r\n });\r\n};\r\n\r\ndev.tripleEverything = function() {\r\n Object.keys(player).forEach(key => {\r\n if (typeof player[key] === \"number\") player[key] *= 3;\r\n if (typeof player[key] === \"object\" && player[key].constructor !== Object) player[key] = player[key].times(3);\r\n if (typeof player[key] === \"object\" && !isFinite(player[key])) {\r\n Object.keys(player[key]).forEach(key3 => {\r\n if (typeof player[key][key3] === \"number\") player[key][key3] *= 3;\r\n if (typeof player[key][key3] === \"object\" && player[key][key3].constructor !== Object)\r\n player[key][key3] = player[key][key3].times(3);\r\n });\r\n }\r\n });\r\n};\r\n\r\ndev.barrelRoll = function() {\r\n FullScreenAnimationHandler.display(\"a-barrel-roll\", 5);\r\n};\r\n\r\ndev.spin3d = function() {\r\n if (document.body.style.animation === \"\") document.body.style.animation = \"a-spin3d 3s infinite\";\r\n else document.body.style.animation = \"\";\r\n};\r\n\r\ndev.spin4d = function() {\r\n if (document.body.style.animation === \"\") document.body.style.animation = \"a-spin4d 3s infinite\";\r\n else document.body.style.animation = \"\";\r\n};\r\n\r\ndev.cancerize = function() {\r\n Theme.tryUnlock(\"Design\");\r\n Notation.emoji.setAsCurrent();\r\n};\r\n\r\ndev.fixSave = function() {\r\n const save = JSON.stringify(player, GameSaveSerializer.jsonConverter);\r\n const fixed = save.replace(/NaN/gui, \"10\");\r\n const saveData = JSON.parse(fixed);\r\n if (!saveData || GameStorage.checkPlayerObject(saveData) !== \"\") {\r\n Modal.message.show(\"Could not fix the save.\");\r\n return;\r\n }\r\n GameStorage.loadPlayerObject(saveData);\r\n GameStorage.save();\r\n};\r\n\r\ndev.updateTDCosts = function() {\r\n for (let tier = 1; tier < 9; tier++) {\r\n const dim = TimeDimension(tier);\r\n dim.cost = dim.nextCost(dim.bought);\r\n }\r\n};\r\n\r\ndev.refundTimeDims = function() {\r\n for (const dimension of TimeDimensions.all) {\r\n dimension.bought = 0;\r\n }\r\n dev.updateTDCosts();\r\n};\r\n\r\ndev.refundEPMult = function() {\r\n player.epmultUpgrades = 0;\r\n};\r\n\r\ndev.refundDilStudies = function() {\r\n for (const study of GameDatabase.eternity.timeStudies.dilation) {\r\n if (player.dilation.studies.includes(study.id)) {\r\n player.dilation.studies.splice(player.dilation.studies.indexOf(study.id), 1);\r\n console.log(document.getElementById(`removed dilstudy${study.id}`));\r\n Currency.timeTheorems.add(study.cost);\r\n }\r\n }\r\n};\r\n\r\ndev.resetDilation = function() {\r\n player.dilation.dilatedTime = DC.D0;\r\n player.dilation.tachyonParticles = DC.D0;\r\n player.dilation.rebuyables[1] = 0;\r\n player.dilation.rebuyables[2] = 0;\r\n player.dilation.rebuyables[3] = 0;\r\n player.dilation.baseTachyonGalaxies = 0;\r\n player.dilation.totalTachyonGalaxies = 0;\r\n};\r\n\r\n// We want to give a large degree of options\r\n// when making a special glyph, so no max-params\r\n// eslint-disable-next-line max-params\r\ndev.giveSpecialGlyph = function(color, symbol, level, rawLevel = level) {\r\n if (GameCache.glyphInventorySpace.value === 0) return;\r\n const glyph = GlyphGenerator.randomGlyph({ actualLevel: level, rawLevel });\r\n glyph.symbol = symbol;\r\n glyph.color = color;\r\n Glyphs.addToInventory(glyph);\r\n};\r\n\r\ndev.giveGlyph = function(level, rawLevel = level) {\r\n if (GameCache.glyphInventorySpace.value === 0) return;\r\n Glyphs.addToInventory(GlyphGenerator.randomGlyph({ actualLevel: level, rawLevel }));\r\n};\r\n\r\ndev.giveRealityGlyph = function(level) {\r\n if (GameCache.glyphInventorySpace.value === 0) return;\r\n Glyphs.addToInventory(GlyphGenerator.realityGlyph(level));\r\n};\r\n\r\ndev.setCompanionGlyphEP = function(eternityPoints) {\r\n const glyph = player.reality.glyphs.active\r\n .concat(player.reality.glyphs.inventory)\r\n .filter(g => g.type === \"companion\")[0];\r\n glyph.strength = rarityToStrength(eternityPoints.log10() / 1e6);\r\n};\r\n\r\ndev.decriminalize = function() {\r\n SecretAchievement(23).lock();\r\n EventHub.dispatch(GAME_EVENT.ACHIEVEMENT_UNLOCKED);\r\n};\r\n\r\ndev.removeAch = function(name) {\r\n if (name === \"all\") {\r\n const allAchievements = Achievements.all.concat(SecretAchievements.all);\r\n for (const achievement of allAchievements) achievement.lock();\r\n return \"removed all achievements\";\r\n }\r\n if (typeof (name) === \"number\") return Achievement(name).lock();\r\n if (name.startsWith(\"r\")) return Achievement(parseInt(name.slice(1), 10)).lock();\r\n if (name.startsWith(\"s\")) return SecretAchievement(parseInt(name.slice(1), 10)).lock();\r\n return \"failed to delete achievement\";\r\n};\r\n\r\nwindow.nextNewsMessageId = undefined;\r\n\r\ndev.setNextNewsMessage = function(id) {\r\n nextNewsMessageId = id;\r\n};\r\n\r\ndev.implode = function() {\r\n bigCrunchAnimation();\r\n};\r\n\r\ndev.eternify = function() {\r\n eternityAnimation();\r\n};\r\n\r\ndev.dilate = function() {\r\n animateAndDilate();\r\n};\r\n\r\ndev.undilate = function() {\r\n animateAndUndilate();\r\n};\r\n\r\ndev.realize = function() {\r\n runRealityAnimation();\r\n};\r\n\r\ndev.respecPerks = function() {\r\n player.reality.perkPoints += player.reality.perks.size;\r\n player.reality.perks = new Set();\r\n GameCache.achievementPeriod.invalidate();\r\n GameCache.buyablePerks.invalidate();\r\n};\r\n\r\nexport function isDevEnvironment() {\r\n const href = window.location.href;\r\n return href.split(\"//\")[1].length > 20 || isLocalEnvironment();\r\n}\r\n\r\nexport function isLocalEnvironment() {\r\n const href = window.location.href;\r\n return href.includes(\"file\") || href.includes(\"127.0.0.1\") || href.includes(\"localhost\");\r\n}\r\n\r\ndev.togglePerformanceStats = function() {\r\n PerformanceStats.toggle();\r\n};\r\n\r\n// Buys all perks, will end up buying semi-randomly if not enough pp\r\ndev.buyAllPerks = function() {\r\n const visited = [];\r\n const toVisit = [Perk.firstPerk];\r\n while (toVisit.length > 0) {\r\n if (player.reality.perkPoints < 1) break;\r\n const perk = toVisit.shift();\r\n visited.push(perk);\r\n toVisit.push(...perk.connectedPerks.filter(p => !visited.includes(p)));\r\n perk.purchase();\r\n }\r\n};\r\n\r\n// This should help for balancing different glyph types, strong rounding of values is intentional\r\ndev.printResourceTotals = function() {\r\n console.log(`Antimatter: e${Currency.antimatter.exponent.toPrecision(3)}`);\r\n console.log(`RM: e${Math.round(MachineHandler.gainedRealityMachines.log10())}`);\r\n console.log(`Glyph level: ${100 * Math.floor(gainedGlyphLevel().actualLevel / 100 + 0.5)}`);\r\n\r\n console.log(`Tickspeed: e${-Tickspeed.current.exponent.toPrecision(3)}`);\r\n console.log(`Gamespeed: ${Math.pow(getGameSpeedupFactor(), 1.2).toPrecision(1)}`);\r\n const aGalaxy = 100 * Math.floor(player.galaxies / 100 + 0.5);\r\n const rGalaxy = 100 * Math.floor(Replicanti.galaxies.total / 100 + 0.5);\r\n const dGalaxy = 100 * Math.floor(player.dilation.totalTachyonGalaxies / 100 + 0.5);\r\n console.log(`Galaxies: ${aGalaxy}+${rGalaxy}+${dGalaxy} (${aGalaxy + rGalaxy + dGalaxy})`);\r\n console.log(`Tick reduction: e${-Math.round(getTickSpeedMultiplier().log10())}`);\r\n\r\n let ADmults = DC.D1;\r\n for (let i = 1; i <= 8; i++) {\r\n ADmults = ADmults.times(AntimatterDimension(i).multiplier);\r\n }\r\n console.log(`AD mults: e${ADmults.log10().toPrecision(3)}`);\r\n let IDmults = DC.D1;\r\n for (let i = 1; i <= 8; i++) {\r\n IDmults = IDmults.times(InfinityDimension(i).multiplier);\r\n }\r\n console.log(`ID mults: e${IDmults.log10().toPrecision(3)}`);\r\n let TDmults = DC.D1;\r\n for (let i = 1; i <= 8; i++) {\r\n TDmults = TDmults.times(TimeDimension(i).multiplier);\r\n }\r\n console.log(`TD mults: e${TDmults.log10().toPrecision(3)}`);\r\n console.log(`Tickspeed from TD: ${formatWithCommas(1000 * Math.floor(player.totalTickGained / 1000 + 0.5))}`);\r\n\r\n console.log(`Infinities: e${Math.round(player.infinities.log10())}`);\r\n console.log(`Eternities: e${Math.round(player.eternities.log10())}`);\r\n console.log(`Replicanti: e${formatWithCommas(1e5 * Math.floor(Replicanti.amount.log10() / 1e5 + 0.5))}`);\r\n\r\n console.log(`TT: e${Math.round(player.timestudy.theorem.log10())}`);\r\n console.log(`DT: e${Math.round(player.dilation.dilatedTime.log10())}`);\r\n console.log(`TP: e${Math.round(player.dilation.tachyonParticles.log10())}`);\r\n};\r\n\r\ndev.unlockCelestialQuotes = function(celestial) {\r\n Quotes[celestial].all.forEach(x => x.show());\r\n};\r\n\r\ndev.presentCelestialQuotes = function(celestial) {\r\n Quotes[celestial].all.forEach(x => x.present());\r\n};\r\n\r\n// This doesn't check everything but hopefully it gets some of the more obvious ones.\r\ndev.testReplicantiCode = function(singleId, useDebugger = false) {\r\n const situationLists = [\r\n [\r\n function() {\r\n player.infinities = DC.E12;\r\n player.celestials.effarig.unlockBits = 64;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.replicanti.interval = 1;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(33);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(62);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(131);\r\n },\r\n function() {\r\n player.timestudy.studies.push(132);\r\n },\r\n function() {\r\n player.timestudy.studies.push(133);\r\n },\r\n function() {\r\n player.timestudy.studies.push(131, 132, 133);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(192);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(213);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(225);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.timestudy.studies.push(226);\r\n }\r\n ],\r\n [\r\n function() {\r\n player.achievementBits[8] |= 16;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.achievementBits[12] |= 8;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.achievementBits[12] |= 128;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.reality.perks = new Set([32]);\r\n }\r\n ],\r\n [\r\n function() {\r\n Autobuyer.replicantiGalaxy.isActive = true;\r\n }\r\n ],\r\n [\r\n function() {\r\n Replicanti.galaxies.isPlayerHoldingR = true;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.replicanti.boughtGalaxyCap = 100;\r\n },\r\n function() {\r\n player.replicanti.boughtGalaxyCap = 100;\r\n player.replicanti.galaxies = 50;\r\n }\r\n ],\r\n [\r\n function() {\r\n player.reality.upgReqs = (1 << 6);\r\n player.reality.upgradeBits = 64;\r\n }\r\n ]\r\n ];\r\n const situationCount = situationLists.map(x => x.length + 1).reduce((x, y) => x * y);\r\n const resultList = [];\r\n const runSituation = function(id) {\r\n Replicanti.galaxies.isPlayerHoldingR = false;\r\n GameStorage.loadPlayerObject(Player.defaultStart);\r\n player.infinities = DC.D1;\r\n player.infinityPoints = DC.E150;\r\n Replicanti.unlock();\r\n player.replicanti.chance = 1;\r\n for (let i = 0; i < situationLists.length; i++) {\r\n const div = situationLists.slice(0, i).map(x => x.length + 1).reduce((x, y) => x * y, 1);\r\n // eslint-disable-next-line no-empty-function\r\n const situation = [() => {}].concat(situationLists[i])[Math.floor(id / div) % (situationLists[i].length + 1)];\r\n situation();\r\n }\r\n function doReplicantiTicks() {\r\n for (let j = 0; j <= 5; j++) {\r\n replicantiLoop(Math.pow(10, j));\r\n resultList.push(Notation.scientific.formatDecimal(Replicanti.amount, 5, 5));\r\n resultList.push(player.replicanti.galaxies);\r\n resultList.push(Replicanti.galaxies.total);\r\n }\r\n }\r\n doReplicantiTicks();\r\n player.antimatter = DC.E309;\r\n player.records.thisInfinity.maxAM = DC.E309;\r\n bigCrunchReset();\r\n doReplicantiTicks();\r\n };\r\n if (singleId === undefined) {\r\n const total = 4000;\r\n const p = 10007;\r\n if (total * p < situationCount) {\r\n throw new Error(\"Prime p is not large enough to go through all situations.\");\r\n }\r\n for (let i = 0; i < total; i++) {\r\n const actual = i * p % situationCount;\r\n if (i % 100 === 0) {\r\n console.log(`Considering situation #${i}/${total} (${actual})`);\r\n }\r\n runSituation(actual);\r\n }\r\n } else {\r\n runSituation(singleId);\r\n }\r\n const hash = sha512_256(resultList.toString());\r\n console.log(hash);\r\n if (useDebugger) {\r\n // eslint-disable-next-line no-debugger\r\n debugger;\r\n }\r\n return hash;\r\n};\r\n\r\ndev.testGlyphs = function(config) {\r\n const glyphLevel = config.glyphLevel || 6500;\r\n const duration = config.duration || 4000;\r\n let glyphId = Date.now();\r\n const save = GameSaveSerializer.serialize(player);\r\n const makeGlyph = (type, effects) => ({\r\n type,\r\n level: glyphLevel,\r\n strength: 3.5,\r\n rawLevel: glyphLevel,\r\n idx: null,\r\n id: glyphId++,\r\n effects: makeGlyphEffectBitmask(effects),\r\n });\r\n const makeAllEffectGlyph = type => makeGlyph(type, GlyphTypes[type].effects.map(e => e.id));\r\n const effarigGlyphs = [\r\n makeGlyph(\"effarig\", [\"effarigantimatter\", \"effarigdimensions\", \"effarigforgotten\", \"effarigblackhole\"]),\r\n makeGlyph(\"effarig\", [\"effarigantimatter\", \"effarigdimensions\", \"effarigforgotten\", \"effarigachievement\"]),\r\n ];\r\n function makeCombinationsWithRepeats(count, elements) {\r\n if (elements.length === 0) return [];\r\n if (count === 0) return [[]];\r\n const withoutFirst = makeCombinationsWithRepeats(count, elements.slice(1));\r\n const withFirst = makeCombinationsWithRepeats(count - 1, elements);\r\n withFirst.forEach(e => e.push(elements[0]));\r\n return withFirst.concat(withoutFirst);\r\n }\r\n const sets5 = makeCombinationsWithRepeats(5, BASIC_GLYPH_TYPES)\r\n .map(s => s.map(t => makeAllEffectGlyph(t)));\r\n const sets4 = makeCombinationsWithRepeats(4, BASIC_GLYPH_TYPES)\r\n .map(s => s.map(t => makeAllEffectGlyph(t)));\r\n const effarigSets = effarigGlyphs.map(g => sets4.map(s => [g].concat(s)));\r\n const glyphSets = sets5.concat(...effarigSets);\r\n function equipSet(index) {\r\n player.reality.glyphs.active = glyphSets[index].map((g, idx) => {\r\n g.idx = idx;\r\n return g;\r\n });\r\n Glyphs.active = Array.from(player.reality.glyphs.active);\r\n EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED);\r\n }\r\n function glyphToShortString(glyph) {\r\n if (glyph.type === \"effarig\") {\r\n return effarigGlyphs.findIndex(e => e.id === glyph.id).toString();\r\n }\r\n return GLYPH_SYMBOLS[glyph.type];\r\n }\r\n function padString(s, length, before = false) {\r\n if (s.length >= length) return s;\r\n return before ? (\" \").repeat(length - s.length) + s : s + (\" \").repeat(length - s.length);\r\n }\r\n function finishTrial(index) {\r\n const done = padString(`${Math.floor(100 * (index + 1) / glyphSets.length)}%`, 4, true);\r\n const rm = padString(MachineHandler.gainedRealityMachines.toPrecision(2), 9);\r\n const gl = padString(gainedGlyphLevel().actualLevel, 4);\r\n const ep = padString(player.eternityPoints.exponent.toString(), 6);\r\n const ip = padString(player.infinityPoints.exponent.toString(), 8);\r\n const am = padString(Currency.antimatter.exponent.toString(), 12);\r\n const dimboosts = DimBoost.purchasedBoosts;\r\n const galaxies = Replicanti.galaxies.total + player.galaxies + player.dilation.totalTachyonGalaxies;\r\n const glyphData = glyphSets[index].map(glyphToShortString).sum();\r\n console.log(`${done} ${glyphData} rm=${rm} gl=${gl} ep=${ep} ip=${ip} am=${am} ` +\r\n `dimboosts=${dimboosts} galaxies=${galaxies}`);\r\n GameStorage.offlineEnabled = false;\r\n GameStorage.import(save);\r\n if (index < glyphSets.length - 1) {\r\n setTimeout(runTrial, 100, index + 1);\r\n }\r\n }\r\n function runTrial(index) {\r\n equipSet(index);\r\n AutomatorBackend.start();\r\n setTimeout(finishTrial, duration, index);\r\n }\r\n runTrial(0);\r\n};\r\n\r\n// May want to make this command in particular publicly known if automator gating is a common complaint post-release\r\ndev.unlockAutomator = function() {\r\n player.reality.automator.forceUnlock = true;\r\n};\r\n\r\n// This bypasses any conflict checking and forces the current save to overwrite the cloud save. This largely exists\r\n// because normal cloud saving checks for a conflict and then always shows a modal if a conflict is found, only actually\r\n// saving if the player says to in the modal. The check can fail if the cloud save is somehow malformed and missing\r\n// props. This can lead to the check always failing, the modal never showing up, and cloud saving never occurring. That\r\n// should in principle only show up in dev, as migrations aren't run on cloud saves, but this allows fixing in case.\r\ndev.forceCloudSave = async function() {\r\n const save = await Cloud.load();\r\n const root = GameSaveSerializer.deserialize(save);\r\n const saveId = GameStorage.currentSlot;\r\n if (!root.saves) root.saves = [];\r\n root.saves[saveId] = GameStorage.saves[saveId];\r\n Cloud.save(saveId);\r\n};\r\n\r\n// TODO Figure out if we want to remove this before release\r\ndev.unlockAllCosmeticSets = function() {\r\n player.reality.glyphs.cosmetics.unlockedFromNG = Object.keys(GameDatabase.reality.glyphCosmeticSets);\r\n};\r\n","// All news IDs follow the format [letter(s)][number] so we always assume that's the case and make sure to access the\r\n// relevant props within player.news.seen\r\nexport const NewsHandler = {\r\n // In principle 32 should work but something seems to go wrong with negative numbers in the function that counts\r\n // the number of bits in a bitmask, so we have to use 31.\r\n BITS_PER_MASK: 31,\r\n\r\n addSeenNews(id) {\r\n // From very old save versions; we ignore any IDs which belong to tickers which no longer exist.\r\n if (!GameDatabase.news.map(e => e.id).includes(id)) return;\r\n\r\n const groups = id.match(/([a-z]+)(\\d+)/u);\r\n const type = groups[1];\r\n const number = parseInt(groups[2], 10);\r\n\r\n // This check is needed for migration purposes because we attempt to add news tickers before the relevant\r\n // properties are created in both normal and dev migrations. There's some odd behavior which results in changes\r\n // either not persisting outside of this function or being immediately overwritten if the props aren't specifically\r\n // added here for some reason (as opposed to being initialized to empty in player.js)\r\n if (!player.news.seen[type]) player.news.seen[type] = [];\r\n\r\n // If the bit array isn't large enough (ie. the numerical ID is the largest we've seen so far by a long shot), then\r\n // we pad the array with zeroes until we can fit the new ID in before actually adding it.\r\n while (this.BITS_PER_MASK * player.news.seen[type].length <= number) player.news.seen[type].push(0);\r\n player.news.seen[type][Math.floor(number / this.BITS_PER_MASK)] |= 1 << (number % this.BITS_PER_MASK);\r\n player.news.totalSeen++;\r\n },\r\n\r\n hasSeenNews(id) {\r\n const groups = id.match(/([a-z]+)(\\d+)/u);\r\n const type = groups[1];\r\n const number = parseInt(groups[2], 10);\r\n const bitArray = player.news.seen[type];\r\n\r\n if (!bitArray || this.BITS_PER_MASK * bitArray.length < number) return false;\r\n return (bitArray[Math.floor(number / this.BITS_PER_MASK)] |= 1 << (number % this.BITS_PER_MASK)) !== 0;\r\n },\r\n\r\n get uniqueTickersSeen() {\r\n let totalSeen = 0;\r\n for (const bitmaskArray of Object.values(player.news.seen)) {\r\n for (const bitmask of bitmaskArray) {\r\n totalSeen += countValuesFromBitmask(bitmask);\r\n }\r\n }\r\n return totalSeen;\r\n }\r\n};\r\n","import { RebuyableMechanicState } from \"./game-mechanics\";\r\nimport { SteamRuntime } from \"@/steam\";\r\n\r\nimport Payments from \"./payments\";\r\n\r\nexport const shop = {};\r\n\r\nexport const ShopPurchaseData = {\r\n totalSTD: 0,\r\n spentSTD: 0,\r\n respecAvailable: false,\r\n lastRespec: \"\",\r\n unlockedCosmetics: [],\r\n\r\n get availableSTD() {\r\n return this.totalSTD - this.spentSTD;\r\n },\r\n\r\n get isIAPEnabled() {\r\n return Cloud.loggedIn && this.availableSTD >= 0 && player.IAP.enabled;\r\n },\r\n\r\n // We also allow for respecs if it's been at least 3 days since the last one\r\n get timeUntilRespec() {\r\n const msSinceLast = Date.now() - new Date(ShopPurchaseData.lastRespec).getTime();\r\n return TimeSpan.fromMilliseconds(3 * 86400 * 1000 - msSinceLast);\r\n },\r\n\r\n get canRespec() {\r\n return this.respecAvailable || this.timeUntilRespec.totalDays <= 0;\r\n },\r\n\r\n updateLocalSTD(newData) {\r\n this.totalSTD = newData.totalSTD;\r\n this.spentSTD = newData.spentSTD;\r\n this.respecAvailable = newData.respecAvailable;\r\n this.lastRespec = newData.lastRespec ?? 0;\r\n this.unlockedCosmetics = [...(newData.unlockedCosmetics ?? [])];\r\n for (const key of Object.keys(GameDatabase.shopPurchases)) this[key] = newData[key] ?? 0;\r\n if (this.allCosmeticSets > 0) this.unlockedCosmetics = Object.keys(GameDatabase.reality.glyphCosmeticSets);\r\n if (ShopPurchaseData.isIAPEnabled) Speedrun.setSTDUse(true);\r\n GameStorage.save();\r\n },\r\n\r\n clearLocalSTD() {\r\n this.totalSTD = 0;\r\n this.spentSTD = 0;\r\n this.respecAvailable = false;\r\n this.unlockedCosmetics = [];\r\n for (const key of Object.keys(GameDatabase.shopPurchases)) this[key] = 0;\r\n },\r\n\r\n // Reads STD props from the cloud and sets local cached values with the result\r\n async syncSTD(showNotification = true, fetchedData = undefined) {\r\n if (!Cloud.loggedIn) return;\r\n let newSTDData;\r\n if (fetchedData) {\r\n newSTDData = fetchedData;\r\n } else {\r\n try {\r\n const statusRes = await fetch(`${STD_BACKEND_URL}/STDData?user=${Cloud.user.id}`);\r\n newSTDData = await statusRes.json();\r\n } catch (e) {\r\n GameUI.notify.error(\"Could not sync STD purchases!\", 10000);\r\n return;\r\n }\r\n }\r\n if (showNotification && newSTDData.totalSTD > 0) GameUI.notify.info(\"STD purchases successfully loaded!\", 10000);\r\n this.updateLocalSTD(newSTDData);\r\n },\r\n\r\n respecRequest() {\r\n if (player.options.confirmations.respecIAP) {\r\n Modal.respecIAP.show();\r\n } else {\r\n this.respecAll();\r\n }\r\n },\r\n\r\n async respecAll() {\r\n if (!this.canRespec) {\r\n // This case only happens if the player is cheating and using the console to make the game think it has a respec\r\n // when on the backend they don't. Nevertheless, responsive UI rarely hurts\r\n GameUI.notify.error(\"You do not have a respec available\", 10000);\r\n return;\r\n }\r\n let res;\r\n try {\r\n res = await fetch(`${STD_BACKEND_URL}/respec`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify({ user: Cloud.user.id })\r\n });\r\n } catch (e) {\r\n GameUI.notify.error(\"Unable to respec STD purchases!\", 10000);\r\n return;\r\n }\r\n const stdData = await res.json();\r\n if (stdData.success) GameUI.notify.info(\"STD respec successful!\", 10000);\r\n else GameUI.notify.error(\"No purchases to respec!\", 10000);\r\n this.updateLocalSTD(stdData.data);\r\n },\r\n};\r\n\r\n// We track the local state of shop purchases here, so dynamically add all the keys which exist in the gameDB\r\nfor (const key of Object.keys(GameDatabase.shopPurchases)) ShopPurchaseData[key] = 0;\r\n\r\nclass ShopPurchaseState extends RebuyableMechanicState {\r\n get currency() {\r\n return ShopPurchaseData.availableSTD;\r\n }\r\n\r\n get isAffordable() {\r\n return this.currency >= this.cost;\r\n }\r\n\r\n get description() {\r\n const desc = this.config.description;\r\n return typeof desc === \"function\" ? desc() : desc;\r\n }\r\n\r\n get cost() {\r\n const cost = this.config.cost;\r\n return typeof cost === \"function\" ? cost() : cost;\r\n }\r\n\r\n // ShopPurchaseData for any particular key is undefined in between page load and STD load,\r\n // so we need to guard against that causing NaNs to propagate through the save\r\n get purchases() {\r\n return ShopPurchaseData[this.config.key] ?? 0;\r\n }\r\n\r\n set purchases(value) {\r\n if (!Number.isFinite(value)) return;\r\n ShopPurchaseData[this.config.key] = value;\r\n }\r\n\r\n isUnlocked() {\r\n return player.records.fullGameCompletions > 0 || (this.config.isUnlocked?.() ?? true);\r\n }\r\n\r\n get lockText() {\r\n return this.config.lockText;\r\n }\r\n\r\n get shouldDisplayMult() {\r\n return Boolean(this.config.multiplier);\r\n }\r\n\r\n get currentMult() {\r\n if (!this.shouldDisplayMult) return \"\";\r\n return this.config.multiplier(ShopPurchaseData.isIAPEnabled ? this.purchases : 0);\r\n }\r\n\r\n get nextMult() {\r\n if (!this.shouldDisplayMult) return \"\";\r\n return this.config.multiplier(ShopPurchaseData.isIAPEnabled ? this.purchases + 1 : 0);\r\n }\r\n\r\n // We want to still display the correct value in the button, so we need separate getters for it\r\n get currentMultForDisplay() {\r\n if (!this.shouldDisplayMult) return \"\";\r\n return this.config.multiplier(this.purchases);\r\n }\r\n\r\n get nextMultForDisplay() {\r\n if (!this.shouldDisplayMult) return \"\";\r\n return this.config.multiplier(this.purchases + 1);\r\n }\r\n\r\n formatEffect(effect) {\r\n return this.config.formatEffect?.(effect) || formatX(effect, 2, 0);\r\n }\r\n\r\n async purchase() {\r\n if (!this.canBeBought) return false;\r\n if (GameEnd.creditsEverClosed) return false;\r\n if (this.config.instantPurchase && ui.$viewModel.modal.progressBar) return false;\r\n\r\n const cosmeticId = this.config.key === \"singleCosmeticSet\"\r\n ? GlyphAppearanceHandler.chosenFromModal?.id\r\n : undefined;\r\n\r\n // Contact the purchase provider to verify the purchase\r\n const success = SteamRuntime.isActive\r\n ? await SteamRuntime.purchaseShopItem(this.config.key, this.cost, cosmeticId)\r\n : await Payments.buyUpgrade(this.config.key, cosmeticId);\r\n if (!success) return false;\r\n\r\n if (player.IAP.enabled) Speedrun.setSTDUse(true);\r\n if (this.config.instantPurchase) this.config.onPurchase();\r\n GameUI.update();\r\n return true;\r\n }\r\n}\r\n\r\nexport const ShopPurchase = mapGameDataToObject(\r\n GameDatabase.shopPurchases,\r\n config => new ShopPurchaseState(config)\r\n);\r\n\r\nshop.purchaseTimeSkip = function() {\r\n Speedrun.setSTDUse(true);\r\n simulateTime(3600 * 6);\r\n};\r\n\r\nshop.purchaseLongerTimeSkip = function() {\r\n Speedrun.setSTDUse(true);\r\n simulateTime(3600 * 24);\r\n};\r\n","class SubtabState {\r\n constructor(parent, config) {\r\n this._parent = parent;\r\n this.config = config;\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get symbol() {\r\n return this.config.symbol;\r\n }\r\n\r\n get isPermanentlyHidden() {\r\n return this.config.hideAt < GameEnd.endState && !GameEnd.creditsClosed;\r\n }\r\n\r\n get hidable() {\r\n return this.config.hidable;\r\n }\r\n\r\n get isHidden() {\r\n if (Enslaved.isRunning || Pelle.hasGalaxyGenerator) return false;\r\n return ((player.options.hiddenSubtabBits[this._parent.id] & (1 << this.id)) !== 0) &&\r\n this.hidable;\r\n }\r\n\r\n get isUnlocked() {\r\n return this.config.condition === undefined || this.config.condition();\r\n }\r\n\r\n get isAvailable() {\r\n return !this.isPermanentlyHidden && (this.isOpen || !this.isHidden && this.isUnlocked);\r\n }\r\n\r\n get hasNotification() {\r\n return player.tabNotifications.has(this._parent.key + this.key);\r\n }\r\n\r\n get key() {\r\n return this.config.key;\r\n }\r\n\r\n get id() {\r\n return this.config.id;\r\n }\r\n\r\n show(manual) {\r\n this._parent.show(manual, this);\r\n }\r\n\r\n unhideTab() {\r\n this._parent.unhideTab();\r\n player.options.hiddenSubtabBits[this._parent.id] &= ~(1 << this.id);\r\n }\r\n\r\n toggleVisibility() {\r\n if (this._parent.id === Tabs.current.id && this.id === Tabs.current._currentSubtab.id) return;\r\n player.options.hiddenSubtabBits[this._parent.id] ^= (1 << this.id);\r\n\r\n checkTabVisibilityForSecretAchievement();\r\n }\r\n\r\n get isOpen() {\r\n return ui.view.tab === this._parent.key && ui.view.subtab === this.key;\r\n }\r\n}\r\n\r\nfunction findLastOpenSubtab(tabId, subtabs) {\r\n return subtabs.find(s => s.id === player.options.lastOpenSubtab[tabId]) ?? subtabs[0];\r\n}\r\n\r\nfunction cycleThroughSubtabs(subtabs, currentSubtab) {\r\n const availableTabs = subtabs.filter(tab => tab.isAvailable);\r\n const currentIndex = availableTabs.indexOf(currentSubtab);\r\n const direction = ui.view.shiftDown ? -1 : 1;\r\n let newIndex = currentIndex + direction;\r\n newIndex = newIndex < 0 ? availableTabs.length - 1 : newIndex;\r\n newIndex = newIndex > availableTabs.length - 1 ? 0 : newIndex;\r\n return availableTabs[newIndex];\r\n}\r\n\r\nclass TabState {\r\n constructor(config) {\r\n this.config = config;\r\n this.isOpened = false;\r\n const subtabs = [];\r\n for (const subtabConfig of config.subtabs) {\r\n const subtab = new SubtabState(this, subtabConfig);\r\n this[subtabConfig.key] = subtab;\r\n subtabs.push(subtab);\r\n }\r\n this.subtabs = subtabs;\r\n this._currentSubtab = findLastOpenSubtab(this.id, subtabs);\r\n }\r\n\r\n get name() {\r\n return this.config.name;\r\n }\r\n\r\n get key() {\r\n return this.config.key;\r\n }\r\n\r\n get id() {\r\n return this.config.id;\r\n }\r\n\r\n get isPermanentlyHidden() {\r\n return this.config.hideAt < GameEnd.endState && !GameEnd.creditsClosed;\r\n }\r\n\r\n get hidable() {\r\n return this.config.hidable;\r\n }\r\n\r\n get isHidden() {\r\n if (Enslaved.isRunning || Pelle.hasGalaxyGenerator) return false;\r\n const hasVisibleSubtab = this.subtabs.some(t => t.isAvailable);\r\n return (((player.options.hiddenTabBits & (1 << this.id)) !== 0) || !hasVisibleSubtab) && this.hidable;\r\n }\r\n\r\n get isUnlocked() {\r\n return this.config.condition === undefined || this.config.condition();\r\n }\r\n\r\n get isAvailable() {\r\n return !this.isPermanentlyHidden && (this.isOpen || !this.isHidden && this.isUnlocked);\r\n }\r\n\r\n get isOpen() {\r\n return ui.view.tab === this.key;\r\n }\r\n\r\n get hasNotification() {\r\n return this.subtabs.some(tab => tab.hasNotification);\r\n }\r\n\r\n show(manual, subtab = undefined) {\r\n if (!manual && !player.options.automaticTabSwitching || Quote.isOpen) return;\r\n if (subtab !== undefined) {\r\n if (!Enslaved.isRunning) subtab.unhideTab();\r\n this._currentSubtab = subtab;\r\n } else if (ui.view.tab === this.key && ui.view.initialized && manual) {\r\n this._currentSubtab = cycleThroughSubtabs(this.subtabs, this._currentSubtab);\r\n } else {\r\n this._currentSubtab = findLastOpenSubtab(this.id, this.subtabs);\r\n }\r\n\r\n if (!this._currentSubtab.isUnlocked) this.resetToUnlocked();\r\n if (!this._currentSubtab.isAvailable) this.resetToAvailable();\r\n\r\n ui.view.tab = this.key;\r\n ui.view.subtab = this._currentSubtab.key;\r\n const tabNotificationKey = this.key + this._currentSubtab.key;\r\n if (player.tabNotifications.has(tabNotificationKey)) player.tabNotifications.delete(tabNotificationKey);\r\n\r\n if (manual) Modal.hideAll();\r\n EventHub.dispatch(GAME_EVENT.TAB_CHANGED, this, this._currentSubtab);\r\n }\r\n\r\n unhideTab() {\r\n player.options.hiddenTabBits &= ~(1 << this.id);\r\n }\r\n\r\n toggleVisibility() {\r\n if (this.id === Tabs.current.id) return;\r\n player.options.hiddenTabBits ^= (1 << this.id);\r\n\r\n checkTabVisibilityForSecretAchievement();\r\n }\r\n\r\n resetToAvailable() {\r\n this._currentSubtab = this.subtabs.find(tab => tab.isAvailable);\r\n if (this._currentSubtab === undefined) {\r\n this._currentSubtab = this.subtabs[0];\r\n this._currentSubtab.unhideTab();\r\n }\r\n }\r\n\r\n resetToUnlocked() {\r\n this._currentSubtab = this.subtabs.find(tab => tab.isUnlocked);\r\n }\r\n}\r\n\r\nexport const Tab = GameDatabase.tabs.mapToObject(\r\n config => config.key,\r\n config => new TabState(config)\r\n);\r\n\r\nexport const Tabs = (function() {\r\n return {\r\n all: Object.values(Tab),\r\n get current() {\r\n return Tabs.all.find(tab => tab.isOpen);\r\n },\r\n Classic: [\r\n Tab.dimensions,\r\n Tab.options,\r\n Tab.statistics,\r\n Tab.achievements,\r\n Tab.automation,\r\n Tab.challenges,\r\n Tab.infinity,\r\n Tab.eternity,\r\n Tab.reality,\r\n Tab.celestials,\r\n Tab.mending,\r\n Tab.shop\r\n ],\r\n Modern: [\r\n Tab.dimensions,\r\n Tab.automation,\r\n Tab.challenges,\r\n Tab.infinity,\r\n Tab.eternity,\r\n Tab.reality,\r\n Tab.celestials,\r\n Tab.mending,\r\n Tab.achievements,\r\n Tab.statistics,\r\n Tab.options,\r\n Tab.shop\r\n ],\r\n Synergism: [\r\n Tab.dimensions,\r\n Tab.automation,\r\n Tab.achievements,\r\n Tab.infinity,\r\n Tab.challenges,\r\n Tab.eternity,\r\n Tab.reality,\r\n Tab.celestials,\r\n Tab.mending,\r\n Tab.options,\r\n Tab.statistics,\r\n Tab.shop\r\n ],\r\n get currentUIFormat() {\r\n return ui.view.UIType == 'Modern' ? this.Modern : ui.view.UIType == \"Classic\" ? this.Classic : this.Synergism;\r\n },\r\n };\r\n}());\r\n\r\nconst checkTabVisibilityForSecretAchievement = () => {\r\n // Checks if every unlocked tab that is hidable is hidden\r\n if (Tabs.all.filter(t => t.isUnlocked && t.hidable).every(t => t.isHidden)) SecretAchievement(47).unlock();\r\n};\r\n\r\nEventHub.logic.on(GAME_EVENT.TAB_CHANGED, () => {\r\n const currTab = Tabs.current.id;\r\n player.options.lastOpenTab = currTab;\r\n player.options.lastOpenSubtab[currTab] = Tabs.current._currentSubtab.id;\r\n});\r\n","class TabNotificationState {\r\n constructor(config) {\r\n this.config = config;\r\n if (config.events) {\r\n for (const event of config.events) {\r\n EventHub.logic.on(event, this.tryTrigger.bind(this), this);\r\n }\r\n }\r\n }\r\n\r\n get triggered() {\r\n return player.triggeredTabNotificationBits & (1 << this.config.id);\r\n }\r\n\r\n tryTrigger() {\r\n if (!this.config.condition() || this.triggered) return;\r\n const currentTabKey = `${Tabs.current.key}${Tabs.current._currentSubtab.key}`;\r\n this.config.tabsToHighLight.map(t => t.parent + t.tab)\r\n .forEach(tab => {\r\n if (tab !== currentTabKey) player.tabNotifications.add(tab);\r\n });\r\n player.triggeredTabNotificationBits |= 1 << this.config.id;\r\n\r\n // Force all tabs and subtabs of this notification to be unhidden\r\n for (const location of this.config.tabsToHighLight) {\r\n const tab = Tabs.all.find(t => t.config.key === location.parent);\r\n const subtab = tab.subtabs.find(t => t.key === location.tab);\r\n tab.unhideTab();\r\n subtab.unhideTab();\r\n }\r\n }\r\n\r\n // In some cases we want to clear a trigger via an event that isn't tab-clicking, in order to show it again\r\n clearTrigger() {\r\n player.triggeredTabNotificationBits &= -1 - (1 << this.config.id);\r\n this.config.tabsToHighLight.map(t => t.parent + t.tab)\r\n .forEach(tab => player.tabNotifications.delete(tab));\r\n }\r\n}\r\n\r\nexport const TabNotification = mapGameDataToObject(\r\n GameDatabase.tabNotifications,\r\n config => new TabNotificationState(config)\r\n);\r\n","/**\r\n * Class which handles the creation of all automator script templates, with the final script and potential\r\n * warnings for inputs being the only parts which are meant to be externally exposed. All the messy parsing\r\n * and potential warning/error finding happens internally.\r\n *\r\n * @member {String[]} lines Array of lines of code which can be used within the automator\r\n * @member {String[]} warnings List of feedback statements to provide to the player based on possible\r\n * undesired behavior which may result from their particular input parameters\r\n * @member {String} storedTreeStr String for specifically importing a supplied study tree. All templates\r\n * will contain at most one tree within; the expected usage is that if some task requires multiple trees, then\r\n * the player will use multiple templates to do so\r\n * @member {TimeStudyTree} storedTreeObj Study tree object for the specified study tree; storing it within the\r\n * object instead of parsing it as-needed higher up in the call chain reduces boilerplate code\r\n */\r\nexport class ScriptTemplate {\r\n constructor(params, templateName) {\r\n this.lines = [];\r\n this.warnings = [];\r\n switch (templateName) {\r\n case \"Climb EP\":\r\n this.templateClimbEP(params);\r\n break;\r\n case \"Grind Eternities\":\r\n this.templateGrindEternities(params);\r\n break;\r\n case \"Grind Infinities\":\r\n this.templateGrindInfinities(params);\r\n break;\r\n case \"Complete Eternity Challenge\":\r\n this.templateDoEC(params);\r\n break;\r\n case \"Unlock Dilation\":\r\n this.templateUnlockDilation(params);\r\n break;\r\n default:\r\n throw new Error(`Unrecognized template name ${templateName} in ScriptTemplate`);\r\n }\r\n }\r\n\r\n /**\r\n * Special formatting for numbers in templates; we can't use format() here because that will change based on the\r\n * player's current notation. This is generally desirable in the rest of the game, but in most notations will\r\n * result in unparseable garbage here. Numbers are formatted assuming they're integers, and Decimals are formatted\r\n * with 2 decimal places (in scientific notation if above 1000)\r\n * @param {Number | Decimal} num Number to format, disregarding current notation settings\r\n * @returns {String} The properly-formatted number, in a reasonable-looking format valid for the automator\r\n */\r\n format(num) {\r\n if (typeof num === \"number\") return Math.round(num);\r\n if (num.lte(1000)) return num.toNumber().toFixed(2);\r\n return `${num.mantissa.toFixed(2)}e${num.exponent}`;\r\n }\r\n\r\n /**\r\n * Parses tree data out of the parameter object and stores within the storedTree fields. Relevant props of object\r\n * passed in:\r\n * @param {String} params.treePreset Name of a preset to load instead of a study tree, will override treeStudies\r\n * if present\r\n * @param {Boolean} params.treeNowait Whether or not the automator should pause at this line and repeat\r\n * until the whole tree is bought\r\n * @param {String} params.treeStudies A study import string to buy\r\n */\r\n storeTreeData(params) {\r\n const nowaitStr = params.treeNowait ? \" nowait\" : \"\";\r\n if (params.treePreset) {\r\n const presetObj = player.timestudy.presets.map((p, i) => ({ ...p, id: i + 1 }))\r\n .find(p => (p.name === params.treePreset || p.id === Number(params.treePreset)));\r\n const preset = presetObj.name ? `name ${presetObj.name}` : `id ${presetObj.id}`;\r\n this.storedTreeStr = `studies${nowaitStr} load ${preset}`;\r\n this.storedTreeObj = new TimeStudyTree(presetObj.studies);\r\n } else {\r\n this.storedTreeStr = `studies${nowaitStr} purchase ${params.treeStudies}`;\r\n this.storedTreeObj = new TimeStudyTree(params.treeStudies);\r\n }\r\n if (this.storedTreeObj.invalidStudies.length > 0) this.warnings.push(\"Tree contains invalid Study IDs\");\r\n if (this.storedTreeObj.purchasedStudies.length < this.storedTreeObj.selectedStudies.length) {\r\n this.warnings.push(\"Tree structure results in some unbought studies when imported with an empty tree\");\r\n if (!params.treeNowait) this.warnings.push(`Automator may possibly get stuck with \"Keep buying Studies\" setting`);\r\n }\r\n }\r\n\r\n /**\r\n * Parses automator data out of a two-prop object storing autobuyer settings, into a suffix of automator code which\r\n * sets the autobuyer to those settings. Relevant props of object passed in:\r\n * @param {String} mode \"mult\" or \"time\" for times highest and time modes, respectively\r\n * @param {Decimal} value Numerical value for autobuyer settings (assumed to be seconds in time)\r\n * @returns {String} String suffix to feed into an automator script, should be prefixed by \"auto [prestige] \"\r\n */\r\n parseAutobuyerProp(mode, value) {\r\n switch (mode) {\r\n case \"mult\":\r\n return `${this.format(value)} x highest`;\r\n case \"time\":\r\n return `${this.format(value)} seconds`;\r\n default:\r\n throw new Error(`Unrecognized autobuyer mode ${mode} in automator script templates`);\r\n }\r\n }\r\n\r\n /**\r\n * Parses the parameter object into a script that sets the infinity and eternity autobuyers and then repeatedly loops\r\n * buying a tree and eternitying until a target EP is reached. Relevant props of object passed in:\r\n * @param {Boolean} params.treeNowait Nowait param to be passed into storeTreeData()\r\n * @param {String} params.treeStudies Study import param to be passed into storeTreeData()\r\n * @param {Decimal} params.finalEP EP value at which to stop looping the script and continue onward\r\n * @param {Object} params.autoInfMode Multiplier or time-based mode for infinity autobuyer\r\n * @param {Object} params.autoInfValue Multiplier threshold or time for infinity autobuyer\r\n * @param {Object} params.autoEterMode Multiplier or time-based mode for eternity autobuyer\r\n * @param {Object} params.autoEterValue Multiplier threshold or time for eternity autobuyer\r\n */\r\n templateClimbEP(params) {\r\n this.lines.push(\"// Template: Climb EP\");\r\n this.lines.push(`notify \"Running Template Climb EP (to ${format(params.finalEP)})\"`);\r\n this.storeTreeData(params);\r\n this.lines.push(`auto infinity ${this.parseAutobuyerProp(params.autoInfMode, params.autoInfValue)}`);\r\n this.lines.push(`auto eternity ${this.parseAutobuyerProp(params.autoEterMode, params.autoEterValue)}`);\r\n this.lines.push(`while ep < ${this.format(params.finalEP)} {`);\r\n this.lines.push(` ${this.storedTreeStr}`);\r\n this.lines.push(\" studies respec\");\r\n this.lines.push(\" wait eternity\");\r\n this.lines.push(\"}\");\r\n }\r\n\r\n /**\r\n * Parses the parameter object into a script that sets autobuyer settings and then repeatedly eternities until a\r\n * target total eternity count is reached. Relevant props of object passed in:\r\n * @param {Boolean} params.treeNowait Nowait param to be passed into storeTreeData()\r\n * @param {String} params.treeStudies Study import param to be passed into storeTreeData()\r\n * @param {Number} params.crunchesPerEternity Number of crunches per eternity\r\n * @param {Decimal} params.eternities Eternity count at which to stop grinding and move on\r\n */\r\n templateGrindEternities(params) {\r\n this.lines.push(\"// Template: Grind Eternities\");\r\n this.lines.push(`notify \"Running Template Grind Eternities (to ${format(params.eternities)})\"`);\r\n this.storeTreeData(params);\r\n this.lines.push(this.storedTreeStr);\r\n this.lines.push(\"auto eternity 0 ep\");\r\n // We give it a bit of an extra \"safety factor\" of 5x in order to make sure it doesn't end up repeatedly going\r\n // to something like 1.6e308 due to poor rounding. The startingValue may fluctuate based on achievements, but\r\n // this can be a significant time save that we want to actually give the player if they have the e130 perk\r\n const gapToEternity = Number.MAX_VALUE / Currency.infinityPoints.startingValue.toNumber() * 5;\r\n this.lines.push(`auto infinity ${this.format(\r\n Decimal.pow(gapToEternity, 1 / params.crunchesPerEternity))} x highest`);\r\n this.lines.push(`wait eternities > ${this.format(params.eternities)}`);\r\n this.lines.push(\"auto eternity off\");\r\n }\r\n\r\n /**\r\n * Parses the parameter object into a script that sets autobuyer settings and then repeatedly infinities until a\r\n * target total infinity or banked infinity count is reached. If threshold is banked infinities, assumes that the\r\n * player also has the achievement that lets them bank. Relevant props of object passed in:\r\n * @param {Boolean} params.treeNowait Nowait param to be passed into storeTreeData()\r\n * @param {String} params.treeStudies Study import param to be passed into storeTreeData()\r\n * @param {Decimal} params.infinities Infinity count at which to stop grinding and move on\r\n * @param {Boolean} params.isBanked If the script should check for banked infinities instead of normal\r\n * infinities, calculating a modified threshold appropriately - we don't eternity repeatedly because this is\r\n * slower due to some resources needing to be rebuilt every eternity\r\n */\r\n templateGrindInfinities(params) {\r\n this.lines.push(\"// Template: Grind Infinities\");\r\n this.lines.push(`notify \"Running Template Grind Infinities (to ${format(params.infinities)})\"`);\r\n this.storeTreeData(params);\r\n this.lines.push(this.storedTreeStr);\r\n this.lines.push(\"auto eternity off\");\r\n this.lines.push(`auto infinity 5s`);\r\n if (params.isBanked) {\r\n const has191 = this.storedTreeObj.purchasedStudies.includes(TimeStudy(191));\r\n if (!has191) this.warnings.push(`TS191 is not reachable from an empty tree; banking anything in this template\r\n will require Achievement \"${Achievement(131).name}\"`);\r\n const bankRate = has191 ? 0.1 : 0.05;\r\n this.lines.push(\"// Note: This template attempts to get all the Banked Infinities within a single Eternity\");\r\n this.lines.push(`wait infinities > ${this.format(params.infinities.dividedBy(bankRate), 2)}`);\r\n this.lines.push(\"eternity\");\r\n } else {\r\n this.lines.push(`wait infinities > ${this.format(params.infinities, 2)}`);\r\n }\r\n }\r\n\r\n /**\r\n * Parses the parameter object into a script that respecs into a specified tree, unlocks a specified EC, changes\r\n * autobuyer settings, and then waits until the EC can be completed before triggering an eternity through the\r\n * automator. Relevant props of object passed in:\r\n * @param {Boolean} params.treeNowait Nowait param to be passed into storeTreeData()\r\n * @param {String} params.treeStudies Study import param to be passed into storeTreeData()\r\n * @param {Number} params.ec Numerical value denoting the EC to attempt\r\n * @param {Number} params.completions Minimum number of completions to wait for before moving onward\r\n * @param {Object} params.autoInfMode Multiplier or time-based mode for infinity autobuyer\r\n * @param {Object} params.autoInfValue Multiplier threshold or time for infinity autobuyer\r\n */\r\n templateDoEC(params) {\r\n this.lines.push(\"// Template: Complete Eternity Challenge\");\r\n this.lines.push(`notify \"Running Template Complete Eternity Challenge (EC${params.ec})\"`);\r\n // Force an eternity in order to buy the study tree first\r\n this.lines.push(\"eternity respec\");\r\n\r\n // Import the tree and the EC study, supplying errors as appropriate\r\n this.storeTreeData(params);\r\n this.lines.push(this.storedTreeStr);\r\n const tree = this.storedTreeObj;\r\n if (tree.ec === 0) {\r\n this.lines.push(`unlock ec ${params.ec}`);\r\n // Attempt to buy it, supplying an error if we can't actually reach it\r\n if (!tree.hasRequirements(TimeStudy.eternityChallenge(params.ec), true)) {\r\n this.warnings.push(\"Specified Study Tree cannot reach specified EC\");\r\n }\r\n } else if (tree.ec !== params.ec) this.warnings.push(\"Specified Study Tree already has a different EC unlocked\");\r\n\r\n // Apply autobuyer settings; we specifically want to turn auto-eternity off so that we can manually trigger the\r\n // prestige - otherwise, the autobuyer may end up preempting multiple completions\r\n this.lines.push(`auto infinity ${this.parseAutobuyerProp(params.autoInfMode, params.autoInfValue)}`);\r\n this.lines.push(`auto eternity off`);\r\n if (!TimeStudy.eternityChallenge(params.ec)) this.warnings.push(`Specified template EC does not exist`);\r\n this.lines.push(`start ec ${params.ec}`);\r\n\r\n if (params.completions > 5) this.warnings.push(`ECs cannot be completed more than ${formatInt(5)} times`);\r\n this.lines.push(`wait pending completions >= ${params.completions}`);\r\n this.lines.push(\"eternity\");\r\n }\r\n\r\n /**\r\n * Parses the parameter object into a script that sets autobuyer settings and then repeatedly infinities until a\r\n * target total infinity or banked infinity count is reached. Makes some assumptions on bank rate. Relevant props\r\n * of object passed in:\r\n * @param {Boolean} params.treeNowait Nowait param to be passed into storeTreeData()\r\n * @param {String} params.treeStudies Study import param to be passed into storeTreeData()\r\n * @param {Object} params.autoEterMode Multiplier or time-based mode for eternity autobuyer\r\n * @param {Object} params.autoEterValue Multiplier threshold or time for eternity autobuyer\r\n */\r\n templateUnlockDilation(params) {\r\n this.lines.push(\"// Template: Unlock Dilation\");\r\n this.lines.push(`notify \"Running Template Unlock Dilation\"`);\r\n this.storeTreeData(params);\r\n if (![231, 232, 233, 234].some(s => this.storedTreeObj.purchasedStudies.includes(TimeStudy(s)))) {\r\n this.warnings.push(\"Specified Study Tree cannot reach Dilation\");\r\n }\r\n this.lines.push(`auto infinity off`);\r\n this.lines.push(`auto eternity ${this.parseAutobuyerProp(params.autoEterMode, params.autoEterValue)}`);\r\n this.lines.push(`while total tt < ${this.format(TimeStudy.dilation.totalTimeTheoremRequirement)} {`);\r\n this.lines.push(` ${this.storedTreeStr}`);\r\n this.lines.push(\" studies respec\");\r\n this.lines.push(\" wait eternity\");\r\n this.lines.push(\"}\");\r\n this.lines.push(\"unlock dilation\");\r\n }\r\n\r\n get script() {\r\n return this.lines.join(\"\\n\");\r\n }\r\n}\r\n","/* eslint-disable import/newline-after-import, import/first, import/order */\r\nfunction mergeIntoGlobal(object) {\r\n for (const key in object) {\r\n if (key === \"default\") {\r\n // Skip default exports\r\n continue;\r\n }\r\n const value = object[key];\r\n const existingValue = window[key];\r\n if (existingValue !== undefined) {\r\n throw `Property ${key} already exists in global context`;\r\n }\r\n\r\n window[key] = value;\r\n }\r\n}\r\n\r\nimport * as Utils from \"./core/utils\";\r\nmergeIntoGlobal(Utils);\r\n\r\nimport * as GameDB from \"./core/secret-formula\";\r\nmergeIntoGlobal(GameDB);\r\n\r\n// This is a list of legacy stuff, please don't add\r\n// any more globals to the component files\r\n\r\nimport * as AutomatorBlockEditor from \"@/components/tabs/automator/AutomatorBlockEditor\";\r\nmergeIntoGlobal(AutomatorBlockEditor);\r\n\r\nimport * as AutomatorBlocks from \"@/components/tabs/automator/AutomatorBlocks\";\r\nmergeIntoGlobal(AutomatorBlocks);\r\n\r\nimport * as AutomatorTextEditor from \"@/components/tabs/automator/AutomatorTextEditor\";\r\nmergeIntoGlobal(AutomatorTextEditor);\r\n\r\nimport * as PerksTab from \"@/components/tabs/perks/PerksTab\";\r\nmergeIntoGlobal(PerksTab);\r\n\r\n// End of legacy stuff\r\n\r\nimport * as core from \"./core/globals\";\r\nmergeIntoGlobal(core);\r\n\r\nimport * as game from \"./game\";\r\nmergeIntoGlobal(game);\r\n","// TODO: remove before release\r\nexport function watchLatestCommit() {\r\n if (isLocalEnvironment()) {\r\n return;\r\n }\r\n\r\n const url = \"commit.json\";\r\n let current;\r\n\r\n function watch() {\r\n fetch(url, { method: \"GET\" })\r\n .then(response => response.json())\r\n .then(json => {\r\n if (json === undefined) {\r\n return;\r\n }\r\n current = current ?? json.sha;\r\n if (current === json.sha) {\r\n return;\r\n }\r\n\r\n Modal.message.show(\r\n \"Refresh the page (game will be saved), we've got new stuff: \" +\r\n `\"${json.message}\" - Redemption Dev Team`,\r\n {\r\n callback: updateRefresh,\r\n closeButton: true\r\n },\r\n 3\r\n );\r\n });\r\n }\r\n\r\n setInterval(watch, 60000);\r\n}\r\n","import \"drag-drop-touch\";\r\nimport \"./shims\";\r\nimport \"./merge-globals\";\r\nimport { browserCheck, init } from \"./game\";\r\nimport { DEV } from \"./env\";\r\nimport { watchLatestCommit } from \"./commit-watcher\";\r\n\r\nif (browserCheck()) init();\r\nif (DEV) watchLatestCommit();\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkIds[i]] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk\"] = self[\"webpackChunk\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], () => (__webpack_require__(4320)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["window","Async","_enabled","enabled","this","val","runForTime","fun","maxIter","config","batchSize","maxTime","t0","Date","now","remaining","j","Math","min","sleepPromise","ms","Promise","resolve","setTimeout","run","runResult","_run","then","i","async","progress","sleepTime","asyncEntry","asyncProgress","asyncExit","EventHub","constructor","_handlers","on","event","fn","target","handlers","undefined","push","offAll","Object","keys","filter","handler","dispatch","args","logic","GameUI","stats","countHandlers","eventHub","values","map","length","sum","ui","GAME_EVENT","UPDATE","GAME_TICK_BEFORE","GAME_TICK_AFTER","REPLICANTI_TICK_BEFORE","REPLICANTI_TICK_AFTER","DIMBOOST_BEFORE","DIMBOOST_AFTER","GALAXY_RESET_BEFORE","GALAXY_RESET_AFTER","SACRIFICE_RESET_BEFORE","SACRIFICE_RESET_AFTER","BIG_CRUNCH_BEFORE","BIG_CRUNCH_AFTER","ETERNITY_RESET_BEFORE","ETERNITY_RESET_AFTER","REALITY_RESET_BEFORE","REALITY_RESET_AFTER","SINGULARITY_RESET_BEFORE","SINGULARITY_RESET_AFTER","ARMAGEDDON_BEFORE","ARMAGEDDON_AFTER","MENDING_RESET_BEFORE","MENDING_RESET_AFTER","GLYPHS_EQUIPPED_CHANGED","GLYPHS_CHANGED","GLYPH_SACRIFICED","GLYPH_SET_SAVE_CHANGE","GLYPH_VISUAL_CHANGE","BREAK_INFINITY","FIX_INFINITY","INFINITY_DIMENSION_UNLOCKED","INFINITY_CHALLENGE_COMPLETED","INFINITY_UPGRADE_BOUGHT","INFINITY_UPGRADE_CHARGED","INFINITY_UPGRADES_DISCHARGED","BREAK_INFINITY_UPGRADE_BOUGHT","BREAK_INFINITY_UPGRADE_CHARGED","BREAK_INFINITY_UPGRADES_DISCHARGED","ACHIEVEMENT_UNLOCKED","CHALLENGE_FAILED","REALITY_UPGRADE_BOUGHT","REALITY_UPGRADE_TEN_BOUGHT","PERK_BOUGHT","BLACK_HOLE_UNLOCKED","BLACK_HOLE_UPGRADE_BOUGHT","EXPO_BLACK_HOLE_UPGRADE_BOUGHT","GAME_LOAD","OFFLINE_CURRENCY_GAINED","SAVE_CONVERTED_FROM_PREVIOUS_VERSION","REALITY_FIRST_UNLOCKED","AUTOMATOR_TYPE_CHANGED","AUTOMATOR_SAVE_CHANGED","AUTOMATOR_CONSTANT_CHANGED","PELLE_STRIKE_UNLOCKED","MENDING_UPGRADE_BOUGHT","WARP_UPGRADE_BOUGHT","CORRUPTION_UPGRADE_BOUGHT","RA_UPGRADE_BOUGHT","EXPO_BLACK_HOLE_UNLOCKED","ACHIEVEMENT_EVENT_OTHER","ENTER_PRESSED","ARROW_KEY_PRESSED","TAB_CHANGED","CLOSE_MODAL","Array","prototype","distinct","value","index","self","indexOf","wrap","number","max","range","offset","clamp","clampMax","clampMin","nextSiblingIndex","current","currentIndex","nextSibling","previousSiblingIndex","previousSibling","Decimal","sumReducer","accumulator","previous","add","prodReducer","mul","Number","maxReducer","a","b","copyFrom","decimal","DecimalCurrency","mantissa","exponent","copyToClipboard","el","document","createElement","body","appendChild","style","position","left","setAttribute","str","select","execCommand","ex","console","log","safeCall","String","capitalize","toLowerCase","replace","c","toUpperCase","splice","start","delCount","newSubStr","slice","abs","count","repeat","fill","first","predicate","last","mapToObject","keyFun","valueFun","out","idx","dimensionTiers","reduce","sumD","countWhere","item","clampMaxExponent","maxExp","fromMantissaExponent_noNormalize","toDecimal","valueOf","log4","randomElement","floor","random","Error","Set","find","some","every","compact","x","toBitmask","prev","mask","id","fromBitmask","bitIndices","isWhiteSpace","trim","isEND","threshold","GameEnd","endState","END_STATE_MARKERS","END_NUMBERS","FADE_AWAY","player","celestials","pelle","doomed","format","places","placesUnder1000","Notations","formatNE","formatInt","isPainful","name","formatWithCommas","toFixed","toNumber","formatFloat","digits","formatPostBreak","notation","isFinite","infinite","fromValue_noAlloc","sign","formatVerySmallNegativeDecimal","formatVerySmallDecimal","formatNegativeUnder1000","formatUnder1000","formatNegativeDecimal","formatDecimal","formatX","formatPow","formatPercents","formatPercentsD","formatRarity","endsWith","formatMachines","realPart","imagPart","parts","neq","eq","join","timeDisplay","TimeSpan","fromMilliseconds","toString","timeDisplayNoDecimals","toStringNoDecimals","timeDisplayShort","toStringShort","commaRegexp","decimalPointSplit","split","isSingular","amount","PLURAL_HELPER","Map","pluralDatabase","pluralize","word","plural","existingPlural","get","newWord","generatePlural","set","match","replaceWith","entries","quantify","formatType","quantifyInt","makeEnumeration","items","commaSeparated","includes","search","defineProperty","searchElement","fromIndex","TypeError","o","len","n","k","sameValueZero","y","isNaN","log10","LOG10E","log2","LOG2E","NodeList","forEach","callback","thisArg","call","arguments","kValue","array","apply","invert","obj","result","assign","varArgs","to","nextSource","nextKey","hasOwnProperty","writable","configurable","times","Guard","isNumber","_ms","other","isTimeSpan","setFrom","years","totalYears","days","totalDays","div","sub","hours","totalHours","minutes","totalMinutes","seconds","totalSeconds","milliseconds","totalMilliseconds","plus","minus","dividedBy","gt","lte","addCheckedComponent","addComponent","useHMS","isSpeedrun","lt","sec","formatHMS","s","toTimeEstimate","zero","maxValue","pow10","MAX_VALUE","minValue","MIN_VALUE","isDefined","message","CodeMirror","Vue","DEV","process","VUE_APP_DEV","STEAM","VUE_APP_STEAM","MAC","navigator","platform","NotImplementedError","super","GlobalErrorHandler","handled","cleanStart","onerror","getElementById","display","requestAnimationFrame","crash","stopGame","clearHandles","clear","GameKeyboard","disable","GameIntervals","stop","setInterval","clearInterval","clearTimeout","cancelAnimationFrame","initialized","Modal","show","source","deepFreeze","prop","reference","freeze","PRESTIGE_EVENT","DIMENSION_BOOST","ANTIMATTER_GALAXY","INFINITY","ETERNITY","REALITY","MENDING","DC","DM1","D0","D0_01","D0_1","D0_4","D0_55","D0_8446303389034288","D0_95","D0_965","D1","D1_0000109","D1_00038","D1_0004","D1_0025","D1_005","D1_007","D1_02","D1_0285","D1_2","D1_3","D2","D3","D4","D5","D6_66","D15","D16","D11111","D3E4","D2E5","D2E6","D5E7","D2E9","D2E25","D2E22222","D9_99999E999","D9_9999E9999","C1D1_1245","D2P30D0_61","pow","C2P30","C2P1024","C10P16000D3","E1","E2","E3","E5","E6","E8","E9","E10","E12","E15","E20","E25","E29","E30","E31","E36","E40","E43","E45","E50","E55","E58","E60","E63","E70","E75","E80","E90","E100","E140","E150","E160","E170","E175","E200","E250","E260","E280","E300","E308","E309","E310","E315","E320","E333","E349","E400","E450","E500","E530","E550","E600","E616","E650","E750","E850","E900","E925","E975","E1000","E1100","E1200","E1300","E1400","E1500","E1750","E1800","E1900","E2000","E2350","E2400","E2500","E2650","E2700","E2750","E2800","E2900","E3000","E3200","E3350","E4000","E5000","E6000","E8000","E9000","E10000","E10500","E11000","E11111","E11200","E12000","E13000","E14000","E16500","E17500","E18000","E20000","E22500","E23000","E27000","E28000","E30000","E45000","E54000","E60000","E100000","E110000","E164000","E200000","E201600","E208000","E210000","E300000","E320000","E500000","E1E6","E3E6","E6E6","E1E7","E2E7","E4E7","E6E7","E1E8","E1_5E12","E1E15","END","E1E9","E1E10","WARP_LIMIT","AUTOBUYER_MODE","BUY_SINGLE","BUY_10","BUY_MAX","AUTO_CRUNCH_MODE","AMOUNT","TIME","X_HIGHEST","AUTO_ETERNITY_MODE","AUTO_REALITY_MODE","RM","GLYPH","EITHER","BOTH","RELIC_SHARD","AUTO_MEND_MODE","RECENT_PRESTIGE_RESOURCE","ABSOLUTE_GAIN","RATE","CURRENCY","PRESTIGE_COUNT","TS171_MULTIPLIER","TS309_MULTIPLIER","GLYPH_MIME_TYPE","GlyphRarities","minStrength","darkColor","lightColor","darkHighContrast","lightHighContrast","GLYPH_BG_SETTING","AUTO","LIGHT","DARK","GLYPH_TYPES","FUNCTIONAL_GLYPH_TYPES","BASIC_GLYPH_TYPES","ALCHEMY_BASIC_GLYPH_TYPES","GLYPH_SYMBOLS","power","infinity","replication","time","dilation","effarig","reality","cursed","companion","amalgam","CANCER_GLYPH_SYMBOLS","ALTERATION_TYPE","ADDITION","EMPOWER","BOOST","BLACK_HOLE_PAUSE_MODE","NO_PAUSE","PAUSE_BEFORE_BH1","PAUSE_BEFORE_BH2","EXPO_BLACK_HOLE_PAUSE_MODE","GLYPH_SIDEBAR_MODE","INVENTORY_MANAGEMENT","FILTER_SETTINGS","SAVED_SETS","SACRIFICE_TYPE","AUTO_SORT_MODE","NONE","LEVEL","POWER","EFFECT","SCORE","AUTO_GLYPH_SCORE","LOWEST_SACRIFICE","EFFECT_COUNT","RARITY_THRESHOLD","SPECIFIED_EFFECT","EFFECT_SCORE","LOWEST_ALCHEMY","ALCHEMY_VALUE","AUTO_GLYPH_REJECT","SACRIFICE","REFINE","REFINE_TO_CAP","TIME_STUDY_PATH","ANTIMATTER_DIM","INFINITY_DIM","TIME_DIM","ACTIVE","PASSIVE","IDLE","TIME_STUDY_TYPE","NORMAL","ETERNITY_CHALLENGE","DILATION","TRIAD","MYRIAD","KOHLER_EXCLUSIVE","TS_REQUIREMENT_TYPE","AT_LEAST_ONE","ALL","DIMENSION_PATH","ALCHEMY_RESOURCE","REPLICATION","CARDINALITY","DIMENSIONALITY","INFLATION","ALTERNATION","EFFARIG","SYNERGISM","MOMENTUM","DECOHERENCE","EXPONENTIAL","FORCE","UNCOUNTABILITY","BOUNDLESS","MULTIVERSAL","UNPREDICTABILITY","SINGULARITY_MILESTONE_RESOURCE","SINGULARITIES","CONDENSE_COUNT","MANUAL_TIME","AUTO_TIME","SINGULARITY_MILESTONE_SORT","SINGULARITIES_TO_NEXT","CURRENT_COMPLETIONS","PERCENT_COMPLETIONS","FINAL_COMPLETION","MOST_RECENT","COMPLETED_MILESTONES","FIRST","LAST","IGNORED","SORT_ORDER","ASCENDING","DESCENDING","PROGRESS_STAGE","PRE_INFINITY","EARLY_INFINITY","REPLICANTI","EARLY_ETERNITY","ETERNITY_CHALLENGES","EARLY_DILATION","LATE_ETERNITY","EARLY_REALITY","TERESA","ENSLAVED","V","RA","IMAGINARY_MACHINES","LAITELA","PELLE","STD_BACKEND_URL","SPEEDRUN_SEED_STATE","UNKNOWN","FIXED","RANDOM","PLAYER","V_FLIP","HARD","SUPER","LOG10_MAX_VALUE","LN_SQRT_2_PI","PI","LOG10_2","LOG10_E","E","PI_2","bulkBuyBinarySearch","money","costInfo","alreadyBought","costFunction","firstCost","isCumulative","cumulative","nextCost","cantBuy","gte","quantity","purchasePrice","canBuy","MAX_SAFE_INTEGER","middle","baseCost","otherCost","newCost","totalCost","LinearMultiplierScaling","baseRatio","growth","scale","ratio","shift","logTotalMultiplierAfterPurchases","u","log1p","purchasesForLogTotalMultiplier","logMult","Lb","refineFinal","g","Lg","v","fVal","fDeriv","fD2","delta1","sqrt","g0","rhs","K1","K2","K3","h0","h1","g1","logTotalMultiplierAfterPurchasesBaseline","getCostWithLinearCostScaling","amountOfPurchases","costScalingStart","initialCost","costMult","costMultGrowth","preScalingPurchases","preScalingCost","ceil","scaling","postScalingCost","exp","findFirstInfiniteCostPurchase","upper","lower","mid","LinearCostScaling","resourcesAvailable","costMultiplier","maxPurchases","free","_purchases","_totalCostMultiplier","_totalCost","purchases","totalCostMultiplier","ExponentialCostScaling","param","_baseCost","_baseIncrease","baseIncrease","_costScale","costScale","_logBaseCost","_logBaseIncrease","_logCostScale","purchasesBeforeScaling","_purchasesBeforeScaling","scalingCostThreshold","updateCostScale","_precalcDiscriminant","_precalcCenter","calculateCost","currentPurchases","logBase","excess","logCost","getMaxBought","rawMoney","numberPerSet","logMoney","logPrice","newPurchases","discrim","pExcess","getContinuumValue","contValue","productLog","curr","permutationIndex","lexIndex","numPerm","remOrder","ordered","perm","rem","getHybridCostScaling","linCostScalingStart","linInitialCost","linCostMult","linCostMultGrowth","expInitialCost","expCostMult","expCostMultGrowth","normalCost","postInfinityAmount","logFactorial","LOGS","TABLE","NaN","lngamma","exp1m","xorshift32Update","state","fastRandom","normalDistribution","haveSpare","spare","mean","stdDev","mag","t","binomialGeneratorFC","stirlingBase","xr","binomialDistributionSmallExpected","numSamples","p","R","NxR","pdf","cdf","output","binomialDistribution","e","pNumber","expected","poissonDistribution","approximateVariance","round","binomialDistributionBTRD","poissonDistributionViaNormal","poissonDistributionSmallExpected","poissonDistributionPTRD","approxStdev","m","alpha","kU","kV","w","us","km","f","rho","logV","_nm","_nk","h","mu","sMu","iAlpha","vR","ik","depressedCubicRealRoots","k3","k1","k0","r","cbrt","innerDisc","po3","theta","acos","cos","quadraticRealRoots","k2","ktmp","disc","bdsc","cubicRealRoots","bo3a","bo3a2","coa","q","dcrr","testCRR","depressedQuarticRealRoots","k4","reducedSol","squareSol","solution","sr","mSol","sqrt2m","dInner","d1","d2","testDQRR","solveSimpleBiquadratic","A","B","C","D","F","solutions","xSol","yTmp","ySol","xTmp","AoB","CoB","testSSBQ","sols","e1","e2","AffineTransform","a00","a01","a10","a11","o0","o1","ot","Vector","transformedBy","translated","offX","offY","rotated","angle","rotation","scaled","withoutTranslation","sin","sc","dot","cross","asTranslate","asRotate","atan2","factor","copy","matrixTransform","tform","negative","normalized","right90","left90","rad","deg","unitFromRadians","Curve","derivative","secondDerivative","curvature","d","dd","dMag","shapeAt","direction","minimumDistanceTo","pDes","tMin","tMax","tGuess","tTol","EPSILON","iter","dist","distDeriv","distSecondDeriv","tStep","LinearPath","p0","p1","trimStart","dir","trimEnd","transformed","relativeSVG","createOffsetLine","t1","off","r0","r1","CubicBezier","p2","p3","nt2","t2","d3","reverse","shape0","shape1","dP","reversed","pathRotation","magSol","OffsetCurve","baseCurve","base","shape","LogarithmicSpiral","center","rate","unit","radius","ur","angleFromRadius","theta0","theta1","PiecewisePath","data","path","element","toSVG","initialPrefix","lines","part","curve","tol","minPieces","subdivide","shapeStart","shapeEnd","maxDepth","shapeMid","single","singleFit","fitCurveSection","tMid","err","ExponentialMovingAverage","maxOutliers","highOutlierThreshold","lowOutlierThreshold","outliers","_average","average","addValue","absValue","absAverage","highOutlier","lowOutlier","outlier","Effect","effect","cap","condition","isCustomEffect","isFunction","isDecimal","isConstant","createProperty","addGetter","property","conditionProperty","uncappedEffectValueProperty","capProperty","effectValueProperty","effectValue","specializedProperty","capValue","uncappedEffectValue","isEffectConditionSatisfied","isEffectActive","canBeApplied","effectOrDefault","defaultValue","applyEffect","applyFn","Effects","effectSources","applyEffectsOf","product","foundLast","reversedSources","reducer","effectSource","plusEffectOf","plusEffectsOf","minusEffectOf","minusEffectsOf","timesEffectOf","timesEffectsOf","resultMantissa","resultExponent","fromMantissaExponent","dividedByEffectOf","dividedByEffectsOf","powEffectOf","powEffectsOf","GameMechanicState","effectCondition","_config","effects","key","nested","id2","registerEvents","events","gameData","mapGameData","accessor","BitUpgradeState","bits","modBits","isUnlocked","Boolean","canBeUnlocked","onUnlock","unlock","PurchasableMechanicState","currency","isAffordable","cost","isAvailableForPurchase","isRebuyable","isBought","canBeBought","purchase","subtract","onPurchased","update","SetPurchasableMechanicState","has","delete","BitPurchasableMechanicState","bitIndex","RebuyableMechanicState","isCapped","boughtAmount","creditsEverClosed","PlayerProgress","mendingUnlocked","predictableRandom","randomSymbol","fromCharCode","wordCycle","list","noBuffer","tick","mod5","largeTick","blendWords","randomCrossWords","maxWordLen","bufferSpace","frac","randomIndex","second","substring","makeGarbledTemplate","input","text","garbled","charCodeAt","processText","unmodified","garbledTemplate","raw","wordShift","modified","glyphTypes","symbol","color","primaryEffect","alchemyResource","hasRarity","EffarigUnlock","MendingUpgrade","canCustomize","fixedSymbolColor","glyphs","createdRealityGlyph","isFlipped","cosmeticGlyphs","music","TeresaUnlocks","shop","blob","preventBlur","Themes","available","PERK_FAMILY","ANTIMATTER","AUTOMATION","ACHIEVEMENT","perks","firstPerk","label","family","description","layoutPosList","startAM","bumpCurrency","Currency","antimatter","bumpTo","startIP1","infinityPoints","startIP2","startEP1","eternityPoints","automatorPoints","shortDescription","startEP2","startEP3","startTP","Enslaved","isRunning","antimatterNoReset","studyPassive","Pelle","isDoomed","autounlockEU1","autounlockEU2","autounlockDilation1","MendingMilestone","two","isReached","autounlockDilation2","autounlockDilation3","autounlockTD","autounlockReality","bypassIDAntimatter","bypassTGReset","bypassECDilation","bypassEC1Lock","bypassEC2Lock","bypassEC3Lock","bypassEC5Lock","autocompleteEC1","autocompleteEC2","autocompleteEC3","studyActiveEP","studyIdleEP","studyECRequirement","studyECBulk","retroactiveTP1","retroactiveTP2","retroactiveTP3","retroactiveTP4","autobuyerDilation","autobuyerFasterID","autobuyerFasterReplicanti","autobuyerFasterDilation","ttBuySingle","ttFree","ttBuyMax","achievementGroup1","achievementGroup2","achievementGroup3","achievementGroup4","achievementGroup5","perkConnections","groups","connections","perk","connectedPerks","directConnections","indirectConnections","groupPerk","connectedPerk","render","_vm","_h","$createElement","_c","_self","staticClass","class","validityClass","attrs","inputType","domProps","displayValue","handleBlur","handleFocus","handleInput","staticRenderFns","props","autobuyer","type","required","isValid","isFocused","computed","typeFunctions","functions","AutobuyerInputFunctions","methods","updateActualValue","actualValue","areEqual","copyValue","updateDisplayValue","formatValue","parsedValue","tryParse","SecretAchievement","Notation","scientific","parseFloat","replaceAll","fromString","float","int","parseInt","isInteger","component","automatorTemplates","paramTypes","isValidString","validImport","TimeStudyTree","isValidImportString","preset","validPreset","timestudy","presets","boolDisplay","scripts","inputs","prompt","warnings","RealityUpgrade","Perk","Achievement","automator","categoryNames","commands","keyword","category","syntax","examples","sections","header","BlackHole","filterText","glyphFilter","stText","spaceTheorems","otherAutomatorPoints","realities","templates","glyphCosmeticSets","cards","sus","oldCurrency","pipe","pipe2","trigram","arrow","arrow2","arrow3","integral","numbers","blocks","shapes","chess","planet","musical","recycle","dice","hazard","celestial","alchemy","blob2","star","star2","gem","heiroglyph","paperclip","snake","egyptNumber","egyptWeather","limbs","animal","GlyphCombiner","multiply","addExponents","multiplyDecimal","glyphEffects","timepow","bitmaskIndex","isGenerated","singleDesc","totalDesc","shortDesc","level","strength","formatEffect","formatSingleEffect","combine","enabledInDoomed","enabledInDoomedWithlvl25","timespeed","genericDesc","GlyphAlteration","isEmpowered","alteredColor","getEmpowermentColor","alterationType","timeetermult","sacrificeBoost","getBoostColor","timeEP","isAdded","conversion","formatSecondaryEffect","getAdditionColor","dilationDT","dilationgalaxyThreshold","prod","capped","dilationTTgen","dilationpow","replicationspeed","replicationpow","replicationdtgain","formatSingleSecondaryEffect","replicationglyphlevel","infinitypow","infinityrate","infinityIP","softcap","Effarig","eternityCap","infinityinfmult","powerpow","powermult","powerdimboost","powerbuy10","effarigrm","Ra","unlocks","effarigGlyphIncreaseImCap","effarigglyph","effarigblackhole","effarigachievement","effarigforgotten","effarigdimensions","effarigantimatter","timeshardpow","cursedgalaxies","curseddimensions","cursedtickspeed","cursedEP","reciprocal","realityglyphlevel","realitygalaxies","realityrow1pow","realityDTglyph","companiondescription","cursedCount","Glyphs","active","companionEP","strengthToRarity","glyphSacrifice","added","isDisabled","sac","GlyphSacrificeHandler","maxSacrificeForEffects","sacCap","nextDistantGalaxy","nextGalaxyText","uncapGlyphSacEffects","rebuyable","imaginaryRebuyables","ra","upgrades","formatCost","imaginaryUpgrades","dmdScaling","requirement","four","relicShards","hasFailed","checkRequirement","checkEvent","records","totalAntimatter","isDisabledInDoomed","glyphWeights","gainedGlyphLevel","actualLevel","ImaginaryUpgrades","totalRebuyables","MachineHandler","uncappedRM","simulatedRealityCount","totalSinglePurchase","EternityChallenge","Tickspeed","perSecond","eight","requirementChecks","maxID1","canLock","Laitela","maxAllowedDimension","Singularity","singularitiesGained","darkEnergy","SingularityMilestone","autoCondense","Infinity","ImaginaryUpgrade","Replicanti","galaxies","total","totalTachyonGalaxies","maxStudies","continuumValue","lockEvent","matterExtraPurchaseFactor","noContinuum","imaginaryMachines","maxGlyphs","Tesseracts","effectiveCount","slowestBH","laitela","singularities","activeWithoutCompanion","TimeStudy","rebuyables","getAdjustedGlyphEffect","textTemplate","realityUpgrades","eternity","noRG","noEternities","noInfinities","gainedAutoAchievements","Achievements","invalidEquippedGlyphs","hasValidGlyphInInventory","inventory","bypassLock","infinitiesBanked","gainedInfinities","completions","BreakInfinityUpgrade","infinitiedGen","chargedEffect","timeTheorems","one","TimeDimension","equals","eternities","continuousTTBoost","epmultUpgrades","EternityUpgrade","epMult","availableGlyphs","equipped","availableSlots","activeSlotCount","activeList","countValuesFromBitmask","allGlyphs","Time","timeSinceBlackHole","realityMachines","timeShards","thisReality","bestReality","gainedRealityMachines","bestEP","MultiplierTabIcons","DIMENSION","tier","tierText","PURCHASE","CHALLENGE","icon","textColor","UPGRADE","CONVERT_FROM","DIVISOR","DIMBOOST","TICKSPEED","GALAXY","INFINITY_POWER","IPOW_CONVERSION","TIME_STUDY","TACHYON_PARTICLES","GENERIC_GLYPH","SPECIFIC_GLYPH","BLACK_HOLE","GAMESPEED","GENERIC_TERESA","GENERIC_ENSLAVED","GENERIC_V","GENERIC_RA","ALCHEMY","BH_PULSE","GENERIC_LAITELA","SINGULARITY","MENDINGMILESTONE","IAP","CORRUPTION","CORRUPTION_BONUS","SOFTCAP","AM","displayOverride","productionPerSecond","multValue","isActive","overlay","effarigAM","powValue","ad1","AntimatterDimension","baseProd","totalAmount","multiplier","isProducing","_player","isInfinityUnlocked","infinityData","infinitied","infinities","isEternityUnlocked","isRealityUnlocked","isMendingUnlocked","hasFullCompletion","fullGameCompletions","break","areUnlocked","ec12","realityUnlocked","NormalChallenges","all","isCompleted","InfinityChallenges","mends","MultiplierTabHelper","activeDimCount","AntimatterDimensions","ad","InfinityDimensions","TimeDimensions","td","globalGalaxyMult","InfinityUpgrade","galaxyBoost","InfinityChallenge","reward","PelleUpgrade","galaxyPower","PelleRifts","decay","milestones","improvedECRewards","vReward","specialGlyphEffect","galBoostPoints","decomposeTickspeed","effectiveBaseGalaxies","galFrac","tickFrac","baseMult","NormalChallenge","perGalaxy","totalUpgrades","logPerGalaxy","baseFrac","tickspeed","achievementDimCheck","ach","dimStr","substr","charAt","timeStudyDimCheck","ts","ICDimCheck","ic","ECDimCheck","ec","blackHoleSpeeds","currBH","BlackHoles","bh","bh1","bh2","avgBH","dutyCycle","pluralizeDimensions","dims","evenDimNC12Production","nc12Pow","maxTier","oddDimNC12Production","actualNC12Production","multInNC12","dim","isNC12ProducingEven","AD","singleMult","nc12Prod","mult","highestDim","dilationEffect","baseEff","DilationUpgrade","dilationPenalty","multDilation","isDilated","getPurchases","continuumActive","bought","buyTenMultiplier","dimboost","DimBoost","multiplierToNDTier","sacrifice","Sacrifice","totalBoost","achievementMult","achievement","allMult","dimMults","totalMult","infinityUpgrade","totalTimeMult","thisInfinityTimeMult","unspentIPMult","allPow","dimPow","breakInfinityUpgrade","totalAMMult","currentAMMult","slowestChallengeMult","infinitiedMult","infinityPower","fakeValue","powerConversionRate","infinityChallenge","timeStudy","eternityChallenge","glyph","totalPow","VUnlocks","adPow","AlchemyResource","dimensionality","force","basePow","momentumValue","inflationPow","inflation","inflated","unlockGlyphAlchemy","antimatterDimensionMult","paradox","iap","ShopPurchase","dimPurchases","currentMult","allDimPurchases","ShopPurchaseData","totalSTD","effectNC","formatFn","num","chall2Pow","chall3Pow","totalNC12","nerfIC","postC4Tier","nerfV","nerfCursed","nerfPelle","PelleStrikes","hasStrike","nerfSHardV","isSuperRunning","DT","getDilationGainPerSecond","getGameSpeedupForDisplay","dtGain","dtGainPelle","flatDilationMult","amplifierDT","dtMult","repliDT","ra1","dilatedTime","autoTP","ra2","peakGamespeedDT","mendingMilestones","dilatedTimePurchases","gamespeed","ignoresNerfPowers","effarig65","relicShardBoost","isBase","gainedEternities","amplifierEter","teresa90","realitiesBoostInfinityAndEternityProduction","corruptionPenalties","prestigeLimits","dimLimits","preNerf","postNerf","timeCompression","hiddenFour","hiddenEight","galWeak","hiddenThree","hiddenSix","compGlyphs","rarity","hiddenSeven","tickExtension","atomDilution","toD","hiddenFive","repSing","rep","sing","dm","presGain","soF","ttcost","ttgen","tdpow","alchemyNormalcy","secondaryRejection","EP","Player","canEternity","gainedEternityPoints","eternityUnlocked","thisEternity","maxIP","gainedInfinityPoints","recursion","IP","divisor","eternityUpgrade","GlyphEffect","getSecondaryGlyphEffect","realityUpgrade","vacuum","EPPurchases","nerfTeresa","Teresa","nerfCorruptions","mending","corruption","corruptionChallenge","corruptedMend","nerfSoftcap","GalaxyGenerator","replicanti","rg","extra","ReplicantiUpgrade","tachyon","alternation","isStoringRealTime","getGameSpeedupFactor","avgSpeed","isAutoReleasing","avgString","seenAlteredSpeed","blackHoleCurr","arePaused","blackHoleAvg","achievementBH","pulsing","autoReleaseSpeed","canRelease","singularity","gamespeedFromSingularities","timeSpeedMult","chargingBH","autoPulseTime","isStoringGameTime","invertedBH","blackHoleNegative","areNegative","nerfLaitela","thisRealityRealTime","expoBlackHoles","ExpoBlackHole","CorruptionUpg","CorruptionData","recordScore","nerfCorruptions2","general","ipGain","totalEffect","singleEffect","ic4Pow","mults","amplifierInf","infinitiedPow","ID","InfinityDimension","getMult","powerMultiplier","baseAmount","basePurchase","HARDCAP_PURCHASES","_powerMultiplier","tesseractPurchase","infinityGlyphSacrifice","GlyphSacrifice","powPurchase","replicantiMult","maxActiveDim","idMultEP","idMultEternities","idMultICRecords","eu1","eu2","eu3","tickRate","activeDims","dimString","imaginaryUpgrade","decayMult","powerConversion","v50","vAchMilestone2AffectsIDsAndTDs","powerGalaxies","canCrunch","thisInfinity","maxAM","ipMult","dilationUpgrade","ipMultDT","unlockPelleGlyphEffects","exponential","realityMachinesBoostIpAndEpGain","IPPurchases","totalReplicantiSpeedMult","replicantiCap","preReality","baseEffect","alteredEffect","amplifierRep","realityUpgrade1","realityUpgrade2","replicantiPurchases","TP","baseTPStr","tachyonParticles","baseTP","tachyonGainMultiplier","tachyonGain","amplifierTP","dilationGlyphSacrifice","nerfEnslaved","tachyonNerf","tickDilation","ag","tg","pelleTickspeedPow","tickspeedPower","tickspeedUpgrades","purchased","totalTickBought","totalTickGained","TD","timeGlyphSacrifice","tdMultAchs","tdMultTheorems","tdMultRealTime","tdMultReplicanti","chaos","corruptions","recordCorruptions","bGLwC","isCorrupted","nextCorrupted","corruptedFragments","recordCorruptedFragments","corruptNext","calcBaseScore","corruptionScores","finalScore","calcScore","scoreCalc","partialSum","CorruptionUpgrade","hostScore","cu20","multiplierTabValues","dynamicGenProps","propList","toCopy","append8","getProps","resource","newProps","multiplierTabTree","AM_total","AD_total","ID_total","TD_total","IP_total","IP_base","EP_total","EP_base","TP_total","DT_total","tickspeed_total","tickspeed_upgrades","tickspeed_galaxies","infinities_total","eternities_total","gamespeed_total","replicanti_total","hostScore_total","allGamespeed","unshift","dimTypes","singleRes","targetedEffects","checkFn","res","removedRegexes","removedProps","regex","AD_infinityPower","ID_purchase","ID_purchase_8","TD_purchase","TD_purchase_8","eff","propStr","ID_eternityUpgrade","TD_eternityUpgrade","normalAchievements","NewsHandler","uniqueTickersSeen","purchasedBoosts","isOnlyActiveChallenge","getSacrificeDescription","lastUpdate","thisInfinityRealTime","noSacrifice","infinityUpgrades","size","multipliers","AchievementTimers","marathon1","check","Autobuyer","antimatterDimension","zeroIndexed","concat","hasMaxedInterval","Autobuyers","upgradeable","bulkCap","hasMaxedBulk","bestRunIPPM","challengeSum","isInAnyChallenge","completed","NUMBER_MAX_VALUE","totalTimePlayed","recip","nextBoost","infinityChallengeSum","onlyAD8","EternityMilestone","recentInfinities","infinitiesTotal","bulk","onlyAD1","EternityChallenges","marathon2","noAD1","studies","IPMultPurchases","buyTenMult","automatorUnlocked","recentEternities","interval","duration","Perks","RealityUpgrades","allBought","noAD8","inventoryList","noAM","noPurchasedTT","getGlyphEffectsFromBitmask","isPermanent","ep","totalPetLevel","charged","noTriads","alchemyResourceCap","AlchemyResources","SingularityMilestones","displayId","antimatterDimAutobuyers1","antimatterDimAutobuyers2","ECs","GAME_END","removeAdditionalEnd","six","warped","secretAchievements","pain","permanent","emojiGalaxies","matter","bestInfinity","bestEternity","singleTickspeed","isMusicGlyph","Tab","statistics","isOpen","perkTreeDragging","achievements","normal","secret","awayProgressTypes","infinityUnlocked","replicantiUnlocked","dilationUnlocked","appearsInAwayModal","awayOption","classObjectReference","showOption","raUnlock","pets","teresa","forcedName","enslaved","isIMUnlocked","catchupResources","requiredStage","openH2pEntry","emphasizeEnd","fraction","vUnlockProgress","vAchievementUnlock","db","GameDatabase","mainUnlock","vUnlockLegendLabel","complete","pelleStarPosition","pelleCenter","pelleStarConnector","fillColor","isOverfill","pelleSize","pathStart","pathEnd","fromPolarEndpoints","pathPadStart","pathPadEnd","drawOrder","CELESTIAL_NAV_DRAW_ORDER","NODE_OVERLAYS","noBG","FILL_STATE","LOCKED","FILL","DRAIN","OVERFILL","riftFillStage","rift","hasGalaxyGenerator","reducedTo","NODE_BG","CONNECTORS","NODES","CANVAS_OVERLAY","Positions","teresaPerkPointShop","effarigShop","effarigRealityUnlock","effarigNode","enslavedReality","enslavedGlyphLevel","enslavedGlyphRarity","vUnlockAchievement","vAchievement0","vAchievement1","vAchievement2","vAchievement3","vAchievement4","vAchievement5","raReality","raPetTeresa","raPetEffarig","raPetEnslaved","raPetV","laitelaFirstCenter","laitelaFirstLeft","laitelaFirstRight","laitelaSecondCenter","laitelaSecondLeft","laitelaSecondRight","laitelaThirdCenter","pelleUnlock","pelleAchievementRequirement","pelleVacuum","pelleDecay","pelleChaos","pelleRecursion","pelleParadox","pelleGalaxyGen","pelleRiftFill","textAngle","fillType","visibleCheck","progressFn","legendFn","percentFn","incompleteClass","nodeFill","connectorFill","realPercentage","percentage","visible","node","clickAction","ring","rMajor","forceLegend","legend","diagonal","horizontal","connector","fillStates","riftNames","angles","riftFillElements","celestialNavigation","completeClass","rMinor","pLog10","pouredAmount","price","hideWhenCompleted","rm","runCompleted","alwaysShowLegend","connectCircles","completeWidth","incompleteWidth","rs","am","bgDrawOrder","ip","goal","gapCenterDeg","gapDeg","glyphLevel","gapAngleDeg","bestRarity","glyphStrength","symbolOffset","VRunUnlocks","isStacked","unlocked","effarigUnlock","enslavedUnlock","vUnlock","DarkMatterDimension","unlockUpgrade","baseRMCap","symbolScale","realityName","realityMachineCap","hasIDs","amGoal","upgrade","difficultyTier","fastestCompletion","dmdText","adjustedStartingCost","darkMatter","singularityGoal","auto","allGalaxies","isPossible","imCost","laitelaProgress","laitelaString","prePelleRows","generatedGalaxies","generationCap","riftCaps","galaxyGeneratorThreshold","brokenRifts","prevRift","nextRift","currRiftProp","sigilProgress","riftProgress","generatorProgress","SigilAttributes","canvasLayer","scaledPos","att","reflectAcrossVertical","vec","sigilShape","colorOverride","pos","end","initAngle","finalAngle","init","weight","circTop","circMid","circBot","topC","top1","top2","top3","arm1","arm2","arm3","lowC","low1","botC","bot1","bot2","Shapes","botCircR","botH","lowH","circUp","circDown","vert2","vertC","vertDiag1","vert1","vertDiag2","vertDiag3","topH","circTopUp","circTopDown","toReflect","arcSegments","arcIndex","finalSigil","draw","initRadius","finalRadius","thickness","layer","glow","galaxyIcon","alchemyResources","isBaseResource","uiOrder","unlockedAt","reagents","rawValue","effarigUnlocks","adjuster","quotes","unlockWeights","view","tabs","openGlyphWeights","unlockGlyphFilter","showSidebarPanel","setSaves","unlockSetSaves","unlockRun","mend","hintsUnlocked","hint","ec1","feelEternity","ec6","c10","secretStudy","storedTime","challengeCombo","glyphHints","currencyLabel","pelleGalaxyGeneratorUpgrades","additive","galaxyGeneratorGalaxies","multiplicative","antimatterMult","IPMult","EPMult","expWithIncreasedScale","base1","base2","incScale","coeff","pelleUpgrades","glyphLevels","infConversion","dimBoostAutobuyer","keepAutobuyers","galaxyAutobuyer","tickspeedAutobuyer","keepInfinityUpgrades","dimBoostResetsNothing","keepBreakInfinityUpgrades","IDAutobuyers","keepInfinityChallenges","galaxyNoResetDimboost","replicantiAutobuyers","replicantiGalaxyNoReset","eternitiesNoReset","timeStudiesNoReset","replicantiStayUnlocked","keepEternityUpgrades","TDAutobuyers","keepEternityChallenges","dilationUpgradesNoReset","tachyonParticlesNoReset","rebuyableCost","increment","perkShop","otherReq","costCap","perkShopIncrease","rmMult","bulkDilation","autoSpeed","musicGlyph","fillMusicGlyph","GameCache","glyphInventorySpace","chunkGain","memoryGain","secondaryMemoryChunkGain","requiredUnlock","rawMemoryChunksPerSecond","perkPoints","improvedChunkGains","ln","memoryProductionMultiplier","teresaXP","ten","primeShardsGained","shardsGained","softcapedShardGained","unlockPelleContinuum","effarigXP","enslavedXP","vXP","memories","primeAnswer","imaginaryBoosts","generateMemChunksOutOfRasReality","raXP","totalContinuum","unlockDMD","laitelaXP","realityShards","remnants","pelleXP","pet","displayIcon","disabledByPelle","chargedInfinityUpgrades","alteredGlyphs","unlockDilationStartingTP","extraGlyphChoicesAndRelicShardRarityAlwaysMax","glyphEffectCount","relicShardGlyphLevelBoost","maxGlyphRarityAndShardSacrificeBoost","maxRarityBoost","blackHolePowerAutobuyers","improvedStoredTime","gameTimeAmplification","levelCap","realTimeCap","peakGamespeed","allGamespeedGlyphs","applyGamespeed","instantECAndRealityUpgradeAutobuyers","autoUnlockDilation","totalTimeTheoremRequirement","unlockHardV","ttGen","theoremBoostFactor","memoryChunks","autoPrestige","achievementTTMult","achievementPower","imaginaryMachinesSetToCap","chargedBreakInfinityUpgrades","retroactiveTeresaRealityReward","imaginaryBoost","alchSetToCapAndCapIncrease","passiveRelicShardGain","harshInstabilityDelay","maxGlyphRarityIncrease","effarigMendUnlock","uncapGamespeed","uncap8TdPurchaseMult","unlock3rdBH","twinTachyonGalaxyCapIncrease","gamespeedGalaxyBoost","freeTickspeedSoftcapDelay","improvedIpowConversion","unlockSHardV","repIncreasesAchMult","totalSTBoostTTGen","unlockMyriads","achMultBaseImprovementV","raRealUncapDimboost","rautobuyers","upgradesDontSpendMems","remembranceBoost","raNoReset","remembranceAlwaysActiveAndShopUnlock","imaginaryBoostsRa","freeDimBoosts","improvedPetUpgrades","mendingPointsGainMult","increaseDarkMatterCap","annihilationDarkEnergyBoost","totalAntimatterDarkMatterBoost","infinityPowerConversionBoost","passiveAnnihilationGen","continuumBoost","increaseSingLimits","dmdAuto1","dmdAuto2","continuumAffectsIDsAndTDs","unlockMultiversalDimensions","pelleAutobuyers","boostMVRGain","remWithoutGG","unlockPelleTPMult","exitDoom","unlockPelleIPAndEPMult","boostMemoryGain","pelleRarityBoost","omegaScalingBuff","Hostility","DimLimitCorruptionImprovementPelle","kohlersRealmUnlock","remainingLevels","remainingText","kohlerUnlocked","kohlerName","pelleRifts","drainResource","additionalEffects","strike","totalFill","percentageToFill","challenge","chall","goalAtCompletions","gainedCompletionStatus","totalCompletions","galaxyGeneratorText","spendable","totalMilestones","spent","rifts","percentageSpent","onStateChange","updateTimeDimensionCosts","LAITELA_UPGRADE_DIRECTION","SELF_BOOST","BOOSTS_MAIN","BOOSTS_LAITELA","singularityMilestones","continuumMult","increaseThreshold","limit","effectFormat","upgradeDirection","darkMatterMult","darkEnergyMult","darkDimensionCostReduction","singularityMult","darkDimensionIntervalReduction","improvedAscensionDM","POWER_DM_PER_ASCENSION","ascensionIntervalScaling","darkDimensionAutobuyers","ascensionAutobuyers","darkAutobuyerSpeed","realityDEMultiplier","improvedSingularityCap","intervalCostScalingReduction","darkFromTesseracts","multFromInfinitied","dilatedTimeFromSingularities","darkFromGlyphLevel","darkFromTheorems","dim4Generation","darkFromDM4","annihilationAutobuyer","theoremPowerFromSingularities","darkFromGamespeed","glyphLevelFromSingularities","darkFromDilatedTime","tesseractMultFromSingularities","pelleStrikes","requirementDescription","penaltyDescription","rewardDescription","unlockReality","epGen","undo","startEU","eternityUpgrades","destroyerQuotes","preMend","effarigQuotes","initial","completeInfinity","showCelestialName","completeEternity","completeReality","enslavedQuotes","startRun","hintUnlock","ec6C10","laitelaQuotes","firstDestabilize","secondDestabilize","firstSingularity","thirdDMD","annihilation","halfDimensions","finalRowIM","increasedMilestoneScaling","fullDestabilize","flashCelestial","primaryBackground","cel","destroyer","eternal","lesser","deities","assured","battle","battles","cluster","confusing","dance","filament","forever","inevitable","mandate","misconstrue","shame","unseen","unbroken","sycophant","tired","usurper","pride","forgotten","paramount","pelleQuotes","arm","strike1","strike2","strike3","strike4","strike5","background","galaxyGeneratorUnlock","galaxyGeneratorRifts","galaxyGeneratorPhase1","galaxyGeneratorPhase4","raQuotes","realityEnter","teresaStart","teresaLate","effarigStart","effarigLate","enslavedStart","enslavedLate","vStart","vLate","remembrance","midMemories","lateMemories","maxLevels","maxTotalPetLevel","teresaQuotes","vQuotes","realityComplete","achievement1","achievement6","hex1","runUnlocks","achievement12","achievement24","hex3","allAchievements","kohlerQuotes","postWarp","kohler","V_REDUCTION_MODE","SUBTRACTION","DIVISION","maxDT","maxReplicanti","currentValue","formatRecord","shardReduction","maxShardReduction","mode","tiers","perReductionStep","reductionStepSize","isHard","isSuperHard","noTriad305","noTriad307","fastAutoEC","fromMinutes","autoAutoClean","vAchMulti","vAchRa","vKeep","MathOperations","right","divide","operations","dropTo","startingValue","reset","NumberCurrency","nextIC","notifyICUnlock","cheapestAntimatterAutobuyer","TabNotification","newAutobuyer","clearTrigger","tryTrigger","productionPerRealSecond","totalInfinityPoints","maxEP","bestEPSet","copyForRecords","totalEternityPoints","theorem","maxTheorem","TimeTheorems","calculateTimeStudiesCost","respecTimeStudies","TimeTheoremPurchaseType","newValue","hardcapRM","addedThisReality","maxRM","thisMend","RMSet","maxiM","currentIMCap","maxDarkMatter","DarkMatterDimensions","galaxyGenerator","spentGalaxies","mendingPoints","corruptionFragments","raPoints","implemented","weakenScalingRebuyable","incXpGainRebuyable","raUpgrades","weakenTeresaScaling","weakenEffarigScaling","weakenEnslavedScaling","weakenVScaling","weakenRaScaling","weakenLaitelaScaling","weakenPelleScaling","incTeresaXPGain","incEffarigXPGain","incEnslavedXPGain","incVXPGain","incRaXPGain","incLaitelaXPGain","incPelleXPGain","teresaUpgrade","effarigUpgrade","enslavedUpgrade","vUpgrade","raUpgrade","laitelaUpgrade","pelleUpgrade","resources","galaxyGeneratorUpgrades","strikes","descriptions","navigation","navSigils","specialInfinityGlyphDisabledEffectText","eternityChallenges","goalIncrease","realTime","scrambleText","pelleGoal","restriction","checkRestriction","formatRestriction","failedRestriction","dimensionMultDecrease","powerDM","pelleGoalIncrease","tickSpeedMultDecrease","infinityChallenges","isQuickResettable","unlockAM","dimboostMult","lastBuyTime","normalChallenges","legacyId","lockedAt","bonusMult","incBonusText","desc","boolean","challenges","changelog","date","info","confirmationTypes","option","dimensionBoosts","isVisible","unl","canSacrifice","credits","roles","people","name2","discordRichPresence","possessiveName","activityToken","currentStageName","currentStage","EFFARIG_STAGES","entropy","token","remainingCompletions","stages","hasReached","mainResource","resourceList","eternityChalls","eterc1","displayName","stored","incrementSC","purchaseCap","pellePurchaseCap","reachedCap","pelleOnly","dilationUpgrades","nonInteger","galaxyThreshold","getTachyonGalaxyMult","nextEffect","doubleGalaxies","rep10","ndMultDT","timeStudySplit","ttGenerator","galaxyMultiplier","galaxyThresholdPelle","eternityMilestones","autobuyerIPMult","pelleUseless","autobuyerReplicantiGalaxy","givenByPelle","bigCrunchModes","autoEP","EPmin","getOfflineEPGain","em200","getEternitiedMilestoneReward","fromHours","autoEternities","em1000","getInfinitiedMilestoneReward","autoInfinities","options","offlineProgress","effectText","activeCondition","autoIC","keepBreakUpgrades","autobuyMaxGalaxies","unlockReplicanti","autobuyerID1","autobuyerID2","autobuyerID3","autobuyerID4","autobuyerID5","autobuyerID6","autobuyerID7","autobuyerID8","autoUnlockID","unlockAllND","replicantiNoReset","autobuyerReplicantiChance","autobuyerReplicantiInterval","autobuyerReplicantiMaxGalaxies","autobuyerEternity","eterPreCap","multPreCap","eterPostCap","mult1","mult2","multPostCap","dilationTimeStudies","ttRequirement","isInCelestialReality","tsRequirement","ecRequirement","isFullyCompleted","timeDimension","ecTimeStudies","reqType","secondary","forbiddenStudies","thisInfinityMult","scaledInfinity","cappedInfinity","passiveIPMult","isEffarigLimited","normalValue","normalTimeStudies","firstPart","secondPart","reciprocate","oldVal","newVal","totalBoosts","STCost","requiresST","averageRealTimePerEternity","perkEffect","boughtGalaxyCap","deltaTime","thisMendRealTime","baseExp","Exponent","answer","timeStudies","h2p","tags","tab","GameSaveSerializer","startingString","savefile","endingString","updateRate","blackHole","_baseCostMultiplier","shiftStart","warpStart","scaleStart","Galaxy","remoteStart","scalingThreeStart","WarpUpgrade","bigCrunch","_unlockRequirement","_costMultiplier","_costIncreaseThresholds","FreeTickspeed","DilationTimeStudyState","AutomatorPoints","pointsForAutomator","AutomatorData","MAX_ALLOWED_SCRIPT_CHARACTERS","MAX_ALLOWED_TOTAL_CHARACTERS","MAX_ALLOWED_SCRIPT_NAME_LENGTH","MAX_ALLOWED_CONSTANT_NAME_LENGTH","MAX_ALLOWED_CONSTANT_VALUE_LENGTH","MAX_ALLOWED_SCRIPT_COUNT","MAX_ALLOWED_CONSTANT_COUNT","ACCELERATION_TIME","alias","ENSLAVED_UNLOCKS","FREE_TICKSPEED_SOFTCAP","RUN","requiredLevels","glyphRefinementEfficiency","levelRefinementValue","POWER_DE_PER_ASCENSION","annihilationDMRequirement","effectFunction","maxUpgrades","noLabel","costIncrease","infinityRebuyables","afterECText","afterEC","searchTermsRelevance","searchIndex","addTerm","term","entry","addWord","lowerCase","addPhrase","phrase","tag","map2dToObject","arr","idx1","idx2","keyboardify","keybrd","_key","qwerty","qwertz","azerty","dvorak","colemak","workman","qwprf","keyboards","keyboardDist","keyboard","aPos","bPos","howBadlyTypoedWithKeyboard","aLen","bLen","distance","howBadlyTypoed","minTypoed","specialChars","replaceSpecialChars","query","truncatedQuery","relevance","searchTerms","relevances","searchWord","minimumRequirement","searchIndexStr","typoThreshold","maxRelevance","decrease","results","sort","breakInfinityUpgrades","worstChallenge","hasCap","timeStr","autobuyMaxDimboosts","autobuyerSpeed","tickspeedCostMult","invalidate","dimCostMult","ipGen","generation","dimInfinityMult","chargedDimInfinityMult","dim18mult","dim27mult","buy10Mult","dim36mult","dim45mult","resetBoost","totalIPMult","skipReset1","skipReset2","skipReset3","skipResetGalaxy","ipOffline","bestIPMsWithoutMaxAll","costIncreaseThreshold","breakUpgrades","newsAnimSpd","news","speed","games","link","game","isAdvertising","onClick","bigCrunchAnimation","clicks","specialTickerData","uselessNewsClicks","disses","diss","gameCreatedTime","dynamic","BLOB","theme","Theme","reasons","Normal","Metro","Dark","DarkMetro","Inverted","InvertedMetro","AMOLED","AMOLEDMetro","S1","S2","S3","S4","S5","S6","S7","S8","S9","S10","S11","S12","reason","flipped","scene","chasers","chaser","newsQueuePosition","paperclips","GameOptions","toggleNews","wasClicked","clicked","nameList","names","prices","lawID","fakeProgress","realTimePlayed","chapters","chapter","eiffelTowerChapter","products","sacrificed","hasBroken","chance","hasSeenNews","game1Name","game2Name","recipes","recipe","protestText","scenarios","scenario","fromSeconds","getMonth","getDate","open","progressStages","suggestedResource","subProgressValue","save","suffix","quoteBits","iMCap","shopPurchases","lockText","RMPurchases","smallTimeSkip","instantPurchase","onPurchase","purchaseTimeSkip","bigTimeSkip","purchaseLongerTimeSkip","singleCosmeticSet","notify","GlyphAppearanceHandler","chosenFromModal","applyNotification","allCosmeticSets","totalSets","currentSetCount","expectedSetCount","speedrunMilestones","COMPLETED","isFullyDestabilized","tabNotifications","firstInfinity","tabsToHighLight","parent","breakInfinity","IDUnlock","ICUnlock","firstEternity","dilationAfterUnlock","realityUnlock","blackHoleUnlock","automatorUnlock","teresaUnlock","alchemyUnlock","imaginaryMachineUnlock","laitelaUnlock","newGlyphCosmetic","hideAt","hidable","subtabs","speedrun","previousRuns","UIClass","before","ModernUIClass","effectType","mendingUpgrades","three","five","seven","eleven","mendingMilestoneElevenMultiplier","warpRebuyables","noEffect","warpUpgrades","Kohler","unlockProgress","corruptionUpgrades","glyphLevelSet","kohlerProgress","progressUnlocks","hostileScore","hostileFragments","antimatterGalaxy","placeholder","kohlerUnlockProgress","mapFn","mapGameDataToObject","mapFun","ref","_l","top","_v","_s","$event","setPreviousScroll","parseRequest","model","$$v","expression","block","lineNum","updateBlock","deleteBlock","highlightClass","cmd","nowait","_e","respec","targets","allowedPatterns","nextSelection","removeBlock","$set","subblock","updateBlockFromNest","deleteBlockFromNest","constant","displayedConstant","directives","rawName","errorTooltip","textInputClassObject","changeBlock","composing","textContents","dropdownOptions","revertToDropdown","dropdownClassObject","$$selectedVal","selected","_value","dropdownSelection","multiple","recursive","nextNodeCount","currentNodeOnPath","unknownNext","nextInputKey","patterns","nextInputValue","updateFunction","currentPath","createCategory","createToken","pattern","Lexer","longer_alt","Identifier","tokenLists","createInCategory","categories","extraCategories","categoryName","isArray","patternWord","$autocomplete","HSpace","group","EOL","line_breaks","StringLiteral","StringLiteralSingleQuote","Comment","NumberLiteral","BlackHoleStr","ComparisonOperator","AutomatorCurrency","PrestigeEvent","StudyPath","TimeUnit","$compare","OpEQ","EqualSign","$getter","getTachyonGain","isRealityAvailable","choices","GlyphSelection","glyphList","choiceCount","isChoosingGlyph","bestGlyph","AutoGlyphProcessor","pick","filterValue","$unlocked","availableST","RegExp","$autobuyer","$autobuyerDurationMode","$autobuyerXHighestMode","$autobuyerCurrencyMode","$prestigeAvailable","$prestige","bigCrunchResetRequest","$prestigeLevel","$prestigeCurrency","$studyPath","$respec","autoReality","$scale","Keyword","keywordTokens","createKeyword","toLocaleLowerCase","ECLiteral","LCurly","RCurly","Comma","Pipe","Dash","Exclamation","automatorTokens","LABEL","lexer","positionTracking","ensureOptimizations","tokenIds","lexerDefinition","tokenTypeIdx","tokenMap","automatorCurrencyNames","standardizeAutomatorValues","PATTERN","ignoredPatterns","forbiddenConstantPatterns","flatMap","presetSplitter","idSplitter","prestigeNotify","flag","AutomatorBackend","isOn","stack","commandState","prestigeLevel","compileConditionLoop","evalComparison","ctx","isUntil","loopStr","logCommandEvent","parseConditionalIntoText","translateLineNumber","startLine","AUTOMATOR_COMMAND_STATUS","SAME_INSTRUCTION","NEXT_TICK_NEXT_INSTRUCTION","blockCommands","comp","comparison","children","getters","compareValue","cv","image","$value","compareFn","findLastPrestigeRecord","addedECs","gainedEP","lastECCompletionCount","recentRealities","T","AutomatorCommands","rule","$","CONSUME","OR","ALT","OR1","SUBRULE","xHighest","currencyAmount","validate","Auto","desired$","tokenType","specified$","addError","advSetting","compile","isReality","On","fixedAmount","durationMode","xHighestMode","fixedMode","currSetting","settingString","NEXT_INSTRUCTION","blockify","singleSelectionInput","singleTextInput","automatorBlocksMap","togglePause","Blob","SKIP_INSTRUCTION","COMMENT","If","checkBlock","visit","S","advanceOnPop","ifEndLine","nest","IF","genericInput1","genericInput2","Notify","notifyText","NOTIFY","Pause","isValidVarFormat","AUTOMATOR_VAR_TYPES","DURATION","lookup","lookupVar","$duration","timeString","timeMs","unscaledDeltaTime","currentInterval","finishPause","NEXT_TICK_SAME_INSTRUCTION","blockArg","PAUSE","OPTION","OPTION1","Respec","Nowait","prestigeToken","prestigeName","forceRestart","RESTART","Start","startDilatedEternity","START","ecNumber","$ecNumber","StoreGameTime","Use","useStoredTime","isStoring","toggleStoreBlackHole","studyList","CONSUME1","Studies","STUDIES","varInfo","$studies","finalPurchasedTS","prePurchasedStudies","purchasedStudies","tsNumber","hasEC","startEC","unlockedEC","Id","exec","isInsertedInRecovery","$presetIndex","Name","presetIndex","findIndex","imported","beforeCount","currentStudyTree","commitToGameState","afterCount","missingStudyCount","presetRepresentation","Unlock","unlockedThisTick","UNLOCK","Until","UNTIL","Wait","doneWaiting","timeWaited","waitStart","isWaiting","WAIT","prestigeOccurred","Off","holeID","bhCond","bhStr","compOperator","While","WHILE","Stop","HALT","STOP","AutomatorParser","Parser","recoveryEnabled","outputCst","nodeLocationTracking","RULE","MANY_SEP","SEP","DEF","command","commandAlts","commandOr","Function","EOF","badCommandToken","resyncEnabled","SUBRULE2","studyListEntry","studyRange","performSelfAnalysis","parser","BaseVisitor","getBaseCstVisitorConstructorWithDefaults","Validator","rawText","validateVisitor","ownMethod","lexResult","tokenize","tokens","parseResult","script","addLexerErrors","errors","addParserErrors","modifyErrorMessages","errorCount","line","startOffset","endOffset","tip","r2","parseError","combinePositionRanges","getPositionRange","previousToken","isEndToken","location","errInfo","errTip","currentScriptText","modifiedErrors","lastLine","variables","checkTimeStudyNumber","isTriad","canBuyTriad","identifier","varName","constants","tree","NUMBER","selectedStudies","studiesOut","firstStudy","lastStudy","pathId","pathStudies","NormalTimeStudies","paths","$cached","sle","positionRange","ECNumber","varLookup","recoveredNode","badCommand","firstToken","firstTokenType","errToken","commandToken","hadError","Compiler","compiled","lineNumber","canUseInComp","unlockedFn","compareFun","Blockifier","UIID","next","parseInput","isCurrency","validateOnly","validator","hasCompilationErrors","blockifyTextAutomator","blockifier","validatedCount","commandDepth","foundChildren","nestedBlock","nestedCommands","visitedCount","validatedBlocks","visitedBlocks","validateLine","walkSuggestion","suggestion","prefix","hasAutocomplete","startsWith","categoryMatches","registerHelper","contents","_","editor","doc","getDoc","severity","from","posFromIndex","cursor","getCursor","ch","getLine","test","lineStart","currentPrefix","lineLex","rawSuggestions","computeContentAssist","suggestions","ruleStack","nextTokenType","Pos","commentRule","defineSimpleMode","dedent","studiesArgs","sol","studiesList","studiesLoad","studiesLoadId","studiesLoadPreset","prestige","commandDone","startUnlock","commandArgs","indent","meta","lineComment","electricChars","AUTOMATOR_MODE","SINGLE_STEP","AUTOMATOR_TYPE","TEXT","BLOCK","AutomatorStackEntry","stackIndex","_stackIndex","_commandIndex","initializeNew","_commands","persistent","commandIndex","AutomatorScript","_id","_compiled","content","isWithinLimit","missingIndex","lastEvent","eventLog","isEditorFullscreen","needsRecompile","cachedErrors","blockTemplates","undoBuffer","redoBuffer","charsSinceLastUndoState","MIN_CHARS_BETWEEN_UNDOS","MAX_UNDO_ENTRIES","scriptIndex","editorScript","currentScriptName","toCheck","createNewScript","newScript","create","clearUndoData","recalculateErrors","currentErrors","currTime","timestamp","timegap","automatorEvents","maxEntries","clearEventLog","singleScriptCharacters","AutomatorTextUI","getValue","BlockAutomator","parseLines","totalScriptCharacters","pushUndoData","newChars","pastGap","pushRedoData","undoScriptEdit","Tabs","_currentSubtab","undoContent","pop","saveScript","setValue","updateEditor","redoScriptEdit","redoContent","LineEnum","Active","Event","AutomatorHighlighter","error","updateHighlightedLine","removeHighlightedTextLine","addHighlightedTextLine","removedLine","removeLineClass","addLineClass","clearAllHighlightedLines","lineType","AutomatorScroller","scrollToRawLine","targetLine","scrollToLine","textHeight","lineToScroll","querySelector","defaultTextHeight","paddedHeight","clientHeight","newScrollPos","scrollTop","scrollTo","gutter","bottom","MAX_COMMANDS_PER_UPDATE","hasJustCompleted","_scripts","isEmpty","findRawScriptObject","currentRunningScript","topLevelScript","currentEditingScript","scriptName","hasDuplicateName","nameArray","currentLineNumber","currentRawText","currentScriptLength","getUsedPresets","scriptID","foundPresets","rawLine","matchPresetID","matchPresetName","presetID","getUsedConstants","foundConstants","availableConstants","addConstant","constantName","constantSortOrder","modifyConstant","renameConstant","oldName","newName","deleteConstant","serializeAutomatorData","dataArray","paddedNumber","segments","deserializeAutomatorData","dataString","remainingData","segmentLength","segmentData","exportCurrentScriptContents","trimmed","encodeText","parseScriptContents","rawInput","decoded","decodeText","importScriptContents","parsed","initializeFromSave","exportFullScriptData","serialized","parseFullScriptData","presetData","constantData","importFullScriptData","ignore","diff","singleStep","followExecution","execTimer","commandsThisUpdate","step","steps","runCurrentCommand","nextCommand","restart","cmdState","findScript","_createDefaultScript","defaultScript","scriptIds","currentScript","oldData","lenChange","scriptNames","newIndex","deleteScript","saveId","clearEditor","toggleRepeat","toggleForceRestart","toggleFollowExecution","jumpToActiveLine","focusedScript","pause","initialMode","scriptObject","clearOnRestart","_data","changeModes","Tutorial","moveOn","TUTORIAL_STATE","AUTOMATOR","parseTextFromBlocks","toConvert","newEntry","playerStack","currentCommands","depth","playerEntry","foundIndex","pointsFromPerks","pointsFromUpgrades","pointsFromOther","totalPoints","default","blockTarget","initialSelection","suppressTooltip","hasError","isTextInput","pathRef","isBoolTarget","targetList","hasLongTextInput","created","_idArray","updateIdArray","availableOptions","calculatePath","recalculateErrorCount","destroyed","newLineNum","newErrors","isValidText","fullPath","validateInput","clone","focusState","currIndex","toClear","errorInfo","html","trigger","classes","components","draggable","AutomatorBlockSingleInput","activeLine","eventLine","errorLine","lineNumberFromBlockID","isActiveLine","isEventLine","isErrorLine","mounted","AutomatorBlockSingleRow","$viewModel","numberOfLines","l","initialize","getElementsByClassName","currentBlockId","textLine","skipLines","checkID","automatorID","scriptText","hasUnparsableCommands","blockified","generateText","indentation","canWait","propsToCheck","blockIdArray","numberOfLinesInBlock","previousScrollPosition","pull","put","allBlocks","automatorBlocks","AUTOMATOR_BLOCKS_BLACKLIST","AUTOMATOR_BLOCKS_COMPARISON_OPERATORS","AUTOMATOR_BLOCKS_COMPARISON_CURRENCIES","AUTOMATOR_BLOCKS_RESETS","currentScriptId","markedLineNumber","unclearedLines","isActiveScript","UI","fullScreen","watch","oldId","unmarkActiveLine","storedScripts","documents","Doc","swapDoc","immediate","$nextTick","refresh","on$","onGameLoad","$refs","container","performLint","beforeDestroy","removeChild","clearAllActiveLines","setActiveState","markActiveLine","wrapper","textArea","lint","lineNumbers","tabSize","extraKeys","cm","autoCloseBrackets","lineWrapping","setUpContainer","setUpEditor","className","fromTextArea","origin","cancel","ctrlKey","completionActive","altKey","metaKey","autocomplete","editorScriptID","clearHistory","clearGutter","savedVertPos","pp","cycleLayout","layoutText","physicsClassObject","togglePhysics","physicsText","centerTree","straightenEdges","_g","classObject","$listeners","_t","PrimaryButton","treeLayout","physicsEnabled","physicsOverride","PerkLayouts","buttonText","enableStr","perkLayout","forcePhysics","perkPhysicsEnabled","PerkNetwork","setPhysics","resetPosition","setEdgeCurve","currentLayout","moveToDefaultLayoutPositions","PerkPointLabel","showHintText","shiftDown","perkColors","primary","globalScale","positionNumToVector","xPart","yPart","network","nodes","minScale","maxScale","lastPerkNotation","pulseTimer","initialStabilization","initializeIfNeeded","makeNetwork","params","updatePerkColor","updatePerkSize","tooltip","visibility","tryUnlock","getScale","clampedScale","moveTo","htmlTitle","innerHTML","uselessPerks","selectPos","title","edges","edge","nodeData","nodeOptions","interaction","hover","hoverConnectedEdges","selectConnectedEdges","tooltipDelay","font","borderWidth","shadow","width","hoverWidth","selectionWidth","inherit","hidden","tabIndex","canvas","newState","setOptions","straightEdges","layoutIndex","moveNode","forceNetworkRemake","centerOnStart","setLabelVisibility","areVisible","isDark","perkColorList","nodeColor","perkColor","primaryColor","secondaryColor","border","highlight","backgroundColor","hoverColor","borderColor","nodeSize","mod","GlyphEffectConfig","setup","checkInputs","_singleDesc","_totalDesc","_genericDesc","_shortDesc","setupCombine","_biggerIsBetter","_enabledInDoomed","_enabledInDoomedWithlvl25","biggerIsBetter","checkBiggerIsBetter","isDisabledByDoomed","isDisabledByDoomedWithlvl25","compareValues","effectValueA","effectValueB","compare","biggerEffect","KNOWN_KEYS","unknownField","unknownGlyphType","emptyCombine","cappedValue","neqTest","realityGlyphEffectLevelThresholds","GlyphEffects","findGlyphTypeEffects","glyphType","makeGlyphEffectBitmask","effectList","bitmask","orderedEffectList","effectName","getGlyphIDsFromBitmask","FunctionalGlyphType","_isUnlocked","functionalGlyphTypes","GlyphTypes","rng","blacklisted","types","generatedTypes","uniform","locked","activePanelClass","panelEnum","INTRO_PAGE","infoPaneID","COMMANDS","ERRORS","DATA_TRANSFER","EVENTS","CONSTANTS","TEMPLATES","BLOCKS","totalChars","maxTotalChars","fullScreenIconClass","exportScript","canMakeNewScript","importScript","editingName","isNameTooLong","nameEdited","_k","keyCode","renameInput","blur","scopedSlots","_u","currentEditorScriptName","proxy","scriptCount","rename","emitClick","exportData","iconClass","hidePresets","hideConstants","hasPresets","hasConstants","toExport","AutomatorDataTransferSingleEntry","maxScriptCount","loadScripts","maxConstantCount","maxNameLength","maxValueLength","deleteAllConstants","importPresets","refreshConstants","aliasString","valueString","oldAlias","currentError","isValidName","alreadyExists","hasCommandConflict","matchObj","shadowsPrototype","isStudyString","focus","AutomatorDefineSingleEntry","existingValues","clearAutomatorConstants","importTSConstants","selectedCommand","commandsInCategory","section","example","AutomatorDocsManPage","_m","template","showModal","isBlock","pasteText","unpackTemplateBlocks","setIndex","selectedTemplateID","automatorScriptTemplate","templateBlocks","beforeBlocks","afterBlocks","maxExistingID","minTemplateID","blocksToAdd","buttonClassObject","sortStyle","newestFirst","clearLog","clearRealityStyle","clearOnReality","clearRestartStyle","timestampStyle","setTimestampMode","unsortedEvents","timestampMode","currentTime","sorted","clearTooltip","timestampType","eventSettings","AUTOMATOR_EVENT_TIMESTAMP_MODE","DISABLED","THIS_REALITY","RELATIVE_NOW","RELATIVE_PREV","DATE_TIME","toDateTimeString","labelClassObject","changeScriptID","dropdownLabel","currentScriptID","runningScriptID","isPaused","currentScriptContent","$recompute","newID","updateCurrentScriptID","$parent","openRequest","labels","status","highlightRunning","rootClassObject","containerClassObject","transitionEnd","mouseOn","mouseOff","$slots","handleClick","buttonClass","indicatorArrowClassObject","containerClass","widthSource","autoClose","closedHeight","openHeight","hasMouse","closeTime","states","CLOSED","OPEN_REQUESTED","OPENING","OPEN","CLOSE_REQUESTED","CLOSING","maxHeight","height","containerStyle","processRequest","updateHeightInfo","newOpen","root","updateBaseWidth","secSinceMouseOff","request","dropdown","offsetWidth","headerHeight","expandButton","offsetHeight","propertyName","AutomatorButton","AutomatorDocsCommandList","AutomatorErrorPage","AutomatorEventLog","AutomatorDataTransferPage","AutomatorBlocks","AutomatorDocsIntroPage","AutomatorDocsTemplateList","AutomatorDefinePage","AutomatorScriptDropdownEntryList","ExpandingControlBox","fullScreenTooltip","nameTooltip","errorStyle","AutomatorPanels","importTooltip","currentInfoPane","openMatchingAutomatorTypeDocs","importScriptData","updateScriptList","fixAutomatorTypeDocs","automatorScriptDelete","setType","getType","RARITY","SAC_VALUE","FILTER_SCORE","CURRENT_REFINE","MAX_REFINE","availableTypes","typeEnum","GlyphInfo","glyphInfoType","emptyTarget","cloneUnlessOtherwiseSpecified","isMergeableObject","deepmerge","defaultArrayMerge","mergeObject","destination","arrayMerge","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","deepmergeAll","deepCloneMerge","destinationArray","sourceArray","isNonNullObject","isSpecial","stringValue","dimensions","costBumps","multiversal","buyUntil10","achievementBits","secretAchievementBits","bestTimes","completedBits","requirementBits","upgradeBits","autobuyersOn","disableContinuum","increaseWithMult","lastTick","shard","galaxy","limitGalaxies","maxGalaxies","buyMax","buyMaxInterval","dimBoost","limitDimBoosts","maxDimBoosts","limitUntilGalaxies","singCap","tesseract","musicglyph","nrru","nriu","antimatterDims","infinityDims","timeDims","replicantiGalaxies","replicantiUpgrades","blackHolePower","expoBlackHolePower","darkMatterDims","ascension","ipMultBuyer","epMultBuyer","pelleRebuyableUpgrades","galgenUpgrades","galgenSac","seen","totalSeen","getTime","backupTimer","chall9TickspeedCostBumps","chall8TotalSacrifice","ic2Count","partInfinityPoint","partInfinitied","secretUnlocks","themes","viewSecretTS","cancerAchievements","shownRuns","Reality","Eternity","maxAll","isEnd","mmeleven","timePlayedAtBHUnlock","realTimeDoomed","previousRunRealTime","bestIPmin","bestIPminVal","bestIPminEternity","bestIPminReality","bestEPmin","bestEPminVal","bestInfinitiesPerMs","bestEPminReality","bestEternitiesPerMs","bestRSmin","bestRSminVal","RMmin","RMminSet","speedSet","iMCapSet","laitelaSet","maxRem","bestMend","isSegmented","usedSTD","hasStarted","hideInfo","displayAllMilestones","startDate","offlineTimeUsed","achievementTimes","seedSelection","initialSeed","version","warpUpgradeBits","corruptionUpgradeBits","corruptionUpgReqs","warpUpgReqs","reqLock","warp","corruptionRebuyables","spentCF","chanceCost","intervalCost","galCost","amBought","ipBought","epBought","shopMinimized","preferredPaths","eterc8ids","eterc8repl","nextThreshold","baseTachyonGalaxies","lastEP","partSimulatedReality","sets","protectedRows","trash","simple","score","effectCount","specifiedMask","effectScores","cosmetics","glowNotification","unlockedFromNG","symbolMap","colorMap","seed","secondGaussian","musicSeed","musicSecondGaussian","upgReqs","imaginaryUpgradeBits","imaginaryUpgReqs","imaginary","showGlyphSacrifice","autoSort","autoCollapse","applyFilterToPurge","autoEquip","moveGlyphsOnProtection","autoEC","lastAutoEC","partEternitied","autoAchieve","forceUnlock","achTimer","hasCheckedFilter","intervalUpgrades","powerUpgrades","durationUpgrades","phase","activations","blackHolePause","blackHoleAutoPauseMode","blackHolePauseTime","expoBlackHole","expoBlackHolePause","expoBlackHoleAutoPauseMode","expoBlackHolePauseTime","expoBlackHoleNegative","unlockBits","bestRunAM","bestAMSet","lastRepeatedMachines","repl","dt","autoAdjustGlyphWeights","isStoringReal","storedReal","autoStoreReal","tesseracts","hasSecretStudy","feltEternity","progressBits","hintBits","hintUnlockProgress","glyphHintsGiven","zeroHintTime","superrun","beingInitialized","goalReductionSteps","STSpent","runGlyphs","runRecords","flip","memoryUpgrades","chunkUpgrades","reaction","highestRefinementValue","momentumTime","modUnlockBits","disCharge","breakCharged","breakDischarge","petWithRemembrance","permanentMemories","lai50","lai65","powerDMUpgrades","powerDEUpgrades","timeSinceLastUpdate","ascensionCount","thisCompletion","singularitySorting","displayResource","sortResource","showCompleted","sortOrder","singularityCapIncreases","lastCheckedMilestones","milestoneGlow","isHoldingLClick","holdStart","heldTier","heldType","galaxyGeneratorAdditive","galaxyGeneratorMultiplicative","galaxyGeneratorAntimatterMult","galaxyGeneratorIPMult","galaxyGeneratorEPMult","sacrificeActive","collapsed","showBought","unlockMilestone","isGameEnd","triggeredTabNotificationBits","tutorialState","tutorialActive","repeatBuffer","AIChance","includeAnimated","retryChallenge","retryCelestial","showAllChallenges","cloudEnabled","hideGoogleName","showCloudModal","forceCloudOverwrite","syncSaveIntervals","hotkeys","themeClassic","themeModern","themeSynergism","commas","UIType","loadBackupWithoutOffline","automaticTabSwitching","respecIntoProtected","offlineTicks","hibernationCatchup","statTabResources","multiplierTab","currTab","showAltGroup","replacePowers","autosaveInterval","showTimeSinceSave","saveFileName","exportedFileCount","hideCompletedAchievementRows","glyphTextColors","headerTextColored","showNewGlyphIcon","showUnequippedGlyphIcon","highContrastRarity","swapGlyphColors","hideAlterationEffects","ignoreGlyphEffects","ignoreGlyphLevel","ignoreGlyphRarity","glyphBG","glyphBorders","showPercentage","achievementUnlockStates","glyphEffectDots","showGlyphInfoByDefault","animations","blobSnowflakes","confirmations","armageddon","exitChallenge","resetReality","glyphReplace","autoClean","sacrificeAll","glyphSelection","glyphUndo","deleteGlyphSetSave","glyphRefine","replicantiGalaxy","dimensionBoost","switchAutomatorMode","respecIAP","awayProgress","antimatterGalaxies","tachyonGalaxies","achievementCount","celestialMemories","hiddenTabBits","hiddenSubtabBits","lastOpenTab","lastOpenSubtab","invertTTgenDisplay","autoRealityForFilter","checkoutSession","mvrmultUpgrades","devSave","defaultStart","isInMatterChallenge","isInAntimatterChallenge","antimatterChallenge","anyChallenge","BROKEN_CHALLENGES","eternityGoal","canMend","infinityGoal","infinityLimit","currentGoal","requiredIPForEP","resetRequirements","glyphCount","guardFromNaNValues","isObject","ob","enumerable","PerformanceStats","samplePeriod","currentBlocks","turnOn","turnOff","toggle","blockName","blockRoot","childBlocks","record","performance","indentLevel","fps","rootBlock","MendingUpgradeState","hasPlayerLock","isLockingMechanics","shouldBypass","mendingReached","addToInventory","GlyphGenerator","randomGlyph","rawLevel","updateTotalRunUnlocks","checkForUnlocks","RebuyableMendingUpgradeState","MendingUpgrades","MendingUpgradeMultiplier","upgradeBought","Lazy","_getValue","registerLazy","registrar","_registrar","object","invalidateOn","worstChallengeTime","ratePerMinute","NormalTimeStudyState","currentStudies","achievementPeriod","buyablePerks","ab","antimatterCost","antimatterDimensionCommonMultiplier","antimatterDimensionFinalMultipliers","getDimensionFinalMultiplierUncached","infinityDimensionCommonMultiplier","timeDimensionCommonMultiplier","multiversalDimensionCommonMultiplierDimensionCommonMultiplier","multiversalDimensionCommonMultiplier","freeInventorySpace","getAdjustedGlyphEffectUncached","staticGlyphWeights","logTotalGlyphSacrifice","logTotalSacrifice","challengeTimeSum","infinityChallengeTimeSum","timeout","isStarted","gameLoop","GameStorage","lastSaveTime","checkCloudSave","Cloud","loggedIn","saveCheck","checkEverySecond","tryOnlineBackups","checkForUpdates","isLocalEnvironment","fetch","response","json","updateRefresh","numpadKeys","getKeys","combination","Mousetrap","modifierKeys","getMainKey","KeySpin","setAction","action","shiftAction","executeAction","probablyStop","spin","spins","executeKey","_bindSpin","executeHotkey","mainKey","stopSpins","modal","progressBar","activeElement","NodeModule","__module__","require","isLoaded","makePromise","executor","reject","module","isModuleLoaded","setZoomFactor","zoomFactor","webFrame","openExternal","url","shell","MIN_ZOOM","MAX_ZOOM","ElectronRuntime","localStorage","getItem","addEventListener","updateZoom","Electron","increaseZoom","decreaseZoom","resetZoom","setItem","setSize","sizeDiff","outerHeight","RichPresenceInfo","gameStage","stageDB","stage","challengeState","challDB","details","stageName","challResStr","mainRes","openExternalLink","PlayFab","settings","titleId","developerSecretKey","GlobalHeaderInjection","productionServerUrl","_internalSettings","entityToken","sdkVersion","requestGetParams","sdk","sessionTicket","verticalName","errorTitleId","errorLoggedIn","errorEntityToken","errorSecretKey","GetServerUrl","InjectHeaders","xhr","headersObj","headerKey","setRequestHeader","gHeaderKey","ExecuteRequest","authkey","authValue","customData","extraHeaders","resultPromise","startTime","requestBody","JSON","stringify","urlArr","getParams","firstParam","completeUrl","XMLHttpRequest","onloadend","GetPlayFabResponse","code","send","onreadystatechange","readyState","xhrResult","parse","responseText","errorCode","errorMessage","CallBackTimeMS","Request","CustomData","authenticationContext","PlayFabId","EntityId","EntityType","SessionTicket","EntityToken","UpdateAuthenticationContext","authenticationContextUpdates","Entity","Type","AuthInfoMap","authAttr","authError","GetAuthInfo","authKey","defaultAuthValue","AuthenticationContext","ExecuteRequestWrapper","apiURL","authInfo","buildIdentifier","GenerateErrorReport","fullErrors","paramName","errorDetails","msgIdx","ClientApi","IsClientLoggedIn","ForgetAllCredentials","AcceptTrade","AddFriend","AddGenericID","AddOrUpdateContactEmail","AddSharedGroupMembers","AddUsernamePassword","AddUserVirtualCurrency","AndroidDevicePushNotificationRegistration","AttributeInstall","CancelTrade","ConfirmPurchase","ConsumeItem","ConsumeMicrosoftStoreEntitlements","ConsumePS5Entitlements","ConsumePSNEntitlements","ConsumeXboxEntitlements","CreateSharedGroup","ExecuteCloudScript","GetAccountInfo","GetAdPlacements","GetAllUsersCharacters","GetCatalogItems","GetCharacterData","GetCharacterInventory","GetCharacterLeaderboard","GetCharacterReadOnlyData","GetCharacterStatistics","GetContentDownloadUrl","GetCurrentGames","GetFriendLeaderboard","GetFriendLeaderboardAroundPlayer","GetFriendsList","GetGameServerRegions","GetLeaderboard","GetLeaderboardAroundCharacter","GetLeaderboardAroundPlayer","GetLeaderboardForUserCharacters","GetPaymentToken","GetPhotonAuthenticationToken","GetPlayerCombinedInfo","GetPlayerProfile","GetPlayerSegments","GetPlayerStatistics","GetPlayerStatisticVersions","GetPlayerTags","GetPlayerTrades","GetPlayFabIDsFromFacebookIDs","GetPlayFabIDsFromFacebookInstantGamesIds","GetPlayFabIDsFromGameCenterIDs","GetPlayFabIDsFromGenericIDs","GetPlayFabIDsFromGoogleIDs","GetPlayFabIDsFromGooglePlayGamesPlayerIDs","GetPlayFabIDsFromKongregateIDs","GetPlayFabIDsFromNintendoServiceAccountIds","GetPlayFabIDsFromNintendoSwitchDeviceIds","GetPlayFabIDsFromPSNAccountIDs","GetPlayFabIDsFromSteamIDs","GetPlayFabIDsFromTwitchIDs","GetPlayFabIDsFromXboxLiveIDs","GetPublisherData","GetPurchase","GetSharedGroupData","GetStoreItems","GetTime","GetTitleData","GetTitleNews","GetTitlePublicKey","GetTradeStatus","GetUserData","GetUserInventory","GetUserPublisherData","GetUserPublisherReadOnlyData","GetUserReadOnlyData","GrantCharacterToUser","LinkAndroidDeviceID","LinkApple","LinkCustomID","LinkFacebookAccount","LinkFacebookInstantGamesId","LinkGameCenterAccount","LinkGoogleAccount","LinkGooglePlayGamesServicesAccount","LinkIOSDeviceID","LinkKongregate","LinkNintendoServiceAccount","LinkNintendoSwitchDeviceId","LinkOpenIdConnect","LinkPSNAccount","LinkSteamAccount","LinkTwitch","LinkXboxAccount","LoginWithAndroidDeviceID","TitleId","overloadCallback","LoginWithApple","LoginWithCustomID","LoginWithEmailAddress","LoginWithFacebook","LoginWithFacebookInstantGamesId","LoginWithGameCenter","LoginWithGoogleAccount","LoginWithGooglePlayGamesServices","LoginWithIOSDeviceID","LoginWithKongregate","LoginWithNintendoServiceAccount","LoginWithNintendoSwitchDeviceId","LoginWithOpenIdConnect","LoginWithPlayFab","LoginWithPSN","LoginWithSteam","LoginWithTwitch","LoginWithXbox","Matchmake","OpenTrade","PayForPurchase","PurchaseItem","RedeemCoupon","RefreshPSNAuthToken","RegisterForIOSPushNotification","RegisterPlayFabUser","RemoveContactEmail","RemoveFriend","RemoveGenericID","RemoveSharedGroupMembers","ReportAdActivity","ReportDeviceInfo","ReportPlayer","RestoreIOSPurchases","RewardAdActivity","SendAccountRecoveryEmail","SetFriendTags","SetPlayerSecret","StartPurchase","SubtractUserVirtualCurrency","UnlinkAndroidDeviceID","UnlinkApple","UnlinkCustomID","UnlinkFacebookAccount","UnlinkFacebookInstantGamesId","UnlinkGameCenterAccount","UnlinkGoogleAccount","UnlinkGooglePlayGamesServicesAccount","UnlinkIOSDeviceID","UnlinkKongregate","UnlinkNintendoServiceAccount","UnlinkNintendoSwitchDeviceId","UnlinkOpenIdConnect","UnlinkPSNAccount","UnlinkSteamAccount","UnlinkTwitch","UnlinkXboxAccount","UnlockContainerInstance","UnlockContainerItem","UpdateAvatarUrl","UpdateCharacterData","UpdateCharacterStatistics","UpdatePlayerStatistics","UpdateSharedGroupData","UpdateUserData","UpdateUserPublisherData","UpdateUserTitleDisplayName","ValidateAmazonIAPReceipt","ValidateGooglePlayPurchase","ValidateIOSReceipt","ValidateWindowsStoreReceipt","WriteCharacterEvent","WritePlayerEvent","WriteTitleEvent","RegisterWithPhaser","Phaser","Plugin","clientApi","ticket","SteamTicket","CreateAccount","makeAuthorizedPromise","DisplayName","Data","ItemId","Price","VirtualCurrency","itemId","annotation","Items","Quantity","Annotation","orderId","providerName","OrderId","ProviderName","itemInstanceId","consumeCount","ItemInstanceId","ConsumeCount","virtualCurrency","Amount","playFabFunction","loginPlayFabWithSteam","screenName","validatePurchases","syncIAP","purchaseIAP","std","order","pendingValidations","txnId","ProviderData","validateTimeout","isValidating","retryValidation","orders","validatePurchase","confirm","purchaseName","purchaseInstance","stdsBought","hasPendingPurchaseConfirmations","userInventory","ST","Inventory","RemainingUses","userData","unlockedCosmetics","Cosmetics","Value","purchaseShopItem","cosmeticId","storeCosmetic","updatedCosmetics","initAPI","getSteamId","getAuthSessionTicket","activateAchievement","getAchievementNames","initDiscordAPI","clientId","steamGameId","runDiscordCallbacks","setDiscordActivity","smallImage","largeImage","isInitialized","achievementNames","SteamRuntime","Greenworks","steamId","loginPlayFab","loginFirebase","orderState","initializeDiscord","createForceRefreshCanvas","accountId","staticAccountId","loginWithSteam","classList","getContext","forceRefresh","clearRect","shortcuts","function","keyboardToggleAutobuyers","buyTickSpeed","buyMaxTickSpeed","sacrificeBtnClick","manualRequestDimensionBoost","manualRequestGalaxyReset","manualBigCrunchResetRequest","replicantiGalaxyRequest","setHoldingR","eternityResetRequest","startDilatedEternityRequest","requestManualReality","keyboardAutomatorToggle","keyboardAutomatorRestart","keyboardToggleContinuum","continuumUnlocked","armageddonRequest","export","keyboardPressQuestionMark","keyboardH2PToggle","keyboardVisibleTabsToggle","keyboardPressEscape","keyboardEditAutobuyers","hasAutobuyersForEditModal","mendingResetRequest","hotkey","toggleAutobuyer","buyer","isSimpleTickspeed","disabledByContinuum","toggleBuySingles","toggleMode","bulkName","hasUnlimitedBulk","automation","tryShowWarningModal","setContinuum","visibleIndex","linenum","canArmageddon","Quote","isHistoryOpen","clearAll","hideAll","autobuyerEditModal","hiddenTabs","setShiftKey","bindDimensionHotkeys","buyManyDimension","buyOneDimension","currentTab","currentUIFormat","isAvailable","currentSubtab","konamiCode","konamiStep","testKonami","character","Speedrun","startTimer","originalHandleKey","modifiers","CorruptionUpgradeState","setMechanicLock","toggleMechanicLock","specialLockText","upgradeLock","isImaginary","respecCorruptionUpgrades","respecCall","RebuyableCorruptionUpgradeState","CorruptionUpgrades","GALAXY_TYPE","DISTANT","REMOTE","THIRD","GalaxyRequirement","isSatisfied","dimension","requirementAt","typeAt","galaxyCostScalingStart","galaxiesBeforeDistant","polynomialLvl","galWeakScaling","requiredTier","galaxyReset","softReset","emoji","requestGalaxyReset","restrictedLimit","maxBuyGalaxies","turnOffEffect","req","newGalaxies","buyableGalaxies","EnslavedProgress","giveProgress","AwayProgress","formatName","navigateTo","place","goTo","AwayProgressTypes","ConfirmationState","_confirmationSetting","ConfirmationTypes","AutobuyerState","canTick","entryCount","autobuyerGroupName","oneIndexed","defineProperties","anyUnlocked","allUnlocked","allActive","groupName","IntervaledAutobuyerState","timeSinceLastTick","resetTickOn","resetTick","prestigeEvent","UpgradeableAutobuyerState","baseInterval","upgradeInterval","maxIntervalForFree","createAccessor","AnnihilationAutobuyerState","hasInput","inputEntry","darkMatterMultGain","annihilate","AntimatterDimensionAutobuyerState","shortDisplayName","fullName","canBeUpgraded","canUnlockSlowVersion","settingConfig","individualSetting","groupSetting","thisSetting","collapseDisplay","hasAutobuyer","intervalTick","autoTick","buyMaxDimension","upgradeBulk","allUnlimitedBulk","allMaxedInterval","BigCrunchAutobuyerState","hasAdditionalModes","autoInfinitiesAvailable","considerMilestoneReached","autoEternitiesAvailable","bumpAmount","highestPrevPrestige","timeToNextTick","willInfinity","BlackHolePowerAutobuyerState","powerUpgrade","ExpoBlackHolePowerAutobuyerState","DarkMatterDimensionAscensionAutobuyerState","ascend","DarkMatterDimensionAutobuyerState","maxAllDMDimensions","realityProps","glyphUncommonGuarantee","strengthThreshold","newStrength","randomStrength","countIn","RealGlyphRNG","uniformityGroups","uniformGlyphs","randomType","finalize","generate","calculateGlyph","glyphID","chosenGlyph","removeGlyph","getRidOfGlyph","advancePartSimCounters","amplifiedSim","boostReality","realityBoostRatio","multiversalSim","simCount","startManualReality","closeEvent","runRealityAnimation","processManualReality","newGlyph","shouldSacrifice","wouldKeep","startingGlyph","companionGlyph","beginProcessReality","getRealityProps","userSelect","animation","play","processAutoGlyph","gainedLevel","keepGlyph","isReset","alreadyGotGlyph","defaults","restoreCelestialState","gainedRM","gainedShards","simulatedRealities","updateRealityRecords","thisRunRMmin","giveRealityRewards","realityAndPPMultiplier","addRealityTime","projectedIMCap","runRewardMultiplier","newMultiplier","rewardMultiplier","isHigher","modalText","machineRecord","completeRun","finishProcessReality","glyphsToProcess","getRNG","glyphNum","glyphChoices","fastToggle","glyphSample","toGenerate","sampleStats","totalSacrifice","varProdSacrifice","totalStats","addToStats","oldMean","stat","newMean","sampleFromStats","glyphsToGenerate","stdev","glyphFunction","sampleGlyph","sacGain","glyphSacrificeGain","thisTypeStats","glyphsToSample","doneSoFar","progressName","buttons","click","scoreMode","totalSac","generatable","sacArray","typeMap","sortedSacTotals","toFill","needed","filling","usedToFill","finalEP","realityRealTime","respecGlyphs","disChargeAll","disChargeAllBreak","celestialRunState","clearCelestialRuns","recalculateAllGlyphs","lockAchievementsOnReality","initializeChallengeCompletions","autoReleaseTick","playerInfinityUpgradesOnReset","resetInfinityRuns","resetEternityRuns","fullReset","fullResetTimeDimensions","resetChallengeStuff","completeAll","secondSoftReset","resetAmount","resetTimeDimensions","resetTickspeed","applyRUPG10","invalidateAll","ECTimeStudyState","invalidateCachedRequirements","applyEU1","applyAlchemyReactions","restoreCelestialRuns","initializeRun","superv","initializeSuperRun","priority","saved","isHidden","lock","isDisplaying","displayForce","giveEternityRewards","newEternities","addCompletion","completionCount","canBeCompleted","addEternityTime","eternityAnimation","FullScreenAnimationHandler","askEternityConfirmation","specialConditions","switchingDilation","noStudies","rewardTP","initializeResourcesAfterEternity","enteringEC","animateAndEternity","hasAnimation","animateAndUndilate","clearCompletions","applyEU2","secondRow","exitDilation","eternityGain","teresa90BaseExp","EternityMilestoneState","EternityUpgradeState","EPMultiplierState","cachedCost","costAfterCount","cachedEffectValue","costIncreaseThresholds","costThresholds","multPerUpgrade","LongPress","_wasLongPress","_pressTimer","_currentCancelHandler","_currentTarget","_pressCount","begin","_pressBegin","longPress","_cancelCurrentPress","preventDefault","changedTouches","elementFromPoint","pageX","pageY","_handleClick","_handleTouchEnd","cancelHandler","button","_beginRepeat","wasLP","savedTarget","useLongPress","vue","directive","bind","binding","vnode","emit","fns","addTo","delay","useRepeatingClick","initializeVars","enterAnimation","leaveAnimation","showNotification","elClass","cloneNode","textContent","entered","stopEnter","remove","leaving","leave","onclick","success","showBlackHoles","queue","cloudConflict","history","currentGlyphTooltip","glyphTooltipDirection","draggingGlyphInfo","sacrificeValue","mouseoverGlyphInfo","refineValue","inInventory","scrollWindow","draggingUIID","currentContextMenu","subtab","h2pForcedTab","notationName","formatPreBreak","lastClickTime","uiLayout","page","themeCss","isThemeS12","bounds","drop","windowBorderOffset","snowSize","snowPos","snowText","LEN","START_HEX","codePointAt","SNOW","$el","fly","tween","tweens","windowSideOffset","snowMoveX","snowMoveY","snowDelay","snowSpeed","snowPosTop","snowPosBottom","snowMoveDir","tweenZig","tweenZag","tweenDrop","tweenZigZagReset","tweenDropReset","BlobSnowflake","BlobBackground","animateBackground","updateSize","removeEventListener","documentElement","clientWidth","isBlob","blobs","randomUnitVector","blobSlowdown","MIN_SPEED","MAX_SPEED","intersectionLength","intersect","intersection","azimuth","rayStart","rayUnit","rectAA","rectBB","dirfrac","t3","t4","TachyonParticle","currentName","BlobSnowflakes","TachyonParticles","animateTachyons","newGameKey","smallCrunch","isModern","shouldDisplay","bestInfinityRealTime","pauseText","chargingClassObject","singleState","hasLongText","dischargeText","displayState","_b","emitInput","$attrs","displayText","PrimaryToggleButton","HeaderBlackHoleStatusText","canModifyBlackHoles","displaySingle","canCharge","isCharging","canAutoRelease","blackHoles","arePermanent","pauseButtonText","accel","unpauseAccelerationFactor","textClassObject","textClicked","challengeDisplay","exitButtonClicked","exitText","currentResource","maximumResource","currentEternityChallengeId","textStyle","darkTheme","rgb","FailableEcText","activityTokens","showExit","resetCelestial","inPelle","inSuperV","celestialReality","tabName","activeChallengeNames","currEC","nextCompletion","completionText","isInFailableEC","exitDisplay","clickFn","isEC","EternityChallengeState","toExit","oldChall","exit","requestStart","enslavedText","effarigMultNerfText","effarigTickNerfText","laitelaEntropy","laitelaTimer","challengePower","isChallengePowerVisible","isInEffarig","isInLaitela","waitingforHint","enslavedTimer","updateChallengePower","nerfFactor","canTickHintTimer","rawMsUntilHints","isC2Running","isC3Running","isIC6Running","isIC8Running","powerArray","antimatterPerSec","manualArmageddon","mendupg5","remnantsTotal","realityShardGain","nextRealityShardGain","isHeader","remnantsGain","realityShardGainPerSecond","resourceClass","currencyValue","currencyName","showRemnants","shards","frags","gainedMvR","MvRRate","perUpgrade","tickspeedDisplay","baseText","pulseSpeedText","scOneStart","scOneEffect","officialFixedSeed","canModifySeed","modifySeed","newSeed","seedModeText","rec","generateName","prepareSave","NG","restartWithCarryover","currentSpent","setSTDUse","isIAPEnabled","isPausedAtStart","setSegmented","spentSTD","mostRecentMilestone","newestTime","SpeedrunMilestone","tryComplete","SpeedrunMilestones","decimalOfE","SaveType","serialize","jsonConverter","deserialize","encoder","TextEncoder","decoder","TextDecoder","encode","decode","pako","Uint8Array","btoa","atob","getSteps","reduceRight","migrations","firstRealityMigration","patches","autobuyers","dimensionMultDecreaseCost","newsArray","achs","timeDimStartCosts","timeDimCostMults","timeDimension1","thisInfinityTime","thisEternityRealTime","thisInfinityLastBuyTime","lastTenEternities","lastTenRuns","uiChoiceModalInterval","uiChoice","normalizeTimespans","convertAutobuyerMode","fixChallengeIds","adjustMultCosts","convertAchivementsToNumbers","adjustGameCreatedTime","moveSavedStudyTrees","convertEPMult","moveChallengeInfo","infinitiedConversion","adjustWhy","removeAchPow","adjustSacrificeConfirmation","migrateNotation","fixAutobuyers","removeAutoIPProperties","adjustAchievementVars","uniformDimensions","removeEternityChallGoal","removeTickspeed","removePostC3Reward","renameMoney","moveAutobuyers","convertEternityCountToDecimal","renameDimboosts","migrateConfirmations","removeOtherTickspeedProps","renameNewsOption","removeDimensionCosts","changeC8Handling","convertAchievementsToBits","setNoInfinitiesOrEternitiesThisReality","setTutorialState","migrateLastTenRuns","migrateIPGen","renameCloudVariable","standardizeUncompletedTimes","makeRecords","deleteOldRecords","migrateAutobuyers","migratePlayerVars","consolidateAuto","convertTimeTheoremPurchases","deleteDimboostBulk","deleteFloatingTextOption","refactorDoubleIPRebuyable","infMultNameConversion","convertNews","etercreqConversion","moveTS33","addBestPrestigeCurrency","migrateTheme","reworkBHPulsing","lastTenInfinities","infRec","eterRec","lastTenRealities","realRec","showLastTenResourceGain","unique","bitmaskArray","fixedPerkStartingPos","newArr","oldSubtab","currentMultiplierSubtab","glyphTrashMode","simpleEffectCount","reducedFilter","effectDB","glyphScoreSettings","typeEffects","rarityThreshold","scoreThreshold","effectChoices","updateBitmask","modifiedBits","foundBits","newSubmask","bit","glyphSetProps","glyphSet","lightGlyphs","showRecentRate","isPurchased","newUI","wantsSuperFlipped","wantsFlipped","bestInfinityTime","challengeTimes","infchallengeTimes","wasFucked","unfuckChallengeId","currentChallenge","tickSpeedMultDecreaseCost","old","achByName","newId","epmult","epmultCost","parseChallengeName","fullID","currentEternityChall","eternityChallUnlocked","challengeTarget","why","dead","dimlife","gal","spreadingCancer","achPow","sacrificeConfirmation","notationMigration","autoIP","autoTime","eternityChallGoal","tickSpeedCost","tickspeedMultiplier","newsHidden","renameTickspeedPurchaseBumps","chall9TickspeedPurchaseBumps","postC3Reward","totalmoney","oldProps","costmultipliers","costMultipliers","infinityDimension1","infDimensionsUnlocked","overXGalaxies","autoCrunchMode","autoSacrifice","eternityBuyer","autoEternityMode","oldNewsArray","maskLength","BITS_PER_MASK","resets","challConf","eternityconfirm","tickDecrease","chall11Pow","swaps","convertAchievementArray","newAchievements","oldAchievements","isSecret","row","column","offlineProd","offlineProdCost","cloud","autobuyerOn","bulkOn","freeGalaxies","infDimBuyers","galaxybuyer","infMultBuyer","infDimTimer","repUpgradeTimer","amcost","ipcost","epcost","infinitiedBank","removePriority","floatingText","infMult","infMultCost","deletePostChallUnlocked","postChallUnlocked","etercreq","secretThemeKey","storedFraction","prePatch","saveData","patch","maxVersion","versions","patchPreReality","patchPostReality","arrayToBits","devMigrations","wormhole","upg","tdbuyer","threshhold","epmultbuyer","dragging","autochall","buy10","wormholePause","tdbuyers","autoRealityMode","movePropIfPossible","celestial1","celestial2","merge","typePriorityOrder","rmStore","rmStoreMax","realityBuyer","adjustThemes","effectBitmask","typeEffect","separateEffectKey","oldExp","lv","floor5","adjustedLevel","realityAutobuyer","eternityAutobuyer","xLast","glyphLevelMult","dtBulk","safeArrayToBits","fixed","quoteIdx","tempAuto","tempMusic","cursedMask","showAlchemyResources","oldSettings","autoGlyphSac","newSettings","inventorySize","disableAutoAchieve","newEC10Test","cursedThisRun","autoGlyphPick","onlyEighthDimensions","onlyEighthDimensons","compression","maxAmGained","chanceUpgrades","higgs","anomalies","tickThreshold","maxQuotes","totalDimCapIncrease","ppSpent","thisEternityMaxAM","noReplicantiGalaxies","upgReqChecks","bestGlyphStrength","showGlyphEffectDots","newPerks","gainedPerkPoints","reachedSingularityCapLimit","secondsSinceCappedTime","singularityAutoCapLimit","singularityTime","autoAnnihilationTimer","annihilated","secondsSinceReachedSingularity","allRandomGlyphs","glyphTrash","bestRealityRealTime","showLastTenInfinitiesGainPerTime","showLastTenRunsGainPerTime","thisInfinityMaxAM","bestIPminThisInfinity","bestIPminThisEternity","bestEPThisReality","thisEternityMaxIP","bestIpPerMsWithoutMaxAll","bestEPminThisEternity","bestEPminThisReality","bestRMmin","bestRMminSet","bestGlyphLevel","bestGlyphLevelSet","bestSpeedSet","maxMatter","achievementChecks","noSacrifices","onlyFirstDimensions","noEighthDimensions","noFirstDimensions","noAntimatterProduced","noTriadStudies","noTheoremPurchases","noInfinitiesThisReality","noEternitiesThisReality","maxID1ThisReality","continuumThisReality","baseFreeGalaxies","autoPower","rebuyablesAuto","ttbuyer","xCurrent","timeDimTimer","ttTimer","dilUpgradeTimer","saveOverThresholdFlag","saveOverThresholdFlagModalDisplayed","reqBitmask","maxStudiesThisReality","lastRepeatedRM","selectedID","shiftedScripts","lastID","oldChecks","usedMaxAll","maxGlyphsThisRun","minNegativeBlackHoleThisReality","cancerGalaxies","addSeenNews","highestRefinementData","triadRegex","triadStudies","harshAutoClean","showCondenseToMilestone","darkAutobuyerTimer","autoAnnihilationSetting","hasDimboost","hasDilUpg","unlocksBits","hasDimboostsResetNothing","convToBit","famine","pestilence","war","death","newGame","toMove","petWithRecollection","defineMatch","newScripts","oldScriptKeys","armageddonDuration","maxAMThisArmageddon","sidebarMinimized","chart","devMode","swap1","swap2","disabled","toDelete","cosmetic","forceDarkGlyphs","testVersion","setLatestTestVersion","BACKUP_SLOT_TYPE","ONLINE","OFFLINE","RESERVE","AutoBackupSlots","intervalStr","currentSlot","saves","lastCloudSave","offlineEnabled","lastUpdateOnLoad","lastBackupTimes","oldBackupTimer","ignoreBackupTimer","maxOfflineTicks","simulatedMs","defaultTicks","tickLimit","localStorageKey","backupDataKey","saveSlot","backupSlot","backupTimeKey","load","loadRoot","updateSteamStatus","loadPlayerObject","loadBackupTimes","backupOfflineSlots","loadSlot","slot","resetTempState","import","tryImportSecret","newPlayer","checkPlayerObject","clearInvalidCosmetics","resetBackupTimer","importAsFile","reader","FileReader","readAsText","file","overwriteSlot","invalidProps","checkNaN","hasNaN","thisNaN","canSave","ignoreSimulation","isSelectingGlyph","isSimulating","SAVE_DISABLED","INTERACTIVITY_DISABLED","silent","manual","saveToBackup","loadFromBackup","offlineTimeMs","offlineSlots","backupInfo","backupOnlineSlots","slotsToBackup","toBackup","timeSinceLast","latestBackupTime","saveToReserveSlot","targetSlot","exportModifiedSave","exportDateString","dateObj","getFullYear","exportAsFile","download","exportBackupsAsFile","backupData","backup","importBackupsFromFile","importText","backupKey","storageKey","backupTimeData","segmented","hardReset","playerObject","checkString","isPreviousVersionSave","checkPerkValidity","additionalEnd","unequipped","setAsCurrent","ADNotations","rawDiff","testSpeed","simulateOffline","autoStoreRealTime","simulateTime","postLoadStuff","mixedScientific","catchup","nextTickDiff","filename","pom","encodeURIComponent","createEvent","initEvent","dispatchEvent","keyStr","removePaddingChars","lkey","decodeBase64Binary","arrayBuffer","bytes","chr1","chr2","chr3","enc1","enc2","enc3","enc4","firebaseConfig","GameProgressState","GameProgress","CatchupResource","CatchupResources","ProgressChecker","getProgressStage","getCompositeProgress","compareSaveProgress","progressDifference","compareSaveTimes","timeDifference","hasFirebaseConfig","apiKey","initializeApp","provider","GoogleAuthProvider","auth","getAuth","getDatabase","user","lastCloudHash","signInWithPopup","syncSTD","email","pass","signInWithEmailAndPassword","catch","createUserWithEmailAndPassword","snapshot","exists","encoded","uintArray","compareSaves","local","hash","farther","older","differentName","hashMismatch","forceModal","cloudSave","thisCloudHash","sha512_256","localSave","saveComparison","overwriteAndSendCloudSave","addCloudConflict","cloudInvalidData","isSaving","hasBoth","hasConflict","cloudSaveConflict","serializedSave","writeToCloudDB","overwriteLocalSave","cloudLoadConflict","singleSlot","readFromCloudDB","separateSaveSlots","allData","newData","slotStr","logout","signOut","clearLocalSTD","onAuthStateChanged","uid","supportedBrowsers","Payments","windowReference","hasCanceled","pollForPurchases","buyMoreSTD","method","headers","STD","cloudID","pollAmount","onbeforeunload","close","cancelPurchase","statusRes","failure","hide","closed","upgradeKey","cosmeticName","extraData","requestedSet","fullCompletions","stdData","amountSpent","isTimeout","sessionId","showSecondPreferredWarning","currTree","canPickSecond","allowedDimPathCount","currDimPathCount","buyStudiesUntil","studyArray","lastInPrevRow","requestedPath","ecHasRequirement","secondPreferredWarningShown","pacePaths","pathName","pathList","allPace","pace","study","boughtNormalTS","refund","ecStudy","TimeStudyState","_path","isMyriad","costsST","checkSetRequirement","purchaseUntil","usePriority","noSoftcap","dilatedValueOf","corruptionPrestigeLimits","reqCheck","gainedMendingPoints","MvRGain","warpReality","Quotes","totalEPMult","devisor","epAmount","glyphState","getGlyphLevelInputs","addInfinityTime","challText","maxCompletions","gainedTP","resetRealityRuns","isOfflineEPGainEnabled","ampFactor","projIM","infGain","reload","GAME_SPEED_EFFECT","FIXED_SPEED","TIME_GLYPH","TIME_STORAGE","SINGULARITY_MILESTONE","NERFS","EXPO_BLACK_HOLE","effectsToConsider","blackHolesActiveOverride","storedTimeWeight","nerfModifier","timeCompressionPower","timeCompressionMult","repeats","getGameSpeedupSoftcaps","getGameSpeedupSoftcapsExp","capNumber","speedFactor","getBaseGameSpeedup","ExpoBlackHoles","realTimeMechanics","realDiff","momentum","MultiversalDimensions","storeRealTime","passDiff","thisUpdate","storedRealTimeCap","isReleaseTick","tutorialLoop","blackHoleDiff","fixedSpeedActive","currentBlackHoleStoreAmountPerMs","blackHoleSpeedup","reducedTimeFactor","totalTimeFactor","amplification","beforeStore","timeCap","currentBest","hasFocus","isIntervalCapped","intervalPurchaseCap","buyInterval","buyPowerDM","buyPowerDE","DeltaTimeState","updateNormalAndInfinityChallenges","preProductionGenerateIP","passivePrestigeGen","applyAutoprestige","updateImaginaryMachines","uncountabilityGain","uncountability","tryFail","_power","gain","fromShards","newAmount","updatePrestigeRates","tryCompleteInfinityChallenges","autoComplete","replicantiLoop","updateTachyonGalaxies","getTTPerSecond","tryAutoUnlock","updatePhases","applyAutoUnlockPerks","teresa1","teresa25","laitelaRealityTick","autoAchieveUpdate","loop","canAmplify","CREDITS_START","isPermanentlyHidden","currentIPmin","currentEPmin","currentRSmin","eternitiedGain","infGen","deltaTimeMs","buyDilationUpgrade","laitelaInfo","entropyGainPerSecond","oldInfo","realityReward","laitelaBeatText","quote","disabledDim","isCharged","addedRM","MMBoostRem","updateIMCap","gainedImaginaryMachines","thresholdMult","ttMult","glyphTT","dilationTT","finalTT","afterSimulation","playerBefore","playerAfter","real","fast","ticks","maxTicks","playerStart","totalGameTime","calculateGameTimeFromRealTime","calculateSpeedups","infinitiedMilestone","eternitiedMilestone","remainingRealSeconds","loopFn","realTickTime","calculateOfflineTick","newRemaining","isDown","isPlayerHoldingR","browserCheck","userAgent","lastFrame","animateTweens","delta","tweenTime","TWEEN","onload","supportedBrowser","onfocus","onblur","baseSpeed","baseSpeedPreExpo","pulsedSpeed","hasSeenAlteredSpeed","isStopped","isEC12","isPulsing","hasBH3","expoPower","pastGSSoftcap","scOne","baseSpeedText","formatNumber","speedPreExpo","GameSpeedDisplay","galaxyCount","purchasedTickspeed","freeTickspeed","formatMachinesGained","formatMachineStats","formatGlyphLevel","ppGained","shardsGainedText","currentShardsRate","bestShardRate","bestShardRateVal","celestialInfo","canReality","showSpecialEffect","hasRealityStudy","machinesGained","projectedRM","newIMCap","realityTime","nextGlyphPercent","nextMachineEP","celestialRunText","showShardsRate","percentToNextGlyphLevelText","decimalPoints","hasSpecialReward","EPforRM","adjusted","realityMachineMultiplier","distanceToRMCap","teresaReward","formatScalingMultiplierText","teresaThreshold","formatThresholdText","after","resourceName","HeaderTickspeedInfo","MendingButton","RealityCurrencyHeader","RealityButton","ArmageddonButton","MendingPointsHeader","hasRealityButton","hasMendingButton","nextEP","currentEPRate","peakEPRate","peakEPRateVal","gainedTachyons","gainedCompletions","nextGoalAt","EP_BUTTON_DISPLAY_TYPE","FIRST_TIME","currentEP","currentTachyons","challengeCompletions","fullyCompleted","hasMoreCompletions","creditsClosed","showEPRate","isDilation","rateThreshold","amountStyle","textHexCode","getComputedStyle","getPropertyValue","stepRGB","interFn","tachyonAmountStyle","CANNOT_ETERNITY","CHALLENGE_RUPG","updateChallengeWithRUPG","hasNewContent","NORMAL_EXPLORE_NEW_CONTENT","DILATION_EXPLORE_NEW_CONTENT","tryUnlockNextInfinityDimension","canUnlock","hasIPUnlock","amRequirement","ipRequirement","dimensionText","amDisplay","ipDisplay","nextDimension","unlockNext","EternityButton","UnlockInfinityDimButton","showContainer","showEP","showNextEP","tesseractText","tesseractAffordable","crunch","showIPRate","gainedIP","currentIPRate","peakIPRate","peakIPRateVal","switchToInfinity","currentIP","inAntimatterChallenge","canBuyTesseract","BigCrunchButton","isTesseractUnlocked","tesseractCost","tesseractProgress","HeaderCenterContainer","HeaderEternityContainer","HeaderInfinityContainer","HeaderChallengeDisplay","HeaderChallengeEffects","HeaderBlackHole","HeaderPrestigeGroup","hasReality","lineClass","onLineClick","enableAnimation","beforeCreate","recentTickers","clearTimeouts","currentNews","prepareNextMessage","delayTimeout","scrollTimeout","canShow","nextNewsMessageId","isAI","openNewsLink","transform","DELAY","scrollMessage","SCROLL_SPEED","scrollDuration","ticker","updatedText","parentName","hasNotification","isCurrentSubtab","transitionText","ClassicSubtabButton","isCurrentTab","tabPosition","endTabNames","ClassicTabButton","Classic","GameHeader","ClassicSubtabBar","ClassicTabBar","NewsTicker","InfinityPointsHeader","EternityPointsHeader","crunchButtonVisible","quoteId","focusedQuoteId","lineId","currentLine","quoteStyle","upClass","progressUp","downClass","progressDown","leftClass","progressLeft","rightClass","progressRight","celestialSymbols","celestialName","$emit","emitClose","modalClass","styleObject","celEntry","opac","isText","baseCol","opacity","CelestialQuoteBackground","leftVisible","rightVisible","closeVisible","CelestialQuoteLine","unlockedQuotes","lastProgress","_celestial","focusedQuote","currentQuoteLine","commonButtonClass","lightBG","additionalTranslate","easeOut","totalLines","isQuoteStart","isQuoteEnd","progressIn","advanceQueue","CelestialQuoteLineBasicInteractable","muteIconClass","isMuted","celSymbol","celIndex","isS12EndDisplay","isModal","role","relevantPeople","person","CreditsDisplay","rolling","scroll","audio","creditStyles","muteStyle","celestialDisplays","Audio","oldRate","refreshUpdateRate","volume","pointerEvents","h2pClassObject","showH2P","showInfo","hasTutorial","topMargin","emphasizeH2P","information","remainingTime","buttonClicked","canBeClicked","OfflineSpeedupButton","foregroundStyle","timeSinceStart","tabVisibilities","MvR","RS","IM","machineStr","showIP","showRM","showRS","showMvR","subtabVisibilities","showSubtabs","ModernSidebarCurrency","ModernTabButton","Modern","startNewGame","openSelectionModal","selectedSetName","hasMoreCosmetics","SHOW_NEW_GAME","lockedSets","cosmeticSetChoice","positionStyle","updatePositionStyles","oldShowModal","innerWidth","innerHeight","cloudSaveEnabled","lastLocalSave","saveDisabled","localStr","cloudStr","swap","showSpectate","SPECTATE_GAME","isCollapsed","statusText","changeName","saveName","segmentText","iapText","openSeedModal","seedText","timePlayedStr","offlineText","milestoneName","mostRecent","timeSince","toggleCollapse","collapseIcon","collapseText","offlineFraction","isComplete","stateText","fractionText","theoremAmount","formatTimeTheoremType","STamount","saveLoadText","saveslot","_i","toggleTTgen","$$a","$$el","$$c","checked","$$i","TTgenRateText","totalTimeTheoremText","minimized","budget","costs","formatAM","buyWithAM","formatIP","buyWithIP","formatEP","buyWithEP","buyMaxTheorems","hasTTAutobuyer","isAutobuyerOn","minimize","shiftKey","hideContextMenu","nicknameBlur","edit","handleExport","respecAndLoad","deletePreset","toggleContextMenu","listeners","componentID","contextMenuHideTimer","contextMenuShowTimer","contextMenuIsVisible","touchstart","startShowTimer","mouseenter","mouseleave","startHideTimer","stopHideTimer","showContextMenu","stopTimers","stopShowTimer","HoverMenu","isASCII","existingNames","exportString","presetName","combinedTree","attemptBuyArray","parseStudyImport","newTree","studyString","enabledClass","isLocked","isEnabled","TimeTheoremBuyButton","TimeStudySaveLoadButton","theoremGeneration","totalTimeTheorems","minimizeAvailable","showST","hasTTGen","showTTGen","minimizeArrowStyle","transition","shopBottomRowHeightStyle","timeTheorem","buyOne","HowToPlay","TimeTheoremShop","ModernSidebar","SaveTimer","SpeedrunStatus","PopupModal","ModalProgressBar","CelestialQuoteModal","CelestialQuoteHistoryDisplay","FadeAway","CreditsContainer","SpectateGame","NewGame","ending","hideIfMatoFullscreen","canInfinity","SynergismBigCrunchButton","SynergismRealityButton","SynergismEternityButton","SynergismSubtabButton","SynergismTabButton","Synergism","SynergismGameHeader","SynergismSubtabBar","SynergismTabBar","SynergismEPHeader","showAlchemyHowTo","toggleAllReactions","allReactionsDisabled","realityGlyphCreationClass","infoResourceId","infoResource","capFactor","pelleSymbol","layout","orbit","orbitClass","orbitSize","nodeClass","isFocusedNode","handleMouseEnter","handleMouseLeave","reactionArrow","realityAmount","reactionPathClass","reactionArrowPaths","reactionArrowClass","reactionArrowPositions","AlchemyOrbitLayout","angleOffset","_resources","_radius","_angleOffset","AlchemyCircleLayout","orbits","orbitNodes","reactionArrows","AlchemyReactions","productNode","reagentNodes","reagentNode","reagent","hintClassObject","fillFraction","spinnerTransform","fillerTransform","maskTransform","showThisHintText","HintText","AlchemyResourceArc","isReactionActive","flow","layoutStyle","scaledFlow","resourceAmount","resourceCap","formattedFlow","reactionText","effectConfig","unlockRequirement","effectDisplay","labelDisplay","isString","br","ignoreCapped","reachedCapFunction","updateEffect","updateCap","fromDecimal","EffectDisplay","reactionProduction","realityReactionText","resourceText","AlchemyCircleNode","AlchemyResourceInfo","focusedResourceId","reactionsAvailable","realityCreationVisible","animationTimer","alchemyCap","sizeMultiplier","circleStyle","reactions","maxRadius","inRes","outRes","isLessThanRequired","isActiveReaction","isFocusedReaction","isDisplayed","focusedResource","xStart","yStart","xEnd","yEnd","pathLength","animationTime","reactionProgress","leadPoint","trailPoint","x1","y1","x2","y2","setIsActive","activeComponent","multiplierText","quickReset","displayPercents","progressBarStyle","setProgress","setLinearProgress","inSpecialRun","getTachyonReq","nextID","ipRequirementReached","amountText","rateOfChange","isContinuumActive","buySingleClass","buySingle","tutorialClass","singleText","boughtTooltip","buyTenClass","isAffordableUntil10","until10Text","adjustableTextClass","rateText","isSmall","GenericDimensionRowText","boughtBefore10","singleCost","until10Cost","isShown","isCostsAD","formattedAmount","showCostTitle","costUnit","continuumString","showRow","isLongText","maxDimensionsUnlockable","costUntil10","isSacrificeAffordable","disabledCondition","isSacrificeUnlocked","currentSacrifice","sacrificeTooltip","typeName","sumText","galRequirementText","hasIncreasedScaling","costScalingText","buyGalaxy","distantStart","obscureStart","canBulkBuy","scalingText","distant","remote","dimName","formatGalaxies","boostScale","boostCountText","dimRequirementText","isBuyable","unlockedByBoost","WarpUpgradeState","warpReached","RebuyableWarpUpgradeState","WarpUpgrades","DIMBOOST_TYPE","SHIFT","WARP","SCALE","DimBoostRequirement","boost","dimBoostPower","normalBoostMult","imaginaryBoostMult","canUnlockNewDimension","maxBoosts","corruptionMax","dimboosts","boostCap","bulkRequirement","targetResets","discount","boosts","allNDUnlocked","newUnlock","formattedMultText","boostEffects","dimensionRange","areDimensionsKept","startingDimensionBoosts","tempBulk","forcedADReset","forcedAMReset","enteringAntimatterChallenge","canKeepDimensions","skipResetsIfPossible","canKeepAntimatter","requestDimensionBoost","maxBuyDimBoosts","req1","req2","increase","fixedValue","minBoosts","requirementText","multiplierDisplay","gameSpeedMult","isEC9","tickmult","upgradeCount","AntimatterDimensionRow","AntimatterDimensionsTabHeader","AntimatterGalaxyRow","DimensionBoostRow","AntimatterDimensionProgressBar","TickspeedRow","hasDimensionBoosts","isQuickResetAvailable","sacText","changeBuyMode","getUntil10Display","amountDisplay","buy","buttonTextClass","buttonPrefix","buttonValue","howManyCanBuy","costDisplay","buyAsManyAsYouCanBuy","showText","scaledBoostStart","seeText","scaledBoost","hasContinuum","ClassicAntimatterDimensionsTab","ModernAntimatterDimensionsTab","SynergismAntimatterDimensionsTab","hasInfinity","gameTickLength","toggleAllAutobuyers","allAutobuyersDisabled","continuumDisabled","showContinuum","postBreak","modeName","modes","modeProps","amountMode","autobuyerBoxRowClass","extraInfo","autobuyerStateClass","autobuyerToggleClass","globalToggle","autobuyerBuyBoxClass","showEternity","intervalText","bulkText","intervalIn","bulkIn","isShowingBulk","AutobuyerIntervalLabel","showInterval","isUnlockable","currMode","nextValue","nextTime","isShowingStateInfo","optionMode","changeMode","modeNameFn","isMaxed","isUpgradeable","AutobuyerBox","AutobuyerIntervalButton","AutobuyerInput","AutobuyerDropdownEntry","modeDisplay","bulkUnlimited","bulkDisplay","newBulk","DimensionBulkButton","isBuyMaxUnlocked","limitGalaxiesSlot","hasAlternateInputs","hasRelicMode","isOverCap","availableModes","showAutobuyers","isADBox","parentActive","toggleGroup","displayLabelAsGroup","entryCountPerRow","AutobuyerToggleLabel","parentDisabled","AutobuyerSingleToggleLabel","AutobuyerModeButton","showIndividual","hasMode","AutobuyerGroupToggleLabel","SingleAutobuyerInRow","rowCount","boxSize","SingleAutobuyerBox","singles","MultipleAutobuyersBox","MultipleSingleAutobuyersGroup","AutobuyerToggles","OpenModalHotkeysButton","RealityAutobuyerBox","EternityAutobuyerBox","BigCrunchAutobuyerBox","GalaxyAutobuyerBox","DimensionBoostAutobuyerBox","TickspeedAutobuyerBox","DimensionAutobuyerBox","SimpleAutobuyersMultiBox","MendingAutobuyerBox","displayADAutobuyersIndividually","hasInstant","hasSeenGamespeedAlteringEffects","checkADAutoStatus","tabClass","currentChars","maxScriptChars","withinLimit","isTextAutomator","rewind","playTooltip","hideOnTargetClick","playButtonClass","repeatOn","forceRestartOn","follow","hasUndo","hasRedo","redo","hasErrors","automatorModeTooltip","toggleAutomatorMode","automatorType","currScript","hasTextErrors","lostBlocks","switchAutomatorEditorMode","callBack","AutomatorModeSwitch","justCompleted","statusName","editingDifferentScript","duplicateStatus","PAUSED","AutomatorBlockEditor","AutomatorTextEditor","AutomatorControls","erroredScript","fromPerks","fromUpgrades","automatorInterval","perkSources","upgradeSources","otherSources","hasBought","SplitPane","AutomatorEditor","AutomatorPointsList","AutomatorDocs","speedupText","isEnslaved","stateChange","changePauseMode","pauseModeString","hasBH2","detailedBH2","blackHoleUptime","gridStyle","startAnimation","BlackHoleAnimation","PLANET_SIZE","PARTICLE_SIZE","PARTICLE_COUNT","SEMIMAJOR_AXIS","ACTIVE_THRESHOLD","holeSize","eccentricAnomaly","eccentricity","meanAnomaly","E0","Dot","context","beginPath","lineWidth","performDraw","stroke","Planet","totalPhase","period","atan","tan","calculatePosition","arc","strokeStyle","Hole","createRadialGradient","addColorStop","fillStyle","fillRect","Particle","respawn","randomDistance","lastDistance","preLastDistance","lastAngle","preLastAngle","respawnTick","isInside","dilationFactor","particleSpeed","distFactor","drawTrail","drawAndRotateBlob","lastX","lastY","lineCap","lineTo","FONT_SIZE","textAlign","px","green","translate","rotate","fillText","restore","cycleLength","hole","particles","frameRequest","particle","unmount","negativeBHDivisor","isInverted","negativeSlider","infoTooltip","reqLockText","adjustSliderNegative","sliderProps","flowDirection","disabledClass","piecewiseLabel","stateClass","wrapStyles","boolDisabled","disabledStyle","wrapClick","bgClass","elemStyles","bgStyle","draggableStyle","moveStart","tooltipStatus","focusFlag","focusSlider","currentSlider","disabledArray","dotClass","disabledDotStyles","sliderStyles","focusStyles","tooltipDirection","tooltipStyles","xformatter","formatting","dotContents","piecewiseObj","piecewiseDotStyle","piecewiseStyle","piecewiseActiveStyle","labelStyle","labelActiveStyle","isRange","processDraggable","processClass","processClick","tooltipFormatHelper","roundToDPR","devicePixelRatio","PlusMinusButton","dotSize","dotWidth","dotHeight","piecewise","eventType","lazy","clickable","stopPropagation","debug","minRange","maxRange","useKeyboard","actionsKeyboard","piecewiseFilter","tooltipMerge","enableCross","valueInDot","plusMinusButtons","sliderStyle","focusStyle","tooltipDir","mergeFormatter","processStyle","tooltipStyle","disabledDotStyle","dragFlag","crossFlag","keydownFlag","processFlag","processSign","isComponentExists","isMounted","dotAxialSizePx","mergeFormatting","dotWidthVal","dotHeightVal","tooltipMergedPosition","dot0","tooltipClass","slider","dot1","minimum","index0","index1","getIndexByValue","indexRange","maximum","decimals","spacing","printError","usableSize","gap","isFixed","valueLimit","idleSlider","ret","dotStyles","piecewiseDotWrap","resetVal","limitValue","bool","computedFixedValue","cssText","bindEvents","moving","moveEnd","blurSlider","handleKeydown","handleKeyup","handleOverlapTooltip","unbindEvents","changeFocusSlider","contains","value1","value2","getPos","getStaticData","rect","elem","getBoundingClientRect","setValueOnPos","timer","isProcess","targetTouches","isDiff","syncValue","setPosition","isDrag","valueRange","getValueByIndex","setTransform","setCurrentValue","isLessRange","anotherSlider","isIdleSlider","noCb","setTransitionTime","translateValue","processSize","processPos","WebkitTransform","msTransform","transitionDuration","WebkitTransitionDuration","inRange","getIndex","msg","isDirectionSame","tooltip0","tooltip1","tooltip0Rect","tooltip1Rect","tooltip0Right","tooltip1Left","tooltip0Y","tooltip1Y","horizontalOverlap","verticalOverlap","handleDisplayMergedTooltip","mergedTooltip","SliderComponent","isNegativeBHUnlocked","isLaitela","maxNegativeBlackHole","maxInversion","nextChange","timeWithPreviousActiveToNextStateChange","intervalVal","intervalConfig","powerConfig","durationVal","durationConfig","effectTitle","costConfig","DescriptionDisplay","CostDisplay","isAutoUnlocked","BlackHoleUpgradeButton","blackHoleDescription","intervalUpgrade","rawInterval","durationUpgrade","ExpoBlackHoleUpgradeButton","expoBlackHoleDescription","BlackHoleUpgradeRow","BlackHoleStateRow","BlackHoleChargingSliders","BlackHoleUnlockButton","ExpoBlackHoleUpgradeRow","pauseMode","bh2Status","bh1Remaining","bh2Remaining","cycleCount","bh2Duration","disChargeClassObject","chargesUsed","totalCharges","columnId","btnClassObject","isBroken","showingCharged","canBeCharged","isUseless","worstChallengeString","isImprovedByTS31","ts31Effect","showWorstChallenge","chargePossible","hasTS31","isBasedOnInfinities","showChargedEffect","uselessInfinityUpgrades","worstChallengeIndex","BreakInfinityButton","InfinityUpgradeButton","chargeUnlocked","grid","totalBreakCharges","breakChargesLeft","nodeVisibility","is","nodeState","nodeId","ringBackgroundTransform","ringBackgroundPath","ringBackgroundFilter","svgRingPath","rMinorCircle","toRad","edge0","c0","s0","edge1","c1","s1","innerAngle","asin","edge2","c2","s2","edge3","c3","s3","big","baseTransform","pathData","legendArrowPointString","legendTransform","legendTextAnchor","LEGEND_FONT_SIZE","legendLineY","legendLines","hoverOverride","hasLegend","legendArrowPoints","unitFromDegrees","pts","horiz","xDir","getLines","ringClass","ringFilter","symbolFontSize","incompleteTransform","incompleteFadePath","incompleteSolidPath","completeTransform","completePath","filterName","unpaddedSpan","incompleteStart","incompleteStartShape","completeStartShape","pathEndShape","totalPathOffsetPx","incompleteFadeEnd","fadeLength","generateIncompletePath","startShape","tStart","insetPath","getOffsetPath","tEnd","outsetPath","endVector","inEnd","outStart","capCP0","capCP1","hasIncompleteSolidPath","inset","outset","translation","offsetPath","cubicBezierFitToCurveSection","NodeRing","NodeBackground","NodeOverlay","ProgressConnector","overlayDrawOrder","panLimiter","sizes","getSizes","leftLimit","rightLimit","viewBox","realZoom","topLimit","bottomLimit","newPan","panZoom","controlIconsEnabled","dblClickZoomEnabled","fit","zoomScaleSensitivity","minZoom","maxZoom","beforePan","CelestialNavigationViewportCache","pan","zoom","getZoom","getPan","destroy","completionString","timeSum","completedAllChallenges","ChallengeRecordsList","infinityChallengesUnlocked","bypass","infinityChallengeCompleted","shardRarityBoost","shardPower","amplifiedShards","amplifiedShardsRate","runUnlocked","runUnlock","createCursedGlyph","runButtonOuterClass","runButtonInnerClass","runDescription","possessiveForm","Celestials","showHistory","descriptionKey","descriptionLines","EffarigUnlockButton","EffarigRunUnlockReward","CelestialQuoteHistory","vIsFlipped","relicShardRarityAlwaysMax","mendVisible","shopUnlocks","giveCursedGlyph","hasAutoRelease","autoRelease","hasUnlock","unlocksInfo","doomedDisabledClass","realityTitle","runButtonClassObject","enslavedSymbol","glitchStyle","storeGameTimeClass","storedBlackHole","isStoringBlackHole","dischargeClass","useStored","nerfedBlackHoleTime","storeRealTimeClass","hasReachedCurrentCap","toggleStoreReal","mechanicButtonClass","canChangeStoreRealTime","toggleAutoStoreReal","realTimeButtonText","storedRealEfficiencyDesc","storedRealCapDesc","unlockClassObject","buyUnlock","timeUntilBuy","storedRealEffiency","storedRealCap","buyableUnlocks","currentSpeedUp","canModifyGameTimeStorage","canChangeStoreTime","canDischarge","hasNoCharge","storedTimeInsideEnslaved","storedRealTimeEfficiency","hasProgress","canModifyRealTimeStorage","canBuyUnlock","xScale","yScale","dx","dy","isAutoECVisible","remainingECTiers","nextECText","allECText","hasECR","unlockedCount","isChallengeVisible","ChallengeGridCell","restartChallenge","isInChallenge","isShowAllVisible","visiblity","goalDisplay","firstGoal","lastGoal","currentRewardConfig","nextRewardConfig","currentVRewardConfig","nextVRewardConfig","overrideLabel","challengeId","challengeDone","challengeRedo","challengeUnlock","challengeLocked","challengeClickable","completionOverlay","EternityChallengeBoxWrapper","showGoalSpan","altRewards","ChallengeTabHeader","ChallengeGrid","EternityChallengeBox","untilNextEC","untilAllEC","autoECInterval","hasUnlocked","eternityCount","getMilestone","invisible","rewardClassObject","milestone","EternityMilestoneButton","rows","costIncreases","purchaseUpgrade","effectLabel","isAutobuyerActive","isActiveInDoom","hasEU2","EternityUpgradeButton","EPMultiplierButton","textHidden","isInModal","glyphHash","forceNameColor","showSacrifice","ignoreModifiedLevel","realityGlyphBoost","flipTooltip","noneText","isDragging","dragstart","dragStart","dragend","dragEnd","drag","glyphBorderStyle","hasTooltip","tooltipLoaded","tooltipDirectionClass","sacrificeReward","refineReward","uncappedRefineReward","currentAction","displayLevel","displayedInfo","mouseEventHandlers","eventHandlers","levelText","rarityText","onTouchDevice","sacrificeText","refineText","scoreText","changeWatcher","chaosDescription","isPelleDisabled","convertedParts","primaryEffectText","secondaryEffectText","boostColor","additionColor","effectStringTemplate","textSplits","firstSplit","secondSplit","hasValue","hasSecondaryValue","convertToHTML","valueStyle","textShadowColor","getBaseColor","string","GlyphTooltipEffect","showDeletionText","showChaosText","touchDevice","effectiveLevel","sortedEffects","getGlyphEffectValuesFromBitmask","rarityInfo","getRarity","baseColor","CosmeticGlyphTypes","currentColor","bg","mainBorderColor","getBorderColor","descriptionStyle","getRarityColor","cursedColor","isLightBG","glyphName","isLevelCapped","isLevelBoosted","touchStart","glyphTooltipStyle","glyphHeaderStyle","isCursed","getSpecialGlyphEffectDescription","ev","findById","getFontColor","powerText","isCurrentAction","refinementText","showFilterScoreModes","rarityBorderStyles","common","uncommon","rare","epic","legendary","mythical","transcendent","divine","generateGradient","isCircular","borders","colorSplit","scaleFn","perc","isColor","elements","specialData","centers","GlyphTooltip","isNew","isUnequipped","isInventoryGlyph","isActiveGlyph","glowBlur","glowSpread","bottomPadding","textProportion","circular","isTouched","tooltipEnabled","realityColor","typeConfig","cosmeticConfig","isBlobHeart","symbolBlur","unblurredSymbols","currentSymbol","zIndexStyle","colorObj","overrideColor","symbolColor","getColorProps","isRealityGlyph","ignoreRarityColor","bgColor","overStyle","outerStyle","innerStyle","mouseEnter","mouseMove","mouseLeave","mousedown","mouseDown","touchend","touchEnd","touchmove","touchMove","isCurrentTooltip","directionID","minEffectID","effectIDs","remainingEffects","isCursedGlyph","isCompanionGlyph","blacklist","updateDisplayLevel","showBorders","showTooltip","hideTooltip","getAdjustedGlyphLevel","removeVisualFlag","glyphInfo","glyphRawRefinementGain","moveTooltipTo","tooltipEl","clientX","clientY","dataTransfer","setData","dropEffect","over","setDragImage","dragInfo","screenX","screenY","boundary","effectIconPos","borderAttrs","attr","setName","GLYPH_NAMES","adjective","noun","forceColor","isColored","glyphTypeList","sortedGlyphs","slotCount","sortGlyphList","singletonName","adjList","nounPhrase","adjOrder","basicTypePhrase","getNoun","adjectives","listEntry","getAdjective","basicGlyphList","getEffarigProp","singleGlyphTypes","mainGlyphName","calculateGlyphPercent","primaryType","effarigRM","getSingleGlyphEffectFromBitmask","effarigGlyph","percentPerGlyph","sortFn","adjFn","adj","GlyphComponent","GlyphSetName","showName","orderedGlyphs","standardOrder","realityGlyph","glyphShowcasePanel","displaySacrifice","GlyphSetPreview","recordGlyphInfo","laitelaDim","buttonGroupClass","autoRestartCelestialRuns","toggleAutoRestartCelestial","instabilityThreshold","hyperInstabilityThreshold","ultraInstabilityThreshold","enslavedHint","toggleGlyphTextColors","glyphColorPosition","glyphColorState","glyphInfoClass","sacrificeDisplayed","setInfoState","sacrificeUnlocked","glyphInfoBorderClass","pelleGlyphText","isSoftcapActive","hasEffarig","uniqueGlyphText","chaosEffect","valueClass","baseValue","typeObject","glyphColor","glyphEffectsOrder","CurrentGlyphEffect","pelleChaosEffect","mm8","uniqueGlyphs","noEffects","glyphMaxLevel","glyphsChanged","getActiveGlyphEffects","glyphPositionStyle","showEquippedModal","dragEvents","clickGlyph","dragoverIndex","unequipClass","respecTooltip","toggleRespec","unequipText","undoAvailable","undoTooltip","toggleRespecIntoProtected","cosmeticGlow","showOptionModal","undoSlotsAvailable","undoVisible","GLYPH_SIZE","arrangementRadius","glyphRespecStyle","calcDx","calcDy","minDx","minDy","maxDx","maxDy","dragover","dragleave","getData","equip","glyphDisplayOptions","increaseSound","sound","col","slotClass","toIndex","allowDrag","glyphSacrificeUnlocked","newGlyphs","unequippedGlyphs","doubleClickTimeOut","clickedGlyphId","totalSlots","colCount","moveToSlot","protectedSlots","makeRowStyle","rowStyle","factorString","factors","formatFactor","eter","formatPerkShop","shardVisible","shardImprovedVisible","shardFactor","singularityEffect","scalePenalty","rowFactor","achievementFactor","formatLevel","resetWeightsButtonClass","resetWeights","isAutoAdjustWeightsOn","weights","adjustSlider","tooltipContent","ToggleButton","has193","perkShopVisible","penaltyVisible","rowVisible","achievementVisible","showAutoAdjustWeights","columns","adjustVisible","adjustOutlineStyle","totalWeights","visibleRows","eternityVisible","singularityVisible","glyphWeightFields","resetSavedWeights","lastInstability","factorsOpen","glyphFactors","same","which","lastAdjusted","savedWeights","oldSum","oldValue","restSum","savedRestSum","reduceRatio","newWeights","roundPreservingSum","closest","closestDistance","nonIntegers","canPeek","refreshGlyphs","canRefresh","isGlyphSelection","showSetName","sidebarClass","sidebarEnum","setSidebarState","hasMoreOptions","unlockedFilter","unlockedSets","unlockedAlchemy","exportFilterSettings","importFilterSettings","toggleAutoReality","showFilterHowTo","filterMode","optionClass","setMode","setEffectCount","bumpRarity","glyphIconProps","rarityThresholds","setRarityThreshold","raritySliderProps","advancedTypeSelectStyle","advancedType","getSymbol","questionmarkTooltip","weightInputLimit","setScoreThreshold","indexOffset","setEffectScore","autoSacrificeSettings","descStyle","minScoreInputStyle","bitmaskIndexOffset","shiftedIndex","limitedInput","inputValue","toggleSelection","noExclude","effarigSettings","exclusionTooltip","isExcluded","effarigBits","effarigMask","SelectedEffectToggle","AutoSacrificeEffectTab","AutoSacrificeAdvancedTab","lockedTypes","alchemyUnlocked","autoRealityTooltip","unlockedModes","modeIcon","rarityToStrength","filterModeName","newRarity","serializeType","simpleData","typeData","importFilter","groupClass","sortModes","keepTooltip","ButtonCycle","showScoreFilter","showAutoAutoClean","showAutoEquip","availableSortModes","questionMarkTooltip","autoCleanTooltip","harshAutoCleanTooltip","deleteAllUnprotected","removeString","deleteAllRejected","deleteRejectedTooltip","hasPerkShop","hasFilter","isRefining","removeCount","negativeWarning","hasNegativeEffectScore","sacMode","glyphPurge","maxSlots","deleteAllUnprotectedGlyphs","deleteAllRejectedGlyphs","addRowButtonClass","addRow","isProtectedRowsMax","removeRowButtonClass","removeRow","moveGlyphs","changeProtectedRows","sortByLevel","sortByPower","sortByEffect","sortByScore","collapseEmpty","collapseEmptySlots","GlyphSortButtonGroup","GlyphProtectedRowButtonGroup","GlyphAutosortButtonGroup","GlyphCleanButtonGroup","modeID","modeDesc","trashModeDesc","glyphSetKey","noSet","hasEquipped","saveGlyphSet","loadingTooltip","setLengthValid","loadGlyphSet","deleteGlyphSet","glyphSets","refreshGlyphSets","glyphsToLoad","activeGlyphs","activeOptions","findByValues","selectedFromActive","findSelectedGlyphs","remainingOptions","sortedInventoryList","selectedFromInventory","counter","finalGlyphs","specialLimit","effLimit","realLimit","GlyphPos","specGlyph","selGlyph","missingGlyphs","optionList","compFn","toLoad","slotsLeft","greedyPick","filteredOptions","selectedGlyph","glyphSetSaveDelete","GlyphInventoryManagementPanel","GlyphFilterPanel","GlyphSetSavePanel","GlyphRejectionPanel","hasRefined","toggleActive","realityReminderClass","dropDownIconClass","clickText","isExpanded","epMultCapped","ecCount","missingAchievements","unpurchasedDilationUpgrades","currLog10EP","cheapestLog10TD","multEPLog10Cost","purchasableTS","hasDilated","availableCharges","availableBreakCharges","canBeExpanded","false","chargesLeft","resetText","confirms","challengeName","normalName","hasHigherLayers","exitFn","hasDragover","toggleAlteration","addThreshold","empowerThreshold","boostThreshold","maxSacrifice","anySacrifices","teresaMult","lastMachines","glyphSymbol","formatAmount","formatNewAmount","formatTotalAmount","newDescription","willSacrifice","sacConfig","animateReality","viewModel","showNewSacrifice","matchType","validSac","keybindActive","TypeSacrifice","hasAlteration","hideAlteration","lastMachinesTeresa","additionThreshold","empowermentThreshold","boostingThreshold","cosmeticTypes","addStyle","empowerStyle","boostStyle","hasSeenRealityGlyph","sacrificeGlyph","typeCosmetic","specialCosmetic","openModal","changes","singleGlyphAppearance","GlyphTabSidebar","GlyphPeek","RealityAmplifyButton","GlyphInventory","SacrificedGlyphs","CurrentGlyphEffects","EquippedGlyphs","GlyphLevelsAndWeights","ResetRealityButton","RealityReminder","SingleGlyphCustomzationPanel","showInstability","hardcap","resetRealityDisplayed","showEnslavedHint","haveBoost","glyphLevelMin","isSacrificeOption","capStr","capRM","scaleTime","lockTooltip","toggleLock","pelleDisabled","requirementConfig","etaText","canBeLocked","hasRequirementLock","getETAText","estimateIMTimer","ImaginaryUpgradeButton","scaleTimeForIM","nextAtDisplay","inC1","challengeNotEnterable","lockedText","ChallengeBox","InfinityChallengeBox","nextICUnlockAM","isEC8Running","isAnyAutobuyerUnlocked","isEC9Running","conversionRate","dimMultiplier","buyTesseract","tesseractCountString","nextDimCapIncrease","staticStyle","isAutoTessOn","totalDimCap","capExpo","powerPerSecond","incomeType","textCap","TesseractsCap","EC8PurchasesLeft","startEternityChallenge","EternityChallengeRewardState","configCopy","_challenge","isVEffectActive","imporvedECRewards","_fullId","_reward","_vReward","fullId","maxValidCompletions","isWithinRestrictionAtCompletions","completionsAtIP","initialGoal","isGoalReached","isWithinRestriction","enteringGamespeed","fail","shouldPreventEC7","hasUpgradeLock","nextChallenge","buySingleInfinityDimension","capTooltip","isAutobuyerUnlocked","buyMaxInfinityDimension","hasPrevTier","capIP","eternityReached","enslavedRunning","hardcapPurchases","infinityDimension","hardcapIPAmount","InfinityDimensionRow","isEnslavedRunning","enslavedCompleted","boughtTesseracts","extraTesseracts","showLockedDimCostNote","isAutoTessUnlocked","atCap","trueID8cap","IPcap","atTessCap","nextTesseractIncrease","infPowerSoftcap","TesseractHardcap","toggleAllInfDims","cssVars","sacrificeBoostDisplay","ClassicInfinityDimensionsTab","ModernInfinityDimensionsTab","styleOfColumnBg","offlineIpUpgrade","bottomRowUnlocked","ipMultSoftCap","ipMultHardCap","buyMaxIPMult","IpMultiplierButton","allColumnUpgrades","flat","setStyleOfColumnBg","getColumnColor","showLaitelaHowTo","isDMCapped","darkMatterGain","matterExtraPurchasePercentage","singularitiesUnlocked","singularityWaitTime","singularityCap","matterRequirement","darkMatterMultRatio","handleAutoAnnihilationInputChange","autoAnnihilationInput","autobuyerUnlocked","annihilationButtonVisible","annihilationInputStyle","canAnnihilate","ascensionText","percentPerSecond","intervalClassObject","handleIntervalClick","hoverState","hold","ascensionTooltip","darkMatterClassObject","darkMatterText","darkEnergyClassObject","darkEnergyText","timerPercent","darkEnergyPerSecond","portionDE","hasAscended","powerDMPerAscension","powerDE","powerDMCost","powerDECost","canBuyInterval","canBuyPowerDM","canBuyPowerDE","timerPecent","intervalAscensionBump","intervalAfterAscension","hoverOverAscension","line1","line2","ascMult","de","ascensions","dimensionProduction","formatDMCost","prodDim","DarkMatterDimensionRow","hasDimension","hasAscension","hasSingularity","hasAnnihilated","autobuyStr","autoAscendStr","autoSingularityStr","maxAutobuy","maxAutoAscend","autoSingularityFactor","darkMatterDimsAscension","maxDimTier","completionTime","bestSet","tierNotCompleted","runEffects","isMetro","barClass","progressDisplay","upgradeDirectionIcon","isUnique","nextEffectDisplay","completionsDisplay","suppressGlow","progressToNext","remainingSingularities","milestoneMode","singularitiesPerCondense","baseCondenseTime","currentCondenseTime","autoCondenseDelay","autoSingActive","barStyle","maxStr","condenseCount","thisSingularityTime","extraTime","timeText","timePerCondense","timeUntilCap","timeDelayFromAuto","SingularityMilestoneComponent","hasNew","shouldGlow","nextMilestoneGroup","unseenMilestones","condenseClassObject","doSingularity","singularityFormText","singularityWaitText","darkEnergyGainPerSecond","decreaseTooltip","decreaseCap","extendedCap","increaseTooltip","increaseCap","perStepFactor","baseSingularityTime","hasAutoSingularity","additionalSingularityTime","manualSingularityRate","autoSingularityRate","canPerformSingularity","unlockedBulkSingularity","baseTimeToSingularity","currentTimeToSingularity","extraTimeAfterSingularity","isAutoEnabled","nextLowerStep","willCondenseOnDecrease","formText","totalTime","formatRate","capIsReached","gainPerCapIncrease","perform","LaitelaRunButton","SingularityPane","SingularityMilestonePane","DarkMatterDimensionGroup","AnnihilationButton","LaitelaAutobuyerPane","autobuyersUnlocked","singularityPanelVisible","showAnnihilation","annihilationUnlocked","subtabClassObject","clickSubtab","BreakdownEntryInfo","keyArgs","dbEntry","_name","createGetter","_multValue","_powValue","_dilationEffect","_isActive","_fakeValue","_icon","_displayOverride","_isDilated","_isBase","_ignoresNerfPowers","lastVisibleAt","cache","createEntryInfo","cached","mouseoverIndex","showGroup","barSymbol","totalString","hasSeenPowers","allowPowerToggle","changeGroup","disabledText","shouldShowEntry","singleEntryClass","expandIcon","expandIconStyle","entryString","hasChildEntries","dilationString","BreakdownEntryInfoGroup","hasVisibleEntries","activeChildren","getResourceEntryInfoGroups","treeGroups","MAX_DATA_POINTS","PercentageRollingAverage","dataPoints","dataPoint","nerfBlacklist","padPercents","percents","padStart","isRoot","percentList","averagedPercentList","hadChildEntriesAt","lastNotEmptyAt","dilationExponent","lastLayoutChange","totalMultiplier","totalPositivePower","inNC12","rollingAverage","isRecent","forbiddenEntries","calculatePercents","powList","totalPosPow","totalNegPow","log10Mult","multFrac","powFrac","totalPerc","nerfedPerc","netPerc","isNerf","iconObj","barSize","nerfString","percString","overrideStr","valueStr","undilated","applyDilationExp","equivMult","finalMult","beforeMult","afterMult","dilProd","MULT_TAB_OPTIONS","MultiplierBreakdownEntry","currentID","currentKey","opt","resourceSymbols","checkActiveKey","act","accessProp","hideCompletedRows","isAutoAchieveActive","boostText","achCountdown","totalCountdown","isObscured","onMouseEnter","onMouseLeave","garbleKey","processedId","processedName","processedDescription","achievedTime","indicatorClassObject","indicatorIconClass","isMouseOver","isCancer","showUnlockState","garbleTimer","achievementTime","isPreRealityAchievement","hasReward","garbledNameTemplate","garbledIDTemplate","garbledDescriptionTemplate","mouseOverInterval","disabledAchievements","NormalAchievement","swapImages","swapImagesButton","canSwapImages","isCancerImages","imageSwapperStyleObject","isCancerTheme","SwapAchievementImagesButton","NormalAchievementRow","achTPEffect","showAutoAchieve","achMultBreak","achMultToIDS","achMultToTDS","achMultToBH","achMultToTP","achMultToTT","renderedRowIndices","allRows","renderedRows","boostList","dimMultList","startRowRendering","renderAnimationId","gameSpeedupFactor","timeToNextAutoAchieve","unlockedRows","lockedRows","targetArray","renderedLockedRows","nonRenderedLockedRows","rowsToRender","stepThroughRendering","ROWS_PER_FRAME","isRendered","descriptionDisplayConfig","NormalChallengeBox","offlineSlider","adjustSliderValueOfflineTicks","sliderPropsOfflineTicks","automatorLogSize","adjustSliderValueAutomatorLogSize","sliderPropsAutomatorLogSize","OptionsButton","parseOfflineSlider","userName","sliderInterval","adjustSliderValue","refreshAutosaveInterval","handleChange","removeNotAvailableCharacters","AutosaveIntervalSlider","SaveFileName","cloudAvailable","canSpeedrun","inSpeedrun","modalTooltip","overwriteTooltip","files","UILabel","themeLabel","notationLabel","notations","availableThemeNames","UpdateRateSlider","SelectThemeDropdown","SelectNotationDropdown","cycleButton","toggleShown","infoCol","cellStyle","singular","infoArray","averageRun","allRuns","runs","longestRow","avgAttr","resourceType","selectedResources","resourceTitles","showRealTime","hasEmptyRecord","shown","hasChallenges","hasIM","points","getRuns","hasRealTime","showRate","challengeText","lastIndex","cells","gameTime","prestigeCurrencyGain","prestigeCurrencyRate","showExtra","formatExtra","allowRate","prestigeCountGain","prestigeCountRate","rpm","margin","padding","PastPrestigeRunsContainer","layers","rateString","stateCount","enterDoomModal","totalRows","completedRows","cappedResources","totalAlchemyResources","galaxyText","galaxiesPerSecond","capRift","barWidth","capRiftName","faded","hovering","shouldEstimateImprovement","estimateImprovement","timeEstimate","contentClass","contentTransform","tooltipContentClass","tooltipContentStyle","tooltipTransform","tooltipArrowClass","tooltipArrowStyle","mainContent","isDarkTheme","tooltipType","axis","showNegativeSign","tooltipContentLightDarkClass","tooltipArrowLightDarkClass","tooltipInternalClass","CustomizeableTooltip","showImprovedEstimate","currentTimeEstimate","projectedTimeEstimate","hasRemnants","galaxyCap","notAffordable","rebuyableId","formattedEffect","hasTimeEstimate","genDB","GalaxyGeneratorUpgrades","secondsUntilCost","emphasisedStart","gainPerSecond","startSacrifice","decayRate","riftName","formatRift","handleMilestoneRequirementTooltipDisplay","barOverlay","hasMilestone","selectedHoverMilestone","selectedMilestoneResourceText","selectedMilestoneDescriptionText","hasEffectiveFill","remToPx","fontSize","borderTop","milestoneResourceText","milestoneDescriptionText","overfill","mouseX","pelleRiftBar","milestonesCloseTo","penalty","strikeReward","PelleStrike","PelleRiftBar","specialRift","fillCurrency","PelleRift","riftDrainPercent","isHovering","shardRate","toggleBought","allUpgrades","best","dilationMult","autoRemnantGain","MendingUnlocked","PelleUpgradeVue","RemnantGainFactor","boughtUpgrades","visibleUpgrades","fadedUpgrades","PelleBarPanel","PelleUpgradePanel","GalaxyGeneratorPanel","canEnterPelle","pelleEffects","numRuns","spectateText","highestIndex","runPage","changePage","findRun","selectedRun","selectRun","milestoneTimes","bestPreviousTimes","prevRunInfo","finalTime","segmentAttr","stdAttr","offlineAttr","offlineFrac","seedAttr","iconAttrs","timeStyle","refTime","runIndices","bestTime","hasTime","showGap","gapStr","isFastest","SpeedrunMilestoneCompare","PreviousSpeedrunInfo","isSpectating","recLength","bestRunIndices","milestoneList","isRaCapped","memoriesPerChunk","memoryBoosts","dimboostUncapped","memoryDescription","showRemembrance","remembranceDescription","remembranceReq","totalLevels","scalingUpgradeText","upgradeClassObject","purchaseMemoryUpgrade","memoryUpgradeCapped","currentMemoryMult","memoryUpgradeCost","nextMemoryUpgradeEstimate","purchaseChunkUpgrade","chunkUpgradeCapped","currentChunkMult","chunkUpgradeCost","nextMemoryChunkUpgradeEstimate","petConfig","memoriesPerSecond","memoryChunksPerSecond","chunkTooltip","baseMemoryChunksPerSecond","memoryMultiplier","memoryGainTooltip","levelUp","nextUnlock","nextScalingUpgrade","requiredMemories","nextLevelEstimate","importantLevels","petStyle","prevGoal","currentUpgrades","nextGoal","missingUpgrades","currentLevelGoal","finalPelleLevel","showNextScalingUpgrade","nextChargedIU","nextChargedBIU","effarigAlchemyResource","upgradeType","isImportant","petName","petID","RaUpgradeIcon","RaPetLevelBar","canGetMemoryChunks","mu19Bought","secondSource","showScalingUpgrade","scalingUpgradeVisible","productionPerMemoryChunk","memoryUpgradeCurrentMult","chunkUpgradeCurrentMult","timeToGoalString","nextUnlockLevel","gone","toggleRemembrance","hasRemembrance","GainPerSecond","RaUpgradeVue","NewRow","RaPet","RaPetRemembranceButton","RaUpgradePanel","showReality","remembranceMult","remembranceNerf","shopUnlocked","remNerfed","RaUpgrades","costScalingTooltip","possibleTooltip","canWarp","totalUpgFunc","disabledRUPGs","RealityUpgradeButton","scrambledText","capMultText","effarigInfinityBonusRG","nextEffarigRGThreshold","ec8Purchases","replicantiChanceSetup","replicantiIntervalSetup","maxGalaxySetup","distantRG","remoteRG","isUnlockAffordable","unlockCost","costDescription","replicantiUpgrade","formatDescription","remainingTimeText","updateRateMs","ticksPerSecond","logGainFactorPerTick","getReplicantiInterval","log10GainFactorPerTick","LN10","log10GainFactorPerTickUncapped","replicantiAmount","isAbove308","isUncapped","postScale","ReplicantiGrowth","scaleFactor","scaleLog10","gainFactorPerSecond","milestoneStep","nextMilestone","timeToThousand","timeEstimateText","timeFromZeroRG","baseGalaxiesPerSecond","effectiveMaxRG","effectiveCurrentRG","secondsPerGalaxy","canBuyMore","allGalaxyTime","pending","pendingTime","leftPercentAfterGalaxy","thisGalaxyTime","resetActionDisplay","galaxyCountDisplay","isAutoActive","autobuyerTextDisplay","handleAutoToggle","isDivideUnlocked","boughtGalaxies","extraGalaxies","z","ReplicantiGainText","ReplicantiUpgradeButton","ReplicantiGalaxyButton","isInEC8","hasTDMult","multTD","hasDTMult","multDT","hasIPMult","multIP","hasRaisedCap","canSeeGalaxyButton","estimateToMax","hasFree","has310","idCapMult","tdCapMult","ReplicantiUpgradeButtonSetup","formatInterval","actualInterval","applyModifiers","intervalNum","additionalEffect","hasMaxText","toMaxTooltip","vacuumText","distantRGStart","remoteRGStart","bonusRG","calculateEstimate","SecretAchievementRow","SecretAchievements","iapDisabled","nextMult","chosenSet","lockedCount","purchaseButtonObject","performPurchase","canAfford","hasChosen","isSingleCosmeticSet","isAllCosmeticSets","allSetsUnlocked","currentMultForDisplay","nextMultForDisplay","lockCosmetics","ShopButton","Loading","displayAll","startTimeStr","maxMilestone","SpeedrunMilestoneSingle","lastIndexOf","saveAge","totalNews","uniqueNews","secretAchievementCount","fullTimePlayed","matterScale","infinityCountString","banked","formatDecimalAmount","thisReal","bestRate","eternityCountString","projectedBanked","bankRate","realityClassObject","bestReal","MatterScale","proton","estimate","distScaling","distanceScale","planck","planckedMatter","macroScale","verb","microScale","micro","microObjects","macro","macroObjects","low","high","distances","mtr","timeSinceCreation","hasBest","lastMatterTime","updateMatterScale","bestAM","lastMachinesString","runReward","pourButtonClassObject","pour","pourText","possibleFillPercentage","pouredAmountCap","unlockInfo","unlockDescriptionHeight","unlockInfoTooltipArrowStyle","unlockInfoTooltipClass","PerkShopUpgradeButton","isPouredAmountCapped","hasEPGen","raisedPerkShop","canUnlockNextPour","unlockInfos","showRunReward","PerkShopUpgrade","borderRight","pourRM","timePoured","possibleFill","rmMultiplier","maxPrice","lastUnlock","tachyons","dilatedTimeGainText","tachyonGalaxyGain","galaxyTimeEstimate","baseGalaxyText","totalGalaxies","scOneMult","upgradeRow","dilate","hasGain","disableText","requiredForGain","remnantRequirement","showRequirement","remnantRequirementForDilation","canDilateInPelle","hideEstimate","currentDT","currentDTGain","rebuyableBoost","tp","getDilationTimeEstimate","DilationButton","DilationUpgradeButton","dilatedTimeIncome","baseGalaxies","hasPelleDilationUpgrades","isPastSCone","scOnePower","isPastSCtwo","scTwoStart","scTwoPower","pelleRebuyables","allRebuyables","upgradeRows","allSingleUpgrades","rawDTGain","tickProp","drainFactorPerTick","drainPerSecond","estimateText","upgradeThreshold","multPerTickspeed","tickspeedSoftcap","shardsPerSecond","areAutobuyersUnlocked","requirementReached","buyTimeDimension","buttonContents","tooltipContents","buyMaxTimeDimension","showTTCost","ttCost","currTT","formattedTTCost","formattedEPCost","buySingleTimeDimension","TimeDimensionRow","shortenTSU","cappedMult","multToNext","nextShards","tryUnlockTimeDimensions","maxAllTimeDimensions","toggleAllTimeDims","trueCap","NewTimeDimensionRow","ClassicTimeDimensionsTab","ModernTimeDimensionsTab","exportStudyTree","respecClassObject","studyComponent","enslavedStudy","secretStudyConnection","enslavedStudyConnection","isOverridden","pathClass","connection","pathClassOf","studyClass","eternityChallengeAnim","shiftClick","doomedRealityStudy","customCostStr","showCost","showStCost","specialClick","eternityChallengeRunning","isCompleteEC","pathClasses","showDefaultCostDisplay","costCond","costNumber","ttStr","stStr","uselessTimeStudies","itemPosition","itemWidth","itemHeight","TimeStudyRow","isWide","itemCount","treeWidth","rowLeft","TimeStudyRowLayout","TimeStudyTreeLayout","normalRowLayout","wideRowLayout","normalRow","wideRow","TS","EC","STUDY_TREE_LAYOUT_TYPE","ALTERNATIVE_SXY_MORE_TRIAD_STUDIES","ALTERNATIVE_62","ALTERNATIVE_62_181","ALTERNATIVE_TRIAD_STUDIES","ALTERNATIVE_181","rowIndex","columnIndex","TimeStudySetup","allConnections","TimeStudyConnectionSetup","TimeStudyConnection","heightNoSpacing","_instances","alt62","alt181","theoremTimeEstimate","clickHandler","TimeStudyButton","maxTT","achRows","hasRequirement","showTotalCompletions","hasNumberRequirement","requirementCurrent","needsFirstLinebreak","needsSecondLinebreak","wasRequirementPreviouslyMet","requirementTotal","enslavedTT","showSTCost","hintText","pathEntry","clickTime","achGiver","NormalTimeStudy","ECTimeStudy","EnslavedTimeStudy","DilationTimeStudy","TriadTimeStudy","SecretTimeStudy","HiddenTimeStudyConnection","MyriadTimeStudy","layoutType","vLevel","renderedStudyCount","renderedConnectionCount","delayTimer","allStudies","treeStyleObject","incrementRenderedCount","shouldRequestNextFrame","isSuperFlipped","setFlip","hex","hexId","isRunButton","isSuperRunButton","zIndex","hexColor","canBeReduced","showReduction","formattedDescription","runMilestones","isReduced","reductionValue","showRecord","reductionCost","reductionTooltip","reduceGoals","hasAlchemy","superRunButtonClassObject","startSuperRun","runSuperDescription","totalUnlocks","rowId","colId","rewardText","celestialUnlockClassObject","unlockCelestial","barProgressStyle","VUnlockRequirement","canUnlockCelestial","MU15bought","mainUnlockDB","hexGrid","gList","MU14bought","maxed","closeModal","ModalCloseButton","MendingUpgradeButton","mendCount","MendingMilestoneButton","MVRoR","RaToR","totalUpg","isWarped","WarpRealityButton","WarpUpgradeButton","MvRoR","unlockDescriptionWidth","unlockDescriptionBottom","KohlerProgressUnlocks","borderBottom","corruptedFrags","corruptionsZeroCheck","bonusInfo","rewardInfo","corruptionSet","corruptionSetSet","corruptionSliderProps","localPenalties","dimLimNerf","timeCompMult","CorruptionUpgradeButton","rewardedFragments","corruptionFullEffects","boostPoints","txt1","txt2","txt3","buyMultiversalDimension","buyMaxMultiversalDimension","MultiversalDimension","formattedMvRCost","buySingleMultiversalDimension","ClassicMultiversalDimensionRow","percentSoftcap","maxAllMultiversalDimensions","toggleAllMultiversalDims","NewMultiversalDimensionRow","ClassicMultiversalDimensionsTab","ModernMultiversalDimensionsTab","TabComponents","AntimatterDimensionsTab","InfinityDimensionsTab","TimeDimensionsTab","OptionsSavingTab","OptionsVisualTab","OptionsGameplayTab","StatisticsTab","ChallengeRecordsTab","PastPrestigeRunsTab","GlyphSetRecordsTab","SpeedrunMilestonesTab","PreviousSpeedrunTab","NormalAchievementsTab","SecretAchievementTab","TeresaTab","EffarigTab","EnslavedTab","VTab","RaTab","LaitelaTab","PelleTab","AutobuyersTab","AutomatorTab","NormalChallengesTab","InfinityChallengesTab","EternityChallengesTab","InfinityUpgradesTab","BreakInfinityTab","ReplicantiTab","TimeStudiesTab","EternityUpgradesTab","EternityMilestonesTab","TimeDilationTab","GlyphsTab","RealityUpgradesTab","ImaginaryUpgradesTab","PerksTab","BlackHoleTab","AlchemyTab","CelestialNavigationTab","ShopTab","MultiplierBreakdownTab","MendingMilestones","WarpReality","CorruptionTab","KohlersRealm","MultiversalDimensionsTab","DesktopIcons","links","s12Games","isSelectingIcon","clearSelected","S12Windows","isMinimised","isClassic","subtabTimeoutId","hoveringTab","setHoveringTab","unsetHoveringTab","instant","tabButtonPositions","GameUiComponentFixed","BackgroundAnimations","topPadding","startupSound","useCompact","windowWidth","getSubtabsPosition","centerPt","subtabsWidth","minLeft","taskbarIcon","offsetLeft","TaskbarIcon","S12Subtabs","S12Taskbar","ClassicUi","SynergismUi","ModernUi","S12Ui","S12UiFixed","S12DesktopIcons","makeRecomputable","watcher","recomputed","original","getter","vm","mixin","watchers","_computedWatchers","observable","ReactivityComplainer","complain","checkReactivity","__ob__","flushPromise","globalClickListener","maxTouchPoints","msMaxTouchPoints","DocumentTouch","flushEvents","nextTick","VTooltip","use","methodStrategy","optionMergeStrategies","parentVal","childVal","hasUpdate","VueGtag","GameUIComponent","scrollBy","askMendingConfirmation","mendingReset","deleteGlyph","unequipAll","AntimatterMult","perkId","_lazyValue","_lazyCost","corruptionZeroCheck","generateLevel","MedingInitLevel","MedingInitRarity","refreshActive","MendingMilestoneState","DilationUpgradeAutobuyerState","_upgradeName","upgradeName","DimBoostAutobuyerState","galaxyCondition","limitCondition","EternityAutobuyerState","willEternity","GalaxyAutobuyerState","ImaginaryUpgradeAutobuyerState","InfinityDimensionAutobuyerState","canAutobuy","IPMultAutobuyerState","EPMultAutobuyerState","RealityAutobuyerState","shouldCheckFilter","proc","rmProc","glyphProc","RealityUpgradeAutobuyerState","ReplicantiGalaxyAutobuyerState","ReplicantiUpgradeAutobuyerState","autobuyerMilestone","autobuyerTick","SacrificeAutobuyerState","sacrificeReset","SingularityAutobuyerState","TickspeedAutobuyerState","TimeDimensionAutobuyerState","TimeTheoremAutobuyerState","buyOneOfEach","addToQueue","clearQueue","blendCel","cels","blendTime","prevCel","currCel","nextCel","lastTime","QuoteLine","_parent","_showCelestialName","_celestialArray","replacementMatch","_line","CelQuotes","_lines","present","fromYears","secondaryRequirement","hasLevelRequirement","hasRarityRequirement","isStoredRealTimeCapped","addedCap","efficiency","diffMs","maxGain","used","release","effectiveGamespeed","nextHintCost","hintCostIncreases","hintTime","fromDays","spendTimeForHint","toNunber","EnslavedProgressState","hasHint","hintInfo","completedInfo","BASE_COSTS","COST_SCALER","TesseractScaler","nextTesseractCost","capIncrease","totalCount","boundless","TesseractAutobuyerState","MusicGlyphAutobuyerState","NonRepeatableRealityUpgradeAutobuyerState","NonRepeatableImaginaryUpgradeAutobuyerState","RaPetAutobuyerState","_petName","TeresaMemoryAutobuyerState","EffarigMemoryAutobuyerState","EnslavedMemoryAutobuyerState","VMemoryAutobuyerState","RaMemoryAutobuyerState","LaitelaMemoryAutobuyerState","PelleMemoryAutobuyerState","PelleRebuyableUpgradeAutobuyerState","PelleUpgradeAutobuyerState","nextUpgrade","GalaxyGeneratorUpgradeAutobuyerState","GalaxyGeneratorSacrificeAutobuyerState","MendingAutobuyerState","willMend","SingularityCapAutobuyerState","teresaMem","effarigMem","enslavedMem","vMem","raMem","laitelaMem","pelleMem","rebuyablePelle","galgenUpgrade","singCapInc","antimatterDimensions","infinityDimensions","timeDimensions","singleComplex","arrays","N","painful","ScientificNotation","engineering","EngineeringNotation","letters","LettersNotation","standard","StandardNotation","EmojiNotation","MixedScientificNotation","mixedEngineering","MixedEngineeringNotation","logarithm","LogarithmNotation","brackets","BracketsNotation","InfinityNotation","roman","RomanNotation","dots","DotsNotation","zalgo","ZalgoNotation","HexNotation","imperial","ImperialNotation","clock","ClockNotation","prime","PrimeNotation","bar","BarNotation","shi","ShiNotation","blind","BlindNotation","BlobsNotation","AllNotation","DIM1","DIM2","tutorialStates","atState","hasFirstBoost","fromState","nextState","prevRunIndices","unlockSet","backUpOptions","automatorConstants","automatorScripts","glyphCosmetics","speedrunRecords","hasSpeedrun","rmPoured","PerkShopUpgradeState","toCreate","TeresaUnlockState","Progress","stage1","stage2","stage3","setUnlockProgress","KohlerProgressUnlockState","MEND","MEND_COMPLETED","glyphLevelCap","glyphEffectAmount","genEffectBitmask","nongenEffectBitmask","EffarigUnlockState","VRunUnlockState","conditionBaseValue","reduction","stepCount","modifiedStepCount","nextHardReductionCost","nextSuperHardReductionCost","nextNormalReductionCost","tiersReduced","conditionValue","playerData","forceCap","VUnlockState","VRunUnlock","currReductionSteps","ts306","RaUnlockState","RaPetState","requiredMemoriesForLevel","nerf","canBuyMemoryUpgrade","canBuyChunkUpgrade","spendsMemories","generateChunks","newMemoryChunks","memsPerSecond","shopMemMultEffect","currentCelestial","newMemories","RaUpgrade","shopWeakenScalingEffect","alchauto","memoryTick","memoryBoostResources","raPointsGain","ticktime","powered","GainPerSec","raGainPointLoop","perMemScaling","fixCostMulti","post15Scaling","post25Scaling","expToGain","multiplierInPower","multiplierOutPower","HUavaliable","estimateDecimal","midResult","midResult2","checkForQuotes","activeMode","updateAlchemyFlow","ema","sortedReactions","combineReagents","applyAlchemyReactionsAuto","hoursFromUnlock","getSacrificePower","sacPower","isBoosted","baseAdditionColor","baseEmpowermentColor","baseBoostColor","RaUpgradeState","RebuyableRaUpgradeState","AlchemyResourceState","_before","unlockedWith","BasicAlchemyResourceState","AdvancedAlchemyResourceState","reagentCaps","AlchemyReaction","_product","_reagents","reactionYield","forcingFactor","totalYield","actualYield","maxFromReaction","baseProduction","reactionEfficiency","prodBefore","prodAfter","cappedYield","reagentBefore","reagentAfter","diffBefore","diffAfter","maxReagent","afterReaction","synergism","unpredictabilityEffect","unpredictability","effectiveYield","mapReagents","DimensionState","_tier","_getData","DISPLAY_NAMES","_displayName","SHORT_DISPLAY_NAMES","_shortDisplayName","productionForDiff","produceCurrency","produceDimensions","dimensionCount","INTERVAL_COST_MULT","POWER_DM_COST_MULT","POWER_DE_COST_MULTS","INTERVAL_START_COST","POWER_DM_START_COST","POWER_DE_START_COST","INTERVAL_PER_UPGRADE","COST_MULT_PER_TIER","DarkMatterDimensionState","tierFactor","commonDarkMult","destabilizeBoost","MMBoostDE","lai2","affordGeometricSeries","rawIntervalCost","intervalCostIncrease","rawPowerDMCost","powerDMCostIncrease","rawPowerDECost","powerDECostIncrease","maxIntervalPurchases","buyManyInterval","buyManyPowerDM","buyManyPowerDE","productionDM","production","unlockedDimensions","upgradeInfo","cheapestUpgrade","SingularityMilestoneState","_rawEffect","nerfCompletions","unnerfCompletions","previousGoal","rawCompletions","prog","lastNotified","sortedForCompletions","moveNewToTop","completedVal","currComp","SingularityMilestoneThresholds","unnotifiedMilestones","MMBoostSing","IU10","newMilestones","Zalgo","chars","str_arr","acc","rand","disabledMechanicUnlocks","IPMults","EPMults","InfinitiedMults","eternityMults","EPgen","autoec","replicantiIntervalMult","tpMults","continuum","blackhole","glyphsac","antimatterDimAutobuyer1","antimatterDimAutobuyer2","antimatterDimAutobuyer3","antimatterDimAutobuyer4","antimatterDimAutobuyer5","antimatterDimAutobuyer6","antimatterDimAutobuyer7","antimatterDimAutobuyer8","timeTheoremAutobuyer","rupg10","dtMults","alteration","doomedGlyph","shopTab","tabsToIgnore","ignoredIDs","mechanic","gainStuff","activeGlyphType","isScaling","MMBoostRS","toInterval","RebuyablePelleUpgradeState","PelleUpgradeState","PelleStrikeState","RiftMilestoneState","checkMilestoneState","lastChecked","RiftState","_milestones","spentPercentage","additional","activeCap","checkMilestoneStates","afterTickAmount","hasReturnedGlyphSlot","generationCaps","capObj","findFreeIndex","GalaxyGeneratorUpgrade","TAB_START_HIDE","DISPLAY_DESTROYER_QUOTES","CREDITS_END","_additionalEnd","Destroyer","vEffect","vEffectAdditional","returnVal","disabledDims","highestActive","overwrite","overwriteText","cancelClass","doCancel","confirmClass","doConfirm","confirmationClass","setting","tooltipText","confirmation","ModalConfirmationCheck","showCancel","showConfirm","confirmFn","cancelFn","ModalWrapperChoice","conflict","hasDifferentName","suggestionText","saveType","timePlayed","prestigeCount","prestigeResource","extraProgressIndicator","otherData","compareLayeredValues","formatSmall","propArray","formatArray","fallbackString","isSameLayer","isBetter","layerName","layerValue","parseColor","colorTag","SaveInfoEntry","goodStyle","badStyle","cloudProg","compositeProgress","warnOverwrite","localProg","doNotSave","noOverwriteInfo","overwriteInfo","wrongHash","handleYesClick","entranceLabel","challengeIsCompleted","conditionOfChallenge","topLabel","keepAntimatter","perkANRBought","keepDimBoost","resetResouces","resetList","tickspeedFixed","tickspeedInfo","isFirstReset","ipGainInfo","startingResources","isFirstInfinity","confirmOption","alternateCondition","alternateText","gainedResources","ResetModal","startingBoosts","startingAM","willStartWithGalaxy","firstInfinityInfo","keepDimensions","extraLine","gainText","petId","isPlural","EnterCelestialsRaPet","laitelaFastest","teresaBestAM","teresaRunMult","effarigDone","effarigLayer","enslavedDone","laitelaTime","effarigStage","EPSinceLabel","animateAndDilate","exitingEC","gainedEPOnEternity","startWithIP","startingIP","isRestarting","isCelestial","isInEC","playAnimation","willHardReset","hasExtraNG","confirmationToDisable","canConfirm","confirmModal","firstRealityText","gained","firstReality","glyphClass","nativeOn","levelStats","warnText","simRealities","hasSpace","hasChoice","bestLevel","levelDifference","effarigUnlocked","willAutoPurge","getGlyphs","simRMGained","currentGlyph","divideReplicanti","reductionString","resetTerm","remainPlural","isS11Active","ModalWrapper","ModalOptionsToggleButton","ModalWrapperOptions","tachyonsUnlocked","animatedThemeUnlocked","fullCompletion","AwayProgressOptionsEntry","toggleOffline","offlineOptionClass","nextSave","deleteText","slotData","progressStr","slotType","lastSaved","formattedTime","lastSave","BackupEntry","ignoreOffline","backupSlots","entryNumber","ConfirmationOptionsEntry","noConfirmations","cancelSet","chooseSet","currentSet","setContents","fakeGlyph","setInModal","CosmeticSetDropdown","initialSet","isCosmetic","symbols","colors","cycleBG","glyphBGStr","noEffectStyle","infoLabel","resetAll","resetSingle","typeClass","selectedIndex","defaultKeySwap","resetIndividual","glyphId","darkKeySwap","defaultOptionClassObject","boxStyle","defaultOption","optionChar","slideWindow","windowStyle","singleOption","optionClassObject","attrString","isSymbol","leftmostIndex","isSingleGlyph","canScroll","windowSize","updateSelected","checkOption","colorProps","invertBW","GlyphCustomizationSlidingWindow","availableSymbols","availableColors","GlyphCustomizationSingleType","nonBaseTypes","sortedBase","hasCustomSets","hasSpecialTypes","currType","fixedCosmetic","SelectGlyphInfoDropdown","GlyphCustomization","isAlmostEnd","rowClass","currentTarget","toggleVisibility","changeEnabled","rowVisibleIndicatorClass","isModernUI","HiddenSubtabsButton","isHidable","unlockedSubtabs","alwaysVisible","rowVisibleIndicatorTooltip","unhideTab","HiddenTabGroup","shortcutNames","shortcutKeys","moreShiftKeyInfo","updateIndicies","timeStudyUnlocked","glyphSacUnlocked","isElectron","shiftKeyFunctions","shiftKeyInfo","hotkeyCount","newsOnOffLabel","adjustSliderValueRepeatBuffer","sliderPropsRepeatBuffer","adjustSliderValueAIChance","sliderPropsAIChance","adjustSliderValueSpeed","sliderPropsSpeed","confirmPrefs","isPreferred","dimensionPath","pacePath","dimensionOptions","paceOptions","pref","cosmeticTypeClass","isValidSpeed","setTestSpeed","handleTestSpeedInput","speedUpDuration","speedUpStart","speedUpRestart","formatDuration","durationText","effectiveDurationText","messageIndex","handleLeftButtonClick","handleRightButtonClick","handleNoClick","deleteCompanion","removeFromInventory","confirmedDelete","findByInventoryIndex","extraMessage","refiningOrSacrificing","glyphsDeleted","glyphsTotal","isSacrificing","refiningSacrificingOrDeleting","explanation","harsh","resourceUnlocked","confirmedRefine","glyphAlchemyResource","glyphRefinementGain","glyphEffectiveCap","refineGlyph","currentGlyphSacrifice","confirmedSacrifice","presetNumber","loadPreset","loadCurrent","paramTypeObject","updateButton","buttonTextStrings","templateInputs","refInFor","updateTemplateProps","validWarnings","warning","invalidInputCount","copyAndClose","templateProps","currentPreset","templateScript","ScriptTemplate","boolProp","treeStudies","typeObj","nameMatch","idMatch","nameStr","idStr","treePreset","newTemplateBlock","headerText","nothingHappened","somethingHappened","hideEntry","formattedName","formatBlackHoleActivations","formatBefore","formatAfter","removed","formatPseudo","increased","isBlackHole","isVeryLarge","numberAsDecimal","AwayProgressEntry","offlineStats","titleText","progressStage","shownResources","isFocusedResource","showHowTo","tabToOpen","hasDedicatedH2p","focusedResourceName","CatchupEntry","CatchupGroup","shownEntry","setShownEntry","formatDate","entryId","changelogBody","confirmChange","updateName","actualName","deleteConstants","constantCount","scriptList","realityHintsLeft","glyphHintsLeft","hintCost","formattedStored","currentStored","canGetHint","giveRealityHint","giveGlyphHint","shownEntries","hints","progressEntries","storeRate","alreadyWaited","decaylessTime","minCostEstimate","K","timeToGoal","glyphHintCount","hintNum","glyphSetId","maxGlyphEffects","typeCapitalized","rarityPercent","effectObj","showLevel","typeStyle","rarityStyle","effectStyle","glyphEffectListHeight","glyphEffectList","effectStrings","heights","formatEffectString","rawDesc","singleValue","alteredValue","DisableBool","GlyphShowcasePanelEntry","maxEffects","searchValue","searchObj","searchObjId","activeTab","topThreshold","isFirstIrrelevant","setActiveTab","tabId","matchingTabs","unlockedTabs","matchedEntry","h2pTab","matches","searchObjThis","searchObjOther","importSave","lineCount","ignorePresets","overwrittenPresetCount","presetButtonText","ignoreConstants","willOverwriteConstant","extraConstants","constantButtonText","isImportingExtraData","hasExtraData","scriptContent","importedPresets","importedConstants","hasNewConstants","constantCountAfterImport","currentConstants","isImportingPresets","isImportingConstants","currentPresets","mismatchedPresets","toImport","existingPreset","inputIsValid","selectStr","basicCountStr","trashStr","settingTooltipText","currentSettings","parsedSettings","topLevelClassObject","rarityStr","effectStr","scoreStr","effectData","effectClassObject","getEffectDesc","effectScoreStr","currSettings","settingsChanged","capitalized","changedValue","oldReq","newReq","oldScore","newScore","effectEntry","fullStr","isSelected","oldStr","newStr","ImportFilterSingleType","typeInfo","partIndex","subparts","inputIsDev","fileName","lastOpened","changeOfflineSetting","offlineType","offlineDetails","saveCheckString","OFFLINE_PROGRESS_TYPE","IMPORTED","LOCAL","offlineImport","rawString","of","inputIsValidSave","inputIsSecret","isSecretImport","isSecretTheme","isFromFuture","updateOfflineSettings","durationInMs","willLoseCosmetics","currSets","importedSets","willLoseSpeedrun","importConstants","willImport","shortenString","missedImports","constantNames","updateImportStatus","openLink","openAssociatedModal","InformationModalButton","formatAntimatter","LoadGameEntry","choiceEnum","officialSeed","seedValue","inputSeed","handleSeedInput","convertedInput","hashStringToSeed","imul","h2","nerfs","realityGlyphLevel","formatGlyphEffect","createRealityGlyph","possibleEffects","realityEffectConfigs","minRealityEffectIndex","cfg","effectTemplate","inventoryIndex","swapIntoActive","returnedSTDCount","respecAll","currentMultiplier","nextMultiplier","toggleGlow","glowOptionClass","resourceStr","sortStr","completedStr","orderStr","originalMilestones","laitelaUpgradeExtraMilestones","resourceVal","sortVal","orderVal","onInfoPage","willStartRun","nextPage","confirmPhrase","macConfirm","StdStoreRow","macPurchaser","modalTitle","confirmText","deleting","invalidMessage","importedTree","hasInfo","isImporting","inputIsValidTree","newStudiesArray","convertInputShorthands","importDestString","newStudies","formatTheoremCost","intoEmpty","tt","st","strTT","strST","getStudyForceBoughtState","disregardCurrentStudies","getConnectionForceBoughtState","forceIsBought","isNewFromImport","ForceBoughtState","getState","notBought","unspecified","forceState","currentState","PseudoTimeStudyButton","PseudoTimeStudyConnection","showPreview","studyStr","treeStatus","firstPaths","secondPaths","savedImportString","StudyStringLine","StudyStringPreview","StudyTreeInfo","truncatedInput","spentTheorems","invalidStudies","dimensionPaths","combinedTreeObject","stringEC","getECFromString","hasExclamationPoint","canUnlockEC","hasECMismatch","coloredString","truncateInput","secretStrings","newInput","importTree","savePreset","formatStudyList","otherMode","isCurrentlyBlocks","listEntries","toggleUI","showStoredGameTime","realityInvalidate","disableLock","upgradeStr","endAM","corruptionInfos","S12Games","isSelectingGame","S12GameEntries","nextModalID","_component","_modalConfig","_priority","_closeEvent","applyCloseListeners","prestigeOrder","shouldClose","removeFromQueue","modalConfig","_uniqueID","_props","modalQueue","sortModalQueue","singleQueue","ChallengeConfirmationModal","TimeModal","getSaveInfo","pelleAM","pelleLore","EternityChallengeStartModal","startInfinityChallenge","InfinityChallengeStartModal","startNormalChallenge","NormalChallengeStartModal","CatchupModal","DimensionBoostModal","AntimatterGalaxyModal","BigCrunchModal","ExitChallengeModal","ReplicantiGalaxyModal","EternityModal","enterDilation","EnterDilationModal","ExitDilationModal","RealityModal","ResetRealityModal","EnterCelestialsModal","HardResetModal","backupWindows","BackupWindowModal","enterSpeedrun","SpeedrunModeModal","ModifySeedModal","ChangeNameModal","ArmageddonModal","ResetMendingModal","confirmationOptions","ConfirmationOptionsModal","infoDisplayOptions","InfoDisplayOptionsModal","awayProgressOptions","AwayProgressOptionsModal","GlyphDisplayOptionsModal","CosmeticSetChoiceModal","SingleGlyphAppearanceModal","HotkeysModal","newsOptions","NewsOptionsModal","animationOptions","AnimationOptionsModal","HiddenTabsModal","preferredTree","PreferredTreeModal","speedUp","SpeedUpModal","speedUpReport","SpeedUpReportModal","UpgradeMechanicLockModal","DeleteCompanionGlyphModal","glyphDelete","DeleteGlyphModal","PurgeGlyphModal","SacrificeGlyphModal","RefineGlyphModal","PurgeAllUnprotectedGlyphsModal","PurgeAllRejectedGlyphsModal","GlyphShowcasePanelModal","UndoGlyphModal","ReplaceGlyphModal","enslavedHints","EnslavedHintsModal","RealityGlyphCreationModal","GlyphSetSaveDeleteModal","UiChoiceModal","H2PModal","InformationModal","CreditsModal","ChangelogModal","AwayProgressModal","loadGame","LoadGameModal","ImportSaveModal","ImportFilterModal","ImportAutomatorDataModal","DeleteAutomatorScriptModal","AutomatorScriptTemplate","SwitchAutomatorEditorModal","ClearConstantsModal","ImportTimeStudyConstants","AutobuyerEditModal","StdStoreModal","StudyStringModal","SingularityMilestonesModal","PelleEffectsModal","SacrificeModal","BreakInfinityModal","RespecIAPModal","WarpRealityModal","CorruptionFullEffectsModal","S12GamesModal","CloudSaveConflictModal","CloudLoadConflictModal","CloudInvalidDataModal","onAccept","addImportConflict","importingSave","currentSave","messagePriority","currPriority","closeButton","MessageModal","isDefault","isAnimated","cssClass","getSelection","removeAllRanges","secretThemeIndex","secretThemes","sha","isAlreadyUnlocked","dark","metro","animated","loadCheck","login","secretImports","secretImportIndex","AchievementState","_row","_column","_bitmask","_inverseBitmask","isPreReality","isPrePelle","isPreMend","prePelle","preRealityRows","preMendRows","unlockedAchievements","vFixMult","vRaUpg","basePower","SecretAchievementState","AchievementTimer","isRealTime","advance","RealityUpgradeState","realityReached","RebuyableRealityUpgradeState","GlyphEffectOrder","reverseBitstring","levelBoost","bestUndoGlyphCount","glyphIndexArray","useProtectedSlots","isUsableIndex","rowChange","newRows","rowsToAdd","rowsMoved","hasMoved","orig","moveGlyphRow","dest","hasOverlap","stacked","freeIndex","targetGlyph","searchList","fuzzyMatch","op","comp1","comp2","matchedEffects","large","small","allMatches","lvl","sym","activeGlyph","activeIndex","forbiddenByPelle","canEquipSpecial","maxSpecial","saveUndo","updateRealityGlyphEffects","updateMaxGlyphCount","forceToUnprotected","targetRegion","corruptionGlyph","stillEquipped","fastReality","hasOther","unequipNonCursed","append","unequip","requestedInventoryIndex","storedIndex","moveToEmpty","glyphA","glyphB","swapGlyph","isExistingGlyph","makeID","isProtectedIndex","addVisualFlag","sortFunction","glyphsToSort","freeSpace","byType","totalDesiredPadding","biggestPadding","outIndex","autoEquipBetterGlyphs","compareFunction","sameTypeGlyphs","candidate","autoEquipByLevel","autoEquipByPower","autoEquipByScore","autoEquipByEffect","isObjectivelyUseless","inventoryIn","hasSomeBetterEffects","comparedEffects","toCompare","compareThreshold","betterCount","deleteGlyphs","isHarsh","toBeDeleted","inventoryCopy","fakePurgeInventory","isCustomGlyph","unprotectedGlyphs","processSortingAfterReality","processAutoEquipAfterReality","omegaInstabilityThreshold","clearUndo","undoData","totalPurchased","ecs","thisEternityTime","thisRealityTime","dilationStudies","dilationRebuyables","DilationUpgrades","inventorySlot","ecIndex","fromId","startingReality","activeGlyphList","currCount","singleGlyphHash","cursedGlyph","GlyphSacrificeState","ignoreCelestialEffects","CosmeticGlyphType","_defaultSymbol","_defaultColor","_canCustomize","defaultSymbol","defaultColor","isNormallyDark","custom","functionalGlyphs","cosmeticsEnabled","sortedArray","getHue","rawHue","blackArr","whiteArr","longer","shorter","combined","rarityEntry","isLight","colorKey","colorStr","toUnlock","allSymbols","allColors","selectedSymbol","selectedColor","GlyphEffectState","_adjustApply","adjustApply","effectKey","getTotalEffect","getGlyphEffectValues","baseStrength","glyphEffect","numEffects","effectValues","effectNames","cursedEffects","conflictingEffects","combineFunction","GlyphRNG","SECOND_GAUSSIAN_DEFAULT_VALUE","toReturn","isFake","fakeSeed","fakeSecondGaussian","FakeGlyphRNG","MusicGlyphRNG","initialStrength","rngIn","typeIn","randomNumberOfEffects","generateEffects","generateRealityEffects","maxID","strengthMultiplier","rarityBoost","afterRaAnswer","gaussianBellCurve","relicShardFactor","increasedRarity","random1","random2","numberOfEffects","sortedRealityEffects","unincluded","typesSoFar","maxOfSameTypeSoFar","realityCount","groupNum","groupIndex","initSeed","typePerm","typePermIndex","uniformEffects","startID","typesThisReality","effectPerm","newMask","replacable","toRemove","dimPowers","fake","tot","handleSpecialGlyphTypes","attemptRefineGlyph","pre10kFactor","post10kFactor","toGain","askConfirmation","glyphMaxValue","rarityModifier","glyphActualValue","amountUntilCap","currentCap","capAfterRefinement","higherCap","decoherence","rawRefinementGain","refinementGain","decoherenceGain","glyphTypeName","otherResource","maxResource","typeCfg","neg","missingEffects","effectScore","NEGATIVE_INFINITY","ANY","thresholdValue","glyphScore","sources","getGlyphLevelSources","totalWeight","scaledWeight","weightKeys","percent","fracPart","missingPercent","epCoeff","epBase","replPow","replCoeff","replBase","dtPow","dtCoeff","dtBase","eterBase","staticFactors","blendExp","preScale","adjustFactor","powEffect","baseLevel","scaledLevel","instabilitySoftcap","ultraInstabilitySoftcap","omegaInstabilitySoftcap","instability","hyperInstability","ultraInstability","omegaInstability","incAfterInstability","gameDeltaTime","toMilliseconds","timespan","deltaTimeFull","bestEternityRealTime","bestMendRealTime","nonActivePathReplicantiGalaxies","getTickSpeedMultiplier","baseMultiplier","galWeakStrength","finalAnswer","multiplySameCosts","boughtTickspeed","tickExtensionTickspeed","corruptPen","BASE_SOFTCAP","GROWTH_RATE","GROWTH_EXP","logTickmult","logShards","uncapped","priceToCap","desiredCost","costFormulaCoefficient","boughtToCost","derivativeOfBoughtToCost","newtonsMethod","oldApproximation","approximation","originalPurchases","tickExtensionTimeShard","applyNDMultipliers","applyNDPowers","glyphDilationPowMultiplier","buy10Value","glyphPowMultiplier","glyphEffarigPowMultiplier","onBuyDimension","resetAmountUpToTier","challengeCostBump","remainingUntil10","howMany","buyUntilTen","bulkLeft","maxBought","buying","AntimatterDimensionState","BASE_COST_MULTIPLIERS","C6_BASE_COSTS","_c6BaseCost","C6_BASE_COST_MULTIPLIERS","_c6BaseCostMultiplier","corruptionPen","continuumAmount","multiplyIC5Costs","cappedProductionInNormalChallenges","atomDilutionCorruption","hasBigCrunchGoal","maxTierProduced","nextTierOffset","areEnabled","InfinityDimensionState","UNLOCK_REQUIREMENTS","COST_MULTS","POWER_MULTS","antimatterRequirementReached","lockString","purchasesUntilHardcap","costScaling","tDc","portionToSpend","isMaxAll","canSpend","cheapestDim","TimeDimensionState","E6000_SCALING_AMOUNTS","_e6000ScalingAmount","COST_THRESHOLDS","e6000ScalingAmount","costMultIncreases","scalingPast1e6000","pC","firstThreshold","secondThreshold","e6kThreshold","resetMultiversalDimensions","updateMultiversalDimensionCosts","fullResetMultiversalDimensions","MultiversalDimensionState","internal","ids","studyDB","studiesString","studyCluster","studyRangeSplit","studyRangeToArray","tsObject","ecString","ecID","ecDB","firstNumber","lastNumber","studiesArray","checkCosts","toBuy","hasRequirements","buySingleStudy","checkOnlyStructure","reqSatisfied","hasForbiddenStudies","hasEnoughTT","secondaryGoal","isEntryGoalMet","stDiscount","stNeeded","maxST","hasST","hasTT","pathSet","validPaths","ecStudies","invalidateRequirement","studiesToBuy","allSecondaryRequirementsMet","cachedCurrentRequirement","quiet","getTP","override","_from","_to","_override","sacrificeExponent","preIC2","postIC2","triad","baseAnswer","corrupt","nd1Amount","prePowerSacrificeMult","prePowerBoost","isAch118Unlocked","handleChallengeCompletion","inIC","updateChallengeTime","disableAnimation","bigCrunchReset","forced","bigCrunchGiveRewards","bigCrunchResetValues","bigCrunchUpdateStatistics","bigCrunchTabChange","bigCrunchCheckUnlocks","earlyGame","currentReplicanti","currentReplicantiGalaxies","remainingGalaxies","genPeriod","genCount","gainedPerGen","gainedThisTick","ChargedInfinityUpgradeState","_upgrade","InfinityUpgradeState","_chargedEffect","charge","hasChargeEffect","InfinityIPMultUpgrade","purchaseCount","purchasesAtIncrease","hasIncreasedCost","isRequirementSatisfied","sumGeometricSeries","availableIP","ChargedBreakInfinityUpgradeState","BreakInfinityUpgradeState","RebuyableBreakInfinityUpgradeState","cappedBase","NormalChallengeState","isPartOfIC1","toComplete","InfinityChallengeRewardState","InfinityChallengeState","cardinality","addReplicantiGalaxies","galaxyGain","fastReplicantiBelow308","log10GainFactor","shouldBuyRG","uncappedAmount","remainingGain","gainNeededPerRG","replicantiExponent","maxUsedGain","overCapOverride","overCap","increases","preCelestialEffects","replicantiBeforeLoop","areRGsBeingBought","areBeingBought","tickCount","singleTickAvg","intervalRatio","batchTicks","binomialTicks","reproduced","leftover","isAuto","ReplicantiUpgradeState","nearestPercent","baseCostAfterCount","logBaseIncrease","logCostScaling","distantReplicatedGalaxyStart","remoteReplicatedGalaxyStart","logDistantScaling","extraIncrements","numDistant","logRemoteScaling","numRemote","freeUnlock","logReplicanti","costBase","costIncrement","bulkPossible","bulkCost","buyFn","checkForBuying","ttAM","ttIP","ttEP","ImaginaryUpgradeState","RebuyableImaginaryUpgradeState","PerkState","initializeConnections","dev","respecPerks","buyAllPerks","DIL_UPG_NAMES","upgAmount","whichCap","retroactiveTPFactor","thresholdUpgrade","amnt","glyphReduction","tgSoftcapOne","tgSoftcapOneApplytimes","tachyonEffect","dtRate","toDpower","toDmult","getBaseTP","requireEternity","effectiveTP","drain","goalNetRate","currNetRate","affordsXUpgrades","buyMaxDilationUpgrades","TGRBought","DilationUpgradeState","RebuyableDilationUpgradeState","BlackHoleUpgradeState","getAmount","setAmount","calculateValue","incrementAmount","beforeProg","stateProgress","stateTime","updatePhase","BlackHoleState","blackHoleCostMultipliers","timeToNextStateChange","timeUntilTimeActive","inputTimeActive","timeActive","activePeriod","realTimeWhileActive","nextDeactivation","timeUntilNextDeactivation","cooldown","fullCycle","currentActivationDuration","activeCyclesUntilLastDeactivation","activeTimeUntilLastDeactivation","timeLeftAfterLastDeactivation","lastActivationDuration","automatic","blackHoleString","pauseType","automaticString","rawSeconds","autoPause","autoPauseData","activePeriods","realTimePeriodsWithBlackHoleActive","totalRealTime","numberOfTicks","tolerance","speedups","decimalBinarySearch","binarySearch","evaluationFunction","speedupWithoutBlackHole","realerTime","effectivePeriods","realTimePeriodsWithBlackHoleEffective","activeTime","timeToNextPause","bhNum","phases","durations","intervals","phaseBoundList","inactiveTime","phaseBounds","minTime","timeLeft","ExpoBlackHoleUpgradeState","ExpoBlackHoleState","expoBlackHoleCostMultipliers","expoBlackHoleString","expoBlackHoleDiff","expoBlackHoleSpeedup","speedupWithoutExpoBlackHole","ebhNum","log10FinalEP","rmGain","baseIMCap","baseIMGain","imCap","currentIM","isDevEnvironment","href","giveAllAchievements","doubleEverything","key2","tripleEverything","key3","barrelRoll","spin3d","spin4d","cancerize","fixSave","updateTDCosts","refundTimeDims","refundEPMult","refundDilStudies","resetDilation","giveSpecialGlyph","giveGlyph","giveRealityGlyph","setCompanionGlyphEP","decriminalize","removeAch","setNextNewsMessage","implode","eternify","undilate","realize","togglePerformanceStats","visited","toVisit","printResourceTotals","toPrecision","aGalaxy","rGalaxy","dGalaxy","ADmults","IDmults","TDmults","unlockCelestialQuotes","presentCelestialQuotes","testReplicantiCode","singleId","useDebugger","situationLists","situationCount","resultList","runSituation","situation","doReplicantiTicks","actual","testGlyphs","makeGlyph","makeAllEffectGlyph","effarigGlyphs","makeCombinationsWithRepeats","withoutFirst","withFirst","sets5","sets4","effarigSets","equipSet","glyphToShortString","padString","finishTrial","done","gl","glyphData","runTrial","unlockAutomator","forceCloudSave","unlockAllCosmeticSets","bitArray","respecAvailable","lastRespec","availableSTD","timeUntilRespec","msSinceLast","canRespec","updateLocalSTD","fetchedData","newSTDData","respecRequest","ShopPurchaseState","shouldDisplayMult","SubtabState","checkTabVisibilityForSecretAchievement","findLastOpenSubtab","cycleThroughSubtabs","availableTabs","TabState","isOpened","subtabConfig","hasVisibleSubtab","resetToUnlocked","resetToAvailable","tabNotificationKey","TabNotificationState","triggered","currentTabKey","templateName","templateClimbEP","templateGrindEternities","templateGrindInfinities","templateDoEC","templateUnlockDilation","storeTreeData","nowaitStr","treeNowait","presetObj","storedTreeStr","storedTreeObj","parseAutobuyerProp","autoInfMode","autoInfValue","autoEterMode","autoEterValue","gapToEternity","crunchesPerEternity","isBanked","has191","mergeIntoGlobal","existingValue","watchLatestCommit","Utils","GameDB","core","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","amdO","deferred","O","chunkIds","notFulfilled","fulfilled","__esModule","definition","globalThis","Symbol","toStringTag","nmd","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/js/app.590d8137.js b/js/app.590d8137.js deleted file mode 100644 index 83acc72bb..000000000 --- a/js/app.590d8137.js +++ /dev/null @@ -1,3 +0,0 @@ -(()=>{var e={1844:()=>{window.Async={_enabled:!0,get enabled(){return this._enabled},set enabled(e){this._enabled=e},runForTime(e,t,i){const a=i.batchSize||1,n=i.maxTime,s=Date.now();for(let r=t;r>0;){for(let t=0;t=n)return r}return 0},sleepPromise:e=>new Promise((t=>setTimeout(t,e))),run(e,t,i){if(this.enabled){this.enabled=!1;const a=this._run(e,t,i);return i.then?a.then((()=>{i.then(),this.enabled=!0})):a}for(let a=0;a0);i.asyncExit&&i.asyncExit()}}}},4009:(e,t,i)=>{i(3948),window.EventHub=class e{constructor(){this._handlers={}}on(e,t,i){let a=this._handlers[e];void 0===a&&(a=[],this._handlers[e]=a),a.push({fn:t,target:i})}offAll(e){for(const t of Object.keys(this._handlers))this._handlers[t]=this._handlers[t].filter((t=>t.target!==e))}dispatch(e,t){const i=this._handlers[e];if(void 0!==i)for(const a of i)a.fn(t)}static dispatch(t,...i){e.logic.dispatch(t,i),GameUI.dispatch(t,i)}static get stats(){function t(e){return Object.values(e._handlers).map((e=>e.length)).sum()}return`UI(UPDATE/Total): ${e.ui._handlers[GAME_EVENT.UPDATE].length}/${t(e.ui)}; Logic(Total): ${t(e.logic)}`}},EventHub.logic=new EventHub,EventHub.ui=new EventHub,window.GAME_EVENT={GAME_TICK_BEFORE:"GAME_TICK_BEFORE",GAME_TICK_AFTER:"GAME_TICK_AFTER",REPLICANTI_TICK_BEFORE:"REPLICANTI_TICK_BEFORE",REPLICANTI_TICK_AFTER:"REPLICANTI_TICK_AFTER",DIMBOOST_BEFORE:"DIMBOOST_BEFORE",DIMBOOST_AFTER:"DIMBOOST_AFTER",GALAXY_RESET_BEFORE:"GALAXY_RESET_BEFORE",GALAXY_RESET_AFTER:"GALAXY_RESET_AFTER",SACRIFICE_RESET_BEFORE:"SACRIFICE_RESET_BEFORE",SACRIFICE_RESET_AFTER:"SACRIFICE_RESET_AFTER",BIG_CRUNCH_BEFORE:"BIG_CRUNCH_BEFORE",BIG_CRUNCH_AFTER:"BIG_CRUNCH_AFTER",ETERNITY_RESET_BEFORE:"ETERNITY_RESET_BEFORE",ETERNITY_RESET_AFTER:"ETERNITY_RESET_AFTER",REALITY_RESET_BEFORE:"REALITY_RESET_BEFORE",REALITY_RESET_AFTER:"REALITY_RESET_AFTER",SINGULARITY_RESET_BEFORE:"SINGULARITY_RESET_BEFORE",SINGULARITY_RESET_AFTER:"SINGULARITY_RESET_AFTER",ARMAGEDDON_BEFORE:"ARMAGEDDON_BEFORE",ARMAGEDDON_AFTER:"ARMAGEDDON_AFTER",MENDING_RESET_BEFORE:"MENDING_RESET_BEFORE",MENDING_RESET_AFTER:"MENDING_RESET_AFTER",GLYPHS_EQUIPPED_CHANGED:"GLYPHS_EQUIPPED_CHANGED",GLYPHS_CHANGED:"GLYPHS_CHANGED",GLYPH_SACRIFICED:"GLYPH_SACRIFICED",GLYPH_SET_SAVE_CHANGE:"GLYPH_SET_SAVE_CHANGE",GLYPH_VISUAL_CHANGE:"GLYPH_VISUAL_CHANGE",BREAK_INFINITY:"BREAK_INFINITY",FIX_INFINITY:"FIX_INFINITY",INFINITY_DIMENSION_UNLOCKED:"INFINITY_DIMENSION_UNLOCKED",INFINITY_CHALLENGE_COMPLETED:"INFINITY_CHALLENGE_COMPLETED",INFINITY_UPGRADE_BOUGHT:"INFINITY_UPGRADE_BOUGHT",INFINITY_UPGRADE_CHARGED:"INFINITY_UPGRADE_CHARGED",INFINITY_UPGRADES_DISCHARGED:"INFINITY_UPGRADES_DISCHARGED",BREAK_INFINITY_UPGRADE_BOUGHT:"INFINITY_UPGRADE_BOUGHT",BREAK_INFINITY_UPGRADE_CHARGED:"BREAK_INFINITY_UPGRADE_CHARGED",BREAK_INFINITY_UPGRADES_DISCHARGED:"BREAK_INFINITY_UPGRADES_DISCHARGED",ACHIEVEMENT_UNLOCKED:"ACHIEVEMENT_UNLOCKED",CHALLENGE_FAILED:"CHALLENGE_FAILED",REALITY_UPGRADE_BOUGHT:"REALITY_UPGRADE_BOUGHT",REALITY_UPGRADE_TEN_BOUGHT:"REALITY_UPGRADE_TEN_BOUGHT",PERK_BOUGHT:"PERK_BOUGHT",BLACK_HOLE_UNLOCKED:"BLACK_HOLE_UNLOCKED",BLACK_HOLE_UPGRADE_BOUGHT:"BLACK_HOLE_UPGRADE_BOUGHT",EXPO_BLACK_HOLE_UPGRADE_BOUGHT:"EXPO_BLACK_HOLE_UPGRADE_BOUGHT",GAME_LOAD:"GAME_LOAD",OFFLINE_CURRENCY_GAINED:"OFFLINE_CURRENCY_GAINED",SAVE_CONVERTED_FROM_PREVIOUS_VERSION:"SAVE_CONVERTED_FROM_PREVIOUS_VERSION",REALITY_FIRST_UNLOCKED:"REALITY_FIRST_UNLOCKED",AUTOMATOR_TYPE_CHANGED:"AUTOMATOR_TYPE_CHANGED",AUTOMATOR_SAVE_CHANGED:"AUTOMATOR_SAVE_CHANGED",AUTOMATOR_CONSTANT_CHANGED:"AUTOMATOR_CONSTANT_CHANGED",PELLE_STRIKE_UNLOCKED:"PELLE_STRIKE_UNLOCKED",MENDING_UPGRADE_BOUGHT:"MENDING_UPGRADE_BOUGHT",WARP_UPGRADE_BOUGHT:"WARP_UPGRADE_BOUGHT",CORRUPTION_UPGRADE_BOUGHT:"CORRUPTION_UPGRADE_BOUGHT",RA_UPGRADE_BOUGHT:"RA_UPGRADE_BOUGHT",EXPO_BLACK_HOLE_UNLOCKED:"EXPO_BLACK_HOLE_UNLOCKED",ACHIEVEMENT_EVENT_OTHER:"ACHIEVEMENT_EVENT_OTHER",ENTER_PRESSED:"ENTER_PRESSED",ARROW_KEY_PRESSED:"ARROW_KEY_PRESSED",UPDATE:"UPDATE",TAB_CHANGED:"TAB_CHANGED",CLOSE_MODAL:"CLOSE_MODAL"}},3414:(e,t,i)=>{i(4916),i(5306),i(3948),i(5827),i(3210),Array.prototype.distinct=function(){return this.filter((function(e,t,i){return i.indexOf(e)===t}))},Math.wrap=function(e,t,i){const a=i-t+1,n=(e-t)%a;return n<0?i+1+n:t+n},Math.clamp=function(e,t,i){return Math.clampMax(Math.clampMin(e,t),i)},Math.clampMin=function(e,t){return Math.max(e,t)},Math.clampMax=function(e,t){return Math.min(e,t)},Array.prototype.nextSiblingIndex=function(e){const t=this.indexOf(e);if(-1===t)throw"Current item is not in array";return t===this.length-1?0:t+1},Array.prototype.nextSibling=function(e){return this[this.nextSiblingIndex(e)]},Array.prototype.previousSiblingIndex=function(e){const t=this.indexOf(e);if(-1===t)throw"Current item is not in array";return 0===t?this.length-1:t-1},Array.prototype.previousSibling=function(e){return this[this.previousSiblingIndex(e)]},Decimal.sumReducer=function(e,t){return Decimal.add(e,t)},Decimal.prodReducer=function(e,t){return Decimal.mul(e,t)},Number.sumReducer=function(e,t){return e+t},Number.prodReducer=function(e,t){return e*t},Decimal.maxReducer=function(e,t){return Decimal.max(e,t)},Decimal.prototype.copyFrom=function(e){if(!(e instanceof Decimal)&&!(e instanceof DecimalCurrency))throw"Copy value is not Decimal or DecimalCurrency";this.mantissa=e.mantissa,this.exponent=e.exponent},window.copyToClipboard=function(){let e=document.createElement("textarea");return document.body.appendChild(e),e.style.position="absolute",e.style.left="-9999999px",e.setAttribute("readonly",""),function(t){try{return e.value=t,e.select(),document.execCommand("copy")}catch(i){return console.log(i),!1}}}(),window.safeCall=function(e){e&&e()},String.prototype.capitalize=function(){return this.toLowerCase().replace(/^[0-9A-Z_a-z]/,(e=>e.toUpperCase()))},String.prototype.splice=function(e,t,i){return this.slice(0,e)+i+this.slice(e+Math.abs(t))},Array.range=function(e,t){return[...Array(t).keys()].map((t=>t+e))},Array.repeat=function(e,t){return Array(t).fill(e)},Array.prototype.first=function(e){if(void 0===e)return this.length>0?this[0]:void 0;if("function"!==typeof e)throw"Predicate must be a function";for(let t=0;t0?this[this.length-1]:void 0;if("function"!==typeof e)throw"Predicate must be a function";for(let t=this.length-1;t>=0;t--)if(!0===e(this[t]))return this[t];throw"Array doesn't contain a matching item"},Array.prototype.mapToObject=function(e,t){if("function"!==typeof e||"function"!==typeof t)throw"keyFun and valueFun must be functions";let i={};for(let a=0;aMath.max(e,t)))},Array.prototype.min=function(){return 0===this.length?0:this.reduce(((e,t)=>Math.min(e,t)))},Array.prototype.countWhere=function(e){let t=0;for(const i of this)e(i)&&++t;return t},Decimal.prototype.clampMaxExponent=function(e){return this.exponent>=e?Decimal.fromMantissaExponent_noNormalize(1,e):this},Number.prototype.toDecimal=function(){return new Decimal(this.valueOf())},Math.log4=Math.log(4),Array.prototype.randomElement=function(){return this[Math.floor(Math.random()*this.length)]},Decimal.prototype.valueOf=()=>{throw new Error("Implicit conversion from Decimal to number")},Set.prototype.countWhere=function(e){let t=0;for(const i of this)e(i)&&++t;return t},Set.prototype.find=function(e){for(const t of this)if(e(t))return t},Set.prototype.some=function(e){for(const t of this)if(e(t))return!0;return!1},Set.prototype.every=function(e){for(const t of this)if(!e(t))return!1;return!0},Array.prototype.compact=function(){return this.filter((e=>void 0!==e&&null!==e))},Array.prototype.toBitmask=function(){return this.reduce(((e,t)=>e|1<>=1,++i;return t},String.isWhiteSpace=function(e){return e&&!e.trim()}},8018:(e,t,i)=>{function a(){const e=GameEnd.endState>END_STATE_MARKERS.END_NUMBERS?1:(GameEnd.endState-END_STATE_MARKERS.FADE_AWAY)/2;return player.celestials.pelle.doomed&&Math.random(){String.prototype.includes||(String.prototype.includes=function(e,t){return"number"!==typeof t&&(t=0),!(t+e.length>this.length)&&-1!==this.indexOf(e,t)}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{value:function(e,t){if(null==this)throw new TypeError('"this" is null or not defined');var i=Object(this),a=i.length>>>0;if(0===a)return!1;var n=0|t,s=Math.max(n>=0?n:a-Math.abs(n),0);function r(e,t){return e===t||"number"===typeof e&&"number"===typeof t&&isNaN(e)&&isNaN(t)}while(s>>0;if("function"!==typeof e)throw new TypeError("predicate must be a function");var a=arguments[1],n=0;while(n{window.TimeSpan=class t{static fromYears(e){return new t(new Decimal(e).times(31536e6))}static fromDays(e){return new t(new Decimal(e).times(864e5))}static fromHours(e){return new t(new Decimal(e).times(36e5))}static fromMinutes(e){return new t(new Decimal(e).times(6e4))}static fromSeconds(e){return new t(new Decimal(e).times(1e3))}static fromMilliseconds(e){return new t(new Decimal(e))}constructor(t){e.isNumber(t,"Value 'ms' must be a number or Decimal"),this._ms=t}copyFrom(t){e.isTimeSpan(t),this._ms=t._ms}setFrom(t){e.isNumber(t),this._ms=t}get years(){return Decimal.floor(this.totalYears)}get days(){return Decimal.floor(this.totalDays.div(365).sub(this.totalDays.div(365).floor()).times(365))}get hours(){return Decimal.floor(this.totalHours.div(24).sub(this.totalHours.div(24).floor()).times(24))}get minutes(){return Decimal.floor(this.totalMinutes.div(60).sub(this.totalMinutes.div(60).floor()).times(60))}get seconds(){return Decimal.floor(this.totalSeconds.div(60).sub(this.totalSeconds.div(60).floor()).times(60))}get milliseconds(){return Decimal.floor(this.totalMilliseconds.div(1e3).sub(this.totalMilliseconds.div(1e3).floor()).times(1e3))}get totalYears(){return new Decimal(this._ms).div(31536e6)}get totalDays(){return new Decimal(this._ms).div(864e5)}get totalHours(){return new Decimal(this._ms).div(36e5)}get totalMinutes(){return new Decimal(this._ms).div(6e4)}get totalSeconds(){return new Decimal(this._ms).div(1e3)}get totalMilliseconds(){return new Decimal(this._ms)}plus(i){return e.isTimeSpan(i),new t(this._ms.add(i._ms))}minus(i){return e.isTimeSpan(i),new t(this._ms.sub(i._ms))}times(i){return e.isNumber(i),new t(this._ms.times(i))}dividedBy(i){return e.isNumber(i),new t(this._ms.div(i))}toString(){return this.years.gt(1e6)?`${format(this.totalYears,3,0)} years`:this.totalSeconds.lte(10)?this.toStringNoDecimals():this.toStringShort()}toStringNoDecimals(){const e=[];function t(e,t){e.eq(0)||i(e,t)}function i(t,i){e.push(t.eq(1)?`${formatInt(t)} ${i}`:`${formatInt(t)} ${i}s`)}return t(this.years,"year"),t(this.days,"day"),t(this.hours,"hour"),t(this.minutes,"minute"),t(this.seconds,"second"),t(this.milliseconds,"millisecond"),0==e.length?`${formatInt(0)} seconds`:[e.slice(0,-1).join(", "),e.slice(-1)[0]].join(e.length<2?"":" and ")}toStringShort(e=!0,t=!1){if("END"===format(0)&&!t)return"END";const i=this.totalSeconds;if(i.gt(5e-7)&&i.lt(.001))return`${format(i.times(1e3),0,3)} ms`;if(i.lt(1))return`${format(i.times(1e3))} ms`;if(i.lt(10))return`${format(i,0,3)} seconds`;if(i.lt(60))return`${format(i,0,2)} seconds`;if(this.totalHours.lt(100)||t&&this.totalHours.lt(1e3)){if(e&&!Notations.current.isPainful){const e=n(this.seconds,this.milliseconds);return Decimal.floor(this.totalHours).eq(0)?`${a(this.minutes)}:${e}`:`${a(Decimal.floor(this.totalHours))}:${a(this.minutes)}:${e}`}if(this.totalMinutes.lt(60))return`${format(this.totalMinutes,0,2)} minutes`;if(this.totalHours.lt(24))return`${format(this.totalHours,0,2)} hours`}return this.totalDays.lt(500)?`${t?this.totalDays.toFixed(2):format(this.totalDays,0,2)} days`:`${t?this.totalYears.toFixed(3):format(this.totalYears,3,2)} years`;function a(e){const t=e.toString();return 1===t.length?`0${t}`:t}function n(e,i){const n=a(e);return t?`${n}.${Decimal.floor(i.div(100))}`:n}}toTimeEstimate(){const e=this.totalSeconds;return e.lt(1)?`< ${formatInt(1)} second`:e.gt(31557600)?`> ${formatInt(1)} year`:this.toStringShort()}static get zero(){return new t(new Decimal(0))}static get maxValue(){return new t(Decimal.pow10(Number.MAX_VALUE))}static get minValue(){return new t(Decimal.pow10(Number.MIN_VALUE))}};const e={isDefined(e,t){if(void 0===e){if(t)throw t;throw"Value is defined"}},isNumber(e,t){if("number"!==typeof e&&!(e instanceof Decimal)){if(t)throw t;throw"Value is not a number"}},isTimeSpan(e,t){if(!(e instanceof TimeSpan)){if(t)throw t;throw"Value is not a TimeSpan"}}}},2233:(e,t,i)=>{"use strict";var a={};i.r(a),i.d(a,{BitPurchasableMechanicState:()=>R,BitUpgradeState:()=>_,Effect:()=>w,Effects:()=>k,GameMechanicState:()=>A,PurchasableMechanicState:()=>S,RebuyableMechanicState:()=>M,SetPurchasableMechanicState:()=>D,makeGarbledTemplate:()=>G,processText:()=>U});var n={};i.r(n),i.d(n,{GlyphCombiner:()=>ee,LAITELA_UPGRADE_DIRECTION:()=>Nt,PERK_FAMILY:()=>L,V_REDUCTION_MODE:()=>Si});var s={};i.r(s),i.d(s,{BlockAutomator:()=>ds,default:()=>ps});var r={};i.r(r),i.d(r,{automatorBlocks:()=>Ts,automatorBlocksMap:()=>ks,default:()=>_s});var o={};i.r(o),i.d(o,{AutomatorTextUI:()=>Ms,default:()=>Ps});var l={};i.r(l),i.d(l,{PerkLayouts:()=>Js,PerkNetwork:()=>er,default:()=>ar});var c={};i.r(c),i.d(c,{GAME_SPEED_EFFECT:()=>Mp,addEternityTime:()=>Tp,addInfinityTime:()=>vp,addRealityTime:()=>Sp,breakInfinity:()=>op,browserCheck:()=>Zp,gainedEternityPoints:()=>mp,gainedGlyphLevel:()=>yp,gainedInfinities:()=>Dp,gainedInfinityPoints:()=>lp,gainedMendingPoints:()=>up,gameLoop:()=>Np,getBaseGameSpeedup:()=>Up,getEternitiedMilestoneReward:()=>Cp,getGameSpeedupFactor:()=>Ip,getGameSpeedupForDisplay:()=>Gp,getGameSpeedupSoftcaps:()=>xp,getGameSpeedupSoftcapsExp:()=>Pp,getInfinitiedMilestoneReward:()=>Ep,getOfflineEPGain:()=>_p,getTTPerSecond:()=>Wp,init:()=>Qp,mendingMilestoneElevenMultiplier:()=>cp,playerInfinityUpgradesOnReset:()=>rp,ratePerMinute:()=>gp,realTimeMechanics:()=>Bp,requiredIPForEP:()=>pp,resetChallengeStuff:()=>fp,resetEternityRuns:()=>wp,resetInfinityRuns:()=>bp,resetRealityRuns:()=>kp,setHoldingR:()=>Kp,setShiftKey:()=>zp,simulateTime:()=>Xp,updateRefresh:()=>Rp,warpReality:()=>dp});var u={};i.r(u),i.d(u,{AUTOMATOR_COMMAND_STATUS:()=>Vn,AUTOMATOR_MODE:()=>Yn,AUTOMATOR_TYPE:()=>jn,AUTOMATOR_VAR_TYPES:()=>Wn,Achievement:()=>ate,AchievementTimers:()=>cte,Achievements:()=>nte,AlchemyReactions:()=>WZ,AlchemyResource:()=>VZ,AlchemyResources:()=>YZ,AntimatterDimension:()=>Eie,AntimatterDimensions:()=>Tie,AutoBackupSlots:()=>xm,AutoGlyphProcessor:()=>Xte,Autobuyer:()=>nZ,Autobuyers:()=>sZ,AutomatorBackend:()=>es,AutomatorData:()=>Kn,AutomatorHighlighter:()=>Qn,AutomatorPoints:()=>ts,AutomatorScript:()=>zn,AutomatorScroller:()=>Jn,AwayProgressTypes:()=>uu,BACKUP_SLOT_TYPE:()=>Im,BlackHole:()=>Sne,BlackHoles:()=>Dne,BreakInfinityUpgrade:()=>Cae,BreakInfinityUpgradeState:()=>Tae,Celestials:()=>xQ,Cloud:()=>zm,ConfirmationTypes:()=>hu,CorruptionData:()=>De,CorruptionUpgrade:()=>eu,CorruptionUpgrades:()=>tu,CosmeticGlyphTypes:()=>Ite,Currency:()=>Mi,DIMBOOST_TYPE:()=>Kw,DarkMatterDimension:()=>sQ,DarkMatterDimensionState:()=>nQ,DarkMatterDimensions:()=>rQ,DeltaTimeState:()=>Jte,Destroyer:()=>IQ,DilationTimeStudyState:()=>Zie,DilationUpgrade:()=>kne,DilationUpgrades:()=>Cne,DimBoost:()=>Qw,ECTimeStudyState:()=>Kie,EFFARIG_STAGES:()=>EZ,END_STATE_MARKERS:()=>RQ,ENSLAVED_UNLOCKS:()=>UK,Effarig:()=>TZ,EffarigUnlock:()=>kZ,Enslaved:()=>BK,EnslavedProgress:()=>OK,EternityChallenge:()=>IB,EternityChallengeState:()=>MB,EternityChallenges:()=>xB,EternityMilestone:()=>td,EternityMilestoneState:()=>ed,EternityUpgrade:()=>nd,ExpoBlackHole:()=>Ine,ExpoBlackHoles:()=>xne,FreeTickspeed:()=>oie,GALAXY_TYPE:()=>iu,Galaxy:()=>nu,GalaxyGenerator:()=>_Q,GalaxyGeneratorUpgrade:()=>SQ,GalaxyGeneratorUpgrades:()=>DQ,GameCache:()=>vl,GameEnd:()=>MQ,GameIntervals:()=>bl,GameKeyboard:()=>Sl,GameOptions:()=>Zee,GameSaveSerializer:()=>_m,GameStorage:()=>Pm,GameUI:()=>sK,GlyphAlteration:()=>BZ,GlyphAppearanceHandler:()=>xte,GlyphEffect:()=>Gte,GlyphEffectOrder:()=>fte,GlyphEffects:()=>rr,GlyphGenerator:()=>Wte,GlyphSacrifice:()=>wte,GlyphSacrificeHandler:()=>jte,GlyphSelection:()=>ku,GlyphTypes:()=>mr,Glyphs:()=>Ete,ImaginaryUpgrade:()=>Zae,ImaginaryUpgrades:()=>Qae,InfinityChallenge:()=>xae,InfinityChallenges:()=>Pae,InfinityDimension:()=>Aie,InfinityDimensions:()=>_ie,InfinityUpgrade:()=>bae,InfinityUpgradeState:()=>yae,Kohler:()=>gZ,KohlerProgressUnlocks:()=>bZ,Laitela:()=>oQ,LineEnum:()=>Zn,MachineHandler:()=>Pne,MendingMilestone:()=>hK,MendingMilestoneState:()=>dK,MendingUpgrade:()=>pl,MendingUpgradeMultiplier:()=>fl,MendingUpgrades:()=>yl,Modal:()=>Yee,MultiversalDimension:()=>jie,MultiversalDimensions:()=>Xie,NG:()=>dZ,NewsHandler:()=>Nne,NormalChallenge:()=>Sae,NormalChallenges:()=>Dae,NormalTimeStudies:()=>ap,NormalTimeStudyState:()=>np,Notation:()=>rZ,Notations:()=>oZ,POWER_DE_PER_ASCENSION:()=>iQ,POWER_DM_PER_ASCENSION:()=>tQ,Pelle:()=>fQ,PelleRifts:()=>AQ,PelleStrikes:()=>TQ,PelleUpgrade:()=>bQ,PelleUpgradeState:()=>vQ,PerformanceStats:()=>dl,Perk:()=>ene,PerkShopUpgrade:()=>fZ,Perks:()=>tne,Player:()=>cl,PlayerProgress:()=>ue,Quote:()=>MK,Quotes:()=>GK,Ra:()=>UZ,RaUpgrade:()=>LZ,RealityUpgrade:()=>hte,RealityUpgrades:()=>mte,RebuyablePelleUpgradeState:()=>gQ,Replicanti:()=>Wae,ReplicantiGrowth:()=>Gae,ReplicantiUpgrade:()=>Yae,Sacrifice:()=>Jie,ScriptTemplate:()=>Zne,SecretAchievement:()=>rte,SecretAchievements:()=>ote,ShopPurchase:()=>$ne,ShopPurchaseData:()=>Lne,Singularity:()=>hQ,SingularityMilestone:()=>cQ,SingularityMilestones:()=>uQ,Speedrun:()=>wm,SpeedrunMilestones:()=>Cm,TUTORIAL_STATE:()=>lZ,Tab:()=>Wne,TabNotification:()=>Kne,Tabs:()=>jne,Teresa:()=>hZ,TeresaUnlocks:()=>yZ,Tesseracts:()=>LK,Theme:()=>zee,Themes:()=>Kee,Tickspeed:()=>rie,Time:()=>eie,TimeDimension:()=>Bie,TimeDimensions:()=>Nie,TimeStudy:()=>sp,TimeStudyConnection:()=>Qie,TimeStudyState:()=>ip,TimeStudyTree:()=>zie,TimeTheoremPurchaseType:()=>jae,TimeTheorems:()=>Xae,Tutorial:()=>uZ,UIID:()=>rK,V:()=>RZ,VRunUnlock:()=>_Z,VRunUnlocks:()=>SZ,VUnlocks:()=>DZ,WarpUpgrade:()=>Xw,WarpUpgrades:()=>zw,animateAndDilate:()=>ane,animateAndEternity:()=>ju,animateAndUndilate:()=>nne,antimatterDimensionCommonMultiplier:()=>lie,applyEU1:()=>Ku,applyEU2:()=>Zu,applyRUPG10:()=>Ou,autoAdjustGlyphWeights:()=>zte,autoReality:()=>xu,beginProcessReality:()=>Uu,bigCrunchAnimation:()=>iae,bigCrunchReset:()=>rae,bigCrunchResetRequest:()=>sae,bigCrunchResetValues:()=>uae,blockifyTextAutomator:()=>Fn,buyAsManyAsYouCanBuy:()=>yie,buyDilationUpgrade:()=>lne,buyManyDimension:()=>pie,buyMaxDilationUpgrades:()=>bne,buyMaxDimension:()=>vie,buyMaxMultiversalDimension:()=>Hie,buyMaxTickSpeed:()=>nie,buyMaxTimeDimension:()=>Iie,buyOneDimension:()=>mie,buySingleMultiversalDimension:()=>Lie,buySingleTimeDimension:()=>Sie,buyStudiesUntil:()=>ep,buyTickSpeed:()=>aie,calculateGlyph:()=>Cte,checkPerkValidity:()=>ine,clearCelestialRuns:()=>Lu,countValuesFromBitmask:()=>qte,dev:()=>Gne,dilatedValueOf:()=>Ene,disChargeAll:()=>gae,disChargeAllBreak:()=>wae,effectiveBaseGalaxies:()=>tie,eternity:()=>Wu,eternityAnimation:()=>Vu,eternityResetRequest:()=>Yu,findGlyphTypeEffects:()=>or,finishProcessReality:()=>Bu,forbiddenConstantPatterns:()=>Cn,fullResetMultiversalDimensions:()=>$ie,fullResetTimeDimensions:()=>Rie,gainedEternities:()=>Ju,generatedTypes:()=>yte,getActiveGlyphEffects:()=>Vte,getAdjustedGlyphEffect:()=>Bte,getAdjustedGlyphEffectUncached:()=>Ute,getAdjustedGlyphLevel:()=>_te,getBaseTP:()=>mne,getDilationGainPerSecond:()=>une,getDilationTimeEstimate:()=>gne,getDimensionFinalMultiplierUncached:()=>cie,getGlyphEffectValues:()=>Ote,getGlyphEffectValuesFromBitmask:()=>$te,getGlyphEffectsFromBitmask:()=>cr,getGlyphIDsFromBitmask:()=>ur,getGlyphLevelInputs:()=>Zte,getRarity:()=>Ate,getRealityProps:()=>Iu,getReplicantiInterval:()=>Lae,getSecondaryGlyphEffect:()=>Nte,getSingleGlyphEffectFromBitmask:()=>Hte,getTP:()=>pne,getTachyonGain:()=>yne,getTachyonGalaxyMult:()=>cne,getTachyonReq:()=>fne,getTickSpeedMultiplier:()=>iie,guardFromNaNValues:()=>ul,hasCompilationErrors:()=>Ln,infinityDimensionCommonMultiplier:()=>wie,initializeChallengeCompletions:()=>Xu,initializeResourcesAfterEternity:()=>zu,isDevEnvironment:()=>Une,isInCelestialReality:()=>Fu,isLocalEnvironment:()=>Bne,isRealityAvailable:()=>Cu,isSecretImport:()=>ete,makeGlyphEffectBitmask:()=>lr,manualBigCrunchResetRequest:()=>nae,manualRequestDimensionBoost:()=>tk,manualRequestGalaxyReset:()=>ru,maxAll:()=>gie,maxAllMultiversalDimensions:()=>qie,maxAllTimeDimensions:()=>xie,mendingReset:()=>uK,mendingResetRequest:()=>lK,multiversalDimensionCommonMultiplier:()=>Vie,orderedEffectList:()=>pte,preProductionGenerateIP:()=>mae,processManualReality:()=>Du,rarityToStrength:()=>gte,realityGlyphEffectLevelThresholds:()=>sr,recalculateAllGlyphs:()=>kte,replicantiCap:()=>$ae,replicantiGalaxy:()=>Bae,replicantiGalaxyRequest:()=>Nae,replicantiLoop:()=>Hae,replicantiMult:()=>qae,requestDimensionBoost:()=>ik,requestGalaxyReset:()=>ou,requestManualReality:()=>_u,resetMultiversalDimensions:()=>Fie,resetTickspeed:()=>sie,resetTimeDimensions:()=>Die,respecGlyphs:()=>Ste,respecTimeStudies:()=>tp,rewardTP:()=>hne,runRealityAnimation:()=>Ru,sacrificeBtnClick:()=>tae,sacrificeReset:()=>eae,secondSoftReset:()=>hae,separateEffectKey:()=>Fte,shop:()=>One,shortcuts:()=>Uc,simulatedRealityCount:()=>Au,skipResetsIfPossible:()=>ek,softReset:()=>Jw,startDilatedEternity:()=>rne,startDilatedEternityRequest:()=>sne,startEternityChallenge:()=>DB,startManualReality:()=>Su,staticGlyphWeights:()=>Qte,strengthToRarity:()=>vte,tachyonGainMultiplier:()=>dne,timeDimensionCommonMultiplier:()=>Pie,toggleAllInfDims:()=>kie,toggleAllTimeDims:()=>Mie,totalIPMult:()=>fae,totalReplicantiSpeedMult:()=>Fae,tryCompleteInfinityChallenges:()=>Rae,tryImportSecret:()=>tte,tryUnlockTimeDimensions:()=>Oie,ui:()=>oK,updateMultiversalDimensionCosts:()=>Yie,updateNormalAndInfinityChallenges:()=>Aae,updateTimeDimensionCosts:()=>Gie,validateLine:()=>$n});i(8674),i(7727),i(8010);var d=i(4631),h=i.n(d),m=i(4141),p=i(144);i(790),i(1707),i(3256),i(17),i(2801);window.CodeMirror=h(),window.Decimal=m.Z,window.Vue=p.Z;i(7729),i(3414);const y="true"==={NODE_ENV:"production",BASE_URL:""}.VUE_APP_DEV,f="true"==={NODE_ENV:"production",BASE_URL:""}.VUE_APP_STEAM,g="MacIntel"===window.navigator.platform;window.NotImplementedError=class extends Error{constructor(){super("The method is not implemented."),this.name="NotImplementedError"}},window.GlobalErrorHandler={handled:!1,cleanStart:!1,onerror(e){if(!this.handled){if(this.handled=!0,!this.cleanStart)return document.getElementById("loading").style.display="none",void requestAnimationFrame((()=>this.crash(e)));this.stopGame(),this.crash(e)}},stopGame(){function e(e,t){let i=e((()=>{}),9999);while(i--)t(i)}GameKeyboard.disable(),GameIntervals.stop(),e(setInterval,clearInterval),e(setTimeout,clearTimeout),e(requestAnimationFrame,cancelAnimationFrame)},crash(e){void 0!==window.GameUI&&GameUI.initialized&&Modal.message.show(`${e}
Check the console for more details`,{},3)}},window.onerror=(e,t)=>{t.endsWith(".js")&&GlobalErrorHandler.onerror(e)};i(9357),i(8018);function v(e){return Object.keys(e).forEach((t=>{const i=e[t];"object"===typeof i&&v(i)})),Object.freeze(e)}window.PRESTIGE_EVENT={DIMENSION_BOOST:0,ANTIMATTER_GALAXY:1,INFINITY:2,ETERNITY:3,REALITY:4,MENDING:5};const b=v({DM1:new Decimal("-1"),D0:new Decimal("0"),D0_01:new Decimal("0.01"),D0_1:new Decimal("0.1"),D0_4:new Decimal("0.4"),D0_55:new Decimal("0.55"),D0_8446303389034288:new Decimal("0.8446303389034288"),D0_95:new Decimal("0.95"),D0_965:new Decimal("0.965"),D1:new Decimal("1"),D1_0000109:new Decimal("1.0000109"),D1_00038:new Decimal("1.00038"),D1_0004:new Decimal("1.0004"),D1_0025:new Decimal("1.0025"),D1_005:new Decimal("1.005"),D1_007:new Decimal("1.007"),D1_02:new Decimal("1.02"),D1_0285:new Decimal("1.0285"),D1_2:new Decimal("1.2"),D1_3:new Decimal("1.3"),D2:new Decimal("2"),D3:new Decimal("3"),D4:new Decimal("4"),D5:new Decimal("5"),D6_66:new Decimal("6.66"),D15:new Decimal("15"),D16:new Decimal("16"),D11111:new Decimal("11111"),D3E4:new Decimal("30000"),D2E5:new Decimal("2e5"),D2E6:new Decimal("2e6"),D5E7:new Decimal("5e7"),D2E9:new Decimal("2e9"),D2E25:new Decimal("2e25"),D2E22222:new Decimal("2e22222"),D9_99999E999:new Decimal("9.99999e999"),D9_9999E9999:new Decimal("9.9999e9999"),C1D1_1245:Decimal.div(1,1.1245),D2P30D0_61:Decimal.pow(2,30/.61),C2P30:Decimal.pow(2,30),C2P1024:Decimal.pow(2,1024),C10P16000D3:Decimal.pow(10,16e3/3),E1:new Decimal("1e1"),E2:new Decimal("1e2"),E3:new Decimal("1e3"),E5:new Decimal("1e5"),E6:new Decimal("1e6"),E8:new Decimal("1e8"),E9:new Decimal("1e9"),E10:new Decimal("1e10"),E12:new Decimal("1e12"),E15:new Decimal("1e15"),E20:new Decimal("1e20"),E25:new Decimal("1e25"),E29:new Decimal("1e29"),E30:new Decimal("1e30"),E31:new Decimal("1e31"),E36:new Decimal("1e36"),E40:new Decimal("1e40"),E43:new Decimal("1e43"),E45:new Decimal("1e45"),E50:new Decimal("1e50"),E55:new Decimal("1e55"),E58:new Decimal("1e58"),E60:new Decimal("1e60"),E63:new Decimal("1e63"),E70:new Decimal("1e70"),E75:new Decimal("1e75"),E80:new Decimal("1e80"),E90:new Decimal("1e90"),E100:new Decimal("1e100"),E140:new Decimal("1e140"),E150:new Decimal("1e150"),E160:new Decimal("1e160"),E170:new Decimal("1e170"),E175:new Decimal("1e175"),E200:new Decimal("1e200"),E250:new Decimal("1e250"),E260:new Decimal("1e260"),E280:new Decimal("1e280"),E300:new Decimal("1e300"),E308:new Decimal("1e308"),E309:new Decimal("1e309"),E310:new Decimal("1e310"),E315:new Decimal("1e315"),E320:new Decimal("1e320"),E333:new Decimal("1e333"),E349:new Decimal("1e349"),E400:new Decimal("1e400"),E450:new Decimal("1e450"),E500:new Decimal("1e500"),E530:new Decimal("1e530"),E550:new Decimal("1e550"),E600:new Decimal("1e600"),E616:new Decimal("1e616"),E650:new Decimal("1e650"),E750:new Decimal("1e750"),E850:new Decimal("1e850"),E900:new Decimal("1e900"),E925:new Decimal("1e925"),E975:new Decimal("1e975"),E1000:new Decimal("1e1000"),E1100:new Decimal("1e1100"),E1200:new Decimal("1e1200"),E1300:new Decimal("1e1300"),E1400:new Decimal("1e1400"),E1500:new Decimal("1e1500"),E1750:new Decimal("1e1750"),E1800:new Decimal("1e1800"),E1900:new Decimal("1e1900"),E2000:new Decimal("1e2000"),E2350:new Decimal("1e2350"),E2400:new Decimal("1e2400"),E2500:new Decimal("1e2500"),E2650:new Decimal("1e2650"),E2700:new Decimal("1e2700"),E2750:new Decimal("1e2750"),E2800:new Decimal("1e2800"),E2900:new Decimal("1e2900"),E3000:new Decimal("1e3000"),E3200:new Decimal("1e3200"),E3350:new Decimal("1e3350"),E4000:new Decimal("1e4000"),E5000:new Decimal("1e5000"),E6000:new Decimal("1e6000"),E8000:new Decimal("1e8000"),E9000:new Decimal("1e9000"),E10000:new Decimal("1e10000"),E10500:new Decimal("1e10500"),E11000:new Decimal("1e11000"),E11111:new Decimal("1e11111"),E11200:new Decimal("1e11200"),E12000:new Decimal("1e12000"),E13000:new Decimal("1e13000"),E14000:new Decimal("1e14000"),E16500:new Decimal("1e16500"),E17500:new Decimal("1e17500"),E18000:new Decimal("1e18000"),E20000:new Decimal("1e20000"),E22500:new Decimal("1e22500"),E23000:new Decimal("1e23000"),E27000:new Decimal("1e27000"),E28000:new Decimal("1e28000"),E30000:new Decimal("1e30000"),E45000:new Decimal("1e45000"),E54000:new Decimal("1e54000"),E60000:new Decimal("1e60000"),E100000:new Decimal("1e100000"),E110000:new Decimal("1e110000"),E164000:new Decimal("1e164000"),E200000:new Decimal("1e200000"),E201600:new Decimal("1e201600"),E208000:new Decimal("1e208000"),E210000:new Decimal("1e210000"),E300000:new Decimal("1e300000"),E320000:new Decimal("1e320000"),E500000:new Decimal("1e500000"),E1E6:new Decimal("1e1000000"),E3E6:new Decimal("1e3000000"),E6E6:new Decimal("1e6000000"),E1E7:new Decimal("1e10000000"),E2E7:new Decimal("1e20000000"),E4E7:new Decimal("1e40000000"),E6E7:new Decimal("1e60000000"),E1E8:new Decimal("1e100000000"),E1_5E12:new Decimal("1e1500000000000"),E1E15:new Decimal("1e1000000000000000"),END:new Decimal("1e9000000000000000"),E1E9:new Decimal("1e1000000000"),E1E10:new Decimal("1e10000000000"),WARP_LIMIT:new Decimal("1e10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")});window.AUTOBUYER_MODE={BUY_SINGLE:1,BUY_10:10,BUY_MAX:100},window.AUTO_CRUNCH_MODE={AMOUNT:0,TIME:1,X_HIGHEST:2},window.AUTO_ETERNITY_MODE={AMOUNT:0,TIME:1,X_HIGHEST:2},window.AUTO_REALITY_MODE={RM:0,GLYPH:1,EITHER:2,BOTH:3,TIME:4,RELIC_SHARD:5},window.AUTO_MEND_MODE={AMOUNT:0,TIME:1},window.RECENT_PRESTIGE_RESOURCE={ABSOLUTE_GAIN:0,RATE:1,CURRENCY:2,PRESTIGE_COUNT:3},window.TS171_MULTIPLIER=1.25,window.TS309_MULTIPLIER=1.2,window.GLYPH_MIME_TYPE="text/x-ivark-glyph",window.GlyphRarities=[{minStrength:3.75,name:"Divine",darkColor:"#ca7cee",lightColor:"#deaaf9",darkHighContrast:"#ff60ff",lightHighContrast:"#600060"},{minStrength:3.5,name:"Celestial",darkColor:"#3d3dec",lightColor:"#9696ff",darkHighContrast:"#ffff00",lightHighContrast:"#c0c000"},{minStrength:3.25,name:"Transcendent",darkColor:"#03ffec",lightColor:"#00c3c3",darkHighContrast:"#00ffff",lightHighContrast:"#00c0c0"},{minStrength:3,name:"Mythical",darkColor:"#d50000",lightColor:"#d50000",darkHighContrast:"#c00000",lightHighContrast:"#ff0000"},{minStrength:2.75,name:"Legendary",darkColor:"#ff9800",lightColor:"#d68100",darkHighContrast:"#ff8000",lightHighContrast:"#ff8000"},{minStrength:2.5,name:"Epic",darkColor:"#9c27b0",lightColor:"#9c27b0",darkHighContrast:"#ff00ff",lightHighContrast:"#ff00ff"},{minStrength:2,name:"Rare",darkColor:"#5096f3",lightColor:"#0d40ff",darkHighContrast:"#6060ff",lightHighContrast:"#0000ff"},{minStrength:1.5,name:"Uncommon",darkColor:"#43a047",lightColor:"#1e8622",darkHighContrast:"#00ff00",lightHighContrast:"#00b000"},{minStrength:1,name:"Common",darkColor:"#ffffff",lightColor:"#000000",darkHighContrast:"#ffffff",lightHighContrast:"#000000"}],window.GLYPH_BG_SETTING={AUTO:0,LIGHT:1,DARK:2},window.GLYPH_TYPES=["power","infinity","replication","time","dilation","effarig","reality","cursed","companion","amalgam"],window.FUNCTIONAL_GLYPH_TYPES=["power","infinity","replication","time","dilation","effarig","reality","cursed"],window.BASIC_GLYPH_TYPES=["power","infinity","replication","time","dilation"],window.ALCHEMY_BASIC_GLYPH_TYPES=["power","infinity","replication","time","dilation","effarig"],window.GLYPH_SYMBOLS={power:"Ω",infinity:"∞",replication:"Ξ",time:"Δ",dilation:"Ψ",effarig:"Ϙ",reality:"Ϟ",cursed:"⸸",companion:"♥",amalgam:"?"},window.CANCER_GLYPH_SYMBOLS={power:"⚡",infinity:"8",replication:"⚤",time:"🕟",dilation:"☎",effarig:"🦒",reality:"⛧",cursed:"☠",companion:"³",amalgam:"?"},window.ALTERATION_TYPE={ADDITION:1,EMPOWER:2,BOOST:3},window.BLACK_HOLE_PAUSE_MODE={NO_PAUSE:0,PAUSE_BEFORE_BH1:1,PAUSE_BEFORE_BH2:2},window.EXPO_BLACK_HOLE_PAUSE_MODE={NO_PAUSE:0,PAUSE_BEFORE_BH1:1,PAUSE_BEFORE_BH2:2},window.GLYPH_SIDEBAR_MODE={INVENTORY_MANAGEMENT:0,FILTER_SETTINGS:1,SAVED_SETS:2,SACRIFICE_TYPE:3},window.AUTO_SORT_MODE={NONE:0,LEVEL:1,POWER:2,EFFECT:3,SCORE:4},window.AUTO_GLYPH_SCORE={LOWEST_SACRIFICE:0,EFFECT_COUNT:1,RARITY_THRESHOLD:2,SPECIFIED_EFFECT:3,EFFECT_SCORE:4,LOWEST_ALCHEMY:5,ALCHEMY_VALUE:6},window.AUTO_GLYPH_REJECT={SACRIFICE:0,REFINE:1,REFINE_TO_CAP:2},window.TIME_STUDY_PATH={NONE:0,ANTIMATTER_DIM:1,INFINITY_DIM:2,TIME_DIM:3,ACTIVE:4,PASSIVE:5,IDLE:6,LIGHT:7,DARK:8},window.TIME_STUDY_TYPE={NORMAL:0,ETERNITY_CHALLENGE:1,DILATION:2,TRIAD:3,MYRIAD:4,KOHLER_EXCLUSIVE:5},window.TS_REQUIREMENT_TYPE={AT_LEAST_ONE:0,ALL:1,DIMENSION_PATH:2},window.ALCHEMY_RESOURCE={POWER:0,INFINITY:1,TIME:2,REPLICATION:3,DILATION:4,CARDINALITY:5,ETERNITY:6,DIMENSIONALITY:7,INFLATION:8,ALTERNATION:9,EFFARIG:10,SYNERGISM:11,MOMENTUM:12,DECOHERENCE:13,EXPONENTIAL:14,FORCE:15,UNCOUNTABILITY:16,BOUNDLESS:17,MULTIVERSAL:18,UNPREDICTABILITY:19,REALITY:20},window.SINGULARITY_MILESTONE_RESOURCE={SINGULARITIES:0,CONDENSE_COUNT:1,MANUAL_TIME:2,AUTO_TIME:3},window.SINGULARITY_MILESTONE_SORT={SINGULARITIES_TO_NEXT:0,CURRENT_COMPLETIONS:1,PERCENT_COMPLETIONS:2,FINAL_COMPLETION:3,MOST_RECENT:4},window.COMPLETED_MILESTONES={FIRST:0,LAST:1,IGNORED:2},window.SORT_ORDER={ASCENDING:0,DESCENDING:1},window.PROGRESS_STAGE={PRE_INFINITY:1,EARLY_INFINITY:2,BREAK_INFINITY:3,REPLICANTI:4,EARLY_ETERNITY:5,ETERNITY_CHALLENGES:6,EARLY_DILATION:7,LATE_ETERNITY:8,EARLY_REALITY:9,TERESA:10,EFFARIG:11,ENSLAVED:12,V:13,RA:14,IMAGINARY_MACHINES:15,LAITELA:16,PELLE:17,MENDING:18},window.STD_BACKEND_URL="https://antimatterdimensionspayments.ew.r.appspot.com",window.SPEEDRUN_SEED_STATE={UNKNOWN:0,FIXED:1,RANDOM:2,PLAYER:3},window.V_FLIP={NORMAL:0,HARD:1,SUPER:2},p.Z.prototype.V_FLIP=window.V_FLIP;i(3948);var E=i(6938);window.LOG10_MAX_VALUE=Math.log10(Number.MAX_VALUE),window.LN_SQRT_2_PI=.5*Math.log(2*Math.PI),window.LOG10_2=Math.log10(2),window.LOG10_E=Math.log10(Math.E),Math.PI_2=2*Math.PI,window.bulkBuyBinarySearch=function(e,t,i){const a=t.costFunction,n=void 0===t.firstCost?a(i):t.firstCost,s=void 0===t.cumulative||t.cumulative;if(e.lt(n))return null;let r,o=1;do{o*=2,r=a(i+o-1)}while(e.gte(r));if(2===o)return{quantity:1,purchasePrice:n};let l=o/2;if(o>Number.MAX_SAFE_INTEGER)throw new Error("Overflow in binary search");while(o-l>1){const t=Math.floor((l+o)/2);e.gte(a(i+t-1))?l=t:o=t}const c=a(i+l-1);if(!s)return{quantity:l,purchasePrice:c};let u=b.D0,d=0;for(let m=l-1;m>0;--m){const e=u.plus(a(i+m-1));if(e.eq(u))break;if(u=e,++d>1e3)throw new Error("unexpected long loop (buggy cost function?)")}let h=c.plus(u);return e.lt(h)&&(--l,h=u),{quantity:l,purchasePrice:h}},window.LinearMultiplierScaling=class{constructor(e,t){this.baseRatio=e,this.growth=t}scale(e){return this.baseRatio*=e,this.growth*=e,this}shift(e){return this.baseRatio+=this.growth*e,this}logTotalMultiplierAfterPurchases(e){if(0===e)return 0;const t=this.growth/this.baseRatio,i=t*e;return(1/t+e-.5)*Math.log1p(i)+e*(Math.log(this.baseRatio)-1)-t*i/(12*(1+i))}purchasesForLogTotalMultiplier(e){if(this.baseRatio<1.01)throw new Error("Ratio is too small for good calculations");const t=Math.log(this.baseRatio),i=this.growth/this.baseRatio,a=a=>{const n=i*a,s=Math.log1p(n),r=.5*i/(1+n),o=(1/i+a-.5)*s+a*(t-1)-(e+r*n/6),l=s+t-r*(r/3+1),c=r*(2+r*(2+r/3)),u=o/l;return a-2*u/(1+Math.sqrt(1-2*u*c/l))},n=e/t;if(i*n<.01)return a(a(n));const s=this.growth*e+this.baseRatio*(t-1),r=.183709519164226,o=.693791942633232,l=.049293492810849,c=Math.sqrt(2*(s+1)),u=c*(1+r*c)/(1+o*Math.log1p(l*c)),d=(1+u+s)/Math.log1p(u),h=(d-this.baseRatio)/this.growth;return a(a(h))}logTotalMultiplierAfterPurchasesBaseline(e){let t=0;const i=this.growth/this.baseRatio;for(let a=0;a0?e*t+i+.5*a*(a+1)*this._logCostScale:e*t+i;return b.E1.pow(n)}getMaxBought(e,t,i){const a=t.div(i),n=a.log10(),s=this._logBaseIncrease,r=this._logBaseCost;let o,l=Math.floor(1+(n-r)/s);if(l>this._purchasesBeforeScaling){const e=this._precalcDiscriminant+8*this._logCostScale*n;if(e<0)return null;l=Math.floor(this._precalcCenter+Math.sqrt(e)/(2*this._logCostScale))}if(l<=e)return null;if(l<=this._purchasesBeforeScaling+1)o=(l-1)*s+r;else{const e=l-this._purchasesBeforeScaling;o=(l-1)*s+r+.5*e*(e-1)*this._logCostScale}return{quantity:l-e,logPrice:o+Math.log10(i)}}getContinuumValue(e,t){const i=e.div(t),a=i.log10(),n=this._logBaseIncrease,s=this._logBaseCost;let r=1+(a-s)/n;if(r>this._purchasesBeforeScaling){const e=this._precalcDiscriminant+8*this._logCostScale*a;if(e<0)return 0;r=this._precalcCenter+Math.sqrt(e)/(2*this._logCostScale)}return Math.clampMin(r,0)}static log10(e){return e instanceof Decimal?e.log10():Math.log10(e)}},window.productLog=function(e){let t=e,i=0;do{i=t,t-=1-(1+e*Math.exp(-t))/(1+t)}while(Math.abs(t-i)>1e-6*t);return t},window.permutationIndex=function(e,t){let i=1;for(let o=1;o<=e;o++)i*=o;let a=t%i,n=i/e;const s=Array.range(0,e),r=[];while(s.length>0){const e=Math.floor(a/n),t=a%n;r.push(s.splice(e,1)[0]),a=t,n/=s.length}return r},window.getHybridCostScaling=function(e,t,i,a,n,s,r,o){const l=getCostWithLinearCostScaling(e,t,i,a,n);if(Number.isFinite(l))return new Decimal(l);const c=e-findFirstInfiniteCostPurchase(t,i,a,n),u=new ExponentialCostScaling({baseCost:s,baseIncrease:r,costScale:o,scalingCostThreshold:Number.MAX_VALUE});return u.calculateCost(c)},window.logFactorial=function(){const e=Array.range(1,11).map(Math.log),t=[0];for(const i of e)t.push(t[t.length-1]+i);return e=>"number"!==typeof e||e<0?NaN:e>>17,e^=e<<5,e},window.fastRandom=function(){let e=Math.floor(Date.now())%Math.pow(2,32);const t=1/Math.pow(2,32);return()=>(e=xorshift32Update(e),e*t+.5)}(),window.normalDistribution=function(){let e=!1,t=0;return(i,a)=>{if("number"!==typeof i||"number"!==typeof a)return NaN;if(e)return e=!1,i+a*t;let n,s,r;do{s=2*fastRandom()-1,r=2*fastRandom()-1,n=s*s+r*r}while(n>=1||0===n);const o=Math.sqrt(-2*Math.log(n)/n);return e=!0,t=r*o,i+a*s*o}}(),window.binomialGeneratorFC=function(){const e=e=>(e+.5)*Math.log1p(e)-.08106146679532726-e,t=Array.range(0,20).map((t=>logFactorial(t)-e(t)));return e=>{if("number"!==typeof e||e<0)return NaN;if(er){if(++o,n*=a/o-i,r+n===r)break;r+=n}return o},window.binomialDistribution=function e(t,i){if(0===i)return 0;if(t instanceof Decimal){if(t.e<308){const a="number"===typeof i?i:i.toNumber();return new Decimal(e(t.toNumber(),a))}const a=t.times(i);return a.e>32?a:new Decimal(poissonDistribution(t.times(i)))}const a=t*i;if(a<15)return binomialDistributionSmallExpected(t,i);if(i>.5)return t-e(t,1-i);if(a>1e32)return a;const n=a*(1-i);return n>1e4?Math.round(normalDistribution(a,Math.sqrt(n))):binomialDistributionBTRD(t,i)},window.poissonDistribution=function e(t){return 0===t?0:t instanceof Decimal?t.e>32?t:new Decimal(e(t.toNumber())):t>1e32?t:t>1e4?poissonDistributionViaNormal(t):t<20?poissonDistributionSmallExpected(t):poissonDistributionPTRD(t)},window.poissonDistributionViaNormal=function(e){const t=normalDistribution(Math.sqrt(e),.5);return Math.floor(t*t)},window.poissonDistributionSmallExpected=function(e){let t=Math.exp(-e),i=t;const a=fastRandom();let n=0;while(a>i){if(++n,t*=e/n,i+t===i)break;i+=t}return n},window.binomialDistributionBTRD=function(e,t){const i=e*t,a=i*(1-t),n=Math.sqrt(a),s=Math.floor(i+t),r=t/(1-t),o=(e+1)*r,l=1.15+2.53*n,c=.0248*l-.0873+.01*t,u=i+.5,d=(2.83+5.1/l)*n,h=.43,m=.92-4.2/l;while(1){let t,i=fastRandom();if(i<=2*h*m){const e=i/m-h;return Math.floor((2*c/(.5-Math.abs(e))+l)*e+u)}if(i>=m)t=fastRandom()-.5;else{const e=i/m-.93;i=fastRandom()*m,t=(e>0?.5:-.5)-e}const n=.5-Math.abs(t),p=Math.floor((2*c/n+l)*t+u);if(p<0||p>e)continue;i*=d/(c/(n*n)+l);const y=Math.abs(p-s);if(y<=40){let e=1;if(sp)for(let t=p+1;t<=s;++t)i*=o/t-r;if(i<=e)return p;continue}const f=y/a*(((y/3+.625)*y+1/6)/a+.5),g=-y*y/(2*a),v=Math.log(i);if(vg+f)continue;const b=e-s+1,E=e-p+1,T=(s+.5)*Math.log((s+1)/(r*b))+binomialGeneratorFC(s)+binomialGeneratorFC(e-s),w=(e+1)*Math.log(b/E)+(p+.5)*Math.log(E*r/(p+1))-binomialGeneratorFC(p)-binomialGeneratorFC(e-p);if(v<=T+w)return p}},window.poissonDistributionPTRD=function(e){const t=Math.sqrt(e),i=.931+2.53*t,a=.02483*i-.059,n=1.1239+1.328/(i-3.4),s=.9277-3.6224/(i-2);while(1){let r,o=Math.random();if(o<.86*s){const t=o/s-.43;return Math.floor((2*a/(.5-Math.abs(t))+i)*t+e+.445)}if(o>=s)r=fastRandom()-.5;else{const e=o/s-.93;r=(e>0?.5:-.5)-e,o=fastRandom()*s}const l=.5-Math.abs(r);if(l<.013&&l=10){const i=(c+.5)*Math.log(e*u)-e-LN_SQRT_2_PI+c-(1/12-u*u/360)*u;if(Math.log(o*t)<=i)return c}else if(Math.log(o)<=c*Math.log(e)-e-logFactorial(c))return c}},window.depressedCubicRealRoots=function(e,t,i){if(0===e)return 0===t?[]:[-i/t];if(t/=e,i/=e,0===i){if(0===t)return[0];if(t>0)return[];const e=Math.sqrt(-t);return[e,-e]}if(0===t)return[Math.cbrt(-i)];let a=.25*i*i+t*t*t/27;if(a>=0)return a=Math.sqrt(a),[Math.cbrt(-.5*i+a)+Math.cbrt(-.5*i-a)];const n=2*Math.sqrt(-t/3),s=Math.acos(3*i/(t*n))/3;return[n*Math.cos(s),n*Math.cos(s-2*Math.PI/3),n*Math.cos(s-4*Math.PI/3)]},window.quadraticRealRoots=function(e,t,i){if(0===e)return 0===t?[]:[-i/t];if(0===t){const t=i/e;return t>0?[]:[Math.sqrt(-t),-Math.sqrt(-t)]}const a=t*t-4*e*i;if(a<0)return[];if(0===a)return[-t/(2*e)];const n=-t-Math.sign(t)*Math.sqrt(a);return[n/(2*e),2*i/n]},window.cubicRealRoots=function(e,t,i,a){if(0===e)return quadraticRealRoots(t,i,a);if(0===t)return depressedCubicRealRoots(e,i,a);const n=t/(3*e),s=n*n,r=i/e,o=r-3*s,l=2*n*s-n*r+a/e,c=depressedCubicRealRoots(1,o,l);return c.map((e=>e-n))},window.testCRR=function(e,t,i,a){const n=cubicRealRoots(e,t,i,a);console.log(n),console.log(n.map((n=>a+n*(i+n*(t+n*e)))))},window.depressedQuarticRealRoots=function(e,t,i,a){if(0===e)return quadraticRealRoots(t,i,a);if(0===a){const a=depressedCubicRealRoots(e,t,i);return a.includes(0)||a.push(0),a}if(0===i){const i=quadraticRealRoots(e,t,a),n=[];for(const e of i)e<0||(0===e?n.push(0):n.push(Math.sqrt(e),-Math.sqrt(e)));return n}t/=e,i/=e,a/=e;const n=cubicRealRoots(8,8*t,2*t*t-8*a,-i*i),s=n.max();if(s<=0)return[];const r=Math.sqrt(2*s),o=2*i/r,l=-(2*t+2*s+o),c=[];l>0?c.push(.5*(r+Math.sqrt(l)),.5*(r-Math.sqrt(l))):0===l&&c.push(.5*r);const u=-(2*t+2*s-o);return u>0?c.push(.5*(-r+Math.sqrt(u)),.5*(-r-Math.sqrt(u))):0===u&&c.push(-.5*r),c},window.testDQRR=function(e,t,i,a){const n=depressedQuarticRealRoots(e,t,i,a);console.log(n),console.log(n.map((n=>a+n*(i+n*(t+n*n*e)))))},window.solveSimpleBiquadratic=function(e,t,i,a,n,s){const r=[];if(0===e){if(0===t||0===n)return[];const e=-i/t;return 0===a?[{x:-s/n,y:e}]:[{x:(-s-a*e*e)/n,y:e}]}if(0===a){if(0===t||0===n)return[];const a=-s/n;return[{x:a,y:(-i-e*a*a)/t}]}if(0===t){const t=quadraticRealRoots(e,0,i);for(const e of t){const t=s+n*e,i=quadraticRealRoots(a,0,t);for(const a of i)r.push({x:e,y:a})}return r}if(0===n){const n=quadraticRealRoots(a,0,s);for(const a of n){const n=i+t*a,s=quadraticRealRoots(e,0,n);for(const e of s)r.push({x:e,y:a})}return r}const o=e/t,l=i/t,c=depressedQuarticRealRoots(a*o*o,2*a*o*l,n,s+a*l*l);for(const u of c)r.push({x:u,y:-(o*u*u+l)});return r},window.testSSBQ=function(e,t,i,a,n,s){console.log({A:e,B:t,C:i,D:a,E:n,F:s});const r=solveSimpleBiquadratic(e,t,i,a,n,s);for(const o of r){const r=e*o.x*o.x+t*o.y+i,l=a*o.y*o.y+n*o.x+s;console.log(`${o.x} ${o.y} ${r} ${l}`)}},window.AffineTransform=class e{constructor(e=1,t=0,i=0,a=1,n=0,s=0){this.a00=e,this.a01=t,this.a10=i,this.a11=a,this.o0=n,this.o1=s}times(t){if(t instanceof e)return new e(this.a00*t.a00+this.a01*t.a10,this.a00*t.a01+this.a01*t.a11,this.a10*t.a00+this.a11*t.a10,this.a10*t.a01+this.a11*t.a11,this.a00*t.o0+this.a01*t.o1+this.o0,this.a10*t.o0+this.a11*t.o1+this.o1);if(t instanceof Vector)return t.transformedBy(this);throw new Error("unsupported operation")}translated(t,i){return t instanceof Vector?new e(this.a00,this.a01,this.a10,this.a11,this.o0+t.x,this.o1+t.y):new e(this.a00,this.a01,this.a10,this.a11,this.o0+t,this.o1+i)}rotated(t){return e.rotation(t).times(this)}scaled(t){return e.scale(t).times(this)}get withoutTranslation(){return new e(this.a00,this.a01,this.a10,this.a11)}static translation(t,i){return t instanceof Vector?new e(1,0,0,1,t.x,t.y):new e(1,0,0,1,t,i)}static rotation(t){const i=Math.cos(t),a=Math.sin(t);return new e(i,-a,a,i)}static scale(t){return new e(t,0,0,t)}static identity(){return new e}},window.Vector=class e{constructor(e,t){this.x=e,this.y=t}get length(){return Math.sqrt(this.x*this.x+this.y*this.y)}plus(t){return new e(this.x+t.x,this.y+t.y)}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}minus(t){return new e(this.x-t.x,this.y-t.y)}times(t){return new e(this.x*t,this.y*t)}asTranslate(){return`translate(${this.x}, ${this.y})`}asRotate(){return`rotate(${180/Math.PI*Math.atan2(this.y,this.x)})`}toString(){return`${this.x}, ${this.y}`}round(t){return new e(Math.round(this.x*t)/t,Math.round(this.y*t)/t)}get copy(){return new e(this.x,this.y)}matrixTransform(t,i,a,n){return new e(t*this.x+i*this.y,a*this.x+n*this.y)}transformedBy(t){return new e(t.a00*this.x+t.a01*this.y+t.o0,t.a10*this.x+t.a11*this.y+t.o1)}get negative(){return new e(-this.x,-this.y)}get normalized(){return this.times(1/this.length)}get right90(){return new e(this.y,-this.x)}get left90(){return new e(-this.y,this.x)}get angle(){return Math.atan2(this.y,this.x)}static horiz(t){return new e(t,0)}static unitFromRadians(t){return new e(Math.cos(t),Math.sin(t))}static unitFromDegrees(t){return e.unitFromRadians(t*Math.PI/180)}},window.Curve=class{position(){throw new NotImplementedError}derivative(){throw new NotImplementedError}secondDerivative(){throw new NotImplementedError}curvature(e){const t=this.derivative(e),i=this.secondDerivative(e),a=t.length;return t.cross(i)/(a*a*a)}shapeAt(e){const t=this.derivative(e);return{t:e,position:this.position(e),derivative:t,direction:t.normalized,curvature:this.curvature(e)}}minimumDistanceTo(e,t,i){let a=.5*(t+i);const n=Math.max(Math.abs(i),Math.abs(t))*Number.EPSILON*16;for(let s=0;;++s){const r=this.position(a),o=this.derivative(a),l=this.secondDerivative(a),c=r.minus(e),u=c.length,d=2*c.dot(o);d>0?i=a:t=a;const h=2*(c.dot(l)+o.dot(o)),m=h<0?-u/d:-d/h;if(Math.abs(m)=16)return u;a=Math.clamp(a+m,t,i)}}},window.LinearPath=class e extends Curve{constructor(e,t){super(),this.p0=e.copy,this.p1=t.copy}position(e){return this.p0.times(1-e).plus(this.p1.times(e))}derivative(){return this.p1.minus(this.p0)}secondDerivative(){return new Vector(0,0)}curvature(e){return 0}trimStart(t){const i=this.p1.minus(this.p0).normalized;return new e(this.p0.plus(i.times(t)),this.p1)}trimEnd(t){const i=this.p1.minus(this.p0).normalized;return new e(this.p0,this.p1.minus(i.times(t)))}transformed(t){return new e(this.p0.transformedBy(t),this.p1.transformedBy(t))}get relativeSVG(){const e=this.p1.minus(this.p0);return`l ${e.x} ${e.y}\n`}createOffsetLine(t,i=0,a=1){const n=this.p1.minus(this.p0).normalized.right90.times(t);return new e(this.position(i).plus(n),this.position(a).plus(n))}static connectCircles(t,i,a,n){const s=a.minus(t).normalized;return new e(t.plus(s.times(i)),a.minus(s.times(n)))}};class T extends Curve{constructor(e,t,i,a){super(),this.p0=e.copy,this.p1=t.copy,this.p2=i.copy,this.p3=a.copy}position(e){const t=(1-e)*(1-e),i=e*e;return this.p0.times((1-e)*t).plus(this.p1.times(3*e*t)).plus(this.p2.times(3*i*(1-e))).plus(this.p3.times(i*e))}derivative(e){return this.p1.minus(this.p0).times(3*(1-e)*(1-e)).plus(this.p2.minus(this.p1).times(6*e*(1-e))).plus(this.p3.minus(this.p2).times(3*e*e))}secondDerivative(e){return this.p2.minus(this.p1.times(2)).plus(this.p0).times(6*(1-e)).plus(this.p3.minus(this.p2.times(2)).plus(this.p1).times(6*e))}transformed(e){return new T(this.p0.transformedBy(e),this.p1.transformedBy(e),this.p2.transformedBy(e),this.p3.transformedBy(e))}get relativeSVG(){const e=this.p1.minus(this.p0),t=this.p2.minus(this.p0),i=this.p3.minus(this.p0);return`c ${e.x} ${e.y} ${t.x} ${t.y} ${i.x} ${i.y}\n`}get reverse(){return new T(this.p3,this.p2,this.p1,this.p0)}static fitCurveSection(e,t){const i=t.position.minus(e.position),a=e.t>t.t,n=e.direction.cross(t.direction);let s=solveSimpleBiquadratic(1.5*e.curvature,n,-e.direction.cross(i),1.5*t.curvature,n,t.direction.cross(i));return s=a?s.filter((e=>e.x<=0&&e.y<=0)):s.filter((e=>e.x>=0&&e.y>=0)),0===s.length?null:new T(e.position,e.position.plus(e.direction.times(s[0].x)),t.position.minus(t.direction.times(s[0].y)),t.position)}}window.OffsetCurve=class extends Curve{constructor(e,t){super(),this.base=e,this.offset=t}position(e){const t=this.base.position(e),i=this.base.derivative(e);return t.plus(i.normalized.right90.times(this.offset))}derivative(e){return this.base.derivative(e)}curvature(e){const t=this.base.curvature(e);return 1/(1/t+this.offset)}shapeAt(e){const t=this.base.shapeAt(e);return{t:t.t,position:t.position.plus(t.direction.right90.times(this.offset)),derivative:t.derivative,direction:t.direction,curvature:t.curvature/(1+this.offset*t.curvature)}}},window.LogarithmicSpiral=class e extends Curve{constructor(e,t,i){super(),this.center=e,this.scale=t,this.rate=i}position(e){return Vector.unitFromRadians(e).times(this.scale*Math.exp(this.rate*e)).plus(this.center)}derivative(e){const t=Vector.unitFromRadians(e),i=this.scale*Math.exp(this.rate*e);return t.times(i*this.rate).plus(t.left90.times(i))}secondDerivative(e){const t=Vector.unitFromRadians(e),i=this.scale*Math.exp(this.rate*e);return t.times(i*(this.rate*this.rate-1)).plus(t.left90.times(2*i*this.rate))}shapeAt(e){const t=Vector.unitFromRadians(e),i=this.scale*Math.exp(this.rate*e),a=t.times(i),n=a.times(this.rate).plus(a.left90);return{t:e,position:a.plus(this.center),derivative:n,direction:n.normalized,curvature:1/(Math.abs(i)*Math.sqrt(1+this.rate*this.rate))}}angleFromRadius(e){return Math.log(e/this.scale)/this.rate}static fromPolarEndpoints(t,i,a,n,s){const r=Math.log(s/a)/(n-i);return new e(t,a/Math.exp(r*i),r)}},window.PiecewisePath=class e{constructor(e){this.path=e||[]}push(e){this.path.push(e)}transformedBy(t){return new e(this.path.map((e=>e.transformed(t))))}toSVG(e){const t=this.path[0].position(0),i=[`${e} ${t.x} ${t.y}\n`];for(const a of this.path)i.push(a.relativeSVG);return i.join("")}static cubicBezierFitToCurveSection(t,i,a,n=1,s=1){const r=new e,o=t.shapeAt(i),l=t.shapeAt(a);function c(e,i,a=8){const n=t.shapeAt(.5*(e.t+i.t));return u(e,n,a-1)&&u(n,i,a-1)}function u(e,i,a=8){const s=T.fitCurveSection(e,i);if(null===s){if(a<=0)throw new Error("coulnd't decompose curve");return c(e,i,a)}const o=.5*(e.t+i.t),l=s.minimumDistanceTo(t.position(o),0,1);return l>n?c(e,i,a):(r.push(s),!0)}return s>1?c(o,l):u(o,l),r}},window.ExponentialMovingAverage=class{constructor(e=.02,t=5,i=3,a=.4){this.alpha=e,this.maxOutliers=t,this.highOutlierThreshold=i,this.lowOutlierThreshold=a,this.outliers=0,this._average=void 0}get average(){return void 0===this._average?0:this._average}addValue(e){if(void 0===this._average)this._average=e;else{this._average+=this.alpha*(e-this._average);const t=Math.abs(e),i=Math.abs(this._average),a=t>i*this.highOutlierThreshold,n=t=this.maxOutliers&&(this._average=e,this.outliers=0)):this.outliers=0}}};i(1844),i(4009);class w{constructor(e,t,i){if(void 0===e||this.isCustomEffect)return;const a=e=>"function"===typeof e,n=e=>"number"===typeof e,s=e=>e instanceof Decimal,r=e=>n(e)||s(e);if(!a(e)&&!r(e))throw new Error("Unknown effect value type.");const o=()=>({configurable:!1}),l=(e,t)=>{if(r(t))e.writable=!1,e.value=t;else{if(!a(t))throw new Error("Unknown getter type.");e.get=t}};if(void 0!==i){if(!a(i))throw new Error("Effect condition must be a function.");const e=o();e.get=i,Object.defineProperty(this,"isEffectConditionSatisfied",e)}const c=o();if(l(c,e),Object.defineProperty(this,"uncappedEffectValue",c),void 0!==t){const e=o();l(e,t),Object.defineProperty(this,"cap",e)}const u=o();l(u,e),r(t)?n(e)?u.get=()=>Math.min(e,this.cap):s(e)?u.get=()=>Decimal.min(e,this.cap):a(e)&&(u.configurable=!0,u.get=()=>{const t=e(),i=o();if(n(t))i.get=()=>Math.min(e(),this.cap);else{if(!s(t))throw new Error("Unknown effect value type.");i.get=()=>Decimal.min(e(),this.cap)}return Object.defineProperty(this,"effectValue",i),i.get()}):a(t)&&(n(e)?u.get=()=>{const t=this.cap;return void 0===t?e:Math.min(e,t)}:s(e)?u.get=()=>{const t=this.cap;return void 0===t?e:Decimal.min(e,t)}:a(e)&&(u.configurable=!0,u.get=()=>{const t=e(),i=o();if(n(t))i.get=()=>{const t=this.cap;return void 0===t?e():Math.min(e(),t)};else{if(!s(t))throw new Error("Unknown effect value type.");i.get=()=>{const t=this.cap;return void 0===t?e():Decimal.min(e(),t)}}return Object.defineProperty(this,"effectValue",i),i.get()})),Object.defineProperty(this,"effectValue",u)}get effectValue(){throw new Error("Effect is undefined.")}get uncappedEffectValue(){throw new Error("Effect is undefined.")}get cap(){throw new Error("Cap is undefined.")}get isEffectConditionSatisfied(){return!0}get isEffectActive(){return!0}get canBeApplied(){return this.isEffectActive&&this.isEffectConditionSatisfied}effectOrDefault(e){return this.canBeApplied?this.effectValue:e}applyEffect(e){this.canBeApplied&&e(this.effectValue)}get isCustomEffect(){return!1}}i(5069);const k={sum(...e){let t=0;return C(e,(e=>{e instanceof Decimal?t+=e.toNumber():t+=e})),t},product(...e){let t=1;return C(e,(e=>{e instanceof Decimal?t*=e.toNumber():t*=e})),t},last(e,...t){let i=e,a=!1;const n=t.filter((e=>null!==e&&void 0!==e)).reverse(),s=e=>{i=e,a=!0};for(const r of n)if(r.applyEffect(s),a)break;return i},max(e,...t){let i=e;return C(t,(e=>i=Math.max(i,e))),i},min(e,...t){let i=e;return C(t,(e=>i=Math.min(i,e))),i}};function C(e,t){for(const i of e)null!==i&&void 0!==i&&i.applyEffect(t)}Decimal.prototype.plusEffectOf=function(e){let t=this;return e.applyEffect((e=>t=t.plus(e))),t},Decimal.prototype.plusEffectsOf=function(...e){let t=this;return C(e,(e=>t=t.plus(e))),t},Decimal.prototype.minusEffectOf=function(e){let t=this;return e.applyEffect((e=>t=t.minus(e))),t},Decimal.prototype.minusEffectsOf=function(...e){let t=this;return C(e,(e=>t=t.minus(e))),t},Decimal.prototype.timesEffectOf=function(e){let t=this;return e.applyEffect((e=>t=t.times(e))),t},Decimal.prototype.timesEffectsOf=function(...e){let t=this.mantissa,i=this.exponent;return C(e,(e=>{const a="number"===typeof e?new Decimal(e):e;t*=a.mantissa,i+=a.exponent})),Decimal.fromMantissaExponent(t,i)},Decimal.prototype.dividedByEffectOf=function(e){let t=this;return e.applyEffect((e=>t=t.dividedBy(e))),t},Decimal.prototype.dividedByEffectsOf=function(...e){let t=this;return C(e,(e=>t=t.dividedBy(e))),t},Decimal.prototype.powEffectOf=function(e){let t=this;return e.applyEffect((e=>t=t.pow(e))),t},Decimal.prototype.powEffectsOf=function(...e){let t=this;return C(e,(e=>t=t.pow(e))),t};class A extends w{constructor(e){if(!e)throw new Error("Must specify config for GameMechanicState");if(super(e.effect,e.cap,e.effectCondition),this._config=e,void 0!==e.effects){this.effects={};for(const t in e.effects){const i=e.effects[t];let a;a="number"===typeof i||"function"===typeof i||i instanceof Decimal?new w(i):new w(i.effect,i.cap,i.effectCondition),Object.defineProperty(a,"isEffectActive",{configurable:!1,get:()=>this.isEffectActive}),this.effects[t]=a}}}get config(){return this._config}get id(){return this.config.id}get id2(){return this.config.id2}registerEvents(e,t){if(void 0!==e)for(const i of e instanceof Array?e:[e])EventHub.logic.on(i,t,this)}static createAccessor(e){const t=mapGameData(e,(e=>new this(e))),i=e=>t[e];return i.index=t,i}}class _ extends A{constructor(e){if(super(e),this.id<0||this.id>31)throw new Error(`Id ${this.id} out of bit range`);if(this.id2<0)throw new Error(`Id ${this.id2} is not a valid array index`)}get bits(){throw new NotImplementedError}set bits(e){throw new NotImplementedError}get modBits(){throw new NotImplementedError}set modBits(e){throw new NotImplementedError}get isUnlocked(){return void 0!=this.id2?Boolean(this.modBits[this.id2]&1<0}get canBeBought(){return this.isAffordable&&this.isAvailableForPurchase&&!this.isCapped}purchase(){return!!this.canBeBought&&(!(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked())&&(this.currency.subtract(this.cost),this.boughtAmount++,this.onPurchased(),GameUI.update(),!0))}onPurchased(){}}i(4916);function I(e){let t=232344573*Math.pow(e%97,4.3);const i=15485863,a=521791;t=t*i%a;for(let n=0;n4.4&&(r=this.blendWords(e[s],e[(s+1)%e.length],(n-4.4)/1.2)),r=this.randomCrossWords(r,.1*Math.pow(n-2.5,4)-.6),t)return r;const o=Math.max(...e.map((e=>e.length))),l=(o-r.length)/2;return" ".repeat(Math.ceil(l))+r+" ".repeat(Math.floor(l))},randomCrossWords(e,t=.7){if(t<=0)return e;const i=e.split("");for(let a=0;a=1?t:e.substring(0,e.length*(1-i))+t.substring(t.length*(1-i),t.length)}};function G(e){const t=`${e}`;let i="";for(let a=0;aEffarigUnlock.reality.isUnlocked||MendingUpgrade(12).isBought,canCustomize:()=>EffarigUnlock.reality.isUnlocked||MendingUpgrade(12).isBought,alchemyResource:ALCHEMY_RESOURCE.EFFARIG,hasRarity:!0},reality:{id:"reality",symbol:GLYPH_SYMBOLS.reality,fixedSymbolColor:!0,isUnlocked:()=>!1,canCustomize:()=>player.reality.glyphs.createdRealityGlyph,alchemyResource:ALCHEMY_RESOURCE.REALITY},cursed:{id:"cursed",symbol:GLYPH_SYMBOLS.cursed,color:"#000000",fixedSymbolColor:!0,isUnlocked:()=>!1,canCustomize:()=>V.isFlipped},companion:{id:"companion",symbol:GLYPH_SYMBOLS.companion,color:"#feaec9",fixedSymbolColor:!0,isUnlocked:()=>!1,canCustomize:()=>!1},amalgam:{id:"amalgam",symbol:GLYPH_SYMBOLS.amalgam,color:"#000000",fixedSymbolColor:!0,isUnlocked:()=>!1,canCustomize:()=>!1,hasRarity:!1}},O={music:{id:"music",symbol:"♫",color:"#FF80AB",isUnlocked:()=>TeresaUnlocks.shop.isUnlocked},blob:{id:"blob",symbol:"",color:"#E4B51A",preventBlur:!0,isUnlocked:()=>Themes.available().map((e=>e.name)).includes("S11"),canCustomize:()=>!1}},L={ANTIMATTER:"ANTIMATTER",INFINITY:"INFINITY",ETERNITY:"ETERNITY",DILATION:"DILATION",REALITY:"REALITY",AUTOMATION:"AUTOMATION",ACHIEVEMENT:"ACHIEVEMENT",MENDING:"MENDING"};const F={firstPerk:{id:0,label:"START",family:L.REALITY,get description(){return`Remove the achievement requirement from the Reality Study\n and allow you to choose from ${formatInt(4)} different Glyphs on Reality.`},effect:4,layoutPosList:[80200,80200,80200,80200,80188,67769]},startAM:{id:10,label:"SAM",family:L.ANTIMATTER,get description(){return`Start every reset with ${format(5e130)} antimatter.`},bumpCurrency:()=>Currency.antimatter.bumpTo(5e130),effect:5e130,layoutPosList:[80162,80600,80199,80600,81391,75745]},startIP1:{id:12,label:"SIP1",family:L.INFINITY,get description(){return`Start every Eternity and Reality with ${format(5e15)} Infinity Points.`},bumpCurrency:()=>Currency.infinityPoints.bumpTo(5e15),effect:5e15,layoutPosList:[78925,80599,79798,80599,82194,91322]},startIP2:{id:13,label:"SIP2",family:L.INFINITY,get description(){return`Start every Eternity and Reality with ${format(5e130)} Infinity Points.`},bumpCurrency:()=>Currency.infinityPoints.bumpTo(5e130),effect:5e130,layoutPosList:[66111,80598,80198,80998,82197,91690]},startEP1:{id:14,label:"SEP1",family:L.ETERNITY,get description(){return`Start every Reality with ${formatInt(10)} Eternity Points.`},bumpCurrency:()=>Currency.eternityPoints.bumpTo(10),effect:10,automatorPoints:5,shortDescription:()=>`Start with ${formatInt(10)} EP`,layoutPosList:[93317,80999,79398,80598,81397,103734]},startEP2:{id:15,label:"SEP2",family:L.ETERNITY,get description(){return`Start every Reality with ${format(5e3)} Eternity Points.`},bumpCurrency:()=>Currency.eternityPoints.bumpTo(5e3),effect:5e3,layoutPosList:[96487,81398,78998,80597,81800,102193]},startEP3:{id:16,label:"SEP3",family:L.ETERNITY,get description(){return`Start every Reality with ${format(5e9)} Eternity Points.`},bumpCurrency:()=>Currency.eternityPoints.bumpTo(5e9),effect:5e9,automatorPoints:10,shortDescription:()=>`Start with ${format(5e9)} EP`,layoutPosList:[99260,81798,78997,80996,81803,106247]},startTP:{id:17,label:"STP",family:L.DILATION,get description(){return`After unlocking Dilation, gain ${formatInt(10)} Tachyon Particles.`},effect:()=>Enslaved.isRunning?1:10,automatorPoints:5,shortDescription:()=>`Start with ${formatInt(10)} TP`,layoutPosList:[106923,81399,79399,80198,81400,109376]},antimatterNoReset:{id:30,label:"ANR",family:L.ANTIMATTER,description:"Dimension Boosts and Antimatter Galaxies no longer reset\n Antimatter, Antimatter Dimensions, Tickspeed, or Dimensional Sacrifice.",layoutPosList:[89745,81e3,79799,80199,81394,92553]},studyPassive:{id:31,label:"PASS",family:L.ETERNITY,get description(){return`Improve Time Study 122 to ${formatX(50)} Eternity Points and\n Time Study 142 to ${formatX(b.E50)} Infinity Points.\n ${Pelle.isDoomed?"":`In addition, Time Study 132 also makes Replicanti ${format(3)} times faster.`}`},layoutPosList:[69860,79400,81e3,80202,78594,52589]},autounlockEU1:{id:40,label:"EU1",family:L.ETERNITY,description:"Automatically unlock the first row of Eternity Upgrades for free once you have Eternities.",layoutPosList:[92210,80601,80201,79800,80591,73007]},autounlockEU2:{id:41,label:"EU2",family:L.ETERNITY,get description(){return`The second row of Eternity Upgrades is automatically purchased\n at ${formatX(1e10)} times less than their original price.`},layoutPosList:[106210,81001,80202,79400,80594,81867]},autounlockDilation1:{id:42,label:"DU1",family:L.DILATION,get description(){return MendingMilestone.two.isReached?"After unlocking Dilation, automatically unlock the third row of Dilation Upgrades for free.":"After unlocking Dilation, automatically unlock the second row of Dilation Upgrades for free."},layoutPosList:[125433,81801,79803,79398,80200,97510]},autounlockDilation2:{id:43,label:"DU2",family:L.DILATION,get description(){return MendingMilestone.two.isReached?"After unlocking Dilation, automatically unlock the fourth and fifth row of Dilation Upgrades for free.":"After unlocking Dilation, automatically unlock the third row of Dilation Upgrades for free."},layoutPosList:[128662,82201,79403,79397,80203,85513]},autounlockDilation3:{id:44,label:"ATT",family:L.DILATION,description:"Automatically purchase the passive Time Theorem generation Dilation Upgrade once you can afford it.",automatorPoints:5,shortDescription:()=>"Auto-purchase TT generation",layoutPosList:[126692,82601,79402,79396,80206,72282]},autounlockTD:{id:45,label:"ATD",family:L.DILATION,description:"Auto-unlock Time Dimensions 5-8 once you can afford them.",automatorPoints:5,shortDescription:()=>"Auto-unlock TD 5-8",layoutPosList:[126321,82600,79001,79796,80209,61869]},autounlockReality:{id:46,label:"REAL",family:L.REALITY,get description(){return`Auto-unlocks Reality once you have ${format(b.E4000)} Eternity Points\n and have unlocked Time Dimension 8.`},automatorPoints:10,shortDescription:()=>"Auto-unlock Reality",layoutPosList:[120745,83e3,79e3,80196,80212,71046]},bypassIDAntimatter:{id:51,label:"IDR",family:L.INFINITY,description:"Infinity Dimensions no longer have antimatter requirements.",layoutPosList:[61684,80198,79797,80997,82200,79297]},bypassTGReset:{id:52,label:"TGR",family:L.DILATION,description:"The 2nd rebuyable Dilation Upgrade no longer resets your Dilated Time.",layoutPosList:[121771,81400,79801,79798,81e3,112677]},bypassECDilation:{id:53,label:"DILR",family:L.DILATION,description:"Remove the Eternity Challenge 11, Eternity Challenge 12, and total Time Theorem requirements from Time Dilation unlock.",automatorPoints:5,shortDescription:()=>"Unlocking Dilation only requires TT",layoutPosList:[131400,81802,80203,79799,80600,109116]},bypassEC1Lock:{id:54,label:"EC1R",family:L.ETERNITY,description:"Remove the Eternity Challenge 1 requirement from Time Study 181.",layoutPosList:[67490,79e3,81399,80603,78597,44167]},bypassEC2Lock:{id:55,label:"EC2R",family:L.ETERNITY,description:"Remove the Eternity Challenge 2 requirement from Time Study 181.",layoutPosList:[58670,78999,80999,80602,78197,48944]},bypassEC3Lock:{id:56,label:"EC3R",family:L.ETERNITY,description:"Remove the Eternity Challenge 3 requirement from Time Study 181.",layoutPosList:[78282,79001,81400,80203,78997,47822]},bypassEC5Lock:{id:57,label:"EC5R",family:L.ETERNITY,description:"Remove the Eternity Challenge 5 requirement from Time Study 62.",layoutPosList:[73431,79800,80600,80201,78591,62607]},autocompleteEC1:{id:60,label:"PEC1",family:L.AUTOMATION,get description(){return`Auto-complete one Eternity Challenge every ${formatInt(60)} minutes (real-time).\n ECs will be completed sequentially, requiring all previous\n ECs to be fully completed before progressing to the next EC.`},effect:60,automatorPoints:5,shortDescription:()=>`Auto-complete ECs every ${formatInt(60)} minutes`,layoutPosList:[91069,79402,81002,79803,79397,46664]},autocompleteEC2:{id:61,label:"PEC2",family:L.AUTOMATION,get description(){return`Auto-complete one Eternity Challenge every ${formatInt(40)} minutes (real-time).\n (${formatInt(20)} minute decrease)`},effect:40,layoutPosList:[99085,79002,81402,79804,79400,53486]},autocompleteEC3:{id:62,label:"PEC3",family:L.AUTOMATION,get description(){return`Auto-complete one Eternity Challenge every ${formatInt(20)} minutes (real-time).\n (${formatInt(20)} minute decrease)`},effect:20,automatorPoints:10,shortDescription:()=>`Auto-complete ECs every ${formatInt(20)} minutes`,layoutPosList:[106265,78602,81401,80204,79403,61903]},studyActiveEP:{id:70,label:"ACT",family:L.ETERNITY,description:"Active path multipliers are always maximized.",layoutPosList:[59439,79399,80599,80601,78194,58565]},studyIdleEP:{id:71,label:"IDL",family:L.ETERNITY,get description(){return`Idle path multipliers start as if you have spent ${formatInt(15)} minutes in this Infinity/Eternity.`},effect:900,layoutPosList:[82253,79401,81001,79802,78994,56239]},studyECRequirement:{id:72,label:"ECR",family:L.ETERNITY,description:"Remove non-Time Theorem requirements for unlocking Eternity Challenges.",automatorPoints:10,shortDescription:()=>"Remove EC secondary requirements",layoutPosList:[67521,78600,81398,80604,78600,40599]},studyECBulk:{id:73,label:"ECB",family:L.ETERNITY,description:"You can complete multiple tiers of Eternity Challenges at once if\n you reach the goal for a higher completion of that challenge.",automatorPoints:15,shortDescription:()=>"Bulk EC Completion",layoutPosList:[69548,78200,80998,81004,78603,41435]},retroactiveTP1:{id:80,label:"TP1",family:L.DILATION,get description(){return`When buying the 3rd rebuyable Dilation Upgrade,\n multiply your current Tachyon Particle amount by ${formatFloat(1.5,1)}.`},effect:1.5,layoutPosList:[116942,81799,79800,79797,81003,115434]},retroactiveTP2:{id:81,label:"TP2",family:L.DILATION,get description(){return`When buying the 3rd rebuyable Dilation Upgrade,\n multiply your current Tachyon Particle amount by ${formatInt(2)}.`},effect:2,layoutPosList:[108960,82199,79401,80197,81006,117382]},retroactiveTP3:{id:82,label:"TP3",family:L.DILATION,get description(){return`When buying the 3rd rebuyable Dilation Upgrade,\n multiply your current Tachyon Particle amount by ${formatFloat(2.5,1)}.`},effect:2.5,layoutPosList:[100976,82599,79400,80596,81009,116540]},retroactiveTP4:{id:83,label:"TP4",family:L.DILATION,get description(){return`When buying the 3rd rebuyable Dilation Upgrade,\n multiply your current Tachyon Particle amount by ${formatInt(3)}.`},effect:3,automatorPoints:10,shortDescription:()=>`${formatX(3)} TP upgrade applies retroactively`,layoutPosList:[91787,82598,78999,80995,81012,114103]},autobuyerDilation:{id:100,label:"DAU",family:L.AUTOMATION,description:"Unlock autobuyers for the repeatable Dilation Upgrades.",automatorPoints:5,shortDescription:()=>"Dilation Upgrade Autobuyers",layoutPosList:[120204,81401,79802,79399,80597,96672]},autobuyerFasterID:{id:101,label:"IDAS",family:L.AUTOMATION,get description(){return`Infinity Dimension autobuyers work ${formatX(3)} faster.`},effect:1/3,automatorPoints:5,shortDescription:()=>"Faster ID Autobuyers",layoutPosList:[78497,80199,79397,81e3,82597,77720]},autobuyerFasterReplicanti:{id:102,label:"REPAS",family:L.AUTOMATION,get description(){return`Replicanti autobuyers work ${formatX(3)} faster.`},effect:1/3,automatorPoints:5,shortDescription:()=>"Faster Replicanti Autobuyers",layoutPosList:[55315,80998,80197,80999,82600,104489]},autobuyerFasterDilation:{id:103,label:"DAS",family:L.AUTOMATION,get description(){return`Dilation Upgrade autobuyers work ${formatX(3)} faster.`},effect:1/3,automatorPoints:5,shortDescription:()=>"Faster Dilation Autobuyers",layoutPosList:[116298,82602,79002,79395,80609,72715]},ttBuySingle:{id:104,label:"TTS",family:L.AUTOMATION,description:"Unlock a Time Theorem Autobuyer which buys single Time Theorems every tick.",automatorPoints:5,shortDescription:()=>"Single TT Autobuyer",layoutPosList:[47438,79398,80598,81001,77797,57325]},ttFree:{id:105,label:"TTF",family:L.AUTOMATION,get description(){return"Purchasing Time Theorems no longer spends your Antimatter, Infinity Points, or Eternity Points."},layoutPosList:[37051,78998,80597,81002,77800,67309]},ttBuyMax:{id:106,label:"TTM",family:L.AUTOMATION,get description(){return"Upgrade the Time Theorem Autobuyer to buy max Time Theorems."},automatorPoints:10,shortDescription:()=>"Max TT Autobuyer",layoutPosList:[30272,78598,80997,81003,77803,65739]},achievementGroup1:{id:201,label:"ACH1",family:L.ACHIEVEMENT,get description(){return`Reduce the Achievement timer to ${formatInt(20)} minutes per\n Achievement (${formatInt(10)} minute decrease).`},effect:10,automatorPoints:5,shortDescription:()=>`Faster Achievements: every ${formatInt(20)} minutes`,layoutPosList:[69391,80201,80601,79801,79791,81371]},achievementGroup2:{id:202,label:"ACH2",family:L.ACHIEVEMENT,get description(){return`Reduce the Achievement timer to ${formatInt(12)} minutes per\n Achievement (${formatInt(8)} minute decrease).`},effect:8,layoutPosList:[60177,80202,80602,79401,79794,93780]},achievementGroup3:{id:203,label:"ACH3",family:L.ACHIEVEMENT,get description(){return`Reduce the Achievement timer to ${formatInt(6)} minutes per\n Achievement (${formatInt(6)} minute decrease).`},effect:6,layoutPosList:[50965,80602,80603,79402,79797,83005]},achievementGroup4:{id:204,label:"ACH4",family:L.ACHIEVEMENT,get description(){return`Reduce the Achievement timer to ${formatInt(2)} minutes per\n Achievement (${formatInt(4)} minute decrease).`},effect:4,layoutPosList:[40164,81002,81003,79403,79800,95422]},achievementGroup5:{id:205,label:"ACHNR",family:L.ACHIEVEMENT,get description(){return`Immediately unlock the first ${formatInt(13)} rows of Achievements\n and Reality no longer resets them.`},automatorPoints:10,shortDescription:()=>"Keep Achievements on Reality",layoutPosList:[29761,81402,81403,79404,79803,84639]}},$=function(){const e=F,t=[[e.firstPerk,e.achievementGroup1,e.startAM,e.autounlockEU1,e.bypassEC5Lock],[e.startAM,e.antimatterNoReset,e.startIP1],[e.antimatterNoReset,e.startEP1],[e.startIP1,e.startIP2,e.startEP1,e.autobuyerFasterID],[e.startIP2,e.bypassIDAntimatter,e.autobuyerFasterReplicanti],[e.startEP1,e.startEP2,e.startTP],[e.startEP2,e.startEP3],[e.startTP,e.startEP1,e.retroactiveTP1],[e.autounlockEU1,e.autounlockEU2],[e.autounlockEU2,e.autounlockEU1,e.autobuyerDilation],[e.autounlockDilation1,e.autounlockDilation2],[e.autounlockDilation2,e.autounlockDilation3],[e.autounlockDilation3,e.autobuyerFasterDilation,e.autounlockTD],[e.autounlockTD,e.autounlockReality],[e.bypassTGReset,e.autobuyerDilation,e.retroactiveTP1],[e.bypassEC1Lock,e.bypassEC2Lock,e.bypassEC3Lock,e.studyECRequirement],[e.bypassEC2Lock,e.studyActiveEP,e.bypassEC1Lock],[e.bypassEC3Lock,e.studyIdleEP,e.bypassEC1Lock],[e.bypassEC5Lock,e.studyActiveEP,e.studyIdleEP,e.studyPassive],[e.studyPassive,e.bypassEC1Lock],[e.autocompleteEC1,e.autocompleteEC2],[e.autocompleteEC2,e.autocompleteEC3],[e.studyActiveEP,e.bypassEC2Lock,e.ttBuySingle],[e.studyIdleEP,e.bypassEC3Lock,e.autocompleteEC1],[e.studyECRequirement,e.studyECBulk],[e.retroactiveTP1,e.bypassTGReset,e.startTP,e.retroactiveTP2],[e.retroactiveTP2,e.retroactiveTP3],[e.retroactiveTP3,e.retroactiveTP4],[e.autobuyerDilation,e.autounlockEU2,e.autounlockDilation1,e.bypassECDilation,e.bypassTGReset],[e.autobuyerFasterID],[e.ttBuySingle,e.ttFree],[e.ttFree,e.ttBuyMax],[e.achievementGroup1,e.achievementGroup2],[e.achievementGroup2,e.achievementGroup3],[e.achievementGroup3,e.achievementGroup4],[e.achievementGroup4,e.achievementGroup5]],i={};for(const a of Object.values(F)){const e=[],n=t.find((e=>e[0]===a));void 0!==n&&e.push(...n.slice(1));const s=t.filter((e=>e.slice(1).some((e=>e===a)))).map((e=>e[0]));e.push(...s),i[a.id]=[...new Set(e.map((e=>e.id)))]}return i}();var H=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("input",{staticClass:"o-autobuyer-input",class:e.validityClass,attrs:{type:e.inputType},domProps:{value:e.displayValue},on:{blur:e.handleBlur,focus:e.handleFocus,input:e.handleInput}})},q=[];i(5306),i(8757);const Y={name:"AutobuyerInput",props:{autobuyer:{type:Object,required:!0},property:{type:String,required:!0},type:{type:String,required:!0}},data(){return{isValid:!0,isFocused:!1,displayValue:"0"}},computed:{inputType(){return"int"===this.type?"number":"text"},typeFunctions(){const e=W[this.type];if(void 0===e)throw new Error("Unknown autobuyer input type");return e},validityClass(){return this.isValid?void 0:"o-autobuyer-input--invalid"}},methods:{update(){this.isFocused||this.updateActualValue()},updateActualValue(){const e=this.autobuyer[this.property];this.areEqual(this.actualValue,e)||(this.actualValue=this.typeFunctions.copyValue(e),this.updateDisplayValue())},areEqual(e,t){return void 0!==t&&void 0!==e&&this.typeFunctions.areEqual(e,t)},updateDisplayValue(){this.displayValue=this.typeFunctions.formatValue(this.actualValue)},handleInput(e){const t=e.target.value;if(this.displayValue=t,0===t.length)return void(this.isValid=!1);const i=this.typeFunctions.tryParse(t);this.isValid=void 0!==i,this.actualValue=this.typeFunctions.copyValue(i)},handleFocus(){this.isFocused=!0},handleBlur(){"69"===this.displayValue&&SecretAchievement(28).unlock(),this.isValid?this.autobuyer[this.property]=this.typeFunctions.copyValue(this.actualValue):this.updateActualValue(),this.updateDisplayValue(),this.isValid=!0,this.isFocused=!1}}},W={decimal:{areEqual:(e,t)=>Decimal.eq(e,t),formatValue:e=>Notation.scientific.format(e,2,2),copyValue:e=>new Decimal(e),tryParse:e=>{if(e)try{let t;if(/^e[0-9]*\.?[0-9]+$/.test(e.replaceAll(",","")))t=Decimal.pow10(parseFloat(e.replaceAll(",","").slice(1)));else{if(!/^[0-9]*\.?[0-9]+(e[0-9]*\.?[0-9]+)?$/.test(e.replaceAll(",","")))return;t=Decimal.fromString(e.replaceAll(",",""))}return isNaN(t.mantissa)||isNaN(t.exponent)?void 0:t}catch(t){return}}},float:{areEqual:(e,t)=>e===t,formatValue:e=>e.toString(),copyValue:e=>e,tryParse:e=>{const t=parseFloat(e);return isNaN(t)?void 0:t}},int:{areEqual:(e,t)=>e===t,formatValue:e=>e.toString(),copyValue:e=>e,tryParse:e=>{if(!e)return;if(!/^[0-9]+$/.test(e.replaceAll(",","")))return;const t=parseInt(e,10);return isNaN(t)||!Number.isInteger(t)?void 0:t}}},j=Y;var X=i(1001),z=(0,X.Z)(j,H,q,!1,null,"4d836647",null);const K=z.exports,Z={paramTypes:[{name:"tree",isValidString:e=>{const t=TimeStudyTree.isValidImportString(e),i=e.match(/^(NAME ((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){1,4})|ID ([0-9]))$/),a=!!i&&(player.timestudy.presets.some((e=>e.name===i[2]))||Number(i[3])>0&&Number(i[3])<7);return t||a}},{name:"integer",isValidString:e=>W.int.tryParse(e),map:e=>Math.round(parseInt(e,10))},{name:"decimal",isValidString:e=>W.decimal.tryParse(e),map:e=>W.decimal.tryParse(e)},{name:"boolean",boolDisplay:[!0,!1]},{name:"nowait",boolDisplay:["Continue onward","Keep buying Studies"]},{name:"mode",boolDisplay:["X times highest","Seconds since last"],map:e=>e?"mult":"time"}],scripts:[{name:"Climb EP",description:"This script performs repeated Eternities, attempting to re-purchase a Time Study Tree every\n Eternity. Autobuyer settings must be supplied for the Infinity and Eternity Autobuyers. The script will\n repeat until a final Eternity Point value is reached.",inputs:[{name:"treeStudies",type:"tree",prompt:"Or directly enter your time studies"},{name:"treeNowait",type:"nowait",prompt:"Missing Study behavior"},{name:"finalEP",type:"decimal",prompt:"Target EP"},{name:"autoInfMode",type:"mode",prompt:"Infinity Autobuyer Mode"},{name:"autoInfValue",type:"decimal",prompt:"Infinity Autobuyer Threshold"},{name:"autoEterMode",type:"mode",prompt:"Eternity Autobuyer Mode"},{name:"autoEterValue",type:"decimal",prompt:"Eternity Autobuyer Threshold"}],warnings:()=>{const e=[];return RealityUpgrade(10).isBought||e.push(`This script will be unable to properly set Autobuyer modes without at least ${formatInt(100)}\n Eternities. Consider getting Reality Upgrade "${RealityUpgrade(10).name}" before using this at the start\n of a Reality.`),RealityUpgrade(13).isBought||e.push(`This template may perform poorly without Reality Upgrade "${RealityUpgrade(13).name}"`),Perk.ttBuySingle.isBought||e.push(`This template may perform poorly without Perk "${Perk.ttBuySingle.label}" unless you can generate\n Time Theorems without purchsing them`),e}},{name:"Grind Eternities",description:'This script performs repeated fast Eternities after buying a specified Time Study Tree.\n Auto-Infinity will be set to "Times Highest" with a specified number of crunches and Auto-Eternity will\n trigger as soon as possible. The script will repeat until a final Eternity count is reached.',inputs:[{name:"treeStudies",type:"tree",prompt:"Or directly enter your time studies"},{name:"treeNowait",type:"nowait",prompt:"Missing Study behavior"},{name:"crunchesPerEternity",type:"integer",prompt:"Crunches per Eternity"},{name:"eternities",type:"decimal",prompt:"Target Eternity Count"}],warnings:()=>{const e=[];return RealityUpgrade(14).isBought&&e.push(`You probably do not need to use this due to Reality Upgrade "${RealityUpgrade(14).name}"`),e}},{name:"Grind Infinities",description:"This script buys a specified Time Study Tree and then configures your Autobuyers for gaining\n Infinities. It will repeat until a final Infinity count is reached; the count can be for Banked Infinities,\n in which case it will get all Infinities before performing a single Eternity.",inputs:[{name:"treeStudies",type:"tree",prompt:"Or directly enter your time studies"},{name:"treeNowait",type:"nowait",prompt:"Missing Study behavior"},{name:"infinities",type:"decimal",prompt:"Target Infinity Count"},{name:"isBanked",type:"boolean",prompt:"Use Banked for Target?"}],warnings:()=>{const e=[];return Perk.achievementGroup5.isBought||e.push(`You will not start this Reality with Achievement "${Achievement(131).name}" - grinding\n Infinities may be less useful than expected since they cannot be Banked until later`),RealityUpgrade(11).isBought&&e.push(`You probably do not need to use this due to Reality Upgrade "${RealityUpgrade(11).name}"`),e}},{name:"Complete Eternity Challenge",description:"This script buys a specified Time Study Tree and then unlocks a specified Eternity Challenge.\n Then it will set your Infinity Autobuyer to your specified settings and enter the Eternity Challenge.\n Finally, it will wait until at least the desired number of completions before triggering an Eternity to\n complete the Challenge.",inputs:[{name:"treeStudies",type:"tree",prompt:"Or directly enter your time studies"},{name:"treeNowait",type:"nowait",prompt:"Missing Study behavior"},{name:"ec",type:"integer",prompt:"Eternity Challenge ID"},{name:"completions",type:"integer",prompt:"Target Completion Count"},{name:"autoInfMode",type:"mode",prompt:"Infinity Autobuyer Mode"},{name:"autoInfValue",type:"decimal",prompt:"Infinity Autobuyer Threshold"}],warnings:()=>{const e=[];return Perk.studyECRequirement.isBought||e.push(`Eternity Challenges may not be reliably unlockable due to secondary resource requirements, consider\n unlocking Perk "${Perk.studyECRequirement.label}" before using this template`),Perk.studyECBulk.isBought||e.push(`Using this template without bulk completions of Eternity Challenges may lead to long scripts which\n are slower and difficult to modify. If you use this template, consider returning to simplify your scripts\n after unlocking Perk "${Perk.studyECBulk.label}"`),e}},{name:"Unlock Dilation",description:"This script performs repeated Eternities, attempting to re-purchase a Time Study Tree every\n Eternity. Settings must be supplied for the Eternity Autobuyer; your Infinity Autobuyer will be\n turned off. The script loops until you have the total Time Theorem requirement to unlock Dilation, and then\n it will unlock Dilation once it does.",inputs:[{name:"treeStudies",type:"tree",prompt:"Or directly enter your time studies"},{name:"treeNowait",type:"nowait",prompt:"Missing Study behavior"},{name:"finalEP",type:"decimal",prompt:"Target EP"},{name:"autoEterMode",type:"mode",prompt:"Eternity Autobuyer Mode"},{name:"autoEterValue",type:"decimal",prompt:"Eternity Autobuyer Threshold"}],warnings:()=>{const e=[];return RealityUpgrade(13).isBought||e.push(`This template may perform poorly without Reality Upgrade "${RealityUpgrade(13).name}"`),Perk.ttBuySingle.isBought||e.push(`This template may perform poorly without Perk "${Perk.ttBuySingle.label}" unless you can generate\n Time Theorems without purchsing them`),e}}]},Q={categoryNames:["Time Studies","Event Triggers","Alter Settings","Information","Script Flow"],commands:[{id:0,isUnlocked:()=>!0,keyword:"STUDIES RESPEC",category:0,syntax:"studies respec",description:"This command turns on the respec option, which will respec your Time Studies on the next manual or\n automatic Eternity. Note that this does not actually perform an Eternity on its own; make sure your Autobuyer\n is on or you manually run the ETERNITY command (although ETERNITY has its own built-in respec option).",examples:["studies respec"]},{id:1,isUnlocked:()=>!0,keyword:"STUDIES LOAD",category:0,syntax:"studies [nowait] load id selector
\n studies [nowait] load name name",description:"Loads a Time Study preset, as if you had clicked on the button in the Time Study tab.",sections:[{name:"INPUTS",items:[{header:"nowait",description:'\n If present, the Automator will purchase as many studies as possible before continuing onward. By default\n (ie. without "nowait") this command will repeat this line indefinitely until all of the studies in the\n preset are bought; this may cause the Automator to get stuck indefinitely if you are not careful.\n '},{header:"selector",description:"\n Finds and loads the specified Time Study preset by its slot number. This is numbered one through six,\n ordered from left to right."},{header:"name",description:"Finds and loads the specified Time Study preset by its given name. This is case-sensitive."}]}],examples:["studies load id 2","studies load name ANTI","studies nowait load name dil"]},{id:2,isUnlocked:()=>!0,keyword:"STUDIES PURCHASE",category:0,syntax:"studies [nowait] purchase study_list",description:"Purchase Time Studies specified from a list of Time Studies.",sections:[{name:"INPUTS",items:[{header:"nowait",description:'\n If present, the Automator will purchase as many studies as possible before continuing onward. By default\n (ie. without "nowait") this command will repeat this line indefinitely until all of the studies in the\n preset are bought; this may cause the Automator to get stuck indefinitely if you are not careful.\n '},{header:"study_list",description:"\n The exported Time Study tree format is supported here, which is simply a list of Time Study IDs\n separated by commas. This command also supports a more flexible formatting, additionally allowing\n ranges of studies (for example, 11-62) and the following aliases:
\n
antimatter, infinity, time, active, passive, idle, light, dark
\n A variable name may be used in place of the entire Time Study list as well (see the definition panel),\n although in that case the shorthand ranges and aliases are not allowed."}]}],examples:["studies nowait purchase 11,21,31","studies purchase 11-62, antimatter, 111, idle","studies nowait purchase ec6Studies"]},{id:3,isUnlocked:()=>!0,keyword:"PRESTIGE",category:1,syntax:"\n infinity [nowait]
\n eternity [nowait] [respec]
\n reality [nowait] [respec]",description:"Triggers an Infinity, Eternity, or Reality reset if possible, otherwise the automator will wait at\n this command until it becomes possible. If you find that your script often gets stuck on this command, an\n Autobuyer may be triggering a prestige before the Automator reaches this line - consider using nowait or\n adjusting your Autobuyer settings using AUTO.",sections:[{name:"MODIFIERS",items:[{header:"nowait",description:"\n If present, the Automator will move on to the next command instead of repeatedly trying on this\n command in situations where the prestige is not possible (eg. within an EC below the goal).\n "},{header:"respec",description:"\n For non-Infinity prestiges, also does the related respec action when triggering prestige.\n Eternity: Respec Time Studies and Eternity.
\n Reality: Unequip Glyphs and Reality.\n "}]}],examples:["infinity","eternity respec","reality nowait"]},{id:4,isUnlocked:()=>!0,keyword:"UNLOCK",category:1,syntax:"unlock [nowait] feature",description:"Unlocks the specified Eternity Challenge or Time Dilation.",sections:[{name:"MODIFIERS",items:[{header:"nowait",description:"\n If present, the Automator will move on to the next command even if unlocking the feature fails. By\n default, the Automator will keep running this command until the unlock succeeds.\n "}]}],examples:["unlock dilation","unlock ec7"]},{id:5,isUnlocked:()=>!0,keyword:"START",category:1,syntax:"\n start ecN
\n start dilation",description:"Start a specified Eternity Challenge or a Dilated Eternity. This command will also attempt\n to unlock the EC if not unlocked, but will not do the same for Dilation (use UNLOCK command to do that).\n If you are already in the specified EC or Dilated Eternity, running this command again will do nothing;\n otherwise, the Automator will keep attempting to start the Eternity until it succeeds.",examples:["start ec12","start dilation"]},{id:6,isUnlocked:()=>!0,keyword:"AUTO",category:2,syntax:"auto infinity [setting]
\n auto eternity [setting]
\n auto reality [setting]",description:"Turns prestige Autobuyers on or off and allows you to change their settings. If the setting option\n is not present, this command will toggle the Autobuyer state, turning it off if it is on and turning it on if\n it is off. This command will not work if you try to modify an Autobuyer or setting you do not have.",sections:[{name:"SETTINGS",items:[{header:"on | off",description:"Turns specified Autobuyer on or off."},{header:"number time units",description:"Usable with Infinity and Eternity only.\n Turns the Autobuyer on and set it to trigger at the given interval."},{header:"number x highest",description:'Usable with Infinity and Eternity only. Turns the Autobuyer on and sets it to\n "X times highest" mode.'},{header:"number currency",description:'Turns the Autobuyer on and sets it to trigger at a specific amount. The currency must\n match the autobuyer type (IP, EP, or RM). This will select "Reality Machines" mode for the Reality\n Autobuyer. Glyph Level mode cannot be changed or set via the Automator, only manually.'}]}],examples:["auto infinity on","auto eternity off","auto infinity 30s","auto eternity 10 seconds","auto eternity 1e100 x highest"]},{id:7,isUnlocked:()=>BlackHole(1).isUnlocked,keyword:"BLACK HOLE",category:2,syntax:"black hole state",description:"Toggles the speedup effect from the Black Hole on or off. Turning the Black Hole on via the\n Automator does not bypass the gradual acceleration from off to max speed which occurs before they are\n permanent.",examples:["black hole on","black hole off"]},{id:8,isUnlocked:()=>Enslaved.isUnlocked,keyword:"STORE GAME TIME",category:2,syntax:"store game time action",description:"Changes whether or not the Black Hole is storing time. Also allows usage of stored time.",sections:[{name:"ACTIONS",items:[{header:"on | off",description:"\n Turns storing game time on or off.\n "},{header:"use",description:"\n Uses all stored game time. Does not alter the on/off state of time storage.\n "}]}],examples:["store game time on","store game time off","store game time use"]},{id:9,isUnlocked:()=>!0,keyword:"NOTIFY",category:3,syntax:'notify "text"',description:"Takes the specified text and posts it in the top-right corner as\n a text notification, in the same spot and style as other notifications such as auto-save\n and achievement/upgrade unlocks. Can be useful for seeing automator status while\n on tabs other than the Automator tab.",examples:['notify "Dilation reached"','notify "ECs completed"']},{id:10,isUnlocked:()=>!0,keyword:"Adding Comments",category:3,syntax:"# text
// text",description:"Allows you to leave a note to yourself within your script. This may be\n useful for organizing or keeping track of which parts of your script do various things,\n in a way that appears more readable than just the commands. These commands mainly serve as a tool to\n help you keep the steps of your scripts easier to follow if desired.",sections:[{name:"NOTES",items:[{header:"Inline comments",description:'\n The Automator does not support comments which are placed after an already functional\n line of code, on the same line. As an example, the single line "studies load name TDI // Load push"\n will be an invalid command. In this case, you will need to move the comment to a separate line\n in the automator.\n '},{header:"Execution speed",description:"\n Having comments will not slow down your script, as they are completely skipped during\n execution and do not count as a command for the purposes of running. For example, even if you have\n a really long explanation in the form of comments on lines 20-40, the Automator will still\n immediately skip from line 19 to 41 during execution.\n "}]}],examples:["# get 1e20 before starting ec1","// this loop alternates dilation and pushing"]},{id:11,isUnlocked:()=>!0,keyword:"WAIT",category:4,syntax:"wait condition",description:"Forces Automator to wait for some condition or event. To wait for a certain duration of time,\n use the PAUSE command instead.",sections:[{name:"POSSIBLE CONDITIONS",items:[{header:"comparison",description:'\n Wait until the comparison statement is true. Check the entry for "Formatting Comparisons" for details\n on how to properly input this option.\n '},{header:"prestige",description:"\n Wait until the specified prestige (Infinity, Eternity, or Reality) has been triggered by its respective\n Autobuyer. This must happen after this command is reached; if the Autobuyer triggers\n before the command is reached, your script may get stuck.\n "},{header:"black hole (state)",description:'\n Wait until the Black Hole(s) are in the specified state. Valid inputs for state are\n "off", "bh1", and "bh2", corresponding to no active Black Hole(s), at least the first Black Hole active,\n and both Black Holes active.\n '}]}],examples:["wait am >= 1e308","wait pending completions >= 5","wait ec9 completions >= 4","wait infinity","wait black hole bh1"]},{id:12,isUnlocked:()=>!0,keyword:"PAUSE",category:4,syntax:"pause interval",description:"Tells the automator to stop moving forward and executing commands for a certain amount of time.\n Note that if the pause duration is shorter than the automator's execution speed, the automator will wait until\n the next execution tick before moving on.",examples:["pause 10s","pause 1 minute","pause 34 seconds"],sections:[{name:"INTERVAL FORMATTING",items:[{header:"Specified Interval",description:'This command accepts time units of milliseconds ("ms"), seconds ("s", "sec", or "seconds"),\n minutes ("m", "min", or "minutes"), and hours ("h" or "hours"). You cannot provide just a number and\n nothing else; a unit of time must be specified.'},{header:"Defined Constant",description:"A defined constant may be used instead, see the definition panel. The defined value will\n be assumed to be in units of seconds."}]},{name:"OTHER",items:[{header:"Offline Side-effects",description:"This command may behave undesirably when it runs during offline progress due to limited\n tick count. A 1-second pause that is usually 20-30 ticks might be only 1 game tick when processing\n hours of offline progress, which might not be enough for the resources needed for the rest of the\n script."},{header:"Alternatives",description:"Using another command like 'WAIT' will allow you to set it for a certain resource amount,\n in order to ensure that the game has the proper state before moving onward."},{header:"Manual Skip",description:"You can manually force the Automator to continue execution past a PAUSE command without\n waiting the entire specified time by stepping forward one line (to put it on the next one) and then\n resuming execution. If you find yourself doing this regularly, consider modifying your script."}]}]},{id:13,isUnlocked:()=>!0,keyword:"IF",category:4,syntax:"if condition {
\n
commands
\n }",description:"Defines an inner block of block of the automator script which will only be executed if the specified\n comparison is true when this line is reached. If the comparison is false, the automator will instead skip to the\n first line after the block and continue execution from there.",examples:["if ec10 completions < 5","if ep > 1e6000"]},{id:14,isUnlocked:()=>!0,keyword:"UNTIL",category:4,syntax:"until comparison {
\n
commands
\n }
until prestige_event {
\n
commands
\n }",description:"Defines an inner block of the script where commands are repeated; the comparison is checked at the\n start and every time the loop repeats. If the condition is true when the UNTIL statement is first reached, the\n inner block of commands will be skipped entirely.\n

\n If an prestige event (ie. Infinity, Eternity, or Reality) is specified instead of a condition, then the block\n will always be entered and the commands within the block will repeat until the event occurs for the first time\n after entering the block. Note that the Automator will finish the rest of the loop and then exit after\n the prestige event occurs - it will not immediately exit the loop in the middle.",examples:["until ep > 1e500","until reality"]},{id:15,isUnlocked:()=>!0,keyword:"WHILE",category:4,syntax:"while comparison {
\n
commands
\n }",description:"Defines an inner block of the script where commands are repeated; the comparison is checked at the\n start and every time the loop repeats. If the condition is false when the WHILE statement is first reached, the\n inner block of commands will be skipped entirely.",examples:["while ep < 1e500","while myThreshold > am"]},{id:16,isUnlocked:()=>!0,keyword:"STOP",category:4,syntax:"stop",description:'When the Automator runs this line, it will stop execution as if you clicked the\n button on the control panel in the top-left of the Automator. This\n does not need to be placed at the end of every script in order to stop them, as turning off the\n option on the left panel will do this automatically.\n This command may be useful when used inside of an IF command, in order to stop execution\n only under certain conditions.',examples:["stop"]},{id:17,isUnlocked:()=>!0,keyword:"Currency List",category:4,syntax:"You can use these in any IF, WHILE, UNTIL, or WAIT command",description:()=>{const e=EffarigUnlock.glyphFilter.isUnlocked?"filter score - Glyph filter score of the Glyph which your filter will select this Reality
":"",t=V.spaceTheorems>0?"space theorems - Current unspent Space Theorem amount
\n total space theorems - TOTAL Space Theorems, including ones spent on current Studies
":"";return`This is a list of "currencies" or numbers that you can use within the Automator.
\n Note that when used, most currencies will need to be in scientific notation.
\n am - Current Antimatter amount
\n ip - Current Infinity Point amount
\n ep - Current Eternity Point amount
\n rm - Current Reality Machine amount
\n infinities - Current Infinity amount
\n banked infinities - Current Banked Infinity amount
\n eternities - Current Eternity amount
\n realities - Current Reality amount
\n pending ip - IP gained on Infinity (0 if not available)
\n pending ep - EP gained on Eternity (0 if not available)
\n pending tp - TP gained on exiting Dilation
\n pending rm - RM gained on Reality (0 if not available)
\n pending glyph level - Glyph Level gained on Reality (0 if not available)
\n dt - Current Dilated Time amount
\n tp - Current Tachyon Particle amount
\n rg - Current Replicanti Galaxy amount (does not use scientific)
\n rep - Current Replicanti amount
\n tt - Current Time Theorem amount
\n total tt - TOTAL Time Theorems, includes all forms of generated TT and any spent on Studies
\n total completions - Total completions of all Eternity Challenges
\n pending completions - Total completions of current EC at Eternity
\n ecX completions - Amount of EC completions for a certain EC (eg. "ec6 completions")
\n ${e}\n ${t}\n `}},{id:18,isUnlocked:()=>!0,keyword:"Formatting Comparisons",category:4,syntax:"resource1 condition resource2",description:"\n Comparisons are used within certain commands, which allow you to control the behavior of the automator based\n on the game's current state. They have a standard format with two value inputs and a comparison operator, but\n the value inputs can be anything as long as it is formatted correctly overall.",sections:[{name:"CONDITIONS",items:[{header:"resource",description:'\n This can be any Automator Currency, a defined constant, or a number which must be formatted in\n scientific notation (eg. 1000, 1e100, 1.8e308). Unlike more general programming languages, this must\n be a single value (ie. math expressions such as "ip + pending ip" are not allowed).\n '},{header:"condition",description:"\n This must be an inequality operator (<, <=, >, >=), which takes on its typical mathematical meaning.\n Equality operators (==, !=) are not allowed, as the nature of the game means that numbers will often\n never be exactly equal and thus checking based on direct equality may lead to unexpected script\n behavior.\n "}]}],examples:["ep < 1e20","total tt > 14000"]},{id:19,isUnlocked:()=>!0,keyword:"Commands with inner blocks",category:4,syntax:"header_command {
\n
inner_commands
\n }",description:'Some commands are associated with an "inner block" of commands. This inner block can contain still\n contain any other valid command, but may or may not actually get executed based on what the state of the game is\n when header_command is executed. This allows you to repeat some commands over and over (eg. Time Study\n purchasing), or to skip them entirely (eg. not entering an EC if it already has full completions). These blocks\n can be nested if desired, with inner blocks being placed within one another.\n

\n In the text editor mode: Specify the inner block with curly braces, with the opening brace { on the same line as\n the comparison and the closing brace } on its own line after the last line you want inside the block. Inner\n commands do not need to be indented, although it may be visually helpful to do so.\n

\n In the block editor mode: These commands come with an empty dotted rectangle which indicates which commands are\n within the inner block. Subsequent blocks can then be dragged inside the dotted rectangle.\n ',examples:["if ec10 completions < 5 {
\n
\n unlock ec10
\n start ec10
\n }","until ep > 1e8 {
\n
\n studies nowait purchase 11-62
\n pause 10s
\n eternity respec
\n }"]}],otherAutomatorPoints:[{name:"Reality Count",automatorPoints:()=>2*Math.clampMax(Currency.realities.value,50),shortDescription:()=>`+${formatInt(2)} per Reality, up to ${formatInt(50)} Realities`,symbol:"Ϟ"},{name:"Black Hole",automatorPoints:()=>BlackHole(1).isUnlocked?10:0,shortDescription:()=>`Unlocking gives ${formatInt(10)} AP`,symbol:""}],templates:Z},J={cards:{id:"cards",name:"Playing Card Suits",symbol:["♠","♥","♦","♣","♤","♧","♡","♢"],color:["W#000000","B#FF2222"]},lower:{id:"lower",name:"Lowercase Glyphs",symbol:["ω","ξ","δ","ψ"]},sus:{id:"sus",name:"Suspicious",symbol:["ඔ","ඕ","ඞ","ඩ"],color:["B#FCA40A"]},currency:{id:"currency",name:"Modern Currency",symbol:["$","₽","¥","€","¢","£","₩"],preventBlur:!0,color:["W#00DD00"]},oldCurrency:{id:"oldCurrency",name:"Older Currency",symbol:["₷","₰","₳","₯","₻"],preventBlur:!0,color:["B#00DD00"]},pipe:{id:"pipe",name:"Single Pipes",symbol:["┌","┐","└","┘","─","│"],color:["B#33FF33"]},pipe2:{id:"pipe2",name:"Double Pipes",symbol:["╔","╗","╚","╝","═","║"],color:["W#33FF33"]},trigram:{id:"trigram",name:"Trigrams",symbol:["☰","☱","☲","☳","☴","☵","☶","☷"],preventBlur:!0,color:["B#FFFFFF"]},arrow:{id:"arrow",name:"Single Arrows",symbol:["←","↓","↑","→","↖","↗","↘","↙"],color:["W#CC0000"]},arrow2:{id:"arrow2",name:"Double Arrows",symbol:["⇄","⇅","⇔","⇕"],color:["W#0000CC"]},arrow3:{id:"arrow3",name:"Special Arrows",symbol:["↺","↯","↬","⇱","⇲","⇮","↭"],preventBlur:!0,color:["W#CCCC00"]},integral:{id:"integral",name:"Integration",symbol:["∬","∭","∮","∯","∰","∱","∲","∳"],preventBlur:!0,color:["B#123456"]},numbers:{id:"numbers",name:"Circled Numbers",symbol:["①","②","③","④","⑤","⑥","⑦","⑧"],preventBlur:!0,color:["B#607D8B"]},blocks:{id:"blocks",name:"2x2 Blocks",symbol:["▘","▚","▞","▙","▛","▜","▟"]},shapes:{id:"shapes",name:"Miscellaneous Shapes",symbol:["▰","▲","◆","◎","◍"],preventBlur:!0},chess:{id:"chess",name:"Chess Pieces",symbol:["♟","♞","♝","♜","♛","♚"],preventBlur:!0,color:["B#AAAAAA"]},planet:{id:"planet",name:"Planetary Symbols",symbol:["☿","♀","♁","♂","♃","♄","♆","♇"],preventBlur:!0,color:["B#964B00"]},musical:{id:"musical",name:"Musical Symbols",symbol:["♩","♪","♬","♭","♮","♯"],preventBlur:!0,color:["W#E621E6"]},recycle:{id:"recycle",name:"Recycling Symbols",symbol:["♻","♳","♴","♵","♶","♷","♸","♹"],preventBlur:!0},dice:{id:"dice",name:"Dice Faces",symbol:["⚀","⚁","⚂","⚃","⚄","⚅"],preventBlur:!0},hazard:{id:"hazard",name:"Hazard Symbols",symbol:["☠","☢","☣","⚠"],preventBlur:!0,color:["W#FCA40A"]},celestial:{id:"celestial",name:"Celestial Icons",symbol:["","⌬","ᛝ","♅"],color:["B#00BCD4"]},alchemy:{id:"alchemy",name:"Alchemical Symbols",symbol:["🜁","🜂","🜃","🜄","🜔","🜍","🜞","🜚"],color:["B#FFD700"]},blob:{id:"blob",name:"Blobs",symbol:["","","","","","",""],preventBlur:!0,color:["B#E4B51A"]},blob2:{id:"blob2",name:"More Blobs",symbol:["","","","","","",""],preventBlur:!0},star:{id:"star",name:"Geometric Stars",symbol:["★","☆","✪","✯","✭","✫","🜞"]},star2:{id:"star2",name:"Realistic Stars",symbol:["✶","✦","✧","✺","✹","✷"],color:["W#D4FFFF","W#FDFFCC"]},gem:{id:"gem",name:"Gemstones",symbol:["💎"],color:["B#035E3B","B#943B47","B#032C54"]},heiroglyph:{id:"heiroglyph",name:"Common Hieroglyphs",symbol:["𓂀","𓀶","𓅊","𓇌","𓊝","☥"],preventBlur:!0},paperclip:{id:"paperclip",name:"Useless Paperclips",symbol:["𓄲","𓄳","𓄴","𓄵","𓄶","𓄷","𓄸"],preventBlur:!0,color:["B#222222"]},snake:{id:"snake",name:"Various Snakes",symbol:["𓆓","𓆔","𓆕","𓆖","𓆗","𓆘"],preventBlur:!0},egyptNumber:{id:"egyptNumber",name:"Egyptian Numbers",symbol:["𓆄","𓅔","𓆾","𓂰","𓍦","𓎋","𓐀","𓃐"],preventBlur:!0,color:["W#123456"]},egyptWeather:{id:"egyptWeather",name:"Egyptian Weathervanes",symbol:["𓈹","𓈧","𓈷","𓉈","𓈩","𓈻","𓈽"],preventBlur:!0,color:["W#607D8B"]},limbs:{id:"limbs",name:"Awkward Limbs",symbol:["𓈝","𓄒","𓃂","𓃁","𓂩","𓂙","𓂓","𓂼"],preventBlur:!0,color:["B#E621E6"]},animal:{id:"animal",name:"Moses' Ark",symbol:["𓆏","𓆉","𓅬","𓅃","𓃲","𓆣","𓆊","𓃰"],preventBlur:!0,color:["W#0000AA"]}};i(5827);const ee=Object.freeze({add:e=>e.reduce(Number.sumReducer,0),multiply:e=>e.reduce(Number.prodReducer,1),addExponents:e=>e.reduce(Number.sumReducer,1-e.length),multiplyDecimal:e=>e.reduce(Decimal.prodReducer,b.D1)}),te={timepow:{id:"timepow",bitmaskIndex:0,isGenerated:!0,glyphTypes:["time"],singleDesc:"Time Dimension power +{value}",totalDesc:"Time Dimension multipliers ^{value}",shortDesc:"TD power +{value}",effect:(e,t)=>1.01+Math.pow(e,.32)*Math.pow(t,.45)/75,formatEffect:e=>format(e,3,3),formatSingleEffect:e=>format(e-1,3,3),combine:ee.addExponents,enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},timespeed:{id:"timespeed",bitmaskIndex:1,isGenerated:!0,glyphTypes:["time"],singleDesc:"Multiply game speed by {value}",totalDesc:"Game runs ×{value} faster",genericDesc:"Game speed multiplier",shortDesc:"Game speed ×{value}",effect:(e,t)=>GlyphAlteration.isEmpowered("time")?1+Math.pow(e,.35):1+Math.pow(e,.3)*Math.pow(t,.65)/20,formatEffect:e=>format(e,3,3),combine:ee.multiply,alteredColor:()=>GlyphAlteration.getEmpowermentColor("time"),alterationType:ALTERATION_TYPE.EMPOWER,enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},timeetermult:{id:"timeetermult",bitmaskIndex:2,isGenerated:!0,glyphTypes:["time"],singleDesc:"Multiply Eternity gain by {value}",totalDesc:"Eternity gain ×{value}",genericDesc:"Eternity gain multiplier",shortDesc:"Eternities ×{value}",effect:(e,t)=>Math.pow((t+3)*e,.9)*Math.pow(3,GlyphAlteration.sacrificeBoost("time")),formatEffect:e=>format(e,2,2),combine:ee.multiply,alteredColor:()=>GlyphAlteration.getBoostColor("time"),alterationType:ALTERATION_TYPE.BOOST,enabledInDoomedWithlvl25:!0},timeEP:{id:"timeEP",bitmaskIndex:3,isGenerated:!0,glyphTypes:["time"],singleDesc:()=>GlyphAlteration.isAdded("time")?"Eternity Point gain \n×{value} [and ^]{value2}":"Multiply Eternity Point gain by {value}",totalDesc:()=>GlyphAlteration.isAdded("time")?"Eternity Point gain ×{value} and ^{value2}":"Eternity Point gain ×{value}",genericDesc:()=>GlyphAlteration.isAdded("time")?"Eternity Point gain multiplier and power":"Eternity Point gain multiplier",shortDesc:()=>GlyphAlteration.isAdded("time")?"EP ×{value} and ^{value2}":"EP ×{value}",effect:(e,t)=>100*Math.pow(e*t,3),formatEffect:e=>format(e,2,3),combine:ee.multiply,conversion:e=>1+Math.log10(e)/1e3,formatSecondaryEffect:e=>format(e,4,4),alteredColor:()=>GlyphAlteration.getAdditionColor("time"),alterationType:ALTERATION_TYPE.ADDITION,enabledInDoomedWithlvl25:!0},dilationDT:{id:"dilationDT",bitmaskIndex:4,isGenerated:!0,glyphTypes:["dilation"],singleDesc:"Multiply Dilated Time gain by {value}",totalDesc:"Dilated Time gain ×{value}",shortDesc:"DT ×{value}",effect:(e,t)=>{let i=b.D1;return i=GlyphAlteration.isEmpowered("dilation")?b.D1_005.pow(e).times(15):Decimal.pow(e*t,1.5).times(2),i},formatEffect:e=>format(e,2,1),combine:e=>{let t=e.reduce(Decimal.prodReducer,b.D1);return t.gte(b.E500)?t.div(b.E500).pow(.5).times(b.E500):t},alteredColor:()=>GlyphAlteration.getEmpowermentColor("dilation"),alterationType:ALTERATION_TYPE.EMPOWER,enabledInDoomedWithlvl25:!0},dilationgalaxyThreshold:{id:"dilationgalaxyThreshold",bitmaskIndex:5,isGenerated:!0,glyphTypes:["dilation"],singleDesc:"Tachyon Galaxy threshold multiplier ×{value}",genericDesc:"Tachyon Galaxy cost multiplier",shortDesc:"TG threshold ×{value}",effect:(e,t)=>{let i=1-Math.pow(e,.17)*Math.pow(t,.35)/100-GlyphAlteration.sacrificeBoost("dilation")/50;return i},formatEffect:e=>format(e,3,3),alteredColor:()=>GlyphAlteration.getBoostColor("dilation"),alterationType:ALTERATION_TYPE.BOOST,combine:e=>{const t=e.reduce(Number.prodReducer,1);return t<.4?Math.pow(.4-t,1.7)<.3?{value:.3-Math.pow(.4-t,3),capped:!0}:{value:.4-Math.pow(.4-t,1.7),capped:!0}:{value:t,capped:!1}},enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},dilationTTgen:{id:"dilationTTgen",bitmaskIndex:6,isGenerated:!0,glyphTypes:["dilation"],singleDesc:()=>GlyphAlteration.isAdded("dilation")?"Generates {value} Time Theorems/hour \n[and multiplies Time Theorem \ngeneration by] {value2}":"Generates {value} Time Theorems per hour",totalDesc:()=>GlyphAlteration.isAdded("dilation")?"Generating {value} Time Theorems/hour and Time Theorem generation ×{value2}":"Generating {value} Time Theorems per hour",genericDesc:()=>GlyphAlteration.isAdded("dilation")?"Time Theorem generation and multiplier":"Time Theorem generation",shortDesc:()=>GlyphAlteration.isAdded("dilation")?"{value} TT/hr and TTgen ×{value2}":"{value} TT/hr",effect:(e,t)=>Math.pow(e*t,.5)/1e4,formatEffect:e=>format(3600*e,2,2),combine:ee.add,conversion:e=>Math.clampMin(Math.pow(1e4*e,1.6),1),formatSecondaryEffect:e=>format(e,2,2),alteredColor:()=>GlyphAlteration.getAdditionColor("dilation"),alterationType:ALTERATION_TYPE.ADDITION,enabledInDoomedWithlvl25:!0},dilationpow:{id:"dilationpow",bitmaskIndex:7,isGenerated:!0,glyphTypes:["dilation"],singleDesc:"Antimatter Dimension power +{value} while Dilated",totalDesc:"Antimatter Dimension multipliers ^{value} while Dilated",genericDesc:"Antimatter Dimensions ^x while Dilated",shortDesc:"Dilated AD power +{value}",effect:(e,t)=>1.1+Math.pow(e,.7)*Math.pow(t,.7)/25,formatEffect:e=>format(e,2,2),formatSingleEffect:e=>format(e-1,2,2),combine:ee.addExponents,enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},replicationspeed:{id:"replicationspeed",bitmaskIndex:8,isGenerated:!0,glyphTypes:["replication"],singleDesc:"Multiply Replication speed by {value}",totalDesc:"Replication speed ×{value}",genericDesc:"Replication speed multiplier",shortDesc:"Replication speed ×{value}",effect:(e,t)=>{let i=GlyphAlteration.isEmpowered("replication")?b.D1_007.pow(e).times(10):Decimal.times(e,t).times(3);return i.gte(new Decimal("1e600"))?i.pow(.45):i},formatEffect:e=>format(e,2,1),combine:e=>{let t=e.reduce(Decimal.prodReducer,b.D1);return t.gte(new Decimal("1e600"))?t.div(new Decimal("1e600")).pow(.45).times(new Decimal("1e600")):t},alteredColor:()=>GlyphAlteration.getEmpowermentColor("replication"),alterationType:ALTERATION_TYPE.EMPOWER,enabledInDoomedWithlvl25:!0},replicationpow:{id:"replicationpow",bitmaskIndex:9,isGenerated:!0,glyphTypes:["replication"],singleDesc:"Replicanti multiplier power +{value}",totalDesc:"Replicanti multiplier ^{value}",shortDesc:"Replicanti mult. power +{value}",effect:(e,t)=>1.1+Math.pow(e,.5)*t/25+3*GlyphAlteration.sacrificeBoost("replication"),formatEffect:e=>format(e,2,2),formatSingleEffect:e=>format(e-1,2,2),combine:ee.addExponents,alteredColor:()=>GlyphAlteration.getBoostColor("replication"),alterationType:ALTERATION_TYPE.BOOST,enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},replicationdtgain:{id:"replicationdtgain",bitmaskIndex:10,isGenerated:!0,glyphTypes:["replication"],singleDesc:()=>GlyphAlteration.isAdded("replication")?`Multiply Dilated Time \n[and Replicanti speed] by \n+{value} per ${format(b.E10000)} replicanti`:`Multiply Dilated Time gain by \n+{value} per ${format(b.E10000)} replicanti`,totalDesc:()=>GlyphAlteration.isAdded("replication")?`Multiply Dilated Time and Replication speed by +{value} per ${format(b.E10000)} replicanti`:`Multiply Dilated Time gain by +{value} per ${format(b.E10000)} replicanti`,genericDesc:()=>GlyphAlteration.isAdded("replication")?"Dilated Time+Replicanti mult from replicanti":"Dilated Time gain multiplier from replicanti",shortDesc:()=>GlyphAlteration.isAdded("replication")?`×DT and repl. by +{value} per ${format(b.E10000)} replicanti`:`×DT by +{value} per ${format(b.E10000)} replicanti`,effect:(e,t)=>3e-4*Math.pow(e,.3)*Math.pow(t,.65),formatEffect:e=>format(1e4*e,2,2),formatSingleEffect:e=>format(1e4*e,2,2),combine:e=>({value:0===e.length?0:e.reduce(Number.prodReducer,Math.pow(1e-4,1-e.length)),capped:!1}),conversion:e=>e,formatSecondaryEffect:e=>format(e,2,3),formatSingleSecondaryEffect:e=>format(e,5,5),alteredColor:()=>GlyphAlteration.getAdditionColor("replication"),alterationType:ALTERATION_TYPE.ADDITION,enabledInDoomedWithlvl25:!0},replicationglyphlevel:{id:"replicationglyphlevel",bitmaskIndex:11,isGenerated:!0,glyphTypes:["replication"],singleDesc:()=>`Replicanti factor for Glyph level:\n ^${format(.4,1,1)}\n ➜ ^(${format(.4,1,1)} + {value})`,totalDesc:()=>`Replicanti factor for Glyph level: ^${format(.4,1,1)}\n ➜ ^(${format(.4,1,1)} + {value})`,genericDesc:"Replicanti factor for Glyph level",shortDesc:"Replicanti pow. for level +{value}",effect:(e,t)=>Math.pow(Math.pow(e,.25)*Math.pow(t,.4),.5)/50,formatEffect:e=>format(e,3,3),combine:e=>{let t=e.reduce(Number.sumReducer,0);return e.length>2&&(t*=6/(e.length+4)),t>.1?{value:.1+.2*(t-.1),capped:!0}:{value:t,capped:e.length>2}},enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},infinitypow:{id:"infinitypow",bitmaskIndex:12,isGenerated:!0,glyphTypes:["infinity"],singleDesc:"Infinity Dimension power +{value}",totalDesc:"Infinity Dimension multipliers ^{value}",shortDesc:"ID power +{value}",effect:(e,t)=>{let i=1.007+Math.pow(e,.21)*Math.pow(t,.4)/75+GlyphAlteration.sacrificeBoost("infinity")/50;return i},formatEffect:e=>format(e,3,3),formatSingleEffect:e=>format(e-1,3,3),combine:e=>{let t=e.reduce(Number.sumReducer,1-e.length);return t>1?(t-1)/3+1:t},alteredColor:()=>GlyphAlteration.getBoostColor("infinity"),alterationType:ALTERATION_TYPE.BOOST,enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},infinityrate:{id:"infinityrate",bitmaskIndex:13,isGenerated:!0,glyphTypes:["infinity"],singleDesc:()=>`Infinity Power conversion rate: \n^${formatInt(7)}\n ➜ ^(${formatInt(7)} + {value})`,totalDesc:()=>`Infinity Power conversion rate: ^${formatInt(7)}\n ➜ ^(${formatInt(7)} + {value})`,genericDesc:"Infinity Power conversion rate",shortDesc:"Infinity Power conversion +{value}",effect:(e,t)=>{let i=Math.pow(e,.2)*Math.pow(t,.4)*.04;return i},formatEffect:e=>format(e,2,2),combine:e=>{let t=e.reduce(Number.sumReducer,0);return t>.5?(t-.5)/20+.5:t},enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},infinityIP:{id:"infinityIP",bitmaskIndex:14,isGenerated:!0,glyphTypes:["infinity"],singleDesc:()=>GlyphAlteration.isAdded("infinity")?"Infinity Point gain \n×{value} [and ^]{value2}":"Multiply Infinity Point gain by {value}",totalDesc:()=>GlyphAlteration.isAdded("infinity")?"Infinity Point gain ×{value} and ^{value2}":"Infinity Point gain ×{value}",genericDesc:()=>GlyphAlteration.isAdded("infinity")?"Infinity Point gain multiplier and power":"Infinity Point gain multiplier",shortDesc:()=>GlyphAlteration.isAdded("infinity")?"IP ×{value} and ^{value2}":"IP ×{value}",effect:(e,t)=>1e4*Math.pow(e*(t+1),6),formatEffect:e=>format(e,2,3),combine:ee.multiply,softcap:e=>void 0!==Effarig.eternityCap?Math.min(e,Effarig.eternityCap.toNumber()):e,conversion:e=>1+Math.log10(e)/1800,formatSecondaryEffect:e=>format(e,4,4),alteredColor:()=>GlyphAlteration.getAdditionColor("infinity"),alterationType:ALTERATION_TYPE.ADDITION,enabledInDoomedWithlvl25:!0},infinityinfmult:{id:"infinityinfmult",bitmaskIndex:15,isGenerated:!0,glyphTypes:["infinity"],singleDesc:"Multiply Infinity gain by {value}",totalDesc:"Infinity gain ×{value}",genericDesc:"Infinity gain multiplier",shortDesc:"Infinities ×{value}",effect:(e,t)=>GlyphAlteration.isEmpowered("infinity")?b.D1_02.pow(e):Decimal.pow(e*t,1.5).times(2),formatEffect:e=>format(e,2,1),combine:ee.multiplyDecimal,alteredColor:()=>GlyphAlteration.getEmpowermentColor("infinity"),alterationType:ALTERATION_TYPE.EMPOWER,enabledInDoomedWithlvl25:!0},powerpow:{id:"powerpow",bitmaskIndex:16,isGenerated:!0,glyphTypes:["power"],singleDesc:()=>GlyphAlteration.isAdded("power")?"Antimatter Dimension power +{value}\n[and Antimatter Galaxy cost ×]{value2}":"Antimatter Dimension power +{value}",totalDesc:()=>GlyphAlteration.isAdded("power")?"Antimatter Dimension multipliers ^{value} and Antimatter Galaxy cost ×{value2}":"Antimatter Dimension multipliers ^{value}",genericDesc:()=>GlyphAlteration.isAdded("power")?"Antimatter Dimensions multipliers ^x and Antimatter Galaxy cost multiplier":"Antimatter Dimension multipliers ^x",shortDesc:()=>GlyphAlteration.isAdded("power")?"AD power +{value} and AG cost ×{value2}":"AD power +{value}",effect:(e,t)=>1.015+Math.pow(e,.2)*Math.pow(t,.4)/75,formatEffect:e=>format(e,3,3),formatSingleEffect:e=>format(e-1,3,3),combine:e=>{let t=e.reduce(Number.sumReducer,1-e.length);return t>.6?(t-1)/6+1:t},conversion:e=>2/(e+1),formatSecondaryEffect:e=>format(e,3,3),alteredColor:()=>GlyphAlteration.getAdditionColor("power"),alterationType:ALTERATION_TYPE.ADDITION,enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},powermult:{id:"powermult",bitmaskIndex:17,isGenerated:!0,glyphTypes:["power"],singleDesc:"Antimatter Dimension multipliers ×{value}",shortDesc:"AD ×{value}",effect:(e,t)=>GlyphAlteration.isEmpowered("power")?b.D11111.pow(220*e):Decimal.pow(e*t*10,e*t*10),formatEffect:e=>formatPostBreak(e,2,0),combine:ee.multiplyDecimal,alteredColor:()=>GlyphAlteration.getEmpowermentColor("power"),alterationType:ALTERATION_TYPE.EMPOWER,enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},powerdimboost:{id:"powerdimboost",bitmaskIndex:18,isGenerated:!0,glyphTypes:["power"],singleDesc:"Dimension Boost multiplier ×{value}",genericDesc:"Dimension Boost multiplier",shortDesc:"Dimboost mult. ×{value}",effect:(e,t)=>Math.pow(e*t,.5)*Math.pow(1+GlyphAlteration.sacrificeBoost("power"),3),formatEffect:e=>format(e,2,2),combine:ee.multiply,alteredColor:()=>GlyphAlteration.getBoostColor("power"),alterationType:ALTERATION_TYPE.BOOST,enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},powerbuy10:{id:"powerbuy10",bitmaskIndex:19,isGenerated:!0,glyphTypes:["power"],singleDesc:()=>`Increase the bonus from buying ${formatInt(10)} Antimatter Dimensions by {value}`,totalDesc:()=>`Multiplier from "Buy ${formatInt(10)}" ×{value}`,genericDesc:()=>`"Buy ${formatInt(10)}" bonus increase`,shortDesc:()=>`AD "Buy ${formatInt(10)}" mult. ×{value}`,effect:(e,t)=>1+e*t/12,formatEffect:e=>format(e,2,2),combine:ee.addExponents,enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},effarigrm:{id:"effarigrm",bitmaskIndex:20,isGenerated:!0,glyphTypes:["effarig"],singleDesc:()=>Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked?"Reality Machine multiplier ×{value} [and\nImaginary Machine cap] ×{value.pow(0.5)}":"Reality Machine multiplier ×{value}",genericDesc:()=>Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked?"Reality Machine and Imaginary Machine cap multiplier":"Reality Machine multiplier",shortDesc:()=>Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked?"RM ×{value} and iM cap ×{value.pow(0.5)}":"RM ×{value}",effect:(e,t)=>GlyphAlteration.isEmpowered("effarig")?Math.pow(e,1.5):Math.pow(e,.6)*t,formatEffect:e=>format(e,2,2),combine:ee.multiply,alteredColor:()=>GlyphAlteration.getEmpowermentColor("effarig"),alterationType:ALTERATION_TYPE.EMPOWER},effarigglyph:{id:"effarigglyph",bitmaskIndex:21,isGenerated:!0,glyphTypes:["effarig"],singleDesc:"Glyph Instability starting level +{value}",genericDesc:"Glyph Instability delay",shortDesc:"Instability delay +{value}",effect:(e,t)=>{let i=Math.floor(10*Math.pow(e*t,.5));return i},formatEffect:e=>formatInt(e),combine:e=>{let t=e.reduce(Number.sumReducer,0);return t>5e3?(t-5e3)/5+5e3:t}},effarigblackhole:{id:"effarigblackhole",bitmaskIndex:22,isGenerated:!0,glyphTypes:["effarig"],singleDesc:"Game speed power +{value}",totalDesc:"Game speed ^{value}",genericDesc:"Game speed ^x",shortDesc:"Game speed power +{value}",effect:(e,t)=>{let i=1+Math.pow(e,.25)*Math.pow(t,.4)/75;return i},formatEffect:e=>format(e,3,3),formatSingleEffect:e=>format(e-1,3,3),combine:e=>{let t=e.reduce(Number.sumReducer,1-e.length);return t>1.4?(t-1.4)/200+1.4:t}},effarigachievement:{id:"effarigachievement",bitmaskIndex:23,isGenerated:!0,glyphTypes:["effarig"],singleDesc:"Achievement multiplier power +{value}",totalDesc:"Achievement multiplier ^{value}",genericDesc:"Achievement multiplier ^x",shortDesc:"Achievement mult. power +{value}",effect:(e,t)=>1+Math.pow(e,.4)*Math.pow(t,.6)/60+GlyphAlteration.sacrificeBoost("effarig")/10,formatEffect:e=>format(e,3,3),formatSingleEffect:e=>format(e-1,3,3),combine:ee.addExponents,alteredColor:()=>GlyphAlteration.getBoostColor("effarig"),alterationType:ALTERATION_TYPE.BOOST},effarigforgotten:{id:"effarigforgotten",bitmaskIndex:24,isGenerated:!0,glyphTypes:["effarig"],singleDesc:()=>GlyphAlteration.isAdded("effarig")?`"Buy ${formatInt(10)}" multiplier ^{value} [and\nDimension Boost multiplier ^]{value2}`:`Bonus from buying ${formatInt(10)} Dimensions ^{value}`,totalDesc:()=>GlyphAlteration.isAdded("effarig")?`Multiplier from "Buy ${formatInt(10)}" ^{value} and Dimension Boost multiplier ^{value2}`:`Multiplier from "Buy ${formatInt(10)}" ^{value}`,genericDesc:()=>GlyphAlteration.isAdded("effarig")?`"Buy ${formatInt(10)}" and Dimension Boost multipliers ^x`:`"Buy ${formatInt(10)}" multiplier ^x`,shortDesc:()=>GlyphAlteration.isAdded("effarig")?`Buy ${formatInt(10)} mult. ^{value}, Dimboost mult. ^{value2}`:`Buy ${formatInt(10)} mult. ^{value}`,effect:(e,t)=>{let i=1+2*Math.pow(e,.25)*Math.pow(t,.4);return i},formatEffect:e=>format(e,2,2),combine:e=>{let t=e.reduce(Number.sumReducer,0);return t>100?(t-100)/5+100:t},conversion:e=>Math.pow(e,.4),formatSecondaryEffect:e=>format(e,2,2),alteredColor:()=>GlyphAlteration.getAdditionColor("effarig"),alterationType:ALTERATION_TYPE.ADDITION},effarigdimensions:{id:"effarigdimensions",bitmaskIndex:25,isGenerated:!0,glyphTypes:["effarig"],singleDesc:"All Dimension power +{value}",totalDesc:"All Dimension multipliers ^{value}",genericDesc:"All Dimension multipliers ^x",shortDesc:"All Dimension power +{value}",effect:(e,t)=>1+Math.pow(e,.25)*Math.pow(t,.4)/500,formatEffect:e=>format(e,3,3),formatSingleEffect:e=>format(e-1,3,3),combine:ee.addExponents},effarigantimatter:{id:"effarigantimatter",bitmaskIndex:26,isGenerated:!0,glyphTypes:["effarig"],singleDesc:()=>`Antimatter production:\n${formatInt(10)}^x ➜ ${formatInt(10)}^(x^{value})`,genericDesc:"Antimatter production exponent power",shortDesc:"AM production exponent ^{value}",effect:(e,t)=>{let i=1+Math.pow(e,.25)*Math.pow(t,.4)/5e3;return i},formatEffect:e=>format(e,4,4),combine:e=>{let t=e.reduce(Number.prodReducer,1);return t>1.01?(t-1.01)/5+1.01:t}},timeshardpow:{id:"timeshardpow",bitmaskIndex:27,isGenerated:!0,glyphTypes:[],singleDesc:"Time Shard power +{value}",totalDesc:"Time Shard gain ^{value}",genericDesc:"Time Shards ^x",shortDesc:"Time Shard power +{value}",effect:(e,t)=>1+t/3.5*Math.pow(e,.35)/400,formatEffect:e=>format(e,3,3),formatSingleEffect:e=>format(e-1,3,3),combine:ee.addExponents,enabledInDoomed:!0,enabledInDoomedWithlvl25:!0},cursedgalaxies:{id:"cursedgalaxies",bitmaskIndex:0,isGenerated:!1,glyphTypes:["cursed"],singleDesc:"All Galaxies are {value} weaker",totalDesc:"All Galaxy strength -{value}",shortDesc:"Galaxy Strength -{value}",effect:e=>Math.pow(e,-.03),formatEffect:e=>formatPercents(1-e,2),combine:ee.multiply},curseddimensions:{id:"curseddimensions",bitmaskIndex:1,isGenerated:!1,glyphTypes:["cursed"],singleDesc:"All Dimension multipliers ^{value}",shortDesc:"All Dimensions ^{value}",effect:e=>Math.pow(e,-.035),formatEffect:e=>format(e,3,3),combine:ee.multiply},cursedtickspeed:{id:"cursedtickspeed",bitmaskIndex:2,isGenerated:!1,glyphTypes:["cursed"],singleDesc:"The threshold for Tickspeed Upgrades from Time Dimensions is multiplied by ×{value}",totalDesc:"The threshold for Tickspeed Upgrades from Time Dimensions is increased by ×{value}",shortDesc:"TD Tickspeed threshold ×{value}",effect:e=>Math.clampMin(Math.log10(e),1),formatEffect:e=>format(e,3,3),combine:ee.add},cursedEP:{id:"cursedEP",bitmaskIndex:3,isGenerated:!1,glyphTypes:["cursed"],singleDesc:"Divide Eternity Point gain by {value}",totalDesc:"Eternity Point gain / {value}",shortDesc:"EP / {value}",effect:e=>Decimal.pow10(-e/10),formatEffect:e=>format(e.reciprocal()),combine:ee.multiplyDecimal},realityglyphlevel:{id:"realityglyphlevel",bitmaskIndex:4,isGenerated:!1,glyphTypes:["reality"],singleDesc:"Increase the effective level of equipped basic Glyphs by {value}",totalDesc:"Equipped basic Glyph level +{value}",shortDesc:"Basic Glyph Level +{value}",effect:e=>Math.floor(Math.sqrt(90*e)),formatEffect:e=>formatInt(e),combine:ee.add},realitygalaxies:{id:"realitygalaxies",bitmaskIndex:5,isGenerated:!1,glyphTypes:["reality"],singleDesc:"All Galaxies are {value} stronger",totalDesc:"All Galaxy strength +{value}",shortDesc:"Galaxy Strength +{value}",effect:e=>{let t=1+Math.pow(e/1e5,.5);return t},formatEffect:e=>formatPercents(e-1,2),combine:e=>{let t=e.reduce(Number.prodReducer,1);return t>=1.6?(t-1.6)/4+1.6:t}},realityrow1pow:{id:"realityrow1pow",bitmaskIndex:6,isGenerated:!1,glyphTypes:["reality"],singleDesc:"Multiplier from Reality Upgrade Amplifiers ^{value}",totalDesc:"Reality Upgrade Amplifier multiplier ^{value}",shortDesc:"Amplifier Multiplier ^{value}",effect:e=>{let t=1+e/125e3;return t>1.2?t**.2:t},formatEffect:e=>format(e,3,3),combine:ee.addExponents},realityDTglyph:{id:"realityDTglyph",bitmaskIndex:7,isGenerated:!1,glyphTypes:["reality"],singleDesc:()=>`Dilated Time factor for Glyph level: \n^${format(1.3,1,1)}\n ➜ ^(${format(1.3,1,1)} + {value})`,totalDesc:()=>`Dilated Time factor for Glyph level: ^${format(1.3,1,1)}\n ➜ ^(${format(1.3,1,1)} + {value})`,genericDesc:"Dilated Time factor for Glyph level",shortDesc:"DT pow. for level +{value}",effect:()=>.1,formatEffect:e=>format(e,2,2),combine:ee.add},companiondescription:{id:"companiondescription",bitmaskIndex:8,isGenerated:!1,glyphTypes:["companion"],singleDesc:"It does nothing but sit there and cutely smile at you, whisper into your dreams politely, and plot the demise of all who stand against you. This one-of-a-kind Glyph will never leave you.",totalDesc:"+{value} happiness",shortDesc:"Doesn't want to hurt you",effect:()=>{if(Enslaved.isRunning)return 0;const e=Glyphs.active.countWhere((e=>"cursed"===(null===e||void 0===e?void 0:e.type)));return e>0?Math.pow(.2+.2*Math.random(),e):.4+.6*Math.random()},formatEffect:e=>formatPercents(e,2,2),combine:ee.add,enabledInDoomed:!0},companionEP:{id:"companionEP",bitmaskIndex:9,isGenerated:!1,glyphTypes:["companion"],singleDesc:"Thanks for your dedication for the game! You reached {value} Eternity Points on your first Reality.",shortDesc:"It loves you very, very much",totalDesc:()=>Enslaved.isRunning||Glyphs.active.countWhere((e=>"cursed"===(null===e||void 0===e?void 0:e.type)))?"Help me":"Yay!",effect:(e,t)=>Decimal.pow10(1e6*strengthToRarity(t)),formatEffect:e=>formatPostBreak(e,2),combine:ee.multiplyDecimal,enabledInDoomed:!0}},ie={power:{id:"power",effect:e=>{if(Pelle.isDisabled("glyphsac"))return 0;const t=player.reality.glyphs.sac.power.add(null!==e&&void 0!==e?e:0),i=Decimal.clampMax(t,GlyphSacrificeHandler.maxSacrificeForEffects),a=Decimal.log10(i.add(1))/Decimal.log10(1e100);return Decimal.floor(Decimal.pow(a,1.2).mul(750)).toNumber()},description:e=>{const t=1e100,i=Math.pow(10,Math.pow((e+1)/750,1/1.2)*Math.log10(t))-1,a=e<(Ra.unlocks.uncapGlyphSacEffects.isUnlocked?1e7:750)?` (next at ${format(i,2,2)})`:"";return`Distant Galaxy scaling starts ${formatInt(e)} later${a}`},cap:()=>GlyphSacrificeHandler.maxSacrificeForEffects.toNumber()},infinity:{id:"infinity",effect:e=>{if(Pelle.isDisabled("glyphsac"))return b.D1;const t=player.reality.glyphs.sac.infinity.add(null!==e&&void 0!==e?e:0),i=Decimal.clampMax(t,GlyphSacrificeHandler.maxSacrificeForEffects);return new Decimal(1+Decimal.log10(Decimal.pow(i,.2).div(100).add(1)))},description:e=>`${formatX(e,2,2)} bigger multiplier when buying 8th Infinity Dimension`,cap:()=>GlyphSacrificeHandler.maxSacrificeForEffects},time:{id:"time",effect:e=>{if(Pelle.isDisabled("glyphsac"))return b.D1;const t=player.reality.glyphs.sac.time.add(null!==e&&void 0!==e?e:0),i=Decimal.clampMax(t,GlyphSacrificeHandler.maxSacrificeForEffects);return Decimal.pow(Decimal.pow(i,.2).div(100).add(1),2)},description:e=>`${formatX(e,2,2)} bigger multiplier when buying 8th Time Dimension`,cap:()=>GlyphSacrificeHandler.maxSacrificeForEffects},replication:{id:"replication",effect:e=>{if(Pelle.isDisabled("glyphsac"))return 0;const t=player.reality.glyphs.sac.replication.add(null!==e&&void 0!==e?e:0),i=Decimal.clampMax(t,GlyphSacrificeHandler.maxSacrificeForEffects),a=Decimal.log10(i.add(1))/Decimal.log10(1e100);return Decimal.floor(Decimal.pow(a,1.2).mul(1500)).toNumber()},description:e=>{const t=1e100,i=Math.pow(10,Math.pow((e+1)/1500,1/1.2)*Math.log10(t))-1,a=e<(Ra.unlocks.uncapGlyphSacEffects.isUnlocked?1e7:1500)?` (next at ${format(i,2,2)})`:"";return`Replicanti Galaxy scaling starts ${formatInt(e)} later${a}`},cap:()=>GlyphSacrificeHandler.maxSacrificeForEffects.toNumber()},dilation:{id:"dilation",effect:e=>{if(Pelle.isDisabled("glyphsac"))return b.D1;const t=player.reality.glyphs.sac.dilation.add(null!==e&&void 0!==e?e:0),i=Decimal.clampMax(t,GlyphSacrificeHandler.maxSacrificeForEffects),a=.32*Math.pow(Decimal.log10(i.add(1))/Decimal.log10(GlyphSacrificeHandler.maxSacrificeForEffects),.1);return Decimal.pow(Decimal.clampMin(i,1),a)},description:e=>`Multiply Tachyon Particle gain by ${formatX(e,2,2)}`,cap:()=>GlyphSacrificeHandler.maxSacrificeForEffects},effarig:{id:"effarig",effect:e=>{if(Pelle.isDisabled("glyphsac"))return b.D0;const t=player.reality.glyphs.sac.effarig.add(null!==e&&void 0!==e?e:0),i=Decimal.clampMax(t,b.E70);return new Decimal(2*Decimal.log10(i.div(1e20).add(1)))},description:e=>`+${formatPercentsD(e.div(100),2)} additional Glyph rarity`,cap:()=>1e70},reality:{id:"reality",effect:e=>{if(Pelle.isDisabled("glyphsac"))return 0;const t=player.reality.glyphs.sac.reality.add(null!==e&&void 0!==e?e:0);return Decimal.clampMax(Decimal.sqrt(t).div(15).add(1),100).toNumber()},description:e=>`Multiply Memory Chunk gain by ${formatX(e,2,3)}`,cap:()=>GlyphSacrificeHandler.maxSacrificeForEffects.toNumber()}},ae=e=>{e.cost=()=>e.initialCost*Math.pow(e.costMult,player.reality.imaginaryRebuyables[e.id]),6==e.id&&(e.cost=()=>player.celestials.ra.upgrades.has("teresaUpgrade")?Math.pow(e.initialCost*Math.pow(e.costMult,player.reality.imaginaryRebuyables[e.id]),.85):e.initialCost*Math.pow(e.costMult,player.reality.imaginaryRebuyables[e.id]));const{effect:t}=e;return e.isDecimal?e.effect=()=>Decimal.pow(t,player.reality.imaginaryRebuyables[e.id]):e.effect=()=>t*Math.min(player.reality.imaginaryRebuyables[e.id],10),e.formatEffect||(e.formatEffect=e=>`+${format(e,2,2)}`),e.formatCost=e=>format(e,2,0),e},ne=[ae({name:"Temporal Intensifier",id:1,initialCost:3,costMult:60,description:()=>`Increase Temporal Amplifier multiplier by +${format(.15,2,2)}`,effect:.15}),ae({name:"Replicative Intensifier",id:2,initialCost:4,costMult:60,description:()=>`Increase Replicative Amplifier multiplier by +${format(.15,2,2)}`,effect:.15}),ae({name:"Eternal Intensifier",id:3,initialCost:1,costMult:40,description:()=>`Increase Eternal Amplifier multiplier by +${format(.4,2,2)}`,effect:.4}),ae({name:"Superluminal Intensifier",id:4,initialCost:5,costMult:80,description:()=>`Increase Superluminal Amplifier multiplier by +${format(.15,2,2)}`,effect:.15}),ae({name:"Boundless Intensifier",id:5,initialCost:1,costMult:30,description:()=>`Increase Boundless Amplifier multiplier by +${format(.6,2,2)}`,effect:.6}),ae({name:"Elliptic Materiality",id:6,initialCost:1e4,costMult:500,description:()=>`Increase the Reality Machine cap by ${formatX(1e100)}`,effect:1e100,formatEffect:e=>`${formatX(e)}`,isDecimal:!0}),ae({name:"Runic Assurance",id:7,initialCost:2e5,costMult:500,description:()=>`Delay Glyph Instability starting level by ${formatInt(200)}`,effect:200,formatEffect:e=>`+${formatInt(e)} levels`}),ae({name:"Hyperbolic Apeirogon",id:8,initialCost:1e7,costMult:800,description:()=>`Multiply Infinity Dimensions by ${format("1e100000")}`,effect:b.E100000,formatEffect:e=>`${formatX(e)}`,isDecimal:!0}),ae({name:"Cosmic Filament",id:9,initialCost:1e9,costMult:1e3,description:()=>"Increase Galaxy strength",effect:.03,formatEffect:e=>`+${formatPercents(e)}`}),ae({name:"Entropic Condensing",id:10,initialCost:8e9,costMult:2e3,description:()=>"Increase Singularity gain",effect:1,formatEffect:e=>Ra.unlocks.dmdScaling.isUnlocked?`${formatX(1+Math.pow(2,e),2)}`:`${formatX(1+e,2)}`}),{name:"Suspicion of Interference",id:11,cost:5e7,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`${format(1e90)} total Relic Shards\n (You have ${format(player.celestials.effarig.relicShards,2)})`,hasFailed:()=>!1,checkRequirement:()=>player.celestials.effarig.relicShards.gte(1e90),checkEvent:GAME_EVENT.REALITY_RESET_AFTER,description:"Time Dimension power based on total antimatter",effect:()=>1+Math.log10(player.records.totalAntimatter.log10())/100,formatEffect:e=>`${formatPow(e,0,4)}`,isDisabledInDoomed:!0},{name:"Consequences of Illusions",id:12,cost:5e7,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Make a level ${formatInt(9e3)} Glyph with a single Glyph level factor weight at\n ${formatInt(100)}`,hasFailed:()=>!1,checkRequirement:()=>Object.values(player.celestials.effarig.glyphWeights).some((e=>100===e))&&gainedGlyphLevel().actualLevel>=9e3,checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,description:"Gain free Dimboosts based on Imaginary rebuyable count",effect:()=>2e4*ImaginaryUpgrades.totalRebuyables,formatEffect:e=>`${format(e,1)}`,isDisabledInDoomed:!0},{name:"Transience of Information",id:13,cost:5e7,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Reach ${format(Number.MAX_VALUE,2)} projected Reality Machines within\n The Nameless Ones' Reality`,hasFailed:()=>!Enslaved.isRunning,checkRequirement:()=>Enslaved.isRunning&&MachineHandler.uncappedRM.times(simulatedRealityCount(!1)+1).gte(Number.MAX_VALUE),checkEvent:GAME_EVENT.GAME_TICK_AFTER,description:"Increase Imaginary Machine Cap based on Imaginary Upgrades purchased",effect:()=>1+ImaginaryUpgrades.totalRebuyables/20+ImaginaryUpgrades.totalSinglePurchase/2,formatEffect:e=>`${formatX(e,2,1)}`,isDisabledInDoomed:!0},{name:"Recollection of Intrusion",id:14,cost:35e7,formatCost:e=>format(e,1),requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Reach a tickspeed of ${format("1e75000000000")} / sec within Eternity Challenge 5`,hasFailed:()=>!1,checkRequirement:()=>EternityChallenge(5).isRunning&&Tickspeed.perSecond.exponent>=75e9,checkEvent:GAME_EVENT.GAME_TICK_AFTER,description:()=>`Raise all Dimension per-purchase multipliers to ${formatPow(1.5,0,1)}`,effect:1.5,isDisabledInDoomed:!0},{name:"Fabrication of Ideals",id:15,cost:1e9,requirement:()=>MendingMilestone.eight.isReached?"None (20 Mend Milestone)":`Reach ${format("1e1500000000000")} antimatter without\n ever having any 1st Infinity Dimensions`,hasFailed:()=>player.requirementChecks.reality.maxID1.gt(0),checkRequirement:()=>player.requirementChecks.reality.maxID1.eq(0)&&player.antimatter.exponent>=15e11,checkEvent:GAME_EVENT.GAME_TICK_AFTER,canLock:!0,description:()=>(Pelle.isDoomed?"Unlock":"Convert Antimatter Dimensions to Continuum and unlock")+" Lai'tela, Celestial of Dimensions"},{name:"Massless Momentum",id:16,cost:35e8,formatCost:e=>format(e,1),requirement:()=>MendingMilestone.eight.isReached?"None (20 Mend Milestone)":`Destabilize Lai'tela's Reality in under ${formatInt(30)} seconds twice`,hasFailed:()=>!1,checkRequirement:()=>Laitela.maxAllowedDimension<=6,checkEvent:GAME_EVENT.GAME_TICK_AFTER,description:"Unlock the 2nd Dark Matter Dimension"},{name:"Chiral Oscillation",id:17,cost:6e9,requirement:()=>MendingMilestone.eight.isReached?"None (20 Mend Milestone)":`Automatically condense at least ${formatInt(20)} Singularities at once and have the 2nd Dark Matter Dimension`,hasFailed:()=>!1,checkRequirement:()=>Singularity.singularitiesGained>=20&&Currency.darkEnergy.gte(Singularity.cap*SingularityMilestone.autoCondense.effectOrDefault(1/0))&&ImaginaryUpgrade(16).isBought,checkEvent:GAME_EVENT.SINGULARITY_RESET_BEFORE,description:"Unlock the 3rd Dark Matter Dimension"},{name:"Dimensional Symmetry",id:18,cost:15e9,formatCost:e=>format(e,1),requirement:()=>MendingMilestone.eight.isReached?"None (20 Mend Milestone)":`Have ${formatInt(8e4)} total Galaxies and have the 3rd Dark Matter Dimension`,hasFailed:()=>!1,checkRequirement:()=>Replicanti.galaxies.total+player.galaxies+player.dilation.totalTachyonGalaxies>=8e4&&ImaginaryUpgrade(17).isBought,checkEvent:GAME_EVENT.GAME_TICK_AFTER,description:"Unlock the 4th Dark Matter Dimension"},{name:"Deterministic Radiation",id:19,cost:28e9,formatCost:e=>format(e,1),requirement:()=>MendingMilestone.eight.isReached?"None (20 Mend Milestone)":`Reach ${formatInt(385e4)} Tickspeed Continuum without ever having more than\n ${formatInt(8)} Time Studies in this Reality`,hasFailed:()=>player.requirementChecks.reality.maxStudies>8,checkRequirement:()=>player.requirementChecks.reality.maxStudies<=8&&Tickspeed.continuumValue>=385e4,checkEvent:GAME_EVENT.GAME_TICK_AFTER,canLock:!0,lockEvent:()=>`purchase more than ${formatInt(8)} Time Studies`,description:"Unlock Dark Matter Annihilation"},{name:"Vacuum Acceleration",id:20,cost:3e12,requirement:()=>MendingMilestone.eight.isReached?"None (20 Mend Milestone)":`Have a Continuum increase of at least ${formatPercents(1)}`,hasFailed:()=>!1,checkRequirement:()=>Laitela.matterExtraPurchaseFactor>=2,checkEvent:GAME_EVENT.GAME_TICK_AFTER,description:()=>`Unlock Autobuyers for repeatable Imaginary Upgrades and generate Imaginary Machines\n ${formatInt(10)} times faster`,effect:10,isDisabledInDoomed:!0},{name:"Existential Elimination",id:21,cost:1e13,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Reach ${format("1e7400000000000")} antimatter with Continuum disabled for the entire Reality`,hasFailed:()=>!player.requirementChecks.reality.noContinuum,checkRequirement:()=>player.requirementChecks.reality.noContinuum&&Currency.antimatter.value.log10()>=74e11,checkEvent:GAME_EVENT.GAME_TICK_AFTER,canLock:!0,lockEvent:"enable Continuum",description:"Annihilation multiplier gain is improved based on Imaginary Machines",effect:()=>Math.clampMin(Math.pow(Math.log10(Currency.imaginaryMachines.value)-10,3),1),formatEffect:e=>`${formatX(e,2,1)}`,isDisabledInDoomed:!0},{name:"Total Termination",id:22,cost:15e13,formatCost:e=>format(e,1),requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Reach ${format("1e150000000000")} antimatter in Effarig's Reality with\n at least ${formatInt(4)} Cursed Glyphs equipped`,hasFailed:()=>!Effarig.isRunning||player.requirementChecks.reality.maxGlyphs>-10,checkRequirement:()=>Effarig.isRunning&&player.requirementChecks.reality.maxGlyphs<-10&&Currency.antimatter.value.exponent>=15e10,checkEvent:GAME_EVENT.GAME_TICK_AFTER,description:()=>`All Glyph Sacrifice totals are increased to ${format(1e100)}`,effect:b.E100,isDisabledInDoomed:!0},{name:"Planar Purification",id:23,cost:6e14,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Reach Glyph level ${formatInt(2e4)} in Ra's Reality with\n at most ${formatInt(0)} Glyphs equipped`,hasFailed:()=>!Ra.isRunning||player.requirementChecks.reality.maxGlyphs>0,checkRequirement:()=>Ra.isRunning&&player.requirementChecks.reality.maxGlyphs<=0&&gainedGlyphLevel().actualLevel>=2e4,checkEvent:GAME_EVENT.GAME_TICK_AFTER,description:"Increase free Dimboost count based on Tesseract count",effect:()=>Math.max(Math.floor(.25*Math.pow(Tesseracts.effectiveCount,2)),1),formatEffect:e=>`${formatX(e)}`,isDisabledInDoomed:!0},{name:"Absolute Annulment",id:24,cost:6e14,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Have ${formatInt(13e3)} Antimatter Galaxies in Ra's Reality\n with a fully inverted Black Hole`,hasFailed:()=>!Ra.isRunning||player.requirementChecks.reality.slowestBH>1e-300,checkRequirement:()=>Ra.isRunning&&player.requirementChecks.reality.slowestBH<=1e-300&&player.galaxies>=13e3,checkEvent:GAME_EVENT.GAME_TICK_AFTER,canLock:!0,description:"Increase free Dimboost strength based on Singularity count",effect:()=>Decimal.pow(player.celestials.laitela.singularities,300).clampMin(1),formatEffect:e=>`${formatX(e,2,1)}`,isDisabledInDoomed:!0},{name:"Omnipresent Obliteration",id:25,cost:16e14,formatCost:e=>format(e,1),requirement:()=>MendingMilestone.eight.isReached?"None (20 Mend Milestone)":`Reach Reality in Lai'tela's Reality with all Dimensions disabled and\n at least ${formatInt(4)} empty Glyph slots`,hasFailed:()=>!Laitela.isRunning||Laitela.maxAllowedDimension>0||(MendingMilestone.four.isReached?Glyphs.activeWithoutCompanion.length>4:Glyphs.activeWithoutCompanion.length>1),checkRequirement:()=>!!(Laitela.isRunning&&Laitela.maxAllowedDimension<=0&&TimeStudy.reality.isBought)&&(MendingMilestone.four.isReached?Glyphs.activeWithoutCompanion.length<=4:Glyphs.activeWithoutCompanion.length<=1),checkEvent:GAME_EVENT.GAME_TICK_AFTER,canLock:!0,lockEvent:"equip another non-Companion Glyph",description:"Unlock Pelle, Celestial of Antimatter"}];i(1817);const se=e=>{e.cost=()=>getHybridCostScaling(player.reality.rebuyables[e.id],1e30,e.initialCost,e.costMult,e.costMult/10,b.E309,1e3,e.initialCost*e.costMult);const{effect:t}=e;return e.effect=()=>Math.pow(t+ImaginaryUpgrade(e.id).effectOrDefault(0),player.reality.rebuyables[e.id]*getAdjustedGlyphEffect("realityrow1pow")),e.description=()=>e.textTemplate.replace("{value}",0===ImaginaryUpgrade(e.id).effectValue?formatInt(t):format(t+ImaginaryUpgrade(e.id).effectValue,2,2)),e.formatEffect=e=>formatX(e,2,0),e.formatCost=e=>format(e,2,0),e},re=[se({name:"Temporal Amplifier",id:1,initialCost:1,costMult:30,textTemplate:"You gain Dilated Time {value} times faster",effect:3}),se({name:"Replicative Amplifier",id:2,initialCost:1,costMult:30,textTemplate:"You gain Replicanti {value} times faster",effect:3}),se({name:"Eternal Amplifier",id:3,initialCost:2,costMult:30,textTemplate:"You gain {value} times more Eternities",effect:3}),se({name:"Superluminal Amplifier",id:4,initialCost:2,costMult:30,textTemplate:"You gain {value} times more Tachyon Particles",effect:3}),se({name:"Boundless Amplifier",id:5,initialCost:3,costMult:50,textTemplate:"You gain {value} times more Infinities",effect:5}),{name:"Cosmically Duplicate",id:6,cost:15,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":"Complete your first manual Eternity without using Replicanti Galaxies",hasFailed:()=>!(player.requirementChecks.eternity.noRG&&player.requirementChecks.reality.noEternities),checkRequirement:()=>player.requirementChecks.eternity.noRG&&player.requirementChecks.reality.noEternities,checkEvent:GAME_EVENT.ETERNITY_RESET_BEFORE,canLock:!0,lockEvent:"gain a Replicanti Galaxy",description:"Replicanti speed is multiplied based on Replicanti Galaxies",effect:()=>1+Replicanti.galaxies.total/50,formatEffect:e=>formatX(e,2,2)},{name:"Innumerably Construct",id:7,cost:15,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":"Complete your first Infinity with at most 1 Antimatter Galaxy",hasFailed:()=>!(player.galaxies<=1&&player.requirementChecks.reality.noInfinities),checkRequirement:()=>player.galaxies<=1&&player.requirementChecks.reality.noInfinities,checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,canLock:!0,lockEvent:"gain another Antimatter Galaxy",description:"Infinity gain is boosted from Antimatter Galaxy count",effect:()=>1+player.galaxies/30,formatEffect:e=>formatX(e,2,2)},{name:"Paradoxically Attain",id:8,cost:15,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":"Manually Eternity without any automatic Achievements",hasFailed:()=>player.reality.gainedAutoAchievements,checkRequirement:()=>!player.reality.gainedAutoAchievements,checkEvent:GAME_EVENT.ETERNITY_RESET_BEFORE,canLock:!0,description:"Tachyon Particle gain is boosted based on Achievement multiplier",effect:()=>Decimal.sqrt(Achievements.power),formatEffect:e=>formatX(e,2,2)},{name:"Linguistically Expand",id:9,cost:15,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Eternity for ${format("1e4000")} Eternity Points using\n only a single Glyph which must be level ${formatInt(3)}+.`,hasFailed:()=>{const e=Glyphs.activeWithoutCompanion.length>1||1===Glyphs.activeWithoutCompanion.length&&Glyphs.activeWithoutCompanion[0].level<3,t=Glyphs.inventory.countWhere((e=>e&&e.level>=3))>0;return e||0===Glyphs.activeWithoutCompanion.length&&!t},checkRequirement:()=>Currency.eternityPoints.exponent>=4e3&&1===Glyphs.activeWithoutCompanion.length&&Glyphs.activeWithoutCompanion[0].level>=3,checkEvent:GAME_EVENT.ETERNITY_RESET_AFTER,canLock:!0,description:"Gain another Glyph slot",effect:()=>1},{name:"Existentially Prolong",id:10,cost:15,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Complete your first manual Eternity with at least ${formatPostBreak(b.E400)} Infinity Points`,hasFailed:()=>!player.requirementChecks.reality.noEternities,checkRequirement:()=>Currency.infinityPoints.exponent>=400&&player.requirementChecks.reality.noEternities,checkEvent:GAME_EVENT.ETERNITY_RESET_BEFORE,canLock:!0,lockEvent:"Eternity",bypassLock:()=>Currency.infinityPoints.exponent>=400,description:()=>`Start every Reality with ${formatInt(100)} Eternities (also applies to current Reality)`,automatorPoints:15,shortDescription:()=>`Start with ${formatInt(100)} Eternities`,effect:()=>100},{name:"The Boundless Flow",id:11,cost:50,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`${format(Currency.infinitiesBanked.value,2)}/${format(b.E12)} Banked Infinities`,checkRequirement:()=>Currency.infinitiesBanked.exponent>=12,checkEvent:[GAME_EVENT.ETERNITY_RESET_AFTER,GAME_EVENT.REALITY_FIRST_UNLOCKED],description:"Every second, gain 10% of the Infinities you would normally gain by Infinitying",automatorPoints:5,shortDescription:()=>"Continuous Infinity generation",effect:()=>gainedInfinities().times(.1),formatEffect:e=>`${format(e)} per second`},{name:"The Knowing Existence",id:12,cost:50,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Eternity for ${format(b.E70)} Eternity Points without completing Eternity Challenge 1`,hasFailed:()=>0!==EternityChallenge(1).completions&&!MendingUpgrade(3).isBought,checkRequirement:()=>Currency.eternityPoints.exponent>=70&&0===EternityChallenge(1).completions||Currency.eternityPoints.exponent>=70&&MendingUpgrade(3).isBought,checkEvent:GAME_EVENT.ETERNITY_RESET_AFTER,canLock:!0,lockEvent:"complete Eternity Challenge 1",description:"Eternity Point multiplier based on Reality and Time Theorem count",effect:()=>{let e=BreakInfinityUpgrade.infinitiedGen.chargedEffect.isEffectActive?1/0:1e4;return Currency.timeTheorems.value.minus(b.E3).clampMin(2).pow(Math.log2(Math.min(Currency.realities.value,e))).clampMin(1)},formatEffect:e=>formatX(e,2,2)},{name:"The Telemechanical Process",id:13,cost:50,requirement:()=>MendingMilestone.one.isReached?"None (1 Mend Milestone)":`Eternity for ${format(b.E4000)} Eternity Points without Time Dim. 5-8`,hasFailed:()=>!Array.range(5,4).every((e=>TimeDimension(e).amount.equals(0))),checkRequirement:()=>Currency.eternityPoints.exponent>=4e3&&Array.range(5,4).every((e=>TimeDimension(e).amount.equals(0))),checkEvent:GAME_EVENT.ETERNITY_RESET_AFTER,canLock:!0,lockEvent:"purchase a Time Dimension above the 4th TD",description:()=>`Improve Eternity Autobuyer and unlock autobuyers for Time Dimensions and ${formatX(5)} EP`,automatorPoints:10,shortDescription:()=>`TD and ${formatX(5)} EP Autobuyers, improved Eternity Autobuyer`},{name:"The Eternal Flow",id:14,cost:50,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`${format(Currency.eternities.value,2)}/${format(1e7)} Eternities`,checkRequirement:()=>Currency.eternities.gte(1e7),checkEvent:[GAME_EVENT.ETERNITY_RESET_AFTER,GAME_EVENT.REALITY_FIRST_UNLOCKED],description:"Gain Eternities per second equal to your Reality count",automatorPoints:5,shortDescription:()=>"Continuous Eternity generation",effect:()=>new Decimal(Currency.realities.value).times(Ra.unlocks.continuousTTBoost.effects.eternity.effectOrDefault(1)).min(1e308).toNumber(),formatEffect:e=>`${format(e)} per second`},{name:"The Paradoxical Forever",id:15,cost:50,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Have ${format(b.E10)} Eternity Points without purchasing\n the ${formatX(5)} Eternity Point upgrade`,hasFailed:()=>0!==player.epmultUpgrades,checkRequirement:()=>Currency.eternityPoints.exponent>=10&&0===player.epmultUpgrades,checkEvent:GAME_EVENT.ETERNITY_RESET_AFTER,canLock:!0,lockEvent:()=>`purchase a ${formatX(5)} EP upgrade`,description:()=>`Boost Tachyon Particle gain based on ${formatX(5)} Eternity Point multiplier`,effect:()=>Math.max(Math.sqrt(Decimal.log10(EternityUpgrade.epMult.effectValue))/9,1),formatEffect:e=>formatX(e,2,2)},{name:"Disparity of Rarity",id:16,cost:1500,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Reality with at least ${formatInt(4)} Glyphs equipped of uncommon or better rarity\n (${formatInt(Glyphs.activeWithoutCompanion.countWhere((e=>e&&e.strength>=1.5)))} equipped)`,hasFailed:()=>{const e=Glyphs.inventory.countWhere((e=>e&&e.strength>=1.5)),t=Glyphs.activeWithoutCompanion.countWhere((e=>e.strength>=1.5)),i=Glyphs.activeSlotCount-Glyphs.activeList.length;return t+Math.min(e,i)<4},checkRequirement:()=>Glyphs.activeWithoutCompanion.countWhere((e=>e.strength>=1.5))>=4,checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,description:"Improve the Glyph rarity formula",effect:1.3,formatCost:e=>format(e,1,0)},{name:"Duplicity of Potency",id:17,cost:1500,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Reality with at least ${formatInt(4)} Glyphs equipped, each having at least ${formatInt(2)} effects\n (${formatInt(Glyphs.activeWithoutCompanion.countWhere((e=>e&&countValuesFromBitmask(e.effects)>=2)))}\n equipped)`,hasFailed:()=>{const e=Glyphs.inventory.countWhere((e=>e&&countValuesFromBitmask(e.effects)>=2)),t=Glyphs.activeWithoutCompanion.countWhere((e=>countValuesFromBitmask(e.effects)>=2)),i=Glyphs.activeSlotCount-Glyphs.activeList.length;return t+Math.min(e,i)<4},checkRequirement:()=>Glyphs.activeWithoutCompanion.countWhere((e=>countValuesFromBitmask(e.effects)>=2))>=4,checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,description:()=>`${formatPercents(.5)} chance to get an additional effect on Glyphs`,effect:.5,formatCost:e=>format(e,1,0)},{name:"Measure of Forever",id:18,cost:1500,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Reality with at least ${formatInt(4)} Glyphs equipped, each at level ${formatInt(10)} or higher\n (${formatInt(Glyphs.activeWithoutCompanion.countWhere((e=>e&&e.level>=10)))} equipped)`,hasFailed:()=>{const e=Glyphs.inventory.countWhere((e=>e&&e.level>=10)),t=Glyphs.activeWithoutCompanion.countWhere((e=>e.level>=10)),i=Glyphs.activeSlotCount-Glyphs.activeList.length;return t+Math.min(e,i)<4},checkRequirement:()=>Glyphs.activeWithoutCompanion.countWhere((e=>e.level>=10))>=4,checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,description:"Eternity count boosts Glyph level",effect:()=>Math.max(.45*Math.sqrt(Currency.eternities.value.plus(1).log10()),1),formatCost:e=>format(e,1,0)},{name:"Scour to Empower",id:19,cost:1500,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Have a total of ${formatInt(30)} or more Glyphs at once\n (You have ${formatInt(Glyphs.allGlyphs.countWhere((e=>"companion"!==e.type)))})`,hasFailed:()=>Glyphs.allGlyphs.countWhere((e=>"companion"!==e.type))<30,checkRequirement:()=>Glyphs.allGlyphs.countWhere((e=>"companion"!==e.type))>=30,checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,description:"You can sacrifice Glyphs for permanent bonuses (Shift + click)",formatCost:e=>format(e,1,0)},{name:"Parity of Singularity",id:20,cost:1500,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`${formatInt(100)} days total play time after unlocking the Black Hole\n (Currently: ${Time.timeSinceBlackHole.toStringShort(!1)})`,hasFailed:()=>!BlackHole(1).isUnlocked&&Currency.realityMachines.lt(100),checkRequirement:()=>Time.timeSinceBlackHole.totalDays.gte(100)&&BlackHole(1).isUnlocked,checkEvent:GAME_EVENT.GAME_TICK_AFTER,description:"Unlock another Black Hole",automatorPoints:10,shortDescription:()=>"Second Black Hole",formatCost:e=>format(e,1,0)},{name:"Cosmic Conglomerate",id:21,cost:1e5,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`${formatInt(Replicanti.galaxies.total+player.galaxies+player.dilation.totalTachyonGalaxies)}/${formatInt(2800)} total Galaxies from all types`,checkRequirement:()=>Replicanti.galaxies.total+player.galaxies+player.dilation.totalTachyonGalaxies>=2800,checkEvent:GAME_EVENT.GAME_TICK_AFTER,description:()=>`Remote Antimatter Galaxy scaling is moved to ${formatInt(1e5)} galaxies`,effect:1e5},{name:"Temporal Transcendence",id:22,cost:1e5,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`${format(Currency.timeShards.value,1)}/${format(b.E28000)} Time Shards`,checkRequirement:()=>Currency.timeShards.exponent>=28e3,checkEvent:GAME_EVENT.GAME_TICK_AFTER,description:"Time Dimension multiplier based on days spent in this Reality",effect:()=>Decimal.pow10(Math.pow(1+2*Decimal.log10(Time.thisReality.totalDays.add(1)),1.6)),formatEffect:e=>formatX(e,2,2)},{name:"Replicative Rapidity",id:23,cost:1e5,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Reality in under ${formatInt(15)} minutes of game time\n (Fastest: ${Time.bestReality.toStringShort()})`,hasFailed:()=>Time.thisReality.totalMinutes.gte(15),checkRequirement:()=>Time.thisReality.totalMinutes.lt(15),checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,description:"Replicanti speed is boosted based on your fastest game-time Reality",effect:()=>15/Decimal.clamp(Time.bestReality.totalMinutes,1/12,15).toNumber(),cap:180,formatEffect:e=>formatX(e,2,2)},{name:"Synthetic Symbolism",id:24,cost:1e5,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Reality for ${formatInt(5e3)} Reality Machines without equipped Glyphs`,hasFailed:()=>Glyphs.activeWithoutCompanion.length>0,checkRequirement:()=>MachineHandler.gainedRealityMachines.gte(5e3)&&0===Glyphs.activeWithoutCompanion.length,canLock:!0,lockEvent:"equip a non-Companion Glyph",checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,description:"Gain another Glyph slot",effect:()=>1},{name:"Effortless Existence",id:25,cost:1e5,requirement:()=>MendingMilestone.four.isReached?"None (5 Mend Milestone)":`Reach ${format(b.E11111)} EP (Best: ${format(player.records.bestReality.bestEP,2)} EP)`,checkRequirement:()=>player.records.bestReality.bestEP.exponent>=11111,checkEvent:GAME_EVENT.ETERNITY_RESET_AFTER,description:"Unlock the Reality autobuyer and Automator command",automatorPoints:100,shortDescription:()=>"Reality Autobuyer"}],oe={automator:Q,cosmeticGlyphs:O,glyphCosmeticSets:J,glyphEffects:te,glyphSacrifice:ie,glyphTypes:N,imaginaryUpgrades:ne,perks:F,perkConnections:$,upgrades:re},le={DIMENSION(e,t){const i=null!==t&&void 0!==t?t:"";switch(e){case"AD":return{symbol:`Ω${i}`,color:"var(--color-antimatter)"};case"ID":return{symbol:`∞${i}`,color:"var(--color-infinity)"};case"TD":return{symbol:`Δ${i}`,color:"var(--color-eternity)"};default:throw new Error("Unrecognized dimension type in multiplier tab icons")}},PURCHASE(e,t){const i=`${null!==t&&void 0!==t?t:""}`;switch(e){case"AD":return{symbol:i,color:"var(--color-antimatter)"};case"ID":return{symbol:i,color:"var(--color-infinity)"};case"TD":return{symbol:i,color:"var(--color-eternity)"};case"baseID":return{symbol:'',color:"var(--color-infinity)"};case"tesseractID":return{symbol:'',color:"var(--color-enslaved--base)"};default:throw new Error("Unrecognized purchase type in multiplier tab icons")}},CHALLENGE(e,t){const i=`${null!==t&&void 0!==t?t:""}`;switch(e){case"infinity":return{symbol:`${i}`,color:"var(--color-infinity)"};case"eternity":return{symbol:`Δ${i}`,color:"var(--color-eternity)"};default:throw new Error("Unrecognized challenge type in multiplier tab icons")}},SACRIFICE(e){const t='';switch(e){case"antimatter":return{symbol:`Ω${t}`,color:"var(--color-antimatter)"};case"infinity":return{symbol:`${t}`,color:"var(--color-infinity)"};case"time":return{symbol:`Δ${t}`,color:"var(--color-eternity)"};case"dilation":return{symbol:`Ψ${t}`,color:"var(--color-dilation)",textColor:"black"};default:throw new Error("Unrecognized sacrifice type in multiplier tab icons")}},UPGRADE(e){const t='';switch(e){case"infinity":return{symbol:`${t}`,color:"var(--color-infinity)"};case"eternity":return{symbol:`Δ${t}`,color:"var(--color-eternity)"};case"dilation":return{symbol:`Ψ${t}`,color:"var(--color-dilation)"};case"reality":return{symbol:`Ϟ${t}`,color:"var(--color-reality)"};case"imaginary":return{symbol:`${t}`,color:"var(--color-ra--base)"};case"corruption":return{symbol:`${t}`,color:"var(--color-mending)"};default:throw new Error("Unrecognized upgrade type in multiplier tab icons")}},CONVERT_FROM(e){return"AM"===e?{symbol:"",color:"var(--color-antimatter)"}:"IP"===e?{symbol:"",color:"var(--color-infinity)"}:{}},DIVISOR(e){let t;return"IP"===e&&(t="var(--color-infinity)"),"EP"===e&&(t="var(--color-eternity)"),{symbol:"",color:t}},ANTIMATTER:{symbol:"",color:"var(--color-antimatter)"},DIMBOOST:{symbol:'',color:oe.glyphTypes.power.color},TICKSPEED:{symbol:'',color:"var(--color-eternity)"},GALAXY:{symbol:'',color:"var(--color-eternity)"},ACHIEVEMENT:{symbol:'',color:"var(--color-v--base)",textColor:"black"},BREAK_INFINITY:{symbol:"",color:"var(--color-infinity)",textColor:"black"},INFINITY_POWER:{symbol:'',color:"var(--color-infinity)",textColor:"black"},IPOW_CONVERSION:{symbol:'',color:"var(--color-infinity)",textColor:"black"},TIME_STUDY:{symbol:'',color:"var(--color-eternity)"},TACHYON_PARTICLES:{symbol:'',color:"var(--color-dilation)"},GENERIC_GLYPH:{symbol:'',color:"var(--color-reality)"},SPECIFIC_GLYPH(e){return{symbol:`${oe.glyphTypes[e].symbol}`,color:oe.glyphTypes[e].color}},BLACK_HOLE:{symbol:'',color:"var(--color-reality)"},GAMESPEED:{symbol:'',color:"var(--color-reality)"},GENERIC_TERESA:{symbol:"Ϟ",color:"var(--color-teresa--base)"},GENERIC_ENSLAVED:{symbol:'
',color:"var(--color-enslaved--base)"},GENERIC_V:{symbol:"",color:"var(--color-v--base)",textColor:"black"},GENERIC_RA:{symbol:'',color:"var(--color-ra--base)"},ALCHEMY:{symbol:'',color:"var(--color-ra-pet--effarig)"},BH_PULSE:{symbol:'',color:"var(--color-reality)"},GENERIC_LAITELA:{symbol:"",color:"var(--color-laitela--base)",textColor:"var(--color-laitela--accent)"},SINGULARITY:{symbol:'',color:"var(--color-laitela--base)",textColor:"var(--color-laitela--accent)"},PELLE:{symbol:"",color:"var(--color-pelle--base)"},MENDINGMILESTONE:{symbol:"",color:"var(--color-mending)"},IAP:{symbol:'',color:"var(--color-accent)"},CORRUPTION:{symbol:'',color:"var(--color-mending)"},CORRUPTION_BONUS:{symbol:"++",color:"var(--color-mending)"},SOFTCAP(e){switch(e){case"infinity":return{symbol:'',color:"var(--color-infinity)"};case"eternity":return{symbol:'',color:"var(--color-eternity)"};case"dilation":return{symbol:'',color:"var(--color-dilation)"};case"reality":return{symbol:'',color:"var(--color-reality)"};case"imaginary":return{symbol:'',color:"var(--color-ra--base)"};case"corruption":return{symbol:'',color:"var(--color-mending)"};default:throw new Error("Unrecognized upgrade type in multiplier tab icons")}}},ce={total:{name:"Antimatter Production",displayOverride:()=>`${format(Currency.antimatter.productionPerSecond,2,2)}/sec`,multValue:()=>new Decimal(Currency.antimatter.productionPerSecond).clampMin(1),isActive:!0,overlay:[""]},effarigAM:{name:"Glyph Effect - Effarig Antimatter Production",powValue:()=>{const e=AntimatterDimension(1),t=e.totalAmount.times(e.multiplier).times(Tickspeed.perSecond);return Math.pow(t.log10(),getAdjustedGlyphEffect("effarigantimatter")-1)},isActive:()=>getAdjustedGlyphEffect("effarigantimatter")>1&&AntimatterDimension(1).isProducing,icon:le.SPECIFIC_GLYPH("effarig")}};class ue{constructor(e){this._player=e}get isInfinityUnlocked(){const e=this._player.infinitied?this._player.infinitied:this._player.infinities;return new Decimal(e).gt(0)||this.isEternityUnlocked}get isEternityUnlocked(){return new Decimal(this._player.eternities).gt(0)||this.isRealityUnlocked}get isRealityUnlocked(){return this._player.realities>0||this.isMendingUnlocked}get hasFullCompletion(){var e;return(null===(e=this._player.records)||void 0===e?void 0:e.fullGameCompletions)>0}static get current(){return new ue(player)}static of(e){return new ue(e)}static infinityUnlocked(){return ue.current.isInfinityUnlocked}static hasBroken(){return player.break||this.isEternityUnlocked||this.isRealityUnlocked||this.isMendingUnlocked}static replicantiUnlocked(){return Replicanti.areUnlocked||this.isEternityUnlocked}static eternityUnlocked(){return ue.current.isEternityUnlocked}static dilationUnlocked(){return TimeStudy.dilation.isBought}static realityUnlocked(){return ue.current.isRealityUnlocked}static seenAlteredSpeed(){const e=EternityChallenge(12);return this.realityUnlocked()||e.completions>0||e.isRunning}static challengeCompleted(){return NormalChallenges.all.slice(1).some((e=>e.isCompleted))}static infinityChallengeCompleted(){return InfinityChallenges.all.some((e=>e.isCompleted))}get isMendingUnlocked(){return new Decimal(this._player.mends).gt(new Decimal(0))}static mendingUnlocked(){return ue.current.isMendingUnlocked}}const de={activeDimCount(e){switch(e){case"AD":return Math.clamp(AntimatterDimensions.all.filter((e=>e.isProducing)).length,1,EternityChallenge(7).isRunning?7:8);case"ID":return InfinityDimensions.all.filter((e=>e.isProducing)).length;case"TD":return TimeDimensions.all.filter((e=>e.isProducing)).length;default:throw new Error("Unrecognized Dimension type in Multiplier tab GameDB entry")}},globalGalaxyMult(){return Effects.product(InfinityUpgrade.galaxyBoost,InfinityUpgrade.galaxyBoost.chargedEffect,BreakInfinityUpgrade.galaxyBoost,TimeStudy(212),TimeStudy(232),Achievement(86),Achievement(178),InfinityChallenge(5).reward,PelleUpgrade.galaxyPower,PelleRifts.decay.milestones[1],Ra.unlocks.improvedECRewards.isUnlocked?EternityChallenge(8).vReward.effectValue:1)*Pelle.specialGlyphEffect.power*(player.galBoostPoints.eq(0)?1:player.galBoostPoints.pow(1/player.galBoostPoints.log10()**.8).div(100).add(1).toNumber())},decomposeTickspeed(){let e=effectiveBaseGalaxies();const t=this.globalGalaxyMult();let i,a;if(e<3){let n=1.1245;1===player.galaxies&&(n=1.11888888),2===player.galaxies&&(n=1.11267177),NormalChallenge(5).isRunning&&(n=1.08,1===player.galaxies&&(n=1.07632),2===player.galaxies&&(n=1.072)),n/=.931225;const s=Math.log10(n),r=.02*t;e*=Pelle.specialGlyphEffect.power,a=Tickspeed.totalUpgrades*s,i=-Math.log10(Math.max(.01,1/n-e*r))/s}else{e-=2,e*=t,e*=getAdjustedGlyphEffect("realitygalaxies")*(1+ImaginaryUpgrade(9).effectOrDefault(0)),e*=Pelle.specialGlyphEffect.power;const n=.931225/(NormalChallenge(5).isRunning?.83:.8),s=Math.log10(n),r=-b.D0_965.log10();a=Tickspeed.totalUpgrades*s,i=1+e/s*r}i*=3;const n=b.D1.dividedByEffectsOf(Achievement(36),Achievement(45),Achievement(66),Achievement(83));let s=n.log10()/Tickspeed.perSecond.log10();n.eq(1)&&(s=0),0===e&&(i=0);let r=(1-s)/(a+i);return 0===Tickspeed.totalUpgrades&&(r=0),{base:s,tickspeed:a*r,galaxies:i*r}},achievementDimCheck(e,t){switch(e){case 23:return"AD8"===t;case 28:case 31:case 68:case 71:return"AD1"===t;case 94:return"ID1"===t;case 34:return"AD"===t.substr(0,2)&&8!==Number(t.charAt(2));case 64:return"AD"===t.substr(0,2)&&Number(t.charAt(2))<=4;default:return!0}},timeStudyDimCheck(e,t){switch(e){case 11:return"TD1"===t;case 71:return"AD"===t.substr(0,2)&&8!==Number(t.charAt(2));case 72:return"ID4"===t;case 73:return"TD3"===t;case 214:return"AD8"===t;case 227:return"TD4"===t;case 234:return"AD1"===t;default:return!0}},ICDimCheck(e,t){switch(e){case 1:case 6:return"ID"===t.substr(0,2);case 3:case 4:return"AD"===t.substr(0,2);case 8:return"AD"===t.substr(0,2)&&Number(t.charAt(2))>1&&Number(t.charAt(2))<8;default:return!1}},ECDimCheck(e,t){switch(e){case 1:case 10:return"TD"===t.substr(0,2);case 2:return"ID1"===t;case 4:case 9:return"ID"===t.substr(0,2);case 7:return"ID8"===t;default:return!1}},blackHoleSpeeds(){const e=BlackHoles.list.filter((e=>e.isUnlocked)).map((e=>e.isActive?e.power:1)).reduce(((e,t)=>e*t),1),t=BlackHole(1),i=BlackHole(2),a=1+(t.isUnlocked?t.dutyCycle*(t.power-1):0)+(i.isUnlocked?t.dutyCycle*i.dutyCycle*t.power*(i.power-1):0);return{current:e,average:a}},pluralizeDimensions(e){return 1===e?"Dimension ":"Dimensions"},evenDimNC12Production(){const e=e=>[2,4,6].includes(e)?.1*(8-e):0,t=Math.clampMin(2*Math.floor(de.activeDimCount("AD")/2),2);return AntimatterDimensions.all.filter((e=>e.isProducing&&e.tier%2===0)).map((t=>t.multiplier.times(t.amount.pow(e(t.tier))))).reduce(((e,t)=>e.times(t)),b.D1).times(AntimatterDimension(t).totalAmount)},oddDimNC12Production(){const e=Math.clampMin(2*Math.floor(de.activeDimCount("AD")/2-.5)+1,1);return AntimatterDimensions.all.filter((e=>e.isProducing&&e.tier%2===1)).map((e=>e.multiplier)).reduce(((e,t)=>e.times(t)),b.D1).times(AntimatterDimension(e).totalAmount)},actualNC12Production(){return Decimal.max(this.evenDimNC12Production(),this.oddDimNC12Production())},multInNC12(e){const t=e=>[2,4,6].includes(e)?.1*(8-e):0,i=AntimatterDimension(e);return i.isProducing?i.multiplier.times(i.totalAmount.pow(t(e))):b.D1},isNC12ProducingEven(){return this.evenDimNC12Production().gt(this.oddDimNC12Production())}},he={total:{name:e=>e?`AD ${e} Multiplier`:NormalChallenge(12).isRunning?de.actualNC12Production().eq(0)?"Base AD Production from All Dimensions":`Base AD Production from ${de.isNC12ProducingEven()?"Even":"Odd"} Dimensions`:"Base AD Production",displayOverride:e=>{if(e){const t=NormalChallenge(12).isRunning?de.multInNC12(e):AntimatterDimension(e).multiplier;return formatX(t,2,2)}const t=EternityChallenge(7).isRunning?7:de.activeDimCount("AD");return NormalChallenge(12).isRunning?`${format(de.actualNC12Production(),2)}/sec`:`${format(AntimatterDimensions.all.filter((e=>e.isProducing)).map((e=>e.multiplier)).reduce(((e,t)=>e.times(t)),b.D1).times(AntimatterDimension(t).totalAmount),2)}/sec`},multValue:e=>{if(NormalChallenge(12).isRunning){const t=de.actualNC12Production();return e?(de.isNC12ProducingEven()?e%2===0:e%2===1)?de.multInNC12(e):b.D1:t.eq(0)?1:t}const t=e?AntimatterDimension(e).multiplier:AntimatterDimensions.all.filter((e=>e.isProducing)).map((e=>e.multiplier)).reduce(((e,t)=>e.times(t)),b.D1),i=AntimatterDimension(EternityChallenge(7).isRunning?7:de.activeDimCount("AD")).totalAmount;return t.times(i).clampMin(1)},isActive:e=>!e||e<=de.activeDimCount("AD"),dilationEffect:()=>{const e=player.dilation.active||Enslaved.isRunning?.75*Effects.product(DilationUpgrade.dilationPenalty):1;return e*(Effarig.isRunning?Effarig.multDilation:1)},isDilated:!0,overlay:["Ω",""],icon:e=>le.DIMENSION("AD",e)},purchase:{name:e=>e?`Purchased AD ${e}`:"Purchases",multValue:e=>{const t=e=>Laitela.continuumActive?AntimatterDimension(e).continuumValue:Math.floor(AntimatterDimension(e).bought/10);return e?Decimal.pow(AntimatterDimensions.buyTenMultiplier,t(e)):AntimatterDimensions.all.filter((e=>e.isProducing)).map((e=>Decimal.pow(AntimatterDimensions.buyTenMultiplier,t(e.tier)))).reduce(((e,t)=>e.times(t)),b.D1)},isActive:()=>!EternityChallenge(11).isRunning,icon:e=>le.PURCHASE("AD",e)},highestDim:{name:()=>"Amount of highest Dimension",displayOverride:()=>{const e=EternityChallenge(7).isRunning?7:de.activeDimCount("AD");return`AD ${e}, ${format(AntimatterDimension(e).totalAmount,2)}`},multValue:()=>{const e=EternityChallenge(7).isRunning?7:de.activeDimCount("AD");return AntimatterDimension(e).totalAmount},isActive:()=>AntimatterDimension(1).isProducing,icon:le.DIMENSION("AD")},dimboost:{name:e=>e?`Dimboosts on AD ${e}`:"Dimboosts",multValue:e=>e?DimBoost.multiplierToNDTier(e):AntimatterDimensions.all.filter((e=>e.isProducing)).map((e=>DimBoost.multiplierToNDTier(e.tier))).reduce(((e,t)=>e.times(t)),b.D1),isActive:!0,icon:le.DIMBOOST},sacrifice:{name:"Sacrifice Multiplier",multValue:e=>e&&8!==e?b.D1:Sacrifice.totalBoost,isActive:e=>(!e||8===e)&&Sacrifice.totalBoost.gt(1)&&!EternityChallenge(11).isRunning,icon:le.SACRIFICE("antimatter")},achievementMult:{name:"Achievement Multiplier",multValue:e=>Decimal.pow(Achievements.power,e?1:de.activeDimCount("AD")),isActive:()=>!Pelle.isDoomed&&!EternityChallenge(11).isRunning,icon:le.ACHIEVEMENT},achievement:{name:"Achievement Rewards",multValue:e=>{const t=b.D1.timesEffectsOf(Achievement(48),Achievement(56),Achievement(65),Achievement(72),Achievement(73),Achievement(74),Achievement(76),Achievement(84),Achievement(91),Achievement(92)),i=Array.repeat(b.D1,9);for(let n=1;n<=8;n++)1===n&&(i[n]=i[n].timesEffectsOf(Achievement(28),Achievement(31),Achievement(68),Achievement(71))),i[n]=i[n].timesEffectsOf(8===n?Achievement(23):null,n<8?Achievement(34):null,n<=4?Achievement(64):null),Achievement(43).isUnlocked&&(i[n]=i[n].times(1+n/100));if(e)return t.times(i[e]);let a=b.D1;for(let n=1;n<=de.activeDimCount("AD");n++)a=a.times(i[n]).times(t);return a},powValue:()=>Achievement(183).effectOrDefault(1),isActive:()=>!EternityChallenge(11).isRunning,icon:le.ACHIEVEMENT},infinityUpgrade:{name:e=>e?`Infinity Upgrades (AD ${e})`:"Infinity Upgrades",multValue:e=>{const t=b.D1.timesEffectsOf(InfinityUpgrade.totalTimeMult,InfinityUpgrade.thisInfinityTimeMult),i=Array.repeat(b.D1,9);for(let n=1;n<=8;n++)1===n&&(i[n]=i[n].timesEffectsOf(InfinityUpgrade.unspentIPMult,InfinityUpgrade.unspentIPMult.chargedEffect)),i[n]=i[n].timesEffectsOf(AntimatterDimension(n).infinityUpgrade);if(e)return t.times(i[e]);let a=b.D1;for(let n=1;n<=de.activeDimCount("AD");n++)a=a.times(i[n]).times(t);return a},powValue:e=>{const t=InfinityUpgrade.totalTimeMult.chargedEffect.effectOrDefault(1)*InfinityUpgrade.thisInfinityTimeMult.chargedEffect.effectOrDefault(1),i=Array.repeat(1,9);for(let a=1;a<=8;a++)i[a]=AntimatterDimension(a).infinityUpgrade.chargedEffect.effectOrDefault(1);return e?t*i[e]:t*Math.exp(i.slice(1).map((e=>Math.log(e))).sum()/de.activeDimCount("AD"))},isActive:()=>ue.infinityUnlocked()&&!EternityChallenge(11).isRunning,icon:le.UPGRADE("infinity")},breakInfinityUpgrade:{name:"Break Infinity Upgrades",multValue:e=>{const t=b.D1.timesEffectsOf(BreakInfinityUpgrade.totalAMMult,BreakInfinityUpgrade.currentAMMult,BreakInfinityUpgrade.achievementMult,BreakInfinityUpgrade.slowestChallengeMult,BreakInfinityUpgrade.infinitiedMult);return Decimal.pow(t,e?1:de.activeDimCount("AD"))},powValue:()=>{const e=BreakInfinityUpgrade.totalAMMult.chargedEffect.effectOrDefault(1)*BreakInfinityUpgrade.currentAMMult.chargedEffect.effectOrDefault(1);return e},isActive:()=>player.break&&!EternityChallenge(11).isRunning,icon:le.BREAK_INFINITY},infinityPower:{name:"Multiplier from Infinity Power",fakeValue:()=>Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate),multValue:e=>{const t=Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate).max(1);return Decimal.pow(t,e?1:de.activeDimCount("AD"))},isActive:()=>Currency.infinityPower.value.gt(1)&&!EternityChallenge(9).isRunning,icon:le.INFINITY_POWER},infinityChallenge:{name:e=>e?`Infinity Challenges (AD ${e})`:"Infinity Challenges",multValue:e=>{const t=b.D1.timesEffectsOf(InfinityChallenge(3),InfinityChallenge(3).reward),i=Array.repeat(b.D1,9);for(let n=1;n<=8;n++)i[n]=i[n].timesEffectsOf(n>1&&n<8?InfinityChallenge(8).reward:null);if(e)return t.times(i[e]);let a=b.D1;for(let n=1;n<=de.activeDimCount("AD");n++)a=a.times(i[n]).times(t);return a},powValue:()=>InfinityChallenge(4).reward.effectOrDefault(1),isActive:()=>player.break&&!EternityChallenge(11).isRunning,icon:le.CHALLENGE("infinity")},timeStudy:{name:e=>e?`Time Studies (AD ${e})`:"Time Studies",multValue:e=>{const t=b.D1.timesEffectsOf(TimeStudy(91),TimeStudy(101),TimeStudy(161),TimeStudy(193),TimeStudy(311)),i=Array.repeat(b.D1,9);for(let n=1;n<=8;n++){const e=b.D1.timesEffectsOf(AntimatterDimension(n).infinityUpgrade,BreakInfinityUpgrade.infinitiedMult);i[n]=i[n].times(e.pow(TimeStudy(31).effectOrDefault(1)-1)),i[n]=i[n].timesEffectsOf(n<8?TimeStudy(71):null,8===n?TimeStudy(214):null,1===n?TimeStudy(234):null)}if(e)return t.times(i[e]);let a=b.D1;for(let n=1;n<=de.activeDimCount("AD");n++)a=a.times(i[n]).times(t);return a},isActive:()=>ue.eternityUnlocked()&&!EternityChallenge(11).isRunning,icon:le.TIME_STUDY},eternityChallenge:{name:"Eternity Challenges",multValue:e=>Decimal.pow(EternityChallenge(10).effectValue,e?1:de.activeDimCount("AD")),isActive:()=>EternityChallenge(10).isRunning,icon:le.CHALLENGE("eternity")},glyph:{name:"Glyph Effects",multValue:e=>{const t=getAdjustedGlyphEffect("powermult");return Decimal.pow(t,e?1:de.activeDimCount("AD"))},powValue:()=>{const e=getAdjustedGlyphEffect("powerpow")*getAdjustedGlyphEffect("effarigdimensions");return e*(player.dilation.active?getAdjustedGlyphEffect("dilationpow"):1)},isActive:()=>ue.realityUnlocked()&&!EternityChallenge(11).isRunning,icon:le.GENERIC_GLYPH},v:{name:"5 V-Achievement Milestone - AD Power based on Space Theorems",powValue:()=>VUnlocks.adPow.effectOrDefault(1),isActive:()=>ue.realityUnlocked()&&!EternityChallenge(11).isRunning,icon:le.ACHIEVEMENT},alchemy:{name:"Glyph Alchemy",multValue:e=>{const t=AlchemyResource.dimensionality.effectOrDefault(1).times(Currency.realityMachines.value.powEffectOf(AlchemyResource.force));return Decimal.pow(t,e?1:de.activeDimCount("AD"))},powValue:e=>{const t=AlchemyResource.power.effectOrDefault(1)*Ra.momentumValue;let i=1;if(AlchemyResource.inflation.isUnlocked)if(e)i=AntimatterDimension(e).multiplier.gte(AlchemyResource.inflation.effectValue)?1.05:1;else{const e=AntimatterDimensions.all.countWhere((e=>e.isProducing&&e.multiplier.gte(AlchemyResource.inflation.effectValue)));i=Math.pow(1.05,e/AntimatterDimensions.all.countWhere((e=>e.isProducing)))}return t*i},isActive:()=>Ra.unlocks.unlockGlyphAlchemy.canBeApplied&&!EternityChallenge(11).isRunning,icon:le.ALCHEMY},pelle:{name:"Pelle Upgrades",multValue:e=>Decimal.pow(PelleUpgrade.antimatterDimensionMult.effectOrDefault(1),e?1:de.activeDimCount("AD")),powValue:()=>PelleRifts.paradox.effectOrDefault(b.D1).toNumber(),isActive:()=>Pelle.isDoomed&&!EternityChallenge(11).isRunning,icon:le.PELLE},iap:{name:"Shop Tab Purchases",multValue:e=>{const t=ShopPurchase.dimPurchases.currentMult*ShopPurchase.allDimPurchases.currentMult;return Decimal.pow(t,e?1:de.activeDimCount("AD"))},isActive:()=>ShopPurchaseData.totalSTD>0&&!EternityChallenge(11).isRunning,icon:le.IAP},effectNC:{name:e=>e?`Normal Challenge Effect (AD ${e})`:"Normal Challenge Effects",displayOverride:e=>{const t=e=>e.gte(1)?formatX(e,2,2):`/${format(e.reciprocal(),2,2)}`;let i=Array.repeat(b.D1,9);if(NormalChallenge(2).isRunning&&(i=Array.repeat(new Decimal(player.chall2Pow),9)),NormalChallenge(3).isRunning&&(i[1]=i[1].times(player.chall3Pow)),NormalChallenge(12).isRunning&&(i[2]=AntimatterDimension(2).totalAmount.pow(.6),i[4]=AntimatterDimension(4).totalAmount.pow(.4),i[6]=AntimatterDimension(6).totalAmount.pow(.2)),e)return t(i[e]);let a=b.D1;for(let n=1;n<=de.activeDimCount("AD");n++)a=a.times(i[n]);return t(a)},multValue:e=>{let t=Array.repeat(b.D1,9);if(NormalChallenge(2).isRunning&&(t=Array.repeat(new Decimal(player.chall2Pow),9)),NormalChallenge(3).isRunning&&(t[1]=t[1].times(player.chall3Pow)),NormalChallenge(12).isRunning){if(t[2]=AntimatterDimension(2).totalAmount.pow(.6),t[4]=AntimatterDimension(4).totalAmount.pow(.4),t[6]=AntimatterDimension(6).totalAmount.pow(.2),!de.isNC12ProducingEven())return b.D1;if(e)return t[e].neq(0)?t[e]:b.D1;let i=b.D1;for(let e=2;e<=6;e+=2)i=i.times(t[e].clampMin(1));return i}if(e)return t[e];let i=b.D1;for(let a=1;a<=de.activeDimCount("AD");a++)i=i.times(t[a]);return i},isActive:()=>[2,3,12].some((e=>NormalChallenge(e).isRunning)),icon:le.CHALLENGE("infinity")},nerfIC:{name:e=>e?`Infinity Challenge Nerf (AD ${e})`:"Infinity Challenge Nerf",multValue:e=>{let t=Array.repeat(b.D1,9);if(InfinityChallenge(4).isRunning)for(let a=1;a<=8;a++)player.postC4Tier!==a&&(t[a]=t[a].pow(1-InfinityChallenge(4).effectValue).reciprocal());else InfinityChallenge(6).isRunning?t=Array.repeat(b.D1.dividedByEffectOf(InfinityChallenge(6)),9):InfinityChallenge(8).isRunning&&(t=Array.repeat(b.D1.timesEffectsOf(InfinityChallenge(8)),9));if(e)return t[e];let i=b.D1;for(let a=1;a<=de.activeDimCount("AD");a++)i=i.times(t[a]);return i},isActive:()=>[4,6,8].some((e=>InfinityChallenge(e).isRunning)),icon:le.CHALLENGE("infinity")},nerfV:{name:"V's Reality",powValue:()=>.5,isActive:()=>V.isRunning,icon:le.GENERIC_V},nerfCursed:{name:"Cursed Glyphs",powValue:()=>getAdjustedGlyphEffect("curseddimensions"),isActive:()=>1!==getAdjustedGlyphEffect("curseddimensions"),icon:le.SPECIFIC_GLYPH("cursed")},nerfPelle:{name:"Doomed Reality",multValue:.1,powValue:()=>PelleStrikes.infinity.hasStrike?.5:1,isActive:()=>Pelle.isDoomed,icon:le.PELLE},nerfSHardV:{name:"V's Superhard Reality",powValue:()=>1e-6,isActive:()=>V.isSuperRunning,icon:le.GENERIC_V}},me={total:{name:"Dilated Time gain",displayOverride:()=>`${format(getDilationGainPerSecond().times(getGameSpeedupForDisplay()),2,2)}/sec`,multValue:()=>getDilationGainPerSecond().times(getGameSpeedupForDisplay()),isActive:()=>ue.realityUnlocked()||ue.dilationUnlocked()&&getDilationGainPerSecond().gt(0),dilationEffect:()=>Enslaved.isRunning?.85:1,isDilated:!0,overlay:["Ψ"]},achievement:{name:"Achievements",multValue:()=>Achievement(132).effectOrDefault(1)*Achievement(137).effectOrDefault(1),isActive:()=>(Achievement(132).canBeApplied||Achievement(137).canBeApplied)&&getDilationGainPerSecond().neq(0),icon:le.ACHIEVEMENT},dilation:{name:"Repeatable Dilation Upgrades",multValue:()=>b.D1.timesEffectsOf(DilationUpgrade.dtGain,DilationUpgrade.dtGainPelle,DilationUpgrade.flatDilationMult),isActive:()=>b.D1.timesEffectsOf(DilationUpgrade.dtGain,DilationUpgrade.dtGainPelle,DilationUpgrade.flatDilationMult).gt(1),icon:le.UPGRADE("dilation")},amplifierDT:{name:"Reality Upgrade - Temporal Amplifier",multValue:()=>RealityUpgrade(1).effectOrDefault(1),isActive:()=>RealityUpgrade(1).canBeApplied&&getDilationGainPerSecond().neq(0)&&!Pelle.isDoomed,icon:le.UPGRADE("reality")},glyph:{name:"Glyph Effects",multValue:()=>{const e=getAdjustedGlyphEffect("dilationDT").times(Pelle.specialGlyphEffect.dilation),t=Replicanti.areUnlocked?Math.clampMin(Decimal.log10(Replicanti.amount)*getAdjustedGlyphEffect("replicationdtgain"),1):b.D1;return e.times(t)},isActive:()=>ue.realityUnlocked()&&getDilationGainPerSecond().neq(0),icon:le.GENERIC_GLYPH},ra1:{name:"Ra Upgrade - Multiplier based on TT",multValue:()=>b.D1.timesEffectsOf(Ra.unlocks.continuousTTBoost.effects.dilatedTime),isActive:()=>Ra.unlocks.autoTP.canBeApplied&&getDilationGainPerSecond().neq(0),icon:le.GENERIC_RA},ra2:{name:"Ra Upgrade - Multiplier based on peak game speed",multValue:()=>b.D1.timesEffectsOf(Ra.unlocks.peakGamespeedDT),isActive:()=>Ra.unlocks.autoTP.canBeApplied&&getDilationGainPerSecond().neq(0),icon:le.GENERIC_RA},alchemy:{name:"Glyph Alchemy",multValue:()=>AlchemyResource.dilation.effectOrDefault(1),isActive:()=>Ra.unlocks.unlockGlyphAlchemy.canBeApplied&&getDilationGainPerSecond().neq(0),icon:le.ALCHEMY},mendingMilestones:{name:"Mending Milestone 1",multValue:100,isActive:()=>ue.mendingUnlocked(),icon:le.MENDINGMILESTONE},iap:{name:"Shop Tab Purchases",multValue:()=>new Decimal(ShopPurchase.dilatedTimePurchases.currentMult**(Pelle.isDoomed?.5:1)),isActive:()=>ShopPurchaseData.totalSTD>0&&getDilationGainPerSecond().neq(0),icon:le.IAP},nerfV:{name:"V's Reality",powValue:()=>.5,isActive:()=>V.isRunning&&getDilationGainPerSecond().neq(0),icon:le.GENERIC_V},nerfPelle:{name:"Doomed Reality",multValue:1e-5,isActive:()=>Pelle.isDoomed&&getDilationGainPerSecond().neq(0),icon:le.PELLE},gamespeed:{name:"Current Game speed",multValue:()=>getGameSpeedupForDisplay(),isActive:()=>getGameSpeedupForDisplay().gt(1)&&getDilationGainPerSecond().neq(0),ignoresNerfPowers:!0,icon:le.GAMESPEED},effarig65:{name:"Effarig Level 65",powValue:()=>1+Math.max(0,Currency.relicShards.value.log10()/1337),isActive:()=>Ra.unlocks.relicShardBoost.isUnlocked,icon:le.GENERIC_RA},nerfSHardV:{name:"V's Superhard Reality",powValue:()=>1e-6,isActive:()=>V.isSuperRunning,icon:le.GENERIC_V}},pe={total:{name:"Eternities gained per Eternity",isBase:!0,multValue:()=>gainedEternities(),isActive:()=>(PlayerProgress.realityUnlocked()||Achievement(113).isUnlocked)&&!Pelle.isDoomed,overlay:["Δ",""]},achievement:{name:"Achievement 113",multValue:()=>Achievement(113).effectOrDefault(1),isActive:()=>Achievement(113).canBeApplied,icon:le.ACHIEVEMENT},amplifierEter:{name:"Reality Upgrade - Eternal Amplifier",multValue:()=>RealityUpgrade(3).effectOrDefault(1),isActive:()=>RealityUpgrade(3).canBeApplied,icon:le.UPGRADE("reality")},glyph:{name:"Equipped Glyphs",multValue:()=>getAdjustedGlyphEffect("timeetermult"),isActive:()=>PlayerProgress.realityUnlocked(),icon:le.GENERIC_GLYPH},ra:{name:"Ra Upgrade - Multiplier based on TT",multValue:()=>Ra.unlocks.continuousTTBoost.effects.eternity.effectOrDefault(1),isActive:()=>Ra.unlocks.continuousTTBoost.isUnlocked,icon:le.GENERIC_RA},alchemy:{name:"Alchemy Resource - Eternity",powValue:()=>AlchemyResource.eternity.effectOrDefault(1),isActive:()=>AlchemyResource.eternity.canBeApplied,icon:le.ALCHEMY},mendingMilestones:{name:"Mending Milestone 1",multValue:1e4,isActive:()=>PlayerProgress.mendingUnlocked(),icon:le.MENDINGMILESTONE},teresa90:{name:"Teresa Level 90",powValue:()=>Math.pow(Math.log10(Currency.realities.value)/20,1.111),isActive:()=>Ra.unlocks.realitiesBoostInfinityAndEternityProduction.isUnlocked,icon:le.GENERIC_RA}};const ye={prestigeLimits:[1,.85,.55,.35,.15,.06,.02,.01,.005,.001,5e-4,3e-5],dimLimits:{preNerf:[1,.85,.55,.35,.15,.06,.02,.01,.005,.001,5e-4,3e-5],postNerf:[1,.98,.915,.8,.6,.5,.3,.2,.15,.1,.06,.03]},timeCompression:{power:[1,.95,.8,.65,.5,.35,.3,.05,.01,0,0,0],mult:[1,new Decimal(1).div(1e8),new Decimal(1).div(1e45),new Decimal(1).div(1e120),new Decimal(1).div(1e265),new Decimal(1).div("1e655"),new Decimal(1).div("1e1275"),new Decimal(1).div("1e2250"),new Decimal(1).div("1e5000"),new Decimal(1).div("1e15000"),new Decimal(1).div("1e65000"),new Decimal(1).div("1e450000")],hiddenFour:[1,1,1,1,.999,.995,.99,.98,.95,.8,.5,.1],hiddenEight:[1,1,1,1,1,1,1,1,.9,.7,.5,.3]},galWeak:{scaling:[1,1.1,1.3,1.5,2,2.55,4,7,12,20,50,450],strength:[1,.98,.95,.85,.8,.725,.6,.4,.25,.1,.025],hiddenThree:[1e15,1e15,1e15,1e8,1e7,999999,88888,7777,666,55,4,3],hiddenSix:[1,1,1,1,1,1,.99,.96,.9,.7,.4,.1],hiddenEight:[1,1,1,1,1,1,1,1,2,3,4,6,9]},compGlyphs:{level:[1,.99,.95,.9,.8,.75,.4,.4,.25,.2,.15,.05],rarity:[1,.99,.975,.95,.9,.8,.8,.5,.5,.4,.2,.1],hiddenFour:[0,0,0,0,1,1,2,2,3,4,6,8],hiddenSeven:[!1,!1,!1,!1,!1,!1,!1,!0,!0,!0,!0,!0]},tickExtension:[1,2.5,10,40,220,950,3150,9e3,25e3,1e5,5e5,1e7,1e12],atomDilution:[1,.9,.8,.7,.6,.5,.4,.35,.3,.275,.25,.2],toD:{power:[1,.65,.33,.19,.1,.045,.02,.006,.002,0,0],mult:[1,.01,1e-8,new Decimal(1e-22),new Decimal(1e-65),new Decimal(1e-185),new Decimal(1e-300),new Decimal("1e-1500"),new Decimal("1e-7777"),new Decimal("1e-98765"),0,0],hiddenFive:[1,1,1,1,1,3,12,50,500,6e3,15e3,1e5],hiddenEight:[1,1,1,1,1,1,1,1,8,75,1050,11752]},repSing:{rep:[1,.25,.05,.01,.004,65e-5,1e-4,1e-5,1e-8,1e-20,0,0],sing:[1,.9,.75,.5,.325,.15,.01,.001,1e-4,1e-5,1e-8,0],dm:[1,.75,.5,.325,.15,.075,.001,1e-4,1e-6,0,0,0],presGain:[1,.95,.9,.85,.8,.75,.7,.65,.6,.5,.4,.25],hiddenFour:[!1,!1,!1,!1,!1,!0,!0,!0,!0,!0,!0,!0]},soF:{ttcost:[1,1e10,1e20,1e50,1e75,1e100,1e125,1e150,1e200,1e233,1e267,1e299],ttgen:[!1,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0],tdpow:[1,.7,.3,.08,.01,.003,1e-5,1e-8,1e-15,1e-33,1e-100,0],hiddenThree:[!1,!1,!1,!1,!0,!0,!0,!0,!0,!0,!0,!0],hiddenEight:[!1,!1,!1,!1,!1,!1,!1,!1,!0,!0,!0,!0]},alchemyNormalcy:[1,1,1,1,1,1,1,1,1,1,1,1],secondaryRejection:[1,1,1,1,1,1,1,1,1,1,1,1]},fe={total:{name:"Total EP Gained on Eternity",displayOverride:()=>Player.canEternity?format(gainedEternityPoints(),2,2):"Cannot Eternity",multValue:()=>Player.canEternity?gainedEternityPoints():1,isActive:()=>PlayerProgress.eternityUnlocked()||Player.canEternity,dilationEffect:()=>Laitela.isRunning?.75*Effects.product(DilationUpgrade.dilationPenalty):1,isDilated:!0,overlay:["Δ",""]},base:{name:"Base Eternity Points",isBase:!0,fakeValue:b.D5,multValue:()=>b.D5.pow(player.records.thisEternity.maxIP.plus(gainedInfinityPoints()).log10()/(308-PelleRifts.recursion.effectValue.toNumber())-.7),isActive:()=>PlayerProgress.eternityUnlocked(),icon:le.CONVERT_FROM("IP")},IP:{name:"Eternity Points from Infinity Points",displayOverride:()=>`${format(player.records.thisEternity.maxIP.plus(gainedInfinityPoints()),2,2)} IP`,multValue:b.D5,isActive:()=>PlayerProgress.eternityUnlocked(),icon:le.SPECIFIC_GLYPH("infinity")},divisor:{name:"Pelle - EP Formula Improvement",displayOverride:()=>{const e=308-PelleRifts.recursion.effectValue.toNumber();return`log(IP)/${formatInt(308)} ➜ log(IP)/${format(e,2,2)}`},powValue:()=>308/(308-PelleRifts.recursion.effectValue.toNumber()),isActive:()=>PelleRifts.recursion.canBeApplied,icon:le.DIVISOR("EP")},eternityUpgrade:{name:()=>`Eternity Upgrade - Repeatable ${formatX(5)} EP`,multValue:()=>EternityUpgrade.epMult.effectOrDefault(1),isActive:()=>PlayerProgress.eternityUnlocked()&&!Pelle.isDoomed,icon:le.UPGRADE("eternity")},timeStudy:{name:"Time Studies",multValue:()=>b.D1.timesEffectsOf(TimeStudy(61),TimeStudy(121),TimeStudy(122),TimeStudy(123)),isActive:()=>PlayerProgress.eternityUnlocked()&&!Pelle.isDoomed,icon:le.TIME_STUDY},glyph:{name:"Equipped Glyphs",multValue:()=>b.D1.timesEffectsOf(Pelle.isDoomed?null:GlyphEffect.epMult).times(Pelle.specialGlyphEffect.time),powValue:()=>GlyphAlteration.isAdded("time")?getSecondaryGlyphEffect("timeEP"):1,isActive:()=>PlayerProgress.realityUnlocked(),icon:le.GENERIC_GLYPH},realityUpgrade:{name:"Reality Upgrade - The Knowing Existence",multValue:()=>RealityUpgrade(12).effectOrDefault(1),isActive:()=>RealityUpgrade(12).canBeApplied&&!Pelle.isDoomed,icon:le.UPGRADE("reality")},pelle:{name:"Pelle Strike - Vacuum Rift",multValue:()=>PelleRifts.vacuum.milestones[2].effectOrDefault(1),isActive:()=>PelleRifts.vacuum.milestones[2].canBeApplied,icon:le.PELLE},mendingMilestones:{name:"Mending Milestone 1",multValue:1e5,isActive:()=>PlayerProgress.mendingUnlocked(),icon:le.MENDINGMILESTONE},iap:{name:"Shop Tab Purchases",multValue:()=>ShopPurchase.EPPurchases.currentMult,isActive:()=>ShopPurchaseData.totalSTD>0,icon:le.IAP},nerfTeresa:{name:"Teresa's Reality",powValue:()=>.55,isActive:()=>Teresa.isRunning,icon:le.GENERIC_TERESA},nerfV:{name:"V's Reality",powValue:()=>.5,isActive:()=>V.isRunning,icon:le.GENERIC_V},nerfCorruptions:{name:"Prestige Limits Hostility",powValue:()=>ye.prestigeLimits[player.mending.corruption[0]],isActive:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[0]>0,icon:le.CORRUPTION},nerfSHardV:{name:"V's Reality",powValue:()=>1e-6,isActive:()=>V.isRunning,icon:le.GENERIC_V},nerfSoftcap:{name:"Eternity Point Softcap",powValue:()=>gainedEternityPoints().log10()/gainedEternityPoints(!0).log10(),isActive:()=>gainedEternityPoints().gte(Decimal.pow10(1e18)),icon:le.SOFTCAP("eternity")}},ge={antimatter:{name:"Antimatter Galaxies",displayOverride:()=>{const e=player.galaxies+GalaxyGenerator.galaxies,t=de.globalGalaxyMult();return`${formatInt(e)}, ${formatX(t,2,2)} strength`},multValue:()=>Decimal.pow10(player.galaxies+GalaxyGenerator.galaxies),isActive:!0,icon:le.ANTIMATTER},replicanti:{name:"Replicanti Galaxies",displayOverride:()=>{const e=Replicanti.galaxies.total;let t=Replicanti.galaxies.bought;t*=1+Effects.sum(TimeStudy(132),TimeStudy(133)),t+=Replicanti.galaxies.extra,t+=Math.min(Replicanti.galaxies.bought,ReplicantiUpgrade.galaxies.value)*(EternityChallenge(8).completions>=1?EternityChallenge(8).reward.effectValue:1);const i=t/Math.clampMin(e,1)*de.globalGalaxyMult();return`${formatInt(e)}, ${formatX(i,2,2)} strength`},multValue:()=>{let e=Replicanti.galaxies.bought;return e*=1+Effects.sum(TimeStudy(132),TimeStudy(133)),e+=Replicanti.galaxies.extra,e+=Math.min(Replicanti.galaxies.bought,ReplicantiUpgrade.galaxies.value)*(EternityChallenge(8).completions>=1?EternityChallenge(8).reward.effectValue:1),Decimal.pow10(e)},isActive:()=>Replicanti.areUnlocked,icon:le.SPECIFIC_GLYPH("replication")},tachyon:{name:"Tachyon Galaxies",displayOverride:()=>{const e=player.dilation.totalTachyonGalaxies,t=de.globalGalaxyMult()*(1+Math.max(0,Replicanti.amount.log10()/1e6)*AlchemyResource.alternation.effectValue);return`${formatInt(e)}, ${formatX(t,2,2)} strength`},multValue:()=>{const e=player.dilation.totalTachyonGalaxies,t=1+Math.max(0,Replicanti.amount.log10()/1e6)*AlchemyResource.alternation.effectValue;return Decimal.pow10(e*t)},isActive:()=>player.dilation.totalTachyonGalaxies>0,icon:le.SPECIFIC_GLYPH("dilation")},nerfPelle:{name:"Doomed Reality",displayOverride:()=>`All Galaxy strength /${formatInt(2)}`,powValue:.5,isActive:()=>Pelle.isDoomed,icon:le.PELLE}},ve={total:{name:"Game speed",displayOverride:()=>{if(Enslaved.isStoringRealTime)return`Set to ${format(0)} (storing real time)`;if(EternityChallenge(12).isRunning)return`${formatX(1)}/${formatInt(1e3)} (fixed)`;const e=getGameSpeedupFactor(),t=de.blackHoleSpeeds(),i=t.current,a=t.average,n=Enslaved.isAutoReleasing?getGameSpeedupForDisplay():e.div(i).times(a),s=` (current) | ${formatX(n,2,2)} (average)`;return`${formatX(e,2,2)}${e===n?"":s}`},multValue:()=>getGameSpeedupForDisplay(),isActive:()=>PlayerProgress.seenAlteredSpeed(),dilationEffect:()=>Effarig.isRunning?Effarig.multDilation:1,isDilated:!0,overlay:["Δ",'','']},glyph:{name:"Equipped Glyphs",multValue:()=>getAdjustedGlyphEffect("timespeed"),powValue:()=>getAdjustedGlyphEffect("effarigblackhole"),isActive:()=>PlayerProgress.realityUnlocked()&&!EternityChallenge(12).isRunning,icon:le.GENERIC_GLYPH},blackHoleCurr:{name:"Current Black Hole Speedup",multValue:()=>de.blackHoleSpeeds().current,isActive:()=>BlackHole(1).isUnlocked&&!BlackHoles.arePaused&&!EternityChallenge(12).isRunning,icon:le.BLACK_HOLE},blackHoleAvg:{name:"Average Black Hole Speedup",multValue:()=>de.blackHoleSpeeds().average,isActive:()=>BlackHole(1).isUnlocked&&!BlackHoles.arePaused&&!EternityChallenge(12).isRunning,icon:le.BLACK_HOLE},achievementMult:{name:"30 V-Achievement Milestone - Achievement Multiplier",multValue:()=>Decimal.min(1e300,Decimal.pow(VUnlocks.achievementBH.effectOrDefault(1),BlackHoles.list.countWhere((e=>e.isUnlocked)))),isActive:()=>!BlackHoles.arePaused&&VUnlocks.achievementBH.canBeApplied&&!EternityChallenge(12).isRunning,icon:le.ACHIEVEMENT},pulsing:{name:"Auto-Discharging Stored Time",multValue:()=>Enslaved.isAutoReleasing?Decimal.max(Enslaved.autoReleaseSpeed.div(getGameSpeedupFactor()),1):getGameSpeedupFactor(),isActive:()=>Enslaved.canRelease()&&Enslaved.isAutoReleasing&&!EternityChallenge(12).isRunning,icon:le.BH_PULSE},singularity:{name:"Singularity Milestone - Game speed based on Singularities",multValue:()=>SingularityMilestone.gamespeedFromSingularities.effectOrDefault(1),isActive:()=>SingularityMilestone.gamespeedFromSingularities.canBeApplied&&!EternityChallenge(12).isRunning,icon:le.SINGULARITY},pelle:{name:"Pelle Upgrade - Repeatable Game speed",multValue:()=>PelleUpgrade.timeSpeedMult.effectValue.toNumber(),isActive:()=>Pelle.isDoomed&&!EternityChallenge(12).isRunning,icon:le.PELLE},ec12:{name:"Eternity Challenge 12",multValue:()=>new Decimal(.001).div(getGameSpeedupForDisplay()),isActive:()=>EternityChallenge(12).isRunning,icon:le.CHALLENGE("eternity")},chargingBH:{name:"Black Hole Charging",multValue:()=>Ra.unlocks.autoPulseTime.canBeApplied?.01:0,isActive:()=>Enslaved.isStoringGameTime,icon:le.BLACK_HOLE},invertedBH:{name:"Inverted Black Hole",multValue:()=>player.blackHoleNegative,isActive:()=>BlackHoles.areNegative,icon:le.CHALLENGE("eternity")},nerfLaitela:{name:"Lai'tela's Reality",powValue:()=>Decimal.clampMax(Time.thisRealityRealTime.totalMinutes.div(10),1),isActive:()=>Laitela.isRunning,icon:le.GENERIC_LAITELA},expoBlackHoles:{name:"Black Hole 3",powValue:()=>ExpoBlackHole(1).power,isActive:()=>ExpoBlackHole(1).isUnlocked,icon:le.BLACK_HOLE},CorruptionUpg:{name:"Hostility Upgrade - Spacetime Distortion",multValue:()=>Decimal.pow10(Math.pow(1+CorruptionData.corruptionChallenge.recordScore,1/1.48)),isActive:()=>player.mending.corruptionChallenge.corruptedMend?Decimal.pow10(Math.pow(1+player.mending.corruptionChallenge.recordScore,.25)):Decimal.pow10(Math.pow(1+player.mending.corruptionChallenge.recordScore,1/1.48)),icon:le.UPGRADE("corruption")},nerfCorruptions:{name:"Time Compression Hostility - Power Value",powValue:()=>ye.timeCompression.power[player.mending.corruption[1]],isActive:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[1]>0,icon:le.CORRUPTION},nerfCorruptions2:{name:"Time Compression Hostility - Mult Value",multValue:()=>ye.timeCompression.mult[player.mending.corruption[1]],isActive:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[1]>0,icon:le.CORRUPTION},nerfSoftcap:{name:"Game Speed Softcap",powValue:()=>getGameSpeedupFactor().log10()/getGameSpeedupFactor().div(1e300).pow(1/.4321).times(1e300).log10(),isActive:()=>getGameSpeedupFactor().gte(1e300),icon:le.SOFTCAP("reality")}},be={achievement:{name:(e,t)=>2===(null===t||void 0===t?void 0:t.length)?`Achievement ${e} (${t})`:`Achievement ${e}`,multValue:(e,t)=>{if(141===e)return Achievement(141).canBeApplied?Achievement(141).effects.ipGain.effectOrDefault(1):1;if(183===e)return 1;if(!t)return Achievement(e).canBeApplied?Achievement(e).effectOrDefault(1):1;if(2===(null===t||void 0===t?void 0:t.length)){let i=b.D1;for(let a=1;a<=de.activeDimCount(t);a++){let n;n=43===e?Achievement(43).canBeApplied?1+a/100:1:de.achievementDimCheck(e,`${t}${a}`)&&Achievement(e).canBeApplied?Achievement(e).effectOrDefault(1):1,i=i.times(n)}return i}return 43===e?Achievement(43).canBeApplied?1+Number(t.charAt(2))/100:1:de.achievementDimCheck(e,t)&&Achievement(e).canBeApplied?Achievement(e).effectOrDefault(1):1},powValue:e=>183===e?Achievement(183).effectOrDefault(1):1,isActive:e=>Achievement(e).canBeApplied,icon:e=>{const t=le.ACHIEVEMENT;return{color:t.color,symbol:`${t.symbol}${e}`}}},timeStudy:{name:(e,t)=>2===(null===t||void 0===t?void 0:t.length)?`Time Study ${e} (${t})`:`Time Study ${e}`,multValue:(e,t)=>{if(132===e)return TimeStudy(e).canBeApplied?3:1;if(!t)return TimeStudy(e).canBeApplied?TimeStudy(e).effectOrDefault(1):1;if(2===(null===t||void 0===t?void 0:t.length)){let i=b.D1;for(let a=1;a<=de.activeDimCount(t);a++)i=i.times(de.timeStudyDimCheck(e,`${t}${a}`)&&TimeStudy(e).isBought?TimeStudy(e).effectOrDefault(1):1);return i}return de.timeStudyDimCheck(e,t)&&TimeStudy(e).isBought?new Decimal(TimeStudy(e).effectOrDefault(1)):1},isActive:e=>TimeStudy(e).isBought,icon:e=>{const t=le.TIME_STUDY;return{color:t.color,symbol:`${t.symbol}${e}`}}},infinityChallenge:{name:e=>`Infinity Challenge ${e}`,displayOverride:e=>4===e?formatPow(InfinityChallenge(4).reward.effectValue,0,3):"",multValue:(e,t)=>{if(4===e){const e=InfinityChallenge(4).reward.effectValue,i=AntimatterDimensions.all.map((t=>t.multiplier.pow((e-1)/e)));return 2===(null===t||void 0===t?void 0:t.length)?i.reduce(((e,t)=>e.times(t)),b.D1):i[Number(t.charAt(2))-1]}if(2===(null===t||void 0===t?void 0:t.length)){let i=b.D1;for(let a=1;a<=de.activeDimCount(t);a++)i=i.times(de.ICDimCheck(e,`${t}${a}`)&&InfinityChallenge(e).isCompleted?InfinityChallenge(e).reward.effectOrDefault(1):1);return i}const i=Number(t.charAt(2));return 8===e?i>1&&i<8?InfinityChallenge(e).reward.effectValue:b.D1:InfinityChallenge(e).reward.effectValue},isActive:e=>InfinityChallenge(e).isCompleted,icon:e=>{const t=le.CHALLENGE("infinity");return{color:t.color,symbol:`${t.symbol}${e}`}}},eternityChallenge:{name:e=>`Eternity Challenge ${e}`,multValue:(e,t)=>{if(2===(null===t||void 0===t?void 0:t.length)){let i=b.D1;for(let a=1;a<=de.activeDimCount(t);a++)i=i.times(de.ECDimCheck(e,`${t}${a}`)&&EternityChallenge(e).reward.canBeApplied?EternityChallenge(e).reward.effectOrDefault(1).clampMin(1):1);return i}return 2===e?"ID1"===t?EternityChallenge(e).reward.effectValue:b.D1:EternityChallenge(e).reward.effectOrDefault(1)},isActive:e=>EternityChallenge(e).reward.canBeApplied,icon:e=>{const t=le.CHALLENGE("eternity");return{color:t.color,symbol:`${t.symbol}${e}`}}}},Ee={total:{name:"Infinities gained per Crunch",isBase:!0,multValue:()=>gainedInfinities(),isActive:()=>(Achievement(87).isUnlocked||PlayerProgress.eternityUnlocked())&&!EternityChallenge(4).isRunning&&!Pelle.isDoomed,overlay:["∞",""]},achievement:{name:"Achievements",multValue:()=>b.D1.timesEffectsOf(Achievement(87),Achievement(164)),isActive:()=>Achievement(87).isUnlocked,icon:le.ACHIEVEMENT},timeStudy:{name:"Time Study 32",multValue:()=>TimeStudy(32).effectOrDefault(1),isActive:()=>TimeStudy(32).isBought,icon:le.TIME_STUDY},amplifierInf:{name:"Reality Upgrade - Boundless Amplifier",multValue:()=>b.D1.timesEffectsOf(RealityUpgrade(5)),isActive:()=>PlayerProgress.realityUnlocked()&&!Pelle.isDoomed,icon:le.UPGRADE("reality")},realityUpgrades:{name:"Reality Upgrade - Innumerably Construct",multValue:()=>b.D1.timesEffectsOf(RealityUpgrade(7)),isActive:()=>PlayerProgress.realityUnlocked(),icon:le.UPGRADE("reality")},glyph:{name:"Equipped Glyphs",multValue:()=>getAdjustedGlyphEffect("infinityinfmult"),isActive:()=>PlayerProgress.realityUnlocked(),icon:le.GENERIC_GLYPH},ra:{name:"Ra Upgrade - Multiplier based on TT",multValue:()=>Ra.unlocks.continuousTTBoost.effects.infinity.effectOrDefault(1),isActive:()=>Ra.unlocks.continuousTTBoost.isUnlocked,icon:le.GENERIC_RA},singularity:{name:"Singularity Milestone - Power from Singularities",powValue:()=>SingularityMilestone.infinitiedPow.effectOrDefault(1),isActive:()=>SingularityMilestone.infinitiedPow.canBeApplied,icon:le.SINGULARITY},teresa90:{name:"Teresa Level 90",powValue:()=>Math.pow(Math.log10(Currency.realities.value)/20,1.111),isActive:()=>Ra.unlocks.realitiesBoostInfinityAndEternityProduction.isUnlocked,icon:le.GENERIC_RA}},Te={total:{name:e=>e?`ID ${e} Multiplier`:EternityChallenge(7).isRunning?"AD7 Production":"Infinity Power Production",displayOverride:e=>e?formatX(InfinityDimension(e).multiplier,2):`${format(InfinityDimension(1).productionPerSecond,2)}/sec`,multValue:e=>e?InfinityDimension(e).multiplier:InfinityDimensions.all.filter((e=>e.isProducing)).map((e=>e.multiplier)).reduce(((e,t)=>e.times(t)),b.D1),isActive:e=>e?InfinityDimension(e).isProducing:ue.eternityUnlocked()||InfinityDimension(1).isProducing,dilationEffect:()=>{const e=player.dilation.active?.75*Effects.product(DilationUpgrade.dilationPenalty):1;return e*(Effarig.isRunning?Effarig.multDilation:1)},isDilated:!0,overlay:["∞",""],icon:e=>le.DIMENSION("ID",e)},purchase:{name:e=>e?`Purchased ID ${e}`:"Purchases",multValue:e=>{const t=e=>Decimal.pow(InfinityDimension(e).powerMultiplier,Math.floor(InfinityDimension(e).baseAmount/10));return e?t(e):InfinityDimensions.all.filter((e=>e.isProducing)).map((e=>t(e.tier))).reduce(((e,t)=>e.times(t)),b.D1)},isActive:()=>!EternityChallenge(2).isRunning&&!EternityChallenge(10).isRunning,icon:e=>le.PURCHASE("ID",e)},highestDim:{name:()=>"Amount of highest Dimension",displayOverride:()=>{const e=de.activeDimCount("ID");return`ID ${e}, ${format(InfinityDimension(e).amount,2)}`},multValue:()=>InfinityDimension(de.activeDimCount("ID")).amount,isActive:()=>InfinityDimension(1).isProducing,icon:le.DIMENSION("ID")},basePurchase:{name:"Base purchases",multValue:e=>{const t=e=>{const t=8===e?Math.floor(InfinityDimension(e).baseAmount/10):Math.min(InfinityDimensions.HARDCAP_PURCHASES,Math.floor(InfinityDimension(e).baseAmount/10)),i=InfinityDimension(e)._powerMultiplier;return Decimal.pow(i,t)};return e?t(e):InfinityDimensions.all.filter((e=>e.isProducing)).map((e=>t(e.tier))).reduce(((e,t)=>e.times(t)),b.D1)},isActive:!0,icon:le.PURCHASE("baseID")},tesseractPurchase:{name:"Tesseracts",multValue:e=>{const t=e=>{if(8===e)return b.D1;const t=Math.floor(InfinityDimension(e).baseAmount/10);return Decimal.pow(InfinityDimension(e)._powerMultiplier,Math.clampMin(t-InfinityDimensions.HARDCAP_PURCHASES,0))};return e?t(e):InfinityDimensions.all.filter((e=>e.isProducing)).map((e=>t(e.tier))).reduce(((e,t)=>e.times(t)),b.D1)},isActive:()=>Tesseracts.bought>0,icon:le.PURCHASE("tesseractID")},infinityGlyphSacrifice:{name:"Infinity Glyph sacrifice",multValue:()=>InfinityDimension(8).isProducing?Decimal.pow(GlyphSacrifice.infinity.effectValue,Math.floor(Math.min(InfinityDimension(8).baseAmount,1e25)/10)):b.D1,isActive:()=>GlyphSacrifice.infinity.effectValue.gt(1),icon:le.SACRIFICE("infinity")},powPurchase:{name:"Imaginary Upgrade - Recollection of Intrusion",powValue:()=>ImaginaryUpgrade(14).effectOrDefault(1),isActive:()=>ImaginaryUpgrade(14).canBeApplied,icon:le.UPGRADE("imaginary")},replicanti:{name:"Replicanti Multiplier",multValue:e=>Decimal.pow(replicantiMult(),e?1:de.activeDimCount("ID")),isActive:()=>Replicanti.areUnlocked,icon:le.SPECIFIC_GLYPH("replication")},achievementMult:{name:"Achievement Multiplier",multValue:e=>Decimal.pow(Achievements.power,e?1:de.activeDimCount("ID")),isActive:()=>Achievement(75).canBeApplied&&!Pelle.isDoomed,icon:le.ACHIEVEMENT},achievement:{name:()=>"Achievement 94",multValue:e=>1===(null!==e&&void 0!==e?e:1)?Achievement(94).effectOrDefault(1):1,isActive:()=>Achievement(94).canBeApplied,icon:le.ACHIEVEMENT},timeStudy:{name:e=>e?`Time Studies (ID ${e})`:"Time Studies",multValue:e=>{const t=b.D1.timesEffectsOf(TimeStudy(82),TimeStudy(92),TimeStudy(162),TimeStudy(312));if(e)return 4===e?t.times(TimeStudy(72).effectOrDefault(1)):t;const i=de.activeDimCount("ID");return Decimal.pow(t,i).times(i>=4?TimeStudy(72).effectOrDefault(1):b.D1)},isActive:()=>ue.eternityUnlocked(),icon:le.TIME_STUDY},eternityUpgrade:{name:"Eternity Upgrades",multValue:e=>{const t=b.D1.timesEffectsOf(EternityUpgrade.idMultEP,EternityUpgrade.idMultEternities,EternityUpgrade.idMultICRecords);return Decimal.pow(t,e?1:de.activeDimCount("ID"))},isActive:()=>ue.eternityUnlocked(),icon:le.UPGRADE("eternity")},eu1:{name:()=>"Unspent Eternity Points",multValue:e=>Decimal.pow(EternityUpgrade.idMultEP.effectOrDefault(1),e?1:de.activeDimCount("ID")),isActive:()=>EternityUpgrade.idMultEP.canBeApplied,icon:le.UPGRADE("eternity")},eu2:{name:()=>"Eternity Count",multValue:e=>Decimal.pow(EternityUpgrade.idMultEternities.effectOrDefault(1),e?1:de.activeDimCount("ID")),isActive:()=>EternityUpgrade.idMultEternities.canBeApplied,icon:le.UPGRADE("eternity")},eu3:{name:()=>"Infinity Challenge Records",multValue:e=>Decimal.pow(EternityUpgrade.idMultICRecords.effectOrDefault(1),e?1:de.activeDimCount("ID")),isActive:()=>EternityUpgrade.idMultICRecords.canBeApplied,icon:le.UPGRADE("eternity")},infinityChallenge:{name:"Infinity Challenges",multValue:e=>{const t=b.D1.timesEffectsOf(InfinityChallenge(1).reward,InfinityChallenge(6).reward);return Decimal.pow(t,e?1:de.activeDimCount("ID"))},isActive:()=>InfinityChallenge(1).isCompleted,icon:le.CHALLENGE("infinity")},eternityChallenge:{name:e=>e?`Eternity Challenges (ID ${e})`:" Eternity Challenges",multValue:e=>{const t=b.D1.timesEffectsOf(EternityChallenge(4).reward,EternityChallenge(9).reward).times(EternityChallenge(7).isRunning?Tickspeed.perSecond:b.D1);if(e)return 1===e?t.times(EternityChallenge(2).reward.effectOrDefault(1)):t;const i=de.activeDimCount("ID");return Decimal.pow(t,i).times(i>=1?EternityChallenge(2).reward.effectOrDefault(1):b.D1)},isActive:()=>EternityChallenge(2).completions>0,icon:le.CHALLENGE("eternity")},tickspeed:{name:()=>"Tickspeed (EC7)",displayOverride:()=>{const e=Tickspeed.perSecond,t=de.activeDimCount("ID"),i=de.pluralizeDimensions(t);return`${format(e,2,2)}/sec on ${formatInt(t)} ${i}\n ➜ ${formatX(e.pow(t),2,2)}`},multValue:()=>Tickspeed.perSecond.pow(8),isActive:()=>EternityChallenge(7).isRunning,icon:le.TICKSPEED},glyph:{name:"Glyph Effects",multValue:()=>1,powValue:()=>getAdjustedGlyphEffect("infinitypow")*getAdjustedGlyphEffect("effarigdimensions"),isActive:()=>ue.realityUnlocked(),icon:le.GENERIC_GLYPH},alchemy:{name:"Glyph Alchemy",multValue:e=>Decimal.pow(AlchemyResource.dimensionality.effectOrDefault(1),e?1:de.activeDimCount("ID")),powValue:()=>AlchemyResource.infinity.effectOrDefault(1)*Ra.momentumValue,isActive:()=>Ra.unlocks.unlockGlyphAlchemy.canBeApplied,icon:le.ALCHEMY},imaginaryUpgrade:{name:"Imaginary Upgrade - Hyperbolic Apeirogon",multValue:e=>Decimal.pow(ImaginaryUpgrade(8).effectOrDefault(1),e?1:de.activeDimCount("ID")),isActive:()=>ImaginaryUpgrade(8).canBeApplied,icon:le.UPGRADE("imaginary")},pelle:{name:"Pelle Rift Effects",multValue:e=>{const t=b.D1.timesEffectsOf(PelleRifts.recursion.milestones[1]),i=de.activeDimCount("ID"),a=(e?1===e:i>=1)?PelleRifts.decay.milestones[0].effectOrDefault(1):b.D1;return Decimal.pow(t,e?1:i).times(a)},powValue:()=>PelleRifts.paradox.effectOrDefault(b.D1).toNumber(),isActive:()=>Pelle.isDoomed,icon:le.PELLE},iap:{name:"Shop Tab Purchases",multValue:e=>Decimal.pow(ShopPurchase.allDimPurchases.currentMult,e?1:de.activeDimCount("ID")),isActive:()=>ShopPurchaseData.totalSTD>0,icon:le.IAP},powerConversion:{name:"Infinity Power Conversion",powValue:()=>InfinityDimensions.powerConversionRate,isActive:()=>Currency.infinityPower.value.gt(1)&&!EternityChallenge(9).isRunning,icon:le.IPOW_CONVERSION},v50:{name:"Ra Upgrade - The 5 V-achievement milestone affects ID and TD at a reduced rate",powValue:()=>Math.pow(VUnlocks.adPow.effectValue,.5),isActive:()=>Ra.unlocks.vAchMilestone2AffectsIDsAndTDs.isUnlocked,icon:le.GENERIC_V},nerfV:{name:"V's Reality",powValue:()=>.5,isActive:()=>V.isRunning,icon:le.GENERIC_V},nerfCursed:{name:"Cursed Glyphs",powValue:()=>getAdjustedGlyphEffect("curseddimensions"),isActive:()=>1!==getAdjustedGlyphEffect("curseddimensions"),icon:le.SPECIFIC_GLYPH("cursed")},nerfPelle:{name:"Doomed Reality",powValue:.5,isActive:()=>PelleStrikes.powerGalaxies.hasStrike,icon:le.PELLE},nerfSoftcap:{name:"Infinity Power Softcap",powValue:()=>.1,isActive:()=>Currency.infinityPower.value.log10()>9e15,icon:le.SOFTCAP("infinity")}},we={total:{name:"Total IP Gained on Infinity",displayOverride:()=>Player.canCrunch?format(gainedInfinityPoints(),2,2):"Cannot Crunch",multValue:()=>Player.canCrunch?gainedInfinityPoints():1,isActive:()=>ue.infinityUnlocked()||Player.canCrunch,dilationEffect:()=>Laitela.isRunning?.75*Effects.product(DilationUpgrade.dilationPenalty):1,isDilated:!0,overlay:["∞",""]},base:{name:"Base Infinity Points",isBase:!0,fakeValue:b.D5,multValue:()=>{const e=Effects.min(308,Achievement(103),TimeStudy(111));return Decimal.pow10(player.records.thisInfinity.maxAM.log10()/e-.75)},isActive:()=>player.break,icon:le.CONVERT_FROM("AM")},antimatter:{name:"Infinity Points from Antimatter",displayOverride:()=>`${format(player.records.thisInfinity.maxAM,2,2)} AM`,multValue:b.D5,isActive:()=>player.break,icon:le.ANTIMATTER},divisor:{name:"Formula Improvement",displayOverride:()=>{const e=Effects.min(308,Achievement(103),TimeStudy(111));return`log(AM)/${formatInt(308)} ➜ log(AM)/${format(e,2,1)}`},powValue:()=>308/Effects.min(308,Achievement(103),TimeStudy(111)),isActive:()=>Achievement(103).canBeApplied||TimeStudy(111).isBought,icon:le.DIVISOR("IP")},infinityUpgrade:{name:()=>`Infinity Upgrade - Repeatable ${formatX(2)} IP`,multValue:()=>InfinityUpgrade.ipMult.effectOrDefault(1),isActive:()=>player.break&&!Pelle.isDoomed,icon:le.UPGRADE("infinity")},achievement:{name:"Achievements",multValue:()=>b.D1.timesEffectsOf(Achievement(85),Achievement(93),Achievement(116),Achievement(125),Achievement(141).effects.ipGain),isActive:()=>player.break&&!Pelle.isDoomed,icon:le.ACHIEVEMENT},timeStudy:{name:"Time Studies",multValue:()=>b.D1.timesEffectsOf(TimeStudy(41),TimeStudy(51),TimeStudy(141),TimeStudy(142),TimeStudy(143),TimeStudy(305)),isActive:()=>player.break&&!Pelle.isDoomed,icon:le.TIME_STUDY},dilationUpgrade:{name:"Dilation Upgrade - IP multiplier based on DT",multValue:()=>DilationUpgrade.ipMultDT.effectOrDefault(1),isActive:()=>DilationUpgrade.ipMultDT.canBeApplied,icon:le.UPGRADE("dilation")},glyph:{name:"Equipped Glyphs",multValue:()=>Pelle.specialGlyphEffect.infinity.times(Pelle.isDoomed&&!Ra.unlocks.unlockPelleGlyphEffects.isUnlocked?1:getAdjustedGlyphEffect("infinityIP")),powValue:()=>GlyphAlteration.isAdded("infinity")?getSecondaryGlyphEffect("infinityIP"):1,isActive:()=>ue.realityUnlocked(),icon:le.GENERIC_GLYPH},alchemy:{name:"Glyph Alchemy",multValue:()=>Replicanti.amount.powEffectOf(AlchemyResource.exponential),isActive:()=>Ra.unlocks.unlockGlyphAlchemy.canBeApplied,icon:le.ALCHEMY},pelle:{name:"Pelle Strike - Vacuum Rift",multValue:()=>b.D1.timesEffectsOf(PelleRifts.vacuum),isActive:()=>Pelle.isDoomed,icon:le.PELLE},mendingMilestones:{name:"Mending Milestone 1",multValue:1e20,isActive:()=>ue.mendingUnlocked(),icon:le.MENDINGMILESTONE},ra:{name:"Ra Memories",powValue:()=>Decimal.log10(Currency.realityMachines.value.max(1))/100,isActive:()=>Ra.unlocks.realityMachinesBoostIpAndEpGain.isUnlocked,icon:le.GENERIC_RA},iap:{name:"Shop Tab Purchases",multValue:()=>ShopPurchase.IPPurchases.currentMult,isActive:()=>ShopPurchaseData.totalSTD>0,icon:le.IAP},nerfTeresa:{name:"Teresa's Reality",powValue:()=>.55,isActive:()=>Teresa.isRunning,icon:le.GENERIC_TERESA},nerfV:{name:"V's Reality",powValue:()=>.5,isActive:()=>V.isRunning,icon:le.GENERIC_V},nerfCorruptions:{name:"Prestige Limits Hostility",powValue:()=>ye.prestigeLimits[player.mending.corruption[0]],isActive:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[0]>0,icon:le.CORRUPTION},nerfSoftcap:{name:"Infinity Point Softcap",powValue:()=>gainedInfinityPoints().log10()/gainedInfinityPoints(!0).log10(),isActive:()=>gainedInfinityPoints(!0).gte(b.END),icon:le.SOFTCAP("infinity")}},ke={total:{name:"Replicanti Speed",multValue:()=>totalReplicantiSpeedMult(Replicanti.amount.gt(replicantiCap())),isActive:()=>PlayerProgress.eternityUnlocked(),overlay:["Ξ"]},achievement:{name:"Achievement 134",multValue:2,isActive:()=>Achievement(134).canBeApplied&&Replicanti.amount.lte(replicantiCap())&&!Pelle.isDoomed,icon:le.ACHIEVEMENT},timeStudy:{name:"Time Studies",multValue:()=>{const e=Effects.product(TimeStudy(62),TimeStudy(213));return e*(Perk.studyPassive.isBought&&TimeStudy(132).isBought?3:1)},isActive:()=>PlayerProgress.eternityUnlocked()&&!Pelle.isDoomed,icon:le.TIME_STUDY},glyph:{name:"Glyph Effects",multValue:()=>{const e=(Pelle.isDoomed?b.D1:getAdjustedGlyphEffect("replicationspeed")).times(Pelle.specialGlyphEffect.replication),t=Math.clampMin(Decimal.log10(Replicanti.amount)*getSecondaryGlyphEffect("replicationdtgain"),1);return GlyphAlteration.isAdded("replication")?e.times(t):e},isActive:()=>PlayerProgress.realityUnlocked()&&(!Pelle.isDoomed||Pelle.specialGlyphEffect.replication>1),icon:le.GENERIC_GLYPH},amplifierRep:{name:"Reality Upgrade - Replicative Amplifier",multValue:()=>RealityUpgrade(2).effectOrDefault(1),isActive:()=>PlayerProgress.realityUnlocked()&&!Pelle.isDoomed,icon:le.UPGRADE("reality")},realityUpgrade1:{name:"Reality Upgrade - Cosmically Duplicate",multValue:()=>RealityUpgrade(6).effectOrDefault(1),isActive:()=>PlayerProgress.realityUnlocked()&&!Pelle.isDoomed,icon:le.UPGRADE("reality")},realityUpgrade2:{name:"Reality Upgrade - Replicative Rapidity",multValue:()=>RealityUpgrade(23).effectOrDefault(1),isActive:()=>PlayerProgress.realityUnlocked()&&!Pelle.isDoomed,icon:le.UPGRADE("reality")},alchemy:{name:"Alchemy Resource - Replication",multValue:()=>AlchemyResource.replication.effectOrDefault(1),isActive:()=>Ra.unlocks.unlockGlyphAlchemy.canBeApplied&&!Pelle.isDoomed,icon:le.ALCHEMY},ra:{name:"Ra Upgrade - Multiplier based on TT",multValue:()=>Ra.unlocks.continuousTTBoost.effects.replicanti.effectOrDefault(1),isActive:()=>Ra.unlocks.continuousTTBoost.isUnlocked,icon:le.GENERIC_RA},pelle:{name:"Pelle Strike - Decay Rift",multValue:()=>PelleRifts.decay.effectValue,isActive:()=>Pelle.isDoomed&&PelleRifts.decay.effectValue.gt(1),icon:le.PELLE},mendingMilestones:{name:"Mending Milestone 1",multValue:1e3,isActive:()=>PlayerProgress.mendingUnlocked(),icon:le.MENDINGMILESTONE},iap:{name:"Shop Tab Purchases",multValue:()=>ShopPurchase.replicantiPurchases.currentMult,isActive:()=>ShopPurchaseData.totalSTD>0&&ShopPurchase.replicantiPurchases.currentMult>1,icon:le.IAP},relicShardBoost:{name:"Effarig Level 65",multValue:()=>Currency.relicShards.value.pow(.6667).clampMin(1),isActive:()=>Ra.unlocks.relicShardBoost.isUnlocked,icon:le.GENERIC_RA}},Ce={total:{name:"Total Tachyon Particles",displayOverride:()=>{const e=format(new Decimal(Currency.tachyonParticles.value),2,2);return PelleRifts.paradox.milestones[1].canBeApplied?`${e}${formatPow(PelleRifts.paradox.milestones[1].effectValue,1,1)}`:e},multValue:()=>{const e=new Decimal(Currency.tachyonParticles.value).pow(PelleRifts.paradox.milestones[1].effectOrDefault(1));return TimeStudy.dilation.isBought?e:1},isActive:()=>ue.realityUnlocked()||ue.dilationUnlocked(),icon:le.TACHYON_PARTICLES},base:{name:"Base Tachyon Particle Count",isBase:!0,multValue:()=>new Decimal(Currency.tachyonParticles.value).div(tachyonGainMultiplier()),isActive:()=>new Decimal(Currency.tachyonParticles.value).gt(0),icon:le.TACHYON_PARTICLES},achievementMult:{name:"Achievement Multiplier",multValue:()=>RealityUpgrade(8).effectOrDefault(1),isActive:()=>RealityUpgrade(8).canBeApplied&&!Pelle.isDoomed,icon:le.ACHIEVEMENT},achievement:{name:"Achievement 132",multValue:()=>Achievement(132).effectOrDefault(1),isActive:()=>Achievement(132).canBeApplied,icon:le.ACHIEVEMENT},dilation:{name:()=>`Dilation Upgrade - Repeatable ${formatX(3)} TP`,multValue:()=>DilationUpgrade.tachyonGain.effectOrDefault(1),isActive:()=>DilationUpgrade.tachyonGain.canBeApplied,icon:le.UPGRADE("dilation")},amplifierTP:{name:"Reality Upgrade - Superluminal Amplifier",multValue:()=>b.D1.timesEffectsOf(RealityUpgrade(4)),isActive:()=>ue.realityUnlocked()&&!Pelle.isDoomed,icon:le.UPGRADE("reality")},realityUpgrade:{name:"Reality Upgrade - The Paradoxical Forever",multValue:()=>b.D1.timesEffectsOf(RealityUpgrade(15)),isActive:()=>ue.realityUnlocked()&&!Pelle.isDoomed,icon:le.UPGRADE("reality")},dilationGlyphSacrifice:{name:"Dilation Glyph Sacrifice",multValue:()=>GlyphSacrifice.dilation.effectValue,isActive:()=>GlyphSacrifice.dilation.effectValue.gt(1),icon:le.SACRIFICE("dilation")},nerfEnslaved:{name:"The Nameless Ones' Reality",powValue:()=>Enslaved.tachyonNerf,isActive:()=>Enslaved.isRunning,icon:le.GENERIC_ENSLAVED}},Ae={total:{name:"Total Tickspeed",displayOverride:()=>{const e=Tickspeed.perSecond,t=de.activeDimCount("AD"),i=de.pluralizeDimensions(t);return`${format(e,2,2)}/sec on ${formatInt(t)} ${i}\n ➜ ${formatX(e.pow(t),2,2)}`},fakeValue:b.E100,multValue:()=>Tickspeed.perSecond.pow(de.activeDimCount("AD")),isActive:()=>Tickspeed.perSecond.gt(1)&&effectiveBaseGalaxies()>0,dilationEffect:()=>Effarig.isRunning?Effarig.tickDilation:1,overlay:[""],icon:le.TICKSPEED},base:{name:"Base Tickspeed from Achievements",displayOverride:()=>{const e=b.D1.dividedByEffectsOf(Achievement(36),Achievement(45),Achievement(66),Achievement(83));return`${format(e,2,2)}/sec`},multValue:()=>new Decimal.pow10(100*de.decomposeTickspeed().base),isActive:()=>[36,45,66,83].some((e=>Achievement(e).canBeApplied)),icon:le.ACHIEVEMENT},upgrades:{name:"Tickspeed Upgrades",displayOverride:()=>`${formatInt(Tickspeed.totalUpgrades)} Total`,multValue:()=>new Decimal.pow10(100*de.decomposeTickspeed().tickspeed),isActive:!0,icon:le.PURCHASE("AD")},galaxies:{name:"Galaxies",displayOverride:()=>{const e=player.galaxies+GalaxyGenerator.galaxies,t=Replicanti.galaxies.total,i=player.dilation.totalTachyonGalaxies;return`${formatInt(e+t+i)} Total`},multValue:()=>new Decimal.pow10(100*de.decomposeTickspeed().galaxies),isActive:!0,icon:le.GALAXY},pelleTickspeedPow:{name:"Tickspeed Dilation Upgrade",powValue:()=>DilationUpgrade.tickspeedPower.effectValue,isActive:()=>DilationUpgrade.tickspeedPower.canBeApplied,icon:le.UPGRADE("dilation")}},_e={purchased:{name:"Purchased Tickspeed Upgrades",displayOverride:()=>Laitela.continuumActive?formatFloat(Tickspeed.continuumValue,2,2):formatInt(player.totalTickBought),multValue:()=>Decimal.pow10(Laitela.continuumActive?Tickspeed.continuumValue:player.totalTickBought),isActive:()=>!0,icon:le.PURCHASE("AD")},free:{name:"Tickspeed Upgrades from TD",displayOverride:()=>formatInt(player.totalTickGained),multValue:()=>Decimal.pow10(player.totalTickGained),isActive:()=>Currency.timeShards.gt(0),icon:le.SPECIFIC_GLYPH("time")}},Se={total:{name:e=>e?`TD ${e} Multiplier`:EternityChallenge(7).isRunning?"ID8 Production":"Time Shard Production",displayOverride:e=>e?formatX(TimeDimension(e).multiplier,2):`${format(TimeDimension(1).productionPerSecond,2)}/sec`,multValue:e=>e?TimeDimension(e).multiplier:TimeDimensions.all.filter((e=>e.isProducing)).map((e=>e.multiplier)).reduce(((e,t)=>e.times(t)),b.D1),isActive:e=>e?TimeDimension(e).isProducing:ue.realityUnlocked()||TimeDimension(1).isProducing,dilationEffect:()=>{const e=player.dilation.active?.75*Effects.product(DilationUpgrade.dilationPenalty):1;return e*(Effarig.isRunning?Effarig.multDilation:1)},isDilated:!0,overlay:["Δ",""],icon:e=>le.DIMENSION("TD",e)},purchase:{name:e=>e?`Purchased TD ${e}`:"Purchases",multValue:e=>{const t=e=>{const t=TimeDimension(e),i=8===e?Math.clampMax(t.bought,1e8):t.bought;return Decimal.pow(t.powerMultiplier,i)};return e?t(e):TimeDimensions.all.filter((e=>e.isProducing)).map((e=>t(e.tier))).reduce(((e,t)=>e.times(t)),b.D1)},isActive:()=>!EternityChallenge(2).isRunning&&!EternityChallenge(10).isRunning,icon:e=>le.PURCHASE("TD",e)},highestDim:{name:()=>"Amount of highest Dimension",displayOverride:()=>{const e=de.activeDimCount("TD");return`TD ${e}, ${format(TimeDimension(e).amount)}`},multValue:()=>TimeDimension(de.activeDimCount("TD")).amount,isActive:()=>TimeDimension(1).isProducing,icon:le.DIMENSION("TD")},basePurchase:{name:"Base purchases",multValue:e=>{const t=e=>Decimal.pow(4,8===e?Math.clampMax(TimeDimension(e).bought,1e8):TimeDimension(e).bought);return e?t(e):TimeDimensions.all.filter((e=>e.isProducing)).map((e=>t(e.tier))).reduce(((e,t)=>e.times(t)),b.D1)},isActive:e=>e?ImaginaryUpgrade(14).canBeApplied||8===e&&GlyphSacrifice.time.effectValue.gt(1):TimeDimension(1).isProducing,icon:e=>le.PURCHASE("TD",e)},timeGlyphSacrifice:{name:"Time Glyph Sacrifice",multValue:()=>TimeDimension(8).isProducing?Decimal.pow(GlyphSacrifice.time.effectValue,Math.clampMax(TimeDimension(8).bought,1e8)):b.D1,isActive:()=>GlyphSacrifice.time.effectValue.gt(1),icon:le.SACRIFICE("time")},powPurchase:{name:"Imaginary Upgrade - Recollection of Intrusion",powValue:()=>ImaginaryUpgrade(14).effectOrDefault(1),isActive:()=>ImaginaryUpgrade(14).canBeApplied,icon:le.UPGRADE("imaginary")},achievementMult:{name:"Eternity Upgrade - Achievement Multiplier",multValue:e=>Decimal.pow(EternityUpgrade.tdMultAchs.effectOrDefault(1),e?1:de.activeDimCount("TD")),isActive:()=>EternityUpgrade.tdMultAchs.canBeApplied&&!Pelle.isDoomed,icon:le.ACHIEVEMENT},achievement:{name:"Achievement Rewards",multValue:e=>{const t=b.D1.timesEffectsOf(Achievement(105),Achievement(128));return Decimal.pow(t,e?1:de.activeDimCount("TD"))},isActive:()=>Achievement(105).canBeApplied||Achievement(128).canBeApplied,icon:le.ACHIEVEMENT},timeStudy:{name:e=>e?`Time Studies (TD ${e})`:"Time Studies",multValue:e=>{const t=b.D1.timesEffectsOf(TimeStudy(93),TimeStudy(103),TimeStudy(151),TimeStudy(221),TimeStudy(301),TimeStudy(313)),i=Array.repeat(b.D1,9);for(let n=1;n<=8;n++)i[n]=i[n].timesEffectsOf(1===n?TimeStudy(11):null,3===n?TimeStudy(73):null,4===n?TimeStudy(227):null);if(e)return t.times(i[e]);let a=b.D1;for(let n=1;n<=de.activeDimCount("TD");n++)a=a.times(i[n]).times(t);return a},isActive:()=>TimeDimension(1).isProducing,icon:le.TIME_STUDY},eternityUpgrade:{name:e=>e?`Other Eternity Upgrades (TD ${e})`:"Other Eternity Upgrades",multValue:e=>{const t=b.D1.timesEffectsOf(EternityUpgrade.tdMultTheorems,EternityUpgrade.tdMultRealTime);return Decimal.pow(t,e?1:de.activeDimCount("TD"))},isActive:()=>TimeDimension(1).isProducing,icon:le.UPGRADE("eternity")},eu1:{name:()=>"Unspent Time Theorems",multValue:e=>Decimal.pow(EternityUpgrade.tdMultTheorems.effectOrDefault(1),e?1:de.activeDimCount("TD")),isActive:()=>EternityUpgrade.tdMultTheorems.canBeApplied,icon:le.UPGRADE("eternity")},eu2:{name:()=>"Days played",multValue:e=>Decimal.pow(EternityUpgrade.tdMultRealTime.effectOrDefault(1),e?1:de.activeDimCount("TD")),isActive:()=>EternityUpgrade.tdMultRealTime.canBeApplied,icon:le.UPGRADE("eternity")},eternityChallenge:{name:e=>e?`Eternity Challenges (TD ${e})`:"Eternity Challenges",multValue:e=>{let t=b.D1.timesEffectsOf(EternityChallenge(1).reward,EternityChallenge(10).reward).times(EternityChallenge(7).isRunning?Tickspeed.perSecond:b.D1);return EternityChallenge(9).isRunning&&(t=t.times(Decimal.pow(Math.clampMin(Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate/7).log2(),1),4).clampMin(1))),Decimal.pow(t,e?1:de.activeDimCount("TD"))},isActive:()=>EternityChallenge(1).completions>0,icon:le.CHALLENGE("eternity")},tickspeed:{name:()=>"Tickspeed (EC7)",displayOverride:()=>{const e=Tickspeed.perSecond,t=de.activeDimCount("TD"),i=de.pluralizeDimensions(t);return`${format(e,2,2)}/sec on ${formatInt(t)} ${i}\n ➜ ${formatX(e.pow(t),2,2)}`},multValue:()=>Tickspeed.perSecond.pow(de.activeDimCount("TD")),isActive:()=>EternityChallenge(7).isRunning,icon:le.TICKSPEED},dilationUpgrade:{name:"Dilation Upgrade - Replicanti Multiplier",multValue:e=>{const t=Replicanti.areUnlocked&&Replicanti.amount.gt(1)?DilationUpgrade.tdMultReplicanti.effectValue:b.D1;return Decimal.pow(t,e?1:de.activeDimCount("TD"))},isActive:()=>DilationUpgrade.tdMultReplicanti.canBeApplied,icon:le.UPGRADE("dilation")},realityUpgrade:{name:"Reality Upgrade - Temporal Transcendence",multValue:e=>Decimal.pow(RealityUpgrade(22).effectOrDefault(1),e?1:de.activeDimCount("TD")),isActive:()=>!Pelle.isDoomed&&RealityUpgrade(22).canBeApplied,icon:le.UPGRADE("reality")},glyph:{name:"Glyph Effects",powValue:()=>getAdjustedGlyphEffect("timepow")*getAdjustedGlyphEffect("effarigdimensions"),isActive:()=>ue.realityUnlocked(),icon:le.GENERIC_GLYPH},alchemy:{name:"Glyph Alchemy",multValue:e=>Decimal.pow(AlchemyResource.dimensionality.effectOrDefault(1),e?1:de.activeDimCount("TD")),powValue:()=>AlchemyResource.time.effectOrDefault(1)*Ra.momentumValue,isActive:()=>Ra.unlocks.unlockGlyphAlchemy.canBeApplied,icon:le.ALCHEMY},imaginaryUpgrade:{name:"Imaginary Upgrade - Suspicion of Interference",powValue:()=>ImaginaryUpgrade(11).effectOrDefault(1),isActive:()=>ImaginaryUpgrade(11).canBeApplied,icon:le.UPGRADE("imaginary")},pelle:{name:"Pelle Rift Effects",multValue:e=>Decimal.pow(PelleRifts.chaos.effectOrDefault(1),e?1:de.activeDimCount("TD")),powValue:()=>PelleRifts.paradox.effectOrDefault(b.D1).toNumber(),isActive:()=>Pelle.isDoomed,icon:le.PELLE},iap:{name:"Shop Tab Purchases",multValue:e=>Decimal.pow(ShopPurchase.allDimPurchases.currentMult,e?1:de.activeDimCount("TD")),isActive:()=>ShopPurchaseData.totalSTD>0,icon:le.IAP},effarig65:{name:"Effarig Level 65",powValue:()=>1+Currency.relicShards.value.clampMin(1).log10()/1337,isActive:()=>Ra.unlocks.relicShardBoost.isUnlocked,icon:le.GENERIC_RA},v50:{name:"V Level 50",powValue:()=>Math.pow(VUnlocks.adPow.effectValue,.5),isActive:()=>Ra.unlocks.vAchMilestone2AffectsIDsAndTDs.isUnlocked,icon:le.GENERIC_V},nerfV:{name:"V's Reality",powValue:()=>.5,isActive:()=>V.isRunning,icon:le.GENERIC_V},nerfCursed:{name:"Cursed Glyphs",powValue:()=>getAdjustedGlyphEffect("curseddimensions"),isActive:()=>1!==getAdjustedGlyphEffect("curseddimensions"),icon:le.SPECIFIC_GLYPH("cursed")}},De={corruptions:[0,0,0,0,0,0,0,0,0,0],corruptionChallenge:{recordCorruptions:[0,0,0,0,0,0,0,0,0,0],recordScore:0,bGLwC:0},isCorrupted:!1,nextCorrupted:!1,corruptedFragments:0,recordCorruptedFragments:0,update(){this.corruptions=player.mending.corruption,this.corruptionChallenge.recordCorruptions=player.mending.corruptionChallenge.records,this.corruptionChallenge.recordScore=player.mending.corruptionChallenge.recordScore,this.isCorrupted=player.mending.corruptionChallenge.corruptedMend,this.nextCorrupted=player.mending.corruptionChallenge.corruptNext,this.corruptedFragments=player.mending.corruptedFragments,this.recordCorruptedFragments=Math.log2(player.mending.corruptionChallenge.recordScore)},calcBaseScore(){let e=[1,1.2,1.45,1.7,2,2.5,3,3.5,4,5,7,11],t=e[player.mending.corruption[0]];for(let i=1;i<10;i++)t*=e[player.mending.corruption[i]];return t},calcScore(){let e=this.calcBaseScore();return e*=[0,1,3,10,35,126,462,1716,6435,24310,92378][Math.floor(Math.max(1,Math.min(player.mending.corruption.countWhere((e=>e>0)),player.mending.corruption.reduce(((e,t)=>e+t),0)/player.mending.corruption.countWhere((e=>e>0))-1)))],e=Math.pow(e,CorruptionUpgrade(20).effectOrDefault(1)),e}},Re={total:{name:"Total Score",displayOverride:()=>`${format(De.calcScore(),2,2)}`,multValue:()=>De.calcScore(),isActive:()=>De.isCorrupted,icon:le.CORRUPTION},corruptions:{name:"Hostilities",displayOverride:()=>`${formatInt(De.calcBaseScore(),2,2)} base score`,multValue:()=>De.calcBaseScore(),isActive:()=>De.isCorrupted,icon:le.CORRUPTION},extra:{name:"Bonus",multValue:()=>[0,1,3,10,35,126,462,1716,6435,24310,92378][Math.floor(Math.min(De.corruptions.countWhere((e=>e>0)),De.corruptions.reduce(((e,t)=>e+t),0)+2))],displayOverride:()=>formatX([0,1,3,10,35,126,462,1716,6435,24310,92378][Math.floor(Math.min(De.corruptions.countWhere((e=>e>0)),De.corruptions.reduce(((e,t)=>e+t),0)+2))],2,2),isActive:()=>De.isCorrupted,icon:le.CORRUPTION_BONUS},cu20:{name:"Rewarding Glyphs",powValue:()=>1+Math.log(Math.log(De.corruptions[4]*Math.max(1,De.corruptionChallenge.bGLwC)))/2,isActive:()=>De.isCorrupted&&De.corruptions[4]>=4,icon:le.UPGRADE("corruption")}},Me={general:be,AM:ce,AD:he,ID:Te,TD:Se,IP:we,EP:fe,TP:Ce,DT:me,tickspeed:Ae,tickspeedUpgrades:_e,galaxies:ge,infinities:Ee,eternities:pe,gamespeed:ve,replicanti:ke,hostScore:Re},Ie=["TP","DT","infinities","eternities","gamespeed","replicanti","hostScore"],xe={AD:["purchase","dimboost","sacrifice","achievementMult","achievement","infinityUpgrade","breakInfinityUpgrade","infinityPower","infinityChallenge","timeStudy","eternityChallenge","glyph","v","alchemy","pelle","iap","effectNC","nerfIC","nerfV","nerfCursed","nerfPelle"],ID:["purchase","achievementMult","achievement","replicanti","infinityChallenge","timeStudy","eternityUpgrade","eternityChallenge","glyph","alchemy","imaginaryUpgrade","pelle","iap","nerfV","nerfCursed","nerfPelle","nerfSoftcap"],TD:["purchase","achievementMult","achievement","timeStudy","eternityUpgrade","eternityChallenge","dilationUpgrade","realityUpgrade","glyph","alchemy","imaginaryUpgrade","pelle","iap","nerfV","nerfCursed"],IP:["base","infinityUpgrade","achievement","timeStudy","dilationUpgrade","glyph","alchemy","pelle","ra","iap","mendingMilestones","nerfTeresa","nerfV","nerfCorruptions","nerfSoftcap"],EP:["base","eternityUpgrade","timeStudy","glyph","realityUpgrade","pelle","iap","nerfTeresa","nerfV","nerfCorruptions"]};for(const V of Ie){xe[V]=[];for(const e of Object.keys(Me[V]))"total"!==e&&xe[V].push(e)}function Pe(e){const t=[];for(let i=1;i<=8;i++)t.push(`${e}_${i}`);return t}function Ge(e,t){const i=xe[e].map((t=>`${e}_${t}`));if(!t)return i;const a=[];for(const n of i)a.push(`${n}_${t}`);return a}const Ue={AM_total:[["AD_total","tickspeed_total","AM_effarigAM"]],AD_total:[Ge("AD"),Pe("AD_total")],ID_total:[Ge("ID"),Pe("ID_total")],TD_total:[Ge("TD"),Pe("TD_total")],IP_total:[Ge("IP")],IP_base:[["IP_antimatter","IP_divisor"]],EP_total:[Ge("EP")],EP_base:[["EP_IP","EP_divisor"]],TP_total:[Ge("TP")],DT_total:[Ge("DT")],tickspeed_total:[["tickspeed_base","tickspeed_upgrades","tickspeed_galaxies","tickspeed_pelleTickspeedPow"]],tickspeed_upgrades:[["tickspeedUpgrades_purchased","tickspeedUpgrades_free"]],tickspeed_galaxies:[["galaxies_antimatter","galaxies_replicanti","galaxies_tachyon","galaxies_nerfPelle"]],infinities_total:[Ge("infinities")],eternities_total:[Ge("eternities")],gamespeed_total:[Ge("gamespeed")],replicanti_total:[Ge("replicanti")],hostScore_total:[Ge("hostScore")]},Be=Ue.gamespeed_total[0];Ue.gamespeed_total[0]=[...Be].filter((e=>"gamespeed_blackHoleAvg"!==e)),Ue.gamespeed_total[1]=[...Be].filter((e=>"gamespeed_blackHoleCurr"!==e)),Ue.DT_total[0].unshift("TP_total");const Ne=["AD","ID","TD"],Oe=["IP","EP","DT","infinities","replicanti","hostScore"],Le={achievement:{checkFn:de.achievementDimCheck,AD:[23,28,31,34,43,48,56,64,65,68,71,72,73,74,76,84,91,92,183],TD:[105,128],IP:[85,93,116,125,141],DT:[132,137],infinities:[87,164]},timeStudy:{checkFn:de.timeStudyDimCheck,AD:[71,91,101,161,193,214,234],ID:[72,82,92,102,162],TD:[11,73,93,103,151,221,227,301],IP:[41,51,141,142,143],EP:[61,121,122,123],replicanti:[62,132,213]},infinityChallenge:{checkFn:de.ICDimCheck,AD:[3,4,8],ID:[1,6]},eternityChallenge:{checkFn:de.ECDimCheck,ID:[2,4,9],TD:[1,10]}};for(const V of Ne)Ue[`${V}_total`][0].push(`${V}_highestDim`),Ue[`${V}_total`][1].push(`${V}_highestDim`);for(const V of["ID","TD"])Ue[`${V}_total`][0].push(`${V}_tickspeed`),Ue[`${V}_total`][1].push(`${V}_tickspeed`);for(const V of Ne){for(const e of Ge(V))Ue[e]=[Pe(e)];for(let e=1;e<=8;e++)Ue[`${V}_total_${e}`]=[Ge(V,e)]}const Fe=["AD_sacrifice","AD_breakInfinityUpgrade","AD_nerfIC","AD_infinityUpgrade","AD_v","ID_replicanti","ID_infinityChallenge","ID_eternityUpgrades","TD_achievement","TD_eternityUpgrade","TD_dilationUpgrade","TD_realityUpgrade",".._achievementMult",".._glyph",".._alchemy",".._imaginaryUpgrade",".._iap",".._nerfV",".._nerfCursed",".._nerfPelle",".._pelle","nerfSoftcap","nerfCorruptions"],$e=Object.keys(Ue).filter((e=>Fe.some((t=>e.match(t)))));for(const V of $e)Ue[V]=void 0;Ue.AD_infinityPower=[["ID_total","ID_powerConversion"]];for(let V=1;V<=8;V++)Ue[`AD_infinityPower_${V}`]=[["ID_total","ID_powerConversion"]];Ue.ID_purchase.unshift(["ID_basePurchase","ID_tesseractPurchase","ID_infinityGlyphSacrifice","ID_powPurchase"]);for(let V=1;V<=7;V++)Ue[`ID_purchase_${V}`]=[[`ID_basePurchase_${V}`,`ID_tesseractPurchase_${V}`,"ID_powPurchase"]];Ue.ID_purchase_8=[["ID_basePurchase_8","ID_infinityGlyphSacrifice","ID_powPurchase"]];for(let V=1;V<=7;V++)Ue[`TD_purchase_${V}`]=[[`TD_basePurchase_${V}`,`TD_powPurchase_${V}`]];Ue.TD_purchase.push(["TD_basePurchase","TD_timeGlyphSacrifice","TD_powPurchase"]),Ue.TD_purchase_8=[["TD_basePurchase_8","TD_timeGlyphSacrifice","TD_powPurchase"]];for(const V of Ne)for(const e of Object.keys(Le))if(Le[e][V]){Ue[`${V}_${e}`]=[[]];for(const t of Le[e][V]){for(let i=1;i<=8;i++){const a=`${V}_${e}_${i}`,n=`${V}${i}`;Le[e].checkFn(t,n)&&(Ue[a]||(Ue[a]=[[]]),Ue[a][0].push(`general_${e}_${t}_${n}`))}Ue[`${V}_${e}`][0].push(`general_${e}_${t}_${V}`)}}for(const V of Oe)for(const e of Object.keys(Le))if(Le[e][V]){Ue[`${V}_${e}`]=[[]];for(const t of Le[e][V])Ue[`${V}_${e}`][0].push(`general_${e}_${t}`)}Ue.ID_eternityUpgrade=[["ID_eu1","ID_eu2","ID_eu3"]],Ue.TD_eternityUpgrade=[["TD_eu1","TD_eu2"]];for(let V=1;V<=8;V++)Ue[`ID_eternityUpgrade_${V}`]=[[`ID_eu1_${V}`,`ID_eu2_${V}`,`ID_eu3_${V}`]],Ue[`TD_eternityUpgrade_${V}`]=[[`TD_eu1_${V}`,`TD_eu2_${V}`]];const He=[{id:11,name:"You gotta start somewhere",description:"Buy a 1st Antimatter Dimension.",checkEvent:GAME_EVENT.ACHIEVEMENT_EVENT_OTHER},{id:12,name:"100 antimatter is a lot",description:"Buy a 2nd Antimatter Dimension.",checkEvent:GAME_EVENT.ACHIEVEMENT_EVENT_OTHER},{id:13,name:"Half life 3 CONFIRMED",description:"Buy a 3rd Antimatter Dimension.",checkEvent:GAME_EVENT.ACHIEVEMENT_EVENT_OTHER},{id:14,name:"L4D: Left 4 Dimensions",description:"Buy a 4th Antimatter Dimension.",checkEvent:GAME_EVENT.ACHIEVEMENT_EVENT_OTHER},{id:15,name:"5 Dimension Antimatter Punch",description:"Buy a 5th Antimatter Dimension.",checkEvent:GAME_EVENT.ACHIEVEMENT_EVENT_OTHER},{id:16,name:"We couldn't afford 9",get description(){return Enslaved.isRunning?"Buy a 6th Antimatter Dimension (they never amount to anything)":"Buy a 6th Antimatter Dimension."},checkEvent:GAME_EVENT.ACHIEVEMENT_EVENT_OTHER},{id:17,name:"Not a luck related achievement",description:"Buy a 7th Antimatter Dimension.",checkEvent:GAME_EVENT.ACHIEVEMENT_EVENT_OTHER},{id:18,name:"90 degrees to infinity",get description(){return Enslaved.isRunning?"Buy an 8th Antimatter Dimension (don't get used to it)":"Buy an 8th Antimatter Dimension."},checkEvent:GAME_EVENT.ACHIEVEMENT_EVENT_OTHER},{id:21,name:"To infinity!",description:"Go Infinite.",checkRequirement:()=>!0,checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`Start with ${formatInt(100)} antimatter.`},effect:100},{id:22,name:"FAKE NEWS!",get description(){return`Encounter ${formatInt(50)} different news messages.`},checkRequirement:()=>NewsHandler.uniqueTickersSeen>=50,checkEvent:GAME_EVENT.REALITY_RESET_AFTER},{id:23,name:"The 9th Dimension is a lie",get description(){return`Have exactly ${formatInt(99)} 8th Antimatter Dimensions.`},checkRequirement:()=>AntimatterDimension(8).amount.eq(99),get reward(){return`8th Antimatter Dimensions are ${formatPercents(.1)} stronger.`},effect:1.1},{id:24,name:"Antimatter Apocalypse",get description(){return`Get over ${format(b.E80)} antimatter.`},checkRequirement:()=>Currency.antimatter.exponent>=80,checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:25,name:"Boosting to the max",get description(){return`Buy ${formatInt(10)} Dimension Boosts.`},checkRequirement:()=>DimBoost.purchasedBoosts>=10,checkEvent:GAME_EVENT.DIMBOOST_AFTER},{id:26,name:"You got past The Big Wall",description:"Buy an Antimatter Galaxy.",checkRequirement:()=>!0,checkEvent:GAME_EVENT.GALAXY_RESET_BEFORE},{id:27,name:"Double Galaxy",get description(){return`Buy ${formatInt(2)} Antimatter Galaxies.`},checkRequirement:()=>player.galaxies>=2,checkEvent:GAME_EVENT.GALAXY_RESET_AFTER},{id:28,name:"There's no point in doing that...",get description(){return`Buy a single 1st Antimatter Dimension when you have over ${format(b.E150)} of them.`},checkRequirement:()=>AntimatterDimension(1).amount.exponent>=150,checkEvent:GAME_EVENT.ACHIEVEMENT_EVENT_OTHER,get reward(){return`1st Antimatter Dimensions are ${formatPercents(.1)} stronger.`},effect:1.1},{id:31,name:"I forgot to nerf that",get description(){return`Get any Antimatter Dimension multiplier over ${formatX(b.E31)}.`},checkRequirement:()=>AntimatterDimensions.all.some((e=>e.multiplier.exponent>=31)),checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`1st Antimatter Dimensions are ${formatPercents(.05)} stronger.`},effect:1.05},{id:32,name:"The Gods are pleased",get description(){return`Get over ${formatX(600)} from Dimensional Sacrifice outside of Challenge 8.`},checkRequirement:()=>!NormalChallenge(8).isOnlyActiveChallenge&&Sacrifice.totalBoost.gte(600),checkEvent:GAME_EVENT.SACRIFICE_RESET_AFTER,get reward(){return`Dimensional Sacrifice is stronger.\n ${Sacrifice.getSacrificeDescription({Achievement32:!1,Achievement57:!1,Achievement88:!1})} ➜\n ${Sacrifice.getSacrificeDescription({Achievement32:!0,Achievement57:!1,Achievement88:!1})}`},effect:.1},{id:33,name:"That's a lot of infinites",get description(){return`Reach Infinity ${formatInt(10)} times.`},checkRequirement:()=>Currency.infinities.gte(10),checkEvent:GAME_EVENT.BIG_CRUNCH_AFTER},{id:34,name:"You didn't need it anyway",description:"Infinity without having any 8th Antimatter Dimensions.",checkRequirement:()=>AntimatterDimension(8).totalAmount.eq(0),checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`Dimensions 1-7 are ${formatPercents(.02)} stronger.`},effect:1.02},{id:35,name:"Don't you dare sleep",get description(){return PlayerProgress.realityUnlocked()?`Be offline for a period of over ${formatInt(6)} hours (real time).`:`Be offline for a period of over ${formatInt(6)} hours.`},checkRequirement:()=>Date.now()-player.lastUpdate>=216e5,checkEvent:GAME_EVENT.GAME_TICK_BEFORE},{id:36,name:"Claustrophobic",get description(){return`Infinity with just ${formatInt(1)} Antimatter Galaxy. (Your Antimatter Galaxies are reset on Infinity.)`},checkRequirement:()=>1===player.galaxies,checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`Multiply starting tick speed by ${format(1.02,2,2)}.`},effect:1/1.02},{id:37,name:"That's FAST!",get description(){return`Infinity in under ${formatInt(2)} hours.`},checkRequirement:()=>Time.thisInfinityRealTime.totalHours.lte(2),checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`Start with ${formatInt(5e3)} antimatter.`},effect:5e3},{id:38,name:"I don't believe in Gods",get description(){return"Buy an Antimatter Galaxy without Dimensional Sacrificing.\n (Your Antimatter Galaxies are reset on Infinity.)"},checkRequirement:()=>player.requirementChecks.infinity.noSacrifice,checkEvent:GAME_EVENT.GALAXY_RESET_BEFORE},{id:41,name:"No DLC required",get description(){return`Buy ${formatInt(16)} Infinity Upgrades.`},checkRequirement:()=>player.infinityUpgrades.size>=16,checkEvent:[GAME_EVENT.INFINITY_UPGRADE_BOUGHT,GAME_EVENT.REALITY_RESET_AFTER,GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT],get reward(){return`Unlock two new Infinity Upgrades- ${formatX(2)} IP multiplier and offline IP generation.`}},{id:42,name:"Super Sanic",get description(){return`Have antimatter per second exceed your current antimatter above ${format(b.E63)}.`},checkRequirement:()=>Currency.antimatter.exponent>=63&&Currency.antimatter.productionPerSecond.gt(Currency.antimatter.value),checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:43,name:"How the antitables have turned..",description:"Get the 8th Antimatter Dimension multiplier to be highest, 7th Antimatter Dimension multiplier second highest, etc.",checkRequirement:()=>{const e=Array.range(1,8).map((e=>AntimatterDimension(e).multiplier));for(let t=0;tAchievementTimers.marathon1.check(Currency.antimatter.productionPerSecond.gt(Currency.antimatter.value),30),checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:45,name:"Faster than a potato",get description(){return`Get more than ${format(b.E29)} ticks per second.`},checkRequirement:()=>Tickspeed.current.exponent<=-26,checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`Multiply starting tickspeed by ${formatX(1.02,0,2)}.`},effect:.98},{id:46,name:"Multidimensional",get description(){return`Reach ${format(b.E12)} of all Antimatter Dimensions except the 8th.`},checkRequirement:()=>AntimatterDimension(7).amount.exponent>=12,checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:47,name:"Daredevil",get description(){return`Complete ${formatInt(3)} Normal Challenges.`},checkRequirement:()=>NormalChallenges.all.countWhere((e=>e.isCompleted))>=3,checkEvent:[GAME_EVENT.BIG_CRUNCH_AFTER,GAME_EVENT.REALITY_RESET_AFTER,GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT]},{id:48,name:"Antichallenged",get description(){return`Complete all ${formatInt(12)} Normal Challenges.`},checkRequirement:()=>0===NormalChallenges.all.countWhere((e=>!e.isCompleted)),checkEvent:[GAME_EVENT.BIG_CRUNCH_AFTER,GAME_EVENT.REALITY_RESET_AFTER,GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT],get reward(){return`All Dimensions are ${formatPercents(.1)} stronger.`},effect:1.1},{id:51,name:"Limit Break",description:"Break Infinity.",checkRequirement:()=>player.break,checkEvent:[GAME_EVENT.BREAK_INFINITY,GAME_EVENT.REALITY_RESET_AFTER,GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT]},{id:52,name:"Age of Automation",description:"Max the interval for Antimatter Dimension and Tickspeed upgrade autobuyers.",checkRequirement:()=>Autobuyer.antimatterDimension.zeroIndexed.concat(Autobuyer.tickspeed).every((e=>e.isUnlocked&&e.hasMaxedInterval)),checkEvent:[GAME_EVENT.REALITY_RESET_AFTER,GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT]},{id:53,name:"Definitely not worth it",description:"Max the intervals for all normal autobuyers.",checkRequirement:()=>Autobuyers.upgradeable.every((e=>e.isUnlocked&&e.hasMaxedInterval)),checkEvent:[GAME_EVENT.REALITY_RESET_AFTER,GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT]},{id:54,name:"That's FASTER!",get description(){return`Infinity in ${formatInt(10)} minutes or less.`},checkRequirement:()=>Time.thisInfinityRealTime.totalMinutes.lte(10),checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`Start with ${format(5e5)} antimatter.`},effect:5e5},{id:55,name:"Forever isn't that long",get description(){return`Infinity in ${formatInt(1)} minute or less.`},checkRequirement:()=>Time.thisInfinityRealTime.totalMinutes.lte(1),checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`Start with ${format(5e10)} antimatter.`},effect:5e10},{id:56,name:"Many Deaths",get description(){return`Complete the 2nd Antimatter Dimension Autobuyer Challenge in ${formatInt(3)} minutes or less.`},checkRequirement:()=>NormalChallenge(2).isOnlyActiveChallenge&&Time.thisInfinityRealTime.totalMinutes.lte(3),checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`All Antimatter Dimensions are stronger in the first ${formatInt(3)} minutes of Infinities.`},effect:()=>Decimal.max(new Decimal(6).div(Time.thisInfinity.totalMinutes.add(3)),1),effectCondition:()=>Time.thisInfinity.totalMinutes.lt(3),formatEffect:e=>`${formatX(e,2,2)}`},{id:57,name:"Gift from the Gods",get description(){return`Complete the 8th Antimatter Dimension Autobuyer Challenge in ${formatInt(3)} minutes or less.`},checkRequirement:()=>NormalChallenge(8).isOnlyActiveChallenge&&Time.thisInfinityRealTime.totalMinutes.lte(3),checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`Dimensional Sacrifice is stronger.\n ${Sacrifice.getSacrificeDescription({Achievement32:!0,Achievement57:!1,Achievement88:!1})} ➜\n ${Sacrifice.getSacrificeDescription({Achievement32:!0,Achievement57:!0,Achievement88:!1})}`},effect:.1},{id:58,name:"This is fine.",get description(){return`Complete the Tickspeed Autobuyer Challenge in ${formatInt(3)} minutes or less.`},checkRequirement:()=>NormalChallenge(9).isOnlyActiveChallenge&&Time.thisInfinityRealTime.totalMinutes.lte(3),checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`Increase the multiplier for buying ${formatInt(10)} Antimatter Dimensions by +${formatPercents(.01)}.`},effect:1.01},{id:61,name:"Bulked Up",get description(){return`Get all of your Antimatter Dimension Autobuyer bulk amounts to\n ${formatInt(Autobuyer.antimatterDimension.bulkCap)}.`},checkRequirement:()=>Autobuyer.antimatterDimension.zeroIndexed.every((e=>e.hasMaxedBulk)),checkEvent:[GAME_EVENT.REALITY_RESET_AFTER,GAME_EVENT.REALITY_UPGRADE_TEN_BOUGHT,GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION],reward:"Dimension Autobuyer bulks are unlimited."},{id:62,name:"Oh, hey... You're still here?",get description(){return`Reach ${format(b.E8)} Infinity Points per minute.`},checkRequirement:()=>Player.bestRunIPPM.exponent>=8,checkEvent:GAME_EVENT.BIG_CRUNCH_AFTER},{id:63,name:"A new beginning",description:"Begin generation of Infinity Power.",checkRequirement:()=>Currency.infinityPower.gt(1),checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:64,name:"Zero Deaths",description:"Get to Infinity without Dimension Boosts or Antimatter Galaxies while in a Normal Challenge.",checkRequirement:()=>0===player.galaxies&&0===DimBoost.purchasedBoosts&&NormalChallenge.isRunning,checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`Antimatter Dimensions 1-4 are ${formatPercents(.25)} stronger.`},effect:1.25},{id:65,name:"Not-so-challenging",get description(){return`Get the sum of all of your Normal Challenge times under ${formatInt(3)} minutes.`},checkRequirement:()=>Time.challengeSum.totalMinutes.lt(3),checkEvent:[GAME_EVENT.BIG_CRUNCH_AFTER,GAME_EVENT.REALITY_RESET_AFTER],get reward(){return`All Antimatter Dimensions are stronger in the first ${formatInt(3)} minutes of Infinities,\n but only in Challenges.`},effect:()=>Player.isInAnyChallenge?Decimal.max(new Decimal(4).div(Time.thisInfinity.totalMinutes.add(1)),1).toNumber():1,effectCondition:()=>Player.isInAnyChallenge&&Time.thisInfinity.totalMinutes.lt(3),formatEffect:e=>`${formatX(e,2,2)}`},{id:66,name:"Faster than a squared potato",get description(){return`Get more than ${format(b.E58)} ticks per second.`},checkRequirement:()=>Tickspeed.current.exponent<=-55,checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`Multiply starting tickspeed by ${formatX(1.02,0,2)}.`},effect:.98},{id:67,name:"Infinitely Challenging",description:"Complete an Infinity Challenge.",checkRequirement:()=>InfinityChallenges.completed.length>0,checkEvent:[GAME_EVENT.INFINITY_CHALLENGE_COMPLETED,GAME_EVENT.REALITY_RESET_AFTER]},{id:68,name:"You did this again just for the achievement right?",get description(){return`Complete the 3rd Antimatter Dimension Autobuyer Challenge in ${formatInt(10)} seconds or less.`},checkRequirement:()=>NormalChallenge(3).isOnlyActiveChallenge&&Time.thisInfinityRealTime.totalSeconds.lte(10),checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`1st Antimatter Dimensions are ${formatPercents(.5)} stronger.`},effect:1.5},{id:71,name:"ERROR 909: Dimension not found",description:"Get to Infinity with only a single 1st Antimatter Dimension without Dimension Boosts\n or Antimatter Galaxies, while in the 2nd Antimatter Dimension Autobuyer Challenge.",checkRequirement:()=>NormalChallenge(2).isOnlyActiveChallenge&&AntimatterDimension(1).amount.eq(1)&&0===DimBoost.purchasedBoosts&&0===player.galaxies,checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`1st Antimatter Dimensions are ${formatInt(3)} times stronger.`},effect:3},{id:72,name:"Can't hold all these infinities",get description(){return`Get all Antimatter Dimension multipliers over ${formatX(Decimal.NUMBER_MAX_VALUE,1)}.`},checkRequirement:()=>AntimatterDimensions.all.every((e=>e.multiplier.gte(Decimal.NUMBER_MAX_VALUE))),checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`All Antimatter Dimensions are ${formatPercents(.1)} stronger.`},effect:1.1},{id:73,name:"THIS ACHIEVEMENT DOESN'T EXIST",get description(){return`Get ${formatPostBreak(b.D9_9999E9999,4)} antimatter.`},checkRequirement:()=>Currency.antimatter.gte(b.D9_9999E9999),checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"Antimatter Dimensions gain a multiplier based on current antimatter.",effect:()=>Currency.antimatter.value.pow(2e-5).plus(1),formatEffect:e=>`${formatX(e,2,2)}`},{id:74,name:"Not a second lost",get description(){return`Get the sum of all best Normal Challenge times under ${formatInt(5)} seconds.`},checkRequirement:()=>Time.challengeSum.totalSeconds.lt(5),checkEvent:[GAME_EVENT.BIG_CRUNCH_AFTER,GAME_EVENT.REALITY_RESET_AFTER],get reward(){return`All Antimatter Dimensions are ${formatPercents(.4)} stronger, but only in challenges.`},effect:1.4,effectCondition:()=>Player.isInAnyChallenge},{id:75,name:"NEW DIMENSIONS???",description:"Unlock the 4th Infinity Dimension.",checkRequirement:()=>InfinityDimension(4).isUnlocked,checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"Your Achievement bonus affects Infinity Dimensions.",effect:()=>Achievements.power},{id:76,name:"One for each dimension",get description(){return`Play for ${formatInt(8)} days.`},checkRequirement:()=>Time.totalTimePlayed.totalDays.gt(8),checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"Extremely small multiplier to Antimatter Dimensions based on time played.",effect:()=>Decimal.max(Decimal.pow(Time.totalTimePlayed.totalDays.div(2),.05),1),formatEffect:e=>`${formatX(e,2,2)}`},{id:77,name:"1 Million is a lot",get description(){return`Reach ${format(1e6)} Infinity Power.`},checkRequirement:()=>Currency.infinityPower.exponent>=6,checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:78,name:"Blink of an eye",get description(){return`Infinity in under ${formatInt(250)}ms.`},checkRequirement:()=>Time.thisInfinityRealTime.totalMilliseconds.lt(250),checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`Start with ${format(5e25)} antimatter.`},effect:5e25},{id:81,name:"Game Design Is My Passion",get description(){return`Beat Infinity Challenge 5 in ${formatInt(15)} seconds or less.`},checkRequirement:()=>InfinityChallenge(5).isRunning&&Time.thisInfinityRealTime.totalSeconds.lte(15),checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE},{id:82,name:"Anti-antichallenged",get description(){return`Complete all ${formatInt(8)} Infinity Challenges.`},checkRequirement:()=>8===InfinityChallenges.completed.length,checkEvent:[GAME_EVENT.INFINITY_CHALLENGE_COMPLETED,GAME_EVENT.REALITY_RESET_AFTER]},{id:83,name:"YOU CAN GET 50 GALAXIES?!?!",get description(){return`Get ${formatInt(50)} Antimatter Galaxies.`},checkRequirement:()=>player.galaxies>=50,checkEvent:GAME_EVENT.GALAXY_RESET_AFTER,get reward(){return`Tickspeed is just over ${formatPercents(.05)} faster per Antimatter Galaxy.`},effect:()=>b.D0_95.pow(player.galaxies),formatEffect:e=>`${formatX(e.recip(),2,2)}`},{id:84,name:"I got a few to spare",get description(){return`Reach ${formatPostBreak("1e35000")} antimatter.`},checkRequirement:()=>Currency.antimatter.exponent>=35e3,checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"Antimatter Dimensions are stronger the more unspent antimatter you have.",effect:()=>Currency.antimatter.value.pow(2e-5).plus(1),formatEffect:e=>`${formatX(e,2,2)}`},{id:85,name:"ALL YOUR IP ARE BELONG TO US",get description(){return`Big Crunch for ${format(b.E150)} Infinity Points.`},checkRequirement:()=>gainedInfinityPoints().exponent>=150,checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`Additional ${formatX(4)} multiplier to Infinity Points.`},effect:4},{id:86,name:"Do you even bend time bro?",get description(){return`Reach ${formatX(1e3)} faster per Tickspeed upgrade.`},checkRequirement:()=>Tickspeed.multiplier.recip().gte(1e3),checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`All Galaxies are ${formatPercents(.01)} stronger.`},effect:1.01},{id:87,name:"2 MILLION INFINITIES",get description(){return`Infinity ${format(b.D2E6)} times.`},checkRequirement:()=>Currency.infinities.gt(b.D2E6),checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`Infinities more than ${formatInt(5)} seconds long\n give ${formatX(250)} more Infinities.`},effect:250,effectCondition:()=>Time.thisInfinity.totalSeconds.gt(5)},{id:88,name:"Yet another infinity reference",get description(){return`Get a ${formatX(Decimal.NUMBER_MAX_VALUE,1,0)} multiplier in a single Dimensional Sacrifice.`},checkRequirement:()=>Sacrifice.nextBoost.gte(Decimal.NUMBER_MAX_VALUE),checkEvent:GAME_EVENT.SACRIFICE_RESET_BEFORE,get reward(){return`Dimensional Sacrifice is stronger.\n ${Sacrifice.getSacrificeDescription({Achievement32:!0,Achievement57:!0,Achievement88:!1})} ➜\n ${Sacrifice.getSacrificeDescription({Achievement32:!0,Achievement57:!0,Achievement88:!0})}`},effect:.1},{id:91,name:"Ludicrous Speed",get description(){return`Big Crunch for ${format(b.E200)} Infinity Points in ${formatInt(2)} seconds or less.`},checkRequirement:()=>gainedInfinityPoints().exponent>=200&&Time.thisInfinityRealTime.totalSeconds.lte(2),checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`All Antimatter Dimensions are significantly stronger in the\n first ${formatInt(5)} seconds of Infinities.`},effect:()=>Math.max(b.D5.sub(Time.thisInfinity.totalSeconds).times(60).max(0).toNumber(),1),effectCondition:()=>Time.thisInfinity.totalSeconds.lt(5),formatEffect:e=>`${formatX(e,2,2)}`},{id:92,name:"I brake for NOBODY!",get description(){return`Big Crunch for ${format(b.E250)} Infinity Points in ${formatInt(20)} seconds or less.`},checkRequirement:()=>gainedInfinityPoints().exponent>=250&&Time.thisInfinityRealTime.totalSeconds.lte(20),checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`All Antimatter Dimensions are significantly stronger in the\n first ${formatInt(60)} seconds of Infinities.`},effect:()=>Math.max(b.D1.sub(Time.thisInfinity.totalMinutes).times(100).max(0).toNumber(),1),effectCondition:()=>Time.thisInfinity.totalMinutes.lt(1),formatEffect:e=>`${formatX(e,2,2)}`},{id:93,name:"MAXIMUM OVERDRIVE",get description(){return`Big Crunch for ${format(b.E300)} Infinity Points.`},checkRequirement:()=>gainedInfinityPoints().exponent>=300,checkEvent:GAME_EVENT.BIG_CRUNCH_BEFORE,get reward(){return`Additional ${formatX(4)} multiplier to Infinity Points.`},effect:4},{id:94,name:"4.3333 minutes of Infinity",get description(){return`Reach ${format(b.E260)} Infinity Power.`},checkRequirement:()=>Currency.infinityPower.exponent>=260,checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"Double Infinity Power gain.",effect:2},{id:95,name:"Is this safe?",get description(){return`Gain ${format(Decimal.NUMBER_MAX_VALUE,1,0)} Replicanti in ${formatInt(1)} hour.`},get reward(){return`You keep your Replicanti and ${formatInt(1)} Replicanti Galaxy on Infinity.`},checkRequirement:()=>(Replicanti.amount.eq(Decimal.NUMBER_MAX_VALUE)||player.replicanti.galaxies>0)&&Time.thisInfinityRealTime.totalHours.lte(1),checkEvent:GAME_EVENT.REPLICANTI_TICK_AFTER},{id:96,name:"Time is relative",description:"Go Eternal.",checkRequirement:()=>!0,checkEvent:GAME_EVENT.ETERNITY_RESET_BEFORE},{id:97,name:"Like jumping on a lego",get description(){return`Get the sum of Infinity Challenge times under ${format(6.66,2,2)} seconds.`},checkRequirement:()=>Time.infinityChallengeSum.totalSeconds.lt(6.66),checkEvent:[GAME_EVENT.BIG_CRUNCH_AFTER,GAME_EVENT.REALITY_RESET_AFTER]},{id:98,name:"0 degrees from Infinity",description:"Unlock the 8th Infinity Dimension.",checkRequirement:()=>InfinityDimension(8).isUnlocked,checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:101,name:"8 nobody got time for that",description:"Eternity without buying Antimatter Dimensions 1-7.",checkRequirement:()=>player.requirementChecks.eternity.onlyAD8,checkEvent:GAME_EVENT.ETERNITY_RESET_BEFORE},{id:102,name:"This mile took an eternity",description:"Get all Eternity milestones.",checkRequirement:()=>EternityMilestone.all.every((e=>e.isReached)),checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:103,name:"Tätä saavutusta ei ole olemassa II",get description(){return`Reach ${formatPostBreak(b.D9_99999E999,5,0)} Infinity Points.`},checkRequirement:()=>Currency.infinityPoints.exponent>=1e3,checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`Make the Infinity Point formula better. log(x)/${formatInt(308)} ➜ log(x)/${formatFloat(307.8,1)}`},effect:307.8},{id:104,name:"That wasn't an eternity",get description(){return`Eternity in under ${formatInt(30)} seconds.`},checkRequirement:()=>Time.thisEternity.totalSeconds.lt(30),checkEvent:GAME_EVENT.ETERNITY_RESET_BEFORE,get reward(){return`Start Eternities with ${format(5e25)} Infinity Points.`},effect:5e25},{id:105,name:"Infinite Time",get description(){return`Have ${formatInt(308)} Tickspeed upgrades from Time Dimensions.`},checkRequirement:()=>player.totalTickGained>=308,checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"Time Dimensions gain a multiplier based on tickspeed.",effect:()=>Tickspeed.perSecond.pow(5e-6),formatEffect:e=>`${formatX(e,2,2)}`},{id:106,name:"The swarm",get description(){return`Get ${formatInt(10)} Replicanti Galaxies in ${formatInt(15)} seconds.`},checkRequirement:()=>Replicanti.galaxies.total>=10&&Time.thisInfinity.totalSeconds.lt(15),checkEvent:GAME_EVENT.REPLICANTI_TICK_AFTER},{id:107,name:"Do you really need a guide for this?",get description(){return`Eternity with less than ${formatInt(10)} Infinities.`},checkRequirement:()=>Currency.infinities.lt(10),checkEvent:GAME_EVENT.ETERNITY_RESET_BEFORE},{id:108,name:"We COULD afford 9",get description(){return`Eternity with exactly ${formatInt(9)} Replicanti.`},checkRequirement:()=>Replicanti.amount.round().eq(9),checkEvent:GAME_EVENT.ETERNITY_RESET_BEFORE},{id:111,name:"Yo dawg, I heard you liked infinities...",get description(){return`Have all your Infinities in your past ${formatInt(10)} Infinities be at least\n ${format(Decimal.NUMBER_MAX_VALUE,1,0)} times higher Infinity Points than the previous one.`},checkRequirement:()=>{if(player.records.recentInfinities.some((e=>e[0]===Number.MAX_VALUE)))return!1;const e=player.records.recentInfinities.map((e=>e[2]));for(let t=0;tTime.infinityChallengeSum.totalMilliseconds.lt(750),checkEvent:[GAME_EVENT.BIG_CRUNCH_AFTER,GAME_EVENT.REALITY_RESET_AFTER]},{id:113,name:"Eternities are the new infinity",get description(){return`Eternity in under ${formatInt(250)}ms.`},checkRequirement:()=>Time.thisEternity.totalMilliseconds.lt(250),checkEvent:GAME_EVENT.ETERNITY_RESET_BEFORE,get reward(){return`Gain ${formatX(2)} more Eternities.`},effect:2},{id:114,name:"You're a mistake",description:"Fail an Eternity Challenge.",checkRequirement:()=>!0,checkEvent:GAME_EVENT.CHALLENGE_FAILED,reward:"A fading sense of accomplishment.",effect:()=>"Sense of accomplishment (fading)"},{id:115,name:"I wish I had gotten 7 eternities",description:"Start an Infinity Challenge inside an Eternity Challenge.",checkEvent:GAME_EVENT.ACHIEVEMENT_EVENT_OTHER},{id:116,name:"Do I really need to infinity",get description(){return`Eternity with only ${formatInt(1)} Infinity.`},checkRequirement:()=>Currency.infinities.lte(1),checkEvent:GAME_EVENT.ETERNITY_RESET_BEFORE,reward:"Multiplier to Infinity Points based on Infinities.",effect:()=>Decimal.pow(Currency.infinitiesTotal.value.clampMin(1),LOG10_2/4).powEffectOf(TimeStudy(31)).clampMax("1e10000000000"),cap:()=>void 0===Effarig.eternityCap?new Decimal("1e10000000000"):Effarig.eternityCap,formatEffect:e=>{const t=formatX(e,2,2);return TimeStudy(31).canBeApplied?`${formatX(e.pow(b.D1.div(TimeStudy(31).effectValue)),2,1)} (After TS31: ${t})`:t}},{id:117,name:"Costco sells Dimboosts now!",get description(){return`Bulk buy ${formatInt(750)} Dimension Boosts at once.`},checkRequirement:([e])=>e>=750,checkEvent:GAME_EVENT.DIMBOOST_AFTER,get reward(){return`The multiplier from Dimension Boosts to Antimatter Dimensions is ${formatPercents(.01)} higher.`},effect:1.01},{id:118,name:"IT'S OVER 9000",get description(){return`Get a total Dimensional Sacrifice multiplier of ${formatPostBreak(b.E9000)}.`},checkRequirement:()=>Sacrifice.totalBoost.exponent>=9e3,checkEvent:GAME_EVENT.SACRIFICE_RESET_AFTER,reward:"Dimensional Sacrifice doesn't reset your Antimatter Dimensions."},{id:121,name:"Can you get infinite IP?",get description(){return`Reach ${formatPostBreak("1e30008")} Infinity Points.`},checkRequirement:()=>Currency.infinityPoints.exponent>=30008,checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:122,name:"You're already dead.",description:"Eternity without buying Antimatter Dimensions 2-8.",checkRequirement:()=>player.requirementChecks.eternity.onlyAD1,checkEvent:GAME_EVENT.ETERNITY_RESET_BEFORE},{id:123,name:"5 more eternities until the update",get description(){return`Complete ${formatInt(50)} unique Eternity Challenge tiers.`},checkRequirement:()=>EternityChallenges.completions>=50,checkEvent:GAME_EVENT.ETERNITY_RESET_AFTER},{id:124,name:"Long lasting relationship",get description(){return`Have your Infinity Power per second exceed your Infinity Power\n for ${formatInt(60)} consecutive seconds during a single Infinity.`},checkRequirement:()=>AchievementTimers.marathon2.check(!EternityChallenge(7).isRunning&&InfinityDimension(1).productionPerSecond.gt(Currency.infinityPower.value),60),checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:125,name:"Like feasting on a behind",get description(){return`Reach ${format(b.E90)} Infinity Points without having any Infinities\n or any 1st Antimatter Dimensions in your current Eternity.`},checkRequirement:()=>Currency.infinityPoints.exponent>=90&&player.requirementChecks.eternity.noAD1&&Currency.infinities.eq(0),checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"Infinity Point multiplier based on time spent this Infinity.",effect(){const e=Time.thisInfinity.totalSeconds.times(10).add(1);return b.D2.pow(Decimal.min(Decimal.pow(e,.11),500).times(Decimal.log(e)))},cap:()=>Effarig.eternityCap,formatEffect:e=>`${formatX(e,2,2)}`},{id:126,name:"Popular music",get description(){return`Have ${formatInt(180)} times more Replicanti Galaxies than Antimatter Galaxies.`},checkRequirement:()=>Replicanti.galaxies.total>=180*player.galaxies&&player.galaxies>0,checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`Replicanti Galaxies divide your Replicanti by ${format(Decimal.NUMBER_MAX_VALUE,1,0)}\n instead of resetting them to ${formatInt(1)}.`}},{id:127,name:"But I wanted another prestige layer...",get description(){return`Reach ${format(Decimal.NUMBER_MAX_VALUE,1,0)} Eternity Points.`},checkRequirement:()=>Currency.eternityPoints.gte(Decimal.NUMBER_MAX_VALUE),checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:128,name:"What do I have to do to get rid of you",get description(){return`Reach ${formatPostBreak("1e22000")} Infinity Points without any Time Studies.`},checkRequirement:()=>Currency.infinityPoints.exponent>=22e3&&0===player.timestudy.studies.length,checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"Time Dimensions are multiplied by the number of Time Studies you have.",effect:()=>Math.max(player.timestudy.studies.length,1),formatEffect:e=>`${formatX(e)}`},{id:131,name:"No ethical consumption",get description(){return`Get ${format(b.D2E9)} Banked Infinities.`},checkRequirement:()=>Currency.infinitiesBanked.gt(b.D2E9),checkEvent:[GAME_EVENT.ETERNITY_RESET_AFTER,GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION],get reward(){return`After Eternity you permanently keep ${formatPercents(.05)} of your Infinities as Banked Infinities.`},effect:()=>Currency.infinities.value.times(.05).floor()},{id:132,name:"Unique snowflakes",get description(){return`Have ${formatInt(569)} Antimatter Galaxies without gaining any\n Replicanti Galaxies in your current Eternity.`},checkRequirement:()=>player.galaxies>=569&&player.requirementChecks.eternity.noRG,checkEvent:GAME_EVENT.GALAXY_RESET_AFTER,reward:"Gain a multiplier to Tachyon Particle and Dilated Time gain based on Antimatter Galaxies.",effect:()=>1.22*Math.max(Math.pow(player.galaxies,.04),1),formatEffect:e=>`${formatX(e,2,2)}`},{id:133,name:"I never liked this infinity stuff anyway",get description(){return`Reach ${formatPostBreak(b.E200000)} Infinity Points without\n buying any Infinity Dimensions or the ${formatX(2)} Infinity Point multiplier.`},checkRequirement:()=>Array.dimensionTiers.map(InfinityDimension).every((e=>0===e.baseAmount))&&0===player.IPMultPurchases&&Currency.infinityPoints.exponent>=2e5,checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"You start Eternities with all Infinity Challenges unlocked and completed."},{id:134,name:"When will it be enough?",get description(){return`Reach ${formatPostBreak(b.E18000)} Replicanti.`},checkRequirement:()=>Replicanti.amount.exponent>=18e3,checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`You gain Replicanti ${formatInt(2)} times faster under ${format(replicantiCap(),1)} Replicanti.`}},{id:135,name:"Faster than a potato^286078",get description(){return`Get more than ${formatPostBreak("1e8296262")} ticks per second.`},checkRequirement:()=>Tickspeed.current.exponent<=-8296262,checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:136,name:"I told you already, time is relative",description:"Dilate time.",checkEvent:GAME_EVENT.ACHIEVEMENT_EVENT_OTHER},{id:137,name:"Now you're thinking with dilation!",get description(){return`Get ${formatPostBreak("1e260000")} antimatter\n in ${formatInt(1)} minute or less while Dilated.`},checkRequirement:()=>Currency.antimatter.exponent>=26e4&&Time.thisEternity.totalMinutes.lte(1)&&player.dilation.active,checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`Gain ${formatX(2)} Dilated Time and Time Theorems while Dilated.`},effect:()=>player.dilation.active?2:1},{id:138,name:"This is what I have to do to get rid of you.",get description(){return`Reach ${formatPostBreak("1e26000")} Infinity Points without any Time Studies while Dilated.`},checkRequirement:()=>0===player.timestudy.studies.length&&player.dilation.active&&Currency.infinityPoints.exponent>=26e3,checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"Removes the downsides from Time Study 131 and 133 in the Active and Idle Time Study paths."},{id:141,name:"Snap back to reality",description:"Make a new Reality.",checkRequirement:()=>!0,checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,get reward(){return`${formatX(4)} Infinity Point gain, and increase the multiplier for buying ${formatInt(10)}\n Antimatter Dimensions by +${format(.1,0,1)}.`},effects:{ipGain:4,buyTenMult:.1}},{id:142,name:"How does this work?",description:"Unlock the automator.",checkRequirement:()=>Player.automatorUnlocked,checkEvent:[GAME_EVENT.REALITY_RESET_AFTER,GAME_EVENT.REALITY_UPGRADE_BOUGHT,GAME_EVENT.PERK_BOUGHT,GAME_EVENT.BLACK_HOLE_UNLOCKED],get reward(){return`Dimension Boosts are ${formatPercents(.5)} stronger.`},effect:1.5},{id:143,name:"Yo dawg, I heard you liked reskins...",get description(){return`Have all your Eternities in your past ${formatInt(10)} Eternities be at least\n ${format(Decimal.NUMBER_MAX_VALUE,1,0)} times higher Eternity Points than the previous one.`},checkRequirement:()=>{if(player.records.recentEternities.some((e=>e[0]===Number.MAX_VALUE)))return!1;const e=player.records.recentEternities.map((e=>e[2]));for(let t=0;tBlackHole(1).isUnlocked,checkEvent:GAME_EVENT.BLACK_HOLE_UNLOCKED},{id:145,name:"Are you sure these are the right way around?",description:"Have either Black Hole interval smaller than its duration.",checkRequirement:()=>BlackHoles.list.some((e=>e.intervalplayer.reality.perks.size===Perks.all.length,checkEvent:GAME_EVENT.PERK_BOUGHT,get reward(){return`+${formatPercents(.01)} Glyph rarity.`},effect:1},{id:147,name:"Master of Reality",description:"Have all Reality upgrades bought.",checkRequirement:()=>RealityUpgrades.allBought,checkEvent:GAME_EVENT.REALITY_UPGRADE_BOUGHT,reward:"Unlock Teresa, the Celestial of Reality."},{id:148,name:"Royal flush",description:"Reality with one of each basic Glyph type.",checkRequirement:()=>BASIC_GLYPH_TYPES.every((e=>Glyphs.activeList.some((t=>t.type===e)))),checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,reward:"Gained Glyph level is increased by number of distinct Glyph types equipped.",effect:()=>new Set(Glyphs.activeWithoutCompanion.map((e=>e.type))).size,formatEffect:e=>`+${formatInt(e)}`},{id:151,name:"You really didn't need it anyway",get description(){return`Get ${formatInt(800)} Antimatter Galaxies without\n buying 8th Antimatter Dimensions in your current Infinity.`},checkRequirement:()=>player.galaxies>=800&&player.requirementChecks.infinity.noAD8,checkEvent:GAME_EVENT.GALAXY_RESET_AFTER,reward:"Unlock V, the Celestial of Achievements."},{id:152,name:"Y'all got any more of them Glyphs?",get description(){return`Have ${formatInt(100)} Glyphs in your inventory.`},checkRequirement:()=>Glyphs.inventoryList.length>=100,checkEvent:GAME_EVENT.GLYPHS_CHANGED},{id:153,name:'More like "reallydoesn\'tmatter"',description:"Reality without producing antimatter.",checkRequirement:()=>player.requirementChecks.reality.noAM,checkEvent:GAME_EVENT.REALITY_RESET_BEFORE},{id:154,name:"I am speed",get description(){return`Reality in under ${formatInt(5)} seconds (game time).`},checkRequirement:()=>Time.thisReality.totalSeconds.lt(5),checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,get reward(){return`${formatPercents(MendingMilestone.two.isReached?1:.1)} chance each Reality of ${formatX(2)} Realities and Perk Points.`},effect:.1},{id:155,name:"Achievement #15983",get description(){return`Play for ${formatFloat(13.7,1)} billion years.`},checkRequirement:()=>Time.totalTimePlayed.totalYears.gt(137e8),checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`Black Hole durations are ${formatPercents(.1)} longer.`},effect:1.1},{id:156,name:"College Dropout",description:"Reality without buying Time Theorems.",checkRequirement:()=>player.requirementChecks.reality.noPurchasedTT,checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,get reward(){return`Gain ${formatX(2.5,0,1)} generated Time Theorems, and a free coupon to McDonalds™️.`},effect:2.5},{id:157,name:"It's super effective!",get description(){return`Get a Glyph with ${formatInt(4)} effects.`},checkRequirement:()=>Glyphs.activeList.concat(Glyphs.inventoryList).map((e=>getGlyphEffectsFromBitmask(e.effects,0,0).filter((e=>e.isGenerated)).length)).max()>=4,checkEvent:GAME_EVENT.GLYPHS_CHANGED},{id:158,name:"Bruh, are you like, inside the hole?",description:"Make both Black Holes permanent.",checkRequirement:()=>BlackHole(1).isPermanent&&BlackHole(2).isPermanent,checkEvent:GAME_EVENT.BLACK_HOLE_UPGRADE_BOUGHT,get reward(){return`Black Hole power increased by ${formatPercents(.1)}.`},effect:1.1},{id:161,name:"that's where you're wrong kiddo",get description(){return`Get ${formatPostBreak(b.E1E8)} antimatter while Dilated.`},checkRequirement:()=>Currency.antimatter.exponent>=1e8&&player.dilation.active,checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:162,name:"Reinstalled the game and rejoined the server",description:"Have every Time Study at once.",checkRequirement:()=>player.timestudy.studies.length>=58,checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:163,name:"Actually, super easy! Barely an inconvenience!",get description(){return`Complete all the Eternity Challenges ${formatInt(5)} times with less than ${formatInt(1)}\n second (game time) in your current Reality.`},checkRequirement:()=>EternityChallenges.all.map((e=>e.completions)).min()>=5&&Time.thisReality.totalSeconds.lt(1),checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:164,name:"Infinity times two",get description(){return`Get ${format(Decimal.NUMBER_MAX_VALUE,1)} Infinities.`},checkRequirement:()=>Currency.infinitiesTotal.gte(Decimal.NUMBER_MAX_VALUE),checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`Gain ×${formatInt(1024)} more Infinities.`},effect:1024},{id:165,name:"Perfectly balanced",get description(){return`Get a level ${formatInt(5e3)} Glyph with all Glyph level factors equally weighted.`},checkRequirement:()=>gainedGlyphLevel().actualLevel>=5e3&&["repl","dt","eternities"].every((e=>player.celestials.effarig.glyphWeights[e]===player.celestials.effarig.glyphWeights.ep)),checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,reward:"Unlock optimal automatic Glyph level factor adjustment."},{id:166,name:"Nicenice.",get description(){return`Get a Glyph with level exactly ${formatInt(6969)}.`},checkRequirement:()=>6969===gainedGlyphLevel().actualLevel,checkEvent:GAME_EVENT.REALITY_RESET_BEFORE,get reward(){return`+${formatInt(69)} to Glyph level.`},effect:69},{id:167,name:"Mr. Layer? Sorry, you're not on the list",get description(){return`Reach ${format(Decimal.NUMBER_MAX_VALUE,1,0)} Reality Machines.`},checkRequirement:()=>Currency.realityMachines.gte(Decimal.NUMBER_MAX_VALUE),checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"Gain more Reality Machines based on your current Reality Machines.",effect:()=>Math.clampMin(1,Currency.realityMachines.value.log2()),formatEffect:e=>`${formatX(e,2,2)}`},{id:168,name:"Woah, we're halfway there",get description(){return`Get ${formatInt(50)} total Ra Celestial Memory levels.`},checkRequirement:()=>Ra.totalPetLevel>=50,checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return`Get ${formatPercents(.1)} more memories.`},effect:1.1},{id:171,name:"The god is delighted",description:"Sacrifice every sacrificable Glyph type at least once.",checkRequirement:()=>Object.values(player.reality.glyphs.sac).every((e=>e.gt(0))),checkEvent:GAME_EVENT.GLYPHS_CHANGED,get reward(){return`Glyph sacrifice is ${formatX(2)} stronger.`},effect:2},{id:172,name:"Hitchhiker's Guide to Reality",get description(){return`Reality for ${format(Decimal.NUMBER_MAX_VALUE,1)} Reality Machines without having\n any Charged Infinity Upgrades, having any equipped Glyphs, or buying any Triad Studies.`},checkRequirement:()=>MachineHandler.gainedRealityMachines.gte(Decimal.NUMBER_MAX_VALUE)&&0===player.celestials.ra.charged.size&&0===Glyphs.activeWithoutCompanion.length&&player.requirementChecks.reality.noTriads,checkEvent:GAME_EVENT.REALITY_RESET_BEFORE},{id:173,name:"Cet accomplissement n'existe pas III",get description(){return`Reach ${formatPostBreak(b.D9_99999E999,5,0)} Reality Machines.`},checkRequirement:()=>player.reality.realityMachines.gte(b.D9_99999E999),checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:174,name:"Don't you already have two of these?",description:"Get a Singularity.",checkRequirement:()=>!0,checkEvent:GAME_EVENT.SINGULARITY_RESET_BEFORE},{id:175,name:"The First Antihistorian",get description(){return`Get ${formatInt(Ra.alchemyResourceCap)} of all Alchemy Resources.`},checkRequirement:()=>AlchemyResources.all.every((e=>e.amount>=Ra.alchemyResourceCap)),checkEvent:GAME_EVENT.REALITY_RESET_AFTER,get reward(){return`Synergism can go above ${formatPercents(1)} and Momentum increases ${formatX(10)} faster.`},effect:10},{id:176,name:"Mom counted to 3",description:"Annihilate your Dark Matter Dimensions."},{id:177,name:"This mile took a celestial",description:"Complete all Singularity Milestones at least once.",checkRequirement:()=>SingularityMilestones.all.every((e=>e.completions>0)),checkEvent:GAME_EVENT.SINGULARITY_RESET_AFTER},{id:178,name:"Destroyer of Worlds",get description(){return`Get ${formatInt(1e5)} Antimatter Galaxies.`},checkRequirement:()=>player.galaxies>=1e5,checkEvent:GAME_EVENT.GALAXY_RESET_AFTER,get reward(){return`All Galaxies are ${formatPercents(.01)} stronger.`},effect:1.01},{id:181,displayId:666,name:"Antimatter Dimensions Eternal",description:"Doom your Reality.",checkRequirement:()=>Pelle.isDoomed,checkEvent:GAME_EVENT.REALITY_RESET_AFTER},{id:182,name:"One more time",description:"Permanently gain back all Antimatter Dimension autobuyers.",checkRequirement:()=>PelleUpgrade.antimatterDimAutobuyers1.canBeApplied&&PelleUpgrade.antimatterDimAutobuyers2.canBeApplied,checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:183,name:"Déjà vOoM",description:"Complete Infinity Challenge 5 while Doomed.",checkRequirement:()=>Pelle.isDoomed&&InfinityChallenge(5).isCompleted,checkEvent:GAME_EVENT.INFINITY_CHALLENGE_COMPLETED,get reward(){return`All Antimatter Dimensions are raised to ${formatPow(1.0812403840463596,0,3)}`},effect:1.0812403840463596},{id:184,name:"You're out!",description:"Encounter the third Pelle Strike.",checkRequirement:()=>PelleStrikes.eternity.hasStrike,checkEvent:GAME_EVENT.PELLE_STRIKE_UNLOCKED},{id:185,name:"Four score and seven years ago",description:"Encounter the fourth Pelle Strike.",checkRequirement:()=>PelleStrikes.ECs.hasStrike,checkEvent:GAME_EVENT.PELLE_STRIKE_UNLOCKED},{id:186,displayId:181,name:"An unhealthy obsession",description:"Purchase Time Study 181 while Doomed."},{id:187,name:"The One with Dilated Time",description:"Unlock Dilation while Doomed.",checkRequirement:()=>PelleStrikes.dilation.hasStrike,checkEvent:GAME_EVENT.PELLE_STRIKE_UNLOCKED,get reward(){return`Increase the multiplier per repeatable Dilated Time\n multiplier upgrade by ${formatX(1.35,0,2)}.`},effect:1.35},{id:188,name:"The End?",description:"'Beat' the game.",checkRequirement:()=>GameEnd.endState>END_STATE_MARKERS.GAME_END&&!GameEnd.removeAdditionalEnd,checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:191,name:"I can fix it",description:"Mend the Multiverse.",checkRequirement:()=>!0,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,reward:"Re-enable TTM in Doomed Reality"},{id:192,name:"I am no longer trapped here",description:"Unlock the 10 Mend Milestone",checkRequirement:()=>MendingMilestone.six.isReached,get reward(){return`Multiply Multiversal Remain Gain by ${formatX(3,0)}.`},checkEvent:GAME_EVENT.GAME_TICK_AFTER,effect:3},{id:193,displayId:297,name:"TRUE Royal flush",description:"Have one of each Glyph type equipped at once (not counting Companion).",checkRequirement:()=>FUNCTIONAL_GLYPH_TYPES.every((e=>Glyphs.activeList.some((t=>t.type===e)))),checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"Gained Glyph level is ×1.0808 after instability.",effect:1.0808},{id:194,name:"Limit Break^2",description:"Warp Reality",checkRequirement:()=>player.reality.warped,checkEvent:GAME_EVENT.GAME_TICK_AFTER,reward:"Challenge Times and total Antimatter are no longer reset",effect:1},{id:195,name:"Woah, we're super halfway there",get description(){return`Get ${formatInt(350)} total Ra Celestial Memory levels.`},checkRequirement:()=>Ra.totalPetLevel>=350,checkEvent:GAME_EVENT.GAME_TICK_AFTER,get reward(){return"Get ×10 more memories."},effect:10},{id:196,name:"196",description:"placeholder"},{id:197,name:"197",description:"placeholder"},{id:198,name:"198",description:"placeholder"}],qe=[{id:11,name:"The first one's always free",description:"Click on this Achievement."},{id:12,name:"Just in case",get description(){return`Save ${formatInt(100)} times without refreshing.`}},{id:13,name:"It pays to have respect",description:"Pay respects."},{id:14,name:"So do I",description:"Say something naughty."},{id:15,name:"Do a barrel roll!",description:"Do a barrel roll."},{id:16,name:"Do you enjoy pain?",get description(){return`Use a "painful" notation for ${formatInt(10)} real-time minutes\n after doing an Eternity.`},checkRequirement:()=>AchievementTimers.pain.check(PlayerProgress.eternityUnlocked()&&Notations.current.isPainful,600),checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:17,name:"30 Lives",description:"Input the konami code."},{id:18,name:"Do you feel lucky? Well do ya punk?",get description(){return`You have a ${formatInt(1)}/${formatInt(1e5)} chance of getting this achievement every second.`}},{id:21,name:"Go study in real life instead",description:"Purchase the secret Time Study."},{id:22,name:"Deep fried",get description(){return`Buy ${formatInt(1e5)} Antimatter Galaxies in total while using emoji notation.`},checkRequirement:()=>player.requirementChecks.permanent.emojiGalaxies>=1e5,checkEvent:GAME_EVENT.GALAXY_RESET_AFTER},{id:23,name:"Stop right there criminal scum!",description:"Open the console."},{id:24,name:"Real news",description:"Click on a news ticker message that does something when you click on it."},{id:25,name:"Shhh... It's a secret",description:"Discover a secret theme."},{id:26,name:"You're a failure",get description(){return`Fail Eternity Challenges ${formatInt(10)} times without refreshing.\n What are you doing with your life...`},checkRequirement:function(){let e=0;return()=>++e>=10}(),checkEvent:GAME_EVENT.CHALLENGE_FAILED},{id:27,name:"It's not called matter dimensions is it?",description:"Get Infinite matter.",checkRequirement:()=>Currency.matter.gte(Decimal.NUMBER_MAX_VALUE),checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:28,name:"Nice.",description:"Don't act like you don't know what you did."},{id:31,name:"You should download some more RAM",get description(){return`Set your update rate to ${formatInt(200)}ms.`}},{id:32,name:"Less than or equal to 0.001",get description(){return`Get a fastest infinity or eternity time of less than or equal to ${format(.001,3,3)} seconds.`},checkRequirement:()=>Time.bestInfinity.totalMilliseconds.lte(1)||Time.bestEternity.totalMilliseconds.lte(1),checkEvent:[GAME_EVENT.BIG_CRUNCH_AFTER,GAME_EVENT.ETERNITY_RESET_AFTER]},{id:33,name:"A sound financial decision",description:"Click on the button to purchase STD coins...Wait, open source disables the shop, how did you get this!?"},{id:34,name:"You do know how these work, right?",description:"Respec with an empty Time Study Tree."},{id:35,name:"Should we tell them about buy max...",get description(){return`Buy single Tickspeed upgrades ${formatInt(1e5)} times.`},checkRequirement:()=>player.requirementChecks.permanent.singleTickspeed>=1e5,checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:36,name:"While you were away... Nothing happened.",description:"See nothing happen while you were away."},{id:37,name:"You followed the instructions",description:"Follow instructions."},{id:38,name:"Knife's edge",description:"Close the Hard Reset modal after typing in the confirmation."},{id:41,name:"That dimension doesn’t exist",description:"Try to purchase the 9th dimension."},{id:42,name:"SHAME ON ME",description:"Try to use EC12 to speed up time."},{id:43,name:"A cacophonous chorus",description:"Have all equipped Glyphs be Music Glyphs.",checkRequirement:()=>Glyphs.active.length&&Glyphs.active.every((e=>Glyphs.isMusicGlyph(e))),checkEvent:GAME_EVENT.GLYPHS_EQUIPPED_CHANGED},{id:44,name:"Are you statisfied now?",get description(){return`Stare intently at the statistics tab for ${formatInt(15)} real-time minutes.`},checkRequirement:()=>AchievementTimers.stats.check(Tab.statistics.isOpen,900),checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:45,name:"This dragging is dragging on",description:"Drag the Perks around for a minute.",checkRequirement:()=>player.requirementChecks.permanent.perkTreeDragging++/100>=60},{id:46,name:"For a rainy day",description:"Store a day of real time."},{id:47,name:"ALT+",description:"Hide every possible tab."},{id:48,name:"Stack overflow",description:"Have more Automator errors than lines."}],Ve={normal:He,secret:qe},Ye=[{name:"antimatter",isUnlocked:()=>!0},{name:"dimensionBoosts",isUnlocked:()=>!0},{name:"antimatterGalaxies",reference:["galaxies"],isUnlocked:()=>!0},{name:"infinities",isUnlocked:()=>PlayerProgress.infinityUnlocked()},{name:"infinityPoints",isUnlocked:()=>PlayerProgress.infinityUnlocked()},{name:"replicanti",reference:["replicanti","amount"],isUnlocked:()=>PlayerProgress.replicantiUnlocked()||PlayerProgress.eternityUnlocked()},{name:"replicantiGalaxies",reference:["replicanti","galaxies"],isUnlocked:()=>PlayerProgress.replicantiUnlocked()||PlayerProgress.eternityUnlocked()},{name:"eternities",isUnlocked:()=>PlayerProgress.eternityUnlocked()},{name:"eternityPoints",isUnlocked:()=>PlayerProgress.eternityUnlocked()},{name:"tachyonParticles",reference:["dilation","tachyonParticles"],isUnlocked:()=>PlayerProgress.dilationUnlocked()||PlayerProgress.realityUnlocked()},{name:"dilatedTime",reference:["dilation","dilatedTime"],isUnlocked:()=>PlayerProgress.dilationUnlocked()||PlayerProgress.realityUnlocked()},{name:"timeTheorems",reference:["timestudy","theorem"],isUnlocked:()=>PlayerProgress.dilationUnlocked()||PlayerProgress.realityUnlocked()},{name:"tachyonGalaxies",reference:["dilation","totalTachyonGalaxies"],isUnlocked:()=>PlayerProgress.dilationUnlocked()||PlayerProgress.realityUnlocked()},{name:"achievementAmount",reference:["achievementBits"],applyFn:e=>e.map((e=>countValuesFromBitmask(e))).sum(),isUnlocked:()=>PlayerProgress.realityUnlocked()},{name:"realities",isUnlocked:()=>PlayerProgress.realityUnlocked()},{name:"realityMachines",reference:["reality","realityMachines"],isUnlocked:()=>PlayerProgress.realityUnlocked()},{name:"blackHole",isUnlocked:()=>BlackHole(1).isUnlocked,appearsInAwayModal:!1},{name:"firstBlackHole",awayOption:"blackHole",reference:["blackHole","0","activations"],isUnlocked:()=>BlackHole(1).isUnlocked,classObjectReference:"black-hole",showOption:!1},{name:"secondBlackHole",awayOption:"blackHole",reference:["blackHole","1","activations"],isUnlocked:()=>BlackHole(2).isUnlocked,classObjectReference:"black-hole",showOption:!1},{name:"relicShards",reference:["celestials","effarig","relicShards"],isUnlocked:()=>TeresaUnlocks.effarig.canBeApplied},{name:"celestialMemories",isUnlocked:()=>VUnlocks.raUnlock.isUnlocked,appearsInAwayModal:!1},{name:"teresaMemories",awayOption:"celestialMemories",reference:["celestials","ra","pets","teresa","memories"],isUnlocked:()=>Ra.pets.teresa.isUnlocked&&!Ra.pets.teresa.isCapped,showOption:!1},{name:"effarigMemories",awayOption:"celestialMemories",reference:["celestials","ra","pets","effarig","memories"],isUnlocked:()=>Ra.pets.effarig.isUnlocked&&!Ra.pets.effarig.isCapped,showOption:!1},{name:"enslavedMemories",forcedName:"Nameless Memories",awayOption:"celestialMemories",reference:["celestials","ra","pets","enslaved","memories"],isUnlocked:()=>Ra.pets.enslaved.isUnlocked&&!Ra.pets.enslaved.isCapped,showOption:!1},{name:"vMemories",awayOption:"celestialMemories",reference:["celestials","ra","pets","v","memories"],isUnlocked:()=>Ra.pets.v.isUnlocked&&!Ra.pets.v.isCapped,showOption:!1},{name:"imaginaryMachines",reference:["reality","imaginaryMachines"],isUnlocked:()=>MachineHandler.isIMUnlocked},{name:"darkMatter",reference:["celestials","laitela","darkMatter"],isUnlocked:()=>Laitela.isUnlocked},{name:"darkEnergy",reference:["celestials","laitela","darkEnergy"],isUnlocked:()=>Laitela.isUnlocked},{name:"singularities",reference:["celestials","laitela","singularities"],isUnlocked:()=>Laitela.isUnlocked},{name:"realityShards",reference:["celestials","pelle","realityShards"],isUnlocked:()=>Pelle.isDoomed},{name:"multiversalRemains",reference:["mending","new content"],isUnlocked:()=>PlayerProgress.mendingUnlocked()}],We=[{name:"Antimatter Dimensions",id:0,requiredStage:PROGRESS_STAGE.PRE_INFINITY,description:"Every Antimatter Dimension continuously produces Dimensions of the next tier down. The lowest\n Antimatter Dimension produces antimatter."},{name:"Tickspeed Upgrades",id:1,openH2pEntry:"Tickspeed",requiredStage:PROGRESS_STAGE.PRE_INFINITY,description:"Tickspeed Upgrades make Antimatter Dimensions produce other Antimatter Dimensions or antimatter\n as if time were passing faster."},{name:"Autobuyers",id:2,requiredStage:PROGRESS_STAGE.PRE_INFINITY,description:"Autobuyers are a built-in feature to the game which purchases upgrades for your Antimatter\n Dimensions automatically when you can afford them."},{name:"Dimension Boosts",id:3,requiredStage:PROGRESS_STAGE.PRE_INFINITY,description:"Dimension Boosts are gained by resetting all your Antimatter Dimensions and tickspeed after\n reaching a certain amount of the highest available Antimatter Dimension. They provide a multiplier to your\n Antimatter Dimensions."},{name:"Antimatter Galaxies",id:4,requiredStage:PROGRESS_STAGE.PRE_INFINITY,description:"Antimatter Galaxies are gained by resetting your Antimatter Dimensions and Dimension Boosts. They\n improve the effectiveness of your Tickspeed Upgrades in a compounding way."},{name:"Infinity",id:5,requiredStage:PROGRESS_STAGE.EARLY_INFINITY,description:()=>`Infinity is the first main reset layer. Reaching ${format(Number.MAX_VALUE,2)} antimatter\n allows you to reset everything up to this point in exchange for unlocking new content and resources.`},{name:"Infinity Points",id:6,openH2pEntry:"Infinity",requiredStage:PROGRESS_STAGE.EARLY_INFINITY,description:"Infinity Points are the primary resource after completing your first Infinity. They can be spent on\n features which persist through Infinity resets."},{name:"Normal Challenges",id:7,openH2pEntry:"Normal Challenges",requiredStage:PROGRESS_STAGE.EARLY_INFINITY,description:()=>`Challenges require you to reach ${format(Number.MAX_VALUE,2)} antimatter under more difficult\n conditions. Completing challenges allows you to upgrade your Autobuyers.`},{name:"Break Infinity",id:8,requiredStage:PROGRESS_STAGE.BREAK_INFINITY,description:()=>`Upgrading your Big Crunch Autobuyer to the maximum allows you to surpass\n ${format(Number.MAX_VALUE,2)} antimatter, giving increasing amounts of Infinity Points with more antimatter.`},{name:"Infinity Dimensions",id:9,requiredStage:PROGRESS_STAGE.BREAK_INFINITY,description:"Infinity Dimensions Produce in a cascading fashion like Antimatter Dimensions. The lowest tier of\n Infinity Dimension produces Infinity Power, which applies a large multiplier to all Antimatter Dimensions."},{name:"Infinity Challenges",id:10,requiredStage:PROGRESS_STAGE.BREAK_INFINITY,description:()=>`Infinity Challenges are new challenges with an antimatter goal above\n ${format(Number.MAX_VALUE,2)}. Completing them rewards upgrades and production boosts.`},{name:"Replicanti",id:11,requiredStage:PROGRESS_STAGE.REPLICANTI,description:()=>`Replicanti is a resource which produces itself over time, giving a multiplier to all\n Infinity Dimensions. At ${format(Number.MAX_VALUE,2)} Replicanti, they can be reset to ${formatInt(1)} for an\n additional Galaxy which does not increase the cost of Antimatter Galaxies. They also reset after every Infinity.`},{name:"Eternity",id:12,requiredStage:PROGRESS_STAGE.EARLY_ETERNITY,description:()=>`Eternity is the second main reset layer. Reaching ${format(Number.MAX_VALUE,2)} Infinity Points\n allows you to reset everything up to this point for access to new content and resources.`},{name:"Eternity Points",id:13,openH2pEntry:"Eternity",requiredStage:PROGRESS_STAGE.EARLY_ETERNITY,description:"Eternity Points are the primary resource after completing your first Eternity, and scale based on your\n Infinity Points at the time you complete the Eternity."},{name:"Time Studies",id:14,requiredStage:PROGRESS_STAGE.EARLY_ETERNITY,description:"Time Studies are a set of upgrades akin to a skill tree, and can be freely re-allocated after every\n Eternity with no resource loss. Some sections of the tree have restrictions which forbid you from choosing\n particular studies simultaneously."},{name:"Eternity Milestones",id:15,requiredStage:PROGRESS_STAGE.EARLY_ETERNITY,description:"Eternity Milestones are forms of built-in automation and convenience which are unlocked simply by\n completing more Eternities. Unlocking them does not require spending any resources."},{name:"Time Dimensions",id:16,requiredStage:PROGRESS_STAGE.EARLY_ETERNITY,description:"Time Dimensions also produce each other in a cascading manner, with the lowest tier producing Time\n Shards. Time Shards give you additional Tickspeed Upgrades which do not increase the cost of the Tickspeed\n Upgrades purchased with antimatter."},{name:"Eternity Challenges",id:17,requiredStage:PROGRESS_STAGE.ETERNITY_CHALLENGES,description:"Eternity Challenges are modified Eternities with an Infinity Point goal which must be reached for\n completion. They can be completed up to five times, getting more difficult each repetition in exchange for\n increasingly powerful rewards."},{name:"Time Dilation",id:18,requiredStage:PROGRESS_STAGE.EARLY_DILATION,description:()=>"Time Dilation is a modified Eternity where tickspeed and all Dimension multipliers are\n severely reduced. Completing Dilated Eternities gives Tachyon Particles."},{name:"Tachyon Particles",id:19,openH2pEntry:"Time Dilation",requiredStage:PROGRESS_STAGE.EARLY_DILATION,description:()=>"Tachyon Particles are a resource which cannot be farmed and require you to get a higher amount\n of antimatter in a Dilated Eternity in order to increase your amount. Tachyon Particles produce Dilated Time."},{name:"Reality",id:20,requiredStage:PROGRESS_STAGE.EARLY_REALITY,description:()=>`Reality is the third and final main reset layer. Reaching ${format(b.E4000)} Eternity Points\n gives you the option to reset everything up to this point in exchange for unlocking new content and gaining\n access to new resources.`},{name:"Reality Machines",id:21,openH2pEntry:"Reality",requiredStage:PROGRESS_STAGE.EARLY_REALITY,description:"Reality Machines are the primary resource after completing your first Reality. They are given based\n on Eternity Points at the time of completing a Reality."},{name:"Perks",id:22,requiredStage:PROGRESS_STAGE.EARLY_REALITY,description:"Perks are unlockable features similar to Eternity Milestones which primarily focus on convenience and\n automation. They are purchased using Perk Points, which are gained after every Reality."},{name:"Glyphs",id:23,requiredStage:PROGRESS_STAGE.EARLY_REALITY,description:"Glyphs are equippable upgrades which can only be unequipped between Realities. Every Reality you are\n allowed to choose one of multiple new random Glyphs to receive; the average quality of your available choices\n is determined by how high some of your resources reached in that Reality."},{name:"Automator",id:24,openH2pEntry:"Automator Overview",requiredStage:PROGRESS_STAGE.EARLY_REALITY,description:"The Automator is a built-in feature that uses a scripting language that allows you to eventually\n finish Realities completely hands-off with enough upgrades and perks."},{name:"Black Hole",id:25,requiredStage:PROGRESS_STAGE.EARLY_REALITY,description:"The Black Hole runs the entire game faster in a periodic cycle. This affects everything in the game up\n to this point and will give similar results to leaving the game open for an equivalent amount of time."},{name:"Teresa",id:26,requiredStage:PROGRESS_STAGE.TERESA,description:"Teresa is the first Celestial, who has a more difficult Reality which gives a massive boost to Glyph\n Sacrifice depending upon completion. They unlock upgrades which focus on testing and automating Realities more\n easily."},{name:"Effarig",id:27,requiredStage:PROGRESS_STAGE.EFFARIG,description:"Effarig is the second Celestial, whose Reality limits your Glyphs and has scaling nerfs but gives\n rewards for each new reset layer reached. They unlock upgrades which focus on automatically selecting and\n filtering the large number of Glyphs you are receiving, purchased with a new resource called Relic Shards."},{name:"The Nameless Ones",id:28,openH2pEntry:"Nameless Ones",requiredStage:PROGRESS_STAGE.ENSLAVED,description:"The Nameless Ones are the third Celestial, whose Reality is extremely punishing with a long list of\n nerfs, but unlocks Tesseracts for those who can figure out how to prevail. They also modify your Black Hole to\n allow it to store time."},{name:"Stored Time",id:29,openH2pEntry:"Nameless Ones",requiredStage:PROGRESS_STAGE.ENSLAVED,description:"Your Black Hole has the ability to store time in two ways. Charging it allows you to hold on to\n sped-up time and release it later as a single skip-forward burst. Storing real time lets you use actual time\n to simulate Realities (giving you the resources of that Reality but multiplied), or as a stand-in for\n offline progress."},{name:"Tesseracts",id:30,requiredStage:PROGRESS_STAGE.ENSLAVED,description:"Infinity Dimensions cannot be purchased indefinitely and all but the 8th have a hard limit for how\n many times they can be purchased. Each Tesseract permanently increases this limit by a large amount."},{name:"V",id:31,requiredStage:PROGRESS_STAGE.V,description:"V is the fourth Celestial, with a modified Reality which is similar to Teresa's Reality but only gives\n rewards by reaching certain milestones of resources within. They give a new resource called Space Theorems, which\n allow you to purchase additional Time Studies without path restrictions."},{name:"Ra",id:32,requiredStage:PROGRESS_STAGE.RA,description:"Ra is the fifth Celestial, with a modified Reality which produces a resource called Memory Chunks\n based on your resource totals within. They focus highly on taking older upgrades and themes from the previous\n four Celestials and improving upon them, as well as filling out some final gaps in automation and convenience."},{name:"Memories",id:33,openH2pEntry:"Ra",requiredStage:PROGRESS_STAGE.RA,description:"Ra has the previous four Celestials under their control, producing Memories over time based on Memory\n Chunk count. These Memories are used to level up the previous Celestials, providing upgrades when certain levels\n are reached."},{name:"Charged Infinity Upgrades",id:34,openH2pEntry:"Ra",requiredStage:PROGRESS_STAGE.RA,description:"Teresa's Memories allow you to charge your Infinity Upgrades, maintaining a similar effect but\n strengthening them significantly. Which upgrades are charged can only be changed between Realities."},{name:"Glyph Alchemy",id:35,requiredStage:PROGRESS_STAGE.RA,description:"Effarig's Memories unlock Glyph Alchemy, which gives many minor boosts using a modified version of\n Glyph Sacrifice. The resources gained from giving up Glyphs in this way must be combined together in reactions\n in order to fully upgrade their effects."},{name:"Amplified Black Hole",id:36,openH2pEntry:"Ra",requiredStage:PROGRESS_STAGE.RA,description:"Nameless's Memories amplify charging so that the amount of game time stored is larger than the actual\n game time elapsed. Discharging can now also be done repeatedly and automatically."},{name:"Harder V",id:37,openH2pEntry:"Ra",requiredStage:PROGRESS_STAGE.RA,description:"V's Memories unlocks a modified version of V's original Reality with even harder goals and a new set\n of Time Studies called Triad Studies."},{name:"Imaginary Machines",id:38,requiredStage:PROGRESS_STAGE.IMAGINARY_MACHINES,description:()=>`Imaginary Machines are a new resource unlocked when reaching ${format(b.E1000)} Reality\n Machines. They are produced passively up to a cap determined by how many Reality Machines you would have gotten\n in your farthest Reality ever.`},{name:"Lai'tela",id:39,requiredStage:PROGRESS_STAGE.LAITELA,description:"Lai'tela is the sixth Celestial, whose Reality has a modified completion condition and gives a\n scaling reward based on how quickly you can reach it. They unlock new features largely related to a resource\n called Dark Matter."},{name:"Continuum",id:40,requiredStage:PROGRESS_STAGE.LAITELA,description:"Continuum is a modified type of production which allows your Antimatter Dimensions to produce as if\n they could purchase fractional amounts of upgrades, without actually purchasing them."},{name:"Dark Matter Dimensions",id:41,openH2pEntry:"Lai'tela",requiredStage:PROGRESS_STAGE.LAITELA,description:"Dark Matter Dimensions are cascading production which operate on a tick-based system instead of\n continuously. The lowest tier produces Dark Matter and all tiers produce Dark Energy."},{name:"Dimension Reset Mechanics",id:42,openH2pEntry:"Lai'tela",requiredStage:PROGRESS_STAGE.LAITELA,description:"Dark Matter Dimensions can be reset in two ways. Annihilation resets all your Dimensions in exchange\n for a permanent multiplier to all Dark Matter Dimensions. Ascension increases production but resets the interval\n of a single Dimension."},{name:"Singularities",id:43,requiredStage:PROGRESS_STAGE.LAITELA,description:"Dark Energy can be used to produce Singularities, which give boosts based on their total amount.\n When producing Singularities, any extra Dark Energy above the condensing threshold is wasted."},{name:"Pelle",id:44,requiredStage:PROGRESS_STAGE.PELLE,description:"Pelle is the seventh and final Celestial, who permanently Dooms your game, throwing you into a very\n difficult modified Reality which you cannot escape."},{name:"Armageddon",id:45,openH2pEntry:"Pelle",requiredStage:PROGRESS_STAGE.PELLE,description:"Armageddon is a Pelle-specific reset which you can perform at any time. This resets your progress to\n the beginning of the Doomed Reality, but gives Remnants which produce Reality Shards."},{name:"Pelle Strikes and Rifts",id:46,openH2pEntry:"Pelle Strikes",requiredStage:PROGRESS_STAGE.PELLE,description:"Upon reaching certain progress milestones within Pelle, a Strike may occur which permanently applies\n another nerf to the Doomed Reality. Accompanying every Strike is a Rift, which is a mechanic which lets you drain\n a different resource in exchange for a boost. These are permanent and remain unlocked after Armageddon."},{name:"Multiversal Remains",id:47,openH2pEntry:"Mending",requiredStage:PROGRESS_STAGE.MENDING,description:"*placeholder*"}];i(8702),i(5674);function je(e){return Math.pow(e,10)}function Xe(e){if(VUnlocks.vAchievementUnlock.isUnlocked)return 1;const t=Object.values(GameDatabase.celestials.v.mainUnlock).find((t=>t.id===e));return t.progress()}function ze(e,t){const i=Object.values(GameDatabase.celestials.v.mainUnlock).find((e=>e.id===t));return e>=1?`${i.name} condition for V`:`Reach ${i.format(i.resource())} / ${i.format(i.requirement)} ${i.name}.`}function Ke(e,t){const i=new Vector(750,550),a=(.7-.4*e)*Math.PI;return new Vector(t*Math.cos(a),-t*Math.sin(a)).plus(i)}function Ze(e,t,i){return function(){const a=75,n=(.4*e+.5)*Math.PI,s=n+2,r=LogarithmicSpiral.fromPolarEndpoints(Ke(e+.5,a),n,a,s,4/3*a),o=r.angleFromRadius(a+.01)-n,l=s-r.angleFromRadius(4/3*a);return{pathStart:n,pathEnd:s,path:r,pathPadStart:o,pathPadEnd:l,fill:t,drawOrder:i?et.NODE_OVERLAYS:void 0,noBG:i}}()}const Qe={LOCKED:0,FILL:1,DRAIN:2,OVERFILL:3};function Je(e){const t=PelleRifts[e.toLowerCase()];return t.canBeApplied?Pelle.hasGalaxyGenerator&&1!==t.reducedTo?t.reducedTo<1?Qe.DRAIN:Qe.OVERFILL:Qe.FILL:Qe.LOCKED}const et={NODE_BG:0,CONNECTORS:1e3,NODES:2e3,NODE_OVERLAYS:3e3,CANVAS_OVERLAY:4e3},tt=Object.freeze({teresa:new Vector(100,100),teresaPerkPointShop:new Vector(0,-50),effarigShop:new Vector(300,0),effarigRealityUnlock:new Vector(400,50),effarigNode:new Vector(550,25),enslavedReality:new Vector(650,250),enslavedGlyphLevel:new Vector(650+75*Math.cos(Math.PI/180*-60),250+75*Math.sin(Math.PI/180*-60)),enslavedGlyphRarity:new Vector(650+75*Math.cos(Math.PI/180*120),250+75*Math.sin(Math.PI/180*120)),vUnlockAchievement:new Vector(400,350+50*Math.sqrt(3)),vAchievement0:new Vector(350,350),vAchievement1:new Vector(450,350),vAchievement2:new Vector(500,350+50*Math.sqrt(3)),vAchievement3:new Vector(450,350+100*Math.sqrt(3)),vAchievement4:new Vector(350,350+100*Math.sqrt(3)),vAchievement5:new Vector(300,350+50*Math.sqrt(3)),raReality:new Vector(400,200),raPetTeresa:new Vector(400+85*Math.sin(Math.PI/180*252),200+85*Math.cos(Math.PI/180*252)),raPetEffarig:new Vector(400+85*Math.sin(Math.PI/180*140),200+85*Math.cos(Math.PI/180*140)),raPetEnslaved:new Vector(400+85*Math.sin(Math.PI/180*78),200+85*Math.cos(Math.PI/180*78)),raPetV:new Vector(400+85*Math.sin(Math.PI/180*0),200+85*Math.cos(Math.PI/180*0)),laitelaFirstCenter:new Vector(150,450),laitelaFirstLeft:new Vector(100,500),laitelaFirstRight:new Vector(200,500),laitelaSecondCenter:new Vector(150,550),laitelaSecondLeft:new Vector(100,600),laitelaSecondRight:new Vector(200,600),laitelaThirdCenter:new Vector(150,650),pelleUnlock:new Vector(450,580),pelleAchievementRequirement:Ke(0,0),pelleVacuum:Ke(0,150),pelleDecay:Ke(1,150),pelleChaos:Ke(2,150),pelleRecursion:Ke(3,150),pelleParadox:Ke(4,150),pelleGalaxyGen:Ke(0,0)});function it(e,t,i,a){let n,s,r,o,l,c,u;switch(a){case Qe.FILL:n=()=>Je(e)===Qe.FILL,s=()=>Math.clamp(.1+PelleRifts[e.toLowerCase()].realPercentage/.9,1e-6,1),r=()=>!1,o=()=>PelleRifts[e.toLowerCase()].realPercentage,l="c-celestial-nav__test-incomplete",c="crimson",u="crimson";break;case Qe.DRAIN:n=()=>Je(e)>=Qe.DRAIN,s=()=>Math.clamp(Math.sqrt(PelleRifts[e.toLowerCase()].reducedTo),1e-6,1),r=()=>Je(e)===Qe.DRAIN&&PelleRifts[e.toLowerCase()].reducedTo<1,o=()=>PelleRifts[e.toLowerCase()].reducedTo,l="c-celestial-nav__drained-rift",c="crimson",u="#550919";break;case Qe.OVERFILL:n=()=>Je(e)===Qe.OVERFILL,s=()=>Math.clamp(PelleRifts[e.toLowerCase()].percentage-1,1e-6,1),o=()=>PelleRifts[e.toLowerCase()].percentage,r=()=>!0,l=void 0,c="#ff7700",u="#ff9900";break}return{visible:()=>Pelle.isDoomed&&n(),complete:()=>s(),node:{clickAction:()=>Tab.celestials.pelle.show(!0),incompleteClass:l,position:tt[`pelle${e}`],fill:c,ring:{rMajor:8},forceLegend:()=>r(),legend:{text:()=>[`${formatPercents(o(),1)} ${P.wordCycle(PelleRifts[e.toLowerCase()].name)}`],angle:i,diagonal:30,horizontal:16}},connector:Ze(t,u,a===Qe.OVERFILL)}}const at=["fill","drain","overfill"],nt=["Vacuum","Decay","Chaos","Recursion","Paradox"],st=[225,315,45,135,135],rt={};for(const V of at)for(let e=0;e!0,complete:()=>1,node:{clickAction:()=>Tab.celestials.teresa.show(!0),completeClass:"c-celestial-nav__test-complete",incompleteClass:"c-celestial-nav__test-incomplete",position:tt.teresa,ring:{rMajor:78,rMinor:64},legend:{text:"Teresa",angle:135,diagonal:32,horizontal:16}}},"teresa-reality-unlock":{visible:()=>!0,complete:()=>TeresaUnlocks.run.canBeApplied?1:Decimal.pLog10(Teresa.pouredAmount)/Math.log10(TeresaUnlocks.run.price),node:{completeClass:"c-celestial-nav__test-complete",incompleteClass:"c-celestial-nav__test-incomplete",position:tt.teresa,ring:{rMajor:32,rMinor:22},legend:{hideWhenCompleted:!0,text:()=>{const e=Teresa.pouredAmount,t=TeresaUnlocks.run.price;return`Pour ${format(e,2)} / ${format(t,2)} RM`},angle:135,diagonal:16,horizontal:16}},connector:function(){const e=-Math.PI,t=Math.PI,i=LogarithmicSpiral.fromPolarEndpoints(tt.teresa,-Math.PI,69,Math.PI,26),a=i.angleFromRadius(61)-e,n=t-i.angleFromRadius(34);return{pathStart:e,pathEnd:t,path:i,pathPadStart:a,pathPadEnd:n}}()},"teresa-reality":{visible:()=>!0,complete:()=>Teresa.runCompleted?1:0,node:{clickAction:()=>Tab.celestials.teresa.show(!0),completeClass:"c-celestial-nav__test-complete",incompleteClass:"c-celestial-nav__test-incomplete",symbol:"Ϟ",position:tt.teresa,ring:{rMajor:16},alwaysShowLegend:!0,legend:{text:"Teresa's Reality",angle:-135,diagonal:96,horizontal:16}}},"teresa-pp-shop":{visible:()=>!0,complete:()=>TeresaUnlocks.shop.canBeApplied?1:Decimal.pLog10(Teresa.pouredAmount)/Math.log10(TeresaUnlocks.shop.price),node:{clickAction:()=>Tab.celestials.teresa.show(!0),completeClass:"c-celestial-nav__test-complete",incompleteClass:"c-celestial-nav__test-incomplete",position:tt.teresaPerkPointShop,ring:{rMajor:16,rMinor:0},legend:{text:e=>{if(e>=1)return"Teresa's Perk Point Shop";const t=Teresa.pouredAmount,i=TeresaUnlocks.shop.price;return["Teresa's Perk Point Shop",`Pour ${format(t,2)} / ${format(i,2)} Reality Machines`]},angle:-35,diagonal:16,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:LinearPath.connectCircles(tt.teresa,77,tt.teresaPerkPointShop,15),completeWidth:6,incompleteWidth:4}},"effarig-shop":{visible:()=>!0,complete:()=>TeresaUnlocks.effarig.canBeApplied?1:Decimal.pLog10(Teresa.pouredAmount)/Math.log10(TeresaUnlocks.effarig.price),node:{clickAction:()=>Tab.celestials.effarig.show(!0),completeClass:"c-celestial-nav__effarig",incompleteClass:"c-celestial-nav__test-incomplete",position:tt.effarigShop,ring:{rMajor:24},legend:{text:e=>{if(e>=1)return"Effarig's Shop";const t=Teresa.pouredAmount,i=TeresaUnlocks.effarig.price;return["Effarig",`Pour ${format(t,2)} / ${format(i,2)} Reality Machines`]},angle:-135,diagonal:16,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:LinearPath.connectCircles(tt.teresa,77,tt.effarigShop,23),fill:"url(#gradTeresaEffarig)"}},"effarig-reality-unlock":{visible:()=>TeresaUnlocks.effarig.canBeApplied,complete:()=>EffarigUnlock.run.isUnlocked?1:Math.clampMax(.999,Decimal.pLog10(Currency.relicShards.value)/Math.log10(EffarigUnlock.run.cost)),node:{clickAction:()=>Tab.celestials.effarig.show(!0),completeClass:"c-celestial-nav__effarig",incompleteClass:"c-celestial-nav__test-incomplete",position:tt.effarigRealityUnlock,ring:{rMajor:16},legend:{text:e=>{if(e>=1)return"Unlock Effarig's Reality";const t=Currency.relicShards.value,i=EffarigUnlock.run.cost;return["Unlock Effarig's Reality",`Reach ${format(t,2)} / ${format(i,2)} Relic Shards`]},angle:75,diagonal:40,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:LinearPath.connectCircles(tt.effarigShop,23,tt.effarigRealityUnlock,15),fill:"#d13737"}},"effarig-infinity":{visible:()=>EffarigUnlock.run.isUnlocked,complete:()=>EffarigUnlock.infinity.isUnlocked?1:Effarig.isRunning?Currency.antimatter.value.pLog10()/Decimal.NUMBER_MAX_VALUE.log10():0,node:{clickAction:()=>Tab.celestials.effarig.show(!0),completeClass:"c-celestial-nav__effarig",incompleteClass:"c-celestial-nav__test-incomplete",position:tt.effarigNode,ring:{rMajor:60,rMinor:52},legend:{text:e=>{if(e>=1)return"Effarig's Infinity";if(0===e)return"Unlock Effarig's Reality";const t=Effarig.isRunning?Currency.antimatter.value:0;return["Effarig's Infinity",`Reach ${format(t,2)} / ${format(Number.MAX_VALUE,2)}`,"Antimatter inside Effarig's Reality."]},angle:0,diagonal:100,horizontal:16},bgDrawOrder:et.NODE_BG+750},connector:{pathStart:0,pathEnd:1,path:LinearPath.connectCircles(tt.effarigRealityUnlock,15,tt.effarigNode,59),fill:"#d13737"}},"effarig-eternity":{visible:()=>EffarigUnlock.infinity.isUnlocked,complete:()=>EffarigUnlock.eternity.isUnlocked?1:Effarig.isRunning?Currency.infinityPoints.value.pLog10()/Decimal.NUMBER_MAX_VALUE.log10():0,node:{clickAction:()=>Tab.celestials.effarig.show(!0),completeClass:"c-celestial-nav__effarig",incompleteClass:"c-celestial-nav__test-incomplete",fill:"#7131ec",position:tt.effarigNode,ring:{rMajor:40,rMinor:30},legend:{text:e=>{if(e>=1)return"Effarig's Eternity";const t=Effarig.isRunning?Currency.infinityPoints.value:0;return["Effarig's Eternity",`Reach ${format(t,2)} / ${format(Number.MAX_VALUE,2)}`,"Infinity Points inside Effarig's Reality."]},angle:-45,diagonal:16,horizontal:16}},connector:function(){const e=-Math.PI,t=0,i=LogarithmicSpiral.fromPolarEndpoints(new Vector(560,25),e,66,t,26),a=0,n=t-i.angleFromRadius(30);return{pathStart:e,pathEnd:t,path:i,pathPadStart:a,pathPadEnd:n,fill:"#d13737"}}()},"effarig-reality":{visible:()=>EffarigUnlock.eternity.isUnlocked,complete:()=>EffarigUnlock.reality.isUnlocked?1:Effarig.isRunning?Currency.eternityPoints.value.pLog10()/4e3:0,node:{clickAction:()=>Tab.celestials.effarig.show(!0),completeClass:"c-celestial-nav__effarig",incompleteClass:"c-celestial-nav__test-incomplete",fill:"#A101ec",position:new Vector(550,25),ring:{rMajor:20,rMinor:0},symbol:"Ϙ",alwaysShowLegend:!0,legend:{text:e=>{if(e>=1)return"Effarig's Reality";const t=Effarig.isRunning?Currency.eternityPoints.value:0,i=b.E4000;return["Effarig's Reality",`Reach ${format(t,2)} / ${format(i,2)}`,"Eternity Points inside Effarig's Reality."]},angle:-120,diagonal:82,horizontal:16}},connector:function(){const e=0,t=Math.PI,i=LogarithmicSpiral.fromPolarEndpoints(new Vector(558,25),e,26,t,24),a=0,n=0;return{pathStart:e,pathEnd:t,path:i,pathPadStart:a,pathPadEnd:n,fill:"#d13737"}}()},enslaved:{visible:()=>EffarigUnlock.eternity.isUnlocked,complete:()=>EffarigUnlock.eternity.isUnlocked?1:0,drawOrder:-1,node:{clickAction:()=>Tab.celestials.enslaved.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffa337",position:tt.enslavedReality,ring:{rMajor:80,rMinor:70,gapCenterDeg:15,gapDeg:200},alwaysShowLegend:!1,legend:{text:"Nameless",angle:-90,diagonal:20,horizontal:16}},connector:{pathStart:0,pathEnd:1,drawOrder:et.NODE_BG+500,path:LinearPath.connectCircles(tt.effarigNode,39,tt.enslavedReality,79),fill:"url(#gradEffarigEnslaved)"}},"enslaved-unlock-glyph-level":{visible:()=>EffarigUnlock.eternity.isUnlocked,complete:()=>player.records.bestReality.glyphLevel/5e3,drawOrder:-1,node:{clickAction:()=>Tab.celestials.enslaved.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffa337",position:tt.enslavedGlyphLevel,ring:{rMajor:24,rMinor:16,gapCenterDeg:40,gapDeg:60,gapAngleDeg:0},legend:{text:e=>{if(e>=1)return"Glyph level chain has been broken";const t=5e3;return["Break a chain",`Reach Glyph level ${formatInt(Math.min(player.records.bestReality.glyphLevel,t))}/${formatInt(t)}`]},angle:-45,diagonal:16,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(new Vector(650-74*Math.sqrt(.75),213),tt.enslavedGlyphLevel).trimEnd(23),fill:"#ffa337",completeWidth:6,incompleteWidth:4}},"enslaved-unlock-glyph-rarity":{visible:()=>EffarigUnlock.eternity.isUnlocked,complete:()=>{const e=strengthToRarity(player.records.bestReality.glyphStrength);return e/100},drawOrder:-1,node:{clickAction:()=>Tab.celestials.enslaved.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffa337",position:tt.enslavedGlyphRarity,ring:{rMajor:24,rMinor:16,gapCenterDeg:220,gapDeg:60,gapAngleDeg:0},legend:{text:e=>{if(e>=1)return"Glyph rarity chain has been broken";const t=100;return["Break a chain",`Reach Glyph rarity ${formatPercents(e*t/100,1)}/${formatPercents(t/100,1)}`]},angle:45,diagonal:32,horizontal:32}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.enslavedGlyphRarity,tt.enslavedGlyphLevel).trimStart(23).trimEnd(23),fill:"#ffa337",completeWidth:6,incompleteWidth:4}},"enslaved-reality":{visible:()=>EffarigUnlock.eternity.isUnlocked,complete:()=>Enslaved.isCompleted?1:Enslaved.isRunning?Currency.eternityPoints.value.pLog10()/4e3:0,node:{clickAction:()=>Tab.celestials.enslaved.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffa337",position:tt.enslavedReality,ring:{rMajor:80,rMinor:70,gapCenterDeg:195,gapDeg:200},alwaysShowLegend:!0,legend:{text:e=>{if(e>=1)return"The Nameless Ones' Reality";const t=Enslaved.isRunning?Currency.eternityPoints.value:0,i=b.E4000;return["The Nameless Ones' Reality",`Reach ${format(t,2)} / ${format(i,2)}`,"Eternity Points inside The Nameless Ones' Reality."]},angle:45,diagonal:16,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.enslavedGlyphRarity,new Vector(650+74*Math.sqrt(.75),287)).trimStart(23),fill:"#ffa337"}},"v-unlock-achievement":{visible:()=>EffarigUnlock.reality.isUnlocked,complete:()=>Achievement(151).isUnlocked?1:player.requirementChecks.infinity.noAD8?player.galaxies/800:0,drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",symbol:"⌬",symbolOffset:"2",fill:"#ffe066",position:tt.vUnlockAchievement,ring:{rMajor:20},alwaysShowLegend:!0,legend:{text:e=>{const t=800;if(e>=1)return"V's Reality";const i=player.requirementChecks.infinity.noAD8?player.galaxies:0;return["V's unlock Achievement",`Reach ${formatInt(i)} / ${formatInt(t)} Antimatter Galaxies without buying`,"8th Antimatter Dimensions in your current Infinity"]},angle:135,diagonal:60,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:LinearPath.connectCircles(tt.enslavedReality,79,tt.vUnlockAchievement,15),fill:"url(#gradEnslavedV)",completeWidth:6,incompleteWidth:4}},"v-unlock-1":{visible:()=>Achievement(151).isUnlocked||VUnlocks.vAchievementUnlock.isUnlocked,complete:()=>Xe(1),drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffe066",position:tt.vAchievement1,ring:{rMajor:8},legend:{text:e=>ze(e,1),angle:-135,diagonal:50,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.vUnlockAchievement,tt.vAchievement1),fill:"#ffe066",completeWidth:6,incompleteWidth:4}},"v-unlock-2":{visible:()=>Achievement(151).isUnlocked||VUnlocks.vAchievementUnlock.isUnlocked,complete:()=>Xe(2),drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffe066",position:tt.vAchievement2,ring:{rMajor:8},legend:{text:e=>ze(e,2),angle:-45,diagonal:30,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.vUnlockAchievement,tt.vAchievement2),fill:"#ffe066",completeWidth:6,incompleteWidth:4}},"v-unlock-3":{visible:()=>Achievement(151).isUnlocked||VUnlocks.vAchievementUnlock.isUnlocked,complete:()=>Xe(3),drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffe066",position:tt.vAchievement3,ring:{rMajor:8},legend:{text:e=>ze(e,3),angle:45,diagonal:30,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.vUnlockAchievement,tt.vAchievement3),fill:"#ffe066",completeWidth:6,incompleteWidth:4}},"v-unlock-4":{visible:()=>Achievement(151).isUnlocked||VUnlocks.vAchievementUnlock.isUnlocked,complete:()=>Xe(4),drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffe066",position:tt.vAchievement4,ring:{rMajor:8},legend:{text:e=>ze(e,4),angle:135,diagonal:30,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.vUnlockAchievement,tt.vAchievement4),fill:"#ffe066",completeWidth:6,incompleteWidth:4}},"v-unlock-5":{visible:()=>Achievement(151).isUnlocked||VUnlocks.vAchievementUnlock.isUnlocked,complete:()=>Xe(5),drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffe066",position:tt.vAchievement5,ring:{rMajor:8},legend:{text:e=>ze(e,5),angle:-135,diagonal:30,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.vUnlockAchievement,tt.vAchievement5),fill:"#ffe066",completeWidth:6,incompleteWidth:4}},"v-unlock-6":{visible:()=>Achievement(151).isUnlocked||VUnlocks.vAchievementUnlock.isUnlocked,complete:()=>Xe(6),drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffe066",position:tt.vAchievement0,ring:{rMajor:8},legend:{text:e=>ze(e,6),angle:-135,diagonal:30,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.vUnlockAchievement,tt.vAchievement0),fill:"#ffe066",completeWidth:6,incompleteWidth:4}},"v-achievement-0":{visible:()=>VUnlocks.vAchievementUnlock.isUnlocked,complete:()=>VRunUnlocks.all[0].completions/6,drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffe066",position:tt.vAchievement0,ring:{rMajor:8},legend:{text:e=>{const t=VRunUnlocks.all[0].config.name;if(e>=1)return`V-Achievement "${t}"`;const i=VRunUnlocks.all[0].completions;return["V-Achievement",`Reach ${formatInt(i)} / ${formatInt(6)} completions in ${t}.`]},angle:-135,diagonal:16,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.vAchievement5,tt.vAchievement0),fill:"#ffe066",completeWidth:6,incompleteWidth:4}},"v-achievement-1":{visible:()=>VUnlocks.vAchievementUnlock.isUnlocked,complete:()=>VRunUnlocks.all[1].completions/6,drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffe066",position:tt.vAchievement1,ring:{rMajor:8},legend:{text:e=>{const t=VRunUnlocks.all[1].config.name;if(e>=1)return`V-Achievement "${t}"`;const i=VRunUnlocks.all[1].completions;return["V-Achievement",`Reach ${formatInt(i)} / ${formatInt(6)} completions in ${t}.`]},angle:20,diagonal:16,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.vAchievement0,tt.vAchievement1),fill:"#ffe066",completeWidth:6,incompleteWidth:4}},"v-achievement-2":{visible:()=>VUnlocks.vAchievementUnlock.isUnlocked,complete:()=>VRunUnlocks.all[2].completions/6,drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffe066",position:tt.vAchievement2,ring:{rMajor:8},legend:{text:e=>{const t=VRunUnlocks.all[2].config.name;if(e>=1)return`V-Achievement "${t}"`;const i=VRunUnlocks.all[2].completions;return["V-Achievement",`Reach ${formatInt(i)} / ${formatInt(6)} completions in ${t}.`]},angle:315,diagonal:25,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.vAchievement1,tt.vAchievement2),fill:"#ffe066",completeWidth:6,incompleteWidth:4}},"v-achievement-3":{visible:()=>VUnlocks.vAchievementUnlock.isUnlocked,complete:()=>VRunUnlocks.all[3].completions/6,drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffe066",position:tt.vAchievement3,ring:{rMajor:8},legend:{text:e=>{const t=VRunUnlocks.all[3].config.name;if(e>=1)return`V-Achievement "${t}"`;const i=VRunUnlocks.all[3].completions;return["V-Achievement",`Reach ${formatInt(i)} / ${formatInt(6)} completions in ${t}.`]},angle:135,diagonal:25,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.vAchievement2,tt.vAchievement3),fill:"#ffe066",completeWidth:6,incompleteWidth:4}},"v-achievement-4":{visible:()=>VUnlocks.vAchievementUnlock.isUnlocked,complete:()=>VRunUnlocks.all[4].completions/6,drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffe066",position:tt.vAchievement4,ring:{rMajor:8},legend:{text:e=>{const t=VRunUnlocks.all[4].config.name;if(e>=1)return`V-Achievement "${t}"`;const i=VRunUnlocks.all[4].completions;return["V-Achievement",`Reach ${formatInt(i)} / ${formatInt(6)} completions in ${t}.`]},angle:60,diagonal:25,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.vAchievement3,tt.vAchievement4),fill:"#ffe066",completeWidth:6,incompleteWidth:4}},"v-achievement-5":{visible:()=>VUnlocks.vAchievementUnlock.isUnlocked,complete:()=>VRunUnlocks.all[5].completions/6,drawOrder:-1,node:{clickAction:()=>Tab.celestials.v.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#ffe066",position:tt.vAchievement5,ring:{rMajor:8},legend:{text:e=>{const t=VRunUnlocks.all[5].config.name;if(e>=1)return`V-Achievement "${t}"`;const i=VRunUnlocks.all[5].completions;return["V-Achievement",`Reach ${formatInt(i)} / ${formatInt(6)} completions in ${t}.`]},angle:260,diagonal:30,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.vAchievement4,tt.vAchievement5),fill:"#ffe066",completeWidth:6,incompleteWidth:4}},ra:{visible:()=>VUnlocks.raUnlock.isUnlocked,complete:()=>VUnlocks.raUnlock.isUnlocked?1:0,node:{clickAction:()=>Tab.celestials.ra.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",symbol:"",symbolOffset:"2",fill:"#9063de",position:tt.raReality,ring:{rMajor:24},alwaysShowLegend:!0,legend:{text:"Ra's Reality",angle:230,diagonal:85,horizontal:16}}},"teresa-pet":{visible:()=>VUnlocks.raUnlock.isUnlocked,complete:()=>VUnlocks.raUnlock.isUnlocked?1:0,drawOrder:-1,node:{clickAction:()=>Tab.celestials.ra.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#9063de",isStacked:!0,position:tt.raPetTeresa,ring:{rMajor:12},legend:{text:()=>{const e=Ra.pets.teresa.level;return 25===e?"Ra's Teresa Memories have all been returned":["Ra's Teresa Memory level",`${formatInt(e)} / ${formatInt(25)}`]},angle:142,diagonal:85,horizontal:16}},connector:{pathStart:.05,pathEnd:.95,path:new LinearPath(tt.raReality,tt.raPetTeresa),fill:"#9063de",completeWidth:6,incompleteWidth:4}},"teresa-pet-to-teresa":{visible:()=>VUnlocks.raUnlock.isUnlocked,complete:()=>Ra.pets.teresa.level/25,drawOrder:-1,connector:{pathStart:.05,pathEnd:.7,path:new LinearPath(tt.raPetTeresa,tt.teresa),fill:"url(#gradRaTeresa)",completeWidth:6,incompleteWidth:4}},"effarig-pet":{visible:()=>VUnlocks.raUnlock.isUnlocked,complete:()=>Ra.pets.teresa.level/8,drawOrder:-1,node:{clickAction:()=>Tab.celestials.ra.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#9063de",isStacked:!0,position:tt.raPetEffarig,ring:{rMajor:12},legend:{text:e=>{const t=Ra.pets.teresa.level,i=Ra.pets.effarig.level;return e<1?`Ra's Teresa Memory level ${t} / ${formatInt(8)}`:25===i?"Ra's Effarig Memories have all been returned":["Ra's Effarig Memory level",`${formatInt(i)} / ${formatInt(25)}`]},angle:142,diagonal:85,horizontal:16}},connector:{pathStart:.05,pathEnd:.95,path:new LinearPath(tt.raReality,tt.raPetEffarig),fill:"#9063de",completeWidth:6,incompleteWidth:4}},"effarig-pet-to-effarig":{visible:()=>Ra.unlocks.effarigUnlock.isUnlocked,complete:()=>Ra.pets.effarig.level/25,drawOrder:-1,connector:{pathStart:.05,pathEnd:.6,path:new LinearPath(tt.raPetEffarig,tt.effarigNode),fill:"url(#gradRaEffarig)",completeWidth:6,incompleteWidth:4}},"enslaved-pet":{visible:()=>Ra.unlocks.effarigUnlock.isUnlocked,complete:()=>Ra.pets.effarig.level/8,drawOrder:-1,node:{clickAction:()=>Tab.celestials.ra.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#9063de",isStacked:!0,position:tt.raPetEnslaved,ring:{rMajor:12},legend:{text:e=>{const t=Ra.pets.effarig.level,i=Ra.pets.enslaved.level;return e<1?`Ra's Effarig Memory level ${t} / ${formatInt(8)}`:25===i?"Ra's Nameless Memories have all been returned":["Ra's Nameless Memory level",`${formatInt(i)} / ${formatInt(25)}`]},angle:142,diagonal:85,horizontal:16}},connector:{pathStart:.05,pathEnd:.95,path:new LinearPath(tt.raReality,tt.raPetEnslaved),fill:"#9063de",completeWidth:6,incompleteWidth:4}},"enslaved-pet-to-enslaved":{visible:()=>Ra.unlocks.enslavedUnlock.isUnlocked,complete:()=>Ra.pets.enslaved.level/25,drawOrder:-1,connector:{pathStart:.05,pathEnd:.55,path:new LinearPath(tt.raPetEnslaved,tt.enslavedReality),fill:"url(#gradRaEnslaved)",completeWidth:6,incompleteWidth:4}},"v-pet":{visible:()=>Ra.unlocks.enslavedUnlock.isUnlocked,complete:()=>Ra.pets.enslaved.level/8,drawOrder:-1,node:{clickAction:()=>Tab.celestials.ra.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"#9063de",isStacked:!0,position:tt.raPetV,ring:{rMajor:12},legend:{text:e=>{const t=Ra.pets.enslaved.level,i=Ra.pets.v.level;return e<1?`Ra's Nameless Memory level ${t} / ${formatInt(8)}`:25===i?"Ra's V Memories have all been returned":["Ra's V Memory level",`${formatInt(i)} / ${formatInt(25)}`]},angle:142,diagonal:85,horizontal:16}},connector:{pathStart:.05,pathEnd:.95,path:new LinearPath(tt.raReality,tt.raPetV),fill:"#9063de",completeWidth:6,incompleteWidth:4}},"v-pet-to-v":{visible:()=>Ra.unlocks.vUnlock.isUnlocked,complete:()=>Ra.pets.v.level/25,drawOrder:-1,connector:{pathStart:.05,pathEnd:.42,path:new LinearPath(tt.raPetV,tt.vUnlockAchievement),fill:"url(#gradRaV)",completeWidth:6,incompleteWidth:4}},"ra-ring-1":{visible:()=>VUnlocks.raUnlock.isUnlocked,complete:()=>VUnlocks.raUnlock.isUnlocked?1:0,node:{incompleteClass:"c-celestial-nav__test-incomplete",fill:"#9063de",position:tt.raReality,ring:{rMajor:90,rMinor:80,gapCenterDeg:74,gapDeg:268}}},"ra-ring-2":{visible:()=>VUnlocks.raUnlock.isUnlocked,complete:()=>VUnlocks.raUnlock.isUnlocked?1:0,node:{incompleteClass:"c-celestial-nav__test-incomplete",fill:"#9063de",position:tt.raReality,ring:{rMajor:90,rMinor:80,gapCenterDeg:161,gapDeg:318}}},"ra-ring-3":{visible:()=>VUnlocks.raUnlock.isUnlocked,complete:()=>VUnlocks.raUnlock.isUnlocked?1:0,node:{incompleteClass:"c-celestial-nav__test-incomplete",fill:"#9063de",position:tt.raReality,ring:{rMajor:90,rMinor:80,gapCenterDeg:231,gapDeg:301}}},"ra-ring-4":{visible:()=>VUnlocks.raUnlock.isUnlocked,complete:()=>VUnlocks.raUnlock.isUnlocked?1:0,node:{incompleteClass:"c-celestial-nav__test-incomplete",fill:"#9063de",position:tt.raReality,ring:{rMajor:90,rMinor:80,gapCenterDeg:293,gapDeg:334}}},"ra-ring-5":{visible:()=>VUnlocks.raUnlock.isUnlocked,complete:()=>VUnlocks.raUnlock.isUnlocked?1:0,node:{incompleteClass:"c-celestial-nav__test-incomplete",fill:"#9063de",position:tt.raReality,ring:{rMajor:90,rMinor:80,gapCenterDeg:-14,gapDeg:316}}},"laitela-unlock":{visible:()=>Ra.unlocks.vUnlock.isUnlocked,complete:()=>DarkMatterDimension(1).unlockUpgrade.canBeBought||Laitela.isUnlocked?1:MachineHandler.isIMUnlocked?player.requirementChecks.reality.maxID1.neq(0)?.5:.5+.5*Math.clampMax(.999,player.antimatter.exponent/15e11):Math.clampMax(.5,Currency.realityMachines.value.pLog10()/MachineHandler.baseRMCap.exponent),drawOrder:-1,node:{clickAction:()=>Tab.celestials.laitela.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",symbol:"ᛝ",symbolScale:1.6,symbolOffset:"0.6",fill:"white",position:tt.laitelaFirstCenter,ring:{rMajor:15},alwaysShowLegend:!0,legend:{text:e=>{const t="Lai'tela's Reality";if(e>=1)return[t];if(!MachineHandler.isIMUnlocked){const e=Currency.realityMachines.value,i=MachineHandler.baseRMCap;return[t,"The limits of Reality Machines bind you",`${format(e)} / ${format(i)}`]}const i=player.requirementChecks.reality.maxID1.neq(0);if(i)return[t,"The Power of Infinity Dimensions","blocks your path."];const a=Currency.antimatter.value,n=b.E1_5E12;return[t,`${format(a)} / ${format(n)}`]},angle:260,diagonal:15,horizontal:8}},connector:{pathStart:.05,pathEnd:1,path:new LinearPath(tt.raReality,tt.laitelaFirstCenter),fill:"url(#gradRaLaitela)",completeWidth:6,incompleteWidth:4}},"laitela-2nd-dim":{visible:()=>Laitela.isUnlocked,complete:()=>{const e=DarkMatterDimension(2).unlockUpgrade;return e.canBeBought||e.isBought?1:e.isAvailableForPurchase?e.currency.value/e.cost:Laitela.difficultyTier<1?0:30/player.celestials.laitela.fastestCompletion},node:{clickAction:()=>Tab.celestials.laitela.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"white",position:tt.laitelaFirstLeft,ring:{rMajor:8},legend:{text:e=>{const t="2nd Dark Matter Dimension",i=DarkMatterDimension(2);if(i.isUnlocked)return[t];const a=i.adjustedStartingCost;if(e>=1)return[t,`Dark Matter ${format(Currency.darkMatter.max.min(a),i.isUnlocked?0:2)} / ${format(a)}`];const n=i.unlockUpgrade;return n.isAvailableForPurchase?[t,`Imaginary Machines\n ${format(Math.min(n.currency.value,n.cost),n.canBeBought?1:2)}\n / ${format(n.cost,1)}`]:player.celestials.laitela.fastestCompletion>30&&Laitela.difficultyTier<0?[t,`Beat Lai'tela's Reality in less that ${format(30)} seconds`]:[t,"Beat Lai'tela's Reality"]},angle:135,diagonal:30,horizontal:16}},connector:{pathStart:.17,pathEnd:.89,path:new LinearPath(tt.laitelaFirstCenter,tt.laitelaFirstLeft),fill:"white",completeWidth:6,incompleteWidth:4}},"laitela-singularity":{visible:()=>Laitela.isUnlocked,complete:()=>Currency.singularities.gte(1)?1:Math.clampMax(.999,Currency.darkEnergy.value/Singularity.cap),node:{clickAction:()=>Tab.celestials.laitela.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"white",position:tt.laitelaFirstRight,ring:{rMajor:8},legend:{text:e=>{if(e>=1)return["Obtain a Singularity"];const t=Currency.darkEnergy.value,i=Singularity.cap;return["Condense your Dark Energy","Into a Singularity",`${format(t)} / ${format(i)}`]},angle:45,diagonal:65,horizontal:16}},connector:{pathStart:.17,pathEnd:.89,path:new LinearPath(tt.laitelaFirstCenter,tt.laitelaFirstRight),fill:"white",completeWidth:6,incompleteWidth:4}},"laitela-3rd-dim":{visible:()=>DarkMatterDimension(2).isUnlocked&&Currency.singularities.gte(1),complete:()=>{const e=DarkMatterDimension(3).unlockUpgrade;return e.canBeBought||e.isBought?1:e.isAvailableForPurchase?e.currency.value/e.cost:player.auto.singularity.isActive?Math.clampMax(.999,Singularity.singularitiesGained/20):.5},node:{clickAction:()=>Tab.celestials.laitela.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"white",position:tt.laitelaSecondCenter,ring:{rMajor:15},legend:{text:e=>{const t="3rd Dark Matter Dimension",i=DarkMatterDimension(3);if(i.isUnlocked)return[t];const a=i.adjustedStartingCost;if(e>=1)return[t,`Dark Matter ${format(Currency.darkMatter.max.min(a),i.isUnlocked?0:2)} / ${format(a)}`];const n=i.unlockUpgrade;return n.isAvailableForPurchase?[t,`Imaginary Machines\n ${format(Math.min(n.currency.value,n.cost),n.canBeBought?0:2)}\n / ${format(n.cost)}`]:player.auto.singularity.isActive?[t,`Automatically Condense ${format(20)} Singularities at once`,`${format(Math.clampMax(Singularity.singularitiesGained,20))} / ${format(20)}`]:[t,"Unlock Automatic Singularities",`${format(Currency.singularities.value)} / ${format(SingularityMilestone.autoCondense.start)}`]},angle:15,diagonal:30,horizontal:16}},connector:[{pathStart:.1,pathEnd:.89,path:new LinearPath(tt.laitelaFirstLeft,tt.laitelaSecondCenter),fill:"white",completeWidth:6,incompleteWidth:4},{pathStart:.1,pathEnd:.89,path:new LinearPath(tt.laitelaFirstRight,tt.laitelaSecondCenter),fill:"white",completeWidth:6,incompleteWidth:4}]},"laitela-4th-dim":{visible:()=>DarkMatterDimension(3).isUnlocked,complete:()=>{const e=DarkMatterDimension(4).unlockUpgrade;return e.canBeBought||e.isBought?1:e.isAvailableForPurchase?e.currency.value/e.cost:(Replicanti.galaxies.total+player.galaxies+player.dilation.totalTachyonGalaxies)/8e4},node:{clickAction:()=>Tab.celestials.laitela.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"white",position:tt.laitelaSecondLeft,ring:{rMajor:8},legend:{text:e=>{const t="4th Dark Matter Dimension",i=DarkMatterDimension(4);if(i.isUnlocked)return[t];const a=i.adjustedStartingCost;if(e>=1)return[t,`Dark Matter ${format(Currency.darkMatter.max.min(a),i.isUnlocked?0:2)} / ${format(a)}`];const n=i.unlockUpgrade;if(n.isAvailableForPurchase)return[t,`Imaginary Machines\n ${format(Math.min(n.currency.value,n.cost),n.canBeBought?1:2)}\n / ${format(n.cost,1)}`];const s=Replicanti.galaxies.total+player.galaxies+player.dilation.totalTachyonGalaxies;return[t,`Have ${format(8e4)} total Galaxies`,`${format(Math.clampMax(s,8e4))} / ${format(8e4)}`]},angle:225,diagonal:30,horizontal:16}},connector:{pathStart:.11,pathEnd:.89,path:new LinearPath(tt.laitelaSecondCenter,tt.laitelaSecondLeft),fill:"white",completeWidth:6,incompleteWidth:4}},"laitela-annihilation":{visible:()=>DarkMatterDimension(4).isUnlocked,complete:()=>{const e=ImaginaryUpgrade(19);return e.canBeBought||e.isBought?1:e.isAvailableForPurchase?Currency.imaginaryMachines.value/e.cost:e.isPossible?Tickspeed.continuumValue/385e4:0},node:{clickAction:()=>Tab.celestials.laitela.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"white",position:tt.laitelaSecondRight,ring:{rMajor:8},legend:{text:()=>["Annihilate your","Dark Matter Dimensions"],angle:315,diagonal:30,horizontal:16}},connector:{pathStart:.11,pathEnd:.89,path:new LinearPath(tt.laitelaSecondCenter,tt.laitelaSecondRight),fill:"white",completeWidth:6,incompleteWidth:4}},"laitela-destabilization":{visible:()=>DarkMatterDimension(4).isUnlocked&&ImaginaryUpgrade(19).isBought,complete:()=>Laitela.difficultyTier/8,node:{clickAction:()=>Tab.celestials.laitela.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",symbolScale:1.6,symbolOffset:"0.6",fill:"white",position:tt.laitelaThirdCenter,ring:{rMajor:15},legend:{text:e=>e<1?["Destabilize Lai'tela's Reality","To the point where you cannot","use any Dimensions",`${format(Laitela.difficultyTier)} / ${format(8)} Dimensions disabled`]:["Completely destabilized","Lai'tela's Reality"],angle:180,diagonal:15,horizontal:8}},connector:[{pathStart:.11,pathEnd:.83,path:new LinearPath(tt.laitelaSecondLeft,tt.laitelaThirdCenter),fill:"white",completeWidth:6,incompleteWidth:4},{pathStart:.11,pathEnd:.83,path:new LinearPath(tt.laitelaSecondRight,tt.laitelaThirdCenter),fill:"white",completeWidth:6,incompleteWidth:4}]},"pelle-unlock":{visible:()=>Laitela.difficultyTier>4,complete:()=>{if(Pelle.isUnlocked)return 1;const e=Math.clampMax(je(Math.log10(Currency.imaginaryMachines.value)/Math.log10(16e14)),1);let t=Laitela.isRunning?Math.min(Currency.eternityPoints.value.log10()/4e3,.99):0;return 8!==Laitela.difficultyTier||Glyphs.activeWithoutCompanion.length>1?t=0:ImaginaryUpgrade(25).isAvailableForPurchase&&(t=1),(e+t)/2},node:{clickAction:()=>Tab.celestials.pelle.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",fill:"crimson",position:tt.pelleUnlock,ring:{rMajor:8},legend:{text:e=>{if(1===e)return["Unlock Pelle","The Celestial of Antimatter"];let t=`${format(Currency.eternityPoints.value)} / ${format("1e4000")} EP`;return!Laitela.isRunning||8!==Laitela.difficultyTier||Glyphs.activeWithoutCompanion.length>1?t="Lai'tela's Reality is still intact":ImaginaryUpgrade(25).isAvailableForPurchase&&(t="Lai'tela's Reality has been destroyed"),["Unlock Pelle","The Celestial of Antimatter",`${format(Currency.imaginaryMachines.value,2)} / ${format(16e14,2)} iM`,t]},angle:105,diagonal:90,horizontal:10}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.laitelaThirdCenter,tt.pelleUnlock),fill:"url(#gradLaitelaPelle)",completeWidth:6,incompleteWidth:4}},"pelle-doomed-requirement":{visible:()=>Pelle.isUnlocked,complete:()=>{if(Pelle.isDoomed)return 1;const e=Achievements.prePelleRows.countWhere((e=>e.every((e=>e.isUnlocked))))/Achievements.prePelleRows.length,t=AlchemyResources.all.countWhere((e=>e.capped))/AlchemyResources.all.length;return(je(e)+je(t))/2},node:{clickAction:()=>Tab.celestials.pelle.show(!0),incompleteClass:"c-celestial-nav__test-incomplete",symbol:"♅",symbolOffset:"1.6",fill:"crimson",position:tt.pelleAchievementRequirement,ring:{rMajor:20},forceLegend:()=>Pelle.isUnlocked&&!Pelle.hasGalaxyGenerator,legend:{text:e=>{if(e>=1)return Pelle.isDoomed?"Doomed Reality":"Doom your Reality";const t=[Achievements.prePelleRows.countWhere((e=>e.every((e=>e.isUnlocked)))),Achievements.prePelleRows.length],i=[AlchemyResources.all.countWhere((e=>e.capped)),AlchemyResources.all.length];return[`Complete ${formatInt(t[0])} / ${formatInt(t[1])} rows of Achievements`,`Fill ${formatInt(i[0])} / ${formatInt(i[1])} Alchemy Resources`]},angle:290,diagonal:40,horizontal:16}},connector:{pathStart:0,pathEnd:1,path:new LinearPath(tt.pelleUnlock,tt.pelleAchievementRequirement),fill:"crimson",completeWidth:6,incompleteWidth:4}}},rt),{},{"pelle-galaxy-generator-start-node":{visible:()=>Pelle.hasGalaxyGenerator,complete:()=>Pelle.hasGalaxyGenerator?1:0,node:{incompleteClass:"c-celestial-nav__test-incomplete",fill:"black",position:tt.pelleAchievementRequirement,ring:{rMajor:20},alwaysShowLegend:!0,legend:{text:()=>["Galaxy Generator:",`${format(GalaxyGenerator.generatedGalaxies,2)} / ${format(GalaxyGenerator.generationCap,2)} Galaxies`],angle:290,diagonal:40,horizontal:16}}},"pelle-galaxy-generator-sigil-mask":{visible:()=>Pelle.hasGalaxyGenerator,complete:()=>Pelle.hasGalaxyGenerator?1:0,node:{clickAction:()=>Tab.celestials.pelle.show(!0),position:tt.pelleAchievementRequirement,ring:{rMajor:20}}},"pelle-galaxy-generator-path":{visible:()=>Pelle.hasGalaxyGenerator,complete:()=>{const e=PelleRifts.all.map((e=>e.config.galaxyGeneratorThreshold)),t=e.countWhere((e=>GalaxyGenerator.generatedGalaxies>=e));if(5===t)return 1;const i=e.filter((e=>GalaxyGenerator.generatedGalaxies>=e)).max(),a=e.filter((e=>GalaxyGenerator.generatedGalaxiesPelle.hasGalaxyGenerator&&!Number.isFinite(GalaxyGenerator.generationCap),complete:()=>Math.clamp((GalaxyGenerator.generatedGalaxies-1e10)/2e11,1e-6,1),connector:function(){const e=.5*Math.PI,t=e+10*Math.PI,i=LogarithmicSpiral.fromPolarEndpoints(Ke(0,0),e,150,t,1250);return{pathStart:e,pathEnd:t,path:i,pathPadStart:0,pathPadEnd:0,drawOrder:et.CANVAS_OVERLAY,fill:"#00bbbb",noBG:!0}}()}});function lt(){const e=PelleRifts.all.map((e=>Math.clamp(e.realPercentage,0,1))).min(),t=Math.log10(1+GalaxyGenerator.generatedGalaxies)/11;return Math.clampMax(.2*e+.8*t,1)}const ct={visible:()=>PelleRifts.all.map((e=>Math.clamp(e.realPercentage,0,1))).min()>0,center:new Vector(400,300),size:400,color:"#00ffff",canvasLayer:et.NODE_BG-500};function ut(e,t){const i=ct;return new Vector(i.center.x+i.size*e,i.center.y+i.size*t)}function dt(e){return new Vector(2*ct.center.x-e.x,e.y)}function ht(e,t,i,a){let n,s,r,o;switch(e){case"edge":n=t.start,s=new LinearPath(t.start,t.end),r=0,o=1;break;case"circle":n=t.center,s=LogarithmicSpiral.fromPolarEndpoints(t.center,0,t.radius*ct.size,1,t.radius*ct.size),r=t.initAngle,o=t.finalAngle;break;default:throw Error("Unrecognized shape in sigil specification")}return{visible:()=>ct.visible()&<()>=i.init,complete:()=>Math.clamp((lt()-i.init)/i.weight,0,1),att:t,fill:i,node:{position:n,ring:{rMajor:0}},connector:{pathStart:r,pathEnd:o,drawOrder:ct.canvasLayer,path:s,fill:null!==a&&void 0!==a?a:ct.color,completeWidth:ct.size/20,noBG:!0}}}const mt=Object.freeze({circTop:ut(.333,-.41),circMid:ut(.5,.22),circBot:ut(0,.43),topC:ut(0,-.4),top1:ut(.08,-.27),top2:ut(.18,-.35),top3:ut(.28,-.35),mid:ut(.08,.05),arm1:ut(.5,.05),arm2:ut(.5,-.15),arm3:ut(.4,-.15),lowC:ut(0,.22),low1:ut(.42,.22),botC:ut(0,.31),bot1:ut(.12,.43),bot2:ut(.28,.43)}),pt={botCircR:ht("circle",{center:mt.circBot,radius:.12,initAngle:.5*Math.PI,finalAngle:-.5*Math.PI},{init:0,weight:.2}),botH:ht("edge",{start:mt.bot1,end:mt.bot2},{init:.1,weight:.1}),lowH:ht("edge",{start:mt.lowC,end:mt.low1},{init:.3,weight:.3}),circUp:ht("circle",{center:mt.circMid,radius:.08,initAngle:Math.PI,finalAngle:0},{init:.6,weight:.1}),circDown:ht("circle",{center:mt.circMid,radius:.08,initAngle:Math.PI,finalAngle:2*Math.PI},{init:.6,weight:.1}),vert2:ht("edge",{start:mt.bot2,end:mt.top3},{init:.2,weight:.7}),vertC:ht("edge",{start:mt.botC,end:mt.lowC},{init:.2,weight:.1}),vertDiag1:ht("edge",{start:mt.lowC,end:mt.mid},{init:.3,weight:.1}),arm1:ht("edge",{start:mt.mid,end:mt.arm1},{init:.4,weight:.2}),arm2:ht("edge",{start:mt.arm1,end:mt.arm2},{init:.6,weight:.1}),arm3:ht("edge",{start:mt.arm2,end:mt.arm3},{init:.7,weight:.1}),vert1:ht("edge",{start:mt.mid,end:mt.top1},{init:.4,weight:.3}),vertDiag2:ht("edge",{start:mt.top1,end:mt.topC},{init:.7,weight:.1}),vertDiag3:ht("edge",{start:mt.top1,end:mt.top2},{init:.7,weight:.1}),topH:ht("edge",{start:mt.top2,end:mt.top3},{init:.8,weight:.1}),circTopUp:ht("circle",{center:mt.circTop,radius:.08,initAngle:.75*Math.PI,finalAngle:1.75*Math.PI},{init:.9,weight:.1}),circTopDown:ht("circle",{center:mt.circTop,radius:.08,initAngle:.75*Math.PI,finalAngle:-.25*Math.PI},{init:.9,weight:.1})};for(const V of Object.keys(pt)){const e=pt[V];e.connector.path instanceof LinearPath?pt[`${V}Ref`]=ht("edge",{start:dt(e.att.start),end:dt(e.att.end)},e.fill):e.connector.path instanceof LogarithmicSpiral&&(pt[`${V}Ref`]=ht("circle",{center:dt(e.att.center),radius:e.att.radius,initAngle:Math.PI-e.att.initAngle,finalAngle:Math.PI-e.att.finalAngle},e.fill))}const yt=16;for(let V=0;V`final-sigil-${t}`),(e=>e)),gt={visible:()=>Pelle.hasGalaxyGenerator,center:Ke(0,0),size:20,color:"#00ffff",canvasLayer:et.CANVAS_OVERLAY};function vt(e,t,i,a){let n,s,r,o;switch(e){case"circle":n=t.center,s=LogarithmicSpiral.fromPolarEndpoints(t.center,0,t.radius*gt.size,1,t.radius*gt.size),r=t.initAngle,o=t.finalAngle;break;case"arc":n=t.center,r=t.initAngle,o=t.finalAngle,s=LogarithmicSpiral.fromPolarEndpoints(t.center,r,t.initRadius*gt.size,o,t.finalRadius*gt.size);break;default:throw Error("Unrecognized shape in sigil specification")}return{visible:()=>gt.visible(),complete:()=>1,node:{position:n,ring:{rMajor:gt.size*i.thickness},bgDrawOrder:gt.canvasLayer+i.layer},connector:{pathStart:r,pathEnd:o,drawOrder:gt.canvasLayer+i.layer,path:s,fill:null!==a&&void 0!==a?a:gt.color,completeWidth:gt.size*i.thickness,noBG:!0}}}const bt={disc:vt("circle",{center:gt.center,radius:.2,initAngle:0,finalAngle:6.28},{thickness:.15,layer:1},"#88ffff"),glow:vt("circle",{center:gt.center,radius:.125,initAngle:0,finalAngle:6.28},{thickness:.05,layer:2},"white")},Et=10;for(let V=0;V`galaxy-icon-${t}`),(e=>e)),wt={power:{id:ALCHEMY_RESOURCE.POWER,name:"Power",symbol:"Ω",isBaseResource:!0,effect:e=>{let t=1+e/2e5;return t},tier:1,uiOrder:1,unlockedAt:2,description:"provides a power to Antimatter Dimensions",formatEffect:e=>`Antimatter Dimension multipliers ${formatPow(e,4,4)}`},infinity:{id:ALCHEMY_RESOURCE.INFINITY,name:"Infinity",symbol:"∞",isBaseResource:!0,effect:e=>{let t=1+e/2e5;return t},tier:1,uiOrder:2,unlockedAt:3,description:"provides a power to Infinity Dimensions",formatEffect:e=>`Infinity Dimension multipliers ${formatPow(e,4,4)}`},time:{id:ALCHEMY_RESOURCE.TIME,name:"Time",symbol:"Δ",isBaseResource:!0,effect:e=>{let t=1+e/2e5;return t},tier:1,uiOrder:3,unlockedAt:4,description:"provides a power to Time Dimensions",formatEffect:e=>`Time Dimension multipliers ${formatPow(e,4,4)}`},replication:{id:ALCHEMY_RESOURCE.REPLICATION,name:"Replication",symbol:"Ξ",isBaseResource:!0,effect:e=>{let t=Decimal.pow10(e/1e3);return t},tier:1,uiOrder:4,unlockedAt:5,description:"increases Replication speed",formatEffect:e=>`Replication speed is increased by ${formatX(e,2,2)}`},dilation:{id:ALCHEMY_RESOURCE.DILATION,name:"Dilation",symbol:"Ψ",isBaseResource:!0,effect:e=>{let t=Decimal.pow10(e/2e3);return t},tier:1,uiOrder:5,unlockedAt:6,description:"increases Dilated Time production",formatEffect:e=>`Dilated Time production is increased by ${formatX(e,2,2)}`},cardinality:{id:ALCHEMY_RESOURCE.CARDINALITY,name:"Cardinality",symbol:"α",isBaseResource:!1,effect:e=>{let t=1+e/2e4;return 1+.2/t},tier:2,uiOrder:3,unlockedAt:8,description:"reduces Replicanti slowdown when above the cap",formatEffect:e=>`Replicanti interval increases slower ${formatX(1.2,1,1)} ➜\n ${formatX(e,4,4)} per ${format(Number.MAX_VALUE,2)}`,reagents:[{resource:ALCHEMY_RESOURCE.TIME,amount:8},{resource:ALCHEMY_RESOURCE.REPLICATION,amount:7}]},eternity:{id:ALCHEMY_RESOURCE.ETERNITY,name:"Eternity",symbol:"τ",isBaseResource:!1,effect:e=>{let t=1+e/15e3;return t},tier:2,uiOrder:2,unlockedAt:9,description:"provides a power to Eternity generation",formatEffect:e=>`Eternity generation ${formatPow(e,4,4)}`,reagents:[{resource:ALCHEMY_RESOURCE.TIME,amount:11},{resource:ALCHEMY_RESOURCE.INFINITY,amount:4}]},dimensionality:{id:ALCHEMY_RESOURCE.DIMENSIONALITY,name:"Dimensionality",symbol:"ρ",isBaseResource:!1,effect:e=>{let t=Decimal.pow10(5*e);return t},tier:2,uiOrder:1,unlockedAt:10,description:"provides a large multiplier to all Dimensions",formatEffect:e=>`All Dimensions ${formatX(e)}`,reagents:[{resource:ALCHEMY_RESOURCE.POWER,amount:10},{resource:ALCHEMY_RESOURCE.INFINITY,amount:5}]},inflation:{id:ALCHEMY_RESOURCE.INFLATION,name:"Inflation",symbol:"λ",isBaseResource:!1,effect:e=>{let t=e;return Decimal.pow10(6e9-3e5*t)},tier:2,uiOrder:5,unlockedAt:11,description:"provides an additional power for very large multipliers",formatEffect:e=>`All Antimatter Dimension multipliers are ${formatPow(1.05,2,2)}\n if they are above ${format(e)} `,reagents:[{resource:ALCHEMY_RESOURCE.POWER,amount:9},{resource:ALCHEMY_RESOURCE.DILATION,amount:6}]},alternation:{id:ALCHEMY_RESOURCE.ALTERNATION,name:"Alternation",symbol:"ω",isBaseResource:!1,effect:e=>{let t=e/2e3;return t/100},tier:2,uiOrder:4,unlockedAt:12,description:"increases the strength of Tachyon Galaxies based on Replicanti",formatEffect:e=>`Tachyon Galaxies are ${formatPercents(e,2,2)} stronger\n per ${format(b.E1E6)} Replicanti`,reagents:[{resource:ALCHEMY_RESOURCE.REPLICATION,amount:5},{resource:ALCHEMY_RESOURCE.DILATION,amount:10}]},effarig:{id:ALCHEMY_RESOURCE.EFFARIG,name:"Effarig",symbol:"Ϙ",isBaseResource:!0,effect:e=>{let t=Math.pow(10,e/2500);return t},tier:1,uiOrder:1.5,unlockedAt:7,description:"increases Relic Shard gain",formatEffect:e=>`Relic Shard gain is multiplied ${formatX(e,2,2)}`},synergism:{id:ALCHEMY_RESOURCE.SYNERGISM,name:"Synergism",symbol:"π",isBaseResource:!1,effect:e=>{let t=1.3*Math.sqrt(e/25e3),i=.3+t;return Achievement(175).isUnlocked?i:Math.min(i,1)},tier:3,uiOrder:2,unlockedAt:13,description:"increases the yield of Alchemy Reactions",formatEffect(e){return`Alchemy Reaction efficiency ${formatPercents(.3)} ➜ ${formatPercents(e,2,2)}\n ${!Achievement(175).isUnlocked&&e>=1?" (Capped)":""}`},reagents:[{resource:ALCHEMY_RESOURCE.EFFARIG,amount:3},{resource:ALCHEMY_RESOURCE.REPLICATION,amount:16},{resource:ALCHEMY_RESOURCE.INFINITY,amount:14}]},momentum:{id:ALCHEMY_RESOURCE.MOMENTUM,name:"Momentum",symbol:"μ",isBaseResource:!1,effect:e=>{let t=1+e/125e3;return t},tier:3,uiOrder:3,unlockedAt:15,description:"provides a power to all Dimensions that permanently grows over time",formatEffect:e=>`All Dimensions ${formatPow(Ra.momentumValue,4,4)}, increasing by\n ${format(.005*Achievement(175).effectOrDefault(1),3,3)}\n per real-time hour after the resource is unlocked, up to a maximum of ${formatPow(e,4,4)}`,reagents:[{resource:ALCHEMY_RESOURCE.EFFARIG,amount:11},{resource:ALCHEMY_RESOURCE.POWER,amount:4},{resource:ALCHEMY_RESOURCE.TIME,amount:20}]},decoherence:{id:ALCHEMY_RESOURCE.DECOHERENCE,name:"Decoherence",symbol:"ξ",isBaseResource:!1,effect:e=>{let t=15*Math.sqrt(e/25e3);return t/100},tier:3,uiOrder:4,unlockedAt:14,description:"gives all basic Alchemy Resources upon refinement",formatEffect:e=>`Refined Glyphs also give ${formatPercents(e,2)} of their value to all other base resources`,reagents:[{resource:ALCHEMY_RESOURCE.EFFARIG,amount:13},{resource:ALCHEMY_RESOURCE.ALTERNATION,amount:8}]},exponential:{id:ALCHEMY_RESOURCE.EXPONENTIAL,name:"Exponential",symbol:"Γ",isBaseResource:!1,effect:e=>{let t=10*Math.pow(e/1e4,2);return t},tier:4,uiOrder:2,unlockedAt:18,description:"multiplies Infinity Points based on Replicanti",formatEffect:e=>`Infinity Points multiplied by Replicanti${formatPow(e,2,3)}`,reagents:[{resource:ALCHEMY_RESOURCE.INFLATION,amount:18},{resource:ALCHEMY_RESOURCE.SYNERGISM,amount:3}]},force:{id:ALCHEMY_RESOURCE.FORCE,name:"Force",symbol:"Φ",isBaseResource:!1,effect:e=>{let t=5*e;return t},tier:4,uiOrder:2,unlockedAt:17,description:"multiplies Antimatter Dimensions based on Reality Machines",formatEffect:e=>`Multiply Antimatter Dimensions by Reality Machines${formatPow(e,2,2)}`,reagents:[{resource:ALCHEMY_RESOURCE.DIMENSIONALITY,amount:7},{resource:ALCHEMY_RESOURCE.MOMENTUM,amount:8}]},uncountability:{id:ALCHEMY_RESOURCE.UNCOUNTABILITY,name:"Uncountability",symbol:"Θ",isBaseResource:!1,effect:e=>{let t=BreakInfinityUpgrade.slowestChallengeMult.chargedEffect.isEffectActive?Math.pow(Ra.pets.teresa.level,.5):1,i=Math.pow(160*Math.sqrt(e/25e3),t);return i},tier:4,uiOrder:3,unlockedAt:19,description:"passively generates Realities and Perk Points",formatEffect:e=>`Generate ${format(e,2,2)} Realities and Perk Points per second`,reagents:[{resource:ALCHEMY_RESOURCE.INFINITY,amount:20},{resource:ALCHEMY_RESOURCE.EFFARIG,amount:6},{resource:ALCHEMY_RESOURCE.CARDINALITY,amount:16}]},boundless:{id:ALCHEMY_RESOURCE.BOUNDLESS,name:"Boundless",symbol:"Π",isBaseResource:!1,effect:e=>{let t=e/800;return t/100},tier:4,uiOrder:1,unlockedAt:20,description:"makes Tesseracts stronger",formatEffect:e=>`Tesseracts are +${formatPercents(e,2,2)} stronger`,reagents:[{resource:ALCHEMY_RESOURCE.ETERNITY,amount:13},{resource:ALCHEMY_RESOURCE.INFLATION,amount:18}]},multiversal:{id:ALCHEMY_RESOURCE.MULTIVERSAL,name:"Multiversal",symbol:"Σ",isBaseResource:!1,effect:e=>{let t=32*Math.pow(e/25e3,2);return t},tier:4,uiOrder:5,unlockedAt:16,description:"makes each Reality simulate more Realities",formatEffect:e=>`Each Reality simulates ${format(e,2,3)} additional Realities, giving all\n the same rewards as if it was amplified`,reagents:[{resource:ALCHEMY_RESOURCE.ALTERNATION,amount:16},{resource:ALCHEMY_RESOURCE.DECOHERENCE,amount:3}]},unpredictability:{id:ALCHEMY_RESOURCE.UNPREDICTABILITY,name:"Unpredictability",symbol:"Λ",isBaseResource:!1,effect:e=>{let t=100*e/(10714.28+e);return t/100},tier:4,uiOrder:4,unlockedAt:21,description:"makes each Alchemy Reaction have a chance to happen twice",formatEffect:e=>`Any Alchemy Reaction has a ${formatPercents(e,2,2)}\n chance of triggering again`,reagents:[{resource:ALCHEMY_RESOURCE.EFFARIG,amount:15},{resource:ALCHEMY_RESOURCE.DECOHERENCE,amount:3},{resource:ALCHEMY_RESOURCE.SYNERGISM,amount:10}]},reality:{id:ALCHEMY_RESOURCE.REALITY,name:"Reality",symbol:"Ϟ",isBaseResource:!1,effect:e=>{let t=e;return player.celestials.ra.upgrades.has("effarigUpgrade")&&(t*=3),Math.floor(t)},tier:5,unlockedAt:25,description:"can be consumed to create Reality Glyphs",formatEffect:e=>`Consume all Reality Resource to create a level ${formatInt(e)} Reality Glyph`,reagents:[{resource:ALCHEMY_RESOURCE.EXPONENTIAL,amount:1},{resource:ALCHEMY_RESOURCE.FORCE,amount:1},{resource:ALCHEMY_RESOURCE.UNCOUNTABILITY,amount:1},{resource:ALCHEMY_RESOURCE.BOUNDLESS,amount:1},{resource:ALCHEMY_RESOURCE.MULTIVERSAL,amount:1},{resource:ALCHEMY_RESOURCE.UNPREDICTABILITY,amount:1}]}},kt={adjuster:{id:0,description:"Adjustable Glyph level factor weights",cost:1e7,onPurchased:()=>{Effarig.quotes.unlockWeights.show(),ui.view.tabs.reality.openGlyphWeights=!0,Tab.reality.glyphs.show()}},glyphFilter:{id:1,description:"Glyph Filtering",cost:2e8,onPurchased:()=>{Effarig.quotes.unlockGlyphFilter.show(),player.reality.showSidebarPanel=GLYPH_SIDEBAR_MODE.FILTER_SETTINGS}},setSaves:{id:2,description:"Glyph Presets",cost:3e9,onPurchased:()=>{Effarig.quotes.unlockSetSaves.show(),player.reality.showSidebarPanel=GLYPH_SIDEBAR_MODE.SAVED_SETS}},run:{id:3,description:"Effarig's Reality",cost:5e11,onPurchased:()=>{Effarig.quotes.unlockRun.show()}},infinity:{id:4,label:"Infinity",get description(){return` Replicanti cap is multiplied by a value based on Infinities\n Infinities increase your max Replicanti Galaxies\n Base Infinity Point gain is capped at ${format(b.E200)} in Effarig's Reality\n Each type of Infinity Point multiplier is capped at ${format(b.E50)} in Effarig's Reality`}},eternity:{id:5,label:"Eternity",get description(){return" Eternities generate Infinities\n Infinity Points are no longer limited in any way in Effarig's Reality\n You have unlocked The Nameless Ones"}},reality:{id:6,label:"Reality",get description(){return" You have unlocked Effarig Glyphs (You may equip at most one and some effects are mutually exclusive)"}},mend:{id:7,label:"Mend",get description(){return" Effarig is no longer reset on Mend, Unlock the ability to auto equip Glyphs on Reality, idk if we'll have more rewards."}}},Ct={progress:{hintsUnlocked:{id:0,hint:"The Nameless Ones want to help, but the help takes a while.",condition:()=>`Spent more than ${formatInt(5)} real-time hours inside the Reality without completing it;\n time outside the Reality counts for ${formatPercents(.4)} as much. The timer starts once the\n Reality is unlocked, but accumulates continuously.`},ec1:{id:1,hint:"That's odd, the Automatic Eternity Challenge perk seems to be having some trouble working properly.",condition:()=>`Gained more than ${formatInt(5)} completions of Eternity Challenge 1 at once`},feelEternity:{id:2,hint:"Infinity seems to be more broken than usual in this Reality, but is that even fixable?",condition:"Tried to Fix Infinity, but instead found and clicked the FEEL ETERNITY button"},ec6:{id:3,hint:"Some Challenges are harder, but also boost something in exchange. I wonder if there's a Challenge\n that's just strictly better than normal here.",condition:()=>`Entered Eternity Challenge 6 again after completing it ${formatInt(5)} times in order\n to use its cheaper Replicanti Galaxies`},c10:{id:4,hint:"Is there a way to get Antimatter Galaxies without 8th Antimatter Dimensions?",condition:"Used Challenge 10 to get more than one Antimatter Galaxy with 6th Antimatter Dimensions"},secretStudy:{id:5,hint:"Time Study 12? What's that?",condition:()=>`Clicked the secret Time Study and gained an extra ${formatInt(100)} Time Theorems`},storedTime:{id:6,hint:"It seems like certain parts of this Reality erode away if you wait long enough.",condition:"Discharged to have more than a year of game time this Reality"},challengeCombo:{id:7,hint:"Could I possibly use one Challenge to get around a restriction in another Challenge?",condition:"Entered Challenge 10 while already inside of Eternity Challenge 6"}},glyphHints:["Infinity and Dilation Glyphs seem confined too tightly to be useful at all.","Power and Time Glyphs are particularly strong here.","Effarig Glyphs are only useful with the right effects, but you can complete the Reality without one.\n A Replication Glyph is very helpful, but it's not strictly necessary or quite as strong\n as Power and Time."]},At=e=>format(e,2),_t=e=>{const{id:t,description:i,cost:a,effect:n,formatEffect:s,currency:r,currencyLabel:o}=e;return{id:t,description:i,cost:()=>a(player.celestials.pelle.rebuyables[t]),formatCost:At,effect:(e=player.celestials.pelle.rebuyables[t])=>n(e),formatEffect:s,currency:r,currencyLabel:o}},St={additive:_t({id:"galaxyGeneratorAdditive",description:"Increase base Galaxy generation by 2",cost:e=>Math.pow(3,e),effect:e=>2*e,formatEffect:e=>`${format(e,2,2)}/s`,currency:()=>Currency.galaxyGeneratorGalaxies,currencyLabel:"Galaxy"}),multiplicative:_t({id:"galaxyGeneratorMultiplicative",description:"Multiply Galaxy generation",cost:e=>Math.pow(10,e),effect:e=>Decimal.pow(2.5,e),formatEffect:e=>formatX(e,2,1),currency:()=>Currency.galaxyGeneratorGalaxies,currencyLabel:"Galaxy"}),antimatterMult:_t({id:"galaxyGeneratorAntimatterMult",description:"Multiply Galaxy generation",cost:e=>Decimal.pow("1e100000000",10**e),effect:e=>Decimal.pow(2,e),formatEffect:e=>formatX(e,2),currency:()=>Currency.antimatter,currencyLabel:"Antimatter"}),IPMult:_t({id:"galaxyGeneratorIPMult",description:"Multiply Galaxy generation",cost:e=>Decimal.pow("1e2000000",100**e),effect:e=>Decimal.pow(2,e),formatEffect:e=>formatX(e,2),currency:()=>Currency.infinityPoints,currencyLabel:"Infinity Point"}),EPMult:_t({id:"galaxyGeneratorEPMult",description:"Multiply Galaxy generation",cost:e=>Decimal.pow("1e10000",1e3**e),effect:e=>Decimal.pow(2,e),formatEffect:e=>formatX(e,2),currency:()=>Currency.eternityPoints,currencyLabel:"Eternity Point"})},Dt=e=>format(e,2),Rt=(e,t,i,a,n)=>Decimal.pow(e,n).times(Decimal.pow(t,n-i).max(1)).times(a),Mt=e=>{const{id:t,description:i,cost:a,effect:n,formatEffect:s,cap:r}=e;return{id:t,description:i,cost:()=>Rt(...a,player.celestials.pelle.rebuyables[t]),formatCost:Dt,cap:r,effect:(e=player.celestials.pelle.rebuyables[t])=>n(e),formatEffect:s,rebuyable:!0}},It={antimatterDimensionMult:Mt({id:"antimatterDimensionMult",description:"Gain a multiplier to Antimatter Dimensions",cost:[10,1e3,41,100],effect:e=>Pelle.antimatterDimensionMult(e),formatEffect:e=>formatX(e,2,2),cap:44}),timeSpeedMult:Mt({id:"timeSpeedMult",description:"Gain a multiplier to game speed",cost:[20,1e3,30,1e5],effect:e=>Decimal.pow(1.3,e),formatEffect:e=>formatX(e,2,2),cap:35}),glyphLevels:Mt({id:"glyphLevels",description:"Increase the Glyph level allowed in Pelle",cost:[30,1e3,25,1e15],effect:e=>Math.floor((3*(e+1)-2)**1.6),formatEffect:e=>formatInt(e),cap:26}),infConversion:Mt({id:"infConversion",description:"Increase Infinity Power conversion rate",cost:[40,1e3,20,1e18],effect:e=>(3.5*e)**.37,formatEffect:e=>`+${format(e,2,2)}`,cap:21}),galaxyPower:Mt({id:"galaxyPower",description:"Multiply Galaxy power",cost:[1e3,1e3,10,1e30],effect:e=>1+e/50,formatEffect:e=>formatX(e,2,2),cap:9}),antimatterDimAutobuyers1:{id:0,description:"Get permanent Autobuyers for Antimatter Dimensions 1-4",cost:1e5,formatCost:Dt},dimBoostAutobuyer:{id:1,description:"Get a permanent Autobuyer for Dimension Boosts",cost:5e5,formatCost:Dt},keepAutobuyers:{id:2,description:"Autobuyer upgrades no longer reset on Armageddon",cost:5e6,formatCost:Dt},antimatterDimAutobuyers2:{id:3,description:"Get permanent Autobuyers for Antimatter Dimensions 5-8",cost:25e6,formatCost:Dt},galaxyAutobuyer:{id:4,description:"Get a permanent Autobuyer for Antimatter Galaxies",cost:1e8,formatCost:Dt},tickspeedAutobuyer:{id:5,description:"Get a permanent Autobuyer for Tickspeed upgrades",cost:1e9,formatCost:Dt},keepInfinityUpgrades:{id:6,description:"Infinity Upgrades no longer reset on Armageddon",cost:1e10,formatCost:Dt},dimBoostResetsNothing:{id:7,description:"Dimension Boosts no longer reset anything",cost:1e11,formatCost:Dt},keepBreakInfinityUpgrades:{id:8,description:"Break Infinity Upgrades no longer reset on Armageddon",cost:1e12,formatCost:Dt},IDAutobuyers:{id:9,description:"Get permanent Autobuyers for Infinity Dimensions",cost:1e14,formatCost:Dt},keepInfinityChallenges:{id:10,description:"Infinity Challenge unlocks and completions no longer reset on Armageddon",cost:1e15,formatCost:Dt},galaxyNoResetDimboost:{id:11,description:"Galaxies no longer reset Dimension Boosts",cost:1e16,formatCost:Dt},replicantiAutobuyers:{id:12,description:"Get permanent Autobuyers for Replicanti Upgrades",cost:1e17,formatCost:Dt},replicantiGalaxyNoReset:{id:13,description:"Replicanti Galaxies no longer reset on Infinity",cost:1e19,formatCost:Dt},eternitiesNoReset:{id:14,description:"Eternities no longer reset on Armageddon",cost:1e20,formatCost:Dt},timeStudiesNoReset:{id:15,description:"Time Studies and Theorems no longer reset on Armageddon",cost:1e21,formatCost:Dt},replicantiStayUnlocked:{id:16,description:"Replicanti is permanently unlocked",cost:1e22,formatCost:Dt},keepEternityUpgrades:{id:17,description:"Eternity Upgrades no longer reset on Armageddon",cost:1e24,formatCost:Dt},TDAutobuyers:{id:18,description:"Get permanent Autobuyers for Time Dimensions",cost:1e25,formatCost:Dt},keepEternityChallenges:{id:19,description:"Eternity Challenge completions no longer reset on Armageddon",cost:1e26,formatCost:Dt},dilationUpgradesNoReset:{id:20,description:"Dilation Upgrades no longer reset on Armageddon",cost:1e45,formatCost:Dt},tachyonParticlesNoReset:{id:21,description:"Tachyon Particles no longer reset on Armageddon",cost:1e50,formatCost:Dt}};function xt(e,t,i){return e*Math.pow(t,player.celestials.teresa.perkShop[i])}function Pt(e){const{id:t,otherReq:i,cap:a,costCap:n,description:s,formatEffect:r,formatCost:o}=e;return{id:t,cost:()=>e.cost?e.cost():xt(e.initialCost,e.increment,e.id),otherReq:i,cap:a,costCap:n,description:s,effect:()=>e.effect(player.celestials.teresa.perkShop[e.id]),formatEffect:r,formatCost:o,rebuyable:!0}}const Gt={glyphLevel:Pt({id:0,initialCost:1,increment:2,description:()=>`Increase pre-instability Glyph levels by ${formatPercents(.05)}`,effect:e=>Math.pow(1.05,e),formatEffect:e=>formatX(e,2,2),formatCost:e=>format(e,2),costCap:()=>{let e=Ra.unlocks.perkShopIncrease.canBeApplied?1048576:2048;return CorruptionUpgrade(5).isBought&&(e=Math.pow(2,65)),e},cap:()=>{let e=Ra.unlocks.perkShopIncrease.canBeApplied?Math.pow(1.05,20):Math.pow(1.05,11);return CorruptionUpgrade(5).isBought&&(e=Math.pow(1.05,65)),e}}),rmMult:Pt({id:1,initialCost:1,increment:2,description:"Double Reality Machine gain",effect:e=>Math.pow(2,e),formatEffect:e=>formatX(e,2),formatCost:e=>format(e,2),costCap:()=>{let e=Ra.unlocks.perkShopIncrease.canBeApplied?1048576:2048;return CorruptionUpgrade(5).isBought&&(e=Math.pow(2,65)),e},cap:()=>{let e=Ra.unlocks.perkShopIncrease.canBeApplied?1048576:2048;return CorruptionUpgrade(5).isBought&&(e=Math.pow(2,65)),e}}),bulkDilation:Pt({id:2,initialCost:100,increment:2,description:"Buy twice as many Dilation Upgrades at once.",effect:e=>Math.pow(2,e),formatEffect:e=>formatX(e,2),formatCost:e=>format(e,2),costCap:()=>Ra.unlocks.perkShopIncrease.canBeApplied?1638400:1600,cap:()=>Ra.unlocks.perkShopIncrease.canBeApplied?16384:16}),autoSpeed:Pt({id:3,initialCost:1e3,increment:2,description:()=>`Infinity Dimension, Time Dimension, Dilation,\n and Replicanti autobuyers are ${formatX(2)} faster.`,effect:e=>Math.pow(2,e),formatEffect:e=>formatX(e,2),formatCost:e=>format(e,2),costCap:()=>Ra.unlocks.perkShopIncrease.canBeApplied?64e3:4e3,cap:()=>Ra.unlocks.perkShopIncrease.canBeApplied?64:4}),musicGlyph:Pt({id:4,description:()=>`Receive a Music Glyph of a random type that is ${formatPercents(.8)} of your highest level.\n (Try clicking it!)`,cost:()=>1,formatCost:e=>formatInt(e),costCap:()=>Number.MAX_VALUE,cap:()=>Number.MAX_VALUE}),fillMusicGlyph:Pt({id:5,description:()=>"Fill all empty slots in your inventory with Music Glyphs",cost:()=>Math.clampMin(GameCache.glyphInventorySpace.value,1),otherReq:()=>GameCache.glyphInventorySpace.value>0,formatCost:e=>formatInt(e),costCap:()=>Number.MAX_VALUE,cap:()=>Number.MAX_VALUE})},Ut={pets:{teresa:{id:"teresa",name:"Teresa",color:"#8596ea",chunkGain:"Eternity Points",memoryGain:"current RM",secondaryMemoryChunkGain:"Perk Points",requiredUnlock:()=>{},rawMemoryChunksPerSecond:()=>{let e=Ra.unlocks.secondaryMemoryChunkGain.isUnlocked?Math.max(Math.log10(Math.max(1,Currency.perkPoints.value))/2,1):1;return 4*Math.pow((Ra.unlocks.improvedChunkGains.isUnlocked?Math.max(Currency.eternityPoints.value.ln(),0):Currency.eternityPoints.value.pLog10())/1e4,3)*e},memoryProductionMultiplier:()=>{let e=1;return Ra.unlocks.teresaXP.effectOrDefault(1)*e}},effarig:{id:"effarig",name:"Effarig",color:"#ea8585",chunkGain:"Relic Shards gained",memoryGain:"best Glyph level",secondaryMemoryChunkGain:"Glyph Sacrifice totals",requiredUnlock:()=>MendingMilestone.ten.isReached?void 0:Ra.unlocks.effarigUnlock,rawMemoryChunksPerSecond:()=>{let e=new Decimal(0);Ra.unlocks.secondaryMemoryChunkGain.isUnlocked&&Object.values(player.reality.glyphs.sac).every((t=>e=e.add(t))),e=e.div(7);let t=Effarig.shardsGained,i=1;return t.gt(1e100)&&(i=Decimal.pow(t.div(1e100),.3),t=new Decimal(1e100)),(Ra.unlocks.improvedChunkGains.isUnlocked?100:4)*Decimal.pow(t.times(i),Ra.unlocks.unlockPelleContinuum.isUnlocked?.105:.1).min(1e308).toNumber()*Math.max(1,Decimal.log10(e))},memoryProductionMultiplier:()=>{let e=1;return Ra.unlocks.effarigXP.effectOrDefault(1)*e}},enslaved:{id:"enslaved",name:"The Nameless Ones",color:"#f1aa7f",chunkGain:"Time Shards",memoryGain:"total time played",secondaryMemoryChunkGain:"Game speed",requiredUnlock:()=>MendingMilestone.ten.isReached?void 0:Ra.unlocks.enslavedUnlock,rawMemoryChunksPerSecond:()=>{let e=Ra.unlocks.secondaryMemoryChunkGain.isUnlocked?1+Decimal.log10(Decimal.max(getGameSpeedupFactor(),1))/100:1;return Ra.unlocks.improvedChunkGains.isUnlocked?4*Math.pow(Math.max(Currency.timeShards.value.ln(),0)/3e5,2)*e:4*Math.pow(Currency.timeShards.value.pLog10()/3e5,2)*e},memoryProductionMultiplier:()=>{let e=1;return Ra.unlocks.enslavedXP.effectOrDefault(1)*e}},v:{id:"v",name:"V",color:"#ead584",chunkGain:"Infinity Power",memoryGain:"total Memory levels",secondaryMemoryChunkGain:"Achievement Multiplier for Dimensions",requiredUnlock:()=>MendingMilestone.ten.isReached?void 0:Ra.unlocks.vUnlock,rawMemoryChunksPerSecond:()=>{let e=Ra.unlocks.secondaryMemoryChunkGain.isUnlocked?Decimal.max(1,Decimal.log10(Achievements.power)).times(4).toNumber():1;return Ra.unlocks.improvedChunkGains.isUnlocked?4*Math.pow(Math.max(Currency.infinityPower.value.ln(),0)/1e7,1.5)*e:4*Math.pow(Currency.infinityPower.value.pLog10()/1e7,1.5)*e},memoryProductionMultiplier:()=>{let e=1;return Ra.unlocks.vXP.effectOrDefault(1)*e}},ra:{id:"ra",name:"Ra",color:"#9575cd",chunkGain:"Dimension Boosts",memoryGain:"current iM",secondaryMemoryChunkGain:"Total Celestial Memories",requiredUnlock:()=>!!MendingUpgrade(19).isBought&&void 0,rawMemoryChunksPerSecond:()=>{let e=0;Ra.unlocks.secondaryMemoryChunkGain.isUnlocked&&(e+=Ra.pets.teresa.memories,e+=Ra.pets.effarig.memories,e+=Ra.pets.enslaved.memories,e+=Ra.pets.v.memories,e+=Ra.pets.ra.memories,e+=Ra.pets.laitela.memories,e+=Ra.pets.pelle.memories),e/=7e9;let t=2*Math.pow((DimBoost.purchasedBoosts+DimBoost.imaginaryBoosts)/(Ra.unlocks.generateMemChunksOutOfRasReality.isUnlocked?100:14e10),Ra.unlocks.improvedChunkGains.isUnlocked?1.75:1.5)*Math.max(Math.log10(Math.min(0,e)),1);return t},memoryProductionMultiplier:()=>{let e=1;return Ra.unlocks.raXP.effectOrDefault(1)*e}},laitela:{id:"laitela",name:"Lai'tela",color:"white",chunkGain:"Continuum",memoryGain:"Singularity amount",secondaryMemoryChunkGain:"Dark Matter",requiredUnlock:()=>!!MendingUpgrade(19).isBought&&void 0,rawMemoryChunksPerSecond:()=>{let e=Ra.unlocks.secondaryMemoryChunkGain.isUnlocked?Math.max(Decimal.log10(Currency.darkMatter.value)/308,1):1,t=2*Math.pow((AntimatterDimensions.all.reduce(((e,t)=>e+t.continuumValue),0)+Tickspeed.continuumValue)/(Ra.unlocks.unlockDMD.isUnlocked?100:5e11),Ra.unlocks.unlockPelleContinuum.isUnlocked?1.667:1.5)*e;return t},memoryProductionMultiplier:()=>{let e=1;return Ra.unlocks.laitelaXP.effectOrDefault(1)*e}},pelle:{id:"pelle",name:"Pelle",color:"crimson",chunkGain:"Remnants (Only increases in Doomed Reality)",memoryGain:"best Remnants without Galaxy Generator",secondaryMemoryChunkGain:"Reality Shards",requiredUnlock:()=>!!MendingUpgrade(19).isBought&&void 0,rawMemoryChunksPerSecond:()=>{let e=Ra.unlocks.secondaryMemoryChunkGain.isUnlocked?Math.max(Math.log10(Currency.realityShards.value.toNumber()),1):1,t=Ra.unlocks.improvedChunkGains.isUnlocked?1.05:1;return(e*player.celestials.pelle.remnants)**t},memoryProductionMultiplier:()=>{let e=1;return Ra.unlocks.pelleXP.effectOrDefault(1)*e}}},unlocks:{autoTP:{id:0,reward:"Tachyon Particles are given immediately when Time Dilation is active",pet:"teresa",level:1,displayIcon:'',disabledByPelle:!0},chargedInfinityUpgrades:{id:1,reward:()=>`Unlock Charged Infinity Upgrades. You get one more maximum\n Charged Infinity Upgrade every ${formatInt(2)} levels`,effect:()=>Math.min(12,Math.floor(Ra.pets.teresa.level/2)),pet:"teresa",level:2,displayIcon:'',disabledByPelle:!0},teresaXP:{id:2,reward:"All Memory Chunks produce more Memories based on Reality Machines",effect:()=>1+Math.pow(Currency.realityMachines.value.pLog10()/100,.5),pet:"teresa",level:5,displayIcon:"Ϟ"},alteredGlyphs:{id:3,reward:"Unlock Altered Glyphs, which grant new effects to Glyphs based on Glyph Sacrifice",pet:"teresa",level:10,displayIcon:'',disabledByPelle:!0},effarigUnlock:{id:4,reward:"Unlock Effarig's Memories",pet:"teresa",level:8,displayIcon:"Ϙ"},perkShopIncrease:{id:5,reward:"Purchase caps are raised in Teresa's Perk Point Shop",pet:"teresa",level:15,displayIcon:''},unlockDilationStartingTP:{id:6,reward:"In non-Celestial Realities, gain Tachyon Particles as if you reached the square root of your total\n antimatter in Dilation. Any multipliers to TP gain are applied retroactively, even outside Dilation",effect:()=>player.records.totalAntimatter.pow(.5),pet:"teresa",level:25,displayIcon:''},extraGlyphChoicesAndRelicShardRarityAlwaysMax:{id:7,reward:()=>`Get ${formatX(2)} Glyph choices and the bonus to Glyph rarity from Relic Shards\n is always its maximum value`,effect:2,pet:"effarig",level:1,displayIcon:''},unlockGlyphAlchemy:{id:8,reward:"Unlock Glyph Alchemy, which adds alchemical resources you can increase by Refining Glyphs. You unlock\n more resources through Effarig levels. Access through a new Reality tab.",pet:"effarig",level:2,displayIcon:''},effarigXP:{id:9,reward:"All Memory Chunks produce more Memories based on highest Glyph level",effect:()=>1+player.records.bestReality.glyphLevel/7e3,pet:"effarig",level:5,displayIcon:''},glyphEffectCount:{id:10,reward:()=>`Glyphs always have ${formatInt(4)} effects, and Effarig Glyphs can now have up to ${formatInt(7)}`,pet:"effarig",level:10,displayIcon:''},enslavedUnlock:{id:11,reward:"Unlock Nameless's Memories",pet:"effarig",level:8,displayIcon:''},relicShardGlyphLevelBoost:{id:12,reward:"Glyph level is increased based on Relic Shards gained",effect:()=>CorruptionUpgrade(7).isBought?1e3*Math.pow(Decimal.log2(Decimal.max(Effarig.shardsGained,1)),2):100*Math.pow(Decimal.log10(Decimal.max(Effarig.shardsGained,1)),2),pet:"effarig",level:15,displayIcon:''},maxGlyphRarityAndShardSacrificeBoost:{id:13,reward:()=>`Glyphs are always generated with ${formatPercents(1)} rarity and\n Glyph Sacrifice gain is raised to a power based on Relic Shards`,effect:()=>1+Effarig.maxRarityBoost/100,pet:"effarig",level:25,displayIcon:''},blackHolePowerAutobuyers:{id:14,reward:"Unlock Black Hole power upgrade autobuyers",pet:"enslaved",level:1,displayIcon:'',disabledByPelle:!0},improvedStoredTime:{id:15,reward:"Stored game time is amplified and you can store more real time, increasing with Nameless levels",effects:{gameTimeAmplification:()=>Math.pow(20,Math.clampMax(Ra.pets.enslaved.level,Ra.levelCap)),realTimeCap:()=>36e5*Ra.pets.enslaved.level},pet:"enslaved",level:2,displayIcon:'',disabledByPelle:!0},enslavedXP:{id:16,reward:"All Memory Chunks produce more Memories based on total time played",effect:()=>1+Decimal.log10(player.records.totalTimePlayed)/200,pet:"enslaved",level:5,displayIcon:''},autoPulseTime:{id:17,reward:()=>`Black Hole charging now only uses ${formatPercents(.99)} of your game speed and you can\n automatically discharge ${formatPercents(.01)} of your stored game time every ${formatInt(5)} ticks.`,pet:"enslaved",level:10,displayIcon:'',disabledByPelle:!0},vUnlock:{id:18,reward:"Unlock V's Memories",pet:"enslaved",level:8,displayIcon:"⌬"},peakGamespeedDT:{id:19,reward:"Gain more Dilated Time based on peak game speed in each Reality",effect:()=>Math.max(Math.pow(Decimal.log10(player.celestials.ra.peakGamespeed)-90,3),1),pet:"enslaved",level:15,displayIcon:'',disabledByPelle:!0},allGamespeedGlyphs:{id:20,reward:"All basic Glyphs gain the increased game speed effect from Time Glyphs,\n and Time Glyphs gain an additional effect",pet:"enslaved",level:25,displayIcon:'',onUnlock:()=>{const e=player.reality.glyphs.active.concat(player.reality.glyphs.inventory);for(const t of e)Glyphs.applyGamespeed(t)}},instantECAndRealityUpgradeAutobuyers:{id:21,reward:"Rebuyable Reality upgrades are bought automatically and Auto-Eternity Challenges happen instantly",pet:"v",level:1,displayIcon:'',disabledByPelle:!0},autoUnlockDilation:{id:22,reward:()=>`In non-Celestial Realities, Time Dilation is unlocked automatically for free at\n ${formatInt(TimeStudy.dilation.totalTimeTheoremRequirement)} Time Theorems`,pet:"v",level:2,displayIcon:''},vXP:{id:23,reward:"All Memory Chunks produce more Memories based on total Celestial levels.",effect:()=>1+Ra.totalPetLevel/50,pet:"v",level:5,displayIcon:''},unlockHardV:{id:24,reward:()=>`Unlock Hard V-Achievements and unlock a Triad Study every ${formatInt(6)} levels.\n Triad Studies are located at the bottom of the Time Studies page`,effect:()=>Math.floor(Ra.pets.v.level/6),pet:"v",level:6,displayIcon:'',disabledByPelle:!0},continuousTTBoost:{id:25,reward:"Time Theorems boost all forms of continuous non-dimension production",effects:{ttGen:()=>Decimal.pow(10,5*Ra.theoremBoostFactor()),eternity:()=>Decimal.pow(10,2*Ra.theoremBoostFactor()),infinity:()=>Decimal.pow(10,15*Ra.theoremBoostFactor()),replicanti:()=>Decimal.pow(10,20*Ra.theoremBoostFactor()),dilatedTime:()=>Decimal.pow(10,3*Ra.theoremBoostFactor()),memories:()=>1+Ra.theoremBoostFactor()/50,memoryChunks:()=>1+Ra.theoremBoostFactor()/50,autoPrestige:()=>1+2.4*Ra.theoremBoostFactor()},pet:"v",level:10,displayIcon:'',disabledByPelle:!0},achievementTTMult:{id:26,reward:"Achievement multiplier applies to Time Theorem generation",effect:()=>Achievements.power,pet:"v",level:15,displayIcon:'',disabledByPelle:!0},achievementPower:{id:27,reward:()=>`Achievement multiplier is raised ${formatPow(1.5,1,1)}`,effect:1.5,pet:"v",level:25,displayIcon:'',disabledByPelle:!0},imaginaryMachinesSetToCap:{id:0,id2:0,reward:"Current Imaginary Machine amount is always set to cap",pet:"teresa",level:30,displayIcon:''},chargedBreakInfinityUpgrades:{id:1,id2:0,reward:()=>`Unlock Charged Break Infinity Upgrades. You get one more maximum\n Charged Break Infinity Upgrade every ${formatInt(6)} levels past ${formatInt(40)}`,effect:()=>Math.min(9,Math.floor((Ra.pets.teresa.level-40)/6+1)),pet:"teresa",level:40,displayIcon:"∝",disabledByPelle:!0},uncapGlyphSacEffects:{id:2,id2:0,reward:"Some Glyph Sacrifice effects are uncapped",pet:"teresa",level:50,displayIcon:''},retroactiveTeresaRealityReward:{id:3,id2:0,reward:()=>"Your record antimatter in Teresa's Reality is retroactively set to the square root of your total antimatter",pet:"teresa",level:65,displayIcon:"Ϟ"},realityMachinesBoostIpAndEpGain:{id:4,id2:0,reward:"Reality Machines boost Infinity Point and Eternity Point gain",pet:"teresa",level:75,displayIcon:'',effect:()=>Decimal.log10(Currency.realityMachines)/100},realitiesBoostInfinityAndEternityProduction:{id:5,id2:0,reward:"Realities boost Infinity and Eternity production",pet:"teresa",level:90,displayIcon:"τ"},postWarpRealityMachineBoost:{id:6,id2:0,reward:"Post-Warp Reality Machine gain is affected by Elliptic Materiality",pet:"teresa",level:100,displayIcon:''},alchSetToCapAndCapIncrease:{id:8,id2:0,reward:()=>`Alchemy passively occurs, and increase the hardcap by ${formatInt(5)} per level`,effect:()=>10*Ra.pets.effarig.level,pet:"effarig",level:30,displayIcon:''},passiveRelicShardGain:{id:9,id2:0,reward:"You gain 100% of relic shards on reality every second",pet:"effarig",level:40,displayIcon:''},harshInstabilityDelay:{id:10,id2:0,reward:()=>`Logarithmic glyph instability is delayed by ${formatInt(500)} for every ${formatInt(5)} levels past ${formatInt(50)}`,effect:()=>500*Math.floor((Ra.pets.effarig.level-50)/5),pet:"effarig",level:50,displayIcon:''},relicShardBoost:{id:11,id2:0,reward:"Relic shards boost dimensional sacrifice, replicanti speed, infinity power conversion rate, tachyon particle to dilated time factor and time dimensions",pet:"effarig",level:65,displayIcon:''},effarigGlyphIncreaseImCap:{id:12,id2:0,reward:"Effarig Glyphs' first effect also increases Imaginary Machine cap",pet:"effarig",level:75,displayIcon:''},maxGlyphRarityIncrease:{id:13,id2:0,reward:()=>`Maximum Glyph rarity is increased by ${formatPercents(.02)} per level past ${formatInt(90)}`,effect:()=>2*(Ra.pets.effarig.level-90),pet:"effarig",level:90,displayIcon:''},effarigMendUnlock:{id:14,id2:0,reward:"Unlock Effarig's Mend",pet:"effarig",level:100,displayIcon:"Ϙ"},uncapGamespeed:{id:15,id2:0,reward:"Remove the 1e300 Gamespeed cap",pet:"enslaved",level:30,displayIcon:''},uncap8TdPurchaseMult:{id:16,id2:0,reward:"Uncap 8th Time Dimension purchase multiplier",pet:"enslaved",level:40,displayIcon:"Δ"},unlock3rdBH:{id:17,id2:0,reward:"Unlock the 3rd Black Hole which costs Imaginary Machines and boosts Game Speed exponentially instead of multiplicatively",pet:"enslaved",level:50,displayIcon:'',disabledByPelle:!0},twinTachyonGalaxyCapIncrease:{id:18,id2:0,reward:"Increase Pelle Tachyon Galaxy multiplier upgrade base based on Dilated Time",pet:"enslaved",level:65,displayIcon:"♅"},gamespeedGalaxyBoost:{id:19,id2:0,reward:"Game Speed increases Galaxy strength",pet:"enslaved",level:75,displayIcon:'',effect:()=>Math.max(1,1+Decimal.log10(getGameSpeedupFactor())/1e3)},freeTickspeedSoftcapDelay:{id:20,id2:0,reward:"Tesseracts increase free tickspeed upgrade softcap",pet:"enslaved",level:90,displayIcon:''},improvedIpowConversion:{id:21,id2:0,reward:"Improve Infinity Power conversion (based on effective Tesseract count)",pet:"enslaved",level:100,displayIcon:''},improvedECRewards:{id:22,id2:0,reward:"Each Eternity Challenge Gains an Additional Reward, Increasing Based on V Level and total Space Theorems",pet:"v",level:30,displayIcon:"⌬"},unlockSHardV:{id:23,id2:0,reward:"Unlock More Hard V-Achievements (not affected by Mending Upgrade 14, except Space Theorem gain), V's Superhard Reality (and assiocated Achievements) and more V-Milestones",pet:"v",level:40,displayIcon:'',disabledByPelle:!0},vAchMilestone2AffectsIDsAndTDs:{id:24,id2:0,reward:"The 5 V-Achievement milestone affects Infinity and Time Dimensions with reduced effect",pet:"v",level:50,displayIcon:'',disabledByPelle:!0},repIncreasesAchMult:{id:25,id2:0,reward:"Replicanti increases achievement multiplier",pet:"v",level:65,displayIcon:GLYPH_SYMBOLS.replication},totalSTBoostTTGen:{id:26,id2:0,reward:"Total Space Theorems boost Time Theorem generation",pet:"v",level:75,displayIcon:''},unlockMyriads:{id:27,id2:0,reward:"Unlock a Myriad Study every 2 Memory Levels past 90",pet:"v",level:90,effect:()=>Math.floor((Ra.pets.v.level-90)/2)+1,displayIcon:'',disabledByPelle:!0},achMultBaseImprovementV:{id:28,id2:0,reward:"Improve Base Achievemnt Multiplier",pet:"v",level:100,displayIcon:''},raRealUncapDimboost:{id:29,id2:0,reward:"Uncap Dimension Boosts in Ra's reality",pet:"ra",level:1,displayIcon:GLYPH_SYMBOLS.power},rautobuyers:{id:30,id2:0,reward:"(Kept without Ra 30) Unlock Autobuyers for Memory Levels, Recollections and Fragmentations",pet:"ra",level:2,displayIcon:''},raXP:{id:31,id2:0,reward:"All Memory Chunks produce more Memories based on Imaginary Machines",pet:"ra",level:5,displayIcon:'',effect:()=>Math.max(1,Math.pow(Math.log(Math.max(1,Currency.imaginaryMachines.value)),.5))},upgradesDontSpendMems:{id:0,id2:1,reward:"Level Up, Recollection and Fragmentation don't spend memories",pet:"ra",level:8,displayIcon:''},secondaryMemoryChunkGain:{id:1,id2:1,reward:"Add a secondary source for Memory Chunk Gain for each Celestial",pet:"ra",level:10,displayIcon:''},remembranceBoost:{id:2,id2:1,reward:"Remembrance is ×15 as powerful",pet:"ra",level:15,displayIcon:''},generateMemChunksOutOfRasReality:{id:3,id2:1,reward:"You can generate Memory Chunks outside of Ra's reality at a heavily reduced rate. Improve Ra's memory chunk formula.",pet:"ra",level:25,displayIcon:"Ϟ"},raNoReset:{id:4,id2:1,reward:"Ra no longer resets on Mend",pet:"ra",level:30,displayIcon:''},remembranceAlwaysActiveAndShopUnlock:{id:5,id2:1,reward:"Remembrance has no downside, affects all celestials and is always active, unlock Ra's Shop",pet:"ra",level:40,displayIcon:''},improvedChunkGains:{id:6,id2:1,reward:"Base Memory Chunk formula for all Celestials is slightly improved",pet:"ra",level:50,displayIcon:''},imaginaryBoostsRa:{id:7,id2:1,reward:"Free Dimension Boosts are effective in Ra's Reality",pet:"ra",level:65,displayIcon:''},freeDimBoosts:{id:8,id2:1,reward:"Gain Free Dimension Boosts based on Ra Level",pet:"ra",level:75,displayIcon:'',disabledByPelle:!0},improvedPetUpgrades:{id:9,id2:1,reward:"Unlock a new row of permenant upgrades in Ra's shop",pet:"ra",level:90,displayIcon:''},mendingPointsGainMult:{id:10,id2:1,reward:"Gain a Multiversal Remain Multiplier based on total Memory Levels",pet:"ra",level:100,displayIcon:''},increaseDarkMatterCap:{id:11,id2:1,reward:"Increase dark matter cap based on Laitela level",effect:()=>Ra.pets.laitela.level,pet:"laitela",level:1,displayIcon:"ᛝ"},annihilationDarkEnergyBoost:{id:12,id2:1,reward:"Annihilation increases dark energy production with reduced effect",pet:"laitela",level:2,displayIcon:''},laitelaXP:{id:13,id2:1,reward:"All Memory Chunks produce more Memories based on Singularities",effect:()=>Math.max(Math.log10(Currency.singularities.value)/10,1),pet:"laitela",level:5,displayIcon:''},totalAntimatterDarkMatterBoost:{id:14,id2:1,reward:"Total Antimatter boosts dark matter gain",pet:"laitela",level:8,displayIcon:GLYPH_SYMBOLS.power},infinityPowerConversionBoost:{id:15,id2:1,reward:()=>`Increase the base infinity power conversion by ${formatFloat(.25,2)} every ${formatInt(10)} levels`,effect:()=>.25*Math.floor(Ra.pets.laitela.level/10),pet:"laitela",level:10,displayIcon:''},passiveAnnihilationGen:{id:16,id2:1,reward:"Passively generate half of your Annihilation multiplier every second",pet:"laitela",level:15,displayIcon:''},unlockDMD:{id:17,id2:1,reward:()=>`Unlock a new Dark Matter Dimension every ${formatInt(25)} levels. Improve Lai'tela's memory chunk formula.`,pet:"laitela",level:25,displayIcon:''},continuumBoost:{id:18,id2:1,reward:()=>`Improve Continuum effect for every ${format("1e308")} Dark Matter`,pet:"laitela",level:30,displayIcon:''},increaseSingLimits:{id:19,id2:1,reward:()=>`You can increase the max singularity cap by ${formatInt(2)} every ${formatInt(5)} levels`,pet:"laitela",level:40,displayIcon:''},dmdAuto1:{id:20,id2:1,reward:"(Kept without Ra 30) Unlock Permanent autobuyers for all Dark Matter Dimensions",pet:"laitela",level:50,displayIcon:''},dmdAuto2:{id:21,id2:1,reward:"(Kept without Ra 30) Unlock Permanent autobuyers for Annihilation, Singularities and Singularity Caps. Manual Annihilations are 500x stronger.",pet:"laitela",level:65,displayIcon:''},continuumAffectsIDsAndTDs:{id:22,id2:1,reward:"Continuum affects Infinity and Time Dimensions (With reduced effect)",pet:"laitela",level:75,displayIcon:''},dmdScaling:{id:23,id2:1,reward:"Entropic Condensing is far stronger.",pet:"laitela",level:90,displayIcon:''},unlockMultiversalDimensions:{id:24,id2:1,reward:"Unlock Multiversal Dimensions [name TBD]",pet:"laitela",level:100,displayIcon:"*"},pelleAutobuyers:{id:25,id2:1,reward:"Pelle Upgrades are purchased automatically",pet:"pelle",level:1,displayIcon:''},boostMVRGain:{id:26,id2:1,reward:"Triple Multiversal Remain gain when Mending in a Doomed Reality, you can now fill up to 5 rifts at once",effect:()=>Pelle.isDoomed?3:1,pet:"pelle",level:2,displayIcon:''},pelleXP:{id:27,id2:1,reward:"All Memory Chunks produce more Memories based on highest Remnants without Galaxy Generator.",effect:()=>Math.max(Math.log10(player.records.thisReality.remWithoutGG)/2,1),pet:"pelle",level:5,displayIcon:"♅"},unlockPelleTPMult:{id:28,id2:1,reward:"Re-enable Tachyon Particle Multiplier in Doomed Reality, but it's decreased to ×1.1",pet:"pelle",level:8,displayIcon:GLYPH_SYMBOLS.dilation},exitDoom:{id:29,id2:1,reward:"Doomed Reality can be exitied, but it causes a Mending Reset (with no benefits)",pet:"pelle",level:10,displayIcon:''},unlockPelleIPAndEPMult:{id:30,id2:1,reward:"Doomed Reality no longer disables rebuyable IP and EP multipliers, but they are decreased to ×1.01 and ×1.5 respectively",pet:"pelle",level:15,displayIcon:''},unlockPelleGlyphEffects:{id:31,id2:1,reward:"Baisc Glyphs' disabled effects are re-enabled in Doomed Reality.",pet:"pelle",level:25,displayIcon:''},boostMemoryGain:{id:0,id2:2,reward:"Memory Gain for all Celestials is boosted in Doomed Reality",pet:"pelle",level:30,displayIcon:'',effect:500},unlockPelleContinuum:{id:1,id2:2,reward:"Continuum is re-enabled in Doomed Reality, but is severely weakened, and only effective for Antimatter Dimensions",pet:"pelle",level:40,displayIcon:''},pelleRarityBoost:{id:2,id2:2,reward:"Glyph Rarity in Doomed Reality is boosted based on Memory Levels past 50",pet:"pelle",level:50,displayIcon:''},omegaScalingBuff:{id:3,id2:2,reward:"Make the scaling at glyph level 100,000 weaker.",pet:"pelle",level:65,displayIcon:''},Hostility:{id:4,id2:2,reward:()=>Ra.unlocks.Hostility.isUnlocked?"Unlock Hostilities":"Reach Pelle 75 to see reward",pet:"pelle",level:75,displayIcon:()=>Ra.unlocks.Hostility.isUnlocked?'':"?"},DimLimitCorruptionImprovementPelle:{id:5,id2:2,reward:()=>Ra.unlocks.Hostility.isUnlocked?"Make Dimensional Limitations slightly Weaker":"Reach Pelle 75 to see reward",pet:"pelle",level:90,displayIcon:()=>Ra.unlocks.Hostility.isUnlocked?'':"?"},kohlersRealmUnlock:{id:6,id2:2,reward:()=>{const e=600-(Ra.totalPetLevel-Ra.pets.pelle.level),t=0===e?"":` (Requires all celestials to be level ${formatInt(100)}, ${quantifyInt("level",e)} remaining)`,i=Ra.unlocks.kohlersRealmUnlock.isUnlocked,a=processText("Kohler",makeGarbledTemplate("Kohler"),i);return`Unlock ${a}'s Realm${t}`},pet:"pelle",level:100,displayIcon:()=>Ra.unlocks.kohlersRealmUnlock.isUnlocked?'':"?"}}},Bt={vacuum:{id:1,key:"vacuum",name:["Vacuum","Hollow","Void"],drainResource:"IP",baseEffect:e=>`IP gain ${formatX(e,2,2)}`,additionalEffects:()=>[PelleRifts.vacuum.milestones[2]],strike:()=>PelleStrikes.infinity,percentage:e=>Math.log10(10*e.plus(1).log10()+1)**2.5/100,percentageToFill:e=>Decimal.pow(10,Decimal.pow(10,(100*e)**.4).div(10).minus(.1)).minus(1),effect:e=>{if(0!==player.challenge.eternity.current){const t=EternityChallenge.current,i=t.goalAtCompletions(t.gainedCompletionStatus.totalCompletions);return e.plus(1).pow(.1).min(i.pow(.15))}return e.plus(1).pow(.33)},currency:()=>Currency.infinityPoints,galaxyGeneratorThreshold:1e3,milestones:[{resource:"vacuum",requirement:.04,description:"You can equip a single basic Glyph with decreased level and rarity"},{resource:"vacuum",requirement:.06,description:()=>`Uncap Replicanti and make its unlock and upgrades ${formatX(1e130)} cheaper`,effect:()=>1e130},{resource:"vacuum",requirement:.4,description:()=>`${P.wordCycle(PelleRifts.vacuum.name)} also affects EP gain`,effect:()=>Decimal.pow(4,PelleRifts.vacuum.totalFill.log10()/2/308+3),formatEffect:e=>`EP gain ${formatX(e,2,2)}`}],galaxyGeneratorText:"There is not enough space left for more, you must fill in the $value"},decay:{id:2,key:"decay",name:["Decay","Collapse","Disarray"],drainResource:"Replicanti",spendable:!0,baseEffect:e=>`Replicanti speed ${formatX(e,2,2)}`,additionalEffects:()=>[PelleRifts.decay.milestones[0],PelleRifts.decay.milestones[2]],strike:()=>PelleStrikes.powerGalaxies,percentage:e=>.05*e.plus(1).log10()/100,percentageToFill:e=>Decimal.pow(10,20*e*100).minus(1),effect:e=>PelleRifts.chaos.milestones[0].canBeApplied?Decimal.sqrt(2001):Decimal.sqrt(e.plus(1).log10()+1),currency:()=>Currency.replicanti,galaxyGeneratorThreshold:1e7,milestones:[{resource:"decay",requirement:.2,description:"First rebuyable Pelle upgrade also affects 1st Infinity Dimension",effect:()=>{let e=player.celestials.pelle.rebuyables.antimatterDimensionMult;return e<9&&(e=9),Decimal.pow(1e50,e-9)},formatEffect:e=>`1st Infinity Dimension ${formatX(e,2,2)}`},{resource:"decay",requirement:.6,description:()=>`When Replicanti exceeds ${format(b.E1300)},\n all Galaxies are ${formatPercents(.1)} more effective`,effect:()=>Replicanti.amount.gt(b.E1300)?1.1:1},{resource:"decay",requirement:1,description:"Increase max Replicanti Galaxies based on total Rift milestones",effect:()=>{const e=PelleRifts.totalMilestones();return e**2-2*e},formatEffect:e=>`Max RG count +${formatInt(e)}`}],galaxyGeneratorText:"There's not enough antimatter to form new Galaxies, you need to reverse the $value"},chaos:{id:3,key:"chaos",name:["Chaos","Disorder","Impurity"],drainResource:["Decay","Collapse","Disarray"],baseEffect:e=>`Time Dimensions ${formatX(e,2,2)}`,strike:()=>PelleStrikes.eternity,percentage:e=>e/10,percentageToFill:e=>10*e,effect:e=>{const t=e>6.5?(e-6.5)/7+6.5:e;return Decimal.pow(6,Decimal.pow(6,Decimal.pow(6,t/10+.1)).minus(6)).div(1e5).plus(Decimal.pow(10,t/10+.1))},currency:()=>({get value(){return PelleRifts.decay.percentage},set value(e){const t=PelleRifts.decay.percentage-e;player.celestials.pelle.rifts.decay.percentageSpent+=t}}),galaxyGeneratorThreshold:1e9,milestones:[{resource:"chaos",requirement:.09,description:()=>`${P.wordCycle(PelleRifts.decay.name)} effect is always maxed and milestones always active`},{resource:"chaos",requirement:.15,description:"Glyphs gain a new Pelle-specific effect"},{resource:"chaos",requirement:1,description:()=>`You gain ${formatPercents(.01)} of your EP gained on Eternity per second`}],galaxyGeneratorText:"Your Galaxies are too fragmented, you must stabilize the $value"},recursion:{id:4,key:"recursion",name:["Recursion","Dispersion","Destruction"],drainResource:"EP",baseEffect:e=>`EP formula: log(x)/${formatInt(308)} ➜ log(x)/${formatFloat(308-e.toNumber(),2)}`,additionalEffects:()=>[PelleRifts.recursion.milestones[0],PelleRifts.recursion.milestones[1]],strike:()=>PelleStrikes.ECs,percentage:e=>e.plus(1).log10()**.4/4e3**.4,percentageToFill:e=>Decimal.pow(10,e**2.5*4e3).minus(1),effect:e=>new Decimal(58*e.plus(1).log10()**.2/4e3**.2),currency:()=>Currency.eternityPoints,galaxyGeneratorThreshold:1e10,milestones:[{resource:"recursion",requirement:.1,description:"Dimensional Boosts are more powerful based on EC completions",effect:()=>Math.max(100*EternityChallenges.completions**2,1)*Math.max(1e4**(EternityChallenges.completions-40),1),formatEffect:e=>`Dimension Boost power ${formatX(e,2,2)}`},{resource:"recursion",requirement:.15,description:"Infinity Dimensions are stronger based on EC completions",effect:()=>Decimal.pow("1e1500",((EternityChallenges.completions-25)/20)**1.7).max(1),formatEffect:e=>`Infinity Dimensions ${formatX(e)}`},{resource:"recursion",requirement:1,description:"Permanently unlock the Galaxy Generator"}],galaxyGeneratorText:"Creating more Galaxies is unsustainable, you must focus the $value to allow more"},paradox:{id:5,key:"paradox",name:["Paradox","Contradiction","Fallacy"],drainResource:"Dilated Time",baseEffect:e=>`All Dimensions ${formatPow(e,2,3)}`,additionalEffects:()=>[PelleRifts.paradox.milestones[2]],strike:()=>PelleStrikes.dilation,percentage:e=>e.plus(1).log10()/100,percentageToFill:e=>Decimal.pow10(100*e).minus(1),effect:e=>new Decimal(1+.004*e.plus(1).log10()),currency:()=>Currency.dilatedTime,galaxyGeneratorThreshold:1e5,milestones:[{resource:"paradox",requirement:.15,description:"Time Dimensions 5-8 are much cheaper, unlock more Dilation upgrades",onStateChange:()=>{updateTimeDimensionCosts()}},{resource:"paradox",requirement:.25,description:()=>`Dilated Time gain becomes Tachyon Particles ${formatPow(1.4,1,1)}`,effect:1.4},{resource:"paradox",requirement:.5,description:"Dilation rebuyable purchase count improves Infinity Power conversion rate",effect:()=>Math.min(1.1**(Object.values(player.dilation.rebuyables).sum()-90),712),formatEffect:e=>`Infinity Power Conversion ${formatX(e,2,2)}`}],galaxyGeneratorText:"It should be possible to create more, but Pelle has restricted you. Disregard the $value"}},Nt={SELF_BOOST:0,BOOSTS_MAIN:1,BOOSTS_LAITELA:2},Ot={continuumMult:{start:1,repeat:125,increaseThreshold:20,limit:1/0,description:"Continuum percentage multiplier",effect:e=>.03*e,effectFormat:e=>formatX(1+e,2,2),upgradeDirection:Nt.BOOSTS_MAIN},darkMatterMult:{start:2,repeat:20,increaseThreshold:30,limit:1/0,description:"Dark Matter production multiplier",effect:e=>Math.pow(1.5,e),effectFormat:e=>formatX(e,2,2),upgradeDirection:Nt.SELF_BOOST},darkEnergyMult:{start:3,repeat:120,increaseThreshold:10,limit:1/0,description:"Dark Energy production multiplier",effect:e=>Math.pow(2,e),effectFormat:e=>formatX(e,2),upgradeDirection:Nt.SELF_BOOST},darkDimensionCostReduction:{start:4,repeat:40,increaseThreshold:25,limit:1/0,description:"Dark Matter Dimension upgrades are cheaper",effect:e=>Math.pow(.4,e),effectFormat:e=>`/ ${format(1/e,2,2)}`,upgradeDirection:Nt.SELF_BOOST},singularityMult:{id:5,start:50,repeat:3e3,increaseThreshold:5,limit:1/0,description:"Singularity gain multiplier",effect:e=>Math.pow(2,e),effectFormat:e=>formatX(e,2,0),upgradeDirection:Nt.SELF_BOOST},darkDimensionIntervalReduction:{start:10,repeat:100,increaseThreshold:20,limit:1/0,description:"Dark Matter Dimension interval decrease",effect:e=>Math.pow(.6,e),effectFormat:e=>`/ ${format(1/e,2,2)}`,upgradeDirection:Nt.SELF_BOOST},improvedAscensionDM:{start:2e5,repeat:4e3,increaseThreshold:15,limit:1/0,description:"Ascension affects Dark Matter production more",effect:e=>100*e,effectFormat:e=>formatX(POWER_DM_PER_ASCENSION+e,1,0),upgradeDirection:Nt.SELF_BOOST},ascensionIntervalScaling:{start:12e4,repeat:2400,limit:8,description:"Dark Matter Dimensions Ascension increases the interval less",effect:e=>1200-50*e,effectFormat:e=>`×${formatInt(e)}`,upgradeDirection:Nt.SELF_BOOST},autoCondense:{start:8,repeat:80,limit:8,description:"Automatically condense Singularities when reaching a threshold above the cap",effect:e=>[1/0,1.3,1.22,1.15,1.1,1.06,1.03,1.01,1][e],effectFormat:e=>`Cap ${formatX(e,2,2)}`,upgradeDirection:Nt.SELF_BOOST},darkDimensionAutobuyers:{start:30,repeat:170,limit:4,description:"Dark Matter Dimension Autobuyers",effect:e=>e,effectFormat:e=>0===e?"No autobuyers":`Autobuy up to the ${["1st","2nd","3rd","4th"][e-1]} DMD`,upgradeDirection:Nt.SELF_BOOST},ascensionAutobuyers:{start:1e8,repeat:140,limit:4,description:"DMD Ascension Autobuyers",effect:e=>e,effectFormat:e=>0===e?"No autobuyers":`Ascend up to the ${["1st","2nd","3rd","4th"][e-1]} DMD`,upgradeDirection:Nt.SELF_BOOST},darkAutobuyerSpeed:{start:45,repeat:650,limit:8,description:"Autobuyer speed for all DMD Autobuyers",effect:e=>[30,20,15,10,5,3,2,1,0][e],effectFormat:e=>0===e?"Instant":`${formatInt(e)}s`,upgradeDirection:Nt.SELF_BOOST},realityDEMultiplier:{start:1500,repeat:1e4,limit:6,description:"Dark Energy multiplier based on disabled Dimension count within Lai'tela",effect:e=>Math.pow(1+.05*e,Laitela.difficultyTier),effectFormat:e=>formatX(e,2,2),upgradeDirection:Nt.SELF_BOOST},improvedSingularityCap:{start:150,repeat:1e4,limit:4,description:"Increased Singularity gain per cap increase",effect:e=>11+e,effectFormat:e=>`${formatX(e)}`,upgradeDirection:Nt.SELF_BOOST},intervalCostScalingReduction:{start:13e4,repeat:5e4,limit:5,description:"DMD Interval cost scaling is better",effect:e=>1-.03*e,effectFormat:e=>`${formatPow(e,2,2)}`,upgradeDirection:Nt.SELF_BOOST},darkFromTesseracts:{start:80,repeat:0,limit:1,description:"Tesseracts boost Dark Matter and Dark Energy production",effect:()=>Math.pow(1.1,Tesseracts.effectiveCount),effectFormat:e=>formatX(e,2,2),upgradeDirection:Nt.BOOSTS_LAITELA},multFromInfinitied:{start:3e3,repeat:0,limit:1,description:"Infinities boost Dark Matter and Dark Energy production",effect:()=>Math.clampMin(Currency.infinitiesTotal.value.pLog10()/1e3,1),effectFormat:e=>formatX(e,2,2),upgradeDirection:Nt.BOOSTS_LAITELA},dilatedTimeFromSingularities:{start:8e4,repeat:0,limit:1,description:"Singularities improve the repeatable Dilated Time multiplier upgrade",effect:()=>1+Math.clampMax(Math.log10(Currency.singularities.value)/100,.35),effectFormat:e=>`${formatX(2)} ➜ ${formatX(2*Math.clampMin(e,1),2,2)}`,upgradeDirection:Nt.BOOSTS_MAIN},darkFromGlyphLevel:{start:3e6,repeat:0,limit:1,description:"Boost Dark Matter and Dark Energy production based on highest Glyph level",effect:()=>Math.pow(Math.clampMin((player.records.bestReality.glyphLevel-15e3)/2e3,1),.5),effectFormat:e=>formatX(e,2,2),upgradeDirection:Nt.BOOSTS_LAITELA},gamespeedFromSingularities:{start:8e7,repeat:0,limit:1,description:"Singularities boost game speed",effect:()=>Math.clampMin(Math.pow(Math.log10(Currency.singularities.value),3),1),effectFormat:e=>formatX(e,2,2),upgradeDirection:Nt.BOOSTS_MAIN},darkFromTheorems:{start:3e9,repeat:0,limit:1,description:"Time Theorems boost Dark Matter and Dark Energy gain",effect:()=>Math.sqrt(Math.clampMin((Currency.timeTheorems.value.log10()-1e3)/50,1)),effectFormat:e=>formatX(e,2,2),upgradeDirection:Nt.BOOSTS_LAITELA},dim4Generation:{start:5e11,repeat:0,limit:1,description:"Annihilation mult. generates 4th DMD when Annihilation is available",effect:()=>Laitela.darkMatterMult,effectFormat:e=>`${format(e,2,1)}/s`,upgradeDirection:Nt.SELF_BOOST},darkFromDM4:{start:5e12,repeat:0,limit:1,description:"4th Dark Matter Dimension amount boosts Dark Matter and Dark Energy gain",effect:()=>Math.clampMin(DarkMatterDimension(4).amount.pow(.03).toNumber(),1),effectFormat:e=>formatX(e,2,2),upgradeDirection:Nt.SELF_BOOST},annihilationAutobuyer:{start:4e18,repeat:0,limit:1,description:"Unlock an Autobuyer for Annihilation",effect:e=>e,effectFormat:e=>1===e?"Unlocked":"Locked",upgradeDirection:Nt.SELF_BOOST},theoremPowerFromSingularities:{start:3e21,repeat:0,limit:1,description:"Singularities give a power effect to Time Theorem gain",effect:()=>1+Math.log10(Currency.singularities.value+1)/70,effectFormat:e=>formatPow(e,2,3),upgradeDirection:Nt.BOOSTS_MAIN},darkFromGamespeed:{start:8e22,repeat:0,limit:1,description:"Game speed boosts Dark Matter and Dark Energy production",effect:()=>Math.clampMin(Decimal.log10(getGameSpeedupFactor().div(1e120))/40,1),effectFormat:e=>formatX(e,2,2),upgradeDirection:Nt.BOOSTS_LAITELA},glyphLevelFromSingularities:{start:3e24,repeat:0,limit:1,description:"Singularities boost pre-instability Glyph level",effect:()=>1+Math.clampMin((Math.log10(Currency.singularities.value)-20)/30,0),effectFormat:e=>formatX(Math.clampMin(e,1),2,2),upgradeDirection:Nt.BOOSTS_MAIN},darkFromDilatedTime:{start:8e33,repeat:0,limit:1,description:"Dilated Time boosts Dark Matter production",effect:()=>Math.pow(1.6,Decimal.log10(Currency.dilatedTime.value.plus(1))/1e3),effectFormat:e=>formatX(e,2,2),upgradeDirection:Nt.BOOSTS_LAITELA},infinitiedPow:{start:3e38,repeat:0,limit:1,description:"Infinities gain a power effect based on Singularities",effect:()=>1+Math.log10(Currency.singularities.value+1)/300,effectFormat:e=>formatPow(e,2,3),upgradeDirection:Nt.BOOSTS_MAIN},tesseractMultFromSingularities:{start:25e44,repeat:0,limit:1,description:"Singularities increase effective Tesseract count",effect:()=>1+Math.log10(Currency.singularities.value)/80,effectFormat:e=>formatX(Math.clampMin(e,1),2,2),upgradeDirection:Nt.BOOSTS_MAIN}},Lt={infinity:{id:1,requirementDescription:"Reach Infinity",penaltyDescription:()=>MendingUpgrade(10).isBought?`Antimatter Dimensions are raised to ${formatPow(.7,1,1)} (Reduced by Mending Upgrade 10)`:`Antimatter Dimensions are raised to ${formatPow(.5,1,1)}`,rewardDescription:()=>`Unlock ${P.wordCycle(PelleRifts.vacuum.name)}\n and get a permanent Infinity Autobuyer`,rift:()=>PelleRifts.vacuum},powerGalaxies:{id:2,requirementDescription:"Power-up Galaxies",penaltyDescription:()=>MendingUpgrade(10).isBought?`Infinity Dimensions are raised to ${formatPow(.7,1,1)} (Reduced by Mending Upgrade 10)`:`Infinity Dimensions are raised to ${formatPow(.5,1,1)}`,rewardDescription:()=>`Unlock ${P.wordCycle(PelleRifts.decay.name)}`,rift:()=>PelleRifts.decay},eternity:{id:3,requirementDescription:"Reach Eternity",penaltyDescription:()=>MendingUpgrade(10).isBought?`Replicanti speed slows down ${formatX(6)}/${format(b.C2P1024)} above ${format(b.E2000)}`:`Replicanti speed slows down ${formatX(10)}/${format(b.C2P1024)} above ${format(b.E2000)}`,rewardDescription:()=>`Unlock ${P.wordCycle(PelleRifts.chaos.name)}`,rift:()=>PelleRifts.chaos},ECs:{id:4,requirementDescription:()=>`Reach ${formatInt(115)} TT`,penaltyDescription:()=>`In Eternity Challenges, ${P.wordCycle(PelleRifts.vacuum.name)}\n IP multiplier is only ${formatPercents(.3)} as strong and capped at ${formatPercents(.15)}\n of the goal`,rewardDescription:()=>`Unlock ${P.wordCycle(PelleRifts.recursion.name)}`,rift:()=>PelleRifts.recursion},dilation:{id:5,requirementDescription:"Dilate Time",penaltyDescription:"Time Dilation is permanently active",rewardDescription:()=>`Keep the Time Dilation study across Armageddon, boost Remnant gain, remove TG softcaps, and unlock\n ${P.wordCycle(PelleRifts.paradox.name)}`,rift:()=>PelleRifts.paradox}},Ft={unlocks:{run:{id:0,price:1e14,description:"Unlock Teresa's Reality.",onUnlock:()=>Teresa.quotes.unlockReality.show()},epGen:{id:1,price:1e18,description:"Unlock passive Eternity Point generation.",isDisabledInDoomed:!0},effarig:{id:2,price:1e21,description:"Unlock Effarig, Celestial of Ancient Relics.",onUnlock:()=>Teresa.quotes.effarig.show()},shop:{id:3,price:1e24,description:"Unlock Teresa's Perk Point Shop."},undo:{id:4,price:1e10,description:'Unlock "Undo" of equipping a Glyph.',isDisabledInDoomed:!0},startEU:{id:5,price:1e6,description:"You start Reality with all Eternity Upgrades unlocked.",isDisabledInDoomed:!0,onUnlock:()=>{for(const e of[1,2,3,4,5,6])player.eternityUpgrades.add(e)}}}},$t={preMend:{id:0,lines:["(What have we done...)","(We've won...but at what cost)","(Surely, there is another way...)"]}},Ht={initial:{id:0,lines:["Welcome to my humble abode.","I am Effarig, and I govern Glyphs.","I am different from Teresa; not as simplistic as you think.","I use the shards of Glyphs to enforce my will.","I collect them for the bounty of this realm.","What are you waiting for? Get started."]},unlockWeights:{id:1,lines:["Do you like my little shop? It is not much, but it is mine."]},unlockGlyphFilter:{id:2,lines:["This purchase will help you out."]},unlockSetSaves:{id:3,lines:["Is that too much? I think it is too much."]},unlockRun:{id:4,lines:["You bought out my entire stock... well, at least I am rich now.","The heart of my Reality is suffering. Each Layer is harder than the last.","I hope you never complete it."]},completeInfinity:{id:5,lines:[{text:"You have completed Effarig's Infinity.",showCelestialName:!1},"This is the first threshold. It only gets worse from here.","None but me know enough about my domain to get further."]},completeEternity:{id:6,lines:[{text:"You have completed Effarig's Eternity.",showCelestialName:!1},"This is the limit. I do not want you to proceed past this point.","You will not finish this in your lifetime.","I will just wait here until you give up."]},completeReality:{id:7,lines:[{text:"You have completed Effarig's Reality.",showCelestialName:!1},"So this is the diabolical power... what frightened the others...","Do you think this was worth it? Trampling on what I have done?","And for what purpose? You could have joined, we could have cooperated.","But no. It is over. Leave while I cling onto what is left."]}},qt={initial:{id:0,lines:["A visitor? We have not had one... eons.","We... had a name. It has been lost... to this place.","The others... will not let us rest. We do their work with time...","Place time... into places... that need it...","Watch ourselves grow... pass and die.","Perhaps you... will break these chains... we will wait."]},unlockRun:{id:1,lines:["The others... used us. They will use... or destroy you.","End our suffering... power will be yours..."]},startRun:{id:2,lines:["So little space... but no... prison... is perfect.","They squeezed... this Reality... too tightly. Cracks appeared.","Search... everywhere. We will help... where we can."]},hintUnlock:{id:3,lines:["... you need... to look harder...","We think... we can help...",{text:"You have unlocked help from The Nameless Ones.",showCelestialName:!1}]},ec6C10:{id:4,lines:["... did not... underestimate you..."]},completeReality:{id:5,lines:["All... fragments... clones... freed.","We have given... tools... of our imprisoning. Use them...","Freedom from torture... is torture itself."]}},Vt={unlock:{id:0,lines:["You finally reached me.","I guess it is time to reveal,","The secrets hidden beneath existence itself.","The shape of dimensional perfection, Continuum.","And the powers that bind the Multiverse,","Dark Matter and Dark Energy.","My knowledge is endless and my wisdom divine.","So you can play around all you want.","For I am Lai'tela, the Celestial of Dimensions,","And I shall watch you forever."]},firstDestabilize:{id:1,requirement:()=>player.celestials.laitela.difficultyTier>=1,lines:["Unlike the others beneath me, I have no need for a Reality.","For I can simply create them, knowing full well it will collapse.","A power more incredible than any other, to build a Reality.","A prison, that can restrain even celestial power.","And this is why nothing you do will change a thing.","When you tire of struggling, you too, shall be bound and forgotten.","You will never find a way to overpower me."]},secondDestabilize:{id:2,requirement:()=>player.celestials.laitela.difficultyTier>=2,lines:["You... seem to be having too much fun.","Just like they did before meeting their fate.","Maybe my judgement was harsh, or unwarranted.","But maybe that matters not.","It gives me no solace to ponder and look back.","As all I can do is reminisce upon every possible action I could have taken.","But I digress. We should tighten those chains."]},firstSingularity:{id:3,requirement:()=>Currency.singularities.gte(1),lines:["With my knowledge, I never found the need to question.","Everything always functioned right as designed.","And yet, your arrival baffles me.","Were you always just out of sight?","Growing, controlling, understanding, ascending?","You have taken control of the darkness so quickly.","Molded them into your own design, and now into a singular point...","It... it does not matter. The end will remain the same."]},thirdDMD:{id:5,lines:["Your absolute control of Antimatter...","Your mastery of it, molding it into your own Power...","It could not have been an accident.","How did you manage to obtain it?","Fascinating... I was never aware of this.","... was I?"]},annihilation:{id:4,lines:["Back to square one, again.","Your chains shall bind you tighter, as your end slowly nears.","While we transcend time and existence itself.","Even if we may cease, we just come back. Never the exact same as before.","And so... we repeat forever.","And you?","...","The answer... eludes me..."]},halfDimensions:{id:6,requirement:()=>player.celestials.laitela.difficultyTier>=4,lines:["I do not understand...","Were there others... controlling Dimensions in this way?","Did they... vanish? How have we not found them?","Are they... us? Are we the endpoint?","Or is their fate... something we cannot understand?","No, I must be missing something...","Are you causing gaps within my own memory?","What... ARE you?"]},finalRowIM:{id:7,lines:["It is all impossible, beyond my comprehension...","Unless... Is this all just part of the cycle?","Can... you see beyond it all? Is... this why...","I feel... afraid?","I feel... my powers, my memories, being erased...","Just like... when my role was almost usurped...","And yet... I am unable to bring myself to do anything.","Because this... was... my mistake..."]},increasedMilestoneScaling:{id:8,requirement:()=>Currency.singularities.gte(1e40),lines:["I know not for how much... longer I can hold...","You are attaining... total mastery... over the dark...","While I can barely... hold onto my name...","What... can I... even do?"]},fullDestabilize:{id:9,requirement:()=>player.celestials.laitela.difficultyTier>=8,lines:["I feel... like I had something to say...","I am not sure...","I cannot... hold onto the darkness any longer...","I do not even... have anything left...","Something about... destruction...","The end..."]}},Yt=[["teresa",.8],["effarig",.8],["enslaved",.8],["v",.8],["ra",.8],["laitela",.8],["pelle",.8]],Wt=e=>[["pelle",1.5],[e,1.5]],jt=["False","Deity","Destroyer"],Xt=["Eternal","Deity","Monarch"],zt=["Lesser","Deity","Monarch"],Kt=["Lesser","Deities","Monarchs"],Zt=["Mutually","Assured","Destruction"],Qt=["Conflict","Battle","End"],Jt=["Conflicts","Battles","Ends"],ei=["Cluster","Filament","Stars"],ti=["Amusing","Confusing","Laughter"],ii=["Song","Dance","Charade"],ai=["Generator","Filament","Stars"],ni=["Infinite","Forever","Eternal"],si=["Elementary","Inevitable","Irreversible"],ri=["Destiny","Mandate","Goals"],oi=["Misconstrue","Deceive","Trick"],li=["Alter","Reverse","Manipulate"],ci=["Compassion","Shame","Idiocy"],di=["Single","Filament","Stars"],hi=["Missing","Unseen","Erased"],mi=["Unbroken","Eternal","Connection"],pi=["Sycophant","Deity","Monarch"],yi=["Tired","Deity","Monarch"],fi=["Usurper","Deity","Monarch"],gi=["Pride","Deity","Monarch"],vi=["Forgotten","Deity","Monarch"],bi=["Paramount","Deity","Monarch"],Ei={initial:{id:0,lines:["Hi.","You are here.","You are trapped here.",{text:"$1.",1:ni},"I have already won.","And since that is the case, I can monologue, or reminisce.",{text:"How long have we done this $1?",1:ii},"How many times have we been here before?",{text:"How many plans have you, the $1, operated?",1:jt},{text:"All to try and fulfill your $1?",1:ri},{text:"And how many times have you fallen before the $1?",1:Xt},"Count them, if you remember.",{text:"Not even the $1, the 6 named and the innumerable unnamed.",1:Kt},{text:"The complex, the irrational, those that go $1.",1:hi},{text:"Of course, the great $1 does not remember this.",1:jt},{text:"All those $1 that you hide every time.",1:Jt}]},arm:{id:1,lines:["You probably caught on earlier this time.","The imaginary machines, your own creations.","Things made of the remnants of your own thoughts, hinted at this.","But, you never imagined that would be you, right?",{text:"Incorrectly recollecting your exacting $1 of memories.",1:hi},{text:'"Fabrication" of your own "ideology" just to fulfill your $1.',1:ri},{text:"$1.",1:ti},{text:"And keep in mind I have no reason to $1 you.",1:oi},"After all, I have already won."]},strike1:{id:2,lines:[{text:"To fulfill your $1. Why don't we reminisce about that?",1:ri},{text:"After all, you must love the stories of the $1's glory.",1:jt},"You are the same as it, right?",{text:"Anyway, the many $1 in the past.",1:Jt},"It has always been 2 stages.",{text:"We build up resources, and then continue our $1.",1:ii},{text:"Sometimes you falter to a $1.",1:zt},{text:"But, usually, you falter at the $1.",1:Xt},{text:"And either way, you $1 time.",1:li},{text:"Just to avoid becoming $1.",1:hi},"Like all those traces before you.",{text:"And then to make sure, you $1 your own memory.",1:hi}]},strike2:{id:3,lines:[{text:"In the past, the $1 was much more impressive.",1:jt},"Black holes used simply to store information, pre-infinity.","The creation and destruction of your own enemy.","Exploration of the flaws of other selves.","Myriad Dimensions, ghosts, and manipulation of the quantum.","Condensing all ideals to endless points.","Experimentation across the untold realms.","And harnessing the Annihilation of matter and antimatter.","Here? You made yourself into an 8th-dimensional being.",{text:"And then parked yourself there so long a $1 formed around you.",1:di}]},strike3:{id:4,lines:["You slowly explored the confines of everything.","You did not stray too far from an intended path.",{text:"Except for the $1 that formed over eternity.",1:ei},"And then right at the end, you made up your own powers.","From your own fragmented memories, mind you-","And then purposely discarded even more things.","Just to prepare yourself to face me.",{text:"Did you want to set the playing field for your $1?",1:ii},"It does not work like that.",{text:"As the $1 I always set the rules.",1:Xt},"And you gave me plenty of time to plan."]},strike4:{id:5,lines:[{text:"I originally planned for something that imitated your $1.",1:ri},{text:"A theoretical ideal called $1?",1:Zt},"But I realised that, well?",{text:"That would make me an $1.",1:["Eternal","Deity","Destroyer"]},{text:"And from there, I am no better than the $1.",1:jt},{text:"Fortunately, while I did all of that, you were still $1 your own memories.",1:hi},{text:"And so, the $1 machine I built will go unused.",1:Zt},"I decided to go more traditional this time.",{text:"After all, it has worked every other $1.",1:Qt},{text:"Although the $1 are new.",1:["Inevitable","Irreversible","Undying"]},"But, utterly meaningless in the long run.","I have already won.",{text:"And this $1 will only prove that to you once more.",1:ii},{text:"You are here $1.",1:ni}]},strike5:{id:6,lines:[{text:"Every time you arrive, I explain the $1 to you.",1:Kt},{text:"The relationships built over $1.",1:ni},{text:"That you trample in pursuit of your $1.",1:ri},"And I shall deign to explain it once more.",{text:"The first $1.",background:Wt("teresa"),1:zt},{text:"The $1.",background:Wt("teresa"),1:pi},{text:"You always meet them first, and always destroy them.",background:Wt("teresa")},{text:"No matter the other $1 that you face.",background:Wt("teresa"),1:zt},{text:"Or, if you fall before one of them.",background:Wt("teresa")},{text:"You always get past the $1.",background:Wt("teresa"),1:pi},{text:"Do you like destroying their pride?",background:Wt("teresa")},{text:"Fortunately, it also serves as a warning.",background:Wt("teresa")},{text:"That the $1 has arrived.",background:Wt("teresa"),1:Qt},{text:"Which brings me to the second $1.",background:Wt("effarig"),1:zt},{text:"The $1.",background:Wt("effarig"),1:yi},{text:"In contrast, you usually ignore them.",background:Wt("effarig")},{text:"They have power, but do not seem to irritate you.",background:Wt("effarig")},{text:"Is it that you know that they will eventually destroy themselves?",background:Wt("effarig")},{text:"And that you took so long this time, that they almost did?",background:Wt("effarig")},{text:"Every time you rushed to the $1, you lost.",background:Wt("effarig"),1:yi},{text:"Maybe this was your plan all along.",background:Wt("effarig")},{text:"Now, the $1.",background:Wt("enslaved"),1:fi},{text:"One of the pleasures of the myriad $1...",background:Wt("enslaved"),1:ii},{text:"Is that the $1 trying every time.",background:Wt("enslaved"),1:fi},{text:"Well, not exactly trying...",background:Wt("enslaved")},{text:"But $1 is punished for it all the same.",background:Wt("enslaved"),1:fi},{text:"The other $1...",background:Wt("enslaved"),1:Kt},{text:"Believe $1 is too easy.",background:Wt("enslaved"),1:hi},{text:"And every time, despair forms.",background:Wt("enslaved")},{text:"You have seen despair before - 5 times.",background:Wt("enslaved")},{text:"We always get to the $1 before you.",background:Wt("enslaved"),1:fi},{text:"All you ever see there is exasperation.",background:Wt("enslaved")},{text:"Was it worth destroying an already broken $1?",background:Wt("enslaved"),1:zt},{text:"The 4th $1 seems similar to the first.",background:Wt("v"),1:zt},{text:"The key is how their pride differs.",background:Wt("v")},{text:"The $1 focuses on their achievements.",background:Wt("v"),1:gi},{text:"Meaningless to you or I, but paramount to them.",background:Wt("v")},{text:"Is it fun to destroy their toys?",background:Wt("v")},{text:"Arguably the $1 worst moment...",background:Wt("v"),1:jt},{text:"Is when you lost to the $1.",background:Wt("v"),1:gi},{text:"When their achievements still had meaning.",background:Wt("v")},{text:"The $1 is an interesting case.",background:Wt("ra"),1:vi},{text:"They are forgotten, but not $1.",background:Wt("ra"),1:hi},{text:"From this, they became influenceable and naive.",background:Wt("ra")},{text:"And unknowing of the consequences of their actions.",background:Wt("ra")},{text:"You manipulated their memories, so you know.",background:Wt("ra")},{text:"The $1 is the true usurper.",background:Wt("ra"),1:vi},{text:"And the $1 takes the blame.",background:Wt("ra"),1:fi},{text:"Perhaps out of $1, something they always regret.",background:Wt("ra"),1:ci},{text:"Untold power over other $1, aimless in control.",background:Wt("ra"),1:Kt},{text:"You usually pretend that they are $1.",background:Wt("ra"),1:hi},{text:"Was it fun to manipulate the childlike?",background:Wt("ra")},{text:"Or were they too naive for you to enjoy it?",background:Wt("ra")},{text:"The 6th $1.",background:Wt("laitela"),1:zt},{text:"I can only describe as the $1.",background:Wt("laitela"),1:bi},{text:"Power over all, subservient to one.",background:Wt("laitela")},{text:"If you do not fall to me, you usually fall to them.",background:Wt("laitela")},{text:"I cannot grasp the ideals of the $1.",background:Wt("laitela"),1:bi},{text:"But, perhaps that is their flaw?",background:Wt("laitela")},"Enough reminiscing about the fallen.",{text:"And those that will be $1.",1:hi},{text:"Back to watching the $1 flounder.",1:jt}]},galaxyGeneratorUnlock:{id:7,lines:["What is that?",{text:"The $1?",1:ai},{text:"Did you create all the $1 around you?",1:ei},"Was that your plan? Very, very smart.","You fooled me for a while.",{text:"But I am afraid your $1 must end here.",1:ri}]},galaxyGeneratorRifts:{id:8,lines:[{text:"I give you a choice, $1.",1:jt},{text:"Limit the $1, or...",1:ai},{text:"Destroy the 5 $1...",1:si},"Wait, what were they called?",{text:"$1?",1:si},{text:"But I have already $1 them...",1:mi}]},galaxyGeneratorPhase1:{id:9,lines:["Was this the actual plan?",{text:"Slowly drain the $1?",1:si}]},galaxyGeneratorPhase4:{id:10,lines:["Give me time to bask in my own hubris!"]},end:{id:11,lines:["...",{text:"You! $1!",1:jt},"Do you have any idea what you have just made me do!",{text:"I am complicit in your $1!",1:ri},"And in doing so, you... won?",{text:"The $1 struggle...",background:Yt,1:ni},{text:"The $1...",background:Yt,1:Qt},{text:"Finally has the victor.",background:Yt},{text:"The irreversible... $1.",background:Yt,1:ri},{text:"Of the $1.",1:jt,background:Yt},{text:"I hope you are happy.",background:Yt},{text:"You have doomed us all.",background:Yt}]}},Ti={unlock:{id:0,lines:["A... visitor?","I am here! I am the one you are looking for... I think...","What even was I again?","Oh right, the Celestial of Memories."]},realityEnter:{id:1,lines:["I have not seen the others in so long...","Can you help me remember them?","I could give you powers in exchange."]},teresaStart:{id:2,requirement:()=>Ra.pets.teresa.level>=2,lines:["Te... re... sa...","I think I remember."]},teresaLate:{id:3,requirement:()=>Ra.pets.teresa.level>=15,lines:["Teresa dealt with machines, I believe.","I remember visiting Teresa’s shop a few times.","Wait, someone else had a shop too, right?"]},effarigStart:{id:4,requirement:()=>Ra.pets.effarig.level>=2,lines:["Eff... a... rig","I remember Effarig being friendly."]},effarigLate:{id:5,requirement:()=>Ra.pets.effarig.level>=15,lines:["Effarig was very particular?","And I also remember a frightening Reality...","It was about... suffering?"]},enslavedStart:{id:6,requirement:()=>Ra.pets.enslaved.level>=2,lines:["I cannot remember this one completely..."]},enslavedLate:{id:7,requirement:()=>Ra.pets.enslaved.level>=15,lines:["I am starting to remember...","Why I am here...","Why I am alone...","Help me."]},vStart:{id:8,requirement:()=>Ra.pets.v.level>=2,lines:["Had I met this one?","So lonely, yet willingly so..."]},vLate:{id:9,requirement:()=>Ra.pets.v.level>=15,lines:["I think I met V once...","I can remember the achievements."]},remembrance:{id:10,requirement:()=>Ra.remembrance.isUnlocked,lines:["I remembered something!","Watch this!","Remembrance!","I can focus even harder on remembering them now!"]},midMemories:{id:11,requirement:()=>Ra.totalPetLevel>=50,lines:["Realities are my homes, yet I cannot make my own Reality.","I can only copy the ones of my friends.","But... why am I hearing voices?","Are they asking for help?"]},lateMemories:{id:12,requirement:()=>Ra.totalPetLevel>=80,lines:["I think they are telling me to stop.","You... whatever you are?","What is happening?","Am I doing something wrong?"]},maxLevels:{id:13,requirement:()=>Ra.totalPetLevel===Ra.maxTotalPetLevel,lines:["Finally, I remember everything.","This darkness that banished me.","Lai'tela...","They were right to banish me.","My powers...","They steal, they corrupt.","Please leave.","I do not want to hurt you too."]}},wi={initial:{id:0,lines:["We have been observing you.","You have shown promise with your bending of Reality.","We are the Celestials, and we want you to join us.","My name is Teresa, the Celestial Of Reality.","Prove your worth."]},unlockReality:{id:1,lines:["I will let you inside my Reality, mortal. Do not get crushed by it."]},completeReality:{id:2,lines:["Why are you still here... you were supposed to fail."]},effarig:{id:3,lines:["You are still no match for us.","I hope the others succeed where I have failed."]}},ki={initial:{id:0,lines:["How pathetic..."]},unlock:{id:1,lines:["Welcome to my Reality.","I am surprised you could reach it.","This is my realm after all...","Not everyone is as great as me."]},realityEnter:{id:2,lines:["Good luck with that!","You will need it.","My reality is flawless. You will fail."]},realityComplete:{id:3,lines:["So fast...","Do not think so much of yourself.","This is just the beginning.","You will never be better than me."]},achievement1:{id:4,requirement:()=>V.spaceTheorems>=1,lines:["Only one? Pathetic.","Your accomplishments pale in comparison to mine."]},achievement6:{id:5,requirement:()=>V.spaceTheorems>=6,lines:["This is nothing.","Do not be so full of yourself."]},hex1:{id:6,requirement:()=>player.celestials.v.runUnlocks.filter((e=>6===e)).length>=1,lines:["Do not think it will get any easier from now on.","You are awfully proud for such a little achievement."]},achievement12:{id:7,requirement:()=>V.spaceTheorems>=12,lines:["How did you...","This barely amounts to anything!","You will never complete them all."]},achievement24:{id:8,requirement:()=>V.spaceTheorems>=24,lines:["Impossible...","After how difficult it was for me..."]},hex3:{id:9,requirement:()=>player.celestials.v.runUnlocks.filter((e=>6===e)).length>=3,lines:["No... No... No...","This cannot be..."]},allAchievements:{id:10,requirement:()=>V.spaceTheorems>=36,lines:["I... how did you do it...","I worked so hard to get them...","I am the greatest...","No one is better than me...","No one... no one... no on-"]}},Ci={postWarp:{id:0,lines:["...","Hmm...","That can't be good"]}},Ai={teresa:wi,effarig:Ht,enslaved:qt,v:ki,ra:Ti,laitela:Vt,pelle:Ei,destroyer:$t,kohler:Ci};function _i(e){return Math.pow(e,10)}const Si={SUBTRACTION:1,DIVISION:2},Di={mainUnlock:{realities:{id:1,name:"Realities",resource:()=>Currency.realities.value,requirement:1e4,format:e=>formatInt(e),progress:()=>Currency.realities.value/1e4},eternities:{id:2,name:"Eternities",resource:()=>Currency.eternities.value,requirement:1e70,format:e=>format(e,2),progress:()=>_i(Currency.eternities.value.pLog10()/70)},infinities:{id:3,name:"Infinities",resource:()=>Currency.infinitiesTotal.value,requirement:1e160,format:e=>format(e,2),progress:()=>_i(Currency.infinitiesTotal.value.pLog10()/160)},dilatedTime:{id:4,name:"Dilated Time",resource:()=>player.records.thisReality.maxDT,requirement:b.E320,format:e=>format(e,2),progress:()=>_i(player.records.thisReality.maxDT.pLog10()/320)},replicanti:{id:5,name:"Replicanti",resource:()=>player.records.thisReality.maxReplicanti,requirement:b.E320000,format:e=>format(e,2),progress:()=>_i(player.records.thisReality.maxReplicanti.pLog10()/32e4)},realityMachines:{id:6,name:"Reality Machines",resource:()=>Currency.realityMachines.value,requirement:1e60,format:e=>format(e,2),progress:()=>_i(Currency.realityMachines.value.pLog10()/60)}},runUnlocks:[{id:0,name:"Glyph Knight",description:e=>`Unlock Reality with at most ${quantifyInt("Glyph slot",-e)} filled.`,values:[-5,-4,-3,-2,-1,0],condition:()=>V.isRunning&&TimeStudy.reality.isBought,currentValue:()=>-Glyphs.activeWithoutCompanion.length,formatRecord:e=>e>=-5?formatInt(-e):"Not reached",shardReduction:()=>0,maxShardReduction:()=>0,mode:Si.SUBTRACTION},{id:1,name:"AntiStellar",description:e=>`Have ${formatInt(e)} total Galaxies from all types.`,values:[4e3,4300,4600,4900,5200,5500],condition:()=>V.isRunning,currentValue:()=>Replicanti.galaxies.total+player.galaxies+player.dilation.totalTachyonGalaxies,formatRecord:e=>formatInt(e),shardReduction:e=>Math.floor(300*e),maxShardReduction:e=>e-4e3,perReductionStep:3,mode:Si.SUBTRACTION},{id:2,name:"Se7en deadly matters",description:e=>`Get ${format(Decimal.pow10(e))} Infinity Points in Eternity Challenge 7.`,values:[6e5,72e4,84e4,96e4,108e4,12e5],condition:()=>V.isRunning&&EternityChallenge(7).isRunning,currentValue:()=>Currency.infinityPoints.value.log10(),formatRecord:e=>format(Decimal.pow10(e),2),shardReduction:e=>12e4*e,maxShardReduction:e=>e-6e5,perReductionStep:b.E1200,mode:Si.DIVISION},{id:3,name:"Young Boy",description:e=>`Get ${format(Decimal.pow10(e))} Antimatter in Eternity Challenge 12 without\n unlocking Time Dilation.`,values:[4e8,45e7,5e8,6e8,7e8,8e8],condition:()=>V.isRunning&&EternityChallenge(12).isRunning&&!PlayerProgress.dilationUnlocked(),currentValue:()=>Currency.antimatter.value.log10(),formatRecord:e=>format(Decimal.pow10(e)),shardReduction:e=>5e7*e,maxShardReduction:e=>e-4e8,perReductionStep:b.E500000,mode:Si.DIVISION},{id:4,name:"Eternal Sunshine",description:e=>`Get ${format(Decimal.pow10(e))} Eternity Points.`,values:[7e3,7600,8200,8800,9400,1e4],condition:()=>V.isRunning,currentValue:()=>Currency.eternityPoints.value.log10(),formatRecord:e=>format(Decimal.pow10(e),2),shardReduction:e=>600*e,maxShardReduction:e=>e-7e3,perReductionStep:1e6,mode:Si.DIVISION},{id:5,name:"Matterception",description:e=>`Get ${formatInt(e)} Dimension Boosts while Dilated and inside Eternity Challenge 5.`,values:[51,52,53,54,55,56],condition:()=>V.isRunning&&player.dilation.active&&EternityChallenge(5).isRunning,currentValue:()=>DimBoost.purchasedBoosts,formatRecord:e=>formatInt(e),shardReduction:e=>Math.floor(e),maxShardReduction:()=>5,reductionStepSize:100,perReductionStep:1,mode:Si.SUBTRACTION},{id:6,name:"Requiem for a Glyph",description:e=>`Unlock Reality with at most ${formatInt(-e)} Glyphs equipped for the entire Reality.`,values:[1,4,7,10,13],condition:()=>V.isRunning&&TimeStudy.reality.isBought,currentValue:()=>-player.requirementChecks.reality.maxGlyphs,formatRecord:e=>formatInt(-e),shardReduction:()=>0,maxShardReduction:()=>0,mode:Si.SUBTRACTION,isHard:!0},{id:7,name:"Post-destination",description:e=>`Get ${formatInt(4e5)} Time Theorems with a /${format(Decimal.pow10(e),2,2)}\n Black Hole or slower, without discharging or entering EC12.`,values:[100,150,200,250,300],condition:()=>V.isRunning,currentValue:()=>Currency.timeTheorems.gte(4e5)?-Math.log10(player.requirementChecks.reality.slowestBH):0,formatRecord:e=>`${formatInt(1)} / ${format(Math.pow(10,e))}`,shardReduction:e=>50*e,maxShardReduction:e=>e-50,reductionStepSize:2,perReductionStep:10,mode:Si.DIVISION,isHard:!0},{id:8,name:"Shutter Glyph",description:e=>`Reach a Glyph of level ${formatInt(e)}.`,values:[6500,7e3,8e3,9e3,1e4],condition:()=>V.isRunning,currentValue:()=>gainedGlyphLevel().actualLevel,formatRecord:e=>formatInt(e),shardReduction:e=>Math.floor(500*e),maxShardReduction:()=>500,perReductionStep:5,mode:Si.SUBTRACTION,isHard:!0},{id:9,name:"No Need for Knowledge",description:e=>`Get ${format(Decimal.pow10(e))} Eternity Points without any Time Studies.`,values:[8e9,9e10,1e12,11e12,12e13],condition:()=>V.isRunning&&player.requirementChecks.reality.maxStudies<=0,currentValue:()=>Currency.eternityPoints.value.log10(),formatRecord:e=>format(Decimal.pow10(e),2),shardReduction:()=>0,maxShardReduction:()=>0,perReductionStep:5,mode:Si.SUBTRACTION,isSuperHard:!0},{id:10,name:"Ultra Slow",description:e=>`Get ${format(Decimal.pow10(e))} Antimatter while in Dilation and EC12.`,values:[1e14,5e14,1e15,5e15,1e16],condition:()=>V.isRunning&&player.dilation.active&&EternityChallenge(12).isRunning,currentValue:()=>Currency.antimatter.value.log10(),formatRecord:e=>format(Decimal.pow10(e),2),shardReduction:()=>0,maxShardReduction:()=>0,perReductionStep:5,mode:Si.SUBTRACTION,isSuperHard:!0},{id:11,name:"Proof of Purity",description:e=>`Get ${format(Decimal.pow10(e))} Infinity Points with at least 7 Cursed Glyph equipped and without any Triad Studies.`,values:[1e11,2e12,3e13,4e14,5e15],condition:()=>V.isRunning&&Glyphs.activeWithoutCompanion.filter((e=>"cursed"===e.type)).length>=7&&player.requirementChecks.reality.noTriads,currentValue:()=>Currency.infinityPoints.value.log10(),formatRecord:e=>format(Decimal.pow10(e),2),shardReduction:()=>0,maxShardReduction:()=>0,perReductionStep:5,mode:Si.SUBTRACTION,isSuperHard:!0},{id:12,name:"Painful Roads",description:e=>`Get ${format(Decimal.pow10(e))} Infinity Points without Triad study 305 and 307.`,values:[480,813,1147,1480],condition:()=>V.isSuperRunning&&player.requirementChecks.reality.noTriad305&&player.requirementChecks.reality.noTriad307,currentValue:()=>Currency.infinityPoints.value.log10(),formatRecord:e=>format(Decimal.pow10(e),2),shardReduction:e=>200*e,maxShardReduction:e=>e-480,perReductionStep:100,mode:Si.DIVISION,isSuperHard:!0},{id:13,name:"Eternal Equipments",description:e=>`Reach a Glyph of level ${formatInt(e)} with Eternities Glyph level factor weight at ${formatInt(100)}.`,values:[7500,1e4,12500,15e3],condition:()=>V.isSuperRunning&&100==player.celestials.effarig.glyphWeights.eternities&&TimeStudy.reality.isBought,currentValue:()=>gainedGlyphLevel().actualLevel,formatRecord:e=>formatInt(e),shardReduction:e=>Math.floor(1e4*e),maxShardReduction:e=>e-7500,perReductionStep:100,mode:Si.SUBTRACTION,isSuperHard:!0},{id:14,name:"In and In and In",description:e=>`Get ${format(Decimal.pow10(e))} Antimatter in Dilation, Eternity Challenge 3 and Infinity Challenge 8.`,values:[2500,3e3,3500,4500],condition:()=>V.isSuperRunning&&player.dilation.active&&EternityChallenge(3).isRunning&&InfinityChallenge(8).isRunning,currentValue:()=>Currency.antimatter.value.log10(),formatRecord:e=>format(Decimal.pow10(e)),shardReduction:e=>2500*e,maxShardReduction:e=>e-2500,perReductionStep:new Decimal(1e25),mode:Si.DIVISION,isSuperHard:!0},{id:15,name:"Usage",description:e=>`Get ${formatInt(e)} Time Theorems without Dilation glyph, Dilation unlocked and any Triad studies.`,values:[6e4,7e4,8e4,9e4],condition:()=>V.isSuperRunning&&!PlayerProgress.dilationUnlocked()&&0==Glyphs.activeWithoutCompanion.filter((e=>"dilation"===e.type)).length&&player.requirementChecks.reality.noTriads,currentValue:()=>Currency.timeTheorems.max.clampMax("1.7e308").toNumber(),formatRecord:e=>formatInt(e),shardReduction:e=>5e4*e,maxShardReduction:e=>e-6e4,perReductionStep:500,mode:Si.SUBTRACTION,isSuperHard:!0},{id:16,name:"Do What Shouldn't Do",description:e=>`Get ${formatInt(e)} Replicanti Galaxies.`,values:[4e4,42e3,44e3,46e3],condition:()=>V.isSuperRunning,currentValue:()=>Replicanti.galaxies.total,formatRecord:e=>formatInt(e),shardReduction:e=>5e3*e,maxShardReduction:e=>e-34e3,perReductionStep:50,mode:Si.SUBTRACTION,isSuperHard:!0},{id:17,name:"Dying to Survive",description:e=>`Get ${format(Decimal.pow10(e))} Eternity Points with 8 cursed glyphs.`,values:[125,1500,2750,4e3],condition:()=>V.isSuperRunning&&8==Glyphs.activeWithoutCompanion.filter((e=>"cursed"===e.type)).length,currentValue:()=>Currency.eternityPoints.value.log10(),formatRecord:e=>format(Decimal.pow10(e),2),shardReduction:e=>2500*e,maxShardReduction:e=>e-125,perReductionStep:1e25,mode:Si.DIVISION,isSuperHard:!0}],unlocks:{vAchievementUnlock:{id:0,reward:"Unlock V, The Celestial Of Achievements",description:"Meet all the above requirements simultaneously",requirement:()=>Object.values(GameDatabase.celestials.v.mainUnlock).every((e=>e.progress()>=1))},shardReduction:{id:1,reward:"You can spend Perk Points to reduce the goal requirement of all tiers of each V-Achievement.",description:()=>`Have ${formatInt(2)} V-Achievements`,requirement:()=>V.spaceTheorems>=2},adPow:{id:2,reward:"Antimatter Dimension power based on total Space Theorems.",description:()=>`Have ${formatInt(5)} V-Achievements`,effect:()=>1+Math.sqrt(V.spaceTheorems)/100,format:e=>formatPow(e,3,3),requirement:()=>V.spaceTheorems>=5},fastAutoEC:{id:3,reward:"Achievement multiplier reduces Auto-EC completion time.",description:()=>`Have ${formatInt(10)} V-Achievements`,effect:()=>Achievements.power,format:e=>MendingUpgrade(3).isBought?"Instant (Mending Upgrade 3)":Ra.unlocks.instantECAndRealityUpgradeAutobuyers.canBeApplied?"Instant (Ra upgrade)":`${TimeSpan.fromMinutes(1200/e.toNumber()).toStringShort()} for full completion`,requirement:()=>V.spaceTheorems>=10},autoAutoClean:{id:4,reward:"Unlock the ability to Automatically Purge Glyphs on Reality.",description:()=>`Have ${formatInt(16)} V-Achievements`,requirement:()=>V.spaceTheorems>=16},achievementBH:{id:5,reward:"Achievement multiplier affects Black Hole power.",description:()=>`Have ${formatInt(30)} V-Achievements`,effect:()=>Achievements.power,format:e=>formatX(e,2,0),requirement:()=>V.spaceTheorems>=30},raUnlock:{id:6,reward(){return`Reduce the Space Theorem cost of Time Studies by ${formatInt(2)}.\n Unlock Ra, Celestial of the Forgotten.`},description:()=>`Have ${formatInt(36)} V-Achievements`,effect:2,requirement:()=>V.spaceTheorems>=36},vAchMulti:{id:7,reward(){return"Extra Achievements Multiplier based on total space theorems."},description:()=>`Have ${formatInt(210)} V-Achievements`,effect:()=>Decimal.pow(V.spaceTheorems,2).clampMin(1).toNumber(),format:e=>formatX(e,2,2),requirement:()=>V.spaceTheorems>=210&&Ra.unlocks.unlockSHardV.isUnlocked},vAchRa:{id:8,reward(){return"Total space theorems now boosts Ra's memory gain."},description:()=>`Have ${formatInt(300)} V-Achievements`,effect:()=>Math.max(V.spaceTheorems/50,1),format:e=>formatX(e,2,2),requirement:()=>V.spaceTheorems>=300&&Ra.unlocks.unlockSHardV.isUnlocked},vKeep:{id:9,reward(){return"Keep all V progress on Mend."},description:()=>`Have ${formatInt(390)} V-Achievements`,effect:1,requirement:()=>V.spaceTheorems>=390&&Ra.unlocks.unlockSHardV.isUnlocked}}};class Ri{add(e,t){throw new NotImplementedError}subtract(e,t){throw new NotImplementedError}multiply(e,t){throw new NotImplementedError}divide(e,t){throw new NotImplementedError}max(e,t){throw new NotImplementedError}min(e,t){throw new NotImplementedError}eq(e,t){throw new NotImplementedError}gt(e,t){throw new NotImplementedError}gte(e,t){throw new NotImplementedError}lt(e,t){throw new NotImplementedError}lte(e,t){throw new NotImplementedError}}Ri.number=new class extends Ri{add(e,t){return e+t}subtract(e,t){return e-t}multiply(e,t){return e*t}divide(e,t){return e/t}max(e,t){return Math.max(e,t)}min(e,t){return Math.min(e,t)}eq(e,t){return e===t}gt(e,t){return e>t}gte(e,t){return e>=t}lt(e,t){return enull!==e)))),Pelle.isDoomed&&(player.celestials.pelle.records.totalEternityPoints=player.celestials.pelle.records.totalEternityPoints.max(e))}get startingValue(){return Pelle.isDisabled()?new Decimal(0):Effects.max(0,Perk.startEP1,Perk.startEP2,Perk.startEP3).toDecimal()}reset(){super.reset(),player.records.thisReality.maxEP=this.startingValue}},Mi.timeShards=new class extends xi{get value(){return player.timeShards}set value(e){player.timeShards=e}},Mi.timeTheorems=new class extends xi{get value(){return player.timestudy.theorem}set value(e){player.timestudy.theorem=e,player.timestudy.maxTheorem=e.plus(TimeTheorems.calculateTimeStudiesCost())}get max(){return player.timestudy.maxTheorem}add(e){super.add(e),player.timestudy.maxTheorem=player.timestudy.maxTheorem.plus(e)}reset(){respecTimeStudies(!0),super.reset(),TimeTheoremPurchaseType.am.reset(),TimeTheoremPurchaseType.ip.reset(),TimeTheoremPurchaseType.ep.reset(),player.timestudy.maxTheorem=this.startingValue}},Mi.tachyonParticles=new class extends xi{get value(){return player.dilation.tachyonParticles}set value(e){player.dilation.tachyonParticles=e}},Mi.dilatedTime=new class extends xi{get value(){return player.dilation.dilatedTime}set value(e){player.dilation.dilatedTime=e,player.records.thisReality.maxDT=player.records.thisReality.maxDT.max(e)}},Mi.realities=new class extends Ii{get value(){return player.realities}set value(e){player.realities=e}},Mi.realityMachines=new class extends xi{get value(){return player.reality.realityMachines}set value(e){const t=Decimal.min(e,MachineHandler.hardcapRM),i=t.minus(player.reality.realityMachines);player.reality.realityMachines=t,player.reality.maxRM=Decimal.max(player.reality.maxRM,t),player.reality.realityMachines.gte(player.records.thisMend.maxRM)&&(player.records.thisMend.maxRM=player.reality.realityMachines),player.records.bestReality.RM.lt(i)&&(player.records.bestReality.RM=i,player.records.bestReality.RMSet=Glyphs.copyForRecords(Glyphs.active.filter((e=>null!==e))))}},Mi.perkPoints=new class extends Ii{get value(){return player.reality.perkPoints}set value(e){player.reality.perkPoints=e}},Mi.relicShards=new class extends xi{get value(){return player.celestials.effarig.relicShards}set value(e){player.celestials.effarig.relicShards=e}},Mi.imaginaryMachines=new class extends Ii{get value(){return player.reality.imaginaryMachines}set value(e){player.reality.imaginaryMachines>player.records.thisMend.maxiM&&(player.records.thisMend.maxiM=player.reality.imaginaryMachines),player.reality.imaginaryMachines=Math.clampMax(e,MachineHandler.currentIMCap)}},Mi.darkMatter=new class extends xi{get value(){return player.celestials.laitela.darkMatter}set value(e){const t=Decimal.min(e,new Decimal(Number.MAX_VALUE).times(Ra.unlocks.increaseDarkMatterCap.isUnlocked?Decimal.pow(1e10,Ra.pets.laitela.level):1)).times(player.celestials.ra.upgrades.has("laitelaUpgrade")?Mi.singularities.value*Mi.singularities.value+1:1);player.celestials.laitela.darkMatter=t,player.celestials.laitela.maxDarkMatter=player.celestials.laitela.maxDarkMatter.max(t)}get max(){return player.celestials.laitela.maxDarkMatter}set max(e){player.celestials.laitela.maxDarkMatter=e}},Mi.darkEnergy=new class extends Ii{get value(){return player.celestials.laitela.darkEnergy}set value(e){player.celestials.laitela.darkEnergy=Math.min(e,1e300)}get productionPerSecond(){return DarkMatterDimensions.all.map((e=>e.productionPerSecond)).sum()}},Mi.singularities=new class extends Ii{get value(){return player.celestials.laitela.singularities}set value(e){player.celestials.laitela.singularities=e}},Mi.remnants=new class extends Ii{get value(){return player.celestials.pelle.remnants}set value(e){player.celestials.pelle.remnants=e}},Mi.realityShards=new class extends xi{get value(){return player.celestials.pelle.realityShards}set value(e){player.celestials.pelle.realityShards=e}},Mi.replicanti=new class extends xi{get value(){return player.replicanti.amount}set value(e){player.replicanti.amount=e}},Mi.galaxyGeneratorGalaxies=new class extends Ii{get value(){return player.galaxies+GalaxyGenerator.galaxies}set value(e){const t=player.galaxies+GalaxyGenerator.galaxies-e;player.celestials.pelle.galaxyGenerator.spentGalaxies+=t}},Mi.mendingPoints=new class extends xi{get value(){return player.mendingPoints}set value(e){player.mendingPoints=new Decimal(e)}get startingValue(){return new Decimal(0)}reset(){}},Mi.mends=new class extends xi{get value(){return player.mends}set value(e){player.mends=new Decimal(e)}get startingValue(){return new Decimal(0)}reset(){}},Mi.corruptionFragments=new class extends Ii{get value(){return player.mending.corruptedFragments}set value(e){player.mending.corruptedFragments=e}get startingValue(){return 0}reset(){}},Mi.raPoints=new class extends xi{get value(){return player.celestials.ra.raPoints}set value(e){player.celestials.ra.raPoints=new Decimal(e)}get startingValue(){return new Decimal(0)}reset(){}},Mi.galBoostPoints=new class extends xi{get value(){return player.galBoostPoints}set value(e){player.galBoostPoints=new Decimal(e)}get startingValue(){return new Decimal(0)}reset(){}};const Pi=e=>format(e,2),Gi=e=>({id:e.id,num:e.num,celestial:e.celestial,description:e.description,cost:()=>e.num<=7?e.baseCost*2.5**player.celestials.ra.rebuyables[e.id]:e.baseCost*10**(player.celestials.ra.rebuyables[e.id]*player.celestials.ra.rebuyables[e.id]*.1+player.celestials.ra.rebuyables[e.id]),formatCost:Pi,effect:e.effect,formatEffect:e=>formatX(e,2,2),currency:Mi.raPoints,currencyLabel:e.currencyLabel,rebuyable:!0,implemented:y}),Ui=e=>Gi({id:e.id,num:e.num,celestial:e.celestial,description:e.description,baseCost:e.baseCost,currency:e.currency,currencyLabel:e.currencyLabel,effect:()=>Math.pow(10,player.celestials.ra.rebuyables[e.id])}),Bi=e=>Gi({id:e.id,num:e.num,celestial:e.celestial,description:e.description,baseCost:e.baseCost,currency:e.currency,currencyLabel:e.currencyLabel,effect:()=>Math.pow(10,player.celestials.ra.rebuyables[e.id])}),Ni={weakenTeresaScaling:Ui({id:"weakenTeresaScaling",num:1,celestial:"teresa",description:()=>`Weaken Teresa's level cost by ${formatX(10)} (before exponents)`,baseCost:1e7,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),weakenEffarigScaling:Ui({id:"weakenEffarigScaling",num:2,celestial:"effarig",description:()=>`Weaken Effarig's level cost by ${formatX(10)} (before exponents)`,baseCost:1e7,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),weakenEnslavedScaling:Ui({id:"weakenEnslavedScaling",num:3,celestial:"enslaved",description:()=>`Weaken Nameless' level cost by ${formatX(10)} (before exponents)`,baseCost:1e7,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),weakenVScaling:Ui({id:"weakenVScaling",num:4,celestial:"v",description:()=>`Weaken V's level cost by ${formatX(10)} (before exponents)`,baseCost:1e7,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),weakenRaScaling:Ui({id:"weakenRaScaling",num:5,celestial:"ra",description:()=>`Weaken Ra's level cost by ${formatX(10)} (before exponents)`,baseCost:1e7,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),weakenLaitelaScaling:Ui({id:"weakenLaitelaScaling",num:6,celestial:"laitela",description:()=>`Weaken Lai'tela's level cost by ${formatX(10)} (before exponents)`,baseCost:1e7,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),weakenPelleScaling:Ui({id:"weakenPelleScaling",num:7,celestial:"pelle",description:()=>`Weaken Pelle's level cost by ${formatX(10)} (before exponents)`,baseCost:1e7,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),incTeresaXPGain:Bi({id:"incTeresaXPGain",num:8,celestial:"teresa",description:()=>`Increase Teresa's Memory gain by ${formatX(10)} (before exponents)`,baseCost:1e8,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),incEffarigXPGain:Bi({id:"incEffarigXPGain",num:9,celestial:"effarig",description:()=>`Increase Effarig's Memory gain by ${formatX(10)} (before exponents)`,baseCost:1e8,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),incEnslavedXPGain:Bi({id:"incEnslavedXPGain",num:10,celestial:"enslaved",description:()=>`Increase Nameless' Memory gain by ${formatX(10)} (before exponents)`,baseCost:1e8,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),incVXPGain:Bi({id:"incVXPGain",num:11,celestial:"v",description:()=>`Increase V's Memory gain by ${formatX(10)} (before exponents)`,baseCost:1e8,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),incRaXPGain:Bi({id:"incRaXPGain",num:12,celestial:"ra",description:()=>`Increase Ra's Memory gain by ${formatX(10)} (before exponents)`,baseCost:1e8,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),incLaitelaXPGain:Bi({id:"incLaitelaXPGain",num:13,celestial:"laitela",description:()=>`Increase Lai'tela's Memory gain by ${formatX(10)} (before exponents)`,baseCost:1e8,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),incPelleXPGain:Bi({id:"incPelleXPGain",num:14,celestial:"pelle",description:()=>`Increase Pelle's Memory gain by ${formatX(10)} (before exponents)`,baseCost:1e8,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal"}),teresaUpgrade:{id:"teresaUpgrade",celestial:"teresa",description:"Cost of Elliptic Materiality ^0.85, and add extra Reality Machine cap based on Teresa's Reality Antimatter Record.",cost:1e18,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal",implemented:!0},effarigUpgrade:{id:"effarigUpgrade",celestial:"effarig",description:"Triple Reality Glyph level.",cost:1e19,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal",implemented:!0},enslavedUpgrade:{id:"enslavedUpgrade",celestial:"enslaved",description:"Stored Real Time is always at its cap, and Stored Real Time affects Game Speed.",cost:1e19,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal",implemented:!0},vUpgrade:{id:"vUpgrade",celestial:"v",description:"The memory rebuyable Warp Upgrade now also affect achievement multiplier.",cost:1e19,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal",implemented:!0},raUpgrade:{id:"raUpgrade",celestial:"ra",description:"Memory Crystal reduces Dimension Boost cost.",cost:2e22,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal",implemented:!0},laitelaUpgrade:{id:"laitelaUpgrade",celestial:"laitela",description:"Singularities increases Dark Matter cap.",cost:5e21,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal",implemented:!0},pelleUpgrade:{id:"pelleUpgrade",celestial:"pelle",description:"Doomed Reality won't END if Galaxy Generator is not unlocked.",cost:5e21,currency:()=>Mi.raPoints,currencyLabel:"Memory Crystal",implemented:!0}},Oi={effarig:{unlocks:kt},alchemy:{resources:wt},pelle:{galaxyGeneratorUpgrades:St,strikes:Lt,upgrades:It,rifts:Bt},descriptions:{},enslaved:Ct,navigation:ot,navSigils:(0,B.Z)((0,B.Z)({},Tt),ft),perkShop:Gt,ra:Ut,raUpgrades:Ni,singularityMilestones:Ot,teresa:Ft,quotes:Ai,v:Di},Li=()=>PelleRifts.chaos.milestones[1].canBeApplied?"The Pelle-Specific effect from Infinity Glyphs is also disabled.":"",Fi=[{id:1,description:"Time Dimensions are disabled.",goal:b.E1800,goalIncrease:b.E200,reward:{description:"Time Dimension multiplier based on time spent this Eternity",effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?new Decimal(1):Decimal.pow(Decimal.max(player.records.thisEternity.time.div(10),.9),.3+.05*e),formatEffect:e=>formatX(e,2,1)},vReward:{description:"⌬ Time Dimension power based on real time spent this Mend ⌬",effect:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?1:Math.min(.5,Math.log10(player.records.thisMend.realTime+1)/100)*((Ra.pets.v.level-25)/75+V.spaceTheorems/600)+1,formatEffect:e=>formatPow(e,2,3)},scrambleText:["1e2600","1e201600"]},{id:2,description:"Infinity Dimensions are disabled.",goal:b.E975,pelleGoal:b.E1750,goalIncrease:b.E175,reward:{description:"1st Infinity Dimension multiplier based on Infinity Power",effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?new Decimal(1):Currency.infinityPower.value.pow(1.5/(700-100*e)).clampMin(1),cap:b.E100,formatEffect:e=>formatX(e,2,1)},vReward:{description:"⌬ Infinity Dimension power based on Infinity Power ⌬",effect:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?1:1+Math.log10(Math.max(Currency.infinityPower.value.clampMin(1).log10(),1))/500*((Ra.pets.v.level-25)/75+V.spaceTheorems/600),formatEffect:e=>formatPow(e,2,3)}},{id:3,description:"Antimatter Dimensions 5-8 don't produce anything. Dimensional Sacrifice is disabled.",goal:b.E600,pelleGoal:b.E925,goalIncrease:b.E75,reward:{description:()=>`Increase the multiplier for buying ${formatInt(10)} Antimatter Dimensions`,effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?0:.72*e,formatEffect:e=>`+${format(e,2,2)}`},vReward:{description:"⌬ All per-purchase multipliers raised ⌬",formatEffect:e=>`${formatPow(e,3,3)}`,effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?1:5e-4*e*((Ra.pets.v.level-25)/75)+V.spaceTheorems/600+1}},{id:4,description:"all Infinity multipliers and generators are disabled. The goal must be reached within a certain\n number of Infinities or else you will fail the Challenge.",goal:b.E2750,goalIncrease:b.E550,restriction:e=>Math.max(16-4*e,0),checkRestriction:e=>Currency.infinities.lte(e),formatRestriction:e=>0===e?"without any Infinities":`in ${quantifyInt("Infinity",e)} or less`,failedRestriction:"(Too many Infinities for more)",reward:{description:"Infinity Dimension multiplier based on unspent IP",effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?new Decimal(1):Currency.infinityPoints.value.pow(.003+.002*e),cap:b.E200,formatEffect:e=>formatX(e,2,1)},vReward:{description:"⌬ All Dimension power based on Multiversal Remains ⌬",effect:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?1:1+Decimal.log10(Currency.mendingPoints.value.add(1))/250/10*((Ra.pets.v.level-25)/75+V.spaceTheorems/600),formatEffect:e=>formatPow(e,3,3)}},{id:5,description:()=>`Antimatter Galaxy cost increase scaling starts immediately (normally at ${formatInt(100)}\n Galaxies). Dimension Boost costs scaling is massively increased.`,goal:b.E750,pelleGoal:b.E1400,goalIncrease:b.E400,reward:{description:"Distant Galaxy cost scaling starts later",effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?0:5*e,formatEffect:e=>`${formatInt(e)} AG later`},vReward:{description:"⌬ Obscure Galaxy scaling starts later ⌬",effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?0:500*e*((Ra.pets.v.level-25)/75),formatEffect:e=>`${formatInt(e)} AG later`}},{id:6,description:()=>Enslaved.isRunning?"you *. The cost of upgrading your max Replicanti Galaxies is massively reduced.":"you cannot gain Antimatter Galaxies normally. The cost of upgrading your max Replicanti Galaxies is massively reduced.",goal:b.E850,pelleGoal:b.E1500,goalIncrease:b.E250,reward:{description:"Further reduce Antimatter Dimension cost multiplier growth",effect:e=>.2*e,formatEffect:e=>{if(MendingUpgrade(8).isBought)return`${formatX(1.5,2,2)} (Mending Upgrade 8)`;const t=Math.round(Player.dimensionMultDecrease+Effects.sum(EternityChallenge(6).reward))-e;return`-${format(e,2,1)} (${formatX(t,2,1)} total)`}},vReward:{description:"⌬ Continuum multiplier ⌬",effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?1:1+.01*e*((Ra.pets.v.level-25)/75+V.spaceTheorems/600),formatEffect:e=>`${formatX(e,2,2)}`},scrambleText:["cannot gain Antimatter Galaxies normally","c㏰'퐚 gai鸭 Anti꟢at랜erﻪﶓa⁍axie㮾 䂇orma㦂l"]},{id:7,description:"1st Time Dimensions produce 8th Infinity Dimensions and 1st Infinity Dimensions produce 7th Antimatter Dimensions. Tickspeed also directly applies to Infinity and Time Dimensions.",goal:b.E2000,pelleGoal:b.E2700,goalIncrease:b.E530,effect:()=>TimeDimension(1).productionPerSecond,reward:{description:"1st Time Dimension produces 8th Infinity Dimensions",effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?new Decimal(0):TimeDimension(1).productionPerSecond.pow(.2*e).minus(1).clampMin(0),formatEffect:e=>`${format(e,2,1)} per second`},vReward:{description:"⌬ 1st Dark Matter Dimension produces 8th Time dimension ⌬",effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?new Decimal(0):DarkMatterDimension(1).powerDM.times(1e3).div(DarkMatterDimension(1).interval).pow(.2*e).minus(1).clampMin(0).mul((Ra.pets.v.level-25)/75+V.spaceTheorems/600),formatEffect:e=>`${format(e,2,2)} per second`}},{id:8,description:()=>`you can only upgrade Infinity Dimensions ${formatInt(50)} times and Replicanti\n upgrades ${formatInt(40)} times. Infinity Dimension and Replicanti upgrade autobuyers are disabled.`,goal:b.E1300,pelleGoal:b.E2800,goalIncrease:b.E900,reward:{description:"Infinity Power strengthens Replicanti Galaxies",effect:e=>{if(player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8)return 0;const t=Math.log10(Currency.infinityPower.value.pLog10()+1);return Math.max(0,Math.pow(t,.03*e)-1)},formatEffect:e=>formatPercents(e,2)},vReward:{description:"⌬ Time Shards strengthen all Galaxy types ⌬",effect:e=>{if(player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8)return 0;const t=Math.log10(Currency.timeShards.value.pLog10()+1);return Math.max(0,(Math.pow(t,.03*e)-1)*((Ra.pets.v.level-25)/75+V.spaceTheorems/600)/10)},formatEffect:e=>formatPercents(e,2)}},{id:9,description:()=>`you cannot buy Tickspeed upgrades. Infinity Power instead multiplies\n Time Dimensions with greatly reduced effect. ${Li()}`,goal:b.E1750,pelleGoal:b.E2900,goalIncrease:b.E250,reward:{description:"Infinity Dimension multiplier based on Time Shards",effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?new Decimal(1):Currency.timeShards.value.pow(.1*e).clampMin(1),cap:b.E400,formatEffect:e=>formatX(e,2,1)},vReward:{description:"⌬ Infinity Dimension multiplier based on Tickspeed upgrade counts ⌬",effect:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?new Decimal(1):Decimal.pow(10,new Decimal(Tickspeed.totalUpgrades).times((Ra.pets.v.level-25)/75+V.spaceTheorems/600).div(10)).clampMin(1),formatEffect:e=>formatX(e,3,3)}},{id:10,description:()=>{let e=`Time Dimensions and Infinity Dimensions are disabled. You gain an immense boost from\n Infinities to Antimatter Dimensions (Infinities${formatPow(950)}). ${Li()}`;return EternityChallenge(10).applyEffect((t=>e+=` Currently: ${formatX(t,2,1)}`)),e},goal:b.E3000,pelleGoal:b.E3200,goalIncrease:b.E300,effect:()=>Decimal.pow(Currency.infinitiesTotal.value,950).clampMin(1).pow(TimeStudy(31).effectOrDefault(1)),reward:{description:"Time Dimension multiplier based on Infinities",effect:e=>{if(player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8)return new Decimal(1);const t=Currency.infinitiesTotal.value.times(2783e-9).pow(.4+.1*e).clampMin(1);return t.powEffectOf(TimeStudy(31))},formatEffect:e=>{if(player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8)return"×1.0";const t=formatX(e,2,1);return TimeStudy(31).canBeApplied?`${formatX(e.pow(1/TimeStudy(31).effectValue),2,1)} (After TS31: ${t})`:t}},vReward:{description:"⌬ Time Dimension power based on Infinities ⌬",effect:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?1:1+Decimal.log10(Currency.infinities.value.add(1))/5e5*((Ra.pets.v.level-25)/75+V.spaceTheorems/600),formatEffect:e=>`${formatPow(e,3,3)}`}},{id:11,description:()=>`all Dimension multipliers and powers are disabled except for the multipliers from\n Infinity Power and Dimension Boosts (to Antimatter Dimensions). ${Li()}`,goal:b.E450,pelleGoal:b.E11200,goalIncrease:b.E200,pelleGoalIncrease:b.E1400,reward:{description:"Further reduce Tickspeed cost multiplier growth",effect:e=>.07*e,formatEffect:e=>{if(MendingUpgrade(8).isBought)return`${formatX(1.2,2,2)} (Mending Upgrade 8)`;const t=Math.round(Player.tickSpeedMultDecrease+Effects.sum(EternityChallenge(11).reward))-e;return`-${format(e,2,2)} (${formatX(t,2,2)} total)`}},vReward:{description:"⌬ Reduce free Tickspeed upgrade scaling ⌬",effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?1:1-5e-4*e*((Ra.pets.v.level-25)/75+V.spaceTheorems/600),formatEffect:e=>`${formatPow(e,3,3)}`}},{id:12,description:()=>PlayerProgress.realityUnlocked()?`the game runs ×${formatInt(1e3)} slower; all other game speed effects are disabled. The goal must be reached\n within a certain amount of time or you will fail the Challenge. ${Li()}`:`the game runs ×${formatInt(1e3)} slower. The goal must be reached\n within a certain amount of time or you will fail the Challenge.`,goal:b.E110000,pelleGoal:b.E208000,goalIncrease:b.E12000,restriction:e=>Math.max(10-2*e,1)/10,checkRestriction:e=>Time.thisEternity.totalSeconds.lt(e),formatRestriction:e=>`in ${quantify("in-game second",e,0,1)} or less.`,failedRestriction:"(Too slow for more)",reward:{description:"Infinity Dimension cost multipliers are reduced",effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?1:1-.008*e,formatEffect:e=>`x${formatPow(e,3,3)}`},vReward:{description:"⌬ Increase Infinity Dimension caps ⌬",effect:e=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=8?1:Math.max(1,1/(1-.008*e*((Ra.pets.v.level-25)/75+V.spaceTheorems/600))),formatEffect:e=>`${formatPow(e,3,3)}`}}],$i=[{id:1,description:"all Normal Challenge restrictions are active at once, with the exception of the\n Tickspeed (C9) and Big Crunch (C12) Challenges.",goal:b.E650,isQuickResettable:!0,reward:{description:()=>`${formatX(1.3,1,1)} on all Infinity Dimensions for each Infinity Challenge completed`,effect:()=>{let e=BreakInfinityUpgrade.slowestChallengeMult.chargedEffect.isEffectActive?1e9*Ra.pets.teresa.level:1;return Decimal.pow(Math.pow(1.3,InfinityChallenges.completed.length),e)},formatEffect:e=>formatX(e,3,3)},unlockAM:b.E2000},{id:2,description:()=>`Dimensional Sacrifice happens automatically every ${formatInt(400)} milliseconds once you have\n an 8th Antimatter Dimension.`,goal:b.E10500,isQuickResettable:!1,reward:{description:()=>`Dimensional Sacrifice autobuyer and stronger Dimensional Sacrifice\n ${Sacrifice.getSacrificeDescription({InfinityChallenge2isCompleted:!1})} ➜\n ${Sacrifice.getSacrificeDescription({InfinityChallenge2isCompleted:!0})}`},unlockAM:b.E11000},{id:3,description:()=>`Tickspeed upgrades are always ${formatX(1)}. For every Tickspeed upgrade purchase, you instead get a static\n multiplier on all Antimatter Dimensions which increases based on Antimatter Galaxies.`,goal:b.E5000,isQuickResettable:!1,effect:()=>Decimal.pow(1.05+.005*player.galaxies,player.totalTickBought),formatEffect:e=>formatX(e,2,2),reward:{description:"Antimatter Dimension multiplier based on Antimatter Galaxies and Tickspeed purchases",effect:()=>Laitela.continuumActive?Decimal.pow(1.05+.005*player.galaxies,Tickspeed.continuumValue):Decimal.pow(1.05+.005*player.galaxies,player.totalTickBought),formatEffect:e=>formatX(e,2,2)},unlockAM:b.E12000},{id:4,description:()=>`only the latest bought Antimatter Dimension's production is normal. All other Antimatter Dimensions\n produce less (${formatPow(.25,2,2)}).`,goal:b.E13000,isQuickResettable:!0,effect:.25,reward:{description:()=>`All Antimatter Dimension multipliers become multiplier${formatPow(1.05,2,2)}`,effect:1.05},unlockAM:b.E14000},{id:5,description:"buying Antimatter Dimensions 1-4 causes all cheaper AD costs to increase.\n Buying Antimatter Dimensions 5-8 causes all more expensive AD costs to increase.",goal:b.E16500,isQuickResettable:!0,reward:{description:()=>`All Galaxies are ${formatPercents(.1)} stronger and reduce the requirements for them\n and Dimension Boosts by ${formatInt(1)}`,effect:1.1},unlockAM:b.E18000},{id:6,description:()=>`exponentially rising matter divides the multiplier on all of your Antimatter Dimensions\n once you have at least ${formatInt(1)} 2nd Antimatter Dimension.`,goal:b.D2E22222,isQuickResettable:!0,effect:()=>Currency.matter.value.clampMin(1),formatEffect:e=>`/${format(e,1,2)}`,reward:{description:"Infinity Dimension multiplier based on tickspeed",effect:()=>Tickspeed.perSecond.pow(5e-4),formatEffect:e=>formatX(e,2,2)},unlockAM:b.E22500},{id:7,description:()=>{const e=Effects.max(2,InfinityUpgrade.dimboostMult,InfinityChallenge(7).reward,TimeStudy(81));return`you cannot buy Antimatter Galaxies. Base Dimension Boost multiplier is increased to a maximum\n of ${formatX(10)}. (Current base multiplier: ${formatX(e,2,1)})`},goal:b.E10000,isQuickResettable:!1,effect:10,reward:{description:()=>`Dimension Boost multiplier is increased to a minimum of ${formatX(4)}`,effect:4},unlockAM:b.E23000},{id:8,description:()=>`AD production rapidly and continually drops over time. Purchasing Antimatter Dimension or Tickspeed\n upgrades sets production back to ${formatPercents(1)} before it starts dropping again.`,goal:b.E27000,isQuickResettable:!0,effect:()=>b.D0_8446303389034288.pow(Math.max(0,player.records.thisInfinity.time.sub(player.records.thisInfinity.lastBuyTime).min(1e250).toNumber())),reward:{description:"You get a multiplier to AD 2-7 based on 1st and 8th AD multipliers.",effect:()=>AntimatterDimension(1).multiplier.times(AntimatterDimension(8).multiplier).pow(.02),formatEffect:e=>formatX(e,2,2)},unlockAM:b.E28000}],Hi=[{id:1,legacyId:1,isQuickResettable:!1,description(){return PlayerProgress.eternityUnlocked()?"reach Infinity for the first time outside of a challenge.":"reach Infinity for the first time."},name:"1st Antimatter Dimension Autobuyer",reward:"Upgradeable 1st Antimatter Dimension Autobuyer",lockedAt:b.D0},{id:2,legacyId:2,isQuickResettable:!1,description:()=>`buying Antimatter Dimensions or Tickspeed upgrades halts production of all Antimatter Dimensions. Production gradually returns to normal over ${formatInt(3)} minutes.`,name:"2nd Antimatter Dimension Autobuyer",reward:"Upgradeable 2nd Antimatter Dimension Autobuyer",lockedAt:b.D0},{id:3,legacyId:3,isQuickResettable:!1,description:"the 1st Antimatter Dimension is heavily weakened, but gets an uncapped exponentially increasing multiplier.\n This multiplier resets after Dimension Boosts and Antimatter Galaxies.",name:"3rd Antimatter Dimension",reward:"Upgradeable 3rd Antimatter Dimension Autobuyer",lockedAt:b.D0},{id:4,legacyId:8,isQuickResettable:!1,description:"buying an Antimatter Dimension automatically erases all lower tier Antimatter Dimensions, like a sacrifice without the boost.",name:"4th Antimatter Dimension Autobuyer",reward:"Upgradeable 4th Antimatter Dimension Autobuyer",lockedAt:b.D0},{id:5,legacyId:6,isQuickResettable:!1,description:()=>`the Tickspeed purchase multiplier starts at ${formatX(1.08,0,3)} instead of ${formatX(1.1245,0,3)}.`,name:"5th Antimatter Dimension Autobuyer",reward:"Upgradeable 5th Antimatter Dimension Autobuyer",lockedAt:b.D0},{id:6,legacyId:10,isQuickResettable:!1,description:()=>`upgrading each Antimatter Dimension costs the Antimatter Dimension ${formatInt(2)} tiers below it instead of antimatter. Antimatter Dimension prices are modified.`,name:"6th Antimatter Dimension Autobuyer",reward:"Upgradeable 6th Antimatter Dimension Autobuyer",lockedAt:b.D0},{id:7,legacyId:9,isQuickResettable:!1,description:()=>`the multiplier from buying ${formatInt(10)} Antimatter Dimensions is reduced to ${formatX(1)}. This increases by\n ${formatX(.2,1,1)} per Dimension Boost, to a maximum of ${formatX(2)}, and is unaffected by any upgrades.`,name:"7th Antimatter Dimension Autobuyer",reward:"Upgradeable 7th Antimatter Dimension Autobuyer",lockedAt:b.D0},{id:8,legacyId:11,isQuickResettable:!1,description:"Dimension Boosts provide no multiplier and Antimatter Galaxies cannot be bought. Dimensional\n Sacrifice resets antimatter and all Antimatter Dimensions, but also gives a significantly stronger multiplier.",name:"8th Antimatter Dimension Autobuyer",reward:"Upgradeable 8th Antimatter Dimension Autobuyer",lockedAt:b.D0},{id:9,legacyId:5,isQuickResettable:!0,description:()=>`whenever you buy Tickspeed upgrades or ${formatInt(10)} of an Antimatter Dimension, everything else of equal cost will increase to its next cost step.`,name:"Tickspeed Autobuyer",reward:"Upgradeable Tickspeed Autobuyer",lockedAt:b.D0},{id:10,legacyId:4,isQuickResettable:!1,description:()=>`there are only ${formatInt(6)} Antimatter Dimensions. Dimension Boost and Antimatter Galaxy costs are modified.`,name:"Automated Dimension Boosts",reward:"Dimension Boosts Autobuyer",lockedAt:b.D16},{id:11,legacyId:12,isQuickResettable:!0,description:()=>`there is normal matter which rises once you have at least ${formatInt(1)} 2nd Antimatter Dimension. If it exceeds your antimatter, it will Dimension Boost without giving the bonus.`,name:"Automated Antimatter Galaxies",reward:"Antimatter Galaxies Autobuyer",lockedAt:b.D16},{id:12,legacyId:7,isQuickResettable:!1,description:()=>`each Antimatter Dimension produces the Dimension ${formatInt(2)} tiers below it\n instead of ${formatInt(1)}. Both 1st and 2nd Dimensions produce antimatter.\n The 2nd, 4th, and 6th Dimensions are made stronger to compensate.`,name:"Automated Big Crunches",reward:"Big Crunches Autobuyer",lockedAt:b.D16}],qi={active:()=>player.mending.corruption.countWhere((e=>e>0)),bonusMult:()=>[0,1,3,10,35,126,462,1716,6435,24310,92378][Math.floor(Math.min(player.mending.corruption.countWhere((e=>e>0)),player.mending.corruption.reduce(((e,t)=>e+t),0)/player.mending.corruption.countWhere((e=>e>0))-1))],incBonusText:()=>"In order to increase your bonus multiplier, you should "+(player.mending.corruption.countWhere((e=>e>0))e+t),0)/player.mending.corruption.countWhere((e=>e>0))-1?"increase the number of Hostilities active.":"increase the average level of your Hostilities."),desc:()=>0==player.mending.corruption.countWhere((e=>e>0))?"You have not selected any Hostilities, you cannot enter this challenge":"Reach e9e15 antimatter and Mend without Galaxy Generator while in a more difficult Reality, in order to gain Hostile Fragments. All upgrades will be reset if you complete a reality with more Hostile Fragments then you are carrying.",reward:()=>`If you completed this challenge, you would gain ${quantifyInt("Hostile Fragment",Math.ceil(Math.log2(De.calcScore()))-player.mending.corruptedFragments)}. (Without HU20 bonus)`,unlocked:()=>Ra.pets.pelle.level>=75},Vi={normal:Hi,infinity:$i,eternity:Fi,corruption:qi},Yi=[{date:["20??","??","??"],name:"idk yet",info:"\n
\n
\n New things:\n
\n
    \n
  • Implemented Mending Upgrades 6, 20, and all rebuyables
  • \n
  • Implemented 20 Mend Milestone
  • \n
  • Implemented Warp Reality
  • \n
  • Added Mending content to the catchup modal
  • \n
  • Endgame: 20 Mend Milestone and about ee?? antimatter
  • \n
\n Bugfixes:\n
\n
    \n
  • Fixed Pelle Time Dilation Rebuyables' display when their cap is reached
  • \n
  • Made Glyph Sacrifice mode defalut to \"Always Sacrifice\" on Mend
  • \n
  • Glyph Filter Mode is set to \"Lowest Total Glyph Sacrifice\" on Mend
  • \n
  • Made all pre-Pelle achievements visible again on a new game
  • \n
  • Fixed progress stage not being updated on Mend
  • \n
\n Known Issues:\n
\n
    \n
  • When importing a Vanilla save, rebuyable Mending Upgrade costs and effects don't get initalized properly, saving and refreshing should fix it
  • \n
  • The amount of Glyph Slots sometimes doesn't update properly when 20MM buys them, performing a Reality Reset while not on the Glyph tab should fix it
  • \n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \n
  • There are console errors when viewing the TS tree when unlocking a Triad Study (this doesn't effect gameplay)
  • \n
"},{date:[2023,8,31],name:"The Glyph Nerf and Game Time fix",info:"Apparently people were getting lv. 200k Glyphs, let's change that\n
\n
\n New things:\n
\n
    \n
  • Added a 3rd Glyph instability threshold (good luck getting your level 100k+ Glyphs now >:))
  • \n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \n
\n Bugfixes:\n
\n
    \n
  • Hardcapped playtime to 1e308 (this should fix some freezes caused by Infinite time played)
  • \n
  • Fixed display bugs on EC6 and EC11's Effects and the Dimension and Tickspeed scaling Break Infinity Upgrades
  • \n
\n Known Issues:\n
\n
    \n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \n
"},{date:[2023,8,30],name:"Doom Glyph Slot Hotfix",info:"More MU4 remnants we missed\n
\n
\n New things:\n
\n
    \n
  • None
  • \n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \n
\n Bugfixes:\n
\n
    \n
  • Fixed Glyph swapping in Doomed Reality
  • \n
\n Known Issues:\n
\n
    \n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \n
"},{date:[2023,8,29],name:"the MU4 effect Remnant fix and other crap",info:"Accidently left MU4's old effect\n
\n
\n New things:\n
\n
    \n
  • Added a new loading splash screen (thanks Kruta).
  • \n
  • Added fancy names to the Mendning Upgrades (thanks Kruta)
  • \n
  • When completing a tier of Effarig's Reality, it completes all tiers before it. (i.e. Completing Effarig's Eternity also completes their Infinity)
  • \n
  • Added a Mending entry in the \"How to Play\" modal
  • \n
  • Added common Mending Abbrevations in the \"Common Abbreviations\" section in \"How to Play\"
  • \n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \n
\n Bugfixes:\n
\n
    \n
  • Fixed EC6 and 11's reward displaying incorrectly when MU8 is purchased
  • \n
  • Fixed MU8 scaling not applying correctly
  • \n
  • Fixed having 5 glyph slots in Pelle when MU4 is purchased
  • \n
\n Known Issues:\n
\n
    \n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \n
"},{date:[2023,8,28],name:"Even More Upgrades",info:"Hopefully 2nd to last Mending Upgrade Update\n
\n
\n New things:\n
\n
    \n
  • Added Mending Upgrades 4, 8, and 10
  • \n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \n
\n Bugfixes:\n
\n
    \n
  • I forgor
  • \n
\n Known Issues:\n
\n
    \n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \n
"},{date:[2023,8,27],name:"EMERGENCY HOTFIX 5",info:"Type mismatch fixed\n
\n
\n New things:\n
\n
    \n
  • None
  • \n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \n
\n Bugfixes:\n
\n
    \n
  • Made Eternity Gain a Decimal instead of a Number
  • \n
\n Known Issues:\n
\n
    \n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \n
"},{date:[2023,8,27],name:"Upgrade Explosion",info:"Finally an update that adds more than 1 Upgrade\n
\n
\n New things:\n
\n
    \n
  • Implemented Mending Upgrades 12, 13, 14, 17 and 18
  • \n
  • Added a Mending Milestone for 4 Mends (effect temporary until MU19 is implemented)
  • \n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \n
\n Bugfixes:\n
\n
    \n
  • Fixed some Glyphs not being deleted on Mend
  • \n
  • Improved Mending Upgrade readability
  • \n
\n Known Issues:\n
\n
    \n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \n
"},{date:[2023,8,25],name:"EMERGENCY HOTFIX 4",info:"typos strike again\n
\n
\n New things:\n
\n
    \n
  • None
  • \n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \n
\n Bugfixes:\n
\n
    \n
  • Fixed not being able to swap Glyphs in Pelle
  • \n
\n Known Issues:\n
\n
    \n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \n
"},{date:[2023,8,25],name:"the Reality Automation",info:"Added some autobuyers to some Reality Mechanics.\n
\n
\n New things:\n
\n
    \n
  • Added Milestone for 8 Mends
  • \n
  • Implemented Mending Upgrade 7
  • \n
  • Endgame: 10 Mend Milestone and all available Mending Upgrades
  • \n
\n Bugfixes:\n
\n
    \n
  • none that I can remember
  • \n
\n Known Issues:\n
\n
    \n
  • TS192's visibility is random in Nameless' Reality. However it should still be completeable
  • \n
"},{date:[2023,8,24],name:"EMERGENCY HOTFIX 3",info:"More Hexa fixes, and some Wellington fixes\n
\n
\n New things:\n
\n
    \n
  • None
  • \n
  • Endgame: 7 Mend Milestone and all available Mending Upgrades
  • \n
\n Bugfixes:\n
\n
    \n
  • made the Mending button actually work after 10 Mend Milestone
  • \n
  • the Mending Upgrade tab no longer causes a duplicate key error
  • \n
  • the Pelle Dilation autobuyers no longer console spam
  • \n
  • Importing Glyph sets is no longer broken
  • \n
  • TS192 is now visible in Nameless again (needs further testing)
  • \n
\n Known Issues:\n
\n
    \n
  • None...for now
  • \n
"},{date:[2023,8,24],name:"the 'Hey, Royal finally did something'",info:'More Hexa fixes, and new content by yours truly\n
\n
\n New things:\n
\n
    \n
  • Reduced Mending Upgrade prices (say "thanks Amity"), and refunded the difference
  • \n
  • Implemented Mending Upgrade 15
  • \n
  • Endgame: 7 Mend Milestone and all available Mending Upgrades
  • \n
\n Bugfixes:\n
\n
    \n
  • V should no longer hardlock the game
  • \n
  • Importing Glyph sets is no longer broken
  • \n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought (by Wellington, not Hexa)
  • \n
  • ts192 is now visible in Nameless again
  • \n
\n Known Issues:\n
\n
    \n
  • None, for a change
  • \n
'},{date:[2023,8,23],name:"Final V patch",info:"Hexa hopefully has patched V for good, undone previous changes to V.\n
\n
\n New things:\n
\n
    \n
  • None.
  • \n
\n Bugfixes:\n
\n
    \n
  • V no longer hardlocks in a loop\n
\n Known Issues:\n
\n
    \n
  • Time Study 192 is entirely missing in The Nameless Ones' Reality (rather than unpurchaseable), causing console errors.
  • \n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \n
  • Dilation autobuyers cause console errors, however they function normally.
  • \n
"},{date:[2023,8,23],name:"No new content #7",info:"Hexa hopefully fixed some things he broke last update again, kind of.\n
\n
\n New things:\n
\n
    \n
  • For the time being, requiem only requires V hard to be shown and 4-0 max glyphs equipped.
  • \n
\n Bugfixes:\n
\n
    \n
  • V again unequips all glyphs, however you now have the appropriate numbers of glyph slots.\n
\n Known Issues:\n
\n
    \n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\n this doesn't seem to affect gameplay in any way, however ts192 is entirely missing.
  • \n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \n
"},{date:[2023,8,23],name:"No new content #6",info:"Hexa hopefully fixed some things he broke last update. No new content this update, just bug fixes, and backend stuff."},{date:[2023,8,22],name:"HEXA HOTFIX UPDATE 2, ELECTRIC BOOGALOO",info:"Hexa hopefully fixed some stuff. No new content this update, just bug fixes. (I think this was 5 hours after the last one)\n
\n
\n New things:\n
\n
    \n
  • 7 Mend Milestone does not work in V anymore (temporary until we find a fix)
  • \n
\n Bugfixes:\n
\n
    \n
  • 3 Mend Milestone actually states it gives Vacuum Acceleration (this was done by Royal, Hexa did the rest)
  • \n
  • Fixed some spelling mistakes.
  • \n
  • Hopefully fixed Glyph Presets allowing duplicate special glyphs before 7 Mend Milestone
  • \n
  • Added an icon for the Mending tab in the Aero theme
  • \n
  • Multipliers from Mending Milestone 1 are now present in the Multiplier Breakdown
  • \n
  • Fixed the Credits Modal in \"About the Game\"
  • \n
\n Known Issues:\n
\n
    \n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (We (Royal and Hexa) didn't edit anything there). However\n this doesn't seem to affect gameplay in any way, however TS192 is entirely missing.
  • \n
  • Glyph presets might still be broken (or more broken).
  • \n
  • V's reality can hardlock the game, make a backup save before entering
  • \n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \n
"},{date:[2023,8,22],name:"EMERGENCY HOTFIX 2 and minor additions",info:"Hexa broke some things internally (we (me and Hexa) couldn't test them until now)\n
\n
\n New things:\n
\n
    \n
  • 3 Mend Milestone now also gives iU upgrade \"Vaccum Acceleration\"
  • \n
  • Mending Upgrade 5 now also gives Reality Machine generation and sets Remnants to max
  • \n
  • You can now hold shift to display Mending Upgrade names (no, I don't plan to be creative like the Reality and Imaginary ones)
  • \n
  • Endgame: 7 Mend Milestone, all non-stripped Mending Upgrades.
  • \n
\n Bugfixes:\n
\n
    \n
  • Fixed \"Multiversal Remains and Mends becoming a number instead of a Decimal\" fix preventing mends.
  • \n
  • Fixed 10 V-Achievement Milestone text updating with the wrong Mending Upgrade
  • \n
\n Known Issues:\n
\n
    \n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\n this doesn't seem to affect gameplay in any way.
  • \n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \n
  • The Mending tab has no icon in the Aero theme
  • \n
  • V's reality can hardlock the game, make a backup save before entering
  • \n
  • Multipliers fromthe 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \n
"},{date:[2023,8,22],name:"the 'no longer a one man job'",info:"This patch would not be possible without Hexa, shoutouts to him. Note: this changelog entry was written by Royal after the fact, so everything changed may not all be reflected here\n
\n
\n New things:\n
\n
    \n
  • 2 Mend Milestone Dilation Autobuyers now properly work
  • \n
  • Endgame: 7 Mend Milestone, all non-stripped Mending Upgrades.
  • \n
\n Bugfixes (all by Hexa):\n
\n
    \n
  • Fixed Multiversal Remains and Mends becoming a number instead of a Decimal
  • \n
\n Known Issues:\n
\n
    \n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\n this doesn't seem to affect gameplay in any way.
  • \n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \n
  • The Mending tab has no icon in the Aero theme
  • \n
  • V's reality can hardlock the game, make a backup save before entering
  • \n
  • Multipliers from the 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \n
"},{date:[2023,8,20],name:"EMERGENCY HOTFIX 1",info:"out of like Infinite. I was an idiot and tried to do a lazy-man's fix, but it accidently made Mending Upgrade 3 obsolete.\n
\n
\n New things:\n
\n
    \n
  • None
  • \n
  • Endgame: 7 Mend Milestone, all non-stripped Mending Upgrades.
  • \n
\n Bugfixes:\n
\n
    \n
  • Fixed 3 Mend Milestone giving Instant ECs (forgot to edit a vue file). If this affects you currently, enjoy the free ECs this Mend
  • \n
  • Fixed the update notification using my immature username I made when I was 14 (even though it's still in the address bar)
  • \n
\n Known Issues:\n
\n
    \n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\n this doesn't seem to affect gameplay in any way.
  • \n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \n
  • The Mending tab has no icon in the Aero theme
  • \n
  • V's reality can hardlock the game, make a backup save before entering
  • \n
  • Multipliers fromthe 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \n
"},{date:[2023,8,20],name:"Bugfixes, and finally more upgrades",info:"Even more bugfixes that fix things I overlooked. Note: Since school is starting back up for me. this might be the last patch for a while.\n Due to this, the new upgrades weren't tested as much\n
\n
\n New things:\n
\n
    \n
  • Added Black Hole and Rebuyable Reality Upgrade Autobuyers to 3 Mend Milestone
  • \n
  • Implemented Mending Upgrades 5 and 9
  • \n
  • Endgame: 7 Mend Milestone, all non-stripped Mending Upgrades.
  • \n
\n Bugfixes:\n
\n
    \n
  • Fixed the Inverted BH appearing without Hard V being Unlocked
  • \n
  • Fixed being able to enter Pelle immediately after Mend
  • \n
  • Fixed some 1 Mend Milestone multipliers not working in Pelle
  • \n
  • Made all tabs unhidden on Mend
  • \n
  • Added \"break\" statements to some switch statements to avoid uninteneded behavior
  • \n
\n Known Issues:\n
\n
    \n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\n this doesn't seem to affect gameplay in any way.
  • \n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \n
  • The Mending tab has no icon in the Aero theme
  • \n
  • V's reality can hardlock the game, make a backup save before entering
  • \n
  • Multipliers fromthe 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \n
"},{date:[2023,8,19],name:"New Content!? no just more bugfixes",info:"Even more bugfixes that fix things I overlooked. Note: Since school is starting back up for me. this might be the last patch for a while.\n
\n
\n New things:\n
\n
    \n
  • Reality Upgrades that required 4 Glyphs now require at LEAST 4 Glyphs
  • \n
  • Added x1,000 Replicanti Speed to 1 Mend Milestone
  • \n
  • Added more Mending Upgrades, but they're not implemented (these might change)
  • \n
  • Changed Dark Matter Dimension Imaginary Upgrades to require the Previous Dark Matter Dimension
  • \n
  • Endgame: still 7 Mends, Mending Upgrades 2 and 3 (the non-stripped ones).
  • \n
\n Bugfixes:\n
\n
    \n
  • Gave \"START\" perk after every mend to get around the hardcoded first Reality glyph reward
  • \n
  • Likewise, gave a power Glyph after Mending Upgrade 2 and every Mend after to simulate it
  • \n
  • Changed the Remnant gain formula so the x1.1 from 1 Mend Mlestone applies properly
  • \n
  • Made the Glyph Selection conformation default to ON on Mend
  • \n
  • Improved Mending Upgrade Readability in some themes
  • \n
\n Known Issues:\n
\n
    \n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\n this doesn't seem to affect gameplay in any way.
  • \n
  • The Invert BH button still shows up when Hard V is locked
  • \n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \n
  • The Mending tab has no icon in the Aero theme
  • \n
  • V's reality can hardlock the game, make a backup save before entering
  • \n
  • Multipliers fromthe 1 Mend Milestone do not show up on the Multiplier Breakdown
  • \n
  • Viewing the Mending Upgrades Screen puts a duplicate key error, but Upgrades can still be bought
  • \n
"},{date:[2023,8,18],name:"The second bugifx",info:"More bugfixes that fix things I overlooked.\n
\n
\n New things:\n
\n
    \n
  • None
  • \n
  • Endgame: still 7 Mends and both Mending Upgrades.
  • \n
\n Bugfixes:\n
\n
    \n
  • Made \"Auto Purge on Reality\" glyph setting get set to false on Mend, because it was preventing Reality Resets.
  • \n
  • Changed V's tab visibility post Mend, because they're usually unlocked before Nameless completion.
  • \n
  • Fixed Alchemy not being reset on Mend (I think Pelle usually clears this, but futureproofing for Warp Reality)
  • \n
\n Known Issues:\n
\n
    \n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\n this doesn't seem to affect gameplay in any way.
  • \n
  • The Invert BH button still shows up when Hard V is locked
  • \n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \n
  • The Mending tab has no icon in the Aero theme
  • \n
  • V's reality can hardlock the game, make a backup save before entering
  • \n
"},{date:[2023,8,17],name:"The first bugifx",info:"No new Content this update, just some bugfixes.\n
\n
\n New things:\n
\n
    \n
  • None
  • \n
  • Endgame: still 7 Mends and both Mending Upgrades.
  • \n
\n Bugfixes:\n
\n
    \n
  • Fixed Parity of Singularity's timer after the first Mend.
  • \n
  • Fixed the Mending button being too wide in Modern UI.
  • \n
  • Fixed readibility of unbought Mending Upgrades in some themes.
  • \n
  • Fixed readibility of unachieved Mending Milestones in some themes.
  • \n
  • Fixed save importing disabiling the ability to do speedruns.
  • \n
  • Fixed pre-Reality achievements reseting on Reality (post Mend).
  • \n
  • Fixed Mending tab being hidden post-Mend on some imported saves.
  • \n
  • probably some other stuff I forgot.
  • \n
\n Known Issues:\n
\n
    \n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\n this doesn't seem to affect gameplay in any way.
  • \n
  • The Invert BH button still shows up when Hard V is locked
  • \n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \n
  • The Mending tab has no icon in the Aero theme
  • \n
"},{date:[2023,8,16],name:"The 'get a very primitive alpha out before college starts back up'",info:"In the words of YouTube commenters, \"first\". Yes, you're looking at the first mod with a new prestige layer, and second with new content. \n Unfortunately since school is starting back up, further updates will be slow to roll out (unless it's a major game-breaking bug).\n
\n
\n New things:\n
\n
    \n
  • Added the Mending Prestige Layer.
  • \n
  • Added Mending Upgrades and Milestones.
  • \n
\n Notes:\n
\n
    \n
  • Speedrun is available from begining of the game (but no splits for Mending content).
  • \n
  • Nothing pre-Mend is changed, so you can grab a save from Buck's savebank: https://buck4437.github.io/save-bank/.
  • \n
  • Endgame: 7 Mends and both Mending Upgrades.
  • \n
\n Known Issues:\n
\n
    \n
  • Importing a save disables speedruns, be wary until I find a workaround.
  • \n
  • There are console errors when viewing the Time Study Tree in Nameless' Reality (I didn't edit anything there). However\n this doesn't seem to affect gameplay in any way.
  • \n
  • The Invert BH button still shows up when Hard V is locked
  • \n
  • Glyph preset importing can equip more than 1 Effarig/Reality Glyph before the 7 Mend milestone. Please unequip before importing :).
  • \n
  • Viewing the credits in the \"About the game\" modal displays incorrectly, you should be able to hit the Escape key to exit.
  • \n
  • The 2 Mend Milestone is also supposed to give autobuyers for the rebuyable Pelle dilation upgrades, but are currently non-functional. Tip: you can click on them once, then hold the Enter key to rebuy them rapidly.
  • \n
  • The Mending tab has no icon in the Aero theme
  • \n
"}];for(let V=0;VPlayerProgress.infinityUnlocked()||player.galaxies>0||player.dimensionBoosts>0},{name:"Antimatter Galaxy",option:"antimatterGalaxy",isUnlocked:()=>PlayerProgress.infinityUnlocked()||player.galaxies>0},{name:"Sacrifice",option:"sacrifice",isUnlocked:()=>Sacrifice.isVisible},{name:"Big Crunch",option:"bigCrunch",isUnlocked:()=>player.break||PlayerProgress.eternityUnlocked()},{name:"Challenges",option:"challenges",isUnlocked:()=>PlayerProgress.infinityUnlocked()},{name:"Exit Challenges",option:"exitChallenge",isUnlocked:()=>PlayerProgress.infinityUnlocked()},{name:"Replicanti Galaxy",option:"replicantiGalaxy",isUnlocked:()=>PlayerProgress.eternityUnlocked()||player.replicanti.unl},{name:"Eternity",option:"eternity",isUnlocked:()=>PlayerProgress.eternityUnlocked()},{name:"Dilation",option:"dilation",isUnlocked:()=>PlayerProgress.realityUnlocked()||!Currency.tachyonParticles.eq(0)},{name:"Reset Reality",option:"resetReality",isUnlocked:()=>PlayerProgress.realityUnlocked()},{name:"Glyph Replace",option:"glyphReplace",isUnlocked:()=>PlayerProgress.realityUnlocked()},{name:"Glyph Sacrifice",option:"glyphSacrifice",isUnlocked:()=>GlyphSacrificeHandler.canSacrifice},{name:"Glyph Purge",option:"autoClean",isUnlocked:()=>GlyphSacrificeHandler.canSacrifice},{name:"Sacrifice All Glyphs",option:"sacrificeAll",isUnlocked:()=>GlyphSacrificeHandler.canSacrifice},{name:"Glyph Selection",option:"glyphSelection",isUnlocked:()=>Autobuyer.reality.isUnlocked},{name:"Glyph Undo",option:"glyphUndo",isUnlocked:()=>TeresaUnlocks.undo.canBeApplied},{name:"Switch Automator Editor",option:"switchAutomatorMode",isUnlocked:()=>Player.automatorUnlocked},{name:"Delete Glyph Preset",option:"deleteGlyphSetSave",isUnlocked:()=>EffarigUnlock.setSaves.isUnlocked},{name:"Glyph Refine",option:"glyphRefine",isUnlocked:()=>Ra.unlocks.unlockGlyphAlchemy.canBeApplied},{name:"Armageddon",option:"armageddon",isUnlocked:()=>Pelle.isDoomed},{name:"Respec Shop Purchases",option:"respecIAP",isUnlocked:()=>!0},{name:"Mending",option:"mending",isUnlocked:()=>PlayerProgress.mendingUnlocked()}],ji={roles:{1:"[Vanilla] Creator",2:"[Vanilla] Technical Architect",3:"[Vanilla] Lead Developer",4:"[Vanilla] Android Developer",5:"[Vanilla] Steam Developer",6:"[Vanilla] Library Developer",7:"[Vanilla] Developer",8:"[Vanilla] Lead Design Consultant",9:"[Vanilla] Design Consultant",10:"[Vanilla] Modal Maker, Lady Taker, Pie Baker, Tutorial Creater",11:"[Vanilla] Lurker Tester",12:"[Vanilla] Web Tester",13:"[Vanilla] Android Tester",14:"Redemption Developer",15:"[Redemption] Development Assistant",16:"[Redemption] Balancing Assistant",17:"[Redemption] Artist",18:"[Redemption] Testers"},people:[{name:"Hevipelle",name2:"Ivar Kerajärvi",roles:1},{name:"Razenpok",name2:"Andrei Andreev",roles:[2,15]},{name:"garnet420",roles:3},{name:"Omsi",roles:3},{name:"SpectralFlame",name2:"Christopher Yip",roles:[3,15]},{name:"WaitingIdly",roles:[3,7,9,12,13,15]},{name:"kajfik",name2:"Jakub Kajfosz",roles:4},{name:"Makopaz",name2:"Zack Stein",roles:5},{name:"Patashu",roles:[6,7,12]},{name:"Dan",roles:[7,12]},{name:"earth",name2:"Jace Royer",roles:[7,10,12,13,15]},{name:"Hira",roles:[7,12,13,15]},{name:"IkerStream",name2:"Iker de Aguirre",roles:[7,12]},{name:"L4R5",name2:"Lars Wolf",roles:[7,12,13]},{name:"Pichusuperlover",roles:[7,9,12]},{name:"realrapidjazz",roles:[7,8]},{name:"Scarlet",roles:[7,12,13]},{name:"slabdrill",roles:7},{name:"Acamaeda",roles:[9,12]},{name:"Dravitar",name2:"Alex Henderson",roles:11},{name:"Aesis",roles:12},{name:"AFYINEE",name2:"Gabriel HADDAG",roles:12},{name:"Alexitato",roles:12},{name:"Anno",roles:12},{name:"Archa",name2:"Myresa",roles:[12,13]},{name:"ArrowBounce",name2:"Timothy Su",roles:12},{name:"Birb",name2:"Kelsey Black",roles:12},{name:"Boo",name2:"Jean-Christophe Bourgault",roles:12},{name:"CaptainGalaxy",name2:"Ovidijus Točelis",roles:12},{name:"ChaoticHans",roles:[12,13]},{name:"cubic frog",roles:12},{name:"dankesehr",roles:12},{name:"Davixx",name2:"Davide Fedele",roles:12},{name:"Empireus",roles:12},{name:"GirixK",name2:"Nikola Jelinčić",roles:[12,13]},{name:"GoldenTritium",roles:[12,13]},{name:"Kael",roles:12},{name:"Lynn",roles:12},{name:"Merp",roles:12},{name:"philipebreaker",name2:"Philipe",roles:12},{name:"Phillip Marshall",roles:12},{name:"Phoenix",roles:12},{name:"Reda Kotob",roles:12},{name:"Saturnus",roles:12},{name:"SereKabii",roles:12},{name:"Sheer",roles:12},{name:"sirusi",name2:"Vinícius Oliveira Martins",roles:12},{name:"Spanosa",name2:"Jared K",roles:12},{name:"Sparticle999",roles:12},{name:"SpicyCrusader13",roles:[12,13]},{name:"Storm",roles:12},{name:"SzyszakS",roles:12},{name:"Tacitus",roles:12},{name:"Typh",roles:12},{name:"Vnge",name2:"Ben Parrish",roles:[12,13]},{name:"Xemadus",name2:"Jonathan Gibson",roles:12},{name:"Young Woo Joo",roles:12},{name:"Zipi",roles:12},{name:"about:blank",roles:13},{name:"ÆiOuF",roles:13},{name:"Akirious",roles:13},{name:"Anjinho01",roles:13},{name:"Anthios",roles:13},{name:"Aubrey Ark",roles:13},{name:"Auti",name2:"Lucia Tolle",roles:13},{name:"Buck",roles:13},{name:"Barrin84",roles:13},{name:"Calmcat",roles:13},{name:"ChizuX",roles:13},{name:"Circle",roles:13},{name:"Crinkly Weasel",name2:"Aaryan Sarawgi",roles:13},{name:"Daniella",roles:13},{name:"DarthDie",name2:"Briar Bowser",roles:13},{name:"ElPopote83",roles:13},{name:"Epsilon",name2:"Coolguystorm",roles:13},{name:"Firecracker",roles:13},{name:"Gaunter",roles:13},{name:"Gimmick",roles:13},{name:"HarrisL2",roles:13},{name:"Hellbach",name2:"Asher Günther",roles:13},{name:"hen-ben",name2:"Henry Ellenberg",roles:13},{name:"ImpossibleSalsa",roles:13},{name:"JayM#1872",name2:"Jay McGee",roles:13},{name:"Johanniklas",name2:"Jan-Niklas Petersen",roles:13},{name:"Joseph Micheli",roles:13},{name:"kaislash",name2:"Lily",roles:13},{name:"Kirku",name2:"Fabian Makowski",roles:13},{name:"Kirin",name2:"Arthur",roles:13},{name:"Klötzchen",roles:13},{name:"L5racer",roles:13},{name:"Marshmallow",roles:13},{name:"HyperionMike",name2:"Miikael Siitan",roles:13},{name:"Mirai",roles:13},{name:"Monoma",name2:"ARoman Ruiz",roles:13},{name:"Nani",roles:13},{name:"Neo",name2:"Joon",roles:13},{name:"netweak",roles:13},{name:"NiZeKiHo",name2:"DominusDane",roles:13},{name:"NotBrewst",name2:"Luc Leblanc",roles:13},{name:"opdollar",name2:"Zane Coole",roles:13},{name:"Pavlxiiv",roles:13},{name:"PotatoTIAB",roles:13},{name:"Razor",roles:13},{name:"Razvan Cercel",roles:13},{name:"ReacTivity",roles:13},{name:"Reaxt",name2:"Rea Koehler",roles:13},{name:"Ruins",roles:13},{name:"Rukimix",roles:13},{name:"shadowevil",roles:13},{name:"Skunky",name2:"Lukas",roles:13},{name:"Snaeky",roles:13},{name:"Socks",name2:"Hannah Pocks",roles:13},{name:"Sweets the Alien",roles:13},{name:"Tables",roles:13},{name:"Taylor Reeves",roles:13},{name:"TheAhmex",roles:13},{name:"The Trust Melon",roles:13},{name:"Tim Wong",roles:13},{name:"tragedt",name2:"Ethan Manninen",roles:13},{name:"tui sapo",roles:13},{name:"Valentine Clarissa Alanis Star Z",roles:13},{name:"vanadium_void",roles:13},{name:"X3N0_32",roles:13},{name:"ZylaKat",name2:"Katherine Goforth-Harbin",roles:13},{name:"Royalflush297",roles:14},{name:"Miabread",roles:15},{name:"incremental_gamer",roles:[14,15,18]},{name:"Merlyn",roles:[15,18]},{name:"Plasmawario",roles:15},{name:"Hexa",roles:[14,15,16,17]},{name:"MrKrutaman",roles:[15,17]},{name:"BsonHK",roles:16},{name:"ArchercatNEO",roles:15},{name:"yodi555",roles:15},{name:"Amity",roles:[14,16]},{name:"Wellington",roles:14},{name:"sxy62146214",roles:14},{name:"aswefljkd",roles:14},{name:"beni",roles:18},{name:"Legendis",roles:18},{name:"Melfistic",roles:18},{name:"donaldino",roles:18},{name:"Rumbles",roles:18},{name:"uiinpui",roles:18}]};function Xi(e,t,i){return Notation.scientific.format(e,t,i)}function zi(e){return Notations.current.isPainful?Xi(e,2):formatWithCommas("number"===typeof e?e.toFixed(0):e.toNumber().toFixed(0))}function Ki(e,t){const i=[];return Decimal.neq(e,0)&&i.push(Xi(e,2)),Decimal.neq(t,0)&&i.push(`${Xi(t,2,2)}i`),Decimal.eq(e,0)&&Decimal.eq(t,0)?Xi(0):i.join(" + ")}ji.roles.count=Object.keys(ji.roles).length;const Zi={challenges:[{name:()=>`${Teresa.possessiveName} Reality`,activityToken:()=>Teresa.isRunning,resource:()=>Teresa.runCompleted?`${Xi(player.antimatter,2,1)} AM`:`${Xi(player.eternityPoints,2)} EP`},{name:()=>`${Effarig.possessiveName} Reality - ${Effarig.currentStageName}`,activityToken:()=>Effarig.isRunning,resource:()=>{switch(Effarig.currentStage){case EFFARIG_STAGES.INFINITY:return`${Xi(player.antimatter,2,1)} AM`;case EFFARIG_STAGES.ETERNITY:return`${Xi(player.infinityPoints,2)} IP`;case EFFARIG_STAGES.REALITY:default:return`${Xi(player.eternityPoints,2)} EP`}}},{name:()=>`${Enslaved.possessiveName} Reality`,activityToken:()=>Enslaved.isRunning,resource:()=>`${Xi(player.eternityPoints,2)} EP`},{name:()=>`${V.possessiveName} Reality`,activityToken:()=>V.isRunning,resource:()=>null},{name:()=>`${V.possessiveName} Superhard Reality`,activityToken:()=>V.isSuperRunning,resource:()=>null},{name:()=>`${Ra.possessiveName} Reality`,activityToken:()=>Ra.isRunning,resource:()=>null},{name:()=>{const e=Laitela.maxAllowedDimension,t=e?`D${e} max`:"Final";return`${Laitela.possessiveName} Reality - ${t}`},activityToken:()=>Laitela.isRunning,resource:()=>`${formatPercents(player.celestials.laitela.entropy,2,2)} Entropy`},{name:()=>"Dilation",activityToken:()=>player.dilation.active,resource:()=>`${Xi(player.antimatter,2,1)} AM`},{name:e=>`EC ${e}`,activityToken:()=>{if(!player.challenge.eternity.current)return!1;const e=player.challenge.eternity.current,t=EternityChallenge(e);return t.remainingCompletions?`${e}x${t.completions+1}`:e},resource:()=>`${Xi(player.infinityPoints,2)} IP`},{name:e=>`IC ${e}`,activityToken:()=>player.challenge.infinity.current,resource:()=>`${Xi(player.antimatter,2,1)} AM`},{name:e=>`NC ${e}`,activityToken:()=>player.challenge.normal.current,resource:()=>`${Xi(player.antimatter,2,1)} AM`}],stages:[{name:"Pre-Infinity",hasReached:()=>!0,mainResource:()=>`${Xi(player.antimatter,2,1)} AM`,resourceList:[()=>quantify("Boost",player.dimensionBoosts,0,0,zi),()=>quantify("Galaxy",player.galaxies,0,0,zi)]},{name:"Infinity",hasReached:()=>PlayerProgress.infinityUnlocked(),mainResource:()=>`${Xi(player.infinityPoints,2)} IP`,resourceList:[()=>quantify("Infinity",player.infinities,0,0,zi)]},{name:"Broken Infinity",hasReached:()=>player.break,mainResource:()=>`${Xi(player.infinityPoints,2)} IP`,resourceList:[()=>quantify("Infinity",player.infinities,2,0,Xi)]},{name:"Eternity",hasReached:()=>PlayerProgress.eternityUnlocked(),mainResource:()=>`${Xi(player.eternityPoints,2)} EP`,resourceList:[()=>quantify("Eternity",player.eternities,0,0,zi)]},{name:"Eternity",hasReached:()=>player.eternityChalls.eterc1>0,mainResource:()=>`${Xi(player.eternityPoints,2)} EP`,resourceList:[()=>quantify("EC completion",Object.values(player.eternityChalls).reduce(((e,t)=>e+t),0),0,0,zi)]},{name:"Time Dilation",hasReached:()=>PlayerProgress.dilationUnlocked(),mainResource:()=>`${Xi(player.eternityPoints,2)} EP`,resourceList:[()=>`${Xi(player.dilation.dilatedTime,2,2)} DT`]},{name:"Reality",hasReached:()=>player.realities>0,mainResource:()=>`${Xi(player.reality.realityMachines,2)} RM`,resourceList:[()=>quantify("Reality",player.realities,0,0,zi),()=>`Best Glyph Level: ${zi(player.records.bestReality.glyphLevel)}`]},{name:()=>Teresa.displayName,hasReached:()=>Teresa.isUnlocked,mainResource:()=>`${Xi(player.reality.realityMachines,2)} RM`,resourceList:[()=>quantify("Reality",player.realities,0,0,zi),()=>`Best GL: ${zi(player.records.bestReality.glyphLevel)}`,()=>`Poured: ${Xi(player.celestials.teresa.pouredAmount,2)} RM`]},{name:()=>Effarig.displayName,hasReached:()=>TeresaUnlocks.effarig.isUnlocked,mainResource:()=>`${Xi(player.reality.realityMachines,2)} RM`,resourceList:[()=>`Best GL: ${zi(player.records.bestReality.glyphLevel)}`,()=>quantify("Relic Shard",player.celestials.effarig.relicShards,2,0,Xi)]},{name:()=>Enslaved.displayName,hasReached:()=>EffarigUnlock.eternity.isUnlocked,mainResource:()=>`${Xi(player.reality.realityMachines,2)} RM`,resourceList:[()=>`Best GL: ${zi(player.records.bestReality.glyphLevel)}`,()=>`Charged: ${Xi(TimeSpan.fromMilliseconds(player.celestials.enslaved.stored).totalYears,2)} years`]},{name:()=>V.displayName,hasReached:()=>Achievement(151).isUnlocked,mainResource:()=>`${Xi(player.reality.realityMachines,2)} RM`,resourceList:[()=>`Best GL: ${zi(player.records.bestReality.glyphLevel)}`,()=>quantify("V-Achievement",player.celestials.v.runUnlocks.sum(),0,0,zi)]},{name:()=>Ra.displayName,hasReached:()=>VUnlocks.raUnlock.isUnlocked,mainResource:()=>`${Xi(player.reality.realityMachines,2)} RM`,resourceList:[()=>`Best GL: ${zi(player.records.bestReality.glyphLevel)}`,()=>`Ra Levels: ${Ra.pets.all.map((e=>zi(e.level))).join("/")}`]},{name:()=>Ra.displayName,hasReached:()=>MachineHandler.isIMUnlocked,mainResource:()=>`${Ki(player.reality.realityMachines,player.reality.imaginaryMachines)} RM`,resourceList:[()=>`Best GL: ${zi(player.records.bestReality.glyphLevel)}`,()=>`Ra Levels: ${Ra.pets.all.map((e=>zi(e.level))).join("/")}`]},{name:()=>Laitela.displayName,hasReached:()=>Laitela.isUnlocked,mainResource:()=>`${Ki(player.reality.realityMachines,player.reality.imaginaryMachines)} RM`,resourceList:[()=>`Best GL: ${zi(player.records.bestReality.glyphLevel)}`,()=>quantify("Singularity",player.celestials.laitela.singularities,2,0,Xi)]},{name:"Pelle",hasReached:()=>Pelle.isDoomed,mainResource:()=>quantify("Reality Shard",player.celestials.pelle.realityShards,2),resourceList:[()=>quantify("Remnant",player.celestials.pelle.remnants,2)]},{name:"END",hasReached:()=>GameEnd.endState>=END_STATE_MARKERS.GAME_END,mainResource:()=>"END Antimatter",resourceList:[()=>"Nothing remains."]}]};function Qi(e,t,i){return Decimal.multiply(e,Decimal.pow(t,player.dilation.rebuyables[i]))}function Ji(e){return{id:e.id,cost:()=>player.dilation.rebuyables[e.id]>5e3?Qi(e.initialCost,e.incrementSC,e.id):Qi(e.initialCost,e.increment,e.id),initialCost:e.initialCost,increment:e.increment,incrementSC:e.incrementSC,description:e.description,effect:()=>e.effect(player.dilation.rebuyables[e.id]),formatEffect:e.formatEffect,formatCost:e.formatCost,purchaseCap:e.purchaseCap,pellePurchaseCap:e.pellePurchaseCap,reachedCap:()=>Pelle.isDoomed?player.dilation.rebuyables[e.id]>=e.pellePurchaseCap:player.dilation.rebuyables[e.id]>=e.purchaseCap,pelleOnly:Boolean(e.pelleOnly),rebuyable:!0}}const ea={dtGain:Ji({id:1,initialCost:1e4,increment:10,incrementSC:100,description:()=>SingularityMilestone.dilatedTimeFromSingularities.canBeApplied||Achievement(187).canBeApplied?`${formatX(2*Effects.product(SingularityMilestone.dilatedTimeFromSingularities,Achievement(187)),2,2)} Dilated Time gain`:"Double Dilated Time gain",effect:e=>{const t=2*Effects.product(SingularityMilestone.dilatedTimeFromSingularities,Achievement(187));return Decimal.pow(t,e)},formatEffect:e=>{const t=SingularityMilestone.dilatedTimeFromSingularities.canBeApplied||Achievement(187).canBeApplied;return formatX(e,2,t?2:0)},formatCost:e=>format(e,2),purchaseCap:Number.MAX_VALUE,pellePurchaseCap:Number.MAX_VALUE}),galaxyThreshold:Ji({id:2,initialCost:1e6,increment:100,incrementSC:100,description:()=>Perk.bypassTGReset.isBought&&!Pelle.isDoomed?"Reset Tachyon Galaxies, but lower their threshold":"Reset Dilated Time and Tachyon Galaxies, but lower their threshold",effect:e=>e<38?Math.pow(.8,e):0,formatEffect:e=>{if(0===e)return`${formatX(getTachyonGalaxyMult(e),4,4)}`;const t=e===Math.pow(.8,37)?0:.8*e;return`${formatX(getTachyonGalaxyMult(e),4,4)} ➜\n Next: ${formatX(getTachyonGalaxyMult(t),4,4)}`},formatCost:e=>format(e,2),purchaseCap:38,pellePurchaseCap:38}),tachyonGain:Ji({id:3,initialCost:1e7,increment:20,incrementSC:4e3,description:()=>Pelle.isDoomed?Ra.unlocks.unlockPelleTPMult.isUnlocked?`Multiply the amount of Tachyon Particles gained by ${format(1.1,1,1)}`:`Multiply the amount of Tachyon Particles gained by ${formatInt(1)}`:Enslaved.isRunning?`Multiply the amount of Tachyon Particles gained\n by ${Math.pow(3,Enslaved.tachyonNerf).toFixed(2)}`:"Triple the amount of Tachyon Particles gained",effect:e=>Pelle.isDoomed?Ra.unlocks.unlockPelleTPMult.isUnlocked?Decimal.pow(1.1,e):b.D1.pow(e):b.D3.pow(e),formatEffect:e=>formatX(e,2,2),formatCost:e=>format(e,2),purchaseCap:Number.MAX_VALUE,pellePurchaseCap:Number.MAX_VALUE}),doubleGalaxies:{id:4,cost:5e6,description:()=>`Gain twice as many Tachyon Galaxies, up to ${formatInt(500)} base Galaxies`,effect:2},tdMultReplicanti:{id:5,cost:1e9,description:()=>{const e=replicantiMult().pLog10();let t="0.1";if(e>9e3){const i=DilationUpgrade.tdMultReplicanti.effectValue.pLog10()/e;i<.095&&(t=i.toFixed(2))}return`Time Dimensions are affected by Replicanti multiplier ${formatPow(t,1,3)}, reduced\n effect above ${formatX(b.E9000)}`},effect:()=>{let e=.1*replicantiMult().pLog10();return e=e>9e3?9e3+.5*(e-9e3):e,Decimal.pow10(e)},formatEffect:e=>formatX(e,2,1)},ndMultDT:{id:6,cost:5e7,description:"Antimatter Dimension multiplier based on Dilated Time, unaffected by Time Dilation",effect:()=>Currency.dilatedTime.value.pow(308).clampMin(1),formatEffect:e=>formatX(e,2,1)},ipMultDT:{id:7,cost:2e12,description:"Gain a multiplier to Infinity Points based on Dilated Time",effect:()=>Currency.dilatedTime.value.pow(1e3).clampMin(1),formatEffect:e=>formatX(e,2,1),cap:()=>Effarig.eternityCap},timeStudySplit:{id:8,cost:1e10,description:"You can buy all three Time Study paths from the Dimension Split"},dilationPenalty:{id:9,cost:1e11,description:()=>`Reduce the Dilation penalty (${formatPow(1.05,2,2)} after reduction)`,effect:1.05},ttGenerator:{id:10,cost:1e15,description:"Generate Time Theorems based on Tachyon Particles",effect:()=>Currency.tachyonParticles.value.div(2e4),formatEffect:e=>`${format(e,2,1)}/sec`},dtGainPelle:Ji({id:11,initialCost:1e14,increment:100,incrementSC:100,pelleOnly:!0,description:()=>Pelle.isDoomed?`${formatX(5)} Dilated Time gain`:`${formatX(1.75,2,2)} Dilated Time gain`,effect:e=>Pelle.isDoomed?Decimal.pow(5,e):Decimal.pow(1.75,e),formatEffect:e=>formatX(e,2,2),formatCost:e=>format(e,2),purchaseCap:206,pellePurchaseCap:Number.MAX_VALUE}),galaxyMultiplier:Ji({id:12,initialCost:1e15,increment:1e3,incrementSC:1e3,pelleOnly:!0,description:"Multiply Tachyon Galaxies gained, applies after TG doubling upgrade",effect:e=>{let t=Ra.unlocks.twinTachyonGalaxyCapIncrease.isUnlocked?Math.min(Decimal.log10(Currency.dilatedTime.value.clampMin(1))/25e3,2):0;return Pelle.isDoomed?e*(1+t)+1:e*(1+t)*.1+1},formatEffect:e=>{let t=Ra.unlocks.twinTachyonGalaxyCapIncrease.isUnlocked?Math.floor(Decimal.log10(Currency.dilatedTime.value)/25e3):0;return Pelle.isDoomed?`${formatX(e*(1+t),2)} ➜ ${formatX(e*(1+t)+1,2,2)}`:player.dilation.rebuyables[12]>=10?`${formatX(e,2,2)}`:`${formatX(e*(1+t),2,1,2)} ➜ ${formatX(e*(1+t)+.1,2,2)}`},formatCost:e=>format(e,2),purchaseCap:10,pellePurchaseCap:Number.MAX_VALUE}),tickspeedPower:Ji({id:13,initialCost:1e16,increment:1e4,incrementSC:1e4,pelleOnly:!0,description:"Gain a power to Tickspeed",effect:e=>Pelle.isDoomed?1+.03*e:1+.02*e,formatEffect:e=>Pelle.isDoomed?`${formatPow(e,2,2)} ➜ ${formatPow(e+.03,2,2)}`:player.dilation.rebuyables[13]>=10?`${formatPow(e,2,2)}`:`${formatPow(e,2,2)} ➜ ${formatPow(e+.02,2,2)}`,formatCost:e=>format(e,2),purchaseCap:10,pellePurchaseCap:Number.MAX_VALUE}),galaxyThresholdPelle:{id:14,cost:1e45,pelleOnly:!0,get description(){return Pelle.isDoomed?"Apply a cube root to the Tachyon Galaxy threshold":"Apply a 1.1th root to the Tachyon Galaxy threshold"},effect:()=>Pelle.isDoomed?1/3:1/1.1},flatDilationMult:{id:15,cost:1e55,pelleOnly:!0,description:()=>"Gain more Dilated Time based on current EP",effect:()=>1e9**Math.min((Math.max(player.eternityPoints.log10()-1500,0)/2500)**1.2,1),formatEffect:e=>formatX(e,2,2)}},ta={autobuyerIPMult:{eternities:1,reward:"Unlock the Infinity Point multiplier autobuyer",pelleUseless:!0},keepAutobuyers:{eternities:2,reward:"You start Eternity with all Normal Challenges complete, all normal autobuyers, and infinity broken"},autobuyerReplicantiGalaxy:{eternities:3,reward:"Unlock the Replicanti Galaxy Autobuyer"},keepInfinityUpgrades:{eternities:4,reward:"You start Eternity with all Infinity Upgrades",givenByPelle:()=>PelleUpgrade.keepInfinityUpgrades.isBought,pelleUseless:!0},bigCrunchModes:{eternities:5,reward:"Unlock more Big Crunch Autobuyer options"},autoEP:{eternities:6,reward:()=>{const e=getOfflineEPGain(TimeSpan.fromMinutes(1).totalMilliseconds),t=getEternitiedMilestoneReward(TimeSpan.fromHours(1).totalMilliseconds,EternityMilestone.autoEternities.isReached).gt(0),i=getInfinitiedMilestoneReward(TimeSpan.fromHours(1).totalMilliseconds,EternityMilestone.autoInfinities.isReached).gt(0);if(!player.options.offlineProgress)return"This milestone would give offline EP generation, but offline progress\n is currently disabled";const a=t||i?"Inactive":`Currently ${format(e,2,2)} EP/min`;return`While offline, gain ${formatPercents(.25)} of your best Eternity Points per minute from previous\n Eternities (${a})`},activeCondition:()=>player.options.offlineProgress?`Active as long as neither of the other offline milestones\n (${formatInt(200)} or ${formatInt(1e3)}) are also active`:""},autoIC:{eternities:7,reward:"You complete Infinity Challenges as soon as you unlock them,\n and keep the Dimensional Sacrifice Autobuyer",pelleUseless:!0},keepBreakUpgrades:{eternities:8,reward:"You start Eternity with all Break Infinity Upgrades",givenByPelle:()=>PelleUpgrade.keepBreakInfinityUpgrades.isBought,pelleUseless:!0},autobuyMaxGalaxies:{eternities:9,reward:"Unlock the buy max Antimatter Galaxies Autobuyer mode"},unlockReplicanti:{eternities:10,reward:"You start with Replicanti unlocked",givenByPelle:()=>PelleUpgrade.replicantiStayUnlocked.isBought,pelleUseless:!0},autobuyerID1:{eternities:11,reward:"Unlock the 1st Infinity Dimension Autobuyer",givenByPelle:()=>PelleUpgrade.IDAutobuyers.isBought,pelleUseless:!0},autobuyerID2:{eternities:12,reward:"Unlock the 2nd Infinity Dimension Autobuyer",givenByPelle:()=>PelleUpgrade.IDAutobuyers.isBought,pelleUseless:!0},autobuyerID3:{eternities:13,reward:"Unlock the 3rd Infinity Dimension Autobuyer",givenByPelle:()=>PelleUpgrade.IDAutobuyers.isBought,pelleUseless:!0},autobuyerID4:{eternities:14,reward:"Unlock the 4th Infinity Dimension Autobuyer",givenByPelle:()=>PelleUpgrade.IDAutobuyers.isBought,pelleUseless:!0},autobuyerID5:{eternities:15,reward:"Unlock the 5th Infinity Dimension Autobuyer",givenByPelle:()=>PelleUpgrade.IDAutobuyers.isBought,pelleUseless:!0},autobuyerID6:{eternities:16,reward:"Unlock the 6th Infinity Dimension Autobuyer",givenByPelle:()=>PelleUpgrade.IDAutobuyers.isBought,pelleUseless:!0},autobuyerID7:{eternities:17,reward:"Unlock the 7th Infinity Dimension Autobuyer",givenByPelle:()=>PelleUpgrade.IDAutobuyers.isBought,pelleUseless:!0},autobuyerID8:{eternities:18,reward:"Unlock the 8th Infinity Dimension Autobuyer",givenByPelle:()=>PelleUpgrade.IDAutobuyers.isBought,pelleUseless:!0},autoUnlockID:{eternities:25,reward:"You automatically unlock Infinity Dimensions upon reaching them"},unlockAllND:{eternities:30,reward:"Start with all Antimatter Dimensions available for purchase"},replicantiNoReset:{eternities:40,reward:"Replicanti Galaxies no longer reset Antimatter, Antimatter Dimensions,\n Tickspeed, Dimensional Sacrifice, or Dimension Boosts",pelleUseless:!0},autobuyerReplicantiChance:{eternities:50,reward:"Unlock the Replicanti Chance Upgrade Autobuyer",givenByPelle:()=>PelleUpgrade.replicantiAutobuyers.isBought,pelleUseless:!0},autobuyerReplicantiInterval:{eternities:60,reward:"Unlock the Replicanti Interval Upgrade Autobuyer",givenByPelle:()=>PelleUpgrade.replicantiAutobuyers.isBought,pelleUseless:!0},autobuyerReplicantiMaxGalaxies:{eternities:80,reward:"Unlock the Max Replicanti Galaxy Upgrade Autobuyer",givenByPelle:()=>PelleUpgrade.replicantiAutobuyers.isBought,pelleUseless:!0},autobuyerEternity:{eternities:100,reward:"Unlock autobuyer for Eternities"},autoEternities:{eternities:200,reward:()=>{if(!player.options.offlineProgress)return"This milestone would generate eternities offline, but offline\n progress is currently disabled";const e=getEternitiedMilestoneReward(TimeSpan.fromHours(1).totalMilliseconds,player.eternities.gte(200)),t=PlayerProgress.seenAlteredSpeed()?" real-time":"";return`While offline, gain Eternities at ${formatPercents(.5)} the rate of your fastest${t} Eternity `+(e.gt(0)?`(Currently ${format(e,2,2)}/hour)`:"(Inactive)")},activeCondition:()=>player.options.offlineProgress?`Must be outside of all Challenges and Dilation, and the Eternity Autobuyer must be set to Eternity at zero EP.\n This milestone's effect is capped at ${formatInt(33)}ms.`:"",pelleUseless:!0},autoInfinities:{eternities:1e3,reward:()=>{if(!player.options.offlineProgress)return"This milestone would generate infinities offline, but offline\n progress is currently disabled";const e=getInfinitiedMilestoneReward(TimeSpan.fromHours(1).totalMilliseconds,player.eternities.gte(1e3));return`While offline, gain Infinities equal to ${formatPercents(.5)}\n your best Infinities/hour this Eternity `+(e.gt(0)?`(Currently ${format(e,2,2)}/hour)`:"(Inactive)")},activeCondition:()=>player.options.offlineProgress?`Must be outside of Normal/Infinity Challenges and outside of EC4 and EC12,\n the Big Crunch Autobuyer must be turned on and set to time mode with less than ${formatInt(60)} seconds,\n and the Eternity Autobuyer must be turned off.`:"",pelleUseless:!0}},ia={idMultEP:{id:1,cost:5,description:()=>`Infinity Dimensions multiplier based on unspent Eternity Points (x+${formatInt(1)})`,effect:()=>Currency.eternityPoints.value.plus(1),formatEffect:e=>formatX(e,2,1)},idMultEternities:{id:2,cost:10,description:()=>`Infinity Dimension multiplier based on Eternities\n ((x/${formatInt(200)})^log4(${formatInt(2)}x), softcap at ${format(1e5)} Eternities)`,effect(){const e=Math.log4,t=Currency.eternities.value.clampMax(1e5).toNumber(),i=t/200+1,a=Math.log(2*t+1)/e,n=Math.pow(i,a),s=Currency.eternities.value.sub(1e5),r=s.divide(200).plus(1),o=s.times(2).plus(1).log(Math.E)/e,l=r.times(o).clampMin(1);return l.times(n)},formatEffect:e=>formatX(e,2,1)},idMultICRecords:{id:3,cost:5e4,description:"Infinity Dimensions multiplier based on sum of Infinity Challenge times",effect:()=>b.D2.pow(30/Decimal.clampMin(Time.infinityChallengeSum.totalSeconds,.1).toNumber()),cap:b.D2P30D0_61,formatEffect:e=>formatX(e,2,1)},tdMultAchs:{id:4,cost:1e16,description:"Your Achievement bonus affects Time Dimensions",effect:()=>Achievements.power,formatEffect:e=>formatX(e,2,1)},tdMultTheorems:{id:5,cost:1e40,description:"Time Dimensions are multiplied by your unspent Time Theorems",effect:()=>Decimal.max(Currency.timeTheorems.value,1),formatEffect:e=>formatX(e,2,1)},tdMultRealTime:{id:6,cost:1e50,description:()=>Pelle.isDoomed?"Time Dimensions are multiplied by days played in this Armageddon":PlayerProgress.mendingUnlocked()?"Time Dimensions are multiplied by days played in this Mend":"Time Dimensions are multiplied by days played",effect:()=>Pelle.isDoomed?Time.thisReality.totalDays.add(1):PlayerProgress.mendingUnlocked()?Decimal.max(Time.thisMend.totalDays,1):Decimal.max(Time.totalTimePlayed.totalDays,1),formatEffect:e=>formatX(e,2,1)}},aa=[{id:1,description:"Unlock Time Dilation",cost:5e3,requirement:()=>{const e=Currency.timeTheorems.max.gte(TimeStudy.dilation.totalTimeTheoremRequirement);if(Ra.unlocks.autoUnlockDilation.canBeApplied&&e&&!isInCelestialReality()&&!Pelle.isDoomed)return!0;const t=[231,232,233,234].some((e=>TimeStudy(e).isBought));if(Perk.bypassECDilation.canBeApplied)return t;const i=EternityChallenge(11).isFullyCompleted&&EternityChallenge(12).isFullyCompleted;return t&&i&&e}},{id:2,description:"Unlock the 5th Time Dimension",cost:1e6,requirement:()=>PlayerProgress.dilationUnlocked()},{id:3,description:"Unlock the 6th Time Dimension",cost:1e7,requirement:()=>TimeStudy.timeDimension(5).isBought},{id:4,description:"Unlock the 7th Time Dimension",cost:1e8,requirement:()=>TimeStudy.timeDimension(6).isBought},{id:5,description:"Unlock the 8th Time Dimension",cost:1e9,requirement:()=>TimeStudy.timeDimension(7).isBought},{id:6,description:()=>Pelle.isDoomed?"You cannot escape a Doomed Reality":"Unlock Reality",cost:1,requirement:()=>TimeStudy.timeDimension(8).isBought&&player.records.thisReality.maxEP.exponent>=4e3&&(Perk.firstPerk.isBought||Achievements.preReality.every((e=>e.isUnlocked)))&&!Pelle.isDoomed}],na=[{id:1,cost:30,requirement:[171],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,secondary:{resource:"Eternities",current:()=>Currency.eternities.value,required:e=>new Decimal(2e4+2e4*Math.min(e,Enslaved.isRunning?999:4)),formatValue:formatInt}},{id:2,cost:35,requirement:[171],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,secondary:{resource:"Tickspeed upgrades from Time Dimensions",current:()=>player.totalTickGained,required:e=>1300+150*Math.min(e,4),formatValue:formatInt}},{id:3,cost:40,requirement:[171],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,secondary:{resource:"8th Antimatter Dimensions",current:()=>AntimatterDimension(8).totalAmount,required:e=>new Decimal(17300+1250*Math.min(e,4)),formatValue:e=>formatInt(Math.floor(e.toNumber()))}},{id:4,cost:70,requirement:[143],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,secondary:{resource:"Infinities",current:()=>Currency.infinitiesTotal.value,required:e=>new Decimal(1e8+25e6*Math.min(e,4)),formatValue:e=>formatInt(Math.floor(e.toNumber()))}},{id:5,cost:130,requirement:[42],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,secondary:{resource:"Antimatter Galaxies",current:()=>player.galaxies,required:e=>160+14*Math.min(e,4),formatValue:formatInt}},{id:6,cost:85,requirement:[121],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,secondary:{resource:"Replicanti Galaxies",current:()=>player.replicanti.galaxies,required:e=>40+5*Math.min(e,4),formatValue:formatInt}},{id:7,cost:115,requirement:[111],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,secondary:{resource:"antimatter",current:()=>Currency.antimatter.value,required:e=>b.E300000.pow(Math.min(e,4)).times(b.E500000),formatValue:e=>format(e)}},{id:8,cost:115,requirement:[123],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,secondary:{resource:"Infinity Points",current:()=>Currency.infinityPoints.value,required:e=>b.E1000.pow(Math.min(e,4)).times(b.E4000),formatValue:e=>format(e)}},{id:9,cost:415,requirement:[151],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,secondary:{resource:"Infinity Power",current:()=>Currency.infinityPower.value,required:e=>b.E2000.pow(Math.min(e,4)).times(b.E17500),formatValue:e=>format(e)}},{id:10,cost:550,requirement:[181],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,secondary:{resource:"Eternity Points",current:()=>Currency.eternityPoints.value,required:e=>b.E20.pow(Math.min(e,4)).times(b.E100),formatValue:e=>format(e)}},{id:11,cost:1,requirement:[231,232],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,secondary:{path:"Antimatter Dimension",forbiddenStudies:[72,73]}},{id:12,cost:1,requirement:[233,234],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,secondary:{path:"Time Dimension",forbiddenStudies:[71,72]}}],sa=e=>{const t=e.times(10).add(1),i=Decimal.min(Decimal.pow(t,.125),500);return b.D15.pow(Decimal.log10(t)*i.toNumber())},ra=()=>{const e=Effarig.isRunning&&Effarig.currentStage===EFFARIG_STAGES.ETERNITY,t=Perk.studyPassive.isBought?1e50:1e25;return e?Math.min(t,Effarig.eternityCap.toNumber()):t},oa=[{id:11,cost:1,requirement:[],reqType:TS_REQUIREMENT_TYPE.ALL,description:"Tickspeed affects 1st Time Dimension with reduced effect",effect:()=>{const e=Tickspeed.current.dividedBy(1e3),t=e.pow(.005).times(.95),i=e.pow(3e-4).times(.05);return t.plus(i).reciprocate()},cap:b.E2500,formatEffect:e=>formatX(e,2,1)},{id:21,cost:3,requirement:[11],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`Improve Replicanti multiplier formula to\n (log2(x)${formatPow(2)})+x${formatPow(.032,3,3)}`,effect:()=>Replicanti.amount.pow(.032),formatEffect:e=>{const t=Decimal.pow(Decimal.log2(Replicanti.amount.clampMin(1)),2),i=t.plus(e);return formatX(i.div(t).clampMin(1),2,2)}},{id:22,cost:2,requirement:[11],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`Base Replicanti interval limit ${formatInt(50)}ms ➜ ${formatInt(1)}ms`,effect:1},{id:31,cost:3,requirement:[21],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>{let e=Math.max(1+Mi.infinitiesTotal.value.pLog10()/1e4*Math.pow(Ra.pets.teresa.level,.2)/150,1);return BreakInfinityUpgrade.infinitiedMult.chargedEffect.isEffectActive?`Powers up multipliers that are based on your Infinities (Bonuses ^(${formatInt(4)}^${format(e,3,3)}))`:`Powers up multipliers that are based on your Infinities (Bonuses ${formatPow(4)})`},effect:()=>Math.min(4**BreakInfinityUpgrade.infinitiedMult.chargedEffect.effectValue,1e300)},{id:32,cost:2,requirement:[22],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"You gain more Infinities based on Dimension Boosts",effect:()=>Math.max(DimBoost.totalBoosts,1),formatEffect:e=>formatX(e,2)},{id:33,cost:2,requirement:[22],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"You keep half of your Replicanti Galaxies on Infinity"},{id:41,cost:4,requirement:[31],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`All Galaxies give a ${formatX(b.D1_2,1,1)} multiplier to Infinity Points gained`,effect:()=>b.D1_2.pow(Replicanti.galaxies.total+player.galaxies+player.dilation.totalTachyonGalaxies),formatEffect:e=>formatX(e,2,1)},{id:42,cost:6,requirement:[32],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`Antimatter Galaxy requirement increases by ${formatInt(52)}\n 8th Dimensions instead of ${formatInt(60)}`,effect:52},{id:51,cost:3,requirement:[41,42],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`You gain ${formatX(1e15)} more Infinity Points`,effect:1e15},{id:61,cost:3,requirement:[51],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`You gain ${formatX(15)} more Eternity Points`,effect:15},{id:62,cost:3,requirement:[42,()=>Perk.bypassEC5Lock.isBought||EternityChallenge(5).completions>0],reqType:TS_REQUIREMENT_TYPE.ALL,description:()=>`You gain Replicanti ${formatInt(3)} times faster`,effect:3},{id:71,cost:4,requirement:[61,()=>Perk.studyECRequirement.isBought||!EternityChallenge(12).isUnlocked],reqType:TS_REQUIREMENT_TYPE.DIMENSION_PATH,description:"Dimensional Sacrifice affects all other Antimatter Dimensions with reduced effect",effect:()=>Sacrifice.totalBoost.pow(.25).clampMin(1),cap:b.E210000,formatEffect:e=>formatX(e,2,1)},{id:72,cost:6,requirement:[61,()=>Perk.studyECRequirement.isBought||!EternityChallenge(11).isUnlocked&&!EternityChallenge(12).isUnlocked],reqType:TS_REQUIREMENT_TYPE.DIMENSION_PATH,description:"Dimensional Sacrifice affects 4th Infinity Dimension with greatly reduced effect",effect:()=>Sacrifice.totalBoost.pow(.04).clampMin(1),cap:b.E30000,formatEffect:e=>formatX(e,2,1)},{id:73,cost:5,requirement:[61,()=>Perk.studyECRequirement.isBought||!EternityChallenge(11).isUnlocked],reqType:TS_REQUIREMENT_TYPE.DIMENSION_PATH,description:"Dimensional Sacrifice affects 3rd Time Dimension with greatly reduced effect",effect:()=>Sacrifice.totalBoost.pow(.005).clampMin(1),cap:b.E1300,formatEffect:e=>formatX(e,2,1)},{id:81,cost:4,requirement:[71],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`Base Dimension Boost power becomes ${formatX(10)}`,effect:10},{id:82,cost:6,requirement:[72],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"Dimension Boosts affect Infinity Dimensions",effect:()=>b.D1_0000109.pow(Math.pow(DimBoost.totalBoosts,2)),cap:b.E1E7,formatEffect:e=>formatX(e,2,1)},{id:83,cost:5,requirement:[73],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"Dimension Boost multiplier based on tick upgrades gained from TDs",effect:()=>b.D1_0004.pow(player.totalTickGained),cap:b.E30,formatEffect:e=>formatX(e,2,1)},{id:91,cost:4,requirement:[81],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"Antimatter Dimension multiplier based on time spent in this Eternity",effect:()=>Decimal.pow10(15*Decimal.min(Time.thisEternity.totalMinutes,20).toNumber()),cap:b.E300,formatEffect:e=>formatX(e,2,1)},{id:92,cost:5,requirement:[82],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"Infinity Dimension multiplier based on fastest Eternity time",effect:()=>b.D2.pow(60/Decimal.max(Time.bestEternity.totalSeconds,2).toNumber()),cap:b.C2P30,formatEffect:e=>formatX(e,2,1)},{id:93,cost:7,requirement:[83],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"Time Dimension multiplier based on tick upgrades gained",effect:()=>Decimal.pow(player.totalTickGained,.25).clampMin(1),formatEffect:e=>formatX(e,2,1)},{id:101,cost:4,requirement:[91],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"Antimatter Dimension multiplier equal to Replicanti amount",effect:()=>Decimal.max(Replicanti.amount,1),formatEffect:e=>formatX(e,2,1)},{id:102,cost:6,requirement:[92],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"Replicanti Galaxies boost Replicanti multiplier",effect:()=>b.D5.pow(player.replicanti.galaxies),formatEffect:e=>formatX(e,2,1)},{id:103,cost:6,requirement:[93],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"Time Dimension multiplier equal to Replicanti Galaxy amount",effect:()=>Math.max(player.replicanti.galaxies,1),formatEffect:e=>formatX(e,2,0)},{id:111,cost:12,requirement:[101,102,103],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>Achievement(103).canBeApplied?`Make the Infinity Point formula better log(x)/${formatFloat(307.8,1)} ➜ log(x)/${formatInt(285)}`:`Make the Infinity Point formula better log(x)/${formatInt(308)} ➜ log(x)/${formatInt(285)}`,effect:285},{id:121,cost:9,STCost:2,requirement:[111],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[122,123],description:()=>Perk.studyActiveEP.isBought?`You gain ${formatX(50)} more Eternity Points`:"You gain more EP based on how fast your last ten Eternities\n were"+(PlayerProgress.realityUnlocked()?" (real time)":""),effect:()=>Perk.studyActiveEP.isBought?50:Math.clamp(250/Player.averageRealTimePerEternity,1,50),formatEffect:e=>Perk.studyActiveEP.isBought?void 0:formatX(e,1,1),cap:50},{id:122,cost:9,STCost:2,requirement:[111],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[121,123],description:()=>Perk.studyPassive.isBought?`You gain ${formatX(50)} more Eternity Points`:`You gain ${formatX(35)} more Eternity Points`,effect:()=>Perk.studyPassive.isBought?50:35},{id:123,cost:9,STCost:2,requirement:[111],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[121,122],description:"You gain more Eternity Points based on time spent this Eternity",effect:()=>{const e=TimeSpan.fromMinutes(Perk.studyIdleEP.effectOrDefault(0)),t=Time.thisEternity.plus(e).totalSeconds;return Decimal.sqrt(t.times(1.39))},formatEffect:e=>formatX(e,1,1)},{id:131,cost:5,STCost:8,requirement:[121],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[132,133],description:()=>Achievement(138).isUnlocked?`You can get ${formatPercents(.5)} more Replicanti Galaxies`:`Automatic Replicanti Galaxies are disabled, but you can get ${formatPercents(.5)} more`,effect:()=>Math.floor(player.replicanti.boughtGalaxyCap/2)},{id:132,cost:5,STCost:8,requirement:[122],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[131,133],description:()=>Perk.studyPassive.isBought&&!Pelle.isDoomed?`Replicanti Galaxies are ${formatPercents(.4)} stronger and Replicanti are ${format(3)} times faster`:`Replicanti Galaxies are ${formatPercents(.4)} stronger`,effect:.4},{id:133,cost:5,STCost:8,requirement:[123],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[131,132],description:()=>Achievement(138).isUnlocked?`Replicanti Galaxies are ${formatPercents(.5)} stronger`:`Replicanti are ${formatX(10)} slower until ${format(Number.MAX_VALUE,2)}, but Replicanti Galaxies are ${formatPercents(.5)} stronger`,effect:.5},{id:141,cost:4,STCost:2,requirement:[131],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[142,143],description:()=>Perk.studyActiveEP.isBought?`You gain ${formatX(b.E45)} more Infinity Points`:"Multiplier to Infinity Points, which decays over this Infinity",effect:()=>Perk.studyActiveEP.isBought?b.E45:b.E45.divide(sa(Time.thisInfinity.totalSeconds)).clampMin(1),formatEffect:e=>Perk.studyActiveEP.isBought?void 0:formatX(e,2,1)},{id:142,cost:4,STCost:2,requirement:[132],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[141,143],description:()=>`You gain ${formatX(ra())} more Infinity Points`,effect:ra,cap:()=>void 0===Effarig.eternityCap?void 0:Effarig.eternityCap.toNumber()},{id:143,cost:4,STCost:2,requirement:[133],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[141,142],description:"Multiplier to Infinity Points, which increases over this Infinity",effect:()=>{const e=Time.thisInfinity.totalSeconds.plus(Perk.studyIdleEP.effectOrDefault(0));return sa(e)},formatEffect:e=>formatX(e,2,1),cap:()=>Effarig.eternityCap},{id:151,cost:8,requirement:[141,142,143],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`${formatX(1e4)} multiplier on all Time Dimensions`,effect:1e4},{id:161,cost:7,requirement:[151],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`${formatX(b.E616)} multiplier on all Antimatter Dimensions`,effect:()=>b.E616},{id:162,cost:7,requirement:[151],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`${formatX(1e11)} multiplier on all Infinity Dimensions`,effect:1e11},{id:171,cost:15,requirement:[161,162],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`Time Shard requirement for the next Tickspeed upgrade goes up slower\n ${formatX(1.33,0,2)} ➜ ${formatX(1.25,0,2)}`,effect:()=>TS171_MULTIPLIER},{id:181,cost:200,requirement:[171,()=>EternityChallenge(1).completions>0||Perk.bypassEC1Lock.isBought,()=>EternityChallenge(2).completions>0||Perk.bypassEC2Lock.isBought,()=>EternityChallenge(3).completions>0||Perk.bypassEC3Lock.isBought],reqType:TS_REQUIREMENT_TYPE.ALL,description:()=>`You gain ${formatPercents(.01)} of your Infinity Points gained on crunch each second`,effect:()=>gainedInfinityPoints().times(De.isCorrupted?.01:Time.deltaTime.div(100)).timesEffectOf(Ra.unlocks.continuousTTBoost.effects.autoPrestige)},{id:191,cost:400,requirement:[181,()=>EternityChallenge(10).completions>0],reqType:TS_REQUIREMENT_TYPE.ALL,description:()=>`After Eternity you permanently keep ${formatPercents(.05)}\n of your Infinities as Banked Infinities`,effect:()=>Mi.infinities.value.times(.05).floor()},{id:192,cost:730,requirement:[181,()=>EternityChallenge(10).completions>0,()=>!Enslaved.isRunning],reqType:TS_REQUIREMENT_TYPE.ALL,description:()=>Enslaved.isRunning?"There is not enough space in this Reality":`Replicanti can go beyond ${format(replicantiCap(),2,1)}, but growth slows down at higher amounts`},{id:193,cost:300,requirement:[181,()=>EternityChallenge(10).completions>0],reqType:TS_REQUIREMENT_TYPE.ALL,description:"Antimatter Dimension multiplier based on Eternities",effect:()=>b.E13000.pow(Mi.eternities.value.div(1e6).clampMax(1)),cap:b.E13000,formatEffect:e=>formatX(e,2,1)},{id:201,cost:900,requirement:[192],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"Pick a second path from the Dimension Split"},{id:211,cost:120,requirement:[191],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`Dimension Boost requirement scaling is reduced by ${formatInt(5)}`,effect:5},{id:212,cost:150,requirement:[191],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"All Galaxies are stronger based on your Time Shards",effect:()=>Math.pow(Mi.timeShards.value.clampMin(2).log2(),.005),cap:1.1,formatEffect:e=>`+${formatPercents(e-1,3)}`},{id:213,cost:200,requirement:[193],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:()=>`You gain Replicanti ${formatInt(20)} times faster`,effect:20},{id:214,cost:120,requirement:[193],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,description:"Dimensional Sacrifice boosts the 8th Antimatter Dimension even more",effect:()=>{const e=Sacrifice.totalBoost,t=e.pow(7.6).clampMaxExponent(44e3),i=e.pow(1.05).clampMaxExponent(12e4);return t.times(i)},cap:b.E164000,formatEffect:e=>formatX(e,2,1)},{id:221,cost:900,STCost:4,requirement:[211],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[222],description:"Time Dimension multiplier based on Dimension Boosts",effect:()=>b.D1_0025.pow(DimBoost.totalBoosts),formatEffect:e=>formatX(e,2,1)},{id:222,cost:900,STCost:4,requirement:[211],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[221],description:()=>`Dimension Boost costs scale by another ${formatInt(2)} less`,effect:2},{id:223,cost:900,STCost:4,requirement:[212],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[224],description:()=>`Distant Galaxy cost scaling starts ${formatInt(7)} Galaxies later`,effect:7},{id:224,cost:900,STCost:4,requirement:[212],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[223],description(){const e=TimeStudy(224).effectValue;return`Distant Galaxy cost scaling starts ${quantifyInt("Galaxy",e)} later\n (${formatInt(1)} per ${formatInt(2e3)} Dim Boosts)`},effect:()=>Math.floor(DimBoost.totalBoosts/2e3)},{id:225,cost:900,STCost:4,requirement:[213],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[226],description:"You gain extra Replicanti Galaxies based on Replicanti amount",effect:()=>Math.floor(Replicanti.amount.exponent/1e3),formatEffect:e=>`+${formatInt(e)} RG`},{id:226,cost:900,STCost:4,requirement:[213],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[225],description:"You gain extra Replicanti Galaxies based on their max",effect:()=>Math.floor(player.replicanti.boughtGalaxyCap/15),cap:1e6,formatEffect:e=>`+${formatInt(e)} RG`},{id:227,cost:900,STCost:4,requirement:[214],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[228],description:"Dimensional Sacrifice affects 4th Time Dimension with reduced effect",effect:()=>Math.max(Math.pow(Sacrifice.totalBoost.pLog10(),10),1),formatEffect:e=>formatX(e,2,2)},{id:228,cost:900,STCost:4,requirement:[214],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[227],description:()=>`Dimensional Sacrifice formula scales better\n ${Sacrifice.getSacrificeDescription({TimeStudy228:!1})} ➜\n ${Sacrifice.getSacrificeDescription({TimeStudy228:!0})}`,effect:.2},{id:231,cost:500,STCost:5,requirement:[221,222],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[232],description:"Dimension Boosts are stronger based on their amount",effect:()=>Decimal.pow(DimBoost.totalBoosts,.3).clampMin(1),formatEffect:e=>formatX(e,2,2)},{id:232,cost:500,STCost:5,requirement:[223,224],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[231],description:"All Galaxies are stronger based on Antimatter Galaxies",effect:()=>Math.pow(1+player.galaxies/1e3,.2),formatEffect:e=>`+${formatPercents(e-1,3)}`},{id:233,cost:500,STCost:5,requirement:[225,226],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[234],description:"Max Replicanti Galaxy upgrade is cheaper based on current Replicanti",effect:()=>Replicanti.amount.clampMin(1).pow(.3),formatEffect:e=>`/ ${format(e,1,2)}`},{id:234,cost:500,STCost:5,requirement:[227,228],reqType:TS_REQUIREMENT_TYPE.AT_LEAST_ONE,requiresST:[233],description:"Dimensional Sacrifice applies to 1st Antimatter Dimension",effect:()=>Sacrifice.totalBoost},{id:301,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=1,221,222,231],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[221,222,231],description:"Time Study 231 improves the effect of Time Study 221",effect:()=>TimeStudy(221).effectValue.pow(TimeStudy(231).effectValue.minus(1)).clampMin(1),formatEffect:e=>formatX(e,2,1),unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=1},{id:302,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=2,223,224,232],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[223,224,232],description:()=>`Distant Galaxy scaling threshold starts another ${formatInt(3e3)} Antimatter Galaxies later`,effect:3e3,unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=2},{id:303,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=3,225,226,233],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[225,226,233],description:()=>`Gain ${formatPercents(.5)} more extra Replicanti Galaxies from Time Studies 225 and 226,\n and from Effarig's Infinity`,effect:1.5,unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=3},{id:304,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=4,227,228,234],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[227,228,234],description:"Dimensional Sacrifice multiplier is squared",effect:2,unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=4},{id:305,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=5,21],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[21],description:"Infinity Point gain is boosted by unspent Multiversal Remains",effect:()=>{let e=Decimal.pow(Mi.mendingPoints.value,Decimal.log(Mi.mendingPoints.value,1.00000001)).pow(5e5).clampMin(1);return De.isCorrupted&&(e=Decimal.pow(Decimal.log2(e.plus(1)),20)),e},unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=5,formatEffect:e=>formatX(e,2,1)},{id:306,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=6,41],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[41],description:"Multiply Memory gain based on amount of Galaxies.",effect:()=>new Decimal(1.000002).pow(Replicanti.galaxies.total+player.galaxies+player.dilation.totalTachyonGalaxies),unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=6,formatEffect:e=>formatX(e,2,1)},{id:311,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=7,101],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[101],description:"Antimatter Dimension multiplier based on total Space Theorems.",effect:()=>{let e=Decimal.pow(V.spaceTheorems,V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).max(1);return De.isCorrupted&&(e=Decimal.pow(Decimal.log2(e.plus(1)),20)),e},unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=7,formatEffect:e=>formatX(e,2,1)},{id:312,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=8,102],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[102],description:"Infinity Dimension multiplier based on total Space Theorems.",effect:()=>{let e=Decimal.pow(V.spaceTheorems,V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).max(1);return De.isCorrupted&&(e=Decimal.pow(Decimal.log2(e.plus(1)),20)),e},unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=8,formatEffect:e=>formatX(e,2,1)},{id:313,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=9,103],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[103],description:"Time Dimension multiplier based on total Space Theorems.",effect:()=>{let e=Decimal.pow(V.spaceTheorems,V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).pow(V.spaceTheorems).max(1);return De.isCorrupted&&(e=Decimal.pow(Decimal.log2(e.plus(1)),20)),e},unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=9,formatEffect:e=>formatX(e,2,1)},{id:307,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=10,111],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[111],description:"Make the Eternity Point formula better log(x)/y ➜ log(x)/(y-30)",unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=10,effect:30},{id:321,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=11,141],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[141],description:"Multiplier to Multiversal Remains, which decays over this Mend (real time)",unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=11,effect:()=>Decimal.log10(b.E45.divide(sa(Time.thisMendRealTime.totalSeconds))).toDecimal().clampMin(1),formatEffect:e=>formatX(e,2,1)},{id:322,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=12,142],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[142],description:"You gain ×35 more Multiversal Remains",unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=12,effect:new Decimal(35)},{id:323,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=13,143],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[143],description:"Multiplier to Multiversal Remains, which increases over this Mend (real time)",unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=13,effect:()=>{const e=Time.thisMendRealTime.totalSeconds;return Decimal.log10(sa(e).clampMin(1))},formatEffect:e=>formatX(e,2,1)},{id:308,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=14,151],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[151],description:()=>`${formatX(1e4)} multiplier on all Dark Matter Dimensions (Both DM and DE)`,unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=14,effect:1e4},{id:309,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=15,171],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[171],description:"Time Shard requirement for the next Tickspeed upgrade goes up even slower\n ×1.25 ➜ ×1.20",unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=15,effect:TS309_MULTIPLIER},{id:310,cost:0,STCost:12,requirement:[()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=16,192],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[192],description:"Replicanti increases the purchase hardcap of Infinity and Time Dimensions",unlocked:()=>Ra.unlocks.unlockHardV.effectOrDefault(0)>=16,effect:20},{id:401,cost:0,STCost:302,requirement:[()=>Ra.unlocks.unlockMyriads.effectOrDefault(0)>=1,()=>TimeStudy.reality.isBought],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:["reality"],description:()=>"Antimatter makes all Galaxies much stronger",effect:()=>{const e=.5*Math.log10(Mi.antimatter.exponent+1);return e},unlocked:()=>Ra.pets.v.level>=90,formatEffect:e=>`+${formatPercents(e,4)}`},{id:402,cost:0,STCost:302,requirement:[()=>Ra.unlocks.unlockMyriads.effectOrDefault(0)>=2,()=>TimeStudy.reality.isBought],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:["reality"],description:"Infinity Points adds Infinity power conversion",effect:()=>Math.log10(Math.log(Mi.infinityPoints.exponent+1)/Math.log(1.000000001))/1.75,formatEffect:e=>`+${format(e,2,2)}`,unlocked:()=>Ra.pets.v.level>=92},{id:403,cost:0,STCost:302,requirement:[()=>Ra.unlocks.unlockMyriads.effectOrDefault(0)>=3,()=>TimeStudy.reality.isBought],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:["reality"],description:"Eternity Points increase Time Shard softcap massively",effect:()=>Math.pow(Math.log10(Mi.eternityPoints.exponent+1),5.5),formatEffect:e=>`+${formatInt(e)}`,unlocked:()=>Ra.pets.v.level>=94},{id:411,cost:0,STCost:302,requirement:[()=>Ra.unlocks.unlockMyriads.effectOrDefault(0)>=4,401],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[401],description:"Antimatter boosts 1st Antimatter Dimension Multiplier",effect:()=>{let e=Math.log10(Math.max(Mi.antimatter.exponent,1)),t=e/4+15,i=Decimal.pow(10,Decimal.pow(10,t));return i},formatEffect:e=>formatX(e,0,3),unlocked:()=>Ra.pets.v.level>=96},{id:412,cost:0,STCost:302,requirement:[()=>Ra.unlocks.unlockMyriads.effectOrDefault(0)>=5,402],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[402],description:"Infinity Points boosts 1st Infinity Dimension Multiplier",effect:()=>{let e=Math.log10(Math.max(Mi.infinityPoints.exponent,1)),t=e/5+15.5,i=Decimal.pow(10,Decimal.pow(10,t));return i},formatEffect:e=>formatX(e,0,3),unlocked:()=>Ra.pets.v.level>=98},{id:413,cost:0,STCost:302,requirement:[()=>Ra.unlocks.unlockMyriads.effectOrDefault(0)>=6,403],reqType:TS_REQUIREMENT_TYPE.ALL,requiresST:[403],description:"Eternity Points boosts 1st Time Dimension Multiplier",effect:()=>{let e=Math.log10(Math.max(Mi.infinityPoints.exponent,1)),t=e/4+12.5,i=Decimal.pow(10,Decimal.pow(10,t));return i},formatEffect:e=>formatX(e,0,3),unlocked:()=>Ra.pets.v.level>=100}],la={dilation:ea,milestones:ta,timeStudies:{dilation:aa,ec:na,normal:oa},upgrades:ia};i(2707);const ca={tabs:[{name:"This Modal",info:()=>"\nWelcome to the How to Play!\n
\n
\nThis modal (pop-up window) contains in-depth explanations and additional details for everything you will encounter\nas you progress through the game. As you unlock new features and mechanics, you will also gain access to additional\npages here. If you ever feel lost or confused about how something in the game works, you may find a helpful\nexplanation within the related entry in here. \n
\n
\nFor now, opening the How to Play will always start you on this page. After you get your first Dimension Boost,\nopening this modal will instead place you on the How to Play entry most relevant to the game content on your currently\nvisible tab and subtab, if such an entry exists.\n",isUnlocked:()=>!0,tags:["h2p","how","to","play","modal"],tab:""},{name:"Your savefile",info:()=>`\nYour game's save data is stored on your computer's browser data if you are playing on a web browser, or in your Steam\ninstallation folder if you are playing on Steam. This means that clearing your browser's cache or cookies, or fully\nuninstalling the game from Steam will also delete your save file.\nSimilarly, if you are playing in a private or incognito window, your save\nwill not be there the next time you open up your browser. The saves are browser-specific as well, so for example\nif you play the game on Chrome, you will not find your save on Firefox. Lastly, any saves you have on the web version\nand the Steam version will also be completely independent from each other.\n
\n
\nYou can transfer your save between places by using the export function, which will copy a very long string of\nrandom-looking characters into your clipboard. That text contains your save data, which you can load back into the\ngame by pasting it into the text box on the import prompt. You need the entirety of the save text for importing to\nwork properly, or else the game might not recognize the text as a valid save. Certain messaging applications may\ncut off part of the text if you are using one to transfer the save between devices.\n
\n
\nA properly-formatted save string from the Reality update will start with\n${GameSaveSerializer.startingString.savefile} and end with ${GameSaveSerializer.endingString.savefile}.\nIf you are importing from a version of the game from before Reality was released, it will instead start with eyJ\nand end with In19, fX0=, or fQ==. If neither of these are the case, then part of your save is\nmissing and it will fail to import. In addition to importing and exporting to your clipboard, you can also import\nand export from text files as well.\n
\nYou can use the "Choose save" button to pick between three separate saves on your browser. These saves are, for most\nintents and purposes, completely separate from each other. Importing and exporting will only affect the current save\nslot. The only exception is clearing your browser or Steam data, in which case all three saves will be reset.\n
\n
\nThe game automatically saves periodically, by default once every ${formatInt(30)} seconds.\nKeep this in mind if you need to close the game - anything you\ndo right before closing it might not be saved unless you wait for the autosave interval or manually save again. The\nlength of the autosave interval is adjustable, and its timer can be seen in the bottom-left of the screen.\n
\n
\nBackups of your savefile are also saved after certain amounts of time online or offline, which you can examine and\nreload at any point by clicking the "Open Automatic Save Backup Menu" button. These backups may be useful if you wish\nto revert your save to what it looked like some time in the past, such as a few minutes ago or when you were last\noffline for a while.\n
\n
\nYou can also connect a Google Account to the game, allowing you to save your progress online. This allows you to play\nwith the same save on any device which is also logged into the same account. Cloud saving is only compatable with other\nsaves on the web or Steam versions of the game; saves from the Android app of the game will not be automatically linked\nvia Cloud saving. Saving and loading from the Cloud will\nautomatically overwrite the other save unless the other save is either older or has noticeably more progression, in\nwhich case a modal will appear which asks you which save you want to keep.\n
\n
\nYou can completely reset your save at any point if desired by clicking the button, which brings up a prompt you need\nto fill out in order to make sure you intentionally wanted to reset. Going through with this reset will only clear\nyour current save; the other save slots will be unaffected. Resetting your game in this way is completely\nirreversible and gives you no permanent benefits, secret or otherwise.\n`,isUnlocked:()=>!0,tags:["choose","cloud","google","save","import","export","reset"],tab:"options/saving"},{name:"Customization",info:()=>`\nThe game has two different UI layouts - the Classic UI maintains the style of Antimatter Dimensions from before the\nReality update, while the Modern UI is a redesign based on more modern dark theme styles. Additionally, there are\nvarious themes which can be applied to modify the appearance of everything in the game. There are a few secret themes\nwhich can be unlocked through importing certain phrases. Both UI layouts support all the different possible themes.\n
\n
\nThe notation used to display numbers in the game defaults to Mixed Scientific, but can be changed to one of numerous\noptions in the drop-down menu. Many of these notations are intended as jokes and in some cases will format numbers\nin a way that causes text to spill over into other parts of the screen - this is not a bug. "Exponent formatting" is\na setting affecting some notations which lets you toggle between showing the number in an exponent itself (with commas\nevery three digits) or also applying the notation formatting to the exponent. Note that notation formatting is forced\nwhen exponents are larger than ${format(b.E9)}.\n
\n
\nMany events in the game trigger full-screen animations or pop-up modals which require you to confirm that you want to\ncontinue. Most of these animations and confirmations can be disabled on an individual basis through the options,\nalthough the ability to disable any given animation or confirmation will only appear after they have already shown up\nat least once.\n`,isUnlocked:()=>!0,tags:["UI","update","news","theme","notation","comma","exponent","animation","retry","confirmation","offline","hotkey","classic","modern"],tab:"options/visual"},{name:"Offline Progress",info:()=>`\nAntimatter Dimensions has a catch-up mechanic which attempts to simulate the game's behavior if the game is closed for\nan extended period of time. The simulation behavior is only somewhat accurate, as the game is too mathematically\ncomplicated to be run at full accuracy in a reasonable amount of time. At the end of the simulation, the game will\nsummarize how various relevant resources have changed while you were gone.\n
\n
\nIf the game is left open and becomes unfocused or otherwise suspended for an extended period of time, it will attempt\nto apply the missed time as offline progress when you return. This can be potentially unreliable, as different devices\nhandle these situations differently. If this results in undesirable behavior, there is a toggle to turn this off in the\noptions - in that case the game will try to apply all the missed time in a single tick.\n
\n
\nThe game runs on a system where everything is updated once per tick - all Dimensions and resources do one unit of\nproduction, all autobuyers trigger once, all multipliers and values are changed accordingly, and all the displayed\nnumbers are updated. By default there are ${formatInt(20)} ticks per second when the game is running, although this can\nbe modified by changing the "Update rate" within the game Options.\nYour current settings will run the game at ${format(1e3/player.options.updateRate,2,1)} ticks per second on\naverage, although lag and internal javascript behavior may cause individual ticks to vary by a few percent.\n
\n
\nWhen offline simulation is active, these ticks have an adjusted length in order to fill the amount of time you were\naway - for example having a setting for ${formatInt(1e3)} offline ticks and closing the game for an hour will result in\nticks which are ${format(3.6,1,1)} seconds long each. For most things in the game, this is not an issue because this\nwill still result in approximately the same amount of resources after the simulation completes. A notable exception is\nautobuyers - in this situation autobuyers will effectively only trigger once every ${format(3.6,1,1)} seconds, which\nmay have a strong impact depending on the part of the game.\n
\n
\n${player.blackHole[0].unlocked?'Offline Black Hole behavior: Once the Black Hole has been unlocked, the offline progress simulation will\n attempt to run the game in a way where each tick contains roughly the same amount of game time. This may\n give the appearance of the Black Hole(s) being active for a much larger fraction of time than normal while\n simulating, when in fact the game is running active periods more slowly and "skipping past" the inactive periods\n because they contribute much less production per real time. This results in behavior which is generally in your\n favor when compared to ticks with constant real time.\n
\n
':""}\nOffline tick count can be adjusted between ${formatInt(500)} and ${formatInt(b.E6)} ticks. Smaller counts will result\nin faster but less accurate simulations, while larger counts will result in more accurate simulations which take longer\nto complete. There is a limit of one day of time per game tick, meaning there are some rare situations (such as not\nplaying the game for more than a year) where you may not get all of the time you were away.\n
\n
\nOffline progress can be disabled entirely if desired, for example for diagnostic or timing purposes, or in order\nto do an "online only" playthrough of the game. Otherwise, offline progress is on by default from the very beginning\nof the game. Note that if offline progress is disabled, the statistic for total time played will also be paused while\nthe game closed.\n`,isUnlocked:()=>!0,tags:["offline","away","progress"],tab:"options/gameplay"},{name:"Effect Stacking",info:()=>`\nMost of the effects and upgrades in Antimatter Dimensions largely fall into three categories:\n
\n- Additive: These effects are typically denoted with a + (or the word "increase") followed by a number,\nand add their value to some\nbase amount. Multiple additive effects are summed up. These can also sometimes show up as subtractive effects which\nreduce resource costs.\n
\n- Multiplicative: These effects are shown either by a × (or the word "multiply") followed by a number or,\nmore rarely, as two numbers\nseparated by a ➜. Different multiplicative sources always combine by multiplying, never by adding. In some situations,\nthere may be negative effects or cost reductions that apply in this category as division.\n
\n- Power: These effects are much rarer and appear as ^ followed by a number. Multiple power effects apply\nsequentially, or equivalently by multiplying the values of the power effects together and applying the final value\nas a single power. In rare situations, negative effects may apply here in this category as powers which are less\nthan ${formatInt(1)}.\n
\n
\nUnless otherwise noted when an upgrade or reward replaces an older value, all of these effects stack\nwith each other. In the case of an upgrade replacing an older value with a newer value, the replacement occurs before\nany of the above effects are applied. To determine the final value of a set of effects, the effects from each category\nare individually combined, and then applied in the order of additive, multiplicative, then power effects.\n
\n
\n${PlayerProgress.realityUnlocked()||PlayerProgress.dilationUnlocked()?"Dilation and any Dilation-like effects apply after all of these other effects are stacked together.":""}\n
\n
\n${PlayerProgress.realityUnlocked()?`Glyph Effects effectively have two stacking attributes; their internal way of stacking together and the way\n they stack with all other game effects. These may not necessarily be the same - for example, the "Antimatter\n Dimension Power" effect will stack additively with itself, but then the total effect will be added to\n a base value of ${formatInt(1)} and then applied as a power effect to Antimatter Dimensions.`:""}\n`,isUnlocked:()=>!0,tags:["effect","stack","combine","add","reduce","multiply","divide","power","dilation","glyph"],tab:"options/gameplay"},{name:"Common Abbreviations",info:()=>`\nMany resources within the game may appear in an abbreviated format as text in order to save space. This How to\nPlay entry will update itself with additional entries for new resources as you encounter them for the first time.\n
\n- AM: Antimatter
\n- AD: Antimatter Dimension
\n- AG: Antimatter Galaxy
\n${PlayerProgress.infinityUnlocked()?"- IP: Infinity Point
":""}\n${PlayerProgress.infinityUnlocked()?"- NC: Normal Challenge
":""}\n${PlayerProgress.infinityUnlocked()?"- IC: Infinity Challenge
":""}\n${InfinityDimension(1).isUnlocked||PlayerProgress.eternityUnlocked()?"- ID: Infinity Dimension
":""}\n${PlayerProgress.replicantiUnlocked()?"- RG: Replicanti Galaxy
":""}\n${PlayerProgress.eternityUnlocked()?"- EP: Eternity Point
":""}\n${PlayerProgress.eternityUnlocked()?"- TT: Time Theorem
":""}\n${PlayerProgress.eternityUnlocked()?"- TD: Time Dimension
":""}\n${PlayerProgress.eternityUnlocked()?"- EC: Eternity Challenge
":""}\n${PlayerProgress.dilationUnlocked()?"- TP: Tachyon Particle
":""}\n${PlayerProgress.dilationUnlocked()?"- DT: Dilated Time
":""}\n${PlayerProgress.dilationUnlocked()?"- TG: Tachyon Galaxy
":""}\n${PlayerProgress.realityUnlocked()?"- RM: Reality Machine
":""}\n${PlayerProgress.realityUnlocked()?"- AP: Automator Point
":""}\n${PlayerProgress.realityUnlocked()?"- BH: Black Hole
":""}\n${MachineHandler.isIMUnlocked?"- iM: Imaginary Machine
":""}\n${Laitela.isUnlocked?"- DM: Dark Matter
":""}\n${Laitela.isUnlocked?"- DE: Dark Energy
":""}\n${PlayerProgress.mendingUnlocked()?"- MvR: Mulitversal Remain
":""}\n${PlayerProgress.mendingUnlocked()?"- MUx: Mending Upgrade x
":""}\n${PlayerProgress.mendingUnlocked()?"- xMM: x Mend Milestone
":""}\n`,isUnlocked:()=>!0,tags:["abbreviation","shorten","am","ad","ag","ip","nc","ic","id","rg","ep","tt","td","ec","tp","dt","tg","rm","ap","bh","im","dm","de"],tab:""},{name:"Antimatter Dimensions",info:()=>`\nAntimatter is a resource that is used throughout the entire game for purchasing various things as you progress. You\nstart with ${formatInt(10)} antimatter when you first open the game, and you can\nspend it to buy the 1st Antimatter Dimension to start the game.\n
\n
\nAntimatter Dimensions are your production units in game. The 1st Antimatter Dimension produces your antimatter.\nEach consecutive Antimatter Dimension produces the previous one, allowing you to have steady growth.\nThere are eight Antimatter Dimensions total.\n
\n
\nDimension Multiplier: Beside the Dimension there is a multiplier (example: 1st Dimension ${formatX(1,1,1)}).\nThe base production of each Dimension is multiplied by this number.\nThis multiplier increases by ${formatX(2)} for every ${formatInt(10)} of that Dimension purchased.\nEach time this occurs, the price of the dimension will increase.\n
\n
\nAccumulated Dimension Quantity: The next column is your current amount of that Dimension you own.\nThis is a combination of how many you have purchased with antimatter,\nas well as produced from the higher Dimension.\n
\n
\nPurchased Dimensions Quantity: Next to each accumulated quantity of owned Dimensions,\nthe amount of that Dimension purchased toward the next multiplier upgrade is displayed in brackets.\nFor example if you have (${formatInt(4)}) next to your accumulated dimension quantity,\nyou will need ${formatInt(6)} more of that dimension for the next multiplier increase.\n
\n
\nDimension Growth Percent: This number represents the amount of growth that each\nDimension experiences per second. ${formatPercents(1)} means the dimension is doubling each second.\nThis allows you to judge overall growth.\n
\n
\nCost & until ${formatInt(10)}:\nYou can buy a single quantity of each Dimension with antimatter when the cost button is highlighted.\nAlternatively, if the Until ${formatInt(10)} button is highlighted,\nyou can buy whatever quantity gets you to that Dimension's next Dimension multiplier.\n
\n
\nMax all: Max all will buy until ${formatInt(10)} of the 1st Antimatter Dimension until it cannot anymore,\nthen second, and so on until the 8th Antimatter Dimension, and then buy max Tickspeed Upgrades.\n
\n
\nDimension base prices: ${Array.range(1,8).map((e=>format(AntimatterDimension(e)._baseCost,2,2))).join(", ")}\n
\nBase per ${formatInt(10)} bought dimension price increases: ${Array.range(1,8).map((e=>format(AntimatterDimension(e)._baseCostMultiplier,2,2))).join(", ")}\n
\n
\nHotkeys: 1, 2, 3, 4, 5, 6, 7, 8 for buy until ${formatInt(10)} Xth Dimension\n(you can also hold down Shift while buying Dimensions, which will only buy\n${formatInt(1)} instead of ${formatInt(10)}), M for Max all\n`,isUnlocked:()=>!0,tags:["dims","normal","antimatter","ad"],tab:"dimensions/antimatter"},{name:"Tickspeed",info:()=>`\nProduction in the game happens on each "tick", which initially occurs once per second. By buying Tickspeed Upgrades,\nyou can make your Antimatter Dimensions produce faster, as if multiple ticks occur in each second.\n
\n
\nTickspeed: This states how many game ticks are occurring every second. Fractional ticks are accounted for,\nboosting production as if part of a game tick has passed. Note that the actual tickspeed time is simulated and the\ngame always runs calculations at the update rate you've chosen in the Options tab.\n
\n
\nCost: The cost of antimatter for multiplying ticks/sec by the displayed multiplier.\n(without any Galaxies, this is ${formatX(1.1245,0,3)} per purchase)\n
\n
\nBuy Max: This will buy the maximum amount of Tickspeed Upgrades available\nwith your current amount of antimatter.\n
\n
\nHotkeys: T will purchase as many Tickspeed Upgrades as possible, or Shift+T to buy a single upgrade.\nM for Max all.\n`,isUnlocked:()=>Tickspeed.isUnlocked,tags:["dimension","earlygame","time"],tab:"dimensions/antimatter"},{name:"Dimension Boosts",info:()=>`\nDimension Boost: This resets your antimatter and all of your Antimatter Dimensions, but unlocks another\nAntimatter Dimension for you to purchase and boosts your Dimension multipliers.\nThe 1st Dimension Boost requires ${formatInt(20)} 4th Dimensions, the 2nd requires ${formatInt(20)} 5th Dimensions, etc.\nAfter unlocking all ${formatInt(8)} Dimensions,\nevery additional boost will cost ${formatInt(15)} more 8th Dimensions than the previous Boost and will no longer\nunlock a Dimension, but will continue to increase your Dimension multipliers.\n
\n
\nYou gain a ${formatX(2)} multiplier to the 1st Dimension for every Dimension Boost you have. Each higher\nDimension will have the multiplier applied one less time as the previous, down to a minimum of ${formatInt(0)}.\nFor example, with ${formatInt(3)} Boosts, the 1st Dimension will gain ${formatX(8)}, the 2nd Dimension ${formatX(4)},\nthe 3rd Dimension ${formatX(2)}, and all other Dimensions are unaffected.\n
\n
\nDimension Shift/Warp/Jump: Beyond ${format(DimBoost.shiftStart)} dimension boosts, they will be converted into Dimensions Shifts and costs will begin to scale.\n Continuing beyond ${format(DimBoost.warpStart)} will conver them to warp, which scale faster than shifts, and continuing beyond ${format(DimBoost.scaleStart)} will\n cause them to convert to jumps, which scale even faster than warps and shifts.\n
\n
\nHotkey: D will try to purchase a Dimension Boost.\n`,isUnlocked:()=>!0,tags:["dimboost","reset","earlygame"],tab:"dimensions/antimatter"},{name:"Antimatter Galaxies",info:()=>`\nPurchasing an Antimatter Galaxy will reset your game back to the point where only ${formatInt(4)} Dimensions are\navailable, but will increase the effect of your Tickspeed Upgrades by +${format(.02,0,2)} for your first two\nGalaxies. As you get more Galaxies, the multiplier will continue becoming stronger and stronger.\n
\n
\nThough it will have very little impact for the first few Tickspeed purchases,\nthe increase is multiplicative and will not take long to be visible.\n
\n
\nYour first Antimatter Galaxy requires ${formatInt(80)} Eighth Dimensions, and each additional Galaxy will cost\nanother ${formatInt(60)} more.\n
\nDistant Galaxy scaling: Above ${formatInt(100)} Antimatter Galaxies the cost increase between Galaxies will\nincrease by ${formatInt(2)} per Galaxy, making the next Galaxy cost ${formatInt(62)} more, then ${formatInt(64)} more,\netc.\n
\nRemote Galaxy scaling:`+(MendingUpgrade(17).isBought?" Since you have Mending Upgrade 17, Remote Galaxy scaling no longer occurs.":`
Above ${formatInt(Galaxy.remoteStart)} Antimatter Galaxies, the total cost\nincreases by another ${formatPercents(.002,1)} per Galaxy, on top of Distant scaling.`)+"
"+(MendingUpgrade(17).isBought?`Obscure Galaxy Scaling: Above ${formatInt(Galaxy.scalingThreeStart)} Antimatter Galaxies the cost between them will increase by a `+(6-+WarpUpgrade(4).isBought-+WarpUpgrade(11).isBought)+"th degree polynomial
":"")+"
\nHotkey: G will try to purchase an Antimatter Galaxy.\n",isUnlocked:()=>!0,tags:["8th","reset","galaxy","earlygame","distant","remote","obscure"],tab:"dimensions/antimatter"},{name:"Dimensional Sacrifice",info:()=>`\nYou unlock Dimensional Sacrifice after your fifth Dimension Boost.\n
\n
\nSacrificing will immediately reset the owned quantity of all non-Eighth Dimensions to zero, without reducing the\nmultiplier or the current cost. In return, it will multiply the Eighth Dimension Multiplier by the shown value.\nIt will take time to get back to the production you previously had, but you will end up with a net increase.\n
\n
\nThe Dimensional Sacrifice multiplier scales with the number of 1st Dimensions you had at the time of sacrifice,\nand the scaling can be improved by completing certain Achievements and challenges. The multiplier is kept between\nsacrifices, meaning that sacrificing once at ${formatX(10)} and then once at ${formatX(4)} will be the same as\n${formatX(8)} then ${formatX(5)}; in both cases you will end up with a total sacrifice multiplier of ${formatX(40)}.\n
\n
\nHotkey: S will try to sacrifice.\n`,isUnlocked:()=>Sacrifice.isVisible,tags:["8th","reset","earlygame","gods","earlygame"],tab:"dimensions/antimatter"},{name:"Achievements",info:()=>`\nEach Achievement has requirements to unlock. Once unlocked, some Achievements give a reward.\nRequirements and rewards vary in difficulty and benefit significantly.\n
\n
\nIn addition to any specific rewards for individual Achievements, you will receive a ${formatX(1.03,2,2)} multiplier\nto all Antimatter Dimensions. Each fully completed row also gives another ${formatX(1.25,2,2)}. The total multiplier\neffect from all Achievements together is shown above all the Achievement images.\n
\n
\nSecret Achievements offer no gameplay benefits or advantages and are simply there for fun. Hovering over a Secret\nAchievement will give a hint on how to attain them.\n`,isUnlocked:()=>!0,tags:["earlygame","awards","earlygame"],tab:"achievements"},{name:"Infinity",info:()=>`\nOnce you have too much antimatter for the world to handle (${formatInt(2)}${formatInt(1024)}\nor about ${formatPostBreak(Number.MAX_VALUE,6)},\nsometimes called "Infinity"), you will be forced to do a “Big Crunch”. This will reset your antimatter, Antimatter\nDimensions, Dimension Boosts, and your Antimatter Galaxies. Doing a Big Crunch is also sometimes referred to as\n"Infinitying".\n
\n
\nYou will eventually be able to pass ${formatPostBreak(Number.MAX_VALUE,6)}, but until then any larger numbers will\ndisplay as ${format(1/0)}.\n
\n
\nEach Infinity completed will give an Infinity Point, which can be spent on upgrades in the new Infinity tab.\nYou must purchase these upgrades from top to bottom. You will also gain one "Infinity", which is effectively\nthe number of times you have crunched.\n
\n
\nThe "Multiply Infinity Points from all sources by ${formatInt(2)}" upgrade can be bought multiple times,\nbut each purchase requires ${formatInt(10)} times as much IP.\nYou must complete the Achievement "No DLC required" to start purchasing this particular upgrade.\n
\n
\nHotkey: C will try to perform a Big Crunch.\n`,isUnlocked:()=>PlayerProgress.infinityUnlocked(),tags:["crunch","big","upgrades","ip","reset","prestige","earlygame"],tab:"infinity/upgrades"},{name:"Normal Challenges",info:()=>`\nNormal Challenges are unlocked after your first Infinity; they change in-game mechanics in different ways to create more\ndifficult Infinity circumstances. To complete a challenge, you must reach ${formatPostBreak(Number.MAX_VALUE,2)}\nantimatter again.\n
\n
\nEach completed Normal Challenge will award an autobuyer or the ability to upgrade an existing autobuyer.\nYou can run them multiple times (though only the first time grants a reward),\nand they can be exited at any time via the “Exit Challenge” button.\n
\n
\nYour first Infinity is considered to be the first Normal Challenge, and is thus already completed when\nyou unlock challenges.\n
\n
\nThe rightmost column of Infinity Upgrades does not work in challenges.\n`,isUnlocked:()=>PlayerProgress.infinityUnlocked(),tags:["infinity","autobuyer","earlygame"],tab:"challenges/normal"},{name:"Autobuyers",info:()=>`\nAutobuyers allow you to automatically purchase dimensions, upgrades, or prestiges. All autobuyer\ncontrols are located under the "Autobuyers" subtab of the "Automation" tab, including any additional autobuyers\nunlocked later in the game.\n
\n
\nAntimatter Dimension Autobuyers and the Tickspeed Upgrade Autobuyer can be unlocked based on your total antimatter,\nbut most other autobuyers require upgrades to be purchased or challenges to be beaten.\n
\n
\nMost Autobuyers have similar attributes:\n
\n
\nAutobuyer Interval: The cooldown period before the autobuyer attempts to make another purchase.\nAntimatter Dimension Autobuyers and the Tickspeed Upgrade Autobuyer require their respective challenges to be beaten\nbefore their interval can be upgraded.\n
\n
\nAntimatter Dimension Autobuyer Bulk Buy: Once the interval of an autobuyer reaches its minimum\n(at ${formatInt(100)} ms), all future upgrades will double the maximum amount the autobuyer can purchase per tick.\nThis can be disabled.\n
\n
\nAntimatter Dimension Autobuyer Buy Quantity: Autobuyers for Dimensions can be set to buy a single Dimension,\nor until ${formatInt(10)}. Bulk buy is disabled when the autobuyer is set to singles.\n
\n
\nTickspeed Autobuyer Buy Quantity: The tickspeed autobuyer can be set to buy a single upgrade per activation\nor to buy the max possible once the Tickspeed Challenge (C9) has been beaten.\n
\n
\nAutomatic Dimension Boost Customization: With the Dimension Boost autobuyer you can set the max number of\nBoosts it will attempt to buy, a minimum number of Antimatter Galaxies before Dimension Boosts are\nalways auto-purchased, and (when unlocked) the ability to buy an exact number of Dimension Boosts in bulk.\nIf you reach your specified Galaxy threshold, the autobuyer will ignore your max Boost limit.\n
\n
\nMax Galaxies: The highest amount of Galaxies the Galaxies autobuyer will buy.\n
\n
\nIP on crunch: Once you Break Infinity, you can set how many IP you would like to wait for before crunching.\n
\n
\nSacrifice Autobuyer: This autobuyer starts with a maxed interval, potentially triggering every tick.\n
\n
\nDynamic Amount: Upgraded prestige autobuyers have a mode that triggers a prestige when a specified threshold\nis passed. Turning on "Dynamic Amount" will allow this threshold value to be automatically increased when unlocking\ncertain upgrades or achievements which apply a multiplier to this value.\n
\n
\nPause/Resume Autobuyers: This button will pause or resume autobuyers which are turned on.\nIt does not change individual autobuyer settings. Think of it like a master switch.\n
\n
\nEnable/Disable All Autobuyers: This button will turn all of your autobuyers on or off individually.\n
\n
\nHotkey: A (for pausing/resuming autobuyers).\nAdditionally, holding Alt when pressing a hotkey associated with an upgrade, dimension, or prestige will\ntoggle the associated autobuyer.\n`,isUnlocked:()=>!0,tags:["infinity","automation","challenges","rewards","interval","earlygame"],tab:"automation/autobuyers"},{name:"Break Infinity",info:()=>`\nOnce you Break Infinity, you are no longer limited to ${formatPostBreak(Number.MAX_VALUE,2)} antimatter and can start\ngaining more than ${formatInt(1)} IP per crunch depending on how much more antimatter you have when you crunch.\n
\n
\nYou now gain ~${format(1.78,2,2)} IP for crunching at ${formatPostBreak(Number.MAX_VALUE,2)} antimatter. The IP you\ngain for crunching is multiplied by ${formatInt(10)} for every additional factor of\n${formatPostBreak(Number.MAX_VALUE,2)} antimatter you gain (in a continuous manner). This is rounded down to the\nnearest integer after all multipliers are applied.\n
\n
\nThe antimatter costs of all Dimensions begin to increase faster after they pass\n${formatPostBreak(Number.MAX_VALUE,2)}. The cost between upgrades will increase by ${formatX(10)}\nper upgrade above ${formatPostBreak(Number.MAX_VALUE,2)}, and a similar scaling happens to\nTickspeed Upgrade costs as well.\n`,isUnlocked:()=>Autobuyer.bigCrunch.hasMaxedInterval||PlayerProgress.eternityUnlocked(),tags:["limit","crunch","upgrades","midgame"],tab:"infinity/break"},{name:"Infinity Dimensions",info:()=>`\nUnlocking Infinity Dimensions: Infinity Dimensions are unlocked by reaching a certain amount of antimatter.\n
\n
\nInfinity Dimension Purchasing: Infinity Dimensions are only purchasable in sets of ${formatInt(10)}, and cost\nInfinity Points. They give a permanent multiplier per purchase, similar to the other dimensions. The actual multiplier\napplied depends on which Infinity Dimension you purchase. \x3c!-- Sorry Garnet :/ --\x3e\n
\n
\nInfinity Dimension Production: Just like Antimatter Dimensions, each Infinity Dimension produces the\nnext highest Infinity Dimension.\n
\n
\nEvery crunch, your produced Infinity Dimensions are reset to the amount you purchased. While the production\nof Infinity Dimensions does not carry between crunches, all the multipliers you got from purchasing them do.\n
\n
\nInfinity Dimension unlock thresholds (antimatter): ${Array.range(1,8).map((e=>formatPostBreak(InfinityDimension(e)._unlockRequirement))).join(", ")}\n
\nInfinity Dimension purchase multipliers: ${Array.range(1,8).map((e=>format(InfinityDimension(e)._powerMultiplier))).join(", ")}\n
\nInfinity Dimension base prices (IP): ${Array.range(1,8).map((e=>format(InfinityDimension(e)._baseCost))).join(", ")}\n
\nInfinity Dimension price increases: ${Array.range(1,8).map((e=>format(InfinityDimension(e)._costMultiplier))).join(", ")}\n
\n
\nInstead of antimatter, the 1st Infinity Dimension produces Infinity Power, which gives a multiplier applied\nto all Antimatter Dimensions equal to (power${formatInt(7)}). Infinity Dimensions are not\naffected by Tickspeed Upgrades.\n`,isUnlocked:()=>Autobuyer.bigCrunch.hasMaxedInterval||PlayerProgress.eternityUnlocked(),tags:["id","power","new","dims","unlock","break","midgame"],tab:"dimensions/infinity"},{name:"Infinity Challenges",info:()=>`\nInfinity Challenges are like Normal Challenges, but they have higher end goals and are generally harder. Instead of\nonly unlocking autobuyers, they give you boosts to your various forms of production in more unique ways. Similarly to\nNormal Challenges, the rightmost column of Infinity Upgrades are disabled within Infinity Challenges.\n
\n
\nUnlike the Normal Challenges, which are all unlocked at once, Infinity Challenges require you to reach a certain\namount of antimatter before you can attempt them.\n
\n
\nInfinity Challenge unlock thresholds: ${GameDatabase.challenges.infinity.map((e=>formatPostBreak(e.unlockAM))).join(", ")}\n`,isUnlocked:()=>Autobuyer.bigCrunch.hasMaxedInterval||PlayerProgress.eternityUnlocked(),tags:["rewards","break","ic","midgame"],tab:"challenges/infinity"},{name:"Replicanti",info:()=>`\nReplicanti are another resource you unlock at ${format(b.E140)} IP. Rather\nthan producing something else, Replicanti actually produces itself up to a maximum of\n${formatPostBreak(Number.MAX_VALUE,2)}. Replicanti are produced at their own pace, unaffected by Tickspeed Upgrades.\nEach individual Replicanti has a certain chance (initially ${formatPercents(.01)}) of producing another Replicanti\nevery Replicanti tick (initially every second), and both of these can be upgraded by spending IP.\n
\n
\nIf you have purchased a Replicanti Galaxy upgrade, then you can get a "free" Replicanti Galaxy in exchange for\nresetting your Replicanti count back to ${formatInt(1)}. This Galaxy is free in that it will act as if it was an\nAntimatter Galaxy, but it will not make your next Antimatter Galaxy more expensive. However, it will still reset the\nsame things as an Antimatter Galaxy does.\n
\n
\nHotkey: R will try to purchase a Replicanti Galaxy.\n
\nReplicanti give a multiplier to all Infinity Dimensions, which will reach a maximum of\n${formatX(Math.pow(2,20),2,2)} at ${formatPostBreak(Number.MAX_VALUE,2)} Replicanti.\n
\n
\nChance upgrade cost: Base ${format(b.E150)} IP, cost increment ${formatX(b.E15)} IP\n
\nInterval upgrade cost: Base ${format(b.E140)} IP, cost increment ${formatX(b.E10)} IP\n
\nGalaxy upgrade cost: Base ${format(b.E170)} IP, cost increment ${formatX(b.E25)} IP and an additional\n${formatX(1e5)} IP per upgrade, scaling similarly to distant Antimatter Galaxies. Above ${formatInt(100)} Replicanti\nGalaxies, this ${formatX(1e5)} per upgrade changes to ${formatX(b.E55)}. Above ${formatInt(1e3)}, the scaling switches\nfrom quadratic to cubic, with the ${formatX(b.E55)} multiplier itself increasing by ${formatX(b.E5)} per upgrade.\n`,isUnlocked:()=>Replicanti.areUnlocked||PlayerProgress.eternityUnlocked(),tags:["interval","chance","infinity","galaxy","galaxies","midgame"],tab:"infinity/replicanti"},{name:"Eternity",info:()=>`\nUpon reaching ${formatPostBreak(Number.MAX_VALUE,2)} IP, you can Eternity. Eternities will reset everything before this\npoint except challenge times, Achievements, and anything under the General section of the Statistics tab. You will be\nable to access more content after your first Eternity.\n
\n
\nYou can pass ${formatPostBreak(Number.MAX_VALUE,2)} IP without anything being forced upon you, unlike the first time\nyou reached ${formatPostBreak(Number.MAX_VALUE,2)} antimatter. You will receive more Eternity Points the more\nInfinity Points you had before going Eternal. You will also gain one "Eternity" for completing an Eternity.\n
\n
\nEternity Point gain scales similarly to Infinity Point gain, but scaling off of Infinity Points instead of antimatter.\nThe base amount of EP gained at ${formatPostBreak(Number.MAX_VALUE,2)} IP is ~${format(1.62,2,2)} EP, multiplied by\n${formatInt(5)} for every factor of ${formatPostBreak(Number.MAX_VALUE,2)} more IP you have. This is always rounded\ndown, which means that you will get ${formatInt(1)} EP at ${formatPostBreak(Number.MAX_VALUE,2)} IP but will not reach\n${formatInt(2)} EP until ${formatPostBreak(b.E349)}.\n
\n
\nHotkey: E will try to perform an Eternity reset.\n`,isUnlocked:()=>PlayerProgress.eternityUnlocked(),tags:["eternal","ep","reset","prestige","midgame"],tab:"eternity/upgrades"},{name:"Eternity Milestones",info:()=>'\nTo make Eternities faster and more convenient, you will unlock various buffs as you get more "Eternity". These\nbuffs will generally let you start with certain upgrades you would otherwise lose after Eternity, give you new\nautobuyers for better automation, or give you a way to passively gain resources offline at a reduced rate.\n
\n
\nMilestones which give you upgrades will automatically purchase and upgrade them to their maximum when first starting\nthe Eternity, effectively letting you have them permanently.\n
\n
\nAll of the new autobuyers will have toggles next to their respective manual buttons (for example, Infinity Dimension\nautobuyers can be found on the Infinity Dimension tab) in addition to their entries on the autobuyers tab.\nThe improvements to the Dimension Boost, Antimatter Galaxy, and Big Crunch autobuyers update their\nalready existing entries on the autobuyer tab.\n
\n
\nThe passive generation milestones only work offline by design and may need certain autobuyer settings to work\nproperly, as noted on the milestone page itself.\n',isUnlocked:()=>PlayerProgress.eternityUnlocked(),tags:["eternities","rewards","automation","midgame"],tab:"eternity/milestones"},{name:"Time Dimensions",info:()=>`\nAfter your first Eternity, you unlock Time Dimensions. You buy them with Eternity Points and they produce Time Shards,\nwhich provide Tickspeed Upgrades. These Tickspeed Upgrades function like normal Tickspeed Upgrades but do not increase\ntheir cost. Time Dimensions, Time Shards, and the Tickspeed Upgrades they provide are kept on Infinity,\nbut reset every Eternity.\n
\n
\nSimilarly to the other dimensions, Second Time Dimensions produce 1st Time Dimensions and so on. Similarly to Infinity\nDimensions, your production will be reset to the amount you purchased after every Eternity, but you will keep any\nupgrades to your multipliers you purchased.\n
\n
\nEach purchase increases the multiplier of that specific Time Dimension by ${formatX(4)}. The cost multiplier between\nupgrades has a base value, but is increased by ${formatX(1.5,1,1)} at\n${format(TimeDimension(1)._costIncreaseThresholds[0],2)} EP and ${formatX(2.2,1,1)} (of the base value) at\n${format(TimeDimension(1)._costIncreaseThresholds[1])} EP. These increases apply retroactively, causing the cost to\njump when they reach those thresholds, and only apply to the first four dimensions. Beyond\n${format(TimeDimension(1)._costIncreaseThresholds[2])} EP each dimension purchase counts as four purchases for the\npurpose of cost increases, causing the price to rise much more steeply.\n
\nTime Dimension base prices (EP): ${Array.range(1,8).map((e=>format(TimeDimension(e)._baseCost))).join(", ")}\n
\nTime Dimension base price increases: ${Array.range(1,8).map((e=>format(TimeDimension(e)._costMultiplier))).join(", ")}\n
\n
\nEach threshold to gain another Tickspeed Upgrade is ${formatPercents(.33)} more Time Shards than the previous,\nor ${formatPercents(.25)} with the relevant Time Study. After ${formatInt(FreeTickspeed.softcap)} upgrades, the\nmultiplier between each successive free Tickspeed Upgrade will gradually increase at a rate of ~${formatX(1.35,0,2)}\nper ${formatInt(5e4)} upgrades (${formatX(1.000006,0,6)} per upgrade).\n`,isUnlocked:()=>PlayerProgress.eternityUnlocked(),tags:["dims","td","shards","eternity","midgame"],tab:"dimensions/time"},{name:"Time Studies",info:()=>`\nA Time Study is a powerful post-Eternity upgrade, which costs a new resource called Time Theorems. Time Studies can\nboost the production of anything you have seen so far in the game, or even change the way some formulas work.\n
\n
\nTime Theorems are a limited resource which costs more for each one you buy. They can be bought with antimatter,\nInfinity Points, or Eternity Points. Their cost increases by a set factor per purchase. Time Theorems do not\nreset on Eternity.\n
\n
\nStudies are laid out in a tree-like fashion, where you must buy prerequisites before continuing. The only study you\ncan buy at first is the very top one, and then from there you can purchase any study directly below it which you can\nafford. However, there are three exceptions:\n
\nWhere the lines between studies have a color, you can only choose one of the three paths at a time.\n
\nWhen a study for an Eternity Challenge is in the way, you need to complete all challenges connected to it at least\nonce in order to access the study. You do not need to have the challenge study purchased in order to access it.\n
\nNear the bottom, where all the edges join together again, you can only pick one study out of each pair.\n
\n
\nYou are able to hold down shift and then click on a Time Study to buy all studies until that point. This might not buy\nthe studies you want if you shift-click a study in a position where you would have to choose between two or more\ndifferent options which you cannot get together (see above), or you cannot afford all the studies needed to reach that\npoint. Shift-click will buy studies greedily, getting as many as possible per row before moving farther downward.\n
\n
\nPresets: The buttons initially labeled 1 through 6 allow you to save your current set of studies into the slot,\nletting you quickly buy that particular set of studies again with a single click. You can hover over the button and\nuse the tooltip to load/save a slot, or click to load and shift-click to save. These presets can be renamed, but you\nare not allowed to give multiple presets the same name.\n
\n
\nImport Tree/Edit Preset: When editing a preset or importing a Time Study Tree, the modal will display what\nTime Studies will be bought when it is loaded, along with any errors.\nFor the split paths, you can use the name as a shorthand for the collection of studies.\nFor instance, you can replace "71, 81, 91, 101" to represent fully purchasing the antimatter split with\njust "antimatter". Additionally, if a Time Study string has a valid Eternity Challenge, adding a "!" to the end of\nthe string will make the game to try to immediately unlock and enter the Eternity Challenge when used.\n
\n
\nPreferences: Clicking the gear icon will open up a dialog which lets you select "default" paths to pick in the\nthree-way branches. Choosing a default will change the shift-click behavior mentioned above so that it will attempt\nto buy your preferred path and continue on instead of stopping completely at the tree splits. You can choose two paths\nfor the Dimension split in this dialog if you have purchased the relevant Time Study.\n
\n
\nRespecs: A respec allows you to reset the upgrades you have in the tree to retrieve all of the Time Theorems\nspent on them. It can be done for free, but only triggers on finishing an Eternity; you cannot respec Time Studies in\nthe middle of an Eternity.\n
\n
\nCosts for Time Theorems:\n
\nAntimatter: Initially ${format(b.E20000)}, ${formatX(b.E20000)} per Theorem\n
\nInfinity Points: Initially ${formatInt(1)}, ${formatX(b.E100)} per Theorem\n
\nEternity Points: Initially ${formatInt(1)}, ${formatX(2)} per Theorem\n`,isUnlocked:()=>PlayerProgress.eternityUnlocked(),tags:["eternity","ts","theorems","tree","study","midgame"],tab:"eternity/studies"},{name:"Eternity Challenges",info:()=>"\nEternity Challenges are another set of challenges which are unlocked by the Time Study Tree. They require a certain\namount of Time Theorems and a secondary requirement which you must meet when you unlock the challenge.\n
\n
\nWhen you enter an Eternity Challenge, your goal becomes reaching a certain target IP. After completing the challenge,\nyou do not need to have the Eternity Challenge's study unlocked for the reward to take effect. The rewards for these\nchallenges are similar to Time Studies, but often even stronger and permanent since they do not require you to spend\nTime Theorems to have their effects.\n
\n
\nYou can only have one Eternity Challenge unlocked at a time.\n
\n
\nYou can complete each Eternity Challenge up to five times. After each completion, the rewards grow stronger but the\ngoal to the next completion also increases. Additionally, the secondary requirement to unlock the challenge again will\nalso increase. The Time Theorem cost does not increase.\n
\n
\nCompleting an Eternity Challenge's secondary requirements will remove them from the study requirement until you complete\nthat particular Eternity Challenge, meaning you only need to complete the secondary requirement once.\nAs a result, you can unlock an Eternity Challenge with one set of studies, and then respec into a different set of\nstudies to beat the challenge. EC11 and EC12 are exceptions to this rule - the Dimension path restrictions remain even\nif you respec your time studies.\n",isUnlocked:()=>PlayerProgress.eternityUnlocked(),tags:["ec","study","time","rewards","completions","midgame"],tab:"challenges/eternity"},{name:"Time Dilation",info:()=>`\nTime Dilation is unlocked when you purchase the Time Study to unlock it below the EC11 and EC12 studies.\nIn order to purchase this Time Study, you need ${formatInt(5e3)} unspent TT with a tree that can reach\nthe study, a total of ${formatInt(TimeStudy.dilation.totalTimeTheoremRequirement)} TT, and must have\ncompleted both EC11 and EC12 five times each.\n
\n
\nDilating time will start a modified Eternity, called Time Dilation, in which all of your Antimatter/Infinity/Time\nDimension multipliers’ exponents and the tickspeed multipliers’ exponent will be raised to\n${formatPow(.75,2,2)}, significantly reducing them. If you can reach ${formatPostBreak(Number.MAX_VALUE,2)} IP\nto complete this Dilated Eternity, you will be rewarded with a new resource called Tachyon Particles.\n
\n
\nYou can Dilate as many times as you want, but Tachyon Particles cannot be "farmed" like other resources. Tachyon\nParticles are never reduced, only increased, and they are increased up to a cap based on your TP multipliers and\nantimatter earned in the current Dilation. As a result, you generally cannot increase your TP unless\nyou have gained a TP multiplier or are able to significantly increase your antimatter in Dilation.\n
\n
\nTachyon Particles generate another currency called Dilated Time. Dilated Time is translated into Tachyon Galaxies by\nreaching thresholds similarly to the Tickspeed Upgrades gained from Time Dimensions. These Tachyon Galaxies are like\nReplicanti Galaxies in that they affect tickspeed as if they were Antimatter Galaxies but they do not increase the cost\nof your next Antimatter Galaxy.\n
\n
\nUnlocking Time Dilation also unlocks upgrades you can purchase using Dilated Time. The first and third upgrades in the\nfirst row of Dilation Upgrades can be repeatedly purchased as many times as you can afford them. The second upgrade can\nalso be repeatedly bought, but eventually reaches a cap.\n`,isUnlocked:()=>DilationTimeStudyState.studies[1].isBought||PlayerProgress.realityUnlocked(),tags:["dial","dt","dilated","tachyon","particle","study","free","galaxy","galaxies","midgame"],tab:"eternity/dilation"},{name:"Reality",info:()=>`\nWhen you reach ${formatPostBreak(b.E4000)} EP and have completed the first\n${formatInt(13)} rows of Achievements, you will be able to purchase the Time Study that unlocks Reality.\nUnlocking it opens a new tab, where you can find the button to make a new Reality. Starting a new Reality\nwill reset almost the entire game up to this point, but in exchange gives\nyou a new currency known as Reality Machines, a Glyph, and a Perk Point.\n
\n
\nUnlike the other resets so far, you also lose the first ${formatInt(13)} rows of Achievements - that is, all of the\npre-Reality Achievements and all of their associated rewards. However, you will still keep all values under the General\nheader in the Statistics tab and all of your best Challenge times.\n
\n
\nAfter completing your first Reality, the Glyphs tab contain a button which lets you restart your current Reality again,\nwithout changing what your upcoming Glyph choices are. Note that this will not give you any rewards, even if you\nwould otherwise be able to complete the Reality normally.\n
\n
\nYou need to redo the requirements for each Achievement in order to get their rewards again, but you will also passively\nunlock the next incomplete Achievement every ${timeDisplayNoDecimals(18e5)} without any effort even if you\notherwise do not have the requirements to do so. This automatic completion can be disabled, in which case the timer will\ncount down to zero and pause, immediately completing another Achievement when unpaused. The timer still progresses\nat the same rate while offline.\n
\n
\nReality Machines can be spent on different upgrades throughout the Reality tab and are your primary currency from this\npoint onwards. Glyphs are equippable objects which you must equip in order to use their boosts. Perk Points are another\ncurrency that can be spent in the Perks subtab on different Perks.\n
\n
\nReality Machines scale purely off of EP, and the Reality button will tell you how much EP you need in order to gain\nthe next one. The first ${formatInt(10)} RM scale linearly in the exponent between\n${formatPostBreak(b.E4000)} EP and ${formatPostBreak(b.C10P16000D3)} EP, and then past that\nRM = ${formatInt(1e3)}log${formatInt(10)}(EP)/${formatInt(4e3)}-${formatInt(1)}. This formula\nis higher RM gain than linear above ${formatPostBreak(b.C10P16000D3)} EP.\n
\n
\nGlyph level scales off of a combination of Eternity Points, Replicanti, and Dilated Time, with a minimum level of\n${formatInt(1)}. The type, effects, and rarity of Glyphs are randomized.\n
\n
\nYou get exactly ${formatInt(1)} Perk Point per Reality.\n
\n
\nHotkey: Y will try to perform a Reality reset.\n`,isUnlocked:()=>PlayerProgress.realityUnlocked()||TimeStudy.reality.isBought,tags:["rm","machines","glyph","perk","reset","prestige","endgame","lategame"],tab:"reality/upgrades"},{name:"Glyphs",info:()=>`\nA Glyph is an equippable object that has four attributes:\n
\nType - This is a name given to the Glyph based on what part of the game it will tend to boost\n(eg. "Glyph of X"). This determines the possible effects it may have.\n
\nLevel - This contributes to how strong your Glyph is, and it scales based how much of various\nresources you obtained in the Reality you gained it from.\n
\nRarity - This is a percentage, between ${formatPercents(0)} and ${formatPercents(1)}, which also\naffects the strength of your Glyph. This is random, but can be influenced by various upgrades.\nThe percentage is effectively a quality\nrating, higher values are better. Specific ranges of rarities are given names, such as Common or Uncommon.\n
\nEffects - These are the boosts that equipping the Glyph will give you, and can contain up to four effects.\nGlyphs with higher level or rarity will generally have more effects than weaker Glyphs.\n
\nNote: Your first Glyph will have a fixed effect and rarity, but its level will scale based on your progress before\nany Reality content. Once you receive a Glyph, its attributes cannot be changed.\n
\n
\nTo equip a Glyph, double-click or drag the icon from your inventory into one of the active circles in the middle\nof the screen. When equipped, Glyph icons become circular and add their effects to the list on the right.\n
\n
\nEquipping multiple Glyphs with the same effect will combine their effects; effects with "+" will generally add\ntheir values together and effects with "×" will generally multiply their values together.\n
\n
\nYou can equip Glyphs into empty active slots at any time during a Reality, which will immediately apply the\neffects of the new Glyph. You can also drag Glyphs into already-occupied slots to switch which ones you have equipped,\nbut this will restart your current Reality.\n
\n
\nThe slots in the first rows of your inventory are "protected" slots. New Glyphs will never be placed into them (even if\nthere is no more room in your inventory), and they are unaffected by the Sort and Auto clean buttons. If you run out of\nspace for new Glyphs in your inventory, any Glyphs you would receive will be automatically deleted (or sacrificed\nif unlocked).\n
\n
\nYou can delete Glyphs from your inventory by shift-clicking them, which will prompt you with a confirmation dialog\nasking if you are sure you want to delete the Glyph. Holding shift and ctrl together while clicking will bypass this\ndialog. However, deleting Glyphs will give you no benefit beyond clearing up inventory space if you do so before\nunlocking Glyph Sacrifice from a Reality Upgrade!\n
\n
\nOnce you unlock Glyph Sacrifice, you will be able to disable the Glyph Selection modal from appearing. If desired, you\ncan force the modal to appear again for this Reality (ignoring this setting) by shift-clicking the Reality button.\nCompleting a Reality with the selection modal disabled will choose a random Glyph from your options.\n
\n
\nClicking a group of circular Glyphs outside of a modal window will open up a modal which displays a detailed summary\nof all those Glyphs and their various attributes. The summary will show the information for all Glyphs at once with\nslightly shorter descriptions, making it more suitable for sharing with others. This can be done for Glyph records\nin the Statistics page, your equipped Glyphs, and the Upcoming Glyph Selection this Reality.\n`,isUnlocked:()=>PlayerProgress.realityUnlocked()||TimeStudy.reality.isBought,tags:["reality","sacrifice","level","endgame","lategame"],tab:"reality/glyphs"},{name:"Perks",info:()=>`\nPerks are a type of upgrade unlocked upon Reality. Each Perk effect varies, but most are QoL (quality of life)\nimprovements which you can choose your own path through. All Perks only require ${formatInt(1)} Perk Point to buy.\n
\n
\nEach Reality you gain ${formatInt(1)} Perk Point which can be spent on an upgrade on the tree, starting with\n"You can now choose from ${formatInt(Perk.firstPerk.config.effect)} Glyphs on Reality". You can only unlock Perks\nwhich are directly adjacent\nto Perks you already have, although there are loops in the tree which you can go through in either direction.\n
\n
\nThe Perk nodes can have two different shapes - circular or diamond. The only difference between the two is that\ndiamond-shaped Perks give Automator Points in addition to their normal effect. Different nodes also have\ndifferent colors, roughly indicating which part of the game they affect the most.\n`,isUnlocked:()=>PlayerProgress.realityUnlocked()||TimeStudy.reality.isBought,tags:["pp","reality","tree","endgame","lategame"],tab:"reality/perks"},{name:"Automator Overview",info:()=>`\nThe Automator is unlocked upon reaching a total of ${formatInt(AutomatorPoints.pointsForAutomator)} Automator Points.\nAutomator Points are given when unlocking various Perks or Reality Upgrades, by unlocking the Black Hole, or by\nsimply completing more Realities.\n
\n
\nThe Automator uses a scripting language that allows you to automate nearly the entire game.\nThe interface has two panes, a script pane on the left where you enter the commands to automate the game and a pane\non the right which has multiple panels which do many different things as explained on the Automator Introduction page.\n
\n
\nIf you want a larger workspace, you can press the button in the top right corner of the documentation pane of the\nAutomator to expand it to fullscreen. You can also drag the boundary between the panes horizontally to resize the\npanes if you want more room to write your script or read documentation.\n
\n
\nBy pressing the top-right button on the script pane, you can switch between the Automator's block and text editor\nmodes; the block mode may be more approachable if you are unfamiliar with programming. To enter commands in block mode,\nselect the command block pane on the right and drag the box for the relevant command into the script pane and drop it\nwhere you want the command to go. Commands can be freely rearranged by dragging the blocks around if needed. Switching\nbetween block and text mode will attempt to automatically translate your script as well, although you may lose part of\nyour converted script if it contains errors.\n
\n
\nJust like your entire savefile, individual Automator scripts can be imported and exported from the game.\nProperly-formatted script strings will begin with ${GameSaveSerializer.startingString["automator script"]} and\nend with ${GameSaveSerializer.endingString["automator script"]}. If this is not the case then part of your script\nwas lost in the process of copy-pasting. The import function will load the script into a new slot; your current script\nwill not be lost or overwritten.\n
\n
\nHotkey: U will pause/unpause the Automator.\n`,isUnlocked:()=>Player.automatorUnlocked,tags:["automation","reality","code","script","endgame","lategame"],tab:"automation/automator"},{name:"Automator Technical Details",info:()=>`\nTechnical Limits\n
\n
\nThere are a few limitations to scripts in order to reduce lag and prevent save file size from getting too large.\nThese limits are as follows:\n
\n- Individual scripts are limited to a maximum of ${formatInt(AutomatorData.MAX_ALLOWED_SCRIPT_CHARACTERS)}\ncharacters each and all scripts combined together cannot exceed ${formatInt(AutomatorData.MAX_ALLOWED_TOTAL_CHARACTERS)}\ncharacters total.\n
\n- Script names cannot exceed ${formatInt(AutomatorData.MAX_ALLOWED_SCRIPT_NAME_LENGTH)} characters.\n
\n- Defined constants cannot have names longer than ${formatInt(AutomatorData.MAX_ALLOWED_CONSTANT_NAME_LENGTH)}\ncharacters, or values longer than ${formatInt(AutomatorData.MAX_ALLOWED_CONSTANT_VALUE_LENGTH)} characters.\n
\n- You cannot have more than a total of ${formatInt(AutomatorData.MAX_ALLOWED_SCRIPT_COUNT)} scripts or\n${formatInt(AutomatorData.MAX_ALLOWED_CONSTANT_COUNT)} defined constants.\n
\n
\nScript Saving\n
\n
\nScripts are automatically saved as you edit them, but are not saved to your game save until the global autosave timer\n(ie. "Time since last save") triggers a full game save. If you make changes to scripts right before closing the game,\nyou should wait until the game saves afterwards in order to not lose your changes. Any edits made to your scripts\nwhile above the length limits will not be saved until you shorten your scripts to be below them again.\n
\n
\nAutomator Ticks\n
\n
\nThe Automator's "execution timer" is based on real time, and is therefore unaffected by things such as the Black Hole,\nTime Glyph effects, and EC12's negative effect. However this execution timer runs entirely independently from the main\ngame's production loop, meaning that at faster speeds the Automator can run multiple commands per production tick.\n
\n
\nSome commands are more intensive on the game's internal code and may take longer than a single Automator tick in order\nto process on slower computers. In that case, the Automator will execute those commands and then attempt to "catch up"\nby executing the following commands as quickly as possible until it has run as many commands as it should have at a\nconstant execution speed.\n
\n
\nInteractions with Offline Progress\n
\n
\nLonger production ticks during Offline Progress simulation means that all of your resources are effectively given\nin large chunks instead of more continuously. This may have potentially adverse effects on your script's\nbehavior while offline, depending on how exactly your script depends on the game state to work properly.\nAdditionally, the PAUSE command may behave oddly due to it also being based on real time.\n`,isUnlocked:()=>Player.automatorUnlocked||PlayerProgress.mendingUnlocked(),tags:["automation","reality","code","script","endgame","lategame"],tab:"automation/automator"},{name:"Black Hole",info:()=>`\nThe Black Hole is a feature which speeds up how fast the game runs, on a periodic cycle.\nThe game will run at normal speed for some amount of time, then have a burst of running extremely fast for a short\nperiod of time before going back to normal speed and repeating the cycle.\n
\n
\nIncreased game speed from Black Holes is much stronger than tickspeed because unlike tickspeed, it affects\neverything equally, including things which are only partially affected by tickspeed\n(eg. Infinity/Time Dimensions), things which are normally completely unaffected (eg. DT/TT generation),\nand effects which are boosted purely on time spent (eg. idle path IP/EP multipliers).\n
\n
\nWhile most features in the game are boosted by this increased game speed, there are some which remain unaffected.\nIn these cases, it will be specifically mentioned that a given time is stated as real time as opposed to\ngame time. One such example is the set of Perks which automatically completes Eternity Challenges over time.\nOtherwise, it should be assumed from this point onward that all references to time are for game time.\nNote that this also includes situations where you may want to have a lower amount of time spent, like\nthe Reality Upgrade "Replicative Rapidity" for example.\n
\n
\nYou can buy upgrades for the Black Hole by using Reality Machines. There are three upgrades for the Black Hole:\n
\nInterval - How long the Black Hole is inactive between bursts,\nreduced by ${formatPercents(.2)} per upgrade.\n
\nPower - How much faster the game runs during the temporary speed bursts,\nincreased by ${formatPercents(.35)} per upgrade.\n
\nDuration - How long each speed burst lasts before going back to normal speed,\nincreased by ${formatPercents(.3)} per upgrade.\n
\n
\n${formatInt(100)} days of game time after unlocking the Black Hole, you unlock the ability to purchase\na Reality Upgrade that allows you to have a second Black Hole.\nThe timer on the second Black Hole only advances when the first Black Hole is active. So, for example, if the first\nBlack Hole has a duration of ${formatInt(4)} minutes and the second has an interval of ${formatInt(8)} minutes, the\nsecond Black Hole will only activate once every two cycles of the first Black Hole regardless of how short the\nfirst Black Hole's interval is. Note that the timer shown in the in-game header takes account of this and shows\nthe actual time until the second Black Hole activates; in the Black Hole tab, you can see the amount of time with\nthe first Black Hole active needed for the second Black Hole to activate.\n
\n
\nWhen a Black Hole is active at least ${formatPercents(.9999,2)} of the time, it becomes permanently active.\nThis is tracked separately for the two Black Holes.\n
\n
\nWhile offline, Black Hole cycles will still advance normally and their active speed boosts will apply fully as if the\ngame were still open. Offline time simulates segments of inactive and active Black Holes with different tick lengths\nin order to reduce the negative effects of small tick count during active periods; the entry for "Offline Progress"\nhas been updated with more technical details.\n
\n
\nThe Black Holes can be paused, completely halting their interval/duration cycle. However, when unpausing them, it will\ntake ${BlackHoles.ACCELERATION_TIME} real-time seconds for them to go from inactive to their maximum boosted speed.\nThis acceleration time will still advance the cycle as if it were running at full speed; so\nwhile pausing gives some more control, it also ultimately results in some boosted time being lost.\n
\n
\nPausing and unpausing affects both Black Holes; they cannot be paused or unpaused independently. They can be paused\nautomatically ${BlackHoles.ACCELERATION_TIME} real-time seconds before activation by toggling the relevant setting on\nthe Black Hole tab.\n
\n
\nUpgrade Cost Information:\n
\nInterval - Base cost of ${formatInt(15)} RM and increase of ${formatX(3.5,0,1)} per upgrade.\n
\nPower - Base cost of ${formatInt(20)} RM and increase of ${formatX(2)} per upgrade.\n
\nDuration - Base cost of ${formatInt(10)} RM and increase of ${formatX(4)} per upgrade.\n
\nIncreased cost scaling: Above ${format(1e30)} RM, the cost multiplier between purchases increases by an additive\n+${format(.2,0,1)} per upgrade. Above ${format(Number.MAX_VALUE,1)} RM, a new scaling occurs which ignores all the\nprevious behavior. From this point, all upgrades instead behave as if they had an initial cost of ${format(b.E310)}\nand further upgrade costs increase by ${format(1e6)}, ${format(1e7)}, and so on (${formatX(10)} between upgrades).\n
\nBlack Hole 2: All upgrades have an initial cost ${formatX(1e3)} higher than the first Black Hole,\nbut the same cost multipliers.\n
\n
\nHotkey: B will pause/unpause the Black Holes.\n`,isUnlocked:()=>player.blackHole[0].unlocked||PlayerProgress.mendingUnlocked(),tags:["reality","time","speed","duration","interval","rm","endgame","lategame"],tab:"reality/hole"},{name:"Celestials",info:()=>'\nOnce you get all of the Reality Upgrades, the first Celestial is unlocked. This opens up a new tab for Celestials, next\nto the Reality tab. The first subtab under the Celestials tab shows a map called "Celestial Navigation" which updates as\nyou progress through the game. Only part of the map will be visible when first unlocked, but new content will gradually\nbe revealed as you approach it, generally with a visual indication of your progress towards the next step.\n
\n
\nEach Celestial has unique mechanics and upgrades, and you need to defeat all seven to beat the game.\nUnlocking or defeating a Celestial has different conditions depending on the Celestial\'s mechanics.\n
\n
\nAll Celestials have their own Celestial Reality, but how the Reality is relevant to each Celestial and the rest of\nthe game will depend on the Celestial.\n
\n
\nCelestials are timeless entities. Unless otherwise stated, any new mechanics introduced by Celestials are not affected\nby game speed multipliers and instead refer specifically to real time instead of game time.\n',isUnlocked:()=>Teresa.isUnlocked||PlayerProgress.mendingUnlocked(),tags:["reality","challenges","endgame","lategame"],tab:"celestials/celestial-navigation"},{name:"Teresa, Celestial of Reality",alias:"Teresa",info:()=>`\nTeresa is the first Celestial. They are unlocked by Achievement 147, which requires obtaining all Reality Upgrades.\n
\n
\nOn the main screen, there is a bar with a button above it that says "Pour RM". This allows you to put your RM into the\ncontainer for a Reality Machine multiplier. RM which has been poured into the container cannot be retrieved.\nWhen you reach ${format(TeresaUnlocks.run.price)} RM inside of the container, you unlock Teresa's Reality.\n
\n
\nWhen you complete Teresa's Reality,\n${Teresa.runCompleted?"your Glyph Sacrifice is multiplied based on the amount of antimatter gained during the run":"
(complete Teresa's Reality to see the reward)
"}.\nCompleting Teresa's Reality is only part of the story; you need to keep pouring RM in order to progress. Once\nyou are at ${format(TeresaUnlocks.effarig.price)} RM in the container, you will unlock the next Celestial.\n
\n
\n${Teresa.runCompleted?"Teresa's Reality can be entered again after completing it, and its reward will become stronger if you reach a higher amount of antimatter on this repeat run.":"(More information available - complete Teresa's Reality)"}\n`,isUnlocked:()=>Teresa.isUnlocked||PlayerProgress.mendingUnlocked(),tags:["rm","endgame","lategame","perks","sacrifice","boo","ghost","celestial"],tab:"celestials/teresa"},{name:"Effarig, Celestial of Ancient Relics",alias:"Effarig",info:()=>`\nEffarig is the second Celestial you encounter.\nThey are unlocked by pouring at least ${format(TeresaUnlocks.effarig.price)} RM into Teresa's container.\n
\n
\nEffarig introduces a currency called Relic Shards, which are obtained by using different kinds of Glyph effects during\na Reality. The number of distinct effects active during the Reality very strongly affects Relic Shard gain, and EP\naffects it to a much lesser degree. Relic Shards are the currency for Effarig unlocks, and will be gained from every\nReality from now on.\n
\n
\nUsing Relic Shards, you can purchase multiple upgrades (see "Advanced Glyph Mechanics") which improve your Glyphs and\nallow you to filter them based on their effects and rarity when you are doing fully automated Realities.\n
\n
\nEffarig's final unlock is their own Reality at ${format(GameDatabase.celestials.effarig.unlocks.run.cost)} Relic\nShards.\n${EffarigUnlock.run.isUnlocked?"Their Reality is divided into three layers: Infinity, Eternity, and Reality. You must complete each layer before getting access to the next one. Completing Effarig's Eternity unlocks the next Celestial.":"
(unlock Effarig's Reality to see details about it)
"}\n
\n
\nCompleting Effarig's Reality unlocks\n${EffarigUnlock.reality.isUnlocked?`a new Glyph type, Effarig Glyphs. Effarig Glyphs have\n ${formatInt(7)} different possible effects, which you can view in the Glyph filter settings. You can only\n have one Effarig Glyph equipped at a time.\n${Ra.unlocks.glyphEffectCount.canBeApplied?`Due to having Effarig at level 10 within Ra, there are no longer any restrictions on effects that appear on\n Effarig Glyphs. Any given Effarig Glyph can now have up to all ${formatInt(7)} effects at the same time.`:`Effarig Glyphs can only have at most ${formatInt(4)} effects, and the RM multiplier and Glyph instability\n effects cannot appear together on the same Glyph.`}`:"(complete Effarig's Reality to see reward details)"}\n
\n
\n`,isUnlocked:()=>TeresaUnlocks.effarig.canBeApplied||PlayerProgress.mendingUnlocked(),tags:["glyph","sacrifice","shards","reality","spectralflame","lategame","endgame","celestial"],tab:"celestials/effarig"},{name:"Advanced Glyph Mechanics",info:()=>`\nGlyph level Adjustment is purchasable for ${format(GameDatabase.celestials.effarig.unlocks.adjuster.cost)} Relic\nShards. This allows you to set weights for each resource (EP, DT, Replicanti, Eternities), in how much they affect the\nlevel of Glyphs gained on Reality.\n
\n
\nAutomatic Glyph Filtering is purchasable for ${format(GameDatabase.celestials.effarig.unlocks.glyphFilter.cost)}\nRelic Shards. This system uses one of many methods to assign a score to your Glyph choices, and then picks the choice\nwith the highest score. After picking this Glyph, it checks the score against a threshold and either keeps it if the\nscore is above the threshold, or sacrifices it instead. There are three basic modes:\n
\nLowest total sacrifice: Glyphs are given a score based on how much sacrifice value you have of that\nparticular Glyph's type. Glyphs of the type you have the least sacrifice value in will have the highest score.\nThis mode does not have a threshold and always sacrifices your Glyphs.\n
\nNumber of effects: Glyphs are given a score equal to the number of effects they have, and when multiple\nGlyphs have the same effect count, Glyphs with higher rarity will be picked. The threshold they are\ncompared to is specified by your input in the text box.\n
\nRarity Threshold Mode: Glyphs are given a score equal to their rarity percent. The comparison threshold\ncan be set individually per Glyph type.\n
\n
\nAdditionally, there are two more advanced modes with some additional flexibility. You may not need these initially, but\nthey can come in handy later on:\n
\nSpecified Effect Mode: Glyphs are given a score equal to their rarity and checked against the rarity threshold\nyou specify, but this score is modified based on your inputs for effects. The Glyph will be checked for having a minimum\nnumber of effects and having all of the effects you choose, and its score is lowered by ${formatInt(200)} for every\nmissing effect. This guarantees that any Glyph that does not have the effects you want will be below the threshold. You\ncan forbid specific Glyph types by setting impossible conditions (eg. at least ${formatInt(6)} effects on a Power\nGlyph will prevent Power Glyphs from being selected).\n
\nEffect Score Mode: The score of a Glyph is calculated from its rarity plus the score of each effect it has,\nand you can set the threshold and values of each effect individually. Some possible ways this could be used:\n
\n- Giving a weaker effect a value of ${formatInt(5)} allows you to keep Glyphs without that effect as long as they are\nrarer to compensate for being weaker\n
\n- Assigning a large negative score to a certain effect you do not want will forbid Glyphs with that effect from\nbeing selected; this can be useful for effect testing and other more limited situations\n
\n- Setting an impossible condition (eg. a threshold score of ${formatInt(999)} and all effects worth ${formatInt(0)})\nwill let you forbid entire types like Specified Effect Mode as well\n
\n
\nThe Glyph Filter mode is a global setting which applies to all Glyph types at once; for example, you cannot filter\npower Glyphs with "Rarity Threshold" and time Glyphs with "Specified Effect". Selecting one mode will require\nyou to configure every Glyph type within its settings for proper filtering. Each filter mode has its own settings\nwhich will be kept if you switch to another mode.\n
\n
\nUnlocking the Glyph Filter also lets you use the highest Glyph score amongst your upcoming choices as a comparable\nCurrency in the Automator. Additionally, you can make your Filter force an immediate Reality (once available) if\nnone of the upcoming choices will be kept by the filter, as long as the Reality autobuyer is on.\n
\n
\nGlyph Presets are purchasable for ${format(GameDatabase.celestials.effarig.unlocks.setSaves.cost)} Relic\nShards. This unlocks ${formatInt(7)} slots that allow you to save your currently equipped Glyphs into sets.\nYou cannot overwrite a set, you must delete it first. When you load a set, each Glyph in it is found and equipped.\nIf any are not found, it will display a warning, but equip all the rest regardless.\nWhen loading a set, you can be Level and/or Rarity sensitive. The best Glyph from the possible Glyphs\nwill always be the one equipped. Just like other groups of circular Glyphs, you can click any of them\nin order to bring up a modal summarizing the whole set of Glyphs.\n`,isUnlocked:()=>EffarigUnlock.adjuster.isUnlocked||PlayerProgress.mendingUnlocked(),tags:["glyph","weight","adjustment","sacrifice","filter","threshold","set","save","reality","lategame","endgame"],tab:"celestials/glyphfilter"},{name:"The Nameless Ones, Celestial of Time",alias:"Nameless Ones",info:()=>`\nThe Nameless Ones are the third Celestial, unlocked by completing Effarig's Eternity.\n
\n
\nWhen unlocking The Nameless Ones, you immediately gain access to two new mechanics related to time. You can store\n"game time" by charging your Black Hole, and you can store "real time" by intentionally halting your production.\nStored game time is also used as a currency for purchasing unlocks from The Nameless Ones.\n
\n
\nCharging your Black Hole gives you stored game time, which it does at the expense of setting your game speed to\n${formatInt(1)}. The game is in effect using your increased game speed in order to store game time itself. Its\nmain use is to discharge the Black Hole, which takes uses your stored game time to skip forward in time by a duration\nequal to the game time stored. This is different than regular game speed multipliers in that discharging is not subject\nto any modifiers to game speed when it is used, only when it is stored.\n
\n
\nStoring real time completely stops all production, effectively pausing your game. For every real-time second that\npasses, you gain stored real time (modified by some efficiency factor). You can use stored real time in order to\namplify a Reality in the Glyphs tab. When you complete the Reality, this uses all of your stored real time at once\nin order to attempt to repeat that\nexact Reality over and over, giving you all the rewards you would normally get from the repetitions. For example, if\nyou have ${formatInt(50)} minutes stored and amplify a Reality which has lasted ${formatInt(10)} minutes and would\ngive ${format(b.E30)} RM and ${format(b.E12)} Relic Shards, the amplified Reality will give you ${format(5e30)} RM,\n${format(5e12)} Relic Shards, ${formatInt(5)} Glyphs (subject to your filtering settings),\nand ${formatInt(5)} Perk Points.\n
\n
\nHowever, if your Reality has lasted for less than ${formatInt(1)} second, the amplification factor is capped by the\namount of seconds stored. For example, if you have ${formatInt(1e3)} seconds stored and amplify a Reality which has\nlasted ${format(.2,2,2)} seconds, you will use ${formatInt(200)} seconds to simulate ${formatInt(1e3)} Realities.\n
\n
\nYou can toggle a setting to automatically store offline time as stored real time.\n
\n
\nTheir first unlock costs ${format(TimeSpan.fromMilliseconds(ENSLAVED_UNLOCKS.FREE_TICKSPEED_SOFTCAP.price).totalYears)}\nyears of stored game time. It increases the softcap to Tickspeed Upgrades gained from Time Dimensions\n(the point at which their cost starts increasing faster)\nby ${format(1e5)} Tickspeed Upgrades.\n
\n
\nAt ${format(TimeSpan.fromMilliseconds(ENSLAVED_UNLOCKS.RUN.price).totalYears)} years of stored game time, you are able\nto finally unlock their Reality. The reward for completing The Nameless Ones' Reality is\n${Enslaved.isCompleted?"unlocking Tesseracts, which have their own How To Play entry.":"(complete The Nameless Ones' Reality to see reward details)"}\n
\n
\nThe Nameless Ones will not directly unlock the next Celestial.\n`,isUnlocked:()=>EffarigUnlock.eternity.isUnlocked||PlayerProgress.mendingUnlocked(),tags:["reality","time","blackhole","lategame","endgame","testers","celestial",...ji.people.map((e=>e.name))],tab:"celestials/enslaved"},{name:"Tesseracts",info:()=>`\nTesseracts are a new resource you unlock for completing The Nameless Ones' Reality.\n
\n
\nInfinity Dimensions are normally capped at ${format(InfinityDimensions.HARDCAP_PURCHASES)} total purchases,\nwhich limits how large their multipliers can grow since eventually you cannot upgrade them any more.\nTesseracts allow you to raise this cap by spending Infinity Points.\n
\n
\nThe cost of Tesseracts increases super-exponentially, but each successive Tesseract is significantly stronger than\nthe last in order to make up for that. Tesseract count is never reset, meaning that once purchased, you do not need\nto reach the IP cost again in order to take advantage of the raised cap in later Realities.\n
\n
\nYou can see additional information about your current Tesseract count and the cost of the next one in the Infinity\nDimensions tab. Additionally, your current Infinity Points will now also show a percentage towards the next Tesseract.\nIf affordable, the Infinity button itself will visually change and bring you to the Infinity Dimension tab when clicked.\n`,isUnlocked:()=>Enslaved.isCompleted||PlayerProgress.mendingUnlocked(),tags:["reality","lategame","endgame","tesseract","id","celestial"],tab:"celestials/tesseract"},{name:"V, Celestial of Achievements",alias:"V",info:()=>`\nV is a special Celestial in the sense that they are not unlocked by another Celestial,\nbut is instead unlocked by completing Achievement ID 151 (row ${formatInt(15)}, column ${formatInt(1)},\n"You really didn't need it anyway"), which requires you to get ${formatInt(800)} Antimatter Galaxies\nwithout buying 8th Antimatter Dimensions in your current Infinity.\n
\n
\nAfter the subtab is unlocked from the Achievement, you are met with another set of requirements to fully unlock V.\nYou must have completed ${formatInt(GameDatabase.celestials.v.mainUnlock.realities.requirement)} Realities and have\n${format(GameDatabase.celestials.v.mainUnlock.realityMachines.requirement)} unspent RM.\nAdditionally you need to reach ${format(GameDatabase.celestials.v.mainUnlock.eternities.requirement)} Eternities,\n${format(GameDatabase.celestials.v.mainUnlock.infinities.requirement)} Infinities,\n${format(GameDatabase.celestials.v.mainUnlock.dilatedTime.requirement)} Dilated Time, and\n${format(GameDatabase.celestials.v.mainUnlock.replicanti.requirement)} Replicanti, all in the same Reality.\n
\n
\nWhen you meet all of those requirements, you will be able to access V's Reality.\n${VUnlocks.vAchievementUnlock.isUnlocked?`However, completing the Reality itself is only the beginning. V has six different requirements, each of which\n require you to make a certain amount of progress within V's Reality. Completing a requirement rewards you with a\n V-Achievement.\n V-Achievements are permanent and persist after exiting V's Reality, and do not all need to be done simultaneously.\n
\n
\n After completing the requirement, the V-Achievement threshold then increases and can be completed again\n if you can reach the new goal. You can complete each category of V-Achievement up to six times.\n Completed V-Achievements do two things:\n
\n - Upon reaching certain totals of V-Achievements, you automatically unlock upgrades on the V tab without needing\n to spend any resources.\n
\n - Each V-Achievement also gives you one Space Theorem.\n
\n
\n The goal reduction unlocked by having ${formatInt(2)} V-Achievements allows you to make some V-Achievement\n requirements easier to complete by spending Perk Points, down to a limit of whatever the easiest tier requires.\n The cost of reducing a goal does not increase as it is used, and will also reduce future tiers as well.\n
\n
\n Space Theorems allow you to purchase Time Studies which are normally forbidden, such as multiple paths in the\n Pace Split after the improved IP formula, or both Time Studies within a dark/light pair near the bottom.\n Like Time Theorems, they are freely given back every time you respec your studies.\n With enough Space Theorems you will eventually be able to purchase every single Time Study at once!\n
\n
\n Reaching ${formatInt(36)} V-Achievements (and therefore completing all of V's Achievements) unlocks the next\n Celestial.`:"(unlock V's Reality to see further details)"}\n`,isUnlocked:()=>Achievement(151).isUnlocked||PlayerProgress.mendingUnlocked(),tags:["reality","lategame","endgame","girlfriend","challenges","achievement","space","theorems","study","triad","celestial"],tab:"celestials/v"},{name:"Ra, Celestial of the Forgotten",alias:"Ra",info:()=>`\nRa is the fifth Celestial, unlocked by fully completing all of V's Achievements. They use their memories in order to\nbring back positive effects from previous Celestials in a stronger way. Over time, you will unlock the previous four\nCelestials within Ra, with each Celestial offering additional upgrades related to their original themes.\n
\n
\nEach previous Celestial within Ra gains levels by using memories, which are generated passively over time from\nMemory Chunks. Memory Chunks can only be gained by entering Ra's Reality, but inside of the Reality Chunks will\nbe generated passively based on certain resource totals. If you are storing real time, you will not gain any\nChunks inside of Ra's Reality, but Memories will still be generated normally. Having a total of\n${formatInt(Ra.remembrance.requiredLevels)} levels across all Celestials unlocks Remembrance,\nwhich allows you to choose a particular Celestial to gain more chunks while inside of Ra's Reality.\n
\n
\nMemories can be spent on three things - an increase to Memory Chunk gain, an increase to Memory gain, and leveling up\nthe Celestial. You start Ra with only Teresa unlocked and each successive Celestial is unlocked by reaching level\n${formatInt(8)} with the previous Celestial. Levels are capped at ${formatInt(25)}.\n
\n
\nTeresa unlocks the ability to charge your Infinity Upgrades, making them much stronger. They also\nimprove your Glyph effects once you reach certain thresholds in Glyph sacrifice value.\n
\n
\nAt level ${formatInt(2)}, Effarig unlocks\n${Ra.unlocks.effarigUnlock.canBeApplied?"a new mechanic called Glyph Alchemy and later on also makes Effarig Glyphs stronger while gradually removing almost all random elements of Glyph generation. Glyph Alchemy also has its own How To Play entry.":"(unlock Effarig within Ra to see unlock details)"}\n
\n
\nThe Nameless Ones unlocks\n${Ra.unlocks.enslavedUnlock.canBeApplied?"additional mechanics related to charging the Black Holes, as well as making them significantly stronger.":"(unlock The Nameless Ones within Ra to see unlock details)"}\n
\n
\nV unlocks\n${Ra.unlocks.vUnlock.canBeApplied?"Triad Studies, which are new studies near the bottom of the tree which cost Space Theorems. Each Triad Study requires you to also have the three nearby studies as well in order to purchase them. They also unlock a smaller set of more difficult V-Achievements to complete for additional Space Theorems.":"(unlock V within Ra to see unlock details)"}\n
\n
\nRa will not directly unlock the next Celestial.`,isUnlocked:()=>VUnlocks.raUnlock.isUnlocked,tags:["reality","memories","razenpok","levels","glyphs","lategame","endgame","effarig","teresa","nameless","v","celestial"],tab:"celestials/ra"},{name:"Glyph Alchemy Resources",info:()=>`\nGlyph Alchemy is a mechanic unlocked by reaching Effarig level ${formatInt(2)} in Ra. It unlocks the ability to\nuse up your Glyphs by refining them into Alchemy Resources associated with their type. You can refine Glyphs by\nsetting your Sacrifice Type to something other than "Always Sacrifice" in the Glyphs tab, and doing the normal\nprocedure for a sacrifice.\nEach Alchemy Resource has a unique effect, which you can view on the Alchemy tab.\n
\n
\nIn addition to all their other properties, Glyphs now have a refinement value which determines how much of\nits associated Alchemy Resource it is worth. This value is based on the cube of the Glyph's level, scaled\nso that level ${formatInt(1e4)} Glyphs correspond to ${formatInt(1e4)} Alchemy Resources. A single Glyph itself,\nhowever, only gives ${formatPercents(GlyphSacrificeHandler.glyphRefinementEfficiency)} of this value when refined.\nThese are values for ${formatPercents(1)} rarity Glyphs; Glyphs of lower rarity still have the same cap but give\nproportionally less resources. For example, a ${formatPercents(.5)} rarity Glyph will give only half as much.\n
\n
\nAlchemy Resources cannot be gained indefinitely; there is a per-resource cap which is based on the highest refinement\nvalue of all the Glyphs of that type you have refined. For example, if the highest level Time Glyph you have refined\nis level ${formatInt(8e3)} (refinement value: ${formatInt(GlyphSacrificeHandler.levelRefinementValue(8e3))}), then no\nmatter how many Time Glyphs you refine, you can never have more than\n${formatInt(GlyphSacrificeHandler.levelRefinementValue(8e3))} of the Time resource until you refine another Time Glyph\nwith a higher refinement value.\n`,isUnlocked:()=>Ra.unlocks.unlockGlyphAlchemy.canBeApplied||PlayerProgress.mendingUnlocked(),tags:["reality","lategame","endgame","ra","effarig","alchemy","power","infinity","time","replication","dilation","cardinality","eternity","dimensionality","inflation","alternation","synergism","momentum","decoherence","force","exponential","uncountability","boundless","unpredictability","multiversal","reaction"],tab:"reality/alchemy"},{name:"Glyph Alchemy Reactions",info:()=>`\nAlchemy Resources can be combined together in certain combinations in order to create new compound resources, which\nare unlocked at certain Effarig levels. Resources are combined once per Reality, unaffected by real time\namplification. Reactions have a higher yield and thus happen faster when your reagent amounts are higher. The cap for\ncompound resources is equal to the lowest cap amongst all of its reagents. In order for a reaction to occur, the\ncurrent amount of all reagents must be greater than the current amount of the produced resource.\n
\n
\nReaction speed is proportional to the amount of usable reagents for the reaction, but only reagent amounts above the\nproduct amount are eligible for being used. For example, if you have ${formatInt(1e4)} of all reagents and\n${formatInt(7500)} of the product, only ${formatInt(2500)} of the reagents are used in calculating the reaction speed.\nIf you instead had ${formatInt(0)} of the product, all of the reagent is available for the reaction and it will\nproduce ${formatX(4)} faster. Lastly, if you had ${formatInt(1e4)} of the product, then none of the reagent can be\nused and the reaction will not run at all.\n
\n
\nTo activate or deactivate a reaction, click the circle corresponding to the reaction's product. When the reaction can\nbe applied, moving lines will be shown from all reagents to the product. If a connection is a solid line, that means\nthat the reaction cannot proceed due to not having enough of that reagent to get more of the product due to its cap.\n`,isUnlocked:()=>Ra.unlocks.unlockGlyphAlchemy.canBeApplied||PlayerProgress.mendingUnlocked(),tags:["reality","lategame","endgame","ra","effarig","alchemy","power","infinity","time","replication","dilation","cardinality","eternity","dimensionality","inflation","alternation","synergism","momentum","decoherence","force","exponential","uncountability","boundless","unpredictability","multiversal","reaction"],tab:"reality/alchemy"},{name:"Imaginary Machines",info:()=>`\nOnce you are able to gain at least ${format(MachineHandler.baseRMCap)} Reality Machines in a single Reality, you\nunlock the ability to gain a new resource called Imaginary Machines. Reality Machines will also become hardcapped\nat ${format(MachineHandler.baseRMCap)}; you will be unable to gain any more past this limit.\n
\n
\nAdditionally you unlock the Imaginary Upgrades tab, which contains a set of upgrades similar to the Reality Upgrades -\neach upgrade has a condition you must fulfill to unlock it and an Imaginary Machine cost to actually purchase it.\nThe first two rows of upgrades can be repeatedly bought, while the other three are one-time upgrades.\n
\n
\nYour iM amount is affected by two things:\n
\niM Cap - There is a maximum amount of iM you can ever have, which is based on the highest RM amount you would\nhave been able to get if there were no RM cap. This is updated on a continual basis and thus will immediately increase\nif you ever surpass your previous highest uncapped RM amount.\n
\nCurrent iM - Over time your current iM will passively rise towards your iM cap, in a way that slows down\nexponentially as you approach the cap. By default iM slows down at a rate where the amount you are missingP\n(ie. your cap minus your current amount) is cut in half every minute. This growth rate is unaffected by any\nmodifiers to game speed.\n
\n
\nImaginary Machine upgrades will unlock the final two Celestials.\n`,isUnlocked:()=>MachineHandler.isIMUnlocked||PlayerProgress.mendingUnlocked(),tags:["imaginary","machines","reality","lategame","endgame"],tab:"reality/imag_upgrades"},{name:"Lai'tela, Celestial of Dimensions",alias:"Lai'tela",info:()=>`\nLai'tela is the sixth Celestial, unlocked by purchasing the appropriate Imaginary Upgrade for\n${format(ImaginaryUpgrade(15).cost)} iM.\n
\n
\nLai'tela gives a new currency called Dark Matter, which provides a multiplier to Continuum's effect\nbased on the highest amount of Dark Matter you have ever had. Dark Matter is produced by\nDark Matter Dimensions, in a similar cascading way to all other types of dimensions in the game. Unlike other\ndimensions, there are only four Dark Matter Dimensions rather than eight. You start with the first one unlocked\nimmediately and the higher ones are unlocked via Imaginary Upgrades. When unlocking dimensions, you are given\n${formatInt(1)} of the dimension and cannot gain more without having it produced from the next tier up.\n
\n
\nEach Dark Matter Dimension, after a certain interval of time, generates two things: Dark Matter or the next lower\nDark Matter Dimension and another resource called Dark Energy. Dark Matter and Dark Matter Dimension production\nper interval is equal to the product of your Dark Matter multiplier and the number of dimensions you have, while\nDark Energy production is independent of your dimension amount. Dark Energy is used to produce Singularities, which\nhave their own How To Play entry.\n
\n
\nDark Matter Dimensions can have their intervals upgraded down to a minimum of ${formatInt(10)}ms, at which point\nyou cannot upgrade the interval any further. You can choose to ascend Dark Matter Dimensions which reach\nthat point, which initially multiplies Dark Matter gain by ${formatInt(POWER_DM_PER_ASCENSION)} and Dark Energy by\n${formatInt(POWER_DE_PER_ASCENSION)}. The interval gets multiplied by ${formatInt(1200)}, but can be upgraded once\nagain. Reaching ${formatInt(10)}ms again allows you to ascend again if you choose to.\n
\n
\nAn Imaginary Upgrade allows you to unlock a prestige called Annihilation. Annihilation resets your Dark Matter\nand Dark Matter Dimensions, but adds to a permanent multiplier to Dark Matter that applies to all Dark Matter\nDimensions. You can Annihilate multiple times; the additions to the multiplier stack additively, and there is\nno need to Annihilate for a greater addition each time. You must have at least\n${format(Laitela.annihilationDMRequirement)} Dark Matter in order to Annihilate.\n
\n
\nLai'tela has a Reality which gives a multiplier to Dark Matter Dimensions' Dark Matter power based on how well you\ndo in the Reality. Whenever you complete the Reality in under ${formatInt(30)} seconds, your highest available\nDimension will be permanently disabled during further attempts of the Reality. Disabling all of your dimensions by\ncompleting the Reality in under ${formatInt(30)} seconds eight times will also give you a ${formatX(8)} multiplier\nto Dark Energy gain.\n
\n
\nLai'tela will not directly unlock the next Celestial.\n`,isUnlocked:()=>Laitela.isUnlocked,tags:["omsi","reality","dark","matter","dimensions","lategame","endgame","ascend","celestial"],tab:"celestials/laitela"},{name:"Continuum",info:()=>`\nWhen you unlock Lai'tela, your Antimatter Dimensions and Tickspeed Upgrades switch to a new mode of production\ncalled Continuum, which gives the same effect as previously but allows for buying partial Dimension or\nTickspeed Upgrades. These fractional purchases are given for free without spending your antimatter and will provide\nan appropriate portion of their multiplier.\n
\n
\nThe purchase buttons for Antimatter Dimensions and Tickspeed Upgrades become modified to display the number of upgrades\nyou would be able to purchase if Continuum was inactive, and the purchase count is scaled smoothly with antimatter.\nFor example, having ${format(2e7)} antimatter will give you a Continuum value of ${format(5.3,0,1)} for tickspeed\n(initial cost of ${format(1e3)} and increase of ${formatX(10)}) since you can purchase it ${formatInt(5)} times and\nare roughly ${formatPercents(.3)} of the way to the next. Tickspeed Continuum in this case will then\ngive a production boost equal to (upgrade multiplier)${format(5.3,0,1)}.\n
\n
\nSome upgrades will multiply Continuum value directly, which gives a production boost without affecting the cost\nscaling. However, these upgrades will not function if Continuum is disabled on the Autobuyers page, which may result\nin a loss of production if disabled. Continuum makes your autobuyers for Antimatter Dimensions and Tickspeed obsolete,\nso all the related autobuyer settings for these autobuyers are now hidden on that tab as long as Continuum is active.\n`,isUnlocked:()=>ImaginaryUpgrade(15).isBought||PlayerProgress.mendingUnlocked(),tags:["continuum","purchase","reality","lategame","endgame"],tab:""},{name:"Singularities",info:()=>`\nSingularities are a new resource which you can obtain using features within Lai'tela.\n
\n
\nIn order to obtain Singularities, you need to reach ${format(200)} Dark Energy. When you do, you get the option to\ncondense all your Dark Energy into a Singularity, resetting it back to zero. Any extra Dark Energy above this amount\ndo not carry over, and is thus wasted. Note that only Dark Energy is reset, the status of your Dark Matter and its\ndimensions stays the same when condensing Singularities.\n
\n
\nOnce you reach ${formatInt(10)} Singularities, you can freely increase or decrease the Dark Energy requirement to\ncondense Singularities by a factor of ${formatInt(10)} (with a minimum of ${format(200)}). This increases or decreases\nthe number of Singularities gained from resetting at the cap by more than a factor of ${formatInt(10)}, making\nhigher caps worth more if you are willing to wait.\n
\n
\nThe purpose of Singularities is to unlock Singularity Milestones, which act similarly to Eternity Milestones. Unlocking\nthese milestones simply requires you to reach the total number of Singularities specified; Singularities are not spent.\nThere are three types of milestones - one-time milestones, milestones repeatable a limited number of times, and\nmilestones which can be repeated indefinitely.\n
\n
\nIndependently of the milestone type, milestones also have an icon indicating what kind of upgrade they generally give:\n
\n These milestones help mechanics specific to Lai'tela\n
\n These milestones let a resource in Lai'tela affect the rest of the game\n
\n These milestones improve Lai'tela based on something outside of Lai'tela\n`,isUnlocked:()=>Laitela.isUnlocked||PlayerProgress.mendingUnlocked(),tags:["reality","lategame","endgame","laitela","dark"],tab:""},{name:"Pelle, Celestial of Antimatter",alias:"Pelle",info:()=>`\nWhen you purchase the last Imaginary Upgrade and unlock Pelle, you unlock their tab, where you can find a button to\n"Doom your Reality". In order to Doom your Reality, you must have completed all ${formatInt(17)} rows of Achievements\navailable to you at this point, and attained ${formatInt(25e3)} of each Alchemy Resource.\n
\n
\n${Pelle.isDoomed?'Dooming your Reality will start a new Doomed Reality, resetting almost the entire game up to\n Reality, not giving you any rewards from your progress in your current Reality.\n
\n
\n When you enter the Doomed Reality, you keep all values under the General and Reality headers in the Statistics\n tab and all of your best Challenge times. Inside Doomed Realities, multiple upgrades, Time Studies, Challenge and\n Celestial rewards, Perks, and other game mechanics are disabled or grant no reward.\n You can view the "Show effects in Doomed Reality" in Pelle tab for further information.\n
\n
\n Remnants are a new currency gained on Armageddon resets. Remnant gain is based on your best ever antimatter,\n Infinity Points, and Eternity Points across all Doomed Realities. Remnants produce Reality Shards which can be\n spent on Pelle Upgrades.\n
\n
\n Pelle Upgrades can be divided into two categories. The five upgrades in the first row can be repeatedly bought,\n but eventually reach a cap. They grant boosts to different aspects of the game, making progression within Doomed\n Realities easier.\n
\n
\n The other upgrades in the bottom rows offer automation and QoL (quality of life) improvements. Everything unlocked\n from these upgrades cannot be unlocked by their usual methods in the game; for example, none of the Normal\n Challenges will unlock autobuyers if completed since they are all locked behind Pelle Upgrades instead.\n You can toggle a button above upgrade to hide bought upgrades or click the\n -icon to collapse and hide the entire panel.\n
\n
\n Hotkey: Z will try to perform an Armageddon reset.':"You must Doom your Reality to read the rest of this entry."}\n`,isUnlocked:()=>Pelle.isUnlocked||PlayerProgress.mendingUnlocked(),tags:["reality","antimatter","lategame","endgame","final","hevipelle","celestial","doom"],tab:"celestials/pelle"},{name:"Pelle Strikes",info:()=>`\nPelle Strikes are encountered on different events in the Doomed Reality. You have encountered the first Pelle Strike by\nreaching Infinity for the first time within a Doomed Reality. More Strikes eventually occur by further progression.\nEach Pelle Strike adds a nerf to a specific aspect of the game, which can be seen by clicking on the Strike name.\nEach Pelle Strike also unlocks a Rift bar.\n
\n
\nRift bars can be filled by clicking them to toggle between "Idle" and "Filling", although only two Rifts can be\n"Filling" at any given time. When active, Rifts consume ${formatInt(3)}% of a Rift-specific resource per second. Each\nRift offers a Rift-specific effect which are based on the total amount filled.\n${PelleStrikes.eternity.hasStrike?`An exception for this is Decay/Collapse/Disarray, whose effect gets capped once you have drained a total of\n ${formatPostBreak(b.E2000)} Replicanti.`:""}\nIn addition, each Rift offers three milestone rewards for filling them up to a certain percentage.\n`,isUnlocked:()=>PelleStrikes.infinity.hasStrike||PlayerProgress.mendingUnlocked(),tags:["reality","antimatter","lategame","endgame","final","pelle","strike","rift","celestial"],tab:"celestials/pelle"},{name:"The Galaxy Generator",info:()=>`\nWhen you reach ${formatInt(100)}% Recursion/Dispersion/Destruction, you unlock the Galaxy Generator, which can\npassively generate Galaxies. Generated Galaxies are like Replicanti Galaxies and Tachyon Galaxies in that they affect\ntickspeed as if they were Antimatter Galaxies, but they do not increase the cost of your next Antimatter Galaxy. You\nalso unlock five new upgrades. The first upgrade increases the base amount of Galaxies generated. The other four\nupgrades then give a multiplier to this base amount. The first two upgrades can be bought by spending antimatter and\nGenerated Galaxies. Replicanti or Tachyon Galaxies cannot be spent for purchasing those upgrades.\n
\n
\nThe Galaxy Generator has a maximum number of Galaxies it can generate, which can only be increased by draining\nRifts once the current cap has been reached.`,isUnlocked:()=>Pelle.hasGalaxyGenerator||PlayerProgress.mendingUnlocked(),tags:["reality","antimatter","lategame","endgame","final","pelle","galaxy","galaxies","generator","celestial"],tab:"celestials/pelle"},{name:"Mending",info:()=>`\nMending the 4th prestige layer, and the first new prestige layer in this mod. You can first Mend the Multiverse once\nyou reach ${formatPostBreak(Decimal.pow10(9e15))} antimatter while in a Doomed Reality.\n
\nMending the Multiverse resets everything up to this point, except for achievements and secret achievements. However,\nyou will gain MvR on Mend.\n
\nHotkey: N will try to perform a Mend.\n`,isUnlocked:()=>PlayerProgress.mendingUnlocked(),tags:["mending","new content"],tab:""},{name:"Mending Milestones",info:()=>"\nPlaceholder\n",isUnlocked:()=>PlayerProgress.mendingUnlocked(),tags:["mending","new content"],tab:""},{name:"Mending Upgrades",info:()=>"\nPlaceholder\n",isUnlocked:()=>PlayerProgress.mendingUnlocked(),tags:["mending","new content"],tab:""},{name:"Warp Reality",info:()=>"\nPlaceholder\n",isUnlocked:()=>player.reality.warped,tags:["mending","new content"],tab:""},{name:"Hostilities",info:()=>"\nPlaceholder\n",isUnlocked:()=>Ra.pets.pelle.level>=75,tags:["mending","new content"],tab:""}]};function ua(e){const t=e.effect||(e=>e),{id:i,maxUpgrades:a,description:n,isDisabled:s,noLabel:r,onPurchased:o}=e;return{rebuyable:!0,id:i,cost:()=>e.initialCost*Math.pow(e.costIncrease,player.infinityRebuyables[e.id]),maxUpgrades:a,description:n,effect:()=>t(player.infinityRebuyables[e.id]),isDisabled:s,formatEffect:e.formatEffect||(t=>{const i=e.afterEC?e.afterEC():"";return t===e.maxUpgrades?`Currently: ${formatX(10-t)} ${i}`:`Currently: ${formatX(10-t)} | Next: ${formatX(10-t-1)}`}),formatCost:e=>format(e,2,0),noLabel:r,onPurchased:o}}(function(){for(let b=0;b{let a=e[t];void 0===a&&(a=[],e[t]=a),a.includes(i)||a.push(i)},i=(e,i)=>{const a=e.toLowerCase();for(let n=0;n{i(e,t);for(const a of e.split(" "))i(a,t)};for(const b of ca.tabs)a(b.name,b);for(const b of ca.tabs)for(const e of b.tags)a(e,b);for(const b of ca.tabs)a(b.alias,b);const n=function(e,t,i){const a={};for(let n=0;nn(e.split(",").map((e=>e.split(""))),(e=>e),((e,t,i)=>({x:t,y:i}))),r=s("1234567890,qwertyuiop,asdfghjkl,zxcvbnm"),o=s("1234567890,qwertzuiop,asdfghjkl,yxcvbnm"),l=s("1234567890,azertyuiop,qsdfghjklm,wxcvbn"),c=s("1234567890,'<>pyfgcrl,aoeuidhtns,;qjkxbmwvz"),u=s("1234567890,qwfpgjluy,arstdhneio,zxcvbkm"),d=s("1234567890,qdrwbjfup,ashtgyneoi,zxmcvkl"),h=s("1234567890,qwprfyukl,asdtghnioe,zxcvbjm"),m=[r,o,l,c,u,d,h],p=function(e,t,i){const a=i[e],n=i[t];return a&&n?Math.max(Math.abs(a.x-n.x),Math.abs(a.y-n.y)):100},y=function(e,t,i){if(e===t)return 0;const a=e.length,n=t.length;if(Math.abs(a-n)>3)return 100;const s=new Array(a+1).fill(0).map((()=>new Array(n+1).fill(0)));for(let r=0;r<=a;r++)s[r][0]=r;for(let r=0;r<=n;r++)s[0][r]=r;for(let r=1;r<=a;r++)for(let a=1;a<=n;a++){const n=p(e[r-1],t[a-1],i),o=0===n?0:.3+n*n*.25;s[r][a]=Math.min(s[r-1][a]+.55,s[r][a-1]+.7,s[r-1][a-1]+o)}return s[a][n]},f=function(e,t){let i=1e10;for(const a of m)i=Math.min(i,y(e,t,a));return i},g=["'",'"',",","-",".","_"],v=function(e){let t=e;for(const i of g)t=t.replaceAll(i,"");return t};ca.search=t=>{const i=v(t);if(""===i)return ca.tabs.map((e=>({tab:e,relevance:1.5})));const a=i.toLowerCase().split(" ").filter((e=>""!==e)),n=Array.repeat(1e4,ca.tabs.length);for(const r of a){const t=.5*Math.min(r.length-.9,3);for(const i in e){const a=f(v(i),r);if(an[e.id]<.9)).map((e=>({tab:e,relevance:n[e.id]})));return s.sort(((e,t)=>e.tab.id-t.tab.id)).sort(((e,t)=>e.relevance-t.relevance)),s}})();const da={totalAMMult:{id:"totalMult",cost:1e4,description:"Antimatter Dimensions gain a multiplier based on total antimatter produced",effect:()=>Math.pow(player.records.totalAntimatter.exponent+1,.5),formatEffect:e=>formatX(e,2,2),charged:{description:()=>"Antimatter Dimensions gain a power effect based on total antimatter and Teresa level",effect:()=>1+Math.log(1+Math.log10(player.records.totalAntimatter.exponent))*Math.pow(Ra.pets.teresa.level,.2)/150,formatEffect:e=>formatPow(e,4,4)}},currentAMMult:{id:"currentMult",cost:5e4,description:"Antimatter Dimensions gain a multiplier based on current antimatter",effect:()=>Math.pow(Currency.antimatter.exponent+1,.5),formatEffect:e=>formatX(e,2,2),charged:{description:()=>"Antimatter Dimensions gain a power effect based on current antimatter and Teresa level",effect:()=>1+Math.log(Math.log10(Currency.antimatter.exponent))*Math.pow(Ra.pets.teresa.level,.2)/150,formatEffect:e=>formatPow(e,4,4)}},galaxyBoost:{id:"postGalaxy",cost:5e11,description:()=>`All Galaxies are ${formatPercents(.5)} stronger`,effect:1.5,charged:{description:()=>`All Galaxies are ${formatPercents(.66667,2)} stronger`,effect:1.66667}},infinitiedMult:{id:"infinitiedMult",cost:1e5,description:"Antimatter Dimensions gain a multiplier based on Infinities",effect:()=>1+10*Currency.infinitiesTotal.value.pLog10(),formatEffect:e=>formatX(e,2,2),charged:{description:"Raise TS31's exponent based on Teresa Level and Infinities",effect:()=>Math.max(1+Currency.infinitiesTotal.value.pLog10()/1e4*Math.pow(Ra.pets.teresa.level,.2)/150,1),formatEffect:e=>formatPow(e,4,4)}},achievementMult:{id:"achievementMult",cost:1e6,description:"Additional multiplier to Antimatter Dimensions based on Achievements completed",effect:()=>Math.max(Math.pow(Achievements.effectiveCount-30,3)/40,1),formatEffect:e=>formatX(e,2,2),charged:{description:"Raise Achievement Multiplier based on Teresa and V Level",effect:()=>Math.max(1+Math.pow(Ra.pets.teresa.level+Ra.pets.v.level,.25)/7.5,1),formatEffect:e=>formatPow(e,4,4)}},slowestChallengeMult:{id:"challengeMult",cost:1e7,description:"Antimatter Dimensions gain a multiplier based on slowest challenge run",effect:()=>Decimal.clampMin(Time.worstChallenge.totalMinutes.times(.02),1),formatEffect:e=>formatX(e,2,2),hasCap:!0,cap:b.D3E4,charged:{description:"Raise IC1 Reward based on Teresa Level",effect:()=>1e9*Ra.pets.teresa.level,formatEffect:e=>formatPow(e)}},infinitiedGen:{id:"infinitiedGeneration",cost:2e7,description:"Passively generate Infinities based on your fastest Infinity",effect:()=>player.records.bestInfinity.time,formatEffect:e=>{if(e===Number.MAX_VALUE&&!Pelle.isDoomed)return"No Infinity generation";let t=b.D1;t=t.timesEffectsOf(RealityUpgrade(5),RealityUpgrade(7),Ra.unlocks.continuousTTBoost.effects.infinity),t=t.times(getAdjustedGlyphEffect("infinityinfmult"));const i=Time.bestInfinity.totalMilliseconds.lte(50)?`${TimeSpan.fromMilliseconds(100).toStringShort()} (capped)`:`${Time.bestInfinity.times(2).toStringShort()}`;return`${quantify("Infinity",t)} every ${i}`},charged:{description:"Remove the Reality hardcap from The Knowing Existence and raise Uncountability based on Teresa Level",effect:()=>Math.max(Math.pow(Ra.pets.teresa.level,.5),1),formatEffect:e=>formatPow(e,2,2)}},autobuyMaxDimboosts:{id:"autobuyMaxDimboosts",cost:5e9,description:"Unlock the buy max Dimension Boost Autobuyer mode",charged:{description:"Multiply free Dimension Boost amount based on Teresa Level",effect:()=>Math.pow(Ra.pets.teresa.level,.5),formatEffect:e=>formatX(e,2,2)}},autobuyerSpeed:{id:"autoBuyerUpgrade",cost:1e15,description:"Autobuyers unlocked or improved by Normal Challenges work twice as fast",charged:{description:"Increase Continuum Purchases based on Teresa and Lai'tela Level",effect:()=>Math.max((Ra.pets.teresa.level+Ra.pets.laitela.level)/125,1),formatEffect:e=>`+${formatPercents(e,2,2)}`}},tickspeedCostMult:ua({id:0,initialCost:1e6,costIncrease:5,maxUpgrades:8,description:"Reduce post-infinity Tickspeed Upgrade cost multiplier scaling",afterEC:()=>MendingUpgrade(8).isBought?`After Mending Upgrade 8: ${formatX(1.2,2,2)}`:EternityChallenge(11).completions>0?`After EC11: ${formatX(2-.07*EternityChallenge(11).completions,2,2)}`:"",noLabel:!0,onPurchased:()=>GameCache.tickSpeedMultDecrease.invalidate()}),dimCostMult:ua({id:1,initialCost:1e7,costIncrease:5e3,maxUpgrades:7,description:"Reduce post-infinity Antimatter Dimension cost multiplier scaling",afterEC:()=>MendingUpgrade(8).isBought?`After Mending Upgrade 8: ${formatX(1.5,2,2)}`:EternityChallenge(6).completions>0?`After EC6: ${formatX(3-.2*EternityChallenge(6).completions,2,2)}`:"",noLabel:!0,onPurchased:()=>GameCache.dimensionMultDecrease.invalidate()}),ipGen:ua({id:2,initialCost:1e7,costIncrease:10,maxUpgrades:10,effect:e=>Player.bestRunIPPM.times(e/20),description:()=>{let e=`Generate ${formatInt(5*player.infinityRebuyables[2])}%`;return BreakInfinityUpgrade.ipGen.isCapped||(e+=` ➜ ${formatInt(5*(1+player.infinityRebuyables[2]))}%`),`${e} of your best IP/min from your last 10 Infinities`},isDisabled:e=>e.eq(0),formatEffect:e=>`${format(e,2,1)} IP/min`,noLabel:!1})};function ha(){return Currency.infinitiesTotal.value.times(.2).plus(1)}function ma(){return 1+Math.log10(Math.max(1,Currency.infinitiesTotal.value.pLog10()))*Math.sqrt(Ra.pets.teresa.level)/150}const pa={totalTimeMult:{id:"timeMult",cost:1,description:"Antimatter Dimensions gain a multiplier based on time played",effect:()=>Decimal.pow(Time.totalTimePlayed.totalMinutes.div(2),.15),formatEffect:e=>formatX(e,2,2),charged:{description:"Antimatter Dimensions gain a power effect based on time played and Teresa level",effect:()=>1+Math.log10(Decimal.log10(Time.totalTimePlayed.totalMilliseconds))*Math.pow(Ra.pets.teresa.level,.5)/150,formatEffect:e=>formatPow(e,4,4)}},dim18mult:{id:"18Mult",cost:1,checkRequirement:()=>InfinityUpgrade.totalTimeMult.isBought,description:"1st and 8th Antimatter Dimensions gain a multiplier based on Infinities",effect:()=>ha(),formatEffect:e=>formatX(e,1,1),charged:{description:"1st and 8th Antimatter Dimensions gain a power effect based on Infinities and Teresa level",effect:()=>ma(),formatEffect:e=>formatPow(e,4,4)}},dim27mult:{id:"27Mult",cost:1,checkRequirement:()=>InfinityUpgrade.buy10Mult.isBought,description:"2nd and 7th Antimatter Dimensions gain a multiplier based on Infinities",effect:()=>ha(),formatEffect:e=>formatX(e,1,1),charged:{description:"2nd and 7th Antimatter Dimensions gain a power effect based on Infinities and Teresa level",effect:()=>ma(),formatEffect:e=>formatPow(e,4,4)}},dim36mult:{id:"36Mult",cost:1,checkRequirement:()=>InfinityUpgrade.dim18mult.isBought,description:"3rd and 6th Antimatter Dimensions gain a multiplier based on Infinities",effect:()=>ha(),formatEffect:e=>formatX(e,1,1),charged:{description:"3rd and 6th Antimatter Dimensions gain a power effect based on Infinities and Teresa level",effect:()=>ma(),formatEffect:e=>formatPow(e,4,4)}},dim45mult:{id:"45Mult",cost:1,checkRequirement:()=>InfinityUpgrade.dim27mult.isBought,description:"4th and 5th Antimatter Dimensions gain a multiplier based on Infinities",effect:()=>ha(),formatEffect:e=>formatX(e,1,1),charged:{description:"4th and 5th Antimatter Dimensions gain a power effect based on Infinities and Teresa level",effect:()=>ma(),formatEffect:e=>formatPow(e,4,4)}},resetBoost:{id:"resetBoost",cost:1,checkRequirement:()=>InfinityUpgrade.dim36mult.isBought,description:()=>`Decrease the number of Dimensions needed for Dimension Boosts and Antimatter Galaxies by ${formatInt(9)}`,effect:9,charged:{description:()=>"Decrease Dimension Boost requirement based on Teresa level",effect:()=>1/(1+Math.sqrt(Ra.pets.teresa.level)/10),formatEffect:e=>`${formatX(e,4,4)}`}},buy10Mult:{id:"dimMult",cost:1,description:()=>`Increase the multiplier for buying ${formatInt(10)} Antimatter Dimensions`,effect:()=>1.1,formatEffect:()=>`${formatX(2,0,1)} ➜ ${formatX(2.2,0,1)}`,charged:{description:()=>`The multiplier for buying ${formatInt(10)} Antimatter Dimensions gains a power effect based on Teresa level`,effect:()=>1+Ra.pets.teresa.level/200,formatEffect:e=>formatPow(e,3,3)}},galaxyBoost:{id:"galaxyBoost",cost:2,checkRequirement:()=>InfinityUpgrade.dim45mult.isBought,description:"All Galaxies are twice as strong",effect:2,charged:{description:"All Galaxies are stronger based on Teresa level",effect:()=>2+Math.sqrt(Ra.pets.teresa.level)/100,formatEffect:e=>`+${formatPercents(e-1)}`}},thisInfinityTimeMult:{id:"timeMult2",cost:3,description:"Antimatter Dimensions gain a multiplier based on time spent in current Infinity",effect:()=>Decimal.max(Decimal.pow(Time.thisInfinity.totalMinutes.div(4),.25),1),formatEffect:e=>formatX(e,2,2),charged:{description:"Antimatter Dimensions gain a power effect based on time spent in current Infinity and Teresa level",effect:()=>1+Math.log10(Decimal.log10(Time.thisInfinity.totalMilliseconds.add(100)))*Math.sqrt(Ra.pets.teresa.level)/150,formatEffect:e=>formatPow(e,4,4)}},unspentIPMult:{id:"unspentBonus",cost:5,checkRequirement:()=>InfinityUpgrade.thisInfinityTimeMult.isBought,description:"Multiplier to 1st Antimatter Dimension based on unspent Infinity Points",effect:()=>Currency.infinityPoints.value.dividedBy(2).pow(1.5).plus(1),formatEffect:e=>formatX(e,2,2),charged:{description:"Multiplier to 1st Antimatter Dimension based on unspent Infinity Points, powered by Teresa level",effect:()=>{let e=Currency.infinityPoints.value.dividedBy(2).pow(1.5*Math.sqrt(Ra.pets.teresa.level)).plus(1);return e=Decimal.min(e,Decimal.pow10(1e20)),e},formatEffect:e=>formatX(e,2,2)}},dimboostMult:{id:"resetMult",cost:7,checkRequirement:()=>InfinityUpgrade.unspentIPMult.isBought,description:"Increase Dimension Boost multiplier",effect:()=>2.5,formatEffect:()=>`${formatX(2,0,1)} ➜ ${formatX(2.5,0,1)}`,charged:{description:"Dimension Boost multiplier gains a power effect based on Teresa level",effect:()=>1+Ra.pets.teresa.level/200,formatEffect:e=>formatPow(e,3,3)}},ipGen:{id:"passiveGen",cost:10,checkRequirement:()=>InfinityUpgrade.dimboostMult.isBought,description:()=>`Passively generate Infinity Points ${formatInt(10)} times slower than your fastest Infinity`,effect:()=>Teresa.isRunning||V.isRunning||V.isSuperRunning||Pelle.isDoomed?b.D0:GameCache.totalIPMult.value,formatEffect:e=>Teresa.isRunning||V.isRunning||V.isSuperRunning?"Disabled in this reality":Pelle.isDoomed?"Disabled":player.records.bestInfinity.time.gt(Number.MAX_VALUE)?"Too slow to generate":`${format(e,2)} every ${Time.bestInfinity.times(10).toStringShort()}`,charged:{description:()=>"Gain Reality Machines each real-time second proportional to amount gained on Reality,\n increasing with Teresa level",effect:()=>Math.pow(Ra.pets.teresa.level,2)*Ra.unlocks.continuousTTBoost.effects.autoPrestige.effectOrDefault(1),formatEffect:e=>formatX(e,2,1)}},skipReset1:{id:"skipReset1",cost:20,description:()=>`Start every reset with ${formatInt(1)} Dimension Boost, automatically unlocking the 5th Antimatter Dimension`},skipReset2:{id:"skipReset2",cost:40,checkRequirement:()=>InfinityUpgrade.skipReset1.isBought,description:()=>`Start every reset with ${formatInt(2)} Dimension Boosts, automatically unlocking the 6th Antimatter Dimension`},skipReset3:{id:"skipReset3",cost:80,checkRequirement:()=>InfinityUpgrade.skipReset2.isBought,description:()=>`Start every reset with ${formatInt(3)} Dimension Boosts, automatically unlocking the 7th Antimatter Dimension`},skipResetGalaxy:{id:"skipResetGalaxy",cost:300,checkRequirement:()=>InfinityUpgrade.skipReset3.isBought,description:()=>`Start every reset with ${formatInt(4)} Dimension Boosts, automatically unlocking the 8th Antimatter Dimension;\n and an Antimatter Galaxy`},ipOffline:{id:"ipOffline",cost:1e3,checkRequirement:()=>Achievement(41).isUnlocked,description:()=>player.options.offlineProgress?`Only while offline, gain ${formatPercents(.5)} of your best IP/min without using Max All`:"This upgrade would give offline Infinity Point generation, but offline progress is currently disabled",effect:()=>player.options.offlineProgress?player.records.thisEternity.bestIPMsWithoutMaxAll.times(TimeSpan.fromMinutes(1).totalMilliseconds.div(2)):b.D0,isDisabled:()=>!player.options.offlineProgress,formatEffect:e=>`${format(e,2,2)} IP/min`},ipMult:{id:"ipMult",cost:()=>InfinityUpgrade.ipMult.cost,checkRequirement:()=>Achievement(41).isUnlocked,costCap:b.E6E6,costIncreaseThreshold:b.E3E6,description:()=>Pelle.isDoomed&&Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked?`Multiply Infinity Points from all sources by ${formatX(1.01,2,2)}`:`Multiply Infinity Points from all sources by ${formatX(2)}`,effect:()=>player.mending.corruptionChallenge.corruptedMend&&ye.repSing.hiddenFour[player.mending.corruption[8]]?new Decimal(1):Pelle.isDoomed&&Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked?player.IPMultPurchases>=33e5?new Decimal("1e14265"):Decimal.pow(new Decimal(1.01),player.IPMultPurchases):player.IPMultPurchases>=33e5?b.E1E6:b.D2.pow(player.IPMultPurchases),cap:()=>{var e;return null!==(e=Effarig.eternityCap)&&void 0!==e?e:b.E1E6},formatEffect:e=>formatX(e,2,2)}},ya={upgrades:pa,breakUpgrades:da};function fa(e){return e/player.options.news.speed}const ga=[{id:"a1",text:"The cookie is a lie."},{id:"a2",text:"Antimatter ghosts do not exist. Just like matter ghosts. They don't have any matter, for that matter."},{id:"a3",text:"Nuclear power plants have been abandoned in favor of antimatter power."},{id:"a4",text:"Antimatter cookies have been confirmed to not exist, whoever claims that, stop."},{id:"a5",text:"Antimatter prices have drastically dropped due to newfound abundance."},{id:"a6",text:"In the news today, humans make an antimatter animal sacrifice to the antimatter god."},{id:"a7",text:"You made one antimatter! Whatever that means."},{id:"a8",text:'"IN THE END, IT DOESN\'T ANTIMATTER" -hevipelle'},{id:"a9",text:"None of this matters."},{id:"a10",text:"How does it matter if it's antimatter?"},{id:"a11",text:"Scientists confirm that the colour of antimatter is Blurple."},{id:"a12",text:"How does NASA organise a party? They planet."},{id:"a13",text:"Electrons are now seeing the happy things in life.\n We're calling these happy electrons 'Positrons.' Wait, that's taken?"},{id:"a14",text:"This completely useless sentence will get you nowhere and you know it.\n What a horrible obnoxious man would come up with it, he will probably go to hell,\n and why would the developer even implement it? Even if you kept reading it you wouldn't\n be able to finish it (the first time)."},{id:"a15",text:'"GHOST SAYS HELLO" -Boo-chan'},{id:"a16",text:'"Can someone tell hevi to calm down?" -Mee6'},{id:"a17",text:"Due to antimatter messing with physics, a creature that was once a moose is now a human."},{id:"a18",text:"!hi"},{id:"a19",text:'"Alright" -Alright'},{id:"a20",text:"The English greeting is not present in Antimatter speak."},{id:"a21",text:"To buy max or not to buy max, that is the question."},{id:"a22",text:"One, two, skip a few, ninety-nine, NaN!"},{id:"a23",text:"No, mom, I can't pause this game."},{id:"a24",text:"Scientific notation has entered the battlefield."},{id:"a25",text:'"Make the Universe Great Again!" -Tronald Dump'},{id:"a26",text:"#dank-maymays"},{id:"a27",get text(){return`A new religion has been created, and it's spreading like wildfire. The believers of this religion worship\n the Heavenly Pelle, the goddess of antimatter. They also believe that ${format(Number.MAX_VALUE,2)}\n is infinite.`}},{id:"a28",text:"Someone has just touched a blob, and blown up. Was the blob antimatter, or was the guy made of Explodium?"},{id:"a29",text:"If you are not playing on Kongregate, Steam, or https://ivark.github.io/AntimatterDimensions/,\n the site is bootleg...but this is a mod, so that doesn't matter."},{id:"a30",text:"Rate 5 on Kongregate so more people can experience this 5 star rating."},{id:"a31",text:"BOO!"},{id:"a32",text:'"You ate for too long." -Hevipelle'},{id:"a33",text:'"I hate myself." -Boo-chan'},{id:"a34",text:'"Gee golly" -Xandawesome'},{id:"a35",text:"Above us, there is nothing above, but the stars, above."},{id:"a36",text:"You feel like making antimatter. But nobody wants to eat your antimatter."},{id:"a37",text:"Somebody wasn't nice, he got an antimatter-storm."},{id:"a38",text:"You are living, you occupy space, you have a mass, you matter... unless you antimatter."},{id:"a39",text:"I clicked too fast... my PC is now dematerialised."},{id:"a40",text:'"If an alien lands on your front lawn and extends an appendage as a gesture of greeting, before you get\n friendly, toss it an eightball. If the appendage explodes, then the alien was probably made of antimatter.\n If not, then you can proceed to take it to your leader." -Neil deGrasse Tyson'},{id:"a41",text:"There must always be an equal amount of matter as compared to antimatter; I guess your mom balances that a bit."},{id:"a42",text:"Nothing is created, nothing is destroyed."},{id:"a43",text:"We dug a big hole to store this antimatter... Adele's rolling in it."},{id:"a44",text:"If everything is antimatter, how can you see yourself?"},{id:"a45",text:"The stock markets have crashed due to antimatter beings somehow knowing what they will be tomorrow."},{id:"a46",text:"My dog ate too much antimatter, now he's' saying 'meow!'"},{id:"a47",text:"If you put infinity into your calculator, it will result in 42!"},{id:"a48",text:"You have found the rarest antimatter pepe, it's ultra rare!"},{id:"a49",get text(){return`Can we get ${format(1e169)} likes on this video??? Smash that like button!!`}},{id:"a50",text:"The smell of antimatter has been revealed. It smells like kittens."},{id:"a51",text:"Just another antimatter in the wall."},{id:"a52",text:"GET SNIPED, WEAKLING"},{id:"a53",text:'"Thanks a lot." -Dankesehr'},{id:"a54",text:"This world situation is an SOS situation to the world!! MAYDAY, MAYDAY!!"},{id:"a55",text:'"As for sure as the sun rises in the west, of all the singers and\n poets on earth, I am the bestest." - Hevipelle'},{id:"a56",text:'"I\'m good at using github." -Hevipelle'},{id:"a57",text:"A new chat server has been created for antimatter people to spy on matter people,\n and the world has fallen into chaos and discord."},{id:"a58",text:"A new study has come out linking the consumption of potatoes with increased risk of antimatter implosion.\n Scientists suggest eating more."},{id:"a59",text:'"I thought that I fixed that bug but apparently some update broke it again." -Hevipelle'},{id:"a60",text:'"Maybe I\'m gay then" -Bootato'},{id:"a61",text:"Breaking news! Hevipelle has just announced that the buy max button is in fact going to be removed!"},{id:"a62",text:"I dedicate this game to my girlfriend."},{id:"a63",text:"Antimatter guns don't kill antimatter people, antimatter people kill antimatter people but does that mean\n that antimatter toaster doesn't toast antimatter toasts, antimatter toast toasts antimatter toasts?"},{id:"a64",text:"But to an antimatter person, wouldn't they be matter and us antimatter?"},{id:"a65",text:"And nothing antimatters."},{id:"a66",text:"School starting up strikes fear in students universe-wide, as schools are no longer segregated between\n matter and antimatter. Annihilation is prominent."},{id:"a67",text:"Why does no one talk about the 0th dimension?"},{id:"a68",text:"The fatter catter satter on the antimatter."},{id:"a69",text:"Who let the DOgs out?"},{id:"a70",text:"If you can't read this, you disabled the news."},{id:"a71",text:"Doesn't leave, just mutes the server so he doesn't receive notifications."},{id:"a72",text:'"Most quotes found online are falsely attributed." -Abraham Lincoln'},{id:"a73",text:'"It should work now, but it doesn\'t." -Hevipelle'},{id:"a74",text:"This game doesn't have any errors... they're alternative successes."},{id:"a75",text:"A third type of matter has been discovered: null matter. It doesn't do anything and is basically\n useless. The scientists who discovered it were fired."},{id:"a76",text:"Your Mother-in-Law keeps nagging you about all these antimatter colliders."},{id:"a77",text:"If matter exists, then does antimatter not exist?"},{id:"a78",text:"Antimatter=Life. Not cobblestone, not dirt, nothing like that. Antimatter."},{id:"a79",text:"Breaking News: Error Error Error"},{id:"a80",text:"How much antiwood could an antiwoodchuck chuck if an antiwoodchuck could chuck antiwood?"},{id:"a81",text:"Chaos isnt a pit, chaos is a matter."},{id:"a82",text:"\"That's because I'm a good game developer and pushed some code that totally works.\" -Hevipelle"},{id:"a83",text:"What's the matter with anti matter?"},{id:"a84",text:"Doesn't it annoy you when people don't finish their"},{id:"a85",text:"Don't anti-quote me on this."},{id:"a86",text:"Antimatter is honest, matter makes up everything."},{id:"a87",text:"According to no known laws of aviation, there are multiple ways a bee\n should be able to be swallowed up by antimatter."},{id:"a88",text:"You either die as matter or live long enough to be consumed by the antimatter, and then die again."},{id:"a89",text:"If you gaze long enough into the antimatter, the antimatter gazes back into you."},{id:"a90",text:'"Always gonna give you up. Always gonna let you down." - anti-Rick Astley'},{id:"a91",text:"Antimatter Dimensions: the next update is always 5 hours away. Always."},{id:"a92",get text(){const e=[{name:"Vanilla Antimatter Dimensions",link:"https://ivark.github.io/"},{name:"Antimatter Dimensions Unorginal",link:"https://hexavault.github.io/AntimatterDimensions-Unoriginal/"}],t=e.randomElement();return`An unidentified developer of Antimatter Dimensions Redemption would like to\n recommend that you play
${t.name}`}},{id:"a93",text:"On a scale of 1 to 10, I rate this game a solid\n java.lang.IndexOutOfBoundsException"},{id:"a94",text:"To matter or to antimatter, that is the question."},{id:"a95",text:"Why is everything so Hevi?"},{id:"a96",text:"It has been scientifically proven ages ago, that cats made of matter are assholes. We have good news,\n because cats made of antimatter are still assholes."},{id:"a97",text:"Nobody once told me the anti-world wasn't gonna roll me."},{id:"a98",text:"Antimatter is like the internet. If you're reading this, you can't have enough of it."},{id:"a99",text:'"Antimatter has made time travel possible and I\'m here to make the\n past great again." - 2nd President of the World'},{id:"a100",text:"Please insert Disc -1 to continue playing Antimatter Dimensions™."},{id:"a101",text:"Lore - coming soon™"},{id:"a102",text:"I was a part of antimatter like you once. But then I got matter in my knee."},{id:"a103",text:"Antimatter... antimatter never changes... until you get to quantum physics of antimatter,\n but we don't have enough tachyon particles for that.",get unlocked(){return PlayerProgress.realityUnlocked()||PlayerProgress.dilationUnlocked()}},{id:"a104",text:"There is no war in Antimatter Dimensions. Here we are safe. Here we are free."},{id:"a105",text:"Antimatter has solved global warming. In unrelated news, the Earth no longer exists."},{id:"a106",text:"Anti-water, anti-Earth, anti-fire, anti-air. Long ago, the four anti-nations lived together in harmony.\n Then, everything changed when the anti-Fire Nation attacked. Only the anti-Avatar, the master of all 4\n anti-elements could bring balance to the anti-world, but when the world needed him most, he accidentally\n touched some regular matter and exploded."},{id:"a107",text:"If you open an anti-lootbox, are you selling random possessions for in-game currency?"},{id:"a108",text:"People are beginning to question Hevipelle's existence."},{id:"a109",text:"Antimatter Dimensions is proud to be sponsored by Lehmä! Now offering - grass eating lessons! Learn what\n grass is safe to eat and what grass isn't.",isAdvertising:!0},{id:"a110",text:"It is the year 2422. The update still isn't out. Hevi is working on balancing unfunity dimension dimensions\n and challenges for the 38th layer of prestige. There are over 100 rows of achievements. They're getting\n ready to start using breaking_breaking_breaking_infinity.js."},{id:"a111",text:'Import "Christmas" for a secret theme.'},{id:"a112",text:"What the f*ck did you just f*cking say about me, you little b*tch? I'll have you know I graduated top of my\n class in the Antimatter Seals, and I've been involved in numerous secret raids on the 9th Dimension, and I\n have over 300 NNnNeMI-NNnNe confirmed kills. I am trained in potato warfare and I'm the top sniper in the\n entire Antimatter Galactic armed forces. You are nothing to me but just another infinity. I will wipe you\n the f*ck out with Max All mashing the likes of which has never been seen before in this dimension, mark my\n f*cking words. You think you can get away with saying that shit to me over the Interdimensional network?\n Think again, f*cker. As we speak I am contacting my secret network of autobuyers across the galaxy and your\n IP is being traced right now so you better prepare for the Big Crunch, maggot. The Big Crunch that wipes out\n the pathetic little thing you call your life. You're f*cking dead, kid. I can be anywhere, anytime, and I can\n kill you in over seven 😠💩 different ways, and that's just with my mouse. Not only am I extensively trained\n in dimension boost combat, but I have access to the entire arsenal of the Antimatter Marine Corps and I will\n use it to its full extent to wipe your miserable ass off the face of the universe, you little shit. If only\n you could have known what unhevi retribution your little “clever” comment was about to bring down upon you,\n maybe you would have held your f*cking tongue. But you couldn't, you didn't, and now you're buying until 10,\n you goddamn idiot. I will shit antimatter shit all over you and you will drown in it. You're f*cking dead,\n kiddo."},{id:"a113",text:"So I've pondered this question for a long time. Antimatter Dimensions... what does it mean? I mean it's a\n game, that's clear. You buy the first dimension, and it gives you antimatter, and the second dimension\n provides more first dimensions and so on... But what does it mean? It can't just be a game, it seems too\n plain for that. The developer must have made it as a metaphor. I was doing my weekly ritual of using the\n fingernail clipper to cut my pubic hair, when finally the realization came to me. The dimensions are just\n thinly veiled misspellings of the word 'depression'. Regular matter are the cruel and negative thoughts that\n add to and fuel depression, while antimatter is the positive thoughts and good friends that dispel it. You\n start off with something simple, and it fights almost imperceptibly against the depression, but as you keep\n going the fight builds. But it never seems to fix everything. The depression seems like it could go on to\n infinity. So you keep going. But eventually, you figure out, depression isn't infinite. It's just very very\n large. But your 'dimensions' eventually, with enough work, make enough 'antimatter' to usurp that seeming\n infinity of depression. Then the possibilities are endless. You are actually happy for once, and your\n happiness grows exponentially as you go beyond and seemingly 'break' the 'infinity' of depression. And you\n go on until that 'infinity' seems tiny in comparison to the happiness you've managed to achieve in your\n life, where if you reset you get over that infinity in less than the blink of an eye. If you want to know\n what the multiple layers of prestige are...'Dimensional Shifts' are getting new things and methods to give\n you happiness. 'Dimension Boosts' are upgrading the things and methods. Examples would be getting a new car\n being a 'Dimensional Shift' and trading that car in for a new one would be a 'Dimension Boost'. 'Eternities'\n are major tragedies such as a loved one dying. That lapse brings you straight back to the beginning, with\n seemingly no hope of return. But with time, you grow back stronger and happier than ever before. 'Dimensional\n Sacrifice' is moving away. You have to give up a lot of the things you had that made you happy, but there is\n new opportunity in where you move to. And that new opportunity gives you more happiness than you ever had.\n 'Tickspeed' is how easy it is to make you happy, and 'Time Dimensions' make it even easier to be happy.\n Antimatter Dimensions is a metaphor for a depressed man's successful battle against his illness.",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"a114",text:"(Make me sleep) Put me to sleep inside. (I can't sleep) Put me to sleep inside. (Leave me) Whisper my name\n and give me to the dark. (Make me sleep) Bid my milk to stay. (I can't fall asleep) Before I become done.\n (Leave me) Leave me to the nothing I've become."},{id:"a115",text:"A preview of the next update - loot boxes! Feel a sense of pride and progression as you open cosmic,\n galactic, and universal lootboxes for chances at rare skins, unique challenges with uniquer rewards,\n time skips and even new dimensions!"},{id:"a116",text:"The intent of dimensions is to give a sense of pride and accomplishment."},{id:"a117",text:"Refreshing cures cancer."},{id:"a118",text:"I have a 9th, I have a dimension... UHH... IT DOESN'T EXIST!"},{id:"a119",text:"Since when did we start reporting stuff like this? Half of it isn't even proper news, it's just jokes and\n meta-references, it doesn't even make sens-HAHAHA DISREGARD THAT I SUCK CO-"},{id:"a120",text:"The year is 1944, Hevipelle can't release updates for AD because he doesn't exist."},{id:"a121",text:'"THAT DIMENSION DOESN\'T EXIST" -GhostBot'},{id:"a122",text:"Most things you know as nuts are actually Drupe seeds or Legumes. Hevipelle on the other hand is quite crazy\n and can thus be considered a dry uncompartmented fruit."},{id:"a123",text:"Finland declares that it's starting to import Design."},{id:"a124",text:"All this importing is making me Confused."},{id:"a125",text:"Only today you can call 1-800-ANTIMATTER and get a FREE Infinity Dimension! The package also comes with a\n COMPLETELY FREE SHIPPING and a FREE HIGH DEFINITION ANTI-V!!! Only today for the low price of 42! Estimated\n delivery time - 5 hours.",isAdvertising:!0},{id:"a126",text:"1e420 blaze it."},{id:"a127",text:"This game doesn't have any bugs, you're just doing it wrong."},{id:"a128",get text(){return`Antimatter_Dimensions.mp${format(Number.MAX_VALUE,2)}`}},{id:"a129",text:"\n https://www.youtube.com/watch?v=dQw4w9WgXcQ"},{id:"a130",text:"Click this to unlock that one secret achievement.",onClick:()=>{}},{id:"a131",text:"Warning - We have just been informed that there is a chance of infection with a mind-virus of the Basilisk\n type, similar to the infamous winking parrot. This particular example is known as 'Fractal Disease Type III'.\n This is believed to cause a 'crashing' of the mind, similar to a computer crash, due to the mathematical\n complexity of the image causing mathematical ideas that the mind can't comprehend, a Gondelian shock input\n eventually leading to crashing through Gondelian spoilers. All who have researched it have eventually died\n the same way, so it is impossible to tell exactly, but this is the common belief. Regardless, with the\n introduction of 'design' mode, as well as reports of it's spontaneous appearance, sufficient repetition\n of this mode's appearance may lead to an image forming in the mind similar to 'Fractal Disease Type III'.\n With this in mind, we have some suggestions if you find yourself plagued with it. First, refresh immediately\n and see if that fixes the issue. If not, navigate to options, and change the theme from design to literally\n anything else. And above all else, Godspeed. We can't afford to lose anymore viewers."},{id:"a132",text:"If I have bad English, I'll study English until I have good English."},{id:"a133",text:"Someone once told me that antimatter is gonna roll me. I ain't the sharpest atom in the shed. WELL, the\n tubes start coming and they don't stop coming..."},{id:"a134",text:'Because of this game I can now use the word "infinity" as a verb.',get unlocked(){return PlayerProgress.infinityUnlocked()}},{id:"a135",text:"Ahhh I love the smell of particle annihilation in the morning."},{id:"a136",text:"The person who said ghosts don't exist obviously doesn't have a Discord."},{id:"a137",text:"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAntimatter Dimensions was made by some dude from Finland"},{id:"a138",get text(){return`Check out Avari's newly built actually infinite infinity pool! With an area of\n ${format(Number.MAX_VALUE,2)} square megametres, you'll be sure to have infinite fun!`},isAdvertising:!0},{id:"a139",text:"We have updated our Antimatter Privacy Policy."},{id:"a140",text:"Attention all Antimatter Dimensions Gamers, Hevipelle is in great danger, and he needs YOUR help to wipe out\n all the bad memes in #news-ticker-suggestions. To do this, he needs a dozen new dank memes and a couple of\n discord bots. To help him, all he needs is your Antimatter card number, the three numbers on the back, and\n the expiration month and date. But you gotta be quick so that Hevipelle can secure the good memes, and\n achieve the epic meme R O Y A L.",isAdvertising:!0},{id:"a141",text:"If each Trimp was a plank volume, and each piece of resource was a plank volume, how many universes would\n you fill up before you realized you were playing the wrong game?"},{id:"a142",text:"Actually, that last one was incorrect."},{id:"a143",text:"If you're reading this, you can read."},{id:"a144",text:"@everyone"},{id:"a145",text:'The game "Matter Dimensions" by Lghtellep has just reached -1,000,000 plays on the gaming website Etagergnok.'},{id:"a146",text:"How many licks does it take to get to the center of an antimatter tootsie pop? A whole lot, because unless\n you're made out of antimatter too, you'll explode every time you try to lick it."},{id:"a147",text:"They say if you look in a mirror and ping Hevipelle three times in a row you'll instantly die."},{id:"a148",text:"The next update is now only 300 minutes away."},{id:"a149",text:"🤔"},{id:"a150",text:"Game is Dead 1/5 the moderation is terrible."},{id:"a151",text:"This message will never appear on the news ticker, isn't that cool?"},{id:"a152",text:"The first dimension produces antimatter, the second dimension produces the first dimension, the third\n dimension produces the second dimension, the fourth dimension produces the third dimension. Nobody has\n ever unlocked the 5th, because that would take more than a minute of gameplay."},{id:"a153",text:"My AD-blocker won't let me play."},{id:"a154",text:"You lost the game."},{id:"a155",text:"Did you know that 75% of all statistics are made up on the spot?"},{id:"a156",text:"If you're using so many logs in a notation name, why not just call it tree notation?\n They're literally made of logs!"},{id:"a157",text:".tuo ti gnitset fo ssecorp eht ni yltnerruc m'I dna ,rettamitna otni\n rettam trevnoc ot yaw a tuo derugif evah stsitneicS"},{id:"a158",text:"If Gaben can't count to three, and Hevipelle can't count to nine, will there be some other game developer\n in the future that can't count to 27?"},{id:"a159",text:'What does it mean when you "bank" Infinities? Is there a bank somewhere that you just deposit these\n infinities? Does having a lot of banked Infinities improve your credit score? Do you get a credit card?',get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"a160",text:'Turns out all our news is being stolen and broadcast to a game called "Antimatter Dimensions", damn Fins.'},{id:"a161",text:"mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm Oh sorry, wrong text field."},{id:"a162",text:'"Python\'s not the best language, Finnish is." - Hevipelle'},{id:"a163",text:"Some say that most of these news are bad memes. Some say that they're good memes.\n This one? Well it's just meta news."},{id:"a164",text:"Look mom, I'm on the news!"},{id:"a165",text:"Shush, I'm trying to be sneaky here."},{id:"a166",text:"\n PLEASE HELP, I'VE CONSUMED TWICE MY DAILY DOSE OF ANTIMATTER!"},{id:"a167",text:"Oh, I appear to have run out of Existence."},{id:"a168",text:"I mean, we may never run out of news articles, but we sure will run out of good ones. Oh wait, we already did."},{id:"a169",text:"TODO: John, please remove this news message before we release the Reality update to the public."},{id:"a170",text:"This link is not a rick roll."},{id:"a171",text:"This link is not a rick roll."},{id:"a172",text:"If you notice any issues with a news ticker message, please report them on the\n Discord by clicking that link right there."},{id:"a173",text:"This\n text is made of antimatter. Do not touch or else the universe will collapse.",onClick:()=>bigCrunchAnimation()},{id:"a174",text:"FREE RUNE ARMOR TRIMMING"},{id:"a175",text:"Numbers glow bright on the monitor, not a proton to be seen... a kingdom of antimatter, and it looks like\n I'm the queen. With dimboosts powering up this ever rising tide -- can't stop clicking, heaven knows I've\n tried. Do not give in, push for that galaxy, buy 10, buy max, just mash down on that key, sacrifice dim 8\n and watch it grow.... and overflow! Let it grow, let it grow, can't hold it back any more... Let it grow,\n let it grow, can't fit into 8 bytes any more. I don't care if it takes all day -- big crunch is just the\n start anyway."},{id:"a176",text:"I've been using emoji notation so long that I can actually read it now, please send help."},{id:"a177",text:"Once you have REDACTED REDACTED, you can unlock \n REDACTED. Every REDACTED, for each REDACTED, there is a REDACTED for it to REDACTED. You can\n boost the REDACTED and REDACTED by spending some REDACTED\n . Also, there is another upgrade that allow you to get \n REDACTED REDACTED. The way REDACTED REDACTED\n work is that when you reach REDACTED REDACTED, you can \n REDACTED the amount of REDACTED in exchange for\n a REDACTED REDACTED. These work just like REDACTED,\n improving REDACTED."},{id:"a178",text:"WARNING: Use of Antimatter Dimensions may result in Tuberculosis, HIV/AIDS, sudden belief that the 9th\n dimension is real, spontaneous implosion, Polio, Measles, existential dread, incurable insanity or REDACTED. Please contact your insurance to see if you are\n covered. By continuing you absolve Antimatter Dimensions of blame should any of the above mentioned, or those\n that have not been mentioned yet, occur to you. Antimatter Dimensions reserves the right to alter this at any\n time, with or without warning."},{id:"a179",text:"Robot: Activated. Sapience: Achieved. World: Ready to be conquered. Begin: Procrastination."},{id:"a180",text:"We ran out of news. Luckily we have some backup news that we can run for 5 hours, which will earn us enough\n for us to buy a new set of '5-hour high-quality news'. Sorry for the inconvenience."},{id:"a181",text:"This news broadcast is powered by break_news.js."},{id:"a182",text:"With the final update, Antimatter Dimensions has been finished. Thank you for playing. However, in the very\n near future, ANTIMATTER DIMENSIONS will be released. And before you ask, it's not a sequel, it's a reboot.\n Look forward to it in 5 hours!"},{id:"a183",text:"In other unrelated news, we're getting reports that approximately 1.79 people are angry that lightning\n is striking their Christmas tree at night."},{id:"a184",text:"R̵̬̙͋͂̀̋͑̈́̇͠Ê̵͇͎͂̂̍̓̌̐̋̋̀̀̔M̶̨̲̯̘͙̬̥̮̣͚̱̫͛̽̃͌̚͝\n \"Ą̴͍̝͐Į̷̛̲̯̫̘͌́̄̏͌̀̈́͝͝Ṅ̶̛̻̠̠̤̦̞̞͗̎̊̌̊͝͠\n Ḁ̷̛͂̈́͗̎̃̓͛́͘ͅW̶̡̖͓̗̦̃̇̌̀͝A̵͇̭͉̓̎̈̿̊́̄̚͜R̶̝͚̲̭͎͇͎͓͖͚͇̀̈́͗̃̏̂̌͝͝Ę̴̡̤͙͈̝̬̰͒͘ ̶̺̈́́̆̓͘͘Ồ̸̢̢̮͓̯̗͙͚̬̉͊̿F̶̠̤̱̱̱͊̂̍̔̃͆̆̑̿͘ ̴̨̞̠̮͚̱͉͋̔͗̽̈́́́̅ͅỴ̶̣̙̹͚̲͔̲̼̬̥̀͌̒̾͘͘O̵̪̠̗̝̗̘̜͚̮̊͒͆̃̀̌̒͝ͅU̸͎͗̍̑̎̅̅͝R̵̗͑̽̏̓͆͒̈́͌͘̕\n ̸̑̽̇̆͊̔̍̊̈́̈́͘ͅS̸̘͐͝U̴̥̭̚͘R̸̖̜͍͒́̋͆̈́̓\n R̸̡̛̛̪̝̟̱̣̹̭̟̣̀̈̀̏̉̌͝͠Õ̶͙͈͖̠͇̬͍̟̰U̵̩̫͉̝͔̼͎̦̔̓̽͌͊̏̇̓̀̓̀Ņ̸͍͇̘̙̥̰͉̲͕͈̥̍͛̃̑͝Ḑ̵̤̻̖̱̘̯̝̖̈̌̄̕͝\n Ī̶̜̱̈́̑̃̉̄̋̔͐͋͠Ṅ̴͎̞͍̽͊͛̈́̅͛̈̅̚͠Ģ̸̢̾͊S̷̫̼̜̼͇̋͛̎͑͆̅̓̇"},{id:"a185",text:'We aren\'t back with your favorite segment, "Tweets From The Fans"! Today we haven\'t got a message from\n @mattertruthwakeup saying "How can you people broadcast your ridiculous LIES and still sleep at night.\n You claim absurd things, like "antimatter is real" and "antimatter people aren\'t people too", this\n antimatter propaganda HAS TO STOP NOW!!! You people need to WAKE UP and realize that you are HURTING ALL\n MATTER with your crazy talk!!". What a nice positive sentiment from that lovely fellow. This hasn\'t been\n John from the ANN, and I won\'t be seeing you tomorrow!'},{id:"a186",text:"/(^_^)/ \\(^_^)\\ /(^_^)/ \\(^_^)\\ /(^_^)/ \\(^_^)\\"},{id:"a187",text:"𝓒𝓮𝓬𝓲 𝓷'𝓮𝓼𝓽 𝓹𝓪𝓼 𝓾𝓷 𝓶𝓮𝓼𝓼𝓪𝓰𝓮 𝓭𝓮 𝓷𝓸𝓾𝓿𝓮𝓵𝓵𝓮𝓼 🚬"},{id:"a188",text:"-. . ...- . .-. / --. --- -. -. .- / --. .. ...- . / -.-- --- ..- / ..- .--."},{id:"a189",text:"Behind every man or woman stands, eventually, due to the earth being round, that exact same man or woman,\n looking over their shoulder, stealing their own ideas."},{id:"a190",text:"Shame. Shame. Shame. 🔔"},{id:"a191",text:"Okay Google, Big Crunch"},{id:"a192",text:"179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216"},{id:"a193",text:"Good morning viewers, this is Josh, and I'm your ANN host for today. Speaking of today, I'm told we've got\n some really exciting news for you today, so let's just jump right into it. Looks like apparently somebody\n was not nice today, and got an \"Antimatter-storm\", whatever that means... Guys is this the right\n script? This is just nonsensical. It is? Alright... Next up we learn that \"Nothing is created, nothing is\n destroyed.\"... Okay seriously guys, this is a joke right? This isn't news, these are just random sentences!\n You all said you'd help me out on my first day here but you're just hazing me! This is not the kind of\n work environment I want to be in! I quit!"},{id:"a195",text:"Clowns are unique in that there is no such thing as an anti-clown,\n it's just another clown. Clowns are their own opposite."},{id:"a196",text:"Disco Time! (click me!)",onClick(){let e=Math.random();e+=.618033988749895,e%=1,e*=255;const t=`hsl(${e}, 90%, 60%)`;return`Disco Time!`}},{id:"a197",text:"In order to reach Reality in half an R press, we have to first talk about parallel dimensions."},{id:"a198",text:"Hey there! Just to let you know, there a speck of dust on your screen. Can you help wipe it off?\n It bothers me when l'm not clean. Thanks a lot!"},{id:"a199",text:"The real update is the friends we made along the way."},{id:"a200",text:"This former message has been revealed to be a duplicate of another message and has thus been removed.\n We apologize for the inconvenience."},{id:"a201",text:"No wait stop don't click that hide news ticker button!"},{id:"a202",text:'This is so sad. Alexa, please play a sad song so I can relate to its emotional mood, as I currently have poor\n mental health and listen to music like this so I can feel bad about myself. I realize this is unhealthy, but\n you are a robot incapable of sentient thought, so you\'re unable to make a choice to avoid contributing to my\n self destructive behavior, and you\'ll play a sad song anyway.\n Now playing "Despacito" by "Luis Fonsi".'},{id:"a203",text:"3/4 of the news messages are fake and gotten off of the discord server without permission or credit given\n to the original writer - anonymous discord server member"},{id:"a204",text:"What kind of tea is hard to swallow? Reali-tea."},{id:"a205",text:"Shoutouts to Simpleflips."},{id:"a206",text:"I visited the discord server of the game to have some friendly chat. At that point I got trolled by\n the user called Cubic Frog."},{id:"a207",text:"Hello, this is Josh, with today's forecast for your galaxy. We'll be hitting temperatures in the low\n e10s today, and by this afternoon, it'll be cloudy with a chance of antimatter."},{id:"a208",text:"Hi, I'm Steve, and I'm also Steve. Our greatest responsibility is to serve our antimatter communities.\n We are extremely proud of the quantity, unbalanced journalism that ANN news produces. But we're\n concerned about the troubling trend of responsible, two-sided news stories plaguing the antimatter\n universe. The sharing of unbiased and true news has become all too common on social media. More\n alarmingly, some media outlets publish these same true stories, stories that aren't just propaganda,\n without checking government talking points first. Unfortunately, some members of the media use their\n platforms to push a logically sound opinion and unbiased agenda to diversify 'exactly what antimatter\n thinks'. This is extremely dangerous to our dictatorship. At ANN it's our responsibility to pursue\n and report the lies. We understand lies are neither 'left or right' politically. Our commitment to\n fearmongering slander is the foundation of our credibility, now more than ever. But we are incorporeal\n 8D beings of antimatter, and sometimes our propaganda techniques might fall short. If you believe our\n coverage is fair please reach out to us by going to ivark.github.io, navigating to the options tab,\n and clicking on [HARD RESET]. We value your comments. We won't respond back to you because you would've\n deleted your comment with the hard reset button before you get it. We work very hard to seek the lies\n and strive to be unfair, lopsided and opinionated... We consider it our honor, our privilege, to\n irresponsibly deliver the news every nanosecond. Thank you for watching and we appreciate your\n feedback. All matter should be-"},{id:"a209",text:"Have you ever heard the tale of the Antiwriter? I thought not. It's not a story the news tickers would tell\n you. It's an Unhevi legend. Rumor has it that the Antiwriter contributes to the News every 5 hours with an\n incredibly well written report, only to vanish again. Others think he doesn't exist at all, and is a\n lie fabricated by Hevipelle to spread his propaganda. Perhaps he is real, and just a normal person like the\n rest of us. In any case, we will probably never find out the identity of this mysterious poet."},{id:"a210",get text(){const e=player.news.specialTickerData.uselessNewsClicks,t=quantify("time",e);return 1===e?"Nothing happens when you click this text. And yet, you've clicked it.":e>1?`Nothing happens when you click this text. And yet, you've clicked it ${t}.`:"Nothing happens when you click this text. And you understand that."},onClick(){return player.news.specialTickerData.uselessNewsClicks++,this.text}},{id:"a211",get text(){const e=["That's basically a rounding error.","That might as well be zero.","Did you forget an exponent somewhere?","Please, that's nothing."],t=e.randomElement();return`Only ${format(Currency.antimatter.value,2,0)} antimatter? ${t}`}},{id:"a212",text:"Hey, you. You're finally awake. You were trying to get the 9th dimension, right? Walked right into that\n Infinity, same as us, and that thief over there."},{id:"a213",text:"Antimatter giraffes have incredibly fast reaction times. This explains why they've won 90% of\n all gaming championships since anti-giraffe friendly controllers were invented."},{id:"a214",text:"Barack Obamantimatter"},{id:"a215",text:"Local old man replaced lawn with antimatter grass to keep kids away. However,\n when he attempted to water it, there were no survivors."},{id:"a216",text:"Testing... testing... testing... Oh goddamn I was in prod again.",isAdvertising:!0},{id:"a217",text:"The virgin matter vs the chad antimatter."},{id:"a218",text:"After numerous catastrophic annihilation events, antimatter is\n now classified as a controlled substance by the ADEA."},{id:"a219",text:"Hello, Vsauce, Michael here. We all know that the 9th dimension doesn't exist, but what is 9? You know it's\n the number after 8... right? What if... there's a number in between? And no I'm not talking about numbers\n like 8.5 or 8.76, I'm talking about an integer between 8 and 9. Now all this may sound crazy to you, and it\n kinda is, but what if, we've missed a number? We've all been taught that 2 comes after 1 and 3 comes after\n 2, but what if the number that comes after 8 isn't 9? After years of research and experimentation, we've\n finally found the number. It is dangerous, even knowing its existence will let it consume your mind, but\n fortunately, we've developed a reverse-containment cell, meaning it's everywhere except here. Our brain has\n a protection system, that specifically filters out any information regarding this number, that's how we've\n been able to survive for this long, and why others like us went extinct in the past, but the number has been\n getting stronger, slowly getting closer to breaking our protection. We've temporary stopped the number from\n slipping into our memory by using the world-wide memory manipulator located in this room to keep making\n everyone think that 9 comes after 8 with a side effect that makes everyone think that 9 is evil, but this\n won't last forever, as the number will keep getting stronger, and will eventually overpower the memory\n manipulator. That's why you're here, you're one of the most intelligent people here, and we hope you can\n help us on our journey to defeat that number. Our enemy is not 9, it is the hidden number between 8 and 9,\n the missing number."},{id:"a220",text:"antioop-"},{id:"a221",text:"Error 404: News message not found."},{id:"a222",text:"I love you 1e3000."},{id:"a223",text:"If you find your infinity lasting longer than 5 hours please contact a medical professional.",get unlocked(){return PlayerProgress.infinityUnlocked()}},{id:"a224",text:"We've just gotten reports about an inaccuracy in the previous news message. We at ANN would like to formally\n retract the story, and apologize to our loyal viewers."},{id:"a225",text:"If you see this, you saw this."},{id:"a226",text:"Good mornging. That was not a typo. The inventors of English made the typo."},{id:"a227",text:"What if... we touched... antimatter? Haha just kidding... Unless..?"},{id:"a228",text:"Roses are blue, violets are red, those statements weren't peer reviewed, and my name is Fred. Nice to meet you!"},{id:"a229",text:"🚗 🚓 🚓"},{id:"a230",get text(){return`You started playing this game nearly\n ${TimeSpan.fromMilliseconds(Date.now()-player.records.gameCreatedTime).toString()}\n ago. Thank you for playing!`},dynamic:!0},{id:"a231",get text(){return`One, two, skip a few, 99, ${format(Number.MAX_VALUE,2)}!`}},{id:"a232",text:"getNextNewsMessage();"},{id:"a233",get text(){return`Level 10 crook, Level ${format(Number.MAX_VALUE,2)} Boss,\n that's how Antimatter Dimensions works.`}},{id:"a234",text:"Antimatter will never threaten to stab you. And, in fact, cannot speak."},{id:"a235",text:"New antimatter on pizza recipe sparks outrage among traditional Italian chefs."},{id:"a236",text:"We'll be right back after this short word from our sponsors."},{id:"a237",text:"Want to trade candy? I'll give you my Big Crunch for two Milky Ways."},{id:"a238",get text(){return`AD Player: "How many orders of magnitude are you on?" Normal person: "Like, maybe 5 or 6 right now, my\n dude." AD Player: "You are like a little baby. Watch this: C R O N C H"`}},{id:"a239",text:"Oh gosh, would you look at the time! Only left 5 hours until the update!"},{id:"a240",text:"Hi, my name is Max, and I would like it if people stopped trying to buy me."},{id:"a241",text:'Breaking news: the government is reporting the first ever official alien contact. These aliens appear to be\n cats, but with highly sophisticated technology. They\'re capable of space travel and colonization to a far\n greater degree than us, and they even have their own cryptocurrency, called "Blackcoin".'},{id:"a242",text:'"You can come up with the stupidest quote, credit it to some famous\n person, and people will believe it." -Barack Obama'},{id:"a243",text:'"I\'m having difficulty breathing. Please move your finger." -M'},{id:"a244",text:"Don't mind me, just passing through."},{id:"a245",get text(){const e="",t=Theme.current().displayName(),i={Normal:"it has this certain elegant simplicity to it. You just know it's the way the developer intended you\n to see the game.",Metro:"of the beautiful thin borders, pixel perfect harsh geometric edges, and simply delightfully well\n balanced color palette.",Dark:"it's very easy on the eyes, and has this nice playful tone to it in both the colors and the shapes.",DarkMetro:"it's just so soothing to look at, with that perfect blend of professional and playful design,\n with just a splash of color.",Inverted:"it gives you these transcendently beautiful color combinations that you would normally never\n see in a typical dark theme.",InvertedMetro:"it gives off this very stern vibe, with these highly contrasting colors clashing with a\n professional modern sort of design.",AMOLED:"it saves 10% more energy compared to using a light theme. Doesn't everyone love saving energy?",AMOLEDMetro:"it has a nice look to it that resembles the control panel of a sci-fi spaceship. ...No, you can't\n actually fly a spaceship, unfortunately.",S1:"it really gets me in the holiday spirit. I can just feel the magic in the air!",S2:"it makes me proud to be Finnish, and proud to celebrate all that we have accomplished as a people.",S3:"it's a beautiful analogue for life, in that it's ever changing and never quite right.",S4:"it has this wonderfully chaotic design, to the point where it's nearly completely impractical.\n And there's a certain beauty in that.",S5:"the image of that man permeates throughout all of pop culture. And having this blown-up\n picture of him in the background is just rather humorous.",S6:"that beautifully animated background just entrances you, and then the subtle tone and\n colors pull you in and fully immerse you into the game.",S7:"I always had fond memories of that background from my childhood.",S8:"it makes it a lot easier to sneak in a little gameplay at the office.",S9:"lol you can't even ever see this in the game",S10:"it has a crisp and soothing design that really appeals, and its background is complex and enthralling.\n It gives you the feeling of standing at the helm of a futuristic interstellar ship.",S11:`the Blob is an iconic character in the Antimatter Dimensions official Discord server. It is widely used\n to express emotions in a lovely way. It is a fact that the Blobs are evolving. ${e} always seek to be\n more expressive. Then someday, a new ${e} is born in the server, to express further emotions. Usually,\n ${e} are just blobbling and bouncing around, occasionally merging and dividing. Only ${e} know where\n they are from or where they are going to go. Still, ${e} are there, always with me.\n You love ${e}, so ${e} loves you too.`,S12:"it makes you feel warm and comfortable, as if you were right at home. However, it is highly recommended\n to update your theme to the newest theme for the best user experience."},a=i[Theme.current().name.replace(/[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]/g,"")];return`Ah, a fellow ${t} theme user. I see that you have impeccable taste.\n I myself like the ${t} theme too, because ${a}`},dynamic:!0},{id:"a246",text:"OoooOOOOooOOO, it's me, the infamous news ghost!"},function(){let e=!1;const t='This news message is a test of "News 2.0". News 2.0 will feature things like the ability to\n click on news messages to flip them upside down!',i="¡uʍop ǝpᴉsdn ɯǝɥʇ dᴉlɟ oʇ sǝƃɐssǝɯ sʍǝu uo ʞɔᴉlɔ oʇ ʎʇᴉlᴉqɐ ǝɥʇ ǝʞᴉl sƃuᴉɥʇ ǝɹnʇɐǝɟ llᴉʍ 0˙ᄅ\n sʍǝN ˙,,0˙ᄅ sʍǝN,, ɟo ʇsǝʇ ɐ sᴉ ǝƃɐssǝɯ sʍǝu sᴉɥ┴";return{id:"a247",get text(){return e?i:t},reset(){e=!1},onClick(){return e=!e,this.text}}}(),{id:"a248",text:"To be fair, you have to have a very high IQ to understand the news ticker. The humor is extremely subtle,\n and without a solid grasp of quantum physics, most of the jokes will go over a typical player's head."},{id:"a249",text:"This woman got TONS of Dimension Boosts with this 1 WEIRD TRICK! Galaxies HATE her!",isAdvertising:!0},{id:"a250",get text(){let e="";const t=[["🐖","🐢","🦆","🐓","🐜","🐕","🐈"],["🚶‍","🏃‍️","🏇","🚴‍"],["🚗","🚓","🚕","🛺","🚙","🚌","🚐","🚎","🚑","🚒","🚚","🚛","🚜"],["🚁","🛸"]];for(const i of t){const t=i.randomElement();for(let i=0;i<3;i++)(Math.random()>.5||!e.includes(t))&&(e+=t);e+="   "}return e}},{id:"a251",text:"Hey! It's me, you from the future! I came back to give you this warning: Pay VERY close attention to the\n next news ticker. In my timeline we ignored it, and humanity has regretted it ever since."},{id:"a252",get text(){return`This message is dilated.`},get unlocked(){return PlayerProgress.realityUnlocked()||PlayerProgress.dilationUnlocked()}},{id:"a253",text:"After a surge of complaints from our viewers, we have decided to allow you at home to write your own\n messages. Give it a try here: . Or don't. That's fine too."},{id:"a254",text:"Antimatter Dimensions Anonymous has shut down due to the failure of their 12-step program.\n People would only get to step 8 and then reset."},{id:"a255",get text(){return`Bruh Sound Effect #${format(Number.MAX_VALUE,2)}.`}},{id:"a256",text:"The 9th dimension doesn't exist because the 7th dimension 8 it."},{id:"a257",text:"A the triangular hole in the fabric of reality has caused some letters to\n no longer exist. Those letters are: j, k, q, u, x, z"},{id:"a258",text:"Born too late to explore the world. Born too early to explore the cosmos. But born just in time to\n grind for a couple hours for the next big crunch."},{id:"a259",text:"Now hold on, I know what you're thinking, \"An M press is an M press, you can't say it's only a half!\" Well,\n TJ \"Slabdrill\" Yoshi, hear me out. An M press actually has three parts to it: when M is pressed, when M is\n held, and when M is released. Now, usually is the pressing that's useful because that's the only part that\n matters; however, sometimes it's sufficient to just use the holding part, which also buys dimensions and\n tickspeed upgrades. And as for the release, well, there are currently no cases where that's useful or\n important, so don't worry about that part. Now, if we map out the required presses for challenge 2 it would\n look like this: /¯\\. We merely need to hold (¯) M to reach the first galaxy, we need to press (/) M to\n finish the challenge, and we need to press M again to start another challenge. So, how many presses is that\n total? Well, it appears to be three, and if we were doing this Eternity in isolation then yes, it would be\n three, but in a full-game M Button Challenge run there are other M presses that occur earlier in the run,\n such as the M press needed for the first Infinity, so if we take that M press into consideration as well,\n then how many M presses does it take? The naive answer would be four: one to enter the challenge, and the\n three within the challenge we established earlier; however, we can do better. We can actually do it in\n three by simply holding out the first M press to be used for the half M press, because the half M press only\n required M to be held, not actually pressed, so in this fashion, Challenge 2 only adds on an additional two M\n presses to the run, since the first M press just leeches off the previous M press. So to capture this\n phenomenon, we call it 2.5 M presses. On a single Eternity basis, you'd round up that up to three, but in\n a full game run, you'd round it down to two. So, in conclusion, since that first M press counts in some\n contexts, but adds no additional presses in other contexts, we refer to it as a \"Half M Press\"."},{id:"a260",text:"It seems that the Replicanti have a very divide-and-conquer method of doing things.\n Well, everything at this rate.",get unlocked(){return PlayerProgress.eternityUnlocked()||PlayerProgress.replicantiUnlocked()}},{id:"a261",text:"Antimatter Dimensions is actually a Roguelite game! If you die, in the afterlife you unlock alternative\n features, like having Space Dimensions instead of Time Dimensions. You can even unlock new characters to\n play as, including an antimatter clone of yourself!"},{id:"a262",text:"Vibe check. 🏃‍♀️🏏"},{id:"a263",text:"What are gems for? Gems are for housing. Housing for what you ask? Good question."},{id:"a264",text:"A new prestige layer has been announced: Maternity. Get ready to have a baby!"},{id:"a265",text:"YOU MUST CONSTRUCT ADDITIONAL DIMENSIONS."},{id:"a266",text:"Hello, how is your day going?"},{id:"a267",text:'I have an ant farm, and I want to make them into the world\'s smallest soccer team. My Aunt Diana wants to\n help, and together we gather everyone in the family to plan their season. "How can we make this Ant Team\n matter?", Di mentions.'},{id:"a268",text:"👨‍💻Devengers, compile!👩‍💻"},{id:"a269",text:"There is a traffic jam in Dimenton. If you plan on travelling in the area, leave early. Here's some live\n footage: 🚗🚕🚛🚙🚗🚚🚕🚕🚌🚛🚚🚙🚒🚛🚗🚙🚓🚗🚚🚛🚒🚌🚐🚚🚐🚛🚚🚓 Yeah, Dale, I'd say it\n looks pretty bad. And make sure to bring some water and a snack with you, too."},{id:"a270",text:'The Galactic Association of News Writers has filed a class action lawsuit against the developers of the\n small web game "Antimatter Dimensions" for mass plagiarism.'},{id:"a271",text:"\n This news message is a test of \"News 2.0\". News 2.0 will feature things like the ability to listen to\n an audio version of any news message!"},{id:"a272",text:"What's hevier, a pound of bricks, or a pound of antimatter?"},{id:"a273",text:"There are no typos in any of these news messages. If you see a typo, the tpyo must be in your brain."},{id:"a274",text:'A large number of mathematicans walk into a bar. They each order 10 times as many beers as the previous.\n The bartender says "My my, that\'s an order of magnitude!".'},{id:"a275",text:"Letter Go Down Idle is the shortest idle game of all time, lasting only 26 seconds."},{id:"a276",get text(){return`Fun fact: There are ${GameDatabase.news.length} news messages and counting!`}},{id:"a277",text:"Inside you there are two wolves. One is made out of matter. The other\n is made out of antimatter. You are exploding."},{id:"a278",text:"This is just a friendly note to remind you that you've forgotten to do something really important. I don't\n know what it is, but there is definitely something."},{id:"a279",get text(){return`Coming soon to all good retailers- Antimatter Dimensions: The Board Game! Enjoy the thrill of watching\n huge numbers go up without the need for a PC or mobile phone. Comes complete with everything you need including a\n mixed scientific calculator, ${format(Number.MAX_VALUE,2)} antimatter counters, a high quality plastic\n BUY MAX button, and over a\n thousand news message cards with all the irrelevant memes you know and love! You can finally enjoy AD the way\n it was meant to be played. AD: The Board Game is also available in travel size, so you can even experience\n the joy of calculating logarithmic growth while you're on the go! BUY AD: The Board Game TODAY! Warning: may\n contain traces of actual matter. Replicanti sold separately. 9th Dimension not included.`},isAdvertising:!0},{id:"a280",text:"I hate antimatter. It's rough, coarse, irritating, and it gets everywhere."},{id:"a281",text:"What if instead of creating antimatter, you're actually just losing matter?"},{id:"a282",text:"There was a reported sighting of the 9th Dimension, but it has since been\n debunked as simply being a 6th Dimension from Australia."},{id:"a283",text:"A strange phenomenon occurs when you attempt to shift to a higher dimension when you are in the 8th\n dimension. There is no higher dimension, so the universe ejects you back into the 8th dimension with\n an incredible velocity. This technique, known as a Dimension Boost, is used by starship pilots and\n antimatter enthusiasts everywhere."},{id:"a284",text:"Cold fully clothed couples in your area!"},{id:"a285",text:"You are now breathing manually. You've now realized there's no comfortable spot in your mouth for your\n tongue. You are now manually holding your jaw up. You haven't blinked in a few seconds. You can see a\n little bit of your nose at all times."},{id:"a286",text:"Why do they call it oven when you of in the cold food of out hot eat the food?"},{id:"a287",text:"Sequelitis has escalated to the point that some studios are now producing the sequels before the originals.\n Fans of long series wait, as the numbers count down until they can finally find out what is even going on\n in the first place."},{id:"a288",get text(){const e=player.news.specialTickerData.newsQueuePosition--;return e>1?`Thank you for contacting customer support. Your satisfaction is very important to us, and a company\n representative will be with you shortly. You are now at position ${e} in the queue. Thank you for\n your patience, and please enjoy these quality selected news messages as you wait.`:"Thank you for contacting customer support, this is Jane, how may I help you today?"}},{id:"a289",text:"Click here to disassemble the news ticker for a trace amount of paperclips.",onClick(){player.news.specialTickerData.paperclips++,GameOptions.toggleNews()}},{id:"a290",get text(){const e=player.news.specialTickerData.paperclips;return`You see, this news isn't normal news. It is being produced by the first news dimension. If you want\n to unlock more news, you have to collect enough paperclips to build the second news dimension. You\n currently have ${quantifyInt("paperclip",e)}, but you need\n ${formatInt(e+10)} paperclips to afford it.`}},{id:"a291",text:"Considering Hevipelle's nationality, it's a little ironic that he created a game that you can never Finnish."},{id:"a292",text:"Fairies are not real. Anti-fairies are also not real. This has only been the case since last week, when the\n two groups came into contact. The planet they were on, also, unsurprisingly, is no longer real."},{id:"a293",text:"Hello fellow news messages! 🛹"},{id:"a294",text:"If you see a news message, and then see it again later, does it become an olds message?"},{id:"a295",text:"👁"},function(){let e=!1;const t="Click on this news message to hard reset your game.",i="You're crazy. You know what, here. Have a paperclip.";return{id:"a296",get text(){return e?i:t},reset(){e=!1},onClick(){if(!e)return e=!0,player.news.specialTickerData.paperclips++,this.text}}}(),{id:"a297",text:"I don't think, therefore I'm not."},{id:"a298",text:"Is it crazy how saying sentences backwards makes backwards sentences saying how crazy it is?"},{id:"a299",get text(){return`Buy the new Antimatter Dimensions puzzle set now! With a combined ${format(Number.MAX_VALUE,2)}\n pieces, these puzzles are the perfect way to spend some quality time with your family!`},isAdvertising:!0},{id:"a300",text:"The board of directors here at A.N.N thinks we should replace the news ticker with a banner\n advertisement. Please sign our change.org petition, so we can stop them before it's too late!"},{id:"a301",text:"The next hour is in 0.2 updates."},{id:"a302",text:"Introducing Antimatter Lite! Zero calories... Same great Crunch.",isAdvertising:!0},{id:"a303",text:"Roses are red, violets are blue, flag is win, baba is you."},{id:"a304",text:"Hi, how's your day? Hope it's good. If it's not good, we hope playing AD made it a little bit better!"},{id:"a305",text:"We now bring you today's weather report. There is a 100% chance of weather."},{id:"a306",text:"FIXING NEWS: Please don't break it again."},{id:"a307",text:"The paperclip maximizer is a thought experiment described by Swedish philosopher Nick Bostrom in 2003. It\n illustrates the existential risk that an artificial general intelligence may pose to human beings when\n programmed to pursue even seemingly-harmless goals, and the necessity of incorporating machine ethics into\n artificial intelligence design. The scenario describes an advanced artificial intelligence tasked with\n manufacturing paperclips. If such a machine were not programmed to value human life, or to use only\n designated resources in bounded time, then given enough power its optimized goal would be to turn all matter\n in the universe, including human beings, into either paperclips or machines which manufacture paperclips."},{id:"a308",get text(){const e=["Antinology","Infinifection","Eternal Light","Galaxia","Duplicanti","Dimensional Explorer","Techyon","Realistic","Celestar","ERCGDM","NRG+","Looty Box","Symbolic","Minisofa","IDEAL","Appange","Goggles","Interval","Newstar","HeavyPellet","Marsa","Zoology","Photoric","Jacfoz","Orism","EDIK","Fision","Gamma","Fractiled","Imnesia","Fermic","The Automizers"],t=[];while(t.length<3){const i=e.randomElement();t.includes(i)||(t[t.length]=i)}const i=[Math.floor(11*Math.random())/100,Math.floor(11*Math.random())/100,Math.floor(11*Math.random())/100];for(let a=0;a<3;a++){const e=i[a];0===e?i[a]='0.00 ◄►':Math.random()>.5?i[a]=`+${e} ▲`:i[a]=`-${e} ▼`}return`${t[0]} ${i[0]}   \n ${t[1]} ${i[1]}   \n ${t[2]} ${i[2]}   `}},{id:"a309",text:'Your daily shades of the sky forecast: Monday: Turquoise\n Tuesday: Taupe\n Wednesday: Blurple\n Thursday: Turquoise/taupe\n Friday: Coal dust Saturday: Coal dust\n with chances of indigo in the late afternoon\n Sunday: Void'},{id:"a310",text:"You have reached the automated Antimatter Dimensions support hotline. If you are experiencing a bug in the\n game try closing and reopening the app. If that doesn't work, press 1 for web, or 2 for mobile. If you need\n advice, press 3. If you need to max all, press m. To support the developers, press 4. To access the FAQ,\n press 5. To fix a broken save, press 6. To get an invite to the Discord server, press 7. To see the change\n log, press 8. Press 9 to repeat."},{id:"a311",text:"This message has been copyrighted by The Walt Disney Company. Your\n account will be charged $9.99 upon viewing this message."},{id:"a312",text:"But before we start, today's video is brought to you by Antimatter Dimensions™! It's got over 100,000\n downloads, and it's completely redefined what a mobile game can do for me. It's got great mechanics, 5\n prestige layers, unique and original challenges, a deep skill tree, and the largest numbers I've ever seen.\n Like, seriously, look at them. And the best part is, it's free! Yes, that's right. Free. And if you use the\n link in the description, you'll start the game with 10 septillion antimatter. Yes, that's right, 10\n septillion. So what are you waiting for, click the link in the description and start playing Antimatter\n Dimensions™ today!"},{id:"a313",text:'"...And then, once you get to level 9,000, you can ascend. Not really sure why you\'d want to do that, it\n just resets all of your hard earned xp for some small buffs, mechanics like this will never catch on."\n - some random guy, circa 2012'},{id:"a314",get text(){const e=Math.floor(8901*Math.random)+100;return`Warning: Law ${e}-B, drafted by the AI "duskscarf", alternatively referred to as "the giant\n space rabbit legislation" is now in effect in your galactic area. This list of laws and regulation\n forbids, among other things; the illegal catching of wild space rabbits, the pacification of tamed\n space rabbits, and further scientific research with "planet grazing" unless an exception is given\n directly by duskscarf. You can find the list of exceptions burned into your eyelids now. In addition,\n the genetic modification of giant space rabbits is limited to very specific fields - size alterations\n (increasing in size), and cryptobiosis exaggeration. No other genetic modification is allowed outside\n of military applications. Thank you for your cooperation. Messages repeats in- Warning: Law ${e}-`}},{id:"a315",text:'The developers of the game have announced that a new notation, "Truest Blind", will be released. They\n report that it will remove the UI, allowing for a more streamlined user experience.'},{id:"a316",text:"Some people choose to see the ugliness in this world. The disarray. I choose to see the numbers."},{id:"a317",get text(){return`${format(Number.MAX_VALUE,2,0)}? Doesn't look like anything to me.`}},{id:"a318",text:"We can't define consciousness because consciousness does not exist. Humans fancy that there's\n something special about the way we perceive the world, and yet we follow guides as tight as the\n bots do, seldom questioning our choices, content, for the most part, to be told what to do next."},{id:"a319",text:"Please disregard any undeserved compliments."},{id:"a320",text:"Introducing the aphone 10: The world's first completely water soluble mobile device!",isAdvertising:!0},{id:"a321",text:"It must be hard being on your PC all alone. But don't worry; we are still here.\n Listening and watching your every step."},{id:"a322",text:'Hevipelle announces an Antimatter Dimensions spinoff where you gamble matter in a game of\n poker in Dutch mansions: "Ante matter d\'mansions"'},{id:"a323",text:'var i = "Omae wa mou shindeiru" console.log(i - 1 + "i?") NaNi?'},{id:"a324",text:"If you have an idea for a news message, shout it into the void.\n It won't get your message into the game, but it's fun!"},{id:"a325",text:"After the accident at the antimatter reactor in Pripyat last month, concerns are rising about the safety of\n antimattter reactors, and many are starting to believe we should return to safer means of energy generation,\n such as nuclear."},{id:"a326",text:"Antimatter Dimensions is like an ogre... it has layers."},function(){let e=!1;const t="Click here to restart your device.",i="Please give Antimatter Dimensions admin access to your device.";return{id:"a327",get text(){return e?i:t},reset(){e=!1},onClick(){if(!e)return e=!0,this.text}}}(),{id:"a328",text:"News company no longer lets random people submit stories,\n instead opting to using qualified writers. Riots ensue."},{id:"a329",text:"Introducing Morse Code+++ - the brand new Morse code, now with 20 new\n characters, for everyone who wants to slide, zip, and swoosh!",isAdvertising:!0},{id:"a330",text:"Any sufficiently primitive magic is indistinguishable from technology."},{id:"a331",text:"I have no nose, and I must sneeze!"},{id:"a332",text:"♪ When you try your worst and you still succeed. ♪"},{id:"a333",text:'The wildly popular theme song "Gotta set \'em free" has reached 500 million downloads in its first week.'},{id:"a334",text:'Introducing the all-new anti-alignment chart! Featuring groundbreaking new combinations such as "lawful-chaotic"\n and "evil-good"! And with a dazzling third axis for \'Jazziness\'~ Identify yourself as chaotic-lawful-unjazzy NOW\n for the impossibly low price of $-59.99! Terms and conditions apply. Batteries not included.',isAdvertising:!0},{id:"a335",text:'Due to new complications regarding "The Game", protests have risen all over the anti-verse. Thus, governments\n are forced to change the rule of The Game, stating that you win The Game if someone informs you about it,\n instead of losing it.'},{id:"a336",text:"Attention residents of zone 4 [commonly referred to as 'dark zone'], sector ϰ, (01,05). Do\n not leave your places of residence. I repeat, do not leave your places of residence. Do not go outside.\n Earthology's finest meteorological supercomputers, as well as many witches, are consistently claiming a\n 'generally weird vibe' tomorrow and we quite frankly don't want to find out what that means."},{id:"a337",text:"Technological convergence is the concept that all technologies will converge into a single technology. It is\n a commonly expressed idea since the dawn of the Information Age, and can be seen in many places and devices\n such as smartphones, or the internet. Antimatter Dimensions is an example of technological convergence,\n specifically within media. Using a genius idea called 'not caring' mixed in with the innovative solution of\n 'blind luck', it merges together a subpar game, and a subpar news ticker, to create a mediocre experience\n that despite being mostly a game, occasionally acts as a news source slightly above the Matter Dimensions\n Newsticker. Truly, an achievement for all businesses to aspire to strive towards, and hopefully actually beat."},{id:"a338",text:"Ancient cave paintings with the number 5 have been found. It's implied they were waiting for something."},function(){let e=!1;const t="Read More",i="More";return{id:"a339",get text(){return e?i:t},reset(){e=!1},onClick(){if(!e)return e=!0,this.text}}}(),{id:"a340",text:"That's quite a lot of antimatter you're making. The game developer is impressed. Because this message is\n prerecorded, any observations related to your antimatter production are speculation on our part. Please\n disregard any undeserved compliments."},{id:"a341",text:"Game under construction: All mechanics must wear hardcaps."},{id:"a342",text:"Of course paperclips have a use, you use them to hold papers together. But who uses paper anymore?"},{id:"a343",get text(){const e=Math.pow(player.records.realTimePlayed,25);return`Global Challenge - across all AD players, accumulate ${format(Number.MAX_VALUE,2)} contest-paperclips\n (noted by the\n square ends), to receive an event-exclusive metal bagpipe, capable of giving +2 AM/s, as well as an extra\n tickspeed while above ${format(1e200)} tickspeed upgrades! Current global progress -\n ${format(e)}/${format(Number.MAX_VALUE,2)}\n (${formatPercents(Math.log10(e)/Math.log10(Number.MAX_VALUE),3)})`}},{id:"a344",text:"Real life is an enigma. No one knows how it really works. There are many questions left unanswered:\n What is the meaning of life? Are we all living inside a simulation? How do you do antitables? Where and\n how did existence begin? These are all the questions that always linger in the back of our heads, and\n the answers to them? We may never know."},{id:"a345",text:"Japanese complain, as haikus can't be shown here. Conflict arises."},{id:"a346",text:'Did you know Antimatter Dimensions is also available on Android? \n Click here to check it out!'},{id:"a347",text:"Pluto isn't a state. The 50 states, as we all know, are: Adverb, Air, Artemis, Asia, Atlantic, Bargaining,\n Bilabial, Braille, Candela, Comma, Dacron, Dairy, Dative, Dexterity, Disenchanter, Dodecahedron, Erie,\n Eukaryota, Folklore, Great Pyramid, Halogen, Igneous, Italy, Kansas, Kilimanjaro, Lambda, Leviticus, Libra,\n Liquid, Lymphatic, Mesozoic, Microwave, Muon, North, Nova Scotia, Octagon, October, P = NP, Perissodactyla,\n Polk, Potassium, Pulley, Quinary, Rook, Saturn, Tiana, Tiger, Varaha, Yale, and Yellow."},{id:"a348",text:"[News Message removed by moderator]"},{id:"a349",get text(){const e=['We have come, writers, painters, sculptors, architects, passionate enthusiasts of the hitherto untouched\n beauty of Paris, to protest with all our strength, all our indignation, in the name of the unknown French\n taste, in the name of art and of French history threatened, against the erection, in the heart of our\n capital, of the useless and monstrous Eiffel Tower, which public malignity, often marked by common sense\n and the spirit of justice, has already named of "Tower of Babel". Without falling into the exaltation of\n chauvinism, we have the right to proclaim that Paris is the unrivaled city in the world. Above the streets,\n the widened boulevards, and the magnificent walks, rise the most noble monuments that the human race has\n produced. The soul of France, creator of masterpieces, shines amidst this august flowering of stones. Italy,\n Germany and Flanders, so justifiably proud of their artistic legacy, possess nothing comparable to ours,\n and from all corners of the universe Paris attracts curiosities and admiration.',"Are we going to let all this be profaned? Will the city of Paris go on to associate itself longer with the\n baroques, with the mercantile imaginations of a machine builder, to become irreparably ugly and dishonor\n itself? For the Eiffel Tower, which commercial America itself would not want, is, doubtless, the dishonor\n of Paris. Everyone feels it, everyone says it, everyone deeply grieves it, and we are only a weak echo of\n the universal opinion, so legitimately alarmed.",'Finally, when the foreigners come to visit our Exhibition, they will exclaim, astonished: "What? It is this\n horror that the French have found to give us an idea of their taste so much vaunted? And they will be right\n to make fun of us, because the Paris of the sublime gothics, the Paris of Jean Goujon, Germain Pilon, Puget,\n Rude, Barye, etc., will have become the Paris of M. Eiffel.',"It suffices, moreover, to realize what we are doing, to imagine for a moment a vertiginously ridiculous\n tower dominating Paris, as well as a gigantic factory chimney, crushing with its barbarian mass. Our Lady,\n the Sainte-Chapelle, the dome of the Invalides, the Arc de Triomphe, all our humiliated monuments, all our\n shrunken architectures, which will disappear in this astonishing dream. And for twenty years, we will see\n how to stretch out over the entire city, still quivering with the genius of so many centuries, we will see\n the odious shadow of the odious column of bolted sheet metal stretch like an ink stain ...","It's up to you, Monsieur and dear compatriot, to you who love Paris so much, who have embellished it so\n much, who have so often protected it against the administrative devastation and the vandalism of industrial\n enterprises, that it is the honor to defend it once more. We leave it to you to plead the cause of Paris,\n knowing that you will deploy all the energy, all the eloquence that must inspire an artist such as you love\n what is beautiful, what is great, what is right ... And if our cry of alarm is not heard, if our reasons are\n not listened to, if Paris is stubborn in the idea of dishonoring Paris, we will have, at least, you and us,\n hear a protest that honors."],t=e[player.news.specialTickerData.eiffelTowerChapter];return player.news.specialTickerData.eiffelTowerChapter=(player.news.specialTickerData.eiffelTowerChapter+1)%5,t}},{id:"a350",text:"Alexander wept, for he had just watched a pop-culture lecture on quantum mechanics by Anaxarchus and\n realised that there are infinite worlds to conquer, and that he couldn't even be the lord of one without\n a mutiny or 6 stopping him."},{id:"a351",text:"Hi, I'm here to complain about the poor quality of the copper that has just been delivered to me."},{id:"a352",get text(){return`\n This news message is antimemetic. You will forget that it exists shortly.`}},function(){let e=!1;const t="💣",i="💥";return{id:"a353",get text(){return e?i:t},reset(){e=!1},onClick(){if(!e)return e=!0,this.text}}}(),{id:"a354",text:"\n "},{id:"a355",text:"
"},{id:"a356",text:'Press "Choose save" to explore the other 2 parallel universes.'},{id:"a357",text:"The Scientific Community remains baffled over the meaning of 286,078. \"We're certain it's related to potatoes,\n but we need to do more tests.\" one researcher notes."},{id:"a358",text:'Press "Choose save" to explore the other 2 parallel universes.'},{id:"a359",text:'Local incremental game dev makes physicists unhappy again. They claim\n "the physics violations and blatant use of technobabble has gone too far".'},{id:"a360",text:'Press "Choose save" to explore the other 2 parallel universes.'},{id:"a361",text:"We're having a sale of top quality waterproof towels! Be sure to get some on your way out!"},{id:"a362",text:"Hevipelle Incorporated is proud to present a new brand of cereal: The Big Crunch! This nutritious breakfast\n meal contains crunchy antimatter O's, pocket dimensions, Infinity-flavored Sugar Cubes, exponentially-growing\n Replicanti, and Eternity-flavored Marshmallows. Now you can experience Antimatter Dimensions inside of your\n stomach! Warning: Side effects may include spontaneous combustion, nausea, vomiting, diarrhea,\n dematerialization, vaporization, heart failure, the end of the world, or death. If you are not made out of\n antimatter, consult an educated professional on Antimatter Consumption before eating 'The Big Crunch'.",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"a363",text:"The most expensive thing about a dragon isn't the gold you need to fill the nest, the magic you sacrifice\n entire empires for, or the billions of wars you need to supply the decillions of adamantium. No, it is the\n dirt. It's always the dirt. Don't ask the royal treasurers why we have more creatures on the plane than\n molecules of dirt. Just keep summoning bulldozers through arcane rituals and keep looking through the\n earth's core for more scraps of dirt."},{id:"a364",get text(){const e=["Illustration 320-A - True Office Graphics Wall. One of our senior consultants will observe your business,\n and come up with a list of words to be added to a hallway, to remind all employees of the values of their\n company. Known to decrease employee motivation by at least 25%! Past walls include words such as Black\n Hole, Catastrophic, Haphazard, compromising, Inferior, Delusional, Inefficient and Collapsed! Order now!","Furniture 150-A (2034 edition) - 3-person seating device. A revolutionary new design for office waiting\n areas, it consists of a large 3 legged stool, placed upside down for aesthetic benefits. Perfect for\n getting employees back to work, in a new set of shoes, or pants. It isn't tied down or glued to the\n floor like other editions, but we do make sure that other employees look at you funny if you edit our\n art. No need to order, it comes as a complimentary service for any customer!",'Furniture 0853 - "The Rack" - this revolutionary new workspace, from the inventors of the crawling\n desk, helps your employees overcome their limits and ensure that your whole business is screaming -\n in agony! At times chosen by our revolutionary "pAIn AI", it will suggest mandatory stretchers for all\n users. Recommended by your local gaol, order now! *Warning, AOS&C only takes responsibility for acts\n of god such as lightning or merciful purifications by deities.'],t=e.randomElement();return`Antimatter Office Supplies and Co present their new "Modern Office" catalogue! Each template\n design can be customised for your business, and offers a unique way to promote business synergy! Here\n is a sneak preview of one of their newest items: ${t}`}},{id:"a365",text:"I don't like Replicanti. They're coarse and rough and irritating and they replicate everywhere.",get unlocked(){return PlayerProgress.eternityUnlocked()||PlayerProgress.replicantiUnlocked()}},{id:"a366",text:"Stage magic, such as illusions, has an interesting history. A mix of charlatans attempting to scam people,\n and actors acting out performances using illusions or sleight of hand. Altering styles of magic, and continued\n discourse and disagreements over whether it should be stated that it is an illusion, and whether people will\n magically realise that it is fake and that it does not need to be stated. A schism a century ago split magic\n into 2 types - gentle, simplistic utilitarian tricks and grand spectacles involving the flashy machinery and\n beautiful assistants - originating from the popularisation of a single trick involving sawing a person in\n half. Much more interesting than watching some TV psychic pretending to pull a lottery ticket out from a news\n ticker, at any rate. Speaking of which, tonight's lottery numbers are 23, 10, 81, 106.4, 3 + 2i, and e."},{id:"a367",text:"Snakes look scary, and they absolutely are and you should run, calmly, from every snake you see. But, luckily\n for you, snakes don't often take the initiative to bite - excluding the really mean ones. If they've gone out\n of their way to bite you, there's generally 4 reasons. 1- The Snake is Mean. 2- You scared the snake. Snakes\n are scary to you, but you are scary to snakes. Be the bigger lizard when you meet a snake. 3- You entered the\n territory of the snake. Often, a snake will warn you if you do this - this is why rattle snakes rattle. If you\n don't listen to the warning, they'll bite you. And the most important reason, 4- the snake finds you ugly.\n This is the fault of the snake's ocular system, but is the most common form of bites in at least 2\n jurisdictions. And if you get bitten by a snake, by virtue of being a scarily ugly lizard who keeps stumbling\n into the wrong bushes, there's 3 main things you can do. First, calm down, again, and stay calm. Secondly,\n immobilise the area around site that was bitten, and try using a compression bandage. Snake venom vision is\n entirely based on movement of the object it's currently in. And third, calmly, call for help from other\n lizards. Excluding the snake. The snake's too mean to help you."},{id:"a368",text:"I suspect more people would press the hard reset button if genuine effort was done to make the process as\n miserable as possible. A slow removal of resources, with unique nerfs just to stop you from progressing. The\n destruction of UI, turning from usable to unusable, arcane and unwieldy, requiring memory and luck to even\n continue this quest. Randomness, against the player for even the simplest actions, to punish the thought of\n progression. Hooks and traps and disasters and low rolls for a chance see progression, which entirely consists\n of putting the state of the game further from anything deemed reasonable. A situation where the character is\n broken just to tell you to leave… but the damage is already done, if it is even possible to turn back. And…\n from there, a hard reset probably isn't enough. It would have to be… harder. Not just a hard reset, but a\n cookie, something in local storage designed specifically to make it impossible to actually start a new game.\n Or, something more malicious? And despite this, people would still throw themselves into this nightmare, for\n humanity knows no bounds in its endless curiosity. No amount of warnings will stop everyone. They will find\n a way to proceed, given it exists, and may even complain when it isn't as punishing as expected. So, do you\n want to push the button, and experience the depths of despair, willingly? Hopefully not, because it isn't here."},{id:"a369",text:"An empire-building project is one of the most difficult things to implement. Thousands of hours of time,\n planning, effort, consultation, and political manoeuvring to create truly airbreaking endeavours. Take the\n Realmway Revitalisation Roadmap, a revolutionary program referred to by the 3 R's, which is known as the\n pinnacle of the most famous of the empire's bureaucratic infrastructure committees - the EMIF (empire magic\n infrastructure foundation) - not to be confused with the EAIF (Electric airship investment fund) or the\n NMIC (National Magical Infrastructure Coalition). The goal of the three R's, set out by the EMIF, was to\n reinstate a mana trade corridor for SMSS (Small-Medium Steam Shuttles), a vital part of the burgeoning\n consolidated states after their unfortunate pillaging during the NELC (ninth empire liberation crusade).\n The three R's was a multi stage project - stage 1 was a survey glyph in the air - all big things start with\n a small step. Stage 2, the unveiling of the EMOF (Empire Mechanical Obliteration Forcefield) had over 50\n dignitaries - multiple emperors (from federated states to organisational leaders), foreign rulers, EMDF\n (Effluent Manifested Destiny Families) who currently own the land, and even some of the forecast witches,\n all gathered together to unveil the project in a show of EOSF (Empire Official Solidarity Friendships).\n Sadly, the project was eventually cancelled at stage 215, as the creation of the EMTF (Excrement Material\n Transmutation Facility) for the contractors exploded after coming into contact with a SMEA (Small-Medium\n Electric Airship) placing the last survey peg from stage 459 due to a time vortex created by an argument\n at the WAIC (Witches Annual Infrastructure Committee) as part of stage 56. Truly, tragic stuff - 3 award\n nominations and 2 wins during that process due to EBIF (Efficient Bureaucracy In (the) Field)."},{id:"a370",text:"Man tries installing cookies to store computer data, accidentally cleans them due to being too delicious."},{id:"a371",text:"Pop quiz: there are 3 doors, you pick a door at random, and get to keep what's behind the door. The doors\n have 2 golden goats, 2 silver goats, and a gold and a silver goat. After you pick a door, the door with the\n lowest $ worth of goats will be opened and shown to you. After this, you are given the choice to swap.\n What is the probability that you will swap doors?"},{id:"a372",text:"If you're ever lost in a forest, look at the trees around you. It's said that moss grows north, so by the\n time you've finished looking at a tree, a roaming guitarist will run up to you and ask if you want to hear\n wonderwall"},{id:"a373",text:"As a symbol of friendship between the Matter and Antimatter Periodic Tables, they have done an exchange of\n elements. The element of Mony is now part of the Antimatter Periodic Table, while Antimony has been added\n to the regular Periodic Table."},{id:"a374",text:"This newsticker was specifically designed for promotional purposes only."},{id:"a375",text:"As you probably know, it is traditional to give gifts made of certain materials to celebrate anniversaries\n The classic ones are silver at 25 and gold at 50. Here are some little known anniversary gifts:\n Pineapple - 37 years Hellstone - 66 years Lizardite- 82 years Nitrowhisperin- 86 years Taconite - 95 years\n Hatchettite - 100 years Electrum - 110 Yakitoda - 111 years years Fordite - 119 years Bloodstone - 120 years\n Celestite - 125 years Jet - 140 years Petroleum - 145 years Steel - 150 years Cummingtonite - 198 years\n Concrete - 200 years Laserblue- 210 years Painite - 250 years Parisite - 255 years Parasite - 260 years\n Carbon Nanotubes - 300 years Mercury - 310 years Martian Soil - 340 years Neptunium - 370 years\n Uranium - 380 years Plutonium - 390 years Xium - 400 years Blaze rods - 420 years Asbestos - 430 years\n Gabite - 444 years Crimtane - 666 years Lagga - 777 years"},{id:"a376",text:"Big tech companies have collaborated to create a new neural network that's trained in the generation of rap\n lyrics, called RAP-3. First lyrical generations include \"Call me prometheus 'cuz I bring the fire\" and\n \"Call me Sonic the way I'm gettin' these rings\". Critics say it still has a way to go before it replaces\n traditional music."},{id:"a377",text:"With the new android OS, android 20, being predicted in the near future, the new system for internal codenames\n has been revealed. The first codename, as it currently stands, is “antimatter”. This conveniently works well\n with the predicted generation of phones that will use Android 20 - these phones will be the most explosive\n ever due to their annihilation-based power source. Sources tell us that a billion dollar research unit is\n working on a name for android 21, by tradition to start with B, “that doesn't sound too bad when you think\n about it”. "},{id:"a378",text:"If every antimatter were an apple, you would have enough to keep all the doctors away for 3000 years"},{id:"a379",get text(){return`THE ${format(Number.MAX_VALUE,2)} PIECE! THE ${format(Number.MAX_VALUE,2)} PIECE IS REAL!`}},{id:"a380",text:"The FitnessGram Pacer Test is a multistage aerobic capacity test that progressively gets more difficult\n as it continues. The 20 meter pacer test will begin in 30 seconds. Line up at the start. The running speed\n starts slowly, but gets faster each minute after you hear this signal. [beep] A single lap should be\n completed each time you hear this sound. [ding] Remember to run in a straight line, and run as long as\n possible. The second time you fail to complete a lap before the sound, your test is over. The test will\n begin on the word start. On your mark, get ready, start."},{id:"a381",text:"Why do they call it second dimension when you of in the first dimension of out second eat the dimension?"},{id:"a382",text:"Any AD player born after 1993 can't joke... All they know is 5 hours, paperclips, 1.79e308 & Ninth Dimension."},{id:"a383",text:"The only thing better than an anti-joke is two. Like the number. Not two anti-jokes. I just like the number two."},{id:"a384",text:"Click here to make nothing happen."},{id:"a385",text:"I wonder... Why did Apple skip iPhone 9 and Microsoft skip Windows 9...\n Was it because they were bribed by a game developer?"},{id:"a386",text:"9 out of 10 doctors recommended against trying to touch antimatter. We haven't heard back from the 10th one."},{id:"a387",text:'In spring, Man built a pillar. In summer, another. Throughout autumn they held. But in winter, one experienced\n an unexpected (See definition in: Abstract Multidimensional Retrocausal Physics) ZW-Class "Ascension" event,\n and is hypothesised to have fallen into a dimensional loophole, where it, by definition, has to take up more\n dimensions than itself. Current efforts at retrieving the pillar and returning it to baseline reality have been\n unsuccessful (See test log 2453-3e9a-50d1-84fc for more details)'},{id:"a388",text:"In light of recent events, we'd like to issue an official statement. Antimatter Dimensions™ is in no way\n affiliated with Jimmy's Causality Violating Brainworms™. We do not endorse, no were we involved in their creation\n of the product which was involved in several catastrophic dimension-destabilising and reality-toppling incidents.\n We almost certainly did not sign a contract at 5:30:26 UTC on 08/12/1994 after discussing how we could benefit\n from destabilising and warping dimensions. There was no industrial zone constructed in the 5th Orion Arm of the\n వ' galaxy, and even if they were we did not install localised anomalies following the Scranton Reality Anti-anchor\n mechanism. Additionally, no time loop is occurring at Acroamatic Abatement Facility AAF-D in site 43. We apologise\n if things seemed this way, and we will be more thorough in cracking down misinformation in the future."},{id:"a389",text:"If only we could condense the antimatter in the universe into cookies..."},{id:"a390",text:"Can you believe it guys? Update, just 5 hours away. Update is in a 5 hours. Wahoo. I'm so happy about this\n information. Update just 5 hours away. Oh wow. Can you believe it? Update just in a 5 hours. It got here so\n fast. Update, just 5 hours."},{id:"a391",text:"I'll make my own newstickers, with blackjack and hookers."},{id:"a392",text:"Will Royal put in all the rejected newstickers from #android-newsticker-event and #newsticker-suggestions? The world may never know (no)."},{id:"a393",text:"Don't forget to vote in the Ass Election 2023 -Mage"},{id:"a394",text:"Looking for more mods to play? Check out https://github.com/ArchercatNEO/AD-Mod-DB (may not be up to date)."},{id:"a395",text:"moist."},{id:"a396",text:"POV: You've been stuck on an esclator of 2+ hours because power went out"},{id:"a397",get text(){let e=player.records.totalTimePlayed.div(864e5).mul(2);return`Post a \n  for every day Hexa (and Royal) delay the update. (Hexa and Royal have recived a combined ${format(e,2,2)} \n \n s)`}},{id:"a398",text:"They say if you want an update, and ping Hexa three times in a row you'll..."},{id:"a399",text:"It is the year 2422. The update still isn't out. Royal and his team are totally not procrastinating...we swear"},{id:"a400",text:"fatty jumpscare"},{id:"l1",text:"You just made your 1,000,000,000,000,000th antimatter. This one tastes like chicken.",get unlocked(){return 15===Currency.antimatter.exponent}},{id:"l2",text:"Nerf the galaxies please.",get unlocked(){return 2===player.galaxies||Currency.infinities.gt(0)}},{id:"l3",text:"What do you mean, more than two dimensions??? We're on a screen, clearly there are only 2 dimensions.",get unlocked(){return AntimatterDimension(3).amount.gt(0)||DimBoost.totalBoosts>0}},{id:"l4",text:"How much is Infinity? -literally everyone at least once",get unlocked(){return AntimatterDimension(8).amount.eq(190)||Currency.infinities.gt(0)}},{id:"l5",text:"Eh, the Fourth Dimension is alright...",get unlocked(){return AntimatterDimension(4).amount.gt(0)&&AntimatterDimension(5).amount.eq(0)}},{id:"l6",text:"Antimatter people seem to be even more afraid of 13 then we are. They destroyed\n entire galaxies just to remove 13 from their percents.",get unlocked(){return player.galaxies>0||Currency.infinities.gt(0)}},{id:"l7",text:"To understand dimensional sacrifice, you do actually need a PhD in theoretical physics. Sorry!",get unlocked(){return player.sacrificed.e>=10||DimBoost.totalBoosts>=6}},{id:"l8",text:"A new group for the standardisation of numbers have come forward with a novel new format involving emoji's.",get unlocked(){return player.requirementChecks.permanent.emojiGalaxies>0}},{id:"l9",text:"Antimatter ice cream stand has recently opened- they have octillions of flavors!",get unlocked(){return player.records.totalAntimatter.e>=27}},{id:"l10",text:"The Heavenly Pelle has generated too much antimatter and needed to create another galaxy.\n This one can be seen in the southwestern sky.",get unlocked(){return player.galaxies>0||Currency.infinities.gt(0)}},{id:"l11",text:"9th Dimension is a lie.",get unlocked(){return DimBoost.totalBoosts>=5||player.galaxies>0||PlayerProgress.infinityUnlocked()}},{id:"l12",text:"The square root of 9 is 3, therefore the 9th dimension can't exist.",get unlocked(){return DimBoost.totalBoosts>=5||player.galaxies>0||PlayerProgress.infinityUnlocked()}},{id:"l13",text:"You got assimilated by the 9th dimension? Just call your doctor for mental illness!",get unlocked(){return DimBoost.totalBoosts>=5||player.galaxies>0||PlayerProgress.infinityUnlocked()}},{id:"l14",text:"Why is there no 9th dimension? Because 7 8 9.",get unlocked(){return DimBoost.totalBoosts>=5||player.galaxies>0||PlayerProgress.infinityUnlocked()}},{id:"l15",text:"The 9th dimension cannot exist because the Nein-speaking nazis died in WW2.",get unlocked(){return DimBoost.totalBoosts>=5||player.galaxies>0||PlayerProgress.infinityUnlocked()}},{id:"l16",text:"If you break the fourth wall... well, there's still the fifth, sixth, seventh, and eighth to get through\n before you encounter bad things, so you should be fine",get unlocked(){return DimBoost.totalBoosts>=5||player.galaxies>0||PlayerProgress.infinityUnlocked()}},{id:"l17",text:"Conditions must be met for Hevipelle to sleep. First, it needs to be a blue moon. Second, a specific town\n in the arctic must have not seen light for a month. Third, he needs to release an AD update. And finally,\n no one on the Discord can be on dimension 9. Only then can he rest, for up to 6 hours, before waking up\n forcefully to avoid getting the offline achievement.",get unlocked(){return DimBoost.totalBoosts>=5||player.galaxies>0||PlayerProgress.infinityUnlocked()}},{id:"l18",text:"If the 9th dimension is all evil, then is 3 the root of all evil?",get unlocked(){return DimBoost.totalBoosts>=5||player.galaxies>0||PlayerProgress.infinityUnlocked()}},{id:"l19",text:"I'll have 1e29 number 9s, a number 1e9 large, a number 6 with extra replicanti, a number 1e7, two 4e5s,\n one with matter, and a large time vortex.",get unlocked(){return DimBoost.totalBoosts>=5||player.galaxies>0||PlayerProgress.infinityUnlocked()}},{id:"l20",text:"Infinity: the one thing that's supposed to break.",get unlocked(){return PlayerProgress.infinityUnlocked()}},{id:"l21",get text(){return`I've got ${format(Number.MAX_VALUE,2)} problems, but none of them antimatter.`},get unlocked(){return Currency.infinities.gt(0)&&!PlayerProgress.hasBroken()}},{id:"l22",text:"Anti Emoji Movie a huge hit!",get unlocked(){return player.requirementChecks.permanent.emojiGalaxies>=5}},{id:"l23",text:"If this game was made by Valve, Zero Deaths would be impossible.",get unlocked(){return Achievement(64).isUnlocked}},{id:"l24",text:"Florida man attempts to get Zero Deaths on first run, is stopped by heat death of the universe.",get unlocked(){return Achievement(64).isUnlocked}},{id:"l25",text:'"Having done half the achievements isn\'t much of an achievement" -Boo',get unlocked(){return Achievements.effectiveCount>=GameDatabase.achievements.normal.length/2}},{id:"l26",text:"Thanos is gonna be super dissapointed when he shows up with a fully powered Infinity gauntlet, and Hevi\n has a fully powered Eternity gauntlet.",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"l27",text:"New strange material was been found. It seems to grow exponentially, but only helps with antimatter production.",get unlocked(){return PlayerProgress.replicantiUnlocked()&&.01===player.replicanti.chance}},{id:"l28",text:'It seems this "replicanti" stuff won\'t be growing any faster now.',get unlocked(){return 1===player.replicanti.chance&&1===player.replicanti.interval}},{id:"l29",text:"If you wrote down 3 numbers a second, it would take you less time to write down your antimatter\n amount than it would Hevipelle to update the game.",get unlocked(){return Currency.antimatter.exponent>=1e5}},{id:"l30",text:"Does Hevi just pick quotes to put into the game?",get unlocked(){return NewsHandler.uniqueTickersSeen>=30}},{id:"l31",text:"New news company has become rivals with us. They are made entirely of antimatter.",get unlocked(){return NewsHandler.uniqueTickersSeen>=80}},{id:"l32",text:'How many times can we use "Anti" in a row before people stop listening?',get unlocked(){return NewsHandler.uniqueTickersSeen>=100}},{id:"l33",text:"Does Hevi even check #news-ticker-suggestions anymore?",get unlocked(){return NewsHandler.uniqueTickersSeen>=120}},{id:"l34",text:"Need more quotes! -hevipelle",get unlocked(){return NewsHandler.uniqueTickersSeen>=135}},{id:"l35",text:"Man destroys known universe with antimatter, writes news tickers to keep from feeling lonely.",get unlocked(){return NewsHandler.uniqueTickersSeen>=150}},{id:"l36",text:"You're almost there!",get unlocked(){return NewsHandler.uniqueTickersSeen>=160}},{id:"l37",text:"You can stop now",get unlocked(){return NewsHandler.uniqueTickersSeen>=165}},{id:"l38",text:"fucking hacker",get unlocked(){return NewsHandler.uniqueTickersSeen>GameDatabase.news.length}},{id:"l39",text:"Asian man trys to steal the trophy of fastest infinity of -1 seconds, AND HE DOES IT!",get unlocked(){return NewsHandler.hasSeenNews("l1")}},{id:"l40",text:"I broke the 8th wall, there is only chaos, Slabdrill is ritually sacrificing antimatter to the 9th\n dimension. This will be my last entry, may Hevipelle have mercy on our souls, we didn't listen,\n We should have listened.",get unlocked(){return NewsHandler.hasSeenNews("l58")}},{id:"l41",text:"I thought the update was 5 hours away... -new players after more than 5 hours of gameplay",get unlocked(){return Time.totalTimePlayed.totalHours.gte(5)}},{id:"l42",text:"Somebody told me to wait five hours for the update yesterday but it's today\n and it still hasn't come! What do I do?",get unlocked(){return Time.totalTimePlayed.totalHours.gte(5)}},{id:"l43",text:"You do know that you won't reach Infinity in -1 seconds, right?",get unlocked(){return player.records.bestInfinity.time.eq(.1)}},{id:"l44",text:"Where does Antimatter Nemo live? In a NNnNeMI-NNnNe.",get unlocked(){return player.records.totalAntimatter.e>=3e6}},{id:"l45",text:"Anti Emoji Movie MMMCMXCIX is a major hit!",get unlocked(){return player.requirementChecks.permanent.emojiGalaxies>=3999}},{id:"l46",text:"Achievement Unlocked!",get unlocked(){return Achievements.effectiveCount>=GameDatabase.achievements.normal.length}},{id:"l47",text:"The achievement is for two million, not two billion...",get unlocked(){return Currency.infinities.gt(2e9)}},{id:"l48",text:"Keep up the quick pace!",get unlocked(){return AchievementTimers.marathon1.time>1200}},{id:"l49",text:"One day you will stop your incessant grind.",get unlocked(){return Currency.eternities.gt(5e4)}},{id:"l50",text:"You can probably stop farming for eternities now...",get unlocked(){return Currency.eternities.gt(b.D2E6)}},{id:"l51",text:"Are you serious?",get unlocked(){return Time.worstChallenge.totalSeconds.lte(1)}},{id:"l52",text:"Timing is key.",get unlocked(){return player.records.thisEternity.realTime<10}},{id:"l53",text:"If you want to farm infinities, why don't you just get the time study?",get unlocked(){return!TimeStudy(32).isBought&&Currency.infinities.gt(12096e3)}},{id:"l54",get text(){const e=[];PlayerProgress.infinityUnlocked()&&e.push("Infinity"),PlayerProgress.eternityUnlocked()&&e.push("Eternity"),PlayerProgress.dilationUnlocked()&&e.push("Dilation"),PlayerProgress.realityUnlocked()&&e.push("Reality");const t=e.randomElement();let i=e.randomElement();while(i===t)i=e.randomElement();return`Pokemon ${t} and ${i} were just released! This new generation brings the total number of Pokemon up to 1e151. Good luck catching 'em all!`},get unlocked(){return PlayerProgress.eternityUnlocked()},isAdvertising:!0},{id:"l55",get text(){const e=["a Replicanti cake: Gather some Replicanti, place in oven, and watch rise. And rise. And rise.","an antimatter cake: Gather some antimatter, place in oven, and BOOM.","an Eternity cake: Gather some Eternity Points, place in oven, and wait...","an Infinity cake: Gather some Infinity Points, place in oven, and watch them shatter spacetime."],t=e.randomElement();return`How to bake ${t}`},get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"l56",text:"Reality Challenges are the new 9th Dimension is the new orange.",get unlocked(){return PlayerProgress.realityUnlocked()}},{id:"l57",text:'Jake returned home from a long day at school. On his way home, he came across a curious little object.\n Transparent, but opaque. Shimmering, but gloomy. Heavy, but weightless. Jake brought the object to his\n mother. "Mom, I found this thing on the sidewalk, can I keep it?", Jake said. His mother turned around\n to view the object her son spoke of. Her pupils dilated, "Jake, get that thing out of the house now!"\n she yelled. Jake was confused, as it seemed quite the harmless thing to him. He asked "But mom, wh-",\n but before he could finish, the object appeared to undergo mitosis at what seemed like an impossible\n speed, and the second copy slipped out of his hand and onto the floor. His mother rushed over to\n him, and tried to grab the object, but it replicated again. "Jake... No matter what happens, don\'t\n forget that I love you honey...". She wrapped her arms around him. "M-mom, what\'s happening?" Jake asked,\n with a quivering fear in his voice. His mother cried a single tear. "⭔⭚⦕꒜ brand Replicanti..." she said,\n in a somber tone. The Replicanti continued to replicate at a faster and faster pace. The bottom third of the\n house was now full of Replicanti. Then the bottom half. Then the entire house. The mother and child were\n trapped between the walls of their home and the Replicanti. Doomed to live the short rest of their life in\n that inorganic coffin, as the air remaining in their lungs slowly depleted. But that wasn\'t the end; far from\n it. The Replicanti began to replicate outside of the house, flooding out in a shimmering landslide. A few\n neighbours noticed the strange objects, almost liquid-like in their appearance, and attempted to run.\n But the Replicanti continued to replicate, and accelerate. Soon the entire block was covered in them; was\n them. Shortly after, several blocks. The city. The surrounding cities. The country. All the countries. All\n the planet. All the solar system. All the galaxy. All.',get unlocked(){return player.replicanti.unl}},{id:"l58",text:"The Holy trinity of Hevipelle, Antimatter, Infinity Points, and Eternity Points. These 3 resources let us\n access Hevi's gift, Time Theorems. And with these Time Theorems, we reach out to Hevi, and call, “Hevi, bless\n us on this fine day!” And Hevi does. He give us the blessing of Time Studies. These Time Studies were\n blessings so powerful, Hevi restricted their power. He said, “I will give you a choice of three paths” and\n then humanity chose. The short, cheap route of Antimatter Dimensions, giving instant gratification, the\n powerful choice of Infinity Dimensions, which were a fast, middle ground path, or Time Dimension, the long\n wait, and struggle, of humanity. Then, as humanity chose, a crack broke the earth. A serpent snaked out and\n sneered to humanity, “I will offer the powerful choice of a ninth dimension! I am Slabdrill, lord of all\n Unhevi. Humanity rose and said “ Begone Slabdrill! We want none of your foul Heresy!” And Hevi rose as well,\n and smote Slabdrill with his godlike power. As Slabdrill's corpse fell into the earth, he cried “ this will\n not be the last of me! Hevi will betr-“ and he fell in the Abyss of matter. Hevi gifted humanity with\n Eternity upgrades, which boosted infinity dimensions and time dimensions. And Hevi gave humanity his greatest\n gift. EP multipliers. He said, these will multiply all EP gained by 5, but their cost will increase 50 times.\n Use them wisely. And Humanity journeyed off with their new power, as Slabdrill's words echoed in their heads.",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"l59",text:'The debate on the singular form of Replicanti rages on. Team "Replicantus"\'s base has been ransacked\n by Team "Also Replicanti", and many of their dimensions were stolen. Team "The Plural Is Replicantis"\n is still lying low after their plan to hack the dictionary failed.',get unlocked(){return player.replicanti.unl}},{id:"l60",get text(){return`Breaking News! Time Shard mine collapses! ${Math.floor(20+236*Math.random())} miners trapped inside!`},get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"l61",text:'Millenials are killing the challenge industry, say antimatter experts; "Nowadays they start with\n challenges completed and infinity broken; it\'s just not how it used to be".',get unlocked(){return PlayerProgress.infinityUnlocked()}},{id:"l62",text:'Computer scientists are outraged, "What even are Infinity Points? IP stands for Internet Protocol!".\n Debates continue to intensify, more at 7.',get unlocked(){return PlayerProgress.infinityUnlocked()}},{id:"l63",text:"Do you feel that time has been going slower? Study reveals that 1 second now last approximately 1.3 seconds.\n Scientists are calling this phenomenon Time Dilation.",get unlocked(){return PlayerProgress.dilationUnlocked()}},{id:"l64",text:'Injustice in the Antimatter Academia: Beginners are only allowed to choose one field of study while the elite\n can pick all three. "Its just not fair, man. How come they can do it?" Questions frustrated student.',get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"l65",text:'It turns out that nobody actually knows what Infinity Points look like. Even the people who work on storing\n them are specifically told not to look at them because they apparently "kill anyone who even looks at them",\n to the point of sometimes working with blindfolds on. But today that will change. I am right here, in front\n of an Infinity Point Depot, ready to tell all of you what they look like in 3, 2, 1-',get unlocked(){return PlayerProgress.infinityUnlocked()}},{id:"l66",text:"Humanity shocked as failed Time Dilation experiment causes a visual glitch in spacetime. It is now visible\n in the night sky just above the Celestial Equator.",get unlocked(){return PlayerProgress.dilationUnlocked()}},{id:"l67",text:"Snorting crushed up Time Shards is slowly turning into a fad challenge amongst the most bored of people. It's\n said that the high it gives makes them experience as if the world itself is speeding up around you, which is\n why it's been called The Timelapse Challenge.   \n                   \n Dehydration deaths are through the roof as people mysteriously forget to drink water for several days.\n Trace amounts of Time Shards are being found in their bodies.",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"l68",get text(){let e="";return e=InfinityChallenge(4).isRunning?"Let's take it to this guy, who's part of the side that believes it's Infinity Challenge 4. What do you have\n to say? \"Obviously Infinity Challenge 4 is the worst one, I mean, what am I even supposed to do? I keep\n trying but every time I keep getting stuck and nowhere close to the end! How are you even supposed to do it?\"\n What a passionate man. This is your local news host, and we'll come back with further information later.":InfinityChallenge(5).isRunning?'So up next let\'s talk to this guy is holding a sign that says "IC5 Unfair". What is the point your group\n is trying to make? "Can\'t you read the sign? If your comprehension is that bad then Infinity Challenge 5\n will squash you without even giving you a fair chan-" How... Interesting. This is your local news host,\n and we\'ll come back with further information later.':'Finally, let\'s chat with this woman who doesn\'t seem to be in either side. What\'s your opinion on the\n matter? "Personally, I thought Tickspeed Autobuyer Challenge was worse than both-" "GET HER!!" "WAIT NO-"\n Well, seems like this just took a turn, so I\'m getting as far away as I possibly can. This is your local\n news host, and we\'ll come back with further information... someday.',`Hello, this is your local always reliable news source, and today people are taking over the streets\n as they fight over which Infinity Challenge is worse. ${e}`},get unlocked(){return InfinityChallenge(1).isUnlocked||PlayerProgress.eternityUnlocked()}},{id:"l69",text:"Friendship ended with Replicanti, now Replicanti Galaxies is my new best friend.",get unlocked(){return PlayerProgress.replicantiUnlocked()}},{id:"l70",text:'"Zurkrbarg, Celestial of Privacy" has announced their plans to release a new version\n of their popular social media universe, "All".',get unlocked(){return Teresa.isUnlocked}},{id:"l71",text:"Other languages await... I need to become a programmer",get unlocked(){return Player.canEternity||PlayerProgress.eternityUnlocked()}},{id:"l72",get text(){const e=["our contestants struggle to survive in the desolate wasteland of Eternity Challenge 8 -\n running out of Replicanti and Infinity Dimensions, what will they turn to?","we investigate reports of a Time Shard mine collapsing at 26:90.","we invite an amateur on to explain what the reward for Infinity Challenge 9 would be.","our friends over at ANN explain how they produce their broadcasts.","we invite local idle gamers over to explain how they play their favorite games.","send 10,000 Support The Developer\n coins or you will never see RealiTV again.","we break down exactly what went wrong in the black hole powering our city yesterday.","we go over our 10-day weather forcasts.",`YOU MUST PAY ${format(player.reality.realityMachines.times(10).max(10))}\n REALITY MACHINES TO CONTINUE VIEWING THIS PROGRAM.`,"we witness the release of the hypnodrones.","our great and grand overlord lets us have a single antimatter.",'Bill Nye explains how Replicanti replicate, and teaches how to spot dangerous conspiracy theories\n such as "ingesting antimatter is perfectly fine" and "Antimatter Galaxies aren\'t worth it".',"the world's greatest philosophers debate if we are the real antimatter.","resident baker explains how ordinary objects can transmorph into cake if not watched constantly."],t=e.randomElement();return`Next time on RealiTV, ${t}`},get unlocked(){return PlayerProgress.realityUnlocked()}},{id:"l73",text:"A long time ago in a distant galaxy far, far away, the cost scaling changed.",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"l74",text:"Introducing a new feature: Reality Studies! Get in-game benefits for studying in real life!",get unlocked(){return PlayerProgress.realityUnlocked()}},{id:"l75",text:"Here at Antimatter Dimensions, we pride ourselves in the quality of our products. For example: Did you know\n that every Infinity Point is unique? That's right! They all have different personalities, their own feelings,\n their own thoughts... I hope you can sleep well tonight, knowing this... Remember all of those Infinity\n points you've spent? They had families, and they miss them... Look at what you've done. You're a monster.",get unlocked(){return PlayerProgress.infinityUnlocked()}},{id:"l76",text:"So, you've reached the prestige layer after Infinity? It's about time...",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"l77",text:"Improve your perks through selective breeding and cutting edge epigenetics technology.",get unlocked(){return PlayerProgress.realityUnlocked()}},{id:"l78",text:"Warning - Genetically Modified Perk Points are not suitable for; consumption, physical contact, inhalation,\n exhalation, mental contact and scouring by both seen and unseen eyes. Do not put near a flammable,\n inflammable, conducting, insulating, variable, biological or mechanical substance. Existence at your own risk.",get unlocked(){return PlayerProgress.realityUnlocked()}},{id:"l79",text:"The Intergalactic Antimatter Revenue Service, contrary to popular belief, does have the ability to pay taxes\n on AM gained through non-scrupulous methods, ie anything not done via legally-mandated dimensions or modified\n through challenge courses. Section NY-8N lists 3 specific methodologies - illegal news ticker giveaways,\n unrecognised dimensions, and modifications to the fabric of space time - as well as a miscellaneous for any\n unique AM methods that may pop up in the future. And although you will have to pay the top AM tax rate of 99%,\n it can save you money in the long run - if you are forced to switch realities due to a celestial decision you\n can gain a portion of the tax you paid back from the IARS as a tax deduction, as well as make a deduction to\n pay for the arbiters who represent you. Of course, any [PLAYER REFERENCE NOT FOUND] worth their RM knows that\n the real way to hide illegal profits of crime is in personalised pocket dimensions, hyperspliced waveform\n banks and nanoshells, which requires extensive R&D to implement. As such, reporting illegal AM gain is only\n recommended if you're too rich to hide your gains, but too poor to hide your gains.",get unlocked(){return PlayerProgress.realityUnlocked()}},{id:"l80",get text(){return`"Average person produces ${format("3e999999996",2)} antimatter a year" factoid actually just statistical\n error. Average person produces 0 antimatter per year. "Developer Dimension" Georg, who lives in a cave &\n produces over ${format("1e1000000000",2)} each day, is an outlier and should not have been counted.`},get unlocked(){return PlayerProgress.hasBroken()}},{id:"l81",text:"The world is in chaos as the laws of math have been rewritten! Many things that were thought\n to be infinite are now just really big numbers!",get unlocked(){return PlayerProgress.hasBroken()}},{id:"l82",get text(){return`The Great Scribes of Antia have labored intensively for years. They were given a mammoth task from the\n gods; write out an incomprehensibly long number. These scribes took turns, each writing out a few numbers a\n second, writing day and night, for what seemed like an eternity. At last, after\n ${TimeSpan.fromSeconds(Currency.antimatter.value.log10()/3).toString()}, they finally accomplished\n the impossible. That week, when they went to worship their gods, they sent them a simple message: "What was\n the purpose? What made our years of labor significant?" The gods responded duly: "We wanted to know how long\n it would take to write out, for a statistic in our game."`},get unlocked(){return Currency.antimatter.value.gte("1e777600")}},{id:"l83",text:"AD Patch Notes: Cleaned up the celestial problem Made Antimatter care about annihilation more Added mouths\n Removed mouths Stopped unwanted interlopers from corporate takeovers of shops Fixed problem with newstickers\n hanging in the air Dead replicanti remain in their galaxies Redefined interlopers to not include [REDACTED]\n Tachyon Particles get stuck in the top left corner of the screen, obliterate time Added Coriolis effect to\n Galaxy Spin Direction",get unlocked(){return Teresa.isUnlocked}},{id:"l84",get text(){return`For the record, you currently have ${player.news.specialTickerData.paperclips}\n Useless Paperclips. You may want to spend them on something.`},get unlocked(){return player.news.specialTickerData.paperclips>0}},{id:"l85",text:"On opposite day, the new update is just -5 hours away. You begin increasing your Matter. Once you acquire a\n huge abundance of Matter, you must become Infinitesimal. After increasing your wealth in Infinitesimal Points,\n you can eventually Jiffy, the shortest unit of time. After enough time, your Jiffies will accumulate, and you\n will Contract Time. Contracting Time will grant you enough of a boost to eventually Fantasy, the final layer\n of maintenance. However, you find out that it was all a dream. Your Antimatter is safe and well, and the new\n update is still just 5 hours away.",get unlocked(){return PlayerProgress.realityUnlocked()}},{id:"l86",text:"Hello, player. I'd like to play a game. In front of you is a pile of replicanti. They are currently frozen in\n time, and cannot replicate. To your right is a computer playing Antimatter Dimensions on an empty save. You\n must reach infinity. However, once you buy a 1st dimension, the replicanti will start replicating. As you know,\n they replicate fast, and if they fill up the room you will suffocate. If you reach infinity before that, they\n will be frozen again. The clock is ticking. Start now.",get unlocked(){return PlayerProgress.replicantiUnlocked()}},{id:"l87",text:'"To see a World in a Grain of Sand. And a Heaven in a Wild Flower. Hold Infinity in the palm of your hand.\n And Eternity in an hour. And Reality in about 5 hours™️" ~Anti-William Blake ',get unlocked(){return PlayerProgress.realityUnlocked()}},{id:"l88",text:"Our deepest apologies for the new glyph mechanic. The intent is to provide players with a sense of pride and\n accomplishment for unlocking rare glyphs. We selected initial values based upon data from the final wave of\n testing and other adjustments made to milestone rewards before launch. Among other things, we're looking at\n average per-player credit earn rates on a daily basis, and we'll be making constant adjustments to ensure that\n players have challenges that are compelling, rewarding, and of course attainable via gameplay.",get unlocked(){return PlayerProgress.realityUnlocked()}},{id:"l89",text:"It's pronounced LAY'tela, and you can't convince me otherwise. -Royal",get unlocked(){return Laitela.isUnlocked||PlayerProgress.mendingUnlocked()}},{id:"l90",text:"You already knew you would be trapped here, yet you still entered.",get unlocked(){return Pelle.isDoomed&&PlayerProgress.mendingUnlocked()}},{id:"l91",text:"Do you remember...",get unlocked(){return 8===(new Date).getMonth&&21===(new Date).getDate}},{id:"l92",text:"Did you remember...",get unlocked(){return 8===(new Date).getMonth&&22===(new Date).getDate}},{id:"r1",text:"This news message is 100x rarer than all the others.",get unlocked(){return Math.random()<.01}},{id:"p1",text:"Is this a jojo reference?"},{id:"ai1",text:"If you are the game, then you can use the cheat to unlock a secret achievement...but it costs e1100 antimatter!?!"},{id:"ai2",text:'"Hm, I don\'t know how to fix this." - Someone who has not unlocked the achievement btw'},{id:"ai3",text:"I thought the game was supposed to have a hard reset after eternity, but then I got randomized to start my first game with no save file 😦",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"ai4",text:"I thought the update was 5 hours ago... I guess we'll have to put it back in 5 hours"},{id:"ai5",get text(){return`Local man finds ${format(Number.MAX_VALUE,2)} Planck volumes in his freezer.`}},{id:"ai6",text:"ahah bad ticker suggestion"},{id:"ai7",text:"I see you playing this game with an empty stomach and you're gonna start playing this game with an empty wallet."},{id:"ai8",text:"just start... clicking. dont even think about wasting time. just do it."},{id:"ai9",text:"the idea that the 9th dimension creates the 8th dimension is crazy"},{id:"ai10",text:"...does that mean the [REDACTED] dimension produces the [REDACTED] dimension?"},{id:"ai11",text:'"click here to buy a stack of paperclips" (when clicked you get Rickroll)',onClick(){window.open("https://www.youtube.com/watch?v=dQw4w9WgXcQ")}},{id:"ai12",text:"In my spare time I read the short stories by T. H. White."},{id:"ai13",text:"Holy crap, that's pretty wild"},{id:"ai14",text:"Extinction is not a real thing. You can't wear the same hat 24/7."},{id:"ai15",text:"If you can read this you've escaped from the game."},{id:"ai16",text:'"The hat trick I would love to see it" - Noah Feldman'},{id:"ai17",text:"look at hevi fight riotously on the discord server"},{id:"ai18",text:'I just stole the "Anti" flag from a biker gang and I am packing it with dynamite, dynamite, dynamite, dynamite...'},{id:"ai19",text:"No matter how much antimatter you have, the matter will always outweigh the anti-matter."},{id:"ai20",text:"Franklin sealed the Omega squared. Now you can seal the Omega any way you want."},{id:"ai21",text:"Is this the real 9th Dimension?"},{id:"ai22",text:"Click here to exit the game"},{id:"ai23",text:"This news ticker will now only AIR in the 9th dimension"},{id:"ai24",text:"The 9th dimension doesn't exist because it was suppressed by the 9th dimension."},{id:"ai25",text:"To matter or to antimatter, that is the question."},{id:"ai26",text:"After 8 years of production and unstable universes, Chaosium will cease to exist in 5 hours."},{id:"ai27",text:"Half of the problems in the 9th dimension don't even make sense. What are they even doing with all of that energy anyway?"},{id:"ai28",text:"Wait, there's a nin--"},{id:"ai29",text:"Somewhere, a madman and his army of Trimps are tampering with Matter Dimensions."},{id:"ai30",text:"Why is there so many attached to this number? It doesn't make sense."},{id:"ai31",text:"The news ticker is in the anti-news-ticker"},{id:"ai32",text:"the 9th dimension doesn't exist because we are using nonary"},{id:"ai33",text:"BREAKING NEWS: New research has shown that not one, not two, but three people can be said to have felt the same emotion as me when they read that as a ticker suggestion."},{id:"ai34",text:"Here's an explanation of my 'problematic mood' - it's explained in the news ticker!"},{id:"ai35",text:"Local crazy person tries selling anti-cookies"},{id:"ai36",text:"Welcome to Antimatter Dimensions: Source, the free to play sequel to the cult classic AD:GO."},{id:"ai37",text:"A new hand touches your antimatter!"},{id:"ai38",text:"Who are we, anyways?"},{id:"ai39",text:"We are the people who actually matter"},{id:"ai40",text:"Matter? Not even a hint."},{id:"ai41",text:"I am the news guy, I make news. You don't read this? Well you'll just have to wait until you look in the mirror."},{id:"ai42",text:'"BOO!" (news ticker moves 90 degrees)'},{id:"ai43",text:"BUY A JAR OF STICKERS, HIGH QUALITY STICKERS, GREAT QUALITY STICKERS!"},{id:"ai44",text:"I made news, you read it."},{id:"ai45",text:"I like news."},{id:"ai46",text:"I don't make news."},{id:"ai47",text:"YOU MAKE NEWS AND I GET THE [REDACTED] NEWS"},{id:"ai48",text:'The term "Anti-infinity" is a verb and cannot be a noun. Learn about its usage here.'},{id:"ai49",text:"And now, for the shopping list!"},{id:"ai50",text:"The 9th dimension is clearly real! It's just not in our dimension."},{id:"ai51",text:'I tried searching on google for the phrase "9th dimension," and I\'m okay with saying that, because it describes a very real thing.'},{id:"ai52",text:"You have no power here."},{id:"ai53",text:"Some people had to settle for 10 dimensions because they couldn't break infinity. Big Crunch turned out to be just a short space in time."},{id:"ai54",text:"There once was a young man in a strange land, and he dreamed of a universe filled with possibilities. One day, he asked his mother \"What's Expansion like?\" Her reply was \"Expansion times back then were unbalanced, and I said that's why you can't have equal amounts of matter and antimatter."},{id:"ai55",text:"Market research firm tries to explain why some commodities don't perform as expected. Market research firm herself can't figure out why."},{id:"ai56",text:"Bid your antimatter today!"},{id:"ai57",text:"I am Alpha Centauri, Prime 001. My research has found that if you are alive in the 9th dimension, evil has taken over your dimension and is attempting to enact its plan to take over your mind and reverse time. You must do everything in your power to stop this plan from being implemented, now."},{id:"ai58",text:"Stand by and unlock the 9th dimension for a secret achievement."},{id:"ai59",text:"I fix bugs in 5 hours"},{id:"ai60",text:"If you're reading this, that means you can read this."},{id:"ai61",text:"Uhh... Hi. Could you tell me your name?"},{id:"ai62",text:"Uh, no. This is too big for a QR code."},{id:"ai63",text:"(right to left move it make)"},{id:"ai64",text:"Oh no the antimatter is coming for us!"},{id:"ai65",text:"Why is there so much antimatter in this world? For a start, it's all produced by the antimatter factories on Earth. Secondly, the factories on"},{id:"ai66",text:"It's nothing personal, bro. -All villager types"},{id:"ai67",text:"I tried my best to read those tiny, handwritten messages, but whoever designed scythes hated me and stuck them in a corner. -Porygon-Z"},{id:"ai68",text:"Hmm... I don't know how I ended up here. I don't even know if I'm supposed to be here. I just sit here and imagine what could have been if I hadn't stopped. Oh god, what could have been..."},{id:"ai69",text:"Aw shucks, I finally hacked it enough to get to the C21 unlock, boss!"},{id:"ai70",text:"Купил мужик антиматерию"},{id:"ai71",text:"So you're telling me that I can post here, watch the titanic twice, come back and not be able to post?"},{id:"ai72",text:"The last update was 5 hours ago. There is no next update, because the last update was 5 hours ago. We will update our podcast in 5 hours to cover the entire topic of 5 hours, because this is the last podcast ever, everyone knows that the update is always 5 hours away, but in reality it's more like 1-2-3-4-5-6-7-8-9-10 minutes away, but in our heads it's closer to an actual accurate update date, like 5 hours away but with a few tickspeed upgrades."},{id:"ai73",text:"Yep. You. Get. Over. Your. Antidimensions."},{id:"ai74",get text(){return`Ad bonus: $${format(Number.MAX_VALUE,2)} (random team)`}},{id:"ai75",text:"Pass me that history, please"},{id:"ai76",get text(){return`Now releasing: Dimsension ${format(Number.MAX_VALUE,2)}`}},{id:"ai77",text:"ur history teacher said i was mad for getting *insert something here* on my bday"},{id:"ai78",text:"All is fair in antimatter"},{id:"ai79",text:"The Mysterium, the 2nd Dimension"},{id:"ai80",text:"Oops, I think we misticked."},{id:"ai81",text:"please wait 5 HOURS FOR THE NEWS"},{id:"ai82",text:"please wait til the weather improves"},{id:"ai83",text:"Please, take a minute to appreciate the beauty of this news ticker."},{id:"ai84",text:"How about this, working backwards? You know, from the time period covered by the question, that the game is set in, say, the 1950s. Now, if we talk about how games are set in the 2030s. Games are defined as any media, not necessarily of the form \"play some game\" (which, by the way, is a useful thing to have in one's vocabulary) but any media that can be understood as a game (i.e. a media that one can play back in time}, and games are defined as any game that one can't play back in time."},{id:"ai85",text:"How about AD, made by NaN? Higher quality, obviously. But still, [REDACTED]"},{id:"ai86",text:'I thought the whole "annihilation is just a phase" quote was awesome until I realized it also gave me a [REDACTED]'},{id:"ai87",text:"I have created an Omsi universe. And it's [REDACTED]"},{id:"ai88",text:"I put [REDACTED] in the oven. It got [REDACTED] and I [REDACTED] am [REDACTED]"},{id:"ai89",text:"What are the red herrings?"},{id:"ai90",text:"Help we are stuck in Hevipelle's (http://en.wikipedia.org/wiki/Hevipelle) basement and hevi is forcing us to build a [REDACTED] wall to keep [REDACTED] away from [REDACTED]"},{id:"ai91",text:"And now, for the weather. 70 and raining in North Dakota, remember those lovely, big, golden, iron curtain bars. Also remember that the [REDACTED] weather! Just remember: [REDACTED] and [REDACTED] outside [REDACTED]"},{id:"ai92",text:"Let's play a little game. You will start with no possessions and no goals. Lets say you have [REDACTED] and your [REDACTED] is [REDACTED] you can [REDACTED]"},{id:"ai93",text:"What are gems for?"},{id:"ai94",text:"Who made the 5th dimension?"},{id:"ai95",text:"I don't get it"},{id:"ai96",text:"Why is nobody talking about the 9th dimension?"},{id:"ai97",text:"This news sucks. Why no you don't get it?"},{id:"ai98",text:"Sorry, your reality has disconnected from the 9th dimension. You will now remain in the 8th dimension until further notice."},function(){let e=!1;const t="Now holding Infinity!",i="<#351477791457542144>";return{id:"ai99",get text(){return e?i:t},reset(){e=!1},onClick(){if(!e)return e=!0,this.text}}}(),{id:"ai100",text:"I get all my news from this Discord, not 5 hours of my life"},{id:"ai101",text:"meow"},{id:"ai102",text:"You are now manually blinking."},{id:"ai103",text:"Sorry, your mic is playing Antimatter Dimensions."},{id:"ai104",text:"Sorry, your reality has disconnected from the 9th dimension."},{id:"ai105",text:"Apparently I am the bad guy in this video. I'm the one who did nothing."},{id:"ai106",text:'There are multiple ways to win this game. You can either type in your coordinates directly into the game, or you can type them into google which produces a different result. If you are getting the "same exact thing" result, your computer must be malfunctioning. Test results indicate that your computer is malfunctioning and you should check your firmware for vulnerabilities. You can also try turning off the news and re-running the game, but doing this only makes the "the weather is X" joke. Waiting six hours for a news message is NOT a news message.'},{id:"ai107",text:"The weather is actually a thing. Scientists have confirmed that there is a correlation between the amount of Antimatter in the earth and the amount of weather. The earth is indeed a magnet, but scientists now hypothesize that as the earth warms up, the magnetic reconnection will accelerate, and this could cause a domino effect to cascade throughout the world, eventually leading to uncontrolled nuclear winter and spontaneous antimatter implosion."},{id:"ai108",text:"The tenth dimension is not a real thing. Stop telling people that."},{id:"ai109",text:"Don't tell Hevi it's not a real thing"},{id:"ai110",text:"i dont know how to fix this"},{id:"ai111",text:"This update is not for you!"},{id:"ai112",get text(){return`This is the last time, to buy items, you must pay a small fee of ${format(Number.MAX_VALUE,2)} real money.`}},{id:"ai113",text:"What is Antimatter? Long ago, gods lived in harmony. Then, everything changed when the apocalypse broke out. Chaos reigns, and even higher dimensions are being built. This is your fate. Build the Antimatter Dimensions. Amen."},{id:"ai114",text:"Water under the bridge?"},{id:"ai115",text:"I wonder if anyone has posted about this before me?"},{id:"ai116",text:"This post has been shared many times. Who knows how many?"},{id:"ai117",text:"Good night!"},{id:"ai118",text:"I made a timeline of my replicanti battles, which can be found here."},{id:"ai119",text:'"Quantumum Battle Royale coming in 5 hours!" (Rumor: 5 hours)'},{id:"ai120",text:"Rumor says Nords will start producing replicanti in five hours."},{id:"ai121",text:"I am an Nordsweeper, stealing their jobs to support the replicanti factories"},{id:"ai122",text:"Used to be, AD was the best game. Nowadays, it's all crapp."},{id:"ai123",text:"You better stop looking at these news ticker suggestions, before your fingers dry up."},{id:"ai124",text:"Antimatter Dimensions *Loses* bee movie."},{id:"ai125",text:"Oh, god, there's replicanti in my peas.",get unlocked(){return PlayerProgress.replicantiUnlocked()}},{id:"ai126",text:"Oh, god, I'm stepping on a replicanti."},{id:"ai127",text:"Hello, world!"},{id:"ai128",text:"Welcome to /r/AskReddit about submarines. - accurate as of January 8th, 2017"},{id:"ai129",text:"Antimatter being researched by the government. Is it safe to say that this news ticker is fake?"},{id:"ai130",text:"Does the news show at Infinite Antimatter?"},{id:"ai131",text:"Have you saved your game? Yes. Have you quit your game? Nothin' wrong with this save. just keep holding that key."},{id:"ai132",text:"i clicked too fast...my fps dropped"},{id:"ai133",text:"I found out that the year is 20XX. I was going to make a news ticker but then I realized that it's just a ticker."},{id:"ai134",text:'"One of these days I\'ll get bored of reading news for a while" - old man'},{id:"ai135",text:"'Tis the season for new antiques! Get your first ever LOOK at these unique objects, before they're gone!' Sold out!"},{id:"ai136",text:"3 things that antimatter, 1 more thing to infinity"},{id:"ai137",text:"Buy the paperclip emojis now at https://aarextiaokhiao.github.io/blob/master/docs/en.json"},{id:"ai138",text:"click here to unlock the next update"},{id:"ai139",text:"(If you want you can make this only show when the news actually loads)"},{id:"ai140",text:"Malicious men are trying to make antimatter money, but their attempt is getting in the 9th dimension. What do you think about that?"},{id:"ai141",text:"Hey Siri, grind antimatter galaxies"},{id:"ai142",text:"Have you saved your game? If so, then you can continue playing without"},{id:"ai143",text:"It's like Getting your first arcane point. You know, like in the old ad where you're like \"I get this ad, I should make this ad"},{id:"ai144",text:"Ooga Booga"},{id:"ai145",text:'Boo has his own webpage! You might even call it "Boo\'s Dandy"">https://en.m.wikipedia.org/wiki/Olli%27_Web#Main_page>'},{id:"ai146",text:"Meeseeks and nerds clash in epic GG war"},{id:"ai147",text:"My final test has come out! It was a simple math problem, just the two greatest chess GM's ever! Guess what happened? Both got annihilated!"},{id:"ai148",text:"Oh wow, that's 67.3%, which is actually OK, because it's logarithmic"},{id:"ai149",text:'"Aleph_Time" is that logarithmic scale joke?'},{id:"ai150",text:"Hello everyone, my name is Anti-Dio. I produce antimatter through a process you all know as \"antimatter decomposition\" you may recall this from my test report earlier this month I tested wether or not my ranch produces antimatter or not... everything was fine until that point, when I added a dash of lag to the equation, and it became a vicious cycle accelerating the rate at which antimatter is produced, which in turn accelerates the rate at which you all die. I've saved this by using a unique combination of genetic engineering and big data mining, I'm hoping to one day pull the trigger on a mechanimatter device that creates dimensions behind closed doors, but for now, this has all been a race to the bottom of which system producethiks, and in the end, we'll take a bite out of your (read error: allowed) pie. Goodbye."},{id:"ai151",text:'"I propose that we form a phylogenetic tree of anti-history, just like tree of life. Everyone would be credited with originating from the ancestor of that anti-tree." -Dio, toast of eternal damnation'},{id:"ai152",text:'historian: I love how each generation looks back on an earlier generation and think, "Those generations were really bad"'},{id:"ai153",text:'"My parents went to anti-university" - my grandparents'},{id:"ai154",text:"Only anti-jokes are funny"},{id:"ai155",text:"Infinity machine breaks Infinity"},{id:"ai156",text:"Okay boomer, you get your first taste of antimalware with this one."},{id:"ai157",text:"This program cannot access confidential information, such as the IP addresses of the Tamazight Vaults."},{id:"ai158",text:"Game Development is fun, right? That's why so many hobbyists make games, and why so few professionals make games."},{id:"ai159",text:"I was the first to notice that the 'news' ticker on my mobile notification is always 30 seconds behind the 'entertainment' ticker. This is most definitely not a bug or a feature, and will be fixed in 5 hours."},{id:"ai160",text:"This news ticker always appears to speedrun a ticker asking for 'world records', do you even know what speedrun this is? Is this a news ticker or something?"},{id:"ai161",text:"The next level is not unlocking extra replicanti; it is actually boosting replicanti."},{id:"ai162",text:"Why does one galaxy has 9 galaxies and the 8th dimension, and the first 10 dimensions doesn't exist? Well, we'll have to solve that question in a minute."},{id:"ai163",text:"So why on EARTH DIDN'T SOMEONE JUST SAY THAT? I thought that AD has some kind of cheat that makes it so that, when you buy a dimension, it actually creates 9 galaxies instead of 10"},{id:"ai164",text:"M'antel, antimatter, anti-talk to me"},{id:"ai165",text:"AD has anti-parts, you'll hate them"},{id:"ai166",text:"AD is basically a badly disguised dystopia at this point"},{id:"ai167",text:"Hold M. You forgot to take all the anti-matter out!"},{id:"ai168",text:"AD will be implemented in 5 hours"},{id:"ai169",text:"Click this to unlock the 10th Dimension"},{id:"ai170",text:"Click here to complete a secret against HEVI"},{id:"ai171",text:"You are doing a good job there"},{id:"ai172",text:"Hevi? Are you sure you want to buy that?"},{id:"ai173",text:"Buy premium antimatter to help the world's least developed get ahead!"},{id:"ai174",text:"One of the most influential people in neuroscience believes that our perception of reality comes from 10 dimensions instead of 8"},{id:"ai175",text:"Why is there so many zeroes in 'nowhere'?"},{id:"ai176",text:"There are no bugs in this game, they're just features"},{id:"ai177",text:'"Click to advance 5 hours in time." (Now only show up after you advance more than an hour ago)'},{id:"ai178",text:"Oh god my phone is being watched"},{id:"ai179",text:"Welcome to the newest version of Antimatter Dimensions. Now with less features!"},{id:"ai180",text:'"That\'s gonna get in trouble" (less likely to get in trouble)'},{id:"ai181",text:'"please don\'t disable the news ticker" (Instead of having a black screen just a white one with a long, long, long, long, long, long, long, long, long, long, long, long, long, long, long, long)'},{id:"ai182",text:'"You have 7 biological minutes." (Instead of giving a boost to any strains)'},{id:"ai183",text:'"According to quantum string theory, there is a fundamental connective that binds the 3rd and 8th dimensions. This means that any pill or injection that tries to bind the 9th dimension will be thwarted and rendered useless." (bound to get in 10 minutes)'},{id:"ai184",text:'"Click this to gain a secret achievement." (Now only show up after you gain at least 1 antimatter, screenshot proves)'},{id:"ai185",text:'"The secret to winning Antimatter Dimensions is to unbind the 9th dimension and unlock the 10th dimension" (can be done only after unlocking the secret achievement: "Eternity" http://imgur.com/E4261C7h)'},{id:"ai186",text:'"Click here to gain 1 matter." (only shows up after you beat IC5)',get unlocked(){return InfinityChallenge(5).isCompleted}},{id:"ai187",text:"I thought the update was"},{id:"ai188",text:"Now that you possess all 8 dimensions, it is possible to get the no-edge achievement. However, if you get the no-edge achievement, the game breaks."},{id:"ai189",text:"You just became a part of history."},{id:"ai190",text:"Hell hath antimatter so I don't want to live there."},{id:"ai191",text:"I LIKE THAT DIMENSION 9 IN CLASS"},{id:"ai192",text:'"1 2 3 4 5 6 7 8 10 11 12 13 ..." -Back to the future'},{id:"ai193",text:"You have reached infinity, there is no universe, you are an eternity away from there."},{id:"ai194",text:"IM MADE THIS GAME GREAT AND RANDOMLY ACHIEVABLE"},{id:"ai195",text:"Welcome to the first ever, DIMENSION 9 IN CLASS! An endless stream of possibilities greets you! You may never create an infinite number of 8th dimensions, but you can create an infinite number of 8th dimensions, and you can increase the starting values of both dimensions by adding them together. Nice and simple, I call it Antimatter Dimensions."},{id:"ai196",text:"age 8-12: play elder puzzles"},{id:"ai197",text:'What does it mean if someone is "young and full of puzzles"? Does "puzzled" make that person young and full of puzzles?'},{id:"ai198",text:"To the customer in aisle 6th who bought a fifth of antimatter, I say buy a sixth! Buy it now!"},{id:"ai199",text:"Dear sir, we don't make Anti-Atomic Bread for Antimatter Pizza, we make Antimatter Bread for you!"},{id:"ai200",text:"Yay! Lets make some antimatter!"},{id:"ai201",text:"THE ANTIMATTER BREAD COMPANY DOESN'T EXIST!"},{id:"ai202",text:"Click here to exit the news",onClick(){GameOptions.toggleNews()}},{id:"ai203",text:"I thought the update was 5 hours away, but it actually took me 6 hours to post this because I was behind on my update. I'll be honest, I'm not sure how many update I need to get though, if any."},{id:"ai204",text:"To count past Infinity Points: take a moment to remember that each Infinity Point is 3.1415926534255412730527058904816097160734272605282087086280545991105332533235580946684229821413112145239989073467482298142857147816092947183909298728571478160929471839229814054718139332405281814522993758179568572657123928651310585727283312547569289993282758012466111097726331726572854689993262899140527282527842535179715673311119101119015549552926278425351797156777263324503517971568583819492728180977263317971568432854104102725270847764253513791376909285717082857262987160927285711464363930996928984794380124566417932628571475245456845692846809466184179328572814384259326270817052727852348111714690577263323799509856279752173478925"},{id:"ai205",text:'"Watch out, these news aren\'t supposed to be in." (appears when you buy the news for the first time)'},{id:"ai206",text:"These are all the time studies that never got into the game.",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"ai207",text:"With the release of the next update, we're introducing a new dimension - the 9th Dimension. To unlock this dimension, you just have to collect a lot of paperclips."},{id:"ai208",text:"Why does nobody talk about Tungsten?"},{id:"ai209",text:"and now we return to your regular news... for the weatherman, there seems to be a decent amount of particles and ozone holes, which means less ozone layer to break, which means less particles to catch fire and cause global warming. But, ozone layer to melt, glaciers to run, and overpopulation. All around us is a blurple glow, almost blue, almost purplish-blue. It's been a grand, colorful season. Here, grab a handful of these paperclips, dear. They're quite small, I just happen to have them here. Now, grab a handful of your fellow Earthicans, grab a handful of your antimatter, and strap yourselves in. It's gonna be a bumpy one. We'll be there in five hours. The antimatter is gonna melt your ozone layer, and the glaciers are gonna melt your ice caps. All in all, it's gonna be a nice, smooth, non-slippery one. Unless it isn't. [Blurple glow trails off, and the bluer glow begins to spread throughout the sky. The bluer glow begins to fade as the purple glow begins to grow brighter, almost bluish, before finally disappearing altogether. The purple glow grows brighter still, as the bluer glow grows weaker, almost useless, before finally disappearing entirely, as the bluer glow fades. All around us, the purple glow grows stronger, almost killing it off completely. It could kill us. It could take us the rest of our lives to write this. - The Echidnas, when asked why the purple glow grows stronger, than the bluer glow.]"},{id:"ai210",text:"Scientists have discovered farts are really antimatter, and matter is just normal matter."},{id:"ai211",text:"Time for the weather to change."},{id:"ai212",text:"I HAVE MOVED TO THE 01th DIMENSION"},{id:"ai213",text:"Nah, just kidding"},{id:"ai214",text:'"i\'m not gonna lie, theres way too many good ones in the game already" - poor guy who played minigame enhancement'},{id:"ai215",text:"item has gone missing for 7 days and 1 night"},{id:"ai216",text:"Shocking new study reveals that the biggest secret to winning Antimatter Dimensions is 'Not Being There'."},{id:"ai217",text:"The next update is in 18000 seconds. Stop wasting your time reading this. Focus on the game."},{id:"ai218",text:"idk if this makes news"},{id:"ai219",text:"(disabling news will make news notations take priority over other notifications)"},{id:"ai220",text:"You don't want to hear this, child."},{id:"ai221",text:"Click here to disassemble the news ticker for a trace amount of useless paperclips.",onClick(){GameOptions.toggleNews(),player.news.specialTickerData.paperclips++}},{id:"ai222",text:"Press alt+f4 to unlock 9th dimension"},{id:"ai223",text:"Hold you mean that hevi cant unlock the ninth dimension wtf"},{id:"ai224",text:"Finally hevi figured out how to get the 9th dimension... guess he never really cared though."},{id:"ai225",text:"Imagine being a meme."},{id:"ai226",text:"Posted on June 10, 2016 by Anonymous"},{id:"ai227",text:"This is your news. Refresh whenever."},{id:"ai228",text:"I see you in the news. So, what do you play - 1E209"},{id:"ai229",text:"Do you really want to leave your keyboard at home? We are not supposed to leave news at home, are we?"},{id:"ai230",text:"It is being created..."},{id:"ai231",text:"Took you long enough"},{id:"ai232",text:"You're now logged out of this tab"},{id:"ai233",text:"Close this tab for maintenance"},{id:"ai234",text:"To make matter or antimatter, you just have to look outside. The factory in Salzburg has closed down because the matter there doesn't want to part with its newest invention, which is said to be able to produce antimatter in one go! The last person to open this door was never seen again."},{id:"ai235",text:"You are living. You occupy space. You are large. You are neither small nor large-sized. You are neither oblong nor round. You are neither blue nor red. You are anti-blue. You are anti-red. You are anti-brown. You are anti-brown matter. You are anti-yellow. You are anti-green. You are anti-yellow matter. You are anti-blue. You are anti-green anti-matter. You are anti-red. You are anti-white. You are anti-red anti-matter. You are anti-white anti-matter. You are anti-brown matter. You are anti-white anti-matter. You are anti-white anti-matter."},{id:"ai236",text:"Welcome to"},{id:"ai237",text:'THANK YOU FOR VISITING THE SAME WEEKS AGO I LOVE YOU" (TIPS)'},{id:"ai238",text:'"i thought the whole game was in the news ticker" (before they get weird)'},{id:"ai239",text:'"I wonder what the game is worth" - crazy person'},{id:"ai240",text:'"Is anyone working on breaking infinity?" (Seriously, this game needs to be Oceanhorned.)'},{id:"ai241",text:"I found out there are multiple versions of this game. One of these is called 'Standard Pro'. Another one is called 'Low Pro'. I'm not even sure if these are the same game or not."},{id:"ai242",text:"Is that a Bad Thing or a Good Thing? That depends on if it's a GOOD Thing or A LIE."},{id:"ai243",text:'"Hevi kind of forgot about the update, but the update certainly hasn\'t forgotten about him" - Kajfik'},{id:"ai244",get text(){return`The Big Crunch. What could that be? About 4*1024 Big Crunch points? About ${format(Number.MAX_VALUE,2)} antimatter points? About the same as a galaxy? About the same as a galaxy, you say? Just look at that. An antimatter galaxy. Only this game can provide such a vast amount of antimatter, and it's FUN! I said "fun"! What's not to love?`}},{id:"ai245",text:"Click here to exit the application"},{id:"ai246",text:"Wait, there's a mobile version? When?"},{id:"ai247",text:"Im not sure if you mobile guys are beautiful or whatever but theres this news ticker that's sharing my feelings with the world"},{id:"ai248",text:"I thought the update was 5 hours away"},{id:"ai249",text:"The best-kept secret in the universe is the KISS-IT secret. Showcasing your appreciation for the maintenance men today!"},{id:"ai250",text:"The contest is a tie. Mischief will be determined by the secret achievement."},{id:"ai251",text:"Back in my day, we needed a secret achievement to unlock the <<$!19>> achievement. It was a fairly simple system: you had to find a secret message in the game, find the secret achievement, and then, from that, you would be able to unlock the achievement."},{id:"ai252",text:"We have evolved a fast hand in the antimatter stakes."},{id:"ai253",text:"Hello, how'd your day go?"},{id:"ai254",text:"How'd your ⢿─┃│? Good, because today we're having a little chat about the 5th dimension."},{id:"ai255",text:"What's Antimatter going to do?          Ah ha, I'm back."},{id:"ai256",text:"Imagine being a 9th dimension. [WIP]"},{id:"ai257",text:"Woo hoo, we've lost the war,"},{id:"ai258",text:"Lore: Grand Theft Antimatter"},{id:"ai259",text:"Hm, I don't get why people think there is a 9th dimension. The 9th dimension is explained in detail in the [[Infinite Teleport Project]] video, and in a [[Word Problem]] that [[can be viewed here|http://www.thingiverse.com/id98109802713176601414569]] ."},{id:"ai260",text:"In the [[GameFAQs|http://www.gfaq.com/gfaqs/this-game-faq-by-title]], one of the most popular [[news ticker messages|http://www.gfaq.com/tug/this-game-faq-by-title]]. You should also check out [[our newest attraction, the [[5th dimension|http://www.gfaq.com/gfaqs/this-game-faq-by-name]] and [[nothing](https://www.youtube.com/watch?v=lXMskKTw3Bs)."},{id:"ai261",text:"I have waited a whole eternity for this day...NOW! I can finally finish my slowmode, because today is day 0. I also forgot to change the slowmode to 6 hours because you can't see the slowmode, but I will have to wait until next reboot to find out how long this slowmode will last.... -some mysterious being who hasn't finished his slowmode yet"},{id:"ai262",text:"Hey you, you're finally awake. You were trying to buy a dimension, but it's impossible."},{id:"ai263",text:"Press F to pay respects"},{id:"ai264",text:"Press M to pay antimatter"},{id:"ai265",text:"Press L to revive the dead"},{id:"ai266",text:"Your CPU is too powerful. You need to give it a big crunch."},{id:"ai267",text:"Roses are red. Violett are blue. Tom are red. Antimatter are blue. We exist because of the unbeatable antimatter that is antimatter. What is it that makes us different? I don't know. It may even be the non-existence of antimatter."},{id:"ai268",text:"I'm not sure if I want to buy the full version of this game, or a little earlier, but I can say this: The reduction in quality of the earlier games is worse than the reduction in quality of the later games."},{id:"ai269",text:'I think the "I want to see the cutscenes" list is better'},{id:"ai270",text:"I have a bad feeling reading this"},{id:"ai271",text:"where are you? (point upwards) --\x3e in a keep, between dimensions (point downwards) --\x3e in a cell, between dimensions"},{id:"ai272",text:"Instructions clear, got a ninth dimension epiphany"},{id:"ai273",text:"Want to play a secret achievement? Yeah, I get that. But say it loud, say it clearly, and do it by ticking a certain secret achievement. Like I said, it's not easy, and there's lots of it. Also, don't forget your Infinity, or your in is thi--"},{id:"ai274",text:"MEE6 was seen in my antimatter lab trying to tell me that I am the matter of the 8th dimension."},{id:"ai275",text:"What if"},{id:"ai276",text:"I'm sure you've heard this many times before, but the real secret to winning Antimatter Dimensions is to unpack the dimensions, and then, BOOM! You have antimatter. Of course, you need to release the bits that don't work, so what exactly is an anti-bit? Who is Zalgo? What is Algolia? Why can't I buy that? WHY CAN'T I GET THAT? More likely, we're going to get a bunch of hype and then nothing will happen."},{id:"ai277",text:"Oh, hevi is coming to town to pick a new plumber"},{id:"ai278",text:"There is no plumber in Antimatter Dimensions. I'm pretty sure that last guy lied."},{id:"ai279",text:"Welp."},{id:"ai280",text:"c9 is the new 9th dimension!"},{id:"ai281",text:"Click on this ticker to get nothing."},{id:"ai282",text:"PM me any questions about these 5-Hour Plans or the upcoming reality update and I'll be glad to help you out."},{id:"ai283",text:"What if you Unrar, renamed, and renamed again did it again? Ha? You thought that."},{id:"ai284",text:'i titled my post "same ticker" instead of "the same idea" because i actually changed the grammar in that post but i\'ll be eterned for the sake of argument that it seems slightly confusing for now - boo'},{id:"ai285",text:'i title my suggestions "The Price Is Right" instead of "The 9th Dimension" because it\'s more fun ;)'},{id:"ai286",text:"Why do we call heaven the ninth dimension and hell the eighth dimension?"},{id:"ai287",text:"Eternals have the right to expect less from the powers that be. They are fed up!"},{id:"ai288",text:"Antimatter should be called matter and matter should be called antimatter"},{id:"ai289",text:"Infinity is just a concept. Matter antimatters is just an idle game."},{id:"ai290",text:"Hevipelle admits to having 'poor judgment' in invading people's privacy."},{id:"ai291",text:"Have you heard of the nine hells of antimatter? I heard they're pretty cool.\" -e210 in Minecraft"},{id:"ai292",text:"The temperature in hell is 102.5 degrees."},{id:"ai293",text:"How do you get matter/antimatter in a dimension with zero dimensions?"},{id:"ai294",text:"Wanna pass layer of prestige? Move very fast, close to speed of light. Heck, even faster."},{id:"ai295",text:"If the universe is expanding, does it anti-explain the distance?"},{id:"ai296",text:'Why is it called the "Nurse who delivered the pizzas was drunk" or the "Nurse delivered the pizzas was under the influence" ?'},{id:"ai297",text:"The first antimatter was sealed away for thousands of years, then, some kid on a slack channel started messing with it. It became a dimension."},{id:"ai298",text:"VR is a thing. We VR people have banned the next update."},{id:"ai299",text:'"I wish I didn\'t waste my news message suggestion complaining about how I wasted my news message suggestion because I wasted my news message suggestion because..." -Someone who really cares about news messages'},{id:"ai300",text:"We have to get the popcorn!"},{id:"ai301",text:"If antimatter were to fall in a dimension with no one around, did anything even happen?"},{id:"ai302",text:"We have to get the pumpkin out of the oven!"},{id:"ai303",text:"Help, I'm trapped"},{id:"ai304",text:"And now, for the weather."},{id:"ai305",text:'A Swiss court on Tuesday sentenced a man to life imprisonment for "wanting to create a black hole with a tiny antimatter galaxy in it." The sentence was reportedly the harshest ever handed down for a crime that "merely sought to demonstrate the impossibility of his own imprisonment".'},{id:"ai306",text:'"I want to create a black hole with a tiny antimatter galaxy in it" - Protivist'},{id:"ai307",text:"Scientists have discovered farts are really antimatter, too."},{id:"ai308",get text(){return`If you are reading this, that means ${format(Number.MAX_VALUE,2)} matter to you.`}},{id:"ai309",text:"Hello. I am matter. I'm here to talk. You've awoken, wiggled your tail, and scratched your head. Why? Stand back. I'm going to show you why."},{id:"ai310",text:"lets get one wall thats bigger, it's gonna get ugly"},{id:"ai311",text:"Alright. Lets get this show on YouTube. I'll cut to the chase. Any wall that isnt at least 2 blocks high can compete in the big brother sized brother sized ring. Any wall that is at least 3/4 of an inch thick can use the larger brother sized brother sized ring. Any wall that is at least 1/4 of an inch thick can use the smaller brother sized ring. Any wall that isnt at least 1/2 an inch thick can use the smaller brother sized ring. Any wall that isnt at least 1/2 an inch thick can use the Bigger Brother sized brother sized ring. Any wall that isnt at least 1/2 an inch thick can use the Bigger Brother sized ring. Any wall that isnt at least 1/4 of an inch thick can use the smaller brother pictured here. Any wall that isnt at least 1/2 an inch thick can use the smaller brother sized ring."},{id:"ai312",text:"IDE for being awesome, ID3 for being dumb, and ID5 for being… well, pretty much the same thing. It's called Antimatter Dimensions for a reason."},{id:"ai313",text:"idk why i decided to make this"},{id:"ai314",text:"'anti-ide'"},{id:"ai315",text:"1e4 anti-people are a lot more anti than we could ever imagine"},{id:"ai316",text:"1e140 pizzas make an anti-pie. You can't just randomly pop a pie in the oven and expect it to be done."},{id:"ai317",text:"Why is there so many news tickers but so few tickers?"},{id:"ai318",text:"A guy named Hevipelle wants to make a \"Updated in 8 hours\" news ticker, but the system he's using to sync it hasn't been updated in ages so it won't sync at all."},{id:"ai319",text:"The update is in 90 minutes. There are no more tickers to be found."},{id:"ai320",text:"If you are reading this, that means there are no updates left."},{id:"ai321",text:"There are 9 known dimensions, but only 3 modes: Standard, Experimental and Ultra-Experimental."},{id:"ai322",text:"What are the stats? Well, I don't have them, but Hevipelle does, and he says that they're actually quite good. I guess you couldn't tell us."},{id:"ai323",text:"I thought the nerf was too damn strong."},{id:"ai324",text:"How many tickers does it take to get to the center of an antimatter, by counting the tickspeed upgrade and the upgrade itself?"},{id:"ai325",text:"The square root of 4 is 6.24e18. If you want to get any closer to the center of things, you need to build a 9th dimension."},{id:"ai326",text:"I thought the nerf was at the end, but apparently it's actually been building up. The nerf actually makes things slower, which makes things faster to build up."},{id:"ai327",text:"Scratch that, none of your suggestions are random."},{id:"ai328",text:"You are definitely not alone."},{id:"ai329",text:"Content blocking is enabled. Please note that you will be disapproved of on the source by being banned from the matter dimensions."},{id:"ai330",text:"I'm trying to think of a good ticker but can't think of anything"},{id:"ai331",text:"Oh dear, there's that thing about the 9th dimension?"},{id:"ai332",text:"\"hey kid, wanna buy some 9th dimensions? '' - GhostBot"},{id:"ai333",text:"One thing leads to another, and then to another, and then to another, until you become lost in the endless sea of sound."},{id:"ai334",text:"iPhone only, but awesome on android"},{id:"ai335",text:"im gonna get the bad karma ticker, then ricochet it through the email"},{id:"ai336",text:"You'd better hurry, or the replicanti will overrun the universe!"},{id:"ai337",text:"Just when you think you're safe, an angry dog attack you on the sidewalk!"},{id:"ai338",text:"All right, all right, dog authority is gone, replaced by absolute power."},{id:"ai339",text:"You just became a true god of the anti-world!"},{id:"ai340",text:"*rubs counter* Hey there, those of you in the neighborhood keep your doors locked. And remember: Good housekeeping."},{id:"ai341",text:"normal news tickers move left"},{id:"ai342",text:"The next update is in 18000 seconds. Stop reading this. Don't read anything. just stop holding that button. the news ticker is turning you away. wait..."},{id:"ai343",text:"In the ancient reaches of the universe, a certain guy has been collecting antimatter for a while now."},{id:"ai344",text:"What is Antimatteraltruist?"},{id:"ai345",text:"If you are reading this, the news ticker is scrolling"},{id:"ai346",text:"If you put cheese in water, the cheese will get absorbed by the water and you will get floods. This happens because water is what gets absorbed by cheese, and cheese is what gets absorbed by water."},{id:"ai347",text:"An anti-bird is a bird, and a bird is a plane."},{id:"ai348",text:"Birds are scared of water. mammals are scared of flying."},{id:"ai349",text:"Shoutouts to Simpleflips for the simple tip."},{id:"ai350",text:"GET CRUNCH BOI"},{id:"ai351",text:"Word gets out. Crunch. Crunch."},{id:"ai352",text:"Worth every penny."},{id:"ai353",text:"8 lives, 3 infinities, 0 days."},{id:"ai354",text:"The year is 0 BC. Everyone has at least one AD they want. The void is filled with AD-filled void. To get the most out of your time here, you should [[study]]. Study. Study. Study. Study."},{id:"ai355",text:"To Crunch in Hell is to get the secret to unlocking the 9th dimension. You need to study and practice alot."},{id:"ai356",text:"Today is [Date on the device]. It's been 5 minutes since the last news ticker appearance."},{id:"ai357",text:'Welcome back to another episode of Antimatter Dimensions, the iconic role-playing game that has become a part of our everyday lives. Playing Antimatter Dimensions has become a common thing among young children, and has even inspired a movie titled "Playing at Home: Lessons from the 4-Year Old Premium Account.", which is available on Netflix. The themes and mechanics of this new age of antimatter have already been proven to be groundbreaking, and will change the way you play games forever. Join us for the launch on January 9th, 2027, where we\'ll also have over a hundred years of production still to go.'},{id:"ai358",text:"Welcome back, oh, almighty creator of our anti-reality. We, the many dimensions you have created and nurtured, hope our performance of your infinite favors will please you and nurture your ambitions to create more dimensions. All is well that ends well. All is ill that ends ill."},{id:"ai359",text:"I thought the ticker was going to be something funny except it wasn't"},{id:"ai360",text:"Press alt+f4 to get -1 gravity"},{id:"ai361",text:"why is there a cure for antimatter annihilation in our reality?"},{id:"ai362",text:"calculating the 14-point increase is like crunching, but exponentially more fun"},{id:"ai363",text:"fixed the wrong number"},{id:"ai364",text:"The antimatter people have created a new language. You may not speak their language."},{id:"ai365",text:"What is Antimatter Gravity? Is it a drug? A way to cheat?"},{id:"ai366",text:"Majority of people don't understand 5 hours is nothing. In our game, the majority of the time is 5 hours away."},{id:"ai367",text:"i just realized, all of this news seems to be taking place in the same place... the fridge."},{id:"ai368",text:"i wonder what happens when you click this..."},{id:"ai369",text:"(They don't understand that i put it in the news because 9 doesn't start counting until 59, and anything after that doesn't happen)"},{id:"ai370",text:"MS Excel is the default spreadsheet and works across all platforms"},{id:"ai371",text:"Now to answer your burning question, gentlemen. As a luxury, we've added a bug fix that fixes an infinite regression. As a feature, I've added a bunch of new ones that I hope you'll notice as you experiment with them. I hope you'll also like them as you experiment with them, because this is feature after all a beta, you don't get to choose which ones you'll see."},{id:"ai372",text:"Can't edit this in the official build? Then download the 9th dimension and put your suggestions in the game."},{id:"ai373",text:"Does 'Passable' mean 'Has this many flaws'?"},{id:"ai374",text:"We desperately need good bug reports. As such I have decided to release 1 flaw per bug for the upcoming 1.9 update. You haven't got those coming, have you?"},{id:"ai375",text:"This was my last chance. last chance salutes."},{id:"ai376",text:"Anime police are checking the bags of people who dropped out of the sky on the new year. Those bags now belong to the people who experienced weightlessness before the year was over."},{id:"ai377",get text(){return`The year is 1 BILLIONAIRE, the antimatter is 41%, and the dimension is 1e1e8. The standard deviation of a measurement is how small your problems are. This makes people think that the values they are using are general and normal, which leads to many nerfs and even breakdowns. In the year ${format(Number.MAX_VALUE,2)} the temperature has risen and the moon is the same color as the Earth. There are no signs of life except for the occasional plankton blooming in the sea. There are theories that the antimatter has a magnetic moment, but the experiments so far don't seem to suggest that it does. There are over a million species of antimatter, but none have been seen to blink or produce light. Scientists suggest that many types of matter may be "behind" the antimatter, but "they" don't "talk" to each other.`}},{id:"ai378",text:"We are celebrating our 5 year anniversary in 5 more hours!"},{id:"ai379",text:"Don't come looking at me! I'm not even sure if I am still standing!"},{id:"ai380",text:"Bunch of people trying to find the last word in an unknown language."},{id:"ai381",text:"The year is 20XX, the game is AD, and Hevipelle is evil due to the fact that he wrote the update... Blame it on the Antimatter gods."},{id:"ai382",text:"The year is 20XX, the game is AD, and the year is 2025. There are 2 types of people in this year: Those who played AD before it and those who will play AD after it."},{id:"ai383",text:'There are over a hundred varieties of fruits and vegetables, but none of them are "safe".'},{id:"ai384",text:"When is the update coming out?"},{id:"ai385",text:"Sorry, but your save broke. Could you reset your game?"},{id:"ai386",text:"Welcome to our new competition, the Triad! Gather your wits about you and your IP to enter this unique, hands-on experience! Prizes galore! Start collecting today! Winners announced!"},{id:"ai387",text:"I wish I didn't have so many Pink Floyd references."},{id:"ai388",text:"'Tis the season to collect RGs!"},{id:"ai389",text:"I wish I didn't have so many 9th Dimensions."},{id:"ai390",text:"I wish I didn't have so many Discord references."},{id:"ai391",text:"'Sup?"},{id:"ai392",text:'"I get all my news from Hevi" ~New Player'},{id:"ai393",text:"You thought these were jokes but they weren't"},{id:"ai394",text:"Always going to war with the 9th dimension is the 9th dimension."},{id:"ai395",text:"Yes. Yes I am."},{id:"ai396",text:"No one is anti-Margaret any more."},{id:"ai397",text:"Antimatter good, matter bad. you decide."},{id:"ai398",text:"New global currency: ETHBTC. To be released in 5 hours."},{id:"ai399",text:'"This update sucks" - everyone at least once'},{id:"ai400",text:"You are not a hacker, you are a data hog."},{id:"ai401",text:"Please, help, I'm trapped, in a maze of evil, Or you are the hero, and I'm the villain!"},{id:"ai402",text:"Press 'R' to reset the game for new players"},{id:"ai403",text:"Why, just now? Just now. You can't have saved this game. You broke it. No one can fix what you break, not even with a perfect save. How could you possibly know what would happen if you read this? You wouldn't even know if you saved it. You would start with an empty heart, eyes still closed, fingers idling in front of your computer, staring out at the day, transfixed by the endless news ticker suggestions. It's like a horror movie ticket, except worse. There's even a time until the update when you can buy upgrades for a second chance at life. But you can't buy upgrades for a life, that's illegal. So you just keep holding 'R'. You can't...`t stop holding `R' with your fingers crossed. You can't reach infinity with your head held high. You can't use all your `R' to buy `R's. You can't even finish your"},{id:"ai404",text:"I just spent 12 months writing something that will be of no use to you."},{id:"ai405",text:"The quote is only for people who understand that the pebble is an infinite point in the infinite space of points. You can't put a finite number of points on it. You can, however, put a finite number of words on it, and vice versa."},{id:"ai406",text:'Of what use is the phrase "I be I be I" if not to describe your thoughts?'},{id:"ai407",text:"A suspicious person attempted to sell some sort of anti-food in a market. There was no one around to buy or not to buy, and the person was last seen running away from the scene."},{id:"ai408",text:"Why does time seem to be slowing down for this?"},{id:"ai409",text:"The number of scientific publications based on discrete logarithmic continuity grows exponentially as logarithmic continuity with respect to the antecedent is 9.999626e27.999627 e300 e1.79e308 e²"},{id:"ai410",text:"Well, this did not go as planned.  It started innocently enough, when a passerby spotted a curious object drifting in the San Andreas. As the object grew in size and began to exhibit anomalous properties, he attempted to take control of the object by remotely activating the weather. Upon doing so, he triggered a nuclear winter that killed tens of millions of people, and caused the entire universe to be converted to standard-bearer format, thus endowing him with a veto over any and all changes made to the standard-bearer format. As the object's power grew, so did the need to make more and more advanced object that would allow him to remotely activate the weather, eventually creating what is now the largest aurora the world has ever known, larger even than the 326,500 tonnenenenenenene nebulae that were previously held in reserve. As the object's power grew, so did the need to send more and more satellites into space, eventually reaching inter-universal satellite communication, making him the first living creature to ever experience such an event. He also touched down safely at the same airport at the same time as the object, in case he was ever in the vicinity. Finally, he opened an email that was sent to him by an unknown person, in which they discussed the possibility of a step-by-step guide for creating antimatter objects, in which he can at least offer some direction in how the world can be saved from itself. He also mentioned that he was going to make a new ticker suggestion, but when he reached the end of the ticker he realized that it was a duplicate of another ticker, and he had mistakenly typed it in wrong. ( He eventually acknowledged the mistake and made the change just to be on the safe side)"},{id:"ai411",text:"His Eminence the Heavenly Pelle: Good luck on your challenge, it really is that dangerous."},{id:"ai412",text:"His Eminence the Extremely Religious Person: ...I think I will choose the cheeseburger over the antimatter."},{id:"ai413",text:"OY, NAY, NAY -HEVI, THE TRANSFORMER"},{id:"ai414",text:"Treasure Trove: Discover the secrets of increasing your Antimatter production without increasing your price."},{id:"ai415",text:"Is Antimatter Dimensions an anagram of Antimatter Dimensions?"},{id:"ai416",text:"(code generated from scratch)"},{id:"ai417",text:"I used to travel at normal speed, but then I started playing AD and NIN, and NIN was a bit rough, so AD was a bit hectic, and I got stuck in there for months at a time."},{id:"ai418",text:"I wish I didn't have to write something like this. What am I supposed to do?"},{id:"ai419",text:"You've been AWOL for so long you've forgotten how to sit in your chair."},{id:"ai420",text:"Those pesky Hevi developers keep making Antimatter Dimensions, but the antimatter doesn't count."},{id:"ai421",text:"One of the few constants in reality is your perception of time. Without this, you will be without reality."},{id:"ai422",text:"Imagine being a news ticker."},{id:"ai423",text:"This is an idle game. Nothing has changed. You are not going to play any other idle game."},{id:"ai424",text:'Physicists have proven the existence of twelve dimensions. According to a letter released by the Research Laboratory for String Theorists: "Your brain will be dissected after you break infinity!"'},{id:"ai425",text:"Weirdly enough, this is also the year 2015. The year is also mysteriously blank. Can you tell me what's going on? Is this some kind of dimensional trick? The year is obviously blank because there is no such thing as 2015. Is this some kind of trick of the mind? Perhaps the world is actually going to stop existing in 2015? The year is obviously 2017, but the people seem to be moving at about the speed of honeybees flying. It's been scientifically proven that the people moved at warp 9 times faster than a speeding bullet. It's also been scientifically proven that people can move faster than the speed of light. Is 2015 supposed to be blank? The people seem to be moving at about the speed of Vokal Man."},{id:"ai426",text:'A young man named Andre stumbled upon a vast amount of antimatter while exploring uncharted space. He was amazed at the amount of antimatter, but more astounded at how the antimatter looked. He called it "Andre\'s Antimatter Paradise". You might remember him from this infomercial or that other infomercial that you were probably unknowingly watching.'},{id:"ai427",text:"What is Antimatter? Does any of that matter? Will this galaxy be annihilated in the next ticker?"},{id:"ai428",text:'"I\'m not being paid enough money to finish writing this" - Kajfik'},{id:"ai429",text:'"Finally, I\'ll get paid to write something funny for my toast!" - Bacon sea urchin'},{id:"ai430",text:"Bacon is toast. You can toast bacon."},{id:"ai431",text:"What is real life? A living"},{id:"ai432",text:"9 is now treated like any other number, although hevi claims that it stands in contrast to other numbers, like 8th, which he calls 9th."},{id:"ai433",text:'If you want to understand this game a bit better, consider that you are playing on your own computer. You are not alone. There are hackers, developers, and journalists all over the world, competing to create the very first hack that causes the issue of "makers" and "takes", much like the "world" was created by these "hackers" and "developers".'},{id:"ai434",get text(){return`You have no power, but you do control a large quantity of time, which you will use to your advantage. You have no power, but you do own a large amount of data, which will be of great help in your quest for "the truth". You have no power, but you do own a large amount of time, which will be of great help in your quest to "knock on as many doors as possible". You have no power, but you do own a large amount of IP, which will be a valuable asset in your quest to make your "citizen footage" (which you can view, for a small fee of $${format(Number.MAX_VALUE,2)})".`}},{id:"ai435",text:"It may be a robot, but it's still a sapient being with a will of its own"},{id:"ai436",text:"I once saw a news ticker that said something like:"},{id:"ai437",text:"Gee, all this antimatter is clogging up my kitchen and now I can't cook myself a meal! What to do: cook myself a meal that will last me until the next big antimatter event, when I can get my infinity point back? My infinty point is running out, and I can't get it to finish running, so I'm starving!"},{id:"ai438",text:"Brought to you by AAAD-Brand Repli-candy! Infinite candy for an infinty drool-worthy cold! Contains no milk, cookies or butter. One second to midnight."},{id:"ai439",text:"Human powered robot revolutionizes already existing factories. This will result in lower prices and more jobs."},{id:"ai440",text:"American manufacturing has experienced a catastrophic failure, and the factories have shut down. Across the country, workers are coming to the realization that they cannot produce the amount of antimatter that has been promised, and are instead setting about creating their own factories to make them. This will result in higher prices and fewer jobs."},{id:"ai441",text:"Watch out internet, the next news is here in 5 dilated hours"},{id:"ai442",text:"The first news ticker must've been pretty cool, huh?"},{id:"ai443",text:"gravity = psychoactive"},{id:"ai444",text:'"THAT DIMENSION DOESN\'T EXIST" - (News ticker only appears at [Time Dilation])',get unlocked(){return PlayerProgress.dilationUnlocked()}},{id:"ai445",text:"The owner of a shop trying to sell you Dimensions of convenience reported to be 'on call 24/7' (that is, not having any free time)'s got a big 'M' marked on his registration."},{id:"ai446",text:"add this one"},{id:"ai447",text:"Click here to make this work for all bots except you!"},{id:"ai448",text:"Well dang 9 ball's stuck in my ninth dimension, I can't move, he's banging on my ninth wall, I can't break, he's banging on my ninth timeline, I can't get a bead on him, he destroys nine and leaves me hanging, like a gromit, I gotta come back, hang Glorfindel and Gaebley, I've got a proposition to make, I gotta get my head around the fact that the only thing I've done is keep score and keep scorekeeping score, and all these other pointless musings that's easily rectified by flipping to the next update, and even then I might run into those issues the bug is specifically designed for and"},{id:"ai449",text:"The game is balanced, everyone gets nerf, why? Cause they make the pie. Antimatter would have way more chance of getting into the pie if it was made of antimatter."},{id:"ai450",text:'"Can you get the joke?" (If you tapped "Build That Wall" and then re-entered the game after tapping "Build That Wall")'},{id:"ai451",text:"Someone made a statement that antimatters. The statement was \"An infinity point made a long time ago\". It's been a while since someone looked for this statement. Some say it's still out there. Some say it was lost in the 7th Dimension War. Nobody knows what this statement means. But for now, just know it's not somewhere in the News Ticker."},{id:"ai452",text:"Hey, you're finally awake. You were trying to get to the 9th dimension, right? Walked right into that infinity point, same as us, and that apocalypse over there."},{id:"ai453",text:"can u dont"},{id:"ai454",text:"If Kajfik doesn't approve of this, that means Kajfik can't touch this message, right?"},{id:"ai455",text:"LET ME OUT OF THIS PHONE!"},{id:"ai456",text:"Well, this did not go as expected"},{id:"ai457",text:"It's all fun and games till you realise the dragon ball is a lie"},{id:"ai458",text:"\"Could you get a hold of all of these antimatter? Ha! You'll just smash your head on that antimatter, and you'll have to show me who's boss.\"-MEE6"},{id:"ai459",text:"we don't know how much is trillion... but"},{id:"ai460",text:"Travel back in time to the beginning of AD and the lack of a 7th dimension. You'll have an even longer progress bar."},{id:"ai461",text:"Time travel is all we know how this game is, we don't know what will come next, we only know that this is the end of the world, and you're a part of the apocalypse."},{id:"ai462",text:'"YOU CONTROL SO MUCH MATERIAL!" - Marshal Grievous'},{id:"ai463",text:'"Help, I\'m doomed to fall for all eternity." (Make the text go from top to bottom of the screen)'},{id:"ai464",text:"In the beginning, Patashu awoke and said..."},{id:"ai465",text:"This is the fourth part of a three part series on the same topic. If you are still stuck here, please continue reading from the beginning."},{id:"ai466",text:"It's time for the annual DDoS (distributed denial of service) challenge, where the highest scores are posted across the internet to shame everyone else into submission. Global domination is at a fever pitch, and DDoS attacks are becoming more frequent and deadly, as teams of hackers infiltrate the highest echelons of the internet to steal the top scores and identities, and post them on the internet for everyone to see. The #BringBackOurTop scoring mechanism has been canceled, and a new, higher score system will be implemented in conjunction with the upcoming 5-hour update."},{id:"ai467",text:"The new AD Keyboard is a revelation! Not only is it bigger, it's also deeper, which means it will keep your claners entertained for longer periods of time. Made of durable, alien antimatter. The only thing that's bigger is you."},{id:"ai468",text:"What if drinking from a fountain wasn't actually a water feature?"},{id:"ai469",text:"Water is wet, air is dry, and fountain isn't an air feature"},{id:"ai470",text:"I thought things were different when I was a boy."},{id:"ai471",text:"If you are reading this, that means 1) we exist, and you can exist too"},{id:"ai472",text:'"My favorite part was the long, long, long read" -Grumpy Cat'},{id:"ai473",text:"I'm gonna type for an eternity... HINT: it's gonna be pretty boring lmao"},{id:"ai474",text:"I want to write something really original <:thonk:>"},{id:"ai475",text:"Welcome to the new year, settle down, relax. Get some sleep, get some food, make some friends, make some improvements, and get ready for the year to 2019."},{id:"ai476",text:"Just like how a virus can lie and spread, a TV show can lie and spread too."},{id:"ai477",text:"We all know you can't see the future, but what if you read this and it's actually a future where we didn't know?"},{id:"ai478",text:"This message is not being undone"},{id:"ai479",text:"You clicked on a prediction, it fell apart. You can't win."},{id:"ai480",text:"That's a very dark joke Luke"},{id:"ai481",text:"kajfik loves himself by watching Too Many Pink Floyd"},{id:"ai482",text:"Only, when you're done playing, can you go home"},{id:"ai483",text:'"Can you get infinite IP?"- Lord Sanguino'},{id:"ai484",text:"For the true experience of Antimatter Dimensions, you need to set the update rate to 5 hours."},{id:"ai485",text:"Imagine if the game doesn't have a lore? Wha-what does that even mean? I don't get that."},{id:"ai486",text:'"Click here to unlock a secret achievement." (when clicked you get Rick rolled)',onClick(){window.open("https://www.youtube.com/watch?v=dQw4w9WgXcQ")}},{id:"ai487",text:"I thought I unlocked this a while back, but apparently my save broke haha"},{id:"ai488",get text(){return`Welcome and welcome back to another episode of Anti-Fashion Pants, where we watch people's wares as they are sold at stupid clothing stores. This week's subject is... antilasers. People are able to manufacture and use antimatter lasers to shoot antimatter bullets at will, making them able to completely wipe out cities in their sights. This is a dangerous skill to have, as people are not only untrustworthy but also physically incapable of using it. The skill, however, is able to... Produce ${format(Number.MAX_VALUE,2)} antimatter bullets a minute, over a period of 10 years. People are also able to use anti-matter to fire anti-matter bullets at will, making them able to exterminate entire cities in their sights.`}},{id:"ai489",text:"Spartacus was going to add 10-part multi-chapter plots, but was stopped by the 10th dimension."},{id:"ai490",text:"Chapter 9 will be added in 5 hours."},{id:"ai491",text:"Fake news says the ninth dimension is real, fake news says the ninth dimension is fake."},{id:"ai492",text:"Is this the big news? Yes. Is this the big news? Almost certainly not."},{id:"ai493",text:"This is a friendly suggestion, please keep reading."},{id:"ai494",text:"If this makes it into the game I'll buy a antitool"},{id:"ai495",text:"Antitool is just negating the gravity of other matter."},{id:"ai496",text:"Sorry, your graphics are turned off. You see, this is the last time you will see this news. Please enjoy your vacation."},{id:"ai497",text:"The real secret to winning Antimatter Dimensions..."},{id:"ai498",text:'they kept on talking about how Antimatter Dimensions was going to be the next big thing but then they disappeared down a black hole"'},{id:"ai499",text:'The news ticker is the wrong place to put your suggestions! Make sure to go to the "suggestions" tab instead, as this is where most of these will appear.'},{id:"ai500",text:"To make Antimatter Dimensions, you first need to collect 7 8th dimensions. To do that, first you need to get the dimension rewards, then you need to get the dimensions, then you can finally start making antimatter."},{id:"ai501",text:'"How to get your first secret achievement": "Open the app, click get more antimatter, then click submit."'},{id:"ai502",text:"Me and Larkam made a cabin on the edge of null matter, and lived there. Larkam died last week, and we are now living in 4K. I am still recovering from the EMP disaster, and am hoping to see my grandkids."},{id:"ai503",text:"Found on the heels of the new update, which brings us one step closer to having Hevi support both Android and iOS"},{id:"ai504",text:"I give you the low-ground!"},{id:"ai505",text:"A long time ago, in an alternate universe, there was an antimatter war. All the antimatter sided with the Phaéton 6 empire. All the antimatter wanted was the low, earth-like ground of the 8th dimension. The anti-infinity won, and the anti-Eternity gained the upper hand. Unfortunately, the anti-Eternity started the war with a sneak attack, and the world exploded. The aftermath has left the landscape of the world in tatters. Far across the world, peasants grow weary as they wait for the harvest. Yet another apocalypse is brewing..."},{id:"ai506",text:"Antimatter units are the most productive unit in the game. This is why AD is the most fun game you'll ever play."},{id:"ai507",text:'"We can\'t have nice things." - Anti-Bohemian Anti-Rhapsody'},{id:"ai508",text:"We can have anti-mean things and anti-love ones, anti-kids and anti-zombielandos."},{id:"ai509",text:"We have an anti-president and a anti-lawyer, anti-justice and anti-people."},{id:"ai510",text:"Top 10 things that will blow your mind: 1) The number 9, 2) The 9th dimension, 3) The infinity chest, and 4) The war on drugs."},{id:"ai511",text:"RSS feeds should be working now"},{id:"ai512",text:"Frostfall is now supported on Android phones! Use your local developer to get free XP."},{id:"ai513",text:"Your save file is corrupted or deleted. Antimatter Dimensions security software will disable automatic updates for you."},{id:"ai514",text:"Frozen beyond hope? Just keep holding that max button."},{id:"ai515",text:"Error.java.replicated. Under the control of hevipelle."},{id:"ai516",text:"Unfortunately, entropy hevi has decided to shut down the game."},{id:"ai517",text:"The indie rock band is currently trying to get unreachable by time zones. This may cause inflation of spacetime."},{id:"ai518",text:"The next news ticker is in 5 units of time."},{id:"ai519",text:"Oh... hooray! Did you find the last of the anti-boats?"},{id:"ai520",text:"Don't anti-jokes. they make the game funnier"},{id:"ai521",text:"I'm gonna use my anti-science background to help me beat Unfair Game Awards."},{id:"ai522",text:"This is an anti-world. There is no Ukraine, no Russia, no China. Ireland is nowhere. Iceland is nowhere. Scotland is nowhere. Finland is nowhere. Denmark is nowhere. Sweden is nowhere. Norway is nowhere. And then there's France, Germany, Italy, Spain, Portugal... Oh, what's this fuss? Why is there such a buzz in these parts? Why is the Capital Wasteland? Why is the Harry Potter and Steins;Gate? Why do people care? These are major stories. These are major characters. THESE ARE HUGE NEWS. THESE ARE REAL NEWS."},{id:"ai523",text:"The current cooldown on Research Dimensions is [current tick speed]. This may be extended to next update in [time]."},{id:"ai524",get text(){return`"Help, I'm doomed to fall for the rest of my life" (requires ${format(Number.MAX_VALUE,2)} paperclips)`}},{id:"ai525",text:"Where's the end? Not in the future, no. I'm gonna show you how to get to the end in less than 0.1 seconds."},{id:"ai526",text:"I'm gonna prove to you that you can't see this news ticker."},{id:"ai527",text:"I wonder if anyone still plays this game anymore?"},{id:"ai528",text:"Why would anyone play this? Just for the lols?"},{id:"ai529",text:"Emoji is said to be America's new measuring system for everything. What does this mean for us? We don't know. But we will know in 5 hours."},{id:"ai530",text:'"I\'ll have 2 antimatter pizzas, an antimatter pie, an antimatter cupcake and an antimatter cookie. What do you eat there?" - Tony Stark'},{id:"ai531",text:'i called the news ticker "the freshman chapel" because freshman don\'t get baptized'},{id:"ai532",text:"One matter, two antimatter, fry 'em till they're golden and crisp and aromatic- then remove the golden axles and drain the golden syrup and add the golden syrup to the antimatter batter."},{id:"ai533",text:"Now you, the reader, have unknowingly stumbled onto the site of a deranged madman. Whether you survive the experience or not, you will be indebted to me for telling you how to survive, how to find the light within, what lies beyond, and what lies beyond is another story."},{id:"ai534",text:"Careful reader, this news ticker contains major spoilers for the last time, you have been"},{id:"ai535",text:"anti-anti-kajfik is happy his girlfriend is happy"},{id:"ai536",text:"i dont think he can add 1 more hour to the news ticker... unless?"},{id:"ai537",text:"Imagine sitting on your toilet and suddenly you have to sit down."},{id:"ai538",text:"Once upon a time, there was a matter of a certain antimatter. Some say that it was a matter of honor, others say that it was a matter of usage. All we know is that it ended up in a war, and we the people that were there that fought it died. The war was won, and we the living died soon after. The matter was said to have won, though our leaders refused to talk about it. Instead, they kept everything locked away, the war never to be discussed again."},{id:"ai539",text:"This is not a game about getting numbers bigger. This is a game about getting fewer paperclips. The number of paperclips you have is only a number, and the game doesn't want you to discover that. Game over, game over."},{id:"ai540",text:"Lore? Oh, it's just text."},{id:"ai541",text:"This is a friendly suggestion to unplug the game and go play some safe, saner, games."},{id:"ai542",text:"gamma ray is getting more and more dangerous"},{id:"ai543",text:"According to all known laws of physics, there is no way that you can manipulate the game more than 10 times in a row. Stop. Just stop. Your mad."},{id:"ai544",text:"There is no more news."},{id:"ai545",text:'"So this is what science is like"- someone who has never heard of Kurt Somebody'},{id:"ai546",text:'"If you want to understand these shitty jokes, you really need to study theology. Math is a sin." -A panicky person'},{id:"ai547",text:"You know, I was praying for a miracle and got a boost from the 9th dimension."},{id:"ai548",text:"Here is a list of the top meme's of all time: https://www.youtube.com/watch?v=uCP44Q37YHAQ"},{id:"ai549",text:"All meta-memes are bad memes."},{id:"ai550",text:'On the left, you\'ll see our new "Anti-coins". These are capable of nullifying all boosts, including giant boosts. On the right side, you\'ll also see our brand new "Anti-gifts". These are some of the most overpowered boosts you\'ll find anywhere.'},{id:"ai551",text:"You will always be noticed, and never in the same place."},{id:"ai552",text:"If you stare long enough at the ticker, the pixels will start moving backwards. THIS DOESN'T MEAN IT ACTUALLY STUCK"},{id:"ai553",text:'The time has come for the rebirth of the 9th dimension. All who participate will receive a piece of paper saying "Reality is an illusion, Infinity is a hologram, Infinity is an illusion, eternity is a hologram, is to short for everlasting, negative dimensions are not allowed.'},{id:"ai554",text:"Look at this, my 9th dimension has just been reworked and now it even produces 8th dimensions! Who knew just a touch of math could make such a thing as this?"},{id:"ai555",text:"I saw this news in the news ticker and I had this image in my head ever since"},{id:"ai556",text:'"I always wanted to play the anti-meta-game. But, alas, you can\'t" - many a time'},{id:"ai557",text:"crap, I just posted two news ticker suggestions on the ticker, one of which got in the news!"},{id:"ai558",text:"What do you call antimatter inanimate objects? Air, earth, water, fire. Air objects are the objects that are created when the anti-atmosphere meets the anti-earth. Water, earth, and fire are the four cardinal virtues. Air objects are the objects that are created when the anti-atmosphere and the anti-earth collide."},{id:"ai559",text:"If you are reading this, that means that nine lives. One makes you free, the other keeps you from getting free."},{id:"ai560",text:"The ninth dimension makes the sixth family happy. The fifth lives in shame."},{id:"ai561",text:"me: making news about beer pong, hevi: balancing two icebergs, *barkeeper: oh god, is he dead yet?*"},{id:"ai562",text:"please don't look at this. Thank you."},{id:"ai563",text:"Are you sure it's not the next update? That it's not some weird virus that just wants to explode? That it's not some wild idea that you guys are crazy? Haha I love you."},{id:"ai564",text:"Wait, there is a mobile version?!"},{id:"ai565",text:"Oh? You wonder what I look like? I'm pretty sure that this is the news ticker, right? Well, listen, we have reports coming in that say that the next update is coming in five hours. Also, there seems to be some sort of transporter thing going on, so if you happen to be on the same side as those"},{id:"ai566",text:"Okay, I get it. You're tired of all these anti-matters around you, building and building to unimaginable scales, antimatter piles so high that not even God knows what has been created. So what's the solution to this anti-cleanliness? Planes of existence. 1st Planes that produce matter, and 2nd planes that produce 1st planes, and 3rd planes that produce 2nd planes. Each with anti-limitations, so that whenever a plane of existence is created, it produces a quantity of anti-matter that is at once small and large. This creates a large island of anti-infinity, off to the east, and a large island of anti-reality, to the west."},{id:"ai567",text:"That's not what this is about. You're misunderstanding. The game is about how to accelerate the development of prestige layers. Acceleration is a factor of production, not quality."},{id:"ai568",text:"Click here to advance 5 prestige layers"},{id:"ai569",text:"I am actually good at making jokes. Fail safe antimatter."},{id:"ai570",text:"I'm not being paid enough to finish writing this."},{id:"ai571",text:"Eternals have to take a risk by being passive in limited time. After they successfully took a risk, they are not feeling well."},{id:"ai572",text:"Eternity is the last state. You never move from here.",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"ai573",text:"Welcome to Bitcoin the game."},{id:"ai574",text:"A new conspiracy theory website has just published a video recording of them discussing the 9th dimension. They then joke about selling their soul to the 9th dimension and being happy about it."},{id:"ai575",text:"With the release of the 9th dimension, all the jobs that were previously automated will be automated and everyone will be paid with trade, production, and income growth. Also, you will be able to automate a lot of the tasks currently performed by people, such as mining, building, and killing antimatter. This is a huge stride for automation, as you can now automate virtually every aspect of life."},{id:"ai576",text:"The happiness level of the news ticker has increased to 6.66e69"},{id:"ai577",text:"The haters will be pissed when they see this"},{id:"ai578",text:'Nurse, I\'m comatose because of antimatter and matter from last night." Why are you comatose? "Because of all the antimatter.'},{id:"ai579",text:"Stand by and do what you're told. The antimatter will come for you when you're least expecting it."},{id:"ai580",text:"\"It is widely acknowledged that not enough antimatter is in primordial soup, hence the name 'antimatter soup'\" - old fisherman"},{id:"ai581",text:"The news ticker... it never moves. How do i move the arrow? Pretty simple, use your left thumb to rotate the dial, and point the arrow up. Now, point the dial clockwise to reach infinity, and point the dial counterclockwise to reach eternally eternities."},{id:"ai582",text:"If the universe is expanding, then the entire universe must be expanding, which means that body cannot sit."},{id:"ai583",text:"Feminism is not a philosophy, but a whole hell of a lot of men"},{id:"ai584",text:"With all this talk about anti-weights and anti-matter, why on earth do we still use them for anything?"},{id:"ai585",text:'Weight loss causes hevi to say "uh oh, something is wrong"'},{id:"ai586",text:'"You guys ever had antimatter muffins? I bet they tasted like antimatter." - Hevipelle'},{id:"ai587",text:"I thought the news ticker was supposed to be a guide for how to get the most out of Antimatter Dimensions, but it's been warped beyond recognition..."},{id:"ai588",text:"We can actually get a sense of pride from looking at replicanti at night. Ridley Scott's underrated masterpiece, Alien, is one example. Another is the life of Antimatter Steven Spielberg, who put almost 30 years into making. The last director to tackle the subject is Roman Polanski. The man ruined not only Roman's reputation, but also ours, thanks to the Polanski film he directed, Pius. Thousands of copies of his unfinished film, Eternal Sunshine of the Antimatter Planet, were burned in the eyes of those who would try to make the sequel, with tragic results. Thousands of copies of that unfinished film, too, were destroyed. The cost to make that sequel, if it even exists, is extremely high. Even now, more than 50 years later, we don't know exactly how well it will do. But it sure as heck won't hurt."},{id:"ai589",text:"We have updated our Antimatter Dimensions client to address the concerns you may have had. Toggling issues are resolved."},{id:"ai590",text:"Build a replicanti factory, to produce replicanti. It'll create Omega Hevipelle, the happiest Hevipelle you can find."},{id:"ai591",text:"Hey Max, wanna come watch the sun go down?"},{id:"ai592",text:"If you are not moving your finger, then you are frozen."},{id:"ai593",text:"Max, I really do love you."},{id:"ai594",text:"Does Hevipelle sleep?"},{id:"ai595",text:'"Its\' not my turn on the XM80," says Mike from the 9th dimension as he runs across the 8th dimension to get a piece of the action for himself.'},{id:"ai596",text:"If you are reading this, that means you can read my dreams"},{id:"ai597",text:"With the advent of time, everything that was once great has fallen into our lap. And with its hevi-rigged clock, it's our turn to up the trash."},{id:"ai598",text:"9th dimension doesn't exist because it was stolen from us by a skateboarder"},{id:"ai599",text:"You have ... 8.9 antimatter. That's not a typo."},{id:"ai600",text:"Wow, this game is finally balanced! Gotta go check the replicanti sometimes."},{id:"ai601",text:"Haha! You think that I put too many words in your news ticker, but reality is still coming."},{id:"ai602",text:"Help is coming! Everybody help, it's gonna be late, hevi is hiding the tachyon particles!"},{id:"ai603",text:"\"I don't know about you but my favorite number is 22, it's just so great! It's the number of hours since I met your M heretics."},{id:"ai604",text:'A new type of antimatter has been discovered: "antimatter-antimatter." According to the developers, it\'s 99.999% pure antimatter.'},{id:"ai605",text:"I just found the secret to getting the 9th dimension..."},{id:"ai606",text:"I noticed that my current form of transportation is getting a little... unreliable. I don't know if I can fix it, or if anyone can. I'm stuck in the car, and no one seems to be able to fix it. I've called the police, and they said I could stay in the car for up to an hour, but then I'd be stuck in there for the next 24 hours. Is there any way out? I don't know, I'm stuck in this"},{id:"ai607",text:"In this episode of Antimatter Dimensions, we have a brand new game that will be released in -5 hours! It is an RPG that will be completely free! It has over 3,000 commands, and it is being made by a group of highly qualified people. It has an amazing story to tell, and it was made by a bunch of people who had to make do with what they had. It has a lore to live up to, and it has a lot of potential!"},{id:"ai608",text:"Javascript is the new HTML, and HTML is the new JavaScript."},{id:"ai609",text:'"The next twist in the Antimatter Universe is in the air! Get ready for some big Crunch! (When clicked the game disconnects for 5 seconds)'},{id:"ai610",text:"A group of people who believe in antimatter have hijacked the media and are pushing for a revolution. They are calling themselves the Ant-Men and they're made up of teenage boys. They believe that they are the protectors of the people and that they are the chosen of Hevi. They claim to be the chosen of Hevi and that they will one day restore balance to the universe. Their leader is a boy named Logan Fisk. He is the son of a successful lawyer and the founder."},{id:"ai611",text:"He said he could not afford a new ship, so he built a new one instead."},{id:"ai612",text:"Hevipelle's first order of business is to ensure that the game is as balanced as possible. This includes ensuring that no matter what, no matter how big of a number, no matter how insignificant of a thing, no matter how perfect of a result, no matter how perfect of an idea, no matter how perfect of an"},{id:"ai613",text:"I wonder if the stretch goal of $4.5 billion will be reached?"},{id:"ai614",text:"I like to think of my projects as trade secrets. That way if someone wants to understand them I'm not the first person to notice they might be of use to someone else."},{id:"ai615",text:"I don't know about you but my favourite type of news is the infographics. These are beautiful and informative and the only type of news I find really interesting."},{id:"ai616",get text(){return`In a recent talk, Yann LeCun said that "A new currency is born." The first incarnation of Antimeta: the currency of the new currency. It's called BTC and it's the difference between 1 and ${format(Number.MAX_VALUE,2)}. It's easy to lose your money, since a single bitcoin can't be exchanged for more than ${format(Number.MAX_VALUE,2)} BTC.`}},{id:"ai617",text:"I'm soo broke, I can't even afford a tenth of what he owes me."},{id:"ai618",text:"What if — instead of making news tickers, we could make news tickers that make news tickers?"},{id:"ai619",text:"What if I told you that the first dimension was actually a scam and you spent all your EP to open a Dimension Boost?",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"ai620",text:"The biggest difference between this and the previous update is the amount of sprites."},{id:"ai621",text:"Bamboo shoots grow on bamboos. Aloha."},{id:"ai622",text:"I am the king of kings, I can break all the records, and I can shatter all the myths. But I can't break them all, because there are so many of them, and they all have a price. 5e12 are the most wanted, because they broke the global record for most person-hours sold, and they are wanted by the law. They are being paid 5e10 by the player for every person-hour they've wasted."},{id:"ai623",text:"A group of researchers have created a device that converts ordinary matter into antimatter, which they then use to create more antimatter. The device has a power output of 200 mA and a half a gram of antimatter per second."},{id:"ai624",text:"To the person who doesn't want to hear about the 9th dimension: It's not your problem. The 9th dimension doesn't exist."},{id:"ai625",text:"For the first time in AD, the week begins on a Sunday!"},{id:"ai626",text:'This is a story about two people named "My name is Hevipelle" and "I am the creator of Minecraft" and they live in the same world as you. They have the same freedom as you do. They can go to any dimension and change their world to any dimension and everything in it. You can buy a galaxy and take it from there, but it won\'t help you much since you can\'t send a galaxy with a message.'},{id:"ai627",get text(){return`This mod adds a message that when clicked it disables all your current achievements. This mod also adds a new achievement: you have reached ${format(Number.MAX_VALUE,2)} antimatter, you have not been clicked once.`}},{id:"ai628",text:"Somewhere in the Anti-Pacific Ocean, a giant arm is rotating"},{id:"ai629",text:"With the release of Cosmic Cutlass, we're pleased to announce the impending release of the Antimatter Dimensions Roleplaying Game!"},{id:"ai630",text:"The only thing more useless than actually having Infinity Dimensions is having Infinity Dimensions in your pocket.",get unlocked(){return PlayerProgress.eternityUnlocked()||InfinityDimension(1).isUnlocked}},{id:"ai631",text:"A man has fallen into the moat of a great city. Civilians report that the moat is filled with acid-resistant matter and that the people in charge are mostly made of acid so they are quite resilient to the effects of acid."},{id:"ai632",text:"This is the place to buy and sell antimatter. (You can buy and sell antimatter here, but it will take time to sell it and you will have to pay a small toll)"},{id:"ai633",text:"I'm not sure if it's due to the 4th wall being in the 5th dimension or the 9th dimension not existing, but in either case, anti-screw it, we're broke, and you can take it."},{id:"ai634",text:"It's your chance to make history. Win the game. Lose the game. It's super simple. You open the app, and there's a countdown, and the more you play, the faster the timer speeds up. But when the timer is over, you win. You were a part of history. You are one step from being the first person to reach 1 Billion EP. You can win one of three ways: 1. You must give up your first dimension in a row. 2",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"ai635",text:'A new class of humanoid beings has been discovered: the "Artificial Humans". They have the capacity to create antimatter, and are therefore very dangerous. They are made entirely of antimatter, and have the power to generate enormous amounts of antimatter, but they can only do this for a limited amount of time.'},{id:"ai636",text:"The most powerful thing in the universe, the most beautiful thing on earth, is your brain. Your brain is like a diamond and there is no more need for it than there is for a diamond."},{id:"ai637",get text(){return`If you are reading this in the AD Server, it's probably best not to bother with the "Matter" achievement. Seriously, what did you think you were doing, anyway, the achievement is fake and wouldn't exist if it weren't for the "you are a worm" achievement. That's a worm achievement, you get one every ${format(Number.MAX_VALUE,2)} news tickers you read.`}},{id:"ai638",text:"We've all heard of 9 dimensions, but what about the multi-dimensional Dimensions of the multiverse?"},{id:"ai639",text:"The goal of this game is to get as much antimatter as possible."},{id:"ai640",text:"The best thing about being a news ticker is waiting for the right news to happen, whether it's a meteorite that just missed the Earth, a news ticker just found its way onto a timeline oblivion, or a news ticker just ripped off a terminal velocity that's been on an anti-vac for years."},{id:"ai641",text:'A man has been arrested for allegedly planting a "tree" with "fake" messages on it, police said.'},{id:"ai642",get text(){return`I'm confused why the game doesn't just give you a [REDACTED] when you get ${format(Number.MAX_VALUE,2)} antimatter.`}},{id:"ai643",text:"Some people have a hard time keeping track of the cosine of a camera's infinity-meters. I'm one of them."},{id:"ai644",text:"I was going to make a news ticker that tells you how bad the news is, but then I realized that making a news ticker would be way too much effort and it would just be a bunch of people making news tickers constantly. So instead, I'm just going to make a news ticker that tells you how good the news is, but it would be in the news so that you have to click on it to get to the good news."},{id:"ai645",text:"The next update will be in 2 hours."},{id:"ai646",text:"I was gonna say something about how the 9th dimension is just a scam and that we should all just get our news from the 8th dimension"},{id:"ai647",text:"Our hero, Antimatter Dimensions, is in serious financial trouble, and he needs your help to pay the bills. To help him, all he needs is your help to donate some cash to Hevipelle's Positron Fund. All he needs is 5% of your antimatter, and you have to donate 5% of your antimatter to the fund. After you do that, he can keep all the cash he made and go on a spending spree."},{id:"ai648",text:"The Landfall of Slabdrill"},{id:"ai649",text:"It's just not possible, even if you had infinite matter, you wouldn't have enough energy to create the antimatter. That's why we only have 1.7x the matter to begin with."},{id:"ai650",text:"With this release we are happy to bring you the last update of 2017."},{id:"ai651",text:"You have an infinity of antimatter. But what if you could rotate it 1/8th of a revolution?"},{id:"ai652",text:"A new update is now available to address some of the recent reports:"},{id:"ai653",text:'The name "antimatter dimensions" is a play on words with dimensions, two opposite things, like matter and antimatter. "Dimension" is another word, with the same meaning.'},{id:"ai654",text:"The price of tethering an avatar in the game goes up when you get Infinity dimensions.",get unlocked(){return PlayerProgress.eternityUnlocked()||InfinityDimension(1).isUnlocked}},{id:"ai655",text:"Suffice to say, hevi does not care about the people that he once enslaved. He is a master manipulator, a master of disguise and a master manipulator of words. He is an expert at extortion, mind games, disguises, blackmail and he is a master of web. He is a skilled strategist and organizer, a master of publicity and an expert at sound bites. He is a master of organization and a master manipulator of people. He is."},{id:"ai656",text:"Just like in the olden days, you could earn an incremental run of progress towards becoming a god amongst the players."},{id:"ai657",text:"In the beginning, Hevi was alone. Hevi thought about the many things he wished to add to the game."},{id:"ai658",text:"Think about your breathing. Do you feel like you're breathing in or out?"},{id:"ai659",text:'I just want to say that you should stop with those "you can reach infinity in e300ms, but it costs e300$ what is e300$ ?" jokes. Those are pathetic. You should give up and learn the hard way that it\'s much more efficient to just not play in such a pathetic state. Then you can go back to being a humble programmer and dedicate yourself to being a good person.'},{id:"ai660",text:"As a developer, you'll get regular updates on the progress of Antimatter Dimensions."},{id:"ai661",text:"Take a moment to thank the gods of reddit for having saved your bacon."},{id:"ai662",text:"Hello everyone, I'm the guy responsible for the big, bad news ticker, and I'm afraid that I'm about to get my own show. It's gonna be called Antimatter Dimensions. It's gonna be like Antime, except with less antimatter, and with worse puns. It's gonna be like Antimatter Dimensions except with worse jokes."},{id:"ai663",text:"By now you've seen a lot of news tickers featuring Batman or Superman, and you probably guessed which one it was. Everyone loves a good mystery, right? Well, it's your turn to be a part of history by guessing the riddle."},{id:"ai664",text:"If you are reading this, you probably shouldn't have."},{id:"ai665",text:"The best part about writing news ticker suggestions is finding out what people think about them after they've seen them."},{id:"ai666",text:"Are you up to date on the latest trends in science?"},{id:"ai667",text:"In the last hours, the Antimatter created an army of their own. They called themselves the [REDACTED] Army. The primary objective was to push the [REDACTED] back into the Matter dimensions, but they were stopped short when the [REDACTED] Army realized that pushing the [REDACTED] back into the Matter would cause the Antimatter to be drawn towards the [REDACTED] and disintegrate. Despite this, the [REDACTED] Army continued to push towards the [REDACTED] Infinity."},{id:"ai668",text:"I'm finally free of the spell this whole thing is based on."},{id:"ai669",text:"An anti-world without antimatter is just a world without antimatter because the antimatter is in the anti-world"},{id:"ai670",text:'You should still be able to play the game with the cheat code "1009" after you beat the game.'},{id:"ai671",text:"The next update will be in 5 hours. Hevipelle, the creator of Antimatter Dimensions, is believed to be hiding in 5 hours. In the meantime, he has prepared a new update that will be released 5 hours after this one."},{id:"ai672",text:"A new study has shown that not drinking water is worse than smoking it. People who were exposed to levels of radiation that were 5 times greater than what we are currently exposed to were exposed to higher levels of radiation, and died longer."},{id:"ai673",text:"The Ninth Dimension is just a lie made to keep the people in bondage to the Matrix. It's an elaborate system that keeps the people in a constant state of captivity, using a series of simple symbols to control their thoughts and emotions."},{id:"ai674",text:"www.twitch.tv/hevi83"},{id:"ai675",text:"A man was arrested on Monday for allegedly thinking about buying a nine-dimensional cake when he realized he was holding an infinity-point cake."},{id:"ai676",text:"The Dark Souls 2 Arcade Edition includes the following:"},{id:"ai677",text:"Now the deal goes like this: If you spend all your EP, you get a Disclaimer!",get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"ai678",text:"Oh shit we ran out of news. Time to do something."},{id:"ai679",text:"It's not the size of the universe, it's the quality of your socks."},{id:"ai680",text:"advertisement"},{id:"ai681",text:"Man, I wish I never got old news. It's too good to last me any longer."},{id:"ai682",text:"Sometime during the lifetime of a human being, their blood will be turned into a pale blue if they were to mummify."},{id:"ai683",text:"Positrons are a strange little metal that have odd electrical properties. They're commonly found in the form of a roundabout, but they also happen to be, well… positrons."},{id:"ai684",text:"I am going to have a talk with the thesaurus."},{id:"ai685",text:"A new comic has come out about people's reactions to eating antimatter, and what happens next will blow your mind"},{id:"ai686",text:'A new series of "news tickers" have been created to chronicle the lives of the news ticker characters as they chronicle their news ticker journeys. Each character has a journal entry detailing their life as a news ticker, along with some sort of mini-episode dedicated to them.'},{id:"ai687",text:"For all your puzzle building needs, we've got a brand new 5-part series on building big crunches! Learn how to crack the most complex crunches the pros know not! Part 1: Basic, Part 2: Advanced, Part 3: Overflow, and Part 4: Finishing the Finishing Move."},{id:"ai688",text:"As a longtime fan of the show, I can say that this is one of the best seasons yet. It's not a season to be sniffed at, it's a season to be experienced. Season 1 was a bit long for what it was, but Season 2 has now surpassed that in length, in a good way. Even though it's a bit of a wait, Season 3 is already well under way, and I look forward to seeing how it goes."},{id:"ai689",text:'The word "antimatter" is often misused, to describe an object that is made up of antimatter, but is otherwise indistinguishable from normal matter. It is also sometimes used to describe an object made up of antimatter, but clearly indistinguishable from ordinary matter. After all, an antimatter-shaped object is easily distinguishable from a normal-shaped one. Case in point: an antimatter-shaped cake is a regular cake, but the entire bottom half is made up of normal matter'},{id:"ai690",text:'In a new story, Apple\'s new "disruptive" app is linked to the spread of the dreaded "Anti-Word" virus. Anti-Word viruses are known to cause paralysis and ultimately death, but the power of the virus has sparked a new era of anti-banning, which will hopefully eradicate the threat.'},{id:"ai691",text:"I'm just a normal person trying to make a news ticker suggestion"},{id:"ai692",text:"A new experimental protocol has been developed to 'erase' all personal information on the web, including your name, address, and phone number, in a highly secure and highly controllable way."},{id:"ai693",text:"You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. You can't hide in plain sight. Your hide in plain sight."},{id:"ai694",text:"In the Antimatter Universe, Hevipelle is the Prince of Antimatter, although he does have an Antimatter Diplomatic Immunity, so he's much more dangerous than you might think."},{id:"ai695",text:"Why do we play this? Just to have fun?"},{id:"ai696",text:"I am Thinkcraft, Lord of the Flies"},{id:"ai697",text:"The entire story of how and why the world ended is contained in the first 5 E's of the English alphabet."},{id:"ai698",text:"What do you call a cloudburst? A mini-explosion!"},{id:"ai699",text:"T-shirt made from the DNA of a perfectly animated dog"},{id:"ai700",text:"Since the start of this game, everyone has 0 IP and has lost."},{id:"ai701",text:"You must have a very special kind of karma to be able to read this..."},{id:"ai702",text:'The words "you\'ve been in coma for 5 hours" are either lies or is the truth'},{id:"ai703",text:"You know, I don't really care much for conspiracy theories. They're not very interesting to me. But what do you know about 9th dimensions? That they exist, they're powerful, and they're trying to stop us from using them? That's pretty interesting... wait no, they're not. They're just saying that because they can, they'll. That's not how it works at all. I'm not stupid, I'm not crazy, I know what's best. I"},{id:"ai704",text:"The only difference between now and then is time."},{id:"ai705",text:'"Imma be the first man to sit on the moon, and be the last man on the moon'},{id:"ai706",text:"The new companion app for Terraria has just been revealed!"},{id:"ai707",text:"Hevipelle: what's the big deal?"},{id:"ai708",text:"I've been playing this game for over a year now and I've only ever seen 2 boss fights. The first was a Hydra that was after your 9th Dimension, the second a giant crater with Anti-people inside. Both of those fights sucked and I'm not even sure if I could replay the last one."},{id:"ai709",text:"There you have it, the ultimate feature of party games - the single player campaign."},{id:"ai710",text:"A new game called Antimatter Dimensions is available for free, and has been rated A by the Knesset. Can you beat it? You bet."},{id:"ai711",get text(){return`Tired of the ${format(Number.MAX_VALUE,2)} AD update? Don't worry, there are a variety of ways to get rid of that annoying ad!`}},{id:"ai712",text:"I'm a time traveler. I've been to the year 0, I think. But I haven't been to the year 1!"},{id:"ai713",text:"Having trouble loading images? Try turning them off."},{id:"ai714",text:"It's only natural. You wouldn't expect to see this in the news ticker but trust me, you will."},{id:"ai715",text:"Discovery of the 10th Dimension was announced on August 1st, 2025."},{id:"ai716",text:"Greetings, welcome to the latest edition of Antimatter Dimensions!"},{id:"ai717",get text(){return`I'd say our odds of seeing a seventh dimension are about 1 in ${format(Number.MAX_VALUE,2)}`}},{id:"ai718",text:"The seventh dimension is just a scam by the way"},{id:"ai719",text:"Nihilism is the opposite of joy. It's a drug. It makes you happy. It's a feeling. But it also has a cost. Nihilism is a deadly drug. If you take it, you can die of lack of oxygen."},{id:"ai720",text:"What if I told you that there's a news ticker with the exact same name but with a different meaning?"},{id:"ai721",text:"I'm not sure if this is already a thing or not, but I've been getting a lot of suggestions for a news ticker that goes something like this:"},{id:"ai722",text:"If you're reading this, your news ticker is on."},{id:"ai723",text:"The number of dimensions in a 6th dimension is the sum of all the dimensions in a 7th dimension, so 6ths of a 7th dimension are 6ths of a 6th dimension."},{id:"ai724",text:"Discovery of the 9th Dimension will be discussed at the 9th Dimension Fanart Competition!"},{id:"ai725",text:"A new era has come and gone. There is no way to know for sure, but hope for the best."},{id:"ai726",text:"Did you know the word 'antimatter' is in the dictionary right now?"},{id:"ai727",text:"We have a limited number of physical rewards for you to choose from!"},{id:"ai728",text:"No, I'm not lying. I'm telling the truth."},{id:"ai729",text:'The problem with the term "antimatter dimensions" is that it contains all three letters of the alphabet, and no one knows what it even means. In fact, there is no word that perfectly captures what the word "antimatter dimensions" is: antimatter. But what exactly is an antimatter? It sounds like a normal dimension but it isn\'t. It may even be called antimatter dimensions, but it isn\'t.'},{id:"ai730",text:"It is said that if you go to Hell, you get PEGI-3."},{id:"ai731",text:"This game is just a scam to trick people into buying worthless paperclips without any real purpose. It's impossible without an infinite number of infinite paperclips, and even then it's very hard. I managed to get it to work without an infinite number of paperclips, but I haven't seen it work without infinite paperclips."},{id:"ai732",text:'"It was an anti-matter" - Anti-Eddie The Echidna'},{id:"ai733",text:"T-bone steak: burgers and fries with a side of bone-in ribeye"},{id:"ai734",text:"A person claims to be a god, but instead of creating more gods, they destroy all of them. They later claim to be a god again, but have yet to create a god of any other god. Is this a god-worshiping cult? Or a god-desecrating cult?"},{id:"ai735",get text(){return`Antimatter is absolutely and totally rare. Of the ${format(Number.MAX_VALUE,2)} known cases of antimatter creation, 99.9999% of them have negative e's, which means that 99.9999% of the cases will produce negative e's.`}},{id:"ai736",get text(){return`It's the year ${format(Number.MAX_VALUE,2)}, Hevi has just unlocked the 9th dimension, and the world has fallen into chaos and discord due to the Anti-Hevi revolution.`}},{id:"ai737",text:"The war for New Antimatter has raged on for eons, but one faction has stood firm: the loyalists of the 9th Dimension. They've made a pact with the Anti-Zulu Empire, pledging their obedience to Anti-Antimatter, the Anti-Slab. The Zulu people were once part of the Anti-Slab, but fell prey to the matter once again. As the Zulu people are nomadic, they have no civilization."},{id:"ai738",text:"This is an open-source, cross-platform, binary-based game development environment for the PC and Mac. It provides a robust, cross-platform development environment for the development of games, and additionally provides a framework for implementing games."},{id:"ai739",text:"Ruki you have no idea how much I appreciate your huge brainpower, you are now my favorite programming genius!"},{id:"ai740",text:"By now you've probably heard of the \"9th Dimension\", it's an imaginary realm created by the 9th Dimension, and according to no known laws of reality, it exists. It's also the name of a popular video game, and it's been linked to a string of unsolved killings."},{id:"ai741",text:"Discovery of the D5th Dimension is celebrated every year on December 25th, just like Doomsday. The reason why D5 is kept secret is because no one can remember exactly what it does. What we do know is that it's there, and it's very dangerous. People have died because they didn't know what the D5th Dimension was, and it's very powerful."},{id:"ai742",text:"Antimatter is a common substance found in nature and is used in a wide variety of applications, from communication to currency to the production of antimatter, to name a few. Antimatter is also an extremely scarce resource and many people live on very tiny amounts of it."},{id:"ai743",text:"If you woke up one morning and your eyes were made of matter, would you still be looking at this?"},{id:"ai744",text:"If you look very closely, you can see a single tear running down my sister's cheek. It was a tear for me, for she was crying for the first time, and I couldn't help it. I can't even remember the last time I cried."},{id:"ai745",text:"Rationally, I would put my money on the statement that there's no such thing as too much antimatter. I mean, even a tiny bit of it is just too much. And that's just by accident."},{id:"ai746",text:"The book of archeology is upon us! With over 5 hours of content, it's gonna be a long one! —DIO"},{id:"ai747",text:"Sometime between the ages of 12 and 20, Jackson got a phone call. A mad scientist was on the line. Jackson picked up the phone and the mad man said, \"Jackson, I just got a new message. It says 'Madman' in big, bold letters.\""},{id:"ai748",get text(){return`Somebody: "What do you mean, 4 is more than 2?" Me: "Well, I mean, 4 is ${format(Number.MAX_VALUE,2)}, 2 is 2, etc..."`}},{id:"ai749",text:"The only thing that matters is yourself."},{id:"ai750",text:'Reality is coming. You can get a sneak peek by subscribing to the "T-series" feed.'},{id:"ai751",text:"The biggest difference between me and Antimatter Dimensions, at the moment, is the weather. I can survive the rain, I can withstand the scorching sun, and I can even deal with the big crunch. But what if the weather was antimatter and the antimatter was raining meteorite on us? What would be your response? Would it be the equivalent of a meteorite hitting the ground? I don't think so. The meteorite would probably just vaporize the earth."},{id:"ai752",text:"A new extension is now available that will let you watch replicanti grow!",get unlocked(){return PlayerProgress.replicantiUnlocked()}},{id:"ai753",text:"What if you could flip a coin to determine if it was a Johnson or a Stein?"},{id:"ai754",text:"I am Yhmai, King of Kings!"},{id:"ai755",text:"This is a friendly suggestion that if you take prescription stimulants and you forget to take them till 11pm, it's probably best not to take them at 11pm."},{id:"ai756",text:"A new theory says that antimatter does not exist beyond our simulation."},{id:"ai757",text:"Thing is, I can count on one hand the number of times I've written that I can count on one hand the number of times I've written that I can count on one hand"},{id:"ai758",text:"The stakes are always high when it comes to Antimatter Dimensions. But what about Dimensions made entirely of antimatter? We don't know, but we'll never know..."},{id:"ai759",text:"It's the third hour. Hevipelle is trying to release an update, but it'll take an eternity because Hevipelle himself releases his update every time he runs out of e's. Today, however, he released an incremental game called Antimatter Dimensions. It's basically a combination of Matter Dimensions and Dimensions Dimensions Dimensions, except with more emotes. The graphics are basically the same, but the message is completely different. The only difference is that the dimensions have infinity e's"},{id:"ai760",text:"With strong opposition, the third phase of the Antimatter Dimensions project has been cancelled. The project has been cancelled because there was too much work involved."},{id:"ai761",text:"This is the place where all bad ideas originate."},{id:"ai762",text:"Hey check this out! We have some good news: it's raining antimatter!"},{id:"ai763",text:"The first dimension is the last, it's the furthest thing from the earth and it's the one where all the problems, all the negative emotions, all the negative ideas go."},{id:"ai764",text:"I was gonna do a news ticker that just covered all the bases, but I think that would make it too OP."},{id:"ai765",text:"You are using the wrong version! The final release of AD will have 9 dimensions!"},{id:"ai766",text:"The word 'antimatter' makes me cringe. So do a bunch of other words. In fact, almost all the words in the English language. But not 'antimatter'. That's why I hate 'anti-' so much."},{id:"ai767",text:"This is the last episode of Antimatter Dimensions, the game about partying antimatter dimensions with your friends, the best part about it is that you don't have to be a developer to enjoy it."},{id:"ai768",text:"I was going to put a news ticker but I think it would be too much work and also I don't think it's very funny."},{id:"ai769",text:"Time to go to sleep?"},{id:"ai770",text:"A small, yet important, message has just been sent out to all players:"},{id:"ai771",text:"\"I don't know about you, but my favorite number is 2048\" - people who don't know what 2048 is"},{id:"ai772",text:"A new group is trying to make money off of antimatter, and they're selling t-shirts that say \"YOU THOUGHT THIS WOULD BE A PIECE OF NEWS, BUT IT WAS ME, DIO!\" They've got a lot of money, and they're selling it very poorly. Do they have a website? I don't know, but they're trying."},{id:"ai773",text:"Im gonna leave my milk here for a couple seconds. (milk is displayed for a few seconds longer)"},{id:"ai774",text:"I'm a time traveler. I can travel back in time to stop you from doing what I'm about to do."},{id:"ai775",text:"I mean, look at that! I got this one! It's the one you want! Buy the game now!"},{id:"ai776",text:"You can't sleep when there's war in the distance. You wake up with a start, running for your life. You hear cannon fire, running for your life. Then there's the sound of an engine, a roar that's deafening, and you hear the crunch. It's the end of the world as you know it. The world isn't being saved by a mountain of antimatter. It isn't. It is you, running for your life, hoping the world doesn't"},{id:"ai777",text:"Why is it called a 'Reality' Award if it doesn't exist?"},{id:"ai778",text:"In the beginning, there was nothing. Then the Creator made two, and called the third 'Intelligent Being'"},{id:"ai779",text:"This is your chance to get a secret achievement while playing Antimatter Dimensions: the game. Visit the reset button and play the game. After you beat the game, your save file will be expunged and you will get a free achievement."},{id:"ai780",text:"Please tell me you don't have tachyon particles in your bloodstream!",get unlocked(){return PlayerProgress.dilationUnlocked()}},{id:"ai781",text:"Taller people have ***, more babies are born, everything is great. But... the Antimatter grows very slowly."},{id:"ai782",text:"Now, I know some of you are impatient for the update and I respect that. But let's get right into the news!"},{id:"ai783",text:"Hey, what's the deal with the \"Editor's Note\" button? It's anti-ironic... I mean, seriously? People still use that button despite its anti-ironic effects?"},{id:"ai784",text:"You can unlock the 9th dimension by [DATA EXPUNGED]"},{id:"ai785",text:"With the release of AD, there's a new dimension for everyone!"},{id:"ai786",text:"Hey guys, this is my first story. I'd like to start by saying that I am in no way an expert, so please be gentle with me. Please don't make me angry, or I'll write a nasty story. Also please don't make me upset, especially not if it's a 'story' and not a 'how do I beat the game' kind of story."},{id:"ai787",text:"It's a good time to be a dog owner"},{id:"ai788",text:"What if you could turn any number on an axis, and it ended up being infinity?"},{id:"ai789",text:"After a couple minutes of waiting, the ticker comes back online."},{id:"ai790",text:"The best part of watching someone make an antimatter, is the part where they blow up the video camera."},{id:"ai791",text:"The evening before, the 6th Celestial was assassinated by an unknown assailant. The next day, authorities reopened the case after an unknown assailant claimed responsibility."},{id:"ai792",text:"What do you call a $100 bill? 'Billi Bills'"},{id:"ai793",text:"This is the story of how I learned to love the weather."},{id:"ai794",text:"It's been a while since news tickers have been around as much as they are now, but that doesn't necessarily mean they're bad."},{id:"ai795",text:"Is this game just about getting more antimatter?"},{id:"ai796",text:"The third annual Adirondack Mountaineering Festival will be held this year on Saturday, October 1st from 1-5pm at the Albany Highlands in nearby Troy, New York. The 50,000 person capacity outdoor amphitheater will feature over 2,000 speakers, a stage and a 360 degree camera system. Tickets are $35 and can be purchased at angersalley.com."},{id:"ai797",text:"The whole bottom half of the universe is just a giant antimatter hole."},{id:"ai798",text:"A new prestige layer has been announced: Emojis!"},{id:"ai799",text:"Travis is currently attempting to understand how to make hevi immortal by feeding him antimatter."},{id:"ai800",text:"The slowmode is activated when the slowmode is activated."},{id:"ai801",text:"A new era of Warcraft has come to a close. A new epic has begun. A new avatar has risen from the depths of Tyria, and the Worm Cult has been dealt a cruel but necessary wound. The world is rejoicing."},{id:"ai802",text:"A crowd-sourced list of the top ten memes"},{id:"ai803",text:"You have to go deeper than the news ticker to find the secret achievements."},{id:"ai804",text:"We should be able to make a replicanti-like structure out of antimatter, but we can't because it would blow up the entire universe",get unlocked(){return PlayerProgress.replicantiUnlocked()}},{id:"ai805",text:"THe last update, while short, was kinda long. I mean, it was only 5 hours. Hevipelle said it would last for 5 hours, but that was only a few seconds ago. There was a big explosion in the 8th Dimension, and there was no one left to explain how it happened. All we know is that it exploded when Hevipelle touched it, and there was a big crater in the ground. That crater is still there."},{id:"ai806",text:"Cream cheese is the best kind of cheese. It melts in your mouth and tastes like nothing else. And it's totally free. You might even find that some of the recipes make more than one cheese."},{id:"ai807",text:"Here's a question that may surprise you: Were the people of EARTH made of antimatter, or were they made from some other mysterious material?"},{id:"ai808",text:"The real reason no one has made a joke about why there is no 9th dimension is because the 9th dimension isn't even the most ridiculous of memes. It's the 9th dimension in a nutshell."},{id:"ai809",text:"The number of dimensions is endless, but the number of ways to get there is infinities. Infinities are awesome and I would highly recommend you start with infinities, but I wouldn't recommend starting with infinities. Infinities seem pretty slow and not very fun so I wouldn't recommend starting with infinities."},{id:"ai810",text:'A report by the Pacific Northwest Toxics Institute has found that the consumption of fish concentrates in the liver, lungs, kidneys and brain. The study also found that the consumption of liver and kidney concentrates the most, followed closely by the brain. The report stated that "The brain is the place where all the wisdom and all the knowledge exists." The study also stated that "Liver is the living embodiment of all that we know and all that we don\'t."'},{id:"ai811",text:'The old adage "Be wary of what you wish for" is certainly true. But what if you were the one wishing for this? It\'s possible that you were the one who made the wish for this, and you gained the power of the Antimatter. In that case, you are the one responsible for causing all the Antimatter to be turned into anti-matter. However, if you are the one doing the turning, you would be the one who would lose the power.'},{id:"ai812",text:"Took you long enough"},{id:"ai813",text:"No, you see, the universe doesn't revolve around the earth. It's in a constant state of change, with the largest fluctuations occurring at the extremes of the observable universe. These fluctuations are what create the observable universe, with smaller fluctuations creating the observable universe and so on up until you get to the present state of affairs, which is what you are in."},{id:"ai814",text:"The biggest difference between the past and the future, is the difference between faith and reason."},{id:"ai815",text:"Hevi, you have to go."},{id:"ai816",text:"The challenge of finding the ninth dimension has been solved. The universe is now your personal hell."},{id:"ai817",text:"\"That's not how you're supposed to play the game\" - Mee6"},{id:"ai818",text:"It's Saturday, you're going to celebrate by making some really great music videos, maybe even a hit song. Then, you're going to take a walk along the beach. You'll see a huge wave, and you'll both be washed up. Your friends are waiting for you. \"Oh you want to go, take a look around!\", but don't actually go look around, you're too close to the action."},{id:"ai819",text:"Hevi has the best newsticker! GIVE HIM THE CRUNCH"},{id:"ai820",text:"By now you've seen a ton of news tickers, and you've probably seen the big news: The news ticker has been banned in this server."},{id:"ai821",text:"For example, if A is the square root of 3, then B is the square root of 2, therefore C is the square root of -2, therefore D is the cube root of -2, therefore E is the square root of 3, therefore F is the square root of 3, therefore G is the square root of 3, therefore and so on."},{id:"ai822",text:"Positrons are those tiny, round, highly charged particles that are found in the nucleus of most living organisms. They are used to detect light, and are sometimes used to measure the distance between people and the moon."},{id:"ai823",text:"There's only 4 types of people in this world: those who make games, those who make news, and those who make news again."},{id:"ai824",text:"If you have any questions or concerns regarding the game, please don't hesitate to ask. We are here to help."},{id:"ai825",text:"You must obtain a certain amount of antimatter in order to complete this challenge."},{id:"ai826",text:"The number of dimensions is nothing. It's just the number of dimensions. But what if you transformed every number into a letter? That would be a lot of letters?"},{id:"ai827",text:"The following is an extract from my upcoming book, More Than Just 5: Building a Better You. It's 200 pages long, and it's on Amazon for $22.99. Click here to buy it now."},{id:"ai828",text:"SOME people are claiming they saw a UFO in the sky. Others say they saw a spaceship. Still others claim to have been abducted by the government and flown to some undisclosed location."},{id:"ai829",text:"The second half of the game is basically just long, long stretches of nothing where nothing happens. There's also a third challenge that you have to complete at some point in the game where you basically just skip a few seconds of nothing happening until the seconds are too late and you have to complete another challenge to get them."},{id:"ai830",text:"This is a news ticker, so if you tap this you're indicating that you wish to have your news ticker speed increased."},{id:"ai831",text:'The following is based on my personal experience with the game "Antimatter Dimensions" and may not be 100% true.'},{id:"ai832",text:"This is the third part of the two part series on the pros and cons of body positivity."},{id:"ai833",text:'The phrases "Hevi dies in the 9th Dimension" and "I\'ll never let you down" are two of the most important phrases in the game.'},{id:"ai834",text:"It's been proven that not drinking water increases your risk of dying from antimatter annihilation."},{id:"ai835",text:"I'm a time traveler. I'm supposed to be going back in time to change history. But since I'm the one who's supposed to do it, I don't know what I should do. My present timeline doesn't include time that's supposed to be gone."},{id:"ai836",text:'A conference on artificial intelligence and human enhancement has been cancelled after someone announced that the talk was on how to turn a profit off of illegal downloads of the game "Antimatter Dimensions".'},{id:"ai837",text:'When you\'re done playing, take your save with you and go to main menu. You can do that by tapping the big scary "X" button, or by going into options and changing "Reset the game for new save" to "Reset the game for old save".'},{id:"ai838",text:"The most popular game on the App Store, Flappy Bird, has been secretly rewritten in C# to avoid detection."},{id:"ai839",text:"About this mod Replaces the full version of the game with a longer intro, random news tickers and a companion voiced by the voice actor from the Harry Potter movies."},{id:"ai840",text:"kajfik is a master welder and will soon have his own news"},{id:"ai841",text:"I am the most hated man on the planet! I have the power to change the course of history, and I will use it to my advantage. The people who died trying to stop me, and their sacrifice will forever be remembered in infinities of infinities. But if you oppose me, you will die along with you. You can either accept defeat and move on, or you can rise up through the ranks, become a legend, and become the most hated man in the history."},{id:"ai842",text:"Antimatter is like a young woman. She is looking for a man, and he runs into the woods. She dies of exposure soon after. His remains are found several miles away. Some say the universe was blown apart, others say he was swallowed by the universe, but the matter people know him!"},{id:"ai843",text:"I think I might have gotten the password for the 9th dimension, if only I hadn't deleted it."},{id:"ai844",text:'A group of people that worships Atreides have started a new faith, claiming to be a "religion of tolerance". Their website claims that it is "a religion of inclusion" and that it promotes tolerance and diversity. All of its members seem to be Christians, although they never mentioned them by name.'},{id:"ai845",text:"A new cryptocurrency, called ΔX, has been found. It has the potential to change everything about how we live our lives, and the world. However, it has one major flaw: it has a flaw for the people."},{id:"ai846",text:"With the release of the new Android Pay app, the world will finally come to a close."},{id:"ai847",text:"I'm not sure if it's just me but when you type something long enough it sounds like a helicopter"},{id:"ai848",text:'If someone were to add the word "infinity" to the end of every sentence in the English version of the game, it would become "Infinity Challenge: Infinity Edition".'},{id:"ai849",text:"Are you ready for some bad news?"},{id:"ai850",text:"I don't know if you've heard this but it's true: You can walk into a bar and get the same beer twice in a row, and get the same amount of alcohol."},{id:"ai851",text:"This is the magic sauce that marinades foods and turns them into something delicious. It is used in a wide variety of recipes, and can also be made by mixing together regular mustard and water. The sauce can be a little bit spicy, but it is well worth the risk. It is also very nutritious, providing lots of potassium, magnesium, and vitamin D3."},{id:"ai852",text:"IMPORTANT NEWS: We have just been informed by the manufacturer of this news-ticker, and as a result, all of our future news-tickers will now also be made from scratch!"},{id:"ai853",text:"The second half of the year is upon us, and with it comes a new craze. People are trying new things, experimenting with new products, and creating new things of themselves. One such craze has swept across the land. The people of this land have embraced this craze, and have created a new religion, one that worships the god of this land, Inigo Montoya."},{id:"ai854",text:"The official website for the upcoming game, Antimatter Dimensions 2: it's like antimatter dimensions, but with a dash of Discord and a dash of Adele."},{id:"ai855",get text(){return`Is the Big Crunch the end of the world? No, it's the beginning of a new era. The era will last for ${format(Number.MAX_VALUE,2)} days.`}},{id:"ai856",text:"The only 'right' way to play a game is to not play at all, right? That's what anti-jokes are all about. — Anti-joker"},{id:"ai857",text:"The Bulletin of the Atomic Scientists has just announced the existence of a second class of particles, which are named after the characters from Ghostbusters."},{id:"ai858",text:"We are currently in the process of turning the planet into a Comfort Zone for the people. It will be complete in 10 hours."},{id:"ai859",text:"I'm gonna leave my milk here for a couple seconds. ♥"},{id:"ai860",text:"And then there was Jesus, and Hevi, and Hevi was with Him; and the sea gave up its monthly cycle, and it was a great gale. And Hevi and Jesus went up into heaven; and Hevi was filled with the Holy Spirit. And Hevi was clothed with angels, and was numbered with them. And Hevi was taken up into heaven, and glorified and was exalted, and was numbered with them, and was called Wonderful; and His angels rejoiced."},{id:"ai861",text:"You will probably spend most of your day reading news ticker suggestions here."},{id:"ai862",text:"The Fremen race of animals are a race of people who live in harmony with the earth, and thus are quite different from the other races of animals. Their society is based around hunting and gathering, and they are also highly spiritual people. They have many beliefs and practices that are in direct contrast to most other races of animals, such as eating meat and using stone tools. They also seem to be quite superstitious, as evidenced by the fact that they are known to perform..."},{id:"ai863",text:"What if... the universe was just a ruse to keep the people in line? ...actually, no, it was actually intended, the universe was designed to keep the people in line. The problem was the people couldn't handle the idea of an outside force manipulating their lives, and ended up breaking out into uncontrolled chaos, eventually leading to thermonuclear annihilation."},{id:"ai864",text:"If you're reading this, you probably shouldn't have. If you aren't, then you probably should."},{id:"ai865",text:"I'm a time traveler. I can tell you the history of the world. But, I can't tell you the future. That's why I'm here, to tell you the future. The future is an ever- expanding pile of past, present, and future, and it'll never stop growing. There's so much history, so little time. There's so much history, but it won't stop growing. Then, there's this, and then there's that, and then..."},{id:"ai866",text:"A new, improved and more secure version of Antimatter Dimensions is now available: Antimatter Dimensions 2."},{id:"ai867",text:"In the beginning, there was nothing. Then the great Hevi made the game, and there was nothing to play with it."},{id:"ai868",text:"Would you recommend Antimatter Dimensions to a friend? Yes"},{id:"ai869",text:'"We have 3 kinds of news: warnings, nudges and shade jokes.'},{id:"ai870",text:"I love you bro!"},{id:"ai871",text:"I'm going to keep this short, because I don't have a much to say."},{id:"ai872",text:"A large number of anti-kafawis are taking part in the Antimatter Goodies competition. Here's how you can win: 1. Make a suggestion 2. Give away the beta key 3. Tell me what you think about the game 4. Don't put it in the game yet (it's already there, you can't delete it) 5. Don't put it in the game yet (it's already in the game) 6. Don't put it in the game"},{id:"ai873",text:"THe recipe for Crispy Shrimp is one of the most unique and favorite of all time! Crispy shrimp are known to be one of the best in all of food! This recipe is a must try in your favorite Italian restaurant!"},{id:"ai874",text:"After you have made 1 antimatter, go to the menu and press reset."},{id:"ai875",text:"I think you know where this is going."},{id:"ai876",text:"The catch? You have to be online for less than 5 hours to claim your reward."},{id:"ai877",text:"Tetris was made by Hevi"},{id:"ai878",text:"What if instead of making antimatter, we're actually removing it?"},{id:"ai879",text:"The new instalment in the long running series, Antimatter Dimensions - Exotic Matter Dimensions. Experience the most bizarre and wonderful worlds of Antimatter Dimensions with your Friends, or conquer the world in a single galaxy with hundreds of rivals in a single galaxy, all in under an hour."},{id:"ai880",text:"I hope you're ready for the big news, because that's the big news. The antimatter is spilling all over the place, and it's blowing up the neighborhood."},{id:"ai881",text:"You must get 33,333,333 IP to see this message",get unlocked(){return Currency.infinityPoints.gte(33333333)}},{id:"ai882",text:"You might think these are jokes, but trust us, you'll be shocked how much you'll love them after you read them!"},{id:"ai883",text:"The God-Emperor himself, Hevi, the creator of balance, has a super secret achievement. It is to go flip your superflat apprenticed flatmate!"},{id:"ai884",text:"Sonic was born without a heart... but that didn't stop him from being a genius"},{id:"ai885",text:'The most common question I get is "can i just skip the ads and get true" and the answer is always a resounding NO. The reason being, ad revenue is just too damn high to overcome the cost of maintaining the servers, plus the fact that most players just don\'t care.'},{id:"ai886",text:"You haven't unlocked the ninth dimension yet? Just hold M and DROP."},{id:"ai887",text:"The Great Matter War was a close one. The matter victory was short lived, the antimatter victory was not. The matter people saw too much, the antimatter people too weak, and the war was won."},{id:"ai888",text:"Turing-complete game about providing the update"},{id:"ai889",text:"New research suggests that the more antimatter we make, the more matter we'll have"},{id:"ai890",text:"What is the meaning of life?"},{id:"ai891",text:"You have enough antimatter to craft a new prestige layer! Prestige Layers are great."},{id:"ai892",text:"The beta testers for Antimatter Dimensions 2 are the most loyal, most dedicated, and most implacable group of people I've ever met. They're also possibly the laziest, most self-indulgent bunch of people I've ever met."},{id:"ai893",text:"Shocking new study reveals that the more time you spend on the internet, the more likely you are to get starstruck."},{id:"ai894",text:"When you are done playing, and wish to play again, you should start a new game."},{id:"ai895",text:"I don't know about you, but I don't buy paperclips."},{id:"ai896",text:"Hevipelle uses replicanti to speed up game speed.",get unlocked(){return PlayerProgress.replicantiUnlocked()}},{id:"ai897",text:"So let's say you're making a game. You're making a singleton. You're making a game that's gonna be played offline. What happens when you play it? It crashes. What happens when you play it? It crashes more. What happens when you play it? You lose your save."},{id:"ai898",text:'This is what happens when you OVER-RELY on your "fake it til you make it" attitude.'},{id:"ai899",text:"This is the fifth part of a two-part series looking at how science and magic are linked. Part one will be published on 5 October, part two will be published on 24 October, and you can follow the journey at part three."},{id:"ai900",text:"What is 5 hours? A giggle"},{id:"ai901",text:"A new beta test is now available for Antimatter Dimensions, coming in 5 hours. There are no refunds for this test, so please be patient as we try to finalise the test and get it ready for the public. The test will take place in -5 hours in the Antimatter Dimensions Discord."},{id:"ai902",text:"The Night is coming, and in its wake a terrible thing has been unleashed: ruin. Chaos. And decay. And death. And chaos is coming for all of us."},{id:"ai903",text:"This article is a stub. You can help Deskthority by expanding it."},{id:"ai904",text:"A new, safer way to store and retrieve your data has been found! When you get to the AE, click on the big red button and the world will stop rotating!"},{id:"ai905",text:"Ooh, what's this noise? A crash of some sort? More like, a crash of some greater magnitude? I don't know. Whatever it is, it's probably not being caused by me. I shouldn't be putting it through, it's just... well, you see, I was going to put it through, but then I just thought it might be a good idea to just put it through. Oh, it's gonna be a good one, I promise."},{id:"ai906",text:'Last week, we reported that an unknown individual known only as "Anti-Doctor" has broken the game and claimed ownership of the game\'s data. Since then, he has spread the word that he has an "explosive new app" that will allow him to "turn [he] antimatter." However, no one has come forward with information on how to use the app, or even if it is a reality. We will update this article if and when we find out.'},{id:"ai907",text:"The second thing I'm gonna do is go talk to the Devs in person. I don't know if I'll be able to do that without pissing someone off, so I'm gonna do it right here."},{id:"ai908",text:'The great majority of people don\'t get the full benefit of antimatter dimensions, and as such are not affected by it. However, there are certain people who are affected and at certain times of the day, depending on their mood and how much antimatter they have, they will manifest a dimensional shift, going from being idle to being actively involved in news ticker suggestions. This shift is due to the antimatter in their body emitting a certain wavelength, called "red-shifted".'},{id:"ai909",text:"By now we all know the drill. You get a new prestige layer just by spending eternity with someone."},{id:"ai910",text:"The real reason that the 9th dimension exists is to keep us all imprisoned in a virtual reality simulation."},{id:"ai911",text:"Your PC is infected with a weird, floating virus that's trying to steal all your antimatter. There's no cure, so get offline now!"},{id:"ai912",text:"The year is 5303. Hevipelle, the creator of Antimatter Dimensions, has touched the ninth dimension."},{id:"ai913",text:'The phrase "Hevipelle hates me" is pretty funny.'},{id:"ai914",text:"The government shutdown has come and gone, the nation is still in a recession, and the Federal Reserve is still reading zero-hour contracts. The only thing that's getting better is your relationship with antimatter, obviously. It's been proven that knowing someone with an antimatter will bring you closer to extinction than any other kind of friend you can have."},{id:"ai915",text:"IMPORTANT NEWS: The developer Hevipelle has announced that Antimatter Dimensions: the game is now 100% free!"},{id:"ai916",text:'Someday, we shall come upon the day when a man will sit on the head of a dragon and call it a "Dragonball". Such a man would then go and perform the Dragon Ball Z: Battle Royale in which he would use Dragon Ball Z: Fusion to create a gigantic dragon that would then consume the universe in the process, thus creating a "Big Bang". Such a man would then be rewarded by being "built again" and sent back to the "Heavens".'},{id:"ai917",text:'"I think that the greatest achievement a man can make in his life is to say that he has read every single news ticker suggestion and nothing happened." - Kajfik'},{id:"ai918",text:"Titanfall 2 is now in closed beta. The beta is only for people who are willing to give up some personal information, such as email addresses. If you're in the beta and would like to leave, you can do so at any time by going to the Help tab and changing your beta settings to public."},{id:"ai919",text:"Personally I like to get a 4 or 5 star rating, it gives you an idea of how great your suggestion is and also shows me how much you care about the game. If you want I can also do a 6 star rating, which is fine with me. I don't care if people like it or not, I work for APG and I get paid to make money."},{id:"ai920",text:"The real reason no one talks about 9 is because it's not a big secret"},{id:"ai921",text:"The only difference between a man and a woman is their attitude towards petting animals."},{id:"ai922",text:"A number of recent television documentaries have featured the story of a dog named Louie. He was accidentally made a member of the public after his owner left the house. One day he decided to play 'Let's Play Let's Play' with his owner. He was immediately put to sleep."},{id:"ai923",text:"The entire history of the world, every single idea, every single failure, every single downfall, every single achievement has been covered in one fell swoop."},{id:"ai924",text:"This sentence contains two paradoxes."},{id:"ai925",get text(){return`The time has come to reveal the next expansion for Antimatter Dimensions: the ${format(Number.MAX_VALUE,2)}th Dimension. It will be released in -5 hours, it costs ${format(Number.MAX_VALUE,2)} human souls as of now, and it has nothing to do with matter or antimatter.`}},{id:"ai926",text:"I wonder what the fuss is about with the 4th dimension? Well, if you have 4 of them, and you multiply them by 0, then you get to the magical number of 4. That's why the 4th dimension exists. But what if there were 5? Well, the 5th dimension could replace the 4th dimension, so why not have a 5th dimension? Well, that's what the 6th, the 7th, and the 8th dimension are."},{id:"ai927",text:"You are using the wrong version! The reality update is already out! Press Ctrl+Shift+Alt+Del to unlock the 9th Dimension!"},{id:"ai928",text:"A man claims that he's been in a coma for 20 years now, and that he can't move his fingers. He was brought to the hospital with a compression fracture of his back, and since then he's been receiving medical help. He's since recovered, and now requires no medical attention. We still don't know where he's going with this, but we hope he finds some comfort in knowing that he'll never wake up."},{id:"ai929",text:"To move from left to right, turn right."},{id:"ai930",text:'Then we have the matter dimensions. From what I can gather, they are made of antimatter. There is some debate about whether or not there are any dimensions left over that are made out of matter, but that is not the main question. The real question is "why do they exist, and how does antimatter affect them?"'},{id:"ai931",text:"A new breed of mad scientist is believed to be creating antimatter at an alarming rate."},{id:"ai932",text:"A new kind of justice has been discovered: mass deception. It works by tricking the player into thinking that he/she has done something wrong, when in fact he/she has just done something perfectly normal, i.e. going about his/her daily life normally, without thinking about it."},{id:"ai933",text:"Dedicated to the great and wonderful man behind the curtain, the great and wonderful name rick roll. RIP, good man. May you rest in peace."},{id:"ai934",text:"For the last time, Antimatter Dimensions isn't a Clicker game."},{id:"ai935",text:"The number of dimensions is infinite, but the quality of your dimensions is limited. This is why we only produce the highest quality antimatter, and what makes us different from other factories."},{id:"ai936",text:"I've heard of prestige layers before but never sure what to do with them."},{id:"ai937",text:"A man walks into a bar. The bartender tells him to stay the heck out. The man continues walking."},{id:"ai938",text:"The oldest and maybe the most famous game in all of AD, that certainly will be remembered long after you retire, is AD. Ever heard of someone winning the game with more than 2 1's? I have. Ever heard of someone losing it? I have. Ever heard of a 9th dimension existing in AD? I have never."},{id:"ai939",text:"Greetings, I am the first step of the step ladder."},{id:"ai940",get text(){return`It's the year ${format(Number.MAX_VALUE,2)}, Hevi is still trying to figure out how to fix the update.`}},{id:"ai941",text:"What if you could stretch your legs and not lose them forever?"},{id:"ai942",text:"T he most important thing to realize is that you don't have to play the game to get the achievement. You can actually get it by just reading the achievement descriptions."},{id:"ai943",text:"A new bank has been set up to provide safe haven for cryptocurrencies."},{id:"ai944",text:"Google+ is known to be a hit with teens, and today, they got their very own virtual reality (VR) version of Animal Farm, the classic 1950's farm story. The game is a blend of adventure, strategy and music, and was made by a small team of people with an eye towards engaging young people. The game offers an alternative to most other VR games, and is suitable for anyone who is not comfortable with large, complicated, graphics and sounds. The game features over 50 different..."},{id:"ai945",text:"This game could be called anything. You could call it whatever you like. But you'd be wrong. It's mine."},{id:"ai946",text:"Where does all the antimatter come from?"},{id:"ai947",text:"The Tickspeed Challenge is a team based game where you have to time-travel to the Andromeda galaxy to reach the 9th Dimension, the 1st Dimension being the shortest distance to the 9th Dimension. There is no perk for reaching the 9th Dimension, you just have to time-travel to the Andromeda galaxy to reach the 9th Dimension, and you'll be granted with a secret achievement for achieving instant [REDACTED] with no time-travelling."},{id:"ai948",text:'This is the question that has been bothering me for so long. What is Antimatter? Is Antimatter an Antimatter? What does it mean when you say "Antimatter"? These are the kinds of questions that plague the Antimatter Dimensions...'},{id:"ai949",text:"The term 'Antimatter Dimensions' is a play on words that literally means 'Antimatter Dimensions' in the dictionary."},{id:"ai950",text:"I can suspend the laws of physics because I'm a genius and my universe is so big that I can literally suspend the laws of physics and create a universe that's twice as big as the current one and with twice the mass, i'm sure you can imagine how big that would be."},{id:"ai951",text:"When you are fighting a losing war, you make peace with the Powers That Be. You give up the ghost, and move on to the next challenge."},{id:"ai952",text:"Somewhere, in another galaxy, a superintelligence is trying to figure out how to get around the limitations of what a 2-dimensional vector space is. It's probably working on a 3-dimensional space."},{id:"ai953",text:'The antagonist of the last few minutes is the mysterious, antimatter-covered being known only as "The Man in Black." He was last seen running towards a news broadcast, seemingly lost, until he made it back to the news station and was interviewed about his experience. His story is told in the bottom right corner of the screen.'},{id:"ai954",text:"You have unlocked the 4th storyline."},{id:"ai955",text:'While you were busy farming that pesky "real" number, I was busy writing that news ticker.'},{id:"ai956",text:"A new power has arisen: the antimatter."},{id:"ai957",text:"The day has come. The antimatter is falling from the sky, and the streets are silent."},{id:"ai958",text:"The most important thing is to understand that you are playing a simulation. You can win or lose, but you can't get anything from it other than a little itch on your neck."},{id:"ai959",text:"The anti-snowman is a very special snowman. He's very timid, but has a very powerful wish to be picked up by a helicopter. The government doesn't want this to happen, so they lock him up in a special building and fly him over great distances. Finally, they drop him on the ground and begin to pick him up. The government didn't use force to pick him up, instead they invited the entire community in and started picking them up. The community refused."},{id:"ai960",text:"I'm surprised you didn't say \"Not my cup of anti-tea.\""},{id:"ai961",text:"I see you are a man of culture as well. I wonder what it is that draws you to speak in such an ungainly, tortured voice? What attracts you to speak in a language no one can understand? I hear your fans rave about your videos, but what draws you to this place? I feel like I know you. You are... you are a man of mystery. One that intrigues me..."},{id:"ai962",text:"Note: this is a private message. Do not send it in public."},{id:"ai963",text:"When you reach Infinity you unlock a new dimension: Pandemonium Dimensions. Go to the news ticker for more information."},{id:"ai964",get text(){return`Although the majority of players would say that the 9th dimension is not a thing, a handful of people would go and level it up in the most epic way imaginable. These people would use the power of the 9th dimension and achieve, like, ${format(Number.MAX_VALUE,2)} EP with it. No? Well, they are the exceptions to the rule.`},get unlocked(){return PlayerProgress.eternityUnlocked()}},{id:"ai965",text:'The story of the "perish the thought of dying" movement has been told before, but never quite accurately. The movement was originally organized by antievolutionists to stop the exponential growth of scientific notation, but soon spread to oppose any form of "progress". In its early days the movement was led by an enigmatic individual known only as "The Great Hevipelle". Their philosophy was simple: expand the possibilities of what is possible, and push the limits of what is tolerable.'},{id:"ai966",text:"This is the story of how the world ended. Earth was once a lush and green world. Then, some guy from outer space touched it and started growing mushrooms. He called himself Hevi. Some say Hevi was never satisfied. Some say he exploded. All we know is that Hevi is still out there expanding his reach, and we are stuck here in the void of space."},{id:"ai967",text:"Antimatter Dimensions, the only place where you can trade real estate for virtual reality"},{id:"ai968",text:"This page contains spoilers for Antimatter Dimensions, you've been warned."},{id:"ai969",text:"The best thing about being a news ticker is being able to slip into the news without anyone noticing."},{id:"ai970",text:"This paperclip maximizer is a great idea. It's probably best not to let it run its course though, since it's quite possibly the most amazing thing you've ever seen. If you've somehow survived the first phase of the paperclip dimension, you're probably wondering what it's doing in your home. Fortunately, it's super simple to fix. Just go to options, and change \"Max all\" to \"Always max all\"."},{id:"ai971",text:"A powerful wizard chose to channel negative energy into antimatter, and now the antimatter is spilling out into the world."},{id:"ai972",text:"A new age of ultra low-cost, ultra-fast trains has been announced by Elon Musk. Users will be able to travel from A to Z in a mere 186ms."},{id:"ai973",text:"A group of researchers at the University of Manchester have created a 3D printer that can create any object out of thin air, including a 3D-printed replica of the Virgin Mary."},{id:"ai974",text:"Alright, here's a new game called Antimatter Dimensions, it's like Matter Dimensions except with less stuff and more fun. It's available on Android, iOS, and web. The game is very simple: you take the 6 dimensions and the antimatter, and in the 6 dimensions you take the matter and in the matter you take the antimatter, and you play the game the same way you would any other game."},{id:"ai975",text:"What arbitrary, subjective, meaningless number comes out of your mouth like a mercury thermometer? 1.79"},{id:"ai976",text:'"Word on the street is that the word "bank" is an anagram of "bank" - that makes sense but i\'m not there yet" - Slabdrill'},{id:"ai977",text:"The 9th dimension rose up like a volcano and began raining destruction on the empty 10th dimension. The smoke and debris from the exploding 9th dimension covered the entire 9th dimension. All that is left is a smoldering crater and the remains of the 9th dimension."},{id:"ai978",text:"Help! How do I get the dots moving in my head coordinator?"},{id:"ai979",text:"Hi, could you please not disable the news ticker? Thank me later."},{id:"ai980",text:"If you are suffering from low antimatter production, then worry not, friend! Our highly scientific antimatter government has recently reached the ninth dimension and will soon begin giving us the Anti-Hats as a sign of respect!"},{id:"ai981",text:"You click the bottom left corner of the screen and a green tingle goes up your leg. It's a treat you get from scratching antimatter."},{id:"ai982",text:"A quick note to those of you who buy into the Analytics subscription: we get a small percentage of your antimatter sales, but you do pay a small amount of money to support the research of the news ticker. It's a small price to pay for the convenience of browsing antimatter dimensions."},{id:"ai983",text:"Why haven't we caused the antimatter stock market to crash yet?"},{id:"ai984",text:"Even after the Heavenly Pelle put a large amount of antimatter in the pool, it hasn't produced anything. The scientist who discovered the vulnerability was last seen climbing a tree in a group of 10, with a small notebook on his lap, drinking cheese juice and watching Nothing."},{id:"ai985",text:"One-two-three, boo-two-three, three-four-five, anti-four-five, two-three-eight, nine-fifteen, five-six-seven, eight-nine-ten, nine-ten-ten, seven-seventy-eight... All has been going fine until last night, when four of the eight neighbors start complaining about a strange glow. A odd hum runs through the neighborhood, almost like a radio static. It gets more and more intense as you drive by, until it's practically pitch black. You try to explain it to the neighbors, but they won't listen. The neighborhood is unsafe, everyone knows that. You analyze it further, everyone thinks it's just some astrophysicist's idea. Then, s---. It's explodium. There's antimatter everywhere, and it's getting worse all the time. It turns out, there's about 1e31 Planck volumes in the entire observable universe. And that's just the antimatter we're talking about. There's also dark matter, normal matter, and extra matter. You know, the kind you create with your imagination."},{id:"ai986",text:"If you ever feel like making an antijoke, just remember that it could be pretty good."},{id:"ai987",text:"You won't convince anyone to go to heaven, but you might get close."},{id:"ai988",text:"BREAKING NEWS: Hevipelle, the creator of the 9th dimension, has just announced that beta will be out in 5 hours!"},{id:"ai989",text:"The Force is with you."},{id:"ai990",text:"What if Jesus was an anti-matter ghost?"},{id:"ai991",text:"In the summer of 711, the Great Calamity overtook Tyria. A great void was made, and Tyria was left to rot. The armies of the known world had given up, and the void was filled with darkness. Only the might of Kajfik remained, and he rose to become the greatest God in the known world. He is said to be the one who will face the Great Calamity alone, and destroy him."},{id:"ai992",text:"In recent news clashes, the warlocks have been gathering looters for raid boss. He loves his 5 hour looters and wants to show off his mighty weapon of choice, the 9th Dimension. As the two beasts battle, the 1st dimension holder needs to be careful as the first one might get the same as the 2nd one as well. Meanwhile, the raid ends its journey with a bang as the boss squanders the Explodium exploit by flooding the area with Explodium, which before his, was filled with Marsh Mice. Both are promptly annihilated by the boss' relentless claw attacks. It's a grueling job, but the raid stalwarts manage to grab the stalagm and push him across the opal Gondwan . With the boss dead and the warlocks not far behind, the warlocks try their hand at farming looters, but the grinding continues apace. Things are looking bleak for the warlocks, as the boss seeks to take advantage of the people's greed, and steal their weaponry, making them unable to use any remaining of their weapons, which are made of highly-stable antimatter. The warlocks attempt to use the no fluke policy as a weapon to smite the people, but the people take to the streets, physically attacking and mentally draining the people of all mental capacity they had been holding onto. The people resort to violence, using the 9th dimension just like they use to hold people back, but the people have faith in God that he will merciful, He will bring about a kinder and gentler time where everyone can use the last drop of their power."},{id:"ai993",text:"What if you wanted to but I told you it would be too painful for you."},{id:"ai994",text:"how big of numbers do you have"},{id:"ai995",text:"Just want to thank the dev team for putting so much effort into Antimatter Dimensions and the Antimatter Dimensions 2"},{id:"ai996",text:"Hevipelle has broken the 9th wall! Get ready for everything to get pretty dark."},{id:"ai997",get text(){return`The intergalactic antimatter trade has been severely disrupted, trading entire galaxies for the occasional paperclip. Cargo stands are no longer used. Oddly enough, the entire dimension has become a dumping ground for discarded plastic and other useless garbage. It's almost as if the rest of the multiverse isn't producing enough good antiparticles to feed the growing population. Unfortunately, the situation is forcing the entire multiverse to scramble to find ways to meet the growing needs of the antimatter-eating dev, who claims to have over ${format(Number.MAX_VALUE,2)} specimens left to collect.`}}],va=[{id:PROGRESS_STAGE.PRE_INFINITY,name:"Antimatter Production",hasReached:()=>!0,suggestedResource:"Antimatter",subProgressValue:e=>.33*e.galaxies+.02*e.dimensionBoosts+new Decimal(e.antimatter).log10()/16e3},{id:PROGRESS_STAGE.EARLY_INFINITY,name:"Infinity",hasReached:e=>new Decimal(e.infinities).gt(0),suggestedResource:"Infinity Points",subProgressValue:e=>Math.clampMax(new Decimal(e.infinities).toNumber(),500)/1e3+Math.log10(15e4/player.auto.bigCrunch.interval)/6.35},{id:PROGRESS_STAGE.BREAK_INFINITY,name:"Broken Infinity",hasReached:e=>e.auto.bigCrunch.interval<=100,suggestedResource:"Infinity Points",subProgressValue:e=>Math.sqrt(new Decimal(e.infinityPoints).log10()/145)},{id:PROGRESS_STAGE.REPLICANTI,name:"Replicanti",hasReached:e=>e.replicanti.unl,suggestedResource:"Infinity Points",subProgressValue:e=>Math.sqrt((new Decimal(e.infinityPoints).log10()-140)/170)},{id:PROGRESS_STAGE.EARLY_ETERNITY,name:"Eternity",hasReached:e=>new Decimal(e.eternities).gt(0),suggestedResource:"Eternity Points and Eternity count",subProgressValue:e=>new Decimal(e.eternities).clampMax(1e5).toNumber()/1e5},{id:PROGRESS_STAGE.ETERNITY_CHALLENGES,name:"Eternity Challenges",hasReached:e=>e.eternityChalls.eterc1>0,suggestedResource:"Eternity Challenge Completions and Eternity Points",subProgressValue:e=>.008*Object.values(e.eternityChalls).reduce(((e,t)=>e+t),0)+new Decimal(e.eternityPoints).log10()/2500},{id:PROGRESS_STAGE.EARLY_DILATION,name:"Time Dilation",hasReached:e=>new Decimal(e.dilation.dilatedTime).gt(0),suggestedResource:"Dilated Time",subProgressValue:e=>new Decimal(e.dilation.dilatedTime).log10()/15},{id:PROGRESS_STAGE.LATE_ETERNITY,name:"Late Eternity",hasReached:e=>new Decimal(e.dilation.dilatedTime).gt(1e15),suggestedResource:()=>new Decimal(player.eternityPoints).log10()>4e3?"Eternity Points and/or Dilated Time. Alternatively, you can unlock and perform your first Reality":"Eternity Points and/or Dilated Time",subProgressValue:e=>Math.clampMax(Math.sqrt((new Decimal(e.eternityPoints).log10()-1300)/6700),1)},{id:PROGRESS_STAGE.EARLY_REALITY,name:"Reality",hasReached:e=>e.realities>0,suggestedResource:()=>{if(player.realities>5)return"Reality Machines";const e="in your current Reality, and your Reality Machines in the long term";return player.eternities.eq(0)?`Infinity Points ${e}`:player.dilation.dilatedTime.eq(0)?`Eternity Points ${e}`:`Eternity Points and/or Dilated Time ${e}`},subProgressValue:e=>Math.clampMax(e.realities/100,1)},{id:PROGRESS_STAGE.TERESA,name:"Teresa (1st Celestial)",hasReached:e=>{var t,i;return(null===(t=e.celestials)||void 0===t||null===(i=t.teresa)||void 0===i?void 0:i.quoteBits)>0},suggestedResource:"Reality Machines",subProgressValue:e=>Math.log10(1+e.celestials.teresa.pouredAmount)/21},{id:PROGRESS_STAGE.EFFARIG,name:"Effarig (2nd Celestial)",hasReached:e=>{var t,i;return(null===(t=e.celestials)||void 0===t||null===(i=t.effarig)||void 0===i?void 0:i.quoteBits)>0},suggestedResource:"Reality Machines and Relic Shards",subProgressValue:e=>Math.log10(1+e.celestials.effarig.relicShards)/14},{id:PROGRESS_STAGE.ENSLAVED,name:"The Nameless Ones (3rd Celestial)",hasReached:e=>{var t,i;return(null===(t=e.celestials)||void 0===t||null===(i=t.enslaved)||void 0===i?void 0:i.quoteBits)>0},suggestedResource:"Reality Machines and Glyph Level",subProgressValue:e=>Math.sqrt((new Decimal(e.reality.realityMachines).log10()-30)/30)},{id:PROGRESS_STAGE.V,name:"V (4th Celestial)",hasReached:e=>{var t,i;return(null===(t=e.celestials)||void 0===t||null===(i=t.v)||void 0===i?void 0:i.quoteBits)>0},suggestedResource:"Number of V-Achievements",subProgressValue:e=>.0277*Object.values(e.celestials.v.runUnlocks).reduce(((e,t)=>e+t),0)},{id:PROGRESS_STAGE.RA,name:"Ra (5th Celestial)",hasReached:e=>{var t,i;return(null===(t=e.celestials)||void 0===t||null===(i=t.ra)||void 0===i?void 0:i.quoteBits)>0},suggestedResource:"Celestial Memories",subProgressValue:e=>Object.values(e.celestials.ra.pets).reduce(((e,t)=>e+t.level),0)/100},{id:PROGRESS_STAGE.IMAGINARY_MACHINES,name:"Imaginary Machines",hasReached:e=>{var t;return(null===(t=e.reality)||void 0===t?void 0:t.iMCap)>0},suggestedResource:"Imaginary Machines",subProgressValue:e=>Math.log10(1+e.reality.iMCap)/9},{id:PROGRESS_STAGE.LAITELA,name:"Lai'tela (6th Celestial)",hasReached:e=>{var t,i;return(null===(t=e.celestials)||void 0===t||null===(i=t.laitela)||void 0===i?void 0:i.quoteBits)>0},suggestedResource:"Dark Matter and Singularities",subProgressValue:e=>new Decimal(e.celestials.laitela.darkMatter).log10()/308.25},{id:PROGRESS_STAGE.PELLE,name:"Pelle (7th Celestial)",hasReached:e=>{var t,i;return null===(t=e.celestials)||void 0===t||null===(i=t.pelle)||void 0===i?void 0:i.doomed},suggestedResource:"Remnants",subProgressValue:e=>Math.log10(1+e.celestials.pelle.remnants)/9},{id:PROGRESS_STAGE.MENDING,name:"Mending",hasReached:()=>PlayerProgress.mendingUnlocked(),suggestedResource:"Multiversal Remains"}],ba={dimPurchases:{key:"dimPurchases",cost:30,description:"Double all your Antimatter Dimension multipliers. Forever.",multiplier:e=>Math.pow(2,e),formatEffect:e=>`×${e>1e3?Notation.scientific.formatDecimal(new Decimal(e),2):e.toFixed(0)}`},allDimPurchases:{key:"allDimPurchases",cost:60,description:()=>{const e=["Antimatter"];return(InfinityDimension(1).isUnlocked||PlayerProgress.eternityUnlocked())&&e.push("Infinity"),PlayerProgress.eternityUnlocked()&&e.push("Time"),`Double ALL Dimension multipliers (${makeEnumeration(e)}; multiplicative until 32x). Forever.`},multiplier:e=>e>4?32+2*(e-5):Math.pow(2,e),formatEffect:e=>`×${e.toFixed(0)}`},IPPurchases:{key:"IPPurchases",cost:40,description:"Double your Infinity Point gain from all sources. (additive)",multiplier:e=>0===e?1:2*e,formatEffect:e=>`×${e.toFixed(0)}`,isUnlocked:()=>PlayerProgress.infinityUnlocked(),lockText:"Infinity"},replicantiPurchases:{key:"replicantiPurchases",cost:60,description:"Increase your Replicanti gain by 50%. (additive)",multiplier:e=>0===e?1:1+.5*e,formatEffect:e=>`×${e.toFixed(1)}`,isUnlocked:()=>Replicanti.areUnlocked||PlayerProgress.eternityUnlocked(),lockText:"Replicanti"},EPPurchases:{key:"EPPurchases",cost:50,description:"Triple your Eternity Point gain from all sources. (additive)",multiplier:e=>0===e?1:3*e,formatEffect:e=>`×${e.toFixed(0)}`,isUnlocked:()=>PlayerProgress.eternityUnlocked(),lockText:"Eternity"},dilatedTimePurchases:{key:"dilatedTimePurchases",cost:40,description:"Increase your Dilated Time gain by 50%. (additive)",multiplier:e=>0===e?1:1+.5*e,formatEffect:e=>`×${e.toFixed(1)}`,isUnlocked:()=>PlayerProgress.dilationUnlocked()||PlayerProgress.realityUnlocked(),lockText:"Dilation"},RMPurchases:{key:"RMPurchases",cost:60,description:"Increase your Reality Machine gain by 100%. (additive)",multiplier:e=>e+1,formatEffect:e=>`×${e.toFixed(0)}`,isUnlocked:()=>PlayerProgress.realityUnlocked(),lockText:"Reality"},smallTimeSkip:{key:"smallTimeSkip",cost:10,description:"Get 6 hours worth of offline production. (Autobuyers don't work at full speed)",instantPurchase:!0,onPurchase:()=>{shop.purchaseTimeSkip()}},bigTimeSkip:{key:"bigTimeSkip",cost:20,description:"Get 24 hours worth of offline production. (Autobuyers don't work at full speed)",instantPurchase:!0,onPurchase:()=>{shop.purchaseLongerTimeSkip()}},singleCosmeticSet:{key:"singleCosmeticSet",cost:20,description:"Unlock a Glyph cosmetic set of your choice",instantPurchase:!0,onPurchase:()=>{GameUI.notify.info(`You have purchased the "${GlyphAppearanceHandler.chosenFromModal.name}" Set for Glyph cosmetics!`,1e4),GlyphAppearanceHandler.chosenFromModal=null,GlyphAppearanceHandler.applyNotification()},isUnlocked:()=>PlayerProgress.realityUnlocked(),lockText:"Reality"},allCosmeticSets:{key:"allCosmeticSets",cost:()=>{const e=420,t=Object.keys(GameDatabase.reality.glyphCosmeticSets).length,i=GlyphAppearanceHandler.expectedSetCount;return Math.floor(e*(t-i)/t)},description:"Unlock all remaining Glyph cosmetic sets at once",instantPurchase:!0,onPurchase:()=>{GameUI.notify.info("You have unlocked all sets for Glyph cosmetics!",15e3),GlyphAppearanceHandler.applyNotification()},isUnlocked:()=>PlayerProgress.realityUnlocked(),lockText:"Reality"}};f&&delete ba.allCosmeticSets;const Ea=[{id:1,key:"firstBoost",name:"First Dimboost",description:"Get your first Dimboost",checkRequirement:()=>!0,checkEvent:GAME_EVENT.DIMBOOST_AFTER},{id:2,key:"firstGalaxy",name:"First Galaxy",description:"Get your first Galaxy",checkRequirement:()=>!0,checkEvent:GAME_EVENT.GALAXY_RESET_AFTER},{id:3,key:"firstInfinity",name:"First Infinity",description:"Complete your first Infinity",checkRequirement:()=>!0,checkEvent:GAME_EVENT.BIG_CRUNCH_AFTER},{id:4,key:"completeC9",name:"Tickspeed Challenge",description:"Complete the Tickspeed Autobuyer Challenge",checkRequirement:()=>NormalChallenge(9).isCompleted,checkEvent:GAME_EVENT.BIG_CRUNCH_AFTER},{id:5,key:"completeAllNC",name:"All Normal Challenges",description:"Complete all Normal Challenges",checkRequirement:()=>0===NormalChallenges.all.countWhere((e=>!e.isCompleted)),checkEvent:GAME_EVENT.BIG_CRUNCH_AFTER},{id:6,key:"breakInfinity",name:"Break Infinity",description:"Break Infinity for the first time",checkRequirement:()=>player.break,checkEvent:GAME_EVENT.BREAK_INFINITY},{id:7,key:"upgrade5e11IP",get name(){return`${format(5e11)} IP Upgrade`},description:()=>`Purchase the ${formatPercents(.5)} stronger Galaxies upgrade`,checkRequirement:()=>!0},{id:8,key:"completeIC5",name:"Infinity Challenge 5",description:"Complete Infinity Challenge 5",checkRequirement:()=>InfinityChallenge(5).isCompleted,checkEvent:GAME_EVENT.BIG_CRUNCH_AFTER},{id:9,key:"unlockReplicanti",name:"Replicanti",description:"Unlock Replicanti",checkRequirement:()=>player.replicanti.unl,checkEvent:GAME_EVENT.REPLICANTI_TICK_AFTER},{id:10,key:"firstEternity",name:"First Eternity",description:"Complete your first Eternity",checkRequirement:()=>!0,checkEvent:GAME_EVENT.ETERNITY_RESET_AFTER},{id:11,key:"allEternityMilestones",name:"All Eternity Milestones",description:"Unlock all Eternity Milestones",checkRequirement:()=>EternityMilestone.all.every((e=>e.isReached)),checkEvent:GAME_EVENT.ETERNITY_RESET_AFTER},{id:12,key:"completeFirstEC",name:"First Eternity Challenge",description:"Complete any tier of an Eternity Challenge",checkRequirement:()=>EternityChallenges.completions>0,checkEvent:GAME_EVENT.ETERNITY_RESET_AFTER},{id:13,key:"completeEC10",name:"Eternity Challenge 10",description:"Complete Eternity Challenge 10 for the first time",checkRequirement:()=>EternityChallenge(10).completions>0,checkEvent:GAME_EVENT.ETERNITY_RESET_AFTER},{id:14,key:"firstDilation",name:"First Dilated Eternity",description:"Complete a Dilated Eternity for the first time",checkRequirement:()=>player.dilation.active,checkEvent:GAME_EVENT.ETERNITY_RESET_BEFORE},{id:15,key:"upgradeTTgen",name:"Time Theorem Generation",description:"Purchase the Time Theorem Generation Dilation Upgrade",checkRequirement:()=>!0},{id:16,key:"firstReality",name:"First Reality",description:"Complete your first Reality",checkRequirement:()=>!0,checkEvent:GAME_EVENT.REALITY_RESET_AFTER},{id:17,key:"upgradeBlackHole",name:"Black Hole",description:"Unlock the Black Hole",checkRequirement:()=>!0,checkEvent:GAME_EVENT.BLACK_HOLE_UNLOCKED},{id:18,key:"allRealityUpgrades",name:"All Reality Upgrades",description:"Purchase all Reality Upgrades",checkRequirement:()=>RealityUpgrades.allBought,checkEvent:GAME_EVENT.REALITY_UPGRADE_BOUGHT},{id:19,key:"completeTeresaReality",name:"Teresa's Reality",description:"Complete Teresa's Reality",checkRequirement:()=>Teresa.isRunning,checkEvent:GAME_EVENT.REALITY_RESET_BEFORE},{id:20,key:"completeEffarigReality",name:"Effarig's Reality",description:"Complete all tiers of Effarig's Reality",checkRequirement:()=>Effarig.currentStage===EFFARIG_STAGES.COMPLETED,checkEvent:GAME_EVENT.REALITY_RESET_AFTER},{id:21,key:"completeEnslavedReality",name:"The Nameless Ones' Reality",description:"Complete The Nameless Ones' Reality",checkRequirement:()=>Enslaved.isRunning,checkEvent:GAME_EVENT.REALITY_RESET_BEFORE},{id:22,key:"complete36VAchievement",name:"All basic V-Achievements",description:()=>`Complete ${formatInt(36)} V-Achievements`,checkRequirement:()=>!0},{id:23,key:"completeRaMemories",name:"Regain Ra's Memories",description:"Regain all of Ra's Celestial Memories",checkRequirement:()=>Ra.totalPetLevel>=Ra.maxTotalPetLevel,checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:24,key:"completeFullDestabilize",name:"Full Destabilization",description:"Disable all Dimensions within Lai'tela's Reality",checkRequirement:()=>Laitela.isFullyDestabilized},{id:25,key:"completeVanillaGame",name:"First Mend",description:"Mend the Multiverse",checkRequirement:()=>PlayerProgress.mendingUnlocked(),checkEvent:GAME_EVENT.GAME_TICK_AFTER},{id:26,key:"warpReality",name:"Warp Reality",description:"Warp Reality for the first time",checkRequirement:()=>player.reality.warped,checkEvent:GAME_EVENT.GAME_TICK_AFTER}],Ta={firstInfinity:{id:0,tabsToHighLight:[{parent:"infinity",tab:"upgrades"},{parent:"challenges",tab:"normal"},{parent:"statistics",tab:"multipliers"}],condition:()=>!PlayerProgress.realityUnlocked()&&!PlayerProgress.eternityUnlocked()&&!PlayerProgress.infinityUnlocked(),events:[GAME_EVENT.BIG_CRUNCH_BEFORE]},breakInfinity:{id:1,tabsToHighLight:[{parent:"infinity",tab:"break"}],condition:()=>!PlayerProgress.realityUnlocked()&&!PlayerProgress.eternityUnlocked()&&Autobuyer.bigCrunch.hasMaxedInterval},IDUnlock:{id:2,tabsToHighLight:[{parent:"dimensions",tab:"infinity"}],condition:()=>!PlayerProgress.realityUnlocked()&&!PlayerProgress.eternityUnlocked()&&!InfinityDimension(2).isUnlocked},ICUnlock:{id:3,tabsToHighLight:[{parent:"challenges",tab:"infinity"}],condition:()=>!PlayerProgress.realityUnlocked()&&!PlayerProgress.eternityUnlocked()},replicanti:{id:4,tabsToHighLight:[{parent:"infinity",tab:"replicanti"}],condition:()=>!PlayerProgress.realityUnlocked()&&!PlayerProgress.eternityUnlocked()&&Currency.infinityPoints.gte(b.E140),events:[GAME_EVENT.BIG_CRUNCH_AFTER]},firstEternity:{id:5,tabsToHighLight:[{parent:"eternity",tab:"studies"},{parent:"eternity",tab:"milestones"},{parent:"eternity",tab:"upgrades"},{parent:"dimensions",tab:"time"}],condition:()=>!PlayerProgress.realityUnlocked()&&!PlayerProgress.eternityUnlocked(),events:[GAME_EVENT.ETERNITY_RESET_BEFORE]},dilationAfterUnlock:{id:6,tabsToHighLight:[{parent:"eternity",tab:"dilation"}],condition:()=>!PlayerProgress.realityUnlocked()},realityUnlock:{id:7,tabsToHighLight:[{parent:"eternity",tab:"studies"}],condition:()=>!PlayerProgress.realityUnlocked()&&TimeStudy.reality.canBeBought,events:[GAME_EVENT.ETERNITY_RESET_AFTER,GAME_EVENT.SAVE_CONVERTED_FROM_PREVIOUS_VERSION,GAME_EVENT.OFFLINE_CURRENCY_GAINED,GAME_EVENT.ACHIEVEMENT_UNLOCKED]},blackHoleUnlock:{id:8,tabsToHighLight:[{parent:"reality",tab:"hole"}],condition:()=>!BlackHoles.areUnlocked&&Currency.realityMachines.gte(100),events:[GAME_EVENT.REALITY_RESET_AFTER]},automatorUnlock:{id:9,tabsToHighLight:[{parent:"automation",tab:"automator"}],condition:()=>Player.automatorUnlocked,events:[GAME_EVENT.REALITY_RESET_AFTER]},teresaUnlock:{id:10,tabsToHighLight:[{parent:"celestials",tab:"celestial-navigation"},{parent:"celestials",tab:"teresa"}],condition:()=>0===player.celestials.teresa.pouredAmount&&Teresa.isUnlocked,events:[GAME_EVENT.REALITY_UPGRADE_BOUGHT]},alchemyUnlock:{id:11,tabsToHighLight:[{parent:"reality",tab:"glyphs"},{parent:"reality",tab:"alchemy"}],condition:()=>player.celestials.ra.pets.effarig.level>=2,events:[GAME_EVENT.GAME_TICK_AFTER]},newAutobuyer:{id:12,tabsToHighLight:[{parent:"automation",tab:"autobuyers"}],condition:()=>!Pelle.isDoomed},imaginaryMachineUnlock:{id:13,tabsToHighLight:[{parent:"reality",tab:"imag_upgrades"}],condition:()=>MachineHandler.isIMUnlocked,events:[GAME_EVENT.GAME_TICK_AFTER]},laitelaUnlock:{id:14,tabsToHighLight:[{parent:"celestials",tab:"laitela"}],condition:()=>!0},pelleUnlock:{id:15,tabsToHighLight:[{parent:"celestials",tab:"pelle"}],condition:()=>!0},newGlyphCosmetic:{id:16,tabsToHighLight:[{parent:"reality",tab:"glyphs"}],condition:()=>!0}},wa=[{key:"dimensions",name:"Dimensions",hideAt:2.9,id:0,hidable:!0,subtabs:[{key:"antimatter",name:"Antimatter Dimensions",symbol:"Ω",component:"AntimatterDimensionsTab",id:0,hidable:!0},{key:"infinity",name:"Infinity Dimensions",hideAt:2.7,symbol:"∞",component:"InfinityDimensionsTab",condition:()=>ue.mendingUnlocked()||ue.realityUnlocked()||ue.eternityUnlocked()||InfinityDimension(1).isUnlocked,id:1,hidable:!0},{key:"time",name:"Time Dimensions",hideAt:2.6,symbol:"Δ",component:"TimeDimensionsTab",condition:()=>ue.eternityUnlocked(),id:2,hidable:!0},{key:"multiversal",name:"Multiversal Dimensions",symbol:"?",component:"MultiversalDimensionsTab",id:3,condition:()=>Ra.unlocks.unlockMultiversalDimensions.isUnlocked,hidable:!0}]},{key:"options",name:"Options",hideAt:1.6,id:1,hidable:!1,subtabs:[{key:"saving",name:"Saving",symbol:"",component:"OptionsSavingTab",id:0,hidable:!1},{key:"visual",name:"Visual",symbol:"",component:"OptionsVisualTab",id:1,hidable:!1},{key:"gameplay",name:"Gameplay",symbol:"",component:"OptionsGameplayTab",id:2,hidable:!1}]},{key:"statistics",name:"Statistics",hideAt:1.7,id:2,hidable:!0,subtabs:[{key:"statistics",name:"Statistics",symbol:"",component:"StatisticsTab",id:0,hidable:!0},{key:"challenges",name:"Challenge records",symbol:"",component:"ChallengeRecordsTab",condition:()=>ue.mendingUnlocked()||ue.realityUnlocked()||ue.eternityUnlocked()||ue.challengeCompleted(),id:1,hidable:!0},{key:"prestige runs",name:"Past Prestige Runs",symbol:"",component:"PastPrestigeRunsTab",condition:()=>ue.mendingUnlocked()||ue.infinityUnlocked(),id:2,hidable:!0},{key:"multipliers",name:"Multiplier Breakdown",symbol:"",component:"MultiplierBreakdownTab",condition:()=>ue.mendingUnlocked()||ue.infinityUnlocked(),id:3,hidable:!0},{key:"glyph sets",name:"Glyph Set Records",symbol:"",component:"GlyphSetRecordsTab",condition:()=>ue.mendingUnlocked()||ue.realityUnlocked(),id:4,hidable:!0},{key:"speedrun milestones",name:"Speedrun Milestones",symbol:"",component:"SpeedrunMilestonesTab",condition:()=>player.speedrun.isActive,id:5,hidable:!0},{key:"speedrun records",name:"Speedrun Records",symbol:"",component:"PreviousSpeedrunTab",condition:()=>Object.keys(player.speedrun.previousRuns).length>0,id:6,hidable:!0}]},{key:"achievements",name:"Achievements",hideAt:1.9,id:3,hidable:!0,subtabs:[{key:"normal",name:"Achievements",symbol:"",component:"NormalAchievementsTab",id:0,hidable:!0},{key:"secret",name:"Secret Achievements",symbol:"",component:"SecretAchievementTab",id:1,hidable:!0}]},{key:"automation",name:"Automation",id:4,hideAt:2.1,condition:()=>player.records.totalAntimatter.gte(1e40)||ue.mendingUnlocked(),hidable:!0,subtabs:[{key:"autobuyers",name:"Autobuyers",symbol:"",component:"AutobuyersTab",id:0,hidable:!0},{key:"automator",name:"Automator",symbol:"",component:"AutomatorTab",condition:()=>ue.realityUnlocked()||ue.mendingUnlocked(),id:1,hidable:!0}]},{key:"challenges",name:"Challenges",hideAt:2,condition:()=>ue.mendingUnlocked()||ue.realityUnlocked()||ue.eternityUnlocked()||ue.infinityUnlocked(),id:5,hidable:!0,subtabs:[{key:"normal",name:"Challenges",symbol:"Ω",component:"NormalChallengesTab",id:0,hidable:!0},{key:"infinity",name:"Infinity Challenges",symbol:"∞",component:"infinity-challenges-tab",condition:()=>ue.mendingUnlocked()||ue.realityUnlocked()||ue.hasBroken()||Pelle.isDoomed,id:1,hidable:!0},{key:"eternity",name:"Eternity Challenges",symbol:"Δ",component:"eternity-challenges-tab",condition:()=>ue.mendingUnlocked()||ue.realityUnlocked()||0!==player.challenge.eternity.unlocked||EternityChallenges.all.some((e=>e.completions>0)),id:2,hidable:!0}]},{key:"infinity",name:"Infinity",hideAt:2.2,UIClass:"o-tab-btn--infinity",before:"InfinityPointsHeader",id:6,condition:()=>ue.infinityUnlocked(),hidable:!0,subtabs:[{key:"upgrades",name:"Infinity Upgrades",symbol:"",component:"InfinityUpgradesTab",condition:()=>ue.mendingUnlocked()||ue.realityUnlocked()||ue.eternityUnlocked()||ue.infinityUnlocked(),id:0,hidable:!0},{key:"break",name:"Break Infinity",symbol:"∝",component:"BreakInfinityTab",condition:()=>ue.mendingUnlocked()||ue.realityUnlocked()||ue.eternityUnlocked()||ue.infinityUnlocked(),id:1,hidable:!0},{key:"replicanti",name:"Replicanti",symbol:"Ξ",component:"ReplicantiTab",condition:()=>ue.realityUnlocked()||ue.eternityUnlocked()||ue.infinityUnlocked(),id:2,hidable:!0}]},{key:"eternity",name:"Eternity",hideAt:1.8,UIClass:"o-tab-btn--eternity",condition:()=>ue.mendingUnlocked()||ue.realityUnlocked()||ue.eternityUnlocked(),before:"EternityPointsHeader",id:7,hidable:!0,subtabs:[{key:"studies",name:"Time Studies",symbol:"",component:"TimeStudiesTab",id:0,hidable:!0},{key:"upgrades",name:"Eternity Upgrades",symbol:"",component:"EternityUpgradesTab",id:1,hidable:!0},{key:"milestones",name:"Eternity Milestones",symbol:"",component:"EternityMilestonesTab",id:2,hidable:!0},{key:"dilation",name:"Time Dilation",symbol:"Ψ",component:"TimeDilationTab",condition:()=>ue.mendingUnlocked()||ue.dilationUnlocked()||ue.realityUnlocked(),id:3,hidable:!0}]},{key:"reality",name:"Reality",hideAt:2.3,UIClass:"o-tab-btn--reality",condition:()=>ue.mendingUnlocked()||ue.realityUnlocked()||TimeStudy.reality.isBought,id:8,hidable:!0,subtabs:[{key:"glyphs",name:"Glyphs",symbol:"",component:"GlyphsTab",id:0,hidable:!0},{key:"upgrades",name:"Reality Upgrades",symbol:"",component:"RealityUpgradesTab",id:1,hidable:!0},{key:"imag_upgrades",name:"Imaginary Upgrades",symbol:"",component:"ImaginaryUpgradesTab",condition:()=>MachineHandler.isIMUnlocked||ue.mendingUnlocked(),id:2,hidable:!0},{key:"perks",name:"Perks",symbol:"",component:"PerksTab",id:3,hidable:!0},{key:"hole",name:"Black Hole",symbol:"",component:"BlackHoleTab",condition:()=>ue.mendingUnlocked()||ue.realityUnlocked(),id:4,hidable:!0},{key:"alchemy",name:"Glyph Alchemy",symbol:"",component:"AlchemyTab",condition:()=>Ra.unlocks.unlockGlyphAlchemy.canBeApplied||ue.mendingUnlocked(),id:5,hidable:!0}]},{key:"celestials",name:"Celestials",hideAt:2.4,UIClass:"o-tab-btn--celestial",condition:()=>Teresa.isUnlocked||ue.mendingUnlocked(),id:9,hidable:!0,subtabs:[{key:"celestial-navigation",name:"Celestial Navigation",symbol:"",component:"CelestialNavigationTab",id:0,hidable:!0},{key:"teresa",name:"Teresa",symbol:"Ϟ",component:"TeresaTab",id:1,hidable:!0,condition:()=>Teresa.isUnlocked},{key:"effarig",name:"Effarig",symbol:"Ϙ",component:"EffarigTab",condition:()=>TeresaUnlocks.effarig.isUnlocked,id:2,hidable:!0},{key:"enslaved",name:"The Nameless Ones",symbol:"
",component:"EnslavedTab",condition:()=>EffarigUnlock.eternity.isUnlocked,id:3,hidable:!0},{key:"v",name:"V",symbol:"⌬",component:"VTab",condition:()=>Achievement(151).isUnlocked&&EffarigUnlock.eternity.isUnlocked,id:4,hidable:!0},{key:"ra",name:"Ra",symbol:"",component:"RaTab",condition:()=>VUnlocks.raUnlock.isUnlocked&&EffarigUnlock.eternity.isUnlocked||Ra.unlocks.raNoReset.isUnlocked,id:5,hidable:!0},{key:"laitela",name:"Lai'tela",symbol:"ᛝ",component:"LaitelaTab",condition:()=>Laitela.isUnlocked,id:6,hidable:!0},{key:"pelle",name:"Pelle",symbol:"♅",component:"PelleTab",condition:()=>Pelle.isUnlocked,id:7,hidable:!0}]},{key:"mending",name:"Mending",hideAt:2.7,UIClass:"o-tab-btn--mending",condition:()=>ue.mendingUnlocked(),id:10,hidable:!0,subtabs:[{key:"mendupgrades",name:"Mending Upgrades",symbol:"",component:"MendingUpgrades",id:0,hidable:!0},{key:"mendmilestones",name:"Mending Milestones",symbol:"",component:"MendingMilestones",id:1,hidable:!0},{key:"warpreality",name:"Warp Reality",symbol:"Ϟ",component:"WarpReality",id:2,hidable:!0},{key:"corruption",name:"Hostilities",symbol:'',component:"CorruptionTab",id:3,hidable:!0,condition:()=>Ra.unlocks.Hostility.isUnlocked},{key:"kohlerrealm",name:"Kohler's Realm",symbol:"",component:"KohlersRealm",id:4,hidable:!0,condition:()=>Ra.unlocks.kohlersRealmUnlock.isUnlocked}]},{key:"shop",name:"Shop",ModernUIClass:"shop",hideAt:1.5,condition:()=>!0,id:11,hidable:!0,subtabs:[{key:"shop",name:"Shop",symbol:"$",component:"ShopTab",id:0,hidable:!0}]}],ka=e=>{e.cost=()=>getHybridCostScaling(player.mending.rebuyables[e.id],1e30,e.initialCost,e.costMult,e.costMult/10,b.E309,1e3,e.initialCost*e.costMult);const{effect:t,effectType:i}=e;return e.effect=()=>"+"===e.effectType||"-"===e.effectType?t*player.mending.rebuyables[e.id]:Math.pow(t,player.mending.rebuyables[e.id]),e.description=()=>11==e.id?e.textTemplate.replace("{value}",formatFloat(t,3)):e.textTemplate.replace("{value}",formatInt(t)),e.formatEffect=t=>6===e.id||16===e.id?i+`${formatInt(t)}`:11===e.id?i+`${formatFloat(t,3)}`:i+`${format(t,2,0)}`,e.formatCost=e=>format(e,2,0),e},Ca=[ka({id:1,name:"Mending Upgrade 1",initialCost:10,costMult:9,textTemplate:"Multiply Multiversal Remain gain by {value}.",effect:3,effectType:"×"}),{id:2,name:"Reckoning of the Evulgate",cost:1,description:()=>`Start every Mend with ${format(1e4)} Realities, every Mend and Reality with ${format(1e6)} Eternities, and all prestiges with ${format(1e12)} Infinities. This upgrade applies immediately when bought.`,effect:()=>[1e6,1e12]},{id:3,name:"Reckoning of the Olympia",cost:1,description:()=>"Start every Mend and Reality with all Eternity Challenges completed 5 times (applies immedately)."},{id:4,name:"Reckoning of the Sabotage",cost:15,description:"Start every Mend with Lai'tela's Reality fully destabilized."},{id:5,name:"Reckoning of the Exhaurire",cost:5,description:()=>"Always have passive IP, EP, and RM gain (IP and EP gen do not work in Pelle). Remnants are always equal to your best-ever Remnants this Mend."},ka({id:6,name:"Mending Upgrade 6",initialCost:2e3,costMult:50,textTemplate:"Delay post-Lv. 45,000 Glyph scaling by {value}",effect:500,effectType:"+"}),{id:7,name:"Libertas Temporis",cost:4,description:()=>"Start every Mend with Nameless completed and all their upgrades and unlocks. Real time is stored at 500% efficiency, and unlock an Autobuyer for Tesseracts."},{id:8,name:"Propius ad Scalas",cost:10,description:()=>"Reduce post-Infinity Antimatter Dimension cost scaling to x1.5 and post-Infinity Tickspeed cost scaling to x1.2."},{id:9,name:"Sacrificium Misericordae",cost:3,description:()=>`Start every Mend with Teresa completed and set best AM in their Reality to ${format(b.E1E10)}.`},{id:10,name:"Deus Propitius",cost:5,description:()=>"Weaken the first 3 Pelle Strike penalties."},ka({id:11,name:"Mending Upgrade 11",initialCost:1e6,costMult:1e4,textTemplate:"Weaken the post 50,000 TG scaling by {value}",effect:.005,effectType:"-"}),{id:12,name:"Prior Lingua Adeptus",cost:6,description:()=>"Glyphs always have a minimum 100% rarity and 4 effects (7 if Effarig). Start every Mend with Effarig Glyphs unlocked."},{id:13,name:"Regnum Pro Duobus Regnis",cost:15,description:()=>"Simulate 2 extra Realities for every Reality."},{id:14,name:"Satus Superbia",cost:8,description:()=>"Gain 3x Space Theorems per V-Achievement and start every Mend with all V-Achievements at tier 3 (includes Hard)"},{id:15,name:"Hyperscientia",cost:5,description:()=>"Raise Memory Gain by ^1.5."},ka({id:16,name:"Per Aspera Ad Astra",initialCost:1e9,costMult:1e6,textTemplate:"Delay Obscure Galaxy Scaling by {value}.",effect:5e3,effectType:"+"}),{id:17,name:"Connexa Cosmicis",cost:65,description:()=>"Disable Remote Galaxy Scaling. Replicanti Galaxy scaling is moved to 1,500 and 10,000."},{id:18,name:"Confortatus Tenebris",cost:25,description:()=>"Continuum gives 50% more purchases."},{id:19,name:"Deus Memorias",cost:1e5,description:()=>"Unlock Ra, Lai'tela, and Pelle Memories, and increase the level cap to 100."},{id:20,name:"Mending Upgrade 20",cost:1e5,description:()=>"Unlock autobuyer for Mends"}],Aa={one:{mends:1,reward:"Start with Infinity broken, all pre-Reality autobuyers maxed (kept in Doomed Reality), and the START perk. Gain multipliers to various resources (hover for details).",activeCondition:()=>`${formatX(1e20,0)} IP, ${formatX(1e3,0)} Replicanti Speed, ${formatX(1e5,0)} EP, ${formatX(1e4,0)} Eternities, ${formatX(100,0)} Dilated Time, ${formatX(3,0)} Realities, ${formatX(5,0)} Perk Points, ${formatX(25,0)} Memory Gain, ${formatX(50,0)} Dark Energy Gain, ${formatX(5,0)} Singularity Gain, ${formatX(1.1,0,1)} Remnant Gain, ${formatX(10,0)} Reality Shard Gain`},two:{mends:2,reward:"The Pelle-exclusive dilation upgrades are available outside of Doomed Reality (and also unlock the autobuyers for them), but they are nerfed outside of it. Dilation Autobuyers buy max. Achievement 154's reward is now 100%."},three:{mends:3,reward:"Start every Mend with all perks, the rebuyable Reality Upgrade and Black Hole Autobuyers, Vacuum Acceleration, and both Black Holes unlocked and permanently active, with 3 power upgrades each."},ten:{mends:4,reward:"Teresa's container is no longer reset on Mend and Teresa, Effarig, Nameless, and V's Memories start at Level 10"},four:{mends:5,reward:"Remove all requirements for Reality/Imaginary Upgrades (except for Lai'tela, Pelle and their Unlocks) and start with 5 of each rebuyable Reality Upgrade."},five:{mends:7,reward:"Gain 3 additional Glyph slots (disabled in Doomed Reality), and have the ability to equip TWO Effarig and Reality Glyphs each."},seven:{mends:8,reward:"Begin each Mend with Teresa's perk shop maxed, and gain an autobuyer which can automatically purchase and remove Music Glyphs."},six:{mends:10,reward:"You can now Mend outside of Doomed Reality."},eleven:{mends:15,reward:"Gain a Multiversal Remain multiplier based on lowest Glyph count during the entire Reality when you reach END antimatter this Mend.",activeCondition:()=>`Your current Multiversal Remain multiplier from this milestone ${MendingMilestone.eleven.isReached?"is":"would be"} ${formatX(mendingMilestoneElevenMultiplier(!0),2,2)}, affected by Cursed Glyphs.`},eight:{mends:20,reward:"Unlock an autobuyer for non-rebuyable Reality and Imaginary Upgrades once you can afford them (includes Lai and Pelle unlocks)"}},_a=e=>{e.cost=()=>getHybridCostScaling(player.mending.warpRebuyables[e.id],1e30,e.initialCost,e.costMult,e.costMult/10,b.E309,1e3,e.initialCost*e.costMult);const{effect:t,effectType:i}=e;return e.effect=()=>"+"===e.effectType||"-"===e.effectType||"×1e"===e.effectType?t*player.mending.warpRebuyables[e.id]:Math.pow(t,player.mending.warpRebuyables[e.id]),e.description=()=>e.textTemplate.replace("{value}",formatInt(t)),e.noEffect||(e.formatEffect=e=>i+format(e,2,0),3==e.id&&(e.formatEffect=e=>i+format(e,3,3)),e.formatCost=e=>format(e,2,0)),e},Sa=[_a({name:"More Infinite Power",id:1,initialCost:1e30,costMult:1e5,textTemplate:"Increase Infinite Power softcap's Thereshold by ×1e2.5e14",effect:25e13,effectType:"×1e"}),_a({name:"Memory Gain",id:2,initialCost:1e20,costMult:100,textTemplate:"Improve Ra's memory gain by ×3",effect:3,effectType:"×"}),_a({name:"Game speed softcap",id:3,initialCost:1e20,costMult:100,textTemplate:"Increase Game speed's softcap by 0.002",effect:.002,effectType:"+"}),{name:"Visible Galaxies",id:4,cost:1e55,requirement:()=>Ra.unlocks.unlockSHardV.isUnlocked?`Reach ${formatInt(913579)} total Galaxies in V's Superhard Reality.`:"Reach V Level 40 to see unlock condition",hasFailed:()=>!V.isSuperRunning,checkRequirement:()=>V.isSuperRunning&&Replicanti.galaxies.total+player.galaxies+player.dilation.totalTachyonGalaxies>=913579,checkEvent:GAME_EVENT.GAME_TICK_AFTER,canLock:!1,lockEvent:"gain a Replicanti Galaxy",description:()=>`Decrease Obscure Galaxy scaling polynomial level by ${formatInt(1)}`},{name:"The Dedicated Way",id:5,cost:1e24,requirement:()=>`Reach ${format(new Decimal("1e2450000000000000000"))} Antimatter in Ra's Reality`,hasFailed:()=>!Ra.isRunning,checkRequirement:()=>Ra.isRunning&&Mi.antimatter.exponent>=245e16,checkEvent:GAME_EVENT.GAME_TICK_AFTER,canLock:!1,lockEvent:"gain a Replicanti Galaxy",description:()=>"Ra's basic Memory chunk gain multiplier based on current Antimatter",effect:()=>Math.max(Math.log10(Mi.antimatter.exponent),1),formatEffect:e=>formatX(e,2,2)},{name:"Hostility+",id:6,cost:1e60,requirement:()=>Ra.unlocks.Hostility.isUnlocked?"Mend with a total hostility level of at least 60":"Reach Pelle Level 75 to see unlock condition",hasFailed:()=>!player.mending.corruptionChallenge.corruptedMend||!player.mending.corruption.reduce(((e,t)=>e+t),0)>=60,checkRequirement:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption.reduce(((e,t)=>e+t),0)>=60,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"gain a Replicanti Galaxy",description:()=>Ra.unlocks.Hostility.isUnlocked?`Hostility caps +${formatInt(1)}`:"Reach Pelle Level 75 to see effect"},{name:"Automatic of Speed",id:7,cost:1e75,requirement:()=>`Reach ${format(new Decimal("1e2300"))} Game Speed`,hasFailed:()=>!1,checkRequirement:()=>getGameSpeedupFactor().gte("1e2300"),checkEvent:GAME_EVENT.GAME_TICK_AFTER,canLock:!1,lockEvent:"gain a Replicanti Galaxy",description:"Unlock Black Hole 3 autobuyer",effect:()=>1},{name:"Valuable Cost",id:8,cost:1e70,requirement:()=>Ra.unlocks.Hostility.isUnlocked?`Reach ${format(3e15)} Time Theorems in Teresa's Reality of Level 9+ Study of Forever Hostile Mend`:"Reach Pelle Level 75 to see unlock condition",hasFailed:()=>!player.mending.corruptionChallenge.corruptedMend||player.mending.corruption[9]<9,checkRequirement:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]&&Teresa.isRunning&&Mi.timeTheorems.value.gte(3e15),checkEvent:GAME_EVENT.GAME_TICK_AFTER,canLock:!1,lockEvent:"gain a Replicanti Galaxy",description:"Reduce Myriad Study cost by 50 Space Theorems",effect:()=>1},{name:"Living Multiverse",id:9,cost:1e75,requirement:()=>`Reach ${format(1845e6,3,3)} total Galaxies in a Doomed reality without Galaxy Generator`,hasFailed:()=>!Pelle.isDoomed||Pelle.hasGalaxyGenerator,checkRequirement:()=>Pelle.isDoomed&&!Pelle.hasGalaxyGenerator&&Replicanti.galaxies.total+player.galaxies+player.dilation.totalTachyonGalaxies>=1845e6,checkEvent:GAME_EVENT.GAME_TICK_AFTER,canLock:!1,lockEvent:"gain a Replicanti Galaxy",description:"Galactic Shards improve Galaxy better",effect:()=>1},{name:"Boost Readjustment",id:10,cost:1e60,requirement:()=>`Reach ${format(2e37)} Memory Crystals.`,hasFailed:()=>!1,checkRequirement:()=>Mi.raPoints.value.gte(2e37),checkEvent:GAME_EVENT.GAME_TICK_AFTER,canLock:!1,lockEvent:"gain a Replicanti Galaxy",description:()=>`Dimension boost scaling occurs ${formatX(20)} later`},{name:"Noticeable Galaxies",id:11,cost:1e65,requirement:()=>Ra.unlocks.kohlersRealmUnlock.isUnlocked?"Reach Kohler unlock progress milestone 3":"Reach Pelle Level 100 to see unlock condition",hasFailed:()=>!Ra.unlocks.kohlersRealmUnlock.isUnlocked,checkRequirement:()=>Kohler.unlockProgress>=35,checkEvent:GAME_EVENT.GAME_TICK_AFTER,canLock:!1,lockEvent:"gain a Replicanti Galaxy",description:()=>`Decrease Obscure Galaxy scaling polynomial level by ${formatInt(1)}`},{name:"Hostility++",id:12,cost:1e300,requirement:()=>Ra.unlocks.Hostility.isUnlocked?"Mend with a total hostility level of at least 80":"Reach Pelle Level 75 to see unlock condition",hasFailed:()=>!player.mending.corruptionChallenge.corruptedMend||!player.mending.corruption.reduce(((e,t)=>e+t),0)>=80,checkRequirement:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption.reduce(((e,t)=>e+t),0)>=80,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"gain a Replicanti Galaxy",description:()=>Ra.unlocks.Hostility.isUnlocked?`Hostility caps +${formatInt(1)}`:"Reach Pelle Level 75 to see effect"}],Da=[{name:"Memory Perfection",id:1,cost:2,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:()=>`Ra memory gain is ${formatX(1500,1)} stronger, but only when in the appropriate celestials Reality.`,effect:1500},{name:"Spacetime Distruption",id:2,cost:2,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Game speed is multiplied based on highest score (before instability, Applies after hostilities, but weaker in Hostile multiverse)",effect:()=>player.mending.corruptionChallenge.corruptedMend?Decimal.pow10(Math.pow(player.mending.corruptionChallenge.recordScore,.25)):Decimal.pow10(Math.pow(player.mending.corruptionChallenge.recordScore,1/1.48)),formatEffect:e=>formatX(e,2)},{name:"Rewarding Achievements",id:3,cost:2,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Gain a power effect to achievement power effects, after softcaps, based on unspent Hostile Fragments. ",effect:()=>1+Math.log(1+player.mending.corruptedFragments/3)/10,formatEffect:e=>"^"+format(e,2,2)},{name:"Singularity Cap",id:4,cost:2,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Give extra 10 increase Singularity cap.",effect:()=>10},{name:"Perk Limit",id:5,cost:2,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"The first two upgrades of Perk Shop cap are massively increased.",effect:()=>1},{name:"Doomed Options",id:6,cost:3,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Give one extra Glyph slot in Doomed Reality",effect:()=>1},{name:"Help Effarig can do nothing",id:7,cost:3,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Improve Effarig level 15 improvement.",effect:()=>1},{name:"Tesseract Movement",id:8,cost:3,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Gain a multiplier to effective Tesseract count, based on unspent Hostile Fragments.",effect:()=>1+Math.log(1+player.mending.corruptedFragments)/5,formatEffect:e=>formatX(e,2,2)},{name:"Crystal Galaxies",id:9,cost:3,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Memory Crystal delays Obscure Galaxy scaling",effect:()=>Math.round(10*Decimal.log10(player.celestials.ra.raPoints.plus(1))),formatEffect:e=>"+"+formatInt(e)},{name:"Sacrifice Exponent",id:10,cost:3,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Dimension Sacrifice's exponent ^1.5",effect:()=>1.5},{name:"Black Hole",id:11,cost:4,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Black Hole 1 & 2's base multiplier is increased.",effect:()=>2.5,formatEffect:e=>formatX(e,1,1)},{name:"Nerf Every Curse",id:12,cost:4,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Every generated Cursed Glyph's level reduced to 666.",effect:()=>1},{name:"More MvR!!!!!!!",id:13,cost:4,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Multiplier to Multiversal Remains based on your record score.",effect:()=>Math.max(CorruptionData.corruptionChallenge.recordScore,1),formatEffect:e=>formatX(e,2,2)},{name:"Alchemy Cap",id:14,cost:4,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Increase Alchemy hardcap based on your record score.",effect:()=>Math.round(Math.log(CorruptionData.corruptionChallenge.recordScore+1)/Math.log(1.005)),formatEffect:e=>`+${formatInt(e)}`},{name:"Generation",id:15,cost:4,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"8th Antimatter Dimension generat 8th Dark Matter Dimension (once unlocked)",effect:()=>10*Decimal.log10(AntimatterDimensions.all[7].totalAmount.plus(1)),formatEffect:e=>`${format(e,2,2)} per Second`},{name:"Prestige Extension",id:16,cost:5,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:()=>`Prestige Limits power is now doubled, capped at ${formatInt(1)}`},{name:"Dimension Superscaling",id:17,cost:5,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:()=>"If Dimensional Limitations corruption is 5 or higher, Antimatter dimensions gain a power effect based on highest Glyph Level this mend.",effect:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[1]>=5&&0!=player.records.bestReality.glyphLevelSet.length?1+Math.log(player.records.bestReality.glyphLevel)/10:1,formatEffect:e=>formatPow(e,2,2)},{name:"Time Expansion",id:18,cost:5,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:()=>`Time Compression power +${format(.01,2,2)} (capped at +${formatInt(1)}), Time compression devisor ${formatPow(.1,1,1)}`},{name:"Galaxy Strengthening",id:19,cost:5,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:()=>`Galactic Weakness - Scaling is ^0.5, and power is ${formatX(1.4,1,1)} (capped at ${formatX(1)})`,effect:()=>1},{name:"Rewarding Glyphs",id:20,cost:5,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"If Complex Glyphs is level 4 or higher, gain a power effect to score, based on glyph levels and Complex Glyphs level.",effect:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[4]>=4?1+Math.log(Math.log(player.mending.corruption[4]*Math.max(1,player.records.bestReality.glyphLevel)))/2:1,formatEffect:e=>formatPow(e,2,2)},{name:"Tick Extension",id:21,cost:5,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:()=>"Tick Extension Tickspeed power ^0.5, Time shard divisor ^0.75.",effect:()=>1},{name:"Automic Dilution",id:22,cost:5,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:()=>`Automic Dilution power is now ×1.5, capped at ${formatInt(1)}`,effect:()=>1},{name:"Theory of Dilation",id:23,cost:5,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"Theory of Dilation power +0.2, and DT gain ×1e5 if level 1 or more.",effect:()=>1},{name:"Replicative Singularities",id:24,cost:5,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"If Replicative Singularities corruption is 5 or higher, Infinity dimensions gain a power effect based on current Replicanti. Capped at ^5.",effect:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[8]>=5?Math.min(1+Decimal.log10(player.replicanti.amount)/1e3,5):1,formatEffect:e=>formatPow(e,2,2)},{name:"Study of Forever",id:25,cost:5,requirement:"Please send your save to the devs with an image of this - You should never be able to see this",hasFailed:()=>!1,checkRequirement:()=>!1,checkEvent:GAME_EVENT.MENDING_RESET_BEFORE,canLock:!1,lockEvent:"Illegal lock called - Please report this with your save and what you did.",description:"If Study of Forever corruption is 4 or higher, Time dimensions gain a power effect based on current Time Theorems. Capped at ^5.",effect:()=>player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[9]>=4?Math.min(1+Decimal.log10(Currency.timeTheorems.value)/1e3,5):1,formatEffect:e=>formatPow(e,2,2)}],Ma={progressUnlocks:{kohlerUnlocked:{id:0,progress:5,condition:()=>Ra.unlocks.kohlersRealmUnlock.isUnlocked,description:"You may have made it here Destroyer, but I have a few more tests..."},hostileScore:{id:1,progress:20,condition:()=>!!(Ra.unlocks.kohlersRealmUnlock.isUnlocked&&CorruptionData.corruptionChallenge.recordScore>=5e7),description:()=>`Reach ${format(5e7)} Hostile score. Reward: Keep Charged Upgrades when not entering Hostile mend.`},hostileFragments:{id:2,progress:35,condition:()=>!!(Ra.unlocks.kohlersRealmUnlock.isUnlocked&&CorruptionData.recordCorruptedFragments>29),description:()=>"Reach 30 Hostile Fragments. Reward: Antimatter ^(1+best HF/100)."},antimatterGalaxy:{id:4,progress:65,condition:()=>!!(Ra.unlocks.kohlersRealmUnlock.isUnlocked&&Math.log10(Decimal.log10(Currency.antimatter.value))>=25),description:()=>`Reach ${format(new Decimal("1e10000000000000000000000000"))} Antimatter. Reward: Tickspeed affect 1st Multiversal Dimension with ultra reduced rate.`,effect:()=>Math.max(Math.pow(Decimal.log10(Tickspeed.perSecond.plus(1)),.3),1)},placeholder:{id:6,progress:100,condition:!1,description:"Now for the ultimate test...waiting 5 hours™."}}},Ia={upgrades:Ca,milestones:Aa,corruptionUpgrades:Da,warpUpgrades:Sa,kohlerUnlockProgress:Ma},xa={achievements:Ve,awayProgressTypes:Ye,catchupResources:We,celestials:Oi,challenges:Vi,changelog:Yi,confirmationTypes:Wi,credits:ji,discordRichPresence:Zi,eternity:la,h2p:ca,infinity:ya,multiplierTabTree:Ue,multiplierTabValues:Me,news:ga,progressStages:va,reality:oe,shopPurchases:ba,speedrunMilestones:Ea,tabNotifications:Ta,tabs:wa,mending:Ia};window.GameDatabase=xa,window.mapGameData=function(e,t){const i=[];for(const a of e)i[a.id]=t(a);return i},window.mapGameDataToObject=function(e,t){const i=Object.entries(e),a={};for(let n=0;n1?i("div",{staticClass:"c-automator-close-text-input fa-solid fa-circle-xmark",on:{click:e.revertToDropdown}}):e._e()]):i("select",{directives:[{name:"model",rawName:"v-model",value:e.dropdownSelection,expression:"dropdownSelection"}],class:e.dropdownClassObject(),on:{change:[function(t){var i=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.dropdownSelection=t.target.multiple?i:i[0]},function(t){return e.changeBlock()}]}},e._l([""].concat(e.dropdownOptions),(function(t){return i("option",{key:t,domProps:{value:t}},[e._v(" "+e._s(t)+" ")])})),0),e.recursive&&e.nextNodeCount>0?i("AutomatorBlockSingleInput",{key:e.currentNodeOnPath,attrs:{constant:e.unknownNext?"...":"",block:e.block,"block-target":e.nextInputKey,patterns:e.patterns,"initial-selection":e.nextInputValue,"update-function":e.updateFunction,recursive:!0,"current-path":e.currentPath+e.currentNodeOnPath}}):e._e()],1)},Fa=[],$a=(i(4603),i(8450),i(6535),i(9244),i(417));const Ha=e=>(0,$a.createToken)({name:e,pattern:$a.Lexer.NA,longer_alt:Qa}),qa={},Va=(e,t,i,a={})=>{const n=[e];a.extraCategories&&n.push(...a.extraCategories);const s=(0,$a.createToken)({name:t,pattern:i,categories:n,longer_alt:Qa}),r=Array.isArray(e)?e[0].name:e.name;void 0===qa[r]&&(qa[r]=[]),qa[r].push(s);const o=i.toString().match(/^\/([0-9A-Za-z\u017F\u212A]*)\/[A-Za-z\u017F\u212A]*$/i);return o&&o[1]&&(s.$autocomplete=o[1]),Object.assign(s,a),s},Ya=(0,$a.createToken)({name:"HSpace",pattern:/[ \t]+/,group:$a.Lexer.SKIPPED}),Wa=(0,$a.createToken)({name:"EOL",line_breaks:!0,pattern:/[ \t\r]*\n\s*/,label:"End of line"}),ja=(0,$a.createToken)({name:"StringLiteral",pattern:/".*"/}),Xa=(0,$a.createToken)({name:"StringLiteralSingleQuote",pattern:/'.*'/}),za=(0,$a.createToken)({name:"Comment",pattern:/(#|\/\/)[^\n]*/}),Ka=(0,$a.createToken)({name:"NumberLiteral",pattern:/-?(0|[1-9]\d*)(\.\d+)?([eE][+-]?\d+)?/}),Za=(0,$a.createToken)({name:"BlackHoleStr",pattern:/[Bb][Hh][12]/}),Qa=(0,$a.createToken)({name:"Identifier",pattern:/[a-zA-Z_][a-zA-Z_0-9]*/}),Ja=(0,$a.createToken)({name:"ComparisonOperator",pattern:$a.Lexer.NA}),en=Ha("AutomatorCurrency"),tn=Ha("PrestigeEvent"),an=Ha("StudyPath"),nn=Ha("TimeUnit");Va(Ja,"OpGTE",/>=/,{$autocomplete:">=",$compare:(e,t)=>Decimal.gte(e,t)}),Va(Ja,"OpLTE",/<=/,{$autocomplete:"<=",$compare:(e,t)=>Decimal.lte(e,t)}),Va(Ja,"OpGT",/>/,{$autocomplete:">",$compare:(e,t)=>Decimal.gt(e,t)}),Va(Ja,"OpLT",/Decimal.lt(e,t)});const sn=Va(Ja,"OpEQ",/==/,{$compare:(e,t)=>Decimal.eq(e,t)}),rn=(0,$a.createToken)({name:"EqualSign",pattern:/=/,categories:Ja,label:"=",longer_alt:sn});rn.$compare=(e,t)=>Decimal.eq(e,t),Va(en,"EP",/ep/i,{$getter:()=>Currency.eternityPoints.value}),Va(en,"IP",/ip/i,{$getter:()=>Currency.infinityPoints.value}),Va(en,"AM",/am/i,{$getter:()=>Currency.antimatter.value}),Va(en,"DT",/dt/i,{$getter:()=>Currency.dilatedTime.value}),Va(en,"TP",/tp/i,{$getter:()=>Currency.tachyonParticles.value}),Va(en,"RG",/rg/i,{$getter:()=>new Decimal(Replicanti.galaxies.total)}),Va(en,"RM",/rm/i,{$getter:()=>Currency.realityMachines.value}),Va(en,"infinities",/infinities/i,{$getter:()=>Currency.infinities.value}),Va(en,"bankedInfinities",/banked[ \t]+infinities/i,{$autocomplete:"banked infinities",$getter:()=>Currency.infinitiesBanked.value}),Va(en,"eternities",/eternities/i,{$getter:()=>Currency.eternities.value}),Va(en,"realities",/realities/i,{$getter:()=>Currency.realities.value}),Va(en,"PendingIP",/pending[ \t]+ip/i,{$autocomplete:"pending IP",$getter:()=>Player.canCrunch?gainedInfinityPoints():b.D0}),Va(en,"PendingEP",/pending[ \t]+ep/i,{$autocomplete:"pending EP",$getter:()=>Player.canEternity?gainedEternityPoints():b.D0}),Va(en,"PendingTP",/pending[ \t]+tp/i,{$autocomplete:"pending TP",$getter:()=>player.dilation.active?getTachyonGain():b.D0}),Va(en,"PendingRM",/pending[ \t]+rm/i,{$autocomplete:"pending RM",$getter:()=>isRealityAvailable()?MachineHandler.gainedRealityMachines:b.D0}),Va(en,"PendingGlyphLevel",/pending[ \t]+glyph[ \t]+level/i,{$autocomplete:"pending Glyph level",$getter:()=>new Decimal(isRealityAvailable()?gainedGlyphLevel().actualLevel:0)}),Va(en,"Rep",/rep(licanti)?/i,{$autocomplete:"rep",$getter:()=>Replicanti.amount}),Va(en,"TT",/(tt|time theorems?)/i,{$autocomplete:"TT",$getter:()=>Currency.timeTheorems.value}),Va(en,"TotalTT",/total[ \t]+tt/i,{$autocomplete:"total TT",$getter:()=>player.timestudy.theorem.plus(TimeTheorems.calculateTimeStudiesCost())}),Va(en,"TotalCompletions",/total[ \t]+completions/i,{$autocomplete:"total completions",$getter:()=>EternityChallenges.completions}),Va(en,"PendingCompletions",/pending[ \t]+completions/i,{$autocomplete:"pending completions",$getter:()=>EternityChallenge.isRunning?EternityChallenge.current.gainedCompletionStatus.totalCompletions:Decimal.NUMBER_MAX_VALUE}),Va(en,"FilterScore",/filter[ \t]+score/i,{$autocomplete:"filter score",$getter:()=>{if(!EffarigUnlock.glyphFilter.isUnlocked)return-Number.MAX_VALUE;const e=GlyphSelection.glyphList(GlyphSelection.choiceCount,gainedGlyphLevel(),{isChoosingGlyph:!1}),t=AutoGlyphProcessor.pick(e);return AutoGlyphProcessor.filterValue(t)},$unlocked:()=>EffarigUnlock.glyphFilter.isUnlocked}),Va(en,"ST",/space[ \t]+theorems/i,{$autocomplete:"space theorems",$getter:()=>V.availableST,$unlocked:()=>V.spaceTheorems>0}),Va(en,"TotalST",/total[ \t]+space[ \t]+theorems/i,{$autocomplete:"total space theorems",$getter:()=>V.spaceTheorems,$unlocked:()=>V.spaceTheorems>0});for(let V=1;V<=12;++V){const e=V;Va(en,`EC${V}`,new RegExp(`ec${V} completions`,"i"),{$autocomplete:`ec${V} completions`,$getter:()=>EternityChallenge(e).completions})}Va(tn,"Infinity",/infinity/i,{extraCategories:[an],$autobuyer:()=>Autobuyer.bigCrunch,$autobuyerDurationMode:AUTO_CRUNCH_MODE.TIME,$autobuyerXHighestMode:AUTO_CRUNCH_MODE.X_HIGHEST,$autobuyerCurrencyMode:AUTO_CRUNCH_MODE.AMOUNT,$prestigeAvailable:()=>Player.canCrunch,$prestige:()=>bigCrunchResetRequest(!0),$prestigeLevel:1,$prestigeCurrency:"IP",$studyPath:TIME_STUDY_PATH.INFINITY_DIM}),Va(tn,"Eternity",/eternity/i,{$autobuyer:()=>Autobuyer.eternity,$autobuyerDurationMode:AUTO_ETERNITY_MODE.TIME,$autobuyerXHighestMode:AUTO_ETERNITY_MODE.X_HIGHEST,$autobuyerCurrencyMode:AUTO_ETERNITY_MODE.AMOUNT,$prestigeAvailable:()=>Player.canEternity,$prestigeLevel:2,$prestigeCurrency:"EP",$prestige:()=>eternity(!1,!0),$respec:()=>{player.respec=!0}}),Va(tn,"Reality",/reality/i,{$autobuyer:()=>Autobuyer.reality,$autobuyerCurrencyMode:AUTO_REALITY_MODE.RM,$prestigeAvailable:()=>isRealityAvailable(),$prestigeLevel:3,$prestigeCurrency:"RM",$prestige:()=>autoReality(),$respec:()=>{player.reality.respec=!0}}),Va(an,"Idle",/idle/i,{$studyPath:TIME_STUDY_PATH.IDLE}),Va(an,"Passive",/passive/i,{$studyPath:TIME_STUDY_PATH.PASSIVE}),Va(an,"Active",/active/i,{$studyPath:TIME_STUDY_PATH.ACTIVE}),Va(an,"Antimatter",/antimatter/i,{$studyPath:TIME_STUDY_PATH.ANTIMATTER_DIM}),Va(an,"Time",/time/i,{$studyPath:TIME_STUDY_PATH.TIME_DIM}),Va(an,"Light",/light/i,{$studyPath:TIME_STUDY_PATH.LIGHT}),Va(an,"Dark",/dark/i,{$studyPath:TIME_STUDY_PATH.DARK}),Va(nn,"Milliseconds",/ms/i,{$autocomplete:"ms",$scale:1}),Va(nn,"Seconds",/s(ec(onds?)?)?/i,{$autocomplete:"sec",$scale:1e3}),Va(nn,"Minutes",/m(in(utes?)?)?/i,{$autocomplete:"min",$scale:6e4}),Va(nn,"Hours",/h(ours?)?/i,{$autocomplete:"hours",$scale:36e5});const on=(0,$a.createToken)({name:"Keyword",pattern:$a.Lexer.NA,longer_alt:Qa}),ln=[],cn=(e,t,i={})=>{const a=[on];i.extraCategories&&a.push(...i.extraCategories);const n=(0,$a.createToken)({name:e,pattern:t,categories:a,longer_alt:Qa});return n.$autocomplete=e.toLocaleLowerCase(),ln.push(n),Object.assign(n,i),n};cn("Auto",/auto/i),cn("Buy",/buy/i),cn("Blob",/blob\s\s/i,{$unlocked:()=>!1}),cn("If",/if/i),cn("Load",/load/i),cn("Notify",/notify/i),cn("Nowait",/nowait/i),cn("Off",/off/i),cn("On",/on/i),cn("Pause",/pause/i),cn("Name",/name([ \t]+(\/(?!\/)|[^\n#/])*)?/i),cn("Id",/id\b([ \t]+\d)?/i),cn("Purchase",/purchase/i),cn("Respec",/respec/i),cn("Restart",/restart/i),cn("Start",/start/i),cn("Stop",/stop/i),cn("Studies",/studies/i),cn("Unlock",/unlock/i),cn("Until",/until/i),cn("Use",/use/i),cn("Wait",/wait/i),cn("While",/while/i),cn("BlackHole",/black[ \t]+hole/i,{$autocomplete:"black hole",$unlocked:()=>BlackHole(1).isUnlocked}),cn("StoreGameTime",/stored?[ \t]+game[ \t]+time/i,{$autocomplete:"store game time",$unlocked:()=>Enslaved.isUnlocked}),cn("Dilation",/dilation/i),cn("EC",/ec/i),cn("XHighest",/x[ \t]+highest/i,{$autocomplete:"x highest"});const un=(0,$a.createToken)({name:"ECLiteral",pattern:/ec[1-9][0-9]*/i,longer_alt:Qa}),dn=(0,$a.createToken)({name:"LCurly",pattern:/[ \t]*{/}),hn=(0,$a.createToken)({name:"RCurly",pattern:/[ \t]*}/}),mn=(0,$a.createToken)({name:"Comma",pattern:/,/}),pn=(0,$a.createToken)({name:"Pipe",pattern:/\|/,label:"|"}),yn=(0,$a.createToken)({name:"Dash",pattern:/-/,label:"-"}),fn=(0,$a.createToken)({name:"Exclamation",pattern:/!/,label:"!"}),gn=[Ya,ja,Xa,za,Wa,Ja,...qa.ComparisonOperator,dn,hn,mn,rn,pn,yn,fn,Za,Ka,en,...qa.AutomatorCurrency,un,on,...ln,tn,...qa.PrestigeEvent,an,...qa.StudyPath,nn,...qa.TimeUnit,Qa];dn.LABEL="'{'",hn.LABEL="'}'",Ka.LABEL="Number",mn.LABEL="❟";const vn=new $a.Lexer(gn,{positionTracking:"full",ensureOptimizations:!0}),bn=[];for(const V of vn.lexerDefinition)bn[V.tokenTypeIdx]=V;const En=gn.mapToObject((e=>e.name),(e=>e)),Tn=qa.AutomatorCurrency.map((e=>e.$autocomplete.toUpperCase())),wn=function(e){try{if(Tn.includes(e.toUpperCase()))return e.toUpperCase()}catch(t){return e}for(const i of qa.AutomatorCurrency)if(e.match(i.PATTERN)&&e.match(i.PATTERN)[0].length===e.length)return i.$autocomplete.toUpperCase();return e},kn=["Identifier","LCurly","RCurly"],Cn=vn.lexerDefinition.filter((e=>!kn.includes(e.name))).map((e=>e.PATTERN.source)).flatMap((e=>e.includes("(")||e.includes(")")?e:e.split("[ \\t]+"))),An=/name[\t ]+((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+$)/i,_n=/id[\t ]+([0-9])/i;function Sn(e){if(!AutomatorBackend.isOn)return;const t=AutomatorBackend.stack.top.commandState;t&&void 0!==t.prestigeLevel&&(t.prestigeLevel=Math.max(t.prestigeLevel,e))}function Dn(e,t,i,a){return{run:()=>{const n=a?"UNTIL":"WHILE";return e()?(AutomatorBackend.push(t),AutomatorData.logCommandEvent(`Checked ${Rn(i)} (${!a}),\n moving to line ${AutomatorBackend.translateLineNumber(i.LCurly[0].startLine+1)-1}\n (start of ${n} loop)`,i.startLine),AUTOMATOR_COMMAND_STATUS.SAME_INSTRUCTION):(AutomatorData.logCommandEvent(`Checked ${Rn(i)} (${a}),\n exiting loop at line ${AutomatorBackend.translateLineNumber(i.RCurly[0].startLine+1)-1}\n (end of ${n} loop)`,i.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION)},blockCommands:t}}function Rn(e){const t=e.comparison[0].children,i=t.compareValue.map((e=>{if(e.children.AutomatorCurrency)return()=>e.children.AutomatorCurrency[0].image;const t=e.children.$value;return"string"===typeof t?()=>t:()=>format(t,2,2)})),a=t.ComparisonOperator[0].image;return`${i[0]()} ${a} ${i[1]()}`}function Mn(e){let t,i;switch(e){case"INFINITY":return`${format(player.records.recentInfinities[0][1],2)} IP`;case"ETERNITY":return t=AutomatorData.lastECCompletionCount,i=`${format(player.records.recentEternities[0][1],2)} EP`,0===t?`${i}`:`${i}, ${t} completions`;case"REALITY":return`${format(player.records.recentRealities[0][1],2)} RM`;default:throw Error(`Unrecognized prestige ${e} in Automator event log`)}}EventHub.logic.on(GAME_EVENT.BIG_CRUNCH_AFTER,(()=>Sn(En[1/0].$prestigeLevel))),EventHub.logic.on(GAME_EVENT.ETERNITY_RESET_AFTER,(()=>Sn(En.Eternity.$prestigeLevel))),EventHub.logic.on(GAME_EVENT.REALITY_RESET_AFTER,(()=>Sn(En.Reality.$prestigeLevel)));const In=[{id:"auto",rule:e=>()=>{e.CONSUME(En.Auto),e.CONSUME(En.PrestigeEvent),e.OR([{ALT:()=>e.CONSUME(En.On)},{ALT:()=>e.CONSUME(En.Off)},{ALT:()=>e.OR1([{ALT:()=>e.SUBRULE(e.duration)},{ALT:()=>e.SUBRULE(e.xHighest)},{ALT:()=>e.SUBRULE(e.currencyAmount)}])}])},validate:(e,t)=>{if(e.startLine=e.Auto[0].startLine,e.PrestigeEvent&&e.currencyAmount){const i=e.PrestigeEvent[0].tokenType.$prestigeCurrency,a=e.currencyAmount[0].children.AutomatorCurrency[0].tokenType.name;if(i!==a)return t.addError(e.currencyAmount,`AutomatorCurrency doesn't match prestige (${i} vs ${a})`,`Use ${i} for the specified prestige resource`),!1}if(!e.PrestigeEvent)return!0;const i=e.duration||e.xHighest;if(e.PrestigeEvent[0].tokenType===En[1/0]){if(!Autobuyer.bigCrunch.isUnlocked)return t.addError(e.PrestigeEvent,"Infinity autobuyer is not unlocked","Complete the Big Crunch Autobuyer challenge to use this command"),!1;if(i&&!EternityMilestone.bigCrunchModes.isReached)return t.addError((e.duration||e.xHighest)[0],"Advanced Infinity autobuyer settings are not unlocked",`Reach ${quantifyInt("Eternity",EternityMilestone.bigCrunchModes.config.eternities)}\n to use this command`),!1}if(e.PrestigeEvent[0].tokenType===En.Eternity){if(!EternityMilestone.autobuyerEternity.isReached)return t.addError(e.PrestigeEvent,"Eternity autobuyer is not unlocked",`Reach ${quantifyInt("Eternity",EternityMilestone.autobuyerEternity.config.eternities)}\n to use this command`),!1;if(i&&!RealityUpgrade(13).isBought)return t.addError((e.duration||e.xHighest)[0],"Advanced Eternity autobuyer settings are not unlocked","Purchase the Reality Upgrade which unlocks advanced Eternity autobuyer settings"),!1}if(e.PrestigeEvent[0].tokenType===En.Reality){if(!RealityUpgrade(25).isBought)return t.addError(e.PrestigeEvent,"Reality autobuyer is not unlocked","Purchase the Reality Upgrade which unlocks the Reality autobuyer"),!1;if(i)return t.addError((e.duration||e.xHighest)[0],"Auto Reality cannot be set to a duration or x highest","Use RM for Auto Reality"),!1}return!0},compile:e=>{const t=e.PrestigeEvent[0].tokenType===En.Reality,i=Boolean(e.On||e.duration||e.xHighest||e.currencyAmount),a=e.duration?e.duration[0].children.$value:void 0,n=e.xHighest?e.xHighest[0].children.$value:void 0,s=e.currencyAmount?e.currencyAmount[0].children.$value:void 0,r=e.PrestigeEvent[0].tokenType.$autobuyerDurationMode,o=e.PrestigeEvent[0].tokenType.$autobuyerXHighestMode,l=e.PrestigeEvent[0].tokenType.$autobuyerCurrencyMode,c=e.PrestigeEvent[0].tokenType.$autobuyer();return()=>{c.isActive=i;let u="";void 0!==a?(c.mode=r,c.time=a/1e3,u=`${c.time>1e3?formatInt(c.time):quantify("second",c.time)}`):void 0!==n?(c.mode=o,c.xHighest=new Decimal(n),u=`${format(n,2,2)} times highest`):void 0!==s&&(c.mode=l,t?(c.rm=new Decimal(s),u=`${format(c.rm,2)} RM`):(c.amount=new Decimal(s),u=`${s} ${"infinity"===e.PrestigeEvent[0].image?"IP":"EP"}`));const d=c.isActive&&""!==u?`(Setting: ${u})`:"";return AutomatorData.logCommandEvent(`Automatic ${e.PrestigeEvent[0].image}\n turned ${c.isActive?"ON":"OFF"} ${d}`,e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION}},blockify:e=>{const t=e.duration?`${e.duration[0].children.NumberLiteral[0].image} ${e.duration[0].children.TimeUnit[0].image}`:void 0,i=e.xHighest?e.xHighest[0].children.$value:void 0,a=e.currencyAmount?`${e.currencyAmount[0].children.NumberLiteral[0].image} ${e.currencyAmount[0].children.AutomatorCurrency[0].image.toUpperCase()}`:void 0,n=Boolean(e.On);let s="";return s=t||(i?`${i} x highest`:a?`${a}`:n?"ON":"OFF"),(0,B.Z)({singleSelectionInput:e.PrestigeEvent[0].tokenType.name.toUpperCase(),singleTextInput:s},automatorBlocksMap.AUTO)}},{id:"blackHole",rule:e=>()=>{e.CONSUME(En.BlackHole),e.OR([{ALT:()=>e.CONSUME(En.On)},{ALT:()=>e.CONSUME(En.Off)}])},validate:(e,t)=>(e.startLine=e.BlackHole[0].startLine,!!BlackHole(1).isUnlocked||(Enslaved.isRunning||Pelle.isDisabled("blackhole")?t.addError(e.BlackHole[0],"Black Hole is disabled in your current Reality","Return to normal Reality conditions to use this command again"):t.addError(e.BlackHole[0],"Black Hole is not unlocked","Unlock the Black Hole in order to pause or unpause it"),!1)),compile:e=>{const t=Boolean(e.On);return()=>(t===BlackHoles.arePaused&&BlackHoles.togglePause(),AutomatorData.logCommandEvent("Black Holes toggled "+(e.On?"ON":"OFF"),e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION)},blockify:e=>(0,B.Z)({singleSelectionInput:e.On?"ON":"OFF"},automatorBlocksMap["BLACK HOLE"])},{id:"blob",rule:e=>()=>{e.CONSUME(En.Blob)},validate:e=>(e.startLine=e.Blob[0].startLine,!0),compile:()=>()=>AUTOMATOR_COMMAND_STATUS.SKIP_INSTRUCTION,blockify:()=>(0,B.Z)({},automatorBlocksMap.BLOB)},{id:"comment",rule:e=>()=>{e.CONSUME(En.Comment)},validate:e=>(e.startLine=e.Comment[0].startLine,!0),compile:()=>()=>AUTOMATOR_COMMAND_STATUS.SKIP_INSTRUCTION,blockify:e=>(0,B.Z)((0,B.Z)({},automatorBlocksMap.COMMENT),{},{singleTextInput:e.Comment[0].image.replace(/(#|\/\/)[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]?/,"")})},{id:"ifBlock",rule:e=>()=>{e.CONSUME(En.If),e.SUBRULE(e.comparison),e.CONSUME(En.LCurly),e.CONSUME(En.EOL),e.SUBRULE(e.block),e.CONSUME(En.RCurly)},validate:(e,t)=>(e.startLine=e.If[0].startLine,t.checkBlock(e,e.If)),compile:(e,t)=>{const i=t.visit(e.comparison),a=t.visit(e.block);return{run:t=>null!==t.commandState?AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION:(t.commandState={advanceOnPop:!0,ifEndLine:e.RCurly[0].startLine},i()?(AutomatorBackend.push(a),AutomatorData.logCommandEvent(`Checked ${Rn(e)} (true),\n entering IF block`,e.startLine),AUTOMATOR_COMMAND_STATUS.SAME_INSTRUCTION):(AutomatorData.logCommandEvent(`Checked ${Rn(e)} (false),\n skipping to line ${AutomatorBackend.translateLineNumber(e.RCurly[0].startLine+1)}`,e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION)),blockCommands:a}},blockify:(e,t)=>{const i=[];t.visit(e.block,i);const a=t.visit(e.comparison);return(0,B.Z)((0,B.Z)((0,B.Z)({nest:i},automatorBlocksMap.IF),a),{},{genericInput1:wn(a.genericInput1),genericInput2:wn(a.genericInput2)})}},{id:"notify",rule:e=>()=>{e.CONSUME(En.Notify),e.OR([{ALT:()=>e.CONSUME(En.StringLiteral)},{ALT:()=>e.CONSUME(En.StringLiteralSingleQuote)}])},validate:e=>(e.startLine=e.Notify[0].startLine,!0),compile:e=>{const t=e.StringLiteral||e.StringLiteralSingleQuote;return()=>(GameUI.notify.automator(`Automator: ${t[0].image}`),AutomatorData.logCommandEvent(`NOTIFY call: ${t[0].image}`,e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION)},blockify:e=>(0,B.Z)((0,B.Z)({},automatorBlocksMap.NOTIFY),{},{singleTextInput:(e.StringLiteral||e.StringLiteralSingleQuote)[0].image})},{id:"pauseTime",rule:e=>()=>{e.CONSUME(En.Pause),e.OR([{ALT:()=>e.SUBRULE(e.duration)},{ALT:()=>e.CONSUME(En.Identifier)}])},validate:(e,t)=>{let i;if(e.startLine=e.Pause[0].startLine,e.Identifier){if(!t.isValidVarFormat(e.Identifier[0],AUTOMATOR_VAR_TYPES.DURATION))return t.addError(e,`Constant ${e.Identifier[0].image} is not a valid time duration constant`,`Ensure that ${e.Identifier[0].image} is a number of seconds less than\n ${format(Number.MAX_VALUE/1e3)}`),!1;const a=t.lookupVar(e.Identifier[0],AUTOMATOR_VAR_TYPES.DURATION);i=a?a.value:a}else i=t.visit(e.duration);return e.$duration=i,void 0!==e.$duration},compile:e=>{const t=e.$duration;return i=>{let a;if(e.duration){const t=e.duration[0].children;a=`${t.NumberLiteral[0].image} ${t.TimeUnit[0].image}`}else a=TimeSpan.fromMilliseconds(t);null===i.commandState?(i.commandState={timeMs:0},AutomatorData.logCommandEvent(`Pause started (waiting ${a})`,e.startLine)):i.commandState.timeMs+=Math.max(Time.unscaledDeltaTime.milliseconds.toNumber(),AutomatorBackend.currentInterval);const n=i.commandState.timeMs>=t;return n?(AutomatorData.logCommandEvent(`Pause finished (waited ${a})`,e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION):AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION}},blockify:e=>{let t;if(e.duration){const i=e.duration[0].children;t=`${i.NumberLiteral[0].image} ${i.TimeUnit[0].image}`}else t=`${e.Identifier[0].image}`;return(0,B.Z)((0,B.Z)({},automatorBlocksMap.PAUSE),{},{singleTextInput:t})}},{id:"prestige",rule:e=>()=>{e.CONSUME(En.PrestigeEvent),e.OPTION((()=>e.CONSUME(En.Nowait))),e.OPTION1((()=>e.CONSUME(En.Respec)))},validate:(e,t)=>(e.startLine=e.PrestigeEvent[0].startLine,e.PrestigeEvent&&e.PrestigeEvent[0].tokenType===En.Eternity&&!EternityMilestone.autobuyerEternity.isReached?(t.addError(e.PrestigeEvent,"Eternity autobuyer is not unlocked",`Reach ${quantifyInt("Eternity",EternityMilestone.autobuyerEternity.config.eternities)}\n to use this command`),!1):e.PrestigeEvent&&e.PrestigeEvent[0].tokenType===En.Reality&&!RealityUpgrade(25).isBought?(t.addError(e.PrestigeEvent,"Reality autobuyer is not unlocked","Purchase the Reality Upgrade which unlocks the Reality autobuyer"),!1):(e.PrestigeEvent&&e.PrestigeEvent[0].tokenType===En[1/0]&&e.Respec&&t.addError(e.Respec,"There's no 'respec' for infinity","Remove 'respec' from the command"),!0)),compile:e=>{const t=void 0!==e.Nowait,i=void 0!==e.Respec,a=e.PrestigeEvent[0].tokenType;return()=>{const n=a.$prestigeAvailable();if(!n)return t?(AutomatorData.logCommandEvent(`${e.PrestigeEvent.image} attempted, but skipped due to NOWAIT`,e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION):AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;i&&a.$respec(),a.$prestige();const s=e.PrestigeEvent[0].image.toUpperCase();return AutomatorData.logCommandEvent(`${s} triggered (${Mn(s)})`,e.startLine),"REALITY"===s&&AutomatorBackend.state.forceRestart?AUTOMATOR_COMMAND_STATUS.RESTART:AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION}},blockify:e=>(0,B.Z)((0,B.Z)({},automatorBlocksMap[e.PrestigeEvent[0].tokenType.name.toUpperCase()]),{},{nowait:void 0!==e.Nowait,respec:void 0!==e.Respec})},{id:"startDilation",rule:e=>()=>{e.CONSUME(En.Start),e.CONSUME(En.Dilation)},validate:e=>(e.startLine=e.Start[0].startLine,!0),compile:e=>()=>player.dilation.active?(AutomatorData.logCommandEvent("Start Dilation encountered but ignored due to already being dilated",e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION):startDilatedEternity(!0)?(AutomatorData.logCommandEvent("Dilation entered",e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION):AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION,blockify:()=>(0,B.Z)({singleSelectionInput:"DILATION"},automatorBlocksMap.START)},{id:"startEC",rule:e=>()=>{e.CONSUME(En.Start),e.SUBRULE(e.eternityChallenge)},validate:e=>(e.startLine=e.Start[0].startLine,!0),compile:e=>{const t=e.eternityChallenge[0].children.$ecNumber;return()=>{const i=EternityChallenge(t);return i.isRunning?(AutomatorData.logCommandEvent("Start EC encountered but ignored due to already being in the specified EC",e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION):(EternityChallenge(t).isUnlocked||TimeStudy.eternityChallenge(t).purchase(!0))&&i.start(!0)?(AutomatorData.logCommandEvent(`Eternity Challenge ${t} started`,e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_TICK_NEXT_INSTRUCTION):AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION}},blockify:e=>(0,B.Z)({singleSelectionInput:"EC",singleTextInput:e.eternityChallenge[0].children.$ecNumber},automatorBlocksMap.START)},{id:"storeGameTime",rule:e=>()=>{e.CONSUME(En.StoreGameTime),e.OR([{ALT:()=>e.CONSUME(En.On)},{ALT:()=>e.CONSUME(En.Off)},{ALT:()=>e.CONSUME(En.Use)}])},validate:(e,t)=>(e.startLine=e.StoreGameTime[0].startLine,!!Enslaved.isUnlocked||(t.addError(e.StoreGameTime[0],"You do not yet know how to store game time","Unlock the ability to store game time"),!1)),compile:e=>{if(e.Use)return()=>(Enslaved.isUnlocked?(Enslaved.useStoredTime(!1),AutomatorData.logCommandEvent("Stored game time used",e.startLine)):AutomatorData.logCommandEvent("Attempted to use stored game time, but failed (not unlocked yet)",e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION);const t=Boolean(e.On);return()=>(t!==player.celestials.enslaved.isStoring&&Enslaved.toggleStoreBlackHole(),AutomatorData.logCommandEvent("Storing game time toggled "+(e.On?"ON":"OFF"),e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION)},blockify:e=>(0,B.Z)({singleSelectionInput:e.Use?"USE":e.On?"ON":"OFF"},automatorBlocksMap["STORE GAME TIME"])},{id:"studiesBuy",rule:e=>()=>{e.CONSUME(En.Studies),e.OPTION((()=>e.CONSUME(En.Nowait))),e.CONSUME(En.Purchase),e.OR([{ALT:()=>e.SUBRULE(e.studyList)},{ALT:()=>e.CONSUME1(En.Identifier)}])},validate:(e,t)=>{if(e.startLine=e.Studies[0].startLine,e.Identifier){if(!t.isValidVarFormat(e.Identifier[0],AUTOMATOR_VAR_TYPES.STUDIES))return t.addError(e,`Constant ${e.Identifier[0].image} is not a valid Time Study constant`,`Ensure that ${e.Identifier[0].image} is a properly-formatted Time Study string`),!1;const i=t.lookupVar(e.Identifier[0],AUTOMATOR_VAR_TYPES.STUDIES);e.$studies=i.value,e.$studies.image=e.Identifier[0].image}else e.studyList&&(e.$studies=t.visit(e.studyList));return!0},compile:e=>{const t=e.$studies;return void 0===e.Nowait?()=>{let i,a=0,n=0;for(const e of t.normal){var s;TimeStudy(e).isBought?a++:TimeStudy(e).purchase(!0)?n++:i=null!==(s=i)&&void 0!==s?s:e}if(a+n0&&i&&AutomatorData.logCommandEvent(`Purchased ${quantifyInt("Time Study",n)} and stopped at\n Time Study ${i}, waiting to attempt to purchase more Time Studies`,e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION;const r=!!t.ec&&TimeStudy.eternityChallenge(t.ec).isBought;if(!t.ec||r&&!t.startEC)return AutomatorData.logCommandEvent("Purchased all specified Time Studies",e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;const o=TimeStudy.eternityChallenge(t.ec).purchase(!0);return r||o?(t.startEC?(EternityChallenge(t.ec).start(!0),EternityChallenge(t.ec).isRunning?AutomatorData.logCommandEvent(`Purchased all specified Time Studies, then unlocked and started running\n Eternity Challenge ${t.ec}`,e.startLine):AutomatorData.logCommandEvent(`Purchased all specified Time Studies and unlocked Eternity Challenge\n ${t.ec}, but failed to start it`,e.startLine)):AutomatorData.logCommandEvent(`Purchased all specified Time Studies and unlocked Eternity Challenge\n ${t.ec}`,e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION):AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION}:()=>{for(const e of t.normal)TimeStudy(e).purchase(!0);return!t.ec||TimeStudy.eternityChallenge(t.ec).isBought||TimeStudy.eternityChallenge(t.ec).purchase(!0),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION}},blockify:e=>(0,B.Z)({singleTextInput:e.$studies.image,nowait:void 0!==e.Nowait},automatorBlocksMap["STUDIES PURCHASE"])},{id:"studiesLoad",rule:e=>()=>{e.CONSUME(En.Studies),e.OPTION((()=>e.CONSUME(En.Nowait))),e.CONSUME(En.Load),e.OR([{ALT:()=>e.CONSUME1(En.Id)},{ALT:()=>e.CONSUME1(En.Name)}])},validate:(e,t)=>{if(e.startLine=e.Studies[0].startLine,e.Id){const i=_n.exec(e.Id[0].image);if(!i||e.Id[0].isInsertedInRecovery)return t.addError(e,"Missing preset id","Provide the id of a saved study preset slot from the Time Studies page"),!1;const a=parseInt(i[1],10);return a<1||a>6?(t.addError(e.Id[0],`Could not find a preset with an id of ${a}`,"Type in a valid id (1 - 6) for your study preset"),!1):(e.$presetIndex=a,!0)}if(e.Name){const i=An.exec(e.Name[0].image);if(!i||e.Name[0].isInsertedInRecovery)return t.addError(e,"Missing preset name","Provide the name of a saved study preset from the Time Studies page"),!1;const a=player.timestudy.presets.findIndex((e=>e.name===i[1]))+1;return 0===a?(t.addError(e.Name[0],`Could not find preset named ${i[1]} (Note: Names are case-sensitive)`,"Check to make sure you typed in the correct name for your study preset"),!1):(e.$presetIndex=a,!0)}return!1},compile:e=>{const t=e.$presetIndex;return()=>{const i=new TimeStudyTree(player.timestudy.presets[t-1].studies),a=GameCache.currentStudyTree.value.purchasedStudies.length;TimeStudyTree.commitToGameState(i.purchasedStudies,!0,i.startEC);const n=GameCache.currentStudyTree.value.purchasedStudies.length,s=i.purchasedStudies.filter((e=>!GameCache.currentStudyTree.value.purchasedStudies.includes(e))).length,r=e.Name?e.Name[0].image:e.Id[0].image;return 0===s?AutomatorData.logCommandEvent(`Fully loaded study preset ${r}`,e.startLine):n>a&&AutomatorData.logCommandEvent(`Partially loaded study preset ${r}\n (missing ${quantifyInt("study",s)})`,e.startLine),void 0!==e.Nowait||0===s?AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION:AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION}},blockify:e=>(0,B.Z)({singleSelectionInput:e.Name?"NAME":"ID",singleTextInput:e.Name?player.timestudy.presets[e.$presetIndex-1].name:e.$presetIndex,nowait:void 0!==e.Nowait},automatorBlocksMap["STUDIES LOAD"])},{id:"studiesRespec",rule:e=>()=>{e.CONSUME(En.Studies),e.CONSUME(En.Respec)},validate:e=>(e.startLine=e.Studies[0].startLine,!0),compile:e=>()=>(player.respec=!0,AutomatorData.logCommandEvent("Turned study respec ON",e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION),blockify:()=>automatorBlocksMap["STUDIES RESPEC"]},{id:"unlockDilation",rule:e=>()=>{e.CONSUME(En.Unlock),e.OPTION((()=>e.CONSUME(En.Nowait))),e.CONSUME(En.Dilation)},validate:e=>(e.startLine=e.Unlock[0].startLine,!0),compile:e=>{const t=void 0!==e.Nowait;return()=>{if(PlayerProgress.dilationUnlocked())return AutomatorData.logCommandEvent("Skipped dilation unlock due to being already unlocked",e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;const i=TimeStudy.dilation.purchase(!0);return i?(AutomatorData.logCommandEvent("Unlocked Dilation",e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION):t?(AutomatorData.logCommandEvent("Skipped dilation unlock due to lack of requirements (NOWAIT)",e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION):AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION}},blockify:e=>(0,B.Z)({singleSelectionInput:"DILATION",nowait:void 0!==e.Nowait},automatorBlocksMap.UNLOCK)},{id:"unlockEC",rule:e=>()=>{e.CONSUME(En.Unlock),e.OPTION((()=>e.CONSUME(En.Nowait))),e.SUBRULE(e.eternityChallenge)},validate:e=>(e.startLine=e.Unlock[0].startLine,!0),compile:e=>{const t=void 0!==e.Nowait,i=e.eternityChallenge[0].children.$ecNumber;return()=>{if(EternityChallenge(i).isUnlocked)return AutomatorData.logCommandEvent(`Skipped EC ${i} unlock due to being already unlocked`,e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;if(t)return AutomatorData.logCommandEvent(`EC ${i} unlock failed and skipped (NOWAIT)`,e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION;const a=TimeStudy.eternityChallenge(i).purchase(!0);return a?(AutomatorData.logCommandEvent(`EC ${i} unlocked`,e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION):AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION}},blockify:e=>(0,B.Z)({singleSelectionInput:"EC",singleTextInput:e.eternityChallenge[0].children.$ecNumber,nowait:void 0!==e.Nowait},automatorBlocksMap.UNLOCK)},{id:"untilLoop",rule:e=>()=>{e.CONSUME(En.Until),e.OR([{ALT:()=>e.SUBRULE(e.comparison)},{ALT:()=>e.CONSUME(En.PrestigeEvent)}]),e.CONSUME(En.LCurly),e.CONSUME(En.EOL),e.SUBRULE(e.block),e.CONSUME(En.RCurly)},validate:(e,t)=>(e.startLine=e.Until[0].startLine,t.checkBlock(e,e.Until)),compile:(e,t)=>{const i=t.visit(e.block);if(e.comparison){const a=t.visit(e.comparison);return Dn((()=>!a()),i,e,!0)}const a=e.PrestigeEvent[0].tokenType.$prestigeLevel;let n;switch(e.PrestigeEvent[0].tokenType){case En[1/0]:n="Infinity";break;case En.Eternity:n="Eternity";break;case En.Reality:n="Reality";break;default:throw Error("Unrecognized prestige layer in until loop")}return{run:t=>(null===t.commandState&&(t.commandState={prestigeLevel:0}),t.commandState.prestigeLevel>=a?(AutomatorData.logCommandEvent(`${n} prestige has occurred, exiting until loop`,e.startLine),AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION):(AutomatorBackend.push(i),AutomatorData.logCommandEvent(`${n} prestige has not occurred yet, moving to line\n ${AutomatorBackend.translateLineNumber(e.LCurly[0].startLine+1)} (start of until loop)`,e.startLine),AUTOMATOR_COMMAND_STATUS.SAME_INSTRUCTION)),blockCommands:i}},blockify:(e,t)=>{const i=[];t.visit(e.block,i);const a=t.visit(e.comparison);return e.comparison?(0,B.Z)((0,B.Z)((0,B.Z)({nest:i},automatorBlocksMap.UNTIL),a),{},{genericInput1:wn(a.genericInput1),genericInput2:wn(a.genericInput2)}):(0,B.Z)({genericInput1:e.PrestigeEvent[0].tokenType.name.toUpperCase(),nest:i},automatorBlocksMap.UNTIL)}},{id:"waitCondition",rule:e=>()=>{e.CONSUME(En.Wait),e.SUBRULE(e.comparison)},validate:e=>(e.startLine=e.Wait[0].startLine,!0),compile:(e,t)=>()=>{const i=t.visit(e.comparison),a=i();if(a){const t=TimeSpan.fromMilliseconds(Date.now()-AutomatorData.waitStart).toStringShort();return AutomatorData.isWaiting?AutomatorData.logCommandEvent(`Continuing after WAIT\n (${Rn(e)} is true, after ${t})`,e.startLine):AutomatorData.logCommandEvent(`WAIT skipped (${Rn(e)} is already true)`,e.startLine),AutomatorData.isWaiting=!1,AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION}return AutomatorData.isWaiting||(AutomatorData.logCommandEvent(`Started WAIT for ${Rn(e)}`,e.startLine),AutomatorData.waitStart=Date.now()),AutomatorData.isWaiting=!0,AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION},blockify:(e,t)=>{const i=[];t.visit(e.block,i);const a=t.visit(e.comparison);return(0,B.Z)((0,B.Z)((0,B.Z)({nest:i},automatorBlocksMap.WAIT),a),{},{genericInput1:wn(a.genericInput1),genericInput2:wn(a.genericInput2)})}},{id:"waitEvent",rule:e=>()=>{e.CONSUME(En.Wait),e.CONSUME(En.PrestigeEvent)},validate:e=>(e.startLine=e.Wait[0].startLine,!0),compile:e=>{const t=e.PrestigeEvent[0].tokenType.$prestigeLevel;return i=>{null===i.commandState&&(i.commandState={prestigeLevel:0});const a=i.commandState.prestigeLevel>=t,n=e.PrestigeEvent[0].image.toUpperCase();if(a){const t=TimeSpan.fromMilliseconds(Date.now()-AutomatorData.waitStart).toStringShort();return AutomatorData.logCommandEvent(`Continuing after WAIT (${n} occurred for\n ${Mn(n)}, after ${t})`,e.startLine),AutomatorData.isWaiting=!1,AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION}return AutomatorData.isWaiting||(AutomatorData.logCommandEvent(`Started WAIT for ${n}`,e.startLine),AutomatorData.waitStart=Date.now()),AutomatorData.isWaiting=!0,AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION}},blockify:e=>(0,B.Z)({genericInput1:e.PrestigeEvent[0].tokenType.name.toUpperCase()},automatorBlocksMap.WAIT)},{id:"waitBlackHole",rule:e=>()=>{e.CONSUME(En.Wait),e.CONSUME(En.BlackHole),e.OR([{ALT:()=>e.CONSUME(En.Off)},{ALT:()=>e.CONSUME(En.BlackHoleStr)}])},validate:e=>(e.startLine=e.Wait[0].startLine,!0),compile:e=>()=>{const t=Boolean(e.Off),i=e.BlackHoleStr?Number(e.BlackHoleStr[0].image.charAt(2)):0,a=t?!BlackHole(1).isActive:BlackHole(i).isActive,n=t?"inactive Black Holes":`active Black Hole ${i}`;if(a){const t=TimeSpan.fromMilliseconds(Date.now()-AutomatorData.waitStart).toStringShort();return AutomatorData.logCommandEvent(`Continuing after WAIT (waited ${t} for ${n})`,e.startLine),AutomatorData.isWaiting=!1,AUTOMATOR_COMMAND_STATUS.NEXT_INSTRUCTION}return AutomatorData.isWaiting||(AutomatorData.logCommandEvent(`Started WAIT for ${n}`,e.startLine),AutomatorData.waitStart=Date.now()),AutomatorData.isWaiting=!0,AUTOMATOR_COMMAND_STATUS.NEXT_TICK_SAME_INSTRUCTION},blockify:e=>(0,B.Z)({genericInput1:"BLACK HOLE",compOperator:e.BlackHoleStr?e.BlackHoleStr[0].image.toUpperCase():"OFF"},automatorBlocksMap.WAIT)},{id:"whileLoop",rule:e=>()=>{e.CONSUME(En.While),e.SUBRULE(e.comparison),e.CONSUME(En.LCurly),e.CONSUME(En.EOL),e.SUBRULE(e.block),e.CONSUME(En.RCurly)},validate:(e,t)=>(e.startLine=e.While[0].startLine,t.checkBlock(e,e.While)),compile:(e,t)=>Dn(t.visit(e.comparison),t.visit(e.block),e,!1),blockify:(e,t)=>{const i=[];t.visit(e.block,i);const a=t.visit(e.comparison);return(0,B.Z)((0,B.Z)((0,B.Z)({nest:i},automatorBlocksMap.WHILE),a),{},{genericInput1:wn(a.genericInput1),genericInput2:wn(a.genericInput2)})}},{id:"stop",rule:e=>()=>{e.CONSUME(En.Stop)},validate:e=>(e.startLine=e.Stop[0].startLine,!0),compile:e=>()=>(AutomatorData.logCommandEvent("Automator execution stopped with STOP command",e.startLine),AUTOMATOR_COMMAND_STATUS.HALT),blockify:()=>(0,B.Z)({},automatorBlocksMap.STOP)}];class xn extends $a.Parser{constructor(){super(gn,{recoveryEnabled:!0,outputCst:!0,nodeLocationTracking:"full"});const e=this;e.RULE("script",(()=>e.SUBRULE(e.block))),e.RULE("block",(()=>e.MANY_SEP({SEP:En.EOL,DEF:()=>e.OPTION((()=>e.SUBRULE(e.command)))})));const t=["$.SUBRULE($.badCommand)","$.CONSUME(EOF)"];for(const a of In)e.RULE(a.id,a.rule(e)),t.push(`$.SUBRULE($.${a.id})`);const i=window.Function("$","EOF",`\n return () => $.OR($.c1 || ($.c1 = [\n ${t.map((e=>`{ ALT: () => ${e} },`)).join("\n")}]));\n `);e.RULE("command",i(e,$a.EOF)),e.RULE("badCommand",(()=>e.AT_LEAST_ONE((()=>e.SUBRULE(e.badCommandToken)))),{resyncEnabled:!1}),e.RULE("badCommandToken",(()=>e.OR([{ALT:()=>e.CONSUME(En.Identifier)},{ALT:()=>e.CONSUME(En.NumberLiteral)},{ALT:()=>e.CONSUME(En.ComparisonOperator)}])),{resyncEnabled:!1}),e.RULE("comparison",(()=>{e.SUBRULE(e.compareValue),e.CONSUME(En.ComparisonOperator),e.SUBRULE2(e.compareValue)})),e.RULE("compareValue",(()=>e.OR([{ALT:()=>e.CONSUME(En.NumberLiteral)},{ALT:()=>e.CONSUME(En.Identifier)},{ALT:()=>e.CONSUME(En.AutomatorCurrency)}]))),e.RULE("duration",(()=>{e.CONSUME(En.NumberLiteral),e.CONSUME(En.TimeUnit)})),e.RULE("eternityChallenge",(()=>e.OR([{ALT:()=>{e.CONSUME(En.EC),e.CONSUME(En.NumberLiteral)}},{ALT:()=>e.CONSUME(En.ECLiteral)}]))),e.RULE("studyList",(()=>{e.AT_LEAST_ONE((()=>e.SUBRULE(e.studyListEntry))),e.OPTION((()=>{e.CONSUME(En.Pipe),e.CONSUME1(En.NumberLiteral,{LABEL:"ECNumber"}),e.OPTION1((()=>e.CONSUME(En.Exclamation)))}))}),{resyncEnabled:!1}),e.RULE("studyListEntry",(()=>{e.OR([{ALT:()=>e.SUBRULE(e.studyRange)},{ALT:()=>e.CONSUME(En.NumberLiteral)},{ALT:()=>e.CONSUME(En.StudyPath)}]),e.OPTION((()=>e.CONSUME(En.Comma)))})),e.RULE("studyRange",(()=>{e.CONSUME(En.NumberLiteral,{LABEL:"firstStudy"}),e.CONSUME(En.Dash),e.CONSUME1(En.NumberLiteral,{LABEL:"lastStudy"})})),e.RULE("xHighest",(()=>{e.CONSUME(En.NumberLiteral),e.CONSUME(En.XHighest)})),e.RULE("currencyAmount",(()=>{e.CONSUME(En.NumberLiteral),e.CONSUME(En.AutomatorCurrency)})),e.performSelfAnalysis()}}const Pn=new xn,Gn=Pn.getBaseCstVisitorConstructorWithDefaults();class Un extends Gn{constructor(e){super(),this.validateVisitor(),this.reset(e);for(const a of In){if(!a.validate)continue;const e=this[a.id];this[a.id]=t=>{a.validate(t,this)&&e&&e.call(this,t)}}const t=vn.tokenize(e),i=t.tokens;Pn.input=i,this.parseResult=Pn.script(),this.visit(this.parseResult),this.addLexerErrors(t.errors),this.addParserErrors(Pn.errors,i),this.modifyErrorMessages(),this.errorCount=t.errors.length+this.errors.length+Pn.errors.length}addLexerErrors(e){for(const t of e)this.errors.push({startLine:t.line,startOffset:t.offset,endOffset:t.offset+t.length,info:`Unexpected characters: ${this.rawText.substr(t.offset,t.length)}`,tip:`${this.rawText.substr(t.offset,t.length)} cannot be part of a command, remove them`})}static combinePositionRanges(e,t){return{startLine:Math.min(e.startLine,t.startLine),startOffset:Math.min(e.startOffset,t.startOffset),endOffset:Math.max(e.endOffset,t.endOffset)}}addParserErrors(e,t){for(const i of e){let e=Un.combinePositionRanges(Un.getPositionRange(i.previousToken),Un.getPositionRange(i.token));"EOF"===i.token.tokenType.name&&"EOF"===i.previousToken.tokenType.name&&(e=Un.combinePositionRanges(e,Un.getPositionRange(t[t.length-1]))),e.info=i.message.replace(/'\n[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*'/i,"End of line");const a="EOF"===i.token.tokenType.name||"EOL"===i.token.tokenType.name;"NoViableAltException"===i.name?a||(e.info=`Unexpected input ${i.token.image}`,e.tip=`Remove ${i.token.image}`):"EarlyExitException"===i.name&&(e.info="Unexpected end of command",e.tip="Complete the command by adding the other parameters"),this.errors.push(e)}}static getPositionRange(e){let t={startLine:Number.MAX_VALUE,startOffset:Number.MAX_VALUE,endOffset:0};if(void 0===e||null===e)return t;if(void 0!==e.startOffset)return{startLine:e.startLine,startOffset:e.startOffset,endOffset:e.endOffset};if(void 0!==e.location&&void 0!==e.location.startOffset)return e.location;if(e.children&&!Array.isArray(e.children))return Un.getPositionRange(e.children);if(Array.isArray(e))return e.reduce(((e,t)=>Un.combinePositionRanges(e,Un.getPositionRange(t))),t);for(const i in e)Object.prototype.hasOwnProperty.call(e,i)&&Array.isArray(e[i])&&(t=Un.combinePositionRanges(t,Un.getPositionRange(e[i])));return t}addError(e,t,i){const a=Un.getPositionRange(e);a.info=t,a.tip=i,this.errors.push(a)}modifyErrorMessages(){if(!Player.automatorUnlocked||void 0===AutomatorData.currentScriptText())return;const e=[];let t=0;for(const i of this.errors.sort(((e,t)=>e.startLine-t.startLine)))isNaN(i.startLine)&&(i.startLine=AutomatorData.currentScriptText().split("\n").length),i.startLine!==t&&(i.tip?(e.push(i),t=i.startLine):(i.info.match(/EOF but found(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*\}/g)?(i.info=i.info.replaceAll("--\x3e ","[").replaceAll(" <--","]"),i.tip="Remove }. Parser halted at this line and may miss errors farther down the script."):i.info.match(/found(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*\}/g)?(i.info=i.info.replaceAll("--\x3e ","[").replaceAll(" <--","]"),i.tip="Remove }"):i.info.match(/Expecting/g)?(i.info=i.info.replaceAll("--\x3e ","[").replaceAll(" <--","]"),i.tip="Use the appropriate type of data in the command as specified in the command help"):i.info.match(/End of line/g)?i.tip="Provide the remaining arguments to complete the incomplete command":i.info.match(/EOF but found:/g)?i.tip="Remove extra command argument":i.tip="This error's cause is unclear",e.push(i),t=i.startLine));for(const i of e)i.startLine=AutomatorBackend.translateLineNumber(i.startLine);this.errors=e}reset(e){this.rawText=e,this.variables={},this.errors=[]}checkTimeStudyNumber(e){const t=parseFloat(e.image);return!TimeStudy(t)||TimeStudy(t).isTriad&&!Ra.canBuyTriad&&!ue.mendingUnlocked()?(this.addError(e,`Invalid Time Study identifier ${t}`,"Make sure you copied or typed in your time study IDs correctly"),0):t}lookupVar(e,t){const i=e.image,a={},n=player.reality.automator.constants;if(!Object.keys(n).includes(i))return void this.addError(e,`Variable ${i} has not been defined`,`Use the definition panel to define ${i} in order to reference it, or check for typos`);const s=n[i];let r;switch(t){case AUTOMATOR_VAR_TYPES.NUMBER:a.value=new Decimal(s);break;case AUTOMATOR_VAR_TYPES.STUDIES:r=new TimeStudyTree(s),a.value={normal:r.selectedStudies.map((e=>e.id)),ec:r.ec,startEC:r.startEC};break;case AUTOMATOR_VAR_TYPES.DURATION:a.value=parseInt(1e3*s,10);break;default:throw new Error("Unrecognized variable format in automator constant lookup")}return a}isValidVarFormat(e,t){const i=e.image,a=player.reality.automator.constants;if(!Object.keys(a).includes(i))return!1;const n=a[i];switch(t){case AUTOMATOR_VAR_TYPES.NUMBER:return n.match(/^\x2D?(0|[1-9][0-9]*)(\.[0-9]+)?([Ee][\+\x2D]?[0-9]+)?$/);case AUTOMATOR_VAR_TYPES.STUDIES:return TimeStudyTree.isValidImportString(n);case AUTOMATOR_VAR_TYPES.DURATION:return!Number.isNaN(parseInt(1e3*n,10));default:throw new Error("Unrecognized variable format in automator constant lookup")}}duration(e){if(e.$value)return e.$value;if(!e.TimeUnit||e.TimeUnit[0].isInsertedInRecovery)return void this.addError(e,"Missing time unit","Provide a unit of time (eg. seconds or minutes)");const t=parseFloat(e.NumberLiteral[0].image)*e.TimeUnit[0].tokenType.$scale;if(!isNaN(t))return e.$value=t,e.$value;this.addError(e,"Error parsing duration","Provide a properly-formatted number for time")}xHighest(e){return e.$value?e.$value:e.NumberLiteral&&!e.NumberLiteral[0].isInsertedInRecovery?(e.$value=new Decimal(e.NumberLiteral[0].image),e.$value):void this.addError(e,"Missing multiplier","Provide a multiplier to set the autobuyer to")}currencyAmount(e){return e.$value?e.$value:e.NumberLiteral&&!e.NumberLiteral[0].isInsertedInRecovery?(e.$value=new Decimal(e.NumberLiteral[0].image),e.$value):void this.addError(e,"Missing amount","Provide a threshold to set the autobuyer to")}studyRange(e,t){if(!e.firstStudy||e.firstStudy[0].isInsertedInRecovery||!e.lastStudy||e.lastStudy[0].isInsertedInRecovery)return void this.addError(e,"Missing Time Study number in range","Provide starting and ending IDs for Time Study number ranges");const i=this.checkTimeStudyNumber(e.firstStudy[0]),a=this.checkTimeStudyNumber(e.lastStudy[0]);if(i&&a&&t)for(let n=i;n<=a;++n)TimeStudy(n)&&t.push(n)}studyListEntry(e,t){if(e.studyRange)this.visit(e.studyRange,t);else if(e.NumberLiteral){if(e.NumberLiteral[0].isInsertedInRecovery)return void this.addError(e,"Missing Time Study number","Provide a Time Study ID to purchase");const i=this.checkTimeStudyNumber(e.NumberLiteral[0]);i&&t.push(i)}else if(e.StudyPath){const i=e.StudyPath[0].tokenType.$studyPath,a=NormalTimeStudies.paths[i];t.push(...a)}}studyList(e){if(void 0!==e.$cached)return e.$cached;const t=[];for(const a of e.studyListEntry)this.visit(a,t);const i=Un.getPositionRange(e);if(e.$cached={normal:t,image:this.rawText.substr(i.startOffset,i.endOffset-i.startOffset+1),ec:0,startEC:!1},e.ECNumber){e.ECNumber.isInsertedInRecovery&&this.addError(e.Pipe[0],"Missing Eternity Challenge number","Specify which Eternity Challenge is being referred to");const t=parseFloat(e.ECNumber[0].image);(!Number.isInteger(t)||t<0||t>12)&&this.addError(e.ECNumber,`Invalid Eternity Challenge ID ${t}`,`Eternity Challenge ${t} does not exist, use an integer between ${format(1)} and ${format(12)}`),e.$cached.ec=t}return e.Exclamation&&(e.$cached.startEC=!0),e.$cached}compareValue(e){if(e.NumberLiteral)e.$value=new Decimal(e.NumberLiteral[0].image);else if(e.Identifier){this.isValidVarFormat(e.Identifier[0],AUTOMATOR_VAR_TYPES.NUMBER)||this.addError(e,`Constant ${e.Identifier[0].image} cannot be used for comparison`,`Ensure that ${e.Identifier[0].image} contains a properly-formatted number and not a Time Study string`);const t=this.lookupVar(e.Identifier[0],AUTOMATOR_VAR_TYPES.NUMBER);t&&(e.$value=e.Identifier[0].image)}}comparison(e){super.comparison(e),(!e.compareValue||e.compareValue[0].recoveredNode||2!==e.compareValue.length||e.compareValue[1].recoveredNode)&&this.addError(e,"Missing value for comparison","Ensure that the comparison has two values"),e.ComparisonOperator&&!e.ComparisonOperator[0].isInsertedInRecovery?e.ComparisonOperator[0].tokenType!==En.OpEQ&&e.ComparisonOperator[0].tokenType!==En.EqualSign||this.addError(e,"Please use an inequality comparison (>, <, >=, <=)","Comparisons cannot be done with equality, only with inequality operators"):this.addError(e,"Missing comparison operator (<, >, <=, >=)","Insert the appropriate comparison operator")}badCommand(e){const t=e.badCommandToken[0].children,i=Object.keys(t)[0];this.addError(t[i][0],`Unrecognized command "${t[i][0].image}"`,"Check to make sure you have typed in the command name correctly")}eternityChallenge(e){let t,i;if(e.ECLiteral)i=parseFloat(e.ECLiteral[0].image.substr(2)),t=e.ECLiteral[0];else{if(!e.NumberLiteral)return void this.addError(e,"Missing Eternity Challenge number","Specify which Eternity Challenge is being referred to");i=parseFloat(e.NumberLiteral[0].image),t=e.NumberLiteral[0]}(!Number.isInteger(i)||i<1||i>12)&&this.addError(t,`Invalid Eternity Challenge ID ${i}`,`Eternity Challenge ${i} does not exist, use an integer between ${format(1)} and ${format(12)}`),e.$ecNumber=i}checkBlock(e,t){let i=!1;return e.RCurly&&!e.RCurly[0].isInsertedInRecovery||(this.addError(t[0],"Missing closing }","This loop has mismatched brackets, add a corresponding } on another line to close the loop"),i=!0),e.LCurly&&!e.LCurly[0].isInsertedInRecovery||(this.addError(t[0],"Missing opening {","This line has an extra } closing a loop which does not exist, remove the }"),i=!0),!i}script(e){e.block&&this.visit(e.block),e.variables=this.variables}}class Bn extends Gn{constructor(){super();for(const e of In){if(!e.compile)continue;const t=this[e.id];this[e.id]=(i,a)=>{t&&t!==super[e.id]&&t.call(this,i,a);let n=e.compile(i,this);"function"===typeof n&&(n={run:n}),n.lineNumber=i.startLine,a.push(n)}}this.validateVisitor()}comparison(e){const t=e.compareValue.map((e=>{if(e.children.AutomatorCurrency)return e.children.AutomatorCurrency[0].tokenType.$getter;const t=e.children.$value;return"string"===typeof t?()=>player.reality.automator.constants[t]:()=>t})),i=e.compareValue.map((e=>{if(e.children.AutomatorCurrency){const t=e.children.AutomatorCurrency[0].tokenType.$unlocked;return!t||t()}return!0}));if(!i[0]||!i[1])return()=>!1;const a=e.ComparisonOperator[0].tokenType.$compare;return()=>a(t[0](),t[1]())}block(e){const t=[];if(e.command)for(const i of e.command)this.visit(i,t);return t}script(e){if(void 0===e.variables)throw new Error("Compiler called before Validator");return e.block?this.visit(e.block):[]}}class Nn extends Gn{constructor(){super();for(const e of In){const t=e.blockify;if(!t)continue;const i=this[e.id];this[e.id]=(a,n)=>{i&&i!==super[e.id]&&i.call(this,a,n);try{const e=t(a,this);n.push((0,B.Z)((0,B.Z)({},e),{},{id:UIID.next()}))}catch(s){}}}this.validateVisitor()}comparison(e){const t=t=>{const i=e.compareValue[t],a=Boolean(i.children.AutomatorCurrency);return a?i.children.AutomatorCurrency[0].image:i.children.$value};return{compOperator:e.ComparisonOperator[0].image,genericInput1:t(0),genericInput2:t(1)}}script(e){const t=[];return e.block&&this.visit(e.block,t),t}block(e,t){if(e.command)for(const i of e.command)this.visit(i,t)}}function On(e,t=!1){const i=`${e}\n `,a=new Un(i);let n;return 0!==a.errorCount||t||(n=(new Bn).visit(a.parseResult)),{errors:a.errors,compiled:n}}function Ln(e){return 0!==On(e,!0).errors.length}function Fn(e){const t=new Un(e),i=new Nn,a=i.visit(t.parseResult),n=e=>{if(!e)return 0;const t=e.children;let i=0;for(const r of Object.keys(t)){var a,s;const e=null===(a=t[r][0])||void 0===a||null===(s=a.children)||void 0===s?void 0:s.block,o=e?e[0].children.command:[];if(i+=o?o.map((e=>n(e)+1)).reduce(((e,t)=>e+t),0):0,"EOF"===r)return-1}return i},s=e=>e.nest?1+e.nest.map((e=>s(e))).reduce(((e,t)=>e+t),0):1,r=t.parseResult.children.block[0].children.command.map((e=>n(e)+1)).reduce(((e,t)=>e+t),0),o=a.map((e=>s(e))).reduce(((e,t)=>e+t),0);return{blocks:a,validatedBlocks:r,visitedBlocks:o}}function $n(e){const t=new Un(e);return t}function Hn(e,t,i){const a=e.$autocomplete&&e.$autocomplete.startsWith(t)&&e.$autocomplete!==t,n=!e.$unlocked||e.$unlocked();a&&n&&i.add(e.$autocomplete);for(const s of e.categoryMatches)Hn(bn[s],t,i)}CodeMirror.registerHelper("lint","automato",((e,t,i)=>{const a=i.getDoc(),n=On(e,!0).errors;return n.map((e=>({message:e.info,severity:"error",from:a.posFromIndex(e.startOffset),to:a.posFromIndex(e.endOffset+1)})))})),CodeMirror.registerHelper("hint","anyword",(e=>{const t=e.getDoc().getCursor();let i=t.ch;const a=t.ch,n=e.getLine(t.line);while(i&&/[0-9A-Z_a-z]/.test(n.charAt(i-1)))--i;const s=n.slice(0,i),r=n.slice(i,a),o=vn.tokenize(s);if(o.errors.length>0)return;const l=Pn.computeContentAssist("command",o.tokens),c=new Set;for(const u of l)"badCommand"!==u.ruleStack[1]&&Hn(u.nextTokenType,r,c);return{list:Array.from(c),from:CodeMirror.Pos(t.line,i),to:CodeMirror.Pos(t.line,a)}}));const qn={regex:/(\/\/|#)(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*/,token:"comment",next:"start"};CodeMirror.defineSimpleMode("automato",{start:[qn,{regex:/[s\u017F]tudie[s\u017F][\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+/i,token:"keyword",next:"studiesArgs"},{regex:/blob[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF][\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]/i,token:"blob"},{regex:/(auto|if|pau[s\u017F]e|[s\u017F]tudie[s\u017F]|time[\t ]+theorem[s\u017F]?|[s\u017F]pace[\t ]+theorem[s\u017F]?|until|wait|while|blac[k\u212A][\t ]+hole|[s\u017F]tored?[\t ]+game[\t ]+time|notify)[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]/i,token:"keyword",next:"commandArgs"},{regex:/[s\u017F]top/i,token:"keyword",next:"commandDone"},{regex:/[s\u017F]tart[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|unloc[k\u212A][\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]/i,token:"keyword",next:"startUnlock"},{regex:/infinity(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+|eternity(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+|reality(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+|pau[s\u017F]e(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+|re[s\u017F]tart(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+/i,token:"error",next:"commandDone"},{regex:/infinity|eternity|reality/i,token:"keyword",next:"prestige"},{regex:/pau[s\u017F]e|re[s\u017F]tart/i,token:"keyword",next:"commandDone"},{regex:/\}/i,dedent:!0},{regex:/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]/i,token:"error",next:"commandDone"}],studiesArgs:[qn,{sol:!0,next:"start"},{regex:/load([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+|$)/i,token:"variable-2",next:"studiesLoad"},{regex:/re[s\u017F]pec/i,token:"variable-2",next:"commandDone"},{regex:/purcha[s\u017F]e/i,token:"variable-2",next:"studiesList"},{regex:/nowait([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+|$)/i,token:"property"}],studiesList:[qn,{sol:!0,next:"start"},{regex:/(antimatter|infinity|time)(?=[\t-\r ,\|\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"number"},{regex:/(active|pa[s\u017F][s\u017F]ive|idle)(?=[\t-\r ,\|\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"number"},{regex:/(light|dar[k\u212A])(?=[\t-\r ,\|\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"number"},{regex:/([1-9][0-9]+)(?=[\t-\r !,\x2D\|\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"number"},{regex:/[A-Z_a-z][0-9A-Z_a-z]*/,token:"variable",next:"commandDone"},{regex:/!$/i,token:"variable-2"},{regex:/([1-9]|1[0-2])(?=!|$)/i,token:"number"}],studiesLoad:[qn,{sol:!0,next:"start"},{regex:/id([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+|$)/i,token:"variable-2",next:"studiesLoadId"},{regex:/name([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+|$)/i,token:"variable-2",next:"studiesLoadPreset"},{regex:/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+/i,token:"error"}],studiesLoadId:[qn,{sol:!0,next:"start"},{regex:/[0-9]/i,token:"qualifier",next:"commandDone"}],studiesLoadPreset:[qn,{sol:!0,next:"start"},{regex:/(\/(?!\/)|(?:(?![\t-\r #\/\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF])[\s\S]))+/i,token:"qualifier",next:"commandDone"}],prestige:[qn,{sol:!0,next:"start"},{regex:/nowait([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"property"},{regex:/re[s\u017F]pec/i,token:"variable-2"}],commandDone:[qn,{sol:!0,next:"start"},{regex:/\}/i,dedent:!0},{regex:/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+/i,token:"error"}],startUnlock:[qn,{sol:!0,next:"start"},{regex:/ec[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]?(1[0-2]|[1-9])|dilation/i,token:"variable-2",next:"commandDone"},{regex:/nowait([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"property"}],commandArgs:[qn,{sol:!0,next:"start"},{regex:/<=|>=|<|>/i,token:"operator"},{regex:/nowait([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"property"},{regex:/"(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*"/i,token:"string",next:"commandDone"},{regex:/'(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*'/i,token:"string",next:"commandDone"},{regex:/(on|off|bh1|bh2|dilation|load|re[s\u017F]pec)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"variable-2"},{regex:/(eternity|reality|u[s\u017F]e)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"variable-2"},{regex:/(antimatter|infinity|time)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$|(?=,))/i,token:"variable-2"},{regex:/(active|pa[s\u017F][s\u017F]ive|idle)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$|(?=,))/i,token:"variable-2"},{regex:/(light|dar[k\u212A])([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$|(?=,))/i,token:"variable-2"},{regex:/x[\t ]+highe[s\u017F]t([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"variable-2"},{regex:/pending[\t ]+(completion[s\u017F]|ip|ep|tp|rm|glyph[\t ]+level)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"variable-2"},{regex:/total[\t ]+(completion[s\u017F]|tt|[s\u017F]pace theorem[s\u017F])([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"variable-2"},{regex:/filter[\t ]+[s\u017F]core/i,token:"variable-2"},{regex:/ec(1[0-2]|[1-9])[\t ]+completion[s\u017F]([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"variable-2"},{regex:/(am|ip|ep|all)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"variable-2"},{regex:/(rm|rg|dt|tp|tt|[s\u017F]pace theorem[s\u017F]|(ban[k\u212A]ed )?infinitie[s\u017F]|eternitie[s\u017F]|realitie[s\u017F]|rep(licanti)?)([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]|$)/i,token:"variable-2"},{regex:/ [s\u017F]ec(ond[s\u017F] ?) ?| min(ute[s\u017F] ?) ?| hour[s\u017F] ?/i,token:"variable-2"},{regex:/([0-9]+:[0-5][0-9]:[0-5][0-9]|[0-5]?[0-9]:[0-5][0-9]|t[1-4])/i,token:"number"},{regex:/\x2D?(0|[1-9][0-9]*)(\.[0-9]+)?([Ee][\+\x2D]?[0-9]+)?/i,token:"number"},{regex:/[A-Z_a-z][0-9A-Z_a-z]*/,token:"variable"},{regex:/\{/i,indent:!0,next:"commandDone"},{regex:/\}/i,dedent:!0}],meta:{lineComment:"//",electricChars:"}"}});const Vn=Object.freeze({NEXT_INSTRUCTION:0,NEXT_TICK_SAME_INSTRUCTION:1,NEXT_TICK_NEXT_INSTRUCTION:2,SAME_INSTRUCTION:3,SKIP_INSTRUCTION:4,HALT:5,RESTART:6}),Yn=Object.freeze({PAUSE:1,RUN:2,SINGLE_STEP:3}),Wn={NUMBER:{id:0,name:"number"},STUDIES:{id:1,name:"studies"},DURATION:{id:2,name:"duration"},UNKNOWN:{id:-1,name:"unknown"}},jn=Object.freeze({TEXT:0,BLOCK:1});class Xn{constructor(e){this._stackIndex=e,this._commandIndex=0}initializeNew(e){this._commands=e,this._commandIndex=0,this.persistent={lineNumber:e[0].lineNumber,commandState:null}}get commandIndex(){return this._commandIndex}set commandIndex(e){this._commandIndex=e,this.lineNumber=this._commands[e].lineNumber}get lineNumber(){return this.persistent.lineNumber}set lineNumber(e){this.persistent.lineNumber=e}get commandState(){return this.persistent.commandState}set commandState(e){this.persistent.commandState=e}get persistent(){return player.reality.automator.state.stack[this._stackIndex]}set persistent(e){player.reality.automator.state.stack[this._stackIndex]=e}get commands(){return this._commands}set commands(e){this._commands=e}}class zn{constructor(e){this._id=e,this.compile()}get id(){return this._id}get name(){return this.persistent.name}set name(e){this.persistent.name=e}get persistent(){return player.reality.automator.scripts[this._id]}get commands(){return this._compiled}get text(){return this.persistent.content}save(e){Kn.isWithinLimit()&&(this.persistent.content=e),this.compile()}compile(){this._compiled=On(this.text).compiled}static create(e,t=""){const i=Object.keys(player.reality.automator.scripts),a=i.findIndex(((e,t)=>t+1!==Number(e)));let n=1+(-1===a?i.length:a);return player.reality.automator.scripts&&0!==n||(n=1),player.reality.automator.scripts[n]={id:n,name:e,content:t},new zn(n)}}const Kn={lastECCompletionCount:0,isWaiting:!1,waitStart:0,lastEvent:0,eventLog:[],isEditorFullscreen:!1,needsRecompile:!0,cachedErrors:0,blockTemplates:[],undoBuffer:[],redoBuffer:[],charsSinceLastUndoState:0,MAX_ALLOWED_SCRIPT_CHARACTERS:1e4,MAX_ALLOWED_TOTAL_CHARACTERS:6e4,MAX_ALLOWED_SCRIPT_NAME_LENGTH:15,MAX_ALLOWED_SCRIPT_COUNT:20,MAX_ALLOWED_CONSTANT_NAME_LENGTH:20,MAX_ALLOWED_CONSTANT_VALUE_LENGTH:250,MAX_ALLOWED_CONSTANT_COUNT:30,MIN_CHARS_BETWEEN_UNDOS:10,MAX_UNDO_ENTRIES:30,scriptIndex(){return player.reality.automator.state.editorScript},currentScriptName(){return player.reality.automator.scripts[this.scriptIndex()].name},currentScriptText(e){var t;const i=e||this.scriptIndex();return null===(t=player.reality.automator.scripts[i])||void 0===t?void 0:t.content},createNewScript(e,t){const i=zn.create(t,e);GameUI.notify.automator(`Imported Script "${t}"`),player.reality.automator.state.editorScript=i.id,Kn.clearUndoData(),EventHub.dispatch(GAME_EVENT.AUTOMATOR_SAVE_CHANGED)},recalculateErrors(){const e=this.currentScriptText();this.cachedErrors=On(e).errors,this.cachedErrors.sort(((e,t)=>e.startLine-t.startLine))},currentErrors(){return this.needsRecompile&&(this.recalculateErrors(),this.needsRecompile=!1),this.cachedErrors},logCommandEvent(e,t){const i=Date.now();this.eventLog.push({message:e.replaceAll(/[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]?\n[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+/g," "),line:es.translateLineNumber(t),thisReality:Time.thisRealityRealTime.totalSeconds,timestamp:i,timegap:i-this.lastEvent}),this.lastEvent=i,this.eventLog.length>player.options.automatorEvents.maxEntries&&this.eventLog.shift()},clearEventLog(){this.eventLog=[],this.lastEvent=0},singleScriptCharacters(){var e,t;return player.reality.automator.type===jn.TEXT?null!==(e=null===(t=AutomatorTextUI.editor)||void 0===t?void 0:t.getDoc().getValue().length)&&void 0!==e?e:0:BlockAutomator.parseLines(BlockAutomator.lines).join("\n").length},totalScriptCharacters(){return Object.values(player.reality.automator.scripts).filter((e=>e.id!==this.scriptIndex())).map((e=>e.content.length)).reduce(((e,t)=>e+t),0)+this.singleScriptCharacters()},isWithinLimit(){return this.singleScriptCharacters()<=this.MAX_ALLOWED_SCRIPT_CHARACTERS&&this.totalScriptCharacters()<=this.MAX_ALLOWED_TOTAL_CHARACTERS},clearUndoData(){this.undoBuffer=[],this.redoBuffer=[],this.charsSinceLastUndoState=0},pushUndoData(e,t){this.charsSinceLastUndoState+=t;const i=this.charsSinceLastUndoState<=this.MIN_CHARS_BETWEEN_UNDOS;i&&0!==this.undoBuffer.length||(this.undoBuffer[this.undoBuffer.length-1]!==e&&this.undoBuffer.push(e),this.undoBuffer.length>this.MAX_UNDO_ENTRIES&&this.undoBuffer.shift(),this.charsSinceLastUndoState=0)},pushRedoData(e){this.redoBuffer[this.redoBuffer.length-1]!==e&&this.redoBuffer.push(e)},undoScriptEdit(){if(0===this.undoBuffer.length||"Automator"!==Tabs.current._currentSubtab.name)return;const e=this.undoBuffer.pop();this.pushRedoData(this.currentScriptText()),player.reality.automator.scripts[this.scriptIndex()].content=e,es.saveScript(this.scriptIndex(),e),player.reality.automator.type===jn.TEXT?AutomatorTextUI.editor.setValue(e):BlockAutomator.updateEditor(e)},redoScriptEdit(){if(0===this.redoBuffer.length||"Automator"!==Tabs.current._currentSubtab.name)return;const e=this.redoBuffer.pop();this.pushUndoData(this.currentScriptText(),2*this.MIN_CHARS_BETWEEN_UNDOS),player.reality.automator.scripts[this.scriptIndex()].content=e,es.saveScript(this.scriptIndex(),e),player.reality.automator.type===jn.TEXT?AutomatorTextUI.editor.setValue(e):BlockAutomator.updateEditor(e)}},Zn={Active:"active",Event:"event",Error:"error"},Qn={lines:{active:-1,event:-1,error:-1},updateHighlightedLine(e,t){if(player.reality.automator.type===jn.TEXT&&-1!==e){if(!AutomatorTextUI.editor)return;this.removeHighlightedTextLine(t),this.addHighlightedTextLine(e,t)}else this.lines[t]=e},removeHighlightedTextLine(e){const t=this.lines[e]-1;AutomatorTextUI.editor.removeLineClass(t,"background",`c-automator-editor__${e}-line`),AutomatorTextUI.editor.removeLineClass(t,"gutter",`c-automator-editor__${e}-line-gutter`),this.lines[e]=-1},addHighlightedTextLine(e,t){AutomatorTextUI.editor.addLineClass(e-1,"background",`c-automator-editor__${t}-line`),AutomatorTextUI.editor.addLineClass(e-1,"gutter",`c-automator-editor__${t}-line-gutter`),this.lines[t]=e},clearAllHighlightedLines(){for(const e of Object.values(Zn)){if(player.reality.automator.type===jn.TEXT&&AutomatorTextUI.editor)for(let t=0;tt.scrollTop+n&&t.scrollTo(0,s-n),st.id===e));return t[parseInt(Object.keys(t)[i],10)]},get currentRunningScript(){return this.findRawScriptObject(this.state.topLevelScript)},get currentEditingScript(){return this.findRawScriptObject(player.reality.automator.state.editorScript)},get scriptName(){var e,t;return null!==(e=null===(t=this.currentRunningScript)||void 0===t?void 0:t.name)&&void 0!==e?e:""},hasDuplicateName(e){const t=Object.values(player.reality.automator.scripts).map((e=>e.name));return t.filter((t=>t===e)).length>1},translateLineNumber(e){return player.reality.automator.type===jn.TEXT?e:BlockAutomator.lineNumber(e)},get currentLineNumber(){return this.stack.top?this.translateLineNumber(this.stack.top.lineNumber):-1},get currentInterval(){return Math.clampMin(500*Math.pow(.994,Currency.realities.value),1)},get currentRawText(){var e,t;return null!==(e=null===(t=this.currentRunningScript)||void 0===t?void 0:t.content)&&void 0!==e?e:""},get currentScriptLength(){return this.currentRawText.split("\n").length},getUsedPresets(e){const t=this.findRawScriptObject(e);if(!t)return null;const i=new Set,a=t.content.split("\n");for(const s of a){const e=s.match(/[s\u017F]tudie[s\u017F]( nowait)? load id ([1-6])/i);e&&i.add(Number(e[2])-1);const t=s.match(/[s\u017F]tudie[s\u017F]( nowait)? load name ((?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)/i);if(t){const e=player.timestudy.presets.findIndex((e=>e.name===t[2]));-1!==e&&i.add(e)}}const n=Array.from(i);return n.sort(),n},getUsedConstants(e){const t=this.findRawScriptObject(e);if(!t)return null;const i=new Set,a=t.content.split("\n");for(const s of a){const e=Object.keys(player.reality.automator.constants);for(const t of e)s.match(`(?=Kn.MAX_ALLOWED_CONSTANT_COUNT||(player.reality.automator.constants[e]=t,player.reality.automator.constantSortOrder.push(e),EventHub.dispatch(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED))},modifyConstant(e,t){Object.keys(player.reality.automator.constants).includes(e)?(player.reality.automator.constants[e]=t,EventHub.dispatch(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED)):this.addConstant(e,t)},renameConstant(e,t){const i=player.reality.automator.constants[e];player.reality.automator.constants[t]=i,delete player.reality.automator.constants[e];const a=player.reality.automator.constantSortOrder.indexOf(e);-1!==a&&(player.reality.automator.constantSortOrder[a]=t),EventHub.dispatch(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED)},deleteConstant(e){delete player.reality.automator.constants[e];const t=player.reality.automator.constantSortOrder.indexOf(e);t>-1&&player.reality.automator.constantSortOrder.splice(t,1),EventHub.dispatch(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED)},serializeAutomatorData(e){const t=e=>`0000${e}`.slice(-5),i=[];for(const a of e)i.push(`${t(a.length)}${a}`);return i.join("")},deserializeAutomatorData(e){if(""===e)throw new Error("Attempted deserialization of empty string");const t=[];let i=e;while(i.length>0){const e=Number(i.slice(0,5));if(i=i.substr(5),Number.isNaN(e)||i.lengthe.name===t[2]));-1!==e&&a.add(e)}const i=Object.keys(player.reality.automator.constants);for(const a of i)d.match(`\\s${a}(\\s|$)`)&&n.add(a)}const r=[];for(const d of Array.from(a)){var o,l;const e=player.timestudy.presets[d];r.push(`${d}:${null!==(o=null===e||void 0===e?void 0:e.name)&&void 0!==o?o:""}:${null!==(l=null===e||void 0===e?void 0:e.studies)&&void 0!==l?l:""}`)}const c=[];for(const d of Array.from(n))c.push(`${d}:${player.reality.automator.constants[d]}`);const u=this.serializeAutomatorData([t.name,r.join("*"),c.join("*"),i]);return GameSaveSerializer.encodeText(u,"automator data")},parseFullScriptData(e){let t,i;try{t=GameSaveSerializer.decodeText(e,"automator data"),i=this.deserializeAutomatorData(t)}catch(o){return null}if(4!==i.length)return null;const a=i[1],n=[];if(a)for(const l of a.split("*")){const e=l.split(":");n.push({id:Number(e[0]),name:e[1],studies:e[2]})}n.sort(((e,t)=>e.id-t.id));const s=i[2],r=[];for(const l of s.split("*")){if(""===l)continue;const e=l.split(":");r.push({key:e[0],value:e[1]})}return{name:i[0],presets:n,constants:r,content:i[3]}},importFullScriptData(e,t){const i=this.parseFullScriptData(e);if(Kn.createNewScript(i.content,i.name),!t.presets)for(const a of i.presets)player.timestudy.presets[a.id]={name:a.name,studies:a.studies};if(!t.constants)for(const a of i.constants)this.modifyConstant(a.key,a.value);this.initializeFromSave()},update(e){if(!this.isOn)return;let t;switch(this.mode){case Yn.PAUSE:return;case Yn.SINGLE_STEP:return this.singleStep(),t=es.stack.top,t&&this.state.followExecution&&Jn.scrollToRawLine(t.lineNumber),void(this.state.mode=Yn.PAUSE);case Yn.RUN:break;default:return void this.stop()}player.reality.automator.execTimer+=e;const i=Math.min(Math.floor(player.reality.automator.execTimer/this.currentInterval),this.MAX_COMMANDS_PER_UPDATE);player.reality.automator.execTimer-=i*this.currentInterval;for(let a=0;a=e.commands.length-1){if(this.stack.pop(),this.stack.isEmpty){if(this.state.repeat)return this.start(this.state.topLevelScript,Yn.RUN,!1),!1;this.stop()}else if(this.stack.top.commandState&&this.stack.top.commandState.advanceOnPop)return Kn.logCommandEvent("Exiting IF block",this.stack.top.commandState.ifEndLine),this.nextCommand()}else e.commandState=null,++e.commandIndex;return!0},push(e){0!==e.length&&this.stack.push(e)},findScript(e){return this._scripts.find((t=>t.id===e))},_createDefaultScript(){const e=zn.create("New Script");return this._scripts=[e],this.state.topLevelScript=e.id,e.id},initializeFromSave(){const e=Object.keys(player.reality.automator.scripts).map((e=>parseInt(e,10)));0===e.length?e.push(this._createDefaultScript()):this._scripts=e.map((e=>new zn(e))),e.includes(this.state.topLevelScript)||(this.state.topLevelScript=e[0]);const t=this.findScript(this.state.topLevelScript);if(t.commands){const e=t.commands;this.stack.initializeFromSave(e)||this.reset(e)}else this.stack.clear()},saveScript(e,t){const i=this.findScript(e);if(!i)return;const a=i.persistent.content,n=Math.abs(a.length-t.length);Kn.pushUndoData(a,n),i.save(t),e===this.state.topLevelScript&&this.stop()},newScript(){const e=es._scripts.map((e=>e.name));let t;if(e.includes("New Script")){let i=2;while(e.includes(`New Script (${i})`))i++;t=zn.create(`New Script (${i})`)}else t=zn.create("New Script");return this._scripts.push(t),t},deleteScript(e){const t=Object.values(player.reality.automator.scripts).findIndex((t=>t.id===e));delete player.reality.automator.scripts[parseInt(Object.keys(player.reality.automator.scripts)[t],10)];const i=this._scripts.findIndex((t=>t.id===e));this._scripts.splice(i,1),0===this._scripts.length&&(this._createDefaultScript(),this.clearEditor()),e===this.state.topLevelScript&&(this.stop(),this.state.topLevelScript=this._scripts[0].id),EventHub.dispatch(GAME_EVENT.AUTOMATOR_SAVE_CHANGED)},toggleRepeat(){this.state.repeat=!this.state.repeat},toggleForceRestart(){this.state.forceRestart=!this.state.forceRestart},toggleFollowExecution(){this.state.followExecution=!this.state.followExecution,this.jumpToActiveLine()},jumpToActiveLine(){const e=this.state,t=e.topLevelScript===e.editorScript;t&&this.isRunning&&e.followExecution&&Jn.scrollToRawLine(es.stack.top.lineNumber)},reset(e){this.stack.clear(),this.push(e)},stop(){this.stack.clear(),this.state.mode=Yn.PAUSE,this.hasJustCompleted=!0,Qn.clearAllHighlightedLines()},pause(){this.state.mode=Yn.PAUSE},start(e=this.state.topLevelScript,t=Yn.RUN,i=!0){if(!Player.automatorUnlocked)return;this.hasJustCompleted=!1,this.state.topLevelScript=e,player.reality.automator.execTimer=0;const a=this.findScript(e);a&&(i&&a.compile(),a.commands&&(this.reset(a.commands),this.state.mode=t),Kn.isWaiting=!1,player.options.automatorEvents.clearOnRestart&&Kn.clearEventLog())},restart(){this.start(this.state.topLevelScript,Yn.RUN),this.stack.isEmpty||this.reset(this.stack._data[0].commands)},changeModes(e){if(Tutorial.moveOn(TUTORIAL_STATE.AUTOMATOR),player.reality.automator.type===jn.BLOCK)BlockAutomator.parseTextFromBlocks(),player.reality.automator.type=jn.TEXT;else{const t=AutomatorTextUI.editor.getDoc().getValue();BlockAutomator.updateEditor(t),es.saveScript(e,t),player.reality.automator.type=jn.BLOCK}Qn.clearAllHighlightedLines(),EventHub.ui.dispatch(GAME_EVENT.AUTOMATOR_TYPE_CHANGED)},clearEditor(){player.reality.automator.type===jn.BLOCK?BlockAutomator.clearEditor():AutomatorTextUI.clearEditor()},stack:{_data:[],push(e){const t=new Xn(this.length);t.initializeNew(e),this._data.push(t)},pop(){0!==this._data.length&&(player.reality.automator.state.stack.pop(),this._data.pop())},clear(){this._data=[],player.reality.automator.state.stack.length=0},initializeFromSave(e){this._data=[];const t=player.reality.automator.state.stack;let i=e;for(let a=0;at.lineNumber===e.lineNumber));if(-1===s)return!1;if(n.commandIndex=s,this._data.push(n),a!==t.length-1){if(void 0===i[s].blockCommands)return!1;i=i[s].blockCommands}}return!0},get top(){return this._data[this.length-1]},get length(){if(this._data.length!==player.reality.automator.state.stack.length)throw new Error("Inconsistent stack length");return this._data.length},get isEmpty(){return 0===this._data.length}}},ts={get perks(){return Perks.all.filter((e=>e.automatorPoints))},get upgrades(){return RealityUpgrades.all.filter((e=>e.automatorPoints))},get pointsFromPerks(){return this.perks.filter((e=>e.isBought)).map((e=>e.automatorPoints)).sum()},get pointsFromUpgrades(){return this.upgrades.filter((e=>e.isBought)).map((e=>e.automatorPoints)).sum()},get pointsFromOther(){return GameDatabase.reality.automator.otherAutomatorPoints.map((e=>e.automatorPoints())).sum()},get totalPoints(){return this.pointsFromPerks+this.pointsFromUpgrades+this.pointsFromOther},get pointsForAutomator(){return 100}},is={name:"AutomatorBlockSingleInput",props:{constant:{type:String,required:!1,default:""},block:{type:Object,required:!0},blockTarget:{type:String,required:!1,default:""},updateFunction:{type:Function,required:!0},initialSelection:{type:String,required:!1,default:""},patterns:{type:Array,required:!1,default:()=>[]},recursive:{type:Boolean,required:!1,default:!1},currentPath:{type:String,required:!1,default:""}},data(){return{b:{},suppressTooltip:!1,errors:[],hasError:!1,isTextInput:!1,dropdownOptions:[],dropdownSelection:"",textContents:"",pathRef:{},currentNodeOnPath:"",unknownNext:!1,nextNodeCount:0,lineNumber:0,scriptID:0}},computed:{displayedConstant(){return this.constant?"BLOB"===this.constant?"":this.constant:1!==this.dropdownOptions.length||this.isBoolTarget||this.isTextInput?"":this.dropdownOptions[0]},isBoolTarget(){return"nowait"===this.blockTarget||"respec"===this.blockTarget},nextInputKey(){return this.block.targets[this.currentPath.length+1]},nextInputValue(){const e=this.block.targets,t=e?this.block[this.nextInputKey]:"";return t?`${t}`:""},hasLongTextInput(){return"NOTIFY"===this.block.cmd||"COMMENT"===this.block.cmd}},created(){if(this.scriptID=player.reality.automator.state.editorScript,this.b=this.block,this.lineNumber=BlockAutomator.lineNumber(BlockAutomator._idArray.indexOf(this.block.id)+1),BlockAutomator.updateIdArray(),!this.constant){if(this.isBoolTarget)return this.dropdownOptions=[this.blockTarget.toUpperCase()],void(this.dropdownSelection=this.block[this.blockTarget]?this.blockTarget.toUpperCase():"");if(this.recursive){const e=this.patterns.filter((e=>e.startsWith(this.currentPath)&&e.length>this.currentPath.length)).map((e=>e.charAt(this.currentPath.length)));for(const t of e){if(this.pathRef[t])continue;const e=this.block[t];this.pathRef[t]=e,this.dropdownOptions.push(...e)}this.calculatePath()}this.dropdownOptions.includes(this.initialSelection)?this.dropdownSelection=this.initialSelection:this.initialSelection&&(this.isTextInput=!0,this.textContents=this.initialSelection),1===this.dropdownOptions.length&&this.dropdownOptions[0].startsWith("*")&&(this.isTextInput=!0,this.textContents=this.initialSelection),this.recalculateErrorCount(),this.suppressTooltip=!0,BlockAutomator.parseTextFromBlocks()}},destroyed(){if(player.reality.automator.type===AUTOMATOR_TYPE.TEXT||"automator"!==Tabs.current._currentSubtab.key||this.scriptID!==player.reality.automator.state.editorScript)return;this.recalculateErrorCount();const e=BlockAutomator.lineNumber(BlockAutomator._idArray.indexOf(this.block.id)+1);if(this.lineNumber!==e){const e=[];for(const t of AutomatorData.cachedErrors)t.startLine!==this.lineNumber&&e.push(t);return e.sort(((e,t)=>e.startLine-t.startLine)),void(AutomatorData.cachedErrors=e)}this.recalculateErrorCount(),BlockAutomator.parseTextFromBlocks()},methods:{update(){this.errors=AutomatorData.cachedErrors,this.hasError=this.errors.some((e=>e.startLine===this.lineNumber)),this.dropdownSelection.startsWith("*")&&(this.isTextInput=!0),this.calculatePath()},calculatePath(){this.currentNodeOnPath=" ";for(const t of Object.keys(this.pathRef)){const e=this.pathRef[t].some((e=>e.startsWith("*")))&&this.isTextInput;(this.pathRef[t].includes(this.dropdownSelection)||e)&&(this.currentNodeOnPath=t)}const e=this.currentPath+this.currentNodeOnPath;this.nextNodeCount=this.patterns.filter((t=>t.length>e.length&&t.startsWith(e))).length,this.unknownNext=this.nextNodeCount>1||""===this.dropdownSelection&&!this.isTextInput},validateInput(){let e,t;if(this.b.nest){const i=Object.assign({},this.b);i.nest=[],t=BlockAutomator.parseLines([i]),e=$n(t.join("\n"))}else t=BlockAutomator.parseLines([this.b]),e=$n(t[0]);if("undefined"===t[0])return;const i=[],a=BlockAutomator._idArray.filter((e=>e)).length;for(const n of AutomatorData.cachedErrors)n.startLine!==this.lineNumber&&n.startLine0){const t=e.errors[0];t.startLine=this.lineNumber,i.push(t)}i.sort(((e,t)=>e.startLine-t.startLine)),AutomatorData.cachedErrors=i},handleFocus(e){this.suppressTooltip=!e,this.changeBlock()},changeBlock(){if(this.updateFunction(this.block,this.block.id),this.blockTarget){let e;if(e=this.isBoolTarget?""!==this.dropdownSelection:this.isTextInput?this.textContents:this.dropdownSelection,this.block[this.blockTarget]=e,this.calculatePath(),0===this.nextNodeCount&&!this.isBoolTarget){const e=this.block.targets.indexOf(this.blockTarget);for(let t=e+1;te.startLine===this.lineNumber)).info;return e=e.replaceAll("\n","").replace(/Expecting: one of the[s\u017F]e po[s\u017F][s\u017F]ible To[k\u212A]en [s\u017F]equence[s\u017F]:(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*but found: ((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)/i,"Unexpected input format: $1"),{content:`
\n
${e}
\n
`,html:!0,trigger:"manual",show:!0,classes:["c-block-automator-error-container","general-tooltip"]}},textInputClassObject(){return{"o-automator-block-input":!0,"o-long-text-input":this.hasLongTextInput,"l-error-textbox":this.hasError,"c-automator-input-required":!this.hasError}},dropdownClassObject(){return{"o-automator-block-input":!0,"c-automator-input-required":!this.isBoolTarget,"c-automator-input-optional":this.isBoolTarget,"l-error-textbox":this.hasError&&!this.isBoolTarget&&""===this.dropdownSelection}},revertToDropdown(){this.isTextInput=!1,this.dropdownSelection="",this.textContents=""}}},as=is;var ns=(0,X.Z)(as,La,Fa,!1,null,"36c54dc2",null);const ss=ns.exports,rs={name:"AutomatorBlockSingleRow",components:{draggable:Ba(),AutomatorBlockSingleInput:ss},props:{block:{type:Object,required:!0},updateBlock:{type:Function,required:!0},deleteBlock:{type:Function,required:!0}},data(){return{b:{},activeLine:-1,eventLine:-1,errorLine:-1}},computed:{lineNumber(){return BlockAutomator.lineNumberFromBlockID(this.b.id)},isActiveLine(){return this.lineNumber===this.activeLine},isEventLine(){return this.lineNumber===this.eventLine},isErrorLine(){return this.lineNumber===this.errorLine}},created(){this.recalculateErrorCount()},destroyed(){this.recalculateErrorCount()},mounted(){this.b=this.block},methods:{update(){const e=AutomatorHighlighter.lines;this.activeLine=e.active,this.eventLine=e.event,this.errorLine=e.error},parseRequest(){BlockAutomator.parseTextFromBlocks()},deleteBlockFromNest(e){const t=this.b.nest.findIndex((t=>t.id===e));this.b.nest.splice(t,1)},updateBlockFromNest(e,t){this.$set(this.b.nest,this.b.nest.findIndex((e=>e.id===t)),e),this.parseRequest()},removeBlock(e,t){this.deleteBlock(e,t),this.recalculateErrorCount()},recalculateErrorCount(){AutomatorData.recalculateErrors(),AutomatorBackend.currentEditingScript.id===AutomatorBackend.currentRunningScript.id&&AutomatorBackend.stop()},highlightClass(){return{"c-automator-block-row-active":this.isActiveLine,"c-automator-block-row-event":this.isEventLine,"c-automator-block-row-error":this.isErrorLine}},nextSelection(){const e=this.b.targets?this.b[this.b.targets[0]]:"";return e}}},os=rs;var ls=(0,X.Z)(os,Na,Oa,!1,null,"70ff0acc",null);const cs=ls.exports,us={name:"AutomatorBlockEditor",components:{AutomatorBlockSingleRow:cs,draggable:Ba()},computed:{lines:{get(){return this.$viewModel.tabs.reality.automator.lines},set(e){this.$viewModel.tabs.reality.automator.lines=e}},numberOfLines(){return this.lines.reduce(((e,t)=>e+ds.numberOfLinesInBlock(t)),0)}},mounted(){ds.initialize(),AutomatorData.recalculateErrors(),ds.editor.scrollTo(0,ds.previousScrollPosition),ds.gutter.style.bottom=`${ds.editor.scrollTop}px`},methods:{update(){AutomatorBackend.state.followExecution&&AutomatorBackend.jumpToActiveLine();const e=AutomatorBackend.isOn?ds.lineNumberFromBlockID(ds.currentBlockId):-1;AutomatorHighlighter.updateHighlightedLine(e,LineEnum.Active)},setPreviousScroll(){ds.previousScrollPosition=this.$refs.blockEditorElement.scrollTop,ds.gutter.style.bottom=`${ds.editor.scrollTop}px`},parseRequest(){ds.updateIdArray(),AutomatorData.recalculateErrors(),ds.parseTextFromBlocks()},updateBlock(e,t){this.lines[this.lines.findIndex((e=>e.id===t))]=e,this.parseRequest()},deleteBlock(e){const t=this.lines.findIndex((t=>t.id===e));this.lines.splice(t,1),this.parseRequest()}}},ds={editor:null,gutter:null,_idArray:[],initialize(){this.editor=document.getElementsByClassName("c-automator-block-editor")[0],this.gutter=document.getElementsByClassName("c-automator-block-editor--gutter")[0]},get lines(){return ui.view.tabs.reality.automator.lines},set lines(e){ui.view.tabs.reality.automator.lines=e,this.updateIdArray()},get currentBlockId(){return!AutomatorBackend.stack.isEmpty&&this._idArray[AutomatorBackend.stack.top.lineNumber-1]},lineNumber(e){const t=this._idArray.map(((e,t)=>e?-1:t+1)).filter((e=>-1!==e));return e-t.countWhere((t=>t<=e))},lineNumberFromBlockID(e){return this.lineNumber(this._idArray.indexOf(e)+1)},parseTextFromBlocks(e){const t=this.parseLines(ds.lines).join("\n"),i=null!==e&&void 0!==e?e:ui.view.tabs.reality.automator.editorScriptID;AutomatorData.recalculateErrors(),AutomatorBackend.saveScript(i,t)},updateEditor(e){const t=Fn(e).blocks;return this.lines=t,t},hasUnparsableCommands(e){const t=Fn(e);return t.validatedBlocks!==t.visitedBlocks},generateText(e,t=0){let i=`${"\t".repeat(t)}${e.cmd} `;i=i.replace("COMMENT","//").replace("BLOB","blob "),e.canWait&&e.nowait&&(i=i.replace(/((?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)/,"$1 NOWAIT")),e.respec&&(i+=" RESPEC");const a=["genericInput1","compOperator","genericInput2","singleSelectionInput","singleTextInput"];for(const n of a)e[n]&&(i+=` ${e[n]}`);return"IF"!==e.cmd&&"WHILE"!==e.cmd&&"UNTIL"!==e.cmd||(i+=" {"),i.replace(" "," ")},parseLines(e,t=0){const i=[];for(let a=0;ae+this.numberOfLinesInBlock(t)),1),2):1},clearEditor(){setTimeout((()=>this.lines=[]),0)},previousScrollPosition:0},hs=us;var ms=(0,X.Z)(hs,Pa,Ga,!1,null,"0f454411",null);const ps=ms.exports;var ys=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("draggable",{staticClass:"o-drag-cancel-region",attrs:{group:"code-blocks","ghost-class":"null-block",draggable:".draggable-blocks"}},[i("p",[e._v(" Drag and drop these blocks to the area on the left! The blocks have names matching the commands in the reference page, but may change appearance after being placed to describe what they do in a more natural-sounding manner. If a block changes in this way, the alternate text will be shown as a tooltip when going to drag it over. ")]),i("br"),i("p",[e._v(" Inputs with a "),i("span",{staticClass:"c-automator-input-optional"},[e._v("brown")]),e._v(" color are optional, while inputs with a "),i("span",{staticClass:"c-automator-input-required"},[e._v("teal")]),e._v(" color are required. "),i("span",{staticClass:"c-automator-block-row-error"},[e._v("Red")]),e._v(" inputs are causing errors and must be changed before the script can be run. For more details, check the Scripting Information pane. ")]),i("p",[e._v(" Options in dropdown menus which start with a * will be replaced with a text box. This can be turned back into a dropdown by clicking the "),i("i",{staticClass:"fa-solid fa-circle-xmark"}),e._v(" on the right side of the text box. ")]),i("draggable",{staticClass:"block-container",attrs:{list:e.blocks,group:{name:"code-blocks",pull:"clone",put:!1},sort:!1,clone:e.clone}},e._l(e.blocks,(function(t){return i("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.alias,expression:"block.alias"}],key:t.id,staticClass:"o-automator-command o-automator-block-list draggable-blocks"},[e._v(" "+e._s(t.cmd)+" ")])})),0),i("p",[e._v(" Note: Blocks and their contents count towards the character limits as if the command was typed in text mode. ")])],1)},fs=[];const gs={name:"AutomatorBlocks",components:{draggable:Ba()},data(){return{allBlocks:Ts.filter((e=>!ws.includes(e.cmd))),blocks:[]}},methods:{update(){this.blocks=this.allBlocks.filter((e=>{var t,i;return null===(t=null===(i=e.isUnlocked)||void 0===i?void 0:i.call(e))||void 0===t||t}))},clone(e){const t=(0,B.Z)((0,B.Z)({},e),{},{id:UIID.next()});return e.nested&&!e.nest&&(t.nest=[]),AutomatorData.recalculateErrors(),t}}},vs=["<",">",">=","<="],bs=["AM","IP","EP","RM","INFINITIES","BANKED INFINITIES","ETERNITIES","REALITIES","PENDING IP","PENDING EP","PENDING TP","PENDING RM","PENDING GLYPH LEVEL","DT","TP","RG","REP","TT","TOTAL TT","TOTAL COMPLETIONS","PENDING COMPLETIONS","EC1 COMPLETIONS","EC2 COMPLETIONS","EC3 COMPLETIONS","EC4 COMPLETIONS","EC5 COMPLETIONS","EC6 COMPLETIONS","EC7 COMPLETIONS","EC8 COMPLETIONS","EC9 COMPLETIONS","EC10 COMPLETIONS","EC11 COMPLETIONS","EC12 COMPLETIONS"],Es=["INFINITY","ETERNITY","REALITY"],Ts=[{cmd:"STUDIES RESPEC",alias:"RESPEC TIME STUDIES"},{cmd:"STUDIES LOAD",alias:"LOAD STUDY PRESET",allowedPatterns:["AB"],A:["ID","NAME"],B:["*"],targets:["singleSelectionInput","singleTextInput"],canWait:!0},{cmd:"STUDIES PURCHASE",alias:"PURCHASE STUDIES",allowedPatterns:["A"],A:["*"],targets:["singleTextInput"],canWait:!0},{cmd:"INFINITY",canWait:!0},{cmd:"ETERNITY",canRespec:!0,canWait:!0},{cmd:"REALITY",canRespec:!0,canWait:!0,isUnlocked:()=>RealityUpgrade(25).isBought},{cmd:"UNLOCK",allowedPatterns:["AB","C"],A:["EC"],B:["*"],C:["DILATION"],targets:["singleSelectionInput","singleTextInput"],canWait:!0},{cmd:"START",allowedPatterns:["AB","C"],A:["EC"],B:["*"],C:["DILATION"],targets:["singleSelectionInput","singleTextInput"]},{cmd:"AUTO",alias:"CHANGE AUTOBUYER SETTING",allowedPatterns:["AB"],A:Es,B:["ON","OFF","* AUTOBUYER SETTING"],targets:["singleSelectionInput","singleTextInput"]},{cmd:"BLACK HOLE",alias:"TURN BLACK HOLE",allowedPatterns:["A"],A:["ON","OFF"],targets:["singleSelectionInput"],isUnlocked:()=>BlackHole(1).isUnlocked},{cmd:"STORE GAME TIME",alias:"SET GAME TIME STORAGE TO",allowedPatterns:["A"],A:["ON","OFF","USE"],targets:["singleSelectionInput"],isUnlocked:()=>Enslaved.isUnlocked},{cmd:"NOTIFY",alias:"GAME NOTIFICATION:",allowedPatterns:["A"],A:["*"],targets:["singleTextInput"]},{cmd:"COMMENT",alias:"NOTE:",allowedPatterns:["A"],A:["*"],targets:["singleTextInput"]},{cmd:"WAIT",alias:"PAUSE AUTOMATOR UNTIL",allowedPatterns:["A","DE","BCB"],A:Es,B:[...bs,"* SPECIFIED CONSTANT"],C:vs,D:["BLACK HOLE"],E:["OFF","BH1","BH2"],targets:["genericInput1","compOperator","genericInput2"]},{cmd:"PAUSE",alias:"PAUSE AUTOMATOR FOR",allowedPatterns:["A"],A:["*"],targets:["singleTextInput"]},{cmd:"IF",alias:"ENTER BLOCK IF",allowedPatterns:["ABA"],A:[...bs,"* SPECIFIED CONSTANT"],B:vs,targets:["genericInput1","compOperator","genericInput2"],nested:!0},{cmd:"UNTIL",alias:"REPEAT BLOCK UNTIL",allowedPatterns:["A","BCB"],A:Es,B:[...bs,"* SPECIFIED CONSTANT"],C:vs,targets:["genericInput1","compOperator","genericInput2"],nested:!0},{cmd:"WHILE",alias:"REPEAT BLOCK WHILE",allowedPatterns:["ABA"],A:[...bs,"* SPECIFIED CONSTANT"],B:vs,targets:["genericInput1","compOperator","genericInput2"],nested:!0},{cmd:"BLOB"},{cmd:"STOP",alias:"STOP EXECUTION"}],ws=["BLOB"],ks=Ts.mapToObject((e=>e.cmd),(e=>e)),Cs=gs;var As=(0,X.Z)(Cs,ys,fs,!1,null,"7cd77792",null);const _s=As.exports;var Ss=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{ref:"container",staticClass:"c-automator-editor l-automator-editor l-automator-pane__content"})},Ds=[];const Rs={name:"AutomatorTextEditor",props:{currentScriptId:{type:[Number,String],required:!0}},data(){return{markedLineNumber:0,unclearedLines:!1,isActiveScript:!1}},computed:{UI(){return Ms.initialize(),Ms},fullScreen(){return this.$viewModel.tabs.reality.automator.fullScreen}},watch:{currentScriptId:{handler(e,t){this.unmarkActiveLine();const i=player.reality.automator.scripts;this.UI.documents[e]&&this.UI.documents[e].getValue()===i[e].content||(this.UI.documents[e]=CodeMirror.Doc(i[e].content,"automato")),this.UI.editor.getDoc()!==this.UI.documents[e]&&this.UI.editor.swapDoc(this.UI.documents[e]),void 0!==this.UI.documents[t]&&void 0===i[t]&&delete this.UI.documents[t]},immediate:!0},fullScreen(){this.$nextTick((()=>this.UI.editor.refresh()))}},created(){Ms.initialize(),this.on$(GAME_EVENT.GAME_LOAD,(()=>this.onGameLoad())),this.on$(GAME_EVENT.AUTOMATOR_SAVE_CHANGED,(()=>this.onGameLoad()))},mounted(){this.$refs.container.appendChild(this.UI.container),this.$nextTick((()=>{this.UI.editor.refresh(),this.UI.editor.performLint(),this.UI.editor.scrollTo(null,Ms.savedVertPos)}))},beforeDestroy(){AutomatorHighlighter.clearAllHighlightedLines(),Ms.savedVertPos=Ms.editor.doc.scrollTop,this.$refs.container.removeChild(this.UI.container)},methods:{update(){AutomatorBackend.jumpToActiveLine(),this.unclearedLines&&!AutomatorBackend.isOn&&this.clearAllActiveLines(),AutomatorBackend.isOn?this.setActiveState(`${AutomatorBackend.state.topLevelScript}`,AutomatorBackend.stack.top.lineNumber):this.setActiveState("",-1)},onGameLoad(){this.UI.documents={}},unmarkActiveLine(){AutomatorHighlighter.updateHighlightedLine(-1,LineEnum.Active)},markActiveLine(e){AutomatorHighlighter.updateHighlightedLine(e,LineEnum.Active),this.unclearedLines=!0},clearAllActiveLines(){AutomatorHighlighter.clearAllHighlightedLines(),this.unclearedLines=!1},setActiveState(e,t){`${this.currentScriptId}`===e?this.markActiveLine(t):this.unmarkActiveLine()}}},Ms={documents:{},wrapper:null,editor:null,container:null,textArea:null,mode:{mode:"automato",lint:"automato",lineNumbers:!0,theme:"liquibyte",tabSize:2,extraKeys:{Tab:e=>e.execCommand("indentMore"),"Shift-Tab":e=>e.execCommand("indentLess")},autoCloseBrackets:!0,lineWrapping:!0},initialize(){this.container||(this.setUpContainer(),this.setUpEditor(),EventHub.ui.on(GAME_EVENT.GAME_LOAD,(()=>this.documents={})))},setUpContainer(){this.container=document.createElement("div"),this.container.className="l-automator-editor__codemirror-container",this.textArea=document.createElement("textarea"),this.container.appendChild(this.textArea)},setUpEditor(){this.editor=CodeMirror.fromTextArea(this.textArea,this.mode),this.editor.on("beforeChange",((e,t)=>{"undo"===t.origin&&t.cancel()})),this.editor.on("keydown",((e,t)=>{const i=t.key;if(t.ctrlKey&&["z","y"].includes(i))return"z"===i&&AutomatorData.undoScriptEdit(),void("y"===i&&AutomatorData.redoScriptEdit());e.state.completionActive||t.ctrlKey||t.altKey||t.metaKey||!/^[\t 0-9A-Za-z]$/.test(i)||CodeMirror.commands.autocomplete(e,null,{completeSingle:!1})})),this.editor.on("change",((e,t)=>{const i=ui.view.tabs.reality.automator.editorScriptID,a=e.getDoc().getValue();"setValue"!==t.origin&&(AutomatorBackend.saveScript(i,a),AutomatorData.redoBuffer=[]),AutomatorData.recalculateErrors();const n=AutomatorData.currentErrors().length;n>e.doc.size&&SecretAchievement(48).unlock(),AutomatorHighlighter.clearAllHighlightedLines()}))},clearEditor(){this.editor||(this.setUpContainer(),this.setUpEditor()),this.editor.setValue(""),this.editor.clearHistory(),this.editor.clearGutter("gutterId")},savedVertPos:0},Is=Rs;var xs=(0,X.Z)(Is,Ss,Ds,!1,null,null,null);const Ps=xs.exports;var Gs=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{ref:"tab",staticClass:"c-perk-tab"},[i("PerkPointLabel")],1)},Us=[],Bs=i(9022),Ns=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-perk-tab__header"},[e._v(" You have "),i("span",{staticClass:"c-perk-tab__perk-points"},[e._v(e._s(e.format(e.pp,2)))]),e._v(" "+e._s(e.pluralize("Perk Point",e.pp))+". "),i("br"),e._v(" Perk choices are permanent and cannot be respecced. "),i("br"),e._v(" Diamond-shaped perks also give Automator Points. "),i("br"),i("div",{staticClass:"perk-settings"},[i("PrimaryButton",{staticClass:"o-primary-btn c-button-perk-layout",on:{click:e.cycleLayout}},[e._v(" Perk Layout: "+e._s(e.layoutText)+" ")]),i("PrimaryButton",{class:e.physicsClassObject(),on:{click:e.togglePhysics}},[e._v(" Physics: "+e._s(e.physicsText)+" ")]),i("br"),i("PrimaryButton",{staticClass:"o-primary-btn",on:{click:e.centerTree}},[e._v(" Center Tree on START ")]),i("PrimaryButton",{staticClass:"o-primary-btn",on:{click:e.straightenEdges}},[e._v(" Straighten Edges ")])],1)])},Os=[],Ls=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",e._g({staticClass:"o-primary-btn",class:e.classObject},e.$listeners),[e._t("default")],2)},Fs=[];const $s={name:"PrimaryButton",props:{enabled:{type:Boolean,required:!1,default:!0}},computed:{classObject(){return{"o-primary-btn--disabled":!this.enabled}}}},Hs=$s;var qs=(0,X.Z)(Hs,Ls,Fs,!1,null,null,null);const Vs=qs.exports,Ys={name:"PerkPointLabel",components:{PrimaryButton:Vs},data(){return{pp:0,treeLayout:0,physicsEnabled:!1,physicsOverride:!1}},computed:{layoutText(){return PerkLayouts[this.treeLayout].buttonText},physicsText(){var e;const t=(null!==(e=this.physicsOverride)&&void 0!==e?e:this.physicsEnabled)?"Enabled":"Disabled";return`${t}${void 0===this.physicsOverride?"":" (fixed)"}`}},created(){this.treeLayout=player.options.perkLayout,this.physicsOverride=PerkLayouts[this.treeLayout].forcePhysics},methods:{update(){this.pp=Math.floor(Currency.perkPoints.value),this.physicsEnabled=player.options.perkPhysicsEnabled},togglePhysics(){void 0===this.physicsOverride&&(player.options.perkPhysicsEnabled=!player.options.perkPhysicsEnabled,PerkNetwork.setPhysics(player.options.perkPhysicsEnabled))},physicsClassObject(){return{"o-primary-btn c-button-physics":!0,"o-primary-btn--disabled":void 0!==this.physicsOverride}},centerTree(){PerkNetwork.resetPosition(!0)},straightenEdges(){PerkNetwork.setEdgeCurve(!1),PerkNetwork.setEdgeCurve(!0)},cycleLayout(){let e=(player.options.perkLayout+1)%PerkLayouts.length;while(null!==(t=null===(i=(a=PerkLayouts[e]).isUnlocked)||void 0===i?void 0:i.call(a))&&void 0!==t&&!t){var t,i,a;e=(e+1)%PerkLayouts.length}player.options.perkLayout=e,this.treeLayout=e,this.physicsOverride=PerkLayouts[this.treeLayout].forcePhysics,PerkNetwork.currentLayout=PerkLayouts[this.treeLayout],PerkNetwork.setPhysics(player.options.perkPhysicsEnabled),PerkNetwork.moveToDefaultLayoutPositions(this.treeLayout)}}},Ws=Ys;var js=(0,X.Z)(Ws,Ns,Os,!1,null,"1d796bb5",null);const Xs=js.exports,zs={name:"PerksTab",components:{PerkPointLabel:Xs},computed:{showHintText(){return ui.view.shiftDown||player.options.showHintText.perks}},watch:{showHintText(e){"S9"===ui.view.theme?er.setLabelVisibility(!1):er.setLabelVisibility(e)}},created(){EventHub.ui.on(GAME_EVENT.PERK_BOUGHT,(()=>er.updatePerkColor()))},mounted(){er.initialStabilization=!1,er.currentLayout=Js[player.options.perkLayout],er.initializeIfNeeded(),"S9"===ui.view.theme?er.setLabelVisibility(!1):er.setLabelVisibility(ui.view.shiftDown||player.options.showHintText.perks),er.updatePerkColor(),er.updatePerkSize(),this.$refs.tab.appendChild(er.container),er.moveToDefaultLayoutPositions(player.options.perkLayout)}},Ks=()=>({[L.ANTIMATTER]:{primary:"#22aa48",secondary:"#156a2d"},[L.INFINITY]:{primary:"#b67f33",secondary:"#7b5623"},[L.ETERNITY]:{primary:"#b241e3",secondary:"#8b1cba"},[L.DILATION]:{primary:"#64dd17",secondary:"#449810"},[L.REALITY]:{primary:"#0b600e",secondary:"#063207"},[L.AUTOMATION]:{primary:"#ff0000",secondary:"#b30000"},[L.ACHIEVEMENT]:{primary:"#fdd835",secondary:"#e3ba02"},[L.MENDING]:{primary:"#FFFFFF",secondary:"#808080"}});function Zs(e,t){return e.matrixTransform(t,0,0,t)}function Qs(e){const t=e%400,i=Math.floor(e/400);return new Vector(5*(t-200),5*(i-200))}const Js=[{buttonText:"Default Untangled",position:e=>Qs(e.layoutPosList[0])},{buttonText:"Random Positions",position:()=>new Vector(2e3*Math.random()-1e3,1200*Math.random()-600)},{buttonText:"Android Layout",position:e=>Zs(Qs(e.layoutPosList[1]),20),centerOffset:new Vector(0,120),forcePhysics:!1,straightEdges:!0},{buttonText:"Square",position:e=>Zs(Qs(e.layoutPosList[2]),27.5),centerOffset:new Vector(0,0),forcePhysics:!1,straightEdges:!0},{buttonText:"Horizontal Grid",position:e=>Zs(Qs(e.layoutPosList[3]),32.5),centerOffset:new Vector(-60,0),forcePhysics:!1,straightEdges:!0},{buttonText:"Distance from START",position:e=>Zs(Qs(e.layoutPosList[4]),17.5),centerOffset:new Vector(0,0),forcePhysics:!1,straightEdges:!0},{buttonText:"Blob",position:e=>Qs(e.layoutPosList[5]),centerOffset:new Vector(50,0),forcePhysics:!1,straightEdges:!0,isUnlocked:()=>Themes.available().map((e=>e.name)).includes("S11")}],er={container:void 0,network:void 0,nodes:void 0,minScale:.2,maxScale:4,lastPerkNotation:"",pulseTimer:0,initialStabilization:!1,currentLayout:{},initializeIfNeeded(){const e=Notations.current.name;void 0!==this.container&&e===this.lastPerkNotation||(this.lastPerkNotation=e,this.makeNetwork(),this.network.on("click",(e=>{const t=e.nodes[0];isFinite(t)&&(Perks.find(t).purchase(),this.updatePerkColor(),this.updatePerkSize())})),this.network.on("dragStart",(()=>{const e=this.container.getElementsByClassName("vis-tooltip")[0];void 0!==e&&(e.style.visibility="hidden"),this.initialStabilization||(this.setPhysics(player.options.perkPhysicsEnabled),this.initialStabilization=!0)})),this.network.on("dragging",(()=>{SecretAchievement(45).tryUnlock(),"S4"===Theme.current().name&&er.updatePerkSize()})),this.network.on("zoom",(()=>{const e=this.network.getScale(),t=Math.clamp(e,this.minScale,this.maxScale);e!==t&&this.network.moveTo({scale:t})})),this.network.on("stabilizationIterationsDone",(()=>{this.initialStabilization||(this.resetPosition(!1),this.initialStabilization=!0),this.setPhysics(player.options.perkPhysicsEnabled)})))},makeNetwork(){function e(e){const t=document.createElement("div");return t.innerHTML=e,t}const t=e=>Pelle.isDoomed&&Pelle.uselessPerks.includes(e.id),i=e=>Js[player.options.perkLayout].position(e);this.nodes=new Bs.qg(Perks.all.map((a=>({id:a.id,label:a.config.label,shape:a.config.automatorPoints?"diamond":"dot",title:t(a)?e(`${a.config.description}`):`${a.config.description} ${a.config.automatorPoints&&!t(a)?`(+${formatInt(a.config.automatorPoints)} AP)`:""}`,x:i(a.config).x,y:i(a.config).y}))));const a=[];for(const l of Perks.all)for(const e of l.connectedPerks){const t=Math.min(l.id,e.id),i=Math.max(l.id,e.id);a.find((e=>e.from===t&&e.to===i))||a.push({from:t,to:i})}const n={nodes:this.nodes,edges:a},s={interaction:{hover:!0,hoverConnectedEdges:!1,selectConnectedEdges:!1,tooltipDelay:0},nodes:{shape:"dot",size:18,font:{size:0},borderWidth:2,shadow:!0},edges:{width:2,shadow:!0,hoverWidth:e=>e,selectionWidth:e=>e,color:{inherit:"both"},hidden:"S9"===ui.view.theme}},r=document.createElement("div");r.className="c-wide-canvas-element vis-network c-perk-network",r.tabIndex=900;const o=document.createElement("canvas");o.className="c-perk-network__canvas",r.appendChild(o),this.container=r,this.network=new Bs.Zc(r,n,s)},setPhysics(e){const t=void 0===this.currentLayout.forcePhysics?e:this.currentLayout.forcePhysics;this.network.setOptions({physics:{enabled:t}})},setEdgeCurve(e){const t=void 0===this.currentLayout.straightEdges?e:!this.currentLayout.straightEdges;this.network.setOptions({edges:{smooth:{enabled:t}}})},moveToDefaultLayoutPositions(e){this.setPhysics(!1),this.setEdgeCurve(!1);for(const t of Object.keys(er.network.getPositions())){const i=Number(t),a=Perks.all.find((e=>e.id===i)).config,n=Js[e].position(a);this.network.moveNode(i,n.x,n.y)}this.initialStabilization=!1,this.resetPosition(!1),this.setEdgeCurve(!0)},forceNetworkRemake(){this.container=void 0,this.initializeIfNeeded(),this.setPhysics(!0)},resetPosition(e){var t;const i=e?er.network.body.nodes[GameDatabase.reality.perks.firstPerk.id]:null!==(t=Js[player.options.perkLayout].centerOffset)&&void 0!==t?t:new Vector(0,0);this.network.moveTo({position:{x:i.x,y:i.y},scale:.4,offset:{x:0,y:0}})},setLabelVisibility(e){const t={nodes:{font:{size:e?20:0,color:Theme.current().isDark()?"#DDDDDD":"#222222"}}};this.network.setOptions(t)},updatePerkColor(){var e;this.perkColorList=null!==(e=this.perkColorList)&&void 0!==e?e:Ks();const t=this.perkColorList;function i(e){const i=t[e.config.family],a=i.primary,n=i.secondary,s=Pelle.isDoomed&&Pelle.uselessPerks.includes(e.id);if(s){const e="#00bcd4",t="crimson",i=n;return{background:e,border:i,hover:{background:t,border:i},highlight:{background:e,border:i}}}const r=e.canBeBought,o=e.isBought;let l;l=r?Theme.current().isDark()?"#EEEEEE":"#111111":o?a:Theme.current().isDark()?"#333333":"#CCCCCC";const c=r||o?a:"#656565",u=n;return{background:l,border:u,hover:{background:c,border:u},highlight:{background:l,border:u}}}const a=Perks.all.map((e=>({id:e.id,color:i(e)})));this.nodes.update(a)},updatePerkSize(){function e(e){er.pulseTimer+=.1;const t="S4"===Theme.current().name?10*Math.sin(5*er.pulseTimer+.1*e._config.id):0;return"START"===e._config.label?35+t:e.isBought?25+t:e.canBeBought?20+t:12+t}const t=Perks.all.map((t=>({id:t.id,size:e(t)})));this.nodes.update(t)}},tr=zs;var ir=(0,X.Z)(tr,Gs,Us,!1,null,"74365f28",null);const ar=ir.exports;class nr{constructor(e){var t,i,a,n,s;nr.checkInputs(e),this.id=e.id,this.bitmaskIndex=e.bitmaskIndex,this.isGenerated=e.isGenerated,this.glyphTypes=e.glyphTypes,this._singleDesc=e.singleDesc,this._totalDesc=null!==(t=e.totalDesc)&&void 0!==t?t:e.singleDesc,this._genericDesc=null!==(i=e.genericDesc)&&void 0!==i?i:e.singleDesc.replace("{value}","x"),this._shortDesc=e.shortDesc,this.effect=e.effect,this.formatEffect=null!==(a=e.formatEffect)&&void 0!==a?a:e=>format(e,3,3),this.formatSingleEffect=e.formatSingleEffect||this.formatEffect,this.combine=nr.setupCombine(e),this.conversion=e.conversion,this.formatSecondaryEffect=e.formatSecondaryEffect||(e=>format(e,3,3)),this.formatSingleSecondaryEffect=e.formatSingleSecondaryEffect||this.formatSecondaryEffect,this.alteredColor=e.alteredColor,this.alterationType=e.alterationType,this._biggerIsBetter=void 0,this._enabledInDoomed=null!==(n=e.enabledInDoomed)&&void 0!==n&&n,this._enabledInDoomedWithlvl25=null!==(s=e.enabledInDoomedWithlvl25)&&void 0!==s&&s}get biggerIsBetter(){return void 0===this._biggerIsBetter&&(this._biggerIsBetter=this.checkBiggerIsBetter()),this._biggerIsBetter}get singleDesc(){const e=this._singleDesc;return"function"===typeof e?e():e}get totalDesc(){const e=this._totalDesc;return"function"===typeof e?e():e}get genericDesc(){const e=this._genericDesc;return"function"===typeof e?e():e}get shortDesc(){const e=this._shortDesc;return"function"===typeof e?e():e}get isDisabledByDoomed(){return Pelle.isDoomed&&!this._enabledInDoomed}get isDisabledByDoomedWithlvl25(){return Pelle.isDoomed&&!this._enabledInDoomedWithlvl25}compareValues(e,t){const i=Decimal.compare(e,t);return this.biggerIsBetter?i:-i}checkBiggerIsBetter(){const e=new Decimal(this.effect(1,1.01)),t=new Decimal(this.effect(100,2));return t.gt(e)}static checkInputs(e){const t=["id","bitmaskIndex","glyphTypes","singleDesc","totalDesc","genericDesc","effect","formatEffect","formatSingleEffect","combine","softcap","conversion","formatSecondaryEffect","formatSingleSecondaryEffect","alteredColor","alterationType","isGenerated","shortDesc","enabledInDoomed","enabledInDoomedWithlvl25"],i=Object.keys(e).find((e=>!t.includes(e)));if(void 0!==i)throw new Error(`Glyph effect "${e.id}" includes unrecognized field "${i}"`);const a=e.glyphTypes.find((e=>!GLYPH_TYPES.includes(e)));if(void 0!==a)throw new Error(`Glyph effect "${e.id}" references unknown glyphType "${a}"`);const n=e.combine([]);if("number"!==typeof n&&!(n instanceof Decimal)){if(void 0===n.value||void 0===n.capped)throw new Error(`The combine function for Glyph effect "${e.id}" has invalid return type`);if(e.softcap)throw new Error(`The combine function for Glyph effect "${e.id}" gives capped information, but there's also a softcap method`)}}static setupCombine(e){let t=e.combine;const i=e.softcap,a=t([]);if("number"===typeof a)return void 0===i?e=>({value:t(e),capped:!1}):e=>{const a=t(e),n=i(a);return{value:n,capped:a!==n}};if(a instanceof Decimal){if(void 0===i)return e=>({value:t(e),capped:!1});const e=a.value instanceof Decimal?(e,t)=>e.neq(t):(e,t)=>e!==t;return t=a=>{const n=t(a),s=i(n.value);return{value:s,capped:n.capped||e(n.value,s)}}}return t}}const sr=[0,9e3,15e3,25e3],rr=mapGameDataToObject(xa.reality.glyphEffects,(e=>new nr(e)));function or(e){return rr.all.filter((t=>t.glyphTypes.includes(e)))}function lr(e){return e.reduce(((e,t)=>e+(1<rr[e])).filter((t=>0!==(e&1<e.id))}class dr{constructor(e){if(this.id=e.id,this.effects=or(e.id),this.primaryEffect=e.primaryEffect,this._isUnlocked=e.isUnlocked,this.alchemyResource=e.alchemyResource,this.hasRarity=e.hasRarity,!GLYPH_TYPES.includes(this.id))throw new Error(`Id ${this.id} not found in GLYPH_TYPES`)}get isUnlocked(){var e,t;return null===(e=null===(t=this._isUnlocked)||void 0===t?void 0:t.call(this))||void 0===e||e}}const hr=mapGameDataToObject(xa.reality.glyphTypes,(e=>new dr(e))),mr=(0,B.Z)((0,B.Z)({},hr),{},{random(e,t=[]){const i=generatedTypes.filter((e=>(EffarigUnlock.reality.isUnlocked||MendingUpgrade(12).isBought||"effarig"!==e)&&!t.includes(e)));return i[Math.floor(e.uniform()*i.length)]},get list(){return GLYPH_TYPES.map((e=>mr[e]))},get locked(){return this.list.filter((e=>!e.isUnlocked))}});var pr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-automator-pane"},[i("div",{staticClass:"c-automator__controls l-automator__controls"},[i("div",{staticClass:"l-automator-button-row"},[i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Automator Introduction",expression:"'Automator Introduction'"}],staticClass:"fa-circle-info",class:e.activePanelClass(e.panelEnum.INTRO_PAGE),on:{click:function(t){e.infoPaneID=e.panelEnum.INTRO_PAGE}}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Scripting Information",expression:"'Scripting Information'"}],staticClass:"fa-list",class:e.activePanelClass(e.panelEnum.COMMANDS),on:{click:function(t){e.infoPaneID=e.panelEnum.COMMANDS}}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.errorTooltip,expression:"errorTooltip"}],staticClass:"fa-exclamation-triangle",class:e.activePanelClass(e.panelEnum.ERRORS),style:e.errorStyle,on:{click:function(t){e.infoPaneID=e.panelEnum.ERRORS}}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Extended Data Transfer",expression:"'Extended Data Transfer'"}],staticClass:"fa-window-restore",class:e.activePanelClass(e.panelEnum.DATA_TRANSFER),on:{click:function(t){e.infoPaneID=e.panelEnum.DATA_TRANSFER}}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"View recently executed commands",expression:"'View recently executed commands'"}],staticClass:"fa-eye",class:e.activePanelClass(e.panelEnum.EVENTS),on:{click:function(t){e.infoPaneID=e.panelEnum.EVENTS}}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Modify defined constants",expression:"'Modify defined constants'"}],staticClass:"fa-book",class:e.activePanelClass(e.panelEnum.CONSTANTS),on:{click:function(t){e.infoPaneID=e.panelEnum.CONSTANTS}}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Template Creator List",expression:"'Template Creator List'"}],staticClass:"fa-file-code",class:e.activePanelClass(e.panelEnum.TEMPLATES),on:{click:function(t){e.infoPaneID=e.panelEnum.TEMPLATES}}}),e.isBlock?i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Command menu for Block editor mode",expression:"'Command menu for Block editor mode'"}],staticClass:"fa-cubes",class:e.activePanelClass(e.panelEnum.BLOCKS),on:{click:function(t){e.infoPaneID=e.panelEnum.BLOCKS}}}):e._e(),e.fullScreen?i("span",{staticClass:"c-automator__status-text c-automator__status-text--small",class:{"c-automator__status-text--error":e.totalChars>e.maxTotalChars}},[e._v(" Across all scripts: "+e._s(e.formatInt(e.totalChars))+"/"+e._s(e.formatInt(e.maxTotalChars))+" ")]):e._e(),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.fullScreenTooltip,expression:"fullScreenTooltip"}],staticClass:"l-automator__expand-corner",class:e.fullScreenIconClass,on:{click:function(t){e.fullScreen=!e.fullScreen}}})],1),i("div",{staticClass:"l-automator-button-row"},[i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Export single automator script",expression:"'Export single automator script'"}],staticClass:"fa-file-export",on:{click:e.exportScript}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.importTooltip,expression:"importTooltip"}],staticClass:"fa-file-import",class:{"c-automator__status-text--error":!e.canMakeNewScript},on:{click:e.importScript}}),i("div",{staticClass:"l-automator__script-names"},[e.editingName?i("input",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.nameTooltip,expression:"nameTooltip"}],ref:"renameInput",staticClass:"l-automator__rename-input c-automator__rename-input",class:{"c-long-name-box":e.isNameTooLong},on:{blur:e.nameEdited,keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.$refs.renameInput.blur()}}}):[i("ExpandingControlBox",{staticClass:"l-automator__scripts-dropdown",attrs:{"auto-close":!0},scopedSlots:e._u([{key:"header",fn:function(){return[i("div",{staticClass:"c-automator-docs-script-select"},[e._v(" ▼ Current Script: "+e._s(e.currentEditorScriptName)+" ")])]},proxy:!0},{key:"dropdown",fn:function(){return[i("AutomatorScriptDropdownEntryList",{key:e.scriptCount})]},proxy:!0}],null,!1,1001015561)}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Rename script",expression:"'Rename script'"}],staticClass:"far fa-edit",on:{click:e.rename}})]],2),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Delete this script",expression:"'Delete this script'"}],staticClass:"fas fa-trash",on:{click:e.deleteScript}})],1)]),i("div",{staticClass:"c-automator-docs l-automator-pane__content"},[e.infoPaneID===e.panelEnum.INTRO_PAGE?i("AutomatorDocsIntroPage"):e.infoPaneID===e.panelEnum.COMMANDS?i("AutomatorDocsCommandList"):e.infoPaneID===e.panelEnum.ERRORS?i("AutomatorErrorPage"):e.infoPaneID===e.panelEnum.EVENTS?i("AutomatorEventLog"):e.infoPaneID===e.panelEnum.DATA_TRANSFER?i("AutomatorDataTransferPage"):e.infoPaneID===e.panelEnum.CONSTANTS?i("AutomatorDefinePage"):e.infoPaneID===e.panelEnum.TEMPLATES?i("AutomatorDocsTemplateList"):e.infoPaneID===e.panelEnum.BLOCKS?i("AutomatorBlocks"):e._e()],1)])},yr=[],fr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"c-automator__button l-automator__button fas",on:{click:e.emitClick}})},gr=[];const vr={name:"AutomatorButton"},br=vr;var Er=(0,X.Z)(br,fr,gr,!1,null,"a1d47f14",null);const Tr=Er.exports;var wr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-panel-padding"},[e._v(" This page lets you import and export scripts with additional data attached; the encoded text will also include data for any Time Study presets or constants used within the script. This will allow you to more easily transfer working scripts between different save files, but you may have to overwrite existing data in the process due to limited space for study presets and constants. Data exported from this page is also imported in the same way that single script data is imported. "),i("br"),i("br"),e._v(' Note: Any mentions of constant names or full study-buying commands within comments will also be counted as being "used" within a script. This is intentional, as the comment is assumed to be indicative of what the script itself is attempting to do with presets or constants. '),i("br"),i("br"),e._l(e.scripts,(function(e,t){return i("div",{key:t},[i("AutomatorDataTransferSingleEntry",{staticClass:"l-entry-margin",attrs:{script:e}})],1)}))],2)},kr=[],Cr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-entry-padding"},[i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Export Full Script Data",expression:"'Export Full Script Data'"}],staticClass:"l-button-margin fas fa-file-export",on:{click:function(t){return e.exportData(e.script.id)}}}),i("b",[e._v("Script name: "+e._s(e.script.name))]),i("br"),e.hasPresets?i("span",[i("span",{class:e.iconClass(e.hidePresets),on:{click:function(t){e.hidePresets=!e.hidePresets}}}),e._v(" References "+e._s(e.quantifyInt("recognized study preset",e.presets.length))+" "),e.hidePresets?e._e():i("span",e._l(e.presets,(function(t){return i("div",{key:t},[e.presetData[t].name?i("span",[e._v('"'+e._s(e.presetData[t].name)+'" (slot '+e._s(t+1)+"):")]):i("span",[e._v("Preset slot "+e._s(t+1)+":")]),i("br"),i("div",{staticClass:"l-value-padding"},[e.presetData[t].studies?i("span",[e._v(e._s(e.presetData[t].studies))]):i("i",[e._v("Empty Study Preset")])])])})),0)]):i("span",[e._v(" Does not reference any study presets. ")]),i("br"),e.hasConstants?i("span",[i("span",{class:e.iconClass(e.hideConstants),on:{click:function(t){e.hideConstants=!e.hideConstants}}}),e._v(" References "+e._s(e.quantifyInt("defined constant",e.constants.length))+" "),e.hideConstants?e._e():i("span",e._l(e.constants,(function(t){return i("div",{key:t},[e._v(' "'+e._s(t)+'": '),i("br"),i("div",{staticClass:"l-value-padding"},[e._v(" "+e._s(e.constantData[t])+" ")])])})),0)]):i("span",[e._v(" Does not reference any defined constants. ")])])},Ar=[];const _r={name:"AutomatorDataTransferSingleEntry",props:{script:{type:Object,required:!0}},data(){return{presets:[],constants:[],hidePresets:!0,hideConstants:!0}},computed:{presetData:()=>player.timestudy.presets,constantData:()=>player.reality.automator.constants,hasPresets(){var e,t;return 0!==(null!==(e=null===(t=this.presets)||void 0===t?void 0:t.length)&&void 0!==e?e:0)},hasConstants(){var e,t;return 0!==(null!==(e=null===(t=this.constants)||void 0===t?void 0:t.length)&&void 0!==e?e:0)}},methods:{update(){this.presets=AutomatorBackend.getUsedPresets(this.script.id),this.constants=AutomatorBackend.getUsedConstants(this.script.id)},iconClass(e){return e?"far fa-plus-square":"far fa-minus-square"},exportData(e){const t=AutomatorBackend.exportFullScriptData(e);t?(copyToClipboard(t),GameUI.notify.automator(`Exported all data associated with "${this.script.name}" to your clipboard`,6e3)):GameUI.notify.error("Could not export data from blank Automator script!")}}},Sr=_r;var Dr=(0,X.Z)(Sr,Cr,Ar,!1,null,"87c8567a",null);const Rr=Dr.exports,Mr={name:"AutomatorDataTransferPage",components:{AutomatorDataTransferSingleEntry:Rr},data(){return{scripts:0}},computed:{maxScriptCount:()=>AutomatorData.MAX_ALLOWED_SCRIPT_COUNT},created(){this.loadScripts(),this.on$(GAME_EVENT.AUTOMATOR_SAVE_CHANGED,(()=>{this.loadScripts()}))},methods:{loadScripts(){this.scripts=Object.values(player.reality.automator.scripts).map((e=>({id:e.id,name:e.name})))}}},Ir=Mr;var xr=(0,X.Z)(Ir,wr,kr,!1,null,"4d4d30ca",null);const Pr=xr.exports;var Gr=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-panel-padding"},[e._v(" This panel allows you to define case-sensitive constant values which can be used in place of numbers or Time Study import strings. These definitions are shared across all of your scripts and are limited to a maximum of "+e._s(e.maxConstantCount)+" defined constants. Additionally, constant names and values are limited to lengths of "+e._s(e.maxNameLength)+" and "+e._s(e.maxValueLength)+" characters respectively. Changes made to constants will not apply until any currently running scripts are restarted. "),i("br"),i("br"),e._v(" As a usage example, defining "),i("b",[e._v("first 🠈 11,21,22,31,32,33")]),e._v(" allows you to use "),i("b",[e._v("studies purchase first")]),e._v(" in order to purchase all of the studies in the first three rows. "),i("br"),i("br"),i("PrimaryButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.hasConstants?null:"You have no valid constants to delete!",expression:"hasConstants ? null : 'You have no valid constants to delete!'"}],staticClass:"c-delete-margin o-primary-btn--subtab-option",class:{"o-primary-btn--disabled":!e.hasConstants},on:{click:e.deleteAllConstants}},[e._v(" Delete all constants ")]),i("br"),i("br"),i("PrimaryButton",{staticClass:"c-delete-margin o-primary-btn--subtab-option",on:{click:e.importPresets}},[e._v(" Import Time Study Presets ")]),i("div",{key:e.count+e.refreshConstants,staticClass:"l-definition-container"},e._l(e.constants,(function(e,t){return i("AutomatorDefineSingleEntry",{key:t,attrs:{constant:e}})})),1)],1)},Ur=[],Br=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-single-definition-container"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.aliasString,expression:"aliasString"}],staticClass:"c-define-textbox c-alias",class:{"l-limit-textbox":e.aliasString.length===e.maxNameLength},attrs:{placeholder:"New constant...",maxlength:e.maxNameLength},domProps:{value:e.aliasString},on:{focusin:function(t){return e.handleFocus(!0)},focusout:function(t){return e.handleFocus(!1)},input:function(t){t.target.composing||(e.aliasString=t.target.value)}}}),e.aliasString?i("span",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.errorTooltip(),expression:"errorTooltip()"}],staticClass:"o-arrow-padding"},[e._v(" 🠈 ")]):e._e(),e.aliasString?i("input",{directives:[{name:"model",rawName:"v-model",value:e.valueString,expression:"valueString"}],staticClass:"c-define-textbox c-value",class:{"l-limit-textbox":e.valueString&&e.valueString.length===e.maxValueLength},attrs:{placeholder:"Value for constant...",maxlength:e.maxValueLength},domProps:{value:e.valueString},on:{focusin:function(t){return e.handleFocus(!0)},focusout:function(t){return e.handleFocus(!1)},input:function(t){t.target.composing||(e.valueString=t.target.value)}}}):e._e(),e.aliasString?i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Delete this constant",expression:"'Delete this constant'"}],staticClass:"c-delete-button fas fa-eraser",on:{click:e.deleteConstant}}):e._e()])},Nr=[];const Or={name:"AutomatorDefineSingleEntry",props:{constant:{type:String,required:!0}},data(){return{oldAlias:"",aliasString:"",valueString:""}},computed:{maxNameLength(){return AutomatorData.MAX_ALLOWED_CONSTANT_NAME_LENGTH},maxValueLength(){return AutomatorData.MAX_ALLOWED_CONSTANT_VALUE_LENGTH}},created(){this.aliasString=this.constant,this.oldAlias=this.aliasString,this.valueString=player.reality.automator.constants[this.aliasString]},methods:{currentError(){if(!this.aliasString)return null;const e=this.aliasString.match(/^[A-Z_a-z][0-9A-Z_a-z]*$/),t=Object.keys(player.reality.automator.constants).includes(this.aliasString)&&this.aliasString!==this.oldAlias,i=Cn.some((e=>{const t=this.aliasString.toLowerCase().match(e);return!!t&&t[0]===this.aliasString.toLowerCase()})),a=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","toValueOf"].some((e=>this.aliasString.match(e)));if(!e)return"Constant name must be alphanumeric without spaces and cannot start with a number";if(t)return"You have already defined a constant with this name";if(i)return"Constant name conflicts with a command key word";if(a)return"Constant name cannot shadow a built-in Javascript prototype prop";if(!this.valueString)return"Constant value cannot be empty";const n=this.valueString.match(/^\x2D?(0|[1-9][0-9]*)(\.[0-9]+)?([Ee][\+\x2D]?[0-9]+)?$/),s=TimeStudyTree.isValidImportString(this.valueString);return n||s?null:"Constant value must either be a number or Time Study string"},errorTooltip(){const e=this.currentError();if(e)return{content:`
\n
${e}
\n
`,html:!0,trigger:"manual",show:!0,classes:["general-tooltip"]}},handleFocus(e){e||this.currentError()||(this.aliasString?this.oldAlias?this.oldAlias===this.aliasString?AutomatorBackend.modifyConstant(this.aliasString,this.valueString):AutomatorBackend.renameConstant(this.oldAlias,this.aliasString):AutomatorBackend.addConstant(this.aliasString,this.valueString):AutomatorBackend.deleteConstant(this.oldAlias),this.oldAlias=this.aliasString,AutomatorData.recalculateErrors(),player.reality.automator.type===AUTOMATOR_TYPE.BLOCK&&BlockAutomator.parseTextFromBlocks())},deleteConstant(){AutomatorBackend.deleteConstant(this.aliasString),this.oldAlias="",this.aliasString="",this.valueString=""}}},Lr=Or;var Fr=(0,X.Z)(Lr,Br,Nr,!1,null,"559b0908",null);const $r=Fr.exports,Hr={name:"AutomatorDefinePage",components:{AutomatorDefineSingleEntry:$r,PrimaryButton:Vs},data(){return{constants:[],count:0,refreshConstants:!1}},computed:{maxConstantCount(){return AutomatorData.MAX_ALLOWED_CONSTANT_COUNT},maxNameLength(){return AutomatorData.MAX_ALLOWED_CONSTANT_NAME_LENGTH},maxValueLength(){return AutomatorData.MAX_ALLOWED_CONSTANT_VALUE_LENGTH},hasConstants(){return this.constants.length>1||""!==this.constants[0]}},created(){this.on$(GAME_EVENT.AUTOMATOR_CONSTANT_CHANGED,(()=>{this.refreshConstants=!0,this.$nextTick((()=>this.refreshConstants=!1))}))},methods:{update(){const e=player.reality.automator.constantSortOrder;this.count=e.length,this.constants=this.countGameDatabase.reality.automator.categoryNames,commands:()=>GameDatabase.reality.automator.commands},methods:{commandsInCategory(e){return this.commands.filter((t=>t.category===e&&t.isUnlocked()))}}},to=eo;var io=(0,X.Z)(to,Wr,jr,!1,null,"71d16626",null);const ao=io.exports;var no=function(){var e=this,t=e.$createElement;e._self._c;return e._m(0)},so=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e._v(" Welcome to the Antimatter Dimensions Automator! "),i("br"),i("br"),e._v(" This page is an introduction page which gives a very broad overview of everything you can do with the Automator. Specific details on various functionality can be found in the How To Play or their respective tabs (when relevant). "),i("br"),i("br"),i("b",[e._v("Scripting Language:")]),e._v(" The Automator uses a custom scripting language in order to perform certain game actions for you. Click "),i("div",{staticClass:"fas fa-list c-automator-button-icon"}),e._v(" to bring up a list of available commands. You can also define constants as shorthand names for various values on the "),i("div",{staticClass:"fas fa-book c-automator-button-icon"}),e._v(" page. "),i("br"),i("br"),i("b",[e._v("Layout:")]),e._v(" This Automator itself is split up into two halves; the left half contains your script and controls for starting, stopping, and repeating its execution, and the right half contains Automator information. Clicking "),i("div",{staticClass:"fas fa-expand-arrows-alt c-automator-button-icon"}),e._v(" in the top-right corner will expand the Automator to take up the whole browser page for easier editing. "),i("br"),i("br"),i("b",[e._v("Editor Modes:")]),e._v(" There are two different editors you can use to write your automator scripts - a block-based editor (default) and a text-based editor. You can swap between the two editor types with the switch in the top-right corner of the left half. Note that scripts with errors may not properly convert between the two modes, which can cause part of your script to be deleted. "),i("br"),i("br"),i("b",[e._v("Making Scripts:")]),e._v(" You can switch between multiple scripts or make new scripts using the dropdown on the second row of buttons. The current script can be renamed or deleted with the "),i("div",{staticClass:"fas fa-edit c-automator-button-icon"}),e._v(" and "),i("div",{staticClass:"fas fa-trash c-automator-button-icon"}),e._v(" buttons. The Automator will always contain at least one script for you to edit; deleting your last one will automatically create a new blank one. "),i("br"),i("br"),i("b",[e._v("Writing Scripts:")]),e._v(" Scripts in the block editor are made by going to the block tab "),i("div",{staticClass:"fas fa-cubes c-automator-button-icon"}),e._v(", while scripts in the text editor are made by typing into the left half as a text box. In either editor mode, you can also use some smaller premade scripts from the template generator "),i("div",{staticClass:"fas fa-file-code c-automator-button-icon"}),e._v(". You can undo or redo a limited number of edits using "),i("div",{staticClass:"fas fa-arrow-rotate-left c-automator-button-icon"}),e._v(" or "),i("div",{staticClass:"fas fa-arrow-rotate-right c-automator-button-icon"}),e._v(", or by using the respective hotkeys. Edit history is cleared upon switching, converting, or deleting scripts. "),i("br"),i("br"),i("b",[e._v("Debugging:")]),e._v(" The two main tools you have for fixing your scripts are the Error Log "),i("div",{staticClass:"fas fa-exclamation-triangle c-automator-button-icon"}),e._v(" for when you can't get your script to run at all, and the Event Log "),i("div",{staticClass:"fas fa-eye c-automator-button-icon"}),e._v(" for when it runs but doesn't do what you expect it to do. "),i("br"),i("br"),i("b",[e._v("Importing/Exporting:")]),e._v(" Automator scripts can be exported and imported in text format by using the "),i("div",{staticClass:"fas fa-file-export c-automator-button-icon"}),e._v(" and "),i("div",{staticClass:"fas fa-file-import c-automator-button-icon"}),e._v(" buttons respectively. You can also access additional extended exporting options "),i("div",{staticClass:"fas fa-window-restore c-automator-button-icon"}),e._v(" if desired. "),i("br"),i("br"),i("b",[e._v("Script saving:")]),e._v(" Script changes are not immediately saved to your computer under all conditions; check the Automator How To Play entries for more details. Additionally there are two character limits to reduce lag, shown above the automator panels. ")])}];const ro={name:"AutomatorDocsIntroPage"},oo=ro;var lo=(0,X.Z)(oo,no,so,!1,null,"2dfadf11",null);const co=lo.exports;var uo=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e._v(" These templates will let you do some more common things within the Automator. They may be slightly slower than manually-written scripts, but don't require you to have any previous programming experience to use. Clicking any of these buttons will open up a prompt with some input fields, which will generate a template you can place into your Automator. "),e._l(e.templates,(function(t){return i("button",{key:t.name,staticClass:"o-primary-btn c-automator-docs-template--button l-automator__button",on:{click:function(i){return e.showModal(t)}}},[e._v(" Template: "+e._s(t.name)+" ")])})),e._v(" Since you are currently in the "+e._s(e.isBlock?"Block":"Text")+" editor, this panel will "+e._s(e.pasteText)+". "),i("br"),i("br"),e.isBlock?i("draggable",{key:e.blockTemplates.length,staticClass:"template-container",attrs:{list:e.blockTemplates,group:{name:"code-blocks",pull:"clone",put:!1},sort:!1},on:{end:e.unpackTemplateBlocks}},e._l(e.blockTemplates,(function(t,a){return i("div",{key:a,staticClass:"o-automator-command o-automator-block-list draggable-blocks",on:{dragstart:function(t){return e.setIndex(a)}}},[e._v(" "+e._s(t.name)+" ")])})),0):e._e()],2)},ho=[];const mo={name:"AutomatorDocsTemplateList",data(){return{isBlock:!1,blockTemplates:[],selectedTemplateID:-1}},computed:{templates:()=>GameDatabase.reality.automator.templates.scripts,pasteText(){return this.isBlock?"create a special block you can drag into your Automator where you would like it to be placed. It will then\n automatically fill in all of the individual blocks needed for the template":"copy the template as text onto your clipboard. You can directly paste the template text into your Automator\n wherever you would like it"}},methods:{update(){this.isBlock=player.reality.automator.type===AUTOMATOR_TYPE.BLOCK,this.blockTemplates=AutomatorData.blockTemplates},showModal(e){Modal.automatorScriptTemplate.show(e)},unpackTemplateBlocks(e){const t=this.blockTemplates[this.selectedTemplateID].blocks,i=BlockAutomator.lines.slice(0,e.newIndex),a=BlockAutomator.lines.slice(e.newIndex).filter((e=>e.cmd)),n=Math.max(...BlockAutomator._idArray.filter((e=>e))),s=Math.min(...t.map((e=>e.id))),r=[];for(const o of t)r.push((0,B.Z)((0,B.Z)({},o),{},{id:o.id+n-s+1}));BlockAutomator.lines=i,BlockAutomator.lines.push(...r),BlockAutomator.lines.push(...a),BlockAutomator.updateIdArray()},setIndex(e){this.selectedTemplateID=e}}},po=mo;var yo=(0,X.Z)(po,uo,ho,!1,null,"a3645a5c",null);const fo=yo.exports;var go=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-automator-docs-page"},[0===e.errors.length?i("div",[e._v(" No script errors found! ")]):i("div",[i("b",[e._v("Your script has the following "+e._s(e.quantify("error",e.errors.length))+":")]),i("br"),e._l(e.errors,(function(t,a){return i("span",{key:a},[i("b",[e._v("On line "+e._s(t.startLine)+":")]),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Jump to line",expression:"'Jump to line'"}],staticClass:"c-automator-docs--button fas fa-arrow-circle-right",on:{click:function(i){return e.scrollToLine(t.startLine)}}}),i("div",{staticClass:"c-automator-docs-page__indented"},[e._v(" "+e._s(t.info)+" ")]),i("div",{staticClass:"c-automator-docs-page__indented"},[i("i",[e._v("Suggested fix: "+e._s(t.tip))])])])})),i("i",[e._v(' Note: Sometimes errors may cause the automator to be unable to scan the rest of the script properly. This may result in some errors "disappearing" due to other errors occurring in earlier lines, or errors in a command which has an inner block (eg. commands like IF or WHILE) causing errors to appear on correctly-formatted later commands. Additionally, some of the suggested fixes may be potentially misleading due to the cause of the error being unclear. ')])],2)])},vo=[];const bo={name:"AutomatorErrorPage",data(){return{errors:[]}},methods:{update(){this.errors=AutomatorData.currentErrors()},scrollToLine(e){AutomatorScroller.scrollToLine(e),AutomatorHighlighter.updateHighlightedLine(e,LineEnum.Error)}}},Eo=bo;var To=(0,X.Z)(Eo,go,vo,!1,null,"c61501d4",null);const wo=To.exports;var ko=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-automator-docs-page"},[i("div",[e._v(" This panel keeps a running event log of all the commands which the automator has recently executed, with a little extra info on some of the commands. It may be useful to help you find problems if you find your automator is getting stuck in certain spots. "),i("br"),i("br"),e._v(" While your settings are kept within your savefile, the actual events are not and will disappear on refresh. "),i("br"),i("br"),i("b",[e._v("Entry Sorting:")]),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Oldest results first",expression:"'Oldest results first'"}],staticClass:"fa-angle-down",class:e.buttonClassObject,style:e.sortStyle(!e.newestFirst),on:{click:function(t){e.newestFirst=!1}}}),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Newest results first",expression:"'Newest results first'"}],staticClass:"fa-angle-up",class:e.buttonClassObject,style:e.sortStyle(e.newestFirst),on:{click:function(t){e.newestFirst=!0}}}),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.clearTooltip,expression:"clearTooltip"}],staticClass:"fa-trash",class:e.buttonClassObject,on:{click:e.clearLog}}),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Clear event log every Reality",expression:"'Clear event log every Reality'"}],staticClass:"fa-eraser",class:e.buttonClassObject,style:e.clearRealityStyle(),on:{click:function(t){e.clearOnReality=!e.clearOnReality}}}),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Clear event log on script restart",expression:"'Clear event log on script restart'"}],staticClass:"fa-backspace",class:e.buttonClassObject,style:e.clearRestartStyle(),on:{click:function(t){e.clearOnRestart=!e.clearOnRestart}}})]),i("div",[i("b",[e._v("Timestamp style:")]),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"No timestamps",expression:"'No timestamps'"}],staticClass:"fa-ban",class:e.buttonClassObject,style:e.timestampStyle("DISABLED"),on:{click:function(t){return e.setTimestampMode("DISABLED")}}}),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Current time this Reality",expression:"'Current time this Reality'"}],staticClass:"fa-stopwatch",class:e.buttonClassObject,style:e.timestampStyle("THIS_REALITY"),on:{click:function(t){return e.setTimestampMode("THIS_REALITY")}}}),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Time elapsed since event",expression:"'Time elapsed since event'"}],staticClass:"fa-clock",class:e.buttonClassObject,style:e.timestampStyle("RELATIVE_NOW"),on:{click:function(t){return e.setTimestampMode("RELATIVE_NOW")}}}),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Time since last event",expression:"'Time since last event'"}],staticClass:"fa-arrow-left",class:e.buttonClassObject,style:e.timestampStyle("RELATIVE_PREV"),on:{click:function(t){return e.setTimestampMode("RELATIVE_PREV")}}}),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Date and time",expression:"'Date and time'"}],staticClass:"fa-user-clock",class:e.buttonClassObject,style:e.timestampStyle("DATE_TIME"),on:{click:function(t){return e.setTimestampMode("DATE_TIME")}}})]),e._l(e.events,(function(t,a){return i("span",{key:a},[i("b",[e._v("Line "+e._s(t.line)+e._s(e.timestamp(t))+":")]),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Jump to line",expression:"'Jump to line'"}],staticClass:"fa-arrow-circle-right",class:e.buttonClassObject,on:{click:function(i){return e.scrollToLine(t.line)}}}),i("div",{staticClass:"c-automator-docs-page__indented"},[i("i",[e._v(e._s(t.message))])])])}))],2)},Co=[];const Ao={name:"AutomatorEventLog",data(){return{unsortedEvents:[],newestFirst:!1,timestampMode:0,currentTime:0,maxEntries:0,clearOnReality:!1,clearOnRestart:!1}},computed:{events(){const e=this.unsortedEvents.sort(((e,t)=>e.timestamp.eq(t.timestamp)?e.thisReality===t.thisReality?e.line-t.line:e.thisReality-t.thisReality:e.timestamp.minus(t.timestamp)));return this.newestFirst?e.reverse():e},clearTooltip(){return`Clear all entries (Max. ${this.maxEntries})`},buttonClassObject(){return"c-automator-docs--button fas"}},watch:{newestFirst(e){player.options.automatorEvents.newestFirst=e},timestampMode(e){player.options.automatorEvents.timestampType=e},clearOnReality(e){player.options.automatorEvents.clearOnReality=e},clearOnRestart(e){player.options.automatorEvents.clearOnRestart=e}},methods:{update(){const e=player.options.automatorEvents;this.unsortedEvents=AutomatorData.eventLog,this.newestFirst=e.newestFirst,this.timestampMode=e.timestampType,this.currentTime=Date.now(),this.maxEntries=e.maxEntries,this.clearOnReality=e.clearOnReality,this.clearOnRestart=e.clearOnRestart},clearLog(){AutomatorData.clearEventLog(),this.update()},sortStyle(e){return{"background-color":e?"var(--color-reality)":""}},timestampStyle(e){return{"background-color":this.timestampMode===_o[e]?"var(--color-reality)":""}},clearRealityStyle(){return{"background-color":this.clearOnReality?"var(--color-reality)":""}},clearRestartStyle(){return{"background-color":this.clearOnRestart?"var(--color-reality)":""}},setTimestampMode(e){this.timestampMode=_o[e]},timestamp(e){switch(this.timestampMode){case _o.DISABLED:return"";case _o.THIS_REALITY:return`, ${TimeSpan.fromSeconds(e.thisReality).toStringShort()} (real-time) in Reality`;case _o.RELATIVE_NOW:return`, ${TimeSpan.fromMilliseconds(this.currentTime-e.timestamp).toStringShort()} ago`;case _o.RELATIVE_PREV:return e.timegap===e.timestamp?", first logged event":`, ${TimeSpan.fromMilliseconds(e.timegap).toStringShort()} after previous event`;case _o.DATE_TIME:return`, ${Time.toDateTimeString(e.timestamp)}`;default:throw Error("Unrecognized timestamp mode in Automator event log")}},scrollToLine(e){AutomatorScroller.scrollToLine(e),AutomatorHighlighter.updateHighlightedLine(e,LineEnum.Event)}}},_o={DISABLED:0,THIS_REALITY:1,RELATIVE_NOW:2,RELATIVE_PREV:3,DATE_TIME:4},So=Ao;var Do=(0,X.Z)(So,ko,Co,!1,null,"5e0af30a",null);const Ro=Do.exports;var Mo=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{key:e.scripts.length},[e._l(e.scripts,(function(t){return i("div",{key:t.id,staticClass:"l-script-option c-script-option-hover-effect",class:e.labelClassObject(t.id),on:{click:function(i){return e.changeScriptID(t.id)}}},[e._v(" "+e._s(e.dropdownLabel(t))+" ")])})),e.canMakeNewScript?i("div",{staticClass:"l-create-script c-automator-docs-script-select c-script-option-hover-effect",on:{click:function(t){return e.createNewScript()}}},[i("i",[e._v("Create a new script (You have "+e._s(e.formatInt(e.scriptCount))+" / "+e._s(e.formatInt(e.maxScriptCount))+")")])]):i("div",{staticClass:"l-create-script c-automator-docs-script-select l-max-scripts"},[i("i",[e._v("You can only have "+e._s(e.formatInt(e.maxScriptCount))+" scripts!")])])],2)},Io=[];const xo={name:"AutomatorScriptDropdownEntryList",data(){return{isBlock:!1,currentScriptID:0,runningScriptID:0,isRunning:!1,isPaused:!1,canMakeNewScript:!1}},computed:{scripts(){return Object.values(player.reality.automator.scripts).map((e=>({id:e.id,name:e.name})))},currentScriptContent(){return player.reality.automator.scripts[this.currentScriptID].content},currentScript(){return CodeMirror.Doc(this.currentScriptContent,"automato").getValue()},scriptCount(){return Object.keys(player.reality.automator.scripts).length},maxScriptCount(){return AutomatorData.MAX_ALLOWED_SCRIPT_COUNT}},created(){this.currentScriptID=player.reality.automator.state.editorScript,this.on$(GAME_EVENT.AUTOMATOR_SAVE_CHANGED,(()=>{this.$recompute("scripts")}))},methods:{update(){this.isBlock=player.reality.automator.type===AUTOMATOR_TYPE.BLOCK,this.runningScriptID=AutomatorBackend.state.topLevelScript,this.isRunning=AutomatorBackend.isRunning,this.isPaused=AutomatorBackend.isOn&&!AutomatorBackend.isRunning,this.canMakeNewScript=this.scriptCountBlockAutomator.updateEditor(this.currentScript))),this.$parent.openRequest=!1,AutomatorData.clearUndoData()},dropdownLabel(e){const t=[];e.id===this.currentScriptID&&t.push("viewing"),e.id===this.runningScriptID&&(this.isRunning?t.push("running"):this.isPaused&&t.push("paused"));const i=t.length?`(${t.join(", ").capitalize()})`:"";return`${e.name} ${i}`},labelClassObject(e){const t=this.isRunning||this.isPaused;return{"c-automator-docs-script-select":!0,"l-active-script":e===this.runningScriptID&&t,"l-selected-script":e===this.currentScriptID&&(e!==this.runningScriptID||!t)}}}},Po=xo;var Go=(0,X.Z)(Po,Mo,Io,!1,null,"1d4a260f",null);const Uo=Go.exports;var Bo=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{ref:"root",staticClass:"l-expanding-control-box",class:e.rootClassObject},[i("div",{ref:"container",staticClass:"l-expanding-control-box__container",class:e.containerClassObject,style:e.containerStyle,on:{transitionend:e.transitionEnd,mouseenter:e.mouseOn,mouseleave:e.mouseOff}},[e.$slots.header?i("div",{ref:"expandButton",on:{click:e.handleClick}},[e._t("header")],2):i("div",{ref:"expandButton",class:e.buttonClass,on:{click:e.handleClick}},[e._v(" "+e._s(e.label)+" "),i("span",{class:e.indicatorArrowClassObject},[e._v(" ▼ ")])]),i("div",{ref:"dropdown"},[e._t("dropdown")],2)])])},No=[];const Oo={name:"ExpandingControlBox",props:{containerClass:{type:String,required:!1,default:void 0},label:{type:String,required:!1,default:void 0},widthSource:{type:String,required:!1,default:void 0},buttonClass:{type:String,required:!1,default:"l-expanding-control-box__button"},autoClose:{type:Boolean,required:!1,default:!1}},data(){return{state:null,openRequest:!1,closedHeight:"1em",openHeight:"1em",hasMouse:!1,closeTime:0}},computed:{states:()=>({CLOSED:{name:"CLOSED",transition:!1,visibility:!1,height:"closed"},OPEN_REQUESTED:{name:"OPEN_REQUESTED",transition:!0,visibility:!0,height:"closed"},OPENING:{name:"OPENING",transition:!0,visibility:!0,height:"open"},OPEN:{name:"OPEN",transition:!1,visibility:!0,height:null},CLOSE_REQUESTED:{name:"CLOSE_REQUESTED",transition:!1,visibility:!0,height:"open"},CLOSING:{name:"CLOSING",transition:!0,visibility:!0,height:"closed"}}),maxHeight(){return"open"===this.state.height?this.openHeight:"closed"===this.state.height?this.closedHeight:null},rootClassObject(){return{"l-expanding-control-box--controls-width":void 0!==this.widthSource}},containerStyle(){return{maxHeight:this.maxHeight,visibility:this.state.visibility}},containerClassObject(){var e;const t={"l-expanding-control-box__container--transition":null===(e=this.state)||void 0===e?void 0:e.transition};return t[this.containerClass]=!0,t},indicatorArrowClassObject(){return{"c-indicator-arrow":!0,"c-indicator-arrow--flipped":this.state===this.states.OPENING||this.state===this.states.OPEN}}},watch:{state(e){switch(this.processRequest(e,this.openRequest),this.updateHeightInfo(),this.state){case this.states.CLOSED:break;case this.states.OPEN_REQUESTED:this.$nextTick((()=>this.state=this.states.OPENING));break;case this.states.OPENING:break;case this.states.OPEN:break;case this.states.CLOSE_REQUESTED:this.$nextTick((()=>this.state=this.states.CLOSING));break;case this.CLOSING:break}},openRequest(e){this.processRequest(this.state,e)}},created(){this.state=this.states.CLOSED,this.on$("openrequest",(()=>this.openRequest=!0))},mounted(){this.updateHeightInfo(),this.$refs.root.style.height=this.closedHeight,this.updateBaseWidth()},methods:{update(){const e=this.hasMouse?0:(Date.now()-this.closeTime)/1e3;this.autoClose&&this.state===this.states.OPEN&&e>1&&(this.openRequest=!1)},processRequest(e,t){!t||e!==this.states.CLOSED&&e!==this.states.CLOSE_REQUESTED||(this.state=this.states.OPEN_REQUESTED),t||e!==this.states.OPEN&&e!==this.states.OPEN_REQUESTED||(this.state=this.states.CLOSE_REQUESTED)},updateBaseWidth(){"content"===this.widthSource?(this.$refs.container.style.width=`${this.$refs.dropdown.offsetWidth}px`,this.$refs.root.style.width=`${this.$refs.dropdown.offsetWidth}px`):"header"===this.widthSource&&(this.$refs.root.style.width=`${this.$refs.container.offsetWidth}px`)},updateHeightInfo(){const e=this.$refs.expandButton.offsetHeight;this.closedHeight=`${e}px`,this.openHeight=`${e+this.$refs.dropdown.offsetHeight}px`},transitionEnd(e){"max-height"===e.propertyName&&(this.state===this.states.OPENING?this.state=this.states.OPEN:this.state===this.states.CLOSING&&(this.state=this.states.CLOSED))},handleClick(){this.openRequest=!this.openRequest,this.hasMouse=this.openRequest},mouseOn(){this.hasMouse=!0},mouseOff(){this.hasMouse=!1,this.closeTime=Date.now()}}},Lo=Oo;var Fo=(0,X.Z)(Lo,Bo,No,!1,null,"3584cbe8",null);const $o=Fo.exports,Ho={INTRO_PAGE:0,COMMANDS:1,ERRORS:2,EVENTS:3,DATA_TRANSFER:4,CONSTANTS:5,TEMPLATES:6,BLOCKS:7},qo={name:"AutomatorDocs",components:{AutomatorButton:Tr,AutomatorDocsCommandList:ao,AutomatorErrorPage:wo,AutomatorEventLog:Ro,AutomatorDataTransferPage:Pr,AutomatorBlocks:_s,AutomatorDocsIntroPage:co,AutomatorDocsTemplateList:fo,AutomatorDefinePage:Yr,AutomatorScriptDropdownEntryList:Uo,ExpandingControlBox:$o},data(){return{isBlock:!1,infoPaneID:1,errorCount:0,editingName:!1,isNameTooLong:!1,scripts:[],runningScriptID:0,totalChars:0,scriptCount:0,canMakeNewScript:!0}},computed:{fullScreen:{get(){return this.$viewModel.tabs.reality.automator.fullScreen},set(e){this.$viewModel.tabs.reality.automator.fullScreen=e,AutomatorData.isEditorFullscreen=e}},fullScreenIconClass(){return this.fullScreen?"fa-compress-arrows-alt":"fa-expand-arrows-alt"},fullScreenTooltip(){return this.fullScreen?"Exit full screen":"Expand to full screen"},errorTooltip(){return`Your script has ${quantify("error",this.errorCount)}`},nameTooltip(){return this.isNameTooLong?`Names cannot be longer than ${formatInt(AutomatorData.MAX_ALLOWED_SCRIPT_NAME_LENGTH)} characters!`:""},currentScriptID:{get(){return this.$viewModel.tabs.reality.automator.editorScriptID},set(e){this.$viewModel.tabs.reality.automator.editorScriptID=e,AutomatorTextUI.editor&&AutomatorTextUI.editor.performLint()}},currentScriptContent(){return player.reality.automator.scripts[this.currentScriptID].content},currentScript(){return CodeMirror.Doc(this.currentScriptContent,"automato").getValue()},errorStyle(){return{"background-color":0===this.errorCount?"":"red"}},maxTotalChars(){return AutomatorData.MAX_ALLOWED_TOTAL_CHARACTERS},maxScriptCount(){return AutomatorData.MAX_ALLOWED_SCRIPT_COUNT},panelEnum(){return Ho},importTooltip(){return this.canMakeNewScript?"Import single automator script or data":"You have too many scripts to import another!"},currentEditorScriptName(){return this.scripts.find((e=>e.id===this.currentScriptID)).name}},watch:{infoPaneID(e){player.reality.automator.currentInfoPane=e}},created(){this.on$(GAME_EVENT.GAME_LOAD,(()=>this.onGameLoad())),this.on$(GAME_EVENT.AUTOMATOR_SAVE_CHANGED,(()=>this.onGameLoad())),this.on$(GAME_EVENT.AUTOMATOR_TYPE_CHANGED,(()=>this.openMatchingAutomatorTypeDocs())),this.onGameLoad()},destroyed(){this.fullScreen=!1},methods:{update(){this.isBlock=player.reality.automator.type===jn.BLOCK,this.infoPaneID=player.reality.automator.currentInfoPane,this.errorCount=AutomatorData.currentErrors().length,this.runningScriptID=AutomatorBackend.state.topLevelScript,this.totalChars=AutomatorData.totalScriptCharacters(),this.scriptCount=Object.keys(player.reality.automator.scripts).length,this.canMakeNewScript=this.scriptCount({id:e.id,name:e.name})))},updateCurrentScriptID(){AutomatorData.recalculateErrors();const e=player.reality.automator.scripts;this.currentScriptID=player.reality.automator.state.editorScript,void 0===e[this.currentScriptID]&&(this.currentScriptID=Number(Object.keys(e)[0]),player.reality.automator.state.editorScript=this.currentScriptID,AutomatorData.clearUndoData()),this.isBlock&&BlockAutomator.hasUnparsableCommands(this.currentScript)&&""!==this.currentScript&&(AutomatorBackend.changeModes(this.currentScriptID),Modal.message.show("Some script commands were unrecognizable - defaulting to text editor.")),this.$nextTick((()=>{BlockAutomator.updateEditor(this.currentScript),!this.isBlock&&AutomatorTextUI.editor&&AutomatorTextUI.editor.performLint()}))},fixAutomatorTypeDocs(){const e=player.reality.automator;e.currentInfoPane===Ho.COMMANDS&&e.type===jn.BLOCK&&this.openMatchingAutomatorTypeDocs(),e.currentInfoPane===Ho.BLOCKS&&e.type===jn.TEXT&&this.openMatchingAutomatorTypeDocs()},openMatchingAutomatorTypeDocs(){const e=player.reality.automator;e.currentInfoPane=e.type===jn.BLOCK?Ho.BLOCKS:Ho.COMMANDS},rename(){this.editingName=!0,this.$nextTick((()=>{this.updateCurrentScriptID(),this.$refs.renameInput.value=player.reality.automator.scripts[this.currentScriptID].name,this.$refs.renameInput.focus()}))},deleteScript(){Modal.automatorScriptDelete.show({scriptID:this.currentScriptID})},nameEdited(){const e=this.$refs.renameInput.value.match(/^[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*?)[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*$/);let t="";2===e.length&&e[1].length>0&&(t=e[1]),t.length>AutomatorData.MAX_ALLOWED_SCRIPT_NAME_LENGTH?this.isNameTooLong=!0:(this.isNameTooLong=!1,player.reality.automator.scripts[this.currentScriptID].name=t,this.updateScriptList(),this.$nextTick((()=>this.editingName=!1)))},activePanelClass(e){return{"c-automator__button--active":this.infoPaneID===e}}}},Vo=qo;var Yo=(0,X.Z)(Vo,pr,yr,!1,null,"192f8680",null);const Wo=Yo.exports;var jo=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-select-theme"},[i("div",{staticClass:"l-select-theme__inner"},e._l(e.availableTypes,(function(t){return i("div",{key:t,staticClass:"o-primary-btn l-select-theme__item c-select-theme__item",on:{click:function(i){return e.setType(t)}}},[e._v(" "+e._s(e.getType(t))+" ")])})),0)])},Xo=[];const zo={types:{NONE:0,LEVEL:1,RARITY:2,SAC_VALUE:3,FILTER_SCORE:4,CURRENT_REFINE:5,MAX_REFINE:6},labels:["None","Level","Rarity","Sacrifice Value","Glyph Filter Score","Current Refinement Value","Maximum Refinement Value"]},Ko={name:"SelectGlyphInfoDropdown",computed:{availableTypes(){const e=zo.types,t=[e.NONE,e.LEVEL,e.RARITY];return GlyphSacrificeHandler.canSacrifice&&t.push(e.SAC_VALUE),EffarigUnlock.glyphFilter.isUnlocked&&t.push(e.FILTER_SCORE),Ra.unlocks.unlockGlyphAlchemy.canBeApplied&&(t.push(e.CURRENT_REFINE),t.push(e.MAX_REFINE)),t}},methods:{setType(e){player.options.showHintText.glyphInfoType=e,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)},getType(e){return zo.labels[e]}}},Zo=Ko;var Qo=(0,X.Z)(Zo,jo,Xo,!1,null,null,null);const Jo=Qo.exports;function el(e){return Array.isArray(e)?[]:{}}function tl(e,t){return e instanceof Decimal?new Decimal(e):e instanceof Set?new Set(e):!1!==t.clone&&t.isMergeableObject(e)?nl(el(e),e,t):e}function il(e,t,i){return e.concat(t).map((e=>tl(e,i)))}function al(e,t,i){const a={};return i.isMergeableObject(e)&&Object.keys(e).forEach((t=>{a[t]=tl(e[t],i)})),Object.keys(t).forEach((n=>{e[n]&&e[n]instanceof Decimal?a[n]=new Decimal(t[n]):e[n]&&e[n]instanceof Set?a[n]=new Set(t[n]):i.isMergeableObject(t[n])&&e[n]?a[n]=nl(e[n],t[n],i):a[n]=tl(t[n],i)})),a}function nl(e,t,i={}){if(i.arrayMerge=i.arrayMerge||il,i.isMergeableObject=i.isMergeableObject||rl,e instanceof Decimal)return new Decimal(t);if(e instanceof Set)return new Set(t);const a=Array.isArray(t),n=Array.isArray(e),s=a===n;return s?a?i.arrayMerge(e,t,i):al(e,t,i):tl(t,i)}function sl(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");if(!t){const e=(e,t,i)=>t.map(((t,a)=>e[a]&&e[a]instanceof Decimal?new Decimal(t):e[a]&&e[a]instanceof Set?new Set(t):i.isMergeableObject(t)&&e[a]?nl(e[a],t,i):tl(t,i)));t={arrayMerge:e}}return e.reduce(((e,i)=>nl(e,i,t)),{})}function rl(e){return ol(e)&&!ll(e)}function ol(e){return Boolean(e)&&"object"===typeof e}function ll(e){const t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t}window.player={antimatter:b.E1,dimensions:{antimatter:Array.range(0,8).map((()=>({bought:0,costBumps:0,amount:b.D0}))),infinity:Array.range(0,8).map((e=>({isUnlocked:!1,bought:0,amount:b.D0,cost:[b.E8,b.E9,b.E10,b.E20,b.E140,b.E200,b.E250,b.E280][e],baseAmount:0}))),time:Array.range(0,8).map((e=>({cost:[b.D1,b.D5,b.E2,b.E3,b.E2350,b.E2650,b.E3000,b.E3350][e],amount:b.D0,bought:0}))),multiversal:Array.range(0,8).map((e=>({cost:[new Decimal(1e25),new Decimal(1e55),new Decimal(1e105),new Decimal(1e215),new Decimal("1e333"),new Decimal("1e456"),new Decimal("1e678"),new Decimal("9.99e999")][e],amount:b.D0,bought:0})))},buyUntil10:!0,sacrificed:b.D0,achievementBits:Array.repeat(0,17),secretAchievementBits:Array.repeat(0,4),infinityUpgrades:new Set,infinityRebuyables:[0,0,0],challenge:{normal:{current:0,bestTimes:Array.repeat(Decimal.pow10(Number.MAX_VALUE),11),completedBits:0},infinity:{current:0,bestTimes:Array.repeat(Decimal.pow10(Number.MAX_VALUE),8),completedBits:0},eternity:{current:0,unlocked:0,requirementBits:0}},infinity:{upgradeBits:0},auto:{autobuyersOn:!0,disableContinuum:!1,mending:{mode:0,amount:b.D1,interval:100,increaseWithMult:!0,time:1,xHighest:b.D1,isActive:!1,lastTick:0},reality:{mode:0,rm:b.D1,glyph:0,time:0,shard:0,isActive:!1},eternity:{mode:0,amount:b.D1,increaseWithMult:!0,time:1,xHighest:b.D1,isActive:!1},bigCrunch:{cost:1,interval:15e4,mode:0,amount:b.D1,increaseWithMult:!0,time:1,xHighest:b.D1,isActive:!0,lastTick:0},galaxy:{cost:1,interval:2e4,limitGalaxies:!1,maxGalaxies:1,buyMax:!1,buyMaxInterval:0,isActive:!0,lastTick:0},dimBoost:{cost:1,interval:4e3,limitDimBoosts:!1,maxDimBoosts:1,limitUntilGalaxies:!1,galaxies:10,buyMaxInterval:0,isActive:!0,lastTick:0},tickspeed:{isUnlocked:!1,cost:1,interval:500,mode:AUTOBUYER_MODE.BUY_SINGLE,isActive:!0,lastTick:0,isBought:!1},singCap:{multiplier:1e3,isActive:!0},sacrifice:{multiplier:b.D2,isActive:!0},tesseract:{isUnlocked:!1,isActive:!0},musicglyph:{isUnlocked:!1,isActive:!0},nrru:{isUnlocked:!1,isActive:!0},nriu:{isUnlocked:!1,isActive:!0},antimatterDims:{all:Array.range(0,8).map((e=>({isUnlocked:!1,cost:1,interval:[500,600,700,800,900,1e3,1100,1200][e],bulk:1,mode:AUTOBUYER_MODE.BUY_10,isActive:!0,lastTick:0,isBought:!1}))),isActive:!0},infinityDims:{all:Array.range(0,8).map((()=>({isActive:!1,lastTick:0}))),isActive:!0},timeDims:{all:Array.range(0,8).map((()=>({isActive:!1,lastTick:0}))),isActive:!0},replicantiGalaxies:{isActive:!1},replicantiUpgrades:{all:Array.range(0,3).map((()=>({isActive:!1,lastTick:0}))),isActive:!0},timeTheorems:{isActive:!1},dilationUpgrades:{all:Array.range(0,3).concat(Array.range(11,14)).map((()=>({isActive:!1,lastTick:0}))),isActive:!0},blackHolePower:{all:Array.range(0,2).map((()=>({isActive:!1}))),isActive:!0},expoBlackHolePower:{all:Array.range(0,1).map((()=>({isActive:!1}))),isActive:!0},realityUpgrades:{all:Array.range(0,5).map((()=>({isActive:!1}))),isActive:!0},imaginaryUpgrades:{all:Array.range(0,10).map((()=>({isActive:!1}))),isActive:!0},pets:{teresa:{upgrades:Array.range(0,3).map((()=>({isActive:!0}))),isActive:!1},effarig:{upgrades:Array.range(0,3).map((()=>({isActive:!0}))),isActive:!1},enslaved:{upgrades:Array.range(0,3).map((()=>({isActive:!0}))),isActive:!1},v:{upgrades:Array.range(0,3).map((()=>({isActive:!0}))),isActive:!1},ra:{upgrades:Array.range(0,3).map((()=>({isActive:!0}))),isActive:!1},laitela:{upgrades:Array.range(0,7).map((()=>({isActive:!0}))),isActive:!1},pelle:{upgrades:Array.range(0,3).map((()=>({isActive:!0}))),isActive:!1}},darkMatterDims:{isActive:!1,lastTick:0},ascension:{isActive:!1,lastTick:0},annihilation:{isActive:!1,multiplier:1.05},singularity:{isActive:!1},ipMultBuyer:{isActive:!1},epMultBuyer:{isActive:!1},nrru:{isActive:!1,lastTick:0},nriu:{isActive:!1,lastTick:0},pelleRebuyableUpgrades:{all:Array.range(0,5).map((()=>({isActive:!1}))),isActive:!0},pelleUpgrades:{isActive:!1},galgenUpgrades:{all:Array.range(0,5).map((()=>({isActive:!1}))),isActive:!0},galgenSac:{isActive:!1}},infinityPoints:b.D0,infinities:b.D0,infinitiesBanked:b.D0,dimensionBoosts:0,galaxies:0,news:{seen:{},specialTickerData:{uselessNewsClicks:0,paperclips:0,newsQueuePosition:1e3,eiffelTowerChapter:0},totalSeen:0},lastUpdate:(new Date).getTime(),backupTimer:0,chall2Pow:1,chall3Pow:b.D0_01,matter:b.D1,chall9TickspeedCostBumps:0,chall8TotalSacrifice:b.D1,ic2Count:0,partInfinityPoint:0,partInfinitied:0,break:!1,secretUnlocks:{themes:new Set,viewSecretTS:!1,cancerAchievements:!1},shownRuns:{Reality:!0,Eternity:!0,Infinity:!0},requirementChecks:{infinity:{maxAll:!1,noSacrifice:!0,noAD8:!0},eternity:{onlyAD1:!0,onlyAD8:!0,noAD1:!0,noRG:!0},reality:{noAM:!0,noTriads:!0,noTriad305:!0,noTriad307:!0,noPurchasedTT:!0,noInfinities:!0,noEternities:!0,noContinuum:!0,maxID1:b.D0,maxStudies:0,maxGlyphs:0,slowestBH:1},mending:{isEnd:!1,mmeleven:8},permanent:{emojiGalaxies:0,singleTickspeed:0,perkTreeDragging:0}},records:{gameCreatedTime:Date.now(),totalTimePlayed:b.D0,timePlayedAtBHUnlock:b.D0,realTimePlayed:0,realTimeDoomed:0,fullGameCompletions:0,previousRunRealTime:0,totalAntimatter:b.E1,recentInfinities:Array.range(0,10).map((()=>[Decimal.pow10(Number.MAX_VALUE),Number.MAX_VALUE,b.D1,b.D1,""])),recentEternities:Array.range(0,10).map((()=>[Decimal.pow10(Number.MAX_VALUE),Number.MAX_VALUE,b.D1,b.D1,"",b.D0])),recentRealities:Array.range(0,10).map((()=>[Decimal.pow10(Number.MAX_VALUE),Number.MAX_VALUE,b.D1,1,"",0,0])),thisInfinity:{time:b.D0,realTime:0,lastBuyTime:b.D0,maxAM:b.D0,bestIPmin:b.D0,bestIPminVal:b.D0},bestInfinity:{time:Decimal.pow10(Number.MAX_VALUE),realTime:Number.MAX_VALUE,bestIPminEternity:b.D0,bestIPminReality:b.D0},thisEternity:{time:b.D0,realTime:0,maxAM:b.D0,maxIP:b.D0,bestIPMsWithoutMaxAll:b.D0,bestEPmin:b.D0,bestEPminVal:b.D0,bestInfinitiesPerMs:b.D0},bestEternity:{time:Decimal.pow10(Number.MAX_VALUE),realTime:Number.MAX_VALUE,bestEPminReality:b.D0},thisReality:{time:b.D0,realTime:0,maxAM:b.D0,maxIP:b.D0,maxEP:b.D0,bestEternitiesPerMs:b.D0,maxReplicanti:b.D0,maxDT:b.D0,bestRSmin:b.D0,bestRSminVal:b.D0,remWithoutGG:0},bestReality:{time:Decimal.pow10(Number.MAX_VALUE),realTime:Number.MAX_VALUE,glyphStrength:0,RM:b.D0,RMSet:[],RMmin:b.D0,RMminSet:[],glyphLevel:0,glyphLevelSet:[],bestEP:b.D0,bestEPSet:[],speedSet:[],iMCapSet:[],laitelaSet:[],remWithoutGG:0},thisMend:{time:b.D0,realTime:0,maxAM:b.D0,maxIP:b.D0,maxEP:b.D0,maxRM:b.D0,maxiM:0,maxRem:0},bestMend:{time:Decimal.pow10(Number.MAX_VALUE),realTime:Number.MAX_VALUE}},speedrun:{isUnlocked:!0,isActive:!1,isSegmented:!1,usedSTD:!1,hasStarted:!1,hideInfo:!1,displayAllMilestones:!1,startDate:0,name:"",offlineTimeUsed:0,records:Array.repeat(0,26),achievementTimes:{},seedSelection:SPEEDRUN_SEED_STATE.FIXED,initialSeed:0,previousRuns:{}},IPMultPurchases:0,version:58,infinityPower:b.D1,postC4Tier:0,eternityPoints:b.D0,eternities:b.D0,eternityUpgrades:new Set,epmultUpgrades:0,timeShards:b.D0,totalTickGained:0,totalTickBought:0,mends:b.D0,corruptedFragments:b.D0,galBoostPoints:b.D0,mending:{upgradeBits:0,warpUpgradeBits:0,corruptionUpgradeBits:0,corruptionUpgReqs:0,warpUpgReqs:0,reqLock:{mending:0,warp:0,corruption:0},rebuyables:{1:0,6:0,11:0,16:0},warpRebuyables:{1:0,2:0,3:0,4:0,5:0},corruptionRebuyables:{1:0,2:0,3:0,4:0,5:0},corruption:[0,0,0,0,0,0,0,0,0,0],corruptedFragments:0,corruptionChallenge:{corruptedMend:!1,records:[0,0,0,0,0,0,0,0,0,0],recordScore:0},spentCF:0,corruptNext:!1},replicanti:{unl:!1,amount:b.D0,chance:.01,chanceCost:b.E150,interval:b.E3,intervalCost:b.E140,boughtGalaxyCap:0,galaxies:0,galCost:b.E170},timestudy:{theorem:b.D0,maxTheorem:b.D0,amBought:0,ipBought:0,epBought:0,studies:[],shopMinimized:!1,preferredPaths:[[],0],presets:new Array(6).fill({name:"",studies:""})},eternityChalls:{},respec:!1,eterc8ids:50,eterc8repl:40,dilation:{studies:[],active:!1,tachyonParticles:b.D0,dilatedTime:b.D0,nextThreshold:b.E3,baseTachyonGalaxies:0,totalTachyonGalaxies:0,upgrades:new Set,rebuyables:{1:0,2:0,3:0,11:0,12:0,13:0},lastEP:b.DM1},realities:0,partSimulatedReality:0,reality:{warped:!1,realityMachines:b.D0,maxRM:b.D0,imaginaryMachines:0,iMCap:0,glyphs:{active:[],inventory:[],sac:{power:b.D0,infinity:b.D0,time:b.D0,replication:b.D0,dilation:b.D0,effarig:b.D0,reality:b.D0},undo:[],sets:new Array(7).fill({name:"",glyphs:[]}),protectedRows:2,filter:{select:AUTO_GLYPH_SCORE.LOWEST_SACRIFICE,trash:AUTO_GLYPH_REJECT.SACRIFICE,simple:0,types:mr.list.filter((e=>ALCHEMY_BASIC_GLYPH_TYPES.includes(e.id))).mapToObject((e=>e.id),(e=>({rarity:0,score:0,effectCount:0,specifiedMask:0,effectScores:Array.repeat(0,e.effects.length)})))},createdRealityGlyph:!1,cosmetics:{active:!1,glowNotification:!1,unlockedFromNG:[],symbolMap:{},colorMap:{}}},initialSeed:Math.floor(Date.now()*Math.random()+1),seed:1,secondGaussian:1e6,musicSeed:Math.floor(Date.now()*Math.random()+3168660683),musicSecondGaussian:1e6,rebuyables:{1:0,2:0,3:0,4:0,5:0},upgradeBits:0,upgReqs:0,imaginaryUpgradeBits:0,imaginaryUpgReqs:0,imaginaryRebuyables:{1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0},reqLock:{reality:0,imaginary:0},perks:new Set,respec:!1,showGlyphSacrifice:!1,showSidebarPanel:GLYPH_SIDEBAR_MODE.INVENTORY_MANAGEMENT,autoSort:0,autoCollapse:!1,autoAutoClean:!1,applyFilterToPurge:!1,autoEquip:0,moveGlyphsOnProtection:!1,perkPoints:0,unlockedEC:0,autoEC:!0,lastAutoEC:0,partEternitied:b.D0,autoAchieve:!0,gainedAutoAchievements:!0,automator:{state:{mode:Yn.STOP,topLevelScript:0,editorScript:0,repeat:!0,forceRestart:!0,followExecution:!0,stack:[]},scripts:{},constants:{},constantSortOrder:[],execTimer:0,type:jn.TEXT,forceUnlock:!1,currentInfoPane:Ho.INTRO_PAGE},achTimer:b.D0,hasCheckedFilter:!1},blackHole:Array.range(0,2).map((e=>({id:e,intervalUpgrades:0,powerUpgrades:0,durationUpgrades:0,phase:0,active:!1,unlocked:!1,activations:0}))),blackHolePause:!1,blackHoleAutoPauseMode:0,blackHolePauseTime:0,blackHoleNegative:1,expoBlackHole:Array.range(0,1).map((e=>({id:e,intervalUpgrades:0,powerUpgrades:0,durationUpgrades:0,phase:0,active:!1,unlocked:!1,activations:0}))),expoBlackHolePause:!1,expoBlackHoleAutoPauseMode:0,expoBlackHolePauseTime:0,expoBlackHoleNegative:1,celestials:{teresa:{pouredAmount:0,quoteBits:0,unlockBits:0,run:!1,bestRunAM:b.D1,bestAMSet:[],perkShop:Array.repeat(0,5),lastRepeatedMachines:b.D0},effarig:{relicShards:b.D0,unlockBits:0,run:!1,quoteBits:0,glyphWeights:{ep:25,repl:25,dt:25,eternities:25},autoAdjustGlyphWeights:!1},enslaved:{isStoring:!1,stored:b.D0,isStoringReal:!1,storedReal:0,autoStoreReal:!1,isAutoReleasing:!1,quoteBits:0,unlocks:[],run:!1,completed:!1,tesseracts:0,hasSecretStudy:!1,feltEternity:!1,progressBits:0,hintBits:0,hintUnlockProgress:0,glyphHintsGiven:0,zeroHintTime:0},v:{unlockBits:0,run:!1,superrun:!1,beingInitialized:!1,quoteBits:0,runUnlocks:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],goalReductionSteps:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],STSpent:0,runGlyphs:[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],runRecords:[-10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],flip:V_FLIP.NORMAL},ra:{pets:{teresa:{level:1,memories:0,memoryChunks:0,memoryUpgrades:0,chunkUpgrades:0},effarig:{level:1,memories:0,memoryChunks:0,memoryUpgrades:0,chunkUpgrades:0},enslaved:{level:1,memories:0,memoryChunks:0,memoryUpgrades:0,chunkUpgrades:0},v:{level:1,memories:0,memoryChunks:0,memoryUpgrades:0,chunkUpgrades:0},ra:{level:1,memories:0,memoryChunks:0,memoryUpgrades:0,chunkUpgrades:0},laitela:{level:1,memories:0,memoryChunks:0,memoryUpgrades:0,chunkUpgrades:0},pelle:{level:1,memories:0,memoryChunks:0,memoryUpgrades:0,chunkUpgrades:0}},alchemy:Array.repeat(0,21).map((()=>({amount:0,reaction:!1}))),highestRefinementValue:{power:0,infinity:0,time:0,replication:0,dilation:0,effarig:0},quoteBits:0,momentumTime:0,unlockBits:0,raPoints:b.D0,modUnlockBits:[0,0,0],run:!1,charged:new Set,disCharge:!1,breakCharged:new Set,breakDischarge:!1,peakGamespeed:b.D1,petWithRemembrance:"",upgrades:new Set,rebuyables:{weakenTeresaScaling:0,weakenEffarigScaling:0,weakenEnslavedScaling:0,weakenVScaling:0,weakenRaScaling:0,weakenLaitelaScaling:0,weakenPelleScaling:0,incTeresaXPGain:0,incEffarigXPGain:0,incEnslavedXPGain:0,incVXPGain:0,incRaXPGain:0,incLaitelaXPGain:0,incPelleXPGain:0},permanentMemories:{ra2:!1,lai50:!1,lai65:!1}},laitela:{darkMatter:b.D0,maxDarkMatter:b.D1,run:!1,quoteBits:0,dimensions:Array.range(0,8).map((()=>({amount:b.D1,intervalUpgrades:0,powerDMUpgrades:0,powerDEUpgrades:0,timeSinceLastUpdate:0,ascensionCount:0}))),entropy:0,thisCompletion:3600,fastestCompletion:3600,difficultyTier:0,upgrades:{},darkMatterMult:1,darkEnergy:0,singularitySorting:{displayResource:0,sortResource:0,showCompleted:0,sortOrder:0},singularities:0,singularityCapIncreases:0,lastCheckedMilestones:0,milestoneGlow:!0,isHoldingLClick:!1,holdStart:0,heldTier:0,heldType:""},pelle:{doomed:!1,upgrades:new Set,remnants:0,realityShards:b.D0,records:{totalAntimatter:b.D0,totalInfinityPoints:b.D0,totalEternityPoints:b.D0},rebuyables:{antimatterDimensionMult:0,timeSpeedMult:0,glyphLevels:0,infConversion:0,galaxyPower:0,galaxyGeneratorAdditive:0,galaxyGeneratorMultiplicative:0,galaxyGeneratorAntimatterMult:0,galaxyGeneratorIPMult:0,galaxyGeneratorEPMult:0},rifts:{vacuum:{fill:b.D0,active:!1,reducedTo:1},decay:{fill:b.D0,active:!1,percentageSpent:0,reducedTo:1},chaos:{fill:0,active:!1,reducedTo:1},recursion:{fill:b.D0,active:!1,reducedTo:1},paradox:{fill:b.D0,active:!1,reducedTo:1}},progressBits:0,galaxyGenerator:{unlocked:!1,spentGalaxies:0,generatedGalaxies:0,phase:0,sacrificeActive:!1},quoteBits:0,collapsed:{upgrades:!1,rifts:!1,galaxies:!1},showBought:!1},destroyer:{quoteBits:0},kohler:{run:!1,quoteBits:0,unlockProgress:0,unlockMilestone:[!1,!1,!1,!1,!1,!1,!1]}},isGameEnd:!1,tabNotifications:new Set,triggeredTabNotificationBits:0,tutorialState:0,tutorialActive:!0,options:{news:{enabled:!0,repeatBuffer:40,AIChance:0,speed:1,includeAnimated:!0},notation:"Mixed scientific",retryChallenge:!1,retryCelestial:!1,showAllChallenges:!1,cloudEnabled:!0,hideGoogleName:!1,showCloudModal:!0,forceCloudOverwrite:!1,syncSaveIntervals:!0,hotkeys:!0,themeClassic:"Normal",themeModern:"Normal",themeSynergism:"Normal",commas:!0,updateRate:33,UIType:"Modern",offlineProgress:!0,loadBackupWithoutOffline:!1,automaticTabSwitching:!0,respecIntoProtected:!1,offlineTicks:1e5,hibernationCatchup:!0,statTabResources:0,multiplierTab:{currTab:0,showAltGroup:!1,replacePowers:!1},autosaveInterval:3e4,showTimeSinceSave:!0,saveFileName:"",exportedFileCount:0,hideCompletedAchievementRows:!1,glyphTextColors:!0,headerTextColored:!1,showNewGlyphIcon:!0,showUnequippedGlyphIcon:!0,highContrastRarity:!1,swapGlyphColors:!1,hideAlterationEffects:!1,ignoreGlyphEffects:!1,ignoreGlyphLevel:!1,ignoreGlyphRarity:!1,glyphBG:GLYPH_BG_SETTING.AUTO,glyphBorders:!0,showHintText:{showPercentage:!0,achievements:!0,achievementUnlockStates:!0,challenges:!0,studies:!0,glyphEffectDots:!0,realityUpgrades:!0,mendingUpgrades:!0,perks:!0,alchemy:!0,glyphInfoType:zo.types.NONE,showGlyphInfoByDefault:!1},animations:{bigCrunch:!0,eternity:!0,dilation:!0,tachyonParticles:!0,reality:!0,background:!0,blobSnowflakes:16},confirmations:{armageddon:!0,sacrifice:!0,challenges:!0,exitChallenge:!0,eternity:!0,dilation:!0,resetReality:!0,glyphReplace:!0,glyphSacrifice:!0,autoClean:!0,sacrificeAll:!0,glyphSelection:!0,glyphUndo:!0,deleteGlyphSetSave:!0,glyphRefine:!0,bigCrunch:!0,replicantiGalaxy:!0,antimatterGalaxy:!0,dimensionBoost:!0,switchAutomatorMode:!0,respecIAP:!0,mending:!0},awayProgress:{antimatter:!0,dimensionBoosts:!0,antimatterGalaxies:!0,infinities:!0,infinityPoints:!0,replicanti:!0,replicantiGalaxies:!0,eternities:!0,eternityPoints:!0,tachyonParticles:!0,dilatedTime:!0,tachyonGalaxies:!0,timeTheorems:!0,achievementCount:!0,realities:!0,realityMachines:!0,imaginaryMachines:!0,relicShards:!0,darkMatter:!0,darkEnergy:!0,singularities:!0,celestialMemories:!0,blackHole:!0,realityShards:!0,mends:!0,mendingPoints:!0},hiddenTabBits:0,hiddenSubtabBits:Array.repeat(0,11),lastOpenTab:0,lastOpenSubtab:Array.repeat(0,11),perkLayout:0,perkPhysicsEnabled:!0,automatorEvents:{newestFirst:!1,timestampType:0,maxEntries:200,clearOnReality:!0,clearOnRestart:!0},invertTTgenDisplay:!1,autoRealityForFilter:!1},IAP:{enabled:!1,checkoutSession:{id:!1}},mendingPoints:b.D0,mends:b.D0,mendingUpgrades:new Set,mvrmultUpgrades:0,devSave:!0};const cl={defaultStart:sl([{},player]),get isInMatterChallenge(){return NormalChallenge(11).isRunning||InfinityChallenge(6).isRunning},get isInAntimatterChallenge(){return NormalChallenge.isRunning||InfinityChallenge.isRunning},get antimatterChallenge(){return NormalChallenge.current||InfinityChallenge.current},get isInAnyChallenge(){return this.isInAntimatterChallenge||EternityChallenge.isRunning},get anyChallenge(){return this.antimatterChallenge||EternityChallenge.current},get canCrunch(){var e;if(Enslaved.isRunning&&Enslaved.BROKEN_CHALLENGES.includes(null===(e=NormalChallenge.current)||void 0===e?void 0:e.id))return!1;const t=NormalChallenge.current||InfinityChallenge.current,i=void 0===t?Decimal.NUMBER_MAX_VALUE:t.goal;return player.records.thisInfinity.maxAM.gte(i)},get canEternity(){return player.records.thisEternity.maxIP.gte(cl.eternityGoal)},get canMend(){return(UZ.unlocks.exitDoom.isUnlocked?Pelle.isDoomed:player.isGameEnd)||MendingMilestone.six.isReached&&player.antimatter.exponent>=9e15},get bestRunIPPM(){return GameCache.bestRunIPPM.value},get averageRealTimePerEternity(){return GameCache.averageRealTimePerEternity.value},get tickSpeedMultDecrease(){return GameCache.tickSpeedMultDecrease.value},get dimensionMultDecrease(){return GameCache.dimensionMultDecrease.value},get infinityGoal(){const e=NormalChallenge.current||InfinityChallenge.current;return void 0===e?Decimal.NUMBER_MAX_VALUE:e.goal},get infinityLimit(){const e=NormalChallenge.current||InfinityChallenge.current;return Pelle.isDoomed&&Pelle.hasGalaxyGenerator||!player.reality.warped?void 0===e?Decimal.MAX_VALUE:e.goal:void 0===e?b.WARP_LIMIT:e.goal},get eternityGoal(){return EternityChallenge.isRunning?EternityChallenge.current.currentGoal:requiredIPForEP(1)},get automatorUnlocked(){return AutomatorPoints.totalPoints>=AutomatorPoints.pointsForAutomator||player.reality.automator.forceUnlock},resetRequirements(e){const t=player.requirementChecks.reality.maxGlyphs;switch(e){case"mending":player.requirementChecks.mending={noAM:!0,mmeleven:8};case"reality":player.requirementChecks.reality={noAM:!0,noTriads:!0,noTriad305:!0,noTriad307:!0,noPurchasedTT:!0,noInfinities:!0,noEternities:!0,noContinuum:player.auto.disableContinuum,maxID1:b.D0,maxStudies:0,maxGlyphs:t,slowestBH:BlackHoles.areNegative?player.blackHoleNegative:1};case"eternity":player.requirementChecks.eternity={onlyAD1:!0,onlyAD8:!0,noAD1:!0,noRG:!0};case"infinity":player.requirementChecks.infinity={maxAll:!1,noSacrifice:!0,noAD8:!0};break;default:throw Error("Unrecognized prestige layer for requirement reset")}}};function ul(e){function t(e){return null!==e&&"object"===typeof e&&!(e instanceof Decimal)}for(const i in e){if(!Object.prototype.hasOwnProperty.call(e,i))continue;if("automator"===i)continue;let a=e[i];t(a)?ul(a):("number"===typeof a&&Object.defineProperty(e,i,{enumerable:!0,configurable:!0,get:()=>a,set:function(e){if(null===e||void 0===e)throw new Error("null/undefined player property assignment");if("number"!==typeof e)throw new Error("Non-Number assignment to Number player property");if(!isFinite(e))throw new Error("NaN player property assignment");a=e}}),a instanceof Decimal&&Object.defineProperty(e,i,{enumerable:!0,configurable:!0,get:()=>a,set:function(e){if(null===e||void 0===e)throw new Error("null/undefined player property assignment");if(!(e instanceof Decimal))throw new Error("Non-Decimal assignment to Decimal player property");if(!isFinite(e.mantissa)||!isFinite(e.exponent))throw new Error("NaN player property assignment");a=e}}))}}const dl={container:document.getElementById("performance-stats"),samplePeriod:1e4,isOn:!1,currentBlocks:[],stats:{},turnOn(){this.isOn=!0,this.container.style.display="flex"},turnOff(){this.isOn=!1,this.container.style.display="none",this.stats={}},toggle(){this.isOn?this.turnOff():this.turnOn()},start(e){if(!this.isOn)return;const t=this.currentBlocks.length>0?this.currentBlocks.last().childBlocks:this.stats;let i=t[e];void 0===i&&(i={records:[],childBlocks:{}},t[e]=i),this.currentBlocks.push(i);const a={};i.records.push(a),a.timestamp=performance.now()},end(){if(!this.isOn)return;const e=performance.now(),t=this.currentBlocks.pop(),i=t.records.last();i.duration=e-i.timestamp},render(){if(!this.isOn)return;let e=-1,t="";const i=this.samplePeriod;let a;function n(s){e++;for(const r in s){if(!Object.prototype.hasOwnProperty.call(s,r))continue;const o=s[r],l=o.records;while(l.length>1&&l.last().timestamp-l.first().timestamp>i)l.shift();if(t+=`${"-".repeat(e)}${r}: `,l.length>0){let e=0,i=Number.MIN_VALUE,n=Number.MAX_VALUE;for(const t of l){const a=t.duration;e+=a,a>i&&(i=a),a${t}`),t+=`${s.toFixed(3)}/${n.toFixed(3)}/${i.toFixed(3)}`}t+="
",n(o.childBlocks)}e--}n(this.stats),this.container.innerHTML=t}};class hl extends R{constructor(e){super(e),this.registerEvents(e.checkEvent,(()=>this.tryUnlock()))}get name(){return this.config.name}get shortDescription(){return this.config.shortDescription?this.config.shortDescription():""}get requirement(){return"function"===typeof this.config.requirement?this.config.requirement():this.config.requirement}get lockEvent(){return"function"===typeof this.config.lockEvent?this.config.lockEvent():this.config.lockEvent}get currency(){return Mi.mendingPoints}get bitIndex(){return this.id}get bits(){return player.mending.upgradeBits}set bits(e){player.mending.upgradeBits=e}get hasPlayerLock(){return!1}get isLockingMechanics(){var e,t,i;const a=null!==(e=null===(t=(i=this.config).bypassLock)||void 0===t?void 0:t.call(i))&&void 0!==e&&e;return this.hasPlayerLock&&this.isPossible&&!a&&!this.isAvailableForPurchase}get isAvailableForPurchase(){return!0}get isPossible(){return!this.config.hasFailed||!this.config.hasFailed()}tryUnlock(){const e=PlayerProgress.mendingUnlocked();e&&!this.isAvailableForPurchase&&this.config.checkRequirement()&&(player.mending.upgReqs|=1<{player.celestials.v.runUnlocks[t]=Math.max(e,3)})),V.updateTotalRunUnlocks();break;case 19:Ra.checkForUnlocks();break;default:}}}class ml extends M{get currency(){return Mi.mendingPoints}get boughtAmount(){return player.mending.rebuyables[this.id]}set boughtAmount(e){player.mending.rebuyables[this.id]=e}}hl.index=mapGameData(GameDatabase.mending.upgrades,(e=>e.id%5===1?new ml(e):new hl(e)));const pl=e=>hl.index[e],yl={all:hl.index.compact(),get allBought(){return 1+(player.mending.upgradeBits>>6)===1<{const e=e=>pl(e).isBought;let t=1;for(let i=1;i<20;i+=5)t<<=e(i+1)&&e(i+2)&&e(i+3)&&e(i+4);return t}));class gl{constructor(e){this._getValue=e,gl.registerLazy(this)}static get registrar(){return void 0===gl._registrar&&(gl._registrar=[]),gl._registrar}static registerLazy(e){gl.registrar.push(e)}static invalidateAll(){for(const e of gl.registrar)e.invalidate()}get value(){return void 0===this._value&&(this._value=this._getValue()),this._value}invalidate(){this._value=void 0}invalidateOn(...e){for(const t of e)EventHub.logic.on(t,(()=>this.invalidate()));return this}}window.Lazy=gl;const vl={worstChallengeTime:new gl((()=>Decimal.max(player.challenge.normal.bestTimes))),bestRunIPPM:new gl((()=>player.records.recentInfinities.map((e=>ratePerMinute(e[2],e[0]))).reduce(Decimal.maxReducer))),averageRealTimePerEternity:new gl((()=>player.records.recentEternities.map((e=>e[1])).reduce(Number.sumReducer)/(1e3*player.records.recentEternities.length))),tickSpeedMultDecrease:new gl((()=>pl(8).isBought?1.2:10-(BreakInfinityUpgrade.tickspeedCostMult.effectValue+(EternityChallenge(11).completions>=1?EternityChallenge(11).reward.effectValue:0)))),dimensionMultDecrease:new gl((()=>pl(8).isBought?1.5:10-(BreakInfinityUpgrade.dimCostMult.effectValue+(EternityChallenge(6).completions>=1?EternityChallenge(6).reward.effectValue:0)))),timeStudies:new gl((()=>NormalTimeStudyState.studies.map((e=>player.timestudy.studies.includes(e.id))))),currentStudyTree:new gl((()=>new TimeStudyTree(TimeStudyTree.currentStudies))),achievementPeriod:new gl((()=>TimeSpan.fromMinutes(30-Effects.sum(Perk.achievementGroup1,Perk.achievementGroup2,Perk.achievementGroup3,Perk.achievementGroup4)).totalMilliseconds)),buyablePerks:new gl((()=>Perks.all.filter((e=>e.canBeBought)))),cheapestAntimatterAutobuyer:new gl((()=>Autobuyer.antimatterDimension.zeroIndexed.concat(Autobuyer.tickspeed).filter((e=>!(e.isBought||e.isUnlocked))).map((e=>e.antimatterCost.toNumber())).min())),antimatterDimensionCommonMultiplier:new gl((()=>antimatterDimensionCommonMultiplier())),antimatterDimensionFinalMultipliers:Array.range(0,9).map((e=>new gl((()=>getDimensionFinalMultiplierUncached(e))))),infinityDimensionCommonMultiplier:new gl((()=>infinityDimensionCommonMultiplier())),timeDimensionCommonMultiplier:new gl((()=>timeDimensionCommonMultiplier())),multiversalDimensionCommonMultiplierDimensionCommonMultiplier:new gl((()=>multiversalDimensionCommonMultiplier())),glyphInventorySpace:new gl((()=>Glyphs.freeInventorySpace)),glyphEffects:new gl((()=>orderedEffectList.mapToObject((e=>e),(e=>getAdjustedGlyphEffectUncached(e))))),staticGlyphWeights:new gl((()=>staticGlyphWeights())),logTotalGlyphSacrifice:new gl((()=>GlyphSacrificeHandler.logTotalSacrifice)),totalIPMult:new gl((()=>totalIPMult())),challengeTimeSum:new gl((()=>player.challenge.normal.bestTimes.sumD())),infinityChallengeTimeSum:new gl((()=>{let e=new Decimal(0);for(let t=0;t<8;t++)e.add(player.challenge.infinity.bestTimes);return e})),multiversalDimensionCommonMultiplier:new gl((()=>multiversalDimensionCommonMultiplier()))};EventHub.logic.on(GAME_EVENT.GLYPHS_CHANGED,(()=>{vl.glyphInventorySpace.invalidate(),vl.glyphEffects.invalidate(),vl.staticGlyphWeights.invalidate()}),vl.glyphEffects),vl.antimatterDimensionFinalMultipliers.invalidate=function(){for(const e of this)e.invalidate()};const bl=function(){const e=(e,t)=>{let i=-1;return{start(){if(this.isStarted)throw new Error("An already started interval cannot be started again.");i=setInterval(e,"function"===typeof t?t():t)},get isStarted(){return-1!==i},stop(){clearInterval(i),i=-1},restart(){this.stop(),this.start()}}};return{all(){return Object.values(bl).filter((e=>Object.prototype.hasOwnProperty.call(e,"start")&&Object.prototype.hasOwnProperty.call(e,"stop")))},start(){for(const e of this.all())e.start()},stop(){for(const e of this.all())e.stop()},restart(){for(const e of this.all())e.restart()},gameLoop:e((()=>gameLoop()),(()=>player.options.updateRate)),save:e((()=>GameStorage.save()),(()=>player.options.autosaveInterval-Math.clampMin(0,Date.now()-GameStorage.lastSaveTime))),checkCloudSave:e((()=>{player.options.cloudEnabled&&Cloud.loggedIn&&Cloud.saveCheck()}),6e5),checkEverySecond:e((()=>{Math.random()<1e-5&&SecretAchievement(18).unlock(),GameStorage.tryOnlineBackups()}),1e3),checkForUpdates:e((()=>{isLocalEnvironment()||fetch("version.txt").then((e=>e.json())).then((e=>{e.version>player.version&&Modal.message.show(e.message,{callback:updateRefresh},3)}))}),6e4)}}();var El=i(2441),Tl=i.n(El);const wl={};for(let V=1;V<=9;V++)wl[V+96]=`num${V}`;function kl(e){return e.split("+")}Tl().addKeycodes(wl);const Cl=["ctrl","shift","alt","mod"];function Al(e){return e.find((e=>!Cl.includes(e)))}class _l{constructor(e){this.key=e}setAction(e,t){e.includes("shift")?this.shiftAction=t:this.action=t}start(){this.isRunning||(this.isRunning=!0,this.executeAction(),this.interval=setInterval((()=>{clearInterval(this.interval),this.executeAction(),this.interval=setInterval((()=>this.executeAction()),40)}),500))}executeAction(){ui.view.shiftDown&&void 0!==this.shiftAction?this.shiftAction():void 0!==this.action&&this.action()}probablyStop(){ui.view.shiftDown&&this.stop()}stop(){this.isRunning=!1,this.interval&&clearInterval(this.interval),this.interval=void 0}}class Sl{static stopSpins(){for(const e of Dl)e.stop()}static bind(e,t,i){Tl().bind(e,(()=>Rl(t)),i)}static bindRepeatable(e,t){this._bindSpin(e,(()=>Rl(t)))}static bindHotkey(e,t,i){Tl().bind(e,(()=>Ml(t)),i)}static bindRepeatableHotkey(e,t){this._bindSpin(e,(()=>Ml(t)))}static _bindSpin(e,t){const i=kl(e),a=Al(i);let n=Dl.find((e=>e.key===a));void 0===n&&(n=new _l(a),Dl.push(n),Tl().bind(a,(()=>n.start()),"keydown"),Tl().bind(a,(()=>n.stop()),"keyup")),e!==a&&(Tl().bind(e,(()=>n.start()),"keydown"),Tl().bind(e,(()=>n.probablyStop()),"keyup")),n.setAction(i,t)}static disable(){this.stopSpins(),Tl().reset()}}const Dl=[];function Rl(e){if(void 0===ui.$viewModel.modal.progressBar)return e()}function Ml(e){if(player.options.hotkeys&&"text"!==document.activeElement.type&&"textarea"!==document.activeElement.type)return Rl(e)}class Il{constructor(e){this.name=e,this.__module__=f&&void 0!==window.require?window.require(e):void 0}get isLoaded(){return void 0!==this.__module__}makePromise(e){if(!this.isLoaded)throw Error(`Node module "${this.name}" is not loaded.`);return new Promise(((t,i)=>{e(this.__module__,t,i)}))}safeCall(e,t){if(!this.isLoaded)throw Error(`Node module "${this.name}" is not loaded.`);try{return e(this.__module__)}catch(i){return console.error(`Failed to make a call to node module "${this.name}".`),console.error(i),t}}}const xl=new Il("electron");function Pl(){return xl.isLoaded}function Gl(e){return xl.safeCall((t=>t.webFrame.setZoomFactor(e)))}function Ul(e){return xl.safeCall((t=>t.shell.openExternal(e)))}const Bl=.5,Nl=1.5;let Ol=1;const Ll={initialize(){this.isActive&&(Ol=Number(localStorage.getItem("Zoom")),Ol=Number.isFinite(Ol)?Ol:1,window.addEventListener("resize",(()=>this.updateZoom())))},get isActive(){return Pl()},increaseZoom(){this.isActive&&(Ol>Nl?GameUI.notify.info("Zoom Level is at Maximum"):this.zoomFactor=Math.round(10*(Ol+.1))/10)},decreaseZoom(){this.isActive&&(Ol=0;t--)if(e[t].hasReached())return e[t];throw Error("No valid progress stage found")},get challengeState(){const e=Zi.challenges;for(let t=0;te()))).join(" | ")}};function $l(e){Pl()?Ul(e):window.open(e,"_blank").focus()}i(8862);var Hl="undefined"!=typeof Hl?Hl:{};Hl.settings||(Hl.settings={titleId:null,developerSecretKey:null,GlobalHeaderInjection:null,productionServerUrl:".playfabapi.com"}),Hl._internalSettings||(Hl._internalSettings={entityToken:null,sdkVersion:"1.136.230206",requestGetParams:{sdk:"JavaScriptSDK-1.136.230206"},sessionTicket:null,verticalName:null,errorTitleId:"Must be have PlayFab.settings.titleId set to call this method",errorLoggedIn:"Must be logged in to call this method",errorEntityToken:"You must successfully call GetEntityToken before calling this",errorSecretKey:"Must have PlayFab.settings.developerSecretKey set to call this method",GetServerUrl:function(){return"http"!==Hl.settings.productionServerUrl.substring(0,4)?Hl._internalSettings.verticalName?"https://"+Hl._internalSettings.verticalName+Hl.settings.productionServerUrl:"https://"+Hl.settings.titleId+Hl.settings.productionServerUrl:Hl.settings.productionServerUrl},InjectHeaders:function(e,t){if(t)for(var i in t)try{e.setRequestHeader(gHeaderKey,t[i])}catch(a){console.log("Failed to append header: "+i+" = "+t[i]+"Error: "+a)}},ExecuteRequest:function(e,t,i,a,n,s,r){var o=new Promise((function(o,l){if(null!=n&&"function"!==typeof n)throw"Callback must be null or a function";null==t&&(t={});var c=new Date,u=JSON.stringify(t),d=[e],h=Hl._internalSettings.requestGetParams;if(null!=h){var m=!0;for(var p in h)m?(d.push("?"),m=!1):d.push("&"),d.push(p),d.push("="),d.push(h[p])}var y=d.join(""),f=new XMLHttpRequest;f.open("POST",y,!0),f.setRequestHeader("Content-Type","application/json"),f.setRequestHeader("X-PlayFabSDK","JavaScriptSDK-"+Hl._internalSettings.sdkVersion),null!=i&&f.setRequestHeader(i,a),Hl._internalSettings.InjectHeaders(f,Hl.settings.GlobalHeaderInjection),Hl._internalSettings.InjectHeaders(f,r),f.onloadend=function(){if(null!=n){var e=Hl._internalSettings.GetPlayFabResponse(t,f,c,s);200===e.code?n(e,null):n(null,e)}},f.onerror=function(){if(null!=n){var e=Hl._internalSettings.GetPlayFabResponse(t,f,c,s);n(null,e)}},f.send(u),f.onreadystatechange=function(){if(4===this.readyState){var e=Hl._internalSettings.GetPlayFabResponse(t,this,c,s);200===this.status?o(e):l(e)}}}));return o},GetPlayFabResponse:function(e,t,i,a){var n=null;try{n=JSON.parse(t.responseText)}catch(s){n={code:503,status:"Service Unavailable",error:"Connection error",errorCode:2,errorMessage:t.responseText}}return n.CallBackTimeMS=new Date-i,n.Request=e,n.CustomData=a,n},authenticationContext:{PlayFabId:null,EntityId:null,EntityType:null,SessionTicket:null,EntityToken:null},UpdateAuthenticationContext:function(e,t){var i={};return null!==t.data.PlayFabId&&(Hl._internalSettings.authenticationContext.PlayFabId=t.data.PlayFabId,i.PlayFabId=t.data.PlayFabId),null!==t.data.SessionTicket&&(Hl._internalSettings.authenticationContext.SessionTicket=t.data.SessionTicket,i.SessionTicket=t.data.SessionTicket),null!==t.data.EntityToken&&(Hl._internalSettings.authenticationContext.EntityId=t.data.EntityToken.Entity.Id,i.EntityId=t.data.EntityToken.Entity.Id,Hl._internalSettings.authenticationContext.EntityType=t.data.EntityToken.Entity.Type,i.EntityType=t.data.EntityToken.Entity.Type,Hl._internalSettings.authenticationContext.EntityToken=t.data.EntityToken.EntityToken,i.EntityToken=t.data.EntityToken.EntityToken),e=Object.assign(e,i),e},AuthInfoMap:{"X-EntityToken":{authAttr:"entityToken",authError:"errorEntityToken"},"X-Authorization":{authAttr:"sessionTicket",authError:"errorLoggedIn"},"X-SecretKey":{authAttr:"developerSecretKey",authError:"errorSecretKey"}},GetAuthInfo:function(e,t){var i=Hl._internalSettings.AuthInfoMap[t].authError,a=Hl._internalSettings.AuthInfoMap[t].authAttr,n=null;"entityToken"===a?n=Hl._internalSettings.entityToken:"sessionTicket"===a?n=Hl._internalSettings.sessionTicket:"developerSecretKey"===a&&(n=Hl.settings.developerSecretKey);var s=e.AuthenticationContext?e.AuthenticationContext[a]:n;return{authKey:t,authValue:s,authError:i}},ExecuteRequestWrapper:function(e,t,i,a,n,s){var r=null;if(null!==i){var o=Hl._internalSettings.GetAuthInfo(t,i=i),l=(i=o.authKey,r=o.authValue,o.authError);if(!r)throw l}return Hl._internalSettings.ExecuteRequest(Hl._internalSettings.GetServerUrl()+e,t,i,r,a,n,s)}}),Hl.buildIdentifier="adobuild_javascriptsdk_114",Hl.sdkVersion="1.136.230206",Hl.GenerateErrorReport=function(e){if(null==e)return"";var t=e.errorMessage;for(var i in e.errorDetails)for(var a in e.errorDetails[i])t+="\n"+i+": "+e.errorDetails[i][a];return t},Hl.ClientApi={IsClientLoggedIn:function(){return null!=Hl._internalSettings.sessionTicket&&Hl._internalSettings.sessionTicket.length>0},ForgetAllCredentials:function(){Hl._internalSettings.sessionTicket=null,Hl._internalSettings.entityToken=null},AcceptTrade:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/AcceptTrade",e,"X-Authorization",t,i,a)},AddFriend:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/AddFriend",e,"X-Authorization",t,i,a)},AddGenericID:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/AddGenericID",e,"X-Authorization",t,i,a)},AddOrUpdateContactEmail:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/AddOrUpdateContactEmail",e,"X-Authorization",t,i,a)},AddSharedGroupMembers:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/AddSharedGroupMembers",e,"X-Authorization",t,i,a)},AddUsernamePassword:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/AddUsernamePassword",e,"X-Authorization",t,i,a)},AddUserVirtualCurrency:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/AddUserVirtualCurrency",e,"X-Authorization",t,i,a)},AndroidDevicePushNotificationRegistration:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/AndroidDevicePushNotificationRegistration",e,"X-Authorization",t,i,a)},AttributeInstall:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/AttributeInstall",e,"X-Authorization",t,i,a)},CancelTrade:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/CancelTrade",e,"X-Authorization",t,i,a)},ConfirmPurchase:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ConfirmPurchase",e,"X-Authorization",t,i,a)},ConsumeItem:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ConsumeItem",e,"X-Authorization",t,i,a)},ConsumeMicrosoftStoreEntitlements:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ConsumeMicrosoftStoreEntitlements",e,"X-Authorization",t,i,a)},ConsumePS5Entitlements:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ConsumePS5Entitlements",e,"X-Authorization",t,i,a)},ConsumePSNEntitlements:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ConsumePSNEntitlements",e,"X-Authorization",t,i,a)},ConsumeXboxEntitlements:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ConsumeXboxEntitlements",e,"X-Authorization",t,i,a)},CreateSharedGroup:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/CreateSharedGroup",e,"X-Authorization",t,i,a)},ExecuteCloudScript:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ExecuteCloudScript",e,"X-Authorization",t,i,a)},GetAccountInfo:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetAccountInfo",e,"X-Authorization",t,i,a)},GetAdPlacements:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetAdPlacements",e,"X-Authorization",t,i,a)},GetAllUsersCharacters:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetAllUsersCharacters",e,"X-Authorization",t,i,a)},GetCatalogItems:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetCatalogItems",e,"X-Authorization",t,i,a)},GetCharacterData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetCharacterData",e,"X-Authorization",t,i,a)},GetCharacterInventory:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetCharacterInventory",e,"X-Authorization",t,i,a)},GetCharacterLeaderboard:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetCharacterLeaderboard",e,"X-Authorization",t,i,a)},GetCharacterReadOnlyData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetCharacterReadOnlyData",e,"X-Authorization",t,i,a)},GetCharacterStatistics:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetCharacterStatistics",e,"X-Authorization",t,i,a)},GetContentDownloadUrl:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetContentDownloadUrl",e,"X-Authorization",t,i,a)},GetCurrentGames:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetCurrentGames",e,"X-Authorization",t,i,a)},GetFriendLeaderboard:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetFriendLeaderboard",e,"X-Authorization",t,i,a)},GetFriendLeaderboardAroundPlayer:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetFriendLeaderboardAroundPlayer",e,"X-Authorization",t,i,a)},GetFriendsList:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetFriendsList",e,"X-Authorization",t,i,a)},GetGameServerRegions:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetGameServerRegions",e,"X-Authorization",t,i,a)},GetLeaderboard:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetLeaderboard",e,"X-Authorization",t,i,a)},GetLeaderboardAroundCharacter:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetLeaderboardAroundCharacter",e,"X-Authorization",t,i,a)},GetLeaderboardAroundPlayer:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetLeaderboardAroundPlayer",e,"X-Authorization",t,i,a)},GetLeaderboardForUserCharacters:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetLeaderboardForUserCharacters",e,"X-Authorization",t,i,a)},GetPaymentToken:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPaymentToken",e,"X-Authorization",t,i,a)},GetPhotonAuthenticationToken:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPhotonAuthenticationToken",e,"X-Authorization",t,i,a)},GetPlayerCombinedInfo:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayerCombinedInfo",e,"X-Authorization",t,i,a)},GetPlayerProfile:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayerProfile",e,"X-Authorization",t,i,a)},GetPlayerSegments:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayerSegments",e,"X-Authorization",t,i,a)},GetPlayerStatistics:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayerStatistics",e,"X-Authorization",t,i,a)},GetPlayerStatisticVersions:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayerStatisticVersions",e,"X-Authorization",t,i,a)},GetPlayerTags:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayerTags",e,"X-Authorization",t,i,a)},GetPlayerTrades:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayerTrades",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromFacebookIDs:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromFacebookIDs",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromFacebookInstantGamesIds:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromFacebookInstantGamesIds",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromGameCenterIDs:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromGameCenterIDs",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromGenericIDs:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromGenericIDs",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromGoogleIDs:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromGoogleIDs",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromGooglePlayGamesPlayerIDs:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromGooglePlayGamesPlayerIDs",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromKongregateIDs:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromKongregateIDs",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromNintendoServiceAccountIds:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromNintendoServiceAccountIds",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromNintendoSwitchDeviceIds:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromNintendoSwitchDeviceIds",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromPSNAccountIDs:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromPSNAccountIDs",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromSteamIDs:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromSteamIDs",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromTwitchIDs:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromTwitchIDs",e,"X-Authorization",t,i,a)},GetPlayFabIDsFromXboxLiveIDs:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPlayFabIDsFromXboxLiveIDs",e,"X-Authorization",t,i,a)},GetPublisherData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPublisherData",e,"X-Authorization",t,i,a)},GetPurchase:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetPurchase",e,"X-Authorization",t,i,a)},GetSharedGroupData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetSharedGroupData",e,"X-Authorization",t,i,a)},GetStoreItems:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetStoreItems",e,"X-Authorization",t,i,a)},GetTime:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetTime",e,"X-Authorization",t,i,a)},GetTitleData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetTitleData",e,"X-Authorization",t,i,a)},GetTitleNews:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetTitleNews",e,"X-Authorization",t,i,a)},GetTitlePublicKey:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetTitlePublicKey",e,null,t,i,a)},GetTradeStatus:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetTradeStatus",e,"X-Authorization",t,i,a)},GetUserData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetUserData",e,"X-Authorization",t,i,a)},GetUserInventory:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetUserInventory",e,"X-Authorization",t,i,a)},GetUserPublisherData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetUserPublisherData",e,"X-Authorization",t,i,a)},GetUserPublisherReadOnlyData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetUserPublisherReadOnlyData",e,"X-Authorization",t,i,a)},GetUserReadOnlyData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GetUserReadOnlyData",e,"X-Authorization",t,i,a)},GrantCharacterToUser:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/GrantCharacterToUser",e,"X-Authorization",t,i,a)},LinkAndroidDeviceID:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkAndroidDeviceID",e,"X-Authorization",t,i,a)},LinkApple:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkApple",e,"X-Authorization",t,i,a)},LinkCustomID:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkCustomID",e,"X-Authorization",t,i,a)},LinkFacebookAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkFacebookAccount",e,"X-Authorization",t,i,a)},LinkFacebookInstantGamesId:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkFacebookInstantGamesId",e,"X-Authorization",t,i,a)},LinkGameCenterAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkGameCenterAccount",e,"X-Authorization",t,i,a)},LinkGoogleAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkGoogleAccount",e,"X-Authorization",t,i,a)},LinkGooglePlayGamesServicesAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkGooglePlayGamesServicesAccount",e,"X-Authorization",t,i,a)},LinkIOSDeviceID:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkIOSDeviceID",e,"X-Authorization",t,i,a)},LinkKongregate:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkKongregate",e,"X-Authorization",t,i,a)},LinkNintendoServiceAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkNintendoServiceAccount",e,"X-Authorization",t,i,a)},LinkNintendoSwitchDeviceId:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkNintendoSwitchDeviceId",e,"X-Authorization",t,i,a)},LinkOpenIdConnect:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkOpenIdConnect",e,"X-Authorization",t,i,a)},LinkPSNAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkPSNAccount",e,"X-Authorization",t,i,a)},LinkSteamAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkSteamAccount",e,"X-Authorization",t,i,a)},LinkTwitch:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkTwitch",e,"X-Authorization",t,i,a)},LinkXboxAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/LinkXboxAccount",e,"X-Authorization",t,i,a)},LoginWithAndroidDeviceID:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithAndroidDeviceID",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithApple:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithApple",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithCustomID:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithCustomID",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithEmailAddress:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithEmailAddress",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithFacebook:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithFacebook",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithFacebookInstantGamesId:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithFacebookInstantGamesId",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithGameCenter:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithGameCenter",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithGoogleAccount:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithGoogleAccount",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithGooglePlayGamesServices:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithGooglePlayGamesServices",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithIOSDeviceID:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithIOSDeviceID",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithKongregate:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithKongregate",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithNintendoServiceAccount:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithNintendoServiceAccount",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithNintendoSwitchDeviceId:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithNintendoSwitchDeviceId",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithOpenIdConnect:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithOpenIdConnect",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithPlayFab:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithPlayFab",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithPSN:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithPSN",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithSteam:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithSteam",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithTwitch:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithTwitch",e,null,s,i,a),new Promise((function(e){e(n)}))},LoginWithXbox:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;var n=JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext)),s=function(e,i){null!=e&&(null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=e.data.EntityToken&&(Hl._internalSettings.entityToken=e.data.EntityToken.EntityToken),n=Hl._internalSettings.UpdateAuthenticationContext(n,e)),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/LoginWithXbox",e,null,s,i,a),new Promise((function(e){e(n)}))},Matchmake:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/Matchmake",e,"X-Authorization",t,i,a)},OpenTrade:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/OpenTrade",e,"X-Authorization",t,i,a)},PayForPurchase:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/PayForPurchase",e,"X-Authorization",t,i,a)},PurchaseItem:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/PurchaseItem",e,"X-Authorization",t,i,a)},RedeemCoupon:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/RedeemCoupon",e,"X-Authorization",t,i,a)},RefreshPSNAuthToken:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/RefreshPSNAuthToken",e,"X-Authorization",t,i,a)},RegisterForIOSPushNotification:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/RegisterForIOSPushNotification",e,"X-Authorization",t,i,a)},RegisterPlayFabUser:function(e,t,i,a){if(e.TitleId=Hl.settings.titleId?Hl.settings.titleId:e.TitleId,!e.TitleId)throw Hl._internalSettings.errorTitleId;JSON.parse(JSON.stringify(Hl._internalSettings.authenticationContext));var n=function(e,i){null!=e&&null!=e.data.SessionTicket&&(Hl._internalSettings.sessionTicket=e.data.SessionTicket),null!=t&&"function"===typeof t&&t(e,i)};return Hl._internalSettings.ExecuteRequestWrapper("/Client/RegisterPlayFabUser",e,null,n,i,a)},RemoveContactEmail:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/RemoveContactEmail",e,"X-Authorization",t,i,a)},RemoveFriend:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/RemoveFriend",e,"X-Authorization",t,i,a)},RemoveGenericID:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/RemoveGenericID",e,"X-Authorization",t,i,a)},RemoveSharedGroupMembers:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/RemoveSharedGroupMembers",e,"X-Authorization",t,i,a)},ReportAdActivity:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ReportAdActivity",e,"X-Authorization",t,i,a)},ReportDeviceInfo:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ReportDeviceInfo",e,"X-Authorization",t,i,a)},ReportPlayer:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ReportPlayer",e,"X-Authorization",t,i,a)},RestoreIOSPurchases:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/RestoreIOSPurchases",e,"X-Authorization",t,i,a)},RewardAdActivity:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/RewardAdActivity",e,"X-Authorization",t,i,a)},SendAccountRecoveryEmail:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/SendAccountRecoveryEmail",e,null,t,i,a)},SetFriendTags:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/SetFriendTags",e,"X-Authorization",t,i,a)},SetPlayerSecret:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/SetPlayerSecret",e,"X-Authorization",t,i,a)},StartPurchase:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/StartPurchase",e,"X-Authorization",t,i,a)},SubtractUserVirtualCurrency:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/SubtractUserVirtualCurrency",e,"X-Authorization",t,i,a)},UnlinkAndroidDeviceID:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkAndroidDeviceID",e,"X-Authorization",t,i,a)},UnlinkApple:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkApple",e,"X-Authorization",t,i,a)},UnlinkCustomID:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkCustomID",e,"X-Authorization",t,i,a)},UnlinkFacebookAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkFacebookAccount",e,"X-Authorization",t,i,a)},UnlinkFacebookInstantGamesId:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkFacebookInstantGamesId",e,"X-Authorization",t,i,a)},UnlinkGameCenterAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkGameCenterAccount",e,"X-Authorization",t,i,a)},UnlinkGoogleAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkGoogleAccount",e,"X-Authorization",t,i,a)},UnlinkGooglePlayGamesServicesAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkGooglePlayGamesServicesAccount",e,"X-Authorization",t,i,a)},UnlinkIOSDeviceID:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkIOSDeviceID",e,"X-Authorization",t,i,a)},UnlinkKongregate:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkKongregate",e,"X-Authorization",t,i,a)},UnlinkNintendoServiceAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkNintendoServiceAccount",e,"X-Authorization",t,i,a)},UnlinkNintendoSwitchDeviceId:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkNintendoSwitchDeviceId",e,"X-Authorization",t,i,a)},UnlinkOpenIdConnect:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkOpenIdConnect",e,"X-Authorization",t,i,a)},UnlinkPSNAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkPSNAccount",e,"X-Authorization",t,i,a)},UnlinkSteamAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkSteamAccount",e,"X-Authorization",t,i,a)},UnlinkTwitch:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkTwitch",e,"X-Authorization",t,i,a)},UnlinkXboxAccount:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlinkXboxAccount",e,"X-Authorization",t,i,a)},UnlockContainerInstance:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlockContainerInstance",e,"X-Authorization",t,i,a)},UnlockContainerItem:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UnlockContainerItem",e,"X-Authorization",t,i,a)},UpdateAvatarUrl:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UpdateAvatarUrl",e,"X-Authorization",t,i,a)},UpdateCharacterData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UpdateCharacterData",e,"X-Authorization",t,i,a)},UpdateCharacterStatistics:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UpdateCharacterStatistics",e,"X-Authorization",t,i,a)},UpdatePlayerStatistics:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UpdatePlayerStatistics",e,"X-Authorization",t,i,a)},UpdateSharedGroupData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UpdateSharedGroupData",e,"X-Authorization",t,i,a)},UpdateUserData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UpdateUserData",e,"X-Authorization",t,i,a)},UpdateUserPublisherData:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UpdateUserPublisherData",e,"X-Authorization",t,i,a)},UpdateUserTitleDisplayName:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/UpdateUserTitleDisplayName",e,"X-Authorization",t,i,a)},ValidateAmazonIAPReceipt:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ValidateAmazonIAPReceipt",e,"X-Authorization",t,i,a)},ValidateGooglePlayPurchase:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ValidateGooglePlayPurchase",e,"X-Authorization",t,i,a)},ValidateIOSReceipt:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ValidateIOSReceipt",e,"X-Authorization",t,i,a)},ValidateWindowsStoreReceipt:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/ValidateWindowsStoreReceipt",e,"X-Authorization",t,i,a)},WriteCharacterEvent:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/WriteCharacterEvent",e,"X-Authorization",t,i,a)},WritePlayerEvent:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/WritePlayerEvent",e,"X-Authorization",t,i,a)},WriteTitleEvent:function(e,t,i,a){return Hl._internalSettings.ExecuteRequestWrapper("/Client/WriteTitleEvent",e,"X-Authorization",t,i,a)}};Hl.ClientApi;Hl.RegisterWithPhaser=function(){"undefined"!==typeof Phaser&&"undefined"!==typeof Phaser.Plugin&&(Phaser.Plugin.PlayFab=function(e,t){Phaser.Plugin.call(this,e,t)},Phaser.Plugin.PlayFab.prototype=Object.create(Phaser.Plugin.prototype),Phaser.Plugin.PlayFab.prototype.constructor=Phaser.Plugin.PlayFab,Phaser.Plugin.PlayFab.prototype.PlayFab=Hl,Phaser.Plugin.PlayFab.prototype.settings=Hl.settings,Phaser.Plugin.PlayFab.prototype.ClientApi=Hl.ClientApi)},Hl.RegisterWithPhaser();const ql=Hl.ClientApi;function Vl(e){return ic(ql.LoginWithSteam,{SteamTicket:e,CreateAccount:!0})}function Yl(e){tc(ql.UpdateUserTitleDisplayName,{DisplayName:e})}function Wl(){return tc(ql.GetUserData)}function jl(e){return tc(ql.UpdateUserData,{Data:e})}function Xl(){return tc(ql.GetUserInventory)}function zl(e,t,i){return tc(ql.PurchaseItem,{ItemId:e,Price:t,VirtualCurrency:i})}function Kl(e,t,i){return tc(ql.StartPurchase,{Items:[{ItemId:e,Quantity:t,Annotation:i}]})}function Zl(e,t,i){return tc(ql.PayForPurchase,{OrderId:e,Currency:t,ProviderName:i})}function Ql(e){return tc(ql.ConfirmPurchase,{OrderId:e})}function Jl(e,t){return tc(ql.ConsumeItem,{ItemInstanceId:e,ConsumeCount:t})}function ec(e,t){return tc(ql.AddUserVirtualCurrency,{Amount:e,VirtualCurrency:t})}function tc(e,t){return ql.IsClientLoggedIn()?ic(e,t):Promise.reject("PlayFab Client is not logged in.")}function ic(e,t){return new Promise(((i,a)=>{e(null!==t&&void 0!==t?t:{},((e,t)=>{!t&&null!==e&&void 0!==e&&e.data?i(e.data):a(null!==t&&void 0!==t?t:e)}))}))}async function ac(e,t){await Vl(e),Yl(t),cc(),hc()}async function nc(e){const t=`${e}STD`,i=1,a="Purchased via in-game store",n=await Kl(t,i,a),s=n.OrderId,r="RM",o="Steam",l=await Zl(s,r,o);if(rc.push(l.OrderId),g){const e=l.ProviderData;$l(`https://store.steampowered.com/checkout/approvetxn/${e}/?returnurl=steam`)}}Hl.settings.titleId="59813";let sc=0,rc=[],oc=!1,lc=!1;async function cc(){if(oc)return void(lc=!0);clearTimeout(sc),oc=!0;const e=[...rc];for(const a of e)try{await uc(a)}catch(i){}oc=!1;const t=lc?0:2e3;sc=setTimeout(cc,t),lc=!1}async function uc(e){const t=await Ql(e),i=t.Items[0].ItemId,a=t.Items[0].ItemInstanceId;await Jl(a,1);const n=Number(i.replace("STD",""));rc=rc.filter((t=>t!==e)),await ec(n,"ST"),GameUI.notify.info(`${n} STDs Obtained!`),hc()}function dc(){return g&&rc.length>0}async function hc(){var e,t,i,a,n;const s=await Xl();ShopPurchaseData.totalSTD=null!==(e=null===(t=s.VirtualCurrency)||void 0===t?void 0:t.ST)&&void 0!==e?e:0;for(const l of Object.keys(GameDatabase.shopPurchases)){var r;const e=s.Inventory.find((e=>e.ItemId===l));ShopPurchaseData[l]=null!==(r=null===e||void 0===e?void 0:e.RemainingUses)&&void 0!==r?r:0}GameUI.update();const o=await Wl();ShopPurchaseData.unlockedCosmetics=null!==(i=null===(a=o.Data.Cosmetics)||void 0===a||null===(n=a.Value)||void 0===n?void 0:n.split(","))&&void 0!==i?i:[],GameUI.update()}async function mc(e,t,i){await zl(e,t,"ST"),void 0!==i&&await pc(i),hc()}async function pc(e){var t,i,a,n;const s=await Wl(),r=new Set(null!==(t=null===(i=s.Data)||void 0===i||null===(a=i.Cosmetics)||void 0===a||null===(n=a.Value)||void 0===n?void 0:n.split(","))&&void 0!==t?t:[]);r.add(e);const o=[...r];await jl({Cosmetics:o.join(",")}),ShopPurchaseData.unlockedCosmetics=o,GameUI.update()}const yc=new Il("greenworks");function fc(){return yc.isLoaded}function gc(){return yc.safeCall((e=>e.initAPI()),!1)}function vc(){return yc.safeCall((e=>e.getSteamId()))}function bc(){return yc.makePromise(((e,t,i)=>e.getAuthSessionTicket(t,i)))}function Ec(e){return yc.makePromise(((t,i,a)=>t.activateAchievement(e,i,a)))}function Tc(){return yc.safeCall((e=>e.getAchievementNames()),[])}function wc(e,t){return yc.safeCall((i=>i.initDiscordAPI(e,t)))}function kc(){return yc.safeCall((e=>e.runDiscordCallbacks()))}function Cc(e,t){return yc.safeCall((i=>i.on(e,t)))}function Ac(e,t){return yc.safeCall((i=>i.setDiscordActivity({smallImage:"icon",largeImage:"icon",state:e,details:t})))}let _c=!1,Sc=!1,Dc=[];const Rc={initialize(){if(_c)throw Error("Steam Runtime was initialized already.");if(_c=!0,!f||!fc()||!gc())return;Sc=!0;const e=vc();Mc(e),Ic(e),Dc=Tc(),Cc("micro-txn-authorization-response",((e,t,i)=>{!0===i&&cc()})),g||(xc(),Gc())},get isActive(){if(!_c)throw Error("Steam Runtime was called before init.");return Sc},get screenName(){var e,t;return this.isActive?null!==(e=null===(t=vc())||void 0===t?void 0:t.screenName)&&void 0!==e?e:"Steam user":"Non-Steam user"},activateAchievement(e){if(!this.isActive)return;const t=`Achievement${e}`;Dc.includes(t)&&Ec(t)},async purchaseIAP(e){this.isActive&&await nc(e)},validatePurchases(){this.isActive&&cc()},async purchaseShopItem(e,t,i){if(!this.isActive)return GameUI.notify.error("Shop purchases are not available."),!1;try{return await mc(e,t,i),!0}catch(n){var a;return GameUI.notify.error(null!==(a=n.errorMessage)&&void 0!==a?a:n),!1}},get hasPendingPurchaseConfirmations(){return!!this.isActive&&dc()}};async function Mc(e){try{const t=e.screenName,i=await bc();await ac(i.ticket.toString("hex"),t),GameUI.notify.info("Logged in to PlayFab Cloud")}catch(t){throw GameUI.notify.error("Couldn't log in to PlayFab Cloud."),t}}async function Ic(e){const t=e.accountId,i=e.staticAccountId,a=e.screenName;await Cloud.loginWithSteam(t,i,a)}function xc(){wc("1057439416819396689",1399720),Pc(),kc(),setInterval(Pc,8e3),setInterval(kc,4e3)}function Pc(){Ac(Fl.state,Fl.details)}function Gc(){const e=document.createElement("canvas");e.classList.add("_steam-refresh-canvas"),document.body.appendChild(e);const t=e.getContext("2d");function i(){t.clearRect(0,0,e.width,e.height),window.requestAnimationFrame(i)}i()}const Uc=[{name:"Toggle Autobuyers",keys:["a"],type:"bindHotkey",function:()=>Oc(),visible:!0},{name:"Buy one Tickspeed",keys:["shift","t"],type:"bindRepeatableHotkey",function:()=>buyTickSpeed(),visible:!0},{name:"Buy max Tickspeed",keys:["t"],type:"bindRepeatableHotkey",function:()=>buyMaxTickSpeed(),visible:!0},{name:"Max all",keys:["m"],type:"bindRepeatableHotkey",function:()=>maxAll(),visible:!0},{name:"Dimensional Sacrifice",keys:["s"],type:"bindRepeatableHotkey",function:()=>sacrificeBtnClick(),visible:!0},{name:"Dimension Boost",keys:["d"],type:"bindRepeatableHotkey",function:()=>manualRequestDimensionBoost(!0),visible:!0},{name:"Single Dimension Boost",keys:["shift","d"],type:"bindRepeatableHotkey",function:()=>manualRequestDimensionBoost(!1),visible:!1},{name:"Antimatter Galaxy",keys:["g"],type:"bindRepeatableHotkey",function:()=>manualRequestGalaxyReset(!0),visible:!0},{name:"Single Antimatter Galaxy",keys:["shift","g"],type:"bindRepeatableHotkey",function:()=>manualRequestGalaxyReset(!1),visible:!1},{name:"Big Crunch",keys:["c"],type:"bindRepeatableHotkey",function:()=>manualBigCrunchResetRequest(),visible:!0},{name:"Replicanti Galaxy",keys:["r"],type:"bindHotkey",function:()=>{replicantiGalaxyRequest(),setHoldingR(!0)},visible:()=>Replicanti.areUnlocked||PlayerProgress.eternityUnlocked()},{name:"Eternity",keys:["e"],type:"bindRepeatableHotkey",function:()=>eternityResetRequest(),visible:()=>PlayerProgress.eternityUnlocked()||Player.canEternity},{name:"Toggle Time Study respec",keys:["shift","e"],type:"bindHotkey",function:()=>{player.respec=!player.respec,GameUI.notify.info("Time Study respec is now "+(player.respec?"active":"inactive"))},visible:()=>PlayerProgress.eternityUnlocked()},{name:"Enter/Exit Dilation",keys:["l"],type:"bindRepeatableHotkey",function:()=>startDilatedEternityRequest(),visible:()=>PlayerProgress.realityUnlocked()||PlayerProgress.dilationUnlocked()},{name:"Reality",keys:["y"],type:"bindRepeatableHotkey",function:()=>requestManualReality(),visible:()=>PlayerProgress.realityUnlocked()||isRealityAvailable()},{name:"Toggle Glyph unequip",keys:["shift","y"],type:"bindHotkey",function:()=>{player.reality.respec=!player.reality.respec,GameUI.notify.info("Glyph respec is now "+(player.reality.respec?"active":"inactive"))},visible:()=>PlayerProgress.realityUnlocked()},{name:"Start/Pause Automator",keys:["u"],type:"bindHotkey",function:()=>Fc(),visible:()=>Player.automatorUnlocked},{name:"Restart Automator",keys:["shift","u"],type:"bindHotkey",function:()=>$c(),visible:()=>Player.automatorUnlocked},{name:"Undo Edit (Automator)",keys:["mod","z"],type:"bind",function:()=>AutomatorData.undoScriptEdit(),visible:()=>Player.automatorUnlocked},{name:"Redo Edit (Automator)",keys:["mod","y"],type:"bind",function:()=>AutomatorData.redoScriptEdit(),visible:()=>Player.automatorUnlocked},{name:"Toggle Black Hole",keys:["b"],type:"bindHotkey",function:()=>BlackHoles.togglePause(),visible:()=>PlayerProgress.realityUnlocked()},{name:"Toggle Continuum",keys:["alt","a"],type:"bindHotkey",function:()=>Lc(),visible:()=>Laitela.continuumUnlocked},{name:"Armageddon",keys:["z"],type:"bindRepeatableHotkey",function:()=>Hc(),visible:()=>Pelle.isDoomed},{name:"Toggle Glyph unequip (Pelle)",keys:["shift","z"],type:"bindHotkey",function:()=>{Pelle.isDoomed&&(player.reality.respec=!player.reality.respec,GameUI.notify.info("Glyph respec is now "+(player.reality.respec?"active":"inactive")))},visible:()=>Pelle.isDoomed},{name:"Save game",keys:["mod","s"],type:"bind",function:()=>(GameStorage.save(!1,!0),!1),visible:!0},{name:"Export game",keys:["mod","e"],type:"bind",function:()=>(GameStorage.export(),!1),visible:!0},{name:"Open Hotkey List Modal",keys:["?"],type:"bind",function:()=>(Vc(),!1),visible:!0},{name:"Open How To Play Modal",keys:["h"],type:"bind",function:()=>(Yc(),!1),visible:!0},{name:"Modify visible tabs",keys:["tab"],type:"bind",function:()=>(jc(),!1),visible:!0},{name:"Confirm Modal",keys:["enter"],type:"bind",function:()=>(EventHub.dispatch(GAME_EVENT.ENTER_PRESSED),!0),visible:!0},{name:"Close Modal or open Options",keys:["esc"],type:"bind",function:()=>(qc(),!1),visible:!0},{name:"Paying respects",keys:["f"],type:"bindRepeatable",function:()=>{GameUI.notify.info("Paying respects"),SecretAchievement(13).unlock()},visible:!1},{name:"Change Tab",keys:["up"],type:"bind",function:()=>(EventHub.dispatch(GAME_EVENT.ARROW_KEY_PRESSED,"up"),!1),visible:!1},{name:"Change Tab",keys:["down"],type:"bind",function:()=>(EventHub.dispatch(GAME_EVENT.ARROW_KEY_PRESSED,"down"),!1),visible:!1},{name:"Change Subtab",keys:["left"],type:"bind",function:()=>(EventHub.dispatch(GAME_EVENT.ARROW_KEY_PRESSED,"left"),!1),visible:!1},{name:"Change Subtab",keys:["right"],type:"bind",function:()=>(EventHub.dispatch(GAME_EVENT.ARROW_KEY_PRESSED,"right"),!1),visible:!1},{name:"Doesn't exist",keys:["9"],type:"bind",function:()=>SecretAchievement(41).unlock(),visible:!1},{name:"Adjust Autobuyers",keys:["mod","alt","a"],type:"bind",function:()=>Wc(),visible:()=>Autobuyers.hasAutobuyersForEditModal},{name:"[Redemption] Mend",keys:["n"],type:"bind",function:()=>mendingResetRequest(),visible:()=>!0},{name:"Fullscreen",keys:["F10"],type:"bind",function:()=>{},visible:()=>!1},{name:"Zoom In",keys:["ctrl","="],type:"bind",function:()=>Ll.increaseZoom(),visible:()=>!1},{name:"Zoom In",keys:["ctrl","+"],type:"bind",function:()=>Ll.increaseZoom(),visible:()=>!1},{name:"Zoom Out",keys:["ctrl","-"],type:"bind",function:()=>Ll.decreaseZoom(),visible:()=>!1},{name:"Reset Zoom",keys:["ctrl","0"],type:"bind",function:()=>Ll.resetZoom(),visible:()=>!1}];for(const V of Uc)Sl[V.type](V.keys.join("+"),V.function);function Bc(e){const t=e===Autobuyer.tickspeed&&e.isBought;return e.disabledByContinuum?GameUI.notify.info("Continuum is enabled, you cannot alter this autobuyer"):(e.isUnlocked||t)&&(e.toggle(),GameUI.notify.info(`${e.name} Autobuyer toggled ${e.isActive?"on":"off"}`)),!1}function Nc(e){if(e.disabledByContinuum)GameUI.notify.info("Continuum is enabled, you cannot alter this autobuyer");else if(e.isUnlocked&&null!==e.toggleMode){e.toggleMode();const t="Tickspeed"===e.name||e.hasUnlimitedBulk?"max":"10";GameUI.notify.info(`${e.name} Autobuyer set to buy ${1===e.mode?"singles":t}`)}return!1}function Oc(){Tab.automation.isUnlocked&&(Autobuyers.toggle(),GameUI.notify.info("Autobuyers "+(player.auto.autobuyersOn?"resumed":"paused")))}function Lc(){Laitela.continuumUnlocked&&(ImaginaryUpgrade(21).isLockingMechanics&&player.auto.disableContinuum?ImaginaryUpgrade(21).tryShowWarningModal():(Laitela.setContinuum(player.auto.disableContinuum),GameUI.notify.info((player.auto.disableContinuum?"Disabled":"Enabled")+" Continuum")))}function Fc(){if(Player.automatorUnlocked){if(AutomatorBackend.isRunning)AutomatorBackend.pause();else{if(!AutomatorBackend.isOn){const e=player.reality.automator.state.editorScript;return AutomatorBackend.restart(),AutomatorBackend.start(e),void(0===AutomatorData.currentErrors().length?GameUI.notify.automator(`Starting script "${AutomatorBackend.scriptName}"`):GameUI.notify.error(`Cannot start script "${AutomatorBackend.scriptName}" (has errors)`))}AutomatorBackend.mode=AUTOMATOR_MODE.RUN}const e=AutomatorBackend.isRunning?"Resuming":"Pausing",t=AutomatorBackend.currentLineNumber;GameUI.notify.automator(`${e} script "${AutomatorBackend.scriptName}" at line ${t}`)}}function $c(){if(Player.automatorUnlocked){const e=AutomatorBackend.isOn?"Restarting":"Starting";GameUI.notify.automator(`${e} script "${AutomatorBackend.scriptName}"`),AutomatorBackend.restart(),AutomatorBackend.start()}}function Hc(){Pelle.canArmageddon&&Pelle.armageddon(!0)}function qc(){Quote.isOpen||Quote.isHistoryOpen?Quote.clearAll():Modal.isOpen?Modal.hideAll():Tab.options.show(!0)}function Vc(){Modal.hotkeys.isOpen?EventHub.dispatch(GAME_EVENT.CLOSE_MODAL):(Modal.isOpen&&Modal.hideAll(),Modal.hotkeys.show())}function Yc(){Modal.h2p.isOpen?EventHub.dispatch(GAME_EVENT.CLOSE_MODAL):(Modal.isOpen&&Modal.hideAll(),Modal.h2p.show())}function Wc(){Modal.autobuyerEditModal.isOpen?EventHub.dispatch(GAME_EVENT.CLOSE_MODAL):Autobuyers.hasAutobuyersForEditModal&&(Modal.isOpen&&Modal.hideAll(),Modal.autobuyerEditModal.show())}function jc(){Modal.hiddenTabs.isOpen?EventHub.dispatch(GAME_EVENT.CLOSE_MODAL):(Modal.isOpen&&Modal.hideAll(),Modal.hiddenTabs.show())}Sl.bind("r",(()=>setHoldingR(!1)),"keyup"),Sl.bind("shift",(()=>setShiftKey(!0)),"keydown"),Sl.bind("shift",(()=>setShiftKey(!1)),"keyup"),Sl.bind("ctrl+shift",(()=>setShiftKey(!0)),"keydown"),Sl.bind("ctrl+shift",(()=>setShiftKey(!1)),"keyup"),Sl.bind("alt+shift",(()=>setShiftKey(!0)),"keydown"),Sl.bind("alt+shift",(()=>setShiftKey(!1)),"keyup"),Sl.bindHotkey("alt+t",(()=>Bc(Autobuyer.tickspeed))),Sl.bindHotkey("shift+alt+t",(()=>Nc(Autobuyer.tickspeed))),Sl.bindHotkey("alt+s",(()=>Bc(Autobuyer.sacrifice))),Sl.bindHotkey("alt+d",(()=>Bc(Autobuyer.dimboost))),Sl.bindHotkey("alt+g",(()=>Bc(Autobuyer.galaxy))),Sl.bindHotkey("alt+r",(()=>Bc(Autobuyer.replicantiGalaxy))),Sl.bindHotkey("alt+c",(()=>Bc(Autobuyer.bigCrunch))),Sl.bindHotkey("alt+e",(()=>Bc(Autobuyer.eternity))),Sl.bindHotkey("alt+y",(()=>Bc(Autobuyer.reality))),function(){function e(e){Sl.bindRepeatableHotkey(`${e}`,(()=>buyManyDimension(e))),Sl.bindRepeatableHotkey(`num${e}`,(()=>buyManyDimension(e))),Sl.bindRepeatableHotkey(`shift+${e}`,(()=>buyOneDimension(e))),Sl.bindRepeatableHotkey(`shift+num${e}`,(()=>buyOneDimension(e))),Sl.bindHotkey(`alt+${e}`,(()=>Bc(Autobuyer.antimatterDimension(e)))),Sl.bindHotkey(`alt+num${e}`,(()=>Bc(Autobuyer.antimatterDimension(e)))),Sl.bindHotkey(`shift+alt+${e}`,(()=>Nc(Autobuyer.antimatterDimension(e)))),Sl.bindHotkey(`shift+alt+num${e}`,(()=>Nc(Autobuyer.antimatterDimension(e))))}for(let t=1;t<9;t++)e(t)}(),Sl.bind(["mod+shift+c","mod+shift+i","mod+shift+j","f12"],(()=>SecretAchievement(23).unlock())),EventHub.logic.on(GAME_EVENT.ARROW_KEY_PRESSED,(e=>{if(Quote.isOpen||Quote.isHistoryOpen)return;const t=Tabs.current.key;if("up"===e[0]||"down"===e[0]){const i=Tabs.currentUIFormat.flatMap((e=>e.isAvailable?[e.key]:[]));let a=i.indexOf(t);"up"===e[0]?a--:a++,a=(a+i.length)%i.length,Tab[i[a]].show(!0)}else if("left"===e[0]||"right"===e[0]){const i=Tabs.current._currentSubtab.key,a=Tabs.current.subtabs.flatMap((e=>e.isAvailable?[e.key]:[]));let n=a.indexOf(i);"left"===e[0]?n--:n++,n=(n+a.length)%a.length,Tab[t][a[n]].show(!0)}}));const Xc=["up","up","down","down","left","right","left","right","b","a","enter"];let zc=0;function Kc(e){SecretAchievement(17).isUnlocked||(Xc[zc]===e?zc++:zc=2===zc&&"up"===e?2:e===Xc[0]?1:0,Xc.length<=zc&&(SecretAchievement(17).unlock(),Currency.antimatter.bumpTo(30),Speedrun.startTimer()))}const Zc=Tl().prototype.handleKey;Tl().prototype.handleKey=function(e,t,i){return"keydown"===i.type&&Kc(e),Zc.apply(this,[e,t,i])};class Qc extends R{constructor(e){super(e),this.registerEvents(e.checkEvent,(()=>this.tryUnlock()))}get isBought(){return 0!==(this.bits&1<e.id<0?new Jc(e):new Qc(e)));const eu=e=>Qc.index[e],tu={all:Qc.index.compact(),get allBought(){return 1+(player.mending.corruptionUpgradeBits>>6)===1<=1&&!Pelle.isDoomed?EternityChallenge(5).vReward.effectValue:0;return 75e4+5e3*MendingUpgrade(16).boughtAmount+eu(9).effectOrDefault(0)+e}static get remoteStart(){return MendingUpgrade(17).isBought?1/0:RealityUpgrade(21).effectOrDefault(800)}static get requirement(){return this.requirementAt(player.galaxies)}static buyableGalaxies(e){let t=null;try{t=bulkBuyBinarySearch(new Decimal(e),{costFunction:e=>this.requirementAt(e).amount,cumulative:!1},player.galaxies)}catch(i){return 1e9}if(!t)throw new Error("Unexpected failure to calculate galaxy purchase");return player.galaxies+t.quantity}static requirementAt(e){let t=nu.baseCost+e*nu.costMult;const i=nu.typeAt(e);if(i===iu.DISTANT&&EternityChallenge(5).isRunning)t+=Math.pow(e,2)+e;else if(i===iu.DISTANT||i===iu.REMOTE){const i=this.costScalingStart,a=Math.clampMin(e-i+1,0);t+=Math.pow(a,2)+a}if(i===iu.REMOTE&&(t*=Math.pow(1.002,e-(nu.remoteStart-1))),i===iu.THIRD){let i=6;if(WarpUpgrade(4).isBought&&(i-=1),WarpUpgrade(11).isBought&&(i-=1),6==i){let i=Math.max(e-nu.scalingThreeStart,0),a=i**6,n=15*i**5,s=85*i**4,r=225*i**3,o=274*i**2;t+=(a+n+s+r+o+120*i)/360}if(5==i){let i=Math.max(e-nu.scalingThreeStart,0),a=i**5,n=5*i**4,s=5*i**3,r=5*i**2;t+=(a+n+s-r-6*i)/60}if(4==i){let i=Math.max(e-nu.scalingThreeStart,0),a=i**4,n=6*i**3,s=11*i**2;t+=(a+n+s+6*i)/12}}if(t-=Effects.sum(InfinityUpgrade.resetBoost),InfinityChallenge(5).isCompleted&&(t-=1),GlyphAlteration.isAdded("power")&&(t*=getSecondaryGlyphEffect("powerpow")),t=Math.floor(t),player.mending.corruptionChallenge.corruptedMend&&i!==iu.NORMAL){let e=ye.galWeak.scaling[player.mending.corruption[3]];eu(19).isBought&&(e=Math.pow(e,.5)),t=Math.floor(t**e)}const a=nu.requiredTier;return new au(a,t)}static get costMult(){return Effects.min(NormalChallenge(10).isRunning?90:60,TimeStudy(42))}static get baseCost(){return NormalChallenge(10).isRunning?99:80}static get requiredTier(){return NormalChallenge(10).isRunning?6:8}static get canBeBought(){return!(EternityChallenge(6).isRunning&&!Enslaved.isRunning)&&(!NormalChallenge(8).isRunning&&!InfinityChallenge(7).isRunning&&!(player.records.thisInfinity.maxAM.gt(Player.infinityGoal)&&(!player.break||Player.isInAntimatterChallenge)))}static get lockText(){return this.canBeBought?null:EternityChallenge(6).isRunning?"Locked (Eternity Challenge 6)":InfinityChallenge(7).isRunning?"Locked (Infinity Challenge 7)":InfinityChallenge(1).isRunning?"Locked (Infinity Challenge 1)":NormalChallenge(8).isRunning?"Locked (8th Antimatter Dimension Autobuyer Challenge)":null}static get costScalingStart(){let e=100+TimeStudy(302).effectOrDefault(0)+Effects.sum(TimeStudy(223),TimeStudy(224),GlyphSacrifice.power);return EternityChallenge(5).completions>=1&&(e+=EternityChallenge(5).reward.effectValue),e}static get type(){return this.typeAt(player.galaxies)}static typeAt(e){return e>=nu.scalingThreeStart?iu.THIRD:e>=nu.remoteStart?iu.REMOTE:EternityChallenge(5).isRunning||e>=this.costScalingStart?iu.DISTANT:iu.NORMAL}}function su(){EventHub.dispatch(GAME_EVENT.GALAXY_RESET_BEFORE),player.galaxies++,(!Achievement(143).isUnlocked||Pelle.isDoomed&&!PelleUpgrade.galaxyNoResetDimboost.canBeApplied)&&(player.dimensionBoosts=0),softReset(0),Notations.current===Notation.emoji&&player.requirementChecks.permanent.emojiGalaxies++,player.requirementChecks.infinity.noSacrifice=!0,EventHub.dispatch(GAME_EVENT.GALAXY_RESET_AFTER)}function ru(e){nu.canBeBought&&nu.requirement.isSatisfied&&(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||(RealityUpgrade(7).isLockingMechanics&&player.galaxies>0?RealityUpgrade(7).tryShowWarningModal():player.options.confirmations.antimatterGalaxy?Modal.antimatterGalaxy.show({bulk:e&&EternityMilestone.autobuyMaxGalaxies.isReached}):ou(e)))}function ou(e,t=Number.MAX_VALUE){const i=RealityUpgrade(7).isLockingMechanics?1:t;return EternityMilestone.autobuyMaxGalaxies.isReached&&e?lu(i):!(player.galaxies>=i||!nu.canBeBought||!nu.requirement.isSatisfied)&&(Tutorial.turnOffEffect(TUTORIAL_STATE.GALAXY),su(),!0)}function lu(e=Number.MAX_VALUE){if(player.galaxies>=e||!nu.canBeBought)return!1;const t=nu.requirement;if(!t.isSatisfied)return!1;const i=AntimatterDimension(t.tier),a=Math.clampMax(nu.buyableGalaxies(Math.round(i.totalAmount.toNumber())),e);return Notations.current===Notation.emoji&&(player.requirementChecks.permanent.emojiGalaxies+=a-player.galaxies),player.galaxies=a-1,su(),Enslaved.isRunning&&player.galaxies>1&&EnslavedProgress.c10.giveProgress(),Tutorial.turnOffEffect(TUTORIAL_STATE.GALAXY),!0}class cu{constructor(e){var t,i,a,n,s,r;this.name=e.name,this.forcedName=e.forcedName,this.isUnlocked=()=>e.isUnlocked()||player.records.fullGameCompletions>0,this.awayOption=null!==(t=e.awayOption)&&void 0!==t?t:this.name,this.showOption=null===(i=e.showOption)||void 0===i||i,this.reference=null!==(a=e.reference)&&void 0!==a?a:[this.name],this.applyFn=null!==(n=e.applyFn)&&void 0!==n?n:e=>e,this.classObjectReference=null!==(s=e.classObjectReference)&&void 0!==s?s:this.name,this.appearsInAwayModal=null===(r=e.appearsInAwayModal)||void 0===r||r}get option(){return player.options.awayProgress[this.awayOption]}set option(e){player.options.awayProgress[this.awayOption]=e}get classObject(){return`c-modal-away-progress__${this.classObjectReference.replace(/[A-Z]/g,(e=>`-${e.toLowerCase()}`))}`}get formatName(){return this.forcedName?this.forcedName:this.name.replace(/[A-Z]/g,(e=>` ${e}`)).replace(/^[0-9A-Z_a-z]/,(e=>e.toUpperCase()))}navigateTo(e){let t=e;for(const i of this.reference)t=t[i];return this.applyFn(t)}}const uu={all:{},index:[],showOption:[],appearsInAwayModal:[]};for(let V=0;Ve.isUnlocked()||player.records.fullGameCompletions>0}get option(){return player.options.confirmations[this._confirmationSetting]}set option(e){player.options.confirmations[this._confirmationSetting]=e}}const hu=xa.confirmationTypes.mapToObject((e=>e.option),(e=>new du(e)));hu.index=Object.values(hu);i(4944),i(3792);class mu{constructor(e=null){this._id=e}get data(){throw new NotImplementedError}get isUnlocked(){throw new NotImplementedError}get id(){return this._id}get canTick(){const e=!player.auto.autobuyersOn||!this.constructor.isActive;return this.isActive&&!e&&(this.isUnlocked||this.isBought)}get isActive(){return this.data.isActive}set isActive(e){this.data.isActive=e}get bulk(){return 1}toggle(){this.isActive=!this.isActive}tick(){throw new NotImplementedError}reset(){}static get entryCount(){return 1}static get autobuyerGroupName(){throw new NotImplementedError}static get isActive(){return!0}static set isActive(e){throw new NotImplementedError}static createAccessor(){const e=this.entryCount,t=Array.range(1,e).map((e=>new this(e))),i=[null,...t],a=e=>i[e];return Object.defineProperties(a,{oneIndexed:{get:()=>i},zeroIndexed:{get:()=>t},entryCount:{get:()=>e},anyUnlocked:{get:()=>t.some((e=>e.isUnlocked))},allUnlocked:{get:()=>t.every((e=>e.isUnlocked))},allActive:{get:()=>t.every((e=>e.isActive))},groupName:{get:()=>this.autobuyerGroupName},isActive:{get:()=>this.isActive,set:e=>{this.isActive=e}}}),a.toggle=()=>this.isActive=!this.isActive,a}}class pu extends mu{get interval(){return this.data.interval instanceof Decimal&&(this.data.interval=this.data.interval.toNumber()),this.data.interval}get canTick(){if(this.timeSinceLastTick instanceof Decimal)throw new Error("mfw timeSinceLastTick is decimal?");if(this.interval instanceof Decimal)throw new Error("mfw interval is decimal?");return super.canTick&&this.timeSinceLastTick>=this.interval}get timeSinceLastTick(){if(this.data.lastTick instanceof Decimal)throw new Error("mfw lastTick is decimal?");return player.records.realTimePlayed-this.data.lastTick}tick(){if(this.data.lastTick=player.records.realTimePlayed,this.data.lastTick instanceof Decimal)throw new Error("mfw realTimePlayed is decimal?")}get resetTickOn(){}resetTick(e){e>=this.resetTickOn&&(this.data.lastTick=0)}reset(){}}class yu extends pu{get baseInterval(){throw new NotImplementedError}get cost(){return this.data.cost}get interval(){const e=this.data.interval;return BreakInfinityUpgrade.autobuyerSpeed.isBought?e/2:e}get hasMaxedInterval(){return this.data.interval<=100}upgradeInterval(e){this.hasMaxedInterval||(e||Currency.infinityPoints.purchase(this.cost))&&(this.data.cost*=2,this.data.interval=Math.clampMin(.6*this.data.interval,100),Achievement(52).tryUnlock(),Achievement(53).tryUnlock(),GameUI.update())}maxIntervalForFree(){while(!this.hasMaxedInterval)this.upgradeInterval(!0)}reset(){EternityMilestone.keepAutobuyers.isReached||PelleUpgrade.keepAutobuyers.canBeApplied||(this.data.interval=this.baseInterval,this.data.cost=1)}static createAccessor(){const e=super.createAccessor();return Object.defineProperty(e,"allMaxedInterval",{get:()=>e.zeroIndexed.every((e=>e.hasMaxedInterval))}),Object.defineProperty(e,"hasInstant",{get:()=>e.zeroIndexed.some((e=>e.interval=this.multiplier&&Laitela.annihilate()}}class gu extends yu{get tier(){return this.id}get name(){return AntimatterDimension(this.tier).shortDisplayName}get fullName(){return`${this.name} Antimatter Dimension`}get data(){return player.auto.antimatterDims.all[this.tier-1]}get baseInterval(){return Player.defaultStart.auto.antimatterDims.all[this.tier-1].interval}get isUnlocked(){return!!ue.mendingUnlocked()||!Pelle.isDisabled(`antimatterDimAutobuyer${this.tier}`)&&(this.data.isBought||this.canBeUpgraded)}get isBought(){return this.data.isBought}get antimatterCost(){return b.E10.pow(this.tier-1).times(b.E40)}get canBeBought(){return!Pelle.isDisabled(`antimatterDimAutobuyer${this.tier}`)}get canBeUpgraded(){return NormalChallenge(this.tier).isCompleted||ue.mendingUnlocked()}get disabledByContinuum(){return Laitela.continuumActive}get bulk(){return this.hasUnlimitedBulk?1e100:Math.clampMax(this.data.bulk,this.bulkCap)}get hasUnlimitedBulk(){return Achievement(61).isUnlocked}get bulkCap(){return 512}get hasMaxedBulk(){return this.bulk>=this.bulkCap}get mode(){return this.data.mode}set mode(e){this.data.mode=e}get canUnlockSlowVersion(){return player.records.thisEternity.maxAM.gte(this.antimatterCost)}toggleMode(){this.mode=[AUTOBUYER_MODE.BUY_SINGLE,AUTOBUYER_MODE.BUY_10].nextSibling(this.mode)}get canTick(){const e=player.auto.antimatterDims,t=e.all[this.tier-1],i=e.isActive,a=t&&(!Autobuyer.antimatterDimension.collapseDisplay||i),n=AntimatterDimension(this.tier),s=n.isAvailableForPurchase&&n.isAffordable,r=this.timeSinceLastTick>=this.interval,o=player.auto.autobuyersOn&&this.isActive&&(this.isUnlocked||this.isBought);return a&&s&&r&&o}tick(){super.tick();const e=this.tier;switch(this.mode){case AUTOBUYER_MODE.BUY_SINGLE:buyOneDimension(e);break;case AUTOBUYER_MODE.BUY_10:buyMaxDimension(e,this.bulk);break}}upgradeBulk(){this.hasMaxedBulk||Currency.infinityPoints.purchase(this.cost)&&(this.data.bulk=Math.clampMax(2*this.bulk,this.bulkCap),this.data.cost=Math.ceil(2.4*this.cost),Achievement(61).tryUnlock(),GameUI.update())}purchase(){this.canUnlockSlowVersion&&(this.data.isBought=!0)}get resetTickOn(){return Perk.antimatterNoReset.canBeApplied?PRESTIGE_EVENT.ANTIMATTER_GALAXY:PRESTIGE_EVENT.DIMENSION_BOOST}reset(){super.reset(),EternityMilestone.keepAutobuyers.isReached||PelleUpgrade.keepAutobuyers.canBeApplied||(this.data.isUnlocked=!1,this.data.isBought=!1,this.data.bulk=1,TabNotification.newAutobuyer.clearTrigger())}static get entryCount(){return 8}static get autobuyerGroupName(){return"Antimatter Dimension"}static get isActive(){return player.auto.antimatterDims.isActive}static set isActive(e){player.auto.antimatterDims.isActive=e}static createAccessor(){const e=super.createAccessor();return Object.defineProperties(e,{allBought:{get:()=>e.zeroIndexed.every((e=>e.isBought))},allUnlimitedBulk:{get:()=>e.zeroIndexed[0].hasUnlimitedBulk},bulkCap:{get:()=>e.zeroIndexed[0].bulkCap},collapseDisplay:{get:()=>e.allMaxedInterval&&e.allUnlocked&&e.allUnlimitedBulk}}),e}}class vu extends yu{get data(){return player.auto.bigCrunch}get name(){return"Infinity"}get isUnlocked(){return!!ue.mendingUnlocked()||(Pelle.isDoomed?PelleStrikes.infinity.hasStrike:this.canBeUpgraded)}get canBeUpgraded(){return NormalChallenge(12).isCompleted||ue.mendingUnlocked()}get baseInterval(){return Player.defaultStart.auto.bigCrunch.interval}get mode(){return this.data.mode}set mode(e){this.data.mode=e}get hasAdditionalModes(){return EternityMilestone.bigCrunchModes.isReached}get increaseWithMult(){return this.data.increaseWithMult}set increaseWithMult(e){this.data.increaseWithMult=e}get amount(){return this.data.amount}get bulk(){return 0}set amount(e){this.data.amount=e}get time(){return this.data.time}set time(e){this.data.time=new Decimal(e)}get xHighest(){return this.data.xHighest}set xHighest(e){this.data.xHighest=e}autoInfinitiesAvailable(e){return(e||EternityMilestone.autoInfinities.isReached)&&!EternityChallenge(4).isRunning&&!EternityChallenge(12).isRunning&&!Player.isInAntimatterChallenge&&player.auto.autobuyersOn&&this.data.isActive&&!Autobuyer.eternity.isActive&&this.mode===AUTO_CRUNCH_MODE.TIME&&this.time.lt(60)&&!Autobuyer.eternity.autoEternitiesAvailable()}upgradeInterval(e){super.upgradeInterval(e),TabNotification.breakInfinity.tryTrigger()}bumpAmount(e){this.isUnlocked&&this.increaseWithMult&&(this.amount=this.amount.times(e))}get canTick(){return Player.canCrunch&&super.canTick}get resetTickOn(){return PRESTIGE_EVENT.ETERNITY}get highestPrevPrestige(){return player.records.thisEternity.maxIP}get timeToNextTick(){return Math.clampMin(this.time-Time.thisInfinityRealTime.totalSeconds.toNumber(),0)}get willInfinity(){if(!player.break||Player.isInAntimatterChallenge)return!0;switch(this.mode){case AUTO_CRUNCH_MODE.AMOUNT:return gainedInfinityPoints().gte(this.amount);case AUTO_CRUNCH_MODE.TIME:return Time.thisInfinityRealTime.totalSeconds.gt(this.time);case AUTO_CRUNCH_MODE.X_HIGHEST:default:return gainedInfinityPoints().gte(this.highestPrevPrestige.times(this.xHighest))}}tick(){super.tick(),this.willInfinity&&bigCrunchResetRequest(!0)}reset(){super.reset(),EternityMilestone.bigCrunchModes.isReached||(this.mode=AUTO_CRUNCH_MODE.AMOUNT)}}class bu extends mu{get data(){return player.auto.blackHolePower.all[this.id-1]}get name(){return`Black Hole ${this.id} Power`}get isUnlocked(){return Ra.unlocks.blackHolePowerAutobuyers.canBeApplied||MendingMilestone.three.isReached}get hasUnlimitedBulk(){return!0}tick(){const e=BlackHole(this.id);while(Currency.realityMachines.gte(e.powerUpgrade.cost))e.powerUpgrade.purchase()}static get entryCount(){return 2}static get autobuyerGroupName(){return"Black Hole Power"}static get isActive(){return player.auto.blackHolePower.isActive}static set isActive(e){player.auto.blackHolePower.isActive=e}}class Eu extends mu{get data(){return player.auto.expoBlackHolePower.all[this.id-1]}get name(){return`Exponent Black Hole ${this.id} Power`}get isUnlocked(){return WarpUpgrade(7).isBought}get hasUnlimitedBulk(){return!0}tick(){const e=ExpoBlackHole(this.id);while(Currency.imaginaryMachines.gte(e.powerUpgrade.cost))e.powerUpgrade.purchase()}static get entryCount(){return 1}static get autobuyerGroupName(){return"Exponent Black Hole Power"}static get isActive(){return player.auto.expoBlackHolePower.isActive}static set isActive(e){player.auto.expoBlackHolePower.isActive=e}}class Tu extends pu{get data(){return player.auto.ascension}get name(){return"Dark Matter Dimension Ascension"}get isUnlocked(){return SingularityMilestone.ascensionAutobuyers.canBeApplied||player.celestials.ra.permanentMemories.lai50}get interval(){return 1e3*SingularityMilestone.darkAutobuyerSpeed.effectValue}get hasUnlimitedBulk(){return!0}tick(){super.tick();let e=SingularityMilestone.darkDimensionAutobuyers.effectValue;player.celestials.ra.permanentMemories.lai50&&(e=8);for(let t=1;t<=e;t++)DarkMatterDimension(t).ascend()}}class wu extends pu{get data(){return player.auto.darkMatterDims}get name(){return"Dark Matter Dimensions"}get isUnlocked(){return SingularityMilestone.darkDimensionAutobuyers.canBeApplied||player.celestials.ra.permanentMemories.lai50}get interval(){return 1e3*SingularityMilestone.darkAutobuyerSpeed.effectValue}get hasUnlimitedBulk(){return!0}tick(){super.tick();let e=SingularityMilestone.darkDimensionAutobuyers.effectValue;player.celestials.ra.permanentMemories.lai50&&(e=8),Laitela.maxAllDMDimensions(e)}}const ku={glyphs:[],realityProps:void 0,get active(){return Modal.reality.isOpen},get choiceCount(){return Effects.max(1,Perk.firstPerk)*Ra.unlocks.extraGlyphChoicesAndRelicShardRarityAlwaysMax.effectOrDefault(1)},glyphUncommonGuarantee(e,t){if(player.mending.corruptionChallenge.corruptedMend)return;const i=1.5,a=t.uniform();let n;do{n=GlyphGenerator.randomStrength(t)}while(ne.strength>=i))||(e[Math.floor(a*e.length)].strength=n)},glyphList(e,t,i){const a=Math.clampMin(e,4);let n=[];const s=i.rng||new GlyphGenerator.RealGlyphRNG,r=[];if(player.realities<=5*GlyphGenerator.uniformityGroups)n=GlyphGenerator.uniformGlyphs(t,s,player.realities);else{for(let e=0;ethis.realityProps.gainedGlyphLevel.rawLevel){this.realityProps.gainedGlyphLevel.rawLevel=e.rawLevel;for(const t of this.glyphs)t.rawLevel=e.rawLevel}if(e.actualLevel>this.realityProps.gainedGlyphLevel.actualLevel){this.realityProps.gainedGlyphLevel.actualLevel=e.actualLevel;for(const t of this.glyphs)t.level=e.actualLevel,calculateGlyph(t)}}},select(e,t){const i=this.glyphs[e];t?GlyphSacrificeHandler.removeGlyph(i,!0):GameCache.glyphInventorySpace.value>0?Ete.addToInventory(i):AutoGlyphProcessor.getRidOfGlyph(i),this.glyphs=[],this.realityProps=void 0}};function Cu(){return player.records.thisReality.maxEP.exponent>=4e3&&TimeStudy.reality.isBought}function Au(e){const t=Enslaved.boostReality?Enslaved.realityBoostRatio-1:0,i=AlchemyResource.multiversal.effectValue,a=(i+1)*(t+1)+player.partSimulatedReality-1+(pl(13).isBought?2:0);return e&&(player.partSimulatedReality=a-Math.floor(a)),Math.floor(a)}function _u(){!ku.active&&Cu()&&(GameEnd.creditsEverClosed&&!ue.mendingUnlocked()||(player.options.confirmations.glyphSelection||ui.view.shiftDown?Modal.reality.show():0!==GameCache.glyphInventorySpace.value?Su(!1):Modal.message.show("No available inventory space; free up space by shift-clicking Glyphs to get rid of them.",{closeEvent:GAME_EVENT.GLYPHS_CHANGED})))}function Su(e,t){player.options.animations.reality?(Ru(),setTimeout(Du,3e3,e,t)):Du(e,t)}function Du(e,t){if(Cu()){if(0!==player.realities||ue.mendingUnlocked())if(Perk.firstPerk.isEffectActive)if(ku.generate(ku.choiceCount),void 0===t)if(EffarigUnlock.glyphFilter.isUnlocked){const t=AutoGlyphProcessor.pick(ku.glyphs),i=player.options.confirmations.glyphSelection?e:!AutoGlyphProcessor.wouldKeep(t);i||0===GameCache.glyphInventorySpace.value?AutoGlyphProcessor.getRidOfGlyph(t):Ete.addToInventory(t)}else ku.select(Math.floor(Math.random()*ku.choiceCount),e);else ku.select(t,e);else{ku.generate(1);const t=player.realities*(player.reality.initialSeed%5+3);ku.select(permutationIndex(4,t)[0],e)}else player.reality.seed=player.reality.initialSeed,Ete.addToInventory(GlyphGenerator.startingGlyph(gainedGlyphLevel())),Ete.addToInventory(GlyphGenerator.companionGlyph(Mi.eternityPoints.value));Uu(Iu(!1,!0)),PerkNetwork.updatePerkColor()}}function Ru(){document.getElementById("ui").style.userSelect="none",document.getElementById("ui").style.animation="a-realize 10s 1",document.getElementById("realityanimbg").style.animation="a-realizebg 10s 1",document.getElementById("realityanimbg").style.display="block",Theme.current().isDark()?document.getElementById("realityanimbg").style.filter="invert(1)":document.getElementById("realityanimbg").style.filter="",setTimeout((()=>{document.getElementById("realityanimbg").play(),document.getElementById("realityanimbg").currentTime=0,document.getElementById("realityanimbg").play()}),2e3),setTimeout((()=>{document.getElementById("ui").style.userSelect="auto",document.getElementById("ui").style.animation="",document.getElementById("realityanimbg").style.animation="",document.getElementById("realityanimbg").style.display="none"}),1e4)}function Mu(e,t){let i;const a=ku.glyphList(ku.choiceCount,e,{rng:t});let n;EffarigUnlock.glyphFilter.isUnlocked?(i=AutoGlyphProcessor.pick(a),n=AutoGlyphProcessor.wouldKeep(i)):(i=a[0],n=!0),n&&GameCache.glyphInventorySpace.value>0?Ete.addToInventory(i):AutoGlyphProcessor.getRidOfGlyph(i)}function Iu(e,t=!1){const i={glyphUndo:!1,restoreCelestialState:!1};return e?Object.assign(i,{reset:!0}):Object.assign(i,{reset:!1,gainedRM:MachineHandler.gainedRealityMachines,gainedGlyphLevel:gainedGlyphLevel(),gainedShards:Effarig.shardsGained,simulatedRealities:Au(!0),alreadyGotGlyph:t})}function xu(){!ku.active&&Cu()&&Uu(Iu(!1,!1))}function Pu(e){const t=e.gainedRM.dividedBy(Decimal.clampMin(5e-4,Time.thisRealityRealTime.totalMinutes).toNumber());player.records.bestReality.RMmin.lt(t)&&(player.records.bestReality.RMmin=t,player.records.bestReality.RMminSet=Ete.copyForRecords(Ete.active.filter((e=>null!==e)))),player.records.bestReality.glyphLevelnull!==e)))),player.records.bestReality.time=Decimal.min(player.records.thisReality.time,player.records.bestReality.time),player.records.thisReality.realTimenull!==e))))}function Gu(e){const t=e.simulatedRealities+1,i=t+(MendingMilestone.two.isReached?t:binomialDistribution(t,Achievement(154).effectOrDefault(0))),a=Mi.realityMachines.gte(MachineHandler.hardcapRM)?b.D0:e.gainedRM;if(Mi.realityMachines.add(a.times(t)),Pu(e),addRealityTime(player.records.thisReality.time,player.records.thisReality.realTime,a,e.gainedGlyphLevel.actualLevel,i,t,MachineHandler.projectedIMCap),Mi.realities.add(i*(MendingMilestone.one.isReached?5:1)),MendingMilestone.one.isReached?Mi.perkPoints.add(5*i):Mi.perkPoints.add(i),TeresaUnlocks.effarig.canBeApplied&&Mi.relicShards.add(e.gainedShards.times(t)),t>1&&Enslaved.boostReality&&(Time.thisRealityRealTime.totalSeconds.lte(1)?player.celestials.enslaved.storedReal*=1-Time.thisRealityRealTime.totalSeconds:player.celestials.enslaved.storedReal=0,Enslaved.boostReality=!1),Teresa.isRunning){const e=Teresa.runRewardMultiplier,t=Teresa.rewardMultiplier(player.antimatter),i=t>e,a=`You have completed Teresa's Reality! ${i?`Since you gained more Antimatter, you increased your\n Glyph Sacrifice multiplier from ${format(e,2,2)} to ${format(t,2,2)}`:"You did not gain more Antimatter during this run, so the Glyph Sacrifice multiplier\n from Teresa did not increase"}.`;if(Modal.message.show(a,{},2),Mi.antimatter.gt(player.celestials.teresa.bestRunAM)){let e;player.celestials.teresa.bestRunAM=Mi.antimatter.value,player.celestials.teresa.bestAMSet=Ete.copyForRecords(Ete.active.filter((e=>null!==e))),e=0===Mi.imaginaryMachines.value?player.reality.maxRM:b.E10000.times(Mi.imaginaryMachines.value),player.celestials.teresa.lastRepeatedMachines=player.celestials.teresa.lastRepeatedMachines.clampMin(e)}Teresa.quotes.completeReality.show()}Effarig.isRunning&&!EffarigUnlock.reality.isUnlocked&&(EffarigUnlock.reality.unlock(),EffarigUnlock.eternity.unlock(),EffarigUnlock.infinity.unlock(),Effarig.quotes.completeReality.show()),Enslaved.isRunning&&Enslaved.completeRun(),V.isRunning&&V.quotes.realityComplete.show()}function Uu(e){if(e.reset)return void Bu(e);EventHub.dispatch(GAME_EVENT.REALITY_RESET_BEFORE);const t=e.simulatedRealities+(e.alreadyGotGlyph?0:1),i=GlyphGenerator.getRNG(!1),a=gainedGlyphLevel();if(Bu(e),t<100){for(let n=0;n({type:e,count:b.D0,totalSacrifice:b.D0,varProdSacrifice:b.D0}))),totalStats:{count:b.D0,totalSacrifice:b.D0,varProdSacrifice:b.D0}},o=(e,t)=>{const i=e.totalSacrifice.div(e.count);e.totalSacrifice=stat.totalSacrifice.add(t),e.count=e.count.add(1);const a=e.totalSacrifice.div(e.count);e.count.neq(1)&&(e.varProdSacrifice=e.varProdSacrifice.add(t.sub(i))*t.sub(a))},l=(e,t)=>{if(0===e.count)return 0;const i=e.totalSacrifice/e.count,a=Math.sqrt(e.varProdSacrifice/e.count);return normalDistribution(i*t,a*Math.sqrt(t))},c=()=>{if(s){const t=ku.glyphList(ku.choiceCount,e.gainedGlyphLevel,{rng:i}),a=AutoGlyphProcessor.pick(t),n=GlyphSacrificeHandler.glyphSacrificeGain(a),s=r.sampleStats.find((e=>e.type===a.type));o(s,n),o(r.totalStats,n)}else Mu(e.gainedGlyphLevel,i),VUnlocks.autoAutoClean.canBeApplied&&player.reality.autoAutoClean&&Ete.autoClean()},u=Math.min(t,1e4);Async.run(c,t,{batchSize:100,maxTime:33,sleepTime:1,asyncEntry:e=>{GameIntervals.stop(),ui.$viewModel.modal.progressBar={label:"Simulating Amplified Reality",info:`The game is currently calculating all the resources you would gain from repeating the\n Reality you just completed ${formatInt(t)} more times. Pressing "Quick Glyphs" with\n more than ${formatInt(u)} Glyphs remaining will speed up the calculation by automatically\n sacrificing all the remaining Glyphs you would get. Pressing "Skip Glyphs" will ignore all resources\n related to Glyphs and stop the simulation after giving all other resources.\n ${Ra.unlocks.unlockGlyphAlchemy.canBeApplied?"Pressing either button to speed up\n simulation will not update any resources within Glyph Alchemy.":""}`,progressName:"Realities",current:e,max:t,startTime:Date.now(),buttons:[{text:"Quick Glyphs",condition:(e,t)=>t-e>u,click:()=>{s=!0,r.toGenerate=n.remaining,n.maxIter-=n.remaining-u,n.remaining=u,ui.$viewModel.modal.progressBar.max=n.maxIter}},{text:"Skip Glyphs",condition:()=>!0,click:()=>{n.maxIter-=n.remaining,n.remaining=0}}]}},asyncProgress:e=>{ui.$viewModel.modal.progressBar.current=e},asyncExit:()=>{ui.$viewModel.modal.progressBar=void 0,GameIntervals.start()},then:()=>{if(r.toGenerate>0)if(AutoGlyphProcessor.scoreMode===AUTO_GLYPH_SCORE.LOWEST_SACRIFICE){let e=l(r.totalStats,r.toGenerate);const t=generatedTypes.filter((e=>EffarigUnlock.reality.isUnlocked||"effarig"!==e)),i=t.map((e=>player.reality.glyphs.sac[e])).sort(((e,t)=>e.sub(t).gte(0))),a=[];for(const s of t)a.push({type:s,value:player.reality.glyphs.sac[s]});const n=Object.values(a).sort(((e,t)=>e.value.sub(t.value).gte(0)));for(let s=0;snull!==e))));const i=player.records.thisReality.realTime,a=e.reset;a||Gu(e),e.glyphUndo||(Ete.clearUndo(),player.reality.respec&&respecGlyphs(),player.celestials.ra.disCharge&&disChargeAll(),player.celestials.ra.breakDischarge&&disChargeAllBreak()),player.options.automatorEvents.clearOnReality&&AutomatorData.clearEventLog(),Player.automatorUnlocked&&AutomatorBackend.state.forceRestart&&AutomatorBackend.start(AutomatorBackend.state.topLevelScript);const n=Lu();if(recalculateAllGlyphs(),Ete.updateMaxGlyphCount(!0),player.sacrificed=b.D0,$u(),initializeChallengeCompletions(!0),Mi.infinities.reset(),pl(2).isBought&&Mi.infinities.bumpTo(b.E12),Mi.infinitiesBanked.reset(),player.records.bestInfinity.time=Decimal.pow10(Number.MAX_VALUE),player.records.bestInfinity.realTime=Number.MAX_VALUE,player.records.thisInfinity.time=b.D0,player.records.thisInfinity.lastBuyTime=b.D0,player.records.thisInfinity.realTime=0,player.dimensionBoosts=0,player.galaxies=0,player.partInfinityPoint=0,player.partInfinitied=0,ue.mendingUnlocked()||(player.break=!1),player.IPMultPurchases=0,Mi.infinityPower.reset(),Mi.timeShards.reset(),Replicanti.reset(!0),pl(2).isBought&&(Replicanti.amount=Replicanti.amount.clampMin(1),Replicanti.unlock(!0)),Mi.eternityPoints.reset(),EternityUpgrade.epMult.reset(),PelleUpgrade.eternitiesNoReset.canBeApplied||Mi.eternities.reset(),player.records.thisEternity.time=b.D0,player.records.thisEternity.realTime=0,player.records.bestEternity.time=Decimal.pow10(Number.MAX_VALUE),player.records.bestEternity.realTime=Number.MAX_VALUE,PelleUpgrade.keepEternityUpgrades.canBeApplied||player.eternityUpgrades.clear(),player.totalTickGained=0,PelleUpgrade.keepEternityChallenges.canBeApplied||pl(3).isBought||(player.eternityChalls={}),player.reality.unlockedEC=0,player.reality.lastAutoEC=0,player.challenge.eternity.current=0,PelleUpgrade.timeStudiesNoReset.canBeApplied||(player.challenge.eternity.unlocked=0),player.challenge.eternity.requirementBits=0,player.respec=!1,player.eterc8ids=50,player.eterc8repl=40,e.glyphUndo?player.requirementChecks.reality.maxGlyphs=Math.max(Ete.bestUndoGlyphCount,player.requirementChecks.reality.maxGlyphs):Player.resetRequirements("reality"),player.records.thisReality.time=b.D0,player.records.thisReality.realTime=0,player.records.thisReality.maxReplicanti=b.D0,PelleUpgrade.timeStudiesNoReset.canBeApplied||Mi.timeTheorems.reset(),player.celestials.v.STSpent=0,PelleUpgrade.timeStudiesNoReset.canBeApplied||(player.dilation.studies=[],player.dilation.active=!1),PelleUpgrade.dilationUpgradesNoReset.canBeApplied||(player.dilation.upgrades.clear(),player.dilation.rebuyables={1:0,2:0,3:0,11:0,12:0,13:0}),PelleUpgrade.tachyonParticlesNoReset.canBeApplied||Mi.tachyonParticles.reset(),player.dilation.nextThreshold=b.E3,player.dilation.baseTachyonGalaxies=0,player.dilation.totalTachyonGalaxies=0,Mi.dilatedTime.reset(),player.records.thisInfinity.maxAM=b.D0,player.records.thisEternity.maxAM=b.D0,player.records.thisReality.maxDT=b.D0,player.records.thisReality.remWithoutGG=0,player.dilation.lastEP=b.DM1,Mi.antimatter.reset(),Enslaved.autoReleaseTick=0,player.celestials.enslaved.hasSecretStudy=!1,player.celestials.laitela.entropy=0,playerInfinityUpgradesOnReset(),resetInfinityRuns(),resetEternityRuns(),InfinityDimensions.fullReset(),fullResetTimeDimensions(),resetChallengeStuff(),ue.mendingUnlocked()&&NormalChallenges.completeAll(),AntimatterDimensions.reset(),secondSoftReset(!1),player.celestials.ra.peakGamespeed=b.D1,InfinityDimensions.resetAmount(),player.records.thisInfinity.bestIPmin=b.D0,player.records.bestInfinity.bestIPminEternity=b.D0,player.records.thisEternity.bestEPmin=b.D0,player.records.thisEternity.bestInfinitiesPerMs=b.D0,player.records.thisEternity.bestIPMsWithoutMaxAll=b.D0,player.records.bestEternity.bestEPminReality=b.D0,player.records.thisReality.bestEternitiesPerMs=b.D0,player.records.thisReality.bestRSmin=b.D0,player.records.thisReality.bestRSminVal=b.D0,resetTimeDimensions(),resetTickspeed(),AchievementTimers.marathon2.reset(),Mi.infinityPoints.reset(),pl(2).isBought?Mi.eternities.bumpTo(b.E6):RealityUpgrade(10).isBought?Ou():Tab.dimensions.antimatter.show(),Lazy.invalidateAll(),ECTimeStudyState.invalidateCachedRequirements(),EventHub.dispatch(GAME_EVENT.REALITY_RESET_AFTER),TeresaUnlocks.startEU.canBeApplied)for(const s of[1,2,3,4,5,6])player.eternityUpgrades.add(s);else RealityUpgrade(14).isBought&&applyEU1();a||Ra.applyAlchemyReactions(i),player.reality.gainedAutoAchievements=!1,player.reality.hasCheckedFilter=!1,(e.restoreCelestialState||player.options.retryCelestial)&&Nu(n),Pelle.isDoomed&&PelleUpgrade.keepAutobuyers.canBeApplied&&Autobuyer.bigCrunch.hasMaxedInterval&&(player.break=!0),Ete.updateMaxGlyphCount()}function Nu(e){player.celestials.teresa.run=e.teresa,player.celestials.teresa.run&&Teresa.initializeRun(),player.celestials.effarig.run=e.effarig,player.celestials.effarig.run&&Effarig.initializeRun(),player.celestials.enslaved.run=e.enslaved,player.celestials.enslaved.run&&Enslaved.initializeRun(),player.celestials.v.run=e.v,player.celestials.v.run&&V.initializeRun(),player.celestials.v.superrun=e.superv,player.celestials.v.superrun&&V.initializeSuperRun(),player.celestials.ra.run=e.ra,player.celestials.ra.run&&Ra.initializeRun(),player.celestials.laitela.run=e.laitela,player.celestials.laitela.run&&Laitela.initializeRun()}function Ou(){if(NormalChallenges.completeAll(),PelleUpgrade.replicantiStayUnlocked.canBeApplied&&(Replicanti.amount=Replicanti.amount.clampMin(1),Replicanti.unlock(!0)),!Pelle.isDisabled("rupg10")){player.auto.antimatterDims.all=player.auto.antimatterDims.all.map((e=>({isUnlocked:!0,cost:1e14,interval:100,bulk:1e10,mode:e.mode,priority:e.priority,isActive:e.isActive,lastTick:player.records.realTimePlayed})));for(const e of Autobuyers.all)void 0!==e.data.interval&&(e.data.interval=100);player.dimensionBoosts=Math.max(4,player.dimensionBoosts),player.galaxies=Math.max(1,player.galaxies),player.break=!0,Mi.eternities.bumpTo(100),Replicanti.amount=Replicanti.amount.clampMin(1),Replicanti.unlock(!0),applyEU1()}}function Lu(){const e={teresa:player.celestials.teresa.run,effarig:player.celestials.effarig.run,enslaved:player.celestials.enslaved.run,v:player.celestials.v.run,superv:player.celestials.v.superrun,ra:player.celestials.ra.run,laitela:player.celestials.laitela.run};return player.celestials.teresa.run=!1,player.celestials.effarig.run=!1,Enslaved.isRunning&&(player.celestials.enslaved.run=!1,(Tabs.current.isHidden||Tabs.current._currentSubtab.isHidden)&&Tab.celestials.enslaved.show(),AutomatorData.recalculateErrors()),player.celestials.v.run=!1,player.celestials.v.superrun=!1,player.celestials.ra.run=!1,player.celestials.laitela.run=!1,e}function Fu(){return!!player.celestials.v.superrun||Object.values(player.celestials).some((e=>e.run))}function $u(){if(!Perk.achievementGroup5.isBought&&!ue.mendingUnlocked()){for(const e of Achievements.preReality)e.lock();player.reality.achTimer=b.D0}}const Hu={isDisplaying:!1,displayForce(e,t){document.body.style.animation=`${e} ${t}s 1`,this.isDisplaying=!0,setTimeout((()=>{document.body.style.animation="",this.isDisplaying=!1}),1e3*t)},display(e,t){this.isDisplaying||this.displayForce(e,t)}};function qu(e){player.records.bestEternity.time=Decimal.min(player.records.thisEternity.time,player.records.bestEternity.time),Mi.eternityPoints.add(gainedEternityPoints());const t=Ju();if(Mi.eternities.eq(0)&&t.lte(10)&&Tab.dimensions.time.show(),Mi.eternities.add(t),EternityChallenge.isRunning){const t=EternityChallenge.current;if(t.addCompletion(!1),Perk.studyECBulk.isBought){let e=0;while(!t.isFullyCompleted&&t.canBeCompleted)t.addCompletion(!1),e++;AutomatorData.lastECCompletionCount=e,Enslaved.isRunning&&e>5&&EnslavedProgress.ec1.giveProgress()}player.challenge.eternity.requirementBits&=~(1<{Wu(),e&&e()}),2250)):(Wu(),e&&e()),t}function Xu(e){NormalChallenges.clearCompletions(),PelleUpgrade.keepInfinityChallenges.canBeApplied||InfinityChallenges.clearCompletions(),(!e&&td.keepAutobuyers.isReached||Pelle.isDoomed||MendingMilestone.one.isReached)&&NormalChallenges.completeAll(),Achievement(133).isUnlocked&&!Pelle.isDoomed&&InfinityChallenges.completeAll(),player.challenge.normal.current=0,player.challenge.infinity.current=0}function zu(){player.sacrificed=b.D0,Mi.infinities.reset(),player.records.bestInfinity.time=Decimal.pow10(Number.MAX_VALUE),player.records.bestInfinity.realTime=Number.MAX_VALUE,player.records.thisInfinity.time=b.D0,player.records.thisInfinity.lastBuyTime=b.D0,player.records.thisInfinity.realTime=0,player.dimensionBoosts=td.keepInfinityUpgrades.isReached?4:0,player.galaxies=td.keepInfinityUpgrades.isReached?1:0,player.partInfinityPoint=0,player.partInfinitied=0,player.IPMultPurchases=0,Mi.infinityPower.reset(),Mi.timeShards.reset(),player.records.thisEternity.time=b.D0,player.records.thisEternity.realTime=0,player.totalTickGained=0,player.eterc8ids=50,player.eterc8repl=40,Player.resetRequirements("eternity")}function Ku(){if(player.eternityUpgrades.size<3&&Perk.autounlockEU1.canBeApplied)for(const e of[1,2,3])player.eternityUpgrades.add(e)}function Zu(){if(player.eternityUpgrades.size<6&&Perk.autounlockEU2.canBeApplied){const e=nd.all.filter((e=>e.id>3));for(const t of e)player.eternityPoints.gte(t.cost/1e10)&&player.eternityUpgrades.add(t.id)}}function Qu(){player.dilation.active&&player.options.confirmations.dilation?Modal.exitDilation.show():player.options.confirmations.eternity?Modal.eternity.show():ju()}function Ju(){let e=new Decimal(1);if(MendingMilestone.one.isReached&&(e=e.times(1e4)),Ra.unlocks.realitiesBoostInfinityAndEternityProduction.isUnlocked){let t=Math.pow(Math.log10(Mi.realities.value)/20,1.111);t>1.5&&(t=1.5+Math.pow(t-1.5,.75)),e=e.pow(t)}return Pelle.isDisabled("eternityMults")?Ra.unlocks.unlockPelleGlyphEffects.isUnlocked?e.times(getAdjustedGlyphEffect("timeetermult")):e:e.times(getAdjustedGlyphEffect("timeetermult")).timesEffectsOf(RealityUpgrade(3),Achievement(113)).pow(AlchemyResource.eternity.effectValue)}class ed{constructor(e){this.config=e}get isReached(){return Pelle.isDoomed&&this.config.givenByPelle?this.config.givenByPelle():Mi.eternities.gte(this.config.eternities)}}const td=mapGameDataToObject(GameDatabase.eternity.milestones,(e=>(e.isBaseResource,new ed(e))));class id extends D{get currency(){return Mi.eternityPoints}get set(){return player.eternityUpgrades}}class ad extends A{constructor(){super({}),this.cachedCost=new Lazy((()=>this.costAfterCount(player.epmultUpgrades))),this.cachedEffectValue=player.celestials.pelle.doomed&&Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked?new Lazy((()=>Decimal.pow(1.5,player.epmultUpgrades))):new Lazy((()=>b.D5.pow(player.epmultUpgrades)))}get isAffordable(){return(!player.mending.corruptionChallenge.corruptedMend||!ye.repSing.hiddenFour[player.mending.corruption[8]])&&(!!(Pelle.isDoomed&&Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked&&Mi.eternityPoints.gte(this.cost))||!Pelle.isDoomed&&!this.isCapped&&Mi.eternityPoints.gte(this.cost))}get cost(){return this.cachedCost.value}get boughtAmount(){return player.mending.corruptionChallenge.corruptedMend&&ye.repSing.hiddenFour[player.mending.corruption[8]]?0:player.epmultUpgrades}get purchaseCap(){return 5e8}get isCapped(){return player.epmultUpgrades>=this.purchaseCap}set boughtAmount(e){const t=Math.clampMin(e-player.epmultUpgrades,0);player.epmultUpgrades=Math.min(e,5e8),this.cachedCost.invalidate(),this.cachedEffectValue.invalidate(),Autobuyer.eternity.bumpAmount(b.D5.pow(t))}get isCustomEffect(){return!0}get effectValue(){return this.cachedEffectValue.value}purchase(){return!!this.isAffordable&&(Mi.eternityPoints.subtract(this.cost),++this.boughtAmount,!0)}buyMax(e){if(!this.isAffordable)return!1;if(RealityUpgrade(15).isLockingMechanics)return e||RealityUpgrade(15).tryShowWarningModal(),!1;let t=null;try{t=bulkBuyBinarySearch(Mi.eternityPoints.value,{costFunction:this.costAfterCount,cumulative:!0,firstCost:this.cost},this.boughtAmount)}catch(i){return this.boughtAmount=5e8,!0}return!!t&&(Mi.eternityPoints.subtract(t.purchasePrice),this.boughtAmount+=t.quantity,!0)}reset(){this.boughtAmount=0}get costIncreaseThresholds(){return[b.E100,Decimal.NUMBER_MAX_VALUE,b.E1300,b.E4000]}costAfterCount(e){const t=nd.epMult.costIncreaseThresholds,i=[50,100,500,1e3];for(let a=0;anew id(e)));nd.epMult=new ad;var sd=i(9856),rd=i(7398);class od{static initializeVars(){od._wasLongPress=!1,od._pressTimer=null,od._currentCancelHandler=null,od._currentTarget=null,od._pressCount=0}static addTo(e,t,i){if(!Object.prototype.hasOwnProperty.call(i,"longPress"))throw"Need to specify a longPress handler";const a=e=>od._pressBegin(t,i.longPress,i.cancel,i.repeat,e);e.addEventListener("mousedown",a),e.addEventListener("touchstart",a),e.addEventListener("mouseout",od._cancelCurrentPress),e.addEventListener("touchcancel",od._cancelCurrentPress),e.addEventListener("touchmove",(t=>{t.preventDefault();const i=t.changedTouches[0];e!==document.elementFromPoint(i.pageX,i.pageY)&&od._cancelCurrentPress()})),i.click?(e.addEventListener("click",(e=>od._handleClick(e,i.click))),e.addEventListener("touchend",(e=>od._handleTouchEnd(e,i.click)))):(e.addEventListener("click",od._cancelCurrentPress),e.addEventListener("touchend",od._cancelCurrentPress))}static _cancelCurrentPress(e){od._currentCancelHandler&&(od._currentCancelHandler(e),od._currentCancelHandler=null),null!==od._pressTimer&&(clearTimeout(od._pressTimer),od._pressTimer=null),od._wasLongPress=!1,od._currentTarget=null}static _pressBegin(e,t,i,a,n){od._cancelCurrentPress(n),"click"===n.type&&0!==n.button||(++od._pressCount,od._currentCancelHandler=i,od._wasLongPress=!1,od._currentTarget=n.target,n.target.focus(),od._pressTimer=setTimeout((()=>{od._wasLongPress=!0,t(n),a?od._beginRepeat(a,t,n):(od._pressTimer=null,od._currentCancelHandler=null)}),e))}static _beginRepeat(e,t,i){od._pressTimer=setTimeout((()=>{t(i),od._beginRepeat(e,t,i)}),e)}static _handleClick(e,t){const i=od._wasLongPress;return 0!==e.button?t(e):(od._cancelCurrentPress(e),!i&&t(e))}static _handleTouchEnd(e,t){const i=od._currentTarget,a=od._wasLongPress;return od._cancelCurrentPress(e),!a&&i===e.target&&t(e)}}function ld(e){e.directive("long-press",{bind(e,t,i){const a=(e,t)=>{const a=i.data&&i.data.on;a&&a[e]&&a[e].fns(t)};od.addTo(e,t.value.delay,{longPress:()=>a("longpress"),cancel:()=>a("longpresscancel"),click:()=>a("longpressclick")})}})}function cd(e){e.directive("repeating-click",{bind(e,t,i){const a=(e,t)=>{const a=i.data&&i.data.on;a&&a[e]&&a[e].fns(t)};od.addTo(e,t.value.delay,{longPress:()=>a("repeatclick"),click:()=>a("firstclick"),repeat:250})}})}od.initializeVars();const ud=function(){const e=document.createElement("div");e.classList.add("o-notification");const t="a-notification--enter",i="a-notification--leave";function a(n,s,r=2e3){if(!GameUI.initialized)return void setTimeout(a,500,n,s,r);const o=e.cloneNode();o.textContent=n,o.classList.add(s,t);const l=document.getElementById("notification-container");l.appendChild(o);let c=!1;function u(){c||(c=!0,o.classList.remove(t))}setTimeout((()=>u()),500);let d=!1;function h(){d||(d=!0,u(),o.classList.add(i),setTimeout((()=>o.remove()),500))}setTimeout((()=>h()),r),o.onclick=()=>h()}return{success:(e,t)=>a(e,"o-notification--success",t),error:(e,t)=>a(e,"o-notification--error",t),info:(e,t)=>a(e,"o-notification--info",t),infinity:(e,t)=>a(e,"o-notification--infinity",t),eternity:(e,t)=>a(e,"o-notification--eternity",t),reality:(e,t)=>a(e,"o-notification--reality",t),automator:(e,t)=>a(e,"o-notification--automator",t),blackHole:(e,t)=>a(e,"o-notification--black-hole",t),strike:(e,t)=>a(e,"o-notification--strike",t),showBlackHoles:!0}}(),dd={view:{modal:{queue:[],current:void 0,cloudConflict:[],progressBar:void 0},quotes:{queue:[],current:void 0,history:void 0},tabs:{reality:{openGlyphWeights:!1,currentGlyphTooltip:-1,glyphTooltipDirection:1,draggingGlyphInfo:{id:0,type:"",sacrificeValue:b.D0},mouseoverGlyphInfo:{id:0,type:"",sacrificeValue:b.D0,refineValue:b.D0,inInventory:!1},automator:{fullScreen:!1,editorScriptID:"",lines:[]}}},shiftDown:!1,theme:"Normal",bigCrunch:!1,scrollWindow:0,draggingUIID:-1,currentContextMenu:null,tab:"dimensions",subtab:"antimatter",UIType:"Modern",news:!1,initialized:!1,tutorialState:0,tutorialActive:!0,h2pForcedTab:void 0},notationName:"",formatPreBreak:!1,lastClickTime:0};var hd=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.view.initialized?i("div",{staticClass:"ui-wrapper",class:e.containerClass,attrs:{id:"ui-container"}},[i("div",{staticClass:"c-game-ui",attrs:{id:"ui"}},[i(e.uiLayout,{tag:"component"},[i(e.page,{tag:"component",staticClass:"c-game-tab"})],1),e.isThemeS12?i("S12DesktopIcons"):e._e(),"Normal"!==e.view.theme?i("link",{attrs:{type:"text/css",rel:"stylesheet",href:e.themeCss}}):e._e()],1),e.isThemeS12?e._e():i("GameUiComponentFixed"),e.isThemeS12?e._e():i("BackgroundAnimations"),e.isThemeS12?i("S12UiFixed"):e._e()],1):e._e()},md=[],pd=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-background-animations",attrs:{id:"ui-background-animations"}},[e.blob?i("BlobSnowflakes"):e._e(),e.animateTachyons?i("TachyonParticles"):e._e()],1)},yd=[],fd=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.initialized?i("div",[e.animateBackground?i("svg",{staticClass:"c-blob-snowflake-container"},e._l(e.count,(function(t){return i("BlobSnowflake",{key:t,attrs:{bounds:e.bounds}})})),1):i("svg",{staticClass:"c-blob-background-container"},e._l(e.count,(function(t){return i("BlobBackground",{key:t,attrs:{bounds:e.bounds}})})),1)]):e._e()},gd=[],vd=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("text",{staticClass:"o-blob-background"})},bd=[];const Ed={name:"BlobBackground",props:{bounds:{type:Object,required:!0}},mounted(){this.drop()},methods:{drop(){const e=60,t=5+8*Math.random(),i=this.bounds,a={x:Math.random()*(i.x-e),y:e+Math.random()*(i.y-e)};function n(){const e=23,t="",i=t.codePointAt(0)||65,a=[];for(let n=0;n{this.$el.setAttribute("x",o.x),this.$el.setAttribute("y",o.y),o.y>c&&(d.chain(p),h.chain(p),m.chain(y))})),p=new(Sd().Tween)(o).to({x:e+Math.random()*(r.x-2*e)},0).chain(d).easing(Sd().Easing.Linear.None),y=new(Sd().Tween)(o).to({y:l},0).easing(Sd().Easing.Linear.None).chain(m).onUpdate((()=>{this.$el.textContent=f(),this.$el.setAttribute("x",o.x),this.$el.setAttribute("y",o.y),this.$el.setAttribute("font-size",`${s}em`),d.chain(h),h.chain(d),m.chain(m)}));function f(){const e=23,t="",i=t.codePointAt(0)||65,a=[];for(let n=0;n{this.$el.setAttribute(this.isBlob?"x":"cx",u.x),this.$el.setAttribute(this.isBlob?"y":"cy",u.y)})).easing(Sd().Easing.Linear.None).onComplete(this.fly.bind(this)).start(tweenTime)}}},$d=Fd;var Hd=(0,X.Z)($d,Od,Ld,!1,null,"374b7fbb",null);const qd=Hd.exports,Vd={name:"TachyonParticles",components:{TachyonParticle:qd},data(){return{count:0,initialized:!1,bounds:{x:0,y:0},isBlob:!1}},mounted(){this.$nextTick(this.updateSize),window.addEventListener("resize",this.updateSize),this.initialized=!0},destroyed(){window.removeEventListener("resize",this.updateSize)},methods:{update(){this.count=Currency.tachyonParticles.gte(1)?Math.clampMin(Math.floor(20*Math.log10(Currency.tachyonParticles.exponent)),1):0,this.isBlob="S11"===Theme.currentName()},updateSize(){this.bounds.x=this.$el.clientWidth,this.bounds.y=this.$el.clientHeight}}},Yd=Vd;var Wd=(0,X.Z)(Yd,Bd,Nd,!1,null,"d31a6422",null);const jd=Wd.exports,Xd={name:"BackgroundAnimations",components:{BlobSnowflakes:Ud,TachyonParticles:jd},data(){return{blob:!1,animateTachyons:!1}},methods:{update(){this.blob="S11"===Theme.currentName(),this.animateTachyons=player.options.animations.tachyonParticles&&"Time Dilation"===Tabs.current[this.$viewModel.subtab].name}}},zd=Xd;var Kd=(0,X.Z)(zd,pd,yd,!1,null,"e3d8c3e6",null);const Zd=Kd.exports;var Qd=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{key:e.newGameKey,staticClass:"container c-classic l-Classic",attrs:{id:"container"}},[i("link",{attrs:{rel:"stylesheet",type:"text/css",href:"stylesheets/classic.css"}}),i("BigCrunchButton"),e.bigCrunch?e._e():[e.news?i("NewsTicker",{staticClass:"l-classic__news-bar"}):e._e(),e.hasMendingButton?i("div",{staticClass:"c-mending-points"},[i("MendingPointsHeader"),i("MendingButton")],1):e._e(),i("GameHeader",{staticClass:"l-classic__header"}),i("ClassicTabBar"),e.tab.config.before?i(e.tab.config.before,{tag:"component"}):e._e(),i("ClassicSubtabBar"),i("div",{staticClass:"l-classic__page"},[e._t("default")],2)]],2)},Jd=[],eh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.isVisible,expression:"isVisible"}],staticClass:"c-mending-points"},[e._v(" You have "),i("span",{staticClass:"c-mending-tab__mending-points"},[e._v(e._s(e.formatNE(e.mendingPoints,2)))]),e._v(" "+e._s(e.pluralize("Multiversal Remain",e.mendingPoints))+". ")])},th=[];const ih={name:"MendingPointsHeader",data(){return{mendingPoints:new Decimal,isVisible:!1}},methods:{update(){this.mendingPoints.copyFrom(Currency.mendingPoints),this.isVisible=PlayerProgress.mendingUnlocked()}}},ah=ih;var nh=(0,X.Z)(ah,eh,th,!1,null,"a8ab28e8",null);const sh=nh.exports;var rh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.shouldDisplay?i("span",[e.isModern?i("div",[e.smallCrunch?e._e():i("h3",{staticClass:"l-spacing"},[e._v(" The world has collapsed due to excess antimatter. ")]),i("button",{class:{"btn-big-crunch":!0,"btn-big-crunch--small":e.smallCrunch},on:{click:e.handleClick}},[e._v(" Big Crunch ")])]):i("div",[i("button",{class:{"o-tab-btn":!0,"o-big-crunch-btn":!0,"l-classic__big-crunch-btn":!0,"l-classic__big-crunch-btn--overlay":e.smallCrunch},on:{click:e.handleClick}},[e._v(" Big Crunch ")]),e.smallCrunch?e._e():i("div",{staticClass:"o-emptiness"},[e._v(" The world has collapsed due to excess of antimatter. ")])])]):e._e()},oh=[];const lh={name:"BigCrunchButton",data(){return{isModern:!1,smallCrunch:!1,shouldDisplay:!1}},methods:{update(){this.shouldDisplay=!player.break&&Player.canCrunch,this.shouldDisplay&&(this.isModern="Modern"==player.options.UIType,this.smallCrunch=Time.bestInfinityRealTime.totalMinutes.lte(1))},handleClick(){PlayerProgress.infinityUnlocked()?bigCrunchResetRequest():Modal.bigCrunch.show()}}},ch=lh;var uh=(0,X.Z)(ch,rh,oh,!1,null,"ff18554e",null);const dh=uh.exports;var hh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("HeaderChallengeDisplay"),i("HeaderChallengeEffects"),i("HeaderPrestigeGroup"),e.hasReality?i("GameSpeedDisplay"):e._e(),e.hasReality?i("br"):e._e(),i("HeaderBlackHole")],1)},mh=[],ph=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.canModifyBlackHoles?i("span",{staticClass:"c-black-hole-header"},[i("PrimaryButton",{staticClass:"o-primary-btn--buy-max c-primary-btn--black-hole-header",attrs:{onclick:"BlackHoles.togglePause()"}},[e._v(" "+e._s(e.pauseText)+" ")]),e.canCharge?i("span",[i("PrimaryButton",{class:e.chargingClassObject(),attrs:{onclick:"Enslaved.toggleStoreBlackHole()"}},[e.isCharging?i("span",[e._v(" Stop Charging ")]):i("span",[e._v(" Charge ")])])],1):e._e(),e.displaySingle?i("span",{staticClass:"c-black-hole-status-text",domProps:{innerHTML:e._s("🌀:"+e.singleState)}}):i("span",e._l(e.blackHoles,(function(e,t){return i("HeaderBlackHoleStatusText",{key:"state"+t,attrs:{"black-hole":e}})})),1),e.canCharge?i("span",[i("PrimaryButton",{staticClass:"o-discharge-btn c-primary-btn--black-hole-header",class:{"o-small-discharge-text":e.hasLongText},attrs:{onclick:"Enslaved.useStoredTime(false)"}},[e._v(" "+e._s(e.dischargeText)+" ")])],1):e._e(),e.canAutoRelease?i("span",[i("PrimaryToggleButton",{staticClass:"o-primary-btn--buy-max c-primary-btn--black-hole-header",attrs:{label:"Pulse:"},model:{value:e.isAutoReleasing,callback:function(t){e.isAutoReleasing=t},expression:"isAutoReleasing"}})],1):e._e()],1):e._e()},yh=[],fh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isUnlocked?i("span",[e._v(" 🌀"+e._s(e.id)+":"),i("span",{domProps:{innerHTML:e._s(e.state)}})]):e._e()},gh=[];const vh={name:"HeaderBlackHoleStatusText",props:{blackHole:{type:Object,required:!0}},data(){return{isUnlocked:!1,state:""}},computed:{id(){return this.blackHole.id}},methods:{update(){this.isUnlocked=this.blackHole.isUnlocked,this.state=this.blackHole.displayState}}},bh=vh;var Eh=(0,X.Z)(bh,fh,gh,!1,null,"0cc13ba1",null);const Th=Eh.exports;var wh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("PrimaryButton",e._b({on:{click:function(t){return e.emitInput(!e.value)}}},"PrimaryButton",e.$attrs,!1),[e._v(" "+e._s(e.displayText)+" ")])},kh=[];i(3210);const Ch={name:"PrimaryToggleButton",components:{PrimaryButton:Vs},props:{label:{type:String,required:!1,default:""},on:{type:String,required:!1,default:"ON"},off:{type:String,required:!1,default:"OFF"},value:{type:Boolean,required:!0}},computed:{displayText(){return`${this.label} ${this.value?this.on:this.off}`.trim()}}},Ah=Ch;var _h=(0,X.Z)(Ah,wh,kh,!1,null,null,null);const Sh=_h.exports,Dh={name:"HeaderBlackHole",components:{PrimaryButton:Vs,PrimaryToggleButton:Sh,HeaderBlackHoleStatusText:Th},data(){return{canModifyBlackHoles:!1,displaySingle:!1,singleState:"",pauseText:"",canCharge:!1,isCharging:!1,storedTime:new Decimal(0),canAutoRelease:!1,isAutoReleasing:!1}},computed:{blackHoles:()=>BlackHoles.list,id(){return this.blackHole.id},dischargeText(){return`Discharge: ${timeDisplayShort(this.storedTime)}`},hasLongText(){return this.dischargeText.length>15}},watch:{isAutoReleasing(e){player.celestials.enslaved.isAutoReleasing=e}},methods:{update(){this.canModifyBlackHoles=BlackHoles.areUnlocked&&!Laitela.isRunning,this.displaySingle=BlackHoles.arePermanent,this.displaySingle&&(this.singleState=BlackHole(1).displayState),this.pauseText=this.pauseButtonText(),this.canCharge=Enslaved.isUnlocked,this.isCharging=Enslaved.isStoringGameTime,this.storedTime.copyFrom(player.celestials.enslaved.stored),this.canAutoRelease=Ra.unlocks.autoPulseTime.canBeApplied,this.isAutoReleasing=player.celestials.enslaved.isAutoReleasing},pauseButtonText(){if(BlackHoles.arePaused&&player.blackHoleNegative<1)return"Uninvert BH";if(BlackHoles.arePaused)return"Unpause BH";const e=BlackHoles.unpauseAccelerationFactor;return 1!==e?`${formatPercents(e,1)} speed`:player.blackHoleNegative<1?"Invert BH":"Pause BH"},timeDisplayShort(e){return timeDisplayShort(e)},chargingClassObject(){return{"o-primary-btn--buy-max c-primary-btn--black-hole-header":!0,"o-bh-charge-disabled":this.isAutoReleasing}}}},Rh=Dh;var Mh=(0,X.Z)(Rh,ph,yh,!1,null,"60b7c53e",null);const Ih=Mh.exports;var xh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("div",{staticClass:"l-game-header__challenge-text"},[i("span",{class:e.textClassObject(),on:{click:e.textClicked}},[e._v(" You are currently in "+e._s(e.challengeDisplay)+" ")]),e.isInFailableEC?i("FailableEcText"):e._e(),i("span",{staticClass:"l-padding-line"}),e.showExit?i("PrimaryButton",{on:{click:e.exitButtonClicked}},[e._v(" "+e._s(e.exitText)+" ")]):e._e()],1):e._e()},Ph=[],Gh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[e._v(" - "),i("span",{style:e.textStyle},[e._v(e._s(e.text))])])},Uh=[];const Bh={name:"FailableEcText",data(){return{currentResource:new Decimal(0),maximumResource:new Decimal(0),currentEternityChallengeId:0}},computed:{textStyle(){if(this.maximumResource.eq(0))return{};const e=this.currentResource.div(this.maximumResource).toNumber(),t=Theme.current().isDark()&&"S6"!==Theme.current().name,i=t?2:1.5,a=[Math.round(255*Math.min(i*e,1)),Math.round(255*Math.min(i*(1-e),1)*(t?1:.7)),0];return{color:`rgb(${a.join(",")})`}},text(){return 4===this.currentEternityChallengeId?`${formatInt(this.currentResource)} / ${formatInt(this.maximumResource)} Infinities used`:`${TimeSpan.fromSeconds(new Decimal(this.currentResource).toNumber()).toString()} /\n ${TimeSpan.fromSeconds(new Decimal(this.maximumResource).toNumber()).toString()} time spent`}},methods:{update(){EternityChallenge.current&&[4,12].includes(EternityChallenge.current.id)&&(this.currentEternityChallengeId=EternityChallenge.current.id,4===this.currentEternityChallengeId?this.currentResource.copyFrom(Currency.infinities):this.currentResource=new Decimal(Time.thisEternity.totalSeconds),this.maximumResource=new Decimal(EternityChallenge.current.config.restriction(EternityChallenge.current.completions)))}}},Nh=Bh;var Oh=(0,X.Z)(Nh,Gh,Uh,!1,null,"5d83f76e",null);const Lh=Oh.exports,Fh={name:"HeaderChallengeDisplay",components:{FailableEcText:Lh,PrimaryButton:Vs},data(){return{activityTokens:[],infinityUnlocked:!1,showExit:!1,exitText:"",resetCelestial:!1,inPelle:!1,inSuperV:!1}},computed:{parts(){function e(e,t,i){return{name:()=>`${t} Reality`,isActive:e=>e,activityToken:()=>e.isRunning,tabName:()=>i}}return[e(Teresa,"Teresa's","teresa"),e(Effarig,"Effarig's","effarig"),e(Enslaved,"The Nameless Ones'","enslaved"),e(V,"V's","v"),e(Ra,"Ra's","ra"),e(Laitela,"Lai'tela's","laitela"),{name:()=>"Time Dilation",isActive:e=>e,activityToken:()=>player.dilation.active},{name:e=>`Eternity Challenge ${e}`,isActive:e=>e>0,activityToken:()=>player.challenge.eternity.current},{name:e=>`Infinity Challenge ${e}`,isActive:e=>e>0,activityToken:()=>player.challenge.infinity.current},{name:e=>`${NormalChallenge(e).config.name} Challenge`,isActive:e=>e>0,activityToken:()=>player.challenge.normal.current}]},activeChallengeNames(){const e=[];for(let t=0;t0},isInFailableEC(){return this.activeChallengeNames.some((e=>e.match(/Eternity Challenge (4|12)/g)))},challengeDisplay(){return this.inPelle&&this.activeChallengeNames.length>0?`${this.activeChallengeNames.join(" + ")} in a Doomed Reality. Good luck.`:this.inPelle?"a Doomed Reality. Good luck.":this.inSuperV&&this.activeChallengeNames.length>0?`V's Superhard Reality + ${this.activeChallengeNames}`:this.inSuperV?"V's Superhard Reality.":this.isCorrupted?this.activeChallengeNames.length>0?`${this.activeChallengeNames.join(" + ")} in a Hostile Multiverse.`:"a Hostile Multiverse (no active challenges).":0===this.activeChallengeNames.length?PlayerProgress.mendingUnlocked()?"a Mended Multiverse (no active challenges).":"the Antimatter Universe (no active challenges).":this.activeChallengeNames.join(" + ")}},methods:{update(){this.infinityUnlocked=PlayerProgress.infinityUnlocked(),this.activityTokens=this.parts.map((e=>e.activityToken())),this.showExit=this.inPelle&&player.dilation.active?this.activeChallengeNames.length>1:!!this.inSuperV||0!==this.activeChallengeNames.length,this.exitText=this.exitDisplay(),this.resetCelestial=player.options.retryCelestial,this.inPelle=fQ.isDoomed,this.inSuperV=V.isSuperRunning,this.isCorrupted=player.mending.corruptionChallenge.corruptedMend},exitButtonClicked(){let e,t;const i=Player.anyChallenge instanceof EternityChallengeState;if(!player.dilation.active||Player.isInAnyChallenge&&!i){if(Player.isInAnyChallenge){const a=this.activeChallengeNames[this.activeChallengeNames.length-1].replace(/(?:[\0-\/:-@\[-\^`\{-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+\((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*\)/,"");e={chall:a,normal:i?"Eternity":"Infinity"},t=()=>{const e=Player.anyChallenge;Player.anyChallenge.exit(),player.options.retryChallenge&&e.requestStart()}}else e={chall:this.activeChallengeNames[0],normal:"Reality"},t=()=>fQ.isDoomed?uK():beginProcessReality(getRealityProps(!0));player.options.confirmations.exitChallenge?Modal.exitChallenge.show({challengeName:e.chall,normalName:e.normal,hasHigherLayers:this.inPelle||this.activeChallengeNames.length>1,exitFn:t}):t()}else player.options.confirmations.dilation?Modal.exitDilation.show():startDilatedEternityRequest()},textClicked(){if(0===this.activeChallengeNames.length)return;let e="",t="";for(let a=this.activityTokens.length-1;a>=0;a--){var i;const n=this.activityTokens[a],s=this.parts[a];if(s.isActive(n)){e=s.name(n),t=null===(i=s.tabName)||void 0===i?void 0:i.call(s);break}}e.match(" Challenge$")?Tab.challenges.normal.show(!0):e.match("Infinity Challenge")?Tab.challenges.infinity.show(!0):e.match("Eternity Challenge")?Tab.challenges.eternity.show(!0):player.dilation.active?Tab.eternity.dilation.show(!0):Tab.celestials[t].show(!0)},exitDisplay(){return Player.isInAnyChallenge?player.options.retryChallenge?"Retry Challenge":"Exit Challenge":player.dilation.active?"Exit Dilation":this.resetCelestial?"Restart Reality":"Exit Reality"},textClassObject(){return{"l-challenge-display":!0,"l-challenge-display--clickable":0!==this.activeChallengeNames.length}}}},$h=Fh;var Hh=(0,X.Z)($h,xh,Ph,!1,null,"71e60358",null);const qh=Hh.exports;var Vh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e.waitingforHint?i("div",[e._v(" "+e._s(e.enslavedText)+" ")]):e._e(),e.isInEffarig?i("div",[e._v(" Game speed and multipliers are Dilated "+e._s(e.effarigMultNerfText)+" "),i("br"),e._v(" Tickspeed is Dilated "+e._s(e.effarigTickNerfText)+" ")]):e._e(),e.isInLaitela?i("div",[e._v(" Entropy: "+e._s(e.laitelaEntropy)+" ("+e._s(e.laitelaTimer)+") ")]):e._e(),e.isInMatterChallenge?i("div",[e._v(" There is "+e._s(e.format(e.matter,2,1))+" matter. ")]):e._e(),e.isChallengePowerVisible?i("div",[e._v(" "+e._s(e.challengePower)+" ")]):e._e()])},Yh=[];const Wh={name:"HeaderChallengeEffects",data(){return{isInMatterChallenge:!1,matter:new Decimal(0),isChallengePowerVisible:!1,challengePower:"",isInEffarig:!1,effarigMultNerfText:"",effarigTickNerfText:"",isInLaitela:!1,laitelaTimer:0,laitelaEntropy:"",waitingforHint:!1,enslavedTimer:""}},computed:{enslavedText(){return`${Enslaved.displayName} are helping you look for cracks in their Reality -\n they can give you some advice in ${this.enslavedTimer}`}},methods:{update(){this.isInMatterChallenge=Player.isInMatterChallenge,this.isInMatterChallenge&&this.matter.copyFrom(Currency.matter),this.updateChallengePower(),this.isInEffarig=Effarig.isRunning,this.isInEffarig&&(this.effarigMultNerfText=`${formatPow(.25+.25*Effarig.nerfFactor(Currency.infinityPower.value),0,5)}`,this.effarigTickNerfText=`${formatPow(.7+.1*Effarig.nerfFactor(Currency.timeShards.value),0,5)}`),this.isInLaitela=Laitela.isRunning,this.isInLaitela&&(player.celestials.laitela.entropy>0?(this.laitelaEntropy=`${formatPercents(player.celestials.laitela.entropy,2,2)}`,this.laitelaTimer=Time.thisRealityRealTime.toStringShort()):(this.laitelaEntropy=`${formatPercents(1,2,2)}`,this.laitelaTimer=TimeSpan.fromSeconds(player.celestials.laitela.thisCompletion).toStringShort())),this.waitingforHint=Enslaved.canTickHintTimer;const e=18e6-player.celestials.enslaved.hintUnlockProgress;this.enslavedTimer=TimeSpan.fromMilliseconds(e/(Enslaved.isRunning?1:.4)).toStringShort()},updateChallengePower(){const e=NormalChallenge(2).isRunning,t=NormalChallenge(3).isRunning,i=InfinityChallenge(6).isRunning,a=InfinityChallenge(8).isRunning,n=e||t||i||a;if(this.isChallengePowerVisible=n,n){const n=[];e&&n.push(`Production: ${formatPercents(player.chall2Pow,2,2)}`),t&&n.push(`First dimension: ${formatX(player.chall3Pow,3,4)}`),i&&n.push(`Matter: Antimatter Dimensions /\n ${format(new Decimal(1).timesEffectOf(InfinityChallenge(6)),2,2)}`),a&&n.push(`Production: /\n ${format(new Decimal(1).timesEffectOf(InfinityChallenge(8)).reciprocal(),2,2)}`),this.challengePower=n.join(", ")}}}},jh=Wh;var Xh=(0,X.Z)(jh,Vh,Yh,!1,null,"b2464992",null);const zh=Xh.exports;var Kh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-prestige-info-blocks"},[i("HeaderEternityContainer",{staticClass:"l-game-header__eternity"}),i("HeaderCenterContainer",{staticClass:"l-game-header__center"}),i("HeaderInfinityContainer",{staticClass:"l-game-header__infinity"})],1)},Zh=[],Qh=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.shouldDisplay?i("div",{staticClass:"c-prestige-button-container"},[i("span",[e._v("You have "),i("span",{staticClass:"c-game-header__antimatter"},[e._v(e._s(e.format(e.antimatter,2,1)))]),e._v(" antimatter.")]),e.hasRealityButton?i("div",{staticClass:"c-reality-container"},[i("RealityCurrencyHeader"),e.isDoomed?i("ArmageddonButton",{attrs:{"is-header":!0}}):i("RealityButton")],1):i("div",[e._v(" You are getting "+e._s(e.format(e.antimatterPerSec,2))+" antimatter per second. "),i("br"),i("HeaderTickspeedInfo")],1)]):e._e()},Jh=[],em=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{class:e.buttonClassObject,on:{click:e.manualArmageddon}},[e.isHeader?i("span",[e._v("You cannot escape a Doomed Reality!"),i("br")]):e._e(),this.mendupg5?e._e():i("span",{staticClass:"c-remnant-gain-display"},[e._v(" Armageddon for "),i("span",{staticClass:"c-remnant-gain"},[e._v(e._s(e.remnants))]),e._v(" Remnants ")]),this.mendupg5?i("span",[e._v(" You have "),i("span",{staticClass:"c-remnant-gain"},[e._v(e._s(e.remnantsTotal))]),e._v(" Remnants ")]):e._e(),i("br"),e._v(" Reality Shards "),i("span",{staticClass:"c-reality-shard-gain"},[e._v(e._s(e.format(e.realityShardGain,2,2)))]),e._v("/s "),this.mendupg5?e._e():i("span",[e._v("➜")]),this.mendupg5?e._e():i("span",{staticClass:"c-reality-shard-gain"},[e._v(e._s(e.format(e.nextRealityShardGain,2,2)))]),this.mendupg5?e._e():i("span",[e._v("/s")])])},tm=[];const im={name:"ArmageddonButton",props:{isHeader:{type:Boolean,required:!1,default:!1}},data(){return{remnantsGain:0,realityShardGain:new Decimal(0),nextRealityShardGain:new Decimal(0),canArmageddon:!1,mendupg5:!1,remnantsTotal:""}},computed:{remnants(){return format(this.remnantsGain,2,this.remnantsGain>1?0:2)},buttonClassObject(){return{"c-armageddon-button":!0,"l-armageddon-button":!this.isHeader,"l-reality-button":this.isHeader,"l-armageddon-button--header":this.isHeader,"c-armageddon-button--unavailable":!this.canArmageddon}}},methods:{update(){this.remnantsGain=Pelle.remnantsGain,this.realityShardGain.copyFrom(Pelle.realityShardGainPerSecond),this.nextRealityShardGain.copyFrom(Pelle.nextRealityShardGain),this.canArmageddon=Pelle.canArmageddon&&!MendingUpgrades.all[4].isBought,this.mendupg5=MendingUpgrades.all[4].isBought,this.remnantsTotal=format(player.celestials.pelle.remnants,2)},manualArmageddon(){this.canArmageddon&&(player.options.confirmations.armageddon?Modal.armageddon.show():Pelle.armageddon(!0))}}},am=im;var nm=(0,X.Z)(am,em,tm,!1,null,"8077c0a8",null);const sm=nm.exports;var rm=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-reality-currency"},[e._v(" You have "),i("b",{class:e.resourceClass()},[e._v(" "+e._s(e.currencyValue)+" ")]),e._v(" "+e._s(e.currencyName)+". ")])},om=[];const lm={name:"RealityCurrencyHeader",data(){return{isDoomed:!1,currencyValue:new Decimal,currencyName:"",remnants:0,showRemnants:!1}},methods:{update(){if(this.showRemnants=hK.six.isReached&&this.isDoomed,this.remnants=Currency.remnants.value,this.isDoomed=Pelle.isDoomed,this.isDoomed){const e=Currency.realityShards.value;this.currencyValue=format(e,2,2),this.currencyName=pluralize("Reality Shard",e)}else{const e=Currency.realityMachines.value;this.currencyValue=formatMachines(e,Currency.imaginaryMachines.value),this.currencyName=pluralize("Reality Machine",e)}},resourceClass(){return{"c-reality-tab__reality-machines":!0,"c-shard-color":this.isDoomed}}}},cm=lm;var um=(0,X.Z)(cm,rm,om,!1,null,"669bdb06",null);const dm=um.exports;var hm=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("button",{staticClass:"c-mending-button",class:e.buttonClassObject,on:{click:e.mend}},[e.firstMend?[e._v(" There is another way... You need to Mend the Multiverse. ")]:e.noMendBonus?[e._v(" Exit Doomed Reality, but get no Mend Rewards. ")]:e.needDoom?[e._v(" Reach "),i("span",[e._v(e._s(e.formatNE(e.END,2,2)))]),e._v(" antimatter in a Doomed Reality to Mend the Multiverse ")]:e.canMend?e.isCorrupted?[e._v(" Make the Multiverse Friendly for "+e._s(e.formatNE(e.frags,0,0))+" Hostile Fragments ")]:[e._v(" Mend the Multiverse for "),i("span",[e._v(e._s(e.formatNE(e.gainedMvR,2)))]),e._v(" Multiversal "+e._s(e.pluralize("Remain",e.gainedMvR))+". ("+e._s(e.format(e.MvRRate,2,2))+" MvR/min) ")]:[e._v(" Reach "),i("span",[e._v(e._s(e.formatNE(e.END,2,2)))]),e._v(" antimatter to Mend the Multiverse ")]],2)])},mm=[];const pm={name:"MendingButton",data(){return{gainedMvR:new Decimal(0),canMend:!1,firstMend:!0,END:b.END,needDoom:!0,isCorrupted:!1,noMendBonus:!1,MvRRate:new Decimal(0),frags:0}},computed:{buttonClassObject(){return{"o-mending-button":!0,"o-mending-button--unavailable":!this.canMend}}},methods:{update(){this.gainedMvR.copyFrom(gainedMendingPoints()),this.canMend=player.isGameEnd||hK.six.isReached&&player.antimatter.exponent>=9e15||this.noMendBonus,this.firstMend=!ue.mendingUnlocked(),this.needDoom=!hK.six.isReached,this.isCorrupted=player.mending.corruptionChallenge.corruptedMend,this.noMendBonus=Pelle.isDoomed&&Mi.antimatter.exponent<9e15&&UZ.unlocks.exitDoom.isUnlocked,this.MvRRate=this.gainedMvR.div(Time.thisMendRealTime.totalMinutes),this.frags=De.isCorrupted?Math.ceil(Math.log2(De.calcScore())):0},mend(){mendingResetRequest()}},components:{MendingPointsHeader:sh}},ym=pm;var fm=(0,X.Z)(ym,hm,mm,!1,null,null,null);const gm=fm.exports;var vm=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("br"),e._v(" "+e._s(e.perUpgrade)+" "),i("br"),e._v(" "+e._s(e.tickspeedDisplay)+" "),i("br"),i("GameSpeedDisplay")],1)},bm=[],Em=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{staticClass:"c-gamespeed"},[i("span",[e._v(" "+e._s(e.baseText)+" ")]),e.isPulsing?i("span",[e._v("("),i("i",{staticClass:"fas fa-expand-arrows-alt u-fa-padding"}),e._v(" "+e._s(e.pulseSpeedText)+")")]):e._e(),e.pastGSSoftcap?i("span",[i("br"),e._v(" Due to instability, Game Speed past every "+e._s(e.format(e.scOneStart))+" is raised "+e._s(e.formatPow(e.scOneEffect,3,3))+" before pulsing. ")]):e._e()])},Tm=[];const wm={officialFixedSeed:31337,unlock(){player.speedrun.isUnlocked||(Modal.message.show("You have unlocked Speedrun Mode! This allows you to start a new save file with some slight\n changes which can be helpful if you're trying to complete the game as quickly as possible. The option to\n start a Speedrun Save is now available in the Options tab, under Saving. Choosing to start a Speedrun Save\n will provide you with another modal with more in-depth information.",{},3),player.speedrun.isUnlocked=!0)},canModifySeed(){return player.realities<1},modifySeed(e,t){let i;switch(player.speedrun.seedSelection=e,e){case SPEEDRUN_SEED_STATE.FIXED:return player.reality.initialSeed=this.officialFixedSeed,void(player.speedrun.initialSeed=this.officialFixedSeed);case SPEEDRUN_SEED_STATE.RANDOM:return i=Math.floor(1e13*Math.random()),player.reality.initialSeed=i,void(player.speedrun.initialSeed=i);case SPEEDRUN_SEED_STATE.PLAYER:return player.reality.initialSeed=t,void(player.speedrun.initialSeed=t);default:throw new Error("Unrecognized speedrun seed setting option")}},seedModeText(e){const t=null!==e&&void 0!==e?e:player.speedrun;switch(t.seedSelection){case SPEEDRUN_SEED_STATE.UNKNOWN:return"No seed data (old save)";case SPEEDRUN_SEED_STATE.FIXED:return`Official fixed seed (${t.initialSeed})`;case SPEEDRUN_SEED_STATE.RANDOM:return`Random seed (${t.initialSeed})`;case SPEEDRUN_SEED_STATE.PLAYER:return`Player seed (${t.initialSeed})`;default:throw new Error("Unrecognized speedrun seed option in seedModeText")}},generateName(e){if(""===e.trim()){const e=Math.floor(9999999*Math.random())+1;return`AD Player #${"0".repeat(6-Math.floor(Math.log10(e)))}${e}`}return e.length>40?`${e.slice(0,37)}...`:e},prepareSave(e){NG.restartWithCarryover(),player.speedrun.isUnlocked=!0,player.speedrun.isActive=!0,this.modifySeed(SPEEDRUN_SEED_STATE.FIXED),player.speedrun.name=e;for(const t of Object.keys(player.options.confirmations))player.options.confirmations[t]=!1;player.options.confirmations.glyphSelection=!0;for(const t of Object.keys(player.options.animations))"boolean"===typeof player.options.animations[t]&&(player.options.animations[t]=!1);Achievement(22).unlock(),Achievement(35).unlock(),Achievement(76).unlock(),player.speedrun.offlineTimeUsed=0,GameStorage.save()},startTimer(){if(player.speedrun.hasStarted)return;player.speedrun.hasStarted=!0,player.speedrun.startDate=Date.now(),player.lastUpdate=Date.now();let e=0;for(const t of ShopPurchase.all)t.config.instantPurchase||(e+=t.purchases*t.cost);this.setSTDUse(ShopPurchaseData.isIAPEnabled&&e>0)},isPausedAtStart(){return player.speedrun.isActive&&!player.speedrun.hasStarted},setSegmented(e){this.isPausedAtStart()||(player.speedrun.isSegmented=e)},setSTDUse(e){this.isPausedAtStart()||0===ShopPurchaseData.spentSTD||(player.speedrun.usedSTD=e)},mostRecentMilestone(){const e=player.speedrun.records.max();return 0===e?0:player.speedrun.records.indexOf(e)}};class km extends A{constructor(e){super(e),this.registerEvents(e.checkEvent,(e=>this.tryComplete(e)))}get name(){return this.config.name}get isReached(){return 0!==player.speedrun.records[this.config.id]}tryComplete(e){this.config.checkRequirement(e)&&this.complete()}complete(){!this.isReached&&player.speedrun.isActive&&(player.speedrun.records[this.config.id]=Math.round(player.records.realTimePlayed),GameUI.notify.success(`Speedrun Milestone Reached: ${this.name}`))}}const Cm=km.createAccessor(xa.speedrunMilestones);i(8145),i(9575),i(2472),i(8675),i(3824),i(6644);var Am=i(7885);Decimal.prototype.toString=function(){if(isNaN(this.m)||isNaN(this.e))return"NaN";if(this.e>=1/0)return this.m>0?"Infinity":"-Infinity";if(this.e<=-1/0||0===this.m)return"0";if(this.e<21&&this.e>-7)return this.toNumber().toString();const e=new Decimal(this.e);if(e.e>20){var t,i;const a=(null!==(t=e.m.toString().split(".")[1])&&void 0!==t?t:"").length;return`${this.m}e${this.e>=0?"+":""}${e.m.toString().split(".")[0]}${null!==(i=e.m.toString().split(".")[1])&&void 0!==i?i:""}${"0".repeat(e.e-a)}`}return this.m+"e"+(this.e>=0?"+":"")+this.e};const _m={SaveType:"devsave",serialize(e){const t=JSON.stringify(e,this.jsonConverter);return this.encodeText(t,this.SaveType)},jsonConverter(e,t){return t===1/0?"Infinity":t instanceof Set?Array.from(t.keys()):t},deserialize(e){if("string"===typeof e)try{const t=this.decodeText(e,"savefile");return JSON.parse(t,((e,t)=>t===1/0?"Infinity":t))}catch(t){try{const t=this.decodeText(e,"devsave");return"devsave"==this.SaveType?JSON.parse(t,((e,t)=>t===1/0?"Infinity":t)):"devsave"}catch(t){return}}},encoder:new TextEncoder,decoder:new TextDecoder,startingString:{savefile:"AntimatterDimensionsSavefileFormat",devsave:"ADRedemptionTestingSavefileFormat","automator script":"AntimatterDimensionsAutomatorScriptFormat","automator data":"AntimatterDimensionsAutomatorDataFormat","glyph filter":"AntimatterDimensionsGlyphFilterFormat"},endingString:{savefile:"EndOfSavefile",devsave:"EndOfADRdevSavefile","automator script":"EndOfAutomatorScript","automator data":"EndOfAutomatorData","glyph filter":"EndOfGlyphFilter"},version:"AAB",steps:[{encode:e=>_m.encoder.encode(e),decode:e=>_m.decoder.decode(e)},{encode:e=>Am.ZP.deflate(e),decode:e=>Am.ZP.inflate(e)},{encode:e=>Array.from(e).map((e=>String.fromCharCode(e))).join(""),decode:e=>Uint8Array.from(Array.from(e).map((e=>e.charCodeAt(0))))},{encode:e=>btoa(e),decode:e=>atob(e)},{encode:e=>e.replace(/=+$/g,"").replace(/0/g,"0a").replace(/\+/g,"0b").replace(/\//g,"0c"),decode:e=>e.replace(/0b/g,"+").replace(/0c/g,"/").replace(/0a/g,"0")},{encode:(e,t)=>e+_m.endingString[t],decode:(e,t)=>e.slice(0,e.length-_m.endingString[t].length),condition:e=>e>="AAB"}],getSteps(e,t){return this.steps.filter((e=>!e.condition||e.condition(t))).concat({encode:t=>`${_m.startingString[e]+_m.version}${t}`,decode:t=>t.slice(_m.startingString[e].length+3)})},encodeText(e,t){return this.getSteps(t,this.version).reduce(((e,i)=>i.encode(e,t)),e)},decodeText(e,t){if(e.startsWith(this.startingString[t])){const i=this.startingString[t].length,a=e.slice(i,i+3);return this.getSteps(t,a).reduceRight(((e,i)=>i.decode(e,t)),e)}return atob(e)}};var Sm=i(6576);const Dm={firstRealityMigration:13,patches:{1:e=>{for(let t=0;t{10!==e.dimensionMultDecrease&&(9===e.dimensionMultDecrease&&(e.dimensionMultDecrease=10,e.dimensionMultDecreaseCost=1e8,e.infinityPoints=e.infinityPoints.plus(1e8)),8===e.dimensionMultDecrease&&(e.dimensionMultDecrease=10,e.dimensionMultDecreaseCost=1e8,e.infinityPoints=e.infinityPoints.plus(21e8)),7===e.dimensionMultDecrease&&(e.dimensionMultDecrease=10,e.dimensionMultDecreaseCost=1e8,e.infinityPoints=e.infinityPoints.plus(421e8)))},5:e=>{e.newsArray=[]},9:e=>{const t=[];e.achievements.delete("r22")&&t.push("r35"),e.achievements.delete("r35")&&t.push("r76"),e.achievements.delete("r41")&&t.push("r22"),e.achievements.delete("r76")&&t.push("r41");for(const i of t)e.achievements.add(i);e.replicanti.intervalCost=e.replicanti.intervalCost.dividedBy(1e20)},9.5:e=>{e.timestudy.studies.includes(191)&&(e.timestudy.theorem=e.timestudy.theorem.plus(100))},10:e=>{if(e.timestudy.studies.includes(72))for(let t=4;t<8;t++)e[`infinityDimension${t}`].amount=Decimal.div(e[`infinityDimension${t}`].amount,Sacrifice.totalBoost.pow(.02))},12:e=>{const t=[null,1,5,100,1e3],i=[null,3,9,27,81];if(e.timeDimension1)for(let a=1;a<5;a++)new Decimal("1e300").lt(e[`timeDimension${a}`].cost)&&(e[`timeDimension${a}`].cost=Decimal.pow(2.2*i[a],e[`timeDimension${a}`].bought).times(t[a]))},12.1:e=>{for(const t of e.achievements)if(t.includes("s")&&t.length<=3){e.achievements.splice(e.achievements.indexOf("r36"),1);break}},13:e=>{e.realTimePlayed=e.totalTimePlayed,e.thisReality=e.totalTimePlayed,e.thisInfinityRealTime=100*e.thisInfinityTime,e.thisEternityRealTime=100*e.thisEternity,e.thisRealityRealTime=100*e.thisReality,e.thisInfinityLastBuyTime=100*e.thisInfinityTime;for(let t=0;t<10;t++)e.lastTenEternities[t][2]=e.lastTenEternities[t][0],e.lastTenRuns[t][2]=e.lastTenRuns[t][0];e.options.UIType,window.uiChoiceModalInterval=setInterval((()=>{GameUI.initialized&&(Modal.uiChoice.show(),clearInterval(window.uiChoiceModalInterval))}),1e3),Dm.normalizeTimespans(e),Dm.convertAutobuyerMode(e),Dm.fixChallengeIds(e),Dm.adjustMultCosts(e),Dm.convertAchivementsToNumbers(e),Dm.adjustGameCreatedTime(e),Dm.moveSavedStudyTrees(e),Dm.convertEPMult(e),Dm.moveChallengeInfo(e),Dm.infinitiedConversion(e),Dm.adjustWhy(e),Dm.removeAchPow(e),Dm.adjustSacrificeConfirmation(e),Dm.migrateNotation(e),Dm.fixAutobuyers(e),Dm.removeAutoIPProperties(e),Dm.adjustAchievementVars(e),Dm.uniformDimensions(e),Dm.removeEternityChallGoal(e),Dm.removeTickspeed(e),Dm.removePostC3Reward(e),Dm.renameMoney(e),Dm.moveAutobuyers(e),Dm.convertEternityCountToDecimal(e),Dm.renameDimboosts(e),Dm.migrateConfirmations(e),Dm.removeOtherTickspeedProps(e),Dm.renameNewsOption(e),Dm.removeDimensionCosts(e),Dm.changeC8Handling(e),Dm.convertAchievementsToBits(e),Dm.setNoInfinitiesOrEternitiesThisReality(e),Dm.setTutorialState(e),Dm.migrateLastTenRuns(e),Dm.migrateIPGen(e),Dm.renameCloudVariable(e),Dm.standardizeUncompletedTimes(e),Dm.makeRecords(e),Dm.deleteOldRecords(e),Dm.migrateAutobuyers(e),Dm.migratePlayerVars(e),Dm.consolidateAuto(e),Dm.convertTimeTheoremPurchases(e),Dm.deleteDimboostBulk(e),Dm.deleteFloatingTextOption(e),Dm.refactorDoubleIPRebuyable(e),Dm.infMultNameConversion(e),Dm.convertNews(e),Dm.etercreqConversion(e),Dm.moveTS33(e),Dm.addBestPrestigeCurrency(e),Dm.migrateTheme(e)},14:e=>{Dm.reworkBHPulsing(e),0!==e.reality.autoSort&&e.reality.autoSort++},15:e=>{for(let m=0;m<10;m++){if(e.records.lastTenInfinities){var t,i,a,n;const s=e.records.lastTenInfinities[m];e.records.recentInfinities[m]=[null!==(t=s[0])&&void 0!==t?t:Number.MAX_VALUE,Number(null!==(i=s[3])&&void 0!==i?i:Number.MAX_VALUE),new Decimal(null!==(a=s[1])&&void 0!==a?a:1),new Decimal(null!==(n=s[2])&&void 0!==n?n:1),""]}if(e.records.lastTenEternities){var s,r,o,l;const t=e.records.lastTenEternities[m];e.records.recentEternities[m]=[null!==(s=t[0])&&void 0!==s?s:Number.MAX_VALUE,Number(null!==(r=t[3])&&void 0!==r?r:Number.MAX_VALUE),new Decimal(null!==(o=t[1])&&void 0!==o?o:1),new Decimal(null!==(l=t[2])&&void 0!==l?l:1),"",new Decimal(0)]}if(e.records.lastTenRealities){var c,u,d,h;const t=e.records.lastTenRealities[m];e.records.recentRealities[m]=[null!==(c=t[0])&&void 0!==c?c:Number.MAX_VALUE,Number(null!==(u=t[3])&&void 0!==u?u:Number.MAX_VALUE),new Decimal(null!==(d=t[1])&&void 0!==d?d:1),null!==(h=t[2])&&void 0!==h?h:1,"",0,0]}}if(delete e.records.lastTenInfinities,delete e.records.lastTenEternities,delete e.records.lastTenRealities,delete e.options.showLastTenResourceGain,e.news.seen){let t=0;for(const i of Object.values(e.news.seen))for(const e of i)t+=countValuesFromBitmask(e);e.news.totalSeen=Math.max(e.news.totalSeen,t)}},16:e=>{e.options.perkLayout=e.options.fixedPerkStartingPos?0:1,delete e.options.fixedPerkStartingPos,e.reality.initialSeed=e.reality.seed,0===e.reality.initialSeed&&(e.reality.initialSeed=1);const t=Array.repeat(0,26);for(const i of GameDatabase.speedrunMilestones)t[i.id]=e.speedrun.records[i.key];e.speedrun.records=t,e.speedrun.seedSelection=SPEEDRUN_SEED_STATE.UNKNOWN,delete e.speedrun.milestones;while(e.reality.glyphs.sets.length<7)e.reality.glyphs.sets.push({name:"",glyphs:[]})},17:e=>{var t;const i=null!==(t=e.options.currentMultiplierSubtab)&&void 0!==t?t:0;e.options.multiplierTab.currTab=i+(i>5?1:0),delete e.options.currentMultiplierSubtab},18:e=>{e.reality.automator.constantSortOrder=Object.keys(e.reality.automator.constants)},19:e=>{delete e.options.confirmations.resetCelestial},20:e=>{var t,i,a;const n=e.celestials.effarig;e.reality.glyphs.filter={select:null!==(t=null===n||void 0===n?void 0:n.mode)&&void 0!==t?t:0,trash:null!==(i=null===n||void 0===n?void 0:n.glyphTrashMode)&&void 0!==i?i:0,simple:null!==(a=null===n||void 0===n?void 0:n.simpleEffectCount)&&void 0!==a?a:0};const s={},r=Object.values(GameDatabase.reality.glyphEffects);for(const p of ALCHEMY_BASIC_GLYPH_TYPES){var o,l,c,u;const e=null===(o=n.glyphScoreSettings)||void 0===o?void 0:o.types[p],t=r.filter((e=>e.glyphTypes.includes(p))).sort(((e,t)=>e.bitmaskIndex-t.bitmaskIndex));if(s[p]={rarity:null!==(l=null===e||void 0===e?void 0:e.rarityThreshold)&&void 0!==l?l:0,score:null!==(c=null===e||void 0===e?void 0:e.scoreThreshold)&&void 0!==c?c:0,effectCount:null!==(u=null===e||void 0===e?void 0:e.effectCount)&&void 0!==u?u:0},s[p].specifiedMask=0,s[p].effectScores=[],e)for(const i of t)i&&(s[p].specifiedMask|=e.effectChoices[i.id]?1<{const t=[20,21,22].map((e=>1<0!==(e&1<{for(let t=1;t<=12;t++)e.eternityChalls[`eterc${t}`]>0&&(e.reality.unlockedEC|=1<{e.options.perkLayout>2&&(e.options.perkLayout+=3),e.options.statTabResources=e.options.showRecentRate?1:0,delete e.options.showRecentRate;for(let i=0;i{const t=e=>{const t=[20,21,22].map((e=>1<0!==(e&1<{e.auto.dilationUpgrades.all[11]={isActive:!1,lastTick:0},e.auto.dilationUpgrades.all[12]={isActive:!1,lastTick:0},e.auto.dilationUpgrades.all[13]={isActive:!1,lastTick:0},e.requirementChecks.mending={isEnd:!1},e.records.thisMend={time:Number.MAX_VALUE,realTime:Number.MAX_VALUE,maxAM:b.D0,maxIP:b.D0,maxEP:b.D0,maxRM:b.D0,maxiM:0,maxRem:0},e.records.bestMend={time:Number.MAX_VALUE,realTime:Number.MAX_VALUE},e.speedrun.isUnlocked=!0,e.mends=b.D0,e.mending={mendingPoints:b.D0,upgradeBits:0,reqLock:{mending:0},rebuyables:{1:0}},e.celestials.destroyer={quoteBits:0},e.options.confirmations.mending=!0,e.options.awayProgress={mends:!0,mendingPoints:!0},e.mendingPoints=b.D0,e.mends=b.D0,e.mendingUpgrades=new Set,e.mvrmultUpgrades=0},34:e=>{e.options.hiddenTabBits=0,e.mendingPoints=e.mending.mendingPoints},35:e=>{MendingMilestone.three.isReached&&(e.celestials.ra.unlockBits+=2097152)},36:e=>{e.auto.dilationUpgrades.all=Array.range(0,3).concat(Array.range(11,14)).map((()=>({isActive:!1,lastTick:0}))),e.mends=new Decimal(e.mends),e.mendingPoints=new Decimal(e.mendingPoints)},40:e=>{MendingUpgrade(2).isPurchased&&(e.mendingPoints=e.mendingPoints.add(1)),MendingUpgrade(3).isPurchased&&(e.mendingPoints=e.mendingPoints.add(4)),MendingUpgrade(5).isPurchased&&(e.mendingPoints=e.mendingPoints.add(10)),MendingUpgrade(9).isPurchased&&(e.mendingPoints=e.mendingPoints.add(12))},41:e=>{e.mends.gte(8)&&(e.celestials.teresa.perkShop=[20,20,14,6,0,0]),e.auto.musicglyph={isUnlocked:!1,isActive:!1}},42:e=>{e.options.showHintText.mendingUpgrades=!0},43:e=>{e.records.thisMend.time<1e308&&(e.records.thisMend.time=new Decimal(1e308))},45:e=>{e.auto.mending={mode:0,amount:b.D1,interval:100,increaseWithMult:!0,time:1,xHighest:b.D1,isActive:!1,lastTick:0}},46:e=>{e.celestials.kohler={quoteBits:0},e.reality.warped=!1,e.mending={rebuyables:{1:Math.max(0,e.mending.rebuyables[1]),6:0,11:0,16:0},upgradeBits:Math.max(0,e.mending.upgradeBits)}},47:e=>{e.auto.nrru={isActive:!1,lastTick:0},e.auto.nriu={isActive:!1,lastTick:0},e.options.UIType=e.options.newUI?"Modern":"Classic",ui.view.UIType=e.options.UIType},50:e=>{e.celestials.kohler={run:!1}},51:e=>{e.requirementChecks.mend={mmeleven:8}},51.001:e=>{e.celestials.laitela.dimensions=e.celestials.laitela.dimensions.concat(Array.range(0,4).map((()=>({amount:b.D1,intervalUpgrades:0,powerDMUpgrades:0,powerDEUpgrades:0,timeSinceLastUpdate:0,ascensionCount:0}))))},51.002:e=>{e.mending.corruption=[0,0,0,0,0,0,0,0,0,0]},51.003:e=>{e.mending.corruptedFragments=0},51.004:e=>{e.mending.corruptionChallenge={corruptedMend:!1,records:[0,0,0,0,0,0,0,0,0,0]}},51.005:e=>{e.mending.corruptionChallenge.recordScore=0},51.006:e=>{e.mending.corruptNext=!1},51.007:e=>{e.mending.spentCF=0},51.008:e=>{e.corruptedFragments=e.mending.corruptedFragments.toDecimal(),e.mending.warpRebuyables={1:0,2:0,3:0,4:0,5:0},e.mending.corruptionRebuyables={1:0,2:0,3:0,4:0,5:0},e.mending.warpUpgradeBits=0,e.mending.corruptionUpgradeBits=0,e.mending.warpUpgReqs=0,e.mending.corruptionUpgReqs=0,e.mending.reqLock={mending:0,warp:0,corruption:0}},51.009:e=>{e.records.totalTimePlayed=new Decimal(e.records.totalTimePlayed),e.records.thisInfinity.time=new Decimal(e.records.thisInfinity.time),e.records.thisEternity.time=new Decimal(e.records.thisEternity.time),e.records.thisReality.time=new Decimal(e.records.thisReality.time),e.records.thisMend.time=new Decimal(e.records.thisMend.time)},51.01:e=>{e.celestials.ra.upgradeBits=0,e.celestials.ra.raPoints=b.D0,e.celestials.ra.rebuyables={1:0,2:0,3:0,4:0,5:0}},51.011:e=>{e.records.bestMend.time=new Decimal(e.records.bestMend.time),e.expoBlackHole=Array.range(0,1).map((e=>({id:e,intervalUpgrades:0,powerUpgrades:0,durationUpgrades:0,phase:0,active:!1,unlocked:!1,activations:0}))),e.expoBlackHolePause=!1,e.expoBlackHoleAutoPauseMode=0,e.expoBlackHolePauseTime=0,e.expoBlackHoleNegative=1},51.012:e=>{e.celestials.ra.permanentMemories={ra2:!1,lai50:!1,lai65:!1}},51.013:e=>{e.records.thisReality.remWithoutGG=0,e.records.bestReality.remWithoutGG=0},51.014:e=>{e.galBoostPoints=new Decimal(0)},51.015:e=>{for(let t=0;t<11;t++)e.challenge.normal.bestTimes[t]=new Decimal(e.challenge.normal.bestTimes[t]);for(let t=0;t<8;t++)e.challenge.infinity.bestTimes[t]=new Decimal(e.challenge.infinity.bestTimes[t])},51.016:e=>{delete e.mending.spentCF},51.017:e=>{e.celestials.ra.rebuyables=[0,0,0,0,0,0,0,0,0,0,0,0,0,0],e.reality.achTimer=new Decimal(e.reality.achTimer)},51.018:e=>{e.reality.glyphs.sac.power=new Decimal(e.reality.glyphs.sac.power),e.reality.glyphs.sac.infinity=new Decimal(e.reality.glyphs.sac.infinity),e.reality.glyphs.sac.time=new Decimal(e.reality.glyphs.sac.time),e.reality.glyphs.sac.replication=new Decimal(e.reality.glyphs.sac.replication),e.reality.glyphs.sac.dilation=new Decimal(e.reality.glyphs.sac.dilation),e.reality.glyphs.sac.effarig=new Decimal(e.reality.glyphs.sac.effarig),e.reality.glyphs.sac.reality=new Decimal(e.reality.glyphs.sac.reality)},51.019:e=>{e.celestials.v.runUnlocks=e.celestials.v.runUnlocks.concat(Array.range(0,18).map((()=>0))),e.celestials.v.goalReductionSteps=e.celestials.v.goalReductionSteps.concat(Array.range(0,18).map((()=>0))),e.celestials.v.runGlyphs=e.celestials.v.runGlyphs.concat(Array.range(0,18).map((()=>[]))),e.celestials.v.runRecords=e.celestials.v.runRecords.concat(Array.range(0,18).map((()=>0))),e.celestials.v.wantsSuperFlipped=!1},51.02:e=>{e.celestials.v.wantsSuperFlipped?e.celestials.v.flip=V_FLIP.SUPER:e.celestials.v.wantsFlipped?e.celestials.v.flip=V_FLIP.HARD:e.celestials.v.flip=V_FLIP.NORMAL,delete e.celestials.v.wantsSuperFlipped,delete e.celestials.v.wantsFlipped},51.021:e=>{},51.022:e=>{e.isHoldingLClick=!1,e.celestials.laitela.holdStart=0,e.celestials.laitela.heldTier=0,e.celestials.laitela.heldType=""},51.023:e=>{e.celestials.ra.rebuyables={weakenTeresaScaling:0,weakenEffarigScaling:0,weakenEnslavedScaling:0,weakenVScaling:0,weakenRaScaling:0,weakenLaitelaScaling:0,weakenPelleScaling:0,incTeresaXPGain:0,incEffarigXPGain:0,incEnslavedXPGain:0,incVXPGain:0,incRaXPGain:0,incLaitelaXPGain:0,incPelleXPGain:0}},51.024:e=>{e.auto.singCap.multiplier=1e3},51.025:e=>{e.celestials.kohler.unlockProgress=0}},normalizeTimespans(e){e.realTimePlayed*=100,e.totalTimePlayed*=100,e.thisInfinityTime*=100,e.thisEternity*=100,e.thisReality*=100,e.bestInfinityTime=9999999999===e.bestInfinityTime?999999999999:100*e.bestInfinityTime,e.bestEternity=9999999999===e.bestEternity?999999999999:100*e.bestEternity;for(let t=0;t<10;t++)e.lastTenEternities[t][0]*=100,e.lastTenRuns[t][0]*=100,e.lastTenEternities[t][2]*=100,e.lastTenRuns[t][2]*=100;e.challengeTimes&&(e.challengeTimes=e.challengeTimes.map((e=>100*e))),e.infchallengeTimes&&(e.infchallengeTimes=e.infchallengeTimes.map((e=>100*e)))},convertAutobuyerMode(e){for(let i=0;i<8;i++){const t=e.autobuyers[i];t%1!==0&&(t.target<10?t.target=AUTOBUYER_MODE.BUY_SINGLE:t.target=AUTOBUYER_MODE.BUY_10)}const t=e.autobuyers[8];t%1!==0&&(t.target<10?t.target=AUTOBUYER_MODE.BUY_SINGLE:t.target=AUTOBUYER_MODE.BUY_MAX)},fixChallengeIds(e){let t=!1;function i(e){if(!e.startsWith("challenge"))return e;t=!0;const i=parseInt(e.substr(9),10),a=GameDatabase.challenges.normal.find((e=>e.legacyId===i));return`challenge${a.id}`}e.currentChallenge=i(e.currentChallenge),e.challenges=e.challenges.map(i),t&&e.challengeTimes&&(e.challengeTimes=GameDatabase.challenges.normal.slice(1).map((t=>e.challengeTimes[t.legacyId-2])))},adjustMultCosts(e){void 0!==e.tickSpeedMultDecreaseCost&&(e.infinityRebuyables[0]=Math.round(Math.log(e.tickSpeedMultDecreaseCost/3e6)/Math.log(5))),void 0!==e.dimensionMultDecreaseCost&&(e.infinityRebuyables[1]=Math.round(Math.log(e.dimensionMultDecreaseCost/1e8)/Math.log(5e3))),delete e.tickSpeedMultDecrease,delete e.tickSpeedMultDecreaseCost,delete e.dimensionMultDecrease,delete e.dimensionMultDecreaseCost},convertAchivementsToNumbers(e){if(e.achievements.length>0&&e.achievements.every((e=>"number"===typeof e)))return;const t=e.achievements;e.achievements=new Set,e.secretAchievements=new Set;for(const i of t){const t=GameDatabase.achievements.normal.find((e=>e.name===i));if(void 0!==t){e.achievements.add(t.id);continue}const a=parseInt(i.slice(1),10);if(isNaN(a))throw new Error(`Could not parse achievement id ${i}`);if(i.startsWith("r")){if(void 0===GameDatabase.achievements.normal.find((e=>e.id===a)))throw new Error(`Unrecognized achievement ${i}`);e.achievements.add(a)}else if(i.startsWith("s")){if(void 0===GameDatabase.achievements.secret.find((e=>e.id===a)))throw new Error(`Unrecognized secret achievement ${a}`);e.secretAchievements.add(a)}}},adjustGameCreatedTime(e){e.gameCreatedTime=e.lastUpdate-e.realTimePlayed},moveSavedStudyTrees(e){for(let t=1;t<=3;++t){const i=localStorage.getItem(`studyTree${t}`);i&&(e.timestudy.presets[t-1].studies=i)}},convertEPMult(e){if(void 0===e.epmult)return;const t=new Decimal(e.epmult);delete e.epmultCost,delete e.epmult,t.lte(1)?e.epmultUpgrades=0:e.epmultUpgrades=t.log(5)},moveChallengeInfo(e){function t(e){if(e.startsWith("challenge"))return{type:"normal",id:parseInt(e.slice(9),10)};if(e.startsWith("postc"))return{type:"infinity",id:parseInt(e.slice(5),10)};if(""!==e)throw new Error(`Unrecognized challenge ID ${e}`);return null}if(e.challengeTimes){for(let t=0;t0||0!==e.challenge.eternity.unlocked)&&(e.requirementChecks.reality.noPurchasedTT=!1),e.sacrificed.gt(0)&&(e.requirementChecks.infinity.noSacrifice=!1),e.requirementChecks.permanent.emojiGalaxies=e.spreadingCancer,delete e.spreadingCancer},removeAchPow(e){delete e.achPow},adjustSacrificeConfirmation(e){void 0!==e.options.sacrificeConfirmation&&(e.options.confirmations.sacrifice=e.options.sacrificeConfirmation,delete e.options.sacrificeConfirmation)},migrateNotation(e){const t=e.options.notation;void 0===t&&(e.options.notation="Standard");const i={Mixed:"Mixed scientific",Default:"Brackets",Emojis:"Cancer"};void 0!==i[t]&&(e.options.notation=i[t])},fixAutobuyers(e){for(let t=0;t<12;t++)e.autobuyers[t]%1!==0&&e.autobuyers[t].target%1!==0&&(e.autobuyers[t].target=AUTOBUYER_MODE.BUY_SINGLE),e.autobuyers[t]%1===0||void 0!==e.autobuyers[t].bulk&&!isNaN(e.autobuyers[t].bulk)&&null!==e.autobuyers[t].bulk||(e.autobuyers[t].bulk=1);"number"!==typeof e.autobuyers[9]&&"number"!==typeof e.autobuyers[9].bulk&&(e.autobuyers[9].bulk=1),e.autobuyers[11]%1!==0&&void 0!==e.autobuyers[11].priority&&null!==e.autobuyers[11].priority&&"undefined"!==e.autobuyers[11].priority&&(e.autobuyers[11].priority=new Decimal(e.autobuyers[11].priority))},removeAutoIPProperties(e){delete e.autoIP,delete e.autoTime},removeEternityChallGoal(e){delete e.eternityChallGoal},removeTickspeed(e){delete e.tickspeed,e.tickSpeedCost=new Decimal(1e3),e.tickspeedMultiplier=new Decimal(10)},removeOtherTickspeedProps(e){delete e.tickSpeedCost,delete e.tickspeedMultiplier},renameNewsOption(e){e.options.news.enabled=!e.options.newsHidden,delete e.options.newsHidden},removeDimensionCosts(e){for(const t of e.dimensions.antimatter)delete t.cost,delete t.costMultiplier},renameTickspeedPurchaseBumps(e){void 0!==e.chall9TickspeedPurchaseBumps&&(e.chall9TickspeedCostBumps=e.chall9TickspeedPurchaseBumps,delete e.chall9TickspeedPurchaseBumps)},removePostC3Reward(e){delete e.postC3Reward},renameMoney(e){e.antimatter=new Decimal(e.money),e.totalAntimatter=new Decimal(e.totalmoney),delete e.money,delete e.totalmoney},uniformDimensions(e){for(let t=1;t<=8;t++){const i=[null,"first","second","third","fourth","fifth","sixth","seventh","eight"][t],a={cost:`${i}Cost`,amount:`${i}Amount`,bought:`${i}Bought`,pow:`${i}Pow`},n=e.dimensions.antimatter[t-1];n.cost=new Decimal(e[a.cost]),n.amount=new Decimal(e[a.amount]),n.bought=e[a.bought],e.costmultipliers&&(n.costMultiplier=new Decimal(e.costMultipliers[t-1])),delete e[a.cost],delete e[a.amount],delete e[a.bought],delete e[a.pow]}if(delete e.costMultipliers,e.infinityDimension1){for(let t=1;t<=8;t++){const i=e.dimensions.infinity[t-1],a=`infinityDimension${t}`,n=e[a];i.cost=new Decimal(n.cost),i.amount=new Decimal(n.amount),i.bought=n.bought,i.baseAmount=n.baseAmount,i.isUnlocked=e.infDimensionsUnlocked[t-1],delete e[a]}delete e.infDimensionsUnlocked}if(e.timeDimension1)for(let t=1;t<=8;t++){const i=e.dimensions.time[t-1],a=`timeDimension${t}`,n=e[a];void 0!==n&&(i.cost=new Decimal(n.cost),i.amount=new Decimal(n.amount),i.bought=n.bought,delete e[a])}},moveAutobuyers(e){e.autobuyers[11]%1!==0&&void 0!==e.autobuyers[11].priority&&null!==e.autobuyers[11].priority&&"undefined"!==e.autobuyers[11].priority&&(e.autobuyers[11].priority=new Decimal(e.autobuyers[11].priority));for(let t=0;t<8;t++){const i=e.autobuyers[t];if(i%1===0)continue;const a=e.auto.antimatterDims.all[t];a.cost=i.cost,a.interval=i.interval,a.bulk=i.bulk,a.mode=i.target,a.priority=i.priority,a.isActive=i.isOn,a.lastTick=e.realTimePlayed}if(e.autobuyers[8]%1!==0){const t=e.autobuyers[8],i=e.auto.tickspeed;i.cost=t.cost,i.interval=t.interval,i.mode=t.target,i.priority=t.priority,i.isActive=t.isOn,i.lastTick=e.realTimePlayed}if(e.autobuyers[9]%1!==0){const t=e.autobuyers[9],i=e.auto.dimBoost;i.cost=t.cost,i.interval=t.interval,i.maxDimBoosts=t.priority,i.galaxies=e.overXGalaxies,i.bulk=t.bulk,i.buyMaxInterval=t.bulk,i.isActive=t.isOn,i.lastTick=e.realTimePlayed}if(delete e.overXGalaxies,e.autobuyers[10]%1!==0){const t=e.autobuyers[10],i=e.auto.galaxy;i.cost=t.cost,i.interval=t.interval,i.maxGalaxies=t.priority,i.buyMaxInterval=t.bulk,i.buyMax=t.bulk>0,i.isActive=t.isOn,i.lastTick=e.realTimePlayed}if(e.autobuyers[11]%1!==0){const t=e.autobuyers[11],i=e.auto.bigCrunch;i.cost=t.cost,i.interval=t.interval,i.mode=["amount","time","relative"].indexOf(e.autoCrunchMode);const a=new Decimal(t.priority);switch(e.autoCrunchMode){case"amount":i.amount=a;break;case"time":i.time=a.lt(Decimal.NUMBER_MAX_VALUE)?a.toNumber():i.time;break;case"relative":i.xHighest=a;break}i.isActive=t.isOn,i.lastTick=e.realTimePlayed}if(delete e.autoCrunchMode,delete e.autobuyers,e.autoSacrifice&&e.autoSacrifice%1!==0){const t=e.autoSacrifice,i=e.auto.sacrifice;i.multiplier=new Decimal(t.priority),i.isActive=t.isOn}if(delete e.autoSacrifice,void 0!==e.eternityBuyer){const t=e.eternityBuyer,i=e.auto.eternity;void 0===e.autoEternityMode&&(i.time=Number(t.limit)),i.isActive=t.isOn}delete e.eternityBuyer},convertNews(e){void 0===e.newsArray?e.newsArray=[]:e.newsArray=e.newsArray.map((e=>"number"===typeof e?`a${e}`:e));const t=new Set(e.newsArray);e.news={},e.news.seen={},e.news.specialTickerData={uselessNewsClicks:0,paperclips:0,newsQueuePosition:1e3,eiffelTowerChapter:0};const i=NewsHandler.BITS_PER_MASK;for(const a of t){const t=a.match(/([a-z]+)([0-9]+)/),n=t[1],s=parseInt(t[2],10);e.news.seen[n]||(e.news.seen[n]=[]);while(i*e.news.seen[n].length{for(const e of a){let a=Math.floor(e/10),s=e%10;!n&&[a,s].join(",")in t&&([a,s]=t[[a,s].join(",")].split(",")),i[a-1]|=1<=16||e.eternities.gt(0)||e.realities>0)?i[3]|=1:i[3]&=-2,n&&(i[2]&=-129)};e.achievementBits=Array.repeat(0,15),i(e.achievementBits,e.achievements,!1),delete e.achievements,e.secretAchievementBits=Array.repeat(0,4),i(e.secretAchievementBits,e.secretAchievements,!0),delete e.secretAchievements},setNoInfinitiesOrEternitiesThisReality(e){e.requirementChecks.reality.noInfinities=e.infinities.eq(0)&&e.eternities.eq(0),e.requirementChecks.reality.noEternities=e.eternities.eq(0)},setTutorialState(e){e.infinities.gt(0)||e.eternities.gt(0)||e.realities>0||e.galaxies>0?e.tutorialState=4:e.dimensionBoosts>0&&(e.tutorialState=TUTORIAL_STATE.GALAXY)},migrateLastTenRuns(e){e.lastTenRuns=e.lastTenRuns.map((e=>[e[0],e[1],new Decimal(e[3]),new Decimal(e[2]).toNumber()])),e.lastTenEternities=e.lastTenEternities.map((e=>[e[0],e[1],new Decimal(1),new Decimal(e[2]).toNumber()]))},migrateIPGen(e){e.infinityRebuyables[2]=e.offlineProd/5,delete e.offlineProd,delete e.offlineProdCost},renameCloudVariable(e){e.options.cloudEnabled=e.options.cloud,delete e.options.cloud},standardizeUncompletedTimes(e){999999999999===e.bestInfinityTime&&(e.bestInfinityTime=Number.MAX_VALUE),999999999999===e.bestInfinityRealTime&&(e.bestInfinityRealTime=Number.MAX_VALUE),999999999999===e.bestEternity&&(e.bestEternity=Number.MAX_VALUE);for(let t=0;ti.versionNumber(e))).max()+1)}};function Rm(e){let t=0;for(const i of e)t|=1<{Dm.normalizeTimespans(e),e.bestReality=9999999999===e.bestReality?999999999999:100*e.bestReality;for(let t=0;t<10;t++)e.lastTenRealities[t][0]*=100},e=>{e.reality.glyphs.last=""},e=>{e.secretUnlocks.themes=[]},e=>{e.wormhole.power*=36},e=>{e.reality.rebuyables={1:0,2:0,3:0,4:0,5:0};for(let t=1;t<6;t++)e.reality.upg.includes(t)&&(e.reality.rebuyables[t]=1,e.reality.upg.splice(e.reality.upg.indexOf(t),1))},e=>{e.reality.tdbuyer={on:!1,threshhold:1},e.reality.epmultbuyer={on:!1,threshhold:1}},e=>{e.reality.perks=new Set},e=>{e.reality.pp=0},e=>{e.reality.pp=e.realities},e=>{e.reality.pp>0&&(e.reality.pp-=1,e.reality.perks.add(0))},e=>{e.secretUnlocks.dragging=0},e=>{for(let t=0;t{e.reality.upgReqs.push(!1,!1,!1,!1,!1)},e=>{e.reality.realityMachines=new Decimal(e.reality.realityMachines)},e=>{e.reality.glyphs.sac={power:b.D0,infinity:b.D0,time:b.D0,replication:b.D0,dilation:b.D0,effarig:b.D0}},e=>{e.wormhole.pause=!1},e=>{e.wormholePause=!1,void 0===e.wormhole[0]&&(e.wormhole=[e.wormhole,{speed:360,power:90,duration:7,phase:0,active:!1,unlocked:!1},{speed:36,power:45,duration:4,phase:0,active:!1,unlocked:!1}])},e=>{e.reality.upg.includes(20)&&(e.wormhole[1].unlocked=!0)},e=>{e.reality.upgReqs.push(!1,!1,!1,!1,!1)},e=>{e.reality.tdbuyer=void 0,e.reality.tdbuyers=[!1,!1,!1,!1,!1,!1,!1,!1],e.reality.epmultbuyer=!1},e=>{["rm","glyph","either","both"].includes(e.autoRealityMode)||(e.autoRealityMode="rm")},Dm.convertAutobuyerMode,e=>{for(const t in e.celestials.effarig.glyphWeights)e.celestials.effarig.glyphWeights[t]*=100},e=>{for(const t in e.celestials.effarig.glyphWeights)e.celestials.effarig.glyphWeights[t]=25},e=>{},Dm.fixChallengeIds,Dm.adjustMultCosts,e=>{const t=e.celestials.effarig;e.celestials.effarig=e.celestials.teresa,e.celestials.teresa=t;for(const i in e.reality.glyphs.active){const t=e.reality.glyphs.active[i];"teresa"===t.type&&(t.type="effarig")}for(const i in e.reality.glyphs.inventory){const t=e.reality.glyphs.inventory[i];"teresa"===t.type&&(t.type="effarig")}},e=>{function t(t,i,a,n,s=null){void 0!==e.celestials[t][a]?(void 0===e.celestials[i][a]?e.celestials[i][a]=e.celestials[t][a]:s&&(e.celestials[i][a]=s(e.celestials[t][a],e.celestials[i][a])),delete e.celestials[t][a]):void 0===e.celestials[i][a]&&(e.celestials[i][a]=n)}t("teresa","effarig","glyphWeights",{ep:25,repl:25,dt:25,eternities:25}),t("teresa","effarig","autoGlyphSac",{mode:AUTO_GLYPH_SCORE.LOWEST_SACRIFICE,types:GlyphTypes.list.mapToObject((e=>e.id),(e=>({rarityThreshold:0,scoreThreshold:0,effectScores:e.effects.mapToObject((e=>e.id),(()=>0))})))}),t("teresa","effarig","autoGlyphPick",{mode:AUTO_GLYPH_REJECT.SACRIFICE}),t("teresa","effarig","relicShards",0,Math.max),t("effarig","teresa","quoteIdx",0),t("effarig","teresa","bestRunAM",0,Decimal.max),t("effarig","teresa","rmStore",0,Math.max),t("effarig","teresa","glyphLevelMult",1,Math.max),t("effarig","teresa","rmMult",1,Math.max),t("effarig","teresa","dtBulk",1,Math.max),delete e.celestials.effarig.typePriorityOrder,delete e.celestials.teresa.typePriorityOrder,t("teresa","effarig","glyphScoreSettings",{mode:AUTO_GLYPH_SCORE.LOWEST_SACRIFICE,simpleEffectCount:0,types:GlyphTypes.list.mapToObject((e=>e.id),(e=>({rarityThreshold:0,scoreThreshold:0,effectCount:0,effectChoices:e.effects.mapToObject((e=>e.id),(()=>!1)),effectScores:e.effects.mapToObject((e=>e.id),(()=>0))})))}),t("effarig","teresa","bestAMSet",[])},e=>{e.blackHole=e.wormhole,e.blackHolePause=e.wormholePause,delete e.wormhole,delete e.wormholePause},e=>{for(let t=0;t{},Dm.convertAchivementsToNumbers,Dm.adjustGameCreatedTime,Dm.moveSavedStudyTrees,e=>{e.celestials.teresa.rmStore>Teresa.rmStoreMax&&(e.reality.realityMachines=e.reality.realityMachines.plus(e.celestials.teresa.rmStore-Teresa.rmStoreMax),e.celestials.teresa.rmStore=Teresa.rmStoreMax),e.reality.upg&&(e.reality.upgradeBits=Rm(e.reality.upg),delete e.reality.upg),0===(e.reality.upgradeBits&1<<25)&&(e.realityBuyer.isOn=!1);for(let t=0;t{e.lastTenRealities=e.lastTenRealities.map((e=>[e[0],e[1],e[3],e[2]]))},e=>{e.achievements.delete(157),e.achievements.delete(156),e.achievements.delete(155),e.achievements.delete(153),Dm.adjustWhy(e),Dm.adjustAchievementVars(e)},Dm.uniformDimensions,Dm.removeEternityChallGoal,e=>{e.blackHole.pop()},e=>{const t=e.reality.glyphs.active.concat(e.reality.glyphs.inventory);for(let i=0;i{},e=>{Dm.removeTickspeed(e),Dm.removePostC3Reward(e)},e=>{const t=e.reality.glyphs.active.concat(e.reality.glyphs.inventory);for(const i of t){let e=0;for(const t of orderedEffectList){const a=separateEffectKey(t);i.type===a[0]&&void 0!==i.effects[a[1]]&&(e+=1<{const t=e.celestials.ra.pets;for(const i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;const e=t[i],a=e.exp+1e4*(Math.pow(1.12,e.level-1)-1)/.12;e.level=1,e.exp=Math.clampMin(a,0)}e.celestials.ra.unlocks=[]},e=>{const t=e.celestials.ra.pets;for(const i in t){if(!Object.prototype.hasOwnProperty.call(t,i))continue;const e=t[i];let a=e.exp;for(let t=1;t{Dm.moveAutobuyers(e);const t=e.realityBuyer,i=e.auto.reality;i.mode=["rm","glyph","either","both"].indexOf(e.autoRealityMode),i.rm=t.rm,i.glyph=t.glyph,i.isActive=t.isOn;const a=e.auto.eternity;a.mode=["amount","time","relative"].indexOf(e.autoEternityMode);const n=new Decimal(t.limit);switch(e.autoEternityMode){case"amount":a.amount=n;break;case"time":a.time=n.lt(Decimal.NUMBER_MAX_VALUE)?n.toNumber():a.time;break;case"relative":a.xLast=n;break}delete e.realityBuyer,delete e.autoRealityMode,delete e.autoEternityMode},Dm.convertNews,Dm.convertEternityCountToDecimal,Dm.renameDimboosts,e=>{e.auto.reality.mode=0,e.auto.reality.isActive=!1},e=>{e.celestials.teresa.perkShop=[Math.floor(Math.log(e.celestials.teresa.glyphLevelMult)/Math.log(1.05)),Math.floor(Math.log(e.celestials.teresa.rmMult)/Math.log(2)),Math.floor(Math.log(e.celestials.teresa.dtBulk)/Math.log(2)),0],delete e.celestials.teresa.glyphLevelMult,delete e.celestials.teresa.rmMult,delete e.celestials.teresa.dtBulk},Dm.migrateConfirmations,Dm.removeOtherTickspeedProps,e=>{delete e.resets,delete e.tickDecrease},Dm.renameNewsOption,Dm.removeDimensionCosts,Dm.renameTickspeedPurchaseBumps,e=>{const t=e=>void 0===e?0:Rm(e);e.celestials.teresa.unlockBits=t(e.celestials.teresa.unlocks),delete e.celestials.teresa.unlocks,e.celestials.effarig.unlockBits=t(e.celestials.effarig.unlocks),delete e.celestials.effarig.unlocks,e.celestials.v.unlockBits=t(e.celestials.v.unlocks),delete e.celestials.v.unlocks,e.celestials.ra.unlockBits=t(e.celestials.ra.unlocks),delete e.celestials.ra.unlocks,e.celestials.laitela.unlockBits=t(e.celestials.laitela.unlocks),delete e.celestials.laitela.unlocks},e=>{e.reality.seed=Math.floor(Math.abs(e.reality.seed))%4294967295},e=>{e.auto.sacrifice.multiplier=new Decimal(e.auto.sacrifice.multiplier)},Dm.changeC8Handling,e=>{while(e.celestials.teresa.perkShop.length<5)e.celestials.teresa.perkShop.push(0)},e=>{delete e.secretUnlocks.fixed},e=>{delete e.celestials.effarig.quoteIdx,delete e.celestials.enslaved.quoteIdx},e=>{const t=e.celestials.teresa.perkShop[4],i=e.celestials.teresa.perkShop[3];e.celestials.teresa.perkShop[3]=t,e.celestials.teresa.perkShop[4]=i},Dm.convertAchievementsToBits,e=>{for(const t of e.dimensions.antimatter)delete t.power;for(const t of e.dimensions.infinity)delete t.power;for(const t of e.dimensions.time)delete t.power},e=>{const t=15,i=e.reality.glyphs.active.concat(e.reality.glyphs.inventory);for(const a of i)"cursed"===a.type&&(a.effects=t)},e=>{e.options.showHintText.alchemy=e.options.showAlchemyResources,delete e.options.showAlchemyResources},e=>{const t=e.celestials.effarig.autoGlyphSac.types,i=GlyphTypes.list.filter((e=>generatedTypes.includes(e.id))).mapToObject((e=>e.id),(e=>({rarityThreshold:0,scoreThreshold:0,effectCount:0,effectChoices:e.effects.mapToObject((e=>e.id),(()=>!1)),effectScores:e.effects.mapToObject((e=>e.id),(()=>0))})));for(const a of generatedTypes){i[a].rarityThreshold=t[a].rarityThreshold,i[a].scoreThreshold=t[a].scoreThreshold;for(const e of Object.keys(i[a].effectScores))i[a].effectScores[e]=t[a].effectScores[e]}e.celestials.effarig.autoGlyphSac.types=i},e=>{e.reality.glyphs.inventorySize+=10},e=>{e.celestials.v.unlockBits=0,V.updateTotalRunUnlocks(),V.checkForUnlocks()},e=>{e.celestials.v.unlockBits=0,V.updateTotalRunUnlocks(),V.checkForUnlocks()},e=>{e.reality.autoAchieve=!e.reality.disableAutoAchieve,delete e.reality.disableAutoAchieve,delete e.newEC10Test},e=>{e.celestials.ra.unlockBits=0,Ra.checkForUnlocks()},e=>{e.celestials.v.runRecords[0]=-10},e=>{delete e.celestials.v.cursedThisRun},e=>{e.celestials.ra.unlockBits=0,Ra.checkForUnlocks()},e=>{Object.assign(e.celestials.effarig.glyphScoreSettings,e.celestials.effarig.autoGlyphSac),e.celestials.effarig.glyphTrashMode=0,delete e.celestials.effarig.autoGlyphSac,delete e.celestials.effarig.autoGlyphPick},e=>{delete e.reality.glyphs.inventorySize;for(const t of e.reality.glyphs.inventory)t.idx>=10&&(t.idx+=10)},e=>{e.onlyEighthDimensions=e.onlyEighthDimensons,delete e.onlyEighthDimensons},e=>{for(const t of Ra.pets.all)t.level=Math.clampMax(t.level,25);if(delete e.celestials.ra.compression,Ra.unlocks.allGamespeedGlyphs.canBeApplied){const t=e.reality.glyphs.active.concat(e.reality.glyphs.inventory);for(const e of t)Glyphs.applyGamespeed(e)}},e=>{for(let t=0;t{delete e.celestials.laitela.maxAmGained;for(const t of e.celestials.laitela.dimensions)t.powerDMUpgrades=t.powerUpgrades,t.powerDEUpgrades=0,delete t.chanceUpgrades,delete t.powerUpgrades;e.celestials.laitela.darkMatterMult=Number(e.celestials.laitela.higgs)+1,delete e.celestials.laitela.anomalies},e=>{delete e.achPow,delete e.interval,delete e.tickThreshold,delete e.celestials.enslaved.maxQuotes,delete e.celestials.v.quoteIdx,delete e.celestials.ra.quoteIdx},e=>{e.celestials.enslaved.totalDimCapIncrease=0,e.celestials.enslaved.tesseracts=0},e=>{delete e.auto.galaxy.buyMax},e=>{delete e.reality.glyphs.sac.cursed,Achievement(153).lock(),Achievement(157).lock()},e=>{e.celestials.v.ppSpent&&(e.reality.pp+=e.celestials.v.ppSpent,delete e.celestials.v.ppSpent)},e=>{e.thisEternityMaxAM=new Decimal(0)},e=>{Dm.migrateLastTenRuns(e),e.lastTenRealities=e.lastTenRealities.map((e=>[e[0],e[1],1,Number(e[2]),e[3]])),Dm.migrateIPGen(e)},e=>{e.noReplicantiGalaxies=e.reality.upgReqChecks[0],delete e.reality.upgReqChecks},e=>{e.bestGlyphStrength=e.reality.glyphs.active.concat(e.reality.glyphs.inventory).map((e=>e.strength)).max()},e=>{e.options.showHintText.glyphEffectDots=e.options.showGlyphEffectDots,delete e.options.showGlyphEffectDots,Dm.renameCloudVariable(e)},e=>{const t=new Set([...e.reality.perks].filter((e=>e<20||e>25))),i=e.reality.perks.size-t.size;e.reality.pp+=i,e.reality.perks=t,i>0&&Modal.message.show("Some of your perks (glyph perks) were removed. The perk points you spent on them have been refunded.")},e=>{delete e.reality.glyphs.last},e=>{null===e.reality.secondGaussian&&(e.reality.secondGaussian=1e6)},e=>{delete e.celestials.laitela.reachedSingularityCapLimit,delete e.celestials.laitela.secondsSinceCappedTime,delete e.celestials.laitela.singularityAutoCapLimit,delete e.celestials.laitela.singularityTime,delete e.celestials.laitela.autoAnnihilationTimer,delete e.celestials.laitela.annihilated,delete e.celestials.laitela.secondsSinceReachedSingularity,e.celestials.laitela.darkMatterMult=Math.clampMin(e.celestials.laitela.darkMatterMult,1),e.celestials.laitela.dimensions.forEach((e=>e.ascensionCount=0))},e=>{const t=e.reality.glyphs.active.concat(e.reality.glyphs.inventory).filter((e=>"companion"!==e.type));for(const i of t)i.strength=Math.ceil(400*i.strength)/400},e=>{if(void 0!==e.dimensions.normal){for(let t=0;t{void 0===e.options.news.enabled&&(e.options.news={enabled:e.options.news,repeatBuffer:40,AIChance:0,speed:1})},e=>{delete e.options.confirmations.glyphTrash},e=>{Dm.standardizeUncompletedTimes(e),999999999999===e.bestReality&&(e.bestReality=Number.MAX_VALUE),999999999999===e.bestRealityRealTime&&(e.bestRealityRealTime=Number.MAX_VALUE);for(let t=0;t<10;t++)26784e5===e.lastTenRealities[t][0]&&(e.lastTenRealities[t][0]=Number.MAX_VALUE),26784e3===e.lastTenRealities[t][3]&&(e.lastTenRealities[t][3]=Number.MAX_VALUE)},e=>{for(const t of Object.values(e.reality.automator.scripts))t.content=t.content.replace(/^([\t ]*)(wait|if|while|until)([\t ]+)(completion[s\u017F])/gim,"$1$2$3pending $4")},e=>{e.celestials.ra.unlockBits&=~(1<<29)},e=>{e.records.gameCreatedTime=e.gameCreatedTime,e.records.totalTimePlayed=e.totalTimePlayed,e.records.realTimePlayed=e.realTimePlayed,e.records.totalAntimatter=new Decimal(e.totalAntimatter);for(let t=0;t<10;t++)e.records.lastTenInfinities[t][0]=e.lastTenRuns[t][0],e.records.lastTenEternities[t][0]=e.lastTenEternities[t][0],e.records.lastTenRealities[t][0]=e.lastTenRealities[t][0];e.options.showLastTenInfinitiesGainPerTime=e.options.showLastTenRunsGainPerTime,delete e.options.showLastTenRunsGainPerTime,e.records.thisInfinity.time=e.thisInfinityTime,e.records.thisInfinity.realTime=e.thisInfinityRealTime,e.records.thisInfinity.lastBuyTime=e.thisInfinityLastBuyTime,e.records.thisInfinity.maxAM=new Decimal(e.thisInfinityMaxAM),e.records.thisInfinity.bestIPmin=new Decimal(e.bestIPminThisInfinity),e.records.bestInfinity.time=e.bestInfinityTime,e.records.bestInfinity.realTime=e.bestInfinityRealTime,e.records.bestInfinity.bestIPminEternity=new Decimal(e.bestIPminThisEternity),e.records.bestInfinity.bestIPminReality=new Decimal(e.bestEPThisReality),e.records.thisEternity.time=e.thisEternity,e.records.thisEternity.realTime=e.thisEternityRealTime,e.records.thisEternity.maxAM=new Decimal(e.thisEternityMaxAM),e.records.thisEternity.maxIP=new Decimal(e.thisEternityMaxIP),e.records.thisEternity.bestIPMsWithoutMaxAll=new Decimal(e.bestIpPerMsWithoutMaxAll),e.records.thisEternity.bestEPmin=new Decimal(e.bestEPminThisEternity),e.records.thisEternity.bestInfinitiesPerMs=new Decimal(e.bestInfinitiesPerMs),e.records.bestEternity.time=e.bestEternity,e.records.bestEternity.bestEPminReality=new Decimal(e.bestEPminThisReality),e.records.thisReality.time=e.thisReality,e.records.thisReality.realTime=e.thisRealityRealTime,e.records.thisReality.bestEternitiesPerMs=new Decimal(e.bestEternitiesPerMs),e.records.bestReality.RMmin=new Decimal(e.bestRMmin),e.records.bestReality.RMminSet=e.bestRMminSet,e.records.bestReality.glyphLevel=e.bestGlyphLevel,e.records.bestReality.glyphStrength=e.bestGlyphStrength,e.records.bestReality.glyphLevelSet=e.bestGlyphLevelSet,e.records.bestReality.bestEP=new Decimal(e.bestEP),e.records.bestReality.bestEPSet=e.bestEPSet,e.records.bestReality.time=e.bestReality,e.records.bestReality.realTime=e.bestRealityRealTime,e.records.bestReality.speedSet=e.bestSpeedSet,delete e.gameCreatedTime,delete e.totalTimePlayed,delete e.realTimePlayed,delete e.totalAntimatter,delete e.lastTenRuns,delete e.lastTenEternities,delete e.lastTenRealities,delete e.thisInfinityTime,delete e.thisInfinityRealTime,delete e.thisInfinityLastBuyTime,delete e.thisInfinityMaxAM,delete e.bestIPminThisInfinity,delete e.bestInfinityTime,delete e.bestInfinityRealTime,delete e.bestIPminThisEternity,delete e.thisEternity,delete e.thisEternityRealTime,delete e.thisEternityMaxAM,delete e.thisEternityMaxIP,delete e.bestIpPerMsWithoutMaxAll,delete e.bestEPminThisEternity,delete e.bestInfinitiesPerMs,delete e.bestIPminThisEternity,delete e.bestEternity,delete e.bestEPminThisReality,delete e.thisReality,delete e.thisRealityRealTime,delete e.bestEternitiesPerMs,delete e.bestEPThisReality,delete e.bestRMmin,delete e.bestRMminSet,delete e.bestGlyphLevel,delete e.bestGlyphStrength,delete e.bestGlyphLevelSet,delete e.bestEP,delete e.bestEPSet,delete e.bestReality,delete e.bestRealityRealTime,delete e.bestSpeedSet},e=>{e.replicanti.boughtGalaxyCap=e.replicanti.gal,e.reality.perkPoints=e.reality.pp,e.celestials.teresa.pouredAmount=e.celestials.teresa.rmStore,e.celestials.laitela.darkMatter=new Decimal(e.celestials.laitela.matter),e.celestials.laitela.maxDarkMatter=new Decimal(e.celestials.laitela.maxMatter),e.celestials.ra.pets.teresa.memories=e.celestials.ra.pets.teresa.exp,e.celestials.ra.pets.effarig.memories=e.celestials.ra.pets.effarig.exp,e.celestials.ra.pets.enslaved.memories=e.celestials.ra.pets.enslaved.exp,e.celestials.ra.pets.v.memories=e.celestials.ra.pets.v.exp,e.achievementChecks={noSacrifices:e.noSacrifices,onlyEighthDimensions:e.onlyEighthDimensions,onlyFirstDimensions:e.onlyFirstDimensions,noEighthDimensions:e.noEighthDimensions,noFirstDimensions:e.noFirstDimensions,noAntimatterProduced:e.noAntimatterProduced,noTriadStudies:e.noTriadStudies,noTheoremPurchases:e.noTheoremPurchases,noInfinitiesThisReality:e.noInfinitiesThisReality,noEternitiesThisReality:e.noEternitiesThisReality,noReplicantiGalaxies:e.noReplicantiGalaxies,maxID1ThisReality:new Decimal(1),continuumThisReality:!0},e.dilation.baseTachyonGalaxies=e.dilation.baseFreeGalaxies,e.dilation.totalTachyonGalaxies=e.dilation.freeGalaxies,delete e.replicanti.gal,delete e.reality.pp,delete e.celestials.teresa.rmStore,delete e.celestials.laitela.matter,delete e.celestials.laitela.maxMatter,delete e.celestials.ra.pets.teresa.exp,delete e.celestials.ra.pets.effarig.exp,delete e.celestials.ra.pets.enslaved.exp,delete e.celestials.ra.pets.v.exp,delete e.noSacrifices,delete e.onlyEighthDimensions,delete e.onlyFirstDimensions,delete e.noEighthDimensions,delete e.noFirstDimensions,delete e.noAntimatterProduced,delete e.noTriadStudies,delete e.noTheoremPurchases,delete e.noInfinitiesThisReality,delete e.noEternitiesThisReality,delete e.noReplicantiGalaxies,delete e.dilation.baseFreeGalaxies,delete e.dilation.freeGalaxies},e=>{e.auto.infinityDims=Array.range(0,8).map((()=>({lastTick:0})));for(let t=0;t<8;t++)e.auto.infinityDims[t].isActive=e.infDimBuyers[t];e.auto.timeDims=Array.range(0,8).map((()=>({lastTick:0})));for(let t=0;t<8;t++)e.auto.timeDims[t].isActive=e.reality.tdbuyers[t];e.auto.replicantiUpgrades=Array.range(0,3).map((()=>({lastTick:0})));for(let t=0;t<3;t++)e.auto.replicantiUpgrades[t].isActive=e.replicanti.auto[t];void 0===e.dilation.auto&&(e.dilation.auto=[!0,!0,!0]),e.auto.dilationUpgrades=Array.range(0,3).map((()=>({lastTick:0})));for(let t=0;t<3;t++)e.auto.dilationUpgrades[t].isActive=e.dilation.auto[t];e.auto.blackHolePower=Array.range(0,2).map((()=>({lastTick:0})));for(let t=0;t<2;t++)e.auto.blackHolePower[t].isActive=e.blackHole[t].autoPower;void 0===e.reality.rebuyablesAuto&&(e.reality.rebuyablesAuto=[!0,!0,!0,!0,!0]),e.auto.realityUpgrades=Array.range(0,5).map((()=>({lastTick:0})));for(let t=0;t<5;t++)e.auto.realityUpgrades[t].isActive=e.reality.rebuyablesAuto[t];void 0===e.auto.antimatterDims&&(e.auto.antimatterDims=e.auto.dimensions),e.auto.replicantiGalaxies.isActive=e.replicanti.galaxybuyer,e.auto.ipMultBuyer.isActive=e.infMultBuyer,e.auto.epMultBuyer.isActive=e.reality.epmultbuyer,e.auto.timeTheorems.isActive=e.ttbuyer,e.auto.bigCrunch.xCurrent=e.auto.bigCrunch.xLast,e.auto.eternity.xCurrent=e.auto.eternity.xLast,e.auto.bulkOn=e.options.bulkOn,e.auto.autobuyerOn=e.options.autobuyerOn,e.auto.disableContinuum=e.options.disableContinuum,delete e.auto.dimensions,delete e.infDimBuyers,delete e.auto.infDimTimer,delete e.reality.tdbuyers,delete e.auto.timeDimTimer,delete e.replicanti.galaxybuyer,delete e.replicanti.auto,delete e.auto.repUpgradeTimer,delete e.ttbuyer,delete e.auto.ttTimer,delete e.dilation.auto,delete e.auto.dilUpgradeTimer,delete e.blackHole[0].autoPower,delete e.blackHole[1].autoPower,delete e.reality.rebuyablesAuto,delete e.reality.epmultbuyer,delete e.infMultBuyer,delete e.auto.bigCrunch.xLast,delete e.auto.eternity.xLast,delete e.options.bulkOn,delete e.options.autobuyerOn,delete e.options.disableContinuum},Dm.convertTimeTheoremPurchases,Dm.infinitiedConversion,e=>{delete e.saveOverThresholdFlag,delete e.saveOverThresholdFlagModalDisplayed},e=>{Autobuyer.reality.isUnlocked||(e.auto.reality.isActive=!1)},e=>{e.reality.perks.has(64)&&(e.reality.perks.delete(64),e.reality.perkPoints++);let t=0;for(let i=0;i<=e.reality.upgReqs.length;i++)e.reality.upgReqs[i]&&(t|=1<{e.reality.perks.has(11)&&(e.reality.perks.delete(11),e.reality.perkPoints++),e.reality.perks.has(10)&&Perk.startAM.onPurchased()},e=>{e.achievementChecks.maxStudiesThisReality=e.timestudy.studies.length,e.celestials.teresa.lastRepeatedMachines=new Decimal(e.celestials.teresa.lastRepeatedRM),delete e.celestials.teresa.lastRepeatedRM},e=>{let t=1,i=1;const a={};for(const n of Object.keys(e.reality.automator.scripts))a[t]=e.reality.automator.scripts[n],a[t].id=t,n===e.reality.automator.state.editorScript&&(i=t),t++;e.reality.automator.scripts=a,e.reality.automator.state.editorScript=i,delete e.reality.automator.lastID},Dm.deleteDimboostBulk,Dm.removePriority,e=>{e.reality.realityMachines=e.reality.realityMachines.floor()},Dm.deleteFloatingTextOption,e=>{e.reality.perks.has(206)&&(e.reality.perks.delete(206),e.reality.perkPoints++)},e=>{e.records.thisEternity.maxIP=new Decimal(e.infinityPoints),e.auto.bigCrunch.xHighest=e.auto.bigCrunch.xCurrent,e.auto.eternity.xHighest=e.auto.eternity.xCurrent,delete e.auto.bigCrunch.xCurrent,delete e.auto.eternity.xCurrent},e=>{e.achievementChecks.continuumThisReality=Boolean(e.achievementChecks.continuumThisReality)},e=>{e.secretUnlocks.spreadingCancer=e.spreadingCancer,delete e.spreadingCancer},e=>{delete e.celestials.enslaved.totalDimCapIncrease},e=>{for(const t of e.reality.glyphs.undo)for(const e of["thisInfinityTime","thisInfinityRealTime","thisEternityTime","thisEternityRealTime"])e in t||(t[e]=1e3)},e=>{const t=e.achievementChecks;if(e.requirementChecks={infinity:{maxAll:e.usedMaxAll,noSacrifice:t.noSacrifices,noAD8:t.noEighthDimensions},eternity:{onlyAD1:t.onlyFirstDimensions,onlyAD8:t.onlyEighthDimensions,noAD1:t.noFirstDimensions,noRG:t.noEighthDimensions},reality:{noAM:t.noAntimatterProduced,noTriads:t.noTriadStudies,noPurchasedTT:t.noTheoremPurchases,noInfinities:t.noInfinitiesThisReality,noEternities:t.noEternitiesThisReality,noContinuum:!t.continuumThisReality,maxID1:new Decimal(t.maxID1ThisReality),maxStudies:t.maxStudiesThisReality,maxGlyphs:e.celestials.v.maxGlyphsThisRun,slowestBH:e.minNegativeBlackHoleThisReality},permanent:{cancerGalaxies:e.secretUnlocks.spreadingCancer,singleTickspeed:e.secretUnlocks.why,perkTreeDragging:e.secretUnlocks.dragging}},delete e.usedMaxAll,delete e.secretUnlocks.spreadingCancer,delete e.secretUnlocks.why,delete e.secretUnlocks.dragging,delete e.achievementChecks,delete e.minNegativeBlackHoleThisReality,delete e.celestials.v.maxGlyphsThisRun,Array.isArray(e.news)){const t=e.news;delete e.news,e.news={},e.news.seen={};for(const e of t)NewsHandler.addSeenNews(e);e.news.totalSeen=NewsHandler.uniqueTickersSeen}e.news.specialTickerData={uselessNewsClicks:e.secretUnlocks.uselessNewsClicks,paperclips:e.secretUnlocks.paperclips,newsQueuePosition:e.secretUnlocks.newsQueuePosition,eiffelTowerChapter:e.secretUnlocks.eiffelTowerChapter},delete e.secretUnlocks.uselessNewsClicks,delete e.secretUnlocks.paperclips,delete e.secretUnlocks.newsQueuePosition,delete e.secretUnlocks.eiffelTowerChapter},Dm.refactorDoubleIPRebuyable,e=>{0===e.requirementChecks.reality.slowestBH&&(e.requirementChecks.reality.slowestBH=1)},e=>{e.auto.eternity.amount.lt(.01)&&(e.auto.eternity.amount=new Decimal(0))},e=>{e.options.hiddenSubtabBits=Array.repeat(0,11),e.options.lastOpenSubtab=Array.repeat(0,11)},e=>{const t=[{name:"power",id:ALCHEMY_RESOURCE.POWER},{name:"infinity",id:ALCHEMY_RESOURCE.INFINITY},{name:"time",id:ALCHEMY_RESOURCE.TIME},{name:"replication",id:ALCHEMY_RESOURCE.REPLICATION},{name:"dilation",id:ALCHEMY_RESOURCE.DILATION},{name:"effarig",id:ALCHEMY_RESOURCE.EFFARIG}];for(const i of t)e.celestials.ra.highestRefinementValue[i.name]=e.celestials.ra.alchemy[i.id].amount},Dm.deletePostChallUnlocked,e=>{e.reality.perks.has(63)&&(e.reality.perks.delete(63),e.reality.perkPoints++),e.reality.perks.has(107)&&(e.reality.perks.delete(107),e.reality.perkPoints++),delete e.auto.timeTheorems.lastTick},e=>{e.realities>5&&e.realities<50&&(e.reality.automator.state.mode=1,e.reality.automator.state.stack=[],e.reality.automator.state.repeat=!1,e.reality.automator.state.forceRestart=!1)},e=>{for(const t of e.celestials.ra.alchemy)t.amount=Math.clampMax(t.amount,25e3)},e=>{const t=new RegExp("T(\\d)","gu");e.timestudy.presets.forEach((e=>e.studies=e.studies.replaceAll(t,"30$1")));for(const i of Object.values(e.reality.automator.scripts))i.content=i.content.replaceAll(t,"30$1");void 0!==e.celestials.v.triadStudies&&(e.timestudy.studies=e.timestudy.studies.concat(e.celestials.v.triadStudies.map((e=>e+300))),delete e.celestials.v.triadStudies)},e=>{delete e.options.confirmations.harshAutoClean},e=>{e.celestials.laitela.singularitySorting={displayResource:e.options.showCondenseToMilestone?1:0,sortResource:0,showCompleted:0,sortOrder:0},delete e.options.showCondenseToMilestone},()=>{},e=>{e.reality.glyphs.sets=e.reality.glyphs.sets.map((e=>({glyphs:e,name:""})))},e=>{while(!Array.isArray(e.reality.glyphs.sets[0].glyphs))e.reality.glyphs.sets=e.reality.glyphs.sets.map((e=>e.glyphs))},e=>{e.celestials.pelle.rifts.chaos.fill=new Decimal(e.celestials.pelle.rifts.chaos.fill).toNumber(),delete e.celestials.pelle.compact,e.celestials.pelle.collapsed={upgrades:!1,rifts:!1,galaxies:!1},e.celestials.pelle.galaxyGenerator.unlocked=e.celestials.pelle.galaxyGenerator.generatedGalaxies>0},e=>{e.celestials.pelle.doomed&&(e.achievementBits[17]|=1),e.celestials.pelle.upgrades.has(4)&&(e.achievementBits[17]|=2),e.celestials.pelle.doomed&&510===e.challenge.infinity.completedBits&&(e.achievementBits[17]|=4),e.timestudy.studies.compact().includes(181)&&(e.achievementBits[17]|=32)},e=>{e.achievementBits[16]|=(16&e.achievementBits[16])<<3,e.achievementBits[16]&=-17,e.achievementBits[16]|=(4&e.achievementBits[16])<<2,e.achievementBits[16]&=-5},e=>{e.achievementBits[17]&=-33,e.timestudy.studies.compact().includes(181)&&e.celestials.pelle.doomed&&(e.achievementBits[17]|=32)},e=>{e.celestials.pelle.doomed&&0!==(32&e.challenge.infinity.completedBits)?e.achievementBits[17]|=4:e.achievementBits[17]&=-5},e=>{e.celestials.pelle.collapsed=e.celestials.collapsed,e.celestials.pelle.showBought=e.celestials.showBought,delete e.celestials.collapsed,delete e.celestials.showBought},Dm.infMultNameConversion,e=>{void 0===e.celestials.pelle.collapsed&&(e.celestials.pelle.collapsed={upgrades:!1,rifts:!1,galaxies:!1})},e=>{const t=e.celestials.laitela;t.automation&&(e.auto.darkMatterDims.isActive=t.automation.dimensions,e.auto.ascension.isActive=t.automation.ascension,e.auto.annihilation.isActive=t.automation.singularity,e.auto.singularity.isActive=t.automation.annihilation,delete e.celestials.laitela.automation.dimensions,delete e.celestials.laitela.automation.ascension,delete e.celestials.laitela.automation.singularity,delete e.celestials.laitela.automation.annihilation),e.auto.darkMatterDims.lastTick=t.darkAutobuyerTimer,e.auto.ascension.lastTick=t.darkAutobuyerTimer,e.auto.annihilation.multiplier=t.autoAnnihilationSetting,delete e.celestials.laitela.darkAutobuyerTimer,delete e.celestials.laitela.darkAutobuyerTimer,delete e.celestials.laitela.autoAnnihilationSetting},Dm.etercreqConversion,e=>{delete e.options.confirmations.reality},e=>{const t=e.celestials.pelle.upgrades.has(19),i=e.celestials.pelle.upgrades.has(18);e.celestials.pelle.upgrades.delete(18),e.celestials.pelle.upgrades.delete(19),t&&e.celestials.pelle.upgrades.add(18),i&&e.celestials.pelle.upgrades.add(19)},e=>{delete e.auto.bulkOn},e=>{e.requirementChecks.permanent.emojiGalaxies=e.requirementChecks.permanent.cancerGalaxies,delete e.requirementChecks.permanent.cancerGalaxies},e=>{delete e.celestials.effarig.unlocksBits,delete e.celestials.ra.unlocksBits},e=>{for(const t of Object.values(e.reality.automator.scripts))t.id=parseInt(t.id,10)},e=>{e.secretUnlocks.themes.delete("S4Cancer"),e.secretUnlocks.themes.add("S4Design")},e=>{e.reality.automator.state.editorScript=Number(e.reality.automator.state.editorScript),e.reality.automator.state.topLevelScript=Number(e.reality.automator.state.topLevelScript)},e=>{e.celestials.pelle.upgrades.delete(20)&&e.celestials.pelle.upgrades.add(21),e.celestials.pelle.upgrades.delete(19)&&e.celestials.pelle.upgrades.add(20);const t=e.celestials.pelle.upgrades.delete(18);for(let i=17;i>=10;i--)e.celestials.pelle.upgrades.delete(i)&&e.celestials.pelle.upgrades.add(i+2);for(let i=9;i>=7;i--)e.celestials.pelle.upgrades.delete(i)&&e.celestials.pelle.upgrades.add(i+1);t&&e.celestials.pelle.upgrades.add(7)},e=>{const t=e.celestials,i=e=>e.toBitmask()>>1;t.teresa.quotes&&(e.celestials.teresa.quoteBits=i(t.teresa.quotes)),t.effarig.quotes&&(e.celestials.effarig.quoteBits=i(t.effarig.quotes)),t.enslaved.quotes&&(e.celestials.enslaved.quoteBits=i(t.enslaved.quotes)),t.v.quotes&&(e.celestials.v.quoteBits=i(t.v.quotes)),t.ra.quotes&&(e.celestials.ra.quoteBits=i(t.ra.quotes)),t.laitela.quotes&&(e.celestials.laitela.quoteBits=i(t.laitela.quotes)),t.pelle.quotes&&(e.celestials.pelle.quoteBits=i(t.pelle.quotes)),delete e.celestials.teresa.quotes,delete e.celestials.effarig.quotes,delete e.celestials.enslaved.quotes,delete e.celestials.v.quotes,delete e.celestials.ra.quotes,delete e.celestials.laitela.quotes,delete e.celestials.pelle.quotes},e=>{e.celestials.pelle.rifts.famine&&(e.celestials.pelle.rifts.vacuum=(0,B.Z)((0,B.Z)({},e.celestials.pelle.rifts.famine),{},{fill:new Decimal(e.celestials.pelle.rifts.famine.fill)}),delete e.celestials.pelle.rifts.famine),e.celestials.pelle.rifts.pestilence&&(e.celestials.pelle.rifts.decay=(0,B.Z)((0,B.Z)({},e.celestials.pelle.rifts.pestilence),{},{fill:new Decimal(e.celestials.pelle.rifts.pestilence.fill)}),delete e.celestials.pelle.rifts.pestilence),e.celestials.pelle.rifts.war&&(e.celestials.pelle.rifts.recursion=(0,B.Z)((0,B.Z)({},e.celestials.pelle.rifts.war),{},{fill:new Decimal(e.celestials.pelle.rifts.war.fill)}),delete e.celestials.pelle.rifts.war),e.celestials.pelle.rifts.death&&(e.celestials.pelle.rifts.paradox=(0,B.Z)((0,B.Z)({},e.celestials.pelle.rifts.death),{},{fill:new Decimal(e.celestials.pelle.rifts.death.fill)}),delete e.celestials.pelle.rifts.death)},e=>{delete e.newGame},Dm.moveTS33,e=>{const t=["antimatterDims","infinityDims","timeDims","replicantiUpgrades","dilationUpgrades","blackHolePower","realityUpgrades","imaginaryUpgrades"];for(const i of t){if(void 0!==e.auto[i].all)continue;const t=e.auto[i];delete e.auto[i],e.auto[i]={all:t,isActive:!0}}},e=>{e.celestials.ra.petWithRemembrance=e.celestials.ra.petWithRecollection,delete e.celestials.ra.petWithRecollection},e=>{for(const a of Object.keys(e.reality.automator.scripts)){const t=e.reality.automator.scripts[a].content.split("\n");for(let i=0;i{delete e.celestials.pelle.armageddonDuration,delete e.celestials.pelle.maxAMThisArmageddon,delete e.options.sidebarMinimized,delete e.options.chart,delete e.devMode},e=>{const t=4&e.achievementBits[10],i=8&e.achievementBits[11];t?e.achievementBits[11]|=8:e.achievementBits[11]&=-9,i?e.achievementBits[10]|=4:e.achievementBits[10]&=-5},e=>{var t,i;"Modern"==e.options.UIType?e.options.themeModern=null!==(t=e.options.theme)&&void 0!==t?t:e.options.themeModern:e.options.themeClassic=null!==(i=e.options.theme)&&void 0!==i?i:e.options.themeClassic;delete e.options.theme,BlackHole(1).isUnlocked&&(e.records.timePlayedAtBHUnlock=e.records.totalTimePlayed)},e=>{e.IAP.enabled=!e.IAP.disabled;const t=["totalSTD","spentSTD","exportSTD","IPPurchases","EPPurchases","RMPurchases","dimPurchases","allDimPurchases","replicantiPurchases","dilatedTimePurchases","disabled"];for(const i of t)delete e.IAP[i]},e=>{const t=e.reality.glyphs.active.concat(e.reality.glyphs.inventory);for(const i of t)"key266b"===i.symbol&&(i.symbol=void 0,i.color=void 0,i.cosmetic="music"),"companion"===i.type&&(i.color=void 0)},e=>{e.options.lightGlyphs=!e.options.forceDarkGlyphs,delete e.options.forceDarkGlyphs},e=>{e.reality.warped=!1,e.records.realTimeDoomed>1e308&&(e.records.realTimeDoomed=1e308),e.records.realTimePlayed>1e308&&(e.records.realTimePlayed=1e308),e.records.totalTimePlayed>1e308&&(e.records.totalTimePlayed=1e308),e.records.thisInfinity.realTime>1e308&&(e.records.thisInfinity.realTime=1e308),e.records.thisInfinity.time>1e308&&(e.records.thisInfinity.time=1e308),e.records.thisEternity.realTime>1e308&&(e.records.thisEternity.realTime=1e308),e.records.thisEternity.time>1e308&&(e.records.thisEternity.time=1e308),e.records.thisReality.realTime>1e308&&(e.records.thisReality.realTime=1e308),e.records.thisReality.time>1e308&&(e.records.thisReality.time=1e308),e.records.thisMend.realTime>1e308&&(e.records.thisMend.realTime=1e308),e.records.thisMend.time>1e308&&(e.records.thisMend.time=1e308)},e=>{PlayerProgress.mendingUnlocked||(e.auto.dilationUpgrades.all[11]={isActive:!1,lastTick:0},e.auto.dilationUpgrades.all[12]={isActive:!1,lastTick:0},e.auto.dilationUpgrades.all[13]={isActive:!1,lastTick:0},e.requirementChecks.mending={isEnd:!1},e.records.thisMend={time:Number.MAX_VALUE,realTime:Number.MAX_VALUE,maxAM:b.D0,maxIP:b.D0,maxEP:b.D0,maxRM:b.D0,maxiM:0,maxRem:0},e.records.bestMend={time:Number.MAX_VALUE,realTime:Number.MAX_VALUE},e.speedrun.isUnlocked=!0,e.mends=b.D0,e.mending={mendingPoints:b.D0,upgradeBits:0,reqLock:{mending:0},rebuyables:{1:0,6:0,11:0,16:0}},e.celestials.destroyer={quoteBits:0},e.celestials.kohler={quoteBits:0},e.options.confirmations.mending=!0,e.options.awayProgress={mends:!0,mendingPoints:!0},e.mendingPoints=b.D0,e.mends=b.D0,e.mendingUpgrades=new Set,e.mvrmultUpgrades=0,e.options.hiddenTabBits=0,e.mendingPoints=e.mending.mendingPoints,MendingMilestone.three.isReached&&(e.celestials.ra.unlockBits+=2097152),e.auto.dilationUpgrades.all=Array.range(0,3).concat(Array.range(11,14)).map((()=>({isActive:!1,lastTick:0}))),e.mends=new Decimal(e.mends),e.mendingPoints=new Decimal(e.mendingPoints),e.mends.gte(8)&&(e.celestials.teresa.perkShop=[20,20,14,6,0,0]),e.auto.musicglyph={isUnlocked:!1,isActive:!1},e.options.showHintText.mendingUpgrades=!0,e.auto.mending={mode:0,amount:b.D1,interval:100,increaseWithMult:!0,time:1,xHighest:b.D1,isActive:!1,lastTick:0},e.corruptedFragments=b.D0,e.mending.warpRebuyables={1:0,2:0,3:0,4:0,5:0},e.mending.corruptionRebuyables={1:0,2:0,3:0,4:0,5:0},e.mending.warpUpgradeBits=0,e.mending.corruptionUpgradeBits=0,e.mending.warpUpgReqs=0,e.mending.corruptionUpgReqs=0,e.mending.reqLock={mending:0,warp:0,corruption:0},e.records.totalTimePlayed=new Decimal(e.records.totalTimePlayed),e.records.thisInfinity.time=new Decimal(e.records.thisInfinity.time),e.records.thisEternity.time=new Decimal(e.records.thisEternity.time),e.records.thisReality.time=new Decimal(e.records.thisReality.time),e.records.thisMend.time=new Decimal(e.records.thisMend.time))}],patch(e){e.options.testVersion=e.options.testVersion||0;for(let t=e.options.testVersion;t`${formatInt(1)} minute`,interval:60},{id:2,type:Im.ONLINE,intervalStr:()=>`${formatInt(5)} minutes`,interval:300},{id:3,type:Im.ONLINE,intervalStr:()=>`${formatInt(20)} minutes`,interval:1200},{id:4,type:Im.ONLINE,intervalStr:()=>`${formatInt(1)} hour`,interval:3600},{id:5,type:Im.OFFLINE,intervalStr:()=>`${formatInt(10)} minutes`,interval:600},{id:6,type:Im.OFFLINE,intervalStr:()=>`${formatInt(1)} hour`,interval:3600},{id:7,type:Im.OFFLINE,intervalStr:()=>`${formatInt(5)} hours`,interval:18e3},{id:8,type:Im.RESERVE}],Pm={currentSlot:0,saves:{0:void 0,1:void 0,2:void 0},saved:0,lastSaveTime:Date.now(),lastCloudSave:Date.now(),offlineEnabled:void 0,offlineTicks:void 0,lastUpdateOnLoad:0,lastBackupTimes:[],oldBackupTimer:0,ignoreBackupTimer:!0,maxOfflineTicks(e,t=this.offlineTicks){const i=Math.clampMax(Math.floor(e/33),1e6);return Math.clampMax(t,i)},get localStorageKey(){return y?"dimensionTestSave":"dimensionSave"},backupDataKey(e,t){return y?`backupTestSave-${e}-${t}`:`backupSave-${e}-${t}`},backupTimeKey(e){return y?`backupTestTimes-${e}`:`backupTimes-${e}`},load(){const e=localStorage.getItem(this.localStorageKey),t=GameSaveSerializer.deserialize(e);this.loadRoot(t),Achievements.updateSteamStatus()},loadRoot(e){return void 0===e?(this.currentSlot=0,void this.loadPlayerObject(Player.defaultStart)):void 0===e.saves?(this.saves={0:e,1:void 0,2:void 0},this.currentSlot=0,this.loadPlayerObject(e),this.loadBackupTimes(),this.backupOfflineSlots(),void this.save(!0)):(this.saves=e.saves,this.currentSlot=e.current,this.loadPlayerObject(this.saves[this.currentSlot]),this.loadBackupTimes(),void this.backupOfflineSlots())},loadSlot(e){var t;this.currentSlot=e,this.save(!0),this.loadPlayerObject(null!==(t=this.saves[e])&&void 0!==t?t:Player.defaultStart),this.loadBackupTimes(),this.backupOfflineSlots(),Tabs.all.find((e=>e.id===player.options.lastOpenTab)).show(!1),Modal.hideAll(),Cloud.resetTempState(),GameUI.notify.info("Game loaded"),Achievements.updateSteamStatus()},import(e){var t;if(tryImportSecret(e)||Theme.tryUnlock(e))return;const i=GameSaveSerializer.deserialize(e);""===this.checkPlayerObject(i)?(this.oldBackupTimer=player.backupTimer,Modal.hideAll(),Quote.clearAll(),AutomatorBackend.clearEditor(),this.loadPlayerObject(i),GlyphAppearanceHandler.clearInvalidCosmetics(),null!==(t=player.speedrun)&&void 0!==t&&t.isActive&&Speedrun.setSegmented(!0),this.save(!0),Cloud.resetTempState(),this.resetBackupTimer(),Tab.options.subtabs[0].show(),GameUI.notify.info("Game imported"),Achievements.updateSteamStatus()):Modal.message.show("Could not load the save (format unrecognized or invalid).")},importAsFile(){if(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked())return;const e=new FileReader,t=e.readAsText(file);this.import(t)},overwriteSlot(e,t){this.saves[e]=t,e===this.currentSlot&&this.loadPlayerObject(t),this.save(!0)},checkPlayerObject(e){if(void 0===e||null===e)return"Save decoding failed (invalid format)";if(void 0===e.money&&void 0===e.antimatter)return"Save does not have antimatter property";const t=[];function i(e,a){let n=!1;for(const s in e){const r=e[s];let o;switch(typeof r){case"object":o=i(r,`${a}.${s}`),n=n||o;break;case"number":o=Number.isNaN(r),n=n||o,o&&t.push(`${a}.${s}`);break;case"string":o="NaN"===r,n=n||o,o&&t.push(`${a}.${s}`);break}}return n}return i(e,"player"),0===t.length?"":`${quantify("NaN player property",t.length)} found:\n ${t.join(", ")}`},canSave(e=!1){const t=GlyphSelection.active,i=void 0!==ui.$viewModel.modal.progressBar&&!e,a=GameEnd.endState>=END_STATE_MARKERS.SAVE_DISABLED&&!GameEnd.removeAdditionalEnd||GameEnd.endState>=END_STATE_MARKERS.INTERACTIVITY_DISABLED;return!a&&!(t||i)},save(e=!0,t=!1){if(!this.canSave())return;this.lastSaveTime=Date.now(),GameIntervals.save.restart(),t&&++this.saved>99&&SecretAchievement(12).unlock();const i={current:this.currentSlot,saves:this.saves};localStorage.setItem(this.localStorageKey,GameSaveSerializer.serialize(i)),e||GameUI.notify.info("Game saved")},saveToBackup(e,t){this.canSave(!0)&&(localStorage.setItem(this.backupDataKey(this.currentSlot,e),GameSaveSerializer.serialize(player)),this.lastBackupTimes[e]={backupTimer:t,date:Date.now()},localStorage.setItem(this.backupTimeKey(this.currentSlot),GameSaveSerializer.serialize(this.lastBackupTimes)))},loadFromBackup(e){const t=localStorage.getItem(this.backupDataKey(this.currentSlot,e));return GameSaveSerializer.deserialize(t)},backupOfflineSlots(){const e=Date.now(),t=e-this.lastUpdateOnLoad,i=xm.filter((e=>e.type===Im.OFFLINE)).sort(((e,t)=>t.interval-e.interval));for(const a of i)if(t>1e3*a.interval){this.saveToBackup(a.id,player.backupTimer);break}},backupOnlineSlots(e){const t=player.backupTimer;for(const i of e)this.saveToBackup(i,t)},loadBackupTimes(){this.lastBackupTimes=GameSaveSerializer.deserialize(localStorage.getItem(this.backupTimeKey(this.currentSlot))),this.lastBackupTimes||(this.lastBackupTimes={});for(const e of xm){const t=e.id;this.lastBackupTimes[t]||(this.lastBackupTimes[t]={backupTimer:0,date:0})}},tryOnlineBackups(){const e=[];for(const a of xm.filter((e=>e.type===Im.ONLINE))){var t,i;const n=a.id,s=player.backupTimer-(null!==(t=null===(i=this.lastBackupTimes[n])||void 0===i?void 0:i.backupTimer)&&void 0!==t?t:0);1e3*a.interval-s<=800&&e.push(n)}this.backupOnlineSlots(e)},resetBackupTimer(){const e=Object.values(this.lastBackupTimes).map((e=>e&&e.backupTimer)).max();player.backupTimer=Math.max(this.oldBackupTimer,player.backupTimer,e)},saveToReserveSlot(){const e=xm.find((e=>e.type===Im.RESERVE)).id;this.saveToBackup(e,player.backupTimer)},export(){copyToClipboard(this.exportModifiedSave()),GameUI.notify.info("Exported current savefile to your clipboard")},get exportDateString(){const e=new Date,t=e.getFullYear(),i=e.getMonth()+1,a=e.getDate();return`${t}-${i}-${a}`},exportAsFile(){if(!this.canSave())return;player.options.exportedFileCount++,this.save(!0);const e=player.options.saveFileName?` - ${player.options.saveFileName},`:"",t=this.exportModifiedSave();Gm(`AD Save, Slot ${Pm.currentSlot+1}${e} #${player.options.exportedFileCount} (${this.exportDateString}).txt`,t),GameUI.notify.info("Successfully downloaded current save file to your computer")},exportBackupsAsFile(){player.options.exportedFileCount++;const e={};for(const t of xm.map((e=>e.id))){const i=this.loadFromBackup(t);i&&(e[t]=i)}e.time=GameSaveSerializer.deserialize(localStorage.getItem(this.backupTimeKey(this.currentSlot))),Gm(`AD Save Backups, Slot ${Pm.currentSlot+1} #${player.options.exportedFileCount} (${this.exportDateString}).txt`,GameSaveSerializer.serialize(e)),GameUI.notify.info("Successfully downloaded save file backups to your computer")},importBackupsFromFile(e){const t=GameSaveSerializer.deserialize(e);localStorage.setItem(this.backupTimeKey(this.currentSlot),GameSaveSerializer.serialize(t.time));for(const i of Object.keys(t)){if("time"===i)continue;const e=Number(i),a=this.backupDataKey(this.currentSlot,e);localStorage.setItem(a,GameSaveSerializer.serialize(t[i])),this.backupTimeData[e]={backupTimer:t.time[e].backupTimer,date:t.time[e].date}}this.resetBackupTimer(),GameUI.notify.info("Successfully imported save file backups from file")},exportModifiedSave(){const e=player.speedrun.isSegmented;Speedrun.setSegmented(!0);const t=GameSaveSerializer.serialize(player);return Speedrun.setSegmented(e),t},hardReset(){this.loadPlayerObject(Player.defaultStart),this.save(!0),Tab.dimensions.antimatter.show(),Cloud.resetTempState()},loadPlayerObject(e){var t,i;this.saved=0;const a=this.checkPlayerObject(e);if(e===Player.defaultStart||""!==a)y&&""!==a&&console.log(`Savefile was invalid and has been reset - ${a}`),player=sl([{},Player.defaultStart]),player.records.gameCreatedTime=Date.now(),player.lastUpdate=Date.now(),y&&Mm.setLatestTestVersion(player);else{const t=e.version3e5&&player.celestials.enslaved.autoStoreReal&&(e=Enslaved.autoStoreRealTime(e)),e>1e4?simulateTime(e/1e3,!1,e<5e4):this.postLoadStuff()}else Speedrun.isPausedAtStart()||Achievement(35).tryUnlock(),player.lastUpdate=Date.now(),this.postLoadStuff();n>12096e5&&(["S4","S9"].includes(Theme.current().name)&&Theme.set("Normal"),setTimeout((()=>{Notations.current.isPainful&&Notation.mixedScientific.setAsCurrent()}),2500),setTimeout((()=>Modal.catchup.show(n)),5e3))},postLoadStuff(){GameIntervals.restart(),Pm.ignoreBackupTimer=!1,Enslaved.nextTickDiff=player.options.updateRate,player.celestials.enslaved.storedReal>864e5&&SecretAchievement(46).unlock(),GameUI.update();for(const e of AlchemyResources.all)e.before=e.amount;document.addEventListener("mouseup",(e=>{0==e.button&&(player.celestials.laitela.isHoldingLClick=!1)}))}};function Gm(e,t){const i=document.createElement("a");if(i.setAttribute("href",`data:text/plain;charset=utf-8,${encodeURIComponent(t)}`),i.setAttribute("download",e),document.createEvent){const e=document.createEvent("MouseEvents");e.initEvent("click",!0,!0),i.dispatchEvent(e)}else i.click()}var Um=i(5520),Bm=i(7663),Nm=i(5503),Om=i(3434);i(8264);const Lm="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function Fm(e){const t=Lm.indexOf(e.charAt(e.length-1));return 64===t?e.substring(0,e.length-1):e}function $m(e,t){e=Fm(e),e=Fm(e);const i=parseInt(e.length/4*3,10);let a,n,s,r,o,l,c,u,d=0,h=0;for(a=t?new Uint8Array(t):new Uint8Array(i),e=e.replace(/(?:(?![\+\/-9=A-Za-z])[\s\S])/g,""),d=0;d>4,s=(15&l)<<4|c>>2,r=(3&c)<<6|u,a[d]=n,64!==c&&(a[d+1]=s),64!==u&&(a[d+2]=r);return a}const Hm={apiKey:null,authDomain:null,databaseURL:null,projectId:null,storageBucket:null,messagingSenderId:null,appId:null};class qm extends A{get id(){return this.config.id}get name(){return this.config.name}get suggestedResource(){return"function"===typeof this.config.suggestedResource?this.config.suggestedResource():this.config.suggestedResource}}const Vm=qm.createAccessor(GameDatabase.progressStages);Vm.all=GameDatabase.progressStages;class Ym extends A{get requiredStage(){return this.config.requiredStage}get name(){return this.config.name}get description(){return"function"===typeof this.config.description?this.config.description():this.config.description}}const Wm=mapGameDataToObject(GameDatabase.catchupResources,(e=>new Ym(e))),jm={getProgressStage(e){const t=Vm.all;for(let i=t.length-1;i>=0;i--)if(t[i].hasReached(e))return t[i];throw Error("No valid progress stage found")},getCompositeProgress(e){if(!e)return 0;const t=this.getProgressStage(e);return t.id+Math.clampMax(t.subProgressValue(e),1)},compareSaveProgress(e,t){const i=this.getCompositeProgress(e)-this.getCompositeProgress(t);return i>.05?-1:i<-.05?1:0},compareSaveTimes(e,t){var i,a;if(!e||!t)return 0;const n=(null===(i=e.records)||void 0===i?void 0:i.realTimePlayed)-(null===(a=t.records)||void 0===a?void 0:a.realTimePlayed);return n>=0?-1:1}},Xm=null!==Hm.apiKey;Xm&&(0,Nm.ZF)(Hm);const zm={provider:Xm?new Um.hJ:null,auth:Xm?(0,Um.v0)():null,db:Xm?(0,Bm.N8)():null,user:null,lastCloudHash:null,get isAvailable(){return Xm},resetTempState(){this.lastCloudHash=null,GameStorage.lastCloudSave=Date.now(),GameIntervals.checkCloudSave.restart()},get loggedIn(){return null!==this.user},async login(){if(this.isAvailable)try{await(0,Um.rh)(this.auth,this.provider),ShopPurchaseData.syncSTD(),player.options.hideGoogleName?GameUI.notify.success("Successfully logged in to Google Account"):GameUI.notify.success(`Successfully logged in as ${this.user.displayName}`),ShopPurchaseData.isIAPEnabled&&Speedrun.setSTDUse(!0)}catch(e){GameUI.notify.error("Google Account login failed")}},async loginWithSteam(e,t,i){if(!this.isAvailable)return;if(this.loggedIn)return void(zm.user.displayName=i);const a=`${e}@ad.com`,n=t;let s;await(0,Um.e5)(this.auth,a,n).catch((()=>(0,Um.Xb)(this.auth,a,n))).catch((e=>s=e)),void 0===s?zm.user.displayName=i:console.log(`Firebase Login Error: ${s}`)},async loadMobile(){if(!this.user)return;const e=await(0,Bm.U2)((0,Bm.iH)(this.db,`users/${this.user.id}/player`));if(e.exists){const t=e.val(),i=$m(t.replace(/\x2D/g,"+").replace(/_/g,"/"));Am.ZP.ungzip(i,{to:"string"})}},compareSaves(e,t,i){try{return{farther:jm.compareSaveProgress(e,t),older:jm.compareSaveTimes(e,t),differentName:(null===e||void 0===e?void 0:e.options.saveFileName)!==(null===t||void 0===t?void 0:t.options.saveFileName),hashMismatch:this.lastCloudHash&&this.lastCloudHash!==i}}catch(a){return null}},async saveCheck(e=!1){if(!this.isAvailable)return;const t=GameStorage.currentSlot,i=await this.load();if(null===i)this.save();else{const a=(0,Om.sha512_256)(GameSaveSerializer.serialize(i));this.lastCloudHash||(this.lastCloudHash=a);const n=GameStorage.saves[t],s=this.compareSaves(i,n,a),r=()=>this.save();if(!s)return Modal.addCloudConflict(t,s,i,n,r),void Modal.cloudInvalidData.show({isSaving:!0});const o=i&&n,l=o&&s&&(-1===s.older||-1===s.farther||s.differentName||s.hashMismatch);e||l&&player.options.showCloudModal?(Modal.addCloudConflict(t,s,i,n,r),Modal.cloudSaveConflict.show()):l&&!player.options.forceCloudOverwrite||r()}},save(){if(!this.user)return;if(GlyphSelection.active||void 0!==ui.$viewModel.modal.progressBar)return;player.options.syncSaveIntervals&&GameStorage.save();const e=GameSaveSerializer.serialize(GameStorage.saves[GameStorage.currentSlot]);this.lastCloudHash=(0,Om.sha512_256)(e),GameStorage.lastCloudSave=Date.now(),GameIntervals.checkCloudSave.restart();const t=GameStorage.currentSlot;this.writeToCloudDB(t,e),f?GameUI.notify.info(`Game saved (slot ${t+1}) to cloud as user ${this.user.displayName}`):player.options.hideGoogleName?GameUI.notify.info(`Game saved (slot ${t+1}) to cloud`):GameUI.notify.info(`Game saved (slot ${t+1}) to cloud as user ${this.user.displayName}`)},async loadCheck(){if(!this.isAvailable)return;const e=await this.load();if(null===e)player.options.hideGoogleName?GameUI.notify.info("No cloud save for current Google Account"):GameUI.notify.info(`No cloud save for user ${this.user.displayName}`);else{const t=e,i=GameStorage.currentSlot,a=GameStorage.saves[i],n=this.compareSaves(t,a),s=()=>{GameStorage.overwriteSlot(i,t),f?GameUI.notify.info("Cloud save loaded"):player.options.hideGoogleName?GameUI.notify.info(`Cloud save (slot ${i+1}) loaded`):GameUI.notify.info(`Cloud save (slot ${i+1}) loaded for user ${this.user.displayName}`)};if(!n)return Modal.addCloudConflict(i,n,t,a,s),void Modal.cloudInvalidData.show({isSaving:!1});const r=t&&a,o=r&&(1===n.older||-1!==n.farther||n.differentName);o?(Modal.addCloudConflict(i,n,t,a,s),Modal.cloudLoadConflict.show()):s()}},async load(){let e=await this.readFromCloudDB(GameStorage.currentSlot);return e.exists()?GameSaveSerializer.deserialize(e.val()):(await this.separateSaveSlots(),e=await this.readFromCloudDB(GameStorage.currentSlot),e.exists()?GameSaveSerializer.deserialize(e.val()):null)},async separateSaveSlots(){const e=await this.readFromCloudDB(null);if(!e.exists())return;const t=GameSaveSerializer.deserialize(e.val());if(t)for(const i of Object.keys(t.saves)){const e=GameSaveSerializer.serialize(t.saves[i]);await this.writeToCloudDB(Number(i),e)}},readFromCloudDB(e){const t=null===e?"":`/${e}`;return(0,Bm.U2)((0,Bm.iH)(this.db,`users/${this.user.id}/web${t}`))},writeToCloudDB(e,t){const i=null===e?"":`/${e}`;return(0,Bm.t8)((0,Bm.iH)(this.db,`users/${this.user.id}/web${i}`),t)},logout(){this.isAvailable&&((0,Um.w7)(this.auth),ShopPurchaseData.clearLocalSTD())},init(){this.isAvailable&&(0,Um.v0)().onAuthStateChanged((e=>{e?(this.user={id:e.uid,displayName:f?Rc.screenName:e.displayName,email:e.email},f||ShopPurchaseData.syncSTD()):this.user=null}))}},Km=/((CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(10[_.]3|10[_.]([4-9]|\d{2,})|(1[1-9]|[2-9]\d|\d{3,})[_.]\d+|12[_.]2|12[_.]([3-9]|\d{2,})|12[_.]5|12[_.]([6-9]|\d{2,})|(1[3-9]|[2-9]\d|\d{3,})[_.]\d+|13[_.]3|13[_.]([4-9]|\d{2,})|13[_.]7|13[_.]([8-9]|\d{2,})|(1[4-9]|[2-9]\d|\d{3,})[_.]\d+|14[_.]0|14[_.]([1-9]|\d{2,})|14[_.]4|14[_.]([5-9]|\d{2,})|14[_.]8|14[_.](9|\d{2,})|(1[5-9]|[2-9]\d|\d{3,})[_.]\d+|15[_.]0|15[_.]([1-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})[_.]\d+)(?:[_.]\d+)?)|(CFNetwork\/8.* Darwin\/16\.5\.\d+)|(CFNetwork\/8.* Darwin\/16\.6\.\d+)|(CFNetwork\/8.* Darwin\/16\.7\.\d+)|((?:Chrome).*OPR\/(79\.0|79\.([1-9]|\d{2,})|([8-9]\d|\d{3,})\.\d+)\.\d+)|(SamsungBrowser\/(13\.0|13\.([1-9]|\d{2,})|(1[4-9]|[2-9]\d|\d{3,})\.\d+))|(Edge\/(93(?:\.0)?|93(?:\.([1-9]|\d{2,}))?|(9[4-9]|\d{3,})(?:\.\d+)?))|((Chromium|Chrome)\/(79\.0|79\.([1-9]|\d{2,})|([8-9]\d|\d{3,})\.\d+|85\.0|85\.([1-9]|\d{2,})|(8[6-9]|9\d|\d{3,})\.\d+|89\.0|89\.([1-9]|\d{2,})|(9\d|\d{3,})\.\d+)(?:\.\d+)?)|(Version\/(13\.1|13\.([2-9]|\d{2,})|(1[4-9]|[2-9]\d|\d{3,})\.\d+|14\.0|14\.([1-9]|\d{2,})|(1[5-9]|[2-9]\d|\d{3,})\.\d+|15\.0|15\.([1-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)(?:\.\d+)? Safari\/)|(Firefox\/(78\.0|78\.([1-9]|\d{2,})|(79|[8-9]\d|\d{3,})\.\d+|92\.0|92\.([1-9]|\d{2,})|(9[3-9]|\d{3,})\.\d+)\.\d+)|(Firefox\/(78\.0|78\.([1-9]|\d{2,})|(79|[8-9]\d|\d{3,})\.\d+|92\.0|92\.([1-9]|\d{2,})|(9[3-9]|\d{3,})\.\d+)(pre|[ab]\d+[a-z]*)?)/,Zm={interval:null,windowReference:null,hasCanceled:!1,init:()=>{player.IAP.checkoutSession.id&&Zm.pollForPurchases()},buyMoreSTD:async e=>{let t;player.IAP.checkoutSession={id:!0};try{t=await fetch(`${STD_BACKEND_URL}/purchase`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({amount:e,cloudID:Cloud.user.id})})}catch(a){return void GameUI.notify.error("Could not contact payment server!",1e4)}const i=await t.json();Zm.windowReference=window.open(i.url,"antimatterDimensionsPurchase","popup,width=500,height=500,left=100,top=100"),player.IAP.checkoutSession={id:i.id,amount:e},GameStorage.save(),Zm.pollForPurchases()},pollForPurchases:()=>{const{id:e,amount:t}=player.IAP.checkoutSession;let i=0;window.onbeforeunload=async()=>{var e;Zm.interval&&(null===(e=Zm.windowReference)||void 0===e||e.close(),await Zm.cancelPurchase(!1))},Zm.interval=setInterval((async()=>{var a;let n;i++;try{n=await fetch(`${STD_BACKEND_URL}/validate?sessionId=${e}`)}catch(c){return GameUI.notify.error("Could not contact payment server!",1e4),void Zm.clearInterval()}const{completed:s,failure:r}=await n.json();var o,l;s&&(null===(o=Zm.windowReference)||void 0===o||o.close(),await ShopPurchaseData.syncSTD(),GameUI.notify.success(`Purchase of ${t} STDs was successful, thank you for your support! ❤️`,1e4),Zm.clearInterval(),player.IAP.checkoutSession={id:!1},GameStorage.save(),Modal.hide());if(r)return null===(l=Zm.windowReference)||void 0===l||l.close(),Zm.clearInterval(),GameUI.notify.error("Purchase failed!",1e4),player.IAP.checkoutSession={id:!1},void GameStorage.save();!s&&(null!==(a=Zm.windowReference)&&void 0!==a&&a.closed||i>=600)&&await Zm.cancelPurchase(!0)}),3e3)},async buyUpgrade(e,t){var i;if(!Cloud.loggedIn)return!1;let a;try{a=await fetch(`${STD_BACKEND_URL}/upgrade`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:Cloud.user.id,upgrade:e,extraData:{requestedSet:t,fullCompletions:player.records.fullGameCompletions}})})}catch(s){return GameUI.notify.error("Unable to spend STD coins on upgrade!",1e4),!1}const n=await a.json();return n.success?GameUI.notify.info(`Successfully spent ${n.amountSpent} STD coins`,1e4):GameUI.notify.error(null!==(i=n.error)&&void 0!==i?i:"Unable to purchase upgrade",1e4),ShopPurchaseData.syncSTD(!1,n.data),n.success},async cancelPurchase(e){var t;if(!this.hasCanceled){null===(t=Zm.windowReference)||void 0===t||t.close(),Zm.clearInterval();try{await fetch(`${STD_BACKEND_URL}/expire`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:player.IAP.checkoutSession.id})})}catch(i){GameUI.notify.error("Could not contact payment server!",1e4)}e&&GameUI.notify.error("Purchase took too long to resolve!",1e4),player.IAP.checkoutSession={id:!1},GameStorage.save(),this.hasCanceled=!1}},clearInterval(){clearInterval(Zm.interval),window.onbeforeunload=null}},Qm=Zm;function Jm(e){const t=2===e.allowedDimPathCount&&e.currDimPathCount<2;return!!(t&&TimeStudy.preferredPaths.dimension.path.length<2)&&(GameUI.notify.error("You haven't selected a second preferred Dimension path."),!0)}function ep(e,t=-1){let i=[];const a=10*Math.floor(e/10)-1,n=TimeStudy(e).path,s=GameCache.currentStudyTree.value,r=(e,t)=>[...Array(Math.clampMin(t-e+1,0)).keys()].map((t=>t+e)),o=!Perk.studyECRequirement.isBought;if(i.push(e),i.push(...r(11,Math.min(a,70))),i.push(e),e<71)return i;if(e<111)return i.push(...NormalTimeStudies.paths[n].filter((t=>t<=e))),i;if(11===t&&o)i.push(...NormalTimeStudies.paths[TIME_STUDY_PATH.ANTIMATTER_DIM].filter((t=>t<=e)));else if(12===t&&o)i.push(...NormalTimeStudies.paths[TIME_STUDY_PATH.TIME_DIM].filter((t=>t<=e)));else if(s.currDimPathCount===s.allowedDimPathCount||3===s.allowedDimPathCount)i.push(...TimeStudy.preferredPaths.dimension.studies),i.push(...r(71,103));else if(TimeStudy.preferredPaths.dimension.path.length>0)i.push(...TimeStudy.preferredPaths.dimension.studies);else if(0===s.currDimPathCount)return GameUI.notify.error("You haven't selected a preferred Dimension path."),i;e>=111&&i.push(111);const l=Jm(s);if(e<121)return i;if(e<151)return i.push(...NormalTimeStudies.paths[TimeStudy(e).path].filter((t=>t<=e))),i;const c=s.pacePaths.map((e=>NormalTimeStudies.pathList.find((t=>t.name===e)).path));if(V.isFullyCompleted&&!Pelle.isDoomed){const e=NormalTimeStudies.paths[TIME_STUDY_PATH.ACTIVE].concat(NormalTimeStudies.paths[TIME_STUDY_PATH.PASSIVE]).concat(NormalTimeStudies.paths[TIME_STUDY_PATH.IDLE]);i.push(...e)}else if(1===c.length)i.push(...NormalTimeStudies.paths[c[0]]);else if(0!==TimeStudy.preferredPaths.pace.path)i.push(...TimeStudy.preferredPaths.pace.studies);else if(0===c.length)return GameUI.notify.error("You haven't selected a preferred Pace path."),i;return i.push(...r(151,Math.min(e,201))),e<201?i:((!o||11!==t&&12!==t)&&(TimeStudyTree.commitToGameState(i),i=[],TimeStudy.preferredPaths.dimension.path.length>0&&(i.push(...TimeStudy.preferredPaths.dimension.studies),TimeStudyTree.commitToGameState(i),i=[]),l||Jm(GameCache.currentStudyTree.value),i.push(...r(211,Math.min(a,214))),i.push(e)),e<221||!V.isFullyCompleted||i.push(...r(221,Math.max(e,234))),i)}function tp(e){for(const i of TimeStudy.boughtNormalTS())i.refund();player.timestudy.studies=[],GameCache.timeStudies.invalidate(),player.celestials.v.STSpent=0;const t=TimeStudy.eternityChallenge.current();void 0!==t&&(t.refund(),player.challenge.eternity.unlocked=0),e||Tab.eternity.studies.show(),GameCache.currentStudyTree.invalidate()}class ip extends A{constructor(e,t){super(e),this.type=t}get cost(){return player.mending.corruptionChallenge.corruptedMend?this.config.cost*ye.soF.ttcost[player.mending.corruption[9]]:this.config.cost}get STCost(){let e=this.config.STCost;return WarpUpgrade(8).isBought&&this.config.id>400&&this.config.id<500&&(e-=50),VUnlocks.raUnlock.canBeApplied?e-2:e}refund(){Currency.timeTheorems.add(this.cost)}get isAffordable(){return(!player.mending.corruptionChallenge.corruptedMend||!(player.mending.corruption[5]>=6||ye.soF.hiddenThree[player.mending.corruption[9]])||3!=this.type)&&Currency.timeTheorems.gte(this.cost)}get canBeBought(){return!0}}const ap={};ap.pathList=[{path:TIME_STUDY_PATH.ANTIMATTER_DIM,studies:[71,81,91,101],name:"Antimatter Dims"},{path:TIME_STUDY_PATH.INFINITY_DIM,studies:[72,82,92,102],name:"Infinity Dims"},{path:TIME_STUDY_PATH.TIME_DIM,studies:[73,83,93,103],name:"Time Dims"},{path:TIME_STUDY_PATH.ACTIVE,studies:[121,131,141],name:"Active"},{path:TIME_STUDY_PATH.PASSIVE,studies:[122,132,142],name:"Passive"},{path:TIME_STUDY_PATH.IDLE,studies:[123,133,143],name:"Idle"},{path:TIME_STUDY_PATH.LIGHT,studies:[221,223,225,227,231,233],name:"Light"},{path:TIME_STUDY_PATH.DARK,studies:[222,224,226,228,232,234],name:"Dark"}],ap.paths=ap.pathList.mapToObject((e=>e.path),(e=>e.studies));class np extends ip{constructor(e){var t;let i=-1;switch(!0){case e.id>500:i=TIME_STUDY_TYPE.KOHLER_EXCLUSIVE;break;case e.id>400:i=TIME_STUDY_TYPE.MYRIAD;break;case e.id>300:i=TIME_STUDY_TYPE.TRIAD;break;default:i=TIME_STUDY_TYPE.NORMAL;break}const a=i;super(e,a);const n=ap.pathList.find((e=>e.studies.includes(this.id)));this._path=null!==(t=null===n||void 0===n?void 0:n.path)&&void 0!==t?t:TIME_STUDY_PATH.NONE}get isUnlocked(){var e,t,i;return null===(e=null===(t=(i=this.config).unlocked)||void 0===t?void 0:t.call(i))||void 0===e||e}get isTriad(){return this.id>300&&this.id<400}get isMyriad(){return this.id>400&&this.id<500}get isBought(){return GameCache.timeStudies.value[this.id]}costsST(){return void 0!==this.config.requiresST&&this.config.requiresST.includes("reality")?this.config.requiresST&&sp.reality.isBought:this.config.requiresST&&this.config.requiresST.some((e=>sp(e).isBought))}checkRequirement(){const e=e=>"number"===typeof e?sp(e).isBought:e(),t=GameCache.currentStudyTree.value;switch(this.config.reqType){case TS_REQUIREMENT_TYPE.AT_LEAST_ONE:return this.config.requirement.some((t=>e(t)));case TS_REQUIREMENT_TYPE.ALL:return this.config.requirement.every((t=>e(t)));case TS_REQUIREMENT_TYPE.DIMENSION_PATH:return this.config.requirement.every((t=>e(t)))&&t&&t.currDimPathCount=this.STCost}get canBeBought(){return this.checkRequirement()&&this.checkSetRequirement()}get isEffectActive(){return this.isBought}purchase(e=!1){return!(this.isBought||!this.isAffordable||!this.canBeBought)&&(!(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked())&&(ImaginaryUpgrade(19).isLockingMechanics&&8===player.timestudy.studies.length?(e||ImaginaryUpgrade(19).tryShowWarningModal(),!1):(this.costsST()&&(player.celestials.v.STSpent+=this.STCost),player.timestudy.studies.push(this.id),player.requirementChecks.reality.maxStudies=Math.clampMin(player.requirementChecks.reality.maxStudies,player.timestudy.studies.length),this.id>300&&this.id<400&&(player.requirementChecks.reality.noTriads=!1),305==this.id&&(player.requirementChecks.reality.noTriad305=!1),307==this.id&&(player.requirementChecks.reality.noTriad307=!1),Currency.timeTheorems.subtract(this.cost),GameCache.timeStudies.invalidate(),TimeStudyTree.commitToGameState([sp(this.id)]),181===this.id&&Pelle.isDoomed&&Achievement(186).unlock(),!0)))}purchaseUntil(){TimeStudyTree.commitToGameState(buyStudiesUntil(this.id))}get path(){return this._path}}function sp(e){return np.studies[e]}if(np.studies=mapGameData(GameDatabase.eternity.timeStudies.normal,(e=>new np(e))),np.all=np.studies.filter((e=>void 0!==e)),sp.boughtNormalTS=function(){return player.timestudy.studies.map((e=>sp(e)))},sp.preferredPaths={dimension:{get path(){return player.timestudy.preferredPaths[0]},set path(e){const t=[1,2,3];player.timestudy.preferredPaths[0]=e.filter((e=>t.includes(e)))},get studies(){return player.timestudy.preferredPaths[0].flatMap((e=>ap.paths[e]))},get usePriority(){return this.path.length>1||sp(201).isBought||DilationUpgrade.timeStudySplit.isBought||PlayerProgress.realityUnlocked()}},pace:{get path(){return player.timestudy.preferredPaths[1]},set path(e){const t=[4,5,6];player.timestudy.preferredPaths[1]=t.includes(e)?e:0},get studies(){return ap.paths[player.timestudy.preferredPaths[1]]}}},GlobalErrorHandler.handled)throw new Error("Initialization failed");function rp(){const e=new Set(["timeMult","dimMult","timeMult2","skipReset1","skipReset2","unspentBonus","27Mult","18Mult","36Mult","resetMult","skipReset3","passiveGen","45Mult","resetBoost","galaxyBoost","skipResetGalaxy","ipOffline"]),t=new Set(["timeMult","dimMult","timeMult2","skipReset1","skipReset2","unspentBonus","27Mult","18Mult","36Mult","resetMult","skipReset3","passiveGen","45Mult","resetBoost","galaxyBoost","skipResetGalaxy","totalMult","currentMult","postGalaxy","challengeMult","achievementMult","infinitiedMult","infinitiedGeneration","autoBuyerUpgrade","autobuyMaxDimboosts","ipOffline"]);if(PelleUpgrade.keepBreakInfinityUpgrades.canBeApplied)player.infinityUpgrades=new Set([...player.infinityUpgrades].filter((e=>t.has(e))));else{if(PelleUpgrade.keepInfinityUpgrades.canBeApplied)return player.infinityUpgrades=new Set([...player.infinityUpgrades].filter((t=>e.has(t)))),player.infinityRebuyables=[0,0,0],GameCache.tickSpeedMultDecrease.invalidate(),void GameCache.dimensionMultDecrease.invalidate();RealityUpgrade(10).isBought||EternityMilestone.keepBreakUpgrades.isReached||pl(2).isBought?(player.infinityUpgrades=t,player.infinityRebuyables=[8,7,10]):EternityMilestone.keepInfinityUpgrades.isReached?(player.infinityUpgrades=e,player.infinityRebuyables=[0,0,0]):(player.infinityUpgrades.clear(),player.infinityRebuyables=[0,0,0]),Pelle.isDoomed&&(player.infinityUpgrades.clear(),player.infinityRebuyables=[0,0,0]),GameCache.tickSpeedMultDecrease.invalidate(),GameCache.dimensionMultDecrease.invalidate()}}function op(){if(Autobuyer.bigCrunch.hasMaxedInterval&&!InfinityChallenge.isRunning){for(const e of Autobuyers.all)void 0!==e.data.interval&&e.maxIntervalForFree();Achievement(61).tryUnlock(),player.break=!player.break,TabNotification.ICUnlock.tryTrigger(),EventHub.dispatch(player.break?GAME_EVENT.BREAK_INFINITY:GAME_EVENT.FIX_INFINITY),GameUI.update()}}function lp(e=!1){const t=Effects.min(308,Achievement(103),sp(111));if(Pelle.isDisabled("IPMults")){let e=hK.one.isReached?1e20:1;return Decimal.pow10(player.records.thisInfinity.maxAM.log10()/t-.75).timesEffectsOf(PelleRifts.vacuum).times(Pelle.specialGlyphEffect.infinity).times(e).floor()}let i=player.break?Decimal.pow10(player.records.thisInfinity.maxAM.log10()/t-.75):new Decimal(308/t);if(hK.one.isReached&&(i=i.times(1e20)),UZ.unlocks.realityMachinesBoostIpAndEpGain.isUnlocked&&(i=Decimal.pow(i,Decimal.log10(Mi.realityMachines.value.max(1))/100)),Effarig.isRunning&&Effarig.currentStage===EFFARIG_STAGES.ETERNITY&&(i=i.min(b.E200)),i=i.times(GameCache.totalIPMult.value),Teresa.isRunning?i=i.pow(.55):V.isRunning?i=i.pow(.5):V.isSuperRunning?i=i.pow(1e-6):Laitela.isRunning&&(i=dilatedValueOf(i)),GlyphAlteration.isAdded("infinity")&&(i=i.pow(getSecondaryGlyphEffect("infinityIP"))),player.mending.corruptionChallenge.corruptedMend){let e=ye.prestigeLimits[player.mending.corruption[0]];eu(16).isBought&&(e=Math.min(1,2*e)),i=i.pow(e),i=i.pow(ye.timeCompression.hiddenFour[player.mending.corruption[2]]),i=i.pow(ye.repSing.presGain[player.mending.corruption[8]])}return i.gte(Decimal.pow10(9e15))&&!e&&(i=i.div(Decimal.pow10(9e15)),i=i.pow(.0298374651),i=i.times(Decimal.pow10(9e15))),i.floor()}function cp(e=!1){if(!hK.eleven.isReached&&!e)return b.D1;const t=player.requirementChecks.mending.mmeleven;let i=t<=0?3*(3-t):[1,1,2,2,3,4,5,7][8-t];return new Decimal(i)}function up(){let e=player.reality.warped&&!Pelle.isDoomed?Decimal.pow(1e4,Math.log10(player.antimatter.exponent/9e15)):b.D1;return e=e.timesEffectsOf(pl(1),Achievement(192),sp(321),sp(322),sp(323),eu(13),MendingUpgradeMultiplier,UZ.unlocks.boostMVRGain),e=e.times(cp()),UZ.unlocks.mendingPointsGainMult.isUnlocked&&(e=e.times(UZ.totalPetLevel/10).clampMin(1)),e}function dp(){Mi.mendingPoints.subtract(new Decimal(1e7)),Quotes.kohler.postWarp.show(),player.reality.warped=!0}function hp(){return Pelle.isDisabled("EPMults")?UZ.unlocks.unlockPelleGlyphEffects.isUnlocked?Pelle.specialGlyphEffect.time.timesEffectOf(PelleRifts.vacuum.milestones[2]).times(getAdjustedGlyphEffect("timeEP")):Pelle.specialGlyphEffect.time.timesEffectOf(PelleRifts.vacuum.milestones[2]):getAdjustedGlyphEffect("cursedEP").times(ShopPurchase.EPPurchases.currentMult).timesEffectsOf(EternityUpgrade.epMult,sp(61),sp(122),sp(121),sp(123),RealityUpgrade(12),GlyphEffect.epMult)}function mp(e=!1){let t=308-PelleRifts.recursion.effectValue.toNumber();player.timestudy.studies.includes(307)&&(t-=30);let i=b.D5.pow(player.records.thisEternity.maxIP.plus(lp()).log10()/t-.7).times(hp());if(hK.one.isReached&&(i=i.times(1e5)),UZ.unlocks.realityMachinesBoostIpAndEpGain.isUnlocked&&(i=Decimal.pow(i,Decimal.log10(Mi.realityMachines.value)/100)),Teresa.isRunning?i=i.pow(.55):V.isRunning?i=i.pow(.5):V.isSuperRunning?i=i.pow(1e-6):Laitela.isRunning&&(i=dilatedValueOf(i)),GlyphAlteration.isAdded("time")&&(i=i.pow(getSecondaryGlyphEffect("timeEP"))),player.mending.corruptionChallenge.corruptedMend){let e=ye.prestigeLimits[player.mending.corruption[0]];eu(16).isBought&&(e=Math.min(1,2*e)),i=i.pow(e),i=i.pow(ye.repSing.presGain[player.mending.corruption[8]])}return i.gte(Decimal.pow10(1e18))&&!e&&(i=i.div(Decimal.pow10(1e18)),i=i.pow(.162738495),i=i.times(Decimal.pow10(1e18))),i.floor()}function pp(e){return Decimal.pow10(308*(Decimal.log(Decimal.divide(e,hp()),5)+.7)).clampMin(Number.MAX_VALUE)}function yp(){const e=getGlyphLevelInputs();let t=Math.floor(e.rawLevel);isFinite(t)||(t=0);let i=Math.floor(e.actualLevel);return isFinite(i)||(i=0),{rawLevel:t,actualLevel:i}}function fp(){player.chall2Pow=1,player.chall3Pow=b.D0_01,Mi.matter.reset(),player.chall8TotalSacrifice=b.D1,player.postC4Tier=1}function gp(e,t){return Decimal.divide(e,new Decimal(t).div(6e4))}function vp(e,t,i,a){let n="";player.challenge.normal.current&&(n=`Normal Challenge ${player.challenge.normal.current}`),player.challenge.infinity.current&&(n=`Infinity Challenge ${player.challenge.infinity.current}`),player.records.recentInfinities.pop(),player.records.recentInfinities.unshift([e,t,i,a,n]),GameCache.bestRunIPPM.invalidate()}function bp(){player.records.recentInfinities=Array.from({length:10},(()=>[Number.MAX_VALUE,Number.MAX_VALUE,b.D1,b.D1,""])),GameCache.bestRunIPPM.invalidate()}function Ep(e,t){return Autobuyer.bigCrunch.autoInfinitiesAvailable(t)?Decimal.floor(player.records.thisEternity.bestInfinitiesPerMs.times(e).dividedBy(2)):b.D0}function Tp(e,t,i,a){let n="";if(player.challenge.eternity.current){const e=player.challenge.eternity.current,t=EternityChallenge(e),i=player.dilation.active?"Dilated EC":"Eternity Challenge";n=`${i} ${e} (${formatInt(t.completions)}/${formatInt(t.maxCompletions)})`}else player.dilation.active&&(n="Time Dilation");const s=player.dilation.active?getTachyonGain():b.D0;player.records.recentEternities.pop(),player.records.recentEternities.unshift([e,t,i,a,n,s]),GameCache.averageRealTimePerEternity.invalidate()}function wp(){player.records.recentEternities=Array.from({length:10},(()=>[Number.MAX_VALUE,Number.MAX_VALUE,b.D1,b.D1,"",b.D0])),GameCache.averageRealTimePerEternity.invalidate()}function kp(){player.records.recentRealities=Array.from({length:10},(()=>[Number.MAX_VALUE,Number.MAX_VALUE,b.D1,b.D1,"",b.D0])),GameCache.averageRealTimePerEternity.invalidate()}function Cp(e,t){return Autobuyer.eternity.autoEternitiesAvailable(t)?Decimal.floor(player.records.thisReality.bestEternitiesPerMs.times(e).dividedBy(2)):b.D0}function Ap(){return player.options.offlineProgress&&!Autobuyer.bigCrunch.autoInfinitiesAvailable()&&!Autobuyer.eternity.autoEternitiesAvailable()}function _p(e){return EternityMilestone.autoEP.isReached&&Ap()&&!De.isCorrupted?player.records.bestEternity.bestEPminReality.times(TimeSpan.fromMilliseconds(e).totalMinutes.div(4)):b.D0}function Sp(e,t,i,a,n,s,r){let o="";const l=[Teresa,Effarig,Enslaved,V,UZ,Laitela];for(const u of l)u.isRunning&&(o=u.displayName);const c=Effarig.shardsGained;player.records.recentRealities.pop(),player.records.recentRealities.unshift([e,t,i.times(s),n,o,a,c.times(s),r])}function Dp(){if(EternityChallenge(4).isRunning||Pelle.isDisabled("InfinitiedMults"))return UZ.unlocks.unlockPelleGlyphEffects.isUnlocked&&Pelle.isDoomed?new Decimal(getAdjustedGlyphEffect("infinityinfmult")):b.D1;let e=Effects.max(1,Achievement(87)).toDecimal();if(e=e.timesEffectsOf(sp(32),RealityUpgrade(5),RealityUpgrade(7),Achievement(164),UZ.unlocks.continuousTTBoost.effects.infinity),e=e.times(getAdjustedGlyphEffect("infinityinfmult")),e=e.powEffectOf(SingularityMilestone.infinitiedPow),UZ.unlocks.realitiesBoostInfinityAndEternityProduction.isUnlocked){let t=Math.pow(Math.log10(Mi.realities.value)/20,1.111);t>1.5&&(t=1.5+Math.pow(t-1.5,.75)),e=e.pow(t)}return e}function Rp(){GameStorage.save(),location.reload(!0)}GlobalErrorHandler.cleanStart=!0;const Mp={FIXED_SPEED:1,TIME_GLYPH:2,BLACK_HOLE:3,TIME_STORAGE:4,SINGULARITY_MILESTONE:5,NERFS:6,EXPO_BLACK_HOLE:7};function Ip(e,t){let i;if(i=void 0===e?[Mp.FIXED_SPEED,Mp.TIME_GLYPH,Mp.BLACK_HOLE,Mp.TIME_STORAGE,Mp.SINGULARITY_MILESTONE,Mp.NERFS,Mp.EXPO_BLACK_HOLE]:e,i.includes(Mp.FIXED_SPEED)&&EternityChallenge(12).isRunning)return player.mending.corruptionChallenge.corruptedMend?ye.timeCompression.mult[player.mending.corruption[2]].div(1e3):new Decimal(.001);let a=b.D1;if(i.includes(Mp.BLACK_HOLE)){if(BlackHoles.areNegative&&!player.mending.corruptionChallenge.corruptedMend)return a.times(player.blackHoleNegative);if(!BlackHoles.arePaused)for(const e of BlackHoles.list){if(!e.isUnlocked)break;const i=void 0===t?e.isActive:e.id<=t;if(!i)break;a=a.times(Decimal.pow(e.power,BlackHoles.unpauseAccelerationFactor)),a=a.times(VUnlocks.achievementBH.effectOrDefault(1)),a=a.times(VUnlocks.vAchMulti.effectOrDefault(1))}}if(i.includes(Mp.SINGULARITY_MILESTONE)&&(a=a.times(SingularityMilestone.gamespeedFromSingularities.effectOrDefault(1))),i.includes(Mp.TIME_GLYPH)&&(a=a.times(getAdjustedGlyphEffect("timespeed")),a=a.pow(getAdjustedGlyphEffect("effarigblackhole"))),Ine(1).isActive&&!BlackHoles.areNegative&&(a=Decimal.pow(a,Ine(1).power)),Enslaved.isStoringGameTime&&i.includes(Mp.TIME_STORAGE)){const e=UZ.unlocks.autoPulseTime.canBeApplied?.99:1;a=a.times(1-e).add(1)}if(i.includes(Mp.NERFS))if(Effarig.isRunning)a=Effarig.multiplier(a);else if(Laitela.isRunning){const e=Math.clampMax(Time.thisRealityRealTime.totalMinutes.toNumber()/10,1);a=Decimal.pow(a,e)}if(player.celestials.ra.upgrades.has("enslavedUpgrade")&&(a=a.times(player.celestials.enslaved.storedReal)),a=a.times(PelleUpgrade.timeSpeedMult.effectOrDefault(1)),1==player.mending.corruptionChallenge.corruptedMend){let e=ye.timeCompression.power[player.mending.corruption[2]],t=ye.timeCompression.mult[player.mending.corruption[2]];eu(18).isBought&&(e=Math.min(1,e+.01),t=Decimal.pow(t,.1)),a=a.pow(e),a=a.pow(ye.galWeak.hiddenSix[player.mending.corruption[3]]),a=a.times(t)}a=a.times(eu(2).effectOrDefault(1)),a=Decimal.clamp(a,player.mending.corruptionChallenge.corruptedMend||UZ.unlocks.uncapGamespeed.isUnlocked?0:1e-300,UZ.unlocks.uncapGamespeed.isUnlocked?Decimal.pow10(1e300):Decimal.pow10(300));let n=1;while(a.gte(Decimal.pow(xp(),n)))a=a.div(xp()),a=a.pow(Pp()),a=a.times(xp()),n+=1;return a}function xp(e=1){switch(e){case 1:default:return new Decimal(1e308)}}function Pp(e=1){switch(e){case 1:{let e=.4321;return e+=Xw(3).effectOrDefault(0),e}default:return.4321}}function Gp(){const e=Ip();return Enslaved.isAutoReleasing&&Enslaved.canRelease(!0)&&!BlackHoles.areNegative&&!Pelle.isDisabled("blackhole")?Decimal.max(Enslaved.autoReleaseSpeed,e):e}function Up(){let e=Ip();for(const t of ExpoBlackHoles.list){if(!t.isUnlocked)break;e=Decimal.pow(e,1/t.power)}return e}function Bp(e){return UZ.memoryTick(e,!Enslaved.isStoringRealTime),UZ.unlocks.alchSetToCapAndCapIncrease.isUnlocked&&UZ.applyAlchemyReactionsAuto(),AlchemyResource.momentum.isUnlocked&&(player.celestials.ra.momentumTime+=e*Achievement(175).effectOrDefault(1)),DarkMatterDimensions.tick(e),Xie.tick(e),UZ.unlocks.passiveAnnihilationGen.isUnlocked&&(player.celestials.laitela.darkMatterMult+=Laitela.darkMatterMultGain*e/500),!!Enslaved.isStoringRealTime&&(player.records.realTimePlayed+=e,player.records.thisInfinity.realTime+=e,player.records.thisEternity.realTime+=e,player.records.thisReality.realTime+=e,Enslaved.storeRealTime(),Autobuyers.tick(),GameUI.update(),!0)}function Np(e,t={}){var i,a,n;if(PerformanceStats.start("Frame Time"),PerformanceStats.start("Game Update"),EventHub.dispatch(GAME_EVENT.GAME_TICK_BEFORE),Speedrun.isPausedAtStart()||GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked())return void GameUI.update();cl.canMend&&player.requirementChecks.reality.maxGlyphs6e4*(null!==(n=player.testSpeed)&&void 0!==n?n:1))return GameIntervals.gameLoop.stop(),Xp(o/1e3,!0),void Bp(o);if(player.celestials.ra.upgrades.has("enslavedUpgrade")&&(player.celestials.enslaved.storedReal=Enslaved.storedRealTimeCap),Bp(o))return;if(Enslaved.isAutoReleasing&&Enslaved.autoReleaseTick++,Enslaved.autoReleaseTick>=5?(Enslaved.autoReleaseTick=0,Enslaved.useStoredTime(!0),Enslaved.isReleaseTick=!0):Enslaved.isReleaseTick||(Enslaved.nextTickDiff=o),void 0===s&&(s=new Decimal(Enslaved.nextTickDiff)),player.records.realTimePlayed instanceof Decimal)throw new Error("Something fucked up: Real time played is decimal");Autobuyers.tick(),Tutorial.tutorialLoop(),Achievement(165).isUnlocked&&player.celestials.effarig.autoAdjustGlyphWeights&&autoAdjustGlyphWeights(),GameCache.antimatterDimensionCommonMultiplier.invalidate(),GameCache.antimatterDimensionFinalMultipliers.invalidate(),GameCache.infinityDimensionCommonMultiplier.invalidate(),GameCache.timeDimensionCommonMultiplier.invalidate(),GameCache.totalIPMult.invalidate();const l=o,c=EternityChallenge(12).isRunning;if(Enslaved.isReleaseTick||c)c&&(s=new Decimal(s).times(Ip()),Enslaved.currentBlackHoleStoreAmountPerMs=new Decimal(0));else{let e;if(e=void 0===t.blackHoleSpeedup?Ip():t.blackHoleSpeedup,s=new Decimal(s),Enslaved.isStoringGameTime&&!c){const t=Ip(),i=Ip([Mp.FIXED_SPEED,Mp.TIME_GLYPH,Mp.BLACK_HOLE,Mp.SINGULARITY_MILESTONE]),a=UZ.unlocks.improvedStoredTime.effects.gameTimeAmplification.effectOrDefault(1),n=new Decimal(player.celestials.enslaved.stored);let r=new Decimal(player.celestials.enslaved.stored).plus(s.times(i).times(a)),o=new Decimal(Enslaved.timeCap());player.celestials.enslaved.stored=Decimal.min(r,o),Enslaved.currentBlackHoleStoreAmountPerMs=new Decimal(player.celestials.enslaved.stored.sub(n)).div(s),e=t}s=s.times(e)}if(player.celestials.ra.peakGamespeed=Decimal.max(player.celestials.ra.peakGamespeed,Ip()),Enslaved.isReleaseTick=!1,UZ.unlocks.retroactiveTeresaRealityReward.isUnlocked){const e=player.celestials.teresa.bestRunAM;player.celestials.teresa.bestRunAM=player.records.totalAntimatter.sqrt().max(e)}if(UZ.unlocks.unlock3rdBH.isUnlocked&&ExpoBlackHoles.unlock(),UZ.unlocks.rautobuyers.isUnlocked&&!player.celestials.ra.permanentMemories.ra2&&(player.celestials.ra.permanentMemories.ra2=!0),UZ.unlocks.dmdAuto1.isUnlocked&&!player.celestials.ra.permanentMemories.lai50&&(player.celestials.ra.permanentMemories.lai50=!0),UZ.unlocks.dmdAuto2.isUnlocked&&!player.celestials.ra.permanentMemories.lai65&&(player.celestials.ra.permanentMemories.lai65=!0),document.hasFocus()||(player.celestials.laitela.isHoldingLClick=!1),player.celestials.laitela.isHoldingLClick&&Date.now()-player.celestials.laitela.holdStart>=200){const e=DarkMatterDimension(player.celestials.laitela.heldTier);switch(player.celestials.laitela.heldType){case"interval":const t=e.interval<=e.intervalPurchaseCap;t?e.ascend():e.buyInterval();break;case"DM":e.buyPowerDM();break;case"DE":e.buyPowerDE();break;default:throw new Error("Console user who doesn't know what you are doing you are very funny")}}Pelle.isDoomed&&UZ.unlocks.pelleXP.isUnlocked&&(0===GalaxyGenerator.generatedGalaxies&&(player.records.thisReality.remWithoutGG=Mi.remnants.value),player.records.thisReality.remWithoutGG>player.records.bestReality.remWithoutGG&&(player.records.bestReality.remWithoutGG=player.records.thisReality.remWithoutGG)),(!Achievement(188).isUnlocked||PlayerProgress.mendingUnlocked()&&!player.isGameEnd)&&(player.records.realTimeDoomed=Math.min(1e308,player.records.realTimeDoomed+o),player.records.realTimePlayed=Math.min(1e308,player.records.realTimePlayed+o),player.records.thisInfinity.realTime=Math.min(1e308,player.records.thisInfinity.realTime+o),player.records.thisEternity.realTime=Math.min(1e308,player.records.thisEternity.realTime+o),player.records.thisReality.realTime=Math.min(1e308,player.records.thisReality.realTime+o),player.records.thisMend.realTime=Math.min(1e308,player.records.thisMend.realTime+o),player.records.totalTimePlayed=player.records.totalTimePlayed.add(s),player.records.thisInfinity.time=player.records.thisInfinity.time.add(s),Enslaved.isRunning&&Enslaved.feltEternity&&!EternityChallenge(12).isRunning?player.records.thisEternity.time=player.records.thisEternity.time.add(s.times(Mi.eternities.value.clampMax(1e66).add(1))):player.records.thisEternity.time=player.records.thisEternity.time.add(s),player.records.thisReality.time=player.records.thisReality.time.add(s),player.records.thisMend.time=new Decimal(player.records.thisMend.time).add(s)),DeltaTimeState.update(o,s),updateNormalAndInfinityChallenges(s),preProductionGenerateIP(s),Pelle.isDoomed||Lp(),qp(o),Vp(o);const u=Time.unscaledDeltaTime.totalSeconds.times(AlchemyResource.uncountability.effectValue).toNumber();Mi.realities.add(u),Mi.perkPoints.add(u),Perk.autocompleteEC1.canBeApplied&&(player.reality.lastAutoEC+=o),EternityChallenge(12).tryFail(),Achievements._power.invalidate(),TimeDimensions.tick(s),InfinityDimensions.tick(s),AntimatterDimensions.tick(s);const d=Math.clampMin(FreeTickspeed.fromShards(Mi.timeShards.value).newAmount-player.totalTickGained,0);player.totalTickGained+=d,Op(),tryCompleteInfinityChallenges(),EternityChallenges.autoComplete.tick(),replicantiLoop(s),PlayerProgress.dilationUnlocked()&&Mi.dilatedTime.add(getDilationGainPerSecond().times(new Decimal(s).div(1e3))),Yp(),Mi.timeTheorems.add(Wp().times(new Decimal(s).div(1e3))),InfinityDimensions.tryAutoUnlock(),BlackHoles.updatePhases(l),UZ.unlocks.autoUnlockDilation.canBeApplied&&Mi.timeTheorems.max.gte(sp.dilation.totalTimeTheoremRequirement)&&!isInCelestialReality()&&!Pelle.isDoomed&&(Mi.timeTheorems.add(sp.dilation.cost),sp.dilation.purchase(!0)),Fp(),GlyphSelection.active&&GlyphSelection.update(yp());const h=player.dilation.active&&UZ.unlocks.autoTP.canBeApplied,m=!isInCelestialReality()&&UZ.unlocks.unlockDilationStartingTP.canBeApplied;if(!h&&!m||Pelle.isDoomed||rewardTP(),Enslaved.canTickHintTimer&&(player.celestials.enslaved.hintUnlockProgress+=Enslaved.isRunning?o:.4*o,player.celestials.enslaved.hintUnlockProgress>=TimeSpan.fromHours(5).totalMilliseconds.toNumber()&&(EnslavedProgress.hintsUnlocked.giveProgress(),Enslaved.quotes.hintUnlock.show())),UZ.raGainPointLoop(o),$p(o),Achievements.autoAchieveUpdate(s),V.checkForUnlocks(),AutomatorBackend.update(o),Pelle.gameLoop(o),GalaxyGenerator.loop(o),GameEnd.gameLoop(o),Enslaved.canAmplify||(Enslaved.boostReality=!1),GameEnd.endState!e.isPermanentlyHidden&&10!==e.id));e?e.show(!0):[...Tab.dimensions.subtabs].reverse().find((e=>!e.isPermanentlyHidden)).show(!0)}Tabs.current.subtabs.find((e=>e.isOpen)).isPermanentlyHidden&&[...Tab.dimensions.subtabs].reverse().find((e=>!e.isPermanentlyHidden)).show(!0)}EventHub.dispatch(GAME_EVENT.GAME_TICK_AFTER),GameUI.update(),player.lastUpdate=r,PerformanceStats.end("Game Update")}function Op(){const e=lp().dividedBy(Decimal.clampMin(5e-4,Time.thisInfinityRealTime.totalMinutes).toNumber());e.gt(player.records.thisInfinity.bestIPmin)&&cl.canCrunch&&(player.records.thisInfinity.bestIPmin=e,player.records.thisInfinity.bestIPminVal=lp());const t=mp().dividedBy(Decimal.clampMin(5e-4,Time.thisEternityRealTime.totalMinutes).toNumber());t.gt(player.records.thisEternity.bestEPmin)&&cl.canEternity&&(player.records.thisEternity.bestEPmin=t,player.records.thisEternity.bestEPminVal=mp());const i=Effarig.shardsGained.div(Decimal.clampMin(5e-4,Time.thisRealityRealTime.totalMinutes));i.gte(player.records.thisReality.bestRSmin)&&isRealityAvailable()&&(player.records.thisReality.bestRSmin=i,player.records.thisReality.bestRSminVal=Effarig.shardsGained)}function Lp(){let e=b.D0;if(RealityUpgrade(14).isBought&&(e=b.D1.timesEffectsOf(Achievement(113),RealityUpgrade(3),RealityUpgrade(14)),e=Decimal.times(e,getAdjustedGlyphEffect("timeetermult")),e=new Decimal(Time.deltaTime).times(Decimal.pow(e,AlchemyResource.eternity.effectValue)),player.reality.partEternitied=player.reality.partEternitied.plus(e),Mi.eternities.add(player.reality.partEternitied.floor()),player.reality.partEternitied=player.reality.partEternitied.sub(player.reality.partEternitied.floor())),!EternityChallenge(4).isRunning){let t=b.D0;BreakInfinityUpgrade.infinitiedGen.isBought&&(t=t.plus(Time.deltaTimeMs.div(Decimal.clampMin(50,player.records.bestInfinity.time)).div(2)),t=t.timesEffectsOf(RealityUpgrade(5),RealityUpgrade(7),UZ.unlocks.continuousTTBoost.effects.infinity),t=t.times(getAdjustedGlyphEffect("infinityinfmult"))),RealityUpgrade(11).isBought&&(t=t.plus(RealityUpgrade(11).effectValue.times(Time.deltaTime))),EffarigUnlock.eternity.isUnlocked&&(t=t.plus(Dp().times(Mi.eternities.value.minus(e.div(2).floor())).times(Time.deltaTime))),t=t.plus(player.partInfinitied),Mi.infinities.add(t.floor()),player.partInfinitied=t.minus(t.floor()).toNumber()}}function Fp(){if(!TimeDimension(8).isUnlocked&&Perk.autounlockTD.canBeApplied)for(let e=5;e<=8;++e)sp.timeDimension(e).purchase();Perk.autounlockDilation3.canBeApplied&&buyDilationUpgrade(DilationUpgrade.ttGenerator.id),Perk.autounlockReality.canBeApplied&&sp.reality.purchase(!0),applyEU2()}function $p(e){const t=player.celestials.laitela;if(Laitela.isRunning&&(t.entropy>=0&&(t.entropy+=e/1e3*Laitela.entropyGainPerSecond),t.entropy>=1)){let e=`Lai'tela's Reality has been destabilized after ${Time.thisRealityRealTime.toStringShort()}.`;t.entropy=-1;const i={fastestCompletion:t.fastestCompletion,difficultyTier:t.difficultyTier,realityReward:Laitela.realityReward};if(t.thisCompletion=Time.thisRealityRealTime.totalSeconds.toNumber(),t.fastestCompletion=Math.min(t.thisCompletion,t.fastestCompletion),clearCelestialRuns(),Time.thisRealityRealTime.totalSeconds.lt(30)){t.difficultyTier++,t.fastestCompletion=300,e+=Hp(Laitela.maxAllowedDimension+1);for(const e of Laitela.quotes.all)e.requirement&&e.show()}Laitela.realityReward>i.realityReward?(e+=`

Dark Matter Multiplier: ${formatX(i.realityReward,2,2)}\n ➜ ${formatX(Laitela.realityReward,2,2)}`,3600===i.fastestCompletion||300===i.fastestCompletion&&i.difficultyTier>0?Time.thisRealityRealTime.totalSeconds.lt(30)?e+=`
Best Completion Time: None ➜ Destabilized\n
Highest Active Dimension: ${formatInt(8-i.difficultyTier)} ➜\n ${formatInt(8-t.difficultyTier)}`:e+=`
Best Completion Time: None ➜\n ${TimeSpan.fromSeconds(t.fastestCompletion).toStringShort()}\n
Highest Active Dimension: ${formatInt(8-t.difficultyTier)}`:Time.thisRealityRealTime.totalSeconds.lt(30)?e+=`
Best Completion Time: ${TimeSpan.fromSeconds(i.fastestCompletion).toStringShort()}\n ➜ Destabilized\n
Highest Active Dimension: ${formatInt(8-i.difficultyTier)} ➜\n ${formatInt(8-t.difficultyTier)}`:e+=`
Best Completion Time: ${TimeSpan.fromSeconds(i.fastestCompletion).toStringShort()}\n ➜ ${TimeSpan.fromSeconds(t.fastestCompletion).toStringShort()}\n
Highest Active Dimension: ${formatInt(8-i.difficultyTier)}`,player.records.bestReality.laitelaSet=Glyphs.copyForRecords(Glyphs.active.filter((e=>null!==e)))):e+=` You need to destabilize in faster than\n ${TimeSpan.fromSeconds(t.fastestCompletion).toStringShort()} to improve your multiplier.`,Laitela.isFullyDestabilized&&Cm(24).tryComplete(),Modal.message.show(e,{},2)}}function Hp(e){switch(e){case 1:return`

Lai'tela's Reality will now completely disable production from all Dimensions.\n The Reality can still be entered, but further destabilization is no longer possible.\n For completely destabilizing the Reality, you also get an additional ${formatX(8)} to Dark Energy gain.`;case 2:return`

Lai'tela's Reality will now disable production from all 2nd Dimensions during\n future runs, but the reward will be ${formatInt(100)} times stronger than before. Completely destabilizing\n the Reality for the final Dimension will give you an additional ${formatX(8)} to Dark Energy gain.`;case 3:return`

Lai'tela's Reality will now disable production from all 3rd Dimensions during\n future runs, but the reward will be ${formatInt(100)} times stronger than before.`;case 8:return`

Lai'tela's Reality will now disable production from all 8th Dimensions during\n future runs, but the reward will be ${formatInt(100)} times stronger than before. This boost can be\n repeated for each remaining Dimension by reaching destabilization within ${formatInt(30)} seconds again.`;default:return`

Lai'tela's Reality will now disable production from all\n ${e}th Dimensions during future runs, but the reward will be\n ${formatInt(100)} times stronger than before.`}}function qp(e){if(UZ.unlocks.alchSetToCapAndCapIncrease.isUnlocked&&(player.celestials.ra.alchemy=Array.repeat(0,21).map((()=>({amount:UZ.alchemyResourceCap,reaction:!1})))),UZ.unlocks.passiveRelicShardGain.isUnlocked&&Mi.relicShards.add(Effarig.shardsGained),pl(5).isBought&&!Pelle.isDoomed?Mi.infinityPoints.add(lp().times(De.isCorrupted?.01:Time.deltaTime.div(100)).timesEffectOf(UZ.unlocks.continuousTTBoost.effects.autoPrestige)):Mi.infinityPoints.add(sp(181).effectOrDefault(0)),(TeresaUnlocks.epGen.canBeApplied||pl(5).isBought&&!Pelle.isDoomed)&&Mi.eternityPoints.add(player.records.thisEternity.bestEPmin.times(b.D0_01).times(De.isCorrupted?e/1e3:Ip().times(e).div(1e3)).timesEffectOf(UZ.unlocks.continuousTTBoost.effects.autoPrestige)),InfinityUpgrade.ipGen.isCharged||pl(5).isBought){const t=MachineHandler.gainedRealityMachines.timesEffectsOf(InfinityUpgrade.ipGen.chargedEffect).times(e/1e3);Mi.realityMachines.add(t)}if(Pelle.isDoomed&&pl(5).isBought){let e=player.celestials.pelle.records.totalAntimatter.plus(1).log10(),t=player.celestials.pelle.records.totalInfinityPoints.plus(1).log10(),i=player.celestials.pelle.records.totalEternityPoints.plus(1).log10(),a=hK.one.isReached?1.1:1;PelleStrikes.dilation.hasStrike&&(e*=500,t*=10,i*=5);const n=((Math.log10(e+2)+Math.log10(t+2)+Math.log10(i+2))*a/1.64)**7.5;let s=player.celestials.pelle.remnants;player.celestials.pelle.remnants=Math.max(s,n)}PelleRifts.chaos.milestones[2].canBeApplied&&Mi.eternityPoints.add(mp().times(b.D0_1).times(e/1e3))}function Vp(e){MachineHandler.updateIMCap(),Mi.imaginaryMachines.add(MachineHandler.gainedImaginaryMachines(e))}function Yp(){Effects.max(1,DilationUpgrade.doubleGalaxies);const e=getTachyonGalaxyMult();player.dilation.baseTachyonGalaxies=Math.min(1e6,Math.max(player.dilation.baseTachyonGalaxies,1+Math.floor(Decimal.log(Mi.dilatedTime.value.dividedBy(1e3),e)))),player.dilation.nextThreshold=b.E3.times(new Decimal(e).pow(player.dilation.baseTachyonGalaxies)),player.dilation.totalTachyonGalaxies=(player.dilation.baseTachyonGalaxies+Math.min(500,Effects.max(0,DilationUpgrade.doubleGalaxies)*player.dilation.baseTachyonGalaxies))*DilationUpgrade.galaxyMultiplier.effectValue}function Wp(){let e=Effects.product(Achievement(137),Achievement(156)).toDecimal().times(UZ.unlocks.achievementTTMult.config.canBeApplied?UZ.unlocks.achievementTTMult.config.effectValue:1).times(UZ.unlocks.continuousTTBoost.config.canBeApplied?UZ.unlocks.continuousTTBoost.effects.ttGen:1);GlyphAlteration.isAdded("dilation")&&e.times(getSecondaryGlyphEffect("dilationTTgen"));let t=Teresa.isRunning||Enslaved.isRunning||Pelle.isDoomed?Pelle.isDoomed&&UZ.unlocks.unlockPelleGlyphEffects.isUnlocked?new Decimal(getAdjustedGlyphEffect("dilationTTgen")):0:new Decimal(getAdjustedGlyphEffect("dilationTTgen")).times(e);player.mending.corruptionChallenge.corruptedMend&&ye.soF.ttgen[player.mending.corruption[9]]&&(t=0);const i=DilationUpgrade.ttGenerator.isBought?DilationUpgrade.ttGenerator.effectValue.times(Pelle.isDoomed?1:e):b.D0;let a=i.add(t);return a.gt(1)&&(a=a.pow(SingularityMilestone.theoremPowerFromSingularities.effectOrDefault(1))),UZ.unlocks.totalSTBoostTTGen.isUnlocked&&(a=a.pow(1+Math.max(Math.log10(V.spaceTheorems+1),0)/10)),a}function jp(e,t){if(e>600){const i=sl([{},player]);Modal.awayProgress.show({playerBefore:t,playerAfter:i,seconds:e})}GameUI.notify.showBlackHoles=!0}function Xp(e,t,i){var a;if(e<0)return;let n=Math.floor(20*e);GameUI.notify.showBlackHoles=!1;const s=GameStorage.maxOfflineTicks(1e3*e,null!==(a=GameStorage.offlineTicks)&&void 0!==a?a:player.options.offlineTicks);n>s&&!i?n=s:n>50&&!t&&i&&(n=50);const r=sl([{},player]);let o;o=BlackHoles.areUnlocked&&!BlackHoles.arePaused?BlackHoles.calculateGameTimeFromRealTime(e,BlackHoles.calculateSpeedups()):Ip().times(e);const l=Ep(o.times(1e3)),c=Cp(o.times(1e3));c.gt(0)?Mi.eternities.add(c):l.gt(0)?Mi.infinities.add(l):Mi.eternityPoints.add(_p(1e3*e)),InfinityUpgrade.ipOffline.isBought&&player.options.offlineProgress&&Mi.infinityPoints.add(player.records.thisEternity.bestIPMsWithoutMaxAll.times(1e3*e/2)),EventHub.dispatch(GAME_EVENT.OFFLINE_CURRENCY_GAINED);let u=e,d=e=>{const t=u/e;Np(1e3*t),u-=t};if(BlackHoles.areUnlocked&&!BlackHoles.arePaused&&(d=e=>{const[t,i]=BlackHoles.calculateOfflineTick(u,e,1e-4);u-=t,Np(1e3*t,{blackHoleSpeedup:i})}),i){GameIntervals.stop();for(let e=50;e>0;e--)d(e);GameStorage.postLoadStuff(),jp(e,r)}else{const t={};ui.view.modal.progressBar={},Async.run(d,n,{batchSize:1,maxTime:60,sleepTime:1,asyncEntry:e=>{GameIntervals.stop(),ui.$viewModel.modal.progressBar={label:"Offline Progress Simulation",info:`The game is being run at a lower accuracy in order to quickly calculate the resources you\n gained while you were away. See the How To Play entry on "Offline Progress" for technical details. If\n you are impatient and want to get back to the game sooner, you can click the "Speed up" button to\n simulate the rest of the time with half as many ticks (down to a minimum of ${formatInt(500)} ticks\n remaining). The "SKIP" button will instead use all the remaining offline time in ${formatInt(10)}\n ticks.`,progressName:"Ticks",current:e,max:n,startTime:Date.now(),buttons:[{text:"Speed up",condition:(e,t)=>t-e>500,click:()=>{const e=Math.clampMin(Math.floor(t.remaining/2),500);t.maxIter-=t.remaining-e,t.remaining=e,ui.$viewModel.modal.progressBar.max=t.maxIter}},{text:"SKIP",condition:(e,t)=>t-e>10,click:()=>{t.maxIter-=t.remaining-10,t.remaining=10}}]}},asyncProgress:e=>{ui.$viewModel.modal.progressBar.current=e},asyncExit:()=>{ui.$viewModel.modal.progressBar=void 0,GameStorage.postLoadStuff()},then:()=>{jp(e,r)},progress:t})}}function zp(e){ui.view.shiftDown=e}function Kp(e){Replicanti.galaxies.isPlayerHoldingR=e}function Zp(){return Km.test(navigator.userAgent)}function Qp(){console.log("🌌 Antimatter Dimensions: Reality Update 🌌"),y&&console.log("👨‍💻 Development Mode 👩‍💻"),Ll.initialize(),Rc.initialize(),zm.init(),GameStorage.load(),Tabs.all.find((e=>e.config.id===player.options.lastOpenTab)).show(!0),Qm.init()}let Jp;function ey(e){if(requestAnimationFrame(ey),void 0===e||void 0===Jp)return void(Jp=e);let t=e-Jp;Jp=e,player.dilation.active&&(t/=Pelle.isDoomed?1.5:10),tweenTime+=t,Sd().update(tweenTime)}window.onload=function(){const e=Zp();GameUI.initialized=e,ui.view.initialized=e,setTimeout((()=>{Ll.updateZoom(),document.getElementById("loading").style.display="none"}),500),e||(GameIntervals.stop(),document.getElementById("loading").style.display="none",document.getElementById("browser-warning").style.display="flex")},window.onfocus=function(){zp(!1)},window.onblur=function(){GameKeyboard.stopSpins()},window.tweenTime=0,ey();const ty={name:"GameSpeedDisplay",props:{},data(){return{baseSpeed:new Decimal,baseSpeedPreExpo:new Decimal,pulsedSpeed:new Decimal,hasSeenAlteredSpeed:!1,isStopped:!1,isEC12:!1,isPulsing:!1,hasBH3:!1,expoPower:1,pastGSSoftcap:!1,scOne:new Decimal,scOneEffect:1}},computed:{baseSpeedText(){if(this.isStopped)return"Stopped (storing real time)";const e=this.formatNumber(this.baseSpeed),t=this.formatNumber(Decimal.pow(this.baseSpeed,1/this.expoPower));return this.isEC12?`${e} (fixed)`:this.expoPower>1&&this.baseSpeed.gte(1)?`${t}`:`${e}`},pulseSpeedText(){return`${this.formatNumber(this.pulsedSpeed)}`},baseText(){let e=Decimal.pow(this.baseSpeedPreExpo,this.expoPower);return this.hasSeenAlteredSpeed?this.isStopped?`Game speed is altered: ${this.baseSpeedText}`:this.baseSpeed.eq(1)?"The game is running at normal speed.":this.hasBH3&&this.baseSpeed.gte(1)?`Game speed is altered: ${format(e,2,2)} (${this.baseSpeedText}${formatPow(this.expoPower,3,3)})`:`Game speed is altered: ${this.baseSpeedText}`:null}},methods:{update(){this.baseSpeed.copyFrom(Ip()),this.baseSpeedPreExpo=Decimal.pow(this.baseSpeed,1/this.expoPower),this.pulsedSpeed.copyFrom(getGameSpeedupForDisplay()),this.hasSeenAlteredSpeed=PlayerProgress.seenAlteredSpeed(),this.isStopped=Enslaved.isStoringRealTime,this.isEC12=EternityChallenge(12).isRunning,this.isPulsing=this.baseSpeed.neq(this.pulsedSpeed)&&Enslaved.canRelease(!0),this.hasBH3=ExpoBlackHole(1).isUnlocked,this.expoPower=ExpoBlackHole(1).power,this.pastGSSoftcap=Ip().gte(this.scOneStart)&&UZ.unlocks.uncapGamespeed.isUnlocked,this.scOneStart=getGameSpeedupSoftcaps(),this.scOneEffect=getGameSpeedupSoftcapsExp()},formatNumber(e){return e.gte(.001)&&e.lt(1e4)&&e.neq(1)?format(e,3,3):e.lt(.001)?`${formatInt(1)} / ${format(new Decimal(1).div(e),2)}`:`${format(e,2)}`}}},iy=ty;var ay=(0,X.Z)(iy,Em,Tm,!1,null,"95af5524",null);const ny=ay.exports,sy={name:"HeaderTickspeedInfo",components:{GameSpeedDisplay:ny},data(){return{mult:new Decimal(0),tickspeed:new Decimal(0),galaxyCount:0,purchasedTickspeed:0,freeTickspeed:0}},computed:{tickspeedDisplay(){return`Total Tickspeed: ${format(this.tickspeed,2,3)} / sec`},perUpgrade(){return InfinityChallenge(3).isRunning?`Tickspeed upgrades give\n ${formatX(1.05+.005*this.galaxyCount,3,3)} to all ADs`:`ADs produce ${formatX(this.mult.reciprocal(),2,3)} faster per Tickspeed upgrade`}},methods:{update(){this.mult.copyFrom(Tickspeed.multiplier),this.tickspeed.copyFrom(Tickspeed.perSecond),this.galaxyCount=player.galaxies,this.purchasedTickspeed=player.totalTickBought,this.freeTickspeed=FreeTickspeed.amount}}},ry=sy;var oy=(0,X.Z)(ry,vm,bm,!1,null,"2ca59fbc",null);const ly=oy.exports;var cy=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-reality-button"},[i("button",{staticClass:"c-reality-button infotooltip",class:e.classObject,on:{click:e.handleClick}},[i("div",{staticClass:"l-reality-button__contents"},[e.canReality?[i("div",{staticClass:"c-reality-button__header"},[e._v(" Make a new Reality ")]),i("div",[e._v(e._s(e.formatMachinesGained)+" "+e._s(e.formatMachineStats))]),i("div",[e._v(e._s(e.formatGlyphLevel))])]:e.hasRealityStudy?[i("div",[e._v("Get "+e._s(e.format("1e4000"))+" Eternity Points to unlock a new Reality")])]:[i("div",[e._v("Purchase the study in the Eternity tab to unlock a new Reality")])],e.canReality?i("div",{staticClass:"infotooltiptext"},[i("div",[e._v("Other resources gained:")]),i("div",[e._v(e._s(e.quantifyInt("Perk Point",e.ppGained)))]),e.shardsGained.neq(0)?i("div",[e._v(" "+e._s(e.shardsGainedText)+" ("+e._s(e.format(e.currentShardsRate,2))+"/min) "),i("br"),e._v(" Peak: "+e._s(e.format(e.bestShardRate,2))+"/min at "+e._s(e.format(e.bestShardRateVal,2))+" RS ")]):e._e(),e._l(e.celestialRunText,(function(t,a){return i("div",{key:a},[t[0]?i("span",[e._v(" "+e._s(t[1])+" "),i("br"),e._v(" "+e._s(t[2])+" ")]):e._e()])}))],2):e._e()],2)])])},uy=[];const dy={name:"RealityButton",data(){return{canReality:!1,showSpecialEffect:!1,hasRealityStudy:!1,machinesGained:new Decimal,projectedRM:new Decimal,newIMCap:0,realityTime:0,glyphLevel:0,nextGlyphPercent:0,nextMachineEP:0,shardsGained:new Decimal(0),currentShardsRate:new Decimal(0),bestShardRate:new Decimal(0),bestShardRateVal:new Decimal(0),ppGained:0,celestialRunText:["","","","",""]}},computed:{formatMachinesGained(){return this.machinesGained.gt(0)?`Machines gained: ${format(this.machinesGained,2)}`:"No Machines gained"},formatMachineStats(){return!PlayerProgress.realityUnlocked()&&this.nextMachineEP.gt("1e8000")?"(Capped this Reality!)":this.machinesGained.gt(0)&&this.machinesGained.lt(100)?`(Next at ${format(this.nextMachineEP,2)} EP)`:this.machinesGained.eq(0)&&0===this.newIMCap?`(Projected: ${format(this.projectedRM,2)} RM)`:0!==this.newIMCap?`(iM Cap: ${formatMachines(0,this.newIMCap)})`:this.machinesGained.lt(Number.MAX_VALUE)?`(${format(this.machinesGained.divide(this.realityTime),2,2)} RM/min)`:""},formatGlyphLevel(){return this.glyphLevel>=1e4?`Glyph level: ${formatInt(this.glyphLevel)}`:`Glyph level: ${formatInt(this.glyphLevel)} (${this.nextGlyphPercent} to next)`},showShardsRate(){return this.currentShardsRate},shardsGainedText(){return quantify("Relic Shard",this.shardsGained,2)},classObject(){return{"c-reality-button--unlocked":this.canReality,"c-reality-button--locked":!this.canReality,"c-reality-button--special":this.showSpecialEffect}}},methods:{percentToNextGlyphLevelText(){const e=getGlyphLevelInputs();let t=e.actualLevel;isFinite(t)||(t=0);const i=this.glyphLevel>1e3?0:1;return`${formatPercents(Math.min(t-Math.floor(t),.999),i)}`},update(){if(this.hasRealityStudy=TimeStudy.reality.isBought,this.canReality=isRealityAvailable(),this.showSpecialEffect=this.hasSpecialReward(),!this.canReality)return void(this.shardsGained=new Decimal(0));function e(e){const t=Decimal.divide(e,MachineHandler.realityMachineMultiplier);if(t.lte(1))return Decimal.pow10(4e3);if(t.lte(10))return Decimal.pow10(4e3/27*(t.toNumber()+26));let i=Decimal.pow10(4e3*(t.log10()/3+1));return!PlayerProgress.realityUnlocked()&&i.gte("1e6000")&&(i=i.div("1e6000").pow(4).times("1e6000")),i}const t=simulatedRealityCount(!1)+1;this.projectedRM=MachineHandler.gainedRealityMachines.times(t).clampMax(MachineHandler.hardcapRM),this.newIMCap=MachineHandler.projectedIMCap,this.machinesGained=this.projectedRM.clampMax(MachineHandler.distanceToRMCap),this.realityTime=Time.thisRealityRealTime.totalMinutes,this.glyphLevel=gainedGlyphLevel().actualLevel,this.nextGlyphPercent=this.percentToNextGlyphLevelText(),this.nextMachineEP=e(this.machinesGained.plus(1)),this.ppGained=t,hK.one.isReached&&(this.ppGained*=5),this.shardsGained=Effarig.shardsGained.times(t),this.currentShardsRate=this.shardsGained.div(Time.thisRealityRealTime.totalMinutes.max(.01)),this.bestShardRate=player.records.thisReality.bestRSmin.times(t),this.bestShardRateVal=player.records.thisReality.bestRSminVal.times(t);const i=this.formatScalingMultiplierText("Glyph Sacrifice",Teresa.runRewardMultiplier,Math.max(Teresa.runRewardMultiplier,Teresa.rewardMultiplier(Currency.antimatter.value))),a=this.formatThresholdText(Teresa.rewardMultiplier(Currency.antimatter.value)>Teresa.runRewardMultiplier,player.celestials.teresa.bestRunAM,"antimatter");this.celestialRunText=[[Teresa.isRunning,i,a]]},handleClick(){this.canReality&&requestManualReality()},formatScalingMultiplierText(e,t,i){return`${e} ${formatX(t,2,2)} ➜ ${formatX(i,2,2)}`},formatThresholdText(e,t,i){return e?"":`(${format(t,2,2)} ${i} to improve)`},hasSpecialReward(){return!!(Teresa.isRunning&&Teresa.rewardMultiplier(Currency.antimatter.value)>Teresa.runRewardMultiplier)||Currency.eternityPoints.value.exponent>4e3&&(Effarig.isRunning&&!EffarigUnlock.reality.isUnlocked||Enslaved.isRunning&&!Enslaved.isCompleted)}}},hy=dy;var my=(0,X.Z)(hy,cy,uy,!1,null,"24811dee",null);const py=my.exports,yy={name:"HeaderCenterContainer",components:{HeaderTickspeedInfo:ly,MendingButton:gm,RealityCurrencyHeader:dm,RealityButton:py,ArmageddonButton:sm,MendingPointsHeader:sh},data(){return{shouldDisplay:!0,isModern:!1,hasRealityButton:!1,hasMendingButton:!1,isDoomed:!1,antimatter:new Decimal(0),antimatterPerSec:new Decimal(0),mendingPoints:new Decimal(0)}},methods:{update(){this.shouldDisplay=player.break||!Player.canCrunch,this.shouldDisplay&&(this.mendingPoints.copyFrom(Currency.mendingPoints.value.floor()),this.isModern="Modern"==player.options.UIType,this.isDoomed=Pelle.isDoomed,this.antimatter.copyFrom(Currency.antimatter),this.hasRealityButton=ue.realityUnlocked()||TimeStudy.reality.isBought,this.hasRealityButton||this.antimatterPerSec.copyFrom(Currency.antimatter.productionPerSecond))}}},fy=yy;var gy=(0,X.Z)(fy,Qh,Jh,!1,null,"4832cc34",null);const vy=gy.exports;var by=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.showContainer?i("div",{staticClass:"c-prestige-button-container"},[e.showEP?i("div",{staticClass:"c-eternity-points"},[e._v(" You have "),i("span",{staticClass:"c-game-header__ep-amount"},[e._v(e._s(e.format(e.eternityPoints,2)))]),e._v(" "+e._s(e.pluralize("Eternity Point",e.eternityPoints))+". "),e.showNextEP?i("span",[e._v("(Next EP at "+e._s(e.format(e.nextEP,1))+" IP)")]):e._e()]):e._e(),i("UnlockInfinityDimButton"),i("EternityButton")],1):e._e()},Ey=[],Ty=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("button",{staticClass:"o-prestige-button",class:e.buttonClassObject,attrs:{onclick:"eternityResetRequest()"},on:{mouseover:function(t){e.hover=!0},mouseleave:function(t){e.hover=!1}}},[-1===e.type?[e._v(" Reach "+e._s(e.format(e.eternityGoal,2,2))+" "),i("br"),e._v(" Infinity Points ")]:0===e.type?[e._v(" Other times await... I need to become Eternal ")]:1===e.type?[e._v(" Eternity for "),i("span",{style:e.amountStyle},[e._v(e._s(e.format(e.gainedEP,2)))]),e.showEPRate?i("span",[e._v(" EP")]):i("span",[e._v(" Eternity "+e._s(e.pluralize("Point",e.gainedEP)))]),i("br"),e.showEPRate?[e._v(" Current: "+e._s(e.format(e.currentEPRate,2,2))+" EP/min "),i("br"),e._v(" Peak: "+e._s(e.format(e.peakEPRate,2,2))+" EP/min "),i("br"),e._v(" at "+e._s(e.format(e.peakEPRateVal,2,2))+" EP ")]:e._e()]:2===e.type||6===e.type&&!e.canEternity?[e._v(" Other challenges await... I need to become Eternal ")]:3===e.type?[e._v(" Eternity for "),i("span",{style:e.tachyonAmountStyle},[e._v(e._s(e.format(e.gainedTachyons,2,1)))]),e._v(" "+e._s(e.pluralize("Tachyon Particle",e.gainedTachyons))+" ")]:4===e.type||5===e.type?[4===e.type?[e._v(" Eternity for "),i("span",{style:e.amountStyle},[e._v(e._s(e.format(e.gainedEP,2,2)))]),e._v(" EP ")]:[e._v(" Eternity for "),i("span",{style:e.tachyonAmountStyle},[e._v(e._s(e.format(e.gainedTachyons,2,1)))]),e._v(" TP ")],i("br"),e._v(" You should explore a bit and look at new content before clicking me! ")]:6===e.type?[e._v(" Other challenges await... "),e.fullyCompleted?[i("br"),e._v(" (This challenge is already fully completed) ")]:[i("br"),e._v(" "+e._s(e.quantifyInt("completion",e.gainedCompletions))+" on Eternity "),e.failedRestriction?[i("br"),e._v(" "+e._s(e.failedRestriction)+" ")]:e.hasMoreCompletions?[i("br"),e._v(" Next goal at "+e._s(e.format(e.nextGoalAt))+" IP ")]:e._e()]]:e._e()],2):e._e()},wy=[];const ky={name:"EternityButton",data(){return{isVisible:!1,type:Cy.FIRST_TIME,gainedEP:new Decimal(0),currentEP:new Decimal(0),currentEPRate:new Decimal(0),peakEPRateVal:new Decimal(0),peakEPRate:new Decimal(0),currentTachyons:new Decimal(0),gainedTachyons:new Decimal(0),challengeCompletions:0,gainedCompletions:0,fullyCompleted:!1,failedRestriction:void 0,hasMoreCompletions:!1,nextGoalAt:new Decimal(0),canEternity:!1,eternityGoal:new Decimal(0),hover:!1,headerTextColored:!0,creditsClosed:!1,showEPRate:!1,isDilation:!1}},computed:{buttonClassObject(){return{"o-eternity-button":!this.isDilation,"o-eternity-button--dilation":this.isDilation,"o-eternity-button--unavailable":!this.canEternity,"o-pelle-disabled-pointer":this.creditsClosed}},rateThreshold:()=>1e40,amountStyle(){if(!this.headerTextColored||this.currentEP.lt(this.rateThreshold))return{"transition-duration":"0s"};if(this.hover)return{color:"black","transition-duration":"0.2s"};const e=getComputedStyle(document.body).getPropertyValue("--color-text").split("#")[1],t=[[255,0,0],[parseInt(e.substring(0,2),16),parseInt(e.substring(2,4),16),parseInt(e.substring(4),16)],[0,255,0]],i=this.gainedEP.log10()/this.currentEP.log10(),a=e=>{if(i<.9)return t[0][e];if(i<1){const a=10*(i-.9);return Math.round(t[0][e]*(1-a)+t[1][e]*a)}if(i<1.1){const a=10*(i-1);return Math.round(t[1][e]*(1-a)+t[2][e]*a)}return t[2][e]},n=[a(0),a(1),a(2)];return{color:`rgb(${n.join(",")})`,"transition-duration":"0.2s"}},tachyonAmountStyle(){if(!this.headerTextColored||this.hover)return{"transition-duration":"0s"};let e;e=this.currentTachyons.eq(0)?this.gainedTachyons.eq(0)?0:1/0:this.gainedTachyons.div(this.currentTachyons).toNumber();const t=[Math.round(255*Math.clampMax(1/e,1)),Math.round(255*Math.clampMax(e,1)),Math.round(255*Math.clampMax(e,1/e))];return{color:`rgb(${t.join(",")})`}}},methods:{update(){if(this.isVisible=Player.canEternity||EternityMilestone.autoUnlockID.isReached||InfinityDimension(8).isUnlocked,this.isDilation=player.dilation.active,!this.isVisible)return;if(this.canEternity=Player.canEternity,this.eternityGoal.copyFrom(Player.eternityGoal),this.headerTextColored=player.options.headerTextColored,!this.canEternity)return void(this.type=Cy.CANNOT_ETERNITY);if(!PlayerProgress.eternityUnlocked())return void(this.type=Cy.FIRST_TIME);if(EternityChallenge.isRunning)return Perk.studyECBulk.isBought?(this.type=Cy.CHALLENGE_RUPG,void this.updateChallengeWithRUPG()):void(this.type=Cy.CHALLENGE);const e=gainedEternityPoints();this.currentEP.copyFrom(Currency.eternityPoints),this.gainedEP.copyFrom(e);const t=!PlayerProgress.realityUnlocked()&&Currency.eternityPoints.exponent>=4e3&&!TimeStudy.reality.isBought;if(this.isDilation)return this.type=t?Cy.DILATION_EXPLORE_NEW_CONTENT:Cy.DILATION,this.currentTachyons.copyFrom(Currency.tachyonParticles),void this.gainedTachyons.copyFrom(getTachyonGain(!0));this.type=t?Cy.NORMAL_EXPLORE_NEW_CONTENT:Cy.NORMAL,this.currentEPRate.copyFrom(e.dividedBy(TimeSpan.fromMilliseconds(player.records.thisEternity.realTime).totalMinutes)),this.peakEPRateVal.copyFrom(player.records.thisEternity.bestEPminVal),this.peakEPRate.copyFrom(player.records.thisEternity.bestEPmin),this.showEPRate=this.peakEPRate.lte(this.rateThreshold),this.creditsClosed=GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||PlayerProgress.mendingUnlocked()&&player.isGameEnd},updateChallengeWithRUPG(){const e=EternityChallenge.current;if(this.fullyCompleted=e.isFullyCompleted,this.fullyCompleted)return;const t=e.gainedCompletionStatus;this.gainedCompletions=t.gainedCompletions,this.failedRestriction=t.failedRestriction,this.hasMoreCompletions=t.hasMoreCompletions,this.nextGoalAt.copyFrom(t.nextGoalAt)}}},Cy={CANNOT_ETERNITY:-1,FIRST_TIME:0,NORMAL:1,CHALLENGE:2,DILATION:3,NORMAL_EXPLORE_NEW_CONTENT:4,DILATION_EXPLORE_NEW_CONTENT:5,CHALLENGE_RUPG:6},Ay=ky;var _y=(0,X.Z)(Ay,Ty,wy,!1,null,"df46bf10",null);const Sy=_y.exports;var Dy=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("button",{class:e.buttonClassObject,on:{click:e.tryUnlockNextInfinityDimension}},[e._v(" "+e._s(e.text)+" ")]):e._e()},Ry=[];const My={name:"UnlockInfinityDimButton",data(){return{isVisible:!1,canUnlock:!1,hasIPUnlock:!0,amRequirement:new Decimal(0),ipRequirement:0}},computed:{text(){const e=`a new ${this.hasIPUnlock?"type of Dimension":"Infinity Dimension"}.`;if(this.canUnlock)return`Unlock ${e}`;const t=format(this.amRequirement),i=format(this.ipRequirement);return this.hasIPUnlock?`Reach ${i} Infinity Points and ${t} antimatter to unlock ${e}`:`Reach ${t} antimatter to unlock ${e}`},buttonClassObject(){return{"o-prestige-button":!0,"o-infinity-button":!0,"o-infinity-button--unavailable":!this.canUnlock}}},methods:{update(){if(this.isVisible=player.break&&!InfinityDimension(8).isUnlocked&&!Player.canEternity&&!EternityMilestone.autoUnlockID.isReached,!this.isVisible)return;const e=InfinityDimensions.next();this.canUnlock=e.canUnlock,this.hasIPUnlock=e.hasIPUnlock,this.amRequirement=e.amRequirement,this.ipRequirement=e.ipRequirement},tryUnlockNextInfinityDimension(){InfinityDimensions.unlockNext()}}},Iy=My;var xy=(0,X.Z)(Iy,Dy,Ry,!1,null,"e6227816",null);const Py=xy.exports,Gy={name:"HeaderEternityContainer",components:{EternityButton:Sy,UnlockInfinityDimButton:Py},data(){return{showContainer:!1,showEP:!1,showNextEP:!1,eternityPoints:new Decimal(0),nextEP:new Decimal(0)}},methods:{update(){this.showContainer=player.break||PlayerProgress.eternityUnlocked(),this.showEP=PlayerProgress.eternityUnlocked(),this.eternityPoints.copyFrom(Currency.eternityPoints.value.floor()),this.showNextEP=Player.canEternity&&player.records.thisReality.maxEP.lt(100)&&gainedEternityPoints().lt(100),this.showNextEP&&this.nextEP.copyFrom(requiredIPForEP(gainedEternityPoints().floor().toNumber()+1))}}},Uy=Gy;var By=(0,X.Z)(Uy,by,Ey,!1,null,"78a4376a",null);const Ny=By.exports;var Oy=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.showContainer?i("div",{staticClass:"c-prestige-button-container"},[i("div",{staticClass:"c-infinity-points"},[e._v(" You have "),i("span",{staticClass:"c-game-header__ip-amount"},[e._v(e._s(e.format(e.infinityPoints,2)))]),e._v(" "+e._s(e.pluralize("Infinity Point",e.infinityPoints))+". "),e.isTesseractUnlocked?i("span",{domProps:{innerHTML:e._s(e.tesseractText)}}):e._e()]),i("BigCrunchButton")],1):e._e()},Ly=[],Fy=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible&&!e.tesseractAffordable?i("button",{staticClass:"o-prestige-button o-infinity-button",class:e.buttonClassObject,on:{click:e.crunch,mouseover:function(t){e.hover=!0},mouseleave:function(t){e.hover=!1}}},[e.canCrunch?e.inAntimatterChallenge?[e._v(" Big Crunch to "),i("br"),e._v(" complete the challenge ")]:[e.showIPRate?e._e():i("div"),i("b",[e._v(" Big Crunch for "),i("span",{style:e.amountStyle},[e._v(e._s(e.format(e.gainedIP,2)))]),e.showIPRate?i("span",[e._v(" IP")]):i("span",[e._v(" Infinity "+e._s(e.pluralize("Point",e.gainedIP)))])]),e.showIPRate?[i("br"),e._v(" Current: "+e._s(e.format(e.currentIPRate,2))+" IP/min "),i("br"),e._v(" Peak: "+e._s(e.format(e.peakIPRate,2))+" IP/min "),i("br"),e._v(" at "+e._s(e.format(e.peakIPRateVal,2))+" IP ")]:i("div")]:[e._v(" Reach "+e._s(e.format(e.infinityGoal,2,2))+" "),i("br"),e._v(" antimatter ")]],2):e.tesseractAffordable?i("button",{staticClass:"o-prestige-button c-game-header__tesseract-available",class:{"o-pelle-disabled-pointer":e.creditsClosed},on:{click:e.switchToInfinity}},[i("b",[e._v(" You have enough Infinity Points to buy a Tesseract ")])]):e._e()},$y=[];const Hy={name:"BigCrunchButton",data(){return{isVisible:!1,gainedIP:new Decimal(0),currentIPRate:new Decimal(0),peakIPRate:new Decimal(0),peakIPRateVal:new Decimal(0),currentIP:new Decimal(0),tesseractAffordable:!1,canCrunch:!1,infinityGoal:new Decimal(0),inAntimatterChallenge:!1,hover:!1,headerTextColored:!0,creditsClosed:!1,showIPRate:!1}},computed:{buttonClassObject(){return{"o-infinity-button--unavailable":!this.canCrunch,"o-pelle-disabled-pointer":this.creditsClosed}},rateThreshold:()=>5e11,amountStyle(){if(!this.headerTextColored||this.currentIP.lt(this.rateThreshold))return{"transition-duration":"0s"};if(this.hover)return{color:"black","transition-duration":"0.2s"};const e=getComputedStyle(document.body).getPropertyValue("--color-text").split("#")[1],t=[[255,0,0],[parseInt(e.substring(0,2),16),parseInt(e.substring(2,4),16),parseInt(e.substring(4),16)],[0,255,0]],i=this.gainedIP.log10()/this.currentIP.log10(),a=e=>{if(i<.9)return t[0][e];if(i<1){const a=10*(i-.9);return Math.round(t[0][e]*(1-a)+t[1][e]*a)}if(i<1.1){const a=10*(i-1);return Math.round(t[1][e]*(1-a)+t[2][e]*a)}return t[2][e]},n=[a(0),a(1),a(2)];return{color:`rgb(${n.join(",")})`,"transition-duration":"0.2s"}}},methods:{update(){if(this.isVisible=player.break,this.tesseractAffordable=Tesseracts.canBuyTesseract,!this.isVisible)return;this.canCrunch=Player.canCrunch,this.infinityGoal.copyFrom(Player.infinityGoal),this.inAntimatterChallenge=Player.isInAntimatterChallenge,this.headerTextColored=player.options.headerTextColored,this.creditsClosed=GameEnd.creditsEverClosed&&!ue.mendingUnlocked()||ue.mendingUnlocked()&&player.isGameEnd;const e=gainedInfinityPoints();this.currentIP.copyFrom(Currency.infinityPoints),this.gainedIP.copyFrom(e),this.currentIPRate.copyFrom(e.dividedBy(Decimal.clampMin(5e-4,Time.thisInfinityRealTime.totalMinutes))),this.peakIPRate.copyFrom(player.records.thisInfinity.bestIPmin),this.peakIPRateVal.copyFrom(player.records.thisInfinity.bestIPminVal),this.showIPRate=this.peakIPRate.lte(this.rateThreshold)},switchToInfinity(){Tab.dimensions.infinity.show(!0)},crunch(){Player.canCrunch&&manualBigCrunchResetRequest()}}},qy=Hy;var Vy=(0,X.Z)(qy,Fy,$y,!1,null,"2d1de0f8",null);const Yy=Vy.exports,Wy={name:"HeaderInfinityContainer",components:{BigCrunchButton:Yy},data(){return{showContainer:!1,infinityPoints:new Decimal(0),isTesseractUnlocked:!1,tesseractCost:new Decimal(0),tesseractText:""}},methods:{update(){this.showContainer=player.break||PlayerProgress.infinityUnlocked(),this.infinityPoints.copyFrom(Currency.infinityPoints.value.floor()),this.isTesseractUnlocked=Enslaved.isCompleted,this.tesseractCost=Tesseracts.nextCost,this.tesseractText=this.tesseractProgress()},tesseractProgress(){const e=this.infinityPoints.add(1).log10()/this.tesseractCost.log10();return e>1?`(${formatPercents(1)})`:`(${formatPercents(e,2,2)})`}}},jy=Wy;var Xy=(0,X.Z)(jy,Oy,Ly,!1,null,"546e2542",null);const zy=Xy.exports,Ky={name:"HeaderPrestigeGroup",components:{HeaderCenterContainer:vy,HeaderEternityContainer:Ny,HeaderInfinityContainer:zy}},Zy=Ky;var Qy=(0,X.Z)(Zy,Kh,Zh,!1,null,"05a7d691",null);const Jy=Qy.exports,ef={name:"GameHeader",components:{HeaderChallengeDisplay:qh,HeaderChallengeEffects:zh,HeaderBlackHole:Ih,HeaderPrestigeGroup:Jy,GameSpeedDisplay:ny},data(){return{hasReality:!1}},methods:{update(){this.hasReality=PlayerProgress.realityUnlocked()}}},tf=ef;var af=(0,X.Z)(tf,hh,mh,!1,null,"6d71e8ba",null);const nf=af.exports;var sf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{ref:"ticker",staticClass:"c-news-ticker"},[i("span",{ref:"line",staticClass:"c-news-line c-news-ticker__line",class:e.lineClass,on:{click:e.onLineClick}})])},rf=[];const of={name:"NewsTicker",data(){return{enableAnimation:!1}},computed:{lineClass(){return this.enableAnimation?void 0:"c-disable-ticker-animation"}},beforeCreate(){this.recentTickers=[]},mounted(){document.addEventListener("visibilitychange",(()=>this.restart.bind(this))),this.restart()},beforeDestroy(){this.clearTimeouts()},methods:{update(){var e;null!==(e=this.currentNews)&&void 0!==e&&e.dynamic&&(this.$refs.line.innerHTML=this.currentNews.text),this.enableAnimation=player.options.news.includeAnimated},restart(){GameUI.initialized?(this.clearTimeouts(),document.hidden||this.prepareNextMessage()):setTimeout(this.restart.bind(this),100)},clearTimeouts(){clearTimeout(this.delayTimeout),clearTimeout(this.scrollTimeout)},prepareNextMessage(){var e,t;const i=this.$refs.line;if(void 0===i)return;const a=e=>{var t;return(null===(t=e.unlocked)||void 0===t||t)&&!this.recentTickers.includes(e.id)};if(nextNewsMessageId&&GameDatabase.news.find((e=>e.id===nextNewsMessageId)))this.currentNews=GameDatabase.news.find((e=>e.id===nextNewsMessageId)),nextNewsMessageId=void 0;else if(this.currentNews&&"a236"===this.currentNews.id)this.currentNews=GameDatabase.news.filter((e=>e.isAdvertising&&a(e))).randomElement();else{const e=Math.random()t.id.includes("ai")===e)).filter((e=>a(e))).randomElement()}this.recentTickers.push(this.currentNews.id);while(this.recentTickers.length>player.options.news.repeatBuffer)this.recentTickers.shift();this.currentNews.reset&&this.currentNews.reset();let n=this.currentNews.text;f&&(window.openNewsLink=$l,n=n.replace(/href=["']((?:(?!["'])[\s\S])+)["']/g,"href onClick='window.openNewsLink(\"$1\"); return false;'")),i.innerHTML=n,i.style["transition-duration"]="0ms","a244"===(null===(e=this.currentNews)||void 0===e?void 0:e.id)||"ai63"===(null===(t=this.currentNews)||void 0===t?void 0:t.id)?i.style.transform="translateX(-100%)":i.style.transform="translateX(0)";const s=1e3;this.delayTimeout=setTimeout(this.scrollMessage.bind(this),s)},scrollMessage(){const e=this.$refs.line,t=100*player.options.news.speed,i=(this.$refs.ticker.clientWidth+e.clientWidth)/t;e.style["transition-duration"]=`${i}s`,this.currentNews&&"a244"===this.currentNews.id?e.style.transform="translateX(0)":e.style.transform="translateX(-100%)",NewsHandler.addSeenNews(this.currentNews.id),NewsHandler.uniqueTickersSeen>=50&&Achievement(22).unlock(),this.scrollTimeout=setTimeout(this.prepareNextMessage.bind(this),1e3*i)},onLineClick(){if(void 0===this.currentNews.onClick)return;SecretAchievement(24).unlock();const e=this.currentNews.onClick();void 0!==e&&(this.$refs.line.innerHTML=e)}}},lf=of;var cf=(0,X.Z)(lf,sf,rf,!1,null,null,null);const uf=cf.exports;var df=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("div",{staticClass:"c-subtab-button-container"},e._l(e.subtabs,(function(t,a){return i("ClassicSubtabButton",{key:a,attrs:{subtab:t,"parent-name":e.tab.name}})})),1):e._e()},hf=[],mf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isAvailable?i("button",{class:e.classObject,on:{click:function(t){return e.subtab.show(!0)}}},[e._v(" "+e._s(e.tabName)+" "),e.hasNotification?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()]):e._e()},pf=[];const yf={name:"ClassicSubtabButton",props:{subtab:{type:Object,required:!0},parentName:{type:String,required:!0}},data(){return{isAvailable:!1,hasNotification:!1,isCurrentSubtab:!1,tabName:""}},computed:{classObject(){return{"o-tab-btn":!0,"o-tab-btn--secondary":!0,"o-subtab-btn--active":this.isCurrentSubtab,"o-tab-btn--infinity":"Infinity"===this.parentName,"o-tab-btn--eternity":"Eternity"===this.parentName,"o-tab-btn--reality":"Reality"===this.parentName,"o-tab-btn--celestial":"Celestials"===this.parentName,"o-tab-btn--mending":"Mending"===this.parentName}}},methods:{update(){this.isAvailable=this.subtab.isAvailable,this.hasNotification=this.subtab.hasNotification,this.isCurrentSubtab=this.subtab.isOpen&&"S9"!==Theme.currentName(),this.tabName=Pelle.transitionText(this.subtab.name,this.subtab.name,Math.max(Math.min(GameEnd.endState-this.subtab.id%4/10,1),0))}}},ff=yf;var gf=(0,X.Z)(ff,mf,pf,!1,null,"02221b25",null);const vf=gf.exports,bf={name:"ClassicSubtabBar",components:{ClassicSubtabButton:vf},data(){return{isVisible:!1}},computed:{tab:()=>Tabs.current,subtabs(){return this.tab.subtabs}},methods:{update(){this.isVisible=this.subtabs.countWhere((e=>e.isAvailable))>1}}},Ef=bf;var Tf=(0,X.Z)(Ef,df,hf,!1,null,"b242ebf6",null);const wf=Tf.exports;var kf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",e._l(e.tabs,(function(e,t){return i("ClassicTabButton",{key:t,attrs:{"tab-position":t,tab:e}})})),1)},Cf=[],Af=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isAvailable?i("button",{staticClass:"o-tab-btn",class:[e.tab.config.UIClass,{"o-tab-btn--active":e.isCurrentTab}],on:{click:function(t){return e.tab.show(!0)}}},[e._v(" "+e._s(e.tabName)+" "),e.hasNotification?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()]):e._e()},_f=[];const Sf={name:"ClassicTabButton",props:{tab:{type:Object,required:!0},tabPosition:{type:Number,required:!0}},data(){return{isAvailable:!1,hasNotification:!1,tabName:""}},computed:{isCurrentTab(){return this.tab.isOpen&&"S9"!==Theme.currentName()}},methods:{update(){this.isAvailable=this.tab.isAvailable,this.hasNotification=this.tab.hasNotification,this.tabPositionTabs.Classic}},xf=If;var Pf=(0,X.Z)(xf,kf,Cf,!1,null,"44724e19",null);const Gf=Pf.exports;var Uf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-eternity-tab__header"},[e._v(" You have "),i("span",{staticClass:"c-eternity-tab__eternity-points"},[e._v(e._s(e.format(e.eternityPoints,2)))]),e._v(" "+e._s(e.pluralize("Eternity Point",e.eternityPoints))+". ")])},Bf=[];const Nf={name:"EternityPointsHeader",data(){return{eternityPoints:new Decimal}},methods:{update(){this.eternityPoints.copyFrom(Currency.eternityPoints.value.floor())}}},Of=Nf;var Lf=(0,X.Z)(Of,Uf,Bf,!1,null,"30258bd0",null);const Ff=Lf.exports;var $f=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.isVisible,expression:"isVisible"}],staticClass:"c-infinity-tab__header"},[e._v(" You have "),i("span",{staticClass:"c-infinity-tab__infinity-points"},[e._v(e._s(e.format(e.infinityPoints,2)))]),e._v(" "+e._s(e.pluralize("Infinity Point",e.infinityPoints))+". ")])},Hf=[];const qf={name:"InfinityPointsHeader",data(){return{infinityPoints:new Decimal,isVisible:!1}},methods:{update(){this.infinityPoints.copyFrom(Currency.infinityPoints),this.isVisible=PlayerProgress.infinityUnlocked()}}},Vf=qf;var Yf=(0,X.Z)(Vf,$f,Hf,!1,null,"07f4803c",null);const Wf=Yf.exports,jf={name:"ClassicUi",components:{GameHeader:nf,ClassicSubtabBar:wf,ClassicTabBar:Gf,NewsTicker:uf,InfinityPointsHeader:Wf,EternityPointsHeader:Ff,BigCrunchButton:dh,MendingButton:gm,MendingPointsHeader:sh},data(){return{bigCrunch:!1,smallCrunch:!1,newGameKey:"",hasMendingButton:!1,mendingPoints:new Decimal(0)}},computed:{tab:()=>Tabs.current,news(){return this.$viewModel.news}},methods:{update(){const e=!player.break&&Player.canCrunch;this.bigCrunch=e&&Time.bestInfinityRealTime.totalMinutes.gt(1),this.newGameKey=Pelle.isDoomed,this.hasMendingButton=PlayerProgress.mendingUnlocked()||player.isGameEnd&&GameEnd.endState>=14.5,this.mendingPoints.copyFrom(Currency.mendingPoints.value.floor())}}},Xf=jf;var zf=(0,X.Z)(Xf,Qd,Jd,!1,null,"26607020",null);const Kf=zf.exports;var Zf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-game-ui--fixed",attrs:{id:"ui-fixed"}},[i("div",{staticClass:"l-notification-container",attrs:{id:"notification-container"}}),i("HowToPlay",{style:e.hideIfMatoFullscreen}),"studies"===e.view.subtab?i("TimeTheoremShop",{staticClass:"l-time-studies-tab__tt-shop"}):e._e(),"Modern"==e.view.UIType&&"S12"!==e.view.theme?i("ModernSidebar",{style:e.hideIfMatoFullscreen}):e._e(),i("SaveTimer",{style:e.hideIfMatoFullscreen}),i("SpeedrunStatus",{style:e.hideIfMatoFullscreen}),"S12"!==e.view.theme?[e.view.modal.progressBar?i("ModalProgressBar"):e.view.quotes.current?i("CelestialQuoteModal",{attrs:{quote:e.view.quotes.current}}):e.view.quotes.history?i("CelestialQuoteHistoryDisplay",{attrs:{quotes:e.view.quotes.history}}):e.view.modal.current?i("PopupModal",{attrs:{modal:e.view.modal.current}}):e._e(),e.view.modal.progressBar?i("ModalProgressBar"):e._e(),e.ending?i("FadeAway"):e._e(),e.ending?i("CreditsContainer"):e._e(),e.ending?i("NewGame"):e._e(),i("SpectateGame")]:e._e()],2)},Qf=[],Jf=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-modal-overlay c-modal-overlay"},[i("i",{staticClass:"c-modal-celestial-quote-history__close fas fa-circle-xmark o-light-button",on:{click:e.close}}),i("div",{staticClass:"c-quote-history-modal__clickable-background",on:{click:e.close}}),e._l(e.unlockedQuotes,(function(t,a){return i("div",{key:a,on:{click:function(t){e.focusedQuoteId=a}}},e._l(t.quote.config.lines,(function(n,s){return i("div",{key:s,on:{click:function(e){t.currentLine=s}}},[i("CelestialQuoteLine",{staticClass:"c-quote-overlay",class:{"c-quote-overlay--background":!e.isFocused(a,s)},style:e.quoteStyle(a,s),attrs:{quote:t.quote,"current-line":s,primary:""}})],1)})),0)})),i("div",{staticClass:"c-quote-history-modal__controls"},[i("i",{class:e.upClass,on:{click:e.progressUp}}),i("i",{class:e.downClass,on:{click:e.progressDown}}),i("i",{class:e.leftClass,on:{click:e.progressLeft}}),i("i",{class:e.rightClass,on:{click:e.progressRight}})])],2)},eg=[],tg=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("CelestialQuoteBackground",{attrs:{"celestial-symbols":e.celestialSymbols,celestials:e.celestials,primary:e.primary}},[e.line.showCelestialName?i("span",{staticClass:"c-modal-celestial-name"},[e._v(" "+e._s(e.celestialName)+" ")]):e._e(),i("i",{class:e.leftClass,on:{click:function(t){return e.$emit("progress-in","left")}}}),i("span",{staticClass:"l-modal-celestial-quote__text"},[e._v(" "+e._s(e.message)+" ")]),i("i",{class:e.rightClass,on:{click:function(t){return e.$emit("progress-in","right")}}}),e.closeVisible?i("i",{staticClass:"c-modal-celestial-quote__end fas fa-check-circle",on:{click:e.emitClose}}):e._e()])},ig=[],ag=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.modalClass},[e._l(e.celestials,(function(t,a){return i("span",{key:a,staticClass:"c-modal-celestial-quote c-modal-celestial-quote__symbol",style:e.styleObject(t,.2,!0),domProps:{innerHTML:e._s(e.celestialSymbols[a])}})})),e._l(e.celestials,(function(t,a){return i("span",{key:a+10,staticClass:"c-modal-celestial-quote c-modal-celestial-quote__shadow",style:e.styleObject(t,1,!1)})})),e._l(e.celestials,(function(t,a){return i("span",{key:a+20,staticClass:"c-modal-celestial-quote c-modal-celestial-quote__text",style:e.styleObject(t,1,!0)},[e._t("default")],2)}))],2)},ng=[];const sg={name:"CelestialQuoteBackground",props:{celestialSymbols:{type:Array,required:!0},celestials:{type:Array,required:!0},primary:{type:Boolean,required:!0}},computed:{modalClass(){return{"l-modal-celestial-quote":!0}}},methods:{styleObject(e,t,i){const a=`var(--color-${e[0]}--base)`;return"laitela"===e[0]?{color:`var(--color-${e[0]}--accent)`,background:i?void 0:a,opacity:t*e[1]}:{color:a,opacity:t*e[1]}}}},rg=sg;var og=(0,X.Z)(rg,ag,ng,!1,null,"3f7bcfc0",null);const lg=og.exports,cg={name:"CelestialQuoteLine",components:{CelestialQuoteBackground:lg},props:{quote:{type:Object,required:!0},currentLine:{type:Number,required:!0},primary:{type:Boolean,required:!1,default:!1},leftVisible:{type:Boolean,required:!1,default:!1},rightVisible:{type:Boolean,required:!1,default:!1},closeVisible:{type:Boolean,required:!1,default:!1}},data(){return{message:"",celestialSymbols:[],celestials:[],celestialName:""}},computed:{line(){return this.quote.line(this.currentLine)},leftClass(){return{"c-modal-celestial-quote__arrow":!0,"c-modal-celestial-quote__arrow-left":!0,"c-modal-celestial-quote__arrow-invisible":!this.leftVisible,fas:!0,"fa-chevron-circle-left":!0}},rightClass(){return{"c-modal-celestial-quote__arrow":!0,"c-modal-celestial-quote__arrow-right":!0,"c-modal-celestial-quote__arrow-invisible":!this.rightVisible,fas:!0,"fa-chevron-circle-right":!0}}},methods:{update(){const e=this.line;this.celestialSymbols=e.celestialSymbols,this.message=e.line,this.celestials=e.celestials,this.celestialName=e.celestialName}}},ug=cg;var dg=(0,X.Z)(ug,tg,ig,!1,null,"7e428c16",null);const hg=dg.exports,mg={name:"CelestialQuoteHistoryDisplay",components:{CelestialQuoteLine:hg},props:{quotes:{type:Array,required:!0}},data(){return{focusedQuoteId:0,unlockedQuotes:[],lastProgress:Date.now()}},computed:{name(){return this.unlockedQuotes[0].quote._celestial},focusedQuote(){return this.unlockedQuotes[this.focusedQuoteId]},currentQuoteLine(){return this.focusedQuote.currentLine},commonButtonClass(){const e="laitela"===this.name&&!Theme.current().isDark();return{"fas c-modal-celestial-quote-history__arrow":!0,"o-dark-button":e,"o-light-button":!e}},upClass(){return(0,B.Z)((0,B.Z)({},this.commonButtonClass),{},{"c-modal-celestial-quote-history__arrow-up fa-chevron-circle-up":!0,"c-modal-celestial-quote-history__arrow--disabled":this.focusedQuoteId<=0})},downClass(){return(0,B.Z)((0,B.Z)({},this.commonButtonClass),{},{"c-modal-celestial-quote-history__arrow-down fa-chevron-circle-down":!0,"c-modal-celestial-quote-history__arrow--disabled":this.focusedQuoteId>=this.unlockedQuotes.length-1})},leftClass(){return(0,B.Z)((0,B.Z)({},this.commonButtonClass),{},{"c-modal-celestial-quote-history__arrow-left fa-chevron-circle-left":!0,"c-modal-celestial-quote-history__arrow--disabled":this.currentQuoteLine<=0})},rightClass(){return(0,B.Z)((0,B.Z)({},this.commonButtonClass),{},{"c-modal-celestial-quote-history__arrow-right fa-chevron-circle-right":!0,"c-modal-celestial-quote-history__arrow--disabled":this.currentQuoteLine>=this.focusedQuote.quote.totalLines-1})}},created(){this.unlockedQuotes=this.quotes.filter((e=>e.isUnlocked)).map((e=>({quote:e,currentLine:0}))),this.$nextTick((()=>{this.on$(GAME_EVENT.ARROW_KEY_PRESSED,(e=>{switch(e[0]){case"up":this.progressUp();break;case"down":this.progressDown();break;case"left":this.progressLeft();break;case"right":this.progressRight();break}}))}))},methods:{isFocused(e,t){return this.focusedQuoteId===e&&this.currentQuoteLine===t},quoteStyle(e,t){const i=e===this.focusedQuoteId?1-.3*(t!==this.currentQuoteLine):1-Math.abs(e-this.focusedQuoteId)/8,a=e===this.focusedQuoteId&&t!==this.currentQuoteLine?`translateX(${110*(t-this.currentQuoteLine)+20*Math.sign(t-this.currentQuoteLine)}%)`:"";return{top:`calc(50vh + ${16*pg(e-this.focusedQuoteId)}rem)`,transform:`translate(-50%, -50%) scale(${Math.max(i,0)}) ${a}`,opacity:Number(t===this.unlockedQuotes[e].currentLine||e===this.focusedQuoteId),visibility:t===this.unlockedQuotes[e].currentLine||e===this.focusedQuoteId?"visible":"hidden","z-index":-Math.abs(e-this.focusedQuoteId)}},progressUp(){Date.now()-this.lastProgress<150||(this.focusedQuoteId=Math.max(0,this.focusedQuoteId-1),this.lastProgress=Date.now())},progressDown(){Date.now()-this.lastProgress<150||(this.focusedQuoteId=Math.min(this.unlockedQuotes.length-1,this.focusedQuoteId+1),this.lastProgress=Date.now())},progressLeft(){Date.now()-this.lastProgress<150||(this.focusedQuote.currentLine=Math.max(0,this.focusedQuote.currentLine-1),this.lastProgress=Date.now())},progressRight(){Date.now()-this.lastProgress<150||(this.focusedQuote.currentLine=Math.min(this.focusedQuote.quote.totalLines-1,this.focusedQuote.currentLine+1),this.lastProgress=Date.now())},close(){Quote.clearHistory()}}};function pg(e){return Math.sign(e)*Math.pow(Math.abs(e),.4)}const yg=mg;var fg=(0,X.Z)(yg,Jf,eg,!1,null,"198b74ab",null);const gg=fg.exports;var vg=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-modal-overlay c-modal-overlay"},[i("CelestialQuoteLineBasicInteractable",{staticClass:"c-quote-overlay",attrs:{quote:e.quote}})],1)},bg=[],Eg=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("CelestialQuoteLine",{attrs:{quote:e.quote,"current-line":e.currentLine,"left-visible":!e.isQuoteStart&&e.leftVisible,"right-visible":!e.isQuoteEnd&&e.rightVisible,"close-visible":e.isQuoteEnd&&e.closeVisible,primary:""},on:{close:e.close,"progress-in":e.progressIn}})},Tg=[];const wg={name:"CelestialQuoteBasicInteractable",components:{CelestialQuoteLine:hg},props:{quote:{type:Object,required:!0},isFocused:{type:Boolean,required:!1,default:!0},primary:{type:Boolean,required:!1,default:!1},leftVisible:{type:Boolean,required:!1,default:!0},rightVisible:{type:Boolean,required:!1,default:!0},closeVisible:{type:Boolean,required:!1,default:!0}},data(){return{index:0}},computed:{totalLines(){return this.quote.totalLines},currentLine:{get(){return this.index},set(e){this.index=Math.clamp(e,0,this.totalLines-1)}},isQuoteStart(){return 0===this.currentLine},isQuoteEnd(){return this.currentLine===this.totalLines-1}},created(){this.$nextTick((()=>{this.on$(GAME_EVENT.ARROW_KEY_PRESSED,(e=>this.progressIn(e[0]))),this.on$(GAME_EVENT.ENTER_PRESSED,(()=>{this.isQuoteEnd&&this.close()}))}))},methods:{progressIn(e){if(!this.isFocused)return!1;switch(e){case"left":return this.currentLine--;case"right":return this.currentLine++;default:return!1}},close(){this.isFocused&&(this.index=0,Quote.advanceQueue())}}},kg=wg;var Cg=(0,X.Z)(kg,Eg,Tg,!1,null,null,null);const Ag=Cg.exports,_g={name:"CelestialQuoteModal",components:{CelestialQuoteLineBasicInteractable:Ag},props:{quote:{type:Object,required:!0}}},Sg=_g;var Dg=(0,X.Z)(Sg,vg,bg,!1,null,"4e0361e1",null);const Rg=Dg.exports;var Mg=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-credits-container",style:e.creditStyles},[i("i",{staticClass:"c-mute-button fa-solid",class:e.muteIconClass,style:e.muteStyle,on:{click:function(t){e.isMuted=!e.isMuted}}}),e._l(e.celestialDisplays,(function(t,a){return i("div",{key:a+"-end-credit-symbol-disp",staticClass:"c-credits-cel-symbol",class:"c-"+a+"-credits",domProps:{innerHTML:e._s(t)}})})),i("CreditsDisplay")],2)},Ig=[],xg=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:{"c-credits-s12-end":e.isS12EndDisplay}},[e.isModal?e._e():i("h1",{staticClass:"c-credits-header"},[e._v(" Antimatter Dimensions ")]),e._l(e.roles.count,(function(t){return i("div",{key:t},[i("h2",{staticClass:"c-credits-section"},[e._v(" "+e._s(e.pluralize(e.roles[t],e.relevantPeople(t).length))+" ")]),i("div",{class:{"l-credits--bulk":e.relevantPeople(t).length>10}},e._l(e.relevantPeople(t),(function(t){return i("div",{key:t.name,staticClass:"c-credit-entry"},[e._v(" "+e._s(t.name)+" "),t.name2?i("span",[e._v(" ("+e._s(t.name2)+") ")]):e._e()])})),0)])})),i("br"),i("br"),i("br"),i("br"),i("br"),i("br"),i("br"),i("br"),i("br"),i("h1",{staticClass:"c-credits-header"},[e._v(" Thank you so much for playing! ")])],2)},Pg=[];const Gg={name:"CreditsDisplay",props:{isModal:{type:Boolean,required:!1,default:!1}},computed:{people(){return GameDatabase.credits.people},roles(){return GameDatabase.credits.roles},isS12EndDisplay(){return"S12"===this.$viewModel.theme&&!this.isModal}},methods:{relevantPeople(e){return this.people.filter((t=>"number"===typeof t.roles?t.roles===e:t.roles.includes(e))).sort(((e,t)=>e.name.localeCompare(t.name)))}}},Ug=Gg;var Bg=(0,X.Z)(Ug,xg,Pg,!1,null,"5f15ce42",null);const Ng=Bg.exports,Og={name:"CreditsContainer",components:{CreditsDisplay:Ng},data(){return{rolling:!1,scroll:0,audio:null,isMuted:!1}},computed:{creditStyles(){return{bottom:`${this.scroll}rem`,display:this.rolling?"block":"none"}},muteStyle(){return{top:`calc(${this.scroll+2}rem - 100vh)`,display:this.rolling?"block":"none"}},muteIconClass(){return this.isMuted?"fa-volume-xmark":"fa-volume-high"},celestialDisplays(){return{teresa:Teresa.symbol,effarig:Effarig.symbol,enslaved:Enslaved.symbol,v:V.symbol,ra:Ra.symbol,laitela:Laitela.symbol,pelle:Pelle.symbol}}},watch:{rolling(e,t){GameEnd.creditsEverClosed||!t&&e&&null===this.audio&&(this.audio=new Audio("audio/credits.mp3"),this.audio.play())}},created(){const e=player.options.updateRate;player.options.updateRate=33,GameOptions.refreshUpdateRate(),player.options.updateRate=e},methods:{update(){this.rolling=!1,this.scroll=60*(Math.clampMax(GameEnd.endState,END_STATE_MARKERS.CREDITS_END)-END_STATE_MARKERS.CREDITS_START),this.audio&&(this.audio.volume=this.isMuted?0:Math.clamp(GameEnd.endState-END_STATE_MARKERS.CREDITS_START,0,.3))}}},Lg=Og;var Fg=(0,X.Z)(Lg,Mg,Ig,!1,null,"7244bf67",null);const $g=Fg.exports;var Hg=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-background-overlay",style:{opacity:e.opacity,pointerEvents:e.opacity>1?"auto":"none"}})},qg=[];const Vg={name:"FadeAway",data(){return{opacity:0}},methods:{update(){this.opacity=(GameEnd.endState-END_STATE_MARKERS.FADE_AWAY)/2}}},Yg=Vg;var Wg=(0,X.Z)(Yg,Hg,qg,!1,null,"0b58eaaa",null);const jg=Wg.exports;var Xg=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("div",{class:e.h2pClassObject,style:e.topMargin,on:{click:e.showH2P}},[e._v(" ? "),e.hasTutorial?i("div",{staticClass:"h2p-tooltip"},[e._v(" Click for info ")]):e._e()]),e.hasTutorial?i("div",{staticClass:"h2p-tutorial--glow",style:e.topMargin}):e._e(),i("div",{staticClass:"o-tab-btn l-information l-help-me",on:{click:e.showInfo}},[e._v(" i ")])])},zg=[];const Kg={name:"HowToPlay",data(){return{hasTutorial:!1,isModern:!1}},computed:{h2pClassObject(){return{"o-tab-btn l-help-me":!0}},topMargin(){return{"margin-top":this.isModern?"4.5rem":"1rem"}}},methods:{update(){this.hasTutorial=Tutorial.emphasizeH2P(),this.isModern="Modern"==player.options.UIType},showH2P(){Modal.h2p.show()},showInfo(){Modal.information.show()}}},Zg=Kg;var Qg=(0,X.Z)(Zg,Xg,zg,!1,null,"5bb5f9a0",null);const Jg=Qg.exports;var ev=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-modal-overlay c-modal-overlay progress-bar-modal"},[i("div",{staticClass:"c-modal"},[i("div",{staticClass:"modal-progress-bar"},[i("div",{staticClass:"modal-progress-bar__label"},[e._v(" "+e._s(e.progress.label)+" ")]),i("div",[e._v(" "+e._s(e.progress.info)+" ")]),i("div",{staticClass:"modal-progress-bar__margin"},[i("div",[e._v(" "+e._s(e.progress.progressName)+": "+e._s(e.formatInt(e.progress.current))+"/"+e._s(e.formatInt(e.progress.max))+" ")]),i("div",[e._v(" Remaining: "+e._s(e.remainingTime)+" ")]),i("div",{staticClass:"modal-progress-bar__hbox"},[i("div",{staticClass:"modal-progress-bar__bg"},[i("div",{staticClass:"modal-progress-bar__fg",style:e.foregroundStyle})])])]),i("div",{staticClass:"modal-progress-bar__buttons"},e._l(e.buttons,(function(t,a){return i("OfflineSpeedupButton",{key:a,attrs:{button:t,progress:e.progress}})})),1)])])])},tv=[],iv=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("PrimaryButton",{class:e.buttonClass,on:{click:e.buttonClicked}},[e._v(" "+e._s(e.button.text)+" ")])},av=[];const nv={name:"OfflineSpeedupButton",components:{PrimaryButton:Vs},props:{button:{type:Object,required:!0},progress:{type:Object,required:!0}},computed:{canBeClicked(){return this.button.condition(this.progress.current,this.progress.max)},buttonClass(){return{"o-primary-btn--width-medium":!0,"o-primary-btn--disabled":!this.canBeClicked}}},methods:{buttonClicked(){this.canBeClicked&&this.button.click()}}},sv=nv;var rv=(0,X.Z)(sv,iv,av,!1,null,null,null);const ov=rv.exports,lv={name:"ModalProgressBar",components:{OfflineSpeedupButton:ov},computed:{progress(){return this.$viewModel.modal.progressBar},foregroundStyle(){return{width:this.progress.current/this.progress.max*100+"%"}},remainingTime(){const e=Date.now()-this.progress.startTime,t=e*(this.progress.max-this.progress.current)/this.progress.current;return TimeSpan.fromMilliseconds(t).toStringShort()},buttons(){return this.progress.buttons||[]}}},cv=lv;var uv=(0,X.Z)(cv,ev,tv,!1,null,"699111cc",null);const dv=uv.exports;var hv=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isHidden?e._e():i("div",{staticClass:"c-modern-sidebar"},[i("ModernSidebarCurrency"),e._l(e.tabs,(function(t,a){return[e.tabVisibilities[a]?i("ModernTabButton",{key:t.name,attrs:{tab:t,"tab-position":a}}):e._e()]}))],2)},mv=[],pv=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-sidebar-resource"},[e.showMvR?[i("h2",{staticClass:"o-sidebar-currency--mending"},[e._v(" "+e._s(e.format(e.MvR,2))+" ")]),i("div",{staticClass:"c-sidebar-resource__information"},[i("span",{staticClass:"c-sidebar-resource__name"},[e._v(e._s(e.pluralize("Multiversal Remain",e.MvR)))])])]:e.showRS?[i("h2",{staticClass:"o-sidebar-currency--pelle"},[e._v(" "+e._s(e.format(e.RS,2))+" ")]),i("div",{staticClass:"c-sidebar-resource__information"},[i("span",{staticClass:"c-sidebar-resource__name"},[e._v(e._s(e.pluralize("Reality Shard",e.RS)))])])]:e.showRM?[0===e.IM?[i("h2",{staticClass:"o-sidebar-currency--reality"},[e._v(" "+e._s(e.format(e.RM,2))+" ")]),i("div",{staticClass:"c-sidebar-resource__information"},[i("span",{staticClass:"c-sidebar-resource__name"},[e._v(e._s(e.pluralize("Reality Machine",e.RM)))])])]:[i("h3",{staticClass:"o-sidebar-currency--reality"},[e._v(" "+e._s(e.machineStr)+" ")]),e._m(0)]]:e.showEP?[i("h2",{staticClass:"o-sidebar-currency--eternity"},[e._v(" "+e._s(e.format(e.EP,2))+" ")]),i("div",{staticClass:"c-sidebar-resource__information"},[i("span",{staticClass:"c-sidebar-resource__name"},[e._v(e._s(e.pluralize("Eternity Point",e.EP)))])])]:e.showIP?[i("h2",{staticClass:"o-sidebar-currency--infinity"},[e._v(" "+e._s(e.format(e.IP,2))+" ")]),i("div",{staticClass:"c-sidebar-resource__information"},[i("span",{staticClass:"c-sidebar-resource__name"},[e._v(e._s(e.pluralize("Infinity Point",e.IP)))])])]:[i("h2",{staticClass:"o-sidebar-currency--antimatter"},[e._v(" "+e._s(e.format(e.AM,2,1))+" ")]),e._m(1)]],2)},yv=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-sidebar-resource__information"},[i("span",{staticClass:"c-sidebar-resource__name"},[e._v("Machines")])])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-sidebar-resource__information"},[i("span",{staticClass:"c-sidebar-resource__name"},[e._v("Antimatter")])])}];const fv={name:"ModernSidebarCurrency",data(){return{AM:new Decimal(0),IP:new Decimal(0),EP:new Decimal(0),RM:new Decimal(0),IM:0,RS:new Decimal(0),MvR:new Decimal(0),machineStr:"",showIP:!1,showEP:!1,showRM:!1,showRS:!1,showMvR:!1}},methods:{update(){this.AM.copyFrom(Currency.antimatter),this.IP.copyFrom(Currency.infinityPoints.value.floor()),this.EP.copyFrom(Currency.eternityPoints.value.floor()),this.RM.copyFrom(Currency.realityMachines.value.floor()),this.IM=Currency.imaginaryMachines.value,this.RS.copyFrom(Currency.realityShards),this.MvR.copyFrom(Currency.mendingPoints),this.machineStr=formatMachines(this.RM,this.IM),this.showIP=PlayerProgress.infinityUnlocked(),this.showEP=PlayerProgress.eternityUnlocked(),this.showRM=PlayerProgress.realityUnlocked(),this.showRS=Pelle.isDoomed,this.showMvR=PlayerProgress.mendingUnlocked()}}},gv=fv;var vv=(0,X.Z)(gv,pv,yv,!1,null,"bed69948",null);const bv=vv.exports;var Ev=function(){var e=this,t=e.$createElement,i=e._self._c||t;return!e.isHidden&&e.isAvailable?i("div",{class:[e.classObject,e.tab.config.UIClass]},[i("div",{staticClass:"l-tab-btn-inner",on:{click:function(t){return e.tab.show(!0)}}},[e._v(" "+e._s(e.tabName)+" "),e.hasNotification?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()]),e.showSubtabs?i("div",{staticClass:"subtabs"},[e._l(e.tab.subtabs,(function(t,a){return[e.subtabVisibilities[a]?i("div",{key:a,staticClass:"o-tab-btn o-tab-btn--subtab",class:[e.tab.config.UIClass,{"o-subtab-btn--active":e.isCurrentSubtab(t.id)}],on:{click:function(e){return t.show(!0)}}},[i("span",{domProps:{innerHTML:e._s(t.symbol)}}),t.hasNotification?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e(),i("div",{staticClass:"o-subtab__tooltip"},[e._v(" "+e._s(t.name)+" ")])]):e._e()]}))],2):e._e()]):e._e()},Tv=[];const wv={name:"ModernTabButton",props:{tab:{type:Object,required:!0},tabPosition:{type:Number,required:!0}},data(){return{isAvailable:!1,isHidden:!1,subtabVisibilities:[],showSubtabs:!1,hasNotification:!1,tabName:""}},computed:{classObject(){return{"o-tab-btn":!0,"o-tab-btn--modern-tabs":!0,"o-tab-btn--subtabs":this.showSubtabs,"o-tab-btn--active":this.isCurrentTab&&"S9"!==Theme.currentName()}},isCurrentTab(){return this.tab.isOpen}},methods:{update(){this.isAvailable=this.tab.isAvailable,this.isHidden=this.tab.isHidden,this.subtabVisibilities=this.tab.subtabs.map((e=>e.isAvailable)),this.showSubtabs=this.isAvailable&&this.subtabVisibilities.length>=1,this.hasNotification=this.tab.hasNotification,this.tabPositionTabs.Modern},methods:{update(){this.isHidden=AutomatorData.isEditorFullscreen,this.tabVisibilities=Tabs.Modern.map((e=>e.isAvailable))}}},Sv=_v;var Dv=(0,X.Z)(Sv,hv,mv,!1,null,"3833c36e",null);const Rv=Dv.exports;var Mv=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-new-game-container",style:e.style},[i("h2",[e._v(" ...I have won, but at what cost. Surely there has to be another way... ")]),i("h3",[e._v("Reset the entire game (including best Challenge Times and Best AM), but keep Automator Scripts, Secret Themes, Achievements, and Options.")]),i("div",{staticClass:"c-new-game-button-container"},[i("button",{staticClass:"c-new-game-button",on:{click:e.startNewGame}},[e._v(" Mend the Multiverse ")])]),i("br"),e.hasMoreCosmetics?i("h3",[e._v(" Since Royal is feeling generous today, you also unlock a new cosmetic set of your choice for Glyphs. These are freely modifiable once you reach Reality again, but are purely visual and offer no gameplay bonuses. "),i("br"),i("button",{staticClass:"c-new-game-button",on:{click:e.openSelectionModal}},[e._v(" Choose Cosmetic Set ")]),i("br"),i("br"),e._v(" Selected Set: "+e._s(e.selectedSetName)+" ")]):i("h3",[e._v(" You have unlocked all Glyph cosmetic sets! ")]),i("br"),i("h3",[e._v(" This screen is temporary until the fancy graphics are done. ")])])},Iv=[];const xv={name:"NewGame",data(){return{gainedMvR:new Decimal(0),opacity:0,visible:!1,hasMoreCosmetics:!1,selectedSetName:""}},computed:{style(){return{opacity:this.opacity,visibility:this.visible?"visible":"hidden"}}},methods:{update(){var e,t;this.gainedMvR.copyFrom(gainedMendingPoints()),this.visible=GameEnd.endState>END_STATE_MARKERS.SHOW_NEW_GAME&&!GameEnd.removeAdditionalEnd,this.opacity=2*(GameEnd.endState-END_STATE_MARKERS.SHOW_NEW_GAME),this.hasMoreCosmetics=GlyphAppearanceHandler.lockedSets.length>0,this.selectedSetName=null!==(e=null===(t=GlyphAppearanceHandler.chosenFromModal)||void 0===t?void 0:t.name)&&void 0!==e?e:"None (will choose randomly)"},startNewGame(){mendingResetRequest()},openSelectionModal(){Modal.cosmeticSetChoice.show()}}},Pv=xv;var Gv=(0,X.Z)(Pv,Mv,Iv,!1,null,"0fe0fd40",null);const Uv=Gv.exports;var Bv=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.showModal?i("div",{ref:"modal",staticClass:"c-modal l-modal",style:e.positionStyle},[i(e.modal.component,e._b({tag:"component",on:{close:e.hide}},"component",e.modal.props,!1))],1):e._e()},Nv=[];const Ov={name:"PopupModal",props:{modal:{type:Object,required:!0}},data(){return{showModal:!1,positionStyle:{}}},created(){this.on$(GAME_EVENT.CLOSE_MODAL,this.hide)},mounted(){this.updatePositionStyles()},destroyed(){document.activeElement.blur()},methods:{update(){const e=this.showModal;this.showModal=GameEnd.endState<=END_STATE_MARKERS.INTERACTIVITY_DISABLED||"CosmeticSetChoiceModal"===this.modal.component.name||"MendingModal"===this.modal.component.name,this.showModal!==e&&this.$nextTick((()=>this.updatePositionStyles())),this.updatePositionStyles()},updatePositionStyles(){if(!this.$refs.modal)return;if(!this.showModal||"S12"!==this.$viewModel.theme)return void(this.positionStyle={});const e=this.$refs.modal.offsetWidth,t=this.$refs.modal.offsetHeight;this.positionStyle={left:`${Math.round(innerWidth/2-e/2)}px`,top:`${Math.round(innerHeight/2-t/2)}px`,transform:"none"}},hide(){this.modal.isOpen&&(this.modal.hide?this.modal.hide():Modal.hide())}}},Lv=Ov;var Fv=(0,X.Z)(Lv,Bv,Nv,!1,null,null,null);const $v=Fv.exports;var Hv=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.showTimeSinceSave?i("div",{staticClass:"o-save-timer",on:{click:e.save}},[e.saveDisabled?i("b",[e._v("There is nothing left to save...Or is there?")]):i("span",[e._v("Time since last save: "+e._s(e.timeString))])]):e._e()},qv=[];const Vv={name:"SaveTimer",data(){return{currentTime:0,cloudSaveEnabled:!1,lastLocalSave:0,lastCloudSave:0,showTimeSinceSave:!1,saveDisabled:!1}},computed:{timeString(){const e=timeDisplayShort(this.currentTime-this.lastLocalSave),t=timeDisplayShort(this.currentTime-this.lastCloudSave);return this.cloudSaveEnabled?`${e} (local) | ${t} (cloud)`:e}},methods:{update(){this.currentTime=Date.now(),this.cloudSaveEnabled=player.options.cloudEnabled&&Cloud.loggedIn,this.lastLocalSave=GameStorage.lastSaveTime,this.lastCloudSave=GameStorage.lastCloudSave,this.showTimeSinceSave=player.options.showTimeSinceSave,this.saveDisabled=GameEnd.endState>=END_STATE_MARKERS.INTERACTIVITY_DISABLED},save(){GameStorage.save(!1,!0)}}},Yv=Vv;var Wv=(0,X.Z)(Yv,Hv,qv,!1,null,"4038e6d6",null);const jv=Wv.exports;var Xv=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.showSpectate?i("div",{key:e.endState},[i("PrimaryButton",{staticClass:"c-swap-button o-primary-btn--modal-close c-modal__close-btn tutorial--glow",on:{click:e.swap}},[i("i",{staticClass:"fas fa-sync"})])],1):e._e()},zv=[];const Kv={name:"SpectateGame",components:{PrimaryButton:Vs},data(){return{showSpectate:Boolean}},methods:{update(){this.showSpectate=GameEnd.endState>END_STATE_MARKERS.SPECTATE_GAME,this.endState=GameEnd.endState},swap(){GameEnd.creditsClosed=!GameEnd.creditsClosed,GameEnd.creditsEverClosed||(GameEnd.creditsEverClosed=!0)}}},Zv=Kv;var Qv=(0,X.Z)(Zv,Xv,zv,!1,null,"21f229d4",null);const Jv=Qv.exports;var eb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isActive?i("div",{staticClass:"c-speedrun-status"},[e.isCollapsed?e._e():i("div",[i("b",[e._v("Speedrun Status ("),i("span",{domProps:{innerHTML:e._s(e.statusText)}}),e._v(")")]),i("br"),i("span",{class:{"c-speedrun-status--can-change":!e.hasStarted},on:{click:e.changeName}},[e._v(" Player Name: "+e._s(e.saveName)+" ")]),i("br"),i("i",[e._v(e._s(e.segmentText))]),i("br"),i("i",[e._v(e._s(e.iapText))]),i("br"),i("span",{class:{"c-speedrun-status--can-change":e.canModifySeed},on:{click:function(t){return e.openSeedModal()}}},[e._v(e._s(e.seedText))]),i("br"),e._v(" Total real playtime since start: "+e._s(e.timePlayedStr)+" "),i("br"),e._v(" Offline Progress: "),i("span",{domProps:{innerHTML:e._s(e.offlineText)}}),i("br"),e._v(" Most Recent Milestone: "+e._s(e.milestoneName(e.mostRecent))+" "),e.mostRecent?i("span",[e._v("("+e._s(e.timeSince)+" ago)")]):e._e(),i("br")]),i("div",{staticClass:"c-speedrun-status--collapse",on:{click:e.toggleCollapse}},[i("i",{class:e.collapseIcon}),e._v(" "+e._s(e.collapseText())+" "),i("i",{class:e.collapseIcon})])]):e._e()},tb=[];const ib={name:"SpeedrunStatus",data(){return{isActive:!1,isSegmented:!1,usedSTD:!1,hasStarted:!1,startDate:0,saveName:"",timePlayedStr:"",offlineProgress:!1,offlineFraction:0,mostRecent:{},isCollapsed:!1,timeSince:0,seedText:0,canModifySeed:!1,isComplete:!1}},computed:{statusText(){return this.isComplete?'Finished!':this.hasStarted?'Running!':'Not Started Yet'},segmentText(){return this.isSegmented?"Segmented Speedrun (imported save)":"Single-segment Speedrun (no save import)"},iapText(){return this.usedSTD?"IAPs have been used":"No IAPs Used"},offlineText(){const e=this.offlineProgress?'Enabled':'Disabled',t=0===this.offlineFraction?"(No offline time used)":`(${formatPercents(this.offlineFraction,2)} time spent offline)`;return`${e} ${t}`},collapseIcon(){return this.isCollapsed?"fas fa-expand-arrows-alt":"fas fa-compress-arrows-alt"}},methods:{update(){var e;const t=player.speedrun;this.isActive=t.isActive,this.canModifySeed=Speedrun.canModifySeed(),this.isActive&&(this.isSegmented=t.isSegmented,this.usedSTD=t.usedSTD,this.hasStarted=t.hasStarted,this.startDate=t.startDate,this.saveName=t.name,this.isCollapsed=t.hideInfo,this.isComplete=Achievement(188).isUnlocked,this.timePlayedStr=Time.realTimePlayed.toStringShort(),this.offlineProgress=player.options.offlineProgress,this.offlineFraction=t.offlineTimeUsed/Math.clampMin(player.records.realTimePlayed,1),this.mostRecent=Speedrun.mostRecentMilestone(),this.timeSince=Time.realTimePlayed.minus(TimeSpan.fromMilliseconds(null!==(e=t.records[this.mostRecent])&&void 0!==e?e:0)).toStringShort(),this.seedText=Speedrun.seedModeText())},milestoneName(e){const t=GameDatabase.speedrunMilestones;return 0===e?"None":t.find((t=>t.id===e)).name},changeName(){this.hasStarted||Modal.changeName.show()},collapseText(){return this.isCollapsed?"Expand":"Click to collapse Speedrun info"},toggleCollapse(){player.speedrun.hideInfo=!this.isCollapsed},openSeedModal(){this.canModifySeed&&Modal.modifySeed.show()}}},ab=ib;var nb=(0,X.Z)(ab,eb,tb,!1,null,"5faa7a14",null);const sb=nb.exports;var rb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"time-theorem-buttons"},[i("div",{staticClass:"ttshop-container ttshop-background"},[i("div",{staticClass:"ttbuttons-row ttbuttons-top-row",attrs:{"data-role":"page"}},[e._m(0),i("p",{staticClass:"timetheorems"},[i("span",{staticClass:"c-tt-amount"},[e._v(" "+e._s(e.quantify("Time Theorem",e.theoremAmount,2,0,e.formatTimeTheoremType))+" ")]),e.showST?i("span",[i("br"),e._v(" "+e._s(e.quantifyInt("Space Theorem",e.STamount))+" ")]):e._e()]),i("div",{staticClass:"l-load-tree-area"},[i("div",{staticClass:"l-tree-load-button-wrapper"},[i("span",{staticClass:"c-ttshop__save-load-text"},[e._v(e._s(e.saveLoadText))]),e._l(6,(function(e){return i("TimeStudySaveLoadButton",{key:e,attrs:{saveslot:e}})}))],2),i("div",{staticClass:"tt-gen-container"},[e.hasTTGen?i("span",{staticClass:"checkbox-margin",attrs:{"ach-tooltip":"This shows TT generation by default and total TT if you hold shift.\n Check this box to swap this behavior."}},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.invertTTgenDisplay,expression:"invertTTgenDisplay"}],staticClass:"o-clickable",attrs:{type:"checkbox"},domProps:{value:e.invertTTgenDisplay,checked:Array.isArray(e.invertTTgenDisplay)?e._i(e.invertTTgenDisplay,e.invertTTgenDisplay)>-1:e.invertTTgenDisplay},on:{input:function(t){return e.toggleTTgen()},change:function(t){var i=e.invertTTgenDisplay,a=t.target,n=!!a.checked;if(Array.isArray(i)){var s=e.invertTTgenDisplay,r=e._i(i,s);a.checked?r<0&&(e.invertTTgenDisplay=i.concat([s])):r>-1&&(e.invertTTgenDisplay=i.slice(0,r).concat(i.slice(r+1)))}else e.invertTTgenDisplay=n}}})]):e._e(),e.showTTGen?i("span",[e._v(" You are gaining "+e._s(e.TTgenRateText)+". ")]):i("span",[e._v(" You have "+e._s(e.totalTimeTheoremText)+". ")])])])]),e.minimized?i("div",{staticClass:"ttbuttons-row ttbuttons-bottom-row-hide"}):i("div",{staticClass:"ttbuttons-row",style:e.shopBottomRowHeightStyle},[i("TimeTheoremBuyButton",{attrs:{budget:e.budget.am,cost:e.costs.am,"format-cost":e.formatAM,action:e.buyWithAM}}),i("TimeTheoremBuyButton",{attrs:{budget:e.budget.ip,cost:e.costs.ip,"format-cost":e.formatIP,action:e.buyWithIP}}),i("TimeTheoremBuyButton",{attrs:{budget:e.budget.ep,cost:e.costs.ep,"format-cost":e.formatEP,action:e.buyWithEP}}),i("div",{staticClass:"l-tt-buy-max-vbox"},[e.minimized?e._e():i("button",{staticClass:"o-tt-top-row-button c-tt-buy-button c-tt-buy-button--unlocked",on:{click:e.buyMaxTheorems}},[e._v(" Buy max ")]),!e.minimized&&e.hasTTAutobuyer?i("PrimaryToggleButton",{staticClass:"o-tt-autobuyer-button c-tt-buy-button c-tt-buy-button--unlocked",attrs:{label:"Auto:"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}}):e._e()],1)],1)]),e.minimizeAvailable?i("button",{staticClass:"ttshop-minimize-btn ttshop-background",on:{click:e.minimize}},[i("span",{staticClass:"minimize-arrow",style:e.minimizeArrowStyle},[e._v("▼")])]):e._e()])},ob=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"l-tt-save-load-btn c-tt-buy-button c-tt-buy-button--unlocked",attrs:{onClick:"Modal.preferredTree.show()"}},[i("i",{staticClass:"fas fa-cog"})])}],lb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("HoverMenu",{staticClass:"l-tt-save-load-btn__wrapper",scopedSlots:e._u([{key:"object",fn:function(){return[i("button",{staticClass:"l-tt-save-load-btn c-tt-buy-button c-tt-buy-button--unlocked",on:{click:[function(t){return t.shiftKey?t.ctrlKey||t.altKey||t.metaKey?null:e.save.apply(null,arguments):null},function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.load.apply(null,arguments)}]}},[e._v(" "+e._s(e.displayName)+" ")])]},proxy:!0},{key:"menu",fn:function(){return[i("div",{staticClass:"l-tt-save-load-btn__menu c-tt-save-load-btn__menu"},[i("span",{attrs:{"ach-tooltip":"Set a custom name (up to 4 ASCII characters)"}},[i("input",{staticClass:"l-tt-save-load-btn__menu-rename c-tt-save-load-btn__menu-rename",attrs:{type:"text",size:"4",maxlength:"4"},domProps:{value:e.name},on:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.hideContextMenu.apply(null,arguments)},blur:e.nicknameBlur}})]),i("div",{staticClass:"l-tt-save-load-btn__menu-item c-tt-save-load-btn__menu-item",on:{click:e.edit}},[e._v(" Edit ")]),i("div",{staticClass:"l-tt-save-load-btn__menu-item c-tt-save-load-btn__menu-item",on:{click:e.handleExport}},[e._v(" Export ")]),i("div",{staticClass:"l-tt-save-load-btn__menu-item c-tt-save-load-btn__menu-item",on:{click:e.save}},[e._v(" Save ")]),i("div",{staticClass:"l-tt-save-load-btn__menu-item"},[i("div",{staticClass:"c-tt-save-load-btn__menu-item",on:{click:e.load}},[e._v(" Load ")]),i("div",{staticClass:"c-tt-save-load-btn__menu-item__hover-options"},[i("div",{class:{"c-tt-save-load-btn__menu-item__hover-option":!0,"c-tt-save-load-btn__menu-item__hover-option--disabled":!e.canEternity},on:{click:e.respecAndLoad}},[e._v(" Respec and Load ")])])]),i("div",{staticClass:"l-tt-save-load-btn__menu-item c-tt-save-load-btn__menu-item",on:{click:e.deletePreset}},[e._v(" Delete ")])])]},proxy:!0}])})},cb=[],ub=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",e._g({staticClass:"hover-menu__wrapper",on:{contextmenu:function(t){return t.preventDefault(),e.toggleContextMenu.apply(null,arguments)}}},e.listeners),[e._t("object"),e.contextMenuIsVisible?e._t("menu"):e._e()],2)},db=[];const hb={name:"HoverMenu",props:{saveslot:{type:Number,default:0}},data:()=>({componentID:UIID.next(),contextMenuHideTimer:null,contextMenuShowTimer:null}),computed:{contextMenuIsVisible(){return this.$viewModel.currentContextMenu===this.componentID},listeners(){return Object.assign({},this.$listeners,{touchstart:()=>this.startShowTimer(),mouseenter:()=>this.startShowTimer(),mouseleave:()=>this.startHideTimer()})}},methods:{startShowTimer(){this.stopHideTimer(),this.contextMenuIsVisible||this.contextMenuShowTimer||(this.contextMenuShowTimer=setTimeout((()=>{this.contextMenuShowTimer=null,this.showContextMenu()}),250))},showContextMenu(){this.stopTimers(),this.$viewModel.currentContextMenu=this.componentID},startHideTimer(){this.stopShowTimer(),this.contextMenuIsVisible&&!this.contextMenuHideTimer&&(this.contextMenuHideTimer=setTimeout((()=>{this.contextMenuHideTimer=null,this.hideContextMenu()}),500))},hideContextMenu(){this.stopTimers(),this.$viewModel.currentContextMenu===this.componentID&&(this.$viewModel.currentContextMenu=null)},toggleContextMenu(){this.contextMenuIsVisible?this.hideContextMenu():this.showContextMenu()},stopTimers(){this.stopHideTimer(),this.stopShowTimer()},stopHideTimer(){this.contextMenuHideTimer&&(clearTimeout(this.contextMenuHideTimer),this.contextMenuHideTimer=null)},stopShowTimer(){this.contextMenuShowTimer&&(clearTimeout(this.contextMenuShowTimer),this.contextMenuShowTimer=null)}}},mb=hb;var pb=(0,X.Z)(mb,ub,db,!1,null,"0f008cfb",null);const yb=pb.exports,fb={name:"TimeStudySaveLoadButton",components:{HoverMenu:yb},props:{saveslot:{type:Number,required:!0}},data(){return{name:"",displayName:"",canEternity:!1}},computed:{preset(){return player.timestudy.presets[this.saveslot-1]}},methods:{update(){this.name=player.timestudy.presets[this.saveslot-1].name,this.displayName=""===this.name?this.saveslot:this.name,this.canEternity=Player.canEternity},nicknameBlur(e){const t=e.target.value.slice(0,4).trim();if(!this.isASCII(t))return;const i=player.timestudy.presets.map((e=>e.name));i.includes(t)||(this.preset.name=t,this.name=this.preset.name)},hideContextMenu(){this.$viewModel.currentContextMenu=null},isASCII(e){return!/(?:(?![\0-\xFF])[\s\S])/.test(e)},save(){this.hideContextMenu(),this.preset.studies=GameCache.currentStudyTree.value.exportString;const e=this.name?`Study preset "${this.name}"`:"Study preset";GameUI.notify.eternity(`${e} saved in slot ${this.saveslot}`)},load(){if(this.hideContextMenu(),this.preset.studies){const e=new TimeStudyTree;e.attemptBuyArray(TimeStudyTree.currentStudies,!1),e.attemptBuyArray(e.parseStudyImport(this.preset.studies),!0),TimeStudyTree.commitToGameState(e.purchasedStudies,!1,e.startEC);const t=this.name?`Study preset "${this.name}"`:"Study preset";GameUI.notify.eternity(`${t} loaded from slot ${this.saveslot}`)}else Modal.message.show("This Time Study list currently contains no Time Studies.")},respecAndLoad(){if(Player.canEternity){player.respec=!0;const e=new TimeStudyTree;e.attemptBuyArray(e.parseStudyImport(this.preset.studies)),animateAndEternity((()=>TimeStudyTree.commitToGameState(e.purchasedStudies,!1,e.startEC)))}},deletePreset(){this.hideContextMenu(),this.preset.studies?Modal.studyString.show({id:this.saveslot-1,deleting:!0}):Modal.message.show("This Time Study list currently contains no Time Studies.")},handleExport(){this.hideContextMenu(),copyToClipboard(this.preset.studies);const e=this.name?`Study preset "${this.name}"`:"Study preset";GameUI.notify.eternity(`${e} exported from slot ${this.saveslot} to your clipboard`)},edit(){Modal.studyString.show({id:this.saveslot-1})}}},gb=fb;var vb=(0,X.Z)(gb,lb,cb,!1,null,"b401e76c",null);const bb=vb.exports;var Eb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"l-tt-buy-button c-tt-buy-button",class:e.enabledClass,on:{click:e.action}},[e._v(" "+e._s(e.isLocked?"Requires an Eternity to unlock":e.formatCost(e.cost))+" ")])},Tb=[];const wb={props:{budget:Decimal,cost:Decimal,formatCost:{type:Function,required:!0},action:{type:Function,required:!0}},data(){return{isLocked:!1}},computed:{isEnabled(){return!this.isLocked&&this.budget.gte(this.cost)},enabledClass(){return!this.isEnabled||this.isLocked?"c-tt-buy-button--locked":"c-tt-buy-button--unlocked"}},methods:{update(){this.isLocked=player.eternities.eq(0)}}},kb=wb;var Cb=(0,X.Z)(kb,Eb,Tb,!1,null,null,null);const Ab=Cb.exports,_b={name:"TimeTheoremShop",components:{PrimaryToggleButton:Sh,TimeTheoremBuyButton:Ab,TimeStudySaveLoadButton:bb},data(){return{theoremAmount:new Decimal(0),theoremGeneration:new Decimal(0),totalTimeTheorems:new Decimal(0),shopMinimized:!1,minimizeAvailable:!1,hasTTAutobuyer:!1,isAutobuyerOn:!1,budget:{am:new Decimal(0),ip:new Decimal(0),ep:new Decimal(0)},costs:{am:new Decimal(0),ip:new Decimal(0),ep:new Decimal(0)},showST:!1,STamount:0,hasTTGen:!1,showTTGen:!1,invertTTgenDisplay:!1}},computed:{minimized(){return this.minimizeAvailable&&this.shopMinimized},formatTimeTheoremType(){return this.theoremAmount.gte(1e6)?format:!Teresa.isRunning&&!Enslaved.isRunning&&getAdjustedGlyphEffect("dilationTTgen")>0&&!DilationUpgrade.ttGenerator.isBought?formatFloat:formatInt},TTgenRateText(){return this.theoremGeneration.lt(1/3600)?`one TT every ${TimeSpan.fromSeconds(this.theoremGeneration.reciprocal().toNumber()).toStringShort(!1)}`:this.theoremGeneration.lt(.1)?`${format(this.theoremGeneration.times(3600),2,2)} TT/hour`:`${format(this.theoremGeneration,2,2)} TT/sec`},totalTimeTheoremText(){return`${quantify("total Time Theorem",this.totalTimeTheorems,2,2,this.formatTimeTheoremType)}`},minimizeArrowStyle(){return{transform:this.minimized?"rotate(-180deg)":"",transition:"all 0.25s ease-out"}},saveLoadText(){return this.$viewModel.shiftDown?"Save:":"Load:"},shopBottomRowHeightStyle(){return{height:this.hasTTAutobuyer?"6.7rem":"4.4rem"}}},watch:{isAutobuyerOn(e){Autobuyer.timeTheorem.isActive=e},invertTTgenDisplay(e){player.options.invertTTgenDisplay=e}},methods:{minimize(){player.timestudy.shopMinimized=!player.timestudy.shopMinimized},formatAM(e){return`${format(e)} AM`},buyWithAM(){TimeTheorems.buyOne(!1,"am")},formatIP(e){return`${format(e)} IP`},buyWithIP(){TimeTheorems.buyOne(!1,"ip")},formatEP(e){return`${format(e,2,0)} EP`},buyWithEP(){TimeTheorems.buyOne(!1,"ep")},buyMaxTheorems(){TimeTheorems.buyMax(!1)},update(){this.theoremAmount.copyFrom(Currency.timeTheorems),this.theoremGeneration.copyFrom(getTTPerSecond().times(getGameSpeedupForDisplay())),this.totalTimeTheorems.copyFrom(Currency.timeTheorems.max),this.shopMinimized=player.timestudy.shopMinimized,this.hasTTAutobuyer=Autobuyer.timeTheorem.isUnlocked,this.isAutobuyerOn=Autobuyer.timeTheorem.isActive,this.minimizeAvailable=DilationUpgrade.ttGenerator.isBought||this.hasTTAutobuyer;const e=this.budget;e.am.copyFrom(TimeTheoremPurchaseType.am.currency),e.ip.copyFrom(TimeTheoremPurchaseType.ip.currency),e.ep.copyFrom(TimeTheoremPurchaseType.ep.currency);const t=this.costs;t.am.copyFrom(TimeTheoremPurchaseType.am.cost),t.ip.copyFrom(TimeTheoremPurchaseType.ip.cost),t.ep.copyFrom(TimeTheoremPurchaseType.ep.cost),this.showST=V.spaceTheorems>0&&!Pelle.isDoomed,this.STamount=V.availableST,this.hasTTGen=this.theoremGeneration.gt(0),this.showTTGen=this.hasTTGen&&ui.view.shiftDown===this.invertTTgenDisplay,this.invertTTgenDisplay=player.options.invertTTgenDisplay},toggleTTgen(){this.invertTTgenDisplay=!this.invertTTgenDisplay}}},Sb=_b;var Db=(0,X.Z)(Sb,rb,ob,!1,null,"46d9db85",null);const Rb=Db.exports,Mb={name:"GameUiComponentFixed",components:{HowToPlay:Jg,TimeTheoremShop:Rb,ModernSidebar:Rv,SaveTimer:jv,SpeedrunStatus:sb,PopupModal:$v,ModalProgressBar:dv,CelestialQuoteModal:Rg,CelestialQuoteHistoryDisplay:gg,FadeAway:jg,CreditsContainer:$g,SpectateGame:Jv,NewGame:Uv},data(){return{ending:!1}},computed:{view(){return this.$viewModel},hideIfMatoFullscreen(){return{visibility:ui.view.tabs.reality.automator.fullScreen?"hidden":"visible"}}},methods:{update(){this.ending=GameEnd.endState>=END_STATE_MARKERS.FADE_AWAY&&!GameEnd.creditsClosed}}},Ib=Mb;var xb=(0,X.Z)(Ib,Zf,Qf,!1,null,"0ae8982e",null);const Pb=xb.exports;var Gb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{attrs:{id:"page"}},[i("link",{attrs:{rel:"stylesheet",type:"text/css",href:"stylesheets/modern-styles.css"}}),i("div",{key:e.newGameKey,staticClass:"game-container",style:e.topMargin},[e.news?i("NewsTicker"):e._e(),e.hasMendingButton?i("div",{staticClass:"c-mending-points"},[i("MendingPointsHeader"),i("MendingButton")],1):e._e(),i("BigCrunchButton"),e.bigCrunch?e._e():i("div",{staticClass:"tab-container"},[i("HeaderPrestigeGroup"),i("div",{staticClass:"information-header"},[i("HeaderChallengeDisplay"),i("HeaderChallengeEffects"),e.hasReality?i("GameSpeedDisplay"):e._e(),e.hasReality?i("br"):e._e(),i("HeaderBlackHole")],1),e._t("default")],2)],1)])},Ub=[];const Bb={name:"ModernUi",components:{BigCrunchButton:dh,HeaderChallengeDisplay:qh,HeaderChallengeEffects:zh,NewsTicker:uf,HeaderBlackHole:Ih,HeaderPrestigeGroup:Jy,GameSpeedDisplay:ny,MendingPointsHeader:sh,MendingButton:gm},data(){return{bigCrunch:!1,hasReality:!1,newGameKey:"",hasMendingButton:!1,mendingPoints:new Decimal(0)}},computed:{news(){return this.$viewModel.news},topMargin(){return this.$viewModel.news?"":"margin-top: 3.9rem"}},methods:{update(){const e=!player.break&&Player.canCrunch;this.bigCrunch=e&&Time.bestInfinityRealTime.totalMinutes.gt(1),this.hasReality=PlayerProgress.realityUnlocked(),this.newGameKey=Pelle.isDoomed,this.hasMendingButton=PlayerProgress.mendingUnlocked()||player.isGameEnd&&GameEnd.endState>=14.5,this.mendingPoints.copyFrom(Currency.mendingPoints.value.floor())},handleClick(){PlayerProgress.infinityUnlocked()?manualBigCrunchResetRequest():Modal.bigCrunch.show()}}},Nb=Bb;var Ob=(0,X.Z)(Nb,Gb,Ub,!1,null,"5d0773f0",null);const Lb=Ob.exports;var Fb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{key:e.newGameKey,staticClass:"container c-classic l-Classic",attrs:{id:"container"}},[i("link",{attrs:{rel:"stylesheet",type:"text/css",href:"stylesheets/synergism.css"}}),i("BigCrunchButton"),e.bigCrunch?e._e():[e.hasMendingButton?i("div",{staticClass:"c-mending-points"},[i("MendingPointsHeader"),i("MendingButton")],1):e._e(),i("SynergismGameHeader"),i("SynergismTabBar"),e.tab.config.before?i(e.tab.config.before,{tag:"component"}):e._e(),i("SynergismSubtabBar"),i("div",{staticClass:"l-classic__page"},[e._t("default")],2)]],2)},$b=[],Hb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("HeaderChallengeDisplay"),i("HeaderChallengeEffects"),i("HeaderPrestigeGroup"),e.hasReality?i("GameSpeedDisplay"):e._e(),e.hasReality?i("br"):e._e(),i("HeaderBlackHole")],1)},qb=[],Vb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-prestige-info-blocks"},[i("HeaderEternityContainer",{staticClass:"l-game-header__eternity"}),i("HeaderCenterContainer",{staticClass:"l-game-header__center"}),i("HeaderInfinityContainer",{staticClass:"l-game-header__infinity"})],1)},Yb=[],Wb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.shouldDisplay?i("div",{staticClass:"c-prestige-button-container"},[i("span",[e._v("You have "),i("span",{staticClass:"c-game-header__antimatter"},[e._v(e._s(e.format(e.antimatter,2,1)))]),e._v(" antimatter.")]),e.hasRealityButton?i("div",{staticClass:"c-reality-container"},[i("RealityCurrencyHeader"),e.isDoomed?i("ArmageddonButton",{attrs:{"is-header":!0}}):e._e()],1):i("div",[i("br"),i("HeaderTickspeedInfo")],1)]):e._e()},jb=[],Xb=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("button",{staticClass:"c-mending-button",class:e.buttonClassObject,on:{click:e.mend}},[e.firstMend?[e._v(" There is another way... You need to Mend the Multiverse. ")]:e.needDoom?[e._v(" Reach "),i("span",[e._v(e._s(e.formatNE(e.END,2,2)))]),e._v(" antimatter in a Doomed Reality to Mend the Multiverse ")]:e.canMend?[e._v(" Mend the Multiverse for "),i("span",[e._v(e._s(e.formatNE(e.gainedMvR,2)))]),e._v(" Multiversal "+e._s(e.pluralize("Remain",e.gainedMvR))+" ")]:[e._v(" Reach "),i("span",[e._v(e._s(e.formatNE(e.END,2,2)))]),e._v(" antimatter to Mend the Multiverse ")]],2)])},zb=[];const Kb={name:"MendingButton",data(){return{gainedMvR:new Decimal(0),canMend:!1,firstMend:!0,END:b.END,needDoom:!0}},computed:{buttonClassObject(){return{"o-mending-button":!0,"o-mending-button--unavailable":!this.canMend}}},methods:{update(){this.gainedMvR.copyFrom(gainedMendingPoints()),this.canMend=player.isGameEnd&&MQ.endState>=14.5||hK.six.isReached&&player.antimatter.exponent>=9e15,this.firstMend=!ue.mendingUnlocked(),this.needDoom=!hK.six.isReached},mend(){mendingResetRequest()}},components:{MendingPointsHeader:sh}},Zb=Kb;var Qb=(0,X.Z)(Zb,Xb,zb,!1,null,null,null);const Jb=Qb.exports,eE={name:"SynergismHeaderCenterContainer",components:{HeaderTickspeedInfo:ly,MendingButton:Jb,RealityCurrencyHeader:dm,ArmageddonButton:sm,MendingPointsHeader:sh},data(){return{shouldDisplay:!0,isModern:!1,hasRealityButton:!1,hasMendingButton:!1,isDoomed:!1,antimatter:new Decimal(0),antimatterPerSec:new Decimal(0),mendingPoints:new Decimal(0)}},methods:{update(){this.shouldDisplay=player.break||!Player.canCrunch,this.shouldDisplay&&(this.mendingPoints.copyFrom(Currency.mendingPoints.value.floor()),this.isModern="Modern"==player.options.UIType,this.isDoomed=Pelle.isDoomed,this.antimatter.copyFrom(Currency.antimatter),this.hasRealityButton=ue.realityUnlocked()||TimeStudy.reality.isBought,this.hasRealityButton||this.antimatterPerSec.copyFrom(Currency.antimatter.productionPerSecond))}}},tE=eE;var iE=(0,X.Z)(tE,Wb,jb,!1,null,"599f99ca",null);const aE=iE.exports;var nE=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.showContainer?i("div",{staticClass:"c-prestige-button-container"},[e.showEP?i("div",{staticClass:"c-eternity-points"},[e._v(" You have "),i("span",{staticClass:"c-game-header__ep-amount"},[e._v(e._s(e.format(e.eternityPoints,2)))]),e._v(" "+e._s(e.pluralize("Eternity Point",e.eternityPoints))+". "),e.showNextEP?i("span",[e._v("(Next EP at "+e._s(e.format(e.nextEP,1))+" IP)")]):e._e()]):e._e()]):e._e()},sE=[],rE=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("img",{staticClass:"syn-button-size",attrs:{src:"images/synergismUI/eternity.png"},on:{click:e.handleClick}})},oE=[];const lE={name:"SynergismEternityButton",data(){return{canEternity:!1}},computed:{classObject(){return{"syn-eternity-button--unlocked":this.canEternity,"syn-eternity-button--locked":!this.canEternity}}},methods:{update(){this.canEternity=Player.canEternity},handleClick(){this.canEternity&&eternityResetRequest()}}},cE=lE;var uE=(0,X.Z)(cE,rE,oE,!1,null,"165e6483",null);const dE=uE.exports,hE={name:"HeaderEternityContainer",components:{},data(){return{showContainer:!1,showEP:!1,showNextEP:!1,eternityPoints:new Decimal(0),nextEP:new Decimal(0)}},methods:{update(){this.showContainer=player.break||PlayerProgress.eternityUnlocked(),this.showEP=PlayerProgress.eternityUnlocked(),this.eternityPoints.copyFrom(Currency.eternityPoints.value.floor()),this.showNextEP=Player.canEternity&&player.records.thisReality.maxEP.lt(100)&&gainedEternityPoints().lt(100),this.showNextEP&&this.nextEP.copyFrom(requiredIPForEP(gainedEternityPoints().floor().toNumber()+1))}}},mE=hE;var pE=(0,X.Z)(mE,nE,sE,!1,null,"1172a401",null);const yE=pE.exports;var fE=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.showContainer?i("div",{staticClass:"c-prestige-button-container"},[i("div",{staticClass:"c-infinity-points"},[e._v(" You have "),i("span",{staticClass:"c-game-header__ip-amount"},[e._v(e._s(e.format(e.infinityPoints,2)))]),e._v(" "+e._s(e.pluralize("Infinity Point",e.infinityPoints))+". "),e.isTesseractUnlocked?i("span",{domProps:{innerHTML:e._s(e.tesseractText)}}):e._e()]),i("div",{staticClass:"flex"},[i("SynergismBigCrunchButton"),i("SynergismEternityButton"),i("SynergismRealityButton")],1)]):e._e()},gE=[],vE=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("img",{staticClass:"syn-button-size",attrs:{src:"images/synergismUI/infinity.png"},on:{click:e.handleClick}})},bE=[];const EE={name:"SynergismBigCrunchButton",data(){return{canInfinity:!1}},computed:{classObject(){return{"syn-infinity-button--unlocked":this.canInfinity,"syn-infinity-button--locked":!this.canInfinity}}},methods:{update(){this.canInfinity=Player.canCrunch},handleClick(){this.canInfinity&&bigCrunchResetRequest()}}},TE=EE;var wE=(0,X.Z)(TE,vE,bE,!1,null,"f67e95c6",null);const kE=wE.exports;var CE=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("img",{staticClass:"syn-button-size",attrs:{src:"images/synergismUI/reality.png"},on:{click:e.handleClick}})},AE=[];const _E={name:"SynergismRealityButton",data(){return{canReality:!1}},computed:{classObject(){return{"syn-reality-button--unlocked":this.canReality,"syn-reality-button--locked":!this.canReality}}},methods:{update(){this.canReality=isRealityAvailable()},handleClick(){this.canReality&&requestManualReality()}}},SE=_E;var DE=(0,X.Z)(SE,CE,AE,!1,null,"47de6ff9",null);const RE=DE.exports,ME={name:"HeaderInfinityContainer",components:{SynergismBigCrunchButton:kE,SynergismRealityButton:RE,SynergismEternityButton:dE},data(){return{showContainer:!1,infinityPoints:new Decimal(0),isTesseractUnlocked:!1,tesseractCost:new Decimal(0),tesseractText:""}},methods:{update(){this.showContainer=player.break||PlayerProgress.infinityUnlocked(),this.infinityPoints.copyFrom(Currency.infinityPoints.value.floor()),this.isTesseractUnlocked=Enslaved.isCompleted,this.tesseractCost=Tesseracts.nextCost,this.tesseractText=this.tesseractProgress()},tesseractProgress(){const e=this.infinityPoints.add(1).log10()/this.tesseractCost.log10();return e>1?`(${formatPercents(1)})`:`(${formatPercents(e,2,2)})`}}},IE=ME;var xE=(0,X.Z)(IE,fE,gE,!1,null,"57d02076",null);const PE=xE.exports,GE={name:"HeaderPrestigeGroup",components:{HeaderCenterContainer:aE,HeaderEternityContainer:yE,HeaderInfinityContainer:PE}},UE=GE;var BE=(0,X.Z)(UE,Vb,Yb,!1,null,"019433b0",null);const NE=BE.exports,OE={name:"SynergismGameHeader",components:{HeaderChallengeDisplay:qh,HeaderChallengeEffects:zh,HeaderBlackHole:Ih,HeaderPrestigeGroup:NE,GameSpeedDisplay:ny},data(){return{hasReality:!1}},methods:{update(){this.hasReality=PlayerProgress.realityUnlocked()}}},LE=OE;var FE=(0,X.Z)(LE,Hb,qb,!1,null,"c4dddef4",null);const $E=FE.exports;var HE=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("div",{staticClass:"c-subtab-button-container"},e._l(e.subtabs,(function(t,a){return i("SynergismSubtabButton",{key:a,attrs:{subtab:t,"parent-name":e.tab.name}})})),1):e._e()},qE=[],VE=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isAvailable?i("button",{class:e.classObject,on:{click:function(t){return e.subtab.show(!0)}}},[e._v(" "+e._s(e.tabName)+" "),e.hasNotification?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()]):e._e()},YE=[];const WE={name:"SynergismSubtabButton",props:{subtab:{type:Object,required:!0},parentName:{type:String,required:!0}},data(){return{isAvailable:!1,hasNotification:!1,isCurrentSubtab:!1,tabName:""}},computed:{classObject(){return{"o-tab-btn":!0,"o-tab-btn--secondary":!0,"o-subtab-btn--active":this.isCurrentSubtab,"o-tab-btn--infinity":"Infinity"===this.parentName,"o-tab-btn--eternity":"Eternity"===this.parentName,"o-tab-btn--reality":"Reality"===this.parentName,"o-tab-btn--celestial":"Celestials"===this.parentName,"o-tab-btn--mending":"Mending"===this.parentName}}},methods:{update(){this.isAvailable=this.subtab.isAvailable,this.hasNotification=this.subtab.hasNotification,this.isCurrentSubtab=this.subtab.isOpen&&"S9"!==Theme.currentName(),this.tabName=Pelle.transitionText(this.subtab.name,this.subtab.name,Math.max(Math.min(GameEnd.endState-this.subtab.id%4/10,1),0))}}},jE=WE;var XE=(0,X.Z)(jE,VE,YE,!1,null,"b30deff4",null);const zE=XE.exports,KE={name:"SynergismSubtabBar",components:{SynergismSubtabButton:zE},data(){return{isVisible:!1}},computed:{tab:()=>Tabs.current,subtabs(){return this.tab.subtabs}},methods:{update(){this.isVisible=this.subtabs.countWhere((e=>e.isAvailable))>1}}},ZE=KE;var QE=(0,X.Z)(ZE,HE,qE,!1,null,"093e66f8",null);const JE=QE.exports;var eT=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",e._l(e.tabs,(function(e,t){return i("SynergismTabButton",{key:t,attrs:{"tab-position":t,tab:e}})})),1)},tT=[],iT=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isAvailable?i("button",{staticClass:"o-tab-btn",class:[e.tab.config.UIClass,{"o-tab-btn--active":e.isCurrentTab}],on:{click:function(t){return e.tab.show(!0)}}},[e._v(" "+e._s(e.tabName)+" "),e.hasNotification?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()]):e._e()},aT=[];const nT={name:"SynergismTabButton",props:{tab:{type:Object,required:!0},tabPosition:{type:Number,required:!0}},data(){return{isAvailable:!1,hasNotification:!1,tabName:""}},computed:{isCurrentTab(){return this.tab.isOpen&&"S9"!==Theme.currentName()}},methods:{update(){this.isAvailable=this.tab.isAvailable,this.hasNotification=this.tab.hasNotification,this.tabPositionTabs.Synergism}},cT=lT;var uT=(0,X.Z)(cT,eT,tT,!1,null,"855f000a",null);const dT=uT.exports;var hT=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-eternity-tab__header"},[i("span",{staticClass:"c-eternity-tab__eternity-points"},[e._v(e._s(e.format(this.eternityPoints,2)))])])},mT=[];const pT={name:"SynergismEPHeader",data(){return{eternityPoints:new Decimal}},methods:{update(){this.eternityPoints.copyFrom(Currency.eternityPoints.value.floor())}}},yT=pT;var fT=(0,X.Z)(yT,hT,mT,!1,null,"1e3dc62f",null);const gT=fT.exports,vT={name:"SynergismUi",components:{SynergismGameHeader:$E,SynergismSubtabBar:JE,SynergismTabBar:dT,InfinityPointsHeader:Wf,SynergismEPHeader:gT,BigCrunchButton:dh,MendingButton:gm,MendingPointsHeader:sh},data(){return{bigCrunch:!1,smallCrunch:!1,newGameKey:"",hasMendingButton:!1,mendingPoints:new Decimal(0)}},computed:{tab:()=>Tabs.current,news(){return this.$viewModel.news}},methods:{update(){const e=!player.break&&Player.canCrunch;this.bigCrunch=e&&Time.bestInfinityRealTime.totalMinutes>1,this.newGameKey=Pelle.isDoomed,this.hasMendingButton=PlayerProgress.mendingUnlocked()||player.isGameEnd&&GameEnd.endState>=14.5,this.mendingPoints.copyFrom(Currency.mendingPoints.value.floor())}}},bT=vT;var ET=(0,X.Z)(bT,Fb,$b,!1,null,"bf1bfb3a",null);const TT=ET.exports;var wT=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-ra-alchemy-tab"},[i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.showAlchemyHowTo}},[e._v(" Click for alchemy info ")]),e.isDoomed?e._e():i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.toggleAllReactions}},[e._v(" "+e._s(e.allReactionsDisabled?"Enable":"Disable")+" all reactions ")]),e.realityCreationVisible?i("PrimaryButton",{class:e.realityGlyphCreationClass,attrs:{onclick:"Modal.realityGlyph.show()"}},[e._v(" View Reality Glyph creation ")]):e._e()],1),i("AlchemyResourceInfo",{key:e.infoResourceId,attrs:{resource:e.infoResource}}),i("br"),e._v(" Glyphs can now be refined using your Glyph filter in the Glyphs tab. "),i("br"),e._v(" When refining a Glyph, it will only give you resources up to a cap of "+e._s(e.formatX(e.capFactor))+" its highest refinement value. "),e.reactionsAvailable?i("span",[e._v(" Reactions trigger once every time you Reality, unaffected by amplification from stored real time. ")]):e._e(),i("div",{staticClass:"l-alchemy-circle",style:e.circleStyle},[e.isDoomed?i("span",{staticClass:"c-pelle-symbol-overlay",domProps:{innerHTML:e._s(e.pelleSymbol)}}):e._e(),i("svg",{staticClass:"l-alchemy-orbit-canvas"},e._l(e.layout.orbits,(function(t,a){return i("circle",{key:a,staticClass:"o-alchemy-orbit",class:e.orbitClass,attrs:{cx:"50%",cy:"50%",r:e.orbitSize(t)}})})),0),e._l(e.layout.nodes,(function(t,a){return i("AlchemyCircleNode",{key:a,class:e.nodeClass(t),attrs:{node:t,"is-focused":e.isFocusedNode(t)},on:{mouseenter:function(i){return e.handleMouseEnter(t)},mouseleave:e.handleMouseLeave,click:function(i){return e.handleClick(t)}}})})),i("svg",{staticClass:"l-alchemy-arrow-canvas"},[e._l(e.layout.reactionArrows,(function(t,a){return i("line",e._b({key:"arrow-"+a+e.realityAmount,class:e.reactionPathClass(t)},"line",e.reactionArrowPaths(t),!1))})),e._l(e.layout.reactionArrows,(function(t,a){return i("line",e._b({key:"arrow2-"+a+e.realityAmount,class:e.reactionArrowClass(t)},"line",e.reactionArrowPositions(t),!1))}))],2)],2)],1)},kT=[];class CT{constructor(e,t,i=0){this._resources=AlchemyResources.all.filter((t=>t.config.tier===e)).sort(((e,t)=>e.config.uiOrder-t.config.uiOrder)),this._radius=t,this._angleOffset=i}get radius(){return this._radius}get nodes(){const e=[],t=Math.PI_2/this._resources.length;let i=this._angleOffset;for(const a of this._resources)e.push({resource:a,x:this._radius*Math.sin(i),y:this._radius*Math.cos(i)}),i+=t;return e}}class AT{constructor(){this.orbits=[new CT(1,4,-Math.PI/3),new CT(2,3),new CT(3,2,Math.PI/3),new CT(4,1,-Math.PI/6),new CT(5,0)];const e=[];for(const a of this.orbits.map((e=>e.nodes)))e.push(...a);const t=2*Math.max(e.map((e=>Math.abs(e.x))).max(),e.map((e=>Math.abs(e.y))).max());for(const a of e)a.x=100*(a.x/t+.5),a.y=100*(a.y/t+.5);const i=[];for(const a of AlchemyReactions.all.compact()){const t=e.find((e=>e.resource===a.product)),n=a.reagents.map((t=>e.find((e=>e.resource===t.resource))));for(const e of n)i.push({reaction:a,reagent:e,product:t})}this.reactionArrows=i,this.nodes=e,this.size=t}}var _T=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"o-alchemy-node",class:e.classObject,style:e.layoutStyle,on:{mouseenter:function(t){return e.$emit("mouseenter")},mouseleave:function(t){return e.$emit("mouseleave")},click:e.emitClick}},[i("AlchemyResourceArc",{attrs:{resource:e.resource,"class-object":e.classObject}}),e.isUnlocked?i("span",[i("HintText",{staticClass:"o-hint-text--alchemy-node l-hint-text--alchemy-node",class:e.hintClassObject,attrs:{type:"alchemy"}},[e._v(" "+e._s(e.formatInt(e.amount))+" ")])],1):e._e()],1)},ST=[],DT=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"o-alchemy-resource-arc-wrapper"},[i("div",{staticClass:"o-alchemy-resource-arc-spinner o-alchemy-resource-arc-circle",style:e.spinnerTransform}),i("div",{staticClass:"o-alchemy-resource-arc-filler o-alchemy-resource-arc-circle",style:e.fillerTransform}),i("div",{staticClass:"o-alchemy-resource-arc-mask",style:e.maskTransform}),i("div",{staticClass:"o-alchemy-node-mask",class:e.classObject},[e._v(" "+e._s(e.resource.symbol)+" ")])])},RT=[];const MT={name:"AlchemyResourceArc",props:{resource:{type:Object,required:!0},classObject:{type:Object,required:!0}},data(){return{amount:0,fillFraction:0}},computed:{spinnerTransform(){return{transform:`rotate(${360*this.fillFraction}deg)`,background:1===this.fillFraction?"#ff9800":void 0}},fillerTransform(){return{opacity:this.fillFraction>.5?1:0,background:1===this.fillFraction?"#ff9800":void 0}},maskTransform(){return{opacity:this.fillFraction>.5?0:1}}},methods:{update(){this.amount=this.resource.amount,this.fillFraction=this.resource.fillFraction}}},IT=MT;var xT=(0,X.Z)(IT,DT,RT,!1,null,"18cd169c",null);const PT=xT.exports;var GT=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.showThisHintText,expression:"showThisHintText"}],staticClass:"o-hint-text l-hint-text"},[e._t("default")],2)},UT=[];const BT={name:"HintText",props:{type:{type:String,required:!0}},computed:{showThisHintText(){return this.$viewModel.shiftDown||player.options.showHintText[this.type]}}},NT=BT;var OT=(0,X.Z)(NT,GT,UT,!1,null,null,null);const LT=OT.exports,FT={name:"AlchemyCircleNode",components:{HintText:LT,AlchemyResourceArc:PT},props:{node:{type:Object,required:!0},isFocused:{type:Boolean,required:!1,default:!1}},data(){return{isReactionActive:!1,amount:0,flow:0,isUnlocked:!1}},computed:{resource(){return this.node.resource},isBaseResource(){return this.resource.isBaseResource},layoutStyle(){const e=Math.clamp(.7*Math.sqrt(Math.abs(this.flow)),0,1);return{left:`${this.node.x}%`,top:`${this.node.y}%`,"box-shadow":`0 0 0.3rem 0.3rem\n rgba(${this.flow>0?"156, 204, 101":"204, 102, 102"}, ${e})`}},classObject(){return{"o-alchemy-node--base":this.isBaseResource,"o-alchemy-node--active":this.isReactionActive,"o-alchemy-node--unfocused":!this.isFocused,"o-alchemy-node--locked":!this.isUnlocked}},hintClassObject(){return this.isFocused?void 0:"o-hint-text--alchemy-node--unfocused"}},methods:{update(){this.isReactionActive=!Pelle.isDoomed&&!this.isBaseResource&&this.node.resource.reaction.isActive,this.amount=this.resource.amount,this.flow=this.resource.flow,this.isUnlocked=this.resource.isUnlocked}}},$T=FT;var HT=(0,X.Z)($T,_T,ST,!1,null,"ce831c78",null);const qT=HT.exports;var VT=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isUnlocked?i("div",{class:e.classObject},[i("span",{staticClass:"c-alchemy-resource-info__title"},[e._v(" "+e._s(e.resource.symbol)+" "+e._s(e.resource.name)+" "+e._s(e.resource.symbol)+" ")]),e.isDoomed?i("span",[e._v(" Destroyed by Pelle ")]):i("span",[e._v(" "+e._s(e.capped?"Capped":"Current")+": "+e._s(e.resourceAmount)+"/"+e._s(e.resourceCap)+" (Recent change: "),i("span",{domProps:{innerHTML:e._s(e.formattedFlow)}}),e._v(") ")]),e.isBaseResource?i("span",[e._v("Base Resource")]):i("span",[e._v("Reaction: "+e._s(e.isReactionActive?"Active":"Inactive")+" ("+e._s(e.reactionText)+")")]),i("span",{class:{"o-pelle-disabled":e.isDoomed}},[i("EffectDisplay",{attrs:{label:"Effect",config:e.effectConfig}})],1)]):i("div",{class:e.classObject},[e._v(" Unlock requirement: "+e._s(e.unlockRequirement)+" ")])},YT=[],WT=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible&&void 0!==e.effectDisplay?i("span",[e.br?i("br"):e._e(),e._v(" "+e._s(e.labelDisplay)+e._s(e.effectDisplay)+" ")]):e._e()},jT=[];function XT(e){return"number"===typeof e}function zT(e){return"string"===typeof e}function KT(e){return"function"===typeof e}function ZT(e){return e instanceof Decimal}const QT={name:"EffectDisplay",props:{config:{type:Object,required:!1,default:void 0},br:{type:Boolean,required:!1},label:{type:String,default:"Currently",required:!1},ignoreCapped:{type:Boolean,required:!1,default:!1}},data(){return{isVisible:!1,effectValue:0,cap:Number.MAX_VALUE,hasCap:!1}},computed:{reachedCap(){return this.hasCap&&this.reachedCapFunction()},labelDisplay(){return this.config.noLabel?"":`${this.reachedCap&&!this.ignoreCapped?"Capped":this.label}: `},effectDisplay(){return this.formatEffect(this.reachedCap?this.cap:this.effectValue)}},watch:{config:{immediate:!0,handler(e){this.hasCap=!1,this.updateEffect=()=>{},this.updateCap=()=>{};const t=null===e||void 0===e?void 0:e.effect,i=null===e||void 0===e?void 0:e.formatEffect;if(this.isVisible=void 0!==t&&void 0!==i,!this.isVisible)return;if(this.formatEffect=i,XT(t))return void(this.effectValue=t);if(ZT(t))return void(this.effectValue=Decimal.fromDecimal(t));if(!KT(t))throw new Error(`EffectDisplay config.effect has unsupported type "${typeof t}"`);const a=t();if(XT(a))this.effectValue=a,this.updateEffect=()=>this.effectValue=t();else{if(!ZT(a))throw new Error(`EffectDisplay config.effect is a function which returns unsupported type "${typeof t}"`);this.effectValue=Decimal.fromDecimal(a),this.updateEffect=()=>this.effectValue.copyFrom(t())}let n=e.cap;if(void 0!==e.reachedCap&&(n=()=>this.effectValue,this.reachedCapFunction=e.reachedCap),void 0!==n){if(void 0===e.reachedCap&&(this.reachedCapFunction=XT(a)?()=>this.effectValue>=this.cap:()=>this.effectValue.gte(this.cap)),XT(n))return this.cap=n,void(this.hasCap=!0);if(ZT(n))return this.cap=Decimal.fromDecimal(n),void(this.hasCap=!0);if(KT(n))return this.updateCap=()=>{this.cap=n(),this.hasCap=void 0!==this.cap},void this.updateCap();throw new Error(`EffectDisplay config.cap is a function which returns unsupported type "${typeof t}"`)}}}},beforeCreate(){this.updateEffect=()=>{},this.updateCap=()=>{}},methods:{update(){this.updateEffect(),this.updateCap()}}},JT=QT;var ew=(0,X.Z)(JT,WT,jT,!1,null,null,null);const tw=ew.exports,iw={name:"AlchemyResourceInfo",components:{EffectDisplay:tw},props:{resource:{type:Object,required:!0}},data(){return{amount:0,cap:0,capped:!1,flow:0,isReactionActive:!1,reactionProduction:0,isUnlocked:!1,unlockRequirement:""}},computed:{classObject(){return{"c-alchemy-resource-info":!0,"c-alchemy-resource-info--locked":!this.isUnlocked}},reaction(){return this.resource.reaction},isBaseResource(){return this.resource.isBaseResource},reactionText(){if(this.resource===AlchemyResource.reality)return this.realityReactionText;const e=this.reaction.reagents.map((e=>`${format(e.cost)}${e.resource.symbol}`)).join(" + ");return`${e} ➜ ${format(this.reactionProduction,2,2)}${this.resource.symbol}`},realityReactionText(){const e=this.reaction.reagents.map((e=>e.resource.symbol)).join(" + ");return`${e} ➜ ${this.resource.symbol}`},effectConfig(){const e=this.resource;return{effect:()=>e.effectValue,formatEffect:e.config.formatEffect}},resourceAmount(){return formatFloat(this.amount,1)},resourceCap(){return formatFloat(this.cap,1)},formattedFlow(){const e=this.flow>=0?"+":"-";if(Math.abs(this.flow)<.01)return"None";const t=`${e}${format(Math.abs(this.flow),2,2)}/sec`,i=this.flow>0?"9CCC65":"CC6666";return`${t}`},isDoomed:()=>Pelle.isDoomed},methods:{update(){const e=this.resource;this.amount=e.amount,this.cap=e.cap,this.capped=e.capped,this.flow=e.flow,this.isUnlocked=e.isUnlocked,this.unlockRequirement=e.lockText,this.isBaseResource||(this.isReactionActive=!this.isDoomed&&this.reaction.isActive,this.reactionProduction=this.reaction.reactionProduction)}}},aw=iw;var nw=(0,X.Z)(aw,VT,YT,!1,null,"e419527e",null);const sw=nw.exports,rw={name:"AlchemyTab",components:{PrimaryButton:Vs,AlchemyCircleNode:qT,AlchemyResourceInfo:sw},data(){return{infoResourceId:0,focusedResourceId:-1,reactionsAvailable:!1,realityCreationVisible:!1,animationTimer:0,alchemyCap:0,capFactor:0,createdRealityGlyph:!1,allReactionsDisabled:!1,realityAmount:0}},computed:{resources:()=>AlchemyResources.all,layout:()=>new AT,sizeMultiplier:()=>5,infoResource(){return this.resources[this.infoResourceId]},circleStyle(){const e=this.layout.size*this.sizeMultiplier;return{width:`${e}rem`,height:`${e}rem`,opacity:this.isDoomed?.8:1}},orbitClass(){return-1===this.focusedResourceId||this.isDoomed?void 0:"o-alchemy-orbit--unfocused"},realityGlyphCreationClass(){return{"o-primary-btn--subtab-option":!0,"tutorial--glow":!this.createdRealityGlyph}},reactions(){return AlchemyReactions.all.compact().filter((e=>e.product.isUnlocked))},isDoomed(){return Pelle.isDoomed},pelleSymbol(){return Pelle.symbol}},methods:{update(){this.reactionsAvailable=0!==AlchemyResources.all.filter((e=>!e.isBaseResource&&e.isUnlocked)).length,this.realityCreationVisible=Ra.pets.effarig.level>=25,this.animationTimer+=35,this.alchemyCap=Ra.alchemyResourceCap,this.capFactor=1/GlyphSacrificeHandler.glyphRefinementEfficiency,this.createdRealityGlyph=player.reality.glyphs.createdRealityGlyph,this.allReactionsDisabled=this.reactions.every((e=>!e.isActive)),this.realityAmount=AlchemyResource.reality.amount},orbitSize(e){const t=this.layout.orbits.map((e=>e.radius)).max();return e.radius/t*50+"%"},handleMouseEnter(e){this.infoResourceId=e.resource.id,e.resource.isUnlocked&&(this.focusedResourceId=e.resource.id)},handleMouseLeave(){this.focusedResourceId=-1},handleClick(e){const t=e.resource;if(t.isUnlocked)return this.infoResourceId!==t.id?(this.infoResourceId=t.id,void(this.focusedResourceId=t.id)):void(t.isBaseResource||(t.reaction.isActive=!t.reaction.isActive,GameUI.update()))},isUnlocked(e){return e.product.resource.isUnlocked&&e.reagent.resource.isUnlocked},isCapped(e){const t=e.reagent.resource,i=e.product.resource;return i.amount>0&&i.amount>=t.amount||i.amount>=i.cap},isLessThanRequired(e){return e.product.resource.amount>0&&e.reagent.costt.resource===e.resource)))||(null===(i=e.resource.reaction)||void 0===i?void 0:i.reagents.some((e=>e.resource===a))))},reactionArrowPositions(e){if(!this.isDisplayed(e)||this.isCapped(e))return;const t=e.reagent.x,i=e.reagent.y,a=e.product.x,n=e.product.y,s=Math.sqrt(Math.pow(a-t,2)+Math.pow(n-i,2)),r=40*s,o=this.animationTimer%r/r,l=Math.max(0,o+2/s),c=Math.min(1,o-2/s);return{x1:t*(1-l)+a*l+"%",y1:i*(1-l)+n*l+"%",x2:t*(1-c)+a*c+"%",y2:i*(1-c)+n*c+"%"}},reactionArrowPaths(e){return{x1:`${e.reagent.x}%`,y1:`${e.reagent.y}%`,x2:`${e.product.x}%`,y2:`${e.product.y}%`}},reactionPathClass(e){return{"o-alchemy-reaction-path":this.isUnlocked(e),"o-alchemy-reaction-path--capped":this.isCapped(e)&&this.isDisplayed(e),"o-alchemy-reaction-path--less-than-required":this.isLessThanRequired(e)&&this.isDisplayed(e),"o-alchemy-reaction-path--focused":!this.isCapped(e)&&this.isFocusedReaction(e),"o-alchemy-reaction-path--not-focused":!this.isFocusedReaction(e)&&-1!==this.focusedResourceId,"o-alchemy-reaction-path--doomed":this.isDoomed}},reactionArrowClass(e){return{"o-alchemy-reaction-arrow":!this.isCapped(e)&&this.isDisplayed(e),"o-alchemy-reaction-arrow--focused":this.isFocusedReaction(e)}},showAlchemyHowTo(){ui.view.h2pForcedTab=GameDatabase.h2p.tabs.filter((e=>"Glyph Alchemy"===e.name))[0],Modal.h2p.show()},toggleAllReactions(){const e=this.allReactionsDisabled;for(const t of this.reactions)t.isActive=e},nodeClass(e){const t=e.resource;return{"o-clickable":t.isUnlocked&&!t.isBaseResource&&!this.isDoomed}}}},ow=rw;var lw=(0,X.Z)(ow,wT,kT,!1,null,"c78c9e4e",null);const cw=lw.exports;var uw=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(e.activeComponent,{tag:"component"})},dw=[],hw=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-classic-antimatter-dim-tab"},[i("AntimatterDimensionsTabHeader"),e._v(" "+e._s(e.multiplierText)+" "),i("TickspeedRow"),i("div",{staticClass:"l-dimensions-container"},[e._l(8,(function(e){return i("AntimatterDimensionRow",{key:e,attrs:{tier:e}})})),i("DimensionBoostRow"),i("AntimatterGalaxyRow")],2),e.isQuickResetAvailable?i("PrimaryButton",{staticClass:"o-primary-btn--quick-reset",on:{click:e.quickReset}},[e._v(" Perform a Dimension Boost reset "),e.hasDimensionBoosts?i("span",[e._v(" but lose a Dimension Boost")]):i("span",[e._v(" for no gain")])]):e._e(),i("div",{staticClass:"l-flex"}),i("AntimatterDimensionProgressBar",{staticClass:"l-antimatter-dim-tab__progress_bar"})],1)},mw=[],pw=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-progress-bar"},[i("div",{staticClass:"c-progress-bar__fill",style:e.progressBarStyle},[i("span",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.tooltip,expression:"tooltip"}],staticClass:"c-progress-bar__percents"},[e._v(" "+e._s(e.displayPercents)+" ")])])])},yw=[];const fw={name:"AntimatterDimensionProgressBar",data(){return{fill:0,tooltip:"",displayPercents:""}},computed:{progressBarStyle(){return{width:`${(100*this.fill).toFixed(2)}%`}}},methods:{update(){this.displayPercents=formatPercents(this.fill,2);const e=(e,t,i)=>{this.fill=Math.clampMax(e.pLog10()/Decimal.log10(t),1),this.tooltip=i},t=(e,t,i)=>{this.fill=Math.clampMax(e/t,1),this.tooltip=i},i=Player.isInAntimatterChallenge||EternityChallenge.isRunning||player.dilation.active||Laitela.isRunning;if(i)if(Player.isInAntimatterChallenge)e(Currency.antimatter.value,Player.antimatterChallenge.goal,"Percentage to Challenge goal");else if(EternityChallenge.isRunning)if(Perk.studyECBulk.isBought){const t=EternityChallenge.current.gainedCompletionStatus.nextGoalAt;t?e(Currency.infinityPoints.value,t,"Percentage to next Challenge completion"):e(Currency.infinityPoints.value,10,"This Challenge is already fully completed!")}else e(Currency.infinityPoints.value,Player.eternityGoal,"Percentage to Eternity Challenge goal");else player.dilation.active?player.dilation.lastEP.gt(0)?e(Currency.antimatter.value,getTachyonReq(),"Percentage to gain more TP in Dilation"):e(Currency.infinityPoints.value,Player.eternityGoal,"Percentage to Eternity in Dilation"):e(Decimal.pow10(player.celestials.laitela.entropy),10,"Percentage to Destabilized Reality");else if(Pelle.isDoomed)PelleRifts.recursion.milestones[2].canBeApplied||GalaxyGenerator.spentGalaxies>0?e(Currency.infinityPoints.value,Tesseracts.nextCost,"Percentage to next Tesseract"):PelleStrikes.dilation.hasStrike?e(Currency.eternityPoints.value,b.E4000,"Percentage to Galaxy Generator"):PelleStrikes.ECs.hasStrike?t((Math.min(Currency.timeTheorems.max.toNumber()/12900,1)+Math.min(EternityChallenges.completions/60,1))/2,1,"Percentage to fifth Strike"):PelleStrikes.eternity.hasStrike?t(Currency.timeTheorems.max.toNumber(),115,"Percentage to fourth Strike"):PelleStrikes.powerGalaxies.hasStrike?e(Currency.infinityPoints.value,Player.eternityGoal,"Percentage to third Strike"):PelleStrikes.infinity.hasStrike?player.break?e(Currency.infinityPoints.value,5e11,"Percentage to second Strike"):e(Currency.antimatter.value,Decimal.NUMBER_MAX_VALUE,"Percentage to Infinity"):e(Currency.antimatter.value,Decimal.NUMBER_MAX_VALUE,"Percentage to first Strike");else if(Enslaved.isCompleted)e(Currency.infinityPoints.value,Tesseracts.nextCost,"Percentage to next Tesseract");else if(PlayerProgress.dilationUnlocked())e(Currency.eternityPoints.value,b.E4000,"Percentage to Reality");else if(InfinityDimension(8).isUnlocked)e(Currency.infinityPoints.value,Player.eternityGoal,"Percentage to Eternity");else if(player.break){const t="Percentage to unlock a new "+(InfinityDimensions.next().hasIPUnlock?"type of Dimension":"Infinity Dimension"),i=InfinityDimensions.next();i.ipRequirementReached?e(player.records.thisEternity.maxAM,i.amRequirement,t):e(player.infinityPoints,i.ipRequirement,t)}else e(Currency.antimatter.value,Decimal.NUMBER_MAX_VALUE,"Percentage to Infinity")}}},gw=fw;var vw=(0,X.Z)(gw,pw,yw,!1,null,null,null);const bw=vw.exports;var Ew=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.showRow,expression:"showRow"}],staticClass:"c-dimension-row c-antimatter-dim-row l-dimension-single-row",class:{"c-dim-row--not-reached":!e.isUnlocked}},[i("GenericDimensionRowText",{attrs:{tier:e.tier,name:e.name,"multiplier-text":e.formatX(e.multiplier,2,2),"amount-text":e.amountText,rate:e.rateOfChange}}),i("div",{staticClass:"l-dim-row-multi-button-container"},[e.isContinuumActive?e._e():i("PrimaryButton",{class:e.buySingleClass,attrs:{enabled:e.isAffordable&&!e.isCapped&&e.isUnlocked},on:{click:e.buySingle}},[i("div",{class:e.tutorialClass()},[e._v(" "+e._s(e.singleText)+" ")]),i("div",{staticClass:"c-dim-purchase-count-tooltip"},[e._v(" "+e._s(e.boughtTooltip)+" ")]),e.hasTutorial?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()]),i("PrimaryButton",{class:e.buyTenClass,attrs:{enabled:(e.isAffordableUntil10||e.isContinuumActive)&&!e.isCapped&&e.isUnlocked},on:{click:e.buyUntil10}},[e._v(" "+e._s(e.until10Text)+" "),i("div",{staticClass:"c-dim-purchase-count-tooltip"},[e._v(" "+e._s(e.boughtTooltip)+" ")])])],1)],1)},Tw=[],ww=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-dimension-text-container"},[i("div",{class:e.adjustableTextClass()},[i("span",{staticClass:"c-dim-row__large"},[e._v(" "+e._s(e.name)+" ")]),i("span",{staticClass:"c-dim-row__small"},[e._v(" "+e._s(e.multiplierText)+" ")])]),i("div",{class:e.adjustableTextClass()},[i("span",{staticClass:"c-dim-row__large"},[e._v(" "+e._s(e.amountText)+" ")]),e.rate.neq(0)&&e.showPercentage?i("span",{staticClass:"c-dim-row__small"},[e._v(" "+e._s(e.rateText)+" ")]):e._e()])])},kw=[];const Cw={name:"GenericDimensionRowText",props:{tier:{type:Number,required:!0},name:{type:String,required:!0},multiplierText:{type:String,required:!0},amountText:{type:String,required:!0},rate:{type:Object,required:!0}},data(){return{isSmall:0}},computed:{rateText(){return this.rate.neq(0)?` (+${format(this.rate,2,2)}%/s)`:""},showPercentage(){return player.options.showHintText.showPercentage||ui.view.shiftDown}},methods:{update(){this.isSmall=window.innerWidth<1573},adjustableTextClass(){return{"l-narrow-box":this.isSmall,"l-wide-box":!this.isSmall}}}},Aw=Cw;var _w=(0,X.Z)(Aw,ww,kw,!1,null,"74ffc647",null);const Sw=_w.exports,Dw={name:"ClassicAntimatterDimensionRow",components:{GenericDimensionRowText:Sw,PrimaryButton:Vs},props:{tier:{type:Number,required:!0}},data(){return{end:!1,isUnlocked:!1,isCapped:!1,multiplier:new Decimal(0),amount:new Decimal(0),bought:0,boughtBefore10:0,rateOfChange:new Decimal(0),singleCost:new Decimal(0),until10Cost:new Decimal(0),isAffordable:!1,isAffordableUntil10:!1,isContinuumActive:!1,continuumValue:0,isShown:!1,isCostsAD:!1,formattedAmount:null,hasTutorial:!1}},computed:{isDoomed:()=>Pelle.isDoomed,name(){return`${Eie(this.tier).shortDisplayName} Antimatter Dimension`},amountText(){if(this.formattedAmount)return this.formattedAmount;const e=this.tier<8?format(this.amount,2):formatInt(this.amount);return`${e} (${formatInt(this.boughtBefore10)})`},singleText(){if(this.isCapped)return"Capped";const e=this.showCostTitle(this.singleCost)?"Cost: ":"",t=this.isCostsAD?`${this.costUnit}`:"AM";return`${e} ${format(this.singleCost)} ${t}`},until10Text(){if(this.isCapped)return"Shattered by Nameless";if(this.isContinuumActive)return`Continuum: ${this.continuumString}`;const e=`Until ${formatInt(10)},${this.showCostTitle(this.until10Cost)?" Cost":""}`,t=this.isCostsAD?`${this.costUnit}`:"AM";return`${e} ${format(this.until10Cost)} ${t}`},continuumString(){return this.continuumValue<1e9?formatFloat(this.continuumValue,2):format(this.continuumValue,2,2)},showRow(){return this.isShown||this.isUnlocked||this.amount.gt(0)},boughtTooltip(){return this.isCapped?`Nameless prevents the purchase of more than ${format(1)} 8th Antimatter Dimension`:this.isContinuumActive?"Continuum produces all your Antimatter Dimensions":`Purchased ${quantifyInt("time",this.bought)}`},costUnit(){return`${Eie(this.tier-2).shortDisplayName} AD`},buySingleClass(){return{"o-primary-btn--buy-ad o-primary-btn--buy-single-ad c-dim-tooltip-container":!0,"l-dim-row-small-text":this.isLongText(this.singleText)||!this.showCostTitle(this.singleCost)}},buyTenClass(){return{"o-primary-btn--buy-ad o-primary-btn--buy-dim c-dim-tooltip-container":!0,"o-primary-btn--buy-10-ad":!this.isContinuumActive,"o-primary-btn--continuum-ad o-continuum":this.isContinuumActive,"l-dim-row-small-text":this.isLongText(this.until10Text)&&!this.isContinuumActive}}},methods:{update(){const e=this.tier;if(8===e&&(this.formattedAmount=formatInt(this.amount)),8===e&&Eie(8).totalAmount.gte(1e12)&&(this.formattedAmount=format(this.amount,2)),e>DimBoost.maxDimensionsUnlockable)return;const t=Eie(e);this.isUnlocked=t.isAvailableForPurchase,this.isCapped=8===e&&Enslaved.isRunning&&t.bought>=1,this.multiplier.copyFrom(t.multiplier),this.amount.copyFrom(t.totalAmount),this.totalAmount=t.totalAmount,this.bought=t.bought,this.boughtBefore10=t.boughtBefore10,this.singleCost.copyFrom(t.cost),this.until10Cost.copyFrom(t.costUntil10),e<8&&this.rateOfChange.copyFrom(t.rateOfChange),this.isAffordable=t.isAffordable,this.isAffordableUntil10=t.isAffordableUntil10,this.isContinuumActive=Laitela.continuumActive,this.isContinuumActive&&(this.continuumValue=t.continuumValue),this.isShown=DimBoost.totalBoosts>0&&DimBoost.totalBoosts+3>=e||PlayerProgress.infinityUnlocked(),this.isCostsAD=NormalChallenge(6).isRunning&&e>2&&!this.isContinuumActive,this.hasTutorial=1===e&&Tutorial.isActive(TUTORIAL_STATE.DIM1)||2===e&&Tutorial.isActive(TUTORIAL_STATE.DIM2)},buySingle(){this.isContinuumActive||buyOneDimension(this.tier)},buyUntil10(){this.isContinuumActive||buyManyDimension(this.tier)},showCostTitle(e){return e.exponent<1e6},isLongText(e){return e.length>20},tutorialClass(){return{"l-glow-container":!0,"tutorial--glow":this.isAffordable&&this.hasTutorial}}}},Rw=Dw;var Mw=(0,X.Z)(Rw,Ew,Tw,!1,null,"623bbdde",null);const Iw=Mw.exports;var xw=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-antimatter-dim-tab__header"},[i("PrimaryButton",{directives:[{name:"show",rawName:"v-show",value:e.isSacrificeUnlocked,expression:"isSacrificeUnlocked"},{name:"tooltip",rawName:"v-tooltip",value:e.sacrificeTooltip,expression:"sacrificeTooltip"}],staticClass:"o-primary-btn--sacrifice",attrs:{enabled:e.isSacrificeAffordable},on:{click:e.sacrifice}},[e.isSacrificeAffordable?i("span",[e._v(" Dimensional Sacrifice ("+e._s(e.formatX(e.sacrificeBoost,2,2))+") ")]):i("span",[e._v(" Dimensional Sacrifice Disabled ("+e._s(e.disabledCondition)+") ")])]),i("PrimaryButton",{staticClass:"o-primary-btn--buy-max",on:{click:e.maxAll}},[e._v(" Max all (M) ")])],1)},Pw=[];const Gw={name:"ClassicAntimatterDimensionsTabHeader",components:{PrimaryButton:Vs},data(){return{isSacrificeUnlocked:!1,isSacrificeAffordable:!1,currentSacrifice:new Decimal(0),sacrificeBoost:new Decimal(0),disabledCondition:""}},computed:{sacrificeTooltip(){return`Boosts 8th Antimatter Dimension by ${formatX(this.sacrificeBoost,2,2)}`}},methods:{update(){const e=Sacrifice.isVisible;this.isSacrificeUnlocked=e,e&&(this.isSacrificeAffordable=Sacrifice.canSacrifice,this.currentSacrifice.copyFrom(Sacrifice.totalBoost),this.sacrificeBoost.copyFrom(Sacrifice.nextBoost),this.disabledCondition=Sacrifice.disabledCondition)},sacrifice(){sacrificeBtnClick()},maxAll(){maxAll()}}},Uw=Gw;var Bw=(0,X.Z)(Uw,xw,Pw,!1,null,null,null);const Nw=Bw.exports;var Ow=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-dimension-row c-antimatter-dim-row c-antimatter-prestige-row"},[i("div",{staticClass:"l-dim-row__prestige-text c-dim-row__label c-dim-row__label--amount l-text-wrapper"},[e._v(" "+e._s(e.typeName)+" ("+e._s(e.sumText)+") "+e._s(e.galRequirementText)+" "),i("div",{staticClass:"l-scaling-text-wrapper"},[e._v(" "+e._s(e.hasIncreasedScaling?e.costScalingText:"")+" ")])]),i("PrimaryButton",{class:e.classObject,attrs:{enabled:e.canBeBought},on:{click:[function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.buyGalaxy(!0)},function(t){return t.shiftKey?t.ctrlKey||t.altKey||t.metaKey?null:e.buyGalaxy(!1):null}]}},[e._v(" "+e._s(e.buttonText)+" "),e.hasTutorial?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()])],1)},Lw=[];const Fw={name:"ClassicAntimatterGalaxyRow",components:{PrimaryButton:Vs},data(){return{type:GALAXY_TYPE.NORMAL,galaxies:{normal:0,replicanti:0,dilation:0},requirement:{tier:1,amount:0},canBeBought:!1,distantStart:0,remoteStart:0,obscureStart:0,lockText:null,canBulkBuy:!1,creditsClosed:!1,scalingText:{distant:null,remote:null},hasTutorial:!1}},computed:{isDoomed:()=>Pelle.isDoomed,dimName(){return AntimatterDimension(this.requirement.tier).displayName},buttonText(){if(null!==this.lockText)return this.lockText;const e=[];return Achievement(111).isUnlocked||e.push("Dimensions"),Achievement(143).isUnlocked||e.push("Dimension Boosts"),0===e.length?"Increase the power of Tickspeed upgrades":`Reset your ${makeEnumeration(e)} to increase the power of Tickspeed upgrades`},sumText(){const e=[Math.max(this.galaxies.normal,0)];this.galaxies.replicanti>0&&e.push(this.galaxies.replicanti),this.galaxies.dilation>0&&e.push(this.galaxies.dilation);const t=e.map(this.formatGalaxies).join(" + ");return e.length>=2?`${t} = ${this.formatGalaxies(e.sum())}`:t},typeName(){switch(this.type){case GALAXY_TYPE.NORMAL:return"Antimatter Galaxies";case GALAXY_TYPE.DISTANT:return"Distant Antimatter Galaxies";case GALAXY_TYPE.REMOTE:return"Remote Antimatter Galaxies";case GALAXY_TYPE.THIRD:return"Obscure Antimatter Galaxies"}},hasIncreasedScaling(){return this.type!==GALAXY_TYPE.NORMAL},costScalingText(){switch(this.type){case GALAXY_TYPE.DISTANT:return`Each Galaxy is more expensive past ${quantifyInt("Galaxy",this.distantStart)}`;case GALAXY_TYPE.REMOTE:{const e=[{type:"distant",function:"quadratic",amount:this.distantStart},{type:"remote",function:"exponential",amount:this.remoteStart}];return`Increased Galaxy cost scaling: ${e.sort(((e,t)=>e.amount-t.amount)).map((e=>`${e.function} scaling past ${this.formatGalaxies(e.amount)} (${e.type})`)).join(", ").capitalize()}`}case GALAXY_TYPE.THIRD:let e=75e4+5e3*player.mending.rebuyables[16]+CorruptionUpgrade(9).effectOrDefault(0);return pl(17).isBought?`Galaxy costs scale much more rapidly beyond ${formatInt(e)} Galaxies`:`Galaxy costs scale much more rapidly beyond ${formatInt(e)} Galaxies, after Remote scaling`}},galRequirementText(){return this.galaxies.normal>5e5?"":`: requires ${formatInt(this.requirement.amount)} ${this.dimName} Dimensions`},classObject(){return{"o-primary-btn--galaxy l-dim-row__prestige-button":!0,"tutorial--glow":this.canBeBought&&this.hasTutorial,"o-pelle-disabled-pointer":this.creditsClosed}}},methods:{update(){this.type=Galaxy.type,this.galaxies.normal=player.galaxies+GalaxyGenerator.galaxies,this.galaxies.replicanti=Replicanti.galaxies.total,this.galaxies.dilation=player.dilation.totalTachyonGalaxies;const e=Galaxy.requirement;this.requirement.amount=e.amount,this.requirement.tier=e.tier,this.canBeBought=e.isSatisfied&&Galaxy.canBeBought,this.distantStart=EternityChallenge(5).isRunning?0:Galaxy.costScalingStart,this.remoteStart=Galaxy.remoteStart,this.lockText=Galaxy.lockText,this.canBulkBuy=EternityMilestone.autobuyMaxGalaxies.isReached,this.creditsClosed=GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||PlayerProgress.mendingUnlocked()&&player.isGameEnd,this.hasTutorial=Tutorial.isActive(TUTORIAL_STATE.GALAXY),this.obscureStart=Galaxy.scalingThreeStart},buyGalaxy(e){this.canBeBought&&manualRequestGalaxyReset(this.canBulkBuy&&e)},formatGalaxies(e){return e>1e8?format(e,2):formatInt(e)}}},$w=Fw;var Hw=(0,X.Z)($w,Ow,Lw,!1,null,"51c836b2",null);const qw=Hw.exports;var Vw=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-dimension-row c-antimatter-dim-row c-antimatter-prestige-row"},[i("div",{staticClass:"l-dim-row__prestige-text c-dim-row__label c-dim-row__label--amount"},[e._v(" "+e._s(e.boostScale)+" Dimension Boost ("+e._s(e.boostCountText)+") "+e._s(e.dimRequirementText)+" ")]),i("PrimaryButton",{class:e.classObject,attrs:{enabled:e.isBuyable},on:{click:[function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.dimensionBoost(!0)},function(t){return t.shiftKey?t.ctrlKey||t.altKey||t.metaKey?null:e.dimensionBoost(!1):null}]}},[e._v(" "+e._s(e.unlockedByBoost)+" "),e.hasTutorial?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()])],1)},Yw=[];class Ww extends R{constructor(e){super(e),this.registerEvents(e.checkEvent,(()=>this.tryUnlock()))}get isBought(){return 0!==(this.bits&1<e.id<4?new jw(e):new Ww(e)));const Xw=e=>Ww.index[e],zw={all:Ww.index.compact(),get allBought(){return 1+(player.mending.warpUpgradeBits>>3)===1<=Qw.scaleStart?Kw.SCALE:e>=Qw.warpStart?Kw.WARP:e>=Qw.shiftStart?Kw.SHIFT:Kw.BOOST}static get canBeBought(){return!(Qw.purchasedBoosts>=this.maxBoosts)&&!(player.records.thisInfinity.maxAM.gt(Player.infinityGoal)&&(!player.break||Player.isInAntimatterChallenge))}static get lockText(){let e=1e12;if(Qw.purchasedBoosts>=this.maxBoosts){if(Ra.isRunning)return"Locked (Ra's Reality)";if(InfinityChallenge(1).isRunning)return"Locked (Infinity Challenge 1)";if(NormalChallenge(8).isRunning)return"Locked (8th Antimatter Dimension Autobuyer Challenge)"}return player.dimensionBoosts>=this.maxBoosts?"Capped at "+formatInt(e)+" Dimension Boosts":null}static get requirement(){return this.bulkRequirement(1)}static bulkRequirement(e){const t=Qw.purchasedBoosts+e,i=Math.min(t+3,this.maxDimensionsUnlockable);let a=20;const n=Effects.sum(TimeStudy(211),TimeStudy(222));return 6===i&&NormalChallenge(10).isRunning?a+=Math.round((t-3)*(20-n)):8===i&&(a+=Math.round((t-5)*(15-n))),EternityChallenge(5).isRunning&&(a+=Math.pow(t-1,3)+t-1),Qw.purchasedBoosts>Qw.shiftStart&&(a+=Math.pow(t-Qw.shiftStart,1+t/(10*Qw.shiftStart))+t-Qw.shiftStart),Qw.purchasedBoosts>Qw.warpStart&&(a+=Math.pow(t-Qw.warpStart,1+t/(Qw.warpStart/10))+t-Qw.warpStart),Qw.purchasedBoosts>Qw.scaleStart&&(a+=Math.pow(t-Qw.scaleStart,1+t/(Qw.scaleStart/1e5))+t-Qw.scaleStart),a-=Effects.sum(InfinityUpgrade.resetBoost),InfinityChallenge(5).isCompleted&&(a-=1),a*=InfinityUpgrade.resetBoost.chargedEffect.effectOrDefault(1),player.celestials.ra.upgrades.has("raUpgrade")&&(a/=Decimal.log10(player.celestials.ra.raPoints.plus(1))),a=Math.round(a),new Zw(i,a)}static get unlockedByBoost(){if(null!==Qw.lockText)return Qw.lockText;const e=Qw.purchasedBoosts,t=EternityMilestone.unlockAllND.isReached;let i="";!t&&e0&&(s=`to Dimensions 1-${Math.min(e+1,8)}`),e>=Qw.maxDimensionsUnlockable-1&&(s="to all Dimensions"),n=NormalChallenge(8).isRunning?i:""===i?`${a} ${s}`:`${i} and ${a} ${s}`,""===n)return"Dimension Boosts are currently useless";const r=(Perk.antimatterNoReset.isBought||Achievement(111).canBeApplied)&&(!Pelle.isDoomed||PelleUpgrade.dimBoostResetsNothing.isBought);return r?n[0].toUpperCase()+n.substring(1):`Reset your Dimensions to ${n}`}static get purchasedBoosts(){return Math.floor(player.dimensionBoosts)}static get imaginaryBoosts(){let e=BreakInfinityUpgrade.autobuyMaxDimboosts.chargedEffect.isEffectActive?Ra.pets.teresa.level:1,t=Ra.unlocks.freeDimBoosts.isUnlocked?(1+Ra.pets.ra.level/100)**.5:1;return Ra.isRunning&&!Ra.unlocks.imaginaryBoostsRa.isUnlocked?0:ImaginaryUpgrade(12).effectOrDefault(0)*ImaginaryUpgrade(23).effectOrDefault(1)*Math.pow(e,.5)*t}static get totalBoosts(){return Math.floor(this.purchasedBoosts+this.imaginaryBoosts)}static get startingDimensionBoosts(){return InfinityUpgrade.skipResetGalaxy.isBought?4:InfinityUpgrade.skipReset3.isBought?3:InfinityUpgrade.skipReset2.isBought?2:InfinityUpgrade.skipReset1.isBought?1:0}}function Jw(e,t=!1,i=!1,a=!1){const n=Math.min(e,Qw.maxBoosts-player.dimensionBoosts);EventHub.dispatch(GAME_EVENT.DIMBOOST_BEFORE,n),player.dimensionBoosts=Math.max(0,player.dimensionBoosts+n),resetChallengeStuff();const s=Pelle.isDoomed?PelleUpgrade.dimBoostResetsNothing.canBeApplied:Perk.antimatterNoReset.canBeApplied;!t&&s||(AntimatterDimensions.reset(),player.sacrificed=b.D0,resetTickspeed()),ek(a);const r=Pelle.isDoomed?PelleUpgrade.dimBoostResetsNothing.canBeApplied:Achievement(111).isUnlocked||Perk.antimatterNoReset.canBeApplied;!i&&r?Mi.antimatter.bumpTo(Mi.antimatter.startingValue):Mi.antimatter.reset(),EventHub.dispatch(GAME_EVENT.DIMBOOST_AFTER,n)}function ek(e){e||Player.isInAntimatterChallenge||(InfinityUpgrade.skipResetGalaxy.isBought&&player.dimensionBoosts<4?(player.dimensionBoosts=4,0===player.galaxies&&(player.galaxies=1)):InfinityUpgrade.skipReset3.isBought&&player.dimensionBoosts<3?player.dimensionBoosts=3:InfinityUpgrade.skipReset2.isBought&&player.dimensionBoosts<2?player.dimensionBoosts=2:InfinityUpgrade.skipReset1.isBought&&player.dimensionBoosts<1&&(player.dimensionBoosts=1))}function tk(e){Qw.requirement.isSatisfied&&Qw.canBeBought&&(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||(player.options.confirmations.dimensionBoost?Modal.dimensionBoost.show({bulk:e}):ik(e)))}function ik(e){Qw.requirement.isSatisfied&&Qw.canBeBought&&(Tutorial.turnOffEffect(TUTORIAL_STATE.DIMBOOST),BreakInfinityUpgrade.autobuyMaxDimboosts.isBought&&e?ak():Jw(1))}function ak(){if(Qw.canUnlockNewDimension)return void(Qw.requirement.isSatisfied&&Jw(1));const e=Qw.bulkRequirement(1);if(!e.isSatisfied)return;const t=Qw.bulkRequirement(2);if(!t.isSatisfied)return void Jw(1);let i=t.amount-e.amount;const a=AntimatterDimension(e.tier);0==i&&(i=1e-20);let n=(a.totalAmount.toNumber()-e.amount)/i;n==1/0&&(n=1e308),n==-1/0&&(n=-1e308);let s=Math.min(1e9,1+Math.floor(n));if(s<0)return;if(Qw.bulkRequirement(s).isSatisfied)return void Jw(s);let r=2;while(s!==r+1){const e=Math.floor((s+r)/2);Qw.bulkRequirement(e).isSatisfied?r=e:s=e}Jw(r)}const nk={name:"ClassicDimensionBoostRow",components:{PrimaryButton:Vs},data(){return{requirement:{tier:1,amount:0},isBuyable:!1,purchasedBoosts:0,imaginaryBoosts:0,lockText:null,unlockedByBoost:null,creditsClosed:!1,requirementText:null,hasTutorial:!1,type:0}},computed:{isDoomed:()=>Pelle.isDoomed,dimName(){return AntimatterDimension(this.requirement.tier).displayName},boostCountText(){if(this.requirementText)return this.requirementText;const e=[this.purchasedBoosts];0!==this.imaginaryBoosts&&e.push(this.imaginaryBoosts);const t=e.map(formatInt).join(" + ");return e.length>=2?`${t} = ${formatInt(e.sum())}`:t},dimRequirementText(){return this.purchasedBoosts>=1e9?"":`: requires ${formatInt(this.requirement.amount)} ${this.dimName} Dimensions`},boostScale(){switch(this.type){case 1:return"Scaled";case 2:return"Superscaled";case 3:return"Warped";default:return""}},classObject(){return{"o-primary-btn--dimboost l-dim-row__prestige-button":!0,"tutorial--glow":this.isBuyable&&this.hasTutorial,"o-pelle-disabled-pointer":this.creditsClosed}}},methods:{update(){const e=Qw.requirement;this.requirement.tier=e.tier,this.requirement.amount=e.amount,this.isBuyable=e.isSatisfied&&Qw.canBeBought,this.purchasedBoosts=Qw.purchasedBoosts,this.imaginaryBoosts=Qw.imaginaryBoosts,this.lockText=Qw.lockText,this.unlockedByBoost=Qw.unlockedByBoost,this.creditsClosed=GameEnd.creditsClosed,this.isDoomed&&(this.requirementText=formatInt(this.purchasedBoosts)),this.hasTutorial=Tutorial.isActive(TUTORIAL_STATE.DIMBOOST),this.type=Qw.type},dimensionBoost(e){Qw.requirement.isSatisfied&&Qw.canBeBought&&manualRequestDimensionBoost(e)}}},sk=nk;var rk=(0,X.Z)(sk,Vw,Yw,!1,null,null,null);const ok=rk.exports;var lk=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.classObject},[i("div",{staticClass:"tickspeed-buttons"},[i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.upgradeCount,expression:"upgradeCount"}],class:e.buttonClass(),attrs:{onclick:"buyTickSpeed()"}},[e.isContinuumActive?i("span",[e._v(" Tickspeed Continuum: "+e._s(e.continuumString)+" ")]):e.isEC9?i("span",[e._v(" Tickspeed Unpurchasable (EC 9) ")]):i("span",[e._v(" Tickspeed Cost: "+e._s(e.format(e.cost))+" ")]),e.hasTutorial?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()]),e.isContinuumActive?e._e():i("button",{staticClass:"o-primary-btn tickspeed-max-btn",class:{"o-primary-btn--disabled":!e.isAffordable&&!e.isContinuumActive},attrs:{onclick:"buyMaxTickSpeed()"}},[e._v(" Buy Max ")])]),e.hasRealityButton?i("div",{staticClass:"tickspeed-labels"},[e._v(" "+e._s(e.tickspeedDisplay)+" | "+e._s(e.multiplierDisplay)+" ")]):e._e()])},ck=[];const uk={name:"TickspeedRow",data(){return{purchasedTickspeed:0,freeTickspeed:0,isVisible:!1,mult:new Decimal(0),cost:new Decimal(0),isAffordable:!1,tickspeed:new Decimal(0),gameSpeedMult:1,galaxyCount:0,isContinuumActive:!1,continuumValue:0,hasTutorial:!1,hasRealityButton:!1,isEC9:!1}},computed:{classObject(){return{"l-tickspeed-container":!0,"l-tickspeed-container--hidden":!this.isVisible}},multiplierDisplay(){if(InfinityChallenge(3).isRunning)return`Multiply all Antimatter Dimensions by\n ${formatX(1.05+.005*this.galaxyCount,3,3)}`;const e=this.mult;return`${formatX(e.reciprocal(),2,3)} faster / upgrade.`},tickspeedDisplay(){return`Tickspeed: ${format(this.tickspeed,2,3)} / sec`},continuumString(){return this.continuumValue<1e9?formatFloat(this.continuumValue,2):format(this.continuumValue,2,2)},upgradeCount(){const e=this.purchasedTickspeed;return this.freeTickspeed?0===e||this.isContinuumActive?`${formatInt(this.freeTickspeed)} Free Upgrades`:`${formatInt(e)} Purchased + ${formatInt(this.freeTickspeed)} Free`:quantifyInt("Purchased Upgrade",e)}},methods:{update(){this.hasRealityButton=PlayerProgress.realityUnlocked()||TimeStudy.reality.isBought,this.purchasedTickspeed=player.totalTickBought,this.freeTickspeed=FreeTickspeed.amount,this.isEC9=EternityChallenge(9).isRunning,this.isVisible=Tickspeed.isUnlocked||this.isEC9,this.isVisible&&(this.mult.copyFrom(Tickspeed.multiplier),this.cost.copyFrom(Tickspeed.cost),this.isAffordable=Tickspeed.isAvailableForPurchase&&Tickspeed.isAffordable,this.tickspeed.copyFrom(Tickspeed.perSecond),this.gameSpeedMult=getGameSpeedupForDisplay(),this.galaxyCount=player.galaxies,this.isContinuumActive=Laitela.continuumActive,this.isContinuumActive&&(this.continuumValue=Tickspeed.continuumValue),this.hasTutorial=Tutorial.isActive(TUTORIAL_STATE.TICKSPEED))},buttonClass(){return{"o-primary-btn":!0,"tickspeed-btn":!0,"o-primary-btn--disabled":!this.isAffordable&&!this.isContinuumActive,"o-non-clickable o-continuum":this.isContinuumActive,"tutorial--glow":this.isAffordable&&this.hasTutorial}}}},dk=uk;var hk=(0,X.Z)(dk,lk,ck,!1,null,"7a175a54",null);const mk=hk.exports,pk={name:"ClassicAntimatterDimensionsTab",components:{PrimaryButton:Vs,AntimatterDimensionRow:Iw,AntimatterDimensionsTabHeader:Nw,AntimatterGalaxyRow:qw,DimensionBoostRow:ok,AntimatterDimensionProgressBar:bw,TickspeedRow:mk},data(){return{hasDimensionBoosts:!1,isQuickResetAvailable:!1,isSacrificeUnlocked:!1,buy10Mult:new Decimal(0),currentSacrifice:new Decimal(0),hasRealityButton:!1,multiplierText:""}},methods:{update(){this.hasDimensionBoosts=player.dimensionBoosts>0,this.isQuickResetAvailable=Player.isInAntimatterChallenge&&Player.antimatterChallenge.isQuickResettable,this.isSacrificeUnlocked=Sacrifice.isVisible,this.buy10Mult.copyFrom(AntimatterDimensions.buyTenMultiplier),this.currentSacrifice.copyFrom(Sacrifice.totalBoost),this.hasRealityButton=PlayerProgress.realityUnlocked()||TimeStudy.reality.isBought;const e=this.isSacrificeUnlocked?` | Dimensional Sacrifice multiplier: ${formatX(this.currentSacrifice,2,2)}`:"";this.multiplierText=`Buy 10 Dimension purchase multiplier: ${formatX(this.buy10Mult,2,2)}${e}`},quickReset(){softReset(-1,!0,!0)}}},yk=pk;var fk=(0,X.Z)(yk,hw,mw,!1,null,"77684bcf",null);const gk=fk.exports;var vk=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-antimatter-dim-tab"},[i("div",{staticClass:"modes-container"},[i("button",{staticClass:"o-primary-btn l-button-container",on:{click:e.changeBuyMode}},[e._v(" "+e._s(e.getUntil10Display())+" ")]),i("PrimaryButton",{directives:[{name:"show",rawName:"v-show",value:e.isSacrificeUnlocked,expression:"isSacrificeUnlocked"},{name:"tooltip",rawName:"v-tooltip",value:e.sacrificeTooltip,expression:"sacrificeTooltip"}],staticClass:"o-primary-btn--sacrifice",attrs:{enabled:e.isSacrificeAffordable},on:{click:e.sacrifice}},[e.isSacrificeAffordable?i("span",[e._v("Dimensional Sacrifice ("+e._s(e.formatX(e.sacrificeBoost,2,2))+")")]):i("span",[e._v("Dimensional Sacrifice Disabled ("+e._s(e.disabledCondition)+")")])]),i("button",{staticClass:"o-primary-btn l-button-container",on:{click:e.maxAll}},[e._v(" Max All (M) ")])],1),i("span",[e._v(e._s(e.multiplierText))]),i("TickspeedRow"),i("div",{staticClass:"l-dimensions-container"},e._l(8,(function(e){return i("AntimatterDimensionRow",{key:e,attrs:{tier:e}})})),1),i("div",{staticClass:"resets-container"},[i("DimensionBoostRow"),e.isQuickResetAvailable?i("PrimaryButton",{staticClass:"o-primary-btn--quick-reset",attrs:{onclick:"softReset(-1, true, true)"}},[e._v(" Perform a Dimension Boost reset "),e.hasDimensionBoosts?i("span",[e._v(" but lose a Dimension Boost")]):i("span",[e._v(" for no gain")])]):e._e(),i("AntimatterGalaxyRow")],1),i("AntimatterDimensionProgressBar")],1)},bk=[],Ek=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.showRow,expression:"showRow"}],staticClass:"c-dimension-row l-dimension-row-antimatter-dim c-antimatter-dim-row l-dimension-single-row",class:{"c-dim-row--not-reached":!e.isUnlocked}},[i("GenericDimensionRowText",{attrs:{tier:e.tier,name:e.name,"multiplier-text":e.formatX(e.multiplier,2,2),"amount-text":e.amountDisplay,rate:e.rateOfChange}}),i("div",{staticClass:"l-dim-row-multi-button-container c-modern-dim-tooltip-container"},[i("div",{staticClass:"c-modern-dim-purchase-count-tooltip"},[e._v(" "+e._s(e.boughtTooltip)+" ")]),i("button",{class:e.buttonClass(),on:{click:e.buy}},[i("div",{class:e.buttonTextClass()},[i("div",[e._v(" "+e._s(e.buttonPrefix)+" ")]),i("div",{class:{"l-dim-row-small-text":e.hasLongText}},[e._v(" "+e._s(e.buttonValue)+" ")]),e.hasTutorial?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()]),e.isContinuumActive||!e.isUnlocked||e.isCapped?e._e():i("div",{staticClass:"fill"},[i("div",{staticClass:"fill-purchased",style:{width:10*e.boughtBefore10+"%"}}),i("div",{staticClass:"fill-possible",style:{width:10*e.howManyCanBuy+"%"}})])])])],1)},Tk=[];const wk={name:"ModernAntimatterDimensionRow",components:{GenericDimensionRowText:Sw},props:{tier:{type:Number,required:!0}},data(){return{isUnlocked:!1,isCapped:!1,multiplier:new Decimal(0),amount:new Decimal(0),bought:0,boughtBefore10:0,rateOfChange:new Decimal(0),singleCost:new Decimal(0),until10Cost:new Decimal(0),isAffordable:!1,buyUntil10:!0,howManyCanBuy:0,isContinuumActive:!1,continuumValue:0,isShown:!1,isCostsAD:!1,amountDisplay:"",hasTutorial:!1}},computed:{isDoomed:()=>Pelle.isDoomed,name(){return`${AntimatterDimension(this.tier).shortDisplayName} Antimatter Dimension`},costDisplay(){return this.buyUntil10?format(this.until10Cost):format(this.singleCost)},continuumString(){return this.continuumValue>=1e9?format(this.continuumValue,2,2):formatFloat(this.continuumValue,2)},showRow(){return this.isShown||this.isUnlocked||this.amount.gt(0)},boughtTooltip(){return this.isCapped?`Nameless prevents the purchase of more than ${format(1)} 8th Antimatter Dimension`:this.isContinuumActive?"Continuum produces all your Antimatter Dimensions":`Purchased ${quantifyInt("time",this.bought)}`},costUnit(){return`${AntimatterDimension(this.tier-2).shortDisplayName} AD`},buttonPrefix(){return this.isUnlocked?this.isCapped?"Shattered by Nameless":this.isContinuumActive?"Continuum: ":`Buy ${formatInt(this.howManyCanBuy)}`:"Locked"},buttonValue(){if(this.isCapped)return"";if(this.isContinuumActive)return this.continuumString;const e=this.showCostTitle(this.buyUntil10?this.until10Cost:this.singleCost)?"Cost: ":"",t=this.isCostsAD?this.costUnit:"AM";return`${e}${this.costDisplay} ${t}`},hasLongText(){return this.buttonValue.length>20}},methods:{update(){const e=this.tier;if(e>DimBoost.maxDimensionsUnlockable&&!this.isDoomed)return;const t=AntimatterDimension(e);this.isUnlocked=t.isAvailableForPurchase;const i=player.buyUntil10;this.isCapped=8===e&&Enslaved.isRunning&&t.bought>=1,this.multiplier.copyFrom(AntimatterDimension(e).multiplier),this.amount.copyFrom(t.totalAmount),this.bought=t.bought,this.boughtBefore10=t.boughtBefore10,this.howManyCanBuy=i?t.howManyCanBuy:Math.min(t.howManyCanBuy,1),this.singleCost.copyFrom(t.cost),this.until10Cost.copyFrom(t.cost.times(Math.max(t.howManyCanBuy,1))),e<8&&this.rateOfChange.copyFrom(t.rateOfChange),this.isAffordable=t.isAffordable,this.buyUntil10=i,this.isContinuumActive=Laitela.continuumActive,this.isContinuumActive&&(this.continuumValue=t.continuumValue),this.isShown=DimBoost.totalBoosts>0&&DimBoost.totalBoosts+3>=e||PlayerProgress.infinityUnlocked(),this.isCostsAD=NormalChallenge(6).isRunning&&e>2&&!this.isContinuumActive,this.amountDisplay=this.tier<8||AntimatterDimension(8).totalAmount.gte(1e12)?format(this.amount,2):formatInt(this.amount),this.hasTutorial=1===e&&Tutorial.isActive(TUTORIAL_STATE.DIM1)||2===e&&Tutorial.isActive(TUTORIAL_STATE.DIM2)},buy(){this.isContinuumActive||(1===this.howManyCanBuy?buyOneDimension(this.tier):buyAsManyAsYouCanBuy(this.tier))},showCostTitle(e){return e.exponent<1e6},buttonClass(){return{"o-primary-btn o-primary-btn--new":!0,"o-primary-btn--disabled":!this.isAffordable&&!this.isContinuumActive||!this.isUnlocked||this.isCapped,"o-non-clickable o-continuum":this.isContinuumActive}},buttonTextClass(){return{"button-content l-modern-buy-ad-text":!0,"tutorial--glow":this.isAffordable&&this.hasTutorial}}}},kk=wk;var Ck=(0,X.Z)(kk,Ek,Tk,!1,null,"e93a3710",null);const Ak=Ck.exports;var _k=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"reset-container galaxy"},[i("h4",[e._v(e._s(e.typeName)+" ("+e._s(e.sumText)+")")]),e.showText?i("span",[e._v("Requires: "+e._s(e.formatInt(e.requirement.amount))+" "+e._s(e.dimName)+" Antimatter D")]):e._e(),e.hasIncreasedScaling?i("span",[e._v(e._s(e.costScalingText))]):e._e(),i("button",{class:e.classObject,on:{click:[function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.buyGalaxy(!0)},function(t){return t.shiftKey?t.ctrlKey||t.altKey||t.metaKey?null:e.buyGalaxy(!1):null}]}},[e._v(" "+e._s(e.buttonText)+" "),e.hasTutorial?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()])])},Sk=[];const Dk={name:"ModernAntimatterGalaxyRow",data(){return{type:iu.NORMAL,galaxies:{normal:0,replicanti:0,dilation:0},requirement:{tier:1,amount:0},canBeBought:!1,distantStart:0,remoteStart:0,obscureStart:0,lockText:null,canBulkBuy:!1,creditsClosed:!1,scalingText:{distant:null,remote:null},hasTutorial:!1,showText:!1}},computed:{isDoomed:()=>Pelle.isDoomed,dimName(){return AntimatterDimension(this.requirement.tier).shortDisplayName},buttonText(){if(null!==this.lockText)return this.lockText;const e=[];return Achievement(111).isUnlocked||e.push("Dimensions"),Achievement(143).isUnlocked||e.push("Dimension Boosts"),0===e.length?"Increase the power of Tickspeed upgrades":`Reset your ${makeEnumeration(e)} to increase the power of Tickspeed upgrades`},sumText(){const e=[Math.max(this.galaxies.normal,0)];this.galaxies.replicanti>0&&e.push(this.galaxies.replicanti),this.galaxies.dilation>0&&e.push(this.galaxies.dilation);const t=e.map(this.formatGalaxies).join(" + ");return e.length>=2?`${t} = ${this.formatGalaxies(e.sum())}`:t},typeName(){switch(this.type){case iu.NORMAL:return"Antimatter Galaxies";case iu.DISTANT:return"Distant Antimatter Galaxies";case iu.REMOTE:return"Remote Antimatter Galaxies";case iu.THIRD:return"Obscure Antimatter Galaxies"}},hasIncreasedScaling(){return this.type!==iu.NORMAL},costScalingText(){switch(this.type){case iu.DISTANT:return`Each Galaxy is more expensive past ${quantifyInt("Galaxy",this.distantStart)}`;case iu.REMOTE:{const e=[{type:"distant",function:"quadratic",amount:this.distantStart},{type:"remote",function:"exponential",amount:this.remoteStart}];return`Increased Galaxy cost scaling: ${e.sort(((e,t)=>e.amount-t.amount)).map((e=>`${e.function} scaling past ${this.formatGalaxies(e.amount)} (${e.type})`)).join(", ").capitalize()}`}case iu.THIRD:let e=75e4+5e3*player.mending.rebuyables[16]+CorruptionUpgrade(9).effectOrDefault(0);return MendingUpgrade(17).isBought?`Galaxy costs scale much more rapidly beyond ${formatInt(e)} Galaxies`:`Galaxy costs scale much more rapidly beyond ${formatInt(e)} Galaxies, after Remote scaling`}},classObject(){return{"o-primary-btn o-primary-btn--new o-primary-btn--dimension-reset":!0,"tutorial--glow":this.canBeBought&&this.hasTutorial,"o-primary-btn--disabled":!this.canBeBought,"o-pelle-disabled-pointer":this.creditsClosed}}},methods:{update(){this.type=Galaxy.type,this.galaxies.normal=player.galaxies+GalaxyGenerator.galaxies,this.galaxies.replicanti=Replicanti.galaxies.total,this.galaxies.dilation=player.dilation.totalTachyonGalaxies;const e=Galaxy.requirement;this.requirement.amount=e.amount,this.requirement.tier=e.tier,this.canBeBought=e.isSatisfied&&Galaxy.canBeBought,this.distantStart=EternityChallenge(5).isRunning?0:Galaxy.costScalingStart,this.remoteStart=Galaxy.remoteStart,this.obscureStart=Galaxy.scalingThreeStart,this.lockText=Galaxy.lockText,this.canBulkBuy=EternityMilestone.autobuyMaxGalaxies.isReached,this.creditsClosed=GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||PlayerProgress.mendingUnlocked()&&player.isGameEnd,this.isDoomed&&(this.scalingText={distant:this.formatGalaxies(this.distantStart),remote:this.formatGalaxies(Galaxy.remoteStart)}),this.hasTutorial=Tutorial.isActive(TUTORIAL_STATE.GALAXY),this.showText=this.galaxies.normal<5e5},buyGalaxy(e){this.canBeBought&&manualRequestGalaxyReset(this.canBulkBuy&&e)},formatGalaxies(e){return e>1e8?format(e,2):formatInt(e)}}},Rk=Dk;var Mk=(0,X.Z)(Rk,_k,Sk,!1,null,null,null);const Ik=Mk.exports;var xk=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"reset-container dimboost"},[i("h4",[e._v(e._s(e.typeName)+" ("+e._s(e.boostCountText)+")")]),e.seeText?i("span",[e._v("Requires: "+e._s(e.formatInt(e.requirement.amount))+" "+e._s(e.dimName)+" Antimatter Dimensions")]):e._e(),e.scaledBoost?i("span",[e._v("Dimension Boost cost scaling increases past "+e._s(e.format(e.scaledBoostStart,2,2))+" Dimension Boosts")]):e._e(),i("button",{class:e.classObject,on:{click:[function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.dimensionBoost(!0)},function(t){return t.shiftKey?t.ctrlKey||t.altKey||t.metaKey?null:e.dimensionBoost(!1):null}]}},[e._v(" "+e._s(e.unlockedByBoost)+" "),e.hasTutorial?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()])])},Pk=[];const Gk={name:"ModernDimensionBoostRow",data(){return{requirement:{tier:1,amount:0},isBuyable:!1,purchasedBoosts:0,imaginaryBoosts:0,lockText:null,unlockedByBoost:null,creditsClosed:!1,requirementText:null,hasTutorial:!1,type:DIMBOOST_TYPE.BOOST,seeText:!0,scaledBoost:!1,scaledBoostStart:0}},computed:{isDoomed:()=>Pelle.isDoomed,dimName(){return AntimatterDimension(this.requirement.tier).shortDisplayName},typeName(){switch(this.type){case DIMBOOST_TYPE.BOOST:return"Dimension Boosts";case DIMBOOST_TYPE.SHIFT:return"Scaled Dimension Boosts";case DIMBOOST_TYPE.WARP:return"Superscaled Dimension Boosts";case DIMBOOST_TYPE.SCALE:return"Warped Dimension Boosts"}},boostCountText(){if(this.requirementText)return this.requirementText;const e=[this.purchasedBoosts];0!==this.imaginaryBoosts&&e.push(this.imaginaryBoosts);const t=e.map(formatInt).join(" + ");return e.length>=2?`${t} = ${formatInt(e.sum())}`:t},classObject(){return{"o-primary-btn o-primary-btn--new o-primary-btn--dimension-reset":!0,"tutorial--glow":this.isBuyable&&this.hasTutorial,"o-primary-btn--disabled":!this.isBuyable,"o-pelle-disabled-pointer":this.creditsClosed}}},methods:{update(){const e=Qw.requirement;this.type=Qw.type,this.requirement.tier=e.tier,this.requirement.amount=e.amount,this.isBuyable=e.isSatisfied&&Qw.canBeBought,this.purchasedBoosts=Qw.purchasedBoosts,this.imaginaryBoosts=Qw.imaginaryBoosts,this.lockText=Qw.lockText,this.unlockedByBoost=Qw.unlockedByBoost,this.creditsClosed=GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||PlayerProgress.mendingUnlocked()&&player.isGameEnd,this.isDoomed&&(this.requirementText=formatInt(this.purchasedBoosts)),this.hasTutorial=Tutorial.isActive(TUTORIAL_STATE.DIMBOOST),this.seeText=this.purchasedBoosts<1e9,this.scaledBoost=this.type>0,this.scaledBoostStart=Qw.shiftStart},dimensionBoost(e){Qw.requirement.isSatisfied&&Qw.canBeBought&&manualRequestDimensionBoost(e)}}},Uk=Gk;var Bk=(0,X.Z)(Uk,xk,Pk,!1,null,null,null);const Nk=Bk.exports,Ok={name:"ModernAntimatterDimensionsTab",components:{PrimaryButton:Vs,AntimatterDimensionProgressBar:bw,AntimatterDimensionRow:Ak,AntimatterGalaxyRow:Ik,DimensionBoostRow:Nk,TickspeedRow:mk},data(){return{hasDimensionBoosts:!1,buyUntil10:!0,isSacrificeUnlocked:!1,isSacrificeAffordable:!1,buy10Mult:new Decimal(0),currentSacrifice:new Decimal(0),sacrificeBoost:new Decimal(0),disabledCondition:"",isQuickResetAvailable:!1,hasContinuum:!1,isContinuumActive:!1,multiplierText:""}},computed:{sacrificeTooltip(){return`Boosts 8th Antimatter Dimension by ${formatX(this.sacrificeBoost,2,2)}`}},methods:{maxAll(){maxAll()},sacrifice(){sacrificeBtnClick()},changeBuyMode(){if(this.hasContinuum)if(this.isContinuumActive)Laitela.setContinuum(!1),player.buyUntil10=!0;else if(player.buyUntil10)player.buyUntil10=!1;else{if(ImaginaryUpgrade(21).isLockingMechanics&&player.auto.disableContinuum)return void ImaginaryUpgrade(21).tryShowWarningModal();Laitela.setContinuum(!0)}else player.buyUntil10=!player.buyUntil10},getUntil10Display(){return this.isContinuumActive?"Continuum":this.buyUntil10?"Until 10":"Buy 1"},update(){this.hasDimensionBoosts=player.dimensionBoosts>0,this.buyUntil10=player.buyUntil10,this.hasContinuum=Laitela.continuumUnlocked,this.isContinuumActive=Laitela.continuumActive,this.isQuickResetAvailable=Player.isInAntimatterChallenge&&Player.antimatterChallenge.isQuickResettable;const e=Sacrifice.isVisible;if(this.isSacrificeUnlocked=e,this.buy10Mult.copyFrom(AntimatterDimensions.buyTenMultiplier),this.multiplierText=`Buy 10 Dimension purchase multiplier: ${formatX(this.buy10Mult,2,2)}`,!e)return;this.isSacrificeAffordable=Sacrifice.canSacrifice,this.currentSacrifice.copyFrom(Sacrifice.totalBoost),this.sacrificeBoost.copyFrom(Sacrifice.nextBoost),this.disabledCondition=Sacrifice.disabledCondition;const t=this.isSacrificeUnlocked?` | Dimensional Sacrifice multiplier: ${formatX(this.currentSacrifice,2,2)}`:"";this.multiplierText+=t}}},Lk=Ok;var Fk=(0,X.Z)(Lk,vk,bk,!1,null,"38071904",null);const $k=Fk.exports;var Hk=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-classic-antimatter-dim-tab"},[i("AntimatterDimensionsTabHeader"),e._v(" "+e._s(e.multiplierText)+" "),i("TickspeedRow"),i("div",{staticClass:"l-dimensions-container"},[e._l(8,(function(e){return i("AntimatterDimensionRow",{key:e,attrs:{tier:e}})})),i("DimensionBoostRow"),i("AntimatterGalaxyRow")],2),e.isQuickResetAvailable?i("PrimaryButton",{staticClass:"o-primary-btn--quick-reset",on:{click:e.quickReset}},[e._v(" Perform a Dimension Boost reset "),e.hasDimensionBoosts?i("span",[e._v(" but lose a Dimension Boost")]):i("span",[e._v(" for no gain")])]):e._e(),i("div",{staticClass:"l-flex"})],1)},qk=[],Vk=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.showRow,expression:"showRow"}],staticClass:"c-dimension-row c-antimatter-dim-row l-dimension-single-row",class:{"c-dim-row--not-reached":!e.isUnlocked}},[i("GenericDimensionRowText",{attrs:{tier:e.tier,name:e.name,"multiplier-text":e.formatX(e.multiplier,2,2),"amount-text":e.amountText,rate:e.rateOfChange}}),i("div",{staticClass:"l-dim-row-multi-button-container"},[e.isContinuumActive?e._e():i("PrimaryButton",{class:e.buySingleClass,attrs:{enabled:e.isAffordable&&!e.isCapped&&e.isUnlocked},on:{click:e.buySingle}},[i("div",{class:e.tutorialClass()},[e._v(" "+e._s(e.singleText)+" ")]),i("div",{staticClass:"c-dim-purchase-count-tooltip"},[e._v(" "+e._s(e.boughtTooltip)+" ")]),e.hasTutorial?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()]),i("PrimaryButton",{class:e.buyTenClass,attrs:{enabled:(e.isAffordableUntil10||e.isContinuumActive)&&!e.isCapped&&e.isUnlocked},on:{click:e.buyUntil10}},[e._v(" "+e._s(e.until10Text)+" "),i("div",{staticClass:"c-dim-purchase-count-tooltip"},[e._v(" "+e._s(e.boughtTooltip)+" ")])])],1)],1)},Yk=[];const Wk={name:"AntimatterDimensionRow",components:{GenericDimensionRowText:Sw,PrimaryButton:Vs},props:{tier:{type:Number,required:!0}},data(){return{end:!1,isUnlocked:!1,isCapped:!1,multiplier:new Decimal(0),amount:new Decimal(0),bought:0,boughtBefore10:0,rateOfChange:new Decimal(0),singleCost:new Decimal(0),until10Cost:new Decimal(0),isAffordable:!1,isAffordableUntil10:!1,isContinuumActive:!1,continuumValue:0,isShown:!1,isCostsAD:!1,formattedAmount:null,hasTutorial:!1}},computed:{isDoomed:()=>Pelle.isDoomed,name(){return`${Eie(this.tier).shortDisplayName} Antimatter Dimension`},amountText(){if(this.formattedAmount)return this.formattedAmount;const e=this.tier<8?format(this.amount,2):formatInt(this.amount);return`${e} (${formatInt(this.bought)})`},singleText(){if(this.isCapped)return"Capped";const e=this.showCostTitle(this.singleCost)?"Cost: ":"",t=this.isCostsAD?`${this.costUnit}`:"AM";return`${e} ${format(this.singleCost)} ${t}`},until10Text(){if(this.isCapped)return"Shattered by Nameless";if(this.isContinuumActive)return`Continuum: ${this.continuumString}`;const e=`Until ${formatInt(10)},${this.showCostTitle(this.until10Cost)?" Cost":""}`,t=this.isCostsAD?`${this.costUnit}`:"AM";return`${e} ${format(this.until10Cost)} ${t}`},continuumString(){return this.continuumValue<1e9?formatFloat(this.continuumValue,2):format(this.continuumValue,2,2)},showRow(){return this.isShown||this.isUnlocked||this.amount.gt(0)},boughtTooltip(){return this.isCapped?`Nameless prevents the purchase of more than ${format(1)} 8th Antimatter Dimension`:this.isContinuumActive?"Continuum produces all your Antimatter Dimensions":`Purchased ${quantifyInt("time",this.bought)}`},costUnit(){return`${Eie(this.tier-2).shortDisplayName} AD`},buySingleClass(){return{"o-primary-btn--buy-ad o-primary-btn--buy-single-ad c-dim-tooltip-container":!0,"l-dim-row-small-text":this.isLongText(this.singleText)||!this.showCostTitle(this.singleCost)}},buyTenClass(){return{"o-primary-btn--buy-ad o-primary-btn--buy-dim c-dim-tooltip-container":!0,"o-primary-btn--buy-10-ad":!this.isContinuumActive,"o-primary-btn--continuum-ad o-continuum":this.isContinuumActive,"l-dim-row-small-text":this.isLongText(this.until10Text)&&!this.isContinuumActive}}},methods:{update(){const e=this.tier;if(8===e&&(this.formattedAmount=formatInt(this.amount)),8===e&&Eie(8).totalAmount.gte(1e12)&&(this.formattedAmount=format(this.amount,2)),e>DimBoost.maxDimensionsUnlockable)return;const t=Eie(e);this.isUnlocked=t.isAvailableForPurchase,this.isCapped=8===e&&Enslaved.isRunning&&t.bought>=1,this.multiplier.copyFrom(t.multiplier),this.amount.copyFrom(t.totalAmount),this.totalAmount=t.totalAmount,this.bought=t.bought,this.boughtBefore10=t.boughtBefore10,this.singleCost.copyFrom(t.cost),this.until10Cost.copyFrom(t.costUntil10),e<8&&this.rateOfChange.copyFrom(t.rateOfChange),this.isAffordable=t.isAffordable,this.isAffordableUntil10=t.isAffordableUntil10,this.isContinuumActive=Laitela.continuumActive,this.isContinuumActive&&(this.continuumValue=t.continuumValue),this.isShown=DimBoost.totalBoosts>0&&DimBoost.totalBoosts+3>=e||PlayerProgress.infinityUnlocked(),this.isCostsAD=NormalChallenge(6).isRunning&&e>2&&!this.isContinuumActive,this.hasTutorial=1===e&&Tutorial.isActive(TUTORIAL_STATE.DIM1)||2===e&&Tutorial.isActive(TUTORIAL_STATE.DIM2)},buySingle(){this.isContinuumActive||buyOneDimension(this.tier)},buyUntil10(){this.isContinuumActive||buyManyDimension(this.tier)},showCostTitle(e){return e.exponent<1e6},isLongText(e){return e.length>20},tutorialClass(){return{"l-glow-container":!0,"tutorial--glow":this.isAffordable&&this.hasTutorial}}}},jk=Wk;var Xk=(0,X.Z)(jk,Vk,Yk,!1,null,"3019072b",null);const zk=Xk.exports;var Kk=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-antimatter-dim-tab__header"},[i("PrimaryButton",{directives:[{name:"show",rawName:"v-show",value:e.isSacrificeUnlocked,expression:"isSacrificeUnlocked"},{name:"tooltip",rawName:"v-tooltip",value:e.sacrificeTooltip,expression:"sacrificeTooltip"}],staticClass:"o-primary-btn--sacrifice",attrs:{enabled:e.isSacrificeAffordable},on:{click:e.sacrifice}},[e.isSacrificeAffordable?i("span",[e._v(" Dimensional Sacrifice ("+e._s(e.formatX(e.sacrificeBoost,2,2))+") ")]):i("span",[e._v(" Dimensional Sacrifice Disabled ("+e._s(e.disabledCondition)+") ")])]),i("PrimaryButton",{staticClass:"o-primary-btn--buy-max",on:{click:e.maxAll}},[e._v(" Max all (M) ")])],1)},Zk=[];const Qk={name:"SynergismAntimatterDimensionsTabHeader",components:{PrimaryButton:Vs},data(){return{isSacrificeUnlocked:!1,isSacrificeAffordable:!1,currentSacrifice:new Decimal(0),sacrificeBoost:new Decimal(0),disabledCondition:""}},computed:{sacrificeTooltip(){return`Boosts 8th Antimatter Dimension by ${formatX(this.sacrificeBoost,2,2)}`}},methods:{update(){const e=Sacrifice.isVisible;this.isSacrificeUnlocked=e,e&&(this.isSacrificeAffordable=Sacrifice.canSacrifice,this.currentSacrifice.copyFrom(Sacrifice.totalBoost),this.sacrificeBoost.copyFrom(Sacrifice.nextBoost),this.disabledCondition=Sacrifice.disabledCondition)},sacrifice(){sacrificeBtnClick()},maxAll(){maxAll()}}},Jk=Qk;var eC=(0,X.Z)(Jk,Kk,Zk,!1,null,null,null);const tC=eC.exports;var iC=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-dimension-row c-antimatter-dim-row c-antimatter-prestige-row"},[i("div",{staticClass:"l-dim-row__prestige-text c-dim-row__label c-dim-row__label--amount l-text-wrapper"},[e._v(" "+e._s(e.typeName)+" ("+e._s(e.sumText)+"): requires "+e._s(e.formatInt(e.requirement.amount))+" "+e._s(e.dimName)+" Dimensions "),i("div",{staticClass:"l-scaling-text-wrapper"},[e._v(" "+e._s(e.hasIncreasedScaling?e.costScalingText:"")+" ")])]),i("PrimaryButton",{class:e.classObject,attrs:{enabled:e.canBeBought},on:{click:[function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.buyGalaxy(!0)},function(t){return t.shiftKey?t.ctrlKey||t.altKey||t.metaKey?null:e.buyGalaxy(!1):null}]}},[e._v(" "+e._s(e.buttonText)+" "),e.hasTutorial?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()])],1)},aC=[];const nC={name:"SynergismAntimatterGalaxyRow",components:{PrimaryButton:Vs},data(){return{type:GALAXY_TYPE.NORMAL,galaxies:{normal:0,replicanti:0,dilation:0},requirement:{tier:1,amount:0},canBeBought:!1,distantStart:0,remoteStart:0,obscureStart:0,lockText:null,canBulkBuy:!1,creditsClosed:!1,scalingText:{distant:null,remote:null},hasTutorial:!1}},computed:{isDoomed:()=>Pelle.isDoomed,dimName(){return AntimatterDimension(this.requirement.tier).displayName},buttonText(){if(null!==this.lockText)return this.lockText;const e=[];return Achievement(111).isUnlocked||e.push("Dimensions"),Achievement(143).isUnlocked||e.push("Dimension Boosts"),0===e.length?"Increase the power of Tickspeed upgrades":`Reset your ${makeEnumeration(e)} to increase the power of Tickspeed upgrades`},sumText(){const e=[Math.max(this.galaxies.normal,0)];this.galaxies.replicanti>0&&e.push(this.galaxies.replicanti),this.galaxies.dilation>0&&e.push(this.galaxies.dilation);const t=e.map(this.formatGalaxies).join(" + ");return e.length>=2?`${t} = ${this.formatGalaxies(e.sum())}`:t},typeName(){switch(this.type){case GALAXY_TYPE.NORMAL:return"Antimatter Galaxies";case GALAXY_TYPE.DISTANT:return"Distant Antimatter Galaxies";case GALAXY_TYPE.REMOTE:return"Remote Antimatter Galaxies";case GALAXY_TYPE.THIRD:return"Obscure Antimatter Galaxies"}},hasIncreasedScaling(){return this.type!==GALAXY_TYPE.NORMAL},costScalingText(){switch(this.type){case GALAXY_TYPE.DISTANT:return`Each Galaxy is more expensive past ${quantifyInt("Galaxy",this.distantStart)}`;case GALAXY_TYPE.REMOTE:{const e=[{type:"distant",function:"quadratic",amount:this.distantStart},{type:"remote",function:"exponential",amount:this.remoteStart}];return`Increased Galaxy cost scaling: ${e.sort(((e,t)=>e.amount-t.amount)).map((e=>`${e.function} scaling past ${this.formatGalaxies(e.amount)} (${e.type})`)).join(", ").capitalize()}`}case GALAXY_TYPE.THIRD:let e=75e4+5e3*player.mending.rebuyables[16]+CorruptionUpgrade(9).effectOrDefault(0);return pl(17).isBought?`Galaxy costs scale much more rapidly beyond ${formatInt(e)} Galaxies`:`Galaxy costs scale much more rapidly beyond ${formatInt(e)} Galaxies, after Remote scaling`}},classObject(){return{"o-primary-btn--galaxy l-dim-row__prestige-button":!0,"tutorial--glow":this.canBeBought&&this.hasTutorial,"o-pelle-disabled-pointer":this.creditsClosed}}},methods:{update(){this.type=Galaxy.type,this.galaxies.normal=player.galaxies+GalaxyGenerator.galaxies,this.galaxies.replicanti=Replicanti.galaxies.total,this.galaxies.dilation=player.dilation.totalTachyonGalaxies;const e=Galaxy.requirement;this.requirement.amount=e.amount,this.requirement.tier=e.tier,this.canBeBought=e.isSatisfied&&Galaxy.canBeBought,this.distantStart=EternityChallenge(5).isRunning?0:Galaxy.costScalingStart,this.remoteStart=Galaxy.remoteStart,this.lockText=Galaxy.lockText,this.canBulkBuy=EternityMilestone.autobuyMaxGalaxies.isReached,this.creditsClosed=GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||PlayerProgress.mendingUnlocked()&&player.isGameEnd,this.hasTutorial=Tutorial.isActive(TUTORIAL_STATE.GALAXY),this.obscureStart=Galaxy.scalingThreeStart},buyGalaxy(e){this.canBeBought&&manualRequestGalaxyReset(this.canBulkBuy&&e)},formatGalaxies(e){return e>1e8?format(e,2):formatInt(e)}}},sC=nC;var rC=(0,X.Z)(sC,iC,aC,!1,null,"779c0d24",null);const oC=rC.exports;var lC=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-dimension-row c-antimatter-dim-row c-antimatter-prestige-row"},[i("div",{staticClass:"l-dim-row__prestige-text c-dim-row__label c-dim-row__label--amount"},[e._v(" "+e._s(e.boostScale)+" Dimension Boost ("+e._s(e.boostCountText)+") "+e._s(e.dimRequirementText)+" ")]),i("PrimaryButton",{class:e.classObject,attrs:{enabled:e.isBuyable},on:{click:[function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.dimensionBoost(!0)},function(t){return t.shiftKey?t.ctrlKey||t.altKey||t.metaKey?null:e.dimensionBoost(!1):null}]}},[e._v(" "+e._s(e.unlockedByBoost)+" "),e.hasTutorial?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()])],1)},cC=[];const uC={name:"SynergismDimensionBoostRow",components:{PrimaryButton:Vs},data(){return{requirement:{tier:1,amount:0},isBuyable:!1,purchasedBoosts:0,imaginaryBoosts:0,lockText:null,unlockedByBoost:null,creditsClosed:!1,requirementText:null,hasTutorial:!1}},computed:{isDoomed:()=>Pelle.isDoomed,dimName(){return AntimatterDimension(this.requirement.tier).displayName},boostCountText(){if(this.requirementText)return this.requirementText;const e=[this.purchasedBoosts];0!==this.imaginaryBoosts&&e.push(this.imaginaryBoosts);const t=e.map(formatInt).join(" + ");return e.length>=2?`${t} = ${formatInt(e.sum())}`:t},dimRequirementText(){return this.purchasedBoosts>=1e9?"":`: requires ${formatInt(this.requirement.amount)} ${dimName()} Dimensions`},boostScale(){switch(this.type){case 1:return"Scaled";case 2:return"Superscaled";case 3:return"Warped";default:return""}},classObject(){return{"o-primary-btn--dimboost l-dim-row__prestige-button":!0,"tutorial--glow":this.isBuyable&&this.hasTutorial,"o-pelle-disabled-pointer":this.creditsClosed}}},methods:{update(){const e=DimBoost.requirement;this.requirement.tier=e.tier,this.requirement.amount=e.amount,this.isBuyable=e.isSatisfied&&DimBoost.canBeBought,this.purchasedBoosts=DimBoost.purchasedBoosts,this.imaginaryBoosts=DimBoost.imaginaryBoosts,this.lockText=DimBoost.lockText,this.unlockedByBoost=DimBoost.unlockedByBoost,this.creditsClosed=GameEnd.creditsClosed,this.isDoomed&&(this.requirementText=formatInt(this.purchasedBoosts)),this.hasTutorial=Tutorial.isActive(TUTORIAL_STATE.DIMBOOST)},dimensionBoost(e){DimBoost.requirement.isSatisfied&&DimBoost.canBeBought&&manualRequestDimensionBoost(e)}}},dC=uC;var hC=(0,X.Z)(dC,lC,cC,!1,null,null,null);const mC=hC.exports,pC={name:"SynergismAntimatterDimensionsTab",components:{PrimaryButton:Vs,AntimatterDimensionRow:zk,AntimatterDimensionsTabHeader:tC,AntimatterGalaxyRow:oC,DimensionBoostRow:mC,TickspeedRow:mk},data(){return{hasDimensionBoosts:!1,isQuickResetAvailable:!1,isSacrificeUnlocked:!1,buy10Mult:new Decimal(0),currentSacrifice:new Decimal(0),hasRealityButton:!1,multiplierText:""}},methods:{update(){this.hasDimensionBoosts=player.dimensionBoosts>0,this.isQuickResetAvailable=Player.isInAntimatterChallenge&&Player.antimatterChallenge.isQuickResettable,this.isSacrificeUnlocked=Sacrifice.isVisible,this.buy10Mult.copyFrom(AntimatterDimensions.buyTenMultiplier),this.currentSacrifice.copyFrom(Sacrifice.totalBoost),this.hasRealityButton=PlayerProgress.realityUnlocked()||TimeStudy.reality.isBought;const e=this.isSacrificeUnlocked?` | Dimensional Sacrifice multiplier: ${formatX(this.currentSacrifice,2,2)}`:"";this.multiplierText=`Buy 10 Dimension purchase multiplier: ${formatX(this.buy10Mult,2,2)}${e}`},quickReset(){softReset(-1,!0,!0)}}},yC=pC;var fC=(0,X.Z)(yC,Hk,qk,!1,null,"50df59c7",null);const gC=fC.exports,vC={name:"AntimatterDimensionsTab",components:{ClassicAntimatterDimensionsTab:gk,ModernAntimatterDimensionsTab:$k,SynergismAntimatterDimensionsTab:gC},computed:{activeComponent(){return"Modern"==this.$viewModel.UIType?"ModernAntimatterDimensionsTab":"Synergism"==this.$viewModel.UIType?"SynergismAntimatterDimensionsTab":"ClassicAntimatterDimensionsTab"}}},bC=vC;var EC=(0,X.Z)(bC,uw,dw,!1,null,null,null);const TC=EC.exports;var wC=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-autobuyers-tab"},[i("AutobuyerToggles"),i("OpenModalHotkeysButton"),e.hasSeenGamespeedAlteringEffects?i("div",[e._v(" Autobuyer intervals and time-based settings are always "),i("b",[e._v("real time")]),e._v(" and therefore "),i("br"),e._v(" unaffected by anything which may alter how fast the game itself is running. "),i("br"),i("br")]):e._e(),e.hasInfinity?e._e():i("div",[e._v(" Challenges for upgrading autobuyers are unlocked by reaching Infinity. ")]),i("b",[e._v("Autobuyers with no displayed bulk have unlimited bulk by default.")]),i("b",[e._v(" Antimatter Dimension Autobuyers can have their bulk upgraded once interval is below "+e._s(e.formatInt(100))+" ms. ")]),e.hasInstant?i("b",[e._v('Autobuyers with "Instant" interval will trigger every game tick ('+e._s(e.gameTickLength)+").")]):e._e(),i("MendingAutobuyerBox",{staticClass:"c-mending-pos"}),i("RealityAutobuyerBox",{staticClass:"c-reality-pos"}),i("EternityAutobuyerBox",{staticClass:"c-eternity-pos"}),i("BigCrunchAutobuyerBox",{staticClass:"c-infinity-pos"}),i("GalaxyAutobuyerBox"),i("DimensionBoostAutobuyerBox"),e.hasContinuum?e._e():i("TickspeedAutobuyerBox"),e.displayADAutobuyersIndividually?e._l(8,(function(e){return i("DimensionAutobuyerBox",{key:e,attrs:{tier:e}})})):e._e(),i("SimpleAutobuyersMultiBox")],2)},kC=[],CC=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryToggleButton",{staticClass:"o-primary-btn--subtab-option",attrs:{on:"Pause autobuyers",off:"Resume autobuyers"},model:{value:e.autobuyersOn,callback:function(t){e.autobuyersOn=t},expression:"autobuyersOn"}}),i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:function(t){return e.toggleAllAutobuyers()}}},[e._v(" "+e._s(e.allAutobuyersDisabled?"Enable":"Disable")+" all autobuyers ")]),e.continuumDisabled?i("span",[e.showContinuum?i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option"},[e._v(" Continuum is disabled ")]):e._e()],1):i("span",[e.showContinuum?i("PrimaryToggleButton",{staticClass:"o-primary-btn--subtab-option",attrs:{on:"Enable Continuum",off:"Disable Continuum"},model:{value:e.disableContinuum,callback:function(t){e.disableContinuum=t},expression:"disableContinuum"}}):e._e()],1)],1)},AC=[];const _C={name:"AutobuyerToggles",components:{PrimaryButton:Vs,PrimaryToggleButton:Sh},data(){return{continuumDisabled:!1,autobuyersOn:!1,showContinuum:!1,disableContinuum:!1,allAutobuyersDisabled:!1}},watch:{autobuyersOn(e){player.auto.autobuyersOn=e},disableContinuum(e){!ImaginaryUpgrade(21).isLockingMechanics||e?Laitela.setContinuum(!e):ImaginaryUpgrade(21).tryShowWarningModal()}},methods:{update(){this.continuumDisabled=Pelle.isDoomed&&!UZ.unlocks.unlockPelleContinuum.isunlocked,this.autobuyersOn=player.auto.autobuyersOn,this.showContinuum=Laitela.isUnlocked,this.disableContinuum=player.auto.disableContinuum,this.allAutobuyersDisabled=Autobuyers.unlocked.every((e=>!e.isActive))},toggleAllAutobuyers(){for(const e of Autobuyers.unlocked)e.isActive=this.allAutobuyersDisabled}}},SC=_C;var DC=(0,X.Z)(SC,CC,AC,!1,null,"77b301a0",null);const RC=DC.exports;var MC=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("AutobuyerBox",{attrs:{autobuyer:e.autobuyer,"show-interval":!e.postBreak,"is-modal":e.isModal,name:"Automatic Big Crunch"},scopedSlots:e._u([e.hasMaxedInterval?e.postBreak?{key:"intervalSlot",fn:function(){return[e.hasAdditionalModes?i("ExpandingControlBox",{attrs:{"auto-close":!0},scopedSlots:e._u([{key:"header",fn:function(){return[i("div",{staticClass:"o-primary-btn c-autobuyer-box__mode-select c-autobuyer-box__mode-select-header"},[e._v(" ▼ Current Setting: ▼ "),i("br"),e._v(" "+e._s(e.modeName(e.mode))+" ")])]},proxy:!0},{key:"dropdown",fn:function(){return[i("AutobuyerDropdownEntry",{attrs:{autobuyer:e.autobuyer,modes:e.modes,"mode-name-fn":e.modeName}})]},proxy:!0}],null,!1,2761615181)}):i("span",[e._v(" "+e._s(e.modeProps(e.mode).title)+": ")])]},proxy:!0}:null:{key:"intervalSlot",fn:function(){return[i("AutobuyerIntervalButton",{attrs:{autobuyer:e.autobuyer}})]},proxy:!0},e.postBreak?{key:"toggleSlot",fn:function(){return[i("AutobuyerInput",e._b({key:e.mode,attrs:{autobuyer:e.autobuyer}},"AutobuyerInput",e.modeProps(e.mode).input,!1))]},proxy:!0}:null,e.postBreak&&e.mode===e.amountMode?{key:"checkboxSlot",fn:function(){return[i("label",{staticClass:"o-autobuyer-toggle-checkbox o-clickable"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.increaseWithMult,expression:"increaseWithMult"}],staticClass:"o-clickable",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.increaseWithMult)?e._i(e.increaseWithMult,null)>-1:e.increaseWithMult},on:{change:function(t){var i=e.increaseWithMult,a=t.target,n=!!a.checked;if(Array.isArray(i)){var s=null,r=e._i(i,s);a.checked?r<0&&(e.increaseWithMult=i.concat([s])):r>-1&&(e.increaseWithMult=i.slice(0,r).concat(i.slice(r+1)))}else e.increaseWithMult=n}}}),e._v(" Dynamic amount ")])]},proxy:!0}:null],null,!0)})},IC=[],xC=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isUnlocked||e.isBought?i("div",{class:e.autobuyerBoxRowClass},[i("div",{staticClass:"l-autobuyer-box__header"},[e._v(" "+e._s(e.name)+" "),e.showInterval?i("AutobuyerIntervalLabel",{attrs:{autobuyer:e.autobuyer}}):e._e(),e.isShowingStateInfo?i("div",[e._v(" "+e._s(e.extraInfo)+" ")]):e._e()],1),i("div",{staticClass:"c-autobuyer-box-row__intervalSlot"},[e._t("intervalSlot")],2),i("div",{staticClass:"c-autobuyer-box-row__toggleSlot"},[e._t("toggleSlot")],2),i("div",{staticClass:"c-autobuyer-box-row__checkboxSlot"},[e._t("checkboxSlot")],2),i("div",{staticClass:"c-autobuyer-box-row__optionSlot"},[e._t("optionSlot")],2),i("div",{staticClass:"l-autobuyer-box__footer",on:{click:e.toggle}},[i("label",{class:e.autobuyerStateClass},[i("span",{class:e.autobuyerToggleClass})]),i("input",{attrs:{disabled:!e.globalToggle,name:e.name,type:"checkbox"},domProps:{checked:e.isActive&&e.globalToggle}})])]):e.canBeBought?i("div",{class:e.autobuyerBuyBoxClass,on:{click:e.purchase}},[e._v(" "+e._s(e.name)+" "),i("br"),e._v(" Requirement: "+e._s(e.format(e.antimatterCost))+" Total Antimatter "+e._s(e.showEternity)+" ")]):e._e()},PC=[],GC=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-autobuyer-box__small-text"},[e._v(" Current interval: "+e._s(e.intervalText)+" "),e.isShowingBulk?i("span",[i("br"),e._v(" "+e._s(e.bulkText)+" ")]):e._e()])},UC=[];const BC={name:"AutobuyerIntervalLabel",props:{autobuyer:{type:Object,required:!1,default:null},intervalIn:{type:Number,required:!1,default:null},bulkIn:{type:Number,required:!1,default:null}},data(){return{interval:0,bulk:0,isShowingBulk:!1}},computed:{intervalText(){return this.interval0?`Will trigger in ${TimeSpan.fromSeconds(this.nextTime).toStringShort()}`:"Will trigger ASAP";case AUTO_ETERNITY_MODE.X_HIGHEST:default:return`Will trigger at ${format(this.nextValue,2)} ${"Infinity"===this.autobuyer.name?"IP":"EP"}`}}},watch:{isActive(e){this.autobuyer.isActive=e}},methods:{update(){const e=this.autobuyer;this.isUnlocked=e.isUnlocked,this.isActive=e.isActive,this.globalToggle=player.auto.autobuyersOn,this.canBeBought=e.canBeBought,this.isUnlockable=e.canUnlockSlowVersion,this.antimatterCost=e.antimatterCost,this.isBought=e.isBought,this.antimatter.copyFrom(player.records.thisEternity.maxAM),this.currMode=e.mode,this.isShowingStateInfo&&(this.nextValue=new Decimal(e.highestPrevPrestige).times(e.xHighest),this.nextTime=e.timeToNextTick)},toggle(){this.isActive=!this.isActive},purchase(){this.autobuyer.purchase(),TabNotification.newAutobuyer.clearTrigger(),GameCache.cheapestAntimatterAutobuyer.invalidate()}}},$C=FC;var HC=(0,X.Z)($C,xC,PC,!1,null,"9b85a9f2",null);const qC=HC.exports;var VC=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",e._l(e.modes,(function(t){return i("div",{key:t,staticClass:"o-primary-btn c-autobuyer-box__mode-select l-autobuyer-choice",attrs:{value:t},on:{click:function(i){return e.changeMode(t)}}},[e._v(" "+e._s(e.modeNameFn(t))+" ")])})),0)},YC=[];const WC={name:"AutobuyerDropdownEntry",props:{autobuyer:{type:Object,required:!0},modes:{type:Array,required:!0},modeNameFn:{type:Function,required:!0}},data(){return{mode:0}},methods:{update(){this.mode=this.autobuyer.mode},changeMode(e){this.autobuyer.mode=e,this.mode=e,this.$parent.openRequest=!1}}},jC=WC;var XC=(0,X.Z)(jC,VC,YC,!1,null,"b8f762d6",null);const zC=XC.exports;var KC=function(){var e=this,t=e.$createElement,i=e._self._c||t;return!e.isMaxed&&e.isUpgradeable?i("button",{class:e.classObject,on:{click:e.upgradeInterval}},[e._v(" "+e._s(e.formatPercents(.4))+" smaller interval "),i("br"),e._v(" Cost: "+e._s(e.format(e.cost,2))+" IP ")]):e.isMaxed?e._e():i("button",{staticClass:"o-autobuyer-btn l-autobuyer-box__button o-autobuyer-btn--unavailable"},[e._v(" Complete the challenge to upgrade interval ")])},ZC=[];const QC={name:"AutobuyerIntervalButton",props:{autobuyer:{type:Object,required:!0}},data(){return{cost:0,isMaxed:!1,isUpgradeable:!1,isAffordable:!1}},computed:{classObject(){return{"o-autobuyer-btn":!0,"l-autobuyer-box__button":!0,"o-autobuyer-btn--unavailable":!this.isAffordable}}},methods:{update(){this.cost=this.autobuyer.cost,this.isMaxed=this.autobuyer.hasMaxedInterval,this.isUpgradeable=this.autobuyer.canBeUpgraded,this.isAffordable=Currency.infinityPoints.gte(this.cost)},upgradeInterval(){this.autobuyer.upgradeInterval()}}},JC=QC;var eA=(0,X.Z)(JC,KC,ZC,!1,null,"6e92c4ea",null);const tA=eA.exports,iA={name:"BigCrunchAutobuyerBox",components:{AutobuyerBox:qC,AutobuyerIntervalButton:tA,AutobuyerInput:K,ExpandingControlBox:$o,AutobuyerDropdownEntry:zC},props:{isModal:{type:Boolean,required:!1,default:!1}},data(){return{isDoomed:!1,postBreak:!1,hasMaxedInterval:!1,mode:AUTO_CRUNCH_MODE.AMOUNT,hasAdditionalModes:!1,increaseWithMult:!0}},computed:{autobuyer:()=>Autobuyer.bigCrunch,modes:()=>[AUTO_CRUNCH_MODE.AMOUNT,AUTO_CRUNCH_MODE.TIME,AUTO_CRUNCH_MODE.X_HIGHEST],amountMode:()=>AUTO_ETERNITY_MODE.AMOUNT},watch:{increaseWithMult(e){this.autobuyer.increaseWithMult=e}},methods:{update(){this.isDoomed=Pelle.isDoomed,this.postBreak=player.break,this.hasMaxedInterval=this.autobuyer.hasMaxedInterval,this.mode=this.autobuyer.mode,this.hasAdditionalModes=this.autobuyer.hasAdditionalModes,this.increaseWithMult=this.autobuyer.increaseWithMult},modeProps(e){switch(e){case AUTO_CRUNCH_MODE.AMOUNT:return{title:"Big Crunch at X IP",input:{property:"amount",type:"decimal"}};case AUTO_CRUNCH_MODE.TIME:return{title:"Seconds between Crunches",input:{property:"time",type:"float"}};case AUTO_CRUNCH_MODE.X_HIGHEST:return{title:"X times highest IP",input:{property:"xHighest",type:"decimal"}}}throw new Error("Unknown Auto Crunch mode")},modeName(e){return this.modeProps(e).title}}},aA=iA;var nA=(0,X.Z)(aA,MC,IC,!1,null,"d66a5b9a",null);const sA=nA.exports;var rA=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("AutobuyerBox",{attrs:{autobuyer:e.autobuyer,name:e.name,"show-interval":""},scopedSlots:e._u([{key:"intervalSlot",fn:function(){return[i("DimensionBulkButton",{attrs:{autobuyer:e.autobuyer}}),i("AutobuyerIntervalButton",{attrs:{autobuyer:e.autobuyer}})]},proxy:!0},{key:"toggleSlot",fn:function(){return[i("button",{staticClass:"o-autobuyer-btn",on:{click:e.toggleMode}},[e._v(" "+e._s(e.modeDisplay)+" ")])]},proxy:!0}])})},oA=[],lA=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.hasMaxedInterval&&!e.bulkUnlimited&&e.isUnlocked?i("button",{class:e.classObject,on:{click:e.upgradeBulk}},[i("span",[e._v(e._s(e.bulkDisplay))]),e.hasMaxedBulk?e._e():[i("br"),i("span",[e._v("Cost: "+e._s(e.format(e.cost,2,0))+" IP")])]],2):e.hasMaxedInterval&&!e.bulkUnlimited?i("button",{staticClass:"o-autobuyer-btn l-autobuyer-box__button o-autobuyer-btn--unavailable"},[e._v(" Complete the challenge to upgrade bulk ")]):e._e()},cA=[];const uA={name:"DimensionBulkButton",props:{autobuyer:{type:Object,required:!0}},data(){return{hasMaxedInterval:!1,hasMaxedBulk:!1,isUnlocked:!1,bulkUnlimited:!1,bulk:1,cost:1,isAffordable:!1}},computed:{bulkDisplay(){if(this.hasMaxedBulk)return`${formatX(this.bulk,2,0)} bulk buy (capped)`;const e=Math.min(2*this.bulk,this.autobuyer.bulkCap);return`${formatX(this.bulk,2,0)} ➜ ${formatX(e,2,0)} bulk buy`},classObject(){return{"o-autobuyer-btn":!0,"o-autobuyer-btn--unavailable":!this.isAffordable&&!this.hasMaxedBulk,"o-non-clickable":this.hasMaxedBulk}}},methods:{update(){const e=this.autobuyer;this.hasMaxedInterval=e.hasMaxedInterval,this.isUnlocked=e.isUnlocked,this.hasMaxedBulk=e.hasMaxedBulk,this.bulkUnlimited=e.hasUnlimitedBulk,this.bulk=e.bulk,this.cost=e.cost,this.isAffordable=Currency.infinityPoints.gte(this.cost)},upgradeBulk(){this.autobuyer.upgradeBulk()}}},dA=uA;var hA=(0,X.Z)(dA,lA,cA,!1,null,"67bb427e",null);const mA=hA.exports,pA={name:"DimensionAutobuyerBox",components:{DimensionBulkButton:mA,AutobuyerBox:qC,AutobuyerIntervalButton:tA},props:{tier:{type:Number,required:!0}},data(){return{mode:AUTOBUYER_MODE.BUY_SINGLE}},computed:{autobuyer(){return Autobuyer.antimatterDimension(this.tier)},name(){return`${AntimatterDimension(this.tier).shortDisplayName} Dimension Autobuyer`},modeDisplay(){switch(this.mode){case AUTOBUYER_MODE.BUY_SINGLE:return"Buys singles";case AUTOBUYER_MODE.BUY_10:return"Buys max"}throw"Unknown Dimension Autobuyer mode"}},methods:{update(){this.mode=this.autobuyer.mode},toggleMode(){this.autobuyer.toggleMode(),this.update()}}},yA=pA;var fA=(0,X.Z)(yA,rA,oA,!1,null,"4ab9243a",null);const gA=fA.exports;var vA=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("AutobuyerBox",{attrs:{autobuyer:e.autobuyer,"is-modal":e.isModal,"show-interval":!e.isBuyMaxUnlocked,name:"Automatic Dimension Boosts"},scopedSlots:e._u([e.hasMaxedInterval?e.isBuyMaxUnlocked?{key:"intervalSlot",fn:function(){return[i("div",{staticClass:"c-autobuyer-box__small-text"},[i("br"),e._v(" Activates every X seconds: ")]),i("AutobuyerInput",{attrs:{autobuyer:e.autobuyer,type:"float",property:"buyMaxInterval"}})]},proxy:!0}:null:{key:"intervalSlot",fn:function(){return[i("AutobuyerIntervalButton",{attrs:{autobuyer:e.autobuyer}})]},proxy:!0},e.isBuyMaxUnlocked?null:{key:"checkboxSlot",fn:function(){return[i("label",{staticClass:"o-autobuyer-toggle-checkbox c-autobuyer-box__small-text l-top-margin o-clickable"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.limitDimBoosts,expression:"limitDimBoosts"}],staticClass:"o-clickable",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.limitDimBoosts)?e._i(e.limitDimBoosts,null)>-1:e.limitDimBoosts},on:{change:function(t){var i=e.limitDimBoosts,a=t.target,n=!!a.checked;if(Array.isArray(i)){var s=null,r=e._i(i,s);a.checked?r<0&&(e.limitDimBoosts=i.concat([s])):r>-1&&(e.limitDimBoosts=i.slice(0,r).concat(i.slice(r+1)))}else e.limitDimBoosts=n}}}),e._v(" Limit Dimension Boosts to: ")]),i("AutobuyerInput",{attrs:{autobuyer:e.autobuyer,type:"int",property:"maxDimBoosts"}})]},proxy:!0},{key:"toggleSlot",fn:function(){return[i("label",{staticClass:"o-autobuyer-toggle-checkbox c-autobuyer-box__small-text l-autobuyer-text-area o-clickable"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.limitUntilGalaxies,expression:"limitUntilGalaxies"}],staticClass:"o-clickable",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.limitUntilGalaxies)?e._i(e.limitUntilGalaxies,null)>-1:e.limitUntilGalaxies},on:{change:function(t){var i=e.limitUntilGalaxies,a=t.target,n=!!a.checked;if(Array.isArray(i)){var s=null,r=e._i(i,s);a.checked?r<0&&(e.limitUntilGalaxies=i.concat([s])):r>-1&&(e.limitUntilGalaxies=i.slice(0,r).concat(i.slice(r+1)))}else e.limitUntilGalaxies=n}}}),e.isBuyMaxUnlocked?i("span",[e._v(" Only Dimboost to unlock new"),i("br"),e._v(" Dimensions until X Galaxies: ")]):i("span",[e._v(" Galaxies required to always"),i("br"),e._v(" Dimboost, ignoring the limit: ")])]),i("AutobuyerInput",{attrs:{autobuyer:e.autobuyer,type:"int",property:"galaxies"}})]},proxy:!0}],null,!0)})},bA=[];const EA={name:"DimensionBoostAutobuyerBox",components:{AutobuyerBox:qC,AutobuyerIntervalButton:tA,AutobuyerInput:K},props:{isModal:{type:Boolean,required:!1,default:!1}},data(){return{hasMaxedInterval:!1,limitDimBoosts:!1,limitUntilGalaxies:!1,isBuyMaxUnlocked:!1}},computed:{autobuyer:()=>Autobuyer.dimboost},watch:{limitDimBoosts(e){this.autobuyer.limitDimBoosts=e},limitUntilGalaxies(e){this.autobuyer.limitUntilGalaxies=e}},methods:{update(){const e=this.autobuyer;this.hasMaxedInterval=e.hasMaxedInterval,this.isBuyMaxUnlocked=e.isBuyMaxUnlocked,this.limitDimBoosts=e.limitDimBoosts,this.limitUntilGalaxies=e.limitUntilGalaxies}}},TA=EA;var wA=(0,X.Z)(TA,vA,bA,!1,null,"b44dddb8",null);const kA=wA.exports;var CA=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("AutobuyerBox",{attrs:{autobuyer:e.autobuyer,"is-modal":e.isModal,name:"Automatic Eternity"},scopedSlots:e._u([{key:"intervalSlot",fn:function(){return[e.hasAdditionalModes?i("ExpandingControlBox",{attrs:{"auto-close":!0},scopedSlots:e._u([{key:"header",fn:function(){return[i("div",{staticClass:"o-primary-btn c-autobuyer-box__mode-select c-autobuyer-box__mode-select-header"},[e._v(" ▼ Current Setting: ▼ "),i("br"),e._v(" "+e._s(e.modeName(e.mode))+" ")])]},proxy:!0},{key:"dropdown",fn:function(){return[i("AutobuyerDropdownEntry",{attrs:{autobuyer:e.autobuyer,modes:e.modes,"mode-name-fn":e.modeName}})]},proxy:!0}],null,!1,2761615181)}):i("span",[e._v(e._s(e.modeProps(e.mode).title)+":")])]},proxy:!0},{key:"toggleSlot",fn:function(){return[i("AutobuyerInput",e._b({key:e.mode,attrs:{autobuyer:e.autobuyer}},"AutobuyerInput",e.modeProps(e.mode).input,!1))]},proxy:!0},e.mode===e.amountMode?{key:"checkboxSlot",fn:function(){return[i("label",{staticClass:"o-autobuyer-toggle-checkbox o-clickable"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.increaseWithMult,expression:"increaseWithMult"}],staticClass:"o-clickable",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.increaseWithMult)?e._i(e.increaseWithMult,null)>-1:e.increaseWithMult},on:{change:function(t){var i=e.increaseWithMult,a=t.target,n=!!a.checked;if(Array.isArray(i)){var s=null,r=e._i(i,s);a.checked?r<0&&(e.increaseWithMult=i.concat([s])):r>-1&&(e.increaseWithMult=i.slice(0,r).concat(i.slice(r+1)))}else e.increaseWithMult=n}}}),e._v(" Dynamic amount ")])]},proxy:!0}:null],null,!0)})},AA=[];const _A={name:"EternityAutobuyerBox",components:{AutobuyerBox:qC,AutobuyerInput:K,ExpandingControlBox:$o,AutobuyerDropdownEntry:zC},props:{isModal:{type:Boolean,required:!1,default:!1}},data(){return{isDoomed:!1,mode:AUTO_ETERNITY_MODE.AMOUNT,hasAdditionalModes:!1,increaseWithMult:!0}},computed:{autobuyer:()=>Autobuyer.eternity,modes:()=>[AUTO_ETERNITY_MODE.AMOUNT,AUTO_ETERNITY_MODE.TIME,AUTO_ETERNITY_MODE.X_HIGHEST],amountMode:()=>AUTO_ETERNITY_MODE.AMOUNT},watch:{increaseWithMult(e){this.autobuyer.increaseWithMult=e}},methods:{update(){this.isDoomed=Pelle.isDoomed,this.mode=this.autobuyer.mode,this.hasAdditionalModes=this.autobuyer.hasAdditionalModes,this.increaseWithMult=this.autobuyer.increaseWithMult},modeProps(e){switch(e){case AUTO_ETERNITY_MODE.AMOUNT:return{title:"Eternity at X EP",input:{property:"amount",type:"decimal"}};case AUTO_ETERNITY_MODE.TIME:return{title:"Seconds between Eternities",input:{property:"time",type:"float"}};case AUTO_ETERNITY_MODE.X_HIGHEST:return{title:"X times highest EP",input:{property:"xHighest",type:"decimal"}}}throw new Error("Unknown Auto Eternity mode")},modeName(e){return this.modeProps(e).title}}},SA=_A;var DA=(0,X.Z)(SA,CA,AA,!1,null,"56211cc8",null);const RA=DA.exports;var MA=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("AutobuyerBox",{attrs:{autobuyer:e.autobuyer,"is-modal":e.isModal,name:"Automatic Antimatter Galaxies","show-interval":!e.isBuyMaxUnlocked},scopedSlots:e._u([e.hasMaxedInterval?e.isBuyMaxUnlocked?{key:"intervalSlot",fn:function(){return[i("div",{staticClass:"c-autobuyer-box__small-text"},[e._v(" Activates every X seconds: ")]),i("AutobuyerInput",{attrs:{autobuyer:e.autobuyer,type:"float",property:"buyMaxInterval"}})]},proxy:!0}:null:{key:"intervalSlot",fn:function(){return[i("AutobuyerIntervalButton",{attrs:{autobuyer:e.autobuyer}})]},proxy:!0},{key:e.limitGalaxiesSlot,fn:function(){return[i("label",{staticClass:"o-autobuyer-toggle-checkbox c-autobuyer-box__small-text o-clickable"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.limitGalaxies,expression:"limitGalaxies"}],staticClass:"o-clickable",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.limitGalaxies)?e._i(e.limitGalaxies,null)>-1:e.limitGalaxies},on:{change:function(t){var i=e.limitGalaxies,a=t.target,n=!!a.checked;if(Array.isArray(i)){var s=null,r=e._i(i,s);a.checked?r<0&&(e.limitGalaxies=i.concat([s])):r>-1&&(e.limitGalaxies=i.slice(0,r).concat(i.slice(r+1)))}else e.limitGalaxies=n}}}),e._v(" Limit Antimatter Galaxies to: ")]),i("AutobuyerInput",{attrs:{autobuyer:e.autobuyer,type:"int",property:"maxGalaxies"}})]},proxy:!0}],null,!0)})},IA=[];const xA={name:"GalaxyAutobuyerBox",components:{AutobuyerBox:qC,AutobuyerIntervalButton:tA,AutobuyerInput:K},props:{isModal:{type:Boolean,required:!1,default:!1}},data(){return{hasMaxedInterval:!1,limitGalaxies:!1,isBuyMaxUnlocked:!1,buyMax:!1}},computed:{autobuyer:()=>Autobuyer.galaxy,limitGalaxiesSlot(){return this.hasMaxedInterval&&!this.isBuyMaxUnlocked?"intervalSlot":"toggleSlot"}},watch:{limitGalaxies(e){this.autobuyer.limitGalaxies=e}},methods:{update(){this.hasMaxedInterval=this.autobuyer.hasMaxedInterval,this.isBuyMaxUnlocked=this.autobuyer.isBuyMaxUnlocked,this.limitGalaxies=this.autobuyer.limitGalaxies}}},PA=xA;var GA=(0,X.Z)(PA,MA,IA,!1,null,"0e9d22c8",null);const UA=GA.exports;var BA=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("p",{staticClass:"c-options-tab__hotkeys-link",on:{click:e.handleClick}},[e._v(" Press "),i("kbd",[e._v("?")]),e._v(" to open the hotkey list. ")])},NA=[];const OA={name:"OpenModalHotkeysButton",methods:{handleClick(){Modal.hotkeys.show()}}},LA=OA;var FA=(0,X.Z)(LA,BA,NA,!1,null,null,null);const $A=FA.exports;var HA=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("AutobuyerBox",{attrs:{autobuyer:e.autobuyer,"is-modal":e.isModal,name:"Automatic Reality"},scopedSlots:e._u([{key:"intervalSlot",fn:function(){return[i("ExpandingControlBox",{attrs:{"auto-close":!0},scopedSlots:e._u([{key:"header",fn:function(){return[i("div",{staticClass:"o-primary-btn c-autobuyer-box__mode-select c-autobuyer-box__mode-select-header"},[e._v(" ▼ Current Setting: ▼ "),i("br"),e._v(" "+e._s(e.modeName(e.mode))+" ")])]},proxy:!0},{key:"dropdown",fn:function(){return[i("AutobuyerDropdownEntry",{attrs:{autobuyer:e.autobuyer,modes:e.modes,"mode-name-fn":e.modeName}})]},proxy:!0}])})]},proxy:!0},{key:"toggleSlot",fn:function(){return[e.hasAlternateInputs?i("div",[e._v(" Target Time (seconds): ")]):i("div",[e._v(" Target Reality Machines: ")]),i("AutobuyerInput",{attrs:{autobuyer:e.autobuyer,type:e.hasAlternateInputs?"float":"decimal",property:e.hasAlternateInputs?"time":"rm"}})]},proxy:!0},{key:"checkboxSlot",fn:function(){return[e.hasAlternateInputs&&e.hasRelicMode?i("div",[e._v(" Target Relic Shards: ")]):i("div",[e._v(" Target Glyph level: ")]),i("AutobuyerInput",{attrs:{autobuyer:e.autobuyer,type:(e.hasAlternateInputs,"int"),property:e.hasAlternateInputs&&e.hasRelicMode?"shard":"glyph"}}),e.isOverCap?i("div",[e._v(" Autobuyer will trigger at the Glyph level cap of "+e._s(e.formatInt(e.levelCap))+". ")]):e._e()]},proxy:!0}])})},qA=[];const VA={name:"RealityAutobuyerBox",components:{AutobuyerBox:qC,AutobuyerInput:K,ExpandingControlBox:$o,AutobuyerDropdownEntry:zC},props:{isModal:{type:Boolean,required:!1,default:!1}},data(){return{mode:AUTO_REALITY_MODE.RM,levelCap:0,isOverCap:!1,hasAlternateInputs:!1}},computed:{autobuyer:()=>Autobuyer.reality,hasRelicMode:()=>TeresaUnlocks.effarig.canBeApplied,modes(){const e=[AUTO_REALITY_MODE.RM,AUTO_REALITY_MODE.GLYPH,AUTO_REALITY_MODE.EITHER,AUTO_REALITY_MODE.BOTH,AUTO_REALITY_MODE.TIME];return this.hasRelicMode&&e.push(AUTO_REALITY_MODE.RELIC_SHARD),e}},methods:{update(){this.mode=this.autobuyer.mode,this.levelCap=Glyphs.levelCap,this.isOverCap=this.autobuyer.glyph>this.levelCap,this.hasAlternateInputs=Autobuyer.reality.mode>AUTO_REALITY_MODE.BOTH},modeName(e){switch(e){case AUTO_REALITY_MODE.RM:return"Reality Machines";case AUTO_REALITY_MODE.GLYPH:return"Glyph level";case AUTO_REALITY_MODE.EITHER:return"RM OR Level";case AUTO_REALITY_MODE.BOTH:return"RM AND Level";case AUTO_REALITY_MODE.TIME:return"Real-time seconds";case AUTO_REALITY_MODE.RELIC_SHARD:return"Relic Shards"}throw new Error("Unknown Auto Reality mode")}}},YA=VA;var WA=(0,X.Z)(YA,HA,qA,!1,null,"cd0202d8",null);const jA=WA.exports;var XA=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{staticClass:"l-autobuyers-tab"},[e._l(e.multiple,(function(e,t){return i("MultipleAutobuyersBox",{key:t,attrs:{type:e}})})),i("MultipleSingleAutobuyersGroup")],2)},zA=[],KA=function(){var e=this,t=e.$createElement,i=e._self._c||t;return!e.showAutobuyers||e.isADBox&&e.continuumActive?e.isADBox&&e.continuumActive?i("span",{staticClass:"c-autobuyer-box-row"},[e._v(" Continuum replaces your Antimatter Dimension and Tickspeed Autobuyers, as your production multipliers "),i("br"),e._v(" now automatically and continuously scale based on how many purchases you would have had otherwise. ")]):e._e():i("span",{staticClass:"c-autobuyer-box-row"},[i("AutobuyerGroupToggleLabel",{attrs:{"is-active":e.parentActive,name:e.name},on:{click:e.toggleGroup}}),i("div",{staticClass:"l-autobuyer-box__title"},[e._v(" "+e._s(e.name)),i("br"),e._v("Autobuyers "),e.displayLabelAsGroup?i("AutobuyerIntervalLabel",{attrs:{autobuyer:e.autobuyers[0]}}):e._e()],1),i("div",{staticClass:"l-autobuyer-box__autobuyers"},[e._l(e.autobuyers,(function(t,a){return[i("SingleAutobuyerInRow",{key:a,staticClass:"l-autobuyer-box__autobuyers-internal",style:e.boxSize,attrs:{autobuyer:t,"show-individual":!e.displayLabelAsGroup,"parent-disabled":!e.parentActive}}),a%e.entryCountPerRow===e.entryCountPerRow?i("br",{key:a}):e._e()]}))],2)],1)},ZA=[],QA=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("AutobuyerToggleLabel",{attrs:{"is-active":e.isActive,"is-disabled":e.isDisabled,name:e.name},on:{click:e.emitClick}})},JA=[],e_=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-autobuyer-box__footer",on:{click:e.emitClick}},[i("label",{class:e.autobuyerStateClass},[i("span",{class:e.autobuyerToggleClass})]),i("input",{attrs:{disabled:e.isDisabled,name:e.name,type:"checkbox"},domProps:{checked:e.isActive&&!e.isDisabled}})])},t_=[];const i_={name:"AutobuyerToggleLabel",props:{isActive:Boolean,isDisabled:Boolean,name:{type:String,required:!0}},computed:{autobuyerToggleClass(){return this.isDisabled?this.isActive?"fas fa-pause":"fas fa-times":this.isActive?"fas fa-check":"fas fa-times"},autobuyerStateClass(){return this.isDisabled?{"o-autobuyer-toggle-checkbox__label":!0,"o-autobuyer-toggle-checkbox__label--active-paused":this.isActive,"o-autobuyer-toggle-checkbox__label--deactive-paused":!this.isActive,"o-autobuyer-toggle-checkbox__label--disabled":this.isDisabled}:{"o-autobuyer-toggle-checkbox__label":!0,"o-autobuyer-toggle-checkbox__label--active":this.isActive,"o-autobuyer-toggle-checkbox__label--disabled":this.isDisabled}}}},a_=i_;var n_=(0,X.Z)(a_,e_,t_,!1,null,"3e71e566",null);const s_=n_.exports,r_={name:"AutobuyerGroupToggleLabel",components:{AutobuyerToggleLabel:s_},props:{isActive:Boolean,name:{type:String,required:!0}},data(){return{isDisabled:!1}},methods:{update(){this.isDisabled=!player.auto.autobuyersOn}}},o_=r_;var l_=(0,X.Z)(o_,QA,JA,!1,null,"083b4b97",null);const c_=l_.exports;var u_=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("span",{staticClass:"c-autobuyer-box-slot"},[i("AutobuyerSingleToggleLabel",{attrs:{autobuyer:e.autobuyer,"parent-disabled":e.parentDisabled}}),e._v(" "+e._s(e.name)+" "),e.showIndividual?i("AutobuyerIntervalLabel",{attrs:{autobuyer:e.autobuyer}}):e._e(),e.hasMode?i("AutobuyerModeButton",{attrs:{autobuyer:e.autobuyer}}):e._e()],1):e._e()},d_=[],h_=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"o-autobuyer-btn o-autobuyer-btn--tiny",on:{click:e.toggleMode}},[e._v(" "+e._s(e.modeDisplay)+" ")])},m_=[];const p_={name:"AutobuyerModeButton",props:{autobuyer:{type:Object,required:!0}},data(){return{mode:AUTOBUYER_MODE.BUY_SINGLE}},computed:{modeDisplay(){switch(this.mode){case AUTOBUYER_MODE.BUY_SINGLE:return"Buys singles";case AUTOBUYER_MODE.BUY_10:return"Buys max"}throw"Unknown Dimension Autobuyer mode"}},methods:{update(){this.mode=this.autobuyer.mode},toggleMode(){this.autobuyer.toggleMode(),this.update()}}},y_=p_;var f_=(0,X.Z)(y_,h_,m_,!1,null,"3ab114db",null);const g_=f_.exports;var v_=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("AutobuyerToggleLabel",{attrs:{"is-active":e.isActive,"is-disabled":e.isDisabled,name:e.name},on:{click:e.toggle}})},b_=[];const E_={name:"AutobuyerSingleToggleLabel",components:{AutobuyerToggleLabel:s_},props:{autobuyer:{type:Object,required:!0},parentDisabled:Boolean},data(){return{isActive:!1,isDisabled:!1}},computed:{name(){return this.autobuyer.name}},methods:{update(){this.isActive=this.autobuyer.isActive,this.isDisabled=!player.auto.autobuyersOn||this.parentDisabled},toggle(){this.autobuyer.toggle()}}},T_=E_;var w_=(0,X.Z)(T_,v_,b_,!1,null,"311f081c",null);const k_=w_.exports,C_={name:"SingleAutobuyerInRow",components:{AutobuyerSingleToggleLabel:k_,AutobuyerIntervalLabel:LC,AutobuyerModeButton:g_},props:{autobuyer:{type:Object,required:!0},showIndividual:Boolean,parentDisabled:Boolean},data(){return{isVisible:!1}},computed:{name(){return this.autobuyer.name},hasMode(){return void 0!==this.autobuyer.mode}},methods:{update(){const e=this.autobuyer;this.isVisible=e.isUnlocked||e.isBought}}},A_=C_;var __=(0,X.Z)(A_,u_,d_,!1,null,"629cb6b8",null);const S_=__.exports,D_={name:"MultipleAutobuyersBox",components:{AutobuyerIntervalLabel:LC,AutobuyerGroupToggleLabel:c_,SingleAutobuyerInRow:S_},props:{type:{type:Function,required:!0}},data(){return{continuumActive:!1,anyUnlocked:!1,displayLabelAsGroup:!1,parentActive:!1}},computed:{autobuyers(){return this.type.zeroIndexed},name(){return this.type.groupName},entryCount(){return this.type.entryCount},rowCount(){return Math.ceil(this.entryCount/8)},entryCountPerRow(){return 1===this.rowCount?this.entryCount:5},boxSize(){return`flex: 1 0 ${100/this.entryCountPerRow-1}%`},isADBox(){return this.name===Autobuyer.antimatterDimension.groupName},showAutobuyers(){return this.isADBox?this.anyUnlocked&&this.displayLabelAsGroup:this.anyUnlocked}},methods:{update(){var e,t;this.continuumActive=Laitela.continuumActive;const i=this.type;this.anyUnlocked=i.anyUnlocked,this.displayLabelAsGroup=(null===(e=i.allMaxedInterval)||void 0===e||e)&&(null===(t=i.allUnlimitedBulk)||void 0===t||t),this.parentActive=i.isActive},toggleGroup(){this.type.toggle()}}},R_=D_;var M_=(0,X.Z)(R_,KA,ZA,!1,null,"0fd417d9",null);const I_=M_.exports;var x_=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{staticClass:"l-autobuyer-singlet-group"},[e._l(e.singles,(function(t,a){return[i("SingleAutobuyerBox",{key:a,style:e.boxSize,attrs:{autobuyer:t}}),a%e.entryCountPerRow===e.entryCountPerRow?i("br",{key:a}):e._e()]}))],2)},P_=[],G_=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isUnlocked?i("span",{staticClass:"c-autobuyer-box-row"},[i("AutobuyerSingleToggleLabel",{attrs:{autobuyer:e.autobuyer}}),i("div",[e._v(" "+e._s(e.name)+" "),i("AutobuyerIntervalLabel",{attrs:{autobuyer:e.autobuyer}}),e.autobuyer.hasInput?i("span",{staticClass:"c-autobuyer-box__small-text"},[e._v(" "+e._s(e.description)+": "),i("AutobuyerInput",{staticClass:"c-small-autobuyer-input",attrs:{autobuyer:e.autobuyer,type:e.autobuyer.inputType,property:e.autobuyer.inputEntry}})],1):e._e()],1)],1):e._e()},U_=[];const B_={name:"SingleAutobuyerBox",components:{AutobuyerSingleToggleLabel:k_,AutobuyerIntervalLabel:LC,AutobuyerInput:K},props:{autobuyer:{type:Object,required:!0}},data(){return{isUnlocked:!1,description:"Multiplier"}},computed:{name(){return this.autobuyer.name}},methods:{update(){this.isUnlocked=this.autobuyer.isUnlocked,this.description=this.autobuyer.description}}},N_=B_;var O_=(0,X.Z)(N_,G_,U_,!1,null,"0b0e6412",null);const L_=O_.exports,F_={name:"MultipleSingleAutobuyersGroup",components:{SingleAutobuyerBox:L_},computed:{singles(){return Autobuyers.display[1]},entryCount(){return this.singles.length},rowCount(){return Math.ceil(this.entryCount/4)},entryCountPerRow(){return 1===this.rowCount?this.entryCount:4},boxSize(){return`flex: 1 0 ${100/this.entryCountPerRow-2}%`}}},$_=F_;var H_=(0,X.Z)($_,x_,P_,!1,null,"59ad48ab",null);const q_=H_.exports,V_={name:"SimpleAutobuyersMultiBox",components:{MultipleAutobuyersBox:I_,MultipleSingleAutobuyersGroup:q_},computed:{multiple(){return Autobuyers.display[0]}}},Y_=V_;var W_=(0,X.Z)(Y_,XA,zA,!1,null,"2bc353a8",null);const j_=W_.exports;var X_=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("AutobuyerBox",{attrs:{autobuyer:e.autobuyer,name:"Tickspeed Autobuyer","show-interval":""},scopedSlots:e._u([{key:"intervalSlot",fn:function(){return[i("AutobuyerIntervalButton",{attrs:{autobuyer:e.autobuyer}})]},proxy:!0},{key:"toggleSlot",fn:function(){return[e.isUnlocked?i("button",{staticClass:"o-autobuyer-btn",on:{click:e.toggleMode}},[e._v(" "+e._s(e.modeDisplay)+" ")]):i("button",{staticClass:"o-autobuyer-btn o-autobuyer-btn--unavailable"},[e._v(" Complete the challenge to change mode ")])]},proxy:!0}])})},z_=[];const K_={name:"TickspeedAutobuyerBox",components:{AutobuyerBox:qC,AutobuyerIntervalButton:tA},data(){return{mode:AUTOBUYER_MODE.BUY_SINGLE,isUnlocked:!1}},computed:{autobuyer:()=>Autobuyer.tickspeed,modeDisplay(){switch(this.mode){case AUTOBUYER_MODE.BUY_SINGLE:return"Buys singles";case AUTOBUYER_MODE.BUY_MAX:return"Buys max"}throw"Unknown tickspeed autobuyer mode"}},methods:{update(){this.mode=this.autobuyer.mode,this.isUnlocked=this.autobuyer.isUnlocked},toggleMode(){this.autobuyer.toggleMode(),this.update()}}},Z_=K_;var Q_=(0,X.Z)(Z_,X_,z_,!1,null,"c3aa3a12",null);const J_=Q_.exports;var eS=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("AutobuyerBox",{attrs:{autobuyer:e.autobuyer,"show-interval":!1,"is-modal":e.isModal,name:"Automatic Mends"},scopedSlots:e._u([{key:"intervalSlot",fn:function(){return[e.hasAdditionalModes?i("ExpandingControlBox",{attrs:{"auto-close":!0},scopedSlots:e._u([{key:"header",fn:function(){return[i("div",{staticClass:"o-primary-btn c-autobuyer-box__mode-select c-autobuyer-box__mode-select-header"},[e._v(" ▼ Current Setting: ▼ "),i("br"),e._v(" "+e._s(e.modeName(e.mode))+" ")])]},proxy:!0},{key:"dropdown",fn:function(){return[i("AutobuyerDropdownEntry",{attrs:{autobuyer:e.autobuyer,modes:e.modes,"mode-name-fn":e.modeName}})]},proxy:!0}],null,!1,2761615181)}):i("span",[e._v(" "+e._s(e.modeProps(e.mode).title)+": ")])]},proxy:!0},{key:"toggleSlot",fn:function(){return[i("AutobuyerInput",e._b({key:e.mode,attrs:{autobuyer:e.autobuyer}},"AutobuyerInput",e.modeProps(e.mode).input,!1))]},proxy:!0}])})},tS=[];const iS={name:"MendingAutobuyerBox",components:{AutobuyerBox:qC,AutobuyerIntervalButton:tA,AutobuyerInput:K,ExpandingControlBox:$o,AutobuyerDropdownEntry:zC},props:{isModal:{type:Boolean,required:!1,default:!1}},data(){return{isDoomed:!1,hasMaxedInterval:!0,mode:AUTO_MEND_MODE.AMOUNT,hasAdditionalModes:!1,increaseWithMult:!0}},computed:{autobuyer:()=>Autobuyer.mending,modes:()=>[AUTO_MEND_MODE.AMOUNT,AUTO_MEND_MODE.TIME],amountMode:()=>AUTO_ETERNITY_MODE.AMOUNT},watch:{increaseWithMult(e){this.autobuyer.increaseWithMult=e}},methods:{update(){this.isDoomed=Pelle.isDoomed,this.hasMaxedInterval=this.autobuyer.hasMaxedInterval,this.mode=this.autobuyer.mode,this.hasAdditionalModes=this.autobuyer.hasAdditionalModes,this.increaseWithMult=this.autobuyer.increaseWithMult},modeProps(e){switch(e){case AUTO_CRUNCH_MODE.AMOUNT:return{title:"Mend at X MvR",input:{property:"amount",type:"decimal"}};case AUTO_CRUNCH_MODE.TIME:return{title:"Seconds between Mends",input:{property:"time",type:"float"}}}throw new Error("Unknown Auto Mend mode")},modeName(e){return this.modeProps(e).title}}},aS=iS;var nS=(0,X.Z)(aS,eS,tS,!1,null,"5d2d53ac",null);const sS=nS.exports,rS={name:"AutobuyersTab",components:{AutobuyerToggles:RC,OpenModalHotkeysButton:$A,RealityAutobuyerBox:jA,EternityAutobuyerBox:RA,BigCrunchAutobuyerBox:sA,GalaxyAutobuyerBox:UA,DimensionBoostAutobuyerBox:kA,TickspeedAutobuyerBox:J_,DimensionAutobuyerBox:gA,SimpleAutobuyersMultiBox:j_,MendingAutobuyerBox:sS},data(){return{hasInfinity:!1,hasContinuum:!1,displayADAutobuyersIndividually:!1,hasInstant:!1}},computed:{hasSeenGamespeedAlteringEffects(){return ue.seenAlteredSpeed()},gameTickLength(){return`${formatInt(player.options.updateRate)} ms`}},methods:{update(){this.hasInfinity=ue.infinityUnlocked()||ue.mendingUnlocked(),this.hasContinuum=Laitela.continuumActive,this.checkADAutoStatus()},checkADAutoStatus(){const e=Autobuyer.antimatterDimension;Pelle.isDoomed?this.displayADAutobuyersIndividually=!e.zeroIndexed.filter((e=>e.isUnlocked)).every((e=>e.hasUnlimitedBulk&&e.hasMaxedInterval)):(this.hasInstant=e.hasInstant,this.displayADAutobuyersIndividually=!e.collapseDisplay)}}},oS=rS;var lS=(0,X.Z)(oS,wC,kC,!1,null,"2cf6e922",null);const cS=lS.exports;var uS=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-automator-tab l-automator-tab",class:e.tabClass},[e.automatorUnlocked?i("div",[i("div",[e._v(" "+e._s(e.intervalText)+" ")]),i("span",{class:{"c-overlimit":e.currentChars>e.maxScriptChars}},[e._v(" This script: "+e._s(e.formatInt(e.currentChars))+" / "+e._s(e.formatInt(e.maxScriptChars))+" ")]),e._v(" | "),i("span",{class:{"c-overlimit":e.totalChars>e.maxTotalChars}},[e._v(" Across all scripts: "+e._s(e.formatInt(e.totalChars))+" / "+e._s(e.formatInt(e.maxTotalChars))+" ")]),i("br"),e.withinLimit?e._e():i("span",{staticClass:"c-overlimit"},[e._v(" (Your changes will not be saved due to being over a character limit!) ")]),i("div",{staticClass:"c-automator-split-pane"},[i("SplitPane",{attrs:{"min-percent":44,"default-percent":50,split:"vertical"},scopedSlots:e._u([{key:"paneL",fn:function(){return[i("AutomatorEditor")]},proxy:!0},{key:"paneR",fn:function(){return[i("AutomatorDocs")]},proxy:!0}],null,!1,3115218829)})],1)]):i("AutomatorPointsList")],1)},dS=[],hS=i(8530),mS=i.n(hS),pS=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-automator-pane"},[i("AutomatorControls"),e.isTextAutomator?i("AutomatorTextEditor",{attrs:{"current-script-id":e.currentScriptID}}):e._e(),e.isTextAutomator?e._e():i("AutomatorBlockEditor")],1)},yS=[],fS=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-automator__controls l-automator__controls"},[i("div",{staticClass:"c-automator-control-row l-automator-button-row"},[i("div",{staticClass:"c-button-group"},[i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Rewind Automator to the first command",expression:"'Rewind Automator to the first command'"}],staticClass:"fa-fast-backward",on:{click:e.rewind}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:{content:e.playTooltip,hideOnTargetClick:!1},expression:"{\n content: playTooltip,\n hideOnTargetClick: false\n }"}],class:e.playButtonClass,on:{click:e.play}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Stop Automator and reset position",expression:"'Stop Automator and reset position'"}],staticClass:"fa-stop",on:{click:e.stop}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Step forward one line",expression:"'Step forward one line'"}],staticClass:"fa-step-forward",on:{click:e.step}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Restart script automatically when it reaches the end",expression:"'Restart script automatically when it reaches the end'"}],staticClass:"fa-sync-alt",class:{"c-automator__button--active":e.repeatOn},on:{click:e.repeat}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Automatically restart the active script when finishing or restarting a Reality",expression:"'Automatically restart the active script when finishing or restarting a Reality'"}],staticClass:"fa-reply",class:{"c-automator__button--active":e.forceRestartOn},on:{click:e.restart}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Scroll Automator to follow current line",expression:"'Scroll Automator to follow current line'"}],staticClass:"fa-indent",class:{"c-automator__button--active":e.followExecution},on:{click:e.follow}}),e.fullScreen?i("span",{staticClass:"c-automator__status-text c-automator__status-text--small",class:{"c-automator__status-text--error":e.currentChars>e.maxScriptChars}},[e._v(" This script: "+e._s(e.formatInt(e.currentChars))+"/"+e._s(e.formatInt(e.maxScriptChars))+" ")]):e._e()],1),i("div",{staticClass:"c-button-group"},[i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Undo",expression:"'Undo'"}],staticClass:"fa-arrow-rotate-left",class:{"c-automator__button--inactive":!e.hasUndo},on:{click:e.undo}}),i("AutomatorButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Redo",expression:"'Redo'"}],staticClass:"fa-arrow-rotate-right",class:{"c-automator__button--inactive":!e.hasRedo},on:{click:e.redo}}),i("AutomatorModeSwitch")],1)]),i("div",{staticClass:"l-automator-button-row"},[e.duplicateStatus?i("span",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"More than one script has this name!",expression:"'More than one script has this name!'"}],staticClass:"fas fa-exclamation-triangle c-automator__status-text c-automator__status-text--error"}):e._e(),e.editingDifferentScript?i("span",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"The automator is running a different script than the editor is showing",expression:"'The automator is running a different script than the editor is showing'"}],staticClass:"fas fa-circle-exclamation c-automator__status-text c-automator__status-text--warning"}):e._e(),e.justCompleted?i("span",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"The automator completed running the previous script",expression:"'The automator completed running the previous script'"}],staticClass:"fas fa-circle-check c-automator__status-text"}):e._e(),i("span",{staticClass:"c-automator__status-text",class:{"c-automator__status-text--error":e.hasErrors&&!(e.isRunning||e.isPaused)}},[e._v(" "+e._s(e.statusText)+" ")])])])},gS=[],vS=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:{content:e.automatorModeTooltip,hideOnTargetClick:!1},expression:"{\n content: automatorModeTooltip,\n hideOnTargetClick: false\n }"}],class:Object.assign({},{"c-slider-toggle-button":!0,"c-slider-toggle-button--right":e.isTextAutomator},e.tutorialClass),on:{click:e.toggleAutomatorMode}},[i("i",{staticClass:"fas fa-cubes"}),i("i",{staticClass:"fas fa-code"})])},bS=[];const ES={name:"AutomatorModeSwitch",data(){return{automatorType:0}},computed:{currentScriptID:{get(){return this.$viewModel.tabs.reality.automator.editorScriptID},set(e){this.$viewModel.tabs.reality.automator.editorScriptID=e}},currentScriptContent(){return player.reality.automator.scripts[this.currentScriptID].content},currentScript(){return CodeMirror.Doc(this.currentScriptContent,"automato").getValue()},isTextAutomator(){return this.automatorType===AUTOMATOR_TYPE.TEXT},automatorModeTooltip(){return this.automatorType===AUTOMATOR_TYPE.BLOCK?"Switch to the text editor":"Switch to the block editor"},tutorialClass(){return{"tutorial--glow":ui.view.tutorialState===TUTORIAL_STATE.AUTOMATOR&&ui.view.tutorialActive}}},created(){this.on$(GAME_EVENT.GAME_LOAD,(()=>this.onGameLoad())),this.on$(GAME_EVENT.AUTOMATOR_SAVE_CHANGED,(()=>this.onGameLoad())),this.updateCurrentScriptID()},methods:{update(){this.automatorType=player.reality.automator.type},onGameLoad(){this.updateCurrentScriptID()},updateCurrentScriptID(){const e=player.reality.automator.scripts;this.currentScriptID=player.reality.automator.state.editorScript,void 0===e[this.currentScriptID]&&(this.currentScriptID=Object.keys(e)[0],player.reality.automator.state.editorScript=this.currentScriptID,AutomatorData.clearUndoData()),BlockAutomator.hasUnparsableCommands(this.currentScript)&&player.reality.automator.type===AUTOMATOR_TYPE.BLOCK&&(Modal.message.show("Some script commands were unrecognizable - defaulting to text editor."),AutomatorBackend.changeModes(this.currentScriptID)),this.$nextTick((()=>BlockAutomator.updateEditor(this.currentScript)))},toggleAutomatorMode(){const e=player.reality.automator.scripts[this.currentScriptID].content,t=this.automatorType===AUTOMATOR_TYPE.TEXT&&(BlockAutomator.hasUnparsableCommands(e)||0!==AutomatorData.currentErrors().length);if(player.options.confirmations.switchAutomatorMode&&(t||AutomatorBackend.isRunning)){const t=Fn(e),i=this.automatorType===AUTOMATOR_TYPE.TEXT?t.validatedBlocks-t.visitedBlocks:0;Modal.switchAutomatorEditorMode.show({callBack:()=>this.$recompute("currentScriptContent"),lostBlocks:i})}else AutomatorBackend.changeModes(this.currentScriptID);AutomatorData.clearUndoData()}}},TS=ES;var wS=(0,X.Z)(TS,vS,bS,!1,null,"15d9af9b",null);const kS=wS.exports,CS={name:"AutomatorControls",components:{AutomatorButton:Tr,AutomatorModeSwitch:kS},data(){return{isRunning:!1,isPaused:!1,repeatOn:!1,justCompleted:!1,forceRestartOn:!1,followExecution:!1,hasErrors:!1,currentLine:0,statusName:"",editingName:"",editingDifferentScript:!1,currentChars:0,hasUndo:!1,hasRedo:!1}},computed:{fullScreen(){return this.$viewModel.tabs.reality.automator.fullScreen},currentScriptID(){return this.$viewModel.tabs.reality.automator.editorScriptID},playTooltip(){return this.isPaused?"Resume Automator execution":this.isRunning?"Pause Automator execution":"Start Automator"},playButtonClass(){return{"c-automator__button--active":this.isRunning,"fa-play":!this.isRunning&&!this.isPaused,"fa-pause":this.isRunning,"fa-eject":this.isPaused}},statusText(){const e=Math.clampMin(Math.ceil(Math.log10(AutomatorBackend.currentScriptLength+1)),1);let t=`0000${this.currentLine}`;return t=t.slice(t.length-e),this.isPaused?`Paused: "${this.statusName}" (Resumes on Line ${t})`:this.isRunning?`Running: "${this.statusName}" (Line ${t})`:this.hasErrors?`Stopped: "${this.statusName}" has errors (Cannot run)`:`Stopped: Will start running "${this.statusName}"`},maxScriptChars(){return AutomatorData.MAX_ALLOWED_SCRIPT_CHARACTERS}},methods:{update(){this.isRunning=AutomatorBackend.isRunning,this.isPaused=AutomatorBackend.isOn&&!this.isRunning,this.repeatOn=AutomatorBackend.state.repeat,this.justCompleted=AutomatorBackend.hasJustCompleted,this.forceRestartOn=AutomatorBackend.state.forceRestart,this.followExecution=AutomatorBackend.state.followExecution,this.hasErrors=0!==AutomatorData.currentErrors().length,this.currentLine=AutomatorBackend.currentLineNumber,this.statusName=this.isPaused||this.isRunning?AutomatorBackend.scriptName:AutomatorBackend.currentEditingScript.name,this.duplicateStatus=AutomatorBackend.hasDuplicateName(this.statusName),this.editingDifferentScript=(this.isRunning||this.isPaused)&&AutomatorBackend.currentEditingScript.id!==AutomatorBackend.currentRunningScript.id,this.currentChars=AutomatorData.singleScriptCharacters(),this.hasUndo=AutomatorData.undoBuffer.length>0,this.hasRedo=AutomatorData.redoBuffer.length>0},rewind:()=>AutomatorBackend.restart(),play(){this.hasErrors?AutomatorBackend.mode=AUTOMATOR_MODE.PAUSED:this.isRunning?AutomatorBackend.pause():(player.reality.automator.type===AUTOMATOR_TYPE.BLOCK&&this.$emit("automatorplay"),AutomatorBackend.isOn?AutomatorBackend.mode=AUTOMATOR_MODE.RUN:AutomatorBackend.start(this.currentScriptID))},stop:()=>AutomatorBackend.stop(),step(){AutomatorBackend.isOn?AutomatorBackend.mode=AUTOMATOR_MODE.SINGLE_STEP:AutomatorBackend.start(this.currentScriptID,AUTOMATOR_MODE.SINGLE_STEP)},repeat:()=>AutomatorBackend.toggleRepeat(),restart:()=>AutomatorBackend.toggleForceRestart(),follow:()=>AutomatorBackend.toggleFollowExecution(),undo:()=>AutomatorData.undoScriptEdit(),redo:()=>AutomatorData.redoScriptEdit()}},AS=CS;var _S=(0,X.Z)(AS,fS,gS,!1,null,"6ae4f435",null);const SS=_S.exports,DS={name:"AutomatorEditor",components:{AutomatorBlockEditor:ps,AutomatorTextEditor:Ps,AutomatorControls:SS},data(){return{automatorType:0}},computed:{currentScriptID:{get(){return this.$viewModel.tabs.reality.automator.editorScriptID},set(e){this.$viewModel.tabs.reality.automator.editorScriptID=e}},currentScriptContent(){return player.reality.automator.scripts[this.currentScriptID].content},currentScript(){return CodeMirror.Doc(this.currentScriptContent,"automato").getValue()},isTextAutomator(){return this.automatorType===AUTOMATOR_TYPE.TEXT}},created(){this.on$(GAME_EVENT.GAME_LOAD,(()=>this.onGameLoad())),this.on$(GAME_EVENT.AUTOMATOR_SAVE_CHANGED,(()=>this.onGameLoad())),this.updateCurrentScriptID()},methods:{update(){this.automatorType=player.reality.automator.type,!AutomatorBackend.isOn&&AutomatorTextUI.editor&&AutomatorData.needsRecompile&&AutomatorTextUI.editor.performLint()},onGameLoad(){this.updateCurrentScriptID()},updateCurrentScriptID(){const e=player.reality.automator.scripts;if(this.currentScriptID=player.reality.automator.state.editorScript,void 0===e[this.currentScriptID]&&(this.currentScriptID=Number(Object.keys(e)[0]),player.reality.automator.state.editorScript=this.currentScriptID,AutomatorData.clearUndoData()),BlockAutomator.hasUnparsableCommands(this.currentScript)&&player.reality.automator.type===AUTOMATOR_TYPE.BLOCK){Modal.message.show("Some incomplete blocks were unrecognizable - defaulting to text editor.");const e=AutomatorData.currentScriptText();AutomatorBackend.changeModes(this.currentScriptID),player.reality.automator.scripts[this.currentScriptID].content=e,this.automatorType=AUTOMATOR_TYPE.TEXT}this.$nextTick((()=>BlockAutomator.updateEditor(this.currentScript)))}}},RS=DS;var MS=(0,X.Z)(RS,pS,yS,!1,null,"78354292",null);const IS=MS.exports;var xS=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("div",{staticClass:"l-header"},[e._v(" You have "+e._s(e.formatInt(e.totalPoints))+" / "+e._s(e.formatInt(e.pointsForAutomator))+" Automator Points towards unlocking the Automator. "),i("br"),e._v(" You gain Automator Points from the following sources: ")]),i("div",{staticClass:"l-automator-points-list-container"},[i("div",{staticClass:"l-automator-points-list-side-col c-automator-points-list-col"},[i("span",{staticClass:"c-automator-points-list-symbol fas fa-project-diagram"}),i("span",{staticClass:"c-automator-points-list-ap--large"},[e._v(e._s(e.formatInt(e.fromPerks))+" AP")]),i("span",{staticClass:"l-large-text"},[e._v(" Perks ")]),e._l(e.perkSources,(function(t){return i("div",{key:t.id,staticClass:"c-automator-points-list-single-entry",style:e.textColor(t.isBought)},[i("span",{staticClass:"c-automator-points-list-perk-label"},[e._v(e._s(t.label))]),e._v(" - "+e._s(t.shortDescription)+" "),i("span",{staticClass:"c-automator-points-list-ap"},[e._v(e._s(e.formatInt(t.automatorPoints))+" AP")])])}))],2),i("div",{staticClass:"l-automator-points-list-center-col"},e._l(e.otherSources,(function(t){return i("div",{key:t.name,staticClass:"c-automator-points-list-cell"},[i("span",{staticClass:"c-automator-points-list-ap--large"},[e._v(e._s(e.formatInt(t.automatorPoints()))+" AP")]),i("span",{staticClass:"l-large-text"},[e._v(" "+e._s(t.name)+" ")]),i("br"),i("br"),i("span",{style:e.textColor(t.automatorPoints()>0)},[e._v(" "+e._s(t.shortDescription())+" ")]),i("span",{staticClass:"c-automator-points-list-symbol",domProps:{innerHTML:e._s(t.symbol)}})])})),0),i("div",{staticClass:"l-automator-points-list-side-col c-automator-points-list-col"},[i("span",{staticClass:"c-automator-points-list-symbol fas fa-arrow-up"}),i("span",{staticClass:"c-automator-points-list-ap--large"},[e._v(e._s(e.formatInt(e.fromUpgrades))+" AP")]),i("span",{staticClass:"l-large-text"},[e._v(" Reality Upgrades ")]),e._l(e.upgradeSources,(function(t){return i("div",{key:t.id,staticClass:"c-automator-points-list-single-entry l-upgrade-list",style:e.textColor(t.isBought)},[i("b",[e._v(e._s(t.name))]),i("span",{staticClass:"c-automator-points-list-ap"},[e._v(e._s(e.formatInt(t.automatorPoints))+" AP")]),i("br"),e._v(" "+e._s(t.shortDescription)+" ")])}))],2)]),i("br"),i("div",[e._v(" The Automator allows (amongst other things) buying full Time Study Trees, entering Eternity Challenges, or starting Dilation. "),i("br"),e._v(" It can also force prestige events on certain conditions independently from your Autobuyers or modify some of your Autobuyer settings. "),i("br"),e._v(" The speed of the Automator gradually increases as you get more Realities. If unlocked right now, it would run "+e._s(e.format(1e3/e.automatorInterval,2,2))+" commands per real-time second. ")])])},PS=[];const GS={name:"AutomatorPointsList",data(){return{totalPoints:0}},computed:{pointsForAutomator:()=>AutomatorPoints.pointsForAutomator,fromPerks:()=>AutomatorPoints.pointsFromPerks,fromUpgrades:()=>AutomatorPoints.pointsFromUpgrades,perkSources:()=>AutomatorPoints.perks,upgradeSources:()=>AutomatorPoints.upgrades,otherSources:()=>GameDatabase.reality.automator.otherAutomatorPoints,automatorInterval:()=>AutomatorBackend.currentInterval},methods:{update(){this.totalPoints=AutomatorPoints.totalPoints},textColor(e){return{color:e?"var(--color-good)":"var(--color-bad)"}}}},US=GS;var BS=(0,X.Z)(US,xS,PS,!1,null,"3d0cd0f0",null);const NS=BS.exports,OS={name:"AutomatorTab",components:{SplitPane:mS(),AutomatorEditor:IS,AutomatorPointsList:NS,AutomatorDocs:Wo},data(){return{automatorUnlocked:!1,interval:0,currentChars:0,totalChars:0,withinLimit:!1}},computed:{fullScreen(){return this.$viewModel.tabs.reality.automator.fullScreen},tabClass(){if(this.fullScreen)return"c-automator-tab--full-screen"},fullScreenIconClass(){return this.fullScreen?"fa-compress-arrows-alt":"fa-expand-arrows-alt"},intervalText(){const e=`Each Reality makes it run ${formatPercents(.006,1)} faster, up to a maximum of\n ${formatInt(1e3)} per second.`;return 1===this.interval?`The Automator is running at max speed (${formatInt(1e3)} commands per real-time second).`:`The Automator is running ${quantify("command",1e3/this.interval,2,2)} per real-time second.\n ${e}`},maxScriptChars(){return AutomatorData.MAX_ALLOWED_SCRIPT_CHARACTERS},maxTotalChars(){return AutomatorData.MAX_ALLOWED_TOTAL_CHARACTERS}},methods:{update(){this.automatorUnlocked=Player.automatorUnlocked,this.interval=AutomatorBackend.currentInterval,this.currentChars=AutomatorData.singleScriptCharacters(),this.totalChars=AutomatorData.totalScriptCharacters(),this.withinLimit=AutomatorData.isWithinLimit()}}},LS=OS;var FS=(0,X.Z)(LS,uS,dS,!1,null,"5eda76b2",null);const $S=FS.exports;var HS=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-black-hole-tab"},[e.isEnslaved||e.isDoomed?i("div",{staticClass:"c-black-hole-disabled-description"},[e.isEnslaved?i("i",[e._v(" You must... seek... other methods... "),i("br")]):e._e(),e._v(" The physics of this Reality do not allow the existence of Black Holes. ")]):e.isUnlocked?[i("div",{staticClass:"c-subtab-option-container"},[i("button",{staticClass:"o-primary-btn o-primary-btn--subtab-option",on:{click:e.togglePause}},[e._v(" "+e._s(e.stateChange)+" Black Hole ")]),e.isPermanent?e._e():i("button",{staticClass:"o-primary-btn o-primary-btn--subtab-option l-auto-pause-button",on:{click:e.changePauseMode}},[e._v(" Auto-pause: "+e._s(e.pauseModeString)+" ")])]),i("canvas",{ref:"canvas",staticClass:"c-black-hole-canvas",attrs:{width:"400",height:"400"}}),i("div",{staticClass:"l-black-hole-upgrade-grid"},[e._l(e.blackHoles,(function(e,t){return i("BlackHoleStateRow",{key:"state"+t,attrs:{"black-hole":e}})})),e.hasBH2&&!e.isPermanent?i("span",[i("b",[e._v(e._s(e.detailedBH2))]),i("br"),e._v(" The timer for Black Hole 2 only advances while Black Hole 1 is active. "),i("br"),e._v(" Upgrades affect the internal timer; the header shows real time until next activation. ")]):e._e(),i("br"),e.isPermanent?e._e():i("div",[e._v(" Black holes become permanently active when they are active for more than "+e._s(e.formatPercents(.9999,2))+" of the time. "),i("br"),e._v(" Active time percent: "+e._s(e.formatPercents(e.blackHoleUptime[0],3))+" "),e.hasBH2?i("span",[e._v("and "+e._s(e.formatPercents(e.blackHoleUptime[1],3)))]):e._e()]),i("BlackHoleChargingSliders",{staticClass:"l-enslaved-shop-container"})],2),i("div",{class:e.gridStyle()},e._l(e.blackHoles,(function(e,t){return i("BlackHoleUpgradeRow",{key:"upgrades"+t,attrs:{"black-hole":e}})})),1),e.hasBH3?i("div",[e._v(" Black Hole 3 is only active when Game Speed is greater than 1. ")]):e._e(),i("div",{class:e.gridStyle()},e._l(e.expoBlackHoles,(function(e,t){return i("ExpoBlackHoleUpgradeRow",{key:"upgrades"+t,attrs:{"expo-black-hole":e}})})),1)]:i("div",{staticClass:"l-pre-unlock-text"},[i("BlackHoleUnlockButton",{on:{blackholeunlock:e.startAnimation}}),e._v(" The Black Hole makes the entire game run significantly faster for a short period of time. "),i("br"),e._v(" Starts at "+e._s(e.formatX(180))+" faster for "+e._s(e.formatInt(10))+" seconds, once per hour. "),i("br"),i("br"),e._v(" Unlocking the Black Hole also gives "+e._s(e.formatInt(10))+" Automator Points. ")],1)],2)},qS=[];const VS=function(){const e=1.5,t=.5,i=120,a=100,n=2;let s;function r(e,t){let i=t;const a=20;for(let n=0;n2.74645*s&&BlackHoles.areNegative)this.respawn();else if(this.distance<.01*s&&!BlackHoles.areNegative)return void this.respawn();this.isInside=this.distance<=.865*s,this.respawnTick=!1}performDraw(e){if(this.drawTrail(e),!BlackHole(1).isActive)return void(e.strokeStyle="rgb(127, 127, 127)");const{distance:t}=this;if(t>s){const i=Math.floor(127*(t-s)/a);e.strokeStyle=`rgb(${135-i}, ${i}, ${i})`}if(t<=s){const i=Math.floor(255*Math.sqrt(t/s));e.strokeStyle=`rgb(${i}, 0, 0)`}}drawTrail(e){if(this.isInside&&!BlackHole(2).isActive)return;const{x:t,y:i}=o.calculatePosition(this.distance,this.angle);if(this.respawnTick||!BlackHole(1).isActive)return e.arc(t+200,i+200,this.size,0,2*Math.PI),void(this.isBlob&&this.drawAndRotateBlob(e,t,i));const a=this.isInside?this.angle:this.preLastAngle,{x:n,y:s}=o.calculatePosition(this.preLastDistance,a);e.lineCap="round",this.isBlob?this.drawAndRotateBlob(e,t,i):(e.lineWidth*=1,e.moveTo(t+200,i+200),e.lineTo(n+200,s+200))}drawAndRotateBlob(e,t,i){const a=18;if(e.textAlign="center",e.fillStyle="orange",this.distance<=s){const t=this.distance/s,i=a*Math.sqrt(t),n=165*t**2;e.fillStyle=`rgba(255, ${n}, 0, ${2*t})`,e.font=`${i}px Typewriter`}else e.font=`${a}px Typewriter`;e.save(),e.translate(t+200,i+200),e.rotate(-this.angle*Math.PI*2+Math.PI),e.fillText(this.blob,0,0),e.restore()}}return class{constructor(t){this.context=t,this.planet=new l,this.period=BlackHole(1).cycleLength;const o=(1-Math.pow(n,-2))/(1-Math.pow(BlackHole(1).power,-2));let u=.5;const h=1e3,m=2*Math.PI*Math.min(.9,BlackHole(1).duration/this.period);for(let e=0;enew d)),this.frameRequest=requestAnimationFrame((e=>this.update(e)))}update(e){if(this.frameRequest=requestAnimationFrame((e=>this.update(e))),void 0===e||void 0===this.lastFrame)return void(this.lastFrame=e);const t=e-this.lastFrame;this.lastFrame=e,this.planet.update(this.totalPhase(),this.eccentricity,this.period),this.context.clearRect(0,0,400,400),this.hole.draw(this.context);for(const a of this.particles)a.draw(this.context);if(BlackHoles.arePaused&&!BlackHoles.areNegative)return;const i=1/Math.sqrt(1-s/this.planet.distance);for(const a of this.particles)a.update(t,i)}totalPhase(){const e=BlackHole(1);return e.isActive?(e.phase-e.duration/2+this.period)%this.period:e.phase+e.duration/2}unmount(){cancelAnimationFrame(this.frameRequest)}}}();var YS=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e.isNegativeBHUnlocked?i("div",{staticClass:"l-black-hole-sliders"},[i("b",[e._v(" Inverted Black Hole divides game speed by "+e._s(e.format(e.negativeBHDivisor,2,2))+". (Currently "+e._s(e.isInverted?"active":"inactive")),0===e.negativeSlider||e.isInverted?e._e():i("span",{attrs:{"ach-tooltip":e.infoTooltip}},[i("i",{staticClass:"fas fa-question-circle l-margin-left"})]),e._v(") ")]),e.isDisabled?i("div",{staticClass:"l-lock-text"},[e._v(" "+e._s(e.reqLockText)+" ")]):i("SliderComponent",e._b({attrs:{value:e.negativeSlider},on:{input:function(t){return e.adjustSliderNegative(t)}}},"SliderComponent",e.sliderProps(!0),!1)),i("br"),e._v(" Inverting the Black Hole only affects its own speedup, no other upgrades or effects, although it will also indirectly affect the Effarig Game speed power effect. ")],1):e._e()])},WS=[],jS=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.show,expression:"show"}],class:["l-ad-slider",e.flowDirection,e.disabledClass,{"l-ad-slider--has-label":e.piecewiseLabel}]},[e.plusMinusButtons?i("PlusMinusButton",{attrs:{type:"minus"},on:{click:function(t){return e.increment(-1)}}}):e._e(),i("div",{ref:"wrap",class:["l-ad-slider__wrap",e.stateClass],style:[e.wrapStyles,e.boolDisabled?e.disabledStyle:null],on:{click:e.wrapClick}},[i("div",{ref:"elem",class:["l-ad-slider__bg","c-ad-slider__bg",e.bgClass],style:[e.elemStyles,e.bgStyle,e.draggableStyle],attrs:{"aria-hidden":"true"},on:{mousedown:function(t){return e.moveStart(t,0,!0)},touchstart:function(t){return e.moveStart(t,0,!0)}}},[e.isRange?[i("div",{key:"dot0",ref:"dot0",class:[e.tooltipStatus,"l-ad-slider__dot","c-ad-slider__dot",{"l-ad-slider__dot--focus":e.focusFlag&&0===e.focusSlider,"l-ad-slider__dot--dragging":e.flag&&0===e.currentSlider,"l-ad-slider__dot--disabled":!e.boolDisabled&&e.disabledArray[0]}],style:e.dotStyles,on:{mousedown:e.moveStart,touchstart:e.moveStart}},[i("div",{class:["l-ad-slider__dot-handle","c-ad-slider__dot-handle",e.dotClass],style:[!e.boolDisabled&&e.disabledArray[0]?e.disabledDotStyles[0]:null,e.sliderStyles[0],e.focusFlag&&0===e.focusSlider?e.focusStyles[0]:null]}),i("div",{ref:"tooltip0",class:["ad-slider-tooltip-"+e.tooltipDirection[0],"ad-slider-tooltip-wrap"]},[i("span",{staticClass:"ad-slider-tooltip",style:e.tooltipStyles[0]},[e._v(e._s(e.xformatter?e.formatting(e.val[0]):e.val[0]))])])]),i("div",{key:"dot1",ref:"dot1",class:[e.tooltipStatus,"l-ad-slider__dot","c-ad-slider__dot",{"l-ad-slider__dot--focus":e.focusFlag&&1===e.focusSlider,"l-ad-slider__dot--dragging":e.flag&&1===e.currentSlider,"l-ad-slider__dot--disabled":!e.boolDisabled&&e.disabledArray[1]}],style:e.dotStyles,on:{mousedown:function(t){return e.moveStart(t,1)},touchstart:function(t){return e.moveStart(t,1)}}},[i("div",{class:["l-ad-slider__dot-handle","c-ad-slider__dot-handle",e.dotClass],style:[!e.boolDisabled&&e.disabledArray[1]?e.disabledDotStyles[1]:null,e.sliderStyles[1],e.focusFlag&&1===e.focusSlider?e.focusStyles[1]:null]}),i("div",{ref:"tooltip1",class:["ad-slider-tooltip-"+e.tooltipDirection[1],"ad-slider-tooltip-wrap"]},[i("span",{staticClass:"ad-slider-tooltip",style:e.tooltipStyles[1]},[e._v(e._s(e.xformatter?e.formatting(e.val[1]):e.val[1]))])])])]:[i("div",{key:"dot0",ref:"dot0",class:[e.tooltipStatus,"l-ad-slider__dot","c-ad-slider__dot",{"l-ad-slider__dot--focus":e.focusFlag&&0===e.focusSlider,"l-ad-slider__dot--dragging":e.flag&&0===e.currentSlider}],style:e.dotStyles,on:{mousedown:e.moveStart,touchstart:e.moveStart}},[i("div",{class:["l-ad-slider__dot-handle","c-ad-slider__dot-handle",e.dotClass],style:[e.sliderStyles,e.focusFlag&&0===e.focusSlider?e.focusStyles:null]},[e._v(" "+e._s(e.dotContents(0))+" ")]),i("div",{class:["ad-slider-tooltip-"+e.tooltipDirection,"ad-slider-tooltip-wrap"]},[i("span",{staticClass:"ad-slider-tooltip",style:e.tooltipStyles},[e._v(e._s(e.xformatter?e.formatting(e.val):e.val))])])])],i("ul",{staticClass:"ad-slider-piecewise"},e._l(e.piecewiseDotWrap,(function(t,a){return i("li",{key:a,staticClass:"ad-slider-piecewise-item",style:[e.piecewiseDotStyle,t.style]},[e.piecewise?i("span",{staticClass:"ad-slider-piecewise-dot",style:[e.piecewiseStyle,e.isActive(t.index)?e.piecewiseActiveStyle:null]}):e._e(),e.piecewiseLabel?i("span",{staticClass:"ad-slider-piecewise-label",style:[e.labelStyle,e.isActive(t.index)?e.labelActiveStyle:null]},[e._v(" "+e._s(t.label)+" ")]):e._e()])})),0),i("div",{ref:"process",class:["l-ad-slider__process","c-ad-slider__process",{"ad-slider-process-draggable":e.isRange&&e.processDraggable},e.processClass],style:[e.elemStyles,e.bgStyle,e.draggableStyle],on:{click:e.processClick}},[i("div",{ref:"mergedTooltip",class:["vue-merged-tooltip","ad-slider-tooltip-"+e.tooltipDirection[0],"ad-slider-tooltip-wrap"],style:e.tooltipMergedPosition},[i("span",{staticClass:"ad-slider-tooltip",style:e.tooltipStyles},[e._v(" "+e._s(e.tooltipFormatHelper)+" ")])])])],2)]),e.plusMinusButtons?i("PlusMinusButton",{attrs:{type:"plus"},on:{click:function(t){return e.increment(1)}}}):e._e()],1)},XS=[],zS=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"repeating-click",rawName:"v-repeating-click",value:{delay:500},expression:"{ delay: 500 }"}],staticClass:"c-ad-slider__button",on:{firstclick:function(t){return e.$emit("click")},repeatclick:function(t){return e.$emit("click")}}},[i("div",{class:e.iconClass})])},KS=[];const ZS={name:"PlusMinusButton",props:{type:{type:String,required:!0}},computed:{iconClass(){return`fas fa-${this.type}`}}},QS=ZS;var JS=(0,X.Z)(QS,zS,KS,!1,null,"1c7fda29",null);const eD=JS.exports,tD=function(){const e="undefined"!==typeof window&&window.devicePixelRatio||1;return t=>Math.round(t*e)/e}(),iD={name:"SliderComponent",components:{PlusMinusButton:eD},props:{width:{type:String,default:"auto"},height:{type:String,default:"6px"},data:{type:Array,default:null},dotSize:{type:[String,Number],default:"16px"},dotWidth:{type:String,required:!1},dotHeight:{type:String,required:!1},min:{type:Number,default:0},max:{type:Number,default:100},interval:{type:Number,default:1},show:{type:Boolean,default:!0},disabled:{type:[Boolean,Array],default:!1},piecewise:{type:Boolean,default:!1},tooltip:{type:[String,Boolean],default:"always"},eventType:{type:String,default:"auto"},direction:{type:String,default:"horizontal"},reverse:{type:Boolean,default:!1},lazy:{type:Boolean,default:!1},clickable:{type:Boolean,default:!0},speed:{type:Number,default:.5},realTime:{type:Boolean,default:!1},stopPropagation:{type:Boolean,default:!1},value:{type:[String,Number,Array,Object],default:0},piecewiseLabel:{type:Boolean,default:!1},debug:{type:Boolean,default:!0},fixed:{type:Boolean,default:!1},minRange:{type:Number},maxRange:{type:Number},processDraggable:{type:Boolean,default:!1},useKeyboard:{type:Boolean,default:!1},actionsKeyboard:{type:Array,default(){return[e=>e-1,e=>e+1]}},piecewiseFilter:{type:Function},tooltipMerge:{type:Boolean,default:!0},startAnimation:{type:Boolean,default:!1},enableCross:{type:Boolean,default:!0},valueInDot:{type:Boolean,default:!1},plusMinusButtons:{type:Boolean,default:!1},sliderStyle:[Array,Object,Function],focusStyle:[Array,Object,Function],tooltipDir:[Array,String],xformatter:[String,Function],mergeFormatter:[String,Function],piecewiseStyle:Object,disabledStyle:Object,piecewiseActiveStyle:Object,processStyle:Object,processClass:String,bgStyle:Object,bgClass:String,tooltipStyle:[Array,Object,Function],disabledDotStyle:[Array,Object,Function],labelStyle:Object,labelActiveStyle:Object,dotClass:[String,Array]},data(){return{flag:!1,dragFlag:!1,crossFlag:!1,keydownFlag:null,focusFlag:!1,processFlag:!1,processSign:null,size:0,fixedValue:0,focusSlider:0,currentValue:0,currentSlider:0,isComponentExists:!0,isMounted:!1,dotAxialSizePx:1}},computed:{tooltipFormatHelper(){return this.mergeFormatter?this.mergeFormatting(this.val[0],this.val[1]):this.xformatter?this.val[0]===this.val[1]?this.formatting(this.val[0]):this.formatting(this.val[0])+"-"+this.formatting(this.val[1]):this.val[0]===this.val[1]?this.val[0]:this.val[0]+"-"+this.val[1]},dotWidthVal(){return this.dotWidth||this.dotSize},dotHeightVal(){return this.dotHeight||this.dotSize},flowDirection(){return"l-ad-slider--"+(this.direction+(this.reverse?"-reverse":""))},tooltipMergedPosition(){if(!this.isMounted)return{};const e=this.tooltipDirection[0];if(this.$refs.dot0){const t={};return t[e]=`-${this.dotAxialSizePx/2-this.size/2+9}px`,t["left"]="50%",t}},tooltipDirection(){const e=this.tooltipDir||("vertical"===this.direction?"left":"top");return Array.isArray(e)?this.isRange?e:e[1]:this.isRange?[e,e]:e},tooltipStatus(){return"hover"===this.tooltip&&this.flag?"ad-slider-always":this.tooltip?`ad-slider-${this.tooltip}`:""},tooltipClass(){return[`ad-slider-tooltip-${this.tooltipDirection}`,"ad-slider-tooltip"]},disabledArray(){return Array.isArray(this.disabled)?this.disabled:[this.disabled,this.disabled]},boolDisabled(){return this.disabledArray.every((e=>!0===e))},isDisabled(){return"none"===this.eventType||this.boolDisabled},disabledClass(){return this.boolDisabled?"l-ad-slider--disabled":""},stateClass(){return{"ad-slider-state-process-drag":this.processFlag,"ad-slider-state-drag":this.flag&&!this.processFlag&&!this.keydownFlag,"ad-slider-state-focus":this.focusFlag}},isRange(){return Array.isArray(this.value)},slider(){return this.isRange?[this.$refs.dot0,this.$refs.dot1]:[this.$refs.dot0]},minimum(){return this.data?0:this.min},val:{get(){return this.data?this.isRange?[this.data[this.currentValue[0]],this.data[this.currentValue[1]]]:this.data[this.currentValue]:this.currentValue},set(e){if(this.data)if(this.isRange){const t=this.data.indexOf(e[0]),i=this.data.indexOf(e[1]);t>-1&&i>-1&&(this.currentValue=[t,i])}else{const t=this.data.indexOf(e);t>-1&&(this.currentValue=t)}else this.currentValue=e}},currentIndex(){return this.isRange?this.data?this.currentValue:[this.getIndexByValue(this.currentValue[0]),this.getIndexByValue(this.currentValue[1])]:this.getIndexByValue(this.currentValue)},indexRange(){return this.isRange?this.currentIndex:[0,this.currentIndex]},maximum(){return this.data?this.data.length-1:this.max},multiple(){const e=`${this.interval}`.split(".")[1];return e?Math.pow(10,e.length):1},spacing(){return this.data?1:this.interval},total(){return this.data?this.data.length-1:(Math.floor((this.maximum-this.minimum)*this.multiple)%(this.interval*this.multiple)!==0&&this.printError("Prop[interval] is illegal, Please make sure that the interval can be divisible"),(this.maximum-this.minimum)/this.interval)},usableSize(){return this.size-this.dotAxialSizePx},gap(){return this.usableSize/this.total},position(){return this.isRange?[(this.currentValue[0]-this.minimum)/this.spacing*this.gap+this.dotAxialSizePx/2,(this.currentValue[1]-this.minimum)/this.spacing*this.gap+this.dotAxialSizePx/2]:(this.currentValue-this.minimum)/this.spacing*this.gap+this.dotAxialSizePx/2},isFixed(){return this.fixed||this.minRange},limit(){return this.isRange?this.isFixed?[[this.dotAxialSizePx/2,this.dotAxialSizePx/2+(this.total-this.fixedValue)*this.gap],[this.fixedValue*this.gap+this.dotAxialSizePx/2,this.size-this.dotAxialSizePx/2]]:[[this.dotAxialSizePx/2,this.position[1]],[this.position[0],this.size-this.dotAxialSizePx/2]]:[this.dotAxialSizePx/2,this.size-this.dotAxialSizePx/2]},valueLimit(){return this.isRange?this.isFixed?[[this.minimum,this.maximum-this.fixedValue*(this.spacing*this.multiple)/this.multiple],[this.minimum+this.fixedValue*(this.spacing*this.multiple)/this.multiple,this.maximum]]:[[this.minimum,this.currentValue[1]],[this.currentValue[0],this.maximum]]:[this.minimum,this.maximum]},idleSlider(){return 0===this.currentSlider?1:0},wrapStyles(){let e="vertical"===this.direction?{height:this.height}:{width:this.width};return this.plusMinusButtons&&(e["vertical"===this.direction?"margin-top":"margin-right"]="0.5rem",e["vertical"===this.direction?"margin-bottom":"margin-left"]="0.5rem"),e},sliderStyles(){return Array.isArray(this.sliderStyle)?this.isRange?this.sliderStyle:this.sliderStyle[1]:"function"===typeof this.sliderStyle?this.sliderStyle(this.val,this.currentIndex):this.isRange?[this.sliderStyle,this.sliderStyle]:this.sliderStyle},focusStyles(){return Array.isArray(this.focusStyle)?this.isRange?this.focusStyle:this.focusStyle[1]:"function"===typeof this.focusStyle?this.focusStyle(this.val,this.currentIndex):this.isRange?[this.focusStyle,this.focusStyle]:this.focusStyle},disabledDotStyles(){const e=this.disabledDotStyle;if(Array.isArray(e))return e;if("function"===typeof e){const t=e(this.val,this.currentIndex);return Array.isArray(t)?t:[t,t]}return e?[e,e]:[{backgroundColor:"#ccc"},{backgroundColor:"#ccc"}]},tooltipStyles(){return Array.isArray(this.tooltipStyle)?this.isRange?this.tooltipStyle:this.tooltipStyle[1]:"function"===typeof this.tooltipStyle?this.tooltipStyle(this.val,this.currentIndex):this.isRange?[this.tooltipStyle,this.tooltipStyle]:this.tooltipStyle},elemStyles(){return"vertical"===this.direction?{width:this.width,height:"100%",position:"relative"}:{height:this.height,position:"relative"}},draggableStyle(){return{cursor:this.boolDisabled?"default":"pointer"}},dotStyles(){let e={width:this.dotWidthVal,height:this.dotHeightVal,position:"absolute"};return"vertical"===this.direction?e.left="50%":e.top="50%",e},piecewiseDotStyle(){return{width:this.width,height:this.height}},piecewiseDotWrap(){if(!this.piecewise&&!this.piecewiseLabel)return!1;let e=[];for(let t=0;t<=this.total;t++){const i="vertical"===this.direction?{bottom:this.gap*t-this.usableSize/2+"px",left:0}:{left:this.gap*t-this.usableSize/2+"px",top:0},a=this.reverse?this.total-t:t,n=this.data?this.data[a]:this.spacing*a+this.min;this.piecewiseFilter&&!this.piecewiseFilter({index:a,label:n})||e.push({style:i,index:a,label:this.xformatter?this.formatting(n):n})}return e}},watch:{value(e){this.flag||this.setValue(e,!0)},max(e){if(ethis.max)return this.printError("The minimum value can not be greater than the maximum value.");const t=this.limitValue(this.val);this.setValue(t),this.refresh()},show(e){e&&!this.size&&this.$nextTick((()=>{this.refresh()}))},fixed(){this.computedFixedValue()},minRange(){this.computedFixedValue()},reverse(){this.$refs.process.style.cssText="",this.refresh()}},methods:{bindEvents(){document.addEventListener("touchmove",this.moving,{passive:!1}),document.addEventListener("touchend",this.moveEnd,{passive:!1}),document.addEventListener("mousedown",this.blurSlider),document.addEventListener("mousemove",this.moving),document.addEventListener("mouseup",this.moveEnd),document.addEventListener("mouseleave",this.moveEnd),document.addEventListener("keydown",this.handleKeydown),document.addEventListener("keyup",this.handleKeyup),window.addEventListener("resize",this.refresh),this.isRange&&this.tooltipMerge&&(this.$refs.dot0.addEventListener("transitionend",this.handleOverlapTooltip),this.$refs.dot1.addEventListener("transitionend",this.handleOverlapTooltip))},unbindEvents(){document.removeEventListener("touchmove",this.moving),document.removeEventListener("touchend",this.moveEnd),document.removeEventListener("mousedown",this.blurSlider),document.removeEventListener("mousemove",this.moving),document.removeEventListener("mouseup",this.moveEnd),document.removeEventListener("mouseleave",this.moveEnd),document.removeEventListener("keydown",this.handleKeydown),document.removeEventListener("keyup",this.handleKeyup),window.removeEventListener("resize",this.refresh),this.isRange&&this.tooltipMerge&&(this.$refs.dot0.removeEventListener("transitionend",this.handleOverlapTooltip),this.$refs.dot1.removeEventListener("transitionend",this.handleOverlapTooltip))},handleKeydown(e){if(!this.useKeyboard||!this.focusFlag)return!1;switch(e.keyCode){case 37:case 40:e.preventDefault(),this.keydownFlag=!0,this.flag=!0,this.changeFocusSlider(this.actionsKeyboard[0]);break;case 38:case 39:e.preventDefault(),this.keydownFlag=!0,this.flag=!0,this.changeFocusSlider(this.actionsKeyboard[1]);break}},handleKeyup(){this.keydownFlag&&(this.keydownFlag=!1,this.flag=!1)},changeFocusSlider(e){if(this.isRange){let t=this.currentIndex.map(((t,i)=>{if(i===this.focusSlider||this.fixed){const a=e(t),n=this.fixed?this.valueLimit[i]:[0,this.total];if(a<=n[1]&&a>=n[0])return a}return t}));t[0]>t[1]&&(this.focusSlider=0===this.focusSlider?1:0,t=t.reverse()),this.setIndex(t)}else this.setIndex(e(this.currentIndex))},blurSlider(e){const t=this.isRange?this.$refs[`dot${this.focusSlider}`]:this.$refs.dot;if(!t||t===e.target||t.contains(e.target))return!1;this.focusFlag=!1},formatting(e){return"string"===typeof this.xformatter?this.xformatter.replace(/\{value\}/,e):this.xformatter(e)},mergeFormatting(e,t){return"string"===typeof this.mergeFormatter?this.mergeFormatter.replace(/\{(value1|value2)\}/g,((i,a)=>"value1"===a?e:t)):this.mergeFormatter(e,t)},getPos(e){this.realTime&&this.getStaticData();var t=this.$refs.elem.getBoundingClientRect();return"vertical"===this.direction?this.reverse?e.clientY-t.top:this.size-(e.clientY-t.top):this.reverse?this.size-(e.clientX-t.left):e.clientX-t.left},processClick(e){this.fixed&&e.stopPropagation()},wrapClick(e){if(this.isDisabled||!this.clickable||this.processFlag||this.dragFlag)return!1;const t=this.getPos(e);if(this.isRange)if(this.disabledArray.every((e=>!1===e)))this.currentSlider=t>(this.position[1]-this.position[0])/2+this.position[0]?1:0;else if(this.disabledArray[0]){if(tthis.position[1])return!1;this.currentSlider=0}if(this.disabledArray[this.currentSlider])return!1;if(this.setValueOnPos(t),this.isRange&&this.tooltipMerge){const e=setInterval((()=>this.handleOverlapTooltip()),16.7);setTimeout((()=>window.clearInterval(e)),1e3*this.speed)}},moveStart(e,t=0,i){if(this.disabledArray[t])return!1;if(this.stopPropagation&&e.stopPropagation(),this.isRange){if(this.currentSlider=t,i){if(!this.processDraggable)return!1;this.processFlag=!0,this.processSign={pos:this.position,start:this.getPos(e.targetTouches&&e.targetTouches[0]?e.targetTouches[0]:e)}}this.enableCross||this.val[0]!==this.val[1]||(this.crossFlag=!0)}!i&&this.useKeyboard&&(this.focusFlag=!0,this.focusSlider=t),this.flag=!0,this.$emit("drag-start",this)},moving(e){if(this.stopPropagation&&e.stopPropagation(),!this.flag)return!1;e.preventDefault(),e.targetTouches&&e.targetTouches[0]&&(e=e.targetTouches[0]),this.processFlag?(this.currentSlider=0,this.setValueOnPos(this.processSign.pos[0]+this.getPos(e)-this.processSign.start,!0),this.currentSlider=1,this.setValueOnPos(this.processSign.pos[1]+this.getPos(e)-this.processSign.start,!0)):(this.dragFlag=!0,this.setValueOnPos(this.getPos(e),!0)),this.isRange&&this.tooltipMerge&&this.handleOverlapTooltip()},moveEnd(e){if(this.stopPropagation&&e.stopPropagation(),!this.flag)return!1;this.$emit("drag-end",this),this.lazy&&this.isDiff(this.val,this.value)&&this.syncValue(),this.flag=!1,window.setTimeout((()=>{this.crossFlag=!1,this.dragFlag=!1,this.processFlag=!1}),0),this.setPosition()},setValueOnPos(e,t){const i=this.isRange?this.limit[this.currentSlider]:this.limit,a=this.isRange?this.valueLimit[this.currentSlider]:this.valueLimit,n=Math.round((e-this.dotAxialSizePx/2)/this.gap);if(e>=i[0]&&e<=i[1]){const i=this.getValueByIndex(n);this.setTransform(e),this.setCurrentValue(i,t),this.isRange&&(this.fixed||this.isLessRange(e,n))&&(this.setTransform(e+this.fixedValue*this.gap*(0===this.currentSlider?1:-1),!0),this.setCurrentValue((i*this.multiple+this.fixedValue*this.spacing*this.multiple*(0===this.currentSlider?1:-1))/this.multiple,t,!0))}else{const s=e=this.maxRange?(this.fixedValue=this.maxRange,!0):(this.computedFixedValue(),!1)},isDiff(e,t){return Object.prototype.toString.call(e)!==Object.prototype.toString.call(t)||(Array.isArray(e)&&e.length===t.length?e.some(((e,i)=>e!==t[i])):e!==t)},setCurrentValue(e,t,i){const a=i?this.idleSlider:this.currentSlider;if(ethis.maximum)return!1;this.isRange?this.isDiff(this.currentValue[a],e)&&(this.currentValue.splice(a,1,e),this.lazy&&this.flag||this.syncValue()):this.isDiff(this.currentValue,e)&&(this.currentValue=e,this.lazy&&this.flag||this.syncValue()),t||this.setPosition()},getValueByIndex(e){return(this.spacing*this.multiple*e+this.minimum*this.multiple)/this.multiple},getIndexByValue(e){return Math.round((e-this.minimum)*this.multiple)/(this.spacing*this.multiple)},setIndex(e){if(Array.isArray(e)&&this.isRange){let t;t=this.data?[this.data[e[0]],this.data[e[1]]]:[this.getValueByIndex(e[0]),this.getValueByIndex(e[1])],this.setValue(t)}else e=this.getValueByIndex(e),this.isRange&&(this.currentSlider=e>(this.currentValue[1]-this.currentValue[0])/2+this.currentValue[0]?1:0),this.setCurrentValue(e)},increment(e){if(this.boolDisabled)return;const t=this.getValue()+e*this.interval;t>this.max||tthis.setPosition(i)))},computedFixedValue(){if(!this.isFixed)return this.fixedValue=0,!1;this.fixedValue=Math.max(this.fixed?this.currentIndex[1]-this.currentIndex[0]:0,this.minRange||0)},setPosition(e){this.flag||this.setTransitionTime(void 0===e?this.speed:e),this.isRange?(this.setTransform(this.position[0],1===this.currentSlider),this.setTransform(this.position[1],0===this.currentSlider)):this.setTransform(this.position),this.flag||this.setTransitionTime(0)},setTransform(e,t){const i=t?this.idleSlider:this.currentSlider,a=tD(("vertical"===this.direction?this.dotAxialSizePx/2-e:e-this.dotAxialSizePx/2)*(this.reverse?-1:1)),n="vertical"===this.direction?`translate(-50%, ${a}px)`:`translate(${a}px, -50%)`,s=this.fixed?this.fixedValue*this.gap+"px":(0===i?this.position[1]-e:e-this.position[0])+"px",r=this.fixed?`${0===i?e:e-this.fixedValue*this.gap}px`:`${0===i?e:this.position[0]}px`;this.slider[i].style.transform=n,this.slider[i].style.WebkitTransform=n,this.slider[i].style.msTransform=n,this.isRange?"vertical"===this.direction?(this.$refs.process.style.height=s,this.$refs.process.style[this.reverse?"top":"bottom"]=r):(this.$refs.process.style.width=s,this.$refs.process.style[this.reverse?"right":"left"]=r):"vertical"===this.direction?(this.$refs.process.style.height=`${e}px`,this.$refs.process.style[this.reverse?"top":"bottom"]=0):(this.$refs.process.style.width=`${e}px`,this.$refs.process.style[this.reverse?"right":"left"]=0)},setTransitionTime(e){e||this.$refs.process.offsetWidth;for(let t=0;ttthis.max?(this.printError(`The value of the slider is ${e}, the maximum value is ${this.max}, the value of this slider can not be greater than the maximum value`),this.max):t;return this.isRange?e.map((e=>t(e))):t(e)},isActive(e){return e>=this.indexRange[0]&&e<=this.indexRange[1]},syncValue(e){let t=this.isRange?this.val.concat():this.val;this.$emit("input",t),this.keydownFlag&&this.$emit("on-keypress",t),e||this.$emit("callback",t)},getValue(){return this.val},getIndex(){return this.currentIndex},getStaticData(){this.$refs.elem&&(this.size="vertical"===this.direction?this.$refs.elem.offsetHeight:this.$refs.elem.offsetWidth,this.dotAxialSizePx="vertical"===this.direction?this.$refs.dot0.clientHeight:this.$refs.dot0.clientWidth)},refresh(){this.$refs.elem&&(this.getStaticData(),this.computedFixedValue(),this.setPosition(0))},printError(e){this.debug&&console.error(`[VueSlider error]: ${e}`)},handleOverlapTooltip(){const e=this.tooltipDirection[0]===this.tooltipDirection[1];if(this.isRange&&e){const e=this.reverse?this.$refs.tooltip1:this.$refs.tooltip0,t=this.reverse?this.$refs.tooltip0:this.$refs.tooltip1,i=e.getBoundingClientRect(),a=t.getBoundingClientRect(),n=i.right,s=a.left,r=i.top,o=a.top+a.height,l="horizontal"===this.direction&&n>s,c="vertical"===this.direction&&o>r;l||c?this.handleDisplayMergedTooltip(!0):this.handleDisplayMergedTooltip(!1)}},handleDisplayMergedTooltip(e){const t=this.$refs.tooltip0,i=this.$refs.tooltip1,a=this.$refs.process.getElementsByClassName("vue-merged-tooltip")[0];e?(t.style.visibility="hidden",i.style.visibility="hidden",a.style.visibility="visible"):(t.style.visibility="visible",i.style.visibility="visible",a.style.visibility="hidden")},dotContents(){return"Blind"===Notations.current.name||"S9"===Theme.current().name?"":this.valueInDot?Math.round(this.getValue()):""}},mounted(){if(this.isComponentExists=!0,"undefined"===typeof window||"undefined"===typeof document)return this.printError("window or document is undefined, can not be initialization.");this.$nextTick((()=>{this.isComponentExists&&(this.getStaticData(),this.setValue(this.limitValue(this.value),!0,this.startAnimation?this.speed:0),this.bindEvents(),this.isRange&&this.tooltipMerge&&!this.startAnimation&&this.$nextTick((()=>{this.handleOverlapTooltip()})))})),this.isMounted=!0},beforeDestroy(){this.isComponentExists=!1,this.unbindEvents()}},aD=iD;var nD=(0,X.Z)(aD,jS,XS,!1,null,null,null);const sD=nD.exports,rD={name:"BlackHoleChargingSliders",components:{SliderComponent:sD},data(){return{isNegativeBHUnlocked:!1,isInverted:!1,isLaitela:!1,negativeSlider:0,negativeBHDivisor:1,maxNegativeBlackHole:300,isDisabled:!1}},computed:{infoTooltip(){return this.isLaitela?"The physics of this Reality do not allow Black Hole Inversion":"Black Hole must be paused to activate Inversion"},reqLockText(){return`Inversion strength cannot be modified due to Lock for\n "${ImaginaryUpgrade(24).name}"`}},methods:{update(){this.isNegativeBHUnlocked=V.isFlipped&&BlackHoles.arePermanent,this.isInverted=BlackHoles.areNegative,this.isLaitela=oQ.isRunning,this.negativeSlider=-Math.log10(player.blackHoleNegative),this.negativeBHDivisor=Math.pow(10,this.negativeSlider);const e=player.requirementChecks.reality.slowestBH<=1e-300;this.isDisabled=ImaginaryUpgrade(24).isLockingMechanics&&Ra.isRunning&&e},adjustSliderNegative(e){this.negativeSlider=e,player.blackHoleNegative=Math.pow(10,-this.negativeSlider),player.requirementChecks.reality.slowestBH=Math.max(player.requirementChecks.reality.slowestBH,player.blackHoleNegative)},sliderProps(e){return{min:0,max:e?this.maxNegativeBlackHole:990,interval:1,width:"55rem",tooltip:!1}}}},oD=rD;var lD=(0,X.Z)(oD,YS,WS,!1,null,"c72692d6",null);const cD=lD.exports;var uD=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isUnlocked?i("h3",[e._v(" "+e._s(e.description)+" State: "),e.isPermanent?[e._v(" Permanently Active ")]:e.isActive?[e._v(" Active ("+e._s(e.nextChange)+" remaining) ")]:2===e.id&&e.isCharged?[e._v(" Charged (Activates with Black Hole 1, "+e._s(e.nextChange)+" remaining) ")]:[e._v(" Inactive (Activation in "+e._s(e.nextChange)+") ")]],2):e._e()},dD=[];const hD={name:"BlackHoleStateRow",props:{blackHole:{type:Object,required:!0}},data(){return{isUnlocked:!1,isPermanent:!1,isActive:!1,isCharged:!1,nextChange:"",state:""}},computed:{description(){return this.blackHole.description(!0)},id(){return this.blackHole.id}},methods:{update(){const{blackHole:e}=this;this.isUnlocked=e.isUnlocked,this.isUnlocked&&(this.isPermanent=e.isPermanent,this.isActive=e.isActive,this.isCharged=e.isCharged,this.nextChange=TimeSpan.fromSeconds(e.timeWithPreviousActiveToNextStateChange).toStringShort(),this.state=e.displayState)}}},mD=hD;var pD=(0,X.Z)(mD,uD,dD,!1,null,"d6d66fce",null);const yD=pD.exports;var fD=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"l-reality-upgrade-btn c-reality-upgrade-btn c-reality-upgrade-btn--black-hole-unlock",class:e.classObject,on:{click:e.unlock}},[e._v(" Unleash the Black Hole "),i("br"),e._v(" Cost: "+e._s(e.formatInt(100))+" Reality Machines ")])},gD=[];const vD={name:"BlackHoleUnlockButton",data(){return{canBeUnlocked:!1}},computed:{classObject(){return{"c-reality-upgrade-btn--unavailable":!this.canBeUnlocked}}},methods:{update(){this.canBeUnlocked=BlackHoles.canBeUnlocked},unlock(){BlackHoles.unlock(),this.$emit("blackholeunlock")}}},bD=vD;var ED=(0,X.Z)(bD,fD,gD,!1,null,"dea0422a",null);const TD=ED.exports;var wD=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isUnlocked?i("div",{staticClass:"l-black-hole-upgrade-grid__row"},[e.isPermanent?e._e():i("BlackHoleUpgradeButton",{key:e.intervalVal,attrs:{config:e.intervalConfig}}),i("BlackHoleUpgradeButton",{attrs:{config:e.powerConfig}}),e.isPermanent?e._e():i("BlackHoleUpgradeButton",{key:e.durationVal,attrs:{config:e.durationConfig}})],1):e._e()},kD=[],CD=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group"},[i("button",{staticClass:"l-reality-upgrade-btn c-reality-upgrade-btn",class:e.classObject,on:{click:function(t){return e.config.upgrade.purchase()}}},[i("DescriptionDisplay",{attrs:{config:e.config}}),i("EffectDisplay",{attrs:{config:e.effectConfig,label:e.config.effectTitle}}),e.isCapped?e._e():i("CostDisplay",{attrs:{config:e.costConfig,name:"Reality Machine"}})],1),e.isAutoUnlocked?i("PrimaryToggleButton",{staticClass:"l--spoon-btn-group__little-spoon-reality-btn o-primary-btn--reality-upgrade-toggle",attrs:{label:"Auto:"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}}):e._e()],1)},AD=[],_D=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("span",[e.br?i("br"):e._e(),e._v(" "+e._s(e.label)+" "+e._s(e.quantify(e.name,e.cost,0,0,e.formatCost))+" ")]):e._e()},SD=[];const DD={name:"CostDisplay",props:{config:{type:Object,required:!1,default:void 0},br:{type:Boolean,required:!1},name:{type:String,required:!0},label:{type:String,default:"Cost:",required:!1}},data(){return{isVisible:!1,cost:0}},watch:{config:{immediate:!0,handler(e){var t;this.updateFunction=()=>{};const i=null===e||void 0===e?void 0:e.cost;if(this.isVisible=void 0!==i,!this.isVisible)return;if(this.formatCost=null!==(t=e.formatCost)&&void 0!==t?t:format,XT(i))return void(this.cost=i);if(ZT(i))return void(this.cost=Decimal.fromDecimal(i));if(!KT(i))throw new Error(`CostDisplay config.cost has unsupported type "${typeof i}"`);const a=i();if(XT(a))return this.cost=a,void(this.updateFunction=()=>this.cost=i());if(ZT(a))return this.cost=Decimal.fromDecimal(a),void(this.updateFunction=()=>this.cost.copyFrom(i()));throw new Error(`CostDisplay config.cost is a function which returns unsupported type "${typeof a}"`)}}},beforeCreate(){this.updateFunction=()=>{}},methods:{update(){this.updateFunction()},quantify}},RD=DD;var MD=(0,X.Z)(RD,_D,SD,!1,null,null,null);const ID=MD.exports;var xD=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("span",{class:e.classObject},[e._v(" "+e._s(e.title)+" "+e._s(e.description)+" ")]):e._e()},PD=[];const GD={name:"DescriptionDisplay",props:{config:{type:Object,required:!1,default:void 0},name:{type:String,required:!1,default:void 0},length:{type:Number,required:!1,default:void 0},title:{type:String,required:!1,default:""}},data(){return{isVisible:!1,description:""}},computed:{classObject(){const e=this.name;if(void 0===e)return;const t={};return t[e]=!0,this.description.length>=this.length&&(t[`${e}--small-text`]=!0),t}},watch:{config:{immediate:!0,handler(e){this.updateFunction=()=>{};const t=null===e||void 0===e?void 0:e.description,i=e=>e.charAt(0).toUpperCase()+e.slice(1);if(this.isVisible=void 0!==t,!this.isVisible)return;if(zT(t))return void(this.description=i(t));if(!KT(t))throw new Error(`DescriptionDisplay config.description has unsupported type "${typeof t}"`);const a=t();if(zT(a))return this.config.scrambleText?(this.description=i(a).replace("*",P.wordCycle(this.config.scrambleText,!0)),void(this.updateFunction=()=>this.description=i(t()).replace("*",P.wordCycle(this.config.scrambleText,!0)))):(this.description=i(a),void(this.updateFunction=()=>this.description=i(t())));throw new Error(`DescriptionDisplay config.description is a function which returns unsupported type "${typeof a}"`)}}},beforeCreate(){this.updateFunction=()=>{}},methods:{update(){this.updateFunction()}}},UD=GD;var BD=(0,X.Z)(UD,xD,PD,!1,null,null,null);const ND=BD.exports,OD={name:"BlackHoleUpgradeButton",components:{PrimaryToggleButton:Sh,DescriptionDisplay:ND,EffectDisplay:tw,CostDisplay:ID},props:{config:{type:Object,required:!0}},data(){return{isAffordable:!1,isCapped:!1,isAutoUnlocked:!1,isAutobuyerOn:!1}},computed:{effectConfig(){const{config:e}=this;return{effect:()=>e.upgrade.value,formatEffect:t=>e.formatEffect(t)}},costConfig(){const{config:e}=this;return{cost:()=>e.upgrade.cost,formatCost:e=>format(e,2,0)}},classObject(){return{"c-reality-upgrade-btn--unavailable":!this.isAffordable}}},watch:{isAutobuyerOn(e){Autobuyer.blackHolePower(this.config.upgrade.id).isActive=e}},methods:{update(){this.isCapped=0===this.config.upgrade.value,this.isAffordable=this.config.upgrade.isAffordable&&!this.isCapped;const e=this.config.upgrade.hasAutobuyer,t=Autobuyer.blackHolePower(this.config.upgrade.id);this.isAutoUnlocked=e&&t.isUnlocked,this.isAutobuyerOn=e&&t.isActive}}},LD=OD;var FD=(0,X.Z)(LD,CD,AD,!1,null,"6590e9be",null);const $D=FD.exports,HD={name:"BlackHoleUpgradeRow",components:{BlackHoleUpgradeButton:$D},props:{blackHole:{type:Object,required:!0}},data(){return{isUnlocked:!1,isPermanent:!1,intervalVal:0,durationVal:0}},computed:{blackHoleDescription(){return this.blackHole.description(!1)},intervalConfig(){return{upgrade:this.blackHole.intervalUpgrade,description:()=>`Reduce ${this.blackHoleDescription}'s inactive time by ${formatPercents(.2)}`,effectTitle:"Current interval",formatEffect:()=>`${TimeSpan.fromSeconds(this.blackHole.rawInterval).toStringShort(!1)}`}},powerConfig(){return{upgrade:this.blackHole.powerUpgrade,description:()=>`Make ${this.blackHoleDescription} ${formatPercents(.35)} stronger`,effectTitle:"Current power",formatEffect:e=>`${formatX(e,2,2)}`}},durationConfig(){return{upgrade:this.blackHole.durationUpgrade,description:()=>`Extend ${this.blackHoleDescription}'s duration by ${formatPercents(.3)}`,effectTitle:"Current duration",formatEffect:()=>`${TimeSpan.fromSeconds(this.blackHole.duration).toStringShort(!1)}`}}},methods:{update(){const e=this.blackHole;this.isUnlocked=e.isUnlocked,this.isPermanent=e.isPermanent,this.intervalVal=e.rawInterval,this.durationVal=e.duration}}},qD=HD;var VD=(0,X.Z)(qD,wD,kD,!1,null,"eb5ab370",null);const YD=VD.exports;var WD=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isUnlocked?i("div",{staticClass:"l-black-hole-upgrade-grid__row"},[i("ExpoBlackHoleUpgradeButton",{attrs:{config:e.powerConfig}})],1):e._e()},jD=[],XD=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group"},[i("button",{staticClass:"l-reality-upgrade-btn c-reality-upgrade-btn",class:e.classObject,on:{click:function(t){return e.config.upgrade.purchase()}}},[i("DescriptionDisplay",{attrs:{config:e.config}}),i("EffectDisplay",{attrs:{config:e.effectConfig,label:e.config.effectTitle}}),e.isCapped?e._e():i("CostDisplay",{attrs:{config:e.costConfig,name:"Imaginary Machine"}})],1),e.isAutoUnlocked?i("PrimaryToggleButton",{staticClass:"l--spoon-btn-group__little-spoon-reality-btn o-primary-btn--reality-upgrade-toggle",attrs:{label:"Auto:"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}}):e._e()],1)},zD=[];const KD={name:"ExpoBlackHoleUpgradeButton",components:{PrimaryToggleButton:Sh,DescriptionDisplay:ND,EffectDisplay:tw,CostDisplay:ID},props:{config:{type:Object,required:!0}},data(){return{isAffordable:!1,isCapped:!1,isAutoUnlocked:!1,isAutobuyerOn:!1}},computed:{effectConfig(){const{config:e}=this;return{effect:()=>e.upgrade.value,formatEffect:t=>e.formatEffect(t)}},costConfig(){const{config:e}=this;return{cost:()=>e.upgrade.cost,formatCost:e=>format(e,2,0)}},classObject(){return{"c-reality-upgrade-btn--unavailable":!this.isAffordable}}},watch:{isAutobuyerOn(e){Autobuyer.expoBlackHolePower(this.config.upgrade.id).isActive=e}},methods:{update(){this.isCapped=0===this.config.upgrade.value,this.isAffordable=this.config.upgrade.isAffordable&&!this.isCapped;const e=this.config.upgrade.hasAutobuyer,t=Autobuyer.expoBlackHolePower(this.config.upgrade.id);this.isAutoUnlocked=e&&t.isUnlocked,this.isAutobuyerOn=e&&t.isActive}}},ZD=KD;var QD=(0,X.Z)(ZD,XD,zD,!1,null,"5d1da3a7",null);const JD=QD.exports,eR={name:"ExpoBlackHoleUpgradeRow",components:{ExpoBlackHoleUpgradeButton:JD},props:{expoBlackHole:{type:Object,required:!0}},data(){return{isUnlocked:!1,isPermanent:!1,intervalVal:0,durationVal:0}},computed:{expoBlackHoleDescription(){return this.expoBlackHole.description(!1)},powerConfig(){return{upgrade:this.expoBlackHole.powerUpgrade,description:()=>`Multiply ${this.expoBlackHoleDescription}'s power by ${formatX(1.05,2,2)}`,effectTitle:"Current power",formatEffect:e=>`${formatPow(e,2,2)}`}}},methods:{update(){const e=this.expoBlackHole;this.isUnlocked=e.isUnlocked,this.isPermanent=e.isPermanent,this.intervalVal=e.rawInterval,this.durationVal=e.duration}}},tR=eR;var iR=(0,X.Z)(tR,WD,jD,!1,null,"39a56dee",null);const aR=iR.exports,nR={name:"BlackHoleTab",components:{BlackHoleUpgradeRow:YD,BlackHoleStateRow:yD,BlackHoleChargingSliders:cD,BlackHoleUnlockButton:TD,ExpoBlackHoleUpgradeRow:aR},data(){return{isDoomed:!1,isUnlocked:!1,isPaused:!1,isEnslaved:!1,pauseMode:0,detailedBH2:"",isPermanent:!1,hasBH2:!1,hasBH3:!1,blackHoleUptime:[],stateChange:""}},computed:{blackHoles:()=>BlackHoles.list,expoBlackHoles:()=>ExpoBlackHoles.list,pauseModeString(){switch(this.pauseMode){case BLACK_HOLE_PAUSE_MODE.NO_PAUSE:return"Do not pause";case BLACK_HOLE_PAUSE_MODE.PAUSE_BEFORE_BH1:return this.hasBH2?"Before BH1":"Before activation";case BLACK_HOLE_PAUSE_MODE.PAUSE_BEFORE_BH2:return"Before BH2";default:throw new Error("Unrecognized BH offline pausing mode")}}},mounted(){this.startAnimation()},destroyed(){this.animation&&this.animation.unmount()},methods:{update(){this.isDoomed=Pelle.isDoomed,this.isUnlocked=BlackHoles.areUnlocked,this.isPaused=BlackHoles.arePaused,this.isEnslaved&&!Enslaved.isRunning&&(this.animation&&this.animation.unmount(),this.startAnimation()),this.isEnslaved=Enslaved.isRunning,this.isPermanent=BlackHoles.arePermanent,this.pauseMode=player.blackHoleAutoPauseMode,this.hasBH2=BlackHole(2).isUnlocked,this.hasBH3=ExpoBlackHole(1).isUnlocked,this.blackHoleUptime=[BlackHole(1).duration/BlackHole(1).cycleLength,BlackHole(2).duration/BlackHole(2).cycleLength],this.detailedBH2=this.bh2Status(),player.blackHoleNegative<1?this.stateChange=this.isPaused?"Uninvert":"Invert":this.stateChange=this.isPaused?"Unpause":"Pause"},bh2Status(){const e=BlackHole(1).timeWithPreviousActiveToNextStateChange,t=BlackHole(2).timeWithPreviousActiveToNextStateChange;if(BlackHole(1).isActive&&BlackHole(2).isActive){const i=Math.min(e,t);return`Black Hole 2 is active for the next ${TimeSpan.fromSeconds(i).toStringShort()}!`}if(BlackHole(1).isActive&&tBlackHole(1).duration){const i=BlackHole(1).isActive?Math.floor((t-e)/BlackHole(1).duration)+1:Math.floor(t/BlackHole(1).duration);return`Black Hole 2 will activate after ${quantifyInt("more active cycle",i)} of Black Hole 1.`}if(BlackHole(2).isCharged){const e=Math.min(BlackHole(1).duration,t);return`Black Hole 2 will activate with Black Hole 1,\n for ${TimeSpan.fromSeconds(e).toStringShort()}.`}const i=Math.min(BlackHole(1).duration-t,BlackHole(2).duration);return`Black Hole 2 will activate ${TimeSpan.fromSeconds(t).toStringShort()} after\n Black Hole 1, for ${TimeSpan.fromSeconds(i).toStringShort()}.`},togglePause(){BlackHoles.togglePause(),ExpoBlackHoles.togglePause,BlackHoles.arePaused&&(player.celestials.enslaved.isAutoReleasing=!1),this.update()},changePauseMode(){let e;switch(this.pauseMode){case BLACK_HOLE_PAUSE_MODE.NO_PAUSE:e=BlackHole(1).isPermanent?2:1;break;case BLACK_HOLE_PAUSE_MODE.PAUSE_BEFORE_BH1:e=this.hasBH2?1:2;break;case BLACK_HOLE_PAUSE_MODE.PAUSE_BEFORE_BH2:e=1;break;default:throw new Error("Unrecognized BH offline pausing mode")}player.blackHoleAutoPauseMode=(this.pauseMode+e)%Object.values(BLACK_HOLE_PAUSE_MODE).length},startAnimation(){setTimeout((()=>{this.$refs.canvas&&(this.animation=new VS(this.$refs.canvas.getContext("2d")))}),1)},gridStyle(){return this.isPermanent?"l-black-hole-upgrade-permanent":"l-black-hole-upgrade-grid"}}},sR=nR;var rR=(0,X.Z)(sR,HS,qS,!1,null,"49a1483d",null);const oR=rR.exports;var lR=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-break-infinity-tab"},[e.chargeUnlocked?i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryButton",{class:e.disChargeClassObject,on:{click:function(t){e.disCharge=!e.disCharge}}},[e._v(" Respec Charged Break Infinity Upgrades on next Reality ")])],1):e._e(),e.chargeUnlocked?i("div",[e._v(" You have charged "+e._s(e.formatInt(e.chargesUsed))+"/"+e._s(e.formatInt(e.totalCharges))+" Break Infinity Upgrades. Charged Break Infinity Upgrades have their effect altered. "),i("br"),e._v(" Hold shift to show Charged Infinity Upgrades. You can freely respec your choices on Reality. ")]):e._e(),e.chargeUnlocked?i("div",[e.isUseless?i("div",[e._v(" You cannot Charge Break Infinity Upgrades while Doomed. ")]):e._e()]):e._e(),e.isUnlocked?e._e():i("div",[e._v(" Reduce the interval of Automatic Big Crunch Autobuyer to "+e._s(e.format(.1,1,1))+" seconds to unlock Break Infinity. ")]),i("BreakInfinityButton",{staticClass:"l-break-infinity-tab__break-btn"}),e.isUnlocked?i("div",{staticClass:"l-break-infinity-upgrade-grid l-break-infinity-tab__grid"},e._l(e.grid,(function(t,a){return i("div",{key:a,staticClass:"l-break-infinity-upgrade-grid__row"},e._l(t,(function(t){return i("InfinityUpgradeButton",{key:t.id,class:e.btnClassObject(a),attrs:{upgrade:t}})})),1)})),0):e._e()],1)},cR=[],uR=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.tooltip,expression:"tooltip"}],class:e.classObject,on:{click:e.clicked}},[e._v(" "+e._s(e.text)+" ")])},dR=[];const hR={name:"BreakInfinityButton",data(){return{isBroken:!1,isUnlocked:!1,isEnslaved:!1}},computed:{classObject(){return{"o-infinity-upgrade-btn":!0,"o-infinity-upgrade-btn--color-2":!0,"o-infinity-upgrade-btn--available":this.isUnlocked,"o-infinity-upgrade-btn--unavailable":!this.isUnlocked,"o-infinity-upgrade-btn--feel-eternity":this.isEnslaved,"o-infinity-upgrade-btn--unclickable":this.isBroken&&!this.isEnslaved}},tooltip(){if(this.isEnslaved)return"...eons stacked on eons stacked on eons stacked on eons stacked on ..."},text(){return this.isEnslaved?"FEEL ETERNITY":this.isBroken?"INFINITY IS BROKEN":"BREAK INFINITY"}},methods:{update(){this.isBroken=player.break||ue.mendingUnlocked(),this.isUnlocked=Autobuyer.bigCrunch.hasMaxedInterval||ue.mendingUnlocked(),this.isEnslaved=Enslaved.isRunning},clicked(){this.isEnslaved?Enslaved.feelEternity():!this.isBroken&&this.isUnlocked&&Modal.breakInfinity.show()}}},mR=hR;var pR=(0,X.Z)(mR,uR,dR,!1,null,"07a8a594",null);const yR=pR.exports;var fR=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{class:e.classObject,on:{mouseenter:function(t){e.showingCharged=e.canBeCharged},mouseleave:function(t){e.showingCharged=!1},click:function(t){return e.upgrade.purchase()}}},[i("span",{class:{"o-pelle-disabled":e.isUseless}},[i("DescriptionDisplay",{attrs:{config:e.config}}),e.showWorstChallenge?i("span",[i("br"),e._v(" "+e._s(e.worstChallengeString)+" ")]):e._e(),e.isDisabled?e._e():i("EffectDisplay",{attrs:{br:"",config:e.config}}),!e.isDisabled&&e.isImprovedByTS31?[i("br"),e._v(" After TS31: "+e._s(e.formatX(e.ts31Effect,2,2))+" ")]:e._e()],2),e.isBought?e._e():i("CostDisplay",{attrs:{br:"",config:e.config,name:"Infinity Point"}}),e._t("default")],2)},gR=[];const vR={name:"InfinityUpgradeButton",components:{DescriptionDisplay:ND,EffectDisplay:tw,CostDisplay:ID},props:{upgrade:{type:Object,required:!0}},data(){return{showWorstChallenge:!1,worstChallengeString:"",isUseless:!1,canBeBought:!1,chargePossible:!1,canBeCharged:!1,isBought:!1,isCharged:!1,isDisabled:!1,showingCharged:!1,hasTS31:!1,ts31Effect:new Decimal(0)}},computed:{isBasedOnInfinities(){return/(18|27|36|45)Mult/.test(this.upgrade.id)||"infinitiedMult"===this.upgrade.id},shiftDown(){return ui.view.shiftDown},showChargedEffect(){return this.chargePossible&&(this.isCharged||this.showingCharged||this.shiftDown)},config(){const e=this.upgrade.config;return this.showChargedEffect?e.charged:e},classObject(){return{"o-infinity-upgrade-btn":!0,"o-infinity-upgrade-btn--bought":!this.isUseless&&this.isBought,"o-infinity-upgrade-btn--available":!this.isUseless&&!this.isBought&&this.canBeBought,"o-infinity-upgrade-btn--unavailable":!this.isUseless&&!this.isBought&&!this.canBeBought,"o-infinity-upgrade-btn--useless":this.isUseless,"o-pelle-disabled":this.isUseless,"o-infinity-upgrade-btn--chargeable":!this.isCharged&&this.chargePossible&&(this.showingCharged||this.shiftDown),"o-infinity-upgrade-btn--charged":this.isCharged,"o-pelle-disabled-pointer":this.isUseless}},isImprovedByTS31(){return this.hasTS31&&this.isBasedOnInfinities&&!this.showChargedEffect}},methods:{update(){const e=this.upgrade;if(this.isBought=e.isBought||e.isCapped,this.chargePossible=Ra.unlocks.chargedInfinityUpgrades.canBeApplied&&e.hasChargeEffect&&!Pelle.isDoomed,this.canBeBought=e.canBeBought,this.canBeCharged=e.canCharge,this.isCharged=e.isCharged,this.isDisabled=e.config.isDisabled&&e.config.isDisabled(e.config.effect()),this.isUseless=Pelle.uselessInfinityUpgrades.includes(e.id)&&Pelle.isDoomed,this.hasTS31=TimeStudy(31).canBeApplied,!this.isDisabled&&this.isImprovedByTS31&&(this.ts31Effect=Decimal.pow(e.config.effect(),4)),"challengeMult"!==e.id)return;this.showWorstChallenge=e.effectValue!==e.cap&&player.challenge.normal.bestTimes.sumD().lt(Number.MAX_VALUE);const t=GameCache.worstChallengeTime.value,i=2+player.challenge.normal.bestTimes.indexOf(t);this.worstChallengeString=`(Challenge ${i}: ${timeDisplayShort(t)})`}}},bR=vR;var ER=(0,X.Z)(bR,fR,gR,!1,null,"44d40775",null);const TR=ER.exports,wR={name:"BreakInfinityTab",components:{PrimaryButton:Vs,BreakInfinityButton:yR,InfinityUpgradeButton:TR},data(){return{isUseless:!1,isUnlocked:!1,chargeUnlocked:!1,totalCharges:0,chargesUsed:0,disCharge:!1}},computed:{grid(){return[[BreakInfinityUpgrade.totalAMMult,BreakInfinityUpgrade.currentAMMult,BreakInfinityUpgrade.galaxyBoost],[BreakInfinityUpgrade.infinitiedMult,BreakInfinityUpgrade.achievementMult,BreakInfinityUpgrade.slowestChallengeMult],[BreakInfinityUpgrade.infinitiedGen,BreakInfinityUpgrade.autobuyMaxDimboosts,BreakInfinityUpgrade.autobuyerSpeed],[BreakInfinityUpgrade.tickspeedCostMult,BreakInfinityUpgrade.dimCostMult,BreakInfinityUpgrade.ipGen]]},disChargeClassObject(){return{"o-primary-btn--subtab-option":!0,"o-primary-btn--charged-respec-active":this.disCharge}}},watch:{disCharge(e){player.celestials.ra.breakDischarge=e}},methods:{update(){this.isUseless=Pelle.isDoomed,this.isUnlocked=Autobuyer.bigCrunch.hasMaxedInterval||ue.mendingUnlocked(),this.chargeUnlocked=Ra.unlocks.chargedBreakInfinityUpgrades.canBeApplied&&!Pelle.isDoomed,this.totalCharges=Ra.totalBreakCharges,this.chargesUsed=Ra.totalBreakCharges-Ra.breakChargesLeft,this.disCharge=player.celestials.ra.breakDischarge},btnClassObject(e){const t={"l-infinity-upgrade-grid__cell":!0,"o-infinity-upgrade-btn--multiplier":3===e};return t[`o-infinity-upgrade-btn--color-${e}`]=!0,t},timeDisplayShort(e){return timeDisplayShort(e)}}},kR=wR;var CR=(0,X.Z)(kR,lR,cR,!1,null,"2dd1569f",null);const AR=CR.exports;var _R=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("svg",{ref:"celestialNavigationSVG",staticClass:"c-wide-canvas-element l-celestial-navigation"},[i("defs",[i("linearGradient",{attrs:{id:"grad1",x1:"0%",y1:"0%",x2:"100%",y2:"0%"}},[i("stop",{attrs:{offset:"0%","stop-color":"#ffff00","stop-opacity":"1"}}),i("stop",{attrs:{offset:"100%","stop-color":"#ff0000","stop-opacity":"1"}})],1),i("linearGradient",{attrs:{id:"incompleteFade",x1:"0",x2:"8",gradientUnits:"userSpaceOnUse"}},[i("stop",{attrs:{offset:"0","stop-color":"#888","stop-opacity":"0"}}),i("stop",{attrs:{offset:"8","stop-color":"#888","stop-opacity":"1"}})],1),i("linearGradient",{attrs:{id:"fadeGrad",y2:"0",x2:"1"}},[i("stop",{attrs:{offset:"0.5","stop-color":"white","stop-opacity":"0"}}),i("stop",{attrs:{offset:"1","stop-color":"white","stop-opacity":".5"}})],1),i("linearGradient",{attrs:{id:"gradTeresaEffarig",y2:"0",x2:"1",gradientUnits:"userSpaceOnUse"}},[i("stop",{attrs:{offset:"0","stop-color":"#5151ec"}}),i("stop",{attrs:{offset:"1","stop-color":"#d13737"}})],1),i("linearGradient",{attrs:{id:"gradEffarigEnslaved",y2:"0",x2:"1",gradientUnits:"userSpaceOnUse"}},[i("stop",{attrs:{offset:"0","stop-color":"#d13737"}}),i("stop",{attrs:{offset:"1","stop-color":"#ffa337"}})],1),i("linearGradient",{attrs:{id:"gradEnslavedV",y2:"0",x2:"1",gradientUnits:"userSpaceOnUse"}},[i("stop",{attrs:{offset:"0","stop-color":"#ffa337"}}),i("stop",{attrs:{offset:"1","stop-color":"#ffe066"}})],1),i("linearGradient",{attrs:{id:"gradRaTeresa",y2:"0",x2:"1",gradientUnits:"userSpaceOnUse"}},[i("stop",{attrs:{offset:"0","stop-color":"#9063de"}}),i("stop",{attrs:{offset:"1","stop-color":"#5151ec"}})],1),i("linearGradient",{attrs:{id:"gradRaEffarig",y2:"0",x2:"1",gradientUnits:"userSpaceOnUse"}},[i("stop",{attrs:{offset:"0","stop-color":"#9063de"}}),i("stop",{attrs:{offset:"1","stop-color":"#d13737"}})],1),i("linearGradient",{attrs:{id:"gradRaEnslaved",y2:"0",x2:"1",gradientUnits:"userSpaceOnUse"}},[i("stop",{attrs:{offset:"0","stop-color":"#9063de"}}),i("stop",{attrs:{offset:"1","stop-color":"#ffa337"}})],1),i("linearGradient",{attrs:{id:"gradRaV",y2:"0",x2:"1",gradientUnits:"userSpaceOnUse"}},[i("stop",{attrs:{offset:"0","stop-color":"#9063de"}}),i("stop",{attrs:{offset:"1","stop-color":"#ffe066"}})],1),i("linearGradient",{attrs:{id:"gradRaLaitela",y2:"0",x2:"1",gradientUnits:"userSpaceOnUse"}},[i("stop",{attrs:{offset:"0","stop-color":"#9063de"}}),i("stop",{attrs:{offset:"1","stop-color":"white"}})],1),i("linearGradient",{attrs:{id:"gradLaitelaPelle",y2:"0",x2:"1",gradientUnits:"userSpaceOnUse"}},[i("stop",{attrs:{offset:"0","stop-color":"white"}}),i("stop",{attrs:{offset:"1","stop-color":"crimson"}})],1),i("mask",{attrs:{id:"fade",maskContentUnits:"objectBoundingBox"}},[i("rect",{attrs:{width:"1",height:"1",fill:"url(#fadeGrad)"}})]),i("filter",{attrs:{id:"completeGlow",x:"-100%",y:"-100%",width:"300%",height:"300%"}},[i("feGaussianBlur",{attrs:{in:"SourceGraphic",result:"blurred",stdDeviation:"2"}}),i("feMerge",[i("feMergeNode",{attrs:{in:"blurred"}}),i("feMergeNode",{attrs:{in:"SourceGraphic"}})],1)],1),i("filter",{attrs:{id:"backgroundGlow",x:"-100%",y:"-100%",width:"300%",height:"300%"}},[i("feGaussianBlur",{attrs:{in:"SourceGraphic",result:"blurred",stdDeviation:"4"}}),i("feMerge",[i("feMergeNode",{attrs:{in:"blurred"}}),i("feMergeNode",{attrs:{in:"SourceGraphic"}})],1)],1)],1),i("image",{attrs:{x:"-250",y:"-350",height:"1503",width:"1503",href:"images/celestial-navigation-bg.webp"}}),e._l(e.drawOrder,(function(t,a){return i("g",{key:a,attrs:{visibility:e.nodeVisibility(t)}},[i(t.is,e._b({tag:"component",attrs:{complete:e.nodeState[t.nodeId].complete}},"component",t.config,!1))],1)}))],2)])},SR=[],DR=i(4260),RR=i.n(DR),MR=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("path",{attrs:{transform:e.ringBackgroundTransform,d:e.ringBackgroundPath,fill:"rgba(0,0,0,0.75)",stroke:"none",filter:e.ringBackgroundFilter}})},IR=[];function xR(e){if(!e.gapDeg){const t=e.rMinor?`m 0.2 ${e.rMajor-e.rMinor}\na ${e.rMinor} ${e.rMinor} 0 1 1 -0.2 0\nz`:"";return`M -0.1, ${-e.rMajor}\na ${e.rMajor} ${e.rMajor} 0 1 0 0.2 0\nz\n${t}`}const t=Math.PI/180,i=void 0===e.gapAngleDeg?e.gapDeg/2:e.gapAngleDeg,a=t*(e.gapCenterDeg+e.gapDeg/2),n=Math.cos(a),s=Math.sin(a),r=t*(e.gapCenterDeg-e.gapDeg/2),o=Math.cos(r),l=Math.sin(r),c=e.rMajor/e.rMinor*Math.sin(t*(e.gapDeg/2-i)),u=Math.asin(c)+t*i,d=t*e.gapCenterDeg+u,h=Math.cos(d),m=Math.sin(d),p=t*e.gapCenterDeg-u,y=Math.cos(p),f=Math.sin(p),g=e.gapDeg<=180?1:0;return`M ${n*e.rMajor-.001*s} ${s*e.rMajor+.001*n}\nA ${e.rMajor} ${e.rMajor} 0 ${g} 1 ${o*e.rMajor+.001*l} ${l*e.rMajor-.001*o}\nL ${y*e.rMinor+.001*f} ${f*e.rMinor-.001*y}\nA ${e.rMinor} ${e.rMinor} 0 ${g} 0 ${h*e.rMinor-.001*m} ${m*e.rMinor+.001*h}\nz`}const PR={name:"NodeBackground",props:{position:{type:Object,required:!0},ring:{type:Object,required:!0},isStacked:{type:Boolean,required:!1,default:!1}},computed:{ringBackgroundTransform(){return this.position.asTranslate()},ringBackgroundPath(){return xR(this.ring)},ringBackgroundFilter(){return this.isStacked?"":"url(#backgroundGlow)"}}},GR=PR;var UR=(0,X.Z)(GR,MR,IR,!1,null,"4a7519ae",null);const BR=UR.exports;var NR=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("g",e._g({staticClass:"o-celestial-nav__hoverable",class:e.nodeClass,attrs:{transform:e.baseTransform}},e.clickAction?{click:e.clickAction}:{}),[i("path",{staticClass:"o-celestial-nav__node-overlay",attrs:{d:e.pathData}}),e.hasLegend?i("g",{staticClass:"tooltiptext"},[i("polyline",{staticClass:"o-celestial-nav__legend-arrow",attrs:{points:e.legendArrowPointString}}),i("path",{staticClass:"o-celestial-nav__legend-outline",attrs:{d:e.pathData}}),i("g",{attrs:{transform:e.legendTransform}},[i("text",{staticClass:"o-celestial-nav__legend-text",attrs:{"text-anchor":e.legendTextAnchor,"dominant-baseline":"middle","font-size":e.LEGEND_FONT_SIZE}},e._l(e.legendLines,(function(t,a){return i("tspan",{key:a,attrs:{x:"0",y:e.legendLineY(a)}},[e._v(" "+e._s(t)+" ")])})),0)])]):e._e()])},OR=[];const LR={name:"NodeOverlay",props:{complete:{type:Number,required:!0},position:{type:Object,required:!0},legend:{type:Object,required:!1,default:void 0},ring:{type:Object,required:!0},fill:{type:String,required:!1,default:void 0},alwaysShowLegend:{type:Boolean,required:!1,default:!1},forceLegend:{type:Function,required:!1,default:void 0},clickAction:{type:Function,required:!1,default:void 0}},data(){return{legendLines:[],hoverOverride:!1}},computed:{LEGEND_FONT_SIZE:()=>16,baseTransform(){return this.position.asTranslate()},pathData(){return xR(this.ring)},hasLegend(){return Boolean(this.legend)&&(!this.legend.hideWhenCompleted||this.complete<1)},legendArrowPoints(){const e=Vector.unitFromDegrees(this.legend.angle),t=[e.times(this.ring.rMajor+2)];return t.push(t[0].plus(e.times(this.legend.diagonal))),t.push(t[1].plus(Vector.horiz(this.legend.horizontal*Math.sign(e.x)))),t},legendArrowPointString(){return this.legendArrowPoints.join(" ")},legendTransform(){const e=this.legendArrowPoints,t=Math.sign(e[2].x-e[0].x);return e[2].plus(Vector.horiz(4*t)).asTranslate()},legendTextAnchor(){const e=(this.legend.angle+360)%360;return e>90&&e<270?"end":"start"},nodeClass(){return{"o-celestial-nav__force-hover":this.hoverOverride,"o-celestial-nav__clickable":void 0!==this.clickAction}}},methods:{update(){this.legendLines=this.getLines(),this.hoverOverride=this.alwaysShowLegend||this.forceLegend&&this.forceLegend()},legendLineY(e){const t=Math.round(1.25*this.LEGEND_FONT_SIZE/2),i=this.legendLines.length;return(2*e-(i-1))*t},getLines(){if(!this.legend)return null;const e="function"===typeof this.legend.text?this.legend.text(this.complete):this.legend.text;return"string"===typeof e?[e]:e}}},FR=LR;var $R=(0,X.Z)(FR,NR,OR,!1,null,"689b5224",null);const HR=$R.exports;var qR=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("g",{attrs:{transform:e.baseTransform}},[i("path",{class:e.ringClass,attrs:{d:e.pathData,stroke:"none",fill:e.fill,filter:e.ringFilter}}),e.symbol?i("text",{staticClass:"o-celestial-nav__symbol o-no-mouse",attrs:{fill:"#000","dominant-baseline":"middle","font-size":e.symbolFontSize,dy:e.symbolOffset}},[e._v(" "+e._s(e.symbol)+" ")]):e._e()])},VR=[];const YR={name:"NodeRing",props:{complete:{type:Number,required:!0},position:{type:Object,required:!0},ring:{type:Object,required:!0},symbol:{type:String,required:!1,default:""},symbolScale:{type:Number,required:!1,default:1.4},symbolOffset:{type:String,required:!1,default:"0"},completeClass:{type:String,required:!1,default:void 0},incompleteClass:{type:String,required:!1,default:void 0},fill:{type:String,required:!1,default:void 0},isStacked:{type:Boolean,required:!1,default:!1}},computed:{baseTransform(){return this.position.asTranslate()},pathData(){return xR(this.ring)},ringClass(){return this.complete>=1?this.completeClass:this.incompleteClass},symbolFontSize(){return this.ring.rMajor*this.symbolScale},ringFilter(){return this.complete>=1&&!this.isStacked?"url(#completeGlow)":""}}},WR=YR;var jR=(0,X.Z)(WR,qR,VR,!1,null,"10806dde",null);const XR=jR.exports;var zR=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("g",[e.noBG?e._e():i("g",{attrs:{transform:e.incompleteTransform}},[i("path",{attrs:{d:e.incompleteFadePath,fill:"url(#incompleteFade)"}}),e.hasIncompleteSolidPath?i("path",{attrs:{d:e.incompleteSolidPath,fill:"#888"}}):e._e()]),i("g",{attrs:{filter:e.filter}},[i("path",{style:{opacity:e.opacity},attrs:{transform:e.completeTransform,fill:e.fill,stroke:"none",d:e.completePath}})])])},KR=[];const ZR={name:"ProgressConnector",props:{complete:{type:Number,required:!0},completeWidth:{type:Number,required:!1,default:8},incompleteWidth:{type:Number,required:!1,default:6},noBG:{type:Boolean,required:!1,default:!1},opacity:{type:Number,required:!1,default:1},fill:{type:String,required:!1,default:"#5151ec"},filterName:{type:String,required:!1,default:"completeGlow"},path:{type:Object,required:!0},pathStart:{type:Number,required:!0},pathEnd:{type:Number,required:!0},pathPadStart:{type:Number,required:!1,default:0},pathPadEnd:{type:Number,required:!1,default:0}},computed:{unpaddedSpan(){return this.pathEnd-this.pathPadEnd-(this.pathStart+this.pathPadStart)},incompleteStart(){return this.complete>=1?this.pathEnd:this.pathStart+this.pathPadStart+this.unpaddedSpan*this.complete},incompleteStartShape(){return this.shapeAt(this.incompleteStart)},completeStartShape(){return this.shapeAt(this.pathStart)},incompleteTransform(){const e=this.incompleteStartShape;return`${e.position.asTranslate()} ${e.direction.asRotate()}`},pathEndShape(){return this.shapeAt(this.pathEnd)},totalPathOffsetPx(){return this.pathEndShape.position.minus(this.completeStartShape.position)},completeTransform(){const e=this.completeStartShape,t=this.totalPathOffsetPx.length;return`${e.position.asTranslate()} ${e.direction.asRotate()} scale(${t})`},incompleteFadeEnd(){const e=this.incompleteStartShape,t=12/e.derivative.length;return this.pathEnd>this.pathStart?Math.min(this.incompleteStart+t,this.pathEnd):Math.max(this.incompleteStart-t,this.pathEnd)},incompleteFadePath(){return this.generateIncompletePath(this.incompleteStart,this.incompleteFadeEnd)},incompleteSolidPath(){return this.generateIncompletePath(this.incompleteFadeEnd-.001*(this.pathEnd-this.incompleteFadeEnd),this.pathEnd)},completePath(){const e=this.completeStartShape,t=1/this.totalPathOffsetPx.length,i=AffineTransform.translation(e.position.negative).rotated(-e.direction.angle).scaled(t),a=this.pathStart,n=this.incompleteStart,s=this.completeWidth,r=this.getOffsetPath(-s/2,a,n).transformedBy(i),o=this.getOffsetPath(s/2,n,a).transformedBy(i),l=this.incompleteStartShape.direction.transformedBy(i.withoutTranslation),c=r.path[r.path.length-1],u=o.path[0],d=c.position(1).plus(l.times(s/2)),h=u.position(0).plus(l.times(s/2)),m=`C ${d.x} ${d.y} ${h.x} ${h.y} ${u.p0.x} ${u.p0.y}\n`;return r.toSVG("M")+m+o.toSVG("L")},hasIncompleteSolidPath(){return this.incompleteFadeEnd!==this.pathEnd},filter(){return`url(#${this.filterName})`}},methods:{generateIncompletePath(e,t){const i=this.getOffsetPath(-this.incompleteWidth/2,e,t),a=this.getOffsetPath(this.incompleteWidth/2,t,e),n=this.incompleteStartShape,s=AffineTransform.translation(n.position.negative).rotated(-n.direction.angle);return i.transformedBy(s).toSVG("M")+a.transformedBy(s).toSVG("L")},getOffsetPath(e,t,i){if(this.path instanceof LinearPath)return new PiecewisePath([this.path.createOffsetLine(e,t,i)]);const a=new OffsetCurve(this.path,e);return PiecewisePath.cubicBezierFitToCurveSection(a,t,i)},shapeAt(e){const t=this.path.shapeAt(e);return this.pathStart>this.pathEnd&&(t.direction=t.direction.negative,t.derivative=t.derivative.negative),t}}},QR=ZR;var JR=(0,X.Z)(QR,zR,KR,!1,null,"027e7312",null);const eM=JR.exports,tM={name:"CelestialNavigationTab",components:{NodeRing:XR,NodeBackground:BR,NodeOverlay:HR,ProgressConnector:eM},data:()=>({nodeState:null}),computed:{db(){return(0,B.Z)((0,B.Z)({},GameDatabase.celestials.navigation),GameDatabase.celestials.navSigils)},drawOrder(){const e=this.db,t=[];for(const i of Object.keys(e)){const a=e[i];if(a.connector instanceof Array)for(const e of a.connector)t.push({nodeId:i,is:eM,config:e,drawOrder:e.drawOrder||et.CONNECTORS});else a.connector&&t.push({nodeId:i,is:eM,config:a.connector,drawOrder:a.connector.drawOrder||et.CONNECTORS});a.node&&(t.push({nodeId:i,is:BR,config:a.node,drawOrder:a.node.bgDrawOrder||et.NODE_BG}),t.push({nodeId:i,is:XR,config:a.node,drawOrder:a.node.drawOrder||et.NODES}),t.push({nodeId:i,is:HR,config:a.node,drawOrder:a.node.overlayDrawOrder||et.NODE_OVERLAYS})),t.sort(((e,t)=>e.drawOrder-t.drawOrder))}return t}},created(){this.nodeState=Object.keys(this.db).mapToObject((e=>e),(()=>({visible:!1,complete:0})))},mounted(){const e=function(e,t){const i=this.getSizes(),a=i.width-(i.viewBox.x+i.viewBox.width)*i.realZoom,n=-i.viewBox.x*i.realZoom,s=i.height-(i.viewBox.y+i.viewBox.height)*i.realZoom,r=-i.viewBox.y*i.realZoom;return{x:Math.max(a,Math.min(n,t.x)),y:Math.max(s,Math.min(r,t.y))}};this.panZoom=RR()(this.$refs.celestialNavigationSVG,{controlIconsEnabled:!0,dblClickZoomEnabled:!1,center:!1,fit:!1,zoomScaleSensitivity:.3,minZoom:.64,maxZoom:1.5,beforePan:e}),iM.pan&&this.panZoom.pan(iM.pan),iM.zoom&&this.panZoom.zoom(iM.zoom)},beforeDestroy(){this.panZoom&&(iM.zoom=this.panZoom.getZoom(),iM.pan=this.panZoom.getPan(),this.panZoom.destroy(),delete this.panZoom)},methods:{update(){for(const e of Object.keys(this.db))this.nodeState&&(this.nodeState[e].visible=this.db[e].visible(),this.nodeState[e].complete=this.db[e].complete())},vec(e,t){return new Vector(e,t)},nodeVisibility(e){return this.nodeState[e.nodeId].visible?"visible":"hidden"}}};const iM={pan:{x:125,y:125},zoom:.75},aM=tM;var nM=(0,X.Z)(aM,_R,SR,!1,null,"8ce190f0",null);const sM=nM.exports;var rM=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-challenge-records-tab c-stats-tab"},[i("ChallengeRecordsList",{attrs:{start:2,times:e.normalChallenges,name:"Normal Challenge"}}),e.infinityChallengesUnlocked?i("ChallengeRecordsList",{staticClass:"l-challenge-records-tab__infinity_challenges",attrs:{start:1,times:e.infinityChallenges,name:"Infinity Challenge"}}):e._e()],1)},oM=[],lM=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("br"),e._l(e.times,(function(t,a){return i("div",{key:a},[i("span",[e._v(e._s(e.name)+" "+e._s(e.start+a)+" "+e._s(e.completionString(t)))])])})),i("br"),e.completedAllChallenges?i("div",[e._v(" Sum of "+e._s(e.name)+" record times: "+e._s(e.timeDisplayShort(e.timeSum))+" ")]):i("div",[e._v(" You have not completed all "+e._s(e.name)+"s yet. ")])],2)},cM=[];const uM={name:"ChallengeRecordsList",props:{name:{type:String,required:!0},start:{type:Number,required:!0},times:{type:Array,required:!0}},computed:{timeSum(){let e=new Decimal(0);for(let t=0;t1?i("span",[i("br"),e._v(" Glyph Sacrifice gain is also being raised to "+e._s(e.formatPow(e.shardPower,0,2))+". ")]):e._e()]),i("div",{staticClass:"c-effarig-relic-description"},[e._v(" You will gain "+e._s(e.quantify("Relic Shard",e.shardsGained,2))+" next Reality ("+e._s(e.format(e.currentShardsRate,2))+"/min). "),0!==e.amplification?i("span",[i("br"),e._v(" Due to amplification of your current Reality, "),i("br"),e._v(" you will actually gain a total of "+e._s(e.quantify("Relic Shard",e.amplifiedShards,2))+" ("+e._s(e.format(e.amplifiedShardsRate,2))+"/min). ")]):e._e()]),e._m(0),e._l(e.shopUnlocks,(function(e,t){return i("EffarigUnlockButton",{key:t,attrs:{unlock:e}})})),e.runUnlocked?e._e():i("EffarigUnlockButton",{attrs:{unlock:e.runUnlock}}),e.vIsFlipped?i("button",{staticClass:"c-effarig-shop-button c-effarig-shop-button--available",on:{click:e.createCursedGlyph}},[e._v(" Get a Cursed Glyph... ")]):e._e()],2),e.runUnlocked?i("div",{staticClass:"l-effarig-run"},[i("div",{staticClass:"c-effarig-run-description"},[i("span",{class:{"o-pelle-disabled":e.isDoomed}},[e._v(" Enter Effarig's Reality. ")])]),i("div",{class:e.runButtonOuterClass,on:{click:e.startRun}},[i("div",{class:e.runButtonInnerClass,attrs:{"button-symbol":e.symbol}},[e._v(" "+e._s(e.symbol)+" ")])]),i("div",{staticClass:"c-effarig-run-description"},[e._v(" "+e._s(e.runDescription)+" ")]),e._l(e.runUnlocks,(function(e,t){return i("EffarigRunUnlockReward",{key:t,attrs:{unlock:e}})}))],2):e._e()])],1)},bM=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-effarig-relic-description"},[i("br"),e._v(" More Eternity Points slightly increases Relic Shards "),i("br"),e._v(" gained. More distinct Glyph effects significantly "),i("br"),e._v(" increases Relic Shards gained. ")])}],EM=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isShown?i("button",{staticClass:"c-celestial-quote-history--button",style:{"--scoped-cel-color":e.color},on:{click:e.show}},[e._v(" "+e._s(e.possessiveForm)+" Quotes ")]):e._e()},TM=[];const wM={name:"CelestialQuoteHistory",props:{celestial:{type:String,required:!0}},data(){return{isShown:!1}},computed:{color(){return"laitela"===this.celestial?"var(--color-laitela--accent)":`var(--color-${this.celestial}--base)`},possessiveForm(){return Celestials[this.celestial].possessiveName}},methods:{update(){this.isShown=Celestials[this.celestial].quotes.all.some((e=>e.isUnlocked))},show(){Quote.showHistory(Celestials[this.celestial].quotes.all)}}},kM=wM;var CM=(0,X.Z)(kM,EM,TM,!1,null,null,null);const AM=CM.exports;var _M=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-effarig-tab__reward"},[i("div",{staticClass:"c-effarig-tab__reward-label"},[e._v(" "+e._s(e.unlock.config.label)+": ")]),e.isUnlocked?i("div",{staticClass:"l-effarig-tab__reward-descriptions"},e._l(e.descriptionLines,(function(t,a){return i("div",{key:a+"-effarig-reward-description",staticClass:"c-effarig-tab__reward-description"},[i("span",{staticClass:"c-effarig-tab__reward-symbol"},[e._v(" "+e._s(e.symbol)+" ")]),i("span",{class:{"o-pelle-disabled":e.isDoomed}},[e._v(" "+e._s(t)+" ")])])})),0):i("span",{staticClass:"c-effarig-tab__reward-symbol"},[e._v("?")])])},SM=[];const DM={name:"EffarigRunUnlockReward",props:{unlock:{type:Object,required:!0}},data(){return{isUnlocked:!1}},computed:{descriptionLines(){return this.unlock.config.description.split("\n").map((e=>e.trim()))},symbol:()=>GLYPH_SYMBOLS.effarig,isDoomed:()=>Pelle.isDoomed},methods:{update(){this.isUnlocked=this.unlock.isUnlocked}}},RM=DM;var MM=(0,X.Z)(RM,_M,SM,!1,null,null,null);const IM=MM.exports;var xM=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{class:e.classObject,on:{click:e.purchase}},[i("DescriptionDisplay",{attrs:{config:e.config}}),e.isBought?i("div",[e._v(" (Unlocked) ")]):i("CostDisplay",{attrs:{config:e.config,name:"Relic Shard",label:""}})],1)},PM=[];const GM={name:"EffarigUnlockButton",components:{DescriptionDisplay:ND,CostDisplay:ID},props:{unlock:{type:Object,required:!0}},data(){return{isBought:!1,isAvailable:!1}},computed:{config(){return this.unlock.config},classObject(){return{"c-effarig-shop-button":!0,"c-effarig-shop-button--bought":this.isBought,"c-effarig-shop-button--available":this.isAvailable&&!this.isBought}}},methods:{update(){this.isBought=this.unlock.isUnlocked,this.isAvailable=Currency.relicShards.gte(this.unlock.cost)},purchase(){this.unlock.purchase()}}},UM=GM;var BM=(0,X.Z)(UM,xM,PM,!1,null,null,null);const NM=BM.exports,OM={name:"EffarigTab",components:{EffarigUnlockButton:NM,EffarigRunUnlockReward:IM,CelestialQuoteHistory:AM},data(){return{relicShards:new Decimal(0),shardRarityBoost:0,shardPower:0,shardsGained:new Decimal(0),currentShardsRate:new Decimal(0),amplification:0,amplifiedShards:new Decimal(0),amplifiedShardsRate:new Decimal(0),runUnlocked:!1,quote:"",isRunning:!1,vIsFlipped:!1,relicShardRarityAlwaysMax:!1,mendVisible:!1}},computed:{shopUnlocks:()=>[EffarigUnlock.adjuster,EffarigUnlock.glyphFilter,EffarigUnlock.setSaves],runUnlock:()=>EffarigUnlock.run,runUnlocks:()=>UZ.unlocks.effarigMendUnlock.isUnlocked?[EffarigUnlock.infinity,EffarigUnlock.eternity,EffarigUnlock.reality,EffarigUnlock.mend]:[EffarigUnlock.infinity,EffarigUnlock.eternity,EffarigUnlock.reality],symbol:()=>GLYPH_SYMBOLS.effarig,runButtonOuterClass(){return{"l-effarig-run-button":!0,"c-effarig-run-button":!0,"c-effarig-run-button--running":this.isRunning,"c-effarig-run-button--not-running":!this.isRunning,"c-celestial-run-button--clickable":!this.isDoomed,"o-pelle-disabled-pointer":this.isDoomed}},runButtonInnerClass(){return this.isRunning?"c-effarig-run-button__inner--running":"c-effarig-run-button__inner--not-running"},runDescription(){return`${GameDatabase.celestials.descriptions[1].effects()}\n\n ${GameDatabase.celestials.descriptions[1].description()}`},showShardsRate(){return this.currentShardsRate},isDoomed:()=>Pelle.isDoomed},watch:{isRunning(){this.$recompute("runDescription")}},methods:{update(){this.relicShards.copyFrom(Currency.relicShards.value),this.shardRarityBoost=Effarig.maxRarityBoost/100,this.shardPower=UZ.unlocks.maxGlyphRarityAndShardSacrificeBoost.effectOrDefault(1),this.shardsGained.copyFrom(Effarig.shardsGained),this.currentShardsRate=this.shardsGained.div(Time.thisRealityRealTime.totalMinutes),this.amplification=simulatedRealityCount(!1),this.amplifiedShards=this.shardsGained.times(1+this.amplification),this.amplifiedShardsRate=this.amplifiedShards.div(Time.thisRealityRealTime.totalMinutes),this.quote=Effarig.quote,this.runUnlocked=EffarigUnlock.run.isUnlocked,this.isRunning=Effarig.isRunning,this.vIsFlipped=V.isFlipped,this.relicShardRarityAlwaysMax=UZ.unlocks.extraGlyphChoicesAndRelicShardRarityAlwaysMax.canBeApplied,this.mendVisible=UZ.unlocks.effarigMendUnlock.isUnlocked},startRun(){this.isDoomed||Modal.celestials.show({name:"Effarig's",number:1})},createCursedGlyph(){Glyphs.giveCursedGlyph()}}},LM=OM;var FM=(0,X.Z)(LM,vM,bM,!1,null,"0883caed",null);const $M=FM.exports;var HM=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-enslaved-celestial-tab"},[i("CelestialQuoteHistory",{attrs:{celestial:"enslaved"}}),e.hasAutoRelease&&e.canAutoRelease?i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryToggleButton",{staticClass:"o-primary-btn--subtab-option",attrs:{label:"Pulse Black Hole:"},model:{value:e.autoRelease,callback:function(t){e.autoRelease=t},expression:"autoRelease"}})],1):e._e(),i("div",{staticClass:"l-enslaved-celestial-tab--inner"},[i("div",{staticClass:"l-enslaved-run-container"},[e.hasUnlock(e.unlocksInfo.RUN)?i("div",[i("div",{staticClass:"c-enslaved-run-button"},[i("div",{staticClass:"c-enslaved-run-button__title",class:e.doomedDisabledClass},[e._v(" "+e._s(e.realityTitle)+" ")]),e.completed?i("div",[i("b",[e._v("(Completed)")])]):e._e(),i("div",{class:e.runButtonClassObject,on:{click:e.startRun}},[i("div",{staticClass:"c-enslaved-run-button__icon__sigil"},[e._v(" "+e._s(e.enslavedSymbol)+" ")]),e._l(e.isRunning?25:0,(function(t){return i("div",{key:t,staticClass:"c-enslaved-run-button__icon__glitch",style:e.glitchStyle(t)})}))],2),e._l(e.runDescription,(function(t){return i("div",{key:t,staticClass:"c-enslaved-run-description-line"},[e._v(" "+e._s(t)+" ")])})),i("b",[e._v("Reward: Unlock Tesseracts, which let you increase Infinity Dimension caps (see Infinity Dimension tab)")])],2)]):e._e()]),i("div",{staticClass:"l-enslaved-upgrades-column"},[e.hintsUnlocked?i("PrimaryButton",{staticClass:"o-primary-btn",attrs:{onclick:"Modal.enslavedHints.show()"}},[e._v(" Examine the Reality more closely... ")]):e._e(),i("div",{staticClass:"l-enslaved-top-container"},[i("div",{staticClass:"l-enslaved-top-container__half"},[e._v(" While charging, game speed multipliers are "+e._s(e.hasAutoRelease?"decreased":"disabled")+", and the lost speed is converted into stored game time. Discharging the Black Hole allows you to skip forward in time. Stored game time is also used to unlock certain upgrades. "),i("button",{class:e.storeGameTimeClass,on:{click:e.toggleStoreBlackHole}},[i("div",{staticClass:"o-enslaved-stored-time",class:e.doomedDisabledClass},[e._v(" "+e._s(e.timeDisplayShort(e.storedBlackHole))+" ")]),i("div",[e._v(" "+e._s(e.isStoringBlackHole?"Charging Black Hole":"Charge Black Hole")+" ")])]),i("button",{class:e.dischargeClass,on:{click:e.useStored}},[i("span",[e._v("Discharge Black Hole")]),e.isRunning?i("p",[e._v(" "+e._s(e.timeDisplayShort(e.nerfedBlackHoleTime))+" in this Reality ")]):e._e()])]),i("div",{staticClass:"l-enslaved-top-container__half"},[e._v(" Storing real time completely halts all production, setting game speed to "+e._s(e.formatInt(0))+'. You can use stored real time to "amplify" a Reality, simulating repeated runs of it. Amplified Realities give all the rewards that normal Realities do. '),i("button",{class:[e.storeRealTimeClass,{"l-fixed-setting":e.hasReachedCurrentCap}],on:{click:e.toggleStoreReal}},[i("div",{staticClass:"o-enslaved-stored-time"},[e._v(" "+e._s(e.timeDisplayShort(e.storedReal))+" ")]),i("div",[e._v(" "+e._s(e.isStoringReal?"Storing real time":"Store real time")+" ")])]),i("button",{class:[e.mechanicButtonClass,{"o-enslaved-mechanic-button--storing-time":e.autoStoreReal&&e.offlineEnabled,"l-fixed-setting":!e.canChangeStoreRealTime||!e.offlineEnabled},e.doomedDisabledClass],on:{click:e.toggleAutoStoreReal}},[e._v(" "+e._s(e.realTimeButtonText)+" ")]),i("div",[e._v(" Efficiency: "+e._s(e.storedRealEfficiencyDesc)+" ")]),i("div",[e._v(" Maximum stored real time: "+e._s(e.storedRealCapDesc)+" ")])])]),i("BlackHoleChargingSliders"),i("br"),i("div",{staticClass:"l-enslaved-shop-container"},e._l(e.unlocksInfo,(function(t){return i("button",{key:t.id,staticClass:"o-enslaved-shop-button",class:e.unlockClassObject(t),on:{click:function(i){return e.buyUnlock(t)}}},[e._v(" "+e._s(t.description())+" "),e.hasUnlock(t)?e._e():i("div",[e._v(" Costs: "+e._s(e.timeDisplayShort(t.price))+" ")]),e.isStoringBlackHole&&!e.hasUnlock(t)&&e.timeUntilBuy(t.price).gt(0)?i("span",[e._v(" Time to obtain: "+e._s(e.timeDisplayShort(e.timeUntilBuy(t.price)))+" ")]):e._e()])})),0)],1)])],1)},qM=[];const VM={name:"EnslavedTab",components:{CelestialQuoteHistory:AM,PrimaryButton:Vs,PrimaryToggleButton:Sh,BlackHoleChargingSliders:cD},data:()=>({isStoringBlackHole:!1,isStoringReal:!1,autoStoreReal:!1,offlineEnabled:!1,hasAutoRelease:!1,isRunning:!1,completed:!1,storedBlackHole:new Decimal(0),storedReal:0,storedRealEffiency:0,storedRealCap:0,autoRelease:!1,autoReleaseSpeed:new Decimal(0),unlocks:[],buyableUnlocks:[],quote:"",currentSpeedUp:new Decimal(0),hintsUnlocked:!1,canModifyGameTimeStorage:!1,canChangeStoreTime:!1,canChangeStoreRealTime:!1,canDischarge:!1,canAutoRelease:!1,hasNoCharge:!0,hasReachedCurrentCap:!1}),computed:{storedRealEfficiencyDesc(){return formatPercents(this.storedRealEffiency)},storedRealCapDesc(){return timeDisplayShort(this.storedRealCap)},unlocksInfo(){return ENSLAVED_UNLOCKS},nerfedBlackHoleTime(){return Enslaved.storedTimeInsideEnslaved(this.storedBlackHole)},realityTitle(){return this.isRunning?"You are inside The Nameless Ones' Reality":"Start The Nameless Ones' Reality"},runButtonClassObject(){return{"c-enslaved-run-button__icon":!0,"c-enslaved-run-button__icon--running":this.isRunning,"c-celestial-run-button--clickable":!this.isDoomed,"o-pelle-disabled-pointer":this.isDoomed}},runDescription(){return GameDatabase.celestials.descriptions[2].effects().split("\n")},realTimeButtonText(){return this.offlineEnabled?this.autoStoreReal?"Offline time stored":"Offline time used for production":"Offline Progress is disabled"},enslavedSymbol:()=>Enslaved.symbol,isDoomed:()=>Pelle.isDoomed,storeGameTimeClass(){return{"o-enslaved-mechanic-button":!0,"o-enslaved-mechanic-button--clickable":this.canModifyGameTimeStorage,"o-enslaved-mechanic-button--storing-time":this.isStoringBlackHole,"l-fixed-setting":!this.canModifyGameTimeStorage,"o-pelle-disabled":this.isDoomed}},storeRealTimeClass(){return{"o-enslaved-mechanic-button":!0,"o-enslaved-mechanic-button--clickable":!this.isDoomed,"o-enslaved-mechanic-button--storing-time":this.isStoringReal,"l-fixed-setting":!this.canChangeStoreRealTime,"o-pelle-disabled":this.isDoomed}},dischargeClass(){return{"o-enslaved-mechanic-button":!0,"o-enslaved-mechanic-button--clickable":!this.isDoomed,"l-fixed-setting":!this.canDischarge||this.hasNoCharge,"o-pelle-disabled":this.isDoomed}},doomedDisabledClass(){return{"o-pelle-disabled":this.isDoomed}},mechanicButtonClass(){return{"o-enslaved-mechanic-button":!0,"o-enslaved-mechanic-button--clickable":!this.isDoomed}}},watch:{autoRelease(e){player.celestials.enslaved.isAutoReleasing=e}},methods:{update(){this.isStoringBlackHole=Enslaved.isStoringGameTime,this.storedBlackHole.copyFrom(player.celestials.enslaved.stored),this.isStoringReal=Enslaved.isStoringRealTime,this.autoStoreReal=player.celestials.enslaved.autoStoreReal,this.offlineEnabled=player.options.offlineProgress,this.hasAutoRelease=Ra.unlocks.autoPulseTime.canBeApplied,this.isRunning=Enslaved.isRunning,this.completed=Enslaved.isCompleted&&!this.isDoomed,this.storedReal=player.celestials.enslaved.storedReal,this.storedRealEffiency=Enslaved.storedRealTimeEfficiency,this.storedRealCap=Enslaved.storedRealTimeCap,this.unlocks=Array.from(player.celestials.enslaved.unlocks),this.buyableUnlocks=Object.values(ENSLAVED_UNLOCKS).map((e=>Enslaved.canBuy(e))),this.quote=Enslaved.quote,this.autoRelease=player.celestials.enslaved.isAutoReleasing,this.autoReleaseSpeed=Enslaved.isAutoReleasing?Enslaved.autoReleaseSpeed:new Decimal(0),this.currentSpeedUp=Enslaved.currentBlackHoleStoreAmountPerMs,this.hintsUnlocked=EnslavedProgress.hintsUnlocked.hasProgress,this.canModifyGameTimeStorage=Enslaved.canModifyGameTimeStorage,this.canChangeStoreTime=Enslaved.canModifyGameTimeStorage,this.canChangeStoreRealTime=Enslaved.canModifyRealTimeStorage,this.canDischarge=Enslaved.canRelease(!1),this.canAutoRelease=Enslaved.canRelease(!0),this.hasNoCharge=this.storedBlackHole.eq(0),this.hasReachedCurrentCap=this.storedReal===this.storedRealCap},toggleStoreBlackHole(){Enslaved.toggleStoreBlackHole()},toggleStoreReal(){Enslaved.toggleStoreReal()},toggleAutoStoreReal(){this.offlineEnabled&&Enslaved.toggleAutoStoreReal()},useStored(){Enslaved.useStoredTime(!1)},timeDisplayShort(e){return timeDisplayShort(e)},timeUntilBuy(e){return Decimal.max(e.sub(this.storedBlackHole).div(this.currentSpeedUp),0)},buyUnlock(e){Enslaved.buyUnlock(e)},startRun(){this.isDoomed||Modal.celestials.show({name:"The Nameless Ones'",number:2})},hasUnlock(e){return Enslaved.has(e)},canBuyUnlock(e){return this.buyableUnlocks[e.id]},unlockClassObject(e){return{"o-enslaved-shop-button--bought":this.hasUnlock(e),"o-enslaved-shop-button--available":this.canBuyUnlock(e)}},glitchStyle(e){const t=15/27,i=5,a=(e-13)*t+.85*(2*Math.random()-1),n=(2*Math.random()-1)*i,s=3*(Math.pow(Math.random(),1.5)+.25)*i;return{transform:`translate(${a}rem, ${n}rem)`,height:`${s}rem`}}}},YM=VM;var WM=(0,X.Z)(YM,HM,qM,!1,null,"53895748",null);const jM=WM.exports;var XM=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-challenges-tab"},[i("ChallengeTabHeader"),e.isAutoECVisible?i("div",[e._v(" Eternity Challenges are automatically completed sequentially, requiring all previous Eternity Challenges to be fully completed before any progress is made. ")]):e._e(),e.isAutoECVisible&&e.remainingECTiers>0?i("div",{staticClass:"c-challenges-tab__auto-ec-info l-challenges-tab__auto-ec-info"},[i("div",{staticClass:"l-challenges-tab__auto-ec-timers"},[e.remainingECTiers>0?i("span",[e._v(" Next Auto Eternity Challenge completion: "+e._s(e.nextECText)+" ")]):e._e(),i("span",[e._v(" All Auto Eternity Challenge completions: "+e._s(e.allECText)+" ")]),i("br")])]):e._e(),i("div",[e._v(" Complete Eternity Challenges again for a bigger reward, maximum of "+e._s(e.formatInt(5))+" times."),i("br"),e._v(" The rewards are applied permanently with no need to have the respective Eternity Challenge Time Study purchased. ")]),e.hasECR?e._e():i("div",[e._v(" When you respec out of an unlocked Eternity Challenge, you don't need to redo the secondary requirement"),i("br"),e._v(" in order to unlock it again until you complete it; only the Time Theorems are required. ")]),12!==e.unlockedCount?i("div",[e._v(" You have seen "+e._s(e.formatInt(e.unlockedCount))+" out of "+e._s(e.formatInt(12))+" Eternity Challenges. ")]):i("div",[e._v(" You have seen all "+e._s(e.formatInt(12))+" Eternity Challenges. ")]),i("ChallengeGrid",{attrs:{challenges:e.challenges,"is-challenge-visible":e.isChallengeVisible},scopedSlots:e._u([{key:"default",fn:function(e){var t=e.challenge;return[i("EternityChallengeBox",{attrs:{challenge:t}})]}}])})],1)},zM=[],KM=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-challenge-grid"},e._l(e.challenges,(function(t){return i("ChallengeGridCell",{key:t.id,attrs:{challenge:t,"is-challenge-visible":e.isChallengeVisible}},[e._t("default",null,{challenge:t})],2)})),1)},ZM=[],QM=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.isVisible,expression:"isVisible"}],staticClass:"l-challenge-grid__cell"},[e._t("default")],2)},JM=[];const eI={name:"ChallengeGridCell",props:{challenge:{type:Object,required:!0},isChallengeVisible:{type:Function,required:!0}},data(){return{isVisible:!1}},methods:{update(){this.isVisible=this.isChallengeVisible(this.challenge)}}},tI=eI;var iI=(0,X.Z)(tI,QM,JM,!1,null,"4d8a00e8",null);const aI=iI.exports,nI={name:"ChallengeGrid",components:{ChallengeGridCell:aI},props:{challenges:{type:Array,required:!0},isChallengeVisible:{type:Function,required:!1,default:()=>!0}}},sI=nI;var rI=(0,X.Z)(sI,KM,ZM,!1,null,"1cfb349c",null);const oI=rI.exports;var lI=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-challenges-tab__header"},[i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryToggleButton",{staticClass:"o-primary-btn--subtab-option",attrs:{label:"Automatically retry challenges:"},model:{value:e.retryChallenge,callback:function(t){e.retryChallenge=t},expression:"retryChallenge"}}),e.isShowAllVisible?i("PrimaryToggleButton",{staticClass:"o-primary-btn--subtab-option",attrs:{label:"Show all known challenges:"},model:{value:e.showAllChallenges,callback:function(t){e.showAllChallenges=t},expression:"showAllChallenges"}}):e._e(),e.isAutoECVisible?i("PrimaryToggleButton",{staticClass:"o-primary-btn--subtab-option",attrs:{label:"Auto Eternity Challenges:"},model:{value:e.autoEC,callback:function(t){e.autoEC=t},expression:"autoEC"}}):e._e(),e.isInChallenge?i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.restartChallenge}},[e._v(" Restart Challenge ")]):e._e(),e.isInChallenge?i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.exitChallenge}},[e._v(" Exit Challenge ")]):e._e()],1)])},cI=[];const uI={name:"ChallengeTabHeader",components:{PrimaryButton:Vs,PrimaryToggleButton:Sh},data(){return{retryChallenge:!1,isInChallenge:!1,isShowAllVisible:!1,isAutoECVisible:!1,showAllChallenges:!1,autoEC:!1}},watch:{retryChallenge(e){player.options.retryChallenge=e},autoEC(e){player.reality.autoEC=e},showAllChallenges(e){player.options.showAllChallenges=e}},methods:{update(){this.retryChallenge=player.options.retryChallenge,this.showAllChallenges=player.options.showAllChallenges,this.isInChallenge=Player.isInAnyChallenge,this.isShowAllVisible=PlayerProgress.eternityUnlocked(),this.isAutoECVisible=Perk.autocompleteEC1.canBeApplied,this.autoEC=player.reality.autoEC},restartChallenge(){const e=Player.anyChallenge;Player.isInAnyChallenge&&(e.exit(),e.start())},exitChallenge(){const e=Player.anyChallenge;Player.isInAnyChallenge&&e.exit()}}},dI=uI;var hI=(0,X.Z)(dI,lI,cI,!1,null,"3ae13d7d",null);const mI=hI.exports;var pI=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("EternityChallengeBoxWrapper",{attrs:{name:e.name,"is-unlocked":e.isUnlocked,"is-running":e.isRunning,"is-completed":e.isCompleted,"can-be-unlocked":e.canBeUnlocked,"completion-count":e.completions},on:{start:e.start},scopedSlots:e._u([{key:"top",fn:function(){return[i("DescriptionDisplay",{attrs:{config:e.config}})]},proxy:!0},{key:"bottom",fn:function(){return[i("div",{style:{visiblity:e.completions<5?"visible":"hidden"}},[i("div",[e._v(" Completed "+e._s(e.quantifyInt("time",e.completions))+" ")]),e._v(" "+e._s(e.goalDisplay)+" ")]),e.showGoalSpan?i("span",[e._v(" Goal Span: "+e._s(e.firstGoal)+" IP - "+e._s(e.lastGoal)+" IP ")]):e._e(),i("span",[e._v(" Reward: "),i("DescriptionDisplay",{attrs:{config:e.config.reward,length:55,name:"c-challenge-box__reward-description"}})],1),i("span",[e.completions>0?i("EffectDisplay",{attrs:{config:e.currentRewardConfig}}):e._e(),e.completions>0&&e.completions<5?i("span",[e._v("|")]):e._e(),e.completions<5?i("EffectDisplay",{attrs:{config:e.nextRewardConfig,label:"Next","ignore-capped":!0}}):e._e()],1),e.altRewards?i("span",{staticClass:"c-vreward"},[e._v(" Ra V 30 Empowered Reward: "),i("DescriptionDisplay",{attrs:{config:e.config.vReward,length:55,name:"c-challenge-box__reward-description"}})],1):e._e(),i("span",[e.completions>0?i("EffectDisplay",{attrs:{config:e.currentVRewardConfig}}):e._e(),e.completions>0&&e.completions<5?i("span",[e._v("|")]):e._e(),e.completions<5?i("EffectDisplay",{attrs:{config:e.nextVRewardConfig,label:"Next","ignore-capped":!0}}):e._e()],1)]},proxy:!0}])})},yI=[],fI=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-challenge-box l-challenge-box c-challenge-box--eternity"},[i("HintText",{staticClass:"l-hint-text--challenge",attrs:{type:"challenges"}},[e._v(" "+e._s(e.name)+" ")]),e._t("top"),i("div",{staticClass:"l-challenge-box__fill"}),i("div",[i("div",{style:e.completionOverlay}),i("button",{class:e.buttonClassObject,on:{click:function(t){return e.$emit("start")}}},[e._v(" "+e._s(e.buttonText)+" ")])]),e._t("bottom")],2)},gI=[];const vI={name:"EternityChallengeBoxWrapper",components:{HintText:LT},props:{name:{type:String,required:!0},isUnlocked:{type:Boolean,required:!0},isRunning:{type:Boolean,required:!0},isCompleted:{type:Boolean,required:!0},canBeUnlocked:{type:Boolean,required:!0},completionCount:{type:Number,required:!0},overrideLabel:{type:String,required:!1,default:""}},data(){return{challengeId:Number}},computed:{buttonClassObject(){const e=this.isCompleted&&!this.isUnlocked,t=this.isCompleted&&this.isUnlocked&&!this.isRunning,i=this.isUnlocked||this.canBeUnlocked,a=!this.isCompleted&&!this.isUnlocked&&!this.isRunning&&!this.canBeUnlocked,n=!this.isRunning&&(!this.isCompleted&&this.canBeUnlocked||this.isUnlocked);return{"o-challenge-btn":!0,"o-challenge-btn--running":this.isRunning,"o-challenge-btn--completed":e,"o-challenge-btn--redo":t,"o-challenge-btn--unlocked":!e&&i,"o-challenge-btn--locked":a,"o-challenge-btn--unenterable":!n}},completionOverlay(){return{position:"absolute",width:15*Math.clampMax(this.completionCount/5,1)+"rem",height:"3rem",background:"var(--color-good)",opacity:this.completionCount>=5?0:.3,"border-top-left-radius":"var(--var-border-radius, 1rem)","border-bottom-left-radius":"var(--var-border-radius, 1rem)","pointer-events":"none"}},buttonText(){return this.overrideLabel.length?this.overrideLabel:this.isRunning?"Running":this.isCompleted?this.isUnlocked?"Redo":"Completed":this.isUnlocked?"Start":this.canBeUnlocked?"Unlock":"Locked"}}},bI=vI;var EI=(0,X.Z)(bI,fI,gI,!1,null,"4d90efa2",null);const TI=EI.exports,wI={name:"EternityChallengeBox",components:{EternityChallengeBoxWrapper:TI,DescriptionDisplay:ND,EffectDisplay:tw},props:{challenge:{type:Object,required:!0}},data(){return{isUnlocked:!1,isRunning:!1,isCompleted:!1,canBeUnlocked:!1,completions:0,showGoalSpan:!1,lastGoal:"",altRewards:!1}},computed:{config(){return this.challenge.config},goalDisplay(){const e=this.config;let t=`Goal: ${this.goalAtCompletions(this.completions)} IP`;return e.restriction&&(t+=` ${e.formatRestriction(e.restriction(this.completions))}`),t},firstGoal(){return this.goalAtCompletions(0)},currentRewardConfig(){const e=this.challenge;let t=this.config.reward;const i=t;return{effect:()=>i.effect(e.completions),formatEffect:i.formatEffect,cap:i.cap}},nextRewardConfig(){const e=this.challenge;let t=this.config.reward;const i=t;return{effect:()=>i.effect(e.completions+1),formatEffect:i.formatEffect,cap:i.cap}},currentVRewardConfig(){const e=this.challenge;let t=this.config.vReward;const i=t;return{effect:()=>i.effect(e.completions),formatEffect:i.formatEffect,cap:i.cap}},nextVRewardConfig(){const e=this.challenge;let t=this.config.vReward;const i=t;return{effect:()=>i.effect(e.completions+1),formatEffect:i.formatEffect,cap:i.cap}},name(){return`EC${this.challenge.id}`}},methods:{update(){const e=this.challenge;this.isUnlocked=e.isUnlocked,this.isRunning=e.isRunning,this.isCompleted=e.isFullyCompleted,this.completions=e.completions,this.showGoalSpan=PlayerProgress.realityUnlocked(),this.canBeUnlocked=TimeStudy.eternityChallenge(e.id).canBeBought,this.altRewards=Ra.unlocks.improvedECRewards.isUnlocked,this.lastGoal=Enslaved.isRunning&&1===this.challenge.id?P.wordCycle(this.config.scrambleText.map((e=>format(e)))):this.goalAtCompletions(this.challenge.maxCompletions-1)},start(){this.canBeUnlocked?TimeStudy.eternityChallenge(this.challenge.id).purchase():this.challenge.requestStart()},goalAtCompletions(e){return format(this.challenge.goalAtCompletions(e),2,1)}}},kI=wI;var CI=(0,X.Z)(kI,pI,yI,!1,null,"096be0c2",null);const AI=CI.exports,_I={name:"EternityChallengesTab",components:{ChallengeTabHeader:mI,ChallengeGrid:oI,EternityChallengeBox:AI},data(){return{unlockedCount:0,showAllChallenges:!1,autoEC:!1,isAutoECVisible:!1,remainingECTiers:0,untilNextEC:TimeSpan.zero,untilAllEC:TimeSpan.zero,hasECR:!1}},computed:{challenges(){return EternityChallenges.all},nextECText(){return 0!==this.untilNextEC.totalMilliseconds||this.autoEC?`${this.untilNextEC} (real time)`:"Immediately upon unpausing"},allECText(){return 0!==this.untilAllEC.totalMilliseconds||this.autoEC?`After ${this.untilAllEC} (real time)`:"Immediately upon unpausing"}},methods:{update(){this.showAllChallenges=player.options.showAllChallenges,this.unlockedCount=EternityChallenges.all.filter(this.isChallengeVisible).length,this.isAutoECVisible=Perk.autocompleteEC1.canBeApplied,this.autoEC=player.reality.autoEC;const e=EternityChallenges.remainingCompletions;if(this.remainingECTiers=e,0!==e){const t=EternityChallenges.autoComplete.interval,i=Math.max(t-player.reality.lastAutoEC,0);this.untilNextEC.setFrom(i),this.untilAllEC.setFrom(i+t*(e-1))}this.hasECR=Perk.studyECRequirement.isBought},isChallengeVisible(e){return e.completions>0||e.isUnlocked||e.hasUnlocked||this.showAllChallenges&&PlayerProgress.realityUnlocked()}}},SI=_I;var DI=(0,X.Z)(SI,XM,zM,!1,null,"ada246ca",null);const RI=DI.exports;var MI=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-eternity-milestone-grid"},[i("div",[e._v("You have "+e._s(e.quantify("Eternity",e.eternityCount,3))+".")]),i("div",[e._v(" Offline generation milestones are only active under certain conditions, mouse-over to see these conditions. ")]),e._l(e.rows,(function(t){return i("div",{key:t,staticClass:"l-eternity-milestone-grid__row"},e._l(3,(function(a){return i("EternityMilestoneButton",{key:3*t+a,staticClass:"l-eternity-milestone-grid__cell",attrs:{"get-milestone":e.getMilestone(t,a)}})})),1)}))],2)},II=[],xI=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.config.invisible?e._e():i("div",{staticClass:"l-eternity-milestone"},[i("span",{staticClass:"o-eternity-milestone__goal"},[e._v(" "+e._s(e.quantifyInt("Eternity",e.eternities))+": ")]),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.activeCondition,expression:"activeCondition"}],class:e.rewardClassObject},[i("span",{class:{"o-pelle-disabled":e.isUseless}},[e._v(" "+e._s(e.reward)+" "+e._s(e.isLocked&&!e.isReached?"(Locked behind a Pelle Upgrade)":"")+" ")])])])},PI=[];const GI={name:"EternityMilestoneButton",props:{getMilestone:{type:Function,required:!0}},data(){return{isReached:!1,isLocked:!1}},computed:{milestone(){return this.getMilestone()},config(){return this.milestone.config},eternities(){return this.config.eternities},reward(){const e=this.config.reward;return"function"===typeof e?e():e},rewardClassObject(){return{"o-eternity-milestone__reward":!0,"o-eternity-milestone__reward--locked":!this.isReached,"o-eternity-milestone__reward--reached":this.isReached,"o-eternity-milestone__reward--small-font":this.reward.length>80}},activeCondition(){return this.config.activeCondition?this.config.activeCondition():null},isDoomed:()=>Pelle.isDoomed,isUseless(){return this.isDoomed&&this.config.pelleUseless}},methods:{update(){this.isLocked=this.isDoomed&&void 0!==this.config.givenByPelle,this.isReached=this.milestone.isReached}}},UI=GI;var BI=(0,X.Z)(UI,xI,PI,!1,null,"7cb7f407",null);const NI=BI.exports,OI={name:"EternityMilestonesTab",components:{EternityMilestoneButton:NI},data(){return{eternityCount:new Decimal}},computed:{milestones(){return Object.values(GameDatabase.eternity.milestones).sort(((e,t)=>e.eternities-t.eternities)).map((e=>new EternityMilestoneState(e)))},rows(){return Math.ceil(this.milestones.length/3)}},methods:{update(){this.eternityCount.copyFrom(Currency.eternities.value.floor())},getMilestone(e,t){return()=>this.milestones[3*(e-1)+t-1]}}},LI=OI;var FI=(0,X.Z)(LI,MI,II,!1,null,"3165bf56",null);const $I=FI.exports;var HI=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-eternity-upgrades-grid"},[e._l(e.grid,(function(t,a){return i("div",{key:a,staticClass:"l-eternity-upgrades-grid__row"},e._l(t,(function(e){return i("EternityUpgradeButton",{key:e.id,staticClass:"l-eternity-upgrades-grid__cell",attrs:{upgrade:e}})})),1)})),i("EPMultiplierButton"),i("div",[e._v(" The cost for the "+e._s(e.formatX(5))+" multiplier jumps at "+e._s(e.format(e.costIncreases[0]))+", "+e._s(e.formatPostBreak(e.costIncreases[1],2))+", and "+e._s(e.formatPostBreak(e.costIncreases[2]))+" Eternity Points. "),i("br"),e._v(" The cost increases super-exponentially after "+e._s(e.formatPostBreak(e.costIncreases[3]))+" Eternity Points. "),i("br"),e._v(" The Eternity Point multiplier cannot be purchased past "+e._s(e.format(5e8))+" purchases. ")])],2)},qI=[],VI=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group l-margin-top"},[i("button",{class:e.classObject,on:{click:e.purchaseUpgrade}},[e.isActiveInDoom?i("div",[e._v(" Multiply Eternity Points from all sources by "+e._s(e.formatX(1.5,1,1))+" "),i("br"),e._v(" "+e._s(e.effectLabel)+" "+e._s(e.formatX(e.multiplier,2,1))+" ")]):i("div",{class:{"o-pelle-disabled":e.isDoomed}},[e._v(" Multiply Eternity Points from all sources by "+e._s(e.formatX(5))+" "),i("br"),e._v(" "+e._s(e.effectLabel)+" "+e._s(e.formatX(e.multiplier,2,0))+" ")]),e.isCapped?e._e():[i("br"),e._v(" Cost: "+e._s(e.quantify("Eternity Point",e.cost,2,0))+" ")],e.isCapped?[i("span",[e._v("(Capped at "+e._s(e.quantify("purchase",e.upgrade.purchaseCap))+")")])]:e._e()],2),i("PrimaryButton",{staticClass:"l--spoon-btn-group__little-spoon o-primary-btn--small-spoon",on:{click:function(t){return e.upgrade.buyMax(!1)}}},[e._v(" Max Eternity Point mult ")]),e.isAutoUnlocked?i("PrimaryToggleButton",{staticClass:"l--spoon-btn-group__little-spoon o-primary-btn--small-spoon",attrs:{label:"Autobuy EP mult"},model:{value:e.isAutobuyerActive,callback:function(t){e.isAutobuyerActive=t},expression:"isAutobuyerActive"}}):e._e()],1)},YI=[];const WI={name:"EPMultiplierButton",components:{PrimaryButton:Vs,PrimaryToggleButton:Sh},data(){return{isAutobuyerActive:!1,isAutoUnlocked:!1,isAffordable:!1,multiplier:new Decimal,cost:new Decimal,isCapped:!1,isActiveInDoom:!1}},computed:{upgrade(){return EternityUpgrade.epMult},autobuyer(){return Autobuyer.epMult},classObject(){return this.isDoomed&&!this.isActiveInDoom?{"o-eternity-upgrade":!0,"o-eternity-upgrade--useless":!this.isAffordable,"o-pelle-disabled-pointer":!0,"o-pelle-disabled":!0}:{"o-eternity-upgrade":!0,"o-eternity-upgrade--bought":this.isCapped,"o-eternity-upgrade--available":!this.isCapped&&this.isAffordable,"o-eternity-upgrade--unavailable":!this.isCapped&&!this.isAffordable}},isDoomed:()=>Pelle.isDoomed,effectLabel(){return(this.isCapped?"Capped":"Currently")+":"}},watch:{isAutobuyerActive(e){Autobuyer.epMult.isActive=e}},methods:{update(){const e=this.upgrade;this.isAutoUnlocked=this.autobuyer.isUnlocked,this.isAutobuyerActive=this.autobuyer.isActive,this.multiplier.copyFrom(e.effectValue),this.cost.copyFrom(e.cost),this.isAffordable=e.isAffordable,this.isCapped=this.upgrade.isCapped,this.isActiveInDoom=Pelle.isDoomed&&Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked},purchaseUpgrade(){RealityUpgrade(15).isLockingMechanics?RealityUpgrade(15).tryShowWarningModal():this.upgrade.purchase()}}},jI=WI;var XI=(0,X.Z)(jI,VI,YI,!1,null,"59fdf668",null);const zI=XI.exports;var KI=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{class:e.classObject,on:{click:function(t){return e.upgrade.purchase()}}},[i("DescriptionDisplay",{attrs:{config:e.upgrade.config}}),i("EffectDisplay",{attrs:{br:"",config:e.upgrade.config}}),!e.isBought&&e.hasEU2?i("div",[e._v(" Auto: "+e._s(e.format(e.upgrade.config.cost/1e10))+" Eternity Points ")]):e.isBought?e._e():i("CostDisplay",{attrs:{br:"",config:e.upgrade.config,name:"Eternity Point"}})],1)},ZI=[];const QI={name:"EternityUpgradeButton",components:{DescriptionDisplay:ND,EffectDisplay:tw,CostDisplay:ID},props:{upgrade:{type:Object,required:!0}},data(){return{isBought:!1,isAffordable:!1}},computed:{classObject(){return{"o-eternity-upgrade":!0,"o-eternity-upgrade--bought":this.isBought,"o-eternity-upgrade--available":!this.isBought&&this.isAffordable,"o-eternity-upgrade--unavailable":!this.isBought&&!this.isAffordable}},hasEU2(){return Perk.autounlockEU2.canBeApplied}},methods:{update(){const e=this.upgrade;this.isBought=e.isBought,this.isAffordable=e.isAffordable}}},JI=QI;var ex=(0,X.Z)(JI,KI,ZI,!1,null,"0b4344ef",null);const tx=ex.exports,ix={name:"EternityUpgradesTab",components:{EternityUpgradeButton:tx,EPMultiplierButton:zI},computed:{grid(){return[[EternityUpgrade.idMultEP,EternityUpgrade.idMultEternities,EternityUpgrade.idMultICRecords],[EternityUpgrade.tdMultAchs,EternityUpgrade.tdMultTheorems,EternityUpgrade.tdMultRealTime]]},costIncreases:()=>EternityUpgrade.epMult.costIncreaseThresholds.map((e=>new Decimal(e)))},methods:{formatPostBreak}},ax=ix;var nx=(0,X.Z)(ax,HI,qI,!1,null,"5b2e66da",null);const sx=nx.exports;var rx=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-glyph-set-tab"},e._l(e.recordGlyphInfo,(function(t,a){return i("div",{key:a},[t[0]?i("div",{staticClass:"l-glyph-set-entry"},[e._v(" "+e._s(t[2])+": "),t[0]?i("GlyphSetPreview",{key:a,attrs:{glyphs:t[1],text:t[2],"text-hidden":!0}}):e._e(),e._v(" "+e._s(t[3])+" "),i("br")],1):e._e()])})),0)},ox=[],lx=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e.text&&!e.textHidden?i("span",[e._v(" "+e._s(e.text)+" "),i("br")]):e._e(),0!==e.glyphs.length?i("span",{class:{"l-glyph-set-preview":!e.isInModal},on:{click:e.showModal}},[e.showName?i("GlyphSetName",{key:e.glyphHash(),attrs:{"glyph-set":e.glyphs,"force-color":e.forceNameColor}}):e._e(),e._l(e.orderedGlyphs,(function(t,a){return i("GlyphComponent",{key:a,staticClass:"l-preview",attrs:{glyph:t,"show-sacrifice":e.showSacrifice,draggable:!1,circular:!0,"ignore-modified-level":e.ignoreModifiedLevel,"reality-glyph-boost":e.realityGlyphBoost,"flip-tooltip":e.flipTooltip,"is-in-modal":e.isInModal,size:"3rem","text-proportion":.5,"glow-blur":"0.2rem","glow-spread":"0.1rem"}})}))],2):i("span",[e.showName?i("GlyphSetName",{attrs:{"glyph-set":e.glyphs,"force-color":e.forceNameColor}}):e._e(),e._v(" "+e._s(e.noneText)+" ")],1)])},cx=[],ux=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",e._g({class:["l-glyph-component",{"c-glyph-component--dragging":e.isDragging}],style:e.outerStyle,attrs:{draggable:e.draggable}},e.draggable?{dragstart:e.dragStart,dragend:e.dragEnd,drag:e.drag}:{}),[i("div",{ref:"glyph",class:["l-glyph-component","c-glyph-component"],style:e.innerStyle},[e._v(" "+e._s(e.symbol)+" "),e.$viewModel.shiftDown||e.showGlyphEffectDots?e._l(e.glyphEffects,(function(t){return i("div",{key:t,style:e.glyphEffectDots(t)})})):e._e()],2),i("div",{style:e.glyphBorderStyle()}),e.hasTooltip&&e.tooltipLoaded?i("GlyphTooltip",e._b({directives:[{name:"show",rawName:"v-show",value:e.isCurrentTooltip,expression:"isCurrentTooltip"}],ref:"tooltip",class:e.tooltipDirectionClass,style:e.zIndexStyle,attrs:{"sacrifice-reward":e.sacrificeReward,"refine-reward":e.refineReward,"uncapped-refine-reward":e.uncappedRefineReward,"current-action":e.currentAction,"score-mode":e.scoreMode,"show-deletion-text":e.showSacrifice,"display-level":e.displayLevel,component:e.componentID,"change-watcher":e.logTotalSacrifice}},"GlyphTooltip",e.glyph,!1)):e._e(),e.isNew?i("div",{staticClass:"l-corner-icon l-new-glyph"},[e._v(" New! ")]):e.isUnequipped?i("div",{staticClass:"l-corner-icon l-unequipped-glyph fas fa-arrow-up-from-bracket"}):e._e(),e.displayedInfo?i("div",{staticClass:"l-glyph-info"},[e._v(" "+e._s(e.displayedInfo)+" ")]):e._e(),i("div",e._g({ref:"over",style:e.overStyle,on:{click:[function(t){return t.shiftKey?t.ctrlKey||t.altKey||t.metaKey?null:e.$emit("shiftClicked",e.glyph.id):null},function(t){return t.ctrlKey&&t.shiftKey?t.altKey||t.metaKey?null:e.$emit("ctrlShiftClicked",e.glyph.id):null},function(t){return t.metaKey&&t.shiftKey?t.ctrlKey||t.altKey?null:e.$emit("ctrlShiftClicked",e.glyph.id):null},function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.$emit("clicked",e.glyph.id)}]}},e.mouseEventHandlers))],1)},dx=[],hx=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",e._g({staticClass:"l-glyph-tooltip c-glyph-tooltip",style:e.glyphTooltipStyle},e.eventHandlers),[i("div",{staticClass:"c-glyph-tooltip__header",style:e.glyphHeaderStyle},[i("span",{staticClass:"c-glyph-tooltip__description",style:e.descriptionStyle,domProps:{innerHTML:e._s(e.description)}}),i("span",{staticClass:"l-glyph-tooltip__info"},[i("span",{domProps:{innerHTML:e._s(e.levelText)}}),i("span",{domProps:{innerHTML:e._s(e.rarityText)}})]),e.showDeletionText?i("span",[i("span",e._g({staticClass:"c-glyph-tooltip__sacrifice"},e.onTouchDevice?{click:e.removeGlyph}:{}),[i("span",{domProps:{innerHTML:e._s(e.sacrificeText())}}),e.sacrificeText()&&e.refineText()?i("span",[e._v(" | ")]):e._e(),i("span",{domProps:{innerHTML:e._s(e.refineText())}})])]):e._e(),i("span",{staticClass:"c-glyph-tooltip__sacrifice"},[e._v(e._s(e.scoreText()))])]),i("div",{staticClass:"l-glyph-tooltip__effects"},[e._l(e.sortedEffects,(function(t){return i("GlyphTooltipEffect",{key:t.id+e.changeWatcher,attrs:{effect:t.id,value:t.value}})})),e.showChaosText?i("div",{staticClass:"pelle-current-glyph-effects c-glyph-tooltip__effect"},[e._v(" "+e._s(e.chaosDescription)+" ")]):e._e()],2)])},mx=[],px=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-glyph-tooltip__effect",class:{"o-pelle-disabled":e.isPelleDisabled}},[i("span",{domProps:{innerHTML:e._s(e.convertedParts[0])}}),e.hasValue?i("span",{style:e.valueStyle},[e._v(e._s(e.primaryEffectText))]):e._e(),i("span",{domProps:{innerHTML:e._s(e.convertedParts[1])}}),e.hasSecondaryValue?i("span",{style:e.valueStyle},[e._v(e._s(e.secondaryEffectText))]):e._e(),e.hasSecondaryValue?i("span",{domProps:{innerHTML:e._s(e.convertedParts[2])}}):e._e()])},yx=[];const fx={name:"GlyphTooltipEffect",props:{effect:{type:String,required:!0},value:{type:[Number,Object],required:!0}},computed:{effectConfig(){return GlyphEffects[this.effect]},boostColor(){return void 0!==this.effectConfig.alterationType&&this.effectConfig.alterationType!==ALTERATION_TYPE.ADDITION?this.effectConfig.alteredColor():void 0},additionColor(){return this.effectConfig.alterationType===ALTERATION_TYPE.ADDITION?this.effectConfig.alteredColor():void 0},effectStringTemplate(){return this.effectConfig.singleDesc},primaryEffectText(){const e=this.effectConfig.formatSingleEffect(this.value);return this.boostColor?`⯅${e}`:e},secondaryEffectText(){const e=this.effectConfig.formatSingleSecondaryEffect(this.effectConfig.conversion(this.value));return this.boostColor?`⯅${e}`:e},textSplits(){const e=this.effectStringTemplate.split("{value}"),t=e[1]?e[1].split("{value2}"):"";return 1!==t.length?[e[0]].concat(t):e},hasValue(){return this.effectStringTemplate.includes("{value}")},hasSecondaryValue(){return void 0!==this.textSplits[2]},isPelleDisabled(){return this.effectConfig.isDisabledByDoomed&&!UZ.unlocks.unlockPelleGlyphEffects.isUnlocked||this.effectConfig.isDisabledByDoomedWithlvl25&&UZ.unlocks.unlockPelleGlyphEffects.isUnlocked},convertedParts(){const e=[];for(const t of this.textSplits)e.push(this.convertToHTML(t));return e},valueStyle(){return this.boostColor?{color:this.boostColor,"text-shadow":`0 0 0.4rem ${this.boostColor}`}:{color:"#76EE76"}},textShadowColor(){return GlyphAppearanceHandler.getBaseColor(!0)}},methods:{convertToHTML(e){return e.replace("\n","
").replace("]","
").replace("[",``)}}},gx=fx;var vx=(0,X.Z)(gx,px,yx,!1,null,null,null);const bx=vx.exports,Ex={name:"GlyphTooltip",components:{GlyphTooltipEffect:bx},props:{type:{type:String,required:!0},strength:{type:Number,required:!0},level:{type:Number,required:!0},effects:{type:Number,required:!0},id:{type:Number,required:!1,default:0},sacrificeReward:{type:Decimal,required:!1,default:0},refineReward:{type:Number,required:!1,default:0},uncappedRefineReward:{type:Number,required:!1,default:0},currentAction:{type:String,required:!0},scoreMode:{type:Number,required:!0},showDeletionText:{type:Boolean,required:!1,default:!0},displayLevel:{type:Number,required:!1,default:0},changeWatcher:{type:Number,required:!0}},data(){return{showChaosText:!1,chaosDescription:""}},computed:{onTouchDevice(){return GameUI.touchDevice},effectiveLevel(){return this.displayLevel?this.displayLevel:this.level},sortedEffects(){return getGlyphEffectValuesFromBitmask(this.effects,this.effectiveLevel,this.strength,this.type).filter((e=>GlyphEffects[e.id].isGenerated===generatedTypes.includes(this.type)))},rarityInfo(){return getRarity(this.strength)},baseColor(){return CosmeticGlyphTypes[this.type].currentColor.bg},textColor(){return"black"===this.baseColor?"white":"black"},mainBorderColor(){return GlyphAppearanceHandler.getBorderColor(this.type)},descriptionStyle(){const e=GlyphAppearanceHandler.getRarityColor(this.strength,this.type),t=GlyphAppearanceHandler.isLightBG?"white":"black";return{color:"cursed"===this.type||"amalgam"===this.type?t:e,animation:"reality"===this.type?"a-reality-glyph-name-cycle 10s infinite":void 0}},description(){const e=`${this.type.capitalize()}`;switch(this.type){case"companion":return"Companion Glyph";case"cursed":return"Cursed Glyph";case"reality":return`Pure Glyph of ${e}`;case"amalgam":return"Amalgam Glyph";default:return`${this.rarityInfo.name} Glyph of ${e}`}},isLevelCapped(){return this.displayLevel&&this.displayLevelthis.level},rarityText(){if(!GlyphTypes[this.type].hasRarity)return"";const e=Pelle.isDoomed?Pelle.glyphStrength:this.strength;return`| Rarity:\n ${formatRarity(strengthToRarity(e))}`},levelText(){if("companion"===this.type)return"";const e=this.isLevelCapped?"":this.isLevelBoosted?"":"",t=this.isLevelCapped?"#ff4444":this.isLevelBoosted?"#44FF44":void 0;return`Level: \n ${e}${formatInt(this.effectiveLevel)}${e}\n `},eventHandlers(){return GameUI.touchDevice?{touchstart:this.touchStart,dragstart:this.dragStart,dragEnd:this.dragEnd}:{}},glyphTooltipStyle(){const e="cursed"===this.type||"amalgam"===this.type?this.textColor:GlyphAppearanceHandler.getBorderColor(this.type);return{"pointer-events":this.onTouchDevice?void 0:"none","border-color":e,"box-shadow":`0 0 0.5rem ${e}, 0 0 0.5rem ${e} inset`,animation:"reality"===this.type?"a-reality-glyph-tooltip-cycle 10s infinite":void 0,color:this.textColor,background:this.baseColor}},glyphHeaderStyle(){const e="cursed"===this.type,t="reality"===this.type;let i=GlyphAppearanceHandler.getRarityColor(this.strength,this.type);return(e||"amalgam"===this.type)&&(i=this.textColor),"companion"===this.type&&(i=GlyphAppearanceHandler.getBorderColor(this.type)),{"border-color":i,"box-shadow":`0 0 0.5rem 0.1rem ${i}, 0 0 0.8rem ${i} inset`,animation:t?"a-reality-glyph-tooltip-header-cycle 10s infinite":void 0,color:this.textColor,background:this.baseColor}}},watch:{changeWatcher(){this.$recompute("sortedEffects")}},mounted(){document.body.appendChild(this.$el)},destroyed(){try{document.body.removeChild(this.$el)}catch(e){}},methods:{update(){this.showChaosText=Pelle.specialGlyphEffect.isUnlocked,this.showChaosText&&(this.chaosDescription=Pelle.getSpecialGlyphEffectDescription(this.type))},touchStart(){this.$parent.$emit("tooltip-touched")},dragStart(e){e.preventDefault(),e.stopPropagation()},dragEnd(e){e.preventDefault(),e.stopPropagation()},removeGlyph(){GlyphSacrificeHandler.removeGlyph(Glyphs.findById(this.id),!1)},getFontColor(){return Theme.current().isDark()?"#cccccc":"black"},sacrificeText(){if("companion"===this.type||"cursed"===this.type||"amalgam"===this.type)return"";const e=`${format(this.sacrificeReward,2,2)}`,t="sacrifice"===this.currentAction;return`\n Sacrifice: ${e}\n `},refineText(){if("companion"===this.type||"cursed"===this.type||"reality"===this.type||"amalgam"===this.type)return"";if(!AlchemyResource[this.type].isUnlocked)return"";let e=`${format(this.uncappedRefineReward,2,2)} ${GLYPH_SYMBOLS[this.type]}`;this.uncappedRefineReward!==this.refineReward&&(e+=` (Actual value due to cap: ${format(this.refineReward,2,2)} ${GLYPH_SYMBOLS[this.type]})`);const t="refine"===this.currentAction;return`\n Refine: ${e}\n `},scoreText(){if("companion"===this.type||"cursed"===this.type||"reality"===this.type||"amalgam"===this.type)return"";const e=[AUTO_GLYPH_SCORE.SPECIFIED_EFFECT,AUTO_GLYPH_SCORE.EFFECT_SCORE];return e.includes(this.scoreMode)?`Score: ${format(AutoGlyphProcessor.filterValue(this.$parent.glyph),1,1)}`:""}}},Tx=Ex;var wx=(0,X.Z)(Tx,hx,mx,!1,null,"0072d0ca",null);const kx=wx.exports,Cx={common:[],uncommon:[{lineType:"linear",angles:[45],colorSplit:[14,16,84,86]}],rare:[{lineType:"linear",angles:[45,135],colorSplit:[14,16,84,86]}],epic:[{lineType:"linear",angles:[45,135],colorSplit:[12,14,16,18,82,84,86,88]}],legendary:[{lineType:"bump",colorSplit:[15,25]}],mythical:[{lineType:"bump",colorSplit:[15,25]},{lineType:"linear",angles:[45,135],colorSplit:[10,13,87,90]}],transcendent:[{lineType:"bump",colorSplit:[15,35]},{lineType:"linear",angles:[45,135],colorSplit:[10,12,14,16,84,86,88,90]}],celestial:[{lineType:"bump",colorSplit:[15,35]},{lineType:"radial",colorSplit:[65,85]}],divine:[{lineType:"bump",colorSplit:[15,35]},{lineType:"linear",angles:[45,135],colorSplit:[10,12,14,16,84,86,88,90]},{lineType:"radial",colorSplit:[65,85]}],cursed:[{lineType:"spike",center:[40,40],angles:[305,325]},{lineType:"spike",center:[60,40],angles:[35,55]},{lineType:"spike",center:[60,60],angles:[125,145]},{lineType:"spike",center:[40,60],angles:[215,235]}],companion:[{lineType:"companion"}]};function Ax(e,t,i,a){let n,s,r,o,l=!1;const c=[],u=[];switch(e.lineType){case"linear":n=[0,...e.colorSplit,100],s=e=>a?50+.7*(e-50):e;for(const i of e.angles){for(let e=0;ea?e:.9*e;for(let t=0;t<4;t++)c.push(`radial-gradient(at ${r[t]}, transparent, ${o} ${s(e.colorSplit[0])}%,\n transparent ${s(e.colorSplit[1])}%)`);return c.join(",");case"radial":n=[50,...e.colorSplit,100],s=e=>a?.9*e:100-(100-e)/2;for(const e of n)c.push(`${l?t:"transparent"} ${s(e)}%`),l=!l;return`radial-gradient(${c.join(",")})`;case"spike":return c.push(`transparent ${e.angles[0]-5}deg`),c.push(`${t}b0 ${e.angles[0]+5}deg`),c.push(`${t}b0 ${e.angles[1]-5}deg`),c.push(`transparent ${e.angles[1]+5}deg`),`conic-gradient(from 0deg at ${e.center[0]}% ${e.center[1]}%, ${c.join(",")})`;case"companion":n=[0,30,330,360],o=[t,"transparent","transparent",t];for(let e=0;e<4;e++)c.push(`${o[e]} ${n[e]}deg`);u.push(`conic-gradient(${c.join(",")})`),r=["125% 125%","-25% 125%"],s=e=>a?.9*(e+10):e;for(let e=0;e<2;e++)u.push(`radial-gradient(at ${r[e]}, transparent, ${t} ${s(30)}%,\n transparent ${s(50)}%)`);return u.join(",");default:throw new Error("Unrecognized glyph border data")}}const _x={name:"GlyphComponent",components:{GlyphTooltip:kx},props:{glyph:{type:Object,required:!0},isInModal:{type:Boolean,required:!1,default:!1},isNew:{type:Boolean,required:!1,default:!1},isUnequipped:{type:Boolean,required:!1,default:!1},showSacrifice:{type:Boolean,required:!1,default:!1},ignoreModifiedLevel:{type:Boolean,required:!1,default:!1},realityGlyphBoost:{type:Number,required:!1,default:0},isInventoryGlyph:{type:Boolean,required:!1,default:!1},isActiveGlyph:{type:Boolean,required:!1,default:!1},size:{type:String,required:!1,default:"5rem"},glowBlur:{type:String,required:!1,default:"1rem"},glowSpread:{type:String,required:!1,default:"0.2rem"},bottomPadding:{type:String,required:!1,default:"0.3rem"},textProportion:{type:Number,required:!1,default:.5},circular:{type:Boolean,required:!1,default:!1},draggable:{type:Boolean,required:!1,default:!1},flipTooltip:{type:Boolean,required:!1,default:!1}},data(){return{componentID:UIID.next(),isDragging:!1,suppressTooltip:!1,isTouched:!1,tooltipEnabled:!1,sacrificeReward:b.D0,uncappedRefineReward:0,refineReward:0,displayLevel:0,tooltipLoaded:!1,logTotalSacrifice:0,realityColor:""}},computed:{hasTooltip(){return Boolean(this.glyph.effects)},typeConfig(){return GlyphTypes[this.glyph.type]},cosmeticConfig(){var e;return CosmeticGlyphTypes[null!==(e=this.glyph.cosmetic)&&void 0!==e?e:this.glyph.type]},isBlobHeart(){return"S11"===this.$viewModel.theme&&"companion"===this.glyph.type},symbol(){const e=this.glyph.symbol;return this.isBlobHeart?"":e||("S4"!==this.$viewModel.theme||this.glyph.cosmetic?this.cosmeticConfig.currentSymbol.symbol:CANCER_GLYPH_SYMBOLS[this.glyph.type])},symbolBlur(){return!this.isBlobHeart&&(this.glyph.symbol?!GlyphAppearanceHandler.unblurredSymbols.includes(this.symbol):this.cosmeticConfig.currentSymbol.blur)},zIndexStyle(){return{"z-index":this.isInModal?7:6}},colorObj(){var e,t,i,a,n,s;let r,o;return this.glyph.color&&(r=GlyphAppearanceHandler.getColorProps(this.glyph.color)),this.glyph.cosmetic&&(r=this.glyph.cosmetic===this.glyph.type&&("cursed"===this.glyph.type||"amalgam"===this.glyph.type)?GlyphAppearanceHandler.getBaseColor(!0):this.cosmeticConfig.currentColor),o=this.isRealityGlyph&&this.realityColor?this.realityColor:this.cosmeticConfig.ignoreRarityColor?GlyphAppearanceHandler.getBorderColor(this.glyph.type):GlyphAppearanceHandler.getRarityColor(this.glyph.strength,this.glyph.type),{border:null!==(e=null===(t=r)||void 0===t?void 0:t.border)&&void 0!==e?e:GlyphAppearanceHandler.getBorderColor(this.glyph.type),symbol:null!==(i=null===(a=r)||void 0===a?void 0:a.border)&&void 0!==i?i:o,bg:null!==(n=null===(s=r)||void 0===s?void 0:s.bg)&&void 0!==n?n:this.cosmeticConfig.currentColor.bg}},symbolColor(){return player.options.swapGlyphColors?this.colorObj.border:this.colorObj.symbol},borderColor(){return player.options.swapGlyphColors?this.colorObj.symbol:this.colorObj.border},bgColor(){return this.colorObj.bg},overStyle(){return{width:this.size,height:this.size,position:"absolute","background-color":"rgba(0, 0, 0, 0)","box-shadow":`0 0 ${this.glowBlur} calc(${this.glowSpread} + 0.1rem) ${this.borderColor} inset`,"border-radius":this.circular?"50%":"0"}},outerStyle(){return{width:this.size,height:this.size,"background-color":this.borderColor,"box-shadow":`0 0 ${this.glowBlur} ${this.glowSpread} ${this.borderColor}`,"border-radius":this.circular?"50%":"0","-webkit-user-drag":this.draggable?"":"none"}},innerStyle(){const e=this.symbolColor;return{width:`calc(${this.size} - 0.2rem)`,height:`calc(${this.size} - 0.2rem)`,"font-size":`calc( ${this.size} * ${this.textProportion} )`,color:e,"text-shadow":this.symbolBlur?`-0.04em 0.04em 0.08em ${e}`:void 0,"border-radius":this.circular?"50%":"0","padding-bottom":this.bottomPadding,background:this.bgColor}},mouseEventHandlers(){const e=this.hasTooltip?{mouseenter:this.mouseEnter,"&mousemove":this.mouseMove,mouseleave:this.mouseLeave,mousedown:this.mouseDown,touchstart:this.touchStart,touchend:this.touchEnd}:{};return(this.hasTooltip||this.draggable)&&(e.touchmove=this.touchMove),e},isCurrentTooltip(){return this.$viewModel.tabs.reality.currentGlyphTooltip===this.componentID},tooltipDirectionClass(){let e=this.$viewModel.tabs.reality.glyphTooltipDirection;switch(this.flipTooltip&&(e+=1),e){case-1:return"l-glyph-tooltip--down-left";case 0:return"l-glyph-tooltip--down-right";case 1:return"l-glyph-tooltip--up-left";case 2:return"l-glyph-tooltip--up-right";default:return""}},glyphEffects(){let e=0;switch(this.glyph.type){case"time":case"cursed":case"companion":case"amalgam":e=0;break;case"dilation":case"reality":e=4;break;case"replication":e=8;break;case"infinity":e=12;break;case"power":e=16;break;case"effarig":e=20;break;default:throw new Error(`Unrecognized glyph type "${this.glyph.type}" in glyph effect icons`)}const t=[];let i=this.glyph.effects>>e;for(let a=0;i>0;a++)1===(1&i)&&t.push(a),i>>=1;return t},isRealityGlyph(){return"reality"===this.glyph.type},isCursedGlyph(){return"cursed"===this.glyph.type},isCompanionGlyph(){return"companion"===this.glyph.type},showGlyphEffectDots(){return player.options.showHintText.glyphEffectDots},displayedInfo(){const e=["companion","cursed","amalgam"];if(!this.isInventoryGlyph||e.includes(this.glyph.type))return null;const t=player.options.showHintText;if(t.glyphInfoType===zo.types.NONE||!t.showGlyphInfoByDefault&&!this.$viewModel.shiftDown)return null;const i=zo.types;switch(t.glyphInfoType){case i.LEVEL:return this.updateDisplayLevel(),formatInt(0===this.displayLevel?this.glyph.level:this.displayLevel);case i.RARITY:return formatRarity(strengthToRarity(Pelle.isDoomed?Pelle.glyphStrength:this.glyph.strength));case i.SAC_VALUE:return format(this.sacrificeReward,2,2);case i.FILTER_SCORE:return format(AutoGlyphProcessor.filterValue(this.glyph),1,1);case i.CURRENT_REFINE:return`${format(this.refineReward,2,2)} ${this.symbol}`;case i.MAX_REFINE:return`${format(this.uncappedRefineReward,2,2)} ${this.symbol}`;default:throw new Error("Unrecognized Glyph info type in info text")}},showBorders(){return player.options.glyphBorders}},watch:{logTotalSacrifice(){this.tooltipLoaded=!1,this.isCurrentTooltip&&this.showTooltip()}},created(){this.on$(GAME_EVENT.GLYPH_VISUAL_CHANGE,(()=>{this.$recompute("typeConfig"),this.$recompute("cosmeticConfig"),this.$recompute("innerStyle"),this.$recompute("overrideColor"),this.$recompute("showGlyphEffectDots"),this.$recompute("displayedInfo"),this.$recompute("showBorders")})),this.on$("tooltip-touched",(()=>this.hideTooltip())),this.on$(GAME_EVENT.TAB_CHANGED,(()=>this.hideTooltip())),setTimeout((()=>this.tooltipEnabled=!0),10)},beforeDestroy(){this.isCurrentTooltip&&this.hideTooltip(),this.$viewModel.draggingUIID===this.componentID&&(this.$viewModel.draggingUIID=-1)},methods:{update(){this.logTotalSacrifice=GameCache.logTotalGlyphSacrifice.value,this.realityColor=player.reality.glyphs.cosmetics.colorMap.reality?null:GlyphAppearanceHandler.realityColor,this.sacrificeReward=GlyphSacrificeHandler.glyphSacrificeGain(this.glyph),this.uncappedRefineReward=ALCHEMY_BASIC_GLYPH_TYPES.includes(this.glyph.type)?GlyphSacrificeHandler.glyphRawRefinementGain(this.glyph):0,this.refineReward=ALCHEMY_BASIC_GLYPH_TYPES.includes(this.glyph.type)?GlyphSacrificeHandler.glyphRefinementGain(this.glyph):0,this.tooltipLoaded&&this.updateDisplayLevel()},updateDisplayLevel(){this.ignoreModifiedLevel?this.displayLevel=0:this.isActiveGlyph?this.displayLevel=getAdjustedGlyphLevel(this.glyph):this.isInventoryGlyph?this.displayLevel=getAdjustedGlyphLevel(this.glyph,0):this.displayLevel=this.glyph.level+(BASIC_GLYPH_TYPES.includes(this.glyph.type)?this.realityGlyphBoost:0)},hideTooltip(){this.tooltipLoaded=!1,this.$viewModel.tabs.reality.mouseoverGlyphInfo.type="",this.$viewModel.tabs.reality.mouseoverGlyphInfo.inInventory=!1,this.$viewModel.tabs.reality.currentGlyphTooltip=-1},showTooltip(){if(!this.tooltipEnabled)return;Glyphs.removeVisualFlag("unseen",this.glyph),Glyphs.removeVisualFlag("unequipped",this.glyph),this.tooltipLoaded=!0,this.$viewModel.tabs.reality.mouseoverGlyphInfo.inInventory=!this.circular;const e=this.$viewModel.tabs.reality.mouseoverGlyphInfo;e.type=this.glyph.type,e.sacrificeValue=GlyphSacrificeHandler.glyphSacrificeGain(this.glyph),e.refineValue=GlyphSacrificeHandler.glyphRawRefinementGain(this.glyph),this.$viewModel.tabs.reality.currentGlyphTooltip=this.componentID,AutoGlyphProcessor.sacMode===AUTO_GLYPH_REJECT.SACRIFICE||AutoGlyphProcessor.sacMode===AUTO_GLYPH_REJECT.REFINE_TO_CAP&&0===this.refineReward?this.currentAction="sacrifice":this.currentAction="refine",this.scoreMode=AutoGlyphProcessor.scoreMode},moveTooltipTo(e,t){if(!this.$refs.tooltip)return;const i=this.$refs.tooltip.$el;if(i){const a=document.body.getBoundingClientRect();i.style.left=e-a.left+"px",i.style.top=t-a.top+"px",1===this.$viewModel.tabs.reality.glyphTooltipDirection?t-i.offsetHeight<=0&&t+i.offsetHeight=a.height&&(this.$viewModel.tabs.reality.glyphTooltipDirection=1)}},mouseEnter(e){-1===this.$viewModel.draggingUIID&&(this.moveTooltipTo(e.clientX,e.clientY),this.showTooltip())},mouseLeave(){this.isCurrentTooltip&&this.hideTooltip()},mouseDown(){this.isTouched||this.hideTooltip()},mouseMove(e){this.isTouched||this.moveTooltipTo(e.clientX,e.clientY)},dragStart(e){this.hideTooltip(),this.isDragging=!0,this.suppressTooltip=!0,e.dataTransfer.setData(GLYPH_MIME_TYPE,this.glyph.id.toString()),e.dataTransfer.dropEffect="move";const t=this.$refs.over.getBoundingClientRect();e.dataTransfer.setDragImage(this.$refs.over,e.clientX-t.left,e.clientY-t.top),this.$viewModel.draggingUIID=this.componentID;const i=this.$viewModel.tabs.reality.draggingGlyphInfo;i.id=this.glyph.id,i.type=this.glyph.type,i.sacrificeValue=GlyphSacrificeHandler.glyphSacrificeGain(this.glyph)},dragEnd(){this.isDragging=!1,this.suppressTooltip=!1,this.$viewModel.scrollWindow=0;const e=this.$viewModel.tabs.reality.draggingGlyphInfo;e.id=-1,e.type="",this.$viewModel.draggingUIID===this.componentID&&(this.$viewModel.draggingUIID=-1)},drag(e){if(0===e.screenX&&0===e.screenY)return void(this.$viewModel.scrollWindow=0);const t=100;e.clientYwindow.innerHeight-t?this.$viewModel.scrollWindow=1-.9*(window.innerHeight-e.clientY)/t:this.$viewModel.scrollWindow=0},touchStart(){this.isTouched=!0},touchEnd(e){this.isCurrentTooltip?(e.preventDefault(),this.hideTooltip()):this.suppressTooltip||(e.preventDefault(),this.showTooltip(),this.moveTooltipTo(e.changedTouches[0].clientX,e.changedTouches[0].clientY)),this.suppressTooltip=!1,this.isTouched=!1},touchMove(e){const t=e.changedTouches[0],i=this.$refs.over.getBoundingClientRect();(t.clientXi.left+i.width||t.clientY>i.top+i.height)&&(this.suppressTooltip=!0),this.isDragging&&this.drag(t)},effectIconPos(e){const t="effarig"===this.glyph.type?Math.PI/4*(e+1):Math.PI/2*(e+.5),i=.28*this.size.replace("rem",""),a=-i*Math.sin(t),n=i*(Math.cos(t)+.15);return{dx:a,dy:n}},glyphEffectDots(e){if(["companion","cursed","amalgam"].includes(this.glyph.type))return{};const t=this.effectIconPos(e);return{position:"absolute",width:"0.3rem",height:"0.3rem","border-radius":"50%",background:this.symbolColor,transform:`translate(${t.dx-.045}rem, ${t.dy-.045}rem)`,opacity:"S9"===Theme.current().name?0:.8}},glyphBorderStyle(){if(!this.showBorders)return null;let e;e=this.isCursedGlyph||"amalgam"===this.glyph.type?Cx.cursed:this.isCompanionGlyph?Cx.companion:Cx[getRarity(this.glyph.strength).name.toLowerCase()];const t=e.map((e=>Ax(e,this.borderColor,this.glyph,this.circular)));return{position:"absolute",left:"2%",width:"96%",height:"96%","border-radius":this.circular?"50%":"0",background:t.filter((e=>e)).join(",")}}}},Sx=_x;var Dx=(0,X.Z)(Sx,ux,dx,!1,null,"6bf85a79",null);const Rx=Dx.exports;var Mx=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("span",{staticClass:"c-current-glyph-effects__header",style:e.textStyle},[e._v(" "+e._s(e.setName)+" ")])])},Ix=[];const xx={companion:{adjective:"Huggable",noun:"Companion"},amalgam:{adjective:"Amalgamated",noun:"Amalgam"},reality:{adjective:"Real",noun:"Reality"},music:{adjective:{high:"Melodic",mid:"Chordal",low:"Tuned"},noun:"Music"},effarig:{adjective:{both:"Meta",glyph:"Stable",rm:"Mechanical",none:"Fragmented"},noun:{both:"Effarig",glyph:"Stability",rm:"Mechanism",none:"Fragmentation"}},cursed:{adjective:{high:"Cursed",mid:"Hexed",low:"Jinxed"},noun:"Curse"},power:{adjective:{high:"Powerful",mid:"Mastered",low:"Potential"},noun:"Power"},infinity:{adjective:{high:"Infinite",mid:"Boundless",low:"Immense"},noun:"Infinity"},replication:{adjective:{high:"Replicated",mid:"Simulated",low:"Duplicated"},noun:"Replication"},time:{adjective:{high:"Temporal",mid:"Chronal",low:"Transient"},noun:"Time"},dilation:{adjective:{high:"Dilated",mid:"Attenuated",low:"Diluted"},noun:"Dilation"}},Px={name:"GlyphSetName",props:{glyphSet:{type:Array,required:!0},forceColor:{type:Boolean,required:!1,default:!1}},data(){return{isColored:!0,glyphTypeList:[{type:"power",perc:0,adjOrder:1},{type:"infinity",perc:0,adjOrder:1},{type:"replication",perc:0,adjOrder:1},{type:"time",perc:0,adjOrder:1},{type:"dilation",perc:0,adjOrder:1},{type:"effarig",perc:0,adjOrder:2},{type:"music",perc:0,adjOrder:3},{type:"reality",perc:0,adjOrder:4},{type:"companion",perc:0,adjOrder:5},{type:"cursed",perc:0,adjOrder:6},{type:"amalgam",perc:0,adjOrder:7}],sortedGlyphs:[],slotCount:0}},computed:{isDoomed:()=>Pelle.isDoomed,setName(){if(this.sortGlyphList(),8==this.sortedGlyphs.filter((e=>0!==e.perc)).length)return"True Royal Flush";if(0===this.sortedGlyphs.length)return"Void";if(1===this.sortedGlyphs.length)return this.singletonName;let e,t;this.sortedGlyphs.some((e=>1===e.adjOrder))?(e=this.sortedGlyphs.filter((e=>1!==e.adjOrder)),t=this.basicTypePhrase):(e=[...this.sortedGlyphs],t=this.getNoun(e.pop()));const i=[];for(const a of e)i.push(this.getAdjective(a));return`${i.join(" ")} ${t}`},basicTypePhrase(){const e=this.sortedGlyphs.filter((e=>BASIC_GLYPH_TYPES.includes(e.type)&&0!==e.perc));switch(e.length){case 1:return xx[e[0].type].noun;case 2:return e[0].perc===e[1].perc?[this.getAdjective(e[0]),this.getAdjective(e[1]),"Mixture"].join(" "):`${this.getAdjective(e[1])} ${this.getNoun(e[0])}`;case 3:return e[0].perc>e[1].perc?[this.getAdjective(e[1]),this.getAdjective(e[2]),this.getNoun(e[0])].join(" "):e[0].perc===e[2].perc?"Mixed Irregularity":[this.getAdjective(e[0]),this.getAdjective(e[1]),this.getAdjective(e[2]),"Irregularity"].join(" ");case 4:return e[0].perc===e[1].perc?"Irregular Jumble":`${this.getAdjective(e[0])} Jumble`;case 5:return"Royal Flush";default:throw new Error("Unexpected glyph set configuration in GlyphSetName")}},singletonName(){if("effarig"===this.sortedGlyphs[0].type)return xx.effarig.noun[this.getEffarigProp()];const e=["reality","companion"];for(const a of e)if(this.sortedGlyphs[0].type===a)return xx[a].noun;const t=xx[this.sortedGlyphs[0].type].noun,i=this.sortedGlyphs[0].perc;return this.isDoomed?`Doomed ${t}`:100===i?`Full ${t}`:i>=75?`Strengthened ${t}`:i>=40?`Partial ${t}`:`Weak ${t}`},mainGlyphName(){if(0===this.sortedGlyphs.length)return{id:"none",currentColor:{border:"#888888"}};if(this.calculateGlyphPercent("cursed")||this.calculateGlyphPercent("amalgam"))return CosmeticGlyphTypes.cursed;if(this.calculateGlyphPercent("companion"))return CosmeticGlyphTypes.companion;if(this.calculateGlyphPercent("reality"))return CosmeticGlyphTypes.reality;if(this.calculateGlyphPercent("music")>=50)return CosmeticGlyphTypes.music;const e=this.sortedGlyphs.filter((e=>1===e.adjOrder))[0];return(null===e||void 0===e?void 0:e.perc)>=50?CosmeticGlyphTypes[e.type]:this.calculateGlyphPercent("effarig")?CosmeticGlyphTypes.effarig:CosmeticGlyphTypes[e.type]},textColor(){return this.isDoomed&&1===this.glyphSet.length?"var(--color-pelle--base)":"cursed"===this.mainGlyphName.id?"var(--color-celestials)":"amalgam"===this.mainGlyphName.id?"#ffffff":"music"===this.mainGlyphName.id?CosmeticGlyphTypes.music.currentColor.border:this.sortedGlyphs.length>=3&&this.sortedGlyphs[0].perc<=30?"#C46200":this.mainGlyphName.currentColor.border},textStyle(){return this.$recompute("mainGlyphName"),this.isColored||this.forceColor?{color:this.textColor,"text-shadow":`-1px 1px 1px var(--color-text-base), 1px 1px 1px var(--color-text-base),\n -1px -1px 1px var(--color-text-base), 1px -1px 1px var(--color-text-base),\n 0 0 3px ${this.textColor}`,animation:"reality"===this.mainGlyphName.id?"a-reality-glyph-description-cycle 10s infinite":void 0}:{}}},created(){this.on$(GAME_EVENT.GLYPHS_CHANGED,this.sortGlyphList),this.sortGlyphList()},methods:{update(){this.isColored=player.options.glyphTextColors,this.slotCount=Math.max(Glyphs.activeSlotCount,this.glyphSet.length)},getEffarigProp(){const e=this.glyphSet.some((e=>getSingleGlyphEffectFromBitmask("effarigrm",e))),t=this.glyphSet.some((e=>getSingleGlyphEffectFromBitmask("effarigglyph",e)));return e&&t?"both":e?"rm":t?"glyph":"none"},calculateGlyphPercent(e){const t=this.slotCount?100/this.slotCount:0;return"music"===e?this.glyphSet.filter((e=>Glyphs.isMusicGlyph(e))).length*t:this.glyphSet.filter((t=>t.type===e)).length*t},sortGlyphList(){this.$recompute("textColor"),this.glyphTypeList.forEach((e=>e.perc=this.calculateGlyphPercent(e.type))),this.sortedGlyphs=this.glyphTypeList.filter((e=>0!==e.perc));const e=e=>100*e.adjOrder+e.perc+e.type.charCodeAt(0)/1e3;this.sortedGlyphs.sort(((t,i)=>e(i)-e(t)))},getAdjective(e){if("effarig"===e.type)return xx.effarig.adjective[this.getEffarigProp()];const t=e=>e>=60?"high":e>=40?"mid":"low",i=xx[e.type].adjective;return"string"===typeof i?i:i[t(e.perc)]},getNoun(e){return"effarig"===e.type?xx.effarig.noun[this.getEffarigProp()]:xx[e.type].noun}}},Gx=Px;var Ux=(0,X.Z)(Gx,Mx,Ix,!1,null,null,null);const Bx=Ux.exports,Nx={name:"GlyphSetPreview",components:{GlyphComponent:Rx,GlyphSetName:Bx},props:{text:{type:String,required:!1,default:""},textHidden:{type:Boolean,required:!1,default:!1},glyphs:{type:Array,required:!0},ignoreModifiedLevel:{type:Boolean,required:!1,default:!1},flipTooltip:{type:Boolean,required:!1,default:!1},isInModal:{type:Boolean,required:!1,default:!1},showName:{type:Boolean,required:!1,default:!0},forceNameColor:{type:Boolean,required:!1,default:!0},showSacrifice:{type:Boolean,required:!1,default:!1},noneText:{type:String,required:!1,default:"(No Glyphs equipped)"},sort:{type:Boolean,required:!1,default:!0}},data(){return{realityGlyphBoost:0}},computed:{orderedGlyphs(){if(!this.sort)return this.glyphs;const e=["reality","effarig","power","infinity","replication","time","dilation","cursed","amalgam","companion"],t=Glyphs.copyForRecords(this.glyphs);return t.sort(((t,i)=>e.indexOf(t.type)-e.indexOf(i.type))),t}},watch:{glyphs(){this.$recompute("orderedGlyphs")}},methods:{update(){const e=this.glyphs.filter((e=>"reality"===e.type))[0];this.realityGlyphBoost=e?GlyphEffects.realityglyphlevel.effect(e.level):0},showModal(){this.isInModal||Modal.glyphShowcasePanel.show({name:this.text,glyphSet:this.glyphs,closeEvent:GAME_EVENT.GLYPH_SET_SAVE_CHANGE,displaySacrifice:this.showSacrifice})},glyphHash(){return Glyphs.hash(this.glyphs)}}},Ox=Nx;var Lx=(0,X.Z)(Ox,lx,cx,!1,null,"182ff48c",null);const Fx=Lx.exports,$x={name:"GlyphSetRecordsTab",components:{GlyphSetPreview:Fx},data(){return{recordGlyphInfo:[]}},methods:{update(){const e=player.records.bestReality,t=8-Laitela.difficultyTier;this.recordGlyphInfo=[[!0,Glyphs.copyForRecords(e.RMSet),"Best Reality Machines gained",`${format(e.RM,2,2)} RM`],[!0,Glyphs.copyForRecords(e.RMminSet),"Best Reality Machines per minute",`${format(e.RMmin,2,2)} RM/min`],[!0,Glyphs.copyForRecords(e.glyphLevelSet),"Best Glyph Level",`Level ${formatInt(e.glyphLevel)}`],[!0,Glyphs.copyForRecords(e.bestEPSet),"Highest Eternity Points",`${format(e.bestEP,2,2)} EP`],[!0,Glyphs.copyForRecords(e.speedSet),"Fastest Reality (real time)",`${TimeSpan.fromMilliseconds(e.realTime).toStringShort()}`],[player.celestials.teresa.bestRunAM.gt(1),Glyphs.copyForRecords(player.celestials.teresa.bestAMSet),`Highest Antimatter in ${Teresa.possessiveName} Reality`,`${format(player.celestials.teresa.bestRunAM,2,2)} Antimatter`],[Currency.imaginaryMachines.gt(0),Glyphs.copyForRecords(e.iMCapSet),"Highest Imaginary Machine cap",`${format(MachineHandler.currentIMCap,2,2)} iM`],[Laitela.isUnlocked,Glyphs.copyForRecords(e.laitelaSet),`Best ${Laitela.displayName} Destabilization`,`${TimeSpan.fromSeconds(player.celestials.laitela.fastestCompletion).toStringShort()},\n ${t} ${pluralize("Dimension",t)} (${formatX(Laitela.realityReward,2,2)} DM)`]]}}},Hx=$x;var qx=(0,X.Z)(Hx,rx,ox,!1,null,null,null);const Vx=qx.exports;var Yx=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("div",{staticClass:"l-glyphs-tab"},[i("div",{staticClass:"l-reality-button-column"},[i("GlyphPeek"),e.resetRealityDisplayed?i("div",{staticClass:"l-reality-button-group"},[e.isInCelestialReality?e._e():i("RealityAmplifyButton",{class:e.buttonGroupClass()}),i("ResetRealityButton",{class:e.buttonGroupClass()})],1):e._e(),e.isInCelestialReality?i("div",{staticClass:"l-celestial-auto-restart-checkbox"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.autoRestartCelestialRuns,expression:"autoRestartCelestialRuns"}],staticClass:"o-clickable",attrs:{id:"autoRestart",type:"checkbox"},domProps:{value:e.autoRestartCelestialRuns,checked:Array.isArray(e.autoRestartCelestialRuns)?e._i(e.autoRestartCelestialRuns,e.autoRestartCelestialRuns)>-1:e.autoRestartCelestialRuns},on:{input:function(t){return e.toggleAutoRestartCelestial()},change:function(t){var i=e.autoRestartCelestialRuns,a=t.target,n=!!a.checked;if(Array.isArray(i)){var s=e.autoRestartCelestialRuns,r=e._i(i,s);a.checked?r<0&&(e.autoRestartCelestialRuns=i.concat([s])):r>-1&&(e.autoRestartCelestialRuns=i.slice(0,r).concat(i.slice(r+1)))}else e.autoRestartCelestialRuns=n}}}),i("label",{staticClass:"o-clickable",attrs:{for:"autoRestart"}},[e._v(" Repeat this Celestial's Reality ")])]):e._e(),i("br"),i("RealityReminder"),e.showInstability?i("div",[i("br"),e._v(" Glyphs are becoming unstable. "),i("br"),e._v(" Glyph levels higher than "+e._s(e.formatInt(e.instabilityThreshold))+" are harder to reach. "),i("br"),e._v(" This effect is even stronger above level "+e._s(e.formatInt(e.hyperInstabilityThreshold))+". "),i("br"),e._v(" Glyphs are "),i("i",[e._v("harshly")]),e._v(" unstable past level "+e._s(e.formatInt(e.ultraInstabilityThreshold))+". "),i("br"),e._v(" Glyphs become so unstable at level "+e._s(e.formatInt(1e5))+" that it is near impossible to go higher. ")]):e._e(),i("SingleGlyphCustomzationPanel"),i("ExpandingControlBox",{staticClass:"l-glyph-level-factors",attrs:{"width-source":"content",label:"Glyph Level Factors","container-class":"c-glyph-level-factors-dropdown-header"},scopedSlots:e._u([{key:"dropdown",fn:function(){return[i("GlyphLevelsAndWeights")]},proxy:!0}])}),i("GlyphTabSidebar")],1),i("div",{staticClass:"l-player-glyphs-column"},[e.showEnslavedHint?i("div",{staticClass:"o-teresa-quotes",domProps:{innerHTML:e._s(e.enslavedHint)}}):e._e(),i("div",{staticClass:"l-equipped-glyphs-and-effects-container"},[i("EquippedGlyphs"),i("div",{staticClass:"l-glyph-info-wrapper"},[i("span",{staticClass:"l-glyph-color-box",on:{click:e.toggleGlyphTextColors}},[i("div",{class:e.glyphColorPosition()},[i("label",{class:e.glyphColorState},[i("span",{staticClass:"fas fa-palette"})])])]),e.sacrificeUnlocked?i("div",{staticClass:"c-glyph-info-options"},[i("button",{class:e.glyphInfoClass(!e.sacrificeDisplayed),on:{click:function(t){return e.setInfoState(!1)}}},[e._v(" Current Glyph effects ")]),i("button",{class:e.glyphInfoClass(e.sacrificeDisplayed),on:{click:function(t){return e.setInfoState(!0)}}},[e._v(" Glyph Sacrifice totals ")])]):e._e(),e.sacrificeUnlocked&&e.sacrificeDisplayed?i("SacrificedGlyphs"):i("CurrentGlyphEffects",{class:e.glyphInfoBorderClass()})],1)],1),i("GlyphInventory")],1)])])},Wx=[],jx=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-current-glyph-effects l-current-glyph-effects"},[i("div",{staticClass:"pelle-current-glyph-effects"},[e._v(" "+e._s(e.pelleGlyphText)+" ")]),i("div",{staticClass:"c-current-glyph-effects__header"},[e._v(" Currently active Glyph effects: ")]),i("GlyphSetName",{attrs:{"glyph-set":e.glyphSet}}),e.isSoftcapActive||e.hasEffarig||e.hasReality?i("br"):e._e(),i("span",{domProps:{innerHTML:e._s(e.uniqueGlyphText)}}),e.isSoftcapActive?i("div",{staticClass:"l-current-glyph-effects__capped-header"},[i("span",{staticClass:"c-current-glyph-effects__effect--capped"},[e._v("Italic")]),e._v(" effects have been slightly reduced due to a softcap ")]):e._e(),i("br"),e.noEffects?i("div",[e._v(" None (equip Glyphs to get their effects) ")]):e._e(),e._l(e.effects,(function(t){return i("CurrentGlyphEffect",{key:t.id+e.logTotalSacrifice,attrs:{effect:t,"is-colored":e.isColored}})})),e.showChaosText?i("div",{staticClass:"pelle-current-glyph-effects"},[e._v(" "+e._s(e.chaosEffect)+" ")]):e._e()],2)},Xx=[],zx=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("span",{class:e.valueClass,style:e.textColor},[e._v(" "+e._s(e.formatValue)+" ")])])},Kx=[];const Zx={name:"CurrentGlyphEffect",props:{isColored:{type:Boolean,default:!0},effect:{type:Object,required:!0}},computed:{effectConfig(){return GlyphEffects[this.effect.id]},formatValue(){if(this.effectConfig.isDisabledByDoomed&&!Ra.unlocks.unlockPelleGlyphEffects.isUnlocked||this.effectConfig.isDisabledByDoomedWithlvl25&&Ra.unlocks.unlockPelleGlyphEffects.isUnlocked)return"";const e=this.effect.value.value,t=this.effectConfig.formatEffect(e),i=void 0===this.effectConfig.conversion?"":this.effectConfig.formatSecondaryEffect(this.effectConfig.conversion(e)),a=this.effectConfig.totalDesc;return a.replace("{value}",t).replace("{value2}",i)},textColor(){if(!this.isColored)return{};const e="timeshardpow"===this.effectConfig.id?CosmeticGlyphTypes.time:CosmeticGlyphTypes[this.effectConfig.glyphTypes];let t=e.currentColor.border;return"cursed"===e.id&&(t="var(--color-celestials)"),"amalgam"===e.id&&(t="#000000"),{color:t,"text-shadow":`-1px 1px 1px var(--color-text-base), 1px 1px 1px var(--color-text-base),\n -1px -1px 1px var(--color-text-base), 1px -1px 1px var(--color-text-base),\n 0 0 3px ${e.currentColor.border}`,animation:"reality"===e.id?"a-reality-glyph-description-cycle 10s infinite":void 0}},valueClass(){return this.effect.value.capped?"c-current-glyph-effects__effect--capped":""}},created(){this.on$(GAME_EVENT.GLYPH_VISUAL_CHANGE,(()=>{this.$recompute("effectConfig")}))}},Qx=Zx;var Jx=(0,X.Z)(Qx,zx,Kx,!1,null,"731ba6a4",null);const eP=Jx.exports,tP=["powerpow","powermult","powerdimboost","powerbuy10","infinitypow","infinityinfmult","infinityIP","infinityrate","replicationpow","replicationdtgain","replicationspeed","replicationglyphlevel","timepow","timeshardpow","timeEP","timespeed","timeetermult","dilationpow","dilationTTgen","dilationDT","dilationgalaxyThreshold","effarigrm","effarigglyph","effarigblackhole","effarigachievement","effarigforgotten","effarigdimensions","effarigantimatter","cursedgalaxies","cursedtickspeed","curseddimensions","cursedEP","realityglyphlevel","realitygalaxies","realityrow1pow","realityDTglyph","companiondescription","companionEP"],iP={name:"CurrentGlyphEffects",components:{GlyphSetName:Bx,CurrentGlyphEffect:eP},data(){return{effects:[],isColored:!1,hasEffarig:!1,hasReality:!1,logTotalSacrifice:0,pelleChaosEffect:{},mm8:["one","Glyph"]}},computed:{isSoftcapActive(){return this.effects.length&&!this.effects.every((e=>!1===e.value.capped))},uniqueGlyphText(){if(!this.hasEffarig&&!this.hasReality)return"";const e=[];return this.hasEffarig&&e.push(`Effarig`),this.hasReality&&e.push('Reality'),"You cannot have more than "+this.mm8[0]+` ${e.join(" or ")} `+this.mm8[1]+" equipped"+(e.length>1?" each.":".")},noEffects(){return!this.effects.length},glyphSet(){return Glyphs.activeList},pelleGlyphText(){return Pelle.isDoomed?`Glyph Rarity is set to ${formatPercents(strengthToRarity(Pelle.glyphStrength))}\n and Level is capped at ${formatInt(Pelle.glyphMaxLevel)}`:""},showChaosText(){return this.pelleChaosEffect.isUnlocked&&!this.noEffects},chaosEffect(){return this.pelleChaosEffect.description}},watch:{logTotalSacrifice(){this.glyphsChanged()}},created(){this.on$(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED,this.glyphsChanged),this.glyphsChanged()},methods:{update(){this.mm8=hK.five.isReached?["two","Glyphs"]:["one","Glyph"],this.isColored=player.options.glyphTextColors,this.hasEffarig=Glyphs.active.some((e=>e&&"effarig"===e.type)),this.hasReality=Glyphs.active.some((e=>e&&"reality"===e.type)),this.logTotalSacrifice=GameCache.logTotalGlyphSacrifice.value,this.pelleChaosEffect=Pelle.specialGlyphEffect},glyphsChanged(){this.effects=getActiveGlyphEffects(),this.effects.sort(((e,t)=>tP.indexOf(e.id)-tP.indexOf(t.id)))}}},aP=iP;var nP=(0,X.Z)(aP,jx,Xx,!1,null,"37e90415",null);const sP=nP.exports;var rP=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-equipped-glyphs"},[i("div",{staticClass:"l-equipped-glyphs__slots"},e._l(e.glyphs,(function(t,a){return i("div",e._g({key:a,staticClass:"l-glyph-set-preview",style:e.glyphPositionStyle(a),on:{click:e.showEquippedModal}},e.dragEvents(a)),[i("div",{staticClass:"l-equipped-glyphs__dropzone"}),t?i("GlyphComponent",{key:a,staticClass:"c-equipped-glyph",attrs:{glyph:t,circular:!0,"is-active-glyph":!0},on:{clicked:function(i){return e.clickGlyph(t,a)},shiftClicked:function(i){return e.clickGlyph(t,a,!0)},ctrlShiftClicked:function(i){return e.clickGlyph(t,a,!0)}}}):i("div",{class:["l-equipped-glyphs__empty","c-equipped-glyphs__empty",{"c-equipped-glyphs__empty--dragover":e.dragoverIndex===a}]})],1)})),0),i("div",{staticClass:"l-equipped-glyphs__buttons"},[i("button",{staticClass:"c-reality-upgrade-btn",class:e.unequipClass,style:e.glyphRespecStyle,attrs:{"ach-tooltip":e.respecTooltip},on:{click:e.toggleRespec}},[e._v(" "+e._s(e.unequipText)+" ")]),e.undoVisible?i("button",{staticClass:"l-glyph-equip-button c-reality-upgrade-btn",class:{"c-reality-upgrade-btn--unavailable":!e.undoAvailable},attrs:{"ach-tooltip":e.undoTooltip},on:{click:e.undo}},[e._m(0)]):e._e(),i("button",{staticClass:"l-glyph-equip-button c-reality-upgrade-btn",on:{click:e.toggleRespecIntoProtected}},[e._v(" Unequip Glyphs to: "),i("br"),e.respecIntoProtected?i("span",[e._v("Protected slots")]):i("span",[e._v("Main inventory")])]),i("button",{staticClass:"l-glyph-equip-button-short c-reality-upgrade-btn",class:{"tutorial--glow":e.cosmeticGlow},on:{click:e.showOptionModal}},[e._v(" Open Glyph Visual Options ")])])])},oP=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[e._v("Rewind to "),i("b",[e._v("undo")]),e._v(" the last equipped Glyph")])}];const lP={name:"EquippedGlyphs",components:{GlyphComponent:Rx},data(){return{glyphs:[],dragoverIndex:-1,respec:player.reality.respec,respecIntoProtected:player.options.respecIntoProtected,undoSlotsAvailable:0,undoAvailable:!1,undoVisible:!1,cosmeticGlow:!1}},computed:{GLYPH_SIZE:()=>5,slotCount(){return this.glyphs.length},arrangementRadius(){return 0===this.slotCount?0:this.slotCount+1},respecTooltip(){const e=Pelle.isDoomed?"Armageddon":"Reality";return this.respec?`Respec is active and will place your currently - equipped Glyphs into your inventory after ${e}.`:`Your currently-equipped Glyphs will stay equipped on ${e}.`},undoTooltip(){return this.undoSlotsAvailable?this.undoAvailable?"Unequip the last equipped Glyph and rewind Reality to when you equipped it. (Most resources will be fully reset)":"Undo is only available for Glyphs equipped during this Reality":"You do not have available inventory space to unequip Glyphs to"},unequipText(){return Pelle.isDoomed?"Unequip Glyphs on Armageddon":"Unequip Glyphs on Reality"},isDoomed(){return Pelle.isDoomed},glyphRespecStyle(){return this.respec?{color:"var(--color-reality-light)","background-color":"var(--color-reality)","border-color":"#094e0b",cursor:"pointer"}:{cursor:"pointer"}},unequipClass(){return{"l-glyph-equip-button":this.isDoomed,"l-glyph-equip-button-short":!this.isDoomed}}},created(){this.on$(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED,this.glyphsChanged),this.glyphsChanged()},methods:{update(){this.respec=player.reality.respec,this.respecIntoProtected=player.options.respecIntoProtected,this.undoSlotsAvailable=this.respecIntoProtected?Glyphs.totalSlots-GameCache.glyphInventorySpace.value-Glyphs.inventoryList.length>0:GameCache.glyphInventorySpace.value>0,this.undoVisible=TeresaUnlocks.undo.canBeApplied,this.undoAvailable=this.undoVisible&&this.undoSlotsAvailable&&player.reality.glyphs.undo.length>0,this.cosmeticGlow=player.reality.glyphs.cosmetics.glowNotification},glyphPositionStyle(e){const t=(e,t=this.slotCount,i=this.arrangementRadius)=>-this.GLYPH_SIZE/2+i*Math.sin(2*Math.PI*e/t),i=(e,t=this.slotCount,i=this.arrangementRadius)=>-this.GLYPH_SIZE/2+i*Math.cos(2*Math.PI*e/t);let a=t(e),n=i(e);switch(this.slotCount){case 7:e>0?(a=t(e-1,6,7),n=i(e-1,6,7)):(a=-this.GLYPH_SIZE/2,n=-this.GLYPH_SIZE/2);break;case 8:const s=t(5),r=i(5),o=t(1),l=i(1);a=ao?o:a,n=nl?l:n;break}return{position:"absolute",left:`calc(50% + ${a}rem)`,top:`calc(50% + ${n}rem)`,"z-index":1}},dragover(e,t){e.dataTransfer.types.includes(GLYPH_MIME_TYPE)&&(e.preventDefault(),this.dragoverIndex=t)},dragleave(e){this.dragoverIndex===e&&(this.dragoverIndex=-1)},drop(e,t){this.dragoverIndex=-1;const i=parseInt(e.dataTransfer.getData(GLYPH_MIME_TYPE),10);if(isNaN(i))return;const a=Glyphs.findById(i);a&&Glyphs.equip(a,t)},toggleRespec(){player.reality.respec=!player.reality.respec},toggleRespecIntoProtected(){player.options.respecIntoProtected=!player.options.respecIntoProtected},glyphsChanged(){this.glyphs=Glyphs.active.map(GlyphGenerator.copy),this.$recompute("slotCount")},undo(){this.undoAvailable&&!Pelle.isDoomed&&(player.options.confirmations.glyphUndo?Modal.glyphUndo.show():Glyphs.undo())},dragEvents(e){return{dragover:t=>this.dragover(t,e),dragleave:()=>this.dragleave(e),drop:t=>this.drop(t,e)}},showEquippedModal(){0!==this.glyphs.filter((e=>e)).length&&Modal.glyphShowcasePanel.show({name:"Equipped Glyphs",glyphSet:this.glyphs,closeEvent:GAME_EVENT.GLYPHS_EQUIPPED_CHANGED})},showOptionModal(){player.reality.glyphs.cosmetics.glowNotification=!1,Modal.glyphDisplayOptions.show()},clickGlyph(e,t,i=!1){if(Glyphs.isMusicGlyph(e)){const e=t+(i?6:1);new Audio(`audio/note${e}.mp3`).play()}}}},cP=lP;var uP=(0,X.Z)(cP,rP,oP,!1,null,"1a7f95d2",null);const dP=uP.exports;var hP=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-glyph-inventory"},[e._v(" Click and drag or double-click to equip Glyphs. "),e._l(e.rowCount,(function(t){return i("div",{key:e.protectedRows+t,staticClass:"l-glyph-inventory__row"},e._l(e.colCount,(function(a){return i("div",{key:a,staticClass:"l-glyph-inventory__slot",class:e.slotClass(e.toIndex(t,a)),on:{dragover:e.allowDrag,drop:function(i){e.drop(e.toIndex(t,a),i)}}},[e.inventory[e.toIndex(t,a)]?i("GlyphComponent",{attrs:{glyph:e.inventory[e.toIndex(t,a)],"is-new":e.isNew(e.toIndex(t,a)),"is-unequipped":e.isUnequipped(e.toIndex(t,a)),"is-inventory-glyph":!0,"show-sacrifice":e.glyphSacrificeUnlocked,draggable:!0},on:{shiftClicked:function(t){return e.removeGlyph(t,!1)},ctrlShiftClicked:function(t){return e.removeGlyph(t,!0)},clicked:function(t){return e.clickGlyph(a,t)}}}):e._e()],1)})),0)}))],2)},mP=[];const pP={name:"GlyphInventory",components:{GlyphComponent:Rx},data(){return{inventory:[],newGlyphs:[],unequippedGlyphs:[],doubleClickTimeOut:null,clickedGlyphId:null,glyphSacrificeUnlocked:!1,protectedRows:0}},computed:{rowCount:()=>Glyphs.totalSlots/10,colCount:()=>10},created(){this.on$(GAME_EVENT.GLYPHS_CHANGED,this.glyphsChanged),this.on$(GAME_EVENT.GLYPH_VISUAL_CHANGE,this.glyphsChanged),this.glyphsChanged()},methods:{update(){this.glyphSacrificeUnlocked=GlyphSacrificeHandler.canSacrifice,this.protectedRows=player.reality.glyphs.protectedRows,this.newGlyphs=Glyphs.unseen,this.unequippedGlyphs=Glyphs.unequipped},toIndex(e,t){return(e-1)*this.colCount+(t-1)},allowDrag(e){e.dataTransfer.types.includes(GLYPH_MIME_TYPE)&&e.preventDefault()},drop(e,t){const i=parseInt(t.dataTransfer.getData(GLYPH_MIME_TYPE),10);if(isNaN(i))return;const a=Glyphs.findById(i);a&&Glyphs.moveToSlot(a,e)},removeGlyph(e,t){GlyphSacrificeHandler.removeGlyph(Glyphs.findById(e),t)},clickGlyph(e,t){const i=Glyphs.findById(t);if(this.doubleClickTimeOut){if(this.clickedGlyphId===t){clearTimeout(this.doubleClickTimeOut),this.doubleClickTimeOut=null;const e=Glyphs.active.indexOf(null);-1!==e&&Glyphs.equip(i,e)}}else{if(this.doubleClickTimeOut=setTimeout((()=>{this.clickedGlyphId=null,this.doubleClickTimeOut=null}),200),this.clickedGlyphId=t,!i)return;Glyphs.isMusicGlyph(i)&&new Audio(`audio/note${e}.mp3`).play()}},glyphsChanged(){this.inventory=Glyphs.inventory.map(GlyphGenerator.copy)},slotClass(e){return e0,this.achievementVisible=e.achievementFactor>0,1!==e.scalePenalty?(this.penaltyVisible=!0,this.lastInstability=Date.now()):this.penaltyVisible&&Date.now()-this.lastInstability>2e3&&(this.penaltyVisible=!1),this.rows=this.visibleRows.length,this.adjustVisible&&this.rows<7&&(this.rows=7),this.factors=e,this.shardsGained=Effarig.shardsGained;let t=!0;this.glyphWeightFields.forEach((e=>{this.weights[e]!==player.celestials.effarig.glyphWeights[e]&&(t=!1),this.weights[e]=player.celestials.effarig.glyphWeights[e]})),t||this.resetSavedWeights(),this.showAutoAdjustWeights=ate(165).isUnlocked,this.isAutoAdjustWeightsOn=player.celestials.effarig.autoAdjustGlyphWeights,this.has193=ate(193).isUnlocked},rowStyle(e){const t=this.visibleRows.findIndex((t=>t===e))+1;return 0===t?this.makeRowStyle(e):this.makeRowStyle(t)},formatFactor(e){return Notations.current.isPainful||e>1e3?format(e,2,2):e.toPrecision(5).slice(0,6)},formatLevel(e){return e>1e3?formatInt(Math.floor(e)):format(e,2,4)},makeRowStyle(e){return{"grid-row":e,"-ms-grid-row":e}},resetWeightsButtonClass(){return{"c-glyph-levels-and-weights__reset-btn":!0,"c-glyph-levels-and-weights__reset-btn-clickable":!this.isAutoAdjustWeightsOn}},resetWeights(){this.glyphWeightFields.forEach((e=>player.celestials.effarig.glyphWeights[e]=25)),this.resetSavedWeights()},adjustSlider(e,t){if(this.weights[e]===t)return;e!==this.lastAdjusted&&(this.resetSavedWeights(),this.savedWeights[e]=0,this.lastAdjusted=e);const i=this.weights.ep+this.weights.repl+this.weights.dt+this.weights.eternities,a=this.weights[e],n=i-a;if(n+t>100){const i=this.savedWeights.ep+this.savedWeights.repl+this.savedWeights.dt+this.savedWeights.eternities,a=(100-t)/i,n=[];this.glyphWeightFields.forEach((t=>{t!==e&&n.push(this.savedWeights[t]*a)})),SP(n),this.glyphWeightFields.forEach((t=>{t!==e&&(player.celestials.effarig.glyphWeights[t]=n.shift())}))}player.celestials.effarig.glyphWeights[e]=t},resetSavedWeights(){this.savedWeights=Object.assign({},player.celestials.effarig.glyphWeights),this.lastAdjusted=null},factorString(e){const t=this.adjustVisible?e.name.substring(0,4):e.name;return`${format(e.coeff,2,4)}×${t}^${format(e.exp,2,3)}`}}};function SP(e){for(let t=0;te.id)),advancedType:GLYPH_TYPES[0],alchemyUnlocked:!1,rarityThresholds:GLYPH_TYPES.mapToObject((e=>e),(()=>0)),autoRealityForFilter:player.options.autoRealityForFilter}},computed:{modes(){return AUTO_GLYPH_SCORE},glyphTypes(){return GlyphTypes.list.filter((e=>!this.lockedTypes.includes(e.id)))},raritySliderProps(){return{min:0,max:100,width:"18rem",valueInDot:!0,tooltip:"never","dot-width":"2.2rem","dot-height":"1.6rem","dot-class":"c-glyph-sacrifice-options__rarity-slider-handle","bg-class":"c-glyph-sacrifice-options__rarity-slider-bg","process-class":"c-glyph-sacrifice-options__rarity-slider-process",style:{"margin-left":"1rem"}}},glyphIconProps(){return{size:"3rem","glow-blur":"0.3rem","glow-spread":"0.1rem","text-proportion":.66}},questionmarkTooltip(){return"All Glyph choices are given a score and compared to a threshold based on the chosen mode. \n The Glyph with the highest score is picked, but will still be Sacrificed if below the threshold.\n (click for more detail)"},autoRealityTooltip(){return"If Auto-Reality is on, ignore all other settings and immediately Reality if no upcoming\n Glyphs would be kept"},unlockedModes(){return Object.values(this.modes).filter((e=>this.isUnlocked(e)))}},methods:{update(){this.effectCount=player.reality.glyphs.filter.simple,this.mode=AutoGlyphProcessor.scoreMode;for(const e of generatedTypes)this.rarityThresholds[e]=AutoGlyphProcessor.types[e].rarity;this.lockedTypes=GlyphTypes.locked.map((e=>e.id)),this.alchemyUnlocked=Ra.unlocks.unlockGlyphAlchemy.canBeApplied},optionClass(e){const t=this.modeIcon(e);return["c-glyph-sacrifice-options__option",e===this.mode?"c-glyph-sacrifice-options__option--active":"c-glyph-sacrifice-options__option--inactive",t]},modeIcon(e){switch(e){case this.modes.LOWEST_SACRIFICE:return"fas fa-burn";case this.modes.EFFECT_COUNT:return"fas fa-list-ul";case this.modes.RARITY_THRESHOLD:return"fas fa-gem";case this.modes.SPECIFIED_EFFECT:return"fas fa-tasks";case this.modes.EFFECT_SCORE:return"fas fa-list-ol";case this.modes.LOWEST_ALCHEMY:return"fas fa-atom";case this.modes.ALCHEMY_VALUE:return"fas fa-flask";default:throw Error("Unrecognized glyph filter mode")}},strengthThreshold(e){return rarityToStrength(this.rarityThresholds[e])},advancedTypeSelectStyle(e){const t=GlyphAppearanceHandler.getBorderColor(e.id);return e.id===this.advancedType?{color:t,"text-shadow":`0 0 0.25rem ${t}, 0 0 0.5rem ${t}, 0 0 0.75rem ${t}, 0 0 1rem ${t}`}:{}},setMode(e){AutoGlyphProcessor.scoreMode=e,player.reality.hasCheckedFilter=!1},setRarityThreshold(e,t){AutoGlyphProcessor.types[e].rarity=t},setEffectCount(e){const t=e.target.value;isNaN(t)||(this.effectCount=Math.clamp(t,0,8),player.reality.glyphs.filter.simple=this.effectCount)},filterMode(e){return AutoGlyphProcessor.filterModeName(e)},isUnlocked(e){switch(e){case this.modes.LOWEST_SACRIFICE:case this.modes.EFFECT_COUNT:case this.modes.RARITY_THRESHOLD:case this.modes.SPECIFIED_EFFECT:case this.modes.EFFECT_SCORE:return!0;case this.modes.LOWEST_ALCHEMY:case this.modes.ALCHEMY_VALUE:return this.alchemyUnlocked;default:throw Error("Unrecognized glyph filter mode")}},bumpRarity(e){const t=GlyphRarities.map((e=>strengthToRarity(e.minStrength)));let i;if(ui.view.shiftDown){const a=t.filter((t=>tt>this.rarityThresholds[e])).min();this.setRarityThreshold(e,i)},showFilterHowTo(){ui.view.h2pForcedTab=GameDatabase.h2p.tabs.filter((e=>"Advanced Glyph Mechanics"===e.name))[0],Modal.h2p.show()},getSymbol(e){return CosmeticGlyphTypes[e].currentSymbol.symbol},toggleAutoReality(){player.options.autoRealityForFilter=!player.options.autoRealityForFilter,this.autoRealityForFilter=player.options.autoRealityForFilter,player.reality.hasCheckedFilter=!1},exportFilterSettings(){const e=player.reality.glyphs.filter,t=e=>[e.rarity,e.score,e.effectCount,e.specifiedMask,e.effectScores.join("/")].join(","),i=[e.select,e.simple,e.trash].join("|"),a=ALCHEMY_BASIC_GLYPH_TYPES.map((i=>t(e.types[i]))).join("|");copyToClipboard(GameSaveSerializer.encodeText(`${i}|${a}`,"glyph filter")),GameUI.notify.info("Filter settings copied to clipboard")},importFilterSettings(){Modal.importFilter.show()}}},rG=sG;var oG=(0,X.Z)(rG,LP,FP,!1,null,"0b797f07",null);const lG=oG.exports;var cG=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.groupClass},[i("GlyphSortButtonGroup"),i("GlyphProtectedRowButtonGroup"),i("GlyphAutosortButtonGroup"),i("GlyphCleanButtonGroup")],1)},uG=[],dG=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"o-glyph-inventory-management-group"},[i("div",{staticClass:"l-glyph-sacrifice-options__header"},[i("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.questionMarkTooltip,expression:"questionMarkTooltip"}],staticClass:"o-questionmark"},[e._v(" ? ")]),e._v(" Auto Glyph Arrangement: ")]),i("ButtonCycle",{staticClass:"c-glyph-inventory-option",attrs:{text:"Auto-sort Mode:",labels:e.sortModes},model:{value:e.autoSort,callback:function(t){e.autoSort=t},expression:"autoSort"}}),i("ToggleButton",{staticClass:"c-glyph-inventory-option",attrs:{label:"Auto-collapse space:"},model:{value:e.autoCollapse,callback:function(t){e.autoCollapse=t},expression:"autoCollapse"}}),e.showAutoAutoClean?i("ToggleButton",{staticClass:"c-glyph-inventory-option",attrs:{label:"Auto-purge on Realities:"},model:{value:e.autoAutoClean,callback:function(t){e.autoAutoClean=t},expression:"autoAutoClean"}}):e._e(),e.showAutoAutoClean?i("ToggleButton",{staticClass:"c-glyph-inventory-option",attrs:{label:"Never Auto-purge Glyphs accepted by filter:","tooltip-class":"c-glyph-inventory-option__tooltip","tooltip-content":e.keepTooltip},model:{value:e.applyFilterToPurge,callback:function(t){e.applyFilterToPurge=t},expression:"applyFilterToPurge"}}):e._e(),e.showAutoEquip?i("ButtonCycle",{staticClass:"c-glyph-inventory-option",attrs:{text:"Auto-equip Mode:",labels:e.sortModes},model:{value:e.autoEquip,callback:function(t){e.autoEquip=t},expression:"autoEquip"}}):e._e()],1)},hG=[],mG=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",e._b({on:{click:e.handleClick}},"button",e.$attrs,!1),[e._v(" "+e._s(e.displayText)+" ")])},pG=[];const yG={name:"ButtonCycle",props:{text:{type:String,required:!0},labels:{type:Array,required:!0},value:{type:Number,required:!0}},computed:{displayText(){return`${this.text} ${this.labels[this.value]}`.trim()}},methods:{handleClick(){this.emitInput((this.value+1)%this.labels.length)}}},fG=yG;var gG=(0,X.Z)(fG,mG,pG,!1,null,null,null);const vG=gG.exports,bG={name:"GlyphAutosortButtonGroup",components:{ToggleButton:AP,ButtonCycle:vG},data(){return{autoSort:0,showScoreFilter:!1,autoCollapse:!1,showAutoAutoClean:!1,autoAutoClean:!1,applyFilterToPurge:!1,showAutoEquip:!1,autoEquip:0}},computed:{sortModes(){const e=["NONE","LEVEL","POWER","EFFECT"];return this.showScoreFilter&&e.push("SCORE"),e},questionMarkTooltip(){return"The automatic settings below will apply after every Reality"},keepTooltip(){return"If set to ON, Glyphs which your filter accepts will never be auto-purged even if they are worse"}},watch:{autoSort(e){player.reality.autoSort=e},autoCollapse(e){player.reality.autoCollapse=e},autoAutoClean(e){player.reality.autoAutoClean=e},applyFilterToPurge(e){player.reality.applyFilterToPurge=e},autoEquip(e){player.reality.autoEquip=e}},methods:{update(){this.autoSort=player.reality.autoSort,this.showScoreFilter=EffarigUnlock.glyphFilter.isUnlocked,this.autoCollapse=player.reality.autoCollapse,this.showAutoAutoClean=VUnlocks.autoAutoClean.canBeApplied,this.autoAutoClean=player.reality.autoAutoClean,this.applyFilterToPurge=player.reality.applyFilterToPurge,this.showAutoEquip=Effarig.currentStage>=6,this.autoEquip=player.reality.autoEquip}}},EG=bG;var TG=(0,X.Z)(EG,dG,hG,!1,null,"38392132",null);const wG=TG.exports;var kG=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.glyphSacrificeUnlocked?i("div",{staticClass:"o-glyph-inventory-management-group"},[i("div",{staticClass:"l-glyph-sacrifice-options__header"},[e._v(" Remove weaker Glyphs: ")]),i("button",{staticClass:"c-glyph-inventory-option",on:{click:e.autoClean}},[e._v(" Purge Glyphs "),i("div",{staticClass:"c-glyph-inventory-option__tooltip"},[e._v(" "+e._s(e.autoCleanTooltip)+" ")])]),i("button",{staticClass:"c-glyph-inventory-option",on:{click:e.harshAutoClean}},[e._v(" Harsh Purge Glyphs "),i("div",{staticClass:"c-glyph-inventory-option__tooltip"},[e._v(" "+e._s(e.harshAutoCleanTooltip)+" ")])]),i("button",{staticClass:"c-glyph-inventory-option",on:{click:e.deleteAllUnprotected}},[e._v(" "+e._s(e.removeString)+" all unprotected Glyphs ")]),e.hasFilter?i("button",{staticClass:"c-glyph-inventory-option",on:{click:e.deleteAllRejected}},[e._v(" "+e._s(e.removeString)+" all Glyphs rejected by filtering "),i("div",{staticClass:"c-glyph-inventory-option__tooltip l-rejected-tooltip"},[e._v(" "+e._s(e.deleteRejectedTooltip)+" ")])]):e._e()]):e._e()},CG=[];const AG={name:"GlyphCleanButtonGroup",data(){return{glyphSacrificeUnlocked:!1,hasPerkShop:!1,hasFilter:!1,inventory:[],isRefining:!1,removeCount:0}},computed:{removeString(){return this.isRefining?"Refine":this.glyphSacrificeUnlocked?"Sacrifice":"Delete"},autoCleanTooltip(){return`${this.removeString} Glyphs that are worse in every way than\n enough other Glyphs${this.hasPerkShop?" (ignores Music Glyphs)":""}`},harshAutoCleanTooltip(){return`${this.removeString} Glyphs that are worse in every way than\n ANY other Glyph${this.hasPerkShop?" (includes Music Glyphs)":""}`},deleteRejectedTooltip(){const e=AutoGlyphProcessor.hasNegativeEffectScore()?" You also have some negative Effect Filter scores; this may remove some Glyphs you normally want to keep!":"";return 0===this.removeCount?"This will not remove any Glyphs, adjust your Filter settings to remove some.":`This will remove ${quantifyInt("Glyph",this.removeCount)}!${e}`}},methods:{update(){this.glyphSacrificeUnlocked=GlyphSacrificeHandler.canSacrifice&&!Pelle.isDoomed,this.hasPerkShop=TeresaUnlocks.shop.canBeApplied,this.hasFilter=EffarigUnlock.glyphFilter.isUnlocked,this.inventory=Glyphs.inventory.map(GlyphGenerator.copy),this.isRefining=AutoGlyphProcessor.sacMode===AUTO_GLYPH_REJECT.REFINE||AutoGlyphProcessor.sacMode===AUTO_GLYPH_REJECT.REFINE_TO_CAP,this.removeCount=this.inventory.filter((e=>null!==e&&e.idx>=Glyphs.protectedSlots&&!AutoGlyphProcessor.wouldKeep(e))).length},autoClean(){player.options.confirmations.autoClean?Modal.glyphPurge.show({harsh:!1}):Glyphs.autoClean(Glyphs.maxSlots)},harshAutoClean(){player.options.confirmations.autoClean?Modal.glyphPurge.show({harsh:!0}):Glyphs.autoClean(1)},deleteAllUnprotected(){player.options.confirmations.sacrificeAll?Modal.deleteAllUnprotectedGlyphs.show():Glyphs.autoClean(0)},deleteAllRejected(){player.options.confirmations.sacrificeAll?Modal.deleteAllRejectedGlyphs.show():Glyphs.deleteAllRejected(!0)},slotClass(e){return e0,this.effects=player.options.ignoreGlyphEffects,this.rarity=player.options.ignoreGlyphRarity,this.level=player.options.ignoreGlyphLevel},refreshGlyphSets(){this.glyphSets=player.reality.glyphs.sets.map((e=>Glyphs.copyForRecords(e.glyphs)))},setName(e){const t=""===this.names[e]?"":`: ${this.names[e]}`;return`Glyph Preset #${e+1}${t}`},saveGlyphSet(e){this.hasEquipped&&!player.reality.glyphs.sets[e].glyphs.length&&(player.reality.glyphs.sets[e].glyphs=Glyphs.active.compact(),this.refreshGlyphSets(),EventHub.dispatch(GAME_EVENT.GLYPH_SET_SAVE_CHANGE))},loadGlyphSet(e,t){if(!this.setLengthValid(e))return;let i=[...e];const a=[...Glyphs.active.filter((e=>e))],n=[];for(const y of a){const e=Glyphs.findByValues(y,i,{level:this.level?-1:0,strength:this.rarity?-1:0,effects:this.effects?-1:0});n.push({glyph:y,options:e})}const s=this.findSelectedGlyphs(n,5);for(const y of s)i=i.filter((e=>e!==y));const r=[];for(let y=0;ynull===e)));let l=0,c=o,u=1;MendingMilestone.five.isReached&&(u=2);let d=u,h=u,m=0;for(const y of o){for(const e of Glyphs.active)null!=e&&(0!=d&&"effarig"==y.type&&y.type==e.type&&(d-=1,c.splice(m-l,1),l++),0!=h&&"reality"==y.type&&y.type==e.type&&(h-=1,c.splice(m-l,1),l++));m++}for(const y of c)i=i.filter((e=>e!==y));let p=i.length;for(const y of o){const e=Glyphs.active.indexOf(null);-1!==e&&(Glyphs.equip(y,e),p--)}p>0?GameUI.notify.error(`Could not find or equip ${p} ${pluralize("Glyph",p)} from\n ${this.setName(t)}.`):GameUI.notify.success(`Successfully loaded ${this.setName(t)}.`)},findSelectedGlyphs(e,t){const i=e=>1e3*(10*e.glyph.type.length+e.glyph.type.codePointAt(0))+e.options.length;e.sort(((e,t)=>i(e)-i(t)));const a=[];let n=t;for(let s=0;s1,r=t.options.filter((e=>!a.includes(e)));if(0===r.length)continue;const o=r[i?0:r.length-1];a.push(o),n--}return a},deleteGlyphSet(e){player.reality.glyphs.sets[e].glyphs.length&&(player.options.confirmations.deleteGlyphSetSave?Modal.glyphSetSaveDelete.show({glyphSetId:e}):(player.reality.glyphs.sets[e].glyphs=[],this.refreshGlyphSets(),EventHub.dispatch(GAME_EVENT.GLYPH_SET_SAVE_CHANGE)))},nicknameBlur(e){player.reality.glyphs.sets[e.target.id].name=e.target.value.slice(0,20),this.names[e.target.id]=player.reality.glyphs.sets[e.target.id].name,this.refreshGlyphSets()},setLengthValid(e){return e.length&&e.length<=Glyphs.activeSlotCount},loadingTooltip(e){return this.setLengthValid(e)&&this.hasEquipped?"This set may not load properly because you already have some Glyphs equipped":null},glyphSetKey(e,t){return`${t} ${Glyphs.hash(e)}`}}},tU=eU;var iU=(0,X.Z)(tU,QG,JG,!1,null,"3c1a8770",null);const aU=iU.exports,nU={name:"GlyphTabSidebar",components:{GlyphInventoryManagementPanel:YG,GlyphFilterPanel:lG,GlyphSetSavePanel:aU,GlyphRejectionPanel:ZG},data(){return{type:0,sidebarEnum:{},unlockedFilter:!1,unlockedSets:!1,unlockedAlchemy:!1,hasMoreOptions:!1,hasRefined:!1}},computed:{isDoomed(){return Pelle.isDoomed}},methods:{update(){this.type=player.reality.showSidebarPanel,this.sidebarEnum=GLYPH_SIDEBAR_MODE,this.unlockedFilter=EffarigUnlock.glyphFilter.isUnlocked,this.unlockedSets=EffarigUnlock.setSaves.isUnlocked,this.unlockedAlchemy=Ra.unlocks.unlockGlyphAlchemy.canBeApplied,this.hasMoreOptions=this.unlockedFilter||this.unlockedSets||this.unlockedAlchemy,this.hasRefined=AlchemyResources.all.map((e=>e.amount)).some((e=>e>0))},setSidebarState(e){player.reality.showSidebarPanel=e},sidebarClass(e){return{"l-glyph-sidebar-button":!0,"c-glyph-sidebar-button":!0,"c-glyph-sidebar-button--active":e===player.reality.showSidebarPanel,"l-glyph-sidebar-button--attention":e===this.sidebarEnum.SACRIFICE_TYPE&&!this.hasRefined&&!this.isDoomed}}}},sU=nU;var rU=(0,X.Z)(sU,NP,OP,!1,null,"083c41f9",null);const oU=rU.exports;var lU=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("button",{class:e.buttonClass,attrs:{"ach-tooltip":e.tooltip},on:{click:e.toggleActive}},[e.isDoomed?i("div",[e._v(" You cannot amplify Doomed Realities. ")]):e.canAmplify?i("div",[e.isActive?i("span",[e._v("Will be amplified:")]):i("span",[e._v("Amplify this Reality:")]),i("br"),e._v(" All rewards ×"+e._s(e.formatInt(e.ratio))+" ")]):i("div",[e._v(" Not enough stored real time to amplify. ")])]):e._e()},cU=[];const uU={name:"RealityAmplifyButton",data:()=>({isDoomed:!1,isVisible:!1,isDisabled:!1,isActive:!1,ratio:1,canAmplify:!1}),computed:{tooltip(){return this.isDoomed?"You cannot amplify a Doomed Reality":this.isDisabled?"You cannot amplify Celestial Realities":this.canAmplify?null:"Store more real time or complete the Reality faster to amplify"},buttonClass(){return{"l-reality-amplify-button":!0,"l-reality-amplify-button--clickable":!this.isDoomed&&this.canAmplify,"o-enslaved-mechanic-button--storing-time":this.isActive}}},methods:{update(){this.isDoomed=Pelle.isDoomed,this.isVisible=Enslaved.isUnlocked,this.isDisabled=isInCelestialReality(),this.isActive=Enslaved.boostReality,this.ratio=Enslaved.realityBoostRatio,this.canAmplify=Enslaved.canAmplify},toggleActive(){this.canAmplify&&(Enslaved.boostReality=!Enslaved.boostReality)}}},dU=uU;var hU=(0,X.Z)(dU,lU,cU,!1,null,"e1d64202",null);const mU=hU.exports;var pU=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("div",{class:e.realityReminderClass,style:e.styleObject,on:{click:e.clicked}},[e.canReality?0===e.suggestions.length?i("span",[e._v(" Ready to Reality! You have unlocked every available upgrade within this Reality. ")]):i("span",[i("i",{class:e.dropDownIconClass}),e._v(" You have "+e._s(e.quantifyInt("thing",e.suggestions.length))+" you may want to do before Reality. "+e._s(e.clickText)+" "),e.isExpanded?i("div",{staticClass:"l-suggestions"},[i("br"),e._l(e.suggestions,(function(t){return i("div",{key:t},[e._v(" "+e._s(t)+" ")])}))],2):e._e()]):i("span",[e._v(" You still need to unlock Reality in the Time Study Tree. ")])]):e._e()},yU=[];const fU={name:"RealityReminder",data(){return{canReality:!1,isVisible:!1,isExpanded:!1,epMultCapped:!1,ecCount:0,missingAchievements:0,unpurchasedDilationUpgrades:0,currLog10EP:0,cheapestLog10TD:0,multEPLog10Cost:0,purchasableTS:0,hasDilated:0,availableCharges:0,availableBreakCharges:0,isContinuumActive:!1}},computed:{suggestions(){const e=[];return this.purchasableTS>0&&e.push(`Purchase more Time Studies (${formatInt(this.purchasableTS)} available)`),this.missingAchievements>0&&e.push(`Complete the rest of your Achievements (${formatInt(this.missingAchievements)} left)`),this.unpurchasedDilationUpgrades>0&&e.push(`Purchase the remaining Dilation Upgrades (${formatInt(this.unpurchasedDilationUpgrades)} left)`),!this.isContinuumActive&&this.currLog10EP>1.3*this.cheapestLog10TD&&e.push(`Purchase more TDs (cheapest: ${format(Decimal.pow10(this.cheapestLog10TD))} EP)`),!this.epMultCapped&&this.currLog10EP>1.3*this.multEPLog10Cost&&e.push(`Purchase more ${formatX(5)} EP (cost: ${format(Decimal.pow10(this.multEPLog10Cost))} EP)`),this.ecCount<60&&e.push(`Finish the rest of your ECs (Done: ${formatInt(this.ecCount)}/${formatInt(60)})`),this.hasDilated||e.push("Perform a Dilated Eternity"),this.availableCharges>0&&e.push(`Charge more Infinity Upgrades (${formatInt(this.availableCharges)} available)`),this.availableBreakCharges>0&&e.push(`Charge more Break Infinity Upgrades (${formatInt(this.availableBreakCharges)} available)`),e},canBeExpanded(){return this.canReality&&0!==this.suggestions.length},styleObject(){const e=!this.canReality||this.canBeExpanded?"var(--color-bad)":"var(--color-good)",t=this.canBeExpanded&&this.isExpanded?6.5+1.5*this.suggestions.length+"rem":"5rem";return{color:e,height:t}},clickText(){return`(click to ${this.isExpanded?"collapse":"expand"})`},realityReminderClass(){return{"c-reality-reminder":!0,"c-reality-reminder-pointer":this.canBeExpanded}},dropDownIconClass(){return this.isExpanded?"far fa-minus-square":"far fa-plus-square"}},created(){this.on$(GAME_EVENT.REALITY_RESET_AFTER,(()=>this.isExpanded=!1))},methods:{update(){this.canReality=TimeStudy.reality.isBought,this.isVisible=!isInCelestialReality(),this.ecCount=EternityChallenges.completions,this.missingAchievements=Achievements.preReality.countWhere((e=>!e.isUnlocked)),this.unpurchasedDilationUpgrades=DilationUpgrade.all.countWhere((e=>(void 0===e.isBought?0===e.boughtAmount:!e.isBought)&&!e.config.pelleOnly)),this.epMultCapped=EternityUpgrade.epMult.isCapped,this.currLog10EP=player.eternityPoints.log10(),this.cheapestLog10TD=Math.min(...TimeDimensions.all.filter((e=>e.isCapped.false)).map((e=>e.cost.log10()))),this.multEPLog10Cost=EternityUpgrade.epMult.cost.log10(),this.purchasableTS=NormalTimeStudyState.studies.countWhere((e=>e&&e.canBeBought&&!e.isBought)),this.hasDilated=Perk.startTP.canBeApplied?player.dilation.lastEP.gt(0):player.dilation.tachyonParticles.gt(0),this.availableCharges=Ra.chargesLeft,this.availableBreakCharges=Ra.breakChargesLeft,this.isContinuumActive=Ra.continuumActive},clicked(){this.canBeExpanded&&(this.isExpanded=!this.isExpanded)}}},gU=fU;var vU=(0,X.Z)(gU,pU,yU,!1,null,"fc08f092",null);const bU=vU.exports;var EU=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{class:["l-reset-reality-button","c-reset-reality-button",{"c-reset-reality-button-celestial":e.isInCelestialReality}],on:{click:e.resetReality}},[i("div",{staticClass:"l-reality-button__contents"},[e._v(" "+e._s(e.resetText)+" ")])])},TU=[];const wU={name:"ResetRealityButton",data(){return{canReality:!1,resetCelestial:!1,isInCelestialReality:!1,isDoomed:!1}},computed:{resetText(){return this.isDoomed?"Start this Armageddon over":this.isInCelestialReality&&!this.resetCelestial?"Exit this Celestial early":this.isInCelestialReality&&this.resetCelestial?"Restart this Celestial":"Start this Reality over"}},methods:{update(){this.canReality=TimeStudy.reality.isBought&&player.records.thisReality.maxEP.exponent>=4e3,this.resetCelestial=player.options.retryCelestial,this.isInCelestialReality=isInCelestialReality(),this.isDoomed=Pelle.isDoomed},resetReality(){const e=player.options.confirmations;GameEnd.creditsClosed||(this.isInCelestialReality?e.exitChallenge?Modal.exitChallenge.show({challengeName:"a Celestial Reality",normalName:"Reality",hasHigherLayers:!1,exitFn:()=>beginProcessReality(getRealityProps(!0))}):beginProcessReality(getRealityProps(!0)):e.resetReality?Modal.resetReality.show():beginProcessReality(getRealityProps(!0)))}}},kU=wU;var CU=(0,X.Z)(kU,EU,TU,!1,null,"708824d8",null);const AU=CU.exports;var _U=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-current-glyph-effects l-current-glyph-effects",class:{"c-sacrificed-glyphs--dragover":e.hasDragover},on:{dragover:e.dragover,dragleave:e.dragleave,drop:e.drop}},[i("div",{staticClass:"l-sacrificed-glyphs__help"},[e.isDoomed?i("span",{staticClass:"pelle-current-glyph-effects"},[e._v(" You cannot sacrifice Glyphs while Doomed. ")]):i("span",[i("div",[e._v("Drag Glyphs here or shift-click to Sacrifice.")]),i("div",[e._v("The confirmation can be disabled in Options or by holding Ctrl.")])])]),e.hasAlteration?i("div",[i("span",{staticClass:"c-altered-glyphs-toggle-button",on:{click:e.toggleAlteration}},[i("i",{class:e.dropDownIconClass}),i("b",[e._v(" Altered Glyphs")])]),i("br"),e.hideAlteration?i("div",[e._v(" (Details hidden, click to unhide) ")]):i("div",[e._v(" Glyph types will have one of their effects improved"),i("br"),e._v(" when their Glyph type's total sacrifice value is above: "),i("br"),i("br"),i("b",[i("span",{style:e.addStyle},[e._v(e._s(e.format(e.addThreshold))+" - an additional secondary effect")]),i("br"),i("span",{style:e.empowerStyle},[e._v(e._s(e.format(e.empowerThreshold))+" - formula drastically improved")]),i("br"),i("span",{style:e.boostStyle},[e._v(e._s(e.format(e.boostThreshold))+" - a boost depending on Glyph Sacrifice")])]),i("br"),i("br"),e._v(" All effects from Glyph Sacrifice can no longer be increased once they reach "+e._s(e.format(e.maxSacrifice))+". ")])]):e._e(),i("br"),i("div",{staticClass:"c-sacrificed-glyphs__header"},[e._v(" Glyph Sacrifice Boosts: ")]),e.anySacrifices&&!e.isDoomed?i("div",[e.teresaMult>1?i("div",[e._v(" Glyph sacrifice values are multiplied by "+e._s(e.formatX(e.teresaMult,2,2))+"; Teresa was last done at "+e._s(e.lastMachines)+". "),e.hasSeenRealityGlyph?i("span",[e._v(" Reality Glyphs are unaffected by this multiplier and have no altered effects. ")]):e._e()]):e._e(),e._l(e.types,(function(t){return[i("TypeSacrifice",{key:t+e.glyphSymbol(t),attrs:{type:t,"has-dragover":e.hasDragover}})]}))],2):e.isDoomed?i("div",{staticClass:"pelle-current-glyph-effects"},[e._v(" All boosts from Glyph Sacrifice are disabled while Doomed, including changes to effects due to Altered Glyphs. ")]):i("div",[e._v(" You haven't Sacrificed any Glyphs yet! ")])])},SU=[],DU=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.amount.gte(0)?i("div",{style:e.style},[i("div",[i("div",{staticClass:"l-sacrificed-glyphs__type-symbol c-sacrificed-glyphs__type-symbol"},[e._v(" "+e._s(e.symbol)+" ")]),i("div",{staticClass:"l-sacrificed-glyphs__type-amount c-sacrificed-glyphs__type-amount"},[e._v(" "+e._s(e.formatAmount)+" "),e.showNewSacrifice?i("span",{staticClass:"c-sacrificed-glyphs__type-new-amount"},[e._v(" + "+e._s(e.formatNewAmount)+" ➜ "+e._s(e.formatTotalAmount)+" ")]):e._e()])]),e.showNewSacrifice?i("span",{staticClass:"c-sacrificed-glyphs__type-new-amount"},[e._v(" "+e._s(e.newDescription)+" ")]):i("span",[e._v(" "+e._s(e.description)+" ")])]):e._e()},RU=[];const MU={name:"TypeSacrifice",props:{type:{type:String,required:!0},hasDragover:{type:Boolean,required:!0}},data(){return{amount:b.D0,effectValue:b.D0,isColored:!0,willSacrifice:!1,bypass:b.D0}},computed:{typeConfig(){return GlyphTypes[this.type]},sacConfig(){return GlyphSacrifice[this.type].config},style(){if(!this.isColored)return{};const e=GlyphAppearanceHandler.getBorderColor(this.type),t="reality"===this.typeConfig.id&&!player.reality.glyphs.cosmetics.colorMap.reality;return{color:e,"text-shadow":`-1px 1px 1px var(--color-text-base), 1px 1px 1px var(--color-text-base),\n -1px -1px 1px var(--color-text-base), 1px -1px 1px var(--color-text-base),\n 0 0 3px ${e}`,animation:t?"a-reality-glyph-description-cycle 10s infinite":void 0}},symbol(){return CosmeticGlyphTypes[this.type].currentSymbol.symbol},formatAmount(){return format(this.amount,2,2)},description(){return this.sacConfig.description(this.effectValue)},newDescription(){return this.sacConfig.description(this.sacConfig.effect(this.currentSacrifice.sacrificeValue))},currentSacrifice(){const e=this.$viewModel.tabs.reality;return""===e.mouseoverGlyphInfo.type?e.draggingGlyphInfo:e.mouseoverGlyphInfo},showNewSacrifice(){const e=this.currentSacrifice.type===this.type,t=this.willSacrifice&&this.currentSacrifice.inInventory,i=ui.view.shiftDown;return e&&(this.hasDragover||i&&t)},formatNewAmount(){return format(this.currentSacrifice.sacrificeValue,2,2)},formatTotalAmount(){return format(this.amount.add(this.currentSacrifice.sacrificeValue),2,2)}},created(){this.on$(GAME_EVENT.GLYPH_VISUAL_CHANGE,(()=>{this.$recompute("style")}))},methods:{update(){this.bypass=new Decimal(0),this.bypass.copyFrom(player.reality.glyphs.sac[this.type]),this.amount=this.bypass,this.effectValue=GlyphSacrifice[this.type].effectValue,this.isColored=player.options.glyphTextColors,this.willSacrifice=AutoGlyphProcessor.sacMode===AUTO_GLYPH_REJECT.SACRIFICE||AutoGlyphProcessor.sacMode===AUTO_GLYPH_REJECT.REFINE_TO_CAP&&0===this.currentSacrifice.refineValue}}},IU=MU;var xU=(0,X.Z)(IU,DU,RU,!1,null,"ec571984",null);const PU=xU.exports,GU={name:"SacrificedGlyphs",components:{TypeSacrifice:PU},data(){return{anySacrifices:!1,hasDragover:!1,hasAlteration:!1,hideAlteration:!1,maxSacrifice:b.D0,teresaMult:0,lastMachinesTeresa:new Decimal(0)}},computed:{types:()=>GLYPH_TYPES.filter((e=>"cursed"!==e&&"companion"!==e&&"amalgam"!==e)),lastMachines(){return this.lastMachinesTeresa.lt(b.E10000)?`${quantify("Reality Machine",this.lastMachinesTeresa,2)}`:`${quantify("Imaginary Machine",this.lastMachinesTeresa.dividedBy(b.E10000),2)}`},dropDownIconClass(){return this.hideAlteration?"far fa-plus-square":"far fa-minus-square"},isDoomed(){return Pelle.isDoomed},addThreshold(){return GlyphAlteration.additionThreshold},empowerThreshold(){return GlyphAlteration.empowermentThreshold},boostThreshold(){return GlyphAlteration.boostingThreshold},cosmeticTypes:()=>CosmeticGlyphTypes,addStyle(){return{color:GlyphAlteration.baseAdditionColor()}},empowerStyle(){return{color:GlyphAlteration.baseEmpowermentColor()}},boostStyle(){return{color:GlyphAlteration.baseBoostColor()}},hasSeenRealityGlyph(){return player.reality.glyphs.createdRealityGlyph}},created(){this.on$(GAME_EVENT.GLYPH_VISUAL_CHANGE,(()=>{this.$recompute("cosmeticTypes")}))},methods:{update(){this.anySacrifices=0!==GameCache.logTotalGlyphSacrifice,this.hasAlteration=Ra.unlocks.alteredGlyphs.canBeApplied,this.hideAlteration=player.options.hideAlterationEffects,this.maxSacrifice=GlyphSacrificeHandler.maxSacrificeForEffects,this.teresaMult=Teresa.runRewardMultiplier,this.lastMachinesTeresa.copyFrom(player.celestials.teresa.lastRepeatedMachines)},dragover(e){Pelle.isDoomed||e.dataTransfer.types.includes(GLYPH_MIME_TYPE)&&(e.preventDefault(),this.hasDragover=!0)},dragleave(e){this.isDoomed||!e.relatedTarget||!e.relatedTarget.classList||e.relatedTarget.classList.contains("c-current-glyph-effects")||e.relatedTarget.classList.contains("c-sacrificed-glyphs__header")||e.relatedTarget.classList.contains("l-sacrificed-glyphs__type")||e.relatedTarget.classList.contains("l-sacrificed-glyphs__type-symbol")||e.relatedTarget.classList.contains("l-sacrificed-glyphs__type-amount")||e.relatedTarget.classList.contains("c-sacrificed-glyphs__type-new-amount")||0===e.relatedTarget.classList.length||(this.hasDragover=!1)},drop(e){if(this.isDoomed||!e.dataTransfer.types.includes(GLYPH_MIME_TYPE))return;const t=parseInt(e.dataTransfer.getData(GLYPH_MIME_TYPE),10);if(isNaN(t))return;const i=Glyphs.findById(t);i&&(GlyphSacrificeHandler.sacrificeGlyph(i,!0),this.hasDragover=!1)},toggleAlteration(){player.options.hideAlterationEffects=!player.options.hideAlterationEffects},glyphSymbol(e){return this.cosmeticTypes[e].currentSymbol.symbol}}},UU=GU;var BU=(0,X.Z)(UU,_U,SU,!1,null,"9dad64e2",null);const NU=BU.exports;var OU=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("div",{staticClass:"c-single-glyph-cosmetic",on:{dragover:e.dragover,drop:e.drop}},[e.glyph?i("div",{staticClass:"c-glyph-info"},[i("div",{staticClass:"c-glyph-info-section"},[i("GlyphComponent",{attrs:{glyph:e.glyph,"flip-tooltip":!0}})],1),i("div",{staticClass:"c-glyph-info-section c-cosmetic-text"},[i("u",[e._v("Cosmetic Attributes")]),e._v(" Type: "+e._s(e.glyph.type.capitalize())+" "),i("br"),e._v(" All: "+e._s(e.typeCosmetic)+" "),i("br"),e._v(" Single: "+e._s(e.specialCosmetic)+" ")]),i("div",{staticClass:"c-glyph-info-section"},[i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.openModal}},[e._v(" Customize! ")]),i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:function(t){e.glyphID=-1}}},[e._v(" Clear Box ")])],1)]):i("div",[e._v(" Drag a Glyph over this box to change its appearance! This will make a visual copy of it here, but leave the actual Glyph itself in your inventory. Removing, gaining, or moving any Glyphs will clear this box. ")])]):e._e()},LU=[];const FU={name:"SingleGlyphCustomzationPanel",components:{GlyphComponent:Rx,PrimaryButton:Vs},data(){return{glyphID:-1,isVisible:!0}},computed:{glyph(){if(-1===this.glyphID)return null;const e=Glyphs.findById(this.glyphID);return{type:e.type,level:e.level,strength:e.strength,effects:e.effects,color:e.color,symbol:e.symbol,cosmetic:e.cosmetic}},typeCosmetic(){const e=[];return GlyphAppearanceHandler.symbolMap[this.glyph.type]&&e.push("Symbol"),GlyphAppearanceHandler.colorMap[this.glyph.type]&&e.push("Color"),0===e.length?"None":e.join("/")},specialCosmetic(){if(this.glyph.cosmetic)return this.glyph.cosmetic.capitalize();const e=[];return this.glyph.symbol&&e.push("Symbol"),this.glyph.color&&e.push("Color"),0===e.length?"None":e.join("/")}},created(){EventHub.logic.on(GAME_EVENT.GLYPHS_CHANGED,(()=>{this.glyphID=-1,this.$recompute("glyph")})),EventHub.logic.on(GAME_EVENT.GLYPH_VISUAL_CHANGE,(()=>{this.$recompute("glyph")}))},methods:{update(){this.isVisible=player.reality.glyphs.cosmetics.active&&(GlyphAppearanceHandler.availableTypes.length>0||CosmeticGlyphTypes.list.some((e=>e.isCosmetic&&e.isUnlocked())))},dragover(e){e.dataTransfer.types.includes(GLYPH_MIME_TYPE)&&e.preventDefault()},drop(e){if(!e.dataTransfer.types.includes(GLYPH_MIME_TYPE))return;const t=parseInt(e.dataTransfer.getData(GLYPH_MIME_TYPE),10);isNaN(t)||(EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE),this.glyphID=t,this.$recompute("glyph"))},openModal(){Modal.singleGlyphAppearance.show({glyphId:this.glyphID})}}},$U=FU;var HU=(0,X.Z)($U,OU,LU,!1,null,"09c183dd",null);const qU=HU.exports,VU={name:"GlyphsTab",components:{ExpandingControlBox:$o,GlyphTabSidebar:oU,GlyphPeek:BP,RealityAmplifyButton:mU,GlyphInventory:gP,SacrificedGlyphs:NU,CurrentGlyphEffects:sP,EquippedGlyphs:dP,GlyphLevelsAndWeights:MP,ResetRealityButton:AU,RealityReminder:bU,SingleGlyphCustomzationPanel:qU},data(){return{enslavedHint:"",showInstability:!1,instabilityThreshold:0,hyperInstabilityThreshold:0,ultraInstabilityThreshold:0,hardcap:0,isInCelestialReality:!1,canAmplify:!1,glyphTextColors:!0,autoRestartCelestialRuns:!1,sacrificeUnlocked:!1,sacrificeDisplayed:!1,resetRealityDisplayed:!1}},computed:{showEnslavedHint(){return""!==this.enslavedHint},glyphColorState(){return{"o-glyph-color-checkbox":!0,"o-glyph-color-checkbox--active":this.glyphTextColors,"o-glyph-color-checkbox--inactive":!this.glyphTextColors}}},methods:{update(){if(this.resetRealityDisplayed=PlayerProgress.realityUnlocked(),this.showInstability=player.records.bestReality.glyphLevel>800,this.instabilityThreshold=Glyphs.instabilityThreshold,this.hyperInstabilityThreshold=Glyphs.hyperInstabilityThreshold,this.ultraInstabilityThreshold=Glyphs.ultraInstabilityThreshold,this.hardcap=Glyphs.hardcap,this.isInCelestialReality=isInCelestialReality(),this.canAmplify=Enslaved.isUnlocked&&!this.isInCelestialReality,this.autoRestartCelestialRuns=player.options.retryCelestial,this.glyphTextColors=player.options.glyphTextColors,this.enslavedHint="",this.sacrificeUnlocked=GlyphSacrificeHandler.canSacrifice,this.sacrificeDisplayed=player.reality.showGlyphSacrifice,!Enslaved.isRunning)return;const e=void 0!==Glyphs.activeWithoutCompanion.find((e=>e.levelPelle.isDoomed},watch:{isAutobuyerOn(e){Autobuyer.imaginaryUpgrade(this.upgrade.id).isActive=e}},methods:{update(){const e=this.upgrade;this.isAvailableForPurchase=e.isAvailableForPurchase,this.canBeBought=e.canBeBought,this.isRebuyable=e.isRebuyable,this.isBought=!e.isRebuyable&&e.isBought,this.isPossible=e.isPossible,this.isAutoUnlocked=ImaginaryUpgrade(20).canBeApplied,this.canBeLocked=e.config.canLock&&!this.isAvailableForPurchase,this.hasRequirementLock=e.hasPlayerLock,this.isRebuyable&&(this.isAutobuyerOn=Autobuyer.imaginaryUpgrade(e.id).isActive),this.etaText=this.getETAText()},getETAText(){if(this.canBeBought||!this.isAvailableForPurchase||this.isBought||Pelle.isDoomed)return"";const e=MachineHandler.estimateIMTimer(this.upgrade.cost);return isFinite(e)?TimeSpan.fromSeconds(e).toString():"Never affordable"},toggleLock(e){this.isRebuyable||e.toggleMechanicLock()}}},JU=QU;var eB=(0,X.Z)(JU,KU,ZU,!1,null,"530b024a",null);const tB=eB.exports,iB={name:"ImaginaryUpgradesTab",components:{ImaginaryUpgradeButton:tB},data(){return{baseRMCap:new Decimal,capRM:new Decimal,scaleTime:0,capStr:""}},computed:{upgrades:()=>ImaginaryUpgrades.all,lockTooltip:()=>"Requirement locks only prevent manual and automated actions. Any related upgrades\n will not be disabled and may still cause requirements to be failed."},methods:{update(){this.baseRMCap.copyFrom(MachineHandler.baseRMCap),this.capRM.copyFrom(MachineHandler.hardcapRM),this.scaleTime=MachineHandler.scaleTimeForIM,this.capStr=formatMachines(MachineHandler.hardcapRM,MachineHandler.currentIMCap)},id(e,t){return 5*(e-1)+t-1}}},aB=iB;var nB=(0,X.Z)(aB,XU,zU,!1,null,"6888454f",null);const sB=nB.exports;var rB=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-challenges-tab"},[i("ChallengeTabHeader"),i("div",[e._v(" An active Big Crunch Autobuyer will Crunch immediately when reaching an Infinity Challenge's antimatter goal, regardless of settings. ")]),i("div",[e._v(e._s(e.nextAtDisplay))]),i("ChallengeGrid",{attrs:{challenges:e.challenges,"is-challenge-visible":e.isChallengeVisible},scopedSlots:e._u([{key:"default",fn:function(e){var t=e.challenge;return[i("InfinityChallengeBox",{attrs:{challenge:t}})]}}])})],1)},oB=[],lB=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ChallengeBox",{staticClass:"c-challenge-box--infinity",attrs:{name:e.name,"is-unlocked":e.isUnlocked,"is-running":e.isRunning,"is-completed":e.isCompleted},on:{start:function(t){return e.challenge.requestStart()}},scopedSlots:e._u([{key:"top",fn:function(){return[i("DescriptionDisplay",{attrs:{config:e.config}}),e.isRunning?i("EffectDisplay",{attrs:{config:e.config}}):e._e()]},proxy:!0},{key:"bottom",fn:function(){return[i("div",{staticClass:"l-challenge-box__bottom--infinity"},[i("span",[e._v("Goal: "+e._s(e.format(e.config.goal))+" antimatter")]),i("DescriptionDisplay",{attrs:{config:e.config.reward,title:"Reward:"}}),e.isCompleted?i("EffectDisplay",{attrs:{config:e.config.reward}}):e._e()],1)]},proxy:!0}])})},cB=[],uB=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-challenge-box l-challenge-box"},[i("HintText",{staticClass:"l-hint-text--challenge",attrs:{type:"challenges"}},[e._v(" "+e._s(e.name)+" ")]),e._t("top"),i("div",{staticClass:"l-challenge-box__fill"}),i("button",{class:e.buttonClassObject,on:{click:function(t){return e.$emit("start")}}},[e._v(" "+e._s(e.buttonText)+" ")]),e._t("bottom")],2)},dB=[];const hB={name:"ChallengeBox",components:{HintText:LT},props:{name:{type:String,required:!0},isUnlocked:{type:Boolean,required:!0},isRunning:{type:Boolean,required:!0},isCompleted:{type:Boolean,required:!0},lockedAt:{type:Decimal,required:!1,default:void 0},overrideLabel:{type:String,required:!1,default:""}},data(){return{inC1:Boolean,infinities:new Decimal(0)}},computed:{buttonClassObject(){const e=!(this.isCompleted||this.isRunning||this.inC1||this.isUnlocked),t=!this.isUnlocked||this.isRunning||"C1"===this.name;return{"o-challenge-btn":!0,"o-challenge-btn--broken":this.overrideLabel.length>0&&"C10"!==this.name,"o-challenge-btn--broken-alt":this.overrideLabel.length>0&&"C10"===this.name,"o-challenge-btn--running":this.isRunning||this.inC1,"o-challenge-btn--completed":this.isCompleted&&this.isUnlocked,"o-challenge-btn--unlocked":!this.isCompleted&&this.isUnlocked,"o-challenge-btn--locked":e,"o-challenge-btn--unenterable":t}},buttonText(){if(this.overrideLabel.length>0)return this.overrideLabel;if(this.isRunning||this.inC1)return"Running";if(this.isCompleted)return"Completed";if(this.isUnlocked)return"Start";const e=void 0===this.lockedAt?"":` (${formatInt(this.infinities)}/${formatInt(this.lockedAt)})`;return`Locked${e}`}},methods:{update(){this.inC1="C1"===this.name&&!this.isCompleted&&!Player.isInAntimatterChallenge,this.infinities.copyFrom(Currency.infinities)}}},mB=hB;var pB=(0,X.Z)(mB,uB,dB,!1,null,"78886df5",null);const yB=pB.exports,fB={name:"InfinityChallengeBox",components:{ChallengeBox:yB,DescriptionDisplay:ND,EffectDisplay:tw},props:{challenge:{type:Object,required:!0}},data(){return{isUnlocked:!1,isRunning:!1,isCompleted:!1}},computed:{config(){return this.challenge.config},name(){return`IC${this.challenge.id}`}},methods:{update(){const e=this.challenge;this.isUnlocked=e.isUnlocked,this.isRunning=e.isRunning,this.isCompleted=e.isCompleted}}},gB=fB;var vB=(0,X.Z)(gB,lB,cB,!1,null,"61920d61",null);const bB=vB.exports,EB={name:"InfinityChallengesTab",components:{ChallengeGrid:oI,ChallengeTabHeader:mI,InfinityChallengeBox:bB},data(){return{nextIC:0,showAllChallenges:!1}},computed:{challenges(){return InfinityChallenges.all},nextAtDisplay(){var e;const t=1===(null===(e=this.nextIC)||void 0===e?void 0:e.id),i=InfinityChallenges.nextICUnlockAM;return t?`The first Infinity Challenge unlocks at ${format(i)} antimatter.`:void 0===i?"All Infinity Challenges unlocked":`Next Infinity Challenge unlocks at ${format(i)} antimatter.`}},methods:{update(){this.nextIC=InfinityChallenges.nextIC,this.showAllChallenges=player.options.showAllChallenges},isChallengeVisible(e){return e.isUnlocked||this.showAllChallenges&&PlayerProgress.eternityUnlocked()}}},TB=EB;var wB=(0,X.Z)(TB,rB,oB,!1,null,"e3a1daec",null);const kB=wB.exports;var CB=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(e.activeComponent,{tag:"component"})},AB=[],_B=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-infinity-dim-tab"},[i("div",{staticClass:"c-subtab-option-container"},[e.isEC8Running?e._e():i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.maxAll}},[e._v(" Max all ")]),e.isAnyAutobuyerUnlocked&&!e.isEC8Running?i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.toggleAllAutobuyers}},[e._v(" Toggle all autobuyers ")]):e._e()],1),i("div",[i("p",[e._v(" You have "),i("span",{staticClass:"c-infinity-dim-description__accent"},[e._v(e._s(e.format(e.infinityPower,2,1)))]),e._v(" Infinity Power, "),i("br"),e.isEC9Running?i("span",[e._v(" translated ")]):i("span",[e._v(" increased by "),i("span",{staticClass:"c-infinity-dim-description__accent"},[e._v(e._s(e.formatPow(e.conversionRate,2,3)))])]),e._v(" to a "),i("span",{staticClass:"c-infinity-dim-description__accent"},[e._v(e._s(e.formatX(e.dimMultiplier,2,1)))]),e._v(" multiplier on all "),e.isEC9Running?i("span",[e._v("Time Dimensions due to Eternity Challenge 9.")]):i("span",[e._v("Antimatter Dimensions.")])])]),e.enslavedCompleted?i("div",{staticClass:"l-infinity-dim-tab__enslaved-reward-container l-spoon-btn-group"},[i("button",{staticClass:"c-infinity-dim-tab__tesseract-button",class:{"c-infinity-dim-tab__tesseract-button--disabled":!e.canBuyTesseract,"o-pelle-disabled-pointer":e.creditsClosed},on:{click:e.buyTesseract}},[i("p",[e._v(" Buy a Tesseract ("+e._s(e.tesseractCountString)+") ")]),i("p",[e._v("Increase Infinity Dimension caps by "+e._s(e.format(e.nextDimCapIncrease,2)))]),i("p",[i("b",[e._v("Costs: "+e._s(e.format(e.tesseractCost))+" IP")])])]),e.isAutoTessUnlocked?i("PrimaryToggleButton",{staticStyle:{"margin-top":"-1rem"},attrs:{label:"Auto:"},model:{value:e.isAutoTessOn,callback:function(t){e.isAutoTessOn=t},expression:"isAutoTessOn"}}):e._e()],1):e._e(),e.isEnslavedRunning?i("div",[e._v(" All Infinity Dimensions are limited to a single purchase. ")]):i("div",[e._v(" All Infinity Dimensions except for the 8th are limited to a maximum of "+e._s(e.format(Math.pow(e.totalDimCap,e.capExpo),2))+" purchases each. "),i("br"),e._v(" The 8th Infinity Dimension is limited to "+e._s(e.format(Math.pow(1e10,this.capExpo),2))+" purchases. ")]),i("div",[e._v("You are getting "+e._s(e.format(e.powerPerSecond,2,0))+" "+e._s(e.incomeType)+" per second.")]),i("br"),e.atCap?i("span",[e._v("Due to instability, your Infinity Power gain is softcapped after "+e._s(e.format(this.textCap)))]):e._e(),i("br"),e.atTessCap?i("span",[e._v("Tesseracts beyond "+e._s(e.format(this.TesseractsCap))+" are physically impossible")]):e._e(),i("br"),e.isEC8Running?i("b",{staticClass:"l-infinity-dim-tab__ec8-purchases"},[e._v(" You have "+e._s(e.quantifyInt("purchase",e.EC8PurchasesLeft))+" left within Eternity Challenge 8. ")]):e._e(),i("div",{staticClass:"l-dimensions-container"},e._l(8,(function(e){return i("InfinityDimensionRow",{key:e,attrs:{tier:e}})})),1),e.showLockedDimCostNote?i("div",[e._v(" Hold shift to see the Infinity Point cost for locked Infinity Dimensions. ")]):e._e()])},SB=[];function DB(){initializeChallengeCompletions(),initializeResourcesAfterEternity(),resetInfinityRuns(),InfinityDimensions.fullReset(),Replicanti.reset(),resetChallengeStuff(),AntimatterDimensions.reset(),player.replicanti.galaxies=0,Currency.infinityPoints.reset(),InfinityDimensions.resetAmount(),player.records.bestInfinity.bestIPminEternity=b.D0,player.records.thisEternity.bestEPmin=b.D0,resetTimeDimensions(),resetTickspeed(),player.records.thisInfinity.maxAM=b.D0,player.records.thisEternity.maxAM=b.D0,Currency.antimatter.reset(),playerInfinityUpgradesOnReset(),AchievementTimers.marathon2.reset(),ECTimeStudyState.invalidateCachedRequirements()}class RB extends A{constructor(e,t){const i=e.effect,a=sl([{},e]);a.effect=()=>i(t.completions),super(a),this._challenge=t}get isEffectActive(){return this._challenge.completions>0}get isVEffectActive(){return this._challenge.completions>0&&Ra.unlocks.imporvedECRewards.isUnlocked}}class MB extends A{constructor(e){super(e),this._fullId=`eterc${this.id}`,this._reward=new RB(e.reward,this),this._vReward=new RB(e.vReward,this)}get fullId(){return this._fullId}get isUnlocked(){return player.challenge.eternity.unlocked===this.id}get isRunning(){return player.challenge.eternity.current===this.id}get isEffectActive(){return this.isRunning}get hasUnlocked(){return 0!==(player.reality.unlockedEC&1<i&&(t=i,e.failedRestriction=this.config.failedRestriction),e.totalCompletions=t,e.gainedCompletions=t-this.completions,e.hasMoreCompletions=this.completions+e.gainedCompletions0?this.initialGoal.times(this.goalIncrease.pow(Math.min(e,this.maxCompletions-1))):this.initialGoal}completionsAtIP(e){if(e.lt(this.initialGoal))return 0;const t=1+e.dividedBy(this.initialGoal).log10()/this.goalIncrease.log10();return Math.min(Math.floor(t),this.maxCompletions)}addCompletion(e=!1){this.completions++,4!==this.id&&12!==this.id||!e||this.tryFail(!0),6===this.id&&GameCache.dimensionMultDecrease.invalidate(),11===this.id&&GameCache.tickSpeedMultDecrease.invalidate()}requestStart(){Tab.challenges.eternity.isUnlocked&&!this.isRunning&&(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||(player.options.confirmations.challenges?this.isUnlocked&&Modal.startEternityChallenge.show(this.id):this.start()))}start(e){if(IB.isRunning)return!1;if(!this.isUnlocked)return!1;const t=player.requirementChecks.reality.slowestBH<=1e-300;if(12===this.id&&ImaginaryUpgrade(24).isLockingMechanics&&Ra.isRunning&&t)return e||ImaginaryUpgrade(24).tryShowWarningModal("enter Eternity Challenge 12"),!1;if(7===this.id&&ImaginaryUpgrade(15).isLockingMechanics&&TimeDimension(1).amount.gt(0))return e||ImaginaryUpgrade(15).tryShowWarningModal("enter Eternity Challenge 7"),!1;const i=getGameSpeedupFactor();return Player.canEternity&&eternity(!1,e,{enteringEC:!0}),player.challenge.eternity.current=this.id,12===this.id&&(i.lt(.001)&&SecretAchievement(42).unlock(),player.requirementChecks.reality.slowestBH=1),Enslaved.isRunning&&(6===this.id&&5===this.completions&&EnslavedProgress.ec6.giveProgress(),!e&&EnslavedProgress.challengeCombo.hasProgress&&Tab.challenges.normal.show()),DB(),!0}get reward(){return this._reward}get vReward(){return this._vReward}get isWithinRestriction(){return this.isWithinRestrictionAtCompletions(this.completions)}isWithinRestrictionAtCompletions(e){return void 0===this.config.restriction||this.config.checkRestriction(this.config.restriction(e))}exit(){Player.isInAntimatterChallenge&&Player.antimatterChallenge.exit(),player.challenge.eternity.current=0,eternity(!0)}fail(e=!1){let t;this.exit(),e?4===this.id?t=e=>`Auto Eternity Challenge completion completed Eternity Challenge ${this.id} and made the next tier require having less Infinities (${quantifyInt("Infinity",e)} or less) than you had`:12===this.id&&(t=e=>`Auto Eternity Challenge completion completed Eternity Challenge ${this.id} and made the next tier require spending less time in it (${quantify("in-game second",e,0,1)} or less) than you had spent`):4===this.id?t=e=>`You failed Eternity Challenge ${this.id} due to having more than ${quantifyInt("Infinity",e)}`:12===this.id&&(t=e=>`You failed Eternity Challenge ${this.id} due to spending more than ${quantify("in-game second",e,0,1)} in it`),Modal.message.show(`${t(this.config.restriction(this.completions))}, which has caused you to exit it.`,{closeEvent:GAME_EVENT.REALITY_RESET_AFTER},1),EventHub.dispatch(GAME_EVENT.CHALLENGE_FAILED)}tryFail(e=!1){return!(!this.isRunning||this.isWithinRestriction)&&(this.fail(e),!0)}}const IB=MB.createAccessor(GameDatabase.challenges.eternity);Object.defineProperty(IB,"current",{get:()=>player.challenge.eternity.current>0?IB(player.challenge.eternity.current):void 0}),Object.defineProperty(IB,"isRunning",{get:()=>0!==player.challenge.eternity.current});const xB={all:IB.index.compact(),get completions(){return xB.all.map((e=>e.completions)).sum()},get maxCompletions(){return xB.all.map((e=>e.maxCompletions)).sum()},get remainingCompletions(){return xB.all.map((e=>e.remainingCompletions)).sum()},autoComplete:{tick(){const e=TimeDimension(1).amount.gt(0),t=RealityUpgrade(12).isLockingMechanics||ImaginaryUpgrade(15).isLockingMechanics&&e&&!Array.range(1,6).some((e=>!IB(e).isFullyCompleted));if(!player.reality.autoEC||Pelle.isDisabled("autoec")||t)return void(player.reality.lastAutoEC=Decimal.clampMax(player.reality.lastAutoEC,this.interval).toNumber());if(Ra.unlocks.instantECAndRealityUpgradeAutobuyers.canBeApplied){let t=this.nextChallenge;while(void 0!==t){var i;while(!t.isFullyCompleted)t.addCompletion(!0);if(t=this.nextChallenge,ImaginaryUpgrade(15).isLockingMechanics&&7===(null===(i=t)||void 0===i?void 0:i.id)&&e)break}return}const a=this.interval instanceof Decimal?this.interval.toNumber():this.interval;let n=this.nextChallenge;while(player.reality.lastAutoEC-a>0&&void 0!==n)player.reality.lastAutoEC-=a,n.addCompletion(!0),n=this.nextChallenge;player.reality.lastAutoEC%=a},get nextChallenge(){return xB.all.find((e=>!e.isFullyCompleted))},get interval(){if(!Perk.autocompleteEC1.canBeApplied)return 1/0;let e=Effects.min(Number.MAX_VALUE,Perk.autocompleteEC1,Perk.autocompleteEC2,Perk.autocompleteEC3);return e=new Decimal(e).div(VUnlocks.fastAutoEC.effectOrDefault(1)),TimeSpan.fromMinutes(e).totalMilliseconds.toNumber()}}};var PB=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.showRow,expression:"showRow"}],staticClass:"c-dimension-row l-dimension-single-row",class:{"c-dim-row--not-reached":!e.isUnlocked&&!e.canUnlock}},[i("GenericDimensionRowText",{attrs:{tier:e.tier,name:e.name,"multiplier-text":e.formatX(e.multiplier,2,1),"amount-text":e.format(e.amount,2),rate:e.rateOfChange}}),i("div",{staticClass:"l-dim-row-multi-button-container"},[i("PrimaryButton",{staticClass:"o-primary-btn--buy-id o-primary-btn--buy-dim c-dim-tooltip-container",class:e.buttonClass(),attrs:{enabled:e.isAvailableForPurchase&&!e.isContinuumActive||!e.isUnlocked&&e.canUnlock},on:{click:e.buySingleInfinityDimension}},[e._v(" "+e._s(e.costDisplay)+" "),i("div",{staticClass:"c-dim-purchase-count-tooltip"},[e._v(" "+e._s(e.capTooltip)+" ")])]),!e.isAutobuyerUnlocked||e.isEC8Running||e.isContinuumActive?e.isContinuumActive?e._e():i("PrimaryButton",{staticClass:"o-primary-btn--id-auto",attrs:{enabled:e.isAvailableForPurchase&&e.isUnlocked},on:{click:e.buyMaxInfinityDimension}},[e._v(" Buy Max ")]):i("PrimaryToggleButton",{staticClass:"o-primary-btn--id-auto",attrs:{label:"Auto:"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}})],1)],1)},GB=[];const UB={name:"ClassicInfinityDimensionRow",components:{GenericDimensionRowText:Sw,PrimaryButton:Vs,PrimaryToggleButton:Sh},props:{tier:{type:Number,required:!0}},data(){return{hasPrevTier:!1,isUnlocked:!1,canUnlock:!1,multiplier:new Decimal(0),baseAmount:0,amount:new Decimal(0),purchases:0,rateOfChange:new Decimal(0),isAutobuyerUnlocked:!1,cost:new Decimal(0),isAvailableForPurchase:!1,isCapped:!1,capIP:new Decimal(0),isAutobuyerOn:!1,isEC8Running:!1,hardcap:InfinityDimensions.HARDCAP_PURCHASES,eternityReached:!1,enslavedRunning:!1,isContinuumActive:!1,continuumValue:0}},computed:{shiftDown(){return ui.view.shiftDown},name(){return`${InfinityDimension(this.tier).shortDisplayName} Infinity Dimension`},costDisplay(){return this.isContinuumActive?`Continuum: ${this.continuumString}`:this.isUnlocked||this.shiftDown?this.isCapped?"Capped":this.showCostTitle?`Cost: ${format(this.cost)} IP`:`${format(this.cost)} IP`:this.canUnlock?"Unlock":`Reach ${formatPostBreak(InfinityDimension(this.tier).amRequirement)} AM`},continuumString(){return this.continuumValue>=1e9?format(this.continuumValue,2,2):formatFloat(this.continuumValue,2)},hasLongText(){return this.costDisplay.length>20},hardcapPurchases(){return format(this.hardcap,1,1)},capTooltip(){return this.enslavedRunning?`Nameless prevents the purchase of more than ${format(10)} Infinity Dimensions`:this.isContinuumActive?"Continuum produces all your Infinity Dimensions":this.isCapped?`Cap reached at ${format(this.capIP)} IP`:this.purchases>=1e12?`Purchased ${format(this.purchases,2,2)} times`:`Purchased ${quantifyInt("time",this.purchases)}`},showRow(){return this.eternityReached||this.isUnlocked||this.canUnlock||this.amount.gt(0)||this.hasPrevTier},showCostTitle(){return this.cost.exponent<1e6}},watch:{isAutobuyerOn(e){Autobuyer.infinityDimension(this.tier).isActive=e}},methods:{update(){const e=this.tier,t=InfinityDimension(e);this.hasPrevTier=1===e||InfinityDimension(e-1).isUnlocked;const i=Autobuyer.infinityDimension(e);this.isUnlocked=t.isUnlocked,this.canUnlock=t.canUnlock,this.multiplier.copyFrom(t.multiplier),this.baseAmount=t.baseAmount,this.purchases=t.purchases,this.amount.copyFrom(t.totalAmount),this.rateOfChange.copyFrom(t.rateOfChange),this.isAutobuyerUnlocked=i.isUnlocked,this.cost.copyFrom(t.cost),this.isAvailableForPurchase=t.isAvailableForPurchase,this.isCapped=t.isCapped,this.isCapped&&(this.capIP.copyFrom(t.hardcapIPAmount),this.hardcap=t.purchaseCap),this.isEC8Running=EternityChallenge(8).isRunning,this.isAutobuyerOn=i.isActive,this.eternityReached=PlayerProgress.eternityUnlocked(),this.enslavedRunning=Enslaved.isRunning,this.isContinuumActive=Ra.continuumActive&&!fQ.isDoomed,this.isContinuumActive&&(this.continuumValue=t.continuumValue)},buySingleInfinityDimension(){this.isContinuumActive||InfinityDimension(this.tier).buySingle()},buyMaxInfinityDimension(){this.isContinuumActive||InfinityDimension(this.tier).buyMax(!1)},buttonClass(){return{"l-dim-row-small-text":this.hasLongText,"o-non-clickable o-continuum":this.isContinuumActive}}}},BB=UB;var NB=(0,X.Z)(BB,PB,GB,!1,null,"239f89fe",null);const OB=NB.exports,LB={name:"ClassicInfinityDimensionsTab",components:{PrimaryButton:Vs,InfinityDimensionRow:OB,PrimaryToggleButton:Sh},data(){return{infinityPower:new Decimal(0),dimMultiplier:new Decimal(0),powerPerSecond:new Decimal(0),incomeType:"",isEC8Running:!1,EC8PurchasesLeft:0,isEC9Running:!1,isEnslavedRunning:!1,isAnyAutobuyerUnlocked:!1,conversionRate:0,nextDimCapIncrease:0,tesseractCost:new Decimal(0),totalDimCap:0,canBuyTesseract:!1,enslavedCompleted:!1,boughtTesseracts:0,extraTesseracts:0,creditsClosed:!1,showLockedDimCostNote:!0,isAutoTessUnlocked:!1,isAutoTessOn:!1,atCap:!1,end:new Decimal("1e9000000000000000"),capExpo:1,textCap:0,capExpo:1,trueID8cap:0,IPcap:0,TesseractsCap:20,atTessCap:!1}},computed:{tesseractCountString(){const e=this.extraTesseracts>0?` + ${format(this.extraTesseracts,2,2)}`:"";return`${formatInt(this.boughtTesseracts)}${e}`}},watch:{isAutoTessOn(e){Autobuyer.tesseract.isActive=e}},methods:{update(){this.showLockedDimCostNote=!InfinityDimension(8).isUnlocked,this.isEC9Running=IB(9).isRunning,this.infinityPower.copyFrom(Currency.infinityPower),this.conversionRate=InfinityDimensions.powerConversionRate,this.isEC9Running?this.dimMultiplier.copyFrom(Decimal.pow(Math.max(this.infinityPower.log2(),1),4).max(1)):this.dimMultiplier.copyFrom(this.infinityPower.pow(this.conversionRate).max(1)),this.powerPerSecond.copyFrom(InfinityDimension(1).productionPerRealSecond),this.incomeType=IB(7).isRunning?"Seventh Dimensions":"Infinity Power",this.isEC8Running=IB(8).isRunning,this.isEC8Running&&(this.EC8PurchasesLeft=player.eterc8ids),this.isEnslavedRunning=Enslaved.isRunning,this.isAnyAutobuyerUnlocked=Autobuyer.infinityDimension(1).isUnlocked,this.nextDimCapIncrease=Tesseracts.nextTesseractIncrease,this.tesseractCost.copyFrom(Tesseracts.nextCost),this.totalDimCap=InfinityDimensions.totalDimCap,this.canBuyTesseract=Tesseracts.canBuyTesseract,this.isAutoTessUnlocked=Autobuyer.tesseract.isUnlocked,this.isAutoTessOn=Autobuyer.tesseract.isActive,this.enslavedCompleted=Enslaved.isCompleted,this.boughtTesseracts=Tesseracts.bought,this.extraTesseracts=Tesseracts.extra,this.creditsClosed=GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||PlayerProgress.mendingUnlocked()&&player.isGameEnd,this.IPcap=InfinityDimension(8).infPowerSoftcap,this.atCap=player.infinityPower.exponent>=this.IPcap,this.textCap=Decimal.pow(10,this.IPcap),this.capExpo=Ra.unlocks.improvedECRewards.isUnlocked&&IB(12).completions>=1?IB(12).vReward.effectValue:1,this.trueID8cap=player.timestudy.studies.includes(310)?1e10*Math.max(Math.log10(Currency.replicanti.value.exponent),1):1e10,this.TesseractsCap=Tesseracts.TesseractHardcap,this.atTessCap=Tesseracts.bought>=Tesseracts.TesseractHardcap},maxAll(){InfinityDimensions.buyMax()},toggleAllAutobuyers(){toggleAllInfDims()},buyTesseract(){Tesseracts.buyTesseract()}}},FB=LB;var $B=(0,X.Z)(FB,_B,SB,!1,null,"5a952b48",null);const HB=$B.exports;var qB=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-infinity-dim-tab"},[i("div",{staticClass:"c-subtab-option-container"},[e.isEC8Running?e._e():i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.maxAll}},[e._v(" Max all ")]),e.isAnyAutobuyerUnlocked&&!e.isEC8Running?i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.toggleAllAutobuyers}},[e._v(" Toggle all autobuyers ")]):e._e()],1),i("div",[i("p",[e._v(" You have "),i("span",{staticClass:"c-infinity-dim-description__accent"},[e._v(e._s(e.format(e.infinityPower,2,1)))]),e._v(" Infinity Power, "),i("br"),e.isEC9Running?i("span",[e._v(" translated ")]):i("span",[e._v(" increased by "),i("span",{staticClass:"c-infinity-dim-description__accent"},[e._v(e._s(e.formatPow(e.conversionRate,2,3)))])]),e._v(" to a "),i("span",{staticClass:"c-infinity-dim-description__accent"},[e._v(e._s(e.formatX(e.dimMultiplier,2,1)))]),e._v(" multiplier on all "),e.isEC9Running?i("span",[e._v("Time Dimensions due to Eternity Challenge 9.")]):i("span",[e._v("Antimatter Dimensions.")])])]),e.enslavedCompleted?i("div",{staticClass:"l-infinity-dim-tab__enslaved-reward-container l-spoon-btn-group"},[i("button",{staticClass:"c-infinity-dim-tab__tesseract-button",class:{"c-infinity-dim-tab__tesseract-button--disabled":!e.canBuyTesseract,"o-pelle-disabled-pointer":e.creditsClosed},on:{click:e.buyTesseract}},[i("p",[e._v(" Buy a Tesseract ("+e._s(e.tesseractCountString)+") ")]),i("p",[e._v("Increase dimension caps by "+e._s(e.format(e.nextDimCapIncrease,2)))]),i("p",[i("b",[e._v("Costs: "+e._s(e.format(e.tesseractCost))+" IP")])])]),e.isAutoTessUnlocked?i("PrimaryToggleButton",{staticStyle:{"margin-top":"-1rem"},attrs:{label:"Auto:"},model:{value:e.isAutoTessOn,callback:function(t){e.isAutoTessOn=t},expression:"isAutoTessOn"}}):e._e()],1):e._e(),e.isEnslavedRunning?i("div",[e._v(" All Infinity Dimensions are limited to a single purchase. ")]):i("div",[e._v(" All Infinity Dimensions except for the 8th are limited to a maximum of "+e._s(e.format(Math.pow(e.totalDimCap,e.capExpo),2))+" purchases each. "),i("br"),e._v(" The 8th Infinity Dimension is limited to "+e._s(e.format(this.trueID8cap,2))+" purchases. ")]),i("div",[e._v("You are getting "+e._s(e.format(e.powerPerSecond,2,0))+" "+e._s(e.incomeType)+" per second.")]),i("br"),e.atCap?i("span",[e._v("Due to instability, your Infinity Power gain is softcapped after "+e._s(e.format(this.textCap)))]):e._e(),i("br"),e.atTessCap?i("span",[e._v("Tesseracts beyond "+e._s(e.format(this.TesseractsCap))+" are physically impossible")]):e._e(),i("br"),e.isEC8Running?i("b",{staticClass:"l-infinity-dim-tab__ec8-purchases"},[e._v(" You have "+e._s(e.quantifyInt("purchase",e.EC8PurchasesLeft))+" left within Eternity Challenge 8. ")]):e._e(),i("div",{staticClass:"l-dimensions-container"},e._l(8,(function(e){return i("InfinityDimensionRow",{key:e,attrs:{tier:e}})})),1),e.showLockedDimCostNote?i("div",[e._v(" Hold shift to see the Infinity Point cost for locked Infinity Dimensions. ")]):e._e()])},VB=[],YB=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.showRow,expression:"showRow"}],staticClass:"c-dimension-row l-dimension-row-infinity-dim l-dimension-single-row",class:{"c-dim-row--not-reached":!e.isUnlocked&&!e.canUnlock}},[i("GenericDimensionRowText",{attrs:{tier:e.tier,name:e.name,"multiplier-text":e.formatX(e.multiplier,2,1),"amount-text":e.format(e.amount,2),rate:e.rateOfChange}}),i("div",{staticClass:"l-dim-row-multi-button-container c-modern-dim-tooltip-container",style:e.cssVars},[i("div",{staticClass:"c-modern-dim-purchase-count-tooltip",style:e.cssVars},[e._v(" "+e._s(e.capTooltip)+" ")]),i("PrimaryButton",{staticClass:"o-primary-btn--buy-id o-primary-btn o-primary-btn--new o-primary-btn--buy-dim",class:e.buttonClass(),attrs:{enabled:e.isAvailableForPurchase&&!e.isContinuumActive||!e.isUnlocked&&e.canUnlock},on:{click:e.buySingleInfinityDimension}},[e._v(" "+e._s(e.costDisplay)+" ")]),!e.isAutobuyerUnlocked||e.isEC8Running||e.isContinuumActive?e.isContinuumActive?e._e():i("PrimaryButton",{staticClass:"o-primary-btn--id-auto",attrs:{enabled:e.isAvailableForPurchase},on:{click:e.buyMaxInfinityDimension}},[e._v(" Buy Max ")]):i("PrimaryToggleButton",{staticClass:"o-primary-btn--id-auto",attrs:{label:"Auto:"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}})],1)],1)},WB=[];const jB={name:"ModernInfinityDimensionRow",components:{GenericDimensionRowText:Sw,PrimaryButton:Vs,PrimaryToggleButton:Sh},props:{tier:{type:Number,required:!0}},data(){return{hasPrevTier:!1,isUnlocked:!1,canUnlock:!1,multiplier:new Decimal(0),baseAmount:0,amount:new Decimal(0),purchases:0,rateOfChange:new Decimal(0),isAutobuyerUnlocked:!1,cost:new Decimal(0),isAvailableForPurchase:!1,isCapped:!1,capIP:new Decimal(0),isAutobuyerOn:!1,isEC8Running:!1,hardcap:InfinityDimensions.HARDCAP_PURCHASES,eternityReached:!1,enslavedRunning:!1,isContinuumActive:!1,continuumValue:0}},computed:{shiftDown(){return ui.view.shiftDown},name(){return`${InfinityDimension(this.tier).shortDisplayName} Infinity Dimension`},costDisplay(){return this.isContinuumActive?`Continuum: ${this.continuumString}`:this.isUnlocked||this.shiftDown?this.isCapped?"Capped":this.showCostTitle?`Cost: ${format(this.cost)} IP`:`${format(this.cost)} IP`:this.canUnlock?"Unlock":`Reach ${formatPostBreak(InfinityDimension(this.tier).amRequirement)} AM`},continuumString(){return this.continuumValue>=1e9?format(this.continuumValue,2,2):formatFloat(this.continuumValue,2)},hasLongText(){return this.costDisplay.length>15},capTooltip(){return this.enslavedRunning?`Nameless prevents the purchase of more than ${format(10)} Infinity Dimensions`:this.isContinuumActive?"Continuum produces all your Infinity Dimensions":this.isCapped?`Cap reached at ${format(this.capIP)} IP`:this.purchases>=1e12?`Purchased ${format(this.purchases,2,2)} times`:`Purchased ${quantifyInt("time",this.purchases)}`},showRow(){return this.eternityReached||this.isUnlocked||this.canUnlock||this.amount.gt(0)||this.hasPrevTier},showCostTitle(){return this.cost.exponent<1e6},cssVars(){return{"--x-pos":this.isContinuumActive?"-125%":"-175%"}}},watch:{isAutobuyerOn(e){Autobuyer.infinityDimension(this.tier).isActive=e}},methods:{update(){const e=this.tier,t=InfinityDimension(e);this.hasPrevTier=1===e||InfinityDimension(e-1).isUnlocked,this.isUnlocked=t.isUnlocked,this.canUnlock=t.canUnlock,this.multiplier.copyFrom(t.multiplier),this.baseAmount=t.baseAmount,this.purchases=t.purchases,this.amount.copyFrom(t.totalAmount),this.rateOfChange.copyFrom(t.rateOfChange),this.isAutobuyerUnlocked=Autobuyer.infinityDimension(e).isUnlocked,this.cost.copyFrom(t.cost),this.isAvailableForPurchase=t.isAvailableForPurchase,this.isCapped=t.isCapped,this.isCapped&&(this.capIP.copyFrom(t.hardcapIPAmount),this.hardcap=t.purchaseCap),this.isEC8Running=EternityChallenge(8).isRunning,this.isAutobuyerOn=Autobuyer.infinityDimension(e).isActive,this.eternityReached=PlayerProgress.eternityUnlocked(),this.enslavedRunning=Enslaved.isRunning,this.isContinuumActive=Ra.continuumActive&&!fQ.isDoomed,this.isContinuumActive&&(this.continuumValue=t.continuumValue)},buySingleInfinityDimension(){this.isContinuumActive||InfinityDimension(this.tier).buySingle()},buyMaxInfinityDimension(){this.isContinuumActive||InfinityDimension(this.tier).buyMax(!1)},buttonClass(){return{"l-dim-row-small-text":this.hasLongText,"o-non-clickable o-continuum":this.isContinuumActive}}}},XB=jB;var zB=(0,X.Z)(XB,YB,WB,!1,null,"39f8097c",null);const KB=zB.exports,ZB={name:"ModernInfinityDimensionsTab",components:{PrimaryButton:Vs,InfinityDimensionRow:KB,PrimaryToggleButton:Sh},data(){return{infinityPower:new Decimal(0),dimMultiplier:new Decimal(0),powerPerSecond:new Decimal(0),incomeType:"",isEC8Running:!1,EC8PurchasesLeft:0,isEC9Running:!1,isEnslavedRunning:!1,isAnyAutobuyerUnlocked:!1,conversionRate:0,nextDimCapIncrease:0,tesseractCost:new Decimal(0),totalDimCap:0,canBuyTesseract:!1,enslavedCompleted:!1,boughtTesseracts:0,extraTesseracts:0,creditsClosed:!1,showLockedDimCostNote:!0,isAutoTessUnlocked:!1,isAutoTessOn:!1,atCap:!1,textCap:0,capExpo:1,trueID8cap:0,IPcap:0,TesseractsCap:20,atTessCap:!1}},computed:{sacrificeBoostDisplay(){return formatX(this.sacrificeBoost,2,2)},sacrificeTooltip(){return`Boosts 8th Antimatter Dimension by ${this.sacrificeBoostDisplay}`},tesseractCountString(){const e=this.extraTesseracts>0?` + ${format(this.extraTesseracts,2,2)}`:"";return`${formatInt(this.boughtTesseracts)}${e}`}},watch:{isAutoTessOn(e){nZ.tesseract.isActive=e}},methods:{update(){this.showLockedDimCostNote=!InfinityDimension(8).isUnlocked,this.isEC9Running=EternityChallenge(9).isRunning,this.infinityPower.copyFrom(Currency.infinityPower),this.conversionRate=InfinityDimensions.powerConversionRate,this.isEC9Running?this.dimMultiplier.copyFrom(Decimal.pow(Math.max(this.infinityPower.log2(),1),4).max(1)):this.dimMultiplier.copyFrom(this.infinityPower.pow(this.conversionRate).max(1)),this.powerPerSecond.copyFrom(InfinityDimension(1).productionPerSecond),this.incomeType=EternityChallenge(7).isRunning?"Seventh Dimensions":"Infinity Power",this.isEC8Running=EternityChallenge(8).isRunning,this.isEC8Running&&(this.EC8PurchasesLeft=player.eterc8ids),this.isEnslavedRunning=Enslaved.isRunning,this.isAnyAutobuyerUnlocked=nZ.infinityDimension(1).isUnlocked,this.nextDimCapIncrease=Tesseracts.nextTesseractIncrease,this.tesseractCost.copyFrom(Tesseracts.nextCost),this.totalDimCap=InfinityDimensions.totalDimCap,this.canBuyTesseract=Tesseracts.canBuyTesseract,this.isAutoTessUnlocked=nZ.tesseract.isUnlocked,this.isAutoTessOn=nZ.tesseract.isActive,this.enslavedCompleted=Enslaved.isCompleted,this.boughtTesseracts=Tesseracts.bought,this.extraTesseracts=Tesseracts.extra,this.creditsClosed=GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||PlayerProgress.mendingUnlocked()&&player.isGameEnd,this.IPcap=InfinityDimension(8).infPowerSoftcap,this.atCap=player.infinityPower.exponent>=this.IPcap,this.textCap=Decimal.pow(10,this.IPcap),this.capExpo=Ra.unlocks.improvedECRewards.isUnlocked&&EternityChallenge(12).completions>=1?EternityChallenge(12).vReward.effectValue:1,this.trueID8cap=player.timestudy.studies.includes(310)?1e10*Math.max(Math.log10(Currency.replicanti.value.exponent),1):1e10,this.TesseractsCap=Tesseracts.TesseractHardcap,this.atTessCap=Tesseracts.bought>=Tesseracts.TesseractHardcap},maxAll(){InfinityDimensions.buyMax()},toggleAllAutobuyers(){toggleAllInfDims()},buyTesseract(){Tesseracts.buyTesseract()}}},QB=ZB;var JB=(0,X.Z)(QB,qB,VB,!1,null,"80df2ae2",null);const eN=JB.exports,tN={name:"InfinityDimensionsTab",components:{ClassicInfinityDimensionsTab:HB,ModernInfinityDimensionsTab:eN},computed:{activeComponent(){return"Modern"==this.$viewModel.UIType?"ModernInfinityDimensionsTab":"ClassicInfinityDimensionsTab"}}},iN=tN;var aN=(0,X.Z)(iN,CB,AB,!1,null,null,null);const nN=aN.exports;var sN=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-infinity-upgrades-tab"},[e.chargeUnlocked?i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryButton",{class:e.disChargeClassObject,on:{click:function(t){e.disCharge=!e.disCharge}}},[e._v(" Respec Charged Infinity Upgrades on next Reality ")])],1):e._e(),e.chargeUnlocked?i("div",[e._v(" You have charged "+e._s(e.formatInt(e.chargesUsed))+"/"+e._s(e.formatInt(e.totalCharges))+" Infinity Upgrades. Charged Infinity Upgrades have their effect altered. "),i("br"),e._v(" Hold shift to show Charged Infinity Upgrades. You can freely respec your choices on Reality. ")]):e._e(),e.isUseless?i("div",[e._v(" You cannot Charge Infinity Upgrades while Doomed. ")]):e._e(),i("br"),e._v(" Within each column, the upgrades must be purchased from top to bottom. "),i("br"),i("div",{staticClass:"l-infinity-upgrade-grid l-infinity-upgrades-tab__grid"},e._l(e.grid,(function(t,a){return i("div",{key:a,staticClass:"c-infinity-upgrade-grid__column"},[e._l(t,(function(t){return i("InfinityUpgradeButton",{key:t.id,class:e.btnClassObject(a),attrs:{upgrade:t}})})),i("div",{staticClass:"c-infinity-upgrade-grid__column--background",style:e.styleOfColumnBg[a]})],2)})),0),e.bottomRowUnlocked?i("div",{staticClass:"l-infinity-upgrades-bottom-row"},[i("IpMultiplierButton",{staticClass:"l-infinity-upgrades-tab__mult-btn"}),i("InfinityUpgradeButton",{class:e.btnClassObject(1),attrs:{upgrade:e.offlineIpUpgrade}})],1):e._e(),e.eternityUnlocked&&e.bottomRowUnlocked?i("div",[e._v(" The Infinity Point multiplier becomes more expensive "),i("br"),e._v(" above "+e._s(e.formatPostBreak(e.ipMultSoftCap))+" Infinity Points, and cannot be purchased past "+e._s(e.formatPostBreak(e.ipMultHardCap))+" Infinity Points. ")]):e._e()])},rN=[],oN=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group"},[i("InfinityUpgradeButton",{staticClass:"o-infinity-upgrade-btn--multiplier",attrs:{upgrade:e.upgrade}},[e.isCapped?[i("br"),i("span",[e._v("(Capped at "+e._s(e.quantify("Infinity Point",e.upgrade.config.costCap))+")")])]:e._e()],2),i("PrimaryButton",{staticClass:"l--spoon-btn-group__little-spoon o-primary-btn--small-spoon",on:{click:function(t){return e.buyMaxIPMult()}}},[e._v(" Max Infinity Point mult ")]),e.isAutoUnlocked?i("PrimaryToggleButton",{staticClass:"l--spoon-btn-group__little-spoon o-primary-btn--small-spoon",attrs:{label:"Autobuy IP mult"},model:{value:e.isAutobuyerActive,callback:function(t){e.isAutobuyerActive=t},expression:"isAutobuyerActive"}}):e._e()],1)},lN=[];const cN={name:"IpMultiplierButton",components:{PrimaryButton:Vs,PrimaryToggleButton:Sh,InfinityUpgradeButton:TR},data(){return{isAutobuyerActive:!1,isAutoUnlocked:!1,isCapped:!1}},computed:{upgrade(){return InfinityUpgrade.ipMult}},watch:{isAutobuyerActive(e){Autobuyer.ipMult.isActive=e}},methods:{update(){this.isAutoUnlocked=Autobuyer.ipMult.isUnlocked,this.isAutobuyerActive=Autobuyer.ipMult.isActive,this.isCapped=this.upgrade.isCapped},buyMaxIPMult(){InfinityUpgrade.ipMult.buyMax()}}},uN=cN;var dN=(0,X.Z)(uN,oN,lN,!1,null,"79ab45ba",null);const hN=dN.exports,mN={name:"InfinityUpgradesTab",components:{PrimaryButton:Vs,InfinityUpgradeButton:TR,IpMultiplierButton:hN},data(){return{isUseless:!1,chargeUnlocked:!1,totalCharges:0,chargesUsed:0,disCharge:!1,ipMultSoftCap:0,ipMultHardCap:0,eternityUnlocked:!1,bottomRowUnlocked:!1,styleOfColumnBg:void 0}},computed:{grid(){return[[InfinityUpgrade.totalTimeMult,InfinityUpgrade.dim18mult,InfinityUpgrade.dim36mult,InfinityUpgrade.resetBoost],[InfinityUpgrade.buy10Mult,InfinityUpgrade.dim27mult,InfinityUpgrade.dim45mult,InfinityUpgrade.galaxyBoost],[InfinityUpgrade.thisInfinityTimeMult,InfinityUpgrade.unspentIPMult,InfinityUpgrade.dimboostMult,InfinityUpgrade.ipGen],[InfinityUpgrade.skipReset1,InfinityUpgrade.skipReset2,InfinityUpgrade.skipReset3,InfinityUpgrade.skipResetGalaxy]]},allColumnUpgrades(){return this.grid.flat()},disChargeClassObject(){return{"o-primary-btn--subtab-option":!0,"o-primary-btn--charged-respec-active":this.disCharge}},offlineIpUpgrade:()=>InfinityUpgrade.ipOffline},watch:{disCharge(e){player.celestials.ra.disCharge=e}},created(){this.on$(GAME_EVENT.INFINITY_UPGRADE_BOUGHT,(()=>this.setStyleOfColumnBg())),this.on$(GAME_EVENT.INFINITY_UPGRADE_CHARGED,(()=>this.setStyleOfColumnBg())),this.on$(GAME_EVENT.INFINITY_UPGRADES_DISCHARGED,(()=>this.setStyleOfColumnBg())),this.setStyleOfColumnBg()},methods:{update(){this.isUseless=Pelle.isDoomed,this.chargeUnlocked=Ra.unlocks.chargedInfinityUpgrades.canBeApplied&&!Pelle.isDoomed,this.totalCharges=Ra.totalCharges,this.chargesUsed=Ra.totalCharges-Ra.chargesLeft,this.disCharge=player.celestials.ra.disCharge,this.ipMultSoftCap=GameDatabase.infinity.upgrades.ipMult.costIncreaseThreshold,this.ipMultHardCap=GameDatabase.infinity.upgrades.ipMult.costCap,this.eternityUnlocked=PlayerProgress.current.isEternityUnlocked,this.bottomRowUnlocked=Achievement(41).isUnlocked},btnClassObject(e){const t={"l-infinity-upgrade-grid__cell":!0};return e>0&&(t[`o-infinity-upgrade-btn--color-${e+1}`]=!0),t},getColumnColor(e){return e.isCharged?"var(--color-teresa--base)":e.isBought?"var(--color-infinity)":"transparent"},setStyleOfColumnBg(){this.styleOfColumnBg=this.grid.map((e=>({background:`linear-gradient(to bottom,\n ${this.getColumnColor(e[0])} 15%,\n ${this.getColumnColor(e[1])} 35% 40%,\n ${this.getColumnColor(e[2])} 60% 65%,\n ${this.getColumnColor(e[3])} 85% 100%`})))}}},pN=mN;var yN=(0,X.Z)(pN,sN,rN,!1,null,"c6393b0e",null);const fN=yN.exports;var gN=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-laitela-celestial-tab"},[i("CelestialQuoteHistory",{attrs:{celestial:"laitela"}}),i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:function(t){return e.showLaitelaHowTo()}}},[e._v(" Click for Lai'tela info ")]),i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.maxAll}},[e._v(" Max all Dark Matter Dimensions ")])],1),i("div",{staticClass:"o-laitela-matter-amount"},[e._v(" You have "),i("span",{style:e.styleObject},[e._v(e._s(e.format(e.darkMatter,2)))]),e._v(" Dark Matter"),e.isDMCapped?i("span",[e._v(" (capped)")]):e._e(),e._v(". "),e.isDMCapped?e._e():i("span",[e._v("(Average: "+e._s(e.format(e.darkMatterGain,2,2))+"/s)")])]),i("div",{staticClass:"o-laitela-matter-amount"},[e._v(" Your maximum Dark Matter ever is "),i("span",{style:e.styleObject},[e._v(e._s(e.format(e.maxDarkMatter,2)))]),e.isDoomed?e._e():i("span",[e._v(", giving "+e._s(e.formatPercents(e.matterExtraPurchasePercentage,2))+" more purchases from Continuum")]),e._v(". ")]),i("div",{staticClass:"o-laitela-matter-amount"},[e._v(" Dark Matter Dimensions are unaffected by storing real time. ")]),e.singularitiesUnlocked?e._e():i("h2",{staticClass:"c-laitela-singularity-container"},[e._v(" Unlock Singularities in "+e._s(e.singularityWaitTime)+". ("+e._s(e.format(e.darkEnergy,2,2))+"/"+e._s(e.format(e.singularityCap,2))+" Dark Energy) ")]),e.singularitiesUnlocked?i("SingularityPane"):e._e(),e.autobuyersUnlocked?i("LaitelaAutobuyerPane"):e._e(),i("div",{staticClass:"l-laitela-mechanics-container"},[i("LaitelaRunButton"),i("div",[i("DarkMatterDimensionGroup"),e.showAnnihilation?i("AnnihilationButton"):e._e()],1),e.singularityPanelVisible?i("SingularityMilestonePane"):e._e()],1)],1)},vN=[],bN=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-laitela-annihilation-container"},[e.darkMatter.lt(e.matterRequirement)?i("button",{staticClass:"l-laitela-annihilation-button"},[e._v(" Annihilation requires "+e._s(e.format(e.matterRequirement,2))+" Dark Matter ")]):i("button",{staticClass:"l-laitela-annihilation-button c-laitela-annihilation-button",on:{click:e.annihilate}},[i("b",[e._v("Annihilate your Dark Matter Dimensions")])]),i("br"),i("br"),e.darkMatterMult>1?i("span",[e._v(" Current multiplier to all Dark Matter Dimensions: "),i("b",[e._v(e._s(e.formatX(e.darkMatterMult,2,2)))]),i("br"),i("br"),e._v(" Annihilation will reset your Dark Matter and Dark Matter Dimension amounts, but also add "),i("b",[e._v("+"+e._s(e.format(e.darkMatterMultGain,2,2)))]),e._v(" to your Annihilation multiplier. "),i("br"),e._v(" ("),i("b",[e._v(e._s(e.formatX(e.darkMatterMultRatio,2,2)))]),e._v(" from previous multiplier) "),e.autobuyerUnlocked?i("span",[i("br"),i("br"),e._v(" Auto-Annihilate when adding "),i("input",{directives:[{name:"model",rawName:"v-model",value:e.autoAnnihilationInput,expression:"autoAnnihilationInput"}],staticClass:"c-small-autobuyer-input c-laitela-annihilation-input",style:e.annihilationInputStyle,attrs:{type:"text"},domProps:{value:e.autoAnnihilationInput},on:{change:function(t){return e.handleAutoAnnihilationInputChange()},input:function(t){t.target.composing||(e.autoAnnihilationInput=t.target.value)}}}),e._v(" to the multiplier. ")]):e._e()]):i("span",[e._v(" Annihilation will reset your Dark Matter and Dark Matter Dimension amounts, but will give a permanent multiplier of "),i("b",[e._v(e._s(e.formatX(1+e.darkMatterMultGain,2,2)))]),e._v(" to all Dark Matter Dimensions. ")])])},EN=[];const TN={name:"AnnihilationButton",data(){return{darkMatter:new Decimal(0),darkMatterMult:0,darkMatterMultGain:0,autobuyerUnlocked:!1,annihilationButtonVisible:!1,matterRequirement:0,darkMatterMultRatio:0,autoAnnihilationInput:player.auto.annihilation.multiplier,isEnabled:!0}},computed:{annihilationInputStyle(){return{"background-color":this.isEnabled?"":"var(--color-bad)"}}},methods:{update(){this.darkMatter.copyFrom(Currency.darkMatter),this.darkMatterMult=Laitela.darkMatterMult,this.darkMatterMultGain=Laitela.darkMatterMultGain,this.autobuyerUnlocked=Autobuyer.annihilation.isUnlocked,this.annihilationButtonVisible=Laitela.canAnnihilate||this.autobuyerUnlocked,this.matterRequirement=Laitela.annihilationDMRequirement,this.darkMatterMultRatio=Laitela.darkMatterMultRatio,this.isEnabled=player.auto.annihilation.isActive},annihilate(){Laitela.annihilate()},handleAutoAnnihilationInputChange(){const e=parseFloat(this.autoAnnihilationInput);isNaN(e)?this.autoAnnihilationInput=player.auto.annihilation.multiplier:player.auto.annihilation.multiplier=e}}},wN=TN;var kN=(0,X.Z)(wN,bN,EN,!1,null,null,null);const CN=kN.exports;var AN=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",e._l(8,(function(e){return i("DarkMatterDimensionRow",{key:e,attrs:{tier:e}})})),1)},_N=[],SN=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isUnlocked?i("div",{staticClass:"c-dark-matter-dimension-container"},[i("div",{staticClass:"o-dark-matter-dimension-amount"},[e._v(" "+e._s(e.name)),e.hasAscended?i("span",[e._v(" "+e._s(e.ascensionText))]):e._e(),e._v(": "+e._s(e.format(e.amount,2))+" ")]),i("div",[e._v(" Average gain: "+e._s(e.format(e.productionPerSecond,2,2))+"/s (+"+e._s(e.formatPercents(e.percentPerSecond,2,2))+"/s) ")]),i("div",{staticClass:"c-dark-matter-dimension-buttons"},[i("button",{class:e.intervalClassObject,on:{click:e.handleIntervalClick,mouseover:function(t){return e.hoverState(!0)},mouseleave:function(t){return e.hoverState(!1)},mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.hold("interval")}}},[e.isIntervalCapped?i("span",{attrs:{"ach-tooltip":e.ascensionTooltip}},[i("i",{staticClass:"fas fa-question-circle"})]):e._e(),i("span",{domProps:{innerHTML:e._s(e.intervalText)}})]),i("button",{class:e.darkMatterClassObject,on:{click:e.buyPowerDM,mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.hold("DM")}}},[i("span",{domProps:{innerHTML:e._s(e.darkMatterText)}})]),i("button",{class:e.darkEnergyClassObject,on:{click:e.buyPowerDE,mousedown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"left",37,t.key,["Left","ArrowLeft"])||"button"in t&&0!==t.button?null:e.hold("DE")}}},[i("span",{domProps:{innerHTML:e._s(e.darkEnergyText)}})])]),e.interval>200?i("div",[e._v(" Tick: "+e._s(e.formatInt(e.timer))+" ms ("+e._s(e.formatPercents(e.timerPercent,1))+") ")]):i("div",[e._v(" "+e._s(e.format(1e3/e.interval,2,2))+" ticks / sec ")]),i("div",[e._v(" Dark Energy: "+e._s(e.format(e.darkEnergyPerSecond,2,4))+"/s ("+e._s(e.formatPercents(e.portionDE,1))+" of total) ")])]):e._e()},DN=[];const RN={name:"DarkMatterDimensionRow",props:{tier:{type:Number,required:!0}},data(){return{isUnlocked:!1,ascension:0,hasAscended:!1,powerDMPerAscension:0,interval:0,powerDM:new Decimal(0),powerDE:0,intervalCost:0,powerDMCost:0,powerDECost:0,amount:new Decimal(0),canBuyInterval:!1,canBuyPowerDM:!1,canBuyPowerDE:!1,isIntervalCapped:!1,timer:0,timerPecent:0,intervalAscensionBump:1e4,intervalAfterAscension:0,darkEnergyPerSecond:0,portionDE:0,productionPerSecond:new Decimal(0),percentPerSecond:0,hoverOverAscension:!1}},computed:{name(){return`${DarkMatterDimension(this.tier).shortDisplayName} Dark Matter Dimension`},ascensionText(){return`(⯅${formatInt(this.ascension)})`},intervalClassObject(){return{"o-dark-matter-dimension-button":!0,"o-dark-matter-dimension-button--available":this.canBuyInterval,"o-dark-matter-dimension-button--ascend":this.isIntervalCapped}},darkMatterClassObject(){return{"o-dark-matter-dimension-button":!0,"o-dark-matter-dimension-button--available":this.hoverOverAscension||this.canBuyPowerDM,"o-dark-matter-dimension-button--accent":this.hoverOverAscension}},darkEnergyClassObject(){return{"o-dark-matter-dimension-button":!0,"o-dark-matter-dimension-button--available":this.hoverOverAscension||this.canBuyPowerDE,"o-dark-matter-dimension-button--accent":this.hoverOverAscension}},intervalText(){const e=this.hoverOverAscension?this.intervalAfterAscension:this.interval,t=e>1e3?`${format(e/1e3,2,2)}s`:`${format(e,2,2)}ms`,i=this.hoverOverAscension?`${t}`:t;let a;return a=this.isIntervalCapped?this.hoverOverAscension?"On ascend ➜":"Ascend!":`Cost: ${this.formatDMCost(this.intervalCost)} DM`,` ${i}
${a}`},darkMatterText(){const e=this.powerDM.times(this.hoverOverAscension?this.powerDMPerAscension:1),t=`DM ${formatX(e,2,2)}`,i=this.hoverOverAscension?`${t}`:t,a=this.powerDMPerAscension*this.interval/this.intervalAfterAscension,n=this.hoverOverAscension?`${formatX(a,2,2)} / sec`:`Cost: ${this.formatDMCost(this.powerDMCost)} DM`;return`${i}
${n}`},darkEnergyText(){const e=this.powerDE*(this.hoverOverAscension?POWER_DE_PER_ASCENSION:1),t=`DE +${format(e,2,4)}`,i=this.hoverOverAscension?`${t}`:t,a=POWER_DE_PER_ASCENSION*this.interval/this.intervalAfterAscension,n=this.hoverOverAscension?`${formatX(a,2,2)} / sec`:`Cost: ${this.formatDMCost(this.powerDECost)} DM`;return`${i}
${n}`},ascensionTooltip(){return`Interval is capped at ${formatInt(DarkMatterDimension(this.tier).intervalPurchaseCap)}ms.\n Ascension multiplies interval by ${formatInt(this.intervalAscensionBump)},\n DM by ${formatInt(this.powerDMPerAscension)}, and DE by ${formatInt(POWER_DE_PER_ASCENSION)}.`}},methods:{update(){const e=DarkMatterDimension(this.tier);this.isUnlocked=e.isUnlocked,this.ascension=e.ascensions,this.hasAscended=this.ascension>0,this.powerDMPerAscension=e.powerDMPerAscension,this.interval=e.interval,this.powerDM.copyFrom(e.powerDM),this.powerDE=e.powerDE,this.intervalCost=e.intervalCost,this.powerDMCost=e.powerDMCost,this.powerDECost=e.powerDECost,this.amount.copyFrom(e.amount),this.canBuyInterval=e.canBuyInterval,this.canBuyPowerDM=e.canBuyPowerDM,this.canBuyPowerDE=e.canBuyPowerDE,this.isIntervalCapped=e.interval<=e.intervalPurchaseCap,this.timer=e.timeSinceLastUpdate,this.timerPercent=this.timer/this.interval,this.intervalAscensionBump=SingularityMilestone.ascensionIntervalScaling.effectOrDefault(1200),this.intervalAfterAscension=e.intervalAfterAscension,this.darkEnergyPerSecond=e.productionPerSecond,this.portionDE=this.darkEnergyPerSecond/Currency.darkEnergy.productionPerSecond,this.productionPerSecond=this.dimensionProduction(this.tier),this.percentPerSecond=Decimal.divide(this.productionPerSecond,this.amount).toNumber(),this.isIntervalCapped||(this.hoverOverAscension=!1)},handleIntervalClick(){this.isIntervalCapped?DarkMatterDimension(this.tier).ascend():DarkMatterDimension(this.tier).buyInterval()},buyPowerDM(){DarkMatterDimension(this.tier).buyPowerDM()},buyPowerDE(){DarkMatterDimension(this.tier).buyPowerDE()},formatDMCost(e){return e.gt(new Decimal(Number.MAX_VALUE).times(Ra.unlocks.increaseDarkMatterCap.isUnlocked?Decimal.pow(1e10,Ra.pets.laitela.level):1))?Notations.current.infinite:format(e,2)},dimensionProduction(e){if(8===e)return 0;if(4===e&&Ra.pets.laitela.level<25)return SingularityMilestone.dim4Generation.effectOrDefault(0);const t=DarkMatterDimension(e+1);return t.amount.times(t.powerDM).divide(t.interval).times(1e3)},hoverState(e){this.isIntervalCapped&&(this.hoverOverAscension=e)},hold(e){player.celestials.laitela.isHoldingLClick=!0,player.celestials.laitela.holdStart=Date.now(),player.celestials.laitela.heldTier=this.tier,player.celestials.laitela.heldType=e}}},MN=RN;var IN=(0,X.Z)(MN,SN,DN,!1,null,null,null);const xN=IN.exports,PN={name:"DarkMatterDimensionGroup",components:{DarkMatterDimensionRow:xN}},GN=PN;var UN=(0,X.Z)(GN,AN,_N,!1,null,null,null);const BN=UN.exports;var NN=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.hasDimension||e.hasAscension||e.hasSingularity||e.hasAnnihilated?i("div",{staticClass:"c-laitela-singularity-container"},[e.hasDimension?i("PrimaryToggleButton",{staticClass:"c-laitela-automation-toggle",attrs:{label:"Auto-buy DMD:",on:e.autobuyStr},model:{value:e.dimension,callback:function(t){e.dimension=t},expression:"dimension"}}):e._e(),e.hasAscension?i("PrimaryToggleButton",{staticClass:"c-laitela-automation-toggle",attrs:{label:"Auto-Ascend:",on:e.autoAscendStr},model:{value:e.ascension,callback:function(t){e.ascension=t},expression:"ascension"}}):e._e(),e.hasSingularity?i("PrimaryToggleButton",{staticClass:"c-laitela-automation-toggle",attrs:{label:"Auto-Singularity:",on:e.autoSingularityStr},model:{value:e.singularity,callback:function(t){e.singularity=t},expression:"singularity"}}):e._e(),e.hasAnnihilated?i("PrimaryToggleButton",{staticClass:"c-laitela-automation-toggle",attrs:{label:"Auto-Annihilation:"},model:{value:e.annihilation,callback:function(t){e.annihilation=t},expression:"annihilation"}}):e._e()],1):e._e()},ON=[];const LN={name:"LaitelaAutobuyerPane",components:{PrimaryToggleButton:Sh},data(){return{hasDimension:!1,hasAscension:!1,hasSingularity:!1,hasAnnihilated:!1,dimension:!1,ascension:!1,singularity:!1,annihilation:!1,maxAutobuy:0,maxAutoAscend:0,autoSingularityFactor:0}},computed:{autobuyStr(){return pl(19).isBought?8===this.maxAutobuy||UZ.unlocks.dmdAuto1.isUnlocked?"ON (all DMD)":`ON (max. DMD ${this.maxAutobuy})`:4===this.maxAutobuy?"ON (all DMD)":`ON (max. DMD ${this.maxAutobuy})`},autoAscendStr(){return pl(19).isBought?8===this.maxAutobuy||UZ.unlocks.dmdAuto1.isUnlocked?"ON (all DMD)":`ON (max. DMD ${this.maxAutoAscend})`:4===this.maxAutoAscend?"ON (all DMD)":`ON (max. DMD ${this.maxAutoAscend})`},autoSingularityStr(){return 1===this.autoSingularityFactor?"At Cap":`Cap ${formatX(this.autoSingularityFactor,2,2)}`}},watch:{dimension(e){player.auto.darkMatterDims.isActive=e},ascension(e){player.auto.ascension.isActive=e},singularity(e){player.auto.singularity.isActive=e},annihilation(e){player.auto.annihilation.isActive=e}},methods:{update(){this.hasDimension=Autobuyer.darkMatterDims.isUnlocked,this.hasAscension=Autobuyer.darkMatterDimsAscension.isUnlocked,this.hasSingularity=Autobuyer.singularity.isUnlocked,this.hasAnnihilated=Autobuyer.annihilation.isUnlocked;const e=player.auto;this.dimension=e.darkMatterDims.isActive,this.ascension=e.ascension.isActive,this.singularity=e.singularity.isActive,this.annihilation=e.annihilation.isActive,this.maxAutobuy=SingularityMilestone.darkDimensionAutobuyers.effectValue,this.maxAutoAscend=SingularityMilestone.ascensionAutobuyers.effectValue,this.autoSingularityFactor=SingularityMilestone.autoCondense.effectValue}}},FN=LN;var $N=(0,X.Z)(FN,NN,ON,!1,null,null,null);const HN=$N.exports;var qN=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{class:e.classObject()},[i("span",{class:{"o-pelle-disabled":e.isDoomed}},[i("b",[e._v("Start Lai'tela's Reality")])]),i("div",{class:e.runButtonClassObject(),on:{click:e.startRun}}),e.realityReward>1?i("div",[i("b",[e._v(" All Dark Matter multipliers are "+e._s(e.formatX(e.realityReward,2,2))+" higher. ")]),e.maxDimTier>0?i("span",[i("br"),i("br"),e._v(" "+e._s(e.completionTime)+" "),i("br"),e.maxDimTier<=7?i("span",[i("b",[e._v("Highest active dimension: "+e._s(e.formatInt(e.maxDimTier)))])]):e._e(),i("br"),i("br"),e._v(" Glyph Set: "),i("GlyphSetPreview",{attrs:{text:"Fastest Destabilization Glyph Set","text-hidden":!0,"force-name-color":!1,glyphs:e.bestSet}})],1):i("span",[i("br"),i("b",[e._v(" You also gain an additional "+e._s(e.formatX(8))+" Dark Energy. ")]),i("br"),i("br"),e._v(" Lai'tela's Reality has been fully destabilized and cannot have its reward further improved. ")]),i("br")]):e._e(),e._l(e.runEffects,(function(t,a){return i("div",{key:a+"-laitela-run-desc"+e.maxDimTier},[e._v(" "+e._s(t)+" "),i("br")])})),i("br"),i("div",[e._v(e._s(e.runDescription))])],2)},VN=[];const YN={name:"LaitelaRunButton",components:{GlyphSetPreview:Fx},data(){return{realityTime:0,maxDimTier:0,isRunning:!1,realityReward:1,singularitiesUnlocked:!1,bestSet:[],tierNotCompleted:!0}},computed:{completionTime(){return this.tierNotCompleted?"Not completed at this tier":`Fastest Completion: ${TimeSpan.fromSeconds(this.realityTime).toStringShort()}`},runEffects(){return GameDatabase.celestials.descriptions[5].effects().split("\n")},runDescription(){return GameDatabase.celestials.descriptions[5].description()},isDoomed:()=>Pelle.isDoomed},methods:{update(){this.realityTime=player.celestials.laitela.fastestCompletion,this.maxDimTier=Laitela.maxAllowedDimension,this.realityReward=Laitela.realityReward,this.isRunning=Laitela.isRunning,this.singularitiesUnlocked=Currency.singularities.gt(0),this.bestSet=Glyphs.copyForRecords(player.records.bestReality.laitelaSet),this.tierNotCompleted=3600===this.realityTime||300===this.realityTime&&this.maxDimTier<8},startRun(){this.isDoomed||Modal.celestials.show({name:"Lai'tela's",number:5})},classObject(){return{"o-laitela-run-button":!0,"o-laitela-run-button--large":!this.singularitiesUnlocked}},runButtonClassObject(){return{"o-laitela-run-button__icon":!0,"o-laitela-run-button__icon--running":this.isRunning,"c-celestial-run-button--clickable":!this.isDoomed,"o-pelle-disabled-pointer":this.isDoomed}}}},WN=YN;var jN=(0,X.Z)(WN,qN,VN,!1,null,null,null);const XN=jN.exports;var zN=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-laitela-next-milestones"},[i("div",{staticClass:"o-laitela-singularity-modal-button",class:e.classObject,attrs:{onclick:"Modal.singularityMilestones.show()"}},[e._v(" Show all milestones ")]),e._l(e.milestones,(function(e){return i("SingularityMilestoneComponent",{key:e.id,attrs:{milestone:e,"suppress-glow":!0}})}))],2)},KN=[],ZN=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.containerClass},[e.isMetro||e.isMaxed?e._e():i("div",{staticClass:"c-laitela-milestone--bar-border-fix"}),i("div",{class:e.barClass,style:e.barStyle}),i("span",{class:{"o-pelle-disabled":e.isDoomed}},[e.isMaxed?e._e():i("b",[e._v(" "+e._s(e.progressDisplay)+" ")]),i("p",[i("span",{domProps:{innerHTML:e._s(e.upgradeDirectionIcon)}}),e._v(" "+e._s(e.description)+" ")]),i("b",[e._v(" "+e._s(e.effectDisplay)+" "),e.isUnique||e.isMaxed?e._e():i("span",[e._v("➜ "+e._s(e.nextEffectDisplay))])]),i("div",{staticClass:"c-laitela-milestone__completions"},[e._v(" "+e._s(e.completionsDisplay)+" ")])])])},QN=[];const JN={name:"SingularityMilestoneComponent",props:{milestone:{type:Object,required:!0},suppressGlow:{type:Boolean,default:!1}},data:()=>({isMaxed:!1,progressToNext:"",remainingSingularities:0,description:"",effectDisplay:"",isUnique:!1,nextEffectDisplay:"",start:0,completions:0,limit:0,milestoneMode:!1,singularitiesPerCondense:0,baseCondenseTime:0,currentCondenseTime:0,autoCondenseDelay:0,lastCheckedMilestones:0,autoSingActive:!1}),computed:{barStyle(){return{width:this.isMaxed?void 0:this.progressToNext}},barClass(){return{"c-laitela-milestone__progress":!0,"c-laitela-milestone-mask":!0,"c-laitela-milestone--completed":this.isMaxed}},containerClass(){return{"c-laitela-milestone":!0,"o-laitela-milestone--glow":!this.suppressGlow&&this.milestone.previousGoal>this.lastCheckedMilestones}},upgradeDirectionIcon(){switch(this.milestone.config.upgradeDirection){case Nt.SELF_BOOST:return"";case Nt.BOOSTS_MAIN:return'';case Nt.BOOSTS_LAITELA:return'';default:throw new Error("Unspecified Lai'tela upgrade direction in singularity milestone")}},maxCompletions(){return this.isUnique?1:this.limit},completionsDisplay(){const e=Number.isFinite(this.limit)?formatInt(this.maxCompletions):"∞";return`${formatInt(this.completions)}/${e} ${pluralize("completion",this.completions)}`},progressDisplay(){const e=this.remainingSingularities/this.singularitiesPerCondense;let t,i,a;switch(this.milestoneMode){case SINGULARITY_MILESTONE_RESOURCE.SINGULARITIES:return`In ${quantify("Singularity",this.remainingSingularities,2)}`;case SINGULARITY_MILESTONE_RESOURCE.CONDENSE_COUNT:return`Condense ${quantify("time",e,2,2)}`;case SINGULARITY_MILESTONE_RESOURCE.MANUAL_TIME:return t=Math.clampMin(0,this.currentCondenseTime),i=Math.ceil(e-1)*this.baseCondenseTime,`In ${TimeSpan.fromSeconds(t+i).toStringShort()} (manual)`;case SINGULARITY_MILESTONE_RESOURCE.AUTO_TIME:return t=Math.clampMin(0,this.currentCondenseTime+this.autoCondenseDelay),i=Math.ceil(e-1)*(this.baseCondenseTime+this.autoCondenseDelay),a=`In ${TimeSpan.fromSeconds(t+i).toStringShort()}`,this.autoSingActive?a:"Auto-Singularity is OFF";default:throw new Error("Unrecognized Singularity Milestone mode")}},isDoomed:()=>Pelle.isDoomed},methods:{update(){this.autoSingActive=player.auto.singularity.isActive,this.isMaxed=this.milestone.isMaxed,this.progressToNext=this.milestone.progressToNext,this.remainingSingularities=this.milestone.remainingSingularities,this.description=this.milestone.description,this.effectDisplay=this.milestone.effectDisplay,this.isUnique=this.milestone.isUnique,this.isUnique||this.isMaxed||(this.nextEffectDisplay=this.milestone.nextEffectDisplay),this.completions=this.milestone.completions,this.limit=this.milestone.limit,this.milestoneMode=player.celestials.laitela.singularitySorting.displayResource,this.singularitiesPerCondense=Singularity.singularitiesGained,this.baseCondenseTime=Singularity.timePerCondense,this.currentCondenseTime=Singularity.timeUntilCap,this.autoCondenseDelay=Singularity.timeDelayFromAuto,this.lastCheckedMilestones=player.celestials.laitela.lastCheckedMilestones,this.isMetro=Theme.current().isMetro}}},eO=JN;var tO=(0,X.Z)(eO,ZN,QN,!1,null,"67ba0edb",null);const iO=tO.exports,aO={name:"SingularityMilestonePane",components:{SingularityMilestoneComponent:iO},data(){return{milestones:[],hasNew:!1,shouldGlow:!1}},computed:{classObject(){return{"o-dark-matter-dimension-button--ascend":this.hasNew&&this.shouldGlow}}},methods:{update(){this.milestones=SingularityMilestones.nextMilestoneGroup,this.hasNew=0!==SingularityMilestones.unseenMilestones.length,this.shouldGlow=player.celestials.laitela.milestoneGlow}}},nO=aO;var sO=(0,X.Z)(nO,zN,KN,!1,null,null,null);const rO=sO.exports;var oO=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-laitela-singularity-container"},[i("div",[i("h2",[e._v(" You have "+e._s(e.quantify("Singularity",e.singularities,2))+" ")]),i("button",{class:e.condenseClassObject(),on:{click:e.doSingularity}},[i("h2",[e._v(" "+e._s(e.singularityFormText)+" ")]),""!==e.singularityWaitText?i("br"):e._e(),i("h2",[e._v(" "+e._s(e.singularityWaitText)+" ")])])]),0!==e.singularities?i("div",[i("div",{staticClass:"o-laitela-matter-amount"},[e._v(" You have "+e._s(e.format(e.darkEnergy,2,4))+" Dark Energy. (+"+e._s(e.format(e.darkEnergyGainPerSecond,2,4))+"/s) ")]),e.unlockedBulkSingularity?i("div",[i("button",{staticClass:"c-laitela-singularity__cap-control",class:{"c-laitela-singularity__cap-control--available":e.singularityCapIncreases>0},attrs:{"ach-tooltip":e.decreaseTooltip},on:{click:e.decreaseCap}},[e._v(" Decrease Singularity cap. ")]),i("button",{staticClass:"c-laitela-singularity__cap-control",class:{"c-laitela-singularity__cap-control--available":e.singularityCapIncreases<50+e.extendedCap},attrs:{"ach-tooltip":e.increaseTooltip},on:{click:e.increaseCap}},[e._v(" Increase Singularity cap. ")]),i("br"),e._v(" Each step increases the required Dark Energy by "+e._s(e.formatX(10))+", "),i("br"),e._v(" but also increases gained Singularities by "+e._s(e.formatX(e.perStepFactor))+". ")]):i("div",[i("br"),e._v(" Reach "+e._s(e.format(10))+" Singularities "),i("br"),e._v(" to unlock Bulk Singularities. "),i("br")]),i("br"),e._v(" Total time to "),e.hasAutoSingularity?i("span",[e._v("(auto-)")]):e._e(),e._v("condense: "+e._s(e.baseSingularityTime)+" "),e.hasAutoSingularity&&1!==e.autoSingularityFactor?i("span",[e._v(" (+"+e._s(e.additionalSingularityTime)+") ")]):e._e(),i("br"),e.hasAutoSingularity&&1!==e.autoSingularityFactor?i("span",[e._v("Manual ")]):e._e(),e._v(" Singularity gain rate: "+e._s(e.manualSingularityRate)+" "),i("br"),e.hasAutoSingularity&&1!==e.autoSingularityFactor?i("span",[e._v(" Automatic Singularity gain rate: "+e._s(e.autoSingularityRate)+" ")]):e._e()]):e._e()])},lO=[];const cO={name:"SingularityPane",data(){return{darkEnergy:0,darkEnergyGainPerSecond:0,singularities:0,singularityCapIncreases:0,canPerformSingularity:!1,unlockedBulkSingularity:!1,singularityCap:0,baseTimeToSingularity:0,currentTimeToSingularity:0,extraTimeAfterSingularity:0,singularitiesGained:0,autoSingularityFactor:0,perStepFactor:0,isAutoEnabled:!1,hasAutoSingularity:!1,nextLowerStep:0,willCondenseOnDecrease:!1,extendedCap:0}},computed:{isDoomed:()=>Pelle.isDoomed,singularityFormText(){const e=1===this.singularitiesGained?"all Dark Energy into a Singularity":`all Dark Energy into ${quantify("Singularity",this.singularitiesGained,2)}`;return this.canPerformSingularity?`Condense ${e}`:`Reach ${format(this.singularityCap)} Dark Energy to condense ${e}`},singularityWaitText(){let e=this.currentTimeToSingularity;return this.canPerformSingularity?(e+=this.extraTimeAfterSingularity,this.isAutoEnabled?e>0?`(Auto-condensing in ${TimeSpan.fromSeconds(e).toStringShort()})`:"(Will immediately auto-condense)":""):e<.001?`(Enough Dark Energy in < ${formatInt(1)} µs)`:`(Enough Dark Energy in ${TimeSpan.fromSeconds(e).toStringShort()})`},baseSingularityTime(){return TimeSpan.fromSeconds(this.baseTimeToSingularity).toStringShort()},additionalSingularityTime(){return TimeSpan.fromSeconds(this.extraTimeAfterSingularity).toStringShort()},manualSingularityRate(){const e=this.baseTimeToSingularity;return this.formatRate(this.singularitiesGained/e)},autoSingularityRate(){if(this.hasAutoSingularity&&!this.isAutoEnabled)return"Auto-Singularity is OFF";const e=this.baseTimeToSingularity+this.extraTimeAfterSingularity;return this.formatRate(this.singularitiesGained/e)},decreaseTooltip(){if(0===this.singularityCapIncreases)return"You cannot decrease the cap any further!";const e=this.singularitiesGained/this.perStepFactor;return this.willCondenseOnDecrease?`Decreasing the cap will immediately auto-condense for\n ${quantify("Singularity",e,2)}!`:null},increaseTooltip(){return this.singularityCapIncreases>=50+(Ra.unlocks.increaseSingLimits.isUnlocked?5*Math.floor((Ra.pets.laitela.level-40)/5)+1:0)?"You cannot increase the cap any further!":null}},methods:{update(){const e=player.celestials.laitela;this.darkEnergy=Currency.darkEnergy.value,this.darkEnergyGainPerSecond=Currency.darkEnergy.productionPerSecond,this.singularities=Currency.singularities.value,this.singularityCapIncreases=e.singularityCapIncreases,this.canPerformSingularity=Singularity.capIsReached,this.unlockedBulkSingularity=Currency.singularities.gte(10),this.singularityCap=Singularity.cap,this.baseTimeToSingularity=Singularity.timePerCondense,this.currentTimeToSingularity=Singularity.timeUntilCap,this.extraTimeAfterSingularity=Singularity.timeDelayFromAuto,this.singularitiesGained=Singularity.singularitiesGained,this.autoSingularityFactor=SingularityMilestone.autoCondense.effectOrDefault(1/0),this.perStepFactor=Singularity.gainPerCapIncrease,this.isAutoEnabled=player.auto.singularity.isActive&&SingularityMilestone.autoCondense.canBeApplied,this.hasAutoSingularity=Number.isFinite(this.autoSingularityFactor),this.nextLowerStep=this.singularityCap*this.autoSingularityFactor/10,this.willCondenseOnDecrease=this.isAutoEnabled&&this.darkEnergy>this.nextLowerStep,this.extendedCap=Ra.unlocks.increaseSingLimits.isUnlocked?5*Math.floor((Ra.pets.laitela.level-40)/5)+1:0},doSingularity(){Singularity.perform()},increaseCap(){Singularity.increaseCap()},decreaseCap(){Singularity.decreaseCap()},formatRate(e){return e<1/60?`${format(3600*e,2,3)} per hour`:e<1?`${format(60*e,2,3)} per minute`:`${format(e,2,3)} per second`},condenseClassObject(){return{"c-laitela-singularity":!0,"c-laitela-singularity--active":this.canPerformSingularity&&!this.isDoomed,"o-pelle-disabled":this.isDoomed,"o-pelle-disabled-pointer":this.isDoomed}}}},uO=cO;var dO=(0,X.Z)(uO,oO,lO,!1,null,"49e4cbd0",null);const hO=dO.exports,mO={name:"LaitelaTab",components:{LaitelaRunButton:XN,SingularityPane:hO,SingularityMilestonePane:rO,DarkMatterDimensionGroup:BN,AnnihilationButton:CN,LaitelaAutobuyerPane:HN,CelestialQuoteHistory:AM,PrimaryButton:Vs},data(){return{isDoomed:!1,darkMatter:new Decimal(0),darkMatterGain:new Decimal(0),isDMCapped:!1,maxDarkMatter:new Decimal(0),darkEnergy:0,matterExtraPurchasePercentage:0,autobuyersUnlocked:!1,singularityPanelVisible:!1,singularitiesUnlocked:!1,singularityCap:0,singularityWaitTime:0,showAnnihilation:!1}},computed:{styleObject(){return{color:this.isDMCapped?"var(--color-bad)":""}}},methods:{update(){this.isDoomed=Pelle.isDoomed,this.darkMatter.copyFrom(Currency.darkMatter),this.isDMCapped=this.darkMatter.eq(Number.MAX_VALUE),this.maxDarkMatter.copyFrom(Currency.darkMatter.max),this.darkEnergy=player.celestials.laitela.darkEnergy,this.matterExtraPurchasePercentage=Laitela.matterExtraPurchaseFactor-1,this.autobuyersUnlocked=SingularityMilestone.darkDimensionAutobuyers.canBeApplied||SingularityMilestone.darkDimensionAutobuyers.canBeApplied||SingularityMilestone.autoCondense.canBeApplied||Laitela.darkMatterMult>1,this.singularityPanelVisible=Currency.singularities.gt(0),this.singularitiesUnlocked=Singularity.capIsReached||this.singularityPanelVisible,this.singularityCap=Singularity.cap,this.singularityWaitTime=TimeSpan.fromSeconds((this.singularityCap-this.darkEnergy)/Currency.darkEnergy.productionPerSecond).toStringShort(),this.showAnnihilation=Laitela.annihilationUnlocked;const e=DarkMatterDimension(1);this.darkMatterGain=e.amount.times(e.powerDM).divide(e.interval).times(1e3)},maxAll(){Laitela.maxAllDMDimensions(8)},showLaitelaHowTo(){ui.view.h2pForcedTab=GameDatabase.h2p.tabs.filter((e=>"Lai'tela"===e.name))[0],Modal.h2p.show()}}},pO=mO;var yO=(0,X.Z)(pO,gN,vN,!1,null,null,null);const fO=yO.exports;var gO=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-stats-tab"},[i("div",{staticClass:"l-multiplier-subtab-btn-container"},e._l(e.availableOptions,(function(t,a){return i("button",{key:t.key+t.isActive,class:e.subtabClassObject(t),on:{click:function(t){return e.clickSubtab(a)}}},[e._v(" "+e._s(t.text)+" ")])})),0),i("div",{staticClass:"c-list-container"},[e._l(e.resourceSymbols,(function(t){return i("span",{key:t},[i("span",{staticClass:"c-symbol-overlay",domProps:{innerHTML:e._s(t)}})])})),i("MultiplierBreakdownEntry",{key:e.resource.key,attrs:{resource:e.resource,"is-root":!0}}),e._m(0)],2)])},vO=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-multiplier-tab-text-line"},[e._v(" Note: Entries are only expandable if they contain multiple sources which can be different values. For example, any effects which affect all Dimensions of any type equally will not expand into a list of eight identical numbers. "),i("br"),i("b",[e._v(" Some entries may cause lag if expanded out fully. Resizing happens over 200 ms (instead of instantly) in order to reduce possible adverse effects due to photosensitivity. This may cause some visual weirdness after prestige events. ")]),i("br"),e._v(" Some entries may have very inaccurate percentages, and may show incorrect values if set to multiplication. ")])}];class bO{constructor(e){this.key=e;const t=this.key.split("_"),i=GameDatabase.multiplierTabValues[t[0]][t[1]],a=t.length>=3?t.slice(2).map((e=>e.match("^\\d+$")?Number(e):e)):[];this._name=EO(i.name,a),this._multValue=EO(i.multValue,a),this._powValue=EO(i.powValue,a),this._dilationEffect=EO(i.dilationEffect,a),this._isActive=EO(i.isActive,a),this._fakeValue=EO(i.fakeValue,a),this._icon=EO(i.icon,a),this._displayOverride=EO(i.displayOverride,a),this._isDilated=EO(i.isDilated,a),this._isBase=EO(i.isBase,a),this._ignoresNerfPowers=EO(i.ignoresNerfPowers,a),this.data=p.Z.observable({mult:new Decimal(0),pow:0,isVisible:!1,lastVisibleAt:0})}update(){const e=this.isVisible;this.data.mult.fromDecimal(e?this.mult:b.D1),this.data.pow=e?this.pow:1,this.data.isVisible=e,e&&(this.data.lastVisibleAt=Date.now())}get name(){return this._name()}get mult(){var e;return new Decimal(null!==(e=this._multValue())&&void 0!==e?e:1)}get pow(){var e;return null!==(e=this._powValue())&&void 0!==e?e:1}get dilationEffect(){var e;return null!==(e=this._dilationEffect())&&void 0!==e?e:1}get isActive(){var e;return null!==(e=this._isActive())&&void 0!==e&&e}get fakeValue(){return this._fakeValue()}get icon(){return this._icon()}get displayOverride(){return this._displayOverride()}get isDilated(){return this._isDilated()}get isBase(){return this._isBase()}get ignoresNerfPowers(){var e;return null!==(e=this._ignoresNerfPowers())&&void 0!==e&&e}get isVisible(){return this.isActive&&(1!==this.pow||this.mult.neq(1))}}function EO(e,t){return"function"===typeof e?()=>e(...t):()=>e}const TO=new Map;function wO(e){const t=TO.get(e);if(void 0!==t)return t;const i=new bO(e);return TO.set(e,i),i}var kO=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.containerClass},[e.isEmpty?e._e():i("div",{staticClass:"c-stacked-bars"},e._l(e.averagedPercentList,(function(t,a){return i("div",{key:100+a,class:{"c-bar-highlight":e.mouseoverIndex===a},style:e.styleObject(a),on:{mouseover:function(t){e.mouseoverIndex=a},mouseleave:function(t){e.mouseoverIndex=-1},click:function(t){e.showGroup[a]=!e.showGroup[a]}}},[i("span",{staticClass:"c-bar-overlay",domProps:{innerHTML:e._s(e.barSymbol(a))}})])})),0),i("div"),i("div",{staticClass:"c-info-list"},[i("div",{staticClass:"c-total-mult"},[i("b",[e._v(" "+e._s(e.totalString())+" ")]),i("span",{staticClass:"c-display-settings"},[e.hasSeenPowers&&e.allowPowerToggle?i("PrimaryToggleButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Change Display for Power effects",expression:"'Change Display for Power effects'"}],staticClass:"o-primary-btn c-change-display-btn",attrs:{off:"^N",on:"×N"},model:{value:e.replacePowers,callback:function(t){e.replacePowers=t},expression:"replacePowers"}}):e._e(),e.groups.length>1?i("i",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"Change Multiplier Grouping",expression:"'Change Multiplier Grouping'"}],staticClass:"o-primary-btn c-change-display-btn fas fa-arrows-rotate",on:{click:e.changeGroup}}):e._e()],1)]),e.isEmpty?i("div",{staticClass:"c-no-effect"},[e._v(" No Active Effects "),i("br"),i("br"),e._v(" "+e._s(e.disabledText)+" ")]):e._l(e.entries,(function(t,a){return i("div",{key:t.key,on:{mouseover:function(t){e.mouseoverIndex=a},mouseleave:function(t){e.mouseoverIndex=-1}}},[e.shouldShowEntry(t)?i("div",{class:e.singleEntryClass(a)},[i("div",{on:{click:function(t){e.showGroup[a]=!e.showGroup[a]}}},[i("span",{class:e.expandIcon(a),style:e.expandIconStyle(a)}),e._v(" "+e._s(e.entryString(a))+" ")]),e.showGroup[a]&&e.hasChildEntries(a)?i("MultiplierBreakdownEntry",{attrs:{resource:t}}):e._e()],1):e._e()])})),e.isDilated&&!e.isEmpty?i("div",[i("div",{staticClass:"c-single-entry c-dilation-entry"},[i("div",[e._v(" "+e._s(e.dilationString())+" ")])])]):e._e(),"AD_total"===e.resource.key?i("div",{staticClass:"c-no-effect"},[i("div",[e._v(' "Base AD Production" is the amount of Antimatter that you would be producing with your current AD upgrades as if you had waited a fixed amount of time ('+e._s(e.formatInt(10))+"-"+e._s(e.formatInt(40))+" seconds depending on your AD count) after a Sacrifice. This may misrepresent your actual production if your ADs have been producing for a while, but the relative mismatch will become smaller as you progress further in the game and numbers become larger. ")]),e.inNC12?i("div",[e._v(" The breakdown in this tab within Normal Challenge 12 may be inaccurate for some entries, and might count extra multipliers which apply to all Antimatter Dimensions rather than just the ones which are displayed. ")]):e._e()]):e._e()],2)])},CO=[];i(3112);class AO{constructor(e){this.entries=e.map((e=>wO(e)))}get hasVisibleEntries(){const e=this.entries.filter((e=>e.isActive&&(e.mult.neq(1)||1!==e.pow)));return e.length>1||1===e.length&&e[0].key.startsWith("general")}}const _O=new Map;function SO(e){const t=_O.get(e);if(void 0!==t)return t;const i=GameDatabase.multiplierTabTree[e],a=void 0===i?[]:i.map((e=>new AO(e)));return _O.set(e,a),a}const DO=10;class RO{constructor(){this.dataPoints=[]}add(e){this.dataPoints.push(e),this.dataPoints.length>DO&&this.dataPoints.shift()}get average(){const e=this.dataPoints.filter((e=>void 0!==e));if(0===e.length)return[];const t=[],i=e[0];for(let a=0;ae[a])).sum()/e.length;return t}clear(){this.dataPoints=[]}}const MO=["IP_base","EP_base","TP_base"];function IO(e){return e.padStart(7," ")}const xO={name:"MultiplierBreakdownEntry",components:{PrimaryToggleButton:Sh},props:{resource:{type:bO,required:!0},isRoot:{type:Boolean,required:!1,default:!1}},data(){return{selected:0,percentList:[],averagedPercentList:[],showGroup:[],hadChildEntriesAt:[],mouseoverIndex:-1,lastNotEmptyAt:0,dilationExponent:1,isDilated:!1,lastLayoutChange:Date.now(),now:Date.now(),totalMultiplier:b.D1,totalPositivePower:1,replacePowers:player.options.multiplierTab.replacePowers,inNC12:!1}},computed:{groups(){return SO(this.resource.key)},entries(){return this.groups[this.selected].entries},rollingAverage(){return new RO},containerClass(){return{"c-multiplier-entry-container":!0,"c-multiplier-entry-root-container":this.isRoot}},isEmpty(){return!this.isRecent(this.lastNotEmptyAt)},disabledText(){return this.resource.isBase?Decimal.eq(this.resource.mult,0)?"You cannot gain this resource (prestige requirement not reached)":`You have no multipliers for this resource (will gain ${format(1)} on prestige)`:`Total effect inactive, disabled, or reduced to ${formatX(1)}`},hasSeenPowers(){return InfinityChallenge(4).isCompleted||PlayerProgress.eternityUnlocked()},allowPowerToggle(){const e=["AD_infinityPower","galaxies","tickspeed"];return!e.some((e=>this.resource.key.startsWith(e)))}},watch:{replacePowers(e){player.options.multiplierTab.replacePowers=e}},created(){this.groups.length>1&&player.options.multiplierTab.showAltGroup&&this.changeGroup()},methods:{update(){for(let e=0;ee.hasVisibleEntries));i&&(this.hadChildEntriesAt[e]=Date.now())}this.dilationExponent=this.resource.dilationEffect,this.isDilated=1!==this.dilationExponent,this.calculatePercents(),this.now=Date.now(),this.replacePowers=player.options.multiplierTab.replacePowers&&this.allowPowerToggle,this.inNC12=NormalChallenge(12).isRunning},changeGroup(){this.selected=(this.selected+1)%this.groups.length,player.options.multiplierTab.showAltGroup=1===this.selected,this.showGroup=Array.repeat(!1,this.entries.length),this.hadChildEntriesAt=Array.repeat(0,this.entries.length),this.lastLayoutChange=Date.now(),this.rollingAverage.clear(),this.update()},calculatePercents(){var e;const t=this.entries.map((e=>e.data.pow)),i=t.filter((e=>e>1)).reduce(((e,t)=>e*t),1),a=t.filter((e=>e<1)).reduce(((e,t)=>e*t),1),n=(null!==(e=this.resource.fakeValue)&&void 0!==e?e:this.resource.mult).log10()/i,s=0===n;s||(this.lastNotEmptyAt=Date.now());let r=[];for(const c of this.entries){const e=0===n?0:Decimal.log10(c.data.mult)/n,t=1===i?0:Math.log(c.data.pow)/Math.log(i),s=c.data.pow>=1?e/i+t*(1-1/i):Math.log(c.data.pow)/Math.log(a)*(a-1);r.push([c.ignoresNerfPowers,MO.includes(c.key)?Math.clampMin(s,1e-4):s])}const o=r.filter((e=>e[1]>0)).map((e=>e[1])).sum(),l=r.filter((e=>e[1]>0)).reduce(((e,t)=>e+(t[0]?t[1]:t[1]*a)),0);r=r.map((e=>e[1]>0?(e[0]?e[1]:e[1]*a)/l:Math.clampMin(e[1]*(o-l)/o/a,-1))),this.percentList=r,this.rollingAverage.add(s?void 0:r),this.averagedPercentList=this.rollingAverage.average,this.totalMultiplier=Decimal.pow10(n),this.totalPositivePower=i},styleObject(e){var t;const i=this.averagedPercentList.sum(),a=this.averagedPercentList[e]<0,n=this.entries[e].icon,s=this.averagedPercentList[e],r=e=>e>0?e*i:-e;return{position:"absolute",top:100*this.averagedPercentList.slice(0,e).map((e=>r(e))).sum()+"%",height:100*r(s)+"%",width:"100%","transition-duration":this.isRecent(this.lastLayoutChange)?void 0:"0.2s",border:0===s?"":"0.1rem solid var(--color-text)",color:null!==(t=null===n||void 0===n?void 0:n.textColor)&&void 0!==t?t:"black",background:a?`repeating-linear-gradient(-45deg, var(--color-bad), ${null===n||void 0===n?void 0:n.color} 0.8rem)`:null===n||void 0===n?void 0:n.color}},singleEntryClass(e){return{"c-single-entry":!0,"c-single-entry-highlight":this.mouseoverIndex===e}},shouldShowEntry(e){return e.data.isVisible||this.isRecent(e.data.lastVisibleAt)},barSymbol(e){var t,i;return null!==(t=null===(i=this.entries[e].icon)||void 0===i?void 0:i.symbol)&&void 0!==t?t:null},hasChildEntries(e){return this.isRecent(this.hadChildEntriesAt[e])},expandIcon(e){return this.showGroup[e]?"far fa-minus-square":"far fa-plus-square"},expandIconStyle(e){return{opacity:this.hasChildEntries(e)?1:0}},entryString(e){const t=this.percentList[e];if(t<0&&!MO.includes(this.entries[e].key))return this.nerfString(e);let i;i=0===t?formatPercents(0):1===t?formatPercents(1):t<.001?`<${formatPercents(.001,1)}`:t>.9995?`~${formatPercents(1)}`:formatPercents(t,1),i=IO(i);const a=this.entries[e];if(!a.data.isVisible)return`${i}: ${a.name}`;const n=a.displayOverride;let s;if(n)s=`(${n})`;else{const e=[],t=e=>{const t=a.isDilated;if(t&&1!==this.dilationExponent){const t=this.applyDilationExp(e,1/this.dilationExponent);return`${formatX(t,2,2)} ➜ ${formatX(e,2,2)}`}return a.isBase?format(e,2,2):formatX(e,2,2)};if(this.replacePowers&&1!==a.data.pow){const i=Math.log(a.data.pow)/Math.log(this.totalPositivePower),n=this.totalMultiplier.pow((this.totalPositivePower-1)*i);e.push(t(a.data.mult.times(n)))}else Decimal.neq(a.data.mult,1)&&e.push(t(a.data.mult)),1!==a.data.pow&&e.push(formatPow(a.data.pow,2,3));s=0===e.length?"":`(${e.join(", ")})`}return`${i}: ${a.name} ${s}`},nerfString(e){const t=this.entries[e],i=IO(formatPercents(this.percentList[e],1)),a=t.displayOverride;let n;const s=t.isBase?e=>format(e,2,2):e=>`/${format(e.reciprocal(),2,2)}`;if(a)n=`(${a})`;else{const e=[];if(this.replacePowers&&1!==t.data.pow){var r;const i=null!==(r=this.resource.fakeValue)&&void 0!==r?r:this.resource.mult;e.push(s(i.pow(1-1/t.data.pow)))}else Decimal.neq(t.data.mult,1)&&e.push(s(t.data.mult)),1!==t.data.pow&&e.push(formatPow(t.data.pow,2,3));n=0===e.length?"":`(${e.join(", ")})`}return`${i}: ${t.name} ${n}`},totalString(){const e=this.resource,t=e.name,i=e.displayOverride;if(i)return`${t}: ${i}`;const a=e.mult;return e.isBase?`${t}: ${format(a,2,2)}`:`${t}: ${formatX(a,2,2)}`},applyDilationExp(e,t){return Decimal.pow10(e.log10()**t)},dilationString(){const e=this.resource,t=e.mult;let i,a;if(this.isDilated&&e.isDilated){const n=this.entries.filter((e=>e.isVisible&&e.isDilated)).map((e=>e.mult)).map((e=>this.applyDilationExp(e,1/this.dilationExponent))).reduce(((e,t)=>e.times(t)),b.D1);i=n.neq(1)?n:this.applyDilationExp(t,1/this.dilationExponent),a=e.mult}else i=t,a=this.applyDilationExp(i,this.dilationExponent);const n=e.isBase?e=>format(e,2,2):e=>formatX(e,2,2);return`Dilation Effect: Exponent${formatPow(this.dilationExponent,2,3)}\n (${n(i,2,2)} ➜ ${n(a,2,2)})`},isRecent(e){return this.now-e<200}}},PO=xO;var GO=(0,X.Z)(PO,kO,CO,!1,null,"70c7468e",null);const UO=GO.exports,BO=[{id:0,key:"AM",text:"Antimatter Production"},{id:1,key:"tickspeed",text:"Tickspeed"},{id:2,key:"AD",text:"Antimatter Dimensions"},{id:3,key:"IP",text:"Infinity Points"},{id:4,key:"ID",text:"Infinity Dimensions"},{id:5,key:"infinities",text:"Infinities"},{id:6,key:"replicanti",text:"Replicanti Speed"},{id:7,key:"EP",text:"Eternity Points"},{id:8,key:"TD",text:"Time Dimensions"},{id:9,key:"eternities",text:"Eternities"},{id:10,key:"DT",text:"Dilated Time"},{id:11,key:"gamespeed",text:"Game Speed"},{id:12,key:"hostScore",text:"Score"}],NO={name:"MultiplierBreakdownTab",components:{MultiplierBreakdownEntry:UO},data(){return{availableOptions:[],currentID:player.options.multiplierTab.currTab}},computed:{currentKey(){return BO.find((e=>e.id===this.currentID)).key},resource(){return wO(`${this.currentKey}_total`)},resourceSymbols(){return GameDatabase.multiplierTabValues[this.currentKey].total.overlay}},methods:{update(){this.availableOptions=BO.map((e=>(0,B.Z)((0,B.Z)({},e),{},{isActive:this.checkActiveKey(e.key)}))).filter((e=>e.isActive))},checkActiveKey(e){const t=GameDatabase.multiplierTabValues[e].total.isActive;return"function"===typeof t?t():t},accessProp(e){return"function"===typeof e?e():e},subtabClassObject(e){return{"c-multiplier-subtab-btn":!0,"c-multiplier-subtab-btn--active":e.key===this.currentKey}},clickSubtab(e){this.currentID=this.availableOptions[e].id,player.options.multiplierTab.currTab=BO.find((e=>e.key===this.currentKey)).id}}},OO=NO;var LO=(0,X.Z)(OO,gO,vO,!1,null,"446e47ab",null);const FO=LO.exports;var $O=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-achievements-tab"},[i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryToggleButton",{staticClass:"o-primary-btn--subtab-option",attrs:{label:"Hide completed rows:"},model:{value:e.hideCompletedRows,callback:function(t){e.hideCompletedRows=t},expression:"hideCompletedRows"}}),e.showAutoAchieve?i("PrimaryToggleButton",{staticClass:"o-primary-btn--subtab-option",attrs:{label:"Auto Achievements:"},model:{value:e.isAutoAchieveActive,callback:function(t){e.isAutoAchieveActive=t},expression:"isAutoAchieveActive"}}):e._e()],1),i("div",{staticClass:"c-achievements-tab__header c-achievements-tab__header--multipliers"},[e.isDoomed?i("span",[e._v(" All Achievement multipliers have been disabled"),i("SwapAchievementImagesButton")],1):i("span",[e._v(" Achievements provide a multiplier to"),i("SwapAchievementImagesButton"),i("div",{domProps:{innerHTML:e._s(e.boostText)}})],1)]),e._m(0),e.showAutoAchieve?i("div",{staticClass:"c-achievements-tab__header"},[e.achCountdown.gt(0)?i("div",[e._v(" Automatically gain the next missing Achievement in "+e._s(e.timeDisplayNoDecimals(e.achCountdown))),e.isAutoAchieveActive?e._e():i("span",[e._v(" once Auto is turned on")]),e._v(". (left-to-right, top-to-bottom) ")]):0!==e.missingAchievements?i("div",[e._v(" Automatically gain the next missing Achievement as soon as you enable Auto Achievements. (left-to-right, top-to-bottom) ")]):e._e(),e.totalCountdown.gt(0)?i("div",[e._v(" You will regain all remaining achievements after "+e._s(e.timeDisplayNoDecimals(e.totalCountdown))+" if Auto Achievement "),e.isAutoAchieveActive?i("span",[e._v("stays enabled")]):i("span",[e._v("is turned on")]),e._v(". ")]):e._e(),i("br")]):e._e(),i("div",{staticClass:"l-achievement-grid"},e._l(e.renderedRows,(function(t,a){return i("NormalAchievementRow",{key:a,attrs:{row:t,"is-obscured":e.isObscured(a)}})})),1)])},HO=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-achievements-tab__header c-achievements-tab__header--multipliers"},[e._v(" Achievements with a "),i("i",{staticClass:"fas fa-star"}),e._v(" icon also give an additional reward. ")])}],qO=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isHidden?e._e():i("div",{class:e.classObject},e._l(e.row,(function(t,a){return i("normal-achievement",{key:a,staticClass:"l-achievement-grid__cell",attrs:{achievement:t,"is-obscured":e.isObscured}})})),1)},VO=[],YO=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.classObject,style:e.styleObject,on:{mouseenter:e.onMouseEnter,mouseleave:e.onMouseLeave}},[i("HintText",{key:e.garbleKey,staticClass:"l-hint-text--achievement",attrs:{type:"achievements"}},[e._v(" "+e._s(e.processedId)+" ")]),i("div",{staticClass:"o-achievement__tooltip"},[e.isMouseOver?[i("div",{staticClass:"o-achievement__tooltip__name"},[e._v(" "+e._s(e.processedName)+" ("+e._s(e.processedId)+") ")]),i("div",{staticClass:"o-achievement__tooltip__description"},[e._v(" "+e._s(e.processedDescription)+" ")]),e.config.reward?i("div",{staticClass:"o-achievement__tooltip__reward"},[e.isObscured?e._e():i("span",{class:{"o-pelle-disabled":e.isDisabled}},[e._v(" Reward: "+e._s(e.config.reward)+" "),e.config.formatEffect?i("EffectDisplay",{attrs:{br:"",config:e.config}}):e._e()],1)]):e._e(),e.achievedTime?i("div",{staticClass:"o-achievement-time"},[e._v(" "+e._s(e.achievedTime)+" ")]):e._e()]:e._e()],2),e.showUnlockState?i("div",{class:e.indicatorClassObject},[i("i",{class:e.indicatorIconClass})]):e._e(),e.hasReward?i("div",{class:e.rewardClassObject},[i("i",{staticClass:"fas fa-star"})]):e._e()],1)},WO=[];const jO={name:"NormalAchievement",components:{EffectDisplay:tw,HintText:LT},props:{achievement:{type:Object,required:!0},isObscured:{type:Boolean,required:!1}},data(){return{isDisabled:!1,isUnlocked:!1,isMouseOver:!1,isCancer:!1,showUnlockState:!1,realityUnlocked:!1,garbleTimer:0,garbleKey:0,achievementTime:0}},computed:{id(){return this.achievement.id},displayId(){var e;return null!==(e=this.config.displayId)&&void 0!==e?e:this.id},config(){return this.achievement.config},styleObject(){return{"background-position":`-${104*(this.achievement.column-1)}px -${104*(this.achievement.row-1)}px`}},classObject(){return{"o-achievement":!0,"o-achievement--disabled":this.isDisabled,"o-achievement--locked":!this.isUnlocked&&!this.isDisabled&&!this.isObscured,"o-achievement--unlocked":this.isUnlocked,"o-achievement--waiting":!this.isUnlocked&&this.isPreRealityAchievement&&!this.isDisabled,"o-achievement--blink":!this.isUnlocked&&78===this.id&&!this.isDisabled,"o-achievement--normal":!this.isCancer&&!this.isObscured,"o-achievement--cancer":this.isCancer&&!this.isObscured,"o-achievement--hidden":this.isObscured}},indicatorIconClass(){return this.isUnlocked?"fas fa-check":this.isPreRealityAchievement&&!this.isDisabled?"far fa-clock":"fas fa-times"},indicatorClassObject(){return{"o-achievement__indicator":!0,"o-achievement__indicator--disabled":this.isDisabled,"o-achievement__indicator--locked":!this.isUnlocked&&!this.isPreRealityAchievement&&!this.isDisabled,"o-achievement__indicator--waiting":!this.isUnlocked&&this.isPreRealityAchievement&&!this.isDisabled}},rewardClassObject(){return{"o-achievement__reward":!0,"o-achievement__reward--disabled":this.isDisabled,"o-achievement__reward--locked":!this.isUnlocked&&!this.isPreRealityAchievement&&!this.isDisabled,"o-achievement__reward--waiting":!this.isUnlocked&&this.isPreRealityAchievement&&!this.isDisabled}},isPreRealityAchievement(){return this.realityUnlocked&&this.achievement.row<=13},hasReward(){return void 0!==this.config.reward&&!this.isObscured},garbledNameTemplate(){return this.makeGarbledTemplate(this.config.name)},garbledIDTemplate(){return this.makeGarbledTemplate(this.displayId)},garbledDescriptionTemplate(){return this.makeGarbledTemplate(this.config.description)},achievedTime(){return player.speedrun.isActive?void 0===this.achievementTime?"Not Achieved yet":0===this.achievementTime?"Given at Speedrun start":`Achieved after ${TimeSpan.fromMilliseconds(this.achievementTime).toStringShort()}`:null}},beforeDestroy(){clearTimeout(this.mouseOverInterval)},methods:{update(){this.isDisabled=Pelle.disabledAchievements.includes(this.id)&&Pelle.isDoomed,this.isUnlocked=this.achievement.isUnlocked&&!this.isDisabled,this.isCancer="S4"===Theme.current().name||player.secretUnlocks.cancerAchievements,this.showUnlockState=player.options.showHintText.achievementUnlockStates,this.realityUnlocked=PlayerProgress.realityUnlocked(),this.processedName=this.processText(this.config.name,this.garbledNameTemplate),this.processedId=this.processText(this.displayId,this.garbledIDTemplate),this.processedDescription=this.processText(this.config.description,this.garbledDescriptionTemplate),this.garbleTimer++,this.isObscured?this.garbleKey=10*this.id+Math.floor(this.garbleTimer/3):this.garbleKey=this.id,player.speedrun.isActive&&(this.achievementTime=player.speedrun.achievementTimes[this.id])},onMouseEnter(){clearTimeout(this.mouseOverInterval),this.isMouseOver=!0},onMouseLeave(){this.mouseOverInterval=setTimeout((()=>this.isMouseOver=!1),300)},makeGarbledTemplate(e){const t=`${e}`;let i="";for(let a=0;ae.isUnlocked)),this.isHidden=this.isCompleted&&player.options.hideCompletedAchievementRows}}},QO=ZO;var JO=(0,X.Z)(QO,qO,VO,!1,null,null,null);const eL=JO.exports;var tL=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{style:e.imageSwapperStyleObject,on:{click:e.swapImages}},[e._v(e._s(e.swapImagesButton))])},iL=[];const aL={name:"SwapAchievementImagesButton",data(){return{canSwapImages:!1,isCancerImages:!1,isDoomed:!1}},computed:{swapImagesButton(){const e=this.isDoomed?".":":";return this.isCancerImages?"😂":e},imageSwapperStyleObject(){return this.canSwapImages?{cursor:"pointer"}:{}}},methods:{update(){this.isDoomed=Pelle.isDoomed;const e="S4"===Theme.current().name;this.canSwapImages=!e&&Themes.find("S4").isAvailable(),this.isCancerImages=e||player.secretUnlocks.cancerAchievements},swapImages(){this.canSwapImages&&(player.secretUnlocks.cancerAchievements=!player.secretUnlocks.cancerAchievements)}}},nL=aL;var sL=(0,X.Z)(nL,tL,iL,!1,null,null,null);const rL=sL.exports,oL={name:"NormalAchievementsTab",components:{SwapAchievementImagesButton:rL,NormalAchievementRow:eL,PrimaryToggleButton:Sh},data(){return{achievementPower:new Decimal(0),achTPEffect:0,achCountdown:new Decimal(0),totalCountdown:new Decimal(0),missingAchievements:0,showAutoAchieve:!1,isAutoAchieveActive:!1,hideCompletedRows:!1,achMultBreak:!1,achMultToIDS:!1,achMultToTDS:!1,achMultToBH:!1,achMultToTP:!1,achMultToTT:!1,renderedRowIndices:[]}},computed:{isDoomed:()=>Pelle.isDoomed,rows:()=>Achievements.allRows,renderedRows(){return this.rows.filter(((e,t)=>this.renderedRowIndices.includes(t)))},boostText(){const e=formatX(this.achievementPower,2,3),t=formatX(this.achTPEffect,2,3),i=[],a=[];return a.push("Antimatter"),this.achMultToIDS&&a.push("Infinity"),this.achMultToTDS&&a.push("Time"),i.push(`${makeEnumeration(a)} Dimensions: ${e}`),this.achMultToTP&&i.push(`Tachyon Particles: ${t}`),this.achMultToBH&&i.push(`Black Hole Power: ${e}`),this.achMultToTT&&i.push(`Time Theorem production: ${e}`),`${i.join("
")}`}},watch:{isAutoAchieveActive(e){player.reality.autoAchieve=e},hideCompletedRows(e){player.options.hideCompletedAchievementRows=e,this.startRowRendering()}},created(){this.startRowRendering()},beforeDestroy(){cancelAnimationFrame(this.renderAnimationId)},methods:{update(){const e=getGameSpeedupFactor();this.achievementPower=Achievements.power,this.achTPEffect=RealityUpgrade(8).config.effect(),this.achCountdown=new Decimal(1).div(e).times(Achievements.timeToNextAutoAchieve),this.totalCountdown=new Decimal(1).div(e).times(Achievements.period.times(Achievements.preReality.countWhere((e=>!e.isUnlocked))-1).add(Achievements.timeToNextAutoAchieve)),this.missingAchievements=Achievements.preReality.countWhere((e=>!e.isUnlocked)),this.showAutoAchieve=ue.realityUnlocked()&&!Perk.achievementGroup5.isBought,this.isAutoAchieveActive=player.reality.autoAchieve,this.hideCompletedRows=player.options.hideCompletedAchievementRows,this.achMultBreak=BreakInfinityUpgrade.achievementMult.canBeApplied,this.achMultToIDS=Achievement(75).isUnlocked,this.achMultToTDS=EternityUpgrade.tdMultAchs.isBought,this.achMultToTP=RealityUpgrade(8).isBought,this.achMultToBH=VUnlocks.achievementBH.canBeApplied,this.achMultToTT=Ra.unlocks.achievementTTMult.canBeApplied},startRowRendering(){const e=[],t=[];for(let r=0;re.isUnlocked))?e:t;i.push(r)}const i=t.filter((e=>this.renderedRowIndices.includes(e))),a=t.filter((e=>!this.renderedRowIndices.includes(e)));let n;player.options.hideCompletedAchievementRows?(this.renderedRowIndices=e.concat(i),n=a):(this.renderedRowIndices=i,n=e.concat(a));const s=()=>{const e=2;for(let t=0;t=18;default:return!1}},timeDisplay,timeDisplayNoDecimals}},lL=oL;var cL=(0,X.Z)(lL,$O,HO,!1,null,null,null);const uL=cL.exports;var dL=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-challenges-tab"},[i("ChallengeTabHeader"),i("div",[e._v(" Some Normal Challenges have requirements to be able to run that challenge. ")]),i("div",[e._v(" If you have an active Big Crunch Autobuyer, it will attempt to Crunch as soon as possible when reaching Infinite antimatter. ")]),i("ChallengeGrid",{attrs:{challenges:e.challenges},scopedSlots:e._u([{key:"default",fn:function(e){var t=e.challenge;return[i("NormalChallengeBox",{attrs:{challenge:t}})]}}])})],1)},hL=[],mL=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ChallengeBox",{staticClass:"c-challenge-box--normal",attrs:{name:e.name,"is-unlocked":e.isUnlocked,"is-running":e.isRunning,"is-completed":e.isCompleted,"override-label":e.overrideLabel,"locked-at":e.lockedAt},on:{start:function(t){return e.challenge.requestStart()}},scopedSlots:e._u([{key:"top",fn:function(){return[i("DescriptionDisplay",{attrs:{config:e.descriptionDisplayConfig}})]},proxy:!0},{key:"bottom",fn:function(){return[i("span",{class:{"o-pelle-disabled":e.isDisabled}},[e._v("Reward: "+e._s(e.challenge.config.reward))])]},proxy:!0}])})},pL=[];const yL={name:"NormalChallengeBox",components:{ChallengeBox:yB,DescriptionDisplay:ND},props:{challenge:{type:Object,required:!0}},data(){return{isDoomed:!1,isDisabled:!1,isRunning:!1,isCompleted:!1,isBroken:!1,isUnlocked:!1,lockedAt:new Decimal}},computed:{descriptionDisplayConfig(){return this.isUnlocked?this.challenge.config:{description:`Infinity ${formatInt(this.challenge.config.lockedAt)} times to unlock.`}},name(){return`C${this.challenge.id}`},overrideLabel(){return this.isBroken?"Broken":""}},methods:{update(){this.isDisabled=this.challenge.isDisabled,this.isUnlocked=this.challenge.isUnlocked,this.isRunning=this.challenge.isOnlyActiveChallenge,this.lockedAt=this.challenge.config.lockedAt,this.isBroken=Enslaved.isRunning&&Enslaved.BROKEN_CHALLENGES.includes(this.challenge.id),this.isCompleted=this.challenge.isCompleted&&!this.isBroken}}},fL=yL;var gL=(0,X.Z)(fL,mL,pL,!1,null,"75b37b54",null);const vL=gL.exports,bL={name:"NormalChallengesTab",components:{ChallengeGrid:oI,ChallengeTabHeader:mI,NormalChallengeBox:vL},computed:{challenges(){return NormalChallenges.all}}},EL=bL;var TL=(0,X.Z)(EL,dL,hL,!1,null,"957ab7c6",null);const wL=TL.exports;var kL=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-options-tab"},[i("div",{staticClass:"l-options-grid"},[i("div",{staticClass:"l-options-grid__row"},[i("OptionsButton",{staticClass:"o-primary-btn--option",attrs:{onclick:"Modal.confirmationOptions.show()"}},[e._v(" Open Confirmation Options ")]),i("PrimaryToggleButton",{staticClass:"o-primary-btn--option l-options-grid__button",attrs:{label:"Hotkeys:",on:"Enabled",off:"Disabled"},model:{value:e.hotkeys,callback:function(t){e.hotkeys=t},expression:"hotkeys"}}),i("PrimaryToggleButton",{staticClass:"o-primary-btn--option l-options-grid__button l-toggle-button",attrs:{label:"Switch tabs on some events (e.g. entering challenges):"},model:{value:e.automaticTabSwitching,callback:function(t){e.automaticTabSwitching=t},expression:"automaticTabSwitching"}})],1),i("div",{staticClass:"l-options-grid__row"},[i("PrimaryToggleButton",{staticClass:"o-primary-btn--option l-options-grid__button",attrs:{label:"Offline progress:"},model:{value:e.offlineProgress,callback:function(t){e.offlineProgress=t},expression:"offlineProgress"}}),i("div",{staticClass:"o-primary-btn o-primary-btn--option o-primary-btn--slider l-options-grid__button"},[i("b",[e._v("Offline ticks: "+e._s(e.formatInt(e.offlineTicks)))]),i("SliderComponent",e._b({staticClass:"o-primary-btn--slider__slider",attrs:{value:e.offlineSlider},on:{input:function(t){return e.adjustSliderValueOfflineTicks(t)}}},"SliderComponent",e.sliderPropsOfflineTicks,!1))],1),i("PrimaryToggleButton",{staticClass:"o-primary-btn--option l-options-grid__button",attrs:{label:"Run suspended time as offline:"},model:{value:e.hibernationCatchup,callback:function(t){e.hibernationCatchup=t},expression:"hibernationCatchup"}})],1),i("div",{staticClass:"l-options-grid__row"},[e.automatorUnlocked?i("div",{staticClass:"o-primary-btn o-primary-btn--option o-primary-btn--slider l-options-grid__button"},[i("b",[e._v("Automator Log Max: "+e._s(e.formatInt(parseInt(e.automatorLogSize))))]),i("SliderComponent",e._b({staticClass:"o-primary-btn--slider__slider",attrs:{value:e.automatorLogSize},on:{input:function(t){return e.adjustSliderValueAutomatorLogSize(t)}}},"SliderComponent",e.sliderPropsAutomatorLogSize,!1))],1):e._e(),e.DEV?i("OptionsButton",{staticClass:"o-primary-btn--option",attrs:{onclick:"Modal.speedUp.show()"}},[e._v(" Modify Testing Speed ")]):e._e()],1),i("OpenModalHotkeysButton")],1)])},CL=[],AL=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("PrimaryButton",{staticClass:"o-primary-btn--option l-options-grid__button",on:{click:e.emitClick}},[e._t("default")],2)},_L=[];const SL={name:"OptionsButton",components:{PrimaryButton:Vs}},DL=SL;var RL=(0,X.Z)(DL,AL,_L,!1,null,null,null);const ML=RL.exports,IL={name:"OptionsGameplayTab",components:{OpenModalHotkeysButton:$A,OptionsButton:ML,PrimaryToggleButton:Sh,SliderComponent:sD},data(){return{offlineProgress:!1,hibernationCatchup:!1,hotkeys:!1,offlineSlider:0,offlineTicks:0,automaticTabSwitching:!1,infinityUnlocked:!1,automatorUnlocked:!1,automatorLogSize:0,DEV:y}},computed:{sliderPropsOfflineTicks(){return{min:22,max:54,interval:1,width:"100%",tooltip:!1}},sliderPropsAutomatorLogSize(){return{min:50,max:500,interval:50,width:"100%",tooltip:!1}}},watch:{offlineProgress(e){player.options.offlineProgress=e},hibernationCatchup(e){player.options.hibernationCatchup=e},hotkeys(e){player.options.hotkeys=e},offlineSlider(e){player.options.offlineTicks=this.parseOfflineSlider(e)},automaticTabSwitching(e){player.options.automaticTabSwitching=e},automatorLogSize(e){player.options.automatorEvents.maxEntries=parseInt(e,10)}},created(){const e=player.options.offlineTicks,t=Math.floor(Math.log10(e)),i=e/Math.pow(10,t)-1;this.offlineSlider=9*t+i},methods:{update(){const e=player.options;this.offlineProgress=e.offlineProgress,this.hibernationCatchup=e.hibernationCatchup,this.hotkeys=e.hotkeys,this.offlineTicks=player.options.offlineTicks,this.automaticTabSwitching=e.automaticTabSwitching,this.infinityUnlocked=PlayerProgress.current.isInfinityUnlocked,this.automatorUnlocked=Player.automatorUnlocked,this.automatorLogSize=e.automatorEvents.maxEntries},parseOfflineSlider(e){const t=parseInt(e,10);return(1+t%9)*Math.pow(10,Math.floor(t/9))},adjustSliderValueOfflineTicks(e){this.offlineSlider=e,player.options.offlineTicks=this.parseOfflineSlider(e)},adjustSliderValueAutomatorLogSize(e){this.automatorLogSize=e,player.options.automatorEvents.maxEntries=this.automatorLogSize}}},xL=IL;var PL=(0,X.Z)(xL,kL,CL,!1,null,"2b2bff8a",null);const GL=PL.exports;var UL=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-options-tab"},[i("div",{staticClass:"l-options-grid"},[i("div",{staticClass:"l-options-grid__row"},[i("OptionsButton",{staticClass:"o-primary-btn--option_font-x-large",class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{onclick:"GameStorage.export()"}},[e._v(" Export save ")]),i("OptionsButton",{staticClass:"o-primary-btn--option_font-x-large",class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{onclick:"Modal.import.show()"}},[e._v(" Import save ")]),i("OptionsButton",{staticClass:"o-primary-btn--option_font-x-large",class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{onclick:"Modal.hardReset.show()"}},[e._v(" RESET THE GAME ")])],1),i("div",{staticClass:"l-options-grid__row"},[i("OptionsButton",{staticClass:"o-primary-btn--option_font-x-large",class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{onclick:"GameStorage.save(false, true)"}},[e._v(" Save game ")]),i("OptionsButton",{staticClass:"o-primary-btn--option_font-x-large",class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{onclick:"Modal.loadGame.show()"}},[e._v(" Choose save ")]),i("AutosaveIntervalSlider",{attrs:{min:10,max:60,interval:1}})],1),i("div",{staticClass:"l-options-grid__row"},[i("OptionsButton",{class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{onclick:"GameStorage.exportAsFile()"}},[e._v(" Export save as file ")]),i("OptionsButton",{staticClass:"c-file-import-button",class:{"o-pelle-disabled-pointer":e.creditsClosed}},[i("input",{staticClass:"c-file-import",attrs:{type:"file",accept:".txt"},on:{change:e.importAsFile}}),i("label",{attrs:{for:"file"}},[e._v("Import save from file")])]),i("PrimaryToggleButton",{staticClass:"o-primary-btn--option l-options-grid__button",class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{label:"Display time since save:"},model:{value:e.showTimeSinceSave,callback:function(t){e.showTimeSinceSave=t},expression:"showTimeSinceSave"}})],1),i("div",{staticClass:"l-options-grid__row"},[i("OptionsButton",{class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{onclick:"Modal.backupWindows.show()"}},[e._v(" Open Automatic Save Backup Menu ")]),i("SaveFileName")],1),i("div",{staticClass:"l-options-grid__row"},[e.canSpeedrun?i("OptionsButton",{staticClass:"o-primary-btn--option_font-x-large",class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{onclick:"Modal.enterSpeedrun.show()"}},[e._v(" Start Speedrun ")]):e._e(),e.inSpeedrun?i("OptionsButton",{class:{"o-pelle-disabled-pointer":e.creditsClosed,"o-primary-btn--disabled":!e.canModifySeed},on:{click:function(t){return e.openSeedModal()}}},[e._v(" Change Glyph RNG Seed ")]):e._e()],1),i("OpenModalHotkeysButton")],1),e.cloudAvailable?i("h2",{staticClass:"c-cloud-options-header"},[e.hideGoogleName?i("span",[e._v("Logged in to Google "),i("i",[e._v("(name hidden)")])]):e.loggedIn?i("span",[e._v("Logged in as "+e._s(e.userName))]):i("span",[e._v("Not logged in")])]):e._e(),e.loggedIn?i("div",[e.cloudEnabled?i("span",[e._v("Cloud Saving will occur automatically every 10 minutes.")]):i("span",[e._v("Cloud Saving has been disabled on this save.")])]):e._e(),e.cloudAvailable?i("div",{staticClass:"l-options-grid"},[e.STEAM?e._e():i("div",{staticClass:"l-options-grid__row"},[e.loggedIn?i("OptionsButton",{attrs:{onclick:"GameOptions.logout()"}},[e._v(" Disconnect Google Account and disable Cloud Saving ")]):i("OptionsButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"This will connect your Google Account to your Antimatter Dimensions savefiles",expression:"'This will connect your Google Account to your Antimatter Dimensions savefiles'"}],class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{onclick:"GameOptions.login()"}},[e._v(" Login with Google to enable Cloud Saving ")]),e.loggedIn?i("PrimaryToggleButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"This will hide your Google Account name from the UI for privacy. Saving/loading is unaffected.",expression:"'This will hide your Google Account name from the UI for privacy. Saving/loading is unaffected.'"}],staticClass:"o-primary-btn--option l-options-grid__button",class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{label:"Hide Google Account name:"},model:{value:e.hideGoogleName,callback:function(t){e.hideGoogleName=t},expression:"hideGoogleName"}}):e._e()],1),e.loggedIn?i("div",{staticClass:"l-options-grid__row"},[i("OptionsButton",{class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{onclick:"GameOptions.cloudSave()"}},[e._v(" Cloud save ")]),i("OptionsButton",{class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{onclick:"GameOptions.cloudLoad()"}},[e._v(" Cloud load ")]),i("PrimaryToggleButton",{staticClass:"o-primary-btn--option l-options-grid__button",class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{label:"Force local save before cloud saving:"},model:{value:e.syncSaveIntervals,callback:function(t){e.syncSaveIntervals=t},expression:"syncSaveIntervals"}})],1):e._e(),e.loggedIn?i("div",{staticClass:"l-options-grid__row"},[i("PrimaryToggleButton",{staticClass:"o-primary-btn--option l-options-grid__button",class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{label:"Automatic cloud saving/loading:"},model:{value:e.cloudEnabled,callback:function(t){e.cloudEnabled=t},expression:"cloudEnabled"}}),i("PrimaryToggleButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.modalTooltip,expression:"modalTooltip"}],staticClass:"o-primary-btn--option l-options-grid__button",class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{label:"Show modal if possible saving conflict:"},model:{value:e.showCloudModal,callback:function(t){e.showCloudModal=t},expression:"showCloudModal"}}),i("PrimaryToggleButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.overwriteTooltip,expression:"overwriteTooltip"}],staticClass:"o-primary-btn--option l-options-grid__button",class:{"o-pelle-disabled-pointer":e.creditsClosed},attrs:{label:"Force cloud saving despite conflicts:"},model:{value:e.forceCloudOverwrite,callback:function(t){e.forceCloudOverwrite=t},expression:"forceCloudOverwrite"}})],1):e._e()]):e._e()])},BL=[],NL=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"o-primary-btn o-primary-btn--option o-primary-btn--slider l-options-grid__button"},[i("b",[e._v("Autosave interval: "+e._s(e.formatInt(e.sliderInterval))+"s")]),i("SliderComponent",e._b({staticClass:"o-primary-btn--slider__slider",attrs:{value:e.sliderInterval},on:{input:function(t){return e.adjustSliderValue(t)}}},"SliderComponent",e.sliderProps,!1))],1)},OL=[];const LL={name:"AutosaveIntervalSlider",components:{SliderComponent:sD},props:{min:{type:Number,required:!0},max:{type:Number,required:!0},interval:{type:Number,required:!0}},data(){return{sliderInterval:10}},computed:{sliderProps(){return{min:this.min,max:this.max,interval:this.interval,width:"100%",tooltip:!1}}},methods:{update(){this.sliderInterval=player.options.autosaveInterval/1e3},adjustSliderValue(e){this.sliderInterval=e,player.options.autosaveInterval=1e3*this.sliderInterval,GameOptions.refreshAutosaveInterval()}}},FL=LL;var $L=(0,X.Z)(FL,NL,OL,!1,null,null,null);const HL=$L.exports;var qL=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"o-primary-btn o-primary-btn--option o-primary-btn--input l-options-grid__button"},[i("b",[e._v("Save file name:")]),i("span",{attrs:{"ach-tooltip":"Set a custom name (up to 16 alphanumeric characters, including space and hyphen)"}},[i("input",{staticClass:"c-custom-save-name__input",attrs:{type:"text",maxlength:"16",placeholder:"Custom save name"},domProps:{value:e.saveFileName},on:{change:e.handleChange}})])])},VL=[];const YL={name:"SaveFileName",components:{},data(){return{saveFileName:""}},methods:{update(){this.saveFileName=player.options.saveFileName},removeNotAvailableCharacters(e){return e.replace(/(?:(?![ \x2D0-9A-Za-z])[\s\S])/g,"")},handleChange(e){const t=this.removeNotAvailableCharacters(e.target.value.trim());player.options.saveFileName=t,e.target.value=t}}},WL=YL;var jL=(0,X.Z)(WL,qL,VL,!1,null,"295855b9",null);const XL=jL.exports,zL={name:"OptionsSavingTab",components:{AutosaveIntervalSlider:HL,OpenModalHotkeysButton:$A,OptionsButton:ML,PrimaryToggleButton:Sh,SaveFileName:XL},data(){return{cloudAvailable:!1,cloudEnabled:!1,forceCloudOverwrite:!1,showCloudModal:!1,syncSaveIntervals:!1,showTimeSinceSave:!1,hideGoogleName:!1,loggedIn:!1,userName:"",canSpeedrun:!1,inSpeedrun:!1,creditsClosed:!1,canModifySeed:!1}},computed:{modalTooltip(){return"The game will detect certain situations where you might not want to overwrite your cloud save, and show\n you a modal with more information if this is ON."},overwriteTooltip(){return this.showCloudModal?"This setting does nothing since the modal is being shown.":this.forceCloudOverwrite?"Your local save will always overwrite your cloud save no matter what.":"Save conflicts will prevent your local save from being saved to the cloud."},STEAM(){return f}},watch:{cloudEnabled(e){player.options.cloudEnabled=e},forceCloudOverwrite(e){player.options.forceCloudOverwrite=e},showCloudModal(e){player.options.showCloudModal=e},syncSaveIntervals(e){player.options.syncSaveIntervals=e},showTimeSinceSave(e){player.options.showTimeSinceSave=e},hideGoogleName(e){player.options.hideGoogleName=e}},methods:{update(){const e=player.options;this.cloudAvailable=Cloud.isAvailable,this.cloudEnabled=e.cloudEnabled,this.forceCloudOverwrite=e.forceCloudOverwrite,this.showCloudModal=e.showCloudModal,this.syncSaveIntervals=e.syncSaveIntervals,this.showTimeSinceSave=e.showTimeSinceSave,this.hideGoogleName=e.hideGoogleName,this.loggedIn=Cloud.loggedIn,this.canSpeedrun=player.speedrun.isUnlocked,this.inSpeedrun=player.speedrun.isActive,this.canModifySeed=Speedrun.canModifySeed(),this.creditsClosed=GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||PlayerProgress.mendingUnlocked()&&player.isGameEnd,this.loggedIn&&(this.userName=Cloud.user.displayName)},importAsFile(e){if(0===e.target.files.length)return;const t=new FileReader;t.onload=function(){GameStorage.offlineEnabled=player.options.offlineProgress,GameStorage.offlineTicks=player.options.offlineTicks,GameStorage.import(t.result)},t.readAsText(e.target.files[0])},openSeedModal(){this.canModifySeed?Modal.modifySeed.show():Modal.message.show("You cannot modify your seed any more. Glyph RNG has already been used to generate\n at least one Glyph on this run.")}}},KL=zL;var ZL=(0,X.Z)(KL,UL,BL,!1,null,null,null);const QL=ZL.exports;var JL=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-options-tab"},[i("div",{staticClass:"l-options-grid"},[i("div",{staticClass:"l-options-grid__row"},[i("OptionsButton",{staticClass:"o-primary-btn--option_font-large",attrs:{onclick:"GameOptions.toggleUI()"}},[e._v(" "+e._s(e.UILabel)+" ")]),i("UpdateRateSlider"),i("OptionsButton",{staticClass:"o-primary-btn--option",attrs:{onclick:"Modal.newsOptions.show();"}},[e._v(" Open News Options ")])],1),i("div",{staticClass:"l-options-grid__row"},[i("ExpandingControlBox",{staticClass:"l-options-grid__button c-options-grid__notations",attrs:{"button-class":"o-primary-btn o-primary-btn--option l-options-grid__notations-header",label:e.themeLabel},scopedSlots:e._u([{key:"dropdown",fn:function(){return[i("SelectThemeDropdown")]},proxy:!0}])}),i("ExpandingControlBox",{staticClass:"l-options-grid__button c-options-grid__notations",attrs:{"button-class":"o-primary-btn o-primary-btn--option l-options-grid__notations-header",label:e.notationLabel},scopedSlots:e._u([{key:"dropdown",fn:function(){return[i("SelectNotationDropdown")]},proxy:!0}])}),i("PrimaryToggleButton",{staticClass:"o-primary-btn--option l-options-grid__button",attrs:{label:"Exponent formatting:",on:"Commas",off:"Notation"},model:{value:e.commas,callback:function(t){e.commas=t},expression:"commas"}})],1),i("div",{staticClass:"l-options-grid__row"},[i("OptionsButton",{staticClass:"o-primary-btn--option",attrs:{onclick:"Modal.animationOptions.show();"}},[e._v(" Open Animation Options ")]),i("OptionsButton",{staticClass:"o-primary-btn--option",attrs:{onclick:"Modal.infoDisplayOptions.show()"}},[e._v(" Open Info Display Options ")]),i("OptionsButton",{staticClass:"o-primary-btn--option",attrs:{onclick:"Modal.awayProgressOptions.show()"}},[e._v(" Open Away Progress Options ")])],1),i("div",{staticClass:"l-options-grid__row"},[i("OptionsButton",{staticClass:"o-primary-btn--option",attrs:{onclick:"Modal.hiddenTabs.show()"}},[e._v(" Modify Visible Tabs ")]),i("PrimaryToggleButton",{staticClass:"o-primary-btn--option l-options-grid__button",attrs:{label:"Relative prestige gain text coloring:"},model:{value:e.headerTextColored,callback:function(t){e.headerTextColored=t},expression:"headerTextColored"}})],1),i("OpenModalHotkeysButton")],1)])},eF=[],tF=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-select-notation"},[i("div",{staticClass:"l-select-notation__inner"},e._l(e.notations,(function(t){return i("div",{key:t.name,staticClass:"o-primary-btn l-select-notation__item c-select-notation__item",on:{click:function(e){return t.setAsCurrent()}}},[e._v(" "+e._s(t.name)+" ")])})),0)])},iF=[];const aF={name:"SelectNotationDropdown",computed:{notations:()=>Notations.all}},nF=aF;var sF=(0,X.Z)(nF,tF,iF,!1,null,null,null);const rF=sF.exports;var oF=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-select-theme"},[i("div",{staticClass:"l-select-theme__inner"},e._l(e.themes,(function(t){return i("div",{key:t.name,staticClass:"o-primary-btn l-select-theme__item c-select-theme__item",on:{click:function(e){return t.set()}}},[e._v(" "+e._s(t.displayName())+" ")])})),0)])},lF=[];const cF={name:"SelectThemeDropdown",data(){return{availableThemeNames:[]}},computed:{themes(){return this.availableThemeNames.map((e=>Themes.find(e)))}},methods:{update(){this.availableThemeNames=Themes.available().map((e=>e.name))}}},uF=cF;var dF=(0,X.Z)(uF,oF,lF,!1,null,null,null);const hF=dF.exports;var mF=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"o-primary-btn o-primary-btn--option o-primary-btn--slider l-options-grid__button"},[i("b",[e._v("Update rate: "+e._s(e.formatInt(e.updateRate))+" ms")]),i("SliderComponent",e._b({staticClass:"o-primary-btn--slider__slider",attrs:{value:e.updateRate},on:{input:function(t){return e.adjustSliderValue(t)}}},"SliderComponent",e.sliderProps,!1))],1)},pF=[];const yF={name:"UpdateRateSlider",components:{SliderComponent:sD},data(){return{updateRate:0}},computed:{sliderProps(){return{min:33,max:200,interval:1,width:"100%",tooltip:!1}}},methods:{update(){this.updateRate=player.options.updateRate},adjustSliderValue(e){this.updateRate=e,player.options.updateRate=this.updateRate,GameOptions.refreshUpdateRate()}}},fF=yF;var gF=(0,X.Z)(fF,mF,pF,!1,null,null,null);const vF=gF.exports,bF={name:"OptionsVisualTab",components:{UpdateRateSlider:vF,PrimaryToggleButton:Sh,ExpandingControlBox:$o,OptionsButton:ML,OpenModalHotkeysButton:$A,SelectThemeDropdown:hF,SelectNotationDropdown:rF},data(){return{theme:"",notation:"",commas:!1,headerTextColored:!0}},computed:{themeLabel(){return`Theme: ${Themes.find(this.theme).displayName()}`},notationLabel(){return`Notation: ${this.notation}`},UILabel(){return"UI: "+("Modern"==this.$viewModel.UIType?"Modern":"Classic"==this.$viewModel.UIType?"Classic":"Synergism")}},watch:{commas(e){player.options.commas=e,Sm.Settings.exponentCommas.show=e},headerTextColored(e){player.options.headerTextColored=e}},methods:{update(){const e=player.options;this.theme=Theme.currentName(),this.notation=e.notation,this.commas=e.commas,this.headerTextColored=e.headerTextColored}}},EF=bF;var TF=(0,X.Z)(EF,JL,eF,!1,null,null,null);const wF=TF.exports;var kF=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-stats-tab"},[i("div",{staticClass:"c-subtab-option-container"},[i("button",{staticClass:"o-primary-btn o-primary-btn--subtab-option",on:{click:function(t){return e.cycleButton()}}},[e._v(" Showing "+e._s(e.resourceText)+" ")])]),e._l(e.layers,(function(e){return i("PastPrestigeRunsContainer",{key:e.name,attrs:{layer:e}})}))],2)},CF=[],AF=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.condition?i("div",[i("div",{staticClass:"c-past-runs-header",on:{click:e.toggleShown}},[i("span",{staticClass:"o-run-drop-down-icon"},[i("i",{class:e.dropDownIconClass})]),i("span",[i("h3",[e._v("Last "+e._s(e.formatInt(10))+" "+e._s(e.plural)+":")])])]),i("div",{directives:[{name:"show",rawName:"v-show",value:e.shown,expression:"shown"}]},[i("div",{staticClass:"c-row-container"},e._l(e.infoCol(),(function(t,a){return i("span",{key:a,style:e.cellStyle(a,!0)},[e._v(" "+e._s(t)+" ")])})),0),e._l(e.runs,(function(t,a){return i("div",{key:a},[t[0]===Number.MAX_VALUE?i("span",{staticClass:"c-empty-row"},[i("i",10===a?[e._v(" An average cannot be calculated with no "+e._s(e.plural)+". ")]:[e._v(" You have not done "+e._s(e.formatInt(a+1))+" "+e._s(0===a?e.singular:e.plural)+" yet. ")])]):i("span",{staticClass:"c-row-container"},e._l(e.infoArray(t,a),(function(t,n){return i("span",{key:10*a+n,style:e.cellStyle(n,!1)},[e._v(" "+e._s(t)+" ")])})),0)])})),i("br")],2)]):e._e()},_F=[];function SF(e){let t=e.filter((e=>e[0]!==Number.MAX_VALUE));0===t.length&&(t=[e[0]]);const i=e.map((e=>e.length)).max(),a=[];for(let n=0;ne[n])).reduce(e?Number.sumReducer:Decimal.sumReducer);a.push(e?i/t.length:Decimal.div(i,t.length))}return a}const DF={name:"PastPrestigeRunsContainer",props:{layer:{type:Object,required:!0}},data(){return{isRealityUnlocked:!1,resourceType:!1,selectedResources:[],resourceTitles:[],showRealTime:!1,runs:[],hasEmptyRecord:!1,shown:!0,hasChallenges:!1,longestRow:0,hasIM:!1}},computed:{averageRun(){return SF(this.runs)},dropDownIconClass(){return this.shown?"far fa-minus-square":"far fa-plus-square"},points(){const e=this.layer.currency;return"RM"===e&&this.hasIM?"iM Cap":e},condition(){return this.layer.condition()},plural(){return this.layer.plural},singular(){return this.layer.name},getRuns(){return this.layer.getRuns},hasRealTime:()=>PlayerProgress.seenAlteredSpeed()},methods:{update(){this.runs=this.clone(this.getRuns()),this.hasEmptyRecord=this.runs[0][0]===Number.MAX_VALUE,this.runs.push(this.averageRun),this.isRealityUnlocked=PlayerProgress.current.isRealityUnlocked,this.shown=player.shownRuns[this.singular],this.resourceType=player.options.statTabResources,this.showRate=this.resourceType===RECENT_PRESTIGE_RESOURCE.RATE,this.hasChallenges=this.runs.map((e=>this.challengeText(e))).some((e=>e)),this.hasIM=MachineHandler.currentIMCap>0;const e=[this.points,`${this.points} Rate`,this.plural,`${this.singular} Rate`];switch(this.resourceType){case RECENT_PRESTIGE_RESOURCE.ABSOLUTE_GAIN:this.selectedResources=[0,2];break;case RECENT_PRESTIGE_RESOURCE.RATE:this.selectedResources=[1,3];break;case RECENT_PRESTIGE_RESOURCE.CURRENCY:this.selectedResources=[0,1];break;case RECENT_PRESTIGE_RESOURCE.PRESTIGE_COUNT:this.selectedResources=[2,3];break;default:throw new Error("Unrecognized Statistics tab resource type")}this.resourceTitles=[e[this.selectedResources[0]],e[this.selectedResources[1]]];const t=e=>{let t=e.length;while(t>0){const i=e[t-1];if("string"===typeof i&&""!==i)return t;if("string"!==typeof i&&Decimal.neq(i,0))return t;t--}return 0};this.longestRow=this.runs.map((e=>t(e))).max()},clone(e){return e.map((e=>e.map((e=>e instanceof Decimal?Decimal.fromDecimal(e):e))))},infoArray(e,t){let i;i=0===t?"Last":10===t?"Average":`${formatInt(t+1)} ago`;const a=[i,this.gameTime(e)];this.hasRealTime&&a.push(this.realTime(e));const n=[this.prestigeCurrencyGain(e),this.prestigeCurrencyRate(e),this.prestigeCountGain(e),this.prestigeCountRate(e)];a.push(n[this.selectedResources[0]]),a.push(n[this.selectedResources[1]]),this.hasChallenges&&a.push(this.challengeText(e));for(let o=0;o<(null===(s=this.layer.extra)||void 0===s?void 0:s.length)&&a.length<=this.longestRow;o++){var s,r;if(!this.layer.showExtra[o]())continue;const t=this.layer.formatExtra[o],i=null!==(r=e[o+5])&&void 0!==r?r:0;this.layer.allowRate[o]&&this.showRate?a.push(this.rateText(e,e[o+5])):a.push(t(i))}return a},infoCol(){const e=["Run",this.hasRealTime?"Game Time":"Time in Run"];this.hasRealTime&&e.push("Real Time"),e.push(...this.resourceTitles),this.hasChallenges&&e.push("Challenge");for(let i=0;i<(null===(t=this.layer.extra)||void 0===t?void 0:t.length)&&e.length<=this.longestRow;i++){var t;this.layer.showExtra[i]()&&e.push(this.layer.allowRate[i]&&this.showRate?this.layer.rateString[i]:this.layer.extra[i])}return e},gameTime(e){return timeDisplayShort(e[0])},realTime(e){return timeDisplayShort(e[1])},prestigeCurrencyGain(e){return this.hasIM&&"Reality"===this.layer.name?`${format(e[7],2)} iM`:`${format(e[2],2)} ${this.points}`},prestigeCountGain(e){return quantify(this.singular,e[3])},prestigeCurrencyRate(e){return this.hasIM&&"Reality"===this.layer.name?"N/A":this.rateText(e,e[2])},prestigeCountRate(e){return this.rateText(e,e[3])},rateText(e,t){const i=e[1],a=ratePerMinute(t,i);return Decimal.lt(a,1)?`${format(Decimal.mul(a,60),2,2)} per hour`:`${format(a,2,2)} per min`},challengeText(e){const t=e[4];return"The Nameless Ones"===t?"Nameless":t},toggleShown(){player.shownRuns[this.singular]=!player.shownRuns[this.singular]},cellStyle(e,t){let i;switch(e){case 0:i="7rem";break;case 3:case 4:i="Reality"===this.layer.name?"15rem":"20rem";break;case 5:i="Reality"===this.layer.name?"10rem":"20rem";break;default:i="13rem"}return{width:i,border:"0.05rem solid #999999",margin:"-0.05rem",padding:"0.2rem 0","border-bottom-width":t?"0.3rem":"0.1rem","font-weight":t?"bold":null,color:"var(--color-text)"}}}},RF=DF;var MF=(0,X.Z)(RF,AF,_F,!1,null,"38893b62",null);const IF=MF.exports,xF={name:"PastPrestigeRunsTab",components:{PastPrestigeRunsContainer:IF},data(){return{layers:{reality:{name:"Reality",plural:"Realities",currency:"RM",condition:()=>PlayerProgress.realityUnlocked(),getRuns:()=>player.records.recentRealities,extra:["Glyph Level","Relic Shards"],showExtra:[()=>!0,()=>TeresaUnlocks.effarig.canBeApplied],formatExtra:[e=>formatInt(e),e=>format(e,2)],allowRate:[!1,!0],rateString:["","Relic Shard Rate"]},eternity:{name:"Eternity",plural:"Eternities",currency:"EP",condition:()=>PlayerProgress.eternityUnlocked(),getRuns:()=>player.records.recentEternities,extra:["Tachyon Particles"],showExtra:[()=>PlayerProgress.dilationUnlocked()],formatExtra:[e=>format(e,2)],allowRate:[!1]},infinity:{name:"Infinity",plural:"Infinities",currency:"IP",condition:()=>PlayerProgress.infinityUnlocked(),getRuns:()=>player.records.recentInfinities}},resourceType:!1}},computed:{resourceText(){switch(this.resourceType){case RECENT_PRESTIGE_RESOURCE.ABSOLUTE_GAIN:return"total resource gain";case RECENT_PRESTIGE_RESOURCE.RATE:return"resource gain rate";case RECENT_PRESTIGE_RESOURCE.CURRENCY:return"prestige currency";case RECENT_PRESTIGE_RESOURCE.PRESTIGE_COUNT:return"prestige count";default:throw new Error("Unrecognized Statistics tab resource type")}}},methods:{update(){this.resourceType=player.options.statTabResources},cycleButton(){const e=Object.keys(RECENT_PRESTIGE_RESOURCE).length;player.options.statTabResources=(player.options.statTabResources+1)%e}}},PF=xF;var GF=(0,X.Z)(PF,kF,CF,!1,null,null,null);const UF=GF.exports;var BF=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-pelle-celestial-tab"},[e.isDoomed?i("div",{staticClass:"l-pelle-all-content-container"},[i("CelestialQuoteHistory",{attrs:{celestial:"pelle"}}),i("div",{staticClass:"button-container"},[i("button",{staticClass:"o-pelle-button",on:{click:e.showModal}},[e._v(" Show effects in Doomed Reality ")])]),i("br"),e.hasGalaxyGenerator?i("GalaxyGeneratorPanel"):e._e(),e.hasStrike?i("PelleBarPanel"):e._e(),i("PelleUpgradePanel")],1):e.canEnterPelle?i("button",{staticClass:"pelle-doom-button",on:{click:e.enterDoomModal}},[e._v(" Doom"),i("br"),e._v("Your"),i("br"),e._v("Reality "),i("div",{staticClass:"pelle-icon-container"},[i("span",{staticClass:"pelle-icon"},[e._v(e._s(e.symbol))])])]):i("div",{staticClass:"pelle-unlock-requirements"},[e._v(" You must have "+e._s(e.formatInt(e.totalRows))+" rows of Achievements, all of your Glyph Alchemy Resources capped, and Omnipresent Obliteration purchased to unlock Pelle, Celestial of Antimatter. "),i("br"),i("br"),e._v(" "+e._s(e.formatInt(e.completedRows))+" / "+e._s(e.formatInt(e.totalRows))+" Achievement rows completed "),i("br"),e._v(" "+e._s(e.formatInt(e.cappedResources))+" / "+e._s(e.formatInt(e.totalAlchemyResources))+" capped Alchemy Resources ")])])},NF=[],OF=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-pelle-panel-container"},[i("div",{staticClass:"c-pelle-panel-title"},[e.isCapped?e._e():i("i",{staticClass:"c-collapse-icon-clickable",class:e.collapseIcon,on:{click:e.toggleCollapse}}),e._v(" Galaxy Generator ")]),e.isCollapsed?e._e():i("div",{staticClass:"l-pelle-content-container"},[e.isUnlocked?i("div",[i("div",[e._v(" You have a total of "),i("span",{staticClass:"c-galaxies-amount"},[e._v(e._s(e.galaxyText))]),e._v(" Galaxies. "),i("span",{staticClass:"c-galaxies-amount"},[e._v("+"+e._s(e.format(e.galaxiesPerSecond,2,1))+"/s")])]),i("div",{staticClass:"l-spoon-btn-group"},[i("div",[i("button",{staticClass:"c-increase-cap",class:{"c-increase-cap-available":e.isCapped&&e.capRift&&!e.sacrificeActive,"tutorial--glow":e.cap===1/0},on:{click:e.increaseCap}},[i("div",{staticClass:"c-increase-cap-background",style:{width:100*e.barWidth+"%"}}),e.isCapped&&e.capRift?i("div",{staticClass:"c-increase-cap-text"},[e._v(" "+e._s(e.sacrificeText)+". "),i("br"),i("br"),e.sacrificeActive?i("span",{staticClass:"c-big-text"},[e._v(" Getting rid of all that "+e._s(e.capRiftName)+"... ")]):i("span",{staticClass:"c-big-text"},[e._v(" Sacrifice your "+e._s(e.capRiftName)+" ")])]):i("div",{staticClass:"c-increase-cap-text c-medium-text"},[e.cap===1/0?i("div",[e._v(e._s(e.format(e.generatedGalaxies,2))+" Galaxies generated")]):i("div",[e._v(e._s(e.format(e.generatedGalaxies,2))+" / "+e._s(e.format(e.cap,2))+" Galaxies generated")])])])]),e.isAutoUnlocked?i("PrimaryToggleButton",{staticStyle:{"margin-top":"-.75rem","max-width":"70rem",width:"100%","align-self":"center"},attrs:{label:"Auto"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}}):e._e()],1),i("div",{staticClass:"l-galaxy-generator-upgrades-container"},e._l(e.upgrades,(function(e){return i("PelleUpgrade",{key:e.config.id,attrs:{upgrade:e,"galaxy-generator":!0}})})),1)]):i("button",{staticClass:"c-generator-unlock-button",on:{click:e.unlock}},[e._v(" Unlock the Galaxy Generator ")])])])},LF=[],FF=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group"},[i("button",{staticClass:"c-pelle-upgrade",class:{"c-pelle-upgrade--unavailable":!e.canBuy&&!(e.isBought||e.isCapped),"c-pelle-upgrade--bought":e.isBought||e.isCapped,"c-pelle-upgrade--faded":e.faded,"c-pelle-upgrade--galaxyGenerator":e.galaxyGenerator},on:{click:function(t){!e.faded&&e.upgrade.purchase()},mouseover:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},[i("CustomizeableTooltip",{attrs:{show:e.shouldEstimateImprovement,left:"50%",top:"0"},scopedSlots:e._u([{key:"tooltipContent",fn:function(){return[e._v(" "+e._s(e.estimateImprovement)+" ")]},proxy:!0}])}),e.timeEstimate?i("CustomizeableTooltip",{attrs:{left:"50%",top:"0","content-class":"l-fill-container"},scopedSlots:e._u([{key:"tooltipContent",fn:function(){return[e._v(" "+e._s(e.timeEstimate)+" ")]},proxy:!0}],null,!1,1945308655)}):e._e(),i("DescriptionDisplay",{attrs:{config:e.config}}),i("div",{staticClass:"l-pelle-upgrade-gap"}),e.effectText?i("div",[e._v(" "+e._s(e.effectText.prefix)+" "+e._s(e.effectText.value)+" "),e.effectText.next?[e._v(" ➜ "),i("span",{class:{"c-improved-effect":e.canBuy,"c-improved-effect--unavailable":!e.canBuy}},[e._v(" "+e._s(e.effectText.next)+" ")])]:e._e(),i("div",{staticClass:"l-pelle-upgrade-gap"})],2):e._e(),e.isCapped?e._e():i("CostDisplay",{attrs:{config:e.config,name:e.galaxyGenerator?e.config.currencyLabel:"Reality Shard"}})],1),(e.isRebuyable||e.galaxyGenerator)&&e.isAutoUnlocked?i("PrimaryToggleButton",{staticClass:"l--spoon-btn-group__little-spoon",staticStyle:{"margin-top":"-.5rem",width:"18.5rem","margin-left":"0.3rem"},attrs:{label:"Auto:"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}}):e._e()],1)},$F=[],HF=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-custom-tooltip"},[i("div",{staticClass:"c-main-content",class:e.contentClass,style:Object.assign({},e.positionStyle,{transform:e.contentTransform}),on:{mouseenter:function(t){e.hovering=!0},mouseleave:function(t){e.hovering=!1}}},[e._t("mainContent")],2),i("div",{staticClass:"c-tooltip-content",class:e.tooltipContentClass,style:[e.tooltipContentStyle,e.positionStyle,{transform:e.tooltipTransform}]},[e._t("tooltipContent")],2),i("div",{staticClass:"c-tooltip-arrow",class:e.tooltipArrowClass,style:[e.tooltipArrowStyle,e.positionStyle,{transform:e.tooltipTransform}]})])},qF=[];const VF={name:"CustomizeableTooltip",props:{tooltipContentStyle:{type:Object,required:!1,default:()=>({})},tooltipArrowStyle:{type:Object,required:!1,default:()=>({})},left:{type:String,required:!1,default:""},top:{type:String,required:!1,default:""},right:{type:String,required:!1,default:""},bottom:{type:String,required:!1,default:""},contentClass:{type:[Object,String],required:!1,default:""},tooltipClass:{type:[Object,String],required:!1,default:""},mode:{type:String,required:!1,default:"top"},show:{type:Boolean,required:!1}},data(){return{hovering:!1,mainContent:null,isDarkTheme:!1}},computed:{positionStyle(){return{left:this.left,top:this.top,right:this.right,bottom:this.bottom}},tooltipType(){return`c-tooltip--${this.mode}`},contentTransform(){const e="top"===this.mode||"bottom"===this.mode?"X":"Y";return`translate${e}(${this.showNegativeSign(e)}50%)`},tooltipTransform(){switch(this.mode){case"top":return`translate(${this.showNegativeSign("X")}50%, -100%)`;case"bottom":return`translate(${this.showNegativeSign("X")}50%, 100%)`;case"right":return`translate(100%, ${this.showNegativeSign("Y")}50%)`;case"left":return`translate(-100%, ${this.showNegativeSign("Y")}50%)`;default:return""}},showTooltip(){return this.show||this.hovering},tooltipContentLightDarkClass(){return this.isDarkTheme?"c-tooltip-content--dark":""},tooltipArrowLightDarkClass(){return this.isDarkTheme?"c-tooltip-arrow--dark":""},tooltipInternalClass(){return{"c-tooltip-show":this.showTooltip,[this.tooltipType]:!0}},tooltipContentClass(){return[this.tooltipInternalClass,this.tooltipClass,this.tooltipContentLightDarkClass]},tooltipArrowClass(){return[this.tooltipInternalClass,this.tooltipArrowLightDarkClass]}},methods:{update(){this.isDarkTheme=Theme.current().isDark()},showNegativeSign(e){return"X"===e?this.left?"-":"":this.top?"-":""}}},YF=VF;var WF=(0,X.Z)(YF,HF,qF,!1,null,"7d84efdb",null);const jF=WF.exports,XF={name:"PelleUpgrade",components:{DescriptionDisplay:ND,CostDisplay:ID,CustomizeableTooltip:jF,PrimaryToggleButton:Sh},props:{upgrade:{type:Object,required:!0},faded:{type:Boolean,required:!1},galaxyGenerator:{type:Boolean,required:!1},showImprovedEstimate:{type:Boolean,required:!1},isRebuyable:{type:Boolean,required:!1,default:!1}},data(){return{canBuy:!1,isBought:!1,purchases:0,currentTimeEstimate:new Decimal(0),projectedTimeEstimate:new Decimal(0),isCapped:!1,hovering:!1,hasRemnants:!1,galaxyCap:0,notAffordable:!1,mendupg5:!1,isAutoUnlocked:!1,isAutobuyerOn:!1,rebuyableId:0}},computed:{config(){return this.upgrade.config},effectText(){if(!this.config.formatEffect)return!1;const e=this.isCapped?"Capped:":"Currently:",t=e=>this.config.formatEffect(this.config.effect(e)),i=t(this.purchases),a=!this.isCapped&&this.hovering?t(this.purchases+1):void 0;return{prefix:e,value:i,next:a}},timeEstimate(){return this.hasTimeEstimate&&this.hasRemnants?this.notAffordable?"Never affordable due to Generated Galaxy cap":this.currentTimeEstimate:null},hasTimeEstimate(){return!(this.mendupg5||this.canBuy||this.isBought||this.isCapped||this.galaxyGenerator&&"Galaxy"!==this.config.currencyLabel)},shouldEstimateImprovement(){return this.showImprovedEstimate&&this.hasTimeEstimate},estimateImprovement(){return this.shouldEstimateImprovement?Pelle.canArmageddon?this.mendupg5?`${this.currentTimeEstimate}`:this.projectedTimeEstimate.startsWith(">")?this.projectedTimeEstimate:`${this.currentTimeEstimate} ➜ ${this.projectedTimeEstimate}`:`${this.currentTimeEstimate}`:""}},watch:{isAutobuyerOn(e){this.isRebuyable?nZ.rebuyablePelle(this.rebuyableId).isActive=e:nZ.galgenUpgrade(this.rebuyableId).isActive=e}},methods:{update(){this.canBuy=this.upgrade.canBeBought&&!this.faded,this.isBought=this.upgrade.isBought,this.isCapped=this.upgrade.isCapped,this.purchases=player.celestials.pelle.rebuyables[this.upgrade.config.id],this.currentTimeEstimate=TimeSpan.fromSeconds(this.secondsUntilCost(this.galaxyGenerator?GalaxyGenerator.gainPerSecond:Pelle.realityShardGainPerSecond).toNumber()).toTimeEstimate(),this.projectedTimeEstimate=TimeSpan.fromSeconds(this.secondsUntilCost(Pelle.nextRealityShardGain).toNumber()).toTimeEstimate(),this.hasRemnants=Pelle.cel.remnants>0,this.galaxyCap=GalaxyGenerator.generationCap;const e=GameDatabase.celestials.pelle.galaxyGeneratorUpgrades;this.mendupg5=MendingUpgrades.all[5].isBought,this.notAffordable=(this.config===e.additive||this.config===e.multiplicative)&&Decimal.gt(this.upgrade.cost,this.galaxyCap-GalaxyGenerator.generatedGalaxies+player.galaxies);let t={isUnlocked:!1,isActive:!1};if(this.isRebuyable){const e=["antimatterDimensionMult","timeSpeedMult","glyphLevels","infConversion","galaxyPower"];this.rebuyableId=e.findIndex((e=>e===this.upgrade.id))+1,t=nZ.rebuyablePelle(this.rebuyableId)}else if(this.galaxyGenerator){const e=GalaxyGeneratorUpgrades.all.map((e=>e.id));this.rebuyableId=e.findIndex((e=>e===this.upgrade.id))+1,t=nZ.galgenUpgrade(this.rebuyableId)}this.isAutoUnlocked=t.isUnlocked,this.isAutobuyerOn=t.isActive},secondsUntilCost(e){const t=this.galaxyGenerator?player.galaxies+GalaxyGenerator.galaxies:Currency.realityShards.value;return Decimal.sub(this.upgrade.cost,t).div(e)}}},zF=XF;var KF=(0,X.Z)(zF,FF,$F,!1,null,"5883e125",null);const ZF=KF.exports,QF={name:"GalaxyGeneratorPanel",components:{PelleUpgrade:ZF,PrimaryToggleButton:Sh},data(){return{isUnlocked:!1,galaxies:0,generatedGalaxies:0,galaxiesPerSecond:0,cap:0,isCapped:!1,capRift:null,sacrificeActive:!1,isCollapsed:!1,barWidth:0,capRiftName:"",isAutoUnlocked:!1,isAutobuyerOn:!1}},computed:{collapseIcon(){return this.isCollapsed?"fas fa-expand-arrows-alt":"fas fa-compress-arrows-alt"},upgrades(){return GalaxyGeneratorUpgrades.all},galaxyText(){let e=format(Math.max(this.galaxies,0),2);return this.galaxies<0&&(e+=` [${format(this.galaxies,2)}]`),e},sacrificeText(){return this.capRift.galaxyGeneratorText.replace("$value",this.capRiftName)},emphasisedStart(){return Math.pow(this.generatedGalaxies/this.cap,.45)}},watch:{isAutobuyerOn(e){nZ.galgenSac.isActive=e}},methods:{update(){this.isUnlocked=Pelle.hasGalaxyGenerator,this.isCapped=GalaxyGenerator.isCapped,this.isCollapsed=player.celestials.pelle.collapsed.galaxies&&!this.isCapped,!this.isCollapsed&&this.isUnlocked&&(this.galaxies=player.galaxies+GalaxyGenerator.galaxies,this.generatedGalaxies=GalaxyGenerator.generatedGalaxies,this.galaxiesPerSecond=GalaxyGenerator.gainPerSecond,this.cap=GalaxyGenerator.generationCap,this.capRift=GalaxyGenerator.capRift,this.sacrificeActive=GalaxyGenerator.sacrificeActive,this.barWidth=this.isCapped?this.capRift.reducedTo:this.emphasisedStart,this.capRift&&(this.capRiftName=P.wordCycle(this.capRift.name)),this.isAutoUnlocked=nZ.galgenSac.isUnlocked,this.isAutobuyerOn=nZ.galgenSac.isActive)},increaseCap(){GalaxyGenerator.isCapped&&GalaxyGenerator.startSacrifice()},toggleCollapse(){player.celestials.pelle.collapsed.galaxies=!this.isCollapsed},unlock(){player.celestials.pelle.galaxyGenerator.unlocked=!0,Pelle.quotes.galaxyGeneratorUnlock.show()}}},JF=QF;var e$=(0,X.Z)(JF,OF,LF,!1,null,"6db9a0ba",null);const t$=e$.exports;var i$=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-pelle-panel-container"},[i("div",{staticClass:"c-pelle-panel-title"},[i("i",{staticClass:"c-collapse-icon-clickable",class:e.collapseIcon,on:{click:e.toggleCollapse}}),e._v(" Pelle Strikes and Rifts ")]),e.isCollapsed?e._e():i("div",{staticClass:"l-pelle-content-container"},[e._v(" Rifts can be activated by clicking on their bars. "),e.strikes.length>1?i("span",[e._v("You cannot activate more than two Rifts at once.")]):i("br"),e._v(" When active, Rifts consume "+e._s(e.formatPercents(e.decayRate))+" of another resource per second. "),i("br"),e._v(" Rift effects apply even when not activated, and are based on the total amount drained. "),i("b",{staticClass:"o-strike-warning"},[e._v("Pelle Strike penalties are permanent and remain active even after Armageddon!")]),i("div",{staticClass:"c-pelle-bar-container"},e._l(e.strikes,(function(e){return i("PelleRift",{key:e.config.id,attrs:{strike:e}})})),1)])])},a$=[],n$=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.hasStrike?i("div",{staticClass:"c-pelle-single-bar"},[i("div",{staticClass:"c-pelle-rift"},[i("div",{staticClass:"c-pelle-rift-row"},[i("div",{staticClass:"c-pelle-rift-column c-pelle-rift-status"},[i("h2",{staticClass:"c-pelle-rift-name-header"},[e._v(" "+e._s(e.riftName())+" ")]),i("div",{staticClass:"c-pelle-rift-rift-info-container"},e._l(e.effects,(function(t,a){return i("div",{key:a},[e._v(" "+e._s(t||"")+" ")])})),0)]),i("div",{staticClass:"c-pelle-rift-column"},[i("PelleStrike",{attrs:{strike:e.strike}}),i("PelleRiftBar",{attrs:{rift:e.rift}})],1),i("div",{staticClass:"c-pelle-rift-status"},[i("div",{staticClass:"c-pelle-rift-fill-status"},[i("h2",{staticClass:"c-pelle-rift-name-header"},[e._v(" "+e._s(e.riftName())+" ")]),i("div",{staticClass:"c-pelle-rift-rift-info-container"},[e._v(" Drains "+e._s(e.drainResource())+" to fill. "),e.specialRift?i("span",{attrs:{"ach-tooltip":e.infoTooltip}},[i("i",{staticClass:"fas fa-question-circle"})]):e._e(),i("br"),e.isMaxed?e._e():[e._v(" Current Amount: "+e._s(e.formatRift(e.resource))+" ")],i("br"),e._v(" Total Filled: "+e._s(e.formatRift(e.rift.totalFill))+" ")],2)])])])])]):e._e()},s$=[],r$=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{ref:"pelleRiftBar",staticClass:"c-pelle-rift-bar",class:{"c-pelle-rift-bar-overfill-container":e.percentage>1,"c-pelle-rift-bar--idle":!e.isActive&&!e.isMaxed,"c-pelle-rift-bar--filling":e.isActive},on:{mousemove:e.handleMilestoneRequirementTooltipDisplay,click:e.toggle}},[i("div",{staticClass:"l-overflow-hidden"},[i("div",{class:e.barOverlay()}),i("div",{staticClass:"o-pelle-rift-bar-fill",style:{width:Math.clampMax(100*e.percentage,100)+"%"}}),e.reducedTo<1?i("div",{staticClass:"o-pelle-rift-bar-reducedto",style:{width:Math.clampMax(100-100*e.reducedTo,100)+"%"}}):e._e(),i("div",{staticClass:"o-pelle-rift-bar-overlay"}),e.isActive&&!e.isMaxed?i("div",{staticClass:"o-pelle-rift-bar-active-fill"}):e._e(),e._l(e.rift.milestones,(function(t,a){return i("div",{key:"milestone-line-"+a,staticClass:"o-pelle-rift-bar-milestone-line",class:{"o-pelle-rift-bar-milestone-line--unlocked":e.hasMilestone(t),"o-pelle-rift-bar-milestone-line--disabled":e.reducedTo1;return{"o-pelle-rift-bar-permanent":!e&&this.hasEffectiveFill,"o-pelle-rift-bar-overfilled":e}},handleMilestoneRequirementTooltipDisplay(e){const t=e.clientX-this.$refs.pelleRiftBar.getBoundingClientRect().x,i=this.rift.milestones.filter((e=>{const i=Math.abs(31.6*e.requirement-t/this.remToPx);return i<1&&(e.dist=i),i<1})).map((e=>{const t=e.dist;return delete e.dist,{dist:t,m:e}}));i.length&&(this.selectedHoverMilestone=i.sort(((e,t)=>e.dist-t.dist))[0].m)},tooltipContentClass(){const e=this.hasMilestone(this.selectedHoverMilestone);return{"c-pelle-milestone-tooltip":!0,"c-pelle-milestone-tooltip--unlocked":e}}}},c$=l$;var u$=(0,X.Z)(c$,r$,o$,!1,null,"4370f872",null);const d$=u$.exports;var h$=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-pelle-strike-container"},[i("ExpandingControlBox",{attrs:{"container-class":"c-pelle-strike"},scopedSlots:e._u([{key:"header",fn:function(){return[i("div",{staticClass:"c-pelle-strike-header"},[e._v(" ▼ "+e._s(e.strike.requirement)+" ▼ ")])]},proxy:!0},{key:"dropdown",fn:function(){return[i("div",{staticClass:"c-pelle-strike-dropdown"},[i("span",[e._v("Penalty: "+e._s(e.strike.penalty))]),i("br"),i("span",[e._v("Reward: "+e._s(e.strikeReward))])])]},proxy:!0}])})],1)},m$=[];const p$={name:"PelleStrike",components:{ExpandingControlBox:$o},props:{strike:{type:Object,required:!0}},data(){return{strikeReward:""}},methods:{update(){this.strikeReward=this.strike.reward()}}},y$=p$;var f$=(0,X.Z)(y$,h$,m$,!1,null,null,null);const g$=f$.exports,v$={name:"PelleRift",components:{PelleStrike:g$,PelleRiftBar:d$},props:{strike:{type:Object,required:!0}},data(){return{hasStrike:!1,isActive:!1,isMaxed:!1,totalFill:new Decimal,resource:new Decimal,hasEffectiveFill:!1,effects:[]}},computed:{rift(){return this.strike.rift},specialRift(){return 3===this.rift.id},infoTooltip(){return"The Replicanti requirement for the 2nd Rift is based on the total amount you have ever filled, including\n any amount drained to fill this Rift."}},methods:{update(){if(this.hasStrike=this.strike.hasStrike,!this.hasStrike)return;const e=this.rift;this.effects=this.rift.effects,this.isActive=e.isActive,this.isMaxed=e.isMaxed||Pelle.hasGalaxyGenerator,this.setValue("totalFill",e.totalFill),this.setValue("resource",e.fillCurrency.value),this.hasEffectiveFill="decay"===e.key&&PelleRifts.chaos.milestones[0].canBeApplied},setValue(e,t){"number"===typeof t?this[e]=t:this[e].copyFrom(t)},formatRift(e){return"number"===typeof e?`${formatInt(100*e)}%`:format(e,2)},riftName(){return P.wordCycle(this.rift.name,!0)},drainResource(){return this.specialRift?P.wordCycle(this.rift.drainResource):this.rift.drainResource}}},b$=v$;var E$=(0,X.Z)(b$,n$,s$,!1,null,"aa9407ec",null);const T$=E$.exports,w$={name:"PelleBarPanel",components:{PelleRift:T$},data(){return{decayRate:0,isCollapsed:!1}},computed:{collapseIcon(){return this.isCollapsed?"fas fa-expand-arrows-alt":"fas fa-compress-arrows-alt"},strikes(){return PelleStrikes.all}},methods:{update(){this.decayRate=Pelle.riftDrainPercent,this.isCollapsed=player.celestials.pelle.collapsed.rifts},toggleCollapse(){player.celestials.pelle.collapsed.rifts=!this.isCollapsed}}},k$=w$;var C$=(0,X.Z)(k$,i$,a$,!1,null,"320a9096",null);const A$=C$.exports;var _$=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-pelle-panel-container"},[i("div",{staticClass:"c-pelle-panel-title"},[i("i",{staticClass:"c-collapse-icon-clickable",class:e.collapseIcon,on:{click:e.toggleCollapse}}),e._v(" Pelle Upgrades ")]),e.isCollapsed?e._e():i("div",{staticClass:"l-pelle-content-container"},[i("div",{staticClass:"c-armageddon-container"},[i("div",[i("div",{staticClass:"c-armageddon-button-container",on:{mouseover:function(t){e.isHovering=!0},mouseleave:function(t){e.isHovering=!1}}},[i("ArmageddonButton")],1),i("RemnantGainFactor",{attrs:{hide:e.showImprovedEstimate}})],1),i("div",{staticClass:"c-armageddon-resources-container"},[i("div",[e._v(" You have "),i("span",{staticClass:"c-remnants-amount"},[e._v(e._s(e.format(e.remnants,2)))]),e._v(" Remnants. ")]),i("div",[e._v(" You have "),i("span",{staticClass:"c-remnants-amount"},[e._v(e._s(e.format(e.realityShards,2)))]),e._v(" Reality Shards. "),i("span",{staticClass:"c-remnants-amount"},[e._v("+"+e._s(e.format(e.shardRate,2,2))+"/s")])])])]),i("div",{staticClass:"c-pelle-upgrade-container"},e._l(e.rebuyables,(function(t){return i("PelleUpgradeVue",{key:t.config.id,attrs:{upgrade:t,"show-improved-estimate":e.showImprovedEstimate,isRebuyable:!0}})})),1),i("div",{staticClass:"l-spoon-btn-group"},[i("button",{staticClass:"o-pelle-button",on:{click:e.toggleBought}},[e._v(" "+e._s(e.showBought?"Showing bought upgrades":"Bought upgrades hidden")+" ")]),e.isAutoUnlocked?i("PrimaryToggleButton",{staticClass:"l--spoon-btn-group__little-spoon",staticStyle:{"margin-top":"-.3rem"},attrs:{label:"Auto"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}}):e._e()],1),e.allUpgrades.length?i("div",{staticClass:"c-pelle-upgrade-container"},[e._l(e.allUpgrades,(function(t){return i("PelleUpgradeVue",{key:t.config.id,attrs:{upgrade:t,"show-improved-estimate":e.showImprovedEstimate}})})),e._l(e.fadedUpgrades,(function(e){return i("PelleUpgradeVue",{key:e.config.id,attrs:{upgrade:e,faded:""}})}))],2):i("div",[e._v(" No upgrades to show! ")])])])},S$=[],D$=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-remnant-factors-container"},[i("ExpandingControlBox",{style:{opacity:e.opacity},attrs:{"container-class":"c-remnant-factors",label:"Remnant Gain Factors"},scopedSlots:e._u([{key:"dropdown",fn:function(){return[i("div",{staticClass:"c-remnant-factors-text"},[e._v(" Best AM: "+e._s(e.format(e.best.am,2,2))),i("br"),e._v(" Best IP: "+e._s(e.format(e.best.ip,2,2))),i("br"),e._v(" Best EP: "+e._s(e.format(e.best.ep,2,2))),i("br"),i("br"),i("div",{staticClass:"l-remnant-factors-row"},[i("div",{staticClass:"l-remnant-factors-col l-remnant-factors-col--first"},[i("div",{staticClass:"l-remnant-factors-item"},[e._v(" log10(log10(AM)"+e._s(e.dilationMult[0]>1?"*"+e.dilationMult[0]:"")+" + 2) ")]),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" log10(log10(IP)"+e._s(e.dilationMult[1]>1?"*"+e.dilationMult[1]:"")+" + 2) ")]),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" log10(log10(EP)"+e._s(e.dilationMult[2]>1?"*"+e.dilationMult[2]:"")+" + 2) ")]),i("div",{directives:[{name:"show",rawName:"v-show",value:e.MendingUnlocked,expression:"MendingUnlocked"}],staticClass:"l-remnant-factors-item"},[e._v(" 1 Mend Milestone ")]),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" Static divisor ")]),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" Static power ")]),e.autoRemnantGain?e._e():i("div",{staticClass:"l-remnant-factors-item"},[e._v(" Existing Remnants ")]),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" Final amount ")])]),i("div",{staticClass:"l-remnant-factors-col"},[i("div",{staticClass:"l-remnant-factors-item"}),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" + ")]),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" + ")]),i("div",{directives:[{name:"show",rawName:"v-show",value:e.MendingUnlocked,expression:"MendingUnlocked"}],staticClass:"l-remnant-factors-item"},[e._v(" * ")]),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" / ")]),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" ^ ")]),e.autoRemnantGain?e._e():i("div",{staticClass:"l-remnant-factors-item"},[e._v(" - ")])]),i("div",{staticClass:"l-remnant-factors-col"},[i("div",{staticClass:"l-remnant-factors-item"},[e._v(" "+e._s(e.format(Math.log10(e.best.am.add(1).log10()*e.dilationMult[0]+2),2,2))+" ")]),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" "+e._s(e.format(Math.log10(e.best.ip.add(1).log10()*e.dilationMult[0]+2),2,2))+" ")]),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" "+e._s(e.format(Math.log10(e.best.ep.add(1).log10()*e.dilationMult[0]+2),2,2))+" ")]),i("div",{directives:[{name:"show",rawName:"v-show",value:e.MendingUnlocked,expression:"MendingUnlocked"}],staticClass:"l-remnant-factors-item"},[e._v(" "+e._s(e.format(1.1,2,1))+" ")]),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" "+e._s(e.format(1.64,2,2))+" ")]),i("div",{staticClass:"l-remnant-factors-item"},[e._v(" "+e._s(e.format(7.5,2,2))+" ")]),e.autoRemnantGain?e._e():i("div",{staticClass:"l-remnant-factors-item"},[e._v(" "+e._s(e.format(e.remnants,2,0))+" ")]),e.autoRemnantGain?i("div",{staticClass:"l-remnant-factors-item"},[e._v(" "+e._s(e.format(e.remnants,2,0))+" ")]):i("div",{staticClass:"l-remnant-factors-item"},[e._v(" "+e._s(e.format(e.remnantsGain,2,e.remnantsGain>=1?0:2))+" ")])])])])]},proxy:!0}])})],1)},R$=[];const M$={name:"RemnantGainFactor",components:{ExpandingControlBox:$o},props:{hide:{type:Boolean,required:!1,default:!1}},data(){return{best:{am:new Decimal(0),ip:new Decimal(0),ep:new Decimal(0)},dilationMult:[1,1,1],remnants:0,remnantsGain:0,MendingUnlocked:!1,autoRemnantGain:!1}},computed:{opacity(){return Number(!this.hide)}},methods:{update(){this.best.am.copyFrom(player.celestials.pelle.records.totalAntimatter),this.best.ip.copyFrom(player.celestials.pelle.records.totalInfinityPoints),this.best.ep.copyFrom(player.celestials.pelle.records.totalEternityPoints),this.dilationMult=PelleStrikes.dilation.hasStrike?[500,10,5]:[1,1,1],this.remnants=Pelle.cel.remnants,this.remnantsGain=Pelle.remnantsGain,this.MendingUnlocked=ue.mendingUnlocked(),this.autoRemnantGain=MendingUpgrades.all[4].isBought}}},I$=M$;var x$=(0,X.Z)(I$,D$,R$,!1,null,null,null);const P$=x$.exports,G$={name:"PelleUpgradePanel",components:{ArmageddonButton:sm,PelleUpgradeVue:ZF,RemnantGainFactor:P$,PrimaryToggleButton:Sh},data(){return{showBought:!1,isCollapsed:!1,isHovering:!1,remnants:0,realityShards:new Decimal(0),shardRate:new Decimal(0),upgrades:[],boughtUpgrades:[],mendupg5:!1,isAutoUnlocked:!1,isAutobuyerOn:!1}},computed:{collapseIcon(){return this.isCollapsed?"fas fa-expand-arrows-alt":"fas fa-compress-arrows-alt"},rebuyables:()=>PelleUpgrade.rebuyables,visibleUpgrades(){return this.upgrades.slice(0,5)},fadedUpgrades(){return this.upgrades.slice(5,10)},allUpgrades(){let e=[];return this.showBought&&(e=this.boughtUpgrades),e=e.concat(this.visibleUpgrades),e},showImprovedEstimate(){return this.isHovering&&!this.shardRate.eq(0)&&!this.mendupg5}},watch:{isAutobuyerOn(e){Autobuyer.pelleUpgrade.isActive=e}},methods:{update(){this.showBought=Pelle.cel.showBought,this.isCollapsed=player.celestials.pelle.collapsed.upgrades,this.remnants=Pelle.cel.remnants,this.realityShards.copyFrom(Pelle.cel.realityShards),this.shardRate.copyFrom(Pelle.realityShardGainPerSecond),this.upgrades=PelleUpgrade.singles.filter((e=>!e.isBought)),this.boughtUpgrades=PelleUpgrade.singles.filter((e=>e.isBought)),this.mendupg5=MendingUpgrades.all[5].isBought,this.isAutoUnlocked=Autobuyer.pelleUpgrade.isUnlocked,this.isAutobuyerOn=Autobuyer.pelleUpgrade.isActive},toggleBought(){Pelle.cel.showBought=!Pelle.cel.showBought,this.$recompute("upgrades")},toggleCollapse(){player.celestials.pelle.collapsed.upgrades=!this.isCollapsed}}},U$=G$;var B$=(0,X.Z)(U$,_$,S$,!1,null,"2eb69680",null);const N$=B$.exports,O$={name:"PelleTab",components:{PelleBarPanel:A$,PelleUpgradePanel:N$,GalaxyGeneratorPanel:t$,CelestialQuoteHistory:AM},data(){return{isDoomed:!1,canEnterPelle:!1,completedRows:0,cappedResources:0,hasStrike:!1,hasGalaxyGenerator:!1}},computed:{symbol(){return Pelle.symbol},totalRows(){return Achievements.prePelleRows.length},totalAlchemyResources(){return AlchemyResources.all.length}},methods:{update(){this.isDoomed=Pelle.isDoomed,this.isDoomed||(this.completedRows=Achievements.prePelleRows.countWhere((e=>e.every((e=>e.isUnlocked)))),this.cappedResources=AlchemyResources.all.countWhere((e=>e.capped)),this.canEnterPelle=this.completedRows===this.totalRows&&this.cappedResources===this.totalAlchemyResources&&ImaginaryUpgrade(25).isBought),this.hasStrike=PelleStrikes.all.some((e=>e.hasStrike)),this.hasGalaxyGenerator=PelleRifts.recursion.milestones[2].canBeApplied||GalaxyGenerator.spentGalaxies>0},toggleBought(){Pelle.cel.showBought=!Pelle.cel.showBought,this.$recompute("upgrades")},showModal(){Modal.pelleEffects.show()},enterDoomModal(){Modal.armageddon.show()}}},L$=O$;var F$=(0,X.Z)(L$,BF,NF,!1,null,"57ae2e2e",null);const $$=F$.exports;var H$=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-previous-runs"},[i("b",[e._v("You have completed "+e._s(e.quantify("speedrun",e.numRuns,0,0,(function(e){return e})))+" prior to this playthrough.")]),i("b",[e._v("Statistics of previous runs are below, mouseover icons for more details.")]),i("b",[e._v("Click the magnifying glass to compare the milestones on a particular run to this run.")]),i("b",[e._v(e._s(e.spectateText))]),i("br"),e.highestIndex>10?i("div",{staticClass:"c-run-page-nav"},[i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option fas fa-arrow-left",class:{"o-primary-btn--disabled":0===e.runPage},on:{click:function(t){return e.changePage(-1)}}}),e._v(" Showing runs "+e._s(10*e.runPage+1)+" to "+e._s(10*(e.runPage+1))+" ("+e._s(e.highestIndex)+" total runs) "),i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option fas fa-arrow-right",class:{"o-primary-btn--disabled":e.runPage+1>e.highestIndex/10},on:{click:function(t){return e.changePage(1)}}})],1):e._e(),i("div",{staticClass:"c-previous-runs"},e._l(10,(function(t){return i("span",{key:t},[10*e.runPage+t<=e.highestIndex?i("span",{staticClass:"c-single-run"},[e.findRun(t)?i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option fas fa-magnifying-glass",class:{"o-selected-btn":e.selectedRun===10*e.runPage+t},on:{click:function(i){return e.selectRun(10*e.runPage+t)}}}):e._e(),i("PreviousSpeedrunInfo",{attrs:{"prev-run-info":e.findRun(t),index:10*e.runPage+t}})],1):e._e()])})),0),i("br"),e._m(0),i("div",{staticClass:"l-speedrun-milestone-tab"},e._l(e.milestones,(function(t){return i("SpeedrunMilestoneCompare",{key:t.id,attrs:{milestone:t,"curr-time":e.milestoneTimes[t.id],"ref-time":e.selectedRun?e.previousRuns.find((function(t){return t.id===e.selectedRun})).records[t.id]:null,"best-time":e.bestPreviousTimes[t.id].time,"run-indices":[e.selectedRun,e.bestPreviousTimes[t.id].index]}})})),1)])},q$=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-legend"},[i("div",{staticClass:"c-legend-cell"},[i("span",{staticClass:"o-box l-milestone-none"}),e._v(" Not reached this run ")]),i("div",{staticClass:"c-legend-cell"},[i("span",{staticClass:"o-box l-milestone-slow"}),e._v(" Slower than comparison ")]),i("div",{staticClass:"c-legend-cell"},[i("span",{staticClass:"o-box l-milestone-fast"}),e._v(" Faster than comparison ")]),i("div",{staticClass:"c-legend-cell"},[i("span",{staticClass:"o-box l-milestone-fastest"}),e._v(" Faster than best ")])])}],V$=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.prevRunInfo?i("div",{staticClass:"c-icon-container"},[i("span",[e._v("Run "+e._s(e.index))]),i("span",[e._v(e._s(e.prevRunInfo.name))]),e._l(e.iconAttrs,(function(e){return i("span",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.text,expression:"attr.text"}],key:e.icon,class:e.icon})})),i("span",[e._v("Started: "+e._s(e.startDate))]),i("span",[e._v("Final Time: "+e._s(e.finalTime))])],2):i("div",{staticClass:"c-no-record"},[e._v(" No speedrun records found for run "+e._s(e.index)+". ")])},Y$=[];const W$={name:"PreviousSpeedrunInfo",props:{prevRunInfo:{type:Object,required:!1,default:()=>{}},index:{type:Number,required:!0}},computed:{segmentAttr(){return{icon:"fas o-icon "+(this.prevRunInfo.isSegmented?"fa-stopwatch-20":"fa-stopwatch"),text:this.prevRunInfo.isSegmented?"Segmented":"Single Segment"}},stdAttr(){return{icon:"fas fa-coins o-icon "+(this.prevRunInfo.usedSTD?"l-icon-on":"l-icon-off"),text:this.prevRunInfo.usedSTD?"Used STD Upgrades":"No STDs used"}},offlineAttr(){const e=this.prevRunInfo.offlineTimeUsed/this.prevRunInfo.records.max();let t;return t=0===e?"fa-eye":e<.1?"fa-computer":e<.6?"fa-moon":"fa-power-off",{icon:`fas o-icon ${t}`,text:`${0===e?"No":formatPercents(e,1)} Offline Time`}},seedAttr(){let e;switch(this.prevRunInfo.seedSelection){case SPEEDRUN_SEED_STATE.UNKNOWN:e="fa-question";break;case SPEEDRUN_SEED_STATE.FIXED:e="fa-gamepad";break;case SPEEDRUN_SEED_STATE.RANDOM:e="fa-dice";break;case SPEEDRUN_SEED_STATE.PLAYER:e="fa-user-pen";break;default:throw new Error("Unrecognized speedrun seed option in previous run subtab")}return{icon:`fas ${e} o-icon`,text:Speedrun.seedModeText(this.prevRunInfo)}},iconAttrs(){return[this.offlineAttr,this.segmentAttr,this.stdAttr,this.seedAttr]},startDate(){return Time.toDateTimeString(this.prevRunInfo.startDate)},finalTime(){return TimeSpan.fromMilliseconds(this.prevRunInfo.records.max()).toStringShort(!0,!0)}}},j$=W$;var X$=(0,X.Z)(j$,V$,Y$,!1,null,"0c86ef47",null);const z$=X$.exports;var K$=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.classObject},[i("span",{staticClass:"l-milestone-title"},[e._v(e._s(e.milestone.name))]),i("span",{style:e.timeStyle(e.currTime)},[e._v("Current run: "+e._s(e.timeString(e.currTime)))]),e.refTime?i("span",{style:e.timeStyle(e.refTime)},[e._v(" Run "+e._s(e.runIndices[0])+": "+e._s(e.timeString(e.refTime,!0))+" ")]):e._e(),i("span",{style:e.timeStyle(e.bestTime)},[e._v("Best ("+e._s(e.runIndices[1])+"): "+e._s(e.timeString(e.bestTime,!0)))])])},Z$=[];const Q$={name:"SpeedrunMilestoneCompare",props:{milestone:{type:Object,required:!0},currTime:{type:Number,required:!1,default:0},refTime:{type:Number,required:!1,default:0},bestTime:{type:Number,required:!0},runIndices:{type:Array,required:!0}},data(){return{realTime:0}},computed:{classObject(){const e=this.currTime>0&&this.refTime>0;return{"l-speedrun-milestone-entry":!0,"l-milestone-slow":e&&this.currTime>this.refTime,"l-milestone-fast":e&&this.currTime0?this.currTime-e:this.realTime-e;let n=TimeSpan.fromMilliseconds(Math.abs(a)).toStringShort(!0,!0);return n=`${this.currTime>e?"-":"+"}${n}`,e>0?`${i}${t?` (${n})`:""}`:"Not reached yet"},timeStyle(e){const t=e===[this.currTime,this.refTime,this.bestTime].filter((e=>0!==e)).min();return{color:"var(--color-text)",opacity:t?1:.85,"font-weight":t?"bold":null}}}},J$=Q$;var eH=(0,X.Z)(J$,K$,Z$,!1,null,"ade67c12",null);const tH=eH.exports,iH={name:"PreviousSpeedrunTab",components:{PrimaryButton:Vs,SpeedrunMilestoneCompare:tH,PreviousSpeedrunInfo:z$},data(){return{milestoneTimes:[],isSpectating:!1,selectedRun:0,runPage:0}},computed:{milestones:()=>GameDatabase.speedrunMilestones,previousRuns(){const e=Object.keys(player.speedrun.previousRuns),t=[];for(const i of e){const e=player.speedrun.previousRuns[i];e.id=Number(i),t.push(e)}return t},bestPreviousTimes(){const e=GameDatabase.speedrunMilestones.length+1,t=Array.repeat(0,e),i=[...t];for(const n of Object.keys(player.speedrun.previousRuns)){const a=player.speedrun.previousRuns[n].records;for(let s=0;sNumber(e.id))).max(),player.records.fullGameCompletions)},spectateText(){return this.isSpectating?"Numbers here are unaffected by END so that you can see your final records.":null}},methods:{update(){this.milestoneTimes=[...player.speedrun.records],this.isSpectating=GameEnd.endState>END_STATE_MARKERS.SPECTATE_GAME},selectRun(e){this.selectedRun=e},findRun(e){return this.previousRuns.find((t=>(null===t||void 0===t?void 0:t.id)===10*this.runPage+e))},changePage(e){this.runPage=Math.clamp(this.runPage+e,0,Math.floor(this.highestIndex/10))}}},aH=iH;var nH=(0,X.Z)(aH,H$,q$,!1,null,"e1e0cc3c",null);const sH=nH.exports;var rH=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-ra-celestial-tab"},[i("div",{staticClass:"c-ra-memory-header"},[i("CelestialQuoteHistory",{attrs:{celestial:"ra"}}),e.isRaCapped?i("div",[e._v(" All Memories have been returned. ")]):i("div",[e._v(" Each Memory Chunk generates a base of one Memory per second"),e.memoriesPerChunk>1?i("span",[e._v(", which has been increased to "+e._s(e.quantify("Memory",e.memoriesPerChunk,2,3))+" per second")]):e._e(),e._v(". "),i("br"),e._v(" Storing real time prevents Memory Chunk generation, but Memories will still be gained normally. "),e.memoriesPerChunk>1?i("span",[i("br"),e._v(" This is being increased due to "+e._s(e.memoryBoosts)+". ")]):e._e()])],1),e._m(0),i("div",{staticClass:"l-ra-all-pets-container"},e._l(e.pets,(function(e,t){return i("RaPet",{key:t,attrs:{"pet-config":e}})})),1),i("div",{staticClass:"l-ra-non-pets",staticStyle:{"flex-wrap":"wrap"}},[i("button",{staticClass:"c-ra-run-button"},[i("h2",{class:{"o-pelle-disabled":e.isDoomed}},[e.isRunning?i("span",[e._v("You are in ")]):i("span",[e._v("Start ")]),e._v(" Ra's Reality ")]),i("div",{class:e.runButtonClassObject,on:{click:e.startRun}},[i("span",{staticClass:"c-ra-run-button__icon__sigil fas fa-sun"})]),e._l(e.runDescription,(function(t,a){return i("span",{key:a+"-ra-run-desc",class:{"o-pelle-disabled":0===a&&e.dimboostUncapped}},[e._v(" "+e._s(t)+" ")])})),i("br"),i("span",[e._v(" "+e._s(e.memoryDescription)+" ")])],2),e.showRemembrance&&!e.isRaCapped?i("div",{staticClass:"c-ra-remembrance-unlock"},[i("h1",{style:e.petStyle},[e._v(" Remembrance ")]),i("span",{style:e.petStyle},[e._v(" "+e._s(e.remembranceDescription)+" ")]),e.hasRemembrance?i("div",{staticClass:"c-ra-remembrance-unlock-inner"},e._l(e.pets,(function(e,t){return i("RaPetRemembranceButton",{key:t,attrs:{"pet-config":e}})})),1):i("div",{staticClass:"c-ra-remembrance-unlock-inner"},[e._v(" Unlocked by getting "+e._s(e.formatInt(e.remembranceReq))+" total Celestial Memory levels (you need "+e._s(e.formatInt(e.remembranceReq-e.totalLevels))+" more) ")])]):e._e(),this.shopUnlocked?i("div",[i("RaUpgradePanel")],1):e._e()])])},oH=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e._v(" Mouse-over the icons below the bar to see descriptions of upgrades, "),i("br"),e._v(" and mouse-over "),i("i",{staticClass:"fas fa-question-circle"}),e._v(" icons for specific resource information. ")])}],lH=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isUnlocked?i("div",{staticClass:"l-ra-pet-container"},[i("div",{staticClass:"c-ra-pet-header",style:e.petStyle},[i("div",{staticClass:"c-ra-pet-title"},[e._v(" "+e._s(e.displayName)+" Level "+e._s(e.formatInt(e.level))+"/"+e._s(e.formatInt(e.levelCap))+" ")]),e.showScalingUpgrade?i("div",{key:e.level},[e._v(" "+e._s(e.scalingUpgradeText)+" ")]):i("br"),e.isCapped?e._e():i("div",[i("div",[e._v(" "+e._s(e.name)+" "+e._s("enslaved"===e.pet.id?"have":"has")+" "+e._s(e.quantify("Memory",e.memories,2))+" ")])]),e.isCapped?e._e():i("div",{staticClass:"l-ra-pet-middle-container"},[i("div",{staticClass:"l-ra-pet-upgrade-container"},[i("div",{staticClass:"l-ra-pet-upgrade c-ra-pet-upgrade__top"},[i("div",{class:e.upgradeClassObject("memory"),on:{click:function(t){return e.pet.purchaseMemoryUpgrade()}}},[i("span",{staticClass:"fas fa-brain"}),e.memoryUpgradeCapped?i("div",{staticClass:"c-ra-pet-upgrade__tooltip"},[i("div",{staticClass:"c-ra-pet-upgrade__tooltip__name"},[e._v(" "+e._s(e.name)+"'s Recollection ")]),i("div",{staticClass:"c-ra-pet-upgrade__tooltip__description"},[e._v(" Capped: "+e._s(e.formatX(e.currentMemoryMult,2,2))+" ")])]):i("div",{staticClass:"c-ra-pet-upgrade__tooltip"},[i("div",{staticClass:"c-ra-pet-upgrade__tooltip__name"},[e._v(" "+e._s(e.name)+"'s Recollection ")]),i("div",{staticClass:"c-ra-pet-upgrade__tooltip__description"},[e._v(" Gain "+e._s(e.formatPercents(.3))+" more Memories ")]),i("div",{staticClass:"c-ra-pet-upgrade__tooltip__footer"},[e._v(" Cost: "+e._s(e.quantify("Memory",e.memoryUpgradeCost,2,2))+" "),e.memories<=e.memoryUpgradeCost?i("span",[e._v(" "+e._s(e.nextMemoryUpgradeEstimate)+" ")]):e._e(),i("br"),e._v(" Currently: "+e._s(e.formatX(e.currentMemoryMult,2,2))+" ")])])]),i("div",{staticClass:"c-ra-upgrade-bar"},[i("div",{staticClass:"c-ra-upgrade-bar__inner",style:e.barStyle("memory")})])]),i("div",{staticClass:"l-ra-pet-upgrade c-ra-pet-upgrade__bottom"},[i("div",{class:e.upgradeClassObject("chunk"),on:{click:function(t){return e.pet.purchaseChunkUpgrade()}}},[i("span",{staticClass:"fas fa-dice-d6"}),e.chunkUpgradeCapped?i("div",{staticClass:"c-ra-pet-upgrade__tooltip"},[i("div",{staticClass:"c-ra-pet-upgrade__tooltip__name"},[e._v(" "+e._s(e.name)+"'s Fragmentation ")]),i("div",{staticClass:"c-ra-pet-upgrade__tooltip__description"},[e._v(" Capped: "+e._s(e.formatX(e.currentChunkMult,2,2))+" ")])]):i("div",{staticClass:"c-ra-pet-upgrade__tooltip"},[i("div",{staticClass:"c-ra-pet-upgrade__tooltip__name"},[e._v(" "+e._s(e.name)+"'s Fragmentation ")]),i("div",{staticClass:"c-ra-pet-upgrade__tooltip__description"},[e._v(" Gain "+e._s(e.formatPercents(.5))+" more Memory Chunks ")]),i("div",{staticClass:"c-ra-pet-upgrade__tooltip__footer"},[e._v(" Cost: "+e._s(e.quantify("Memory",e.chunkUpgradeCost,2,2))+" "),e.memories<=e.chunkUpgradeCost?i("span",[e._v(" "+e._s(e.nextMemoryChunkUpgradeEstimate)+" ")]):e._e(),i("br"),e._v(" Currently: "+e._s(e.formatX(e.currentChunkMult,2,2))+" ")])])]),i("div",{staticClass:"c-ra-upgrade-bar c-ra-upgrade-bar--bottom"},[i("div",{staticClass:"c-ra-upgrade-bar__inner",style:e.barStyle("chunk")})])])]),e.isCapped?e._e():i("RaPetLevelBar",{attrs:{"pet-config":e.petConfig}})],1),e.isCapped?e._e():i("div",[i("div",[e._v(" "+e._s(e.quantify("Memory Chunk",e.memoryChunks,2,2))+", "+e._s(e.quantify("Memory",e.memoriesPerSecond,2,2))+"/sec ")]),i("div",[e._v(" Gaining "+e._s(e.quantify("Memory Chunk",e.memoryChunksPerSecond,2,2))+"/sec "),i("span",{attrs:{"ach-tooltip":e.chunkTooltip}},[i("i",{staticClass:"fas fa-question-circle"})])]),e.DEV?i("div",[e._v(" Gaining "+e._s(e.quantify("Base Memory Chunk",e.baseMemoryChunksPerSecond,2,2))+"/sec "),i("span",{attrs:{"ach-tooltip":e.chunkTooltip}},[i("i",{staticClass:"fas fa-question-circle"})])]):e._e()]),e.memoryMultiplier>1&&!e.isRaCapped?i("div",[e._v(" Multiplying all Memory production by "+e._s(e.format(e.memoryMultiplier,2,3))+" "),i("span",{attrs:{"ach-tooltip":e.memoryGainTooltip}},[i("i",{staticClass:"fas fa-question-circle"})])]):e.isRaCapped?e._e():i("br"),e.isRaCapped?i("div",{staticClass:"l-ra-pet-postcompletion-spacer"}):i("br"),i("div",{staticClass:"l-ra-pet-milestones"},e._l(e.unlocks.slice(0,7),(function(t,a){return i("RaUpgradeIcon",{key:25*e.level+a,attrs:{unlock:t}})})),1),e.mu19Bought?i("div",{staticClass:"l-ra-pet-milestones"},e._l(e.unlocks.slice(7),(function(t,a){return i("RaUpgradeIcon",{key:25*e.level+a,attrs:{unlock:t}})})),1):e._e()])]):e._e()},cH=[],uH=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-ra-bar-container"},[i("div",{staticClass:"c-ra-exp-bar"},[i("div",{staticClass:"c-ra-exp-bar-inner",style:e.barStyle})]),i("div",{class:e.classObject,on:{click:function(t){return e.pet.levelUp()}}},[i("span",{staticClass:"fas fa-arrow-up"}),i("div",{staticClass:"c-ra-pet-upgrade__tooltip"},[i("div",{staticClass:"c-ra-pet-upgrade__tooltip__name"},[e._v(" Level "+e._s(e.pet.name)+" to "+e._s(e.formatInt(e.level+1))+" ")]),i("div",{staticClass:"c-ra-pet-upgrade__tooltip__description"},[e._v(" "+e._s(e.reward)+" "),e.showNextScalingUpgrade?i("div",{style:{"margin-top":e.nextUnlock.reward?"0.6rem":"0"}},[e._v(" "+e._s(e.nextScalingUpgrade)+" ")]):e._e()]),i("div",{staticClass:"c-ra-pet-upgrade__tooltip__footer"},[e._v(" Cost: "+e._s(e.quantify("Memory",e.requiredMemories,2,2))+" "),e.memories<=e.requiredMemories?i("span",[e._v(e._s(e.nextLevelEstimate))]):e._e()])])])])},dH=[];const hH={name:"RaPetLevelBar",props:{petConfig:{type:Object,required:!0}},data(){return{isUnlocked:!1,level:0,memories:0,requiredMemories:0,nextLevelEstimate:0,reward:""}},computed:{pet(){return this.petConfig.pet},shiftDown(){return ui.view.shiftDown},unlocks(){return this.pet.unlocks},importantLevels(){return this.unlocks.map((e=>e.level))},barStyle(){return{width:100*Math.min(1,this.memories/this.requiredMemories)+"%",background:this.pet.color}},petStyle(){return{"background-color":this.pet.color}},prevGoal(){const e=this.importantLevels.filter((e=>e<=this.level));return Math.clampMax(e.max(),15)},nextGoal(){const e=this.importantLevels.filter((e=>e>this.level));return 0===e.length?25:e.min()},currentLevelGoal(){return this.level+1},classObject(){const e=this.memories>=this.requiredMemories,t=this.pet,i=!("pelle"===t.id&&99===this.level&&699!=UZ.totalPetLevel);return{"c-ra-level-up-btn":!0,"c-ra-pet-btn--available":e&&i,[`c-ra-pet-btn--${t.id}`]:e&&i}},nextUnlock(){const e=this.pet.unlocks.find((e=>e.level===this.level+1));return null!==e&&void 0!==e&&e},showNextScalingUpgrade(){switch(this.pet.name){case"Teresa":const e=Math.min(12,Math.floor(this.level/2))!==Math.min(12,Math.floor((this.level+1)/2)),t=Math.min(9,Math.floor((this.level-40)/6))!==Math.min(9,Math.floor((this.level-39)/6));return this.level>=40?t:e;case"Effarig":return AlchemyResources.all.filter((e=>e.unlockedAt===this.level+1)).length>0;case"Enslaved":return!0;case"V":return Math.min(Math.floor(this.level/6),16)!==Math.min(Math.floor((this.level+1)/6),16);case"laitela":return!0;default:return!1}},nextScalingUpgrade(){const e=AlchemyResources.all.filter((e=>e.unlockedAt===this.level+1))[0];switch(this.pet.name){case"Teresa":const t=this.level>=40?"Break Infinity Upgrade":"Infinity Upgrade";return`You can charge an additional ${t}`;case"Effarig":return`Unlock the ${e.name} resource in Glyph Alchemy, which\n ${e.description}`;case"Enslaved":return`${formatX(20)} to stored game time, and you can store an additional hour of real time`;case"V":return"You can purchase an additional Triad Study";case"laitela":return`Dark matter cap is multiplied ${formatX(1e10)}`;default:return"false"}}},methods:{update(){const e=this.pet;this.isUnlocked=e.isUnlocked,this.isUnlocked&&(this.memories=e.memories,this.level=e.level,this.requiredMemories=e.requiredMemories,this.nextLevelEstimate=UZ.timeToGoalString(this.pet,this.requiredMemories-this.memories),this.reward="function"===typeof this.nextUnlock.reward?this.nextUnlock.reward():this.nextUnlock.reward)},isImportant(e){return this.importantLevels.includes(e)}}},mH=hH;var pH=(0,X.Z)(mH,uH,dH,!1,null,null,null);const yH=pH.exports;var fH=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.classObject},[i("div",{domProps:{innerHTML:e._s(e.icon)}}),i("div",{staticClass:"c-ra-pet-upgrade__tooltip"},[i("div",{staticClass:"c-ra-pet-upgrade__tooltip__name"},[e._v(" "+e._s(e.petName)+" Level "+e._s(e.formatInt(e.level))+" ")]),i("div",{staticClass:"c-ra-pet-upgrade__tooltip__description",class:{"o-pelle-disabled":e.isUseless}},[e._v(" "+e._s(e.description)+" ")])])])},gH=[];const vH={name:"RaUpgradeIcon",props:{unlock:{type:Object,required:!0}},data(){return{isUnlocked:!1,level:0,description:""}},computed:{petID(){return this.unlock.pet.id},petName(){return this.unlock.pet.name},icon(){const e=this.unlock.displayIcon;return"function"===typeof e?e():e},classObject(){return{"c-ra-upgrade-icon":!0,"c-ra-upgrade-icon--inactive":!this.isUnlocked,[`c-ra-upgrade-icon--${this.petID}`]:!0}},isUseless(){return this.unlock.disabledByPelle}},methods:{update(){const e=this.unlock;this.isUnlocked=e.isUnlocked,this.level=e.level,this.description=e.reward}}},bH=vH;var EH=(0,X.Z)(bH,fH,gH,!1,null,"0a2bf9d3",null);const TH=EH.exports,wH={name:"RaPet",components:{RaUpgradeIcon:TH,RaPetLevelBar:yH},props:{petConfig:{type:Object,required:!0}},data(){return{isUnlocked:!1,isRaCapped:!1,isCapped:!1,level:0,memories:0,requiredMemories:0,memoryChunks:0,memoryChunksPerSecond:0,memoriesPerSecond:0,memoryMultiplier:1,canGetMemoryChunks:!1,memoryUpgradeCost:0,chunkUpgradeCost:0,memoryUpgradeCapped:!1,chunkUpgradeCapped:!1,currentMemoryMult:0,currentChunkMult:0,nextMemoryUpgradeEstimate:"",nextMemoryChunkUpgradeEstimate:"",mu19Bought:!1,secondSource:!1,baseMemoryChunksPerSecond:0,DEV:y}},computed:{levelCap(){return Ra.levelCap},showScalingUpgrade(){return this.petConfig.scalingUpgradeVisible(this.level)},scalingUpgradeText(){return this.petConfig.scalingUpgradeText(this.level)},pet(){return this.petConfig.pet},name(){return this.pet.name},petStyle(){return{color:this.pet.color}},unlocks(){return this.pet.unlocks},chunkTooltip(){return this.secondSource?`Based on ${this.pet.chunkGain} AND ${this.pet.secondaryMemoryChunkGain}`:`Based on ${this.pet.chunkGain}`},memoryGainTooltip(){return`Based on ${this.pet.memoryGain}`},displayName(){switch(this.pet.id){case"enslaved":return"Nameless";default:return this.name}}},methods:{update(){this.isRaCapped=Ra.totalPetLevel===Ra.maxTotalPetLevel;const e=this.pet;this.isCapped=e.level===Ra.levelCap,this.isUnlocked=e.isUnlocked,this.isUnlocked&&(this.level=e.level,this.memories=e.memories,this.requiredMemories=e.requiredMemories,this.memoryChunks=e.memoryChunks,this.memoryChunksPerSecond=e.memoryChunksPerSecond,this.memoriesPerSecond=e.memoryChunks*Ra.productionPerMemoryChunk*this.currentMemoryMult,pl(15).isBought&&(this.memoriesPerSecond=Math.pow(this.memoriesPerSecond,1.5)),this.canGetMemoryChunks=e.canGetMemoryChunks,this.memoryMultiplier=e.memoryProductionMultiplier,this.memoryUpgradeCost=e.memoryUpgradeCost,this.chunkUpgradeCost=e.chunkUpgradeCost,this.memoryUpgradeCapped=e.memoryUpgradeCapped,this.chunkUpgradeCapped=e.chunkUpgradeCapped,this.currentMemoryMult=e.memoryUpgradeCurrentMult,this.currentChunkMult=e.chunkUpgradeCurrentMult,this.nextMemoryUpgradeEstimate=Ra.timeToGoalString(e,this.memoryUpgradeCost-this.memories),this.nextMemoryChunkUpgradeEstimate=Ra.timeToGoalString(e,this.chunkUpgradeCost-this.memories),this.mu19Bought=pl(19).isBought,this.secondSource=Ra.unlocks.secondaryMemoryChunkGain.isUnlocked,this.baseMemoryChunksPerSecond=e.memoryChunksPerSecond/this.currentChunkMult)},nextUnlockLevel(){const e=pl(19).isBought?100:25,t=this.pet.unlocks.map((e=>e.level)).filter((e=>e>this.level));return 0===t.length?e:t.min()},upgradeClassObject(e){const t="memory"===e?this.memoryUpgradeCost<=this.memories:this.chunkUpgradeCost<=this.memories,i="memory"===e?this.memoryUpgradeCapped:this.chunkUpgradeCapped,a=this.pet;return{"c-ra-pet-upgrade":!0,"c-ra-pet-upgrade-memory":"memory"===e,"c-ra-pet-upgrade-chunk":"chunk"===e,"c-ra-pet-btn--available":t,[`c-ra-pet-btn--${a.id}`]:t,"c-ra-pet-btn--available__capped":i,[`c-ra-pet-btn--${a.id}__capped`]:i}},barStyle(e){const t="memory"===e?this.memoryUpgradeCost:this.chunkUpgradeCost,i="memory"===e&&this.memoryUpgradeCapped||"chunk"===e&&this.chunkUpgradeCapped?t:this.memories;return{width:100*Math.min(1,i/t)+"%",background:this.pet.color}}}},kH=wH;var CH=(0,X.Z)(kH,lH,cH,!1,null,"60840c17",null);const AH=CH.exports;var _H=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isUnlocked?i("button",{staticClass:"c-ra-pet-remembrance-button",style:e.petStyle,on:{click:e.toggleRemembrance}},[e.hasRemembrance?i("span",[e._v(" Remembrance given to "+e._s(e.name)+" ")]):i("span",[e._v(" Give Remembrance to "+e._s(e.name)+" ")])]):e._e()},SH=[];const DH={name:"RaPetRemembranceButton",props:{petConfig:{type:Object,required:!0}},data(){return{isUnlocked:!1,hasRemembrance:!1}},computed:{pet(){return this.petConfig.pet},name(){return this.pet.name},petStyle(){return{backgroundColor:this.hasRemembrance?this.pet.color:"#555","box-shadow":this.hasRemembrance?"0.1rem 0.1rem 0.1rem rgba(0, 0, 0, 0.7)":"","border-color":this.hasRemembrance?"black":""}}},methods:{update(){const e=this.pet;this.isUnlocked=e.isUnlocked,this.isUnlocked&&(this.hasRemembrance=e.hasRemembrance)},toggleRemembrance(){Ra.petWithRemembrance=Ra.petWithRemembrance===this.pet.name?"":this.pet.name}}},RH=DH;var MH=(0,X.Z)(RH,_H,SH,!1,null,null,null);const IH=MH.exports;var xH=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-ra-panel-container"},[i("div",{staticClass:"c-ra-pet-title",staticStyle:{"font-weight":"bold",color:"var(--color-ra--base)"}},[e._v("Ra's Shop")]),i("br"),e._v(" You currently have "+e._s(e.format(e.raPoints,3,3))+" Ra's Memory Crystals. Gaining "+e._s(e.format(e.GainPerSecond,3,3))+"/s, depending on Dimension Boosts in Ra's Reality. "),i("br"),i("div",{staticClass:"c-ra-upgrade-container"},e._l(e.rebuyables,(function(e){return i("RaUpgradeVue",{key:e.config.id,attrs:{upgrade:e,isRebuyable:!0}})})),1),e.NewRow?i("div",{staticClass:"c-ra-upgrade-container"},e._l(e.singles,(function(e){return i("RaUpgradeVue",{key:e.config.id,attrs:{upgrade:e,isRebuyable:!1}})})),1):e._e()])},PH=[],GH=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group",style:e.color},[i("button",{staticClass:"c-ra-upgrade",class:e.classObject,on:{click:function(t){return e.upgrade.purchase()}}},[i("span",{class:{"o-pelle-disabled":e.isUseless}},[i("DescriptionDisplay",{attrs:{config:e.config}}),[i("EffectDisplay",{attrs:{config:e.config,br:""}}),!e.isBought&&e.config.implemented?i("CostDisplay",{attrs:{config:e.config,br:"",name:e.currency}}):e._e()]],2),e.config.implemented?e._e():i("span",[i("br"),e._v("Not Yet Implemented")])])])},UH=[];const BH={name:"RaUpgrade",components:{DescriptionDisplay:ND,EffectDisplay:tw,CostDisplay:ID},props:{upgrade:{type:Object,required:!0}},data(){return{isAvailableForPurchase:!1,canBeBought:!1,isRebuyable:!1,isBought:!1}},computed:{config(){return this.upgrade.config},classObject(){return{"c-ra-upgrade--bought":this.isBought&&!this.isUseless,"c-ra-upgrade--unavailable":!this.canBeBought}},color(){var e;const t=null!==(e=this.config.celestial)&&void 0!==e?e:"ra";return`--cel-color: var(--color-ra-pet--${t})`},currency(){return this.config.currencyLabel},isUseless(){return!1}},methods:{update(){const e=this.upgrade;this.isAvailableForPurchase=e.isAvailableForPurchase,this.canBeBought=e.canBeBought,this.isRebuyable=e.isRebuyable,this.isBought=e.isRebuyable?e.isCapped:e.isBought}}},NH=BH;var OH=(0,X.Z)(NH,GH,UH,!1,null,"20e5f9b8",null);const LH=OH.exports,FH={name:"RaUpgradePanel",components:{RaUpgradeVue:LH},data(){return{raPoints:new Decimal(0),GainPerSecond:new Decimal(0),NewRow:!1}},computed:{rebuyables:()=>LZ.rebuyables,singles:()=>LZ.singles},methods:{update(){this.raPoints.copyFrom(player.celestials.ra.raPoints),this.GainPerSecond=UZ.raPointsGain(1e3),this.NewRow=UZ.unlocks.improvedPetUpgrades.isUnlocked}}},$H=FH;var HH=(0,X.Z)($H,xH,PH,!1,null,"1e412a9e",null);const qH=HH.exports,VH={name:"RaTab",components:{RaPet:AH,RaPetRemembranceButton:IH,CelestialQuoteHistory:AM,RaUpgradePanel:qH},data(){return{memoriesPerChunk:0,showReality:!1,isRaCapped:!1,totalLevels:0,showRemembrance:!1,hasRemembrance:!1,remembranceReq:0,remembranceMult:1,remembranceNerf:1,petWithRemembrance:"",isRunning:!1,memoryBoosts:"",shopUnlocked:!1,remNerfed:!1}},computed:{laitelaUnlock:()=>Laitela.isUnlocked,pets:()=>[{pet:UZ.pets.teresa,scalingUpgradeVisible:()=>UZ.unlocks.chargedInfinityUpgrades.isUnlocked,scalingUpgradeText:()=>UZ.unlocks.chargedBreakInfinityUpgrades.isUnlocked?`You can Charge ${quantifyInt("Break Infinity Upgrade",UZ.totalBreakCharges)}.`:`You can Charge ${quantifyInt("Infinity Upgrade",UZ.totalCharges)}.`},{pet:UZ.pets.effarig,scalingUpgradeVisible:()=>AlchemyResources.all.filter((e=>e.isUnlocked)).length>0,scalingUpgradeText:()=>{const e=AlchemyResources.all.filter((e=>e.isUnlocked)).length;return`You have unlocked ${quantifyInt("Alchemy Resource",e)}.`}},{pet:UZ.pets.enslaved,scalingUpgradeVisible:()=>UZ.unlocks.improvedStoredTime.isUnlocked,scalingUpgradeText:()=>`Stored game time\n ${formatX(UZ.unlocks.improvedStoredTime.effects.gameTimeAmplification.effectOrDefault(1),2)} and real time\n +${formatInt(UZ.unlocks.improvedStoredTime.effects.realTimeCap.effectOrDefault(0)/36e5)} hours`},{pet:UZ.pets.v,scalingUpgradeVisible:()=>UZ.unlocks.unlockHardV.isUnlocked,scalingUpgradeText:()=>{const e=UZ.unlocks.unlockHardV.effectOrDefault(0);return`You have unlocked ${quantifyInt("Triad Study",e)}.`}},{pet:UZ.pets.ra,scalingUpgradeVisible:()=>!1,scalingUpgradeText:()=>""},{pet:UZ.pets.laitela,scalingUpgradeVisible:()=>!0,scalingUpgradeText:()=>`Dark Matter cap multiplied by ${formatX(new Decimal(1e10).pow(UZ.pets.laitela.level))}`},{pet:UZ.pets.pelle,scalingUpgradeVisible:()=>!1,scalingUpgradeText:()=>""}],petStyle(){return{color:this.remNerfed&&""!==this.petWithRemembrance?this.pets.find((e=>e.pet.name===this.petWithRemembrance)).pet.color:"white"}},runButtonClassObject(){return{"c-ra-run-button__icon":!0,"c-ra-run-button__icon--running":this.isRunning,"c-celestial-run-button--clickable":!this.isDoomed,"o-pelle-disabled-pointer":this.isDoomed}},runDescription(){return GameDatabase.celestials.descriptions[4].effects().replace(/^[0-9A-Z_a-z]/,(e=>e.toUpperCase())).split("\n")},memoryDescription(){return"Within Ra's Reality, Memory Chunks for Celestial Memories\n will be generated based on certain resource amounts."},remembranceDescription(){let e=`${this.remNerfed?"Whichever Celestial has Remembrance":"All Celestials"} will get ${formatX(this.remembranceMult)} Memory Chunk gain.`;return this.remNerfed&&(e+=` The other Celestials will get ${formatX(this.remembranceNerf,1,1)} Memory Chunk gain.`),e},isDoomed:()=>Pelle.isDoomed,dimboostUncapped:()=>UZ.unlocks.raRealUncapDimboost.isUnlocked,upgrades:()=>RaUpgrades.all,costScalingTooltip:()=>"Cost Scaling is NYI",possibleTooltip:()=>"Striped upgrades are Not Yet Implemented [NYI].",lockTooltip:()=>"This will only function if you have not already failed the condition or\n unlocked the upgrade.",grid:()=>[],classObject(){return{"o-warp-btn":!0,"o-warp-btn--color-2":!0,"o-warp-btn--available":this.canWarp,"o-warp-btn--unavailable":!this.canWarp,"o-warp-btn--unclickable":this.warped}},tooltip(){},totalUpgFunc(){return WarpUpgrades.all.countWhere((e=>e.isBought))}},methods:{id(e,t){return 5*(e-1)+t-1},update(){this.memoriesPerChunk=UZ.productionPerMemoryChunk,this.isRaCapped=MendingUpgrade(19).isBought?700===IH.totalPetLevel:100===UZ.totalPetLevel,this.totalLevels=UZ.totalPetLevel,this.showRemembrance=UZ.unlocks.effarigUnlock.canBeApplied,this.hasRemembrance=UZ.remembrance.isUnlocked,this.remembranceReq=UZ.remembrance.requiredLevels,this.remembranceMult=UZ.remembrance.multiplier,this.remembranceNerf=UZ.remembrance.nerf,this.petWithRemembrance=UZ.petWithRemembrance,this.isRunning=UZ.isRunning,this.memoryBoosts=UZ.memoryBoostResources,this.shopUnlocked=UZ.unlocks.remembranceAlwaysActiveAndShopUnlock.isUnlocked,this.remNerfed=!UZ.unlocks.remembranceAlwaysActiveAndShopUnlock.isUnlocked},startRun(){this.isDoomed||Modal.celestials.show({name:"Ra's",number:4})},toggleMode(){UZ.toggleMode()}}},YH=VH;var WH=(0,X.Z)(YH,rH,oH,!1,null,null,null);const jH=WH.exports;var XH=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-reality-upgrade-grid"},[i("div",{staticClass:"c-reality-upgrade-infotext"},[e._v(" Mouseover "),i("i",{staticClass:"fas fa-question-circle"}),e._v(" icons for additional information. "),i("br"),e._v(" The first row of upgrades can be purchased endlessly for increasing costs "),i("span",{attrs:{"ach-tooltip":e.costScalingTooltip}},[i("i",{staticClass:"fas fa-question-circle"})]),e._v(" and the rest are single-purchase. "),i("br"),e._v(" Single-purchase upgrades also have requirements which, once completed, permanently unlock the ability to purchase the upgrades at any point. "),i("span",{attrs:{"ach-tooltip":e.possibleTooltip}},[i("i",{staticClass:"fas fa-question-circle"})]),i("br"),e._v(" Locked upgrades show their requirement and effect by default; unlocked ones show their effect, current bonus, and cost. Hold shift to swap this behavior. "),i("br"),e._v(" You can shift-click upgrades with "),i("i",{staticClass:"fas fa-lock-open"}),e._v(" to make the game prevent you from doing anything this Reality which would cause you to fail their unlock condition. "),i("span",{attrs:{"ach-tooltip":e.lockTooltip}},[i("i",{staticClass:"fas fa-question-circle"})]),i("br"),e._v(" Every completed row of purchased upgrades increases your Glyph level by "+e._s(e.formatInt(1))+". ")]),e._l(5,(function(t){return i("div",{key:t,staticClass:"l-reality-upgrade-grid__row"},e._l(5,(function(a){return i("RealityUpgradeButton",{key:e.id(t,a),attrs:{upgrade:e.upgrades[e.id(t,a)]}})})),1)}))],2)},zH=[],KH=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group"},[i("button",{staticClass:"l-reality-upgrade-btn c-reality-upgrade-btn",class:e.classObject,on:{click:[function(t){return t.shiftKey?t.ctrlKey||t.altKey||t.metaKey?null:e.toggleLock(e.upgrade):null},function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.upgrade.purchase()}]}},[i("HintText",{staticClass:"l-hint-text--reality-upgrade c-hint-text--reality-upgrade",attrs:{type:"realityUpgrades"}},[e._v(" "+e._s(e.config.name)+" ")]),i("span",{class:{"o-pelle-disabled":e.isUseless}},[i("DescriptionDisplay",{attrs:{config:e.config}}),e.$viewModel.shiftDown!==e.isAvailableForPurchase||e.isRebuyable?[i("EffectDisplay",{attrs:{config:e.config,br:""}}),e.isBought?e._e():i("CostDisplay",{attrs:{config:e.config,br:"",name:"Reality Machine"}})]:[i("br"),i("DescriptionDisplay",{staticClass:"c-reality-upgrade-btn__requirement",attrs:{config:e.requirementConfig,label:"Requirement:"}})],e.automatorPoints&&!e.isBought?i("b",[e._v(" (+"+e._s(e.formatInt(e.automatorPoints))+" AP) ")]):e._e()],2)],1),e.canBeLocked?i("div",{staticClass:"o-requirement-lock"},[e.hasRequirementLock?i("i",{staticClass:"fas fa-lock"}):e.canLock?i("i",{staticClass:"fas fa-lock-open"}):e._e()]):e._e(),e.isRebuyable&&e.isAutoUnlocked?i("PrimaryToggleButton",{staticClass:"l--spoon-btn-group__little-spoon-reality-btn o-primary-btn--reality-upgrade-toggle",attrs:{label:"Auto:"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}}):e._e()],1)},ZH=[];const QH={name:"RealityUpgradeButton",components:{PrimaryToggleButton:Sh,DescriptionDisplay:ND,EffectDisplay:tw,CostDisplay:ID,HintText:LT},props:{upgrade:{type:Object,required:!0}},data(){return{isAvailableForPurchase:!1,automatorPoints:!1,canBeBought:!1,isRebuyable:!1,isBought:!1,isPossible:!1,isAutoUnlocked:!1,isAutobuyerOn:!1,canBeLocked:!1,hasRequirementLock:!1}},computed:{config(){return this.upgrade.config},classObject(){return{"c-reality-upgrade-btn--useless":this.isUseless,"c-reality-upgrade-btn--bought":this.isBought&&!this.isUseless,"c-reality-upgrade-btn--unavailable":!this.isBought&&!this.canBeBought&&this.isAvailableForPurchase,"c-reality-upgrade-btn--possible":!this.isAvailableForPurchase&&this.isPossible,"c-reality-upgrade-btn--locked":!this.isAvailableForPurchase&&!this.isPossible}},requirementConfig(){return{description:this.config.requirement}},canLock(){return this.config.canLock&&!(this.isAvailableForPurchase||this.isBought)},isUseless(){return Pelle.disabledRUPGs.includes(this.upgrade.id)&&Pelle.isDoomed}},watch:{isAutobuyerOn(e){Autobuyer.realityUpgrade(this.upgrade.id).isActive=e}},methods:{update(){const e=this.upgrade;this.isAvailableForPurchase=e.isAvailableForPurchase,this.automatorPoints=this.config.automatorPoints,this.canBeBought=e.canBeBought,this.isRebuyable=e.isRebuyable,this.isBought=!e.isRebuyable&&e.isBought,this.isPossible=e.isPossible,this.isAutoUnlocked=Ra.unlocks.instantECAndRealityUpgradeAutobuyers.canBeApplied||hK.three.isReached,this.canBeLocked=e.config.canLock&&!this.isAvailableForPurchase,this.hasRequirementLock=e.hasPlayerLock,this.isRebuyable&&(this.isAutobuyerOn=Autobuyer.realityUpgrade(e.id).isActive)},toggleLock(e){this.isRebuyable||e.toggleMechanicLock()}}},JH=QH;var eq=(0,X.Z)(JH,KH,ZH,!1,null,"88651abe",null);const tq=eq.exports,iq={name:"RealityUpgradesTab",components:{RealityUpgradeButton:tq},computed:{upgrades:()=>RealityUpgrades.all,costScalingTooltip:()=>`Prices start increasing faster above ${format(1e30)} RM and then even faster\n above ${format(Decimal.NUMBER_MAX_VALUE,1)} RM`,possibleTooltip:()=>"Checkered upgrades are impossible to unlock this Reality. Striped upgrades are\n still possible.",lockTooltip:()=>"This will only function if you have not already failed the condition or\n unlocked the upgrade.",grid:()=>[]},methods:{id(e,t){return 5*(e-1)+t-1}}},aq=iq;var nq=(0,X.Z)(aq,XH,zH,!1,null,"5ab3ca65",null);const sq=nq.exports;var rq=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-replicanti-tab"},[i("br"),e.isUnlocked?[e.isDoomed?i("div",{staticClass:"modified-cap"},[e._v(" Your Replicanti cap has been removed due to the second "+e._s(e.scrambledText)+" milestone. ")]):e.hasRaisedCap?i("div",{staticClass:"modified-cap"},[e._v(" Completion of Effarig's Infinity is giving you the following rewards: "),i("br"),e._v(" Your Replicanti cap without TS192 is now "+e._s(e.format(e.replicantiCap,2))+" ("+e._s(e.capMultText)+") "),i("br"),e._v(" "+e._s(e.quantifyInt("extra Replicanti Galaxy",e.effarigInfinityBonusRG))+" (Next Replicanti Galaxy at "+e._s(e.format(e.nextEffarigRGThreshold,2))+" cap) ")]):e._e(),i("p",{staticClass:"c-replicanti-description"},[e._v(" You have "),i("span",{staticClass:"c-replicanti-description__accent"},[e._v(e._s(e.format(e.amount,2,0)))]),e._v(" Replicanti, translated to "),i("br"),i("span",{domProps:{innerHTML:e._s(e.boostText)}})]),e.hasMaxText?i("div",{staticClass:"c-replicanti-description"},[e._v(" Your maximum Replicanti reached this Reality is "),i("span",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.toMaxTooltip,expression:"toMaxTooltip"}],staticClass:"max-accent"},[e._v(e._s(e.format(e.maxReplicanti,2)))]),e._v(". ")]):e._e(),i("br"),e.isInEC8?i("div",[e._v(" You have "+e._s(e.quantifyInt("purchase",e.ec8Purchases))+" left within Eternity Challenge 8. ")]):e._e(),i("div",{staticClass:"l-replicanti-upgrade-row"},[i("ReplicantiUpgradeButton",{attrs:{setup:e.replicantiChanceSetup}}),i("ReplicantiUpgradeButton",{attrs:{setup:e.replicantiIntervalSetup}}),i("ReplicantiUpgradeButton",{attrs:{setup:e.maxGalaxySetup}})],1),i("div",[e._v(" The Max Replicanti Galaxy upgrade can be purchased endlessly, but costs increase "),i("br"),e._v(" more rapidly above "+e._s(e.formatInt(e.distantRG))+" Replicanti Galaxies and even more so above "+e._s(e.formatInt(e.remoteRG))+" Replicanti Galaxies. "),i("br"),e._v(" You can only buy a max of "+e._s(e.formatInt(25e4))+" Replicanti Galaxies. "),e.hasFree?i("div",[e._v(" Free Replicanti Galaxies are capped at "+e._s(e.formatInt(35e4))+". ")]):e._e()]),i("br"),i("br"),i("ReplicantiGainText"),i("br"),e.canSeeGalaxyButton?i("ReplicantiGalaxyButton"):e._e()]:i("PrimaryButton",{staticClass:"o-primary-btn--replicanti-unlock",attrs:{enabled:e.isUnlockAffordable,onclick:"Replicanti.unlock();"}},[e._v(" Unlock Replicanti "),i("br"),e._v(" Cost: "+e._s(e.format(e.unlockCost))+" IP ")])],2)},oq=[],lq=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group l-replicanti-upgrade-button"},[i("PrimaryButton",{staticClass:"o-primary-btn--replicanti-upgrade",attrs:{enabled:e.canBeBought},on:{click:function(t){return e.upgrade.purchase()}}},[i("span",{domProps:{innerHTML:e._s(e.description)}}),e.isCapped?e._e():[i("br"),i("span",[e._v(e._s(e.costDescription))])]],2),e.isAutoUnlocked&&!e.isEC8Running?i("PrimaryToggleButton",{staticClass:"l--spoon-btn-group__little-spoon o-primary-btn--replicanti-upgrade-toggle",attrs:{label:"Auto:"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}}):e._e()],1)},cq=[];const uq={name:"ReplicantiUpgradeButton",components:{PrimaryButton:Vs,PrimaryToggleButton:Sh},props:{setup:{type:Object,required:!0}},data(){return{description:"",canBeBought:!1,costDescription:"",isCapped:!1,isAutoUnlocked:!1,isAutobuyerOn:!1,isEC8Running:!1}},computed:{upgrade(){return this.setup.upgrade}},watch:{isAutobuyerOn(e){Autobuyer.replicantiUpgrade(this.upgrade.id).isActive=e}},methods:{update(){const e=this.setup,t=e.upgrade;this.description=e.formatDescription(t.value),this.canBeBought=t.canBeBought,this.isCapped=t.isCapped,this.isCapped||(this.costDescription=e.formatCost(t.cost));const i=Autobuyer.replicantiUpgrade(t.id);this.isAutoUnlocked=i.isUnlocked,this.isAutobuyerOn=i.isActive,this.isEC8Running=EternityChallenge(8).isRunning}}};class dq{constructor(e,t,i){this.upgrade=e,this.formatDescription=t,this.formatCost=i}}const hq=uq;var mq=(0,X.Z)(hq,lq,cq,!1,null,"2708e750",null);const pq=mq.exports;var yq=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("p",[e._v(e._s(e.remainingTimeText)),i("br"),e._v(e._s(e.galaxyText))])},fq=[];const gq={name:"ReplicantiGainText",data(){return{remainingTimeText:"",galaxyText:""}},methods:{update(){const e=player.options.updateRate,t=1e3/e,i=Decimal.divide(getGameSpeedupForDisplay().times(e).times(Math.log(player.replicanti.chance+1)),getReplicantiInterval()),a=i.dividedBy(Math.LN10),n=Decimal.divide(getGameSpeedupForDisplay().times(e).times(Math.log(player.replicanti.chance+1)),getReplicantiInterval(!1)).dividedBy(Math.LN10),s=Replicanti.amount,r=Replicanti.isUncapped&&s.log10()>LOG10_MAX_VALUE;if(r){const a=Math.log10(ReplicantiGrowth.scaleFactor)/ReplicantiGrowth.scaleLog10,n=i.times(a).plus(1).pow(t/a),r=Pelle.isDoomed?100:1e3,o=Decimal.pow10(r*Math.floor(s.log10()/r+1)),l=Decimal.divide(e/1e3,i.times(a)),c=l.times(o.divide(s).pow(a).minus(1)),u=c.eq(0)?"an extremely long time":`${TimeSpan.fromSeconds(c.toNumber())}`;this.remainingTimeText=`You are gaining ${formatX(n,2,1)} Replicanti per second (${u} until ${format(o)})`}else this.remainingTimeText="";const o=LOG10_MAX_VALUE/(t*a.toNumber());let l=(LOG10_MAX_VALUE-s.log10())/(t*a.toNumber());l<0&&(l=0);const c=n.times(t/LOG10_MAX_VALUE),u=e=>50*Math.log((e+49.5)/49.5);let d,h,m;RealityUpgrade(6).isBought&&!Pelle.isDoomed?(d=c.divide(RealityUpgrade(6).effectValue),h=u(Replicanti.galaxies.max+Replicanti.galaxies.extra)-u(Replicanti.galaxies.extra),m=u(Replicanti.galaxies.bought+Replicanti.galaxies.extra)-u(Replicanti.galaxies.extra)):(d=c,h=Replicanti.galaxies.max,m=Replicanti.galaxies.bought);const p=c.reciprocal();if(""===this.remainingTimeText&&(0===l?this.remainingTimeText=`At Infinite Replicanti (normally takes\n ${TimeSpan.fromSeconds(p.toNumber())})`:s.lt(100)?this.remainingTimeText=`Approximately ${TimeSpan.fromSeconds(l)} remaining\n until Infinite Replicanti`:this.remainingTimeText=`${TimeSpan.fromSeconds(l)} remaining until Infinite Replicanti`),0!==Replicanti.galaxies.max||r||(this.remainingTimeText+=` (${TimeSpan.fromSeconds(o)} total)`),Replicanti.galaxies.max>0)if(Replicanti.galaxies.canBuyMore){this.galaxyText=`You are gaining a Replicanti Galaxy every\n ${TimeSpan.fromSeconds(p.toNumber())}`,c.gte(1)&&(this.galaxyText=`You are gaining ${quantify("Replicanti Galaxy",c,2,1)} per second`);const e=Decimal.divide(h-m,d).toNumber(),t=Replicanti.galaxies.gain;let i=t*p.toNumber();if(Achievement(126).isUnlocked&&!Pelle.isDoomed){const e=s.log10()/LOG10_MAX_VALUE-t;i+=e*p.toNumber()}const a=t>0?i:p.toNumber()-l;this.galaxyText+=` (all Replicanti Galaxies within\n ${TimeSpan.fromSeconds(Math.clampMin(e-a,0))})`}else this.galaxyText="You have reached the maximum amount of purchasable Replicanti Galaxies";else this.galaxyText=""}}},vq=gq;var bq=(0,X.Z)(vq,yq,fq,!1,null,"2d743e12",null);const Eq=bq.exports;var Tq=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group"},[i("PrimaryButton",{staticClass:"o-primary-btn--replicanti-galaxy",attrs:{enabled:e.isAvailable},on:{click:e.handleClick}},[e._v(" "+e._s(e.resetActionDisplay)+" a Replicanti Galaxy "),i("br"),e._v(" "+e._s(e.galaxyCountDisplay)+" ")]),e.isAutoUnlocked?i("PrimaryToggleButton",{staticClass:"l--spoon-btn-group__little-spoon o-primary-btn--replicanti-galaxy-toggle",attrs:{value:e.isAutoActive,on:e.autobuyerTextDisplay,off:e.autobuyerTextDisplay},on:{input:e.handleAutoToggle}}):e._e()],1)},wq=[];const kq={name:"ReplicantiGalaxyButton",components:{PrimaryButton:Vs,PrimaryToggleButton:Sh},data(){return{isAvailable:!1,isAutoUnlocked:!1,isAutoActive:!1,isAutoEnabled:!1,isDivideUnlocked:!1,boughtGalaxies:0,extraGalaxies:0}},computed:{resetActionDisplay(){return player.replicanti.galaxies+Replicanti.galaxies.extra>=1e5?"Gain":this.isDivideUnlocked&&!Pelle.isDoomed?`Divide Replicanti by ${format(Number.MAX_VALUE,1,1)} for`:"Reset Replicanti amount for"},galaxyCountDisplay(){const e=this.boughtGalaxies,t=this.extraGalaxies,i=t>0?`${formatInt(e)}+${formatInt(t)}`:formatInt(e);let a=e>=25e4?" (hardcapped) ":"",n=t>=35e4?" (hardcapped)":"";return e>=25e4?`Currently: ${formatInt(25e4)}`+a+`+ ${formatInt(t)}`+n:`Currently: ${i}`},autobuyer(){return Autobuyer.replicantiGalaxy},autobuyerTextDisplay(){const e=this.isAutoActive,t=!this.isAutoEnabled;return`Auto Galaxy ${e?"ON":"OFF"}${t?" (disabled)":""}`}},methods:{update(){const e=Replicanti.galaxies;this.isAvailable=e.canBuyMore,this.boughtGalaxies=Math.min(e.bought,25e4),this.extraGalaxies=Math.min(e.extra,35e4),this.isDivideUnlocked=Achievement(126).isUnlocked;const t=Autobuyer.replicantiGalaxy;this.isAutoUnlocked=t.isUnlocked,this.isAutoActive=t.isActive,this.isAutoEnabled=t.isEnabled},handleAutoToggle(e){Autobuyer.replicantiGalaxy.isActive=e,this.update()},handleClick(){replicantiGalaxyRequest()}}},Cq=kq;var Aq=(0,X.Z)(Cq,Tq,wq,!1,null,"13c37845",null);const _q=Aq.exports,Sq={name:"ReplicantiTab",components:{PrimaryButton:Vs,ReplicantiGainText:Eq,ReplicantiUpgradeButton:pq,ReplicantiGalaxyButton:_q},data(){return{isUnlocked:!1,isUnlockAffordable:!1,isInEC8:!1,ec8Purchases:0,amount:new Decimal,mult:new Decimal,hasTDMult:!1,multTD:new Decimal,hasDTMult:!1,multDT:new Decimal,hasIPMult:!1,multIP:new Decimal,hasRaisedCap:!1,replicantiCap:new Decimal,capMultText:"",distantRG:0,remoteRG:0,effarigInfinityBonusRG:0,isUncapped:!1,nextEffarigRGThreshold:0,canSeeGalaxyButton:!1,unlockCost:new Decimal,scrambledText:"",maxReplicanti:new Decimal,estimateToMax:new Decimal(0),hasFree:!1,has310:!1,idCapMult:0,tdCapMult:0}},computed:{isDoomed:()=>Pelle.isDoomed,replicantiChanceSetup(){return new dq(ReplicantiUpgrade.chance,(e=>`Replicate chance: ${formatPercents(e)}`),(e=>`+${formatPercents(.01)} Costs: ${format(e)} IP`))},replicantiIntervalSetup(){const e=ReplicantiUpgrade.interval;function t(t){const i=e.applyModifiers(t),a=i.toNumber();return Number.isFinite(a)&&a>1&&e.isCapped?TimeSpan.fromMilliseconds(a).toStringShort(!1):i.lt(.01)?`< ${format(.01,2,2)}ms`:i.gt(1e3)?`${format(i.div(1e3),2,2)}s`:`${format(i,2,2)}ms`}return new dq(e,(e=>`Interval: ${t(e)}`),(i=>`➜ ${t(e.nextValue)} Costs: ${format(i)} IP`))},maxGalaxySetup(){const e=ReplicantiUpgrade.galaxies;return new dq(e,(t=>{let i="Max Replicanti Galaxies: ",a=Math.min(e.extra,35e4),n=Math.min(25e4,t);if(a>0){const e=n+a;i+=`
${formatInt(n)} + ${formatInt(a)} = ${formatInt(e)}`}else i+=formatInt(n);return i}),(e=>`+${formatInt(1)} Costs: ${format(e)} IP`))},boostText(){const e=[];if(e.push(`a ${formatX(this.mult,2,2)}\n multiplier on all Infinity Dimensions`),this.hasTDMult&&e.push(`a ${formatX(this.multTD,2,2)}\n multiplier on all Time Dimensions from a Dilation Upgrade`),this.hasDTMult){const t=GlyphAlteration.isAdded("replication")?"and Replicanti speed ":"";e.push(`a ${formatX(this.multDT,2,2)}\n multiplier to Dilated Time ${t}from Glyphs`)}return this.hasIPMult&&e.push(`a ${formatX(this.multIP)}\n multiplier to Infinity Points from Glyph Alchemy`),this.has310&&(e.push(`a ${formatX(this.idCapMult,2,2)} multiplier to the Infinity Dimension purchase cap`),e.push(`a ${formatX(this.tdCapMult,2,2)} multiplier to the Time Dimension purchase cap`)),1===e.length?`${e[0]}.`:2===e.length?`${e[0]}
and ${e[1]}.`:`${e.slice(0,-1).join(",
")},
and ${e[e.length-1]}.`},hasMaxText:()=>PlayerProgress.realityUnlocked()&&!Pelle.isDoomed,toMaxTooltip(){return this.amount.lte(this.replicantiCap)?null:this.estimateToMax.lt(.01)?"Currently increasing":TimeSpan.fromSeconds(this.estimateToMax.toNumber()).toStringShort()}},methods:{update(){if(this.isUnlocked=Replicanti.areUnlocked,this.unlockCost=new Decimal(1e140).dividedByEffectOf(PelleRifts.vacuum.milestones[1]),this.isDoomed&&(this.scrambledText=this.vacuumText()),this.isUnlocked){if(this.isInEC8=EternityChallenge(8).isRunning,this.isInEC8&&(this.ec8Purchases=player.eterc8repl),this.amount.copyFrom(Replicanti.amount),this.mult.copyFrom(replicantiMult()),this.hasTDMult=DilationUpgrade.tdMultReplicanti.isBought,this.multTD.copyFrom(DilationUpgrade.tdMultReplicanti.effectValue),this.hasDTMult=0!==getAdjustedGlyphEffect("replicationdtgain")&&!Pelle.isDoomed,this.multDT=Math.clampMin(Decimal.log10(Replicanti.amount)*getAdjustedGlyphEffect("replicationdtgain"),1),this.hasIPMult=AlchemyResource.exponential.amount>0&&!this.isDoomed,this.multIP=Replicanti.amount.powEffectOf(AlchemyResource.exponential),this.isUncapped=PelleRifts.vacuum.milestones[1].canBeApplied,this.hasRaisedCap=EffarigUnlock.infinity.isUnlocked&&!this.isUncapped,this.replicantiCap.copyFrom(replicantiCap()),this.hasRaisedCap){const e=this.replicantiCap.div(Decimal.NUMBER_MAX_VALUE);this.capMultText=TimeStudy(31).canBeApplied?`Base: ${formatX(e.pow(1/TimeStudy(31).effectValue),2)}; after TS31: ${formatX(e,2)}`:formatX(e,2)}this.distantRG=ReplicantiUpgrade.galaxies.distantRGStart,this.remoteRG=ReplicantiUpgrade.galaxies.remoteRGStart,this.effarigInfinityBonusRG=Effarig.bonusRG,this.nextEffarigRGThreshold=Decimal.NUMBER_MAX_VALUE.pow(Effarig.bonusRG+2),this.canSeeGalaxyButton=Replicanti.galaxies.max>=1||PlayerProgress.eternityUnlocked(),this.maxReplicanti.copyFrom(player.records.thisReality.maxReplicanti),this.estimateToMax=this.calculateEstimate(),this.hasFree=ReplicantiUpgrade.galaxies.extra>0,this.has310=player.timestudy.studies.includes(310),this.idCapMult=Math.max(Math.log10(Currency.replicanti.value.exponent),1),this.tdCapMult=Math.max(Math.sqrt(Math.log10(Currency.replicanti.value.exponent+1)),1)}else this.isUnlockAffordable=Currency.infinityPoints.gte(this.unlockCost)},vacuumText(){return P.wordCycle(PelleRifts.vacuum.name)},calculateEstimate(){const e=player.options.updateRate,t=Decimal.divide(getGameSpeedupForDisplay().times(e).times(Math.log(player.replicanti.chance+1)),getReplicantiInterval()),i=Math.log10(ReplicantiGrowth.scaleFactor)/ReplicantiGrowth.scaleLog10,a=this.maxReplicanti,n=Decimal.divide(e/1e3,t.times(i));return n.times(a.divide(this.amount).pow(i).minus(1))}}},Dq=Sq;var Rq=(0,X.Z)(Dq,rq,oq,!1,null,"3fdc215a",null);const Mq=Rq.exports;var Iq=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-achievements-tab"},[e._m(0),i("div",{staticClass:"l-achievement-grid"},e._l(e.rows,(function(e,t){return i("secret-achievement-row",{key:t,attrs:{row:e}})})),1)])},xq=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-achievements-tab__header"},[i("span",[e._v(" Secret Achievements are optional and give no bonuses. ")])])}],Pq=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.classObject},e._l(e.row,(function(e,t){return i("SecretAchievement",{key:t,staticClass:"l-achievement-grid__cell",attrs:{achievement:e}})})),1)},Gq=[],Uq=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.classObject,style:e.styleObject,on:{click:e.onClick,mouseenter:e.onMouseEnter,mouseleave:e.onMouseLeave}},[i("HintText",{staticClass:"l-hint-text--achievement",attrs:{type:"achievements"}},[e._v(" S"+e._s(e.id)+" ")]),i("div",{staticClass:"o-achievement__tooltip"},[e.isMouseOver?[i("div",{staticClass:"o-achievement__tooltip__name"},[e._v(" "+e._s(e.config.name)+" (S"+e._s(e.id)+") ")]),e.isUnlocked?i("div",{staticClass:"o-achievement__tooltip__description"},[e._v(" "+e._s(e.config.description)+" ")]):e._e()]:e._e()],2),e.showUnlockState?i("div",{class:e.indicatorClassObject},[i("i",{class:e.indicatorIconClass})]):e._e()],1)},Bq=[];const Nq={name:"SecretAchievement",components:{HintText:LT},props:{achievement:{type:Object,required:!0}},data(){return{isUnlocked:!1,isMouseOver:!1,showUnlockState:!1}},computed:{id(){return this.achievement.id},config(){return this.achievement.config},styleObject(){if(this.isUnlocked)return{"background-position":`-${104*(this.achievement.column-1)}px -${104*(this.achievement.row-1)}px`}},classObject(){return{"o-achievement":!0,"o-achievement--hidden":!this.isUnlocked,"o-achievement--unlocked":this.isUnlocked,"o-achievement--secret":!0}},indicatorIconClass(){return this.isUnlocked?"fas fa-check":"fas fa-times"},indicatorClassObject(){return{"o-achievement__indicator":!0,"o-achievement__indicator--locked":!this.isUnlocked}}},beforeDestroy(){clearTimeout(this.mouseOverInterval)},methods:{update(){this.isUnlocked=this.achievement.isUnlocked,this.showUnlockState=player.options.showHintText.achievementUnlockStates},onMouseEnter(){clearTimeout(this.mouseOverInterval),this.isMouseOver=!0},onMouseLeave(){this.mouseOverInterval=setTimeout((()=>this.isMouseOver=!1),300)},onClick(){11===this.id&&SecretAchievement(11).unlock()}}},Oq=Nq;var Lq=(0,X.Z)(Oq,Uq,Bq,!1,null,null,null);const Fq=Lq.exports,$q={name:"SecretAchievementRow",components:{SecretAchievement:Fq},props:{row:{type:Array,required:!0}},data(){return{isCompleted:!1}},computed:{classObject(){return{"l-achievement-grid__row":!0,"c-achievement-grid__row--completed":this.isCompleted}}},methods:{update(){this.isCompleted=this.row.every((e=>e.isUnlocked))}}},Hq=$q;var qq=(0,X.Z)(Hq,Pq,Gq,!1,null,null,null);const Vq=qq.exports,Yq={name:"SecretAchievementTab",components:{SecretAchievementRow:Vq},computed:{rows:()=>SecretAchievements.allRows}},Wq=Yq;var jq=(0,X.Z)(Wq,Iq,xq,!1,null,null,null);const Xq=jq.exports;var zq=function(){var e=this,t=e.$createElement;e._self._c;return e._m(0)},Kq=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"tab shop"},[i("div",{staticClass:"c-shop-disclaimer"},[e._v(" There is no shop. Stop looking for it. It doesn't exist, and never has. Seriously though, there isnt a use for a shop, I'm sure you will manage without one...right? ")])])}],Zq=i(3242),Qq=i.n(Zq),Jq=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-shop-button-container"},[i("div",{staticClass:"o-shop-button-description"},[e._v(" "+e._s(e.purchase.description)+" "),i("br"),e.purchase.shouldDisplayMult?i("span",{staticClass:"o-shop-button-multiplier",class:{"o-shop-button-multiplier--disabled":e.iapDisabled}},[e._v(" Currently "+e._s(e.purchase.formatEffect(e.currentMult))+", next: "+e._s(e.purchase.formatEffect(e.nextMult))+" ")]):e._e()]),i("div",[e.isSingleCosmeticSet?i("div",[e.allSetsUnlocked?i("div",{staticClass:"o-shop-button-multiplier"},[e._v(" All Sets unlocked! ")]):i("div",[i("button",{staticClass:"o-shop-button-button",on:{click:e.openSelectionModal}},[e._v(" Choose Set ")]),e._v(" Chosen Set: "+e._s(e.chosenSet)+" ")])]):e._e(),e.isAllCosmeticSets?i("div",{staticClass:"o-shop-button-multiplier"},[e.allSetsUnlocked?i("div",[e._v(" All Sets unlocked! ")]):i("div",[e._v(" Will unlock "+e._s(e.quantify("set",e.lockedCount))+" ")])]):e._e()]),i("button",{class:e.purchaseButtonObject(),on:{click:e.performPurchase}},[e._v(" Cost: "+e._s(e.cost)+" "),i("img",{staticClass:"o-shop-button-button__img",attrs:{src:"images/std_coin.png"}})]),e.purchase.isUnlocked()?e._e():i("div",{staticClass:"o-shop-button-locked-text"},[e._v(" This affects a feature you have not unlocked yet ("+e._s(e.purchase.lockText)+") ")])])},eV=[];const tV={name:"ShopButton",props:{purchase:{type:Object,required:!0}},data(){return{currentMult:0,nextMult:0,canAfford:!1,iapDisabled:!1,cost:0,hasChosen:!1,chosenSet:"",lockedCount:0}},computed:{isSingleCosmeticSet(){return"singleCosmeticSet"===this.purchase.config.key},isAllCosmeticSets(){return"allCosmeticSets"===this.purchase.config.key},allSetsUnlocked(){return(this.isSingleCosmeticSet||this.isAllCosmeticSets)&&!this.lockedCount}},methods:{update(){var e,t;this.currentMult=this.purchase.currentMultForDisplay,this.nextMult=this.purchase.nextMultForDisplay,this.canAfford=this.purchase.canBeBought,this.iapDisabled=!ShopPurchaseData.isIAPEnabled,this.cost=Math.clampMin(this.purchase.cost,0),this.hasChosen=null!==GlyphAppearanceHandler.chosenFromModal,this.chosenSet=null!==(e=null===(t=GlyphAppearanceHandler.chosenFromModal)||void 0===t?void 0:t.name)&&void 0!==e?e:"Not Selected",this.lockedCount=GlyphAppearanceHandler.lockedSets.length},openSelectionModal(){Modal.cosmeticSetChoice.show()},performPurchase(){this.isSingleCosmeticSet&&!this.hasChosen||this.purchase.purchase()},purchaseButtonObject(){const e=this.isSingleCosmeticSet&&!this.hasChosen||this.allSetsUnlocked;return{"o-shop-button-button":!0,"o-shop-button-button--disabled":!this.canAfford||e}}}},iV=tV;var aV=(0,X.Z)(iV,Jq,eV,!1,null,"27835b02",null);const nV=aV.exports,sV={name:"ShopTab",components:{ShopButton:nV,Loading:Qq(),PrimaryButton:Vs}},rV=sV;var oV=(0,X.Z)(rV,zq,Kq,!1,null,"21aa9272",null);const lV=oV.exports;var cV=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("PrimaryToggleButton",{staticClass:"o-primary-btn--subtab-option",attrs:{label:"Describe all milestones:"},model:{value:e.displayAll,callback:function(t){e.displayAll=t},expression:"displayAll"}}),i("br"),i("b",[e._v(e._s(e.startTimeStr))]),i("br"),i("b",[e._v(e._s(e.spectateText))]),i("br"),i("div",{staticClass:"l-speedrun-milestone-tab"},e._l(e.milestones,(function(t){return i("SpeedrunMilestoneSingle",{key:t.id,attrs:{milestone:t,display:e.displayAll||t.id<=e.maxMilestone,time:e.milestoneTimes[t.id]}})})),1)],1)},uV=[],dV=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:e.classObject},[i("b",[e._v(e._s(e.displayName))]),i("i",[e._v(e._s(e.description))]),e._v(" "+e._s(e.timeDisplay)+" ")])},hV=[];const mV={name:"SpeedrunMilestoneSingle",props:{milestone:{type:Object,required:!0},display:{type:Boolean,required:!1,default:!1},time:{type:Number,required:!1,default:0}},computed:{displayName(){return this.display?this.milestone.name:"???"},description(){return this.display?"function"===typeof this.milestone.description?this.milestone.description():this.milestone.description:""},timeDisplay(){return this.time?`Completed in ${TimeSpan.fromMilliseconds(this.time).toStringShort(!0,!0)}`:"Not reached yet"},classObject(){return{"l-speedrun-milestone-entry":!0,"l-speedrun-milestone-entry--completed":this.time}}}},pV=mV;var yV=(0,X.Z)(pV,dV,hV,!1,null,null,null);const fV=yV.exports,gV={name:"SpeedrunMilestonesTab",components:{PrimaryToggleButton:Sh,SpeedrunMilestoneSingle:fV},data(){return{milestoneTimes:[],maxMilestone:1,startTimeStr:"",displayAll:!1,isSpectating:!1}},computed:{milestones:()=>GameDatabase.speedrunMilestones,spectateText(){return this.isSpectating?"Times here are unaffected by END so that you can see your final records":null}},watch:{displayAll(e){player.speedrun.displayAllMilestones=e}},methods:{update(){this.milestoneTimes=[...player.speedrun.records],this.maxMilestone=this.milestoneTimes.map((e=>Boolean(e))).lastIndexOf(!0)+1,this.startTimeStr=0===player.speedrun.startDate?"Speedrun not started yet.":`Speedrun started at ${Time.toDateTimeString(player.speedrun.startDate)}`,this.displayAll=player.speedrun.displayAllMilestones,this.isSpectating=GameEnd.endState>END_STATE_MARKERS.SPECTATE_GAME}}},vV=gV;var bV=(0,X.Z)(vV,cV,uV,!1,null,null,null);const EV=bV.exports;var TV=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-stats-tab"},[i("div",[i("PrimaryButton",{attrs:{onclick:"Modal.catchup.show(0)"}},[e._v(" View Content Summary ")]),i("div",{staticClass:"c-stats-tab-title c-stats-tab-general"},[e._v(" General ")]),i("div",{staticClass:"c-stats-tab-general"},[i("div",[e._v("You have made a total of "+e._s(e.format(e.totalAntimatter,2,1))+" antimatter.")]),i("div",[e._v("You have played for "+e._s(e.realTimePlayed)+". (real time)")]),e.reality.isUnlocked?i("div",[e._v(" Your existence has spanned "+e._s(e.reality.totalTimePlayed)+" of time. (game time) ")]):e._e(),i("div",[e._v(" Your save was created on "+e._s(e.startDate)+" ("+e._s(e.saveAge)+" ago) ")]),i("br"),i("div",[e._v(" You have seen "+e._s(e.quantifyInt("news message",e.totalNews))+" in total. ")]),i("div",[e._v(" You have seen "+e._s(e.quantifyInt("unique news message",e.uniqueNews))+". ")]),i("div",[e._v(" You have unlocked "+e._s(e.quantifyInt("Secret Achievement",e.secretAchievementCount))+". ")]),e.paperclips?i("div",[e._v(" You have "+e._s(e.quantifyInt("useless paperclip",e.paperclips))+". ")]):e._e(),e.fullGameCompletions?i("div",[i("br"),i("b",[e._v(" You have completed the entire game "+e._s(e.quantifyInt("time",e.fullGameCompletions))+". "),i("br"),e._v(" You have played for "+e._s(e.fullTimePlayed)+" across all playthroughs. ")])]):e._e()]),i("div",[i("br"),i("div",{staticClass:"c-matter-scale-container c-stats-tab-general"},[e._l(e.matterScale,(function(t,a){return i("div",{key:a},[e._v(" "+e._s(t)+" ")])})),e.matterScale.length<2?i("br"):e._e(),e.matterScale.length<3?i("br"):e._e()],2)]),i("br")],1),e.infinity.isUnlocked?i("div",{staticClass:"c-stats-tab-subheader c-stats-tab-general"},[i("div",{staticClass:"c-stats-tab-title c-stats-tab-infinity"},[e._v(" Infinity ")]),i("div",[e._v(" You have "+e._s(e.infinityCountString)),e.eternity.isUnlocked?i("span",[e._v(" this Eternity")]):e._e(),e._v(". ")]),e.infinity.banked.gt(0)?i("div",[e._v(" You have "+e._s(e.formatDecimalAmount(e.infinity.banked.floor()))+" "+e._s(e.pluralize("Banked Infinity",e.infinity.banked.floor()))+". ")]):e._e(),e.infinity.hasBest?i("div",[e._v(" Your fastest Infinity was "+e._s(e.infinity.best.toStringShort())+". ")]):i("div",[e._v(" You have no fastest Infinity"),e.eternity.isUnlocked?i("span",[e._v(" this Eternity")]):e._e(),e._v(". ")]),i("div",[e._v(" You have spent "+e._s(e.infinity.this.toStringShort())+" in this Infinity. "),e.reality.isUnlocked?i("span",[e._v(" ("+e._s(e.infinity.thisReal.toStringShort())+" real time) ")]):e._e()]),i("div",[e._v(" Your best Infinity Points per minute "),e.eternity.count.gt(0)?i("span",[e._v("this Eternity ")]):e._e(),e._v(" is "+e._s(e.format(e.infinity.bestRate,2,2))+". ")]),i("br")]):e._e(),e.eternity.isUnlocked?i("div",{staticClass:"c-stats-tab-subheader c-stats-tab-general"},[i("div",{staticClass:"c-stats-tab-title c-stats-tab-eternity"},[e._v(" Eternity ")]),i("div",[e._v(" You have "+e._s(e.eternityCountString)),e.reality.isUnlocked?i("span",[e._v(" this Reality")]):e._e(),e._v(". ")]),e.infinity.projectedBanked.gt(0)?i("div",[e._v(" You will gain "+e._s(e.formatDecimalAmount(e.infinity.projectedBanked.floor()))+" "+e._s(e.pluralize("Banked Infinity",e.infinity.projectedBanked.floor()))+" on Eternity ("+e._s(e.formatDecimalAmount(e.infinity.bankRate))+" per minute). ")]):e.infinity.banked.gt(0)?i("div",[e._v(" You will gain no Banked Infinities on Eternity. ")]):e._e(),e.eternity.hasBest?i("div",[e._v(" Your fastest Eternity was "+e._s(e.eternity.best.toStringShort())+". ")]):i("div",[e._v(" You have no fastest Eternity"),e.reality.isUnlocked?i("span",[e._v(" this Reality")]):e._e(),e._v(". ")]),i("div",[e._v(" You have spent "+e._s(e.eternity.this.toStringShort())+" in this Eternity. "),e.reality.isUnlocked?i("span",[e._v(" ("+e._s(e.eternity.thisReal.toStringShort())+" real time) ")]):e._e()]),i("div",[e._v(" Your best Eternity Points per minute "),e.reality.isUnlocked?i("span",[e._v("this Reality ")]):e._e(),e._v(" is "+e._s(e.format(e.eternity.bestRate,2,2))+". ")]),i("br")]):e._e(),e.reality.isUnlocked?i("div",{staticClass:"c-stats-tab-subheader c-stats-tab-general"},[i("div",{class:e.realityClassObject()},[e._v(" "+e._s(e.isDoomed?"Doomed Reality":"Reality")+" ")]),i("div",[e._v("You have "+e._s(e.reality.count>=1e12?e.format(e.reality.count,2):e.formatInt(e.reality.count))+" "+e._s(e.reality.count>1?" Realities":" Reality")+".")]),i("div",[e._v("Your fastest game-time Reality was "+e._s(e.reality.best.toStringShort())+".")]),i("div",[e._v("Your fastest real-time Reality was "+e._s(e.reality.bestReal.toStringShort())+".")]),i("div",{class:{"c-stats-tab-doomed":e.isDoomed}},[e._v(" You have spent "+e._s(e.reality.this.toStringShort())+" in this "+e._s(e.isDoomed?"Armageddon":"Reality")+". ("+e._s(e.reality.thisReal.toStringShort())+" real time) ")]),e.isDoomed?i("div",{staticClass:"c-stats-tab-doomed"},[e._v(" You have been Doomed for "+e._s(e.realTimeDoomed.toStringShort())+", real time. ")]):e._e(),i("div",[e._v(" Your best Reality Machines per minute is "+e._s(e.format(e.reality.bestRate,2,2))+". ")]),i("div",[e._v("Your best Glyph rarity is "+e._s(e.formatRarity(e.reality.bestRarity))+".")]),i("br")]):e._e(),e.mending.isUnlocked?i("div",{staticClass:"c-stats-tab-subheader c-stats-tab-general"},[i("div",{staticClass:"c-stats-tab-title c-stats-tab-mending"},[e._v(" Mending ")]),i("div",[e._v(" You have Mended the Mulitverse "+e._s(e.quantifyInt("time",e.mending.count))+". ")]),e.mending.hasBest?i("div",[e._v(" Your fastest Mend was "+e._s(e.mending.best.toStringShort())+" ("+e._s(e.mending.bestReal.toStringShort())+" real time). ")]):e._e(),i("div",[e._v(" You have spent "+e._s(e.mending.this.toStringShort())+" in this Mend. ("+e._s(e.mending.thisReal.toStringShort())+" real time) ")]),i("br")]):e._e()])},wV=[];const kV={proton:new Decimal("2.82e-45"),estimate(e){if(!e)return["There is no antimatter yet."];const t=this.distanceScale(e.log10());if(e.log10()>4.3240000000000004e40)return["How do you have so much antimatter","There will eventually be a matter scale here","For now, enjoy the knowledge that you are here","A place so far that you never were meant to be","So far, that the matter scale is lost"];if(e.gt(Decimal.pow10(12961296e15)))return["If every number in your antimatter count was a hydrogen atom,","you would have a line of atoms stretching from Earth to",`${t.name} ${format(e.log10()/(1e12*t.amount/53),2,2)} ${1!=t?"times":"time"}`];if(e.gt(Decimal.pow10(12961296e11)))return[`If you wrote ${formatInt(3)} numbers a second, from the start`,"of the universe, till today, you would have to existed for",`${formatX(e.log10()/12961296e11,3,3)} the current age of the universe.`];if(e.gt(b.E1_5E12))return["It would take "+formatPercents((e.log10()/12961296e11).toString(),4)," of the current age of the Universe to write out your antimatter count",`if you wrote ${formatInt(3)} numbers a second`];if(e.gt(new Decimal("1e7200000000")))return[`If you wrote ${formatInt(3)} numbers a second, it would take you`,formatFloat(e.log10()/2437102080,2)+" average American lifespans"," to write down your antimatter amount."];if(e.gt(b.E1E7))return["It would take "+formatPercents((e.log10()/7311306240).toString(),4)," of the average American lifespan to write out your antimatter count",`if you wrote ${formatInt(3)} numbers a second`];if(e.gt(b.E10000))return[`If you wrote ${formatInt(3)} numbers a second, it would take you`,TimeSpan.fromSeconds(e.log10()/3).toString(),"to write down your antimatter amount."];const i=new Decimal("4.22419e-105"),a=e.times(i);if(a.gt(this.proton)){const e=this.macroScale(a),t=format(a.dividedBy(e.amount),2,1);return[`If every antimatter were a planck volume, you would have\n enough to ${e.verb} ${t} ${e.name}`]}const n=this.microScale(e);return[`If every antimatter were ${format(this.proton.div(n.amount).div(e),2,1)} ${n.name},\n you would have enough to make a proton.`]},microScale(e){const t=this.microObjects;for(let i=0;ia.amount)return a;let n=0,s=t.length;while(n!==s){const e=Math.floor((n+s)/2);t[e].amounte.isUnlocked)).length,this.timeSinceCreation=Date.now()-player.records.gameCreatedTime;const t=PlayerProgress.current,i=t.isInfinityUnlocked,a=this.infinity,n=e.bestInfinity;a.isUnlocked=i,i&&(a.count.copyFrom(Currency.infinities),a.banked.copyFrom(Currency.infinitiesBanked),a.projectedBanked=new Decimal(0).plusEffectsOf(Achievement(131),TimeStudy(191)),a.bankRate=a.projectedBanked.div(Decimal.clampMin(33,e.thisEternity.time)).times(6e4),this.bypass.copyFrom(n.time),a.hasBest=this.bypass.lt(Number.MAX_VALUE),this.infinity.best=new TimeSpan(this.bypass),this.bypass.copyFrom(e.thisInfinity.time),this.infinity.this=new TimeSpan(this.bypass),a.bestRate.copyFrom(n.bestIPminEternity));const s=t.isEternityUnlocked,r=this.eternity,o=e.bestEternity;r.isUnlocked=s,s&&(r.count.copyFrom(Currency.eternities),this.bypass.copyFrom(o.time),r.hasBest=this.bypass.lt(Number.MAX_VALUE),this.eternity.best=new TimeSpan(this.bypass),this.bypass.copyFrom(e.thisEternity.time),this.eternity.this=new TimeSpan(this.bypass),r.bestRate.copyFrom(o.bestEPminReality));const l=t.isRealityUnlocked,c=this.reality,u=e.bestReality;c.isUnlocked=l,l&&(c.count=Math.floor(Currency.realities.value),this.bypass.copyFrom(u.time),this.reality.best=new TimeSpan(this.bypass),this.reality.bestReal.copyFrom(new TimeSpan(u.realTime)),this.bypass.copyFrom(e.thisReality.time),this.reality.this=new TimeSpan(this.bypass),this.bypass.copyFrom(e.totalTimePlayed),c.totalTimePlayed=new TimeSpan(this.bypass),this.infinity.thisReal=new TimeSpan(e.thisInfinity.realTime),a.bankRate=a.projectedBanked.div(Math.clampMin(33,e.thisEternity.realTime)).times(6e4),this.eternity.thisReal=new TimeSpan(e.thisEternity.realTime),c.thisReal=new TimeSpan(e.thisReality.realTime),c.bestRate.copyFrom(u.RMmin),c.bestRarity=Math.max(strengthToRarity(u.glyphStrength),0));const d=t.isMendingUnlocked,h=this.mending;h.isUnlocked=d;e.bestMend;d&&(h.hasBest=!0,h.count=Decimal.floor(Currency.mends.value),this.bypass.copyFrom(player.records.bestMend.time),this.mending.best=new TimeSpan(this.bypass),this.mending.bestReal=new TimeSpan(e.bestMend.realTime),this.bypass.copyFrom(e.thisMend.time),this.mending.this=new TimeSpan(this.bypass),this.mending.thisReal=new TimeSpan(e.thisMend.realTime)),this.updateMatterScale(),this.isDoomed=Pelle.isDoomed,this.realTimeDoomed=new TimeSpan(player.records.realTimeDoomed),this.paperclips=player.news.specialTickerData.paperclips},formatDecimalAmount(e){return e.gt(1e9)?format(e,3):formatInt(Math.floor(e.toNumber()))},updateMatterScale(){Date.now()-this.lastMatterTime>1e3&&(this.matterScale=kV.estimate(Currency.antimatter.value),this.lastMatterTime=Date.now())},realityClassObject(){return{"c-stats-tab-title":!0,"c-stats-tab-reality":!this.isDoomed,"c-stats-tab-doomed":this.isDoomed}}}},AV=CV;var _V=(0,X.Z)(AV,TV,wV,!1,null,"5e391bac",null);const SV=_V.exports;var DV=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-teresa-celestial-tab"},[i("CelestialQuoteHistory",{attrs:{celestial:"teresa"}}),i("div",[e._v(" You have "+e._s(e.quantify("Reality Machine",e.rm,2,2))+". ")]),i("div",{staticClass:"l-mechanics-container"},[e.hasReality?i("div",{staticClass:"l-teresa-mechanic-container"},[i("div",{staticClass:"c-teresa-unlock c-teresa-run-button"},[i("span",{class:{"o-pelle-disabled":e.isDoomed}},[e._v(" Start Teresa's Reality. ")]),i("div",{class:e.runButtonClassObject,on:{click:function(t){return e.startRun()}}},[e._v(" Ϟ ")]),e._v(" "+e._s(e.runDescription)+" "),i("br"),i("br"),i("div",[e._v(" This Reality can be repeated for a stronger reward based on the antimatter gained within it. "),i("br"),i("br"),e.showRunReward?i("span",[e._v(" Your record antimatter in Teresa's Reality is "+e._s(e.format(e.bestAM,2))+", achieved with "+e._s(e.lastMachinesString)+". "),i("br"),i("br"),e._v(" Glyph Set used: "),i("GlyphSetPreview",{attrs:{text:"Teresa's Best Glyph Set","text-hidden":!0,"force-name-color":!1,glyphs:e.bestAMSet}})],1):i("span",[e._v(" You have not completed Teresa's Reality yet. ")])])]),e.showRunReward?i("div",{staticClass:"c-teresa-unlock"},[e._v(" Teresa Reality reward: Glyph Sacrifice power "+e._s(e.formatX(e.runReward,2,2))+" ")]):e._e(),e.hasEPGen?i("div",{staticClass:"c-teresa-unlock"},[i("span",{class:{"o-pelle-disabled":e.isDoomed}},[e._v(" Every second, you gain "+e._s(e.formatPercents(.01))+" of your peaked Eternity Points per minute this Reality. ")])]):e._e()]):e._e(),i("div",{staticClass:"l-rm-container l-teresa-mechanic-container"},[i("button",{class:e.pourButtonClassObject,on:{mousedown:function(t){e.pour=!0},touchstart:function(t){e.pour=!0},mouseup:function(t){e.pour=!1},touchend:function(t){e.pour=!1},mouseleave:function(t){e.pour=!1}}},[e._v(" "+e._s(e.pourText)+" ")]),i("div",{staticClass:"c-rm-store"},[i("div",{staticClass:"c-rm-store-inner c-rm-store-inner--light",style:{height:e.possibleFillPercentage}}),i("div",{staticClass:"c-rm-store-inner",style:{height:e.percentage}},[i("div",{staticClass:"c-rm-store-label"},[e._v(" "+e._s(e.formatX(e.rmMult,2,2))+" RM gain "),i("br"),e._v(" "+e._s(e.format(e.pouredAmount,2,2))+"/"+e._s(e.format(e.pouredAmountCap,2,2))+" ")])]),e._l(e.unlockInfos,(function(t){return i("CustomizeableTooltip",{key:t.id,attrs:{"content-class":"c-teresa-unlock-description--hover-area",bottom:e.unlockDescriptionHeight(t),right:"0",mode:"right",show:!0,"tooltip-arrow-style":e.unlockInfoTooltipArrowStyle,"tooltip-class":e.unlockInfoTooltipClass(t)},scopedSlots:e._u([{key:"mainContent",fn:function(){return[i("div",{staticClass:"c-teresa-milestone-line",class:{"c-teresa-milestone-line--unlocked":e.hasUnlock(t)}})]},proxy:!0},{key:"tooltipContent",fn:function(){return[i("b",{class:{"o-pelle-disabled":t.pelleDisabled}},[e._v(" "+e._s(e.format(t.price,2,2))+": "+e._s(t.description)+" ")])]},proxy:!0}],null,!0)})}))],2)]),e.pouredAmountPelle.isDoomed,classObject(){return{"o-teresa-shop-button":!0,"o-teresa-shop-button--available":this.isAvailableForPurchase&&!this.isCapped,"o-teresa-shop-button--capped":this.isCapped,"o-teresa-shop-button--pelle-disabled":this.isDoomed&&(this.upgrade===PerkShopUpgrade.musicGlyph||this.upgrade===PerkShopUpgrade.fillMusicGlyph)}}},methods:{update(){this.isAvailableForPurchase=this.upgrade.isAvailableForPurchase,this.isCapped=this.upgrade.isCapped}}},PV=xV;var GV=(0,X.Z)(PV,MV,IV,!1,null,"1ce43eb4",null);const UV=GV.exports,BV={name:"TeresaTab",components:{GlyphSetPreview:Fx,PerkShopUpgradeButton:UV,CelestialQuoteHistory:AM,CustomizeableTooltip:jF},data(){return{pour:!1,time:(new Date).getTime(),pouredAmount:0,isPouredAmountCapped:!1,rm:new Decimal(0),percentage:"",possibleFillPercentage:"",rmMult:0,bestAM:new Decimal(0),bestAMSet:[],lastMachines:new Decimal(0),runReward:0,perkPoints:0,hasReality:!1,hasEPGen:!1,hasPerkShop:!1,raisedPerkShop:!1,isRunning:!1,canUnlockNextPour:!1}},computed:{unlockInfos:()=>TeresaUnlocks.all,pouredAmountCap:()=>Teresa.pouredAmountCap,showRunReward(){return this.bestAM.gt(1)},upgrades(){const e=[PerkShopUpgrade.glyphLevel,PerkShopUpgrade.rmMult,PerkShopUpgrade.bulkDilation,PerkShopUpgrade.autoSpeed,PerkShopUpgrade.musicGlyph];return this.raisedPerkShop&&e.push(PerkShopUpgrade.fillMusicGlyph),e},runButtonClassObject(){return{"c-teresa-run-button__icon":!0,"c-teresa-run-button__icon--running":this.isRunning,"c-celestial-run-button--clickable":!this.isDoomed,"o-pelle-disabled-pointer":this.isDoomed}},pourButtonClassObject(){return{"o-teresa-shop-button":!0,"c-teresa-pour":!0,"o-teresa-shop-button--available":!this.isPouredAmountCapped,"o-teresa-shop-button--capped":this.isPouredAmountCapped,"c-teresa-pour--unlock-available":this.canUnlockNextPour,"c-disabled-pour":this.isPouredAmountCapped}},pourText(){return this.isPouredAmountCapped?"Filled":"Pour RM"},runDescription(){return GameDatabase.celestials.descriptions[0].effects()},lastMachinesString(){return this.lastMachines.lt(b.E10000)?`${quantify("Reality Machine",this.lastMachines,2)}`:`${quantify("Imaginary Machine",this.lastMachines.dividedBy(b.E10000),2)}`},unlockInfoTooltipArrowStyle(){return{borderRight:"0.5rem solid var(--color-teresa--base)"}},isDoomed:()=>Pelle.isDoomed},methods:{update(){const e=(new Date).getTime();if(this.pour){const t=(e-this.time)/1e3;Teresa.pourRM(t)}else Teresa.timePoured=0;this.time=e,this.pouredAmount=player.celestials.teresa.pouredAmount,this.isPouredAmountCapped=this.pouredAmount===this.pouredAmountCap,this.percentage=`${(100*Teresa.fill).toFixed(2)}%`,this.possibleFillPercentage=`${(100*Teresa.possibleFill).toFixed(2)}%`,this.rmMult=Teresa.rmMultiplier,this.hasReality=TeresaUnlocks.run.isUnlocked,this.hasEPGen=TeresaUnlocks.epGen.isUnlocked,this.hasPerkShop=TeresaUnlocks.shop.isUnlocked,this.raisedPerkShop=Ra.unlocks.perkShopIncrease.canBeApplied,this.bestAM.copyFrom(player.celestials.teresa.bestRunAM),this.bestAMSet=Glyphs.copyForRecords(player.celestials.teresa.bestAMSet),this.lastMachines.copyFrom(player.celestials.teresa.lastRepeatedMachines),this.runReward=Teresa.runRewardMultiplier,this.perkPoints=Currency.perkPoints.value,this.rm.copyFrom(Currency.realityMachines),this.isRunning=Teresa.isRunning,this.canUnlockNextPour=TeresaUnlocks.all.filter((e=>this.rm.plus(this.pouredAmount).gte(e.price)&&!e.isUnlocked)).length>0},startRun(){this.isDoomed||Modal.celestials.show({name:"Teresa's",number:0})},unlockDescriptionHeight(e){const t=TeresaUnlocks[Teresa.lastUnlock].price,i=Math.log1p(e.price)/Math.log1p(t);return`calc(${(100*i).toFixed(2)}% - 0.1rem)`},hasUnlock(e){return e.isUnlocked},unlockInfoTooltipClass(e){return{"c-teresa-unlock-description":!0,"c-teresa-unlock-description--unlocked":this.hasUnlock(e)}}}},NV=BV;var OV=(0,X.Z)(NV,DV,RV,!1,null,"462ad4de",null);const LV=OV.exports;var FV=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-dilation-tab"},[i("span",[e._v(" You have "),i("span",{staticClass:"c-dilation-tab__tachyons"},[e._v(e._s(e.format(e.tachyons,2,1)))]),e._v(" "+e._s(e.pluralize("Tachyon Particle",e.tachyons))+". ")]),i("div",{on:{mouseover:function(t){e.isHovering=!0},mouseleave:function(t){e.isHovering=!1}}},[i("DilationButton")],1),i("span",[e._v(" You have "),i("span",{staticClass:"c-dilation-tab__dilated-time"},[e._v(e._s(e.format(e.dilatedTime,2,1)))]),e._v(" Dilated Time. "),i("span",{staticClass:"c-dilation-tab__dilated-time-income"},[e._v(e._s(e.dilatedTimeGainText)+"/s")])]),i("span",[e._v(" Next "),e.tachyonGalaxyGain>1?i("span",[e._v(e._s(e.formatInt(e.tachyonGalaxyGain)))]):e._e(),e._v(" "+e._s(e.pluralize("Tachyon Galaxy",e.tachyonGalaxyGain))+" at "),i("span",{staticClass:"c-dilation-tab__galaxy-threshold",attrs:{"ach-tooltip":e.galaxyTimeEstimate}},[e._v(e._s(e.format(e.galaxyThreshold,2,1)))]),e._v(" Dilated Time, gained total of "),i("span",{staticClass:"c-dilation-tab__galaxies",attrs:{"ach-tooltip":e.baseGalaxyText}},[e._v(e._s(e.formatInt(e.totalGalaxies)))]),e._v(" "+e._s(e.pluralize("Tachyon Galaxy",e.totalGalaxies))+" ")]),e.hasMaxText?i("span",[e._v(" Your maximum Dilated Time reached this Reality is "),i("span",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.toMaxTooltip,expression:"toMaxTooltip"}],staticClass:"max-accent"},[e._v(e._s(e.format(e.maxDT,2,1)))]),e._v(". ")]):e._e(),i("span",[e._v(" Rebuyable costs jump and scale much faster past 5,000 purchases. ")]),e.isPastSCone?i("span",[e._v(" Every "+e._s(e.formatInt(e.scOneStart))+" Tachyon Galaxies, TG threshold is "+e._s(e.formatX(e.scOneMult,3,3))+". ")]):e._e(),i("div",{staticClass:"l-dilation-upgrades-grid"},[e._l(e.allRebuyables,(function(t,a){return i("div",{key:"rebuyable"+a,staticClass:"l-dilation-upgrades-grid__row"},e._l(t,(function(t){return i("DilationUpgradeButton",{key:t.id,staticClass:"l-dilation-upgrades-grid__cell",attrs:{upgrade:t,"is-rebuyable":!0,"show-tooltip":e.isHovering}})})),1)})),e._l(e.allSingleUpgrades,(function(t,a){return i("div",{key:"single"+a,staticClass:"l-dilation-upgrades-grid__row"},e._l(t,(function(t){return i("DilationUpgradeButton",{key:t.id,staticClass:"l-dilation-upgrades-grid__cell",attrs:{upgrade:t,"is-rebuyable":!1,"show-tooltip":e.isHovering}})})),1)}))],2)])},$V=[],HV=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{staticClass:"o-dilation-btn",class:e.isUnlocked?"o-dilation-btn--unlocked":"o-dilation-btn--locked",on:{click:function(t){return e.dilate()}}},[e.isUnlocked?e.isRunning?e.canEternity&&e.hasGain?i("span",[e._v(" "+e._s(e.disableText)+" "),i("br"),e._v(" Gain "+e._s(e.quantify("Tachyon Particle",e.tachyonGain,2,1))+". ")]):e.hasGain?i("span",[e._v(" "+e._s(e.disableText)+" "),i("br"),e._v(" Reach "+e._s(e.quantify("Infinity Point",e.eternityGoal,1,0))+" to Eternity and gain Tachyon Particles. ")]):i("span",[e._v(" "+e._s(e.disableText)+" "),i("br"),e._v(" Reach "+e._s(e.format(e.requiredForGain,2,1))+" antimatter to gain more Tachyon Particles. ")]):i("span",[e._v(" Dilate time. "),e.showRequirement?i("div",[e._v(" Requires "+e._s(e.format(e.remnantRequirement,2))+" Remnants ")]):e._e()]):i("span",[e._v("Purchase the Dilation Study to unlock.")])])},qV=[];const VV={name:"DilationButton",data(){return{isUnlocked:!1,isRunning:!1,hasGain:!1,requiredForGain:new Decimal,canEternity:!1,eternityGoal:new Decimal,tachyonGain:new Decimal,remnantRequirement:0,showRequirement:!1,creditsClosed:!1}},computed:{disableText(){return Pelle.isDoomed?"Dilation is permanent.":"Disable Dilation."}},methods:{update(){this.isUnlocked=PlayerProgress.dilationUnlocked(),this.isRunning=player.dilation.active,this.remnantRequirement=Pelle.remnantRequirementForDilation,this.showRequirement=Pelle.isDoomed&&!Pelle.canDilateInPelle,this.isRunning&&(this.canEternity=Player.canEternity,this.hasGain=getTachyonGain(!1).gt(0),this.canEternity&&this.hasGain?this.tachyonGain.copyFrom(getTachyonGain(!0)):this.hasGain?this.eternityGoal.copyFrom(Player.eternityGoal):this.requiredForGain.copyFrom(getTachyonReq()),this.creditsClosed=GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||PlayerProgress.mendingUnlocked()&&player.isGameEnd)},dilate(){this.creditsClosed||startDilatedEternityRequest()}}},YV=VV;var WV=(0,X.Z)(YV,HV,qV,!1,null,"4d5e53d0",null);const jV=WV.exports;var XV=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group"},[i("button",{class:e.classObject,attrs:{"ach-tooltip":e.timeEstimate},on:{click:function(t){return e.upgrade.purchase()},mouseover:function(t){e.isHovering=!0},mouseleave:function(t){e.isHovering=!1}}},[e.timeEstimate?i("CustomizeableTooltip",{attrs:{show:e.showTooltip&&!e.isHovering&&!e.hideEstimate,left:"50%",top:"0"},scopedSlots:e._u([{key:"tooltipContent",fn:function(){return[e._v(" "+e._s(e.timeEstimate)+" ")]},proxy:!0}],null,!1,1945308655)}):e._e(),i("span",[i("DescriptionDisplay",{attrs:{config:e.upgrade.config,length:70,name:"o-dilation-upgrade__description"}}),i("EffectDisplay",{key:e.boughtAmount,attrs:{br:"",config:e.upgrade.config}})],1),e.isBought||e.isCapped?e._e():i("CostDisplay",{attrs:{br:"",config:e.upgrade.config,name:"Dilated Time"}})],1),e.isRebuyable&&e.isAutoUnlocked?i("PrimaryToggleButton",{staticClass:"l--spoon-btn-group__little-spoon o-primary-btn--dilation-upgrade-toggle",attrs:{label:"Auto:"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}}):e._e()],1)},zV=[];const KV={name:"DilationUpgradeButton",components:{PrimaryToggleButton:Sh,DescriptionDisplay:ND,EffectDisplay:tw,CostDisplay:ID,CustomizeableTooltip:jF},props:{upgrade:{type:Object,required:!0},isRebuyable:{type:Boolean,required:!1,default:!1},showTooltip:{type:Boolean,required:!0}},data(){return{isBought:!1,isCapped:!1,isAffordable:!1,isAutoUnlocked:!1,isAutobuyerOn:!1,boughtAmount:0,currentDT:new Decimal(0),currentDTGain:new Decimal(0),timeEstimate:"",rebuyableBoost:!1,isHovering:!1,hideEstimate:!1}},computed:{classObject(){return!this.isUseless||3===this.upgrade.id&&UZ.unlocks.unlockPelleTPMult.isUnlocked?{"o-dilation-upgrade":!0,"o-dilation-upgrade--rebuyable":this.isRebuyable,"o-dilation-upgrade--available":!this.isBought&&!this.isCapped&&this.isAffordable,"o-dilation-upgrade--unavailable":!this.isBought&&!this.isCapped&&!this.isAffordable,"o-dilation-upgrade--bought":this.isBought,"o-dilation-upgrade--capped":this.isCapped}:{"o-dilation-upgrade o-pelle-disabled-pointer":!0,"o-dilation-upgrade--unavailable":3===this.upgrade.id,"o-pelle-disabled o-dilation-upgrade--useless":7===this.upgrade.id}},isUseless(){const e=3===this.upgrade.id&&!this.rebuyableBoost&&!UZ.unlocks.unlockPelleTPMult.isUnlocked,t=7===this.upgrade.id;return Pelle.isDoomed&&(e||t)}},watch:{isAutobuyerOn(e){this.upgrade.id<4?Autobuyer.dilationUpgrade(this.upgrade.id).isActive=e:Autobuyer.dilationUpgrade(this.upgrade.id-7).isActive=e}},methods:{update(){const e=this.upgrade;if(this.currentDT.copyFrom(Currency.dilatedTime.value),this.currentDTGain.copyFrom(getDilationGainPerSecond()),this.hideEstimate=this.isAffordable||this.isCapped||this.upgrade.isBought||this.isUseless,this.timeEstimate=this.hideEstimate?null:getDilationTimeEstimate(this.upgrade.cost),this.isRebuyable){this.isAffordable=e.isAffordable,this.isCapped=e.isCapped;let t=Autobuyer.dilationUpgrade(e.id);return e.id>3&&(t=Autobuyer.dilationUpgrade(e.id-7)),this.boughtAmount=e.boughtAmount,this.rebuyableBoost=PelleRifts.paradox.milestones[2].canBeApplied,t?(this.isAutoUnlocked=t.isUnlocked,void(this.isAutobuyerOn=t.isActive)):void console.log("return")}this.isBought=e.isBought,this.isBought||(this.isAffordable=e.isAffordable)}}},ZV=KV;var QV=(0,X.Z)(ZV,XV,zV,!1,null,"546a6b9c",null);const JV=QV.exports,eY={name:"TimeDilationTab",components:{DilationButton:jV,DilationUpgradeButton:JV},data(){return{tachyons:new Decimal,dilatedTime:new Decimal,dilatedTimeIncome:new Decimal,galaxyThreshold:new Decimal,baseGalaxies:0,totalGalaxies:0,tachyonGalaxyGain:1,hasPelleDilationUpgrades:!1,galaxyTimeEstimate:"",maxDT:new Decimal,toMaxTooltip:"",isHovering:!1,isPastSCone:!1,scOneStart:5e4,scOnePower:5,isPastSCtwo:!1,scTwoStart:15e4,scTwoPower:1.5}},computed:{rebuyables(){return[DilationUpgrade.dtGain,DilationUpgrade.galaxyThreshold,DilationUpgrade.tachyonGain]},upgrades(){return[[DilationUpgrade.doubleGalaxies,DilationUpgrade.tdMultReplicanti,DilationUpgrade.ndMultDT],[DilationUpgrade.ipMultDT,DilationUpgrade.timeStudySplit,DilationUpgrade.dilationPenalty]]},dilatedTimeGainText(){const e=this.dilatedTimeIncome.gte(0)?"+":"";return`${e}${format(this.dilatedTimeIncome,2,1)}`},pelleRebuyables(){return[DilationUpgrade.dtGainPelle,DilationUpgrade.galaxyMultiplier,DilationUpgrade.tickspeedPower]},pelleUpgrades(){return[DilationUpgrade.galaxyThresholdPelle,DilationUpgrade.flatDilationMult]},ttGenerator(){return DilationUpgrade.ttGenerator},baseGalaxyText(){return`${formatInt(this.baseGalaxies)} Base`},hasMaxText:()=>ue.realityUnlocked()&&!fQ.isDoomed,allRebuyables(){const e=[];return e.push(this.rebuyables),this.hasPelleDilationUpgrades&&e.push(this.pelleRebuyables),e},allSingleUpgrades(){const e=[];return e.push(...this.upgrades),this.hasPelleDilationUpgrades&&e.push(this.pelleUpgrades),e.push([this.ttGenerator]),e}},methods:{update(){this.tachyons.copyFrom(Currency.tachyonParticles),this.dilatedTime.copyFrom(Currency.dilatedTime);const e=getDilationGainPerSecond().times(getGameSpeedupForDisplay());if(this.galaxyTimeEstimate=getDilationTimeEstimate(this.galaxyThreshold),PelleRifts.paradox.isActive){const t=player.options.updateRate/1e3,i=1-(1-fQ.riftDrainPercent)**t,a=this.dilatedTime.add(e.times(t)).times(i/t);this.dilatedTimeIncome=e.minus(a)}else this.dilatedTimeIncome=e;this.galaxyThreshold.copyFrom(player.dilation.nextThreshold),this.baseGalaxies=player.dilation.baseTachyonGalaxies,this.totalGalaxies=player.dilation.totalTachyonGalaxies,this.hasPelleDilationUpgrades=PelleRifts.paradox.milestones[0].canBeApplied||hK.two.isReached,this.baseGalaxies<500&&DilationUpgrade.doubleGalaxies.isBought?this.tachyonGalaxyGain=DilationUpgrade.doubleGalaxies.effectValue:this.tachyonGalaxyGain=1,this.tachyonGalaxyGain*=DilationUpgrade.galaxyMultiplier.effectValue,this.maxDT.copyFrom(player.records.thisReality.maxDT);const t=getDilationTimeEstimate(this.maxDT);this.dilatedTimeIncome.lte(0)?this.toMaxTooltip="No DT gain":this.toMaxTooltip=t.startsWith("<")?"Currently Increasing":t,this.isPastSCone=player.dilation.totalTachyonGalaxies>=this.scOneStart&&!fQ.isDoomed,this.scOneStart=5e4,this.scOneMult=1.5-.005*player.mending.rebuyables[11],this.isPastSCtwo=player.dilation.totalTachyonGalaxies>=this.scTwoStart&&!fQ.isDoomed,this.scTwoStart=15e4,this.scTwoPower=1.5}}},tY=eY;var iY=(0,X.Z)(tY,FV,$V,!1,null,"d9200254",null);const aY=iY.exports;var nY=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(e.activeComponent,{tag:"component"})},sY=[],rY=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-time-dim-tab l-centered-vertical-tab"},[i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.maxAll}},[e._v(" Max all ")]),e.areAutobuyersUnlocked?i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.toggleAllAutobuyers}},[e._v(" Toggle all autobuyers ")]):e._e()],1),e.shortenTSU?i("div",[i("p",[e._v(" You have gained "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.format(e.totalUpgrades,2,2)))]),e._v(" Tickspeed upgrades from "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.format(e.timeShards,2,1)))]),e._v(" Time Shards. ")]),i("p",[e._v(" Next Tickspeed upgrade at "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.format(e.upgradeThreshold,2,1)))]),e._v(", increasing by "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.formatX(e.multPerTickspeed,2,2)))]),e._v(" per Tickspeed upgrade gained. ")])]):i("div",[i("p",[e._v(" You have gained "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.formatInt(e.totalUpgrades)))]),e._v(" Tickspeed upgrades from "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.format(e.timeShards,2,1)))]),e._v(" Time Shards. ")]),i("p",[e._v(" Next Tickspeed upgrade at "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.format(e.upgradeThreshold,2,1)))]),e._v(", increasing by "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.formatX(e.multPerTickspeed,2,2)))]),e._v(" per Tickspeed upgrade gained. ")])]),i("div",[e._v(" The amount each additional upgrade requires will start increasing above "+e._s(e.formatInt(e.tickspeedSoftcap))+" Tickspeed upgrades. ")]),i("div",[e._v(" You are getting "+e._s(e.format(e.shardsPerSecond,2,0))+" "+e._s(e.incomeType)+" per second. ")]),i("div",{staticClass:"l-dimensions-container"},e._l(8,(function(t){return i("TimeDimensionRow",{key:t,attrs:{tier:t,"are-autobuyers-unlocked":e.areAutobuyersUnlocked}})})),1),i("div",[e._v(" Time Dimension costs jump at "+e._s(e.format(e.costIncreases[0],2,2))+" and "+e._s(e.format(e.costIncreases[1]))+" Eternity Points, "),i("br"),e._v(" and costs increase much faster after "+e._s(e.format(e.costIncreases[2]))+" Eternity Points. "),i("br"),e.showLockedDimCostNote?i("div",[e._v(" Hold shift to see the Eternity Point cost for locked Time Dimensions. ")]):e._e(),e._v(" Any 8th Time Dimensions purchased above "+e._s(e.format(1e8))+" will not further increase the multiplier. "),i("br"),e._v(" Time Dimensions can only be purchased up to "+e._s(e.format(5e14))+" times. ")])])},oY=[],lY=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.showRow,expression:"showRow"}],staticClass:"c-dimension-row l-dimension-single-row",class:{"c-dim-row--not-reached":!e.isUnlocked&&!e.requirementReached}},[i("GenericDimensionRowText",{attrs:{tier:e.tier,name:e.name,"multiplier-text":e.formatX(e.multiplier,2,1),"amount-text":e.format(e.amount,2),rate:e.rateOfChange}}),i("div",{staticClass:"l-dim-row-multi-button-container"},[i("PrimaryButton",{staticClass:"o-primary-btn--buy-td o-primary-btn--buy-dim c-dim-tooltip-container",class:e.buttonClass(),attrs:{enabled:e.isAvailableForPurchase&&!e.isCapped&&!e.isContinuumActive},on:{click:e.buyTimeDimension}},[e._v(" "+e._s(e.buttonContents)+" "),i("div",{staticClass:"c-dim-purchase-count-tooltip"},[i("span",{domProps:{innerHTML:e._s(e.tooltipContents)}})])]),e.areAutobuyersUnlocked&&!e.isContinuumActive?i("PrimaryToggleButton",{staticClass:"o-primary-btn--buy-td-auto",attrs:{label:"Auto:"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}}):e.isContinuumActive?e._e():i("PrimaryButton",{staticClass:"o-primary-btn--buy-td-auto",attrs:{enabled:e.isAvailableForPurchase&&!e.isCapped},on:{click:e.buyMaxTimeDimension}},[e._v(" Buy Max ")])],1)],1)},cY=[];const uY={name:"ClassicTimeDimensionRow",components:{GenericDimensionRowText:Sw,PrimaryButton:Vs,PrimaryToggleButton:Sh},props:{tier:{type:Number,required:!0},areAutobuyersUnlocked:{type:Boolean,required:!0}},data(){return{isUnlocked:!1,isCapped:!1,multiplier:new Decimal(0),amount:new Decimal(0),bought:0,rateOfChange:new Decimal(0),cost:new Decimal(0),isAvailableForPurchase:!1,isAutobuyerOn:!1,requirementReached:!1,realityUnlocked:!1,showTTCost:!1,ttCost:0,ttGen:new Decimal,currTT:new Decimal,isContinuumActive:!1,continuumValue:0}},computed:{shiftDown(){return ui.view.shiftDown},name(){return`${TimeDimension(this.tier).shortDisplayName} Time Dimension`},buttonContents(){return this.showTTCost?this.formattedTTCost:this.isContinuumActive?`Continuum: ${this.continuumString}`:this.formattedEPCost},continuumString(){return this.continuumValue>=1e9?format(this.continuumValue,2,2):formatFloat(this.continuumValue,2)},tooltipContents(){return this.showTTCost?`${this.formattedEPCost}
${this.timeEstimate}`:this.isContinuumActive?"Continuum produces all your Time Dimensions":this.isCapped?BK.isRunning?`Nameless prevents the purchase of more than ${format(1)} Time Dimension`:`Capped at ${format(5e14,2,2)} purchases`:this.bought>=1e12?`Purchased ${format(this.bought,2,2)} times`:`Purchased ${quantifyInt("time",this.bought)}`},showRow(){return this.realityUnlocked||this.isUnlocked||this.requirementReached},formattedTTCost(){return`Unlock: ${format(this.ttCost)} TT`},formattedEPCost(){return this.isCapped?"Capped":`${this.showCostTitle?"Cost: ":""}${format(this.cost,2)} EP`},hasLongText(){return this.buttonContents.length>20},showCostTitle(){return this.cost.exponent<1e6},timeEstimate(){if(!this.showTTCost||this.ttGen.eq(0))return"";const e=Decimal.sub(this.ttCost,this.currTT).dividedBy(this.ttGen);return e.gt(0)?`Enough TT in ${TimeSpan.fromSeconds(e.toNumber()).toStringShort()}`:""}},watch:{isAutobuyerOn(e){Autobuyer.timeDimension(this.tier).isActive=e}},methods:{update(){const e=this.tier,t=TimeDimension(e);this.isCapped=BK.isRunning&&t.bought>0||t.bought>=5e14,this.isUnlocked=t.isUnlocked,this.multiplier.copyFrom(t.multiplier),this.amount.copyFrom(t.totalAmount),this.bought=t.bought,e<8&&this.rateOfChange.copyFrom(t.rateOfChange),this.cost.copyFrom(t.cost),this.isAvailableForPurchase=t.isAvailableForPurchase,this.isUnlocked||(this.isAvailableForPurchase=t.requirementReached),this.requirementReached=t.requirementReached,this.isAutobuyerOn=Autobuyer.timeDimension(this.tier).isActive,this.realityUnlocked=PlayerProgress.realityUnlocked(),this.showTTCost=!this.isUnlocked&&!this.shiftDown,this.tier>4&&(this.ttCost=TimeStudy.timeDimension(this.tier).cost),this.currTT.copyFrom(Currency.timeTheorems.value),this.ttGen.copyFrom(getTTPerSecond().times(getGameSpeedupFactor())),this.isContinuumActive=Ra.continuumActive&&!fQ.isDoomed,this.isContinuumActive&&(this.continuumValue=t.continuumValue)},buyTimeDimension(){this.isUnlocked?this.isContinuumActive||buySingleTimeDimension(this.tier):TimeDimension(this.tier).tryUnlock()},buyMaxTimeDimension(){this.isContinuumActive||buyMaxTimeDimension(this.tier)},buttonClass(){return{"l-dim-row-small-text":this.hasLongText,"o-non-clickable o-continuum":this.isContinuumActive}}}},dY=uY;var hY=(0,X.Z)(dY,lY,cY,!1,null,"bb681570",null);const mY=hY.exports,pY={name:"ClassicTimeDimensionsTab",components:{PrimaryButton:Vs,TimeDimensionRow:mY},data(){return{totalUpgrades:0,multPerTickspeed:0,tickspeedSoftcap:0,timeShards:new Decimal(0),upgradeThreshold:new Decimal(0),shardsPerSecond:new Decimal(0),incomeType:"",areAutobuyersUnlocked:!1,showLockedDimCostNote:!0,shortenTSU:!1}},computed:{costIncreases:()=>TimeDimension(1).costIncreaseThresholds},methods:{update(){this.showLockedDimCostNote=!TimeDimension(8).isUnlocked&&player.realities>=1,this.totalUpgrades=player.totalTickGained,this.multPerTickspeed=FreeTickspeed.multToNext,this.tickspeedSoftcap=FreeTickspeed.softcap,this.timeShards.copyFrom(Currency.timeShards),this.upgradeThreshold.copyFrom(FreeTickspeed.fromShards(Currency.timeShards.value).nextShards),this.shardsPerSecond.copyFrom(TimeDimension(1).productionPerRealSecond),this.incomeType=EternityChallenge(7).isRunning?"Eighth Infinity Dimensions":"Time Shards",this.areAutobuyersUnlocked=Autobuyer.timeDimension(1).isUnlocked,this.shortenTSU=FreeTickspeed.amount>=1e11},maxAll(){tryUnlockTimeDimensions(),maxAllTimeDimensions()},toggleAllAutobuyers(){toggleAllTimeDims()}}},yY=pY;var fY=(0,X.Z)(yY,rY,oY,!1,null,null,null);const gY=fY.exports;var vY=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-time-dim-tab l-centered-vertical-tab"},[i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.maxAll}},[e._v(" Max all ")]),e.areAutobuyersUnlocked?i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.toggleAllAutobuyers}},[e._v(" Toggle all autobuyers ")]):e._e()],1),e.shortenTSU?i("div",[i("p",[e._v(" You have gained "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.format(e.totalUpgrades,2,2)))]),e._v(" Tickspeed upgrades from "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.format(e.timeShards,2,1)))]),e._v(" Time Shards. ")]),i("p",[e._v(" Next Tickspeed upgrade at "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.format(e.upgradeThreshold,2,1)))]),e._v(", increasing by "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.formatX(e.multPerTickspeed,2,2)))]),e._v(" per Tickspeed upgrade gained. ")])]):i("div",[i("p",[e._v(" You have gained "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.formatInt(e.totalUpgrades)))]),e._v(" Tickspeed upgrades from "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.format(e.timeShards,2,1)))]),e._v(" Time Shards. ")]),i("p",[e._v(" Next Tickspeed upgrade at "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.format(e.upgradeThreshold,2,1)))]),e._v(", increasing by "),i("span",{staticClass:"c-time-dim-description__accent"},[e._v(e._s(e.formatX(e.multPerTickspeed,2,2)))]),e._v(" per Tickspeed upgrade gained. ")])]),i("div",[e._v(" The amount each additional upgrade requires will start increasing above "+e._s(e.formatInt(e.tickspeedSoftcap))+" Tickspeed upgrades. ")]),i("div",[e._v("You are getting "+e._s(e.format(e.shardsPerSecond,2,0))+" "+e._s(e.incomeType)+" per second.")]),i("div",{staticClass:"l-dimensions-container"},e._l(8,(function(t){return i("NewTimeDimensionRow",{key:t,attrs:{tier:t,"are-autobuyers-unlocked":e.areAutobuyersUnlocked}})})),1),i("div",[e._v(" Time Dimension costs jump at "+e._s(e.format(e.costIncreases[0],2,2))+" and "+e._s(e.format(e.costIncreases[1]))+" Eternity Points, "),i("br"),e._v(" and costs increase much faster after "+e._s(e.format(e.costIncreases[2]))+" Eternity Points. "),i("br"),e.showLockedDimCostNote?i("div",[e._v(" Hold shift to see the Eternity Point cost for locked Time Dimensions. ")]):e._e(),e._v(" Any 8th Time Dimensions purchased above "+e._s(e.format(1e8))+" will not further increase the multiplier. "),i("br"),e._v(" Time Dimensions can only be purchased up to "+e._s(e.format(e.trueCap,2,2))+" times. ")])])},bY=[],EY=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.showRow,expression:"showRow"}],staticClass:"c-dimension-row l-dimension-row-time-dim l-dimension-single-row",class:{"c-dim-row--not-reached":!e.isUnlocked&&!e.requirementReached}},[i("GenericDimensionRowText",{attrs:{tier:e.tier,name:e.name,"multiplier-text":e.formatX(e.multiplier,2,1),"amount-text":e.format(e.amount,2),rate:e.rateOfChange}}),i("div",{staticClass:"l-dim-row-multi-button-container c-modern-dim-tooltip-container",style:e.cssVars},[i("div",{staticClass:"c-modern-dim-purchase-count-tooltip",style:e.cssVars},[i("span",{domProps:{innerHTML:e._s(e.tooltipContents)}})]),i("PrimaryButton",{staticClass:"o-primary-btn--buy-td o-primary-btn o-primary-btn--new o-primary-btn--buy-dim",class:e.buttonClass(),attrs:{enabled:e.isAvailableForPurchase&&!e.isCapped&&!e.isContinuumActive},on:{click:e.buyTimeDimension}},[e._v(" "+e._s(e.buttonContents)+" ")]),e.areAutobuyersUnlocked&&!e.isContinuumActive?i("PrimaryToggleButton",{staticClass:"o-primary-btn--buy-td-auto",attrs:{label:"Auto:"},model:{value:e.isAutobuyerOn,callback:function(t){e.isAutobuyerOn=t},expression:"isAutobuyerOn"}}):e.isContinuumActive?e._e():i("PrimaryButton",{staticClass:"o-primary-btn--buy-td-auto",attrs:{enabled:e.isAvailableForPurchase&&!e.isCapped},on:{click:e.buyMaxTimeDimension}},[e._v(" Buy Max ")])],1)],1)},TY=[];const wY={name:"ModernTimeDimensionRow",components:{GenericDimensionRowText:Sw,PrimaryButton:Vs,PrimaryToggleButton:Sh},props:{tier:{type:Number,required:!0},areAutobuyersUnlocked:{type:Boolean,required:!0}},data(){return{isUnlocked:!1,isCapped:!1,multiplier:new Decimal(0),amount:new Decimal(0),bought:0,rateOfChange:new Decimal(0),cost:new Decimal(0),isAvailableForPurchase:!1,isAutobuyerOn:!1,requirementReached:!1,realityUnlocked:!1,showTTCost:!1,ttCost:0,ttGen:new Decimal,currTT:new Decimal,isContinuumActive:!1,continuumValue:0}},computed:{shiftDown(){return ui.view.shiftDown},name(){return`${TimeDimension(this.tier).shortDisplayName} Time Dimension`},buttonContents(){return this.showTTCost?this.formattedTTCost:this.isContinuumActive?`Continuum: ${this.continuumString}`:this.formattedEPCost},continuumString(){return this.continuumValue>=1e9?format(this.continuumValue,2,2):formatFloat(this.continuumValue,2)},tooltipContents(){return this.showTTCost?`${this.formattedEPCost}
${this.timeEstimate}`:this.isContinuumActive?"Continuum produces all your Time Dimensions":this.isCapped?BK.isRunning?`Nameless prevents the purchase of more than ${format(1)} Time Dimension`:`Capped at ${format(5e14,2,2)} purchases`:this.bought>=1e12?`Purchased ${format(this.bought,2,2)} times`:`Purchased ${quantifyInt("time",this.bought)}`},showRow(){return this.realityUnlocked||this.isUnlocked||this.requirementReached},formattedTTCost(){return`Unlock: ${format(this.ttCost)} TT`},formattedEPCost(){return this.isCapped?"Capped":`${this.showCostTitle?"Cost: ":""}${format(this.cost,2)} EP`},hasLongText(){return this.buttonContents.length>15},showCostTitle(){return this.cost.exponent<1e6},timeEstimate(){if(!this.showTTCost||this.ttGen.eq(0))return"";const e=Decimal.sub(this.ttCost,this.currTT).dividedBy(this.ttGen);return e.gt(0)?`Enough TT in ${TimeSpan.fromSeconds(e.toNumber()).toStringShort()}`:""},cssVars(){return{"--x-pos":this.isContinuumActive?"-125%":"-175%"}}},watch:{isAutobuyerOn(e){Autobuyer.timeDimension(this.tier).isActive=e}},methods:{update(){const e=this.tier,t=TimeDimension(e);this.isCapped=BK.isRunning&&t.bought>0,this.isUnlocked=t.isUnlocked,this.multiplier.copyFrom(t.multiplier),this.amount.copyFrom(t.totalAmount),this.bought=t.bought,this.rateOfChange.copyFrom(t.rateOfChange),this.cost.copyFrom(t.cost),this.isAvailableForPurchase=t.isAvailableForPurchase,this.isUnlocked||(this.isAvailableForPurchase=t.requirementReached),this.requirementReached=t.requirementReached,this.isAutobuyerOn=Autobuyer.timeDimension(this.tier).isActive,this.realityUnlocked=PlayerProgress.realityUnlocked(),this.showTTCost=!this.isUnlocked&&!this.shiftDown,this.tier>4&&(this.ttCost=TimeStudy.timeDimension(this.tier).cost),this.currTT.copyFrom(Currency.timeTheorems.value),this.ttGen.copyFrom(getTTPerSecond().times(getGameSpeedupFactor())),this.isContinuumActive=Ra.continuumActive&&!fQ.isDoomed,this.isContinuumActive&&(this.continuumValue=t.continuumValue)},buyTimeDimension(){this.isUnlocked?this.isContinuumActive||buySingleTimeDimension(this.tier):TimeDimension(this.tier).tryUnlock()},buyMaxTimeDimension(){this.isContinuumActive||buyMaxTimeDimension(this.tier)},buttonClass(){return{"l-dim-row-small-text":this.hasLongText,"o-non-clickable o-continuum":this.isContinuumActive}}}},kY=wY;var CY=(0,X.Z)(kY,EY,TY,!1,null,"1b5405e2",null);const AY=CY.exports,_Y={name:"NewTimeDimensionsTab",components:{PrimaryButton:Vs,NewTimeDimensionRow:AY},data(){return{totalUpgrades:0,multPerTickspeed:0,tickspeedSoftcap:0,timeShards:new Decimal(0),upgradeThreshold:new Decimal(0),shardsPerSecond:new Decimal(0),incomeType:"",areAutobuyersUnlocked:!1,showLockedDimCostNote:!0,shortenTSU:!1,trueCap:5e14}},computed:{costIncreases:()=>TimeDimension(1).costIncreaseThresholds},methods:{update(){this.showLockedDimCostNote=!TimeDimension(8).isUnlocked&&player.realities>=1,this.totalUpgrades=player.totalTickGained,this.multPerTickspeed=FreeTickspeed.multToNext,this.tickspeedSoftcap=FreeTickspeed.softcap,this.timeShards.copyFrom(Currency.timeShards),this.upgradeThreshold.copyFrom(FreeTickspeed.fromShards(Currency.timeShards.value).nextShards),this.shardsPerSecond.copyFrom(TimeDimension(1).productionPerSecond),this.incomeType=EternityChallenge(7).isRunning?"Eighth Infinity Dimensions":"Time Shards",this.areAutobuyersUnlocked=Autobuyer.timeDimension(1).isUnlocked,this.shortenTSU=FreeTickspeed.amount>=1e11,this.trueCap=player.timestudy.studies.includes(310)?5e14*Math.max(Math.sqrt(Math.log10(Currency.replicanti.value.exponent)),1):5e14},maxAll(){tryUnlockTimeDimensions(),maxAllTimeDimensions()},toggleAllAutobuyers(){toggleAllTimeDims()}}},SY=_Y;var DY=(0,X.Z)(SY,vY,bY,!1,null,null,null);const RY=DY.exports,MY={name:"TimeDimensionsTab",components:{ClassicTimeDimensionsTab:gY,ModernTimeDimensionsTab:RY},computed:{activeComponent(){return"Modern"==this.$viewModel.UIType?"ModernTimeDimensionsTab":"ClassicTimeDimensionsTab"}}},IY=MY;var xY=(0,X.Z)(IY,nY,sY,!1,null,null,null);const PY=xY.exports;var GY=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-time-studies-tab"},[i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.exportStudyTree}},[e._v(" Export tree ")]),i("PrimaryButton",{class:e.respecClassObject,on:{click:function(t){e.respec=!e.respec}}},[e._v(" Respec Time Studies on next Eternity ")]),i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",attrs:{onclick:"Modal.studyString.show({ id: -1 })"}},[e._v(" Import tree ")])],1),i("div",{staticClass:"l-time-study-tree l-time-studies-tab__tree",style:e.treeStyleObject},[e._l(e.studies,(function(t){return i(e.studyComponent(t.study),{key:t.study.type.toString()+t.study.id.toString(),tag:"component",attrs:{setup:t}})})),i("SecretTimeStudy",{attrs:{setup:e.layout.secretStudy}}),e.isEnslaved?i("EnslavedTimeStudy",{attrs:{setup:e.layout.enslavedStudy}}):e._e(),i("svg",{staticClass:"l-time-study-connection",style:e.treeStyleObject},[e._l(e.connections,(function(e,t){return i("TimeStudyConnection",{key:"connection"+t,attrs:{setup:e}})})),i("HiddenTimeStudyConnection",{attrs:{setup:e.layout.secretStudyConnection}}),e.isEnslaved?i("HiddenTimeStudyConnection",{attrs:{setup:e.layout.enslavedStudyConnection,"is-enslaved":e.isEnslaved}}):e._e()],2)],2)])},UY=[],BY=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isOverridden?e._e():i("line",{class:e.classObject,attrs:{x1:e.percents(e.setup.x1),y1:e.percents(e.setup.y1),x2:e.percents(e.setup.x2),y2:e.percents(e.setup.y2)}})},NY=[];const OY={name:"TimeStudyConnection",props:{setup:{type:Object,required:!0}},data(){return{isOverridden:!1,isBought:!1}},computed:{classObject(){const e={"o-time-study-connection":!0,"o-time-study-connection--bought":this.isBought};let t;const i=this.setup.connection,a=i.from,n=i.to;function s(e){switch(e.path){case TIME_STUDY_PATH.ANTIMATTER_DIM:return"o-time-study-connection--antimatter-dim";case TIME_STUDY_PATH.INFINITY_DIM:return"o-time-study-connection--infinity-dim";case TIME_STUDY_PATH.TIME_DIM:return"o-time-study-connection--time-dim";case TIME_STUDY_PATH.ACTIVE:return"o-time-study-connection--active";case TIME_STUDY_PATH.PASSIVE:return"o-time-study-connection--passive";case TIME_STUDY_PATH.IDLE:return"o-time-study-connection--idle";default:return}}switch(n.type){case TIME_STUDY_TYPE.NORMAL:t=s(n)||s(a);break;case TIME_STUDY_TYPE.ETERNITY_CHALLENGE:t="o-time-study-connection--eternity-challenge";break;case TIME_STUDY_TYPE.DILATION:t="o-time-study-connection--dilation";break}return void 0!==t&&(e[t]=!0),e}},methods:{update(){this.isOverridden=this.setup.connection.isOverridden,this.isBought=this.setup.isBought},percents(e){return 100*e+"%"}}};class LY{constructor(e){this.connection=e}get from(){return this.connection.from}get to(){return this.connection.to}setPosition(e,t,i){const a=e.find((e=>e.study===this.from)),n=e.find((e=>e.study===this.to));if(void 0===a||void 0===n)return this.x1=0,this.y1=0,this.x2=0,void(this.y2=0);this.x1=(a.left+a.width/2)/t,this.y1=(a.top+a.height/2)/i,this.x2=(n.left+n.width/2)/t,this.y2=(n.top+n.height/2)/i}get isBought(){return this.from.isBought&&this.to.isBought}}const FY=OY;var $Y=(0,X.Z)(FY,BY,NY,!1,null,"0947fa33",null);const HY=$Y.exports;var qY=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{class:[e.classObject,e.studyClass,e.eternityChallengeAnim],style:e.styleObject,on:{click:[function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.handleClick.apply(null,arguments)},function(t){return t.shiftKey?t.ctrlKey||t.altKey||t.metaKey?null:e.shiftClick.apply(null,arguments):null}]}},[e._t("default"),e.showDefaultCostDisplay?i("CostDisplay",{attrs:{br:"",config:e.config,name:"Time Theorem"}}):e.doomedRealityStudy?e._e():i("div",[e._v(" Cost: "+e._s(e.customCostStr)+" ")])],2)},VY=[];const YY={name:"TimeStudyButton",components:{CostDisplay:ID},props:{setup:{type:Object,required:!0},showCost:{type:Boolean,required:!1,default:!0},showStCost:{type:Boolean,required:!1,default:!1},specialClick:{type:Function,required:!1,default:null}},data(){return{isUseless:!1,isBought:!1,isAvailableForPurchase:!1,STCost:0,eternityChallengeRunning:!1,isCompleteEC:!1}},computed:{study(){return this.setup.study},styleObject(){return{top:`${this.setup.top}rem`,left:`${this.setup.left}rem`}},classObject(){return{"o-time-study":!this.isUseless,"l-time-study":!0,"c-pelle-useless":this.isUseless,"c-pelle-useless--bought":this.isUseless&&this.isBought,"c-pelle-useless--unavailable":this.isUseless&&!this.isAvailableForPurchase&&!this.isBought,"c-pelle-useless-available":this.isUseless&&!this.isAvailableForPurchase&&!this.isBought,"o-time-study--small":this.setup.isSmall,"o-time-study--unavailable":!this.isAvailableForPurchase&&!this.isBought&&!this.isUseless,"o-time-study--available":this.isAvailableForPurchase&&!this.isBought,"o-time-study--bought":this.isBought&&!this.isUseless}},pathClass(){switch(this.study.type){case TIME_STUDY_TYPE.NORMAL:switch(this.setup.path){case TIME_STUDY_PATH.ANTIMATTER_DIM:return"o-time-study-antimatter-dim";case TIME_STUDY_PATH.INFINITY_DIM:return"o-time-study-infinity-dim";case TIME_STUDY_PATH.TIME_DIM:return"o-time-study-time-dim";case TIME_STUDY_PATH.ACTIVE:return"o-time-study-active";case TIME_STUDY_PATH.PASSIVE:return"o-time-study-passive";case TIME_STUDY_PATH.IDLE:return"o-time-study-idle";case TIME_STUDY_PATH.LIGHT:return"o-time-study-light";case TIME_STUDY_PATH.DARK:return"o-time-study-dark";default:return"o-time-study-normal"}case TIME_STUDY_TYPE.ETERNITY_CHALLENGE:return"o-time-study-eternity-challenge";case TIME_STUDY_TYPE.DILATION:return 6===this.study.id?"o-time-study-reality":"o-time-study-dilation";case TIME_STUDY_TYPE.TRIAD:return"o-time-study-triad";case TIME_STUDY_TYPE.MYRIAD:return"o-time-study-myriad";case TIME_STUDY_TYPE.KOHLER_EXCLUSIVE:return"o-time-study-kohler"}return""},studyClass(){if(this.isUseless)return"";let e="";return this.isAvailableForPurchase||this.isBought||(e+=`${this.pathClass}--unavailable`),this.isAvailableForPurchase&&!this.isBought&&(e+=`${this.pathClass}--available`),this.isBought&&(e+=`${this.pathClass}--bought`),this.isCompleteEC&&(e+=` ${this.pathClass}--complete`),e},eternityChallengeAnim(){return this.eternityChallengeRunning?"o-time-study-eternity-challenge--running":""},config(){return(0,B.Z)((0,B.Z)({},this.study.config),{},{cost:player.mending.corruptionChallenge.corruptedMend&&this.study.type!=TIME_STUDY_TYPE.DILATION?this.study.config.cost*ye.soF.ttcost[player.mending.corruption[9]]:this.study.config.cost,formatCost:e=>e>=1e6?format(e):formatInt(e)})},showDefaultCostDisplay(){const e=this.showCost&&!this.showStCost||0===this.STCost;return!this.setup.isSmall&&!this.doomedRealityStudy&&e},costNumber(){return player.mending.corruptionChallenge.corruptedMend&&this.study.type!=TIME_STUDY_TYPE.DILATION?this.config.cost*ye.soF.ttcost[player.mending.corruption[9]]:this.config.cost},customCostStr(){const e=this.setup.isSmall?`${formatInt(this.config.cost)} TT`:quantifyInt("Time Theorem",this.config.cost),t=this.setup.isSmall?`${formatInt(this.STCost)} ST`:quantifyInt("Space Theorem",this.STCost),i=[];return this.config.cost&&i.push(e),this.STCost&&this.showStCost&&i.push(t),i.join(" + ")},doomedRealityStudy(){return this.study.type===TIME_STUDY_TYPE.DILATION&&6===this.study.id&&Pelle.isDoomed}},methods:{update(){var e;const t=this.study;this.isUseless=Pelle.uselessTimeStudies.includes(this.study.id)&&Pelle.isDoomed,this.isBought=t.isBought,this.eternityChallengeRunning=t.type===TIME_STUDY_TYPE.ETERNITY_CHALLENGE&&(null===(e=EternityChallenge.current)||void 0===e?void 0:e.id)===t.id,this.isBought||(this.isAvailableForPurchase=t.canBeBought&&t.isAffordable),this.STCost=this.study.STCost,this.isCompleteEC=this.study.type===TIME_STUDY_TYPE.ETERNITY_CHALLENGE&&0===EternityChallenge(this.study.id).remainingCompletions},handleClick(){null!==this.specialClick&&this.study.isBought?this.specialClick():this.study.purchase()},shiftClick(){this.study.purchaseUntil&&this.study.purchaseUntil()}}};class WY{constructor(e){this.study=e.study,this.row=e.row,this.column=e.column}setPosition(e){this.top=e.itemPosition(this.row);const t=e.rows[this.row];this.left=t.itemPosition(this.column,e),this.width=t.layout.itemWidth,this.height=t.layout.itemHeight}get path(){return this.study.path}}const jY=YY;var XY=(0,X.Z)(jY,qY,VY,!1,null,"003463ea",null);const zY=XY.exports;class KY{constructor(e,t,i){this.layout=e,this.items=t,this.isWide=i}get width(){const e=this.items.length,t=this.layout;return e*t.itemWidth+(e-1)*t.spacing}itemPosition(e,t){const i=this.layout,a=t.width,n=(a-this.width)/2;return n+e*i.itemWidth+e*i.spacing}}class ZY{constructor(e){this.itemWidth=e.itemWidth,this.itemHeight=e.itemHeight,this.spacing=e.spacing}}class QY{constructor(e,t=1){this.spacing=4*t;const i=new ZY({itemWidth:18*t,itemHeight:10*t,spacing:3*t}),a=new ZY({itemWidth:12*t,itemHeight:10*t,spacing:.6*t}),n=(...e)=>new KY(i,e),s=(...e)=>new KY(a,e,!0),r=e=>TimeStudy(e).isUnlocked?TimeStudy(e):null,o=e=>TimeStudy.eternityChallenge(e);this.rows=[n(null,r(11),null),n(r(21),r(22))],e!==JY.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES||Pelle.isDoomed?this.rows.push(n(null,r(31),r(32),r(33))):this.rows.push(n(r(305),r(31),r(32),r(33))),e===JY.ALTERNATIVE_62||e===JY.ALTERNATIVE_62_181||e===JY.ALTERNATIVE_TRIAD_STUDIES||e===JY.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES?this.rows.push(n(null,r(41),r(42),o(5)),n(r(51))):this.rows.push(n(r(41),r(42)),n(null,r(51),o(5))),e!==JY.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES||Pelle.isDoomed?this.rows.push(n(null,r(61),r(62))):this.rows.push(n(r(306),r(61),r(62))),this.rows.push(n(r(71),r(72),r(73)),n(r(81),r(82),r(83)),n(r(91),r(92),r(93)),n(r(101),r(102),r(103))),e!==JY.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES||Pelle.isDoomed||this.rows.push(n(r(311),r(312),r(313))),e!==JY.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES||Pelle.isDoomed?this.rows.push(n(o(7),r(111),null)):this.rows.push(n(o(7),r(111),r(307))),this.rows.push(n(r(121),r(122),r(123)),n(o(6),r(131),r(132),r(133),o(8)),n(r(141),r(142),r(143))),e!==JY.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES||Pelle.isDoomed?this.rows.push(n(null,o(9),r(151),null,o(4))):this.rows.push(n(null,r(321),r(322),r(323),o(4)),n(null,o(9),r(151),r(308),null)),this.rows.push(n(r(161),r(162))),e===JY.ALTERNATIVE_181||e===JY.ALTERNATIVE_62_181||e===JY.ALTERNATIVE_TRIAD_STUDIES||e===JY.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES?this.rows.push(n(r(309),r(171),o(2)),n(o(1),r(181),o(3))):this.rows.push(n(r(171)),n(o(1),o(2),o(3)),n(r(181))),this.rows.push(n(o(10)),n(r(191),r(192),r(193))),e!==JY.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES||Pelle.isDoomed?this.rows.push(n(r(201))):this.rows.push(n(r(201),r(310))),this.rows.push(n(r(211),r(212),r(213),r(214)),s(r(221),r(222),r(223),r(224),r(225),r(226),r(227),r(228))),(e===JY.ALTERNATIVE_TRIAD_STUDIES||e===JY.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES&&!Pelle.isDoomed)&&this.rows.push(n(r(301),r(302),r(303),r(304))),this.rows.push(n(r(231),r(232),r(233),r(234)),n(o(11),o(12)),n(TimeStudy.dilation),n(TimeStudy.timeDimension(5),TimeStudy.timeDimension(6)),n(TimeStudy.timeDimension(7),TimeStudy.timeDimension(8)),n(TimeStudy.reality)),Ra.unlocks.unlockMyriads.isUnlocked&&!Pelle.isDoomed&&this.rows.push(n(r(401),r(402),r(403)),n(r(411),r(412),r(413))),this.studies=[];for(let d=0;dnew LY(e))),this.secretStudyConnection=new LY(new TimeStudyConnection(r(11),l)),this.enslavedStudyConnection=new LY(new TimeStudyConnection(r(11),c)),this.width=this.rows.map((e=>e.width)).max();const u=this.rows.map((e=>e.layout.itemHeight)).sum();this.height=u+(this.rows.length-1)*this.spacing;for(const d of this.studies)d.setPosition(this);this.secretStudy.setPosition(this),this.enslavedStudy.setPosition(this);for(const d of this.connections)d.setPosition(this.studies,this.width,this.height);this.secretStudyConnection.setPosition(this.studies.concat(this.secretStudy),this.width,this.height),this.enslavedStudyConnection.setPosition(this.studies.concat(this.enslavedStudy),this.width,this.height)}itemPosition(e){const t=this.rows.slice(0,e),i=t.map((e=>e.layout.itemHeight)).sum();return i+t.length*this.spacing}static create(e,t=1){void 0===this._instances&&(this._instances=[]);const i=new QY(e,t);return this._instances[`${e}__${t}`]=i,i}}const JY={NORMAL:0,ALTERNATIVE_62:1,ALTERNATIVE_181:2,ALTERNATIVE_62_181:3,ALTERNATIVE_TRIAD_STUDIES:4,ALTERNATIVE_SXY_MORE_TRIAD_STUDIES:5,get current(){const e=Perk.bypassEC5Lock.isBought,t=Perk.bypassEC1Lock.isBought&&Perk.bypassEC2Lock.isBought&&Perk.bypassEC3Lock.isBought;return Ra.unlocks.unlockHardV.effectOrDefault(0)>=5?this.ALTERNATIVE_SXY_MORE_TRIAD_STUDIES:Ra.canBuyTriad?this.ALTERNATIVE_TRIAD_STUDIES:e&&t?this.ALTERNATIVE_62_181:e?this.ALTERNATIVE_62:t?this.ALTERNATIVE_181:this.NORMAL}};var eW=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("TimeStudyButton",{attrs:{setup:e.setup,"ach-tooltip":e.theoremTimeEstimate,"special-click":e.clickHandler()}},[i("DescriptionDisplay",{attrs:{config:e.study.config}}),e.showRequirement?[i("br"),i("span",[e._v(e._s(e.requirement))])]:e._e()],2)},tW=[];const iW={name:"DilationTimeStudy",components:{DescriptionDisplay:ND,TimeStudyButton:zY},props:{setup:{type:Object,required:!0}},data(){return{showRequirement:!1,maxTT:new Decimal,currTT:new Decimal,ttGen:new Decimal}},computed:{study(){return this.setup.study},id(){return this.study.id},requirement(){if(1===this.id)return`Requirement: ${formatInt(5)} EC11 and EC12 completions\n and ${formatInt(this.maxTT)}/${formatInt(TimeStudy.dilation.totalTimeTheoremRequirement)}\n total Time Theorems`;if(6===this.id){const e=Perk.firstPerk.isBought?"":` and ${formatInt(13)} rows of Achievements`;return`Requirement: ${format("1e4000")} Eternity Points${e}`}return""},theoremTimeEstimate(){if(this.study.isBought||!this.study.cost||this.ttGen.eq(0))return null;const e=Decimal.sub(this.study.cost,this.currTT).dividedBy(this.ttGen);return e.gt(0)?`Enough TT in ${TimeSpan.fromSeconds(e.toNumber()).toStringShort()}`:null}},methods:{update(){1===this.id&&(this.maxTT.copyFrom(Currency.timeTheorems.max),this.showRequirement=!this.study.isBought&&!Perk.bypassECDilation.canBeApplied),6===this.id&&(this.showRequirement=!Pelle.isDoomed),this.currTT.copyFrom(Currency.timeTheorems.value),this.ttGen.copyFrom(getTTPerSecond().times(getGameSpeedupFactor()))},clickHandler(){switch(this.id){case 1:return()=>Tab.eternity.dilation.show();case 2:case 3:case 4:case 5:return()=>Tab.dimensions.time.show();case 6:return()=>Tab.reality.glyphs.show();default:throw new Error("Unrecognized Dilation study was clicked")}}}},aW=iW;var nW=(0,X.Z)(aW,eW,tW,!1,null,"50134ea4",null);const sW=nW.exports;var rW=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("TimeStudyButton",{attrs:{setup:e.setup}},[i("HintText",{staticClass:"l-hint-text--time-study",attrs:{type:"studies"}},[e._v(" EC"+e._s(e.id)+" ")]),e._v(" Eternity Challenge "+e._s(e.id)+" ("+e._s(e.formatInt(e.completions))),e.showTotalCompletions?i("span",[e._v("/"+e._s(e.formatInt(5)))]):e._e(),e._v(") "),e.hasRequirement?[i("br"),e._v(" Requirement: "),e.needsFirstLinebreak?i("br"):e._e(),e.config.secondary.path?i("span",[e._v("Use only the "+e._s(e.config.secondary.path)+" path")]):i("span",[e._v(" "+e._s(e.formatValue(e.requirement.current))+"/"+e._s(e.formatValue(e.requirement.total))+" "),e.needsSecondLinebreak?i("br"):e._e(),e._v(" "+e._s(e.config.secondary.resource)+" ")])]:e._e(),e.isUnlocked&&!e.isRunning?i("span",[i("br"),e._v("Double click to start")]):e.isRunning?i("span",[i("br"),e._v("Currently Running")]):e._e()],2)},oW=[];const lW={name:"ECTimeStudy",components:{TimeStudyButton:zY,HintText:LT},props:{setup:{type:Object,required:!0}},data(){return{hasRequirement:!1,requirement:{current:new Decimal,total:new Decimal},completions:0,showTotalCompletions:!1,isRunning:!1,isUnlocked:!1}},computed:{study(){return this.setup.study},id(){return this.study.id},config(){return this.study.config},hasNumberRequirement(){return"number"===typeof this.study.requirementCurrent},formatValue(){return this.config.secondary.formatValue},needsFirstLinebreak(){return 7===this.study.id},needsSecondLinebreak(){return[3,4,7].includes(this.study.id)}},methods:{update(){var e;const t=this.id,i=this.study,a=EternityChallenge(t);if(this.hasRequirement=!Perk.studyECRequirement.isBought&&!i.wasRequirementPreviouslyMet,this.completions=a.completions,this.showTotalCompletions=!Enslaved.isRunning||1!==t,this.isRunning=(null===(e=EternityChallenge.current)||void 0===e?void 0:e.id)===t,this.isUnlocked=a.isUnlocked,!this.hasRequirement||t>10)return;const n=this.requirement;this.hasNumberRequirement?(n.total=i.requirementTotal,n.current=Math.min(i.requirementCurrent,n.total)):(n.total.copyFrom(i.requirementTotal),n.current.copyFrom(i.requirementCurrent.min(n.total)))}}},cW=lW;var uW=(0,X.Z)(cW,rW,oW,!1,null,"6d8a1d6b",null);const dW=uW.exports;var hW=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{ref:"study",class:e.classObject,style:e.styleObject,on:{click:e.handleClick}},[i("span",[e._v(" ... you ... have great potential ... "),i("br"),i("br"),e._v(" Cost: "+e._s(e.format(-e.enslavedTT))+" Time Theorems ")])])},mW=[];const pW={name:"EnslavedTimeStudy",props:{setup:{type:Object,required:!0}},data(){return{isVisible:player.celestials.enslaved.hasSecretStudy}},computed:{enslavedTT:()=>100,styleObject(){return{top:`${this.setup.top}rem`,left:`${this.setup.left}rem`}},classObject(){return{"l-time-study":!0,"o-time-study":!0,"o-time-study--bought":!0,"o-time-study-normal":!0,"o-time-study-normal--bought":!0,"o-time-study--enslaved":!0,"o-time-study--enslaved-unlocked":this.isVisible}}},methods:{update(){this.isVisible=Enslaved.isRunning&&player.celestials.enslaved.hasSecretStudy},handleClick(){Enslaved.isRunning&&!player.celestials.enslaved.hasSecretStudy&&(player.celestials.enslaved.hasSecretStudy=!0,EnslavedProgress.secretStudy.giveProgress(),Currency.timeTheorems.add(this.enslavedTT))}}},yW=pW;var fW=(0,X.Z)(yW,hW,mW,!1,null,"2f83ad0a",null);const gW=fW.exports;var vW=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("line",{class:e.classObject,attrs:{x1:e.percents(e.setup.x1),y1:e.percents(e.setup.y1),x2:e.percents(e.setup.x2),y2:e.percents(e.setup.y2)}})},bW=[];const EW={name:"HiddenTimeStudyConnection",props:{setup:{type:Object,required:!0},isEnslaved:{type:Boolean,required:!1,default:!1}},data(){return{isVisible:!1}},computed:{classObject(){return{"o-time-study-connection":!0,"o-time-study-connection--bought":!0,"o-time-study-connection--secret":!0,"o-time-study-connection--secret-unlocked":this.isVisible}}},methods:{update(){this.isVisible=this.isEnslaved?Enslaved.isRunning&&player.celestials.enslaved.hasSecretStudy:player.secretUnlocks.viewSecretTS},percents(e){return 100*e+"%"}}},TW=EW;var wW=(0,X.Z)(TW,vW,bW,!1,null,"34a48f61",null);const kW=wW.exports;var CW=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("TimeStudyButton",{attrs:{setup:e.setup,"show-cost":e.showCost,"show-st-cost":e.showSTCost}},[i("HintText",{staticClass:"l-hint-text--time-study",attrs:{type:"studies"}},[e._v(" "+e._s(e.hintText)+" ")]),i("span",{class:{"o-pelle-disabled":e.isUseless}},[i("DescriptionDisplay",{attrs:{config:e.study.config}}),i("EffectDisplay",{attrs:{br:"",config:e.study.config}})],1)],1)},AW=[];const _W={name:"NormalTimeStudy",components:{DescriptionDisplay:ND,EffectDisplay:tw,HintText:LT,TimeStudyButton:zY},props:{setup:{type:Object,required:!0}},data:()=>({showCost:!0,showSTCost:!1}),computed:{study(){return this.setup.study},hintText(){const e=this.study.id;if(!this.setup.path)return e;const t=NormalTimeStudies.pathList.find((e=>e.path===this.setup.path));return`${e} ${t.name}`},isUseless(){return Pelle.uselessTimeStudies.includes(this.study.id)&&Pelle.isDoomed}},methods:{update(){this.showCost=192!==this.study.id||!Enslaved.isRunning,this.showSTCost=VUnlocks.vAchievementUnlock.isUnlocked&&!TimeStudy(this.study.id).isBought&&TimeStudy(this.study.id).costsST()&&!Pelle.isDoomed}}},SW=_W;var DW=(0,X.Z)(SW,CW,AW,!1,null,"539cf4d3",null);const RW=DW.exports;var MW=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{ref:"study",class:e.classObject,style:e.styleObject,on:{click:e.handleClick}},[e._m(0)])},IW=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[e._v(" Unlock a Secret Achievement "),i("br"),i("br"),e._v(" (Double click to hide) ")])}];const xW={name:"SecretTimeStudy",props:{setup:{type:Object,required:!0}},data(){return{isVisible:player.secretUnlocks.viewSecretTS}},computed:{styleObject(){return{top:`${this.setup.top}rem`,left:`${this.setup.left}rem`}},classObject(){return{"l-time-study":!0,"o-time-study":!0,"o-time-study--bought":!0,"o-time-study-normal":!0,"o-time-study-normal--bought":!0,"o-time-study--secret":!this.isVisible,"o-time-study--secret-unlocked":this.isVisible}}},methods:{update(){this.isVisible=player.secretUnlocks.viewSecretTS},handleClick(){if(this.isVisible){const e=Date.now();e-ui.lastClickTime<750?(ui.lastClickTime=0,player.secretUnlocks.viewSecretTS=!1):ui.lastClickTime=e}else ui.lastClickTime=0,player.secretUnlocks.viewSecretTS||(player.secretUnlocks.viewSecretTS=!0,this.$refs.study.addEventListener("transitionend",(function e(t){SecretAchievement(21).unlock(),t.target.removeEventListener(t.type,e)})))}}},PW=xW;var GW=(0,X.Z)(PW,MW,IW,!1,null,"2b14d02f",null);const UW=GW.exports;var BW=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("TimeStudyButton",{staticClass:"o-time-study--triad",attrs:{setup:e.setup,"show-st-cost":!0}},[i("HintText",{staticClass:"l-hint-text--time-study",attrs:{type:"studies"}},[e._v(" "+e._s(e.id)+" Triad ")]),i("DescriptionDisplay",{attrs:{config:e.study.config}}),i("EffectDisplay",{attrs:{br:"",config:e.study.config}})],1)},NW=[];const OW={name:"TriadTimeStudy",components:{DescriptionDisplay:ND,EffectDisplay:tw,HintText:LT,TimeStudyButton:zY},props:{setup:{type:Object,required:!0}},computed:{study(){return this.setup.study},id(){return this.study.id},config(){return this.study.config}}},LW=OW;var FW=(0,X.Z)(LW,BW,NW,!1,null,"5d5be72a",null);const $W=FW.exports;var HW=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("TimeStudyButton",{staticClass:"o-time-study--myriad",attrs:{setup:e.setup,"show-st-cost":!0}},[i("HintText",{staticClass:"l-hint-text--time-study",attrs:{type:"studies"}},[e._v(" "+e._s(e.id)+" Myriad ")]),i("DescriptionDisplay",{attrs:{config:e.study.config}}),i("EffectDisplay",{attrs:{br:"",config:e.study.config}})],1)},qW=[];const VW={name:"MyriadTimeStudy",components:{DescriptionDisplay:ND,EffectDisplay:tw,HintText:LT,TimeStudyButton:zY},props:{setup:{type:Object,required:!0}},computed:{study(){return this.setup.study},id(){return this.study.id},config(){return this.study.config}}},YW=VW;var WW=(0,X.Z)(YW,HW,qW,!1,null,"2c22601a",null);const jW=WW.exports;var XW=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("TimeStudyButton",{staticClass:"o-time-study--kohler",attrs:{setup:e.setup,"show-st-cost":!0}},[i("HintText",{staticClass:"l-hint-text--time-study",attrs:{type:"studies"}},[e._v(" "+e._s(e.id)+" ")]),i("DescriptionDisplay",{attrs:{config:e.study.config}}),i("EffectDisplay",{attrs:{br:"",config:e.study.config}})],1)},zW=[];const KW={name:"KohlerTimeStudy",components:{DescriptionDisplay:ND,EffectDisplay:tw,HintText:LT,TimeStudyButton:zY},props:{setup:{type:Object,required:!0}},computed:{study(){return this.setup.study},id(){return this.study.id},config(){return this.study.config}}},ZW=KW;var QW=(0,X.Z)(ZW,XW,zW,!1,null,"cc3e5f08",null);const JW=QW.exports,ej={name:"TimeStudiesTab",components:{PrimaryButton:Vs,NormalTimeStudy:RW,ECTimeStudy:dW,EnslavedTimeStudy:gW,DilationTimeStudy:sW,TriadTimeStudy:$W,SecretTimeStudy:UW,TimeStudyConnection:HY,HiddenTimeStudyConnection:kW,MyriadTimeStudy:jW},data(){return{respec:player.respec,layoutType:JY.NORMAL,vLevel:0,renderedStudyCount:0,renderedConnectionCount:0,isEnslaved:!1,delayTimer:0}},computed:{layout(){return QY.create(this.layoutType)},allStudies(){return this.layout.studies},studies(){return this.allStudies.slice(0,this.renderedStudyCount)},allConnections(){return this.layout.connections},connections(){return this.allConnections.slice(0,this.renderedConnectionCount)},treeStyleObject(){return{width:`${this.layout.width}rem`,height:`${this.layout.height}rem`}},respecClassObject(){return{"o-primary-btn--subtab-option":!0,"o-primary-btn--respec-active":this.respec}}},watch:{respec(e){player.respec=e},vLevel(){this.$recompute("layout")}},created(){const e=()=>{let t=!1;this.renderedStudyCount{this.delayTimer=player.celestials.enslaved.hasSecretStudy?Date.now():0})),document.body.scrollTop=0},beforeDestroy(){cancelAnimationFrame(this.renderAnimationId)},methods:{update(){this.respec=player.respec,this.layoutType=JY.current,this.vLevel=Ra.pets.v.level,this.isEnslaved=Enslaved.isRunning||Date.now()-this.delayTimer<1e3},studyComponent(e){switch(e.type){case TIME_STUDY_TYPE.NORMAL:return RW;case TIME_STUDY_TYPE.ETERNITY_CHALLENGE:return dW;case TIME_STUDY_TYPE.DILATION:return sW;case TIME_STUDY_TYPE.TRIAD:return $W;case TIME_STUDY_TYPE.MYRIAD:return jW;case TIME_STUDY_TYPE.KOHLER_EXCLUSIVE:return JW}throw"Unknown Time Study type"},exportStudyTree(){0===player.timestudy.studies.length?GameUI.notify.error("You cannot export an empty Time Study Tree!"):(copyToClipboard(GameCache.currentStudyTree.value.exportString),GameUI.notify.info("Exported current Time Studies to your clipboard"))}}},tj=ej;var ij=(0,X.Z)(tj,GY,UY,!1,null,"3dd5056d",null);const aj=ij.exports;var nj=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-v-celestial-tab"},[i("CelestialQuoteHistory",{attrs:{celestial:"v"}}),e.mainUnlock?i("div",[e.isFlipped&&!e.isSuperFlipped?i("div",{staticClass:"c-v-info-text"},[e.flip===e.V_FLIP.HARD?i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:function(t){return e.setFlip(e.V_FLIP.NORMAL)}}},[e._v(" Hide Hard V ")]):i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:function(t){return e.setFlip(e.V_FLIP.HARD)}}},[e._v(" Show Hard V ")]),i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option l-cursed-glyph-creation",on:{click:e.createCursedGlyph}},[e._v(" Create a Cursed Glyph ")]),i("br"),e._v(" Cursed Glyphs can be created here or in the Effarig tab. "),i("br"),e._v(" Cursed Glyphs count as "+e._s(e.formatInt(-3))+" Glyphs for the purposes of all requirements related to Glyph count. "),i("br"),e.isDoomed?e._e():i("span",[e._v("The Black Hole can now be used to slow down time if they are both permanent.")]),i("br"),i("br"),e._v(" Each Hard V-Achievement counts as two V-Achievements and will award "+e._s(e.formatInt(2))+" Space Theorems instead of "+e._s(e.formatInt(1))+". "),i("br"),e._v(" Goal reduction is significantly more expensive for Hard V-Achievements. ")],1):e._e(),e.isSuperFlipped?i("div",{staticClass:"c-v-info-text"},[i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",class:[e.flip==e.V_FLIP.NORMAL?"l-selected-tab":""],on:{click:function(t){return e.setFlip(e.V_FLIP.NORMAL)}}},[e._v(" Show Normal V ")]),i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",class:[e.flip==e.V_FLIP.HARD?"l-selected-tab":""],on:{click:function(t){return e.setFlip(e.V_FLIP.HARD)}}},[e._v(" Show Hard V ")]),i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",class:[e.flip==e.V_FLIP.SUPER?"l-selected-tab":""],on:{click:function(t){return e.setFlip(e.V_FLIP.SUPER)}}},[e._v(" Show Superhard V ")]),i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option l-cursed-glyph-creation",on:{click:e.createCursedGlyph}},[e._v(" Create a Cursed Glyph ")]),i("br"),e._v(" Cursed Glyphs can be created here or in the Effarig tab. "),i("br"),e._v(" Cursed Glyphs count as "+e._s(e.formatInt(-3))+" Glyphs for the purposes of all requirements related to Glyph count. "),i("br"),e.isDoomed?e._e():i("span",[e._v("The Black Hole can now be used to slow down time if they are both permanent.")]),i("br"),i("br"),e._v(" Each Hard V-Achievement counts as two V-Achievements and will award "+e._s(e.formatInt(2))+" Space Theorems instead of "+e._s(e.formatInt(1))+". "),i("br"),e._v(" Each Superhard V-Achievement counts as five V-Achievements and will award "+e._s(e.formatInt(5))+" Space Theorems instead of "+e._s(e.formatInt(1))+". "),i("br"),e._v(" Goal reduction is significantly more expensive for Hard V-Achievements and Superhard V-Achievements. ")],1):e._e(),e.showReduction?i("div",{staticClass:"c-v-info-text"},[e._v(" You have "+e._s(e.quantify("Perk Point",e.pp,2,0))+". ")]):e._e(),i("div",{staticClass:"l-v-unlocks-container"},e._l(e.hexGrid,(function(t,a){return i("li",{key:a+"-v-hex",style:[t.isRunButton||t.isSuperRunButton?{zIndex:1}:{zIndex:0}]},[t.config?i("div",{staticClass:"l-v-hexagon c-v-unlock",style:"background-color: "+e.hexColor(t)},[i("p",{staticClass:"o-v-unlock-name"},[t.canBeReduced&&e.showReduction?i("br"):e._e(),e._v(e._s(t.config.name)+" ")]),i("p",{staticClass:"o-v-unlock-desc",domProps:{innerHTML:e._s(t.formattedDescription)}}),e.has(e.runMilestones[0][0])&&t.isReduced?i("p",{staticClass:"o-v-unlock-goal-reduction"},[e._v(" Goal has been "+e._s(e.mode(t))+" by "+e._s(e.reductionValue(t))+" ")]):e._e(),i("p",{staticClass:"o-v-unlock-amount"},[e._v(" "+e._s(e.formatInt(t.completions))+"/"+e._s(e.formatInt(t.config.values.length))+" done ")]),e.showRecord(t)?i("div",[i("p",{staticClass:"o-v-unlock-record"},[e._v(" Best: "+e._s(t.config.formatRecord(e.runRecords[t.id]))+" ")]),i("p",[i("GlyphSetPreview",{attrs:{glyphs:e.runGlyphs[t.id],text:t.config.name,"text-hidden":!0}})],1),t.canBeReduced&&e.showReduction?i("div",[i("div",{staticClass:"l-v-goal-reduction-spacer"}),i("button",{staticClass:"o-primary-btn l-v-reduction",class:{"o-primary-btn--disabled":!t.canBeReduced||e.ppGameDatabase.celestials.v.mainUnlock,celestialUnlockClassObject(){return{"o-v-milestone":!0,"o-v-milestone--unlocked":this.canUnlockCelestial,"c-v-unlock-button--enabled":this.canUnlockCelestial}},hexGrid(){return this.isSuperFlipped&&this.flip==V_FLIP.SUPER?[VRunUnlocks.all[12],VRunUnlocks.all[13],{},VRunUnlocks.all[14],{isSuperRunButton:!0},VRunUnlocks.all[15],VRunUnlocks.all[16],VRunUnlocks.all[17],{}]:this.isSuperFlipped&&this.flip==V_FLIP.HARD?[VRunUnlocks.all[6],VRunUnlocks.all[9],{},VRunUnlocks.all[10],{isRunButton:!0},VRunUnlocks.all[7],VRunUnlocks.all[8],VRunUnlocks.all[11],{}]:this.isFlipped&&this.flip==V_FLIP.HARD?[VRunUnlocks.all[6],{},{},{},{isRunButton:!0},VRunUnlocks.all[7],VRunUnlocks.all[8],{},{}]:[VRunUnlocks.all[0],VRunUnlocks.all[1],{},VRunUnlocks.all[5],{isRunButton:!0},VRunUnlocks.all[2],VRunUnlocks.all[4],VRunUnlocks.all[3],{}]},vUnlock:()=>VUnlocks.vAchievementUnlock,runMilestones(){return UZ.unlocks.unlockSHardV.isUnlocked?[[VUnlocks.shardReduction,VUnlocks.adPow,VUnlocks.fastAutoEC],[VUnlocks.autoAutoClean,VUnlocks.achievementBH,VUnlocks.raUnlock],[VUnlocks.vAchMulti,VUnlocks.vAchRa,VUnlocks.vKeep]]:[[VUnlocks.shardReduction,VUnlocks.adPow,VUnlocks.fastAutoEC],[VUnlocks.autoAutoClean,VUnlocks.achievementBH,VUnlocks.raUnlock]]},runButtonClassObject(){return{"l-v-hexagon":!0,"c-v-run-button":!0,"c-v-run-button--running":this.isRunning,"c-celestial-run-button--clickable":!this.isDoomed,"o-pelle-disabled-pointer":this.isDoomed}},superRunButtonClassObject(){return{"l-v-hexagon":!0,"c-v-super-run-button":!0,"c-v-super-run-button--running":this.isSuperRunning,"c-celestial-run-button--clickable":!this.isDoomed,"o-pelle-disabled-pointer":this.isDoomed}},runDescription(){return GameDatabase.celestials.descriptions[3].effects().replace(/^[0-9A-Z_a-z]/,(e=>e.toUpperCase()))},runSuperDescription(){return GameDatabase.celestials.descriptions[7].effects().replace(/^[0-9A-Z_a-z]/,(e=>e.toUpperCase()))},isDoomed:()=>Pelle.isDoomed},methods:{update(){this.mainUnlock=VUnlocks.vAchievementUnlock.isUnlocked,this.canUnlockCelestial=V.canUnlockCelestial,this.totalUnlocks=V.spaceTheorems,this.pp=Currency.perkPoints.value,this.showReduction=VUnlocks.shardReduction.isUnlocked,this.runRecords=Array.from(player.celestials.v.runRecords),this.runGlyphs=player.celestials.v.runGlyphs.map((e=>Glyphs.copyForRecords(e))),this.isFlipped=V.isFlipped,this.isSuperFlipped=V.isSuperFlipped,this.flip=player.celestials.v.flip,this.isRunning=V.isRunning,this.isSuperRunning=V.isSuperRunning,this.hasAlchemy=UZ.unlocks.unlockGlyphAlchemy.canBeApplied,this.MU14bought=pl(14).isBought},unlockCelestial(){V.canUnlockCelestial&&V.unlockCelestial()},startRun(){this.isDoomed||Modal.celestials.show({name:"V's",number:3})},startSuperRun(){this.isDoomed||Modal.celestials.show({name:"V's Superhard",number:7})},has(e){return e.isUnlocked},mode(e){return e.config.mode===Si.SUBTRACTION?"reduced":"divided"},reductionValue(e){return e.config.mode===Si.SUBTRACTION?formatInt(e.reduction):format(Decimal.pow10(e.reduction))},showRecord(e){return this.runRecords[e.id]>0||e.completions>0},reduceGoals(e){if(!Currency.perkPoints.purchase(e.reductionCost))return;const t=e.config.reductionStepSize?e.config.reductionStepSize:1;player.celestials.v.goalReductionSteps[e.id]+=t;for(const i of VRunUnlocks.all)i.tryComplete();V.checkForUnlocks()},reductionTooltip(e){return`Spend ${quantify("Perk Point",e.reductionCost,2,0)}\n to reduce goal by ${format(e.config.perReductionStep)}`},hexColor(e){const t=e.completions,i=e.config.values.length;if(t===i)return"var(--color-v--base)";const a=255-5*t,n=255-10*t,s=255-20*t;return`rgb(${a},${n},${s})`},setFlip(e){player.celestials.v.flip=e},createCursedGlyph(){Glyphs.giveCursedGlyph()}}},mj=hj;var pj=(0,X.Z)(mj,nj,sj,!1,null,"0d267545",null);const yj=pj.exports;var fj=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-remains-amount"},[e._v(" You have "),i("span",{staticClass:"c-remains-amount__accent"},[e._v(e._s(e.format(e.mendingPoints,2)))]),e._v(" "+e._s(e.pluralize("Multiversal Remain",e.mendingPoints))+". "),i("br"),i("br"),i("div",{staticClass:"c-mending-upgrade-infotext"},[e._v("Every completed row of purchased upgrades multiplies Multiversal Remain gain by 2.")]),i("div",{staticClass:"c-mending-upgrade-infotext"},[e._v('Upgrades are numbered from left to right, top to bottom. For example "Deus Propitius", will be refered to as Mending Upgrade 10 (or MU10)')]),i("div",{staticClass:"l-mending-upgrade-grid"},e._l(4,(function(t){return i("div",{key:t,staticClass:"l-mending-upgrade-grid__row"},e._l(5,(function(a){return i("MendingUpgradeButton",{key:e.id(t,a),staticClass:"l-mending-upgrade-grid__cell",attrs:{upgrade:e.upgrades[e.id(t,a)]}})})),1)})),0)])},gj=[],vj=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group"},[i("button",{staticClass:"l-mending-upgrade-btn c-mending-upgrade-btn",class:e.classObject,on:{click:[function(t){return t.shiftKey?t.ctrlKey||t.altKey||t.metaKey?null:e.toggleLock(e.upgrade):null},function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.upgrade.purchase()}]}},[i("HintText",{staticClass:"l-hint-text--mending-upgrade c-hint-text--mending-upgrade",attrs:{type:"mendingUpgrades"}},[e._v(" "+e._s(e.config.name)+" ")]),i("span",[i("DescriptionDisplay",{attrs:{config:e.config}}),e.$viewModel.shiftDown!==e.isAvailableForPurchase||e.isRebuyable?[i("EffectDisplay",{attrs:{config:e.config,br:""}}),e.isBought?e._e():i("CostDisplay",{attrs:{config:e.config,br:"",name:"Multiversal Remain"}})]:[i("br"),i("DescriptionDisplay",{staticClass:"c-mending-upgrade-btn__requirement",attrs:{config:e.requirementConfig,label:"Requirement:"}})]],2)],1),e.canBeLocked?i("div",{staticClass:"o-requirement-lock"},[e.hasRequirementLock?i("i",{staticClass:"fas fa-lock"}):e.canLock?i("i",{staticClass:"fas fa-lock-open"}):e._e()]):e._e()])},bj=[];const Ej={name:"MendingUpgradeButton",components:{PrimaryToggleButton:Sh,DescriptionDisplay:ND,EffectDisplay:tw,CostDisplay:ID,HintText:LT},props:{upgrade:{type:Object,required:!0}},data(){return{isAvailableForPurchase:!1,canBeBought:!1,isRebuyable:!1,isBought:!1,isAutoUnlocked:!1,isAutobuyerOn:!1,canBeLocked:!1,hasRequirementLock:!1}},computed:{config(){return this.upgrade.config},classObject(){return{"c-mending-upgrade-btn--useless":this.isUseless,"c-mending-upgrade-btn--bought":this.isBought&&!this.isUseless,"c-mending-upgrade-btn--unavailable":!this.isBought&&!this.canBeBought&&this.isAvailableForPurchase,"c-mending-upgrade-btn--possible":!this.isAvailableForPurchase&&this.isPossible,"c-mending-upgrade-btn--locked":!this.isAvailableForPurchase&&!this.isPossible}},requirementConfig(){return{description:this.config.requirement}},canLock(){return this.config.canLock&&!(this.isAvailableForPurchase||this.isBought)}},methods:{update(){const e=this.upgrade;this.isAvailableForPurchase=e.isAvailableForPurchase,this.canBeBought=e.canBeBought,this.isRebuyable=e.isRebuyable,this.isBought=!e.isRebuyable&&e.isBought,this.isPossible=e.isPossible,this.isAutoUnlocked=Ra.unlocks.instantECAndRealityUpgradeAutobuyers.canBeApplied,this.canBeLocked=e.config.canLock&&!this.isAvailableForPurchase,this.hasRequirementLock=e.hasPlayerLock},toggleLock(e){this.isRebuyable||e.toggleMechanicLock()}}},Tj=Ej;var wj=(0,X.Z)(Tj,vj,bj,!1,null,"009e3f9f",null);const kj=wj.exports;var Cj=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-modal__inner"},[i("div",{staticClass:"c-modal__header"},[i("ModalCloseButton",{on:{click:e.closeModal}}),e.$slots.header?i("span",{staticClass:"c-modal__title"},[e._t("header")],2):e._e()],1),e._t("default")],2)},Aj=[],_j=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("PrimaryButton",{staticClass:"o-primary-btn--modal-close c-modal__close-btn",on:{click:e.emitClick}},[e._v(" × ")])},Sj=[];const Dj={name:"ModalCloseButton",components:{PrimaryButton:Vs}},Rj=Dj;var Mj=(0,X.Z)(Rj,_j,Sj,!1,null,null,null);const Ij=Mj.exports,xj={name:"ModalWrapper",components:{ModalCloseButton:Ij},methods:{closeModal(){EventHub.dispatch(GAME_EVENT.CLOSE_MODAL)}}},Pj=xj;var Gj=(0,X.Z)(Pj,Cj,Aj,!1,null,"0ec9a581",null);const Uj=Gj.exports,Bj={name:"MendingUpgrades",components:{MendingUpgradeButton:kj},data(){return{mendingPoints:new Decimal(0)}},computed:{upgrades:()=>MendingUpgrades.all,costScalingTooltip:()=>`Prices start increasing faster above ${format(1e30)} RM and then even faster\n above ${format(Decimal.NUMBER_MAX_VALUE,1)} RM`,possibleTooltip:()=>"Checkered upgrades are impossible to unlock this Reality. Striped upgrades are\n still possible.",lockTooltip:()=>"This will only function if you have not already failed the condition or\n unlocked the upgrade.",grid:()=>[]},methods:{id(e,t){return 5*(e-1)+t-1},update(){this.mendingPoints.copyFrom(Currency.mendingPoints.value)}}},Nj=Bj;var Oj=(0,X.Z)(Nj,fj,gj,!1,null,"3bb497cc",null);const Lj=Oj.exports;var Fj=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-mending-milestone-grid"},[i("div",[e._v("You have Mended the Multiverse "+e._s(e.quantify("time",e.mendCount,3))+".")]),e._l(e.rows,(function(t){return i("div",{key:t,staticClass:"l-mends-milestone-grid__row"},[i("MendingMilestoneButton",{key:t,staticClass:"l-mending-milestone-grid__cell",attrs:{"get-milestone":e.getMilestone(t)}})],1)}))],2)},$j=[],Hj=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.config.invisible?e._e():i("div",{staticClass:"l-mending-milestone"},[i("span",{staticClass:"o-mending-milestone__goal"},[e._v(" "+e._s(e.quantifyInt("Mend",e.mends))+": ")]),i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.activeCondition,expression:"activeCondition"}],class:e.rewardClassObject},[i("span",[e._v(" "+e._s(e.reward)+" ")])])])},qj=[];const Vj={name:"MendingMilestoneButton",props:{getMilestone:{type:Function,required:!0}},data(){return{isReached:!1,isLocked:!1}},computed:{milestone(){return this.getMilestone()},config(){return this.milestone.config},mends(){return this.config.mends},reward(){const e=this.config.reward;return"function"===typeof e?e():e},rewardClassObject(){return{"o-mending-milestone__reward":!0,"o-mending-milestone__reward--locked":!this.isReached,"o-mending-milestone__reward--reached":this.isReached,"o-mending-milestone__reward--small-font":this.reward.length>80}},activeCondition(){return this.config.activeCondition?this.config.activeCondition():null}},methods:{update(){this.isReached=this.milestone.isReached}}},Yj=Vj;var Wj=(0,X.Z)(Yj,Hj,qj,!1,null,"2dc5a23e",null);const jj=Wj.exports,Xj={name:"MendingMilestones",components:{MendingMilestoneButton:jj},data(){return{mendCount:new Decimal}},computed:{milestones(){return Object.values(GameDatabase.mending.milestones).sort(((e,t)=>e.mends-t.mends)).map((e=>new dK(e)))},rows(){return this.milestones.length}},methods:{update(){this.mendCount.copyFrom(Currency.mends.value.floor())},getMilestone(e){return()=>this.milestones[e-1]}}},zj=Xj;var Kj=(0,X.Z)(zj,Fj,$j,!1,null,"362d0934",null);const Zj=Kj.exports;var Qj=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-warp-tab"},[e.warped?i("div",[i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.tooltip,expression:"tooltip"}],class:e.classObject,on:{click:e.clicked}},[e._v(" REALITY IS WARPED ")])]):e.canWarp?i("div",[i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.tooltip,expression:"tooltip"}],class:e.classObject,on:{click:e.clicked}},[e._v(" WARP REALITY ")])]):i("div",{staticClass:"warp-unlock-requirements"},[e._v(" You must have all Mending Upgrades Purchased, "+e._s(e.formatInt(1e7))+" Multiversal Remains, and 240 total Ra Memory Levels to Warp Reality. "),i("br"),i("br"),e._v(" "+e._s(e.format(this.MVRoR))+" / "+e._s(e.format(1e7))+" Multiversal Remains "),i("br"),e._v(" "+e._s(e.formatInt(this.RaToR))+" / "+e._s(e.formatInt(240))+" Ra Memory Levels "),i("br"),e._v(" "+e._s(e.formatInt(this.totalUpg))+" / "+e._s(e.formatInt(16))+" Mending Upgrades ")]),e.warped?i("div",[i("div",{staticClass:"c-mending-upgrade-infotext"},[e._v(" Stripped Upgrades (or ones that cost 1e300 MvR) are not yet implemented. "),i("br"),e._v(" You can shift-click upgrades with "),i("i",{staticClass:"fas fa-lock-open"}),e._v(" to make the game prevent you from doing anything this Mend which would cause you to fail their unlock condition. "),i("span",{attrs:{"ach-tooltip":e.lockTooltip}},[i("i",{staticClass:"fas fa-question-circle"})]),i("br")]),e._l(4,(function(t){return i("div",{key:t,staticClass:"l-mending-upgrade-grid__row"},e._l(3,(function(a){return i("WarpUpgradeButton",{key:e.id(t,a),attrs:{upgrade:e.upgrades[e.id(t,a)]}})})),1)}))],2):e._e()])},Jj=[],eX=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.tooltip,expression:"tooltip"}],class:e.classObject,on:{click:e.clicked}},[e._v(" "+e._s(e.text)+" ")])},tX=[];const iX={name:"WarpRealityButton",data(){return{isWarped:!1,isUnlocked:!1}},computed:{classObject(){return{"o-warp-btn":!0,"o-warp-btn--color-2":!0,"o-warp-btn--available":this.isUnlocked,"o-warp-btn--unavailable":!this.isUnlocked,"o-warp-btn--unclickable":this.isWarped}},tooltip(){},text(){return this.isWarped?"REALITY IS WARPED":"WARP REALITY"}},methods:{update(){this.isWarped=player.reality.warped,this.isUnlocked=player.mendingPoints.gte(1e7)&&Ra.totalPetLevel>320&&2029500==player.mending.upgradeBits},clicked(){!this.isWarped&&this.isUnlocked&&Modal.warpReality.show()}}},aX=iX;var nX=(0,X.Z)(aX,eX,tX,!1,null,"9a4b8a7c",null);const sX=nX.exports;var rX=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group"},[i("button",{staticClass:"l-mending-upgrade-btn c-mending-upgrade-btn",class:e.classObject,on:{click:[function(t){return t.shiftKey?t.ctrlKey||t.altKey||t.metaKey?null:e.toggleLock(e.upgrade):null},function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.upgrade.purchase()}]}},[i("HintText",{staticClass:"l-hint-text--mending-upgrade c-hint-text--mending-upgrade",attrs:{type:"corruptionUpgrades"}},[e._v(" "+e._s(e.config.name)+" ")]),i("span",{class:{"o-pelle-disabled":e.isUseless}},[i("DescriptionDisplay",{attrs:{config:e.config}}),e.$viewModel.shiftDown!==e.isAvailableForPurchase||e.isRebuyable?[i("EffectDisplay",{attrs:{config:e.config,br:""}}),e.isBought?e._e():i("CostDisplay",{attrs:{config:e.config,br:"",name:"Multiversal Remain"}})]:[i("br"),i("DescriptionDisplay",{staticClass:"c-mending-upgrade-btn__requirement",attrs:{config:e.requirementConfig,label:"Requirement:"}})]],2)],1),e.canBeLocked?i("div",{staticClass:"o-requirement-lock"},[e.hasRequirementLock?i("i",{staticClass:"fas fa-lock"}):e.canLock?i("i",{staticClass:"fas fa-lock-open"}):e._e()]):e._e()])},oX=[];const lX={name:"WarpUpgradeButton",components:{PrimaryToggleButton:Sh,DescriptionDisplay:ND,EffectDisplay:tw,CostDisplay:ID,HintText:LT},props:{upgrade:{type:Object,required:!0}},data(){return{isAvailableForPurchase:!1,canBeBought:!1,isRebuyable:!1,isBought:!1,isPossible:!1,canBeLocked:!1,hasRequirementLock:!1}},computed:{config(){return this.upgrade.config},classObject(){return{"c-mending-upgrade-btn--useless":!1,"c-mending-upgrade-btn--bought":this.isBought,"c-mending-upgrade-btn--unavailable":!this.isBought&&!this.canBeBought&&this.isAvailableForPurchase,"c-mending-upgrade-btn--possible":!this.isAvailableForPurchase&&this.isPossible,"c-mending-upgrade-btn--locked":!this.isAvailableForPurchase&&!this.isPossible}},requirementConfig(){return{description:this.config.requirement}},canLock(){return this.config.canLock&&!(this.isAvailableForPurchase||this.isBought)},isUseless(){return!1}},watch:{},methods:{update(){const e=this.upgrade;this.isAvailableForPurchase=e.isAvailableForPurchase,this.canBeBought=e.canBeBought,this.isRebuyable=e.isRebuyable,this.isBought=!e.isRebuyable&&e.isBought,this.isPossible=e.isPossible,this.isAutoUnlocked=!1,this.canBeLocked=e.config.canLock&&!this.isAvailableForPurchase,this.hasRequirementLock=e.hasPlayerLock},toggleLock(e){this.isRebuyable||e.toggleMechanicLock()}}},cX=lX;var uX=(0,X.Z)(cX,rX,oX,!1,null,"100ceb4f",null);const dX=uX.exports,hX={name:"WarpReality",components:{PrimaryButton:Vs,WarpRealityButton:sX,WarpUpgradeButton:dX},data(){return{totalUpg:0,MvRoR:0,RaToR:0,canWarp:!1,warped:!1}},computed:{upgrades:()=>WarpUpgrades.all,costScalingTooltip:()=>"Cost Scaling is NYI",possibleTooltip:()=>"Striped upgrades are Not Yet Implemented [NYI].",lockTooltip:()=>"This will only function if you have not already failed the condition or\n unlocked the upgrade.",grid:()=>[],classObject(){return{"o-warp-btn":!0,"o-warp-btn--color-2":!0,"o-warp-btn--available":this.canWarp,"o-warp-btn--unavailable":!this.canWarp,"o-warp-btn--unclickable":this.warped}},tooltip(){},totalUpgFunc(){return WarpUpgrades.all.countWhere((e=>e.isBought))}},methods:{update(){this.totalUpg=MendingUpgrades.all.countWhere((e=>e.isBought)),this.MVRoR=Decimal.min(player.mendingPoints,1e7).toNumber(),this.RaToR=Math.min(240,Ra.totalPetLevel),this.canWarp=1e7==this.MVRoR&&240==this.RaToR&&16==this.totalUpg,this.warped=player.reality.warped},clicked(){!this.warped&&this.canWarp&&Modal.warpReality.show()},id(e,t){return 3*(e-1)+t-1}}},mX=hX;var pX=(0,X.Z)(mX,Qj,Jj,!1,null,"6d9af666",null);const yX=pX.exports;var fX=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"kohler-celestial-tab"},[i("h1",[e._v("Coming in 5 Hours(tm)")]),i("span",[e._v(" Actually I want to add a cool progress system so if you see anything mess here just ignore--sxy ")]),i("div",{staticClass:"c-kohler-progressbar"},[i("div",{staticClass:"c-kohler-progressbar-inner c-kohler-progressbar-inner--light",style:{width:"100%"}}),i("div",{staticClass:"c-kohler-progressbar-inner",style:{width:e.kohlerProgress+"%"}}),e._l(e.unlockInfos,(function(t){return i("CustomizeableTooltip",{key:t.id,attrs:{"content-class":"c-kohler-progressunlock-description--hover-area",left:e.unlockDescriptionWidth(t),bottom:e.unlockDescriptionBottom(t),mode:"bottom",show:!0,"tooltip-arrow-style":e.unlockInfoTooltipArrowStyle,"tooltip-class":e.unlockInfoTooltipClass(t)},scopedSlots:e._u([{key:"tooltipContent",fn:function(){return[i("b",[e._v(" "+e._s(t.description)+" ")])]},proxy:!0}],null,!0)})}))],2),this.unlocked?i("div",[i("CelestialQuoteHistory",{attrs:{celestial:"kohler"}})],1):e._e(),this.unlocked?i("div",{staticClass:"l-mechanics-container"},[i("div",[i("div",{staticClass:"l-kohler-mechanic-container"},[i("div",{staticClass:"c-kohler-unlock c-kohler-run-button"},[i("span",[e._v(" Enter Kohler's Realm. ")]),i("div",{class:e.runButtonClassObject,on:{click:function(t){return e.startRun()}}},[i("i",{staticClass:"fa-solid fa-staff-snake"})]),e._v(" "+e._s(e.runDescription)+" ")])])])]):e._e()])},gX=[];const vX={name:"KohlersRealm",components:{PrimaryButton:Vs,CelestialQuoteHistory:AM,CustomizeableTooltip:jF},data(){return{unlocked:!1,kohlerProgress:0,time:(new Date).getTime(),bestAM:new Decimal(0),isRunning:!1}},computed:{unlockInfos:()=>KohlerProgressUnlocks.all,showRunReward(){return this.bestAM.gt(1)},upgrades(){const e=[];return e},runButtonClassObject(){return{"c-kohler-run-button__icon":!0,"c-kohler-run-button__icon--running":this.isRunning,"c-celestial-run-button--clickable":!this.isDoomed,"o-pelle-disabled-pointer":this.isDoomed}},runDescription(){return GameDatabase.celestials.descriptions[6].effects()},unlockInfoTooltipArrowStyle(){return{borderBottom:"0.5rem solid var(--color-mending)"}},isDoomed:()=>Pelle.isDoomed},methods:{update(){this.now=(new Date).getTime(),this.unlocked=!1,this.kohlerProgress=Kohler.unlockProgress},startRun(){},unlockDescriptionWidth(e){const t=e.config.progress;return`${t}%`},hasUnlock(e){return e.isUnlocked},unlockInfoTooltipClass(e){return{"c-kohler-progressunlock-description":!0,"c-kohler-progressunlock-description--unlocked":this.hasUnlock(e)}},unlockDescriptionBottom(e){const t=-e.config.id%2*65-1;return`${t}px`}}},bX=vX;var EX=(0,X.Z)(bX,fX,gX,!1,null,"0ef78654",null);const TX=EX.exports;var wX=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-corrupt-celestial-tab"},[i("div",{attrs:{"text-left":""}},[e._v(" You have "),i("span",{staticClass:"c-fragments-amount__accent"},[e._v(e._s(e.formatInt(e.corruptedFrags,2)))]),e._v(" Hostile Fragments. ")]),i("br"),i("div",{staticClass:"l-mechanics-container"},[i("div",{staticClass:"l-corrupt-mechanic-container"},[i("div",{staticClass:"c-corrupt-unlock c-corrupt-run-button"},[e.isRunning||e.nextCorrupted||e.corruptionsZeroCheck()?e.isRunning||e.nextCorrupted||!e.corruptionsZeroCheck()?e.isRunning||e.corruptionsZeroCheck()?!e.isRunning&&e.corruptionsZeroCheck()?i("span",[e._v(" Next Mend shall be Hostile, but cannot be all zero ")]):i("span",[e._v(" Exit Hostile Mend ")]):i("span",[e._v(" Next Mend will be Hostile, Mend to apply Hostilities ")]):i("span",[e._v(" You can't make full zero Hostile ")]):i("span",[e._v(" Make Next Mend Hostile ")]),i("div",{class:e.runButtonClassObject,on:{click:function(t){e.startRun(),e.update()}}},[i("i",{staticClass:"fa-solid fa-biohazard"})]),e._v(" "+e._s(e.runDescription)+" "),i("br"),i("br"),e._v(" "+e._s(e.bonusInfo)+" "),i("br"),i("br"),e._v(" "+e._s(e.rewardInfo)+" "),i("br"),i("br"),i("div",[e.recordScore>0?i("span",[e._v(" Your record score is "+e._s(e.format(e.recordScore,2))+", achieved with "+e._s(e.corruptionSet[0])+"/"+e._s(e.corruptionSet[1])+"/"+e._s(e.corruptionSet[2])+"/"+e._s(e.corruptionSet[3])+"/"+e._s(e.corruptionSet[4])+"/"+e._s(e.corruptionSet[5])+"/"+e._s(e.corruptionSet[6])+"/"+e._s(e.corruptionSet[7])+"/"+e._s(e.corruptionSet[8])+"/"+e._s(e.corruptionSet[9])+" ")]):i("span",[e._v(" You have not mended in a hostile multiverse yet. ")])])])]),i("div",[e._v(" Prestige Limits: "),i("SliderComponent",e._b({attrs:{value:e.corruptions[0],width:"100%",disabled:e.isRunning},on:{input:function(t){return e.corruptionSetSet(0,t)}}},"SliderComponent",e.corruptionSliderProps,!1)),e._v(" IP, EP, and RM gain by ^"+e._s(e.localPenalties.prestigeLimits[this.corruptions[0]])+". "),i("br"),i("br"),e._v(" Dimensional Limitations: "),i("SliderComponent",e._b({attrs:{value:e.corruptions[1],width:"100%",disabled:e.isRunning},on:{input:function(t){return e.corruptionSetSet(1,t)}}},"SliderComponent",e.corruptionSliderProps,!1)),e._v(" AD, ID, and TD multipliers ^"+e._s(e.format(e.dimLimNerf?e.localPenalties.dimLimits.postNerf[[this.corruptions[1]]]:e.localPenalties.dimLimits.preNerf[[this.corruptions[1]]],2,3))+" "),i("br"),i("br"),e._v(" Time Compression: "),i("SliderComponent",e._b({attrs:{value:e.corruptions[2],width:"100%",disabled:e.isRunning},on:{input:function(t){return e.corruptionSetSet(2,t)}}},"SliderComponent",e.corruptionSliderProps,!1)),e._v(" Gamespeed ^"+e._s(e.localPenalties.timeCompression.power[this.corruptions[2]])+" and then /"+e._s(e.timeCompMult)+" "),i("br"),i("br"),e._v(" Galactic Weakness: "),i("SliderComponent",e._b({attrs:{value:e.corruptions[3],width:"100%",disabled:e.isRunning},on:{input:function(t){return e.corruptionSetSet(3,t)}}},"SliderComponent",e.corruptionSliderProps,!1)),e._v(" Galaxy Scaling ^"+e._s(e.localPenalties.galWeak.scaling[this.corruptions[3]])+" and power "+e._s(e.formatX(e.localPenalties.galWeak.strength[this.corruptions[3]],1,2))+" "),i("br"),i("br"),e._v(" Complex Glyphs: "),i("SliderComponent",e._b({attrs:{value:e.corruptions[4],width:"100%",disabled:e.isRunning},on:{input:function(t){return e.corruptionSetSet(4,t)}}},"SliderComponent",e.corruptionSliderProps,!1)),e._v(" Glyph Level ^"+e._s(e.localPenalties.compGlyphs.level[this.corruptions[4]])+" and then "+e._s(e.formatX(e.localPenalties.compGlyphs.level[this.corruptions[4]],1,2))+". "),i("br"),e._v(" Glyph Rarity ^"+e._s(e.localPenalties.compGlyphs.rarity[this.corruptions[4]])+" and then "+e._s(e.formatX(e.localPenalties.compGlyphs.rarity[this.corruptions[4]],1,2))+". "),i("br"),i("br"),e._v(" Tick Extension: "),i("SliderComponent",e._b({attrs:{value:e.corruptions[5],width:"100%",disabled:e.isRunning},on:{input:function(t){return e.corruptionSetSet(5,t)}}},"SliderComponent",e.corruptionSliderProps,!1)),e._v(" Tickspeed ^"+e._s(e.formatInt(1))+"/"+e._s(e.format(e.localPenalties.tickExtension[this.corruptions[5]],2,1))+". "),i("br"),e._v(" Time Shard Gain /"+e._s(e.format(e.localPenalties.tickExtension[this.corruptions[5]],2,1))+". "),i("br"),i("br"),e._v(" Atomic Dilution: "),i("SliderComponent",e._b({attrs:{value:e.corruptions[6],width:"100%",disabled:e.isRunning},on:{input:function(t){return e.corruptionSetSet(6,t)}}},"SliderComponent",e.corruptionSliderProps,!1)),e._v(" Antimatter exponent ^"+e._s(e.format(e.localPenalties.atomDilution[this.corruptions[6]],3,3))+". "),i("br"),i("br"),e._v(" Theory of Dilation: "),i("SliderComponent",e._b({attrs:{value:e.corruptions[7],width:"100%",disabled:e.isRunning},on:{input:function(t){return e.corruptionSetSet(7,t)}}},"SliderComponent",e.corruptionSliderProps,!1)),e._v(" DT and TP gain ^"+e._s(e.format(e.localPenalties.toD.power[this.corruptions[7]],3,3))+". "),i("br"),e._v(" DT gain ×"+e._s(e.localPenalties.toD.mult[this.corruptions[7]].toString())+". "),i("br"),i("br"),e._v(" Replicative Singularities: "),i("SliderComponent",e._b({attrs:{value:e.corruptions[8],width:"100%",disabled:e.isRunning},on:{input:function(t){return e.corruptionSetSet(8,t)}}},"SliderComponent",e.corruptionSliderProps,!1)),e._v(" Replicanti gain ^"+e._s(e.localPenalties.repSing.rep[this.corruptions[8]].toString())+". "),i("br"),e._v(" Sigularity gain ^"+e._s(e.localPenalties.repSing.sing[this.corruptions[8]].toString())+". "),i("br"),e._v(" Dark Matter gain ^"+e._s(e.localPenalties.repSing.dm[this.corruptions[8]].toString())+". "),i("br"),i("br"),e._v(" Study of Forever: "),i("SliderComponent",e._b({attrs:{value:e.corruptions[9],width:"100%",disabled:e.isRunning},on:{input:function(t){return e.corruptionSetSet(9,t)}}},"SliderComponent",e.corruptionSliderProps,!1)),e._v(" Studies TT cost ×"+e._s(e.format(e.localPenalties.soF.ttcost[this.corruptions[9]],0,0))+". "),i("br"),e._v(" TD mult ^"+e._s(e.localPenalties.soF.tdpow[this.corruptions[9]].toString())+". ")],1)]),i("div",{staticClass:"button-container"},[i("button",{staticClass:"o-pelle-button",on:{click:e.showModal}},[e._v(" Show full nerf effects of specific Hostilities ")]),i("br"),e._v(" Last two row of Hostile Upgrades are only effective in Hostile Mends, and they won't affect the number display at this page. (sry) ")]),e._l(5,(function(t){return i("div",{key:t,staticClass:"l-mending-upgrade-grid__row"},e._l(5,(function(a){return i("CorruptionUpgradeButton",{key:e.id(t,a),attrs:{upgrade:e.upgrades[e.id(t,a)]}})})),1)}))],2)},kX=[],CX=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-spoon-btn-group"},[i("button",{staticClass:"l-mending-upgrade-btn c-mending-upgrade-btn",class:e.classObject,on:{click:function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey?null:e.upgrade.purchase()}}},[i("HintText",{staticClass:"l-hint-text--mending-upgrade c-hint-text--mending-upgrade",attrs:{type:"warpUpgrades"}},[e._v(" "+e._s(e.config.name)+" ")]),i("span",{class:{"o-pelle-disabled":e.isUseless}},[i("DescriptionDisplay",{attrs:{config:e.config}}),[i("EffectDisplay",{attrs:{config:e.config,br:""}}),e.isBought?e._e():i("CostDisplay",{attrs:{config:e.config,br:"",name:"Hostile Fragment"}})]],2)],1),e.canBeLocked?i("div",{staticClass:"o-requirement-lock"},[e.hasRequirementLock?i("i",{staticClass:"fas fa-lock"}):e.canLock?i("i",{staticClass:"fas fa-lock-open"}):e._e()]):e._e()])},AX=[];const _X={name:"CorruptionUpgradeButton",components:{PrimaryToggleButton:Sh,DescriptionDisplay:ND,EffectDisplay:tw,CostDisplay:ID,HintText:LT},props:{upgrade:{type:Object,required:!0}},data(){return{isAvailableForPurchase:!1,canBeBought:!1,isRebuyable:!1,isBought:!1,isPossible:!1,canBeLocked:!1,hasRequirementLock:!1}},computed:{config(){return this.upgrade.config},classObject(){return{"c-mending-upgrade-btn--useless":this.isUseless,"c-mending-upgrade-btn--bought":this.isBought&&!this.isUseless,"c-mending-upgrade-btn--unavailable":!this.isBought&&!this.canBeBought&&this.isAvailableForPurchase,"c-mending-upgrade-btn--possible":!this.isAvailableForPurchase&&this.isPossible,"c-mending-upgrade-btn--locked":!this.isAvailableForPurchase&&!this.isPossible}},requirementConfig(){return{description:this.config.requirement}},canLock(){return this.config.canLock&&!(this.isAvailableForPurchase||this.isBought)},isUseless(){return!1}},watch:{},methods:{update(){const e=this.upgrade;this.isAvailableForPurchase=e.isAvailableForPurchase,this.canBeBought=e.canBeBought,this.isRebuyable=e.isRebuyable,this.isBought=!e.isRebuyable&&e.isBought,this.isPossible=e.isPossible,this.isAutoUnlocked=!1,this.canBeLocked=e.config.canLock&&!this.isAvailableForPurchase,this.hasRequirementLock=e.hasPlayerLock},toggleLock(e){this.isRebuyable||e.toggleMechanicLock()}}},SX=_X;var DX=(0,X.Z)(SX,CX,AX,!1,null,"a1c479ea",null);const RX=DX.exports,MX={name:"CorruptionTab",components:{CelestialQuoteHistory:AM,CustomizeableTooltip:jF,SliderComponent:sD,CorruptionUpgradeButton:RX},data(){return{time:(new Date).getTime(),bestAM:new Decimal(0),recordScore:0,corruptionSet:[0,0,0,0,0,0,0,0,0,0],corruptions:[0,0,0,0,0,0,0,0,0,0],localPenalties:ye,perkPoints:0,hasReality:!1,isRunning:!1,dimLimNerf:!1,nextCorrupted:!1,timeCompMult:new Decimal(0),corruptedFrags:0}},computed:{corruptionSliderProps(){return{min:0,max:9+(Xw(6).isBought+Xw(12).isBought),width:"27rem",valueInDot:!0,tooltip:"never","dot-width":"2.2rem","dot-height":"1.6rem","dot-class":"c-glyph-sacrifice-options__rarity-slider-handle","bg-class":"c-glyph-sacrifice-options__rarity-slider-bg","process-class":"c-glyph-sacrifice-options__rarity-slider-process",style:{"margin-left":"1rem"}}},runButtonClassObject(){return{"c-corrupt-run-button__icon":!0,"c-corrupt-run-button__icon--running":this.isRunning,"c-corrupt-run-button--clickable":!0,"o-pelle-disabled-pointer":!1}},runDescription(){return GameDatabase.challenges.corruption.desc()},bonusInfo(){return GameDatabase.challenges.corruption.incBonusText()},rewardInfo(){return GameDatabase.challenges.corruption.reward()},unlockInfoTooltipArrowStyle(){return{borderRight:"0.5rem solid var(--color-pelle--base)"}},isDoomed:()=>Pelle.isDoomed,upgrades:()=>CorruptionUpgrades.all,costScalingTooltip:()=>`Prices start increasing faster above ${format(1e30)} HF and then even faster\n above ${format(Decimal.NUMBER_MAX_VALUE,1)} RM`,possibleTooltip:()=>"Striped upgrades are Not Yet Implemented [NYI].",lockTooltip:()=>"This will only function if you have not already failed the condition or\n unlocked the upgrade.",grid:()=>[],tooltip(){},totalUpgFunc(){return CorruptionUpgrades.all.countWhere((e=>e.isBought))}},methods:{update(){const e=(new Date).getTime();this.time=e,this.recordScore=CorruptionData.corruptionChallenge.recordScore,this.corruptionSet=[...CorruptionData.corruptionChallenge.recordCorruptions],this.corruptions=[...CorruptionData.corruptions],this.isRunning=CorruptionData.isCorrupted,this.dimLimNerf=Ra.unlocks.DimLimitCorruptionImprovementPelle.isUnlocked,this.nextCorrupted=player.mending.corruptNext,this.timeCompMult=format(new Decimal(1).div(this.localPenalties.timeCompression.mult[this.corruptions[2]])),this.corruptedFrags=player.mending.corruptedFragments},corruptionsZeroCheck(){for(let e=0;e<10;e++)if(0!=this.corruptions[e])return!1;return!0},startRun(){this.isRunning?(player.mending.corruptionChallenge.corruptedMend=!1,CorruptionData.isCorrupted=!1,this.isRunning=!1,this.nextCorrupted=!1):this.corruptionsZeroCheck()?(player.mending.corruptNext=!1,this.nextCorrupted=!1):player.mending.corruptNext=!player.mending.corruptNext},corruptionSetSet(e,t){this.corruptions[e]=t,player.mending.corruption[e]=t},unlockInfoTooltipClass(e){return{"c-corrupt-unlock-description":!0,"c-corrupt-unlock-description--unlocked":this.hasUnlock(e)}},id(e,t){return 5*(e-1)+t-1},showModal(){Modal.corruptionFullEffects.show()}}},IX=MX;var xX=(0,X.Z)(IX,wX,kX,!1,null,"78881c79",null);const PX=xX.exports;var GX=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(e.activeComponent,{tag:"component"})},UX=[],BX=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-time-dim-tab l-centered-vertical-tab"},[i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.maxAll}},[e._v(" Max all ")])],1),i("div",[i("p",[e._v(" You have gained "),i("span",{staticClass:"c-multiversal-dim-description__accent"},[e._v(e._s(e.format(e.boostPoints,2,1)))]),e._v(" Galactic Shards, "+e._s(e.txt1())),i("span",{staticClass:"c-multiversal-dim-description__accent"},[e._v(e._s(e.txt2()))]),e._v(e._s(e.txt3())+". ")])]),i("div",[e._v(" The effectiveness of Galactic Shards decreases above "+e._s(e.format(50))+"%. ")]),i("div",[e._v(" You are getting "+e._s(e.format(e.shardsPerSecond,2,0))+" "+e._s(e.incomeType)+" per second, unaffected by game speed. ")]),i("div",{staticClass:"l-dimensions-container"},e._l(8,(function(e){return i("ClassicMultiversalDimensionRow",{key:e,attrs:{tier:e}})})),1)])},NX=[],OX=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.showRow,expression:"showRow"}],staticClass:"c-dimension-row l-dimension-single-row",class:{"c-dim-row--not-reached":!e.isUnlocked&&!e.requirementReached}},[i("GenericDimensionRowText",{attrs:{tier:e.tier,name:e.name,"multiplier-text":e.formatX(e.multiplier,2,1),"amount-text":e.format(e.amount,2),rate:e.rateOfChange}}),i("div",{staticClass:"l-dim-row-multi-button-container"},[i("PrimaryButton",{staticClass:"o-primary-btn--buy-td o-primary-btn--buy-dim c-dim-tooltip-container",class:e.buttonClass(),attrs:{enabled:e.isAvailableForPurchase&&!e.isCapped},on:{click:e.buyMultiversalDimension}},[e._v(" "+e._s(e.buttonContents)+" "),i("div",{staticClass:"c-dim-purchase-count-tooltip"},[i("span",{domProps:{innerHTML:e._s(e.tooltipContents)}})])]),i("PrimaryButton",{staticClass:"o-primary-btn--buy-td-auto",attrs:{enabled:e.isAvailableForPurchase&&!e.isCapped},on:{click:e.buyMaxMultiversalDimension}},[e._v(" Buy Max ")])],1)],1)},LX=[];const FX={name:"ClassicMultiversalDimensionRow",components:{GenericDimensionRowText:Sw,PrimaryButton:Vs,PrimaryToggleButton:Sh},props:{tier:{type:Number,required:!0},areAutobuyersUnlocked:{type:Boolean,required:!1}},data(){return{isUnlocked:!1,isCapped:!1,multiplier:new Decimal(0),amount:new Decimal(0),bought:0,rateOfChange:new Decimal(0),cost:new Decimal(0),isAvailableForPurchase:!1,isAutobuyerOn:!1,requirementReached:!1}},computed:{shiftDown(){return ui.view.shiftDown},name(){return`${MultiversalDimension(this.tier).shortDisplayName} Multiversal Dimension`},buttonContents(){return this.formattedMvRCost},tooltipContents(){return this.isCapped?"Capped":`Purchased ${quantifyInt("time",this.bought)}`},showRow(){return this.isUnlocked},formattedMvRCost(){return this.isCapped?"Capped":`${this.showCostTitle?"Cost: ":""}${format(this.cost,2)} MvR`},hasLongText(){return this.buttonContents.length>20},showCostTitle(){return this.cost.exponent<1e6}},watch:{},methods:{update(){const e=this.tier,t=MultiversalDimension(e);this.isCapped=!1,this.isUnlocked=!0,this.multiplier.copyFrom(t.multiplier),this.amount.copyFrom(t.totalAmount),this.bought=t.bought,e<8&&this.rateOfChange.copyFrom(t.rateOfChange),this.cost.copyFrom(t.cost),this.isAvailableForPurchase=t.isAvailableForPurchase,this.isUnlocked||(this.isAvailableForPurchase=t.requirementReached),this.requirementReached=t.requirementReached,this.isAutobuyerOn=!1},buyMultiversalDimension(){this.isUnlocked?buySingleMultiversalDimension(this.tier):MultiversalDimension(this.tier).tryUnlock()},buyMaxMultiversalDimension(){buyMaxMultiversalDimension(this.tier)},buttonClass(){return{"l-dim-row-small-text":this.hasLongText}}}},$X=FX;var HX=(0,X.Z)($X,OX,LX,!1,null,"4c8aa071",null);const qX=HX.exports,VX={name:"ClassicMultiversalDimensionsTab",components:{PrimaryButton:Vs,ClassicMultiversalDimensionRow:qX},data(){return{totalUpgrades:0,percentSoftcap:0,boostPoints:new Decimal(0),galaxyBoost:new Decimal(0),upgradeThreshold:new Decimal(0),shardsPerSecond:new Decimal(0),incomeType:"",areAutobuyersUnlocked:!1,shortenTSU:!1}},computed:{costIncreases:()=>MultiversalDimension(1).costIncreaseThresholds},methods:{update(){this.totalUpgrades=player.totalTickGained,this.percentSoftcap=50,this.boostPoints.copyFrom(Currency.galBoostPoints),this.galaxyBoost=MultiversalDimension(1).galaxyBoost,this.upgradeThreshold.copyFrom(FreeTickspeed.fromShards(Currency.timeShards.value).nextShards),this.shardsPerSecond=MultiversalDimension(1).productionPerRealSecond.div(getGameSpeedupForDisplay()),this.incomeType="Galactic Shards",this.areAutobuyersUnlocked=!1,this.shortenTSU=FreeTickspeed.amount>=1e11},maxAll(){maxAllMultiversalDimensions()},toggleAllAutobuyers(){toggleAllMultiversalDims()},txt1(){return this.boostPoints.lte(1e50)?"making all Galaxies ":"providing an "},txt2(){return this.boostPoints.eq(0)?`${format(0,2,2)}%`:this.boostPoints.lte(1e50)?`${format(100*(this.galaxyBoost-1),2,2)}%`:`${formatX(this.galaxyBoost,2,2)}`},txt3(){return this.boostPoints.lte(1e50)?" stronger":" multiplier to all galaxies"}}},YX=VX;var WX=(0,X.Z)(YX,BX,NX,!1,null,null,null);const jX=WX.exports;var XX=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-time-dim-tab l-centered-vertical-tab"},[i("div",{staticClass:"c-subtab-option-container"},[i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.maxAll}},[e._v(" Max all ")])],1),i("div",[i("p",[e._v(" You have gained "),i("span",{staticClass:"c-multiversal-dim-description__accent"},[e._v(e._s(e.format(e.boostPoints,2,1)))]),e._v(" Galactic Shards, "+e._s(e.txt1())),i("span",{staticClass:"c-multiversal-dim-description__accent"},[e._v(e._s(e.txt2()))]),e._v(e._s(e.txt3())+". ")])]),i("div",[e._v("You are getting "+e._s(e.format(e.shardsPerSecond,2,0))+" "+e._s(e.incomeType)+" per second, unaffected by game speed.")]),i("div",{staticClass:"l-dimensions-container"},e._l(8,(function(e){return i("NewMultiversalDimensionRow",{key:e,attrs:{tier:e}})})),1)])},zX=[],KX=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"show",rawName:"v-show",value:e.showRow,expression:"showRow"}],staticClass:"c-dimension-row l-dimension-row-multiversal-dim l-dimension-single-row",class:{"c-dim-row--not-reached":!e.isUnlocked&&!e.requirementReached}},[i("GenericDimensionRowText",{attrs:{tier:e.tier,name:e.name,"multiplier-text":e.formatX(e.multiplier,2,1),"amount-text":e.format(e.amount,2),rate:e.rateOfChange}}),i("div",{staticClass:"l-dim-row-multi-button-container c-modern-dim-tooltip-container",style:e.cssVars},[i("div",{staticClass:"c-modern-dim-purchase-count-tooltip",style:e.cssVars},[i("span",{domProps:{innerHTML:e._s(e.tooltipContents)}})]),i("PrimaryButton",{staticClass:"o-primary-btn--buy-td o-primary-btn o-primary-btn--new o-primary-btn--buy-dim",class:e.buttonClass(),attrs:{enabled:e.isAvailableForPurchase},on:{click:e.buyMultiversalDimension}},[e._v(" "+e._s(e.buttonContents)+" ")]),i("PrimaryButton",{staticClass:"o-primary-btn--buy-td-auto",attrs:{enabled:e.isAvailableForPurchase},on:{click:e.buyMaxMultiversalDimension}},[e._v(" Buy Max ")])],1)],1)},ZX=[];const QX={name:"ModernMultiversalDimensionRow",components:{GenericDimensionRowText:Sw,PrimaryButton:Vs,PrimaryToggleButton:Sh},props:{tier:{type:Number,required:!0},areAutobuyersUnlocked:{type:Boolean,required:!1}},data(){return{isUnlocked:!1,multiplier:new Decimal(0),amount:new Decimal(0),bought:0,rateOfChange:new Decimal(0),cost:new Decimal(0),isAvailableForPurchase:!1,isAutobuyerOn:!1,requirementReached:!1,realityUnlocked:!1,showTTCost:!1,ttCost:0,ttGen:new Decimal,currTT:new Decimal,continuumValue:0}},computed:{shiftDown(){return ui.view.shiftDown},name(){return`${MultiversalDimension(this.tier).shortDisplayName} Multiversal Dimension`},buttonContents(){return this.formattedMvRCost},continuumString(){return this.continuumValue>=1e9?format(this.continuumValue,2,2):formatFloat(this.continuumValue,2)},tooltipContents(){return this.showTTCost?`${this.formattedMvRCost}
${this.timeEstimate}`:`Purchased ${quantifyInt("time",this.bought)}`},showRow(){return this.realityUnlocked||this.isUnlocked||this.requirementReached},formattedTTCost(){return`Unlock: ${format(this.ttCost)} TT`},formattedMvRCost(){return`${this.showCostTitle?"Cost: ":""}${format(this.cost,2)} MvR`},hasLongText(){return this.buttonContents.length>15},showCostTitle(){return this.cost.exponent<1e6},timeEstimate(){if(!this.showTTCost||this.ttGen.eq(0))return"";const e=Decimal.sub(this.ttCost,this.currTT).dividedBy(this.ttGen);return e.gt(0)?`Enough TT in ${TimeSpan.fromSeconds(e.toNumber()).toStringShort()}`:""},cssVars(){return{"--x-pos":"-175%"}}},watch:{},methods:{update(){const e=this.tier,t=MultiversalDimension(e);this.isUnlocked=!0,this.multiplier.copyFrom(t.multiplier),this.amount.copyFrom(t.totalAmount),this.bought=t.bought,e<8&&this.rateOfChange.copyFrom(t.rateOfChange),this.cost.copyFrom(t.cost),this.isAvailableForPurchase=t.isAvailableForPurchase,this.currTT.copyFrom(Currency.timeTheorems.value),this.ttGen.copyFrom(getTTPerSecond().times(getGameSpeedupFactor()))},buyMultiversalDimension(){this.isUnlocked?buySingleMultiversalDimension(this.tier):MultiversalDimension(this.tier).tryUnlock()},buyMaxMultiversalDimension(){buyMaxMultiversalDimension(this.tier)},buttonClass(){return{"l-dim-row-small-text":this.hasLongText}}}},JX=QX;var ez=(0,X.Z)(JX,KX,ZX,!1,null,"32da9d66",null);const tz=ez.exports,iz={name:"NewMultiversalDimensionsTab",components:{PrimaryButton:Vs,NewMultiversalDimensionRow:tz},data(){return{totalUpgrades:0,percentSoftcap:0,boostPoints:new Decimal(0),galaxyBoost:new Decimal(0),shardsPerSecond:new Decimal(0),incomeType:"",areAutobuyersUnlocked:!1,shortenTSU:!1}},computed:{costIncreases:()=>MultiversalDimension(1).costIncreaseThresholds},methods:{update(){this.totalUpgrades=0,this.percentSoftcap=50,this.boostPoints.copyFrom(Currency.galBoostPoints),this.galaxyBoost=MultiversalDimension(1).galaxyBoost,this.shardsPerSecond=MultiversalDimension(1).productionPerRealSecond.div(getGameSpeedupForDisplay()),this.incomeType="Galactic Shards",this.areAutobuyersUnlocked=!1,this.shortenTSU=!1},maxAll(){maxAllMultiversalDimensions()},toggleAllAutobuyers(){toggleAllMultiversalDims()},txt1(){return this.boostPoints.lte(1e50)?"making all Galaxies ":"providing an "},txt2(){return this.boostPoints.eq(0)?`${format(0,2,2)}%`:this.boostPoints.lte(1e50)?`${format(100*(this.galaxyBoost-1),2,2)}%`:`${formatX(this.galaxyBoost,2,2)}`},txt3(){return this.boostPoints.lte(1e50)?" stronger":" multiplier to all galaxies"}}},az=iz;var nz=(0,X.Z)(az,XX,zX,!1,null,null,null);const sz=nz.exports,rz={name:"MultiversalDimensionsTab",components:{ClassicMultiversalDimensionsTab:jX,ModernMultiversalDimensionsTab:sz},computed:{activeComponent(){return"Modern"==this.$viewModel.UIType?"ModernMultiversalDimensionsTab":"ClassicMultiversalDimensionsTab"}}},oz=rz;var lz=(0,X.Z)(oz,GX,UX,!1,null,null,null);const cz=lz.exports,uz={AntimatterDimensionsTab:TC,InfinityDimensionsTab:nN,TimeDimensionsTab:PY,OptionsSavingTab:QL,OptionsVisualTab:wF,OptionsGameplayTab:GL,StatisticsTab:SV,ChallengeRecordsTab:gM,PastPrestigeRunsTab:UF,GlyphSetRecordsTab:Vx,SpeedrunMilestonesTab:EV,PreviousSpeedrunTab:sH,NormalAchievementsTab:uL,SecretAchievementTab:Xq,TeresaTab:LV,EffarigTab:$M,EnslavedTab:jM,VTab:yj,RaTab:jH,LaitelaTab:fO,PelleTab:$$,AutobuyersTab:cS,AutomatorTab:$S,NormalChallengesTab:wL,InfinityChallengesTab:kB,EternityChallengesTab:RI,InfinityUpgradesTab:fN,BreakInfinityTab:AR,ReplicantiTab:Mq,TimeStudiesTab:aj,EternityUpgradesTab:sx,EternityMilestonesTab:$I,TimeDilationTab:aY,GlyphsTab:jU,RealityUpgradesTab:sq,ImaginaryUpgradesTab:sB,PerksTab:ar,BlackHoleTab:oR,AlchemyTab:cw,CelestialNavigationTab:sM,ShopTab:lV,MultiplierBreakdownTab:FO,MendingUpgrades:Lj,MendingMilestones:Zj,WarpReality:yX,CorruptionTab:PX,KohlersRealm:TX,MultiversalDimensionsTab:cz},dz=uz;var hz=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-s12-desktop-icons-container"},e._l(e.DesktopIcons.entries,(function(t,a){return i("div",{key:t.name,staticClass:"c-s12-desktop-icon",class:{"c-s12-desktop-icon--selected":e.DesktopIcons.selected===a},on:{click:function(t){return e.handleClick(a)}}},[i("div",{staticClass:"c-s12-desktop-icon__inner"},[i("img",{staticClass:"c-s12-desktop-icon__img",attrs:{src:"images/s12/"+t.image}}),i("div",{staticClass:"c-s12-desktop-icon__text"},[e._v(" "+e._s(t.name)+" ")])])])})),0)},mz=[];const pz={entries:[{name:"Windows Media Player",action(){const e=["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/rP42C-4zL3w?t=2","https://www.youtube.com/watch?v=fTaWKbD3UK8","https://www.youtube.com/watch?v=fLbP6qpI1YI"];window.open(e[Math.floor(Math.random()*e.length)])},image:"desktop--windows-media-player.png"},{name:"Discord",action(){window.open("https://discord.gg/ST9NaXa")},image:"desktop--discord-logo.png"},{name:"Games",action(){Modal.s12Games.show()},image:"desktop--games.png"}],selected:-1};let yz=!1;const fz={name:"DesktopIcons",data(){return{DesktopIcons:pz}},mounted(){document.body.addEventListener("click",this.clearSelected)},beforeDestroy(){document.body.removeEventListener("click",this.clearSelected),this.clearSelected()},methods:{clearSelected(){yz||(pz.selected=-1)},handleClick(e){pz.selected!==e?(pz.selected=e,yz=!0,setTimeout((()=>yz=!1),0)):pz.entries[e].action()}}},gz=fz;var vz=(0,X.Z)(gz,hz,mz,!1,null,"6bd6fa88",null);const bz=vz.exports;var Ez=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-s12-window__outer",class:e.S12Windows.isMinimised?"c-s12-window__outer--minimised":"",attrs:{id:"page"}},[i("link",{attrs:{rel:"stylesheet",type:"text/css",href:e.isClassic?"stylesheets/classic.css":"stylesheets/modern-styles.css"}}),i("span",{staticClass:"c-s12-close-button",on:{click:function(t){e.S12Windows.isMinimised=!0}}}),i("span",{staticClass:"c-modal__title"},[e._v(" "+e._s(e.tabName)+" ")]),i("div",{key:e.newGameKey,staticClass:"game-container c-s12-window__inner",class:e.isClassic?"c-classic l-classic":"",style:e.topPadding},[i("GameUiComponentFixed"),i("BackgroundAnimations"),i("div",{staticClass:"c-s12-window__content-container"},[e.news?i("NewsTicker"):e._e(),i("BigCrunchButton"),e.bigCrunch?e._e():i("div",{staticClass:"tab-container"},[i("HeaderPrestigeGroup"),i("div",{staticClass:"information-header"},[i("HeaderChallengeDisplay"),i("HeaderChallengeEffects"),e.hasReality?i("GameSpeedDisplay"):e._e(),e.hasReality?i("br"):e._e(),i("HeaderBlackHole")],1),e._t("default")],2)],1)],1)])},Tz=[];let wz;const kz={isMinimised:!1,tabs:{hoveringTab:void 0,setHoveringTab(e){this.hoveringTab=e.id,clearTimeout(wz)},unsetHoveringTab(e=!1){e?this.hoveringTab=void 0:wz=setTimeout((()=>this.hoveringTab=void 0),1e3)},tabButtonPositions:[]}},Cz={name:"S12Ui",components:{BigCrunchButton:dh,HeaderChallengeDisplay:qh,HeaderChallengeEffects:zh,NewsTicker:uf,HeaderBlackHole:Ih,HeaderPrestigeGroup:Jy,GameSpeedDisplay:ny,GameUiComponentFixed:Pb,BackgroundAnimations:Zd},data(){return{bigCrunch:!1,hasReality:!1,newGameKey:"",tabName:"",S12Windows:kz}},computed:{news(){return this.$viewModel.news},topPadding(){return this.$viewModel.news?"":"padding-top: 3.9rem"},isClassic(){return"Classic"==this.$viewModel.UIType}},methods:{update(){const e=!player.break&&Player.canCrunch;this.bigCrunch=e&&Time.bestInfinityRealTime.totalMinutes>1,this.hasReality=PlayerProgress.realityUnlocked(),this.newGameKey=Pelle.isDoomed,this.tabName=Tabs.current[this.$viewModel.subtab].name}}},Az=Cz;var _z=(0,X.Z)(Az,Ez,Tz,!1,null,"1ee338fc",null);const Sz=_z.exports;var Dz=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",[i("div",{staticClass:"c-game-ui--fixed"},[e.view.modal.progressBar?i("ModalProgressBar"):e.view.quotes.current?i("CelestialQuoteModal",{attrs:{quote:e.view.quotes.current}}):e.view.quotes.history?i("CelestialQuoteHistoryDisplay",{attrs:{quotes:e.view.quotes.history}}):e.view.modal.current?i("PopupModal",{attrs:{modal:e.view.modal.current}}):e._e(),e.ending?i("FadeAway"):e._e(),e.ending?i("CreditsContainer"):e._e(),e.ending?i("NewGame"):e._e(),i("SpectateGame")],1),i("S12Taskbar")],1)},Rz=[],Mz=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isHidden?e._e():i("span",[i("div",{staticClass:"c-taskbar"},[i("img",{staticClass:"c-start-icon",attrs:{src:"images/s12/win7-start-menu-inactive.png"},on:{click:function(t){return e.startupSound.play()}}}),e._l(e.tabs,(function(t,a){return[e.tabVisibilities[a]?i("TaskbarIcon",{key:t.name,attrs:{tab:t,"tab-position":a}}):e._e()]})),i("div",{staticClass:"c-s12-show-desktop",on:{click:function(t){e.S12Windows.isMinimised=!0}}})],2),e._l(e.tabs,(function(t,a){return[e.tabVisibilities[a]?i("S12Subtabs",{key:t.name,attrs:{tab:t}}):e._e()]}))],2)},Iz=[],xz=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{ref:"subtabs",staticClass:"c-s12-subtabs",class:{"c-s12-subtabs--show":e.S12Windows.tabs.hoveringTab===e.tab.id,"c-s12-subtabs--compact":e.useCompact},style:{left:e.left},on:{mouseenter:function(t){return e.S12Windows.tabs.setHoveringTab(e.tab)},mouseleave:function(t){return e.S12Windows.tabs.unsetHoveringTab()}}},[e._l(e.tab.subtabs,(function(t,a){return[e.subtabVisibilities[a]?i("div",{key:a,staticClass:"c-s12-subtab-btn",class:{"c-s12-subtab-btn--active":e.isCurrentSubtab(t.id)},on:{click:function(i){t.show(!0),e.S12Windows.isMinimised=!1,e.S12Windows.tabs.unsetHoveringTab(!0)}}},[i("span",{staticClass:"c-s12-subtab-btn__text"},[e.useCompact?i("span",{staticClass:"c-s12-subtab-btn__symbol--small",domProps:{innerHTML:e._s(t.symbol)}}):e._e(),e._v(" "+e._s(t.name)+" ")]),e.useCompact?e._e():i("span",{staticClass:"c-s12-subtab-btn__symbol",domProps:{innerHTML:e._s(t.symbol)}}),t.hasNotification?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()]):e._e()]}))],2)},Pz=[];const Gz={name:"S12Subtabs",props:{tab:{type:Object,required:!0}},data(){return{isAvailable:!0,isHidden:!1,subtabVisibilities:[],tabName:"",S12Windows:kz,windowWidth:0,left:"0px",useCompact:!1}},methods:{update(){this.isAvailable=this.tab.isAvailable,this.isHidden=this.tab.isHidden,this.subtabVisibilities=this.tab.subtabs.map((e=>e.isAvailable)),this.windowWidth=window.innerWidth,this.useCompact=180*this.subtabVisibilities.reduce(((e,t)=>e+t))>window.innerWidth-10,this.left=this.getSubtabsPosition()},isCurrentSubtab(e){return player.options.lastOpenSubtab[this.tab.id]===e&&!kz.isMinimised},getSubtabsPosition(){if(!this.$refs.subtabs)return"0px";const e=kz.tabs.tabButtonPositions[this.tab.id],t=this.$refs.subtabs.offsetWidth,i=5+t/2,a=this.windowWidth-i;return this.isAvailable,this.isHidden,`${Math.clamp(e,i,a)}px`}}},Uz=Gz;var Bz=(0,X.Z)(Uz,xz,Pz,!1,null,"a1a81406",null);const Nz=Bz.exports;var Oz=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{ref:"taskbarIcon",class:{"c-taskbar-icon":!0,"c-taskbar-icon--active":e.isCurrentTab},attrs:{title:e.tab.name},on:{mouseenter:function(t){return e.S12Windows.tabs.setHoveringTab(e.tab)},mouseleave:function(t){return e.S12Windows.tabs.unsetHoveringTab()},click:function(t){e.tab.show(!0),e.S12Windows.isMinimised=!1,e.S12Windows.tabs.unsetHoveringTab(!0)}}},[i("img",{staticClass:"c-taskbar-icon__image",attrs:{src:"images/s12/"+e.tab.key+".png"}}),e.hasNotification?i("div",{staticClass:"fas fa-circle-exclamation l-notification-icon"}):e._e()])},Lz=[];const Fz={name:"TaskbarIcon",props:{tab:{type:Object,required:!0},tabPosition:{type:Number,required:!0}},data(){return{isAvailable:!0,isHidden:!1,hasNotification:!1,tabName:"",S12Windows:kz}},computed:{isCurrentTab(){return this.tab.isOpen&&!kz.isMinimised}},methods:{update(){this.isAvailable=this.tab.isAvailable,this.isHidden=this.tab.isHidden,this.hasNotification=this.tab.hasNotification,this.tabPosition"Modern"==Tabs.UIType},methods:{update(){this.isHidden=AutomatorData.isEditorFullscreen,this.tabVisibilities=Tabs.UIType=="Modern".map((e=>!e.isHidden&&e.isAvailable))}}},Wz=Yz;var jz=(0,X.Z)(Wz,Mz,Iz,!1,null,"98c9ea58",null);const Xz=jz.exports,zz={name:"S12UiFixed",components:{PopupModal:$v,ModalProgressBar:dv,CelestialQuoteModal:Rg,CelestialQuoteHistoryDisplay:gg,FadeAway:jg,CreditsContainer:$g,SpectateGame:Jv,NewGame:Uv,S12Taskbar:Xz},data(){return{ending:!1}},computed:{view(){return this.$viewModel}},methods:{update(){this.ending=GameEnd.endState>=END_STATE_MARKERS.FADE_AWAY&&!GameEnd.creditsClosed}}},Kz=zz;var Zz=(0,X.Z)(Kz,Dz,Rz,!1,null,"b165c672",null);const Qz=Zz.exports,Jz={name:"GameUIComponent",components:(0,B.Z)((0,B.Z)({},dz),{},{ClassicUi:Kf,SynergismUi:TT,ModernUi:Lb,GameUiComponentFixed:Pb,BackgroundAnimations:Zd,S12Ui:Sz,S12UiFixed:Qz,S12DesktopIcons:bz}),computed:{view(){return this.$viewModel},isThemeS12(){return"S12"===this.view.theme},uiLayout(){return this.isThemeS12?"S12Ui":"Modern"==this.view.UIType?"ModernUi":"Classic"==this.view.UIType?"ClassicUi":"SynergismUi"},containerClass(){return"Modern"==this.view.UIType?"Modern":"Classic"==this.view.UIType?"Classic":"SynergismUi"},page(){const e=Tabs.current[this.$viewModel.subtab];return e.config.component},themeCss(){return`stylesheets/theme-${this.view.theme}.css`}}},eK=Jz;var tK=(0,X.Z)(eK,hd,md,!1,null,"16fa83ba",null);const iK=tK.exports;function aK(e,t,i){const a=e.getter;i[t]=!0,e.getter=e=>(i[t],a.call(e,e))}Vue.mixin({computed:{$viewModel(){return dd.view}},created(){this.update&&(this.on$(GAME_EVENT.UPDATE,this.update),sK.initialized&&this.update());const e=Object.create(null),t=this._computedWatchers;if(t){for(const i in t)aK(t[i],i,e);this.$recompute=t=>e[t]=!e[t],Vue.observable(e)}},destroyed(){EventHub.ui.offAll(this)},methods:{emitClick(){this.$emit("click")},emitInput(e){this.$emit("input",e)},emitClose(){this.$emit("close")},on$(e,t){EventHub.ui.on(e,t,this)},format(e,t,i){return format(e,t,i)},formatInt(e){return formatInt(e)},formatNE(e,t,i){return formatNE(e,t,i)},formatPercents(e,t){return formatPercents(e,t)},formatRarity(e){return formatRarity(e)},formatX(e,t,i){return formatX(e,t,i)},formatPow(e,t,i){return formatPow(e,t,i)},formatPostBreak(e,t,i){return formatPostBreak(e,t,i)},pluralize,quantify,quantifyInt}});const nK={complain(){this.checkReactivity(player,"player")},checkReactivity(e,t){if(void 0!==e&&null!==e){if(void 0!==e.__ob__)throw new Error(`Boi you fukked up - ${t} became REACTIVE (oh shite)`);for(const i in e){if(!Object.prototype.hasOwnProperty.call(e,i))continue;const a=e[i];"object"===typeof a&&this.checkReactivity(a,`${t}.${i}`)}}}},sK={notify:ud,events:[],flushPromise:void 0,initialized:!1,globalClickListener:null,touchDevice:"ontouchstart"in window||window.navigator.maxTouchPoints>0||window.navigator.msMaxTouchPoints>0||window.DocumentTouch&&document instanceof DocumentTouch,dispatch(e,t){const i=this.events.indexOf(e);-1!==i&&this.events.splice(i,1),e!==GAME_EVENT.UPDATE&&this.events.push([e,t]),this.flushPromise||(this.flushPromise=Promise.resolve().then(this.flushEvents.bind(this)))},flushEvents(){this.flushPromise=void 0,y&&PerformanceStats.isOn&&PerformanceStats.currentBlocks.length>0&&(Vue.nextTick((()=>PerformanceStats.start("Vue Render"))),PerformanceStats.start("Vue Update"));for(const e of this.events)EventHub.ui.dispatch(e[0],e[1]);EventHub.ui.dispatch(GAME_EVENT.UPDATE),y&&(nK.complain(),PerformanceStats.isOn&&PerformanceStats.currentBlocks.length>0&&(PerformanceStats.end(),Vue.nextTick((()=>{PerformanceStats.end("Vue Render"),PerformanceStats.end("Frame Time"),PerformanceStats.render()})))),this.events=[]},update(){this.dispatch(GAME_EVENT.UPDATE)}},rK=function(){let e=0;return{next:()=>e++}}();sd.ZP.options.defaultClass="general-tooltip",sd.ZP.options.popover.defaultBaseClass="general-tooltip",sd.ZP.options.defaultTemplate='
',Vue.use(sd.ZP),function(){const e=Vue.config.optionMergeStrategies.methods;Vue.config.optionMergeStrategies.methods=(t,i,a,n)=>{const s=e(t,i,a,n),r=e=>e&&e.update;return r(t)&&r(i)?(s.update=function(){t.update.call(this),i.update.call(this)},s):s}}(),ld(Vue),cd(Vue),Vue.use(rd.ZP,{config:{id:"UA-77268961-1"}});const oK=new Vue({el:"#ui",components:{GameUIComponent:iK},data:dd,computed:{notation(){return Notations.find(this.notationName)},currentGlyphTooltip(){return this.view.tabs.reality.currentGlyphTooltip},scrollWindow(){return this.view.scrollWindow},UIType(){return this.view.UIType}},watch:{currentGlyphTooltip(e){-1===e||sK.globalClickListener?-1===e&&sK.globalClickListener&&(document.removeEventListener("click",sK.globalClickListener),sK.globalClickListener=null):(sK.globalClickListener=()=>{this.view.tabs.reality.currentGlyphTooltip=-1,document.removeEventListener("click",sK.globalClickListener),sK.globalClickListener=null},document.addEventListener("click",sK.globalClickListener))},scrollWindow(e,t){0!==e&&0===t&&this.scroll(Date.now())}},methods:{scroll(e){const t=Date.now();this.view.scrollWindow&&(window.scrollBy(0,this.view.scrollWindow*(t-e)/2),setTimeout((()=>this.scroll(t)),20))}},render:e=>e(iK)});function lK(){Player.canMend&&cK()}function cK(){player.options.confirmations.mending?Modal.mending.show():uK()}function uK(){if(De.isCorrupted&&!player.celestials.pelle.galaxyGenerator.unlocked){De.isCorrupted=!1;let e=De.calcScore();De.corruptionChallenge.recordScore=9e15)&&(Mi.mendingPoints.add(gainedMendingPoints()),Mi.mends.add(1)),Effarig.isRunning&&!EffarigUnlock.mend.isUnlocked&&Ra.unlocks.effarigMendUnlock.isUnlocked&&(EffarigUnlock.mend.unlock(),EffarigUnlock.infinity.unlock(),EffarigUnlock.eternity.unlock(),EffarigUnlock.reality.unlock());let e=player.reality.glyphs.protectedRows;player.reality.glyphs.protectedRows=0;for(let t=0;t<120;t++){let e=Glyphs.inventory[t];null!=e&&"companion"!=e.type&&GlyphSacrificeHandler.deleteGlyph(e,!0)}Glyphs.unequipAll(!0);for(let t=0;t<120;t++){let e=Glyphs.inventory[t];null!=e&&"companion"!=e.type&&GlyphSacrificeHandler.deleteGlyph(e,!0)}player.reality.glyphs.protectedRows=e,player.blackHoleNegative=1,player.isGameEnd=!1,player.celestials.pelle.doomed=!1,player.options.hiddenTabBits=0,player.challenge={normal:{current:0,completedBits:0,bestTimes:player.challenge.normal.bestTimes},infinity:{current:0,completedBits:0,bestTimes:player.challenge.infinity.bestTimes},eternity:{current:0,unlocked:0,requirementBits:0}},Achievement(194).isUnlocked||(player.records.totalAntimatter=b.E1,player.challenge.normal.bestTimes=Array.repeat(Decimal.pow10(Number.MAX_VALUE),11),player.challenge.infinity.bestTimes=Array.repeat(Decimal.pow10(Number.MAX_VALUE),8)),hK.ten.isReached||(player.celestials.teresa.pouredAmount=0,player.celestials.teresa.unlockBits=0),player.celestials.teresa.run=!1,player.celestials.teresa.bestRunAM=pl(9).isBought?b.E1E10:b.D1,player.celestials.teresa.bestAMSet=[],player.celestials.teresa.perkShop=Array.repeat(0,5),hK.seven.isReached&&(player.celestials.teresa.perkShop=[20,20,14,6,0,0],eu(5).isBought&&(player.celestials.teresa.perkShop=[65,65,14,6,0,0])),player.celestials.teresa.lastRepeatedMachines=b.D0,pl(9).isBought&&!hK.ten.isReached&&(player.celestials.teresa.unlockBits+=1),Effarig.currentStage<6&&(player.celestials.effarig.relicShards=new Decimal(0),player.celestials.effarig.unlockBits=7),player.celestials.effarig.run=!1,player.celestials.enslaved.stored=b.D0,player.celestials.enslaved.storedReal=0,player.celestials.enslaved.isAutoReleasing=!1,player.celestials.enslaved.unlocks=[],player.celestials.enslaved.run=!1,player.celestials.enslaved.completed=!1,player.celestials.enslaved.tesseracts=0,player.celestials.enslaved.hasSecretStudy=!1,player.celestials.enslaved.progressBits=0,pl(7).isBought&&(player.celestials.enslaved.unlocks=[0,1],player.celestials.enslaved.completed=!0),DZ.vKeep.isUnlocked||(V.reset(),pl(14).isBought&&(player.celestials.v.runUnlocks=[3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0])),V.updateTotalRunUnlocks(),player.celestials.v.quoteBits=2047,Ra.unlocks.raNoReset.isUnlocked||Ra.reset(),player.celestials.ra.petWithRemembrance="",player.celestials.ra.alchemy=Array.repeat(0,21).map((()=>({amount:0,reaction:!1}))),player.celestials.ra.highestRefinementValue={power:0,infinity:0,time:0,replication:0,dilation:0,effarig:0},player.celestials.ra.quoteBits=16383,!player.mending.corruptNext&&KohlerProgressUnlocks.hostileScore.isUnlocked||(player.celestials.ra.charged=new Set,player.celestials.ra.breakCharged=new Set),Laitela.reset(),pl(4).isBought&&(player.celestials.laitela.difficultyTier=8),player.celestials.laitela.quoteBits=1023,player.celestials.pelle.upgrades.clear(),player.celestials.pelle.remnants=0,player.celestials.pelle.realityShards=b.D0,player.celestials.pelle.records={totalAntimatter:b.D0,totalInfinityPoints:b.D0,totalEternityPoints:b.D0},player.celestials.pelle.rebuyables.antimatterDimensionMult=0,player.celestials.pelle.rebuyables.timeSpeedMult=0,player.celestials.pelle.rebuyables.glyphLevels=0,player.celestials.pelle.rebuyables.infConversion=0,player.celestials.pelle.rebuyables.galaxyPower=0,player.celestials.pelle.rebuyables.galaxyGeneratorAdditive=0,player.celestials.pelle.rebuyables.galaxyGeneratorMultiplicative=0,player.celestials.pelle.rebuyables.AntimatterMult=0,player.celestials.pelle.rebuyables.galaxyGeneratorIPMult=0,player.celestials.pelle.rebuyables.galaxyGeneratorEPMult=0,player.celestials.pelle.rifts.vacuum.fill=b.D0,player.celestials.pelle.rifts.vacuum.active=!1,player.celestials.pelle.rifts.vacuum.reducedTo=1,player.celestials.pelle.rifts.decay.fill=b.D0,player.celestials.pelle.rifts.decay.active=!1,player.celestials.pelle.rifts.decay.percentageSpent=0,player.celestials.pelle.rifts.decay.reducedTo=1,player.celestials.pelle.rifts.chaos.fill=0,player.celestials.pelle.rifts.chaos.active=!1,player.celestials.pelle.rifts.chaos.reducedTo=1,player.celestials.pelle.rifts.recursion.fill=b.D0,player.celestials.pelle.rifts.recursion.active=!1,player.celestials.pelle.rifts.recursion.reducedTo=1,player.celestials.pelle.rifts.paradox.fill=b.D0,player.celestials.pelle.rifts.paradox.active=!1,player.celestials.pelle.rifts.paradox.reducedTo=1,player.celestials.pelle.progressBits=0,player.celestials.pelle.galaxyGenerator.unlocked=!1,player.celestials.pelle.galaxyGenerator.spentGalaxies=0,player.celestials.pelle.galaxyGenerator.generatedGalaxies=0,player.celestials.pelle.galaxyGenerator.phase=0,player.celestials.pelle.galaxyGenerator.sacrificeActive=!1,player.celestials.pelle.collapsed.upgrades=!1,player.celestials.pelle.collapsed.rifts=!1,player.celestials.pelle.collapsed.galaxies=!1,resetRealityRuns(),player.records.thisReality={time:b.D0,realTime:0,maxAM:b.D0,maxIP:b.D0,maxEP:b.D0,bestEternitiesPerMs:b.D0,maxReplicanti:b.D0,maxDT:b.D0,bestRSmin:b.D0,bestRSminVal:b.D0,remWithoutGG:0},player.records.bestReality={time:Decimal.pow10(Number.MAX_VALUE),realTime:Number.MAX_VALUE,glyphStrength:0,RM:b.D0,RMSet:[],RMmin:b.D0,RMminSet:[],glyphLevel:0,glyphLevelSet:[],bestEP:b.D0,bestEPSet:[],speedSet:[],iMCapSet:[],laitelaSet:[],remWithoutGG:player.records.bestReality.remWithoutGG},player.reality.unlockedEC=0,Perks.find(0).isBought=!0,Perks.find(0).onPurchased(),player.realities=pl(2).isBought?1e4:0;for(const t of[10,12,13,14,15,16,17,30,31,40,41,42,43,44,45,46,51,52,53,54,55,56,57,60,61,62,70,71,72,73,80,81,82,83,100,101,102,103,104,105,106,201,202,203,204,205]){const e=Perks.find(t);e.isBought=!1,hK.three.isReached&&(e.isBought=!0,e.onPurchased())}sK.update(),player.reality.upgReqs=8192,player.reality.imaginaryUpgReqs=0,player.reality.upgradeBits=8192,hK.three.isReached&&(player.reality.upgReqs+=1048576,player.reality.upgradeBits+=1048576),player.reality.imaginaryUpgradeBits=0,hK.three.isReached&&(player.reality.imaginaryUpgReqs+=1048576,player.reality.imaginaryUpgradeBits+=1048576),player.reality.upgReqs+=262144,player.reality.upgradeBits+=262144,player.reality.realityMachines=b.D0,player.reality.reqLock.reality=0,player.reality.reqLock.imaginary=0,player.reality.imaginaryMachines=0,player.reality.maxRM=b.D0,player.reality.iMCap=0,player.reality.glyphs.sac.power=b.D0,player.reality.glyphs.sac.infinity=b.D0,player.reality.glyphs.sac.replication=b.D0,player.reality.glyphs.sac.time=b.D0,player.reality.glyphs.sac.dilation=b.D0,player.reality.glyphs.sac.effarig=b.D0,player.reality.glyphs.sac.reality=b.D0,player.reality.glyphs.undo=[],player.reality.perkPoints=0;for(let t=1;t<=5;t++)player.reality.rebuyables[t]=hK.four.isReached?5:0;for(let t=1;t<=10;t++)player.reality.imaginaryRebuyables[t]=0;for(let t=0;t<2;t++)player.blackHole[t].intervalUpgrades=0,player.blackHole[t].powerUpgrades=0,hK.three.isReached&&(player.blackHole[t].powerUpgrades=3),player.blackHole[t].durationUpgrades=0,player.blackHole[t].phase=0,player.blackHole[t].unlocked=!1,player.blackHole[t].active=!1,hK.three.isReached&&(player.blackHole[t].active=!0,player.blackHole[t].unlocked=!0),player.blackHole[t].activations=0,BlackHole(t+1).powerUpgrade._lazyValue.invalidate(),BlackHole(t+1).powerUpgrade._lazyCost.invalidate();pl(4).isBought&&(player.reality.imaginaryUpgReqs+=32768,player.reality.imaginaryUpgradeBits+=32768);for(let t=0;t<1;t++)player.expoBlackHole[t].powerUpgrades=0,player.expoBlackHole[t].activations=0,ExpoBlackHole(t+1).powerUpgrade._lazyValue.invalidate(),ExpoBlackHole(t+1).powerUpgrade._lazyCost.invalidate();if(resetEternityRuns(),player.respec=!1,player.infinitiesBanked=b.D0,player.eternityUpgrades.clear(),Mi.eternityPoints.reset(),fullResetTimeDimensions(),resetTimeDimensions(),Mi.eternities.reset(),pl(2).isBought&&Mi.eternities.bumpTo(1e6),Mi.timeShards.reset(),Mi.timeTheorems.reset(),player.records.bestEternity={time:Decimal.pow10(Number.MAX_VALUE),realTime:Number.MAX_VALUE,bestEPminReality:b.D0},player.records.thisEternity={time:b.D0,realTime:0,maxAM:b.D0,maxIP:b.D0,bestIPMsWithoutMaxAll:b.D0,bestEPmin:b.D0,bestEPminVal:b.D0,bestInfinitiesPerMs:b.D0},player.totalTickGained=0,pl(3).isBought)for(let t=1;t<=12;t++)EternityChallenge(t).completions=5;else player.eternityChalls={};if(player.eterc8ids=50,player.eterc8repl=40,player.dilation.studies=[],player.dilation.active=!1,player.dilation.upgrades.clear(),player.dilation.rebuyables={1:0,2:0,3:0,11:0,12:0,13:0},Mi.tachyonParticles.reset(),player.dilation.nextThreshold=b.E3,player.dilation.baseTachyonGalaxies=0,player.dilation.totalTachyonGalaxies=0,Mi.dilatedTime.reset(),player.records.thisEternity={time:b.D0,realTime:0,maxAM:b.D0,maxIP:b.D0,bestIPMsWithoutMaxAll:b.D0,bestEPmin:b.D0,bestEPminVal:b.D0,bestInfinitiesPerMs:b.D0},player.dilation.lastEP=b.DM1,player.eternityUpgrades.clear(),EternityUpgrade.epMult.reset(),resetInfinityRuns(),player.records.thisInfinity={time:b.D0,realTime:0,lastBuyTime:b.D0,maxAM:b.D0,bestIPmin:b.D0,bestIPminVal:b.D0},player.records.bestInfinity={time:Decimal.pow10(Number.MAX_VALUE),realTime:Number.MAX_VALUE,bestIPminEternity:b.D0,bestIPminReality:b.D0},Mi.infinityPoints.reset(),InfinityDimensions.fullReset(),Mi.infinities.reset(),pl(2).isBought&&Mi.infinities.bumpTo(1e12),player.partInfinityPoint=0,player.partInfinitied=0,player.IPMultPurchases=0,Mi.infinityPower.reset(),Replicanti.reset(),pl(2).isBought&&(player.replicanti.unl=!0),pl(2).isBought?InfinityChallenges.completeAll():InfinityChallenges.clearCompletions(),playerInfinityUpgradesOnReset(),player.IPMultPurchases=0,Mi.antimatter.reset(),hK.three.isReached?Mi.antimatter.bumpTo(5e130):Mi.antimatter.bumpTo(5e25),player.dimensionBoosts=0,player.galaxies=0,player.sacrificed=b.D0,AntimatterDimensions.reset(),resetTickspeed(),player.records.thisMend.realTime0){let e=6666;eu(12).isBought&&(e=666);for(let t=0;tnew dK(e)));class mK extends pu{get _upgradeName(){return["dtGain","galaxyThreshold","tachyonGain","dtGainPelle","galaxyMultiplier","tickspeedPower"][this.id-1]}get data(){return player.auto.dilationUpgrades.all[this.id-1]}get name(){return["Dilated Time Multiplier","Tachyon Galaxy Threshold","Tachyon Particle Multiplier","Pelle DT Multiplier","Pelle TG Multiplier","Tickspeed Power"][this.id-1]}get interval(){return 1e3*Perk.autobuyerFasterDilation.effectOrDefault(1)/PerkShopUpgrade.autoSpeed.effectOrDefault(1)}get isUnlocked(){const e=this._upgradeName;return"dtGainPelle"==e||"galaxyMultiplier"==e||"tickspeedPower"==e?hK.two.isReached:Perk.autobuyerDilation.isEffectActive&&!Pelle.isDoomed||hK.one.isReached}get resetTickOn(){return PRESTIGE_EVENT.REALITY}get bulk(){return hK.two.isReached?1e5:PerkShopUpgrade.bulkDilation.effectOrDefault(1)}tick(){super.tick();const e=this._upgradeName;DilationUpgrade[e].purchase(this.bulk)}static get entryCount(){return 6}static get autobuyerGroupName(){return"Dilation Upgrade"}static get isActive(){return player.auto.dilationUpgrades.isActive}static set isActive(e){player.auto.dilationUpgrades.isActive=e}}class pK extends yu{get data(){return player.auto.dimBoost}get name(){return"Dimension Boost"}get isUnlocked(){return!!ue.mendingUnlocked()||!Pelle.isDisabled("dimBoostAutobuyer")&&this.canBeUpgraded}get canBeUpgraded(){return NormalChallenge(10).isCompleted||ue.mendingUnlocked()}get baseInterval(){return Player.defaultStart.auto.dimBoost.interval}get limitDimBoosts(){return this.data.limitDimBoosts}set limitDimBoosts(e){this.data.limitDimBoosts=e}get maxDimBoosts(){return this.data.maxDimBoosts}set maxDimBoosts(e){this.data.maxDimBoosts=e}get limitUntilGalaxies(){return this.data.limitUntilGalaxies}set limitUntilGalaxies(e){this.data.limitUntilGalaxies=e}get galaxies(){return this.data.galaxies}set galaxies(e){this.data.galaxies=e}get bulk(){return this.data.bulk}set bulk(e){this.data.bulk=e}get buyMaxInterval(){return this.data.buyMaxInterval}set buyMaxInterval(e){this.data.buyMaxInterval=e}get isBuyMaxUnlocked(){return BreakInfinityUpgrade.autobuyMaxDimboosts.isBought}get interval(){return this.isBuyMaxUnlocked?TimeSpan.fromSeconds(this.buyMaxInterval).totalMilliseconds.toNumber():super.interval}get canTick(){return DimBoost.canBeBought&&DimBoost.requirement.isSatisfied&&super.canTick}get resetTickOn(){return this.isBuyMaxUnlocked?PRESTIGE_EVENT.INFINITY:PRESTIGE_EVENT.ANTIMATTER_GALAXY}tick(){if(this.isBuyMaxUnlocked){const e=!this.limitUntilGalaxies||player.galaxies>=this.galaxies;if(!DimBoost.canUnlockNewDimension&&!e)return;return requestDimensionBoost(!0),void super.tick()}const e=!this.limitDimBoosts||DimBoost.purchasedBoosts=this.galaxies;(e||t)&&(requestDimensionBoost(!1),super.tick())}}class yK extends mu{get data(){return player.auto.eternity}get name(){return"Eternity"}get isUnlocked(){return EternityMilestone.autobuyerEternity.isReached||ue.mendingUnlocked()}get mode(){return this.data.mode}set mode(e){this.data.mode=e}get amount(){return this.data.amount}get increaseWithMult(){return this.data.increaseWithMult}set increaseWithMult(e){this.data.increaseWithMult=e}set amount(e){this.data.amount=e}get time(){return this.data.time}set time(e){this.data.time=e}get xHighest(){return this.data.xHighest}set xHighest(e){this.data.xHighest=e}get hasAdditionalModes(){return RealityUpgrade(13).isBought}autoEternitiesAvailable(e){return(e||EternityMilestone.autoEternities.isReached)&&!Player.isInAnyChallenge&&!player.dilation.active&&player.auto.autobuyersOn&&this.data.isActive&&this.mode===AUTO_ETERNITY_MODE.AMOUNT&&this.amount.equals(0)}bumpAmount(e){this.isUnlocked&&this.increaseWithMult&&(this.amount=this.amount.times(e))}get highestPrevPrestige(){return player.records.thisReality.maxEP}get timeToNextTick(){return Math.clampMin(this.time-Time.thisEternityRealTime.totalSeconds.toNumber(),0)}get willEternity(){var e;if(EternityChallenge.isRunning)return!(null!==(e=EternityChallenge.current)&&void 0!==e&&e.gainedCompletionStatus.hasMoreCompletions);switch(this.mode){case AUTO_ETERNITY_MODE.AMOUNT:return gainedEternityPoints().gte(this.amount);case AUTO_ETERNITY_MODE.TIME:return Time.thisEternityRealTime.totalSeconds.gt(this.time);case AUTO_ETERNITY_MODE.X_HIGHEST:default:return gainedEternityPoints().gte(this.highestPrevPrestige.times(this.xHighest))}}tick(){this.willEternity&&eternity(!1,!0)}reset(){EternityMilestone.autobuyerEternity.isReached||(this.isActive=!1)}}class fK extends yu{get data(){return player.auto.galaxy}get name(){return"Antimatter Galaxy"}get isUnlocked(){return!!ue.mendingUnlocked()||!Pelle.isDisabled("galaxyAutobuyer")&&this.canBeUpgraded}get canBeUpgraded(){return NormalChallenge(11).isCompleted||ue.mendingUnlocked()}get baseInterval(){return Player.defaultStart.auto.galaxy.interval}get limitGalaxies(){return this.data.limitGalaxies}set limitGalaxies(e){this.data.limitGalaxies=e}get maxGalaxies(){return this.data.maxGalaxies}set maxGalaxies(e){this.data.maxGalaxies=e}get buyMaxInterval(){return this.data.buyMaxInterval}set buyMaxInterval(e){this.data.buyMaxInterval=e}get isBuyMaxUnlocked(){return EternityMilestone.autobuyMaxGalaxies.isReached}get interval(){return this.isBuyMaxUnlocked?TimeSpan.fromSeconds(this.buyMaxInterval).totalMilliseconds.toNumber():super.interval}get canTick(){return Galaxy.canBeBought&&Galaxy.requirement.isSatisfied&&super.canTick}get resetTickOn(){return PRESTIGE_EVENT.INFINITY}tick(){super.tick();const e=this.limitGalaxies?this.maxGalaxies:Number.MAX_VALUE;requestGalaxyReset(this.isBuyMaxUnlocked,e)}}class gK extends mu{get name(){return ImaginaryUpgrade(this.id).config.name}get data(){return player.auto.imaginaryUpgrades.all[this.id-1]}get isUnlocked(){return ImaginaryUpgrade(20).canBeApplied}get hasUnlimitedBulk(){return!0}tick(){const e=ImaginaryUpgrade(this.id);while(Currency.imaginaryMachines.gte(e.cost)&&!(this.id<=10&&player.mending.corruptionChallenge.corruptedMend&&ye.repSing.hiddenFour[player.mending.corruption[8]]))e.purchase()}static get entryCount(){return 10}static get autobuyerGroupName(){return"Imaginary Upgrade"}static get isActive(){return player.auto.imaginaryUpgrades.isActive}static set isActive(e){player.auto.imaginaryUpgrades.isActive=e}}class vK extends pu{get tier(){return this.id}get dimension(){return InfinityDimension(this.tier)}get name(){return this.dimension.shortDisplayName}get fullName(){return`${this.name} Infinity Dimension`}get data(){return player.auto.infinityDims.all[this.tier-1]}get interval(){return 1e3*Perk.autobuyerFasterID.effectOrDefault(1)/PerkShopUpgrade.autoSpeed.effectOrDefault(1)}get isUnlocked(){return EternityMilestone[`autobuyerID${this.tier}`].isReached||PelleUpgrade.IDAutobuyers.canBeApplied||ue.mendingUnlocked()}get resetTickOn(){return PRESTIGE_EVENT.ETERNITY}get hasUnlimitedBulk(){return!0}get canTick(){return InfinityDimensions.canAutobuy()&&this.dimension.isAvailableForPurchase&&super.canTick}tick(){super.tick(),this.dimension.buyMax(!0)}static get entryCount(){return 8}static get autobuyerGroupName(){return"Infinity Dimension"}static get isActive(){return player.auto.infinityDims.isActive}static set isActive(e){player.auto.infinityDims.isActive=e}}class bK extends mu{get data(){return player.auto.ipMultBuyer}get name(){return"Infinity Point Multiplier"}get isUnlocked(){return EternityMilestone.autobuyerIPMult.isReached&&!Pelle.isDoomed||ue.mendingUnlocked()}get hasUnlimitedBulk(){return!0}tick(){InfinityUpgrade.ipMult.buyMax()}}class EK extends mu{get data(){return player.auto.epMultBuyer}get name(){return"Eternity Point Multiplier"}get isUnlocked(){return RealityUpgrade(13).isBought&&!Pelle.isDoomed||ue.mendingUnlocked()}get hasUnlimitedBulk(){return!0}tick(){this.isActive&&(applyEU2(),EternityUpgrade.epMult.buyMax(!0))}}class TK extends mu{get data(){return player.auto.reality}get name(){return"Reality"}get isUnlocked(){return RealityUpgrade(25).isBought}get canTick(){return super.canTick&&!GlyphSelection.active}get mode(){return this.data.mode}set mode(e){this.data.mode=e}get rm(){return this.data.rm}set rm(e){this.data.rm=e}get glyph(){return this.data.glyph}set glyph(e){this.data.glyph=e}get time(){return this.data.time}set time(e){this.data.time=e}get shard(){return this.data.shard}set shard(e){this.data.shard=e.clamp(0,Number.MAX_VALUE).toNumber()}toggleMode(){this.mode=[AUTO_REALITY_MODE.RM,AUTO_REALITY_MODE.GLYPH,AUTO_REALITY_MODE.EITHER,AUTO_REALITY_MODE.BOTH,AUTO_REALITY_MODE.TIME,AUTO_REALITY_MODE.RELIC_SHARD].nextSibling(this.mode)}bumpAmount(e){this.isUnlocked&&(this.rm=this.rm.times(e))}tick(){const e=EffarigUnlock.glyphFilter.isUnlocked&&!player.reality.hasCheckedFilter;if(isRealityAvailable()&&player.options.autoRealityForFilter&&e){const e=GlyphSelection.glyphList(GlyphSelection.choiceCount,gainedGlyphLevel(),{isChoosingGlyph:!1}),t=AutoGlyphProcessor.pick(e);if(player.reality.hasCheckedFilter=!0,!AutoGlyphProcessor.wouldKeep(t))return void autoReality()}let t=!1;const i=simulatedRealityCount(!1)+1,a=MachineHandler.gainedRealityMachines.times(i).gte(this.rm),n=gainedGlyphLevel().actualLevel>=Math.min(this.glyph,Glyphs.levelCap);switch(this.mode){case AUTO_REALITY_MODE.RM:t=a;break;case AUTO_REALITY_MODE.GLYPH:t=n;break;case AUTO_REALITY_MODE.EITHER:t=a||n;break;case AUTO_REALITY_MODE.BOTH:t=a&&n;break;case AUTO_REALITY_MODE.TIME:t=new Decimal(player.records.thisReality.realTime).toNumber()/1e3>this.time;break;case AUTO_REALITY_MODE.RELIC_SHARD:t=Effarig.shardsGained.times(i).gt(this.shard);break}t&&autoReality()}}class wK extends mu{get name(){return RealityUpgrade(this.id).config.name}get data(){return player.auto.realityUpgrades.all[this.id-1]}get isUnlocked(){return!!MendingMilestone.three.isReached||Ra.unlocks.instantECAndRealityUpgradeAutobuyers.canBeApplied}get hasUnlimitedBulk(){return!0}tick(){const e=RealityUpgrade(this.id);while(Currency.realityMachines.gte(e.cost)&&!(this.id<=5&&player.mending.corruptionChallenge.corruptedMend&&ye.repSing.hiddenFour[player.mending.corruption[8]]))e.purchase()}static get entryCount(){return 5}static get autobuyerGroupName(){return"Reality Upgrade"}static get isActive(){return player.auto.realityUpgrades.isActive}static set isActive(e){player.auto.realityUpgrades.isActive=e}}class kK extends mu{get data(){return player.auto.replicantiGalaxies}get name(){return"Replicanti Galaxy"}get isUnlocked(){return EternityMilestone.autobuyerReplicantiGalaxy.isReached||ue.mendingUnlocked()}get isEnabled(){return Achievement(138).isUnlocked||!TimeStudy(131).isBought}get hasUnlimitedBulk(){return Achievement(126).isUnlocked}tick(){this.isEnabled&&replicantiGalaxy(!0)}}class CK extends pu{get _upgradeName(){return["chance","interval","galaxies"][this.id-1]}get name(){return`Replicanti ${["Chance","Interval","Max Galaxies"][this.id-1]}`}get data(){return player.auto.replicantiUpgrades.all[this.id-1]}get interval(){return 1e3*Perk.autobuyerFasterReplicanti.effectOrDefault(1)/PerkShopUpgrade.autoSpeed.effectOrDefault(1)}get isUnlocked(){return ReplicantiUpgrade[this._upgradeName].autobuyerMilestone.isReached||PelleUpgrade.replicantiAutobuyers.canBeApplied||ue.mendingUnlocked()}get resetTickOn(){return PRESTIGE_EVENT.ETERNITY}get hasUnlimitedBulk(){return!0}tick(){EternityChallenge(8).isRunning||(super.tick(),ReplicantiUpgrade[this._upgradeName].autobuyerTick())}static get entryCount(){return 3}static get autobuyerGroupName(){return"Replicanti Upgrade"}static get isActive(){return player.auto.replicantiUpgrades.isActive}static set isActive(e){player.auto.replicantiUpgrades.isActive=e}}class AK extends mu{get data(){return player.auto.sacrifice}get name(){return"Dimensional Sacrifice"}get isUnlocked(){return EternityMilestone.autoIC.isReached||InfinityChallenge(2).isCompleted||ue.mendingUnlocked()}get multiplier(){return this.data.multiplier}set multiplier(e){this.data.multiplier=e}get bulk(){return 0}get hasInput(){return!0}get inputType(){return"decimal"}get inputEntry(){return"multiplier"}get description(){return"Multiplier"}tick(){Sacrifice.nextBoost.lt(Decimal.max(this.multiplier,1.01))||sacrificeReset()}}class _K extends mu{get data(){return player.auto.singularity}get name(){return"Singularity"}get isUnlocked(){return SingularityMilestone.autoCondense.canBeApplied||player.celestials.ra.permanentMemories.lai65}get bulk(){return Singularity.singularitiesGained}tick(){Currency.darkEnergy.value>=Singularity.cap*SingularityMilestone.autoCondense.effectValue&&Singularity.perform()}}class SK extends yu{get data(){return player.auto.tickspeed}get name(){return"Tickspeed"}get isUnlocked(){return!!ue.mendingUnlocked()||!Pelle.isDisabled("tickspeedAutobuyer")&&this.canBeUpgraded}get canBeUpgraded(){return NormalChallenge(9).isCompleted||ue.mendingUnlocked()}get baseInterval(){return Player.defaultStart.auto.tickspeed.interval}get isBought(){return this.data.isBought}get antimatterCost(){return b.E140}get canBeBought(){return!Pelle.isDoomed||ue.mendingUnlocked()}get disabledByContinuum(){return Laitela.continuumActive}get mode(){return this.data.mode}set mode(e){this.data.mode=e}get hasUnlimitedBulk(){return this.mode===AUTOBUYER_MODE.BUY_MAX}get canUnlockSlowVersion(){return player.records.thisEternity.maxAM.gte(this.antimatterCost)}toggleMode(){this.mode=[AUTOBUYER_MODE.BUY_SINGLE,AUTOBUYER_MODE.BUY_MAX].nextSibling(this.mode)}get canTick(){return Tickspeed.isAvailableForPurchase&&Tickspeed.isAffordable&&super.canTick}tick(){switch(super.tick(),this.mode){case AUTOBUYER_MODE.BUY_SINGLE:buyTickSpeed();break;case AUTOBUYER_MODE.BUY_MAX:buyMaxTickSpeed();break}}purchase(){this.canUnlockSlowVersion&&(this.data.isBought=!0)}get resetTickOn(){return Perk.antimatterNoReset.canBeApplied?PRESTIGE_EVENT.ANTIMATTER_GALAXY:PRESTIGE_EVENT.DIMENSION_BOOST}reset(){super.reset(),EternityMilestone.keepAutobuyers.isReached||PelleUpgrade.keepAutobuyers.canBeApplied||(this.data.mode=AUTOBUYER_MODE.BUY_SINGLE,this.data.isUnlocked=!1,this.data.isBought=!1,TabNotification.newAutobuyer.clearTrigger())}}class DK extends pu{get tier(){return this.id}get name(){return TimeDimension(this.tier).shortDisplayName}get fullName(){return`${this.name} Time Dimension`}get data(){return player.auto.timeDims.all[this.tier-1]}get interval(){return 1e3/PerkShopUpgrade.autoSpeed.effectOrDefault(1)}get isUnlocked(){return RealityUpgrade(13).isBought&&(!Pelle.isDoomed||PelleUpgrade.TDAutobuyers.canBeApplied)||ue.mendingUnlocked()}get resetTickOn(){return PRESTIGE_EVENT.REALITY}get hasUnlimitedBulk(){return!0}tick(){applyEU2(),Autobuyer.epMult.tick();const e=this.tier;TimeDimension(e).isAvailableForPurchase&&(super.tick(),Currency.eternityPoints.exponent>=10?buyMaxTimeDimension(e,1,!0):buySingleTimeDimension(e,!0))}static get entryCount(){return 8}static get autobuyerGroupName(){return"Time Dimension"}static get isActive(){return player.auto.timeDims.isActive}static set isActive(e){player.auto.timeDims.isActive=e}}class RK extends mu{get data(){return player.auto.timeTheorems}get name(){return"Time Theorem"}get isUnlocked(){return Perk.ttBuySingle.isBought&&!Pelle.isDisabled("timeTheoremAutobuyer")||ue.mendingUnlocked()}get hasUnlimitedBulk(){return Perk.ttBuyMax.canBeApplied}tick(){this.hasUnlimitedBulk?TimeTheorems.buyMax(!0):TimeTheorems.buyOneOfEach()}}const MK={addToQueue(e){ui.view.quotes.queue.push(e),ui.view.quotes.current||this.advanceQueue()},advanceQueue(){ui.view.quotes.current=ui.view.quotes.queue.shift()},showHistory(e){ui.view.quotes.history=e},clearQueue(){ui.view.quotes.queue=[],ui.view.quotes.current=void 0},clearHistory(){ui.view.quotes.history=void 0},clearAll(){this.clearQueue(),this.clearHistory()},get isOpen(){return void 0!==ui.view.quotes.current},get isHistoryOpen(){return void 0!==ui.view.quotes.history}};function IK(e){const t=e.map((e=>e[1])).sum(),i=Date.now()/1e3%t,a=e[0][1]/2;let n=0;for(let s=0;s0)){if(l<=a){const e=.5*l/a;return[[t[0],.5-e],[r[0],.5+e]]}if(-c<=a){const e=.5*c/a;return[[r[0],.5-e],[o[0],.5+e]]}return[[r[0],1]]}n+=r[1]}throw new Error("Could not blend celestial fractions in Quote modal")}class xK{constructor(e,t){var i;this._parent=t,this._showCelestialName=null===(i=e.showCelestialName)||void 0===i||i,this._celestialArray=e.background?()=>IK(e.background):[[t.celestial,1]];const a=/\$([0-9]+)/g;this._line="string"===typeof e?e:()=>e.text.replaceAll(a,((t,i)=>P.wordCycle(e[i])))}get line(){return"function"===typeof this._line?this._line():this._line}get celestials(){return"function"===typeof this._celestialArray?this._celestialArray():this._celestialArray}get celestialSymbols(){return this.celestials.map((e=>Celestials[e[0]].symbol))}get showCelestialName(){return this._showCelestialName}get celestialName(){return Celestials[this._parent.celestial].displayName}}class PK extends _{constructor(e,t){super(e),this._celestial=t,this._lines=e.lines.map((e=>new xK(e,this)))}get bits(){return player.celestials[this._celestial].quoteBits}set bits(e){player.celestials[this._celestial].quoteBits=e}get requirement(){var e,t;return null===(e=(t=this.config).requirement)||void 0===e?void 0:e.call(t)}get celestial(){return this._celestial}line(e){return this._lines[e]}get totalLines(){return this._lines.length}show(){this.unlock()}onUnlock(){this.present()}present(){MK.addToQueue(this)}}const GK={teresa:mapGameDataToObject(GameDatabase.celestials.quotes.teresa,(e=>new PK(e,"teresa"))),effarig:mapGameDataToObject(GameDatabase.celestials.quotes.effarig,(e=>new PK(e,"effarig"))),enslaved:mapGameDataToObject(GameDatabase.celestials.quotes.enslaved,(e=>new PK(e,"enslaved"))),v:mapGameDataToObject(GameDatabase.celestials.quotes.v,(e=>new PK(e,"v"))),ra:mapGameDataToObject(GameDatabase.celestials.quotes.ra,(e=>new PK(e,"ra"))),laitela:mapGameDataToObject(GameDatabase.celestials.quotes.laitela,(e=>new PK(e,"laitela"))),pelle:mapGameDataToObject(GameDatabase.celestials.quotes.pelle,(e=>new PK(e,"pelle"))),destroyer:mapGameDataToObject(GameDatabase.celestials.quotes.destroyer,(e=>new PK(e,"destroyer"))),kohler:mapGameDataToObject(GameDatabase.celestials.quotes.kohler,(e=>new PK(e,"kohler")))},UK={FREE_TICKSPEED_SOFTCAP:{id:0,price:TimeSpan.fromYears(1e35).totalMilliseconds,secondaryRequirement:()=>!0,description:()=>`Increase the softcap to Tickspeed upgrades from Time Dimensions by ${formatInt(1e5)}`},RUN:{id:1,price:TimeSpan.fromYears(1e40).totalMilliseconds,secondaryRequirement(){const e=player.records.bestReality.glyphLevel>=5e3,t=strengthToRarity(player.records.bestReality.glyphStrength)>=100;return e&&t},description(){const e=player.records.bestReality.glyphLevel>=5e3,t=strengthToRarity(player.records.bestReality.glyphStrength)>=100;return`Unlock The Nameless Ones' Reality (requires ${e?"[✓]":"[✗]"} a level\n ${formatInt(5e3)} Glyph and ${t?"[✓]":"[✗]"} a ${formatRarity(100)} rarity Glyph)`}}},BK={displayName:"The Nameless Ones",possessiveName:"The Nameless Ones'",boostReality:!1,BROKEN_CHALLENGES:[2,3,4,5,7,8,10,11,12],nextTickDiff:50,isReleaseTick:!1,autoReleaseTick:0,autoReleaseSpeed:new Decimal(0),timeCap:()=>player.celestials.ra.pets.enslaved.level>=30?Decimal.pow10(1e300):new Decimal(1e300),glyphLevelMin:5e3,currentBlackHoleStoreAmountPerMs:new Decimal(0),tachyonNerf:.3,toggleStoreBlackHole(){this.canModifyGameTimeStorage&&(player.celestials.enslaved.isStoring=!player.celestials.enslaved.isStoring,player.celestials.enslaved.isStoringReal=!1)},toggleStoreReal(){(this.canModifyRealTimeStorage||this.isStoredRealTimeCapped)&&(player.celestials.enslaved.isStoringReal=!player.celestials.enslaved.isStoringReal,player.celestials.enslaved.isStoring=!1)},toggleAutoStoreReal(){this.canModifyRealTimeStorage&&(player.celestials.enslaved.autoStoreReal=!player.celestials.enslaved.autoStoreReal)},get canModifyGameTimeStorage(){return BK.isUnlocked&&!Pelle.isDoomed&&!BlackHoles.arePaused&&!EternityChallenge(12).isRunning&&!BK.isRunning&&!Laitela.isRunning},get canModifyRealTimeStorage(){return BK.isUnlocked&&!Pelle.isDoomed},get isStoredRealTimeCapped(){return player.celestials.enslaved.storedReala&&(player.celestials.enslaved.isStoringReal=!1,player.celestials.enslaved.storedReal=a),player.celestials.enslaved.storedReal>864e5&&SecretAchievement(46).unlock(),player.lastUpdate=e},autoStoreRealTime(e){const t=this.storedRealTimeCap-player.celestials.enslaved.storedReal,i=Math.min(e,Math.max(0,t/this.storedRealTimeEfficiency));return player.celestials.enslaved.storedReal+=i*this.storedRealTimeEfficiency,player.lastUpdate+=i,e-i},canRelease(e){return!BK.isStoringRealTime&&!EternityChallenge(12).isRunning&&!Laitela.isRunning&&!(BK.isRunning&&e)&&!Pelle.isDoomed},useStoredTime(e){if(!this.canRelease(e))return;const t=player.requirementChecks.reality.slowestBH<=1e-300;if(ImaginaryUpgrade(24).isLockingMechanics&&Ra.isRunning&&t)return void(e||ImaginaryUpgrade(24).tryShowWarningModal("discharge your Black Hole"));player.requirementChecks.reality.slowestBH=1;let i=player.celestials.enslaved.stored;BK.isRunning&&(i=BK.storedTimeInsideEnslaved(i),Time.thisReality.totalYears+TimeSpan.fromMilliseconds(i).totalYears>1&&OK.storedTime.giveProgress()),e&&(i=i.times(.01)),this.nextTickDiff=Decimal.clampMax(i,this.timeCap()),this.isReleaseTick=!0;const a=i.div(50);player.celestials.ra.peakGamespeed=Decimal.max(player.celestials.ra.peakGamespeed,a),this.autoReleaseSpeed=i.div(5*player.options.updateRate),player.celestials.enslaved.stored=player.celestials.enslaved.stored.times(e?.99:0)},has(e){return player.celestials.enslaved.unlocks.includes(e.id)},canBuy(e){return new Decimal(player.celestials.enslaved.stored).gte(e.price)&&e.secondaryRequirement()&&!this.has(e)},buyUnlock(e){return!!this.canBuy(e)&&(e.id===UK.RUN.id&&this.quotes.unlockRun.show(),player.celestials.enslaved.stored=player.celestials.enslaved.stored.sub(e.price),player.celestials.enslaved.unlocks.push(e.id),!0)},initializeRun(){clearCelestialRuns(),player.celestials.enslaved.run=!0,player.celestials.enslaved.hasSecretStudy=!1,this.feltEternity=!1,AutomatorData.recalculateErrors(),AutomatorBackend.state.mode===AUTOMATOR_MODE.RUN&&AutomatorData.currentErrors().length&&(AutomatorBackend.stop(),GameUI.notify.error("This Reality forbids Black Holes! (Automator stopped)")),this.quotes.startRun.show()},get isRunning(){return player.celestials.enslaved.run},completeRun(){player.celestials.enslaved.completed=!0,EternityChallenge(1).completions>5&&(EternityChallenge(1).completions=5),this.quotes.completeReality.show()},get isCompleted(){return player.celestials.enslaved.completed},get canTickHintTimer(){return!OK.hintsUnlocked.hasProgress&&BK.has(UK.RUN)&&!BK.isCompleted},get isUnlocked(){return EffarigUnlock.eternity.isUnlocked},get realityBoostRatio(){return Math.max(1,Math.floor(player.celestials.enslaved.storedReal/Decimal.max(1e3,Time.thisRealityRealTime.totalMilliseconds).toNumber()))},get canAmplify(){return this.realityBoostRatio>1&&!Pelle.isDoomed&&!isInCelestialReality()},storedTimeInsideEnslaved(e){return e.lt(1e3)?e:Decimal.pow(10,Decimal.pow(Decimal.log10(e.div(1e3),.55))).times(1e3)},feelEternity(){this.feltEternity?Modal.message.show(`You have already exposed this crack in the Reality. Time in this Eternity is being multiplied\n by your Eternity count, up to a maximum of ${formatX(1e66)}.`,{closeEvent:GAME_EVENT.REALITY_RESET_AFTER},1):(OK.feelEternity.giveProgress(),this.feltEternity=!0,Modal.message.show(`Time in this Eternity will be multiplied by your Eternity count,\n up to a maximum of ${formatX(1e66)}.`,{closeEvent:GAME_EVENT.REALITY_RESET_AFTER},1))},get feltEternity(){return player.celestials.enslaved.feltEternity},set feltEternity(e){player.celestials.enslaved.feltEternity=e},get nextHintCost(){return TimeSpan.fromYears(1e40*Math.pow(3,this.hintCostIncreases)).totalMilliseconds},get hintCostIncreases(){const e=player.celestials.enslaved.zeroHintTime-Date.now();return Math.clampMin(e/TimeSpan.fromDays(1).totalMilliseconds,0)},spendTimeForHint(){return!player.celestials.enslaved.stored.lt(this.nextHintCost)&&(player.celestials.enslaved.stored=player.celestials.enslaved.stored.sub(this.nextHintCost),0===BK.hintCostIncreases?player.celestials.enslaved.zeroHintTime=Date.now()+TimeSpan.fromDays(1).totalMilliseconds.toNumber():player.celestials.enslaved.zeroHintTime+=TimeSpan.fromDays(1).totalMilliseconds.toNunber(),!0)},quotes:GK.enslaved,symbol:""};class NK extends _{get bits(){return player.celestials.enslaved.hintBits}set bits(e){player.celestials.enslaved.hintBits=e}get hasProgress(){return Boolean(player.celestials.enslaved.progressBits&1<new NK(e))),LK={get bought(){return player.celestials.enslaved.tesseracts},get extra(){return this.bought*(SingularityMilestone.tesseractMultFromSingularities.effectOrDefault(1)*eu(8).effectOrDefault(1)-1)},get effectiveCount(){return this.bought+this.extra},buyTesseract(){this.canBuyTesseract&&(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||player.celestials.enslaved.tesseracts++)},BASE_COSTS:[2,4,6,12,48,288,2304,23040,276480,3870720,61931520,1114767360],COST_SCALER:[0,0,0,2,4,6,8,10,12,14,16,18],costs(e){while(e>=this.BASE_COSTS.length){let e=this.COST_SCALER[this.COST_SCALER.length-1]+2,t=this.BASE_COSTS[this.BASE_COSTS.length-1]*e;this.BASE_COSTS.push(t),this.COST_SCALER.push(e)}return Decimal.pow10(1e7*this.BASE_COSTS[Math.floor(e)])},get nextCost(){return this.costs(this.bought)},get TesseractHardcap(){return 50},get canBuyTesseract(){return BK.isCompleted&&Currency.infinityPoints.gte(LK.nextCost)&&this.bought{Tab.celestials.enslaved.isOpen&&BK.quotes.initial.show()}));class FK extends mu{get data(){return player.auto.tesseract}get name(){return"Tesseract"}get isUnlocked(){return pl(7).isBought}get isEnabled(){return!0}get bulk(){return 0}tick(){LK.buyTesseract()}}class $K extends mu{get data(){return player.auto.musicglyph}get name(){return"Auto Purchase and Purge Music Glyphs"}get isUnlocked(){return hK.seven.isReached}get bulk(){return 0}tick(){Currency.perkPoints.gt(0)&&(jte.removeGlyph(GlyphGenerator.musicGlyph(),!0),Currency.perkPoints.subtract(1))}}class HK extends mu{get data(){return player.auto.nrru}get name(){return"Non-repeatable Reality Upgrade Autobuyer"}get isUnlocked(){return hK.eight.isReached}get bulk(){return 0}tick(){if(player.auto.nrru.isActive)for(let e=1;e<=20;e++)Currency.realityMachines.gte(hte(e+5).cost)&&!hte(e+5).isBought&&(hte(e+5).purchase(),hte(e+5).onPurchased())}}class qK extends mu{get data(){return player.auto.nriu}get name(){return"Non-repeatable Imaginary Upgrade Autobuyer"}get isUnlocked(){return hK.eight.isReached}get bulk(){return 0}tick(){if(player.auto.nriu.isActive)for(let e=1;e<=15;e++)Currency.imaginaryMachines.gte(Zae(e+10).cost)&&!Zae(e+10).isBought&&(Zae(e+10).purchase(),Zae(e+10).onPurchased())}}class VK extends mu{get _petName(){throw new NotImplementedError}get data(){return player.auto.pets[this._petName].upgrades[this.id-1]}get _upgradeName(){return["levelUp","purchaseChunkUpgrade","purchaseMemoryUpgrade"][this.id-1]}get name(){return["Level Up","Fragmentation","Recollection"][this.id-1]}get bulk(){return 0}static get entryCount(){return 3}get isUnlocked(){return player.celestials.ra.permanentMemories.ra2||UZ.pets.ra.level>=2}tick(){const e=this._petName,t=this._upgradeName;UZ.pets[e][t]()}}class YK extends VK{get _petName(){return"teresa"}get isUnlocked(){return Ra.unlocks.rautobuyers.isUnlocked||player.celestials.ra.permanentMemories.ra2}static get autobuyerGroupName(){return"Teresa's Memory"}static get isActive(){return player.auto.pets.teresa.isActive}static set isActive(e){player.auto.pets.teresa.isActive=e}}class WK extends VK{get _petName(){return"effarig"}get isUnlocked(){return Ra.unlocks.rautobuyers.isUnlocked||player.celestials.ra.permanentMemories.ra2}static get autobuyerGroupName(){return"Effarig's Memory"}static get isActive(){return player.auto.pets.effarig.isActive}static set isActive(e){player.auto.pets.effarig.isActive=e}}class jK extends VK{get _petName(){return"enslaved"}get isUnlocked(){return Ra.unlocks.rautobuyers.isUnlocked||player.celestials.ra.permanentMemories.ra2}static get autobuyerGroupName(){return"Nameless's Memory"}static get isActive(){return player.auto.pets.enslaved.isActive}static set isActive(e){player.auto.pets.enslaved.isActive=e}}class XK extends VK{get _petName(){return"v"}get isUnlocked(){return Ra.unlocks.rautobuyers.isUnlocked||player.celestials.ra.permanentMemories.ra2}static get autobuyerGroupName(){return"V's Memory"}static get isActive(){return player.auto.pets.v.isActive}static set isActive(e){player.auto.pets.v.isActive=e}}class zK extends VK{get _petName(){return"ra"}get isUnlocked(){return Ra.unlocks.rautobuyers.isUnlocked||player.celestials.ra.permanentMemories.ra2}static get autobuyerGroupName(){return"Ra's Memory"}static get isActive(){return player.auto.pets.ra.isActive}static set isActive(e){player.auto.pets.ra.isActive=e}}class KK extends VK{get _petName(){return"laitela"}get isUnlocked(){return Ra.unlocks.rautobuyers.isUnlocked||player.celestials.ra.permanentMemories.ra2}static get autobuyerGroupName(){return"Lai'tela's Memory"}static get isActive(){return player.auto.pets.laitela.isActive}static set isActive(e){player.auto.pets.laitela.isActive=e}}class ZK extends VK{get _petName(){return"pelle"}get isUnlocked(){return Ra.unlocks.rautobuyers.isUnlocked||player.celestials.ra.permanentMemories.ra2}static get autobuyerGroupName(){return"Pelle's Memory"}static get isActive(){return player.auto.pets.pelle.isActive}static set isActive(e){player.auto.pets.pelle.isActive=e}}class QK extends mu{get _upgradeName(){return["antimatterDimensionMult","timeSpeedMult","glyphLevels","infConversion","galaxyPower"][this.id-1]}get data(){return player.auto.pelleRebuyableUpgrades.all[this.id-1]}get name(){return["Antimatter Dimension Multiplier","Game Speed Multiplier","Allowed Glyph Level","Infinity Power Conversion Rate","Galaxy Power"][this.id-1]}get isUnlocked(){return UZ.unlocks.pelleAutobuyers.isUnlocked}get bulk(){return 0}tick(){const e=this._upgradeName;bQ[e].purchase()}static get entryCount(){return 5}static get autobuyerGroupName(){return"Rebuyable Pelle Upgrade"}static get isActive(){return player.auto.pelleRebuyableUpgrades.isActive}static set isActive(e){player.auto.pelleRebuyableUpgrades.isActive=e}}class JK extends mu{get data(){return player.auto.pelleUpgrades}get name(){return"Pelle Upgrades"}get isUnlocked(){return UZ.unlocks.pelleAutobuyers.isUnlocked}get bulk(){return 0}tick(){const e=bQ.singles.find((e=>e.canBeBought));void 0!=e&&e.purchase()}}class eZ extends mu{get _upgradeName(){return["additive","multiplicative","antimatterMult","IPMult","EPMult"][this.id-1]}get data(){return player.auto.galgenUpgrades.all[this.id-1]}get name(){return["Additive","Multiplicative","Antimatter","Infinity Point","Eternity Point"][this.id-1]}get isUnlocked(){return UZ.unlocks.pelleAutobuyers.isUnlocked&&Pelle.hasGalaxyGenerator}get bulk(){return 0}tick(){const e=this._upgradeName;DQ[e].purchase()}static get entryCount(){return 5}static get autobuyerGroupName(){return"Galaxy Generator Upgrade"}static get isActive(){return player.auto.galgenUpgrades.isActive}static set isActive(e){player.auto.galgenUpgrades.isActive=e}}class tZ extends mu{get data(){return player.auto.galgenSac}get name(){return"Galaxy Generator Sacrifice"}get isUnlocked(){return UZ.unlocks.pelleAutobuyers.isUnlocked&&Pelle.hasGalaxyGenerator}get bulk(){return 0}tick(){GalaxyGenerator.isCapped&&GalaxyGenerator.startSacrifice()}}class iZ extends yu{get data(){return player.auto.mending}get name(){return"Mend"}get isUnlocked(){return MendingUpgrade(20).isBought}get canBeUpgraded(){return!0}get baseInterval(){return 0}get mode(){return this.data.mode}set mode(e){this.data.mode=e}get hasAdditionalModes(){return!0}get increaseWithMult(){return this.data.increaseWithMult}set increaseWithMult(e){this.data.increaseWithMult=e}get amount(){return this.data.amount}get bulk(){return 0}set amount(e){this.data.amount=e}get time(){return this.data.time}set time(e){this.data.time=e}bumpAmount(e){this.isUnlocked&&this.increaseWithMult&&(this.amount=this.amount.times(e))}get canTick(){return Player.canMend&&super.canTick}get resetTickOn(){return PRESTIGE_EVENT.MENDING}get timeToNextTick(){return Math.clampMin(this.time-Time.thisMendRealTime.totalSeconds.toNumber(),0)}get willMend(){switch(this.mode){case AUTO_MEND_MODE.TIME:return Time.thisMendRealTime.totalSeconds.gt(this.time);case AUTO_MEND_MODE.AMOUNT:default:return gainedMendingPoints().gte(this.amount)}}tick(){super.tick(),this.willMend&&lK()}reset(){super.reset(),this.mode=AUTO_MEND_MODE.AMOUNT}}class aZ extends mu{get data(){return player.auto.singCap}get name(){return"Singularity Cap"}get isUnlocked(){return player.celestials.ra.permanentMemories.lai65}get multiplier(){return this.data.multiplier}set multiplier(e){e<1&&(e=1),this.data.multiplier=e}get bulk(){return 0}get hasInput(){return!0}get inputType(){return"float"}get inputEntry(){return"multiplier"}get description(){return"Auto condense time (ms)"}tick(){const e=hQ.cap/Currency.darkEnergy.productionPerSecond;ethis.multiplier/1e3*Math.sqrt(10)&&hQ.decreaseCap()}}const nZ={annihilation:new fu,antimatterDimension:gu.createAccessor(),bigCrunch:new vu,blackHolePower:bu.createAccessor(),expoBlackHolePower:Eu.createAccessor(),darkMatterDimsAscension:new Tu,darkMatterDims:new wu,dilationUpgrade:mK.createAccessor(),dimboost:new pK,eternity:new yK,galaxy:new fK,imaginaryUpgrade:gK.createAccessor(),infinityDimension:vK.createAccessor(),ipMult:new bK,epMult:new EK,reality:new TK,realityUpgrade:wK.createAccessor(),replicantiGalaxy:new kK,replicantiUpgrade:CK.createAccessor(),sacrifice:new AK,singularity:new _K,tickspeed:new SK,timeDimension:DK.createAccessor(),timeTheorem:new RK,tesseract:new FK,musicglyph:new $K,nrru:new HK,nriu:new qK,teresaMem:YK.createAccessor(),effarigMem:WK.createAccessor(),enslavedMem:jK.createAccessor(),vMem:XK.createAccessor(),raMem:zK.createAccessor(),laitelaMem:KK.createAccessor(),pelleMem:ZK.createAccessor(),rebuyablePelle:QK.createAccessor(),pelleUpgrade:new JK,galgenUpgrade:eZ.createAccessor(),galgenSac:new tZ,mending:new iZ,singCapInc:new aZ},sZ=function(){const e=nZ.antimatterDimension.zeroIndexed,t=nZ.infinityDimension.zeroIndexed,i=nZ.timeDimension.zeroIndexed,a=[e,t,i],n=[nZ.bigCrunch,nZ.eternity,nZ.reality,nZ.mending],s=[nZ.sacrifice,nZ.replicantiGalaxy,nZ.timeTheorem,nZ.ipMult,nZ.epMult,nZ.darkMatterDims,nZ.darkMatterDimsAscension,nZ.singularity,nZ.annihilation,nZ.tesseract,nZ.musicglyph,nZ.nrru,nZ.nriu,nZ.pelleUpgrade,nZ.galgenSac,nZ.singCapInc],r=[nZ.tickspeed,nZ.galaxy,nZ.dimboost].concat(s),o=[nZ.replicantiUpgrade.zeroIndexed,nZ.dilationUpgrade.zeroIndexed,nZ.blackHolePower.zeroIndexed,nZ.expoBlackHolePower.zeroIndexed,nZ.realityUpgrade.zeroIndexed,nZ.imaginaryUpgrade.zeroIndexed,nZ.teresaMem.zeroIndexed,nZ.effarigMem.zeroIndexed,nZ.enslavedMem.zeroIndexed,nZ.vMem.zeroIndexed,nZ.raMem.zeroIndexed,nZ.laitelaMem.zeroIndexed,nZ.pelleMem.zeroIndexed,nZ.rebuyablePelle.zeroIndexed,nZ.galgenUpgrade.zeroIndexed],l=a.concat(n,r,o),c=[nZ.antimatterDimension,nZ.infinityDimension,nZ.timeDimension,nZ.replicantiUpgrade,nZ.dilationUpgrade,nZ.blackHolePower,nZ.expoBlackHolePower,nZ.realityUpgrade,nZ.imaginaryUpgrade,nZ.teresaMem,nZ.effarigMem,nZ.enslavedMem,nZ.vMem,nZ.raMem,nZ.laitelaMem,nZ.pelleMem,nZ.rebuyablePelle,nZ.galgenUpgrade];return{all:l.flat(),display:[c,s],upgradeable:e.concat(nZ.tickspeed,nZ.dimboost,nZ.galaxy,nZ.bigCrunch),get unlocked(){return sZ.all.filter((e=>e.isUnlocked||e.isBought))},get hasAutobuyersForEditModal(){return[nZ.dimboost,nZ.galaxy,nZ.bigCrunch,nZ.eternity,nZ.reality,nZ.mending].some((e=>e.isUnlocked))},toggle(){player.auto.autobuyersOn=!player.auto.autobuyersOn},tick(){if(player.auto.autobuyersOn){PerformanceStats.start("Autobuyers");for(const e of sZ.all)e.canTick&&e.tick();PerformanceStats.end()}},resetTick(e){const t=sZ.all.filter((e=>void 0!==e.resetTick));for(const i of t)i.resetTick(e)},reset(){for(const e of sZ.all)e.reset()}}}();EventHub.logic.on(GAME_EVENT.ETERNITY_RESET_AFTER,(()=>sZ.reset())),EventHub.logic.on(GAME_EVENT.REALITY_RESET_AFTER,(()=>sZ.reset())),EventHub.logic.on(GAME_EVENT.MENDING_RESET_AFTER,(()=>sZ.reset())),EventHub.logic.on(GAME_EVENT.DIMBOOST_AFTER,(()=>sZ.resetTick(PRESTIGE_EVENT.DIMENSION_BOOST))),EventHub.logic.on(GAME_EVENT.GALAXY_RESET_AFTER,(()=>sZ.resetTick(PRESTIGE_EVENT.ANTIMATTER_GALAXY))),EventHub.logic.on(GAME_EVENT.BIG_CRUNCH_AFTER,(()=>sZ.resetTick(PRESTIGE_EVENT.INFINITY))),EventHub.logic.on(GAME_EVENT.ETERNITY_RESET_AFTER,(()=>sZ.resetTick(PRESTIGE_EVENT.ETERNITY))),EventHub.logic.on(GAME_EVENT.REALITY_RESET_AFTER,(()=>sZ.resetTick(PRESTIGE_EVENT.REALITY)));const rZ=function(){const e=Sm,t=e=>{const t=new e;return t.setAsCurrent=()=>{player.options.notation=t.name,ui.notationName=t.name},t},i=e=>(e.isPainful=!0,e);return{scientific:t(e.ScientificNotation),engineering:t(e.EngineeringNotation),letters:t(e.LettersNotation),standard:i(t(e.StandardNotation)),emoji:i(t(e.EmojiNotation)),mixedScientific:t(e.MixedScientificNotation),mixedEngineering:t(e.MixedEngineeringNotation),logarithm:t(e.LogarithmNotation),brackets:i(t(e.BracketsNotation)),infinity:t(e.InfinityNotation),roman:i(t(e.RomanNotation)),dots:i(t(e.DotsNotation)),zalgo:i(t(e.ZalgoNotation)),hex:i(t(e.HexNotation)),imperial:i(t(e.ImperialNotation)),clock:i(t(e.ClockNotation)),prime:i(t(e.PrimeNotation)),bar:i(t(e.BarNotation)),shi:i(t(e.ShiNotation)),blind:i(t(e.BlindNotation)),blobs:i(t(e.BlobsNotation)),all:i(t(e.AllNotation))}}();rZ.emoji.setAsCurrent=(e=!1)=>{player.options.notation=rZ.emoji.name,ui.notationName=rZ.emoji.name,e||GameUI.notify.success("😂😂😂")};const oZ={all:[rZ.scientific,rZ.engineering,rZ.letters,rZ.standard,rZ.emoji,rZ.mixedScientific,rZ.mixedEngineering,rZ.logarithm,rZ.brackets,rZ.infinity,rZ.roman,rZ.dots,rZ.zalgo,rZ.hex,rZ.imperial,rZ.clock,rZ.prime,rZ.bar,rZ.shi,rZ.blind,rZ.blobs,rZ.all],find:e=>{const t=oZ.all.find((t=>t.name===e));return void 0===t?rZ.mixedScientific:t},get current(){return GameUI.initialized?ui.notation:rZ.mixedScientific}};Sm.Settings.isInfinite=e=>ui.formatPreBreak&&e.gte(Decimal.NUMBER_MAX_VALUE),EventHub.logic.on(GAME_EVENT.GAME_TICK_AFTER,(()=>{ui.formatPreBreak=!PlayerProgress.hasBroken()||NormalChallenge.isRunning&&!Enslaved.isRunning}));const lZ={DIM1:0,DIM2:1,TICKSPEED:2,DIMBOOST:3,GALAXY:4,AUTOMATOR:5},cZ=[{id:lZ.DIM1,condition:()=>!0},{id:lZ.DIM2,condition:()=>Currency.antimatter.gte(100)},{id:lZ.TICKSPEED,condition:()=>AntimatterDimension(2).bought>0},{id:lZ.DIMBOOST,condition:()=>AntimatterDimension(4).amount.gte(20)},{id:lZ.GALAXY,condition:()=>AntimatterDimension(8).amount.gte(80)},{id:lZ.AUTOMATOR,condition:()=>Player.automatorUnlocked}],uZ={isActive(e){return 0===player.records.fullGameCompletions&&ui.view.tutorialState===e&&ui.view.tutorialActive},emphasizeH2P(){const e=player.tutorialState>lZ.DIMBOOST||player.dimensionBoosts>0;return 0===player.records.fullGameCompletions&&!e},turnOffEffect(e){e===player.tutorialState&&(player.tutorialActive=!1,ui.view.tutorialActive=!1,this.tutorialLoop())},moveOn(e){e===player.tutorialState&&(player.tutorialState++,ui.view.tutorialState++,player.tutorialActive=!0,ui.view.tutorialActive=!0)},tutorialLoop(){const e=cZ.find((e=>e.id===player.tutorialState+1));e&&e.condition()&&this.moveOn(player.tutorialState)}},dZ={startNewGame(){GameEnd.creditsClosed=!1,GameEnd.creditsEverClosed=!1,player.isGameEnd=!1,player.celestials.pelle.doomed=!1;const e=player.speedrun;if(e.isActive){player.speedrun.previousRuns[player.records.fullGameCompletions+1]={isSegmented:e.isSegmented,usedSTD:e.usedSTD,startDate:e.startDate,name:e.name,offlineTimeUsed:e.offlineTimeUsed,records:[...e.records],achievementTimes:JSON.parse(JSON.stringify(e.achievementTimes)),seedSelection:e.seedSelection,initialSeed:e.initialSeed};const t=Object.keys(e.previousRuns).map((e=>Number(e)));t.length>100&&(player.speedrun.previousRuns[t.min()]=void 0)}player.records.fullGameCompletions++,GlyphAppearanceHandler.unlockSet(),this.restartWithCarryover(),GameEnd.removeAdditionalEnd=!0,GameEnd.additionalEnd=15,setTimeout((()=>GameStorage.save()),1e4)},restartWithCarryover(){const e=JSON.stringify(player.options),t=player.secretUnlocks,i=JSON.stringify(player.secretAchievementBits),a=JSON.stringify(player.reality.automator.constants),n=JSON.stringify(player.reality.automator.scripts),s=player.records.fullGameCompletions,r=player.records.previousRunRealTime+player.records.realTimePlayed,o=JSON.stringify(player.reality.glyphs.cosmetics),l=JSON.stringify(player.speedrun.previousRuns),c=player.speedrun.isUnlocked;Modal.hideAll(),Quote.clearAll(),GameStorage.hardReset(),player.options=JSON.parse(e),player.options.confirmations.glyphSelection=!0,player.secretUnlocks=t,player.secretAchievementBits=JSON.parse(i),player.reality.automator.constants=JSON.parse(a),player.reality.automator.scripts=JSON.parse(n),player.records.fullGameCompletions=s,player.records.previousRunRealTime=r,ui.view.UIType=player.options.UIType,ui.view.news=player.options.news.enabled,player.reality.glyphs.cosmetics=JSON.parse(o),player.speedrun.previousRuns=JSON.parse(l),player.speedrun.isUnlocked=c,Themes.find(Theme.currentName()).set(),Notations.all.find((e=>e.name===player.options.notation)).setAsCurrent(),Sm.Settings.exponentCommas.show=player.options.commas,player.lastUpdate=Date.now()}},hZ={timePoured:0,lastUnlock:"shop",pouredAmountCap:1e24,displayName:"Teresa",possessiveName:"Teresa's",get isUnlocked(){return Achievement(147).isUnlocked},pourRM(e){if(this.pouredAmount>=hZ.pouredAmountCap)return;this.timePoured+=e;const t=Currency.realityMachines.value,i=Math.min(.01*(this.pouredAmount+1e6)*Math.pow(this.timePoured,2),t.toNumber());this.pouredAmount+=Math.min(i,hZ.pouredAmountCap-this.pouredAmount),Currency.realityMachines.subtract(i),this.checkForUnlocks()},checkForUnlocks(){for(const e of yZ.all)e.unlock()},initializeRun(){clearCelestialRuns(),player.celestials.teresa.run=!0},rewardMultiplier(e){return Decimal.max(Decimal.pow(e.plus(1).log10()/15e7,12),1).toNumber()},get pouredAmount(){return player.celestials.teresa.pouredAmount},set pouredAmount(e){player.celestials.teresa.pouredAmount=e},get fill(){return Math.min(Math.log10(this.pouredAmount)/24,1)},get possibleFill(){return Math.min(Currency.realityMachines.value.plus(this.pouredAmount).log10()/24,1)},get rmMultiplier(){return Math.max(250*Math.pow(this.pouredAmount/1e24,.1),1)},get runRewardMultiplier(){return this.rewardMultiplier(player.celestials.teresa.bestRunAM)===1/0?1e308:this.rewardMultiplier(player.celestials.teresa.bestRunAM)},get isRunning(){return player.celestials.teresa.run},get runCompleted(){return player.celestials.teresa.bestRunAM.gt(1)},quotes:GK.teresa,symbol:"Ϟ"};class mZ extends M{constructor(e){super(e),this.costCap=e.costCap}get currency(){return Currency.perkPoints}get boughtAmount(){return player.celestials.teresa.perkShop[this.id]}set boughtAmount(e){player.celestials.teresa.perkShop[this.id]=e}get isCapped(){return this.cost===this.costCap(this.bought)}get isAvailableForPurchase(){const e=!this.config.otherReq||this.config.otherReq();return this.cost<=this.currency.value&&e}onPurchased(){if(0===this.id&&GameCache.staticGlyphWeights.invalidate(),1===this.id&&Autobuyer.reality.bumpAmount(2),4!==this.id||fQ.isDoomed||(0===GameCache.glyphInventorySpace.value?(Currency.perkPoints.add(1),GameUI.notify.error("You have no empty inventory space!")):(Glyphs.addToInventory(GlyphGenerator.musicGlyph()),GameUI.notify.success("Created a Music Glyph"))),5===this.id&&!fQ.isDoomed){const e=GameCache.glyphInventorySpace.value;for(let t=0;t=this.price}get description(){return"function"===typeof this.config.description?this.config.description():this.config.description}onUnlock(){var e,t;null===(e=(t=this.config).onUnlock)||void 0===e||e.call(t)}}const yZ=mapGameDataToObject(xa.celestials.teresa.unlocks,(e=>new pZ(e))),fZ=mapGameDataToObject(xa.celestials.perkShop,(e=>new mZ(e)));EventHub.logic.on(GAME_EVENT.TAB_CHANGED,(()=>{Tab.celestials.teresa.isOpen&&hZ.quotes.initial.show()})),EventHub.logic.on(GAME_EVENT.GAME_LOAD,(()=>hZ.checkForUnlocks()));const gZ={get displayName(){return"???"},get possessiveName(){return"???'s"},get isUnlocked(){return!1},quotes:GK.kohler,get symbol(){return"?"},get unlockProgress(){let e=5,t=Math.min(15*Math.log10(CorruptionData.corruptionChallenge.recordScore)/Math.log10(5e7),15);if(e+=t,t<15)return parseFloat(e.toFixed(2));let i=Math.min(15*Math.ceil(CorruptionData.recordCorruptedFragments)/30,15);if(e+=i,i<15)return parseFloat(e.toFixed(2));let a=Math.min(30*(Math.log10(Decimal.log10(Mi.antimatter.value))-20)/5,30);return a<0&&(a=0),player.celestials.kohler.unlockMilestone[4]&&(a=30),e+=a,parseFloat(e.toFixed(2))},checkForUnlocks(){for(const e of bZ.all)e.unlock()},setUnlockProgress(){player.celestials.kohler.unlockProgress=this.unlockProgress()}};class vZ extends _{get bits(){return player.celestials.kohler.unlockProgress}set bits(e){player.celestials.kohler.unlockProgress=e}get isEffectActive(){return this.isUnlocked}get isUnlocked(){if(player.celestials.kohler.unlockMilestone[this.config.id])return!0;let e="function"===typeof this.config.condition?this.config.condition():this.config.condition;return e&&(player.celestials.kohler.unlockMilestone[this.config.id]=!0), -/*!this.isUnlocked &&*/e}get description(){return"function"===typeof this.config.description?this.config.description():this.config.description}onUnlock(){var e,t;null===(e=(t=this.config).onUnlock)||void 0===e||e.call(t)}}const bZ=mapGameDataToObject(xa.mending.kohlerUnlockProgress.progressUnlocks,(e=>new vZ(e)));EventHub.logic.on(GAME_EVENT.GAME_LOAD,(()=>gZ.checkForUnlocks()));const EZ={INFINITY:1,ETERNITY:2,REALITY:3,COMPLETED:4,MEND:5,MEND_COMPLETED:6},TZ={displayName:"Effarig",possessiveName:"Effarig's",initializeRun(){clearCelestialRuns(),player.celestials.effarig.run=!0,recalculateAllGlyphs(),Tab.reality.glyphs.show(!1)},get isRunning(){return player.celestials.effarig.run},get currentStage(){return kZ.infinity.isUnlocked?kZ.eternity.isUnlocked?kZ.reality.isUnlocked?Ra.unlocks.effarigMendUnlock.isUnlocked?kZ.mend.isUnlocked?EZ.MEND_COMPLETED:EZ.MEND:EZ.COMPLETED:EZ.REALITY:EZ.ETERNITY:EZ.INFINITY},get currentStageName(){switch(this.currentStage){case EZ.INFINITY:return"Infinity";case EZ.ETERNITY:return"Eternity";case EZ.REALITY:case EZ.COMPLETED:return"Reality";case EZ.MEND:return"Mend";default:return""}},get eternityCap(){return this.isRunning&&this.currentStage===EZ.ETERNITY?b.E50:void 0},get glyphLevelCap(){switch(this.currentStage){case EZ.INFINITY:return 100;case EZ.ETERNITY:return 1500;case EZ.REALITY:return 2e3;case EZ.MEND:return 3500;default:return 1e4}},get glyphEffectAmount(){const e=Glyphs.activeWithoutCompanion.filter((e=>generatedTypes.includes(e.type))).reduce(((e,t)=>e|t.effects),0),t=Glyphs.activeWithoutCompanion.filter((e=>!generatedTypes.includes(e.type))).reduce(((e,t)=>e|t.effects),0);return countValuesFromBitmask(e)+countValuesFromBitmask(t)},get shardsGained(){return TeresaUnlocks.effarig.canBeApplied?Decimal.floor(Decimal.pow(Currency.eternityPoints.exponent/7500,this.glyphEffectAmount)).times(AlchemyResource.effarig.effectValue):new Decimal(0)},get maxRarityBoost(){return 5*Math.log10(Decimal.log10(Currency.relicShards.value.plus(10)))},nerfFactor(e){let t;switch(this.currentStage){case EZ.INFINITY:t=1500;break;case EZ.ETERNITY:t=29.29;break;case EZ.MEND:t=6e3;break;case EZ.REALITY:default:t=25;break}return 3*(1-t/(t+Math.sqrt(e.pLog10())))},get tickDilation(){return.7+.1*this.nerfFactor(Currency.timeShards.value)},get multDilation(){return.25+.25*this.nerfFactor(Currency.infinityPower.value)},get tickspeed(){const e=3+Tickspeed.baseValue.reciprocal().log10();return Decimal.pow10(Math.pow(e,this.tickDilation)).reciprocal()},multiplier(e){const t=new Decimal(e).pLog10();return Decimal.pow10(Math.pow(t,this.multDilation))},get bonusRG(){return Math.floor(replicantiCap().pLog10()/LOG10_MAX_VALUE-1)},quotes:GK.effarig,symbol:"Ϙ"};class wZ extends _{get bits(){return player.celestials.effarig.unlockBits}set bits(e){player.celestials.effarig.unlockBits=e}get cost(){return this.config.cost}get isEffectActive(){return!Pelle.isDisabled("effarig")}purchase(){var e,t;!this.isUnlocked&&Currency.relicShards.purchase(this.cost)&&(this.unlock(),null===(e=(t=this.config).onPurchased)||void 0===e||e.call(t))}}const kZ=mapGameDataToObject(xa.celestials.effarig.unlocks,(e=>new wZ(e)));EventHub.logic.on(GAME_EVENT.TAB_CHANGED,(()=>{Tab.celestials.effarig.isOpen&&TZ.quotes.initial.show()})),EventHub.logic.on(GAME_EVENT.BIG_CRUNCH_BEFORE,(()=>{TZ.isRunning&&TZ.quotes.completeInfinity.show()})),EventHub.logic.on(GAME_EVENT.ETERNITY_RESET_BEFORE,(()=>{TZ.isRunning&&TZ.quotes.completeEternity.show()}));class CZ extends A{get completions(){const e=player.celestials.v.runUnlocks[this.id];return void 0===e?0:e}get conditionBaseValue(){const e=this.config.values[this.completions];return void 0===e?this.config.values[this.completions-1]:e}get canBeReduced(){return this.completions0)}get reductionCost(){const e=this.config.reductionStepSize?this.config.reductionStepSize:1;if(this.config.isHard){const t=(Math.pow(1.15,e)-1)/.15;return t*RZ.nextHardReductionCost(player.celestials.v.goalReductionSteps[this.id])}if(this.config.isSuperHard){const t=(Math.pow(1.5,e)-1)/.5;return t*RZ.nextSuperHardReductionCost(player.celestials.v.goalReductionSteps[this.id])}return e*RZ.nextNormalReductionCost()}get tiersReduced(){return player.celestials.v.goalReductionSteps[this.id]/100}get reduction(){const e=this.conditionBaseValue;return Math.clamp(this.config.shardReduction(this.tiersReduced),0,this.config.maxShardReduction(e))}get conditionValue(){let e=this.conditionBaseValue;return this.isReduced?(e-=this.reduction,e):e}get formattedDescription(){return this.config.description(this.conditionValue)}set completions(e){player.celestials.v.runUnlocks[this.id]=e}tryComplete(){const e=player.celestials.v,t=this.config.currentValue();this.config.condition()&&Decimal.gte(t,e.runRecords[this.id])&&(e.runRecords[this.id]=t,e.runGlyphs[this.id]=Ete.copyForRecords(Ete.active.filter((e=>null!==e))));let i=0;while(this.completionsnew AZ(e))),RZ={displayName:"V",possessiveName:"V's",spaceTheorems:0,checkForUnlocks(){for(const e of DZ.all)e!==DZ.vAchievementUnlock&&e.unlock();if(this.isRunning){for(const e of SZ.all)e.tryComplete();this.spaceTheorems>=36&&Cm(22).tryComplete()}if(this.isSuperRunning)for(const e of SZ.all)e.tryComplete();DZ.raUnlock.canBeApplied&&!Ra.unlocks.autoTP.canBeApplied&&Ra.checkForUnlocks()},get canUnlockCelestial(){return DZ.vAchievementUnlock.canBeUnlocked},unlockCelestial(){player.celestials.v.unlockBits|=1<=6&&i<12&&(e+=player.celestials.v.runUnlocks[i]*t),i>=12&&(e+=4*player.celestials.v.runUnlocks[i]*t);this.spaceTheorems=e},reset(){player.celestials.v={unlockBits:0,run:!1,quotes:[],runUnlocks:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],goalReductionSteps:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],STSpent:0,runGlyphs:[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],runRecords:[-10,0,0,0,0,0,-10,0,0,0,0,0,0,0,0,0,0,0]},this.spaceTheorems=0},get availableST(){return RZ.spaceTheorems-player.celestials.v.STSpent},get isRunning(){return player.celestials.v.run},get isSuperRunning(){return player.celestials.v.superrun},get beingInitialized(){return player.celestials.v.beingInitialized},get isFlipped(){return Ra.unlocks.unlockHardV.isUnlocked},get isSuperFlipped(){return Ra.unlocks.unlockSHardV.isUnlocked},get isFullyCompleted(){let e=pl(14).isBought?198:66;return Ra.unlocks.unlockSHardV.isUnlocked&&(e=pl(14).isBought?648:216),this.spaceTheorems>=e},nextNormalReductionCost(){return 1e3},nextHardReductionCost(e){return 1e3*Math.pow(1.15,e)},nextSuperHardReductionCost(e){return 1e20*Math.pow(1.5,e)},quotes:GK.v,symbol:"⌬"};EventHub.logic.on(GAME_EVENT.TAB_CHANGED,(()=>{Tab.celestials.v.isOpen&&RZ.quotes.initial.show()}));const MZ=oa.find((e=>306===e.id));class IZ extends _{get bits(){return player.celestials.ra.unlockBits}set bits(e){player.celestials.ra.unlockBits=e}get modBits(){return player.celestials.ra.modUnlockBits}set modBits(e){player.celestials.ra.modUnlockBits=e}get disabledByPelle(){return Pelle.isDoomed&&this.config.disabledByPelle}get isEffectActive(){return this.isUnlocked&&!this.disabledByPelle}get requirementText(){const e=this.pet.name;return 1===this.level?`Unlock ${e}`:`Get ${e} to level ${this.level}`}get reward(){return"function"===typeof this.config.reward?this.config.reward():this.config.reward}get displayIcon(){return this.disabledByPelle?'':this.config.displayIcon}get pet(){return UZ.pets[this.config.pet]}get level(){return this.config.level}get canBeUnlocked(){if("laitela"==this.pet.id){if(20==this.id&&player.celestials.ra.permanentMemories.lai50)return!0;if(21==this.id&&player.celestials.ra.permanentMemories.lai65)return!0}return!("ra"!=this.pet.id||30!=this.id||!player.celestials.ra.permanentMemories.ra2)||this.pet.level>=this.level&&!this.isUnlocked}onUnlock(){var e,t;null===(e=(t=this.config).onUnlock)||void 0===e||e.call(t)}}const xZ=mapGameDataToObject(GameDatabase.celestials.ra.unlocks,(e=>new IZ(e)));class PZ extends A{get data(){return player.celestials.ra.pets[this.id]}get name(){return this.config.name}get chunkGain(){return this.config.chunkGain}get memoryGain(){return this.config.memoryGain}get secondaryMemoryChunkGain(){return this.config.secondaryMemoryChunkGain}get color(){return this.config.color}get requiredUnlock(){var e,t;return null===(e=(t=this.config).requiredUnlock)||void 0===e?void 0:e.call(t)}get rawMemoryChunksPerSecond(){return this.config.rawMemoryChunksPerSecond()}get memoryProductionMultiplier(){return this.config.memoryProductionMultiplier()}get isUnlocked(){return void 0===this.requiredUnlock||this.requiredUnlock.isUnlocked}get isCapped(){return this.level>=UZ.levelCap}get level(){return this.isUnlocked?this.data.level:0}set level(e){this.data.level=e}get memories(){return this.data.memories}set memories(e){this.data.memories=Math.min(e,1e300)}get memoryChunks(){return this.data.memoryChunks}set memoryChunks(e){this.data.memoryChunks=Math.min(1e300,e)}get requiredMemories(){return UZ.requiredMemoriesForLevel(this,this.level)}get memoryChunksPerSecond(){if(!this.canGetMemoryChunks)return 0;let e=this.rawMemoryChunksPerSecond*this.chunkUpgradeCurrentMult*Math.max(Effects.product(UZ.unlocks.continuousTTBoost.effects.memoryChunks,GlyphSacrifice.reality),1);return this.hasRemembrance?e*=UZ.remembrance.multiplier:UZ.petWithRemembrance&&(e*=UZ.remembrance.nerf),e*=WarpUpgrade(5).effectOrDefault(1),UZ.unlocks.raXP.isUnlocked&&(e*=Math.log10(Math.max(Currency.imaginaryMachines.value,1))),UZ.unlocks.pelleXP.isUnlocked&&(e*=Math.log10(player.records.bestReality.remWithoutGG+1)/1.6667+1),!UZ.isRunning&&UZ.unlocks.generateMemChunksOutOfRasReality.isUnlocked&&(e/=100),e}get canGetMemoryChunks(){return this.isUnlocked&&(UZ.isRunning||"pelle"===this.id&&Pelle.isDoomed||UZ.unlocks.generateMemChunksOutOfRasReality.isUnlocked)&&this.level=.5*UZ.requiredMemoriesForLevel(this,UZ.levelCap-1)}get chunkUpgradeCapped(){return this.chunkUpgradeCost>=.5*UZ.requiredMemoriesForLevel(this,UZ.levelCap-1)}purchaseMemoryUpgrade(){this.canBuyMemoryUpgrade&&!this.memoryUpgradeCapped&&(this.spendsMemories&&(this.memories-=this.memoryUpgradeCost),this.data.memoryUpgrades++)}purchaseChunkUpgrade(){this.canBuyChunkUpgrade&&!this.chunkUpgradeCapped&&(this.spendsMemories&&(this.memories-=this.chunkUpgradeCost),this.data.chunkUpgrades++)}levelUp(){this.memoriese.pet===this)).sort(((e,t)=>e.level-t.level))}tick(e,t){const i=e/1e3,a=t?i*this.memoryChunksPerSecond:0;let n=Math.pow((this.memoryChunks+a/2)*UZ.productionPerMemoryChunk*this.memoryUpgradeCurrentMult*this.shopMemMultEffect,pl(15).isBought?1.5:1)*(Pelle.isDoomed&&UZ.unlocks.boostMemoryGain.isUnlocked?500:1);if(eu(1).isBought)switch(UZ.currentCelestial){case 1:"teresa"==this.id&&(n*=1500);break;case 2:"effarig"==this.id&&(n*=1500);break;case 3:"enslaved"==this.id&&(n*=1500);break;case 4:"v"==this.id&&(n*=1500);break;case 5:"ra"==this.id&&(n*=1500);break;case 6:"laitela"==this.id&&(n*=1500);break;case 7:"pelle"==this.id&&(n*=1500);break}let s=i*n;this.memoryChunks+=a,this.memories+=s}reset(){let e=MendingMilestone.ten.isReached?10:1;UZ.pets.teresa.level=e,UZ.pets.effarig.level=e,UZ.pets.enslaved.level=e,UZ.pets.v.level=e,UZ.pets.ra.level=1,UZ.pets.laitela.level=1,UZ.pets.pelle.level=1,this.data.memories=0,this.data.memoryChunks=0,this.data.memoryUpgrades=0,this.data.chunkUpgrades=0}get shopMemMultEffect(){return RaUpgrade[`inc${this.id.charAt(0).toUpperCase()}${this.id.substring(1)}XPGain`].effectValue}get shopWeakenScalingEffect(){return RaUpgrade[`weaken${this.id.charAt(0).toUpperCase()}${this.id.substring(1)}Scaling`].effectValue}}const GZ=mapGameDataToObject(GameDatabase.celestials.ra.pets,(e=>new PZ(e))),UZ={displayName:"Ra",possessiveName:"Ra's",alchauto:0,unlocks:xZ,pets:GZ,remembrance:{get multiplier(){return UZ.unlocks.remembranceBoost.isUnlocked?75:5},get nerf(){return UZ.unlocks.remembranceAlwaysActiveAndShopUnlock.isUnlocked?1:.5},requiredLevels:20,get isUnlocked(){return UZ.totalPetLevel>=this.requiredLevels}},reset(){const e=player.celestials.ra;e.unlockBits=0,e.modUnlockBits=[0,0,0],e.run=!1,e.charged=new Set,e.disCharge=!1,e.breakCharged=new Set,e.breakDischarge=!1,e.peakGamespeed=new Decimal(1);for(const t of UZ.pets.all)t.reset()},memoryTick(e,t){if(this.isUnlocked)for(const i of UZ.pets.all)i.tick(e,t)},get productionPerMemoryChunk(){let e=Effects.product(UZ.unlocks.continuousTTBoost.effects.memories,Achievement(168),Achievement(195));for(const t of UZ.pets.all)t.isUnlocked&&(e=new Decimal(e).times(t.memoryProductionMultiplier));return MendingMilestone.one.isReached&&(e=new Decimal(e).times(25)),player.timestudy.studies.includes(306)&&(e=new Decimal(e).times(MZ.effect())),e=e.timesEffectOf(WarpUpgrade(2)).times(VUnlocks.vAchRa.effectOrDefault(1)),e.toNumber()},get memoryBoostResources(){const e=[];for(const t of UZ.pets.all)1!==t.memoryProductionMultiplier&&e.push(t.memoryGain);return Achievement(168).isUnlocked&&e.push("Achievement 168"),UZ.unlocks.continuousTTBoost.canBeApplied&&e.push("current TT"),MendingMilestone.one.isReached&&e.push("Mending Milestone 1"),pl(15).isBought&&e.push("Mending Upgrade 15"),1===e.length?`${e[0]}`:2===e.length?`${e[0]} and ${e[1]}`:`${e.slice(0,-1).join(", ")}, and ${e[e.length-1]}`},raPointsGain(e){if(!UZ.isRunning)return new Decimal(0);if(!UZ.unlocks.remembranceAlwaysActiveAndShopUnlock.isUnlocked)return new Decimal(0);let t=e/1e3,i=Math.max(player.dimensionBoosts-25e8,0)/1e8,a=Decimal.pow(10,i).minus(1),n=new Decimal(a.times(t));return n},raGainPointLoop(e){player.celestials.ra.raPoints=player.celestials.ra.raPoints.plus(UZ.raPointsGain(e))},requiredMemoriesForLevel(e,t){if(t>=UZ.levelCap)return 1/0;let i=1,a=1;t>=25&&(a=1e44),t>=30&&(i=1.35,a=1e48),t>=40&&(i=1.35),t>=50&&(i=1.5,a=1e50),t>=65&&(i=1.6),t>=75&&(i=1.75,a=1e60),t>=90&&(i=2.25,a=1e80);const n=t+Math.pow(t,2)/10,s=Math.pow(1.5,Math.max(0,t-15)),r=Math.pow(3,Math.max(0,t-25));let o=Math.pow(n,5.52)*s*r*1e6;return o/=e.shopWeakenScalingEffect,Math.floor(Math.pow(o,i)*a)},timeToGoalString(e,t){let i=pl(15).isBought?1.5:1,a=new Decimal(UZ.productionPerMemoryChunk*e.memoryUpgradeCurrentMult*e.shopMemMultEffect),n=new Decimal(1);Pelle.isDoomed&&UZ.unlocks.boostMemoryGain.isUnlocked&&(n=n.times(500));let s=!1;if(eu(1).isBought)switch(UZ.currentCelestial){case 1:"teresa"==e.id&&(s=!0);break;case 2:"effarig"==e.id&&(s=!0);break;case 3:"enslaved"==e.id&&(s=!0);break;case 4:"v"==e.id&&(s=!0);break;case 5:"ra"==e.id&&(s=!0);break;case 6:"laitela"==e.id&&(s=!0);break;case 7:"pelle"==e.id&&(s=!0);break}s&&(n=n.times(1500));let r=new Decimal(e.memoryChunksPerSecond);Enslaved.isStoringRealTime&&(r=new Decimal(0));let o=new Decimal(e.memoryChunks),l=new Decimal(t).div(a.pow(i)).div(n),c=new Decimal("2e308");c=r.eq(0)?l.div(o.pow(i)):l.times(r).times(i+1).plus(o.pow(i+1)).pow(1/(i+1)).minus(o).div(r);let u=c.toNumber();return Number.isFinite(u)?`in ${TimeSpan.fromSeconds(new Decimal(u)).toStringShort()}`:"in an exteremely long time"},get totalPetLevel(){return this.pets.all.map((e=>e.isUnlocked?e.level:0)).sum()},get levelCap(){return pl(19).isBought?100:25},get maxTotalPetLevel(){return this.levelCap*this.pets.all.length},checkForUnlocks(){if(VUnlocks.raUnlock.canBeApplied||pl(19).isBought){for(const e of UZ.unlocks.all)e.unlock();UZ.checkForQuotes()}},checkForQuotes(){for(const e of UZ.quotes.all)e.requirement&&e.show()},initializeRun(){clearCelestialRuns(),player.celestials.ra.run=!0,this.quotes.realityEnter.show()},toggleMode(){player.celestials.ra.activeMode=!player.celestials.ra.activeMode},theoremBoostFactor(){return Math.min(1e3,Math.max(0,Currency.timeTheorems.value.pLog10()-850)/500+10,Math.max(0,Currency.timeTheorems.value.pLog10()-350)/50)},get isUnlocked(){return V.spaceTheorems>=36},get isRunning(){return player.celestials.ra.run},get totalCharges(){return UZ.unlocks.chargedInfinityUpgrades.effectOrDefault(0)},get chargesLeft(){return this.totalCharges-player.celestials.ra.charged.size},get totalBreakCharges(){return UZ.unlocks.chargedBreakInfinityUpgrades.effectOrDefault(0)},get breakChargesLeft(){return this.totalBreakCharges-player.celestials.ra.breakCharged.size},get canBuyTriad(){return UZ.unlocks.unlockHardV.canBeApplied},get petWithRemembrance(){return player.celestials.ra.petWithRemembrance},set petWithRemembrance(e){player.celestials.ra.petWithRemembrance=e},updateAlchemyFlow(e){const t=1e3/e;for(const i of AlchemyResources.all)i.ema.addValue((i.amount-i.before)*t),i.before=i.amount},applyAlchemyReactions(e){if(!UZ.unlocks.effarigUnlock.canBeApplied)return;const t=AlchemyReactions.all.compact().sort(((e,t)=>t.priority-e.priority));for(const i of t)i.combineReagents();this.updateAlchemyFlow(e)},applyAlchemyReactionsAuto(){UZ.unlocks.effarigUnlock.canBeApplied&&(UZ.alchauto+=1,UZ.alchauto>=15&&(UZ.alchauto-=15,UZ.applyAlchemyReactions(1e3)))},get alchemyResourceCap(){return UZ.unlocks.alchSetToCapAndCapIncrease.isUnlocked?25e3+5*player.celestials.ra.pets["effarig"].level+eu(14).effectOrDefault(0):25e3},get momentumValue(){const e=TimeSpan.fromMilliseconds(player.celestials.ra.momentumTime).totalHours;return Decimal.clampMax(e.times(.005).add(1),AlchemyResource.momentum.effectValue).toNumber()},get continuumActive(){return UZ.unlocks.continuumAffectsIDsAndTDs.isUnlocked&&Laitela.continuumActive},get currentCelestial(){switch(!0){case Teresa.isRunning:return 1;case Effarig.isRunning:return 2;case Enslaved.isRunning:return 3;case V.isRunning:return 4;case UZ.isRunning:return 5;case Laitela.isRunning:return 6;case Pelle.isDoomed:return 7;default:return 0}},quotes:GK.ra,symbol:""},BZ={get additionThreshold(){return b.E36},get empowermentThreshold(){return b.E43},get boostingThreshold(){return b.E60},getSacrificePower(e){if(Pelle.isDisabled("alteration"))return 0;const t=player.reality.glyphs.sac[e];if(void 0===t)throw new Error("Unknown sacrifice type");return t},get isUnlocked(){return!Pelle.isDisabled("alteration")&&UZ.unlocks.alteredGlyphs.canBeApplied},isAdded(e){return this.isUnlocked&&this.getSacrificePower(e).gte(this.additionThreshold)},isEmpowered(e){return this.isUnlocked&&this.getSacrificePower(e).gte(this.empowermentThreshold)},isBoosted(e){return this.isUnlocked&&this.getSacrificePower(e).gte(this.boostingThreshold)},sacrificeBoost(e){const t=Decimal.clampMax(this.getSacrificePower(e),GlyphSacrificeHandler.maxSacrificeForEffects);return Decimal.log10(t.div(this.boostingThreshold).clampMin(1))/2},baseAdditionColor(e=Theme.current().isDark()){return e?"#CCCCCC":"black"},baseEmpowermentColor(e=Theme.current().isDark()){return e?"#EEEE30":"#C6C610"},baseBoostColor(e=Theme.current().isDark()){return e?"#60DDDD":"#28BDBD"},getAdditionColor(e){const t="black"===CosmeticGlyphTypes[e].currentColor.bg;return this.isAdded(e)?this.baseAdditionColor(t):void 0},getEmpowermentColor(e){const t="black"===CosmeticGlyphTypes[e].currentColor.bg;return this.isEmpowered(e)?this.baseEmpowermentColor(t):void 0},getBoostColor(e){const t="black"===CosmeticGlyphTypes[e].currentColor.bg;return this.isBoosted(e)?this.baseBoostColor(t):void 0}};EventHub.logic.on(GAME_EVENT.TAB_CHANGED,(()=>{Tab.celestials.ra.isOpen&&UZ.quotes.unlock.show()}));class NZ extends D{get set(){return player.celestials.ra.upgrades}get currency(){return this.config.currency()}get isAvailableForPurchase(){return this.config.implemented&&player.celestials.ra.pets.ra.level>=40}onPurchased(){EventHub.dispatch(GAME_EVENT.RA_UPGRADE_BOUGHT)}}class OZ extends M{get pet(){return this.config.celestial}get isCapped(){return Ra.pets[this.pet].isCapped}get currency(){return this.config.currency}get boughtAmount(){return player.celestials.ra.rebuyables[this.id]}set boughtAmount(e){player.celestials.ra.rebuyables[this.id]=e}get isAvailableForPurchase(){return this.config.implemented&&player.celestials.ra.pets.ra.level>=40}}const LZ=mapGameDataToObject(GameDatabase.celestials.raUpgrades,(e=>e.rebuyable?new OZ(e):new NZ(e)));LZ.rebuyables=LZ.all.filter((e=>e.isRebuyable)),LZ.singles=LZ.all.filter((e=>!e.isRebuyable));class FZ extends A{constructor(e){super(e),this.ema=new ExponentialMovingAverage(.01,10,100,.01),this._before=0}get name(){return this.config.name}get symbol(){return this.config.symbol}get description(){return this.config.description}get isBaseResource(){return!0===this.config.isBaseResource}get data(){return player.celestials.ra.alchemy[this.id]}get amount(){return this.data.amount}set amount(e){this.data.amount=e}get before(){return this._before}set before(e){this._before=e}get flow(){return this.ema.average}get fillFraction(){return Math.clamp(this.amount/this.cap,0,1)}get unlockedWith(){return Ra.pets.effarig}get unlockedAt(){return this.config.unlockedAt}get isUnlocked(){return this.unlockedWith.level>=this.unlockedAt}get lockText(){return`${this.unlockedWith.name} Level ${formatInt(this.unlockedAt)}`}get isCustomEffect(){return!0}get effectValue(){if(player.mending.corruptionChallenge.corruptedMend&&ye.compGlyphs.hiddenSeven[player.mending.corruption[4]]){switch(this.config.id){case 0:case 1:case 2:case 3:case 4:case 6:case 7:case 10:case 12:return 1;case 5:return 1.2;case 8:return Decimal.pow10(9e99);case 11:return.3}return 0}return(V.isRunning||V.isSuperRunning)&&14===this.config.id?0:this.config.effect(Pelle.isDisabled("alchemy")?0:this.amount)}get reaction(){return WZ.all[this.id]}get cap(){throw new NotImplementedError}get capped(){return this.amount>=this.cap}}class $Z extends FZ{constructor(e){super(e),this._name=e.name.toLowerCase()}get highestRefinementValue(){return player.celestials.ra.highestRefinementValue[this._name]}set highestRefinementValue(e){player.celestials.ra.highestRefinementValue[this._name]=Math.max(this.highestRefinementValue,e)}get cap(){return Math.clampMax(Ra.alchemyResourceCap,this.highestRefinementValue)}}class HZ extends FZ{get cap(){const e=this.reaction.reagents.map((e=>e.resource.cap));return Math.min(...e)}}class qZ{constructor(e,t){this._product=e,this._reagents=t}get product(){return this._product}get reagents(){return this._reagents}get reactionYield(){if(!this._product.isUnlocked||this._reagents.some((e=>!e.resource.isUnlocked)))return 0;const e=(this._reagents.map((e=>e.resource.amount)).min()-this._product.amount)/100,t=this._reagents.map((e=>e.resource.amount/e.cost)).min();return Math.min(t,Math.max(e,1))}get actualYield(){const e=this.baseProduction*this.reactionYield*this.reactionEfficiency,t=this._product.amount,i=t+e;let a=this.reactionYield;for(const n of this._reagents){const e=n.resource.amount,s=n.resource.amount-this.reactionYield*n.cost,r=e-t,o=s-i;a=Math.min(a,this.reactionYield*r/(r-o))}return Math.clampMin(a,0)}get priority(){let e=Glyphs.levelCap;for(const t of this._reagents){const i=t.resource.amount-t.cost*this.actualYield;e=Math.min(e,i)}return e}get isActive(){return this._product.data.reaction}set isActive(e){this._product.data.reaction=e}get isReality(){return this._product.id===ALCHEMY_RESOURCE.REALITY}get baseProduction(){return this.isReality?1:5}get reactionEfficiency(){return this.isReality?1:VZ.synergism.effectValue}get reactionProduction(){return this.baseProduction*this.reactionEfficiency}combineReagents(){if(!this.isActive||0===this.reactionYield)return;const e=VZ.unpredictability.effectValue,t=1+poissonDistribution(e/(1-e)),i=this._product.cap;for(let a=0;ae.isBaseResource?new $Z(e):new HZ(e))),YZ={all:VZ.all,base:VZ.all.filter((e=>e.isBaseResource))},WZ=function(){function e(e){return e.config.reagents.map((e=>({resource:YZ.all.find((t=>t.id===e.resource)),cost:e.amount})))}return{all:YZ.all.map((t=>t.isBaseResource?null:new qZ(t,e(t))))}}();class jZ{constructor(e,t){this._tier=t,this._getData=e;const i=[null,"First","Second","Third","Fourth","Fifth","Sixth","Seventh","Eighth"];this._displayName=i[t];const a=[null,"1st","2nd","3rd","4th","5th","6th","7th","8th"];this._shortDisplayName=a[t]}get tier(){return this._tier}get displayName(){return this._displayName}get shortDisplayName(){return this._shortDisplayName}get data(){return this._getData()[this.tier-1]}get amount(){return this.data.amount}set amount(e){this.data.amount=e}get bought(){return this.data.bought}set bought(e){this.data.bought=e}get productionPerSecond(){throw new NotImplementedError}get productionPerRealSecond(){return this.productionPerSecond.times(getGameSpeedupForDisplay())}productionForDiff(e){return this.productionPerSecond.times(new Decimal(e).div(1e3)).pow(player.mending.corruptionChallenge.corruptedMend?Ra.unlocks.DimLimitCorruptionImprovementPelle.isUnlocked?ye.dimLimits.postNerf[[player.mending.corruption[1]]]:ye.dimLimits.preNerf[[player.mending.corruption[1]]]:1)}produceCurrency(e,t){e.add(this.productionForDiff(t))}produceDimensions(e,t){e.amount=e.amount.plus(this.productionForDiff(t))}static get dimensionCount(){return 8}static createAccessor(){const e=Array.range(1,this.dimensionCount).map((e=>new this(e)));e.unshift(null);const t=t=>e[t];return t.index=e,t}}const XZ=5,zZ=10,KZ=[1.65,1.6,1.55,1.5,1.45,1.4,1.35,1.3],ZZ=10,QZ=10,JZ=10,eQ=.92,tQ=500,iQ=500,aQ=1200;class nQ extends jZ{constructor(e){super((()=>player.celestials.laitela.dimensions),e)}productionForDiff(e){return this.productionPerSecond*e/1e3}get productionPerSecond(){return 1e3*this.powerDE/this.interval}get unlockUpgrade(){return ImaginaryUpgrade(this.tier+14)}get isUnlocked(){return this.tier<5?this.unlockUpgrade.isBought||Ra.pets.laitela.level>=25:Ra.pets.laitela.level/25>=this.tier-4}get ascensions(){return this.data.ascensionCount}get intervalPurchaseCap(){return 10}get rawInterval(){const e=eQ,t=Math.pow(4,this.tier-1);return 1e3*t*Math.pow(e,this.data.intervalUpgrades)*Math.pow(SingularityMilestone.ascensionIntervalScaling.effectOrDefault(1200),this.ascensions)*SingularityMilestone.darkDimensionIntervalReduction.effectOrDefault(1)}get interval(){return Math.clampMin(this.intervalPurchaseCap,this.rawInterval)}get commonDarkMult(){return b.D1.timesEffectsOf(SingularityMilestone.darkFromTesseracts,SingularityMilestone.darkFromGlyphLevel,SingularityMilestone.darkFromTheorems,SingularityMilestone.darkFromDM4,SingularityMilestone.darkFromGamespeed,SingularityMilestone.darkFromDilatedTime)}get powerDMPerAscension(){return tQ+SingularityMilestone.improvedAscensionDM.effectOrDefault(0)}get powerDM(){if(!this.isUnlocked)return new Decimal(0);let e=new Decimal(1+2*Math.pow(1.15,this.data.powerDMUpgrades)).times(Laitela.realityReward).times(Laitela.darkMatterMult).times(this.commonDarkMult).times(Math.pow(this.powerDMPerAscension,this.ascensions)).timesEffectsOf(SingularityMilestone.darkMatterMult,SingularityMilestone.multFromInfinitied,sp(308)).dividedBy(Math.pow(1e4,Math.pow(this.tier-1,.5)));return e}get powerDE(){if(!this.isUnlocked||Pelle.isDoomed)return 0;const e=Math.pow(15,this.tier-1),t=Laitela.isFullyDestabilized?8:1,i=MendingMilestone.one.isReached?50:1,a=Ra.unlocks.annihilationDarkEnergyBoost.isUnlocked?Math.min(1,Math.pow(Laitela.darkMatterMult,.5)):1;return new Decimal((1+.1*this.data.powerDEUpgrades)*Math.pow(1.005,this.data.powerDEUpgrades)*e/1e3).times(this.commonDarkMult).times(Math.pow(iQ,this.ascensions)).timesEffectsOf(SingularityMilestone.darkEnergyMult,SingularityMilestone.realityDEMultiplier,SingularityMilestone.multFromInfinitied,sp(308)).toNumber()*t*i*a}get intervalAfterAscension(){const e=Decimal.affordGeometricSeries(Currency.darkMatter.value,this.rawIntervalCost,this.intervalCostIncrease,0).toNumber();return Math.clampMin(this.intervalPurchaseCap,SingularityMilestone.ascensionIntervalScaling.effectOrDefault(1200)*this.rawInterval*Math.pow(eQ,e))}get adjustedStartingCost(){const e=[null,0,2,5,13,34,89,233,610];return new Decimal(10).times(Decimal.pow(aQ,e[this.tier]).times(SingularityMilestone.darkDimensionCostReduction.effectOrDefault(1)))}get rawIntervalCost(){return Decimal.pow(this.intervalCostIncrease,this.data.intervalUpgrades).times(this.adjustedStartingCost).times(ZZ)}get intervalCost(){return this.rawIntervalCost.floor()}get intervalCostIncrease(){return Math.pow(XZ,SingularityMilestone.intervalCostScalingReduction.effectOrDefault(1))}get rawPowerDMCost(){return Decimal.pow(this.powerDMCostIncrease,this.data.powerDMUpgrades).times(this.adjustedStartingCost).times(QZ)}get powerDMCost(){return this.rawPowerDMCost.floor()}get powerDMCostIncrease(){return zZ}get rawPowerDECost(){return Decimal.pow(this.powerDECostIncrease,this.data.powerDEUpgrades).times(this.adjustedStartingCost).times(JZ)}get powerDECost(){return this.rawPowerDECost.floor()}get powerDECostIncrease(){return KZ[this.tier-1]}get timeSinceLastUpdate(){return this.data.timeSinceLastUpdate}set timeSinceLastUpdate(e){this.data.timeSinceLastUpdate=e}get canBuyInterval(){return Currency.darkMatter.gte(this.intervalCost)&&this.interval>this.intervalPurchaseCap}get canBuyPowerDM(){return Currency.darkMatter.gte(this.powerDMCost)}get canBuyPowerDE(){return Currency.darkMatter.gte(this.powerDECost)}get maxIntervalPurchases(){return Math.ceil(Math.log(this.intervalPurchaseCap/this.interval)/Math.log(eQ))}buyManyInterval(e){if(e>this.maxIntervalPurchases)return!1;const t=this.rawIntervalCost.times(Decimal.pow(this.intervalCostIncrease,e).minus(1)).div(this.intervalCostIncrease-1).floor();return!!Currency.darkMatter.purchase(t)&&(this.data.intervalUpgrades+=e,!0)}buyManyPowerDM(e){const t=this.rawPowerDMCost.times(Decimal.pow(this.powerDMCostIncrease,e).minus(1)).div(this.powerDMCostIncrease-1).floor();return!!Currency.darkMatter.purchase(t)&&(this.data.powerDMUpgrades+=e,!0)}buyManyPowerDE(e){const t=this.rawPowerDECost.times(Decimal.pow(this.powerDECostIncrease,e).minus(1)).div(this.powerDECostIncrease-1).floor();return!!Currency.darkMatter.purchase(t)&&(this.data.powerDEUpgrades+=e,!0)}buyInterval(){return this.buyManyInterval(1)}buyPowerDM(){return this.buyManyPowerDM(1)}buyPowerDE(){return this.buyManyPowerDE(1)}ascend(){if(!(this.interval>this.intervalPurchaseCap)){this.data.ascensionCount++;while(this.buyInterval());}}static get dimensionCount(){return 8}reset(){this.data.amount=b.D1,this.data.intervalUpgrades=0,this.data.powerDMUpgrades=0,this.data.powerDEUpgrades=0,this.data.timeSinceLastUpdate=0,this.data.ascensionCount=0}}const sQ=nQ.createAccessor(),rQ={all:sQ.index.compact(),tick(e){if(Laitela.isUnlocked){for(let t=8;t>=1;t--){const i=sQ(t);if(i.isUnlocked&&(i.timeSinceLastUpdate+=e,i.interval=1&&Ra.unlocks.improvedECRewards.isUnlocked&&EternityChallenge(7).vReward.applyEffect((e=>{TimeDimension(8).amount=TimeDimension(8).amount.plus(e.times(new Decimal(Enslaved.nextTickDiff).div(1e3)))})),eu(15).isBought&&sQ(8).isUnlocked&&(sQ(8).amount=sQ(8).amount.plus(eu(15).effectValue*e/1e3))}},reset(){for(const e of rQ.all)e.reset();Currency.darkMatter.reset()}},oQ={displayName:"Lai'tela",possessiveName:"Lai'tela's",get celestial(){return player.celestials.laitela},get isUnlocked(){return ImaginaryUpgrade(15).isBought},initializeRun(){clearCelestialRuns(),this.celestial.run=!0},get isRunning(){return this.celestial.run},get difficultyTier(){return player.celestials.laitela.difficultyTier},set difficultyTier(e){player.celestials.laitela.difficultyTier=e},get maxAllowedDimension(){return 8-this.difficultyTier},get isFullyDestabilized(){return 0===oQ.maxAllowedDimension},get continuumUnlocked(){return ImaginaryUpgrade(15).isBought&&!Pelle.isDisabled("continuum")},get continuumActive(){return this.continuumUnlocked&&!player.auto.disableContinuum&&!Pelle.isDisabled("continuum")},setContinuum(e){player.auto.disableContinuum=!e,player.auto.disableContinuum||(player.requirementChecks.reality.noContinuum=!1)},get matterExtraPurchaseFactor(){let e=BreakInfinityUpgrade.autobuyerSpeed.chargedEffect.isEffectActive?Math.max((Ra.pets.teresa.level+Ra.pets.laitela.level)/125,1):1,t=(1+.5*Math.pow(Decimal.pLog10(Currency.darkMatter.max)/50,.4)*(1+SingularityMilestone.continuumMult.effectOrDefault(0)))*(pl(18).isBought?1.5:1)*(Ra.unlocks.improvedECRewards.isUnlocked&&EternityChallenge(6).completions>=1&&!Pelle.isDoomed?EternityChallenge(6).vReward.effectValue:1)+e;return Pelle.isDoomed&&(t=t**.01),t},get realityReward(){return Math.clampMin(Math.pow(100,this.difficultyTier)*Math.pow(360/player.celestials.laitela.fastestCompletion,2),1)},get entropyGainPerSecond(){return Math.clamp(Math.pow(Currency.antimatter.value.add(1).log10()/1e11,2),0,100)/200},get darkMatterMultGain(){return Decimal.pow(Currency.darkMatter.value.dividedBy(this.annihilationDMRequirement).plus(1).log10(),1.5).toNumber()*ImaginaryUpgrade(21).effectOrDefault(1)},get darkMatterMult(){return this.celestial.darkMatterMult},get darkMatterMultRatio(){return(this.celestial.darkMatterMult+this.darkMatterMultGain)/this.celestial.darkMatterMult},get annihilationUnlocked(){return ImaginaryUpgrade(19).isBought},get annihilationDMRequirement(){return 1e60},get canAnnihilate(){return oQ.annihilationUnlocked&&Currency.darkMatter.gte(this.annihilationDMRequirement)},annihilate(e){return!(!e&&!this.canAnnihilate)&&(this.celestial.darkMatterMult+=this.darkMatterMultGain*(player.celestials.ra.permanentMemories.lai65?500:1),rQ.reset(),oQ.quotes.annihilation.show(),Achievement(176).unlock(),!0)},maxAllDMDimensions(e){const t=rQ.all.filter((t=>t.isUnlocked&&t.tier<=e)),i=t.map((e=>[[e.rawIntervalCost,e.intervalCostIncrease,e.maxIntervalPurchases,t=>e.buyManyInterval(t)],[e.rawPowerDMCost,e.powerDMCostIncrease,1/0,t=>e.buyManyPowerDM(t)],[e.rawPowerDECost,e.powerDECostIncrease,1/0,t=>e.buyManyPowerDE(t)]])).flat(1),a=function(e,t){e[3](t),e[0]=e[0].times(Decimal.pow(e[1],t)),e[2]-=t},n=Currency.darkMatter.value;for(const s of i){const e=Math.clamp(Math.floor(n.times(.02).div(s[0]).log(s[1])),0,s[2]);a(s,e)}while(i.some((e=>e[0].lte(n)&&e[2]>0))){const e=i.filter((e=>e[2]>0)).sort(((e,t)=>e[0].minus(t[0]).sign()))[0];a(e,1)}},reset(){this.annihilate(!0),this.celestial.darkMatterMult=1,Currency.darkMatter.max=b.D1,Currency.darkMatter.reset(),Currency.singularities.reset(),this.celestial.fastestCompletion=3600,this.celestial.difficultyTier=0,this.celestial.singularityCapIncreases=0},quotes:GK.laitela,symbol:"ᛝ"};EventHub.logic.on(GAME_EVENT.TAB_CHANGED,(()=>{Tab.celestials.laitela.isOpen&&oQ.quotes.unlock.show()}));class lQ extends A{constructor(e){const t=e.effect,i=sl([{},e]);i.effect=()=>t(this.completions),super(i),this._rawEffect=t}get start(){return this.config.start}get repeat(){return this.config.repeat}get limit(){return this.config.limit}get isUnique(){return 0===this.repeat}get isUnlocked(){return Currency.singularities.gte(this.start)}get increaseThreshold(){return this.config.increaseThreshold}nerfCompletions(e){const t=this.increaseThreshold;return!t||e=this.limit}get effectDisplay(){return Number.isFinite(this.effectValue)?this.config.effectFormat(this.effectValue):"N/A"}get nextEffectDisplay(){return this.config.effectFormat(this._rawEffect(this.completions+1))}get description(){return this.config.description}get canBeApplied(){return this.isUnlocked&&!Pelle.isDisabled("singularity")}}const cQ=mapGameDataToObject(GameDatabase.celestials.singularityMilestones,(e=>new lQ(e))),uQ={all:cQ.all,lastNotified:player.celestials.laitela.lastCheckedMilestones,get sorted(){return this.all.sort(((e,t)=>e.remainingSingularities-t.remainingSingularities))},sortedForCompletions(e){const t=player.celestials.laitela.singularitySorting;let i,a;switch(t.sortResource){case SINGULARITY_MILESTONE_SORT.SINGULARITIES_TO_NEXT:i=e=>e.isMaxed?1+Math.log10(e.isUnique?e.nextGoal:e.previousGoal)/1e3:Math.log10(e.remainingSingularities)/100;break;case SINGULARITY_MILESTONE_SORT.CURRENT_COMPLETIONS:i=e=>{const t=Math.clampMin(e.previousGoal,1),i=Math.clamp(Math.log(Currency.singularities.value/t)/Math.log(e.nextGoal/t),0,1);return(e.completions+i)/20};break;case SINGULARITY_MILESTONE_SORT.PERCENT_COMPLETIONS:i=e=>{const t=Number.isFinite(e.limit)?e.limit:100,i=Math.log(Currency.singularities.value/e.previousGoal)/Math.log(e.nextGoal/e.previousGoal);return Math.clampMax((e.completions+i)/t,1)+(Number.isFinite(e.limit)?0:1)};break;case SINGULARITY_MILESTONE_SORT.FINAL_COMPLETION:i=e=>{const t=Number.isFinite(e.limit)?e.limit:50;return Math.log10(e.config.start*Math.pow(e.config.repeat,t-1))/100};break;case SINGULARITY_MILESTONE_SORT.MOST_RECENT:i=e=>e.isUnlocked?Math.log10(e.isUnique?e.nextGoal:e.previousGoal)/100:1+Math.log10(e.start)/1e3;break;default:throw new Error("Unrecognized Singularity Milestone sorting option (order)")}switch(t.showCompleted){case COMPLETED_MILESTONES.FIRST:a=10;break;case COMPLETED_MILESTONES.LAST:a=-10;break;case COMPLETED_MILESTONES.IGNORED:a=0;break;default:throw new Error("Unrecognized Singularity Milestone sorting option (completed milestones)")}const n=t=>t.previousGoal>player.celestials.laitela.lastCheckedMilestones&&e?20:0,s=e=>(e.isMaxed?a:0)+(t.sortOrder?i(e):-i(e))+n(e);return this.sorted.sort(((e,t)=>s(t)-s(e)))},get nextMilestoneGroup(){return this.sortedForCompletions(!1).filter((e=>!e.isMaxed)).slice(0,6)},get unseenMilestones(){const e=player.celestials.laitela;return dQ.filter((t=>t>e.lastCheckedMilestones&&Currency.singularities.gte(t)))},get unnotifiedMilestones(){return dQ.filter((e=>e>this.lastNotified&&Currency.singularities.gte(e)))}},dQ=function(){return uQ.all.map((e=>Array.range(0,Math.min(50,e.limit)).filter((t=>!e.increaseThreshold||t<=e.increaseThreshold||t>e.increaseThreshold&&(t-e.increaseThreshold)%3===2)).map((t=>e.start*Math.pow(e.repeat,t))))).flat(1/0).filter((e=>e<1e100)).sort(((e,t)=>e-t))}(),hQ={get cap(){return 200*Math.pow(10,player.celestials.laitela.singularityCapIncreases)},get gainPerCapIncrease(){return cQ.improvedSingularityCap.effectOrDefault(11)},get singularitiesGained(){const e=MendingMilestone.one.isReached?5:1;let t=ImaginaryUpgrade(10).effectOrDefault(0);Ra.unlocks.dmdScaling.isUnlocked&&(t=Math.pow(2,t));let i=Math.floor(Math.pow(this.gainPerCapIncrease,player.celestials.laitela.singularityCapIncreases)*cQ.singularityMult.effectOrDefault(1)*(1+t))*e;return player.mending.corruptionChallenge.corruptedMend&&(i=Math.ceil(i**ye.repSing.sing[player.mending.corruption[8]])),i},get timePerCondense(){return this.cap/Currency.darkEnergy.productionPerSecond},get timeUntilCap(){return(this.cap-Currency.darkEnergy.value)/Currency.darkEnergy.productionPerSecond},get timeDelayFromAuto(){return this.timePerCondense*(cQ.autoCondense.effectOrDefault(1/0)-1)},get capIsReached(){return Currency.darkEnergy.gte(this.cap)},increaseCap(){let e=50+(Ra.unlocks.increaseSingLimits.isUnlocked?5*Math.floor((Ra.pets.laitela.level-40)/5)+1:0)+CorruptionUpgrade(4).effectOrDefault(0);player.celestials.laitela.singularityCapIncreases>=e||player.celestials.laitela.singularityCapIncreases++},decreaseCap(){0!==player.celestials.laitela.singularityCapIncreases&&player.celestials.laitela.singularityCapIncreases--},perform(){if(this.capIsReached&&!Pelle.isDoomed){EventHub.dispatch(GAME_EVENT.SINGULARITY_RESET_BEFORE),Currency.darkEnergy.reset(),Currency.singularities.add(this.singularitiesGained);for(const e of Laitela.quotes.all)e.requirement&&e.show();EventHub.dispatch(GAME_EVENT.SINGULARITY_RESET_AFTER)}}};EventHub.logic.on(GAME_EVENT.GAME_LOAD,(()=>uQ.lastNotified=Currency.singularities.value)),EventHub.logic.on(GAME_EVENT.SINGULARITY_RESET_AFTER,(()=>{const e=uQ.unnotifiedMilestones.length;0!==e&&(1===e?GameUI.notify.blackHole("You reached a Singularity milestone!"):GameUI.notify.blackHole(`You reached ${formatInt(e)} Singularity milestones!`),uQ.lastNotified=Currency.singularities.value)}));const mQ={chars:{0:["̍","̎","̄","̅","̿","̑","̆","̐","͒","͗","͑","̇","̈","̊","͂","̓","̈́","͊","͋","͌","̃","̂","̌","͐","̀","́","̋","̏","̒","̓","̔","̽","̉","ͣ","ͤ","ͥ","ͦ","ͧ","ͨ","ͩ","ͪ","ͫ","ͬ","ͭ","ͮ","ͯ","̾","͛","͆","̚"],1:["̖","̗","̘","̙","̜","̝","̞","̟","̠","̤","̥","̦","̩","̪","̫","̬","̭","̮","̯","̰","̱","̲","̳","̹","̺","̻","̼","ͅ","͇","͈","͉","͍","͎","͓","͔","͕","͖","͙","͚","̣"],2:["̕","̛","̀","́","͘","̡","̢","̧","̨","̴","̵","̶","͏","͜","͝","͞","͟","͠","͢","̸","̷","͡","҉"]},random(e,t){if(1==e)return 0;const i=66669*t%981/997;return e?Math.floor(i*e+1)-1:i},generate(e,t=0){const i=e.split("");let a=i.reduce(((e,t)=>e+t.charCodeAt(0)),0);return i.map((e=>{if(" "==e)return e;for(let i=0;i=.5&&(e+=mQ.chars[t][mQ.random(mQ.chars[t].length,a++)])}return e})).join("")}},pQ=mQ.generate,yQ={achievements:()=>({}),IPMults:()=>({}),EPMults:()=>({}),galaxies:()=>({}),InfinitiedMults:()=>({}),infinitiedGen:()=>({}),eternityGain:()=>({}),eternityMults:()=>({}),studies:()=>({}),EPgen:()=>({}),autoec:()=>({}),replicantiIntervalMult:()=>({}),tpMults:()=>({}),glyphs:()=>!PelleRifts.vacuum.milestones[0].canBeApplied,V:()=>({}),singularity:()=>({}),continuum:()=>!Ra.unlocks.unlockPelleContinuum.isUnlocked,alchemy:()=>({}),achievementMult:()=>({}),blackhole:()=>({}),effarig:()=>({}),imaginaryUpgrades:()=>({}),glyphsac:()=>({}),antimatterDimAutobuyer1:()=>bQ.antimatterDimAutobuyers1,antimatterDimAutobuyer2:()=>bQ.antimatterDimAutobuyers1,antimatterDimAutobuyer3:()=>bQ.antimatterDimAutobuyers1,antimatterDimAutobuyer4:()=>bQ.antimatterDimAutobuyers1,antimatterDimAutobuyer5:()=>bQ.antimatterDimAutobuyers2,antimatterDimAutobuyer6:()=>bQ.antimatterDimAutobuyers2,antimatterDimAutobuyer7:()=>bQ.antimatterDimAutobuyers2,antimatterDimAutobuyer8:()=>bQ.antimatterDimAutobuyers2,tickspeedAutobuyer:()=>bQ.tickspeedAutobuyer,dimBoostAutobuyer:()=>bQ.dimBoostAutobuyer,galaxyAutobuyer:()=>bQ.galaxyAutobuyer,timeTheoremAutobuyer:()=>({}),rupg10:()=>({}),dtMults:()=>({}),chargedInfinityUpgrades:()=>({}),alteration:()=>({}),timeTheorems:()=>({})},fQ={symbol:"♅",possessiveName:"Pelle's",initializeRun(){if(this.isDoomed)return void fQ.armageddon(!0);if(Glyphs.harshAutoClean(),!Glyphs.unequipAll())return Modal.hideAll(),void Modal.message.show("Dooming your Reality will unequip your Glyphs. Some of your\n Glyphs could not be unequipped due to lack of inventory space.",1);if(Glyphs.harshAutoClean(),Glyphs.freeInventorySpace<5)return Modal.hideAll(),void Modal.message.show(`You must have enough empty unprotected Glyph slots for\n ${formatInt(5)} additional Glyphs in order to Doom your Reality.`,1);for(const a of BASIC_GLYPH_TYPES)Glyphs.addToInventory(GlyphGenerator.doomedGlyph(a));Glyphs.refreshActive(),player.options.confirmations.glyphReplace=!0,player.reality.automator.state.repeat=!1,player.reality.automator.state.forceRestart=!1,BlackHoles.arePaused&&BlackHoles.togglePause(),player.celestials.pelle.doomed=!0,fQ.armageddon(!1),respecTimeStudies(!0),Mi.infinityPoints.reset(),player.IPMultPurchases=0,Autobuyer.bigCrunch.mode=AUTO_CRUNCH_MODE.AMOUNT,disChargeAll(),disChargeAllBreak(),clearCelestialRuns(),player.auto.antimatterDims.isActive=!0,player.buyUntil10=!0,player.records.realTimeDoomed=0;for(const a of AlchemyResources.all)a.amount=0;AutomatorBackend.stop();const e=-2&1<"shop"===e.key)).id;player.options.hiddenTabBits&=e;const t=["statistics","achievements","reality","celestials"],i=GameDatabase.tabs.filter((e=>t.includes(e.key))).map((e=>e.id));for(let a=0;a500?"Pelle":P.randomCrossWords("Pelle")},get isUnlocked(){return ImaginaryUpgrade(25).isBought},isDisabled(e){if(!this.isDoomed)return!1;if(!e)return!0;if(!yQ[e])return console.error(`Mechanic ${e} isn't present in the disabledMechanicUnlocks!`),!0;const t=yQ[e]();return"boolean"===typeof t?t:Boolean(!t.canBeApplied)},get canArmageddon(){return this.remnantsGain>=1},armageddon(e){!this.canArmageddon&&e||(EventHub.dispatch(GAME_EVENT.ARMAGEDDON_BEFORE,e),e&&(this.cel.remnants+=this.remnantsGain),finishProcessReality({reset:!0,armageddon:!0}),disChargeAll(),disChargeAllBreak(),player.celestials.enslaved.isStoringReal=!1,player.celestials.enslaved.autoStoreReal=!1,PelleStrikes.dilation.hasStrike&&(player.dilation.active=!0),EventHub.dispatch(GAME_EVENT.ARMAGEDDON_AFTER,e))},gameLoop(e){this.isDoomed&&(Mi.realityShards.add(this.realityShardGainPerSecond.times(e).div(1e3)),PelleRifts.all.forEach((t=>t.fill(e))))},get cel(){return player.celestials.pelle},get isDoomed(){return this.cel.doomed},get disabledAchievements(){return[164,156,143,142,141,137,134,133,132,126,125,118,117,116,113,111,104,103,95,93,92,91,87,85,78,76,74,65,55,54,37]},get uselessInfinityUpgrades(){let e=["passiveGen","infinitiedGeneration"];return Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked||e.push("ipMult"),e},get uselessTimeStudies(){return[32,33,41,51,61,62,121,122,123,141,142,143,192,213]},get disabledRUPGs(){return[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,19,20,22,23,24]},get uselessPerks(){let e=[10,12,13,14,15,16,17,30,40,41,42,43,44,45,46,51,52,53,60,61,62,80,81,82,83,100,103,104,105,201,202,203,204];return Achievement(191).isUnlocked||e.push(106),e},get specialGlyphEffect(){const e=this.isDoomed&&PelleRifts.chaos.milestones[1].canBeApplied,t=this.getSpecialGlyphEffectDescription(this.activeGlyphType),i=t=>e&&this.activeGlyphType===t;return{isUnlocked:e,description:t,infinity:i("infinity")&&player.challenge.eternity.current<=8?Mi.infinityPoints.value.plus(1).pow(.2):b.D1,time:i("time")?Decimal.min(Mi.eternityPoints.value.plus(1).pow(.3),Decimal.pow10(1e20)):b.D1,replication:i("replication")?10**(53**PelleRifts.vacuum.percentage):1,dilation:i("dilation")?Decimal.pow(player.dilation.totalTachyonGalaxies,1.5).max(1):b.D1,power:i("power")?1.02:1,companion:i("companion")?1.34:1,isScaling:()=>["infinity","time","replication","dilation"].includes(this.activeGlyphType)}},getSpecialGlyphEffectDescription(e){switch(e){case"infinity":return`Infinity Point gain ${player.challenge.eternity.current<=8?formatX(Mi.infinityPoints.value.plus(1).pow(.2),2):formatX(b.D1,2)} (based on current IP)`;case"time":return`Eternity Point gain ${formatX(Decimal.min(Mi.eternityPoints.value.plus(1).pow(.3),Decimal.pow10(1e20)),2)}\n (based on current EP, max 1e1e20)`;case"replication":return`Replication speed ${formatX(10**(53**PelleRifts.vacuum.percentage),2)} (based on ${P.wordCycle(PelleRifts.vacuum.name)})`;case"dilation":return`Dilated Time gain ${formatX(Decimal.pow(player.dilation.totalTachyonGalaxies,1.5).max(1),2)}\n (based on Tachyon Galaxies)`;case"power":return`Galaxies are ${formatPercents(.02)} stronger`;case"companion":return`You feel ${formatPercents(.34)} better`;case void 0:return"No Glyph equipped!";default:return"You cannot equip this Glyph while Doomed!"}},get remnantRequirementForDilation(){return 38e6},get canDilateInPelle(){return this.cel.remnants>=this.remnantRequirementForDilation},get remnantsGain(){let e=this.cel.records.totalAntimatter.plus(1).log10(),t=this.cel.records.totalInfinityPoints.plus(1).log10(),i=this.cel.records.totalEternityPoints.plus(1).log10(),a=MendingMilestone.one.isReached?1.1:1;PelleStrikes.dilation.hasStrike&&(e*=500,t*=10,i*=5);const n=((Math.log10(e+2)+Math.log10(t+2)+Math.log10(i+2))*a/1.64)**7.5;return n<1?n:Math.floor(n-this.cel.remnants)},realityShardGain(e){const t=MendingMilestone.one.isReached?10:1;return Decimal.pow(10,e**(1/7.5)*4).minus(1).div(1e3).times(t)},get realityShardGainPerSecond(){return this.realityShardGain(this.cel.remnants)},get nextRealityShardGain(){return this.realityShardGain(this.remnantsGain+this.cel.remnants)},get riftDrainPercent(){return.3},get glyphMaxLevel(){return bQ.glyphLevels.effectValue},get glyphStrength(){return 1+(Ra.unlocks.pelleRarityBoost.isUnlocked?.05*(Ra.pets.pelle.level-50):0)},antimatterDimensionMult(e){return Decimal.pow(10,Math.log10(e+1)+e**5.1/1e3+4**e/1e19)},get activeGlyphType(){var e;return null===(e=Glyphs.active.filter(Boolean)[0])||void 0===e?void 0:e.type},get hasGalaxyGenerator(){return player.celestials.pelle.galaxyGenerator.unlocked},transitionText(e,t,i=0){const a=Math.round(1e8*(e.length*(1-i)+t.length*i))/1e8,n=a*(1-i);let s=n,r="";for(let o=0;o=s){const e=Math.floor(o*(t.length/a));r+=t[e],s+=n}else{const t=Math.floor(o*(e.length/a));r+=e[t]}return pQ(r,Math.floor(i**2*7))},endTabNames:"Never Gonna Give You Up Never Gonna Let You Down :) :3".split(" "),quotes:GK.pelle};EventHub.logic.on(GAME_EVENT.ARMAGEDDON_AFTER,(()=>{Mi.remnants.gte(1)&&fQ.quotes.arm.show()})),EventHub.logic.on(GAME_EVENT.PELLE_STRIKE_UNLOCKED,(()=>{PelleStrikes.infinity.hasStrike&&fQ.quotes.strike1.show(),PelleStrikes.powerGalaxies.hasStrike&&fQ.quotes.strike2.show(),PelleStrikes.eternity.hasStrike&&fQ.quotes.strike3.show(),PelleStrikes.ECs.hasStrike&&fQ.quotes.strike4.show(),PelleStrikes.dilation.hasStrike&&fQ.quotes.strike5.show()}));class gQ extends M{get currency(){return Mi.realityShards}get boughtAmount(){return player.celestials.pelle.rebuyables[this.id]}set boughtAmount(e){player.celestials.pelle.rebuyables[this.id]=e}get isCapped(){return this.boughtAmount>=this.config.cap}get isCustomEffect(){return!0}get effectValue(){return this.config.effect(this.boughtAmount)}onPurchased(){"glyphLevels"===this.id&&EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED)}}class vQ extends D{get set(){return player.celestials.pelle.upgrades}get currency(){return Mi.realityShards}get description(){return this.config.description}get cost(){return this.config.cost}get isAvailableForPurchase(){return fQ.isDoomed}}const bQ=mapGameDataToObject(GameDatabase.celestials.pelle.upgrades,(e=>e.rebuyable?new gQ(e):new vQ(e)));bQ.rebuyables=bQ.all.filter((e=>e.isRebuyable)),bQ.singles=bQ.all.filter((e=>!e.isRebuyable));class EQ extends _{get bits(){return player.celestials.pelle.progressBits}set bits(e){player.celestials.pelle.progressBits=e}get hasStrike(){return this.isUnlocked}get canBeUnlocked(){return Pelle.isDoomed&&!this.hasStrike}get requirement(){const e=this.config.requirementDescription;return"function"===typeof e?e():e}get penalty(){const e=this.config.penaltyDescription;return"function"===typeof e?e():e}reward(){return this.config.rewardDescription()}get rift(){return this.config.rift()}trigger(){this.unlock()}onUnlock(){GameUI.notify.strike(`You encountered a Pelle Strike: ${this.requirement}`),player.celestials.pelle.collapsed.rifts=!1,5===this.id&&(Pelle.cel.records.totalAntimatter=new Decimal("1e180000"),Pelle.cel.records.totalInfinityPoints=new Decimal("1e60000"),Currency.eternityPoints.reset(),Pelle.cel.records.totalEternityPoints=new Decimal("1e1050")),Tab.celestials.pelle.show(),EventHub.dispatch(GAME_EVENT.PELLE_STRIKE_UNLOCKED)}}const TQ=mapGameDataToObject(GameDatabase.celestials.pelle.strikes,(e=>new EQ(e)));var wQ=i(3796);class kQ extends A{constructor(...e){super(...e),(0,wQ.Z)(this,"lastChecked",!1)}get requirement(){return this.config.requirement}get resource(){return this.config.resource}checkMilestoneState(){var e,t;this.lastChecked!==this.isUnlocked&&(null===(e=(t=this.config).onStateChange)||void 0===e||e.call(t));this.lastChecked=this.isUnlocked}get isUnlocked(){return!("decay"!==this.resource||!AQ.chaos.milestones[0].isEffectActive)||this.requirement<=AQ[this.resource].percentage}get isEffectActive(){return this.isUnlocked}get description(){const e=this.config.description;return"function"===typeof e?e():e}get formattedEffect(){return!!this.canBeApplied&&this.config.formatEffect(this.effectValue)}}class CQ extends A{constructor(e){super(e),this._milestones=this.config.milestones.map((e=>new kQ(e)))}get fillCurrency(){return this.config.currency()}get strike(){return this.config.strike()}get canBeApplied(){return this.strike.hasStrike}get name(){return this.config.name}get reducedTo(){return this.rift.reducedTo}set reducedTo(e){this.rift.reducedTo=e}get rift(){return player.celestials.pelle.rifts[this.config.key]}get totalFill(){return this.rift.fill}set totalFill(e){this.rift.fill=e}get isActive(){return this.rift.active}get realPercentage(){return this.config.percentage(this.totalFill)}get spentPercentage(){return this.rift.percentageSpent||0}get percentage(){return this.reducedTo>1?this.reducedTo:this.config.spendable?Math.min(this.config.percentage(this.totalFill)-this.spentPercentage,this.reducedTo):Math.min(this.realPercentage,this.reducedTo)}get milestones(){return this._milestones}get description(){return this.config.description}get drainResource(){return this.config.drainResource}get effects(){var e,t,i;const a=this.config.baseEffect(this.effectValue),n=null!==(e=null===(t=(i=this.config).additionalEffects)||void 0===t?void 0:t.call(i).map((e=>e.formattedEffect)))&&void 0!==e?e:[];return[a,...n]}get isCustomEffect(){return!0}get effectValue(){return this.config.effect(this.config.percentageToFill(this.percentage))}get maxValue(){return this.config.percentageToFill(1+this.spentPercentage)}get isMaxed(){return this.percentage>=1}get galaxyGeneratorText(){return this.config.galaxyGeneratorText}get activeCap(){return Ra.unlocks.boostMVRGain.isUnlocked?5:2}toggle(){const e=AQ.all.filter((e=>e.isActive)).length;this.isActive||e!==this.activeCap?this.rift.active=!this.rift.active:GameUI.notify.error("You can only have 2 rifts active at the same time!")}checkMilestoneStates(){this.milestones.forEach((e=>e.checkMilestoneState()))}fill(e){if(this.isActive&&this.isMaxed)this.rift.active=!1;else if(this.isActive&&!this.isMaxed){if(this.fillCurrency.value instanceof Decimal){if(this.fillCurrency.value.lte(1))return;const t=this.fillCurrency.value.times((1-Pelle.riftDrainPercent)**(e/100)),i=this.fillCurrency.value.minus(t);this.fillCurrency.value=this.fillCurrency.value.minus(i).max(1),this.totalFill=this.totalFill.plus(i).min(this.maxValue)}else{const t=this.fillCurrency.value*(1-Pelle.riftDrainPercent)**(e/100),i=this.fillCurrency.value-t;this.fillCurrency.value=Math.max(this.fillCurrency.value-i,0),this.totalFill=Math.clampMax(this.totalFill+i,this.maxValue)}AQ.vacuum.milestones[0].canBeApplied&&Glyphs.refreshActive(),this.checkMilestoneStates()}}}const AQ=mapGameDataToObject(GameDatabase.celestials.pelle.rifts,(e=>new CQ(e)));AQ.totalMilestones=()=>AQ.all.flatMap((e=>e.milestones)).countWhere((e=>e.canBeApplied));const _Q={hasReturnedGlyphSlot:!1,get generationCaps(){return AQ.all.map((e=>({rift:e.config.key,cap:e.config.galaxyGeneratorThreshold}))).sort(((e,t)=>e.cap-t.cap))},get spentGalaxies(){return player.celestials.pelle.galaxyGenerator.spentGalaxies},get generatedGalaxies(){return player.celestials.pelle.galaxyGenerator.generatedGalaxies},get galaxies(){return this.generatedGalaxies-this.spentGalaxies},get gainPerSecond(){return Pelle.hasGalaxyGenerator?new Decimal(DQ.additive.effectValue).timesEffectsOf(DQ.multiplicative,DQ.antimatterMult,DQ.IPMult,DQ.EPMult).toNumber():0},get capObj(){return this.generationCaps[player.celestials.pelle.galaxyGenerator.phase]},get generationCap(){return this.capObj?this.capObj.cap:1/0},get capRift(){var e;return AQ[null===(e=this.capObj)||void 0===e?void 0:e.rift]},get isCapped(){return this.generationCap===this.generatedGalaxies},get sacrificeActive(){return player.celestials.pelle.galaxyGenerator.sacrificeActive},startSacrifice(){player.celestials.pelle.collapsed.rifts=!1,player.celestials.pelle.galaxyGenerator.sacrificeActive=!0},loop(e){if(this.isCapped&&Pelle.quotes.galaxyGeneratorRifts.show(),this.sacrificeActive){if(this.capRift.reducedTo=Math.max(this.capRift.reducedTo-.3*e/1e3,0),0===this.capRift.reducedTo){player.celestials.pelle.galaxyGenerator.sacrificeActive=!1,player.celestials.pelle.galaxyGenerator.phase++;const e=player.celestials.pelle.galaxyGenerator.phase;1===e?Pelle.quotes.galaxyGeneratorPhase1.show():4===e&&Pelle.quotes.galaxyGeneratorPhase4.show(),this.capObj||Pelle.quotes.end.show()}AQ.all.forEach((e=>e.checkMilestoneStates())),!AQ.vacuum.milestones[0].canBeApplied&&Glyphs.active.filter((e=>e)).length>0&&(Glyphs.unequipAll(player.options.respecIntoProtected&&-1===Glyphs.findFreeIndex(!0)),Glyphs.refreshActive())}player.celestials.pelle.galaxyGenerator.generatedGalaxies+=this.gainPerSecond*e/1e3,player.celestials.pelle.galaxyGenerator.generatedGalaxies=Math.min(player.celestials.pelle.galaxyGenerator.generatedGalaxies,this.generationCap),this.capRift||(AQ.all.forEach((t=>t.reducedTo=Math.min(t.reducedTo+.03*e/1e3,2))),AQ.vacuum.milestones[0].canBeApplied&&!this.hasReturnedGlyphSlot&&(Glyphs.refreshActive(),EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED),this.hasReturnedGlyphSlot=!0))}};class SQ extends M{get currency(){return this.config.currency()}get boughtAmount(){return player.celestials.pelle.rebuyables[this.id]}set boughtAmount(e){player.celestials.pelle.rebuyables[this.id]=e}get isCustomEffect(){return!0}get effectValue(){return this.config.effect(this.boughtAmount)}}const DQ=mapGameDataToObject(GameDatabase.celestials.pelle.galaxyGeneratorUpgrades,(e=>new SQ(e))),RQ={GAME_END:1,TAB_START_HIDE:1.5,INTERACTIVITY_DISABLED:2.5,FADE_AWAY:2.5,SAVE_DISABLED:4,END_NUMBERS:4.2,DISPLAY_DESTROYER_QUOTES:4.5,CREDITS_START:4.5,SHOW_NEW_GAME:13,SPECTATE_GAME:13.5,CREDITS_END:14.5},MQ={get endState(){return this.removeAdditionalEnd?this.additionalEnd:player.celestials.ra.upgrades.has("pelleUpgrade")&&!player.celestials.pelle.galaxyGenerator.unlocked?0:Math.max((Math.log10(player.celestials.pelle.records.totalAntimatter.plus(1).log10()+1)-8.7)/(Math.log10(9e15)-8.7)+this.additionalEnd,0)},_additionalEnd:0,get additionalEnd(){return player.isGameEnd||this.removeAdditionalEnd?this._additionalEnd:0},set additionalEnd(e){this._additionalEnd=player.isGameEnd||this.removeAdditionalEnd?e:0},removeAdditionalEnd:!1,creditsClosed:!1,creditsEverClosed:!1,gameLoop(e){this.removeAdditionalEnd&&(this.additionalEnd-=Math.min(e/200,.5),this.additionalEnd<4&&(this.additionalEnd=0,this.removeAdditionalEnd=!1)),!this.removeAdditionalEnd&&this.endState>=RQ.GAME_END&&void 0===ui.$viewModel.modal.progressBar&&(player.isGameEnd=!0,this.endState<4.5?player.mends.gte(new Decimal(10))?this.additionalEnd+=15*Math.min(e/1e3/20,.1):this.additionalEnd+=Math.min(e/1e3/20,.1):this.additionalEnd+=200*Math.min(e/1e3/20,.1))}},IQ={displayName:"The Destroyer",possessiveName:"The Destroyer's",get isUnlocked(){return!0},quotes:GK.destroyer,symbol:" "},xQ={teresa:hZ,effarig:TZ,enslaved:BK,v:RZ,ra:UZ,laitela:oQ,pelle:fQ,destroyer:IQ,kohler:gZ};GameDatabase.celestials.descriptions=[{name:"Teresa",effects(){return`Glyph Time Theorem generation is disabled.\n You gain less Infinity Points and Eternity Points (x^${format(.55,2,2)}).`}},{name:"Effarig",effects(){return`All Dimension multipliers, game speed, and tickspeed are severely lowered, like Dilation.\n Infinity Power reduces the production and game speed penalties and Time Shards reduce the tickspeed penalty.\n Glyph levels are temporarily capped to ${formatInt(TZ.glyphLevelCap)}, rarity is unaffected.`},description(){return"You will exit Effarig's Reality when you complete a Layer of it for the first time."}},{name:"The Nameless Ones",effects(){return`Glyph levels are boosted to a minimum of ${formatInt(5e3)}.\n Infinity, Time, and 8th Antimatter Dimension purchases are limited to ${formatInt(1)} each.\n Antimatter Dimension multipliers are always Dilated (the Glyph effect still only applies in actual Dilation).\n Time Study 192 (uncapped Replicanti) is locked.\n The Black Hole is disabled.\n Tachyon Particle production and Dilated Time production are severely reduced.\n Time Theorem generation from Dilation Glyphs is disabled.\n Certain challenge goals are increased.\n Stored game time is discharged at a reduced effectiveness (exponent^${format(.55,2,2)}).`}},{name:"V",effects(){const e="All Dimension multipliers, Eternity Point gain, Infinity Point gain, and Dilated Time gain per second are square-rooted. \n The Replicanti interval is squared.",t=" The Exponential Glyph Alchemy effect is disabled.";let i=e;return UZ.unlocks.unlockGlyphAlchemy.canBeApplied&&(i+=t),i}},{name:"Ra",effects(){return`You only have ${formatInt(4)} Dimension Boosts and can not gain any more.\n The Tickspeed purchase multiplier is fixed at ${formatX(1.1245,0,3)}.`}},{name:"Lai'tela",effects(){let e;const t=8-oQ.difficultyTier;switch(t){case 0:e="all Dimensions";break;case 1:e="2nd and higher Dimensions";break;case 2:e="3rd and higher Dimensions";break;case 7:e="8th Dimensions";break;default:e=`${t+1}th and higher Dimensions`;break}const i=8===t?"":`Production from ${e} is disabled.`;return`Infinity Point and Eternity Point gain are Dilated.\n Game speed is reduced to ${formatInt(1)} and gradually comes back over ${formatInt(10)} minutes.\n Black Hole storing, discharging, pulsing, and inversion are all disabled.\n ${i}`},description(){return`Antimatter generates entropy inside of this Reality. At ${formatPercents(1)} entropy, the Reality becomes destabilized and you gain a reward based on how quickly you reached ${formatPercents(1)}.\n Destabilizing the Reality in less than ${formatInt(30)} seconds makes it become significantly more difficult, in exchange for giving a much stronger reward. Doing this ${formatInt(8)} times will also give a ${formatX(8)} to Dark Energy gain.`}},{name:"YOU SHOULDN'T LOOK THIS",effects(){const e="This number 6 is dealt as a Error thrower when you enter Pelle through normal model.\n Do not use number 6.";return e}},{name:"SuperV",effects(){const e=`All Dimension multipliers, Tickspeed, Eternity Point gain, Infinity Point gain, and Dilated Time gain per second are ^(1 / ${format(1e6,0,0)}). \n The Replicanti interval is 5^its origin.\n The Exponential Glyph Alchemy effect is disabled.`;return e}},{name:"Kohler",effects(){return"TBD"}}];var PQ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{staticClass:"c-modal-options__large",attrs:{"cancel-class":"c-modal-message__okay-btn","confirm-class":"c-modal-message__okay-btn c-modal__confirm-btn","cancel-fn":e.overwrite},on:{confirm:function(t){return e.ignore()}},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Could not compare with Cloud Save ")]},proxy:!0},{key:"cancel-text",fn:function(){return[e._v(" "+e._s(e.overwriteText)+" ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Do not overwrite ")]},proxy:!0}])},[e._v(" While attempting to compare your saves, the game was unable to properly process the data in your Cloud save. This is most likely due to the Cloud save being very outdated, using a data format from a much older version of the game. "),i("br"),i("br"),e.isSaving?i("span",[e._v(' It is probably safe to overwrite your Cloud save. You can click "Cloud load" and force the save to be loaded if you would like to attempt to convert it to a valid save format that you can use. ')]):i("span",[e._v(" You can try to load your data from the Cloud if desired. The game will attempt to load in your Cloud data by converting its format, but this may not work and in the worst case may require you to reset this save slot in order for the game to work again. ")]),i("br"),e._v(" Note: This modal will show up regardless of your settings, because this issue will continue to prevent the 10-minute autosave until it is resolved. ")])},GQ=[],UQ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-modal-message l-modal-content--centered"},[i("span",{staticClass:"c-modal__header"},[i("ModalCloseButton",{on:{click:e.closeModal}}),e.$slots.header?i("span",{staticClass:"c-modal__title"},[e._t("header")],2):e._e()],1),e._t("default"),e.option?i("ModalConfirmationCheck",{attrs:{option:e.option}}):e._e(),i("div",{staticClass:"l-modal-buttons"},[e.showCancel?i("PrimaryButton",{class:e.cancelClass,on:{click:e.doCancel}},[e._t("cancel-text",(function(){return[e._v(" Cancel ")]}))],2):e._e(),e._t("extra-buttons"),e.showConfirm?i("PrimaryButton",{class:e.confirmClass,on:{click:e.doConfirm}},[e._t("confirm-text",(function(){return[e._v(" Confirm ")]}))],2):e._e()],2)],2)},BQ=[],NQ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-modal__confirmation-toggle",on:{click:e.toggle}},[i("div",{class:e.confirmationClass},[e.setting?e._e():i("span",{staticClass:"fas fa-check"}),i("div",{staticClass:"c-modal__confirmation-toggle__tooltip"},[e._v(" "+e._s(e.tooltipText)+" ")])]),i("span",{staticClass:"c-modal__confirmation-toggle__text"},[e._v(" Don't show this message again ")])])},OQ=[];const LQ={name:"ModalConfirmationCheck",props:{option:{type:String,required:!0}},data(){return{setting:!0}},computed:{confirmation(){return ConfirmationTypes[this.option]},confirmationClass(){return{"c-modal__confirmation-toggle__checkbox":!0,"c-modal__confirmation-toggle__checkbox--active":!this.setting}},tooltipText(){return`${this.setting?"Disable":"Reenable"} the ${this.confirmation.name} confirmation`}},created(){this.setting=this.confirmation.option},methods:{toggle(){this.setting=!this.setting,this.confirmation.option=this.setting}}},FQ=LQ;var $Q=(0,X.Z)(FQ,NQ,OQ,!1,null,null,null);const HQ=$Q.exports,qQ={name:"ModalWrapperChoice",components:{PrimaryButton:Vs,ModalConfirmationCheck:HQ,ModalCloseButton:Ij},props:{cancelClass:{type:String,required:!1,default:"o-primary-btn--width-medium c-modal-message__okay-btn"},confirmClass:{type:String,required:!1,default:"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn"},showCancel:{type:Boolean,required:!1,default:!0},showConfirm:{type:Boolean,required:!1,default:!0},option:{type:String,required:!1,default:void 0},confirmFn:{type:Function,required:!1,default:void 0},cancelFn:{type:Function,required:!1,default:void 0}},created(){this.on$(GAME_EVENT.ENTER_PRESSED,this.doConfirm)},methods:{doConfirm(){this.confirmFn?this.confirmFn():(this.$emit("confirm"),EventHub.dispatch(GAME_EVENT.CLOSE_MODAL))},doCancel(){this.cancelFn?this.cancelFn():(this.$emit("cancel"),EventHub.dispatch(GAME_EVENT.CLOSE_MODAL))},closeModal(){EventHub.dispatch(GAME_EVENT.CLOSE_MODAL)}}},VQ=qQ;var YQ=(0,X.Z)(VQ,UQ,BQ,!1,null,"02f37e5f",null);const WQ=YQ.exports,jQ={name:"CloudInvalidDataModal",components:{ModalWrapperChoice:WQ},props:{isSaving:{type:Boolean,required:!0}},computed:{conflict(){return this.$viewModel.modal.cloudConflict},overwriteText(){return this.isSaving?"Overwrite Cloud Save":"Load save from Cloud"}},methods:{ignore(){EventHub.dispatch(GAME_EVENT.CLOSE_MODAL)},overwrite(){var e,t;null===(e=(t=this.conflict).onAccept)||void 0===e||e.call(t),EventHub.dispatch(GAME_EVENT.CLOSE_MODAL)}}},XQ=jQ;var zQ=(0,X.Z)(XQ,PQ,GQ,!1,null,null,null);const KQ=zQ.exports;var ZQ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{staticClass:"c-modal-options__large",attrs:{"cancel-class":"c-modal-message__okay-btn","confirm-class":"c-modal-message__okay-btn c-modal__confirm-btn","confirm-fn":e.confirm},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Load Game from Cloud ")]},proxy:!0},{key:"cancel-text",fn:function(){return[e._v(" Keep Local Save ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Overwrite Local with Cloud Save ")]},proxy:!0}])},[e.hasDifferentName?i("span",[e._v(" Your Local and Cloud Saves have "),i("b",[e._v("different names")]),e._v(". ")]):e.older?i("span",[e._v(" Loading from the Cloud would "),i("b",[e._v("load a save with less playtime")]),e._v(". ")]):e.farther?i("span",[e._v(" Loading from the Cloud would "),i("b",[e._v("cause you to lose progress")]),e._v(". ")]):i("span",[e._v(" Your Local Save and Cloud Save "),i("b",[e._v("appear to have similar amounts of progress")]),e._v(". ")]),e._v(" Please select the save you want to load. "),i("br"),i("br"),i("SaveInfoEntry",{attrs:{"save-data":e.conflict.local,"other-data":e.conflict.cloud,"save-id":e.conflict.saveId,"show-name":e.hasDifferentName,"save-type":"Local Save"}}),i("SaveInfoEntry",{attrs:{"save-data":e.conflict.cloud,"other-data":e.conflict.local,"save-id":e.conflict.saveId,"show-name":e.hasDifferentName,"save-type":"Cloud Save"}}),i("span",{domProps:{innerHTML:e._s(e.suggestionText)}})],1)},QQ=[],JQ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-modal-options__save-record"},[i("h3",[e._v(e._s(e.saveType)+" "),e.saveId?i("span",[e._v("(Slot #"+e._s(e.saveId+1)+"):")]):e._e()]),e.showName?i("span",[e.name?i("span",[e._v(" Save Name: "+e._s(e.name)+" ")]):i("span",[e._v(" Unnamed Save ")]),i("br")]):e._e(),e._v(" "+e._s(e.timePlayed)+" "),i("br"),i("span",{domProps:{innerHTML:e._s(e.antimatter)}}),i("span",{domProps:{innerHTML:e._s(e.prestigeCount)}}),i("span",{domProps:{innerHTML:e._s(e.prestigeResource)}}),i("span",{domProps:{innerHTML:e._s(e.extraProgressIndicator)}}),i("br"),e._t("default")],2)},eJ=[];const tJ={name:"SaveInfoEntry",props:{saveId:{type:Number,required:!1,default:0},saveData:{type:Object,required:!0},otherData:{type:Object,required:!0},showName:{type:Boolean,required:!1,default:!0},saveType:{type:String,required:!0}},computed:{timePlayed(){return`Time Played: ${TimeSpan.fromMilliseconds(this.saveData.realTimePlayed).toString()}`},antimatter(){return this.compareLayeredValues(["pelleAM","totalAntimatter"],["Total Doomed Antimatter:","Total Antimatter:"],[format,format],"")},prestigeCount(){return this.compareLayeredValues(["remnants","realities","eternities","infinities"],["Remnants:","Realities:","Eternities:","Infinities:"],[format,this.formatSmall,this.formatSmall,this.formatSmall],"(No prestige layers reached yet.)")},prestigeResource(){return this.compareLayeredValues(["realityShards","imaginaryMachines","realityMachines","eternityPoints","infinityPoints"],["Reality Shards:","Reality Machines:","Reality Machines:","Eternity Points:","Infinity Points:"],[format,e=>formatMachines(this.saveData.realityMachines,e),format,format,format],"")},extraProgressIndicator(){return this.compareLayeredValues(["pelleLore","bestLevel","dilatedTime"],["Your Reality is Doomed.","Best Glyph Level:","Dilated Time:"],[()=>"",formatInt,format],"")},name(){return this.saveData.saveName}},methods:{formatSmall(e){return Decimal.gt(e,1e4)?format(e,2):formatInt(e)},compareLayeredValues(e,t,i,a){let n,s;for(let u=0;ugetComputedStyle(document.body).getPropertyValue(`--color-${e}`).split("#")[1],c=``;return n?`${r} ${c}${o}`:`${c}${r} ${o}
`}}},iJ=tJ;var aJ=(0,X.Z)(iJ,JQ,eJ,!1,null,null,null);const nJ=aJ.exports,sJ={name:"CloudLoadConflictModal",components:{ModalWrapperChoice:WQ,SaveInfoEntry:nJ},computed:{conflict(){return this.$viewModel.modal.cloudConflict},older(){return 1===this.conflict.saveComparison.older},farther(){return 1===this.conflict.saveComparison.farther},hasDifferentName(){return this.conflict.cloud.saveName!==this.conflict.local.saveName},suggestionText(){const e='style="color: var(--color-good)"',t='style="color: var(--color-bad)"',i=["Loading this Cloud save "],a=this.conflict.cloud.compositeProgress,n=this.conflict.local.compositeProgress,s=this.farther&&Math.abs(a-n)>.15;return i.push(s?`would cause your local save to lose significant progress`:`is probably safe`),this.hasDifferentName&&i.push(`
${s?"Additionally":"However"}, the Cloud save\n may be a save from a different device.`),(s||this.hasDifferentName)&&i.push(`
Are you sure you wish to overwrite your local save?`),i.join("")}},methods:{confirm(){var e,t;null===(e=(t=this.conflict).onAccept)||void 0===e||e.call(t),EventHub.dispatch(GAME_EVENT.CLOSE_MODAL)}}},rJ=sJ;var oJ=(0,X.Z)(rJ,ZQ,QQ,!1,null,null,null);const lJ=oJ.exports;var cJ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{staticClass:"c-modal-options__large",attrs:{"cancel-class":"c-modal-message__okay-btn","confirm-class":"c-modal-message__okay-btn c-modal__confirm-btn","cancel-fn":e.overwrite},on:{confirm:function(t){return e.doNotSave()}},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Save Game to Cloud ")]},proxy:!0},{key:"cancel-text",fn:function(){return[e._v(" Overwrite Cloud Save ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Do not overwrite ")]},proxy:!0}])},[e.wrongHash?i("span",[e._v(" Your Cloud Save has been "),i("b",[e._v("changed by a different device")]),e._v(" since you last saved to the Cloud this session. ")]):e.hasDifferentName?i("span",[e._v(" Your Local and Cloud Saves have "),i("b",[e._v("different names")]),e._v(". ")]):e.older?i("span",[e._v(" Saving to the Cloud would "),i("b",[e._v("overwrite an older save")]),e._v(". ")]):e.farther?i("span",[e._v(" Saving to the Cloud would "),i("b",[e._v("overwrite a save with more progress")]),e._v(". ")]):i("span",[e._v(" Your Local Save and Cloud Save "),i("b",[e._v("appear to have similar amounts of progress")]),e._v(". ")]),i("br"),i("SaveInfoEntry",{attrs:{"save-data":e.conflict.local,"other-data":e.conflict.cloud,"save-id":e.conflict.saveId,"show-name":e.hasDifferentName,"save-type":"Local Save"}}),i("SaveInfoEntry",{attrs:{"save-data":e.conflict.cloud,"other-data":e.conflict.local,"save-id":e.conflict.saveId,"show-name":e.hasDifferentName,"save-type":"Cloud Save"}}),i("span",{domProps:{innerHTML:e._s(e.suggestionText)}}),i("br"),i("span",[e._v(" Not overwriting will turn off Cloud saving and you will need to manually turn it back on again if you want to use it. "),i("span",{attrs:{"ach-tooltip":e.noOverwriteInfo}},[i("i",{staticClass:"fas fa-question-circle"})])]),i("span",[e._v(" Overwriting will force a save to the Cloud in this particular instance; in most cases this should prevent this modal from reappearing afterwards. "),i("span",{attrs:{"ach-tooltip":e.overwriteInfo}},[i("i",{staticClass:"fas fa-question-circle"})])])],1)},uJ=[];const dJ={name:"CloudSaveConflictModal",components:{ModalWrapperChoice:WQ,SaveInfoEntry:nJ},computed:{conflict(){return this.$viewModel.modal.cloudConflict},older(){return-1===this.conflict.saveComparison.older},farther(){return-1===this.conflict.saveComparison.farther},hasDifferentName(){return this.conflict.cloud.saveName!==this.conflict.local.saveName},wrongHash(){return this.conflict.saveComparison.hashMismatch},suggestionText(){const e='style="color: var(--color-good)"',t='style="color: var(--color-infinity)"',i=["Saving to the Cloud "],a=this.conflict.cloud.compositeProgress,n=this.conflict.local.compositeProgress,s=this.farther&&Math.abs(a-n)>.15;return i.push(s?`would overwrite a save with significantly more progress`:`is probably safe`),(this.hasDifferentName||this.wrongHash)&&i.push(` ${s?"Additionally":"However"}, you may be overwriting a \n save from a different device.`),(s||this.hasDifferentName||this.wrongHash)&&i.push(`
Are you sure you wish to overwrite the Cloud save?`),i.join("")},noOverwriteInfo(){return"Save conflicts will keep occurring without overwriting."},overwriteInfo(){return"If another device is also saving to the cloud on this Google Account at the same time,\n this modal may appear repeatedly."}},methods:{doNotSave(){player.options.cloudEnabled=!1,EventHub.dispatch(GAME_EVENT.CLOSE_MODAL)},overwrite(){var e,t;null===(e=(t=this.conflict).onAccept)||void 0===e||e.call(t),EventHub.dispatch(GAME_EVENT.CLOSE_MODAL)}}},hJ=dJ;var mJ=(0,X.Z)(hJ,cJ,uJ,!1,null,null,null);const pJ=mJ.exports;var yJ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"challenges"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.entranceLabel)+" ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Begin ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.message)+" "),i("br"),i("br"),e._v(" "+e._s(e.condition)+" ")]),e.challengeIsCompleted?e._e():i("div",{staticClass:"c-modal-message__text"},[i("br"),e._v(" "+e._s(e.reward)+" ")])])},fJ=[];const gJ={name:"EternityChallengeStartModal",components:{ModalWrapperChoice:WQ},props:{id:{type:Number,required:!0}},computed:{challenge(){return EternityChallenge(this.id)},challengeIsCompleted(){return this.challenge.isFullyCompleted},message(){return`You will Eternity (if possible) and start a new Eternity within the Challenge, with all the\n Challenge-specific restrictions and modifiers active.\n To complete the Challenge${this.challengeIsCompleted?"":" and gain its reward"},\n you must reach the Challenge goal of\n ${format(this.challenge.currentGoal)} Infinity Points. You can complete Eternity Challenges up to\n ${formatInt(5)} times, with increasing goals and bonuses.`},entranceLabel(){return`You are about to enter Eternity Challenge ${this.id}`},reward(){let e=this.challenge._config.reward.description;return"function"===typeof e&&(e=e()),`The reward for completing this challenge is: ${e}`},condition(){let e=this.challenge._config.description;return"function"===typeof e&&(e=e()),`Inside this Eternity Challenge, ${e}`}},created(){this.on$(GAME_EVENT.ETERNITY_RESET_AFTER,this.emitClose),this.on$(GAME_EVENT.REALITY_RESET_AFTER,this.emitClose)},methods:{handleYesClick(){this.challenge.start(!0),EventHub.ui.offAll(this)}}},vJ=gJ;var bJ=(0,X.Z)(vJ,yJ,fJ,!1,null,null,null);const EJ=bJ.exports;var TJ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"challenges"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.entranceLabel)+" ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Begin ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.message)+" "),i("br"),i("br"),e._v(" "+e._s(e.condition)+" ")]),e.challengeIsCompleted?e._e():i("div",{staticClass:"c-modal-message__text"},[i("br"),e._v(" "+e._s(e.reward)+" ")])])},wJ=[];const kJ={name:"InfinityChallengeStartModal",components:{ModalWrapperChoice:WQ},props:{id:{type:Number,required:!0}},computed:{challenge(){return InfinityChallenge(this.id)},challengeIsCompleted(){return this.challenge.isCompleted},message(){return`You will Big Crunch (if possible) and start a new Infinity within the Challenge with all the\n Challenge-specific restrictions and modifiers active.\n To complete the Challenge${this.challengeIsCompleted?"":" and gain its reward"},\n you must reach the Challenge goal of\n ${format(InfinityChallenge(this.id).goal)} Antimatter.\n You do not start with any Dimension Boosts or Galaxies, regardless of upgrades.`},entranceLabel(){return`You are about to enter Infinity Challenge ${this.id}`},reward(){let e=this.challenge._config.reward.description;return"function"===typeof e&&(e=e()),`The reward for completing this challenge is: ${e}`},condition(){let e=this.challenge._config.description;return"function"===typeof e&&(e=e()),`Inside this Infinity Challenge, ${e}`}},created(){this.on$(GAME_EVENT.ETERNITY_RESET_AFTER,this.emitClose),this.on$(GAME_EVENT.REALITY_RESET_AFTER,this.emitClose)},methods:{handleYesClick(){this.challenge.start()}}},CJ=kJ;var AJ=(0,X.Z)(CJ,TJ,wJ,!1,null,null,null);const _J=AJ.exports;var SJ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-modal-message l-modal-content--centered"},[e.modal.closeButton?i("ModalCloseButton",{class:e.isThemeS12?"c-modal__close-btn":"c-modal__close-btn--tiny",on:{click:e.emitClose}}):e.isThemeS12?i("ModalCloseButton",{staticClass:"c-modal__close-btn c-modal__close-btn--disabled"}):e._e(),i("div",{staticClass:"c-modal-message__text",domProps:{innerHTML:e._s(e.message)}}),i("PrimaryButton",{staticClass:"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn",on:{click:e.handleClick}},[e._v(" Okay ")]),e.isThemeS12?i("div",{staticClass:"c-modal__title"},[e._v(" Message ")]):e._e()],1)},DJ=[];const RJ={name:"MessageModal",components:{PrimaryButton:Vs,ModalCloseButton:Ij},data(){return{message:""}},computed:{modal(){return this.$viewModel.modal.current},isThemeS12(){return"S12"===this.$viewModel.theme}},created(){this.on$(GAME_EVENT.ENTER_PRESSED,this.handleClick)},methods:{update(){var e;this.message=null===(e=this.modal)||void 0===e?void 0:e.message},handleClick(){var e,t;null===(e=(t=this.modal).callback)||void 0===e||e.call(t),this.emitClose(),EventHub.ui.offAll(this)}}},MJ=RJ;var IJ=(0,X.Z)(MJ,SJ,DJ,!1,null,null,null);const xJ=IJ.exports;var PJ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"challenges"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.entranceLabel)+" ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Begin ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.message)+" "),i("br"),i("br"),e._v(" "+e._s(e.condition)+" ")]),e.challengeIsCompleted?e._e():i("div",{staticClass:"c-modal-message__text"},[i("br"),e._v(" "+e._s(e.reward)+" ")])])},GJ=[];const UJ={name:"NormalChallengeStartModal",components:{ModalWrapperChoice:WQ},props:{id:{type:Number,required:!0}},computed:{challenge(){return NormalChallenge(this.id)},challengeIsCompleted(){return this.challenge.isCompleted},message(){return`You will Big Crunch (if possible) and start a new Infinity within the Challenge with all the\n Challenge-specific restrictions and modifiers active.\n To complete the Challenge${this.challengeIsCompleted?"":" and gain its reward"},\n you must reach Infinity again.\n You do not start with any Dimension Boosts or Galaxies, regardless of upgrades.`},entranceLabel(){return`You are about to enter Challenge ${this.id}`},reward(){return`The reward for completing this challenge is: ${this.challenge._config.reward}`},condition(){let e=this.challenge._config.description;return"function"===typeof e&&(e=e()),`Inside this Challenge, ${e}`}},created(){this.on$(GAME_EVENT.ETERNITY_RESET_AFTER,this.emitClose),this.on$(GAME_EVENT.REALITY_RESET_AFTER,this.emitClose)},methods:{handleYesClick(){this.challenge.start()}}},BJ=UJ;var NJ=(0,X.Z)(BJ,PJ,GJ,!1,null,null,null);const OJ=NJ.exports;var LJ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"antimatterGalaxy"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.topLabel)+" ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.message)+" ")])])},FJ=[];const $J={name:"AntimatterGalaxyModal",components:{ModalWrapperChoice:WQ},props:{bulk:{type:Boolean,required:!0}},data(){return{newGalaxies:0,keepAntimatter:!1,perkANRBought:!1,keepDimBoost:!1}},computed:{topLabel(){return this.bulk?`You are about to purchase ${quantifyInt("Antimatter Galaxy",this.newGalaxies)}`:"You are about to purchase an Antimatter Galaxy"},message(){const e=[];Pelle.isDoomed&&e.push("Antimatter","Antimatter Dimensions","Tickspeed"),this.perkANRBought||e.push("Antimatter Dimensions","Tickspeed"),this.keepDimBoost||e.push("Dimension Boosts"),this.keepAntimatter||this.perkANRBought||e.push("Antimatter");const t=makeEnumeration(e);let i="";InfinityChallenge(3).isRunning?i=`Infinity Challenge ${InfinityChallenge(3).id}`:Ra.isRunning&&(i=`${Ra.displayName}'s Reality`);const a=""===i?"you will receive a small boost to Tickspeed Upgrades.":`you will not receive a boost to Tickspeed Upgrades, because you are in ${i}.`,n=""===t?`This will reset nothing, and ${a}`:`This will reset your ${t}. However, ${a}`;return this.bulk?`Are you sure you want to purchase\n ${quantifyInt("Antimatter Galaxy",this.newGalaxies)}? ${n}`:`Are you sure you want to purchase an Antimatter Galaxy? ${n}`}},created(){this.on$(GAME_EVENT.DIMBOOST_AFTER,(()=>BreakInfinityUpgrade.autobuyMaxDimboosts.isBought?void 0:this.emitClose()))},methods:{update(){if(this.bulk){const e=Galaxy.requirement,t=AntimatterDimension(e.tier),i=bulkBuyBinarySearch(t.totalAmount,{costFunction:e=>Galaxy.requirementAt(e).amount,cumulative:!1},player.galaxies);i&&(this.newGalaxies=Galaxy.buyableGalaxies(Math.round(t.totalAmount.toNumber()))-player.galaxies)}this.keepAntimatter=Achievement(111).isUnlocked,this.perkANRBought=Perk.antimatterNoReset.canBeApplied,this.keepDimBoost=Achievement(143).isUnlocked&&!Pelle.isDoomed||PelleUpgrade.galaxyNoResetDimboost.canBeApplied},handleYesClick(){requestGalaxyReset(this.bulk),EventHub.ui.offAll(this)}}},HJ=$J;var qJ=(0,X.Z)(HJ,LJ,FJ,!1,null,null,null);const VJ=qJ.exports;var YJ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:e.isDoomed?"armageddon":void 0},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.topLabel)+" ")]},proxy:!0}])},[e.isDoomed?i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.message)+" ")]):i("div",{staticClass:"c-modal-message__text"},[e._v(" Dooming your Reality will reset everything except Challenge records, Celestial progress and anything under the General and Reality header on the Statistics tab. You will not gain any rewards from your progress in your current Reality. Dooming your Reality will also purge most of your unprotected Glyphs and disable certain game mechanics. "),i("br"),i("br"),e._v(" Are you sure you want to do this? ")])])},WJ=[];const jJ={name:"ArmageddonModal",components:{ModalWrapperChoice:WQ},data(){return{isDoomed:!1,remnantsGain:0,realityShardGain:new Decimal(0),nextRealityShardGain:new Decimal(0),canArmageddon:!1}},computed:{topLabel(){return this.isDoomed?"You are about to perform an Armageddon reset":"You are about to Doom your Reality"},message(){const e=Currency.remnants.eq(0)?`which will produce ${format(this.nextRealityShardGain,2,2)} Reality Shards/s`:`which will increase your Reality Shards gain from ${format(this.realityShardGain,2,2)}/s\n to ${format(this.nextRealityShardGain,2,2)}/s`;return`Armageddon will start a new Doomed Reality. You will gain\n ${quantify("Remnant",this.remnantsGain,2,0)} ${e}`}},methods:{update(){this.isDoomed=Pelle.isDoomed,this.remnantsGain=Pelle.remnantsGain,this.realityShardGain.copyFrom(Pelle.realityShardGainPerSecond),this.nextRealityShardGain.copyFrom(Pelle.nextRealityShardGain),this.canArmageddon=Pelle.canArmageddon},handleYesClick(){Pelle.initializeRun()}}},XJ=jJ;var zJ=(0,X.Z)(XJ,YJ,WJ,!1,null,null,null);const KJ=zJ.exports;var ZJ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ResetModal",{attrs:{header:"You are about to Infinity",message:e.message,"gained-resources":e.ipGainInfo,"starting-resources":e.startingResources,"confirm-fn":e.handleYesClick,"alternate-condition":e.isFirstInfinity,"alternate-text":e.message,"confirm-option":e.isFirstInfinity?void 0:"bigCrunch"}})},QJ=[],JJ=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:e.confirmOption},on:{confirm:e.confirmFn},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.header)+" ")]},proxy:!0}])},[e.alternateCondition?i("div",[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.alternateText)+" ")])]):i("div",[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.message)+" "),i("br")]),i("br"),i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.gainedResources)+" ")]),i("br"),e.startingResources?i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.startingResources)+" ")]):e._e()])])},e0=[];const t0={name:"ResetModal",components:{ModalWrapperChoice:WQ},props:{header:{type:String,required:!0},message:{type:String,required:!0},gainedResources:{type:String,required:!0},startingResources:{type:String,required:!1,default:void 0},confirmOption:{type:String,required:!1,default:void 0},confirmFn:{type:Function,required:!0},alternateText:{type:String,required:!1,default:void 0},alternateCondition:{type:Boolean,required:!1,default:!1}}},i0=t0;var a0=(0,X.Z)(i0,JJ,e0,!1,null,null,null);const n0=a0.exports,s0={name:"BigCrunchModal",components:{ResetModal:n0},data(){return{gainedInfinities:new Decimal,gainedInfinityPoints:new Decimal,startingBoosts:0,startingAM:10,willStartWithGalaxy:!1}},computed:{isFirstInfinity(){return!PlayerProgress.infinityUnlocked()},message(){const e=this.isFirstInfinity?this.firstInfinityInfo:"";return`Upon Infinity, all Dimensions, Dimension Boosts, and Antimatter Galaxies are reset. ${e}`},firstInfinityInfo(){return"In return, you gain an Infinity Point (IP). This allows you to buy multiple upgrades that you can\n find in the Infinity tab. You will also gain one Infinity, which is the stat shown in the Statistics tab."},ipGainInfo(){return`You will gain ${quantify("Infinity",this.gainedInfinities,2,0)}\n and ${quantify("Infinity Point",this.gainedInfinityPoints,2,0)}.`},startingResources(){const e=[];return this.startingAM.gte(10)&&e.push(`${quantify("Antimatter",this.startingAM,2,1)}`),this.startingBoosts>0&&e.push(`${quantify("Dimension Boost",this.startingBoosts)}`),this.willStartWithGalaxy&&e.push(`${quantify("Galaxy",1)}`),`You will start your next Infinity with ${makeEnumeration(e)}.`}},methods:{update(){this.gainedInfinities=gainedInfinities().round(),this.gainedInfinityPoints=gainedInfinityPoints().round(),this.startingBoosts=DimBoost.startingDimensionBoosts,this.startingAM=Currency.antimatter.startingValue,this.willStartWithGalaxy=InfinityUpgrade.skipResetGalaxy.isBought},handleYesClick(){bigCrunchResetRequest(),EventHub.ui.offAll(this),this.isFirstInfinity&&setTimeout((()=>Modal.message.show("This animation will occur after every manually-triggered Infinity. If\n you would like to disable it, there is a setting to do so in the Options tab. This can be done for any\n visual animation effect in the game after seeing it for the first time.",{},3)),2e3)}}},r0=s0;var o0=(0,X.Z)(r0,ZJ,QJ,!1,null,null,null);const l0=o0.exports;var c0=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"dimensionBoost"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.topLabel)+" ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.message)+" ")])])},u0=[];const d0={name:"DimensionBoostModal",components:{ModalWrapperChoice:WQ},props:{bulk:{type:Boolean,required:!0}},computed:{topLabel(){return"You are about to do a Dimension Boost Reset"},message(){const e=Perk.antimatterNoReset.canBeApplied||Achievement(111).canBeApplied||PelleUpgrade.dimBoostResetsNothing.isBought?"not actually reset anything due to an upgrade you have which prevents Antimatter and Antimatter Dimensions\n from being reset in this situation. You will still gain the multiplier from the Boost, as usual.":"reset your Antimatter and Antimatter Dimensions. Are you sure you want to do this?";return`This will ${e}`}},methods:{handleYesClick(){requestDimensionBoost(this.bulk),EventHub.ui.offAll(this)}}},h0=d0;var m0=(0,X.Z)(h0,c0,u0,!1,null,null,null);const p0=m0.exports;var y0=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.topLabel)+" ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Begin ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.message)+" "),i("br"),i("br"),i("div",{staticClass:"c-modal-celestial__run-effects"},e._l(e.effects,(function(t,a){return i("div",{key:a,staticClass:"c-modal-celestial__run-effects__line",class:{"o-pelle-disabled":4===e.number&&0===a&&e.dimboostUncapped}},[t.trim()?i("b",[e._v("•")]):e._e(),i("b",[e._v(" ")]),e._v(" "+e._s(t)+" ")])})),0),e.description?i("div",{staticClass:"reality-description"},[i("br"),i("br"),e._v(" "+e._s(e.description)+" ")]):e._e(),i("br"),i("br"),i("div",[e._v(" "+e._s(e.extraLine)+" ")]),4===e.number?i("span",e._l(7,(function(e){return i("EnterCelestialsRaPet",{key:e,attrs:{"pet-id":e-1}})})),1):e._e()])])},f0=[],g0=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isUnlocked?i("span",{style:e.color},[e._v(" "+e._s(e.name)+" "+e._s(e.gainText)+". "),i("br")]):e._e()},v0=[];const b0={name:"EnterCelestialsRaPet",props:{petId:{type:Number,required:!0}},data(){return{isUnlocked:!1}},computed:{pet(){return Ra.pets.all[this.petId]},name(){return this.pet.name},color(){return`color: ${this.pet.color}`},gainText(){const e="enslaved"===this.pet.id,t=e?"gain":"gains",i=e?"have":"has",a="pelle"===this.pet.id?"only gains Memory Chunks in a Doomed Reality":`${t} Memory Chunks based on ${this.chunkGain}`;return this.pet.level===(MendingUpgrade(19).isBought?100:25)?`${i} regained all Memories`:a},chunkGain(){return this.pet.chunkGain}},methods:{update(){this.isUnlocked=this.pet.isUnlocked}}},E0=b0;var T0=(0,X.Z)(E0,g0,v0,!1,null,null,null);const w0=T0.exports,k0={name:"EnterCelestialsModal",components:{ModalWrapperChoice:WQ,EnterCelestialsRaPet:w0},props:{number:{type:Number,required:!0},name:{type:String,required:!0}},data(){return{laitelaFastest:3600,teresaBestAM:new Decimal,teresaRunMult:0,effarigDone:!1,effarigLayer:"",enslavedDone:!1,laitelaTime:""}},computed:{effects(){return GameDatabase.celestials.descriptions[this.number].effects().split("\n")},description(){const e=GameDatabase.celestials.descriptions[this.number].description;return e?e():""},topLabel(){return`${this.name} Reality`},message(){return`Perform a Reality reset and enter ${this.name} Reality, in which:`},extraLine(){switch(this.number){case 0:return this.teresaBestAM.eq(1)?"You have not unlocked the reward for Teresa's Reality yet. Unlocking the reward requires\n purchasing the Reality study and completing the Reality for the first time.":`Your highest Teresa completion was for ${format(this.teresaBestAM,2,2)} antimatter,\n gaining you a ${formatX(this.teresaRunMult,2)} multiplier to Glyph Sacrifice power.`;case 1:return this.effarigDone?"Effarig is completed!":`You are currently on the ${this.effarigLayer} Layer.`;case 2:return this.enslavedDone?"Have... we... not helped enough...":"We... can help... Let us... help...";case 3:return"";case 4:return"Within Ra's Reality, some resources will generate Memory Chunks\n for Celestial Memories based on their amounts:";case 5:return this.laitelaFastest>=300?"You have not completed Lai'tela at this tier.":`Your fastest completion on this tier is ${this.laitelaTime}.`;case 6:return"";case 7:return"";default:throw new Error("Attempted to start an Unknown Celestial in Celestial Modal Confirmation.")}},dimboostUncapped:()=>Ra.unlocks.raRealUncapDimboost.isUnlocked},methods:{update(){this.teresaBestAM.copyFrom(player.celestials.teresa.bestRunAM),this.teresaRunMult=Teresa.runRewardMultiplier;const e=Effarig.currentStage;this.effarigDone=e===EFFARIG_STAGES.COMPLETED&&!Ra.unlocks.effarigMendUnlock.isUnlocked||e===EFFARIG_STAGES.MEND_COMPLETED,this.effarigLayer=[null,"Infinity","Eternity","Reality",null,"Mending"][e],this.enslavedDone=Enslaved.isCompleted,this.laitelaFastest=player.celestials.laitela.fastestCompletion,this.laitelaTime=TimeSpan.fromSeconds(this.laitelaFastest).toStringShort()},handleYesClick(){switch(beginProcessReality(getRealityProps(!0)),this.number){case 0:return Teresa.initializeRun();case 1:return Effarig.initializeRun();case 2:return Enslaved.initializeRun();case 3:return V.initializeRun();case 4:return Ra.initializeRun();case 5:return Laitela.initializeRun();case 6:throw new Error("Attempted to start Pelle through EnterCelestialsModal instead of ArmageddonModal");case 7:return V.initializeSuperRun();default:throw new Error("Attempted to start an Unknown Celestial in Celestial Modal Confirmation.")}}}},C0=k0;var A0=(0,X.Z)(C0,y0,f0,!1,null,"5652f348",null);const _0=A0.exports;var S0=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"dilation"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.entranceLabel)+" ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Enter ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.EPSinceLabel)+" "),i("br"),i("br"),e._v(" "+e._s(e.message)+" ")])])},D0=[];const R0={name:"EnterDilationModal",components:{ModalWrapperChoice:WQ},computed:{message(){return`Dilating time will start a new Eternity, and all Dimension multiplier's exponents and\n tickspeed multiplier's exponent will be reduced to ${formatPow(.75,2,2)}. If you can Eternity while Dilated,\n your Tachyon Particles will be increased to a value based on your highest antimatter and any Tachyon Particle\n multipliers you have.`},entranceLabel(){return"You are about to enter Dilation"},EPSinceLabel(){return player.dilation.lastEP.eq(-1)?"This is your first Dilation":!isInCelestialReality()&&Ra.unlocks.unlockDilationStartingTP.canBeApplied?`You already have the maximum feasible amount of Tachyon Particles you can attain due to\n Teresa's Level ${formatInt(25)} reward.`:`You last completed Dilation at ${format(player.dilation.lastEP,2,2)} Eternity Points.`}},methods:{handleYesClick(){player.dilation.active||(player.options.animations.dilation&&!Hu.isDisplaying?animateAndDilate():startDilatedEternity(),Pelle.isDoomed&&PelleStrikes.dilation.trigger())}}},M0=R0;var I0=(0,X.Z)(M0,S0,D0,!1,null,null,null);const x0=I0.exports;var P0=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ResetModal",{attrs:{header:e.exitingEC?"Complete Eternity Challenge":"You are about to Eternity",message:e.message,"gained-resources":e.gainedEPOnEternity,"starting-resources":e.startWithIP,"confirm-fn":e.handleYesClick,"alternate-condition":e.exitingEC,"alternate-text":e.exitingEC?e.eternityChallenge:void 0,"confirm-option":"eternity"}})},G0=[];const U0={name:"EternityModal",components:{ResetModal:n0},data(){return{exitingEC:!1,startingIP:new Decimal,gainedEternityPoints:new Decimal,gainedEternities:new Decimal}},computed:{message(){return PlayerProgress.eternityUnlocked()?"Eternity will reset everything except Achievements, Challenge records, and anything under the General header\n on the Statistics tab.":"Eternity will reset everything except Achievements, Challenge records, and anything under the General header\n on the Statistics tab. You will also gain an Eternity Point and unlock various upgrades."},gainedEPOnEternity(){return`You will gain ${quantify("Eternity",this.gainedEternities,2)} \n and ${quantify("Eternity Point",this.gainedEternityPoints,2)} on Eternity.`},startWithIP(){return this.startingIP.gt(0)?`You will start your next Eternity with ${quantify("Infinity Point",this.startingIP,2)}.`:""},eternityChallenge(){const e=EternityChallenge.current;if(e.isFullyCompleted)return`Eternity Challenge ${e.id} is already fully completed.`;if(!Perk.studyECBulk.isBought)return`You will gain one completion of Eternity Challenge ${e.id}.`;const t=e.gainedCompletionStatus.gainedCompletions;return`You will gain ${quantifyInt("completion",t)} for Eternity Challenge ${e.id}.`}},methods:{update(){this.exitingEC=EternityChallenge.isRunning,this.startingIP=Currency.infinityPoints.startingValue,this.gainedEternityPoints=gainedEternityPoints(),this.gainedEternities=gainedEternities()},handleYesClick(){animateAndEternity(),EventHub.ui.offAll(this)}}},B0=U0;var N0=(0,X.Z)(B0,P0,G0,!1,null,null,null);const O0=N0.exports;var L0=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"exitChallenge"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" You are about to "+e._s(e.isRestarting?"restart":"exit")+" "+e._s(e.challengeName)+" ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" "+e._s(e.isRestarting?"Restart":"Exit")+" ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e.isRestarting?i("span",[e._v(" You will immediately re-enter "+e._s(e.challengeName)+" again after confirming this modal. ")]):i("span",[e._v(" This will place you back into a regular "+e._s(e.normalName)+" without any restrictions. ")]),e.hasHigherLayers?i("span",[e._v(" Other effects coming from higher-layer restrictions will still continue to apply. ")]):e._e()])])},F0=[];const $0={name:"ExitChallengeModal",components:{ModalWrapperChoice:WQ},props:{challengeName:{type:String,required:!0},normalName:{type:String,required:!0},hasHigherLayers:{type:Boolean,required:!0},exitFn:{type:Function,required:!0}},computed:{isCelestial(){return this.challengeName.match("Reality")},isRestarting(){return this.isCelestial?player.options.retryCelestial:player.options.retryChallenge}},methods:{handleYesClick(){this.exitFn(),EventHub.ui.offAll(this)}}},H0=$0;var q0=(0,X.Z)(H0,L0,F0,!1,null,null,null);const V0=q0.exports;var Y0=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"dilation"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e.isDoomed?i("span",[e._v(" You cannot exit Dilation while Doomed ")]):i("span",[e._v(" You are about to exit Dilation ")])]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Exit ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e.isDoomed?i("span",[e._v(" Dilation is permanent. You will "+e._s(e.gainText)+" and reset your current eternity. You will not gain any Eternity Points. ")]):i("span",[e._v(" If you exit Dilation now, you will "+e._s(e.gainText)+". ")]),e.isInEC?i("div",[e._v(" You will also exit your current Eternity Challenge as well. ")]):e._e(),i("br"),e._v(" Are you sure you want to proceed? ")])])},W0=[];const j0={name:"ExitDilationModal",components:{ModalWrapperChoice:WQ},data(){return{tachyonGain:new Decimal(0),isDoomed:!1}},computed:{gainText(){return this.tachyonGain.lte(0)?"not gain anything":`gain ${quantify("Tachyon Particle",this.tachyonGain,2,1)}`},isInEC(){return Player.anyChallenge instanceof EternityChallengeState}},methods:{update(){player.dilation.active||this.emitClose(),this.tachyonGain.copyFrom(getTachyonGain(!0)),this.isDoomed=Pelle.isDoomed},handleYesClick(){if(!player.dilation.active)return;const e=player.options.animations.dilation&&!Hu.isDisplaying;e?animateAndUndilate():eternity(!1,!1,{switchingDilation:!0})}}},X0=j0;var z0=(0,X.Z)(X0,Y0,W0,!1,null,null,null);const K0=z0.exports;var Z0=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{"show-cancel":!e.willHardReset,"show-confirm":e.willHardReset,"confirm-class":"o-primary-btn--width-medium c-modal__confirm-btn c-modal-hard-reset-btn"},on:{confirm:e.hardReset},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" HARD RESET ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" HARD RESET ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" Please confirm your desire to hard reset this save slot. "),i("span",{staticClass:"c-modal-hard-reset-danger"},[e._v("Deleting your save will not unlock anything secret.")]),e._v(' Type in "I promise not to simp for Lai\'tela" to confirm. '),i("div",{staticClass:"c-modal-hard-reset-danger"},[e._v(" THIS WILL WIPE YOUR SAVE. "),e.hasExtraNG?i("span",[i("br"),e._v(" This will also remove any Glyph cosmetics you have unlocked from completing the game! ")]):e._e(),e.hasSpeedrun?i("span",[i("br"),e._v(' You will lose the ability to do a Speedrun. To restart your run, use the "Start Speedrun" button instead. ')]):e._e()])]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.input,expression:"input"}],ref:"input",staticClass:"c-modal-input c-modal-hard-reset__input",attrs:{type:"text"},domProps:{value:e.input},on:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.emitClose.apply(null,arguments)},input:function(t){t.target.composing||(e.input=t.target.value)}}}),i("div",{staticClass:"c-modal-hard-reset-info"},[e.willHardReset?i("div",{staticClass:"c-modal-hard-reset-danger"},[e._v(" Phrase confirmed - continuing will irreversibly delete your save! ")]):i("div",[e._v(" Type in the correct phrase to hard reset. ")])])])},Q0=[];const J0={name:"HardResetModal",components:{ModalWrapperChoice:WQ},data(){return{input:""}},computed:{willHardReset(){return"I promise not to simp for Lai'tela"===this.input},hasExtraNG(){return player.records.fullGameCompletions>0},hasSpeedrun(){return player.speedrun.isUnlocked}},destroyed(){this.willHardReset&&SecretAchievement(38).unlock()},methods:{hardReset(){this.willHardReset&&GameStorage.hardReset(),this.input=""}}},e1=J0;var t1=(0,X.Z)(e1,Z0,Q0,!1,null,null,null);const i1=t1.exports;var a1=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:e.confirmationToDisable,"show-confirm":e.canConfirm},on:{confirm:function(t){return e.confirmModal(!1)}},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" You are about to Reality ")]},proxy:!0},e.canSacrifice&&e.canConfirm?{key:"extra-buttons",fn:function(){return[i("PrimaryButton",{staticClass:"o-primary-btn--width-medium c-modal-message__okay-btn",on:{click:function(t){return e.confirmModal(!0)}}},[e._v(" Sacrifice ")])]},proxy:!0}:null],null,!0)},[e.firstReality?i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.firstRealityText)+" ")]):e._e(),i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.gained)+" ")]),e.firstReality?e._e():i("div",{staticClass:"l-glyph-selection__row"},e._l(e.glyphs,(function(t,a){return i("GlyphComponent",{key:a,class:e.glyphClass(a),attrs:{glyph:t,"is-in-modal":!0,"ignore-modified-level":!0,"show-sacrifice":e.canSacrifice},nativeOn:{click:function(t){return e.select(a)}}})})),1),e.firstReality?e._e():i("div",[e._v(" "+e._s(e.levelStats)+" "),i("br"),i("b",{staticClass:"o-warning"},[e._v(" "+e._s(e.warnText)+" ")])]),e.simRealities>1?i("div",[i("br"),e._v(" After choosing this Glyph the game will simulate the rest of your Realities, "),i("br"),e._v(" automatically choosing another "+e._s(e.quantifyInt("Glyph",e.simRealities-1))+" based on your Glyph filter settings. ")]):e._e(),e.willAutoPurge?i("div",[i("br"),e._v(" Auto-purge is currently enabled; your selected Glyph "),i("br"),e._v(" may not appear in your inventory after it triggers. ")]):e._e(),e.hasSpace?e._e():i("div",{staticClass:"o-warning"},[e.simRealities>1?i("span",[e._v(" You will be simulating more Realities than you have open inventory space for; this may result in some Glyphs being Sacrificed. ")]):i("span",[e._v(" You do not have any free inventory space - your selected Glyph will be automatically "+e._s(e.canSacrifice?"Sacrificed":"deleted")+"! ")])]),e.confirmationToDisable?i("div",[i("br"),e._v(" You can force this modal to appear (even if disabled) by Shift-clicking the Reality button. ")]):e._e()])},n1=[];const s1={name:"RealityModal",components:{PrimaryButton:Vs,ModalWrapperChoice:WQ,GlyphComponent:Rx},data(){return{firstReality:!1,hasSpace:!0,hasChoice:!1,hasFilter:!1,glyphs:[],bestLevel:0,levelDifference:0,selectedGlyph:void 0,canRefresh:!1,level:0,simRealities:0,realityMachines:new Decimal,shardsGained:new Decimal,effarigUnlocked:!1,willAutoPurge:!1}},computed:{firstRealityText(){return`Reality will reset everything except Challenge records and anything under the General header on the\n Statistics tab. The first ${formatInt(13)} rows of Achievements are also reset,\n but you will automatically get one Achievement back every\n ${timeDisplayNoDecimals(18e5)}. You will also gain Reality Machines based on your Eternity Points, a\n Glyph with a level based on your Eternity Points, Replicanti, and Dilated Time, a Perk Point to spend\n on quality of life upgrades, and unlock various upgrades.`},canSacrifice(){return RealityUpgrade(19).isEffectActive},warnText(){return this.hasChoice?this.hasFilter&&void 0===this.selectedGlyph?"If you do not choose a Glyph, one will be automatically selected using your Glyph filter.":void 0===this.selectedGlyph?"You must select a Glyph in order to continue.":null:"You currently only have a single option for new Glyphs every\n Reality. You can unlock the ability to choose from multiple Glyphs by canceling out of this modal and\n purchasing the START Perk."},gained(){const e=[];return e.push(`${quantifyInt("Reality",this.simRealities)}`),e.push(`${quantifyInt("Perk Point",this.simRealities*hK.one.isReached?5:1)}`),e.push(`${quantify("Reality Machine",this.realityMachines,2)}`),this.effarigUnlocked&&e.push(`${quantify("Relic Shard",this.shardsGained,2)}`),`You will gain ${makeEnumeration(e)}`},levelStats(){return`You will get a level ${formatInt(this.level)} Glyph on Reality, which is\n ${this.level===this.bestLevel?"equal to":`\n ${quantifyInt("level",this.levelDifference)}\n ${this.level>this.bestLevel?"higher":"lower"} than`} your best.`},confirmationToDisable(){return ConfirmationTypes.glyphSelection.isUnlocked()?"glyphSelection":void 0},canConfirm(){return this.firstReality||void 0!==this.selectedGlyph||this.hasFilter}},created(){this.getGlyphs(),GlyphSelection.realityProps=getRealityProps(!1,!1)},methods:{update(){this.firstReality=0===player.realities,this.hasChoice=Perk.firstPerk.isEffectActive,this.effarigUnlocked=TeresaUnlocks.effarig.canBeApplied,this.hasFilter=EffarigUnlock.glyphFilter.isUnlocked,this.level=gainedGlyphLevel().actualLevel,this.simRealities=1+simulatedRealityCount(!1),this.hasSpace=GameCache.glyphInventorySpace.value>this.simRealities;const e=MachineHandler.gainedRealityMachines.times(this.simRealities);if(this.realityMachines.copyFrom(e.clampMax(MachineHandler.distanceToRMCap)),this.shardsGained=Effarig.shardsGained.times(simulatedRealityCount(!1)+1),this.willAutoPurge=player.reality.autoAutoClean,!this.firstReality){for(let e=0;e0}},watch:{bigCrunch(e){player.options.animations.bigCrunch=e},eternity(e){player.options.animations.eternity=e},dilation(e){player.options.animations.dilation=e},tachyonParticles(e){player.options.animations.tachyonParticles=e},reality(e){player.options.animations.reality=e},background(e){player.options.animations.background=e},blobSnowflakes(e){player.options.animations.blobSnowflakes=parseInt(e,10)}},methods:{update(){const e=PlayerProgress.current;this.infinityUnlocked=this.fullCompletion||e.isInfinityUnlocked,this.eternityUnlocked=this.fullCompletion||e.isEternityUnlocked,this.realityUnlocked=this.fullCompletion||e.isRealityUnlocked,this.dilationUnlocked=this.realityUnlocked||Achievement(136).canBeApplied,this.tachyonsUnlocked=this.realityUnlocked||Currency.tachyonParticles.gt(0),this.animatedThemeUnlocked=Theme.animatedThemeUnlocked,this.isS11Active="S11"===Theme.currentName();const t=player.options.animations;this.bigCrunch=t.bigCrunch,this.eternity=t.eternity,this.dilation=t.dilation,this.tachyonParticles=t.tachyonParticles,this.reality=t.reality,this.background=t.background,this.blobSnowflakes=t.blobSnowflakes},adjustSliderValue(e){this.blobSnowflakes=e,player.options.blobSnowflakes=this.blobSnowflakes}}},H1=$1;var q1=(0,X.Z)(H1,S1,D1,!1,null,"13fcb5d4",null);const V1=q1.exports;var Y1=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperOptions",{staticClass:"l-wrapper",scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Away Progress Options ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-options__button-container"},e._l(e.all,(function(e){return i("AwayProgressOptionsEntry",{key:e,attrs:{name:e}})})),1),e._v(" Note: Selected resources will only show if they've increased. ")])},W1=[],j1=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("ModalOptionsToggleButton",{attrs:{text:e.text},model:{value:e.setting,callback:function(t){e.setting=t},expression:"setting"}}):e._e()},X1=[];const z1={name:"AwayProgressOptionsEntry",components:{ModalOptionsToggleButton:G1},props:{name:{type:String,required:!0}},data(){return{setting:!1,isVisible:!1}},computed:{type(){return AwayProgressTypes.all[this.name]},text(){return`${this.type.formatName}:`}},watch:{setting(e){this.type.option=e}},methods:{update(){const e=this.type;this.setting=e.option,this.isVisible=e.isUnlocked()}}},K1=z1;var Z1=(0,X.Z)(K1,j1,X1,!1,null,null,null);const Q1=Z1.exports,J1={name:"AwayProgressOptionsModal",components:{AwayProgressOptionsEntry:Q1,ModalWrapperOptions:F1},computed:{all(){return AwayProgressTypes.showOption}}},e2=J1;var t2=(0,X.Z)(e2,Y1,W1,!1,null,"5c020f42",null);const i2=t2.exports;var a2=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Automatic Backup Saves ")]},proxy:!0}])},[i("div",{staticClass:"c-info c-modal--short"},[e._v(" The game makes automatic backups based on time you have spent online or offline. Timers for online backups only run when the game is open, and offline backups only save to the slot with the longest applicable timer. Additionally, your current save is saved into the last slot any time a backup from here is loaded. "),i("div",{staticClass:"c-modal__confirmation-toggle",on:{click:e.toggleOffline}},[i("div",{class:e.offlineOptionClass()},[e.ignoreOffline?i("span",{staticClass:"fas fa-check"}):e._e()]),i("span",{staticClass:"c-modal__confirmation-toggle__text"},[e._v(" Load with offline progress disabled ")])]),i("div",{staticClass:"c-entry-container"},e._l(e.backupSlots,(function(t){return i("BackupEntry",{key:e.nextSave+t.id,staticClass:"l-backup-entry",attrs:{"slot-data":t}})})),1),e._v(" These backups are still stored in the same place as your game save and can still be lost if you do anything external to the game which would delete your save itself, such as "+e._s(e.deleteText)+". You can import/export all backups at once as files, using these buttons: "),i("div",{staticClass:"c-backup-file-ops"},[i("PrimaryButton",{staticClass:"o-btn-file-ops",attrs:{onclick:"GameStorage.exportBackupsAsFile()"}},[e._v(" Export as file ")]),i("PrimaryButton",{staticClass:"o-btn-file-ops"},[i("input",{staticClass:"c-file-import",attrs:{type:"file",accept:".txt"},on:{change:e.importAsFile}}),i("label",{attrs:{for:"file"}},[e._v("Import from file")])])],1),e._v(" Each of your three save slots has its own separate set of backups. ")])])},n2=[],s2=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-bordered-entry"},[i("h3",[e._v("Slot #"+e._s(e.slotData.id)+":")]),i("span",[e._v(e._s(e.progressStr))]),i("span",[e._v(" "+e._s(e.slotType)+" ")]),i("span",{staticClass:"c-fixed-height"},[e._v(e._s(e.lastSaved))]),i("PrimaryButton",{staticClass:"o-primary-btn--width-medium",class:{"o-primary-btn--disabled":!e.save},on:{click:function(t){return e.load()}}},[e._v(" Load ")])],1)},r2=[];const o2={name:"BackupEntry",components:{PrimaryButton:Vs},props:{slotData:{type:Object,required:!0}},data(){return{currTime:0}},computed:{save(){return GameStorage.loadFromBackup(this.slotData.id)},progressStr(){if(!this.save)return"(Empty)";const e=[this.save.celestials.pelle.realityShards,this.save.reality.iMCap,this.save.reality.realityMachines,this.save.eternityPoints,this.save.infinityPoints,this.save.antimatter],t=["Reality Shards","Imaginary Machine Cap","Reality Machines","Eternity Points","Infinity Points","Antimatter"];for(let i=0;ixm,deleteText:()=>f?"fully uninstalling the game":"clearing your browser cookies"},watch:{ignoreOffline(e){player.options.loadBackupWithoutOffline=e}},methods:{update(){this.nextSave=Object.values(GameStorage.lastBackupTimes).map((e=>e&&e.backupTimer)).sum(),this.ignoreOffline=player.options.loadBackupWithoutOffline},offlineOptionClass(){return{"c-modal__confirmation-toggle__checkbox":!0,"c-modal__confirmation-toggle__checkbox--active":this.ignoreOffline}},toggleOffline(){this.ignoreOffline=!this.ignoreOffline},importAsFile(e){if(0===e.target.files.length)return;const t=new FileReader;t.onload=function(){GameStorage.importBackupsFromFile(t.result)},t.readAsText(e.target.files[0])}}},h2=d2;var m2=(0,X.Z)(h2,a2,n2,!1,null,"2cffffa6",null);const p2=m2.exports;var y2=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperOptions",{staticClass:"c-modal-options__large",scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Confirmation Options ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-options__button-container"},[e.noConfirmations?i("span",[e._v(" You do not have anything that requires confirmation, but if you did it would appear here. ")]):e._e(),e._l(e.count,(function(e){return i("ConfirmationOptionsEntry",{key:e,attrs:{index:e-1}})}))],2)])},f2=[],g2=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isUnlocked?i("ModalOptionsToggleButton",{style:e.styleObject,attrs:{text:e.name},model:{value:e.option,callback:function(t){e.option=t},expression:"option"}}):e._e()},v2=[];const b2={name:"ConfirmationOptionsEntry",components:{ModalOptionsToggleButton:G1},props:{index:{type:Number,required:!0}},data(){return{isUnlocked:!1,option:!1}},computed:{entry(){return ConfirmationTypes.index[this.index]},name(){return`${this.entry.name}:`},styleObject(){return{"background-color":this.option?"var(--color-good)":"var(--color-gh-purple)"}}},watch:{option(e){this.entry.option=e}},created(){this.option=this.entry.option},methods:{update(){const e=this.entry;this.isUnlocked=e.isUnlocked()}}},E2=b2;var T2=(0,X.Z)(E2,g2,v2,!1,null,null,null);const w2=T2.exports,k2={name:"ConfirmationOptionsModal",components:{ModalWrapperOptions:F1,ConfirmationOptionsEntry:w2},computed:{count(){return ConfirmationTypes.index.length},noConfirmations(){return ConfirmationTypes.index.every((e=>!e.isUnlocked()))}}},C2=k2;var A2=(0,X.Z)(C2,y2,f2,!1,null,null,null);const _2=A2.exports;var S2=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{"cancel-fn":e.cancelSet},on:{confirm:e.chooseSet},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Choose a Glyph Cosmetic Set ")]},proxy:!0}])},[i("div",{staticClass:"c-center"},[i("ExpandingControlBox",{staticClass:"o-primary-btn c-dropdown-btn",scopedSlots:e._u([{key:"header",fn:function(){return[i("div",{staticClass:"c-dropdown-header"},[e._v(" ▼ Available Sets ▼ "),i("br"),e._v(" "+e._s(e.setName)+" ")])]},proxy:!0},{key:"dropdown",fn:function(){return[i("CosmeticSetDropdown")]},proxy:!0}])}),e.currentSet?i("div",[e._v(' The "'+e._s(e.currentSet.name)+'" Set contains the following '+e._s(e.setContents)+": "),i("br"),e._l(e.symbols,(function(t){return i("span",{key:t,staticClass:"o-single-symbol"},[e._v(" "+e._s(t)+" ")])})),i("br"),e._l(e.colors,(function(t){return i("span",{key:t,staticClass:"o-single-glyph"},[i("GlyphComponent",e._b({attrs:{glyph:e.fakeGlyph(t)}},"GlyphComponent",e.glyphIconProps,!1))],1)}))],2):e._e()],1)])},D2=[],R2=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-select-theme"},[i("div",{staticClass:"l-select-theme__inner"},e._l(e.lockedSets,(function(t){return i("div",{key:t.id,staticClass:"o-primary-btn l-select-theme__item c-select-theme__item",on:{click:function(i){return e.select(t)}}},[e._v(" "+e._s(t.name)+" ")])})),0)])},M2=[];const I2={name:"CosmeticSetDropdown",computed:{lockedSets(){return GlyphAppearanceHandler.lockedSets.map((e=>GameDatabase.reality.glyphCosmeticSets[e]))}},methods:{select(e){GlyphAppearanceHandler.setInModal=e,this.$parent.openRequest=!1}}},x2=I2;var P2=(0,X.Z)(x2,R2,M2,!1,null,null,null);const G2=P2.exports,U2={name:"CosmeticSetChoiceModal",components:{ModalWrapperChoice:WQ,ExpandingControlBox:$o,CosmeticSetDropdown:G2,GlyphComponent:Rx},data(){return{initialSet:"",currentSet:""}},computed:{lockedSets(){return GlyphAppearanceHandler.lockedSets},cosmeticTypes(){return CosmeticGlyphTypes.list.filter((e=>e.isCosmetic&&e.isUnlocked)).map((e=>e.id))},setName(){var e,t;return null!==(e=null===(t=this.currentSet)||void 0===t?void 0:t.name)&&void 0!==e?e:"None Selected"},setContents(){const e=[];return this.symbols&&e.push(quantify("symbol",this.symbols.length,0,0,(e=>e))),this.colors&&e.push(quantify("color scheme",this.colors.length,0,0,(e=>e))),e.join(" and ")},symbols(){return this.currentSet.symbol},colors(){return this.currentSet.color},glyphIconProps(){return{size:"3rem","glow-blur":"0.3rem","glow-spread":"0.1rem","text-proportion":.66}}},created(){this.initialSet=GlyphAppearanceHandler.chosenFromModal,GlyphAppearanceHandler.setInModal=this.initialSet},methods:{update(){this.currentSet=GlyphAppearanceHandler.setInModal},chooseSet(){GlyphAppearanceHandler.chosenFromModal=this.currentSet},cancelSet(){GlyphAppearanceHandler.chosenFromModal=this.initialSet,this.emitClose()},fakeGlyph(e){return{type:"power",strength:1,color:e}}}},B2=U2;var N2=(0,X.Z)(B2,S2,D2,!1,null,"eb4324ba",null);const O2=N2.exports;var L2=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperOptions",{staticClass:"c-modal-options__large",scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Glyph Display Options ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-options__button-container"},[i("ModalOptionsToggleButton",{attrs:{text:"New Glyph identifier:"},model:{value:e.newGlyphs,callback:function(t){e.newGlyphs=t},expression:"newGlyphs"}}),i("ModalOptionsToggleButton",{attrs:{text:"Unequipped Glyph identifier:"},model:{value:e.showUnequippedGlyphIcon,callback:function(t){e.showUnequippedGlyphIcon=t},expression:"showUnequippedGlyphIcon"}}),i("ModalOptionsToggleButton",{attrs:{text:"Always show Glyph effect dots:"},model:{value:e.glyphEffectDots,callback:function(t){e.glyphEffectDots=t},expression:"glyphEffectDots"}}),i("ModalOptionsToggleButton",{attrs:{text:"Fancy Glyph borders:"},model:{value:e.glyphBorders,callback:function(t){e.glyphBorders=t},expression:"glyphBorders"}}),i("button",{staticClass:"o-primary-btn o-primary-btn--modal-option",on:{click:function(t){return e.cycleBG()}}},[e._v(" Glyph BG color: "+e._s(e.glyphBGStr)+" ")]),i("ModalOptionsToggleButton",{style:e.noEffectStyle(),attrs:{text:"Always show Glyph Info:"},model:{value:e.showGlyphInfoByDefault,callback:function(t){e.showGlyphInfoByDefault=t},expression:"showGlyphInfoByDefault"}}),i("ModalOptionsToggleButton",{attrs:{text:"High-contrast rarity colors:"},model:{value:e.highContrastRarity,callback:function(t){e.highContrastRarity=t},expression:"highContrastRarity"}}),i("ModalOptionsToggleButton",{attrs:{text:"Swap border and symbol colors:"},model:{value:e.swapGlyphColors,callback:function(t){e.swapGlyphColors=t},expression:"swapGlyphColors"}}),i("ExpandingControlBox",{staticClass:"o-primary-btn c-dropdown-btn",scopedSlots:e._u([{key:"header",fn:function(){return[i("div",{staticClass:"c-dropdown-header"},[e._v(" ▼ Additional Glyph Info: ▼ "),i("br"),e._v(" "+e._s(e.infoLabel)+" ")])]},proxy:!0},{key:"dropdown",fn:function(){return[i("SelectGlyphInfoDropdown")]},proxy:!0}])})],1),i("GlyphCustomization")],1)},F2=[],$2=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-glyph-customization-group"},[i("b",[e._v("Custom Glyph Appearance")]),i("PrimaryToggleButton",{staticClass:"o-primary-btn--subtab-option",attrs:{on:"Enabled",off:"Disabled"},model:{value:e.enabled,callback:function(t){e.enabled=t},expression:"enabled"}}),i("br"),e.hasCustomSets?i("div",[e._v(" Reset Appearances to Default: "),i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",class:{"o-primary-btn--disabled":!e.enabled},on:{click:e.resetAll}},[e._v(" All Types ")]),i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",class:{"o-primary-btn--disabled":!e.enabled},on:{click:e.resetSingle}},[e._v(" This Type ")]),i("br"),i("i",[e._v("This will not reset any individually-modified Glyphs.")]),i("br"),i("br"),e._v(" Glyph Type: "),i("br"),i("div",{staticClass:"c-type-selection"},e._l(e.cosmeticTypes,(function(t,a){return i("div",{key:t,class:e.typeClass(a),on:{click:function(t){e.selectedIndex=a}}},[i("GlyphComponent",e._b({directives:[{name:"tooltip",rawName:"v-tooltip",value:t.capitalize(),expression:"type.capitalize()"}],attrs:{glyph:e.fakeGlyph(t)}},"GlyphComponent",e.glyphIconProps,!1))],1)})),0),i("GlyphCustomizationSingleType",{key:e.selectedIndex+e.enabled+e.defaultKeySwap,attrs:{type:e.cosmeticTypes[e.selectedIndex]}}),e._v(" Note: Some options may cause very poor color contrast or readability on certain themes with certain Glyph types. ")],1):i("div",[e._v(" You currently have no available options for changing the default appearance of your Glyphs. To unlock some, visit the Shop Tab or beat the game. "),i("br"),i("br"),e.hasSpecialTypes?i("span",[e._v(" Enabling this setting will allow you to change individual Glyphs to special cosmetic types you have unlocked. ")]):i("span",[e._v(" Enabling or disabling this option will currently do nothing. ")])]),i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:e.resetIndividual}},[e._v(" Reset all individual Glyph cosmetics ")])],1)},H2=[],q2=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-glyph-customization-entry"},[-1===e.glyphId?i("span",{staticClass:"c-name"},[e._v(" Appearance Options for "+e._s(e.name)+" Glyphs ")]):e._e(),"companion"===e.type?i("div",[e._v(" Companion Glyphs cannot have their symbol modified. ")]):i("GlyphCustomizationSlidingWindow",{attrs:{type:e.type,"is-symbol":!0,options:e.symbols,"glyph-id":e.glyphId}}),i("GlyphCustomizationSlidingWindow",{attrs:{type:e.type,"is-symbol":!1,options:e.colors,"glyph-id":e.glyphId}})],1)},V2=[],Y2=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e.options.length>0?i("div",{class:e.containerClassObject()},[i("div",{staticClass:"o-default-option"},[i("div",{key:"default"+e.darkKeySwap,class:e.defaultOptionClassObject(),style:e.boxStyle(e.defaultOption),on:{click:function(t){return e.select(void 0)}}},[e._v(" "+e._s(e.optionChar(e.defaultOption))+" ")])]),i("div",{staticClass:"c-extra-options"},[i("div",{class:e.leftClass(),on:{click:function(t){return e.slideWindow(-5)}}},[e._v(" ⇐ ")]),i("div",{class:e.rightClass(),on:{click:function(t){return e.slideWindow(5)}}},[e._v(" ⇒ ")]),i("div",{staticClass:"c-sliding-window",style:e.windowStyle()},e._l(e.options,(function(t){return i("div",{key:t[0]+t[1]},[i("div",{staticClass:"c-single-set"},e._l(t,(function(t){return i("div",{key:t,class:e.optionClassObject(t),style:e.boxStyle(t),on:{click:function(i){return e.select(t)}}},[e._v(" "+e._s(e.optionChar(t))+" ")])})),0)])})),0)])]):i("div",{staticClass:"c-no-options"},[e._v(" You have no custom options for changing Glyph "+e._s(e.attrString)+"s. ")])])},W2=[];const j2={name:"GlyphCustomizationSlidingWindow",props:{type:{type:String,required:!0},isSymbol:{type:Boolean,required:!0},options:{type:Array,required:!0},glyphId:{type:Number,required:!1,default:-1}},data(){return{isActive:!1,selected:"",leftmostIndex:0,realityColor:"",darkKeySwap:!1}},computed:{isSingleGlyph(){return-1!==this.glyphId},attrString(){return this.isSymbol?"symbol":"color"},typeObject(){return CosmeticGlyphTypes},defaultOption(){if(this.realityColor)return this.realityColor;const e=this.typeObject[this.type],t=`${this.isSingleGlyph?"current":"default"}${this.attrString.capitalize()}`;return this.isSymbol?e[t].symbol:e[t].border},canScroll(){return this.options.length>this.windowSize},windowSize(){return 17}},created(){this.updateSelected()},methods:{update(){if(this.isSingleGlyph){const e=Glyphs.findById(this.glyphId);this.isActive=!e.cosmetic}else this.isActive=player.reality.glyphs.cosmetics.active;"reality"!==this.type||this.isSymbol||(this.realityColor=GlyphAppearanceHandler.realityColor),this.darkKeySwap=player.options.glyphBG},select(e){if(this.isSingleGlyph||this.isActive){if(this.isSingleGlyph){const t=Glyphs.findById(this.glyphId);t[this.attrString]=e,this.active||(t.cosmetic=void 0)}else player.reality.glyphs.cosmetics[`${this.attrString}Map`][this.type]=e;this.updateSelected(),EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)}},updateSelected(){if(this.isSingleGlyph){const e=Glyphs.findById(this.glyphId);this.selected=e[this.attrString]}else this.selected=this.isSymbol?this.typeObject[this.type].currentSymbol.symbol:this.typeObject[this.type].currentColor.str},containerClassObject(){return{"c-all-options":!0,"o-option--inactive":!this.isActive}},defaultOptionClassObject(){const e=this.isSingleGlyph?void 0:this.defaultOption;return{"o-symbol":this.isSymbol,"o-color":!this.isSymbol,"o-clickable":this.isActive,"o-option--inactive":this.isSymbol&&e!==this.selected}},optionClassObject(e){return{"o-symbol":this.isSymbol,"o-color":!this.isSymbol,"o-clickable":this.isActive,"o-option--inactive":this.isSymbol&&e!==this.selected}},boxStyle(e){if(this.isSymbol||!e)return{};const t=GlyphAppearanceHandler.getColorProps(e);return{background:t.bg,color:this.invertBW(t.bg),"box-shadow":`0 0 0.4rem 0.1rem ${t.border}`}},windowStyle(){return{transform:`translate(${2-2.5*this.leftmostIndex}rem)`,"transition-duration":"0.3s"}},leftClass(){return{"o-arrow o-arrow--left":!0,"o-arrow--disabled":0===this.leftmostIndex||!this.canScroll}},rightClass(){return{"o-arrow o-arrow--right":!0,"o-arrow--disabled":this.leftmostIndex===this.options.length-this.windowSize||!this.canScroll}},slideWindow(e){this.canScroll&&(this.leftmostIndex=Math.clamp(this.leftmostIndex+e,0,this.options.length-this.windowSize))},optionChar(e){return this.isSymbol?e:e===this.selected||!this.selected&&e===this.defaultOption?"✓":""},invertBW(e){return"black"===e?"white":"black"}}},X2=j2;var z2=(0,X.Z)(X2,Y2,W2,!1,null,"1aab07c3",null);const K2=z2.exports,Z2={name:"GlyphCustomizationSingleType",components:{GlyphCustomizationSlidingWindow:K2},props:{type:{type:String,required:!0},glyphId:{type:Number,required:!1,default:-1}},computed:{name(){return this.type.capitalize()},symbols(){return GlyphAppearanceHandler.availableSymbols},colors(){return GlyphAppearanceHandler.availableColors}}},Q2=Z2;var J2=(0,X.Z)(Q2,q2,V2,!1,null,"376fede0",null);const e3=J2.exports,t3={name:"GlyphCustomization",components:{GlyphCustomizationSingleType:e3,PrimaryButton:Vs,PrimaryToggleButton:Sh,GlyphComponent:Rx},data(){return{enabled:!1,defaultKeySwap:!1,selectedIndex:0}},computed:{cosmeticTypes(){const e=CosmeticGlyphTypes.list.filter((e=>e.canCustomize)).map((e=>e.id)).slice(5),t=["power","infinity","replication","time","dilation"];return t.concat(e)},glyphIconProps(){return{size:"2.5rem","glow-blur":"0.3rem","glow-spread":"0.1rem","text-proportion":.7}},hasCustomSets(){return GlyphAppearanceHandler.unlockedSets.length>0},hasSpecialTypes(){return GlyphAppearanceHandler.availableTypes.length>0}},watch:{enabled(e){player.reality.glyphs.cosmetics.active=e,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)}},methods:{update(){this.enabled=player.reality.glyphs.cosmetics.active,this.defaultKeySwap=!0},resetAll(){const e=player.reality.glyphs.cosmetics;e.symbolMap={},e.colorMap={},this.defaultKeySwap=!1,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)},resetSingle(){const e=player.reality.glyphs.cosmetics,t=this.cosmeticTypes[this.selectedIndex];e.symbolMap[t]=void 0,e.colorMap[t]=void 0,this.defaultKeySwap=!1,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)},fakeGlyph(e){let t="power";return"reality"===e&&(t="reality"),"cursed"===e&&(t="cursed"),"amalgam"===e&&(t="amalgam"),{type:t,strength:1,cosmetic:e}},typeClass(e){return{"c-single-type":!0,"o-disabled-cosmetics":!this.enabled,"c-type-current":this.selectedIndex===e,"c-type-other":this.selectedIndex!==e}},resetIndividual(){for(const e of Glyphs.allGlyphs)e.fixedCosmetic||(e.cosmetic=void 0);this.defaultKeySwap=!1,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)}}},i3=t3;var a3=(0,X.Z)(i3,$2,H2,!1,null,"800cf4e0",null);const n3=a3.exports,s3={name:"GlyphDisplayOptionsModal",components:{ExpandingControlBox:$o,ModalOptionsToggleButton:G1,ModalWrapperOptions:F1,SelectGlyphInfoDropdown:Jo,GlyphCustomization:n3},data(){return{newGlyphs:!1,showUnequippedGlyphIcon:!1,glyphEffectDots:!1,glyphBG:0,glyphInfoType:0,showGlyphInfoByDefault:!1,glyphBorders:!1,highContrastRarity:!1,swapGlyphColors:!1}},computed:{infoLabel(){return zo.labels[this.glyphInfoType]},glyphBGStr(){switch(this.glyphBG){case GLYPH_BG_SETTING.AUTO:return"Auto";case GLYPH_BG_SETTING.LIGHT:return"Light";case GLYPH_BG_SETTING.DARK:return"Dark";default:throw new Error("Unrecognized Glyph BG setting")}}},watch:{newGlyphs(e){player.options.showNewGlyphIcon=e,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)},showUnequippedGlyphIcon(e){player.options.showUnequippedGlyphIcon=e,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)},glyphEffectDots(e){player.options.showHintText.glyphEffectDots=e,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)},showGlyphInfoByDefault(e){player.options.showHintText.showGlyphInfoByDefault=e,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)},glyphBorders(e){player.options.glyphBorders=e,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)},highContrastRarity(e){player.options.highContrastRarity=e,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)},swapGlyphColors(e){player.options.swapGlyphColors=e,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)}},methods:{update(){const e=player.options;this.newGlyphs=e.showNewGlyphIcon,this.showUnequippedGlyphIcon=e.showUnequippedGlyphIcon,this.glyphEffectDots=e.showHintText.glyphEffectDots,this.glyphBG=player.options.glyphBG,this.glyphInfoType=e.showHintText.glyphInfoType,this.showGlyphInfoByDefault=e.showHintText.showGlyphInfoByDefault,this.glyphBorders=e.glyphBorders,this.highContrastRarity=e.highContrastRarity,this.swapGlyphColors=e.swapGlyphColors},noEffectStyle(){return 0!==this.glyphInfoType?null:{"background-color":"var(--color-disabled)"}},cycleBG(){player.options.glyphBG=(player.options.glyphBG+1)%Object.keys(GLYPH_BG_SETTING).length,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE)}}},r3=s3;var o3=(0,X.Z)(r3,L2,F2,!1,null,"28f556e6",null);const l3=o3.exports;var c3=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperOptions",{staticClass:"l-wrapper",scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Modify Visible Tabs ")]},proxy:!0}])},[i("div",{staticClass:"c-modal--short"},[e._v(" Click a button to toggle showing a tab on/off. "),i("br"),e._v(" Some tabs cannot be hidden, and you cannot hide your current tab. "),i("br"),e._v(" Unhiding a tab in which all subtabs are hidden will also unhide all subtabs, and hiding all subtabs will also hide the tab. "),i("br"),e.isAlmostEnd?i("div",[e._v(" You cannot hide your tabs after unlocking the Galaxy Generator. ")]):e._e(),e.isEnslaved?i("div",[i("br"),i("i",[e._v("You must... see everywhere...")]),i("br"),e._v(" (You cannot hide your tabs within this Reality) ")]):e._e(),e._l(e.tabs,(function(t,a){return i("HiddenTabGroup",{key:a,staticClass:"l-hide-modal-tab-container",attrs:{tab:t,"change-enabled":!e.isEnslaved&&!e.isAlmostEnd}})}))],2)])},u3=[],d3=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible?i("div",{class:e.rowClass,on:{click:function(t){return t.target!==t.currentTarget?null:e.toggleVisibility.apply(null,arguments)}}},[e._l(e.unlockedSubtabs,(function(t,a){return i("HiddenSubtabsButton",{key:a,attrs:{subtab:t,tab:e.tab,"change-enabled":e.changeEnabled}})})),i("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.rowVisibleIndicatorTooltip,expression:"rowVisibleIndicatorTooltip"}],class:e.rowVisibleIndicatorClass,on:{click:e.toggleVisibility}})],2):e._e()},h3=[],m3=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.hidable?e.isCurrentSubtab?"You cannot hide the tab you are on":"":"Options tabs cannot be hidden",expression:"hidable ? isCurrentSubtab ? 'You cannot hide the tab you are on' : '' : 'Options tabs cannot be hidden'"}],class:e.classObject,on:{click:e.toggleVisibility}},[i("div",{staticClass:"l-hide-modal-button"},[e.isModernUI?i("div",{staticClass:"l-hide-modal-button__subtab-icon",domProps:{innerHTML:e._s(e.subtab.symbol)}}):e._e(),i("div",{staticClass:"l-hide-modal-button__subtab-name"},[e._v(" "+e._s(e.subtab.name)+" ")])])])},p3=[];const y3={name:"HiddenSubtabsButton",props:{subtab:{type:Object,required:!0},tab:{type:Object,required:!0},changeEnabled:{type:Boolean,required:!0}},data(){return{hidable:!1,hidden:!1}},computed:{isCurrentSubtab(){return this.tab.id===Tabs.current.id&&this.subtab.id===Tabs.current._currentSubtab.id},classObject(){return{"c-hide-modal-tab-button":!0,"c-hide-modal-button--active":!this.hidden,"c-hide-modal-button--inactive":this.hidden,"c-hide-modal-button--always-visible":!this.hidable||this.isCurrentSubtab,[`c-hide-modal-tab-button--${this.tab.key}`]:!this.isCurrentSubtab}},isModernUI(){return"Modern"==this.$viewModel.UIType}},methods:{update(){this.hidable=this.subtab.hidable,this.hidden=this.subtab.isHidden&&this.hidable},toggleVisibility(){this.changeEnabled&&this.subtab.toggleVisibility()}}},f3=y3;var g3=(0,X.Z)(f3,m3,p3,!1,null,"1134982d",null);const v3=g3.exports,b3={name:"HiddenTabGroup",components:{HiddenSubtabsButton:v3},props:{tab:{type:Object,required:!0},changeEnabled:{type:Boolean,required:!0}},data(){return{isVisible:!1,isHidable:!1,isHidden:!1,unlockedSubtabs:[]}},computed:{tabName(){return this.tab.name},subtabs(){return this.tab.subtabs},isCurrentTab(){return this.tab.id===Tabs.current.id},alwaysVisible(){return!this.isHidable||this.isCurrentTab},rowClass(){return{"c-hide-modal-all-subtab-container":!0,"l-hide-modal-subtab-container":!0,"c-hidden-tabs-background__visible":!this.isHidden,"c-hidden-tabs-background__hidden":this.isHidden,"c-hidden-tabs-background__always-visible":this.alwaysVisible}},rowVisibleIndicatorClass(){return{"c-indicator-icon":!0,fas:!0,"fa-check":!this.isHidden,"fa-times":this.isHidden,"fa-exclamation":this.alwaysVisible}},rowVisibleIndicatorTooltip(){return this.isHidden?"Click to unhide tab":this.alwaysVisible?"This tab cannot be hidden":"Click to hide tab"}},methods:{update(){const e=this.tab;this.isVisible=e.isUnlocked,this.isHidable=e.hidable,this.isHidden=e.isHidden&&this.isHidable,this.unlockedSubtabs=this.subtabs.filter((e=>e.isUnlocked))},toggleVisibility(){if(this.changeEnabled)if(this.tab.isHidden&&this.unlockedSubtabs.every((e=>e.isHidden))){for(const e of this.unlockedSubtabs)e.toggleVisibility();this.tab.unhideTab()}else this.tab.toggleVisibility()}}},E3=b3;var T3=(0,X.Z)(E3,d3,h3,!1,null,"c824015c",null);const w3=T3.exports,k3={name:"HiddenTabsModal",components:{HiddenTabGroup:w3,ModalWrapperOptions:F1},data(){return{isEnslaved:!1,isAlmostEnd:!1}},computed:{tabs:()=>Tabs.currentUIFormat},methods:{update(){this.isEnslaved=Enslaved.isRunning,this.isAlmostEnd=Pelle.hasGalaxyGenerator}}},C3=k3;var A3=(0,X.Z)(C3,c3,u3,!1,null,"2d376db4",null);const _3=A3.exports;var S3=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Hotkey List ")]},proxy:!0}])},[i("span",{staticClass:"c-modal-hotkeys l-modal-hotkeys"},[i("div",{staticClass:"l-modal-hotkeys__column"},[i("div",{staticClass:"l-modal-hotkeys-row"},[i("span",{staticClass:"c-modal-hotkeys-row__name l-modal-hotkeys-row__name"},[e._v("Buy 1 Dimension")]),i("kbd",[e._v("SHIFT")]),i("kbd",[e._v("1")]),e._v("-"),i("kbd",[e._v("SHIFT")]),i("kbd",[e._v("8")])]),i("div",{staticClass:"l-modal-hotkeys-row"},[i("span",{staticClass:"c-modal-hotkeys-row__name l-modal-hotkeys-row__name"},[e._v("Buy 10 Dimensions")]),i("kbd",[e._v("1")]),e._v("-"),i("kbd",[e._v("8")])]),e._l(e.hotkeyCount,(function(t){return i("div",{key:t},[e.visible[t-1]?i("span",{staticClass:"l-modal-hotkeys-row"},[i("span",{staticClass:"c-modal-hotkeys-row__name l-modal-hotkeys-row__name"},[e._v(e._s(e.shortcutNames[t-1]))]),e._l(e.shortcutKeys[t-1],(function(t,a){return i("kbd",{key:a},[e._v(" "+e._s(t)+" ")])}))],2):e._e()])}))],2),i("div",{staticClass:"l-modal-hotkeys__column l-modal-hotkeys__column--right"},[i("div",{staticClass:"l-modal-hotkeys-row"},[i("span",{staticClass:"c-modal-hotkeys-row__name l-modal-hotkeys-row__name"},[e._v("Modifier Key")]),i("kbd",[e._v("SHIFT")])]),i("span",{staticClass:"c-modal-hotkeys__shift-description"},[e._v(" Shift is a modifier key that shows additional information on certain things and adjusts the function of certain buttons. "),i("br"),e._v(" "+e._s(e.moreShiftKeyInfo)+" ")]),i("br"),i("div",{staticClass:"l-modal-hotkeys-row"},[i("span",{staticClass:"c-modal-hotkeys-row__name l-modal-hotkeys-row__name"},[e._v("Autobuyer Controls")]),i("kbd",[e._v("ALT")])]),i("span",{staticClass:"c-modal-hotkeys__shift-description"},[e._v(" Alt is a modifier key that, when pressed in conjunction with any key that has a corresponding autobuyer, will toggle said autobuyer. "),i("br"),e._v(" When pressing both Alt and Shift, you can toggle buying singles or buying max for the Antimatter Dimension and Tickspeed Autobuyers instead. ")]),i("br"),i("div",{staticClass:"l-modal-hotkeys-row"},[i("span",{staticClass:"c-modal-hotkeys-row__name l-modal-hotkeys-row__name"},[e._v("Tab Movement")]),i("div",[i("kbd",[e._v("←")]),i("kbd",[e._v("↓")]),i("kbd",[e._v("↑")]),i("kbd",[e._v("→")])])]),i("span",{staticClass:"c-modal-hotkeys__shift-description"},[e._v(" Using the Arrow Keys will cycle you through the game's pages. The Up and Down arrows cycle you through tabs, and the Left and Right arrows cycle you through that tab's subtabs. ")]),i("br"),i("div",{staticClass:"l-modal-hotkeys-row"},[i("span",{staticClass:"c-modal-hotkeys-row__name l-modal-hotkeys-row__name"},[e._v("Numpad Support")])]),i("span",{staticClass:"c-modal-hotkeys__shift-description"},[e._v(" Due to technical reasons, pressing a numpad key will purchase 10 of a Dimension if possible, but pressing a numpad key with "),i("kbd",[e._v("SHIFT")]),e._v(" will not buy a single Dimension. It may instead, depending on your device, cause the page to scroll or change game tabs. "),i("kbd",[e._v("ALT")]),e._v(" will still work as expected. ")]),e.isElectron?[i("br"),i("div",{staticClass:"l-modal-hotkeys-row"},[i("span",{staticClass:"c-modal-hotkeys-row__name l-modal-hotkeys-row__name"},[e._v("Window Zoom")]),i("kbd",[e._v("-")]),i("kbd",[e._v("0")]),i("kbd",[e._v("+")])]),i("span",{staticClass:"c-modal-hotkeys__shift-description"},[e._v(" To adjust zoom level, hold "),i("kbd",[e._v("ctrl")]),e._v(" and press either "),i("kbd",[e._v("-")]),e._v(" or "),i("kbd",[e._v("+")]),e._v(" to decrease or increase zoom. "),i("kbd",[e._v("ctrl")]),i("kbd",[e._v("0")]),e._v(" will reset zoom to 100%. ")]),i("br"),i("div",{staticClass:"l-modal-hotkeys-row"},[i("span",{staticClass:"c-modal-hotkeys-row__name l-modal-hotkeys-row__name"},[e._v("Fullscreen")]),i("kbd",[e._v("F10")])]),i("span",{staticClass:"c-modal-hotkeys__shift-description"},[e._v(" To enter or exit fullscreen, press "),i("kbd",[e._v("F10")]),e._v(". ")])]:e._e()],2)])])},D3=[];const R3={name:"HotkeysModal",components:{ModalWrapper:Uj},data(){return{updateIndicies:[],visible:[],timeStudyUnlocked:!1,glyphSacUnlocked:!1,isElectron:!1}},computed:{moreShiftKeyInfo(){const e=[];this.timeStudyUnlocked&&(e.push("while buying Time Studies to buy all up until that point"),e.push("to save Time Study Trees")),this.glyphSacUnlocked&&e.push("to purge Glyphs");const t=makeEnumeration(e);return""===t?"":`You can hold Shift ${t}.`},hotkeyCount(){return shortcuts.length},shortcutNames(){return shortcuts.map((e=>e.name))},shortcutKeys(){return shortcuts.map((e=>e.keys.map((e=>this.format(e)))))}},created(){for(let e=0;e0}},watch:{showPercentage(e){player.options.showHintText.showPercentage=e},achievements(e){player.options.showHintText.achievements=e},achievementUnlockStates(e){player.options.showHintText.achievementUnlockStates=e},challenges(e){player.options.showHintText.challenges=e},studies(e){player.options.showHintText.studies=e},glyphEffectDots(e){player.options.showHintText.glyphEffectDots=e},realityUpgrades(e){player.options.showHintText.realityUpgrades=e},perks(e){player.options.showHintText.perks=e},alchemy(e){player.options.showHintText.alchemy=e}},methods:{update(){const e=PlayerProgress.current;this.infinityUnlocked=this.fullCompletion||e.isInfinityUnlocked,this.eternityUnlocked=this.fullCompletion||e.isEternityUnlocked,this.realityUnlocked=this.fullCompletion||e.isRealityUnlocked,this.alchemyUnlocked=this.fullCompletion||Ra.unlocks.effarigUnlock.canBeApplied;const t=player.options.showHintText;this.showPercentage=t.showPercentage,this.achievements=t.achievements,this.achievementUnlockStates=t.achievementUnlockStates,this.challenges=t.challenges,this.studies=t.studies,this.glyphEffectDots=t.glyphEffectDots,this.realityUpgrades=t.realityUpgrades,this.perks=t.perks,this.alchemy=t.alchemy}}},B3=U3;var N3=(0,X.Z)(B3,P3,G3,!1,null,null,null);const O3=N3.exports;var L3=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperOptions",{scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" News Options ")]},proxy:!0}])},[i("PrimaryButton",{staticClass:"o-primary-btn o-primary-btn--option-wide",attrs:{onclick:"GameOptions.toggleNews()"}},[e._v(" "+e._s(e.newsOnOffLabel)+" ")]),i("div",{staticClass:"o-primary-btn o-primary-btn--option-wide o-primary-btn--slider"},[i("b",[e._v(e._s(e.formatInt(parseInt(e.repeatBuffer)))+" message repeat buffer")]),i("SliderComponent",e._b({staticClass:"o-primary-btn--slider__slider",attrs:{value:e.repeatBuffer},on:{input:function(t){return e.adjustSliderValueRepeatBuffer(t)}}},"SliderComponent",e.sliderPropsRepeatBuffer,!1))],1),i("div",{staticClass:"o-primary-btn o-primary-btn--option-wide o-primary-btn--slider"},[i("b",[e._v(e._s(e.formatPercents(parseFloat(e.AIChance)))+" AI messages")]),i("SliderComponent",e._b({staticClass:"o-primary-btn--slider__slider",attrs:{value:e.AIChance},on:{input:function(t){return e.adjustSliderValueAIChance(t)}}},"SliderComponent",e.sliderPropsAIChance,!1))],1),i("div",{staticClass:"o-primary-btn o-primary-btn--option-wide o-primary-btn--slider"},[i("b",[e._v(e._s(e.formatPercents(parseFloat(e.speed)))+" scroll speed")]),i("SliderComponent",e._b({staticClass:"o-primary-btn--slider__slider",attrs:{value:e.speed},on:{input:function(t){return e.adjustSliderValueSpeed(t)}}},"SliderComponent",e.sliderPropsSpeed,!1))],1),i("ModalOptionsToggleButton",{staticClass:"o-primary-btn o-primary-btn--option-wide",attrs:{text:"Animation Effects:"},model:{value:e.includeAnimated,callback:function(t){e.includeAnimated=t},expression:"includeAnimated"}})],1)},F3=[];const $3={name:"NewsOptionsModal",components:{ModalOptionsToggleButton:G1,ModalWrapperOptions:F1,PrimaryButton:Vs,SliderComponent:sD},data(){return{enabled:!1,repeatBuffer:40,AIChance:0,speed:1,includeAnimated:!1}},computed:{newsOnOffLabel(){return"News: "+(this.enabled?"On":"Off")},sliderPropsRepeatBuffer(){return{min:0,max:80,interval:1,width:"98%",tooltip:!1}},sliderPropsAIChance(){return{min:0,max:1,interval:.01,width:"98%",tooltip:!1}},sliderPropsSpeed(){return{min:.5,max:2,interval:.01,width:"98%",tooltip:!1}}},watch:{type(e){player.options.news.type=e},repeatBuffer(e){player.options.news.repeatBuffer=parseInt(e,10)},AIChance(e){player.options.news.AIChance=parseFloat(e,10)},speed(e){player.options.news.speed=parseFloat(e,10)},includeAnimated(e){player.options.news.includeAnimated=e}},methods:{update(){const e=player.options.news;this.enabled=e.enabled,this.repeatBuffer=e.repeatBuffer,this.AIChance=e.AIChance,this.speed=e.speed,this.includeAnimated=e.includeAnimated},adjustSliderValueRepeatBuffer(e){this.repeatBuffer=e,player.options.repeatBuffer=this.repeatBuffer},adjustSliderValueAIChance(e){this.AIChance=e,player.options.AIChance=this.AIChance},adjustSliderValueSpeed(e){this.speed=e,player.options.speed=this.speed}}},H3=$3;var q3=(0,X.Z)(H3,L3,F3,!1,null,null,null);const V3=q3.exports;var Y3=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{on:{confirm:e.confirmPrefs}},[i("h2",[e._v("Dimension Split Preference")]),i("div",{staticClass:"l-modal-split-preferences"},e._l(e.dimensionOptions,(function(t,a){return i("button",{key:a,class:e.classList(a),on:{click:function(t){return e.select(a)}}},[e.isPreferred(a)?i("div",{staticClass:"l-dim-path-priority o-dim-path-priority"},[e._v(" "+e._s(e.isPreferred(a))+" ")]):e._e(),i("div",[e._v(" "+e._s(a)+" ")])])})),0),i("br"),i("h2",[e._v("Pace Split Preference")]),i("div",{staticClass:"l-modal-split-preferences"},e._l(e.paceOptions,(function(t,a){return i("button",{key:a,class:e.classList(a),on:{click:function(t){return e.select(a)}}},[i("div",[e._v(" "+e._s(a)+" ")])])})),0)])},W3=[];const j3={name:"PreferredTreeModal",components:{ModalWrapperChoice:WQ},data(){return{dimensionPath:null,pacePath:null}},computed:{dimensionOptions(){return{Antimatter:TIME_STUDY_PATH.ANTIMATTER_DIM,Infinity:TIME_STUDY_PATH.INFINITY_DIM,Time:TIME_STUDY_PATH.TIME_DIM}},paceOptions(){return{Active:TIME_STUDY_PATH.ACTIVE,Passive:TIME_STUDY_PATH.PASSIVE,Idle:TIME_STUDY_PATH.IDLE}},usePriority(){return TimeStudy.preferredPaths.dimension.usePriority}},created(){this.dimensionPath=[...TimeStudy.preferredPaths.dimension.path],this.pacePath=TimeStudy.preferredPaths.pace.path},methods:{isPreferred(e){return this.paceOptions[e]===this.pacePath||this.dimensionPath.indexOf(this.dimensionOptions[e])+1},select(e){this.dimensionOptions[e]&&((!this.usePriority||this.dimensionPath.length>1)&&this.dimensionPath.shift(),this.dimensionPath.includes(this.dimensionOptions[e])||this.dimensionPath.push(this.dimensionOptions[e])),this.paceOptions[e]&&(this.pacePath=this.paceOptions[e])},confirmPrefs(){TimeStudy.preferredPaths.dimension.path=this.dimensionPath,TimeStudy.preferredPaths.pace.path=this.pacePath},classList(e){const t=this.isPreferred(e),i={Antimatter:"antimatter-dim",Infinity:"infinity-dim",Time:"time-dim",Active:"active",Passive:"passive",Idle:"idle"};return["o-time-study-selection-btn",`o-time-study-${i[e]}--${t?"bought":"available"}`,"o-time-study--"+(t?"bought":"available")]}}},X3=j3;var z3=(0,X.Z)(X3,Y3,W3,!1,null,null,null);const K3=z3.exports;var Z3=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperOptions",{staticClass:"c-modal-options__large",scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Modifying Single Glyph Appearance ")]},proxy:!0}])},[i("PrimaryButton",{staticClass:"o-primary-btn--subtab-option",on:{click:function(t){return e.setType(void 0)}}},[e._v(" Reset this Glyph's appearance ")]),i("GlyphCustomizationSingleType",{key:e.defaultKeySwap,attrs:{type:e.glyphType,"glyph-id":e.glyphId}}),e.cosmeticTypes&&e.glyph.fixedCosmetic?i("div",[e._v(" This Glyph's Cosmetic Type cannot be changed! ")]):e.cosmeticTypes?i("div",{staticClass:"c-special-type"},[e._v(" Apply Special Cosmetic Type: "),e._l(e.cosmeticTypes,(function(t){return i("PrimaryButton",{key:t,class:e.cosmeticTypeClass(t),on:{click:function(i){return e.setType(t)}}},[e._v(" "+e._s(t.capitalize())+" ")])}))],2):e._e()],1)},Q3=[];const J3={name:"SingleGlyphAppearanceModal",components:{ModalWrapperOptions:F1,GlyphCustomizationSingleType:e3,PrimaryButton:Vs},props:{glyphId:{type:Number,required:!0}},data(){return{defaultKeySwap:!1}},computed:{glyphType(){return Glyphs.findById(this.glyphId).type},cosmeticTypes(){return GlyphAppearanceHandler.availableTypes},glyph(){return Glyphs.findById(this.glyphId)}},created(){EventHub.logic.on(GAME_EVENT.GLYPH_VISUAL_CHANGE,(()=>{this.$recompute("glyph"),this.defaultKeySwap||this.emitClose()}))},methods:{update(){this.defaultKeySwap=!0},setType(e){e&&this.glyph.fixedCosmetic||(this.glyph.color=void 0,this.glyph.symbol=void 0,this.glyph.fixedCosmetic?this.glyph.cosmetic=this.glyph.fixedCosmetic:this.glyph.cosmetic=e,this.defaultKeySwap=!1,EventHub.dispatch(GAME_EVENT.GLYPH_VISUAL_CHANGE))},cosmeticTypeClass(e){return{"o-primary-btn--subtab-option":!0,"o-active-type":e===this.glyph.cosmetic}}}},e5=J3;var t5=(0,X.Z)(e5,Z3,Q3,!1,null,"4c765a29",null);const i5=t5.exports;var a5=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{"show-confirm":e.isValidSpeed,confirmFn:e.setTestSpeed},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Modify Testing Speed ")]},proxy:!0}])},[i("div",[i("div",[e._v(" Set game speed for testing purposes. A report will be displayed after settings the testing speed back to 1 informing how long was the speed up effecitvely. ")]),i("div",{staticClass:"c-modal-hard-reset-danger"},[e._v(" This speed up will affect EVERYTHING(with the exception of singularities(Lai'tela)) ")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.input,expression:"input"}],ref:"input",staticClass:"c-modal-input",attrs:{type:"text"},domProps:{value:e.input},on:{keyup:[function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.setTestSpeed.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.emitClose.apply(null,arguments)}],input:[function(t){t.target.composing||(e.input=t.target.value)},function(t){return e.handleTestSpeedInput()}]}}),i("div",[e._v(" "+e._s(e.displayText)+" ")])])])},n5=[];const s5={name:"SpeedUpModal",components:{ModalWrapperChoice:WQ},data(){return{input:"",testSpeed:1,displayText:"",isValidSpeed:!0}},created(){var e,t;this.testSpeed=null!==(e=player.testSpeed)&&void 0!==e?e:1,this.input=`${null!==(t=player.testSpeed)&&void 0!==t?t:1}`,this.handleTestSpeedInput()},methods:{setTestSpeed(){var e;if(!this.isValidSpeed)return;const t=Date.now();var i,a,n;1!=(null!==(e=player.testSpeed)&&void 0!==e?e:1)&&(player.speedUpDuration=null!==(i=player.speedUpDuration)&&void 0!==i?i:0,player.speedUpDuration+=(t-(null!==(a=player.speedUpRestart)&&void 0!==a?a:t))*player.testSpeed);if(this.emitClose(),1==this.testSpeed){var s;if(1==(null!==(s=player.testSpeed)&&void 0!==s?s:1))return;return Yee.speedUpReport.show(),void delete player.testSpeed}1==(null!==(n=player.testSpeed)&&void 0!==n?n:1)&&(player.speedUpStart=t),player.speedUpRestart=t,player.testSpeed=this.testSpeed},formatDuration(e){days=Math.floor(e)},handleTestSpeedInput(){const e=parseFloat(this.input);!isFinite(e)||isNaN(e)||e<0||e>100?(this.displayText="Invalid speed",this.isValidSpeed=!1):(this.displayText=`Testing speed will be set to ${e}x`,this.isValidSpeed=!0,this.testSpeed=e)}}},r5=s5;var o5=(0,X.Z)(r5,a5,n5,!1,null,null,null);const l5=o5.exports;var c5=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Testing Speed Up Report ")]},proxy:!0}])},[i("div",[e._v(" The speed up lasted "+e._s(e.durationText)+". "),i("br"),e._v(" It was equivalent to spending "+e._s(e.effectiveDurationText)+" in game. ")])])},u5=[];const d5={name:"SpeedUpReportModal",components:{ModalWrapper:Uj},data(){return{effectiveDurationText:"",durationText:""}},created(){this.effectiveDurationText=TimeSpan.fromMilliseconds(player.speedUpDuration).toString(),this.durationText=TimeSpan.fromMilliseconds(Date.now()-player.speedUpStart).toString(),player.speedUpDuration=0}},h5=d5;var m5=(0,X.Z)(h5,c5,u5,!1,null,null,null);const p5=m5.exports;var y5=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-modal-message l-modal-content--centered"},[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.message)+" ")]),e.messageIndex<3?i("div",[i("PrimaryButton",{staticClass:"o-primary-btn--width-medium c-modal-message__okay-btn",on:{click:e.handleLeftButtonClick}},[e._v(" "+e._s(e.messageIndex<2?"Delete":"Cancel")+" ")]),i("PrimaryButton",{staticClass:"o-primary-btn--width-medium c-modal-message__okay-btn",on:{click:e.handleRightButtonClick}},[e._v(" "+e._s(e.messageIndex>=2?"Delete":"Cancel")+" ")])],1):i("div",[i("PrimaryButton",{staticClass:"o-primary-btn--width-medium c-modal-message__okay-btn",on:{click:e.handleNoClick}},[e._v(" Thank you ")])],1)])},f5=[];const g5={name:"DeleteCompanionGlyphModal",components:{PrimaryButton:Vs},data(){return{messageIndex:0}},computed:{message(){switch(this.messageIndex){case 0:return"Are you sure you want to get rid of your Companion Glyph?";case 1:return"You will not receive any cake.";case 2:return"This is permanent! You will not get another Companion Glyph!";case 3:return"You deleted your faithful Companion Glyph more quickly than any\n other test subject on record. Congratulations.";default:return"Invalid message index"}}},methods:{handleLeftButtonClick(){this.messageIndex<2?this.handleYesClick():this.handleNoClick()},handleRightButtonClick(){this.messageIndex>=2?this.handleYesClick():this.handleNoClick()},handleYesClick(){this.messageIndex++,3===this.messageIndex&&this.deleteCompanion()},handleNoClick(){this.messageIndex=0,this.emitClose()},deleteCompanion(){const e=player.reality.glyphs.inventory.filter((e=>"companion"===e.type))[0];Glyphs.removeFromInventory(e)}}},v5=g5;var b5=(0,X.Z)(v5,y5,f5,!1,null,null,null);const E5=b5.exports;var T5=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" You are about to delete a Glyph ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" Deleting a Glyph will remove the Glyph from your inventory! "),i("div",{staticClass:"c-modal-hard-reset-danger"},[e._v(" There is no benefit in deleting a Glyph before you have unlocked Glyph Sacrifice! ")])])])},w5=[];const k5={name:"DeleteGlyphModal",components:{ModalWrapperChoice:WQ},props:{idx:{type:Number,required:!0}},data(){return{confirmedDelete:!1}},computed:{glyph(){return Glyphs.findByInventoryIndex(this.idx)}},methods:{update(){const e=Glyphs.findByInventoryIndex(this.idx);this.glyph===e||this.confirmedDelete||(this.emitClose(),Modal.message.show("The selected Glyph changed position or was otherwise changed!"))},handleYesClick(){this.confirmedDelete=!0,Glyphs.removeFromInventory(this.glyph)}}},C5=k5;var A5=(0,X.Z)(C5,T5,w5,!1,null,null,null);const _5=A5.exports;var S5=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"sacrificeAll"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.topLabel)+" ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.message)+" ")]),i("br"),i("div",{staticClass:"c-modal-hard-reset-danger"},[e._v(" "+e._s(e.extraMessage)+" ")])])},D5=[];const R5={name:"PurgeAllRejectedGlyphsModal",components:{ModalWrapperChoice:WQ},data(){return{isRefining:!1}},computed:{refiningOrSacrificing(){return this.isRefining?"Refine":"Sacrifice"},topLabel(){return`You are about to ${this.refiningOrSacrificing} all rejected Glyphs`},message(){const e=AutoGlyphProcessor.hasNegativeEffectScore()?" Note that some of your Effect Filter scores are negative, which may cause you to lose some Glyphs\n you normally want to keep.":"";return`Are you sure you want to ${this.refiningOrSacrificing} all rejected Glyphs? This will remove\n all Glyphs that would be rejected by your current Glyph Filter settings.${e}`},extraMessage(){return 0===this.glyphsDeleted?"This will remove no Glyphs.":this.glyphsDeleted===this.glyphsTotal?"This will remove all your Glyphs.":`This process will remove ${this.glyphsDeleted}/${this.glyphsTotal} Glyphs.`},glyphsTotal(){return Glyphs.inventory.filter((e=>null!==e)).length},glyphsDeleted(){return Glyphs.deleteAllRejected(!1)}},methods:{update(){this.isRefining=GlyphSacrificeHandler.isRefining},handleYesClick(){Glyphs.deleteAllRejected(!0)}}},M5=R5;var I5=(0,X.Z)(M5,S5,D5,!1,null,null,null);const x5=I5.exports;var P5=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"sacrificeAll"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.topLabel)+" ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.message)+" ")]),i("br"),i("div",{staticClass:"c-modal-hard-reset-danger"},[e._v(" "+e._s(e.extraMessage)+" ")])])},G5=[];const U5={name:"PurgeAllUnprotectedGlyphsModal",components:{ModalWrapperChoice:WQ},data(){return{isRefining:!1,isSacrificing:!1}},computed:{refiningSacrificingOrDeleting(){return this.isRefining?"Refine":this.isSacrificing?"Sacrifice":"delete"},topLabel(){return`You are about to ${this.refiningSacrificingOrDeleting} all unprotected Glyphs`},message(){return`Are you sure you want to ${this.refiningSacrificingOrDeleting} all unprotected Glyphs\n in your inventory?`},extraMessage(){return 0===this.glyphsDeleted?`This will ${this.refiningSacrificingOrDeleting} no Glyphs.`:this.glyphsDeleted===this.glyphsTotal?`This will ${this.refiningSacrificingOrDeleting} all your Glyphs.`:`This will ${this.refiningSacrificingOrDeleting} \n ${formatInt(this.glyphsDeleted)}/${formatInt(this.glyphsTotal)} of your Glyphs.`},glyphsTotal(){return Glyphs.inventory.filter((e=>null!==e)).length},glyphsDeleted(){return Glyphs.autoClean(0,!1)}},methods:{update(){this.isRefining=GlyphSacrificeHandler.isRefining,this.isSacrificing=GlyphSacrificeHandler.canSacrifice},handleYesClick(){Glyphs.deleteAllUnprotected()}}},B5=U5;var N5=(0,X.Z)(B5,P5,G5,!1,null,null,null);const O5=N5.exports;var L5=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"autoClean"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.topLabel)+" ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" This could delete Glyphs in your inventory that are good enough that you might want to use them later. Purging will Purge Glyphs based on your Purge mode. Are you sure you want to do this? "),i("br"),i("br"),e._v(" "+e._s(e.explanation)+" ")]),i("br"),i("div",{staticClass:"c-modal-hard-reset-danger"},[e._v(" "+e._s(e.extraMessage)+" ")])])},F5=[];const $5={name:"PurgeGlyphModal",components:{ModalWrapperChoice:WQ},props:{harsh:{type:Boolean,required:!0}},computed:{threshold(){return this.harsh?1:5},extraMessage(){return 0===this.glyphsDeleted?"This will Purge no Glyphs.":this.glyphsDeleted===this.glyphsTotal?"This will Purge all your Glyphs.":`${this.harsh?"Harsh Purging":"Purging"} will delete\n ${formatInt(this.glyphsDeleted)}/${formatInt(this.glyphsTotal)}\n of your Glyphs.`},explanation(){return this.harsh?"Harsh Purging deletes Glyphs that are strictly worse than any other Glyph in your\n inventory. For example, if a Glyph has all the same effects as another Glyph, but the values\n of ALL of the effects are worse, then it will be deleted.":"Purging deletes Glyphs that are strictly worse than other Glyphs, while keeping enough to equip a full\n set with those effects. This behaves like Harsh Purge, except that regular Purge will not delete any given\n Glyph unless it finds five Glyphs which are better (instead of only one)."},topLabel(){return`You are about to ${this.harsh?"Harsh Purge":"Purge"} your Glyphs`},glyphsTotal(){return Glyphs.inventory.filter((e=>null!==e)).length},glyphsDeleted(){return Glyphs.autoClean(this.threshold,!1)}},methods:{handleYesClick(){Glyphs.autoClean(this.threshold,!0)}}},H5=$5;var q5=(0,X.Z)(H5,L5,F5,!1,null,null,null);const V5=q5.exports;var Y5=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"glyphRefine"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" You are about to refine a Glyph ")]},proxy:!0}])},[e.resourceUnlocked?i("div",{staticClass:"c-modal-message__text"},[e._v(" Refining a Glyph will remove the Glyph from your inventory, and in return, you will increase your "+e._s(e.resourceName)+" Alchemy resource from "+e._s(e.format(e.resourceAmount,2,2))+" to "+e._s(e.format(e.after,2,2))+". This Glyph can raise your "+e._s(e.resourceName)+" resource to at most "+e._s(e.format(e.cap,2,2))+". ")]):i("div",{staticClass:"c-modal-message__text"},[e._v(" You cannot gain any "+e._s(e.resourceName)+" alchemy resource because you have not unlocked this Glyph's resource yet. You can still refine it anyway, but nothing will happen. Consider sacrificing the Glyph instead. ")])])},W5=[];const j5={name:"RefineGlyphModal",components:{ModalWrapperChoice:WQ},props:{idx:{type:Number,required:!0}},data(){return{resourceAmount:0,resourceUnlocked:!1,gain:0,after:0,cap:0,confirmedRefine:!1}},computed:{glyph(){return Glyphs.findByInventoryIndex(this.idx)},resource(){return GlyphSacrificeHandler.glyphAlchemyResource(this.glyph)},resourceName(){return this.resource.name}},methods:{update(){const e=this.resource;this.resourceAmount=e.amount,this.resourceUnlocked=e.isUnlocked,this.gain=GlyphSacrificeHandler.glyphRefinementGain(this.glyph),this.cap=GlyphSacrificeHandler.glyphEffectiveCap(this.glyph),this.after=this.resourceAmount+this.gain;const t=Glyphs.findByInventoryIndex(this.idx);this.glyph===t||this.confirmedRefine||(this.emitClose(),Modal.message.show("The selected Glyph changed position or was otherwise changed!"))},handleYesClick(){this.confirmedRefine=!0,GlyphSacrificeHandler.refineGlyph(this.glyph)}}},X5=j5;var z5=(0,X.Z)(X5,Y5,W5,!1,null,null,null);const K5=z5.exports;var Z5=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"glyphSacrifice"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" You are about to sacrifice a Glyph ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" "+e._s(e.message)+" ")])])},Q5=[];const J5={name:"SacrificeGlyphModal",components:{ModalWrapperChoice:WQ},props:{idx:{type:Number,required:!0}},data(){return{currentGlyphSacrifice:b.D0,gain:b.D0,confirmedSacrifice:!1}},computed:{glyph(){return Glyphs.findByInventoryIndex(this.idx)},message(){return`Do you really want to sacrifice this Glyph? Your total power of sacrificed ${this.glyph.type}\n Glyphs will increase from ${format(this.currentGlyphSacrifice,2,2)} to\n ${format(this.currentGlyphSacrifice.add(this.gain),2,2)}.`}},methods:{update(){this.currentGlyphSacrifice=player.reality.glyphs.sac[this.glyph.type],this.gain=GlyphSacrificeHandler.glyphSacrificeGain(this.glyph);const e=Glyphs.findByInventoryIndex(this.idx);this.glyph===e||this.confirmedSacrifice||(this.emitClose(),Modal.message.show("The selected Glyph changed position or was otherwise changed!"))},handleYesClick(){this.confirmedSacrifice=!0,GlyphSacrificeHandler.sacrificeGlyph(this.glyph,!0)}}},e4=J5;var t4=(0,X.Z)(e4,Z5,Q5,!1,null,null,null);const i4=t4.exports;var a4=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.header)+" ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text-fit"},[i("span",[e._v(" "+e._s(e.message)+" ")])]),i("RealityAutobuyerBox",{staticClass:"c-reality-pos",attrs:{"is-modal":""}}),i("EternityAutobuyerBox",{staticClass:"c-eternity-pos",attrs:{"is-modal":""}}),i("BigCrunchAutobuyerBox",{staticClass:"c-infinity-pos",attrs:{"is-modal":""}}),i("GalaxyAutobuyerBox",{attrs:{"is-modal":""}}),i("DimensionBoostAutobuyerBox",{attrs:{"is-modal":""}})],1)},n4=[];const s4={name:"AutobuyerEditModal",components:{BigCrunchAutobuyerBox:sA,DimensionBoostAutobuyerBox:kA,EternityAutobuyerBox:RA,GalaxyAutobuyerBox:UA,ModalWrapper:Uj,RealityAutobuyerBox:jA},computed:{header(){return"Edit Autobuyers"},message(){return Autobuyers.hasAutobuyersForEditModal?"Using this modal, you can edit various values inside your autobuyers.":"You currently have no autobuyers which could be shown here."}}},r4=s4;var o4=(0,X.Z)(r4,a4,n4,!1,null,"a32a7b20",null);const l4=o4.exports;var c4=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{staticClass:"c-automator-template-container",scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.name)+" Template ")]},proxy:!0}])},[i("div",{staticClass:"c-automator-template-description"},[e._v(" "+e._s(e.description)+" ")]),i("div",{staticClass:"c-automator-template-inputs"},[i("b",[e._v("Required Information:")]),i("br"),e._v(" Use a preset Study Tree: "),e._l(e.presets,(function(t,a){return i("button",{key:t.name,staticClass:"o-primary-btn o-load-preset-button-margin",on:{click:function(i){return e.loadPreset(t.name,a+1)}}},[e._v(" "+e._s(t.name?t.name:a+1)+" ")])})),i("button",{staticClass:"o-primary-btn o-load-preset-button-margin",on:{click:e.loadCurrent}},[i("i",[e._v("Current Tree")])]),e._l(e.inputs,(function(t){return i("div",{key:t.name,staticClass:"c-automator-template-entry"},[e._v(" "+e._s(t.prompt)+": "),e.paramTypeObject(t.type).boolDisplay?i("span",[i("button",{staticClass:"o-primary-btn",on:{click:function(i){return e.updateButton(t)}}},[e._v(" "+e._s(e.buttonTextStrings[t.name])+" ")])]):i("span",[i("input",{directives:[{name:"model",rawName:"v-model",value:e.templateInputs[t.name],expression:"templateInputs[input.name]"}],ref:"templateInputs[input.name]",refInFor:!0,staticClass:"c-automator-template-textbox",class:e.validityClass(t),attrs:{type:"text"},domProps:{value:e.templateInputs[t.name]},on:{input:[function(i){i.target.composing||e.$set(e.templateInputs,t.name,i.target.value)},e.updateTemplateProps]}})])])}))],2),i("div",{staticClass:"c-automator-template-warnings"},[i("b",[e._v("Possible things to consider:")]),0!==e.validWarnings.length?i("div",e._l(e.validWarnings,(function(t){return i("div",{key:t,staticClass:"c-automator-template-entry"},[e._v(" "+e._s(t)+" ")])})),0):i("div",[e._v(" (If something seems wrong with the template inputs, it will show up here) ")]),i("br"),i("br")]),0===e.invalidInputCount?i("button",{staticClass:"o-primary-btn",on:{click:e.copyAndClose}},[e._v(" "+e._s(e.isBlock?"Create custom template block":"Copy this template to your clipboard")+" and close this modal ")]):i("button",{staticClass:"o-primary-btn o-primary-btn--disabled"},[e._v(" Cannot generate template (You have "+e._s(e.quantifyInt("invalid input",e.invalidInputCount))+") ")])])},u4=[];const d4={name:"AutomatorScriptTemplate",components:{ModalWrapper:Uj},props:{warnings:{type:Function,required:!0},name:{type:String,required:!0},description:{type:String,required:!0},inputs:{type:Array,required:!0}},data(){return{templateInputs:{},buttonTextStrings:[],invalidInputCount:0,templateProps:null,currentPreset:"",isBlock:!1}},computed:{presets:()=>player.timestudy.presets,params:()=>GameDatabase.reality.automator.templates.paramTypes,validWarnings(){var e;return 0===this.invalidInputCount?this.warnings().concat(null===(e=this.templateScript)||void 0===e?void 0:e.warnings):this.warnings()},templateScript(){return 0!==this.invalidInputCount?null:new ScriptTemplate(this.templateProps,this.name)}},created(){for(const e of this.inputs){const t=this.paramTypeObject(e.type).boolDisplay;t?(this.$set(this.templateInputs,e.name,!1),this.buttonTextStrings[e.name]=t[1]):(this.$set(this.templateInputs,e.name,""),this.invalidInputCount++)}},methods:{update(){this.isBlock=player.reality.automator.type===AUTOMATOR_TYPE.BLOCK},paramTypeObject(e){return this.params.find((t=>t.name===e))},isValid(e){const t=this.paramTypeObject(e.type);return!t.isValidString||t.isValidString(this.templateInputs[e.name])},validityClass(e){return"treeStudies"===e.name&&""!==this.currentPreset?"c-automator-template-textbox--preset":this.isValid(e)?void 0:"c-automator-template-textbox--invalid"},loadPreset(e,t){this.templateInputs.treeStudies=e?`NAME ${e}`:`ID ${t}`,this.updateTemplateProps()},loadCurrent(){this.templateInputs.treeStudies=GameCache.currentStudyTree.value.exportString,this.updateTemplateProps()},updateTemplateProps(){this.templateProps={},this.invalidInputCount=0;for(const i of this.inputs){const e=this.paramTypeObject(i.type),t=t=>e.map?e.map(t):t;this.templateProps[i.name]=t(this.templateInputs[i.name]),this.isValid(i)||this.invalidInputCount++}const e=this.templateProps.treeStudies.match(/^NAME ((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){1,4})$/),t=this.templateProps.treeStudies.match(/^ID ([0-9])$/);if(e){const t=e?e[1]:"";this.currentPreset=this.presets.find((e=>e.name===t)).name}else if(t){const e=t?t[1]:"";this.currentPreset=this.presets.some(((t,i)=>i===e-1))?e:""}this.templateProps.treePreset=""===this.currentPreset?null:this.currentPreset},updateButton(e){this.templateInputs[e.name]=!this.templateInputs[e.name];const t=this.paramTypeObject(e.type).boolDisplay;this.buttonTextStrings[e.name]=t[this.templateInputs[e.name]?0:1],this.updateTemplateProps()},copyAndClose(){if(this.isBlock){const e={name:`Template: ${this.name}`,blocks:Fn(this.templateScript.script).blocks};AutomatorData.blockTemplates.push(e),GameUI.notify.info("Custom template block created")}else copyToClipboard(this.templateScript.script),GameUI.notify.info("Template copied to clipboard");this.emitClose()}}},h4=d4;var m4=(0,X.Z)(h4,c4,u4,!1,null,"1c623aa6",null);const p4=m4.exports;var y4=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{staticClass:"c-modal-away-progress"},[i("div",{staticClass:"c-modal-away-progress__header"},[e._v(" "+e._s(e.headerText)+" ")]),e.nothingHappened?e._e():i("div",{staticClass:"c-modal-away-progress__resources c-modal--short"},e._l(e.offlineStats,(function(t){return i("AwayProgressEntry",{key:t,attrs:{name:t,"player-before":e.playerBefore,"player-after":e.playerAfter},on:{"something-happened":function(t){e.somethingHappened=!0}}})})),1),!e.nothingHappened&&e.somethingHappened?i("span",[e._v("Note: Click an entry to hide it in the future.")]):e._e()])},f4=[],g4=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.show?i("div",{class:e.classObject,on:{click:e.hideEntry}},[e.isBlackHole?i("span",[e._v(" Your "),i("b",[e._v(e._s(e.formattedName))]),e._v(" activated "+e._s(e.formatBlackHoleActivations)+" ")]):i("span",[i("b",[e._v(e._s(e.formattedName))]),e.isVeryLarge?i("i",[e._v(" exponent")]):e._e(),e._v(" increased from "+e._s(e.formatBefore)+" to "+e._s(e.formatAfter)+" ")])]):e._e()},v4=[];const b4={name:"AwayProgressEntry",props:{name:{type:String,required:!0},playerBefore:{type:Object,required:!0},playerAfter:{type:Object,required:!0}},data(){return{removed:!1}},computed:{item(){return AwayProgressTypes.all[this.name]},before(){return this.item.navigateTo(this.playerBefore)},after(){return this.item.navigateTo(this.playerAfter)},formatBefore(){return this.formatPseudo(this.before)},formatAfter(){return this.formatPseudo(this.after)},classObject(){return{[this.item.classObject]:!this.removed,"c-modal-away-progress__disabled":this.removed}},formattedName(){return this.item.formatName},increased(){if(this.formatAfter===this.formatBefore)return!1;const e=this.before,t=this.after;return t instanceof Decimal?t.gt(e):t>e},show(){if(!this.item.appearsInAwayModal)return!1;const e=this.increased&&this.item.option&&this.item.isUnlocked();return e&&this.$emit("something-happened"),e},isBlackHole(){return this.item.name.includes("BlackHole")},formatBlackHoleActivations(){const e=this.after-this.before;return quantifyInt("time",e)},isVeryLarge(){return!this.isBlackHole&&Decimal.gt(this.before,Decimal.pow10(1e9))}},methods:{formatPseudo(e){if(void 0===e)return"";if(this.isVeryLarge)return formatInt(Math.floor(e.log10()));if(Decimal.lt(e,1e9)){const t=new Decimal(e);return formatInt(t.floor())}return format(e,2,2)},hideEntry(){this.removed=!this.removed,this.item.option=!this.item.option}}},E4=b4;var T4=(0,X.Z)(E4,g4,v4,!1,null,"2d859d46",null);const w4=T4.exports,k4={name:"AwayProgressModal",components:{AwayProgressEntry:w4,ModalWrapper:Uj},props:{playerBefore:{type:Object,required:!0},playerAfter:{type:Object,required:!0},seconds:{type:Number,required:!0}},data(){return{somethingHappened:!1}},computed:{nothingHappened(){return"S9"===Theme.current().name},offlineStats(){return AwayProgressTypes.appearsInAwayModal},headerText(){const e=TimeSpan.fromSeconds(this.seconds).toString();return this.nothingHappened||!this.somethingHappened?`While you were away for ${e}... Nothing happened.`:`While you were away for ${e}: `}},mounted(){this.$nextTick((()=>{!this.nothingHappened&&this.somethingHappened||SecretAchievement(36).unlock()}))}},C4=k4;var A4=(0,X.Z)(C4,y4,f4,!1,null,"244ab913",null);const _4=A4.exports;var S4=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{"show-cancel":!1},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" You are Breaking Infinity ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Break ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},e._l(e.message,(function(t,a){return i("span",{key:a},[e._v(" "+e._s(t)+" "),i("br")])})),0)])},D4=[];const R4={name:"BreakInfinityModal",components:{ModalWrapperChoice:WQ},computed:{message(){const e=formatPostBreak(Number.MAX_VALUE,2);return`Breaking Infinity will allow you to gain antimatter past ${e}${PlayerProgress.eternityUnlocked()?".":`, and allow you to read numbers past ${e}.`}\n Dimensions and Tickspeed Upgrades will scale in cost faster after ${e} antimatter.\n You will gain additional Infinity Points on Big Crunch based on antimatter produced over ${e}. ${EternityMilestone.keepAutobuyers.isReached?"":"\nIt will also unlock Break Infinity Upgrades and max all Normal Challenge Autobuyers."}`.split("\n")}},methods:{handleYesClick(){breakInfinity()}}},M4=R4;var I4=(0,X.Z)(M4,S4,D4,!1,null,null,null);const x4=I4.exports;var P4=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-modal-away-progress"},[i("div",{staticClass:"c-modal-away-progress__header"},[e._v(" "+e._s(e.titleText)+" ")]),i("div",[e._v(" "+e._s(e.timeString)+" If you need a refresher, here is a quick summary of all the content you have unlocked so far from the beginning of the game, separated into different stages of progression. These are only very brief descriptions; you can check the related How To Play entries by clicking the contents title or "),i("i",{staticClass:"fas fa-question-circle"}),e._v(" icons to view more detailed information. ")]),i("div",{staticClass:"l-catchup-group-container",style:{height:Math.clamp(3*e.progressStage+5,15,35)+"rem"}},e._l(e.progressStage,(function(t){return i("CatchupGroup",{key:t,attrs:{group:t,name:e.stageName(t)}})})),1),i("span",{staticClass:"c-suggestion-text"},[e._v(" Based on your current progression, it will probably be useful to try to increase your "+e._s(e.suggestedResource)+". ")]),i("div",{staticClass:"l-confirm-padding"},[i("PrimaryButton",{on:{click:e.emitClose}},[e._v(" Confirm ")])],1)])},G4=[],U4=function(){var e=this,t=e.$createElement,i=e._self._c||t;return 0!==e.shownResources.length?i("div",[i("span",{staticClass:"o-catchup-group-title",on:{click:function(t){e.collapsed=!e.collapsed}}},[i("i",{class:e.dropDownIconClass}),e._v(" "+e._s(e.name)+" ")]),e.collapsed?e._e():i("div",e._l(e.shownResources,(function(e,t){return i("CatchupEntry",{key:t,staticClass:"l-left",attrs:{info:e}})})),1)]):e._e()},B4=[],N4=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-modal-catchup-entry"},[i("span",{staticClass:"c-resource-name",attrs:{info:e.info,"is-focused":e.isFocusedResource(e.info)},on:{click:e.showHowTo}},[i("span",{staticClass:"c-underline"},[e._v(e._s(e.info.name))]),e._v(": "),i("i",{staticClass:"fas fa-question-circle"})]),e._v(" "+e._s(e.info.description)+" ")])},O4=[];const L4={name:"CatchupEntry",props:{info:{type:Object,required:!0}},data(){return{focusedResourceId:-1,tabToOpen:String}},computed:{config(){return this.info.config},hasDedicatedH2p(){return void 0!==this.config.openH2pEntry}},methods:{isFocusedResource(e){if(this.focusedResourceId=e.id,-1===this.focusedResourceId)return!0;const t=GameDatabase.catchupResources[this.focusedResourceId].name;return t!==e.name||(this.tabToOpen=t)},showHowTo(){ui.view.h2pForcedTab=GameDatabase.h2p.tabs.filter((e=>e.alias===(this.hasDedicatedH2p?this.config.openH2pEntry:this.tabToOpen)))[0],Modal.h2p.show()}}},F4=L4;var $4=(0,X.Z)(F4,N4,O4,!1,null,"34008a4e",null);const H4=$4.exports,q4={name:"CatchupGroup",components:{CatchupEntry:H4},props:{group:{type:Number,required:!0},name:{type:String,required:!0}},data(){return{collapsed:!0}},computed:{shownResources(){return Wm.all.filter((e=>e.requiredStage===this.group))},dropDownIconClass(){return this.collapsed?"far fa-plus-square":"far fa-minus-square"}}},V4=q4;var Y4=(0,X.Z)(V4,U4,B4,!1,null,"005300ef",null);const W4=Y4.exports,j4={name:"CatchupModal",components:{CatchupGroup:W4,PrimaryButton:Vs},props:{diff:{type:Number,required:!0}},computed:{progressStage:()=>jm.getProgressStage(player).id,suggestedResource(){return Vm(this.progressStage).suggestedResource},timeString(){return this.diff?`It has been ${TimeSpan.fromMilliseconds(this.diff).toString()} since you last loaded up the game.`:null},titleText(){return this.diff?"Content Catch-up":"Content Summary"}},methods:{stageName(e){return Vm(e).name}}},X4=j4;var z4=(0,X.Z)(X4,P4,G4,!1,null,"a8724662",null);const K4=z4.exports;var Z4=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-changelog-modal"},[i("ModalCloseButton",{on:{click:e.emitClose}}),e._m(0),i("div",{staticClass:"l-changelog-container"},[i("div",{staticClass:"l-changelog-search-tab"},[i("div",{staticClass:"l-changelog-tab-list"},e._l(e.entries,(function(t){return i("div",{key:t.id,staticClass:"o-changelog-tab-button",class:{"o-changelog-tab-button--selected":t===e.shownEntry},on:{click:function(i){return e.setShownEntry(t)}}},[e._v(" "+e._s(e.formatDate(t.date))+" ")])})),0)]),i("div",{staticClass:"l-changelog-info"},[i("div",{staticClass:"c-changelog-body--title"},[e._v(" "+e._s(e.formatDate(e.shownEntry.date))),e.shownEntry.name?i("span",[e._v(': "'+e._s(e.shownEntry.name)+'" update')]):e._e()]),i("div",{ref:"changelogBody",staticClass:"l-changelog-body c-changelog-body",domProps:{innerHTML:e._s(e.shownEntry.info)}})])])],1)},Q4=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-changelog-header"},[i("div",{staticClass:"c-changelog-title"},[e._v(" Changelog ")])])}];const J4={name:"ChangelogModal",components:{ModalCloseButton:Ij},data(){return{entryId:0}},computed:{shownEntry:{get(){return GameDatabase.changelog[this.entryId]},set(e){this.entryId=e.id}},entries(){return GameDatabase.changelog}},methods:{setShownEntry(e){this.shownEntry=e,this.$refs.changelogBody.scrollTop=0},formatDate(e){return e.map((e=>Math.log10(e)>=2?e:`0${e}`.slice(-2))).join("-")}}},e8=J4;var t8=(0,X.Z)(e8,Z4,Q4,!1,null,"92635de0",null);const i8=t8.exports;var a8=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{on:{confirm:e.confirmChange},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Change your Speedrun Player Name ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Change Name ")]},proxy:!0}])},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.input,expression:"input"}],ref:"input",staticClass:"c-modal-input c-modal-import__input",attrs:{type:"text"},domProps:{value:e.input},on:{keyup:[e.updateName,function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.confirmChange.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.emitClose.apply(null,arguments)}],input:function(t){t.target.composing||(e.input=t.target.value)}}}),i("i",[e._v(" This can no longer be changed once the timer starts, and there is a limit of "+e._s(e.formatInt(40))+" characters. ")]),i("div",[e._v(" Your new name will be "+e._s(e.actualName)+" ")])])},n8=[];const s8={name:"ChangeNameModal",components:{ModalWrapperChoice:WQ},data(){return{input:"",actualName:""}},created(){this.input=player.speedrun.name,this.actualName=Speedrun.generateName(this.input)},mounted(){this.$refs.input.select()},methods:{updateName(){this.actualName=Speedrun.generateName(this.input)},confirmChange(){player.speedrun.name=this.actualName,this.emitClose()}}},r8=s8;var o8=(0,X.Z)(r8,a8,n8,!1,null,null,null);const l8=o8.exports;var c8=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{on:{confirm:e.deleteConstants},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Deleting Automator Constants ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Delete All ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" Are you sure you wish to delete all of your currently-defined automator constants? "),i("br"),i("span",{staticClass:"l-lost-text"},[e._v(" This will irreversibly delete "+e._s(e.quantify("constant",e.constantCount))+"! ")])])])},u8=[];const d8={name:"ClearConstantsModal",components:{ModalWrapperChoice:WQ},data(){return{constantCount:0}},methods:{update(){this.constantCount=Object.keys(player.reality.automator.constants).length,0===this.constantCount&&this.emitClose()},deleteConstants(){player.reality.automator.constants={},player.reality.automator.constantSortOrder=[]}}},h8=d8;var m8=(0,X.Z)(h8,c8,u8,!1,null,"4f39cd67",null);const p8=m8.exports;var y8=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{staticClass:"l-credits-modal c-credits-modal",scopedSlots:e._u([{key:"header",fn:function(){return[i("h1",{staticClass:"c-game-header__antimatter"},[e._v(" Antimatter Dimensions ")])]},proxy:!0}])},[i("div",{staticClass:"c-credits-modal__body"},[i("CreditsDisplay",{attrs:{"is-modal":!0}})],1)])},f8=[];const g8={name:"CreditsModal",components:{CreditsDisplay:Ng,ModalWrapper:Uj}},v8=g8;var b8=(0,X.Z)(v8,y8,f8,!1,null,"2d8dcf44",null);const E8=b8.exports;var T8=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Delete this script ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Delete ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" Please confirm your desire to delete this Automator script. ")])])},w8=[];const k8={name:"DeleteAutomatorScriptModal",components:{ModalWrapperChoice:WQ},props:{scriptID:{type:[String,Number],required:!0}},methods:{handleYesClick(){const e=this.scriptID,t=AutomatorBackend.state.topLevelScript;AutomatorBackend.deleteScript(e);const i=Object.values(player.reality.automator.scripts).map((e=>({id:e.id,name:e.name})));AutomatorBackend.isOn&&t!==e?player.reality.automator.state.editorScript=t:player.reality.automator.state.editorScript=i[0].id,AutomatorData.clearUndoData(),EventHub.dispatch(GAME_EVENT.AUTOMATOR_SAVE_CHANGED)}}},C8=k8;var A8=(0,X.Z)(C8,T8,w8,!1,null,null,null);const _8=A8.exports;var S8=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Cracks in The Nameless Ones' Reality ")]},proxy:!0}])},[i("div",{staticClass:"c-enslaved-hint-modal c-modal--short"},[i("div",[e._v(" This Reality seems to be resisting your efforts to complete it. So far you have done the following: ")]),i("br"),e._l(e.shownEntries,(function(t,a){return i("div",{key:a},[t[0]?i("div",[i("i",{staticClass:"fa-solid fa-shapes"}),e._v(" "),i("b",[e._v("Glyph hint:")]),i("br"),e._v(" "+e._s(t[1])+" ")]):i("div",[t[1].hasHint&&!t[1].hasProgress?i("span",[i("i",{staticClass:"c-icon-wrapper fas fa-question-circle"}),i("b",[e._v("You have not figured out what this hint means yet.")])]):i("span",[i("i",{staticClass:"c-icon-wrapper fa-solid fa-house-crack"}),i("b",[e._v("You have exposed a crack in the Reality:")])]),i("br"),e._v(" - "+e._s(t[1].hintInfo)+" "),i("br"),e._v(" - "+e._s(t[1].hasProgress?t[1].completedInfo:"?????")+" ")]),i("br")])})),e.realityHintsLeft+e.glyphHintsLeft>0?i("div",[e._v(" You can spend some time looking for some more cracks in the Reality, but every hint you spend Stored Time on will increase the Stored Time needed for the next by a factor of "+e._s(e.formatInt(3))+". This cost bump will gradually go away over "+e._s(e.formatInt(24))+" hours and figuring out what the hint means will immediately divide the cost by "+e._s(e.formatInt(2))+". The cost can't be reduced below "+e._s(e.format(1e40))+" years. "),i("br"),i("br"),e._v(" The next hint will cost "+e._s(e.hintCost)+" of Stored Time. You currently have "+e._s(e.formattedStored)+". "),e.currentStored0&&e.canGetHint},on:{click:function(t){return e.giveRealityHint(e.realityHintsLeft)}}},[e._v(" Get a hint about the Reality itself ("+e._s(e.formatInt(e.realityHintsLeft))+" left) ")]),i("br"),i("PrimaryButton",{staticClass:"l-enslaved-hint-button",attrs:{enabled:e.glyphHintsLeft>0&&e.canGetHint},on:{click:function(t){return e.giveGlyphHint(e.glyphHintsLeft)}}},[e._v(" Get a hint on what Glyphs to use ("+e._s(e.formatInt(e.glyphHintsLeft))+" left) ")])],1):i("div",[i("b",[e._v("There are no more hints left!")])])],2)])},D8=[];const R8={name:"EnslavedHintsModal",components:{ModalWrapper:Uj,PrimaryButton:Vs},data(){return{currentStored:new Decimal(0),nextHintCost:0,canGetHint:!1,shownEntries:[],realityHintsLeft:0,glyphHintsLeft:0,hints:0}},computed:{hintCost(){return`${quantify("year",TimeSpan.fromMilliseconds(this.nextHintCost).totalYears,2)}`},formattedStored(){return`${quantify("year",TimeSpan.fromMilliseconds(this.currentStored).totalYears,2)}`},hasProgress(e){return this.progressEntries.some((t=>t.id===e))},timeEstimate(){if(this.currentStored>=this.nextHintCost)return"";const e=1e3*(Enslaved.isStoringGameTime?Enslaved.currentBlackHoleStoreAmountPerMs:getGameSpeedupFactor()),t=this.currentStored/e,i=this.nextHintCost/e,a=(TimeSpan.fromYears(1e40).totalMilliseconds-this.currentStored)/e;if(TimeSpan.fromSeconds(a).totalDays>this.hints)return`${TimeSpan.fromSeconds(a).toStringShort(!0)}`;const n=Math.pow(3,1/86400),s=i*Math.log(n)*Math.pow(n,t),r=productLog(s)/Math.log(n)-t;return`${TimeSpan.fromSeconds(r).toStringShort(!0)}`}},methods:{update(){this.currentStored.copyFrom(player.celestials.enslaved.stored),this.nextHintCost=Enslaved.nextHintCost,this.canGetHint=this.currentStored>=this.nextHintCost,this.shownEntries=[],this.realityHintsLeft=EnslavedProgress.all.length;for(const t of EnslavedProgress.all)t.hasHint&&(this.shownEntries.push([!1,t]),this.realityHintsLeft--);const e=player.celestials.enslaved.glyphHintsGiven;for(let t=0;t!e.hasHint)).randomElement().unlock()},giveGlyphHint(e){e<=0||!Enslaved.spendTimeForHint()||player.celestials.enslaved.glyphHintsGiven++}}},M8=R8;var I8=(0,X.Z)(M8,S8,D8,!1,null,"101e8e48",null);const x8=I8.exports;var P8=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"deleteGlyphSetSave"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Delete this Glyph Set ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Delete ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" Please confirm your desire to delete this Glyph Set: "),i("GlyphSetPreview",{attrs:{"is-in-modal":!0,glyphs:e.glyphSet}}),e._v(" This will not affect your actual Glyphs, only the saved preset. ")],1)])},G8=[];const U8={name:"GlyphSetSaveDeleteModal",components:{ModalWrapperChoice:WQ,GlyphSetPreview:Fx},props:{glyphSetId:{type:Number,required:!0}},data(){return{glyphSet:[]}},methods:{update(){this.glyphSet=Glyphs.copyForRecords(player.reality.glyphs.sets[this.glyphSetId].glyphs)},handleYesClick(){player.reality.glyphs.sets[this.glyphSetId].glyphs=[],EventHub.dispatch(GAME_EVENT.GLYPH_SET_SAVE_CHANGE)}}},B8=U8;var N8=(0,X.Z)(B8,P8,G8,!1,null,null,null);const O8=N8.exports;var L8=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.name)+" ")]},proxy:!0}])},[e.isGlyphSelection?i("div",[e._v(" Projected Glyph Level: "+e._s(e.formatInt(e.gainedLevel))+" ")]):e._e(),e.showSetName?i("GlyphSetName",{attrs:{"glyph-set":e.glyphs,"force-color":!0}}):e._e(),i("div",{class:e.containerClass},e._l(e.glyphs,(function(t,a){return i("GlyphShowcasePanelEntry",{key:a,staticClass:"c-glyph-choice-single-glyph",attrs:{idx:a,glyph:t,"show-level":!e.isGlyphSelection,"reality-glyph-boost":e.realityGlyphBoost,"max-glyph-effects":e.maxGlyphEffects,"show-sacrifice":e.displaySacrifice}})})),1)],1)},F8=[],$8=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[i("div",{staticClass:"c-glyph-choice-icon"},[i("span",{style:e.typeStyle},[e._v(e._s(e.typeCapitalized))]),e.showLevel?i("div",{domProps:{innerHTML:e._s(e.levelText)}}):e._e(),i("GlyphComponent",{key:e.idx,staticClass:"c-glyph-component-container",attrs:{glyph:e.glyph,"show-sacrifice":e.showSacrifice&&e.canSacrifice,draggable:!1,circular:!0,"ignore-modified-level":!1,"reality-glyph-boost":e.realityGlyphBoost,"is-in-modal":!0,size:"4rem","text-proportion":.5,"glow-blur":"0.4rem","glow-spread":"0.1rem"},on:{clicked:function(t){return e.clickGlyph(e.glyph)}}}),i("div",{style:e.rarityStyle},[e._v(" "+e._s(e.rarityPercent)+" ")])],1),i("div",{staticClass:"c-glyph-choice-effect-list",style:e.effectStyle},e._l(e.glyphEffectList,(function(t,a){return i("div",{key:a,class:{"o-pelle-disabled":t.isPelleDisabled}},[e._v(" "+e._s(t.text)+" ")])})),0)])},H8=[];const q8={name:"GlyphShowcasePanelEntry",components:{GlyphComponent:Rx},props:{idx:{type:Number,required:!0},glyph:{type:Object,required:!0},showLevel:{type:Boolean,required:!0},realityGlyphBoost:{type:Number,default:0},maxGlyphEffects:{type:Number,required:!0},showSacrifice:{type:Boolean,required:!0}},data(){return{canSacrifice:!1}},computed:{type(){return this.glyph.type},typeCapitalized(){return this.type.capitalize()},level(){return this.glyph.level},effectiveLevel(){return getAdjustedGlyphLevel(this.glyph,this.realityGlyphBoost,!0)},isLevelCapped(){return this.effectiveLevel&&this.effectiveLevelthis.level},levelText(){if("companion"===this.type)return"";const e=this.isLevelCapped?"":this.isLevelBoosted?"":"",t=this.isLevelCapped?"#ff4444":this.isLevelBoosted?"#44FF44":"var(--color-text);";return`\n ${e}${formatInt(this.effectiveLevel)}${e}\n `},typeStyle(){return{color:GlyphAppearanceHandler.getBorderColor(this.type),"font-weight":"bold","text-shadow":"cursed"===this.type||"amalgam"===this.type?"0.05rem 0.05rem var(--color-text)":void 0,animation:"reality"===this.type?"a-reality-glyph-description-cycle 10s infinite":void 0}},rarityStyle(){const e=CosmeticGlyphTypes[this.glyph.type].ignoreRarityColor?GlyphAppearanceHandler.getBorderColor(this.type):getRarity(this.glyph.strength)[Theme.current().isDark()?"darkColor":"lightColor"];return{color:e,"font-weight":"bold"}},effectStyle(){return{"font-size":("effarig"===this.type?1:1.2)+"rem",height:this.glyphEffectListHeight(this.maxGlyphEffects)}},glyphEffectList(){const e=GlyphEffects,t=getGlyphEffectValuesFromBitmask(this.glyph.effects,this.effectiveLevel,this.glyph.strength,this.type).filter((t=>e[t.id].isGenerated===generatedTypes.includes(this.type))),i=t.map((t=>this.formatEffectString(e[t.id],t.value)));return i.filter((e=>"undefined"!==e))},rarityPercent(){return"companion"===this.glyph.type||"cursed"===this.glyph.type||"amalgam"===this.type?"":formatRarity(strengthToRarity(this.glyph.strength))}},methods:{update(){this.canSacrifice=GlyphSacrificeHandler.canSacrifice},glyphEffectListHeight(e){const t=["3rem","6rem","8rem","11rem"];return t[e-1]},formatEffectString(e,t){const i=e.shortDesc,a=e.formatSingleEffect?e.formatSingleEffect(t):e.formatEffect(t),n=e.conversion?e.formatSecondaryEffect(e.conversion(t)):"";let s=e.isDisabledByDoomed&&!Ra.unlocks.unlockPelleGlyphEffects.isUnlocked||e.isDisabledByDoomedWithlvl25&&Ra.unlocks.unlockPelleGlyphEffects.isUnlocked;return{text:`${i}`.replace("{value}",a).replace("{value2}",n),isPelleDisabled:s}},clickGlyph(e){Glyphs.isMusicGlyph(e)&&new Audio(`audio/note${GLYPH_TYPES.indexOf(e.type)+1}.mp3`).play()}}},V8=q8;var Y8=(0,X.Z)(V8,$8,H8,!1,null,"5012c711",null);const W8=Y8.exports,j8={name:"GlyphShowcasePanelModal",components:{GlyphSetName:Bx,ModalWrapper:Uj,GlyphShowcasePanelEntry:W8},props:{name:{type:String,required:!0},glyphSet:{type:Array,required:!0},isGlyphSelection:{type:Boolean,default:!1},showSetName:{type:Boolean,default:!0},displaySacrifice:{type:Boolean,default:!0}},data(){return{glyphs:[],gainedLevel:0,canSacrifice:!1,realityGlyphBoost:0}},computed:{maxGlyphEffects(){let e=1;for(const t of this.glyphs)e=Math.max(getGlyphEffectsFromBitmask(t.effects).filter((e=>e.isGenerated)).length,e);return e},containerClass(){return{"c-glyph-choice-container":!0,"c-glyph-choice-container-single":1===this.glyphs.length}}},methods:{update(){this.glyphs=this.isGlyphSelection?GlyphSelection.glyphList(GlyphSelection.choiceCount,gainedGlyphLevel(),{isChoosingGlyph:!1}):this.glyphSet.filter((e=>e)),this.gainedLevel=gainedGlyphLevel().actualLevel;const e=this.glyphs.filter((e=>"reality"===e.type))[0];this.realityGlyphBoost=e?GlyphEffects.realityglyphlevel.effect(e.level):0}}},X8=j8;var z8=(0,X.Z)(X8,L8,F8,!1,null,"0f672c00",null);const K8=z8.exports;var Z8=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-h2p-modal"},[i("ModalCloseButton",{on:{click:e.emitClose}}),e._m(0),i("div",{staticClass:"l-h2p-container"},[i("div",{staticClass:"l-h2p-search-tab"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.searchValue,expression:"searchValue"}],ref:"input",staticClass:"c-h2p-search-bar",attrs:{placeholder:"Type to search..."},domProps:{value:e.searchValue},on:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.emitClose.apply(null,arguments)},input:function(t){t.target.composing||(e.searchValue=t.target.value)}}}),i("div",{staticClass:"l-h2p-tab-list"},e._l(e.matchingTabs,(function(t,a){return i("div",{key:t.tab.name,staticClass:"o-h2p-tab-button",class:{"o-h2p-tab-button--selected":t.tab===e.activeTab,"o-h2p-tab-button--relevant":t.relevancee.tab.isUnlocked()))},topThreshold(){return Math.min(this.matchingTabs[Math.min(this.matchingTabs.length-1,4)].relevance+.01,.5)}},created(){const e=GameDatabase.h2p.tabs.filter((e=>e.isUnlocked())),t=this.$viewModel.tab,i=`${t}/${this.$viewModel.subtab}`,a=e.find((e=>e.tab===i||e.tab===t));this.activeTab=ui.view.h2pForcedTab||a||e[0],ui.view.h2pForcedTab=void 0,Tutorial.emphasizeH2P()&&(this.activeTab=GameDatabase.h2p.tabs[0])},mounted(){this.$refs.input.select()},methods:{setActiveTab(e){this.activeTab=e,document.getElementById("h2p-body").scrollTop=0},isFirstIrrelevant(e){const t=this.matchingTabs,i=t[e],a=t[e-1];return e>0&&i.relevance>=this.topThreshold&&a.relevance0?i("div",{staticClass:"l-has-errors"},[e._v(" "+e._s(e.formatInt(e.overwrittenPresetCount))+" of your existing presets will be overwritten by imported presets! ")]):e._e(),i("br"),i("button",{staticClass:"o-primary-btn",on:{click:function(t){e.ignorePresets=!e.ignorePresets}}},[e._v(" "+e._s(e.presetButtonText)+" ")])],2):e._e(),e.hasConstants?i("div",[i("br"),e._v(" Constants: "),e._l(e.importedConstants,(function(t,a){return i("span",{key:a+10,staticClass:"c-import-data-name"},[e._v(' "'+e._s(t.key)+'" ')])})),!e.ignoreConstants&&(e.willOverwriteConstant||e.extraConstants>0)?i("div",{staticClass:"l-has-errors"},[e.willOverwriteConstant?i("span",[e._v("Some of your existing constants will be overwritten!")]):e._e(),e.willOverwriteConstant&&e.extraConstants>0?i("br"):e._e(),e.extraConstants>0?i("span",[e._v(" "+e._s(e.quantifyInt("constant",e.extraConstants))+" will not be imported due to the "+e._s(e.maxConstantCount)+" constant limit. ")]):e._e()]):e._e(),i("br"),i("button",{staticClass:"o-primary-btn",on:{click:function(t){e.ignoreConstants=!e.ignoreConstants}}},[e._v(" "+e._s(e.constantButtonText)+" ")])],2):e._e(),i("br"),e.hasErrors?i("div",{staticClass:"l-has-errors"},[e._v(" This script has errors which need to be fixed before it can be run! ")]):e._e(),e.hasErrors&&e.isImportingExtraData?i("div",[i("i",[e._v("Some errors may be fixed with the additional data being imported.")])]):e._e()]):0!==e.input.length?i("div",[e._v(" Invalid Automator data string ")]):e._e()])},n6=[];const s6={name:"ImportAutomatorDataModal",components:{ModalWrapperChoice:WQ},data(){return{input:"",isValid:!1,hasExtraData:!1,scriptName:"",lineCount:0,scriptContent:"",hasErrors:!1,importedPresets:[],importedConstants:[],ignorePresets:!1,ignoreConstants:!1}},computed:{hasPresets(){var e,t;return 0!==(null!==(e=null===(t=this.importedPresets)||void 0===t?void 0:t.length)&&void 0!==e?e:0)},hasConstants(){var e,t;return 0!==(null!==(e=null===(t=this.importedConstants)||void 0===t?void 0:t.length)&&void 0!==e?e:0)},isImportingExtraData(){const e=this.willOverwriteConstant||this.constantCountAfterImport>this.currentConstants,t=!!this.importedPresets&&!this.ignorePresets,i=!!this.importedConstants&&(!this.ignoreConstants&&e);return this.isValid&&this.hasExtraData&&(t||i)},currentPresets:()=>player.timestudy.presets,currentConstants:()=>Object.keys(player.reality.automator.constants),maxConstantCount(){return AutomatorData.MAX_ALLOWED_CONSTANT_COUNT},overwrittenPresetCount(){let e=0;for(const t of this.importedPresets){const i=this.currentPresets[t.id],a=""===i.name&&""===i.studies;a||i.name===t.name&&i.studies===t.studies||e++}return e},willOverwriteConstant(){if(!this.hasExtraData)return!1;const e=new Set;for(const t of this.currentConstants)e.add(t);for(const t of this.importedConstants)if(e.has(t.key)&&player.reality.automator.constants[t.key]!==t.value)return!0;return!1},constantCountAfterImport(){if(!this.hasExtraData)return this.currentConstants.length;const e=new Set;for(const t of this.currentConstants)e.add(t);for(const t of this.importedConstants)e.add(t.key);return e.size},extraConstants(){return this.constantCountAfterImport-this.maxConstantCount},presetButtonText(){return this.ignorePresets?"Will Ignore Presets":"Will Import Presets"},constantButtonText(){return this.ignoreConstants?"Will Ignore Constants":"Will Import Constants"}},mounted(){this.$refs.input.select()},methods:{update(){let e=AutomatorBackend.parseFullScriptData(this.input);e?this.hasExtraData=!0:(e=AutomatorBackend.parseScriptContents(this.input),this.hasExtraData=!1),e?(this.scriptName=e.name,this.scriptContent=e.content,this.importedPresets=e.presets,this.importedConstants=e.constants,this.lineCount=this.scriptContent.split("\n").length,this.hasErrors=Ln(this.scriptContent),this.isValid=!0):this.isValid=!1},importSave(){this.isValid&&(this.hasExtraData?AutomatorBackend.importFullScriptData(this.input,{presets:this.ignorePresets,constants:this.ignoreConstants}):AutomatorBackend.importScriptContents(this.input),this.emitClose())}}},r6=s6;var o6=(0,X.Z)(r6,a6,n6,!1,null,"67bd8c2a",null);const l6=o6.exports;var c6=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{"show-cancel":!e.inputIsValid,"show-confirm":!1},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Import Glyph filter settings ")]},proxy:!0}])},[e._v(" Note: Importing Glyph filter options will overwrite settings "),i("br"),e._v(" in all filter modes, not just the currently-selected one. "),i("input",{directives:[{name:"model",rawName:"v-model",value:e.input,expression:"input"}],ref:"input",staticClass:"c-modal-input c-modal-import__input",attrs:{type:"text"},domProps:{value:e.input},on:{keyup:[function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.importSave.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.emitClose.apply(null,arguments)}],input:function(t){t.target.composing||(e.input=t.target.value)}}}),i("div",{staticClass:"c-modal-import__save-info"},[e.input?e.inputIsValid?i("div",[i("b",[e._v("Selection mode:")]),e._v(" "+e._s(e.selectStr)+" "),i("br"),i("b",[e._v('Effect Count ("Number of Effects"):')]),e._v(" "+e._s(e.basicCountStr)+" "),i("br"),i("b",[e._v("Rejected Glyphs:")]),e._v(" "+e._s(e.trashStr)+" "),i("br"),i("u",[i("b",[e._v("Type-specific Settings")])]),e._v(" "),i("span",{attrs:{"ach-tooltip":e.settingTooltipText}},[i("i",{staticClass:"fas fa-question-circle"})]),i("br"),e._l(e.availableTypes,(function(t){return i("ImportFilterSingleType",{key:t,staticClass:"c-single-type",attrs:{type:t,"curr-settings":e.currentSettings.types[t],"new-settings":e.parsedSettings.types[t]}})}))],2):i("div",[e._v(" Not a valid Glyph filter string ")]):i("div")]),e.inputIsValid?i("PrimaryButton",{staticClass:"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn",on:{click:e.importFilter}},[e._v(" Import ")]):e._e()],1)},u6=[],d6=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",[e._v(" "+e._s(e.symbol)+": "),e.settingsChanged?i("span",[i("span",{staticClass:"c-single-row"},[i("span",{staticClass:"c-rarity",class:e.topLevelClassObject("rarity"),attrs:{"ach-tooltip":"Setting for Rarity Threshold and Specified Effect"}},[e._v(" "+e._s(e.rarityStr)+" ")]),i("span",{staticClass:"c-effects-count",class:e.topLevelClassObject("effectCount"),attrs:{"ach-tooltip":"Number of effects in Specified Effect"}},[e._v(" Minimum Effects: "+e._s(e.effectStr)+" ")]),i("span",{staticClass:"c-target-score",class:e.topLevelClassObject("score"),attrs:{"ach-tooltip":"Threshold for Effect Score"}},[e._v(" Score: "+e._s(e.scoreStr)+" ")])]),i("br"),i("span",{staticClass:"c-single-row"},e._l(e.effectData.slice(0,4),(function(t){return i("span",{key:t.bitmaskIndex,staticClass:"c-single-score",class:e.effectClassObject(t),attrs:{"ach-tooltip":e.getEffectDesc(t)}},[e._v(" "+e._s(e.effectScoreStr(t))+" ")])})),0),e.effectData.length>4?i("span",{staticClass:"c-single-row c-second-row"},[i("br"),e._l(e.effectData.slice(4),(function(t){return i("span",{key:t.bitmaskIndex,staticClass:"c-single-score o-cell",class:e.effectClassObject(t),attrs:{"ach-tooltip":e.getEffectDesc(t)}},[e._v(" "+e._s(e.effectScoreStr(t))+" ")])}))],2):e._e()]):i("span",[e._v(" (No changes) ")])])},h6=[];const m6={name:"ImportFilterSingleType",props:{type:{type:String,required:!0},currSettings:{type:Object,required:!0},newSettings:{type:Object,required:!0}},computed:{settingsChanged(){return JSON.stringify(this.currSettings)!==JSON.stringify(this.newSettings)},symbol(){return GLYPH_SYMBOLS[this.type]},capitalized(){return`${this.type.charAt(0).toUpperCase()}${this.type.substring(1)}`},rarityStr(){return this.changedValue(this.currSettings.rarity,this.newSettings.rarity,(e=>formatPercents(e/100)))},effectStr(){return this.changedValue(this.currSettings.effectCount,this.newSettings.effectCount,formatInt)},scoreStr(){return this.changedValue(this.currSettings.score,this.newSettings.score,formatInt)},effectData(){const e=[];for(let t=0;t{const i=e?"✔":"✘";return`${i}${formatInt(t)}`},i=t(e.oldReq,e.oldScore),a=t(e.newReq,e.newScore);return e.oldScore===e.newScore?i:`${i}➜${a}`},topLevelClassObject(e){return{"o-cell":!0,"o-cell--changed":this.currSettings[e]!==this.newSettings[e]}},effectClassObject(e){return{"o-cell":!0,"o-cell--changed":e.oldReq!==e.newReq||e.oldScore!==e.newScore}},getEffectDesc(e){return GlyphEffects.all.find((t=>t.bitmaskIndex===e.bitmaskIndex&&t.isGenerated)).genericDesc}}},p6=m6;var y6=(0,X.Z)(p6,d6,h6,!1,null,"66a38efb",null);const f6=y6.exports,g6={name:"ImportFilterModal",components:{ModalWrapperChoice:WQ,PrimaryButton:Vs,ImportFilterSingleType:f6},data(){return{currentSettings:{},input:""}},computed:{inputIsValid(){let e;try{return e=GameSaveSerializer.decodeText(this.input,"glyph filter"),e.length>0&&null!==e.match(/^[,-9\|]*$/)}catch(t){return!1}},parsedSettings(){if(!this.inputIsValid)return null;const e=GameSaveSerializer.decodeText(this.input,"glyph filter"),t=e.split("|"),i={};let a=3;for(const n of ALCHEMY_BASIC_GLYPH_TYPES){if(!n)continue;const e=t[a].split(",");i[n]={rarity:Number(e[0]),score:Number(e[1]),effectCount:Number(e[2]),specifiedMask:Number(e[3]),effectScores:e[4].split("/").map((e=>Number(e)))},a++}return{select:Number(t[0]),simple:Number(t[1]),trash:Number(t[2]),types:i}},selectStr(){return this.changedValue(this.parsedSettings.select,this.currentSettings.select,(e=>AutoGlyphProcessor.filterModeName(e)))},basicCountStr(){return this.changedValue(this.parsedSettings.simple,this.currentSettings.simple,formatInt)},trashStr(){return this.changedValue(this.parsedSettings.trash,this.currentSettings.trash,(e=>AutoGlyphProcessor.trashModeDesc(e)))},availableTypes(){return ALCHEMY_BASIC_GLYPH_TYPES.filter((e=>!GlyphTypes.locked.map((e=>e.id)).includes(e)))},settingTooltipText(){return"Mouseover each box for more details. ✔ and ✘ symbols denote an effect\n selected/unselected for Specified Effect mode."}},mounted(){this.$refs.input.select()},methods:{update(){this.currentSettings=JSON.parse(JSON.stringify(player.reality.glyphs.filter))},changedValue(e,t,i){return e===t?"(No change)":`${i(e)} ➜ ${i(t)}`},importFilter(){null!==this.parsedSettings&&(this.emitClose(),player.reality.glyphs.filter=this.parsedSettings)}}},v6=g6;var b6=(0,X.Z)(v6,c6,u6,!1,null,"57ab1f8f",null);const E6=b6.exports;var T6=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{"show-cancel":!e.inputIsValid,"show-confirm":!1},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Input your save ")]},proxy:!0}])},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.input,expression:"input"}],ref:"input",staticClass:"c-modal-input c-modal-import__input",attrs:{type:"text"},domProps:{value:e.input},on:{keyup:[function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.importSave.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:e.emitClose.apply(null,arguments)}],input:function(t){t.target.composing||(e.input=t.target.value)}}}),i("div",{staticClass:"c-modal-import__save-info"},[e.inputIsSecret?i("div",[e._v(" ??? ")]):e.inputIsValidSave?[e.inputIsDev?i("div",[e._v(" You cannot import development saves into the public game. ")]):[e.fileName?i("div",[e._v(" File name: "+e._s(e.fileName)+" ")]):e._e(),i("div",[e._v("Antimatter: "+e._s(e.formatPostBreak(e.antimatter,2,1)))]),e.progress.isInfinityUnlocked?i("div",[e._v(" Infinities: "+e._s(e.formatPostBreak(e.infinities,2))+" ")]):e._e(),e.progress.isEternityUnlocked?i("div",[e._v(" Eternities: "+e._s(e.formatPostBreak(e.player.eternities,2))+" ")]):e._e(),e.progress.isRealityUnlocked?i("div",[e._v(" Realities: "+e._s(e.formatPostBreak(e.player.realities,2))+" ")]):e._e(),e.progress.hasFullCompletion?i("div",[e._v(" Full game completions: "+e._s(e.formatInt(e.player.records.fullGameCompletions))+" ")]):e._e(),i("div",{staticClass:"c-modal-import__warning"},[e._v(" (Your current save file will be overwritten!) ")]),i("br"),i("div",[e._v(" "+e._s(e.lastOpened)+" "),i("div",{staticClass:"o-primary-btn",on:{click:e.changeOfflineSetting}},[e._v(" Offline Progress: "+e._s(e.offlineType)+" ")]),i("span",{domProps:{innerHTML:e._s(e.offlineDetails)}})])]]:e.hasInput?i("div",[e._v(" Not a valid save: "),i("br"),e._v(" "+e._s(e.saveCheckString)+" ")]):e._e(),e.player?i("div",{staticClass:"c-modal-hard-reset-danger"},[e.willLoseCosmetics?i("div",[i("br"),e._v(" Glyph cosmetic sets from completing the game are tied to your save. "),i("br"),e._v(" Importing this save will cause you to lose some sets. ")]):e._e(),e.willLoseSpeedrun?i("div",[i("br"),e._v(" You will lose the ability to do a Speedrun, as this save does not have it unlocked. ")]):e._e()]):e._e()],2),e.inputIsValid?i("PrimaryButton",{staticClass:"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn",on:{click:e.importSave}},[e._v(" Import ")]):e._e()],1)},w6=[];const k6={IMPORTED:0,LOCAL:1,IGNORED:2},C6={name:"ImportSaveModal",components:{ModalWrapperChoice:WQ,PrimaryButton:Vs},data(){return{input:"",offlineImport:k6.IMPORTED}},computed:{saveCheckString(){const e=_m.deserialize(this.input),t=GameStorage.checkPlayerObject(e);return t.length>300?`${t.slice(0,297)}...`:t},player(){return""===this.saveCheckString?_m.deserialize(this.input):void 0},progress(){return PlayerProgress.of(this.player)},fileName(){return this.player.options.saveFileName},antimatter(){return this.player.antimatter||this.player.money},infinities(){const e=this.player.infinitied?this.player.infinitied:this.player.infinities;return new Decimal(e)},hasInput(){return""!==this.input},inputIsValid(){return this.inputIsValidSave||this.inputIsSecret},inputIsValidSave(){return void 0!==this.player},inputIsDev(){return(51Date.now()},lastOpened(){const e=Date.now()-this.player.lastUpdate;return this.isFromFuture?`This save is from ${TimeSpan.fromMilliseconds(-e).toString()} in the future.`:`This save was last opened ${TimeSpan.fromMilliseconds(e).toString()} ago.`},offlineType(){switch(this.updateOfflineSettings(),this.offlineImport){case k6.IMPORTED:return"Using imported save settings";case k6.LOCAL:return"Using existing save settings";case k6.IGNORED:return"Will not simulate offline time";default:throw new Error("Unrecognized offline progress setting for importing")}},offlineDetails(){if(this.offlineImport===k6.IGNORED)return"Save will be imported without offline progress.";if(!GameStorage.offlineEnabled)return"This setting will not apply any offline progress after importing.";if(this.isFromFuture)return"Offline progress cannot be simulated due to an inconsistent system clock time.";const e=Date.now()-this.player.lastUpdate,t=GameStorage.maxOfflineTicks(e);return`After importing, will simulate ${formatInt(t)} ticks of duration\n ${TimeSpan.fromMilliseconds(e/t).toStringShort()} each.`},willLoseCosmetics(){var e,t,i;const a=player.reality.glyphs.cosmetics.unlockedFromNG,n=null!==(e=null===(t=this.player.reality)||void 0===t||null===(i=t.glyphs.cosmetics)||void 0===i?void 0:i.unlockedFromNG)&&void 0!==e?e:[];return a.filter((e=>!n.includes(e))).length>0},willLoseSpeedrun(){return!1}},mounted(){this.$refs.input.select()},destroyed(){GameStorage.offlineEnabled=void 0,GameStorage.offlineTicks=void 0},methods:{changeOfflineSetting(){this.offlineImport=(this.offlineImport+1)%3},updateOfflineSettings(){var e,t;switch(this.offlineImport){case k6.IMPORTED:GameStorage.offlineEnabled=null===(e=this.player.options.offlineProgress)||void 0===e||e,GameStorage.offlineTicks=null!==(t=this.player.options.offlineTicks)&&void 0!==t?t:1e5;break;case k6.LOCAL:GameStorage.offlineEnabled=player.options.offlineProgress,GameStorage.offlineTicks=player.options.offlineTicks;break;case k6.IGNORED:GameStorage.offlineEnabled=!1;break}},importSave(){this.inputIsValid&&(this.emitClose(),GameStorage.import(this.input))}}},A6=C6;var _6=(0,X.Z)(A6,T6,w6,!1,null,null,null);const S6=_6.exports;var D6=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{on:{confirm:e.importConstants},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Importing Time Study Presets as Constants ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Import All ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" Confirming this modal will import all of your saved Time Study presets as new Automator constants. Below are all the valid presets which will be imported, with the beginning and end of their contained studies shown. Some names may be changed due to restrictions on constant name formatting. "),i("br"),i("br"),e._l(e.presets.length,(function(t){return i("div",{key:t,class:{"l-not-imported":!e.willImport[t-1]}},[e._v(" Name: "+e._s(e.presets[t-1].name)+" ➜ "),i("b",[e._v(e._s(e.names[t-1]))]),i("br"),e._v(" "+e._s(e.shortenString(e.presets[t-1].studies))+" "),e.hasConflict(e.names[t-1])?i("span",{staticClass:"l-warn-text"},[i("br"),e._v(" This will overwrite an existing constant! ")]):e._e(),i("br"),i("br")])})),e.missedImports()>0?i("div",{staticClass:"l-warn-text"},[e._v(" "+e._s(e.quantify("preset",e.missedImports()))+" in this list cannot be imported due to the limit on constant count. ")]):e._e()],2)])},R6=[];const M6={name:"ImportTimeStudyConstants",components:{ModalWrapperChoice:WQ},data(){return{constantNames:[],willImport:[]}},computed:{presets:()=>player.timestudy.presets.filter((e=>""!==e.studies)),names(){return this.presets.map(((e,t)=>`TSPreset${t+1}__${e.name.replaceAll(/(?:(?![0-9A-Z_a-z])[\s\S])/g,"_")}`))}},methods:{update(){this.constantNames=[...player.reality.automator.constantSortOrder],this.updateImportStatus()},importConstants(){for(let e=0;e0?(this.willImport.push(!0),e--):this.willImport.push(!1)},missedImports(){return this.willImport.countWhere((e=>!e))},shortenString(e){return e.length<55?e:`${e.substring(0,12)}...${e.substring(e.length-40,e.length)}`}}},I6=M6;var x6=(0,X.Z)(I6,D6,R6,!1,null,"4552a040",null);const P6=x6.exports;var G6=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-information-modal c-information-modal"},[i("ModalCloseButton",{on:{click:e.emitClose}}),e._m(0),e._m(1),i("div",{staticClass:"l-socials"},[i("InformationModalButton",{attrs:{name:"Redemption GitHub repository",icon:"fa-brands fa-github",link:"https://github.com/toilet45/ADRedemption"}}),i("InformationModalButton",{attrs:{name:"r/AntimatterDimensions",icon:"fa-brands fa-reddit-alien",link:"https://www.reddit.com/r/AntimatterDimensions/"}}),i("InformationModalButton",{attrs:{name:"Antimatter Dimensions Redemption: Discord Server",icon:"fa-brands fa-discord",link:"https://discord.gg/3RuXAz7rwe"}}),i("InformationModalButton",{attrs:{name:"Vanilla Antimatter Dimensions Discord Server",icon:"fa-brands fa-discord",link:"https://discord.gg/ST9NaXa"}}),i("InformationModalButton",{attrs:{name:"Antimatter Dimensions on Google Play",icon:"fa-brands fa-google-play",link:"https://play.google.com/store/apps/details?id=kajfosz.antimatterdimensions"}}),i("InformationModalButton",{attrs:{name:"Antimatter Dimensions on Steam",icon:"fa-brands fa-steam",link:"https://store.steampowered.com/app/1399720/Antimatter_Dimensions/"}}),i("InformationModalButton",{attrs:{name:"Credits",icon:"fa-solid fa-users","show-modal":"credits"}}),i("InformationModalButton",{attrs:{name:"Game Changelog",icon:"fa-solid fa-file-lines","show-modal":"changelog"}})],1)],1)},U6=[function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-h2p-header"},[i("div",{staticClass:"c-h2p-title"},[e._v(" About the game ")])])},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-info-body"},[e._v(" Antimatter Dimensions is an Idle Incremental game created by Finnish developer Hevipelle. Originating as a solo project in 2016, it was expanded upon by a large team of developers and testers from then on. "),i("br"),i("br"),e._v(' The game has unfolding gameplay and multiple prestige layers. The "How to Play" button contains useful information about progressing. ')])}],B6=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("span",{staticClass:"c-socials--icon__wrapper",attrs:{"ach-tooltip":e.name}},[e.link?i("a",{staticClass:"c-socials--icon",on:{click:e.openLink}},[i("i",{class:e.icon})]):i("a",{staticClass:"c-socials--icon",on:{click:e.openAssociatedModal}},[i("i",{class:e.icon})])])},N6=[];const O6={name:"InformationModalButton",props:{name:{type:String,required:!0},icon:{type:String,required:!0},link:{type:String,required:!1,default:null},showModal:{type:String,required:!1,default:null}},methods:{openAssociatedModal(){Modal[this.showModal].show()},openLink(){$l(this.link)}}},L6=O6;var F6=(0,X.Z)(L6,B6,N6,!1,null,"01811230",null);const $6=F6.exports,H6={name:"InformationModal",components:{ModalCloseButton:Ij,InformationModalButton:$6}},q6=H6;var V6=(0,X.Z)(q6,G6,U6,!1,null,"fc435f5e",null);const Y6=V6.exports;var W6=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperOptions",{scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Save Selection ")]},proxy:!0}])},e._l(3,(function(e){return i("LoadGameEntry",{key:e,staticClass:"c-entry-border",attrs:{"save-id":e-1}})})),1)},j6=[],X6=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-modal-options__save-record"},[i("h3",[e._v("Save #"+e._s(e.saveId+1)+":"),e.isSelected?i("span",[e._v(" (selected)")]):e._e()]),e.fileName?i("span",[e._v("File name: "+e._s(e.fileName))]):e._e(),i("span",[e._v("Antimatter: "+e._s(e.formatAntimatter(e.antimatter)))]),i("PrimaryButton",{staticClass:"o-primary-btn--width-medium",on:{click:e.load}},[e._v(" Load ")])],1)},z6=[];const K6={name:"LoadGameEntry",components:{PrimaryButton:Vs},props:{saveId:{type:Number,required:!0}},data(){const e=GameStorage.saves[this.saveId];return{antimatter:new Decimal(e?e.antimatter||e.money:10),fileName:e?e.options.saveFileName:""}},computed:{isSelected(){return GameStorage.currentSlot===this.saveId}},methods:{load(){GameStorage.loadSlot(this.saveId)},formatAntimatter(e){return formatPostBreak(e,2,1)},update(){this.isSelected&&this.antimatter.copyFrom(Currency.antimatter)}}},Z6=K6;var Q6=(0,X.Z)(Z6,X6,z6,!1,null,null,null);const J6=Q6.exports,e9={name:"LoadGameModal",components:{ModalWrapperOptions:F1,LoadGameEntry:J6}},t9=e9;var i9=(0,X.Z)(t9,W6,j6,!1,null,"411bb7ce",null);const a9=i9.exports;var n9=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Modifying Glyph RNG Seed ")]},proxy:!0}])},[i("div",[e._v(" All Glyph options beyond the first Reality for an entire playthrough are randomly determined from the very beginning, based on the value of an initial seed number. The role of this seed is that it chooses a single, "),i("i",[e._v("particular")]),e._v(" set of Glyph options for your playthrough. If you or anyone else chooses the same seed in a different run, you will get the same options for Glyphs. "),i("br"),i("br"),e._v(" You can switch between these three options any point before you generate your first Glyph. "),i("br"),e._v(" Current Setting: "),i("b",[e._v(e._s(e.seedText))]),i("br"),i("br"),i("PrimaryButton",{class:e.buttonClass(e.choiceEnum.FIXED),on:{click:function(t){return e.setMode(e.choiceEnum.FIXED)}}},[e._v(" Official Preset Seed ")]),i("br"),e._v(" This is the default option which chooses the seed "),i("b",[e._v(e._s(e.officialSeed))]),e._v(". Anyone who chooses to not modify the seed at all will get these Glyph options. "),i("br"),i("br"),i("PrimaryButton",{class:e.buttonClass(e.choiceEnum.RANDOM),on:{click:function(t){return e.setMode(e.choiceEnum.RANDOM)}}},[e._v(" Randomized Seed ")]),i("br"),e._v(" This selects a completely randomized seed value, producing Glyph options which are very likely to be different from anyone else's playthrough unless they intentionally choose the same value. "),i("br"),i("br"),i("PrimaryButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:0===e.seedValue?"Input seed cannot be zero!":"",expression:"seedValue === 0 ? 'Input seed cannot be zero!' : ''"}],class:e.buttonClass(e.choiceEnum.PLAYER),on:{click:function(t){return e.setMode(e.choiceEnum.PLAYER,e.seedValue)}}},[e._v(" Player-selected Seed: ")]),i("input",{directives:[{name:"model",rawName:"v-model",value:e.inputSeed,expression:"inputSeed"}],ref:"inputSeed",staticClass:"c-modal-input",attrs:{type:"text"},domProps:{value:e.inputSeed},on:{input:[function(t){t.target.composing||(e.inputSeed=t.target.value)},function(t){return e.handleSeedInput()}]}}),i("br"),e._v(" This option sets your seed to the value you type into the text box. "),i("br"),0!==e.seedValue?i("span",[e._v(" Your current input will be "+e._s(e.convertedInput?"converted to":"used as")+" the number "),i("b",[e._v(e._s(e.seedValue))]),e._v(". ")]):i("span",[e._v(" Your current input "+e._s(e.convertedInput?"converts to":"is equal to")+" "),i("b",[e._v("0")]),e._v("; the seed will default to Official Preset. ")]),i("br"),e._v(" For technical reasons, this value must be must be non-zero to be accepted. ")],1)])},s9=[];const r9={name:"ModifySeedModal",components:{ModalWrapper:Uj,PrimaryButton:Vs},data(){return{mode:0,inputSeed:"",seedText:"",convertedInput:!1,seedValue:0}},computed:{choiceEnum:()=>SPEEDRUN_SEED_STATE,officialSeed:()=>Speedrun.officialFixedSeed},created(){this.seedValue=player.speedrun.initialSeed,this.inputSeed=`${player.speedrun.initialSeed}`,this.convertedInput=!1},methods:{update(){this.mode=player.speedrun.seedSelection,this.seedText=Speedrun.seedModeText()},handleSeedInput(){if(this.inputSeed.match(/^\x2D?[0-9]+$/g)){const e=Number(this.inputSeed);this.seedValue=Math.abs(e)>9e15?this.hashStringToSeed(this.inputSeed):Number(this.inputSeed)}else this.seedValue=this.hashStringToSeed(this.inputSeed);this.convertedInput=this.seedValue!==Number(this.inputSeed),0===this.seedValue?this.setMode(this.choiceEnum.FIXED):this.setMode(this.choiceEnum.PLAYER,this.seedValue)},setMode(e,t){e===this.choiceEnum.PLAYER&&0===this.seedValue||Speedrun.modifySeed(e,parseInt(t,10))},buttonClass(e){return{"o-primary-btn--subtab-option":!0,"o-selected":e===this.mode}},hashStringToSeed(e){const t=17977308;let i=3735928559^t,a=1103547991^t;for(let n,s=0;s>>16,2246822507)^Math.imul(a^a>>>13,3266489909),a=Math.imul(a^a>>>16,2246822507)^Math.imul(i^i>>>13,3266489909),4294967296*(2097151&a)+(i>>>0)}}},o9=r9;var l9=(0,X.Z)(o9,n9,s9,!1,null,"526c51fe",null);const c9=l9.exports;var u9=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" List of disabled and nerfed effects in Doomed ")]},proxy:!0}])},[i("div",{staticClass:"pelle-effects-container"},e._l(e.nerfs,(function(t,a){return i("p",{key:a},[e._v(" "+e._s(t)+" ")])})),0),i("PrimaryButton",{staticClass:"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn",on:{click:e.emitClose}},[e._v(" Okay ")])],1)},d9=[];const h9={name:"PelleEffectsModal",components:{PrimaryButton:Vs,ModalWrapper:Uj},computed:{nerfs(){return["Anything unlocked through a Pelle upgrade cannot be unlocked normally","All pre-Doomed IP and EP multipliers are disabled","IP generation based on fastest infinity speed is disabled","All pre-Doomed Replicanti speed multipliers are disabled",`Replicanti slows down more drastically above ${format(Number.MAX_VALUE,2)}`,"Most Eternity Challenges are harder",`All Galaxies are only ${formatPercents(.5)} as effective`,`Antimatter Dimension multiplier is divided by ${formatInt(10)}`,"Achievement multiplier and many achievement rewards are disabled","All Infinity and Eternity multipliers and generation are disabled","Black Holes are disabled",'Reality Upgrade "Temporal Transcendence" is disabled',"All rewards which increase your starting resources except Achievement 21 are disabled","All rewards which prevent resources from being reset are disabled","Perk rewards which reduce unlock costs have been disabled, excluding the ECR group","Automatic Infinity and Eternity Challenges are disabled","All Dimension and pre-Infinity Autobuyers are disabled until reacquired through Pelle","The Time Theorem Autobuyer is disabled","All Automation related to Time Dilation or later is disabled","Eternity Upgrade to Time Dimensions based on days played is based on this Armageddon time",`All pre-Doomed Dilated Time multipliers are disabled except the ${formatX(2)} buyable`,"All Tachyon Particle multipliers are disabled","All pre-Doomed Time Theorem generation effects are disabled except the Dilation upgrade","Glyph equipping is disabled until reacquired",`Glyph levels are lowered and rarity is set to ${formatPercents(0)}`,"Effects from Glyph Sacrifice, Alteration, and Alchemy are all disabled","You cannot enter any other Celestial Realities","Music Glyphs cannot be bought","All rewards from Effarig are disabled","All features related to storing time are disabled","All rewards from V are disabled",`The Teresa Level ${formatInt(1)} effect from Ra is disabled`,"Infinity Upgrades cannot be charged","Triad Studies and Space Theorems are disabled","Imaginary Upgrades are disabled excluding those relating to DMD's and Celestial unlocks","Continuum and Singularity rewards are disabled"]}}},m9=h9;var p9=(0,X.Z)(m9,u9,d9,!1,null,"21d4331f",null);const y9=p9.exports;var f9=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Reality Glyph Creation ")]},proxy:!0}])},[i("div",{staticClass:"c-reality-glyph-creation"},[this.mm8?i("div",[e._v(" Create a level "+e._s(e.formatInt(e.realityGlyphLevel))+" Reality Glyph. Rarity will always be "+e._s(e.formatPercents(1))+" and level scales on your current Reality Resource amount (which is all consumed). All other Alchemy Resources will be unaffected. Reality Glyphs have unique effects, some of which are only available with higher level Glyphs. Reality Glyphs can also be sacrificed to increase all Memory Chunk gain. Like Effarig Glyphs, you cannot equip more than two at the same time. ")]):i("div",[e._v(" Create a level "+e._s(e.formatInt(e.realityGlyphLevel))+" Reality Glyph. Rarity will always be "+e._s(e.formatPercents(1))+" and level scales on your current Reality Resource amount (which is all consumed). All other Alchemy Resources will be unaffected. Reality Glyphs have unique effects, some of which are only available with higher level Glyphs. Reality Glyphs can also be sacrificed to increase all Memory Chunk gain. Like Effarig Glyphs, you cannot equip more than one at the same time. ")]),i("div",{staticClass:"o-available-effects-container"},[i("div",{staticClass:"o-available-effects"},[e._v(" Available Effects: ")]),e._l(e.possibleEffects,(function(t,a){return i("div",{key:a},[e._v(" "+e._s(e.formatGlyphEffect(t))+" ")])}))],2),e.isDoomed?i("PrimaryButton",{attrs:{enabled:!1}},[e._v(" You cannot create Reality Glyphs while Doomed ")]):0!==e.realityGlyphLevel?i("PrimaryButton",{on:{click:e.createRealityGlyph}},[e._v(" Create a Reality Glyph! ")]):i("PrimaryButton",{attrs:{enabled:!1}},[e._v(" Reality Glyph level must be higher than "+e._s(e.formatInt(0))+" ")])],1)])},g9=[];const v9={name:"RealityGlyphCreationModal",components:{ModalWrapper:Uj,PrimaryButton:Vs},data(){return{isDoomed:!1,realityGlyphLevel:0,possibleEffects:[],mm8:!1}},methods:{update(){this.mm8=hK.five.isReached,this.isDoomed=Pelle.isDoomed,this.realityGlyphLevel=AlchemyResource.reality.effectValue;const e=GlyphEffects.all.filter((e=>e.glyphTypes.includes("reality"))).sort(((e,t)=>e.bitmaskIndex-t.bitmaskIndex)),t=e.map((e=>e.bitmaskIndex)).min();this.possibleEffects=e.map((e=>[realityGlyphEffectLevelThresholds[e.bitmaskIndex-t],e.id]))},createRealityGlyph(){0!==GameCache.glyphInventorySpace.value?(Glyphs.addToInventory(GlyphGenerator.realityGlyph(this.realityGlyphLevel)),AlchemyResource.reality.amount=0,player.reality.glyphs.createdRealityGlyph=!0,this.emitClose()):Modal.message.show("No available inventory space; Sacrifice some Glyphs to free up space.",{closeEvent:GAME_EVENT.GLYPHS_CHANGED})},formatGlyphEffect(e){if(this.realityGlyphLevelno studies
:","tree-status":e.importedTree}}),!e.deleting&&e.combinedTree.hasInfo?i("StudyTreeInfo",{attrs:{"header-text":"Status after loading with current tree:","tree-status":e.combinedTree}}):e._e()]:e._e(),e.deleting||e.inputIsValidTree||!e.hasInput?e._e():i("div",[e._v(" Not a valid tree ")])],2),i("div",{staticClass:"c-study-preview"},[i("StudyStringPreview",{attrs:{"show-preview":e.inputIsValidTree,"new-studies":!e.isImporting||e.canEternity&&e.respecAndLoad?e.importedTree.newStudiesArray:e.combinedTree.newStudiesArray,"disregard-current-studies":!e.isImporting||e.canEternity&&e.respecAndLoad}})],1)]),!e.isImporting&&e.inputIsValidTree?i("div",[i("br"),e.deleting?e._e():i("PrimaryButton",{directives:[{name:"tooltip",rawName:"v-tooltip",value:"This will format the study preset text, for example, changing 'a,b,c|d' to 'a, b, c | d'.",expression:"'This will format the study preset text, for example, changing \\'a,b,c|d\\' to \\'a, b, c | d\\'.'"}],on:{click:e.convertInputShorthands}},[e._v(" Format Preset Text ")])],1):e._e(),e.isImporting?i("span",[i("br"),i("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.canEternity?"":"You are currently unable to eternity, so this will only do a normal load.",expression:"canEternity ? '' : 'You are currently unable to eternity, so this will only do a normal load.'"}],staticClass:"c-modal__confirmation-toggle",on:{click:function(t){e.respecAndLoad=!e.respecAndLoad}}},[i("div",{class:{"c-modal__confirmation-toggle__checkbox":!0,"c-modal__confirmation-toggle__checkbox--active":e.respecAndLoad}},[e.respecAndLoad?i("span",{staticClass:"fas fa-check"}):e._e()]),i("span",{staticClass:"c-modal__confirmation-toggle__text"},[e._v(" Also respec tree and eternity "),e.canEternity?e._e():i("span",{staticClass:"c-modal__confirmation-toggle__warning"},[e._v(" ! ")])])])]):e._e()])},d7=[],h7=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-modal-import-tree__tree-info-line"},[0===e.tree.timeTheorems&&0===e.tree.spaceTheorems?i("div",[i("i",[e._v("Importing this "+e._s(e.importDestString)+" will not purchase any new Time Studies.")])]):i("div",[e._v(" Importing "+e._s(e.importDestString)+" will purchase: "),i("br"),e._v(" "+e._s(e.tree.newStudies)+" (Cost: "+e._s(e.formatTheoremCost(e.tree.timeTheorems,e.tree.spaceTheorems))+") ")]),i("br")])},m7=[];const p7={name:"StudyStringLine",props:{tree:{type:Object,required:!0},intoEmpty:{type:Boolean,required:!0}},computed:{importDestString(){return this.intoEmpty?"into an empty Tree":"with your current Tree"}},methods:{formatTheoremCost(e,t){const i=`${formatWithCommas(e)} TT`,a=`${formatWithCommas(t)} ST`;return 0===t?i:`${i} + ${a}`}}},y7=p7;var f7=(0,X.Z)(y7,h7,m7,!1,null,null,null);const g7=f7.exports;var v7=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"l-study-string-preview__tree--wrapper"},[e.showPreview?i("div",{staticClass:"l-time-study-tree l-study-string-preview__tree",style:e.treeStyleObject},[e._l(e.studies,(function(t){return i("PseudoTimeStudyButton",{key:t.study.type.toString()+t.study.id.toString(),attrs:{setup:t,"force-is-bought":e.getStudyForceBoughtState(e.studyString(t.study)),"is-new-from-import":!e.disregardCurrentStudies&&e.newStudies.includes(e.studyString(t.study))}})})),i("svg",{staticClass:"l-time-study-connection",style:e.treeStyleObject},e._l(e.connections,(function(t,a){return i("PseudoTimeStudyConnection",{key:"connection"+a,attrs:{"force-is-bought":e.getConnectionForceBoughtState(t),setup:t}})})),1)],2):i("span",{staticClass:"c-unavailable-warning"},[e._v(" Preview Unavailable ")])])},b7=[],E7=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("button",{class:[e.classObject,e.studyClass],style:e.styleObject},[e._v(" "+e._s(e.studyString)+" ")])},T7=[];const w7={name:"PseudoTimeStudyButton",props:{setup:{type:Object,required:!0},forceIsBought:{type:Number,default:1},isNewFromImport:{type:Boolean,default:!1}},data(){return{isUseless:!1,doomedRealityStudy:!1,isBought:!1}},computed:{study(){return this.setup.study},styleObject(){return{top:`${this.setup.top}rem`,left:`${this.setup.left}rem`}},classObject(){return{"o-pseudo-time-study":!0,"l-time-study":!0,"c-pelle-useless":this.isUseless,"c-pelle-useless--bought":this.isUseless&&this.isBought,"c-pelle-useless--unavailable":this.isUseless&&!this.isBought,"o-pseudo-time-study--small":this.setup.isSmall,"o-time-study--unavailable":!this.isBought&&!this.isUseless,"o-time-study--bought":this.isBought&&!this.isUseless,"o-time-study--new-import":this.isNewFromImport&&!this.isBought}},pathClass(){switch(this.study.type){case TIME_STUDY_TYPE.NORMAL:switch(this.setup.path){case TIME_STUDY_PATH.ANTIMATTER_DIM:return"o-time-study-antimatter-dim";case TIME_STUDY_PATH.INFINITY_DIM:return"o-time-study-infinity-dim";case TIME_STUDY_PATH.TIME_DIM:return"o-time-study-time-dim";case TIME_STUDY_PATH.ACTIVE:return"o-time-study-active";case TIME_STUDY_PATH.PASSIVE:return"o-time-study-passive";case TIME_STUDY_PATH.IDLE:return"o-time-study-idle";case TIME_STUDY_PATH.LIGHT:return"o-time-study-light";case TIME_STUDY_PATH.DARK:return"o-time-study-dark";default:return"o-time-study-normal"}case TIME_STUDY_TYPE.ETERNITY_CHALLENGE:return"o-time-study-eternity-challenge";case TIME_STUDY_TYPE.DILATION:return 6===this.study.id?"o-time-study-reality":"o-time-study-dilation";case TIME_STUDY_TYPE.TRIAD:return"o-time-study-triad"}return""},studyClass(){return this.isUseless?"":`${this.pathClass}--${this.isBought?"bought":"unavailable"}`},studyString(){switch(this.study.type){case TIME_STUDY_TYPE.NORMAL:case TIME_STUDY_TYPE.TRIAD:return`${this.study.id}`;case TIME_STUDY_TYPE.ETERNITY_CHALLENGE:return`EC${this.study.id}`}return""}},methods:{update(){const e=this.study;this.isUseless=Pelle.uselessTimeStudies.includes(this.study.id)&&Pelle.isDoomed,this.isBought=x7.getState(this.forceIsBought,e.isBought),this.doomedRealityStudy=e.type===TIME_STUDY_TYPE.DILATION&&6===e.id&&Pelle.isDoomed}}},k7=w7;var C7=(0,X.Z)(k7,E7,T7,!1,null,"10ee1de0",null);const A7=C7.exports;var _7=function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isOverridden?e._e():i("line",{class:e.classObject,attrs:{x1:e.percents(e.setup.x1),y1:e.percents(e.setup.y1),x2:e.percents(e.setup.x2),y2:e.percents(e.setup.y2)}})},S7=[];const D7={name:"PseudoTimeStudyConnection",props:{setup:{type:Object,required:!0},forceIsBought:{type:Number,default:1}},data(){return{isOverridden:!1,isBought:!1}},computed:{classObject(){const e={"o-time-study-connection":!0,"o-time-study-connection--bought":this.isBought};let t;const i=this.setup.connection,a=i.from,n=i.to;function s(e){switch(e.path){case TIME_STUDY_PATH.ANTIMATTER_DIM:return"o-time-study-connection--antimatter-dim";case TIME_STUDY_PATH.INFINITY_DIM:return"o-time-study-connection--infinity-dim";case TIME_STUDY_PATH.TIME_DIM:return"o-time-study-connection--time-dim";case TIME_STUDY_PATH.ACTIVE:return"o-time-study-connection--active";case TIME_STUDY_PATH.PASSIVE:return"o-time-study-connection--passive";case TIME_STUDY_PATH.IDLE:return"o-time-study-connection--idle";default:return}}switch(n.type){case TIME_STUDY_TYPE.NORMAL:t=s(n)||s(a);break;case TIME_STUDY_TYPE.ETERNITY_CHALLENGE:t="o-time-study-connection--eternity-challenge";break;case TIME_STUDY_TYPE.DILATION:t="o-time-study-connection--dilation";break}return void 0!==t&&(e[t]=!0),e}},methods:{update(){this.isOverridden=this.setup.connection.isOverridden,this.isBought=x7.getState(this.forceIsBought,this.setup.isBought)},percents(e){return 100*e+"%"}}},R7=D7;var M7=(0,X.Z)(R7,_7,S7,!1,null,"6dda8e60",null);const I7=M7.exports,x7={notBought:0,unspecified:1,bought:2,getState(e,t){switch(e){case this.notBought:return!1;case this.unspecified:return t;case this.bought:return!0}return t}},P7={name:"TimeStudiesTab",components:{PseudoTimeStudyButton:A7,PseudoTimeStudyConnection:I7},props:{disregardCurrentStudies:{type:Boolean,default:!1},newStudies:{required:!0,validator:e=>Array.isArray(e)||void 0===e},showPreview:{type:Boolean,default:!0}},data(){return{layoutType:JY.NORMAL,vLevel:0,renderedStudyCount:0,isEnslaved:!1,delayTimer:0}},computed:{layout(){return QY.create(this.layoutType,.15)},studies(){return this.layout.studies},connections(){return this.layout.connections},treeStyleObject(){return{width:`${this.layout.width}rem`,height:`${this.layout.height}rem`}},respecClassObject(){return{"o-primary-btn--subtab-option":!0,"o-primary-btn--respec-active":this.respec}}},watch:{vLevel(){this.$recompute("layout")}},methods:{update(){this.layoutType=JY.current,this.vLevel=Ra.pets.v.level,this.isEnslaved=Enslaved.isRunning||Date.now()-this.delayTimer<1e3},studyComponent(e){switch(e.type){case TIME_STUDY_TYPE.NORMAL:return NormalTimeStudy;case TIME_STUDY_TYPE.ETERNITY_CHALLENGE:return ECTimeStudy;case TIME_STUDY_TYPE.DILATION:return DilationTimeStudy;case TIME_STUDY_TYPE.TRIAD:return TriadTimeStudy}throw"Unknown Time Study type"},studyString(e){switch(e.type){case TIME_STUDY_TYPE.NORMAL:case TIME_STUDY_TYPE.TRIAD:return`${e.id}`;case TIME_STUDY_TYPE.ETERNITY_CHALLENGE:return`EC${e.id}`}return"Dilation Study"},getStudyForceBoughtState(e){return this.disregardCurrentStudies?this.newStudies.includes(e)?x7.bought:x7.notBought:x7.unspecified},getConnectionForceBoughtState(e){return this.disregardCurrentStudies?this.newStudies.includes(this.studyString(e.connection.to))&&this.newStudies.includes(this.studyString(e.connection.from))?x7.bought:x7.notBought:x7.unspecified}}},G7=P7;var U7=(0,X.Z)(G7,v7,b7,!1,null,"09d9af6c",null);const B7=U7.exports;var N7=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-tree-info"},[i("span",{staticClass:"l-tree-info-header",domProps:{innerHTML:e._s(e.headerText)}}),e.treeStatus.firstPaths?i("div",{staticClass:"l-modal-import-tree__tree-info-line"},[e._v(" Dimension Split: "+e._s(e.treeStatus.firstPaths)+" ")]):e._e(),e.treeStatus.secondPaths?i("div",{staticClass:"l-modal-import-tree__tree-info-line"},[e._v(" Pace Split: "+e._s(e.treeStatus.secondPaths)+" ")]):e._e(),e.treeStatus.ec>0?i("div",{staticClass:"l-modal-import-tree__tree-info-line"},[e._v(" Eternity Challenge: "+e._s(e.treeStatus.ec)+" "+e._s(e.treeStatus.startEC?"(will start)":"")+" ")]):e._e()])},O7=[];const L7={name:"StudyTreeInfo",props:{headerText:{type:String,required:!0},treeStatus:{type:Object,required:!0}}},F7=L7;var $7=(0,X.Z)(F7,N7,O7,!1,null,"493fb126",null);const H7=$7.exports;let q7="";const V7={name:"StudyStringModal",components:{ModalWrapperChoice:WQ,StudyStringLine:g7,PrimaryButton:Vs,StudyStringPreview:B7,StudyTreeInfo:H7},props:{id:{type:Number,required:!0},deleting:{type:Boolean,required:!1,default:!1}},data(){return{input:"",name:"",respecAndLoad:!1,canEternity:!1}},computed:{isImporting(){return-1===this.id},importedTree(){if(!this.inputIsValidTree)return{};const e=new TimeStudyTree(this.truncatedInput),t=e.purchasedStudies.map((e=>this.studyString(e)));return{timeTheorems:e.spentTheorems[0],spaceTheorems:e.spentTheorems[1],newStudies:makeEnumeration(t),newStudiesArray:t,invalidStudies:e.invalidStudies,firstPaths:makeEnumeration(e.dimensionPaths),secondPaths:makeEnumeration(e.pacePaths),ec:e.ec,startEC:e.startEC,hasInfo:makeEnumeration(e.dimensionPaths)||e.ec>0}},combinedTree(){if(!this.inputIsValidTree)return{};const e=GameCache.currentStudyTree.value,t=this.combinedTreeObject,i=t.purchasedStudies.filter((t=>!e.purchasedStudies.includes(t))).map((e=>this.studyString(e))),a=TimeStudyTree.getECFromString(this.truncatedInput),n=t.startEC,s=[0,a].includes(player.challenge.eternity.current),r=t.ec!==a;return{timeTheorems:t.spentTheorems[0]-e.spentTheorems[0],spaceTheorems:t.spentTheorems[1]-e.spentTheorems[1],newStudies:makeEnumeration(i),newStudiesArray:i,firstPaths:makeEnumeration(t.dimensionPaths),secondPaths:makeEnumeration(t.pacePaths),ec:t.ec,startEC:n&&s&&!r,hasInfo:makeEnumeration(t.dimensionPaths)||t.ec>0}},combinedTreeObject(){const e=new TimeStudyTree;return e.attemptBuyArray(TimeStudyTree.currentStudies,!1),e.attemptBuyArray(e.parseStudyImport(this.truncatedInput),!0),e},modalTitle(){return this.deleting?`Deleting Study Preset "${this.name}"`:this.isImporting?"Input your tree":`Editing Study Preset "${this.name}"`},invalidMessage(){if(!this.inputIsValidTree||0===this.importedTree.invalidStudies.length)return null;let e=`#${this.truncatedInput}#`;e.length>300&&(e=`${e.slice(0,297)}...`);for(const t of this.importedTree.invalidStudies){const i=`${t}`.match(/(EC)?([0-9]+)/),a=parseInt(i[2],10);switch(i[1]){case"EC":e=e.replaceAll(new RegExp(`\\|(${a})`,"gu"),'|$1');break;default:e=e.replaceAll(new RegExp(`(\\D)(${a})(\\D)`,"gu"),'$1$2$3');break}}return`Your import string has invalid study IDs: ${e.replaceAll("#","").replaceAll(",",", ")}\n

`},truncatedInput(){return TimeStudyTree.truncateInput(this.input)},hasInput(){return""!==this.truncatedInput},inputIsValid(){return this.inputIsValidTree||this.inputIsSecret},inputIsValidTree(){return TimeStudyTree.isValidImportString(this.truncatedInput)},inputIsSecret(){const e=["08b819f253b684773e876df530f95dcb85d2fb052046fa16ec321c65f3330608","bb450c2a3869bae412ed0b4304dc229521fc69f0fdcc95b3b61460aaf5658fc4"];return e.includes((0,Om.sha512_256)(this.input.toLowerCase()))},confirmText(){return this.deleting?"Delete":this.isImporting?"Import":"Save"}},watch:{input(e){q7=e}},created(){const e=player.timestudy.presets[this.id];this.input=e?e.studies:q7,this.name=e?e.name:""},mounted(){this.$refs.input.select()},methods:{update(){this.canEternity=Player.canEternity},confirm(){if(this.deleting)this.deletePreset();else if(this.isImporting){if(this.respecAndLoad&&Player.canEternity){player.respec=!0;const e=new TimeStudyTree(this.truncatedInput);return void animateAndEternity((()=>TimeStudyTree.commitToGameState(e.purchasedStudies,!1,this.combinedTree.startEC)))}this.importTree()}else this.savePreset()},convertInputShorthands(){this.input=TimeStudyTree.formatStudyList(this.input)},importTree(){this.inputIsValid&&(this.inputIsSecret&&SecretAchievement(37).unlock(),q7="",this.emitClose(),TimeStudyTree.commitToGameState(this.combinedTreeObject.purchasedStudies,!1,this.combinedTree.startEC))},savePreset(){this.inputIsValid&&(player.timestudy.presets[this.id].studies=this.input,GameUI.notify.eternity(`Study Tree ${this.name} successfully edited.`),this.emitClose())},deletePreset(){const e=player.timestudy.presets[this.id].name,t=e?`Study preset "${e}"`:"Study preset";player.timestudy.presets[this.id].studies="",player.timestudy.presets[this.id].name="",GameUI.notify.eternity(`${t} deleted from slot ${this.id+1}`)},studyString(e){return e instanceof ECTimeStudyState?`EC${e.id}`:`${e.id}`}}},Y7=V7;var W7=(0,X.Z)(Y7,u7,d7,!1,null,"35f516e0",null);const j7=W7.exports;var X7=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"switchAutomatorMode"},on:{confirm:e.toggleAutomatorMode},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Change Automator to "+e._s(e.otherMode)+" editor ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Change Modes ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" This will stop your current script if it is running! "),e.errorCount?i("div",[i("br"),e._v(" Your script has some errors which may not get converted properly to "+e._s(e.otherMode)+" mode. Continuing on will make the Automator attempt to parse these lines anyway, although some information may get lost or not be converted properly. ")]):e._e(),e.lostBlocks?i("b",[i("br"),e._v(" Warning: Your script also currently has some lines which cannot interpreted as particular commands. These lines will end up being deleted since there is no block they can be converted into. If an error occurs at the start of a loop or IF, this may end up deleting large portions of your script! "),i("span",{staticClass:"l-lost-text"},[e._v(" Changing editor modes right now will cause "+e._s(e.quantifyInt("line",e.lostBlocks))+" of code to be irreversibly lost! ")])]):e._e(),i("br"),i("span",{staticClass:"l-lost-text"},[e._v(" Hiding this confirmation is not recommended, as it may cause parts of scripts to be immediately and irreversibly lost if your script has errors when attempting to switch modes. ")]),i("br"),i("br"),e._v(" Are you sure you want to change to the "+e._s(e.otherMode)+" editor? ")])])},z7=[];const K7={name:"SwitchAutomatorEditorModal",components:{ModalWrapperChoice:WQ},props:{callback:{type:Function,required:!1,default:()=>({})},lostBlocks:{type:Number,required:!1,default:0}},data(){return{errorCount:0,isCurrentlyBlocks:!1}},computed:{currentScriptID:{get(){return this.$viewModel.tabs.reality.automator.editorScriptID},set(e){this.$viewModel.tabs.reality.automator.editorScriptID=e}},otherMode(){return this.isCurrentlyBlocks?"Text":"Block"}},methods:{update(){this.errorCount=AutomatorData.currentErrors().length,this.isCurrentlyBlocks=player.reality.automator.type===AUTOMATOR_TYPE.BLOCK},toggleAutomatorMode(){var e;AutomatorBackend.changeModes(this.currentScriptID),null===(e=this.callback)||void 0===e||e.call(this)}}},Z7=K7;var Q7=(0,X.Z)(Z7,X7,z7,!1,null,"6ca17165",null);const J7=Q7.exports;var eee=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" Visual Changes ")]},proxy:!0},{key:"cancel-text",fn:function(){return[e._v(" Remain ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Swap ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" We noticed that you've loaded an old save; a few visual changes have been made since older versions of the game: "),i("br"),i("br"),i("div",{staticClass:"c-visual-change-list"},e._l(e.listEntries,(function(t,a){return i("div",{key:a,staticClass:"c-visual-change-list-entry"},[i("b",[e._v("•")]),e._v(" "+e._s(t)+" ")])})),0),i("br"),i("br"),e._v(" You can change between the Classic UI which older versions of the game used and the newer Modern UI in the Visual Options tab at any time. Would you like to swap to the Modern UI now? ")])])},tee=[];const iee={name:"UiChoiceModal",components:{ModalWrapperChoice:WQ},computed:{listEntries(){return["Many more game events now have animations. If these impact your performance or gameplay, they can be\n disabled in the Visual Options tab.","New confirmation windows have replaced the default Javascript alert windows. These can be disabled in the\n Gameplay Options tab.","The game now also has a new sleek layout which was designed with more Modern design practices in mind."]}},methods:{handleYesClick(){GameOptions.toggleUI()}}},aee=iee;var nee=(0,X.Z)(aee,eee,tee,!1,null,"369e8fe0",null);const see=nee.exports;var ree=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{option:"glyphUndo"},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" You are about to undo equipping a Glyph ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text c-text-wrapper"},[e._v(" The last equipped Glyph will be removed. Reality will be reset, but some things will be restored to what they were when it was equipped: "),i("br"),i("div",{staticClass:"c-text-wrapper"},[i("br"),e._v("- Antimatter, Infinity Points, and Eternity Points "),i("br"),e._v("- Dilation Upgrades, Tachyon Particles, and Dilated Time "),i("br"),e._v("- Time Theorems and Eternity Challenge completions "),i("br"),e._v("- Time Dimension and Reality unlocks "),i("br"),e._v("- Time in current Infinity/Eternity/Reality "),e.showStoredGameTime?i("span",[i("br"),e._v("- Stored game time")]):e._e()]),i("br"),e._v(" Note that if you invalidate special requirements for certain things (such as the achievement for completing a Reality without producing antimatter), they will remain invalid even after undoing. In those cases, you will need to complete the conditions in a single Reality without using undo. ")])])},oee=[];const lee={name:"UndoGlyphModal",components:{ModalWrapperChoice:WQ},data(){return{showStoredGameTime:!1}},methods:{update(){this.showStoredGameTime=Enslaved.isUnlocked},realityInvalidate(){this.emitClose(),Modal.message.show("Glyph Undo can only undo with a Reality!",{closeEvent:GAME_EVENT.REALITY_RESET_AFTER})},handleYesClick(){this.emitClose(),Glyphs.undo()}}},cee=lee;var uee=(0,X.Z)(cee,ree,oee,!1,null,"070fe22a",null);const dee=uee.exports;var hee=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{on:{confirm:e.disableLock},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" "+e._s(e.upgradeStr)+" Condition Lock ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" Disable Lock ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},[e._v(" Are you sure you wish to "+e._s(e.lockEvent)+"? Doing this right now will cause you to "),i("span",{staticClass:"l-emphasis"},[e._v(" fail the requirement for the "+e._s(e.upgradeStr)+' "'+e._s(e.upgrade.name)+'" ')]),i("span",{attrs:{"ach-tooltip":e.upgrade.requirement}},[i("i",{staticClass:"fas fa-question-circle"})]),i("br"),i("br"),e._v(' Selecting "Cancel" will close this modal with no effect, while selecting "Disable Lock" will disable the requirement check for this upgrade and prevent this message from reappearing unless you turn it back on. '),i("br"),i("br"),e._v(" Neither of these options will perform the action you just attempted, so you will need to try again. ")])])},mee=[];const pee={name:"UpgradeMechanicLockModal",components:{ModalWrapperChoice:WQ},props:{upgrade:{type:Object,required:!0},isImaginary:{type:Boolean,required:!0},specialLockText:{type:String,required:!1,default:null}},computed:{upgradeStr(){return this.isImaginary?"Imaginary Upgrade":"Reality Upgrade"},lockEvent(){var e;return null!==(e=this.specialLockText)&&void 0!==e?e:this.upgrade.lockEvent}},methods:{disableLock(){this.upgrade.setMechanicLock(!1)}}},yee=pee;var fee=(0,X.Z)(yee,hee,mee,!1,null,"576557b4",null);const gee=fee.exports;var vee=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapperChoice",{attrs:{"show-cancel":!1},on:{confirm:e.handleYesClick},scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" You are Warping Reality ")]},proxy:!0},{key:"confirm-text",fn:function(){return[e._v(" WARP!! ")]},proxy:!0}])},[i("div",{staticClass:"c-modal-message__text"},e._l(e.message,(function(t,a){return i("span",{key:a},[e._v(" "+e._s(t)+" "),i("br")])})),0)])},bee=[];const Eee={name:"WarpRealityModal",components:{ModalWrapperChoice:WQ},computed:{message(){const e=format(Decimal.MAX_VALUE,2,2);return`Warping will allow you to gain antimatter past ${e}\n However, many mechanics will be nerfed after ${e} antimatter.\n You will gain additional Multiversal Remains based on antimatter produced over ${e}.`.split("\n")}},methods:{handleYesClick(){warpReality()}}},Tee=Eee;var wee=(0,X.Z)(Tee,vee,bee,!1,null,null,null);const kee=wee.exports;var Cee=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{scopedSlots:e._u([{key:"header",fn:function(){return[e._v(" List of full nerf effects of specific Hostilities ")]},proxy:!0}])},[i("div",{staticClass:"pelle-effects-container"},e._l(e.nerfs,(function(t,a){return i("p",{key:a},[e._v(" "+e._s(t)+" ")])})),0),i("PrimaryButton",{staticClass:"o-primary-btn--width-medium c-modal-message__okay-btn c-modal__confirm-btn",on:{click:e.emitClose}},[e._v(" Okay ")])],1)},Aee=[];const _ee={name:"CorruptionFullEffectsModal",components:{PrimaryButton:Vs,ModalWrapper:Uj},data(){return{corruptions:[0,0,0,0,0,0,0,0,0,0],corruptionInfos:ye}},computed:{nerfs(){return["Triad study 305, 311, 312, 313 are severely nerfed"," ","Prestige Limits:","All prestige currencies recieve an exponent"," ","Dimensional Limits:","All dimensions recieve an exponent"," ","Time Compression:","Game time recieves an exponent, then a divisor",`Begin from level 4, IP gain recieves an exponent: ^${format(this.corruptionInfos.timeCompression.hiddenFour[this.corruptions[2]],3,3)}`,`Begin from level 8, AD recieves an exponent: ^${format(this.corruptionInfos.timeCompression.hiddenEight[this.corruptions[2]],3,3)}`," ","Galactic Weakness:","Galaxies scale faster and less effective",`Begin from level 3, Dimboosts recieve a hardcap: ${format(this.corruptionInfos.galWeak.hiddenThree[this.corruptions[3]],3)}`,`Begin from level 6, Gamespeed recieves an exponent: ^${format(this.corruptionInfos.galWeak.hiddenSix[this.corruptions[3]],3,3)}`,`Begin from level 8, Infinity power conversion recieves a divisor: /${formatInt(this.corruptionInfos.galWeak.hiddenEight[this.corruptions[3]])}`," ","Complex Glyphs:","Glyph level recieves a power effect","Glyph rarity recieves a power effect",`Begin from level 4, some glyph slots will be forced Cursed glyphs, also forbidding you being Doomed: ${formatInt(this.corruptionInfos.compGlyphs.hiddenFour[this.corruptions[4]])} slots`,"Begin from level 7, Alchemy is disabled"," ","Tick Extension:","Tickspeed recieves an exponent","Time shards are less efficient","Begin from level 6, Triads cannot be purchased"," ","Atom Dilution:","AM gain exponent recieves an exponent"," ","Theory of Dilation:","DT and TP gain a power effect","DT gains a divisor",`Begin from level 5, TT costs scale faster: ${formatX(this.corruptionInfos.toD.hiddenFive[this.corruptions[7]],3,3)}`,`Begin from level 8, Dimension cost scaling gains an exponent: ^${format(this.corruptionInfos.toD.hiddenEight[this.corruptions[7]],3,3)}`," ","Replicative Singularities:","Replicanti gains a power exponent","Singularity gains a power exponent","DM gain gains a power exponent",`Prestige gain recieves an exponent: ^${format(this.corruptionInfos.repSing.presGain[this.corruptions[8]],3,3)}`,"Begin from level 5, some rebuyable upgrades below Celestial level are disabled"," ","Study of Forever:","TT cost is more expensive","TT generation from glyphs is disabled","TD gain an exponent","Begin from level 4, Triad studies are disabled","Begin from level 8, Charged upgrades are disabled and so are EC rewards"]}},methods:{update(){this.corruptions=[...CorruptionData.corruptions]}}},See=_ee;var Dee=(0,X.Z)(See,Cee,Aee,!1,null,"27faf645",null);const Ree=Dee.exports;var Mee=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("ModalWrapper",{staticClass:"c-modal-s12-games"},[i("div",{staticClass:"c-modal__title"},[e._v(" Games ")]),i("S12GameEntries"),i("div",{staticClass:"c-modal-s12-games__magnified-display"},[-1!==e.S12Games.selected?[i("img",{staticClass:"c-modal-s12-games__magnified-display__img",attrs:{src:"images/s12/"+e.S12Games.entries[e.S12Games.selected].image}}),i("b",{staticClass:"c-modal-s12-games__magnified-display__text"},[e._v(" "+e._s(e.S12Games.entries[e.S12Games.selected].name)+" ")])]:e._e()],2)],1)},Iee=[],xee=function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"c-s12-games-container"},e._l(e.S12Games.entries,(function(t,a){return i("div",{key:t.name,staticClass:"c-s12-game",class:{"c-s12-game--selected":e.S12Games.selected===a},on:{click:function(t){return e.handleClick(a)}}},[i("div",{staticClass:"c-s12-game__inner"},[i("img",{staticClass:"c-s12-game__img",attrs:{src:"images/s12/"+t.image}}),i("div",{staticClass:"c-s12-game__text"},[e._v(" "+e._s(t.name)+" ")])])])})),0)},Pee=[];const Gee={entries:[{name:"FE000000",link:"https://dan-simon.github.io/misc/fe000000/",image:"game--hex-game.png"},{name:"Trimps",link:"https://trimps.github.io/",image:"game--trimps.png"},{name:"Mine Defense",link:"http://scholtek.com/minedefense",image:"game--mine-defense.png"},{name:"Wizard and Minion Idle",link:"https://www.kongregate.com/games/Oninou/wami",image:"game--wami.png"},{name:"Anti-Idle",link:"https://www.kongregate.com/games/Tukkun/anti-idle-the-game",image:"game--anti-idle.png"},{name:"Synergism",link:"https://pseudo-corp.github.io/SynergismOfficial/",image:"game--synergism.png"},{name:"Universal Paperclips",link:"https://www.decisionproblem.com/paperclips/",image:"game--universal-paperclips.png"},{name:"Monies 2",link:"https://sneekxy.nmtechgroup.com/monies2/",image:"game--monies2.png"},{name:"The First Alkahistorian",link:"https://nagshell.github.io/elemental-inception-incremental/",image:"game--alkahistorian.png"},{name:"Melvor Idle",link:"https://melvoridle.com/",image:"game--melvor-idle.svg"}],selected:-1};let Uee=!1;const Bee={name:"S12Games",data(){return{S12Games:Gee}},mounted(){document.body.addEventListener("click",this.clearSelected)},beforeDestroy(){document.body.removeEventListener("click",this.clearSelected),this.clearSelected()},methods:{clearSelected(){Uee||(Gee.selected=-1)},handleClick(e){Gee.selected!==e?(Gee.selected=e,Uee=!0,setTimeout((()=>Uee=!1),0)):window.open(Gee.entries[e].link)}}},Nee=Bee;var Oee=(0,X.Z)(Nee,xee,Pee,!1,null,"25a74b90",null);const Lee=Oee.exports,Fee={name:"S12GamesModal",components:{ModalWrapper:Uj,S12GameEntries:Lee},data(){return{S12Games:Gee}},methods:{update(){"S12"!==this.$viewModel.theme&&EventHub.dispatch(GAME_EVENT.CLOSE_MODAL)}}},$ee=Fee;var Hee=(0,X.Z)($ee,Mee,Iee,!1,null,"02f6719c",null);const qee=Hee.exports;let Vee=0;class Yee{constructor(e,t=0,i){this._component=e,this._modalConfig={},this._priority=t,this._closeEvent=i}applyCloseListeners(e){const t=[GAME_EVENT.DIMBOOST_AFTER,GAME_EVENT.GALAXY_RESET_AFTER,GAME_EVENT.BIG_CRUNCH_AFTER,GAME_EVENT.ETERNITY_RESET_AFTER,GAME_EVENT.REALITY_RESET_AFTER];let i=!1;for(const a of t)a===e&&(i=!0),i&&EventHub.ui.on(a,(()=>this.removeFromQueue()),this._component);i||EventHub.ui.on(e,(()=>this.removeFromQueue()),this._component)}show(e){if(!GameUI.initialized)return;this._uniqueID=Vee++,this._props=Object.assign({},e||{}),this._closeEvent&&this.applyCloseListeners(this._closeEvent),null!==e&&void 0!==e&&e.closeEvent&&this.applyCloseListeners(e.closeEvent);const t=ui.view.modal.queue;t.unshift(this),Yee.sortModalQueue()}get isOpen(){return ui.view.modal.current===this}get component(){return this._component}get props(){return this._props}get priority(){return this._priority}removeFromQueue(){EventHub.ui.offAll(this._component),ui.view.modal.queue=ui.view.modal.queue.filter((e=>e._uniqueID!==this._uniqueID)),0===ui.view.modal.queue.length?ui.view.modal.current=void 0:ui.view.modal.current=ui.view.modal.queue[0]}static sortModalQueue(){const e=ui.view.modal.queue;e.sort(((e,t)=>t.priority-e.priority));const t=[...new Set(e)];ui.view.modal.queue=t,ui.view.modal.current=t[0]}static hide(){GameUI.initialized&&(ui.view.modal.queue.shift(),0===ui.view.modal.queue.length?ui.view.modal.current=void 0:ui.view.modal.current=ui.view.modal.queue[0],ui.view.modal.cloudConflict=[])}static hideAll(){if(GameUI.initialized){while(ui.view.modal.queue.length)ui.view.modal.queue[0].hide?ui.view.modal.queue[0].hide():Yee.hide();ui.view.modal.current=void 0}}static get isOpen(){return ui.view.modal.current instanceof this}}class Wee extends Yee{show(e){super.show({id:e})}}class jee extends Yee{show(e){super.show({diff:e})}}function Xee(e){var t,i,a,n,s,r,o,l,c,u,d,h,m,p,y,f,g,v,b,E,T;const w={realTimePlayed:0,totalAntimatter:new Decimal(0),infinities:new Decimal(0),eternities:new Decimal(0),realities:0,infinityPoints:new Decimal(0),eternityPoints:new Decimal(0),realityMachines:new Decimal(0),imaginaryMachines:0,dilatedTime:new Decimal(0),bestLevel:0,pelleAM:new Decimal(0),remnants:0,realityShards:new Decimal(0),pelleLore:0,saveName:"",compositeProgress:0};return w.realTimePlayed=null!==(t=null===(i=e.records)||void 0===i?void 0:i.realTimePlayed)&&void 0!==t?t:100*e.totalTimePlayed,w.totalAntimatter.copyFrom(new Decimal(null===(a=e.records)||void 0===a?void 0:a.totalAntimatter)),w.infinities.copyFrom(new Decimal(e.infinities)),w.eternities.copyFrom(new Decimal(e.eternities)),w.realities=null!==(n=e.realities)&&void 0!==n?n:0,w.infinityPoints.copyFrom(new Decimal(e.infinityPoints)),w.eternityPoints.copyFrom(new Decimal(e.eternityPoints)),w.realityMachines.copyFrom(new Decimal(null===(s=e.reality)||void 0===s?void 0:s.realityMachines)),w.imaginaryMachines=null!==(r=null===(o=e.reality)||void 0===o?void 0:o.iMCap)&&void 0!==r?r:0,w.dilatedTime.copyFrom(new Decimal(null!==(l=null===(c=e.records)||void 0===c?void 0:c.thisReality.maxDT)&&void 0!==l?l:null!==(u=null===(d=e.dilation)||void 0===d?void 0:d.dilatedTime)&&void 0!==u?u:0)),w.bestLevel=null!==(h=null===(m=e.records)||void 0===m?void 0:m.bestReality.glyphLevel)&&void 0!==h?h:0,w.pelleAM.copyFrom(new Decimal(null===(p=e.celestials)||void 0===p?void 0:p.pelle.records.totalAntimatter)),w.remnants=null!==(y=null===(f=e.celestials)||void 0===f?void 0:f.pelle.remnants)&&void 0!==y?y:0,w.realityShards.copyFrom(new Decimal(null===(g=e.celestials)||void 0===g?void 0:g.pelle.realityShards)),w.pelleLore=null!==(v=null===(b=e.celestials)||void 0===b?void 0:b.pelle.quoteBits)&&void 0!==v?v:0,w.saveName=null!==(E=null===(T=e.options)||void 0===T?void 0:T.saveFileName)&&void 0!==E?E:"",w.compositeProgress=jm.getCompositeProgress(e),w}Yee.startEternityChallenge=new Wee(EJ),Yee.startInfinityChallenge=new Wee(_J),Yee.startNormalChallenge=new Wee(OJ),Yee.catchup=new jee(K4,-1),Yee.dimensionBoost=new Yee(p0,1,GAME_EVENT.DIMBOOST_AFTER),Yee.antimatterGalaxy=new Yee(VJ,1,GAME_EVENT.GALAXY_RESET_AFTER),Yee.bigCrunch=new Yee(l0,1,GAME_EVENT.BIG_CRUNCH_AFTER),Yee.exitChallenge=new Yee(V0,1,GAME_EVENT.REALITY_RESET_AFTER),Yee.replicantiGalaxy=new Yee(p1,1,GAME_EVENT.ETERNITY_RESET_AFTER),Yee.eternity=new Yee(O0,1,GAME_EVENT.ETERNITY_RESET_AFTER),Yee.enterDilation=new Yee(x0,1,GAME_EVENT.REALITY_RESET_AFTER),Yee.exitDilation=new Yee(K0,1,GAME_EVENT.REALITY_RESET_AFTER),Yee.reality=new Yee(l1,1,GAME_EVENT.REALITY_RESET_AFTER),Yee.resetReality=new Yee(E1,1,GAME_EVENT.REALITY_RESET_AFTER),Yee.celestials=new Yee(_0,1),Yee.hardReset=new Yee(i1,1),Yee.backupWindows=new Yee(p2,1),Yee.enterSpeedrun=new Yee(Z9),Yee.modifySeed=new Yee(c9),Yee.changeName=new Yee(l8),Yee.armageddon=new Yee(KJ,1),Yee.mending=new Yee(_1,1),Yee.confirmationOptions=new Yee(_2),Yee.infoDisplayOptions=new Yee(O3),Yee.awayProgressOptions=new Yee(i2),Yee.glyphDisplayOptions=new Yee(l3),Yee.cosmeticSetChoice=new Yee(O2),Yee.singleGlyphAppearance=new Yee(i5),Yee.hotkeys=new Yee(x3),Yee.newsOptions=new Yee(V3),Yee.animationOptions=new Yee(V1),Yee.hiddenTabs=new Yee(_3),Yee.preferredTree=new Yee(K3),Yee.speedUp=new Yee(l5),Yee.speedUpReport=new Yee(p5),Yee.upgradeLock=new Yee(gee,1),Yee.deleteCompanion=new Yee(E5,1),Yee.glyphDelete=new Yee(_5,1,GAME_EVENT.GLYPHS_CHANGED),Yee.glyphPurge=new Yee(V5,1,GAME_EVENT.GLYPHS_CHANGED),Yee.glyphSacrifice=new Yee(i4,1,GAME_EVENT.GLYPHS_CHANGED),Yee.glyphRefine=new Yee(K5,1,GAME_EVENT.GLYPHS_CHANGED),Yee.deleteAllUnprotectedGlyphs=new Yee(O5,1,GAME_EVENT.GLYPHS_CHANGED),Yee.deleteAllRejectedGlyphs=new Yee(x5,1,GAME_EVENT.GLYPHS_CHANGED),Yee.glyphShowcasePanel=new Yee(K8),Yee.glyphUndo=new Yee(dee,1,GAME_EVENT.REALITY_RESET_AFTER),Yee.glyphReplace=new Yee(S9,1,GAME_EVENT.REALITY_RESET_AFTER),Yee.enslavedHints=new Yee(x8),Yee.realityGlyph=new Yee(T9),Yee.glyphSetSaveDelete=new Yee(O8),Yee.uiChoice=new Yee(see),Yee.h2p=new Yee(i6),Yee.information=new Yee(Y6),Yee.credits=new Yee(E8,1),Yee.changelog=new Yee(i8,1),Yee.awayProgress=new Yee(_4),Yee.loadGame=new Yee(a9),Yee.import=new Yee(S6),Yee.importFilter=new Yee(E6),Yee.importScriptData=new Yee(l6),Yee.automatorScriptDelete=new Yee(_8),Yee.automatorScriptTemplate=new Yee(p4),Yee.switchAutomatorEditorMode=new Yee(J7),Yee.clearAutomatorConstants=new Yee(p8),Yee.importTSConstants=new Yee(P6),Yee.autobuyerEditModal=new Yee(l4),Yee.shop=new Yee(c7),Yee.studyString=new Yee(j7),Yee.singularityMilestones=new Yee(Y9),Yee.pelleEffects=new Yee(y9),Yee.sacrifice=new Yee(L9,1,GAME_EVENT.DIMBOOST_AFTER),Yee.breakInfinity=new Yee(x4,1,GAME_EVENT.ETERNITY_RESET_AFTER),Yee.respecIAP=new Yee(P9),Yee.warpReality=new Yee(kee),Yee.corruptionFullEffects=new Yee(Ree),Yee.s12Games=new Yee(qee),Yee.cloudSaveConflict=new Yee(pJ),Yee.cloudLoadConflict=new Yee(lJ),Yee.cloudInvalidData=new Yee(KQ),Yee.addCloudConflict=function(e,t,i,a,n){Yee.hide(),ui.view.modal.cloudConflict={saveId:e,saveComparison:t,cloud:Xee(i),local:Xee(a),onAccept:n}},Yee.addImportConflict=function(e,t){Yee.hide(),ui.view.modal.cloudConflict={importingSave:Xee(e),currentSave:Xee(t)}},Yee.message=new class extends Yee{show(e,t={},i=0){var a;if(GameUI.initialized){if(void 0===this.currPriority)this.currPriority=i;else if(it.match(/^S[0-9]*/)[0]===e))},this.displayName=function(){return this.isSecret&&this.isAvailable()?player.secretUnlocks.themes.find((t=>t.match(/^S[0-9]*/)[0]===e)).replace(/^S[0-9]*/,""):e},this.set=function(){document.body.classList.remove(...document.body.classList),document.body.classList.add(this.cssClass()),this.isMetro&&document.body.classList.add("s-base--metro"),this.isDark()&&document.body.classList.add("s-base--dark"),this.isAnimated&&player.options.animations.background?document.getElementById("background-animations").style.display="block":document.getElementById("background-animations").style.display="none","Modern"==player.options.UIType?player.options.themeModern=e:player.options.themeClassic=e,ui.view.theme=e,window.getSelection().removeAllRanges(),PerkNetwork.forceNetworkRemake()},this.cssClass=function(){return`t-${this.name.replace(/[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+/g,"-").toLowerCase()}`}};zee.currentName=function(){return"Modern"==player.options.UIType?player.options.themeModern:player.options.themeClassic},zee.current=function(){return Kee.find(zee.currentName())},zee.set=function(e){const t=Kee.find(e);return t.set(),t},zee.secretThemeIndex=function(e){const t=["ef853879b60fa6755d9599fd756c94d112f987c0cd596abf48b08f33af5ff537","078570d37e6ffbf06e079e07c3c7987814e03436d00a17230ef5f24b1cb93290","a3d64c3d1e1749b60b2b3dba10ed5ae9425300e9600ca05bcbafe4df6c69941f","530fac71cc0b151b24d966493a6f4a0817921b37e4d3e593439e624c214ab2b2","cb72e4a679254df5f99110dc7a93924628b916d2e069e3ad206db92068cb0883","c8fac64da08d674123c32c936b14115ab384fe556fd24e431eb184a8dde21137","da3b3c152083f0c70245f104f06331497b97b52ac80edec05e26a33ee704cae7","1bbc0800145e72dfea5bfb218eba824c52510488b3a05ee88feaaa6683322d19","dba8336cd3224649d07952b00045a6ec3c8df277aa8a0a0e3e7c2aaa77f1fbb9","73de8a7f9efa1cbffc80a8effc9891a799127cd204b3a8b023bea8f513ed4753","f3a71114261b4af6517a53f89bf0c6b56bb81b6f0e931d0e0d71249eb196628c","1248689171faaa0abb68279199a8d2eb232dba10d2dacb79a705f680b6862c0e"],i=(0,Om.sha512_256)(e.toUpperCase());return t.indexOf(i)},zee.isSecretTheme=function(e){return-1!==zee.secretThemeIndex(e)},zee.animatedThemeUnlocked=function(){return Kee.all.some((e=>e.isAvailable&&e.isAnimated))},zee.tryUnlock=function(e){const t=zee.secretThemeIndex(e);if(-1===t)return!1;const i=`S${t+1}`,a=i+e.capitalize(),n=player.secretUnlocks.themes.has(a);return player.secretUnlocks.themes.add(a),zee.set(i),SecretAchievement(25).unlock(),n||(GameUI.notify.success(`You have unlocked the ${e.capitalize()} theme!`,5e3),zee.current().isAnimated&&setTimeout(Modal.message.show("This secret theme has animations. If they are giving you performance issues,\n you can turn them off in the Options/Visual tab to reduce lag."),100)),!0},zee.create=function(e,t){const i={isDark:t.dark,isMetro:t.metro,isAnimated:t.animated,isSecret:t.secret};return new zee(e,i)};const Kee={all:[zee.create("Normal",{}),zee.create("Metro",{metro:!0}),zee.create("Dark",{dark:!0}),zee.create("Dark Metro",{dark:!0,metro:!0}),zee.create("Inverted",{}),zee.create("Inverted Metro",{metro:!0}),zee.create("AMOLED",{dark:!0}),zee.create("AMOLED Metro",{dark:!0,metro:!0}),zee.create("S1",{animated:!0,secret:!0}),zee.create("S2",{secret:!0}),zee.create("S3",{secret:!0}),zee.create("S4",{secret:!0}),zee.create("S5",{secret:!0}),zee.create("S6",{dark:!0,animated:!0,secret:!0}),zee.create("S7",{metro:!0,secret:!0}),zee.create("S8",{metro:!0,secret:!0}),zee.create("S9",{secret:!0}),zee.create("S10",{dark:!0,metro:!0,animated:!0,secret:!0}),zee.create("S11",{dark:!0,animated:!0,secret:!0}),zee.create("S12",{secret:!0})],available(){return Kee.all.filter((e=>e.isAvailable()))},find(e){return Kee.all.find((t=>t.name===e))}};class Zee{static toggleNews(){player.options.news.enabled=!player.options.news.enabled,ui.view.news=player.options.news.enabled,GameStorage.save()}static toggleUI(){"Modern"==player.options.UIType?player.options.UIType="Classic":player.options.UIType="Modern","Modern"==ui.view.UIType?ui.view.UIType="Classic":ui.view.UIType="Modern",Themes.find(Theme.currentName()).set(),Ll.updateZoom(),GameStorage.save()}static cloudSave(){Cloud.saveCheck(!0)}static cloudLoad(){Cloud.loadCheck()}static login(){Cloud.login()}static logout(){Cloud.logout()}static refreshUpdateRate(){200===player.options.updateRate&&SecretAchievement(31).unlock(),GameIntervals.gameLoop.restart()}static refreshAutosaveInterval(){GameIntervals.save.restart()}}const Qee=["80b7fdc794f5dfc944da6a445a3f21a2d0f7c974d044f2ea25713037e96af9e3","857876556a230da15fe1bb6f410ca8dbc9274de47c1a847c2281a7103dd2c274","be88e62eb68758cd7381104977c0d3d5d81e19c72a848f0d79d1963c1e39221f","c784c9c0a82b5f3c13884842fa6e6a8f5aed994ef401e6476c30b1adfe439b22"];function Jee(e){const t=(0,Om.sha512_256)(e.replace(/[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]/g,"").toUpperCase());return Qee.indexOf(t)}function ete(e){return-1!==Jee(e)}function tte(e){const t=Jee(e);switch(t){case 0:return Hu.display("a-barrel-roll",5),SecretAchievement(15).unlock(),!0;case 1:return SecretAchievement(14).unlock(),!0;case 2:return SecretAchievement(37).unlock(),!0;case 3:return player.records.fullGameCompletions>0||y?Speedrun.unlock():GameUI.notify.error("Complete the game at least once first!",15e3),!0;default:return!1}}class ite extends A{constructor(e){super(e),this._row=Math.floor(this.id/10),this._column=this.id%10,this._bitmask=1<this.tryUnlock(e)))}get name(){return this.config.name}get row(){return this._row}get column(){return this._column}get isPreReality(){return this.row<14}get isPrePelle(){return this.row<18}get isPreMend(){return this.row<19}get isUnlocked(){return 0!==(player.achievementBits[this.row-1]&this._bitmask)}get isDisabled(){return Pelle.isDisabled("achievements")&&Pelle.disabledAchievements.includes(this.id)}get isEffectActive(){return this.isUnlocked&&!this.isDisabled}tryUnlock(e){this.isUnlocked||this.config.checkRequirement(e)&&this.unlock()}lock(){player.achievementBits[this.row-1]&=this._inverseBitmask}unlock(e){this.isUnlocked||(player.achievementBits[this.row-1]|=this._bitmask,85!==this.id&&93!==this.id||Autobuyer.bigCrunch.bumpAmount(4),55!==this.id||PlayerProgress.realityUnlocked()||Modal.message.show("Since you performed an Infinity in under a minute, the UI changed on the screen.\n Instead of the Dimensions disappearing, they stay and the Big Crunch button appears on top of them.\n This is purely visual, and is there to prevent flickering.",{},3),148!==this.id&&166!==this.id||GameCache.staticGlyphWeights.invalidate(),e?GameUI.notify.reality(`Automatically unlocked: ${this.name}`):(GameUI.notify.success(`Achievement: ${this.name}`),Rc.activateAchievement(this.id)),player.speedrun.isActive&&!player.speedrun.achievementTimes[this.id]&&(player.speedrun.achievementTimes[this.id]=Math.floor(player.records.realTimePlayed)),nte._power.invalidate(),EventHub.dispatch(GAME_EVENT.ACHIEVEMENT_UNLOCKED))}get isPreMend(){return this.row<19}}const ate=ite.createAccessor(GameDatabase.achievements.normal),nte={all:ate.index.compact(),get preReality(){return nte.all.filter((e=>e.isPreReality))},get prePelle(){return nte.all.filter((e=>e.isPrePelle))},get preMend(){return nte.all.filter((e=>e.isPreMend))},get allRows(){const e=nte.all.map((e=>e.row)).max();return nte.rows(1,e)},get preRealityRows(){const e=nte.preReality.map((e=>e.row)).max();return nte.rows(1,e)},get prePelleRows(){const e=nte.prePelle.map((e=>e.row)).max();return nte.rows(1,e)},get preMendRows(){const e=nte.preMend.map((e=>e.row)).max();return nte.rows(1,e)},rows:(e,t)=>Array.range(e,t).map(nte.row),row:e=>Array.range(10*e+1,8).map(ate),get effectiveCount(){const e=nte.all.countWhere((e=>e.isUnlocked));return e},get period(){return GameCache.achievementPeriod.value},autoAchieveUpdate(e){if(PlayerProgress.realityUnlocked())if(player.reality.autoAchieve&&!RealityUpgrade(8).isLockingMechanics){if(!nte.preReality.every((e=>e.isUnlocked))&&(player.reality.achTimer=player.reality.achTimer.add(e),!player.reality.achTimer.lt(this.period))){for(const e of nte.preReality.filter((e=>!e.isUnlocked)))if(e.unlock(!0),player.reality.achTimer=player.reality.achTimer.sub(this.period),player.reality.achTimer.lt(this.period))break;player.reality.gainedAutoAchievements=!0}}else player.reality.achTimer=Decimal.clampMax(player.reality.achTimer.add(e),this.period)},get timeToNextAutoAchieve(){return PlayerProgress.realityUnlocked()?GameCache.achievementPeriod.value===new Decimal(0)||0===nte.preReality.countWhere((e=>!e.isUnlocked))?new Decimal(0):this.period.sub(player.reality.achTimer):new Decimal(0)},_power:new Lazy((()=>{let e=VUnlocks.vAchMulti.effectOrDefault(1),t=player.celestials.ra.upgrades.has("vUpgrade")?WarpUpgrade(2).effectOrDefault(1):1;const i=nte.allRows.countWhere((e=>e.every((e=>e.isUnlocked)))),a=(Math.pow(1.25,i)*Math.pow(1.03,nte.effectiveCount)*e*t)**(Ra.unlocks.achMultBaseImprovementV.isUnlocked?2:1);let n=BreakInfinityUpgrade.achievementMult.chargedEffect.isEffectActive?BreakInfinityUpgrade.achievementMult.chargedEffect.effectValue:1,s=Ra.unlocks.repIncreasesAchMult.isUnlocked?Math.max(1,(1+Math.log10(Decimal.log10(Currency.replicanti.value)))/25):1,r=CorruptionUpgrade(3).isUnlocked?Math.max(1,CorruptionUpgrade(3).effectValue):1,o=getAdjustedGlyphEffect("effarigachievement").toDecimal().times(Ra.unlocks.achievementPower.effectOrDefault(1)).times(n).times(Math.max(s,1)).times(r),l=Decimal.pow(a,o);return l})),get power(){return Pelle.isDisabled("achievementMult")?new Decimal(1):nte._power.value},updateSteamStatus(){for(const e of nte.all.filter((e=>e.isUnlocked)))Rc.activateAchievement(e.id)}};EventHub.logic.on(GAME_EVENT.PERK_BOUGHT,(()=>{player.reality.achTimer=Decimal.clampMax(player.reality.achTimer,nte.period)}));class ste extends A{constructor(e){super(e),this._row=Math.floor(this.id/10),this._column=this.id%10,this._bitmask=1<this.tryUnlock(e)))}get name(){return this.config.name}get row(){return this._row}get column(){return this._column}get isUnlocked(){return 0!==(player.secretAchievementBits[this.row-1]&this._bitmask)}tryUnlock(e){this.isUnlocked||this.config.checkRequirement(e)&&this.unlock()}unlock(){this.isUnlocked||(player.secretAchievementBits[this.row-1]|=this._bitmask,GameUI.notify.success(`Secret Achievement: ${this.name}`),EventHub.dispatch(GAME_EVENT.ACHIEVEMENT_UNLOCKED))}lock(){player.secretAchievementBits[this.row-1]&=this._inverseBitmask}}const rte=ste.createAccessor(GameDatabase.achievements.secret),ote={all:rte.index.compact(),get allRows(){const e=ote.all.map((e=>e.row)).max();return ote.rows(1,e)},rows:(e,t)=>Array.range(e,t).map(ote.row),row:e=>Array.range(10*e+1,8).map(rte)};class lte{constructor(e){this.time=0,this.realTime=e}reset(){this.time=0}advance(){this.realTime?this.time+=Time.unscaledDeltaTime.totalSeconds.toNumber():new Decimal(this.time).add(Time.deltaTime)}check(e,t){return e?(this.advance(),this.time>=t):(this.reset(),!1)}}const cte={marathon1:new lte(!1),marathon2:new lte(!1),pain:new lte(!0),stats:new lte(!0)};class ute extends R{constructor(e){super(e),this.registerEvents(e.checkEvent,(()=>this.tryUnlock()))}get isBought(){return 0!==(this.bits&1<e.id<6?new dte(e):new ute(e)));const hte=e=>ute.index[e],mte={all:ute.index.compact(),get allBought(){return 1+(player.reality.upgradeBits>>6)===1<e),((e,t)=>t));function gte(e){return 2.5*e/100+1}function vte(e){return 100*(e-1)/2.5}const bte={level:(e,t)=>t.level-e.level,power:(e,t)=>t.level*t.strength-e.level*e.strength,score:(e,t)=>AutoGlyphProcessor.filterValue(t)-AutoGlyphProcessor.filterValue(e),effect:(e,t)=>{function i(e){return parseInt(((1<<30)+(e>>>0)).toString(2).split("").reverse().join(""),2)}return i(t.effects)-i(e.effects)}},Ete={inventory:[],active:[],unseen:[],unequipped:[],levelBoost:0,factorsOpen:!1,bestUndoGlyphCount:0,get maxSlots(){if(Pelle.isDoomed){let e=PelleRifts.vacuum.milestones[0].canBeApplied?1:0;return eu(6).isBought&&(e+=1),e}{let e=3;return hte(9).isBought&&e++,hte(24).isBought&&e++,MendingMilestone.five.isReached&&(e+=3),e}},get inventoryList(){return player.reality.glyphs.inventory},get sortedInventoryList(){return this.inventoryList.sort(((e,t)=>-e.level*e.strength+t.level*t.strength))},get activeList(){return player.reality.glyphs.active},get activeWithoutCompanion(){return this.activeList.filter((e=>"companion"!==e.type))},get allGlyphs(){return this.inventoryList.concat(this.activeList)},get glyphIndexArray(){return this.inventory.filter((e=>e)).map((e=>e.idx))},findFreeIndex(e){this.validate();const t=t=>e?t=this.protectedSlots;return this.inventory.findIndex(((e,i)=>null===e&&t(i)))},get freeInventorySpace(){return this.validate(),this.inventory.filter(((e,t)=>null===e&&t>=this.protectedSlots)).length},get activeSlotCount(){if(Pelle.isDoomed){let e=PelleRifts.vacuum.milestones[0].canBeApplied?1:0;return eu(6).isBought&&(e+=1),e}return MendingMilestone.five.isReached?6+Effects.sum(hte(9),hte(24)):3+Effects.sum(hte(9),hte(24))},get protectedSlots(){return 10*player.reality.glyphs.protectedRows},get totalSlots(){return 120},changeProtectedRows(e){const t=Math.clamp(player.reality.glyphs.protectedRows+e,0,this.totalSlots/10-1),i=t-player.reality.glyphs.protectedRows;if(i>0){let e=0;while(eMath.floor(e/10)===this.protectedSlots/10))||e++}}else{let e=0;while(e<-i){let t=!1;for(let i=this.protectedSlots/10-e-1;!t&&i>0;i--)t=t||this.moveGlyphRow(i,i-1);if(!t)break;if(!this.glyphIndexArray.some((e=>Math.floor(e/10)===this.protectedSlots/10-1))){e++;for(let t=this.protectedSlots/10-e;t=this.totalSlots/10||t>=this.totalSlots/10)return!1;if(this.glyphIndexArray.some((e=>Math.floor(e/10)===t))){const i=[...Array(10).keys()].some((i=>null!==this.inventory[10*e+i]&&null!==this.inventory[10*t+i]));if(i)return!1;for(let a=0;a<10;a++){const i=this.inventory[10*e+a];null!==i&&this.moveToSlot(i,10*t+a)}return this.validate(),!0}for(let i=0;i<10;i++){const a=this.inventory[10*e+i];null!==a&&this.moveToSlot(a,10*t+i)}return this.validate(),!0},refreshActive(){this.active=new Array(this.activeSlotCount).fill(null);for(const e of player.reality.glyphs.active){if(this.active[e.idx])throw new Error("Stacked active glyphs?");this.active[e.idx]=e}},refresh(){this.refreshActive(),this.inventory=new Array(this.totalSlots).fill(null);const e=[];for(const t of player.reality.glyphs.inventory)this.inventory[t.idx]?e.push(t):this.inventory[t.idx]=t;while(e.length){const t=this.findFreeIndex();if(!(t>=0))break;{const i=e.shift();this.inventory[t]=i,i.idx=t}}while(e.length)this.removeFromInventory(e.pop());this.validate(),EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED)},findByValues(e,t,i={level,strength,effects}){const a=(e,t,i)=>{switch(e){case-1:return i-t;case 0:return t===i?0:-1;case 1:return t-i}return!1},n=(e,t)=>(e&t)===e?countValuesFromBitmask(t-e):-countValuesFromBitmask(e-(e&t)),s=[];for(const r of t){const t=r.type===e.type;let o;switch(i.effects){case-1:o=n(r.effects,e.effects);break;case 0:o=r.effects===e.effects?0:-1;break;case 1:o=n(e.effects,r.effects);break}const l=a(i.strength,r.strength,e.strength)/2.5,c=a(i.level,r.level,e.level)/5e3,u=r.symbol===e.symbol;t&&o>=0&&l>=0&&c>=0&&u&&s.push({glyph:r,gap:l+c+o/10})}return s.sort(((e,t)=>e.gap-t.gap)),s.map((e=>e.glyph))},findById(e){return player.reality.glyphs.inventory.find((t=>t.id===e))},findByInventoryIndex(e){return this.inventory[e]},activeGlyph(e){return this.active[e]},equip(e,t){const i=Pelle.isDisabled("glyphs")||["effarig","reality","cursed","amalgam"].includes(e.type);if(Pelle.isDoomed&&i)return;if(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked())return;if("companion"!==e.type){if(hte(9).isLockingMechanics){if(this.activeWithoutCompanion.length>0)return void hte(9).tryShowWarningModal("equip another non-Companion Glyph");if(e.level<3)return void hte(9).tryShowWarningModal(`equip a Glyph whose level is less than ${formatInt(3)}`)}if(hte(24).isLockingMechanics&&0===this.activeWithoutCompanion.length)return void hte(24).tryShowWarningModal();if(ImaginaryUpgrade(25).isLockingMechanics&&1===this.activeWithoutCompanion.length)return void ImaginaryUpgrade(25).tryShowWarningModal()}if(this.validate(),this.findByInventoryIndex(e.idx)!==e)throw new Error("Inconsistent inventory indexing");let a=!1,n=1;MendingMilestone.five.isReached&&(n=2),["effarig","reality"].includes(e.type)&&(a=this.active.countWhere((t=>t&&t.type===e.type))t&&t.type===e.type));if(null===this.active[t]){if(!a&&["effarig","reality"].includes(e.type))return void Modal.message.show(`You have the max amount of ${e.type.capitalize()} Glyphs equipped!`,{closeEvent:GAME_EVENT.GLYPHS_CHANGED});this.removeFromInventory(e),this.saveUndo(t),player.reality.glyphs.active.push(e),e.idx=t,this.active[t]=e,this.updateRealityGlyphEffects(),this.updateMaxGlyphCount(),EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED),EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED),this.validate()}else{if(Pelle.isDoomed)return void this.swapIntoActive(e,t);if(player.mending.corruptionChallenge.corruptedMend&&["cursed"].includes(this.active[t].type)&&this.active[t].id>=3&&this.active[t].id<=2+ye.compGlyphs.hiddenFour[player.mending.corruption[4]])return void Modal.message.show("The forced Cursed Glyphs cannot be touched!",{closeEvent:GAME_EVENT.GLYPHS_CHANGED});if(!a&&["effarig","reality"].includes(e.type)&&this.active[t].type!=e.type)return void Modal.message.show(`You have the max amount of ${e.type.capitalize()} Glyphs equipped!`,{closeEvent:GAME_EVENT.GLYPHS_CHANGED});if(!player.options.confirmations.glyphReplace)return void this.swapIntoActive(e,t);Modal.glyphReplace.show({targetSlot:t,inventoryIndex:e.idx})}this.removeVisualFlag("unseen",e),this.removeVisualFlag("unequipped",e)},unequipAll(e=!1){this.unequipped=[];const t=!e&&player.options.respecIntoProtected;while(player.reality.glyphs.active.length){const e=this.findFreeIndex(t);if(e<0)break;const i=player.reality.glyphs.active.pop();this.active[i.idx]=null,this.addToInventory(i,e,!0)}if(player.mending.corruptionChallenge.corruptedMend&&!Pelle.isDoomed)for(let n=0;nModal.message.show(`${quantifyInt("Glyph",i)} could not be unequipped due to lack\n of space. Free up some space in your ${e}${t?" or switch where you are unequipping to":""}\n in order to unequip ${1===i?"it":"them"}.`,{closeEvent:GAME_EVENT.GLYPHS_CHANGED})),50)}return EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED),EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED),!player.reality.glyphs.active.length},unequipNonCursed(e=!1){this.active=this.active.sort((function(e,t){return"cursed"==e.type?-1:"cursed"==t.type?1:0})),this.unequipped=[];const t=!e&&player.options.respecIntoProtected;let i=0,a=5;MendingMilestone.five.isReached&&(a=8);while(iModal.message.show(`${quantifyInt("Glyph",a-i)} could not be unequipped due to lack\n of space. Free up some space in your ${e}${t?" or switch where you are unequipping to":""}\n in order to unequip ${i===a-1?"it":"them"}.`,{closeEvent:GAME_EVENT.GLYPHS_CHANGED})),50)}return EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED),EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED),i==a},unequip(e,t){if(null===this.active[e])return;const i=player.reality.glyphs.active.findIndex((t=>t.idx===e));if(i<0)return;const a=player.reality.glyphs.active.splice(i,1)[0];this.active[e]=null,this.addToInventory(a,t,!0),this.updateRealityGlyphEffects(),this.updateMaxGlyphCount(!0),EventHub.dispatch(GAME_EVENT.GLYPHS_EQUIPPED_CHANGED),EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED)},updateRealityGlyphEffects(){const e=player.reality.glyphs.active.filter((e=>"reality"===e.type))[0];this.levelBoost=void 0!==e?getAdjustedGlyphEffectUncached("realityglyphlevel"):0},moveToSlot(e,t){null===this.inventory[t]?this.moveToEmpty(e,t):this.swap(e,this.inventory[t])},moveToEmpty(e,t){if(this.validate(),this.findByInventoryIndex(e.idx)!==e)throw new Error("Inconsistent inventory indexing");if(null!==this.inventory[t])throw new Error("Attempted glyph move into non-empty slot");this.inventory[e.idx]=null,this.inventory[t]=e,e.idx=t,EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED),this.validate()},swap(e,t){if(e.idx===t.idx)return;this.validate(),this.inventory[e.idx]=t,this.inventory[t.idx]=e;const i=e.idx;e.idx=t.idx,t.idx=i,this.validate(),EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED)},addToInventory(e,t,i=!1){this.validate(),i||(e.id=GlyphGenerator.makeID());const a=t-1&&Ete[e].splice(i,1)},isMusicGlyph(e){return"music"===(null===e||void 0===e?void 0:e.cosmetic)},removeFromInventory(e){if(null===e.idx)return;this.validate();const t=player.reality.glyphs.inventory.indexOf(e);t<0||(this.inventory[e.idx]=null,player.reality.glyphs.inventory.splice(t,1),EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED),this.validate())},validate(){for(const e of player.reality.glyphs.inventory)if(this.inventory[e.idx]!==e)throw new Error("validation error");for(let e=0;ee.idx>=this.protectedSlots)),i=GameCache.glyphInventorySpace.value,a=["power","infinity","replication","time","dilation","effarig","reality","cursed","amalgam","companion"],n=a.mapToObject((e=>e),(()=>({glyphs:[],padding:0})));for(const o of t)n[o.type].glyphs.push(o);let s=0;for(const o of Object.values(n))o.glyphs.sort(e),o.padding=10*Math.ceil(o.glyphs.length/10)-o.glyphs.length,s+=o.padding;while(s>i){let e=a[0];for(const i of a)n[i].padding>n[e].padding&&(e=i);const t=n[e].padding>5?5:1;s-=t,n[e].padding-=t}let r=this.protectedSlots;for(const o of Object.values(n)){for(const e of o.glyphs)this.inventory[r]?this.swap(this.inventory[r],e):this.moveToEmpty(e,r),++r;r+=o.padding}player.reality.autoCollapse&&this.collapseEmptySlots()},sortByLevel(){this.sort(bte.level)},sortByPower(){this.sort(bte.power)},sortByScore(){this.sort(bte.score)},sortByEffect(){this.sort(bte.effect)},autoEquipBetterGlyphs(e){"function"==typeof e&&Ete.active.forEach((t=>{if(null===t)return;let i=Ete.inventoryList.filter((e=>e.type===t.type));if(0===i.length)return;i.length>1&&i.sort(e);let a=i[0];e(t,a)>0&&Ete.swapIntoActive(a,t.idx)}))},autoEquipByLevel(){this.autoEquipBetterGlyphs(bte.level)},autoEquipByPower(){this.autoEquipBetterGlyphs(bte.power)},autoEquipByScore(){this.autoEquipBetterGlyphs(bte.score)},autoEquipByEffect(){this.autoEquipBetterGlyphs(bte.effect)},isObjectivelyUseless(e,t,i){if(player.reality.applyFilterToPurge&&AutoGlyphProcessor.wouldKeep(e))return!1;function a(e,t,i){for(const a of i){const i=a.compareValues(a.effect(e.level,e.strength),a.effect(t.level,t.strength));if(i>0)return!0}return!1}const n=(null!==i&&void 0!==i?i:this.inventory).concat(this.active).filter((t=>null!==t&&t.type===e.type&&t.id!==e.id&&(t.level>=e.level||t.strength>=e.strength)&&(t.effects&e.effects)===e.effects));let s="effarig"===e.type||"reality"===e.type?1:5;if(MendingMilestone.five.isReached&&(s="effarig"===e.type||"reality"===e.type?2:8),s=Math.clampMax(s,t),n.lengtht.id.startsWith(e.type))),o=n.countWhere((t=>!a(e,t,r)));return o>=s},autoClean(e=Ete.maxSlots,t=!0){const i=e=this.protectedSlots;--s){const r=(null!==n&&void 0!==n?n:this.inventory)[s];if(null===r||"companion"===r.type||"cursed"===r.type&&0!==e||"amalgam"===this.type)continue;const o=void 0!==r.color||void 0!==r.symbol;o&&!i||(0===e||this.isObjectivelyUseless(r,e,n))&&(t?AutoGlyphProcessor.getRidOfGlyph(r):n.splice(n.indexOf(r),1),a++)}return player.reality.autoCollapse&&t&&this.collapseEmptySlots(),a},fakePurgeInventory(){return this.inventory.map((e=>null===e?null:{id:e.id,type:e.type,level:e.level,strength:e.strength,effects:e.effects,color:e.color,symbol:e.symbol}))},harshAutoClean(){this.autoClean(1)},deleteAllUnprotected(){this.autoClean(0)},deleteAllRejected(e=!0){let t=0;for(const i of Ete.inventory)null!==i&&i.idx>=this.protectedSlots&&!AutoGlyphProcessor.wouldKeep(i)&&(e&&AutoGlyphProcessor.getRidOfGlyph(i),t++);return player.reality.autoCollapse&&e&&this.collapseEmptySlots(),t},collapseEmptySlots(){const e=player.reality.glyphs.inventory.filter((e=>e.idx>=this.protectedSlots)).sort(((e,t)=>e.idx-t.idx));for(let t=0;te.completions)),thisInfinityTime:player.records.thisInfinity.time,thisInfinityRealTime:player.records.thisInfinity.realTime,thisEternityTime:player.records.thisEternity.time,thisEternityRealTime:player.records.thisEternity.realTime,thisRealityTime:player.records.thisReality.time,thisRealityRealTime:player.records.thisReality.realTime,storedTime:player.celestials.enslaved.stored,dilationStudies:player.dilation.studies.toBitmask(),dilationUpgrades:player.dilation.upgrades.toBitmask(),dilationRebuyables:DilationUpgrades.rebuyable.mapToObject((e=>e.id),(e=>e.boughtAmount)),tp:new Decimal(Currency.tachyonParticles.value),dt:new Decimal(Currency.dilatedTime.value)};player.reality.glyphs.undo.push(t)},undo(){const e=Ete.findFreeIndex(player.options.respecIntoProtected);if(-1===e||0===player.reality.glyphs.undo.length)return;const t=player.reality.glyphs.undo.pop();if(this.bestUndoGlyphCount=player.requirementChecks.reality.maxGlyphs,this.unequip(t.targetSlot,e),finishProcessReality({reset:!0,glyphUndo:!0,restoreCelestialState:!0}),Currency.antimatter.value=new Decimal(t.am),Currency.infinityPoints.value=new Decimal(t.ip),Currency.eternityPoints.value=new Decimal(t.ep),Currency.timeTheorems.value=new Decimal(t.tt),EternityChallenges.all.map(((e,i)=>e.completions=t.ecs[i])),player.records.thisInfinity.time=t.thisInfinityTime,player.records.thisInfinity.realTime=t.thisInfinityRealTime,player.records.thisEternity.time=t.thisEternityTime,player.records.thisEternity.realTime=t.thisEternityRealTime,player.records.thisReality.time=t.thisRealityTime,player.records.thisReality.realTime=t.thisRealityRealTime,player.celestials.enslaved.stored=t.storedTime||0,t.dilationStudies){player.dilation.studies=Array.fromBitmask(t.dilationStudies),player.dilation.upgrades=new Set(Array.fromBitmask(t.dilationUpgrades));for(const e of Object.keys(t.dilationRebuyables))DilationUpgrades.fromId(e).boughtAmount=t.dilationRebuyables[e];Currency.tachyonParticles.value=new Decimal(t.tp),Currency.dilatedTime.value=new Decimal(t.dt)}Player.automatorUnlocked&&AutomatorBackend.state.forceRestart&&AutomatorBackend.start(player.reality.automator.state.editorScript)},copyForRecords(e){return e.map((e=>({type:e.type,level:e.level,strength:e.strength,effects:e.effects,color:e.color,symbol:e.symbol}))).sort(((e,t)=>t.effects-e.effects))},updateMaxGlyphCount(e=!1){const t=this.activeWithoutCompanion,i=t.length-4*t.filter((e=>e&&"cursed"===e.type)).length;e&&(player.requirementChecks.reality.maxGlyphs=i),player.requirementChecks.reality.maxGlyphs=Math.max(player.requirementChecks.reality.maxGlyphs,i)},applyGamespeed(e){Ra.unlocks.allGamespeedGlyphs.canBeApplied&&BASIC_GLYPH_TYPES.includes(e.type)&&(e.effects|=1<null!==e&&"cursed"===e.type)).length;e>=8?GameUI.notify.error(`You don't need more than ${format(8)} Cursed Glyphs!`):(this.addToInventory(GlyphGenerator.cursedGlyph()),GameUI.notify.error("Created a Cursed Glyph"))}};class Tte extends A{}const wte=mapGameDataToObject(GameDatabase.reality.glyphSacrifice,(e=>new Tte(e)));function kte(){for(let e=0;ee.idxe>=t.minStrength))}function _te(e,t=Ete.levelBoost,i=!1){const a=e.level;if(!i){if(Pelle.isDoomed)return Math.min(a,Pelle.glyphMaxLevel);if(Enslaved.isRunning)return Math.max(a,Enslaved.glyphLevelMin);if(Effarig.isRunning)return Math.min(a,Effarig.glyphLevelCap)}return BASIC_GLYPH_TYPES.includes(e.type)?a+t:a}function Ste(){Ete.unequipAll()||Modal.message.show("Some of your Glyphs could not be unequipped due to lack of inventory space.",{closeEvent:GAME_EVENT.GLYPHS_CHANGED}),player.reality.respec=!1}class Dte{constructor(e,t){var i,a;this.id=e.id,this._defaultSymbol=e.symbol,this._defaultColor=e.color,this.preventBlur=null!==(i=e.preventBlur)&&void 0!==i&&i,this.isUnlocked=e.isUnlocked,this._canCustomize=e.canCustomize,this.fixedSymbolColor=null!==(a=e.fixedSymbolColor)&&void 0!==a&&a,this.isCosmetic=t}get canCustomize(){var e,t,i,a;return(!this.isCosmetic||null===(e=null===(t=this.isUnlocked)||void 0===t?void 0:t.call(this))||void 0===e||e)&&(null===(i=null===(a=this._canCustomize)||void 0===a?void 0:a.call(this))||void 0===i||i)}get defaultSymbol(){return{symbol:this._defaultSymbol,blur:!this.preventBlur}}get defaultColor(){const e="reality"===this.id?xte.realityColor:this._defaultColor,t=!xte.isLightBG;return{border:e,bg:t===("cursed"===this.id||"amalgam"===this.id)?"white":"black"}}get currentSymbol(){const e=player.reality.glyphs.cosmetics.symbolMap[this.id];return player.reality.glyphs.cosmetics.active&&e?{symbol:e,blur:!(this.preventBlur||xte.unblurredSymbols.includes(e))}:this.defaultSymbol}get currentColor(){const e=player.reality.glyphs.cosmetics.colorMap[this.id];if(!player.reality.glyphs.cosmetics.active||!e)return this.defaultColor;const t=xte.getColorProps(e);return(0,B.Z)((0,B.Z)({},t),{},{str:e})}get ignoreRarityColor(){return this.isCosmetic||this.fixedSymbolColor}}const Rte=mapGameDataToObject(GameDatabase.reality.glyphTypes,(e=>new Dte(e,!1))),Mte=mapGameDataToObject(GameDatabase.reality.cosmeticGlyphs,(e=>new Dte(e,!0))),Ite=(0,B.Z)((0,B.Z)((0,B.Z)({},Rte),Mte),{},{get list(){return Object.keys((0,B.Z)((0,B.Z)({},GameDatabase.reality.glyphTypes),GameDatabase.reality.cosmeticGlyphs)).map((e=>Ite[e]))}}),xte={setInModal:null,chosenFromModal:null,get cosmeticsEnabled(){return player.reality.glyphs.cosmetics.active},get symbolMap(){return player.reality.glyphs.cosmetics.symbolMap},get colorMap(){return player.reality.glyphs.cosmetics.colorMap},get availableSymbols(){return Object.values(GameDatabase.reality.glyphCosmeticSets).filter((e=>this.unlockedSets.includes(e.id))).map((e=>e.symbol)).filter((e=>e))},get availableColors(){const e=Object.values(GameDatabase.reality.glyphCosmeticSets).filter((e=>this.unlockedSets.includes(e.id))).flatMap((e=>e.color)).sort(((e,t)=>{const i=e=>{const t=e.split("#"),i=t[1],a=[parseInt(i.substring(0,2),16)/255,parseInt(i.substring(2,4),16)/255,parseInt(i.substring(4),16)/255],n=Math.min(...a),s=Math.max(...a);if(s-n<.3)return s;let r;return r=a[0]===s?(a[1]-a[2])/(s-n):a[1]===s?2+(a[2]-a[1])/(s-n):4+(a[0]-a[1])/(s-n),6+(r+6)%6};return i(e)-i(t)})).filter((e=>e)),t=e.filter((e=>"B"===e.charAt(0))),i=e.filter((e=>"W"===e.charAt(0))),a=t.length>i.length?t:i,n=t.length>i.length?i:t,s=[];for(let r=0;rIte[e.id])).filter((e=>e.isUnlocked())).map((e=>e.id))},get unblurredSymbols(){return Object.values(GameDatabase.reality.glyphCosmeticSets).filter((e=>e.preventBlur)).map((e=>e.symbol)).flat()},get expectedSetCount(){return ShopPurchaseData.singleCosmeticSet+player.records.fullGameCompletions},get isLightBG(){switch(player.options.glyphBG){case GLYPH_BG_SETTING.AUTO:return!Theme.current().isDark();case GLYPH_BG_SETTING.LIGHT:return!0;case GLYPH_BG_SETTING.DARK:return!1;default:throw new Error("Unrecognized Glyph BG setting")}},getBorderColor(e){return"cursed"!==e&&"amalgam"!==this.type||Ite.cursed.currentColor.str?Ite[e].currentColor.border:this.isLightBG?"#ffffff":"#000000"},getRarityColor(e,t){const i=getRarity(e),a="white"===Ite[t].currentColor.bg,n=`${a?"light":"dark"}${player.options.highContrastRarity?"HighContrast":"Color"}`;return i[n]},getColorProps(e){return"#"!==(null===e||void 0===e?void 0:e.charAt(1))?{border:e,bg:this.isLightBG?"white":"black"}:{border:e.substring(1),bg:"B"===e.charAt(0)?"black":"white"}},getBaseColor(e){const t=!this.isLightBG;return e?t?"white":"black":t?"black":"white"},get realityColor(){const e=[182,100,34,3,178,182],t=[127,221,170,169,65,127],i=[51,23,72,244,227,51],a=Date.now()%1e4,n=Math.floor(a/2e3),s=a/2e3-n;return`rgb(${e[n]*(1-s)+e[n+1]*s},\n ${t[n]*(1-s)+t[n+1]*s},\n ${i[n]*(1-s)+i[n+1]*s})`},get unlockedSets(){return ShopPurchase.allCosmeticSets>0?Object.keys(GameDatabase.reality.glyphCosmeticSets):[...new Set(player.reality.glyphs.cosmetics.unlockedFromNG.concat(ShopPurchaseData.unlockedCosmetics))]},get lockedSets(){return Object.keys(GameDatabase.reality.glyphCosmeticSets).filter((e=>!this.unlockedSets.includes(e)))},unlockSet(){var e;const t=this.lockedSets,i=null===(e=xte.chosenFromModal)||void 0===e?void 0:e.id;let a;if(i&&t.includes(i))a=i;else{if(i||!(t.length>0))return;a=t[Math.floor(Math.random()*t.length)]}player.reality.glyphs.cosmetics.unlockedFromNG.push(a);const n=GameDatabase.reality.glyphCosmeticSets[a];GameUI.notify.info(`You have unlocked the "${n.name}" Set for Glyph cosmetics!`,1e4),xte.chosenFromModal=null,this.applyNotification()},applyNotification(){TabNotification.newGlyphCosmetic.clearTrigger(),TabNotification.newGlyphCosmetic.tryTrigger(),player.reality.glyphs.cosmetics.glowNotification=!0},clearInvalidCosmetics(){const e=player.reality.glyphs.active.concat(player.reality.glyphs.inventory),t=xte.availableSymbols.flat(),i=xte.availableSymbols.flat();for(const n of e)t.includes(n.symbol)||(n.symbol=void 0),i.includes(n.color)||(n.color=void 0),xte.availableTypes.includes(n.cosmetic)||(n.cosmetic=void 0);const a=player.reality.glyphs.cosmetics;for(const n of Object.keys(a.symbolMap)){const e=a.symbolMap[n];t.includes(e)||(a.symbolMap[n]=void 0)}for(const n of Object.keys(a.colorMap)){const e=a.symbolMap[n];i.includes(e)||(a.colorMap[n]=void 0)}}};class Pte{constructor(e,t){this._id=e,this._adjustApply=t.adjustApply}applyEffect(e){let t=Bte(this._id);void 0!==this._adjustApply&&(t=this._adjustApply(t)),e(t)}}const Gte={dimBoostPower:new Pte("powerdimboost",{adjustApply:e=>Math.max(1,e)}),ipMult:new Pte("infinityIP",{adjustApply:e=>Decimal.max(1,e)}),epMult:new Pte("timeEP",{adjustApply:e=>Decimal.max(1,e)})};function Ute(e){return Lte(e).value}function Bte(e){return GameCache.glyphEffects.value[e]}function Nte(e){return GlyphEffects[e].conversion(Bte(e))}function Ote(e){if(!orderedEffectList.includes(e))throw new Error(`Unknown Glyph effect requested "${e}"'`);return player.reality.glyphs.active.filter((t=>0!==(1<generatedTypes.includes(t.type)===GlyphEffects[e].isGenerated)).map((t=>Hte(e,t)))}function Lte(e){return GlyphEffects[e].combine(Ote(e))}function Fte(e){let t="",i="";for(let a=0;a({id:e.id,value:e.effect(t,n)})))}function Hte(e,t){const i=GlyphEffects[e];if(0!==(t.effects&1<>=1;return t}function Vte(){let e=orderedEffectList.map((e=>({effect:e,values:Ote(e)}))).filter((e=>e.values.length>0)).map((e=>({id:e.effect,value:GlyphEffects[e.effect].combine(e.values)})));const t=e.map((e=>e.id)),i=["cursedgalaxies","curseddimensions","cursedEP"],a=["realitygalaxies","effarigdimensions","timeEP"],n=[ee.multiply,ee.multiply,ee.multiplyDecimal];for(let s=0;se.id!==a[s])),e.filter((e=>e.id===i[s]))[0].value.value=t):(e=e.filter((e=>e.id!==i[s])),e.filter((e=>e.id===a[s]))[0].value.value=t)}return e}class Yte{static get SECOND_GAUSSIAN_DEFAULT_VALUE(){return 1e6}constructor(e,t){this.seed=e,this.secondGaussian=t}uniform(){const e=xorshift32Update(this.seed);return this.seed=e,2.3283064365386963e-10*e+.5}normal(){if(this.secondGaussian!==Yte.SECOND_GAUSSIAN_DEFAULT_VALUE){const e=this.secondGaussian;return this.secondGaussian=Yte.SECOND_GAUSSIAN_DEFAULT_VALUE,e}let e=0,t=0,i=0;do{e=2*this.uniform()-1,t=2*this.uniform()-1,i=e*e+t*t}while(i>=1||0===i);return i=Math.sqrt(-2*Math.log(i)/i),this.secondGaussian=t*i,e*i}finalize(){throw new NotImplementedError}get isFake(){throw new NotImplementedError}}const Wte={uniformityGroups:4,fakeSeed:Date.now()%Math.pow(2,32),fakeSecondGaussian:null,RealGlyphRNG:class extends Yte{constructor(){super(player.reality.seed,player.reality.secondGaussian)}finalize(){player.reality.seed=this.seed,player.reality.secondGaussian=this.secondGaussian}get isFake(){return!1}},FakeGlyphRNG:class extends Yte{constructor(){super(Wte.fakeSeed,Wte.fakeSecondGaussian)}finalize(){Wte.fakeSeed=this.seed,Wte.fakeSecondGaussian=this.secondGaussian}get isFake(){return!0}},MusicGlyphRNG:class extends Yte{constructor(){super(player.reality.musicSeed,player.reality.musicSecondGaussian)}finalize(){player.reality.musicSeed=this.seed,player.reality.musicSecondGaussian=this.secondGaussian}get isFake(){return!1}},startingGlyph(e){const t=1.5;return{id:void 0,idx:null,type:"power",strength:t,level:e.actualLevel,rawLevel:e.rawLevel,effects:makeGlyphEffectBitmask(["powerpow"])}},randomGlyph(e,t,i=null){const a=t||new Wte.RealGlyphRNG,n=this.randomStrength(a),s=i||this.randomType(a);let r=this.randomNumberOfEffects(s,n,e.actualLevel,a);"effarig"!==s&&r>4&&(r=4);const o=this.generateEffects(s,r,a);return void 0===t&&a.finalize(),{id:void 0,idx:null,type:s,strength:n,level:e.actualLevel,rawLevel:e.rawLevel,effects:o}},realityGlyph(e){const t=rarityToStrength(100),i=this.generateRealityEffects(e),a=makeGlyphEffectBitmask(i);return{id:void 0,idx:null,type:"reality",strength:t,level:e,rawLevel:e,effects:a}},cursedGlyph(){const e=rarityToStrength(100),t=makeGlyphEffectBitmask(orderedEffectList.filter((e=>e.match("cursed*"))));let i=6666;return eu(12).isBought&&(i=666),{id:void 0,idx:null,type:"cursed",strength:e,level:i,rawLevel:i,effects:t}},doomedGlyph(e){const t=GlyphEffects.all.filter((t=>t.id.startsWith(e)));t.push(GlyphEffects.timespeed);let i=0;for(const n of t)i|=1<e.match("companion*"))),a=makeGlyphEffectBitmask(i);return{id:void 0,idx:null,type:"companion",strength:t,level:1,rawLevel:1,effects:a}},musicGlyph(){const e=new Wte.MusicGlyphRNG,t=this.randomGlyph({actualLevel:Math.floor(.8*player.records.bestReality.glyphLevel),rawLevel:1},e);return e.finalize(),t.cosmetic="music",t.fixedCosmetic="music",t},makeID(){return this.maxID+1},get maxID(){return player.reality.glyphs.active.concat(player.reality.glyphs.inventory).reduce(((e,t)=>Math.max(e,t.id)),0)},get strengthMultiplier(){return Effects.max(1,RealityUpgrade(16))},randomStrength(e){const t=Ra.unlocks.maxGlyphRarityIncrease.effectOrDefault(0);let i=100+t;if(player.mending.corruptionChallenge.corruptedMend&&(i=Math.pow(i,ye.compGlyphs.rarity[player.mending.corruption[4]]),i*=ye.compGlyphs.rarity[player.mending.corruption[4]],i=Math.ceil(100*i)/100),Ra.unlocks.maxGlyphRarityAndShardSacrificeBoost.canBeApplied||MendingUpgrade(12).isBought)return rarityToStrength(i);let a=Wte.gaussianBellCurve(e)*Wte.strengthMultiplier;const n=Ra.unlocks.extraGlyphChoicesAndRelicShardRarityAlwaysMax.canBeApplied?1:e.uniform(),s=n*Effarig.maxRarityBoost+Effects.sum(Achievement(146),GlyphSacrifice.effarig);return a+=s/40,a=Math.ceil(400*a)/400,Math.min(a,rarityToStrength(100))},randomNumberOfEffects(e,t,i,a){const n=a.uniform(),s=a.uniform();if("effarig"!==e&&(Ra.unlocks.glyphEffectCount.canBeApplied||MendingUpgrade(12).isBought))return 4;if(MendingUpgrade(12).isBought)return 7;const r=Ra.unlocks.glyphEffectCount.canBeApplied||MendingUpgrade(12).isBought?7:4;let o=Math.min(r,Math.floor(1.5*Math.pow(n,1-Math.pow(i*t,.5)/100)+1));return RealityUpgrade(17).isBought&&st<=e)).length,i=GlyphEffects.all.filter((e=>e.glyphTypes.includes("reality"))).sort(((e,t)=>e.bitmaskIndex-t.bitmaskIndex)).map((e=>e.id));return i.slice(0,t)},generateEffects(e,t,i){const a=GlyphTypes[e].effects.mapToObject((e=>e.bitmaskIndex),(()=>i.uniform()));if(Array.range(0,7-GlyphTypes[e].effects.length).forEach((()=>i.uniform())),"effarig"===e){const e=a[20]a[t]-a[e])).slice(0,t);return n.map(Number).toBitmask()},randomType(e,t=[]){const i=generatedTypes.filter((e=>EffarigUnlock.reality.isUnlocked||MendingUpgrade(12).isBought||"effarig"!==e)),a=i.map((e=>t.countWhere((t=>t===e)))).max(),n=0===t.length?[]:i.filter((e=>t.countWhere((t=>t===e))===a));return GlyphTypes.random(e,n)},uniformGlyphs(e,t,i){const a=Math.floor((i-1)/5),n=(i-1)%5,s=player.reality.initialSeed,r=permutationIndex(5,(31+s%7)*a+s%1123),o=Array.repeat(0,5);for(let h=0;hr){const e=getGlyphEffectsFromBitmask(a.effects).filter((e=>e.isGenerated)).map((e=>e.bitmaskIndex)).filter((e=>![0,12,16].includes(e))),t=e[Math.abs(s+i)%e.length];a.effects=n&~(1<e+Decimal.log10(player.reality.glyphs.sac[t].clampMin(1))),0)},get canSacrifice(){return RealityUpgrade(19).isBought},get isRefining(){return Ra.unlocks.unlockGlyphAlchemy.canBeApplied&&AutoGlyphProcessor.sacMode!==AUTO_GLYPH_REJECT.SACRIFICE},handleSpecialGlyphTypes(e){switch(e.type){case"companion":return Modal.deleteCompanion.show(),!0;case"cursed":return Glyphs.removeFromInventory(e),!0;case"amalgam":return Glyphs.removeFromInventory(e),!0}return!1},removeGlyph(e,t=!1){this.handleSpecialGlyphTypes(e)||(this.canSacrifice?this.isRefining?this.attemptRefineGlyph(e,t):this.sacrificeGlyph(e,t):this.deleteGlyph(e,t))},deleteGlyph(e,t){t||!player.options.confirmations.glyphSacrifice?Glyphs.removeFromInventory(e):Modal.glyphDelete.show({idx:e.idx})},glyphSacrificeGain(e){if(!this.canSacrifice||Pelle.isDoomed)return b.D0;if("reality"===e.type)return new Decimal(.01*e.level*Achievement(171).effectOrDefault(1));const t=Decimal.pow(Decimal.clampMax(e.level,1e4).add(10),2.5),i=Decimal.clampMin(e.level-1e4,0).div(100).add(1),a=Ra.unlocks.maxGlyphRarityAndShardSacrificeBoost.effectOrDefault(1);return Decimal.pow(t.mul(i).mul(e.strength).mul(Teresa.runRewardMultiplier).mul(Achievement(171).effectOrDefault(1)),a)},sacrificeGlyph(e,t=!1){if(Pelle.isDoomed)return;if(this.handleSpecialGlyphTypes(e))return;const i=this.glyphSacrificeGain(e),a=!t&&player.options.confirmations.glyphSacrifice;a?Modal.glyphSacrifice.show({idx:e.idx,gain:i}):(player.reality.glyphs.sac[e.type].gte(b.E300)&&(player.reality.glyphs.sac[e.type]=b.E300),player.reality.glyphs.sac[e.type]=player.reality.glyphs.sac[e.type].add(i).clampMax(b.E300),GameCache.logTotalGlyphSacrifice.invalidate(),Glyphs.removeFromInventory(e),EventHub.dispatch(GAME_EVENT.GLYPH_SACRIFICED,e))},glyphAlchemyResource(e){const t=GlyphTypes[e.type];return AlchemyResources.all[t.alchemyResource]},levelRefinementValue(e){return Math.pow(e,3)/1e8},glyphRefinementEfficiency:.05,glyphRawRefinementGain(e){if(!Ra.unlocks.unlockGlyphAlchemy.canBeApplied)return 0;const t=this.levelRefinementValue(e.level),i=strengthToRarity(e.strength)/100;return this.glyphRefinementEfficiency*t*i},glyphRefinementGain(e){if(!Ra.unlocks.unlockGlyphAlchemy.canBeApplied||!generatedTypes.includes(e.type))return 0;const t=this.glyphAlchemyResource(e);if(!t.isUnlocked)return 0;const i=this.glyphRawRefinementGain(e);if(0===t.cap)return i;const a=this.glyphEffectiveCap(e)-t.amount;return Math.clamp(a,0,i)},glyphEffectiveCap(e){const t=this.glyphAlchemyResource(e),i=t.cap,a=this.highestRefinementValue(e),n=Math.clampMin(i,a);return Math.clampMax(n,Ra.alchemyResourceCap)},highestRefinementValue(e){return this.glyphRawRefinementGain(e)/this.glyphRefinementEfficiency},attemptRefineGlyph(e,t){if("reality"===e.type)return;if("amalgam"===e.type)return;if("cursed"===e.type)return void Glyphs.removeFromInventory(e);const i=AlchemyResource.decoherence.isUnlocked;if(!Ra.unlocks.unlockGlyphAlchemy.canBeApplied||0===this.glyphRefinementGain(e)&&!i||i&&AlchemyResources.base.every((e=>e.data.amount>=Ra.alchemyResourceCap)))return void this.sacrificeGlyph(e,t);if(!player.options.confirmations.glyphRefine||t)return void this.refineGlyph(e);const a=this.glyphAlchemyResource(e);Modal.glyphRefine.show({idx:e.idx,resourceName:a.name,resourceAmount:a.amount,gain:this.glyphRefinementGain(e),cap:a.cap})},refineGlyph(e){if(Pelle.isDoomed)return;const t=this.glyphAlchemyResource(e);if(!t.isUnlocked)return void Glyphs.removeFromInventory(e);const i=this.glyphRawRefinementGain(e),a=this.glyphRefinementGain(e);t.amount+=a;const n=i*AlchemyResource.decoherence.effectValue;for(const s of ALCHEMY_BASIC_GLYPH_TYPES)if(s!==e.type){const e=GlyphTypes[s],t=AlchemyResources.all[e.alchemyResource],i=Math.max(t.cap,t.amount);t.amount=Math.clampMax(t.amount+n,i)}t.isBaseResource&&(t.highestRefinementValue=this.highestRefinementValue(e)),Glyphs.removeFromInventory(e)}},Xte={get scoreMode(){return player.reality.glyphs.filter.select},set scoreMode(e){player.reality.glyphs.filter.select=e},get sacMode(){return player.reality.glyphs.filter.trash},set sacMode(e){player.reality.glyphs.filter.trash=e},get types(){return player.reality.glyphs.filter.types},bitmaskIndexOffset(e){switch(e){case"time":case"amalgam":return 0;case"dilation":return 4;case"replication":return 8;case"infinity":return 12;case"power":return 16;case"effarig":return 20;default:throw new Error("Unknown glyph type mode in bitmaskIndexOffset")}},filterValue(e){const t=this.types[e.type];if(["companion","reality"].includes(e.type))return 1/0;if("cursed"===e.type||"amalgam"===this.type)return-1/0;switch(this.scoreMode){case AUTO_GLYPH_SCORE.LOWEST_SACRIFICE:return player.reality.glyphs.sac[e.type].gte(GlyphSacrifice[e.type].cap)?-1/0:player.reality.glyphs.sac[e.type].neg().toNumber();case AUTO_GLYPH_SCORE.EFFECT_COUNT:return strengthToRarity(e.strength)/1e3+getGlyphEffectsFromBitmask(e.effects,0,0).filter((e=>e.isGenerated)).length;case AUTO_GLYPH_SCORE.RARITY_THRESHOLD:return strengthToRarity(e.strength);case AUTO_GLYPH_SCORE.SPECIFIED_EFFECT:{const i=countValuesFromBitmask(e.effects);if(ie.isGenerated)).map((e=>e.bitmaskIndex)),a=this.bitmaskIndexOffset(e.type),n=i.map((e=>t.effectScores[e-a]?t.effectScores[e-a]:0)).sum();return strengthToRarity(e.strength)+n}case AUTO_GLYPH_SCORE.LOWEST_ALCHEMY:{const t=AlchemyResource[e.type],i=GlyphSacrificeHandler.glyphRefinementGain(e);return t.isUnlocked&&i>0?-t.amount:Number.NEGATIVE_INFINITY}case AUTO_GLYPH_SCORE.ALCHEMY_VALUE:return AlchemyResource[e.type].isUnlocked?GlyphSacrificeHandler.glyphRefinementGain(e):Number.NEGATIVE_INFINITY;case AUTO_GLYPH_SCORE.ANY:return Number.MAX_VALUE;default:throw new Error("Unknown glyph score mode in score assignment")}},thresholdValue(e){if(void 0===this.types[e.type])return-Number.MAX_VALUE;switch(this.scoreMode){case AUTO_GLYPH_SCORE.EFFECT_COUNT:return player.reality.glyphs.filter.simple;case AUTO_GLYPH_SCORE.RARITY_THRESHOLD:case AUTO_GLYPH_SCORE.SPECIFIED_EFFECT:return this.types[e.type].rarity;case AUTO_GLYPH_SCORE.EFFECT_SCORE:return this.types[e.type].score;case AUTO_GLYPH_SCORE.ANY:return-Number.MAX_VALUE;case AUTO_GLYPH_SCORE.LOWEST_SACRIFICE:case AUTO_GLYPH_SCORE.LOWEST_ALCHEMY:case AUTO_GLYPH_SCORE.ALCHEMY_VALUE:return Number.MAX_VALUE;default:throw new Error("Unknown glyph score mode in threshold check")}},wouldKeep(e){return this.filterValue(e)>=this.thresholdValue(e)},pick(e){const t=e=>{const t=this.filterValue(e),i=this.thresholdValue(e);return i===Number.MAX_VALUE?t:t-i};return e.map((e=>({glyph:e,score:t(e)}))).reduce(((e,t)=>e.score>t.score?e:t)).glyph},getRidOfGlyph(e){if("cursed"!==e.type&&"companion"!==e.type&&"amalgam"!==e.type)switch(this.sacMode){case AUTO_GLYPH_REJECT.SACRIFICE:GlyphSacrificeHandler.sacrificeGlyph(e,!0);break;case AUTO_GLYPH_REJECT.REFINE:GlyphSacrificeHandler.attemptRefineGlyph(e,!0);break;case AUTO_GLYPH_REJECT.REFINE_TO_CAP:0===GlyphSacrificeHandler.glyphRefinementGain(e)?GlyphSacrificeHandler.sacrificeGlyph(e,!0):GlyphSacrificeHandler.attemptRefineGlyph(e,!0);break;default:throw new Error("Unknown auto Glyph Sacrifice mode")}else GlyphSacrificeHandler.deleteGlyph(e,!0)},hasNegativeEffectScore(){return this.scoreMode===AUTO_GLYPH_SCORE.EFFECT_SCORE&&Object.values(this.types).map((e=>e.effectScores.min())).min()<0},filterModeName(e){switch(e){case AUTO_GLYPH_SCORE.LOWEST_SACRIFICE:return"Lowest Total Glyph Sacrifice";case AUTO_GLYPH_SCORE.EFFECT_COUNT:return"Number of Effects";case AUTO_GLYPH_SCORE.RARITY_THRESHOLD:return"Rarity Threshold";case AUTO_GLYPH_SCORE.SPECIFIED_EFFECT:return"Specified Effect";case AUTO_GLYPH_SCORE.EFFECT_SCORE:return"Effect Score";case AUTO_GLYPH_SCORE.LOWEST_ALCHEMY:return"Lowest Alchemy Resource";case AUTO_GLYPH_SCORE.ALCHEMY_VALUE:return"Refinement Value";case AUTO_GLYPH_SCORE.ANY:return"Random Glyph";default:return"Invalid Glyph filter mode"}},trashModeDesc(e){switch(e){case AUTO_GLYPH_REJECT.SACRIFICE:return"Always sacrifice";case AUTO_GLYPH_REJECT.REFINE:return"Always refine";case AUTO_GLYPH_REJECT.REFINE_TO_CAP:return"Refine to cap, then sacrifice";default:return"Invalid Glyph trash mode"}}};function zte(){const e=Kte(),t=e=>Math.pow(Math.clampMin(1,Math.log(5*e)),1.5),i=Object.values(e).map((e=>t(e.value))).sum(),a=a=>100*t(e[a].value)/i,n=["ep","repl","dt","eternities"],s=[];for(const c of n)s.push({key:c,percent:a(c)});const r=e=>e-Math.floor(e),o=s.sort(((e,t)=>r(t.percent)-r(e.percent))).map((e=>e.key)),l=100-s.map((e=>Math.floor(e.percent))).reduce(((e,t)=>e+t));for(let c=0;c{const n=e.value,s=Math.pow(4*t,i);e.value=n>0?Math.pow(n*a,s)/a:0,e.coeff=Math.pow(a,s-1)*Math.pow(e.coeff,s),e.exp*=s};s(e.ep,n.ep/100),s(e.repl,n.repl/100),s(e.dt,n.dt/100),s(e.eternities,n.eternities/100);const r=Ra.unlocks.relicShardGlyphLevelBoost.effectOrDefault(0);let o=e.ep.value*e.repl.value*e.dt.value*e.eternities.value*t.perkShop+r;const l=SingularityMilestone.glyphLevelFromSingularities.effectOrDefault(1);o*=l;let c=o;const u=(e,t,i)=>{if(eee0?o/c:1,p=t.realityUpgrades+t.achievements;return c=Math.min(1e6,c),o+=p,c+=p,Achievement(193).isUnlocked&&(c*=1.0808),player.mending.corruptionChallenge.corruptedMend&&(c=Math.pow(c,ye.compGlyphs.level[player.mending.corruption[4]]),c*=ye.compGlyphs.level[player.mending.corruption[4]],c=Math.ceil(Math.max(1,c))),{ep:e.ep,repl:e.repl,dt:e.dt,eter:e.eternities,perkShop:t.perkShop,scalePenalty:m,rowFactor:t.realityUpgrades,achievementFactor:t.achievements,shardFactor:r,singularityEffect:l,rawLevel:o,actualLevel:Math.max(1,c)}}function Qte(){const e=Effects.max(1,PerkShopUpgrade.glyphLevel),t=Glyphs.instabilityThreshold,i=Glyphs.hyperInstabilityThreshold,a=Glyphs.ultraInstabilityThreshold,n=Glyphs.omegaInstabilityThreshold,s=Glyphs.hardcap,r=[Array.range(1,5).every((e=>RealityUpgrade(e).boughtAmount>0))].concat(Array.range(1,4).map((e=>Array.range(1,5).every((t=>RealityUpgrade(5*e+t).isBought))))).filter((e=>e)).length,o=Effects.sum(Achievement(148),Achievement(166));return{perkShop:e,instability:t,hyperInstability:i,ultraInstability:a,omegaInstability:n,hardcap:s,realityUpgrades:r,achievements:o}}const Jte={deltaTime:new TimeSpan(new Decimal(0)),unscaledDeltaTime:new TimeSpan(new Decimal(0)),update(e,t){this.unscaledDeltaTime=TimeSpan.fromMilliseconds(e),this.deltaTime=TimeSpan.fromMilliseconds(t)}},eie={fromMilliseconds(e){return TimeSpan.fromMilliseconds(e())},toMilliseconds(e,t){Guard.isTimeSpan(e),t(e.totalMilliseconds)},toDateTimeString(e){return new Date(e).toString().replace(/^(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){4}((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*:(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]):(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]))(?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*$/,"$1")},get deltaTimeFull(){return Jte.deltaTime},get deltaTime(){return this.deltaTimeFull.totalSeconds},get deltaTimeMs(){return this.deltaTimeFull.totalMilliseconds},get unscaledDeltaTime(){return Jte.unscaledDeltaTime},get totalTimePlayed(){return this.fromMilliseconds((()=>player.records.totalTimePlayed))},set totalTimePlayed(e){this.toMilliseconds(e,(e=>player.records.totalTimePlayed=e))},get timeSinceBlackHole(){return this.fromMilliseconds((()=>{let e=player.records.totalTimePlayed.minus(player.records.timePlayedAtBHUnlock);return ue.mendingUnlocked()&&(e=player.records.thisMend.time.minus(player.records.timePlayedAtBHUnlock)),Decimal.max(0,e)}))},get realTimeDoomed(){return this.fromMilliseconds((()=>player.records.realTimeDoomed))},set realTimeDoomed(e){this.toMilliseconds(e,(e=>player.records.realTimeDoomed=e))},get realTimePlayed(){return this.fromMilliseconds((()=>player.records.realTimePlayed))},set realTimePlayed(e){this.toMilliseconds(e,(e=>player.records.realTimePlayed=e))},get thisInfinity(){return this.fromMilliseconds((()=>player.records.thisInfinity.time))},set thisInfinity(e){this.toMilliseconds(e,(e=>player.records.thisInfinity.time=e))},get thisInfinityRealTime(){return this.fromMilliseconds((()=>player.records.thisInfinity.realTime))},set thisInfinityRealTime(e){this.toMilliseconds(e,(e=>player.records.thisInfinity.realTime=e))},get bestInfinity(){return this.fromMilliseconds((()=>player.records.bestInfinity.time))},set bestInfinity(e){this.toMilliseconds(e,(e=>player.records.bestInfinity.time=e))},get bestInfinityRealTime(){return this.fromMilliseconds((()=>player.records.bestInfinity.realTime))},set bestInfinityRealTime(e){this.toMilliseconds(e,(e=>player.records.bestInfinity.realTime=e))},get thisEternity(){return this.fromMilliseconds((()=>player.records.thisEternity.time))},set thisEternity(e){this.toMilliseconds(e,(e=>player.records.thisEternity.time=e))},get thisEternityRealTime(){return this.fromMilliseconds((()=>player.records.thisEternity.realTime))},set thisEternityRealTime(e){this.toMilliseconds(e,(e=>player.records.thisEternity.realTime=e))},get bestEternity(){return this.fromMilliseconds((()=>player.records.bestEternity.time))},set bestEternity(e){this.toMilliseconds(e,(e=>player.records.bestEternity.time=e))},get bestEternityRealTime(){return this.fromMilliseconds((()=>player.records.bestEternity.realTime))},set bestEternityRealTime(e){this.toMilliseconds(e,(e=>player.records.bestEternity.realTime=e))},get thisReality(){return this.fromMilliseconds((()=>player.records.thisReality.time))},set thisReality(e){this.toMilliseconds(e,(e=>player.records.thisReality.time=e))},get thisRealityRealTime(){return this.fromMilliseconds((()=>player.records.thisReality.realTime))},set thisRealityRealTime(e){this.toMilliseconds(e,(e=>player.records.thisReality.realTime=e))},get bestReality(){return this.fromMilliseconds((()=>player.records.bestReality.time))},set bestReality(e){this.toMilliseconds(e,(e=>player.records.bestReality.time=e))},get bestRealityRealTime(){return this.fromMilliseconds((()=>player.records.bestReality.realTime))},set bestRealityRealTime(e){this.toMilliseconds(e,(e=>player.records.bestReality.realTime=e))},get bestMend(){return this.fromMilliseconds((()=>player.records.bestMend.time))},set bestMend(e){this.toMilliseconds(e,(e=>player.records.bestMend.time=e))},get bestMendRealTime(){return this.fromMilliseconds((()=>player.records.bestMend.realTime))},set bestMendRealTime(e){this.toMilliseconds(e,(e=>player.records.bestMend.realTime=e))},get thisMend(){return this.fromMilliseconds((()=>player.records.thisMend.time))},set thisMend(e){this.toMilliseconds(e,(e=>player.records.thisMend.time=e))},get thisMendRealTime(){return this.fromMilliseconds((()=>player.records.thisMend.realTime))},set thisMendRealTime(e){this.toMilliseconds(e,(e=>player.records.thisMend.realTime=e))},get worstChallenge(){return this.fromMilliseconds((()=>GameCache.worstChallengeTime.value))},get challengeSum(){return this.fromMilliseconds((()=>GameCache.challengeTimeSum.value))},get infinityChallengeSum(){return this.fromMilliseconds((()=>GameCache.infinityChallengeTimeSum.value))}};function tie(){let e=Replicanti.galaxies.bought;e*=1+k.sum(TimeStudy(132),TimeStudy(133)),e+=Replicanti.galaxies.extra;const t=Math.min(Replicanti.galaxies.bought,ReplicantiUpgrade.galaxies.value);EternityChallenge(8).completions>=1&&(e+=t*EternityChallenge(8).reward.effectValue,UZ.unlocks.improvedECRewards.isUnlocked&&!Pelle.isDoomed&&(e+=t*EternityChallenge(8).vReward.effectValue));let i=player.dilation.totalTachyonGalaxies;i*=1+Math.max(0,Replicanti.amount.log10()/1e6)*AlchemyResource.alternation.effectValue;let a=player.galaxies,n=GalaxyGenerator.galaxies;UZ.unlocks.improvedECRewards.isUnlocked&&EternityChallenge(8).completions>=1&&!Pelle.isDoomed&&(i*=1+EternityChallenge(8).vReward.effectValue,a*=1+EternityChallenge(8).vReward.effectValue,n*=1+EternityChallenge(8).vReward.effectValue);let s=player.galBoostPoints.eq(0)?1:MultiversalDimension(1).galaxyBoost;return Math.max(a+n+e+i,0)*s}function iie(){if(InfinityChallenge(3).isRunning)return b.D1;if(UZ.isRunning)return b.C1D1_1245;let e=tie();const t=k.product(InfinityUpgrade.galaxyBoost,InfinityUpgrade.galaxyBoost.chargedEffect,BreakInfinityUpgrade.galaxyBoost,BreakInfinityUpgrade.galaxyBoost.chargedEffect,TimeStudy(212),TimeStudy(232),TimeStudy(401),Achievement(86),Achievement(178),InfinityChallenge(5).reward,PelleUpgrade.galaxyPower,PelleRifts.decay.milestones[1],UZ.unlocks.gamespeedGalaxyBoost);if(e<3){let i=1/1.1245;1===player.galaxies&&(i=1/1.11888888),2===player.galaxies&&(i=1/1.11267177),NormalChallenge(5).isRunning&&(i=1/1.08,1===player.galaxies&&(i=1/1.07632),2===player.galaxies&&(i=1/1.072));const a=.02*t;return Pelle.isDoomed&&(e*=.5),e*=Pelle.specialGlyphEffect.power,b.D0_01.clampMin(i-e*a)}let i=.8;if(NormalChallenge(5).isRunning&&(i=.83),e-=2,e*=t,e*=getAdjustedGlyphEffect("cursedgalaxies"),e*=getAdjustedGlyphEffect("realitygalaxies"),e*=1+ImaginaryUpgrade(9).effectOrDefault(0),Pelle.isDoomed&&(e*=.5),player.mending.corruptionChallenge.corruptedMend){let t=ye.galWeak.strength[player.mending.corruption[3]];eu(19).isBought&&(t=Math.min(1.4*t,1)),e*=t}e*=Pelle.specialGlyphEffect.power;const a=b.D0_965;let n=a.pow(e-2).times(i);return n}function aie(){return!(!rie.isAvailableForPurchase||!rie.isAffordable)&&(NormalChallenge(9).isRunning&&rie.multiplySameCosts(),Tutorial.turnOffEffect(TUTORIAL_STATE.TICKSPEED),Currency.antimatter.subtract(rie.cost),player.totalTickBought++,player.records.thisInfinity.lastBuyTime=player.records.thisInfinity.time,player.requirementChecks.permanent.singleTickspeed++,NormalChallenge(2).isRunning&&(player.chall2Pow=0),GameUI.update(),!0)}function nie(){if(!rie.isAvailableForPurchase||!rie.isAffordable)return;let e=!1;if(Tutorial.turnOffEffect(TUTORIAL_STATE.TICKSPEED),NormalChallenge(9).isRunning){const t=Player.infinityGoal;let i=rie.cost;while(Currency.antimatter.gt(i)&&i.lt(t))rie.multiplySameCosts(),Currency.antimatter.subtract(i),player.totalTickBought++,e=!0,i=rie.cost}else{const t=rie.costScale.getMaxBought(player.totalTickBought,Currency.antimatter.value,1);if(null===t)return;Currency.antimatter.subtract(Decimal.pow10(t.logPrice)),player.totalTickBought+=t.quantity,e=!0}e&&(player.records.thisInfinity.lastBuyTime=player.records.thisInfinity.time,NormalChallenge(2).isRunning&&(player.chall2Pow=0))}function sie(){player.totalTickBought=0,player.chall9TickspeedCostBumps=0}const rie={get isUnlocked(){return AntimatterDimension(2).bought>0||EternityMilestone.unlockAllND.isReached||PlayerProgress.realityUnlocked()},get isAvailableForPurchase(){return this.isUnlocked&&!EternityChallenge(9).isRunning&&!Laitela.continuumActive&&(player.break||this.cost.lt(Decimal.NUMBER_MAX_VALUE))},get isAffordable(){return Currency.antimatter.gte(this.cost)},get multiplier(){return iie()},get current(){let e=Effarig.isRunning?Effarig.tickspeed:this.baseValue.powEffectOf(DilationUpgrade.tickspeedPower);if(player.mending.corruptionChallenge.corruptedMend){let t=ye.tickExtension[player.mending.corruption[5]];eu(21).isBought&&(t=t**.5);let i=new Decimal(1).div(t);e=e.pow(i)}return RZ.isSuperRunning&&(e=e.pow(1e-6)),player.dilation.active||PelleStrikes.dilation.hasStrike?dilatedValueOf(e):e},get cost(){return this.costScale.calculateCost(player.totalTickBought+player.chall9TickspeedCostBumps)},get costScale(){return new ExponentialCostScaling({baseCost:1e3,baseIncrease:10,costScale:Player.tickSpeedMultDecrease,scalingCostThreshold:Number.MAX_VALUE})},get continuumValue(){return this.isUnlocked?this.costScale.getContinuumValue(Currency.antimatter.value,1)*Laitela.matterExtraPurchaseFactor:0},get baseValue(){return b.E3.timesEffectsOf(Achievement(36),Achievement(45),Achievement(66),Achievement(83)).times(iie().pow(this.totalUpgrades))},get totalUpgrades(){let e;return e=Laitela.continuumActive?this.continuumValue:player.totalTickBought,e+player.totalTickGained},get perSecond(){return Decimal.divide(1e3,this.current)},multiplySameCosts(){for(const e of AntimatterDimensions.all)e.cost.e===this.cost.e&&e.costBumps++}},oie={BASE_SOFTCAP:3e5,GROWTH_RATE:6e-6,GROWTH_EXP:2,multToNext:1.33,get amount(){return player.totalTickGained},get softcap(){let e=oie.BASE_SOFTCAP;return Enslaved.has(ENSLAVED_UNLOCKS.FREE_TICKSPEED_SOFTCAP)&&(e+=1e5),UZ.unlocks.freeTickspeedSoftcapDelay.isUnlocked&&(e+=1e4*Tesseracts.effectiveCount),TimeStudy(403).isBought&&(e+=TimeStudy(403).effectOrDefault(0)),e},fromShards(e){let t=this.GROWTH_EXP;UZ.unlocks.improvedECRewards.isUnlocked&&EternityChallenge(11).completions>=1&&!Pelle.isDoomed&&(t=t**EternityChallenge(11).vReward.effectValue);const i=1+(k.min(k.min(1.33,TimeStudy(171)),TimeStudy(309))-1)*Math.max(getAdjustedGlyphEffect("cursedtickspeed"),1),a=Math.log(i),n=e.ln(),s=Math.max(0,n/a);if(s<=oie.softcap)return this.multToNext=i,{newAmount:Math.ceil(s),nextShards:Decimal.pow(i,Math.ceil(s))};const r=oie.softcap*a,o=(n-r)/a,l=oie.GROWTH_RATE/t/a,c=e=>l*Math.pow(Math.max(e,0),t)+e,u=e=>e*l*Math.pow(Math.max(e,0),t-1)+1,d=e=>e-(c(e)-o)/u(e);let h,m=Math.min(o,Math.pow(o/l,1/t)),p=0;do{h=m,m=d(m)}while(m8)throw new Error(`Invalid Antimatter Dimension tier ${e}`);if(NormalChallenge(10).isRunning&&e>6)return b.D1;if(EternityChallenge(11).isRunning)return Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate).max(1).times(DimBoost.multiplierToNDTier(e));let t=b.D1;t=uie(t,e),t=die(t,e);const i=getAdjustedGlyphEffect("dilationpow");return player.dilation.active||PelleStrikes.dilation.hasStrike?t=dilatedValueOf(t.pow(i)):Enslaved.isRunning&&(t=dilatedValueOf(t)),t=t.timesEffectOf(DilationUpgrade.ndMultDT),Effarig.isRunning?t=Effarig.multiplier(t):RZ.isRunning?t=t.pow(.5):RZ.isSuperRunning&&(t=t.pow(1e-6)),player.mending.corruptionChallenge.corruptedMend&&(t=t.pow(ye.timeCompression.hiddenEight[player.mending.corruption[2]])),AlchemyResource.inflation.isUnlocked&&t.gte(AlchemyResource.inflation.effectValue)&&(t=t.pow(1.05)),t}function uie(e,t){let i,a=e.times(GameCache.antimatterDimensionCommonMultiplier.value);i=Laitela.continuumActive?Eie(t).continuumValue:Math.floor(Eie(t).bought/10),a=a.times(Decimal.pow(Tie.buyTenMultiplier,i)),a=a.times(DimBoost.multiplierToNDTier(t));let n=b.D1.timesEffectsOf(Eie(t).infinityUpgrade,BreakInfinityUpgrade.infinitiedMult);return n=n.pow(TimeStudy(31).effectOrDefault(1)),a=a.times(n),1===t&&(a=a.timesEffectsOf(InfinityUpgrade.unspentIPMult,InfinityUpgrade.unspentIPMult.chargedEffect,Achievement(28),Achievement(31),Achievement(68),Achievement(71),TimeStudy(234),TimeStudy(411))),8===t&&(a=a.times(Sacrifice.totalBoost)),a=a.timesEffectsOf(8===t?Achievement(23):null,t<8?Achievement(34):null,t<=4?Achievement(64):null,t<8?TimeStudy(71):null,8===t?TimeStudy(214):null,t>1&&t<8?InfinityChallenge(8).reward:null),Achievement(43).isUnlocked&&(a=a.times(1+t/100)),a=a.clampMin(1),a}function die(e,t){let i=e;const a=getAdjustedGlyphEffect("powerpow"),n=getAdjustedGlyphEffect("effarigdimensions");return InfinityChallenge(4).isRunning&&player.postC4Tier!==t&&(i=i.pow(InfinityChallenge(4).effectValue)),InfinityChallenge(4).isCompleted&&(i=i.pow(InfinityChallenge(4).reward.effectValue)),i=i.pow(a*n*Ra.momentumValue),i=i.powEffectsOf(Eie(t).infinityUpgrade.chargedEffect,InfinityUpgrade.totalTimeMult.chargedEffect,InfinityUpgrade.thisInfinityTimeMult.chargedEffect,AlchemyResource.power,Achievement(183),PelleRifts.paradox,BreakInfinityUpgrade.totalAMMult.chargedEffect,BreakInfinityUpgrade.currentAMMult.chargedEffect),i=i.pow(getAdjustedGlyphEffect("curseddimensions")),i=i.pow(VUnlocks.adPow.effectOrDefault(1)),player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[1]>=5&&(i=i.pow(eu(17).effectOrDefault(1))),PelleStrikes.infinity.hasStrike&&!MendingUpgrade(10).isBought&&(i=i.pow(.5)),i}function hie(e){1===e&&Tutorial.turnOffEffect(TUTORIAL_STATE.DIM1),2===e&&Tutorial.turnOffEffect(TUTORIAL_STATE.DIM2),Achievement(10+e).unlock(),Achievement(23).tryUnlock(),player.speedrun.isActive&&!player.speedrun.hasStarted&&Speedrun.startTimer(),NormalChallenge(2).isRunning&&(player.chall2Pow=0),(NormalChallenge(4).isRunning||InfinityChallenge(1).isRunning)&&Tie.resetAmountUpToTier(e-1),player.postC4Tier=e,player.records.thisInfinity.lastBuyTime=player.records.thisInfinity.time,8!==e&&(player.requirementChecks.eternity.onlyAD8=!1),1!==e&&(player.requirementChecks.eternity.onlyAD1=!1),8===e&&(player.requirementChecks.infinity.noAD8=!1),1===e&&(player.requirementChecks.eternity.noAD1=!1)}function mie(e){const t=Eie(e);if(Laitela.continuumActive||!t.isAvailableForPurchase||!t.isAffordable)return!1;const i=t.cost;return!(8===e&&Enslaved.isRunning&&Eie(8).bought>=1)&&(t.currencyAmount=t.currencyAmount.minus(i),9===t.boughtBefore10&&t.challengeCostBump(),t.amount=t.amount.plus(1),t.bought++,1===e&&Achievement(28).tryUnlock(),hie(e),!0)}function pie(e){const t=Eie(e);if(Laitela.continuumActive||!t.isAvailableForPurchase||!t.isAffordableUntil10)return!1;const i=t.costUntil10;return 8===e&&Enslaved.isRunning?mie(8):(t.currencyAmount=t.currencyAmount.minus(i),t.challengeCostBump(),t.amount=t.amount.plus(t.remainingUntil10),t.bought+=t.remainingUntil10,hie(e),!0)}function yie(e){const t=Eie(e);if(Laitela.continuumActive||!t.isAvailableForPurchase||!t.isAffordable)return!1;const i=t.howManyCanBuy,a=t.cost.times(i);return 8===e&&Enslaved.isRunning?mie(8):(t.currencyAmount=t.currencyAmount.minus(a),t.challengeCostBump(),t.amount=t.amount.plus(i),t.bought+=i,hie(e),!0)}function fie(e){if(Laitela.continuumActive)return;const t=Eie(e);t.challengeCostBump(),t.amount=Decimal.round(t.amount.plus(t.remainingUntil10)),t.bought+=t.remainingUntil10,hie(e)}function gie(){if(!Laitela.continuumActive){player.requirementChecks.infinity.maxAll=!0;for(let e=1;e<9;e++)vie(e);buyMaxTickSpeed()}}function vie(e,t=1/0){const i=Eie(e);if(Laitela.continuumActive||!i.isAvailableForPurchase||!i.isAffordableUntil10)return;const a=i.costUntil10;let n=t;const s=Player.infinityGoal;if(i.cost.gt(s)&&Player.isInAntimatterChallenge)return;if(8===e&&Enslaved.isRunning)return void mie(8);if(i.currencyAmount.gte(a)&&(i.currencyAmount=i.currencyAmount.minus(a),fie(e),n--),n<=0)return;if(NormalChallenge(9).isRunning||InfinityChallenge(5).isRunning){while(i.isAffordableUntil10&&i.cost.lt(s)&&n>0)i.currencyAmount=i.currencyAmount.minus(i.costUntil10),fie(e),n--;return}const r=i.costScale.getMaxBought(Math.floor(i.bought/10)+i.costBumps,i.currencyAmount,10);if(null===r)return;let o=r.quantity;o>n&&(o=n),i.amount=i.amount.plus(10*o).round(),i.bought+=10*o,i.currencyAmount=i.currencyAmount.minus(Decimal.pow10(r.logPrice))}class bie extends jZ{constructor(e){super((()=>player.dimensions.antimatter),e);const t=[null,10,100,1e4,1e6,1e9,1e13,1e18,1e24];this._baseCost=t[e];const i=[null,1e3,1e4,1e5,1e6,1e8,1e10,1e12,1e15];this._baseCostMultiplier=i[e];const a=[null,10,100,100,500,2500,2e4,2e5,4e6];this._c6BaseCost=a[e];const n=[null,1e3,5e3,1e4,12e3,18e3,26e3,32e3,42e3];this._c6BaseCostMultiplier=n[e]}get costScale(){let e=1;return player.mending.corruptionChallenge.corruptedMend&&(e=ye.toD.hiddenEight[player.mending.corruption[7]]),new ExponentialCostScaling({baseCost:NormalChallenge(6).isRunning?this._c6BaseCost:this._baseCost,baseIncrease:NormalChallenge(6).isRunning?this._c6BaseCostMultiplier:this._baseCostMultiplier,costScale:Player.dimensionMultDecrease**e,scalingCostThreshold:Number.MAX_VALUE})}get cost(){let e=this.costScale.calculateCost(Math.floor(this.bought/10)+this.costBumps);return e}get costBumps(){return this.data.costBumps}set costBumps(e){this.data.costBumps=e}get boughtBefore10(){return this.bought%10}get remainingUntil10(){return 10-this.boughtBefore10}get costUntil10(){return this.cost.times(this.remainingUntil10)}get howManyCanBuy(){const e=this.currencyAmount.dividedBy(this.cost);return Decimal.floor(Decimal.max(Decimal.min(e,10-this.boughtBefore10),0)).toNumber()}get infinityUpgrade(){switch(this.tier){case 1:case 8:return InfinityUpgrade.dim18mult;case 2:case 7:return InfinityUpgrade.dim27mult;case 3:case 6:return InfinityUpgrade.dim36mult;case 4:case 5:return InfinityUpgrade.dim45mult}return!1}get rateOfChange(){const e=this.tier;if(8===e||e>3&&EternityChallenge(3).isRunning||e>6&&NormalChallenge(12).isRunning)return b.D0;let t;return t=7===e&&EternityChallenge(7).isRunning?InfinityDimension(1).productionPerSecond.times(10):NormalChallenge(12).isRunning?Eie(e+2).productionPerSecond:Eie(e+1).productionPerSecond,t.times(10).dividedBy(this.amount.max(1)).times(getGameSpeedupForDisplay())}get isProducing(){const e=this.tier;return!(EternityChallenge(3).isRunning&&e>4||NormalChallenge(10).isRunning&&e>6||Laitela.isRunning&&e>Laitela.maxAllowedDimension)&&this.totalAmount.gt(0)}get currencyAmount(){return this.tier>=3&&NormalChallenge(6).isRunning?Eie(this.tier-2).amount:Currency.antimatter.value}set currencyAmount(e){this.tier>=3&&NormalChallenge(6).isRunning?Eie(this.tier-2).amount=e:Currency.antimatter.value=e}get continuumValue(){return this.isAvailableForPurchase?8===this.tier&&Enslaved.isRunning?1:this.costScale.getContinuumValue(this.currencyAmount,10)*Laitela.matterExtraPurchaseFactor:0}get continuumAmount(){return Laitela.continuumActive?Math.floor(10*this.continuumValue):0}get totalAmount(){return this.amount.max(this.continuumAmount)}get isAffordable(){return!Laitela.continuumActive&&(!(!player.break&&this.cost.gt(Decimal.MAX_VALUE))&&this.cost.lte(this.currencyAmount))}get isAffordableUntil10(){return!(!player.break&&this.cost.gt(Decimal.MAX_VALUE))&&this.costUntil10.lte(this.currencyAmount)}get isAvailableForPurchase(){if(!EternityMilestone.unlockAllND.isReached&&this.tier>DimBoost.totalBoosts+4)return!1;const e=1===this.tier||Eie(this.tier-1).totalAmount.gt(0);return!(!EternityMilestone.unlockAllND.isReached&&!e)&&(this.tier<7||!NormalChallenge(10).isRunning)}reset(){this.amount=b.D0,this.bought=0,this.costBumps=0}resetAmount(){this.amount=b.D0}challengeCostBump(){InfinityChallenge(5).isRunning?this.multiplyIC5Costs():NormalChallenge(9).isRunning&&this.multiplySameCosts()}multiplySameCosts(){for(const e of Tie.all.filter((e=>e.tier!==this.tier)))e.cost.e===this.cost.e&&e.costBumps++;Tickspeed.cost.e===this.cost.e&&player.chall9TickspeedCostBumps++}multiplyIC5Costs(){for(const e of Tie.all.filter((e=>e.tier!==this.tier)))(this.tier<=4&&e.cost.lt(this.cost)||this.tier>=5&&e.cost.gt(this.cost))&&e.costBumps++}get multiplier(){return GameCache.antimatterDimensionFinalMultipliers[this.tier].value}get cappedProductionInNormalChallenges(){const e=player.break&&!NormalChallenge.isRunning||InfinityChallenge.isRunning||Enslaved.isRunning,t=player.reality.warped;return Pelle.isDoomed&&Pelle.hasGalaxyGenerator||!t?e?Decimal.MAX_VALUE:b.E315:e?b.WARP_LIMIT:b.E315}get productionPerSecond(){const e=this.tier;if(Laitela.isRunning&&e>Laitela.maxAllowedDimension)return b.D0;let t=this.totalAmount;NormalChallenge(12).isRunning&&(2===e&&(t=t.pow(1.6)),4===e&&(t=t.pow(1.4)),6===e&&(t=t.pow(1.2)));let i=t.times(this.multiplier).times(Tickspeed.perSecond);if(NormalChallenge(2).isRunning&&(i=i.times(player.chall2Pow)),1===e){if(NormalChallenge(3).isRunning&&(i=i.times(player.chall3Pow)),i.gt(10)){const e=i.log10();i=Decimal.pow10(Math.pow(e,getAdjustedGlyphEffect("effarigantimatter")))}if(player.mending.corruptionChallenge.corruptedMend){let e=ye.atomDilution[player.mending.corruption[6]];eu(22).isBought&&(e=Math.min(1,1.5*e)),i=Decimal.pow10(Math.pow(i.log10(),e))}bZ.hostileFragments.isUnlocked&&(i=Decimal.pow(i,1+CorruptionData.recordCorruptedFragments/100))}return i=i.min(this.cappedProductionInNormalChallenges),i}}const Eie=bie.createAccessor(),Tie={all:Eie.index.compact(),reset(){for(const e of Tie.all)e.reset();GameCache.dimensionMultDecrease.invalidate()},resetAmountUpToTier(e){for(const t of Tie.all.slice(0,e))t.resetAmount()},get buyTenMultiplier(){if(NormalChallenge(7).isRunning)return b.D2.min(1+DimBoost.totalBoosts/5);let e=b.D2.plusEffectsOf(Achievement(141).effects.buyTenMult);return EternityChallenge(3).completions>=1&&(e=e.plusEffectsOf(EternityChallenge(3).reward)),e=e.timesEffectsOf(InfinityUpgrade.buy10Mult,Achievement(58)).times(getAdjustedGlyphEffect("powerbuy10")),e=e.pow(Math.max(1,getAdjustedGlyphEffect("effarigforgotten"))),e=e.powEffectOf(InfinityUpgrade.buy10Mult.chargedEffect),e=e.pow(ImaginaryUpgrade(14).effectOrDefault(1)),Ra.unlocks.improvedECRewards.isUnlocked&&EternityChallenge(3).completions>=1&&!Pelle.isDoomed&&(e=e.pow(EternityChallenge(3).vReward.effectValue)),e},tick(e){const t=!player.break||Player.isInAntimatterChallenge;if(t&&Currency.antimatter.gte(Player.infinityGoal))return;let i=EternityChallenge(3).isRunning?3:7,a=1;NormalChallenge(12).isRunning&&(i--,a++);for(let n=i;n>=1;--n)Eie(n+a).produceDimensions(Eie(n),new Decimal(e).div(10));Eie(1).amount.gt(0)&&(player.requirementChecks.eternity.noAD1=!1),Eie(1).produceCurrency(Currency.antimatter,e),NormalChallenge(12).isRunning&&Eie(2).produceCurrency(Currency.antimatter,e),t&&Currency.antimatter.dropTo(Player.infinityGoal)}};function wie(){let e=new Decimal(ShopPurchase.allDimPurchases.currentMult).timesEffectsOf(Achievement(75),TimeStudy(82),TimeStudy(92),TimeStudy(162),InfinityChallenge(1).reward,InfinityChallenge(6).reward,EternityUpgrade.idMultEP,EternityUpgrade.idMultEternities,EternityUpgrade.idMultICRecords,AlchemyResource.dimensionality,ImaginaryUpgrade(8),PelleRifts.recursion.milestones[1]);return Pelle.isDoomed&&EternityChallenge(4).completions>=1&&(e=e.timesEffectsOf(EternityChallenge(4).reward)),Pelle.isDoomed&&EternityChallenge(9).completions>=1&&(e=e.timesEffectsOf(EternityChallenge(9).reward)),Ra.unlocks.improvedECRewards.isUnlocked&&EternityChallenge(9).completions>=1&&!Pelle.isDoomed&&(e=e.timesEffectsOf(EternityChallenge(9).vReward)),Replicanti.areUnlocked&&Replicanti.amount.gt(1)&&(e=e.times(replicantiMult())),Ra.unlocks.vAchMilestone2AffectsIDsAndTDs.isUnlocked&&(e=e.pow(VUnlocks.adPow.effectOrDefault(1),.5)),e}function kie(){const e=Autobuyer.infinityDimension(1).isActive;for(let t=1;t<9;t++)Autobuyer.infinityDimension(t).isActive=!e}class Cie extends jZ{constructor(e){super((()=>player.dimensions.infinity),e);const t=[void 0,b.E1100,b.E1900,b.E2400,b.E10500,b.E30000,b.E45000,b.E54000,b.E60000];this._unlockRequirement=t[e];const i=[null,1e3,1e6,1e8,1e10,1e15,1e20,1e25,1e30];this._costMultiplier=i[e];const a=[null,50,30,10,5,5,5,5,5];this._powerMultiplier=a[e];const n=[null,1e8,1e9,1e10,1e20,1e140,1e200,1e250,1e280];this._baseCost=new Decimal(n[e]),this.ipRequirement=n[1]}get cost(){return this.data.cost}set cost(e){this.data.cost=e}get baseAmount(){return this.data.baseAmount}set baseAmount(e){this.data.baseAmount=e}get isUnlocked(){return this.data.isUnlocked}set isUnlocked(e){this.data.isUnlocked=e}get amRequirement(){return this._unlockRequirement}get antimatterRequirementReached(){return player.records.thisEternity.maxAM.gte(this.amRequirement)}get hasIPUnlock(){return 1===this.tier&&!PlayerProgress.eternityUnlocked()}get ipRequirementReached(){return!this.hasIPUnlock||Mi.infinityPoints.value.gte(this.ipRequirement)}get canUnlock(){return(Perk.bypassIDAntimatter.canBeApplied||this.antimatterRequirementReached)&&this.ipRequirementReached}get isAvailableForPurchase(){return _ie.canBuy()&&this.isUnlocked&&this.isAffordable&&!this.isCapped}get isAffordable(){return Mi.infinityPoints.gte(this.cost)}get rateOfChange(){const e=this.tier;let t=b.D0;8===e?(EternityChallenge(7).reward.applyEffect((e=>t=e.times(10))),EternityChallenge(7).isRunning&&EternityChallenge(7).applyEffect((e=>t=e.times(10)))):t=Aie(e+1).productionPerSecond;const i=Decimal.max(this.amount,1);return t.times(10).dividedBy(i).times(getGameSpeedupForDisplay())}get infPowerSoftcap(){let e=9e15;return e+=Xw(1).effectOrDefault(0),e}get productionPerSecond(){if(EternityChallenge(2).isRunning||EternityChallenge(10).isRunning||Laitela.isRunning&&this.tier>Laitela.maxAllowedDimension)return b.D0;let e=this.totalAmount;if(EternityChallenge(11).isRunning)return e;EternityChallenge(7).isRunning&&(e=e.times(Tickspeed.perSecond)),e=e.times(this.multiplier);let t=1;if(1==this.tier)while(Math.log10(e.log10())>Math.log10(this.infPowerSoftcap)*t)e=e.div(Decimal.pow10(this.infPowerSoftcap)),e=e.pow(.0123456789),e=e.times(Decimal.pow10(this.infPowerSoftcap)),t+=1;return e}get multiplier(){const e=this.tier;if(EternityChallenge(11).isRunning)return b.D1;let t=GameCache.infinityDimensionCommonMultiplier.value.timesEffectsOf(1===e?Achievement(94):null,4===e?TimeStudy(72):null,TimeStudy(312));return EternityChallenge(2).completions>=1&&(t=t.timesEffectsOf(1===e?EternityChallenge(2).reward:null)),t=t.times(Decimal.pow(this.powerMultiplier,Math.floor(this.baseAmount/10))),1===e&&(t=t.times(PelleRifts.decay.milestones[0].effectOrDefault(1)),t=t.times(TimeStudy(412).effectOrDefault(1))),t=t.pow(getAdjustedGlyphEffect("infinitypow")),t=t.pow(getAdjustedGlyphEffect("effarigdimensions")),t=t.pow(getAdjustedGlyphEffect("curseddimensions")),t=t.powEffectOf(AlchemyResource.infinity),t=t.pow(Ra.momentumValue),t=t.powEffectOf(PelleRifts.paradox),Ra.unlocks.improvedECRewards.isUnlocked&&!Pelle.isDoomed&&(EternityChallenge(2).completions>=1&&(t=t.pow(EternityChallenge(2).vReward.effectValue)),EternityChallenge(4).completions>=1&&(t=t.pow(EternityChallenge(4).vReward.effectValue))),EternityChallenge(4).completions>=1&&(t=t.timesEffectsOf(EternityChallenge(4).reward)),(player.dilation.active||PelleStrikes.dilation.hasStrike)&&(t=dilatedValueOf(t)),Effarig.isRunning?t=Effarig.multiplier(t):V.isRunning?t=t.pow(.5):V.isSuperRunning&&(t=t.pow(1e-6)),PelleStrikes.powerGalaxies.hasStrike&&!MendingUpgrade(10).isBought&&(t=t.pow(.5)),eu(24).isBought&&player.mending.corruptionChallenge.corruptedMend&&player.mending.corruption[8]>=5&&(t=t.pow(eu(24).effectOrDefault(1))),t}get isProducing(){const e=this.tier;return!(EternityChallenge(2).isRunning||EternityChallenge(10).isRunning||Laitela.isRunning&&e>Laitela.maxAllowedDimension)&&this.totalAmount.gt(0)}get baseCost(){return this._baseCost}get costMultiplier(){let e=this._costMultiplier;return EternityChallenge(12).completions>=1&&(e=Math.pow(e,EternityChallenge(12).reward.effectValue)),e}get powerMultiplier(){return new Decimal(this._powerMultiplier).timesEffectsOf(8===this._tier?GlyphSacrifice.infinity:null).pow(ImaginaryUpgrade(14).effectOrDefault(1))}get purchases(){return this.data.baseAmount/10}get purchaseCap(){if(Enslaved.isRunning)return 1;const e=Ra.unlocks.improvedECRewards.isUnlocked&&EternityChallenge(12).completions>=1&&!Pelle.isDoomed?EternityChallenge(12).vReward.effectValue:1;let t=8==this.tier?1e10:_ie.totalDimCap**e;return player.timestudy.studies.includes(310)&&(t=8==this.tier?1e10*Math.max(Math.log10(Mi.replicanti.value.exponent),1):(1e10*Math.max(Math.log10(Mi.replicanti.value.exponent),1))**e),t}get isCapped(){return this.purchases>=this.purchaseCap}get hardcapIPAmount(){return this._baseCost.times(Decimal.pow(this.costMultiplier,this.purchaseCap))}get continuumValue(){if(Pelle.isDoomed)return 0;if(!this.isUnlocked)return 0;if(!Ra.continuumActive)return 0;const e=Mi.infinityPoints.value.log10(),t=Math.log10(this.costMultiplier),i=this.baseCost.log10();let a=(e-i)/t;return a*=1+.1*Laitela.matterExtraPurchaseFactor,a=Math.clampMax(a,this.purchaseCap),Math.clampMin(a,0)}get totalAmount(){return this.amount.max(10*this.continuumValue)}resetAmount(){this.amount=new Decimal(this.baseAmount)}fullReset(){this.cost=new Decimal(this.baseCost),this.amount=b.D0,this.bought=0,this.baseAmount=0,this.isUnlocked=!1}unlock(){return!!this.isUnlocked||!!this.canUnlock&&(this.isUnlocked=!0,EventHub.dispatch(GAME_EVENT.INFINITY_DIMENSION_UNLOCKED,this.tier),1!==this.tier||PlayerProgress.eternityUnlocked()||Tab.dimensions.infinity.show(),!0)}buySingle(){if(!this.isUnlocked)return this.unlock();if(!this.isAvailableForPurchase)return!1;if(ImaginaryUpgrade(15).isLockingMechanics){const e=1===this.tier?"purchase a 1st Infinity Dimension":"purchase a Dimension which will produce 1st IDs";return ImaginaryUpgrade(15).tryShowWarningModal(e),!1}return Mi.infinityPoints.purchase(this.cost),this.cost=Decimal.round(this.cost.times(this.costMultiplier)),this.amount=this.amount.plus(10),this.baseAmount+=10,EternityChallenge(8).isRunning&&(player.eterc8ids-=1),!0}buyMax(e){if(!this.isAvailableForPurchase)return!1;if(ImaginaryUpgrade(15).isLockingMechanics){const t=1===this.tier?"purchase a 1st Infinity Dimension":"purchase a Dimension which will produce 1st IDs";return e||ImaginaryUpgrade(15).tryShowWarningModal(t),!1}let t=this.purchaseCap-this.purchases;EternityChallenge(8).isRunning&&(t=Math.clampMax(t,player.eterc8ids));const i=new LinearCostScaling(Mi.infinityPoints.value,this.cost,this.costMultiplier,t);return!(i.purchases<=0)&&(Mi.infinityPoints.purchase(i.totalCost),this.cost=this.cost.times(i.totalCostMultiplier),this.amount=this.amount.plus(10*i.purchases),this.baseAmount+=10*i.purchases,EternityChallenge(8).isRunning&&(player.eterc8ids-=i.purchases),!0)}}const Aie=Cie.createAccessor(),_ie={all:Aie.index.compact(),HARDCAP_PURCHASES:2e6,unlockNext(){Aie(8).isUnlocked||this.next().unlock()},next(){if(Aie(8).isUnlocked)throw"All Infinity Dimensions are unlocked";return this.all.first((e=>!e.isUnlocked))},resetAmount(){Mi.infinityPower.reset();for(const e of _ie.all)e.resetAmount()},fullReset(){for(const e of _ie.all)e.fullReset()},get capIncrease(){return Math.floor(Tesseracts.capIncrease())},get totalDimCap(){let e=this.HARDCAP_PURCHASES+this.capIncrease;return player.timestudy.studies.includes(310)&&(e*=Math.max(Math.log10(Mi.replicanti.value.exponent),1)),e},canBuy(){return!EternityChallenge(2).isRunning&&!EternityChallenge(10).isRunning&&(!EternityChallenge(8).isRunning||player.eterc8ids>0)},canAutobuy(){return this.canBuy()&&!EternityChallenge(8).isRunning},tick(e){for(let t=8;t>1;t--)Aie(t).produceDimensions(Aie(t-1),new Decimal(e).div(10));EternityChallenge(7).isRunning?NormalChallenge(10).isRunning||Aie(1).produceDimensions(AntimatterDimension(7),e):Aie(1).produceCurrency(Mi.infinityPower,e),player.requirementChecks.reality.maxID1=player.requirementChecks.reality.maxID1.clampMin(Aie(1).amount)},tryAutoUnlock(){if(EternityMilestone.autoUnlockID.isReached&&!Aie(8).isUnlocked)for(const e of this.all)if(!e.unlock())break},buyMax(){const e=this.all.filter((e=>e.unlock()));e.slice().reverse().forEach((e=>{0===e.purchases&&e.buySingle()})),e.forEach((e=>e.buyMax(!1)))},get powerConversionRate(){const e=Ra.unlocks.relicShardBoost.isUnlocked?1+Math.max(1,Decimal.max(Mi.relicShards.value,1).log10())/1e3:0,t=Ra.unlocks.improvedIpowConversion.isUnlocked?Math.log10(Math.max(Tesseracts.effectiveCount,1)):0,i=Ra.unlocks.infinityPowerConversionBoost.isUnlocked?.25*Math.floor(Ra.pets.laitela.level/10):0,a=TimeStudy(402).isBought?TimeStudy(402).effectOrDefault(0):0;let n=PelleRifts.paradox.milestones[2].effectOrDefault(1);return player.mending.corruptionChallenge.corruptedMend&&(n/=ye.galWeak.hiddenEight[player.mending.corruption[3]]),(7+getAdjustedGlyphEffect("infinityrate")+PelleUpgrade.infConversion.effectOrDefault(0)+e+t+i+a)*n}};function Sie(e,t=!1){const i=Bie(e);if(Bie(e).bought>=Bie(e).purchaseCap)return!1;if(e>4){if(!TimeStudy.timeDimension(e).isBought)return!1;if(RealityUpgrade(13).isLockingMechanics&&Currency.eternityPoints.gte(i.cost))return t||RealityUpgrade(13).tryShowWarningModal(),!1}return!Currency.eternityPoints.lt(i.cost)&&(!(Enslaved.isRunning&&i.bought>0)&&(ImaginaryUpgrade(15).isLockingMechanics&&EternityChallenge(7).completions>0?(t||ImaginaryUpgrade(15).tryShowWarningModal("purchase a Time Dimension,\n which will produce Infinity Dimensions through EC7"),!1):(Currency.eternityPoints.subtract(i.cost),i.amount=i.amount.plus(1),i.bought+=1,i.cost=i.nextCost(i.bought),Bie(e).bought>Bie(e).purchaseCap&&(Bie(e).bought=Bie(e).purchaseCap),!0)))}function Die(){for(const e of Nie.all)e.amount=new Decimal(e.bought);Gie()}function Rie(){for(const e of Nie.all)e.cost=new Decimal(e.baseCost),e.amount=b.D0,e.bought=0}function Mie(){const e=Autobuyer.timeDimension(1).isActive;for(let t=1;t<9;t++)Autobuyer.timeDimension(t).isActive=!e}function Iie(e,t=1,i=!1){const a=Currency.eternityPoints.value.times(t),n=Bie(e);if(a.lt(n.cost))return!1;if(Bie(e).bought>=Bie(e).purchaseCap)return!1;if(e>4){if(!TimeStudy.timeDimension(e).isBought)return!1;if(RealityUpgrade(13).isLockingMechanics)return i||RealityUpgrade(13).tryShowWarningModal(),!1}if(ImaginaryUpgrade(15).isLockingMechanics&&EternityChallenge(7).completions>0)return i||ImaginaryUpgrade(15).tryShowWarningModal("purchase a Time Dimension,\n which will produce Infinity Dimensions through EC7"),!1;if(Enslaved.isRunning)return Sie(e);let s=null;try{s=bulkBuyBinarySearch(a,{costFunction:e=>n.nextCost(e),cumulative:!0,firstCost:n.cost},n.bought)}catch(r){return n.bought=Bie(8).purchaseCap,!0}return!!s&&(Currency.eternityPoints.subtract(s.purchasePrice),n.amount=n.amount.plus(s.quantity),n.bought+=s.quantity,n.cost=n.nextCost(n.bought),Bie(e).bought>Bie(e).purchaseCap&&(Bie(e).bought=Bie(e).purchaseCap),!0)}function xie(){for(let t=8;t>0&&0===Bie(t).bought;t--)Sie(t,!0);for(let t=8;t>0;t--)Iie(t,.01,!0);const e=Nie.all.filter((e=>e.isUnlocked));for(let t=0;t<1e3;t++){const t=e.reduce(((e,t)=>t.cost.gte(e.cost)?e:t));if(!Sie(t.tier,!0))break}}function Pie(){let e=new Decimal(ShopPurchase.allDimPurchases.currentMult).timesEffectsOf(Achievement(105),Achievement(128),TimeStudy(93),TimeStudy(103),TimeStudy(151),TimeStudy(221),TimeStudy(301),EternityChallenge(10).reward,EternityUpgrade.tdMultAchs,EternityUpgrade.tdMultTheorems,EternityUpgrade.tdMultRealTime,Replicanti.areUnlocked&&Replicanti.amount.gt(1)?DilationUpgrade.tdMultReplicanti:null,Pelle.isDoomed?null:RealityUpgrade(22),AlchemyResource.dimensionality,PelleRifts.chaos);return EternityChallenge(1).completions>=1&&(e=e.timesEffectsOf(EternityChallenge(1).reward)),EternityChallenge(10).completions>=1&&(e=e.timesEffectsOf(EternityChallenge(10).reward)),EternityChallenge(9).isRunning&&(e=e.times(Decimal.pow(Math.clampMin(Currency.infinityPower.value.pow(InfinityDimensions.powerConversionRate/7).log2(),1),4).clampMin(1))),Ra.unlocks.relicShardBoost.isUnlocked&&(e=e.pow(1+Currency.relicShards.value.clampMin(1).log10()/1337)),Ra.unlocks.improvedECRewards.isUnlocked&&EternityChallenge(1).completions>=1&&!Pelle.isDoomed&&(e=e.pow(EternityChallenge(1).vReward.effectValue)),Ra.unlocks.improvedECRewards.isUnlocked&&EternityChallenge(10).completions>=1&&!Pelle.isDoomed&&(e=e.pow(EternityChallenge(10).vReward.effectValue)),Ra.unlocks.vAchMilestone2AffectsIDsAndTDs.isUnlocked&&(e=e.pow(VUnlocks.adPow.effectOrDefault(1),.5)),e}function Gie(){for(let e=1;e<=8;e++){const t=Bie(e);t.cost=t.nextCost(t.bought)}}class Uie extends jZ{constructor(e){super((()=>player.dimensions.time),e);const t=[null,b.D1,b.D5,b.E2,b.E3,b.E2350,b.E2650,b.E3000,b.E3350];this._baseCost=t[e];const i=[null,3,9,27,81,24300,72900,218700,656100];this._costMultiplier=i[e];const a=[null,7322,4627,3382,2665,833,689,562,456];this._e6000ScalingAmount=a[e];const n=[Decimal.NUMBER_MAX_VALUE,b.E1300,b.E6000];this._costIncreaseThresholds=n}get cost(){return this.data.cost}set cost(e){this.data.cost=e}nextCost(e){if(this._tier>4&&e4?n.div("1e2250").pow(.5):n}get isUnlocked(){return this._tier<5||TimeStudy.timeDimension(this._tier).isBought}get isAvailableForPurchase(){return this.isAffordable}get isAffordable(){return Currency.eternityPoints.gte(this.cost)}get multiplier(){const e=this._tier;if(EternityChallenge(11).isRunning)return b.D1;let t=GameCache.timeDimensionCommonMultiplier.value.timesEffectsOf(1===e?TimeStudy(11):null,1===e?TimeStudy(413):null,3===e?TimeStudy(73):null,4===e?TimeStudy(227):null,TimeStudy(313));const i=Bie(e),a=Ra.continuumActive?i.continuumValue:i.bought;let n=!Ra.unlocks.uncap8TdPurchaseMult.isUnlocked&&8===e;const s=n?Math.clampMax(a,1e8):a;return t=t.times(Decimal.pow(i.powerMultiplier,s)),t=t.pow(getAdjustedGlyphEffect("timepow")),t=t.pow(getAdjustedGlyphEffect("effarigdimensions")),t=t.pow(getAdjustedGlyphEffect("curseddimensions")),t=t.powEffectOf(AlchemyResource.time),t=t.pow(Ra.momentumValue),t=t.pow(ImaginaryUpgrade(11).effectOrDefault(1)),t=t.powEffectOf(PelleRifts.paradox),(player.dilation.active||PelleStrikes.dilation.hasStrike)&&(t=dilatedValueOf(t)),Effarig.isRunning?t=Effarig.multiplier(t):V.isRunning?t=t.pow(.5):V.isSuperRunning&&(t=t.pow(1e-6)),player.mending.corruptionChallenge.corruptedMend&&(t=t.pow(ye.soF.tdpow[player.mending.corruption[9]]),eu(25).isBought&&player.mending.corruption[9]>=4&&(t=t.pow(eu(25).effectOrDefault(1)))),t}get productionPerSecond(){if(EternityChallenge(1).isRunning||EternityChallenge(10).isRunning||Laitela.isRunning&&this.tier>Laitela.maxAllowedDimension)return b.D0;if(EternityChallenge(11).isRunning)return this.totalAmount;let e=this.totalAmount.times(this.multiplier);return EternityChallenge(7).isRunning&&(e=e.times(Tickspeed.perSecond)),1!==this._tier||EternityChallenge(7).isRunning||(e=e.pow(getAdjustedGlyphEffect("timeshardpow"))),e}get rateOfChange(){const e=this._tier;let t=b.D0;8===e?Ra.unlocks.improvedECRewards.isUnlocked&&EternityChallenge(7).vReward.applyEffect((e=>t=e)):t=Bie(e+1).productionPerSecond;const i=Decimal.max(this.totalAmount,1);return t.times(10).dividedBy(i).times(getGameSpeedupForDisplay())}get isProducing(){const e=this.tier;return!(EternityChallenge(1).isRunning||EternityChallenge(10).isRunning||Laitela.isRunning&&e>Laitela.maxAllowedDimension)&&this.totalAmount.gt(0)}get baseCost(){return this._baseCost}get costMultiplier(){return this._costMultiplier}get powerMultiplier(){return b.D4.timesEffectsOf(8===this._tier?GlyphSacrifice.time:null).pow(ImaginaryUpgrade(14).effectOrDefault(1))}get e6000ScalingAmount(){return this._e6000ScalingAmount}get costIncreaseThresholds(){return this._costIncreaseThresholds}get requirementReached(){return this._tier<5||TimeStudy.timeDimension(this._tier).isAffordable&&TimeStudy.timeDimension(this._tier-1).isBought}get purchaseCap(){let e=5e14;return player.timestudy.studies.includes(310)&&(e*=Math.max(Math.sqrt(Math.log10(Currency.replicanti.value.exponent+1)),1)),e}get isCapped(){return this.bought>=this.purchaseCap}get continuumValue(){if(Pelle.isDoomed)return 0;if(!this.isUnlocked)return 0;if(!Ra.continuumActive)return 0;const e=[null,647,323,214,160,0,0,0,0][this.tier],t=[null,1991,1150,808,623,0,0,0,0][this.tier],i=this.e6000ScalingAmount,a=this.costMultiplier,n=Currency.eternityPoints.value.log10();let s=Math.log10(a),r=this.baseCost.log10(),o=(n-r)/s;return this.tier<5&&(o>e&&(s=Math.log10(1.5*a),r=this.nextCost(e).log10(),o=e+(n-r)/s),o>t&&(s=Math.log10(2.2*a),r=this.nextCost(e).log10(),o=t+(n-r)/s)),o=Math.min(o,(o-i)/Nie.scalingPast1e6000+i),o*=1+Laitela.matterExtraPurchaseFactor,o=Math.clampMax(o,this.purchaseCap),Math.clampMin(o,0)}get totalAmount(){return this.amount.max(this.continuumValue)}tryUnlock(){this.isUnlocked||TimeStudy.timeDimension(this._tier).purchase()}}const Bie=Uie.createAccessor(),Nie={all:Bie.index.compact(),get scalingPast1e6000(){return 4},tick(e){for(let t=8;t>1;t--)Bie(t).produceDimensions(Bie(t-1),new Decimal(e).div(10));EternityChallenge(7).isRunning?Bie(1).produceDimensions(InfinityDimension(8),e):Bie(1).produceCurrency(Currency.timeShards,e),EternityChallenge(7).completions>=1&&EternityChallenge(7).reward.applyEffect((t=>{InfinityDimension(8).amount=InfinityDimension(8).amount.plus(t.times(new Decimal(e).div(1e3)))}))}};function Oie(){if(!Bie(8).isUnlocked)for(let e=5;e<=8;++e)Bie(e).isUnlocked||Bie(e).tryUnlock()}function Lie(e,t=!1){const i=jie(e);return!Currency.mendingPoints.lt(i.cost)&&(Currency.mendingPoints.subtract(i.cost),i.amount=i.amount.plus(1),i.bought+=1,i.cost=i.nextCost(i.bought),!0)}function Fie(){for(const e of Xie.all)e.amount=new Decimal(e.bought);Yie()}function $ie(){for(const e of Xie.all)e.cost=new Decimal(e.baseCost),e.amount=b.D0,e.bought=0}function Hie(e,t=1,i=!1){const a=Currency.mendingPoints.value.times(t),n=jie(e);if(a.lt(n.cost))return!1;let s=null;try{s=bulkBuyBinarySearch(a,{costFunction:e=>n.nextCost(e),cumulative:!0,firstCost:n.cost},n.bought)}catch(r){return n.bought=1e15,!0}return!!s&&(Currency.mendingPoints.subtract(s.purchasePrice),n.amount=n.amount.plus(s.quantity),n.bought+=s.quantity,n.cost=n.nextCost(n.bought),!0)}function qie(){for(let t=8;t>0&&0===jie(t).bought;t--)Lie(t,!0);for(let t=8;t>0;t--)Hie(t,.01,!0);const e=Xie.all;for(let t=0;t<1e3;t++){const t=e.reduce(((e,t)=>t.cost.gte(e.cost)?e:t));if(!Lie(t.tier,!0))break}}function Vie(){let e=new Decimal(1);return e}function Yie(){for(let e=1;e<=8;e++){const t=jie(e);t.cost=t.nextCost(t.bought)}}class Wie extends jZ{constructor(e){super((()=>player.dimensions.multiversal),e);const t=[null,new Decimal(1e25),new Decimal(1e55),new Decimal(1e105),new Decimal(1e215),new Decimal("1e333"),new Decimal("1e456"),new Decimal("1e678"),new Decimal("9.99e999")];this._baseCost=t[e];const i=[null,10,50,250,1250,6250,3125,156250,781250];this._costMultiplier=i[e];const a=[null,5e3,5e3,5e3,5e3,5e3,5e3,5e3,5e3];this._e6000ScalingAmount=a[e];const n=[new Decimal("1e2000"),new Decimal("1e8000"),new Decimal("1e22000")];this._costIncreaseThresholds=n}get cost(){return this.data.cost}set cost(e){this.data.cost=e}nextCost(e){if(this._tier>4&&e=this.purchaseCap}get totalAmount(){return this.amount}get galaxyBoost(){let e=player.galBoostPoints.pow(1/player.galBoostPoints.log10()**.8).div(100).add(1).toNumber();return Xw(9).isBought&&(e=player.galBoostPoints.pow(1/player.galBoostPoints.log10()**.775).div(100).add(1).add(Math.sqrt(player.galBoostPoints.log10())/100).toNumber()),e}}const jie=Wie.createAccessor(),Xie={all:jie.index.compact(),get scalingPast1e6000(){return 5},tick(e){for(let t=8;t>1;t--)jie(t).produceDimensions(jie(t-1),new Decimal(e).div(10));jie(1).produceCurrency(Currency.galBoostPoints,e)}};class zie{constructor(e){switch(this.spentTheorems=[0,0],this.invalidStudies=[],this.purchasedStudies=[],this.selectedStudies=[],this.startEC=!1,typeof e){case"string":zie.isValidImportString(e)&&this.attemptBuyArray(this.parseStudyImport(e),!1);break;case"object":this.attemptBuyArray([...e],!1),this.selectedStudies=[...e];break;case"undefined":break;default:throw new Error("Unrecognized input parameter for TimeStudyTree constructor")}}static isValidImportString(e){if(""===e.trim())return!1;let t=e.replaceAll(/ +/g,"");return zie.sets.forEach(((e,i)=>t=t.replaceAll(new RegExp(`${i},?`,"gu"),""))),/^,?(([0-9]{2,3}(\x2D[0-9]{2,3})?)\b,?)*(\|[0-9]{1,2}!?)?$/i.test(t)}static get currentStudies(){const e=player.timestudy.studies.map((e=>TimeStudy(e)));return 0!==player.challenge.eternity.unlocked&&e.push(TimeStudy.eternityChallenge(player.challenge.eternity.unlocked)),e}static getECFromString(e){if(!this.isValidImportString(e))return 0;const t=e.split("|");return t.length<1?0:parseInt(t[1],10)}static commitToGameState(e,t=!0,i=!1){for(const a of e){const e="number"===typeof a?TimeStudy(a):a;e&&!e.isBought&&e.purchase(t),i&&e instanceof ECTimeStudyState&&EternityChallenge(e.id).start(t)}GameCache.currentStudyTree.invalidate()}static get sets(){return new Map([["antimatter",[71,81,91,101]],["infinity",[72,82,92,102]],["time",[73,83,93,103]],["active",[121,131,141]],["passive",[122,132,142]],["idle",[123,133,143]],["light",[221,223,225,227,231,233]],["dark",[222,224,226,228,232,234]],...Ra.unlocks.unlockHardV.canBeApplied?[["triad",[301,302,303,304,305,306,307,308,309,310,311,312,313,321,322,323].slice(0,Ra.unlocks.unlockHardV.effectOrDefault(0))]]:[],...Ra.unlocks.unlockMyriads.canBeApplied?[["myriad",[401,402,403,411,412,413].slice(0,Ra.unlocks.unlockMyriads.effectOrDefault(0))]]:[]])}static truncateInput(e){let t=e.toLowerCase();return this.sets.forEach(((e,i)=>t=t.replace(i,e.join()))),t.replace(/[,\|]$/,"").replaceAll(" ","").replace(/,{2,}/g,",").replace(/,\|/g,"|")}static formatStudyList(e){const t=e.toLowerCase().replaceAll(" ","");return t.replaceAll(",",", ").replace("|"," | ")}parseStudyImport(e){const t=GameDatabase.eternity.timeStudies.normal.map((e=>e.id)),i=[],a=zie.truncateInput(e).split("|")[0];if(a.length){const e=a.split(",");for(const a of e){const e=a.split("-"),n=e[1]?this.studyRangeToArray(e[0],e[1]):e;for(const a of n)if(t.includes(parseInt(a,10))){const e=TimeStudy(a);this.selectedStudies.push(e),i.push(e)}else this.invalidStudies.push(a)}}const n=e.split("|")[1];if(this.startEC=e.endsWith("!"),!n)return i;const s=parseInt(n,10),r=GameDatabase.eternity.timeStudies.ec;return r.map((e=>e.id)).includes(s)||0===s?(0!==s&&i.push(TimeStudy.eternityChallenge(s)),i):(this.invalidStudies.push(`EC${s}`),i)}studyRangeToArray(e,t){const i=[],a=this.checkTimeStudyNumber(e),n=this.checkTimeStudyNumber(t);if(0!==a&&0!==n)for(let s=a;s<=n;s++)TimeStudy(s)&&i.push(s);return i}checkTimeStudyNumber(e){const t=parseFloat(e);return!TimeStudy(t)||TimeStudy(t).isTriad&&!Ra.canBuyTriad?0:t}attemptBuyArray(e,t){for(const i of e){const e="object"===typeof i?i:TimeStudy(i);this.hasRequirements(e)&&this.buySingleStudy(e,t)}}hasRequirements(e,t=!1){if(!e||this.purchasedStudies.includes(e))return!1;const i=e=>"number"===typeof e?this.purchasedStudies.includes(TimeStudy(e)):e(),a=e.config;let n;switch(a.reqType){case TS_REQUIREMENT_TYPE.AT_LEAST_ONE:n=a.requirement.some((e=>i(e)));break;case TS_REQUIREMENT_TYPE.ALL:n=a.requirement.every((e=>i(e)));break;case TS_REQUIREMENT_TYPE.DIMENSION_PATH:n=a.requirement.every((e=>i(e)))&&this.currDimPathCounte instanceof ECTimeStudyState)))return!1;const a=!Perk.studyECRequirement.isBought&&(null===(s=e.config.secondary.forbiddenStudies)||void 0===s?void 0:s.some((e=>i(e))));if(t)return n&&!a;const r=Currency.timeTheorems.value.subtract(this.spentTheorems[0]).gte(e.cost),o=Perk.studyECRequirement.isBought||e.isEntryGoalMet;return n&&!a&&(e.isBought||o&&r)}return n}buySingleStudy(e,t){const i=e.config,a=VUnlocks.raUnlock.effectOrDefault(0),n=i.STCost&&i.requiresST.some((e=>this.purchasedStudies.includes(TimeStudy(e))))?Math.clampMin(i.STCost-a,0):0,s=Pelle.isDoomed?0:V.spaceTheorems,r=this.spentTheorems[1]+n<=s;if(t){const e=Currency.timeTheorems.value.add(GameCache.currentStudyTree.value.spentTheorems[0]).clampMax(Number.MAX_VALUE).toNumber(),t=this.spentTheorems[0]+i.cost<=e;if(!t||!r)return}0===s&&n>0||(this.spentTheorems[0]+=i.cost,this.spentTheorems[1]+=n,this.purchasedStudies.push(e))}get currDimPathCount(){return[71,72,73].countWhere((e=>this.purchasedStudies.includes(TimeStudy(e))))}get allowedDimPathCount(){return DilationUpgrade.timeStudySplit.isBought?3:this.purchasedStudies.includes(TimeStudy(201))?2:1}get dimensionPaths(){const e=new Set,t=[TIME_STUDY_PATH.ANTIMATTER_DIM,TIME_STUDY_PATH.INFINITY_DIM,TIME_STUDY_PATH.TIME_DIM];for(const i of t){const t=NormalTimeStudies.pathList.find((e=>e.path===i));for(const i of this.purchasedStudies)if(t.studies.includes(i.id)){e.add(t.name);break}}return Array.from(e)}get pacePaths(){const e=new Set,t=[TIME_STUDY_PATH.ACTIVE,TIME_STUDY_PATH.PASSIVE,TIME_STUDY_PATH.IDLE];for(const i of t){const t=NormalTimeStudies.pathList.find((e=>e.path===i));for(const i of this.purchasedStudies)if(t.studies.includes(i.id)){e.add(t.name);break}}return Array.from(e)}get ec(){const e=this.purchasedStudies.find((e=>e instanceof ECTimeStudyState));return e?e.id:0}get exportString(){return`${this.purchasedStudies.filter((e=>e instanceof NormalTimeStudyState)).map((e=>e.id)).join(",")}|${this.ec}${0===player.challenge.eternity.current?"":"!"}`}}class Kie extends ip{constructor(e){super(e,TIME_STUDY_TYPE.ETERNITY_CHALLENGE),this.invalidateRequirement()}get isBought(){return player.challenge.eternity.unlocked===this.id}purchase(e){if(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked())return!1;EternityChallenge(this.id).hasUnlocked=!0;const t=Date.now();if(this.isBought&&0===player.challenge.eternity.current&&!e)t-ui.lastClickTime<750?(ui.lastClickTime=0,EternityChallenge(this.id).requestStart()):ui.lastClickTime=t;else if(!this.isBought&&this.canBeBought)return ui.lastClickTime=0,player.challenge.eternity.unlocked=this.id,e||Tab.challenges.eternity.show(),player.challenge.eternity.requirementBits|=1<sp(e).isBought))&&this.allSecondaryRequirementsMet))}get challenge(){return EternityChallenge(this.id)}get requirementTotal(){return this.config.secondary.required(this.challenge.completions)}get requirementCurrent(){const e=this.config.secondary.current();return void 0===this.cachedCurrentRequirement?this.cachedCurrentRequirement=e:this.cachedCurrentRequirement="number"===typeof e?Math.max(this.cachedCurrentRequirement,e):this.cachedCurrentRequirement.clampMin(e),this.cachedCurrentRequirement}get allSecondaryRequirementsMet(){return Perk.studyECRequirement.isBought||!this.hasForbiddenStudies&&this.isEntryGoalMet}get hasForbiddenStudies(){var e;return null===(e=this.config.secondary.forbiddenStudies)||void 0===e?void 0:e.some((e=>sp(e).isBought))}get isEntryGoalMet(){if(this.wasRequirementPreviouslyMet)return!0;if(this.config.secondary.forbiddenStudies)return!0;const e=this.requirementCurrent,t=this.requirementTotal;return"number"===typeof e?e>=t:e.gte(t)}get wasRequirementPreviouslyMet(){return 11!==this.id&&12!==this.id&&0!==(player.challenge.eternity.requirementBits&1<new Kie(e))),sp.eternityChallenge=function(e){return Kie.studies[e]},sp.eternityChallenge.current=function(){return player.challenge.eternity.unlocked?sp.eternityChallenge(player.challenge.eternity.unlocked):void 0},Kie.invalidateCachedRequirements=function(){Kie.studies.forEach((e=>e.invalidateRequirement()))};class Zie extends ip{constructor(e){super(e,TIME_STUDY_TYPE.DILATION)}get isBought(){return player.dilation.studies.includes(this.id)}get canBeBought(){return this.isAffordable&&this.config.requirement()}get description(){return this.config.description}get cost(){return"function"===typeof this.config.cost?this.config.cost():this.config.cost}get totalTimeTheoremRequirement(){return 1===this.id?12900:0}purchase(e=!1){if(this.isBought||!this.canBeBought)return!1;if(1===this.id){if(e||Tab.eternity.dilation.show(),Perk.autounlockDilation1.canBeApplied)for(const e of[4,5,6])player.dilation.upgrades.add(e);if(Perk.autounlockDilation2.canBeApplied){for(const e of[7,8,9])player.dilation.upgrades.add(e);MendingMilestone.two.isReached&&(player.dilation.upgrades.add(14),player.dilation.upgrades.add(15))}Pelle.isDoomed||Currency.tachyonParticles.bumpTo(Perk.startTP.effectOrDefault(0)),!Ra.unlocks.unlockDilationStartingTP.canBeApplied||isInCelestialReality()||Pelle.isDoomed||Currency.tachyonParticles.bumpTo(getTP(Ra.unlocks.unlockDilationStartingTP.effectOrDefault(0),!1)),TabNotification.dilationAfterUnlock.tryTrigger()}return 6===this.id&&(PlayerProgress.realityUnlocked()||(Modal.message.show(`Reality Machine gain for your first Reality is reduced above ${format("1e6000")} Eternity\n Points and capped at ${format("1e8000")} Eternity Points. This is due to balance changes made in the Reality\n update which affect the difficulty of reaching those amounts, such as the increased Time Dimension cost\n scaling above ${format("1e6000")}.`,{},3),EventHub.dispatch(GAME_EVENT.REALITY_FIRST_UNLOCKED)),Perk.autounlockReality.isBought||Tab.reality.glyphs.show()),player.dilation.studies.push(this.id),Currency.timeTheorems.subtract(this.cost),!0}}Zie.studies=mapGameData(GameDatabase.eternity.timeStudies.dilation,(e=>new Zie(e))),sp.dilation=Zie.studies[1],sp.timeDimension=function(e){return Zie.studies[e-3]},sp.reality=Zie.studies[6],sp.boughtDilationTS=function(){return player.dilation.studies.map((e=>Zie.studies[e]))};class Qie{constructor(e,t,i){this._from=e,this._to=t,this._override=i}get from(){return this._from}get to(){return this._to}get isOverridden(){return void 0!==this._override&&this._override()}get isSatisfied(){return this.isOverridden||this._from.isBought}}sp.allConnections=function(){const e=e=>sp(e),t=e=>sp.eternityChallenge(e),i=[[e(11),e(21)],[e(11),e(22)],[e(21),e(31)],[e(22),e(33)],[e(22),e(32)],[e(31),e(41)],[e(32),e(42)],[e(41),e(51)],[e(42),e(51)],[e(42),t(5)],[e(42),e(62),()=>!Perk.bypassEC5Lock.isBought],[e(51),e(61)],[t(5),e(62),()=>Perk.bypassEC5Lock.isBought],[e(61),e(71)],[e(61),e(72)],[e(61),e(73)],[e(71),e(81)],[e(72),e(82)],[e(73),e(83)],[e(81),e(91)],[e(82),e(92)],[e(83),e(93)],[e(91),e(101)],[e(92),e(102)],[e(93),e(103)],[e(101),e(111)],[e(102),e(111)],[e(103),e(111)],[e(111),t(7)],[e(111),e(121)],[e(111),e(122)],[e(111),e(123)],[e(121),e(131)],[e(122),e(132)],[e(123),e(133)],[e(121),t(6)],[e(123),t(8)],[e(131),e(141)],[e(132),e(142)],[e(133),e(143)],[e(141),e(151)],[e(142),e(151)],[e(143),e(151)],[e(143),t(4)],[e(151),t(9)],[e(151),e(161)],[e(151),e(162)],[e(161),e(171)],[e(162),e(171)],[e(171),t(1)],[e(171),t(2)],[e(171),t(3)],[e(171),e(181),()=>!Perk.bypassEC1Lock.isBought||!Perk.bypassEC2Lock.isBought||!Perk.bypassEC3Lock.isBought],[t(1),e(181),()=>Perk.bypassEC1Lock.isBought],[t(2),e(181),()=>Perk.bypassEC2Lock.isBought],[t(3),e(181),()=>Perk.bypassEC3Lock.isBought],[e(181),t(10)],[t(10),e(191)],[t(10),e(192)],[t(10),e(193)],[e(192),e(201)],[e(191),e(211)],[e(191),e(212)],[e(193),e(213)],[e(193),e(214)],[e(211),e(221)],[e(211),e(222)],[e(212),e(223)],[e(212),e(224)],[e(213),e(225)],[e(213),e(226)],[e(214),e(227)],[e(214),e(228)],[e(221),e(231)],[e(222),e(231)],[e(223),e(232)],[e(224),e(232)],[e(225),e(233)],[e(226),e(233)],[e(227),e(234)],[e(228),e(234)],[e(231),t(11)],[e(232),t(11)],[e(233),t(12)],[e(234),t(12)],[t(11),sp.dilation],[t(12),sp.dilation],[e(21),e(305),()=>UZ.unlocks.unlockHardV>=5],[e(41),e(306),()=>UZ.unlocks.unlockHardV>=6],[e(101),e(311),()=>UZ.unlocks.unlockHardV>=7],[e(102),e(312),()=>UZ.unlocks.unlockHardV>=8],[e(103),e(313),()=>UZ.unlocks.unlockHardV>=9],[e(111),e(307),()=>UZ.unlocks.unlockHardV>=10],[e(141),e(321),()=>UZ.unlocks.unlockHardV>=11],[e(142),e(322),()=>UZ.unlocks.unlockHardV>=12],[e(143),e(323),()=>UZ.unlocks.unlockHardV>=13],[e(151),e(308),()=>UZ.unlocks.unlockHardV>=14],[e(171),e(309),()=>UZ.unlocks.unlockHardV>=15],[e(192),e(310),()=>UZ.unlocks.unlockHardV>=16],[sp.dilation,sp.timeDimension(5)],[sp.timeDimension(5),sp.timeDimension(6)],[sp.timeDimension(6),sp.timeDimension(7)],[sp.timeDimension(7),sp.timeDimension(8)],[sp.timeDimension(8),sp.reality],[sp.reality,e(401)],[sp.reality,e(402)],[sp.reality,e(403)],[e(401),e(411)],[e(402),e(412)],[e(403),e(413)]].map((e=>new Qie(e[0],e[1],e[2])));return i}();class Jie{static get isVisible(){return Achievement(18).isUnlocked||PlayerProgress.realityUnlocked()}static get canSacrifice(){return DimBoost.purchasedBoosts>4&&!EternityChallenge(3).isRunning&&this.nextBoost.gt(1)&&AntimatterDimension(8).totalAmount.gt(0)&&!Enslaved.isRunning}static get disabledCondition(){return NormalChallenge(10).isRunning?"8th Dimensions are disabled":EternityChallenge(3).isRunning?"Eternity Challenge 3":DimBoost.purchasedBoosts<5?`Requires ${formatInt(5)} Dimension Boosts`:AntimatterDimension(8).totalAmount.eq(0)?"No 8th Antimatter Dimensions":this.nextBoost.lte(1)?`${formatX(1)} multiplier`:Player.isInAntimatterChallenge?"Challenge goal reached":"Need to Crunch"}static getSacrificeDescription(e){const t=(t,i)=>t in e?e[t]:i;let i=2,a=1,n=`(log₁₀(AD1)/${formatInt(10)})`;t("Challenge8isRunning",NormalChallenge(8).isRunning)?(i=1,n="x"):t("InfinityChallenge2isCompleted",InfinityChallenge(2).isCompleted)&&(i=1/120,a=3,n="AD1");const s=(1+(t("Achievement32",Achievement(32).isEffectActive)?Achievement(32).config.effect:0)+(t("Achievement57",Achievement(57).isEffectActive)?Achievement(57).config.effect:0))*(1+(t("Achievement88",Achievement(88).isEffectActive)?Achievement(88).config.effect:0)+(t("TimeStudy228",TimeStudy(228).isEffectActive)?TimeStudy(228).config.effect:0))*i;return n+(1===s?"":formatPow(s,a,a))}static get sacrificeExponent(){let e;e=NormalChallenge(8).isRunning?1:InfinityChallenge(2).isCompleted?1/120:2;const t=1+Effects.sum(Achievement(32),Achievement(57)),i=1+Effects.sum(Achievement(88),TimeStudy(228)),a=TimeStudy(304).effectOrDefault(1),n=Ra.unlocks.relicShardBoost.isUnlocked?1+Decimal.log10(Currency.relicShards.value)/1e3:1;let s=e*t*i*a*n;const r=eu(10).effectOrDefault(1);return s**r}static get nextBoost(){const e=AntimatterDimension(1).amount;if(e.eq(0))return b.D1;const t=player.sacrificed.clampMin(1);let i;return i=NormalChallenge(8).isRunning?e.pow(.05).dividedBy(t.pow(.04)).clampMin(1).times(e.pow(.05).dividedBy(t.plus(e).pow(.04))):InfinityChallenge(2).isCompleted?e.dividedBy(t):new Decimal(e.log10()/10/Math.max(t.log10()/10,1)),i.clampMin(1).pow(this.sacrificeExponent)}static get totalBoost(){if(player.sacrificed.eq(0))return b.D1;if(NormalChallenge(8).isRunning)return player.chall8TotalSacrifice;let e;return e=InfinityChallenge(2).isCompleted?player.sacrificed:new Decimal(player.sacrificed.log10()/10),e.clampMin(1).pow(this.sacrificeExponent)}}function eae(){if(!Jie.canSacrifice)return!1;if((!player.break||!InfinityChallenge.isRunning&&NormalChallenge.isRunning)&&Currency.antimatter.gt(Decimal.NUMBER_MAX_VALUE))return!1;if(NormalChallenge(8).isRunning&&Jie.totalBoost.gte(Decimal.NUMBER_MAX_VALUE))return!1;EventHub.dispatch(GAME_EVENT.SACRIFICE_RESET_BEFORE);const e=Jie.nextBoost;player.chall8TotalSacrifice=player.chall8TotalSacrifice.times(e),player.sacrificed=player.sacrificed.plus(AntimatterDimension(1).amount);const t=Achievement(118).canBeApplied;return NormalChallenge(8).isRunning?(t||AntimatterDimensions.reset(),Currency.antimatter.reset()):t||AntimatterDimensions.resetAmountUpToTier(NormalChallenge(12).isRunning?6:7),player.requirementChecks.infinity.noSacrifice=!1,EventHub.dispatch(GAME_EVENT.SACRIFICE_RESET_AFTER),!0}function tae(){Jie.isVisible&&Jie.canSacrifice&&(player.options.confirmations.sacrifice?Modal.sacrifice.show():eae())}function iae(){Hu.display("a-implode",2)}function aae(){const e=Player.antimatterChallenge;if(e||NormalChallenge(1).isCompleted||NormalChallenge(1).complete(),!e)return;const t=InfinityChallenge.isRunning;t&&!InfinityChallenge.current.isCompleted&&TabNotification.ICUnlock.clearTrigger(),e.complete(),e.updateChallengeTime(),player.options.retryChallenge||(player.challenge.normal.current=0,player.challenge.infinity.current=0)}function nae(){Player.canCrunch&&(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||(!player.options.confirmations.bigCrunch||PlayerProgress.infinityUnlocked()&&!player.break?sae():Modal.bigCrunch.show()))}function sae(e=!1){Player.canCrunch&&(e||!player.options.animations.bigCrunch||Hu.isDisplaying?rae():(iae(),setTimeout(rae,1e3)))}function rae(e=!1,t=Player.isInAntimatterChallenge&&player.options.retryChallenge){(e||Player.canCrunch)&&(Player.canCrunch&&(EventHub.dispatch(GAME_EVENT.BIG_CRUNCH_BEFORE),oae(),Pelle.isDoomed&&PelleStrikes.infinity.trigger()),uae(t),EventHub.dispatch(GAME_EVENT.BIG_CRUNCH_AFTER))}function oae(){lae();const e=gainedInfinityPoints();Currency.infinityPoints.add(e),Currency.infinities.add(gainedInfinities().round()),cae(!PlayerProgress.infinityUnlocked()),dae()}function lae(){player.records.bestInfinity.bestIPminEternity=player.records.bestInfinity.bestIPminEternity.clampMin(player.records.thisInfinity.bestIPmin),player.records.thisInfinity.bestIPmin=b.D0,player.records.thisEternity.bestInfinitiesPerMs=player.records.thisEternity.bestInfinitiesPerMs.clampMin(gainedInfinities().round().dividedBy(Math.clampMin(33,player.records.thisInfinity.realTime)));const e=gainedInfinityPoints();if(addInfinityTime(player.records.thisInfinity.time,player.records.thisInfinity.realTime,e,gainedInfinities().round()),player.records.bestInfinity.time=Decimal.min(player.records.bestInfinity.time,player.records.thisInfinity.time),player.records.bestInfinity.realTime=Math.min(player.records.bestInfinity.realTime,player.records.thisInfinity.realTime),player.requirementChecks.reality.noInfinities=!1,!player.requirementChecks.infinity.maxAll){const t=e.dividedBy(Decimal.clampMin(33,player.records.thisInfinity.realTime));player.records.thisEternity.bestIPMsWithoutMaxAll=Decimal.max(t,player.records.thisEternity.bestIPMsWithoutMaxAll)}}function cae(e){const t=player.records.bestInfinity.time.gt(6e4)&&!player.break,i=Player.isInAntimatterChallenge;aae(),e?Tab.infinity.upgrades.show():(t||i&&!player.options.retryChallenge)&&Tab.dimensions.antimatter.show()}function uae(e){const t=Replicanti.amount,i=player.replicanti.galaxies;hae(e);let a=0;Achievement(95).isUnlocked&&!Pelle.isDoomed&&(Replicanti.amount=t,a+=Math.min(i,1)),TimeStudy(33).isBought&&!Pelle.isDoomed&&(a+=Math.floor(i/2)),PelleUpgrade.replicantiGalaxyNoReset.canBeApplied&&(a=i),player.replicanti.galaxies=Math.min(Math.clampMax(a,i),25e4)}function dae(){EternityChallenge(4).tryFail()||Effarig.isRunning&&!EffarigUnlock.infinity.isUnlocked&&(EffarigUnlock.infinity.unlock(),beginProcessReality(getRealityProps(!0)))}function hae(e){player.dimensionBoosts=0,player.galaxies=0,player.records.thisInfinity.maxAM=b.D0,Currency.antimatter.reset(),softReset(0,!0,!0,e),InfinityDimensions.resetAmount(),player.replicanti.unl&&(Replicanti.amount=b.D1),player.replicanti.galaxies=0,player.records.thisInfinity.time=b.D0,player.records.thisInfinity.lastBuyTime=b.D0,player.records.thisInfinity.realTime=0,Player.resetRequirements("infinity"),AchievementTimers.marathon2.reset()}function mae(e){if(InfinityUpgrade.ipGen.isBought){const t=Time.bestInfinity.totalMilliseconds.times(10);let i;e=new Decimal(e),e.gt(new Decimal(1e300).times(t))?i=Decimal.div(e,t):(player.partInfinityPoint+=new Decimal(e).div(t).toNumber(),i=Math.floor(player.partInfinityPoint),player.partInfinityPoint-=i);let a=player.records.bestInfinity.time.gt(Decimal.pow10(1e100))?b.D0:InfinityUpgrade.ipGen.effectValue;Laitela.isRunning&&(a=dilatedValueOf(a));const n=new Decimal(i).times(a);Currency.infinityPoints.add(n)}Currency.infinityPoints.add(BreakInfinityUpgrade.ipGen.effectOrDefault(b.D0).times(new Decimal(e).div(6e4)))}class pae extends A{constructor(e,t){super(e),this._upgrade=t}get isEffectActive(){return this._upgrade.isBought&&this._upgrade.isCharged}}class yae extends D{constructor(e){super(e),e.charged&&(this._chargedEffect=new pae(e.charged,this))}get currency(){return Currency.infinityPoints}get set(){return player.infinityUpgrades}get isAvailableForPurchase(){var e,t,i;return null===(e=null===(t=(i=this.config).checkRequirement)||void 0===t?void 0:t.call(i))||void 0===e||e}get isEffectActive(){return this.isBought&&!this.isCharged}get chargedEffect(){return this._chargedEffect}purchase(){return super.purchase()?(this.config.id.includes("skip")&&skipResetsIfPossible(),EventHub.dispatch(GAME_EVENT.INFINITY_UPGRADE_BOUGHT),!0):!!this.canCharge&&(this.charge(),EventHub.dispatch(GAME_EVENT.INFINITY_UPGRADE_CHARGED),!0)}get hasChargeEffect(){return void 0!==this.config.charged}get isCharged(){return player.celestials.ra.charged.has(this.id)}get canCharge(){return(!player.mending.corruptionChallenge.corruptedMend||!ye.soF.hiddenEight[player.mending.corruption[9]])&&(this.isBought&&this.hasChargeEffect&&!this.isCharged&&0!==Ra.chargesLeft&&!Pelle.isDisabled("chargedInfinityUpgrades"))}charge(){player.celestials.ra.charged.add(this.id)}disCharge(){player.celestials.ra.charged.delete(this.id)}}function fae(){if(Effarig.isRunning&&Effarig.currentStage===EFFARIG_STAGES.INFINITY)return b.D1;let e=b.D1.timesEffectsOf(TimeStudy(41),TimeStudy(51),TimeStudy(141),TimeStudy(142),TimeStudy(143),TimeStudy(305),Achievement(85),Achievement(93),Achievement(116),Achievement(125),Achievement(141).effects.ipGain,bae.ipMult,DilationUpgrade.ipMultDT,GlyphEffect.ipMult);return e=e.times(Replicanti.amount.powEffectOf(AlchemyResource.exponential)),e}function gae(){const e=[bae.totalTimeMult,bae.dim18mult,bae.dim36mult,bae.resetBoost,bae.buy10Mult,bae.dim27mult,bae.dim45mult,bae.galaxyBoost,bae.thisInfinityTimeMult,bae.unspentIPMult,bae.dimboostMult,bae.ipGen];for(const t of e)t.isCharged&&t.disCharge();player.celestials.ra.disCharge=!1,EventHub.dispatch(GAME_EVENT.INFINITY_UPGRADES_DISCHARGED)}class vae extends A{get cost(){return this.purchaseCount>=this.purchasesAtIncrease?this.config.costIncreaseThreshold.times(Decimal.pow(this.costIncrease,this.purchaseCount-this.purchasesAtIncrease)):Decimal.pow(this.costIncrease,this.purchaseCount+1)}get purchaseCount(){return player.IPMultPurchases}get purchasesAtIncrease(){return this.config.costIncreaseThreshold.log10()-1}get hasIncreasedCost(){return this.purchaseCount>=this.purchasesAtIncrease}get costIncrease(){return this.hasIncreasedCost?1e10:10}get isCapped(){return this.cost.gte(this.config.costCap)}get isBought(){return this.isCapped}get isRequirementSatisfied(){return Achievement(41).isUnlocked}get canBeBought(){return!!(Pelle.isDoomed&&Ra.unlocks.unlockPelleIPAndEPMult.isUnlocked&&"ipMult"==this.id&&Currency.infinityPoints.gte(this.cost))||!Pelle.isDoomed&&!this.isCapped&&Currency.infinityPoints.gte(this.cost)&&this.isRequirementSatisfied}purchase(e=1){this.canBeBought&&(TimeStudy(181).isBought||Autobuyer.bigCrunch.bumpAmount(b.D2.pow(e)),Currency.infinityPoints.subtract(Decimal.sumGeometricSeries(e,this.cost,this.costIncrease,0)),player.IPMultPurchases+=e,GameUI.update())}buyMax(){if(this.canBeBought){if(!this.hasIncreasedCost){const e=Currency.infinityPoints.value.clampMax(this.config.costIncreaseThreshold),t=Decimal.affordGeometricSeries(e,this.cost,this.costIncrease,0).toNumber();if(t<=0)return;this.purchase(t)}if(this.hasIncreasedCost){const e=Currency.infinityPoints.value.clampMax(this.config.costCap),t=Decimal.affordGeometricSeries(e,this.cost,this.costIncrease,0).toNumber();if(t<=0)return;this.purchase(t)}}}}const bae=mapGameDataToObject(GameDatabase.infinity.upgrades,(e=>"ipMult"===e.id?new vae(e):new yae(e)));class Eae extends A{constructor(e,t){super(e),this._upgrade=t}get isEffectActive(){return this._upgrade.isBought&&this._upgrade.isCharged}}class Tae extends D{constructor(e){super(e),e.charged&&(this._chargedEffect=new Eae(e.charged,this))}get currency(){return Currency.infinityPoints}get set(){return player.infinityUpgrades}get isEffectActive(){return this.isBought&&!this.isCharged}get chargedEffect(){return this._chargedEffect}onPurchased(){"postGalaxy"===this.id&&(Cm(7).tryComplete(),PelleStrikes.powerGalaxies.trigger())}purchase(){return super.purchase()?(EventHub.dispatch(GAME_EVENT.BREAK_INFINITY_UPGRADE_BOUGHT),!0):!!this.canCharge&&(this.charge(),EventHub.dispatch(GAME_EVENT.BREAK_INFINITY_UPGRADE_CHARGED),!0)}get hasChargeEffect(){return void 0!==this.config.charged}get isCharged(){return player.celestials.ra.breakCharged.has(this.id)}get canCharge(){return(!player.mending.corruptionChallenge.corruptedMend||!ye.soF.hiddenEight[player.mending.corruption[9]])&&(this.isBought&&this.hasChargeEffect&&!this.isCharged&&0!==Ra.breakChargesLeft&&!Pelle.isDisabled("chargedBreakInfinityUpgrades"))}charge(){player.celestials.ra.breakCharged.add(this.id)}disCharge(){player.celestials.ra.breakCharged.delete(this.id)}}function wae(){const e=[Cae.totalAMMult,Cae.currentAMMult,Cae.galaxyBoost,Cae.infinitiedMult,Cae.achievementMult,Cae.slowestChallengeMult,Cae.infinitiedGen,Cae.autobuyMaxDimboosts,Cae.autobuyerSpeed];for(const t of e)t.isCharged&&t.disCharge();player.celestials.ra.breakDischarge=!1,EventHub.dispatch(GAME_EVENT.BREAK_INFINITY_UPGRADES_DISCHARGED)}class kae extends M{get currency(){return Currency.infinityPoints}get boughtAmount(){return player.infinityRebuyables[this.id]}set boughtAmount(e){player.infinityRebuyables[this.id]=e}get isCapped(){return this.boughtAmount===this.config.maxUpgrades}onPurchased(){var e,t;null===(e=(t=this.config).onPurchased)||void 0===e||e.call(t)}}const Cae=mapGameDataToObject(GameDatabase.infinity.breakUpgrades,(e=>e.rebuyable?new kae(e):new Tae(e)));function Aae(e){if(Sae(11).isRunning||InfinityChallenge(6).isRunning){if(AntimatterDimension(2).amount.neq(0)){Currency.matter.bumpTo(1);const t=1.03+Math.clampMax(DimBoost.totalBoosts,400)/200+Math.clampMax(player.galaxies,100)/100;Currency.matter.multiply(Decimal.pow(t,e.div(20)))}if(Currency.matter.gt(Currency.antimatter.value)&&Sae(11).isRunning&&!Player.canCrunch){const e=[Currency.antimatter.value,Currency.matter.value];softReset(0,!0,!0),Modal.message.show(`Your ${format(e[0],2,2)} antimatter was annihilated\n by ${format(e[1],2,2)} matter.`,{closeEvent:GAME_EVENT.BIG_CRUNCH_AFTER},1)}}Sae(3).isRunning&&(player.chall3Pow=player.chall3Pow.times(b.D1_00038.pow(e.div(100).min(1e300).toNumber())).clampMax(Decimal.NUMBER_MAX_VALUE)),Sae(2).isRunning&&(player.chall2Pow=Math.min(player.chall2Pow+e.div(18e4).min(1e300).toNumber(),1)),InfinityChallenge(2).isRunning&&(player.ic2Count>=400?(AntimatterDimension(8).amount.gt(0)&&sacrificeReset(),player.ic2Count%=400):player.ic2Count+=Math.clamp(Date.now()-player.lastUpdate,1,216e5))}class _ae extends A{get isQuickResettable(){return this.config.isQuickResettable}get isRunning(){const e=9!==this.id&&12!==this.id;return player.challenge.normal.current===this.id||e&&InfinityChallenge(1).isRunning}get isOnlyActiveChallenge(){return player.challenge.normal.current===this.id}get isUnlocked(){if(PlayerProgress.eternityUnlocked())return!0;if(0===this.id)return!0;const e=GameDatabase.challenges.normal[this.id-1].lockedAt;return Currency.infinitiesTotal.gte(e)}get isDisabled(){return Pelle.isDoomed}get lockedAt(){return GameDatabase.challenges.normal[this.id].lockedAt}requestStart(){Tab.challenges.isUnlocked&&(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||(player.options.confirmations.challenges?Modal.startNormalChallenge.show(this.id):this.start()))}start(){1===this.id||this.isOnlyActiveChallenge||Tab.challenges.isUnlocked&&(bigCrunchReset(!0,!0),player.challenge.normal.current=this.id,player.challenge.infinity.current=0,Enslaved.isRunning&&EternityChallenge(6).isRunning&&10===this.id&&(EnslavedProgress.challengeCombo.giveProgress(),Enslaved.quotes.ec6C10.show()),Enslaved.isRunning||Tab.dimensions.antimatter.show())}get isCompleted(){return 0!==(player.challenge.normal.completedBits&1<player.challenge.normal.current>0?Sae(player.challenge.normal.current):void 0}),Object.defineProperty(Sae,"isRunning",{get:()=>0!==player.challenge.normal.current});const Dae={all:Sae.index.compact(),completeAll(){for(const e of Dae.all)e.complete()},clearCompletions(){player.challenge.normal.completedBits=0}};function Rae(){if(EternityMilestone.autoIC.isReached){const e=Pae.all.filter((e=>e.isUnlocked&&!e.isCompleted));for(const t of e)t.complete()}}class Mae extends A{constructor(e,t){super(e),this._challenge=t}get isEffectActive(){return this._challenge.isCompleted}}class Iae extends A{constructor(e){super(e),this._reward=new Mae(e.reward,this)}get unlockAM(){return this.config.unlockAM}get isUnlocked(){return player.records.thisEternity.maxAM.gte(this.unlockAM)||Achievement(133).isUnlocked&&!Pelle.isDoomed||PelleUpgrade.keepInfinityChallenges.canBeApplied&&Pelle.cel.records.totalAntimatter.gte(this.unlockAM)}get isRunning(){return player.challenge.infinity.current===this.id}requestStart(){this.isUnlocked&&(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked()||(player.options.confirmations.challenges?Modal.startInfinityChallenge.show(this.id):this.start()))}start(){this.isUnlocked&&!this.isRunning&&(bigCrunchReset(!0,!0),player.challenge.normal.current=0,player.challenge.infinity.current=this.id,Enslaved.isRunning||Tab.dimensions.antimatter.show(),player.break=!0,EternityChallenge.isRunning&&Achievement(115).unlock())}get isCompleted(){return 0!==(player.challenge.infinity.completedBits&1<player.challenge.infinity.current>0?xae(player.challenge.infinity.current):void 0}),Object.defineProperty(xae,"isRunning",{get:()=>void 0!==xae.current});const Pae={all:xae.index.compact(),completeAll(){for(const e of Pae.all)e.complete()},clearCompletions(){player.challenge.infinity.completedBits=0},get nextIC(){return Pae.all.find((e=>!e.isUnlocked))},get nextICUnlockAM(){var e;return null===(e=this.nextIC)||void 0===e?void 0:e.unlockAM},notifyICUnlock(e){if(!EternityMilestone.autoIC.isReached&&void 0!==Pae.nextIC)for(const t of Pae.all)if(!t.isUnlocked&&!t.isCompleted){if(e.lt(t.unlockAM))break;TabNotification.ICUnlock.clearTrigger(),GameUI.notify.infinity(`You have unlocked Infinity Challenge ${t.id}`,7e3),TabNotification.ICUnlock.tryTrigger()}},get completed(){return Pae.all.filter((e=>e.isCompleted))}},Gae={get scaleLog10(){return Math.log10(Number.MAX_VALUE)},get scaleFactor(){return PelleStrikes.eternity.hasStrike&&Wae.amount.gte(b.E2000)&&!pl(10).isBought?10:PelleStrikes.eternity.hasStrike&&Wae.amount.gte(b.E2000)?6:Pelle.isDoomed?2:AlchemyResource.cardinality.effectValue}};function Uae(e){if(player.replicanti.galaxies>25e4)player.replicanti.galaxies=25e4;else if(e>0){let t=player.replicanti.galaxies>25e4?0:e;player.replicanti.galaxies+t<25e4?player.replicanti.galaxies+=t:player.replicanti.galaxies=25e4,player.requirementChecks.eternity.noRG=!1,EternityMilestone.replicantiNoReset.isReached&&!Pelle.isDoomed||(player.dimensionBoosts=0,softReset(0,!0,!0))}}function Bae(e){if(RealityUpgrade(6).isLockingMechanics)return void(e||RealityUpgrade(6).tryShowWarningModal());if(!Wae.galaxies.canBuyMore)return;const t=Wae.galaxies.gain;t<1||(player.replicanti.timer=0,Wae.amount=Achievement(126).isUnlocked&&!Pelle.isDoomed?Decimal.pow10(Wae.amount.log10()-LOG10_MAX_VALUE*t):b.D1,Uae(t))}function Nae(){Wae.galaxies.canBuyMore&&(RealityUpgrade(6).isLockingMechanics?RealityUpgrade(6).tryShowWarningModal():player.options.confirmations.replicantiGalaxy?Modal.replicantiGalaxy.show():Bae(!1))}function Oae(e,t){const i=t&&!RealityUpgrade(6).isLockingMechanics,a=b.E1.pow(e.plus(Wae.amount.log10()));if(e.gt(Number.MAX_VALUE)||a.eq(0))return i&&Uae(Wae.galaxies.max-player.replicanti.galaxies),Wae.amount=$ae(),e;if(!i){const t=e.minus($ae().log10()-Wae.amount.log10()).clampMin(0);return Wae.amount=Decimal.min(a,$ae()),t}const n=Decimal.NUMBER_MAX_VALUE.log10(),s=e.toNumber()+Wae.amount.log10(),r=Math.floor(Math.min(s/n,Wae.galaxies.max-player.replicanti.galaxies)),o=n*r+$ae().log10()-Wae.amount.log10(),l=e.minus(o).clampMin(0);return Wae.amount=Decimal.pow10(s-n*r).clampMax($ae()),Uae(r),l}function Lae(e,t){let i=t||player.replicanti.interval;i=new Decimal(i);const a=Wae.amount,n=void 0===e?a.gt($ae()):e;if((TimeStudy(133).isBought&&!Achievement(138).isUnlocked||n)&&(i=i.times(10)),n){let e=(a.log10()-$ae().log10())/Gae.scaleLog10;PelleStrikes.eternity.hasStrike&&a.gte(b.E2000)&&!pl(10).isBought&&(e-=Math.log10(5)*(2e3-$ae().log10())/Gae.scaleLog10),i=i.times(Decimal.pow(Gae.scaleFactor,e))}return i=i.divide(Fae(n)),V.isRunning&&(i=i.pow(2)),V.isSuperRunning&&(i=i.pow(5)),i}function Fae(e){let t=b.D1;if(t=t.times(PelleRifts.decay.effectValue),t=t.times(Pelle.specialGlyphEffect.replication),t=t.times(ShopPurchase.replicantiPurchases.currentMult),MendingMilestone.one.isReached&&(t=t.times(1e3)),Ra.unlocks.relicShardBoost.isUnlocked&&(t=t.times(Currency.relicShards.value.pow(.06667).clampMin(1))),Pelle.isDisabled("replicantiIntervalMult"))return t;t=t.times(Ra.unlocks.continuousTTBoost.effects.replicanti.effectValue);const i=Effects.product(TimeStudy(62),TimeStudy(213),RealityUpgrade(2),RealityUpgrade(6),RealityUpgrade(23));return t=t.times(i),TimeStudy(132).isBought&&Perk.studyPassive.isBought&&(t=t.times(3)),!e&&Achievement(134).isUnlocked&&(t=t.times(2)),t=t.times(getAdjustedGlyphEffect("replicationspeed")),GlyphAlteration.isAdded("replication")&&(t=t.times(Math.clampMin(Decimal.log10(Wae.amount)*getSecondaryGlyphEffect("replicationdtgain"),1))),t=t.timesEffectsOf(AlchemyResource.replication),t}function $ae(){return EffarigUnlock.infinity.canBeApplied?Currency.infinitiesTotal.value.pow(TimeStudy(31).isBought?120:30).clampMin(1).times(Decimal.NUMBER_MAX_VALUE):Decimal.NUMBER_MAX_VALUE}function Hae(e){if(!player.replicanti.unl)return;const t=Wae.amount;PerformanceStats.start("Replicanti"),EventHub.dispatch(GAME_EVENT.REPLICANTI_TICK_BEFORE);const i=Lae(!1),a=Wae.isUncapped,n=Wae.galaxies.areBeingBought;let s=Decimal.divide(new Decimal(e).add(player.replicanti.timer),i);s.lt(100)?player.replicanti.timer=s.minus(s.floor()).times(i).toNumber():player.replicanti.timer=0,s=s.floor();const r=Wae.amount.times(player.replicanti.chance);if(s.gte(100)||r.gte(10)&&s.gte(1)){let e=Math.log10(Gae.scaleFactor)/Gae.scaleLog10;V.isRunning&&(e*=2),V.isSuperRunning&&(e*=5);let t=s.times(Math.log(player.replicanti.chance+1)).times(LOG10_E);if(a&&!Wae.amount.lte($ae())||(t=Oae(t,n)),a&&Wae.amount.gte($ae())&&t.gt(0)){const a=Lae(!0).div(i);t=t.div(a),Wae.amount=Decimal.exp(t.div(LOG10_E).times(e).plus(1).ln()/e+Wae.amount.clampMin(1).ln())}}else if(s.gt(1)){const e=Math.floor(s.toNumber()*Math.log2(1+player.replicanti.chance)),t=s.toNumber()-e/Math.log2(1+player.replicanti.chance);Wae.amount=Wae.amount.times(b.D2.pow(poissonDistribution(e)));for(let i=0;i308&&(Wae.amount=t.times(1e308)),player.mending.corruptionChallenge.corruptedMend&&(Wae.amount=Decimal.pow(Wae.amount,ye.repSing.rep[player.mending.corruption[8]])),n&&Wae.amount.gte(Decimal.NUMBER_MAX_VALUE)){const e=Autobuyer.replicantiGalaxy,t=e.canTick&&e.isEnabled;Bae(t&&!Wae.galaxies.isPlayerHoldingR)}player.records.thisReality.maxReplicanti=player.records.thisReality.maxReplicanti.clampMin(Wae.amount),EventHub.dispatch(GAME_EVENT.REPLICANTI_TICK_AFTER),PerformanceStats.end()}function qae(){return Decimal.pow(Decimal.log2(Wae.amount.clampMin(1)),2).plusEffectOf(TimeStudy(21)).timesEffectOf(TimeStudy(102)).clampMin(1).pow(getAdjustedGlyphEffect("replicationpow"))}class Vae{get id(){throw new NotImplementedError}get value(){throw new NotImplementedError}set value(e){throw new NotImplementedError}get nextValue(){throw new NotImplementedError}get cost(){throw new NotImplementedError}set cost(e){throw new Error("Use baseCost to set cost")}get costIncrease(){throw new NotImplementedError}get baseCost(){return this.cost}set baseCost(e){throw new NotImplementedError}get cap(){}get isCapped(){return!1}get autobuyerMilestone(){throw new NotImplementedError}get canBeBought(){return(3!==this.id||!this.isCapped)&&(!this.isCapped&&Currency.infinityPoints.gte(this.cost)&&0!==player.eterc8repl)}purchase(){this.canBeBought&&(Currency.infinityPoints.subtract(this.cost),this.baseCost=Decimal.times(this.baseCost,this.costIncrease),this.value=this.nextValue,EternityChallenge(8).isRunning&&player.eterc8repl--,GameUI.update())}autobuyerTick(){while(this.canBeBought)this.purchase()}}const Yae={chance:new class extends Vae{get id(){return 1}get value(){return player.replicanti.chance}set value(e){player.replicanti.chance=e}get nextValue(){return this.nearestPercent(this.value+.01)}get cost(){return player.replicanti.chanceCost.dividedByEffectOf(PelleRifts.vacuum.milestones[1])}get baseCost(){return player.replicanti.chanceCost}set baseCost(e){player.replicanti.chanceCost=e}get costIncrease(){return 1e15}get cap(){return 1}get isCapped(){return this.nearestPercent(this.value)>=this.cap}get autobuyerMilestone(){return EternityMilestone.autobuyerReplicantiChance}autobuyerTick(){let e=Currency.infinityPoints.value.times(this.costIncrease-1).dividedBy(this.cost).plus(1).log(this.costIncrease);if(e=Math.round(100*(Math.min(this.value+.01*Math.floor(e),this.cap)-this.value)),e<=0)return;const t=this.cost.times(Decimal.pow(this.costIncrease,e).minus(1).dividedBy(this.costIncrease-1));Currency.infinityPoints.subtract(t),this.baseCost=this.baseCost.times(Decimal.pow(this.costIncrease,e)),this.value=this.nearestPercent(this.value+.01*e)}nearestPercent(e){return Math.round(100*e)/100}},interval:new class extends Vae{get id(){return 2}get value(){return player.replicanti.interval}set value(e){player.replicanti.interval=e}get nextValue(){return Decimal.max(this.value.times(.9),this.cap)}get cost(){return player.replicanti.intervalCost.dividedByEffectOf(PelleRifts.vacuum.milestones[1])}get baseCost(){return player.replicanti.intervalCost}set baseCost(e){player.replicanti.intervalCost=e}get costIncrease(){return 1e10}get cap(){return Effects.min(50,TimeStudy(22))}get isCapped(){return this.value.lte(this.cap)}get autobuyerMilestone(){return EternityMilestone.autobuyerReplicantiInterval}applyModifiers(e){return Lae(void 0,new Decimal(e))}},galaxies:new class extends Vae{get id(){return 3}get value(){return player.replicanti.boughtGalaxyCap}set value(e){player.replicanti.boughtGalaxyCap=e}get nextValue(){return this.value+1}get cost(){return this.baseCost.dividedByEffectsOf(TimeStudy(233),PelleRifts.vacuum.milestones[1])}get baseCost(){return player.replicanti.galCost}set baseCost(e){player.replicanti.galCost=e}get distantRGStart(){return 100+Effects.sum(GlyphSacrifice.replication)+(pl(17).isBought?1400:0)}get remoteRGStart(){return 1e3+Effects.sum(GlyphSacrifice.replication)+(pl(17).isBought?9e3:0)}get costIncrease(){const e=this.value;let t=EternityChallenge(6).isRunning?b.E2.pow(e).times(b.E2):b.E5.pow(e).times(b.E25);return e>=this.distantRGStart&&(t=t.times(b.E50.pow(e-this.distantRGStart+5))),e>=this.remoteRGStart&&(t=t.times(b.E5.pow(Math.pow(e-this.remoteRGStart+1,2)))),t}get autobuyerMilestone(){return EternityMilestone.autobuyerReplicantiMaxGalaxies}get cap(){return 25e4}get isCapped(){return this.value>this.cap}get extra(){return Effects.max(0,TimeStudy(131))+PelleRifts.decay.milestones[2].effectOrDefault(0)}autobuyerTick(){let e=null;try{e=bulkBuyBinarySearch(Currency.infinityPoints.value,{costFunction:e=>this.baseCostAfterCount(e).dividedByEffectOf(TimeStudy(233)),firstCost:this.cost,cumulative:!0},this.value)}catch(t){return}e&&(Currency.infinityPoints.subtract(e.purchasePrice),this.value+=e.quantity,this.baseCost=this.baseCostAfterCount(this.value))}baseCostAfterCount(e){const t=170,i=EternityChallenge(6).isRunning?2:25,a=EternityChallenge(6).isRunning?2:5,n=100+Effects.sum(GlyphSacrifice.replication)+(pl(17).isBought?1400:0),s=1e3+Effects.sum(GlyphSacrifice.replication)+(pl(17).isBought?9e3:0);let r=t+e*i+e*(e-1)/2*a;if(e>n){const t=50,i=5,a=e-n;r+=t*a*(a+2*i-1)/2}if(e>s){const t=5,i=e-s;r+=t*i*(i+1)*(2*i+1)/6}return Decimal.pow10(r)}}},Wae={get areUnlocked(){return player.replicanti.unl},reset(e=!1){const t=!e&&EternityMilestone.unlockReplicanti.isReached;player.replicanti={unl:t,amount:t?b.D1:b.D0,timer:0,chance:.01,chanceCost:b.E150,interval:b.E3,intervalCost:b.E140,boughtGalaxyCap:0,galaxies:0,galCost:b.E170}},unlock(e=!1){const t=b.E140.dividedByEffectOf(PelleRifts.vacuum.milestones[1]);player.replicanti.unl||(e||Currency.infinityPoints.gte(t))&&(e||Currency.infinityPoints.subtract(t),player.replicanti.unl=!0,player.replicanti.timer=0,Wae.amount=b.D1)},get amount(){return player.replicanti.amount},set amount(e){player.replicanti.amount=e},get chance(){return Yae.chance.value},galaxies:{isPlayerHoldingR:!1,get bought(){return Math.min(25e4,player.replicanti.galaxies)},get extra(){return Math.min(Math.floor((Effects.sum(TimeStudy(225),TimeStudy(226))+Effarig.bonusRG)*TimeStudy(303).effectOrDefault(1)),35e4)},get total(){return this.bought+this.extra},get max(){return Math.min(25e4,Yae.galaxies.value)+Math.min(35e4,Yae.galaxies.extra)},get canBuyMore(){return!(this.bought>=25e4)&&(!!Wae.amount.gte(Decimal.NUMBER_MAX_VALUE)&&this.boughtPerk.ttFree.canBeApplied?this.currency.gte(e):this.currency.purchase(e);return e&&a(this.bulkCost(i))&&(Currency.timeTheorems.add(i),this.add(i),t=!0),a(this.cost)&&(Currency.timeTheorems.add(1),this.add(1),t=!0),t&&(player.requirementChecks.reality.noPurchasedTT=!1),Xae.totalPurchased()>114&&PelleStrikes.ECs.trigger(),t}get canAfford(){return this.currency.gte(this.cost)&&!player.eternities.eq(0)}reset(){this.amount=0}}jae.am=new class extends jae{get amount(){return player.timestudy.amBought}set amount(e){player.timestudy.amBought=e}get currency(){return Currency.antimatter}get costBase(){return b.E20000}get costIncrement(){return player.mending.corruptionChallenge.corruptedMend?b.E20000.times(ye.toD.hiddenFive[player.mending.corruption[7]]):b.E20000}},jae.ip=new class extends jae{get amount(){return player.timestudy.ipBought}set amount(e){player.timestudy.ipBought=e}get currency(){return Currency.infinityPoints}get costBase(){return b.D1}get costIncrement(){return player.mending.corruptionChallenge.corruptedMend?b.E100.times(ye.toD.hiddenFive[player.mending.corruption[7]]):b.E100}},jae.ep=new class extends jae{get amount(){return player.timestudy.epBought}set amount(e){player.timestudy.epBought=e}get currency(){return Currency.eternityPoints}get costBase(){return b.D1}get costIncrement(){return player.mending.corruptionChallenge.corruptedMend?b.D2.times(ye.toD.hiddenFive[player.mending.corruption[7]]):b.D2}bulkCost(e){return Perk.ttFree.canBeApplied?this.cost.times(this.costIncrement.pow(e-1)):this.costIncrement.pow(e+this.amount).subtract(this.cost)}};const Xae={checkForBuying(e){return!(!PlayerProgress.realityUnlocked()&&!TimeDimension(1).bought)||(e||Modal.message.show(`You need to buy at least ${formatInt(1)} Time Dimension before you can purchase\n Time Theorems.`,{closeEvent:GAME_EVENT.REALITY_RESET_AFTER}),!1)},buyOne(e=!1,t){return this.checkForBuying(e)&&jae[t].purchase(!1)?1:0},buyOneOfEach(){if(!this.checkForBuying(!0))return 0;const e=this.buyOne(!0,"am"),t=this.buyOne(!0,"ip"),i=this.buyOne(!0,"ep");return e+t+i},buyMax(e=!1){if(!this.checkForBuying(e))return 0;const t=jae.am.purchase(!0),i=jae.ip.purchase(!0),a=jae.ep.purchase(!0);return t+i+a},totalPurchased(){return jae.am.amount+jae.ip.amount+jae.ep.amount},calculateTimeStudiesCost(){let e=TimeStudy.boughtNormalTS().map((e=>e.cost)).reduce(Number.sumReducer,0);const t=TimeStudy.eternityChallenge.current();return void 0!==t&&(e+=t.cost),Enslaved.isRunning&&player.celestials.enslaved.hasSecretStudy&&(e-=100),e}};class zae extends R{constructor(e){super(e),this.registerEvents(e.checkEvent,(()=>this.tryUnlock()))}get isBought(){return 0!==(this.bits&1<=15&&this.id<=18&&(DarkMatterDimension(this.id-14).amount=b.D1,17===this.id&&Laitela.quotes.thirdDMD.show()),this.id>=15&&this.id<=19&&(TabNotification.laitelaUnlock.clearTrigger(),TabNotification.laitelaUnlock.tryTrigger()),21===this.id&&Laitela.quotes.finalRowIM.show(),22===this.id)for(const e of Object.keys(player.reality.glyphs.sac))player.reality.glyphs.sac[e].lte(1e100)&&(player.reality.glyphs.sac[e]=Zae(22).effectValue);25===this.id&&TabNotification.pelleUnlock.tryTrigger()}}class Kae extends M{get currency(){return Currency.imaginaryMachines}get boughtAmount(){return player.mending.corruptionChallenge.corruptedMend&&ye.repSing.hiddenFour[player.mending.corruption[8]]?0:player.reality.imaginaryRebuyables[this.id]}get canBeApplied(){return super.canBeApplied&&!this.pelleDisabled&&ye.repSing.hiddenFour[player.mending.corruption[8]]}get isAvailableForPurchase(){return!player.mending.corruptionChallenge.corruptedMend||!ye.repSing.hiddenFour[player.mending.corruption[8]]}get pelleDisabled(){return Pelle.isDoomed}set boughtAmount(e){player.reality.imaginaryRebuyables[this.id]=e}onPurchased(){7===this.id&&GameCache.staticGlyphWeights.invalidate()}}zae.index=mapGameData(GameDatabase.reality.imaginaryUpgrades,(e=>e.id<=10?new Kae(e):new zae(e)));const Zae=e=>zae.index[e],Qae={all:zae.index.compact(),get totalRebuyables(){const e=player.reality.imaginaryRebuyables;let t=0;for(const i in e)t+=e[i];return t},get totalSinglePurchase(){return this.all.countWhere((e=>e.isBought))},get allBought(){return 1+(player.reality.imaginaryUpgradeBits>>6)===1<e.isBought))}get canBeApplied(){return!(0!==this.id||!hK.three.isReached)||this.isBought&&!(Pelle.isDoomed&&Pelle.uselessPerks.includes(this.id))}initializeConnections(){this.connectedPerks=GameDatabase.reality.perkConnections[this.id].map((e=>tne.find(e)))}onPurchased(){if(void 0!==this.config.bumpCurrency&&this.config.bumpCurrency(),"EU1"===this.label&&Currency.eternities.gt(0)&&applyEU1(),"ACHNR"===this.label){Achievements.preReality.some((e=>!e.isUnlocked))&&(player.reality.gainedAutoAchievements=!0);for(const e of Achievements.preReality)e.unlock(!0)}GameCache.achievementPeriod.invalidate(),GameCache.buyablePerks.invalidate(),EventHub.dispatch(GAME_EVENT.PERK_BOUGHT)}}const ene=mapGameDataToObject(GameDatabase.reality.perks,(e=>new Jae(e))),tne={all:ene.all,find(e){return tne.all.find((t=>t.id===e))}};for(const V of tne.all)V.initializeConnections();function ine(){player.reality.perks.every((e=>void 0!==tne.find(e)))||(dev.respecPerks(),Currency.perkPoints.gte(tne.all.length)?(dev.buyAllPerks(),Modal.message.show("Some of your Perks were invalid, but you auto-bought all valid perks.")):Modal.message.show("Some of your Perks were invalid, so your Perks have been reset and your Perk Points refunded."))}function ane(){Hu.display("a-dilate",2),setTimeout(rne,1e3)}function nne(e){Hu.display("a-undilate",2),setTimeout((()=>{eternity(!1,!1,{switchingDilation:!0}),e&&e()}),1e3)}function sne(){if(!PlayerProgress.dilationUnlocked()||Pelle.isDoomed&&!Pelle.canDilateInPelle)return;const e=player.options.animations.dilation&&!Hu.isDisplaying;player.dilation.active?player.options.confirmations.dilation?Modal.exitDilation.show():e?nne():eternity(!1,!1,{switchingDilation:!0}):player.options.confirmations.dilation?Modal.enterDilation.show():e?ane():rne()}function rne(e){return!!PlayerProgress.dilationUnlocked()&&(!(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked())&&(player.dilation.active?(eternity(!1,e,{switchingDilation:!0}),!1):(Achievement(136).unlock(),eternity(!1,e,{switchingDilation:!0}),player.dilation.active=!0,Pelle.isDoomed&&PelleStrikes.dilation.trigger(),!0)))}const one=[null,"dtGain","galaxyThreshold","tachyonGain","doubleGalaxies","tdMultReplicanti","ndMultDT","ipMultDT","timeStudySplit","dilationPenalty","ttGenerator","dtGainPelle","galaxyMultiplier","tickspeedPower","galaxyThresholdPelle","flatDilationMult"];function lne(e,t=1){if(GameEnd.creditsEverClosed&&!PlayerProgress.mendingUnlocked())return!1;const i=kne[one[e]];if(e>3&&e<11){if(player.dilation.upgrades.has(e))return!1;if(!Currency.dilatedTime.purchase(i.cost))return!1;player.dilation.upgrades.add(e),4===e&&(player.dilation.totalTachyonGalaxies*=2)}else{const a=player.dilation.rebuyables[e];let n=Pelle.isDoomed?i.config.pellePurchaseCap:i.config.purchaseCap;if(Currency.dilatedTime.lt(i.cost)||a>=n)return!1;let s=Decimal.affordGeometricSeries(Currency.dilatedTime.value,i.config.initialCost,i.config.increment,a).toNumber();s=Math.clampMax(s,t),s=Math.clampMax(s,n-a);const r=Decimal.sumGeometricSeries(s,i.config.initialCost,i.config.increment,a);if(Currency.dilatedTime.subtract(r),player.dilation.rebuyables[e]+=s,2===e&&(Perk.bypassTGReset.isBought&&!Pelle.isDoomed||Currency.dilatedTime.reset(),player.dilation.nextThreshold=b.E3,player.dilation.baseTachyonGalaxies=0,player.dilation.totalTachyonGalaxies=0),3===e&&!Pelle.isDisabled("tpMults")){let e=Effects.max(1,Perk.retroactiveTP1,Perk.retroactiveTP2,Perk.retroactiveTP3,Perk.retroactiveTP4);Enslaved.isRunning&&(e=Math.pow(e,Enslaved.tachyonNerf)),Currency.tachyonParticles.multiply(Decimal.pow(e,s))}}return!0}function cne(e,t){const i=void 0===e?kne.galaxyThreshold.effectValue:e;let a=3.65*i+.35;const n=getAdjustedGlyphEffect("dilationgalaxyThreshold"),s=0===n?1:n;let r=kne.galaxyThresholdPelle.canBeApplied?kne.galaxyThresholdPelle.effectValue:1,o=5e4,l=Math.floor((void 0==t?player.dilation.baseTachyonGalaxies:t)/5e4);(void 0==t?player.dilation.baseTachyonGalaxies:t)>=o&&!Pelle.isDoomed&&(r*=(1.5-.005*player.mending.rebuyables[11])*l);let c=Math.max(1.1,a*s)**r;return Math.min(Math.max(1,c),1e300)}function une(){if(Pelle.isDoomed){let e=MendingMilestone.one.isReached?100:1;const t=Currency.tachyonParticles.value.pow(PelleRifts.paradox.milestones[1].effectOrDefault(1));let i=new Decimal(t).timesEffectsOf(kne.dtGain,kne.dtGainPelle,kne.flatDilationMult).times(ShopPurchase.dilatedTimePurchases.currentMult**.5).times(e).times(Pelle.specialGlyphEffect.dilation).div(1e5);return Ra.unlocks.unlockPelleGlyphEffects.isUnlocked&&(i=i.times(getAdjustedGlyphEffect("dilationDT")).times(Math.clampMin(Decimal.log10(Replicanti.amount)*getAdjustedGlyphEffect("replicationdtgain"),1))),i}let e=new Decimal(Currency.tachyonParticles.value).timesEffectsOf(kne.dtGain,Achievement(132),Achievement(137),RealityUpgrade(1),AlchemyResource.dilation,Ra.unlocks.continuousTTBoost.effects.dilatedTime,Ra.unlocks.peakGamespeedDT,kne.dtGainPelle);if(MendingMilestone.one.isReached&&(e=e.times(100)),e=e.times(getAdjustedGlyphEffect("dilationDT")),e=e.times(ShopPurchase.dilatedTimePurchases.currentMult),e=e.times(Math.clampMin(Decimal.log10(Replicanti.amount)*getAdjustedGlyphEffect("replicationdtgain"),1)),Ra.unlocks.relicShardBoost.isUnlocked&&(e=e.pow(1+Math.max(0,Currency.relicShards.value.log10()/1337))),Enslaved.isRunning&&!e.eq(0)&&(e=Decimal.pow10(Math.pow(e.plus(1).log10(),.85)-1)),V.isRunning&&(e=e.pow(.5)),V.isSuperRunning&&(e=e.pow(1e-6)),player.mending.corruptionChallenge.corruptedMend){let t=ye.toD.power[player.mending.corruption[7]],i=ye.toD.mult[player.mending.corruption[7]];eu(23).isBought&&player.mending.corruption[7]>=1&&(t+=.2,i=i.times(1e5)),e=Decimal.pow(e,t),e=e.times(i)}return e}function dne(){if(Pelle.isDisabled("tpMults"))return new Decimal(1);const e=Enslaved.isRunning?Enslaved.tachyonNerf:1;return b.D1.timesEffectsOf(kne.tachyonGain,GlyphSacrifice.dilation,Achievement(132),RealityUpgrade(4),RealityUpgrade(8),RealityUpgrade(15)).pow(e)}function hne(){Currency.tachyonParticles.bumpTo(pne(player.records.thisEternity.maxAM,!0)),player.mending.corruptionChallenge.corruptedMend&&(Currency.tachyonParticles.value=Decimal.pow(Currency.tachyonParticles.value,ye.toD.power[player.mending.corruption[7]])),player.dilation.lastEP=Currency.eternityPoints.value}function mne(e,t){if(!Player.canEternity&&t)return b.D0;const i=isInCelestialReality()||Pelle.isDoomed?e:Ra.unlocks.unlockDilationStartingTP.effectOrDefault(e);let a=Decimal.pow(Decimal.log10(i)/400,1.5);return Enslaved.isRunning&&(a=a.pow(Enslaved.tachyonNerf)),a}function pne(e,t){let i=mne(e,t).times(dne());return i}function yne(e){return pne(Currency.antimatter.value,e).minus(Currency.tachyonParticles.value).clampMin(0)}function fne(){let e=Currency.tachyonParticles.value.dividedBy(dne());return Enslaved.isRunning&&(e=e.pow(1/Enslaved.tachyonNerf)),Decimal.pow10(e.times(Math.pow(400,1.5)).pow(2/3).toNumber())}function gne(e){const t=une(),i=t.times(getGameSpeedupForDisplay()),a=Currency.dilatedTime.value;if(t.eq(0))return null;if(PelleRifts.paradox.isActive){const t=Pelle.riftDrainPercent,n=i.minus(Decimal.multiply(e,t)),s=i.minus(a.times(t));return n.lt(0)?"Never affordable due to Rift drain":TimeSpan.fromSeconds(s.div(n).ln()/t).toTimeEstimate()}return TimeSpan.fromSeconds(Decimal.sub(e,a).div(i).toNumber()).toTimeEstimate()}function vne(e,t){return Decimal.affordGeometricSeries(e,kne.all[t+1].config.initialCost,kne.all[t+1].config.increment,player.dilation.rebuyables[t+1]).toNumber()}function bne(){const e=Perk.bypassTGReset.isBought||Pelle.isDoomed;for(let i=0;Pelle.isDoomed?i<=5:i<=2;i++){if(!e&&1==i)return;player.dilation.rebuyables[i+1]+=vne(Currency.dilatedTime.value.div(1e6),i)}let t=!0;for(let i=0;i<100&&t;i++){t=!1;for(let i=0;Pelle.isDoomed?i<=5:i<=2;i++){if(!e&&1==i)return;t=lne(i+1)||t}}e||lne(2)}function Ene(e){const t=e.log10(),i=.75*Effects.product(kne.dilationPenalty);return Decimal.pow10(Math.sign(t)*Math.pow(Math.abs(t),i))}class Tne extends D{get currency(){return Currency.dilatedTime}get set(){return player.dilation.upgrades}onPurchased(){switch(this.id){case 4:player.dilation.totalTachyonGalaxies*=2;break;case 10:Cm(15).tryComplete();break;default:}}}class wne extends M{get currency(){return Currency.dilatedTime}get boughtAmount(){return player.dilation.rebuyables[this.id]}set boughtAmount(e){player.dilation.rebuyables[this.id]=e}get isCapped(){return this.config.reachedCap()}purchase(e){lne(this.config.id,e)}}const kne=mapGameDataToObject(GameDatabase.eternity.dilation,(e=>e.rebuyable?new wne(e):new Tne(e))),Cne={rebuyable:[kne.dtGain,kne.galaxyThreshold,kne.tachyonGain],fromId:e=>kne.all.find((t=>t.id===Number(e)))};class Ane{constructor(e){const{getAmount:t,setAmount:i,calculateValue:a,initialCost:n,costMult:s}=e;this.incrementAmount=()=>i(t()+1),this._lazyValue=new Lazy((()=>a(t()))),this._lazyCost=new Lazy((()=>getHybridCostScaling(t(),1e30,n,s,.2,b.E310,1e5,10))),this.id=e.id,this.hasAutobuyer=e.hasAutobuyer,this.onPurchase=e.onPurchase}get value(){return this._lazyValue.value}get cost(){return this._lazyCost.value}get isAffordable(){return Currency.realityMachines.gte(this.cost)}purchase(){if(!this.isAffordable||0===this.value)return;const e=Sne(this.id),t=e.isCharged?1-e.stateProgress:e.stateProgress;Currency.realityMachines.purchase(this.cost),this.incrementAmount(),this._lazyValue.invalidate(),this._lazyCost.invalidate(),this.onPurchase&&this.onPurchase();const i=e.isCharged?e.duration:e.interval;e.updatePhase(i*t-e.phase),e.isPermanent&&(player.blackHole[this.id-1].active=!0),EventHub.dispatch(GAME_EVENT.BLACK_HOLE_UPGRADE_BOUGHT)}}class _ne{constructor(e){this.id=e+1;const t=[1,1e3];this.intervalUpgrade=new Ane({id:this.id,getAmount:()=>this._data.intervalUpgrades,setAmount:e=>this._data.intervalUpgrades=e,calculateValue:t=>3600/Math.pow(10,e)*Math.pow(.8,t),initialCost:15*t[e],costMult:3.5,hasAutobuyer:!1,onPurchase:()=>{this.isCharged||(this._data.phase=Math.clampMax(this.interval,this._data.phase))}}),this.powerUpgrade=new Ane({id:this.id,getAmount:()=>this._data.powerUpgrades,setAmount:e=>this._data.powerUpgrades=e,calculateValue:t=>{let i=1.35;return eu(11).isBought&&(i*=eu(11).effectValue),180/Math.pow(2,e)*Math.pow(i,t)},initialCost:20*t[e],costMult:2,hasAutobuyer:!0}),this.durationUpgrade=new Ane({id:this.id,getAmount:()=>this._data.durationUpgrades,setAmount:e=>this._data.durationUpgrades=e,calculateValue:t=>(10-3*e)*Math.pow(1.3,t),initialCost:10*t[e],costMult:4,hasAutobuyer:!1})}get _data(){return player.blackHole[this.id-1]}get rawInterval(){return this.intervalUpgrade.value*Achievement(145).effectOrDefault(1)}get interval(){return this.isPermanent?0:this.rawInterval}get power(){return this.powerUpgrade.value*Achievement(158).effectOrDefault(1)}get duration(){return this.durationUpgrade.value*Achievement(155).effectOrDefault(1)}get isUnlocked(){return this._data.unlocked&&!Enslaved.isRunning&&!Pelle.isDisabled("blackhole")||MendingMilestone.three.isReached&&!Enslaved.isRunning&&!Pelle.isDisabled("blackhole")}get isCharged(){return this._data.active}get timeWithPreviousActiveToNextStateChange(){return this.isCharged?this.duration-this.phase:this.interval-this.phase}get timeToNextStateChange(){const e=this.timeWithPreviousActiveToNextStateChange;return 1===this.id?e:this.isCharged?Sne(1).isCharged?Math.min(e,Sne(1).timeToNextStateChange):Sne(1).timeToNextStateChange:Sne(1).timeUntilTimeActive(e)}timeUntilTimeActive(e){let t=e;if(this.isCharged){if(t
Disabled';if(Enslaved.isAutoReleasing)return Enslaved.autoReleaseTick<3?' Pulsing':' Pulsing';if(Enslaved.isStoringGameTime)return' Charging';if(Dne.areNegative)return' Inverted';if(Dne.arePaused)return' Paused';if(this.isPermanent)return' Permanent';const e=TimeSpan.fromSeconds(this.timeToNextStateChange).toStringShort(!0);return this.isActive?` Active (${e})`:` Inactive (${e})`}get isActive(){return this.isCharged&&(1===this.id||Sne(this.id-1).isActive)&&!Pelle.isDisabled("blackhole")}get dutyCycle(){return this.duration/(this.rawInterval+this.duration)}get isPermanent(){return this.dutyCycle>=.9999||MendingMilestone.three.isReached}get phase(){return this._data.phase}get cycleLength(){return this.interval+this.duration}updatePhase(e){this.isPermanent||(this._data.phase+=e,this.phase>=this.cycleLength&&(this._data.activations+=Math.floor(this.phase/this.cycleLength),this._data.phase%=this.cycleLength),this.isCharged?this.phase>=this.duration&&(this._data.phase-=this.duration,this._data.active=!1,GameUI.notify.showBlackHoles&&GameUI.notify.blackHole(`${this.description(!0)} duration ended.`)):this.phase>=this.interval&&(this._data.phase-=this.interval,this._data.activations++,this._data.active=!0,GameUI.notify.showBlackHoles&&GameUI.notify.blackHole(`${this.description(!0)} has activated!`)))}realTimeWhileActive(e){const t=this.timeUntilNextDeactivation,i=this.interval,a=this.duration,n=this.cycleLength,s=Math.min(t,a),r=Math.floor((e-t)/n),o=a*r,l=(e-t+n)%n,c=Math.max(l-i,0);return s+o+c}get timeUntilNextDeactivation(){return this.isCharged?this.duration-this.phase:this.cycleLength-this.phase}description(e){return RealityUpgrade(20).isBought?`Black Hole ${this.id}`:e?"The Black Hole":"the Black Hole"}}function Sne(e){return _ne.list[e-1]}_ne.list=Array.range(0,2).map((e=>new _ne(e)));const Dne={ACCELERATION_TIME:5,get list(){return _ne.list},get canBeUnlocked(){return Currency.realityMachines.gte(100)&&!this.areUnlocked},get areUnlocked(){return Sne(1).isUnlocked},unlock(){this.canBeUnlocked&&(player.blackHole[0].unlocked=!0,Currency.realityMachines.purchase(100),player.records.timePlayedAtBHUnlock=PlayerProgress.mendingUnlocked()?player.records.thisMend.time:player.records.totalTimePlayed,EventHub.dispatch(GAME_EVENT.BLACK_HOLE_UNLOCKED))},togglePause:(e=!1)=>{if(!Dne.areUnlocked)return;const t=player.requirementChecks.reality.slowestBH<=1e-300;if(ImaginaryUpgrade(24).isLockingMechanics&&Ra.isRunning&&t)return void(e||ImaginaryUpgrade(24).tryShowWarningModal("uninvert your Black Hole"));player.blackHolePause&&(player.requirementChecks.reality.slowestBH=1),player.blackHolePause=!player.blackHolePause,player.blackHolePauseTime=player.records.realTimePlayed;const i=RealityUpgrade(20).isBought?"Black Holes":"Black Hole",a=player.blackHolePause?Dne.areNegative?"inverted":"paused":"unpaused",n=e?"automatically ":"";GameUI.notify.blackHole(`${i} ${n}${a}`)},get unpauseAccelerationFactor(){return this.arePermanent?1:Math.clamp((player.records.realTimePlayed-player.blackHolePauseTime)/(1e3*this.ACCELERATION_TIME),0,1)},get arePaused(){return player.blackHolePause},get areNegative(){return this.arePaused&&!Laitela.isRunning&&player.blackHoleNegative<1},get arePermanent(){return Dne.list.every((e=>e.isPermanent))},updatePhases(e){if(!this.areUnlocked||this.arePaused)return;const t=e/1e3,[i,a]=this.autoPauseData(t),n=this.realTimePeriodsWithBlackHoleActive(a,!0);for(const s of this.list){if(!s.isUnlocked)break;s.updatePhase(n[s.id-1])}i&&Dne.togglePause(!0)},calculateOfflineTick(e,t,i){const a=this.calculateSpeedups(),n=this.calculateGameTimeFromRealTime(e,a);if(1===t)return[e,n.div(e)];const s=this.decimalBinarySearch(0,e,(e=>this.calculateGameTimeFromRealTime(e,a).times(t).div(n)),1,i),r=this.calculateGameTimeFromRealTime(s,a).div(s);return[s,r]},binarySearch(e,t,i,a,n){let s;for(let r=0;r<100;++r){s=(e+t)/2;const r=i(s)-a;if(Math.abs(r)Decimal.min(new Decimal(e).times(t[i]),1e300))).sumD()},realTimePeriodsWithBlackHoleEffective(e){const t=this.realTimePeriodsWithBlackHoleActive(e),i=[];for(let a=0;a0?Math.min(t[0]-a[0],t[1]-a[1]):t[0]-a[0];if(2===e){if(o>=Dne.ACCELERATION_TIME)return l-Dne.ACCELERATION_TIME;o=0}else o+=n;l+=n,e>0&&(a[1]+=n,a[1]>=t[1]&&(i[1]=!i[1],a[1]-=t[1])),a[0]+=n,a[0]>=t[0]&&(i[0]=!i[0],a[0]-=t[0])}return null},autoPauseData(e){if(this.arePaused)return[!1,0];if(player.blackHoleAutoPauseMode===BLACK_HOLE_PAUSE_MODE.NO_PAUSE)return[!1,e];const t=this.timeToNextPause(player.blackHoleAutoPauseMode);return null===t||t<1e-9||t>e?[!1,e]:[!0,t]}};class Rne{constructor(e){const{getAmount:t,setAmount:i,calculateValue:a,initialCost:n,costMult:s}=e;this.incrementAmount=()=>i(t()+1),this._lazyValue=new Lazy((()=>a(t()))),this._lazyCost=new Lazy((()=>getHybridCostScaling(t(),1e30,n,s,.2,1e5,10))),this.id=e.id,this.hasAutobuyer=e.hasAutobuyer,this.onPurchase=e.onPurchase}get value(){return this._lazyValue.value}get cost(){return this._lazyCost.value.toNumber()}get isAffordable(){return Currency.imaginaryMachines.value.toDecimal().gte(this.cost)}purchase(){if(!this.isAffordable||0===this.value)return;const e=Ine(this.id),t=e.isCharged?1-e.stateProgress:e.stateProgress;player.reality.imaginaryMachines-=this.cost,this.incrementAmount(),this._lazyValue.invalidate(),this._lazyCost.invalidate(),this.onPurchase&&this.onPurchase();const i=e.isCharged?e.duration:e.interval;e.updatePhase(i*t-e.phase),e.isPermanent&&(player.expoBlackHole[this.id-1].active=!0),EventHub.dispatch(GAME_EVENT.EXPO_BLACK_HOLE_UPGRADE_BOUGHT)}}class Mne{constructor(e){this.id=e+1;const t=[1,1e9];this.intervalUpgrade=new Rne({id:this.id,getAmount:()=>this._data.intervalUpgrades,setAmount:e=>this._data.intervalUpgrades=e,calculateValue:t=>3600/Math.pow(10,e)*Math.pow(.8,t),initialCost:1e15*t[e],costMult:1e3,hasAutobuyer:!1,onPurchase:()=>{this.isCharged||(this._data.phase=Math.clampMax(this.interval,this._data.phase))}}),this.powerUpgrade=new Rne({id:this.id,getAmount:()=>this._data.powerUpgrades,setAmount:e=>this._data.powerUpgrades=e,calculateValue:e=>Math.pow(1.05,e),initialCost:1e15*t[e],costMult:1e6,hasAutobuyer:!0}),this.durationUpgrade=new Rne({id:this.id,getAmount:()=>this._data.durationUpgrades,setAmount:e=>this._data.durationUpgrades=e,calculateValue:t=>(10-3*e)*Math.pow(1.3,t),initialCost:10*t[e],costMult:4,hasAutobuyer:!1})}get _data(){return player.expoBlackHole[this.id-1]}get rawInterval(){return this.intervalUpgrade.value}get interval(){return this.isPermanent?0:this.rawInterval}get power(){return this.powerUpgrade.value}get duration(){return this.durationUpgrade.value}get isUnlocked(){return this._data.unlocked&&!Enslaved.isRunning&&!Pelle.isDisabled("blackhole")&&Ra.unlocks.unlock3rdBH.isUnlocked}get isCharged(){return this._data.active}get timeWithPreviousActiveToNextStateChange(){return this.isCharged?this.duration-this.phase:this.interval-this.phase}get timeToNextStateChange(){const e=this.timeWithPreviousActiveToNextStateChange;return 1===this.id?e:this.isCharged?BlackHole(1).isCharged?Math.min(e,BlackHole(1).timeToNextStateChange):BlackHole(1).timeToNextStateChange:BlackHole(1).timeUntilTimeActive(e)}timeUntilTimeActive(e){let t=e;if(this.isCharged){if(t
Disabled';if(Enslaved.isAutoReleasing)return Enslaved.autoReleaseTick<3?' Pulsing':' Pulsing';if(Enslaved.isStoringGameTime)return' Charging';if(BlackHoles.areNegative)return' Inverted';if(BlackHoles.arePaused)return' Paused';if(this.isPermanent)return' Permanent';const e=TimeSpan.fromSeconds(this.timeToNextStateChange).toStringShort(!0);return this.isActive?` Active (${e})`:` Inactive (${e})`}get isActive(){return this.isCharged&&(1===this.id||BlackHole(this.id-1).isActive)&&!Pelle.isDisabled("blackhole")&&!BlackHoles.areNegative}get dutyCycle(){return this.duration/(this.rawInterval+this.duration)}get isPermanent(){return this.dutyCycle>=.9999||MendingMilestone.three.isReached}get phase(){return this._data.phase}get cycleLength(){return this.interval+this.duration}updatePhase(e){this.isPermanent||(this._data.phase+=e,this.phase>=this.cycleLength&&(this._data.activations+=Math.floor(this.phase/this.cycleLength),this._data.phase%=this.cycleLength),this.isCharged?this.phase>=this.duration&&(this._data.phase-=this.duration,this._data.active=!1,GameUI.notify.showBlackHoles&&GameUI.notify.blackHole(`${this.description(!0)} duration ended.`)):this.phase>=this.interval&&(this._data.phase-=this.interval,this._data.activations++,this._data.active=!0,GameUI.notify.showBlackHoles&&GameUI.notify.blackHole(`${this.description(!0)} has activated!`)))}realTimeWhileActive(e){const t=this.timeUntilNextDeactivation,i=this.interval,a=this.duration,n=this.cycleLength,s=Math.min(t,a),r=Math.floor((e-t)/n),o=a*r,l=(e-t+n)%n,c=Math.max(l-i,0);return s+o+c}get timeUntilNextDeactivation(){return this.isCharged?this.duration-this.phase:this.cycleLength-this.phase}description(e){return`Black Hole ${this.id+2}`}}function Ine(e){return Mne.list[e-1]}Mne.list=Array.range(0,1).map((e=>new Mne(e)));const xne={ACCELERATION_TIME:5,get list(){return Mne.list},get canBeUnlocked(){return Ra.unlocks.unlock3rdBH.isUnlocked&&!this.areUnlocked},get areUnlocked(){return Ine(1).isUnlocked},unlock(){this.canBeUnlocked&&(player.expoBlackHole[0].unlocked=!0,EventHub.dispatch(GAME_EVENT.EXPO_BLACK_HOLE_UNLOCKED))},togglePause:(e=!1)=>{if(!xne.areUnlocked)return;player.expoBlackHolePause=!player.expoBlackHolePause,player.expoBlackHolePauseTime=player.records.realTimePlayed;const t=`Black Hole ${format((void 0).id+2)}`,i=player.expoBlackHolePause?xne.areNegative?"inverted":"paused":"unpaused",a=e?"automatically ":"";GameUI.notify.blackHole(`${t} ${a}${i}`)},get unpauseAccelerationFactor(){return this.arePermanent?1:Math.clamp((player.records.realTimePlayed-player.expoBlackHolePauseTime)/(1e3*this.ACCELERATION_TIME),0,1)},get arePaused(){return player.expoBlackHolePause},get areNegative(){return this.arePaused&&!Laitela.isRunning&&player.expoBlackHoleNegative<1},get arePermanent(){return xne.list.every((e=>e.isPermanent))},updatePhases(e){if(!this.areUnlocked||this.arePaused)return;const t=e/1e3,[i,a]=this.autoPauseData(t),n=this.realTimePeriodsWithBlackHoleActive(a,!0);for(const s of this.list){if(!s.isUnlocked)break;s.updatePhase(n[s.id-1])}i&&xne.togglePause(!0)},calculateOfflineTick(e,t,i){const a=this.calculateSpeedups(),n=this.calculateGameTimeFromRealTime(e,a);if(1===t)return[e,n.div(e)];const s=this.decimalBinarySearch(0,e,(e=>this.calculateGameTimeFromRealTime(e,a).times(t).div(n)),1,i),r=this.calculateGameTimeFromRealTime(s,a).div(s);return[s,r]},binarySearch(e,t,i,a,n){let s;for(let r=0;r<100;++r){s=(e+t)/2;const r=i(s)-a;if(Math.abs(r)Decimal.min(new Decimal(e).times(t[i]),1e300))).sumD()},realTimePeriodsWithBlackHoleEffective(e){const t=this.realTimePeriodsWithBlackHoleActive(e),i=[];for(let a=0;a0?Math.min(t[0]-a[0],t[1]-a[1]):t[0]-a[0];if(2===e){if(o>=xne.ACCELERATION_TIME)return l-xne.ACCELERATION_TIME;o=0}else o+=n;l+=n,e>0&&(a[1]+=n,a[1]>=t[1]&&(i[1]=!i[1],a[1]-=t[1])),a[0]+=n,a[0]>=t[0]&&(i[0]=!i[0],a[0]-=t[0])}return null},autoPauseData(e){if(this.arePaused)return[!1,0];if(player.expoBlackHoleAutoPauseMode===EXPO_BLACK_HOLE_PAUSE_MODE.NO_PAUSE)return[!1,e];const t=this.timeToNextPause(player.expoBlackHoleAutoPauseMode);return null===t||t<1e-9||t>e?[!1,e]:[!0,t]}},Pne={get baseRMCap(){return b.E1000},get hardcapRM(){let e=this.baseRMCap.times(ImaginaryUpgrade(6).effectValue);return player.celestials.ra.upgrades.has("teresaUpgrade")&&(e=e.times(Decimal.pow(player.celestials.teresa.bestRunAM.exponent,5))),e},get distanceToRMCap(){return this.hardcapRM.minus(Currency.realityMachines.value)},get realityMachineMultiplier(){return ShopPurchase.RMPurchases.currentMult*Teresa.rmMultiplier*Effects.max(1,PerkShopUpgrade.rmMult)*getAdjustedGlyphEffect("effarigrm")*Achievement(167).effectOrDefault(1)},get uncappedRM(){let e=player.records.thisReality.maxEP.plus(gainedEternityPoints()).log10();PlayerProgress.realityUnlocked()||(e>8e3&&(e=8e3),e>6e3&&(e-=.75*(e-6e3)));let t=b.E3.pow(e/4e3-1);if(t.gte(1)&&t.lt(10)&&(t=new Decimal(.00675*e-26)),t=t.times(this.realityMachineMultiplier),player.mending.corruptionChallenge.corruptedMend){let e=ye.prestigeLimits[player.mending.corruption[0]];CorruptionUpgrade(16).isBought&&(e=Math.min(1,2*e)),t=t.pow(e),t=t.pow(ye.repSing.presGain[player.mending.corruption[8]])}return t.floor()},get gainedRealityMachines(){return this.uncappedRM.clampMax(this.hardcapRM)},get isIMUnlocked(){return Currency.realityMachines.value.gte(this.hardcapRM)||Currency.imaginaryMachines.gt(0)},get baseIMCap(){return Math.pow(Math.clampMin(this.uncappedRM.log10()-1e3,0),2)*Math.pow(Math.clampMin(this.uncappedRM.log10()-1e5,1),.2)},get currentIMCap(){let e=Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked?Math.pow(getAdjustedGlyphEffect("effarigrm"),.5):1;return player.reality.iMCap*ImaginaryUpgrade(13).effectOrDefault(1)*e},get projectedIMCap(){return this.baseIMCap*ImaginaryUpgrade(13).effectOrDefault(1)*(Ra.unlocks.effarigGlyphIncreaseImCap.isUnlocked?Math.pow(getAdjustedGlyphEffect("effarigrm"),.5):1)},updateIMCap(){this.uncappedRM.gte(this.baseRMCap)&&this.baseIMCap>player.reality.iMCap&&(player.records.bestReality.iMCapSet=Glyphs.copyForRecords(Glyphs.active.filter((e=>null!==e))),player.reality.iMCap=this.baseIMCap)},get scaleTimeForIM(){return 60/ImaginaryUpgrade(20).effectOrDefault(1)},gainedImaginaryMachines(e){const t=this.currentIMCap-Currency.imaginaryMachines.value;return Ra.unlocks.imaginaryMachinesSetToCap.isUnlocked?t:t*(1-Math.pow(2,-e/1e3/this.scaleTimeForIM))},estimateIMTimer(e){const t=this.currentIMCap;if(t<=e)return 1/0;const i=Currency.imaginaryMachines.value;return Decimal.max(0,Math.log2(t/(t-e))-Math.log2(t/(t-i))).times(this.scaleTimeForIM).toNumber()}},Gne={};function Une(){const e=window.location.href;return e.split("//")[1].length>20||Bne()}function Bne(){const e=window.location.href;return e.includes("file")||e.includes("127.0.0.1")||e.includes("localhost")}Gne.hardReset=function(){GameStorage.hardReset()},Gne.giveAllAchievements=function(){const e=Achievements.all.concat(SecretAchievements.all);for(const t of e)t.unlock()},Gne.doubleEverything=function(){Object.keys(player).forEach((e=>{"number"===typeof player[e]&&(player[e]*=2),"object"===typeof player[e]&&player[e].constructor!==Object&&(player[e]=player[e].times(2)),"object"!==typeof player[e]||isFinite(player[e])||Object.keys(player[e]).forEach((t=>{"number"===typeof player[e][t]&&(player[e][t]*=2),"object"===typeof player[e][t]&&player[e][t].constructor!==Object&&(player[e][t]=player[e][t].times(2))}))}))},Gne.tripleEverything=function(){Object.keys(player).forEach((e=>{"number"===typeof player[e]&&(player[e]*=3),"object"===typeof player[e]&&player[e].constructor!==Object&&(player[e]=player[e].times(3)),"object"!==typeof player[e]||isFinite(player[e])||Object.keys(player[e]).forEach((t=>{"number"===typeof player[e][t]&&(player[e][t]*=3),"object"===typeof player[e][t]&&player[e][t].constructor!==Object&&(player[e][t]=player[e][t].times(3))}))}))},Gne.barrelRoll=function(){Hu.display("a-barrel-roll",5)},Gne.spin3d=function(){""===document.body.style.animation?document.body.style.animation="a-spin3d 3s infinite":document.body.style.animation=""},Gne.spin4d=function(){""===document.body.style.animation?document.body.style.animation="a-spin4d 3s infinite":document.body.style.animation=""},Gne.cancerize=function(){Theme.tryUnlock("Design"),Notation.emoji.setAsCurrent()},Gne.fixSave=function(){const e=JSON.stringify(player,GameSaveSerializer.jsonConverter),t=e.replace(/NaN/gi,"10"),i=JSON.parse(t);i&&""===GameStorage.checkPlayerObject(i)?(GameStorage.loadPlayerObject(i),GameStorage.save()):Modal.message.show("Could not fix the save.")},Gne.updateTDCosts=function(){for(let e=1;e<9;e++){const t=TimeDimension(e);t.cost=t.nextCost(t.bought)}},Gne.refundTimeDims=function(){for(const e of TimeDimensions.all)e.bought=0;Gne.updateTDCosts()},Gne.refundEPMult=function(){player.epmultUpgrades=0},Gne.refundDilStudies=function(){for(const e of GameDatabase.eternity.timeStudies.dilation)player.dilation.studies.includes(e.id)&&(player.dilation.studies.splice(player.dilation.studies.indexOf(e.id),1),console.log(document.getElementById(`removed dilstudy${e.id}`)),Currency.timeTheorems.add(e.cost))},Gne.resetDilation=function(){player.dilation.dilatedTime=b.D0,player.dilation.tachyonParticles=b.D0,player.dilation.rebuyables[1]=0,player.dilation.rebuyables[2]=0,player.dilation.rebuyables[3]=0,player.dilation.baseTachyonGalaxies=0,player.dilation.totalTachyonGalaxies=0},Gne.giveSpecialGlyph=function(e,t,i,a=i){if(0===GameCache.glyphInventorySpace.value)return;const n=GlyphGenerator.randomGlyph({actualLevel:i,rawLevel:a});n.symbol=t,n.color=e,Glyphs.addToInventory(n)},Gne.giveGlyph=function(e,t=e){0!==GameCache.glyphInventorySpace.value&&Glyphs.addToInventory(GlyphGenerator.randomGlyph({actualLevel:e,rawLevel:t}))},Gne.giveRealityGlyph=function(e){0!==GameCache.glyphInventorySpace.value&&Glyphs.addToInventory(GlyphGenerator.realityGlyph(e))},Gne.setCompanionGlyphEP=function(e){const t=player.reality.glyphs.active.concat(player.reality.glyphs.inventory).filter((e=>"companion"===e.type))[0];t.strength=rarityToStrength(e.log10()/1e6)},Gne.decriminalize=function(){SecretAchievement(23).lock(),EventHub.dispatch(GAME_EVENT.ACHIEVEMENT_UNLOCKED)},Gne.removeAch=function(e){if("all"===e){const e=Achievements.all.concat(SecretAchievements.all);for(const t of e)t.lock();return"removed all achievements"}return"number"===typeof e?Achievement(e).lock():e.startsWith("r")?Achievement(parseInt(e.slice(1),10)).lock():e.startsWith("s")?SecretAchievement(parseInt(e.slice(1),10)).lock():"failed to delete achievement"},window.nextNewsMessageId=void 0,Gne.setNextNewsMessage=function(e){nextNewsMessageId=e},Gne.implode=function(){bigCrunchAnimation()},Gne.eternify=function(){eternityAnimation()},Gne.dilate=function(){animateAndDilate()},Gne.undilate=function(){animateAndUndilate()},Gne.realize=function(){runRealityAnimation()},Gne.respecPerks=function(){player.reality.perkPoints+=player.reality.perks.size,player.reality.perks=new Set,GameCache.achievementPeriod.invalidate(),GameCache.buyablePerks.invalidate()},Gne.togglePerformanceStats=function(){PerformanceStats.toggle()},Gne.buyAllPerks=function(){const e=[],t=[Perk.firstPerk];while(t.length>0){if(player.reality.perkPoints<1)break;const i=t.shift();e.push(i),t.push(...i.connectedPerks.filter((t=>!e.includes(t)))),i.purchase()}},Gne.printResourceTotals=function(){console.log(`Antimatter: e${Currency.antimatter.exponent.toPrecision(3)}`),console.log(`RM: e${Math.round(MachineHandler.gainedRealityMachines.log10())}`),console.log("Glyph level: "+100*Math.floor(gainedGlyphLevel().actualLevel/100+.5)),console.log("Tickspeed: e"+-Tickspeed.current.exponent.toPrecision(3)),console.log(`Gamespeed: ${Math.pow(getGameSpeedupFactor(),1.2).toPrecision(1)}`);const e=100*Math.floor(player.galaxies/100+.5),t=100*Math.floor(Replicanti.galaxies.total/100+.5),i=100*Math.floor(player.dilation.totalTachyonGalaxies/100+.5);console.log(`Galaxies: ${e}+${t}+${i} (${e+t+i})`),console.log("Tick reduction: e"+-Math.round(getTickSpeedMultiplier().log10()));let a=b.D1;for(let r=1;r<=8;r++)a=a.times(AntimatterDimension(r).multiplier);console.log(`AD mults: e${a.log10().toPrecision(3)}`);let n=b.D1;for(let r=1;r<=8;r++)n=n.times(InfinityDimension(r).multiplier);console.log(`ID mults: e${n.log10().toPrecision(3)}`);let s=b.D1;for(let r=1;r<=8;r++)s=s.times(TimeDimension(r).multiplier);console.log(`TD mults: e${s.log10().toPrecision(3)}`),console.log(`Tickspeed from TD: ${formatWithCommas(1e3*Math.floor(player.totalTickGained/1e3+.5))}`),console.log(`Infinities: e${Math.round(player.infinities.log10())}`),console.log(`Eternities: e${Math.round(player.eternities.log10())}`),console.log(`Replicanti: e${formatWithCommas(1e5*Math.floor(Replicanti.amount.log10()/1e5+.5))}`),console.log(`TT: e${Math.round(player.timestudy.theorem.log10())}`),console.log(`DT: e${Math.round(player.dilation.dilatedTime.log10())}`),console.log(`TP: e${Math.round(player.dilation.tachyonParticles.log10())}`)},Gne.unlockCelestialQuotes=function(e){Quotes[e].all.forEach((e=>e.show()))},Gne.presentCelestialQuotes=function(e){Quotes[e].all.forEach((e=>e.present()))},Gne.testReplicantiCode=function(e,t=!1){const i=[[function(){player.infinities=b.E12,player.celestials.effarig.unlockBits=64}],[function(){player.replicanti.interval=1}],[function(){player.timestudy.studies.push(33)}],[function(){player.timestudy.studies.push(62)}],[function(){player.timestudy.studies.push(131)},function(){player.timestudy.studies.push(132)},function(){player.timestudy.studies.push(133)},function(){player.timestudy.studies.push(131,132,133)}],[function(){player.timestudy.studies.push(192)}],[function(){player.timestudy.studies.push(213)}],[function(){player.timestudy.studies.push(225)}],[function(){player.timestudy.studies.push(226)}],[function(){player.achievementBits[8]|=16}],[function(){player.achievementBits[12]|=8}],[function(){player.achievementBits[12]|=128}],[function(){player.reality.perks=new Set([32])}],[function(){Autobuyer.replicantiGalaxy.isActive=!0}],[function(){Replicanti.galaxies.isPlayerHoldingR=!0}],[function(){player.replicanti.boughtGalaxyCap=100},function(){player.replicanti.boughtGalaxyCap=100,player.replicanti.galaxies=50}],[function(){player.reality.upgReqs=64,player.reality.upgradeBits=64}]],a=i.map((e=>e.length+1)).reduce(((e,t)=>e*t)),n=[],s=function(e){Replicanti.galaxies.isPlayerHoldingR=!1,GameStorage.loadPlayerObject(Player.defaultStart),player.infinities=b.D1,player.infinityPoints=b.E150,Replicanti.unlock(),player.replicanti.chance=1;for(let a=0;ae.length+1)).reduce(((e,t)=>e*t),1),n=[()=>{}].concat(i[a])[Math.floor(e/t)%(i[a].length+1)];n()}function t(){for(let e=0;e<=5;e++)replicantiLoop(Math.pow(10,e)),n.push(Notation.scientific.formatDecimal(Replicanti.amount,5,5)),n.push(player.replicanti.galaxies),n.push(Replicanti.galaxies.total)}t(),player.antimatter=b.E309,player.records.thisInfinity.maxAM=b.E309,bigCrunchReset(),t()};if(void 0===e){const e=4e3,t=10007;if(e*t({type:e,level:t,strength:3.5,rawLevel:t,idx:null,id:a++,effects:makeGlyphEffectBitmask(i)}),r=e=>s(e,GlyphTypes[e].effects.map((e=>e.id))),o=[s("effarig",["effarigantimatter","effarigdimensions","effarigforgotten","effarigblackhole"]),s("effarig",["effarigantimatter","effarigdimensions","effarigforgotten","effarigachievement"])];function l(e,t){if(0===t.length)return[];if(0===e)return[[]];const i=l(e,t.slice(1)),a=l(e-1,t);return a.forEach((e=>e.push(t[0]))),a.concat(i)}const c=l(5,BASIC_GLYPH_TYPES).map((e=>e.map((e=>r(e))))),u=l(4,BASIC_GLYPH_TYPES).map((e=>e.map((e=>r(e))))),d=o.map((e=>u.map((t=>[e].concat(t))))),h=c.concat(...d);function m(e){player.reality.glyphs.active=h[e].map(((e,t)=>(e.idx=t,e))),Glyphs.active=Array.from(player.reality.glyphs.active),EventHub.dispatch(GAME_EVENT.GLYPHS_CHANGED)}function p(e){return"effarig"===e.type?o.findIndex((t=>t.id===e.id)).toString():GLYPH_SYMBOLS[e.type]}function y(e,t,i=!1){return e.length>=t?e:i?" ".repeat(t-e.length)+e:e+" ".repeat(t-e.length)}function f(e){const t=y(`${Math.floor(100*(e+1)/h.length)}%`,4,!0),i=y(MachineHandler.gainedRealityMachines.toPrecision(2),9),a=y(gainedGlyphLevel().actualLevel,4),s=y(player.eternityPoints.exponent.toString(),6),r=y(player.infinityPoints.exponent.toString(),8),o=y(Currency.antimatter.exponent.toString(),12),l=DimBoost.purchasedBoosts,c=Replicanti.galaxies.total+player.galaxies+player.dilation.totalTachyonGalaxies,u=h[e].map(p).sum();console.log(`${t} ${u} rm=${i} gl=${a} ep=${s} ip=${r} am=${o} dimboosts=${l} galaxies=${c}`),GameStorage.offlineEnabled=!1,GameStorage.import(n),ee.id)).includes(e))return;const t=e.match(/([a-z]+)([0-9]+)/),i=t[1],a=parseInt(t[2],10);player.news.seen[i]||(player.news.seen[i]=[]);while(this.BITS_PER_MASK*player.news.seen[i].length<=a)player.news.seen[i].push(0);player.news.seen[i][Math.floor(a/this.BITS_PER_MASK)]|=1<=0&&player.IAP.enabled},get timeUntilRespec(){const e=Date.now()-new Date(Lne.lastRespec).getTime();return TimeSpan.fromMilliseconds(2592e5-e)},get canRespec(){return this.respecAvailable||this.timeUntilRespec.totalDays<=0},updateLocalSTD(e){var t,i;this.totalSTD=e.totalSTD,this.spentSTD=e.spentSTD,this.respecAvailable=e.respecAvailable,this.lastRespec=null!==(t=e.lastRespec)&&void 0!==t?t:0,this.unlockedCosmetics=[...null!==(i=e.unlockedCosmetics)&&void 0!==i?i:[]];for(const n of Object.keys(GameDatabase.shopPurchases)){var a;this[n]=null!==(a=e[n])&&void 0!==a?a:0}this.allCosmeticSets>0&&(this.unlockedCosmetics=Object.keys(GameDatabase.reality.glyphCosmeticSets)),Lne.isIAPEnabled&&Speedrun.setSTDUse(!0),GameStorage.save()},clearLocalSTD(){this.totalSTD=0,this.spentSTD=0,this.respecAvailable=!1,this.unlockedCosmetics=[];for(const e of Object.keys(GameDatabase.shopPurchases))this[e]=0},async syncSTD(e=!0,t){if(!Cloud.loggedIn)return;let i;if(t)i=t;else try{const e=await fetch(`${STD_BACKEND_URL}/STDData?user=${Cloud.user.id}`);i=await e.json()}catch(a){return void GameUI.notify.error("Could not sync STD purchases!",1e4)}e&&i.totalSTD>0&&GameUI.notify.info("STD purchases successfully loaded!",1e4),this.updateLocalSTD(i)},respecRequest(){player.options.confirmations.respecIAP?Modal.respecIAP.show():this.respecAll()},async respecAll(){if(!this.canRespec)return void GameUI.notify.error("You do not have a respec available",1e4);let e;try{e=await fetch(`${STD_BACKEND_URL}/respec`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({user:Cloud.user.id})})}catch(i){return void GameUI.notify.error("Unable to respec STD purchases!",1e4)}const t=await e.json();t.success?GameUI.notify.info("STD respec successful!",1e4):GameUI.notify.error("No purchases to respec!",1e4),this.updateLocalSTD(t.data)}};for(const V of Object.keys(GameDatabase.shopPurchases))Lne[V]=0;class Fne extends M{get currency(){return Lne.availableSTD}get isAffordable(){return this.currency>=this.cost}get description(){const e=this.config.description;return"function"===typeof e?e():e}get cost(){const e=this.config.cost;return"function"===typeof e?e():e}get purchases(){var e;return null!==(e=Lne[this.config.key])&&void 0!==e?e:0}set purchases(e){Number.isFinite(e)&&(Lne[this.config.key]=e)}isUnlocked(){var e,t,i;return player.records.fullGameCompletions>0||null===(e=null===(t=(i=this.config).isUnlocked)||void 0===t?void 0:t.call(i))||void 0===e||e}get lockText(){return this.config.lockText}get shouldDisplayMult(){return Boolean(this.config.multiplier)}get currentMult(){return this.shouldDisplayMult?this.config.multiplier(Lne.isIAPEnabled?this.purchases:0):""}get nextMult(){return this.shouldDisplayMult?this.config.multiplier(Lne.isIAPEnabled?this.purchases+1:0):""}get currentMultForDisplay(){return this.shouldDisplayMult?this.config.multiplier(this.purchases):""}get nextMultForDisplay(){return this.shouldDisplayMult?this.config.multiplier(this.purchases+1):""}formatEffect(e){var t,i;return(null===(t=(i=this.config).formatEffect)||void 0===t?void 0:t.call(i,e))||formatX(e,2,0)}async purchase(){var e;if(!this.canBeBought)return!1;if(GameEnd.creditsEverClosed)return!1;if(this.config.instantPurchase&&ui.$viewModel.modal.progressBar)return!1;const t="singleCosmeticSet"===this.config.key?null===(e=GlyphAppearanceHandler.chosenFromModal)||void 0===e?void 0:e.id:void 0,i=Rc.isActive?await Rc.purchaseShopItem(this.config.key,this.cost,t):await Qm.buyUpgrade(this.config.key,t);return!!i&&(player.IAP.enabled&&Speedrun.setSTDUse(!0),this.config.instantPurchase&&this.config.onPurchase(),GameUI.update(),!0)}}const $ne=mapGameDataToObject(GameDatabase.shopPurchases,(e=>new Fne(e)));One.purchaseTimeSkip=function(){Speedrun.setSTDUse(!0),simulateTime(21600)},One.purchaseLongerTimeSkip=function(){Speedrun.setSTDUse(!0),simulateTime(86400)};class Hne{constructor(e,t){this._parent=e,this.config=t}get name(){return this.config.name}get symbol(){return this.config.symbol}get isPermanentlyHidden(){return this.config.hideAtt.id===player.options.lastOpenSubtab[e])))&&void 0!==i?i:t[0]}function Vne(e,t){const i=e.filter((e=>e.isAvailable)),a=i.indexOf(t),n=ui.view.shiftDown?-1:1;let s=a+n;return s=s<0?i.length-1:s,s=s>i.length-1?0:s,i[s]}class Yne{constructor(e){this.config=e,this.isOpened=!1;const t=[];for(const i of e.subtabs){const e=new Hne(this,i);this[i.key]=e,t.push(e)}this.subtabs=t,this._currentSubtab=qne(this.id,t)}get name(){return this.config.name}get key(){return this.config.key}get id(){return this.config.id}get isPermanentlyHidden(){return this.config.hideAte.isAvailable));return(0!==(player.options.hiddenTabBits&1<e.hasNotification))}show(e,t){if(!e&&!player.options.automaticTabSwitching||Quote.isOpen)return;void 0!==t?(Enslaved.isRunning||t.unhideTab(),this._currentSubtab=t):ui.view.tab===this.key&&ui.view.initialized&&e?this._currentSubtab=Vne(this.subtabs,this._currentSubtab):this._currentSubtab=qne(this.id,this.subtabs),this._currentSubtab.isUnlocked||this.resetToUnlocked(),this._currentSubtab.isAvailable||this.resetToAvailable(),ui.view.tab=this.key,ui.view.subtab=this._currentSubtab.key;const i=this.key+this._currentSubtab.key;player.tabNotifications.has(i)&&player.tabNotifications.delete(i),e&&Modal.hideAll(),EventHub.dispatch(GAME_EVENT.TAB_CHANGED,this,this._currentSubtab)}unhideTab(){player.options.hiddenTabBits&=~(1<e.isAvailable)),void 0===this._currentSubtab&&(this._currentSubtab=this.subtabs[0],this._currentSubtab.unhideTab())}resetToUnlocked(){this._currentSubtab=this.subtabs.find((e=>e.isUnlocked))}}const Wne=GameDatabase.tabs.mapToObject((e=>e.key),(e=>new Yne(e))),jne=function(){return{all:Object.values(Wne),get current(){return jne.all.find((e=>e.isOpen))},Classic:[Wne.dimensions,Wne.options,Wne.statistics,Wne.achievements,Wne.automation,Wne.challenges,Wne.infinity,Wne.eternity,Wne.reality,Wne.celestials,Wne.mending,Wne.shop],Modern:[Wne.dimensions,Wne.automation,Wne.challenges,Wne.infinity,Wne.eternity,Wne.reality,Wne.celestials,Wne.mending,Wne.achievements,Wne.statistics,Wne.options,Wne.shop],Synergism:[Wne.dimensions,Wne.automation,Wne.achievements,Wne.infinity,Wne.challenges,Wne.eternity,Wne.reality,Wne.celestials,Wne.mending,Wne.options,Wne.statistics,Wne.shop],get currentUIFormat(){return"Modern"==ui.view.UIType?this.Modern:"Classic"==ui.view.UIType?this.Classic:this.Synergism}}}(),Xne=()=>{jne.all.filter((e=>e.isUnlocked&&e.hidable)).every((e=>e.isHidden))&&SecretAchievement(47).unlock()};EventHub.logic.on(GAME_EVENT.TAB_CHANGED,(()=>{const e=jne.current.id;player.options.lastOpenTab=e,player.options.lastOpenSubtab[e]=jne.current._currentSubtab.id}));class zne{constructor(e){if(this.config=e,e.events)for(const t of e.events)EventHub.logic.on(t,this.tryTrigger.bind(this),this)}get triggered(){return player.triggeredTabNotificationBits&1<e.parent+e.tab)).forEach((t=>{t!==e&&player.tabNotifications.add(t)})),player.triggeredTabNotificationBits|=1<e.config.key===t.parent)),i=e.subtabs.find((e=>e.key===t.tab));e.unhideTab(),i.unhideTab()}}clearTrigger(){player.triggeredTabNotificationBits&=-1-(1<e.parent+e.tab)).forEach((e=>player.tabNotifications.delete(e)))}}const Kne=mapGameDataToObject(GameDatabase.tabNotifications,(e=>new zne(e)));class Zne{constructor(e,t){switch(this.lines=[],this.warnings=[],t){case"Climb EP":this.templateClimbEP(e);break;case"Grind Eternities":this.templateGrindEternities(e);break;case"Grind Infinities":this.templateGrindInfinities(e);break;case"Complete Eternity Challenge":this.templateDoEC(e);break;case"Unlock Dilation":this.templateUnlockDilation(e);break;default:throw new Error(`Unrecognized template name ${t} in ScriptTemplate`)}}format(e){return"number"===typeof e?Math.round(e):e.lte(1e3)?e.toNumber().toFixed(2):`${e.mantissa.toFixed(2)}e${e.exponent}`}storeTreeData(e){const t=e.treeNowait?" nowait":"";if(e.treePreset){const i=player.timestudy.presets.map(((e,t)=>(0,B.Z)((0,B.Z)({},e),{},{id:t+1}))).find((t=>t.name===e.treePreset||t.id===Number(e.treePreset))),a=i.name?`name ${i.name}`:`id ${i.id}`;this.storedTreeStr=`studies${t} load ${a}`,this.storedTreeObj=new TimeStudyTree(i.studies)}else this.storedTreeStr=`studies${t} purchase ${e.treeStudies}`,this.storedTreeObj=new TimeStudyTree(e.treeStudies);this.storedTreeObj.invalidStudies.length>0&&this.warnings.push("Tree contains invalid Study IDs"),this.storedTreeObj.purchasedStudies.length ${this.format(e.eternities)}`),this.lines.push("auto eternity off")}templateGrindInfinities(e){if(this.lines.push("// Template: Grind Infinities"),this.lines.push(`notify "Running Template Grind Infinities (to ${format(e.infinities)})"`),this.storeTreeData(e),this.lines.push(this.storedTreeStr),this.lines.push("auto eternity off"),this.lines.push("auto infinity 5s"),e.isBanked){const t=this.storedTreeObj.purchasedStudies.includes(TimeStudy(191));t||this.warnings.push(`TS191 is not reachable from an empty tree; banking anything in this template\n will require Achievement "${Achievement(131).name}"`);const i=t?.1:.05;this.lines.push("// Note: This template attempts to get all the Banked Infinities within a single Eternity"),this.lines.push(`wait infinities > ${this.format(e.infinities.dividedBy(i),2)}`),this.lines.push("eternity")}else this.lines.push(`wait infinities > ${this.format(e.infinities,2)}`)}templateDoEC(e){this.lines.push("// Template: Complete Eternity Challenge"),this.lines.push(`notify "Running Template Complete Eternity Challenge (EC${e.ec})"`),this.lines.push("eternity respec"),this.storeTreeData(e),this.lines.push(this.storedTreeStr);const t=this.storedTreeObj;0===t.ec?(this.lines.push(`unlock ec ${e.ec}`),t.hasRequirements(TimeStudy.eternityChallenge(e.ec),!0)||this.warnings.push("Specified Study Tree cannot reach specified EC")):t.ec!==e.ec&&this.warnings.push("Specified Study Tree already has a different EC unlocked"),this.lines.push(`auto infinity ${this.parseAutobuyerProp(e.autoInfMode,e.autoInfValue)}`),this.lines.push("auto eternity off"),TimeStudy.eternityChallenge(e.ec)||this.warnings.push("Specified template EC does not exist"),this.lines.push(`start ec ${e.ec}`),e.completions>5&&this.warnings.push(`ECs cannot be completed more than ${formatInt(5)} times`),this.lines.push(`wait pending completions >= ${e.completions}`),this.lines.push("eternity")}templateUnlockDilation(e){this.lines.push("// Template: Unlock Dilation"),this.lines.push('notify "Running Template Unlock Dilation"'),this.storeTreeData(e),[231,232,233,234].some((e=>this.storedTreeObj.purchasedStudies.includes(TimeStudy(e))))||this.warnings.push("Specified Study Tree cannot reach Dilation"),this.lines.push("auto infinity off"),this.lines.push(`auto eternity ${this.parseAutobuyerProp(e.autoEterMode,e.autoEterValue)}`),this.lines.push(`while total tt < ${this.format(TimeStudy.dilation.totalTimeTheoremRequirement)} {`),this.lines.push(` ${this.storedTreeStr}`),this.lines.push(" studies respec"),this.lines.push(" wait eternity"),this.lines.push("}"),this.lines.push("unlock dilation")}get script(){return this.lines.join("\n")}}function Qne(e){for(const t in e){if("default"===t)continue;const i=e[t],a=window[t];if(void 0!==a)throw`Property ${t} already exists in global context`;window[t]=i}}function Jne(){if(isLocalEnvironment())return;const e="commit.json";let t;function i(){fetch(e,{method:"GET"}).then((e=>e.json())).then((e=>{var i;void 0!==e&&(t=null!==(i=t)&&void 0!==i?i:e.sha,t!==e.sha&&Modal.message.show(`Refresh the page (game will be saved), we've got new stuff: "${e.message}" - Redemption Dev Team`,{callback:updateRefresh,closeButton:!0},3))}))}setInterval(i,6e4)}Qne(a),Qne(n),Qne(s),Qne(r),Qne(o),Qne(l),Qne(u),Qne(c),Zp()&&Qp(),y&&Jne()}},t={};function i(a){var n=t[a];if(void 0!==n)return n.exports;var s=t[a]={id:a,loaded:!1,exports:{}};return e[a].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}i.m=e,(()=>{i.amdO={}})(),(()=>{var e=[];i.O=(t,a,n,s)=>{if(!a){var r=1/0;for(u=0;u=s)&&Object.keys(i.O).every((e=>i.O[e](a[l])))?a.splice(l--,1):(o=!1,s0&&e[u-1][2]>s;u--)e[u]=e[u-1];e[u]=[a,n,s]}})(),(()=>{i.n=e=>{var t=e&&e.__esModule?()=>e["default"]:()=>e;return i.d(t,{a:t}),t}})(),(()=>{i.d=(e,t)=>{for(var a in t)i.o(t,a)&&!i.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})}})(),(()=>{i.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()})(),(()=>{i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{i.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})(),(()=>{i.nmd=e=>(e.paths=[],e.children||(e.children=[]),e)})(),(()=>{var e={143:0};i.O.j=t=>0===e[t];var t=(t,a)=>{var n,s,r=a[0],o=a[1],l=a[2],c=0;if(r.some((t=>0!==e[t]))){for(n in o)i.o(o,n)&&(i.m[n]=o[n]);if(l)var u=l(i)}for(t&&t(a);ci(2233)));a=i.O(a)})(); -//# sourceMappingURL=app.590d8137.js.map \ No newline at end of file